<!doctype html>
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="data:text/css; charset=utf-8;charset=utf-8,%3Aroot%7B%2D%2Dblue%3A%23007bff%3B%2D%2Dindigo%3A%236610f2%3B%2D%2Dpurple%3A%236f42c1%3B%2D%2Dpink%3A%23e83e8c%3B%2D%2Dred%3A%23dc3545%3B%2D%2Dorange%3A%23fd7e14%3B%2D%2Dyellow%3A%23ffc107%3B%2D%2Dgreen%3A%2328a745%3B%2D%2Dteal%3A%2320c997%3B%2D%2Dcyan%3A%2317a2b8%3B%2D%2Dwhite%3A%23fff%3B%2D%2Dgray%3A%236c757d%3B%2D%2Dgray%2Ddark%3A%23343a40%3B%2D%2Dprimary%3A%23007bff%3B%2D%2Dsecondary%3A%236c757d%3B%2D%2Dsuccess%3A%2328a745%3B%2D%2Dinfo%3A%2317a2b8%3B%2D%2Dwarning%3A%23ffc107%3B%2D%2Ddanger%3A%23dc3545%3B%2D%2Dlight%3A%23f8f9fa%3B%2D%2Ddark%3A%23343a40%3B%2D%2Dbreakpoint%2Dxs%3A0%3B%2D%2Dbreakpoint%2Dsm%3A576px%3B%2D%2Dbreakpoint%2Dmd%3A768px%3B%2D%2Dbreakpoint%2Dlg%3A992px%3B%2D%2Dbreakpoint%2Dxl%3A1200px%3B%2D%2Dfont%2Dfamily%2Dsans%2Dserif%3A%2Dapple%2Dsystem%2CBlinkMacSystemFont%2C%22Segoe%20UI%22%2CRoboto%2C%22Helvetica%20Neue%22%2CArial%2C%22Noto%20Sans%22%2Csans%2Dserif%2C%22Apple%20Color%20Emoji%22%2C%22Segoe%20UI%20Emoji%22%2C%22Segoe%20UI%20Symbol%22%2C%22Noto%20Color%20Emoji%22%3B%2D%2Dfont%2Dfamily%2Dmonospace%3ASFMono%2DRegular%2CMenlo%2CMonaco%2CConsolas%2C%22Liberation%20Mono%22%2C%22Courier%20New%22%2Cmonospace%7D%2A%2C%3A%3Aafter%2C%3A%3Abefore%7Bbox%2Dsizing%3Aborder%2Dbox%7Dhtml%7Bfont%2Dfamily%3Asans%2Dserif%3Bline%2Dheight%3A1%2E15%3B%2Dwebkit%2Dtext%2Dsize%2Dadjust%3A100%25%3B%2Dwebkit%2Dtap%2Dhighlight%2Dcolor%3Atransparent%7Darticle%2Caside%2Cfigcaption%2Cfigure%2Cfooter%2Cheader%2Chgroup%2Cmain%2Cnav%2Csection%7Bdisplay%3Ablock%7Dbody%7Bmargin%3A0%3Bfont%2Dfamily%3A%2Dapple%2Dsystem%2CBlinkMacSystemFont%2C%22Segoe%20UI%22%2CRoboto%2C%22Helvetica%20Neue%22%2CArial%2C%22Noto%20Sans%22%2Csans%2Dserif%2C%22Apple%20Color%20Emoji%22%2C%22Segoe%20UI%20Emoji%22%2C%22Segoe%20UI%20Symbol%22%2C%22Noto%20Color%20Emoji%22%3Bfont%2Dsize%3A1rem%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E5%3Bcolor%3A%23212529%3Btext%2Dalign%3Aleft%3Bbackground%2Dcolor%3A%23fff%7D%5Btabindex%3D%22%2D1%22%5D%3Afocus%3Anot%28%3Afocus%2Dvisible%29%7Boutline%3A0%21important%7Dhr%7Bbox%2Dsizing%3Acontent%2Dbox%3Bheight%3A0%3Boverflow%3Avisible%7Dh1%2Ch2%2Ch3%2Ch4%2Ch5%2Ch6%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A%2E5rem%7Dp%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A1rem%7Dabbr%5Bdata%2Doriginal%2Dtitle%5D%2Cabbr%5Btitle%5D%7Btext%2Ddecoration%3Aunderline%3B%2Dwebkit%2Dtext%2Ddecoration%3Aunderline%20dotted%3Btext%2Ddecoration%3Aunderline%20dotted%3Bcursor%3Ahelp%3Bborder%2Dbottom%3A0%3B%2Dwebkit%2Dtext%2Ddecoration%2Dskip%2Dink%3Anone%3Btext%2Ddecoration%2Dskip%2Dink%3Anone%7Daddress%7Bmargin%2Dbottom%3A1rem%3Bfont%2Dstyle%3Anormal%3Bline%2Dheight%3Ainherit%7Ddl%2Col%2Cul%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A1rem%7Dol%20ol%2Col%20ul%2Cul%20ol%2Cul%20ul%7Bmargin%2Dbottom%3A0%7Ddt%7Bfont%2Dweight%3A700%7Ddd%7Bmargin%2Dbottom%3A%2E5rem%3Bmargin%2Dleft%3A0%7Dblockquote%7Bmargin%3A0%200%201rem%7Db%2Cstrong%7Bfont%2Dweight%3Abolder%7Dsmall%7Bfont%2Dsize%3A80%25%7Dsub%2Csup%7Bposition%3Arelative%3Bfont%2Dsize%3A75%25%3Bline%2Dheight%3A0%3Bvertical%2Dalign%3Abaseline%7Dsub%7Bbottom%3A%2D%2E25em%7Dsup%7Btop%3A%2D%2E5em%7Da%7Bcolor%3A%23007bff%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3Atransparent%7Da%3Ahover%7Bcolor%3A%230056b3%3Btext%2Ddecoration%3Aunderline%7Da%3Anot%28%5Bhref%5D%29%7Bcolor%3Ainherit%3Btext%2Ddecoration%3Anone%7Da%3Anot%28%5Bhref%5D%29%3Ahover%7Bcolor%3Ainherit%3Btext%2Ddecoration%3Anone%7Dcode%2Ckbd%2Cpre%2Csamp%7Bfont%2Dfamily%3ASFMono%2DRegular%2CMenlo%2CMonaco%2CConsolas%2C%22Liberation%20Mono%22%2C%22Courier%20New%22%2Cmonospace%3Bfont%2Dsize%3A1em%7Dpre%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A1rem%3Boverflow%3Aauto%3B%2Dms%2Doverflow%2Dstyle%3Ascrollbar%7Dfigure%7Bmargin%3A0%200%201rem%7Dimg%7Bvertical%2Dalign%3Amiddle%3Bborder%2Dstyle%3Anone%7Dsvg%7Boverflow%3Ahidden%3Bvertical%2Dalign%3Amiddle%7Dtable%7Bborder%2Dcollapse%3Acollapse%7Dcaption%7Bpadding%2Dtop%3A%2E75rem%3Bpadding%2Dbottom%3A%2E75rem%3Bcolor%3A%236c757d%3Btext%2Dalign%3Aleft%3Bcaption%2Dside%3Abottom%7Dth%7Btext%2Dalign%3Ainherit%7Dlabel%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dbottom%3A%2E5rem%7Dbutton%7Bborder%2Dradius%3A0%7Dbutton%3Afocus%7Boutline%3A1px%20dotted%3Boutline%3A5px%20auto%20%2Dwebkit%2Dfocus%2Dring%2Dcolor%7Dbutton%2Cinput%2Coptgroup%2Cselect%2Ctextarea%7Bmargin%3A0%3Bfont%2Dfamily%3Ainherit%3Bfont%2Dsize%3Ainherit%3Bline%2Dheight%3Ainherit%7Dbutton%2Cinput%7Boverflow%3Avisible%7Dbutton%2Cselect%7Btext%2Dtransform%3Anone%7D%5Brole%3Dbutton%5D%7Bcursor%3Apointer%7Dselect%7Bword%2Dwrap%3Anormal%7D%5Btype%3Dbutton%5D%2C%5Btype%3Dreset%5D%2C%5Btype%3Dsubmit%5D%2Cbutton%7B%2Dwebkit%2Dappearance%3Abutton%7D%5Btype%3Dbutton%5D%3Anot%28%3Adisabled%29%2C%5Btype%3Dreset%5D%3Anot%28%3Adisabled%29%2C%5Btype%3Dsubmit%5D%3Anot%28%3Adisabled%29%2Cbutton%3Anot%28%3Adisabled%29%7Bcursor%3Apointer%7D%5Btype%3Dbutton%5D%3A%3A%2Dmoz%2Dfocus%2Dinner%2C%5Btype%3Dreset%5D%3A%3A%2Dmoz%2Dfocus%2Dinner%2C%5Btype%3Dsubmit%5D%3A%3A%2Dmoz%2Dfocus%2Dinner%2Cbutton%3A%3A%2Dmoz%2Dfocus%2Dinner%7Bpadding%3A0%3Bborder%2Dstyle%3Anone%7Dinput%5Btype%3Dcheckbox%5D%2Cinput%5Btype%3Dradio%5D%7Bbox%2Dsizing%3Aborder%2Dbox%3Bpadding%3A0%7Dtextarea%7Boverflow%3Aauto%3Bresize%3Avertical%7Dfieldset%7Bmin%2Dwidth%3A0%3Bpadding%3A0%3Bmargin%3A0%3Bborder%3A0%7Dlegend%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Bmax%2Dwidth%3A100%25%3Bpadding%3A0%3Bmargin%2Dbottom%3A%2E5rem%3Bfont%2Dsize%3A1%2E5rem%3Bline%2Dheight%3Ainherit%3Bcolor%3Ainherit%3Bwhite%2Dspace%3Anormal%7Dprogress%7Bvertical%2Dalign%3Abaseline%7D%5Btype%3Dnumber%5D%3A%3A%2Dwebkit%2Dinner%2Dspin%2Dbutton%2C%5Btype%3Dnumber%5D%3A%3A%2Dwebkit%2Douter%2Dspin%2Dbutton%7Bheight%3Aauto%7D%5Btype%3Dsearch%5D%7Boutline%2Doffset%3A%2D2px%3B%2Dwebkit%2Dappearance%3Anone%7D%5Btype%3Dsearch%5D%3A%3A%2Dwebkit%2Dsearch%2Ddecoration%7B%2Dwebkit%2Dappearance%3Anone%7D%3A%3A%2Dwebkit%2Dfile%2Dupload%2Dbutton%7Bfont%3Ainherit%3B%2Dwebkit%2Dappearance%3Abutton%7Doutput%7Bdisplay%3Ainline%2Dblock%7Dsummary%7Bdisplay%3Alist%2Ditem%3Bcursor%3Apointer%7Dtemplate%7Bdisplay%3Anone%7D%5Bhidden%5D%7Bdisplay%3Anone%21important%7D%2Eh1%2C%2Eh2%2C%2Eh3%2C%2Eh4%2C%2Eh5%2C%2Eh6%2Ch1%2Ch2%2Ch3%2Ch4%2Ch5%2Ch6%7Bmargin%2Dbottom%3A%2E5rem%3Bfont%2Dweight%3A500%3Bline%2Dheight%3A1%2E2%7D%2Eh1%2Ch1%7Bfont%2Dsize%3A2%2E5rem%7D%2Eh2%2Ch2%7Bfont%2Dsize%3A2rem%7D%2Eh3%2Ch3%7Bfont%2Dsize%3A1%2E75rem%7D%2Eh4%2Ch4%7Bfont%2Dsize%3A1%2E5rem%7D%2Eh5%2Ch5%7Bfont%2Dsize%3A1%2E25rem%7D%2Eh6%2Ch6%7Bfont%2Dsize%3A1rem%7D%2Elead%7Bfont%2Dsize%3A1%2E25rem%3Bfont%2Dweight%3A300%7D%2Edisplay%2D1%7Bfont%2Dsize%3A6rem%3Bfont%2Dweight%3A300%3Bline%2Dheight%3A1%2E2%7D%2Edisplay%2D2%7Bfont%2Dsize%3A5%2E5rem%3Bfont%2Dweight%3A300%3Bline%2Dheight%3A1%2E2%7D%2Edisplay%2D3%7Bfont%2Dsize%3A4%2E5rem%3Bfont%2Dweight%3A300%3Bline%2Dheight%3A1%2E2%7D%2Edisplay%2D4%7Bfont%2Dsize%3A3%2E5rem%3Bfont%2Dweight%3A300%3Bline%2Dheight%3A1%2E2%7Dhr%7Bmargin%2Dtop%3A1rem%3Bmargin%2Dbottom%3A1rem%3Bborder%3A0%3Bborder%2Dtop%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E1%29%7D%2Esmall%2Csmall%7Bfont%2Dsize%3A80%25%3Bfont%2Dweight%3A400%7D%2Emark%2Cmark%7Bpadding%3A%2E2em%3Bbackground%2Dcolor%3A%23fcf8e3%7D%2Elist%2Dunstyled%7Bpadding%2Dleft%3A0%3Blist%2Dstyle%3Anone%7D%2Elist%2Dinline%7Bpadding%2Dleft%3A0%3Blist%2Dstyle%3Anone%7D%2Elist%2Dinline%2Ditem%7Bdisplay%3Ainline%2Dblock%7D%2Elist%2Dinline%2Ditem%3Anot%28%3Alast%2Dchild%29%7Bmargin%2Dright%3A%2E5rem%7D%2Einitialism%7Bfont%2Dsize%3A90%25%3Btext%2Dtransform%3Auppercase%7D%2Eblockquote%7Bmargin%2Dbottom%3A1rem%3Bfont%2Dsize%3A1%2E25rem%7D%2Eblockquote%2Dfooter%7Bdisplay%3Ablock%3Bfont%2Dsize%3A80%25%3Bcolor%3A%236c757d%7D%2Eblockquote%2Dfooter%3A%3Abefore%7Bcontent%3A%22%5C2014%5C00A0%22%7D%2Eimg%2Dfluid%7Bmax%2Dwidth%3A100%25%3Bheight%3Aauto%7D%2Eimg%2Dthumbnail%7Bpadding%3A%2E25rem%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23dee2e6%3Bborder%2Dradius%3A%2E25rem%3Bmax%2Dwidth%3A100%25%3Bheight%3Aauto%7D%2Efigure%7Bdisplay%3Ainline%2Dblock%7D%2Efigure%2Dimg%7Bmargin%2Dbottom%3A%2E5rem%3Bline%2Dheight%3A1%7D%2Efigure%2Dcaption%7Bfont%2Dsize%3A90%25%3Bcolor%3A%236c757d%7Dcode%7Bfont%2Dsize%3A87%2E5%25%3Bcolor%3A%23e83e8c%3Bword%2Dwrap%3Abreak%2Dword%7Da%3Ecode%7Bcolor%3Ainherit%7Dkbd%7Bpadding%3A%2E2rem%20%2E4rem%3Bfont%2Dsize%3A87%2E5%25%3Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23212529%3Bborder%2Dradius%3A%2E2rem%7Dkbd%20kbd%7Bpadding%3A0%3Bfont%2Dsize%3A100%25%3Bfont%2Dweight%3A700%7Dpre%7Bdisplay%3Ablock%3Bfont%2Dsize%3A87%2E5%25%3Bcolor%3A%23212529%7Dpre%20code%7Bfont%2Dsize%3Ainherit%3Bcolor%3Ainherit%3Bword%2Dbreak%3Anormal%7D%2Epre%2Dscrollable%7Bmax%2Dheight%3A340px%3Boverflow%2Dy%3Ascroll%7D%2Econtainer%7Bwidth%3A100%25%3Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%3Bmargin%2Dright%3Aauto%3Bmargin%2Dleft%3Aauto%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Econtainer%7Bmax%2Dwidth%3A540px%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Econtainer%7Bmax%2Dwidth%3A720px%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Econtainer%7Bmax%2Dwidth%3A960px%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Econtainer%7Bmax%2Dwidth%3A1140px%7D%7D%2Econtainer%2Dfluid%2C%2Econtainer%2Dlg%2C%2Econtainer%2Dmd%2C%2Econtainer%2Dsm%2C%2Econtainer%2Dxl%7Bwidth%3A100%25%3Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%3Bmargin%2Dright%3Aauto%3Bmargin%2Dleft%3Aauto%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Econtainer%2C%2Econtainer%2Dsm%7Bmax%2Dwidth%3A540px%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Econtainer%2C%2Econtainer%2Dmd%2C%2Econtainer%2Dsm%7Bmax%2Dwidth%3A720px%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Econtainer%2C%2Econtainer%2Dlg%2C%2Econtainer%2Dmd%2C%2Econtainer%2Dsm%7Bmax%2Dwidth%3A960px%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Econtainer%2C%2Econtainer%2Dlg%2C%2Econtainer%2Dmd%2C%2Econtainer%2Dsm%2C%2Econtainer%2Dxl%7Bmax%2Dwidth%3A1140px%7D%7D%2Erow%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dwrap%3Awrap%3Bflex%2Dwrap%3Awrap%3Bmargin%2Dright%3A%2D15px%3Bmargin%2Dleft%3A%2D15px%7D%2Eno%2Dgutters%7Bmargin%2Dright%3A0%3Bmargin%2Dleft%3A0%7D%2Eno%2Dgutters%3E%2Ecol%2C%2Eno%2Dgutters%3E%5Bclass%2A%3Dcol%2D%5D%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%2Ecol%2C%2Ecol%2D1%2C%2Ecol%2D10%2C%2Ecol%2D11%2C%2Ecol%2D12%2C%2Ecol%2D2%2C%2Ecol%2D3%2C%2Ecol%2D4%2C%2Ecol%2D5%2C%2Ecol%2D6%2C%2Ecol%2D7%2C%2Ecol%2D8%2C%2Ecol%2D9%2C%2Ecol%2Dauto%2C%2Ecol%2Dlg%2C%2Ecol%2Dlg%2D1%2C%2Ecol%2Dlg%2D10%2C%2Ecol%2Dlg%2D11%2C%2Ecol%2Dlg%2D12%2C%2Ecol%2Dlg%2D2%2C%2Ecol%2Dlg%2D3%2C%2Ecol%2Dlg%2D4%2C%2Ecol%2Dlg%2D5%2C%2Ecol%2Dlg%2D6%2C%2Ecol%2Dlg%2D7%2C%2Ecol%2Dlg%2D8%2C%2Ecol%2Dlg%2D9%2C%2Ecol%2Dlg%2Dauto%2C%2Ecol%2Dmd%2C%2Ecol%2Dmd%2D1%2C%2Ecol%2Dmd%2D10%2C%2Ecol%2Dmd%2D11%2C%2Ecol%2Dmd%2D12%2C%2Ecol%2Dmd%2D2%2C%2Ecol%2Dmd%2D3%2C%2Ecol%2Dmd%2D4%2C%2Ecol%2Dmd%2D5%2C%2Ecol%2Dmd%2D6%2C%2Ecol%2Dmd%2D7%2C%2Ecol%2Dmd%2D8%2C%2Ecol%2Dmd%2D9%2C%2Ecol%2Dmd%2Dauto%2C%2Ecol%2Dsm%2C%2Ecol%2Dsm%2D1%2C%2Ecol%2Dsm%2D10%2C%2Ecol%2Dsm%2D11%2C%2Ecol%2Dsm%2D12%2C%2Ecol%2Dsm%2D2%2C%2Ecol%2Dsm%2D3%2C%2Ecol%2Dsm%2D4%2C%2Ecol%2Dsm%2D5%2C%2Ecol%2Dsm%2D6%2C%2Ecol%2Dsm%2D7%2C%2Ecol%2Dsm%2D8%2C%2Ecol%2Dsm%2D9%2C%2Ecol%2Dsm%2Dauto%2C%2Ecol%2Dxl%2C%2Ecol%2Dxl%2D1%2C%2Ecol%2Dxl%2D10%2C%2Ecol%2Dxl%2D11%2C%2Ecol%2Dxl%2D12%2C%2Ecol%2Dxl%2D2%2C%2Ecol%2Dxl%2D3%2C%2Ecol%2Dxl%2D4%2C%2Ecol%2Dxl%2D5%2C%2Ecol%2Dxl%2D6%2C%2Ecol%2Dxl%2D7%2C%2Ecol%2Dxl%2D8%2C%2Ecol%2Dxl%2D9%2C%2Ecol%2Dxl%2Dauto%7Bposition%3Arelative%3Bwidth%3A100%25%3Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%7D%2Ecol%7B%2Dms%2Dflex%2Dpreferred%2Dsize%3A0%3Bflex%2Dbasis%3A0%3B%2Dms%2Dflex%2Dpositive%3A1%3Bflex%2Dgrow%3A1%3Bmin%2Dwidth%3A0%3Bmax%2Dwidth%3A100%25%7D%2Erow%2Dcols%2D1%3E%2A%7B%2Dms%2Dflex%3A0%200%20100%25%3Bflex%3A0%200%20100%25%3Bmax%2Dwidth%3A100%25%7D%2Erow%2Dcols%2D2%3E%2A%7B%2Dms%2Dflex%3A0%200%2050%25%3Bflex%3A0%200%2050%25%3Bmax%2Dwidth%3A50%25%7D%2Erow%2Dcols%2D3%3E%2A%7B%2Dms%2Dflex%3A0%200%2033%2E333333%25%3Bflex%3A0%200%2033%2E333333%25%3Bmax%2Dwidth%3A33%2E333333%25%7D%2Erow%2Dcols%2D4%3E%2A%7B%2Dms%2Dflex%3A0%200%2025%25%3Bflex%3A0%200%2025%25%3Bmax%2Dwidth%3A25%25%7D%2Erow%2Dcols%2D5%3E%2A%7B%2Dms%2Dflex%3A0%200%2020%25%3Bflex%3A0%200%2020%25%3Bmax%2Dwidth%3A20%25%7D%2Erow%2Dcols%2D6%3E%2A%7B%2Dms%2Dflex%3A0%200%2016%2E666667%25%3Bflex%3A0%200%2016%2E666667%25%3Bmax%2Dwidth%3A16%2E666667%25%7D%2Ecol%2Dauto%7B%2Dms%2Dflex%3A0%200%20auto%3Bflex%3A0%200%20auto%3Bwidth%3Aauto%3Bmax%2Dwidth%3A100%25%7D%2Ecol%2D1%7B%2Dms%2Dflex%3A0%200%208%2E333333%25%3Bflex%3A0%200%208%2E333333%25%3Bmax%2Dwidth%3A8%2E333333%25%7D%2Ecol%2D2%7B%2Dms%2Dflex%3A0%200%2016%2E666667%25%3Bflex%3A0%200%2016%2E666667%25%3Bmax%2Dwidth%3A16%2E666667%25%7D%2Ecol%2D3%7B%2Dms%2Dflex%3A0%200%2025%25%3Bflex%3A0%200%2025%25%3Bmax%2Dwidth%3A25%25%7D%2Ecol%2D4%7B%2Dms%2Dflex%3A0%200%2033%2E333333%25%3Bflex%3A0%200%2033%2E333333%25%3Bmax%2Dwidth%3A33%2E333333%25%7D%2Ecol%2D5%7B%2Dms%2Dflex%3A0%200%2041%2E666667%25%3Bflex%3A0%200%2041%2E666667%25%3Bmax%2Dwidth%3A41%2E666667%25%7D%2Ecol%2D6%7B%2Dms%2Dflex%3A0%200%2050%25%3Bflex%3A0%200%2050%25%3Bmax%2Dwidth%3A50%25%7D%2Ecol%2D7%7B%2Dms%2Dflex%3A0%200%2058%2E333333%25%3Bflex%3A0%200%2058%2E333333%25%3Bmax%2Dwidth%3A58%2E333333%25%7D%2Ecol%2D8%7B%2Dms%2Dflex%3A0%200%2066%2E666667%25%3Bflex%3A0%200%2066%2E666667%25%3Bmax%2Dwidth%3A66%2E666667%25%7D%2Ecol%2D9%7B%2Dms%2Dflex%3A0%200%2075%25%3Bflex%3A0%200%2075%25%3Bmax%2Dwidth%3A75%25%7D%2Ecol%2D10%7B%2Dms%2Dflex%3A0%200%2083%2E333333%25%3Bflex%3A0%200%2083%2E333333%25%3Bmax%2Dwidth%3A83%2E333333%25%7D%2Ecol%2D11%7B%2Dms%2Dflex%3A0%200%2091%2E666667%25%3Bflex%3A0%200%2091%2E666667%25%3Bmax%2Dwidth%3A91%2E666667%25%7D%2Ecol%2D12%7B%2Dms%2Dflex%3A0%200%20100%25%3Bflex%3A0%200%20100%25%3Bmax%2Dwidth%3A100%25%7D%2Eorder%2Dfirst%7B%2Dms%2Dflex%2Dorder%3A%2D1%3Border%3A%2D1%7D%2Eorder%2Dlast%7B%2Dms%2Dflex%2Dorder%3A13%3Border%3A13%7D%2Eorder%2D0%7B%2Dms%2Dflex%2Dorder%3A0%3Border%3A0%7D%2Eorder%2D1%7B%2Dms%2Dflex%2Dorder%3A1%3Border%3A1%7D%2Eorder%2D2%7B%2Dms%2Dflex%2Dorder%3A2%3Border%3A2%7D%2Eorder%2D3%7B%2Dms%2Dflex%2Dorder%3A3%3Border%3A3%7D%2Eorder%2D4%7B%2Dms%2Dflex%2Dorder%3A4%3Border%3A4%7D%2Eorder%2D5%7B%2Dms%2Dflex%2Dorder%3A5%3Border%3A5%7D%2Eorder%2D6%7B%2Dms%2Dflex%2Dorder%3A6%3Border%3A6%7D%2Eorder%2D7%7B%2Dms%2Dflex%2Dorder%3A7%3Border%3A7%7D%2Eorder%2D8%7B%2Dms%2Dflex%2Dorder%3A8%3Border%3A8%7D%2Eorder%2D9%7B%2Dms%2Dflex%2Dorder%3A9%3Border%3A9%7D%2Eorder%2D10%7B%2Dms%2Dflex%2Dorder%3A10%3Border%3A10%7D%2Eorder%2D11%7B%2Dms%2Dflex%2Dorder%3A11%3Border%3A11%7D%2Eorder%2D12%7B%2Dms%2Dflex%2Dorder%3A12%3Border%3A12%7D%2Eoffset%2D1%7Bmargin%2Dleft%3A8%2E333333%25%7D%2Eoffset%2D2%7Bmargin%2Dleft%3A16%2E666667%25%7D%2Eoffset%2D3%7Bmargin%2Dleft%3A25%25%7D%2Eoffset%2D4%7Bmargin%2Dleft%3A33%2E333333%25%7D%2Eoffset%2D5%7Bmargin%2Dleft%3A41%2E666667%25%7D%2Eoffset%2D6%7Bmargin%2Dleft%3A50%25%7D%2Eoffset%2D7%7Bmargin%2Dleft%3A58%2E333333%25%7D%2Eoffset%2D8%7Bmargin%2Dleft%3A66%2E666667%25%7D%2Eoffset%2D9%7Bmargin%2Dleft%3A75%25%7D%2Eoffset%2D10%7Bmargin%2Dleft%3A83%2E333333%25%7D%2Eoffset%2D11%7Bmargin%2Dleft%3A91%2E666667%25%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Ecol%2Dsm%7B%2Dms%2Dflex%2Dpreferred%2Dsize%3A0%3Bflex%2Dbasis%3A0%3B%2Dms%2Dflex%2Dpositive%3A1%3Bflex%2Dgrow%3A1%3Bmin%2Dwidth%3A0%3Bmax%2Dwidth%3A100%25%7D%2Erow%2Dcols%2Dsm%2D1%3E%2A%7B%2Dms%2Dflex%3A0%200%20100%25%3Bflex%3A0%200%20100%25%3Bmax%2Dwidth%3A100%25%7D%2Erow%2Dcols%2Dsm%2D2%3E%2A%7B%2Dms%2Dflex%3A0%200%2050%25%3Bflex%3A0%200%2050%25%3Bmax%2Dwidth%3A50%25%7D%2Erow%2Dcols%2Dsm%2D3%3E%2A%7B%2Dms%2Dflex%3A0%200%2033%2E333333%25%3Bflex%3A0%200%2033%2E333333%25%3Bmax%2Dwidth%3A33%2E333333%25%7D%2Erow%2Dcols%2Dsm%2D4%3E%2A%7B%2Dms%2Dflex%3A0%200%2025%25%3Bflex%3A0%200%2025%25%3Bmax%2Dwidth%3A25%25%7D%2Erow%2Dcols%2Dsm%2D5%3E%2A%7B%2Dms%2Dflex%3A0%200%2020%25%3Bflex%3A0%200%2020%25%3Bmax%2Dwidth%3A20%25%7D%2Erow%2Dcols%2Dsm%2D6%3E%2A%7B%2Dms%2Dflex%3A0%200%2016%2E666667%25%3Bflex%3A0%200%2016%2E666667%25%3Bmax%2Dwidth%3A16%2E666667%25%7D%2Ecol%2Dsm%2Dauto%7B%2Dms%2Dflex%3A0%200%20auto%3Bflex%3A0%200%20auto%3Bwidth%3Aauto%3Bmax%2Dwidth%3A100%25%7D%2Ecol%2Dsm%2D1%7B%2Dms%2Dflex%3A0%200%208%2E333333%25%3Bflex%3A0%200%208%2E333333%25%3Bmax%2Dwidth%3A8%2E333333%25%7D%2Ecol%2Dsm%2D2%7B%2Dms%2Dflex%3A0%200%2016%2E666667%25%3Bflex%3A0%200%2016%2E666667%25%3Bmax%2Dwidth%3A16%2E666667%25%7D%2Ecol%2Dsm%2D3%7B%2Dms%2Dflex%3A0%200%2025%25%3Bflex%3A0%200%2025%25%3Bmax%2Dwidth%3A25%25%7D%2Ecol%2Dsm%2D4%7B%2Dms%2Dflex%3A0%200%2033%2E333333%25%3Bflex%3A0%200%2033%2E333333%25%3Bmax%2Dwidth%3A33%2E333333%25%7D%2Ecol%2Dsm%2D5%7B%2Dms%2Dflex%3A0%200%2041%2E666667%25%3Bflex%3A0%200%2041%2E666667%25%3Bmax%2Dwidth%3A41%2E666667%25%7D%2Ecol%2Dsm%2D6%7B%2Dms%2Dflex%3A0%200%2050%25%3Bflex%3A0%200%2050%25%3Bmax%2Dwidth%3A50%25%7D%2Ecol%2Dsm%2D7%7B%2Dms%2Dflex%3A0%200%2058%2E333333%25%3Bflex%3A0%200%2058%2E333333%25%3Bmax%2Dwidth%3A58%2E333333%25%7D%2Ecol%2Dsm%2D8%7B%2Dms%2Dflex%3A0%200%2066%2E666667%25%3Bflex%3A0%200%2066%2E666667%25%3Bmax%2Dwidth%3A66%2E666667%25%7D%2Ecol%2Dsm%2D9%7B%2Dms%2Dflex%3A0%200%2075%25%3Bflex%3A0%200%2075%25%3Bmax%2Dwidth%3A75%25%7D%2Ecol%2Dsm%2D10%7B%2Dms%2Dflex%3A0%200%2083%2E333333%25%3Bflex%3A0%200%2083%2E333333%25%3Bmax%2Dwidth%3A83%2E333333%25%7D%2Ecol%2Dsm%2D11%7B%2Dms%2Dflex%3A0%200%2091%2E666667%25%3Bflex%3A0%200%2091%2E666667%25%3Bmax%2Dwidth%3A91%2E666667%25%7D%2Ecol%2Dsm%2D12%7B%2Dms%2Dflex%3A0%200%20100%25%3Bflex%3A0%200%20100%25%3Bmax%2Dwidth%3A100%25%7D%2Eorder%2Dsm%2Dfirst%7B%2Dms%2Dflex%2Dorder%3A%2D1%3Border%3A%2D1%7D%2Eorder%2Dsm%2Dlast%7B%2Dms%2Dflex%2Dorder%3A13%3Border%3A13%7D%2Eorder%2Dsm%2D0%7B%2Dms%2Dflex%2Dorder%3A0%3Border%3A0%7D%2Eorder%2Dsm%2D1%7B%2Dms%2Dflex%2Dorder%3A1%3Border%3A1%7D%2Eorder%2Dsm%2D2%7B%2Dms%2Dflex%2Dorder%3A2%3Border%3A2%7D%2Eorder%2Dsm%2D3%7B%2Dms%2Dflex%2Dorder%3A3%3Border%3A3%7D%2Eorder%2Dsm%2D4%7B%2Dms%2Dflex%2Dorder%3A4%3Border%3A4%7D%2Eorder%2Dsm%2D5%7B%2Dms%2Dflex%2Dorder%3A5%3Border%3A5%7D%2Eorder%2Dsm%2D6%7B%2Dms%2Dflex%2Dorder%3A6%3Border%3A6%7D%2Eorder%2Dsm%2D7%7B%2Dms%2Dflex%2Dorder%3A7%3Border%3A7%7D%2Eorder%2Dsm%2D8%7B%2Dms%2Dflex%2Dorder%3A8%3Border%3A8%7D%2Eorder%2Dsm%2D9%7B%2Dms%2Dflex%2Dorder%3A9%3Border%3A9%7D%2Eorder%2Dsm%2D10%7B%2Dms%2Dflex%2Dorder%3A10%3Border%3A10%7D%2Eorder%2Dsm%2D11%7B%2Dms%2Dflex%2Dorder%3A11%3Border%3A11%7D%2Eorder%2Dsm%2D12%7B%2Dms%2Dflex%2Dorder%3A12%3Border%3A12%7D%2Eoffset%2Dsm%2D0%7Bmargin%2Dleft%3A0%7D%2Eoffset%2Dsm%2D1%7Bmargin%2Dleft%3A8%2E333333%25%7D%2Eoffset%2Dsm%2D2%7Bmargin%2Dleft%3A16%2E666667%25%7D%2Eoffset%2Dsm%2D3%7Bmargin%2Dleft%3A25%25%7D%2Eoffset%2Dsm%2D4%7Bmargin%2Dleft%3A33%2E333333%25%7D%2Eoffset%2Dsm%2D5%7Bmargin%2Dleft%3A41%2E666667%25%7D%2Eoffset%2Dsm%2D6%7Bmargin%2Dleft%3A50%25%7D%2Eoffset%2Dsm%2D7%7Bmargin%2Dleft%3A58%2E333333%25%7D%2Eoffset%2Dsm%2D8%7Bmargin%2Dleft%3A66%2E666667%25%7D%2Eoffset%2Dsm%2D9%7Bmargin%2Dleft%3A75%25%7D%2Eoffset%2Dsm%2D10%7Bmargin%2Dleft%3A83%2E333333%25%7D%2Eoffset%2Dsm%2D11%7Bmargin%2Dleft%3A91%2E666667%25%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Ecol%2Dmd%7B%2Dms%2Dflex%2Dpreferred%2Dsize%3A0%3Bflex%2Dbasis%3A0%3B%2Dms%2Dflex%2Dpositive%3A1%3Bflex%2Dgrow%3A1%3Bmin%2Dwidth%3A0%3Bmax%2Dwidth%3A100%25%7D%2Erow%2Dcols%2Dmd%2D1%3E%2A%7B%2Dms%2Dflex%3A0%200%20100%25%3Bflex%3A0%200%20100%25%3Bmax%2Dwidth%3A100%25%7D%2Erow%2Dcols%2Dmd%2D2%3E%2A%7B%2Dms%2Dflex%3A0%200%2050%25%3Bflex%3A0%200%2050%25%3Bmax%2Dwidth%3A50%25%7D%2Erow%2Dcols%2Dmd%2D3%3E%2A%7B%2Dms%2Dflex%3A0%200%2033%2E333333%25%3Bflex%3A0%200%2033%2E333333%25%3Bmax%2Dwidth%3A33%2E333333%25%7D%2Erow%2Dcols%2Dmd%2D4%3E%2A%7B%2Dms%2Dflex%3A0%200%2025%25%3Bflex%3A0%200%2025%25%3Bmax%2Dwidth%3A25%25%7D%2Erow%2Dcols%2Dmd%2D5%3E%2A%7B%2Dms%2Dflex%3A0%200%2020%25%3Bflex%3A0%200%2020%25%3Bmax%2Dwidth%3A20%25%7D%2Erow%2Dcols%2Dmd%2D6%3E%2A%7B%2Dms%2Dflex%3A0%200%2016%2E666667%25%3Bflex%3A0%200%2016%2E666667%25%3Bmax%2Dwidth%3A16%2E666667%25%7D%2Ecol%2Dmd%2Dauto%7B%2Dms%2Dflex%3A0%200%20auto%3Bflex%3A0%200%20auto%3Bwidth%3Aauto%3Bmax%2Dwidth%3A100%25%7D%2Ecol%2Dmd%2D1%7B%2Dms%2Dflex%3A0%200%208%2E333333%25%3Bflex%3A0%200%208%2E333333%25%3Bmax%2Dwidth%3A8%2E333333%25%7D%2Ecol%2Dmd%2D2%7B%2Dms%2Dflex%3A0%200%2016%2E666667%25%3Bflex%3A0%200%2016%2E666667%25%3Bmax%2Dwidth%3A16%2E666667%25%7D%2Ecol%2Dmd%2D3%7B%2Dms%2Dflex%3A0%200%2025%25%3Bflex%3A0%200%2025%25%3Bmax%2Dwidth%3A25%25%7D%2Ecol%2Dmd%2D4%7B%2Dms%2Dflex%3A0%200%2033%2E333333%25%3Bflex%3A0%200%2033%2E333333%25%3Bmax%2Dwidth%3A33%2E333333%25%7D%2Ecol%2Dmd%2D5%7B%2Dms%2Dflex%3A0%200%2041%2E666667%25%3Bflex%3A0%200%2041%2E666667%25%3Bmax%2Dwidth%3A41%2E666667%25%7D%2Ecol%2Dmd%2D6%7B%2Dms%2Dflex%3A0%200%2050%25%3Bflex%3A0%200%2050%25%3Bmax%2Dwidth%3A50%25%7D%2Ecol%2Dmd%2D7%7B%2Dms%2Dflex%3A0%200%2058%2E333333%25%3Bflex%3A0%200%2058%2E333333%25%3Bmax%2Dwidth%3A58%2E333333%25%7D%2Ecol%2Dmd%2D8%7B%2Dms%2Dflex%3A0%200%2066%2E666667%25%3Bflex%3A0%200%2066%2E666667%25%3Bmax%2Dwidth%3A66%2E666667%25%7D%2Ecol%2Dmd%2D9%7B%2Dms%2Dflex%3A0%200%2075%25%3Bflex%3A0%200%2075%25%3Bmax%2Dwidth%3A75%25%7D%2Ecol%2Dmd%2D10%7B%2Dms%2Dflex%3A0%200%2083%2E333333%25%3Bflex%3A0%200%2083%2E333333%25%3Bmax%2Dwidth%3A83%2E333333%25%7D%2Ecol%2Dmd%2D11%7B%2Dms%2Dflex%3A0%200%2091%2E666667%25%3Bflex%3A0%200%2091%2E666667%25%3Bmax%2Dwidth%3A91%2E666667%25%7D%2Ecol%2Dmd%2D12%7B%2Dms%2Dflex%3A0%200%20100%25%3Bflex%3A0%200%20100%25%3Bmax%2Dwidth%3A100%25%7D%2Eorder%2Dmd%2Dfirst%7B%2Dms%2Dflex%2Dorder%3A%2D1%3Border%3A%2D1%7D%2Eorder%2Dmd%2Dlast%7B%2Dms%2Dflex%2Dorder%3A13%3Border%3A13%7D%2Eorder%2Dmd%2D0%7B%2Dms%2Dflex%2Dorder%3A0%3Border%3A0%7D%2Eorder%2Dmd%2D1%7B%2Dms%2Dflex%2Dorder%3A1%3Border%3A1%7D%2Eorder%2Dmd%2D2%7B%2Dms%2Dflex%2Dorder%3A2%3Border%3A2%7D%2Eorder%2Dmd%2D3%7B%2Dms%2Dflex%2Dorder%3A3%3Border%3A3%7D%2Eorder%2Dmd%2D4%7B%2Dms%2Dflex%2Dorder%3A4%3Border%3A4%7D%2Eorder%2Dmd%2D5%7B%2Dms%2Dflex%2Dorder%3A5%3Border%3A5%7D%2Eorder%2Dmd%2D6%7B%2Dms%2Dflex%2Dorder%3A6%3Border%3A6%7D%2Eorder%2Dmd%2D7%7B%2Dms%2Dflex%2Dorder%3A7%3Border%3A7%7D%2Eorder%2Dmd%2D8%7B%2Dms%2Dflex%2Dorder%3A8%3Border%3A8%7D%2Eorder%2Dmd%2D9%7B%2Dms%2Dflex%2Dorder%3A9%3Border%3A9%7D%2Eorder%2Dmd%2D10%7B%2Dms%2Dflex%2Dorder%3A10%3Border%3A10%7D%2Eorder%2Dmd%2D11%7B%2Dms%2Dflex%2Dorder%3A11%3Border%3A11%7D%2Eorder%2Dmd%2D12%7B%2Dms%2Dflex%2Dorder%3A12%3Border%3A12%7D%2Eoffset%2Dmd%2D0%7Bmargin%2Dleft%3A0%7D%2Eoffset%2Dmd%2D1%7Bmargin%2Dleft%3A8%2E333333%25%7D%2Eoffset%2Dmd%2D2%7Bmargin%2Dleft%3A16%2E666667%25%7D%2Eoffset%2Dmd%2D3%7Bmargin%2Dleft%3A25%25%7D%2Eoffset%2Dmd%2D4%7Bmargin%2Dleft%3A33%2E333333%25%7D%2Eoffset%2Dmd%2D5%7Bmargin%2Dleft%3A41%2E666667%25%7D%2Eoffset%2Dmd%2D6%7Bmargin%2Dleft%3A50%25%7D%2Eoffset%2Dmd%2D7%7Bmargin%2Dleft%3A58%2E333333%25%7D%2Eoffset%2Dmd%2D8%7Bmargin%2Dleft%3A66%2E666667%25%7D%2Eoffset%2Dmd%2D9%7Bmargin%2Dleft%3A75%25%7D%2Eoffset%2Dmd%2D10%7Bmargin%2Dleft%3A83%2E333333%25%7D%2Eoffset%2Dmd%2D11%7Bmargin%2Dleft%3A91%2E666667%25%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Ecol%2Dlg%7B%2Dms%2Dflex%2Dpreferred%2Dsize%3A0%3Bflex%2Dbasis%3A0%3B%2Dms%2Dflex%2Dpositive%3A1%3Bflex%2Dgrow%3A1%3Bmin%2Dwidth%3A0%3Bmax%2Dwidth%3A100%25%7D%2Erow%2Dcols%2Dlg%2D1%3E%2A%7B%2Dms%2Dflex%3A0%200%20100%25%3Bflex%3A0%200%20100%25%3Bmax%2Dwidth%3A100%25%7D%2Erow%2Dcols%2Dlg%2D2%3E%2A%7B%2Dms%2Dflex%3A0%200%2050%25%3Bflex%3A0%200%2050%25%3Bmax%2Dwidth%3A50%25%7D%2Erow%2Dcols%2Dlg%2D3%3E%2A%7B%2Dms%2Dflex%3A0%200%2033%2E333333%25%3Bflex%3A0%200%2033%2E333333%25%3Bmax%2Dwidth%3A33%2E333333%25%7D%2Erow%2Dcols%2Dlg%2D4%3E%2A%7B%2Dms%2Dflex%3A0%200%2025%25%3Bflex%3A0%200%2025%25%3Bmax%2Dwidth%3A25%25%7D%2Erow%2Dcols%2Dlg%2D5%3E%2A%7B%2Dms%2Dflex%3A0%200%2020%25%3Bflex%3A0%200%2020%25%3Bmax%2Dwidth%3A20%25%7D%2Erow%2Dcols%2Dlg%2D6%3E%2A%7B%2Dms%2Dflex%3A0%200%2016%2E666667%25%3Bflex%3A0%200%2016%2E666667%25%3Bmax%2Dwidth%3A16%2E666667%25%7D%2Ecol%2Dlg%2Dauto%7B%2Dms%2Dflex%3A0%200%20auto%3Bflex%3A0%200%20auto%3Bwidth%3Aauto%3Bmax%2Dwidth%3A100%25%7D%2Ecol%2Dlg%2D1%7B%2Dms%2Dflex%3A0%200%208%2E333333%25%3Bflex%3A0%200%208%2E333333%25%3Bmax%2Dwidth%3A8%2E333333%25%7D%2Ecol%2Dlg%2D2%7B%2Dms%2Dflex%3A0%200%2016%2E666667%25%3Bflex%3A0%200%2016%2E666667%25%3Bmax%2Dwidth%3A16%2E666667%25%7D%2Ecol%2Dlg%2D3%7B%2Dms%2Dflex%3A0%200%2025%25%3Bflex%3A0%200%2025%25%3Bmax%2Dwidth%3A25%25%7D%2Ecol%2Dlg%2D4%7B%2Dms%2Dflex%3A0%200%2033%2E333333%25%3Bflex%3A0%200%2033%2E333333%25%3Bmax%2Dwidth%3A33%2E333333%25%7D%2Ecol%2Dlg%2D5%7B%2Dms%2Dflex%3A0%200%2041%2E666667%25%3Bflex%3A0%200%2041%2E666667%25%3Bmax%2Dwidth%3A41%2E666667%25%7D%2Ecol%2Dlg%2D6%7B%2Dms%2Dflex%3A0%200%2050%25%3Bflex%3A0%200%2050%25%3Bmax%2Dwidth%3A50%25%7D%2Ecol%2Dlg%2D7%7B%2Dms%2Dflex%3A0%200%2058%2E333333%25%3Bflex%3A0%200%2058%2E333333%25%3Bmax%2Dwidth%3A58%2E333333%25%7D%2Ecol%2Dlg%2D8%7B%2Dms%2Dflex%3A0%200%2066%2E666667%25%3Bflex%3A0%200%2066%2E666667%25%3Bmax%2Dwidth%3A66%2E666667%25%7D%2Ecol%2Dlg%2D9%7B%2Dms%2Dflex%3A0%200%2075%25%3Bflex%3A0%200%2075%25%3Bmax%2Dwidth%3A75%25%7D%2Ecol%2Dlg%2D10%7B%2Dms%2Dflex%3A0%200%2083%2E333333%25%3Bflex%3A0%200%2083%2E333333%25%3Bmax%2Dwidth%3A83%2E333333%25%7D%2Ecol%2Dlg%2D11%7B%2Dms%2Dflex%3A0%200%2091%2E666667%25%3Bflex%3A0%200%2091%2E666667%25%3Bmax%2Dwidth%3A91%2E666667%25%7D%2Ecol%2Dlg%2D12%7B%2Dms%2Dflex%3A0%200%20100%25%3Bflex%3A0%200%20100%25%3Bmax%2Dwidth%3A100%25%7D%2Eorder%2Dlg%2Dfirst%7B%2Dms%2Dflex%2Dorder%3A%2D1%3Border%3A%2D1%7D%2Eorder%2Dlg%2Dlast%7B%2Dms%2Dflex%2Dorder%3A13%3Border%3A13%7D%2Eorder%2Dlg%2D0%7B%2Dms%2Dflex%2Dorder%3A0%3Border%3A0%7D%2Eorder%2Dlg%2D1%7B%2Dms%2Dflex%2Dorder%3A1%3Border%3A1%7D%2Eorder%2Dlg%2D2%7B%2Dms%2Dflex%2Dorder%3A2%3Border%3A2%7D%2Eorder%2Dlg%2D3%7B%2Dms%2Dflex%2Dorder%3A3%3Border%3A3%7D%2Eorder%2Dlg%2D4%7B%2Dms%2Dflex%2Dorder%3A4%3Border%3A4%7D%2Eorder%2Dlg%2D5%7B%2Dms%2Dflex%2Dorder%3A5%3Border%3A5%7D%2Eorder%2Dlg%2D6%7B%2Dms%2Dflex%2Dorder%3A6%3Border%3A6%7D%2Eorder%2Dlg%2D7%7B%2Dms%2Dflex%2Dorder%3A7%3Border%3A7%7D%2Eorder%2Dlg%2D8%7B%2Dms%2Dflex%2Dorder%3A8%3Border%3A8%7D%2Eorder%2Dlg%2D9%7B%2Dms%2Dflex%2Dorder%3A9%3Border%3A9%7D%2Eorder%2Dlg%2D10%7B%2Dms%2Dflex%2Dorder%3A10%3Border%3A10%7D%2Eorder%2Dlg%2D11%7B%2Dms%2Dflex%2Dorder%3A11%3Border%3A11%7D%2Eorder%2Dlg%2D12%7B%2Dms%2Dflex%2Dorder%3A12%3Border%3A12%7D%2Eoffset%2Dlg%2D0%7Bmargin%2Dleft%3A0%7D%2Eoffset%2Dlg%2D1%7Bmargin%2Dleft%3A8%2E333333%25%7D%2Eoffset%2Dlg%2D2%7Bmargin%2Dleft%3A16%2E666667%25%7D%2Eoffset%2Dlg%2D3%7Bmargin%2Dleft%3A25%25%7D%2Eoffset%2Dlg%2D4%7Bmargin%2Dleft%3A33%2E333333%25%7D%2Eoffset%2Dlg%2D5%7Bmargin%2Dleft%3A41%2E666667%25%7D%2Eoffset%2Dlg%2D6%7Bmargin%2Dleft%3A50%25%7D%2Eoffset%2Dlg%2D7%7Bmargin%2Dleft%3A58%2E333333%25%7D%2Eoffset%2Dlg%2D8%7Bmargin%2Dleft%3A66%2E666667%25%7D%2Eoffset%2Dlg%2D9%7Bmargin%2Dleft%3A75%25%7D%2Eoffset%2Dlg%2D10%7Bmargin%2Dleft%3A83%2E333333%25%7D%2Eoffset%2Dlg%2D11%7Bmargin%2Dleft%3A91%2E666667%25%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Ecol%2Dxl%7B%2Dms%2Dflex%2Dpreferred%2Dsize%3A0%3Bflex%2Dbasis%3A0%3B%2Dms%2Dflex%2Dpositive%3A1%3Bflex%2Dgrow%3A1%3Bmin%2Dwidth%3A0%3Bmax%2Dwidth%3A100%25%7D%2Erow%2Dcols%2Dxl%2D1%3E%2A%7B%2Dms%2Dflex%3A0%200%20100%25%3Bflex%3A0%200%20100%25%3Bmax%2Dwidth%3A100%25%7D%2Erow%2Dcols%2Dxl%2D2%3E%2A%7B%2Dms%2Dflex%3A0%200%2050%25%3Bflex%3A0%200%2050%25%3Bmax%2Dwidth%3A50%25%7D%2Erow%2Dcols%2Dxl%2D3%3E%2A%7B%2Dms%2Dflex%3A0%200%2033%2E333333%25%3Bflex%3A0%200%2033%2E333333%25%3Bmax%2Dwidth%3A33%2E333333%25%7D%2Erow%2Dcols%2Dxl%2D4%3E%2A%7B%2Dms%2Dflex%3A0%200%2025%25%3Bflex%3A0%200%2025%25%3Bmax%2Dwidth%3A25%25%7D%2Erow%2Dcols%2Dxl%2D5%3E%2A%7B%2Dms%2Dflex%3A0%200%2020%25%3Bflex%3A0%200%2020%25%3Bmax%2Dwidth%3A20%25%7D%2Erow%2Dcols%2Dxl%2D6%3E%2A%7B%2Dms%2Dflex%3A0%200%2016%2E666667%25%3Bflex%3A0%200%2016%2E666667%25%3Bmax%2Dwidth%3A16%2E666667%25%7D%2Ecol%2Dxl%2Dauto%7B%2Dms%2Dflex%3A0%200%20auto%3Bflex%3A0%200%20auto%3Bwidth%3Aauto%3Bmax%2Dwidth%3A100%25%7D%2Ecol%2Dxl%2D1%7B%2Dms%2Dflex%3A0%200%208%2E333333%25%3Bflex%3A0%200%208%2E333333%25%3Bmax%2Dwidth%3A8%2E333333%25%7D%2Ecol%2Dxl%2D2%7B%2Dms%2Dflex%3A0%200%2016%2E666667%25%3Bflex%3A0%200%2016%2E666667%25%3Bmax%2Dwidth%3A16%2E666667%25%7D%2Ecol%2Dxl%2D3%7B%2Dms%2Dflex%3A0%200%2025%25%3Bflex%3A0%200%2025%25%3Bmax%2Dwidth%3A25%25%7D%2Ecol%2Dxl%2D4%7B%2Dms%2Dflex%3A0%200%2033%2E333333%25%3Bflex%3A0%200%2033%2E333333%25%3Bmax%2Dwidth%3A33%2E333333%25%7D%2Ecol%2Dxl%2D5%7B%2Dms%2Dflex%3A0%200%2041%2E666667%25%3Bflex%3A0%200%2041%2E666667%25%3Bmax%2Dwidth%3A41%2E666667%25%7D%2Ecol%2Dxl%2D6%7B%2Dms%2Dflex%3A0%200%2050%25%3Bflex%3A0%200%2050%25%3Bmax%2Dwidth%3A50%25%7D%2Ecol%2Dxl%2D7%7B%2Dms%2Dflex%3A0%200%2058%2E333333%25%3Bflex%3A0%200%2058%2E333333%25%3Bmax%2Dwidth%3A58%2E333333%25%7D%2Ecol%2Dxl%2D8%7B%2Dms%2Dflex%3A0%200%2066%2E666667%25%3Bflex%3A0%200%2066%2E666667%25%3Bmax%2Dwidth%3A66%2E666667%25%7D%2Ecol%2Dxl%2D9%7B%2Dms%2Dflex%3A0%200%2075%25%3Bflex%3A0%200%2075%25%3Bmax%2Dwidth%3A75%25%7D%2Ecol%2Dxl%2D10%7B%2Dms%2Dflex%3A0%200%2083%2E333333%25%3Bflex%3A0%200%2083%2E333333%25%3Bmax%2Dwidth%3A83%2E333333%25%7D%2Ecol%2Dxl%2D11%7B%2Dms%2Dflex%3A0%200%2091%2E666667%25%3Bflex%3A0%200%2091%2E666667%25%3Bmax%2Dwidth%3A91%2E666667%25%7D%2Ecol%2Dxl%2D12%7B%2Dms%2Dflex%3A0%200%20100%25%3Bflex%3A0%200%20100%25%3Bmax%2Dwidth%3A100%25%7D%2Eorder%2Dxl%2Dfirst%7B%2Dms%2Dflex%2Dorder%3A%2D1%3Border%3A%2D1%7D%2Eorder%2Dxl%2Dlast%7B%2Dms%2Dflex%2Dorder%3A13%3Border%3A13%7D%2Eorder%2Dxl%2D0%7B%2Dms%2Dflex%2Dorder%3A0%3Border%3A0%7D%2Eorder%2Dxl%2D1%7B%2Dms%2Dflex%2Dorder%3A1%3Border%3A1%7D%2Eorder%2Dxl%2D2%7B%2Dms%2Dflex%2Dorder%3A2%3Border%3A2%7D%2Eorder%2Dxl%2D3%7B%2Dms%2Dflex%2Dorder%3A3%3Border%3A3%7D%2Eorder%2Dxl%2D4%7B%2Dms%2Dflex%2Dorder%3A4%3Border%3A4%7D%2Eorder%2Dxl%2D5%7B%2Dms%2Dflex%2Dorder%3A5%3Border%3A5%7D%2Eorder%2Dxl%2D6%7B%2Dms%2Dflex%2Dorder%3A6%3Border%3A6%7D%2Eorder%2Dxl%2D7%7B%2Dms%2Dflex%2Dorder%3A7%3Border%3A7%7D%2Eorder%2Dxl%2D8%7B%2Dms%2Dflex%2Dorder%3A8%3Border%3A8%7D%2Eorder%2Dxl%2D9%7B%2Dms%2Dflex%2Dorder%3A9%3Border%3A9%7D%2Eorder%2Dxl%2D10%7B%2Dms%2Dflex%2Dorder%3A10%3Border%3A10%7D%2Eorder%2Dxl%2D11%7B%2Dms%2Dflex%2Dorder%3A11%3Border%3A11%7D%2Eorder%2Dxl%2D12%7B%2Dms%2Dflex%2Dorder%3A12%3Border%3A12%7D%2Eoffset%2Dxl%2D0%7Bmargin%2Dleft%3A0%7D%2Eoffset%2Dxl%2D1%7Bmargin%2Dleft%3A8%2E333333%25%7D%2Eoffset%2Dxl%2D2%7Bmargin%2Dleft%3A16%2E666667%25%7D%2Eoffset%2Dxl%2D3%7Bmargin%2Dleft%3A25%25%7D%2Eoffset%2Dxl%2D4%7Bmargin%2Dleft%3A33%2E333333%25%7D%2Eoffset%2Dxl%2D5%7Bmargin%2Dleft%3A41%2E666667%25%7D%2Eoffset%2Dxl%2D6%7Bmargin%2Dleft%3A50%25%7D%2Eoffset%2Dxl%2D7%7Bmargin%2Dleft%3A58%2E333333%25%7D%2Eoffset%2Dxl%2D8%7Bmargin%2Dleft%3A66%2E666667%25%7D%2Eoffset%2Dxl%2D9%7Bmargin%2Dleft%3A75%25%7D%2Eoffset%2Dxl%2D10%7Bmargin%2Dleft%3A83%2E333333%25%7D%2Eoffset%2Dxl%2D11%7Bmargin%2Dleft%3A91%2E666667%25%7D%7D%2Etable%7Bwidth%3A100%25%3Bmargin%2Dbottom%3A1rem%3Bcolor%3A%23212529%7D%2Etable%20td%2C%2Etable%20th%7Bpadding%3A%2E75rem%3Bvertical%2Dalign%3Atop%3Bborder%2Dtop%3A1px%20solid%20%23dee2e6%7D%2Etable%20thead%20th%7Bvertical%2Dalign%3Abottom%3Bborder%2Dbottom%3A2px%20solid%20%23dee2e6%7D%2Etable%20tbody%2Btbody%7Bborder%2Dtop%3A2px%20solid%20%23dee2e6%7D%2Etable%2Dsm%20td%2C%2Etable%2Dsm%20th%7Bpadding%3A%2E3rem%7D%2Etable%2Dbordered%7Bborder%3A1px%20solid%20%23dee2e6%7D%2Etable%2Dbordered%20td%2C%2Etable%2Dbordered%20th%7Bborder%3A1px%20solid%20%23dee2e6%7D%2Etable%2Dbordered%20thead%20td%2C%2Etable%2Dbordered%20thead%20th%7Bborder%2Dbottom%2Dwidth%3A2px%7D%2Etable%2Dborderless%20tbody%2Btbody%2C%2Etable%2Dborderless%20td%2C%2Etable%2Dborderless%20th%2C%2Etable%2Dborderless%20thead%20th%7Bborder%3A0%7D%2Etable%2Dstriped%20tbody%20tr%3Anth%2Dof%2Dtype%28odd%29%7Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C%2E05%29%7D%2Etable%2Dhover%20tbody%20tr%3Ahover%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C%2E075%29%7D%2Etable%2Dprimary%2C%2Etable%2Dprimary%3Etd%2C%2Etable%2Dprimary%3Eth%7Bbackground%2Dcolor%3A%23b8daff%7D%2Etable%2Dprimary%20tbody%2Btbody%2C%2Etable%2Dprimary%20td%2C%2Etable%2Dprimary%20th%2C%2Etable%2Dprimary%20thead%20th%7Bborder%2Dcolor%3A%237abaff%7D%2Etable%2Dhover%20%2Etable%2Dprimary%3Ahover%7Bbackground%2Dcolor%3A%239fcdff%7D%2Etable%2Dhover%20%2Etable%2Dprimary%3Ahover%3Etd%2C%2Etable%2Dhover%20%2Etable%2Dprimary%3Ahover%3Eth%7Bbackground%2Dcolor%3A%239fcdff%7D%2Etable%2Dsecondary%2C%2Etable%2Dsecondary%3Etd%2C%2Etable%2Dsecondary%3Eth%7Bbackground%2Dcolor%3A%23d6d8db%7D%2Etable%2Dsecondary%20tbody%2Btbody%2C%2Etable%2Dsecondary%20td%2C%2Etable%2Dsecondary%20th%2C%2Etable%2Dsecondary%20thead%20th%7Bborder%2Dcolor%3A%23b3b7bb%7D%2Etable%2Dhover%20%2Etable%2Dsecondary%3Ahover%7Bbackground%2Dcolor%3A%23c8cbcf%7D%2Etable%2Dhover%20%2Etable%2Dsecondary%3Ahover%3Etd%2C%2Etable%2Dhover%20%2Etable%2Dsecondary%3Ahover%3Eth%7Bbackground%2Dcolor%3A%23c8cbcf%7D%2Etable%2Dsuccess%2C%2Etable%2Dsuccess%3Etd%2C%2Etable%2Dsuccess%3Eth%7Bbackground%2Dcolor%3A%23c3e6cb%7D%2Etable%2Dsuccess%20tbody%2Btbody%2C%2Etable%2Dsuccess%20td%2C%2Etable%2Dsuccess%20th%2C%2Etable%2Dsuccess%20thead%20th%7Bborder%2Dcolor%3A%238fd19e%7D%2Etable%2Dhover%20%2Etable%2Dsuccess%3Ahover%7Bbackground%2Dcolor%3A%23b1dfbb%7D%2Etable%2Dhover%20%2Etable%2Dsuccess%3Ahover%3Etd%2C%2Etable%2Dhover%20%2Etable%2Dsuccess%3Ahover%3Eth%7Bbackground%2Dcolor%3A%23b1dfbb%7D%2Etable%2Dinfo%2C%2Etable%2Dinfo%3Etd%2C%2Etable%2Dinfo%3Eth%7Bbackground%2Dcolor%3A%23bee5eb%7D%2Etable%2Dinfo%20tbody%2Btbody%2C%2Etable%2Dinfo%20td%2C%2Etable%2Dinfo%20th%2C%2Etable%2Dinfo%20thead%20th%7Bborder%2Dcolor%3A%2386cfda%7D%2Etable%2Dhover%20%2Etable%2Dinfo%3Ahover%7Bbackground%2Dcolor%3A%23abdde5%7D%2Etable%2Dhover%20%2Etable%2Dinfo%3Ahover%3Etd%2C%2Etable%2Dhover%20%2Etable%2Dinfo%3Ahover%3Eth%7Bbackground%2Dcolor%3A%23abdde5%7D%2Etable%2Dwarning%2C%2Etable%2Dwarning%3Etd%2C%2Etable%2Dwarning%3Eth%7Bbackground%2Dcolor%3A%23ffeeba%7D%2Etable%2Dwarning%20tbody%2Btbody%2C%2Etable%2Dwarning%20td%2C%2Etable%2Dwarning%20th%2C%2Etable%2Dwarning%20thead%20th%7Bborder%2Dcolor%3A%23ffdf7e%7D%2Etable%2Dhover%20%2Etable%2Dwarning%3Ahover%7Bbackground%2Dcolor%3A%23ffe8a1%7D%2Etable%2Dhover%20%2Etable%2Dwarning%3Ahover%3Etd%2C%2Etable%2Dhover%20%2Etable%2Dwarning%3Ahover%3Eth%7Bbackground%2Dcolor%3A%23ffe8a1%7D%2Etable%2Ddanger%2C%2Etable%2Ddanger%3Etd%2C%2Etable%2Ddanger%3Eth%7Bbackground%2Dcolor%3A%23f5c6cb%7D%2Etable%2Ddanger%20tbody%2Btbody%2C%2Etable%2Ddanger%20td%2C%2Etable%2Ddanger%20th%2C%2Etable%2Ddanger%20thead%20th%7Bborder%2Dcolor%3A%23ed969e%7D%2Etable%2Dhover%20%2Etable%2Ddanger%3Ahover%7Bbackground%2Dcolor%3A%23f1b0b7%7D%2Etable%2Dhover%20%2Etable%2Ddanger%3Ahover%3Etd%2C%2Etable%2Dhover%20%2Etable%2Ddanger%3Ahover%3Eth%7Bbackground%2Dcolor%3A%23f1b0b7%7D%2Etable%2Dlight%2C%2Etable%2Dlight%3Etd%2C%2Etable%2Dlight%3Eth%7Bbackground%2Dcolor%3A%23fdfdfe%7D%2Etable%2Dlight%20tbody%2Btbody%2C%2Etable%2Dlight%20td%2C%2Etable%2Dlight%20th%2C%2Etable%2Dlight%20thead%20th%7Bborder%2Dcolor%3A%23fbfcfc%7D%2Etable%2Dhover%20%2Etable%2Dlight%3Ahover%7Bbackground%2Dcolor%3A%23ececf6%7D%2Etable%2Dhover%20%2Etable%2Dlight%3Ahover%3Etd%2C%2Etable%2Dhover%20%2Etable%2Dlight%3Ahover%3Eth%7Bbackground%2Dcolor%3A%23ececf6%7D%2Etable%2Ddark%2C%2Etable%2Ddark%3Etd%2C%2Etable%2Ddark%3Eth%7Bbackground%2Dcolor%3A%23c6c8ca%7D%2Etable%2Ddark%20tbody%2Btbody%2C%2Etable%2Ddark%20td%2C%2Etable%2Ddark%20th%2C%2Etable%2Ddark%20thead%20th%7Bborder%2Dcolor%3A%2395999c%7D%2Etable%2Dhover%20%2Etable%2Ddark%3Ahover%7Bbackground%2Dcolor%3A%23b9bbbe%7D%2Etable%2Dhover%20%2Etable%2Ddark%3Ahover%3Etd%2C%2Etable%2Dhover%20%2Etable%2Ddark%3Ahover%3Eth%7Bbackground%2Dcolor%3A%23b9bbbe%7D%2Etable%2Dactive%2C%2Etable%2Dactive%3Etd%2C%2Etable%2Dactive%3Eth%7Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C%2E075%29%7D%2Etable%2Dhover%20%2Etable%2Dactive%3Ahover%7Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C%2E075%29%7D%2Etable%2Dhover%20%2Etable%2Dactive%3Ahover%3Etd%2C%2Etable%2Dhover%20%2Etable%2Dactive%3Ahover%3Eth%7Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C%2E075%29%7D%2Etable%20%2Ethead%2Ddark%20th%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23343a40%3Bborder%2Dcolor%3A%23454d55%7D%2Etable%20%2Ethead%2Dlight%20th%7Bcolor%3A%23495057%3Bbackground%2Dcolor%3A%23e9ecef%3Bborder%2Dcolor%3A%23dee2e6%7D%2Etable%2Ddark%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23343a40%7D%2Etable%2Ddark%20td%2C%2Etable%2Ddark%20th%2C%2Etable%2Ddark%20thead%20th%7Bborder%2Dcolor%3A%23454d55%7D%2Etable%2Ddark%2Etable%2Dbordered%7Bborder%3A0%7D%2Etable%2Ddark%2Etable%2Dstriped%20tbody%20tr%3Anth%2Dof%2Dtype%28odd%29%7Bbackground%2Dcolor%3Argba%28255%2C255%2C255%2C%2E05%29%7D%2Etable%2Ddark%2Etable%2Dhover%20tbody%20tr%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3Argba%28255%2C255%2C255%2C%2E075%29%7D%40media%20%28max%2Dwidth%3A575%2E98px%29%7B%2Etable%2Dresponsive%2Dsm%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Boverflow%2Dx%3Aauto%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%7D%2Etable%2Dresponsive%2Dsm%3E%2Etable%2Dbordered%7Bborder%3A0%7D%7D%40media%20%28max%2Dwidth%3A767%2E98px%29%7B%2Etable%2Dresponsive%2Dmd%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Boverflow%2Dx%3Aauto%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%7D%2Etable%2Dresponsive%2Dmd%3E%2Etable%2Dbordered%7Bborder%3A0%7D%7D%40media%20%28max%2Dwidth%3A991%2E98px%29%7B%2Etable%2Dresponsive%2Dlg%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Boverflow%2Dx%3Aauto%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%7D%2Etable%2Dresponsive%2Dlg%3E%2Etable%2Dbordered%7Bborder%3A0%7D%7D%40media%20%28max%2Dwidth%3A1199%2E98px%29%7B%2Etable%2Dresponsive%2Dxl%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Boverflow%2Dx%3Aauto%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%7D%2Etable%2Dresponsive%2Dxl%3E%2Etable%2Dbordered%7Bborder%3A0%7D%7D%2Etable%2Dresponsive%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Boverflow%2Dx%3Aauto%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%7D%2Etable%2Dresponsive%3E%2Etable%2Dbordered%7Bborder%3A0%7D%2Eform%2Dcontrol%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Bheight%3Acalc%281%2E5em%20%2B%20%2E75rem%20%2B%202px%29%3Bpadding%3A%2E375rem%20%2E75rem%3Bfont%2Dsize%3A1rem%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E5%3Bcolor%3A%23495057%3Bbackground%2Dcolor%3A%23fff%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20%23ced4da%3Bborder%2Dradius%3A%2E25rem%3Btransition%3Aborder%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cbox%2Dshadow%20%2E15s%20ease%2Din%2Dout%7D%40media%20%28prefers%2Dreduced%2Dmotion%3Areduce%29%7B%2Eform%2Dcontrol%7Btransition%3Anone%7D%7D%2Eform%2Dcontrol%3A%3A%2Dms%2Dexpand%7Bbackground%2Dcolor%3Atransparent%3Bborder%3A0%7D%2Eform%2Dcontrol%3A%2Dmoz%2Dfocusring%7Bcolor%3Atransparent%3Btext%2Dshadow%3A0%200%200%20%23495057%7D%2Eform%2Dcontrol%3Afocus%7Bcolor%3A%23495057%3Bbackground%2Dcolor%3A%23fff%3Bborder%2Dcolor%3A%2380bdff%3Boutline%3A0%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E25%29%7D%2Eform%2Dcontrol%3A%3A%2Dwebkit%2Dinput%2Dplaceholder%7Bcolor%3A%236c757d%3Bopacity%3A1%7D%2Eform%2Dcontrol%3A%3A%2Dmoz%2Dplaceholder%7Bcolor%3A%236c757d%3Bopacity%3A1%7D%2Eform%2Dcontrol%3A%2Dms%2Dinput%2Dplaceholder%7Bcolor%3A%236c757d%3Bopacity%3A1%7D%2Eform%2Dcontrol%3A%3A%2Dms%2Dinput%2Dplaceholder%7Bcolor%3A%236c757d%3Bopacity%3A1%7D%2Eform%2Dcontrol%3A%3Aplaceholder%7Bcolor%3A%236c757d%3Bopacity%3A1%7D%2Eform%2Dcontrol%3Adisabled%2C%2Eform%2Dcontrol%5Breadonly%5D%7Bbackground%2Dcolor%3A%23e9ecef%3Bopacity%3A1%7Dinput%5Btype%3Ddate%5D%2Eform%2Dcontrol%2Cinput%5Btype%3Ddatetime%2Dlocal%5D%2Eform%2Dcontrol%2Cinput%5Btype%3Dmonth%5D%2Eform%2Dcontrol%2Cinput%5Btype%3Dtime%5D%2Eform%2Dcontrol%7B%2Dwebkit%2Dappearance%3Anone%3B%2Dmoz%2Dappearance%3Anone%3Bappearance%3Anone%7Dselect%2Eform%2Dcontrol%3Afocus%3A%3A%2Dms%2Dvalue%7Bcolor%3A%23495057%3Bbackground%2Dcolor%3A%23fff%7D%2Eform%2Dcontrol%2Dfile%2C%2Eform%2Dcontrol%2Drange%7Bdisplay%3Ablock%3Bwidth%3A100%25%7D%2Ecol%2Dform%2Dlabel%7Bpadding%2Dtop%3Acalc%28%2E375rem%20%2B%201px%29%3Bpadding%2Dbottom%3Acalc%28%2E375rem%20%2B%201px%29%3Bmargin%2Dbottom%3A0%3Bfont%2Dsize%3Ainherit%3Bline%2Dheight%3A1%2E5%7D%2Ecol%2Dform%2Dlabel%2Dlg%7Bpadding%2Dtop%3Acalc%28%2E5rem%20%2B%201px%29%3Bpadding%2Dbottom%3Acalc%28%2E5rem%20%2B%201px%29%3Bfont%2Dsize%3A1%2E25rem%3Bline%2Dheight%3A1%2E5%7D%2Ecol%2Dform%2Dlabel%2Dsm%7Bpadding%2Dtop%3Acalc%28%2E25rem%20%2B%201px%29%3Bpadding%2Dbottom%3Acalc%28%2E25rem%20%2B%201px%29%3Bfont%2Dsize%3A%2E875rem%3Bline%2Dheight%3A1%2E5%7D%2Eform%2Dcontrol%2Dplaintext%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Bpadding%3A%2E375rem%200%3Bmargin%2Dbottom%3A0%3Bfont%2Dsize%3A1rem%3Bline%2Dheight%3A1%2E5%3Bcolor%3A%23212529%3Bbackground%2Dcolor%3Atransparent%3Bborder%3Asolid%20transparent%3Bborder%2Dwidth%3A1px%200%7D%2Eform%2Dcontrol%2Dplaintext%2Eform%2Dcontrol%2Dlg%2C%2Eform%2Dcontrol%2Dplaintext%2Eform%2Dcontrol%2Dsm%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%2Eform%2Dcontrol%2Dsm%7Bheight%3Acalc%281%2E5em%20%2B%20%2E5rem%20%2B%202px%29%3Bpadding%3A%2E25rem%20%2E5rem%3Bfont%2Dsize%3A%2E875rem%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A%2E2rem%7D%2Eform%2Dcontrol%2Dlg%7Bheight%3Acalc%281%2E5em%20%2B%201rem%20%2B%202px%29%3Bpadding%3A%2E5rem%201rem%3Bfont%2Dsize%3A1%2E25rem%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A%2E3rem%7Dselect%2Eform%2Dcontrol%5Bmultiple%5D%2Cselect%2Eform%2Dcontrol%5Bsize%5D%7Bheight%3Aauto%7Dtextarea%2Eform%2Dcontrol%7Bheight%3Aauto%7D%2Eform%2Dgroup%7Bmargin%2Dbottom%3A1rem%7D%2Eform%2Dtext%7Bdisplay%3Ablock%3Bmargin%2Dtop%3A%2E25rem%7D%2Eform%2Drow%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dwrap%3Awrap%3Bflex%2Dwrap%3Awrap%3Bmargin%2Dright%3A%2D5px%3Bmargin%2Dleft%3A%2D5px%7D%2Eform%2Drow%3E%2Ecol%2C%2Eform%2Drow%3E%5Bclass%2A%3Dcol%2D%5D%7Bpadding%2Dright%3A5px%3Bpadding%2Dleft%3A5px%7D%2Eform%2Dcheck%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bpadding%2Dleft%3A1%2E25rem%7D%2Eform%2Dcheck%2Dinput%7Bposition%3Aabsolute%3Bmargin%2Dtop%3A%2E3rem%3Bmargin%2Dleft%3A%2D1%2E25rem%7D%2Eform%2Dcheck%2Dinput%3Adisabled%7E%2Eform%2Dcheck%2Dlabel%2C%2Eform%2Dcheck%2Dinput%5Bdisabled%5D%7E%2Eform%2Dcheck%2Dlabel%7Bcolor%3A%236c757d%7D%2Eform%2Dcheck%2Dlabel%7Bmargin%2Dbottom%3A0%7D%2Eform%2Dcheck%2Dinline%7Bdisplay%3A%2Dms%2Dinline%2Dflexbox%3Bdisplay%3Ainline%2Dflex%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3Bpadding%2Dleft%3A0%3Bmargin%2Dright%3A%2E75rem%7D%2Eform%2Dcheck%2Dinline%20%2Eform%2Dcheck%2Dinput%7Bposition%3Astatic%3Bmargin%2Dtop%3A0%3Bmargin%2Dright%3A%2E3125rem%3Bmargin%2Dleft%3A0%7D%2Evalid%2Dfeedback%7Bdisplay%3Anone%3Bwidth%3A100%25%3Bmargin%2Dtop%3A%2E25rem%3Bfont%2Dsize%3A80%25%3Bcolor%3A%2328a745%7D%2Evalid%2Dtooltip%7Bposition%3Aabsolute%3Btop%3A100%25%3Bz%2Dindex%3A5%3Bdisplay%3Anone%3Bmax%2Dwidth%3A100%25%3Bpadding%3A%2E25rem%20%2E5rem%3Bmargin%2Dtop%3A%2E1rem%3Bfont%2Dsize%3A%2E875rem%3Bline%2Dheight%3A1%2E5%3Bcolor%3A%23fff%3Bbackground%2Dcolor%3Argba%2840%2C167%2C69%2C%2E9%29%3Bborder%2Dradius%3A%2E25rem%7D%2Eis%2Dvalid%7E%2Evalid%2Dfeedback%2C%2Eis%2Dvalid%7E%2Evalid%2Dtooltip%2C%2Ewas%2Dvalidated%20%3Avalid%7E%2Evalid%2Dfeedback%2C%2Ewas%2Dvalidated%20%3Avalid%7E%2Evalid%2Dtooltip%7Bdisplay%3Ablock%7D%2Eform%2Dcontrol%2Eis%2Dvalid%2C%2Ewas%2Dvalidated%20%2Eform%2Dcontrol%3Avalid%7Bborder%2Dcolor%3A%2328a745%3Bpadding%2Dright%3Acalc%281%2E5em%20%2B%20%2E75rem%29%3Bbackground%2Dimage%3Aurl%28%22data%3Aimage%2Fsvg%2Bxml%2C%253csvg%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%20width%3D%278%27%20height%3D%278%27%20viewBox%3D%270%200%208%208%27%253e%253cpath%20fill%3D%27%252328a745%27%20d%3D%27M2%2E3%206%2E73L%2E6%204%2E53c%2D%2E4%2D1%2E04%2E46%2D1%2E4%201%2E1%2D%2E8l1%2E1%201%2E4%203%2E4%2D3%2E8c%2E6%2D%2E63%201%2E6%2D%2E27%201%2E2%2E7l%2D4%204%2E6c%2D%2E43%2E5%2D%2E8%2E4%2D1%2E1%2E1z%27%2F%253e%253c%2Fsvg%253e%22%29%3Bbackground%2Drepeat%3Ano%2Drepeat%3Bbackground%2Dposition%3Aright%20calc%28%2E375em%20%2B%20%2E1875rem%29%20center%3Bbackground%2Dsize%3Acalc%28%2E75em%20%2B%20%2E375rem%29%20calc%28%2E75em%20%2B%20%2E375rem%29%7D%2Eform%2Dcontrol%2Eis%2Dvalid%3Afocus%2C%2Ewas%2Dvalidated%20%2Eform%2Dcontrol%3Avalid%3Afocus%7Bborder%2Dcolor%3A%2328a745%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2840%2C167%2C69%2C%2E25%29%7D%2Ewas%2Dvalidated%20textarea%2Eform%2Dcontrol%3Avalid%2Ctextarea%2Eform%2Dcontrol%2Eis%2Dvalid%7Bpadding%2Dright%3Acalc%281%2E5em%20%2B%20%2E75rem%29%3Bbackground%2Dposition%3Atop%20calc%28%2E375em%20%2B%20%2E1875rem%29%20right%20calc%28%2E375em%20%2B%20%2E1875rem%29%7D%2Ecustom%2Dselect%2Eis%2Dvalid%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dselect%3Avalid%7Bborder%2Dcolor%3A%2328a745%3Bpadding%2Dright%3Acalc%28%2E75em%20%2B%202%2E3125rem%29%3Bbackground%3Aurl%28%22data%3Aimage%2Fsvg%2Bxml%2C%253csvg%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%20width%3D%274%27%20height%3D%275%27%20viewBox%3D%270%200%204%205%27%253e%253cpath%20fill%3D%27%2523343a40%27%20d%3D%27M2%200L0%202h4zm0%205L0%203h4z%27%2F%253e%253c%2Fsvg%253e%22%29%20no%2Drepeat%20right%20%2E75rem%20center%2F8px%2010px%2Curl%28%22data%3Aimage%2Fsvg%2Bxml%2C%253csvg%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%20width%3D%278%27%20height%3D%278%27%20viewBox%3D%270%200%208%208%27%253e%253cpath%20fill%3D%27%252328a745%27%20d%3D%27M2%2E3%206%2E73L%2E6%204%2E53c%2D%2E4%2D1%2E04%2E46%2D1%2E4%201%2E1%2D%2E8l1%2E1%201%2E4%203%2E4%2D3%2E8c%2E6%2D%2E63%201%2E6%2D%2E27%201%2E2%2E7l%2D4%204%2E6c%2D%2E43%2E5%2D%2E8%2E4%2D1%2E1%2E1z%27%2F%253e%253c%2Fsvg%253e%22%29%20%23fff%20no%2Drepeat%20center%20right%201%2E75rem%2Fcalc%28%2E75em%20%2B%20%2E375rem%29%20calc%28%2E75em%20%2B%20%2E375rem%29%7D%2Ecustom%2Dselect%2Eis%2Dvalid%3Afocus%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dselect%3Avalid%3Afocus%7Bborder%2Dcolor%3A%2328a745%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2840%2C167%2C69%2C%2E25%29%7D%2Eform%2Dcheck%2Dinput%2Eis%2Dvalid%7E%2Eform%2Dcheck%2Dlabel%2C%2Ewas%2Dvalidated%20%2Eform%2Dcheck%2Dinput%3Avalid%7E%2Eform%2Dcheck%2Dlabel%7Bcolor%3A%2328a745%7D%2Eform%2Dcheck%2Dinput%2Eis%2Dvalid%7E%2Evalid%2Dfeedback%2C%2Eform%2Dcheck%2Dinput%2Eis%2Dvalid%7E%2Evalid%2Dtooltip%2C%2Ewas%2Dvalidated%20%2Eform%2Dcheck%2Dinput%3Avalid%7E%2Evalid%2Dfeedback%2C%2Ewas%2Dvalidated%20%2Eform%2Dcheck%2Dinput%3Avalid%7E%2Evalid%2Dtooltip%7Bdisplay%3Ablock%7D%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dvalid%7E%2Ecustom%2Dcontrol%2Dlabel%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Avalid%7E%2Ecustom%2Dcontrol%2Dlabel%7Bcolor%3A%2328a745%7D%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dvalid%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Avalid%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bborder%2Dcolor%3A%2328a745%7D%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dvalid%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Avalid%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bborder%2Dcolor%3A%2334ce57%3Bbackground%2Dcolor%3A%2334ce57%7D%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dvalid%3Afocus%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Avalid%3Afocus%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2840%2C167%2C69%2C%2E25%29%7D%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dvalid%3Afocus%3Anot%28%3Achecked%29%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Avalid%3Afocus%3Anot%28%3Achecked%29%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bborder%2Dcolor%3A%2328a745%7D%2Ecustom%2Dfile%2Dinput%2Eis%2Dvalid%7E%2Ecustom%2Dfile%2Dlabel%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dfile%2Dinput%3Avalid%7E%2Ecustom%2Dfile%2Dlabel%7Bborder%2Dcolor%3A%2328a745%7D%2Ecustom%2Dfile%2Dinput%2Eis%2Dvalid%3Afocus%7E%2Ecustom%2Dfile%2Dlabel%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dfile%2Dinput%3Avalid%3Afocus%7E%2Ecustom%2Dfile%2Dlabel%7Bborder%2Dcolor%3A%2328a745%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2840%2C167%2C69%2C%2E25%29%7D%2Einvalid%2Dfeedback%7Bdisplay%3Anone%3Bwidth%3A100%25%3Bmargin%2Dtop%3A%2E25rem%3Bfont%2Dsize%3A80%25%3Bcolor%3A%23dc3545%7D%2Einvalid%2Dtooltip%7Bposition%3Aabsolute%3Btop%3A100%25%3Bz%2Dindex%3A5%3Bdisplay%3Anone%3Bmax%2Dwidth%3A100%25%3Bpadding%3A%2E25rem%20%2E5rem%3Bmargin%2Dtop%3A%2E1rem%3Bfont%2Dsize%3A%2E875rem%3Bline%2Dheight%3A1%2E5%3Bcolor%3A%23fff%3Bbackground%2Dcolor%3Argba%28220%2C53%2C69%2C%2E9%29%3Bborder%2Dradius%3A%2E25rem%7D%2Eis%2Dinvalid%7E%2Einvalid%2Dfeedback%2C%2Eis%2Dinvalid%7E%2Einvalid%2Dtooltip%2C%2Ewas%2Dvalidated%20%3Ainvalid%7E%2Einvalid%2Dfeedback%2C%2Ewas%2Dvalidated%20%3Ainvalid%7E%2Einvalid%2Dtooltip%7Bdisplay%3Ablock%7D%2Eform%2Dcontrol%2Eis%2Dinvalid%2C%2Ewas%2Dvalidated%20%2Eform%2Dcontrol%3Ainvalid%7Bborder%2Dcolor%3A%23dc3545%3Bpadding%2Dright%3Acalc%281%2E5em%20%2B%20%2E75rem%29%3Bbackground%2Dimage%3Aurl%28%22data%3Aimage%2Fsvg%2Bxml%2C%253csvg%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%20width%3D%2712%27%20height%3D%2712%27%20fill%3D%27none%27%20stroke%3D%27%2523dc3545%27%20viewBox%3D%270%200%2012%2012%27%253e%253ccircle%20cx%3D%276%27%20cy%3D%276%27%20r%3D%274%2E5%27%2F%253e%253cpath%20stroke%2Dlinejoin%3D%27round%27%20d%3D%27M5%2E8%203%2E6h%2E4L6%206%2E5z%27%2F%253e%253ccircle%20cx%3D%276%27%20cy%3D%278%2E2%27%20r%3D%27%2E6%27%20fill%3D%27%2523dc3545%27%20stroke%3D%27none%27%2F%253e%253c%2Fsvg%253e%22%29%3Bbackground%2Drepeat%3Ano%2Drepeat%3Bbackground%2Dposition%3Aright%20calc%28%2E375em%20%2B%20%2E1875rem%29%20center%3Bbackground%2Dsize%3Acalc%28%2E75em%20%2B%20%2E375rem%29%20calc%28%2E75em%20%2B%20%2E375rem%29%7D%2Eform%2Dcontrol%2Eis%2Dinvalid%3Afocus%2C%2Ewas%2Dvalidated%20%2Eform%2Dcontrol%3Ainvalid%3Afocus%7Bborder%2Dcolor%3A%23dc3545%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28220%2C53%2C69%2C%2E25%29%7D%2Ewas%2Dvalidated%20textarea%2Eform%2Dcontrol%3Ainvalid%2Ctextarea%2Eform%2Dcontrol%2Eis%2Dinvalid%7Bpadding%2Dright%3Acalc%281%2E5em%20%2B%20%2E75rem%29%3Bbackground%2Dposition%3Atop%20calc%28%2E375em%20%2B%20%2E1875rem%29%20right%20calc%28%2E375em%20%2B%20%2E1875rem%29%7D%2Ecustom%2Dselect%2Eis%2Dinvalid%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dselect%3Ainvalid%7Bborder%2Dcolor%3A%23dc3545%3Bpadding%2Dright%3Acalc%28%2E75em%20%2B%202%2E3125rem%29%3Bbackground%3Aurl%28%22data%3Aimage%2Fsvg%2Bxml%2C%253csvg%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%20width%3D%274%27%20height%3D%275%27%20viewBox%3D%270%200%204%205%27%253e%253cpath%20fill%3D%27%2523343a40%27%20d%3D%27M2%200L0%202h4zm0%205L0%203h4z%27%2F%253e%253c%2Fsvg%253e%22%29%20no%2Drepeat%20right%20%2E75rem%20center%2F8px%2010px%2Curl%28%22data%3Aimage%2Fsvg%2Bxml%2C%253csvg%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%20width%3D%2712%27%20height%3D%2712%27%20fill%3D%27none%27%20stroke%3D%27%2523dc3545%27%20viewBox%3D%270%200%2012%2012%27%253e%253ccircle%20cx%3D%276%27%20cy%3D%276%27%20r%3D%274%2E5%27%2F%253e%253cpath%20stroke%2Dlinejoin%3D%27round%27%20d%3D%27M5%2E8%203%2E6h%2E4L6%206%2E5z%27%2F%253e%253ccircle%20cx%3D%276%27%20cy%3D%278%2E2%27%20r%3D%27%2E6%27%20fill%3D%27%2523dc3545%27%20stroke%3D%27none%27%2F%253e%253c%2Fsvg%253e%22%29%20%23fff%20no%2Drepeat%20center%20right%201%2E75rem%2Fcalc%28%2E75em%20%2B%20%2E375rem%29%20calc%28%2E75em%20%2B%20%2E375rem%29%7D%2Ecustom%2Dselect%2Eis%2Dinvalid%3Afocus%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dselect%3Ainvalid%3Afocus%7Bborder%2Dcolor%3A%23dc3545%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28220%2C53%2C69%2C%2E25%29%7D%2Eform%2Dcheck%2Dinput%2Eis%2Dinvalid%7E%2Eform%2Dcheck%2Dlabel%2C%2Ewas%2Dvalidated%20%2Eform%2Dcheck%2Dinput%3Ainvalid%7E%2Eform%2Dcheck%2Dlabel%7Bcolor%3A%23dc3545%7D%2Eform%2Dcheck%2Dinput%2Eis%2Dinvalid%7E%2Einvalid%2Dfeedback%2C%2Eform%2Dcheck%2Dinput%2Eis%2Dinvalid%7E%2Einvalid%2Dtooltip%2C%2Ewas%2Dvalidated%20%2Eform%2Dcheck%2Dinput%3Ainvalid%7E%2Einvalid%2Dfeedback%2C%2Ewas%2Dvalidated%20%2Eform%2Dcheck%2Dinput%3Ainvalid%7E%2Einvalid%2Dtooltip%7Bdisplay%3Ablock%7D%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dinvalid%7E%2Ecustom%2Dcontrol%2Dlabel%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Ainvalid%7E%2Ecustom%2Dcontrol%2Dlabel%7Bcolor%3A%23dc3545%7D%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dinvalid%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Ainvalid%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bborder%2Dcolor%3A%23dc3545%7D%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dinvalid%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Ainvalid%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bborder%2Dcolor%3A%23e4606d%3Bbackground%2Dcolor%3A%23e4606d%7D%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dinvalid%3Afocus%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Ainvalid%3Afocus%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28220%2C53%2C69%2C%2E25%29%7D%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dinvalid%3Afocus%3Anot%28%3Achecked%29%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Ainvalid%3Afocus%3Anot%28%3Achecked%29%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bborder%2Dcolor%3A%23dc3545%7D%2Ecustom%2Dfile%2Dinput%2Eis%2Dinvalid%7E%2Ecustom%2Dfile%2Dlabel%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dfile%2Dinput%3Ainvalid%7E%2Ecustom%2Dfile%2Dlabel%7Bborder%2Dcolor%3A%23dc3545%7D%2Ecustom%2Dfile%2Dinput%2Eis%2Dinvalid%3Afocus%7E%2Ecustom%2Dfile%2Dlabel%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dfile%2Dinput%3Ainvalid%3Afocus%7E%2Ecustom%2Dfile%2Dlabel%7Bborder%2Dcolor%3A%23dc3545%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28220%2C53%2C69%2C%2E25%29%7D%2Eform%2Dinline%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dflow%3Arow%20wrap%3Bflex%2Dflow%3Arow%20wrap%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%7D%2Eform%2Dinline%20%2Eform%2Dcheck%7Bwidth%3A100%25%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Eform%2Dinline%20label%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3B%2Dms%2Dflex%2Dpack%3Acenter%3Bjustify%2Dcontent%3Acenter%3Bmargin%2Dbottom%3A0%7D%2Eform%2Dinline%20%2Eform%2Dgroup%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%3A0%200%20auto%3Bflex%3A0%200%20auto%3B%2Dms%2Dflex%2Dflow%3Arow%20wrap%3Bflex%2Dflow%3Arow%20wrap%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3Bmargin%2Dbottom%3A0%7D%2Eform%2Dinline%20%2Eform%2Dcontrol%7Bdisplay%3Ainline%2Dblock%3Bwidth%3Aauto%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Eform%2Dcontrol%2Dplaintext%7Bdisplay%3Ainline%2Dblock%7D%2Eform%2Dinline%20%2Ecustom%2Dselect%2C%2Eform%2Dinline%20%2Einput%2Dgroup%7Bwidth%3Aauto%7D%2Eform%2Dinline%20%2Eform%2Dcheck%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3B%2Dms%2Dflex%2Dpack%3Acenter%3Bjustify%2Dcontent%3Acenter%3Bwidth%3Aauto%3Bpadding%2Dleft%3A0%7D%2Eform%2Dinline%20%2Eform%2Dcheck%2Dinput%7Bposition%3Arelative%3B%2Dms%2Dflex%2Dnegative%3A0%3Bflex%2Dshrink%3A0%3Bmargin%2Dtop%3A0%3Bmargin%2Dright%3A%2E25rem%3Bmargin%2Dleft%3A0%7D%2Eform%2Dinline%20%2Ecustom%2Dcontrol%7B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3B%2Dms%2Dflex%2Dpack%3Acenter%3Bjustify%2Dcontent%3Acenter%7D%2Eform%2Dinline%20%2Ecustom%2Dcontrol%2Dlabel%7Bmargin%2Dbottom%3A0%7D%7D%2Ebtn%7Bdisplay%3Ainline%2Dblock%3Bfont%2Dweight%3A400%3Bcolor%3A%23212529%3Btext%2Dalign%3Acenter%3Bvertical%2Dalign%3Amiddle%3B%2Dwebkit%2Duser%2Dselect%3Anone%3B%2Dmoz%2Duser%2Dselect%3Anone%3B%2Dms%2Duser%2Dselect%3Anone%3Buser%2Dselect%3Anone%3Bbackground%2Dcolor%3Atransparent%3Bborder%3A1px%20solid%20transparent%3Bpadding%3A%2E375rem%20%2E75rem%3Bfont%2Dsize%3A1rem%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A%2E25rem%3Btransition%3Acolor%20%2E15s%20ease%2Din%2Dout%2Cbackground%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cborder%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cbox%2Dshadow%20%2E15s%20ease%2Din%2Dout%7D%40media%20%28prefers%2Dreduced%2Dmotion%3Areduce%29%7B%2Ebtn%7Btransition%3Anone%7D%7D%2Ebtn%3Ahover%7Bcolor%3A%23212529%3Btext%2Ddecoration%3Anone%7D%2Ebtn%2Efocus%2C%2Ebtn%3Afocus%7Boutline%3A0%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E25%29%7D%2Ebtn%2Edisabled%2C%2Ebtn%3Adisabled%7Bopacity%3A%2E65%7D%2Ebtn%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%7Bcursor%3Apointer%7Da%2Ebtn%2Edisabled%2Cfieldset%3Adisabled%20a%2Ebtn%7Bpointer%2Devents%3Anone%7D%2Ebtn%2Dprimary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23007bff%3Bborder%2Dcolor%3A%23007bff%7D%2Ebtn%2Dprimary%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%230069d9%3Bborder%2Dcolor%3A%230062cc%7D%2Ebtn%2Dprimary%2Efocus%2C%2Ebtn%2Dprimary%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%230069d9%3Bborder%2Dcolor%3A%230062cc%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2838%2C143%2C255%2C%2E5%29%7D%2Ebtn%2Dprimary%2Edisabled%2C%2Ebtn%2Dprimary%3Adisabled%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23007bff%3Bborder%2Dcolor%3A%23007bff%7D%2Ebtn%2Dprimary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Dprimary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Dprimary%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%230062cc%3Bborder%2Dcolor%3A%23005cbf%7D%2Ebtn%2Dprimary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Dprimary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Dprimary%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2838%2C143%2C255%2C%2E5%29%7D%2Ebtn%2Dsecondary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%236c757d%3Bborder%2Dcolor%3A%236c757d%7D%2Ebtn%2Dsecondary%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%235a6268%3Bborder%2Dcolor%3A%23545b62%7D%2Ebtn%2Dsecondary%2Efocus%2C%2Ebtn%2Dsecondary%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%235a6268%3Bborder%2Dcolor%3A%23545b62%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28130%2C138%2C145%2C%2E5%29%7D%2Ebtn%2Dsecondary%2Edisabled%2C%2Ebtn%2Dsecondary%3Adisabled%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%236c757d%3Bborder%2Dcolor%3A%236c757d%7D%2Ebtn%2Dsecondary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Dsecondary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Dsecondary%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23545b62%3Bborder%2Dcolor%3A%234e555b%7D%2Ebtn%2Dsecondary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Dsecondary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Dsecondary%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28130%2C138%2C145%2C%2E5%29%7D%2Ebtn%2Dsuccess%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2328a745%3Bborder%2Dcolor%3A%2328a745%7D%2Ebtn%2Dsuccess%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23218838%3Bborder%2Dcolor%3A%231e7e34%7D%2Ebtn%2Dsuccess%2Efocus%2C%2Ebtn%2Dsuccess%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23218838%3Bborder%2Dcolor%3A%231e7e34%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2872%2C180%2C97%2C%2E5%29%7D%2Ebtn%2Dsuccess%2Edisabled%2C%2Ebtn%2Dsuccess%3Adisabled%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2328a745%3Bborder%2Dcolor%3A%2328a745%7D%2Ebtn%2Dsuccess%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Dsuccess%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Dsuccess%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%231e7e34%3Bborder%2Dcolor%3A%231c7430%7D%2Ebtn%2Dsuccess%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Dsuccess%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Dsuccess%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2872%2C180%2C97%2C%2E5%29%7D%2Ebtn%2Dinfo%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2317a2b8%3Bborder%2Dcolor%3A%2317a2b8%7D%2Ebtn%2Dinfo%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23138496%3Bborder%2Dcolor%3A%23117a8b%7D%2Ebtn%2Dinfo%2Efocus%2C%2Ebtn%2Dinfo%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23138496%3Bborder%2Dcolor%3A%23117a8b%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2858%2C176%2C195%2C%2E5%29%7D%2Ebtn%2Dinfo%2Edisabled%2C%2Ebtn%2Dinfo%3Adisabled%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2317a2b8%3Bborder%2Dcolor%3A%2317a2b8%7D%2Ebtn%2Dinfo%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Dinfo%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Dinfo%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23117a8b%3Bborder%2Dcolor%3A%2310707f%7D%2Ebtn%2Dinfo%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Dinfo%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Dinfo%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2858%2C176%2C195%2C%2E5%29%7D%2Ebtn%2Dwarning%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23ffc107%3Bborder%2Dcolor%3A%23ffc107%7D%2Ebtn%2Dwarning%3Ahover%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23e0a800%3Bborder%2Dcolor%3A%23d39e00%7D%2Ebtn%2Dwarning%2Efocus%2C%2Ebtn%2Dwarning%3Afocus%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23e0a800%3Bborder%2Dcolor%3A%23d39e00%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28222%2C170%2C12%2C%2E5%29%7D%2Ebtn%2Dwarning%2Edisabled%2C%2Ebtn%2Dwarning%3Adisabled%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23ffc107%3Bborder%2Dcolor%3A%23ffc107%7D%2Ebtn%2Dwarning%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Dwarning%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Dwarning%2Edropdown%2Dtoggle%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23d39e00%3Bborder%2Dcolor%3A%23c69500%7D%2Ebtn%2Dwarning%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Dwarning%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Dwarning%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28222%2C170%2C12%2C%2E5%29%7D%2Ebtn%2Ddanger%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23dc3545%3Bborder%2Dcolor%3A%23dc3545%7D%2Ebtn%2Ddanger%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23c82333%3Bborder%2Dcolor%3A%23bd2130%7D%2Ebtn%2Ddanger%2Efocus%2C%2Ebtn%2Ddanger%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23c82333%3Bborder%2Dcolor%3A%23bd2130%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28225%2C83%2C97%2C%2E5%29%7D%2Ebtn%2Ddanger%2Edisabled%2C%2Ebtn%2Ddanger%3Adisabled%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23dc3545%3Bborder%2Dcolor%3A%23dc3545%7D%2Ebtn%2Ddanger%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Ddanger%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Ddanger%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23bd2130%3Bborder%2Dcolor%3A%23b21f2d%7D%2Ebtn%2Ddanger%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Ddanger%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Ddanger%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28225%2C83%2C97%2C%2E5%29%7D%2Ebtn%2Dlight%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23f8f9fa%3Bborder%2Dcolor%3A%23f8f9fa%7D%2Ebtn%2Dlight%3Ahover%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23e2e6ea%3Bborder%2Dcolor%3A%23dae0e5%7D%2Ebtn%2Dlight%2Efocus%2C%2Ebtn%2Dlight%3Afocus%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23e2e6ea%3Bborder%2Dcolor%3A%23dae0e5%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28216%2C217%2C219%2C%2E5%29%7D%2Ebtn%2Dlight%2Edisabled%2C%2Ebtn%2Dlight%3Adisabled%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23f8f9fa%3Bborder%2Dcolor%3A%23f8f9fa%7D%2Ebtn%2Dlight%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Dlight%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Dlight%2Edropdown%2Dtoggle%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23dae0e5%3Bborder%2Dcolor%3A%23d3d9df%7D%2Ebtn%2Dlight%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Dlight%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Dlight%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28216%2C217%2C219%2C%2E5%29%7D%2Ebtn%2Ddark%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23343a40%3Bborder%2Dcolor%3A%23343a40%7D%2Ebtn%2Ddark%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2323272b%3Bborder%2Dcolor%3A%231d2124%7D%2Ebtn%2Ddark%2Efocus%2C%2Ebtn%2Ddark%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2323272b%3Bborder%2Dcolor%3A%231d2124%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2882%2C88%2C93%2C%2E5%29%7D%2Ebtn%2Ddark%2Edisabled%2C%2Ebtn%2Ddark%3Adisabled%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23343a40%3Bborder%2Dcolor%3A%23343a40%7D%2Ebtn%2Ddark%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Ddark%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Ddark%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%231d2124%3Bborder%2Dcolor%3A%23171a1d%7D%2Ebtn%2Ddark%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Ddark%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Ddark%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2882%2C88%2C93%2C%2E5%29%7D%2Ebtn%2Doutline%2Dprimary%7Bcolor%3A%23007bff%3Bborder%2Dcolor%3A%23007bff%7D%2Ebtn%2Doutline%2Dprimary%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23007bff%3Bborder%2Dcolor%3A%23007bff%7D%2Ebtn%2Doutline%2Dprimary%2Efocus%2C%2Ebtn%2Doutline%2Dprimary%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E5%29%7D%2Ebtn%2Doutline%2Dprimary%2Edisabled%2C%2Ebtn%2Doutline%2Dprimary%3Adisabled%7Bcolor%3A%23007bff%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Doutline%2Dprimary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Doutline%2Dprimary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Doutline%2Dprimary%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23007bff%3Bborder%2Dcolor%3A%23007bff%7D%2Ebtn%2Doutline%2Dprimary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Doutline%2Dprimary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Doutline%2Dprimary%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E5%29%7D%2Ebtn%2Doutline%2Dsecondary%7Bcolor%3A%236c757d%3Bborder%2Dcolor%3A%236c757d%7D%2Ebtn%2Doutline%2Dsecondary%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%236c757d%3Bborder%2Dcolor%3A%236c757d%7D%2Ebtn%2Doutline%2Dsecondary%2Efocus%2C%2Ebtn%2Doutline%2Dsecondary%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28108%2C117%2C125%2C%2E5%29%7D%2Ebtn%2Doutline%2Dsecondary%2Edisabled%2C%2Ebtn%2Doutline%2Dsecondary%3Adisabled%7Bcolor%3A%236c757d%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Doutline%2Dsecondary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Doutline%2Dsecondary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Doutline%2Dsecondary%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%236c757d%3Bborder%2Dcolor%3A%236c757d%7D%2Ebtn%2Doutline%2Dsecondary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Doutline%2Dsecondary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Doutline%2Dsecondary%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28108%2C117%2C125%2C%2E5%29%7D%2Ebtn%2Doutline%2Dsuccess%7Bcolor%3A%2328a745%3Bborder%2Dcolor%3A%2328a745%7D%2Ebtn%2Doutline%2Dsuccess%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2328a745%3Bborder%2Dcolor%3A%2328a745%7D%2Ebtn%2Doutline%2Dsuccess%2Efocus%2C%2Ebtn%2Doutline%2Dsuccess%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2840%2C167%2C69%2C%2E5%29%7D%2Ebtn%2Doutline%2Dsuccess%2Edisabled%2C%2Ebtn%2Doutline%2Dsuccess%3Adisabled%7Bcolor%3A%2328a745%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Doutline%2Dsuccess%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Doutline%2Dsuccess%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Doutline%2Dsuccess%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2328a745%3Bborder%2Dcolor%3A%2328a745%7D%2Ebtn%2Doutline%2Dsuccess%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Doutline%2Dsuccess%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Doutline%2Dsuccess%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2840%2C167%2C69%2C%2E5%29%7D%2Ebtn%2Doutline%2Dinfo%7Bcolor%3A%2317a2b8%3Bborder%2Dcolor%3A%2317a2b8%7D%2Ebtn%2Doutline%2Dinfo%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2317a2b8%3Bborder%2Dcolor%3A%2317a2b8%7D%2Ebtn%2Doutline%2Dinfo%2Efocus%2C%2Ebtn%2Doutline%2Dinfo%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2823%2C162%2C184%2C%2E5%29%7D%2Ebtn%2Doutline%2Dinfo%2Edisabled%2C%2Ebtn%2Doutline%2Dinfo%3Adisabled%7Bcolor%3A%2317a2b8%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Doutline%2Dinfo%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Doutline%2Dinfo%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Doutline%2Dinfo%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2317a2b8%3Bborder%2Dcolor%3A%2317a2b8%7D%2Ebtn%2Doutline%2Dinfo%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Doutline%2Dinfo%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Doutline%2Dinfo%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2823%2C162%2C184%2C%2E5%29%7D%2Ebtn%2Doutline%2Dwarning%7Bcolor%3A%23ffc107%3Bborder%2Dcolor%3A%23ffc107%7D%2Ebtn%2Doutline%2Dwarning%3Ahover%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23ffc107%3Bborder%2Dcolor%3A%23ffc107%7D%2Ebtn%2Doutline%2Dwarning%2Efocus%2C%2Ebtn%2Doutline%2Dwarning%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28255%2C193%2C7%2C%2E5%29%7D%2Ebtn%2Doutline%2Dwarning%2Edisabled%2C%2Ebtn%2Doutline%2Dwarning%3Adisabled%7Bcolor%3A%23ffc107%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Doutline%2Dwarning%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Doutline%2Dwarning%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Doutline%2Dwarning%2Edropdown%2Dtoggle%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23ffc107%3Bborder%2Dcolor%3A%23ffc107%7D%2Ebtn%2Doutline%2Dwarning%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Doutline%2Dwarning%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Doutline%2Dwarning%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28255%2C193%2C7%2C%2E5%29%7D%2Ebtn%2Doutline%2Ddanger%7Bcolor%3A%23dc3545%3Bborder%2Dcolor%3A%23dc3545%7D%2Ebtn%2Doutline%2Ddanger%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23dc3545%3Bborder%2Dcolor%3A%23dc3545%7D%2Ebtn%2Doutline%2Ddanger%2Efocus%2C%2Ebtn%2Doutline%2Ddanger%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28220%2C53%2C69%2C%2E5%29%7D%2Ebtn%2Doutline%2Ddanger%2Edisabled%2C%2Ebtn%2Doutline%2Ddanger%3Adisabled%7Bcolor%3A%23dc3545%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Doutline%2Ddanger%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Doutline%2Ddanger%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Doutline%2Ddanger%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23dc3545%3Bborder%2Dcolor%3A%23dc3545%7D%2Ebtn%2Doutline%2Ddanger%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Doutline%2Ddanger%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Doutline%2Ddanger%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28220%2C53%2C69%2C%2E5%29%7D%2Ebtn%2Doutline%2Dlight%7Bcolor%3A%23f8f9fa%3Bborder%2Dcolor%3A%23f8f9fa%7D%2Ebtn%2Doutline%2Dlight%3Ahover%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23f8f9fa%3Bborder%2Dcolor%3A%23f8f9fa%7D%2Ebtn%2Doutline%2Dlight%2Efocus%2C%2Ebtn%2Doutline%2Dlight%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28248%2C249%2C250%2C%2E5%29%7D%2Ebtn%2Doutline%2Dlight%2Edisabled%2C%2Ebtn%2Doutline%2Dlight%3Adisabled%7Bcolor%3A%23f8f9fa%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Doutline%2Dlight%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Doutline%2Dlight%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Doutline%2Dlight%2Edropdown%2Dtoggle%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23f8f9fa%3Bborder%2Dcolor%3A%23f8f9fa%7D%2Ebtn%2Doutline%2Dlight%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Doutline%2Dlight%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Doutline%2Dlight%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28248%2C249%2C250%2C%2E5%29%7D%2Ebtn%2Doutline%2Ddark%7Bcolor%3A%23343a40%3Bborder%2Dcolor%3A%23343a40%7D%2Ebtn%2Doutline%2Ddark%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23343a40%3Bborder%2Dcolor%3A%23343a40%7D%2Ebtn%2Doutline%2Ddark%2Efocus%2C%2Ebtn%2Doutline%2Ddark%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2852%2C58%2C64%2C%2E5%29%7D%2Ebtn%2Doutline%2Ddark%2Edisabled%2C%2Ebtn%2Doutline%2Ddark%3Adisabled%7Bcolor%3A%23343a40%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Doutline%2Ddark%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Doutline%2Ddark%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Doutline%2Ddark%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23343a40%3Bborder%2Dcolor%3A%23343a40%7D%2Ebtn%2Doutline%2Ddark%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Doutline%2Ddark%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Doutline%2Ddark%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2852%2C58%2C64%2C%2E5%29%7D%2Ebtn%2Dlink%7Bfont%2Dweight%3A400%3Bcolor%3A%23007bff%3Btext%2Ddecoration%3Anone%7D%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%230056b3%3Btext%2Ddecoration%3Aunderline%7D%2Ebtn%2Dlink%2Efocus%2C%2Ebtn%2Dlink%3Afocus%7Btext%2Ddecoration%3Aunderline%7D%2Ebtn%2Dlink%2Edisabled%2C%2Ebtn%2Dlink%3Adisabled%7Bcolor%3A%236c757d%3Bpointer%2Devents%3Anone%7D%2Ebtn%2Dgroup%2Dlg%3E%2Ebtn%2C%2Ebtn%2Dlg%7Bpadding%3A%2E5rem%201rem%3Bfont%2Dsize%3A1%2E25rem%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A%2E3rem%7D%2Ebtn%2Dgroup%2Dsm%3E%2Ebtn%2C%2Ebtn%2Dsm%7Bpadding%3A%2E25rem%20%2E5rem%3Bfont%2Dsize%3A%2E875rem%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A%2E2rem%7D%2Ebtn%2Dblock%7Bdisplay%3Ablock%3Bwidth%3A100%25%7D%2Ebtn%2Dblock%2B%2Ebtn%2Dblock%7Bmargin%2Dtop%3A%2E5rem%7Dinput%5Btype%3Dbutton%5D%2Ebtn%2Dblock%2Cinput%5Btype%3Dreset%5D%2Ebtn%2Dblock%2Cinput%5Btype%3Dsubmit%5D%2Ebtn%2Dblock%7Bwidth%3A100%25%7D%2Efade%7Btransition%3Aopacity%20%2E15s%20linear%7D%40media%20%28prefers%2Dreduced%2Dmotion%3Areduce%29%7B%2Efade%7Btransition%3Anone%7D%7D%2Efade%3Anot%28%2Eshow%29%7Bopacity%3A0%7D%2Ecollapse%3Anot%28%2Eshow%29%7Bdisplay%3Anone%7D%2Ecollapsing%7Bposition%3Arelative%3Bheight%3A0%3Boverflow%3Ahidden%3Btransition%3Aheight%20%2E35s%20ease%7D%40media%20%28prefers%2Dreduced%2Dmotion%3Areduce%29%7B%2Ecollapsing%7Btransition%3Anone%7D%7D%2Edropdown%2C%2Edropleft%2C%2Edropright%2C%2Edropup%7Bposition%3Arelative%7D%2Edropdown%2Dtoggle%7Bwhite%2Dspace%3Anowrap%7D%2Edropdown%2Dtoggle%3A%3Aafter%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dleft%3A%2E255em%3Bvertical%2Dalign%3A%2E255em%3Bcontent%3A%22%22%3Bborder%2Dtop%3A%2E3em%20solid%3Bborder%2Dright%3A%2E3em%20solid%20transparent%3Bborder%2Dbottom%3A0%3Bborder%2Dleft%3A%2E3em%20solid%20transparent%7D%2Edropdown%2Dtoggle%3Aempty%3A%3Aafter%7Bmargin%2Dleft%3A0%7D%2Edropdown%2Dmenu%7Bposition%3Aabsolute%3Btop%3A100%25%3Bleft%3A0%3Bz%2Dindex%3A1000%3Bdisplay%3Anone%3Bfloat%3Aleft%3Bmin%2Dwidth%3A10rem%3Bpadding%3A%2E5rem%200%3Bmargin%3A%2E125rem%200%200%3Bfont%2Dsize%3A1rem%3Bcolor%3A%23212529%3Btext%2Dalign%3Aleft%3Blist%2Dstyle%3Anone%3Bbackground%2Dcolor%3A%23fff%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E15%29%3Bborder%2Dradius%3A%2E25rem%7D%2Edropdown%2Dmenu%2Dleft%7Bright%3Aauto%3Bleft%3A0%7D%2Edropdown%2Dmenu%2Dright%7Bright%3A0%3Bleft%3Aauto%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Edropdown%2Dmenu%2Dsm%2Dleft%7Bright%3Aauto%3Bleft%3A0%7D%2Edropdown%2Dmenu%2Dsm%2Dright%7Bright%3A0%3Bleft%3Aauto%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Edropdown%2Dmenu%2Dmd%2Dleft%7Bright%3Aauto%3Bleft%3A0%7D%2Edropdown%2Dmenu%2Dmd%2Dright%7Bright%3A0%3Bleft%3Aauto%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Edropdown%2Dmenu%2Dlg%2Dleft%7Bright%3Aauto%3Bleft%3A0%7D%2Edropdown%2Dmenu%2Dlg%2Dright%7Bright%3A0%3Bleft%3Aauto%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Edropdown%2Dmenu%2Dxl%2Dleft%7Bright%3Aauto%3Bleft%3A0%7D%2Edropdown%2Dmenu%2Dxl%2Dright%7Bright%3A0%3Bleft%3Aauto%7D%7D%2Edropup%20%2Edropdown%2Dmenu%7Btop%3Aauto%3Bbottom%3A100%25%3Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A%2E125rem%7D%2Edropup%20%2Edropdown%2Dtoggle%3A%3Aafter%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dleft%3A%2E255em%3Bvertical%2Dalign%3A%2E255em%3Bcontent%3A%22%22%3Bborder%2Dtop%3A0%3Bborder%2Dright%3A%2E3em%20solid%20transparent%3Bborder%2Dbottom%3A%2E3em%20solid%3Bborder%2Dleft%3A%2E3em%20solid%20transparent%7D%2Edropup%20%2Edropdown%2Dtoggle%3Aempty%3A%3Aafter%7Bmargin%2Dleft%3A0%7D%2Edropright%20%2Edropdown%2Dmenu%7Btop%3A0%3Bright%3Aauto%3Bleft%3A100%25%3Bmargin%2Dtop%3A0%3Bmargin%2Dleft%3A%2E125rem%7D%2Edropright%20%2Edropdown%2Dtoggle%3A%3Aafter%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dleft%3A%2E255em%3Bvertical%2Dalign%3A%2E255em%3Bcontent%3A%22%22%3Bborder%2Dtop%3A%2E3em%20solid%20transparent%3Bborder%2Dright%3A0%3Bborder%2Dbottom%3A%2E3em%20solid%20transparent%3Bborder%2Dleft%3A%2E3em%20solid%7D%2Edropright%20%2Edropdown%2Dtoggle%3Aempty%3A%3Aafter%7Bmargin%2Dleft%3A0%7D%2Edropright%20%2Edropdown%2Dtoggle%3A%3Aafter%7Bvertical%2Dalign%3A0%7D%2Edropleft%20%2Edropdown%2Dmenu%7Btop%3A0%3Bright%3A100%25%3Bleft%3Aauto%3Bmargin%2Dtop%3A0%3Bmargin%2Dright%3A%2E125rem%7D%2Edropleft%20%2Edropdown%2Dtoggle%3A%3Aafter%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dleft%3A%2E255em%3Bvertical%2Dalign%3A%2E255em%3Bcontent%3A%22%22%7D%2Edropleft%20%2Edropdown%2Dtoggle%3A%3Aafter%7Bdisplay%3Anone%7D%2Edropleft%20%2Edropdown%2Dtoggle%3A%3Abefore%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dright%3A%2E255em%3Bvertical%2Dalign%3A%2E255em%3Bcontent%3A%22%22%3Bborder%2Dtop%3A%2E3em%20solid%20transparent%3Bborder%2Dright%3A%2E3em%20solid%3Bborder%2Dbottom%3A%2E3em%20solid%20transparent%7D%2Edropleft%20%2Edropdown%2Dtoggle%3Aempty%3A%3Aafter%7Bmargin%2Dleft%3A0%7D%2Edropleft%20%2Edropdown%2Dtoggle%3A%3Abefore%7Bvertical%2Dalign%3A0%7D%2Edropdown%2Dmenu%5Bx%2Dplacement%5E%3Dbottom%5D%2C%2Edropdown%2Dmenu%5Bx%2Dplacement%5E%3Dleft%5D%2C%2Edropdown%2Dmenu%5Bx%2Dplacement%5E%3Dright%5D%2C%2Edropdown%2Dmenu%5Bx%2Dplacement%5E%3Dtop%5D%7Bright%3Aauto%3Bbottom%3Aauto%7D%2Edropdown%2Ddivider%7Bheight%3A0%3Bmargin%3A%2E5rem%200%3Boverflow%3Ahidden%3Bborder%2Dtop%3A1px%20solid%20%23e9ecef%7D%2Edropdown%2Ditem%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Bpadding%3A%2E25rem%201%2E5rem%3Bclear%3Aboth%3Bfont%2Dweight%3A400%3Bcolor%3A%23212529%3Btext%2Dalign%3Ainherit%3Bwhite%2Dspace%3Anowrap%3Bbackground%2Dcolor%3Atransparent%3Bborder%3A0%7D%2Edropdown%2Ditem%3Afocus%2C%2Edropdown%2Ditem%3Ahover%7Bcolor%3A%2316181b%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23f8f9fa%7D%2Edropdown%2Ditem%2Eactive%2C%2Edropdown%2Ditem%3Aactive%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23007bff%7D%2Edropdown%2Ditem%2Edisabled%2C%2Edropdown%2Ditem%3Adisabled%7Bcolor%3A%236c757d%3Bpointer%2Devents%3Anone%3Bbackground%2Dcolor%3Atransparent%7D%2Edropdown%2Dmenu%2Eshow%7Bdisplay%3Ablock%7D%2Edropdown%2Dheader%7Bdisplay%3Ablock%3Bpadding%3A%2E5rem%201%2E5rem%3Bmargin%2Dbottom%3A0%3Bfont%2Dsize%3A%2E875rem%3Bcolor%3A%236c757d%3Bwhite%2Dspace%3Anowrap%7D%2Edropdown%2Ditem%2Dtext%7Bdisplay%3Ablock%3Bpadding%3A%2E25rem%201%2E5rem%3Bcolor%3A%23212529%7D%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%2Dvertical%7Bposition%3Arelative%3Bdisplay%3A%2Dms%2Dinline%2Dflexbox%3Bdisplay%3Ainline%2Dflex%3Bvertical%2Dalign%3Amiddle%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2C%2Ebtn%2Dgroup%3E%2Ebtn%7Bposition%3Arelative%3B%2Dms%2Dflex%3A1%201%20auto%3Bflex%3A1%201%20auto%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Ahover%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Ahover%7Bz%2Dindex%3A1%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Eactive%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Aactive%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Afocus%2C%2Ebtn%2Dgroup%3E%2Ebtn%2Eactive%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Aactive%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Afocus%7Bz%2Dindex%3A1%7D%2Ebtn%2Dtoolbar%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dwrap%3Awrap%3Bflex%2Dwrap%3Awrap%3B%2Dms%2Dflex%2Dpack%3Astart%3Bjustify%2Dcontent%3Aflex%2Dstart%7D%2Ebtn%2Dtoolbar%20%2Einput%2Dgroup%7Bwidth%3Aauto%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Anot%28%3Afirst%2Dchild%29%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Anot%28%3Afirst%2Dchild%29%7Bmargin%2Dleft%3A%2D1px%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Anot%28%3Alast%2Dchild%29%3Anot%28%2Edropdown%2Dtoggle%29%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Anot%28%3Afirst%2Dchild%29%3E%2Ebtn%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Anot%28%3Afirst%2Dchild%29%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Edropdown%2Dtoggle%2Dsplit%7Bpadding%2Dright%3A%2E5625rem%3Bpadding%2Dleft%3A%2E5625rem%7D%2Edropdown%2Dtoggle%2Dsplit%3A%3Aafter%2C%2Edropright%20%2Edropdown%2Dtoggle%2Dsplit%3A%3Aafter%2C%2Edropup%20%2Edropdown%2Dtoggle%2Dsplit%3A%3Aafter%7Bmargin%2Dleft%3A0%7D%2Edropleft%20%2Edropdown%2Dtoggle%2Dsplit%3A%3Abefore%7Bmargin%2Dright%3A0%7D%2Ebtn%2Dgroup%2Dsm%3E%2Ebtn%2B%2Edropdown%2Dtoggle%2Dsplit%2C%2Ebtn%2Dsm%2B%2Edropdown%2Dtoggle%2Dsplit%7Bpadding%2Dright%3A%2E375rem%3Bpadding%2Dleft%3A%2E375rem%7D%2Ebtn%2Dgroup%2Dlg%3E%2Ebtn%2B%2Edropdown%2Dtoggle%2Dsplit%2C%2Ebtn%2Dlg%2B%2Edropdown%2Dtoggle%2Dsplit%7Bpadding%2Dright%3A%2E75rem%3Bpadding%2Dleft%3A%2E75rem%7D%2Ebtn%2Dgroup%2Dvertical%7B%2Dms%2Dflex%2Ddirection%3Acolumn%3Bflex%2Ddirection%3Acolumn%3B%2Dms%2Dflex%2Dalign%3Astart%3Balign%2Ditems%3Aflex%2Dstart%3B%2Dms%2Dflex%2Dpack%3Acenter%3Bjustify%2Dcontent%3Acenter%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%7Bwidth%3A100%25%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Anot%28%3Afirst%2Dchild%29%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Anot%28%3Afirst%2Dchild%29%7Bmargin%2Dtop%3A%2D1px%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Anot%28%3Alast%2Dchild%29%3Anot%28%2Edropdown%2Dtoggle%29%7Bborder%2Dbottom%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Anot%28%3Afirst%2Dchild%29%3E%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Anot%28%3Afirst%2Dchild%29%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Dtoggle%3E%2Ebtn%2C%2Ebtn%2Dgroup%2Dtoggle%3E%2Ebtn%2Dgroup%3E%2Ebtn%7Bmargin%2Dbottom%3A0%7D%2Ebtn%2Dgroup%2Dtoggle%3E%2Ebtn%20input%5Btype%3Dcheckbox%5D%2C%2Ebtn%2Dgroup%2Dtoggle%3E%2Ebtn%20input%5Btype%3Dradio%5D%2C%2Ebtn%2Dgroup%2Dtoggle%3E%2Ebtn%2Dgroup%3E%2Ebtn%20input%5Btype%3Dcheckbox%5D%2C%2Ebtn%2Dgroup%2Dtoggle%3E%2Ebtn%2Dgroup%3E%2Ebtn%20input%5Btype%3Dradio%5D%7Bposition%3Aabsolute%3Bclip%3Arect%280%2C0%2C0%2C0%29%3Bpointer%2Devents%3Anone%7D%2Einput%2Dgroup%7Bposition%3Arelative%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dwrap%3Awrap%3Bflex%2Dwrap%3Awrap%3B%2Dms%2Dflex%2Dalign%3Astretch%3Balign%2Ditems%3Astretch%3Bwidth%3A100%25%7D%2Einput%2Dgroup%3E%2Ecustom%2Dfile%2C%2Einput%2Dgroup%3E%2Ecustom%2Dselect%2C%2Einput%2Dgroup%3E%2Eform%2Dcontrol%2C%2Einput%2Dgroup%3E%2Eform%2Dcontrol%2Dplaintext%7Bposition%3Arelative%3B%2Dms%2Dflex%3A1%201%20auto%3Bflex%3A1%201%20auto%3Bwidth%3A1%25%3Bmin%2Dwidth%3A0%3Bmargin%2Dbottom%3A0%7D%2Einput%2Dgroup%3E%2Ecustom%2Dfile%2B%2Ecustom%2Dfile%2C%2Einput%2Dgroup%3E%2Ecustom%2Dfile%2B%2Ecustom%2Dselect%2C%2Einput%2Dgroup%3E%2Ecustom%2Dfile%2B%2Eform%2Dcontrol%2C%2Einput%2Dgroup%3E%2Ecustom%2Dselect%2B%2Ecustom%2Dfile%2C%2Einput%2Dgroup%3E%2Ecustom%2Dselect%2B%2Ecustom%2Dselect%2C%2Einput%2Dgroup%3E%2Ecustom%2Dselect%2B%2Eform%2Dcontrol%2C%2Einput%2Dgroup%3E%2Eform%2Dcontrol%2B%2Ecustom%2Dfile%2C%2Einput%2Dgroup%3E%2Eform%2Dcontrol%2B%2Ecustom%2Dselect%2C%2Einput%2Dgroup%3E%2Eform%2Dcontrol%2B%2Eform%2Dcontrol%2C%2Einput%2Dgroup%3E%2Eform%2Dcontrol%2Dplaintext%2B%2Ecustom%2Dfile%2C%2Einput%2Dgroup%3E%2Eform%2Dcontrol%2Dplaintext%2B%2Ecustom%2Dselect%2C%2Einput%2Dgroup%3E%2Eform%2Dcontrol%2Dplaintext%2B%2Eform%2Dcontrol%7Bmargin%2Dleft%3A%2D1px%7D%2Einput%2Dgroup%3E%2Ecustom%2Dfile%20%2Ecustom%2Dfile%2Dinput%3Afocus%7E%2Ecustom%2Dfile%2Dlabel%2C%2Einput%2Dgroup%3E%2Ecustom%2Dselect%3Afocus%2C%2Einput%2Dgroup%3E%2Eform%2Dcontrol%3Afocus%7Bz%2Dindex%3A3%7D%2Einput%2Dgroup%3E%2Ecustom%2Dfile%20%2Ecustom%2Dfile%2Dinput%3Afocus%7Bz%2Dindex%3A4%7D%2Einput%2Dgroup%3E%2Ecustom%2Dselect%3Anot%28%3Alast%2Dchild%29%2C%2Einput%2Dgroup%3E%2Eform%2Dcontrol%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Einput%2Dgroup%3E%2Ecustom%2Dselect%3Anot%28%3Afirst%2Dchild%29%2C%2Einput%2Dgroup%3E%2Eform%2Dcontrol%3Anot%28%3Afirst%2Dchild%29%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Einput%2Dgroup%3E%2Ecustom%2Dfile%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%7D%2Einput%2Dgroup%3E%2Ecustom%2Dfile%3Anot%28%3Alast%2Dchild%29%20%2Ecustom%2Dfile%2Dlabel%2C%2Einput%2Dgroup%3E%2Ecustom%2Dfile%3Anot%28%3Alast%2Dchild%29%20%2Ecustom%2Dfile%2Dlabel%3A%3Aafter%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Einput%2Dgroup%3E%2Ecustom%2Dfile%3Anot%28%3Afirst%2Dchild%29%20%2Ecustom%2Dfile%2Dlabel%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Einput%2Dgroup%2Dappend%2C%2Einput%2Dgroup%2Dprepend%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%7D%2Einput%2Dgroup%2Dappend%20%2Ebtn%2C%2Einput%2Dgroup%2Dprepend%20%2Ebtn%7Bposition%3Arelative%3Bz%2Dindex%3A2%7D%2Einput%2Dgroup%2Dappend%20%2Ebtn%3Afocus%2C%2Einput%2Dgroup%2Dprepend%20%2Ebtn%3Afocus%7Bz%2Dindex%3A3%7D%2Einput%2Dgroup%2Dappend%20%2Ebtn%2B%2Ebtn%2C%2Einput%2Dgroup%2Dappend%20%2Ebtn%2B%2Einput%2Dgroup%2Dtext%2C%2Einput%2Dgroup%2Dappend%20%2Einput%2Dgroup%2Dtext%2B%2Ebtn%2C%2Einput%2Dgroup%2Dappend%20%2Einput%2Dgroup%2Dtext%2B%2Einput%2Dgroup%2Dtext%2C%2Einput%2Dgroup%2Dprepend%20%2Ebtn%2B%2Ebtn%2C%2Einput%2Dgroup%2Dprepend%20%2Ebtn%2B%2Einput%2Dgroup%2Dtext%2C%2Einput%2Dgroup%2Dprepend%20%2Einput%2Dgroup%2Dtext%2B%2Ebtn%2C%2Einput%2Dgroup%2Dprepend%20%2Einput%2Dgroup%2Dtext%2B%2Einput%2Dgroup%2Dtext%7Bmargin%2Dleft%3A%2D1px%7D%2Einput%2Dgroup%2Dprepend%7Bmargin%2Dright%3A%2D1px%7D%2Einput%2Dgroup%2Dappend%7Bmargin%2Dleft%3A%2D1px%7D%2Einput%2Dgroup%2Dtext%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3Bpadding%3A%2E375rem%20%2E75rem%3Bmargin%2Dbottom%3A0%3Bfont%2Dsize%3A1rem%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E5%3Bcolor%3A%23495057%3Btext%2Dalign%3Acenter%3Bwhite%2Dspace%3Anowrap%3Bbackground%2Dcolor%3A%23e9ecef%3Bborder%3A1px%20solid%20%23ced4da%3Bborder%2Dradius%3A%2E25rem%7D%2Einput%2Dgroup%2Dtext%20input%5Btype%3Dcheckbox%5D%2C%2Einput%2Dgroup%2Dtext%20input%5Btype%3Dradio%5D%7Bmargin%2Dtop%3A0%7D%2Einput%2Dgroup%2Dlg%3E%2Ecustom%2Dselect%2C%2Einput%2Dgroup%2Dlg%3E%2Eform%2Dcontrol%3Anot%28textarea%29%7Bheight%3Acalc%281%2E5em%20%2B%201rem%20%2B%202px%29%7D%2Einput%2Dgroup%2Dlg%3E%2Ecustom%2Dselect%2C%2Einput%2Dgroup%2Dlg%3E%2Eform%2Dcontrol%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dappend%3E%2Ebtn%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dappend%3E%2Einput%2Dgroup%2Dtext%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dprepend%3E%2Ebtn%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dprepend%3E%2Einput%2Dgroup%2Dtext%7Bpadding%3A%2E5rem%201rem%3Bfont%2Dsize%3A1%2E25rem%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A%2E3rem%7D%2Einput%2Dgroup%2Dsm%3E%2Ecustom%2Dselect%2C%2Einput%2Dgroup%2Dsm%3E%2Eform%2Dcontrol%3Anot%28textarea%29%7Bheight%3Acalc%281%2E5em%20%2B%20%2E5rem%20%2B%202px%29%7D%2Einput%2Dgroup%2Dsm%3E%2Ecustom%2Dselect%2C%2Einput%2Dgroup%2Dsm%3E%2Eform%2Dcontrol%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dappend%3E%2Ebtn%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dappend%3E%2Einput%2Dgroup%2Dtext%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dprepend%3E%2Ebtn%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dprepend%3E%2Einput%2Dgroup%2Dtext%7Bpadding%3A%2E25rem%20%2E5rem%3Bfont%2Dsize%3A%2E875rem%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A%2E2rem%7D%2Einput%2Dgroup%2Dlg%3E%2Ecustom%2Dselect%2C%2Einput%2Dgroup%2Dsm%3E%2Ecustom%2Dselect%7Bpadding%2Dright%3A1%2E75rem%7D%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dappend%3Alast%2Dchild%3E%2Ebtn%3Anot%28%3Alast%2Dchild%29%3Anot%28%2Edropdown%2Dtoggle%29%2C%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dappend%3Alast%2Dchild%3E%2Einput%2Dgroup%2Dtext%3Anot%28%3Alast%2Dchild%29%2C%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dappend%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%2C%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dappend%3Anot%28%3Alast%2Dchild%29%3E%2Einput%2Dgroup%2Dtext%2C%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dprepend%3E%2Ebtn%2C%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dprepend%3E%2Einput%2Dgroup%2Dtext%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dappend%3E%2Ebtn%2C%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dappend%3E%2Einput%2Dgroup%2Dtext%2C%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dprepend%3Afirst%2Dchild%3E%2Ebtn%3Anot%28%3Afirst%2Dchild%29%2C%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dprepend%3Afirst%2Dchild%3E%2Einput%2Dgroup%2Dtext%3Anot%28%3Afirst%2Dchild%29%2C%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dprepend%3Anot%28%3Afirst%2Dchild%29%3E%2Ebtn%2C%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dprepend%3Anot%28%3Afirst%2Dchild%29%3E%2Einput%2Dgroup%2Dtext%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ecustom%2Dcontrol%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bmin%2Dheight%3A1%2E5rem%3Bpadding%2Dleft%3A1%2E5rem%7D%2Ecustom%2Dcontrol%2Dinline%7Bdisplay%3A%2Dms%2Dinline%2Dflexbox%3Bdisplay%3Ainline%2Dflex%3Bmargin%2Dright%3A1rem%7D%2Ecustom%2Dcontrol%2Dinput%7Bposition%3Aabsolute%3Bleft%3A0%3Bz%2Dindex%3A%2D1%3Bwidth%3A1rem%3Bheight%3A1%2E25rem%3Bopacity%3A0%7D%2Ecustom%2Dcontrol%2Dinput%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bcolor%3A%23fff%3Bborder%2Dcolor%3A%23007bff%3Bbackground%2Dcolor%3A%23007bff%7D%2Ecustom%2Dcontrol%2Dinput%3Afocus%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E25%29%7D%2Ecustom%2Dcontrol%2Dinput%3Afocus%3Anot%28%3Achecked%29%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bborder%2Dcolor%3A%2380bdff%7D%2Ecustom%2Dcontrol%2Dinput%3Anot%28%3Adisabled%29%3Aactive%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23b3d7ff%3Bborder%2Dcolor%3A%23b3d7ff%7D%2Ecustom%2Dcontrol%2Dinput%3Adisabled%7E%2Ecustom%2Dcontrol%2Dlabel%2C%2Ecustom%2Dcontrol%2Dinput%5Bdisabled%5D%7E%2Ecustom%2Dcontrol%2Dlabel%7Bcolor%3A%236c757d%7D%2Ecustom%2Dcontrol%2Dinput%3Adisabled%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%2C%2Ecustom%2Dcontrol%2Dinput%5Bdisabled%5D%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbackground%2Dcolor%3A%23e9ecef%7D%2Ecustom%2Dcontrol%2Dlabel%7Bposition%3Arelative%3Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Atop%7D%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bposition%3Aabsolute%3Btop%3A%2E25rem%3Bleft%3A%2D1%2E5rem%3Bdisplay%3Ablock%3Bwidth%3A1rem%3Bheight%3A1rem%3Bpointer%2Devents%3Anone%3Bcontent%3A%22%22%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A%23adb5bd%20solid%201px%7D%2Ecustom%2Dcontrol%2Dlabel%3A%3Aafter%7Bposition%3Aabsolute%3Btop%3A%2E25rem%3Bleft%3A%2D1%2E5rem%3Bdisplay%3Ablock%3Bwidth%3A1rem%3Bheight%3A1rem%3Bcontent%3A%22%22%3Bbackground%3Ano%2Drepeat%2050%25%2F50%25%2050%25%7D%2Ecustom%2Dcheckbox%20%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bborder%2Dradius%3A%2E25rem%7D%2Ecustom%2Dcheckbox%20%2Ecustom%2Dcontrol%2Dinput%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Aafter%7Bbackground%2Dimage%3Aurl%28%22data%3Aimage%2Fsvg%2Bxml%2C%253csvg%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%20width%3D%278%27%20height%3D%278%27%20viewBox%3D%270%200%208%208%27%253e%253cpath%20fill%3D%27%2523fff%27%20d%3D%27M6%2E564%2E75l%2D3%2E59%203%2E612%2D1%2E538%2D1%2E55L0%204%2E26l2%2E974%202%2E99L8%202%2E193z%27%2F%253e%253c%2Fsvg%253e%22%29%7D%2Ecustom%2Dcheckbox%20%2Ecustom%2Dcontrol%2Dinput%3Aindeterminate%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bborder%2Dcolor%3A%23007bff%3Bbackground%2Dcolor%3A%23007bff%7D%2Ecustom%2Dcheckbox%20%2Ecustom%2Dcontrol%2Dinput%3Aindeterminate%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Aafter%7Bbackground%2Dimage%3Aurl%28%22data%3Aimage%2Fsvg%2Bxml%2C%253csvg%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%20width%3D%274%27%20height%3D%274%27%20viewBox%3D%270%200%204%204%27%253e%253cpath%20stroke%3D%27%2523fff%27%20d%3D%27M0%202h4%27%2F%253e%253c%2Fsvg%253e%22%29%7D%2Ecustom%2Dcheckbox%20%2Ecustom%2Dcontrol%2Dinput%3Adisabled%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbackground%2Dcolor%3Argba%280%2C123%2C255%2C%2E5%29%7D%2Ecustom%2Dcheckbox%20%2Ecustom%2Dcontrol%2Dinput%3Adisabled%3Aindeterminate%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbackground%2Dcolor%3Argba%280%2C123%2C255%2C%2E5%29%7D%2Ecustom%2Dradio%20%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bborder%2Dradius%3A50%25%7D%2Ecustom%2Dradio%20%2Ecustom%2Dcontrol%2Dinput%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Aafter%7Bbackground%2Dimage%3Aurl%28%22data%3Aimage%2Fsvg%2Bxml%2C%253csvg%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%20width%3D%2712%27%20height%3D%2712%27%20viewBox%3D%27%2D4%20%2D4%208%208%27%253e%253ccircle%20r%3D%273%27%20fill%3D%27%2523fff%27%2F%253e%253c%2Fsvg%253e%22%29%7D%2Ecustom%2Dradio%20%2Ecustom%2Dcontrol%2Dinput%3Adisabled%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbackground%2Dcolor%3Argba%280%2C123%2C255%2C%2E5%29%7D%2Ecustom%2Dswitch%7Bpadding%2Dleft%3A2%2E25rem%7D%2Ecustom%2Dswitch%20%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bleft%3A%2D2%2E25rem%3Bwidth%3A1%2E75rem%3Bpointer%2Devents%3Aall%3Bborder%2Dradius%3A%2E5rem%7D%2Ecustom%2Dswitch%20%2Ecustom%2Dcontrol%2Dlabel%3A%3Aafter%7Btop%3Acalc%28%2E25rem%20%2B%202px%29%3Bleft%3Acalc%28%2D2%2E25rem%20%2B%202px%29%3Bwidth%3Acalc%281rem%20%2D%204px%29%3Bheight%3Acalc%281rem%20%2D%204px%29%3Bbackground%2Dcolor%3A%23adb5bd%3Bborder%2Dradius%3A%2E5rem%3Btransition%3Abackground%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cborder%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cbox%2Dshadow%20%2E15s%20ease%2Din%2Dout%2C%2Dwebkit%2Dtransform%20%2E15s%20ease%2Din%2Dout%3Btransition%3Atransform%20%2E15s%20ease%2Din%2Dout%2Cbackground%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cborder%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cbox%2Dshadow%20%2E15s%20ease%2Din%2Dout%3Btransition%3Atransform%20%2E15s%20ease%2Din%2Dout%2Cbackground%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cborder%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cbox%2Dshadow%20%2E15s%20ease%2Din%2Dout%2C%2Dwebkit%2Dtransform%20%2E15s%20ease%2Din%2Dout%7D%40media%20%28prefers%2Dreduced%2Dmotion%3Areduce%29%7B%2Ecustom%2Dswitch%20%2Ecustom%2Dcontrol%2Dlabel%3A%3Aafter%7Btransition%3Anone%7D%7D%2Ecustom%2Dswitch%20%2Ecustom%2Dcontrol%2Dinput%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Aafter%7Bbackground%2Dcolor%3A%23fff%3B%2Dwebkit%2Dtransform%3AtranslateX%28%2E75rem%29%3Btransform%3AtranslateX%28%2E75rem%29%7D%2Ecustom%2Dswitch%20%2Ecustom%2Dcontrol%2Dinput%3Adisabled%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbackground%2Dcolor%3Argba%280%2C123%2C255%2C%2E5%29%7D%2Ecustom%2Dselect%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A100%25%3Bheight%3Acalc%281%2E5em%20%2B%20%2E75rem%20%2B%202px%29%3Bpadding%3A%2E375rem%201%2E75rem%20%2E375rem%20%2E75rem%3Bfont%2Dsize%3A1rem%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E5%3Bcolor%3A%23495057%3Bvertical%2Dalign%3Amiddle%3Bbackground%3A%23fff%20url%28%22data%3Aimage%2Fsvg%2Bxml%2C%253csvg%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%20width%3D%274%27%20height%3D%275%27%20viewBox%3D%270%200%204%205%27%253e%253cpath%20fill%3D%27%2523343a40%27%20d%3D%27M2%200L0%202h4zm0%205L0%203h4z%27%2F%253e%253c%2Fsvg%253e%22%29%20no%2Drepeat%20right%20%2E75rem%20center%2F8px%2010px%3Bborder%3A1px%20solid%20%23ced4da%3Bborder%2Dradius%3A%2E25rem%3B%2Dwebkit%2Dappearance%3Anone%3B%2Dmoz%2Dappearance%3Anone%3Bappearance%3Anone%7D%2Ecustom%2Dselect%3Afocus%7Bborder%2Dcolor%3A%2380bdff%3Boutline%3A0%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E25%29%7D%2Ecustom%2Dselect%3Afocus%3A%3A%2Dms%2Dvalue%7Bcolor%3A%23495057%3Bbackground%2Dcolor%3A%23fff%7D%2Ecustom%2Dselect%5Bmultiple%5D%2C%2Ecustom%2Dselect%5Bsize%5D%3Anot%28%5Bsize%3D%221%22%5D%29%7Bheight%3Aauto%3Bpadding%2Dright%3A%2E75rem%3Bbackground%2Dimage%3Anone%7D%2Ecustom%2Dselect%3Adisabled%7Bcolor%3A%236c757d%3Bbackground%2Dcolor%3A%23e9ecef%7D%2Ecustom%2Dselect%3A%3A%2Dms%2Dexpand%7Bdisplay%3Anone%7D%2Ecustom%2Dselect%3A%2Dmoz%2Dfocusring%7Bcolor%3Atransparent%3Btext%2Dshadow%3A0%200%200%20%23495057%7D%2Ecustom%2Dselect%2Dsm%7Bheight%3Acalc%281%2E5em%20%2B%20%2E5rem%20%2B%202px%29%3Bpadding%2Dtop%3A%2E25rem%3Bpadding%2Dbottom%3A%2E25rem%3Bpadding%2Dleft%3A%2E5rem%3Bfont%2Dsize%3A%2E875rem%7D%2Ecustom%2Dselect%2Dlg%7Bheight%3Acalc%281%2E5em%20%2B%201rem%20%2B%202px%29%3Bpadding%2Dtop%3A%2E5rem%3Bpadding%2Dbottom%3A%2E5rem%3Bpadding%2Dleft%3A1rem%3Bfont%2Dsize%3A1%2E25rem%7D%2Ecustom%2Dfile%7Bposition%3Arelative%3Bdisplay%3Ainline%2Dblock%3Bwidth%3A100%25%3Bheight%3Acalc%281%2E5em%20%2B%20%2E75rem%20%2B%202px%29%3Bmargin%2Dbottom%3A0%7D%2Ecustom%2Dfile%2Dinput%7Bposition%3Arelative%3Bz%2Dindex%3A2%3Bwidth%3A100%25%3Bheight%3Acalc%281%2E5em%20%2B%20%2E75rem%20%2B%202px%29%3Bmargin%3A0%3Bopacity%3A0%7D%2Ecustom%2Dfile%2Dinput%3Afocus%7E%2Ecustom%2Dfile%2Dlabel%7Bborder%2Dcolor%3A%2380bdff%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E25%29%7D%2Ecustom%2Dfile%2Dinput%3Adisabled%7E%2Ecustom%2Dfile%2Dlabel%2C%2Ecustom%2Dfile%2Dinput%5Bdisabled%5D%7E%2Ecustom%2Dfile%2Dlabel%7Bbackground%2Dcolor%3A%23e9ecef%7D%2Ecustom%2Dfile%2Dinput%3Alang%28en%29%7E%2Ecustom%2Dfile%2Dlabel%3A%3Aafter%7Bcontent%3A%22Browse%22%7D%2Ecustom%2Dfile%2Dinput%7E%2Ecustom%2Dfile%2Dlabel%5Bdata%2Dbrowse%5D%3A%3Aafter%7Bcontent%3Aattr%28data%2Dbrowse%29%7D%2Ecustom%2Dfile%2Dlabel%7Bposition%3Aabsolute%3Btop%3A0%3Bright%3A0%3Bleft%3A0%3Bz%2Dindex%3A1%3Bheight%3Acalc%281%2E5em%20%2B%20%2E75rem%20%2B%202px%29%3Bpadding%3A%2E375rem%20%2E75rem%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E5%3Bcolor%3A%23495057%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ced4da%3Bborder%2Dradius%3A%2E25rem%7D%2Ecustom%2Dfile%2Dlabel%3A%3Aafter%7Bposition%3Aabsolute%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bz%2Dindex%3A3%3Bdisplay%3Ablock%3Bheight%3Acalc%281%2E5em%20%2B%20%2E75rem%29%3Bpadding%3A%2E375rem%20%2E75rem%3Bline%2Dheight%3A1%2E5%3Bcolor%3A%23495057%3Bcontent%3A%22Browse%22%3Bbackground%2Dcolor%3A%23e9ecef%3Bborder%2Dleft%3Ainherit%3Bborder%2Dradius%3A0%20%2E25rem%20%2E25rem%200%7D%2Ecustom%2Drange%7Bwidth%3A100%25%3Bheight%3A1%2E4rem%3Bpadding%3A0%3Bbackground%2Dcolor%3Atransparent%3B%2Dwebkit%2Dappearance%3Anone%3B%2Dmoz%2Dappearance%3Anone%3Bappearance%3Anone%7D%2Ecustom%2Drange%3Afocus%7Boutline%3A0%7D%2Ecustom%2Drange%3Afocus%3A%3A%2Dwebkit%2Dslider%2Dthumb%7Bbox%2Dshadow%3A0%200%200%201px%20%23fff%2C0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E25%29%7D%2Ecustom%2Drange%3Afocus%3A%3A%2Dmoz%2Drange%2Dthumb%7Bbox%2Dshadow%3A0%200%200%201px%20%23fff%2C0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E25%29%7D%2Ecustom%2Drange%3Afocus%3A%3A%2Dms%2Dthumb%7Bbox%2Dshadow%3A0%200%200%201px%20%23fff%2C0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E25%29%7D%2Ecustom%2Drange%3A%3A%2Dmoz%2Dfocus%2Douter%7Bborder%3A0%7D%2Ecustom%2Drange%3A%3A%2Dwebkit%2Dslider%2Dthumb%7Bwidth%3A1rem%3Bheight%3A1rem%3Bmargin%2Dtop%3A%2D%2E25rem%3Bbackground%2Dcolor%3A%23007bff%3Bborder%3A0%3Bborder%2Dradius%3A1rem%3B%2Dwebkit%2Dtransition%3Abackground%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cborder%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cbox%2Dshadow%20%2E15s%20ease%2Din%2Dout%3Btransition%3Abackground%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cborder%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cbox%2Dshadow%20%2E15s%20ease%2Din%2Dout%3B%2Dwebkit%2Dappearance%3Anone%3Bappearance%3Anone%7D%40media%20%28prefers%2Dreduced%2Dmotion%3Areduce%29%7B%2Ecustom%2Drange%3A%3A%2Dwebkit%2Dslider%2Dthumb%7B%2Dwebkit%2Dtransition%3Anone%3Btransition%3Anone%7D%7D%2Ecustom%2Drange%3A%3A%2Dwebkit%2Dslider%2Dthumb%3Aactive%7Bbackground%2Dcolor%3A%23b3d7ff%7D%2Ecustom%2Drange%3A%3A%2Dwebkit%2Dslider%2Drunnable%2Dtrack%7Bwidth%3A100%25%3Bheight%3A%2E5rem%3Bcolor%3Atransparent%3Bcursor%3Apointer%3Bbackground%2Dcolor%3A%23dee2e6%3Bborder%2Dcolor%3Atransparent%3Bborder%2Dradius%3A1rem%7D%2Ecustom%2Drange%3A%3A%2Dmoz%2Drange%2Dthumb%7Bwidth%3A1rem%3Bheight%3A1rem%3Bbackground%2Dcolor%3A%23007bff%3Bborder%3A0%3Bborder%2Dradius%3A1rem%3B%2Dmoz%2Dtransition%3Abackground%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cborder%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cbox%2Dshadow%20%2E15s%20ease%2Din%2Dout%3Btransition%3Abackground%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cborder%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cbox%2Dshadow%20%2E15s%20ease%2Din%2Dout%3B%2Dmoz%2Dappearance%3Anone%3Bappearance%3Anone%7D%40media%20%28prefers%2Dreduced%2Dmotion%3Areduce%29%7B%2Ecustom%2Drange%3A%3A%2Dmoz%2Drange%2Dthumb%7B%2Dmoz%2Dtransition%3Anone%3Btransition%3Anone%7D%7D%2Ecustom%2Drange%3A%3A%2Dmoz%2Drange%2Dthumb%3Aactive%7Bbackground%2Dcolor%3A%23b3d7ff%7D%2Ecustom%2Drange%3A%3A%2Dmoz%2Drange%2Dtrack%7Bwidth%3A100%25%3Bheight%3A%2E5rem%3Bcolor%3Atransparent%3Bcursor%3Apointer%3Bbackground%2Dcolor%3A%23dee2e6%3Bborder%2Dcolor%3Atransparent%3Bborder%2Dradius%3A1rem%7D%2Ecustom%2Drange%3A%3A%2Dms%2Dthumb%7Bwidth%3A1rem%3Bheight%3A1rem%3Bmargin%2Dtop%3A0%3Bmargin%2Dright%3A%2E2rem%3Bmargin%2Dleft%3A%2E2rem%3Bbackground%2Dcolor%3A%23007bff%3Bborder%3A0%3Bborder%2Dradius%3A1rem%3B%2Dms%2Dtransition%3Abackground%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cborder%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cbox%2Dshadow%20%2E15s%20ease%2Din%2Dout%3Btransition%3Abackground%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cborder%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cbox%2Dshadow%20%2E15s%20ease%2Din%2Dout%3Bappearance%3Anone%7D%40media%20%28prefers%2Dreduced%2Dmotion%3Areduce%29%7B%2Ecustom%2Drange%3A%3A%2Dms%2Dthumb%7B%2Dms%2Dtransition%3Anone%3Btransition%3Anone%7D%7D%2Ecustom%2Drange%3A%3A%2Dms%2Dthumb%3Aactive%7Bbackground%2Dcolor%3A%23b3d7ff%7D%2Ecustom%2Drange%3A%3A%2Dms%2Dtrack%7Bwidth%3A100%25%3Bheight%3A%2E5rem%3Bcolor%3Atransparent%3Bcursor%3Apointer%3Bbackground%2Dcolor%3Atransparent%3Bborder%2Dcolor%3Atransparent%3Bborder%2Dwidth%3A%2E5rem%7D%2Ecustom%2Drange%3A%3A%2Dms%2Dfill%2Dlower%7Bbackground%2Dcolor%3A%23dee2e6%3Bborder%2Dradius%3A1rem%7D%2Ecustom%2Drange%3A%3A%2Dms%2Dfill%2Dupper%7Bmargin%2Dright%3A15px%3Bbackground%2Dcolor%3A%23dee2e6%3Bborder%2Dradius%3A1rem%7D%2Ecustom%2Drange%3Adisabled%3A%3A%2Dwebkit%2Dslider%2Dthumb%7Bbackground%2Dcolor%3A%23adb5bd%7D%2Ecustom%2Drange%3Adisabled%3A%3A%2Dwebkit%2Dslider%2Drunnable%2Dtrack%7Bcursor%3Adefault%7D%2Ecustom%2Drange%3Adisabled%3A%3A%2Dmoz%2Drange%2Dthumb%7Bbackground%2Dcolor%3A%23adb5bd%7D%2Ecustom%2Drange%3Adisabled%3A%3A%2Dmoz%2Drange%2Dtrack%7Bcursor%3Adefault%7D%2Ecustom%2Drange%3Adisabled%3A%3A%2Dms%2Dthumb%7Bbackground%2Dcolor%3A%23adb5bd%7D%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%2C%2Ecustom%2Dfile%2Dlabel%2C%2Ecustom%2Dselect%7Btransition%3Abackground%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cborder%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cbox%2Dshadow%20%2E15s%20ease%2Din%2Dout%7D%40media%20%28prefers%2Dreduced%2Dmotion%3Areduce%29%7B%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%2C%2Ecustom%2Dfile%2Dlabel%2C%2Ecustom%2Dselect%7Btransition%3Anone%7D%7D%2Enav%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dwrap%3Awrap%3Bflex%2Dwrap%3Awrap%3Bpadding%2Dleft%3A0%3Bmargin%2Dbottom%3A0%3Blist%2Dstyle%3Anone%7D%2Enav%2Dlink%7Bdisplay%3Ablock%3Bpadding%3A%2E5rem%201rem%7D%2Enav%2Dlink%3Afocus%2C%2Enav%2Dlink%3Ahover%7Btext%2Ddecoration%3Anone%7D%2Enav%2Dlink%2Edisabled%7Bcolor%3A%236c757d%3Bpointer%2Devents%3Anone%3Bcursor%3Adefault%7D%2Enav%2Dtabs%7Bborder%2Dbottom%3A1px%20solid%20%23dee2e6%7D%2Enav%2Dtabs%20%2Enav%2Ditem%7Bmargin%2Dbottom%3A%2D1px%7D%2Enav%2Dtabs%20%2Enav%2Dlink%7Bborder%3A1px%20solid%20transparent%3Bborder%2Dtop%2Dleft%2Dradius%3A%2E25rem%3Bborder%2Dtop%2Dright%2Dradius%3A%2E25rem%7D%2Enav%2Dtabs%20%2Enav%2Dlink%3Afocus%2C%2Enav%2Dtabs%20%2Enav%2Dlink%3Ahover%7Bborder%2Dcolor%3A%23e9ecef%20%23e9ecef%20%23dee2e6%7D%2Enav%2Dtabs%20%2Enav%2Dlink%2Edisabled%7Bcolor%3A%236c757d%3Bbackground%2Dcolor%3Atransparent%3Bborder%2Dcolor%3Atransparent%7D%2Enav%2Dtabs%20%2Enav%2Ditem%2Eshow%20%2Enav%2Dlink%2C%2Enav%2Dtabs%20%2Enav%2Dlink%2Eactive%7Bcolor%3A%23495057%3Bbackground%2Dcolor%3A%23fff%3Bborder%2Dcolor%3A%23dee2e6%20%23dee2e6%20%23fff%7D%2Enav%2Dtabs%20%2Edropdown%2Dmenu%7Bmargin%2Dtop%3A%2D1px%3Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Enav%2Dpills%20%2Enav%2Dlink%7Bborder%2Dradius%3A%2E25rem%7D%2Enav%2Dpills%20%2Enav%2Dlink%2Eactive%2C%2Enav%2Dpills%20%2Eshow%3E%2Enav%2Dlink%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23007bff%7D%2Enav%2Dfill%20%2Enav%2Ditem%7B%2Dms%2Dflex%3A1%201%20auto%3Bflex%3A1%201%20auto%3Btext%2Dalign%3Acenter%7D%2Enav%2Djustified%20%2Enav%2Ditem%7B%2Dms%2Dflex%2Dpreferred%2Dsize%3A0%3Bflex%2Dbasis%3A0%3B%2Dms%2Dflex%2Dpositive%3A1%3Bflex%2Dgrow%3A1%3Btext%2Dalign%3Acenter%7D%2Etab%2Dcontent%3E%2Etab%2Dpane%7Bdisplay%3Anone%7D%2Etab%2Dcontent%3E%2Eactive%7Bdisplay%3Ablock%7D%2Enavbar%7Bposition%3Arelative%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dwrap%3Awrap%3Bflex%2Dwrap%3Awrap%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3B%2Dms%2Dflex%2Dpack%3Ajustify%3Bjustify%2Dcontent%3Aspace%2Dbetween%3Bpadding%3A%2E5rem%201rem%7D%2Enavbar%20%2Econtainer%2C%2Enavbar%20%2Econtainer%2Dfluid%2C%2Enavbar%20%2Econtainer%2Dlg%2C%2Enavbar%20%2Econtainer%2Dmd%2C%2Enavbar%20%2Econtainer%2Dsm%2C%2Enavbar%20%2Econtainer%2Dxl%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dwrap%3Awrap%3Bflex%2Dwrap%3Awrap%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3B%2Dms%2Dflex%2Dpack%3Ajustify%3Bjustify%2Dcontent%3Aspace%2Dbetween%7D%2Enavbar%2Dbrand%7Bdisplay%3Ainline%2Dblock%3Bpadding%2Dtop%3A%2E3125rem%3Bpadding%2Dbottom%3A%2E3125rem%3Bmargin%2Dright%3A1rem%3Bfont%2Dsize%3A1%2E25rem%3Bline%2Dheight%3Ainherit%3Bwhite%2Dspace%3Anowrap%7D%2Enavbar%2Dbrand%3Afocus%2C%2Enavbar%2Dbrand%3Ahover%7Btext%2Ddecoration%3Anone%7D%2Enavbar%2Dnav%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Ddirection%3Acolumn%3Bflex%2Ddirection%3Acolumn%3Bpadding%2Dleft%3A0%3Bmargin%2Dbottom%3A0%3Blist%2Dstyle%3Anone%7D%2Enavbar%2Dnav%20%2Enav%2Dlink%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%2Enavbar%2Dnav%20%2Edropdown%2Dmenu%7Bposition%3Astatic%3Bfloat%3Anone%7D%2Enavbar%2Dtext%7Bdisplay%3Ainline%2Dblock%3Bpadding%2Dtop%3A%2E5rem%3Bpadding%2Dbottom%3A%2E5rem%7D%2Enavbar%2Dcollapse%7B%2Dms%2Dflex%2Dpreferred%2Dsize%3A100%25%3Bflex%2Dbasis%3A100%25%3B%2Dms%2Dflex%2Dpositive%3A1%3Bflex%2Dgrow%3A1%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%7D%2Enavbar%2Dtoggler%7Bpadding%3A%2E25rem%20%2E75rem%3Bfont%2Dsize%3A1%2E25rem%3Bline%2Dheight%3A1%3Bbackground%2Dcolor%3Atransparent%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A%2E25rem%7D%2Enavbar%2Dtoggler%3Afocus%2C%2Enavbar%2Dtoggler%3Ahover%7Btext%2Ddecoration%3Anone%7D%2Enavbar%2Dtoggler%2Dicon%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A1%2E5em%3Bheight%3A1%2E5em%3Bvertical%2Dalign%3Amiddle%3Bcontent%3A%22%22%3Bbackground%3Ano%2Drepeat%20center%20center%3Bbackground%2Dsize%3A100%25%20100%25%7D%40media%20%28max%2Dwidth%3A575%2E98px%29%7B%2Enavbar%2Dexpand%2Dsm%3E%2Econtainer%2C%2Enavbar%2Dexpand%2Dsm%3E%2Econtainer%2Dfluid%2C%2Enavbar%2Dexpand%2Dsm%3E%2Econtainer%2Dlg%2C%2Enavbar%2Dexpand%2Dsm%3E%2Econtainer%2Dmd%2C%2Enavbar%2Dexpand%2Dsm%3E%2Econtainer%2Dsm%2C%2Enavbar%2Dexpand%2Dsm%3E%2Econtainer%2Dxl%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Enavbar%2Dexpand%2Dsm%7B%2Dms%2Dflex%2Dflow%3Arow%20nowrap%3Bflex%2Dflow%3Arow%20nowrap%3B%2Dms%2Dflex%2Dpack%3Astart%3Bjustify%2Dcontent%3Aflex%2Dstart%7D%2Enavbar%2Dexpand%2Dsm%20%2Enavbar%2Dnav%7B%2Dms%2Dflex%2Ddirection%3Arow%3Bflex%2Ddirection%3Arow%7D%2Enavbar%2Dexpand%2Dsm%20%2Enavbar%2Dnav%20%2Edropdown%2Dmenu%7Bposition%3Aabsolute%7D%2Enavbar%2Dexpand%2Dsm%20%2Enavbar%2Dnav%20%2Enav%2Dlink%7Bpadding%2Dright%3A%2E5rem%3Bpadding%2Dleft%3A%2E5rem%7D%2Enavbar%2Dexpand%2Dsm%3E%2Econtainer%2C%2Enavbar%2Dexpand%2Dsm%3E%2Econtainer%2Dfluid%2C%2Enavbar%2Dexpand%2Dsm%3E%2Econtainer%2Dlg%2C%2Enavbar%2Dexpand%2Dsm%3E%2Econtainer%2Dmd%2C%2Enavbar%2Dexpand%2Dsm%3E%2Econtainer%2Dsm%2C%2Enavbar%2Dexpand%2Dsm%3E%2Econtainer%2Dxl%7B%2Dms%2Dflex%2Dwrap%3Anowrap%3Bflex%2Dwrap%3Anowrap%7D%2Enavbar%2Dexpand%2Dsm%20%2Enavbar%2Dcollapse%7Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%3B%2Dms%2Dflex%2Dpreferred%2Dsize%3Aauto%3Bflex%2Dbasis%3Aauto%7D%2Enavbar%2Dexpand%2Dsm%20%2Enavbar%2Dtoggler%7Bdisplay%3Anone%7D%7D%40media%20%28max%2Dwidth%3A767%2E98px%29%7B%2Enavbar%2Dexpand%2Dmd%3E%2Econtainer%2C%2Enavbar%2Dexpand%2Dmd%3E%2Econtainer%2Dfluid%2C%2Enavbar%2Dexpand%2Dmd%3E%2Econtainer%2Dlg%2C%2Enavbar%2Dexpand%2Dmd%3E%2Econtainer%2Dmd%2C%2Enavbar%2Dexpand%2Dmd%3E%2Econtainer%2Dsm%2C%2Enavbar%2Dexpand%2Dmd%3E%2Econtainer%2Dxl%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dexpand%2Dmd%7B%2Dms%2Dflex%2Dflow%3Arow%20nowrap%3Bflex%2Dflow%3Arow%20nowrap%3B%2Dms%2Dflex%2Dpack%3Astart%3Bjustify%2Dcontent%3Aflex%2Dstart%7D%2Enavbar%2Dexpand%2Dmd%20%2Enavbar%2Dnav%7B%2Dms%2Dflex%2Ddirection%3Arow%3Bflex%2Ddirection%3Arow%7D%2Enavbar%2Dexpand%2Dmd%20%2Enavbar%2Dnav%20%2Edropdown%2Dmenu%7Bposition%3Aabsolute%7D%2Enavbar%2Dexpand%2Dmd%20%2Enavbar%2Dnav%20%2Enav%2Dlink%7Bpadding%2Dright%3A%2E5rem%3Bpadding%2Dleft%3A%2E5rem%7D%2Enavbar%2Dexpand%2Dmd%3E%2Econtainer%2C%2Enavbar%2Dexpand%2Dmd%3E%2Econtainer%2Dfluid%2C%2Enavbar%2Dexpand%2Dmd%3E%2Econtainer%2Dlg%2C%2Enavbar%2Dexpand%2Dmd%3E%2Econtainer%2Dmd%2C%2Enavbar%2Dexpand%2Dmd%3E%2Econtainer%2Dsm%2C%2Enavbar%2Dexpand%2Dmd%3E%2Econtainer%2Dxl%7B%2Dms%2Dflex%2Dwrap%3Anowrap%3Bflex%2Dwrap%3Anowrap%7D%2Enavbar%2Dexpand%2Dmd%20%2Enavbar%2Dcollapse%7Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%3B%2Dms%2Dflex%2Dpreferred%2Dsize%3Aauto%3Bflex%2Dbasis%3Aauto%7D%2Enavbar%2Dexpand%2Dmd%20%2Enavbar%2Dtoggler%7Bdisplay%3Anone%7D%7D%40media%20%28max%2Dwidth%3A991%2E98px%29%7B%2Enavbar%2Dexpand%2Dlg%3E%2Econtainer%2C%2Enavbar%2Dexpand%2Dlg%3E%2Econtainer%2Dfluid%2C%2Enavbar%2Dexpand%2Dlg%3E%2Econtainer%2Dlg%2C%2Enavbar%2Dexpand%2Dlg%3E%2Econtainer%2Dmd%2C%2Enavbar%2Dexpand%2Dlg%3E%2Econtainer%2Dsm%2C%2Enavbar%2Dexpand%2Dlg%3E%2Econtainer%2Dxl%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Enavbar%2Dexpand%2Dlg%7B%2Dms%2Dflex%2Dflow%3Arow%20nowrap%3Bflex%2Dflow%3Arow%20nowrap%3B%2Dms%2Dflex%2Dpack%3Astart%3Bjustify%2Dcontent%3Aflex%2Dstart%7D%2Enavbar%2Dexpand%2Dlg%20%2Enavbar%2Dnav%7B%2Dms%2Dflex%2Ddirection%3Arow%3Bflex%2Ddirection%3Arow%7D%2Enavbar%2Dexpand%2Dlg%20%2Enavbar%2Dnav%20%2Edropdown%2Dmenu%7Bposition%3Aabsolute%7D%2Enavbar%2Dexpand%2Dlg%20%2Enavbar%2Dnav%20%2Enav%2Dlink%7Bpadding%2Dright%3A%2E5rem%3Bpadding%2Dleft%3A%2E5rem%7D%2Enavbar%2Dexpand%2Dlg%3E%2Econtainer%2C%2Enavbar%2Dexpand%2Dlg%3E%2Econtainer%2Dfluid%2C%2Enavbar%2Dexpand%2Dlg%3E%2Econtainer%2Dlg%2C%2Enavbar%2Dexpand%2Dlg%3E%2Econtainer%2Dmd%2C%2Enavbar%2Dexpand%2Dlg%3E%2Econtainer%2Dsm%2C%2Enavbar%2Dexpand%2Dlg%3E%2Econtainer%2Dxl%7B%2Dms%2Dflex%2Dwrap%3Anowrap%3Bflex%2Dwrap%3Anowrap%7D%2Enavbar%2Dexpand%2Dlg%20%2Enavbar%2Dcollapse%7Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%3B%2Dms%2Dflex%2Dpreferred%2Dsize%3Aauto%3Bflex%2Dbasis%3Aauto%7D%2Enavbar%2Dexpand%2Dlg%20%2Enavbar%2Dtoggler%7Bdisplay%3Anone%7D%7D%40media%20%28max%2Dwidth%3A1199%2E98px%29%7B%2Enavbar%2Dexpand%2Dxl%3E%2Econtainer%2C%2Enavbar%2Dexpand%2Dxl%3E%2Econtainer%2Dfluid%2C%2Enavbar%2Dexpand%2Dxl%3E%2Econtainer%2Dlg%2C%2Enavbar%2Dexpand%2Dxl%3E%2Econtainer%2Dmd%2C%2Enavbar%2Dexpand%2Dxl%3E%2Econtainer%2Dsm%2C%2Enavbar%2Dexpand%2Dxl%3E%2Econtainer%2Dxl%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Enavbar%2Dexpand%2Dxl%7B%2Dms%2Dflex%2Dflow%3Arow%20nowrap%3Bflex%2Dflow%3Arow%20nowrap%3B%2Dms%2Dflex%2Dpack%3Astart%3Bjustify%2Dcontent%3Aflex%2Dstart%7D%2Enavbar%2Dexpand%2Dxl%20%2Enavbar%2Dnav%7B%2Dms%2Dflex%2Ddirection%3Arow%3Bflex%2Ddirection%3Arow%7D%2Enavbar%2Dexpand%2Dxl%20%2Enavbar%2Dnav%20%2Edropdown%2Dmenu%7Bposition%3Aabsolute%7D%2Enavbar%2Dexpand%2Dxl%20%2Enavbar%2Dnav%20%2Enav%2Dlink%7Bpadding%2Dright%3A%2E5rem%3Bpadding%2Dleft%3A%2E5rem%7D%2Enavbar%2Dexpand%2Dxl%3E%2Econtainer%2C%2Enavbar%2Dexpand%2Dxl%3E%2Econtainer%2Dfluid%2C%2Enavbar%2Dexpand%2Dxl%3E%2Econtainer%2Dlg%2C%2Enavbar%2Dexpand%2Dxl%3E%2Econtainer%2Dmd%2C%2Enavbar%2Dexpand%2Dxl%3E%2Econtainer%2Dsm%2C%2Enavbar%2Dexpand%2Dxl%3E%2Econtainer%2Dxl%7B%2Dms%2Dflex%2Dwrap%3Anowrap%3Bflex%2Dwrap%3Anowrap%7D%2Enavbar%2Dexpand%2Dxl%20%2Enavbar%2Dcollapse%7Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%3B%2Dms%2Dflex%2Dpreferred%2Dsize%3Aauto%3Bflex%2Dbasis%3Aauto%7D%2Enavbar%2Dexpand%2Dxl%20%2Enavbar%2Dtoggler%7Bdisplay%3Anone%7D%7D%2Enavbar%2Dexpand%7B%2Dms%2Dflex%2Dflow%3Arow%20nowrap%3Bflex%2Dflow%3Arow%20nowrap%3B%2Dms%2Dflex%2Dpack%3Astart%3Bjustify%2Dcontent%3Aflex%2Dstart%7D%2Enavbar%2Dexpand%3E%2Econtainer%2C%2Enavbar%2Dexpand%3E%2Econtainer%2Dfluid%2C%2Enavbar%2Dexpand%3E%2Econtainer%2Dlg%2C%2Enavbar%2Dexpand%3E%2Econtainer%2Dmd%2C%2Enavbar%2Dexpand%3E%2Econtainer%2Dsm%2C%2Enavbar%2Dexpand%3E%2Econtainer%2Dxl%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%2Enavbar%2Dexpand%20%2Enavbar%2Dnav%7B%2Dms%2Dflex%2Ddirection%3Arow%3Bflex%2Ddirection%3Arow%7D%2Enavbar%2Dexpand%20%2Enavbar%2Dnav%20%2Edropdown%2Dmenu%7Bposition%3Aabsolute%7D%2Enavbar%2Dexpand%20%2Enavbar%2Dnav%20%2Enav%2Dlink%7Bpadding%2Dright%3A%2E5rem%3Bpadding%2Dleft%3A%2E5rem%7D%2Enavbar%2Dexpand%3E%2Econtainer%2C%2Enavbar%2Dexpand%3E%2Econtainer%2Dfluid%2C%2Enavbar%2Dexpand%3E%2Econtainer%2Dlg%2C%2Enavbar%2Dexpand%3E%2Econtainer%2Dmd%2C%2Enavbar%2Dexpand%3E%2Econtainer%2Dsm%2C%2Enavbar%2Dexpand%3E%2Econtainer%2Dxl%7B%2Dms%2Dflex%2Dwrap%3Anowrap%3Bflex%2Dwrap%3Anowrap%7D%2Enavbar%2Dexpand%20%2Enavbar%2Dcollapse%7Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%3B%2Dms%2Dflex%2Dpreferred%2Dsize%3Aauto%3Bflex%2Dbasis%3Aauto%7D%2Enavbar%2Dexpand%20%2Enavbar%2Dtoggler%7Bdisplay%3Anone%7D%2Enavbar%2Dlight%20%2Enavbar%2Dbrand%7Bcolor%3Argba%280%2C0%2C0%2C%2E9%29%7D%2Enavbar%2Dlight%20%2Enavbar%2Dbrand%3Afocus%2C%2Enavbar%2Dlight%20%2Enavbar%2Dbrand%3Ahover%7Bcolor%3Argba%280%2C0%2C0%2C%2E9%29%7D%2Enavbar%2Dlight%20%2Enavbar%2Dnav%20%2Enav%2Dlink%7Bcolor%3Argba%280%2C0%2C0%2C%2E5%29%7D%2Enavbar%2Dlight%20%2Enavbar%2Dnav%20%2Enav%2Dlink%3Afocus%2C%2Enavbar%2Dlight%20%2Enavbar%2Dnav%20%2Enav%2Dlink%3Ahover%7Bcolor%3Argba%280%2C0%2C0%2C%2E7%29%7D%2Enavbar%2Dlight%20%2Enavbar%2Dnav%20%2Enav%2Dlink%2Edisabled%7Bcolor%3Argba%280%2C0%2C0%2C%2E3%29%7D%2Enavbar%2Dlight%20%2Enavbar%2Dnav%20%2Eactive%3E%2Enav%2Dlink%2C%2Enavbar%2Dlight%20%2Enavbar%2Dnav%20%2Enav%2Dlink%2Eactive%2C%2Enavbar%2Dlight%20%2Enavbar%2Dnav%20%2Enav%2Dlink%2Eshow%2C%2Enavbar%2Dlight%20%2Enavbar%2Dnav%20%2Eshow%3E%2Enav%2Dlink%7Bcolor%3Argba%280%2C0%2C0%2C%2E9%29%7D%2Enavbar%2Dlight%20%2Enavbar%2Dtoggler%7Bcolor%3Argba%280%2C0%2C0%2C%2E5%29%3Bborder%2Dcolor%3Argba%280%2C0%2C0%2C%2E1%29%7D%2Enavbar%2Dlight%20%2Enavbar%2Dtoggler%2Dicon%7Bbackground%2Dimage%3Aurl%28%22data%3Aimage%2Fsvg%2Bxml%2C%253csvg%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%20width%3D%2730%27%20height%3D%2730%27%20viewBox%3D%270%200%2030%2030%27%253e%253cpath%20stroke%3D%27rgba%25280%2C%200%2C%200%2C%200%2E5%2529%27%20stroke%2Dlinecap%3D%27round%27%20stroke%2Dmiterlimit%3D%2710%27%20stroke%2Dwidth%3D%272%27%20d%3D%27M4%207h22M4%2015h22M4%2023h22%27%2F%253e%253c%2Fsvg%253e%22%29%7D%2Enavbar%2Dlight%20%2Enavbar%2Dtext%7Bcolor%3Argba%280%2C0%2C0%2C%2E5%29%7D%2Enavbar%2Dlight%20%2Enavbar%2Dtext%20a%7Bcolor%3Argba%280%2C0%2C0%2C%2E9%29%7D%2Enavbar%2Dlight%20%2Enavbar%2Dtext%20a%3Afocus%2C%2Enavbar%2Dlight%20%2Enavbar%2Dtext%20a%3Ahover%7Bcolor%3Argba%280%2C0%2C0%2C%2E9%29%7D%2Enavbar%2Ddark%20%2Enavbar%2Dbrand%7Bcolor%3A%23fff%7D%2Enavbar%2Ddark%20%2Enavbar%2Dbrand%3Afocus%2C%2Enavbar%2Ddark%20%2Enavbar%2Dbrand%3Ahover%7Bcolor%3A%23fff%7D%2Enavbar%2Ddark%20%2Enavbar%2Dnav%20%2Enav%2Dlink%7Bcolor%3Argba%28255%2C255%2C255%2C%2E5%29%7D%2Enavbar%2Ddark%20%2Enavbar%2Dnav%20%2Enav%2Dlink%3Afocus%2C%2Enavbar%2Ddark%20%2Enavbar%2Dnav%20%2Enav%2Dlink%3Ahover%7Bcolor%3Argba%28255%2C255%2C255%2C%2E75%29%7D%2Enavbar%2Ddark%20%2Enavbar%2Dnav%20%2Enav%2Dlink%2Edisabled%7Bcolor%3Argba%28255%2C255%2C255%2C%2E25%29%7D%2Enavbar%2Ddark%20%2Enavbar%2Dnav%20%2Eactive%3E%2Enav%2Dlink%2C%2Enavbar%2Ddark%20%2Enavbar%2Dnav%20%2Enav%2Dlink%2Eactive%2C%2Enavbar%2Ddark%20%2Enavbar%2Dnav%20%2Enav%2Dlink%2Eshow%2C%2Enavbar%2Ddark%20%2Enavbar%2Dnav%20%2Eshow%3E%2Enav%2Dlink%7Bcolor%3A%23fff%7D%2Enavbar%2Ddark%20%2Enavbar%2Dtoggler%7Bcolor%3Argba%28255%2C255%2C255%2C%2E5%29%3Bborder%2Dcolor%3Argba%28255%2C255%2C255%2C%2E1%29%7D%2Enavbar%2Ddark%20%2Enavbar%2Dtoggler%2Dicon%7Bbackground%2Dimage%3Aurl%28%22data%3Aimage%2Fsvg%2Bxml%2C%253csvg%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%20width%3D%2730%27%20height%3D%2730%27%20viewBox%3D%270%200%2030%2030%27%253e%253cpath%20stroke%3D%27rgba%2528255%2C%20255%2C%20255%2C%200%2E5%2529%27%20stroke%2Dlinecap%3D%27round%27%20stroke%2Dmiterlimit%3D%2710%27%20stroke%2Dwidth%3D%272%27%20d%3D%27M4%207h22M4%2015h22M4%2023h22%27%2F%253e%253c%2Fsvg%253e%22%29%7D%2Enavbar%2Ddark%20%2Enavbar%2Dtext%7Bcolor%3Argba%28255%2C255%2C255%2C%2E5%29%7D%2Enavbar%2Ddark%20%2Enavbar%2Dtext%20a%7Bcolor%3A%23fff%7D%2Enavbar%2Ddark%20%2Enavbar%2Dtext%20a%3Afocus%2C%2Enavbar%2Ddark%20%2Enavbar%2Dtext%20a%3Ahover%7Bcolor%3A%23fff%7D%2Ecard%7Bposition%3Arelative%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Ddirection%3Acolumn%3Bflex%2Ddirection%3Acolumn%3Bmin%2Dwidth%3A0%3Bword%2Dwrap%3Abreak%2Dword%3Bbackground%2Dcolor%3A%23fff%3Bbackground%2Dclip%3Aborder%2Dbox%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E125%29%3Bborder%2Dradius%3A%2E25rem%7D%2Ecard%3Ehr%7Bmargin%2Dright%3A0%3Bmargin%2Dleft%3A0%7D%2Ecard%3E%2Elist%2Dgroup%7Bborder%2Dtop%3Ainherit%3Bborder%2Dbottom%3Ainherit%7D%2Ecard%3E%2Elist%2Dgroup%3Afirst%2Dchild%7Bborder%2Dtop%2Dwidth%3A0%3Bborder%2Dtop%2Dleft%2Dradius%3Acalc%28%2E25rem%20%2D%201px%29%3Bborder%2Dtop%2Dright%2Dradius%3Acalc%28%2E25rem%20%2D%201px%29%7D%2Ecard%3E%2Elist%2Dgroup%3Alast%2Dchild%7Bborder%2Dbottom%2Dwidth%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3Acalc%28%2E25rem%20%2D%201px%29%3Bborder%2Dbottom%2Dleft%2Dradius%3Acalc%28%2E25rem%20%2D%201px%29%7D%2Ecard%2Dbody%7B%2Dms%2Dflex%3A1%201%20auto%3Bflex%3A1%201%20auto%3Bmin%2Dheight%3A1px%3Bpadding%3A1%2E25rem%7D%2Ecard%2Dtitle%7Bmargin%2Dbottom%3A%2E75rem%7D%2Ecard%2Dsubtitle%7Bmargin%2Dtop%3A%2D%2E375rem%3Bmargin%2Dbottom%3A0%7D%2Ecard%2Dtext%3Alast%2Dchild%7Bmargin%2Dbottom%3A0%7D%2Ecard%2Dlink%3Ahover%7Btext%2Ddecoration%3Anone%7D%2Ecard%2Dlink%2B%2Ecard%2Dlink%7Bmargin%2Dleft%3A1%2E25rem%7D%2Ecard%2Dheader%7Bpadding%3A%2E75rem%201%2E25rem%3Bmargin%2Dbottom%3A0%3Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C%2E03%29%3Bborder%2Dbottom%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E125%29%7D%2Ecard%2Dheader%3Afirst%2Dchild%7Bborder%2Dradius%3Acalc%28%2E25rem%20%2D%201px%29%20calc%28%2E25rem%20%2D%201px%29%200%200%7D%2Ecard%2Dheader%2B%2Elist%2Dgroup%20%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%3A0%7D%2Ecard%2Dfooter%7Bpadding%3A%2E75rem%201%2E25rem%3Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C%2E03%29%3Bborder%2Dtop%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E125%29%7D%2Ecard%2Dfooter%3Alast%2Dchild%7Bborder%2Dradius%3A0%200%20calc%28%2E25rem%20%2D%201px%29%20calc%28%2E25rem%20%2D%201px%29%7D%2Ecard%2Dheader%2Dtabs%7Bmargin%2Dright%3A%2D%2E625rem%3Bmargin%2Dbottom%3A%2D%2E75rem%3Bmargin%2Dleft%3A%2D%2E625rem%3Bborder%2Dbottom%3A0%7D%2Ecard%2Dheader%2Dpills%7Bmargin%2Dright%3A%2D%2E625rem%3Bmargin%2Dleft%3A%2D%2E625rem%7D%2Ecard%2Dimg%2Doverlay%7Bposition%3Aabsolute%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bpadding%3A1%2E25rem%7D%2Ecard%2Dimg%2C%2Ecard%2Dimg%2Dbottom%2C%2Ecard%2Dimg%2Dtop%7B%2Dms%2Dflex%2Dnegative%3A0%3Bflex%2Dshrink%3A0%3Bwidth%3A100%25%7D%2Ecard%2Dimg%2C%2Ecard%2Dimg%2Dtop%7Bborder%2Dtop%2Dleft%2Dradius%3Acalc%28%2E25rem%20%2D%201px%29%3Bborder%2Dtop%2Dright%2Dradius%3Acalc%28%2E25rem%20%2D%201px%29%7D%2Ecard%2Dimg%2C%2Ecard%2Dimg%2Dbottom%7Bborder%2Dbottom%2Dright%2Dradius%3Acalc%28%2E25rem%20%2D%201px%29%3Bborder%2Dbottom%2Dleft%2Dradius%3Acalc%28%2E25rem%20%2D%201px%29%7D%2Ecard%2Ddeck%20%2Ecard%7Bmargin%2Dbottom%3A15px%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Ecard%2Ddeck%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dflow%3Arow%20wrap%3Bflex%2Dflow%3Arow%20wrap%3Bmargin%2Dright%3A%2D15px%3Bmargin%2Dleft%3A%2D15px%7D%2Ecard%2Ddeck%20%2Ecard%7B%2Dms%2Dflex%3A1%200%200%25%3Bflex%3A1%200%200%25%3Bmargin%2Dright%3A15px%3Bmargin%2Dbottom%3A0%3Bmargin%2Dleft%3A15px%7D%7D%2Ecard%2Dgroup%3E%2Ecard%7Bmargin%2Dbottom%3A15px%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Ecard%2Dgroup%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dflow%3Arow%20wrap%3Bflex%2Dflow%3Arow%20wrap%7D%2Ecard%2Dgroup%3E%2Ecard%7B%2Dms%2Dflex%3A1%200%200%25%3Bflex%3A1%200%200%25%3Bmargin%2Dbottom%3A0%7D%2Ecard%2Dgroup%3E%2Ecard%2B%2Ecard%7Bmargin%2Dleft%3A0%3Bborder%2Dleft%3A0%7D%2Ecard%2Dgroup%3E%2Ecard%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Ecard%2Dgroup%3E%2Ecard%3Anot%28%3Alast%2Dchild%29%20%2Ecard%2Dheader%2C%2Ecard%2Dgroup%3E%2Ecard%3Anot%28%3Alast%2Dchild%29%20%2Ecard%2Dimg%2Dtop%7Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Ecard%2Dgroup%3E%2Ecard%3Anot%28%3Alast%2Dchild%29%20%2Ecard%2Dfooter%2C%2Ecard%2Dgroup%3E%2Ecard%3Anot%28%3Alast%2Dchild%29%20%2Ecard%2Dimg%2Dbottom%7Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Ecard%2Dgroup%3E%2Ecard%3Anot%28%3Afirst%2Dchild%29%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ecard%2Dgroup%3E%2Ecard%3Anot%28%3Afirst%2Dchild%29%20%2Ecard%2Dheader%2C%2Ecard%2Dgroup%3E%2Ecard%3Anot%28%3Afirst%2Dchild%29%20%2Ecard%2Dimg%2Dtop%7Bborder%2Dtop%2Dleft%2Dradius%3A0%7D%2Ecard%2Dgroup%3E%2Ecard%3Anot%28%3Afirst%2Dchild%29%20%2Ecard%2Dfooter%2C%2Ecard%2Dgroup%3E%2Ecard%3Anot%28%3Afirst%2Dchild%29%20%2Ecard%2Dimg%2Dbottom%7Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%7D%2Ecard%2Dcolumns%20%2Ecard%7Bmargin%2Dbottom%3A%2E75rem%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Ecard%2Dcolumns%7B%2Dwebkit%2Dcolumn%2Dcount%3A3%3B%2Dmoz%2Dcolumn%2Dcount%3A3%3Bcolumn%2Dcount%3A3%3B%2Dwebkit%2Dcolumn%2Dgap%3A1%2E25rem%3B%2Dmoz%2Dcolumn%2Dgap%3A1%2E25rem%3Bcolumn%2Dgap%3A1%2E25rem%3Borphans%3A1%3Bwidows%3A1%7D%2Ecard%2Dcolumns%20%2Ecard%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A100%25%7D%7D%2Eaccordion%3E%2Ecard%7Boverflow%3Ahidden%7D%2Eaccordion%3E%2Ecard%3Anot%28%3Alast%2Dof%2Dtype%29%7Bborder%2Dbottom%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Eaccordion%3E%2Ecard%3Anot%28%3Afirst%2Dof%2Dtype%29%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Eaccordion%3E%2Ecard%3E%2Ecard%2Dheader%7Bborder%2Dradius%3A0%3Bmargin%2Dbottom%3A%2D1px%7D%2Ebreadcrumb%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dwrap%3Awrap%3Bflex%2Dwrap%3Awrap%3Bpadding%3A%2E75rem%201rem%3Bmargin%2Dbottom%3A1rem%3Blist%2Dstyle%3Anone%3Bbackground%2Dcolor%3A%23e9ecef%3Bborder%2Dradius%3A%2E25rem%7D%2Ebreadcrumb%2Ditem%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%7D%2Ebreadcrumb%2Ditem%2B%2Ebreadcrumb%2Ditem%7Bpadding%2Dleft%3A%2E5rem%7D%2Ebreadcrumb%2Ditem%2B%2Ebreadcrumb%2Ditem%3A%3Abefore%7Bdisplay%3Ainline%2Dblock%3Bpadding%2Dright%3A%2E5rem%3Bcolor%3A%236c757d%3Bcontent%3A%22%2F%22%7D%2Ebreadcrumb%2Ditem%2B%2Ebreadcrumb%2Ditem%3Ahover%3A%3Abefore%7Btext%2Ddecoration%3Aunderline%7D%2Ebreadcrumb%2Ditem%2B%2Ebreadcrumb%2Ditem%3Ahover%3A%3Abefore%7Btext%2Ddecoration%3Anone%7D%2Ebreadcrumb%2Ditem%2Eactive%7Bcolor%3A%236c757d%7D%2Epagination%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3Bpadding%2Dleft%3A0%3Blist%2Dstyle%3Anone%3Bborder%2Dradius%3A%2E25rem%7D%2Epage%2Dlink%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bpadding%3A%2E5rem%20%2E75rem%3Bmargin%2Dleft%3A%2D1px%3Bline%2Dheight%3A1%2E25%3Bcolor%3A%23007bff%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23dee2e6%7D%2Epage%2Dlink%3Ahover%7Bz%2Dindex%3A2%3Bcolor%3A%230056b3%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23e9ecef%3Bborder%2Dcolor%3A%23dee2e6%7D%2Epage%2Dlink%3Afocus%7Bz%2Dindex%3A3%3Boutline%3A0%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E25%29%7D%2Epage%2Ditem%3Afirst%2Dchild%20%2Epage%2Dlink%7Bmargin%2Dleft%3A0%3Bborder%2Dtop%2Dleft%2Dradius%3A%2E25rem%3Bborder%2Dbottom%2Dleft%2Dradius%3A%2E25rem%7D%2Epage%2Ditem%3Alast%2Dchild%20%2Epage%2Dlink%7Bborder%2Dtop%2Dright%2Dradius%3A%2E25rem%3Bborder%2Dbottom%2Dright%2Dradius%3A%2E25rem%7D%2Epage%2Ditem%2Eactive%20%2Epage%2Dlink%7Bz%2Dindex%3A3%3Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23007bff%3Bborder%2Dcolor%3A%23007bff%7D%2Epage%2Ditem%2Edisabled%20%2Epage%2Dlink%7Bcolor%3A%236c757d%3Bpointer%2Devents%3Anone%3Bcursor%3Aauto%3Bbackground%2Dcolor%3A%23fff%3Bborder%2Dcolor%3A%23dee2e6%7D%2Epagination%2Dlg%20%2Epage%2Dlink%7Bpadding%3A%2E75rem%201%2E5rem%3Bfont%2Dsize%3A1%2E25rem%3Bline%2Dheight%3A1%2E5%7D%2Epagination%2Dlg%20%2Epage%2Ditem%3Afirst%2Dchild%20%2Epage%2Dlink%7Bborder%2Dtop%2Dleft%2Dradius%3A%2E3rem%3Bborder%2Dbottom%2Dleft%2Dradius%3A%2E3rem%7D%2Epagination%2Dlg%20%2Epage%2Ditem%3Alast%2Dchild%20%2Epage%2Dlink%7Bborder%2Dtop%2Dright%2Dradius%3A%2E3rem%3Bborder%2Dbottom%2Dright%2Dradius%3A%2E3rem%7D%2Epagination%2Dsm%20%2Epage%2Dlink%7Bpadding%3A%2E25rem%20%2E5rem%3Bfont%2Dsize%3A%2E875rem%3Bline%2Dheight%3A1%2E5%7D%2Epagination%2Dsm%20%2Epage%2Ditem%3Afirst%2Dchild%20%2Epage%2Dlink%7Bborder%2Dtop%2Dleft%2Dradius%3A%2E2rem%3Bborder%2Dbottom%2Dleft%2Dradius%3A%2E2rem%7D%2Epagination%2Dsm%20%2Epage%2Ditem%3Alast%2Dchild%20%2Epage%2Dlink%7Bborder%2Dtop%2Dright%2Dradius%3A%2E2rem%3Bborder%2Dbottom%2Dright%2Dradius%3A%2E2rem%7D%2Ebadge%7Bdisplay%3Ainline%2Dblock%3Bpadding%3A%2E25em%20%2E4em%3Bfont%2Dsize%3A75%25%3Bfont%2Dweight%3A700%3Bline%2Dheight%3A1%3Btext%2Dalign%3Acenter%3Bwhite%2Dspace%3Anowrap%3Bvertical%2Dalign%3Abaseline%3Bborder%2Dradius%3A%2E25rem%3Btransition%3Acolor%20%2E15s%20ease%2Din%2Dout%2Cbackground%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cborder%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cbox%2Dshadow%20%2E15s%20ease%2Din%2Dout%7D%40media%20%28prefers%2Dreduced%2Dmotion%3Areduce%29%7B%2Ebadge%7Btransition%3Anone%7D%7Da%2Ebadge%3Afocus%2Ca%2Ebadge%3Ahover%7Btext%2Ddecoration%3Anone%7D%2Ebadge%3Aempty%7Bdisplay%3Anone%7D%2Ebtn%20%2Ebadge%7Bposition%3Arelative%3Btop%3A%2D1px%7D%2Ebadge%2Dpill%7Bpadding%2Dright%3A%2E6em%3Bpadding%2Dleft%3A%2E6em%3Bborder%2Dradius%3A10rem%7D%2Ebadge%2Dprimary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23007bff%7Da%2Ebadge%2Dprimary%3Afocus%2Ca%2Ebadge%2Dprimary%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%230062cc%7Da%2Ebadge%2Dprimary%2Efocus%2Ca%2Ebadge%2Dprimary%3Afocus%7Boutline%3A0%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E5%29%7D%2Ebadge%2Dsecondary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%236c757d%7Da%2Ebadge%2Dsecondary%3Afocus%2Ca%2Ebadge%2Dsecondary%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23545b62%7Da%2Ebadge%2Dsecondary%2Efocus%2Ca%2Ebadge%2Dsecondary%3Afocus%7Boutline%3A0%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28108%2C117%2C125%2C%2E5%29%7D%2Ebadge%2Dsuccess%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2328a745%7Da%2Ebadge%2Dsuccess%3Afocus%2Ca%2Ebadge%2Dsuccess%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%231e7e34%7Da%2Ebadge%2Dsuccess%2Efocus%2Ca%2Ebadge%2Dsuccess%3Afocus%7Boutline%3A0%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2840%2C167%2C69%2C%2E5%29%7D%2Ebadge%2Dinfo%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2317a2b8%7Da%2Ebadge%2Dinfo%3Afocus%2Ca%2Ebadge%2Dinfo%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23117a8b%7Da%2Ebadge%2Dinfo%2Efocus%2Ca%2Ebadge%2Dinfo%3Afocus%7Boutline%3A0%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2823%2C162%2C184%2C%2E5%29%7D%2Ebadge%2Dwarning%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23ffc107%7Da%2Ebadge%2Dwarning%3Afocus%2Ca%2Ebadge%2Dwarning%3Ahover%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23d39e00%7Da%2Ebadge%2Dwarning%2Efocus%2Ca%2Ebadge%2Dwarning%3Afocus%7Boutline%3A0%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28255%2C193%2C7%2C%2E5%29%7D%2Ebadge%2Ddanger%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23dc3545%7Da%2Ebadge%2Ddanger%3Afocus%2Ca%2Ebadge%2Ddanger%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23bd2130%7Da%2Ebadge%2Ddanger%2Efocus%2Ca%2Ebadge%2Ddanger%3Afocus%7Boutline%3A0%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28220%2C53%2C69%2C%2E5%29%7D%2Ebadge%2Dlight%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23f8f9fa%7Da%2Ebadge%2Dlight%3Afocus%2Ca%2Ebadge%2Dlight%3Ahover%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23dae0e5%7Da%2Ebadge%2Dlight%2Efocus%2Ca%2Ebadge%2Dlight%3Afocus%7Boutline%3A0%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28248%2C249%2C250%2C%2E5%29%7D%2Ebadge%2Ddark%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23343a40%7Da%2Ebadge%2Ddark%3Afocus%2Ca%2Ebadge%2Ddark%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%231d2124%7Da%2Ebadge%2Ddark%2Efocus%2Ca%2Ebadge%2Ddark%3Afocus%7Boutline%3A0%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2852%2C58%2C64%2C%2E5%29%7D%2Ejumbotron%7Bpadding%3A2rem%201rem%3Bmargin%2Dbottom%3A2rem%3Bbackground%2Dcolor%3A%23e9ecef%3Bborder%2Dradius%3A%2E3rem%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Ejumbotron%7Bpadding%3A4rem%202rem%7D%7D%2Ejumbotron%2Dfluid%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%3Bborder%2Dradius%3A0%7D%2Ealert%7Bposition%3Arelative%3Bpadding%3A%2E75rem%201%2E25rem%3Bmargin%2Dbottom%3A1rem%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A%2E25rem%7D%2Ealert%2Dheading%7Bcolor%3Ainherit%7D%2Ealert%2Dlink%7Bfont%2Dweight%3A700%7D%2Ealert%2Ddismissible%7Bpadding%2Dright%3A4rem%7D%2Ealert%2Ddismissible%20%2Eclose%7Bposition%3Aabsolute%3Btop%3A0%3Bright%3A0%3Bpadding%3A%2E75rem%201%2E25rem%3Bcolor%3Ainherit%7D%2Ealert%2Dprimary%7Bcolor%3A%23004085%3Bbackground%2Dcolor%3A%23cce5ff%3Bborder%2Dcolor%3A%23b8daff%7D%2Ealert%2Dprimary%20hr%7Bborder%2Dtop%2Dcolor%3A%239fcdff%7D%2Ealert%2Dprimary%20%2Ealert%2Dlink%7Bcolor%3A%23002752%7D%2Ealert%2Dsecondary%7Bcolor%3A%23383d41%3Bbackground%2Dcolor%3A%23e2e3e5%3Bborder%2Dcolor%3A%23d6d8db%7D%2Ealert%2Dsecondary%20hr%7Bborder%2Dtop%2Dcolor%3A%23c8cbcf%7D%2Ealert%2Dsecondary%20%2Ealert%2Dlink%7Bcolor%3A%23202326%7D%2Ealert%2Dsuccess%7Bcolor%3A%23155724%3Bbackground%2Dcolor%3A%23d4edda%3Bborder%2Dcolor%3A%23c3e6cb%7D%2Ealert%2Dsuccess%20hr%7Bborder%2Dtop%2Dcolor%3A%23b1dfbb%7D%2Ealert%2Dsuccess%20%2Ealert%2Dlink%7Bcolor%3A%230b2e13%7D%2Ealert%2Dinfo%7Bcolor%3A%230c5460%3Bbackground%2Dcolor%3A%23d1ecf1%3Bborder%2Dcolor%3A%23bee5eb%7D%2Ealert%2Dinfo%20hr%7Bborder%2Dtop%2Dcolor%3A%23abdde5%7D%2Ealert%2Dinfo%20%2Ealert%2Dlink%7Bcolor%3A%23062c33%7D%2Ealert%2Dwarning%7Bcolor%3A%23856404%3Bbackground%2Dcolor%3A%23fff3cd%3Bborder%2Dcolor%3A%23ffeeba%7D%2Ealert%2Dwarning%20hr%7Bborder%2Dtop%2Dcolor%3A%23ffe8a1%7D%2Ealert%2Dwarning%20%2Ealert%2Dlink%7Bcolor%3A%23533f03%7D%2Ealert%2Ddanger%7Bcolor%3A%23721c24%3Bbackground%2Dcolor%3A%23f8d7da%3Bborder%2Dcolor%3A%23f5c6cb%7D%2Ealert%2Ddanger%20hr%7Bborder%2Dtop%2Dcolor%3A%23f1b0b7%7D%2Ealert%2Ddanger%20%2Ealert%2Dlink%7Bcolor%3A%23491217%7D%2Ealert%2Dlight%7Bcolor%3A%23818182%3Bbackground%2Dcolor%3A%23fefefe%3Bborder%2Dcolor%3A%23fdfdfe%7D%2Ealert%2Dlight%20hr%7Bborder%2Dtop%2Dcolor%3A%23ececf6%7D%2Ealert%2Dlight%20%2Ealert%2Dlink%7Bcolor%3A%23686868%7D%2Ealert%2Ddark%7Bcolor%3A%231b1e21%3Bbackground%2Dcolor%3A%23d6d8d9%3Bborder%2Dcolor%3A%23c6c8ca%7D%2Ealert%2Ddark%20hr%7Bborder%2Dtop%2Dcolor%3A%23b9bbbe%7D%2Ealert%2Ddark%20%2Ealert%2Dlink%7Bcolor%3A%23040505%7D%40%2Dwebkit%2Dkeyframes%20progress%2Dbar%2Dstripes%7Bfrom%7Bbackground%2Dposition%3A1rem%200%7Dto%7Bbackground%2Dposition%3A0%200%7D%7D%40keyframes%20progress%2Dbar%2Dstripes%7Bfrom%7Bbackground%2Dposition%3A1rem%200%7Dto%7Bbackground%2Dposition%3A0%200%7D%7D%2Eprogress%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3Bheight%3A1rem%3Boverflow%3Ahidden%3Bline%2Dheight%3A0%3Bfont%2Dsize%3A%2E75rem%3Bbackground%2Dcolor%3A%23e9ecef%3Bborder%2Dradius%3A%2E25rem%7D%2Eprogress%2Dbar%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Ddirection%3Acolumn%3Bflex%2Ddirection%3Acolumn%3B%2Dms%2Dflex%2Dpack%3Acenter%3Bjustify%2Dcontent%3Acenter%3Boverflow%3Ahidden%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bwhite%2Dspace%3Anowrap%3Bbackground%2Dcolor%3A%23007bff%3Btransition%3Awidth%20%2E6s%20ease%7D%40media%20%28prefers%2Dreduced%2Dmotion%3Areduce%29%7B%2Eprogress%2Dbar%7Btransition%3Anone%7D%7D%2Eprogress%2Dbar%2Dstriped%7Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dsize%3A1rem%201rem%7D%2Eprogress%2Dbar%2Danimated%7B%2Dwebkit%2Danimation%3Aprogress%2Dbar%2Dstripes%201s%20linear%20infinite%3Banimation%3Aprogress%2Dbar%2Dstripes%201s%20linear%20infinite%7D%40media%20%28prefers%2Dreduced%2Dmotion%3Areduce%29%7B%2Eprogress%2Dbar%2Danimated%7B%2Dwebkit%2Danimation%3Anone%3Banimation%3Anone%7D%7D%2Emedia%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dalign%3Astart%3Balign%2Ditems%3Aflex%2Dstart%7D%2Emedia%2Dbody%7B%2Dms%2Dflex%3A1%3Bflex%3A1%7D%2Elist%2Dgroup%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Ddirection%3Acolumn%3Bflex%2Ddirection%3Acolumn%3Bpadding%2Dleft%3A0%3Bmargin%2Dbottom%3A0%3Bborder%2Dradius%3A%2E25rem%7D%2Elist%2Dgroup%2Ditem%2Daction%7Bwidth%3A100%25%3Bcolor%3A%23495057%3Btext%2Dalign%3Ainherit%7D%2Elist%2Dgroup%2Ditem%2Daction%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Daction%3Ahover%7Bz%2Dindex%3A1%3Bcolor%3A%23495057%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23f8f9fa%7D%2Elist%2Dgroup%2Ditem%2Daction%3Aactive%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23e9ecef%7D%2Elist%2Dgroup%2Ditem%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bpadding%3A%2E75rem%201%2E25rem%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E125%29%7D%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3Ainherit%3Bborder%2Dtop%2Dright%2Dradius%3Ainherit%7D%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%7Bborder%2Dbottom%2Dright%2Dradius%3Ainherit%3Bborder%2Dbottom%2Dleft%2Dradius%3Ainherit%7D%2Elist%2Dgroup%2Ditem%2Edisabled%2C%2Elist%2Dgroup%2Ditem%3Adisabled%7Bcolor%3A%236c757d%3Bpointer%2Devents%3Anone%3Bbackground%2Dcolor%3A%23fff%7D%2Elist%2Dgroup%2Ditem%2Eactive%7Bz%2Dindex%3A2%3Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23007bff%3Bborder%2Dcolor%3A%23007bff%7D%2Elist%2Dgroup%2Ditem%2B%2Elist%2Dgroup%2Ditem%7Bborder%2Dtop%2Dwidth%3A0%7D%2Elist%2Dgroup%2Ditem%2B%2Elist%2Dgroup%2Ditem%2Eactive%7Bmargin%2Dtop%3A%2D1px%3Bborder%2Dtop%2Dwidth%3A1px%7D%2Elist%2Dgroup%2Dhorizontal%7B%2Dms%2Dflex%2Ddirection%3Arow%3Bflex%2Ddirection%3Arow%7D%2Elist%2Dgroup%2Dhorizontal%3E%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dbottom%2Dleft%2Dradius%3A%2E25rem%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Elist%2Dgroup%2Dhorizontal%3E%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%7Bborder%2Dtop%2Dright%2Dradius%3A%2E25rem%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Elist%2Dgroup%2Dhorizontal%3E%2Elist%2Dgroup%2Ditem%2Eactive%7Bmargin%2Dtop%3A0%7D%2Elist%2Dgroup%2Dhorizontal%3E%2Elist%2Dgroup%2Ditem%2B%2Elist%2Dgroup%2Ditem%7Bborder%2Dtop%2Dwidth%3A1px%3Bborder%2Dleft%2Dwidth%3A0%7D%2Elist%2Dgroup%2Dhorizontal%3E%2Elist%2Dgroup%2Ditem%2B%2Elist%2Dgroup%2Ditem%2Eactive%7Bmargin%2Dleft%3A%2D1px%3Bborder%2Dleft%2Dwidth%3A1px%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Elist%2Dgroup%2Dhorizontal%2Dsm%7B%2Dms%2Dflex%2Ddirection%3Arow%3Bflex%2Ddirection%3Arow%7D%2Elist%2Dgroup%2Dhorizontal%2Dsm%3E%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dbottom%2Dleft%2Dradius%3A%2E25rem%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Elist%2Dgroup%2Dhorizontal%2Dsm%3E%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%7Bborder%2Dtop%2Dright%2Dradius%3A%2E25rem%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Elist%2Dgroup%2Dhorizontal%2Dsm%3E%2Elist%2Dgroup%2Ditem%2Eactive%7Bmargin%2Dtop%3A0%7D%2Elist%2Dgroup%2Dhorizontal%2Dsm%3E%2Elist%2Dgroup%2Ditem%2B%2Elist%2Dgroup%2Ditem%7Bborder%2Dtop%2Dwidth%3A1px%3Bborder%2Dleft%2Dwidth%3A0%7D%2Elist%2Dgroup%2Dhorizontal%2Dsm%3E%2Elist%2Dgroup%2Ditem%2B%2Elist%2Dgroup%2Ditem%2Eactive%7Bmargin%2Dleft%3A%2D1px%3Bborder%2Dleft%2Dwidth%3A1px%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Elist%2Dgroup%2Dhorizontal%2Dmd%7B%2Dms%2Dflex%2Ddirection%3Arow%3Bflex%2Ddirection%3Arow%7D%2Elist%2Dgroup%2Dhorizontal%2Dmd%3E%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dbottom%2Dleft%2Dradius%3A%2E25rem%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Elist%2Dgroup%2Dhorizontal%2Dmd%3E%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%7Bborder%2Dtop%2Dright%2Dradius%3A%2E25rem%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Elist%2Dgroup%2Dhorizontal%2Dmd%3E%2Elist%2Dgroup%2Ditem%2Eactive%7Bmargin%2Dtop%3A0%7D%2Elist%2Dgroup%2Dhorizontal%2Dmd%3E%2Elist%2Dgroup%2Ditem%2B%2Elist%2Dgroup%2Ditem%7Bborder%2Dtop%2Dwidth%3A1px%3Bborder%2Dleft%2Dwidth%3A0%7D%2Elist%2Dgroup%2Dhorizontal%2Dmd%3E%2Elist%2Dgroup%2Ditem%2B%2Elist%2Dgroup%2Ditem%2Eactive%7Bmargin%2Dleft%3A%2D1px%3Bborder%2Dleft%2Dwidth%3A1px%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Elist%2Dgroup%2Dhorizontal%2Dlg%7B%2Dms%2Dflex%2Ddirection%3Arow%3Bflex%2Ddirection%3Arow%7D%2Elist%2Dgroup%2Dhorizontal%2Dlg%3E%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dbottom%2Dleft%2Dradius%3A%2E25rem%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Elist%2Dgroup%2Dhorizontal%2Dlg%3E%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%7Bborder%2Dtop%2Dright%2Dradius%3A%2E25rem%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Elist%2Dgroup%2Dhorizontal%2Dlg%3E%2Elist%2Dgroup%2Ditem%2Eactive%7Bmargin%2Dtop%3A0%7D%2Elist%2Dgroup%2Dhorizontal%2Dlg%3E%2Elist%2Dgroup%2Ditem%2B%2Elist%2Dgroup%2Ditem%7Bborder%2Dtop%2Dwidth%3A1px%3Bborder%2Dleft%2Dwidth%3A0%7D%2Elist%2Dgroup%2Dhorizontal%2Dlg%3E%2Elist%2Dgroup%2Ditem%2B%2Elist%2Dgroup%2Ditem%2Eactive%7Bmargin%2Dleft%3A%2D1px%3Bborder%2Dleft%2Dwidth%3A1px%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Elist%2Dgroup%2Dhorizontal%2Dxl%7B%2Dms%2Dflex%2Ddirection%3Arow%3Bflex%2Ddirection%3Arow%7D%2Elist%2Dgroup%2Dhorizontal%2Dxl%3E%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dbottom%2Dleft%2Dradius%3A%2E25rem%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Elist%2Dgroup%2Dhorizontal%2Dxl%3E%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%7Bborder%2Dtop%2Dright%2Dradius%3A%2E25rem%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Elist%2Dgroup%2Dhorizontal%2Dxl%3E%2Elist%2Dgroup%2Ditem%2Eactive%7Bmargin%2Dtop%3A0%7D%2Elist%2Dgroup%2Dhorizontal%2Dxl%3E%2Elist%2Dgroup%2Ditem%2B%2Elist%2Dgroup%2Ditem%7Bborder%2Dtop%2Dwidth%3A1px%3Bborder%2Dleft%2Dwidth%3A0%7D%2Elist%2Dgroup%2Dhorizontal%2Dxl%3E%2Elist%2Dgroup%2Ditem%2B%2Elist%2Dgroup%2Ditem%2Eactive%7Bmargin%2Dleft%3A%2D1px%3Bborder%2Dleft%2Dwidth%3A1px%7D%7D%2Elist%2Dgroup%2Dflush%7Bborder%2Dradius%3A0%7D%2Elist%2Dgroup%2Dflush%3E%2Elist%2Dgroup%2Ditem%7Bborder%2Dwidth%3A0%200%201px%7D%2Elist%2Dgroup%2Dflush%3E%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%7Bborder%2Dbottom%2Dwidth%3A0%7D%2Elist%2Dgroup%2Ditem%2Dprimary%7Bcolor%3A%23004085%3Bbackground%2Dcolor%3A%23b8daff%7D%2Elist%2Dgroup%2Ditem%2Dprimary%2Elist%2Dgroup%2Ditem%2Daction%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Dprimary%2Elist%2Dgroup%2Ditem%2Daction%3Ahover%7Bcolor%3A%23004085%3Bbackground%2Dcolor%3A%239fcdff%7D%2Elist%2Dgroup%2Ditem%2Dprimary%2Elist%2Dgroup%2Ditem%2Daction%2Eactive%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23004085%3Bborder%2Dcolor%3A%23004085%7D%2Elist%2Dgroup%2Ditem%2Dsecondary%7Bcolor%3A%23383d41%3Bbackground%2Dcolor%3A%23d6d8db%7D%2Elist%2Dgroup%2Ditem%2Dsecondary%2Elist%2Dgroup%2Ditem%2Daction%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Dsecondary%2Elist%2Dgroup%2Ditem%2Daction%3Ahover%7Bcolor%3A%23383d41%3Bbackground%2Dcolor%3A%23c8cbcf%7D%2Elist%2Dgroup%2Ditem%2Dsecondary%2Elist%2Dgroup%2Ditem%2Daction%2Eactive%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23383d41%3Bborder%2Dcolor%3A%23383d41%7D%2Elist%2Dgroup%2Ditem%2Dsuccess%7Bcolor%3A%23155724%3Bbackground%2Dcolor%3A%23c3e6cb%7D%2Elist%2Dgroup%2Ditem%2Dsuccess%2Elist%2Dgroup%2Ditem%2Daction%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Dsuccess%2Elist%2Dgroup%2Ditem%2Daction%3Ahover%7Bcolor%3A%23155724%3Bbackground%2Dcolor%3A%23b1dfbb%7D%2Elist%2Dgroup%2Ditem%2Dsuccess%2Elist%2Dgroup%2Ditem%2Daction%2Eactive%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23155724%3Bborder%2Dcolor%3A%23155724%7D%2Elist%2Dgroup%2Ditem%2Dinfo%7Bcolor%3A%230c5460%3Bbackground%2Dcolor%3A%23bee5eb%7D%2Elist%2Dgroup%2Ditem%2Dinfo%2Elist%2Dgroup%2Ditem%2Daction%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Dinfo%2Elist%2Dgroup%2Ditem%2Daction%3Ahover%7Bcolor%3A%230c5460%3Bbackground%2Dcolor%3A%23abdde5%7D%2Elist%2Dgroup%2Ditem%2Dinfo%2Elist%2Dgroup%2Ditem%2Daction%2Eactive%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%230c5460%3Bborder%2Dcolor%3A%230c5460%7D%2Elist%2Dgroup%2Ditem%2Dwarning%7Bcolor%3A%23856404%3Bbackground%2Dcolor%3A%23ffeeba%7D%2Elist%2Dgroup%2Ditem%2Dwarning%2Elist%2Dgroup%2Ditem%2Daction%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Dwarning%2Elist%2Dgroup%2Ditem%2Daction%3Ahover%7Bcolor%3A%23856404%3Bbackground%2Dcolor%3A%23ffe8a1%7D%2Elist%2Dgroup%2Ditem%2Dwarning%2Elist%2Dgroup%2Ditem%2Daction%2Eactive%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23856404%3Bborder%2Dcolor%3A%23856404%7D%2Elist%2Dgroup%2Ditem%2Ddanger%7Bcolor%3A%23721c24%3Bbackground%2Dcolor%3A%23f5c6cb%7D%2Elist%2Dgroup%2Ditem%2Ddanger%2Elist%2Dgroup%2Ditem%2Daction%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Ddanger%2Elist%2Dgroup%2Ditem%2Daction%3Ahover%7Bcolor%3A%23721c24%3Bbackground%2Dcolor%3A%23f1b0b7%7D%2Elist%2Dgroup%2Ditem%2Ddanger%2Elist%2Dgroup%2Ditem%2Daction%2Eactive%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23721c24%3Bborder%2Dcolor%3A%23721c24%7D%2Elist%2Dgroup%2Ditem%2Dlight%7Bcolor%3A%23818182%3Bbackground%2Dcolor%3A%23fdfdfe%7D%2Elist%2Dgroup%2Ditem%2Dlight%2Elist%2Dgroup%2Ditem%2Daction%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Dlight%2Elist%2Dgroup%2Ditem%2Daction%3Ahover%7Bcolor%3A%23818182%3Bbackground%2Dcolor%3A%23ececf6%7D%2Elist%2Dgroup%2Ditem%2Dlight%2Elist%2Dgroup%2Ditem%2Daction%2Eactive%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23818182%3Bborder%2Dcolor%3A%23818182%7D%2Elist%2Dgroup%2Ditem%2Ddark%7Bcolor%3A%231b1e21%3Bbackground%2Dcolor%3A%23c6c8ca%7D%2Elist%2Dgroup%2Ditem%2Ddark%2Elist%2Dgroup%2Ditem%2Daction%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Ddark%2Elist%2Dgroup%2Ditem%2Daction%3Ahover%7Bcolor%3A%231b1e21%3Bbackground%2Dcolor%3A%23b9bbbe%7D%2Elist%2Dgroup%2Ditem%2Ddark%2Elist%2Dgroup%2Ditem%2Daction%2Eactive%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%231b1e21%3Bborder%2Dcolor%3A%231b1e21%7D%2Eclose%7Bfloat%3Aright%3Bfont%2Dsize%3A1%2E5rem%3Bfont%2Dweight%3A700%3Bline%2Dheight%3A1%3Bcolor%3A%23000%3Btext%2Dshadow%3A0%201px%200%20%23fff%3Bopacity%3A%2E5%7D%2Eclose%3Ahover%7Bcolor%3A%23000%3Btext%2Ddecoration%3Anone%7D%2Eclose%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Afocus%2C%2Eclose%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Ahover%7Bopacity%3A%2E75%7Dbutton%2Eclose%7Bpadding%3A0%3Bbackground%2Dcolor%3Atransparent%3Bborder%3A0%7Da%2Eclose%2Edisabled%7Bpointer%2Devents%3Anone%7D%2Etoast%7Bmax%2Dwidth%3A350px%3Boverflow%3Ahidden%3Bfont%2Dsize%3A%2E875rem%3Bbackground%2Dcolor%3Argba%28255%2C255%2C255%2C%2E85%29%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E1%29%3Bbox%2Dshadow%3A0%20%2E25rem%20%2E75rem%20rgba%280%2C0%2C0%2C%2E1%29%3B%2Dwebkit%2Dbackdrop%2Dfilter%3Ablur%2810px%29%3Bbackdrop%2Dfilter%3Ablur%2810px%29%3Bopacity%3A0%3Bborder%2Dradius%3A%2E25rem%7D%2Etoast%3Anot%28%3Alast%2Dchild%29%7Bmargin%2Dbottom%3A%2E75rem%7D%2Etoast%2Eshowing%7Bopacity%3A1%7D%2Etoast%2Eshow%7Bdisplay%3Ablock%3Bopacity%3A1%7D%2Etoast%2Ehide%7Bdisplay%3Anone%7D%2Etoast%2Dheader%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3Bpadding%3A%2E25rem%20%2E75rem%3Bcolor%3A%236c757d%3Bbackground%2Dcolor%3Argba%28255%2C255%2C255%2C%2E85%29%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%2Dbottom%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E05%29%7D%2Etoast%2Dbody%7Bpadding%3A%2E75rem%7D%2Emodal%2Dopen%7Boverflow%3Ahidden%7D%2Emodal%2Dopen%20%2Emodal%7Boverflow%2Dx%3Ahidden%3Boverflow%2Dy%3Aauto%7D%2Emodal%7Bposition%3Afixed%3Btop%3A0%3Bleft%3A0%3Bz%2Dindex%3A1050%3Bdisplay%3Anone%3Bwidth%3A100%25%3Bheight%3A100%25%3Boverflow%3Ahidden%3Boutline%3A0%7D%2Emodal%2Ddialog%7Bposition%3Arelative%3Bwidth%3Aauto%3Bmargin%3A%2E5rem%3Bpointer%2Devents%3Anone%7D%2Emodal%2Efade%20%2Emodal%2Ddialog%7Btransition%3A%2Dwebkit%2Dtransform%20%2E3s%20ease%2Dout%3Btransition%3Atransform%20%2E3s%20ease%2Dout%3Btransition%3Atransform%20%2E3s%20ease%2Dout%2C%2Dwebkit%2Dtransform%20%2E3s%20ease%2Dout%3B%2Dwebkit%2Dtransform%3Atranslate%280%2C%2D50px%29%3Btransform%3Atranslate%280%2C%2D50px%29%7D%40media%20%28prefers%2Dreduced%2Dmotion%3Areduce%29%7B%2Emodal%2Efade%20%2Emodal%2Ddialog%7Btransition%3Anone%7D%7D%2Emodal%2Eshow%20%2Emodal%2Ddialog%7B%2Dwebkit%2Dtransform%3Anone%3Btransform%3Anone%7D%2Emodal%2Emodal%2Dstatic%20%2Emodal%2Ddialog%7B%2Dwebkit%2Dtransform%3Ascale%281%2E02%29%3Btransform%3Ascale%281%2E02%29%7D%2Emodal%2Ddialog%2Dscrollable%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3Bmax%2Dheight%3Acalc%28100%25%20%2D%201rem%29%7D%2Emodal%2Ddialog%2Dscrollable%20%2Emodal%2Dcontent%7Bmax%2Dheight%3Acalc%28100vh%20%2D%201rem%29%3Boverflow%3Ahidden%7D%2Emodal%2Ddialog%2Dscrollable%20%2Emodal%2Dfooter%2C%2Emodal%2Ddialog%2Dscrollable%20%2Emodal%2Dheader%7B%2Dms%2Dflex%2Dnegative%3A0%3Bflex%2Dshrink%3A0%7D%2Emodal%2Ddialog%2Dscrollable%20%2Emodal%2Dbody%7Boverflow%2Dy%3Aauto%7D%2Emodal%2Ddialog%2Dcentered%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3Bmin%2Dheight%3Acalc%28100%25%20%2D%201rem%29%7D%2Emodal%2Ddialog%2Dcentered%3A%3Abefore%7Bdisplay%3Ablock%3Bheight%3Acalc%28100vh%20%2D%201rem%29%3Bheight%3A%2Dwebkit%2Dmin%2Dcontent%3Bheight%3A%2Dmoz%2Dmin%2Dcontent%3Bheight%3Amin%2Dcontent%3Bcontent%3A%22%22%7D%2Emodal%2Ddialog%2Dcentered%2Emodal%2Ddialog%2Dscrollable%7B%2Dms%2Dflex%2Ddirection%3Acolumn%3Bflex%2Ddirection%3Acolumn%3B%2Dms%2Dflex%2Dpack%3Acenter%3Bjustify%2Dcontent%3Acenter%3Bheight%3A100%25%7D%2Emodal%2Ddialog%2Dcentered%2Emodal%2Ddialog%2Dscrollable%20%2Emodal%2Dcontent%7Bmax%2Dheight%3Anone%7D%2Emodal%2Ddialog%2Dcentered%2Emodal%2Ddialog%2Dscrollable%3A%3Abefore%7Bcontent%3Anone%7D%2Emodal%2Dcontent%7Bposition%3Arelative%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Ddirection%3Acolumn%3Bflex%2Ddirection%3Acolumn%3Bwidth%3A100%25%3Bpointer%2Devents%3Aauto%3Bbackground%2Dcolor%3A%23fff%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E2%29%3Bborder%2Dradius%3A%2E3rem%3Boutline%3A0%7D%2Emodal%2Dbackdrop%7Bposition%3Afixed%3Btop%3A0%3Bleft%3A0%3Bz%2Dindex%3A1040%3Bwidth%3A100vw%3Bheight%3A100vh%3Bbackground%2Dcolor%3A%23000%7D%2Emodal%2Dbackdrop%2Efade%7Bopacity%3A0%7D%2Emodal%2Dbackdrop%2Eshow%7Bopacity%3A%2E5%7D%2Emodal%2Dheader%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dalign%3Astart%3Balign%2Ditems%3Aflex%2Dstart%3B%2Dms%2Dflex%2Dpack%3Ajustify%3Bjustify%2Dcontent%3Aspace%2Dbetween%3Bpadding%3A1rem%201rem%3Bborder%2Dbottom%3A1px%20solid%20%23dee2e6%3Bborder%2Dtop%2Dleft%2Dradius%3Acalc%28%2E3rem%20%2D%201px%29%3Bborder%2Dtop%2Dright%2Dradius%3Acalc%28%2E3rem%20%2D%201px%29%7D%2Emodal%2Dheader%20%2Eclose%7Bpadding%3A1rem%201rem%3Bmargin%3A%2D1rem%20%2D1rem%20%2D1rem%20auto%7D%2Emodal%2Dtitle%7Bmargin%2Dbottom%3A0%3Bline%2Dheight%3A1%2E5%7D%2Emodal%2Dbody%7Bposition%3Arelative%3B%2Dms%2Dflex%3A1%201%20auto%3Bflex%3A1%201%20auto%3Bpadding%3A1rem%7D%2Emodal%2Dfooter%7Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dwrap%3Awrap%3Bflex%2Dwrap%3Awrap%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3B%2Dms%2Dflex%2Dpack%3Aend%3Bjustify%2Dcontent%3Aflex%2Dend%3Bpadding%3A%2E75rem%3Bborder%2Dtop%3A1px%20solid%20%23dee2e6%3Bborder%2Dbottom%2Dright%2Dradius%3Acalc%28%2E3rem%20%2D%201px%29%3Bborder%2Dbottom%2Dleft%2Dradius%3Acalc%28%2E3rem%20%2D%201px%29%7D%2Emodal%2Dfooter%3E%2A%7Bmargin%3A%2E25rem%7D%2Emodal%2Dscrollbar%2Dmeasure%7Bposition%3Aabsolute%3Btop%3A%2D9999px%3Bwidth%3A50px%3Bheight%3A50px%3Boverflow%3Ascroll%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Emodal%2Ddialog%7Bmax%2Dwidth%3A500px%3Bmargin%3A1%2E75rem%20auto%7D%2Emodal%2Ddialog%2Dscrollable%7Bmax%2Dheight%3Acalc%28100%25%20%2D%203%2E5rem%29%7D%2Emodal%2Ddialog%2Dscrollable%20%2Emodal%2Dcontent%7Bmax%2Dheight%3Acalc%28100vh%20%2D%203%2E5rem%29%7D%2Emodal%2Ddialog%2Dcentered%7Bmin%2Dheight%3Acalc%28100%25%20%2D%203%2E5rem%29%7D%2Emodal%2Ddialog%2Dcentered%3A%3Abefore%7Bheight%3Acalc%28100vh%20%2D%203%2E5rem%29%3Bheight%3A%2Dwebkit%2Dmin%2Dcontent%3Bheight%3A%2Dmoz%2Dmin%2Dcontent%3Bheight%3Amin%2Dcontent%7D%2Emodal%2Dsm%7Bmax%2Dwidth%3A300px%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Emodal%2Dlg%2C%2Emodal%2Dxl%7Bmax%2Dwidth%3A800px%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Emodal%2Dxl%7Bmax%2Dwidth%3A1140px%7D%7D%2Etooltip%7Bposition%3Aabsolute%3Bz%2Dindex%3A1070%3Bdisplay%3Ablock%3Bmargin%3A0%3Bfont%2Dfamily%3A%2Dapple%2Dsystem%2CBlinkMacSystemFont%2C%22Segoe%20UI%22%2CRoboto%2C%22Helvetica%20Neue%22%2CArial%2C%22Noto%20Sans%22%2Csans%2Dserif%2C%22Apple%20Color%20Emoji%22%2C%22Segoe%20UI%20Emoji%22%2C%22Segoe%20UI%20Symbol%22%2C%22Noto%20Color%20Emoji%22%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E5%3Btext%2Dalign%3Aleft%3Btext%2Dalign%3Astart%3Btext%2Ddecoration%3Anone%3Btext%2Dshadow%3Anone%3Btext%2Dtransform%3Anone%3Bletter%2Dspacing%3Anormal%3Bword%2Dbreak%3Anormal%3Bword%2Dspacing%3Anormal%3Bwhite%2Dspace%3Anormal%3Bline%2Dbreak%3Aauto%3Bfont%2Dsize%3A%2E875rem%3Bword%2Dwrap%3Abreak%2Dword%3Bopacity%3A0%7D%2Etooltip%2Eshow%7Bopacity%3A%2E9%7D%2Etooltip%20%2Earrow%7Bposition%3Aabsolute%3Bdisplay%3Ablock%3Bwidth%3A%2E8rem%3Bheight%3A%2E4rem%7D%2Etooltip%20%2Earrow%3A%3Abefore%7Bposition%3Aabsolute%3Bcontent%3A%22%22%3Bborder%2Dcolor%3Atransparent%3Bborder%2Dstyle%3Asolid%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dtop%5D%2C%2Ebs%2Dtooltip%2Dtop%7Bpadding%3A%2E4rem%200%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dtop%5D%20%2Earrow%2C%2Ebs%2Dtooltip%2Dtop%20%2Earrow%7Bbottom%3A0%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dtop%5D%20%2Earrow%3A%3Abefore%2C%2Ebs%2Dtooltip%2Dtop%20%2Earrow%3A%3Abefore%7Btop%3A0%3Bborder%2Dwidth%3A%2E4rem%20%2E4rem%200%3Bborder%2Dtop%2Dcolor%3A%23000%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dright%5D%2C%2Ebs%2Dtooltip%2Dright%7Bpadding%3A0%20%2E4rem%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dright%5D%20%2Earrow%2C%2Ebs%2Dtooltip%2Dright%20%2Earrow%7Bleft%3A0%3Bwidth%3A%2E4rem%3Bheight%3A%2E8rem%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dright%5D%20%2Earrow%3A%3Abefore%2C%2Ebs%2Dtooltip%2Dright%20%2Earrow%3A%3Abefore%7Bright%3A0%3Bborder%2Dwidth%3A%2E4rem%20%2E4rem%20%2E4rem%200%3Bborder%2Dright%2Dcolor%3A%23000%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dbottom%5D%2C%2Ebs%2Dtooltip%2Dbottom%7Bpadding%3A%2E4rem%200%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dbottom%5D%20%2Earrow%2C%2Ebs%2Dtooltip%2Dbottom%20%2Earrow%7Btop%3A0%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dbottom%5D%20%2Earrow%3A%3Abefore%2C%2Ebs%2Dtooltip%2Dbottom%20%2Earrow%3A%3Abefore%7Bbottom%3A0%3Bborder%2Dwidth%3A0%20%2E4rem%20%2E4rem%3Bborder%2Dbottom%2Dcolor%3A%23000%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dleft%5D%2C%2Ebs%2Dtooltip%2Dleft%7Bpadding%3A0%20%2E4rem%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dleft%5D%20%2Earrow%2C%2Ebs%2Dtooltip%2Dleft%20%2Earrow%7Bright%3A0%3Bwidth%3A%2E4rem%3Bheight%3A%2E8rem%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dleft%5D%20%2Earrow%3A%3Abefore%2C%2Ebs%2Dtooltip%2Dleft%20%2Earrow%3A%3Abefore%7Bleft%3A0%3Bborder%2Dwidth%3A%2E4rem%200%20%2E4rem%20%2E4rem%3Bborder%2Dleft%2Dcolor%3A%23000%7D%2Etooltip%2Dinner%7Bmax%2Dwidth%3A200px%3Bpadding%3A%2E25rem%20%2E5rem%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bbackground%2Dcolor%3A%23000%3Bborder%2Dradius%3A%2E25rem%7D%2Epopover%7Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A0%3Bz%2Dindex%3A1060%3Bdisplay%3Ablock%3Bmax%2Dwidth%3A276px%3Bfont%2Dfamily%3A%2Dapple%2Dsystem%2CBlinkMacSystemFont%2C%22Segoe%20UI%22%2CRoboto%2C%22Helvetica%20Neue%22%2CArial%2C%22Noto%20Sans%22%2Csans%2Dserif%2C%22Apple%20Color%20Emoji%22%2C%22Segoe%20UI%20Emoji%22%2C%22Segoe%20UI%20Symbol%22%2C%22Noto%20Color%20Emoji%22%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E5%3Btext%2Dalign%3Aleft%3Btext%2Dalign%3Astart%3Btext%2Ddecoration%3Anone%3Btext%2Dshadow%3Anone%3Btext%2Dtransform%3Anone%3Bletter%2Dspacing%3Anormal%3Bword%2Dbreak%3Anormal%3Bword%2Dspacing%3Anormal%3Bwhite%2Dspace%3Anormal%3Bline%2Dbreak%3Aauto%3Bfont%2Dsize%3A%2E875rem%3Bword%2Dwrap%3Abreak%2Dword%3Bbackground%2Dcolor%3A%23fff%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E2%29%3Bborder%2Dradius%3A%2E3rem%7D%2Epopover%20%2Earrow%7Bposition%3Aabsolute%3Bdisplay%3Ablock%3Bwidth%3A1rem%3Bheight%3A%2E5rem%3Bmargin%3A0%20%2E3rem%7D%2Epopover%20%2Earrow%3A%3Aafter%2C%2Epopover%20%2Earrow%3A%3Abefore%7Bposition%3Aabsolute%3Bdisplay%3Ablock%3Bcontent%3A%22%22%3Bborder%2Dcolor%3Atransparent%3Bborder%2Dstyle%3Asolid%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dtop%5D%2C%2Ebs%2Dpopover%2Dtop%7Bmargin%2Dbottom%3A%2E5rem%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dtop%5D%3E%2Earrow%2C%2Ebs%2Dpopover%2Dtop%3E%2Earrow%7Bbottom%3Acalc%28%2D%2E5rem%20%2D%201px%29%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dtop%5D%3E%2Earrow%3A%3Abefore%2C%2Ebs%2Dpopover%2Dtop%3E%2Earrow%3A%3Abefore%7Bbottom%3A0%3Bborder%2Dwidth%3A%2E5rem%20%2E5rem%200%3Bborder%2Dtop%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dtop%5D%3E%2Earrow%3A%3Aafter%2C%2Ebs%2Dpopover%2Dtop%3E%2Earrow%3A%3Aafter%7Bbottom%3A1px%3Bborder%2Dwidth%3A%2E5rem%20%2E5rem%200%3Bborder%2Dtop%2Dcolor%3A%23fff%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dright%5D%2C%2Ebs%2Dpopover%2Dright%7Bmargin%2Dleft%3A%2E5rem%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dright%5D%3E%2Earrow%2C%2Ebs%2Dpopover%2Dright%3E%2Earrow%7Bleft%3Acalc%28%2D%2E5rem%20%2D%201px%29%3Bwidth%3A%2E5rem%3Bheight%3A1rem%3Bmargin%3A%2E3rem%200%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dright%5D%3E%2Earrow%3A%3Abefore%2C%2Ebs%2Dpopover%2Dright%3E%2Earrow%3A%3Abefore%7Bleft%3A0%3Bborder%2Dwidth%3A%2E5rem%20%2E5rem%20%2E5rem%200%3Bborder%2Dright%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dright%5D%3E%2Earrow%3A%3Aafter%2C%2Ebs%2Dpopover%2Dright%3E%2Earrow%3A%3Aafter%7Bleft%3A1px%3Bborder%2Dwidth%3A%2E5rem%20%2E5rem%20%2E5rem%200%3Bborder%2Dright%2Dcolor%3A%23fff%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dbottom%5D%2C%2Ebs%2Dpopover%2Dbottom%7Bmargin%2Dtop%3A%2E5rem%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dbottom%5D%3E%2Earrow%2C%2Ebs%2Dpopover%2Dbottom%3E%2Earrow%7Btop%3Acalc%28%2D%2E5rem%20%2D%201px%29%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dbottom%5D%3E%2Earrow%3A%3Abefore%2C%2Ebs%2Dpopover%2Dbottom%3E%2Earrow%3A%3Abefore%7Btop%3A0%3Bborder%2Dwidth%3A0%20%2E5rem%20%2E5rem%20%2E5rem%3Bborder%2Dbottom%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dbottom%5D%3E%2Earrow%3A%3Aafter%2C%2Ebs%2Dpopover%2Dbottom%3E%2Earrow%3A%3Aafter%7Btop%3A1px%3Bborder%2Dwidth%3A0%20%2E5rem%20%2E5rem%20%2E5rem%3Bborder%2Dbottom%2Dcolor%3A%23fff%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dbottom%5D%20%2Epopover%2Dheader%3A%3Abefore%2C%2Ebs%2Dpopover%2Dbottom%20%2Epopover%2Dheader%3A%3Abefore%7Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A50%25%3Bdisplay%3Ablock%3Bwidth%3A1rem%3Bmargin%2Dleft%3A%2D%2E5rem%3Bcontent%3A%22%22%3Bborder%2Dbottom%3A1px%20solid%20%23f7f7f7%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dleft%5D%2C%2Ebs%2Dpopover%2Dleft%7Bmargin%2Dright%3A%2E5rem%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dleft%5D%3E%2Earrow%2C%2Ebs%2Dpopover%2Dleft%3E%2Earrow%7Bright%3Acalc%28%2D%2E5rem%20%2D%201px%29%3Bwidth%3A%2E5rem%3Bheight%3A1rem%3Bmargin%3A%2E3rem%200%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dleft%5D%3E%2Earrow%3A%3Abefore%2C%2Ebs%2Dpopover%2Dleft%3E%2Earrow%3A%3Abefore%7Bright%3A0%3Bborder%2Dwidth%3A%2E5rem%200%20%2E5rem%20%2E5rem%3Bborder%2Dleft%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dleft%5D%3E%2Earrow%3A%3Aafter%2C%2Ebs%2Dpopover%2Dleft%3E%2Earrow%3A%3Aafter%7Bright%3A1px%3Bborder%2Dwidth%3A%2E5rem%200%20%2E5rem%20%2E5rem%3Bborder%2Dleft%2Dcolor%3A%23fff%7D%2Epopover%2Dheader%7Bpadding%3A%2E5rem%20%2E75rem%3Bmargin%2Dbottom%3A0%3Bfont%2Dsize%3A1rem%3Bbackground%2Dcolor%3A%23f7f7f7%3Bborder%2Dbottom%3A1px%20solid%20%23ebebeb%3Bborder%2Dtop%2Dleft%2Dradius%3Acalc%28%2E3rem%20%2D%201px%29%3Bborder%2Dtop%2Dright%2Dradius%3Acalc%28%2E3rem%20%2D%201px%29%7D%2Epopover%2Dheader%3Aempty%7Bdisplay%3Anone%7D%2Epopover%2Dbody%7Bpadding%3A%2E5rem%20%2E75rem%3Bcolor%3A%23212529%7D%2Ecarousel%7Bposition%3Arelative%7D%2Ecarousel%2Epointer%2Devent%7B%2Dms%2Dtouch%2Daction%3Apan%2Dy%3Btouch%2Daction%3Apan%2Dy%7D%2Ecarousel%2Dinner%7Bposition%3Arelative%3Bwidth%3A100%25%3Boverflow%3Ahidden%7D%2Ecarousel%2Dinner%3A%3Aafter%7Bdisplay%3Ablock%3Bclear%3Aboth%3Bcontent%3A%22%22%7D%2Ecarousel%2Ditem%7Bposition%3Arelative%3Bdisplay%3Anone%3Bfloat%3Aleft%3Bwidth%3A100%25%3Bmargin%2Dright%3A%2D100%25%3B%2Dwebkit%2Dbackface%2Dvisibility%3Ahidden%3Bbackface%2Dvisibility%3Ahidden%3Btransition%3A%2Dwebkit%2Dtransform%20%2E6s%20ease%2Din%2Dout%3Btransition%3Atransform%20%2E6s%20ease%2Din%2Dout%3Btransition%3Atransform%20%2E6s%20ease%2Din%2Dout%2C%2Dwebkit%2Dtransform%20%2E6s%20ease%2Din%2Dout%7D%40media%20%28prefers%2Dreduced%2Dmotion%3Areduce%29%7B%2Ecarousel%2Ditem%7Btransition%3Anone%7D%7D%2Ecarousel%2Ditem%2Dnext%2C%2Ecarousel%2Ditem%2Dprev%2C%2Ecarousel%2Ditem%2Eactive%7Bdisplay%3Ablock%7D%2Eactive%2Ecarousel%2Ditem%2Dright%2C%2Ecarousel%2Ditem%2Dnext%3Anot%28%2Ecarousel%2Ditem%2Dleft%29%7B%2Dwebkit%2Dtransform%3AtranslateX%28100%25%29%3Btransform%3AtranslateX%28100%25%29%7D%2Eactive%2Ecarousel%2Ditem%2Dleft%2C%2Ecarousel%2Ditem%2Dprev%3Anot%28%2Ecarousel%2Ditem%2Dright%29%7B%2Dwebkit%2Dtransform%3AtranslateX%28%2D100%25%29%3Btransform%3AtranslateX%28%2D100%25%29%7D%2Ecarousel%2Dfade%20%2Ecarousel%2Ditem%7Bopacity%3A0%3Btransition%2Dproperty%3Aopacity%3B%2Dwebkit%2Dtransform%3Anone%3Btransform%3Anone%7D%2Ecarousel%2Dfade%20%2Ecarousel%2Ditem%2Dnext%2Ecarousel%2Ditem%2Dleft%2C%2Ecarousel%2Dfade%20%2Ecarousel%2Ditem%2Dprev%2Ecarousel%2Ditem%2Dright%2C%2Ecarousel%2Dfade%20%2Ecarousel%2Ditem%2Eactive%7Bz%2Dindex%3A1%3Bopacity%3A1%7D%2Ecarousel%2Dfade%20%2Eactive%2Ecarousel%2Ditem%2Dleft%2C%2Ecarousel%2Dfade%20%2Eactive%2Ecarousel%2Ditem%2Dright%7Bz%2Dindex%3A0%3Bopacity%3A0%3Btransition%3Aopacity%200s%20%2E6s%7D%40media%20%28prefers%2Dreduced%2Dmotion%3Areduce%29%7B%2Ecarousel%2Dfade%20%2Eactive%2Ecarousel%2Ditem%2Dleft%2C%2Ecarousel%2Dfade%20%2Eactive%2Ecarousel%2Ditem%2Dright%7Btransition%3Anone%7D%7D%2Ecarousel%2Dcontrol%2Dnext%2C%2Ecarousel%2Dcontrol%2Dprev%7Bposition%3Aabsolute%3Btop%3A0%3Bbottom%3A0%3Bz%2Dindex%3A1%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3B%2Dms%2Dflex%2Dpack%3Acenter%3Bjustify%2Dcontent%3Acenter%3Bwidth%3A15%25%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bopacity%3A%2E5%3Btransition%3Aopacity%20%2E15s%20ease%7D%40media%20%28prefers%2Dreduced%2Dmotion%3Areduce%29%7B%2Ecarousel%2Dcontrol%2Dnext%2C%2Ecarousel%2Dcontrol%2Dprev%7Btransition%3Anone%7D%7D%2Ecarousel%2Dcontrol%2Dnext%3Afocus%2C%2Ecarousel%2Dcontrol%2Dnext%3Ahover%2C%2Ecarousel%2Dcontrol%2Dprev%3Afocus%2C%2Ecarousel%2Dcontrol%2Dprev%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Boutline%3A0%3Bopacity%3A%2E9%7D%2Ecarousel%2Dcontrol%2Dprev%7Bleft%3A0%7D%2Ecarousel%2Dcontrol%2Dnext%7Bright%3A0%7D%2Ecarousel%2Dcontrol%2Dnext%2Dicon%2C%2Ecarousel%2Dcontrol%2Dprev%2Dicon%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A20px%3Bheight%3A20px%3Bbackground%3Ano%2Drepeat%2050%25%2F100%25%20100%25%7D%2Ecarousel%2Dcontrol%2Dprev%2Dicon%7Bbackground%2Dimage%3Aurl%28%22data%3Aimage%2Fsvg%2Bxml%2C%253csvg%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%20fill%3D%27%2523fff%27%20width%3D%278%27%20height%3D%278%27%20viewBox%3D%270%200%208%208%27%253e%253cpath%20d%3D%27M5%2E25%200l%2D4%204%204%204%201%2E5%2D1%2E5L4%2E25%204l2%2E5%2D2%2E5L5%2E25%200z%27%2F%253e%253c%2Fsvg%253e%22%29%7D%2Ecarousel%2Dcontrol%2Dnext%2Dicon%7Bbackground%2Dimage%3Aurl%28%22data%3Aimage%2Fsvg%2Bxml%2C%253csvg%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%20fill%3D%27%2523fff%27%20width%3D%278%27%20height%3D%278%27%20viewBox%3D%270%200%208%208%27%253e%253cpath%20d%3D%27M2%2E75%200l%2D1%2E5%201%2E5L3%2E75%204l%2D2%2E5%202%2E5L2%2E75%208l4%2D4%2D4%2D4z%27%2F%253e%253c%2Fsvg%253e%22%29%7D%2Ecarousel%2Dindicators%7Bposition%3Aabsolute%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bz%2Dindex%3A15%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dpack%3Acenter%3Bjustify%2Dcontent%3Acenter%3Bpadding%2Dleft%3A0%3Bmargin%2Dright%3A15%25%3Bmargin%2Dleft%3A15%25%3Blist%2Dstyle%3Anone%7D%2Ecarousel%2Dindicators%20li%7Bbox%2Dsizing%3Acontent%2Dbox%3B%2Dms%2Dflex%3A0%201%20auto%3Bflex%3A0%201%20auto%3Bwidth%3A30px%3Bheight%3A3px%3Bmargin%2Dright%3A3px%3Bmargin%2Dleft%3A3px%3Btext%2Dindent%3A%2D999px%3Bcursor%3Apointer%3Bbackground%2Dcolor%3A%23fff%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%2Dtop%3A10px%20solid%20transparent%3Bborder%2Dbottom%3A10px%20solid%20transparent%3Bopacity%3A%2E5%3Btransition%3Aopacity%20%2E6s%20ease%7D%40media%20%28prefers%2Dreduced%2Dmotion%3Areduce%29%7B%2Ecarousel%2Dindicators%20li%7Btransition%3Anone%7D%7D%2Ecarousel%2Dindicators%20%2Eactive%7Bopacity%3A1%7D%2Ecarousel%2Dcaption%7Bposition%3Aabsolute%3Bright%3A15%25%3Bbottom%3A20px%3Bleft%3A15%25%3Bz%2Dindex%3A10%3Bpadding%2Dtop%3A20px%3Bpadding%2Dbottom%3A20px%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%7D%40%2Dwebkit%2Dkeyframes%20spinner%2Dborder%7Bto%7B%2Dwebkit%2Dtransform%3Arotate%28360deg%29%3Btransform%3Arotate%28360deg%29%7D%7D%40keyframes%20spinner%2Dborder%7Bto%7B%2Dwebkit%2Dtransform%3Arotate%28360deg%29%3Btransform%3Arotate%28360deg%29%7D%7D%2Espinner%2Dborder%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A2rem%3Bheight%3A2rem%3Bvertical%2Dalign%3Atext%2Dbottom%3Bborder%3A%2E25em%20solid%20currentColor%3Bborder%2Dright%2Dcolor%3Atransparent%3Bborder%2Dradius%3A50%25%3B%2Dwebkit%2Danimation%3Aspinner%2Dborder%20%2E75s%20linear%20infinite%3Banimation%3Aspinner%2Dborder%20%2E75s%20linear%20infinite%7D%2Espinner%2Dborder%2Dsm%7Bwidth%3A1rem%3Bheight%3A1rem%3Bborder%2Dwidth%3A%2E2em%7D%40%2Dwebkit%2Dkeyframes%20spinner%2Dgrow%7B0%25%7B%2Dwebkit%2Dtransform%3Ascale%280%29%3Btransform%3Ascale%280%29%7D50%25%7Bopacity%3A1%3B%2Dwebkit%2Dtransform%3Anone%3Btransform%3Anone%7D%7D%40keyframes%20spinner%2Dgrow%7B0%25%7B%2Dwebkit%2Dtransform%3Ascale%280%29%3Btransform%3Ascale%280%29%7D50%25%7Bopacity%3A1%3B%2Dwebkit%2Dtransform%3Anone%3Btransform%3Anone%7D%7D%2Espinner%2Dgrow%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A2rem%3Bheight%3A2rem%3Bvertical%2Dalign%3Atext%2Dbottom%3Bbackground%2Dcolor%3AcurrentColor%3Bborder%2Dradius%3A50%25%3Bopacity%3A0%3B%2Dwebkit%2Danimation%3Aspinner%2Dgrow%20%2E75s%20linear%20infinite%3Banimation%3Aspinner%2Dgrow%20%2E75s%20linear%20infinite%7D%2Espinner%2Dgrow%2Dsm%7Bwidth%3A1rem%3Bheight%3A1rem%7D%2Ealign%2Dbaseline%7Bvertical%2Dalign%3Abaseline%21important%7D%2Ealign%2Dtop%7Bvertical%2Dalign%3Atop%21important%7D%2Ealign%2Dmiddle%7Bvertical%2Dalign%3Amiddle%21important%7D%2Ealign%2Dbottom%7Bvertical%2Dalign%3Abottom%21important%7D%2Ealign%2Dtext%2Dbottom%7Bvertical%2Dalign%3Atext%2Dbottom%21important%7D%2Ealign%2Dtext%2Dtop%7Bvertical%2Dalign%3Atext%2Dtop%21important%7D%2Ebg%2Dprimary%7Bbackground%2Dcolor%3A%23007bff%21important%7Da%2Ebg%2Dprimary%3Afocus%2Ca%2Ebg%2Dprimary%3Ahover%2Cbutton%2Ebg%2Dprimary%3Afocus%2Cbutton%2Ebg%2Dprimary%3Ahover%7Bbackground%2Dcolor%3A%230062cc%21important%7D%2Ebg%2Dsecondary%7Bbackground%2Dcolor%3A%236c757d%21important%7Da%2Ebg%2Dsecondary%3Afocus%2Ca%2Ebg%2Dsecondary%3Ahover%2Cbutton%2Ebg%2Dsecondary%3Afocus%2Cbutton%2Ebg%2Dsecondary%3Ahover%7Bbackground%2Dcolor%3A%23545b62%21important%7D%2Ebg%2Dsuccess%7Bbackground%2Dcolor%3A%2328a745%21important%7Da%2Ebg%2Dsuccess%3Afocus%2Ca%2Ebg%2Dsuccess%3Ahover%2Cbutton%2Ebg%2Dsuccess%3Afocus%2Cbutton%2Ebg%2Dsuccess%3Ahover%7Bbackground%2Dcolor%3A%231e7e34%21important%7D%2Ebg%2Dinfo%7Bbackground%2Dcolor%3A%2317a2b8%21important%7Da%2Ebg%2Dinfo%3Afocus%2Ca%2Ebg%2Dinfo%3Ahover%2Cbutton%2Ebg%2Dinfo%3Afocus%2Cbutton%2Ebg%2Dinfo%3Ahover%7Bbackground%2Dcolor%3A%23117a8b%21important%7D%2Ebg%2Dwarning%7Bbackground%2Dcolor%3A%23ffc107%21important%7Da%2Ebg%2Dwarning%3Afocus%2Ca%2Ebg%2Dwarning%3Ahover%2Cbutton%2Ebg%2Dwarning%3Afocus%2Cbutton%2Ebg%2Dwarning%3Ahover%7Bbackground%2Dcolor%3A%23d39e00%21important%7D%2Ebg%2Ddanger%7Bbackground%2Dcolor%3A%23dc3545%21important%7Da%2Ebg%2Ddanger%3Afocus%2Ca%2Ebg%2Ddanger%3Ahover%2Cbutton%2Ebg%2Ddanger%3Afocus%2Cbutton%2Ebg%2Ddanger%3Ahover%7Bbackground%2Dcolor%3A%23bd2130%21important%7D%2Ebg%2Dlight%7Bbackground%2Dcolor%3A%23f8f9fa%21important%7Da%2Ebg%2Dlight%3Afocus%2Ca%2Ebg%2Dlight%3Ahover%2Cbutton%2Ebg%2Dlight%3Afocus%2Cbutton%2Ebg%2Dlight%3Ahover%7Bbackground%2Dcolor%3A%23dae0e5%21important%7D%2Ebg%2Ddark%7Bbackground%2Dcolor%3A%23343a40%21important%7Da%2Ebg%2Ddark%3Afocus%2Ca%2Ebg%2Ddark%3Ahover%2Cbutton%2Ebg%2Ddark%3Afocus%2Cbutton%2Ebg%2Ddark%3Ahover%7Bbackground%2Dcolor%3A%231d2124%21important%7D%2Ebg%2Dwhite%7Bbackground%2Dcolor%3A%23fff%21important%7D%2Ebg%2Dtransparent%7Bbackground%2Dcolor%3Atransparent%21important%7D%2Eborder%7Bborder%3A1px%20solid%20%23dee2e6%21important%7D%2Eborder%2Dtop%7Bborder%2Dtop%3A1px%20solid%20%23dee2e6%21important%7D%2Eborder%2Dright%7Bborder%2Dright%3A1px%20solid%20%23dee2e6%21important%7D%2Eborder%2Dbottom%7Bborder%2Dbottom%3A1px%20solid%20%23dee2e6%21important%7D%2Eborder%2Dleft%7Bborder%2Dleft%3A1px%20solid%20%23dee2e6%21important%7D%2Eborder%2D0%7Bborder%3A0%21important%7D%2Eborder%2Dtop%2D0%7Bborder%2Dtop%3A0%21important%7D%2Eborder%2Dright%2D0%7Bborder%2Dright%3A0%21important%7D%2Eborder%2Dbottom%2D0%7Bborder%2Dbottom%3A0%21important%7D%2Eborder%2Dleft%2D0%7Bborder%2Dleft%3A0%21important%7D%2Eborder%2Dprimary%7Bborder%2Dcolor%3A%23007bff%21important%7D%2Eborder%2Dsecondary%7Bborder%2Dcolor%3A%236c757d%21important%7D%2Eborder%2Dsuccess%7Bborder%2Dcolor%3A%2328a745%21important%7D%2Eborder%2Dinfo%7Bborder%2Dcolor%3A%2317a2b8%21important%7D%2Eborder%2Dwarning%7Bborder%2Dcolor%3A%23ffc107%21important%7D%2Eborder%2Ddanger%7Bborder%2Dcolor%3A%23dc3545%21important%7D%2Eborder%2Dlight%7Bborder%2Dcolor%3A%23f8f9fa%21important%7D%2Eborder%2Ddark%7Bborder%2Dcolor%3A%23343a40%21important%7D%2Eborder%2Dwhite%7Bborder%2Dcolor%3A%23fff%21important%7D%2Erounded%2Dsm%7Bborder%2Dradius%3A%2E2rem%21important%7D%2Erounded%7Bborder%2Dradius%3A%2E25rem%21important%7D%2Erounded%2Dtop%7Bborder%2Dtop%2Dleft%2Dradius%3A%2E25rem%21important%3Bborder%2Dtop%2Dright%2Dradius%3A%2E25rem%21important%7D%2Erounded%2Dright%7Bborder%2Dtop%2Dright%2Dradius%3A%2E25rem%21important%3Bborder%2Dbottom%2Dright%2Dradius%3A%2E25rem%21important%7D%2Erounded%2Dbottom%7Bborder%2Dbottom%2Dright%2Dradius%3A%2E25rem%21important%3Bborder%2Dbottom%2Dleft%2Dradius%3A%2E25rem%21important%7D%2Erounded%2Dleft%7Bborder%2Dtop%2Dleft%2Dradius%3A%2E25rem%21important%3Bborder%2Dbottom%2Dleft%2Dradius%3A%2E25rem%21important%7D%2Erounded%2Dlg%7Bborder%2Dradius%3A%2E3rem%21important%7D%2Erounded%2Dcircle%7Bborder%2Dradius%3A50%25%21important%7D%2Erounded%2Dpill%7Bborder%2Dradius%3A50rem%21important%7D%2Erounded%2D0%7Bborder%2Dradius%3A0%21important%7D%2Eclearfix%3A%3Aafter%7Bdisplay%3Ablock%3Bclear%3Aboth%3Bcontent%3A%22%22%7D%2Ed%2Dnone%7Bdisplay%3Anone%21important%7D%2Ed%2Dinline%7Bdisplay%3Ainline%21important%7D%2Ed%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%2Ed%2Dblock%7Bdisplay%3Ablock%21important%7D%2Ed%2Dtable%7Bdisplay%3Atable%21important%7D%2Ed%2Dtable%2Drow%7Bdisplay%3Atable%2Drow%21important%7D%2Ed%2Dtable%2Dcell%7Bdisplay%3Atable%2Dcell%21important%7D%2Ed%2Dflex%7Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%7D%2Ed%2Dinline%2Dflex%7Bdisplay%3A%2Dms%2Dinline%2Dflexbox%21important%3Bdisplay%3Ainline%2Dflex%21important%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Ed%2Dsm%2Dnone%7Bdisplay%3Anone%21important%7D%2Ed%2Dsm%2Dinline%7Bdisplay%3Ainline%21important%7D%2Ed%2Dsm%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%2Ed%2Dsm%2Dblock%7Bdisplay%3Ablock%21important%7D%2Ed%2Dsm%2Dtable%7Bdisplay%3Atable%21important%7D%2Ed%2Dsm%2Dtable%2Drow%7Bdisplay%3Atable%2Drow%21important%7D%2Ed%2Dsm%2Dtable%2Dcell%7Bdisplay%3Atable%2Dcell%21important%7D%2Ed%2Dsm%2Dflex%7Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%7D%2Ed%2Dsm%2Dinline%2Dflex%7Bdisplay%3A%2Dms%2Dinline%2Dflexbox%21important%3Bdisplay%3Ainline%2Dflex%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Ed%2Dmd%2Dnone%7Bdisplay%3Anone%21important%7D%2Ed%2Dmd%2Dinline%7Bdisplay%3Ainline%21important%7D%2Ed%2Dmd%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%2Ed%2Dmd%2Dblock%7Bdisplay%3Ablock%21important%7D%2Ed%2Dmd%2Dtable%7Bdisplay%3Atable%21important%7D%2Ed%2Dmd%2Dtable%2Drow%7Bdisplay%3Atable%2Drow%21important%7D%2Ed%2Dmd%2Dtable%2Dcell%7Bdisplay%3Atable%2Dcell%21important%7D%2Ed%2Dmd%2Dflex%7Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%7D%2Ed%2Dmd%2Dinline%2Dflex%7Bdisplay%3A%2Dms%2Dinline%2Dflexbox%21important%3Bdisplay%3Ainline%2Dflex%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Ed%2Dlg%2Dnone%7Bdisplay%3Anone%21important%7D%2Ed%2Dlg%2Dinline%7Bdisplay%3Ainline%21important%7D%2Ed%2Dlg%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%2Ed%2Dlg%2Dblock%7Bdisplay%3Ablock%21important%7D%2Ed%2Dlg%2Dtable%7Bdisplay%3Atable%21important%7D%2Ed%2Dlg%2Dtable%2Drow%7Bdisplay%3Atable%2Drow%21important%7D%2Ed%2Dlg%2Dtable%2Dcell%7Bdisplay%3Atable%2Dcell%21important%7D%2Ed%2Dlg%2Dflex%7Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%7D%2Ed%2Dlg%2Dinline%2Dflex%7Bdisplay%3A%2Dms%2Dinline%2Dflexbox%21important%3Bdisplay%3Ainline%2Dflex%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Ed%2Dxl%2Dnone%7Bdisplay%3Anone%21important%7D%2Ed%2Dxl%2Dinline%7Bdisplay%3Ainline%21important%7D%2Ed%2Dxl%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%2Ed%2Dxl%2Dblock%7Bdisplay%3Ablock%21important%7D%2Ed%2Dxl%2Dtable%7Bdisplay%3Atable%21important%7D%2Ed%2Dxl%2Dtable%2Drow%7Bdisplay%3Atable%2Drow%21important%7D%2Ed%2Dxl%2Dtable%2Dcell%7Bdisplay%3Atable%2Dcell%21important%7D%2Ed%2Dxl%2Dflex%7Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%7D%2Ed%2Dxl%2Dinline%2Dflex%7Bdisplay%3A%2Dms%2Dinline%2Dflexbox%21important%3Bdisplay%3Ainline%2Dflex%21important%7D%7D%40media%20print%7B%2Ed%2Dprint%2Dnone%7Bdisplay%3Anone%21important%7D%2Ed%2Dprint%2Dinline%7Bdisplay%3Ainline%21important%7D%2Ed%2Dprint%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%2Ed%2Dprint%2Dblock%7Bdisplay%3Ablock%21important%7D%2Ed%2Dprint%2Dtable%7Bdisplay%3Atable%21important%7D%2Ed%2Dprint%2Dtable%2Drow%7Bdisplay%3Atable%2Drow%21important%7D%2Ed%2Dprint%2Dtable%2Dcell%7Bdisplay%3Atable%2Dcell%21important%7D%2Ed%2Dprint%2Dflex%7Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%7D%2Ed%2Dprint%2Dinline%2Dflex%7Bdisplay%3A%2Dms%2Dinline%2Dflexbox%21important%3Bdisplay%3Ainline%2Dflex%21important%7D%7D%2Eembed%2Dresponsive%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bwidth%3A100%25%3Bpadding%3A0%3Boverflow%3Ahidden%7D%2Eembed%2Dresponsive%3A%3Abefore%7Bdisplay%3Ablock%3Bcontent%3A%22%22%7D%2Eembed%2Dresponsive%20%2Eembed%2Dresponsive%2Ditem%2C%2Eembed%2Dresponsive%20embed%2C%2Eembed%2Dresponsive%20iframe%2C%2Eembed%2Dresponsive%20object%2C%2Eembed%2Dresponsive%20video%7Bposition%3Aabsolute%3Btop%3A0%3Bbottom%3A0%3Bleft%3A0%3Bwidth%3A100%25%3Bheight%3A100%25%3Bborder%3A0%7D%2Eembed%2Dresponsive%2D21by9%3A%3Abefore%7Bpadding%2Dtop%3A42%2E857143%25%7D%2Eembed%2Dresponsive%2D16by9%3A%3Abefore%7Bpadding%2Dtop%3A56%2E25%25%7D%2Eembed%2Dresponsive%2D4by3%3A%3Abefore%7Bpadding%2Dtop%3A75%25%7D%2Eembed%2Dresponsive%2D1by1%3A%3Abefore%7Bpadding%2Dtop%3A100%25%7D%2Eflex%2Drow%7B%2Dms%2Dflex%2Ddirection%3Arow%21important%3Bflex%2Ddirection%3Arow%21important%7D%2Eflex%2Dcolumn%7B%2Dms%2Dflex%2Ddirection%3Acolumn%21important%3Bflex%2Ddirection%3Acolumn%21important%7D%2Eflex%2Drow%2Dreverse%7B%2Dms%2Dflex%2Ddirection%3Arow%2Dreverse%21important%3Bflex%2Ddirection%3Arow%2Dreverse%21important%7D%2Eflex%2Dcolumn%2Dreverse%7B%2Dms%2Dflex%2Ddirection%3Acolumn%2Dreverse%21important%3Bflex%2Ddirection%3Acolumn%2Dreverse%21important%7D%2Eflex%2Dwrap%7B%2Dms%2Dflex%2Dwrap%3Awrap%21important%3Bflex%2Dwrap%3Awrap%21important%7D%2Eflex%2Dnowrap%7B%2Dms%2Dflex%2Dwrap%3Anowrap%21important%3Bflex%2Dwrap%3Anowrap%21important%7D%2Eflex%2Dwrap%2Dreverse%7B%2Dms%2Dflex%2Dwrap%3Awrap%2Dreverse%21important%3Bflex%2Dwrap%3Awrap%2Dreverse%21important%7D%2Eflex%2Dfill%7B%2Dms%2Dflex%3A1%201%20auto%21important%3Bflex%3A1%201%20auto%21important%7D%2Eflex%2Dgrow%2D0%7B%2Dms%2Dflex%2Dpositive%3A0%21important%3Bflex%2Dgrow%3A0%21important%7D%2Eflex%2Dgrow%2D1%7B%2Dms%2Dflex%2Dpositive%3A1%21important%3Bflex%2Dgrow%3A1%21important%7D%2Eflex%2Dshrink%2D0%7B%2Dms%2Dflex%2Dnegative%3A0%21important%3Bflex%2Dshrink%3A0%21important%7D%2Eflex%2Dshrink%2D1%7B%2Dms%2Dflex%2Dnegative%3A1%21important%3Bflex%2Dshrink%3A1%21important%7D%2Ejustify%2Dcontent%2Dstart%7B%2Dms%2Dflex%2Dpack%3Astart%21important%3Bjustify%2Dcontent%3Aflex%2Dstart%21important%7D%2Ejustify%2Dcontent%2Dend%7B%2Dms%2Dflex%2Dpack%3Aend%21important%3Bjustify%2Dcontent%3Aflex%2Dend%21important%7D%2Ejustify%2Dcontent%2Dcenter%7B%2Dms%2Dflex%2Dpack%3Acenter%21important%3Bjustify%2Dcontent%3Acenter%21important%7D%2Ejustify%2Dcontent%2Dbetween%7B%2Dms%2Dflex%2Dpack%3Ajustify%21important%3Bjustify%2Dcontent%3Aspace%2Dbetween%21important%7D%2Ejustify%2Dcontent%2Daround%7B%2Dms%2Dflex%2Dpack%3Adistribute%21important%3Bjustify%2Dcontent%3Aspace%2Daround%21important%7D%2Ealign%2Ditems%2Dstart%7B%2Dms%2Dflex%2Dalign%3Astart%21important%3Balign%2Ditems%3Aflex%2Dstart%21important%7D%2Ealign%2Ditems%2Dend%7B%2Dms%2Dflex%2Dalign%3Aend%21important%3Balign%2Ditems%3Aflex%2Dend%21important%7D%2Ealign%2Ditems%2Dcenter%7B%2Dms%2Dflex%2Dalign%3Acenter%21important%3Balign%2Ditems%3Acenter%21important%7D%2Ealign%2Ditems%2Dbaseline%7B%2Dms%2Dflex%2Dalign%3Abaseline%21important%3Balign%2Ditems%3Abaseline%21important%7D%2Ealign%2Ditems%2Dstretch%7B%2Dms%2Dflex%2Dalign%3Astretch%21important%3Balign%2Ditems%3Astretch%21important%7D%2Ealign%2Dcontent%2Dstart%7B%2Dms%2Dflex%2Dline%2Dpack%3Astart%21important%3Balign%2Dcontent%3Aflex%2Dstart%21important%7D%2Ealign%2Dcontent%2Dend%7B%2Dms%2Dflex%2Dline%2Dpack%3Aend%21important%3Balign%2Dcontent%3Aflex%2Dend%21important%7D%2Ealign%2Dcontent%2Dcenter%7B%2Dms%2Dflex%2Dline%2Dpack%3Acenter%21important%3Balign%2Dcontent%3Acenter%21important%7D%2Ealign%2Dcontent%2Dbetween%7B%2Dms%2Dflex%2Dline%2Dpack%3Ajustify%21important%3Balign%2Dcontent%3Aspace%2Dbetween%21important%7D%2Ealign%2Dcontent%2Daround%7B%2Dms%2Dflex%2Dline%2Dpack%3Adistribute%21important%3Balign%2Dcontent%3Aspace%2Daround%21important%7D%2Ealign%2Dcontent%2Dstretch%7B%2Dms%2Dflex%2Dline%2Dpack%3Astretch%21important%3Balign%2Dcontent%3Astretch%21important%7D%2Ealign%2Dself%2Dauto%7B%2Dms%2Dflex%2Ditem%2Dalign%3Aauto%21important%3Balign%2Dself%3Aauto%21important%7D%2Ealign%2Dself%2Dstart%7B%2Dms%2Dflex%2Ditem%2Dalign%3Astart%21important%3Balign%2Dself%3Aflex%2Dstart%21important%7D%2Ealign%2Dself%2Dend%7B%2Dms%2Dflex%2Ditem%2Dalign%3Aend%21important%3Balign%2Dself%3Aflex%2Dend%21important%7D%2Ealign%2Dself%2Dcenter%7B%2Dms%2Dflex%2Ditem%2Dalign%3Acenter%21important%3Balign%2Dself%3Acenter%21important%7D%2Ealign%2Dself%2Dbaseline%7B%2Dms%2Dflex%2Ditem%2Dalign%3Abaseline%21important%3Balign%2Dself%3Abaseline%21important%7D%2Ealign%2Dself%2Dstretch%7B%2Dms%2Dflex%2Ditem%2Dalign%3Astretch%21important%3Balign%2Dself%3Astretch%21important%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Eflex%2Dsm%2Drow%7B%2Dms%2Dflex%2Ddirection%3Arow%21important%3Bflex%2Ddirection%3Arow%21important%7D%2Eflex%2Dsm%2Dcolumn%7B%2Dms%2Dflex%2Ddirection%3Acolumn%21important%3Bflex%2Ddirection%3Acolumn%21important%7D%2Eflex%2Dsm%2Drow%2Dreverse%7B%2Dms%2Dflex%2Ddirection%3Arow%2Dreverse%21important%3Bflex%2Ddirection%3Arow%2Dreverse%21important%7D%2Eflex%2Dsm%2Dcolumn%2Dreverse%7B%2Dms%2Dflex%2Ddirection%3Acolumn%2Dreverse%21important%3Bflex%2Ddirection%3Acolumn%2Dreverse%21important%7D%2Eflex%2Dsm%2Dwrap%7B%2Dms%2Dflex%2Dwrap%3Awrap%21important%3Bflex%2Dwrap%3Awrap%21important%7D%2Eflex%2Dsm%2Dnowrap%7B%2Dms%2Dflex%2Dwrap%3Anowrap%21important%3Bflex%2Dwrap%3Anowrap%21important%7D%2Eflex%2Dsm%2Dwrap%2Dreverse%7B%2Dms%2Dflex%2Dwrap%3Awrap%2Dreverse%21important%3Bflex%2Dwrap%3Awrap%2Dreverse%21important%7D%2Eflex%2Dsm%2Dfill%7B%2Dms%2Dflex%3A1%201%20auto%21important%3Bflex%3A1%201%20auto%21important%7D%2Eflex%2Dsm%2Dgrow%2D0%7B%2Dms%2Dflex%2Dpositive%3A0%21important%3Bflex%2Dgrow%3A0%21important%7D%2Eflex%2Dsm%2Dgrow%2D1%7B%2Dms%2Dflex%2Dpositive%3A1%21important%3Bflex%2Dgrow%3A1%21important%7D%2Eflex%2Dsm%2Dshrink%2D0%7B%2Dms%2Dflex%2Dnegative%3A0%21important%3Bflex%2Dshrink%3A0%21important%7D%2Eflex%2Dsm%2Dshrink%2D1%7B%2Dms%2Dflex%2Dnegative%3A1%21important%3Bflex%2Dshrink%3A1%21important%7D%2Ejustify%2Dcontent%2Dsm%2Dstart%7B%2Dms%2Dflex%2Dpack%3Astart%21important%3Bjustify%2Dcontent%3Aflex%2Dstart%21important%7D%2Ejustify%2Dcontent%2Dsm%2Dend%7B%2Dms%2Dflex%2Dpack%3Aend%21important%3Bjustify%2Dcontent%3Aflex%2Dend%21important%7D%2Ejustify%2Dcontent%2Dsm%2Dcenter%7B%2Dms%2Dflex%2Dpack%3Acenter%21important%3Bjustify%2Dcontent%3Acenter%21important%7D%2Ejustify%2Dcontent%2Dsm%2Dbetween%7B%2Dms%2Dflex%2Dpack%3Ajustify%21important%3Bjustify%2Dcontent%3Aspace%2Dbetween%21important%7D%2Ejustify%2Dcontent%2Dsm%2Daround%7B%2Dms%2Dflex%2Dpack%3Adistribute%21important%3Bjustify%2Dcontent%3Aspace%2Daround%21important%7D%2Ealign%2Ditems%2Dsm%2Dstart%7B%2Dms%2Dflex%2Dalign%3Astart%21important%3Balign%2Ditems%3Aflex%2Dstart%21important%7D%2Ealign%2Ditems%2Dsm%2Dend%7B%2Dms%2Dflex%2Dalign%3Aend%21important%3Balign%2Ditems%3Aflex%2Dend%21important%7D%2Ealign%2Ditems%2Dsm%2Dcenter%7B%2Dms%2Dflex%2Dalign%3Acenter%21important%3Balign%2Ditems%3Acenter%21important%7D%2Ealign%2Ditems%2Dsm%2Dbaseline%7B%2Dms%2Dflex%2Dalign%3Abaseline%21important%3Balign%2Ditems%3Abaseline%21important%7D%2Ealign%2Ditems%2Dsm%2Dstretch%7B%2Dms%2Dflex%2Dalign%3Astretch%21important%3Balign%2Ditems%3Astretch%21important%7D%2Ealign%2Dcontent%2Dsm%2Dstart%7B%2Dms%2Dflex%2Dline%2Dpack%3Astart%21important%3Balign%2Dcontent%3Aflex%2Dstart%21important%7D%2Ealign%2Dcontent%2Dsm%2Dend%7B%2Dms%2Dflex%2Dline%2Dpack%3Aend%21important%3Balign%2Dcontent%3Aflex%2Dend%21important%7D%2Ealign%2Dcontent%2Dsm%2Dcenter%7B%2Dms%2Dflex%2Dline%2Dpack%3Acenter%21important%3Balign%2Dcontent%3Acenter%21important%7D%2Ealign%2Dcontent%2Dsm%2Dbetween%7B%2Dms%2Dflex%2Dline%2Dpack%3Ajustify%21important%3Balign%2Dcontent%3Aspace%2Dbetween%21important%7D%2Ealign%2Dcontent%2Dsm%2Daround%7B%2Dms%2Dflex%2Dline%2Dpack%3Adistribute%21important%3Balign%2Dcontent%3Aspace%2Daround%21important%7D%2Ealign%2Dcontent%2Dsm%2Dstretch%7B%2Dms%2Dflex%2Dline%2Dpack%3Astretch%21important%3Balign%2Dcontent%3Astretch%21important%7D%2Ealign%2Dself%2Dsm%2Dauto%7B%2Dms%2Dflex%2Ditem%2Dalign%3Aauto%21important%3Balign%2Dself%3Aauto%21important%7D%2Ealign%2Dself%2Dsm%2Dstart%7B%2Dms%2Dflex%2Ditem%2Dalign%3Astart%21important%3Balign%2Dself%3Aflex%2Dstart%21important%7D%2Ealign%2Dself%2Dsm%2Dend%7B%2Dms%2Dflex%2Ditem%2Dalign%3Aend%21important%3Balign%2Dself%3Aflex%2Dend%21important%7D%2Ealign%2Dself%2Dsm%2Dcenter%7B%2Dms%2Dflex%2Ditem%2Dalign%3Acenter%21important%3Balign%2Dself%3Acenter%21important%7D%2Ealign%2Dself%2Dsm%2Dbaseline%7B%2Dms%2Dflex%2Ditem%2Dalign%3Abaseline%21important%3Balign%2Dself%3Abaseline%21important%7D%2Ealign%2Dself%2Dsm%2Dstretch%7B%2Dms%2Dflex%2Ditem%2Dalign%3Astretch%21important%3Balign%2Dself%3Astretch%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Eflex%2Dmd%2Drow%7B%2Dms%2Dflex%2Ddirection%3Arow%21important%3Bflex%2Ddirection%3Arow%21important%7D%2Eflex%2Dmd%2Dcolumn%7B%2Dms%2Dflex%2Ddirection%3Acolumn%21important%3Bflex%2Ddirection%3Acolumn%21important%7D%2Eflex%2Dmd%2Drow%2Dreverse%7B%2Dms%2Dflex%2Ddirection%3Arow%2Dreverse%21important%3Bflex%2Ddirection%3Arow%2Dreverse%21important%7D%2Eflex%2Dmd%2Dcolumn%2Dreverse%7B%2Dms%2Dflex%2Ddirection%3Acolumn%2Dreverse%21important%3Bflex%2Ddirection%3Acolumn%2Dreverse%21important%7D%2Eflex%2Dmd%2Dwrap%7B%2Dms%2Dflex%2Dwrap%3Awrap%21important%3Bflex%2Dwrap%3Awrap%21important%7D%2Eflex%2Dmd%2Dnowrap%7B%2Dms%2Dflex%2Dwrap%3Anowrap%21important%3Bflex%2Dwrap%3Anowrap%21important%7D%2Eflex%2Dmd%2Dwrap%2Dreverse%7B%2Dms%2Dflex%2Dwrap%3Awrap%2Dreverse%21important%3Bflex%2Dwrap%3Awrap%2Dreverse%21important%7D%2Eflex%2Dmd%2Dfill%7B%2Dms%2Dflex%3A1%201%20auto%21important%3Bflex%3A1%201%20auto%21important%7D%2Eflex%2Dmd%2Dgrow%2D0%7B%2Dms%2Dflex%2Dpositive%3A0%21important%3Bflex%2Dgrow%3A0%21important%7D%2Eflex%2Dmd%2Dgrow%2D1%7B%2Dms%2Dflex%2Dpositive%3A1%21important%3Bflex%2Dgrow%3A1%21important%7D%2Eflex%2Dmd%2Dshrink%2D0%7B%2Dms%2Dflex%2Dnegative%3A0%21important%3Bflex%2Dshrink%3A0%21important%7D%2Eflex%2Dmd%2Dshrink%2D1%7B%2Dms%2Dflex%2Dnegative%3A1%21important%3Bflex%2Dshrink%3A1%21important%7D%2Ejustify%2Dcontent%2Dmd%2Dstart%7B%2Dms%2Dflex%2Dpack%3Astart%21important%3Bjustify%2Dcontent%3Aflex%2Dstart%21important%7D%2Ejustify%2Dcontent%2Dmd%2Dend%7B%2Dms%2Dflex%2Dpack%3Aend%21important%3Bjustify%2Dcontent%3Aflex%2Dend%21important%7D%2Ejustify%2Dcontent%2Dmd%2Dcenter%7B%2Dms%2Dflex%2Dpack%3Acenter%21important%3Bjustify%2Dcontent%3Acenter%21important%7D%2Ejustify%2Dcontent%2Dmd%2Dbetween%7B%2Dms%2Dflex%2Dpack%3Ajustify%21important%3Bjustify%2Dcontent%3Aspace%2Dbetween%21important%7D%2Ejustify%2Dcontent%2Dmd%2Daround%7B%2Dms%2Dflex%2Dpack%3Adistribute%21important%3Bjustify%2Dcontent%3Aspace%2Daround%21important%7D%2Ealign%2Ditems%2Dmd%2Dstart%7B%2Dms%2Dflex%2Dalign%3Astart%21important%3Balign%2Ditems%3Aflex%2Dstart%21important%7D%2Ealign%2Ditems%2Dmd%2Dend%7B%2Dms%2Dflex%2Dalign%3Aend%21important%3Balign%2Ditems%3Aflex%2Dend%21important%7D%2Ealign%2Ditems%2Dmd%2Dcenter%7B%2Dms%2Dflex%2Dalign%3Acenter%21important%3Balign%2Ditems%3Acenter%21important%7D%2Ealign%2Ditems%2Dmd%2Dbaseline%7B%2Dms%2Dflex%2Dalign%3Abaseline%21important%3Balign%2Ditems%3Abaseline%21important%7D%2Ealign%2Ditems%2Dmd%2Dstretch%7B%2Dms%2Dflex%2Dalign%3Astretch%21important%3Balign%2Ditems%3Astretch%21important%7D%2Ealign%2Dcontent%2Dmd%2Dstart%7B%2Dms%2Dflex%2Dline%2Dpack%3Astart%21important%3Balign%2Dcontent%3Aflex%2Dstart%21important%7D%2Ealign%2Dcontent%2Dmd%2Dend%7B%2Dms%2Dflex%2Dline%2Dpack%3Aend%21important%3Balign%2Dcontent%3Aflex%2Dend%21important%7D%2Ealign%2Dcontent%2Dmd%2Dcenter%7B%2Dms%2Dflex%2Dline%2Dpack%3Acenter%21important%3Balign%2Dcontent%3Acenter%21important%7D%2Ealign%2Dcontent%2Dmd%2Dbetween%7B%2Dms%2Dflex%2Dline%2Dpack%3Ajustify%21important%3Balign%2Dcontent%3Aspace%2Dbetween%21important%7D%2Ealign%2Dcontent%2Dmd%2Daround%7B%2Dms%2Dflex%2Dline%2Dpack%3Adistribute%21important%3Balign%2Dcontent%3Aspace%2Daround%21important%7D%2Ealign%2Dcontent%2Dmd%2Dstretch%7B%2Dms%2Dflex%2Dline%2Dpack%3Astretch%21important%3Balign%2Dcontent%3Astretch%21important%7D%2Ealign%2Dself%2Dmd%2Dauto%7B%2Dms%2Dflex%2Ditem%2Dalign%3Aauto%21important%3Balign%2Dself%3Aauto%21important%7D%2Ealign%2Dself%2Dmd%2Dstart%7B%2Dms%2Dflex%2Ditem%2Dalign%3Astart%21important%3Balign%2Dself%3Aflex%2Dstart%21important%7D%2Ealign%2Dself%2Dmd%2Dend%7B%2Dms%2Dflex%2Ditem%2Dalign%3Aend%21important%3Balign%2Dself%3Aflex%2Dend%21important%7D%2Ealign%2Dself%2Dmd%2Dcenter%7B%2Dms%2Dflex%2Ditem%2Dalign%3Acenter%21important%3Balign%2Dself%3Acenter%21important%7D%2Ealign%2Dself%2Dmd%2Dbaseline%7B%2Dms%2Dflex%2Ditem%2Dalign%3Abaseline%21important%3Balign%2Dself%3Abaseline%21important%7D%2Ealign%2Dself%2Dmd%2Dstretch%7B%2Dms%2Dflex%2Ditem%2Dalign%3Astretch%21important%3Balign%2Dself%3Astretch%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Eflex%2Dlg%2Drow%7B%2Dms%2Dflex%2Ddirection%3Arow%21important%3Bflex%2Ddirection%3Arow%21important%7D%2Eflex%2Dlg%2Dcolumn%7B%2Dms%2Dflex%2Ddirection%3Acolumn%21important%3Bflex%2Ddirection%3Acolumn%21important%7D%2Eflex%2Dlg%2Drow%2Dreverse%7B%2Dms%2Dflex%2Ddirection%3Arow%2Dreverse%21important%3Bflex%2Ddirection%3Arow%2Dreverse%21important%7D%2Eflex%2Dlg%2Dcolumn%2Dreverse%7B%2Dms%2Dflex%2Ddirection%3Acolumn%2Dreverse%21important%3Bflex%2Ddirection%3Acolumn%2Dreverse%21important%7D%2Eflex%2Dlg%2Dwrap%7B%2Dms%2Dflex%2Dwrap%3Awrap%21important%3Bflex%2Dwrap%3Awrap%21important%7D%2Eflex%2Dlg%2Dnowrap%7B%2Dms%2Dflex%2Dwrap%3Anowrap%21important%3Bflex%2Dwrap%3Anowrap%21important%7D%2Eflex%2Dlg%2Dwrap%2Dreverse%7B%2Dms%2Dflex%2Dwrap%3Awrap%2Dreverse%21important%3Bflex%2Dwrap%3Awrap%2Dreverse%21important%7D%2Eflex%2Dlg%2Dfill%7B%2Dms%2Dflex%3A1%201%20auto%21important%3Bflex%3A1%201%20auto%21important%7D%2Eflex%2Dlg%2Dgrow%2D0%7B%2Dms%2Dflex%2Dpositive%3A0%21important%3Bflex%2Dgrow%3A0%21important%7D%2Eflex%2Dlg%2Dgrow%2D1%7B%2Dms%2Dflex%2Dpositive%3A1%21important%3Bflex%2Dgrow%3A1%21important%7D%2Eflex%2Dlg%2Dshrink%2D0%7B%2Dms%2Dflex%2Dnegative%3A0%21important%3Bflex%2Dshrink%3A0%21important%7D%2Eflex%2Dlg%2Dshrink%2D1%7B%2Dms%2Dflex%2Dnegative%3A1%21important%3Bflex%2Dshrink%3A1%21important%7D%2Ejustify%2Dcontent%2Dlg%2Dstart%7B%2Dms%2Dflex%2Dpack%3Astart%21important%3Bjustify%2Dcontent%3Aflex%2Dstart%21important%7D%2Ejustify%2Dcontent%2Dlg%2Dend%7B%2Dms%2Dflex%2Dpack%3Aend%21important%3Bjustify%2Dcontent%3Aflex%2Dend%21important%7D%2Ejustify%2Dcontent%2Dlg%2Dcenter%7B%2Dms%2Dflex%2Dpack%3Acenter%21important%3Bjustify%2Dcontent%3Acenter%21important%7D%2Ejustify%2Dcontent%2Dlg%2Dbetween%7B%2Dms%2Dflex%2Dpack%3Ajustify%21important%3Bjustify%2Dcontent%3Aspace%2Dbetween%21important%7D%2Ejustify%2Dcontent%2Dlg%2Daround%7B%2Dms%2Dflex%2Dpack%3Adistribute%21important%3Bjustify%2Dcontent%3Aspace%2Daround%21important%7D%2Ealign%2Ditems%2Dlg%2Dstart%7B%2Dms%2Dflex%2Dalign%3Astart%21important%3Balign%2Ditems%3Aflex%2Dstart%21important%7D%2Ealign%2Ditems%2Dlg%2Dend%7B%2Dms%2Dflex%2Dalign%3Aend%21important%3Balign%2Ditems%3Aflex%2Dend%21important%7D%2Ealign%2Ditems%2Dlg%2Dcenter%7B%2Dms%2Dflex%2Dalign%3Acenter%21important%3Balign%2Ditems%3Acenter%21important%7D%2Ealign%2Ditems%2Dlg%2Dbaseline%7B%2Dms%2Dflex%2Dalign%3Abaseline%21important%3Balign%2Ditems%3Abaseline%21important%7D%2Ealign%2Ditems%2Dlg%2Dstretch%7B%2Dms%2Dflex%2Dalign%3Astretch%21important%3Balign%2Ditems%3Astretch%21important%7D%2Ealign%2Dcontent%2Dlg%2Dstart%7B%2Dms%2Dflex%2Dline%2Dpack%3Astart%21important%3Balign%2Dcontent%3Aflex%2Dstart%21important%7D%2Ealign%2Dcontent%2Dlg%2Dend%7B%2Dms%2Dflex%2Dline%2Dpack%3Aend%21important%3Balign%2Dcontent%3Aflex%2Dend%21important%7D%2Ealign%2Dcontent%2Dlg%2Dcenter%7B%2Dms%2Dflex%2Dline%2Dpack%3Acenter%21important%3Balign%2Dcontent%3Acenter%21important%7D%2Ealign%2Dcontent%2Dlg%2Dbetween%7B%2Dms%2Dflex%2Dline%2Dpack%3Ajustify%21important%3Balign%2Dcontent%3Aspace%2Dbetween%21important%7D%2Ealign%2Dcontent%2Dlg%2Daround%7B%2Dms%2Dflex%2Dline%2Dpack%3Adistribute%21important%3Balign%2Dcontent%3Aspace%2Daround%21important%7D%2Ealign%2Dcontent%2Dlg%2Dstretch%7B%2Dms%2Dflex%2Dline%2Dpack%3Astretch%21important%3Balign%2Dcontent%3Astretch%21important%7D%2Ealign%2Dself%2Dlg%2Dauto%7B%2Dms%2Dflex%2Ditem%2Dalign%3Aauto%21important%3Balign%2Dself%3Aauto%21important%7D%2Ealign%2Dself%2Dlg%2Dstart%7B%2Dms%2Dflex%2Ditem%2Dalign%3Astart%21important%3Balign%2Dself%3Aflex%2Dstart%21important%7D%2Ealign%2Dself%2Dlg%2Dend%7B%2Dms%2Dflex%2Ditem%2Dalign%3Aend%21important%3Balign%2Dself%3Aflex%2Dend%21important%7D%2Ealign%2Dself%2Dlg%2Dcenter%7B%2Dms%2Dflex%2Ditem%2Dalign%3Acenter%21important%3Balign%2Dself%3Acenter%21important%7D%2Ealign%2Dself%2Dlg%2Dbaseline%7B%2Dms%2Dflex%2Ditem%2Dalign%3Abaseline%21important%3Balign%2Dself%3Abaseline%21important%7D%2Ealign%2Dself%2Dlg%2Dstretch%7B%2Dms%2Dflex%2Ditem%2Dalign%3Astretch%21important%3Balign%2Dself%3Astretch%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Eflex%2Dxl%2Drow%7B%2Dms%2Dflex%2Ddirection%3Arow%21important%3Bflex%2Ddirection%3Arow%21important%7D%2Eflex%2Dxl%2Dcolumn%7B%2Dms%2Dflex%2Ddirection%3Acolumn%21important%3Bflex%2Ddirection%3Acolumn%21important%7D%2Eflex%2Dxl%2Drow%2Dreverse%7B%2Dms%2Dflex%2Ddirection%3Arow%2Dreverse%21important%3Bflex%2Ddirection%3Arow%2Dreverse%21important%7D%2Eflex%2Dxl%2Dcolumn%2Dreverse%7B%2Dms%2Dflex%2Ddirection%3Acolumn%2Dreverse%21important%3Bflex%2Ddirection%3Acolumn%2Dreverse%21important%7D%2Eflex%2Dxl%2Dwrap%7B%2Dms%2Dflex%2Dwrap%3Awrap%21important%3Bflex%2Dwrap%3Awrap%21important%7D%2Eflex%2Dxl%2Dnowrap%7B%2Dms%2Dflex%2Dwrap%3Anowrap%21important%3Bflex%2Dwrap%3Anowrap%21important%7D%2Eflex%2Dxl%2Dwrap%2Dreverse%7B%2Dms%2Dflex%2Dwrap%3Awrap%2Dreverse%21important%3Bflex%2Dwrap%3Awrap%2Dreverse%21important%7D%2Eflex%2Dxl%2Dfill%7B%2Dms%2Dflex%3A1%201%20auto%21important%3Bflex%3A1%201%20auto%21important%7D%2Eflex%2Dxl%2Dgrow%2D0%7B%2Dms%2Dflex%2Dpositive%3A0%21important%3Bflex%2Dgrow%3A0%21important%7D%2Eflex%2Dxl%2Dgrow%2D1%7B%2Dms%2Dflex%2Dpositive%3A1%21important%3Bflex%2Dgrow%3A1%21important%7D%2Eflex%2Dxl%2Dshrink%2D0%7B%2Dms%2Dflex%2Dnegative%3A0%21important%3Bflex%2Dshrink%3A0%21important%7D%2Eflex%2Dxl%2Dshrink%2D1%7B%2Dms%2Dflex%2Dnegative%3A1%21important%3Bflex%2Dshrink%3A1%21important%7D%2Ejustify%2Dcontent%2Dxl%2Dstart%7B%2Dms%2Dflex%2Dpack%3Astart%21important%3Bjustify%2Dcontent%3Aflex%2Dstart%21important%7D%2Ejustify%2Dcontent%2Dxl%2Dend%7B%2Dms%2Dflex%2Dpack%3Aend%21important%3Bjustify%2Dcontent%3Aflex%2Dend%21important%7D%2Ejustify%2Dcontent%2Dxl%2Dcenter%7B%2Dms%2Dflex%2Dpack%3Acenter%21important%3Bjustify%2Dcontent%3Acenter%21important%7D%2Ejustify%2Dcontent%2Dxl%2Dbetween%7B%2Dms%2Dflex%2Dpack%3Ajustify%21important%3Bjustify%2Dcontent%3Aspace%2Dbetween%21important%7D%2Ejustify%2Dcontent%2Dxl%2Daround%7B%2Dms%2Dflex%2Dpack%3Adistribute%21important%3Bjustify%2Dcontent%3Aspace%2Daround%21important%7D%2Ealign%2Ditems%2Dxl%2Dstart%7B%2Dms%2Dflex%2Dalign%3Astart%21important%3Balign%2Ditems%3Aflex%2Dstart%21important%7D%2Ealign%2Ditems%2Dxl%2Dend%7B%2Dms%2Dflex%2Dalign%3Aend%21important%3Balign%2Ditems%3Aflex%2Dend%21important%7D%2Ealign%2Ditems%2Dxl%2Dcenter%7B%2Dms%2Dflex%2Dalign%3Acenter%21important%3Balign%2Ditems%3Acenter%21important%7D%2Ealign%2Ditems%2Dxl%2Dbaseline%7B%2Dms%2Dflex%2Dalign%3Abaseline%21important%3Balign%2Ditems%3Abaseline%21important%7D%2Ealign%2Ditems%2Dxl%2Dstretch%7B%2Dms%2Dflex%2Dalign%3Astretch%21important%3Balign%2Ditems%3Astretch%21important%7D%2Ealign%2Dcontent%2Dxl%2Dstart%7B%2Dms%2Dflex%2Dline%2Dpack%3Astart%21important%3Balign%2Dcontent%3Aflex%2Dstart%21important%7D%2Ealign%2Dcontent%2Dxl%2Dend%7B%2Dms%2Dflex%2Dline%2Dpack%3Aend%21important%3Balign%2Dcontent%3Aflex%2Dend%21important%7D%2Ealign%2Dcontent%2Dxl%2Dcenter%7B%2Dms%2Dflex%2Dline%2Dpack%3Acenter%21important%3Balign%2Dcontent%3Acenter%21important%7D%2Ealign%2Dcontent%2Dxl%2Dbetween%7B%2Dms%2Dflex%2Dline%2Dpack%3Ajustify%21important%3Balign%2Dcontent%3Aspace%2Dbetween%21important%7D%2Ealign%2Dcontent%2Dxl%2Daround%7B%2Dms%2Dflex%2Dline%2Dpack%3Adistribute%21important%3Balign%2Dcontent%3Aspace%2Daround%21important%7D%2Ealign%2Dcontent%2Dxl%2Dstretch%7B%2Dms%2Dflex%2Dline%2Dpack%3Astretch%21important%3Balign%2Dcontent%3Astretch%21important%7D%2Ealign%2Dself%2Dxl%2Dauto%7B%2Dms%2Dflex%2Ditem%2Dalign%3Aauto%21important%3Balign%2Dself%3Aauto%21important%7D%2Ealign%2Dself%2Dxl%2Dstart%7B%2Dms%2Dflex%2Ditem%2Dalign%3Astart%21important%3Balign%2Dself%3Aflex%2Dstart%21important%7D%2Ealign%2Dself%2Dxl%2Dend%7B%2Dms%2Dflex%2Ditem%2Dalign%3Aend%21important%3Balign%2Dself%3Aflex%2Dend%21important%7D%2Ealign%2Dself%2Dxl%2Dcenter%7B%2Dms%2Dflex%2Ditem%2Dalign%3Acenter%21important%3Balign%2Dself%3Acenter%21important%7D%2Ealign%2Dself%2Dxl%2Dbaseline%7B%2Dms%2Dflex%2Ditem%2Dalign%3Abaseline%21important%3Balign%2Dself%3Abaseline%21important%7D%2Ealign%2Dself%2Dxl%2Dstretch%7B%2Dms%2Dflex%2Ditem%2Dalign%3Astretch%21important%3Balign%2Dself%3Astretch%21important%7D%7D%2Efloat%2Dleft%7Bfloat%3Aleft%21important%7D%2Efloat%2Dright%7Bfloat%3Aright%21important%7D%2Efloat%2Dnone%7Bfloat%3Anone%21important%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Efloat%2Dsm%2Dleft%7Bfloat%3Aleft%21important%7D%2Efloat%2Dsm%2Dright%7Bfloat%3Aright%21important%7D%2Efloat%2Dsm%2Dnone%7Bfloat%3Anone%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Efloat%2Dmd%2Dleft%7Bfloat%3Aleft%21important%7D%2Efloat%2Dmd%2Dright%7Bfloat%3Aright%21important%7D%2Efloat%2Dmd%2Dnone%7Bfloat%3Anone%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Efloat%2Dlg%2Dleft%7Bfloat%3Aleft%21important%7D%2Efloat%2Dlg%2Dright%7Bfloat%3Aright%21important%7D%2Efloat%2Dlg%2Dnone%7Bfloat%3Anone%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Efloat%2Dxl%2Dleft%7Bfloat%3Aleft%21important%7D%2Efloat%2Dxl%2Dright%7Bfloat%3Aright%21important%7D%2Efloat%2Dxl%2Dnone%7Bfloat%3Anone%21important%7D%7D%2Euser%2Dselect%2Dall%7B%2Dwebkit%2Duser%2Dselect%3Aall%21important%3B%2Dmoz%2Duser%2Dselect%3Aall%21important%3B%2Dms%2Duser%2Dselect%3Aall%21important%3Buser%2Dselect%3Aall%21important%7D%2Euser%2Dselect%2Dauto%7B%2Dwebkit%2Duser%2Dselect%3Aauto%21important%3B%2Dmoz%2Duser%2Dselect%3Aauto%21important%3B%2Dms%2Duser%2Dselect%3Aauto%21important%3Buser%2Dselect%3Aauto%21important%7D%2Euser%2Dselect%2Dnone%7B%2Dwebkit%2Duser%2Dselect%3Anone%21important%3B%2Dmoz%2Duser%2Dselect%3Anone%21important%3B%2Dms%2Duser%2Dselect%3Anone%21important%3Buser%2Dselect%3Anone%21important%7D%2Eoverflow%2Dauto%7Boverflow%3Aauto%21important%7D%2Eoverflow%2Dhidden%7Boverflow%3Ahidden%21important%7D%2Eposition%2Dstatic%7Bposition%3Astatic%21important%7D%2Eposition%2Drelative%7Bposition%3Arelative%21important%7D%2Eposition%2Dabsolute%7Bposition%3Aabsolute%21important%7D%2Eposition%2Dfixed%7Bposition%3Afixed%21important%7D%2Eposition%2Dsticky%7Bposition%3A%2Dwebkit%2Dsticky%21important%3Bposition%3Asticky%21important%7D%2Efixed%2Dtop%7Bposition%3Afixed%3Btop%3A0%3Bright%3A0%3Bleft%3A0%3Bz%2Dindex%3A1030%7D%2Efixed%2Dbottom%7Bposition%3Afixed%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bz%2Dindex%3A1030%7D%40supports%20%28%28position%3A%2Dwebkit%2Dsticky%29%20or%20%28position%3Asticky%29%29%7B%2Esticky%2Dtop%7Bposition%3A%2Dwebkit%2Dsticky%3Bposition%3Asticky%3Btop%3A0%3Bz%2Dindex%3A1020%7D%7D%2Esr%2Donly%7Bposition%3Aabsolute%3Bwidth%3A1px%3Bheight%3A1px%3Bpadding%3A0%3Bmargin%3A%2D1px%3Boverflow%3Ahidden%3Bclip%3Arect%280%2C0%2C0%2C0%29%3Bwhite%2Dspace%3Anowrap%3Bborder%3A0%7D%2Esr%2Donly%2Dfocusable%3Aactive%2C%2Esr%2Donly%2Dfocusable%3Afocus%7Bposition%3Astatic%3Bwidth%3Aauto%3Bheight%3Aauto%3Boverflow%3Avisible%3Bclip%3Aauto%3Bwhite%2Dspace%3Anormal%7D%2Eshadow%2Dsm%7Bbox%2Dshadow%3A0%20%2E125rem%20%2E25rem%20rgba%280%2C0%2C0%2C%2E075%29%21important%7D%2Eshadow%7Bbox%2Dshadow%3A0%20%2E5rem%201rem%20rgba%280%2C0%2C0%2C%2E15%29%21important%7D%2Eshadow%2Dlg%7Bbox%2Dshadow%3A0%201rem%203rem%20rgba%280%2C0%2C0%2C%2E175%29%21important%7D%2Eshadow%2Dnone%7Bbox%2Dshadow%3Anone%21important%7D%2Ew%2D25%7Bwidth%3A25%25%21important%7D%2Ew%2D50%7Bwidth%3A50%25%21important%7D%2Ew%2D75%7Bwidth%3A75%25%21important%7D%2Ew%2D100%7Bwidth%3A100%25%21important%7D%2Ew%2Dauto%7Bwidth%3Aauto%21important%7D%2Eh%2D25%7Bheight%3A25%25%21important%7D%2Eh%2D50%7Bheight%3A50%25%21important%7D%2Eh%2D75%7Bheight%3A75%25%21important%7D%2Eh%2D100%7Bheight%3A100%25%21important%7D%2Eh%2Dauto%7Bheight%3Aauto%21important%7D%2Emw%2D100%7Bmax%2Dwidth%3A100%25%21important%7D%2Emh%2D100%7Bmax%2Dheight%3A100%25%21important%7D%2Emin%2Dvw%2D100%7Bmin%2Dwidth%3A100vw%21important%7D%2Emin%2Dvh%2D100%7Bmin%2Dheight%3A100vh%21important%7D%2Evw%2D100%7Bwidth%3A100vw%21important%7D%2Evh%2D100%7Bheight%3A100vh%21important%7D%2Em%2D0%7Bmargin%3A0%21important%7D%2Emt%2D0%2C%2Emy%2D0%7Bmargin%2Dtop%3A0%21important%7D%2Emr%2D0%2C%2Emx%2D0%7Bmargin%2Dright%3A0%21important%7D%2Emb%2D0%2C%2Emy%2D0%7Bmargin%2Dbottom%3A0%21important%7D%2Eml%2D0%2C%2Emx%2D0%7Bmargin%2Dleft%3A0%21important%7D%2Em%2D1%7Bmargin%3A%2E25rem%21important%7D%2Emt%2D1%2C%2Emy%2D1%7Bmargin%2Dtop%3A%2E25rem%21important%7D%2Emr%2D1%2C%2Emx%2D1%7Bmargin%2Dright%3A%2E25rem%21important%7D%2Emb%2D1%2C%2Emy%2D1%7Bmargin%2Dbottom%3A%2E25rem%21important%7D%2Eml%2D1%2C%2Emx%2D1%7Bmargin%2Dleft%3A%2E25rem%21important%7D%2Em%2D2%7Bmargin%3A%2E5rem%21important%7D%2Emt%2D2%2C%2Emy%2D2%7Bmargin%2Dtop%3A%2E5rem%21important%7D%2Emr%2D2%2C%2Emx%2D2%7Bmargin%2Dright%3A%2E5rem%21important%7D%2Emb%2D2%2C%2Emy%2D2%7Bmargin%2Dbottom%3A%2E5rem%21important%7D%2Eml%2D2%2C%2Emx%2D2%7Bmargin%2Dleft%3A%2E5rem%21important%7D%2Em%2D3%7Bmargin%3A1rem%21important%7D%2Emt%2D3%2C%2Emy%2D3%7Bmargin%2Dtop%3A1rem%21important%7D%2Emr%2D3%2C%2Emx%2D3%7Bmargin%2Dright%3A1rem%21important%7D%2Emb%2D3%2C%2Emy%2D3%7Bmargin%2Dbottom%3A1rem%21important%7D%2Eml%2D3%2C%2Emx%2D3%7Bmargin%2Dleft%3A1rem%21important%7D%2Em%2D4%7Bmargin%3A1%2E5rem%21important%7D%2Emt%2D4%2C%2Emy%2D4%7Bmargin%2Dtop%3A1%2E5rem%21important%7D%2Emr%2D4%2C%2Emx%2D4%7Bmargin%2Dright%3A1%2E5rem%21important%7D%2Emb%2D4%2C%2Emy%2D4%7Bmargin%2Dbottom%3A1%2E5rem%21important%7D%2Eml%2D4%2C%2Emx%2D4%7Bmargin%2Dleft%3A1%2E5rem%21important%7D%2Em%2D5%7Bmargin%3A3rem%21important%7D%2Emt%2D5%2C%2Emy%2D5%7Bmargin%2Dtop%3A3rem%21important%7D%2Emr%2D5%2C%2Emx%2D5%7Bmargin%2Dright%3A3rem%21important%7D%2Emb%2D5%2C%2Emy%2D5%7Bmargin%2Dbottom%3A3rem%21important%7D%2Eml%2D5%2C%2Emx%2D5%7Bmargin%2Dleft%3A3rem%21important%7D%2Ep%2D0%7Bpadding%3A0%21important%7D%2Ept%2D0%2C%2Epy%2D0%7Bpadding%2Dtop%3A0%21important%7D%2Epr%2D0%2C%2Epx%2D0%7Bpadding%2Dright%3A0%21important%7D%2Epb%2D0%2C%2Epy%2D0%7Bpadding%2Dbottom%3A0%21important%7D%2Epl%2D0%2C%2Epx%2D0%7Bpadding%2Dleft%3A0%21important%7D%2Ep%2D1%7Bpadding%3A%2E25rem%21important%7D%2Ept%2D1%2C%2Epy%2D1%7Bpadding%2Dtop%3A%2E25rem%21important%7D%2Epr%2D1%2C%2Epx%2D1%7Bpadding%2Dright%3A%2E25rem%21important%7D%2Epb%2D1%2C%2Epy%2D1%7Bpadding%2Dbottom%3A%2E25rem%21important%7D%2Epl%2D1%2C%2Epx%2D1%7Bpadding%2Dleft%3A%2E25rem%21important%7D%2Ep%2D2%7Bpadding%3A%2E5rem%21important%7D%2Ept%2D2%2C%2Epy%2D2%7Bpadding%2Dtop%3A%2E5rem%21important%7D%2Epr%2D2%2C%2Epx%2D2%7Bpadding%2Dright%3A%2E5rem%21important%7D%2Epb%2D2%2C%2Epy%2D2%7Bpadding%2Dbottom%3A%2E5rem%21important%7D%2Epl%2D2%2C%2Epx%2D2%7Bpadding%2Dleft%3A%2E5rem%21important%7D%2Ep%2D3%7Bpadding%3A1rem%21important%7D%2Ept%2D3%2C%2Epy%2D3%7Bpadding%2Dtop%3A1rem%21important%7D%2Epr%2D3%2C%2Epx%2D3%7Bpadding%2Dright%3A1rem%21important%7D%2Epb%2D3%2C%2Epy%2D3%7Bpadding%2Dbottom%3A1rem%21important%7D%2Epl%2D3%2C%2Epx%2D3%7Bpadding%2Dleft%3A1rem%21important%7D%2Ep%2D4%7Bpadding%3A1%2E5rem%21important%7D%2Ept%2D4%2C%2Epy%2D4%7Bpadding%2Dtop%3A1%2E5rem%21important%7D%2Epr%2D4%2C%2Epx%2D4%7Bpadding%2Dright%3A1%2E5rem%21important%7D%2Epb%2D4%2C%2Epy%2D4%7Bpadding%2Dbottom%3A1%2E5rem%21important%7D%2Epl%2D4%2C%2Epx%2D4%7Bpadding%2Dleft%3A1%2E5rem%21important%7D%2Ep%2D5%7Bpadding%3A3rem%21important%7D%2Ept%2D5%2C%2Epy%2D5%7Bpadding%2Dtop%3A3rem%21important%7D%2Epr%2D5%2C%2Epx%2D5%7Bpadding%2Dright%3A3rem%21important%7D%2Epb%2D5%2C%2Epy%2D5%7Bpadding%2Dbottom%3A3rem%21important%7D%2Epl%2D5%2C%2Epx%2D5%7Bpadding%2Dleft%3A3rem%21important%7D%2Em%2Dn1%7Bmargin%3A%2D%2E25rem%21important%7D%2Emt%2Dn1%2C%2Emy%2Dn1%7Bmargin%2Dtop%3A%2D%2E25rem%21important%7D%2Emr%2Dn1%2C%2Emx%2Dn1%7Bmargin%2Dright%3A%2D%2E25rem%21important%7D%2Emb%2Dn1%2C%2Emy%2Dn1%7Bmargin%2Dbottom%3A%2D%2E25rem%21important%7D%2Eml%2Dn1%2C%2Emx%2Dn1%7Bmargin%2Dleft%3A%2D%2E25rem%21important%7D%2Em%2Dn2%7Bmargin%3A%2D%2E5rem%21important%7D%2Emt%2Dn2%2C%2Emy%2Dn2%7Bmargin%2Dtop%3A%2D%2E5rem%21important%7D%2Emr%2Dn2%2C%2Emx%2Dn2%7Bmargin%2Dright%3A%2D%2E5rem%21important%7D%2Emb%2Dn2%2C%2Emy%2Dn2%7Bmargin%2Dbottom%3A%2D%2E5rem%21important%7D%2Eml%2Dn2%2C%2Emx%2Dn2%7Bmargin%2Dleft%3A%2D%2E5rem%21important%7D%2Em%2Dn3%7Bmargin%3A%2D1rem%21important%7D%2Emt%2Dn3%2C%2Emy%2Dn3%7Bmargin%2Dtop%3A%2D1rem%21important%7D%2Emr%2Dn3%2C%2Emx%2Dn3%7Bmargin%2Dright%3A%2D1rem%21important%7D%2Emb%2Dn3%2C%2Emy%2Dn3%7Bmargin%2Dbottom%3A%2D1rem%21important%7D%2Eml%2Dn3%2C%2Emx%2Dn3%7Bmargin%2Dleft%3A%2D1rem%21important%7D%2Em%2Dn4%7Bmargin%3A%2D1%2E5rem%21important%7D%2Emt%2Dn4%2C%2Emy%2Dn4%7Bmargin%2Dtop%3A%2D1%2E5rem%21important%7D%2Emr%2Dn4%2C%2Emx%2Dn4%7Bmargin%2Dright%3A%2D1%2E5rem%21important%7D%2Emb%2Dn4%2C%2Emy%2Dn4%7Bmargin%2Dbottom%3A%2D1%2E5rem%21important%7D%2Eml%2Dn4%2C%2Emx%2Dn4%7Bmargin%2Dleft%3A%2D1%2E5rem%21important%7D%2Em%2Dn5%7Bmargin%3A%2D3rem%21important%7D%2Emt%2Dn5%2C%2Emy%2Dn5%7Bmargin%2Dtop%3A%2D3rem%21important%7D%2Emr%2Dn5%2C%2Emx%2Dn5%7Bmargin%2Dright%3A%2D3rem%21important%7D%2Emb%2Dn5%2C%2Emy%2Dn5%7Bmargin%2Dbottom%3A%2D3rem%21important%7D%2Eml%2Dn5%2C%2Emx%2Dn5%7Bmargin%2Dleft%3A%2D3rem%21important%7D%2Em%2Dauto%7Bmargin%3Aauto%21important%7D%2Emt%2Dauto%2C%2Emy%2Dauto%7Bmargin%2Dtop%3Aauto%21important%7D%2Emr%2Dauto%2C%2Emx%2Dauto%7Bmargin%2Dright%3Aauto%21important%7D%2Emb%2Dauto%2C%2Emy%2Dauto%7Bmargin%2Dbottom%3Aauto%21important%7D%2Eml%2Dauto%2C%2Emx%2Dauto%7Bmargin%2Dleft%3Aauto%21important%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Em%2Dsm%2D0%7Bmargin%3A0%21important%7D%2Emt%2Dsm%2D0%2C%2Emy%2Dsm%2D0%7Bmargin%2Dtop%3A0%21important%7D%2Emr%2Dsm%2D0%2C%2Emx%2Dsm%2D0%7Bmargin%2Dright%3A0%21important%7D%2Emb%2Dsm%2D0%2C%2Emy%2Dsm%2D0%7Bmargin%2Dbottom%3A0%21important%7D%2Eml%2Dsm%2D0%2C%2Emx%2Dsm%2D0%7Bmargin%2Dleft%3A0%21important%7D%2Em%2Dsm%2D1%7Bmargin%3A%2E25rem%21important%7D%2Emt%2Dsm%2D1%2C%2Emy%2Dsm%2D1%7Bmargin%2Dtop%3A%2E25rem%21important%7D%2Emr%2Dsm%2D1%2C%2Emx%2Dsm%2D1%7Bmargin%2Dright%3A%2E25rem%21important%7D%2Emb%2Dsm%2D1%2C%2Emy%2Dsm%2D1%7Bmargin%2Dbottom%3A%2E25rem%21important%7D%2Eml%2Dsm%2D1%2C%2Emx%2Dsm%2D1%7Bmargin%2Dleft%3A%2E25rem%21important%7D%2Em%2Dsm%2D2%7Bmargin%3A%2E5rem%21important%7D%2Emt%2Dsm%2D2%2C%2Emy%2Dsm%2D2%7Bmargin%2Dtop%3A%2E5rem%21important%7D%2Emr%2Dsm%2D2%2C%2Emx%2Dsm%2D2%7Bmargin%2Dright%3A%2E5rem%21important%7D%2Emb%2Dsm%2D2%2C%2Emy%2Dsm%2D2%7Bmargin%2Dbottom%3A%2E5rem%21important%7D%2Eml%2Dsm%2D2%2C%2Emx%2Dsm%2D2%7Bmargin%2Dleft%3A%2E5rem%21important%7D%2Em%2Dsm%2D3%7Bmargin%3A1rem%21important%7D%2Emt%2Dsm%2D3%2C%2Emy%2Dsm%2D3%7Bmargin%2Dtop%3A1rem%21important%7D%2Emr%2Dsm%2D3%2C%2Emx%2Dsm%2D3%7Bmargin%2Dright%3A1rem%21important%7D%2Emb%2Dsm%2D3%2C%2Emy%2Dsm%2D3%7Bmargin%2Dbottom%3A1rem%21important%7D%2Eml%2Dsm%2D3%2C%2Emx%2Dsm%2D3%7Bmargin%2Dleft%3A1rem%21important%7D%2Em%2Dsm%2D4%7Bmargin%3A1%2E5rem%21important%7D%2Emt%2Dsm%2D4%2C%2Emy%2Dsm%2D4%7Bmargin%2Dtop%3A1%2E5rem%21important%7D%2Emr%2Dsm%2D4%2C%2Emx%2Dsm%2D4%7Bmargin%2Dright%3A1%2E5rem%21important%7D%2Emb%2Dsm%2D4%2C%2Emy%2Dsm%2D4%7Bmargin%2Dbottom%3A1%2E5rem%21important%7D%2Eml%2Dsm%2D4%2C%2Emx%2Dsm%2D4%7Bmargin%2Dleft%3A1%2E5rem%21important%7D%2Em%2Dsm%2D5%7Bmargin%3A3rem%21important%7D%2Emt%2Dsm%2D5%2C%2Emy%2Dsm%2D5%7Bmargin%2Dtop%3A3rem%21important%7D%2Emr%2Dsm%2D5%2C%2Emx%2Dsm%2D5%7Bmargin%2Dright%3A3rem%21important%7D%2Emb%2Dsm%2D5%2C%2Emy%2Dsm%2D5%7Bmargin%2Dbottom%3A3rem%21important%7D%2Eml%2Dsm%2D5%2C%2Emx%2Dsm%2D5%7Bmargin%2Dleft%3A3rem%21important%7D%2Ep%2Dsm%2D0%7Bpadding%3A0%21important%7D%2Ept%2Dsm%2D0%2C%2Epy%2Dsm%2D0%7Bpadding%2Dtop%3A0%21important%7D%2Epr%2Dsm%2D0%2C%2Epx%2Dsm%2D0%7Bpadding%2Dright%3A0%21important%7D%2Epb%2Dsm%2D0%2C%2Epy%2Dsm%2D0%7Bpadding%2Dbottom%3A0%21important%7D%2Epl%2Dsm%2D0%2C%2Epx%2Dsm%2D0%7Bpadding%2Dleft%3A0%21important%7D%2Ep%2Dsm%2D1%7Bpadding%3A%2E25rem%21important%7D%2Ept%2Dsm%2D1%2C%2Epy%2Dsm%2D1%7Bpadding%2Dtop%3A%2E25rem%21important%7D%2Epr%2Dsm%2D1%2C%2Epx%2Dsm%2D1%7Bpadding%2Dright%3A%2E25rem%21important%7D%2Epb%2Dsm%2D1%2C%2Epy%2Dsm%2D1%7Bpadding%2Dbottom%3A%2E25rem%21important%7D%2Epl%2Dsm%2D1%2C%2Epx%2Dsm%2D1%7Bpadding%2Dleft%3A%2E25rem%21important%7D%2Ep%2Dsm%2D2%7Bpadding%3A%2E5rem%21important%7D%2Ept%2Dsm%2D2%2C%2Epy%2Dsm%2D2%7Bpadding%2Dtop%3A%2E5rem%21important%7D%2Epr%2Dsm%2D2%2C%2Epx%2Dsm%2D2%7Bpadding%2Dright%3A%2E5rem%21important%7D%2Epb%2Dsm%2D2%2C%2Epy%2Dsm%2D2%7Bpadding%2Dbottom%3A%2E5rem%21important%7D%2Epl%2Dsm%2D2%2C%2Epx%2Dsm%2D2%7Bpadding%2Dleft%3A%2E5rem%21important%7D%2Ep%2Dsm%2D3%7Bpadding%3A1rem%21important%7D%2Ept%2Dsm%2D3%2C%2Epy%2Dsm%2D3%7Bpadding%2Dtop%3A1rem%21important%7D%2Epr%2Dsm%2D3%2C%2Epx%2Dsm%2D3%7Bpadding%2Dright%3A1rem%21important%7D%2Epb%2Dsm%2D3%2C%2Epy%2Dsm%2D3%7Bpadding%2Dbottom%3A1rem%21important%7D%2Epl%2Dsm%2D3%2C%2Epx%2Dsm%2D3%7Bpadding%2Dleft%3A1rem%21important%7D%2Ep%2Dsm%2D4%7Bpadding%3A1%2E5rem%21important%7D%2Ept%2Dsm%2D4%2C%2Epy%2Dsm%2D4%7Bpadding%2Dtop%3A1%2E5rem%21important%7D%2Epr%2Dsm%2D4%2C%2Epx%2Dsm%2D4%7Bpadding%2Dright%3A1%2E5rem%21important%7D%2Epb%2Dsm%2D4%2C%2Epy%2Dsm%2D4%7Bpadding%2Dbottom%3A1%2E5rem%21important%7D%2Epl%2Dsm%2D4%2C%2Epx%2Dsm%2D4%7Bpadding%2Dleft%3A1%2E5rem%21important%7D%2Ep%2Dsm%2D5%7Bpadding%3A3rem%21important%7D%2Ept%2Dsm%2D5%2C%2Epy%2Dsm%2D5%7Bpadding%2Dtop%3A3rem%21important%7D%2Epr%2Dsm%2D5%2C%2Epx%2Dsm%2D5%7Bpadding%2Dright%3A3rem%21important%7D%2Epb%2Dsm%2D5%2C%2Epy%2Dsm%2D5%7Bpadding%2Dbottom%3A3rem%21important%7D%2Epl%2Dsm%2D5%2C%2Epx%2Dsm%2D5%7Bpadding%2Dleft%3A3rem%21important%7D%2Em%2Dsm%2Dn1%7Bmargin%3A%2D%2E25rem%21important%7D%2Emt%2Dsm%2Dn1%2C%2Emy%2Dsm%2Dn1%7Bmargin%2Dtop%3A%2D%2E25rem%21important%7D%2Emr%2Dsm%2Dn1%2C%2Emx%2Dsm%2Dn1%7Bmargin%2Dright%3A%2D%2E25rem%21important%7D%2Emb%2Dsm%2Dn1%2C%2Emy%2Dsm%2Dn1%7Bmargin%2Dbottom%3A%2D%2E25rem%21important%7D%2Eml%2Dsm%2Dn1%2C%2Emx%2Dsm%2Dn1%7Bmargin%2Dleft%3A%2D%2E25rem%21important%7D%2Em%2Dsm%2Dn2%7Bmargin%3A%2D%2E5rem%21important%7D%2Emt%2Dsm%2Dn2%2C%2Emy%2Dsm%2Dn2%7Bmargin%2Dtop%3A%2D%2E5rem%21important%7D%2Emr%2Dsm%2Dn2%2C%2Emx%2Dsm%2Dn2%7Bmargin%2Dright%3A%2D%2E5rem%21important%7D%2Emb%2Dsm%2Dn2%2C%2Emy%2Dsm%2Dn2%7Bmargin%2Dbottom%3A%2D%2E5rem%21important%7D%2Eml%2Dsm%2Dn2%2C%2Emx%2Dsm%2Dn2%7Bmargin%2Dleft%3A%2D%2E5rem%21important%7D%2Em%2Dsm%2Dn3%7Bmargin%3A%2D1rem%21important%7D%2Emt%2Dsm%2Dn3%2C%2Emy%2Dsm%2Dn3%7Bmargin%2Dtop%3A%2D1rem%21important%7D%2Emr%2Dsm%2Dn3%2C%2Emx%2Dsm%2Dn3%7Bmargin%2Dright%3A%2D1rem%21important%7D%2Emb%2Dsm%2Dn3%2C%2Emy%2Dsm%2Dn3%7Bmargin%2Dbottom%3A%2D1rem%21important%7D%2Eml%2Dsm%2Dn3%2C%2Emx%2Dsm%2Dn3%7Bmargin%2Dleft%3A%2D1rem%21important%7D%2Em%2Dsm%2Dn4%7Bmargin%3A%2D1%2E5rem%21important%7D%2Emt%2Dsm%2Dn4%2C%2Emy%2Dsm%2Dn4%7Bmargin%2Dtop%3A%2D1%2E5rem%21important%7D%2Emr%2Dsm%2Dn4%2C%2Emx%2Dsm%2Dn4%7Bmargin%2Dright%3A%2D1%2E5rem%21important%7D%2Emb%2Dsm%2Dn4%2C%2Emy%2Dsm%2Dn4%7Bmargin%2Dbottom%3A%2D1%2E5rem%21important%7D%2Eml%2Dsm%2Dn4%2C%2Emx%2Dsm%2Dn4%7Bmargin%2Dleft%3A%2D1%2E5rem%21important%7D%2Em%2Dsm%2Dn5%7Bmargin%3A%2D3rem%21important%7D%2Emt%2Dsm%2Dn5%2C%2Emy%2Dsm%2Dn5%7Bmargin%2Dtop%3A%2D3rem%21important%7D%2Emr%2Dsm%2Dn5%2C%2Emx%2Dsm%2Dn5%7Bmargin%2Dright%3A%2D3rem%21important%7D%2Emb%2Dsm%2Dn5%2C%2Emy%2Dsm%2Dn5%7Bmargin%2Dbottom%3A%2D3rem%21important%7D%2Eml%2Dsm%2Dn5%2C%2Emx%2Dsm%2Dn5%7Bmargin%2Dleft%3A%2D3rem%21important%7D%2Em%2Dsm%2Dauto%7Bmargin%3Aauto%21important%7D%2Emt%2Dsm%2Dauto%2C%2Emy%2Dsm%2Dauto%7Bmargin%2Dtop%3Aauto%21important%7D%2Emr%2Dsm%2Dauto%2C%2Emx%2Dsm%2Dauto%7Bmargin%2Dright%3Aauto%21important%7D%2Emb%2Dsm%2Dauto%2C%2Emy%2Dsm%2Dauto%7Bmargin%2Dbottom%3Aauto%21important%7D%2Eml%2Dsm%2Dauto%2C%2Emx%2Dsm%2Dauto%7Bmargin%2Dleft%3Aauto%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Em%2Dmd%2D0%7Bmargin%3A0%21important%7D%2Emt%2Dmd%2D0%2C%2Emy%2Dmd%2D0%7Bmargin%2Dtop%3A0%21important%7D%2Emr%2Dmd%2D0%2C%2Emx%2Dmd%2D0%7Bmargin%2Dright%3A0%21important%7D%2Emb%2Dmd%2D0%2C%2Emy%2Dmd%2D0%7Bmargin%2Dbottom%3A0%21important%7D%2Eml%2Dmd%2D0%2C%2Emx%2Dmd%2D0%7Bmargin%2Dleft%3A0%21important%7D%2Em%2Dmd%2D1%7Bmargin%3A%2E25rem%21important%7D%2Emt%2Dmd%2D1%2C%2Emy%2Dmd%2D1%7Bmargin%2Dtop%3A%2E25rem%21important%7D%2Emr%2Dmd%2D1%2C%2Emx%2Dmd%2D1%7Bmargin%2Dright%3A%2E25rem%21important%7D%2Emb%2Dmd%2D1%2C%2Emy%2Dmd%2D1%7Bmargin%2Dbottom%3A%2E25rem%21important%7D%2Eml%2Dmd%2D1%2C%2Emx%2Dmd%2D1%7Bmargin%2Dleft%3A%2E25rem%21important%7D%2Em%2Dmd%2D2%7Bmargin%3A%2E5rem%21important%7D%2Emt%2Dmd%2D2%2C%2Emy%2Dmd%2D2%7Bmargin%2Dtop%3A%2E5rem%21important%7D%2Emr%2Dmd%2D2%2C%2Emx%2Dmd%2D2%7Bmargin%2Dright%3A%2E5rem%21important%7D%2Emb%2Dmd%2D2%2C%2Emy%2Dmd%2D2%7Bmargin%2Dbottom%3A%2E5rem%21important%7D%2Eml%2Dmd%2D2%2C%2Emx%2Dmd%2D2%7Bmargin%2Dleft%3A%2E5rem%21important%7D%2Em%2Dmd%2D3%7Bmargin%3A1rem%21important%7D%2Emt%2Dmd%2D3%2C%2Emy%2Dmd%2D3%7Bmargin%2Dtop%3A1rem%21important%7D%2Emr%2Dmd%2D3%2C%2Emx%2Dmd%2D3%7Bmargin%2Dright%3A1rem%21important%7D%2Emb%2Dmd%2D3%2C%2Emy%2Dmd%2D3%7Bmargin%2Dbottom%3A1rem%21important%7D%2Eml%2Dmd%2D3%2C%2Emx%2Dmd%2D3%7Bmargin%2Dleft%3A1rem%21important%7D%2Em%2Dmd%2D4%7Bmargin%3A1%2E5rem%21important%7D%2Emt%2Dmd%2D4%2C%2Emy%2Dmd%2D4%7Bmargin%2Dtop%3A1%2E5rem%21important%7D%2Emr%2Dmd%2D4%2C%2Emx%2Dmd%2D4%7Bmargin%2Dright%3A1%2E5rem%21important%7D%2Emb%2Dmd%2D4%2C%2Emy%2Dmd%2D4%7Bmargin%2Dbottom%3A1%2E5rem%21important%7D%2Eml%2Dmd%2D4%2C%2Emx%2Dmd%2D4%7Bmargin%2Dleft%3A1%2E5rem%21important%7D%2Em%2Dmd%2D5%7Bmargin%3A3rem%21important%7D%2Emt%2Dmd%2D5%2C%2Emy%2Dmd%2D5%7Bmargin%2Dtop%3A3rem%21important%7D%2Emr%2Dmd%2D5%2C%2Emx%2Dmd%2D5%7Bmargin%2Dright%3A3rem%21important%7D%2Emb%2Dmd%2D5%2C%2Emy%2Dmd%2D5%7Bmargin%2Dbottom%3A3rem%21important%7D%2Eml%2Dmd%2D5%2C%2Emx%2Dmd%2D5%7Bmargin%2Dleft%3A3rem%21important%7D%2Ep%2Dmd%2D0%7Bpadding%3A0%21important%7D%2Ept%2Dmd%2D0%2C%2Epy%2Dmd%2D0%7Bpadding%2Dtop%3A0%21important%7D%2Epr%2Dmd%2D0%2C%2Epx%2Dmd%2D0%7Bpadding%2Dright%3A0%21important%7D%2Epb%2Dmd%2D0%2C%2Epy%2Dmd%2D0%7Bpadding%2Dbottom%3A0%21important%7D%2Epl%2Dmd%2D0%2C%2Epx%2Dmd%2D0%7Bpadding%2Dleft%3A0%21important%7D%2Ep%2Dmd%2D1%7Bpadding%3A%2E25rem%21important%7D%2Ept%2Dmd%2D1%2C%2Epy%2Dmd%2D1%7Bpadding%2Dtop%3A%2E25rem%21important%7D%2Epr%2Dmd%2D1%2C%2Epx%2Dmd%2D1%7Bpadding%2Dright%3A%2E25rem%21important%7D%2Epb%2Dmd%2D1%2C%2Epy%2Dmd%2D1%7Bpadding%2Dbottom%3A%2E25rem%21important%7D%2Epl%2Dmd%2D1%2C%2Epx%2Dmd%2D1%7Bpadding%2Dleft%3A%2E25rem%21important%7D%2Ep%2Dmd%2D2%7Bpadding%3A%2E5rem%21important%7D%2Ept%2Dmd%2D2%2C%2Epy%2Dmd%2D2%7Bpadding%2Dtop%3A%2E5rem%21important%7D%2Epr%2Dmd%2D2%2C%2Epx%2Dmd%2D2%7Bpadding%2Dright%3A%2E5rem%21important%7D%2Epb%2Dmd%2D2%2C%2Epy%2Dmd%2D2%7Bpadding%2Dbottom%3A%2E5rem%21important%7D%2Epl%2Dmd%2D2%2C%2Epx%2Dmd%2D2%7Bpadding%2Dleft%3A%2E5rem%21important%7D%2Ep%2Dmd%2D3%7Bpadding%3A1rem%21important%7D%2Ept%2Dmd%2D3%2C%2Epy%2Dmd%2D3%7Bpadding%2Dtop%3A1rem%21important%7D%2Epr%2Dmd%2D3%2C%2Epx%2Dmd%2D3%7Bpadding%2Dright%3A1rem%21important%7D%2Epb%2Dmd%2D3%2C%2Epy%2Dmd%2D3%7Bpadding%2Dbottom%3A1rem%21important%7D%2Epl%2Dmd%2D3%2C%2Epx%2Dmd%2D3%7Bpadding%2Dleft%3A1rem%21important%7D%2Ep%2Dmd%2D4%7Bpadding%3A1%2E5rem%21important%7D%2Ept%2Dmd%2D4%2C%2Epy%2Dmd%2D4%7Bpadding%2Dtop%3A1%2E5rem%21important%7D%2Epr%2Dmd%2D4%2C%2Epx%2Dmd%2D4%7Bpadding%2Dright%3A1%2E5rem%21important%7D%2Epb%2Dmd%2D4%2C%2Epy%2Dmd%2D4%7Bpadding%2Dbottom%3A1%2E5rem%21important%7D%2Epl%2Dmd%2D4%2C%2Epx%2Dmd%2D4%7Bpadding%2Dleft%3A1%2E5rem%21important%7D%2Ep%2Dmd%2D5%7Bpadding%3A3rem%21important%7D%2Ept%2Dmd%2D5%2C%2Epy%2Dmd%2D5%7Bpadding%2Dtop%3A3rem%21important%7D%2Epr%2Dmd%2D5%2C%2Epx%2Dmd%2D5%7Bpadding%2Dright%3A3rem%21important%7D%2Epb%2Dmd%2D5%2C%2Epy%2Dmd%2D5%7Bpadding%2Dbottom%3A3rem%21important%7D%2Epl%2Dmd%2D5%2C%2Epx%2Dmd%2D5%7Bpadding%2Dleft%3A3rem%21important%7D%2Em%2Dmd%2Dn1%7Bmargin%3A%2D%2E25rem%21important%7D%2Emt%2Dmd%2Dn1%2C%2Emy%2Dmd%2Dn1%7Bmargin%2Dtop%3A%2D%2E25rem%21important%7D%2Emr%2Dmd%2Dn1%2C%2Emx%2Dmd%2Dn1%7Bmargin%2Dright%3A%2D%2E25rem%21important%7D%2Emb%2Dmd%2Dn1%2C%2Emy%2Dmd%2Dn1%7Bmargin%2Dbottom%3A%2D%2E25rem%21important%7D%2Eml%2Dmd%2Dn1%2C%2Emx%2Dmd%2Dn1%7Bmargin%2Dleft%3A%2D%2E25rem%21important%7D%2Em%2Dmd%2Dn2%7Bmargin%3A%2D%2E5rem%21important%7D%2Emt%2Dmd%2Dn2%2C%2Emy%2Dmd%2Dn2%7Bmargin%2Dtop%3A%2D%2E5rem%21important%7D%2Emr%2Dmd%2Dn2%2C%2Emx%2Dmd%2Dn2%7Bmargin%2Dright%3A%2D%2E5rem%21important%7D%2Emb%2Dmd%2Dn2%2C%2Emy%2Dmd%2Dn2%7Bmargin%2Dbottom%3A%2D%2E5rem%21important%7D%2Eml%2Dmd%2Dn2%2C%2Emx%2Dmd%2Dn2%7Bmargin%2Dleft%3A%2D%2E5rem%21important%7D%2Em%2Dmd%2Dn3%7Bmargin%3A%2D1rem%21important%7D%2Emt%2Dmd%2Dn3%2C%2Emy%2Dmd%2Dn3%7Bmargin%2Dtop%3A%2D1rem%21important%7D%2Emr%2Dmd%2Dn3%2C%2Emx%2Dmd%2Dn3%7Bmargin%2Dright%3A%2D1rem%21important%7D%2Emb%2Dmd%2Dn3%2C%2Emy%2Dmd%2Dn3%7Bmargin%2Dbottom%3A%2D1rem%21important%7D%2Eml%2Dmd%2Dn3%2C%2Emx%2Dmd%2Dn3%7Bmargin%2Dleft%3A%2D1rem%21important%7D%2Em%2Dmd%2Dn4%7Bmargin%3A%2D1%2E5rem%21important%7D%2Emt%2Dmd%2Dn4%2C%2Emy%2Dmd%2Dn4%7Bmargin%2Dtop%3A%2D1%2E5rem%21important%7D%2Emr%2Dmd%2Dn4%2C%2Emx%2Dmd%2Dn4%7Bmargin%2Dright%3A%2D1%2E5rem%21important%7D%2Emb%2Dmd%2Dn4%2C%2Emy%2Dmd%2Dn4%7Bmargin%2Dbottom%3A%2D1%2E5rem%21important%7D%2Eml%2Dmd%2Dn4%2C%2Emx%2Dmd%2Dn4%7Bmargin%2Dleft%3A%2D1%2E5rem%21important%7D%2Em%2Dmd%2Dn5%7Bmargin%3A%2D3rem%21important%7D%2Emt%2Dmd%2Dn5%2C%2Emy%2Dmd%2Dn5%7Bmargin%2Dtop%3A%2D3rem%21important%7D%2Emr%2Dmd%2Dn5%2C%2Emx%2Dmd%2Dn5%7Bmargin%2Dright%3A%2D3rem%21important%7D%2Emb%2Dmd%2Dn5%2C%2Emy%2Dmd%2Dn5%7Bmargin%2Dbottom%3A%2D3rem%21important%7D%2Eml%2Dmd%2Dn5%2C%2Emx%2Dmd%2Dn5%7Bmargin%2Dleft%3A%2D3rem%21important%7D%2Em%2Dmd%2Dauto%7Bmargin%3Aauto%21important%7D%2Emt%2Dmd%2Dauto%2C%2Emy%2Dmd%2Dauto%7Bmargin%2Dtop%3Aauto%21important%7D%2Emr%2Dmd%2Dauto%2C%2Emx%2Dmd%2Dauto%7Bmargin%2Dright%3Aauto%21important%7D%2Emb%2Dmd%2Dauto%2C%2Emy%2Dmd%2Dauto%7Bmargin%2Dbottom%3Aauto%21important%7D%2Eml%2Dmd%2Dauto%2C%2Emx%2Dmd%2Dauto%7Bmargin%2Dleft%3Aauto%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Em%2Dlg%2D0%7Bmargin%3A0%21important%7D%2Emt%2Dlg%2D0%2C%2Emy%2Dlg%2D0%7Bmargin%2Dtop%3A0%21important%7D%2Emr%2Dlg%2D0%2C%2Emx%2Dlg%2D0%7Bmargin%2Dright%3A0%21important%7D%2Emb%2Dlg%2D0%2C%2Emy%2Dlg%2D0%7Bmargin%2Dbottom%3A0%21important%7D%2Eml%2Dlg%2D0%2C%2Emx%2Dlg%2D0%7Bmargin%2Dleft%3A0%21important%7D%2Em%2Dlg%2D1%7Bmargin%3A%2E25rem%21important%7D%2Emt%2Dlg%2D1%2C%2Emy%2Dlg%2D1%7Bmargin%2Dtop%3A%2E25rem%21important%7D%2Emr%2Dlg%2D1%2C%2Emx%2Dlg%2D1%7Bmargin%2Dright%3A%2E25rem%21important%7D%2Emb%2Dlg%2D1%2C%2Emy%2Dlg%2D1%7Bmargin%2Dbottom%3A%2E25rem%21important%7D%2Eml%2Dlg%2D1%2C%2Emx%2Dlg%2D1%7Bmargin%2Dleft%3A%2E25rem%21important%7D%2Em%2Dlg%2D2%7Bmargin%3A%2E5rem%21important%7D%2Emt%2Dlg%2D2%2C%2Emy%2Dlg%2D2%7Bmargin%2Dtop%3A%2E5rem%21important%7D%2Emr%2Dlg%2D2%2C%2Emx%2Dlg%2D2%7Bmargin%2Dright%3A%2E5rem%21important%7D%2Emb%2Dlg%2D2%2C%2Emy%2Dlg%2D2%7Bmargin%2Dbottom%3A%2E5rem%21important%7D%2Eml%2Dlg%2D2%2C%2Emx%2Dlg%2D2%7Bmargin%2Dleft%3A%2E5rem%21important%7D%2Em%2Dlg%2D3%7Bmargin%3A1rem%21important%7D%2Emt%2Dlg%2D3%2C%2Emy%2Dlg%2D3%7Bmargin%2Dtop%3A1rem%21important%7D%2Emr%2Dlg%2D3%2C%2Emx%2Dlg%2D3%7Bmargin%2Dright%3A1rem%21important%7D%2Emb%2Dlg%2D3%2C%2Emy%2Dlg%2D3%7Bmargin%2Dbottom%3A1rem%21important%7D%2Eml%2Dlg%2D3%2C%2Emx%2Dlg%2D3%7Bmargin%2Dleft%3A1rem%21important%7D%2Em%2Dlg%2D4%7Bmargin%3A1%2E5rem%21important%7D%2Emt%2Dlg%2D4%2C%2Emy%2Dlg%2D4%7Bmargin%2Dtop%3A1%2E5rem%21important%7D%2Emr%2Dlg%2D4%2C%2Emx%2Dlg%2D4%7Bmargin%2Dright%3A1%2E5rem%21important%7D%2Emb%2Dlg%2D4%2C%2Emy%2Dlg%2D4%7Bmargin%2Dbottom%3A1%2E5rem%21important%7D%2Eml%2Dlg%2D4%2C%2Emx%2Dlg%2D4%7Bmargin%2Dleft%3A1%2E5rem%21important%7D%2Em%2Dlg%2D5%7Bmargin%3A3rem%21important%7D%2Emt%2Dlg%2D5%2C%2Emy%2Dlg%2D5%7Bmargin%2Dtop%3A3rem%21important%7D%2Emr%2Dlg%2D5%2C%2Emx%2Dlg%2D5%7Bmargin%2Dright%3A3rem%21important%7D%2Emb%2Dlg%2D5%2C%2Emy%2Dlg%2D5%7Bmargin%2Dbottom%3A3rem%21important%7D%2Eml%2Dlg%2D5%2C%2Emx%2Dlg%2D5%7Bmargin%2Dleft%3A3rem%21important%7D%2Ep%2Dlg%2D0%7Bpadding%3A0%21important%7D%2Ept%2Dlg%2D0%2C%2Epy%2Dlg%2D0%7Bpadding%2Dtop%3A0%21important%7D%2Epr%2Dlg%2D0%2C%2Epx%2Dlg%2D0%7Bpadding%2Dright%3A0%21important%7D%2Epb%2Dlg%2D0%2C%2Epy%2Dlg%2D0%7Bpadding%2Dbottom%3A0%21important%7D%2Epl%2Dlg%2D0%2C%2Epx%2Dlg%2D0%7Bpadding%2Dleft%3A0%21important%7D%2Ep%2Dlg%2D1%7Bpadding%3A%2E25rem%21important%7D%2Ept%2Dlg%2D1%2C%2Epy%2Dlg%2D1%7Bpadding%2Dtop%3A%2E25rem%21important%7D%2Epr%2Dlg%2D1%2C%2Epx%2Dlg%2D1%7Bpadding%2Dright%3A%2E25rem%21important%7D%2Epb%2Dlg%2D1%2C%2Epy%2Dlg%2D1%7Bpadding%2Dbottom%3A%2E25rem%21important%7D%2Epl%2Dlg%2D1%2C%2Epx%2Dlg%2D1%7Bpadding%2Dleft%3A%2E25rem%21important%7D%2Ep%2Dlg%2D2%7Bpadding%3A%2E5rem%21important%7D%2Ept%2Dlg%2D2%2C%2Epy%2Dlg%2D2%7Bpadding%2Dtop%3A%2E5rem%21important%7D%2Epr%2Dlg%2D2%2C%2Epx%2Dlg%2D2%7Bpadding%2Dright%3A%2E5rem%21important%7D%2Epb%2Dlg%2D2%2C%2Epy%2Dlg%2D2%7Bpadding%2Dbottom%3A%2E5rem%21important%7D%2Epl%2Dlg%2D2%2C%2Epx%2Dlg%2D2%7Bpadding%2Dleft%3A%2E5rem%21important%7D%2Ep%2Dlg%2D3%7Bpadding%3A1rem%21important%7D%2Ept%2Dlg%2D3%2C%2Epy%2Dlg%2D3%7Bpadding%2Dtop%3A1rem%21important%7D%2Epr%2Dlg%2D3%2C%2Epx%2Dlg%2D3%7Bpadding%2Dright%3A1rem%21important%7D%2Epb%2Dlg%2D3%2C%2Epy%2Dlg%2D3%7Bpadding%2Dbottom%3A1rem%21important%7D%2Epl%2Dlg%2D3%2C%2Epx%2Dlg%2D3%7Bpadding%2Dleft%3A1rem%21important%7D%2Ep%2Dlg%2D4%7Bpadding%3A1%2E5rem%21important%7D%2Ept%2Dlg%2D4%2C%2Epy%2Dlg%2D4%7Bpadding%2Dtop%3A1%2E5rem%21important%7D%2Epr%2Dlg%2D4%2C%2Epx%2Dlg%2D4%7Bpadding%2Dright%3A1%2E5rem%21important%7D%2Epb%2Dlg%2D4%2C%2Epy%2Dlg%2D4%7Bpadding%2Dbottom%3A1%2E5rem%21important%7D%2Epl%2Dlg%2D4%2C%2Epx%2Dlg%2D4%7Bpadding%2Dleft%3A1%2E5rem%21important%7D%2Ep%2Dlg%2D5%7Bpadding%3A3rem%21important%7D%2Ept%2Dlg%2D5%2C%2Epy%2Dlg%2D5%7Bpadding%2Dtop%3A3rem%21important%7D%2Epr%2Dlg%2D5%2C%2Epx%2Dlg%2D5%7Bpadding%2Dright%3A3rem%21important%7D%2Epb%2Dlg%2D5%2C%2Epy%2Dlg%2D5%7Bpadding%2Dbottom%3A3rem%21important%7D%2Epl%2Dlg%2D5%2C%2Epx%2Dlg%2D5%7Bpadding%2Dleft%3A3rem%21important%7D%2Em%2Dlg%2Dn1%7Bmargin%3A%2D%2E25rem%21important%7D%2Emt%2Dlg%2Dn1%2C%2Emy%2Dlg%2Dn1%7Bmargin%2Dtop%3A%2D%2E25rem%21important%7D%2Emr%2Dlg%2Dn1%2C%2Emx%2Dlg%2Dn1%7Bmargin%2Dright%3A%2D%2E25rem%21important%7D%2Emb%2Dlg%2Dn1%2C%2Emy%2Dlg%2Dn1%7Bmargin%2Dbottom%3A%2D%2E25rem%21important%7D%2Eml%2Dlg%2Dn1%2C%2Emx%2Dlg%2Dn1%7Bmargin%2Dleft%3A%2D%2E25rem%21important%7D%2Em%2Dlg%2Dn2%7Bmargin%3A%2D%2E5rem%21important%7D%2Emt%2Dlg%2Dn2%2C%2Emy%2Dlg%2Dn2%7Bmargin%2Dtop%3A%2D%2E5rem%21important%7D%2Emr%2Dlg%2Dn2%2C%2Emx%2Dlg%2Dn2%7Bmargin%2Dright%3A%2D%2E5rem%21important%7D%2Emb%2Dlg%2Dn2%2C%2Emy%2Dlg%2Dn2%7Bmargin%2Dbottom%3A%2D%2E5rem%21important%7D%2Eml%2Dlg%2Dn2%2C%2Emx%2Dlg%2Dn2%7Bmargin%2Dleft%3A%2D%2E5rem%21important%7D%2Em%2Dlg%2Dn3%7Bmargin%3A%2D1rem%21important%7D%2Emt%2Dlg%2Dn3%2C%2Emy%2Dlg%2Dn3%7Bmargin%2Dtop%3A%2D1rem%21important%7D%2Emr%2Dlg%2Dn3%2C%2Emx%2Dlg%2Dn3%7Bmargin%2Dright%3A%2D1rem%21important%7D%2Emb%2Dlg%2Dn3%2C%2Emy%2Dlg%2Dn3%7Bmargin%2Dbottom%3A%2D1rem%21important%7D%2Eml%2Dlg%2Dn3%2C%2Emx%2Dlg%2Dn3%7Bmargin%2Dleft%3A%2D1rem%21important%7D%2Em%2Dlg%2Dn4%7Bmargin%3A%2D1%2E5rem%21important%7D%2Emt%2Dlg%2Dn4%2C%2Emy%2Dlg%2Dn4%7Bmargin%2Dtop%3A%2D1%2E5rem%21important%7D%2Emr%2Dlg%2Dn4%2C%2Emx%2Dlg%2Dn4%7Bmargin%2Dright%3A%2D1%2E5rem%21important%7D%2Emb%2Dlg%2Dn4%2C%2Emy%2Dlg%2Dn4%7Bmargin%2Dbottom%3A%2D1%2E5rem%21important%7D%2Eml%2Dlg%2Dn4%2C%2Emx%2Dlg%2Dn4%7Bmargin%2Dleft%3A%2D1%2E5rem%21important%7D%2Em%2Dlg%2Dn5%7Bmargin%3A%2D3rem%21important%7D%2Emt%2Dlg%2Dn5%2C%2Emy%2Dlg%2Dn5%7Bmargin%2Dtop%3A%2D3rem%21important%7D%2Emr%2Dlg%2Dn5%2C%2Emx%2Dlg%2Dn5%7Bmargin%2Dright%3A%2D3rem%21important%7D%2Emb%2Dlg%2Dn5%2C%2Emy%2Dlg%2Dn5%7Bmargin%2Dbottom%3A%2D3rem%21important%7D%2Eml%2Dlg%2Dn5%2C%2Emx%2Dlg%2Dn5%7Bmargin%2Dleft%3A%2D3rem%21important%7D%2Em%2Dlg%2Dauto%7Bmargin%3Aauto%21important%7D%2Emt%2Dlg%2Dauto%2C%2Emy%2Dlg%2Dauto%7Bmargin%2Dtop%3Aauto%21important%7D%2Emr%2Dlg%2Dauto%2C%2Emx%2Dlg%2Dauto%7Bmargin%2Dright%3Aauto%21important%7D%2Emb%2Dlg%2Dauto%2C%2Emy%2Dlg%2Dauto%7Bmargin%2Dbottom%3Aauto%21important%7D%2Eml%2Dlg%2Dauto%2C%2Emx%2Dlg%2Dauto%7Bmargin%2Dleft%3Aauto%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Em%2Dxl%2D0%7Bmargin%3A0%21important%7D%2Emt%2Dxl%2D0%2C%2Emy%2Dxl%2D0%7Bmargin%2Dtop%3A0%21important%7D%2Emr%2Dxl%2D0%2C%2Emx%2Dxl%2D0%7Bmargin%2Dright%3A0%21important%7D%2Emb%2Dxl%2D0%2C%2Emy%2Dxl%2D0%7Bmargin%2Dbottom%3A0%21important%7D%2Eml%2Dxl%2D0%2C%2Emx%2Dxl%2D0%7Bmargin%2Dleft%3A0%21important%7D%2Em%2Dxl%2D1%7Bmargin%3A%2E25rem%21important%7D%2Emt%2Dxl%2D1%2C%2Emy%2Dxl%2D1%7Bmargin%2Dtop%3A%2E25rem%21important%7D%2Emr%2Dxl%2D1%2C%2Emx%2Dxl%2D1%7Bmargin%2Dright%3A%2E25rem%21important%7D%2Emb%2Dxl%2D1%2C%2Emy%2Dxl%2D1%7Bmargin%2Dbottom%3A%2E25rem%21important%7D%2Eml%2Dxl%2D1%2C%2Emx%2Dxl%2D1%7Bmargin%2Dleft%3A%2E25rem%21important%7D%2Em%2Dxl%2D2%7Bmargin%3A%2E5rem%21important%7D%2Emt%2Dxl%2D2%2C%2Emy%2Dxl%2D2%7Bmargin%2Dtop%3A%2E5rem%21important%7D%2Emr%2Dxl%2D2%2C%2Emx%2Dxl%2D2%7Bmargin%2Dright%3A%2E5rem%21important%7D%2Emb%2Dxl%2D2%2C%2Emy%2Dxl%2D2%7Bmargin%2Dbottom%3A%2E5rem%21important%7D%2Eml%2Dxl%2D2%2C%2Emx%2Dxl%2D2%7Bmargin%2Dleft%3A%2E5rem%21important%7D%2Em%2Dxl%2D3%7Bmargin%3A1rem%21important%7D%2Emt%2Dxl%2D3%2C%2Emy%2Dxl%2D3%7Bmargin%2Dtop%3A1rem%21important%7D%2Emr%2Dxl%2D3%2C%2Emx%2Dxl%2D3%7Bmargin%2Dright%3A1rem%21important%7D%2Emb%2Dxl%2D3%2C%2Emy%2Dxl%2D3%7Bmargin%2Dbottom%3A1rem%21important%7D%2Eml%2Dxl%2D3%2C%2Emx%2Dxl%2D3%7Bmargin%2Dleft%3A1rem%21important%7D%2Em%2Dxl%2D4%7Bmargin%3A1%2E5rem%21important%7D%2Emt%2Dxl%2D4%2C%2Emy%2Dxl%2D4%7Bmargin%2Dtop%3A1%2E5rem%21important%7D%2Emr%2Dxl%2D4%2C%2Emx%2Dxl%2D4%7Bmargin%2Dright%3A1%2E5rem%21important%7D%2Emb%2Dxl%2D4%2C%2Emy%2Dxl%2D4%7Bmargin%2Dbottom%3A1%2E5rem%21important%7D%2Eml%2Dxl%2D4%2C%2Emx%2Dxl%2D4%7Bmargin%2Dleft%3A1%2E5rem%21important%7D%2Em%2Dxl%2D5%7Bmargin%3A3rem%21important%7D%2Emt%2Dxl%2D5%2C%2Emy%2Dxl%2D5%7Bmargin%2Dtop%3A3rem%21important%7D%2Emr%2Dxl%2D5%2C%2Emx%2Dxl%2D5%7Bmargin%2Dright%3A3rem%21important%7D%2Emb%2Dxl%2D5%2C%2Emy%2Dxl%2D5%7Bmargin%2Dbottom%3A3rem%21important%7D%2Eml%2Dxl%2D5%2C%2Emx%2Dxl%2D5%7Bmargin%2Dleft%3A3rem%21important%7D%2Ep%2Dxl%2D0%7Bpadding%3A0%21important%7D%2Ept%2Dxl%2D0%2C%2Epy%2Dxl%2D0%7Bpadding%2Dtop%3A0%21important%7D%2Epr%2Dxl%2D0%2C%2Epx%2Dxl%2D0%7Bpadding%2Dright%3A0%21important%7D%2Epb%2Dxl%2D0%2C%2Epy%2Dxl%2D0%7Bpadding%2Dbottom%3A0%21important%7D%2Epl%2Dxl%2D0%2C%2Epx%2Dxl%2D0%7Bpadding%2Dleft%3A0%21important%7D%2Ep%2Dxl%2D1%7Bpadding%3A%2E25rem%21important%7D%2Ept%2Dxl%2D1%2C%2Epy%2Dxl%2D1%7Bpadding%2Dtop%3A%2E25rem%21important%7D%2Epr%2Dxl%2D1%2C%2Epx%2Dxl%2D1%7Bpadding%2Dright%3A%2E25rem%21important%7D%2Epb%2Dxl%2D1%2C%2Epy%2Dxl%2D1%7Bpadding%2Dbottom%3A%2E25rem%21important%7D%2Epl%2Dxl%2D1%2C%2Epx%2Dxl%2D1%7Bpadding%2Dleft%3A%2E25rem%21important%7D%2Ep%2Dxl%2D2%7Bpadding%3A%2E5rem%21important%7D%2Ept%2Dxl%2D2%2C%2Epy%2Dxl%2D2%7Bpadding%2Dtop%3A%2E5rem%21important%7D%2Epr%2Dxl%2D2%2C%2Epx%2Dxl%2D2%7Bpadding%2Dright%3A%2E5rem%21important%7D%2Epb%2Dxl%2D2%2C%2Epy%2Dxl%2D2%7Bpadding%2Dbottom%3A%2E5rem%21important%7D%2Epl%2Dxl%2D2%2C%2Epx%2Dxl%2D2%7Bpadding%2Dleft%3A%2E5rem%21important%7D%2Ep%2Dxl%2D3%7Bpadding%3A1rem%21important%7D%2Ept%2Dxl%2D3%2C%2Epy%2Dxl%2D3%7Bpadding%2Dtop%3A1rem%21important%7D%2Epr%2Dxl%2D3%2C%2Epx%2Dxl%2D3%7Bpadding%2Dright%3A1rem%21important%7D%2Epb%2Dxl%2D3%2C%2Epy%2Dxl%2D3%7Bpadding%2Dbottom%3A1rem%21important%7D%2Epl%2Dxl%2D3%2C%2Epx%2Dxl%2D3%7Bpadding%2Dleft%3A1rem%21important%7D%2Ep%2Dxl%2D4%7Bpadding%3A1%2E5rem%21important%7D%2Ept%2Dxl%2D4%2C%2Epy%2Dxl%2D4%7Bpadding%2Dtop%3A1%2E5rem%21important%7D%2Epr%2Dxl%2D4%2C%2Epx%2Dxl%2D4%7Bpadding%2Dright%3A1%2E5rem%21important%7D%2Epb%2Dxl%2D4%2C%2Epy%2Dxl%2D4%7Bpadding%2Dbottom%3A1%2E5rem%21important%7D%2Epl%2Dxl%2D4%2C%2Epx%2Dxl%2D4%7Bpadding%2Dleft%3A1%2E5rem%21important%7D%2Ep%2Dxl%2D5%7Bpadding%3A3rem%21important%7D%2Ept%2Dxl%2D5%2C%2Epy%2Dxl%2D5%7Bpadding%2Dtop%3A3rem%21important%7D%2Epr%2Dxl%2D5%2C%2Epx%2Dxl%2D5%7Bpadding%2Dright%3A3rem%21important%7D%2Epb%2Dxl%2D5%2C%2Epy%2Dxl%2D5%7Bpadding%2Dbottom%3A3rem%21important%7D%2Epl%2Dxl%2D5%2C%2Epx%2Dxl%2D5%7Bpadding%2Dleft%3A3rem%21important%7D%2Em%2Dxl%2Dn1%7Bmargin%3A%2D%2E25rem%21important%7D%2Emt%2Dxl%2Dn1%2C%2Emy%2Dxl%2Dn1%7Bmargin%2Dtop%3A%2D%2E25rem%21important%7D%2Emr%2Dxl%2Dn1%2C%2Emx%2Dxl%2Dn1%7Bmargin%2Dright%3A%2D%2E25rem%21important%7D%2Emb%2Dxl%2Dn1%2C%2Emy%2Dxl%2Dn1%7Bmargin%2Dbottom%3A%2D%2E25rem%21important%7D%2Eml%2Dxl%2Dn1%2C%2Emx%2Dxl%2Dn1%7Bmargin%2Dleft%3A%2D%2E25rem%21important%7D%2Em%2Dxl%2Dn2%7Bmargin%3A%2D%2E5rem%21important%7D%2Emt%2Dxl%2Dn2%2C%2Emy%2Dxl%2Dn2%7Bmargin%2Dtop%3A%2D%2E5rem%21important%7D%2Emr%2Dxl%2Dn2%2C%2Emx%2Dxl%2Dn2%7Bmargin%2Dright%3A%2D%2E5rem%21important%7D%2Emb%2Dxl%2Dn2%2C%2Emy%2Dxl%2Dn2%7Bmargin%2Dbottom%3A%2D%2E5rem%21important%7D%2Eml%2Dxl%2Dn2%2C%2Emx%2Dxl%2Dn2%7Bmargin%2Dleft%3A%2D%2E5rem%21important%7D%2Em%2Dxl%2Dn3%7Bmargin%3A%2D1rem%21important%7D%2Emt%2Dxl%2Dn3%2C%2Emy%2Dxl%2Dn3%7Bmargin%2Dtop%3A%2D1rem%21important%7D%2Emr%2Dxl%2Dn3%2C%2Emx%2Dxl%2Dn3%7Bmargin%2Dright%3A%2D1rem%21important%7D%2Emb%2Dxl%2Dn3%2C%2Emy%2Dxl%2Dn3%7Bmargin%2Dbottom%3A%2D1rem%21important%7D%2Eml%2Dxl%2Dn3%2C%2Emx%2Dxl%2Dn3%7Bmargin%2Dleft%3A%2D1rem%21important%7D%2Em%2Dxl%2Dn4%7Bmargin%3A%2D1%2E5rem%21important%7D%2Emt%2Dxl%2Dn4%2C%2Emy%2Dxl%2Dn4%7Bmargin%2Dtop%3A%2D1%2E5rem%21important%7D%2Emr%2Dxl%2Dn4%2C%2Emx%2Dxl%2Dn4%7Bmargin%2Dright%3A%2D1%2E5rem%21important%7D%2Emb%2Dxl%2Dn4%2C%2Emy%2Dxl%2Dn4%7Bmargin%2Dbottom%3A%2D1%2E5rem%21important%7D%2Eml%2Dxl%2Dn4%2C%2Emx%2Dxl%2Dn4%7Bmargin%2Dleft%3A%2D1%2E5rem%21important%7D%2Em%2Dxl%2Dn5%7Bmargin%3A%2D3rem%21important%7D%2Emt%2Dxl%2Dn5%2C%2Emy%2Dxl%2Dn5%7Bmargin%2Dtop%3A%2D3rem%21important%7D%2Emr%2Dxl%2Dn5%2C%2Emx%2Dxl%2Dn5%7Bmargin%2Dright%3A%2D3rem%21important%7D%2Emb%2Dxl%2Dn5%2C%2Emy%2Dxl%2Dn5%7Bmargin%2Dbottom%3A%2D3rem%21important%7D%2Eml%2Dxl%2Dn5%2C%2Emx%2Dxl%2Dn5%7Bmargin%2Dleft%3A%2D3rem%21important%7D%2Em%2Dxl%2Dauto%7Bmargin%3Aauto%21important%7D%2Emt%2Dxl%2Dauto%2C%2Emy%2Dxl%2Dauto%7Bmargin%2Dtop%3Aauto%21important%7D%2Emr%2Dxl%2Dauto%2C%2Emx%2Dxl%2Dauto%7Bmargin%2Dright%3Aauto%21important%7D%2Emb%2Dxl%2Dauto%2C%2Emy%2Dxl%2Dauto%7Bmargin%2Dbottom%3Aauto%21important%7D%2Eml%2Dxl%2Dauto%2C%2Emx%2Dxl%2Dauto%7Bmargin%2Dleft%3Aauto%21important%7D%7D%2Estretched%2Dlink%3A%3Aafter%7Bposition%3Aabsolute%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bz%2Dindex%3A1%3Bpointer%2Devents%3Aauto%3Bcontent%3A%22%22%3Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C0%29%7D%2Etext%2Dmonospace%7Bfont%2Dfamily%3ASFMono%2DRegular%2CMenlo%2CMonaco%2CConsolas%2C%22Liberation%20Mono%22%2C%22Courier%20New%22%2Cmonospace%21important%7D%2Etext%2Djustify%7Btext%2Dalign%3Ajustify%21important%7D%2Etext%2Dwrap%7Bwhite%2Dspace%3Anormal%21important%7D%2Etext%2Dnowrap%7Bwhite%2Dspace%3Anowrap%21important%7D%2Etext%2Dtruncate%7Boverflow%3Ahidden%3Btext%2Doverflow%3Aellipsis%3Bwhite%2Dspace%3Anowrap%7D%2Etext%2Dleft%7Btext%2Dalign%3Aleft%21important%7D%2Etext%2Dright%7Btext%2Dalign%3Aright%21important%7D%2Etext%2Dcenter%7Btext%2Dalign%3Acenter%21important%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Etext%2Dsm%2Dleft%7Btext%2Dalign%3Aleft%21important%7D%2Etext%2Dsm%2Dright%7Btext%2Dalign%3Aright%21important%7D%2Etext%2Dsm%2Dcenter%7Btext%2Dalign%3Acenter%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Etext%2Dmd%2Dleft%7Btext%2Dalign%3Aleft%21important%7D%2Etext%2Dmd%2Dright%7Btext%2Dalign%3Aright%21important%7D%2Etext%2Dmd%2Dcenter%7Btext%2Dalign%3Acenter%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Etext%2Dlg%2Dleft%7Btext%2Dalign%3Aleft%21important%7D%2Etext%2Dlg%2Dright%7Btext%2Dalign%3Aright%21important%7D%2Etext%2Dlg%2Dcenter%7Btext%2Dalign%3Acenter%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Etext%2Dxl%2Dleft%7Btext%2Dalign%3Aleft%21important%7D%2Etext%2Dxl%2Dright%7Btext%2Dalign%3Aright%21important%7D%2Etext%2Dxl%2Dcenter%7Btext%2Dalign%3Acenter%21important%7D%7D%2Etext%2Dlowercase%7Btext%2Dtransform%3Alowercase%21important%7D%2Etext%2Duppercase%7Btext%2Dtransform%3Auppercase%21important%7D%2Etext%2Dcapitalize%7Btext%2Dtransform%3Acapitalize%21important%7D%2Efont%2Dweight%2Dlight%7Bfont%2Dweight%3A300%21important%7D%2Efont%2Dweight%2Dlighter%7Bfont%2Dweight%3Alighter%21important%7D%2Efont%2Dweight%2Dnormal%7Bfont%2Dweight%3A400%21important%7D%2Efont%2Dweight%2Dbold%7Bfont%2Dweight%3A700%21important%7D%2Efont%2Dweight%2Dbolder%7Bfont%2Dweight%3Abolder%21important%7D%2Efont%2Ditalic%7Bfont%2Dstyle%3Aitalic%21important%7D%2Etext%2Dwhite%7Bcolor%3A%23fff%21important%7D%2Etext%2Dprimary%7Bcolor%3A%23007bff%21important%7Da%2Etext%2Dprimary%3Afocus%2Ca%2Etext%2Dprimary%3Ahover%7Bcolor%3A%230056b3%21important%7D%2Etext%2Dsecondary%7Bcolor%3A%236c757d%21important%7Da%2Etext%2Dsecondary%3Afocus%2Ca%2Etext%2Dsecondary%3Ahover%7Bcolor%3A%23494f54%21important%7D%2Etext%2Dsuccess%7Bcolor%3A%2328a745%21important%7Da%2Etext%2Dsuccess%3Afocus%2Ca%2Etext%2Dsuccess%3Ahover%7Bcolor%3A%2319692c%21important%7D%2Etext%2Dinfo%7Bcolor%3A%2317a2b8%21important%7Da%2Etext%2Dinfo%3Afocus%2Ca%2Etext%2Dinfo%3Ahover%7Bcolor%3A%230f6674%21important%7D%2Etext%2Dwarning%7Bcolor%3A%23ffc107%21important%7Da%2Etext%2Dwarning%3Afocus%2Ca%2Etext%2Dwarning%3Ahover%7Bcolor%3A%23ba8b00%21important%7D%2Etext%2Ddanger%7Bcolor%3A%23dc3545%21important%7Da%2Etext%2Ddanger%3Afocus%2Ca%2Etext%2Ddanger%3Ahover%7Bcolor%3A%23a71d2a%21important%7D%2Etext%2Dlight%7Bcolor%3A%23f8f9fa%21important%7Da%2Etext%2Dlight%3Afocus%2Ca%2Etext%2Dlight%3Ahover%7Bcolor%3A%23cbd3da%21important%7D%2Etext%2Ddark%7Bcolor%3A%23343a40%21important%7Da%2Etext%2Ddark%3Afocus%2Ca%2Etext%2Ddark%3Ahover%7Bcolor%3A%23121416%21important%7D%2Etext%2Dbody%7Bcolor%3A%23212529%21important%7D%2Etext%2Dmuted%7Bcolor%3A%236c757d%21important%7D%2Etext%2Dblack%2D50%7Bcolor%3Argba%280%2C0%2C0%2C%2E5%29%21important%7D%2Etext%2Dwhite%2D50%7Bcolor%3Argba%28255%2C255%2C255%2C%2E5%29%21important%7D%2Etext%2Dhide%7Bfont%3A0%2F0%20a%3Bcolor%3Atransparent%3Btext%2Dshadow%3Anone%3Bbackground%2Dcolor%3Atransparent%3Bborder%3A0%7D%2Etext%2Ddecoration%2Dnone%7Btext%2Ddecoration%3Anone%21important%7D%2Etext%2Dbreak%7Bword%2Dwrap%3Abreak%2Dword%21important%7D%2Etext%2Dreset%7Bcolor%3Ainherit%21important%7D%2Evisible%7Bvisibility%3Avisible%21important%7D%2Einvisible%7Bvisibility%3Ahidden%21important%7D%40media%20print%7B%2A%2C%3A%3Aafter%2C%3A%3Abefore%7Btext%2Dshadow%3Anone%21important%3Bbox%2Dshadow%3Anone%21important%7Da%3Anot%28%2Ebtn%29%7Btext%2Ddecoration%3Aunderline%7Dabbr%5Btitle%5D%3A%3Aafter%7Bcontent%3A%22%20%28%22%20attr%28title%29%20%22%29%22%7Dpre%7Bwhite%2Dspace%3Apre%2Dwrap%21important%7Dblockquote%2Cpre%7Bborder%3A1px%20solid%20%23adb5bd%3Bpage%2Dbreak%2Dinside%3Aavoid%7Dthead%7Bdisplay%3Atable%2Dheader%2Dgroup%7Dimg%2Ctr%7Bpage%2Dbreak%2Dinside%3Aavoid%7Dh2%2Ch3%2Cp%7Borphans%3A3%3Bwidows%3A3%7Dh2%2Ch3%7Bpage%2Dbreak%2Dafter%3Aavoid%7D%40page%7Bsize%3Aa3%7Dbody%7Bmin%2Dwidth%3A992px%21important%7D%2Econtainer%7Bmin%2Dwidth%3A992px%21important%7D%2Enavbar%7Bdisplay%3Anone%7D%2Ebadge%7Bborder%3A1px%20solid%20%23000%7D%2Etable%7Bborder%2Dcollapse%3Acollapse%21important%7D%2Etable%20td%2C%2Etable%20th%7Bbackground%2Dcolor%3A%23fff%21important%7D%2Etable%2Dbordered%20td%2C%2Etable%2Dbordered%20th%7Bborder%3A1px%20solid%20%23dee2e6%21important%7D%2Etable%2Ddark%7Bcolor%3Ainherit%7D%2Etable%2Ddark%20tbody%2Btbody%2C%2Etable%2Ddark%20td%2C%2Etable%2Ddark%20th%2C%2Etable%2Ddark%20thead%20th%7Bborder%2Dcolor%3A%23dee2e6%7D%2Etable%20%2Ethead%2Ddark%20th%7Bcolor%3Ainherit%3Bborder%2Dcolor%3A%23dee2e6%7D%7D%0A">

<link href="data:text/css; charset=utf-8;charset=utf-8,%40font%2Dface%20%7B%0Afont%2Dfamily%3A%20%27Roboto%20Slab%27%3B%0Afont%2Dstyle%3A%20normal%3B%0Afont%2Dweight%3A%20400%3B%0Afont%2Ddisplay%3A%20swap%3B%0Asrc%3A%20url%28data%3Afont%2Fttf%3Bbase64%2CAAEAAAAQAQAABAAAR0RFRr3btDQAARHQAAACJkdQT1Nhl44gAAET%2BAAAdKhHU1VCQvdNCAABiKAAAAQIT1MvMnQpgiYAAOh0AAAAYFNUQVR5k2zdAAGMqAAAAC5jbWFwx0xj1wAA6NQAAAjWZ2FzcAAAABAAARHIAAAACGdseWaQF4YZAAABDAAA0OhoZWFkHDdi%2FQAA2WwAAAA2aGhlYRDdBdgAAOhQAAAAJGhtdHgF9QAnAADZpAAADqxsb2NhflCyUQAA0hQAAAdYbWF4cAPLAPIAANH0AAAAIG5hbWU2HlR7AADxtAAAAlRwb3N01nIBdQAA9AgAAB3AcHJlcGgGjIUAAPGsAAAABwAEAGQAAAOqBbAAAwAHAAsADwAAMxEhESUhESEBATMBIQEzAWQDRvzwAtr9JgLA%2FR48AuL84gLiPP0eBbD6UDYFRPqaBYj6eAWI%2BngAAgBGAAAFtwWwAA8AFQAAMzU3ATMBFxUhNTcDIQMXFRMhAycjB0ZsAf2pAfRr%2Fl5uYP25Y24yAc7WDAYMfg8FI%2FrdD35%2BEwEM%2FvQTfgJCAlAhIQD%2F%2FwBGAAAFtwc%2BAiYAAQAAAAcDYwJhASb%2F%2FwBGAAAFtwc%2BAiYAAQAAAAcDaAGjASb%2F%2FwBGAAAFtwf1AiYAAQAAAAcDnQGjASb%2F%2FwBG%2FnIFtwc%2BAiYAAQAAACcDaAGjASYABwNxAm8AAP%2F%2FAEYAAAW3B%2FUCJgABAAAABwOeAaMBJv%2F%2FAEYAAAW3CEQCJgABAAAABwOfAaIBJv%2F%2FAEYAAAW3CDgCJgABAAAABwOgAaABJv%2F%2FAEYAAAW3Bz4CJgABAAAABwNmAacBJv%2F%2FAEYAAAW3B%2FUCJgABAAAABwOhAaQBJv%2F%2FAEb%2BcgW3Bz4CJgABAAAAJwNmAacBJgAHA3ECbwAA%2F%2F8ARgAABbcH9QImAAEAAAAHA6IBBwEm%2F%2F8ARgAABbcIMQImAAEAAAAHA6MBpQEm%2F%2F8ARgAABbcIOAImAAEAAAAHA6QBowEm%2F%2F8ARgAABbcHPgImAAEAAAAHA2ABnwEm%2F%2F8ARv5yBbcFsAImAAEAAAAHA3ECbwAA%2F%2F8ARgAABbcHPgImAAEAAAAHA2IBswEm%2F%2F8ARgAABbcHnQImAAEAAAAHA20CaQEm%2F%2F8ARgAABbcG%2FgImAAEAAAAHA2wBcQEm%2F%2F8ARv5QBgYFsAImAAEAAAAHA3YEUAAA%2F%2F8ARgAABbcHdwImAAEAAAAHA2kCCwEm%2F%2F8ARgAABbcH9QImAAEAAAAHA4kCEAEm%2F%2F8ARv4CBbcFsAImAAEAAAAHA3ICCAAA%2F%2F8ARgAABbcHTQImAAEAAAAHA2sBfwEmAAIAMwAAB94FsAAZAB4AADM1NwEhESMnIRMhFSETITczESE1NychBxcVEyEDJwczjQMZA8eoD%2F4EFAJO%2FbgWAgoQp%2FvenAj91HlSjgG%2BHwUIfhQFHv6%2Bp%2F4um%2F3yp%2F6%2FfhvF0g5%2BAhECxgIO%2F%2F8AMwAAB94HPgImABkAAAAHA2MD5QEmAAMAUQAABOUFsAAUAB4AJwAAMzU3ESc1MyEyBBUUBgceAhUUBCMlITI2NTQmJiMhNSEyNjU0JiMhUaOjowHR5AEBe2VYfkX%2B%2FN7%2BtgFKh5U3cVb%2BmAE%2FaoOUjP70fhwEexx%2FxcVhmSUSaZdayNOahXpWekKae2p2dQAAAQBQ%2F%2BsElgXFACQAAAUiJAI1NTQSJDMyFhcRIycuAiMiBgIVFRQSFjMyNjc3MxEGBgLj2%2F7bk5oBIMiN6k2dFSBTZTuPxmZt0ZZGhiwWmlLkFcABTtQV1gFNwFhE%2FsbmGSISk%2F7%2BqRe3%2Fv2IIhvL%2FsQzOf%2F%2FAFD%2F6wSWBz4CJgAcAAAABwNjAiUBJv%2F%2FAFD%2F6wSWBz4CJgAcAAAABwNnAWsBJv%2F%2FAFD%2BTQSWBcUCJgAcAAAABwN1AjcAAP%2F%2FAFD%2F6wSWBz4CJgAcAAAABwNmAWsBJv%2F%2FAFD%2F6wSWBz4CJgAcAAAABwNhAjYBJgACAFEAAAULBbAAEAAcAAAzNTcRJzUzITIEEhUVFAIEIyczMjY2NTU0JiYjI1Gjo6MBl8EBH6Ca%2FuXB3NKKxmtrxorSfhwEexx%2FuP6%2Bzx%2FK%2Fr27mpf9miGf%2B5IA%2F%2F8AUQAABQsFsAImACIAAAAGA3cp9v%2F%2FAFEAAAULBz4CJgAiAAAABwNnAUsBJv%2F%2FAFEAAAULBbACJgAiAAAABgN3KfYAAQBRAAAEpgWwABMAADM1NxEnNSERIychESEVIREhNzMRUaOjBDaeFv3mAhn95wI6Fp1%2BHAR7HH%2F%2Bosb%2BJpv98cn%2Bo%2F%2F%2FAFEAAASmBz4CJgAmAAAABwNjAewBJv%2F%2FAFEAAASmBz4CJgAmAAAABwNoAS4BJv%2F%2FAFEAAASmBz4CJgAmAAAABwNnATIBJv%2F%2FAFEAAASmBz4CJgAmAAAABwNmATIBJv%2F%2FAFEAAASmB%2FUCJgAmAAAABwOhAS8BJv%2F%2FAFH%2BcgSmBz4CJgAmAAAAJwNmATIBJgAHA3EB%2FQAA%2F%2F8AUQAABKYH9QImACYAAAAHA6IAkgEm%2F%2F8AUQAABKYIMQImACYAAAAHA6MBMAEm%2F%2F8AUQAABKYIOAImACYAAAAHA6QBLgEm%2F%2F8AUQAABKYHPgImACYAAAAHA2ABKgEm%2F%2F8AUQAABKYHPgImACYAAAAHA2EB%2FQEm%2F%2F8AUf5yBKYFsAImACYAAAAHA3EB%2FQAA%2F%2F8AUQAABKYHPgImACYAAAAHA2IBPgEm%2F%2F8AUQAABKYHnQImACYAAAAHA20B9AEm%2F%2F8AUQAABKYG%2FgImACYAAAAHA2wA%2FAEm%2F%2F8AUf5QBPUFsAImACYAAAAHA3YDPwAA%2F%2F8AUQAABKYHTQImACYAAAAHA2sBCgEmAAEAUQAABJgFsAARAAAzNTcRJzUhESMnIREhFSERFxVRo6MER54W%2FdUCFf3ro34cBHscf%2F6ixf4Im%2F4WHH4AAQBQ%2F%2BsEygXFACUAAAUiJAI1NTQSJDMyFhcRIycmJiMiBgIVFRQSFjMyNjcRJTUhEQYGAuLK%2FtigoQEYsqrtVKIVMY5hfch0a86TZIo1%2FukB3D%2FrFbsBTNoY3AFLuk5C%2FtrTICGQ%2Fv%2BsGq7%2B%2FY8jHAFWCpH9zDtiAP%2F%2FAFD%2F6wTKBz4CJgA5AAAABwNoAUIBJv%2F%2FAFD%2F6wTKBz4CJgA5AAAABwNmAUYBJv%2F%2FAFD95wTKBcUCJgA5AAAABwN0AegAAP%2F%2FAFD%2F6wTKBz4CJgA5AAAABwNhAhEBJgABAFEAAAXZBbAAHQAAMzU3ESc1IRUHESERJzU7AhUHERcVITU3ESERFxVRo6MCC6MCuKOjxaOjo%2F31o%2F1Io34cBHscf38c%2FgkB9xx%2Ffxz7hRx%2BfhwB6f4XHH4A%2F%2F8AUQAABdkFsAImAD4AAAAGA3g1AP%2F%2FAFEAAAXZBz4CJgA%2BAAAABwNmAboBJgABAFEAAAJcBbAACwAAMzU3ESc1IRUHERcVUaOjAgujo34cBHscf38c%2B4UcfgD%2F%2FwBR%2F%2BsG4gWwACYAQQAAAAcATgKWAAD%2F%2FwBRAAACfQc%2BAiYAQQAAAAcDYwC1ASb%2F%2FwAfAAACjQc%2BAiYAQQAAAAcDaP%2F3ASb%2F%2FwAjAAACiAc%2BAiYAQQAAAAcDZv%2F7ASb%2F%2FwAbAAACkQc%2BAiYAQQAAAAcDYP%2FzASb%2F%2FwBRAAACXAc%2BAiYAQQAAAAcDYQDGASb%2F%2FwBR%2FnICXAWwAiYAQQAAAAcDcQDGAAD%2F%2FwAvAAACXAc%2BAiYAQQAAAAcDYgAHASb%2F%2FwBRAAACXAedAiYAQQAAAAcDbQC9ASb%2F%2F%2F%2FtAAACvgb%2BAiYAQQAAAAcDbP%2FFASb%2F%2FwBR%2FlACqwWwAiYAQQAAAAcDdgD1AAD%2F%2F%2F%2F7AAACsAdNAiYAQQAAAAcDa%2F%2FTASYAAQA8%2F%2BsETAWwABcAAAUiJiYnNzMWFjMyNjY1ESc1IRUHERQGBgH3ecV3BgK9BH92U2ozwgIqo2PBFWDCkgaTikd9UQN4GoF%2FHPyIgsRsAP%2F%2FADz%2F6wR1Bz4CJgBOAAAABwNmAegBJgADAFEAAAWTBbAACAAUAB0AAAEnATcnNSEVBwE1NxEnNSEVBxEXFSE1NycBNwEXFQGraQKzBG0B04n7e6OjAgujowFReAH%2BbW4CDoYBpXoC%2FwUOf38Z%2Buh%2BHAR7HH9%2FHPuFHH5%2BDgECL5v9QBl%2B%2F%2F8AUf3nBZMFsAImAFAAAAAHA3QCNgAAAAEAUQAABGoFsAAPAAAzNTcRJzU7AhUHESE3MxFRo6OjxaOjAgMXl34cBHscf38c%2B4Lm%2FoMA%2F%2F8AUQAABGoHPgImAFIAAAAHA2MAwAEm%2F%2F8AUQAABHEFsAImAFIAAAAHA2UDT%2F%2BY%2F%2F8AUf3nBGoFsAImAFIAAAAHA3QBpAAA%2F%2F8AUQAABGoFsAImAFIAAAAHAucC8QJ2%2F%2F8AUQAABGoFsAImAFIAAAAGA4suAQABAF4AAAdgBbAAHgAAMzU3ESc1MyEBMwEhFQcRFxUhNTcREScBIwEHExEXFV6jo6MBBwHVBgHGAbejo%2F31rAX%2BJ4P%2BFwUHsH4cBHscf%2FuvBFF%2FHPuFHH5%2BHAGmAmMB%2B5AEbgH9n%2F5aHH7%2F%2FwBeAAAHYAc%2BAiYAWAAAAAcDYwM%2BASYAAQBTAAAF5QWwABcAADM1NxEnNTMzATcRJzUhMxUHESMBBxEXFVOjo6PHAsoGswFoo6O0%2FSMGs34cBHscf%2FuRAgPSHH9%2FHPrrBHUC%2FCccfv%2F%2FAFMAAAXlBz4CJgBaAAAABwNjAnsBJv%2F%2FAFMAAAXlBz4CJgBaAAAABwNnAcEBJv%2F%2FAFP95wXlBbACJgBaAAAABwN0AmMAAAABAEb%2BSwXYBbAAIgAAASImJzcWFjMyNjU1AQcRFxUhNTcRJzUhATcRJzUhFQcRFAYD7x80HQ4NRBE9RP1EBqP99aOjAWgCvAajAgujrP5LCQmWBQhnWlkEWAL8RBx%2BfhwEexx%2F%2B6gCA7scf38c%2BpKntf%2F%2FAFMAAAXlB00CJgBaAAAABwNrAZkBJgACAEb%2F6wUBBcUAFQAnAAAFIiYmAjU1NBI2NjMyFhYSFRUUAgYGJzI2EjU1NAImIyIGAhUVFBIWAqON4J1TU53gjZXimU5OmeKVkbNUVbSPg7ZeXrYVbMUBDqMVogEPxmxsxv7xohWj%2FvLFbKSQAQOrF6oBAZGS%2Fv%2BpF6r%2B%2FZEA%2F%2F8ARv%2FrBQEHPgImAGAAAAAHA2MCAwEm%2F%2F8ARv%2FrBQEHPgImAGAAAAAHA2gBRQEm%2F%2F8ARv%2FrBQEHPgImAGAAAAAHA2YBSQEm%2F%2F8ARv%2FrBQEH9QImAGAAAAAHA6EBRgEm%2F%2F8ARv5yBQEHPgImAGAAAAAnA2YBSQEmAAcDcQIUAAD%2F%2FwBG%2F%2BsFAQf1AiYAYAAAAAcDogCpASb%2F%2FwBG%2F%2BsFAQgxAiYAYAAAAAcDowFHASb%2F%2FwBG%2F%2BsFAQg4AiYAYAAAAAcDpAFFASb%2F%2FwBG%2F%2BsFAQc%2BAiYAYAAAAAcDYAFBASb%2F%2FwBG%2FnIFAQXFAiYAYAAAAAcDcQIUAAD%2F%2FwBG%2F%2BsFAQc%2BAiYAYAAAAAcDYgFVASb%2F%2FwBG%2F%2BsFAQedAiYAYAAAAAcDbQILASb%2F%2FwBG%2F%2BsFWwY5AiYAYAAAAAcDigOxAAD%2F%2FwBG%2F%2BsFWwc%2BAiYAYAAAACcDigOxAAAABwNjAgMBJv%2F%2FAEb%2BcgVbBjkCJgBgAAAAJwOKA7EAAAAHA3ECFAAA%2F%2F8ARv%2FrBVsHPgImAGAAAAAnA4oDsQAAAAcDYgFVASb%2F%2FwBG%2F%2BsFWwedAiYAYAAAACcDigOxAAAABwNtAgsBJv%2F%2FAEb%2F6wVbB00CJgBgAAAAJwOKA7EAAAAHA2sBIQEm%2F%2F8ARv%2FrBQEHPgImAGAAAAAHA2QBZAEm%2F%2F8ARv%2FrBQEG%2FgImAGAAAAAHA2wBEwEm%2F%2F8ARv%2BiBQEF7QImAGAAAAAGA4xTAP%2F%2FAEb%2FogUBBz4CJgBgAAAAJgOMUwAABwNjAgMBJv%2F%2FAEb%2F6wUBB00CJgBgAAAABwNrASEBJgACAEb%2F6wdPBcUAIQAzAAAFIiYmAjU1NBI2NjMyFhcVJiYjIgYCFRUUEhYzMjY3FQYGNzcRJyERIychESEVIREhNzMRAsua8KZVVaXwm1C2ZVK8XZXHY2PHlV67UmW2Nzc3A%2FKpEP3DAi390wJJEKgVbMUBDqMVogEPxmwfHc4wNZL%2B%2F6kXqv79kTMuyhwfFZoEe5v%2BosP%2BKZv998P%2BowAAAgBRAAAE2gWwABMAHAAAMzU3ESc1MyEyFhYVFAYGIyERFxUDITI2NTQmIyFRo6OjAfqc3HR03Jz%2By6OjATWUk5OU%2Fst%2BHAR7HH9txIOExGz%2BUhx%2BAuKfeXmiAAACAEYAAASmBbAAFQAgAAAzNTcRJzUhMxUHFSEyBBUUBCMhFRcVAyEyNjY1NCYmIyFGo6MBaKOjAQ3nAQT%2B%2FOf%2B86OjAQ1hg0JCg2H%2B834cBHscf38ciuy9vuufHH4B00h6S0x8SQACAEb%2FCwVEBcUAGQArAAAFAQYGIyImJgI1NTQSNjYzMhYWEhUVFAIHBSUyNhI1NTQCJiMiBgIVFRQSFgTV%2FqAyajeM4J1TU5zgjZTimU5egQEk%2FV6NtFdVtI%2BCtl9dtvUBAhASbMYBDqIVogEOx2xsx%2F7yohXF%2FsNiy%2FGQAQOrF6oBAZGS%2Fv%2BpF6r%2B%2FZEAAwBRAAAFBQWvABIAGAAhAAAzNTcRJzUhMhYWFRQGBgcFERcVIQE3ARcVASEyNjU0JiMhUaOjAomf23JvzIz%2BuqMBtv68xQENZfy0AQ2llpCX%2Ft9%2BHAR7HH5ftIKArlkDBv4QHH4C1wL9uhKBAyV%2BeXOGAP%2F%2FAFEAAAUFBz4CJgB8AAAABwNjAhQBJv%2F%2FAFEAAAUFBz4CJgB8AAAABwNnAVoBJv%2F%2FAFH95wUFBa8CJgB8AAAABwN0AfwAAAABAHP%2F6wRcBcUAMAAABSImJxEzFxYWMzI2NjU0JiYnLgI1NDY2MzIWFxEjJyYmIyIGBhUUFhYXFhYVFAYGAl6F9nCZIUGYWGSLSkCTf5bPa3nYkJnrTJkhLYZjVIBIQZN75u1%2B5RVOUQE35SgsPWxIQ2ZNHSN1p2xytGhdQv7d0CQwO2pIP15HHznfpHW1Zv%2F%2FAHP%2F6wRcBz4CJgCAAAAABwNjAboBJv%2F%2FAHP%2F6wRcBz4CJgCAAAAABwNnAQABJv%2F%2FAHP%2BTQRcBcUCJgCAAAAABwN1AcwAAP%2F%2FAHP%2F6wRcBz4CJgCAAAAABwNmAQABJv%2F%2FAHP95wRcBcUCJgCAAAAABwN0AaIAAAACAFH%2F6wVlBbAACwAmAAAzNTcRJzUhFSERFxUFIiYnNxYWMzI2NTQmIyM1ARcBJzYWFhUUBgZRo6MEvPysowFYOmogLiFKKHB%2Fk3yWAWas%2FqszfduIaMJ%2BHAR7HH%2BY%2B4IcfhUTCpsNEZ%2BMl6qaAdRH%2FlUkBGvZoY3LbQAAAgBO%2F%2BsFAQXFABoAJQAABSIkAjU1ITU0JiYjIgYHJzY2MzIEEhUVFAIEJzI2Njc1IRUUFhYCu8r%2B644D7mbNm3KiTzE0ypbPASednP75o3OoYAX82Fe7FZ8BKtBuNpjngy8liyNBqP7TyKPB%2FtOsmn3ajAMhisxvAAABAGAAAAUaBbAADwAAITU3ESEHIxEhESMnIREXFQG4o%2F62HZQEupIe%2FrajfhwEgcoBX%2F6hyvt%2FHH7%2F%2FwBgAAAFGgWwAiYAiAAAAAcDdwFp%2F%2FT%2F%2FwBgAAAFGgc%2BAiYAiAAAAAcDZwFkASb%2F%2FwBg%2Fk0FGgWwAiYAiAAAAAcDdQIwAAD%2F%2FwBg%2FecFGgWwAiYAiAAAAAcDdAIGAAAAAQBG%2F%2BsFrAWwAB0AAAUiJiY1ESc1IRUHERQWFjMyNjY1ESc1IRUHERQGBgLzluyIowILo1OUYWKXVaMCC6OF8BV225kDQBx%2Ffxz8wG2US0qUbgNAHH9%2FHPzAnttx%2F%2F8ARv%2FrBawHPgImAI0AAAAHA2MCWAEm%2F%2F8ARv%2FrBawHPgImAI0AAAAHA2gBmgEm%2F%2F8ARv%2FrBawHPgImAI0AAAAHA2YBngEm%2F%2F8ARv%2FrBawHPgImAI0AAAAHA2ABlgEm%2F%2F8ARv5yBawFsAImAI0AAAAHA3ECaQAA%2F%2F8ARv%2FrBawHPgImAI0AAAAHA2IBqgEm%2F%2F8ARv%2FrBawHnQImAI0AAAAHA20CYAEmAAIARv%2FrBqsGDQAbACQAAAUiJiY1ESc1IRUHERQWFjMyNjY1ESc1IREUBgYBNxY2NTMVFgYDBaD0iKMCDKNWmmZsolqjAWiN%2BgFVAYpvrQTNFXHbngNAHH9%2FHPzAbpZMTJZuA0Acf%2FwlnttxBGSTBJaZBdbhAP%2F%2FAEb%2F6warBz4CJgCVAAAABwNjAnMBJv%2F%2FAEb%2BcgarBg0CJgCVAAAABwNxAnkAAP%2F%2FAEb%2F6warBz4CJgCVAAAABwNiAcUBJv%2F%2FAEb%2F6warB50CJgCVAAAABwNtAnsBJv%2F%2FAEb%2F6warB00CJgCVAAAABwNrAZEBJv%2F%2FAEb%2F6wWsBz4CJgCNAAAABwNkAbkBJv%2F%2FAEb%2F6wWsBv4CJgCNAAAABwNsAWgBJv%2F%2FAEb%2BUAWsBbACJgCNAAAABwN2AiEAAP%2F%2FAEb%2F6wWsB3cCJgCNAAAABwNpAgIBJv%2F%2FAEb%2F6wWsB00CJgCNAAAABwNrAXYBJgABAEEAAAWjBbAAEQAAIQEnNSEVBwEXMzcBJzUhFQcBAp3%2BGHQBzIUBRiIGJAFSlAHLdf4YBSEQf38V%2FGJzcwOfFH9%2FEPrfAAABAEgAAAgJBbAAHQAAIQEnNSEVBxMXFzcBMwEXMzcTJzUhFQcBIwEnIwcBAhf%2BrHsB2Je%2BLAY6ASWtASg5BjS8owHQc%2F66u%2F7EKAYn%2FsMFIg9%2Ffxf837sBuwO4%2FEjGxgMiF39%2FD%2FreA%2FCTk%2FwQ%2F%2F8ASAAACAkHPgImAKEAAAAHA2MDiAEm%2F%2F8ASAAACAkHPgImAKEAAAAHA2YCzgEm%2F%2F8ASAAACAkHPgImAKEAAAAHA2ACxgEm%2F%2F8ASAAACAkHPgImAKEAAAAHA2IC2gEmAAEAUAAABakFsAAbAAAzNTcBASc1IRUHAQEnNSEVBwEBFxUhNTcBARcVUH4Bw%2F5efwHYiQFCATKMAduF%2FnUBtoH%2BIo3%2Bp%2F6ohX4WAk8COBZ%2Ffw3%2BPwHBDX9%2FFv3I%2FbEWfn4NAdn%2BJw1%2BAAABAEEAAAV0BbAAFwAAITU3EQEnNSEVBwEXNzcBJzUhFQcBERcVAdaj%2FkB4AfamATUVARQBRKwB7H%2F%2BSKN%2BHAF4AwwTf38T%2FcQnAiUCPBN%2FfxP9A%2F55HH7%2F%2FwBBAAAFdAc%2BAiYApwAAAAcDYwI6ASb%2F%2FwBBAAAFdAc%2BAiYApwAAAAcDZgGAASb%2F%2FwBBAAAFdAc%2BAiYApwAAAAcDYAF4ASb%2F%2FwBB%2FnIFdAWwAiYApwAAAAcDcQJLAAD%2F%2FwBBAAAFdAc%2BAiYApwAAAAcDYgGMASb%2F%2FwBBAAAFdAedAiYApwAAAAcDbQJCASb%2F%2FwBBAAAFdAdNAiYApwAAAAcDawFYASYAAQBaAAAEUwWwAA0AADM1ASEHIxEhFQEhNzMRWgL1%2FcoSngPJ%2FQcCaxKdlQSBvAFWkft6z%2F6YAP%2F%2FAFoAAARTBz4CJgCvAAAABwNjAagBJv%2F%2FAFoAAARTBz4CJgCvAAAABwNnAO4BJv%2F%2FAFoAAARTBz4CJgCvAAAABwNhAbkBJgACAE%2F%2F6wQdBE4AJAAvAAAFIiY1NDY2MzM1NCYjIgYHByM1NjYzMhYVERQWFxcVISYmJwYGJzI2NzUjIgYVFBYBqKmwcdaVwXdsRGQpFZhJwnbF4AECaf7lCQoCOatEYqIjyIiIWBWllmeZVWpibCEdl%2Fg7Pbyv%2FfcVKBQLfixGI0lhpV5CxIJQR0sA%2F%2F8AT%2F%2FrBB0GGAImALMAAAAHA2MBdQAA%2F%2F8AT%2F%2FrBB0GGAImALMAAAAHA2gAtwAA%2F%2F8AT%2F%2FrBB0GzwImALMAAAAHA50AtwAA%2F%2F8AT%2F5yBB0GGAImALMAAAAnA2gAtwAAAAcDcQGXAAD%2F%2FwBP%2F%2BsEHQbPAiYAswAAAAcDngC3AAD%2F%2FwBP%2F%2BsEHQceAiYAswAAAAcDnwC2AAD%2F%2FwBP%2F%2BsEHQcSAiYAswAAAAcDoAC0AAD%2F%2FwBP%2F%2BsEHQYYAiYAswAAAAcDZgC7AAD%2F%2FwBP%2F%2BsEHQbPAiYAswAAAAcDoQC4AAD%2F%2FwBP%2FnIEHQYYAiYAswAAACcDZgC7AAAABwNxAZcAAP%2F%2FAEP%2F6wQdBs8CJgCzAAAABgOiGwD%2F%2FwBP%2F%2BsEHQcLAiYAswAAAAcDowC5AAD%2F%2FwBP%2F%2BsEHQcSAiYAswAAAAcDpAC3AAD%2F%2FwBP%2F%2BsEHQYYAiYAswAAAAcDYACzAAD%2F%2FwBP%2FnIEHQROAiYAswAAAAcDcQGXAAD%2F%2FwBP%2F%2BsEHQYYAiYAswAAAAcDYgDHAAD%2F%2FwBP%2F%2BsEHQZ3AiYAswAAAAcDbQF9AAD%2F%2FwBP%2F%2BsEHQXYAiYAswAAAAcDbACFAAD%2F%2FwBP%2FlAEbAROAiYAswAAAAcDdgK2AAD%2F%2FwBP%2F%2BsEHQZRAiYAswAAAAcDaQEfAAD%2F%2FwBP%2F%2BsEHQbPAiYAswAAAAcDagEjAAD%2F%2FwBP%2FgIEHQROAiYAswAAAAcDcgEwAAD%2F%2FwBP%2F%2BsEHQYnAiYAswAAAAcDawCTAAAAAwBP%2F%2BsGegROADEAQABKAAAFIiY1NDY2MzM1NCYjIgYHByM1NjYzMhYXPgIzMhYWFRUhBxYWMzI2NxcGBiMgJwYGJzI2NjcmJjU1IyIGFRQWASE1NCYjIgYGBwGzr7Vy1ZbBd2xEZCkVmEnCdnqyMStqe0OPxmj9OgIBnZtohE5EN7yL%2FvGdRslqRHldGAYFyIiJWAJKAf94gExyQwgVqplmmFRlYmwhHZf4Oz1TUjVKJnXbmHcFn8Y3M4otTdNoa6U2WjYxRisBf1BBWQHwH3qaTYhZ%2F%2F8AT%2F%2FrBnoGGAImAMsAAAAHA2MC2wAAAAL%2F8P%2FrBC8GGAAVACQAAAUiJicHIxEnNSERNjYzMhYSFRUUBgYnMjY1NTQmJiMiBgcRFhYCiWqcNBKqowFoM5dlhr1lZb22i4c8el5bfSUlfxVRT4sFfRx%2F%2FaJITJH%2B%2Bq4VnOqDoMajFX29a1hK%2FiJLWAAAAQBO%2F%2BsD3AROACMAAAUiJiY1NTQ2NjMyFhcTIycmJiMiBgYVFRQWFjMyNjczFw4CAjOT2nh02peDxUMFmiIiZkVYhUpFgVlkhA%2BxAgVkuRWJ9KAqmvSOVkv%2B%2FL0jKmiuayp2rl9uYAZdomP%2F%2FwBO%2F%2BsD3AYYAiYAzgAAAAcDYwGMAAD%2F%2FwBO%2F%2BsD3AYYAiYAzgAAAAcDZwDSAAD%2F%2FwBO%2Fk0D3AROAiYAzgAAAAcDdQGeAAD%2F%2FwBO%2F%2BsD3AYYAiYAzgAAAAcDZgDSAAD%2F%2FwBO%2F%2BsD3AYYAiYAzgAAAAcDYQGdAAAAAgBO%2F%2BsEhAYYABgAJwAABSImJjU1NBI2MzIWFxEnNTMzERcVIScGBicyNjcRJiYjIgYGFRUUFgHzhL1kZL6FYJM0o6PFo%2F6yEDWZM1h4JyZ6VV56PIYVg%2BqcFa4BBpFHQwG5HH%2F6ghx%2BgUpMoFBJAfZEUGu9fRWjxgACAE7%2F6wQ2Be0AIwA0AAAFIiYmNTQ2NjMyFhc3JiYnBSc3JiYnNxYWFzcXBxYSFRUUBgYnMjY2PQImJiMiBgYVFBYWAj%2BR4X9%2B3Y5TlTQEFFQ7%2FvBN9SRNKjxLiDzpTddoc4Tki1mITSShdVeESUqJFYHcipjngUA0BWKjPptmjBclEKQWRi%2BFZnt5%2FrTIYqP7jppotnRkMjpQYKJjWJhdAP%2F%2FAE7%2F6wUeBhgCJgDUAAAABwNlA%2FwAAP%2F%2FAE7%2F6wSEBhgCJgDUAAAABwN3AgEB6wACAEr%2F6wPUBE4AGgAlAAAFIiYmNTU0NjYzMhYWFRUhBx4CMzI2NxcGBgEhNTQmJiMiBgYHAjeW3nl%2F032SxWT9QgMCRYJbZJc3TTq%2F%2Fl8B8zdtUkJsRgsVifSgLJrzjXjZk3sFaKFcOTKAOE0CnhpOe0dNhFT%2F%2FwBK%2F%2BsD1AYYAiYA2AAAAAcDYwF3AAD%2F%2FwBK%2F%2BsD1AYYAiYA2AAAAAcDaAC5AAD%2F%2FwBK%2F%2BsD1AYYAiYA2AAAAAcDZwC9AAD%2F%2FwBK%2F%2BsD1AYYAiYA2AAAAAcDZgC9AAD%2F%2FwBK%2F%2BsD6wbPAiYA2AAAAAcDoQC6AAD%2F%2FwBK%2FnID1AYYAiYA2AAAACcDZgC9AAAABwNxAYsAAP%2F%2FAEX%2F6wPUBs8CJgDYAAAABgOiHQD%2F%2FwBK%2F%2BsD9QcLAiYA2AAAAAcDowC7AAD%2F%2FwBK%2F%2BsD1AcSAiYA2AAAAAcDpAC5AAD%2F%2FwBK%2F%2BsD1AYYAiYA2AAAAAcDYAC1AAD%2F%2FwBK%2F%2BsD1AYYAiYA2AAAAAcDYQGIAAD%2F%2FwBK%2FnID1AROAiYA2AAAAAcDcQGLAAD%2F%2FwBK%2F%2BsD1AYYAiYA2AAAAAcDYgDJAAD%2F%2FwBK%2F%2BsD1AZ3AiYA2AAAAAcDbQF%2FAAD%2F%2FwBK%2F%2BsD1AXYAiYA2AAAAAcDbACHAAD%2F%2FwBK%2FlAD1AROAiYA2AAAAAcDiAHmAAD%2F%2FwBK%2F%2BsD1AYnAiYA2AAAAAcDawCVAAAAAgBn%2F%2BwD8QRPABwAJwAABSImJjU1ITQ0NS4CIyIGByc2NjMyFhYVFRQGBicyNjY3JyEVFBYWAiOTxWQCwAJFgVtlljdNOr6Hlt55f9J9QWtGCwL%2BDjduE3fZk3sCAgFnolw7MYE4TYr0nyyb84ybS4RVBRlOe0cAAQBAAAAC2wYtABsAADM1NxEjNTM1NDYzMhYXByYmIyIGFRUzFSMRFxVGo6mptaIiTyoYEj0bV1Ts7Lp%2BHAMOkomtvQsKlgQGZ2KJkvzyHH4AAAMATv5LBG0ETgAgAC8AMwAAASImJzcWFjMyNjU1BgYjIiYmNTU0EjYzMhYXNzMRFAYGAzI2NxEmJiMiBgYVFRQWASczFQIlTrZFMzeWR4R7NZRghMBnZ8CGZpo0EqZpyYtZeCcmelZefT6KAixN8f5LKyWZHSaUiWdERoPrmxWuAQaRUEyI%2B9SMym0CQFFKAfJFUWy9fBWjxgMOoX7%2F%2FwBO%2FksEbQYYAiYA7AAAAAcDaADqAAD%2F%2FwBO%2FksEbQYYAiYA7AAAAAcDZgDuAAD%2F%2FwBO%2FksEbQaPAiYA7AAAAAcDbwGmAAD%2F%2FwBO%2FksEbQYYAiYA7AAAAAcDYQG5AAAAAQAxAAAE5wYYAB0AADM1NxEnNSERNjYzMhYVERcVITU3ETQmIyIGBxEXFTGjowFoOKJjrsCj%2FfWjc3JRhSujfhwE4xx%2F%2FZJOVtDY%2FfQcfn4cAg6GgE1C%2FXscfv%2F%2FADEAAATnBhgCJgDxAAAABwN3AAkB6%2F%2F%2FAAsAAATnB44CJgDxAAAABwNm%2F%2BMBdv%2F%2FAEMAAAJOBhgCJgD1AAAABwNhALQAAAABAEMAAAJOBDoACQAAMzU3ESc1IREXFUOjowFoo34cAwUcf%2FxgHH7%2F%2FwBDAAACawYYAiYA9QAAAAcDYwCjAAD%2F%2FwANAAACewYYAiYA9QAAAAYDaOUA%2F%2F8AEQAAAnYGGAImAPUAAAAGA2bpAP%2F%2FAAkAAAJ%2FBhgCJgD1AAAABgNg4QD%2F%2FwBD%2FnICTgYYAiYA9QAAACcDYQC0AAAABwNxALgAAP%2F%2FAB0AAAJOBhgCJgD1AAAABgNi9QD%2F%2FwBDAAACTgZ3AiYA9QAAAAcDbQCrAAD%2F%2FwBD%2FksEHgYYACYA9QAAACcDYQC0AAAAJwECAqEAAAAHA2EDJwAA%2F%2F%2F%2F2wAAAqwF2AImAPUAAAAGA2yzAP%2F%2FAEP%2BUAKdBhgCJgD1AAAAJwNhALQAAAAHA3YA5wAA%2F%2F%2F%2F6QAAAp4GJwImAPUAAAAGA2vBAP%2F%2F%2F8j%2BSwF9BhgCJgECAAAABwNhAIYAAAAB%2F8j%2BSwF9BDoAEQAAEyImJzcWFjMyNjURJzUhERQGOCA0HA0OQxI7RaMBaKz%2BSwkJlgUIZ1oD%2BBx%2F%2B22ntQD%2F%2F%2F%2FI%2FksCSAYYAiYBAgAAAAYDZ7sA%2F%2F%2F%2FyP5LAkgGGAImAQIAAAAGA2a7AAADAEAAAATgBhgACQASABsAADM1NxEnNSERFxUzNTcnATcBFxUBJwE3JzUhFQdAo6MBaKOsbgP%2Bx2YBtZz8ukkB1gV0AdKLfhwE4xx%2F%2BoIcfn4NBAGUnf3WGH4BOZsB1AYNf38aAP%2F%2FAED95wTgBhgCJgEFAAAABwN0AcsAAAADAEAAAASiBDoACAASABgAAAEnATcnNSEVBwE1NxEnNSERFxUhATcBFxUBmkkB1gV0AdKL%2FEGjowFoowFq%2FnJoAZt4ATmbAdQGDX9%2FGvxffhwDBRx%2F%2FGAcfgIjnf3WGH4AAAEAQAAAAksGGAAJAAAzNTcRJzUhERcVQKOjAWijfhwE4xx%2F%2BoIcfv%2F%2FAEAAAAJuB44CJgEIAAAABwNjAKYBdv%2F%2FAEAAAALlBhgCJgEIAAAABwNlAcMAAP%2F%2FAED95wJLBhgCJgEIAAAABwN0AI4AAP%2F%2FAEAAAAMCBhgCJgEIAAAABwLnAawCdv%2F%2FAEAAAAJLBhgCJgEIAAAABgN5Kv8AAQBKAAAHcQROADAAADM1NxEnNSEXNjYzMhYXNjYzMhYVERcVITU3ETQmIyIGBxEXFSE1NxE0JiMiBgcRFxVKo6MBVA00pGxsmyczqHCmwKP99KNubGd9CqP99aNxa1p0H6N%2BHAMFHH%2BNTVRkZFxs4%2BT%2BExx%2BfhwB76CFkW796xx%2BfhwB75iNSkP9eRx%2B%2F%2F8ASgAAB3EGGAImAQ4AAAAHA2MDPAAAAAEASgAABP4ETgAdAAAzNTcRJzUhFzY2MzIWFREXFSE1NxE0JiMiBgcRFxVKo6MBUw42o2ivwKP99aNxdFWDJ6N%2BHAMFHH%2BhVl%2FN1v3vHH5%2BHAINj3hSR%2F2FHH7%2F%2FwBKAAAE%2FgYYAiYBEAAAAAcDYwICAAD%2F%2FwBEAAAE%2FgYYAiYBEAAAAAcDdAAcBrX%2F%2FwBKAAAE%2FgYYAiYBEAAAAAcDZwFIAAD%2F%2FwBK%2FecE%2FgROAiYBEAAAAAcDdAHqAAAAAQBa%2FksEYwROACUAAAEiJic3FhYzMjY1ETQmIyIGBxEXFSE1NxEnNSEXNjYzMhYVERQGAx0gNRwODUQSPURydVV6JqP99aOjAVMNNqBkrsGt%2FksJCaAFB15YAwCPeEE7%2FWgcfn4cAwUcf5VQWc3W%2FPyntf%2F%2FAEoAAAT%2BBicCJgEQAAAABwNrASAAAAACAE7%2F6wQWBE4AEQAjAAAFIiYmNTU0NjYzMhYWFRUUBgYnMjY2NTU0JiYjIgYGFRUUFhYCM5bZdnbZlJbZdnbYlV5%2FQUGAX16AQECBFY35oBag%2BY6O%2BKEWofmMmmezchZys2dns3IWcrNnAP%2F%2FAE7%2F6wQWBhgCJgEXAAAABwNjAZEAAP%2F%2FAE7%2F6wQWBhgCJgEXAAAABwNoANMAAP%2F%2FAE7%2F6wQWBhgCJgEXAAAABwNmANcAAP%2F%2FAE7%2F6wQWBs8CJgEXAAAABwOhANQAAP%2F%2FAE7%2BcgQWBhgCJgEXAAAAJwNmANcAAAAHA3EBogAA%2F%2F8ATv%2FrBBYGzwImARcAAAAGA6I3AP%2F%2FAE7%2F6wQWBwsCJgEXAAAABwOjANUAAP%2F%2FAE7%2F6wQWBxICJgEXAAAABwOkANMAAP%2F%2FAE7%2F6wQWBhgCJgEXAAAABwNgAM8AAP%2F%2FAE7%2BcgQWBE4CJgEXAAAABwNxAaIAAP%2F%2FAE7%2F6wQWBhgCJgEXAAAABwNiAOMAAP%2F%2FAE7%2F6wQWBncCJgEXAAAABwNtAZkAAP%2F%2FAE7%2F6wSLBLEAJgEXAAAABwNwAwkAAP%2F%2FAE7%2F6wSLBhgAJgEXAAAAJwNwAwkAAAAHA2MBkQAA%2F%2F8ATv5yBIsEsQAmARcAAAAnA3ADCQAAAAcDcQGiAAD%2F%2FwBO%2F%2BsEiwYYACYBFwAAACcDcAMJAAAABwNiAOMAAP%2F%2FAE7%2F6wSLBncAJgEXAAAAJwNwAwkAAAAHA20BmQAA%2F%2F8ATv%2FrBIsGJwAmARcAAAAnA3ADCQAAAAcDawCvAAD%2F%2FwBO%2F%2BsEFgYYAiYBFwAAAAcDZADyAAD%2F%2FwBO%2F%2BsEFgXYAiYBFwAAAAcDbAChAAD%2F%2FwBO%2F30EFgS9AiYBFwAAAAYDen0E%2F%2F8ATv99BBYGGAImARcAAAAmA3p9BAAHA2MBkQAA%2F%2F8ATv%2FrBBYGJwImARcAAAAHA2sArwAAAAMATv%2FrBuYETgAoADoARQAABSImJjU1NDY2MzIWFzY2MzIWFhUVIQceAjMyNjY3FwYGIyImJicGBicyNjY1NTQmJiMiBgYVFRQWFgEhNTQmJiMiBgYHAjKV2nV12ZSCyUBAw22SxWT9QgMCRYFcQ29cJE07vYdYlncrQMeAXoBBQoBfXn9AQIACWwHzN21SQmxGCxWN%2BaAWoPmObmNib3jZk3sFaKFcGjAhgDlMMFtAYWqaZ7NyFnKzZ2ezchZys2cCBBpOe0dNhFQAAAIAIv5gBF8ETgAZACgAABM1NxEnNSEXNjYzMhYSFRUUBgYjIiYnERcVEzI2NTU0JiYjIgYHERYWLJmjAUwSNptmhr5kZbyEZJc1rEeMkEB%2FX1R4JSV3%2FmB%2FHASkHH%2BESk6R%2FvuvFZzqg0NC%2FoscfwIlzKMVfL1sTEL98UNJAAIAGf5gBFYGGAAZACgAABM1NxEnNSERNjYzMhYSFRUUBgYjIiYnERcVEzI2NTU0JiYjIgYHERYWGaOjAWg1l2KFvmRlvINkmDWjUYyQQH9fVXglJXj%2BYH8cBoIcf%2F2qREiR%2FvuvFZzqg0ND%2FoocfwIlzKMVe75sTUP99UNLAAIATv5gBG8ETgAXACYAAAE1NxEGBiMiJiY1NTQSNjMyFhc3MxEXFQEyNjcRJiYjIgYGFRUUFgJuozSPW4S9ZGS%2BhV%2BUNBCqmf22UnMnJ3RPXno8hv5gfxwBaz0%2Bg%2BqcFa4BBpFHRHf6wRx%2FAiVIQgIfPUhtwH0VpMsAAQBIAAADKAROABYAADM1NxEnNSEXFzY2MzIWFwcnJgYHERcVSKOjAVMRAi6HVx9BDhqJTmodo34cAwUcf4oTU14LBbcIBVFE%2FZscfgD%2F%2FwBIAAADKAYYAiYBMwAAAAcDYwEiAAD%2F%2FwBIAAADKAYYAiYBMwAAAAYDZ2gA%2F%2F8ASP3nAygETgImATMAAAAHA3QAnAAAAAEAaP%2FrA6UETgArAAAFIiYnAzMXFhYzMjY1NCYnJiY1NDY2MzIWFxcjJyYmIyIGFRQWFhcWFhUUBgIAbb5rApUlOGk9eGhpisS5ZrZ5e69BCpQgI2A%2BXHMhXlvis8sVLC4BAZsXFVxEQFkfLZd%2BWItSOC%2F3kBocVkEmOC0WNaR4ibkA%2F%2F8AaP%2FrA6UGGAImATcAAAAHA2MBXgAA%2F%2F8AaP%2FrA6UGGAImATcAAAAHA2cApAAA%2F%2F8AaP5NA6UETgImATcAAAAHA3UBcAAA%2F%2F8AaP%2FrA6UGGAImATcAAAAHA2YApAAA%2F%2F8AaP3nA6UETgImATcAAAAHA3QBRgAAAAEAN%2F%2FrBMAGLQA3AAAFIiYmJzcWFjMyNjU0LgM1ND4CNTQmIyIGFREhNTcRNDY2MzIWFhUUDgIVFB4DFRQGBgM%2BOHdiGSsqhDxtZUZnZ0YqOCpiTWV7%2Fpmjabl5baZeKDMoRmloRl6tFRMgFJ8cMF5PN2djZm0%2BMWFlbDpQYp%2BS%2B55%2BHAPIkc1tTJRtTnlgTyMoUltsg1FqkksAAAEAOQAAAsQGLQATAAAzNTcRNDYzMhYXByYmIyIGFREXFTmjtaIiRSoZEywZV1ujfhwEKa29CwqRBQZtYvvXHH4AAAEAGP%2FvAqYFPwAXAAAFIiY1ESM1MxEzETMVIxEUFjMyNjcXBgYByHiNq6vF6%2Bs%2BNCNWGBsrfRGNmwKRkgEF%2FvuS%2FW9OSg0FgQ0UAP%2F%2FABf%2F7wKmBT8CJgE%2FAAAABgN377b%2F%2FwAY%2F%2B8C5QYYAiYBPwAAAAcDZQHDAAD%2F%2FwAY%2Fk0CpgU%2FAiYBPwAAAAcDdQENAAD%2F%2FwAY%2FecCpgU%2FAiYBPwAAAAcDdADjAAAAAQA0%2F%2BsEnQQ6ABsAAAUiJjURJzUzMxEUFjMyNjcRJzUzMxEXFSEnBgYCJrDGfHzFZmxpiSORkcV8%2FtMNM6EV4u8B4xx%2F%2FYCtglVOAnEcf%2FxgHH6gV14A%2F%2F8ANP%2FrBJ0GGAImAUQAAAAHA2MBvQAA%2F%2F8ANP%2FrBJ0GGAImAUQAAAAHA2gA%2FwAA%2F%2F8ANP%2FrBJ0GGAImAUQAAAAHA2YBAwAA%2F%2F8ANP%2FrBJ0GGAImAUQAAAAHA2AA%2BwAA%2F%2F8ANP5yBJ0EOgImAUQAAAAHA3EB3wAA%2F%2F8ANP%2FrBJ0GGAImAUQAAAAHA2IBDwAA%2F%2F8ANP%2FrBJ0GdwImAUQAAAAHA20BxQAA%2F%2F8ANP%2FrBUcEsQAmAUQAAAAHA3ADxQAA%2F%2F8ANP%2FrBUcGGAAmAUQAAAAnA3ADxQAAAAcDYwG9AAD%2F%2FwA0%2FnIFRwSxACYBRAAAACcDcAPFAAAABwNxAd8AAP%2F%2FADT%2F6wVHBhgAJgFEAAAAJwNwA8UAAAAHA2IBDwAA%2F%2F8ANP%2FrBUcGdwAmAUQAAAAnA3ADxQAAAAcDbQHFAAD%2F%2FwA0%2F%2BsFRwYnACYBRAAAACcDcAPFAAAABwNrANsAAP%2F%2FADT%2F6wSdBhgCJgFEAAAABwNkAR4AAP%2F%2FADT%2F6wSdBdgCJgFEAAAABwNsAM0AAP%2F%2FADT%2BUATsBDoCJgFEAAAABwN2AzYAAP%2F%2FADT%2F6wSdBlECJgFEAAAABwNpAWcAAP%2F%2FADT%2F6wSdBicCJgFEAAAABwNrANsAAAABABoAAASYBDoAEQAAIQEnNSEVBxMXMzcTJzUhFQcBAgv%2Bf3ABxo3wHAYg35EBxXL%2BkgOsD39%2FFP2YV1cCaBR%2Ffw%2F8VAAAAQA0AAAG8QQ6AB0AACEBJzUhFQcTFzM3EzMTFzM3Eyc1IRUHASMDJwcHAwHK%2FuN5Ab%2BFlSIGLOum4DAGL5eIAbV4%2Fui72zQGM%2BsDrQ5%2Ffxb95YCAArD9UpiYAhoVf38R%2FFYCiq4Brf12%2F%2F8ANAAABvEGGAImAVgAAAAHA2MC7wAA%2F%2F8ANAAABvEGGAImAVgAAAAHA2YCNQAA%2F%2F8ANAAABvEGGAImAVgAAAAHA2ACLQAA%2F%2F8ANAAABvEGGAImAVgAAAAHA2ICQQAAAAEAKgAABIsEOgAbAAAzNTcBASc1IRUHExMnNSEVBwEBFxUhNTcDAxcVKngBQ%2F7EawGobN7YdAGhbv7bAVFw%2FjWC7eZ1fhcBjgGBF39%2FDP7sARULf38X%2FoL%2Bbxd%2BfgsBIf7fC34AAAEAGP5LBJQEOgAeAAABIiYnNxYWMzI2NzcBJzUhFQcTFzMTJzUhFQcBDgIBNRdKFBQRPAs%2FTyIv%2FoF0AcaD0zMG%2BooBvXD%2BVh5Ve%2F5LCwWbAgNgU3IDlRB%2FfxT9440CqhR%2FfxD7r057Rv%2F%2FABj%2BSwSUBhgCJgFeAAAABwNjAbMAAP%2F%2FABj%2BSwSUBhgCJgFeAAAABwNmAPkAAP%2F%2FABj%2BSwSUBhgCJgFeAAAABwNgAPEAAP%2F%2FABj%2BSwSUBDoCJgFeAAAABwNxAswAAP%2F%2FABj%2BSwSUBhgCJgFeAAAABwNiAQUAAP%2F%2FABj%2BSwSUBncCJgFeAAAABwNtAbsAAP%2F%2FABj%2BSwSUBicCJgFeAAAABwNrANEAAAABAFgAAAPABDoADQAAMzUBIQcjESEVASE3MxFYAk3%2BbRmUAzT9rQHNGpOKAxi2AU6G%2FOK3%2FrMA%2F%2F8AWAAAA8AGGAImAWYAAAAHA2MBYwAA%2F%2F8AWAAAA8AGGAImAWYAAAAHA2cAqQAA%2F%2F8AWAAAA8AGGAImAWYAAAAHA2EBdAAAAAEALQAABKcGLQAhAAAzNTcRIzUzNTQ2MzIWFwcmJiMiBhUVIREXFSE1NxEhERcVM6Opqda9QoRWITV4P3ZnAmmj%2FfWj%2FlyjfhwDDpJ1tsggHaAVHmhsdfxgHH5%2BHAMO%2FPIcfgABADMAAAT6Bi0AIgAAMzU3ESM1MzU0NjMyFhczERcVITU3ESYmIyIGFRUzFSMRFxUzo5CQ69BWqG9Zo%2F31ozp6Pop7%2B%2FujfhwDDpJOydwgHvqrHH5%2BHATKDhF8f06S%2FPIcfgD%2F%2FwBAAAAHfwYtACYA6wAAAAcBagLYAAD%2F%2FwBAAAAHzwYtACYA6wAAAAcBawLVAAAAAgBqArQDBQXFACAALAAAASImNTQ2MzM1NCYjIgYVJycmNjMyFhURFBYXIyYmJwYGJzI2Njc1IyIGFRQWAWN3gqiiijs6Q0mjAQaqjIWdDA6vCAoDIXAjIkk6DIlLVDsCtHpqbng0P0Q2MQ0GYoKOhv7GM1gqFTAaLz6LHCsYbkIuLTAAAgB5ArMDLAXFAA0AGwAAASImNTU0NjMyFhUVFAYnMjY1NTQmIyIGFRUUFgHUn7y7np68u51TWFlUVFlYArO5lXWUu7uUdZW5jWpXdVRra1R1WGkAAQCWAosDFgW6ABMAABMRMxc2NjMyFhURIxE0JiMiBgcRlogfJG5Geoe0R0E1SBMCiwMgeEBHl5z%2BBAHbZls2L%2F3JAP%2F%2FAEYAAAW3BbACBgABAAAAAgA8AAAFAAWwABQAHQAAMzU3ESc1IREjJyERITIWFhUUBgYjJSEyNjU0JiMhPKOjBCCpD%2F4KAWec23R03Jv%2BmQFnlJKSlP6ZfhwEexx%2F%2Fr6n%2Fkdov4ODxGuaoHp2lwD%2F%2FwBRAAAE5QWwAAYAGwAAAAEATQAABG0FsAANAAAzNTcRJzUhESMnIREXFU2jowQgqQ%2F%2BAKN%2BHAR7HH%2F%2Bvqf7hRx%2BAP%2F%2FAE0AAARtBz4CJgF0AAAABwNjAecBJgABADwAAARcBv4ADQAAMzU3ESc1IRMzESERFxU8o6MDZxue%2FUijfhwEexx%2FAU7%2BF%2FuFHH4AAgA3%2FpkF2wWwABMAGwAAEwMzNjYSNxMnNSEVBxEzAyMRIRETIREhAwYCBlQdfTNdPgQYmgSyo8gUsfvmkgLA%2FhYXBjJS%2FpkCATu6ARPBAbMbf38c%2B4X%2BAQFl%2FpkCAQR7%2Fk6f%2FvXUAP%2F%2FAFEAAASmBbACBgAmAAD%2F%2FwBRAAAEpgc%2BAiYAJgAAAAcDYgE%2BASb%2F%2FwBRAAAEpgc%2BAiYAJgAAAAcDYAEqASYAAQA%2BAAAH0wW7AEAAADM1NwEBJiYjIgYHJzY2MzIWFhcBMxEnNSEVBxEzATY2MzIWFwcmJiMiBgcBARcVITU3JwEjERcVITU3ESMBBxcVP5IBhP72J0QvFisVHSBKMThcVi4BIo6jAgqjmgEiRX5VMEogHRUrFTBEJ%2F7pAX6S%2FjNOA%2F7Xr6P99qO2%2FtUCT34VAmYBqDszBgSKFRciU0z%2BJgH1HH9%2FHP4LAdpxUBcVigQGMzv%2BT%2F2jFX5%2BDQUB6v4gHH5%2BHAHg%2FhUEDX4AAQBJ%2F%2BsEXgXFAC4AAAUiJiY3NzMUFhYzMjY1NCYjIzUzMjY1NCYjIgYHByMRNjYzMgQVFAYHFhYVFAYGAkWL6IkDArxLj2WSvqSgpKSalKWjaZAtJoo%2B%2Fq3oARJ%2Bbn2Fh%2FIVYLqJBkx7SJWHeH%2BcgnB0kD0uzQECUIHRs3mtMCqufoW%2FZgABAE0AAAXfBbAAIQAAMzU3ESc1OwIVBxEXATUnNTsCFQcRFxUhNTcRJwEVFxVNo6OjxaOjBgK8o6PFo6Oj%2FfWjBv1Eo34cBHscf38c%2FLkCAu1cHH9%2FHPuFHH5%2BHAMsAv0SQBx%2BAP%2F%2FAE0AAAXfBz4CJgF9AAAABwOYAbcBJv%2F%2FAE0AAAXfBz4CJgF9AAAABwNiAccBJv%2F%2FAE3%2BZgXfBz4CJgF9AAAAJwOYAbcBJgAHAugEpP%2BdAAEARwAABWcFuwAlAAAzNTcRJzUhFQcRMwE2NjMyFhcHJiYjIgYHAQEXFSE1NycBIxEXFUejowILo58BSVF4Ty9BJB0bKRQvQSv%2BxwHkif4ibwT%2Bd7yjfhwEexx%2Ffxz%2BCwHacFEXFosFBzI8%2Fkz9qhl%2Bfg4FAen%2BIBx%2BAP%2F%2FAEcAAAVnBz4CJgGBAAAABwNjAjUBJgABADkAAAWhBbAAGwAAMzUzMj4CNxMnNSEVBxEXFSE1NxEhAwYCBgYjOShEXTsiBxicBL%2Bjo%2F31o%2F4JGAk2Z6J1mkGR66sCFBt%2Ffxz7hRx%2BfhwEe%2F3tzf7culcA%2F%2F8AXgAAB2AFsAIGAFgAAP%2F%2FAFEAAAXZBbACBgA%2BAAD%2F%2FwBG%2F%2BsFAQXFAAYAYAAA%2F%2F8ATQAABeEFsAIGAoYAAP%2F%2FAFEAAATaBbAABgB5AAD%2F%2FwBQ%2F%2BsElgXFAAYAHAAA%2F%2F8AYAAABRoFsAIGAIgAAAABADb%2F6wUUBbAAHgAABSImJzcWFjMyNjc3ASc1IRUHExczASc1IRUHAQ4CAYMZQwkGCkIRRz0nJ%2F5ZdgHJet1JBgERfwHRcv4%2FJ1R%2BFQYDlQICR1FTA68Sf38T%2Fem8AtIUf38R%2B89XdDn%2F%2FwA2%2F%2BsFFAc%2BAiYBiwAAAAcDmAFAASYAAwBU%2F7EF7AX%2FACEALAA3AAAFNTc1IyIkJjU0NiQzMzUnNSEVBxUzMgQWFRQGBCMjFRcVATMRIyIGBhUUFhYhMzI2NjU0JiYjIwIbox2p%2FvaamwEKqB2jAgujGqgBDJub%2FvSoGqP%2Bex0dfrBcXLABYBx8sF1dsHwcT34ddorwl5v0jXUdfn4ddYzzm5fxi3YdfgGrAvhgrXRwqV5fqnBzrGD%2F%2FwBQAAAFqQWwAgYApgAAAAEAOwAABboFsAAfAAAhNTcRBgYjIiY1ESc1IRUHERQWMzI2NxEnNSEVBxEXFQOuo1%2ByevD4owILo4qZaMBjowIMo6N%2BHAHBHRrS7gExHH9%2FHP7PpX8cGwIeHH9%2FHPuFHH4AAQBN%2FqEF%2FAWwABUAAAERITU3ESc1IRUHESERJzUhFQcRMxEFOfsUo6MCC6MCxKMCC6O%2B%2FqEBX34cBHscf38c%2B4UEexx%2Ffxz7hf4HAAEATQAAB7cFsAAeAAAzNTcRJzUhMxUHESERJzUhFQcRIREnNTsCFQcRFxVNo6MBaKOjAeyjAgqjAeqjo8Wjo6N%2BHAR7HH9%2FHPuFBHscf38c%2B4UEexx%2Ffxz7hRx%2BAAABAE3%2BoQfIBbAAHQAAAREhNTcRJzUhFQcRIREnNSEVBxEhESc1IRUHETMDBwX5SKOjAgujAeyjAgqjAeqjAgujtBT%2BoQFffhwEexx%2Ffxz7hQR7HH9%2FHPuFBHscf38c%2B4b%2BBgAAAQBN%2FpkF4QWwABgAAAERITU3ESc1ITMVBxEhESc1IRUHERcVIRECu%2F2So6MBaKOjAsSjAgujo%2F2f%2FpkBZ34cBHscf38c%2B4UEexx%2Ffxz7hRx%2B%2FpkAAgBGAAAFAAWwABIAGwAAMzU3ESc1IRUHESEyFhYVFAYGIyUhMjY1NCYjIUajowILowFnnNt0dNuc%2FpkBZ5SSkpT%2BmX4cBHscf38c%2Fkdov4ODxGuaoHp2lwAAAgA%2BAAAGaQWwABQAHQAAITU3ESEHIxEhFQcRITIWFhUUBgYjJSEyNjU0JiMhAa%2Bj%2FqMOqQN8owFnnNt0dNyb%2FpkBZ5SSkpT%2BmX4cBHumAUF%2FHP5HaL%2BDg8NsmqB6dpf%2F%2FwBGAAAHKwWwACYBlAAAAAcAQQTPAAAAAgA5AAAITwWwACAAKgAAMzUzMj4CNREnNSEVBxEhMhYWFRQGBiMhESEDFAIGBiMlITI2NTQmJiMhOShLa0QhowTIowFnm9t0dNub%2FdT%2BCAE1b7F%2BBJEBZ5OTQYNi%2FpmaRZPrpQITHH9%2FHP5kcMmEhMhwBRX97cn%2B3bxamql7UYNNAAIAUQAACJQFsAAkAC4AADM1NxEnNSEVBxEhESc1OwIVBxEhMhYWFRQGBiMhNTcRIREXFSUhMjY1NCYmIyFRo6MCC6MCxKOjxaOjAWec23R125v9MaP9PKMC5gFnlJNBg2P%2BmX4cBHscf38c%2FiYB2hx%2Ffxz%2BM2e7fn6%2Fa34cAgf9%2BRx%2BpZRxS3VD%2F%2F8Ac%2F%2FrBFwFxQIGAIAAAAABADT%2F7ASdBcYAJwAABSIkAjU1NBIkMzIWFxEjJyYmIyIGBgczIRUhIx4CMzI2NzczEQYGAry%2B%2FtymowEkwab8P4slMIxhjMpzCwYCSv21Bglww4Vjoiwliz%2F8FMABTtQV1gFNwIFQ%2Fv3OLzyC5paamuyHPi3O%2Fv1RfwAAAQBT%2F%2BwEqAXFACgAAAUiJicRMxcWFjMyNjY3JyE1ITcuAiMiBgcHIxE%2BAjMyBBIVFRQCBAIzp%2Fw9iiUromSBuWcHAv3WAisCB2jCjGKMLyWKKYy8b8ABG5qe%2FuQUgFABA84tPoLmlwWaBZjogjwvzgEDNV88vv6z1xXW%2FrO%2FAP%2F%2FAFEAAAJcBbAABgBBAAD%2F%2FwAbAAACkQc%2BAiYAQQAAAAcDYP%2FzASb%2F%2FwA8%2F%2BsETAWwAAYATgAAAAEAOAAABpoFsAAjAAAhNTcRIQcjESERIychETY2MzIWFREXFSE1NxE0JiMiBgcRFxUBU6P%2B%2BQ6pBJOpD%2F6pTJ5o8Pmj%2FfWji5lZplOjfhwEe6cBQv6%2Bp%2F5PFBTU7P7OHH5%2BHAEypIAWE%2F3THH4AAgAv%2F%2BcHdQXBAB8AMQAABSIkAicjERcVITU3ESc1IRUHETM2EiQzMgQSFRUUAgQnMjYSNTU0AiYjIgYCFRUUEhYE5q%2F%2B7qcP2KP99aOjAguj1gqlARezwQEopqb%2B2MGRzWxuzY%2BJxGhoxBmpASjA%2FiIcfn4cBHscf38c%2Ff3HATaywf6x0xXU%2FrLAoZIBBKsXqQEEkpP%2B%2FakXq%2F78kgACADj%2F%2BAUaBbAAHwAoAAAlFSE1NxEhAwYGIyImJzcWMzI2NxM3JiY1NCQzIRUHEQEiBhUUFjMhEQUa%2FfSj%2FtnbMX5LKjccHCEcKT0cywOcpAES8QJ2o%2F4tnKKkmQEOfn5%2BHAGg%2Fm1VWhQWiwowLQFfBTPNltDmfxz7hQR7loODowI%2FAAABAEr%2F%2BAXeBbAAJgAABScnMjY2NSYmIyIGBxEXFSE1NxEjByMRIREjJyERNjYzMgQVFAYGA%2FMFAmyFPAKhoD6ZRpD%2BCKPzD6gEk6kP%2FpRRlzX2ARJx2wYCjUSEYI%2BXGRX98Rx%2BfhwEe6cBQv6%2Bp%2F4zFh7y2ZDFZAABAJD%2F6wZcBbAAIgAABSImJjURMxEUFjMyNjURMxEUFjMyNjURMxEUBgYjIiYnBgYCH3izZMVvW2yFzHpkY3rFabx9baovM7EVXriGBCn7136Eg38EKfvXfoSEfgQp%2B9eGuF5XVlZX%2F%2F8ARgAABQAFsAImAZQAAAAHA3cAHgFfAAEAOf%2FsBskFxgA6AAAFIiQCJzQ0NSMRFxUhNTcRJzU7AhUHETM2EiQzMhYXESMnJiYjIgYGBxchFSEHHgIzMjY3NzMRBgYE6LX%2B46oLwKP99aOjo8Wjo8MSqwEVsqb8P4slMIxhiMdzDAMCH%2F3dAwRtxodjoiwliz%2F8FLIBN8cDBQP98xx%2BfhwEexx%2Ffxz%2BLb4BIqSBUP79zi88e9qOBpsFnPSMPi3O%2Fv1RfwACADQAAAVXBbAAEwAZAAAzNTcBMwEXFSE1NwMjESMRIwMXFRMhAycjBzRoAdqoAdFo%2Fl5xaZvEjmxxNAF8qw4GDH4PBSP63Q9%2BfhMBOP43Acn%2ByBN%2BAm0B%2BCgiAAIAKAAAB3wFsAAlACsAADM1NxEnNTsCFQcRIQEzARcVITU3AyMRIxEjAxcVITU3EyERFxUBIQMnIwcoo6OjxaOjAd4BLagB0Wj%2BXnFpm8SObHH%2BX2hy%2Fl2jAfsBfKsOBg9%2BHAR7HH9%2FHP1ZA0L63Q9%2BfhMBOP43Acn%2ByBN%2Bfg8BPf7QHH4CbQH3KSoAAgA3AAAHMgWwADEANwAAMzU3NTQ2MzIyMwEnNSEVBwEyMjMyFhUVFxUhNTc1NCYjIwcRFxUhNTcRJyMiBhUVFxUBMzcBIQE3o%2FfwCRMJ%2FtOQBSSP%2FtMFDAXv%2BaP99aOKmXQZo%2F31oxGDmYmjAXQKEQEL%2Fb4BDn4c2erRAe4Vf38V%2FhLR6tkcfn4c2aJ%2BFv4dHH5%2BHAHeG36i2Rx%2BAy4dAcr%2BMAADADgAAAloBbAADwBBAEcAADM1NxEnNSEVBxEhFSERFxUzNTc1NDYzMjIzASc1IRUHATIyMzIWFRUXFSE1NzU0JiMjBxEXFSE1NxEnIyIGFRUXFQEzNwEhATijowILowP5%2FAejKqP38AkTCf7TkAUkj%2F7TBQwF7%2Fmj%2FfWjipl0GaP99aMRg5mJowF0ChEBC%2F2%2BAQ5%2BHAR7HH9%2FHP4am%2F4GHH5%2BHNnq0QHuFX9%2FFf4S0erZHH5%2BHNmifhb%2BHRx%2BfhwB3ht%2BotkcfgMuHQHK%2FjAAAgAq%2FkQDswc%2BADYAPwAAAS4CNTQ2MzMyNjU0JiMjNTMyNjU0JiMiBgcHIzc2NjMyFhYVFAYHFhYVFAYGIyMiBhUUFhYXARczNzUjBycjAWRKeUizoSmClaSej4%2BakpCITXcmDZ4BQ8%2BCi9h6gnKBinnXjTFMRStILP7n%2BHf2oJGTof5EH157SoGAlXeFhpt%2FcmiNKSOq8UtVZbZ5Z6QsKbB%2FhcBmOzUvRDIUCGLu7RqUlAD%2F%2FwA3AAAGQAWwAgYCjQAAAAMAT%2F%2FrBVgFxQARABwAJwAABSIkAjU1NBIkMzIEEhUVFAIEJzI2NjcnIQceAgEhNy4CIyIGBgcCybz%2B4qCgAR68wQEopqb%2B2MGGw3AJAvyVAglruv7SA24CB2%2FGh4G9awYVwAFO1BXTAU%2FBwf6x0xXU%2FrLAoXzflQUFlN99ApAFl%2BiDg%2BiXAAABADkAAAU0BcQAFgAAIQEnNSEVBwEXMzcTNjYzFwcjIgYGBwECbP4zZgGudAEqIQYh%2FTGDbDIBDCEwJhP%2BeAUiD39%2FFPxheXkDJZyFAakbPzX7df%2F%2FADkAAAU0Bz4CJgGtAAAABwNuANcBJv%2F%2FAEb%2BSwnbBcUAJgBgAAAABwFeBUcAAP%2F%2FAE0AAARtBbACJgF0AAAABgN3JQwAAQBN%2FuIEhgWwACIAAAEnJzI2NjUmJiMjERcVITU3ESc1IREjJyERMzIEEhUUDgICsAYCZXs5AsjJeaP99aOjBCCpD%2F4Aeb0BDY4%2Bd6%2F%2B5AKOW7F%2FytP9%2Fhx%2BfhwEexx%2F%2Fr6n%2FiyK%2Fv21hMqKRf%2F%2FAD7%2BmQfTBbsCJgF7AAAABwOZBtIAAP%2F%2FAEn%2BmQReBcUCJgF8AAAABwOZAdEAAP%2F%2FAEf%2BmQVnBbsCJgGBAAAABwOZBHoAAAACAEYAAAWEBbsAIgAmAAAzNTcRJzUhFQcRIRM2NjMyFhcHJiYjIgYHAwEXFSEBIREXFQMRMxFGo6MCC6MBP%2B45fFkwSiEdFSsWMT8h6gFaiv7V%2Frb%2BqaNAnX4cBHscf38c%2FgsB2nVMFxWKBAYxPf5N%2FaQUfgJ6%2FiAcfgGcAoz9dAD%2F%2FwBHAAAFZwW7AiYBgQAAAAcDdwAfAWMAAQAUAAAG0QW7ACcAACE1NxEhByMRIRUHETMBNjYzMhYXByYmIyIGBwEBFxUhNTcnASMRFxUBsaP%2Bdw%2BoA6ijnwFJUXhPL0EkHRspFC9BK%2F7HAeSJ%2FiJvB%2F56vKN%2BHAR7pgFBfxz%2BCwHacFEXFosFBzI8%2Fkz9qhl%2Bfg4JAeX%2BIBx%2B%2F%2F8AUf6ZBdkFsAImAD4AAAAHA5kE7AAAAAEAMAAAB7oFsAAfAAAzNTcRJzU7AhUHESERJzUhESMnIREXFSE1NxEhERcVMKOjo8WjowLCowQDqA%2F%2BHKP99aP9PqN%2BHAR7HH9%2FHP4JAfccf%2F6%2FpvuFHH5%2BHAHp%2FhccfgAAAQBN%2FuIHzgWwACgAAAEnJzI2NjUmJiMjERcVITU3ESERFxUhNTcRJzUhFQcRMzIEEhUUDgIF%2BAYCZXs5AsjJOKP99aP9PKP99aOjBZSjOL0BDY4%2Bd6%2F%2B5AKOW7F%2FytP9%2Fhx%2BfhwEe%2FuFHH5%2BHAR7HH9%2FHP4siv79tYTKikUAAgBq%2F%2BIFlAXCAC4APgAABSInBiMiJAI1NTQSNh8CIgYGFRUUFhYzMjY3JgI1NTQ2NjMyFhYVFRQCBxYWMyU2NjU1NCYmIyIGBhUVFBYFlOCsjqq2%2Fuubc8qDBgFPdD9nu38hPx96g2i5enq5aHFnM3I%2F%2FmldaTRgQkFgNXgeSkG3ATzJobYBH6MDAph61omjnfSKBwdhARip3p76kIz5o%2FOe%2FvNfDg1sP%2B2R8nSvYmWwcOOZ7v%2F%2FAFD%2BmQSWBcUAJgAcAAAABwOZAjcAAP%2F%2FAGD%2BmQUaBbACJgCIAAAABwOZAtYAAP%2F%2FAEEAAAV0BbACBgCnAAD%2F%2FwBBAAAFdAWwAiYApwAAAAcDdwGB%2Fzf%2F%2FwBQ%2FpkFqQWwAiYApgAAAAcDmQS8AAAAAQBN%2FqEG%2BAWwABkAAAERITU3ESMHIxEhESMnIxEhESc1IRUHETMRBjX7FKPoDqkDuqkPngLEowILo77%2BoQFffhwEe6cBQv6%2Bp%2FuFBHscf38c%2B4X%2BB%2F%2F%2FADv%2BmQW6BbACJgGPAAAABwOZBM0AAAACADsAAAW6BbAAHwAjAAAhNTcRBgYjIiY1ESc1IRUHERQWMzI2NxEnNSEVBxEXFQERMxEDrqNfsnrw%2BKMCC6OKmWjAY6MCDKOj%2FN2efhwBwR0a0u4BMRx%2Ffxz%2Bz6V%2FHBsCHhx%2Ffxz7hRx%2BATwCvf1DAAABADoAAAW5BbAAIQAAMzU3ESc1OwIVBxE2NjMyFhURFxUhNTcRNCYjIgYHERcVOqOjo8ajo2Cxeu%2F5o%2F31o4uYacBio38cBHscfn4c%2Fj8bHNPt%2Fs8cf38cATGkgB0b%2FeMcfwAAAgA7%2F%2BkFuAXDACIALQAABSIkAjU1JiY3MxQWFzU0EjYzMhYSFRUhFRQWFjMyNjcXBgYBITU0JiYjIgYGFQPnwv7rk56kB5dQVJD1mbDxfPyKXLuObJpJMTLA%2Fc0CsUeYeWubUxedARq8ZhTHnF16FAS1ARqioP7Vz21gjdV3LiaLJD8DWiCJzHB71YYA%2F%2F8AO%2F6ZBbgFwwImAcUAAAAHA5kDIwAA%2F%2F8AUQAAAlwFsAAGAEEAAP%2F%2FAD4AAAfTBz4CJgF7AAAABwOYAqQBJgABAEb%2B3wUzBbAAKAAAAScnMjY2NSYmIyERFxUhNTcRJzUhFQcRMwEzFQcBBzIWFxYAFRQOAgM4BgJlfDkCyMr%2B%2BKP99aOjAgujfwIJ%2FZr%2BdgUCDgfnAQc%2BeK%2F%2B4QKOW7CAytL%2BAhx%2BfhwEexx%2Ffxz%2BKQJyfxv%2BKgYBARj%2B1PiEyopFAP%2F%2FADn%2BZgWhBbACJgGDAAAABwLoBGb%2FnQABAE3%2BSwXfBbAAJAAAASImJzcWFjMyNjURIREXFSE1NxEnNSEzFQcRIREnNSEVBxEUBgP2HzUcDg1EETxF%2FT6j%2FfWjowFoo6MCwqMCC6Os%2FksJCZYFCGdaAtz%2BFxx%2BfhwEexx%2Ffxz%2BCQH3HH9%2FHPqSp7UA%2F%2F8AUf5mBdkFsAImAD4AAAAHAugEnv%2Bd%2F%2F8AO%2F6ZBboFsAImAY8AAAAHA5kEzQAA%2F%2F8AXv5mB2AFsAImAFgAAAAHAugGJf%2Bd%2F%2F8ARgAABbcHPgImAAEAAAAHA5gBowEm%2F%2F8ARgAABbcHPgImAAEAAAAHA2ABnwEm%2F%2F8AMwAAB94FsAIGABkAAP%2F%2FAFEAAASmBz4CJgAmAAAABwOYAS4BJv%2F%2FAE7%2F6wUBBcUCBgCHAAD%2F%2FwBO%2F%2BsFAQc%2BAiYAhwAAAAcDYAE%2BASb%2F%2FwA%2BAAAH0wc%2BAiYBewAAAAcDYAKgASb%2F%2FwBJ%2F%2BsEXgc%2BAiYBfAAAAAcDYADrASYAAQBQ%2F%2BsEEgWwACUAAAUiJiY3NzMUFhYzMjY1NCYjIzUBJyEHIxEhFwEVMjIXFhYVFAYGAiOA1n0DAr1FfFCKoKKfkwF5Av5ADqkDZQH%2BZgIICtDpfd8VYLuIBkx7SJV4mY%2BaAbwFpwFCeP4cBwEP4sWFwGYA%2F%2F8ATQAABd8G%2FgImAX0AAAAHA2wBhQEm%2F%2F8ATQAABd8HPgImAX0AAAAHA2ABswEm%2F%2F8ARv%2FrBQEHPgAmAGAAAAAHA2ABQQEm%2F%2F8AT%2F%2FrBVgFxQIGAawAAP%2F%2FAE%2F%2F6wVYBz4CJgGsAAAABwNgAWUBJv%2F%2FAFP%2F7ASoBz4CJgGbAAAABwNgAM8BJv%2F%2FADb%2F6wUUBv4CJgGLAAAABwNsAQ4BJv%2F%2FADb%2F6wUUBz4CJgGLAAAABwNgATwBJv%2F%2FADb%2F6wUUBz4CJgGLAAAABwNkAV8BJv%2F%2FADsAAAW6Bz4CJgGPAAAABwNgAZgBJv%2F%2FAE3%2BmQRtBbACJgF0AAAABwOZAWsAAP%2F%2FAEYAAAcrBz4AJgGUAAAAJwBBBM8AAAAHA2ACUAEm%2F%2F8ATf5LBG0FsAImAXQAAAAmA3clDAAHA5oA5QAA%2F%2F8AUP5LBakFsAImAKYAAAAHA5oENgAAAAIAUAAABakFsAADAB8AAAE1IRUBNTcBASc1IRUHAQEnNSEVBwEBFxUhNTcBARcVAaYCtfv1fgHD%2Fl5%2FAdiJAUIBMowB24X%2BdQG2gf4ijf6n%2FqiFApqbm%2F1mfhYCTwI4Fn9%2FDf4%2FAcENf38W%2Fcj9sRZ%2Bfg0B2f4nDX4AAgBPAAAFCAWwABIAHAAAISImJjU0NjYzIREnNSEVBxEXFSUhESEiBgYVFBYCOZvbdHPbnAFnowILo6P9MQFn%2FpljgkCRcMiEg8RtAaUcf38c%2B4UcfpoCO0l%2BUHupAAIATwAABmEFsAAgACoAACEiJiY1NDY2MyERJzUzIRUHETc2Njc2JiczFhYHDgIjJSERISIGBhUUFgI5m9t0c9ucAWejowFoo1RqcwQBHx6%2BISQCA3C%2Bdf2AAWf%2BmWOCQJFwyISDxG0BpRx%2Ffxz7hAEBjX5Np09kl0iIvGKaAjtJflB7qQAAAQAw%2F%2BgF1gWwADYAAAUGJic1NCYjIzUzMjY1NCYjIgYHByM3NjYzMhYVFAYHFhYVFQYWMz4CNzQmJyc1MxYWBw4CBCygrwiJc7%2BHp5N9hFOCKQ6eAUbZitvrdW92aAFQQ0dkNgMNDFr1IiIBA3G%2BFQOdq0J2kZt9g3qHKiKq8EtW1clwpTEosIBETF8BYLF6P4REDX%2BGs1qx9YAAAgAb%2FsEEEgWuACkANAAAIS4CNTU0JiMjNTMyNjU0JiMiBgcHIzc2NjMyFhUUBgcWFhUVFBYWFxUDJzY2NTUzFRQGBgL%2FGxsIiXS%2FiKaTfYRTgSoOngFG2Yrc6nVvdmkNHhltby8wxSxSF0xbL4R2kZp%2Fg3mHKiKr8UtV08lxpTEosICILU8%2FFxn%2BwUpIllSYlUGNggAAAQA3%2F%2BgHZgWwACkAAAUGJicRIREQAiMjNTMyEhERJzUhMxUHEQYWMzY2NzQmJyc1MxYWBw4CBYGqugj%2BKNf6NSmUhaMEBaOjAVpNh5MEDQ1a9iEkAgOA2RUDscADvP3r%2FnL%2BjpoBIAFGAhUcf38c%2FERfdQHSuUCEQw1%2Fer1csfZ%2FAAEARv%2FoB70FsAAvAAAFBiYnESERFxUhNTcRJzUhMxUHESERJzUzIRUHEQYWMzY2NzQmJyc1MzcWFgcOAgXXqboI%2FUKj%2FfWjowFoo6MCvqOjAWijAVpNh5QEDQ1ZNr4iJAIDgNkVA7HAASr%2BFxx%2BfhwEexx%2Ffxz%2BCQH3HH9%2FHPxEX3UB0rlAhEMNfgF8u1yx9n8AAQBy%2F%2BsEmQXFACoAAAUiJAI1ETQSJDMyFhcHJiYjIgYGFREUFhYzNjY3NCYnJzUzHgMVDgICtav%2B%2B5OTAQWrcLJEPkOQVXWrXl6rdYeUBAoKVfUVGAoCA4DaFaABF7MBBrMBF6AtK4chI3rRgv74hNJ6AZqJM287DX9jbj4zJ5DHZwAAAQBN%2F%2BgFdQWwACEAAAUGJicRIQcjESERIychEQYWMzY2NzQmJyc1MzcWFgcOAgOPqboI%2FuAPqASAqQ%2F%2B1AFbTIeVBA0NWje%2BIiMCA4DZFQOxwAO8pwFC%2Fr6n%2FERfdQHSuUCEQw1%2BAXy7XLH2fwABAGr%2F6wTPBcUALwAABSIkJjU0NjcmJjU0JCEyFhYHByM0JiYjIgYVFBYzMxUjIgYVFBYzMjY2NTMXFgYGAqqs%2Fv2Rjod5hgEpAQGV8YoDAbxamF6ys6awt7e1t8myaaBbvAIDlPoVZsCFfq0qMKZlx9hks3UGRnBBkHBzg5yBhXiVSHtMBom6YP%2F%2FADn%2BSwWhBbACJgGDAAAABwOaBC4AAAABAHL%2BgQS5BcUAHgAAAREmJgI1ETQSNjMyFhYHByM0JiMiBgYVERQWFjMzEQJOj9Z3jvulpfGDAwK9s6RuollZom5y%2FoEBcBOnAQekAQOzARihd9iRBpmyetKD%2FvuF0nr9%2FAD%2F%2FwBGAAAFAAWwAiYBlAAAAAcDdwAeAV8AAwBHAAAE2wWwAAMAFwAgAAABATcBATU3ESc1MyEyFhYVFAYGIyERFxUDITI2NTQmIyEEaP6KdAF1%2B2yjo6MB%2BpzcdHTcnP7Lo6MBNZSTk5T%2BywHqAZZo%2Fmr9rn4cBHscf23Eg4TEbP5SHH4C4p95eaL%2F%2FwBP%2F%2BsEHQROAgYAswAAAAIAav%2FrBDIGEQAjADUAAAUiJiY1NTQSNjc2NjUzFxYOAgcOAgcXNjYzMhYWFRUUBgYnMjY2NTU0JiYjIgYGFRUUFhYCTpXZdnnel35xmAICKViIXVuVYQ8EO7NlichtdtmVXoBBQoBfXn9AQIAVh%2B%2BbjNUBOL4eF0BJBlhuQiYQD1OPagU%2FUH7djxab74eaYaltFmCYWFiYYBZtqWEAAwBhAAAElwQ6ABMAHAAkAAAzNTcRJzUzITIWFRQGBxYWFRQGIyUhMjY1NCYjITUzMjY1NCMjYaOjowGq1uxcVGVy3cf%2B1gEqbnBwbv7W5n1%2F%2FeV%2BHAMFHH%2BVlUx3HxmJWJicmFNOTVSXSkubAAABAEgAAAO7BDoADQAAMzU3ESc1IREjJyERFxVIo6MDc4AO%2FoOjfhwDBRx%2F%2Ful7%2FPwcfgD%2F%2FwBIAAADuwYYAiYB9wAAAAcDYwF5AAAAAQA%2BAAADoAUDAA4AADM1NxEnNTMhNzMRIREXFT6jo6MCFyeB%2FgajfhwDBRx%2Fyf6b%2FPwcfgAAAgBC%2FsIExwQ6ABUAHAAAEwMzPgM3Nyc1ITMVBxEzAyMRIRETIREhBwYGVRNVKj4uHQcKnQNmo6OQFLH9F3QB5f7ACQtR%2FsIB2DBfc5ts%2FRt%2Ffxz8%2B%2F4oAT7%2BwgHYAvHotP4A%2F%2F8ASv%2FrA9QETgIGANgAAP%2F%2FAEr%2F6wPUBhgCJgDYAAAABwNiAMkAAP%2F%2FAEr%2F6wPUBhgCJgDYAAAABwNgALUAAAABACcAAAaCBE0AOQAAMzU3AQMmJiMiBgcnNjYzMhYXEzMRJzUhFQcRMxM2NjMyFhcHJiYjIgYHAwEXFSEBIxEXFSE1NxEjASeaARm1HUEpFQwrHCU8L0t9Mrt3owILo4G7MX1NLj0kGysNFCpCG7sBFZn%2B0v7nhKP99aOF%2Fuh%2BFgGiARArMAIHhhgXWlP%2B0QEuHH9%2FHP7SAS9TWhgXhgcCMCv%2B6P5mFn4By%2F7PHH5%2BHAEx%2FjUAAAEAVv%2FtA6oETAAuAAAFIiYmNzczFBYWMzI2NTQmIyM1MzI2NTQmIyIGBhUjJyY2NjMyFhUUBgcWFRQGBgICdsRyAwK7PGtFa3Znbby8aFlmaD5jOrsCBGu8db7WWE%2B7ar8TTJVsBjNVNGNKV1CgT0tEXi1MLwZdjVCjl0l6I0K5ZZFOAAEAYQAABRMEOgAZAAAzNTcRJzUhMxUHERcBMzMVBxEXFSE1NxEnAWGjowFno6MGAd3Fo6Oj%2FfWjBv4jfhwDBRx%2Ffxz9nQIDAH8c%2FPscfn4cAmQC%2FQD%2F%2FwBhAAAFEwYYAiYCAAAAAAcDmAFhAAD%2F%2FwBhAAAFEwYYAiYCAAAAAAcDYgFxAAD%2F%2FwBh%2FmYFEwYYAiYCAAAAACcDmAFhAAAABwLoA9j%2FnQABAGEAAAS%2BBE0AIgAAMzU3ESc1IRUHETMTNjYzMhYXByYmIyIGBwMBFxUhASMRFxVho6MCC6No4j11SS48JhwrDRQlRxvRAVWL%2Fvn%2BkoCjfhwDBRx%2Ffxz%2B0gEvVVgXGIYHAjYl%2FvH%2BYBl%2BAcv%2Bzxx%2BAP%2F%2FAGEAAAS%2BBhgCJgIEAAAABwNjAdcAAAABAEUAAATKBDoAGQAAMzc3MjY2NREnNSEzFQcRFxUhNTcRIREQAiNFAylHUiSjA5yjo6P99aP%2BkanNqAFZx6MBMxx%2Ffxz8%2Bxx%2BfhwDBP7O%2FsD%2B1AABAGEAAAZjBDoAHQAAMzU3ESc1MzMBMwEzMxUHERcVITU3EScBIwEHERcVYaOjo%2F4BYAYBYfejo6P99aMG%2FrSI%2Fq4Go34cAwUcf%2FzIAzh%2FHPz7HH5%2BHAJVAv0PAwEC%2FZscfgAAAQBhAAAFEwQ6AB0AADM1NxEnNSEVBxEhESc1OwIVBxEXFSE1NxEhERcVYaOjAgujAeGjo8ajo6P99KP%2BH6N%2BHAMFHH9%2FHP7HATkcf38c%2FPscfn4cATL%2Bzhx%2BAP%2F%2FAE7%2F6wQWBE4ABgEXAAAAAQBhAAAFEwQ6ABMAADM1NxEnNSEVBxEXFSE1NxEhERcVYaOjBLKjo%2F31o%2F4eo34cAwUcf38c%2FPscfn4cAwT8%2FBx%2BAP%2F%2FACL%2BYARfBE4ABgEwAAD%2F%2FwBO%2F%2BsD3AROAgYAzgAAAAEATgAABE4EOgAPAAAhNTcRIwcjESERIycjERcVAUaj5A%2BoBACpD%2BijfhwDB6kBQv6%2Bqfz5HH7%2F%2FwAY%2FksElAQ6AgYBXgAA%2F%2F8AGP5LBJQGGAImAV4AAAAHA5gA9QAAAAMAW%2F5gBWQGGAApADgARwAAATU3EQYGIyImJjU1NBI2MzIWFxEnNSERNjYzMhYSFRUUBgYjIiYnERcVATI2NxEmJiMiBgYVFRQWITI2NTU0JiYjIgYHERYWAdGjIEkpfa5cW69%2FKEggowFoIlAvfrBcXK99L1Iio%2F44HDAUFC8bV2wzcwINgX04cVceMhUUM%2F5gfxwBCgwOgeudFa8BBpAODAFJHH%2F%2BFg8RkP76rxWd64EQDv7yHH8CJQcHAxIGCGvAfxWnyMqlFX3AbQkI%2FPEHBwD%2F%2FwAqAAAEiwQ6AgYBXQAAAAEAQQAABOMEOwAiAAAhNTc1BgYjIiYmNTUnNSEzFQcVFBYWMzI2NxEnNSEVBxEXFQLYozp4Q4O7ZKMBaKOjMWNJQng7owILo6N%2BHOgPDly1h6Qcfn4cpFdvNg8PAYAcf38c%2FPscfgAAAQBG%2Fr8E%2BAQ6ABUAAAERITU3ESc1IRUHESERJzUhFQcRMwMEF%2Fwvo6MCC6MB4qMCC6OFE%2F6%2FAUF%2BHAMFHH9%2FHPz7AwUcf38d%2FPz%2BJQAAAQBhAAAG7wQ6ABkAADM1NxEnNSEzFQcRIREzESERJzUhMxUHERcVYaOjAWijowF8xQF9owFoo6OjfhwDBRx%2Ffxz8%2BwOg%2FGADBRx%2Ffxz8%2Bxx%2BAAEAVf6%2FBu4EOgAbAAABESE1NxEnNTsCFQcRIREzESERJzUhFQcRMwMGK%2Foqo6OjxaOjAXzFAX2jAgujrhT%2BvwFBfhwDBRx%2Ffxz8%2BwOg%2FGADBRx%2Ffxz8%2FP4kAAEAYv6cBRQEOgAYAAABESE1NxEnNSEzFQcRIREnNSEVBxEXFSERAlv%2BB6OjAWijowHiowILo6P%2BDP6cAWR%2BHAMFHH9%2FHPz7AwUcf38c%2FPscfv6cAAIAYQAABGsEOgAQABkAAAEyFhUUBiMhNTcRJzUhFQcVATI2NTQmIyERAtXA1te%2F%2FYyjowILowEMa2Vmav70AsbDnJ3KfhwDBRx%2FfxzZ%2FdRxVVJ6%2Fm4AAgAfAAAFKgQ6ABIAGwAAITU3ESMHIxEhFQcVITIWFRQGIyUhMjY1NCYjIQEgo%2B0OqQMMowEMwNbXv%2F70AQxrZWZq%2FvR%2BHAMFpgFBfxzZw5ydyppxVVJ6AAMAYQAABowEOgAIABIAIwAAJSEyNjU0JiMhATU3ESc1IREXFQEyFhUUBiMhNTcRJzUhFQcVAckBDGtlZmr%2B9AK4o6MBaKP8ScDW17%2F9jKOjAgujmnFVUnr91H4cAwUcf%2FxgHH4CxsOcncp%2BHAMFHH9%2FHNkAAgBBAAAGngQ6AB4AJwAAMzc3MjY2NREnNSEzFQcRITIWFRQGIyE1NxEhERACIyUhMjY1NCYjIUEDKUdXKaMDEf2jAQzA1te%2F%2FYyj%2FsKyzgODAQxqZmVr%2FvSeAWDLogEzHH9%2FHP8AuZOUv34cAwT%2Bzv7C%2FtKYcE1JZwACAGEAAAcSBDoAIgArAAAzNTcRJzUhFQcVITUnNTsCFQcRITIWFRQGIyE1NxEhERcVJSEyNjU0JiMhYaOjAgujAeGjnM2jowEMwNbXv%2F2Lo%2F4fowIEAQxqZmVr%2FvR%2BHAMFHH9%2FHP39HH9%2FHP7%2FuJOUv34cAW%2F%2BkRx%2BmHBNSWcA%2F%2F8AaP%2FrA6UETgIGATcAAAABAHL%2F6wQEBE4AKAAABSImJjU1NDY2MzIWFxcjJyYmIyIGBgcXIRUhBx4CMzI2NjUzFxYGBgJXndlvcNidgs9ECZ0rI25FXno%2BAwIBbP6UAgM9el9BcUWxAgN2xBWN9ZsqmvSOVkvwqiIqVpNcBZoFXpNUOF47Bl2jZQAAAQBd%2F%2BsD8QROACgAAAUiJiY3NzMUFhYzMjY2NychNSE3LgIjIgYHByM3NjYzMhYWFRUUBgYCDHPGdgQCskVwQmB6PAMC%2FnABjwIFP3lbRm4jKp4KQ8%2BDnNlwcNgVZaNdBjteOFiYYAWaBVmOUyoiqvBLVo70miqb9Y0A%2F%2F8AQwAAAk4GGAAmAPUAAAAHA2EAtAAA%2F%2F8ACQAAAn8GGAImAPUAAAAGA2DhAP%2F%2F%2F8j%2BSwF9BhgAJgECAAAABwNhAIYAAP%2F%2FADEAAATnBhgCJgDxAAAABwN3AAkB6wACAEX%2F6wZ7BE4AHQAvAAAFIiYmJyERFxUhNTcRJzUhESE%2BAjMyFhYVFRQGBicyNjY1NTQmJiMiBgYVFRQWFgSYjdF6C%2F74o%2F31o6MBaAEJDXzOiZXadnbYlV2AQUGAX19%2FQEGAFXzekv7DHH5%2BHAMFHH%2F%2BN43XeY74oRah%2BI2aZrNzFnGzaGizcRZzs2YAAgBBAAAEvQQ6ABYAHwAAMzU3EyYmNTQ2NjMhFQcRFxUhNTcRIQETIREhIgYVFBZBjrlnb2S6gQJso6P99aP%2B9f8A8wEY%2FvxrbmN%2BFQEuJaBpYZZUfxz8%2Bxx%2BfhwBCv5cAj8BYmtJSGYAAAEAH%2F5LBFEGGAAtAAABIiYnNxYWMzI2NRE0JiMiBgcRFxUhNTcRIzUzNSc1IREzFSMVNjYzMhYVERQGAwwgNRwPDUQRPERzclGFK6P99aPCwqMBaNbWOKJjrsCr%2FksJCZYFCGdaAwGGgE1C%2FXscfn4cBAJxcBx%2F%2FvVx8k5W0Nj9Aae1AAEAlv%2FrBb4EOgAgAAAFIiY1ETMRFBYzMjY1ETMRFBYzMjY1ETMRFAYjIiYnBgYB%2FaLFxVhKWnDGY1NRZcXSqV6SKy%2BbFb%2B2Atr9JmxvcGsC2v0mbG9wawLa%2FSa2v0hHR0gAAgBLAAAEcQYYABcAIAAAMzU3ESM1MzUnNSERIRUhESEyFhYVFAYjJSEyNjU0JiMhZ6O%2Fv6MBaAFB%2Fr8BDIC2YNe%2F%2FvQBDGtlZmr%2B9H4cA6CaqRx%2F%2Frya%2FrJdp26l1Zp8XVqFAAEAWP%2FrBicETgA0AAAFIiYmJyMRFxUhNTcRJzUzMxEzPgIzMhYXFyMnJiYjIgYGBxchFSEHFhYzMjY2NTMXFgYGBHqT0XUK16P99aOjo8XXCXXSk4LPRAmdKyNuRV56PgMCAWj%2BmAIFho5BcUWxAgN2xBV82o3%2BzBx%2BfhwDBRx%2F%2Fi6N235WS%2FCqIipWk10FmgWMuDheOwZdo2UAAAIAPAAABHUEOgAPABUAADM1NwEzARcVIwMjESMRIwMTIQMnIwc8RgGAqQGCSNh3asRxdLEBJH4SBhJ%2BDQOv%2FFENfgEm%2FtoBJv7aAcEBOEREAAACACoAAAabBDoAHgAkAAAzNTcRJzUzMxEhATMBFxUjAyMRIxEjAyM1NzchFRcVASEDJyMHKqOjo8UBlAECqQGCSNh3asRxdNdGP%2F6rowG1ASR%2BEgYSfhwDBRx%2F%2FYcCefxRDX4BJv7aASb%2B2n4NmoscfgHBAThERAACAEQAAAX%2BBDoALQAxAAAzNTc1NDY3NjIzAyc1IRUHAzIyFxYWFRUXFSE1NCYjIwcRFxUhNTcRJyMiBhUVATMTIUR8yr4LCwTFjgQwjcUEDg%2Bywnz%2Bv3eEMwij%2FfWjBT2FdgGhBqv%2BoX4cCN3RCgEBSxV%2FfxX%2BtQIN0tgIHH6ion4J%2FuEcfn4cAR8JfaOiAmIBPAAAAwASAAAIEwQ6AA0AOwA%2FAAAzNTcRJzUhESEVIREXFTM1NzU0Njc2MjMDJzUhFQcDMjIXFhYVFRcVITU0JiMjBxEXFSE1NxEnIyIGFRUBMxMhEqOjAWgDX%2Fyhozx8yr4LCwTFjgQwjcUEDg%2Bywnz%2Bv3eEMwij%2FfWjBT2FdgGhBqv%2BoX4cAwUcf%2F4jm%2F7YHH5%2BHAjd0QoBAUsVf38V%2FrUCDdLYCBx%2BoqJ%2BCf7hHH5%2BHAEfCX2jogJiATwAAgAf%2FkQDYAYYADYAPwAAAS4CJzQ2MzMyNjU0JiMjNTMyNjU0JiciBgcHIyc2NjMyFhYVFAYHFhYVFAYGIyMiBhUUFhYXAyc1Mxc3MxUHATtKeUcBs6EpcH6Qio6OhIB0ckVtIw6cAT%2FFfH7BbGlcanFuxIExS0YrSSwk%2BKGTkaD2%2FkQfXntKgYBTSVFSm1tMQ10BHxmU2kJKUJBfSnwlIXtWZI1KOzUvRDIUBk7uGZSUGu3%2F%2F%2F%2F%2F%2FiYFuwROAgYCsQAAAAMAaP%2FrBDAETgARABwAJwAABSImJjU1NDY2MzIWFhUVFAYGJzI2NjcnIQceAgMhNy4CIyIGBgcCTZbZdnbYlZXadnbYlVV5QwUC%2FdUCBUN6vwIpAgdFeFNUd0QHFY34oRag%2BY6O%2BKEWofiNmlSWYQUFYZZUAesFXY9SUo9dAAEAQQAABFYETQAZAAAhASc1IRUHExczNxM2NjMyFhcHJiYjIgYHAQHz%2FrVnAaF2vhIGE5UphFIiMhkWBRYNIDsN%2FtgDrA9%2FfxT9mE1NAhd%2FeAoPlwMFNCr8uQD%2F%2FwBBAAAEVgYYAiYCMAAAAAYDblwA%2F%2F8ATv5LCO4ETgAmARcAAAAHAV4EWgAA%2F%2F8ASAAAA7sEOgImAfcAAAAHA3cAIP9TAAEAPv7kBCUEOgAhAAABJz4CNSYmIyMRFxUhNTcRJzUzIREjJyERMzIWFhUOAgKiM1ZqMQKsjICj%2FfWjo6MC0IAO%2FoOAl%2BaCAVes%2FuSVF1V4TZOk%2Frkcfn4cAwUcf%2F7pe%2F7odNWTXcCSAP%2F%2FACf%2BmQaCBE0CJgH%2BAAAABwOZBZUAAP%2F%2FAFb%2BmQOqBEwCJgH%2FAAAABwOZAXYAAP%2F%2FAGH%2BmQS%2BBE0CJgIEAAAABwOZA9EAAAACAFoAAAUGBE0AIgAmAAAzNTcRJzUhFQcRIRM2NjMyFhcHJiYjIgYHAwEXFSEBIREXFQMRMxFao6MCC6MBE6cydEsuPCYcKw0UKTcdogEYeP7w%2FvP%2B2aNYnX4cAwUcf38c%2FtIBL1VYFxiGBwItLv75%2FlMUfgHL%2Fs8cfgEMAjj9yAAAAQBIAAAEtgYYACQAADM1NxEjNTM1JzUhFSEVIREzEzcnNSEVBwEBFxUhNTc3ASMRFxVSo62towFoAQP%2B%2FX7kA2MBxYT%2B4wFbe%2F4%2FYQT%2B4YGjfhwD7JtcHH%2F3m%2F4KARsDDX9%2FGv6s%2FkkYfn4MAQFo%2FqccfgABAFIAAAYBBE0AJAAAITU3ESEHIxEhFQcRMxM2NjMyFhcHJiYjIgYHAwEXFSEBIxEXFQGko%2F7CDqkDXaNo4j11SS48JhwrDRQlRxvRAVWL%2Fvn%2BkoCjfhwDBKUBQX8c%2FtIBL1VYFxiGBwI2Jf7x%2FmAZfgHL%2Fs8cfv%2F%2FAGH%2BmQUTBDoCJgIIAAAABwOZBCYAAAABAFUAAAX%2BBDoAHwAAMzU3ESc1OwIVBxEhESc1IREjJyMRFxUhNTcRIREXFVWjo6PFo6MB4aMDA6kP4qP99KP%2BH6N%2BHAMFHH9%2FHP7HATkcf%2F6%2Fpfz8HH5%2BHAEy%2Fs4cfgABAFX%2B5AbHBDoAJwAAASc%2BAjUmJiMjERcVITU3ESERFxUhNTcRJzUzIRUHETMyFhYVDgIFRDNVazECtpZQo%2F31o%2F4eo%2F31o6OjBA%2BjUJ3vhwFYq%2F7klRdVeUyTpf64HH5%2BHAME%2FPwcfn4cAwUcf38c%2Fuh01pNcwJMAAAIAcP%2FrBKUETwAuAD4AAAUiJgI1NTQ2NhcXFSIGBhUVFBYWMzI2NyYmNTU0NjYzMhYWFRUUBgcWMxUiJwYGEzM2NjU1NCYmIyIGFRUUFgJdkt59WZxmBjBGJkiFWxcrFF1iTo9iYZBPQjxKZreKOoSnBiwyGjYqO0BKFZoBC6o5idV4AwKXUI1bO33CbwUGT9h%2FZ3%2FAbHTLgWlvw0sVoDkhIQEWMZlbbFN%2BSI14a2aiAP%2F%2FAE7%2BmQPcBE4CJgDOAAAABwOZAawAAP%2F%2FAE7%2BmQROBDoCJgINAAAABwOZAmQAAP%2F%2FABT%2BYAQnBEYCBgKcAAAAAgAU%2FmAEJwRGAAMAIAAAFzUhFQERASYmIyIGByc2NjMyFhYXExczNxMnNSEVBwER8QJ5%2Fl7%2B4Q4hIQkMHhIZTx8wPisT0BEGFcmHAaJW%2FrwFm5v%2BZQHTAy0nFwIFlQsPFz05%2FYZUVAJnFX9%2FDvyP%2FiT%2F%2FwAq%2FpkEiwQ6AiYBXQAAAAcDmQOeAAAAAQAz%2Fr8F5AQ6ABcAAAERITU3ESMHIxEhESMnIxEhESEVBxEzAwUD%2FBGjzA%2BpA6eoD6cCAAFoo4UU%2Fr8BQX4cAwanAUH%2Bv6f8%2BgOgfxz8%2B%2F4l%2F%2F8AQf6ZBOMEOwImAhIAAAAHA5kD9gAAAAIAWwAABP0EOwAiACYAACE1NzUGBiMiJiY1NSc1ITMVBxUUFhYzMjY3ESc1IRUHERcVJREzEQLyozp4Q4O7ZKMBaKOjMWNJQng7owILo6P9YZ5%2BHOgPDly1h6Qcfn4cpFdvNg8PAYAcf38c%2FPscfuICN%2F3JAP%2F%2FADEAAATnBhgCBgDxAAAAAgAK%2F%2BsEZwROACMALgAABSImJjU0NDUmJjUzFBc%2BAjMyFhYVFSEHHgIzMjY2NxcGBgEhNTQmJiMiBgYHAsqX3Xlpap1DGYS7apHGZP1CAwJGgVtDb1slTTq%2F%2Fl8B8zduUUJsRgsVifSgBQgEIql%2FeTV5uWd42ZN7BWihXBowIYA4TQKeGk17SE2EVP%2F%2FAAr%2BmQRnBE4CJgJIAAAABwOZAjIAAP%2F%2FAFEAAAJcBbAABgBBAAD%2F%2FwAnAAAGggYYAiYB%2FgAAAAcDmAH2AAAAAQBa%2Fv4EewQ6ACIAAAEnPgI1JiYjIxEXFSE1NxEnNSEVBxEzASEVBwEWFhUOAgL6NFVrMQKxm6ej%2FfWjowILo1QBXAEGlP7%2FvNwBV6r%2B%2FpYVT3FHkIv%2Bzxx%2BfhwDBRx%2Ffxz%2B0gHJfxr%2BxRzfu1m3iwD%2F%2FwBF%2FmYEygQ6AiYCBgAAAAcC6AOP%2F50AAQBa%2FksFDAQ6ACUAAAEiJic3FhYzMjY1ESERFxUhNTcRJzUhMxUHESERJzUzIRUHERQGAyIfNRwPDUMRPUT%2BH6P99aOjAWijowHho6MBaaOt%2FksJCZYFCGdaAiX%2Bzhx%2BfhwDBRx%2Ffxz%2BxwE5HH9%2FHPwIp7UA%2F%2F8AYf5mBRMEOgImAggAAAAHAugD2P%2Bd%2F%2F8AQf6ZBOMEOwImAhIAAAAHA5kD9gAA%2F%2F8AYf5mBmMEOgImAgcAAAAHAugFKP%2Bd%2F%2F8AT%2F%2FrBB0GGAImALMAAAAHA5gAtwAA%2F%2F8AT%2F%2FrBB0GGAImALMAAAAHA2AAswAA%2F%2F8AT%2F%2FrBnoETgIGAMsAAP%2F%2FAEr%2F6wPUBhgCJgDYAAAABwOYALkAAP%2F%2FAGf%2F7APxBE8CBgDqAAD%2F%2FwBn%2F%2BwD8QYYAiYA6gAAAAcDYAC3AAD%2F%2FwAnAAAGggYYAiYB%2FgAAAAcDYAHyAAD%2F%2FwBW%2F%2B0DqgYYAiYB%2FwAAAAcDYACpAAAAAQBO%2FnUEEAQ6ACEAAAEiJiY3NzMUFhYzMjY1NCYjIzUBJyEHIxEhFwEWFhUUBgYCL4bcfwMCvUeBV4GboqCUAWYD%2FlYOqQNlAf501ep72f51YLuHBkt6SJV2mo6aAbwFpgFCeP4TEOLEhL9nAP%2F%2FAGEAAAUTBdgCJgIAAAAABwNsAS8AAP%2F%2FAGEAAAUTBhgCJgIAAAAABwNgAV0AAP%2F%2FAE7%2F6wQWBhgAJgEXAAAABwNgAM8AAP%2F%2FAGj%2F6wQwBE4CBgIvAAD%2F%2FwBo%2F%2BsEMAYYAiYCLwAAAAcDYADoAAD%2F%2FwBd%2F%2BsD8QYYAiYCHgAAAAcDYAC0AAD%2F%2FwAY%2FksElAXYAiYBXgAAAAcDbADDAAD%2F%2FwAY%2FksElAYYAiYBXgAAAAcDYADxAAD%2F%2FwAY%2FksElAYYAiYBXgAAAAcDZAEUAAD%2F%2FwBBAAAE4wYYAiYCEgAAAAcDYAExAAD%2F%2FwBI%2FpkDuwQ6AiYB9wAAAAcDmQFmAAD%2F%2FwBhAAAGjAYYAiYCGQAAAAcDYAIBAAD%2F%2FwBI%2FksDuwQ6AiYB9wAAACcDdwAg%2F1MABwOaAOAAAP%2F%2FACr%2BSwSLBDoCJgFdAAAABwOaAxgAAAACACoAAASLBDoAAwAfAAABNSEVATU3AQEnNSEVBxMTJzUhFQcBARcVITU3AwMXFQEcAnP8m3gBQ%2F7EawGobN7YdAGhbv7bAVFw%2FjWC7eZ1Adubm%2F4lfhcBjgGBF39%2FDP7sARULf38X%2FoL%2Bbxd%2BfgsBIf7fC37%2F%2FwBO%2F%2BsEhAYYAAYA1AAAAAIAVP%2FpBmYGGAAoADoAAAUiJiY1NTQSNjMyFhcRJzUzMxEGFjM2Njc2Jic3FhYHDgIjBiYnBgYnMjY3JiY1ESYmIyIGBhUVFBYB%2BYS9ZGS%2BhVqMNKOjxQJbTYeTBAEfHr8hJAIDgNmIeKIpNaI7VHUnAwMnc05fejuFFYPqnBWuAQaRPjsBqBx%2F%2B0FfdQHSuWHLZgF6vVyx9n8CVV1XWaBJQw8hEgHXO0NrvX0VpMUAAQAi%2F%2BMFLARMADUAAAUGJic1NCYjIyczMjY1NCYHIgYVIycmNjYzMhYVFAYHFhYVFQYWMzY2NzQmJyc1MxYWBw4CA5eLigZpYtMCuHVzX2NhdbwCBGW5ervNYl1lWgEmMGFpBAoJYPQiJAIDbLQaA3KBS0dPmmRPUV4BZVQGXJdaqZhTfycce1lMKi0CmYkqWi4Of2aSR4%2FHZwAAAgAX%2FrIDnARMACgAMwAAISYmNTU0JiMjJzMyNjU0JgciBhUjJyY2NjMyFhUUBgcWFhUVFBYWFxUDJzY2NTUzFRQGBgKqJRRqYtICuHVzX2NhdL0CBGW5errOZF5nWg0bF45vLzDFLFIXYzNfUFuZZFBRXgJlVAZcmFqqmFOBJh2EYmEeOzEPE%2F6ySkiWVJiVQY2CAAEAQf%2FoBkAEOgAoAAAFBiYnESEREAIjIzc3MjY1ESc1IRUHEQYWMzY2NzQmJyc1MxYWBw4CBJepugj%2BzbLNOQMqa1ujBAOjAVtManQEDAxa9CEkAgNwvhUDscACRf7Q%2FsP%2Bz6gB1PEBMRx%2Ffxz9ul91AbukPHk9DX54r1aj4nUAAQBa%2F%2BgGwwQ6ACsAAAUGJic1IREXFSE1NxEnNSEVBxEhESc1MyEVBxEGFjM2Njc2JiczFhYHDgIFGam6CP4Uo%2F31o6MCC6MB7KOjAWijAVpNanUEAR8evSIkAgNwvhUDscBz%2Fs4cfn4cAwUcf38c%2FsYBOhx%2Ffxz9ul91AbukW8Fhe6xWo%2BJ1AAEAaP%2FrA8wETgAnAAAFIiYmNTU0NjYzMhYXByYmIyIGBhUVFBYWMzY2NzQmJyc1MxYWFQYGAleZ3nhz1JNdji8tL3pEXHs%2BQoVjX04DAgFI9Q0OBMwVkPWYKpf1kCMfkxsfa69nKmmwagFTVBcyGQt%2FRHM1nqQAAAEAWv%2FoBKgEOgAgAAAFBiYnESMHIxEhESMnIxEGFjM2Njc0JicnNSEWFgcOAgMmqboIqg%2BoA4upD60BWk1YYAQFA3QBERcaAQNmrRUDscACSKkBQv6%2Bqf24X3UBeWwcOyAPfk58OnyrWf%2F%2FAGn%2F7QPuBEwCBgKeAAD%2F%2FwBF%2FksEygQ6AiYCBgAAAAcDmgNXAAAAAQBo%2FoED5QROAB8AAAERLgI1NTQ2NjMyFhYHByM0JiYjIgYGFRUUFhYzMxEB6HmsW3PVknm%2BbAMCsj9rQlt8Pj17XWv%2BgQFyFZbjhyqX9ZBnr20GQWxBarBnKmqwaf38AAACACcAAARrBnIAFwAgAAAzNTcRIzUzNSc1IRUhFSERITIWFhUUBiMlITI2NTQmIyFho93dowFoAST%2B3AENgLVg177%2B8wENamVmaf7zfhwEe5snHX7Cm%2F3XXadupdWafVxahQAAAwAi%2FmAEXwROAAMAHQAsAAAFATcBATU3ESc1IRc2NjMyFhIVFRQGBiMiJicRFxUTMjY1NTQmJiMiBgcRFhYD1P6vdAFR%2B%2BSZowFMEjabZoa%2BZGW8hGSXNaxHjJBAf19UeCUld0YBdmn%2Biv49fxwEpBx%2FhEpOkf77rxWc6oNDQv6LHH8CJcyjFXy9bExC%2FfFDSf%2F%2FAEYAAAW3BbACBgABAAD%2F%2FwBRAAAE5QWwAgYAGwAA%2F%2F8ATQAABG0FsAIGAXQAAAACAB8AAAVwBbAAAwAJAAAzATMBJSEBJyMHHwJoqQJA%2B7cDRf6OHgYcBbD6UJoDzE5E%2F%2F8AUQAABKYFsAIGACYAAP%2F%2FAFoAAARTBbACBgCvAAD%2F%2FwBRAAAF2QWwAgYAPgAAAAMAT%2F%2FrBVgFxQAVACcAKwAABSImJgI1NTQSNjYzMhYWEhUVFAIGBicyNhI1NTQCJiMiBgIVFRQSFgM1IRUCyY3pqFxcqOmNkfCvX1%2Bv8JGRzWxuzY%2BJxGhoxHIB%2FRVuyAENnxWfAQ3Ib2%2FI%2FvOfFZ%2F%2B88huoZIBBKsXqQEEkpP%2B%2FakXq%2F78kgIHmpr%2F%2FwBRAAACXAWwAgYAQQAA%2F%2F8AUQAABZMFsAIGAFAAAAABADQAAAV1BbAAEQAAMzU3ATMBFxUhNTcBJyMHARcVNGkB4qoB4mr%2BXm%2F%2BsBsGHv6ycH4PBSP63Q9%2BfhMDtE5V%2FFMTfgD%2F%2FwBeAAAHYAWwAgYAWAAA%2F%2F8AUwAABeUFsAIGAFoAAAADAEIAAARiBbAABwALABMAADMRMxchNzMRATUhFQERIREjJyEHQqgPArIQp%2Fy0Am%2F8vQQVqQ%2F9Ww8BQaen%2Fr8CppubAcgBQv6%2Bp6f%2F%2FwBG%2F%2BsFAQXFAgYAYAAAAAEATQAABeEFsAATAAAzNTcRJzUhFQcRFxUhNTcRIREXFU2jowWUo6P99aP9PKN%2BHAR7HH9%2FHPuFHH5%2BHAR7%2B4UcfgD%2F%2FwBRAAAE2gWwAgYAeQAAAAEATwAABFAFsAASAAAzNQEBNSERIychBwEVARchNzMRTwHf%2FiED0KkP%2Fd0DAb7%2BQgMCVQ%2BokwJFAkWT%2Fr6nBf3TGP3VBaf%2BvgD%2F%2FwBgAAAFGgWwAgYAiAAA%2F%2F8AQQAABXQFsAIGAKcAAAADAE8AAAVwBbAAIQAsADcAACE1NzUjIiYmNTQ2NjMzNSc1IRUHFTMyFhYVFAYGIyMVFxUBMxEjIgYGFRQWFiEyNjY1NCYmIyMRAdqjCJ35kJD5nQijAgujBp75kZL5nQaj%2FpAICHGfU1OeAUdwnlRUnnAIfhxjdtSLi9h9Yxx%2FfxxjfNeLi9V3Yxx%2BAZgCgFCSZGSMSkuNZGORUP2A%2F%2F8AUAAABakFsAAGAKYAAAABADcAAAZABbAAKQAAITU3NS4CNREnNSERFBYWFzcRJzUhFQcRFz4CNREhFQcRFAYGBxUXFQIto5jifKMBZ0qHWwajAgujBmCPTgFoo4LqnKN%2BHM4QkPKjAXgcf%2F3tcapoDQEDBxx%2Ffxz8%2BAINZqxzAhN%2FHP6Io%2FOQEM0cfgABAGEAAATpBcUAKwAAMzUhLgI1NTQSJDMyBBIVFRQGBgchFSE1PgI1NTQmJiMiBgYVFRQWFhcVewETXIdKkgEFrKwBBpNKhlwBGf4PZY5MXKx4d6xbTpFmmj7A6Xk3wwEpqKj%2B18M3eenAPprFEYzxpzmi4XR04aI5qPGMEMUA%2F%2F8ARgAABbcGVgImAAEAAAAHA40AjQAA%2F%2F%2F%2F%2FQAABWUGVgAnACYAvwAAAAcDjf9xAAD%2F%2F%2F%2F9AAAGrAZWACcAPgDTAAAABwON%2F3EAAP%2F%2F%2F%2F0AAAMvBlYAJwBBANMAAAAHA43%2FcQAA%2F%2F%2F%2F%2Fv%2FrBQEGVgImAGAAAAAHA43%2FcgAA%2F%2F8AFgAABkYGVgAnAKcA0gAAAAYDjYoA%2F%2F%2F%2F%2FQAABPAGVgAmAo4HAAAHA43%2FcQAA%2F%2F8AGwAAApEHPgImAEEAAAAHA2D%2F8wEm%2F%2F8AQQAABXQHPgImAKcAAAAHA2ABeAEmAAEANAAABJ4FuwAlAAAhEQEmJiMiBgcnNjYzMhYWFxMXMzcTPgIzMhYXByYmIyIGBwERAgf%2B1BI2IQ4VBBcYMiM2Wk0jshIGE7MiTVo2IjIaFwYVDSI2Ef7VAkIChycjBQOYDgotZFP%2BakREAZZTZC0KDpgDBSMn%2FXv9vAAE%2Fp3%2F6wUBBlYACQAfADEANQAAAyYmNTUzFRQWFwEiJiYCNTU0EjY2MzIWFhIVFRQCBgYnMjYSNTU0AiYjIgYCFRUUEhYBEzMDv1VPtCIkAwyN4J1TU53gjZXimU5OmeKVkbNUVbSPg7ZeXrb9qDTQogTaOZFbV1pCZDL6x2zFAQ6jFaIBD8ZsbMb%2B8aIVo%2F7yxWykkAEDqxeqAQGRkv7%2FqReq%2Fv2RBFEBdv6KAAACAGj%2F6wR8BE4AHgAuAAAFIiYmNTU0EjYzMhYXNzMRFBYzMjY3FwYGIyImJwYGJzI2NxEuAiMiBgYVFRQWAg2EvWRkvoVkmTURpygkCBEGGB48JUdcFTWbNld3JxtGWjheejyGFYPqnBWuAQaRT0qF%2FO5UQAMDjRQOS1JOT5pcVAHMN1ArbcB9FaXKAAIAj%2F6BBEAFxQAXADAAABMRNDY2MzIWFhUUBgcWFhUUBgYjIiYnEQEyNjU0JiYjIzUzMjY1NCYmIyIGBhURFhaPesx7gsJrY1d3hHPNh1KZOgERgZU7bUqPUnp0OGlJR3JDLI3%2BgQWwb7duZLJ0W5guLMSBi8hrLC7%2BPAIEoIBLgVCbeWo%2Fa0FCcEf8wTM6AAEAFP5gBCcERgAcAAABEQEmJiMiBgcnNjYzMhYWFxMXMzcTJzUhFQcBEQHI%2FuEOISEJDB4SGU8fMD4rE9ARBhXJhwGiVv68%2FmAB0wMtJxcCBZULDxc9Of2GVFQCZxV%2Ffw78j%2F4kAAIAYf%2FsBCoGHAAnADkAAAUiJiY1NTQ2Njc3JiY1NDY2MzIWFwcuAiMiBhUUFhceAhUVFAYGJzI2NjU1NCYmJyIGBhUVFBYWAkeW2nZVklwEYGtbq3dLnlAsJlthL1NfYX6NvF522JVdf0FIgVRegEJBgBSI7psVcr%2BBFwsmjlpbhUguJ4UPGxFJPC9fKzGd14gVm%2B6ImWGqbRVXoHERYqtsFW2qYQABAGn%2F7QPuBEwALgAABSImJjU0NyYmNTQ2NjMyFhYHByM0JiYjIgYVFBYzMxUjIgYVFBYzMjY1MxcWBgYCLofMcslWYGnCh3rEcAMCukBsQ3R5bHPS0nh5iXZwkboCA3jNE06RZbpBI3pJZYxJUI1dBi9MLV9DSlWWVVdJZHBMBmyVTAABAHP%2BgQPKBbAAJgAAASc%2BAjU0JicnJiY1NDY2NwEnITUhFQEOAhUUFhcXHgIVDgIC62ghKRRIUFqrhz59YAEMAv2RA1f%2BqlZrMUFOhWZzLgE2Uf6BViY9NxsjMxUXLaSfUMbbcQEwBZt7%2FltmpaFhYWMRJh4uSkgwcGYAAf%2F8%2FmEELAROACEAAAERNCYjIgYHESMRNCYjIgYHJzY2MzIWFxYWFzY2MzIWFREDZ3J0VXsmxSgiFDMNLCloNVBjDAICATafY7G9%2FmEERo99Qzz8zAM1OSwPBo0cIEZFBw8FT1fD4Pu2AAMAf%2F%2FrBB4FxQANABYAHwAABSICEREQEjMyEhEREAInMjY1NSEVFBYDITU0JiMiBhUCT9b6%2BNbX%2BvjXg4f964qKAhWJg4GIFQEqARYBWQEWASv%2B1f7q%2Fqf%2B6f7XmsC%2BhYW9wQKei72%2Fv70AAAEAH%2F%2FrAnEEOgARAAAFIiY1ESc1IREUFjMyNjcXBgYBtXd8owFpNC0ZMBMsLlgVjp4CiBx%2F%2FNJKNw4MhR8WAP%2F%2FAEAAAASiBDoCBgEHAAAAAQAj%2F%2B8EOgXuACIAAAUiJiYnAwcHAyMBJyYmIyIGIyc2NjMyFhcBFhYzMjI3FwYGA%2BtBWEIf6gYe5toBhWMWMykJHQkBEUwaYWEcAbkSKyIMEQcGDysRH1hVAlgBdP1iBALvNiwCkQQITlX7oTEoApoECP%2F%2FAEL%2BYAThBDoCBgNDAAD%2F%2FwAaAAAEmAQ6AAYBVwAAAAEAYv52A6wFwwA0AAABJzY2NTQmJycuAjU0NjcmJjU0JDMyFhcHJiYjIgYVFBYzMxUjIgYGFRQWFxceAhUOAgL5ZzcnRlQ4lMVjpZR1hAEI4kONLx0%2BbDaSlZqkj499qleacnFgdDQBNlH%2BdlZAQzUqKxINImqxi5PILyqZX6G2FhCYERNrTmdzm0aOa3uWGhgXLU9JMG5mAP%2F%2FAE7%2F6wQWBE4ABgEXAAAAAQBL%2F%2BsEnwQ6ABcAAAUiJjURIREjESM1IRUjERQWMzI2NxcGBgPjd3z%2Bn8V%2FBA%2BkNC0ZMBMsLlgVjp4Ch%2FxiA56cnP1uSjcODIUfFgAAAgCG%2FmAEGwROABIAIgAAExE0NjYzMhYSFRUUBgYjIiYnERMyNjU1NCYmIyIGBhURFhaGdcuAmNFsY7qDYZg384yMOnldUnA5JXf%2BYAPhpet9kP77sBWd6oI8Ov3%2FAiXMoxV%2BwGxsql3%2B0UNJAAABAGP%2BigPhBE4AKAAAASc2NjU0JicmAjU1NDY2MzIWFgcHIzQmIyIGBhUVFBYWFx4CFQ4CAutnNidEVfD1c9WSfr1pAwKyenNbfD5Nm3RoezcBN1H%2BilZARDQrKhM0AQPRKpj0kF%2BtdwZohmqvaCpajmYgHDNQSi9vZgAAAgBp%2F%2BsEgwQ6ABMAJQAABSImJjU1NDY2MyEVIRYWFRUUBgYnMjY2NTU0JiYjIgYGFRUUFhYCTZXZdnXYlQI4%2FuteZXjZk16AQUKBX15%2BQECAFY34oRab74mcSNSCFozoi5pms3MWa6piYqprFnOzZgAAAQA%2B%2F%2BsDswQ6ABQAAAUiJjURITUhFSERFBYzMjY2NxcGBgKDd3z%2BrgN1%2FqI1LRAgHg0tLlkVjp4CipmZ%2FWtJOAcMB4QgFgAAAQAZ%2F%2BsEVQROACQAAAUiJjURNCYjIgYHJzY2MzIWFREUFjMyNjY1JgInMx4CFRQCBgJ2wNEoIxQzDS0qaTRiaGhaWYNIA0I3ziI0HW7WFd3lAYg6Kw8GjRwgcHv%2BSJmNesRwfgEBiEehuGel%2FveaAAIAcf4iBXUEOgAgAC0AAAERLgI1NBI3Fw4CBxQWFhc3ETQ2NjMyFhYVFAYGBxETPgI1LgIjIgYVEQKHt%2Bxzf4BrN0ckA0iScQZJfk%2BB14B39b0GdptNA0J5VSgp%2FiIBzhGd%2BpyoAQdXiDF7iUlns3gPAgKjRHZIjvSYl%2FKYD%2F4yAm8Pc6pjaK5oNSr9VQABAD4AAAR3BDoAFwAAMzU3AQEnNQUBNyc1IRUHAQEXFSMBAxcVPnQBNf7VdAEFARTCYQGrdP7MAT119%2F7b1GF%2BFwGEAYsXfwH%2BeP8Lf38X%2FoT%2BbRd%2BAZn%2B8At%2BAAH%2F%2F%2F4mBbsETgAsAAABESYAETU0JiMiBgcnNjYzMhYVERQWFzcRMxEXPgI1JgInMx4CFRQGBgcRAsTz%2FvgoIhQzDSwoaTVhaKSMBsUGep9OA0E4ziI0HXf5wv4mAcwbAS4BGeE5LA8GjRwgb3v%2B7szbFQIDofxbAg14tmp9AQCGR6C2ZqH%2BnA7%2BOAAAAQB0%2F%2BsGFwQ6AC4AAAUiJgI1NDY2NzMGAhUUFhYzMjY1ETMRFBYzMjY2NTQCJzMeAhUUAgYjIiYnBgYCAoqwVCI8Kc5CTixeSWJ0xnNjSV4tUEDOKD0iVbCJd6QpKaUVlgEHqme5okaI%2Fv9%2FfsJtoq8BLP7Ur6JswYB%2FAQOGR6K4Z6r%2B%2BZZ3dHN4AP%2F%2FAB%2F%2F6wJxBlYCJgKiAAAABgONZAD%2F%2FwAA%2F%2BsCdgYYAiYCogAAAAYDYNgA%2F%2F%2F%2F3%2F%2FrAowGgQImAqIAAAAGA4%2B3AP%2F%2FABn%2F6wRVBlYCJgKuAAAABwONAY0AAP%2F%2FABn%2F6wRVBhgCJgKuAAAABwNgAQEAAP%2F%2FABn%2F6wRVBoECJgKuAAAABwOPAOAAAP%2F%2FAE7%2F6wQWBlYAJgEXAAAABwONAVsAAP%2F%2FAHT%2F6wYXBlYCJgKyAAAABwONAnEAAP%2F%2FAGj%2F6wR8BlYCJgKaAAAABwONAWoAAP%2F%2FAGn%2F7QPuBlYCJgKeAAAABwONAU4AAP%2F%2F%2F%2Fz%2BYQQsBlYCJgKgAAAABwONAagAAAACAHn%2F6wS3BcUAIQAuAAAFIiYCNRE3ERQWFjMyNjc0NDUuAjU1NDY2MzIWFREUAgYTNxE0JiMiBhUVFBYWAo6e8IfFUpdnor4FkNl5VplknbaK%2BbkGSUZCTER9FZ8BFrAClAL9aoXMc%2BXJBAcEBnXIgD50ql3Ksf4Guf7smAMFAgFYbG1tbEBQfUoAAAIAaf%2FrBjQEOgAYADEAAAUiJgI1NDY3IzUhFSMWFhUUAgYjIiYnBgYnMjY1NTMVFBYWMzI2NjUmJichBgYHFBYWAgB7n0wgHm8Fy4YdIUyfe3ekKCmka2J0xjRgQjpLJQMnI%2FzSIygCJUwVlgEIqWW2UZycUbZlqv75lnh0dHiaoq%2F6%2BnWVR2zCf1m2XV62WH%2FBbQACAHn%2F6wQYBcUADQAbAAAFIgIRERASMzISEREQAicyNjURNCYjIgYVERQWAknW%2BvjW1%2Fr414OHiYOBiIoVASoBFgFZARYBK%2F7V%2Fur%2Bp%2F7p%2FteawL4Bq72%2Fv73%2BVb3BAAABAHUAAAL%2FBbAACQAAMzU3EQc1JREXFXnh5QGq4H4cBEMEe1z66hx%2BAAABAEkAAAQQBcUAIAAAMzUBPgI1NCYjIgYVIycmNjYzMhYWFRQGBgcBFyE3MxFhAd1VYCaEe4CPvQIDcNWTisdsP3lV%2FoECAgUQp4cCEl%2BHbjttlZqNBn7JdWm2dlCeplz%2BXwWn%2Fr8AAAEASP%2FrA%2BIFxQAwAAAFIiYmNzczFBYWMzI2NTQmIyM1MzI2NjU0JiMiBgYVIycmNjYzMhYVFAYHFhYVFAYGAhKF0HUDA7xAdlJ9jn6IrKxXai98eU1yP70CA2%2FLhsrwbW2DbXfSFWGzewZNcD6IhYeAmjtvTn2CPW9LBm60atfHWrMvK7hyhb9nAAIAPwAABFoFsAAOABMAACE1NzUhNQEzETMVIxUXFQEhEScHAiqj%2FXICgtDJyaP83QG8BhR%2BHLZvA%2FH8Opq2HH4B6gKtAjUAAAEAXv%2FrA9YFsAAlAAAFIiYmNzczFBYzMjY1NCYjIgYHJxMhESMnIQM%2BAjc2FhYVFAYGAgp7w24DArKJbH2Ki3t0aRikVAMBlBP%2BTS8eRlMxhsJoac0VWrGDBnaEsJmNs0ZIEQMf%2FuBx%2FmcXIxYBAXfdlpLaeQACAHn%2F6wQrBcUAHgAtAAAFIiYCNTU0EjYzMhYXByYmIyIGBxc2NjMyFhYVFAYGJzI2NjU0JiMiBgYHFRQWAmaO34CL9Z9KkzAmL3BImbUGBDiiXoLAaXDMiVFyPZGAQ21PGakViwEKvcTnATuiIhqTFx3n6QQ0PXvYipfmgppeomWQuiVDLXXL2gABAEwAAAQkBbAAEQAAITc2EhI3IQcjESEVBgoCBwcBZRAcfsiM%2FaAPqAPYhKxpPBUQneYBhgFgrKcBQpud%2FvP%2B%2B%2F7krZ0AAwBc%2F%2BsEDwXFABsAKgA4AAAFIiYmNTQ2NyYmNTQ2NjMyFhYVFAYHFhYVFAYGJzI2NjU0JiYjIgYGFRQWEzI2NjU0JiYjIgYVFBYCNo%2FVdpR%2BbXxswoGAxG%2BAbX6XeNWMUn1GSH5RUXxGl35Fazw%2Ba0VpgYIVX7mHe7wsKqtygLNeXrOAcqsqLLx7h7lfmkB3UlB8RkZ7UXyNArY9bkpIcUGJcW%2BGAAIAVP%2FrBAIFxQAeAC0AAAUiJic3FhYzMjY3JwYGIyImJjU0NjYzMhYWFREUAgYDMjY3NTQmIyIGBhUUFhYB%2F0yfPx49f1COpQMEKJBajs5vec19mNx3gOd8bZEgk41JdkU%2FdhUdHpUdGdnxBUNIduCfmOqFf%2Fu6%2Fvnj%2FtaSAnleSZrBxF2ka2mbVgAAAgCL%2F%2BsEUgXFAA0AGwAABSIAEREQADMyABEREAAnMjY1ETQmIyIGFREUFgJv3%2F77AQPf4AEF%2Fv3gjJGTjIuSlBUBKgEWAVkBFQEs%2FtX%2B6v6n%2Fun%2B15rAvgGrvb%2FAvP5VvcEAAAEAPAAAAs4FsAAJAAAzNTcRBTUlERcVw6P%2B1gHvo30dBFYEjjb66h19AAEAXAAABCQFxQAfAAAzNQE%2BAjU0JiMiBhUjJyY2NjMyFhYVFA4CBwEXIRV0Ad1VYCZ%2FaZePvQIDc9yZg8BqJEVkP%2F6BAgK8hwISX4duO22Vm4wGfcl2abd2PHZ5f0X%2BXwWaAAABAHX%2F6wQjBcUAMQAABSImJjc3MxQWFjMyNjU0JiMjNTMyNjY1NCYjIgYGFSMnJjY2MzIWFhUUBgcWFhUUBgYCP4XQdQMDvEB2UoaZiJKsrF9yM4aDTXI%2FvQIDcMuFjc9ycnKJcX3aFWGzewZNcD6IhYeAmjpvT32CPW9LBm60amC5hVqzLyu4coW%2FZwAAAgBFAAAEYQWwAAoADwAAIREhNQEzETMVIxEBIREnBwLT%2FXICgtHJyf2AAbsGEwFQbwPx%2FDqa%2FrAB6gK7AS8AAAEAp%2F%2FrBCAFsAAjAAAFIiYmNzczFBYzMjY1NCYjIgYHJxMhFSEDPgI3NhYWFRQGBgJUe8RuAwKyiW19iox7dGgZo1QC2f3NLx9GUzGGwmhpzRVasYMGd4OwmYy0RkgRAx%2Bv%2FmcXIxYBAXfdlpLaeQACAJL%2F6wREBcUAHwAvAAAFIiYCNRE0EjYzMhYXByYmIyIGBhUVNjYzMhYWFRQGBicyNjY1NCYjIgYGBxUUFhYCgI%2FfgI%2F1m0uTLykxa0honFdApF%2BCwGlwy4lRcjyQgUNtTxlOhxWLAQm8ARa7ARueIhqXGR9yy4YWNz972IqX5oKaXqJlkLolQy52hrtiAAABAB4AAAPPBbAADwAAITc2EhI3ITUhFQYKAgcHATgPGnS4gf0QA7F5n2A4EhCd5QGHAWCsm5ud%2FvL%2B%2B%2F7krJ0AAwB8%2F%2BsEVwXFABsAKgA4AAAFIiYmNTQ2NyYmNTQ2NjMyFhYVFAYHFhYVFAYGJzI2NjU0JiYjIgYGFRQWEzI2NjU0JiYjIgYVFBYCapXee5mEcoJxy4eGzXSGcoOdfd6SWIZLTodWV4VLoodLdEFDdEtyjI0VX7mHfLssKaxygLNeXrOAcqsqLbt7h7lfmkB3Uk98R0Z7UXyNArY9bkpIcUGJcW%2BGAAIAYf%2FrBBAFxQAeAC0AAAUiJic3FhYzMjY1NQYGIyImJjU0NjYzMhYWFREUAgYDMjY3NTQmIyIGBhUUFhYCDUyfPx08f1KQrjGUWo3OcHrNfZjcd4Loem2SIJONSXZGQHUVHR6XHxna10RISnbbmZLhgH%2F6uf6lvv75iAKXXkl%2Bv8RYm2Vkl1UAAAEAXwAAAYwDLAAFAAAzESM1JRHefwEtAo%2BGF%2FzUAAEAcwAAAsoDLAAcAAAzNQE2NjU0JiMiBhUjJyY2NjMyFhUUBgYHBxchFXoBLkUrODpDSaECBEqLXoeYJlpNmQIBaYIBBjtLKzI%2BQDIGQmxBgHQ1UlxGhwaCAAEAa%2F%2F1AuQDLAApAAAFIiYmNzczFBYzMjY1NCYjIzUzMjU0JiMiBhUjJyY2MzIWFRQGBxYVFAYBnlWMUgQBo0tASFNISYWFg0hFOEaiAgapf5GoRz6StAs0ZUoGLjk7MD84fm0sOTAoBl53d243Wxoxim98AAACAFcAAAMoAyEACgAPAAAhNSEnATMRMxUjFQEzEScHAgD%2BXwgBpa5%2Bfv5j8wYNmGYCI%2F35gpgBGgE2ARYAAAEAc%2F%2F1AvUDIQAfAAAFIiYmPwIUFjMyNTQmIyIGBycTIRUhBzY2NzYWFRQGAbBbkVEEAaJSRJpNQ0FDD5Y0AgX%2BlBkdTyqElp8LMWBHBgowNodCUSIeCQHHhbkRGQECkYB6kAABAF8AAAKsAyEADwAAITU0NjY3ITUhFQ4DFRUBC0lvO%2F5hAk1DXjkbf3nMojiDg097c4dbfwADAHD%2F9QMHAywAFwAjAC8AAAUiJjU0NjcmJjU0NjMyFhUUBgcWFhUUBicyNjU0JiMiBhUUFhMyNjU0JiMiBhUUFgHCksBYTUJKsIiCrEk%2FSVe5jEFZW0BGYWBINUtLNj1QUgt8cD9kHBpbO2lzc2k7WxscYz9wfII9NDNDQjQ0PQFpOS4tNTQuLjkAAAEAXwKZAYwFxQAFAAABEQUVMxEBjP7TfwKZAywXhv1xAAABAHMCmwLKBccAHAAAATUhJzc%2BAjU0JiMiBgYXFzM0NjMyFhUUBgcBFQLK%2FpcCmU1aJpiHXotKBAKhSUM6OCtF%2FtICm4IGh0ZcUjV0gEBtQgYyQD4yK0s7%2FvqCAAEAawKPAuQFxgApAAABIxUzMhYVFAYjIiY1IwcGFhYzMjY1NCc2NjU0JiMiBhcXMzQ2MzIWFRQBqIWFSUhTSEBLowEEUoxVkrSSPkeokX%2BpBgKiRjhFSARxfjg%2FMDs5LgZKZTR8b4oxGls3bnd3XgYoMDksbQACAEMCMANPBcUACgAPAAABESMBFyEVMzUzNSEhEzcXArqy%2FjsEAceslf6%2F%2FvP6DQYDaQJc%2FYNguLiBAWAaAQAAAQAqAG4DXgUjAAMAADcnAReXbQLHbW5DBHJD%2F%2F8AtwAABfQFxAAnAt8BJAAIACcC1ABYApgABwLVAyoAAP%2F%2FALcAAAXiBcQAJwLUAFgCmAAnAt8BFwAIAAcC1wK6AAD%2F%2FwB7AAAGnwXHACcC3wHPAAgAJwLXA3cAAAAHAtYAEAKb%2F%2F8AbP%2F1BlIFsgAnAtQADQKGACcC3wEHAAAABwLaA0sAAP%2F%2FAG%2F%2F9QbpBcAAJwLWAAQClAAnAt8BvgAAAAcC2gPiAAD%2F%2FwBv%2F%2FUHGAWvACcC2P%2F8Ao4AJwLfAfYAAAAHAtoEEQAA%2F%2F8Aa%2F%2F1BnIFrwAnAtkADAKOACcC3wE2AAAABwLaA2sAAAABAJEAAAFWAMoAAwAAMzUzFZHFysoAAQAX%2FskBOwDdAAkAABMnNjY1NTMVFAaGby8wxWL%2ByUpIllSYlWLW%2F%2F8AkQAAAVYEOgAmAucAAAAHAucAAANw%2F%2F8ANf7JAVkEOgAnAucAAQNwAAYC6B4A%2F%2F8AkgAABLQAygAmAucBAAAnAucBuwAAAAcC5wNeAAAAAgCPAAABVAWwAAMABwAAExEzEQM1MxWPxcXFAd4D0vwu%2FiLMzAACAI%2F%2BigFUBDoAAwAHAAATMxEjETMVI4%2FFxcXFAlz8LgWwzAACAEAAAAN6BcUAIAAkAAABND4CNz4CNTQmIyIGFSMnJjY2MzIWFRQGBgcOAhUDNTMVAWgKHTwzR08hcWlbf7wDAmm6eMXaOXJWIyAJx80BmkleREQuQG5oNmpyY2AGa6BYybRWjY1XJDtLPf5m0NAAAgA6%2FnYDdAQ7ACAAJAAAARQOAgcOAhUUFjMyNjUzFxYGBiMiJjU0NjY3PgI1ExUjNQJMCh08M0ZQIXFpW3%2B8AwJpunjF2jlzVSMgCcfNAqFJXkRDL0BuaDZqcmNgBmugWMm0Vo2NVyQ7Sz0BmtDQ%2F%2F8AoAJ2AWUDQAAHAucADwJ2AAEAhwIXAiUD4QANAAABIiY1NTQ2MzIWFRUUBgFWX3BwXl9xcQIXbVk8WHBwWDxZbQAAAQBCAl8DfQWwAA4AAAEDAycTJTcFAzMDJRcFEwKNtbCExv7YMQEoCqEKASUw%2FtLBAl8BH%2F7pXQESWZpvAVb%2BpG6cWf7y%2F%2F8AjwAAAzcFsAAmAuwAAAAHAuwB4wAAAAIAPwAABJsFsAAbAB8AADMTIzUhEyM1IRMzAzMTMwMzFSMDMxUjAyMTIQMTIRMh2lDrAQdE%2FwEbUpdS%2F1KXUsjjRNz4UJdQ%2FwBQbAEARP8AAZqMAVyOAaD%2BYAGg%2FmCO%2FqSM%2FmYBmv5mAiYBXAAAAQAA%2F4MDBgWwAAMAABUBMwECYKb9oX0GLfnTAAEAJP%2BDAz4FsAADAAAFATMBAoT9oLoCYH0GLfnT%2F%2F8AkgAAAxEAygAmAucBAAAHAucBuwAAAAEAcv4xAooGZAAZAAABJiYCAjU1NBISNjcXFw4CAhUVFBIWFhcHAl9Xr5BXV5CvVwYlRXpeNjZde0Ul%2FjEvvQEPAVTGCcUBVAEQvi4BdDas6v7crg2u%2FtzrsDpsAAABAAv%2BMQIjBmQAGQAAEyc%2BAhI1NTQCJiYnNzMWFhISFRUUAgIGBzAlRHpeNzlgeUElBleukVdXka5X%2FjFsNa7tASmuDasBJu6xN2wuvv7w%2FqzFCcb%2BrP7xvS8AAAEAP%2F6UAp8GPQAeAAABJiY1NTQmIzUyNjU1NDY3FwYGFRUUBgcWFhUVFBYXAnfDpWZqamalwyhuXVRVVVRdbv6UN%2FCqzXB9k3txzqvvN3UjtYTOaaAtLqFnzYSzJAABABv%2BlAJ7Bj0AHgAAEyc2NjU1NDY3JiY1NTQmJzcWFhUVFBYzFSIGFRUUBkMobF5aXl5aXmwowqVma2tmpf6UdiSzhM1roCspoG3OhLUjdTfvq85xe5N9cM2q8AAAAQCd%2FsgCHQaAAAcAABMRIRUjETMVnQGAu7v%2ByAe4m%2Fl%2BmwAAAQAX%2FsgBmAaAAAcAABM1MxEjNSERF7y8AYH%2ByJsGgpv4SAAAAQCaAhoCgwK0AAMAABM1IRWaAekCGpqaAP%2F%2FAJoCGgKDArQCBgL%2BAAAAAQChAogE3wMjAAMAABM1IRWhBD4CiJubAAABAKUCiAXdAyMAAwAAEzUhFaUFOAKIm5sA%2F%2F8ApQKIBd0DIwIGAwEAAAABAHf%2FZgQRAAAAAwAAFzUhFXcDmpqamv%2F%2FAHr%2BaAQUAAAAJwMDAAP%2FAgAGAwMDAP%2F%2FABf%2ByQE7AN0CBgLoAAD%2F%2FwAX%2FskCbQDdACYC6AAAAAcC6AEyAAD%2F%2FwBgA%2FwCygYrACYDCQAAAAcDCQFGAAD%2F%2FwA6A%2BECnAYYACYDCg0AAAcDCgFLAAAAAQBgA%2FwBhAYrAAoAABM1NDY2NxcGBhUVYCtROHAwLwP8sEKOgC9JSZVVswABAC0D4QFRBhgACgAAEyc2NjU1MxUUBgadcC8wxSxRA%2BFKR5VWu7hDjoAAAAEAKgPhAU4GGAAKAAATLgI1NTMVFBYX3jdRLMUwLwPhLoCOQ7i7VpVH%2F%2F8AOgB1A0MDkgAmAw723QAHAw4BRP%2Fd%2F%2F8AaQCYA30DtQAmAw8WAAAHAw8BbwAAAAEARACYAf8DtQAGAAAlATUBMwMTAWv%2B2QEnlP%2F%2FmAGFEwGF%2FnH%2BcgABAFMAmAIOA7UABgAANxMDMwEVAVP%2B%2FpQBJ%2F7ZmAGOAY%2F%2BexP%2BewD%2F%2FwCmBB8CegYYACYDEQAAAAcDEQE2AAAAAQCmBB8BRAYYAAUAABMRNTMVA6aePQQfAS3M3%2F7mAP%2F%2FAKACdgFlA0AABwLnAA8Cdv%2F%2FAAAAAAAAAAACBgMcAAAAAQBo%2FwsD%2BwUmACoAAAU1LgI1NTQ2Njc1MxUWFhcXIycmJiMiBgYVFRQWFjMyNjY1MxcWBgYHFQHTd6FTU6F3xWioOgmdKyNuRWd%2FOjl%2FaEFxRbICA16iY%2FXtGZXdhSqD3JUb5dwMUUDwqiIqZq9sKm%2BvZTheOwZSlGkQ5gAAAgBe%2F%2BUFUATxACMANwAABScGBiMiJicHJzcmJjU0NjcnNxc2NjMyFhc3FwcWFhUUBgcXJTI%2BAjU0LgIjIg4CFRQeAgTEhU25ZWW4TYKKijI1OTaSio9Ks2BhskuSjJY0OTUwjv2EVZVxQEBxlVVWlnFAQHGWG4c%2BQkE%2BhYqMTLVjZrxOlYuSNz0%2BOJWMmU65ZWKzTI8rRn2kXl2jfEZGfKNdXqR9RgAAAQBQ%2FzAD9AadADQAAAU1LgI3NzMUFhYzMjY2NTQmJicuAjU0Njc1MxUWFhUjIzQmIyIGFRQWFhceAhUUBgcVAdZysmICAr5HektWekE3eWKGtly%2Bpp6nuQ62fXB2djR6aoiyWM600L8MZ7yKBWZ%2BOThoSDxgTiEpdKVxpdAV3d4Y78mIqHtrQF9MJCxzoHGszBO%2F%2F%2F8ATv7nBIQGGAAmANQAAAAnA3cCAQHrAAYDAyWBAAEAR%2F%2FrA80FxQAuAAAFIiYmJzQ0NSM1MzUjNTM1NDY2MzIWFwcmJiMiBhUVIRUhFSEVIQcGFhYzMjcXBgLdmOaDA5KSkpKB55o7dUIUNXE4kqsB6%2F4VAev%2BHAICS49id2UUdBWA6Z8DBwN8pn0Po%2FCEEA%2BfEBPOrBF9pnwFcKldIp0fAAH%2F%2Ff5LAtQGLQAjAAATIiYnNxYWMzI2NREjNTM1NDYzMhYXByYmIyIGFRUzFSMRFAZtIDQcDQ5DEjtFqqq0oiJFKhgSMxtXU8TErP5LCQmWBQhnWgQBkomtvQsKlgQGZ2KJkvv%2Fp7X%2F%2FwBRAAAEmAWwAiYAOAAAAAcDdwAp%2FrIAAQBbAAAEagXFADEAADM1Mz4CNzQ2NSM1MycjNTMnNDYzMhYHByM0JiMiBhUXIRUhFyEVIRQGFQYGByE3MxGbChwnFwQBqaQGnpgF4LzI3AQCvX9iY3QFAab%2BYAUBm%2F5pAQMdGgInEKeaCExzPwYNBpuPm5LM6dGsBnZylYWSm4%2BbBA0FTIsyp%2F6%2FAAADAE3%2F6wZRBbAAEwAdADUAADM1NxEnNTMhMhYWFRQGBiMjERcVAzMyNjY1NCYjIwEiJjURIzUzETMRMxUjERQWMzI2NxcGBk2jo6MBYpvcdXXcm52jo51ig0KUk50D3niOq6vFzc0%2FNBpBFhscbH4dBHodfnLJg4XJcP5nHX4Cz02DUXuq%2BtaRmwKRkgEF%2FvuS%2FW9MPgkFhxIXAAABAEQAAARTBcUAJQAAMzUzPgI1JyM1MwM0NjMyFgcHIzQmIyIGFRMhFSEXFAYHITczEYQKHysVBqOdCuC8yNwEAr1%2FYmN0CgGj%2FmIGHx0CJxCnmglhiUWVmwEOzOnRrAZ2cpWF%2FvKblVqjO6f%2BvwAAAQA7AAAFNwWwACUAACE1NzUhNSE1ITUhASc1IRUHARc3NwEnNSEVBwEhFSEVIRUhFRcVAbCj%2FokBd%2F6JATf%2Bs4sBulcBBRYEEgEFVgG5i%2F6zATj%2BgQF%2F%2FoGjfhyseqd7AjoVf38P%2FiApByIB4A9%2FfxT9xXuneqwcfv%2F%2FACoAbgNeBSMCBgLfAAAAAQBJAJIELwS2AAsAACURITUhETMRIRUhEQHa%2Fm8BkcUBkP5wkgHLsgGn%2Flmy%2FjUAAQCaAogD3QMjAAMAABM1IRWaA0MCiJubAAABAE8A4QPYBHkACwAANycBATcBARcBAQcBzX4BR%2F65fgFGAUd%2B%2FrgBSH7%2BueF%2BAU4BTn7%2BswFNfv6y%2FrJ%2BAUwAAwBKALQEMASyAAMABwALAAATNSEVATUzFQM1MxVKA%2Bb9q8bGxgJVvLz%2BX8vLAzPLywACAJMBlwPVA9sAAwAHAAATNSEVATUhFZMDQvy%2BA0IDN6Sk%2FmCkpAAAAQCTAKUD1QThABMAACUnNyM1ITchNSETFwczFSEHIRUhAUVXZcABG4z%2BWQICkVhxyP7djAGv%2FfalPLak%2FKQBBjzKpPykAAEAfQBXA9QD4QAJAAA3NSU3NSclNQEVfQJWVFT9qgNXV8TuEQYU6sP%2BhpUAAQBMAGsDfAP1AAkAACUBNQEVBQcVFwUDfPzQAzD90VVVAi9rAXuVAXrJ6RIGE%2BQAAgCPAAAD5gRHAAkADQAAEzUlNzUnJTUBFQE1IRWPAlZUVP2qA1f8rwNDARex1g8GEtKw%2FqyH%2FZSbmwAAAgCVAAID2ARHAAkADQAAAQE1ARUFBxUXBQE1IRUD0%2FzQAzD90VVVAi%2F8wgNDARcBVYcBVLXSEAUSzf42m5sAAAIASwAFA98E8wALAA8AAAERITUhETMRIRUhEQE1IRUBx%2F6EAXyyAWb%2Bmv4DA0MBIQGdmgGb%2FmWa%2FmP%2B5JubAAACAIEBEAQxBAAAHQA7AAATJzY2MzYWFhceAjMyNjcXBgYjIiYmJy4CByIGAyc2NjM2FhYXHgIzMjY3FwYGIyImJicuAgciBpUKL3xBLjVEQzk%2FNixAfDAKMHxALDY%2FOUNENS5BfDkKL3xBLjVEQzs%2FNStAfDAKMHxALDY%2FOUZEMy1BfAK8rkROAQkgIR0eCk1FrkVNCh4dISAJAU7%2BEK9ETgEJICEfHglNRq9FTQoeHSMfCQFOAAEAeQGRBOkDIwAbAAABIiYnJiYjIgYVJzQ2NjMyFhcWFjMyNjUXFAYGA7hZk1U8YjFDX41OiVhYllU7XzNCYY5QigGRQkowMGpLEluVWUVGMy5yTRJbm10AAAEAeQF3A7sDIgAFAAABESE1IREC9v2DA0IBdwEGpf5VAAABAEcC2QMiBbAACQAAEwEzASMDJyMHA0cBK4YBKramEAYQowLZAtf9KQGjRkb%2BXQADAGr%2F6we9BE4AIQA3AEsAAAUiJiY1NTQ2NjMyFhYXPgIzMhYWFRUUBgYjIiYmJw4CJzI%2BAzc1LgQjIgYGFRUUFhYhMjY2NTU0JiYjIg4CBxUeAwIxic1xccuJbbOONjWNtG%2BHzHJyzIlvs4w1No2ybTdlWUcxCwsyR1lmN1RyOjpzBBpTczs7clJFfmVGDg5FZX0Vi%2B%2BWQpXwjGOpZ2eoZI3vlUKW74tjqGhoqGOaNFVnaCsqKmdmVjReqW9CcahdXahxQm%2BpXk56gzYqNoV6TgAB%2F6b%2BSwJ%2BBi0AGwAAEyImJzcWFjMyNjURNDYzMhYXByYmIyIGFREUBhYeNB4ODkISO0W1oiJFKhkTLBlXW6z%2BSwkJlgUIZ1oFHK29CwqRBQZtYvrkp7UAAQA8%2Fy0FzgWwAAsAABcRJzUhFQcRIxEhEd%2BjBZKjxf0%2B0wXoHH9%2FHPoYBej6GAAAAQBF%2FvMErAWwABAAABM1AQE1IREjJyEBFQEhNzMRRQJh%2FZ8EGakP%2FYkCSP24AsYPqP7zkgLJAs%2BT%2Fr6n%2FUUZ%2FU2m%2Fr8AAAEAPQAABKsFsAALAAAhAyM1IRMXMzcBMwEB8fi8AUijEgYTAY%2FJ%2FdsCdJz%2BRFNTBFz6UAABAEL%2BYAThBDoAHAAAExEnNTMzERQWMzI2NxEnNSERFxUhJwYGIyImJxHlo6PEbmZjeh%2BjAWij%2FqwJLIBTSGwo%2FmAFPxx%2F%2FZK9iklHAoocf%2FxgHH5tQEIhI%2F4xAAIATv%2FrBDYF7wAZACkAAAUiJiY1NDY2MzIWFzcuAic3FgQSFRUUBgYnMjY2NTUuAiMiBhUUFhYCP5Hhf3HSkV%2BnNgMPdbl1PLABCJOE5ItZiE0YXYVViIdKiRWB3Iqb5n86NAWBvoAjpCvU%2FsPH1aP7jppotnSBLUgqyZxYmF0ABQBN%2F%2BsFaAXFAAMAFQAjADUAQwAAJScBFwMiJiY1NTQ2NjMyFhYVFRQGBicyNjU1NCYjIgYVFRQWASImJjU1NDY2MzIWFhUVFAYGJzI2NTU0JiMiBhUVFBYBpm0Cx20xXIhKSodbW4hLSodbSlBSSkpQUf2KW4hLSodbXIhKSodbSVFSSkpQUW5DBHJD%2BwtPiFVOVIhQT4hVTlWIT3pnS05KaGhKTktnArtPh1VNVYhQT4lVTVWHT3pmS01KaWlKTUpnAAYATP%2FrB2EFxQADABUAIwBBAE8AXQAAJScBFwEiJiY1NTQ2NjMyFhYVFRQGBicyNjU1NCYjIgYVFRQWASImJjU1NDY2MzIWFzY2MzIWFhUVFAYGIyImJwYGJzI2NTU0JiMiBhUVFBYhMjY1NTQmIyIGFRUUFgG6bQLHbfz5W4hLSodbXIhKSodbSVFSSkpQUQM%2BXIhKSodbSnUlJXVKW4hLSodbS3YlJXRJSlBSSkpQUQITSVBRSkpQUW5DBHJD%2FkBPh1VNVYhQT4lVTVWHT3pmS01KaWlKTUpn%2FFFPiFVOVIhQPzY2P0%2BIVU5ViE89Nzc9emdLTkpoaEpOS2dnS05KaGhKTktnAAIANwAAA%2BwFsAAFAA8AACEBATMBASczNxMBJyMHAwEByf5uAY6VAZL%2Bck0GE%2Fn%2FABIGEvkBAALXAtn9J%2F0ppTMB%2FwIANDT%2BAP4BAAACAEn%2BOwazBZcAOQBJAAABIiQCExISJDMyBBIDDgIjIiYnBiMiJjc2EjYzMhYXFwMGFhYzMjY3EgAhIgQCBwYSBDMyNjcXBgYDMjY3JjY3EyYmIyIGBwYWA1%2F9%2Fpu0DQ3YAXb4%2FQFfrgsGZsWTSWsXY759ihIPc7FtaX9NAjMGGDMie5MIEf6%2F%2FrHO%2Fs6wCgyQASPRWLQ%2BJ0TPjT9rLAEBAi8aOR99hBULQv474gGhASABGgGu8eL%2BX%2F7ij%2B2PU0ue8cStAQGONDYE%2FbdJVSPjrwF%2BAavS%2Foj3%2B%2F6UxisjayovAkMyPwwaEAIaDA7a342VAAMASv%2FrBNoFxQAnADIAPwAABSImJjU0Njc2NjcmJjU0NjYzMhYWFRQGBwcBNjY1MxQGBxcHIycGBicyNjcBBwYGFRQWEzc2NjU0JiMiBhUUFgIkkNV1iIcDBQJOTFikcmqgWmlnbQFUKS6wTkq5AuVVUMJoSIw%2B%2FpcoWzuOXYo5KWFOUVg2FWm6eni0WwIDAWObUnGdUlSMVmKPS1D%2BZ0GeWIPgWeAFZjw%2FmjEuAbMdRHwycZIC9l8mWTY9XnFSNXMAAQBOAAAD9QWwABIAACE1NxEjIiYmNTQ2NjMhFQcRFxUB6qNTnNx0ddybAbujo34cAW5204uK03d%2FHPuFHH4AAAIAWP4RBHgFxQA7AE8AAAEiJiY%2FAhQWFjMyNjU0JiYnLgI1NDY3JiY1NDY2MzIEBwcjNCYmIyIGFRQWFhceAhUUBgcWFhUUBAM2NjU0JiYnJiYnBgYVFBYWFxYWAmGU7YgDArxZlVqInj2XiJ%2FOZF1XREN53ZboAQUEA7xIhV2SlTeVjaPOYmBYRkb%2B9idJUD6YhzBTJElIOJWNNEz%2BEVq8kwYCX3s8d1s9UkYqKmyedluNKTKLYW%2BlW9%2FKBk99SHdbQlVCJy5smnVejCgziGKswwLfFGREPVVJKgwaDhNkRUNXRScQFwADAFz%2F6wXnBcQAEwAnAEUAAAUiJCYCNTQSNiQzMgQWEhUUAgYEJzI%2BAjU0LgIjIg4CFRQeAjciJjU1NDYzMhYHByM0JiMiBhUVFBYzMjY1MxcWBgMilP7%2Bwm5uwgEClJMBAsJubsP%2B%2F5N61aJbW6LVenvWoltbotZtoL29oJ2wBAKSW1pfZmZfWlqSAgSvFXPMARGengEPzHJyzP7xnp7%2B78xzeWCs5YSE46pgX6vjhITlrGC21K93rdaelQZfV41yeHWMVmIGl50ABABc%2F%2BsF5wXEABMAJwBCAEsAAAUiJCYCNTQSNiQzMgQWEhUUAgYEJzI%2BAjU0LgIjIg4CFRQeAicRITIWFRQGBxYWFRUUFhcVIyYmNTU0JiMjEREzNjY1NCYjIwMilP7%2Bwm5uwgEClJMBAsJubsP%2B%2F5N61aJbW6LVenvWoltbotarARiYrEI%2BQjsHCpkJBENNn5hBWk5igxVzzAERnp4BD8xycsz%2B8Z6e%2Fu%2FMc3lgrOWEhOOqYF%2Br44SE5axg2ANSg349Xx8aaks4KUEVEBVRKjZIRP6uAdQBPzhJOwAAAgBiA5cEWwWwAA8AFwAAAREzEzMTMxEjEScDIwMHESERIzUhFSMRAjB0oAajbl4GljObBv5lkAGAkgOXAhn%2BegGG%2FecBVQL%2BqQFlAf6cAcdSUv45AAAEAE%2F%2F6wVWBcUAAwAVACMARQAAJScBFwMiJiY1NTQ2NjMyFhYVFRQGBicyNjU1NCYjIgYVFRQWASImJjU1NDY2MzIWBwcjNCYjIgYGFRUUFhYzMjY1MxcWBgGvbQLHbUtciEtKiFtbh0tKh1pJUFFKSlBQ%2FYtWf0ZFf1V%2BmAQCikVBKz0fID0sP0WKAgSWbkMEckP7C0%2BIVU5ViE9PiFVOVYhPemZMTkpoaEpOS2cCu0%2BHVU1ViFCUZwY5TjBSMU0xUS9QNgZpkQAAAgB8A78CeQXFAA8AGwAAASImJjU0NjYzMhYWFRQGBicyNjU0JiMiBhUUFgF8R3RFRnRGRXNFRXNFNEdHNDVJSQO%2FRXRIR3ZISHZHSHRFgkg3N0tLNzdI%2F%2F8ApgQfAUQGGAIGAxEAAP%2F%2FAKYEHwJ6BhgAJgMRAAAABwMRATYAAAABAJb%2B8gEzBbAAAwAAExEzEZad%2FvIGvvlCAAIAlv7yAVsFsAADAAcAABMRMxEDETMRlsXFxf7yAxj86APIAvb9CgABAD8AAAQdBbAACwAAIREhNSERMxEhFSERAcj%2BdwGJxQGQ%2FnADnpwBdv6KnPxiAAACAEH%2F7QNKBcUAHQAqAAAFBiY1NQYGIzUyNjcRNDYzMhYVFRQGBgcVFBYWMxUDPgI1NTQmIyIGFRECn8fOMWUzN2Qun4t6nFyqdSpeTtA5TiktJDMyDwTv0wwMDLQNDQHZscqskCpp4chDW2GBQZkC8Ct5jUksTE5tbP6aAAABAEf%2BYAQkBbAAEwAAAREhNSERITUhETMRIRUhESEVIREBz%2F54AYj%2BeAGIxQGQ%2FnABkP5w%2FmABoJoDBJwBdv6KnPz8mv5gAAAEAFEAAAjeBcAAFwAbACsAOQAAMzU3ESc1MzMBNxEnNSEzFQcRIwEHERcVATUhFQEiJjU1NDY2MzIWFhUVFAYnMjY1NTQmIyIGFRUUFlGjo6PFArwGowFoo6PF%2FUQGowQRAi%2F%2B6p%2B8VZtpaptVu51TWVpUVFlZfhwEexx%2F%2B50CA8Ycf38c%2BusEZAL8OBx%2BAWmRkQFFuZV1Y5dVVZdjdZW5jWpXdVRsbFR1V2oAAgBh%2F%2BwEXAROABgAIQAABSImJjU0PgIzMhYWFRUhERYzMjY3FwYGASERJiYjIgYHAm2R7o1XlbxkiuGE%2FQByn1%2B6VwJXvP6QAhw2i0pKjToUmP6bccqdWY71mi%2F%2BuG48Pmg3OwJ1AR40PUE5AAAWAI%2F%2BcggiBa4ADQATABcAGwAfACMAJwA1ADkAQQBHAFUAWwBjAGcAdwB7AH8AgwCHAIsAkQAAJSImNTU0NjMyFhUVFAYBETMVMxUBNTMVATUhFQE1MxUBNSEVATUzFQEyNjU1NCYjIgYVFRQWATUhFQEzMjU0JyMjAREhFSMVAREzMhYVFAcWFhUUBiMBNTM1MxEBMzI1NCYjIwE1IRUBIiY3NzMUMzI2NREzERQGFzUzFQE1IRUBNTMVATUhFQE1MxUDNSM1IRECiGiAgGZmgYD9onHE%2FstxAT8BFP08cQLOARX7rHEBiD9KS0BASkoDFwEW%2FZx%2BZ2IFfvyAATXEArC8ZW9UMDZpXAJfx2%2F77V12OT1d%2FjABFAMZW2kGAlRoKDdcavZv%2B6wBFQLQb%2F07ARYBQG9vxwE2%2BXlicGB7e2BwYnn9eQE7ynEBt%2Fn5%2FklxcQMu%2FPz80nFxBKj6%2Bv4nTkVwRE9PRHBFTv0xcXEC1VNSBAKhAR10qfxrAiVLS1QgDUYtTE%2F9dnHK%2FsUDxFAnIAJtdHT7xFFNBls2LAF6%2FoZPXNX5%2BQURdHT8Zvz8A5p0dP3g%2BvoBd6l0%2FuMAAAUAI%2F3VB54IYgADAAcACwAnACsAAAkENTMVAzM1IzUzNDY3NjY1NCYjIgYXFzM2NjMyFhUUBgcOAhM1MxUD3%2FxEA7wDv%2FxJBIPKysoaKEheqZOIpwMDwgE7KzY7Myo1PBl9BP60A88Dz%2Fwx%2B1IEBAK4qls1PRong06Al4KCBjM0PzUyTRwlPUwGkQQEAP%2F%2FAB7%2BAgG7%2F4oABgNy9gAAAQAnAAAESwU%2BABMAADMTJTcFEyU3BRMzAwUHJQMFByUDZ%2BH%2B30YBJcv%2B3kgBI7qq5AElTP7gzAEhSP7dtQGOq3yrAWyrfqsBSv5pq3yq%2FpWsfar%2BwP%2F%2FAC0D4QFRBhgCBgMKAAD%2F%2FwAoBUYC%2BQXYAAYDbAAAAAIAKAVFAp4GGAADAAcAAAE1MxUhNTMVAc%2FP%2FYrPBUXT09PTAAEAKAVFAPcGGAADAAATNTMVKM8FRdPTAAEAKAUIAcgGGAAFAAABIyMBNzMByAmK%2FvMC5gUIAQoGAAABACgFCAHIBhgABQAAExMzFwEjKLjmAv7zigUIARAG%2FvYAAgAoBQgDDQYYAAUACwAAAScTMxcBISMTMxcDATcC8eQD%2FtX%2BTQe40wLwBQgFAQsG%2FvYBEAX%2B9QABACgEnAEiBhgACQAAEyc2NjU1MxUUBn5WJCK0TwScSjJkQlpXW5EAAQAoBRECjQYYAAgAABM1NzMXFSMnByj2d%2Fihk5EFERrt7hmUlAABACgFEQKNBhgACAAAARUHIyc1Mxc3Ao32d%2Fihk5EGGBrt7hmUlAAAAQAoBPgClgYYAA8AAAEiJjU3MxQWMzI2NTMXBgYBX5GmApZNUlBOlwIBpQT4nX0GSFpaSAZ9nQACACgEyQHFBlEACwAXAAATIiY1NDYzMhYVFAYnMjY1NCYjIgYVFBb4V3l5V1V4eFUqPDwqLD0%2BBMlsVlRycVVWbFo7LS0%2BPi0rPQAAAwAoBDIB4wbPAAsAFwAdAAATIiY1NDYzMhYVFAYnMjY1NCYjIgYVFBYDNzMXByPzVXZ2VVN1dVMpODgpKjo7JXvBArx5BDJpVFJvblNUaVo4Kys7OyspOgFc5wbhAAEAKAUZAt0GJwAXAAATJzQ2NjMyFhYzMjY1FxQGBiMiJiYjIgaTazheOi1mXyIpPGw4XzoxZlsiKjsFGRZAakEyMkEwHEBoPTEyQQABACgFRgL5BdgAAwAAEzUhFSgC0QVGkpIAAAEAKATlAV8GdwAPAAATJzY2NTQmIzcyFhUUBgcHOwFMQVhHB5KeV0ABBOWYBB4lJCNsZFNFSAlFAAACACgFCAMNBhgABQALAAABIwE3MxMFIwM3MxMB%2Fqv%2B1QPk8QEGlvAC07gFCAEKBv71BQELBf7wAAEAKAUTASIGjwAJAAATFwYGFRUjNTQ2zFYkIrRPBo9KMmRCWldckAABACgDRwGCBLEACQAAEycyNjY1MxQGBikBU1AZnj6WA0d4N2xPa6NcAAABACj%2BcgD3%2F0UAAwAAEzUzFSjP%2FnLT0wACACj%2BAgHF%2F4oACwAXAAATIiY1NDYzMhYVFAYnMjY1NCYjIgYVFBb4V3l5V1V4eFUqPDwqLD0%2B%2FgJsVlRycVVWbFo7LS0%2BPi0rPQD%2F%2FwAo%2FecBIv9jAgYDdAAAAAEAKP3nASL%2FYwAJAAATJzY2NTUzFRQGflYkIrRP%2FedKMmRCWldbkQABACj%2BTQFhACAADwAAEycyNjU0Jic3MwcWFhUUBjAHSFdIWCiNFEJWnv5NbTAvLyQHrVoLUE9ecQAAAQAo%2FlABtgA5ABMAAAEiJjU0NjcXBgYVFBYzMjY3FwYGAQ5pfXeBR0ZPLTMbLhohJFP%2BUG5jUI85OTRfNiowDwt7ExkAAAEAKAKXAoMDMgADAAATNSEVKAJbApebmwAAAQAoA7sFmARMAAMAABM1IRUoBXADu5GRAAABACgCQgISA6IAAwAAEzUlFSgB6gJCpbulAAEAKP95A0EEuQADAAAXATMBKAKYgf1ohwVA%2BsAA%2F%2F8AKAVFAp4GGAAGA2AAAP%2F%2FACgFRQD3BhgABgNhAAD%2F%2FwAoBQgByAYYAAYDYgAA%2F%2F8AKAUIAcgGGAAGA2MAAP%2F%2FACgFCAMNBhgABgNkAAD%2F%2FwAoBRECjQYYAAYDZgAA%2F%2F8AKAURAo0GGAAGA2cAAP%2F%2FACgE%2BAKWBhgABgNoAAD%2F%2FwAoBMkBxQZRAAYDaQAA%2F%2F8AKAUZAt0GJwAGA2sAAP%2F%2FACgFRgL5BdgABgNsAAD%2F%2FwAo%2Fk0BYQAgAAYDdQAA%2F%2F8AKP5QAbYAOQAGA3YAAAABACj%2BUAG%2BAHMAEwAAASImNTQ2NxcGBhUUFjMyNjcXBgYBB2F%2BiI5HU2AxNB0vGiEkV%2F5Qc2loqDc5NnVNMTQPC3sTGQAAAwAoBDIB4wbPAAsAFwAdAAATIiY1NDYzMhYVFAYnMjY1NCYjIgYVFBYDNzMXByPzVXZ2VVN1dVMpODgpKjo7JXvBArx5BDJpVFJvblNUaVo4Kys7OyspOgFc5wbhAAEAKASkAaoGOQAIAAATJzI2JzMUBgYpAXpYArJNqQSkh5tzdrdoAAABACgCQAJ1A6AAAwAAEzUlFSgCTQJApbulAAEAKP%2BiBHkF7QADAAAXATMBKAO8lfxEXgZL%2BbUAAAEAjATgAZAGVgADAAATEzMDjDTQogTgAXb%2Biv%2F%2FAIwE4AGQBlYABgONAAAAAwAoBOAC1QaBAAMABwALAAABEzMDBTUzFSE1MxUBNiPVif6DxgEhxgV0AQ3%2B85TIyMjIAAEAKATaASIGVgAJAAATJiY1NTMVFBYXzFVPtCIkBNo5kVtXWkJkMgABACgE2gEiBlYACQAAEyYmNTUzFRQWF8xVT7QiJATaOZFbV1pCZDL%2F%2FwCMBOABkAZWAgYDjQAA%2F%2F8AjATgAZAGVgAGA40AAAABACgEpAL3BfwABwAAEyc1IScXFSHXrwIhAa%2F94ASkAetsAdkAAAEAKAUXAyAGFQAVAAATNTMyPgIzMhYVFSM1NCYjIg4CIygsOYeHcyRxfYY7MRVniZJBBReCJTIlbmwkEjQ2JTIlAAEAKAUVAR0GVwAFAAATJzUzBxfMpLsBOwUVx3uMdAAAAQAoBRUBHQZXAAUAABMnNyczFXhQOgG8BRVCdIx7AAABACgE%2BAKWBhgADwAAASImNTczFBYzMjY1MxcGBgFfkaYClk1SUE6XAgGlBPidfQZIWlpIBn2dAAEAKP6ZAO0AbAADAAATETMRKMX%2BmQHT%2Fi0AAf%2FU%2FksBcwBGAA8AABMiJic3FhYzMjY1NTMVFAZDHTIgDg5AEzI5xZ%2F%2BSwkJoAUHUk61tZyqAAAIACP%2BxAe8Ba8ADwAfAC8APwBPAF8AbwB%2FAAATJyY2MzIWBwcjNCYjIgYVAycmNjMyFgcHIzQmIyIGFQEnJjYzMhYHByM0JiMiBhUBJyY2MzIWBwcjNCYjIgYVAScmNjMyFgcHIzQmIyIGFRMnJjYzMhYHByM0JiMiBhUBJyY2MzIWBwcjNCYjIgYVAScmNjMyFgcHIzQmIyIGFdoCBXFhYHEEAmgxMjIvdAIFcWBgcgQCaTAzMi4B4gIFcGFgcQQCaDEyMi%2F8pQIFcWBgcQQCaDAzMi8EyQIFcWBgcQQCaDAzMi9cAgVxYGBxBAJoMDMyL%2FyNAgVwYWBxBAJoMTIyLwHmAgVxYGByBAJpMDMyLgPeBk9nZ08GKzo6K%2FwCBk5oZ08GLDk6K%2F7kBlBmZlAGLDk5LAMjBk5oZ08GLDk6K%2F35Bk5oZ08GLDk6KwIHBk5oZ08GLDk6KwMMBk9nZ08GKzo6K%2F7rBk5oZ08GLDk6KwAACAAo%2FmMHaAXGAAQACQAOABMAGAAdACIAKQAABSclFwcTEzMXAwElNQUVAQM3FxMBJwM3EwElNTcFAScTMwMFJzclFwYGATBFASZhAuxGiQt6%2Fbn%2BswFaBIrFYRGV%2B5gRlEHGBSD%2Bpg0BTfwADHpgRgGPYQIBQUQTk5VFyGMR%2Fl8BYQ7%2BrQNCfGJHi%2F1iAStjAv67BAICAUZF%2FtX950eLDHwCXw4BUv6g32MQmUQLZAACACgE1QKWBs8ADwAVAAABIiY1NzMUFjMyNjUzFxQGAzczFwcjAV%2BRpgKUTlNRT5UCpep7wQK8eQTVjG8GO0xMOwZvjAET5wbhAAIAKATVApYGzwAPABUAAAEiJjU3MxQWMzI2NTMXFAYDIyMnNzMBX5GmApVPUVNOlAKlOgl5vALBBNWMbwY7TEw7Bm%2BMARPhBgAAAgAoBNUClgceAA8AHwAAASImNTczFBYzMjY1MxcUBicnNjY1NCYjNzIWFRQGBwcBX5GmApZNUlBOlwKl4wFKP1BBB4eRVD4BBNWMbwY7TEw7Bm%2BM%2BHMDGyAjIF1SSDk%2BCDgAAAIAKATVApcHEgAPACcAAAEiJjU3MxQWMzI2NTMXFAYBJzQ2NjMyFhYzMjY1Fw4CIyImJiMiBgFfkaYClk1SUE6XAqX%2BoWovUzUlXFkeIzJrATBSNSldVB4jMgTVjG8GO0xMOwZvjAFBGDphOywtPCscOmA4LCw7AAIAKATqAzEGzwAIAA4AABM1NzMXFSMnByU3MxcHIyj2gfink5EBJ3vBArx5BOoa2tsZior%2B5wbhAAACACgE6gMxBs8ACAAOAAABIycHIzU3MxclIyMnNzMDMaSRk6f4gfb%2BNQl5vALBBOqKihnb2uThBgAAAgAoBOoDOgcLAAgAGAAAEzU3MxcVIycHJSc2NjU0JiM3MhYVFAYHByj2gfink5EBXQFHPU0%2FB4WOVD4BBOoa2tsZiorQcwMbICMgXVJIOT4IOAAAAgAoBOoClwcSABcAIAAAEyc0NjYzMhYWMzI2NRcOAiMiJiYjIgYDNTczFxUjJweYai9SNCZUUR8jMGsBL1I0KlRNHyIxcPaB%2BKeTkQYWGDphOywtPCscOmA4LCw7%2Fqka2tsZiooABABP%2F3MFWAY1ABEAIwAnACsAAAUiJAI1NTQSJDMyBBIVFRQCBCcyNhI1NTQCJiMiBgIVFRQSFhMRMxEDETMRAsm8%2FuKgoAEevMEBKKam%2FtjBkc1sbs2PicRoaMQ7oaGhFcABTtQV0wFPwcH%2BsdMV1P6ywKGSAQSrF6kBBJKT%2Fv2pF6v%2B%2FJL%2B5wGO%2FnIFPQGF%2FnsAAAQAaP%2BKBDAEtgARACMAJwArAAAFIiYmNTU0NjYzMhYWFRUUBgYnMjY2NTU0JiYjIgYGFRUUFhYXETMRAxEzEQJNltl2dtiVldp2dtiVXYBBQYBfX39AQYAOnZ2dFY34oRag%2BY6O%2BKEWofiNmmazcxZxs2hos3EWc7Nm%2BwFx%2Fo8DugFy%2Fo4AAwCI%2F%2BsGTgdYADIAOABOAAAFIiYmNRE0NjYXFxUiBhURFBYzMjY1ETMRFBYzMjY1ETQmIzU3NhYWFREUBgYjIiYnBgYTJzcnMxUlNTQ2MzIeAjMzFSMiLgIjIgYVFQIXeLNkY7F1Bltvb1tshcaEbFtwcFsGdLJkZbR3cq8yM7C3UDoBvP5IfHIkc4eHOS0vQpKJZhUyORVnyZICQJHIZgMCkpiQ%2FcCRl4N%2FAbD%2BUH6El5ECQJCYkgIDZsiR%2FcCSyWdVVVVVBTtCc4x7biRsbiUyJYElMSU2NBIAAAMAcv%2FrBZkF8QAyADgATgAABSImJjURNDY2FxcVIgYVERQWMzI2NTUzFRQWMzI2NRE0JiM1NzYWFhURFAYGIyImJwYGEyc3JzMVJTU0NjMyHgIzMxUjIi4CIyIGFRUB2WyhWlmfaQZKWFhKWnDFbltJWlpJBmmfWlqibGSbLS%2BbvlA6Abz%2BSHxyJHOHhzktL0KSiWYVMjoVXreGASOFtl0DA5KDff7df4Jwa%2BrqbG%2BDfgEjfYOSAwNdtoX%2B3Ya3XkhISEgD1EJzjHtuJGxuJTIlgSUxJTY0EgAAAgCQ%2F%2BsGXAcFACIAKgAABSImJjURMxEUFjMyNjURMxEUFjMyNjURMxEUBgYjIiYnBgYTNSE1IRchFQIfeLNkxW9bbIXMemRjesVpvH1tqi8zsXv%2BxwM1Av60FV64hgQp%2B9d%2BhIN%2FBCn7136EhH4EKfvXhrheV1ZWVwYvfm1tfgACAJb%2F6wW%2BBbEAIAAoAAAFIiY1ETMRFBYzMjY1ETMRFBYzMjY1ETMRFAYjIiYnBgYTNSE1IRchFQH9osXFWEpacMZjU1FlxdKpXpIrL5tu%2FscDNQP%2BsxW%2FtgLa%2FSZsb3BrAtr9JmxvcGsC2v0mtr9IR0dIBNmAbW2AAAEAAAOrAJIAFgBeAAUAAQAAAAAAAAAAAAAAAAAEAAEAAAAmAFAAXABoAHQAhACQAJwAqAC0AMAA0ADcAOgA9AEAAQwBGAEkATABPAFIAVQBYAFsAaIBrgHrAiUCMQI9AkkCVQJhAo8CmgKmArEC0wLfAusC9wMDAw8DHwMrAzcDQwNPA1sDZwNzA38DiwOXA6MDwgP%2FBAsEFwQjBC8EXQRoBHQEiwSXBKMErwS7BMcE0wTfBOsE9wUDBQ8FGwVDBU8FhgWSBa0FuQXFBdEF3QXoBh0GKQZRBl0GaQZ1Bq4Gugb6BwYHEgceByoHOgdGB1IHXgdqB3YHggeOB5oHqge6B8oH2gfqB%2FYIAggNCBwIKAh4CKYI2QkgCVoJZglyCX4JxgnSCd4J6gn2CgIKQAp9CpoKpgqyCr4Kygr5CwULEQsdCykLNQtBC00LiAuUC6ALrAu4C8QL0AvcC%2BgL9AwADCQMWwxnDHMMfwyLDMAM7Az4DQQNEA0cDSgNNA1ADVwNaA10DYANxg3SDd4N6g36DgYOEg4eDioONg5GDlEOXQ5pDnUOgQ6NDpkOpQ6xDr0OyQ7VDuEPTA9YD5IPyA%2FUD%2BAP7A%2F4EAQQQRCSEJ4QqhDlEPEQ%2FREJERURIRExETwRSBFUEWARbBF4EYQRkBGcEagRtBHwEhkSaBJ0EoASjBKYEsYS0hLeEuoS%2FhMKExUTIBMrEzsTRhNSE2YTcROBE4wTmBO4E8MTzhQBFA0UPhRSFF4UahR2FIIUjRTUFOAVDhUaFSYVMhU%2BFXgVhBW6FcYV0hXeFeoV%2BhYFFhEWHRYpFjUWQRZNFlkWaRZ5FokWmRapFrUWwRbMFtsW5xdNF4wXyxgIGC8YOxhGGFIYlBigGKwYuBjEGNAZHhk%2FGWUZcBl8GYgZlBnAGcwZ2BnkGfAZ%2FBoIGhQaIBowGkAaUBpgGnAafBqIGpQaoBqsGs8bBBsQGxwbKBs0G2cbnBuoG7QbwBvMG9gb5BvwHAwcGBwkHDAcYhyUHKAcrBzuHRgdOh1CHXIdeh2UHaAduh3uHfYeAh4OHnQetx7qHvYfAh8SH1AfXB%2BKH5Ifmh%2BiH6ofsh%2B6H8If9yADIFQgXCCNILMg4iEUIT4hayGbIach6CItIjUicyKzIrsixyLPIwYjVSOXI9MkByQTJGkklyTdJS8llyXxJfkmPSZnJnMmfyaKJsEmzSbZJuUnJicyJ3MnfyewJ%2B8oSihWKGIoaih2KIIorSi5KPIpJClrKXcpfymLKc0p2SoTKh8qKyo3KkMqTypXKmMqayp3KoMqjyrKKtYq4iruKvYrAisOKxorJisyKz4rSitaK2krdSuyK%2BEsJCxyLL0s%2Fi1HLYktwC4FLhEuQy5PLogukC7fLxYvMC88L1cviS%2BRL50vqTAEMEYwcTB9MIkwmTDSMN4xCDE6MWgxcDGSMZoxojG%2BMcYx0jI8MkQyeDKfMsgy9TMfM0ozdjOwM%2B00LTQ1NHM0sTS9NMg01DTgNSc1XDWeNc82ATZPNng2tDb%2BN1s3tTe9N%2Fw4Kjg1OEE4TTiCOI44mjimOOc5ITldOWk5mTnWOi86OzpHOk86iDqUOr06yTsEOww7UjteO2Y7cjurO7c78jv%2BPAo8FjwiPC48NjxCPEo8VjxiPG48pTyxPL08yTzRPN086Tz1PQE9DT0ZPSU9MT1BPU09iD2QPeg%2BNj6APsA%2FBD9AP3U%2FfT%2BJP7o%2F7EA1QD1ARUBNQGZAbkB2QH5AxEDMQNRA90D%2FQQdBLUE1QVdBX0GEQYxBlEHjQetCKkJqQnZCg0KQQp1CqUK1QsFCzULZQxdDbkO0Q%2FxEL0SCRMRFAkU3RW1FjUWVRc9F10XfRixGNEZbRpJG0EcJRy1HZUesR9pIIEhmSHFIfEiHSJNIn0irSLdIw0jPSNtI50ktSXdJp0m8SfBKNUpZSpRK2Ur8S09LlUvHS9xMDkxVTHVMrUz1TRVNaE2tTbxN6U4kTkNOdU6QTtZO508VT1BPcE9%2BT49PoE%2BxT8JP00%2FkT%2FVQAFAUUCBQLFA8UE9QYVCZUNFQ2lDzURZRIlFZUWdRdlGCUbFR31IOUj1ST1JhUm5SdlKDUpBSmFKkUrBSuFLEUtBS3FLyUwhTHVMpUzVTSVNdU2lTeVOCU4JTglOCU4JTglOCU4JTglOCU4JTilOKU4pTilOKU4pTyVQdVGdUdlS4VOxU%2BFU%2BVYxVxFYBVglWIVYuVk5WZ1Z7Vp5WtFbMVupXClcqV4VXslfDV9tYRFhwWIhYq1jFWPNZM1mVWhlaP1q4WxlbOVutXBJcgVysXRFdPV1FXVFdXl1yXYpdyV3tXkNeel9ZX6BfqF%2FTX9tf41%2F1YAFgEmAjYD9gU2BmYHpglmC8YOthEWEeYTthV2FrYYBhjGGyYbphzmHrYg5iG2IoYjViRGJMYlRiXGJkYmxidGJ8YoRijGKUYpxipGKsYs9i%2FmMSYx9jLmM8Y0RjXmNyY4ZjjmOWY6ljymPaY%2BpkBmQTZC9k6GVAZWVlimW8ZfhmFWYyZlxmj2bZZxxnimf3aDdodAABAAAAAgBCAeIY118PPPUAAwgAAAAAANeHvVkAAAAA3R9aMP6d%2FdUJ2whiAAAABgACAAAAAAAABA4AZAX9AEYF%2FQBGBf0ARgX9AEYF%2FQBGBf0ARgX9AEYF%2FQBGBf0ARgX9AEYF%2FQBGBf0ARgX9AEYF%2FQBGBf0ARgX9AEYF%2FQBGBf0ARgX9AEYF%2FQBGBf0ARgX9AEYF%2FQBGBf0ARggwADMIMAAzBSoAUQUKAFAFCgBQBQoAUAUKAFAFCgBQBQoAUAVMAFEFTABRBUwAUQVMAFEFGgBRBRoAUQUaAFEFGgBRBRoAUQUaAFEFGgBRBRoAUQUaAFEFGgBRBRoAUQUaAFEFGgBRBRoAUQUaAFEFGgBRBRoAUQUaAFEE6ABRBUIAUAVCAFAFQgBQBUIAUAVCAFAGKgBRBioAUQYqAFECrQBRBzUAUQKtAFECrQAfAq0AIwKtABsCrQBRAq0AUQKtAC8CrQBRAq3%2F7QKtAFECrf%2F7BJEAPASRADwF3QBRBd0AUQS6AFEEugBRBLoAUQS6AFEEugBRBLoAUQe%2BAF4HvgBeBjgAUwY4AFMGOABTBjgAUwYXAEYGOABTBUcARgVHAEYFRwBGBUcARgVHAEYFRwBGBUcARgVHAEYFRwBGBUcARgVHAEYFRwBGBUcARgVHAEYFRwBGBUcARgVHAEYFRwBGBUcARgVHAEYFRwBGBUcARgVHAEYFRwBGB8MARgURAFEE%2FQBGBWAARgVpAFEFaQBRBWkAUQVpAFEEtgBzBLYAcwS2AHMEtgBzBLYAcwS2AHMFjgBRBXoATgV%2BAGAFfgBgBX4AYAV%2BAGAFfgBgBfIARgXyAEYF8gBGBfIARgXyAEYF8gBGBfIARgXyAEYGvABGBrwARga8AEYGvABGBrwARga8AEYF8gBGBfIARgXyAEYF8gBGBfIARgXkAEEIUQBICFEASAhRAEgIUQBICFEASAX5AFAFtQBBBbUAQQW1AEEFtQBBBbUAQQW1AEEFtQBBBbUAQQStAFoErQBaBK0AWgStAFoEbABPBGwATwRsAE8EbABPBGwATwRsAE8EbABPBGwATwRsAE8EbABPBGwATwRsAEMEbABPBGwATwRsAE8EbABPBGwATwRsAE8EbABPBGwATwRsAE8EbABPBGwATwRsAE8GyQBPBskATwR5%2F%2FAEKwBOBCsATgQrAE4EKwBOBCsATgQrAE4EwgBOBKcATgTCAE4EwgBOBCMASgQjAEoEIwBKBCMASgQjAEoEIwBKBCMASgQjAEUEIwBKBCMASgQjAEoEIwBKBCMASgQjAEoEIwBKBCMASgQjAEoEIwBKBFsAZwLVAEAEhQBOBIUATgSFAE4EhQBOBIUATgUjADEFIwAxBSMACwKMAEMCjABDAowAQwKMAA0CjAARAowACQKMAEMCjAAdAowAQwTcAEMCjP%2FbAowAQwKM%2F%2BkCDf%2FIAg3%2FyAIN%2F8gCDf%2FIBQcAQAUHAEAE6QBAAo0AQAKNAEACjQBAAo0AQAKNAEACjQBAB7kASge5AEoFPwBKBT8ASgU%2FAEQFPwBKBT8ASgTvAFoFPwBKBGQATgRkAE4EZABOBGQATgRkAE4EZABOBGQATgRkAE4EZABOBGQATgRkAE4EZABOBGQATgSLAE4EiwBOBIsATgSLAE4EiwBOBIsATgRkAE4EZABOBGQATgRkAE4EZABOBzUATgStACIEpAAZBHMATgNWAEgDVgBIA1YASANWAEgD%2FgBoA%2F4AaAP%2BAGgD%2FgBoA%2F4AaAP%2BAGgFCAA3At4AOQLaABgC2gAXAtoAGALaABgC2gAYBN0ANATdADQE3QA0BN0ANATdADQE3QA0BN0ANATdADQFOwA0BTsANAU7ADQFOwA0BTsANAU7ADQE3QA0BN0ANATdADQE3QA0BN0ANAS2ABoHHwA0Bx8ANAcfADQHHwA0Bx8ANASzACoEqAAYBKgAGASoABgEqAAYBKgAGASoABgEqAAYBKgAGAQIAFgECABYBAgAWAQIAFgE1wAtBUYAMwevAEAIGwBAA34AagOtAHkDrACWBf0ARgVPADwFQQBRBMAATQTAAE0EtwA8BiIANwUaAFEFGgBRBRoAUQf5AD4ExgBJBiYATQYmAE0GJgBNBiYATQWsAEcFrABHBegAOQe%2BAF4GKgBRBaUARgYoAE0FFQBRBSkAUAV%2BAGAFUAA2BVAANgZAAFQF%2BQBQBfYAOwY6AE0H9QBNB%2FwATQYnAE0FTgBGBswAPgdlAEYInQA5COIAUQS2AHMFBAA0BOkAUwKWAFECrQAbBJ8APAbRADgHygAvBWgAOAYlAEoG4wCQBU4ARgcMADkFkwA0B48AKAdnADcJhgA4BB0AKgaBADcFewBPBWsAOQVrADkJ7wBGBMAATQTYAE0H%2BQA%2BBMYASQWsAEcFvgBGBawARwb7ABQGKgBRB%2F0AMAhPAE0GBQBqBSkAUAV%2BAGAFtQBBBbUAQQX5AFAHGQBNBfYAOwX3ADsGAQA6BgMAOwYDADsClgBRB%2FkAPgWSAEYF6AA5BhsATQYqAFEF9gA7B74AXgX9AEYF%2FQBGCDAAMwUaAFEFegBOBXoATgf5AD4ExgBJBGQAUAYmAE0GJgBNBaUARgV7AE8FewBPBOkAUwVQADYFUAA2BVAANgX2ADsEwABNB2UARgTAAE0F%2BQBQBfkAUAVGAE8GpwBPBiAAMARWABsHwgA3CBEARgTuAHIFygBNBQ4AagXoADkE8wByBU4ARgUVAEcEbABPBI4AagT3AGEEMwBIBDMASAQxAD4FGABCBCMASgQjAEoEIwBKBsAAJwQYAFYFdABhBXQAYQV0AGEFdABhBPAAYQTwAGEFJABFBrwAYQVzAGEEfQBOBXQAYQTYACIEKwBOBKIATgSoABgEqAAYBb8AWwSzACoFSwBBBVIARgdQAGEHUQBVBXUAYgS8AGEFjAAfBsQAYQb6AEEHZgBhA%2F4AaAReAHIEQQBdAqEAQwKMAAkCO%2F%2FIBSMAMQbmAEUFFgBBBRIAHwZFAJYEtABLBm4AWASzADwG4AAqBkAARAiMABIDswAfBin%2F%2FwSiAGgEjABBBIwAQQkCAE4EMwBIBHsAPgbAACcEGABWBPAAYQVYAFoE8QBIBhwAUgVzAGEGMgBVB3UAVQT%2BAHAEKwBOBKIATgQ%2BABQEPgAUBLMAKgYmADMFSwBBBUgAWwUjADEFHwAKBR8ACgKWAFEGwAAnBP4AWgUkAEUFWABaBXMAYQVLAEEGvABhBGwATwRsAE8GyQBPBCMASgRbAGcEWwBnBsAAJwQYAFYEaQBOBXQAYQV0AGEEfQBOBKIAaASiAGgEQQBdBKgAGASoABgEqAAYBUsAQQQzAEgGxABhBDMASASzACoEswAqBM0ATgbBAFQFowAiA%2F8AFwaqAEEHLwBaBC0AaAUqAFoESQBpBSQARQQiAGgErgAnBNgAIgX9AEYFKgBRBMAATQWYAB8FGgBRBK0AWgYqAFEFewBPAq0AUQXdAFEFqgA0B74AXgY4AFMEmwBCBUcARgYoAE0FEQBRBJ0ATwV%2BAGAFtQBBBb8ATwV8AFAGgQA3BUoAYQX9AEYF2f%2F9Bv3%2F%2FQOA%2F%2F0FR%2F%2F%2BBocAFgVR%2F%2F0CrQAbBbUAQQTPADQFR%2F6dBLgAaASUAI8EPgAUBIwAYQRJAGkELgBzBLj%2F%2FASKAH8CnQAfBOkAQARvACMFIwBCBHcAGgPsAGIEfQBOBQEASwSEAIYERABjBN4AaQP2AD4ExAAZBdwAcQSoAD4GKf%2F%2FBo8AdAKdAB8CnQAAAp3%2F3wTEABkExAAZBMQAGQR9AE4GjwB0BLgAaARJAGkEuP%2F8BT4AeQaIAGkEkAB5A0wAdQRrAEkEUgBIBKMAPwQ5AF4EeAB5BGgATARrAFwEggBUBN4AiwMHADwEfgBcBKkAdQSfAEUEnQCnBJ4AkgQCAB4E1AB8BJ4AYQIuAF8DXABzA2sAawOUAFcDewBzAxEAXwOEAHACIwBfAzsAcwNNAGsDjwBDA4MAKgXIALcFowC3BpoAewZtAGwHAABvBzUAbwaLAGsB7QCRAZQAFwGjAJEBqAA1BUIAkgHjAI8B4wCPA7kAQAN6ADoCBACgArMAhwO%2BAEIDxgCPBN4APwM4AAADSQAkA6gAkgKWAHICjgALAr0APwK9ABsCPQCdAigAFwMdAJoDHQCaBXgAoQZNAKUGTQClBJAAdwSLAHoBlAAXAsYAFwLoAGAC8AA6AaIAYAGiAC0B8wAqA6cAOgOqAGkCUQBEAlEAUwMCAKYBzACmAgQAoAgpAAAIKQAABBQAAAQUAAAEfwAAAgoAAADRAAACMAAAAVwAAAH9AAAB%2FQAAAaIAAAK5AAAAAAAAAf0AAAAAAAAEXgBoBbUAXgRWAFAE6wBOBCAARwL%2F%2F%2F0E6ABRBLMAWwa2AE0EmwBEBWoAOwODACoEeQBJBHcAmgQuAE8EfABKBGcAkwQTAJMEJAB9A%2FkATAQwAI8EGgCVBCEASwSkAIEFagB5BGIAeQNgAEcINQBqAqj%2FpgYLADwE1wBFBNMAPQUjAEIEpwBOBbQATQetAEwEGwA3Bx0ASQUJAEoEQgBOBNEAWAY7AFwGOwBcBOgAYgWaAE8C9QB8AcwApgL9AKYBwwCWAfAAlgRkAD8DoQBBBHMARwkdAFEErwBhCLIAjwe7ACMB2QAeBHIAJwGiAC0DIQAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAsYAKAEfACgB8AAoAfAAKAM1ACgCtQAoArUAKAK%2BACgB7QAoAwUAKAMhACgB1gAoAd4AKAAAACgAAAAoAAAAKAAAACgAAAAoAe0AjAJYAIwC%2FQAoAUoAKAFKACgB7QCMAlgAjAAAACgAAAAoAAAAKAAAACgAAAAoARUAKAIF%2F9QH4AAjB5AAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoBaUATwSOAGgGzgCIBfwAcgbjAJAGHACWAAEAAAhi%2FdUAAAnv%2Fp36aAnbAAEAAAAAAAAAAAAAAAAAAAOrAAQE1wGQAAUAAAUzBM0AAACaBTMEzQAAAs0AZAKJAAAAAAAAAAAAAAAAAAAA%2FwAAAFsAAAAgAAAAAEdPT0cAwAAN%2F%2F0IYv3VAAAIYgJqIAABnwAAAAAEOgWwAAAAIAADAAAAAgAAAAMAAAAUAAMAAQAAABQABAjCAAAAsgCAAAYAMgANAC8AOQB%2BAX8BjwGSAaEBsAHwAf8CGwI3AlkCvALHAskC3QLzAwQDDAMPAxIDGwMjAygDOAOKA4wDkAOhA6kDsAPJA84D0gPWBBoEIwQ6BEMEhgUTHgEePx6FHp4e%2BR9NH%2F4gCyAVIB4gIiAmIDAgMyA6IDwgRCB0IH8gpCCnIKwhBSETIRYhIiEmIS4hXiICIgYiDyISIhUiGiIeIisiSCJgImUlyvbD%2BwT%2B%2F%2F%2F9%2F%2F8AAAANACAAMAA6AKABjwGSAaABrwHwAfoCGAI3AlkCvALGAskC2ALzAwADBgMPAxIDGwMjAyUDNQOEA4wDjgORA6MDqgOxA8oD0QPWBAAEGwQkBDsERASIHgAePh6AHp4eoB9NH%2F0gACATIBcgICAlIDAgMiA5IDwgRCB0IH8goyCnIKshBSETIRYhIiEmIS4hWyICIgYiDyIRIhUiGiIeIisiSCJgImQlyvbD%2BwH%2B%2F%2F%2F8%2F%2F8DFAAAApAAAAAA%2FvgBlgAAAAD%2FEwAAAAD%2By%2F6RAKIAugCWAAAAaQAAAAAAXwBdAFUATgAAAEIAAP8HAAD%2B5v7lAAD%2B6QAAAAD%2B6QAA%2FWgAAP3LAAAAAAAAAAAAAOHoAADjTAAAAADi7QAAAAAAAOMW4x%2Fi1eK34pviauDx4obihOJ74kriQ%2BJC4izhaOIr4YjhQuB04TEAAOEZ4SjhIOEU4PLg1AAA3X0MsAZpBCMDXgABAAAAsAAAAMwBVAAAAAADDgMQAAADEAMaAAAAAAAAAAAAAAMWAAADHgMmAAAAAAAAAAADKgAAAy4AAAM4AAAAAAM4AAADQgNKAAADSgAAA3wAAAOmBCoFQAVCBUQAAAVMAAAF%2FAX%2BAAAGEgYgBiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf4AAAAAAAAAAAAAAAAF9AAAAAAAAAAAAAAAAAMcAuwDEAL0AyUDRQNJAxEC%2BAL5AvIDLwLoAv4C5wL1AukC6gM2AzMDNQLuA0gAAQAbABwAIgAmADgAOQA%2BAEEATgBQAFIAWABaAGAAeQB7AHwAgACIAI0AoAChAKYApwCvAvwC9gL9Az0DAwN9ALMAzQDOANQA2ADrAOwA8QD0AQEBBQEIAQ4BEAEXATABMgEzATcBPwFEAVcBWAFdAV4BZgL6A1MC%2BwM7Ax0C7QMjAywDJAMtA1QDSwN7A0wBbgMMAzwC%2FwNNA4UDUAM5AtwC3QN%2BA0MDSgLwA4YC2wFvAw0C4QLgAuIC7wARAAIACQAYAA8AFQAZAB8AMwAnACoAMABJAEMARQBGACMAXwBrAGEAYwB3AGkDMQB1AJMAjgCQAJEAqAB6AT0AwwC0ALsAygDBAMcAywDRAOUA2QDcAOIA%2BwD2APgA%2BQDVARYBIgEYARoBLgEgAzIBLAFKAUUBRwFIAV8BMQFhABMAxQADALUAFADGAB0AzwAgANIAIQDTAB4A0AAkANYAJQDXADUA5wAoANoAMQDjADYA6AApANsAOwDuADoA7QA9APAAPADvAEAA8wA%2FAPIATQEAAEsA%2FgBEAPcATAD%2FAEcA9QBCAP0ATwEEAFEBBgEHAFMBCQBVAQsAVAEKAFYBDABXAQ0AWwERAF0BFABcARMBEgBeARUAdAErAGIBGQBzASoAeAEvAH0BNAB%2FATYAfgE1AIEBOACEATsAgwE6AIIBOQCLAUIAigFBAIkBQACfAVYAnAFTAI8BRgCeAVUAmwFSAJ0BVACjAVoAqQFgAKoAsAFnALIBaQCxAWgBPgBtASQAlQFMABYAyAAaAMwAdgEtAIUBPACMAUMDggN8A4MDhwOEA38DYgNjA2YDawNsA2gDYQNgA20DaQNkA2cDcgN0A3UDdgONA48CjwMSApACkQKSApQClQK1ApYClwK7ArwCvQKzArgCtAK3ArkCtgK6Ar4CmAF5AXoBogF1AZoBmQGcAZ0BngGXAZgBnwGCAX8BjAGTAXEBcgFzAXQBdwF4AXsBfAF9AX4BgQGNAY4BkAGPAZEBkgGVAZYBlAGbAaABoQH0AfUB9gH3AfoB%2BwH%2BAf8CAAIBAgQCEAIRAhMCEgIUAhUCGAIZAhcCHgIjAiQB%2FAH9AiUB%2BAIdAhwCHwIgAiECGgIbAiICBQICAg8CFgGjAiYBpAInAaUCKAGmAikBpwIqAagCKwGpAiwBqgItAasCLgGsAi8BrQIwAa4CMQGvAjIDpQOmA6cDqAOpA6oB8QJ0A10DlAOVA5YDlwObA5wBgAIDAfICdQHzAnYBdgH5AbACMwGxAjQBsgI1AbMCNgG0AjcBtQI4AbYCOQG3AjoBuAI7AbkCPAG6Aj0BuwI%2BAbwCPwG9AkABvgJBAb8CQgHAAkMBwQJEAcICRQHDAkYBxAJHAcUCSAHGAkkBxwHIAksByQJMAcoCTQHLAk4BzAJPAc0CUAHOAlECSgHPAlIB0AJTAdECVAHSAlUB0wJWAdQCVwHVAlgB1gJZAdcCWgHYAlsB2QJcAdoCXQHbAl4B3AJfAd0CYAHeAmEB3wJiAeACYwHhAmQB4gJlAeMCZgHkAmcB5QJoAeYCaQHnAmoB6AJrAekCbAHqAm0B6wJuAewCbwHtAnAB7gJxAe8CcgHwAnMAFwDJAFkBDwClAVwAogFZAKQBWwAQAMIAEgDEAAoAvAAMAL4ADQC%2FAA4AwAALAL0ABAC2AAYAuAAHALkACAC6AAUAtwAyAOQANADmADcA6QArAN0ALQDfAC4A4AAvAOEALADeAEoA%2FABIAPoAagEhAGwBIwBkARsAZgEdAGcBHgBoAR8AZQEcAG4BJQBwAScAcQEoAHIBKQBvASYAkgFJAJQBSwCWAU0AmAFPAJkBUACaAVEAlwFOAKwBYwCrAWIArQFkAK4BZQOSA5ADFQMTAxYDFAMfAxgDGwMXAxoDHgMZAyADBAMJAwoDBQMLAwcDCAMGA1UDVwLxAvcC6wNBAzADOAM3AAC4Af%2BFsASNAAAAAAoAfgADAAEECQAAALQAAAADAAEECQABABYAtAADAAEECQACAA4AygADAAEECQADADoA2AADAAEECQAEACYBEgADAAEECQAFABoBOAADAAEECQAGACQBUgADAAEECQAOAFQBdgADAAEECQEAAAwBygADAAEECQEEAA4AygBDAG8AcAB5AHIAaQBnAGgAdAAgADIAMAAxADgAIABUAGgAZQAgAFIAbwBiAG8AdABvACAAUwBsAGEAYgAgAFAAcgBvAGoAZQBjAHQAIABBAHUAdABoAG8AcgBzACAAKABoAHQAdABwAHMAOgAvAC8AZwBpAHQAaAB1AGIALgBjAG8AbQAvAGcAbwBvAGcAbABlAGYAbwBuAHQAcwAvAHIAbwBiAG8AdABvAHMAbABhAGIAKQBSAG8AYgBvAHQAbwAgAFMAbABhAGIAUgBlAGcAdQBsAGEAcgAyAC4AMAAwADEAOwBHAE8ATwBHADsAUgBvAGIAbwB0AG8AUwBsAGEAYgAtAFIAZQBnAHUAbABhAHIAUgBvAGIAbwB0AG8AIABTAGwAYQBiACAAUgBlAGcAdQBsAGEAcgBWAGUAcgBzAGkAbwBuACAAMgAuADAAMAAxAFIAbwBiAG8AdABvAFMAbABhAGIALQBSAGUAZwB1AGwAYQByAGgAdAB0AHAAOgAvAC8AdwB3AHcALgBhAHAAYQBjAGgAZQAuAG8AcgBnAC8AbABpAGMAZQBuAHMAZQBzAC8ATABJAEMARQBOAFMARQAtADIALgAwAFcAZQBpAGcAaAB0AAIAAAAAAAD%2FagBkAAAAAAAAAAAAAAAAAAAAAAAAAAADqwAAACQAyQECAQMBBAEFAQYBBwDHAQgBCQEKAQsBDABiAQ0ArQEOAQ8BEABjAREBEgCuAJABEwAlACYA%2FQD%2FAGQBFAEVACcA6QEWARcAKABlARgBGQDIARoBGwEcAR0BHgDKAR8BIADLASEBIgEjASQAKQAqAPgBJQEmAScAKwEoASkALAEqAMwBKwDNAM4A%2BgEsAM8BLQEuAS8BMAAtATEALgEyAC8BMwE0ATUBNgDiADABNwAxATgBOQE6ATsAZgAyANABPADRAT0BPgE%2FAUABQQBnAUIA0wFDAUQBRQFGAUcBSAFJAUoBSwCRAUwArwCwADMA7QA0ADUBTQFOAU8ANgFQAOQA%2BwFRAVIBUwFUADcBVQFWAVcBWAA4ANQBWQDVAGgBWgDWAVsBXAFdAV4BXwFgAWEBYgFjAWQBZQFmADkAOgFnAWgBaQFqADsAPADrAWsAuwFsAW0BbgFvAD0BcADmAXEARABpAXIBcwF0AXUBdgF3AGsBeAF5AXoBewF8AGwBfQBqAX4BfwGAAG4BgQGCAG0AoAGDAEUARgD%2BAQAAbwGEAYUARwDqAYYBAQBIAHABhwGIAHIBiQGKAYsBjAGNAHMBjgGPAHEBkAGRAZIBkwGUAEkASgD5AZUBlgGXAEsBmAGZAEwA1wB0AZoAdgB3AZsAdQGcAZ0BngGfAaAATQGhAaIBowBOAaQBpQBPAaYBpwGoAakA4wBQAaoAUQGrAawBrQGuAa8AeABSAHkBsAB7AbEBsgGzAbQBtQB8AbYAegG3AbgBuQG6AbsBvAG9Ab4BvwChAcAAfQCxAFMA7gBUAFUBwQHCAcMAVgHEAOUA%2FAHFAcYAiQHHAFcByAHJAcoBywBYAH4BzACAAIEBzQB%2FAc4BzwHQAdEB0gHTAdQB1QHWAdcB2AHZAFkAWgHaAdsB3AHdAFsAXADsAd4AugHfAeAB4QHiAF0B4wDnAeQAwADBAeUB5gCdAJ4B5wHoAekB6gHrAewB7QHuAe8B8AHxAfIB8wH0AfUB9gH3AfgB%2BQH6AfsB%2FAH9Af4B%2FwIAAgECAgIDAgQCBQIGAgcCCAIJAgoCCwIMAg0CDgIPAhACEQISAhMCFAIVAhYCFwIYAhkCGgIbAhwCHQIeAh8CIAIhAiICIwIkAiUCJgInAigCKQIqAisCLAItAi4CLwIwAjECMgIzAjQCNQI2AjcCOAI5AjoCOwI8Aj0CPgI%2FAkACQQJCAkMCRAJFAkYCRwJIAkkCSgJLAkwCTQJOAk8CUAJRAlICUwJUAlUCVgJXAlgCWQJaAlsCXAJdAl4CXwJgAmECYgJjAmQCZQJmAmcCaAJpAmoCawJsAm0CbgJvAnACcQJyAnMCdAJ1AnYCdwJ4AnkCegJ7AnwCfQJ%2BAn8CgAKBAoICgwKEAoUChgKHAogCiQKKAosCjAKNAo4CjwKQApECkgKTApQClQKWApcCmAKZApoCmwKcAp0CngKfAqACoQKiAqMCpAKlAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4CvwLAAsECwgLDAsQCxQLGAscCyALJAsoCywLMAs0CzgLPAtAC0QLSAtMC1ALVAtYC1wLYAtkC2gLbAtwC3QLeAt8C4ALhAuIC4wLkAuUC5gLnAugC6QLqAusC7ALtAu4C7wLwAvEC8gLzAvQC9QL2AvcC%2BAL5AvoC%2BwL8Av0C%2FgL%2FAwADAQMCAwMDBAMFAwYDBwMIAwkDCgMLAwwDDQMOAw8DEAMRAxIDEwMUAxUDFgMXAxgDGQMaAxsDHAMdAx4DHwCbAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUAEwAUABUAFgAXABgAGQAaABsAHAM2AzcDOAM5AzoDOwM8Az0DPgM%2FA0ADQQNCA0MDRANFA0YDRwNIA0kDSgC8APQA9QD2A0sDTANNA04AEQAPAB0AHgCrAAQAowAiAKIAwwCHAA0DTwAGABIAPwNQAAsADABeAGAAPgBAABADUQCyALMDUgBCA1MAxADFALQAtQC2ALcDVACpAKoAvgC%2FAAUACgNVA1YDVwNYA1kDWgNbA1wDXQNeAAMDXwNgA2EDYgNjA2QAhAC9AAcDZQNmAKYA9wNnA2gAhQCWA2kADgDvAPAAuAAgAI8AIQAfAJUAlACTAKcAYQCkAEEAkgCcAJoAmQClA2oAmAAIAMYAuQAjAAkAiACGAIsAigCMA2sAgwNsA20AXwDoAIIDbgDCA28DcANxA3IDcwN0A3UDdgN3A3gDeQN6A3sDfAN9A34DfwOAA4EDggODA4QDhQOGA4cDiAOJA4oDiwOMA40DjgOPA5ADkQCOANwAQwCNAN8A2ADhANsA3QDZANoA3gDgA5IDkwOUA5UDlgOXA5gDmQOaA5sDnAOdA54DnwOgA6EDogOjA6QDpQOmA6cDqAOpA6oDqwOsA60DrgOvA7ADsQOyA7MDtAZBYnJldmUHdW5pMUVBRQd1bmkxRUI2B3VuaTFFQjAHdW5pMUVCMgd1bmkxRUI0B3VuaTFFQTQHdW5pMUVBQwd1bmkxRUE2B3VuaTFFQTgHdW5pMUVBQQd1bmkxRUEwB3VuaTFFQTIHQW1hY3JvbgdBb2dvbmVrCkFyaW5nYWN1dGUHdW5pMUUwMAdBRWFjdXRlC0NjaXJjdW1mbGV4CkNkb3RhY2NlbnQGRGNhcm9uBkRjcm9hdAZFYnJldmUGRWNhcm9uB3VuaTFFQkUHdW5pMUVDNgd1bmkxRUMwB3VuaTFFQzIHdW5pMUVDNApFZG90YWNjZW50B3VuaTFFQjgHdW5pMUVCQQdFbWFjcm9uB0VvZ29uZWsHdW5pMUVCQwtHY2lyY3VtZmxleAd1bmkwMTIyCkdkb3RhY2NlbnQESGJhcgtIY2lyY3VtZmxleAJJSgZJYnJldmUHdW5pMUVDQQd1bmkxRUM4B0ltYWNyb24HSW9nb25lawZJdGlsZGULSmNpcmN1bWZsZXgHdW5pMDEzNgZMYWN1dGUGTGNhcm9uB3VuaTAxM0IETGRvdAd1bmkxRTNFBk5hY3V0ZQZOY2Fyb24HdW5pMDE0NQNFbmcGT2JyZXZlB3VuaTFFRDAHdW5pMUVEOAd1bmkxRUQyB3VuaTFFRDQHdW5pMUVENgd1bmkxRUNDB3VuaTFFQ0UFT2hvcm4HdW5pMUVEQQd1bmkxRUUyB3VuaTFFREMHdW5pMUVERQd1bmkxRUUwDU9odW5nYXJ1bWxhdXQHT21hY3JvbgtPc2xhc2hhY3V0ZQZSYWN1dGUGUmNhcm9uB3VuaTAxNTYGU2FjdXRlC1NjaXJjdW1mbGV4B3VuaTAyMTgHdW5pMUU5RQd1bmkwMThGBFRiYXIGVGNhcm9uB3VuaTAxNjIHdW5pMDIxQQZVYnJldmUHdW5pMUVFNAd1bmkxRUU2BVVob3JuB3VuaTFFRTgHdW5pMUVGMAd1bmkxRUVBB3VuaTFFRUMHdW5pMUVFRQ1VaHVuZ2FydW1sYXV0B1VtYWNyb24HVW9nb25lawVVcmluZwZVdGlsZGUGV2FjdXRlC1djaXJjdW1mbGV4CVdkaWVyZXNpcwZXZ3JhdmULWWNpcmN1bWZsZXgHdW5pMUVGNAZZZ3JhdmUHdW5pMUVGNgd1bmkxRUY4BlphY3V0ZQpaZG90YWNjZW50BmFicmV2ZQd1bmkxRUFGB3VuaTFFQjcHdW5pMUVCMQd1bmkxRUIzB3VuaTFFQjUHdW5pMUVBNQd1bmkxRUFEB3VuaTFFQTcHdW5pMUVBOQd1bmkxRUFCB3VuaTFFQTEHdW5pMUVBMwdhbWFjcm9uB2FvZ29uZWsKYXJpbmdhY3V0ZQd1bmkxRTAxB2FlYWN1dGULY2NpcmN1bWZsZXgKY2RvdGFjY2VudAZkY2Fyb24GZWJyZXZlBmVjYXJvbgd1bmkxRUJGB3VuaTFFQzcHdW5pMUVDMQd1bmkxRUMzB3VuaTFFQzUKZWRvdGFjY2VudAd1bmkxRUI5B3VuaTFFQkIHZW1hY3Jvbgdlb2dvbmVrB3VuaTFFQkQHdW5pMDI1OQtnY2lyY3VtZmxleAd1bmkwMTIzCmdkb3RhY2NlbnQEaGJhcgtoY2lyY3VtZmxleAZpYnJldmUHdW5pMUVDQgd1bmkxRUM5AmlqB2ltYWNyb24HaW9nb25lawZpdGlsZGUHdW5pMDIzNwd1bmkwMUYwC2pjaXJjdW1mbGV4B3VuaTAxMzcMa2dyZWVubGFuZGljBmxhY3V0ZQZsY2Fyb24HdW5pMDEzQwRsZG90B3VuaTFFM0YGbmFjdXRlC25hcG9zdHJvcGhlBm5jYXJvbgd1bmkwMTQ2A2VuZwZvYnJldmUHdW5pMUVEMQd1bmkxRUQ5B3VuaTFFRDMHdW5pMUVENQd1bmkxRUQ3B3VuaTFFQ0QHdW5pMUVDRgVvaG9ybgd1bmkxRURCB3VuaTFFRTMHdW5pMUVERAd1bmkxRURGB3VuaTFFRTENb2h1bmdhcnVtbGF1dAdvbWFjcm9uC29zbGFzaGFjdXRlBnJhY3V0ZQZyY2Fyb24HdW5pMDE1NwZzYWN1dGULc2NpcmN1bWZsZXgHdW5pMDIxOQVsb25ncwR0YmFyBnRjYXJvbgd1bmkwMTYzB3VuaTAyMUIGdWJyZXZlB3VuaTFFRTUHdW5pMUVFNwV1aG9ybgd1bmkxRUU5B3VuaTFFRjEHdW5pMUVFQgd1bmkxRUVEB3VuaTFFRUYNdWh1bmdhcnVtbGF1dAd1bWFjcm9uB3VvZ29uZWsFdXJpbmcGdXRpbGRlBndhY3V0ZQt3Y2lyY3VtZmxleAl3ZGllcmVzaXMGd2dyYXZlC3ljaXJjdW1mbGV4B3VuaTFFRjUGeWdyYXZlB3VuaTFFRjcHdW5pMUVGOQZ6YWN1dGUKemRvdGFjY2VudAd1bmlGQjAzB3VuaUZCMDQHdW5pMjA3Rgd1bmkwNDEwB3VuaTA0MTEHdW5pMDQxMgd1bmkwNDEzB3VuaTA0MDMHdW5pMDQ5MAd1bmkwNDE0B3VuaTA0MTUHdW5pMDQwMAd1bmkwNDAxB3VuaTA0MTYHdW5pMDQxNwd1bmkwNDE4B3VuaTA0MTkHdW5pMDQwRAd1bmkwNDhBB3VuaTA0MUEHdW5pMDQwQwd1bmkwNDFCB3VuaTA0MUMHdW5pMDQxRAd1bmkwNDFFB3VuaTA0MUYHdW5pMDQyMAd1bmkwNDIxB3VuaTA0MjIHdW5pMDQyMwd1bmkwNDBFB3VuaTA0MjQHdW5pMDQyNQd1bmkwNDI3B3VuaTA0MjYHdW5pMDQyOAd1bmkwNDI5B3VuaTA0MEYHdW5pMDQyQwd1bmkwNDJBB3VuaTA0MkIHdW5pMDQwOQd1bmkwNDBBB3VuaTA0MDUHdW5pMDQwNAd1bmkwNDJEB3VuaTA0MDYHdW5pMDQwNwd1bmkwNDA4B3VuaTA0MEIHdW5pMDQyRQd1bmkwNDJGB3VuaTA0MDIHdW5pMDQ2MAd1bmkwNDYyB3VuaTA0NjQHdW5pMDQ2Ngd1bmkwNDY4B3VuaTA0NkEHdW5pMDQ2Qwd1bmkwNDZFB3VuaTA0NzAHdW5pMDQ3Mgd1bmkwNDc0B3VuaTA0NzYHdW5pMDQ3OAd1bmkwNDkyB3VuaTA0OTQHdW5pMDQ5Ngd1bmkwNDk4B3VuaTA0OUEHdW5pMDQ5Qwd1bmkwNDlFB3VuaTA0QTAHdW5pMDRBMgd1bmkwNEE0B3VuaTA0QTYHdW5pMDRBOAd1bmkwNEFBB3VuaTA0QUMJVXN0cmFpdGN5D1VzdHJhaXRzdHJva2VjeQd1bmkwNEIyB3VuaTA0QjQHdW5pMDRCNgd1bmkwNEI4B3VuaTA0QkEHdW5pMDRCQwd1bmkwNEJFB3VuaTA0QzAHdW5pMDRDMQd1bmkwNEMzB3VuaTA0QzUHdW5pMDRDNwd1bmkwNEM5B3VuaTA0Q0IHdW5pMDRDRAd1bmkwNEQwB3VuaTA0RDIHdW5pMDRENAd1bmkwNEQ2B3VuaTA0RDgHdW5pMDREQQd1bmkwNERDB3VuaTA0REUHdW5pMDRFMAd1bmkwNEUyB3VuaTA0RTQHdW5pMDRFNgd1bmkwNEU4B3VuaTA0RUEHdW5pMDRFQwd1bmkwNEVFB3VuaTA0RjAHdW5pMDRGMgd1bmkwNEY0B3VuaTA0RjYHdW5pMDRGOAd1bmkwNEZBB3VuaTA0RkMHdW5pMDRGRQd1bmkwNTAwB3VuaTA1MDIHdW5pMDUwNAd1bmkwNTA2B3VuaTA1MDgHdW5pMDUwQQd1bmkwNTBDB3VuaTA1MEUHdW5pMDUxMAd1bmkwNTEyB3VuaTA0ODAHdW5pMDQ4Qwd1bmkwNDhFB3VuaTA0MzAHdW5pMDQzMQd1bmkwNDMyB3VuaTA0MzMHdW5pMDQ1Mwd1bmkwNDkxB3VuaTA0MzQHdW5pMDQzNQd1bmkwNDUwB3VuaTA0NTEHdW5pMDQzNgd1bmkwNDM3B3VuaTA0MzgHdW5pMDQzOQd1bmkwNDVEB3VuaTA0OEIHdW5pMDQzQQd1bmkwNDVDB3VuaTA0M0IHdW5pMDQzQwd1bmkwNDNEB3VuaTA0M0UHdW5pMDQzRgd1bmkwNDQwB3VuaTA0NDEHdW5pMDQ0Mgd1bmkwNDQzB3VuaTA0NUUHdW5pMDQ0NAd1bmkwNDQ1B3VuaTA0NDcHdW5pMDQ0Ngd1bmkwNDQ4B3VuaTA0NDkHdW5pMDQ1Rgd1bmkwNDRDB3VuaTA0NEEHdW5pMDQ0Qgd1bmkwNDU5B3VuaTA0NUEHdW5pMDQ1NQd1bmkwNDU0B3VuaTA0NEQHdW5pMDQ1Ngd1bmkwNDU3B3VuaTA0NTgHdW5pMDQ1Qgd1bmkwNDRFB3VuaTA0NEYHdW5pMDQ1Mgd1bmkwNDYxB3VuaTA0NjMHdW5pMDQ2NQd1bmkwNDY3B3VuaTA0NjkHdW5pMDQ2Qgd1bmkwNDZEB3VuaTA0NkYHdW5pMDQ3MQd1bmkwNDczB3VuaTA0NzUHdW5pMDQ3Nwd1bmkwNDc5B3VuaTA0OTMHdW5pMDQ5NQd1bmkwNDk3B3VuaTA0OTkHdW5pMDQ5Qgd1bmkwNDlEB3VuaTA0OUYHdW5pMDRBMQd1bmkwNEEzB3VuaTA0QTUHdW5pMDRBNwd1bmkwNEE5B3VuaTA0QUIHdW5pMDRBRAl1c3RyYWl0Y3kPdXN0cmFpdHN0cm9rZWN5B3VuaTA0QjMHdW5pMDRCNQd1bmkwNEI3B3VuaTA0QjkHdW5pMDRCQgd1bmkwNEJEB3VuaTA0QkYHdW5pMDRDRgd1bmkwNEMyB3VuaTA0QzQHdW5pMDRDNgd1bmkwNEM4B3VuaTA0Q0EHdW5pMDRDQwd1bmkwNENFB3VuaTA0RDEHdW5pMDREMwd1bmkwNEQ1B3VuaTA0RDcHdW5pMDREOQd1bmkwNERCB3VuaTA0REQHdW5pMDRERgd1bmkwNEUxB3VuaTA0RTMHdW5pMDRFNQd1bmkwNEU3B3VuaTA0RTkHdW5pMDRFQgd1bmkwNEVEB3VuaTA0RUYHdW5pMDRGMQd1bmkwNEYzB3VuaTA0RjUHdW5pMDRGNwd1bmkwNEY5B3VuaTA0RkIHdW5pMDRGRAd1bmkwNEZGB3VuaTA1MDEHdW5pMDUwMwd1bmkwNTA1B3VuaTA1MDcHdW5pMDUwOQd1bmkwNTBCB3VuaTA1MEQHdW5pMDUwRgd1bmkwNTExB3VuaTA1MTMHdW5pMDQ4MQd1bmkwNDhEB3VuaTA0OEYFQWxwaGEEQmV0YQVHYW1tYQd1bmkwMzk0B0Vwc2lsb24EWmV0YQNFdGEFVGhldGEESW90YQVLYXBwYQZMYW1iZGECTXUCTnUCWGkHT21pY3JvbgJQaQNSaG8FU2lnbWEDVGF1B1Vwc2lsb24DUGhpA0NoaQNQc2kHdW5pMDNBOQpBbHBoYXRvbm9zDEVwc2lsb250b25vcwhFdGF0b25vcwlJb3RhdG9ub3MMT21pY3JvbnRvbm9zDFVwc2lsb250b25vcwpPbWVnYXRvbm9zDElvdGFkaWVyZXNpcw9VcHNpbG9uZGllcmVzaXMHdW5pMDNEMgd1bmkxRjREBWFscGhhBGJldGEFZ2FtbWEFZGVsdGEHZXBzaWxvbgR6ZXRhA2V0YQV0aGV0YQRpb3RhBWthcHBhBmxhbWJkYQd1bmkwM0JDAm51AnhpB29taWNyb24DcmhvB3VuaTAzQzIFc2lnbWEDdGF1B3Vwc2lsb24DcGhpA2NoaQNwc2kFb21lZ2EJaW90YXRvbm9zDGlvdGFkaWVyZXNpcxFpb3RhZGllcmVzaXN0b25vcwx1cHNpbG9udG9ub3MPdXBzaWxvbmRpZXJlc2lzFHVwc2lsb25kaWVyZXNpc3Rvbm9zDG9taWNyb250b25vcwpvbWVnYXRvbm9zCmFscGhhdG9ub3MMZXBzaWxvbnRvbm9zCGV0YXRvbm9zB3VuaTAzRDEHdW5pMDNENgd6ZXJvLmxmBm9uZS5sZgZ0d28ubGYIdGhyZWUubGYHZm91ci5sZgdmaXZlLmxmBnNpeC5sZghzZXZlbi5sZghlaWdodC5sZgduaW5lLmxmB29uZS5zdXAHdHdvLnN1cAl0aHJlZS5zdXAIZm91ci5zdXAIZml2ZS5zdXAJc2V2ZW4uc3VwCWVpZ2h0LnN1cAd1bmkwMEI5B3VuaTAwQjIHdW5pMDBCMwd1bmkyMDc0CW9uZWVpZ2h0aAx0aHJlZWVpZ2h0aHMLZml2ZWVpZ2h0aHMMc2V2ZW5laWdodGhzCWV4Y2xhbWRibA50d29kb3RlbmxlYWRlcgd1bmkwMEFEB3VuaTIwMTUNdW5kZXJzY29yZWRibA1xdW90ZXJldmVyc2VkCWFub3RlbGVpYQd1bmkyMDAxB3VuaTIwMDMHdW5pMjAwMAd1bmkyMDAyB3VuaTIwMDcHdW5pMjAwNQd1bmkyMDBBB3VuaTIwMDgHdW5pMjAwNgd1bmkwMEEwB3VuaTIwMDkHdW5pMjAwNAd1bmkyMDBCAkNSB3VuaUZFRkYEZG9uZwRFdXJvBGxpcmEGcGVzZXRhB3VuaTIyMTUHdW5pMDBCNQd1bmkyMTA1Bm1pbnV0ZQZzZWNvbmQHdW5pMjExMwd1bmkyMTE2CWVzdGltYXRlZAd1bmlGRkZDB3VuaUZGRkQHdW5pMDJGMwd1bmkwNDgyB3VuaTAyQkMHdW5pMDJDOQd1bmkwMzA4B3VuaTAzMDcJZ3JhdmVjb21iCWFjdXRlY29tYgd1bmkwMzBCC3VuaTAzMEMuYWx0B3VuaTAzMDIHdW5pMDMwQwd1bmkwMzA2B3VuaTAzMEELdW5pMDMwQTAzMDEJdGlsZGVjb21iB3VuaTAzMDQNaG9va2Fib3ZlY29tYgd1bmkwMzBGB3VuaTAzMTIHdW5pMDMxQgxkb3RiZWxvd2NvbWIHdW5pMDMyNQd1bmkwMzI2CXVuaTAzMjYuMQd1bmkwMzI3B3VuaTAzMjgHdW5pMDMzNQd1bmkwMzM2B3VuaTAzMzcHdW5pMDMzOAt1bmkwMzI4LmFsdBB1bmkwMzBBMDMwMS5jYXNlDHVuaTAzMUIuY2FzZQx1bmkwMzM3LmNhc2UMdW5pMDMzOC5jYXNlBXRvbm9zCnRvbm9zLmNhc2UNZGllcmVzaXN0b25vcwd1bmkxRkZFDHVuaTFGRkUuY2FzZQd1bmkxRkZEDHVuaTFGRkQuY2FzZQd1bmkwNDgzB3VuaTA0ODQHdW5pMDQ4NQd1bmkwNDg2C2JyZXZlY29tYmN5C2Rlc2NlbmRlcmN5Bmhvb2tjeQd1bmkwNDg4B3VuaTA0ODkLdW5pMDMwNjAzMDELdW5pMDMwNjAzMDALdW5pMDMwNjAzMDkLdW5pMDMwNjAzMDMLdW5pMDMwMjAzMDELdW5pMDMwMjAzMDALdW5pMDMwMjAzMDkLdW5pMDMwMjAzMDMHdW5pMDQ3QQd1bmkwNDdCB3VuaTA0N0MHdW5pMDQ3RAd1bmkwNDdFB3VuaTA0N0YAAQAB%2F%2F8ADwABAAIADgAAAbAAAAHyAAIARQABAF0AAQBfANQAAQDWAOkAAQDrARQAAQEWAWkAAQFqAW0AAgFxAXEAAQFzAXUAAQF4AYwAAQGOAY8AAQGUAZYAAQGZAZkAAQGbAZ4AAQGgAaEAAQGkAaQAAQGtAbAAAQGyAbQAAQG2AbYAAQG4AbgAAQG8AcAAAQHCAcIAAQHEAcgAAQHKAcoAAQHMAdYAAQHYAeYAAQHwAfAAAQHyAfQAAQH3AfgAAQH7AgkAAQILAg8AAQIRAhIAAQIZAhkAAQIcAhwAAQIeAiQAAQIwAjMAAQI1AjcAAQI7AjsAAQI%2FAkMAAQJFAkUAAQJHAksAAQJNAk0AAQJPAlkAAQJbAmoAAQJyAnMAAQJ2AnkAAQJ7An0AAQJ%2FAoAAAQKCAoMAAQKFAoUAAQKHAocAAQKJAooAAQKMAowAAQKOApcAAQKZApoAAQKeAp4AAQKgAqAAAQKiAqMAAQKmAqYAAQKoAqgAAQKuAq4AAQKyAr0AAQMmAyYAAQMpAykAAQNgA2QAAwNmA3oAAwOJA4wAAwOQA5AAAQOUA5cAAwOdA6QAAwAMAAQAFgAeACYANAACAAEBagFtAAAAAQAEAAECbAABAAQAAQKjAAIABgAKAAECuAABBUcAAgAGAAoAAQK%2BAAEFcAABAAIAAAAMAAAAGAABAAQDcQNyA3QDdQACAAQDYANkAAADZgNvAAUDiQOJAA8DnQOkABAAAAABAAAACgAoAFAAAkRGTFQADmxhdG4ADgAEAAAAAP%2F%2FAAMAAAABAAIAA2tlcm4AFG1hcmsAGm1rbWsAIAAAAAEAAAAAAAEAAQAAAAIAAgADAAQAClE4cihylgACAAgAAgAKP5wAAQM8AAQAAAGZN443jjeON443jjeON443jjeON443jjeON443jjeON443jjeON443jjeON443jjeOMcQlTiVOJU4lTiVOJU44fjh%2BOH44fjfkN%2BQ35DfkN%2BQ35DfkN%2BQ35DfkN%2BQ35DfkN%2BQ35DfkN%2BQ35AW2CdA37jfuN%2B437jfuN%2B437jfuN%2B437jfuN%2B437jfuMqIyogxyDHIMcgxyDHI37jfuN%2B437jfuN%2B437jh%2BOH44fjh%2BOH44fjh%2BOH44fjh%2BOH44fjh%2BOH44fjh%2BM%2BYMeAz2NPY09jT2NPY09iU8DWANYA1gDWANYDaeOBA4EDgQOBA4EDgQOBA4EDKUMpQylDKUMUQxRDFEMUQxRDFEMUQxRDFEMUQxRDFEMUQxRDFEMUQxRDFEMUQxRDFEMUQxRDFEMa4NcjFuMW4xbjFuMW4xbjFuMW4xbjFuMW4xbjFuMW4xbjFuMW4xbg3YDlI%2BkD6QD9gR8j6QPpA%2BkD6QPpA%2BkD6QPpA%2BYj5iPmI%2BYj5iPmI%2BYj5iPmI%2BYj5iPmI%2BYj5iPmI%2BYj5iMa4xrhNEE0QTRBNEE1YUXBSuO14UtDF%2BO147XjteO147XjteO147XjeOFT4xxDHOMc4xzhbUN%2BQ35DfkNp4ZEjfuGdwyojfuN%2B437jh%2BM%2BYlTjT2JWAlYDaeN%2B437hrWN%2B4kvh0QJL4eEh%2FAN%2B437iCCIbwiSiKoJL43jiU8JTwxzjaeMqIyojKiMqI37iVONPY4EDgQNp437jaeN%2B437jeON4435DaeOH4lYCVgJWAxzjaeMUQlqiaIMXQxdDF0J7IxbjFuMW4xfjGEKIA%2BYjGuKdY7XjteMa4xfiw8LRou6C7oLugwbi8eMa4vSDBuPmI7XjteMX47XjF%2BPpA37jF%2BMUQxRDFuMW4xbjF%2BPmI%2BYjGuO147XjteMXQxdDF%2BMYQxrjeOMcQxzjeON%2BQylDfuOH437jKiN4437jfuMvw4fjPmNAg09jgQNcA2njbwN4435DfuN%2B44fjgQN%2B44EDh%2BOJw7Xj6QOKI6eDtePmI7gDuWO5w9dj18PbI95D5iPpA%2Bnj6kPqo%2FAD9GP4w%2FjD%2BMP4w%2FjD%2BMP4w%2FjD%2BMP4wAAgBpAAEAGAAAABsAOQAYAD4APgA3AEAAQQA4AEMATQA6AFAAVgBFAFgAXQBMAF8AbABSAHMAdABgAHcAdwBiAHkAeQBjAHsAfABkAIgAjABmAKAAygBrAM0AzQCWANQA1ACXANgA6wCYAPEA8QCsAPMA8wCtAQUBBQCuAQgBCACvAQ4BFACwARYBIwC3ASkBKwDFAS4BLgDIATABMQDJATMBNgDLAT8BPwDPAUQBRADQAUwBTADRAVcBWADSAV0BZQDUAXEBfQDdAYEBhgDqAYgBjADwAY4BjgD1AZABlQD2AZcBmAD8AZsBnQD%2BAZ8BogEBAaQBpAEFAaYBpgEGAa0BrgEHAbABsAEJAbIBsgEKAbQBuAELAbwBwAEQAccByAEVAcwBzAEXAc4B0AEYAdIB0gEbAdUB1QEcAdoB2gEdAd4B4AEeAeIB4gEhAeUB5QEiAfQB%2FwEjAgQCBAEvAgkCCQEwAgsCCwExAg0CEQEyAhMCEwE3AhUCFQE4AhcCGAE5AhoCGwE7Ah0CHgE9AiMCIwE%2FAicCJwFAAi8CMQFBAjUCNQFEAkECQQFFAkMCQwFGAkcCRwFHAkoCSwFIAlICUwFKAlUCWAFMAl0CXQFQAl8CYwFRAmUCZQFWAmcCaAFXAnQCdAFZAnYChQFaAocCjQFqAo8ClAFxApYClwF3ApkCmgF5ApwCnAF7AqACoAF8AqICogF9AqQCpAF%2BAqYCpgF%2FAqgCqAGAAqoCqgGBAqwCrwGCArECsgGGArkCuQGIAr0CvQGJAvUC9gGKAvgC%2BAGMAvoC%2BgGNAvwC%2FAGOAwcDCwGPAxADEQGUA1EDUgGWA14DXgGYAQYAAf8kAAL%2B1QAD%2FtUABP7VAAX%2B1QAG%2FtUAB%2F7VAAj%2B1QAJ%2FtUACv7VAAv%2B1QAM%2FtUADf7VAA7%2B1QAP%2FtUAEP7VABH%2B1QAS%2FtUAE%2F7VABT%2B1QAV%2FtUAFv7VABf%2B1QAY%2FtUAHP%2FOAB3%2FzgAe%2F84AH%2F%2FOACD%2FzgAh%2F84AOf%2FOADr%2FzgA7%2F84APP%2FOAD3%2FzgBO%2F0IAT%2F7AAGD%2FzgBh%2F84AYv%2FOAGP%2FzgBk%2F84AZf%2FOAGb%2FzgBn%2F84AaP%2FOAGn%2FzgBq%2F84Aa%2F%2FOAGz%2FzgBt%2F84Abv%2FOAG%2F%2FzgBw%2F84Acf%2FOAHL%2FzgBz%2F84AdP%2FOAHX%2FzgB2%2F84Ad%2F%2FOAHj%2FzgB7%2F84AiAAUAIoAFACLABQAjAAUALP%2F3gC0%2F94Atf%2FeALb%2F3gC3%2F94AuP%2FeALn%2F3gC6%2F94Au%2F%2FeALz%2F3gC9%2F94Avv%2FeAL%2F%2F3gDA%2F94Awf%2FeAML%2F3gDD%2F94AxP%2FeAMX%2F3gDG%2F94Ax%2F%2FeAMj%2F3gDJ%2F94Ayv%2FeAM7%2F6wDP%2F%2BsA0P%2FrANH%2F6wDS%2F%2BsA0%2F%2FrANT%2F6wDW%2F%2BsA2P%2BmANn%2F6wDa%2F%2BsA2%2F%2FrANz%2F6wDd%2F%2BsA3v%2FrAN%2F%2F6wDg%2F%2BsA4f%2FrAOL%2F6wDj%2F%2BsA5P%2FrAOX%2F6wDm%2F%2BsA5%2F%2FrAOj%2F6wDp%2F%2BsA7P%2FrAO3%2F6wDu%2F%2BsA7%2F%2FrAPD%2F6wEX%2F6YBGP%2FrARn%2F6wEa%2F%2BsBG%2F%2FrARz%2F6wEd%2F%2BsBHv%2FrAR%2F%2F6wEg%2F%2BsBIf%2FrASL%2F6wEj%2F%2BsBJP%2FrASX%2F6wEm%2F%2BsBJ%2F%2FrASj%2F6wEp%2F%2BsBKv%2FrASv%2F6wEu%2F%2BsBL%2F%2FrATL%2F6wEz%2F%2BYBRP%2FqAUX%2F6gFG%2F%2BoBR%2F%2FqAUj%2F6gFJ%2F%2BoBSv%2FqAUv%2F6gFM%2F%2BoBTf%2FqAU7%2F6gFP%2F%2BoBUP%2FqAVH%2F6gFS%2F%2BoBU%2F%2FqAVT%2F6gFV%2F%2BoBVv%2FqAVf%2F6AFe%2F%2BgBX%2F%2FoAWD%2F6AFh%2F%2BgBYv%2FoAWP%2F6AFk%2F%2BgBZf%2FoAXH%2B1QGG%2F84Bif%2FOAYoAFAGa%2F84Bnv7AAZ8AFAGiABQBo%2F%2FOAab%2B1QGs%2F84Br%2F%2FOAbcAFAG7%2F84BvP%2FOAb0AFAHBABQBz%2F7VAdD%2B1QHa%2F84B2%2F%2FOAdz%2FzgHo%2F%2BsB7f%2FOAfH%2FzgH0%2F94B%2B%2F%2FrAfz%2F6wH9%2F%2BsCCf%2FrAgz%2F6wIO%2F%2BgCD%2F%2FoAhD%2F6wId%2F%2BsCL%2F%2FrAjD%2F6AIx%2F%2BgCMv%2FrAj7%2F6wI%2F%2F%2BsCQf%2FoAlL%2F3gJT%2F94CVf%2FrAlb%2F6wJX%2F%2BsCXf%2FrAl7%2F6wJf%2F%2BsCYf%2FoAmL%2F6AJj%2F%2BgCav%2FrAmv%2F6wJw%2F%2BsCdP%2FrAnf%2B1QJ6%2FtUCfv%2FOAoH%2B1QKF%2F84Cj%2F7VApP%2FzgKZ%2F84Cmv%2FrApz%2F6AKm%2F%2BgCqP%2FrAqv%2F6wKs%2F%2BsCrv%2FqArb%2F6gK3%2F%2BoCuP%2FqArn%2F6wK7%2F%2BsC5%2F8WAuj%2FFgLr%2FxYC9%2F8WAwX%2FFgMG%2FxYDpf%2FOA6f%2FzgOo%2F%2BsDqf%2FOAKgAHAAZAB0AGQAeABkAHwAZACAAGQAhABkAOQAZADoAGQA7ABkAPAAZAD0AGQBgABkAYQAZAGIAGQBjABkAZAAZAGUAGQBmABkAZwAZAGgAGQBpABkAagAZAGsAGQBsABkAbQAZAG4AGQBvABkAcAAZAHEAGQByABkAcwAZAHQAGQB1ABkAdgAZAHcAGQB4ABkAewAZALMAHgC0AB4AtQAeALYAHgC3AB4AuAAeALkAHgC6AB4AuwAeALwAHgC9AB4AvgAeAL8AHgDAAB4AwQAeAMIAHgDDAB4AxAAeAMUAHgDGAB4AxwAeAMgAHgDJAB4AygAeAM4AHgDPAB4A0AAeANEAHgDSAB4A0wAeANQAHgDWAB4A2AAeANkAHgDaAB4A2wAeANwAHgDdAB4A3gAeAN8AHgDgAB4A4QAeAOIAHgDjAB4A5AAeAOUAHgDmAB4A5wAeAOgAHgDpAB4A7AAeAO0AHgDuAB4A7wAeAPAAHgEXAB4BGAAeARkAHgEaAB4BGwAeARwAHgEdAB4BHgAeAR8AHgEgAB4BIQAeASIAHgEjAB4BJAAeASUAHgEmAB4BJwAeASgAHgEpAB4BKgAeASsAHgEuAB4BLwAeATIAHgGGABkBiQAZAZoAGQGjABkBrAAZAa8AGQG7ABkBvAAZAdoAGQHbABkB3AAZAegAHgHtABkB8QAZAfQAHgH7AB4B%2FAAeAf0AHgIJAB4CDAAeAhAAHgIdAB4CLwAeAjIAHgI%2BAB4CPwAeAlIAHgJTAB4CVQAeAlYAHgJXAB4CXQAeAl4AHgJfAB4CagAeAmsAHgJwAB4CdAAeAn4AGQKFABkCkwAZApkAGQKaAB4CqAAeAqsAHgKsAB4CuQAeArsAHgOlABkDpwAZA6gAHgOpABkAAQFY%2F6QAHwCI%2F9UAiv%2FVAIv%2F1QCM%2F9UAoP%2FkAKH%2F7ACi%2F%2BwAo%2F%2FsAKT%2F7ACl%2F%2BwAp%2F%2FdAKj%2F3QCp%2F90Aqv%2FdAKv%2F3QCs%2F90Arf%2FdAK7%2F3QGK%2F9UBn%2F%2FVAaL%2F1QGt%2F%2BQBrv%2FkAbf%2F1QG9%2F9UBvv%2FdAb%2F%2F3QHB%2F9UCiv%2FdApT%2F3QKX%2F90AGgCI%2F7AAiv%2BwAIv%2FsACM%2F7AAoP%2BwAKf%2FnACo%2F5wAqf%2BcAKr%2FnACr%2F5wArP%2BcAK3%2FnACu%2F5wBiv%2BwAZ%2F%2FsAGi%2F7ABrf%2BwAa7%2FsAG3%2F7ABvf%2BwAb7%2FnAG%2F%2F5wBwf%2BwAor%2FnAKU%2F5wCl%2F%2BcAAQBM%2F%2FrAvkADwL7AA4C%2FQAMABkA2P%2F7ARf%2F%2BwEY%2F%2FsBGf%2F7ARr%2F%2BwEb%2F%2FsBHP%2F7AR3%2F%2BwEe%2F%2FsBH%2F%2F7ASD%2F%2BwEh%2F%2FsBIv%2F7ASP%2F%2BwEp%2F%2FsBKv%2F7ASv%2F%2BwEu%2F%2FsBPwAAAgn%2F%2BwIv%2F%2FsCXf%2F7Al%2F%2F%2BwKo%2F%2FsCuf%2F7AB4BV%2F%2FzAV7%2F8wFf%2F%2FMBYP%2FzAWH%2F8wFi%2F%2FMBY%2F%2FzAWT%2F8wFl%2F%2FMCDf%2F1Ag7%2F8wIP%2F%2FMCMP%2FzAjH%2F8wJB%2F%2FMCYf%2FzAmL%2F8wJj%2F%2FMCnP%2FzAqb%2F8wMH%2F%2FIDCP%2FyAwn%2F8gMK%2F%2FIDC%2F%2FyAxD%2F8gMR%2F%2FIDUf%2FyA1L%2F8gNe%2F%2FIAYQDO%2F%2BgAz%2F%2FoAND%2F6ADR%2F%2BgA0v%2FoANP%2F6ADU%2F%2BgA1v%2FoANj%2F9gDZ%2F%2BgA2v%2FoANv%2F6ADc%2F%2BgA3f%2FoAN7%2F6ADf%2F%2BgA4P%2FoAOH%2F6ADi%2F%2BgA4%2F%2FoAOT%2F6ADl%2F%2BgA5v%2FoAOf%2F6ADo%2F%2BgA6f%2FoAOz%2F6ADt%2F%2BgA7v%2FoAO%2F%2F6ADw%2F%2BgBF%2F%2F2ARj%2F9gEZ%2F%2FYBGv%2F2ARv%2F9gEc%2F%2FYBHf%2F2AR7%2F9gEf%2F%2FYBIP%2F2ASH%2F9gEi%2F%2FYBI%2F%2F2AST%2F6AEl%2F%2BgBJv%2FoASf%2F6AEo%2F%2BgBKf%2F2ASr%2F9gEr%2F%2FYBLv%2F2AS%2F%2F6AEy%2F%2BgB6P%2FoAfv%2F6AH8%2F%2BgB%2Ff%2FoAgn%2F9gIM%2F%2BgCEP%2FoAh3%2F6AIv%2F%2FYCMv%2FoAj7%2F6AI%2F%2F%2BgCVf%2FoAlb%2F6AJX%2F%2BgCXf%2F2Al7%2F6AJf%2F%2FYCav%2FoAmv%2F6AJw%2F%2BgCdP%2FoApr%2F6AKo%2F%2FYCq%2F%2FoAqz%2F6AK5%2F%2FYCu%2F%2FoAvkAFAL7ABMC%2FQASAwcAEAMIABADCQAQAwoAEAMLABADEAAQAxEAEANRABADUgAQA14AEAOo%2F%2BgAhgCz%2F%2BwAtP%2FsALX%2F7AC2%2F%2BwAt%2F%2FsALj%2F7AC5%2F%2BwAuv%2FsALv%2F7AC8%2F%2BwAvf%2FsAL7%2F7AC%2F%2F%2BwAwP%2FsAMH%2F7ADC%2F%2BwAw%2F%2FsAMT%2F7ADF%2F%2BwAxv%2FsAMf%2F7ADI%2F%2BwAyf%2FsAMr%2F7ADO%2F%2BwAz%2F%2FsAND%2F7ADR%2F%2BwA0v%2FsANP%2F7ADU%2F%2BwA1v%2FsANj%2FxADZ%2F%2BwA2v%2FsANv%2F7ADc%2F%2BwA3f%2FsAN7%2F7ADf%2F%2BwA4P%2FsAOH%2F7ADi%2F%2BwA4%2F%2FsAOT%2F7ADl%2F%2BwA5v%2FsAOf%2F7ADo%2F%2BwA6f%2FsAOz%2F7ADt%2F%2BwA7v%2FsAO%2F%2F7ADw%2F%2BwBF%2F%2FEARj%2FxAEZ%2F8QBGv%2FEARv%2FxAEc%2F8QBHf%2FEAR7%2FxAEf%2F8QBIP%2FEASH%2FxAEi%2F8QBI%2F%2FEAST%2F7AEl%2F%2BwBJv%2FsASf%2F7AEo%2F%2BwBKf%2FEASr%2FxAEr%2F8QBLv%2FEAS%2F%2F7AEy%2F%2BwBRP%2FsAUX%2F7AFG%2F%2BwBR%2F%2FsAUj%2F7AFJ%2F%2BwBSv%2FsAUv%2F7AFM%2F%2BwBTf%2FsAU7%2F7AFP%2F%2BwBUP%2FsAVH%2F7AFS%2F%2BwBU%2F%2FsAVT%2F7AFV%2F%2BwBVv%2FsAej%2F7AH0%2F%2BwB%2B%2F%2FsAfz%2F7AH9%2F%2BwCCf%2FEAgz%2F7AIQ%2F%2BwCHf%2FsAi%2F%2FxAIy%2F%2BwCPv%2FsAj%2F%2F7AJS%2F%2BwCU%2F%2FsAlX%2F7AJW%2F%2BwCV%2F%2FsAl3%2FxAJe%2F%2BwCX%2F%2FEAmr%2F7AJr%2F%2BwCcP%2FsAnT%2F7AKa%2F%2BwCqP%2FEAqv%2F7AKs%2F%2BwCrv%2FsArb%2F7AK3%2F%2BwCuP%2FsArn%2FxAK7%2F%2BwDqP%2FsAFQAzv%2F2AM%2F%2F9gDQ%2F%2FYA0f%2F2ANL%2F9gDT%2F%2FYA1P%2F2ANb%2F9gDY%2F%2BwA2f%2F2ANr%2F9gDb%2F%2FYA3P%2F2AN3%2F9gDe%2F%2FYA3%2F%2F2AOD%2F9gDh%2F%2FYA4v%2F2AOP%2F9gDk%2F%2FYA5f%2F2AOb%2F9gDn%2F%2FYA6P%2F2AOn%2F9gDs%2F%2FYA7f%2F2AO7%2F9gDv%2F%2FYA8P%2F2ARf%2F7AEY%2F%2BwBGf%2FsARr%2F7AEb%2F%2BwBHP%2FsAR3%2F7AEe%2F%2BwBH%2F%2FsASD%2F7AEh%2F%2BwBIv%2FsASP%2F7AEk%2F%2FYBJf%2F2ASb%2F9gEn%2F%2FYBKP%2F2ASn%2F7AEq%2F%2BwBK%2F%2FsAS7%2F7AEv%2F%2FYBMv%2F2Aej%2F9gH7%2F%2FYB%2FP%2F2Af3%2F9gIJ%2F%2BwCDP%2F2AhD%2F9gId%2F%2FYCL%2F%2FsAjL%2F9gI%2B%2F%2FYCP%2F%2F2AlX%2F9gJW%2F%2FYCV%2F%2F2Al3%2F7AJe%2F%2FYCX%2F%2FsAmr%2F9gJr%2F%2FYCcP%2F2AnT%2F9gKa%2F%2FYCqP%2FsAqv%2F9gKs%2F%2FYCuf%2FsArv%2F9gOo%2F%2FYABADrAA8A9AAAAT8AIAFYABEAQQDY%2F%2BwA9AAAAQ4AAAEPAAABEAAAAREAAAESAAABEwAAARQAAAEWAAABF%2F%2FsARj%2F7AEZ%2F%2BwBGv%2FsARv%2F7AEc%2F%2BwBHf%2FsAR7%2F7AEf%2F%2BwBIP%2FsASH%2F7AEi%2F%2BwBI%2F%2FsASn%2F7AEq%2F%2BwBK%2F%2FsAS7%2F7AEwAAAB9wAAAfgAAAIAAAACAQAAAgIAAAIDAAACBAAAAgUAAAIHAAACCAAAAgn%2F7AIKAAACCwAAAhMAAAIUAAACFQAAAhcAAAIbAAACIwAAAi%2F%2F7AI3AAACOwAAAjwAAAJOAAACTwAAAlEAAAJbAAACXAAAAl3%2F7AJf%2F%2BwCZQAAAmYAAAJnAAACoAAAAqj%2F7AK5%2F%2BwCvQAAABQBVwAAAVgAAAFeAAABXwAAAWAAAAFhAAABYgAAAWMAAAFkAAABZQAAAg4AAAIPAAACMAAAAjEAAAJBAAACYQAAAmIAAAJjAAACnAAAAqYAAAABAQIAAAAiANj%2F7ADx%2F%2BwBBf%2FsAQj%2F7AEX%2F%2BwBGP%2FsARn%2F7AEa%2F%2BwBG%2F%2FsARz%2F7AEd%2F%2BwBHv%2FsAR%2F%2F7AEg%2F%2BwBIf%2FsASL%2F7AEj%2F%2BwBKf%2FsASr%2F7AEr%2F%2BwBLv%2FsAT8AFAIJ%2F%2BwCL%2F%2FsAl3%2F7AJf%2F%2BwCqP%2FsArn%2F7ALn%2F4QC6P%2BEAuv%2FhAL3%2F4QDBf%2BEAwb%2FhABlAIj%2F5gCK%2F%2BYAi%2F%2FmAIz%2F5gCg%2F%2BcApv%2FyAKf%2F5wCo%2F%2BcAqf%2FnAKr%2F5wCr%2F%2BcArP%2FnAK3%2F5wCu%2F%2BcA9AAAAQ4AAAEPAAABEAAAAREAAAESAAABEwAAARQAAAEWAAABMAAAAV3%2F8QF7%2F%2FIBiv%2FmAYv%2F7gGM%2F%2B4Bjv%2FyAY%2F%2F6AGU%2F%2BYBn%2F%2FmAaL%2F5gGt%2F%2BcBrv%2FnAbL%2F8gG3%2F%2BYBvf%2FmAb7%2F5wG%2F%2F%2BcBwP%2FyAcH%2F5gHC%2F%2BgBw%2F%2FoAcj%2F8gHN%2F%2BgB1f%2FyAd7%2F7gHf%2F%2B4B4P%2FuAeH%2F6AHl%2F%2FIB6f%2FnAer%2F7QHu%2F%2BYB9wAAAfgAAAH%2B%2F%2FECAAAAAgEAAAICAAACAwAAAgQAAAIFAAACBwAAAggAAAIKAAACCwAAAg3%2F0AIR%2F%2FECEwAAAhQAAAIVAAACFwAAAhsAAAIjAAACNf%2FxAjcAAAI6%2F84COwAAAjwAAAJD%2F%2FECS%2F%2FxAk4AAAJPAAACUQAAAlj%2F8QJbAAACXAAAAmUAAAJmAAACZwAAAmj%2F8QJx%2F9ACiv%2FnAoz%2F8gKU%2F%2BcCl%2F%2FnAqAAAAK9AAAAjwABABAAAgAQAAMAEAAEABAABQAQAAYAEAAHABAACAAQAAkAEAAKABAACwAQAAwAEAANABAADgAQAA8AEAAQABAAEQAQABIAEAATABAAFAAQABUAEAAWABAAFwAQABgAEAAc%2F%2BgAHf%2FoAB7%2F6AAf%2F%2BgAIP%2FoACH%2F6AA5%2F%2BgAOv%2FoADv%2F6AA8%2F%2BgAPf%2FoAGD%2F6ABh%2F%2BgAYv%2FoAGP%2F6ABk%2F%2BgAZf%2FoAGb%2F6ABn%2F%2BgAaP%2FoAGn%2F6ABq%2F%2BgAa%2F%2FoAGz%2F6ABt%2F%2BgAbv%2FoAG%2F%2F6ABw%2F%2BgAcf%2FoAHL%2F6ABz%2F%2BgAdP%2FoAHX%2F6AB2%2F%2BgAd%2F%2FoAHj%2F6AB7%2F%2BgAiP%2FgAIr%2F4ACL%2F%2BAAjP%2FgAKD%2F4ACn%2F98AqP%2FfAKn%2F3wCq%2F98Aq%2F%2FfAKz%2F3wCt%2F98Arv%2FfAXEAEAF3ABQBgwAQAYb%2F6AGJ%2F%2BgBiv%2FgAY%2F%2F4QGU%2F%2BABlwAQAZr%2F6AGf%2F%2BABov%2FgAaP%2F6AGmABABrP%2FoAa3%2F4AGu%2F%2BABr%2F%2FoAbf%2F4AG7%2F%2BgBvP%2FoAb3%2F4AG%2B%2F98Bv%2F%2FfAcH%2F4AHC%2F%2BEBw%2F%2FhAcoAEAHN%2F%2BEBzwAQAdAAEAHT%2F%2BkB2v%2FoAdv%2F6AHc%2F%2BgB4f%2FhAen%2F3wHq%2F94B6wAQAe3%2F6AHu%2F98B7%2F%2FyAfAAEAHx%2F%2BgB%2BgATAgYAEAIS%2F%2BACGgAQAkX%2F4AJG%2F%2BACSP%2FhAk0AEAJQ%2F%2BACZP%2FgAnMAEAJ3ABACegAQAn7%2F6AKBABAChf%2FoAor%2F3wKPABACk%2F%2FoApT%2F3wKX%2F98Cmf%2FoA6X%2F6AOn%2F%2BgDqf%2FoADIAiP%2FxAIr%2F8QCL%2F%2FEAjP%2FxAKD%2F9ACm%2F%2FQAp%2F%2FwAKj%2F8ACp%2F%2FAAqv%2FwAKv%2F8ACs%2F%2FAArf%2FwAK7%2F8AF7%2F%2FQBg%2F%2F1AYr%2F8QGL%2F%2FMBjP%2FzAY7%2F9AGU%2F%2FEBl%2F%2F1AZ%2F%2F8QGi%2F%2FEBrf%2F0Aa7%2F9AGy%2F%2FQBt%2F%2FxAb3%2F8QG%2B%2F%2FABv%2F%2FwAcD%2F9AHB%2F%2FEByP%2F0Acr%2F9QHV%2F%2FQB3v%2FzAd%2F%2F8wHg%2F%2FMB5f%2F0Aen%2F8gHq%2F%2FIB6%2F%2F1Ae7%2F8gHw%2F%2FUCiv%2FwAoz%2F9AKU%2F%2FACl%2F%2FwAsf%2F8gA%2BAPT%2F6QEO%2F%2BkBD%2F%2FpARD%2F6QER%2F%2BkBEv%2FpARP%2F6QEU%2F%2BkBFv%2FpATD%2F6QFY%2F8EB0%2F%2FkAe%2F%2F7wH1%2F9cB9%2F%2FpAfj%2F6QIA%2F%2BkCAf%2FpAgL%2F6QID%2F%2BkCBP%2FpAgX%2F6QIH%2F%2BkCCP%2FpAgr%2F6QIL%2F%2BkCDf%2B5AhP%2F6QIU%2F%2BkCFf%2FpAhf%2F6QIb%2F%2BkCI%2F%2FpAib%2FsgI3%2F%2BkCOv%2BgAjv%2F6QI8%2F%2BkCRv%2FFAk7%2F6QJP%2F%2BkCUf%2FpAlv%2F6QJc%2F%2BkCZf%2FpAmb%2F6QJn%2F%2BkCbP%2FMAm3%2FzAJx%2F8sCi%2F%2FFApkArwKg%2F%2BkCrf%2B0Ar3%2F6QL%2B%2F8AC%2F%2F%2FAAwD%2FwAMB%2F8ADAv%2FAA6b%2F0gOq%2F8gAjgABAA8AAgAPAAMADwAEAA8ABQAPAAYADwAHAA8ACAAPAAkADwAKAA8ACwAPAAwADwANAA8ADgAPAA8ADwAQAA8AEQAPABIADwATAA8AFAAPABUADwAWAA8AFwAPABgADwCI%2F%2BYAiv%2FmAIv%2F5gCM%2F%2BYAoP%2FmAKYADgCn%2F%2BYAqP%2FmAKn%2F5gCq%2F%2BYAq%2F%2FmAKz%2F5gCt%2F%2BYArv%2FmAPQAAAEOAAABDwAAARAAAAERAAABEgAAARMAAAEUAAABFgAAATAAAAFxAA8BdwATAXsADgGDAA4Biv%2FmAYsACwGMAAsBjgAOAY%2F%2F5QGU%2F%2BYBlwAOAZv%2F9AGf%2F%2BYBov%2FmAaYADwGt%2F%2BYBrv%2FmAbIADgG3%2F%2BYBvf%2FmAb7%2F5gG%2F%2F%2BYBwAAOAcH%2F5gHC%2F%2BUBw%2F%2FlAcgADgHKAA4Bzf%2FlAc8ADwHQAA8B1QAOAd4ACwHfAAsB4AALAeH%2F5QHlAA4B6f%2FmAer%2F5gHrAA4B7v%2FmAfAADgH3AAAB%2BAAAAfoAEgIAAAACAQAAAgIAAAIDAAACBAAAAgUAAAIGAA8CBwAAAggAAAIKAAACCwAAAg3%2F5wIS%2F%2BgCEwAAAhQAAAIVAAACFwAAAhoADwIbAAACIwAAAjcAAAI6%2F%2BcCOwAAAjwAAAJF%2F%2BgCRv%2FoAk0ADwJOAAACTwAAAlD%2F6AJRAAACWwAAAlwAAAJk%2F%2BgCZQAAAmYAAAJnAAACcf%2FnAnMADwJ3AA8CegAPAoEADwKK%2F%2BYCjAAOAo8ADwKU%2F%2BYCl%2F%2FmAqAAAAK9AAAAQACI%2FvUAiv71AIv%2B9QCM%2FvUAoP%2FIAKf%2FrQCo%2F60Aqf%2BtAKr%2FrQCr%2F60ArP%2BtAK3%2FrQCu%2F60BXf%2FJAYP%2F9QGK%2FvUBi%2F%2FrAYz%2F6wGU%2F8MBl%2F%2F1AZ%2F%2B9QGi%2FvUBrf%2FIAa7%2FyAG3%2FvUBvf71Ab7%2FrQG%2F%2F60Bwf71AcP%2F5wHF%2F98Byv%2F1Ad7%2F6wHf%2F%2BsB4P%2FrAen%2F0QHq%2F%2BwB6%2F%2F1Ae7%2FoAHw%2F%2FUB%2Fv%2FJAg3%2FzwIR%2F8kCFwAAAjX%2FyQI6%2F84CQ%2F%2FJAkv%2FyQJY%2F8kCaP%2FJAnH%2F0QKK%2F60ClP%2BtApf%2FrQMH%2F8ADCP%2FAAwn%2FwAMK%2F8ADC%2F%2FAAxD%2FwAMR%2F8ADUf%2FAA1L%2FwANe%2F8AAawCg%2F8gApv%2FwAKf%2FrQCo%2F60Aqf%2BtAKr%2FrQCr%2F60ArP%2BtAK3%2FrQCu%2F60A9AAAAQ4AAAEPAAABEAAAAREAAAESAAABEwAAARQAAAEWAAABMAAAAV3%2FyQF7%2F%2FABg%2F%2F1AYv%2F6wGM%2F%2BsBjv%2FwAY%2F%2F5wGU%2F8MBl%2F%2F1Aa3%2FyAGu%2F8gBsv%2FwAb7%2FrQG%2F%2F60BwP%2FwAcL%2F5wHD%2F%2BcBxf%2FfAcj%2F8AHK%2F%2FUBzf%2FnAdX%2F8AHe%2F%2BsB3%2F%2FrAeD%2F6wHh%2F%2BcB5f%2FwAen%2F0QHq%2F%2BwB6%2F%2F1Ae7%2FoAHw%2F%2FUB9wAAAfgAAAH%2B%2F8kCAAAAAgEAAAICAAACAwAAAgQAAAIFAAACBwAAAggAAAIKAAACCwAAAg3%2FzwIR%2F8kCEwAAAhQAAAIVAAACFwAAAhsAAAIjAAACNf%2FJAjcAAAI6%2F84COwAAAjwAAAJD%2F8kCS%2F%2FJAk4AAAJPAAACUQAAAlj%2FyQJbAAACXAAAAmUAAAJmAAACZwAAAmj%2FyQJx%2F9ECiv%2BtAoz%2F8AKU%2F60Cl%2F%2BtAqAAAAK9AAADB%2F%2FAAwj%2FwAMJ%2F8ADCv%2FAAwv%2FwAMQ%2F8ADEf%2FAA1H%2FwANS%2F8ADXv%2FAADAAiP%2FjAIr%2F4wCL%2F%2BMAjP%2FjAKb%2F5QCn%2F%2BQAqP%2FkAKn%2F5ACq%2F%2BQAq%2F%2FkAKz%2F5ACt%2F%2BQArv%2FkAXf%2F4gF7%2F%2BUBg%2F%2FlAYr%2F4wGL%2F%2BkBjP%2FpAY7%2F5QGX%2F%2BUBn%2F%2FjAaL%2F4wGy%2F%2BUBt%2F%2FjAb3%2F4wG%2B%2F%2BQBv%2F%2FkAcD%2F5QHB%2F%2BMByP%2FlAcr%2F5QHV%2F%2BUB3v%2FpAd%2F%2F6QHg%2F%2BkB5f%2FlAev%2F5QHu%2F%2BQB8P%2FlAgb%2F6gIa%2F%2BoCTf%2FqAnP%2F6gKK%2F%2BQCjP%2FlApT%2F5AKX%2F%2BQATgCI%2F74Aiv%2B%2BAIv%2FvgCM%2F74A9AAAAQ4AAAEPAAABEAAAAREAAAESAAABEwAAARQAAAEWAAABMAAAAVf%2F7wFe%2F%2B8BX%2F%2FvAWD%2F7wFh%2F%2B8BYv%2FvAWP%2F7wFk%2F%2B8BZf%2FvAYr%2FvgGU%2F8kBn%2F%2B%2BAaL%2FvgG3%2F74Bvf%2B%2BAcH%2FvgHF%2F%2BkB9wAAAfgAAAIAAAACAQAAAgIAAAIDAAACBAAAAgUAAAIHAAACCAAAAgoAAAILAAACDf%2FfAg7%2F7wIP%2F%2B8CEwAAAhQAAAIVAAACFwAAAhsAAAIjAAACJv%2FtAjD%2F7wIx%2F%2B8CNwAAAjr%2F3wI7AAACPAAAAkH%2F7wJOAAACTwAAAlEAAAJbAAACXAAAAmH%2F7wJi%2F%2B8CY%2F%2FvAmUAAAJmAAACZwAAAmz%2F9QJx%2F%2BACnP%2FvAqAAAAKm%2F%2B8CvQAAA6r%2F6wAjAIj%2F4gCK%2F%2BIAi%2F%2FiAIz%2F4gCm%2F%2BQBd%2F%2FhAXv%2F5AGD%2F%2BQBiv%2FiAYv%2F6QGM%2F%2BkBjv%2FkAZf%2F5AGf%2F%2BIBov%2FiAbL%2F5AG3%2F%2BIBvf%2FiAcD%2F5AHB%2F%2BIByP%2FkAcr%2F5AHV%2F%2BQB3v%2FpAd%2F%2F6QHg%2F%2BkB5f%2FkAev%2F5AHw%2F%2BQB%2Bv%2FkAgb%2F6wIa%2F%2BsCTf%2FrAnP%2F6wKM%2F%2BQAFwCI%2F%2BsAiv%2FrAIv%2F6wCM%2F%2BsAp%2F%2FzAKj%2F8wCp%2F%2FMAqv%2FzAKv%2F8wCs%2F%2FMArf%2FzAK7%2F8wGK%2F%2BsBn%2F%2FrAaL%2F6wG3%2F%2BsBvf%2FrAb7%2F8wG%2F%2F%2FMBwf%2FrAor%2F8wKU%2F%2FMCl%2F%2FzAIUAiP%2FSAIr%2F0gCL%2F9IAjP%2FSAKD%2F1ACm%2F%2FQAp%2F%2FTAKj%2F0wCp%2F9MAqv%2FTAKv%2F0wCs%2F9MArf%2FTAK7%2F0wD0%2F%2FkBDv%2F5AQ%2F%2F%2BQEQ%2F%2FkBEf%2F5ARL%2F%2BQET%2F%2FkBFP%2F5ARb%2F%2BQEw%2F%2FkBV%2F%2FmAV3%2F7wFe%2F%2BYBX%2F%2FmAWD%2F5gFh%2F%2BYBYv%2FmAWP%2F5gFk%2F%2BYBZf%2FmAXv%2F9AGK%2F9IBi%2F%2FtAYz%2F7QGO%2F%2FQBj%2F%2FhAZT%2F1AGf%2F9IBov%2FSAa3%2F1AGu%2F9QBsv%2F0Abf%2F0gG9%2F9IBvv%2FTAb%2F%2F0wHA%2F%2FQBwf%2FSAcL%2F4QHD%2F%2BEByP%2F0Ac3%2F4QHV%2F%2FQB3v%2FtAd%2F%2F7QHg%2F%2B0B4f%2FhAeX%2F9AHp%2F9QB6v%2FnAe7%2F0gH3%2F%2FkB%2BP%2F5Af7%2F7wIA%2F%2FkCAf%2F5AgL%2F%2BQID%2F%2FkCBP%2F5AgX%2F%2BQIH%2F%2FkCCP%2F5Agr%2F%2BQIL%2F%2FkCDf%2FJAg7%2F5gIP%2F%2BYCEf%2FvAhP%2F%2BQIU%2F%2FkCFf%2F5Ahf%2F%2BQIb%2F%2FkCI%2F%2F5Aib%2F5QIw%2F%2BYCMf%2FmAjX%2F7wI3%2F%2FkCOv%2FEAjv%2F%2BQI8%2F%2FkCQf%2FmAkP%2F7wJL%2F%2B8CTv%2F5Ak%2F%2F%2BQJR%2F%2FkCWP%2FvAlv%2F%2BQJc%2F%2FkCYf%2FmAmL%2F5gJj%2F%2BYCZf%2F5Amb%2F%2BQJn%2F%2FkCaP%2FvAmz%2F9QJx%2F8kCiv%2FTAoz%2F9AKU%2F9MCl%2F%2FTApz%2F5gKg%2F%2FkCpv%2FmAr3%2F%2BQMH%2F8oDCP%2FKAwn%2FygMK%2F8oDC%2F%2FKAxD%2FygMR%2F8oDUf%2FKA1L%2FygNe%2F8oDqv%2FjAB8AoP%2FIAV3%2FyQGD%2F%2FUBi%2F%2FrAYz%2F6wGU%2F8MBl%2F%2F1Aa3%2FyAGu%2F8gBw%2F%2FnAcX%2F3wHK%2F%2FUB3v%2FrAd%2F%2F6wHg%2F%2BsB6f%2FRAer%2F7AHr%2F%2FUB7v%2BgAfD%2F9QH%2B%2F8kCDf%2FPAhH%2FyQIXAAACNf%2FJAjr%2FzgJD%2F8kCS%2F%2FJAlj%2FyQJo%2F8kCcf%2FRAAQBM%2F%2FiAvkAFAL7ABMC%2FQARAAQCSP%2FtAvn%2F5gL7%2F%2B8C%2Ff%2F0ABIBd%2F%2BuAZQAEgHn%2F70B7gARAfb%2F4AH5%2F%2BIB%2Bv%2BtAf%2F%2F1gIW%2F%2BACGf%2FfAiT%2F0gI4%2F%2BACPf%2FgAkb%2F6QJI%2F9oCb%2F%2FfAnb%2F3QOm%2F84ANwD0%2F%2B8BDv%2FvAQ%2F%2F7wEQ%2F%2B8BEf%2FvARL%2F7wET%2F%2B8BFP%2FvARb%2F7wEw%2F%2B8BXf%2FwAff%2F7wH4%2F%2B8B%2Bv%2FuAf7%2F8AIA%2F%2B8CAf%2FvAgL%2F7wID%2F%2B8CBP%2FvAgX%2F7wIH%2F%2B8CCP%2FvAgr%2F7wIL%2F%2B8CDf%2FuAhH%2F8AIT%2F%2B8CFP%2FvAhX%2F7wIX%2F%2B8CG%2F%2FvAiP%2F7wIm%2F%2FQCNf%2FwAjf%2F7wI6%2F%2B8CO%2F%2FvAjz%2F7wJD%2F%2FACS%2F%2FwAk7%2F7wJP%2F%2B8CUf%2FvAlj%2F8AJb%2F%2B8CXP%2FvAmX%2F7wJm%2F%2B8CZ%2F%2FvAmj%2F8AJx%2F%2B8CoP%2FvAr3%2F7wOq%2F%2FEASgD0AAABDgAAAQ8AAAEQAAABEQAAARIAAAETAAABFAAAARYAAAEwAAABV%2F%2F1AV7%2F9QFf%2F%2FUBYP%2F1AWH%2F9QFi%2F%2FUBY%2F%2F1AWT%2F9QFl%2F%2FUB9wAAAfgAAAIAAAACAQAAAgIAAAIDAAACBAAAAgUAAAIHAAACCAAAAgoAAAILAAACDf%2F0Ag7%2F9QIP%2F%2FUCEwAAAhQAAAIVAAACFwAAAhsAAAIjAAACJv%2F1AjD%2F9QIx%2F%2FUCNwAAAjr%2F9QI7AAACPAAAAkH%2F9QJOAAACTwAAAlEAAAJbAAACXAAAAmH%2F9QJi%2F%2FUCY%2F%2F1AmUAAAJmAAACZwAAAnH%2F9QKc%2F%2FUCoAAAAqb%2F9QK9AAADB%2F%2FyAwj%2F8gMJ%2F%2FIDCv%2FyAwv%2F8gMQ%2F%2FIDEf%2FyA1H%2F8gNS%2F%2FIDXv%2FyADMA9AAAAQ4AAAEPAAABEAAAAREAAAESAAABEwAAARQAAAEWAAABMAAAAfcAAAH4AAAB%2BgAUAgAAAAIBAAACAgAAAgMAAAIEAAACBQAAAgcAAAIIAAACCgAAAgsAAAIN%2F%2B0CEv%2FtAhMAAAIUAAACFQAAAhcAAAIY%2F%2BICGwAAAiMAAAI3AAACOv%2FtAjsAAAI8AAACRf%2FtAkb%2F7QJOAAACTwAAAlD%2F7QJRAAACWwAAAlwAAAJk%2F%2B0CZQAAAmYAAAJnAAACcf%2FtAqAAAAK9AAAAVQDO%2F%2FAAz%2F%2FwAND%2F8ADR%2F%2FAA0v%2FwANP%2F8ADU%2F%2FAA1v%2FwANj%2FzQDZ%2F%2FAA2v%2FwANv%2F8ADc%2F%2FAA3f%2FwAN7%2F8ADf%2F%2FAA4P%2FwAOH%2F8ADi%2F%2FAA4%2F%2FwAOT%2F8ADl%2F%2FAA5v%2FwAOf%2F8ADo%2F%2FAA6f%2FwAOz%2F8ADt%2F%2FAA7v%2FwAO%2F%2F8ADw%2F%2FABF%2F%2FNARj%2FzQEZ%2F80BGv%2FNARv%2FzQEc%2F80BHf%2FNAR7%2FzQEf%2F80BIP%2FNASH%2FzQEi%2F80BI%2F%2FNAST%2F8AEl%2F%2FABJv%2FwASf%2F8AEo%2F%2FABKf%2FNASr%2FzQEr%2F80BLv%2FNAS%2F%2F8AEy%2F%2FAB6P%2FwAfv%2F8AH8%2F%2FAB%2Ff%2FwAgn%2FzQIM%2F%2FACEP%2FwAh3%2F8AIv%2F80CMv%2FwAj7%2F8AI%2F%2F%2FACVf%2FwAlb%2F8AJX%2F%2FACXf%2FNAl7%2F8AJf%2F80Cav%2FwAmv%2F8AJw%2F%2FACdP%2FwApr%2F8AKo%2F80Cq%2F%2FwAqz%2F8AK5%2F80Cu%2F%2FwA6b%2F6wOo%2F%2FAAmQCz%2F%2FAAtP%2FwALX%2F8AC2%2F%2FAAt%2F%2FwALj%2F8AC5%2F%2FAAuv%2FwALv%2F8AC8%2F%2FAAvf%2FwAL7%2F8AC%2F%2F%2FAAwP%2FwAMH%2F8ADC%2F%2FAAw%2F%2FwAMT%2F8ADF%2F%2FAAxv%2FwAMf%2F8ADI%2F%2FAAyf%2FwAMr%2F8ADO%2F7AAz%2F%2BwAND%2FsADR%2F7AA0v%2BwANP%2FsADU%2F7AA1v%2BwANj%2F1gDZ%2F7AA2v%2BwANv%2FsADc%2F7AA3f%2BwAN7%2FsADf%2F7AA4P%2BwAOH%2FsADi%2F7AA4%2F%2BwAOT%2FsADl%2F7AA5v%2BwAOf%2FsADo%2F7AA6f%2BwAOsADQDs%2F7AA7f%2BwAO7%2FsADv%2F7AA8P%2BwARf%2F1gEY%2F9YBGf%2FWARr%2F1gEb%2F9YBHP%2FWAR3%2F1gEe%2F9YBH%2F%2FWASD%2F1gEh%2F9YBIv%2FWASP%2F1gEk%2F7ABJf%2BwASb%2FsAEn%2F7ABKP%2BwASn%2F1gEq%2F9YBK%2F%2FWAS7%2F1gEv%2F7ABMv%2BwAVcACwFeAAsBXwALAWAACwFhAAsBYgALAWMACwFkAAsBZQALAej%2FsAH0%2F%2FAB%2Bv%2BqAfv%2FsAH8%2F7AB%2Ff%2BwAgb%2FrwIJ%2F9YCDP%2BwAg4ACwIPAAsCEP%2BwAhr%2FrwId%2F7ACL%2F%2FWAjAACwIxAAsCMv%2BwAj7%2FsAI%2F%2F7ACQQALAk3%2FrwJS%2F%2FACU%2F%2FwAlX%2FsAJW%2F7ACV%2F%2BwAl3%2F1gJe%2F7ACX%2F%2FWAmEACwJiAAsCYwALAmr%2FsAJr%2F7ACbAALAm0ACwJw%2F7ACc%2F%2BvAnT%2FsAKa%2F7ACnAALAp3%2FsAKmAAsCqP%2FWAqr%2FqwKr%2F8ACrP%2BwAq%2F%2F1QK5%2F9YCu%2F%2BwAwcADQMIAA0DCQANAwoADQMLAA0DEAANAxEADQNRAA0DUgANA14ADQOm%2F%2BIDqP%2BwA6oADAA3APQAAAEOAAABDwAAARAAAAERAAABEgAAARMAAAEUAAABFgAAATAAAAH3AAAB%2BAAAAfoAFAIAAAACAQAAAgIAAAIDAAACBAAAAgUAAAIGABACBwAAAggAAAIKAAACCwAAAg3%2F8AIS%2F%2FACEwAAAhQAAAIVAAACFwAAAhoAEAIbAAACIwAAAiQADAI3AAACOv%2FwAjsAAAI8AAACRf%2FwAkb%2F5gJNABACTgAAAk8AAAJQ%2F%2FACUQAAAlsAAAJcAAACZP%2FwAmUAAAJmAAACZwAAAnH%2F8AJzABACoAAAAr0AAABzAM4ADADPAAwA0AAMANEADADSAAwA0wAMANQADADWAAwA2QAMANoADADbAAwA3AAMAN0ADADeAAwA3wAMAOAADADhAAwA4gAMAOMADADkAAwA5QAMAOYADADnAAwA6AAMAOkADADsAAwA7QAMAO4ADADvAAwA8AAMAPQAAAEOAAABDwAAARAAAAERAAABEgAAARMAAAEUAAABFgAAASQADAElAAwBJgAMAScADAEoAAwBLwAMATAAAAEyAAwB6AAMAfcAAAH4AAAB%2BgA6AfsADAH8AAwB%2FQAMAgAAAAIBAAACAgAAAgMAAAIEAAACBQAAAgYAGAIHAAACCAAAAgoAAAILAAACDAAMAg3%2F4wIQAAwCEv%2F3AhMAAAIUAAACFQAAAhcAAAIYAAACGgAYAhsAAAIdAAwCIwAAAjIADAI3AAACOv%2FiAjsAAAI8AAACPgAMAj8ADAJF%2F%2FcCRv%2FjAk0AGAJOAAACTwAAAlD%2F9wJRAAACVQAMAlYADAJXAAwCWwAAAlwAAAJeAAwCZP%2F3AmUAAAJmAAACZwAAAmoADAJrAAwCcAAMAnH%2F4wJzABgCdAAMApoADAKgAAACqwAMAqwADAK7AAwCvQAAA6gADAANAg3%2FugIS%2F9kCFwAAAib%2FzwI6%2F1ACRf%2FZAkb%2FnQJQ%2F9kCZP%2FZAmz%2F8AJt%2F%2FICcf9MA6r%2F2wAKAwf%2F1gMI%2F9YDCf%2FWAwr%2F1gML%2F9YDEP%2FWAxH%2F1gNR%2F9YDUv%2FWA17%2F1gBJAPQAAAEOAAABDwAAARAAAAERAAABEgAAARMAAAEUAAABFgAAATAAAAFX%2F%2FQBXf%2FwAV7%2F9AFf%2F%2FQBYP%2F0AWH%2F9AFi%2F%2FQBY%2F%2F0AWT%2F9AFl%2F%2FQB9wAAAfgAAAH6%2F%2B8B%2Fv%2FwAgAAAAIBAAACAgAAAgMAAAIEAAACBQAAAgb%2F8wIHAAACCAAAAgoAAAILAAACDv%2F0Ag%2F%2F9AIR%2F%2FACEwAAAhQAAAIVAAACFwAAAhr%2F8wIbAAACIwAAAjD%2F9AIx%2F%2FQCNf%2FwAjcAAAI7AAACPAAAAkH%2F9AJD%2F%2FACS%2F%2FwAk3%2F8wJOAAACTwAAAlEAAAJY%2F%2FACWwAAAlwAAAJh%2F%2FQCYv%2F0AmP%2F9AJlAAACZgAAAmcAAAJo%2F%2FACc%2F%2FzApz%2F9AKgAAACpv%2F0Ar0AAAA1APQAAAEOAAABDwAAARAAAAERAAABEgAAARMAAAEUAAABFgAAATAAAAH3AAAB%2BAAAAgAAAAIBAAACAgAAAgMAAAIEAAACBQAAAgcAAAIIAAACCgAAAgsAAAIN%2F7oCEv%2FZAhMAAAIUAAACFQAAAhcAAAIbAAACIwAAAib%2FzwI3AAACOv9QAjsAAAI8AAACRf%2FZAkb%2FnQJOAAACTwAAAlD%2F2QJRAAACWwAAAlwAAAJk%2F9kCZQAAAmYAAAJnAAACbP%2FwAm3%2F8gJx%2F0wCoAAAAr0AAAOq%2F9sACgDNAAABPwAAAVgAAAIN%2F%2FACJv%2FxAjr%2F8QJs%2F%2FMCbf%2FpAnH%2F0wOq%2F%2FMAAQIN%2F%2FUAAgH6%2F8kDpv%2FuAAEDpv%2FxAAoDB%2F%2F1Awj%2F9QMJ%2F%2FUDCv%2F1Awv%2F9QMQ%2F%2FUDEf%2F1A1H%2F9QNS%2F%2FUDXv%2F1AAUB%2Bv%2FuAg3%2FsAI6%2F%2BwCcf%2FsAq3%2F6gACAagACwHu%2F%2BYAMQAZ%2FrwAy%2F8rASz%2FSwEzAAABWP%2BMAXf%2FUgGUAAUBxf8%2FAdP%2FwAHn%2Fu8B7gAFAe%2F%2F1QH1%2F70B9v9JAfn%2FPAH6%2Fv4B%2F%2F8TAg3%2FaAIW%2Fw4CF%2F8zAhn%2FDgIe%2FxMCJP8HAiUAAAIm%2FxECOP8OAjr%2FagI9%2F0kCRv8MAkj%2B8QJs%2FzECbf9fAm%2F%2FCgJx%2FzACdv8VAov%2FYQKd%2F48Cnv8PAqL%2B6AKp%2Fx8Cqv7lAq3%2FRgKv%2Fu0Csf79ArL%2B2QMM%2Fb8DDf59A6b%2FPAOq%2F6wAAwFY%2F%2BUCi%2F%2FLArH%2F5AAWAVj%2FwQHT%2F%2BQB7%2F%2FvAfX%2F1wIN%2F7kCF%2F%2FpAib%2FsgI6%2F6ACRv%2FFAmz%2FzAJt%2F8wCcf%2FLAov%2FxQKZAK8Crf%2B0Av7%2FwAL%2F%2F8ADAP%2FAAwH%2FwAMC%2F8ADpv%2FSA6r%2FyAA6ABz%2F8wAd%2F%2FMAHv%2FzAB%2F%2F8wAg%2F%2FMAIf%2FzADn%2F8wA6%2F%2FMAO%2F%2FzADz%2F8wA9%2F%2FMAYP%2FzAGH%2F8wBi%2F%2FMAY%2F%2FzAGT%2F8wBl%2F%2FMAZv%2FzAGf%2F8wBo%2F%2FMAaf%2FzAGr%2F8wBr%2F%2FMAbP%2FzAG3%2F8wBu%2F%2FMAb%2F%2FzAHD%2F8wBx%2F%2FMAcv%2FzAHP%2F8wB0%2F%2FMAdf%2FzAHb%2F8wB3%2F%2FMAeP%2FzAHv%2F8wGG%2F%2FMBif%2FzAZr%2F8wGj%2F%2FMBrP%2FzAa%2F%2F8wG7%2F%2FMBvP%2FzAdr%2F8wHb%2F%2FMB3P%2FzAe3%2F8wHx%2F%2FMCfv%2FzAoX%2F8wKT%2F%2FMCmf%2FzAqQADQOl%2F%2FMDp%2F%2FzA6n%2F8wAIABn%2FnwE%2FAA4Bd%2F%2BoAef%2F4wH6%2F8oCnf%2F1AqT%2F3gKq%2F%2BUAOwAc%2F%2BYAHf%2FmAB7%2F5gAf%2F%2BYAIP%2FmACH%2F5gA5%2F%2BYAOv%2FmADv%2F5gA8%2F%2BYAPf%2FmAGD%2F5gBh%2F%2BYAYv%2FmAGP%2F5gBk%2F%2BYAZf%2FmAGb%2F5gBn%2F%2BYAaP%2FmAGn%2F5gBq%2F%2BYAa%2F%2FmAGz%2F5gBt%2F%2BYAbv%2FmAG%2F%2F5gBw%2F%2BYAcf%2FmAHL%2F5gBz%2F%2BYAdP%2FmAHX%2F5gB2%2F%2BYAd%2F%2FmAHj%2F5gB7%2F%2BYBhv%2FmAYn%2F5gGa%2F%2BYBo%2F%2FmAaz%2F5gGv%2F%2BYBu%2F%2FmAbz%2F5gHa%2F%2BYB2%2F%2FmAdz%2F5gHt%2F%2BYB8f%2FmAn7%2F5gKF%2F%2BYCi%2F%2FCApP%2F5gKZ%2F%2BYCpAAQA6X%2F5gOn%2F%2BYDqf%2FmADIAGf9NAMv%2FjgDNAAABLP%2BhATP%2FtQFY%2F8cBd%2F%2BlAZQADwHF%2F5oB0%2F%2FmAef%2FawHuAA8B7%2F%2FyAfX%2F5AH2%2F6AB%2Bf%2BYAfr%2FdAH%2F%2F4ACDf%2ByAhb%2FfQIX%2F7ECGf99Ah7%2FgAIk%2F3kCJQAAAib%2FfwI4%2F30COv%2BzAj3%2FoAJG%2F3wCSP9sAmz%2FkgJt%2F60Cb%2F97AnH%2FkQJ2%2F4ECi%2F%2BuAp3%2FyQKe%2F34Cov9nAqn%2FhwKq%2F2UCrf%2BeAq%2F%2FagKx%2F3MCsv9eAwz%2BuAMN%2FygDpv%2BYA6r%2F2gA3AAH%2F5AAC%2F%2BQAA%2F%2FkAAT%2F5AAF%2F%2BQABv%2FkAAf%2F5AAI%2F%2BQACf%2FkAAr%2F5AAL%2F%2BQADP%2FkAA3%2F5AAO%2F%2BQAD%2F%2FkABD%2F5AAR%2F%2BQAEv%2FkABP%2F5AAU%2F%2BQAFf%2FkABb%2F5AAX%2F%2BQAGP%2FkAKb%2F0gCn%2F9MAqP%2FTAKn%2F0wCq%2F9MAq%2F%2FTAKz%2F0wCt%2F9MArv%2FTAXH%2F5AF7%2F9IBjv%2FSAab%2F5AGy%2F9IBvv%2FTAb%2F%2F0wHA%2F9IByP%2FSAc%2F%2F5AHQ%2F%2BQB1f%2FSAeX%2F0gJ3%2F%2BQCev%2FkAoH%2F5AKK%2F9MCjP%2FSAo%2F%2F5AKU%2F9MCl%2F%2FTAqT%2F4gAUAXcAEgHF%2F9YB0%2F%2FnAekADQHqAAwB7%2F%2FyAfX%2F6QIN%2F9cCOv%2FXAkb%2F0wJI%2F8UCcf%2FWAov%2F1AKd%2F%2FACof%2FtAqQAEQKt%2F%2BACr%2F%2FnArH%2F5QKy%2F%2B4AJwAB%2F80AAv%2FNAAP%2FzQAE%2F80ABf%2FNAAb%2FzQAH%2F80ACP%2FNAAn%2FzQAK%2F80AC%2F%2FNAAz%2FzQAN%2F80ADv%2FNAA%2F%2FzQAQ%2F80AEf%2FNABL%2FzQAT%2F80AFP%2FNABX%2FzQAW%2F80AF%2F%2FNABj%2FzQFx%2F80Bpv%2FNAc%2F%2FzQHQ%2F80Cd%2F%2FNAnr%2FzQKB%2F80Cj%2F%2FNAqr%2F8gLn%2Fx4C6P8eAuv%2FHgL3%2Fx4DBf8eAwb%2FHgAVAJX%2F7gE%2F%2F5UBWP%2BFAXcAEwGU%2F8UBw%2F9RAcX%2FygHT%2F%2FIB6f91Aer%2FygHu%2F08CDf%2FKAjr%2FnwJG%2F3sCSP%2FdAnH%2FjAKL%2F%2BUCjf%2FRAqQAEQKt%2F8gC7v%2FDAAIA6%2F%2FuAVj%2F6gAIAXcAFQHD%2F%2BQBxf%2FkAen%2F4wHq%2F%2BIB7gAAAfoAFQJG%2F%2BUAGwAZ%2F6AAy%2F%2FBAOv%2F6gEs%2F8ABM%2F%2FYAT%2F%2F6gKL%2F9ACm%2F%2FqAp3%2F7gKe%2F8YCnwANAqH%2F6QKi%2F9YCqf%2FoAqr%2FugKt%2F%2BkCr%2F%2FLArH%2F2gKy%2F8cC8f%2FTAvL%2FzwL5ABQC%2BwATAv0AEgMM%2F64DDf%2FNA0n%2F4gAHABn%2F3wF3%2F98BlP%2FgAe7%2F4AKE%2F%2FMCiP%2FwAqT%2F6gABAqQADgB1AM7%2F8ADP%2F%2FAA0P%2FwANH%2F8ADS%2F%2FAA0%2F%2FwANT%2F8ADW%2F%2FAA2f%2FwANr%2F8ADb%2F%2FAA3P%2FwAN3%2F8ADe%2F%2FAA3%2F%2FwAOD%2F8ADh%2F%2FAA4v%2FwAOP%2F8ADk%2F%2FAA5f%2FwAOb%2F8ADn%2F%2FAA6P%2FwAOn%2F8ADs%2F%2FAA7f%2FwAO7%2F8ADv%2F%2FAA8P%2FwAST%2F8AEl%2F%2FABJv%2FwASf%2F8AEo%2F%2FABL%2F%2FwATL%2F8AFE%2F%2B8BRf%2FvAUb%2F7wFH%2F%2B8BSP%2FvAUn%2F7wFK%2F%2B8BS%2F%2FvAUz%2F7wFN%2F%2B8BTv%2FvAU%2F%2F7wFQ%2F%2B8BUf%2FvAVL%2F7wFT%2F%2B8BVP%2FvAVX%2F7wFW%2F%2B8BV%2F%2FcAV7%2F3AFf%2F9wBYP%2FcAWH%2F3AFi%2F9wBY%2F%2FcAWT%2F3AFl%2F9wB6P%2FwAfv%2F8AH8%2F%2FAB%2Ff%2FwAgz%2F8AIO%2F9wCD%2F%2FcAhD%2F8AId%2F%2FACMP%2FcAjH%2F3AIy%2F%2FACPv%2FwAj%2F%2F8AJB%2F9wCVf%2FwAlb%2F8AJX%2F%2FACXv%2FwAmH%2F3AJi%2F9wCY%2F%2FcAmr%2F8AJr%2F%2FACcP%2FwAnT%2F8AKa%2F%2FACnP%2FcAqH%2F7AKkAA8Cpv%2FcAqn%2F6gKr%2F%2FACrP%2FwAq3%2FxAKu%2F%2B8Cr%2F%2FnArb%2F7wK3%2F%2B8CuP%2FvArv%2F8AMH%2F9oDCP%2FaAwn%2F2gMK%2F9oDC%2F%2FaAxD%2F2gMR%2F9oDUf%2FaA1L%2F2gNe%2F9oDqP%2FwADkA6%2F%2FpAUT%2F8QFF%2F%2FEBRv%2FxAUf%2F8QFI%2F%2FEBSf%2FxAUr%2F8QFL%2F%2FEBTP%2FxAU3%2F8QFO%2F%2FEBT%2F%2FxAVD%2F8QFR%2F%2FEBUv%2FxAVP%2F8QFU%2F%2FEBVf%2FxAVb%2F8QFX%2F8UBXv%2FFAV%2F%2FxQFg%2F8UBYf%2FFAWL%2FxQFj%2F8UBZP%2FFAWX%2FxQIO%2F8UCD%2F%2FFAjD%2FxQIx%2F8UCQf%2FFAmH%2FxQJi%2F8UCY%2F%2FFApz%2FxQKh%2F%2B4CpAAQAqb%2FxQKp%2F%2BwCrf8gAq7%2F8QK2%2F%2FECt%2F%2FxArj%2F8QMH%2F6ADCP%2BgAwn%2FoAMK%2F6ADC%2F%2BgAxD%2FoAMR%2F6ADUf%2BgA1L%2FoANe%2F6AACADrAA0BPwAyAfr%2FyAKd%2F%2FUCqQALAqr%2F6gKtAAwDpv%2FxAAUB%2Bv%2FuAg3%2FqwI6%2F%2BwCcf%2FsAq3%2F6gABAq0ACwB2AM7%2F6ADP%2F%2BgA0P%2FoANH%2F6ADS%2F%2BgA0%2F%2FoANT%2F6ADW%2F%2BgA2P%2FqANn%2F6ADa%2F%2BgA2%2F%2FoANz%2F6ADd%2F%2BgA3v%2FoAN%2F%2F6ADg%2F%2BgA4f%2FoAOL%2F6ADj%2F%2BgA5P%2FoAOX%2F6ADm%2F%2BgA5%2F%2FoAOj%2F6ADp%2F%2BgA6wAMAOz%2F6ADt%2F%2BgA7v%2FoAO%2F%2F6ADw%2F%2BgBF%2F%2FqARj%2F6gEZ%2F%2BoBGv%2FqARv%2F6gEc%2F%2BoBHf%2FqAR7%2F6gEf%2F%2BoBIP%2FqASH%2F6gEi%2F%2BoBI%2F%2FqAST%2F6AEl%2F%2BgBJv%2FoASf%2F6AEo%2F%2BgBKf%2FqASr%2F6gEr%2F%2BoBLv%2FqAS%2F%2F6AEy%2F%2BgBVwALAV4ACwFfAAsBYAALAWEACwFiAAsBYwALAWQACwFlAAsB6P%2FoAfv%2F6AH8%2F%2BgB%2Ff%2FoAgn%2F6gIM%2F%2BgCDgALAg8ACwIQ%2F%2BgCHf%2FoAi%2F%2F6gIwAAsCMQALAjL%2F6AI%2B%2F%2BgCP%2F%2FoAkEACwJV%2F%2BgCVv%2FoAlf%2F6AJd%2F%2BoCXv%2FoAl%2F%2F6gJhAAsCYgALAmMACwJq%2F%2BgCa%2F%2FoAnD%2F6AJ0%2F%2BgCmv%2FoApwACwKd%2F%2B0CpAAAAqYACwKo%2F%2BoCqQALAqv%2F6AKs%2F%2BgCrQAMArn%2F6gK7%2F%2BgDBwAMAwgADAMJAAwDCgAMAwsADAMQAAwDEQAMA1EADANSAAwDXgAMA6j%2F6AABAg3%2F2AANAV3%2F7QFm%2F%2B0BZ%2F%2FtAWj%2F7QFp%2F%2B0B%2Fv%2FtAg3%2FqgIR%2F%2B0CNf%2FtAkP%2F7QJL%2F%2B0CWP%2FtAmj%2F7QAMAV3%2F8gFm%2F%2FIBZ%2F%2FyAWj%2F8gFp%2F%2FIB%2Fv%2FyAhH%2F8gI1%2F%2FICQ%2F%2FyAkv%2F8gJY%2F%2FICaP%2FyAB8BV%2F%2F0AV3%2F8gFe%2F%2FQBX%2F%2F0AWD%2F9AFh%2F%2FQBYv%2F0AWP%2F9AFk%2F%2FQBZf%2F0AWb%2F8wFn%2F%2FMBaP%2FzAWn%2F8wH%2B%2F%2FICDv%2F0Ag%2F%2F9AIR%2F%2FICMP%2F0AjH%2F9AI1%2F%2FICQf%2F0AkP%2F8gJL%2F%2FICWP%2FyAmH%2F9AJi%2F%2FQCY%2F%2F0Amj%2F8gKc%2F%2FQCpv%2F0AAsAzQAAAT8AAAFY%2F9gB%2Bv%2B4Ag3%2F6gIm%2F%2FACOv%2FrAmz%2F9QJx%2F%2BwCrf%2FqA6r%2F8QADAT%2F%2F2AFY%2F5cCDf%2FAAAEC9f8gAAEC9v8gABUAoAAUAKEAEgCiABIAowASAKQAEgClABIApwAWAKgAFgCpABYAqgAWAKsAFgCsABYArQAWAK4AFgGtABQBrgAUAb4AFgG%2FABYCigAWApQAFgKXABYAEQBO%2F%2BwAT%2F%2FsAI3%2F7ACO%2F%2BwAj%2F%2FsAJD%2F7ACR%2F%2BwAkv%2FsAJP%2F7ACU%2F%2BwAm%2F%2FsAJz%2F7ACd%2F%2BwAnv%2FsAJ%2F%2F7AGe%2F%2BwC%2BwAAABEATv%2FuAE%2F%2F7gCN%2F%2B4Ajv%2FuAI%2F%2F7gCQ%2F%2B4Akf%2FuAJL%2F7gCT%2F%2B4AlP%2FuAJv%2F7gCc%2F%2B4Anf%2FuAJ7%2F7gCf%2F%2B4Bnv%2FuAv0AAAABAVgACwACCAgABAAACkwNkgAiAB4AAAAAAAAAAAAAAAAAAAAAAAAAAP%2FkAAAAAAARAAAAAAAAAAAAAAAAAAAAEQAA%2F%2BQAEf%2FlAAAAAAAAAAAAAP%2Fi%2F7oAAAAAAAD%2F4v%2B5%2F3T%2FxP8A%2FxD%2FiAAAAAAAAAAAAAD%2FKQAAAAAAEQAA%2F8kAEv%2BPAAD%2F7P7uAAAAAAAAAAAAAAAAAAAAAAAA%2F%2FEAAAAAAAD%2FvQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcAAP%2B6AAAAAAAAAAAAAP%2B6%2F%2BUAAP%2FEAAAAAAAA%2F5r%2F2P%2FpAAD%2F4QAAAAAAAAAAAAAAAP%2FCAAAAAP%2FtAAAAAAAAAAD%2F7f%2Fv%2F%2BYAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAA8AHgAA%2F%2BkAAAAAAAD%2F8gAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAAAABQAIwAA%2F90AAAAAAAD%2F7AAA%2F%2BsAAAAAAAAAAAAAAAAAAAAAAAD%2F8AAA%2F%2FAAAAAA%2F%2BwAAP%2FzAAAAAAAA%2F%2FH%2F5wAAAAAAAAAAAAAADwAAAAAAAAAA%2F5UAAAAAAAAAAAAAAAD%2F1wAAAAAAAAAA%2F%2BwAAAAAAAAAAP%2FEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP%2B%2F%2F7D%2F2P8A%2F7f%2FdP%2FZ%2F%2Bz%2FoP%2FsABEAAP%2Fi%2F%2Bn%2FlP%2Fw%2Fy3%2F9gAA%2F8wAAAAAAAAAAAAA%2F%2BL%2FK%2F%2FsAAAAAP%2F2AAAAAAAAAAD%2F8f%2FY%2F6YAAAAAAAD%2FdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP%2FFAAD%2F7P%2BI%2F87%2FwwAAAAAAAAAAAAD%2FlQAAAAD%2FsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP%2Fm%2F8QAAAAAAAD%2Fw%2F%2Fr%2F%2BEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2F9IAEQAAAAAAEf%2FRAAAAAAAOAAAAAP%2Fm%2F4j%2F6QAAAAD%2FsP%2Fp%2F9gAAP%2B6AAAAAP%2FYAAAAAAAAAAD%2FzgAA%2FyAAAAAAAAAAAP%2BjAAAAAP%2FEAAAAAAAoAAAAAAAAAAAAKAAA%2F%2BwAAAAAAAD%2F4wAA%2F%2FEAAAAAAAAAAAAAAAAAAAAAAAD%2F8gAA%2F%2FEAAAAA%2F%2FYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2F%2BMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP%2Bd%2F%2BT%2Fsf8Q%2F4%2F%2Fkv%2Bh%2F7gAAAAQAAAAAAAA%2F7P%2Flv%2Fw%2FyYADwAA%2Fxj%2FywAAAAD%2Ffv98%2F8T%2FYAAQAAAAAAAoAAAAAAAAABQAGQAAAAAAAAAAAAD%2F9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP%2FsAAAAAAAAAAD%2F7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9E%2F73%2FM%2F8%2B%2Fyz%2FRP9L%2F3IAAAAHAAcAAAAA%2F2r%2FY%2F%2FR%2FnoABQAA%2FmL%2FkgAAAAD%2FD%2F8M%2F4YAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD%2FVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU%2F78AAAATABQAFP%2FU%2F3v%2Fyv8R%2Fu3%2FdgAAAAAAAAAAAAD%2FcQAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAP%2Fh%2F8kAAP8n%2F9%2F%2Fuv%2FtAAAAAP%2FsAA4AAP%2FYAAAAAAAA%2F4X%2F9gAA%2F8QAAAAAAAAAAAAAAAD%2FiP%2FiAAAAAP%2Fr%2F%2BYAAAANAAAAAP%2Ft%2F%2BUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD%2F%2BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP%2Bt%2FvX%2FwP%2Fw%2F8kAAAAAAAAAAAAAAAD%2F9f%2Fr%2F%2BcAAAAAAAAAAP%2FIAAAAAP%2B9%2F%2Bn%2Fmv%2Bl%2F5H%2FgQAAAAAAAAASABIAAAAAAAD%2F0gAA%2Fm0AAAAA%2F4n%2FygAAAAD%2Fu%2F%2FpAAAAAAAAAAAAAP%2FsAAAAAAAAAAD%2F2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD%2F2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2F90AAAAAAAD%2FeQAA%2F%2FUAAAAAAAAAAAAAAAAAAAAAAAAAAP%2FZAAAAAAAAAAAAAP%2FtAAAAAAAAAAD%2F7AAAABIAAAAAAAAAEAAAAAAAAAAA%2F4UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2F%2BwAAP%2FwAAAAAAAAAAD%2F8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP%2B6%2F%2BUAAAAAAAAAAAAAAAAAAAAAAAAAAP%2FzAAAAAAAAAAAAAP%2FoAAAAAP%2FzABkAAP8k%2F%2FX%2F7AAAAA8AAP%2FsAAAAAP%2FhAAAAAAAA%2Frz%2F5%2F%2FmAAD%2FyQAAAAD%2F2QAAAAD%2Fav%2FsAAAAAP%2FU%2F78AAP7k%2F9L%2FiP%2Fk%2F%2FUAAP%2FiAAAAAP%2FYAAAAAAAA%2Fx%2F%2F7AAA%2F9sAAAAAAAAAAAAAAAD%2FKv%2FiAAAAAgBgAAEAGAAAABsANwAYAD4APgA1AEAAQQA2AEMAVgA4AFgAXQBMAF8AbABSAHMAdABgAHcAdwBiAHkAeQBjAIgAlABkAJsAygBxAM0A0wChANgA6QCoAOwA8QC6APMA8wDAAQ4BFADBARYBIwDIASkBKwDWAS4BLgDZATABMQDaATMBNgDcAVcBVwDgAV0BaQDhAXEBcQDuAXMBdgDvAXgBewDzAX0BfQD3AYEBhgD4AYgBjAD%2BAY4BjgEDAZABkQEEAZMBlQEGAZcBmAEJAZwBngELAaQBpAEOAaYBpgEPAa0BrgEQAbABsAESAbIBsgETAbQBuAEUAbwBwAEZAccByAEeAcwBzAEgAc4B0AEhAdIB0gEkAdUB1QElAdoB2gEmAd4B4AEnAeIB4gEqAeUB5QErAfQB9AEsAfcB%2BQEtAfsB%2FgEwAgkCCQE0AgsCDAE1Ag4CEQE3AhcCGAE7AhoCGwE9Ah4CHgE%2FAicCJwFAAi8CMQFBAjUCNQFEAj8CPwFFAkECQQFGAkMCQwFHAkcCRwFIAkoCSwFJAlICUwFLAlUCWAFNAl0CXQFRAl8CYwFSAmUCZQFXAmcCaAFYAnYCgwFaAoUChQFoAocChwFpAokCigFqAowCjAFsAo8ClAFtApYClwFzApkCmQF1ApwCnAF2AqACoAF3AqYCpgF4AqgCqAF5AqoCqgF6ArkCuQF7Ar0CvQF8AucC6AF9AusC6wF%2FAvcC9wGAAwUDCwGBAxADEQGIA1EDUgGKA14DXgGMAAIAiwABABgAAQAbABsAHwAcACEADwAiACUAAwAmADcABABOAE8ACABQAFEADQBSAFYAFQBgAGwAAwBzAHQAAwB3AHcAAwB5AHkAIACIAIwAEACNAJQACACbAJ8ACACgAKAAIQChAKUAFgCmAKYADACnAK4ACQCvALIAFwCzAMoAAgDNAM0ADgDOANMAEQDYAOkABQDsAPAAGADxAPEACgDzAPMACgEOARQACgEWARYACgEXASMABgEpASsABgEuAS4ABgEwATEADgEzATYAHQFXAVcABwFdAV0AEgFeAWUABwFmAWkAHgFxAXEAAQFzAXMAHwF0AXYAEwF4AXoABAF7AXsADAGBAYIADQGGAYYAAwGIAYgAIAGJAYkADwGKAYoAEAGLAYwAGgGOAY4ADAGUAZUAGQGXAZgAGQGeAZ4ACAGkAaQAGQGmAaYAAQGtAa4AIQGwAbAAEwGyAbIADAG0AbcADQG8AbwADwG9Ab0AEAG%2BAb8ACQHAAcAADAHIAcgADAHPAdAAAQHSAdIABAHVAdUADAHaAdoAAwHeAeAAGgHiAeIAEwHlAeUADAH0AfQAAgH3AfkAGwH7Af0ABQH%2BAf4AEgIJAgkABgILAgsADgIMAgwAEQIOAg8ABwIQAhAADgIRAhEAEgIXAhgAHAIaAhsAHAIeAh4ADgInAicAHAIvAi8ABgIwAjEABwI1AjUAEgI%2FAj8AEQJBAkEABwJDAkMAEgJHAkcACgJLAksAEgJSAlMAAgJVAlcABQJYAlgAEgJdAl0ABgJfAl8ABgJgAmAADgJhAmMABwJlAmUAGwJnAmcAGwJoAmgAEgJ2AnYADgJ3AncAAQJ4AngAHwJ5AnkAEwJ6AnoAAQJ7AnsABAJ8AnwAFwJ%2BAn4AAwKAAoAADQKBAoEAAQKFAoUAAwKHAocAIAKJAokAEAKKAooACQKMAowADAKPAo8AAQKQApAABAKTApMAAwKUApQACQKXApcACQKZApkAAwKcApwABwKgAqAACgKmAqYABwKoAqgABgKqAqoADgK5ArkABgK9Ar0ACgLnAugAFALrAusAFAL3AvcAFAMFAwYAFAMHAwsACwMQAxEACwNRA1IACwNeA14ACwACAKoAAQAYAAQAHAAhAAIAOQA9AAIATgBPABsAYAB4AAIAewB7AAIAgACFABAAiACIAAsAigCMAAsAjQCUAAkAmwCfAAkAoACgABwAoQClABIApgCmAA0ApwCuAAoArwCyABMAswDKAAUAzgDUAAEA1gDWAAEA2ADYAAYA2QDpAAEA7ADwAAEA8QDxAB0A9AD0AAMBBQEFAB0BCAEIAB0BDgEUAAMBFgEWAAMBFwEjAAYBJAEoAAEBKQErAAYBLgEuAAYBLwEvAAEBMAEwAAMBMgEyAAEBNwE8AA8BRAFWAAcBVwFXAAgBXQFdAA4BXgFlAAgBZgFpABoBcQFxAAQBewF7AA0BgwGDABUBhgGGAAIBiQGJAAIBigGKAAsBiwGMABYBjgGOAA0BjwGPABcBlwGXABUBmgGaAAIBngGeABsBnwGfAAsBogGiAAsBowGjAAIBpgGmAAQBrAGsAAIBrQGuABwBrwGvAAIBsgGyAA0BtwG3AAsBuwG8AAIBvQG9AAsBvgG%2FAAoBwAHAAA0BwQHBAAsBwgHCABcByAHIAA0BygHKABUBzQHNABcBzwHQAAQB1QHVAA0B2gHcAAIB3gHgABYB4QHhABcB5QHlAA0B6AHoAAEB6wHrABUB7QHtAAIB8AHwABUB8QHxAAIB9AH0AAUB9wH4AAMB%2BwH9AAEB%2FgH%2BAA4CAAIFAAMCBgIGABgCBwIIAAMCCQIJAAYCCgILAAMCDAIMAAECDgIPAAgCEAIQAAECEQIRAA4CEgISABkCEwIVAAMCFwIXAAMCGgIaABgCGwIbAAMCHAIcAA8CHQIdAAECIwIjAAMCLwIvAAYCMAIxAAgCMgIyAAECNQI1AA4CNwI3AAMCOwI8AAMCPgI%2FAAECQQJBAAgCQwJDAA4CRQJFABkCSwJLAA4CTQJNABgCTgJPAAMCUAJQABkCUQJRAAMCUgJTAAUCVQJXAAECWAJYAA4CWwJcAAMCXQJdAAYCXgJeAAECXwJfAAYCYQJjAAgCZAJkABkCZQJnAAMCaAJoAA4CagJrAAECcAJwAAECcwJzABgCdAJ0AAECdwJ3AAQCegJ6AAQCfAJ8ABMCfgJ%2BAAICgQKBAAQChQKFAAICigKKAAoCjAKMAA0CjwKPAAQCkwKTAAIClAKUAAoClwKXAAoCmQKZAAICmgKaAAECnAKcAAgCoAKgAAMCpgKmAAgCqAKoAAYCqwKsAAECrgKuAAcCtgK4AAcCuQK5AAYCuwK7AAECvQK9AAMC5wLoABEC6wLrABEC9wL3ABEC%2FgMCABQDBQMGABEDBwMLAAwDEAMRAAwDUQNSAAwDXgNeAAwDpQOlAAIDpwOnAAIDqAOoAAEDqQOpAAIABAAAAAEACAABAAwALgAFAawCeAACAAUDYANkAAADZgNyAAUDdAN6ABIDiQOMABkDnQOkAB0AAgA%2FAAEAXQAAAF8A1ABdANYA6QDTAOsBFADnARYBaQERAXEBcQFlAXMBdQFmAXgBjAFpAY4BjwF%2BAZQBlgGAAZkBmQGDAZsBngGEAaABoQGIAaQBpAGKAa0BsAGLAbIBtAGPAbYBtgGSAbgBuAGTAbwBwAGUAcIBwgGZAcQByAGaAcoBygGfAcwB1gGgAdgB5gGrAfAB8AG6AfIB9AG7AfcB%2BAG%2BAfsCCQHAAgsCDwHPAhECEgHUAhkCGQHWAhwCHAHXAh4CJAHYAjACMwHfAjUCNwHjAjsCOwHmAj8CQwHnAkUCRQHsAkcCSwHtAk0CTQHyAk8CWQHzAlsCagH%2BAnICcwIOAnYCeQIQAnsCfQIUAn8CgAIXAoICgwIZAoUChQIbAocChwIcAokCigIdAowCjAIfAo4ClwIgApkCmgIqAp4CngIsAqACoAItAqICowIuAqYCpgIwAqgCqAIxAq4CrgIyArICvQIzAyYDJgI%2FAykDKQJAA5ADkAJBACUAACA%2BAAAgRAAAIEoAACBQAAAgVgAAIFwAACBcAAAgsAAAIGIAACBoAAAgbgAAIHQAACB6AAAggAAAIIYAAQCWAAIfcAACH3YAAh98AAIfggADAJwABACiAAQAqAAEAK4ABAC0AAAgjAABALoABADAAAQAxgAAILAAACCwAAAgkgAAIJgAACCeAAAgpAAAIKoAACCwAAEA5AQ6AAEBZwAAAAEBVgLlAAEC4AQEAAEBHQLyAAEBtQIZAAEAKAVgAAEBOwLwAAECUQLYAkIadAAAHXodgAAAGwQAAB16HYAAABsEAAAdeh2AAAAWlgAAHXodgAAAGwQAABauHYAAABaWAAAdeh2AAAAWnAAAHXodgAAAFqIAAB16HYAAABsEAAAdeh2AAAAWqAAAHXodgAAAGwQAABauHYAAABaoAAAdeh2AAAAbBAAAHXodgAAAFqgAAB16HYAAABsEAAAdeh2AAAAadAAAFq4dgAAAGwQAAB16HYAAABa0AAAdeh2AAAAbBAAAHXodgAAAGnQAAB16HYAAABa6AAAdeh2AAAAWwAAAHXodgAAAGnQAABbGHYAAABsEAAAdeh2AAAAbCgAAGxAAAAAAFswAABsQAAAAABzqAAAc8AAAAAAa5gAAFt4AAAAAFtgAABbeAAAAABbYAAAW3gAAAAAa5gAAFtIAAAAAFtgAABbeAAAAABbYAAAW3gAAAAAW5AAAFuoAABbwFuQAABbqAAAW8BbkAAAW6gAAFvAW5AAAFuoAABbwGnoAAB0CHQgAABsWAAAdAh0IAAAbFgAAHQIdCAAAGxYAAB0CHQgAABsWAAAdAh0IAAAW9gAAHQIdCAAAGxYAABb8HQgAABb2AAAdAh0IAAAbFgAAHQIdCAAAFvYAAB0CHQgAABsWAAAdAh0IAAAbFgAAHQIdCAAAGnoAABb8HQgAABsWAAAdAh0IAAAXAgAAHQIdCAAAGxYAAB0CHQgAABp6AAAdAh0IAAAbFgAAHQIdCAAAHlgAAB5eAAAeZBscAAAXDgAAAAAbIgAAFw4AAAAAGyIAABcOAAAAABscAAAXCAAAAAAbIgAAFw4AAAAAGvgAAB0aAAAdIBr4AAAdGgAAHSAXFAAAHRoAAB0gHDYAAB22HbwAAAAAAAAAAB28AAAXJgAAHbYdvAAAFyYAAB22HbwAABcmAAAdth28AAAXJgAAHbYdvAAAFyYAAB22HbwAABw2AAAXGh28AAAXJgAAHbYdvAAAFyAAAB22HbwAABcmAAAdth28AAAcNgAAHbYdvAAAFyYAAB22HbwAABqwAAAbOgAAAAAXLAAAGzoAAAAAHSYAAB0sAAAAAB0mAAAXMgAAAAAXRBdKF1AAABdWFzgXShdQAAAXVhdEF0oXUAAAF1YXRBdKFz4AABdWF0QXShdQAAAXVhdEF0oXUAAAF1YdMgAAHTgAAAAAF1wAAB04AAAAAB0%2BAAAdRAAAAAAXaAAAHUQAAAAAF2gAAB1EAAAAAB0%2BAAAXYgAAAAAXaAAAHUQAAAAAGowdyB3OHdQd2htGHcgdzh3UHdobRh3IHc4d1B3aG0YdyB3OHdQd2hd6Hcgdzh3UHdobRh3IF24d1B3aF3odyB3OHdQd2htGHcgdzh3UHdoXeh3IHc4d1B3aG0YdyB3OHdQd2hqMHcgXbh3UHdobRh3IHc4d1B3aF3QdyB3OHdQd2hqMHcgdzh3UHdobRh3IHc4d1B3aGowdyBduHdQd2htGHcgdzh3UHdoXdB3IHc4d1B3aG0YdyB3OHdQd2hd6Hcgdzh3UHdobRh3IHc4d1B3aGowdyB3OHdQd2htGHcgdzh3UHdobRh3IHc4d1B3aF4AAABeGAAAAAB1KAAAdUAAAAAAXjAAAF5IAAAAAF5gAABeeAAAAABewAAAXqgAAAAAXpAAAF6oAAAAAF6QAABeqAAAAABewAAAXtgAAAAAapAAAHfIAAAAAF8IAAB3yAAAAABfCAAAd8gAAAAAapAAAF7wAAAAAF8IAAB3yAAAAABqkAAAXyAAAAAAXzgAAF9QAAAAAGxwAABsoAAAAAB1WAAAdXAAAHWIdVgAAHVwAAB1iF9oAAB1cAAAdYh1WAAAX4AAAHWIdVgAAF%2BYAAB1iGBwYLhg0GDoAABgoGC4YNBg6AAAYKBguGDQYOgAAGCgYLhg0GDoAABgoGC4YNBg6AAAYHBguF%2BwYOgAAGCgYLhg0GDoAABfyGC4YNBg6AAAX%2BAAAGBAAAAAAGAoAABgQAAAAABf4AAAX%2FgAAAAAYCgAAGBAAAAAAGAQAABgQAAAAABgKAAAYEAAAAAAYFhguGDQYOgAAGCgYLhg0GDoAABgcGC4YNBg6AAAYIhguGDQYOgAAGCgYLhg0GDoAABhAAAAYRgAAAAAYTAAAGFgAAAAAGFIAABhYAAAAABhSAAAYWAAAAAAYUgAAGFgAAAAAGFIAABhYAAAAAB1oAAAdbgAAAAAa7AAAHcIAAAAAGGoAAB3CAAAAABhqAAAdwgAAAAAYagAAHcIAAAAAGuwAABheAAAAABhqAAAdwgAAAAAYZAAAHcIAAAAAGGoAAB3CAAAAAB0OAAAdFAAAAAAYcAAAHRQAAAAAGHAAAB0UAAAAABhwAAAdFAAAAAAblAAAHEgcTgAAHEIAABxIHE4AABxCAAAcSBxOAAAYdgAAHEgcTgAAHEIAABiOHE4AABh2AAAcSBxOAAAYfAAAHEgcTgAAGIIAABxIHE4AABxCAAAcSBxOAAAYiAAAHEgcTgAAHEIAABiOHE4AABiIAAAcSBxOAAAcQgAAHEgcTgAAGIgAABxIHE4AABxCAAAcSBxOAAAblAAAGI4cTgAAHEIAABxIHE4AABiUAAAcSBxOAAAcQgAAHEgcTgAAG5QAABxIHE4AABiaAAAcSBxOAAAYoAAAHEgcTgAAG5QAABimHE4AABxCAAAcSBxOAAAcVAAAHFoAAAAAGKwAABxaAAAAABiyAAAYuAAAAAAcHgAAGMoAAAAAGMQAABjKAAAAABjEAAAYygAAAAAcHgAAGL4AAAAAGMQAABjKAAAAABjEAAAYygAAAAAeQB5GHkwAAB5SHkAeRh5MAAAeUh5AHkYeTAAAHlIbmgAAHGYcbAAAHGAAABxmHGwAABxgAAAcZhxsAAAcYAAAHGYcbAAAHGAAABxmHGwAABjQAAAcZhxsAAAcYAAAGNYcbAAAGNAAABxmHGwAABxgAAAcZhxsAAAY0AAAHGYcbAAAHGAAABxmHGwAABxgAAAcZhxsAAAbmgAAGNYcbAAAHGAAABxmHGwAABjcAAAcZhxsAAAcYAAAHGYcbAAAG5oAABxmHGwAABxgAAAcZhxsAAAY4gAAGOgAAAAAGO4AABkAAAAAABj6AAAZAAAAAAAY%2BgAAGQAAAAAAGPQAABkAAAAAABj6AAAZAAAAAAAcKgAAG%2B4AABwwHCoAABvuAAAcMBkGAAAb7gAAHDAbygAAG9Yb3AAAG9AAABvWG9wAABvKAAAb1hvcAAAbygAAG9Yb3AAAG8oAABvWG9wAABvKAAAb1hvcAAAbygAAGQwb3AAAG8oAABvWG9wAABkSAAAb1hvcAAAAAAAAAAAb3AAAG8oAABvWG9wAABvKAAAb1hvcAAAbygAAG9Yb3AAAG%2BIAABvoAAAAABkYAAAb6AAAAAAb4gAAG%2BgAAAAAG%2BIAABvoAAAAABkwAAAZ0gAAAAAZMAAAGR4AAAAAHeAAAB3mAAAAABkwGfYZNgAAGTwZJBn2GTYAABk8GTAZ9hk2AAAZPBkwGfYZKgAAGTwZMBn2GTYAABk8GTAZ9hk2AAAZPBlCAAAZTgAAAAAZSAAAGU4AAAAAGVQAABlmAAAAABlgAAAZZgAAAAAZVAAAGWYAAAAAGWAAABlmAAAAABlUAAAZWgAAAAAZYAAAGWYAAAAAHgQeCh4QHhYeHByQHgoeEB4WHhwckB4KHhAeFh4cHJAeCh4QHhYeHBl4HgoeEB4WHhwckB4KGWweFh4cGXgeCh4QHhYeHByQHgoeEB4WHhwZeB4KHhAeFh4cHJAeCh4QHhYeHB4EHgoZbB4WHhwckB4KHhAeFh4cGXIeCh4QHhYeHB4EHgoeEB4WHhwckB4KHhAeFh4cHgQeChlsHhYeHByQHgoeEB4WHhwZch4KHhAeFh4cHJAeCh4QHhYeHBl4HgoeEB4WHhwckB4KHhAeFh4cHgQeCh4QHhYeHByQHgoeEB4WHhwckB4KHhAeFh4cGX4AABmEAAAAABzeAAAc5AAAAAAZigAAGZAAAAAAGZYAABmcAAAAABmuAAAZqAAAAAAZogAAGagAAAAAGaIAABmoAAAAABmuAAAZtAAAAAAbuAAAG74AAAAAGcAAABu%2BAAAAABnAAAAbvgAAAAAbuAAAGboAAAAAGcAAABu%2BAAAAABu4AAAZxgAAAAAZzAAAGdIAAAAAGdgAABneAAAAABnwGfYZ5AAAGgIZ8Bn2GeQAABoCGfAZ9hnkAAAaAhnwGfYZ6gAAGgIZ8Bn2GfwAABoCGhoaLBoyGjgAABomGiwaMho4AAAaJhosGjIaOAAAGiYaLBoyGjgAABomGiwaMho4AAAaGhosGggaOAAAGiYaLBoyGjgAABoOGiwaMho4AAAaGhosGjIaOAAAGiYaLBoyGjgAABoaGiwaCBo4AAAaJhosGjIaOAAAGg4aLBoyGjgAABomGiwaMho4AAAaFBosGjIaOAAAGiYaLBoyGjgAABoaGiwaMho4AAAaIBosGjIaOAAAGiYaLBoyGjgAAB3sAAAd8gAAAAAaPgAAGkoAAAAAGkQAABpKAAAAABpEAAAaSgAAAAAaRAAAGkoAAAAAGkQAABpKAAAAABzSAAAaUAAAAAAbrAAAHLQAAAAAHKgAABy0AAAAAByoAAActAAAAAAcqAAAHLQAAAAAG6wAABpWAAAAAByoAAActAAAAAAaXAAAHLQAAAAAHKgAABy0AAAAABpiAAAabgAAAAAaaAAAGm4AAAAAGmgAABpuAAAAABpoAAAabgAAAAAadAAAHXodgAAAHOoAABzwAAAAABz2AAAAAAAAHPwc9gAAAAAAABz8GnoAAB0CHQgAABsWAAAdAh0IAAAbFgAAHQIdCAAAGs4AAAAAAAAAABrUAAAbOgAAAAAbQAAAAAAAAAAAGoAAAAAAAAAAABqAAAAAAAAAAAAagAAAAAAAAAAAGtoAAAAAAAAa4BqGAAAAAAAAGuAAAAAAAAAAAAAAHTIAAAAAAAAAABr4AAAAAAAAHSAajB3IHc4d1B3aAAAAAAAAAAAAAB1KAAAdUAAAAAAa5gAAAAAAAAAAHVYAAAAAAAAdYhqSAAAAAAAAAAAbXgAAAAAAAAAAHWgAAAAAAAAbghr%2BAAAAAAAAAAAAAAAAAAAAABuIGpgAAAAAAAAAABqeAAAbdht8G4gapAAAHfIAAAAAGqoAAAAAAAAAABw2AAAdth28AAAcNgAAHbYdvAAAGrAAABs6AAAAABq2AAAAAAAAAAAavAAAAAAAAAAAAAAAAAAAAAAbiBrCAAAAAAAAAAAayAAAAAAAAAAAAAAdyAAAHdQd2hz2AAAAAAAAHPwazgAAAAAAAAAAGtQAABs6AAAAABraAAAAAAAAGuAa2gAAAAAAABrgGvgAAAAAAAAdIBrmAAAAAAAAAAAdVgAAAAAAAB1iGuwAAB3CAAAa8hrsAAAdwgAAGvIdaAAAAAAAABuCGv4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABw2AAAdth28AAAbLgAAAAAAAAAAAAAAAAAAAAAAABr4AAAAAAAAHSAa%2FgAAAAAAAAAAHTIAAAAAAAAAABsEAAAdeh2AAAAbBAAAHXodgAAAGwoAABsQAAAAABsWAAAdAh0IAAAbHAAAGygAAAAAGyIAABsoAAAAABsuAAAAAAAAAAAbNAAAGzoAAAAAG0AAAAAAAAAAABtAAAAAAAAAAAAbRh3IHc4d1B3aG0wAAAAAAAAAABtSAAAAAAAAAAAbWAAAAAAAAAAAG14AAAAAAAAAABteAAAAAAAAAAAbZAAAAAAAAAAAG2oAAAAAAAAAABz2AAAAAAAAHPwbcAAAG3YbfBuIHPYAAAAAAAAc%2FB1oAAAAAAAAG4IdaAAAAAAAABuCAAAAAAAAAAAAAAAAAAAAAAAAG4gbjgAAHeYAAAAAG5QAABxIHE4AABzGAAAAAAAAHMwccgAAAAAAABzMG5oAABxmHGwAABxgAAAcZhxsAAAcYAAAHGYcbAAAHAwAAAAAAAAAABwSAAAchAAAAAAboAAAAAAAAAAAHIoAAAAAAAAAAByKAAAAAAAAAAAcigAAAAAAAAAAHBgAAAAAAAAAABumAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeBB4KHhAeFh4cHN4AABzkAAAAABweAAAAAAAAAAAAAAAAAAAAAAAAG6wAABy0AAAAAByoAAActAAAAAAc0gAAAAAAABzYHDwAAAAAAAAAABuyAAAAAAAAAAAbuAAAG74AAAAAG8QAAAAAAAAAABvKAAAb1hvcAAAb0AAAG9Yb3AAAG%2BIAABvoAAAAABwqAAAb7gAAHDAb9AAAAAAAAAAAG%2FoAAAAAAAAAABwAAAAAAAAAAAAcBgAAAAAAAAAAAAAeCgAAHhYeHBzGAAAAAAAAHMwcDAAAAAAAAAAAHBIAAByEAAAAABwYAAAAAAAAAAAAAAAAAAAAAAAAHB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwkAAAAAAAAAAAcJBzSAAAAAAAAHNgcPAAAAAAAAAAAHCoAAAAAAAAcMAAAAAAAAAAAAAAAAAAAAAAAAAAAHDYAAB22HbwAABx4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABw8AAAAAAAAAAAAAAAAAAAAAAAAHEIAABxIHE4AABxCAAAcSBxOAAAcVAAAHFoAAAAAHGAAABxmHGwAABzGAAAAAAAAAAAccgAAAAAAAAAAHHgAAAAAAAAAABx%2BAAAchAAAAAAcigAAAAAAAAAAHIoAAAAAAAAAAByQHgoeEB4WHhwclgAAAAAAAAAAHJwAAAAAAAAAAByiAAAAAAAAAAAcqAAAHLQAAAAAHKgAABy0AAAAAByuAAActAAAAAAcugAAAAAAAAAAHMYAAAAAAAAczBzAAAAAAAAAAAAcxgAAAAAAABzMHNIAAAAAAAAc2BzSAAAAAAAAHNgeQB5GHkwAAB5SHjQAAAAAAAAAAAAAAAAAAAAAAAAc3gAAHOQAAAAAAAAAAB16HYAAABzqAAAc8AAAAAAc9gAAAAAAABz8AAAAAB0CHQgAAB0OAAAdFAAAAAAAAAAAHRoAAB0gAAAAAB22HbwAAB0mAAAdLAAAAAAdMgAAHTgAAAAAHT4AAB1EAAAAAAAAHcgdzh3UHdodSgAAHVAAAAAAHVYAAB1cAAAdYgAAAAAdwgAAAAAdaAAAHW4AAAAAAAAAAB10AAAAAAAAAAAdeh2AAAAAAAAAHYYdjAAAAAAAAB2SAAAdmAAAAAAdnh2kAAAAAB3IHc4d1B3aAAAAAB2qAAAAAAAAAAAdsAAAAAAAAAAAHbYdvAAAAAAAAB3CAAAAAAAAHcgdzh3UHdoeLgAAAAAAAAAAHjQAAAAAAAAAAB46AAAAAAAAAAAd%2BAAAAAAAAAAAHeAAAB3mAAAAAB3sAAAd8gAAAAAeBB4KHhAeFh4cHf4AAAAAAAAAAB4iAAAeKAAAAAAd%2BAAAAAAAAAAAHfgAAAAAAAAAAB34AAAAAAAAAAAd%2FgAAAAAAAAAAHf4AAAAAAAAAAB3%2BAAAAAAAAAAAeBB4KHhAeFh4cHiIAAB4oAAAAAB4uAAAAAAAAAAAeNAAAAAAAAAAAHjoAAAAAAAAAAB5AHkYeTAAAHlIeWAAAHl4AAB5kHmoAAAAAAAAAAAABAwIICQABAwIIKgABAwIIOAABAwIHPgABAv%2F%2BcgABAwIHPwABAwIHBAABAwIHcQABAv%2F99QABBIYG1gABAuP%2BTQABAsYG1gABAsYAAAABAqYFYAABAqYAAAABAX8C2wABAo0HPgABAo3%2BcgABAo0HPwABAqH91QABAqEAAAABAxUG1gABAVb%2BcgABAVYHPwABAVYG1gABA0MG1gABAu%2F91QABAWEG1gABAl391QABAWEFYAABBBkFsAABAl0AAAABAWkC8QABA98G1gABAxz91QABAxwG1gABAqT%2BcgABAqQHPwABAqQHPgABA%2FUFYAABA9IAAAABAVIFYAABAVIAAAABAqoFYAABAqoAAAABArUG1gABArUAAAABArUFYAABArX91QABAnj%2BTQABAlsG1gABAlv91QABAssFYAABAssAAAABAr8G1gABAtz%2BTQABAr%2F91QABAvn%2BcgABAvkHPwABAxQFYAABAwn%2BcgABAxQHPwABAxQG1gABAwkAAAABAvkHPgABAvkFYAABAvkHBAABAvkG1gABBd4FYAABAvkAAAABA4gAAAABAvIFYAABAvIAAAABBCkFYAABBCkG1gABBCkAAAABAtv%2BcgABAtsHPwABAtsG1gABAkkG1gABAhYG4wABAhYHBAABAhYHEgABAhYGGAABAif%2BcgABAhYGGQABAhYF3gABAhYGSwABAif99QABA3wFsAABAPYFsAABAksAAAABAkr%2BTQABAi0FsAABAi0AAAABAhgGGAABAhv%2BcgABAhgGGQABAeMFsAABAWsAAAABAkkEOgABAkkF7wABAkkFsAABAiv%2BYAABAT4HJgABAUj%2BcgABAUQGGQABARYEOgABAoT91QABAUcHJgABAUf91QABAUcFsAABAUcAAAABAUcC8QABA90EOgABA90FsAABA90AAAABAqMEOgABAqP91QABAqMFsAABAqMAAAABAjL%2BcgABAjIGGQABAjIGGAABA7kEOgABA68AAAABASwFsAABASv%2BYAABAjwEOgABA3X%2BYAABAcMFsAABAVUAAAABAcMEOgABAVX91QABAhz%2BTQABAf8FsAABAf%2F91QABAoQFsAABAoQAAAABAfsFsAABAUkAAAABAZwAAAABAbn%2BTQABATEE%2BQABAo0GGAABAZz91QABAUUCmwABAm%2F%2BcgABAl4GGQABAl4GGAABAl4EOgABAl4F3gABAl4FsAABBKkEOgABAm8AAAABBJ0AAAABA5AEOgABA5AFsAABA5AAAAABAloAAAABA1z%2BcgABAlQGGQABAgQEOgABAgQFsAABAgQAAAABAwIFYAABAo0FYAABAxYG1gABAtYG1gABAqQFYAABAp8FYAABAs0FYAABA7MFYAABAlsFYAABAjIFYAABA0MFYAABA%2BUFYAABAtwFYAABAswFYAABAswHPgABBAMFYAABAk4FYAABAtYFYAABAXUESAABAsYFYAABAtsFYAABAtcCHAABAxUFYAABAvsFYAABAwIG1gABBIYFYAABBEAAAAABAo0G1gABAqEFYAABAqEG1gABAq8AAAABBAMG1gABAk4G1gABAkkAAAABAxYFYAABAqQG1gABAsgFYAABAsgG1gABAjIG1gABAp8G1gABAp8HPgABAvsG1gABA7MG1gABBiUAAAABBysAAAABAwEC6AABAXQERAABAn8FYAABAhYEOgABAhgEOgABAsAEOgABAngFsAABAlQEOgABA2QEOgABAf8EOgABAf8AAAABAhcEOgABAUQFsAABAUQEOgABAUgAAAABAk4AAAABARYFsAABAO791QABApIAAAABA2IEOgABAosEOgABAlEEOgABAlEGGAABA1UEOgABAgwEOgABAngEOgABAi0EOgABAi4ASQABAT4FsAABAV8E0AABAVYFYAABApQEOgABAhYFsAABAicAAAABBB0AAAABA3wEOgABA3wAAAABAhgFsAABAhsAAAABA1UAAAABAhoFsAABA1UFsAABAgwFsAABAgwAAAABAsAFsAABAjIFsAABAksEOgABAksFsAABAhcFsAABAlQFsAABAlQGGAABA1wAAAABApQFsAABA2QFsAABAhoEOgABAXYCOAABAloEOgABAlYCKQABAlUEOgABAlUAAAABAp0FYAABAp0AAAABAogFYAABAXsC8QABAo0AAAABBKYAAAABAkkFYAABAlcAAAABAxUAAAABAxUEBAABAu8FYAABAu8AAAABA98FYAABA98AAAABAxwFYAABAxwAAAABAokFYAABAokAAAABAr8FYAABAr8AAAABAr8C2QABAv0FYAABAv0AAAABAqkAAAABAv8AAAABBbcAAAABA0wAAAABBWUAAAABA%2BgAAAABA%2BgEBAABAikAAAABAy8AAAABA60AAAABArAAAAABAVYAAAABAlwAAAABAtsAAAABA9kFYAABAqQAAAABA8AAAAABAqQC2AABAnUEOgABAn8AAAABAlsEOgABAlsAAAABATsEOgABAmQEOgABAjIEOgABA%2B0EOgABAjIAAAABAykAAAABAjICHQABA0gEOgABA0gAAAABAkEEOgABAiUEOgABAn8EOgABA1wFsAABBMYGGAABAmMAAAABA1cE0AABAnQFYAABAnQAAAABAX8BlwABAKUGSAAGABAAAQAKAAAAAQAMAAwAAQAYAEIAAQAEA3EDcgN0A3UABAAAABIAAAAYAAAAHgAAACQAAQCQAAAAAQD3AAAAAQC5AAAAAQCPAAAABAAKABAAFgAcAAEAkP5yAAEA9%2F31AAEAuf3VAAEArP5NAAYAEAABAAoAAQABAAwADAABACgBAgACAAQDYANkAAADZgNvAAUDiQOJAA8DnQOkABAAGAAAAGIAAABoAAAAbgAAAHQAAAB6AAAAgAAAAIAAAADUAAAAhgAAAIwAAACSAAAAmAAAAJ4AAACkAAAAqgAAALAAAADUAAAA1AAAALYAAAC8AAAAwgAAAMgAAADOAAAA1AABAWMEOgABAJAEOgABAU8EOgABAKEEOgABAUAEOgABAVsEOgABAPcEOgABAPMEOgABAYMEOgABAZEEOgABAJkEOgABAfUEOgABAKMEOgABAPIEOgABAWAEOgABAWIEOgABAV4EOgABAfsEOgABAV0EOgABAV8EOgAYADIAOAA%2BAEQASgBQAFAAVgBcAGIAaABuAHQAegCAAIYAjACMAJIAmACeAKQAqgCwAAEBYwWwAAEAkAWwAAEBTwWwAAEAoQWwAAEBQAYYAAEBWwWwAAEBXwWwAAEA9wXeAAEA8wZLAAEBgwWwAAEBkQWwAAEAmQYZAAEB9QYYAAEAowXvAAEA8gZLAAEBXwbjAAEBYAcEAAEBYgcSAAEBXgYYAAEB%2BwYYAAEBXQWwAAEBXwYYAAEAAAAKAHAA0AACREZMVAAObGF0bgASABoAAAAWAANDQVQgACRNT0wgADRST00gAEQAAP%2F%2FAAQAAAABAAIAAwAA%2F%2F8ABQAAAAEAAgADAAQAAP%2F%2FAAUAAAABAAIAAwAFAAD%2F%2FwAFAAAAAQACAAMABgAHY2NtcAAsZnJhYwA8bGlnYQBCbG51bQBIbG9jbABObG9jbABUbG9jbABaAAAABgAAAAMABgAHAAgACQAAAAEADwAAAAEAEAAAAAEAEQAAAAEADAAAAAEACwAAAAEACgASACYAwgDCAPgBOAE4AWYBZgGGAYYB5AHkAgYCSAJoAogC%2BAMgAAYAAAAEAA4AIABiAHQAAwAAAAEAJgABAD4AAQAAAAEAAwAAAAEAFAACABwALAABAAAAAgABAAIA9AEBAAIAAgNwA3MAAAN1A3oABAACAAMDYANkAAADZgNpAAUDawNvAAkAAwABAMwAAQDMAAAAAQAAAAEAAwABABIAAQC6AAAAAQAAAAIAAgADAAEAsgAAAXEB8wCyAncCmQE1AAEAAAABAAgAAgAYAAkA9QECA4kDigOLA4wDjgORA5MAAQAJAPQBAQNqA3ADeQN6A40DkAOSAAYAAAACAAoAHAADAAAAAQBSAAEAJAABAAAABAADAAEAEgABAEAAAAABAAAABQABAAcDiQOKA4sDjAOOA5EDkwABAAAAAQAIAAIAFAAHA4kDigOLA4wDjgORA5MAAQAHA2oDcAN5A3oDjQOQA5IABAAAAAEACAABABIAAQAIAAEABANqAAIDYwABAAEDaQAEAAAAAQAIAAEATgACAAoALAAEAAoAEAAWABwDoQACA2MDogACA2IDowACA20DpAACA2sABAAKABAAFgAcA50AAgNjA54AAgNiA58AAgNtA6AAAgNrAAEAAgNmA2gAAQAAAAEACAACAA4ABACFAIwBPAFDAAEABACDAIsBOgFCAAYAAAABAAgAAQAKAAIAEgAmAAEAAgBSAQgAAQAEAAAAAgLwAAEAUgABAAAADgABAAQAAAACAvAAAQEIAAEAAAANAAQAAAABAAgAAQASAAEACAABAAQBDAACAvAAAQABAQgABAAAAAEACAABABIAAQAIAAEABABWAAIC8AABAAEAUgAEAAAAAQAIAAEAXAAEAA4ALgBEAFAAAwAIABAAGALjAAMC9QLIAuEAAwL1AsQC4AADAvUCwgACAAYADgLkAAMC9QLIAuIAAwL1AsQAAQAEAuUAAwL1AsgAAQAEAuYAAwL1AsgAAQAEAsECwwLFAscABAAAAAEACAABABoAAQAIAAIABgAMAWoAAgD0AWsAAgEIAAEAAQDrAAEAAAABAAgAAQAGAAoAAgABAsACyQAAAAEAAQAIAAEAAAAUAAEAAAAcAAJ3Z2h0AQAAAAACAAMAAAACAQQBkAAAArwAAAAA%29%20format%28%27truetype%27%29%3B%0A%7D%0A" rel="stylesheet">
<style type="text/css">body {font-family: 'Roboto Slab', serif;}</style>

<title>Claire Benard</title>


      <script src="data:application/javascript;base64,Ly8gUGFuZG9jIDIuOSBhZGRzIGF0dHJpYnV0ZXMgb24gYm90aCBoZWFkZXIgYW5kIGRpdi4gV2UgcmVtb3ZlIHRoZSBmb3JtZXIgKHRvCi8vIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgYmVoYXZpb3Igb2YgUGFuZG9jIDwgMi44KS4KZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKGUpIHsKICB2YXIgaHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJkaXYuc2VjdGlvbltjbGFzcyo9J2xldmVsJ10gPiA6Zmlyc3QtY2hpbGQiKTsKICB2YXIgaSwgaCwgYTsKICBmb3IgKGkgPSAwOyBpIDwgaHMubGVuZ3RoOyBpKyspIHsKICAgIGggPSBoc1tpXTsKICAgIGlmICghL15oWzEtNl0kL2kudGVzdChoLnRhZ05hbWUpKSBjb250aW51ZTsgIC8vIGl0IHNob3VsZCBiZSBhIGhlYWRlciBoMS1oNgogICAgYSA9IGguYXR0cmlidXRlczsKICAgIHdoaWxlIChhLmxlbmd0aCA+IDApIGgucmVtb3ZlQXR0cmlidXRlKGFbMF0ubmFtZSk7CiAgfQp9KTsK"></script>
      <script src="data:application/javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gdHJ5RXZhbCh0YXNrKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gQXR0ZW1wdCBldmFsKCkgYm90aCB3aXRoIGFuZCB3aXRob3V0IGVuY2xvc2luZyBpbiBwYXJlbnRoZXNlcy4KICAvLyBOb3RlIHRoYXQgZW5jbG9zaW5nIGNvZXJjZXMgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpbnRvCiAgLy8gYW4gZXhwcmVzc2lvbiB0aGF0IGV2YWwoKSBjYW4gcGFyc2UKICAvLyAob3RoZXJ3aXNlLCBhIFN5bnRheEVycm9yIGlzIHRocm93bikKICBmdW5jdGlvbiB0cnlFdmFsKGNvZGUpIHsKICAgIHZhciByZXN1bHQgPSBudWxsOwogICAgdHJ5IHsKICAgICAgcmVzdWx0ID0gZXZhbCgiKCIgKyBjb2RlICsgIikiKTsKICAgIH0gY2F0Y2goZXJyb3IpIHsKICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikpIHsKICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIHJlc3VsdCA9IGV2YWwoY29kZSk7CiAgICAgIH0gY2F0Y2goZSkgewogICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHsKICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGZ1bmN0aW9uIGluaXRTaXppbmcoZWwpIHsKICAgIHZhciBzaXppbmcgPSBzaXppbmdQb2xpY3koZWwpOwogICAgaWYgKCFzaXppbmcpCiAgICAgIHJldHVybjsKCiAgICB2YXIgY2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImh0bWx3aWRnZXRfY29udGFpbmVyIik7CiAgICBpZiAoIWNlbCkKICAgICAgcmV0dXJuOwoKICAgIGlmICh0eXBlb2Yoc2l6aW5nLnBhZGRpbmcpICE9PSAidW5kZWZpbmVkIikgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm1hcmdpbiA9ICIwIjsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nID0gcGFkZGluZ1RvQ3NzKHVucGFja1BhZGRpbmcoc2l6aW5nLnBhZGRpbmcpKTsKICAgIH0KCiAgICBpZiAoc2l6aW5nLmZpbGwpIHsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICBpZiAoY2VsKSB7CiAgICAgICAgY2VsLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICAgICB2YXIgcGFkID0gdW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZyk7CiAgICAgICAgY2VsLnN0eWxlLnRvcCA9IHBhZC50b3AgKyAicHgiOwogICAgICAgIGNlbC5zdHlsZS5yaWdodCA9IHBhZC5yaWdodCArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLmJvdHRvbSA9IHBhZC5ib3R0b20gKyAicHgiOwogICAgICAgIGNlbC5zdHlsZS5sZWZ0ID0gcGFkLmxlZnQgKyAicHgiOwogICAgICAgIGVsLnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgICAgIGVsLnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKICAgICAgfQoKICAgICAgcmV0dXJuIHsKICAgICAgICBnZXRXaWR0aDogZnVuY3Rpb24oKSB7IHJldHVybiBjZWwub2Zmc2V0V2lkdGg7IH0sCiAgICAgICAgZ2V0SGVpZ2h0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRIZWlnaHQ7IH0KICAgICAgfTsKCiAgICB9IGVsc2UgewogICAgICBlbC5zdHlsZS53aWR0aCA9IHB4KHNpemluZy53aWR0aCk7CiAgICAgIGVsLnN0eWxlLmhlaWdodCA9IHB4KHNpemluZy5oZWlnaHQpOwoKICAgICAgcmV0dXJuIHsKICAgICAgICBnZXRXaWR0aDogZnVuY3Rpb24oKSB7IHJldHVybiBlbC5vZmZzZXRXaWR0aDsgfSwKICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZWwub2Zmc2V0SGVpZ2h0OyB9CiAgICAgIH07CiAgICB9CiAgfQoKICAvLyBEZWZhdWx0IGltcGxlbWVudGF0aW9ucyBmb3IgbWV0aG9kcwogIHZhciBkZWZhdWx0cyA9IHsKICAgIGZpbmQ6IGZ1bmN0aW9uKHNjb3BlKSB7CiAgICAgIHJldHVybiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCAiLiIgKyB0aGlzLm5hbWUpOwogICAgfSwKICAgIHJlbmRlckVycm9yOiBmdW5jdGlvbihlbCwgZXJyKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKCiAgICAgIHRoaXMuY2xlYXJFcnJvcihlbCk7CgogICAgICAvLyBBZGQgYWxsIHRoZXNlIGVycm9yIGNsYXNzZXMsIGFzIFNoaW55IGRvZXMKICAgICAgdmFyIGVyckNsYXNzID0gInNoaW55LW91dHB1dC1lcnJvciI7CiAgICAgIGlmIChlcnIudHlwZSAhPT0gbnVsbCkgewogICAgICAgIC8vIHVzZSB0aGUgY2xhc3NlcyBvZiB0aGUgZXJyb3IgY29uZGl0aW9uIGFzIENTUyBjbGFzcyBuYW1lcwogICAgICAgIGVyckNsYXNzID0gZXJyQ2xhc3MgKyAiICIgKyAkLm1hcChhc0FycmF5KGVyci50eXBlKSwgZnVuY3Rpb24odHlwZSkgewogICAgICAgICAgcmV0dXJuIGVyckNsYXNzICsgIi0iICsgdHlwZTsKICAgICAgICB9KS5qb2luKCIgIik7CiAgICAgIH0KICAgICAgZXJyQ2xhc3MgPSBlcnJDbGFzcyArICIgaHRtbHdpZGdldHMtZXJyb3IiOwoKICAgICAgLy8gSXMgZWwgaW5saW5lIG9yIGJsb2NrPyBJZiBpbmxpbmUgb3IgaW5saW5lLWJsb2NrLCBqdXN0IGRpc3BsYXk6bm9uZSBpdAogICAgICAvLyBhbmQgYWRkIGFuIGlubGluZSBlcnJvci4KICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuY3NzKCJkaXNwbGF5Iik7CiAgICAgICRlbC5kYXRhKCJyZXN0b3JlLWRpc3BsYXktbW9kZSIsIGRpc3BsYXkpOwoKICAgICAgaWYgKGRpc3BsYXkgPT09ICJpbmxpbmUiIHx8IGRpc3BsYXkgPT09ICJpbmxpbmUtYmxvY2siKSB7CiAgICAgICAgJGVsLmhpZGUoKTsKICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICIiKSB7CiAgICAgICAgICB2YXIgZXJyb3JTcGFuID0gJCgiPHNwYW4+IikuYWRkQ2xhc3MoZXJyQ2xhc3MpOwogICAgICAgICAgZXJyb3JTcGFuLnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yU3Bhbik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpIHsKICAgICAgICAvLyBJZiBibG9jaywgYWRkIGFuIGVycm9yIGp1c3QgYWZ0ZXIgdGhlIGVsLCBzZXQgdmlzaWJpbGl0eTpub25lIG9uIHRoZQogICAgICAgIC8vIGVsLCBhbmQgcG9zaXRpb24gdGhlIGVycm9yIHRvIGJlIG9uIHRvcCBvZiB0aGUgZWwuCiAgICAgICAgLy8gTWFyayBpdCB3aXRoIGEgdW5pcXVlIElEIGFuZCBDU1MgY2xhc3Mgc28gd2UgY2FuIHJlbW92ZSBpdCBsYXRlci4KICAgICAgICAkZWwuY3NzKCJ2aXNpYmlsaXR5IiwgImhpZGRlbiIpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvckRpdiA9ICQoIjxkaXY+IikuYWRkQ2xhc3MoZXJyQ2xhc3MpLmNzcygicG9zaXRpb24iLCAiYWJzb2x1dGUiKQogICAgICAgICAgICAuY3NzKCJ0b3AiLCBlbC5vZmZzZXRUb3ApCiAgICAgICAgICAgIC5jc3MoImxlZnQiLCBlbC5vZmZzZXRMZWZ0KQogICAgICAgICAgICAvLyBzZXR0aW5nIHdpZHRoIGNhbiBwdXNoIG91dCB0aGUgcGFnZSBzaXplLCBmb3JjaW5nIG90aGVyd2lzZQogICAgICAgICAgICAvLyB1bm5lY2Vzc2FyeSBzY3JvbGxiYXJzIHRvIGFwcGVhciBhbmQgbWFraW5nIGl0IGltcG9zc2libGUgZm9yCiAgICAgICAgICAgIC8vIHRoZSBlbGVtZW50IHRvIHNocmluazsgc28gdXNlIG1heC13aWR0aCBpbnN0ZWFkCiAgICAgICAgICAgIC5jc3MoIm1heFdpZHRoIiwgZWwub2Zmc2V0V2lkdGgpCiAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICBlcnJvckRpdi50ZXh0KGVyci5tZXNzYWdlKTsKICAgICAgICAgICRlbC5hZnRlcihlcnJvckRpdik7CgogICAgICAgICAgLy8gUmVhbGx5IGR1bWIgd2F5IHRvIGtlZXAgdGhlIHNpemUvcG9zaXRpb24gb2YgdGhlIGVycm9yIGluIHN5bmMgd2l0aAogICAgICAgICAgLy8gdGhlIHBhcmVudCBlbGVtZW50IGFzIHRoZSB3aW5kb3cgaXMgcmVzaXplZCBvciB3aGF0ZXZlci4KICAgICAgICAgIHZhciBpbnRJZCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAoIWVycm9yRGl2WzBdLnBhcmVudEVsZW1lbnQpIHsKICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludElkKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXJyb3JEaXYKICAgICAgICAgICAgICAuY3NzKCJ0b3AiLCBlbC5vZmZzZXRUb3ApCiAgICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgICAuY3NzKCJoZWlnaHQiLCBlbC5vZmZzZXRIZWlnaHQpOwogICAgICAgICAgfSwgNTAwKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBjbGVhckVycm9yOiBmdW5jdGlvbihlbCkgewogICAgICB2YXIgJGVsID0gJChlbCk7CiAgICAgIHZhciBkaXNwbGF5ID0gJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIik7CiAgICAgICRlbC5kYXRhKCJyZXN0b3JlLWRpc3BsYXktbW9kZSIsIG51bGwpOwoKICAgICAgaWYgKGRpc3BsYXkgPT09ICJpbmxpbmUiIHx8IGRpc3BsYXkgPT09ICJpbmxpbmUtYmxvY2siKSB7CiAgICAgICAgaWYgKGRpc3BsYXkpCiAgICAgICAgICAkZWwuY3NzKCJkaXNwbGF5IiwgZGlzcGxheSk7CiAgICAgICAgJChlbC5uZXh0U2libGluZykuZmlsdGVyKCIuaHRtbHdpZGdldHMtZXJyb3IiKS5yZW1vdmUoKTsKICAgICAgfSBlbHNlIGlmIChkaXNwbGF5ID09PSAiYmxvY2siKXsKICAgICAgICAkZWwuY3NzKCJ2aXNpYmlsaXR5IiwgImluaGVyaXQiKTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9CiAgICB9LAogICAgc2l6aW5nOiB7fQogIH07CgogIC8vIENhbGxlZCBieSB3aWRnZXQgYmluZGluZ3MgdG8gcmVnaXN0ZXIgYSBuZXcgdHlwZSBvZiB3aWRnZXQuIFRoZSBkZWZpbml0aW9uCiAgLy8gb2JqZWN0IGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKICAvLyAtIG5hbWUgKHJlcXVpcmVkKSAtIEEgc3RyaW5nIGluZGljYXRpbmcgdGhlIGJpbmRpbmcgbmFtZSwgd2hpY2ggd2lsbCBiZQogIC8vICAgdXNlZCBieSBkZWZhdWx0IGFzIHRoZSBDU1MgY2xhc3NuYW1lIHRvIGxvb2sgZm9yLgogIC8vIC0gaW5pdGlhbGl6ZSAob3B0aW9uYWwpIC0gQSBmdW5jdGlvbihlbCkgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbmNlIHBlcgogIC8vICAgd2lkZ2V0IGVsZW1lbnQ7IGlmIGEgdmFsdWUgaXMgcmV0dXJuZWQsIGl0IHdpbGwgYmUgcGFzc2VkIGFzIHRoZSB0aGlyZAogIC8vICAgdmFsdWUgdG8gcmVuZGVyVmFsdWUuCiAgLy8gLSByZW5kZXJWYWx1ZSAocmVxdWlyZWQpIC0gQSBmdW5jdGlvbihlbCwgZGF0YSwgaW5pdFZhbHVlKSB0aGF0IHdpbGwgYmUKICAvLyAgIGNhbGxlZCB3aXRoIGRhdGEuIFN0YXRpYyBjb250ZXh0cyB3aWxsIGNhdXNlIHRoaXMgdG8gYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICBlbGVtZW50OyBTaGlueSBhcHBzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgcGVyCiAgLy8gICBlbGVtZW50LCBhcyB0aGUgZGF0YSBjaGFuZ2VzLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXQgPSBmdW5jdGlvbihkZWZpbml0aW9uKSB7CiAgICBpZiAoIWRlZmluaXRpb24ubmFtZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldpZGdldCBtdXN0IGhhdmUgYSBuYW1lIik7CiAgICB9CiAgICBpZiAoIWRlZmluaXRpb24udHlwZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldpZGdldCBtdXN0IGhhdmUgYSB0eXBlIik7CiAgICB9CiAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IG91dHB1dCB3aWRnZXRzCiAgICBpZiAoZGVmaW5pdGlvbi50eXBlICE9PSAib3V0cHV0IikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB3aWRnZXQgdHlwZSAnIiArIGRlZmluaXRpb24udHlwZSArICInIik7CiAgICB9CiAgICAvLyBUT0RPOiBWZXJpZnkgdGhhdCAubmFtZSBpcyBhIHZhbGlkIENTUyBjbGFzc25hbWUKCiAgICAvLyBTdXBwb3J0IG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9ucy4gT2xkLXN0eWxlIGNsYXNzLWJvdW5kCiAgICAvLyBkZWZpbml0aW9ucyBoYXZlIG9uZSB3aWRnZXQgIm9iamVjdCIgcGVyIHdpZGdldCBwZXIgdHlwZS9jbGFzcyBvZgogICAgLy8gd2lkZ2V0OyB0aGUgcmVuZGVyVmFsdWUgYW5kIHJlc2l6ZSBtZXRob2RzIG9uIHN1Y2ggd2lkZ2V0IG9iamVjdHMKICAgIC8vIHRha2UgZWwgYW5kIGluc3RhbmNlIGFyZ3VtZW50cywgYmVjYXVzZSB0aGUgd2lkZ2V0IG9iamVjdCBjYW4ndAogICAgLy8gc3RvcmUgdGhlbS4gTmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb25zIGhhdmUgb25lIHdpZGdldAogICAgLy8gb2JqZWN0IHBlciB3aWRnZXQgaW5zdGFuY2U7IHRoZSBkZWZpbml0aW9uIHRoYXQncyBwYXNzZWQgaW4gZG9lc24ndAogICAgLy8gcHJvdmlkZSByZW5kZXJWYWx1ZSBvciByZXNpemUgbWV0aG9kcyBhdCBhbGwsIGp1c3QgdGhlIHNpbmdsZSBtZXRob2QKICAgIC8vICAgZmFjdG9yeShlbCwgd2lkdGgsIGhlaWdodCkKICAgIC8vIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IHRoYXQgaGFzIHJlbmRlclZhbHVlKHgpIGFuZCByZXNpemUodywgaCkuCiAgICAvLyBUaGlzIGVuYWJsZXMgYSBmYXIgbW9yZSBuYXR1cmFsIHByb2dyYW1taW5nIHN0eWxlIGZvciB0aGUgd2lkZ2V0CiAgICAvLyBhdXRob3IsIHdobyBjYW4gc3RvcmUgcGVyLWluc3RhbmNlIHN0YXRlIHVzaW5nIGVpdGhlciBPTy1zdHlsZQogICAgLy8gaW5zdGFuY2UgZmllbGRzIG9yIGZ1bmN0aW9uYWwtc3R5bGUgY2xvc3VyZSB2YXJpYWJsZXMgKEkgZ3Vlc3MgdGhpcwogICAgLy8gaXMgaW4gY29udHJhc3QgdG8gd2hhdCBjYW4gb25seSBiZSBjYWxsZWQgQy1zdHlsZSBwc2V1ZG8tT08gd2hpY2ggaXMKICAgIC8vIHdoYXQgd2UgcmVxdWlyZWQgYmVmb3JlKS4KICAgIGlmIChkZWZpbml0aW9uLmZhY3RvcnkpIHsKICAgICAgZGVmaW5pdGlvbiA9IGNyZWF0ZUxlZ2FjeURlZmluaXRpb25BZGFwdGVyKGRlZmluaXRpb24pOwogICAgfQoKICAgIGlmICghZGVmaW5pdGlvbi5yZW5kZXJWYWx1ZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldpZGdldCBtdXN0IGhhdmUgYSByZW5kZXJWYWx1ZSBmdW5jdGlvbiIpOwogICAgfQoKICAgIC8vIEZvciBzdGF0aWMgcmVuZGVyaW5nIChub24tU2hpbnkpLCB1c2UgYSBzaW1wbGUgd2lkZ2V0IHJlZ2lzdHJhdGlvbgogICAgLy8gc2NoZW1lLiBXZSBhbHNvIHVzZSB0aGlzIHNjaGVtZSBmb3IgU2hpbnkgYXBwcy9kb2N1bWVudHMgdGhhdCBhbHNvCiAgICAvLyBjb250YWluIHN0YXRpYyB3aWRnZXRzLgogICAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgPSB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyB8fCBbXTsKICAgIC8vIE1lcmdlIGRlZmF1bHRzIGludG8gdGhlIGRlZmluaXRpb247IGRvbid0IG11dGF0ZSB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbi4KICAgIHZhciBzdGF0aWNCaW5kaW5nID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgZGVmaW5pdGlvbik7CiAgICBvdmVycmlkZU1ldGhvZChzdGF0aWNCaW5kaW5nLCAiZmluZCIsIGZ1bmN0aW9uKHN1cGVyZnVuYykgewogICAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IHN1cGVyZnVuYyhzY29wZSk7CiAgICAgICAgLy8gRmlsdGVyIG91dCBTaGlueSBvdXRwdXRzLCB3ZSBvbmx5IHdhbnQgdGhlIHN0YXRpYyBraW5kCiAgICAgICAgcmV0dXJuIGZpbHRlckJ5Q2xhc3MocmVzdWx0cywgImh0bWwtd2lkZ2V0LW91dHB1dCIsIGZhbHNlKTsKICAgICAgfTsKICAgIH0pOwogICAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMucHVzaChzdGF0aWNCaW5kaW5nKTsKCiAgICBpZiAoc2hpbnlNb2RlKSB7CiAgICAgIC8vIFNoaW55IGlzIHJ1bm5pbmcuIFJlZ2lzdGVyIHRoZSBkZWZpbml0aW9uIHdpdGggYW4gb3V0cHV0IGJpbmRpbmcuCiAgICAgIC8vIFRoZSBkZWZpbml0aW9uIGl0c2VsZiB3aWxsIG5vdCBiZSB0aGUgb3V0cHV0IGJpbmRpbmcsIGluc3RlYWQKICAgICAgLy8gd2Ugd2lsbCBtYWtlIGFuIG91dHB1dCBiaW5kaW5nIG9iamVjdCB0aGF0IGRlbGVnYXRlcyB0byB0aGUKICAgICAgLy8gZGVmaW5pdGlvbi4gVGhpcyBpcyBiZWNhdXNlIHdlIGZvb2xpc2hseSB1c2VkIHRoZSBzYW1lIG1ldGhvZAogICAgICAvLyBuYW1lIChyZW5kZXJWYWx1ZSkgZm9yIGh0bWx3aWRnZXRzIGRlZmluaXRpb24gYW5kIFNoaW55IGJpbmRpbmdzCiAgICAgIC8vIGJ1dCB0aGV5IGFjdHVhbGx5IGhhdmUgcXVpdGUgZGlmZmVyZW50IHNlbWFudGljcyAodGhlIFNoaW55CiAgICAgIC8vIGJpbmRpbmdzIHJlY2VpdmUgZGF0YSB0aGF0IGluY2x1ZGVzIGxvdHMgb2YgbWV0YWRhdGEgdGhhdCBpdAogICAgICAvLyBzdHJpcHMgb2ZmIGJlZm9yZSBjYWxsaW5nIGh0bWx3aWRnZXRzIHJlbmRlclZhbHVlKS4gV2UgY2FuJ3QKICAgICAgLy8ganVzdCBpZ25vcmUgdGhlIGRpZmZlcmVuY2UgYmVjYXVzZSBpbiBzb21lIHdpZGdldHMgaXQncyBoZWxwZnVsCiAgICAgIC8vIHRvIGNhbGwgdGhpcy5yZW5kZXJWYWx1ZSgpIGZyb20gaW5zaWRlIG9mIHJlc2l6ZSgpLCBhbmQgaWYKICAgICAgLy8gd2UncmUgbm90IGRlbGVnYXRpbmcsIHRoZW4gdGhhdCBjYWxsIHdpbGwgZ28gdG8gdGhlIFNoaW55CiAgICAgIC8vIHZlcnNpb24gaW5zdGVhZCBvZiB0aGUgaHRtbHdpZGdldHMgdmVyc2lvbi4KCiAgICAgIC8vIE1lcmdlIGRlZmF1bHRzIHdpdGggZGVmaW5pdGlvbiwgd2l0aG91dCBtdXRhdGluZyBlaXRoZXIuCiAgICAgIHZhciBiaW5kaW5nRGVmID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgZGVmaW5pdGlvbik7CgogICAgICAvLyBUaGlzIG9iamVjdCB3aWxsIGJlIG91ciBhY3R1YWwgU2hpbnkgYmluZGluZy4KICAgICAgdmFyIHNoaW55QmluZGluZyA9IG5ldyBTaGlueS5PdXRwdXRCaW5kaW5nKCk7CgogICAgICAvLyBXaXRoIGEgZmV3IGV4Y2VwdGlvbnMsIHdlJ2xsIHdhbnQgdG8gc2ltcGx5IHVzZSB0aGUgYmluZGluZ0RlZidzCiAgICAgIC8vIHZlcnNpb24gb2YgbWV0aG9kcyBpZiB0aGV5IGFyZSBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KICAgICAgLy8gU2hpbnkncyBkZWZhdWx0cy4gTk9URTogSWYgU2hpbnkncyBvdXRwdXQgYmluZGluZ3MgZ2FpbiBhZGRpdGlvbmFsCiAgICAgIC8vIG1ldGhvZHMgaW4gdGhlIGZ1dHVyZSwgYW5kIHdlIHdhbnQgdGhlbSB0byBiZSBvdmVycmlkZWFibGUgYnkKICAgICAgLy8gSFRNTFdpZGdldCBiaW5kaW5nIGRlZmluaXRpb25zLCB0aGVuIHdlJ2xsIG5lZWQgdG8gYWRkIHRoZW0gdG8gdGhpcwogICAgICAvLyBsaXN0LgogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJnZXRJZCIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJvblZhbHVlQ2hhbmdlIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgIm9uVmFsdWVFcnJvciIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJyZW5kZXJFcnJvciIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJjbGVhckVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgInNob3dQcm9ncmVzcyIpOwoKICAgICAgLy8gVGhlIGZpbmQsIHJlbmRlclZhbHVlLCBhbmQgcmVzaXplIGFyZSBoYW5kbGVkIGRpZmZlcmVudGx5LCBiZWNhdXNlIHdlCiAgICAgIC8vIHdhbnQgdG8gYWN0dWFsbHkgZGVjb3JhdGUgdGhlIGJlaGF2aW9yIG9mIHRoZSBiaW5kaW5nRGVmIG1ldGhvZHMuCgogICAgICBzaGlueUJpbmRpbmcuZmluZCA9IGZ1bmN0aW9uKHNjb3BlKSB7CiAgICAgICAgdmFyIHJlc3VsdHMgPSBiaW5kaW5nRGVmLmZpbmQoc2NvcGUpOwoKICAgICAgICAvLyBPbmx5IHJldHVybiBlbGVtZW50cyB0aGF0IGFyZSBTaGlueSBvdXRwdXRzLCBub3Qgc3RhdGljIG9uZXMKICAgICAgICB2YXIgZHluYW1pY1Jlc3VsdHMgPSByZXN1bHRzLmZpbHRlcigiLmh0bWwtd2lkZ2V0LW91dHB1dCIpOwoKICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgd2hhdGV2ZXIgY2F1c2VkIFNoaW55IHRvIHRoaW5rIHRoZXJlIG1pZ2h0IGJlCiAgICAgICAgLy8gbmV3IGR5bmFtaWMgb3V0cHV0cywgYWxzbyBjYXVzZWQgdGhlcmUgdG8gYmUgbmV3IHN0YXRpYyBvdXRwdXRzLgogICAgICAgIC8vIFNpbmNlIHRoZXJlIG1pZ2h0IGJlIGxvdHMgb2YgZGlmZmVyZW50IGh0bWx3aWRnZXRzIGJpbmRpbmdzLCB3ZQogICAgICAgIC8vIHNjaGVkdWxlIGV4ZWN1dGlvbiBmb3IgbGF0ZXItLW5vIG5lZWQgdG8gc3RhdGljUmVuZGVyIG11bHRpcGxlCiAgICAgICAgLy8gdGltZXMuCiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoICE9PSBkeW5hbWljUmVzdWx0cy5sZW5ndGgpCiAgICAgICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlcigpOwoKICAgICAgICByZXR1cm4gZHluYW1pY1Jlc3VsdHM7CiAgICAgIH07CgogICAgICAvLyBXcmFwIHJlbmRlclZhbHVlIHRvIGhhbmRsZSBpbml0aWFsaXphdGlvbiwgd2hpY2ggdW5mb3J0dW5hdGVseSBpc24ndAogICAgICAvLyBzdXBwb3J0ZWQgbmF0aXZlbHkgYnkgU2hpbnkgYXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLgoKICAgICAgc2hpbnlCaW5kaW5nLnJlbmRlclZhbHVlID0gZnVuY3Rpb24oZWwsIGRhdGEpIHsKICAgICAgICBTaGlueS5yZW5kZXJEZXBlbmRlbmNpZXMoZGF0YS5kZXBzKTsKICAgICAgICAvLyBSZXNvbHZlIHN0cmluZ3MgbWFya2VkIGFzIGphdmFzY3JpcHQgbGl0ZXJhbHMgdG8gb2JqZWN0cwogICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGRhdGEuZXZhbHMgJiYgaSA8IGRhdGEuZXZhbHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlcihkYXRhLngsIGRhdGEuZXZhbHNbaV0pOwogICAgICAgIH0KICAgICAgICBpZiAoIWJpbmRpbmdEZWYucmVuZGVyT25OdWxsVmFsdWUpIHsKICAgICAgICAgIGlmIChkYXRhLnggPT09IG51bGwpIHsKICAgICAgICAgICAgZWwuc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImluaGVyaXQiOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIWVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiKSkgewogICAgICAgICAgaW5pdFNpemluZyhlbCk7CgogICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIsIHRydWUpOwogICAgICAgICAgaWYgKGJpbmRpbmdEZWYuaW5pdGlhbGl6ZSkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gYmluZGluZ0RlZi5pbml0aWFsaXplKGVsLCBlbC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgICBlbC5vZmZzZXRIZWlnaHQpOwogICAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiwgcmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYmluZGluZ0RlZi5yZW5kZXJWYWx1ZShlbCwgZGF0YS54LCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IikpOwogICAgICAgIGV2YWxBbmRSdW4oZGF0YS5qc0hvb2tzLnJlbmRlciwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpLCBbZWwsIGRhdGEueF0pOwogICAgICB9OwoKICAgICAgLy8gT25seSBvdmVycmlkZSByZXNpemUgaWYgYmluZGluZ0RlZiBpbXBsZW1lbnRzIGl0CiAgICAgIGlmIChiaW5kaW5nRGVmLnJlc2l6ZSkgewogICAgICAgIHNoaW55QmluZGluZy5yZXNpemUgPSBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCkgewogICAgICAgICAgLy8gU2hpbnkgY2FuIGNhbGwgcmVzaXplIGJlZm9yZSBpbml0aWFsaXplL3JlbmRlclZhbHVlIGhhdmUgYmVlbgogICAgICAgICAgLy8gY2FsbGVkLCB3aGljaCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yIHdpZGdldHMuCiAgICAgICAgICBpZiAoZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7CiAgICAgICAgICAgIGJpbmRpbmdEZWYucmVzaXplKGVsLCB3aWR0aCwgaGVpZ2h0LCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IikpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KCiAgICAgIFNoaW55Lm91dHB1dEJpbmRpbmdzLnJlZ2lzdGVyKHNoaW55QmluZGluZywgYmluZGluZ0RlZi5uYW1lKTsKICAgIH0KICB9OwoKICB2YXIgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gbnVsbDsKICBmdW5jdGlvbiBzY2hlZHVsZVN0YXRpY1JlbmRlcigpIHsKICAgIGlmICghc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkKSB7CiAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gbnVsbDsKICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyKCk7CiAgICAgIH0sIDEpOwogICAgfQogIH0KCiAgLy8gUmVuZGVyIHN0YXRpYyB3aWRnZXRzIGFmdGVyIHRoZSBkb2N1bWVudCBmaW5pc2hlcyBsb2FkaW5nCiAgLy8gU3RhdGljYWxseSByZW5kZXIgYWxsIGVsZW1lbnRzIHRoYXQgYXJlIG9mIHRoaXMgd2lkZ2V0J3MgY2xhc3MKICB3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgYmluZGluZ3MgPSB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyB8fCBbXTsKICAgIGZvckVhY2goYmluZGluZ3MsIGZ1bmN0aW9uKGJpbmRpbmcpIHsKICAgICAgdmFyIG1hdGNoZXMgPSBiaW5kaW5nLmZpbmQoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTsKICAgICAgZm9yRWFjaChtYXRjaGVzLCBmdW5jdGlvbihlbCkgewogICAgICAgIHZhciBzaXplT2JqID0gaW5pdFNpemluZyhlbCwgYmluZGluZyk7CgogICAgICAgIGlmIChoYXNDbGFzcyhlbCwgImh0bWwtd2lkZ2V0LXN0YXRpYy1ib3VuZCIpKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGVsLmNsYXNzTmFtZSA9IGVsLmNsYXNzTmFtZSArICIgaHRtbC13aWRnZXQtc3RhdGljLWJvdW5kIjsKCiAgICAgICAgdmFyIGluaXRSZXN1bHQ7CiAgICAgICAgaWYgKGJpbmRpbmcuaW5pdGlhbGl6ZSkgewogICAgICAgICAgaW5pdFJlc3VsdCA9IGJpbmRpbmcuaW5pdGlhbGl6ZShlbCwKICAgICAgICAgICAgc2l6ZU9iaiA/IHNpemVPYmouZ2V0V2lkdGgoKSA6IGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICBzaXplT2JqID8gc2l6ZU9iai5nZXRIZWlnaHQoKSA6IGVsLm9mZnNldEhlaWdodAogICAgICAgICAgKTsKICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiLCBpbml0UmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIGlmIChiaW5kaW5nLnJlc2l6ZSkgewogICAgICAgICAgdmFyIGxhc3RTaXplID0gewogICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIGg6IHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0CiAgICAgICAgICB9OwogICAgICAgICAgdmFyIHJlc2l6ZUhhbmRsZXIgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHZhciBzaXplID0gewogICAgICAgICAgICAgIHc6IHNpemVPYmogPyBzaXplT2JqLmdldFdpZHRoKCkgOiBlbC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgICBoOiBzaXplT2JqID8gc2l6ZU9iai5nZXRIZWlnaHQoKSA6IGVsLm9mZnNldEhlaWdodAogICAgICAgICAgICB9OwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSAwICYmIHNpemUuaCA9PT0gMCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGlmIChzaXplLncgPT09IGxhc3RTaXplLncgJiYgc2l6ZS5oID09PSBsYXN0U2l6ZS5oKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgbGFzdFNpemUgPSBzaXplOwogICAgICAgICAgICBiaW5kaW5nLnJlc2l6ZShlbCwgc2l6ZS53LCBzaXplLmgsIGluaXRSZXN1bHQpOwogICAgICAgICAgfTsKCiAgICAgICAgICBvbih3aW5kb3csICJyZXNpemUiLCByZXNpemVIYW5kbGVyKTsKCiAgICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgY2FzZXMgd2hlcmUgd2UncmUgcnVubmluZyBpbiBhIFNoaW55CiAgICAgICAgICAvLyBhcHAsIGJ1dCB0aGUgd2lkZ2V0IGl0c2VsZiBpcyBub3QgYSBTaGlueSBvdXRwdXQsIGJ1dAogICAgICAgICAgLy8gcmF0aGVyIGEgc2ltcGxlIHN0YXRpYyB3aWRnZXQuIE9uZSBleGFtcGxlIG9mIHRoaXMgaXMKICAgICAgICAgIC8vIGFuIHJtYXJrZG93biBkb2N1bWVudCB0aGF0IGhhcyBydW50aW1lOnNoaW55IGFuZCB3aWRnZXQKICAgICAgICAgIC8vIHRoYXQgaXNuJ3QgaW4gYSByZW5kZXIgZnVuY3Rpb24uIFNoaW55IG9ubHkga25vd3MgdG8KICAgICAgICAgIC8vIGNhbGwgcmVzaXplIGhhbmRsZXJzIGZvciBTaGlueSBvdXRwdXRzLCBub3QgZm9yIHN0YXRpYwogICAgICAgICAgLy8gd2lkZ2V0cywgc28gd2UgZG8gaXQgb3Vyc2VsdmVzLgogICAgICAgICAgaWYgKHdpbmRvdy5qUXVlcnkpIHsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgInNob3duLmh0bWx3aWRnZXRzIHNob3duLmJzLnRhYi5odG1sd2lkZ2V0cyBzaG93bi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgICB3aW5kb3cualF1ZXJ5KGRvY3VtZW50KS5vbigKICAgICAgICAgICAgICAiaGlkZGVuLmh0bWx3aWRnZXRzIGhpZGRlbi5icy50YWIuaHRtbHdpZGdldHMgaGlkZGVuLmJzLmNvbGxhcHNlLmh0bWx3aWRnZXRzIiwKICAgICAgICAgICAgICByZXNpemVIYW5kbGVyCiAgICAgICAgICAgICk7CiAgICAgICAgICB9CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBzcGVjaWZpYyBjYXNlIG9mIGlvc2xpZGVzLCB3aGljaAogICAgICAgICAgLy8gZmxpcHMgc2xpZGVzIGJldHdlZW4gZGlzcGxheTpub25lIGFuZCBkaXNwbGF5OmJsb2NrLgogICAgICAgICAgLy8gSWRlYWxseSB3ZSB3b3VsZCBub3QgaGF2ZSB0byBoYXZlIGlvc2xpZGUtc3BlY2lmaWMgY29kZQogICAgICAgICAgLy8gaGVyZSwgYnV0IHJhdGhlciBoYXZlIGlvc2xpZGVzIHJhaXNlIGEgZ2VuZXJpYyBldmVudCwKICAgICAgICAgIC8vIGJ1dCB0aGUgcm1hcmtkb3duIHBhY2thZ2UganVzdCB3ZW50IHRvIENSQU4gc28gdGhlCiAgICAgICAgICAvLyB3aW5kb3cgdG8gZ2V0dGluZyB0aGF0IGZpeGVkIG1heSBiZSBsb25nLgogICAgICAgICAgaWYgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgICAgICAgIC8vIEl0J3MgT0sgdG8gbGltaXQgdGhpcyB0byB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcgogICAgICAgICAgICAvLyBicm93c2VycyBiZWNhdXNlIGlvc2xpZGVzIGl0c2VsZiBvbmx5IHN1cHBvcnRzCiAgICAgICAgICAgIC8vIHN1Y2ggYnJvd3NlcnMuCiAgICAgICAgICAgIG9uKGRvY3VtZW50LCAic2xpZGVlbnRlciIsIHJlc2l6ZUhhbmRsZXIpOwogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlbGVhdmUiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBzY3JpcHREYXRhID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vanNvbiddIik7CiAgICAgICAgaWYgKHNjcmlwdERhdGEpIHsKICAgICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShzY3JpcHREYXRhLnRleHRDb250ZW50IHx8IHNjcmlwdERhdGEudGV4dCk7CiAgICAgICAgICAvLyBSZXNvbHZlIHN0cmluZ3MgbWFya2VkIGFzIGphdmFzY3JpcHQgbGl0ZXJhbHMgdG8gb2JqZWN0cwogICAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBkYXRhLmV2YWxzICYmIGsgPCBkYXRhLmV2YWxzLmxlbmd0aDsgaysrKSB7CiAgICAgICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlcihkYXRhLngsIGRhdGEuZXZhbHNba10pOwogICAgICAgICAgfQogICAgICAgICAgYmluZGluZy5yZW5kZXJWYWx1ZShlbCwgZGF0YS54LCBpbml0UmVzdWx0KTsKICAgICAgICAgIGV2YWxBbmRSdW4oZGF0YS5qc0hvb2tzLnJlbmRlciwgaW5pdFJlc3VsdCwgW2VsLCBkYXRhLnhdKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CgogICAgaW52b2tlUG9zdFJlbmRlckhhbmRsZXJzKCk7CiAgfQoKCiAgZnVuY3Rpb24gaGFzX2pRdWVyeTMoKSB7CiAgICBpZiAoIXdpbmRvdy5qUXVlcnkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdmFyICR2ZXJzaW9uID0gd2luZG93LmpRdWVyeS5mbi5qcXVlcnk7CiAgICB2YXIgJG1ham9yX3ZlcnNpb24gPSBwYXJzZUludCgkdmVyc2lvbi5zcGxpdCgiLiIpWzBdKTsKICAgIHJldHVybiAkbWFqb3JfdmVyc2lvbiA+PSAzOwogIH0KCiAgLyoKICAvIFNoaW55IDEuNCBidW1wZWQgalF1ZXJ5IGZyb20gMS54IHRvIDMueCB3aGljaCBtZWFucyBqUXVlcnkncwogIC8gb24tcmVhZHkgaGFuZGxlciAoaS5lLiwgJChmbikpIGlzIG5vdyBhc3luY3Jvbm91cyAoaS5lLiwgaXQgbm93CiAgLyByZWFsbHkgbWVhbnMgJChzZXRUaW1lb3V0KGZuKSkuCiAgLyBodHRwczovL2pxdWVyeS5jb20vdXBncmFkZS1ndWlkZS8zLjAvI2JyZWFraW5nLWNoYW5nZS1kb2N1bWVudC1yZWFkeS1oYW5kbGVycy1hcmUtbm93LWFzeW5jaHJvbm91cwogIC8KICAvIFNpbmNlIFNoaW55IHVzZXMgJCgpIHRvIHNjaGVkdWxlIGluaXRTaGlueSwgc2hpbnk+PTEuNCBjYWxscyBpbml0U2hpbnkKICAvIG9uZSB0aWNrIGxhdGVyIHRoYW4gaXQgZGlkIGJlZm9yZSwgd2hpY2ggbWVhbnMgc3RhdGljUmVuZGVyKCkgaXMKICAvIGNhbGxlZCByZW5kZXJWYWx1ZSgpIGVhcmxpZXIgdGhhbiAoYWR2YW5jZWQpIHdpZGdldCBhdXRob3JzIG1pZ2h0IGJlIGV4cGVjdGluZy4KICAvIGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL3NoaW55L2lzc3Vlcy8yNjMwCiAgLwogIC8gRm9yIGEgY29uY3JldGUgZXhhbXBsZSwgbGVhZmxldCBoYXMgc29tZSBtZXRob2RzIChlLmcuLCB1cGRhdGVCb3VuZHMpCiAgLyB3aGljaCByZWZlcmVuY2UgU2hpbnkgbWV0aG9kcyByZWdpc3RlcmVkIGluIGluaXRTaGlueSAoZS5nLiwgc2V0SW5wdXRWYWx1ZSkuCiAgLyBTaW5jZSBsZWFmbGV0IGlzIHByaXZ5IHRvIHRoaXMgbGlmZS1jeWNsZSwgaXQga25vd3MgdG8gdXNlIHNldFRpbWVvdXQoKSB0bwogIC8gZGVsYXkgZXhlY3V0aW9uIG9mIHRob3NlIG1ldGhvZHMgKHVudGlsIFNoaW55IG1ldGhvZHMgYXJlIHJlYWR5KQogIC8gaHR0cHM6Ly9naXRodWIuY29tL3JzdHVkaW8vbGVhZmxldC9ibG9iLzE4ZWM5ODEvamF2YXNjcmlwdC9zcmMvaW5kZXguanMjTDI2Ni1MMjY4CiAgLwogIC8gSWRlYWxseSB3aWRnZXQgYXV0aG9ycyB3b3VsZG4ndCBuZWVkIHRvIHVzZSB0aGlzIHNldFRpbWVvdXQoKSBoYWNrIHRoYXQKICAvIGxlYWZsZXQgdXNlcyB0byBjYWxsIFNoaW55IG1ldGhvZHMgb24gYSBzdGF0aWNSZW5kZXIoKS4gSW4gdGhlIGxvbmcgcnVuLAogIC8gdGhlIGxvZ2ljIGluaXRTaGlueSBzaG91bGQgYmUgYnJva2VuIHVwIHNvIHRoYXQgbWV0aG9kIHJlZ2lzdHJhdGlvbiBoYXBwZW5zCiAgLyByaWdodCBhd2F5LCBidXQgYmluZGluZyBoYXBwZW5zIGxhdGVyLgogICovCiAgZnVuY3Rpb24gbWF5YmVTdGF0aWNSZW5kZXJMYXRlcigpIHsKICAgIGlmIChzaGlueU1vZGUgJiYgaGFzX2pRdWVyeTMoKSkgewogICAgICB3aW5kb3cualF1ZXJ5KHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIpOwogICAgfSBlbHNlIHsKICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgfQogIH0KCiAgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbigpIHsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGFyZ3VtZW50cy5jYWxsZWUsIGZhbHNlKTsKICAgICAgbWF5YmVTdGF0aWNSZW5kZXJMYXRlcigpOwogICAgfSwgZmFsc2UpOwogIH0gZWxzZSBpZiAoZG9jdW1lbnQuYXR0YWNoRXZlbnQpIHsKICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIpIHsKICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgYXJndW1lbnRzLmNhbGxlZSk7CiAgICAgICAgbWF5YmVTdGF0aWNSZW5kZXJMYXRlcigpOwogICAgICB9CiAgICB9KTsKICB9CgoKICB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0QXR0YWNobWVudFVybCA9IGZ1bmN0aW9uKGRlcG5hbWUsIGtleSkgewogICAgLy8gSWYgbm8ga2V5LCBkZWZhdWx0IHRvIHRoZSBmaXJzdCBpdGVtCiAgICBpZiAodHlwZW9mKGtleSkgPT09ICJ1bmRlZmluZWQiKQogICAgICBrZXkgPSAxOwoKICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVwbmFtZSArICItIiArIGtleSArICItYXR0YWNobWVudCIpOwogICAgaWYgKCFsaW5rKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQXR0YWNobWVudCAiICsgZGVwbmFtZSArICIvIiArIGtleSArICIgbm90IGZvdW5kIGluIGRvY3VtZW50Iik7CiAgICB9CiAgICByZXR1cm4gbGluay5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMuZGF0YWZyYW1lVG9EMyA9IGZ1bmN0aW9uKGRmKSB7CiAgICB2YXIgbmFtZXMgPSBbXTsKICAgIHZhciBsZW5ndGg7CiAgICBmb3IgKHZhciBuYW1lIGluIGRmKSB7CiAgICAgICAgaWYgKGRmLmhhc093blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpOwogICAgICAgIGlmICh0eXBlb2YoZGZbbmFtZV0pICE9PSAib2JqZWN0IiB8fCB0eXBlb2YoZGZbbmFtZV0ubGVuZ3RoKSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YobGVuZ3RoKSAhPT0gInVuZGVmaW5lZCIgJiYgbGVuZ3RoICE9PSBkZltuYW1lXS5sZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpOwogICAgICAgIH0KICAgICAgICBsZW5ndGggPSBkZltuYW1lXS5sZW5ndGg7CiAgICB9CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGl0ZW07CiAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBsZW5ndGg7IHJvdysrKSB7CiAgICAgICAgaXRlbSA9IHt9OwogICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG5hbWVzLmxlbmd0aDsgY29sKyspIHsKICAgICAgICAgICAgaXRlbVtuYW1lc1tjb2xdXSA9IGRmW25hbWVzW2NvbF1dW3Jvd107CiAgICAgICAgfQogICAgICAgIHJlc3VsdHMucHVzaChpdGVtKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH07CgogIHdpbmRvdy5IVE1MV2lkZ2V0cy50cmFuc3Bvc2VBcnJheTJEID0gZnVuY3Rpb24oYXJyYXkpIHsKICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGFycmF5OwogICAgICB2YXIgbmV3QXJyYXkgPSBhcnJheVswXS5tYXAoZnVuY3Rpb24oY29sLCBpKSB7CiAgICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uKHJvdykgewogICAgICAgICAgICAgIHJldHVybiByb3dbaV0KICAgICAgICAgIH0pCiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3QXJyYXk7CiAgfTsKICAvLyBTcGxpdCB2YWx1ZSBhdCBzcGxpdENoYXIsIGJ1dCBhbGxvdyBzcGxpdENoYXIgdG8gYmUgZXNjYXBlZAogIC8vIHVzaW5nIGVzY2FwZUNoYXIuIEFueSBvdGhlciBjaGFyYWN0ZXJzIGVzY2FwZWQgYnkgZXNjYXBlQ2hhcgogIC8vIHdpbGwgYmUgaW5jbHVkZWQgYXMgdXN1YWwgKGluY2x1ZGluZyBlc2NhcGVDaGFyIGl0c2VsZikuCiAgZnVuY3Rpb24gc3BsaXRXaXRoRXNjYXBlKHZhbHVlLCBzcGxpdENoYXIsIGVzY2FwZUNoYXIpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgZXNjYXBlTW9kZSA9IGZhbHNlOwogICAgdmFyIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IHZhbHVlLmxlbmd0aDsgcG9zKyspIHsKICAgICAgaWYgKCFlc2NhcGVNb2RlKSB7CiAgICAgICAgaWYgKHZhbHVlW3Bvc10gPT09IHNwbGl0Q2hhcikgewogICAgICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOwogICAgICAgICAgY3VycmVudFJlc3VsdCA9ICIiOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWVbcG9zXSA9PT0gZXNjYXBlQ2hhcikgewogICAgICAgICAgZXNjYXBlTW9kZSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOwogICAgICAgIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGN1cnJlbnRSZXN1bHQgIT09ICIiKSB7CiAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KICAvLyBGdW5jdGlvbiBhdXRob3JlZCBieSBZaWh1aS9KSiBBbGxhaXJlCiAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyID0gZnVuY3Rpb24obywgbWVtYmVyKSB7CiAgICB2YXIgcGFydHMgPSBzcGxpdFdpdGhFc2NhcGUobWVtYmVyLCAnLicsICdcXCcpOwogICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgLy8gcGFydCBtYXkgYmUgYSBjaGFyYWN0ZXIgb3IgJ251bWVyaWMnIG1lbWJlciBuYW1lCiAgICAgIGlmIChvICE9PSBudWxsICYmIHR5cGVvZiBvID09PSAib2JqZWN0IiAmJiBwYXJ0IGluIG8pIHsKICAgICAgICBpZiAoaSA9PSAobCAtIDEpKSB7IC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoZW4gZXZhbHVsYXRlCiAgICAgICAgICBpZiAodHlwZW9mIG9bcGFydF0gPT09ICJzdHJpbmciKQogICAgICAgICAgICBvW3BhcnRdID0gdHJ5RXZhbChvW3BhcnRdKTsKICAgICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2UgY29udGludWUgdG8gbmV4dCBlbWJlZGRlZCBvYmplY3QKICAgICAgICAgIG8gPSBvW3BhcnRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07CgogIC8vIFJldHJpZXZlIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YgYW4KICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50LCBvciBudWxsIGlmIG5vbmUuCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlID0gZnVuY3Rpb24oZWwpIHsKICAgIHJldHVybiBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0Iik7CiAgfTsKCiAgLy8gRmluZHMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsCiAgLy8gYW5kIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2UgKGkuZS4gdGhlIHJldHVybiB2YWx1ZSBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoYXQgZWxlbWVudCwgaWYgYW55LiBJZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlCiAgLy8gc2VsZWN0b3IsIG9yIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGhhcyBubyBIVE1MV2lkZ2V0CiAgLy8gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGl0LCB0aGVuIG51bGwgaXMgcmV0dXJuZWQuCiAgLy8KICAvLyBUaGUgc2NvcGUgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB3aW5kb3cuZG9jdW1lbnQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmZpbmQgPSBmdW5jdGlvbihzY29wZSwgc2VsZWN0b3IpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgc2VsZWN0b3IgPSBzY29wZTsKICAgICAgc2NvcGUgPSBkb2N1bWVudDsKICAgIH0KCiAgICB2YXIgZWwgPSBzY29wZS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgIGlmIChlbCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0SW5zdGFuY2UoZWwpOwogICAgfQogIH07CgogIC8vIEZpbmRzIGFsbCBlbGVtZW50cyBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsIGFuZAogIC8vIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2VzIChpLmUuIHRoZSByZXR1cm4gdmFsdWVzIG9mCiAgLy8gYW4gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnRzLCBpbiBhbiBhcnJheS4gSWYgZWxlbWVudHMgdGhhdAogIC8vIG1hdGNoIHRoZSBzZWxlY3RvciBkb24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgSFRNTFdpZGdldAogIC8vIGluc3RhbmNlLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBjb250YWluIG51bGxzLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kQWxsID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIG5vZGVzID0gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHRzLnB1c2god2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKG5vZGVzW2ldKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB2YXIgcG9zdFJlbmRlckhhbmRsZXJzID0gW107CiAgZnVuY3Rpb24gaW52b2tlUG9zdFJlbmRlckhhbmRsZXJzKCkgewogICAgd2hpbGUgKHBvc3RSZW5kZXJIYW5kbGVycy5sZW5ndGgpIHsKICAgICAgdmFyIGhhbmRsZXIgPSBwb3N0UmVuZGVySGFuZGxlcnMuc2hpZnQoKTsKICAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAgICBoYW5kbGVyKCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIFJlZ2lzdGVyIHRoZSBnaXZlbiBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZQogIC8vIG5leHQgdGltZSBzdGF0aWMgd2lkZ2V0cyBhcmUgcmVuZGVyZWQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmFkZFBvc3RSZW5kZXJIYW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgIHBvc3RSZW5kZXJIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTsKICB9OwoKICAvLyBUYWtlcyBhIG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9uLCBhbmQgcmV0dXJucyBhbgogIC8vIG9sZC1zdHlsZSBjbGFzcy1ib3VuZCBkZWZpbml0aW9uLiBUaGlzIHNhdmVzIHVzIGZyb20gaGF2aW5nCiAgLy8gdG8gcmV3cml0ZSBhbGwgdGhlIGxvZ2ljIGluIHRoaXMgZmlsZSB0byBhY2NvbW9kYXRlIGJvdGgKICAvLyB0eXBlcyBvZiBkZWZpbml0aW9ucy4KICBmdW5jdGlvbiBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZuKSB7CiAgICB2YXIgcmVzdWx0ID0gewogICAgICBuYW1lOiBkZWZuLm5hbWUsCiAgICAgIHR5cGU6IGRlZm4udHlwZSwKICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICByZXR1cm4gZGVmbi5mYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgfSwKICAgICAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgICAgIHJldHVybiBpbnN0YW5jZS5yZW5kZXJWYWx1ZSh4KTsKICAgICAgfSwKICAgICAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVzaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICB9CiAgICB9OwoKICAgIGlmIChkZWZuLmZpbmQpCiAgICAgIHJlc3VsdC5maW5kID0gZGVmbi5maW5kOwogICAgaWYgKGRlZm4ucmVuZGVyRXJyb3IpCiAgICAgIHJlc3VsdC5yZW5kZXJFcnJvciA9IGRlZm4ucmVuZGVyRXJyb3I7CiAgICBpZiAoZGVmbi5jbGVhckVycm9yKQogICAgICByZXN1bHQuY2xlYXJFcnJvciA9IGRlZm4uY2xlYXJFcnJvcjsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KfSkoKTsKCg=="></script>
      <script src="data:application/javascript;base64,CkhUTUxXaWRnZXRzLndpZGdldCh7CiAgbmFtZTogInBsb3RseSIsCiAgdHlwZTogIm91dHB1dCIsCgogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICByZXR1cm4ge307CiAgfSwKCiAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgIGlmIChpbnN0YW5jZS5hdXRvc2l6ZSkgewogICAgICB2YXIgd2lkdGggPSBpbnN0YW5jZS53aWR0aCB8fCB3aWR0aDsKICAgICAgdmFyIGhlaWdodCA9IGluc3RhbmNlLmhlaWdodCB8fCBoZWlnaHQ7CiAgICAgIFBsb3RseS5yZWxheW91dChlbC5pZCwge3dpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHR9KTsKICAgIH0KICB9LCAgCiAgCiAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgCiAgICAvLyBQbG90bHkucmVsYXlvdXQoKSBtdXRhdGVzIHRoZSBwbG90IGlucHV0IG9iamVjdCwgc28gbWFrZSBzdXJlIHRvIAogICAgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgdXNlci1zdXBwbGllZCB3aWR0aC9oZWlnaHQgKmJlZm9yZSoKICAgIC8vIHdlIGNhbGwgUGxvdGx5LnBsb3QoKTsKICAgIHZhciBsYXkgPSB4LmxheW91dCB8fCB7fTsKICAgIGluc3RhbmNlLndpZHRoID0gbGF5LndpZHRoOwogICAgaW5zdGFuY2UuaGVpZ2h0ID0gbGF5LmhlaWdodDsKICAgIGluc3RhbmNlLmF1dG9zaXplID0gbGF5LmF1dG9zaXplIHx8IHRydWU7CiAgICAKICAgIC8qIAogICAgLyAnaW5mb3JtIHRoZSB3b3JsZCcgYWJvdXQgaGlnaGxpZ2h0aW5nIG9wdGlvbnMgdGhpcyBpcyBzbyBvdGhlcgogICAgLyBjcm9zc3RhbGsgbGlicmFyaWVzIGhhdmUgYSBjaGFuY2UgdG8gcmVzcG9uZCB0byBzcGVjaWFsIHNldHRpbmdzIAogICAgLyBzdWNoIGFzIHBlcnNpc3RlbnQgc2VsZWN0aW9uLiAKICAgIC8gQUZBSUssIGxlYWZsZXQgaXMgdGhlIG9ubHkgbGlicmFyeSB3aXRoIHN1Y2ggaW50ZXJncmF0aW9uCiAgICAvIGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL2xlYWZsZXQvcHVsbC8zNDYvZmlsZXMjZGlmZi1hZDBjMmQ1MWNlNWZkZjhjOTBjNzM5NWIxMDJmNDI2NVIxNTQKICAgICovCiAgICB2YXIgY3RDb25maWcgPSBjcm9zc3RhbGsudmFyKCdwbG90bHlDcm9zc3RhbGtPcHRzJykuc2V0KHguaGlnaGxpZ2h0KTsKICAgICAgCiAgICBpZiAodHlwZW9mKHdpbmRvdykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIC8vIG1ha2Ugc3VyZSBwbG90cyBkb24ndCBnZXQgY3JlYXRlZCBvdXRzaWRlIHRoZSBuZXR3b3JrIChmb3Igb24tcHJlbSkKICAgICAgd2luZG93LlBMT1RMWUVOViA9IHdpbmRvdy5QTE9UTFlFTlYgfHwge307CiAgICAgIHdpbmRvdy5QTE9UTFlFTlYuQkFTRV9VUkwgPSB4LmJhc2VfdXJsOwogICAgICAKICAgICAgLy8gRW5hYmxlIHBlcnNpc3RlbnQgc2VsZWN0aW9uIHdoZW4gc2hpZnQga2V5IGlzIGRvd24KICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTgyODYxMy9jaGVjay1pZi1hLWtleS1pcy1kb3duCiAgICAgIHZhciBwZXJzaXN0T25TaGlmdCA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoIWUpIHdpbmRvdy5ldmVudDsKICAgICAgICBpZiAoZS5zaGlmdEtleSkgeyAKICAgICAgICAgIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnQgPSB0cnVlOyAKICAgICAgICAgIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnRTaGlmdCA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnQgPSBmYWxzZTsgCiAgICAgICAgICB4LmhpZ2hsaWdodC5wZXJzaXN0ZW50U2hpZnQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIAogICAgICAvLyBPbmx5IHJlbGV2YW50IGlmIHdlIGhhdmVuJ3QgZm9yY2VkIHBlcnNpc3RlbnQgbW9kZSBhdCBjb21tYW5kIGxpbmUKICAgICAgaWYgKCF4LmhpZ2hsaWdodC5wZXJzaXN0ZW50KSB7CiAgICAgICAgd2luZG93Lm9ubW91c2Vtb3ZlID0gcGVyc2lzdE9uU2hpZnQ7CiAgICAgIH0KICAgIH0KCiAgICB2YXIgZ3JhcGhEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbC5pZCk7CiAgICAKICAgIC8vIFRPRE86IG1vdmUgdGhlIGNvbnRyb2wgcGFuZWwgaW5qZWN0aW9uIHN0cmF0ZWd5IGluc2lkZSBoZXJlLi4uCiAgICBIVE1MV2lkZ2V0cy5hZGRQb3N0UmVuZGVySGFuZGxlcihmdW5jdGlvbigpIHsKICAgICAgCiAgICAgIC8vIGxvd2VyIHRoZSB6LWluZGV4IG9mIHRoZSBtb2RlYmFyIHRvIHByZXZlbnQgaXQgZnJvbSBoaWdoamFja2luZyBob3ZlcgogICAgICAvLyAoVE9ETzogZG8gdGhpcyB2aWEgQ1NTPykKICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3JvcGVuc2NpL3Bsb3RseS9pc3N1ZXMvOTU2CiAgICAgIC8vIGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvcHJvcF9zdHlsZV96aW5kZXguYXNwCiAgICAgIHZhciBtb2RlYmFycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5qcy1wbG90bHktcGxvdCAucGxvdGx5IC5tb2RlYmFyIik7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZWJhcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBtb2RlYmFyc1tpXS5zdHlsZS56SW5kZXggPSAxOwogICAgICB9CiAgICB9KTsKICAgICAgCiAgICAgIC8vIGluamVjdCBhICJjb250cm9sIHBhbmVsIiBob2xkaW5nIHNlbGVjdGl6ZS9keW5hbWljIGNvbG9yIHdpZGdldChzKQogICAgaWYgKCh4LnNlbGVjdGl6ZSB8fCB4LmhpZ2hsaWdodC5keW5hbWljKSAmJiAhaW5zdGFuY2UucGxvdGx5KSB7CiAgICAgIHZhciBmbGV4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIGZsZXguY2xhc3MgPSAicGxvdGx5LWNyb3NzdGFsay1jb250cm9sLXBhbmVsIjsKICAgICAgZmxleC5zdHlsZSA9ICJkaXNwbGF5OiBmbGV4OyBmbGV4LXdyYXA6IHdyYXAiOwogICAgICAKICAgICAgLy8gaW5qZWN0IHRoZSBjb2xvdXJwaWNrZXIgSFRNTCBjb250YWluZXIgaW50byB0aGUgZmxleGJveAogICAgICBpZiAoeC5oaWdobGlnaHQuZHluYW1pYykgewogICAgICAgIHZhciBwaWNrZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAKICAgICAgICB2YXIgcGlja2VySW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwogICAgICAgIHBpY2tlcklucHV0LmlkID0gZWwuaWQgKyAiLWNvbG91cnBpY2tlciI7CiAgICAgICAgcGlja2VySW5wdXQucGxhY2Vob2xkZXIgPSAiYXNkYXNkIjsKICAgICAgICAKICAgICAgICB2YXIgcGlja2VyTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOwogICAgICAgIHBpY2tlckxhYmVsLmZvciA9IHBpY2tlcklucHV0LmlkOwogICAgICAgIHBpY2tlckxhYmVsLmlubmVySFRNTCA9ICJCcnVzaCBjb2xvciZuYnNwOyZuYnNwOyI7CiAgICAgICAgCiAgICAgICAgcGlja2VyRGl2LmFwcGVuZENoaWxkKHBpY2tlckxhYmVsKTsKICAgICAgICBwaWNrZXJEaXYuYXBwZW5kQ2hpbGQocGlja2VySW5wdXQpOwogICAgICAgIGZsZXguYXBwZW5kQ2hpbGQocGlja2VyRGl2KTsKICAgICAgfQogICAgICAKICAgICAgLy8gaW5qZWN0IHNlbGVjdGl6ZSBIVE1MIGNvbnRhaW5lcnMgKG9uZSBmb3IgZXZlcnkgY3Jvc3N0YWxrIGdyb3VwKQogICAgICBpZiAoeC5zZWxlY3RpemUpIHsKICAgICAgICB2YXIgaWRzID0gT2JqZWN0LmtleXMoeC5zZWxlY3RpemUpOwogICAgICAgIAogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICBjb250YWluZXIuaWQgPSBpZHNbaV07CiAgICAgICAgICBjb250YWluZXIuc3R5bGUgPSAid2lkdGg6IDgwJTsgaGVpZ2h0OiAxMCUiOwogICAgICAgICAgY29udGFpbmVyLmNsYXNzID0gImZvcm0tZ3JvdXAgY3Jvc3N0YWxrLWlucHV0LXBsb3RseS1oaWdobGlnaHQiOwogICAgICAgICAgCiAgICAgICAgICB2YXIgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOwogICAgICAgICAgbGFiZWwuZm9yID0gaWRzW2ldOwogICAgICAgICAgbGFiZWwuaW5uZXJIVE1MID0geC5zZWxlY3RpemVbaWRzW2ldXS5ncm91cDsKICAgICAgICAgIGxhYmVsLmNsYXNzID0gImNvbnRyb2wtbGFiZWwiOwogICAgICAgICAgCiAgICAgICAgICB2YXIgc2VsZWN0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICB2YXIgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7CiAgICAgICAgICBzZWxlY3QubXVsdGlwbGUgPSB0cnVlOwogICAgICAgICAgCiAgICAgICAgICBzZWxlY3REaXYuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChsYWJlbCk7CiAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZWN0RGl2KTsKICAgICAgICAgIGZsZXguYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC8vIGZpbmFsbHksIGluc2VydCB0aGUgZmxleGJveCBpbnNpZGUgdGhlIGh0bWx3aWRnZXQgY29udGFpbmVyLAogICAgICAvLyBidXQgYmVmb3JlIHRoZSBwbG90bHkgZ3JhcGggZGl2CiAgICAgIGdyYXBoRGl2LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGZsZXgsIGdyYXBoRGl2KTsKICAgICAgCiAgICAgIGlmICh4LmhpZ2hsaWdodC5keW5hbWljKSB7CiAgICAgICAgdmFyIHBpY2tlciA9ICQoIiMiICsgcGlja2VySW5wdXQuaWQpOwogICAgICAgIHZhciBjb2xvcnMgPSB4LmhpZ2hsaWdodC5jb2xvciB8fCBbXTsKICAgICAgICAvLyBUT0RPOiBsZXQgdXNlcnMgc3BlY2lmeSBvcHRpb25zPwogICAgICAgIHZhciBvcHRzID0gewogICAgICAgICAgdmFsdWU6IGNvbG9yc1swXSwKICAgICAgICAgIHNob3dDb2xvdXI6ICJib3RoIiwKICAgICAgICAgIHBhbGV0dGU6ICJsaW1pdGVkIiwKICAgICAgICAgIGFsbG93ZWRDb2xzOiBjb2xvcnMuam9pbigiICIpLAogICAgICAgICAgd2lkdGg6ICIyMCUiLAogICAgICAgICAgaGVpZ2h0OiAiMTAlIgogICAgICAgIH07CiAgICAgICAgcGlja2VyLmNvbG91cnBpY2tlcih7Y2hhbmdlRGVsYXk6IDB9KTsKICAgICAgICBwaWNrZXIuY29sb3VycGlja2VyKCJzZXR0aW5ncyIsIG9wdHMpOwogICAgICAgIHBpY2tlci5jb2xvdXJwaWNrZXIoInZhbHVlIiwgb3B0cy52YWx1ZSk7CiAgICAgICAgLy8gaW5mb3JtIGNyb3NzdGFsayBhYm91dCBhIGNoYW5nZSBpbiB0aGUgY3VycmVudCBzZWxlY3Rpb24gY29sb3VyCiAgICAgICAgdmFyIGdycHMgPSB4LmhpZ2hsaWdodC5jdEdyb3VwcyB8fCBbXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdycHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGNyb3NzdGFsay5ncm91cChncnBzW2ldKS52YXIoJ3Bsb3RseVNlbGVjdGlvbkNvbG91cicpCiAgICAgICAgICAgIC5zZXQocGlja2VyLmNvbG91cnBpY2tlcigndmFsdWUnKSk7CiAgICAgICAgfQogICAgICAgIHBpY2tlci5vbigiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdycHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgY3Jvc3N0YWxrLmdyb3VwKGdycHNbaV0pLnZhcigncGxvdGx5U2VsZWN0aW9uQ29sb3VyJykKICAgICAgICAgICAgICAuc2V0KHBpY2tlci5jb2xvdXJwaWNrZXIoJ3ZhbHVlJykpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICAKICAgIC8vIGlmIG5vIHBsb3QgZXhpc3RzIHlldCwgY3JlYXRlIG9uZSB3aXRoIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uCiAgICBpZiAoIWluc3RhbmNlLnBsb3RseSkgewogICAgICAKICAgICAgdmFyIHBsb3QgPSBQbG90bHkubmV3UGxvdChncmFwaERpdiwgeCk7CiAgICAgIGluc3RhbmNlLnBsb3RseSA9IHRydWU7CiAgICAgIAogICAgfSBlbHNlIGlmICh4LmxheW91dC50cmFuc2l0aW9uKSB7CiAgICAgIAogICAgICB2YXIgcGxvdCA9IFBsb3RseS5yZWFjdChncmFwaERpdiwgeCk7CiAgICAKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICAvLyB0aGlzIGlzIGVzc2VudGlhbGx5IGVxdWl2YWxlbnQgdG8gUGxvdGx5Lm5ld1Bsb3QoKSwgYnV0IGF2b2lkcyBjcmVhdGluZyAKICAgICAgLy8gYSBuZXcgd2ViZ2wgY29udGV4dAogICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGxvdGx5L3Bsb3RseS5qcy9ibG9iLzJiMjRmOWRlZjkwMTgzMWU2MTI4MjA3NmNmM2Y4MzU1OThkNTZmMGUvc3JjL3Bsb3RfYXBpL3Bsb3RfYXBpLmpzI0w1MzEtTDUzMgoKICAgICAgLy8gVE9ETzogcmVzdG9yZSBjcm9zc3RhbGsgc2VsZWN0aW9ucz8KICAgICAgUGxvdGx5LnB1cmdlKGdyYXBoRGl2KTsKICAgICAgLy8gVE9ETzogd2h5IGlzIHRoaXMgbmVjZXNzYXJ5IHRvIGdldCBjcm9zc3RhbGsgd29ya2luZz8KICAgICAgZ3JhcGhEaXYuZGF0YSA9IHVuZGVmaW5lZDsKICAgICAgZ3JhcGhEaXYubGF5b3V0ID0gdW5kZWZpbmVkOwogICAgICB2YXIgcGxvdCA9IFBsb3RseS5uZXdQbG90KGdyYXBoRGl2LCB4KTsKICAgIH0KICAgIAogICAgLy8gVHJpZ2dlciBwbG90bHkuanMgY2FsbHMgZGVmaW5lZCB2aWEgYHBsb3RseVByb3h5KClgCiAgICBwbG90LnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUpIHsKICAgICAgICBTaGlueS5hZGRDdXN0b21NZXNzYWdlSGFuZGxlcigicGxvdGx5LWNhbGxzIiwgZnVuY3Rpb24obXNnKSB7CiAgICAgICAgICB2YXIgZ2QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtc2cuaWQpOwogICAgICAgICAgaWYgKCFnZCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGZpbmQgcGxvdGx5IGdyYXBoIHdpdGggaWQ6ICIgKyBtc2cuaWQpOwogICAgICAgICAgfQogICAgICAgICAgLy8gVGhpcyBpc24ndCBhbiBvZmZpY2lhbCBwbG90bHkuanMgbWV0aG9kLCBidXQgaXQncyB0aGUgb25seSBjdXJyZW50IHdheSB0byAKICAgICAgICAgIC8vIGNoYW5nZSBqdXN0IHRoZSBjb25maWd1cmF0aW9uIG9mIGEgcGxvdCAKICAgICAgICAgIC8vIGh0dHBzOi8vY29tbXVuaXR5LnBsb3QubHkvdC91cGRhdGUtY29uZmlnLWZ1bmN0aW9uLzkwNTcKICAgICAgICAgIGlmIChtc2cubWV0aG9kID09ICJyZWNvbmZpZyIpIHsKICAgICAgICAgICAgUGxvdGx5LnJlYWN0KGdkLCBnZC5kYXRhLCBnZC5sYXlvdXQsIG1zZy5hcmdzKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFQbG90bHlbbXNnLm1ldGhvZF0pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1ldGhvZCAiICsgbXNnLm1ldGhvZCk7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgYXJncyA9IFtnZF0uY29uY2F0KG1zZy5hcmdzKTsKICAgICAgICAgIFBsb3RseVttc2cubWV0aG9kXS5hcHBseShudWxsLCBhcmdzKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICAKICAgICAgLy8gcGxvdGx5J3MgbWFwYm94IEFQSSBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHNldHRpbmcgYm91bmRpbmcgYm94ZXMKICAgICAgLy8gaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9maXRib3VuZHMvCiAgICAgIC8vIHNvIHdlIGRvIHRoaXMgbWFudWFsbHkuLi4KICAgICAgLy8gVE9ETzogbWFrZSBzdXJlIHRoaXMgdHJpZ2dlcnMgb24gYSByZWRyYXcgYW5kIHJlbGF5b3V0IGFzIHdlbGwgYXMgb24gaW5pdGlhbCBkcmF3CiAgICAgIHZhciBtYXBib3hJRHMgPSBncmFwaERpdi5fZnVsbExheW91dC5fc3VicGxvdHMubWFwYm94IHx8IFtdOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcGJveElEcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBpZCA9IG1hcGJveElEc1tpXTsKICAgICAgICB2YXIgbWFwT3B0cyA9IHgubGF5b3V0W2lkXSB8fCB7fTsKICAgICAgICB2YXIgYXJncyA9IG1hcE9wdHMuX2ZpdEJvdW5kcyB8fCB7fTsKICAgICAgICBpZiAoIWFyZ3MpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICB2YXIgbWFwT2JqID0gZ3JhcGhEaXYuX2Z1bGxMYXlvdXRbaWRdLl9zdWJwbG90Lm1hcDsKICAgICAgICBtYXBPYmouZml0Qm91bmRzKGFyZ3MuYm91bmRzLCBhcmdzLm9wdGlvbnMpOwogICAgICB9CiAgICAgIAogICAgfSk7CiAgICAKICAgIC8vIEF0dGFjaCBhdHRyaWJ1dGVzIChlLmcuLCAia2V5IiwgInoiKSB0byBwbG90bHkgZXZlbnQgZGF0YQogICAgZnVuY3Rpb24gZXZlbnREYXRhV2l0aEtleShldmVudERhdGEpIHsKICAgICAgaWYgKGV2ZW50RGF0YSA9PT0gdW5kZWZpbmVkIHx8ICFldmVudERhdGEuaGFzT3duUHJvcGVydHkoInBvaW50cyIpKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgcmV0dXJuIGV2ZW50RGF0YS5wb2ludHMubWFwKGZ1bmN0aW9uKHB0KSB7CiAgICAgICAgdmFyIG9iaiA9IHsKICAgICAgICAgIGN1cnZlTnVtYmVyOiBwdC5jdXJ2ZU51bWJlciwgCiAgICAgICAgICBwb2ludE51bWJlcjogcHQucG9pbnROdW1iZXIsIAogICAgICAgICAgeDogcHQueCwKICAgICAgICAgIHk6IHB0LnkKICAgICAgICB9OwogICAgICAgIAogICAgICAgIC8vIElmICd6JyBpcyByZXBvcnRlZCB3aXRoIHRoZSBldmVudCBkYXRhLCB0aGVuIHVzZSBpdCEKICAgICAgICBpZiAocHQuaGFzT3duUHJvcGVydHkoInoiKSkgewogICAgICAgICAgb2JqLnogPSBwdC56OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAocHQuaGFzT3duUHJvcGVydHkoImN1c3RvbWRhdGEiKSkgewogICAgICAgICAgb2JqLmN1c3RvbWRhdGEgPSBwdC5jdXN0b21kYXRhOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiAKICAgICAgICAgIFRMO0RSOiAoSSB0aGluaykgd2UgaGF2ZSB0byBzZWxlY3QgdGhlIGdyYXBoIGRpdiAoYWdhaW4pIHRvIGF0dGFjaCBrZXlzLi4uCiAgICAgICAgICAKICAgICAgICAgIFdoeT8gUmVtZW1iZXIgdGhhdCBjcm9zc3RhbGsgd2lsbCBkeW5hbWljYWxseSBhZGQvZGVsZXRlIHRyYWNlcyAKICAgICAgICAgIChzZWUgdHJhY2VNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVTZWxlY3Rpb24oKSBiZWxvdykKICAgICAgICAgIEZvciB0aGlzIHJlYXNvbiwgd2UgY2FuJ3Qgc2ltcGx5IGdyYWIga2V5cyBmcm9tIHguZGF0YSAobGlrZSB3ZSBkaWQgcHJldmlvdXNseSkKICAgICAgICAgIE1vcmVvdmVyLCB3ZSBjYW4ndCB1c2UgX2Z1bGxEYXRhLCBzaW5jZSB0aGF0IGRvZXNuJ3QgaW5jbHVkZSAKICAgICAgICAgIHVub2ZmaWNpYWwgYXR0cmlidXRlcy4gSXQncyB0cnVlIHRoYXQgY2xpY2svaG92ZXIgZXZlbnRzIGZpcmUgd2l0aCAKICAgICAgICAgIHB0LmRhdGEsIGJ1dCBkcmFnIGV2ZW50cyBkb24ndC4uLgogICAgICAgICovCiAgICAgICAgdmFyIGdkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWwuaWQpOwogICAgICAgIHZhciB0cmFjZSA9IGdkLmRhdGFbcHQuY3VydmVOdW1iZXJdOwogICAgICAgIAogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICB2YXIgYXR0cnNUb0F0dGFjaCA9IFsia2V5Il07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIHNpbXBsZSBrZXlzIGZpcmUgdGhlIHdob2xlIGtleQogICAgICAgICAgb2JqLmtleSA9IHRyYWNlLmtleTsKICAgICAgICAgIHZhciBhdHRyc1RvQXR0YWNoID0gW107CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnNUb0F0dGFjaC5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIGF0dHIgPSB0cmFjZVthdHRyc1RvQXR0YWNoW2ldXTsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGF0dHIpKSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgcHQucG9pbnROdW1iZXIgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICAgICAgb2JqW2F0dHJzVG9BdHRhY2hbaV1dID0gYXR0cltwdC5wb2ludE51bWJlcl07CiAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwdC5wb2ludE51bWJlcikpIHsKICAgICAgICAgICAgICBvYmpbYXR0cnNUb0F0dGFjaFtpXV0gPSBhdHRyW3B0LnBvaW50TnVtYmVyWzBdXVtwdC5wb2ludE51bWJlclsxXV07CiAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwdC5wb2ludE51bWJlcnMpKSB7CiAgICAgICAgICAgICAgb2JqW2F0dHJzVG9BdHRhY2hbaV1dID0gcHQucG9pbnROdW1iZXJzLm1hcChmdW5jdGlvbihpZHgpIHsgcmV0dXJuIGF0dHJbaWR4XTsgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9iajsKICAgICAgfSk7CiAgICB9CiAgICAKICAgIAogICAgdmFyIGxlZ2VuZEV2ZW50RGF0YSA9IGZ1bmN0aW9uKGQpIHsKICAgICAgLy8gaWYgbGVnZW5kZ3JvdXAgaXMgbm90IHJlbGV2YW50IGp1c3QgcmV0dXJuIHRoZSB0cmFjZQogICAgICB2YXIgdHJhY2UgPSBkLmRhdGFbZC5jdXJ2ZU51bWJlcl07CiAgICAgIGlmICghdHJhY2UubGVnZW5kZ3JvdXApIHJldHVybiB0cmFjZTsKICAgICAgCiAgICAgIC8vIGlmIGxlZ2VuZGdyb3VwIHdhcyBzcGVjaWZpZWQsIHJldHVybiBhbGwgdHJhY2VzIHRoYXQgbWF0Y2ggdGhlIGdyb3VwCiAgICAgIHZhciBsZWdlbmRncnBzID0gZC5kYXRhLm1hcChmdW5jdGlvbih0cmFjZSl7IHJldHVybiB0cmFjZS5sZWdlbmRncm91cDsgfSk7CiAgICAgIHZhciB0cmFjZXMgPSBbXTsKICAgICAgZm9yIChpID0gMDsgaSA8IGxlZ2VuZGdycHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAobGVnZW5kZ3Jwc1tpXSA9PSB0cmFjZS5sZWdlbmRncm91cCkgewogICAgICAgICAgdHJhY2VzLnB1c2goZC5kYXRhW2ldKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiB0cmFjZXM7CiAgICB9OwoKICAgIAogICAgLy8gc2VuZCB1c2VyIGlucHV0IGV2ZW50IGRhdGEgdG8gc2hpbnkKICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUgJiYgU2hpbnkuc2V0SW5wdXRWYWx1ZSkgewogICAgICAKICAgICAgLy8gU29tZSBldmVudHMgY2xlYXIgb3RoZXIgaW5wdXQgdmFsdWVzCiAgICAgIC8vIFRPRE86IGFsd2F5cyByZWdpc3RlciB0aGVzZT8KICAgICAgdmFyIGV2ZW50Q2xlYXJNYXAgPSB7CiAgICAgICAgcGxvdGx5X2Rlc2VsZWN0OiBbInBsb3RseV9zZWxlY3RlZCIsICJwbG90bHlfc2VsZWN0aW5nIiwgInBsb3RseV9icnVzaGVkIiwgInBsb3RseV9icnVzaGluZyIsICJwbG90bHlfY2xpY2siXSwKICAgICAgICBwbG90bHlfdW5ob3ZlcjogWyJwbG90bHlfaG92ZXIiXSwKICAgICAgICBwbG90bHlfZG91YmxlY2xpY2s6IFsicGxvdGx5X2NsaWNrIl0KICAgICAgfTsKICAgIAogICAgICBPYmplY3Qua2V5cyhldmVudENsZWFyTWFwKS5tYXAoZnVuY3Rpb24oZXZ0KSB7CiAgICAgICAgZ3JhcGhEaXYub24oZXZ0LCBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBpbnB1dHNUb0NsZWFyID0gZXZlbnRDbGVhck1hcFtldnRdOwogICAgICAgICAgaW5wdXRzVG9DbGVhci5tYXAoZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICAgICAgU2hpbnkuc2V0SW5wdXRWYWx1ZShpbnB1dCArICItIiArIHguc291cmNlLCBudWxsLCB7cHJpb3JpdHk6ICJldmVudCJ9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgCiAgICAgIHZhciBldmVudERhdGFGdW5jdGlvbk1hcCA9IHsKICAgICAgICBwbG90bHlfY2xpY2s6IGV2ZW50RGF0YVdpdGhLZXksCiAgICAgICAgcGxvdGx5X3N1bmJ1cnN0Y2xpY2s6IGV2ZW50RGF0YVdpdGhLZXksCiAgICAgICAgcGxvdGx5X2hvdmVyOiBldmVudERhdGFXaXRoS2V5LAogICAgICAgIHBsb3RseV91bmhvdmVyOiBldmVudERhdGFXaXRoS2V5LAogICAgICAgIC8vIElmICdwbG90bHlfc2VsZWN0ZWQnIGhhcyBhbHJlYWR5IGJlZW4gZmlyZWQsIGFuZCB5b3UgY2xpY2sKICAgICAgICAvLyBvbiB0aGUgcGxvdCBhZnRlcndhcmRzLCB0aGlzIGV2ZW50IGZpcmVzIGB1bmRlZmluZWRgPyE/CiAgICAgICAgLy8gVGhhdCBtaWdodCBiZSBjb25zaWRlcmVkIGEgcGxvdGx5LmpzIGJ1ZywgYnV0IGl0IGRvZXNuJ3QgbWFrZSAKICAgICAgICAvLyBzZW5zZSBmb3IgdGhpcyBpbnB1dCBjaGFuZ2UgdG8gb2NjdXIgaWYgYGRgIGlzIGZhbHN5IGJlY2F1c2UsCiAgICAgICAgLy8gZXZlbiBpbiB0aGUgZW1wdHkgc2VsZWN0aW9uIGNhc2UsIGBkYCBpcyB0cnV0aHkgKGFuIG9iamVjdCksCiAgICAgICAgLy8gYW5kIHRoZSAncGxvdGx5X2Rlc2VsZWN0JyBldmVudCB3aWxsIHJlc2V0IHRoaXMgaW5wdXQKICAgICAgICBwbG90bHlfc2VsZWN0ZWQ6IGZ1bmN0aW9uKGQpIHsgaWYgKGQpIHsgcmV0dXJuIGV2ZW50RGF0YVdpdGhLZXkoZCk7IH0gfSwKICAgICAgICBwbG90bHlfc2VsZWN0aW5nOiBmdW5jdGlvbihkKSB7IGlmIChkKSB7IHJldHVybiBldmVudERhdGFXaXRoS2V5KGQpOyB9IH0sCiAgICAgICAgcGxvdGx5X2JydXNoZWQ6IGZ1bmN0aW9uKGQpIHsKICAgICAgICAgIGlmIChkKSB7IHJldHVybiBkLnJhbmdlID8gZC5yYW5nZSA6IGQubGFzc29Qb2ludHM7IH0KICAgICAgICB9LAogICAgICAgIHBsb3RseV9icnVzaGluZzogZnVuY3Rpb24oZCkgewogICAgICAgICAgaWYgKGQpIHsgcmV0dXJuIGQucmFuZ2UgPyBkLnJhbmdlIDogZC5sYXNzb1BvaW50czsgfQogICAgICAgIH0sCiAgICAgICAgcGxvdGx5X2xlZ2VuZGNsaWNrOiBsZWdlbmRFdmVudERhdGEsCiAgICAgICAgcGxvdGx5X2xlZ2VuZGRvdWJsZWNsaWNrOiBsZWdlbmRFdmVudERhdGEsCiAgICAgICAgcGxvdGx5X2NsaWNrYW5ub3RhdGlvbjogZnVuY3Rpb24oZCkgeyByZXR1cm4gZC5mdWxsQW5ub3RhdGlvbiB9CiAgICAgIH07CiAgICAgIAogICAgICB2YXIgcmVnaXN0ZXJTaGlueVZhbHVlID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICB2YXIgZXZlbnREYXRhUHJlUHJvY2Vzc29yID0gZXZlbnREYXRhRnVuY3Rpb25NYXBbZXZlbnRdIHx8IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQgPyBkIDogZWwuaWQgfTsKICAgICAgICAvLyBzb21lIGV2ZW50cyBhcmUgdW5pcXVlIHRvIHRoZSBSIHBhY2thZ2UKICAgICAgICB2YXIgcGxvdGx5SlNldmVudCA9IChldmVudCA9PSAicGxvdGx5X2JydXNoZWQiKSA/ICJwbG90bHlfc2VsZWN0ZWQiIDogKGV2ZW50ID09ICJwbG90bHlfYnJ1c2hpbmciKSA/ICJwbG90bHlfc2VsZWN0aW5nIiA6IGV2ZW50OwogICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBldmVudAogICAgICAgIGdyYXBoRGl2Lm9uKHBsb3RseUpTZXZlbnQsIGZ1bmN0aW9uKGQpIHsKICAgICAgICAgIFNoaW55LnNldElucHV0VmFsdWUoCiAgICAgICAgICAgIGV2ZW50ICsgIi0iICsgeC5zb3VyY2UsCiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGV2ZW50RGF0YVByZVByb2Nlc3NvcihkKSksCiAgICAgICAgICAgIHtwcmlvcml0eTogImV2ZW50In0KICAgICAgICAgICk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIAogICAgICB2YXIgc2hpbnlFdmVudHMgPSB4LnNoaW55RXZlbnRzIHx8IFtdOwogICAgICBzaGlueUV2ZW50cy5tYXAocmVnaXN0ZXJTaGlueVZhbHVlKTsKICAgIH0KICAgIAogICAgLy8gR2l2ZW4gYW4gYXJyYXkgb2Yge2N1cnZlTnVtYmVyOiB4LCBwb2ludE51bWJlcjogeX0gb2JqZWN0cywKICAgIC8vIHJldHVybiBhIGhhc2ggb2YgewogICAgLy8gICBzZXQxOiB7dmFsdWU6IFtrZXkxLCBrZXkyLCAuLi5dLCBfaXNTaW1wbGVLZXk6IGZhbHNlfSwgCiAgICAvLyAgIHNldDI6IHt2YWx1ZTogW2tleTMsIGtleTQsIC4uLl0sIF9pc1NpbXBsZUtleTogZmFsc2V9CiAgICAvLyB9CiAgICBmdW5jdGlvbiBwb2ludHNUb0tleXMocG9pbnRzKSB7CiAgICAgIHZhciBrZXlzQnlTZXQgPSB7fTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAKICAgICAgICB2YXIgdHJhY2UgPSBncmFwaERpdi5kYXRhW3BvaW50c1tpXS5jdXJ2ZU51bWJlcl07CiAgICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgIXRyYWNlLnNldCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIHNldCBkZWZhdWx0cyBmb3IgdGhpcyBrZXlTZXQKICAgICAgICAvLyBub3RlIHRoYXQgd2UgZG9uJ3QgdHJhY2sgdGhlIG5lc3RlZCBwcm9wZXJ0eSAoeWV0KSBzaW5jZSB3ZSBhbHdheXMgCiAgICAgICAgLy8gZW1pdCB0aGUgdW5pb24gLS0gaHR0cDovL2Nwc2lldmVydC5naXRodWIuaW8vdGFsa3MvMjAxNjEyMTJiLyMyMQogICAgICAgIGtleXNCeVNldFt0cmFjZS5zZXRdID0ga2V5c0J5U2V0W3RyYWNlLnNldF0gfHwgewogICAgICAgICAgdmFsdWU6IFtdLAogICAgICAgICAgX2lzU2ltcGxlS2V5OiB0cmFjZS5faXNTaW1wbGVLZXkKICAgICAgICB9OwogICAgICAgIAogICAgICAgIC8vIFVzZSBwb2ludE51bWJlciBieSBkZWZhdWx0LCBidXQgYWdncmVnYXRlZCB0cmFjZXMgc2hvdWxkIGVtaXQgcG9pbnROdW1iZXJzCiAgICAgICAgdmFyIHB0TnVtID0gcG9pbnRzW2ldLnBvaW50TnVtYmVyOwogICAgICAgIHZhciBoYXNQdE51bSA9IHR5cGVvZiBwdE51bSA9PT0gIm51bWJlciI7CiAgICAgICAgdmFyIHB0TnVtID0gaGFzUHROdW0gPyBwdE51bSA6IHBvaW50c1tpXS5wb2ludE51bWJlcnM7CiAgICAgICAgCiAgICAgICAgLy8gc2VsZWN0aW5nIGEgcG9pbnQgb2YgYSAic2ltcGxlIiB0cmFjZSBtZWFuczogc2VsZWN0IHRoZSAKICAgICAgICAvLyBlbnRpcmUga2V5IGF0dGFjaGVkIHRvIHRoaXMgdHJhY2UsIHdoaWNoIGlzIHVzZWZ1bCBmb3IsCiAgICAgICAgLy8gc2F5IGNsaWNraW5nIG9uIGEgZml0dGVkIGxpbmUgdG8gc2VsZWN0IGNvcnJlc3BvbmRpbmcgb2JzZXJ2YXRpb25zIAogICAgICAgIHZhciBrZXkgPSB0cmFjZS5faXNTaW1wbGVLZXkgPyB0cmFjZS5rZXkgOiBBcnJheS5pc0FycmF5KHB0TnVtKSA/IHB0TnVtLm1hcChmdW5jdGlvbihpZHgpIHsgcmV0dXJuIHRyYWNlLmtleVtpZHhdOyB9KSA6IHRyYWNlLmtleVtwdE51bV07CiAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDg2NTAyNS9tZXJnZS1mbGF0dGVuLWFuLWFycmF5LW9mLWFycmF5cy1pbi1qYXZhc2NyaXB0CiAgICAgICAgdmFyIGtleUZsYXQgPSB0cmFjZS5faXNOZXN0ZWRLZXkgPyBbXS5jb25jYXQuYXBwbHkoW10sIGtleSkgOiBrZXk7CiAgICAgICAgCiAgICAgICAgLy8gVE9ETzogYmV0dGVyIHRvIG9ubHkgYWRkIG5ldyB2YWx1ZXM/CiAgICAgICAga2V5c0J5U2V0W3RyYWNlLnNldF0udmFsdWUgPSBrZXlzQnlTZXRbdHJhY2Uuc2V0XS52YWx1ZS5jb25jYXQoa2V5RmxhdCk7CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiBrZXlzQnlTZXQ7CiAgICB9CiAgICAKICAgIAogICAgeC5oaWdobGlnaHQuY29sb3IgPSB4LmhpZ2hsaWdodC5jb2xvciB8fCBbXTsKICAgIC8vIG1ha2Ugc3VyZSBoaWdobGlnaHQgY29sb3IgaXMgYW4gYXJyYXkKICAgIGlmICghQXJyYXkuaXNBcnJheSh4LmhpZ2hsaWdodC5jb2xvcikpIHsKICAgICAgeC5oaWdobGlnaHQuY29sb3IgPSBbeC5oaWdobGlnaHQuY29sb3JdOwogICAgfQoKICAgIHZhciB0cmFjZU1hbmFnZXIgPSBuZXcgVHJhY2VNYW5hZ2VyKGdyYXBoRGl2LCB4LmhpZ2hsaWdodCk7CgogICAgLy8gR2F0aGVyIGFsbCAqdW5pcXVlKiBzZXRzLgogICAgdmFyIGFsbFNldHMgPSBbXTsKICAgIGZvciAodmFyIGN1cnZlSWR4ID0gMDsgY3VydmVJZHggPCB4LmRhdGEubGVuZ3RoOyBjdXJ2ZUlkeCsrKSB7CiAgICAgIHZhciBuZXdTZXQgPSB4LmRhdGFbY3VydmVJZHhdLnNldDsKICAgICAgaWYgKG5ld1NldCkgewogICAgICAgIGlmIChhbGxTZXRzLmluZGV4T2YobmV3U2V0KSA9PT0gLTEpIHsKICAgICAgICAgIGFsbFNldHMucHVzaChuZXdTZXQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIHJlZ2lzdGVyIGV2ZW50IGxpc3RlbmVycyBmb3IgYWxsIHNldHMKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsU2V0cy5sZW5ndGg7IGkrKykgewogICAgICAKICAgICAgdmFyIHNldCA9IGFsbFNldHNbaV07CiAgICAgIHZhciBzZWxlY3Rpb24gPSBuZXcgY3Jvc3N0YWxrLlNlbGVjdGlvbkhhbmRsZShzZXQpOwogICAgICB2YXIgZmlsdGVyID0gbmV3IGNyb3NzdGFsay5GaWx0ZXJIYW5kbGUoc2V0KTsKICAgICAgCiAgICAgIHZhciBmaWx0ZXJDaGFuZ2UgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgcmVtb3ZlQnJ1c2goZWwpOwogICAgICAgIHRyYWNlTWFuYWdlci51cGRhdGVGaWx0ZXIoc2V0LCBlLnZhbHVlKTsKICAgICAgfTsKICAgICAgZmlsdGVyLm9uKCJjaGFuZ2UiLCBmaWx0ZXJDaGFuZ2UpOwogICAgICAKICAgICAgCiAgICAgIHZhciBzZWxlY3Rpb25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgCiAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgJ3Bsb3RseV9zZWxlY3RlZCcgbm93IGZpcmluZyBwcmV2aW91c2x5IHNlbGVjdGVkCiAgICAgICAgLy8gcG9pbnRzIChpbiBhZGRpdGlvbiB0byBuZXcgb25lcykgd2hlbiBob2xkaW5nIHNoaWZ0IGtleS4gSW4gb3VyIGNhc2UsCiAgICAgICAgLy8gd2UganVzdCB3YW50IHRoZSBuZXcga2V5cyAKICAgICAgICBpZiAoeC5oaWdobGlnaHQub24gPT09ICJwbG90bHlfc2VsZWN0ZWQiICYmIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnRTaGlmdCkgewogICAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE4NzUxOC9ob3ctdG8tZ2V0LXRoZS1kaWZmZXJlbmNlLWJldHdlZW4tdHdvLWFycmF5cy1pbi1qYXZhc2NyaXB0CiAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZGlmZiA9IGZ1bmN0aW9uKGEpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oaSkge3JldHVybiBhLmluZGV4T2YoaSkgPCAwO30pOwogICAgICAgICAgfTsKICAgICAgICAgIGUudmFsdWUgPSBlLnZhbHVlLmRpZmYoZS5vbGRWYWx1ZSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIGFycmF5IG9mICJldmVudCBvYmplY3RzIiB0cmFja2luZyB0aGUgc2VsZWN0aW9uIGhpc3RvcnkKICAgICAgICAvLyB0aGlzIGlzIHVzZWQgdG8gYXZvaWQgYWRkaW5nIHJlZHVuZGFudCBzZWxlY3Rpb25zCiAgICAgICAgdmFyIHNlbGVjdGlvbkhpc3RvcnkgPSBjcm9zc3RhbGsudmFyKCJwbG90bHlTZWxlY3Rpb25IaXN0b3J5IikuZ2V0KCkgfHwgW107CiAgICAgICAgCiAgICAgICAgLy8gQ29uc3RydWN0IGFuIGV2ZW50IG9iamVjdCAiZGVmaW5pbmciIHRoZSBjdXJyZW50IGV2ZW50LiAKICAgICAgICB2YXIgZXZlbnQgPSB7CiAgICAgICAgICByZWNlaXZlcklEOiB0cmFjZU1hbmFnZXIuZ2QuaWQsCiAgICAgICAgICBwbG90bHlTZWxlY3Rpb25Db2xvdXI6IGNyb3NzdGFsay5ncm91cChzZXQpLnZhcigicGxvdGx5U2VsZWN0aW9uQ29sb3VyIikuZ2V0KCkKICAgICAgICB9OwogICAgICAgIGV2ZW50W3NldF0gPSBlLnZhbHVlOwogICAgICAgIC8vIFRPRE86IGlzIHRoZXJlIGEgc21hcnRlciB3YXkgdG8gY2hlY2sgb2JqZWN0IGVxdWFsaXR5PwogICAgICAgIGlmIChzZWxlY3Rpb25IaXN0b3J5Lmxlbmd0aCA+IDApIHsKICAgICAgICAgIHZhciBldiA9IEpTT04uc3RyaW5naWZ5KGV2ZW50KTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0aW9uSGlzdG9yeS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgc2VsID0gSlNPTi5zdHJpbmdpZnkoc2VsZWN0aW9uSGlzdG9yeVtpXSk7CiAgICAgICAgICAgIGlmIChzZWwgPT0gZXYpIHsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gYWNjdW11bGF0ZSBoaXN0b3J5IGZvciBwZXJzaXN0ZW50IHNlbGVjdGlvbgogICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCkgewogICAgICAgICAgc2VsZWN0aW9uSGlzdG9yeSA9IFtldmVudF07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlbGVjdGlvbkhpc3RvcnkucHVzaChldmVudCk7CiAgICAgICAgfQogICAgICAgIGNyb3NzdGFsay52YXIoInBsb3RseVNlbGVjdGlvbkhpc3RvcnkiKS5zZXQoc2VsZWN0aW9uSGlzdG9yeSk7CiAgICAgICAgCiAgICAgICAgLy8gZG8gdGhlIGFjdHVhbCB1cGRhdGluZyBvZiB0cmFjZXMsIGZyYW1lcywgYW5kIHRoZSBzZWxlY3RpemUgd2lkZ2V0CiAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIGUudmFsdWUpOwogICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3RpemUvc2VsZWN0aXplLmpzL2Jsb2IvbWFzdGVyL2RvY3MvYXBpLm1kI21ldGhvZHNfaXRlbXMKICAgICAgICBpZiAoeC5zZWxlY3RpemUpIHsKICAgICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCB8fCBlLnZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgIHNlbGVjdGl6ZS5jbGVhcih0cnVlKTsKICAgICAgICAgIH0KICAgICAgICAgIHNlbGVjdGl6ZS5hZGRJdGVtcyhlLnZhbHVlLCB0cnVlKTsKICAgICAgICAgIHNlbGVjdGl6ZS5jbG9zZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZWxlY3Rpb24ub24oImNoYW5nZSIsIHNlbGVjdGlvbkNoYW5nZSk7CiAgICAgIAogICAgICAvLyBTZXQgYSBjcm9zc3RhbGsgdmFyaWFibGUgc2VsZWN0aW9uIHZhbHVlLCB0cmlnZ2VyaW5nIGFuIHVwZGF0ZQogICAgICB2YXIgdHVybk9uID0gZnVuY3Rpb24oZSkgewogICAgICAgIGlmIChlKSB7CiAgICAgICAgICB2YXIgc2VsZWN0ZWRLZXlzID0gcG9pbnRzVG9LZXlzKGUucG9pbnRzKTsKICAgICAgICAgIC8vIEtleXMgYXJlIGdyb3VwIG5hbWVzLCB2YWx1ZXMgYXJlIGFycmF5IG9mIHNlbGVjdGVkIGtleXMgZnJvbSBncm91cC4KICAgICAgICAgIGZvciAodmFyIHNldCBpbiBzZWxlY3RlZEtleXMpIHsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkS2V5cy5oYXNPd25Qcm9wZXJ0eShzZXQpKSB7CiAgICAgICAgICAgICAgc2VsZWN0aW9uLnNldChzZWxlY3RlZEtleXNbc2V0XS52YWx1ZSwge3NlbmRlcjogZWx9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgaWYgKHguaGlnaGxpZ2h0LmRlYm91bmNlID4gMCkgewogICAgICAgIHR1cm5PbiA9IGRlYm91bmNlKHR1cm5PbiwgeC5oaWdobGlnaHQuZGVib3VuY2UpOwogICAgICB9CiAgICAgIGdyYXBoRGl2Lm9uKHguaGlnaGxpZ2h0Lm9uLCB0dXJuT24pOwogICAgICAKICAgICAgZ3JhcGhEaXYub24oeC5oaWdobGlnaHQub2ZmLCBmdW5jdGlvbiB0dXJuT2ZmKGUpIHsKICAgICAgICAvLyByZW1vdmUgYW55IHZpc3VhbCBjbHVlcwogICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICAvLyByZW1vdmUgYW55IHNlbGVjdGlvbiBoaXN0b3J5CiAgICAgICAgY3Jvc3N0YWxrLnZhcigicGxvdGx5U2VsZWN0aW9uSGlzdG9yeSIpLnNldChudWxsKTsKICAgICAgICAvLyB0cmlnZ2VyIHRoZSBhY3R1YWwgcmVtb3ZhbCBvZiBzZWxlY3Rpb24gdHJhY2VzCiAgICAgICAgc2VsZWN0aW9uLnNldChudWxsLCB7c2VuZGVyOiBlbH0pOwogICAgICB9KTsKICAgICAgICAgIAogICAgICAvLyByZWdpc3RlciBhIGNhbGxiYWNrIGZvciBzZWxlY3RpemUgc28gdGhhdCB0aGVyZSBpcyBiaS1kaXJlY3Rpb25hbAogICAgICAvLyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHdpZGdldCBhbmQgZGlyZWN0IG1hbmlwdWxhdGlvbiBldmVudHMKICAgICAgaWYgKHguc2VsZWN0aXplKSB7CiAgICAgICAgdmFyIHNlbGVjdGl6ZUlEID0gT2JqZWN0LmtleXMoeC5zZWxlY3RpemUpW2ldOwogICAgICAgIHZhciBpdGVtcyA9IHguc2VsZWN0aXplW3NlbGVjdGl6ZUlEXS5pdGVtczsKICAgICAgICB2YXIgZmlyc3QgPSBbe3ZhbHVlOiAiIiwgbGFiZWw6ICIoQWxsKSJ9XTsKICAgICAgICB2YXIgb3B0cyA9IHsKICAgICAgICAgIG9wdGlvbnM6IGZpcnN0LmNvbmNhdChpdGVtcyksCiAgICAgICAgICBzZWFyY2hGaWVsZDogImxhYmVsIiwKICAgICAgICAgIHZhbHVlRmllbGQ6ICJ2YWx1ZSIsCiAgICAgICAgICBsYWJlbEZpZWxkOiAibGFiZWwiLAogICAgICAgICAgbWF4SXRlbXM6IDUwCiAgICAgICAgfTsKICAgICAgICB2YXIgc2VsZWN0ID0gJCgiIyIgKyBzZWxlY3RpemVJRCkuZmluZCgic2VsZWN0IilbMF07CiAgICAgICAgdmFyIHNlbGVjdGl6ZSA9ICQoc2VsZWN0KS5zZWxlY3RpemUob3B0cylbMF0uc2VsZWN0aXplOwogICAgICAgIC8vIE5PVEU6IHRoaXMgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gKmRpcmVjdGx5KiBhbHRlcmluZyAKICAgICAgICAvLyBkcm9wZG93biBpdGVtcwogICAgICAgIHNlbGVjdGl6ZS5vbigiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgY3VycmVudEl0ZW1zID0gdHJhY2VNYW5hZ2VyLmdyb3VwU2VsZWN0aW9uc1tzZXRdIHx8IFtdOwogICAgICAgICAgaWYgKCF4LmhpZ2hsaWdodC5wZXJzaXN0ZW50KSB7CiAgICAgICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50SXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBzZWxlY3RpemUucmVtb3ZlSXRlbShjdXJyZW50SXRlbXNbaV0sIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbmV3SXRlbXMgPSBzZWxlY3RpemUuaXRlbXMuZmlsdGVyKGZ1bmN0aW9uKGlkeCkgeyAKICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRJdGVtcy5pbmRleE9mKGlkeCkgPCAwOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAobmV3SXRlbXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlU2VsZWN0aW9uKHNldCwgbmV3SXRlbXMpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gSXRlbSBoYXMgYmVlbiByZW1vdmVkLi4uCiAgICAgICAgICAgIC8vIFRPRE86IHRoaXMgbG9naWMgd29uJ3Qgd29yayBmb3IgZHluYW1pY2FsbHkgY2hhbmdpbmcgcGFsZXR0ZSAKICAgICAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIG51bGwpOwogICAgICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlU2VsZWN0aW9uKHNldCwgc2VsZWN0aXplLml0ZW1zKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfSAvLyBlbmQgb2Ygc2VsZWN0aW9uQ2hhbmdlCiAgICAKICB9IC8vIGVuZCBvZiByZW5kZXJWYWx1ZQp9KTsgLy8gZW5kIG9mIHdpZGdldCBkZWZpbml0aW9uCgovKioKICogQHBhcmFtIGdyYXBoRGl2IFRoZSBQbG90bHkgZ3JhcGggZGl2CiAqIEBwYXJhbSBoaWdobGlnaHQgQW4gb2JqZWN0IHdpdGggb3B0aW9ucyBmb3IgdXBkYXRpbmcgc2VsZWN0aW9uKHMpCiAqLwpmdW5jdGlvbiBUcmFjZU1hbmFnZXIoZ3JhcGhEaXYsIGhpZ2hsaWdodCkgewogIC8vIFRoZSBQbG90bHkgZ3JhcGggZGl2CiAgdGhpcy5nZCA9IGdyYXBoRGl2OwoKICAvLyBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZGF0YS4KICAvLyBUT0RPOiB0cnkgdXNpbmcgTGliLmV4dGVuZEZsYXQoKSBhcyBkb25lIGluICAKICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGxvdGx5L3Bsb3RseS5qcy9wdWxsLzExMzYgCiAgdGhpcy5vcmlnRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ3JhcGhEaXYuZGF0YSkpOwogIAogIC8vIGF2b2lkIGRvaW5nIHRoaXMgb3ZlciBhbmQgb3ZlcgogIHRoaXMub3JpZ09wYWNpdHkgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgIHRoaXMub3JpZ09wYWNpdHlbaV0gPSB0aGlzLm9yaWdEYXRhW2ldLm9wYWNpdHkgPT09IDAgPyAwIDogKHRoaXMub3JpZ0RhdGFbaV0ub3BhY2l0eSB8fCAxKTsKICB9CgogIC8vIGtleTogZ3JvdXAgbmFtZSwgdmFsdWU6IG51bGwgb3IgYXJyYXkgb2Yga2V5cyByZXByZXNlbnRpbmcgdGhlCiAgLy8gbW9zdCByZWNlbnRseSByZWNlaXZlZCBzZWxlY3Rpb24gZm9yIHRoYXQgZ3JvdXAuCiAgdGhpcy5ncm91cFNlbGVjdGlvbnMgPSB7fTsKICAKICAvLyBzZWxlY3Rpb24gcGFyYW1ldGVycyAoZS5nLiwgdHJhbnNpZW50IHZlcnN1cyBwZXJzaXN0ZW50IHNlbGVjdGlvbikKICB0aGlzLmhpZ2hsaWdodCA9IGhpZ2hsaWdodDsKfQoKVHJhY2VNYW5hZ2VyLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgewogIC8vIFRPRE86IFVuaG9vayBhbGwgZXZlbnQgaGFuZGxlcnMKfTsKClRyYWNlTWFuYWdlci5wcm90b3R5cGUudXBkYXRlRmlsdGVyID0gZnVuY3Rpb24oZ3JvdXAsIGtleXMpIHsKCiAgaWYgKHR5cGVvZihrZXlzKSA9PT0gInVuZGVmaW5lZCIgfHwga2V5cyA9PT0gbnVsbCkgewogICAgCiAgICB0aGlzLmdkLmRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMub3JpZ0RhdGEpKTsKICAgIAogIH0gZWxzZSB7CiAgCiAgICB2YXIgdHJhY2VzID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIHRyYWNlID0gdGhpcy5vcmlnRGF0YVtpXTsKICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgdHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHZhciBtYXRjaEZ1bmMgPSBnZXRNYXRjaEZ1bmModHJhY2UpOwogICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoRnVuYyh0cmFjZS5rZXksIGtleXMpOwogICAgICAKICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkgewogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICAvLyBzdWJzZXRBcnJheUF0dHJzIGRvZXNuJ3QgbXV0YXRlIHRyYWNlIChpdCBtYWtlcyBhIG1vZGlmaWVkIGNsb25lKQogICAgICAgICAgdHJhY2UgPSBzdWJzZXRBcnJheUF0dHJzKHRyYWNlLCBtYXRjaGVzKTsKICAgICAgICB9CiAgICAgICAgdHJhY2VzLnB1c2godHJhY2UpOwogICAgICB9CiAgICB9CiAgfQogIAogIHRoaXMuZ2QuZGF0YSA9IHRyYWNlczsKICBQbG90bHkucmVkcmF3KHRoaXMuZ2QpOwogIAogIC8vIE5PVEU6IHdlIHB1cnBvc2VseSBkbyBfbm90XyByZXN0b3JlIHNlbGVjdGlvbihzKSwgc2luY2Ugb24gZmlsdGVyLAogIC8vIGF4aXMgbGlrZWx5IHdpbGwgdXBkYXRlLCBjaGFuZ2luZyB0aGUgcGl4ZWwgLT4gZGF0YSBtYXBwaW5nLCBsZWFkaW5nIAogIC8vIHRvIGEgbGlrZWx5IG1pc21hdGNoIGluIHRoZSBicnVzaCBvdXRsaW5lIGFuZCBoaWdobGlnaHRlZCBtYXJrcwogIAp9OwoKVHJhY2VNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVTZWxlY3Rpb24gPSBmdW5jdGlvbihncm91cCwga2V5cykgewogIAogIGlmIChrZXlzICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KGtleXMpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQga2V5cyBhcmd1bWVudDsgbnVsbCBvciBhcnJheSBleHBlY3RlZCIpOwogIH0KICAKICAvLyBpZiBzZWxlY3Rpb24gaGFzIGJlZW4gY2xlYXJlZCwgb3IgaWYgdGhpcyBpcyB0cmFuc2llbnQKICAvLyBzZWxlY3Rpb24sIGRlbGV0ZSB0aGUgInNlbGVjdGlvbiB0cmFjZXMiCiAgdmFyIG5OZXdUcmFjZXMgPSB0aGlzLmdkLmRhdGEubGVuZ3RoIC0gdGhpcy5vcmlnRGF0YS5sZW5ndGg7CiAgaWYgKGtleXMgPT09IG51bGwgfHwgIXRoaXMuaGlnaGxpZ2h0LnBlcnNpc3RlbnQgJiYgbk5ld1RyYWNlcyA+IDApIHsKICAgIHZhciB0cmFjZXNUb1JlbW92ZSA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdkLmRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXMuZ2QuZGF0YVtpXS5faXNDcm9zc3RhbGtUcmFjZSkgdHJhY2VzVG9SZW1vdmUucHVzaChpKTsKICAgIH0KICAgIFBsb3RseS5kZWxldGVUcmFjZXModGhpcy5nZCwgdHJhY2VzVG9SZW1vdmUpOwogICAgdGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdID0ga2V5czsKICB9IGVsc2UgewogICAgLy8gYWRkIHRvIHRoZSBncm91cFNlbGVjdGlvbiwgcmF0aGVyIHRoYW4gb3ZlcndyaXRpbmcgaXQKICAgIC8vIFRPRE86IGNhbiB0aGlzIGJlIHJlbW92ZWQ/CiAgICB0aGlzLmdyb3VwU2VsZWN0aW9uc1tncm91cF0gPSB0aGlzLmdyb3VwU2VsZWN0aW9uc1tncm91cF0gfHwgW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGsgPSBrZXlzW2ldOwogICAgICBpZiAodGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdLmluZGV4T2YoaykgPCAwKSB7CiAgICAgICAgdGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdLnB1c2goayk7CiAgICAgIH0KICAgIH0KICB9CiAgCiAgaWYgKGtleXMgPT09IG51bGwpIHsKICAgIAogICAgUGxvdGx5LnJlc3R5bGUodGhpcy5nZCwgeyJvcGFjaXR5IjogdGhpcy5vcmlnT3BhY2l0eX0pOwogICAgCiAgfSBlbHNlIGlmIChrZXlzLmxlbmd0aCA+PSAxKSB7CiAgICAKICAgIC8vIHBsYWNlaG9sZGVyIGZvciBuZXcgInNlbGVjdGlvbiB0cmFjZXMiCiAgICB2YXIgdHJhY2VzID0gW107CiAgICAvLyB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBSL2hpZ2hsaWdodC5SCiAgICB2YXIgc2VsZWN0aW9uQ29sb3VyID0gY3Jvc3N0YWxrLmdyb3VwKGdyb3VwKS52YXIoInBsb3RseVNlbGVjdGlvbkNvbG91ciIpLmdldCgpIHx8IAogICAgICB0aGlzLmhpZ2hsaWdodC5jb2xvclswXTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgLy8gVE9ETzogdHJ5IHVzaW5nIExpYi5leHRlbmRGbGF0KCkgYXMgZG9uZSBpbiAgCiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wbG90bHkvcGxvdGx5LmpzL3B1bGwvMTEzNiAKICAgICAgdmFyIHRyYWNlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdkLmRhdGFbaV0pKTsKICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgdHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIC8vIEdldCBzb3J0ZWQgYXJyYXkgb2YgbWF0Y2hpbmcgaW5kaWNlcyBpbiB0cmFjZS5rZXkKICAgICAgdmFyIG1hdGNoRnVuYyA9IGdldE1hdGNoRnVuYyh0cmFjZSk7CiAgICAgIHZhciBtYXRjaGVzID0gbWF0Y2hGdW5jKHRyYWNlLmtleSwga2V5cyk7CiAgICAgIAogICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgLy8gSWYgdGhpcyBpcyBhICJzaW1wbGUiIGtleSwgdGhhdCBtZWFucyBzZWxlY3QgdGhlIGVudGlyZSB0cmFjZQogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICB0cmFjZSA9IHN1YnNldEFycmF5QXR0cnModHJhY2UsIG1hdGNoZXMpOwogICAgICAgIH0KICAgICAgICAvLyByZWFjaCBpbnRvIHRoZSBmdWxsIHRyYWNlIG9iamVjdCBzbyB3ZSBjYW4gcHJvcGVybHkgcmVmbGVjdCB0aGUgCiAgICAgICAgLy8gc2VsZWN0aW9uIGF0dHJpYnV0ZXMgaW4gZXZlcnkgdmlldwogICAgICAgIHZhciBkID0gdGhpcy5nZC5fZnVsbERhdGFbaV07CiAgICAgICAgCiAgICAgICAgLyogCiAgICAgICAgLyBSZWN1cnNpdmVseSBpbmhlcml0IHNlbGVjdGlvbiBhdHRyaWJ1dGVzIGZyb20gdmFyaW91cyBzb3VyY2VzLCAKICAgICAgICAvIGluIG9yZGVyIG9mIHByZWZlcmVuY2U6CiAgICAgICAgLyAgKDEpIG9mZmljaWFsIHBsb3RseS5qcyBzZWxlY3RlZCBhdHRyaWJ1dGUKICAgICAgICAvICAoMikgaGlnaGxpZ2h0KHNlbGVjdGVkID0gYXR0cnNfc2VsZWN0ZWQoLi4uKSkKICAgICAgICAqLwogICAgICAgIC8vIFRPRE86IGl0IHdvdWxkIGJlIG5lYXQgdG8gaGF2ZSBhIGRyb3Bkb3duIHRvIGR5bmFtaWNhbGx5IHNwZWNpZnkgdGhlc2UhCiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdHJhY2UsIHRoaXMuaGlnaGxpZ2h0LnNlbGVjdGVkKTsKICAgICAgICAKICAgICAgICAvLyBpZiBpdCBpcyBkZWZpbmVkLCBvdmVycmlkZSBjb2xvciB3aXRoIHRoZSAiZHluYW1pYyBicnVzaCBjb2xvciIiCiAgICAgICAgaWYgKGQubWFya2VyKSB7CiAgICAgICAgICB0cmFjZS5tYXJrZXIgPSB0cmFjZS5tYXJrZXIgfHwge307CiAgICAgICAgICB0cmFjZS5tYXJrZXIuY29sb3IgPSAgc2VsZWN0aW9uQ29sb3VyIHx8IHRyYWNlLm1hcmtlci5jb2xvciB8fCBkLm1hcmtlci5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQubGluZSkgewogICAgICAgICAgdHJhY2UubGluZSA9IHRyYWNlLmxpbmUgfHwge307CiAgICAgICAgICB0cmFjZS5saW5lLmNvbG9yID0gIHNlbGVjdGlvbkNvbG91ciB8fCB0cmFjZS5saW5lLmNvbG9yIHx8IGQubGluZS5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQudGV4dGZvbnQpIHsKICAgICAgICAgIHRyYWNlLnRleHRmb250ID0gdHJhY2UudGV4dGZvbnQgfHwge307CiAgICAgICAgICB0cmFjZS50ZXh0Zm9udC5jb2xvciA9ICBzZWxlY3Rpb25Db2xvdXIgfHwgdHJhY2UudGV4dGZvbnQuY29sb3IgfHwgZC50ZXh0Zm9udC5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQuZmlsbGNvbG9yKSB7CiAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgc2VsZWN0aW9uQ29sb3VyIGluaGVyaXQgYWxwaGEgZnJvbSB0aGUgZXhpc3RpbmcgZmlsbGNvbG9yPwogICAgICAgICAgdHJhY2UuZmlsbGNvbG9yID0gc2VsZWN0aW9uQ29sb3VyIHx8IHRyYWNlLmZpbGxjb2xvciB8fCBkLmZpbGxjb2xvcjsKICAgICAgICB9CiAgICAgICAgLy8gYXR0YWNoIGEgc2Vuc2libGUgbmFtZS9sZWdlbmRncm91cAogICAgICAgIHRyYWNlLm5hbWUgPSB0cmFjZS5uYW1lIHx8IGtleXMuam9pbigiPGJyIC8+Iik7CiAgICAgICAgdHJhY2UubGVnZW5kZ3JvdXAgPSB0cmFjZS5sZWdlbmRncm91cCB8fCBrZXlzLmpvaW4oIjxiciAvPiIpOwogICAgICAgIAogICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgbWFwcGluZyBiZXR3ZWVuIHRoaXMgbmV3IHRyYWNlIGFuZCB0aGUgdHJhY2UgaXQgdGFyZ2V0cwogICAgICAgIC8vIChuZWNlc3NhcnkgZm9yIHVwZGF0aW5nIGZyYW1lcyB0byByZWZsZWN0IHRoZSBzZWxlY3Rpb24gdHJhY2VzKQogICAgICAgIHRyYWNlLl9vcmlnaW5hbEluZGV4ID0gaTsKICAgICAgICB0cmFjZS5fbmV3SW5kZXggPSB0aGlzLmdkLl9mdWxsRGF0YS5sZW5ndGggKyB0cmFjZXMubGVuZ3RoOwogICAgICAgIHRyYWNlLl9pc0Nyb3NzdGFsa1RyYWNlID0gdHJ1ZTsKICAgICAgICB0cmFjZXMucHVzaCh0cmFjZSk7CiAgICAgIH0KICAgIH0KICAgIAogICAgaWYgKHRyYWNlcy5sZW5ndGggPiAwKSB7CiAgICAgIAogICAgICBQbG90bHkuYWRkVHJhY2VzKHRoaXMuZ2QsIHRyYWNlcykudGhlbihmdW5jdGlvbihnZCkgewogICAgICAgIC8vIGluY3JlbWVudGFsbHkgYWRkIHNlbGVjdGlvbiB0cmFjZXMgdG8gZnJhbWVzCiAgICAgICAgLy8gKHRoaXMgaXMgaGVhdmlseSBpbnNwaXJlZCBieSBQbG90bHkuUGxvdHMubW9kaWZ5RnJhbWVzKCkgCiAgICAgICAgLy8gaW4gc3JjL3Bsb3RzL3Bsb3RzLmpzKQogICAgICAgIHZhciBfaGFzaCA9IGdkLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoOwogICAgICAgIHZhciBfZnJhbWVzID0gZ2QuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMgfHwgW107CiAgICAgICAgCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfZnJhbWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAKICAgICAgICAgIC8vIGFkZCB0byBfZnJhbWVzW2ldLnRyYWNlcyAqaWYqIHRoaXMgZnJhbWUgcmVmZXJlbmNlcyBzZWxlY3RlZCB0cmFjZShzKQogICAgICAgICAgdmFyIG5ld0luZGljZXMgPSBbXTsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdHJhY2VzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgIHZhciB0ciA9IHRyYWNlc1tqXTsKICAgICAgICAgICAgaWYgKF9mcmFtZXNbaV0udHJhY2VzLmluZGV4T2YodHIuX29yaWdpbmFsSW5kZXgpID4gLTEpIHsKICAgICAgICAgICAgICBuZXdJbmRpY2VzLnB1c2godHIuX25ld0luZGV4KTsKICAgICAgICAgICAgICBfZnJhbWVzW2ldLnRyYWNlcy5wdXNoKHRyLl9uZXdJbmRleCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgLy8gbm90aGluZyB0byBkby4uLgogICAgICAgICAgaWYgKG5ld0luZGljZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICB2YXIgY3RyID0gMDsKICAgICAgICAgIHZhciBuRnJhbWVUcmFjZXMgPSBfZnJhbWVzW2ldLmRhdGEubGVuZ3RoOwogICAgICAgICAgCiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5GcmFtZVRyYWNlczsgaisrKSB7CiAgICAgICAgICAgIHZhciBmcmFtZVRyYWNlID0gX2ZyYW1lc1tpXS5kYXRhW2pdOwogICAgICAgICAgICBpZiAoIWZyYW1lVHJhY2Uua2V5IHx8IGZyYW1lVHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgbWF0Y2hGdW5jID0gZ2V0TWF0Y2hGdW5jKGZyYW1lVHJhY2UpOwogICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoRnVuYyhmcmFtZVRyYWNlLmtleSwga2V5cyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgaWYgKCF0cmFjZS5faXNTaW1wbGVLZXkpIHsKICAgICAgICAgICAgICAgIGZyYW1lVHJhY2UgPSBzdWJzZXRBcnJheUF0dHJzKGZyYW1lVHJhY2UsIG1hdGNoZXMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB2YXIgZCA9IGdkLl9mdWxsRGF0YVtuZXdJbmRpY2VzW2N0cl1dOwogICAgICAgICAgICAgIGlmIChkLm1hcmtlcikgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS5tYXJrZXIgPSBkLm1hcmtlcjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGQubGluZSkgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS5saW5lID0gZC5saW5lOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoZC50ZXh0Zm9udCkgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS50ZXh0Zm9udCA9IGQudGV4dGZvbnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGN0ciA9IGN0ciArIDE7CiAgICAgICAgICAgICAgX2ZyYW1lc1tpXS5kYXRhLnB1c2goZnJhbWVUcmFjZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgLy8gdXBkYXRlIGdkLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoCiAgICAgICAgICBfaGFzaFtfZnJhbWVzW2ldLm5hbWVdID0gX2ZyYW1lc1tpXTsKICAgICAgICB9CiAgICAgIAogICAgICB9KTsKICAgICAgCiAgICAgIC8vIGRpbSB0cmFjZXMgdGhhdCBoYXZlIGEgc2V0IG1hdGNoaW5nIHRoZSBzZXQgb2Ygc2VsZWN0aW9uIHNldHMKICAgICAgdmFyIHRyYWNlc1RvRGltID0gW10sCiAgICAgICAgICBvcGFjaXRpZXMgPSBbXSwKICAgICAgICAgIHNldHMgPSBPYmplY3Qua2V5cyh0aGlzLmdyb3VwU2VsZWN0aW9ucyksCiAgICAgICAgICBuID0gdGhpcy5vcmlnRGF0YS5sZW5ndGg7CiAgICAgICAgICAKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICB2YXIgb3BhY2l0eSA9IHRoaXMub3JpZ09wYWNpdHlbaV0gfHwgMTsKICAgICAgICAvLyBoYXZlIHdlIGFscmVhZHkgZGltbWVkIHRoaXMgdHJhY2U/IE9yIGlzIHRoaXMgZXZlbiB3b3J0aCBkb2luZz8KICAgICAgICBpZiAob3BhY2l0eSAhPT0gdGhpcy5nZC5fZnVsbERhdGFbaV0ub3BhY2l0eSB8fCB0aGlzLmhpZ2hsaWdodC5vcGFjaXR5RGltID09PSAxKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgLy8gaXMgdGhpcyBzZXQgYW4gZWxlbWVudCBvZiB0aGUgc2V0IG9mIHNlbGVjdGlvbiBzZXRzPwogICAgICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoZXMoc2V0cywgW3RoaXMuZ2QuZGF0YVtpXS5zZXRdKTsKICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGgpIHsKICAgICAgICAgIHRyYWNlc1RvRGltLnB1c2goaSk7CiAgICAgICAgICBvcGFjaXRpZXMucHVzaChvcGFjaXR5ICogdGhpcy5oaWdobGlnaHQub3BhY2l0eURpbSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICBpZiAodHJhY2VzVG9EaW0ubGVuZ3RoID4gMCkgewogICAgICAgIFBsb3RseS5yZXN0eWxlKHRoaXMuZ2QsIHsib3BhY2l0eSI6IG9wYWNpdGllc30sIHRyYWNlc1RvRGltKTsKICAgICAgICAvLyB0dXJuIG9mZiB0aGUgc2VsZWN0ZWQvdW5zZWxlY3RlZCBBUEkKICAgICAgICBQbG90bHkucmVzdHlsZSh0aGlzLmdkLCB7InNlbGVjdGVkcG9pbnRzIjogbnVsbH0pOwogICAgICB9CiAgICAgIAogICAgfQogICAgCiAgfQp9OwoKLyogCk5vdGU6IGluIGFsbCBvZiB0aGVzZSBtYXRjaCBmdW5jdGlvbnMsIHdlIGFzc3VtZSBuZWVkbGVTZXQgKGkuZS4gdGhlIHNlbGVjdGVkIGtleXMpCmlzIGEgMUQgKG9yIGZsYXQpIGFycmF5LiBUaGUgcmVhbCBkaWZmZXJlbmNlIGlzIHRoZSBtZWFuaW5nIG9mIGhheXN0YWNrLgpmaW5kTWF0Y2hlcygpIGRvZXMgdGhlIHVzdWFsIHRoaW5nIHlvdSdkIGV4cGVjdCBmb3IgCmxpbmtlZCBicnVzaGluZyBvbiBhIHNjYXR0ZXJwbG90IG1hdHJpeC4gZmluZFNpbXBsZU1hdGNoZXMoKSByZXR1cm5zIGEgbWF0Y2ggaWZmIApoYXlzdGFjayBpcyBhIHN1YnNldCBvZiB0aGUgbmVlZGxlU2V0LiBmaW5kTmVzdGVkTWF0Y2hlcygpIHJldHVybnMgCiovCgpmdW5jdGlvbiBnZXRNYXRjaEZ1bmModHJhY2UpIHsKICByZXR1cm4gKHRyYWNlLl9pc05lc3RlZEtleSkgPyBmaW5kTmVzdGVkTWF0Y2hlcyA6IAogICAgKHRyYWNlLl9pc1NpbXBsZUtleSkgPyBmaW5kU2ltcGxlTWF0Y2hlcyA6IGZpbmRNYXRjaGVzOwp9CgovLyBmaW5kIG1hdGNoZXMgZm9yICJmbGF0IiBrZXlzCmZ1bmN0aW9uIGZpbmRNYXRjaGVzKGhheXN0YWNrLCBuZWVkbGVTZXQpIHsKICB2YXIgbWF0Y2hlcyA9IFtdOwogIGhheXN0YWNrLmZvckVhY2goZnVuY3Rpb24ob2JqLCBpKSB7CiAgICBpZiAob2JqID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKG9iaikgPj0gMCkgewogICAgICBtYXRjaGVzLnB1c2goaSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG1hdGNoZXM7Cn0KCi8vIGZpbmQgbWF0Y2hlcyBmb3IgInNpbXBsZSIga2V5cwpmdW5jdGlvbiBmaW5kU2ltcGxlTWF0Y2hlcyhoYXlzdGFjaywgbmVlZGxlU2V0KSB7CiAgdmFyIG1hdGNoID0gaGF5c3RhY2suZXZlcnkoZnVuY3Rpb24odmFsKSB7CiAgICByZXR1cm4gdmFsID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKHZhbCkgPj0gMDsKICB9KTsKICAvLyB5ZXMsIHRoaXMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2Ugb3RoZXIgdGhhbiBjb25mb3JtaW5nIAogIC8vIHRvIHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgb3RoZXIgbWF0Y2ggZnVuY3Rpb25zCiAgcmV0dXJuIChtYXRjaCkgPyBbMF0gOiBbXQp9CgovLyBmaW5kIG1hdGNoZXMgZm9yIGEgIm5lc3RlZCIgaGF5c3RhY2sgKDJEIGFycmF5cykKZnVuY3Rpb24gZmluZE5lc3RlZE1hdGNoZXMoaGF5c3RhY2ssIG5lZWRsZVNldCkgewogIHZhciBtYXRjaGVzID0gW107CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYXlzdGFjay5sZW5ndGg7IGkrKykgewogICAgdmFyIGhheSA9IGhheXN0YWNrW2ldOwogICAgdmFyIG1hdGNoID0gaGF5LmV2ZXJ5KGZ1bmN0aW9uKHZhbCkgeyAKICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCB8fCBuZWVkbGVTZXQuaW5kZXhPZih2YWwpID49IDA7IAogICAgfSk7CiAgICBpZiAobWF0Y2gpIHsKICAgICAgbWF0Y2hlcy5wdXNoKGkpOwogICAgfQogIH0KICByZXR1cm4gbWF0Y2hlczsKfQoKZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHsKICByZXR1cm4gKAogICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nICYmCiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZQogICk7Cn0KCmZ1bmN0aW9uIHN1YnNldEFycmF5QXR0cnMob2JqLCBpbmRpY2VzKSB7CiAgdmFyIG5ld09iaiA9IHt9OwogIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbihrKSB7CiAgICB2YXIgdmFsID0gb2JqW2tdOwoKICAgIGlmIChrLmNoYXJBdCgwKSA9PT0gIl8iKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0gZWxzZSBpZiAoayA9PT0gInRyYW5zZm9ybXMiICYmIEFycmF5LmlzQXJyYXkodmFsKSkgewogICAgICBuZXdPYmpba10gPSB2YWwubWFwKGZ1bmN0aW9uKHRyYW5zZm9ybSkgewogICAgICAgIHJldHVybiBzdWJzZXRBcnJheUF0dHJzKHRyYW5zZm9ybSwgaW5kaWNlcyk7CiAgICAgIH0pOwogICAgfSBlbHNlIGlmIChrID09PSAiY29sb3JzY2FsZSIgJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHN1YnNldEFycmF5QXR0cnModmFsLCBpbmRpY2VzKTsKICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHN1YnNldEFycmF5KHZhbCwgaW5kaWNlcyk7CiAgICB9IGVsc2UgewogICAgICBuZXdPYmpba10gPSB2YWw7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG5ld09iajsKfQoKZnVuY3Rpb24gc3Vic2V0QXJyYXkoYXJyLCBpbmRpY2VzKSB7CiAgdmFyIHJlc3VsdCA9IFtdOwogIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykgewogICAgcmVzdWx0LnB1c2goYXJyW2luZGljZXNbaV1dKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlbW92aW5nIHBsb3RseSdzIGJydXNoIApmdW5jdGlvbiByZW1vdmVCcnVzaChlbCkgewogIHZhciBvdXRsaW5lcyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIi5zZWxlY3Qtb3V0bGluZSIpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0bGluZXMubGVuZ3RoOyBpKyspIHsKICAgIG91dGxpbmVzW2ldLnJlbW92ZSgpOwogIH0KfQoKCi8vIGh0dHBzOi8vZGF2aWR3YWxzaC5uYW1lL2phdmFzY3JpcHQtZGVib3VuY2UtZnVuY3Rpb24KCi8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3QKLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvcgovLyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGUKLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy4KZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7Cgl2YXIgdGltZW91dDsKCXJldHVybiBmdW5jdGlvbigpIHsKCQl2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7CgkJdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7CgkJCXRpbWVvdXQgPSBudWxsOwoJCQlpZiAoIWltbWVkaWF0ZSkgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKCQl9OwoJCXZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0OwoJCWNsZWFyVGltZW91dCh0aW1lb3V0KTsKCQl0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7CgkJaWYgKGNhbGxOb3cpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7Cgl9Owp9Owo="></script>
      <script src="data:application/javascript;base64,KGZ1bmN0aW9uKGdsb2JhbCl7InVzZSBzdHJpY3QiO3ZhciB1bmRlZmluZWQ9dm9pZCAwO3ZhciBNQVhfQVJSQVlfTEVOR1RIPTFlNTtmdW5jdGlvbiBUeXBlKHYpe3N3aXRjaCh0eXBlb2Ygdil7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiJ1bmRlZmluZWQiO2Nhc2UiYm9vbGVhbiI6cmV0dXJuImJvb2xlYW4iO2Nhc2UibnVtYmVyIjpyZXR1cm4ibnVtYmVyIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7ZGVmYXVsdDpyZXR1cm4gdj09PW51bGw/Im51bGwiOiJvYmplY3QifX1mdW5jdGlvbiBDbGFzcyh2KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpLnJlcGxhY2UoL15cW29iamVjdCAqfFxdJC9nLCIiKX1mdW5jdGlvbiBJc0NhbGxhYmxlKG8pe3JldHVybiB0eXBlb2Ygbz09PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gVG9PYmplY3Qodil7aWYodj09PW51bGx8fHY9PT11bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKCk7cmV0dXJuIE9iamVjdCh2KX1mdW5jdGlvbiBUb0ludDMyKHYpe3JldHVybiB2Pj4wfWZ1bmN0aW9uIFRvVWludDMyKHYpe3JldHVybiB2Pj4+MH12YXIgTE4yPU1hdGguTE4yLGFicz1NYXRoLmFicyxmbG9vcj1NYXRoLmZsb29yLGxvZz1NYXRoLmxvZyxtYXg9TWF0aC5tYXgsbWluPU1hdGgubWluLHBvdz1NYXRoLnBvdyxyb3VuZD1NYXRoLnJvdW5kOyhmdW5jdGlvbigpe3ZhciBvcmlnPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZG9tX29ubHk9IWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIngiLHt9KX1jYXRjaChfKXtyZXR1cm4gZmFsc2V9fSgpO2lmKCFvcmlnfHxkb21fb25seSl7T2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKG8scHJvcCxkZXNjKXtpZihvcmlnKXRyeXtyZXR1cm4gb3JpZyhvLHByb3AsZGVzYyl9Y2F0Y2goXyl7fWlmKG8hPT1PYmplY3QobykpdGhyb3cgVHlwZUVycm9yKCJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3QiKTtpZihPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18mJiJnZXQiaW4gZGVzYylPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18uY2FsbChvLHByb3AsZGVzYy5nZXQpO2lmKE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXyYmInNldCJpbiBkZXNjKU9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG8scHJvcCxkZXNjLnNldCk7aWYoInZhbHVlImluIGRlc2Mpb1twcm9wXT1kZXNjLnZhbHVlO3JldHVybiBvfX19KSgpO2Z1bmN0aW9uIG1ha2VBcnJheUFjY2Vzc29ycyhvYmope2lmKG9iai5sZW5ndGg+TUFYX0FSUkFZX0xFTkdUSCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSB0b28gbGFyZ2UgZm9yIHBvbHlmaWxsIik7ZnVuY3Rpb24gbWFrZUFycmF5QWNjZXNzb3IoaW5kZXgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosaW5kZXgse2dldDpmdW5jdGlvbigpe3JldHVybiBvYmouX2dldHRlcihpbmRleCl9LHNldDpmdW5jdGlvbih2KXtvYmouX3NldHRlcihpbmRleCx2KX0sZW51bWVyYWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTpmYWxzZX0pfXZhciBpO2ZvcihpPTA7aTxvYmoubGVuZ3RoO2krPTEpe21ha2VBcnJheUFjY2Vzc29yKGkpfX1mdW5jdGlvbiBhc19zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+PnN9ZnVuY3Rpb24gYXNfdW5zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+Pj5zfWZ1bmN0aW9uIHBhY2tJOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja0k4KGJ5dGVzKXtyZXR1cm4gYXNfc2lnbmVkKGJ5dGVzWzBdLDgpfWZ1bmN0aW9uIHBhY2tVOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja1U4KGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF0sOCl9ZnVuY3Rpb24gcGFja1U4Q2xhbXBlZChuKXtuPXJvdW5kKE51bWJlcihuKSk7cmV0dXJuW248MD8wOm4+MjU1PzI1NTpuJjI1NV19ZnVuY3Rpb24gcGFja0kxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja0kxNihieXRlcyl7cmV0dXJuIGFzX3NpZ25lZChieXRlc1swXTw8OHxieXRlc1sxXSwxNil9ZnVuY3Rpb24gcGFja1UxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja1UxNihieXRlcyl7cmV0dXJuIGFzX3Vuc2lnbmVkKGJ5dGVzWzBdPDw4fGJ5dGVzWzFdLDE2KX1mdW5jdGlvbiBwYWNrSTMyKG4pe3JldHVybltuPj4yNCYyNTUsbj4+MTYmMjU1LG4+PjgmMjU1LG4mMjU1XX1mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpe3JldHVybiBhc19zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja1UzMihuKXtyZXR1cm5bbj4+MjQmMjU1LG4+PjE2JjI1NSxuPj44JjI1NSxuJjI1NV19ZnVuY3Rpb24gdW5wYWNrVTMyKGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja0lFRUU3NTQodixlYml0cyxmYml0cyl7dmFyIGJpYXM9KDE8PGViaXRzLTEpLTEscyxlLGYsbG4saSxiaXRzLHN0cixieXRlcztmdW5jdGlvbiByb3VuZFRvRXZlbihuKXt2YXIgdz1mbG9vcihuKSxmPW4tdztpZihmPC41KXJldHVybiB3O2lmKGY+LjUpcmV0dXJuIHcrMTtyZXR1cm4gdyUyP3crMTp3fWlmKHYhPT12KXtlPSgxPDxlYml0cyktMTtmPXBvdygyLGZiaXRzLTEpO3M9MH1lbHNlIGlmKHY9PT1JbmZpbml0eXx8dj09PS1JbmZpbml0eSl7ZT0oMTw8ZWJpdHMpLTE7Zj0wO3M9djwwPzE6MH1lbHNlIGlmKHY9PT0wKXtlPTA7Zj0wO3M9MS92PT09LUluZmluaXR5PzE6MH1lbHNle3M9djwwO3Y9YWJzKHYpO2lmKHY+PXBvdygyLDEtYmlhcykpe2U9bWluKGZsb29yKGxvZyh2KS9MTjIpLDEwMjMpO2Y9cm91bmRUb0V2ZW4odi9wb3coMixlKSpwb3coMixmYml0cykpO2lmKGYvcG93KDIsZmJpdHMpPj0yKXtlPWUrMTtmPTF9aWYoZT5iaWFzKXtlPSgxPDxlYml0cyktMTtmPTB9ZWxzZXtlPWUrYmlhcztmPWYtcG93KDIsZmJpdHMpfX1lbHNle2U9MDtmPXJvdW5kVG9FdmVuKHYvcG93KDIsMS1iaWFzLWZiaXRzKSl9fWJpdHM9W107Zm9yKGk9ZmJpdHM7aTtpLT0xKXtiaXRzLnB1c2goZiUyPzE6MCk7Zj1mbG9vcihmLzIpfWZvcihpPWViaXRzO2k7aS09MSl7Yml0cy5wdXNoKGUlMj8xOjApO2U9Zmxvb3IoZS8yKX1iaXRzLnB1c2gocz8xOjApO2JpdHMucmV2ZXJzZSgpO3N0cj1iaXRzLmpvaW4oIiIpO2J5dGVzPVtdO3doaWxlKHN0ci5sZW5ndGgpe2J5dGVzLnB1c2gocGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDgpLDIpKTtzdHI9c3RyLnN1YnN0cmluZyg4KX1yZXR1cm4gYnl0ZXN9ZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChieXRlcyxlYml0cyxmYml0cyl7dmFyIGJpdHM9W10saSxqLGIsc3RyLGJpYXMscyxlLGY7Zm9yKGk9Ynl0ZXMubGVuZ3RoO2k7aS09MSl7Yj1ieXRlc1tpLTFdO2ZvcihqPTg7ajtqLT0xKXtiaXRzLnB1c2goYiUyPzE6MCk7Yj1iPj4xfX1iaXRzLnJldmVyc2UoKTtzdHI9Yml0cy5qb2luKCIiKTtiaWFzPSgxPDxlYml0cy0xKS0xO3M9cGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDEpLDIpPy0xOjE7ZT1wYXJzZUludChzdHIuc3Vic3RyaW5nKDEsMStlYml0cyksMik7Zj1wYXJzZUludChzdHIuc3Vic3RyaW5nKDErZWJpdHMpLDIpO2lmKGU9PT0oMTw8ZWJpdHMpLTEpe3JldHVybiBmIT09MD9OYU46cypJbmZpbml0eX1lbHNlIGlmKGU+MCl7cmV0dXJuIHMqcG93KDIsZS1iaWFzKSooMStmL3BvdygyLGZiaXRzKSl9ZWxzZSBpZihmIT09MCl7cmV0dXJuIHMqcG93KDIsLShiaWFzLTEpKSooZi9wb3coMixmYml0cykpfWVsc2V7cmV0dXJuIHM8MD8tMDowfX1mdW5jdGlvbiB1bnBhY2tGNjQoYil7cmV0dXJuIHVucGFja0lFRUU3NTQoYiwxMSw1Mil9ZnVuY3Rpb24gcGFja0Y2NCh2KXtyZXR1cm4gcGFja0lFRUU3NTQodiwxMSw1Mil9ZnVuY3Rpb24gdW5wYWNrRjMyKGIpe3JldHVybiB1bnBhY2tJRUVFNzU0KGIsOCwyMyl9ZnVuY3Rpb24gcGFja0YzMih2KXtyZXR1cm4gcGFja0lFRUU3NTQodiw4LDIzKX0oZnVuY3Rpb24oKXtmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfYnl0ZXMiLHt2YWx1ZTpBcnJheShsZW5ndGgpfSk7Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSs9MSl0aGlzLl9ieXRlc1tpXT0wfWdsb2JhbC5BcnJheUJ1ZmZlcj1nbG9iYWwuQXJyYXlCdWZmZXJ8fEFycmF5QnVmZmVyO2Z1bmN0aW9uICRUeXBlZEFycmF5JCgpe2lmKCFhcmd1bWVudHMubGVuZ3RofHx0eXBlb2YgYXJndW1lbnRzWzBdIT09Im9iamVjdCIpe3JldHVybiBmdW5jdGlvbihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigibGVuZ3RoIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTpsZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcih0aGlzLmJ5dGVMZW5ndGgpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ5dGVPZmZzZXQiLHt2YWx1ZTowfSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1pZihhcmd1bWVudHMubGVuZ3RoPj0xJiZUeXBlKGFyZ3VtZW50c1swXSk9PT0ib2JqZWN0IiYmYXJndW1lbnRzWzBdaW5zdGFuY2VvZiAkVHlwZWRBcnJheSQpe3JldHVybiBmdW5jdGlvbih0eXBlZEFycmF5KXtpZih0aGlzLmNvbnN0cnVjdG9yIT09dHlwZWRBcnJheS5jb25zdHJ1Y3Rvcil0aHJvdyBUeXBlRXJyb3IoKTt2YXIgYnl0ZUxlbmd0aD10eXBlZEFycmF5Lmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpuZXcgQXJyYXlCdWZmZXIoYnl0ZUxlbmd0aCl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOjB9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6dHlwZWRBcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpdGhpcy5fc2V0dGVyKGksdHlwZWRBcnJheS5fZ2V0dGVyKGkpKX0uYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKGFyZ3VtZW50cy5sZW5ndGg+PTEmJlR5cGUoYXJndW1lbnRzWzBdKT09PSJvYmplY3QiJiYhKGFyZ3VtZW50c1swXWluc3RhbmNlb2YgJFR5cGVkQXJyYXkkKSYmIShhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihhcnJheSl7dmFyIGJ5dGVMZW5ndGg9YXJyYXkubGVuZ3RoKnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6MH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTphcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpe3ZhciBzPWFycmF5W2ldO3RoaXMuX3NldHRlcihpLE51bWJlcihzKSl9fS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9aWYoYXJndW1lbnRzLmxlbmd0aD49MSYmVHlwZShhcmd1bWVudHNbMF0pPT09Im9iamVjdCImJihhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihidWZmZXIsYnl0ZU9mZnNldCxsZW5ndGgpe2J5dGVPZmZzZXQ9VG9VaW50MzIoYnl0ZU9mZnNldCk7aWYoYnl0ZU9mZnNldD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IG91dCBvZiByYW5nZSIpO2lmKGJ5dGVPZmZzZXQldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJidWZmZXIgbGVuZ3RoIG1pbnVzIHRoZSBieXRlT2Zmc2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUuIik7aWYobGVuZ3RoPT09dW5kZWZpbmVkKXt2YXIgYnl0ZUxlbmd0aD1idWZmZXIuYnl0ZUxlbmd0aC1ieXRlT2Zmc2V0O2lmKGJ5dGVMZW5ndGgldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJsZW5ndGggb2YgYnVmZmVyIG1pbnVzIGJ5dGVPZmZzZXQgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZSIpO2xlbmd0aD1ieXRlTGVuZ3RoL3RoaXMuQllURVNfUEVSX0VMRU1FTlR9ZWxzZXtsZW5ndGg9VG9VaW50MzIobGVuZ3RoKTtieXRlTGVuZ3RoPWxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfWlmKGJ5dGVPZmZzZXQrYnl0ZUxlbmd0aD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IGFuZCBsZW5ndGggcmVmZXJlbmNlIGFuIGFyZWEgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpidWZmZXJ9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOmJ5dGVPZmZzZXR9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6bGVuZ3RofSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10aHJvdyBUeXBlRXJyb3IoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLCJmcm9tIix7dmFsdWU6ZnVuY3Rpb24oaXRlcmFibGUpe3JldHVybiBuZXcgdGhpcyhpdGVyYWJsZSl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JCwib2YiLHt2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcyhhcmd1bWVudHMpfX0pO3ZhciAkVHlwZWRBcnJheVByb3RvdHlwZSQ9e307JFR5cGVkQXJyYXkkLnByb3RvdHlwZT0kVHlwZWRBcnJheVByb3RvdHlwZSQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsIl9nZXR0ZXIiLHt2YWx1ZTpmdW5jdGlvbihpbmRleCl7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXRocm93IFN5bnRheEVycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO2luZGV4PVRvVWludDMyKGluZGV4KTtpZihpbmRleD49dGhpcy5sZW5ndGgpcmV0dXJuIHVuZGVmaW5lZDt2YXIgYnl0ZXM9W10saSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXtieXRlcy5wdXNoKHRoaXMuYnVmZmVyLl9ieXRlc1tvXSl9cmV0dXJuIHRoaXMuX3VucGFjayhieXRlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImdldCIse3ZhbHVlOiRUeXBlZEFycmF5JC5wcm90b3R5cGUuX2dldHRlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJfc2V0dGVyIix7dmFsdWU6ZnVuY3Rpb24oaW5kZXgsdmFsdWUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBTeW50YXhFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiKTtpbmRleD1Ub1VpbnQzMihpbmRleCk7aWYoaW5kZXg+PXRoaXMubGVuZ3RoKXJldHVybjt2YXIgYnl0ZXM9dGhpcy5fcGFjayh2YWx1ZSksaSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXt0aGlzLmJ1ZmZlci5fYnl0ZXNbb109Ynl0ZXNbaV19fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb25zdHJ1Y3RvciIse3ZhbHVlOiRUeXBlZEFycmF5JH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb3B5V2l0aGluIix7dmFsdWU6ZnVuY3Rpb24odGFyZ2V0LHN0YXJ0KXt2YXIgZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVUYXJnZXQ9VG9JbnQzMih0YXJnZXQpO3ZhciB0bztpZihyZWxhdGl2ZVRhcmdldDwwKXRvPW1heChsZW4rcmVsYXRpdmVUYXJnZXQsMCk7ZWxzZSB0bz1taW4ocmVsYXRpdmVUYXJnZXQsbGVuKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgZnJvbTtpZihyZWxhdGl2ZVN0YXJ0PDApZnJvbT1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBmcm9tPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3ZhciBjb3VudD1taW4oZmluYWwtZnJvbSxsZW4tdG8pO3ZhciBkaXJlY3Rpb247aWYoZnJvbTx0byYmdG88ZnJvbStjb3VudCl7ZGlyZWN0aW9uPS0xO2Zyb209ZnJvbStjb3VudC0xO3RvPXRvK2NvdW50LTF9ZWxzZXtkaXJlY3Rpb249MX13aGlsZShjb3VudD4wKXtvLl9zZXR0ZXIodG8sby5fZ2V0dGVyKGZyb20pKTtmcm9tPWZyb20rZGlyZWN0aW9uO3RvPXRvK2RpcmVjdGlvbjtjb3VudD1jb3VudC0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJldmVyeSIse3ZhbHVlOmZ1bmN0aW9uKGNhbGxiYWNrZm4pe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTtpZighSXNDYWxsYWJsZShjYWxsYmFja2ZuKSl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdGhpc0FyZz1hcmd1bWVudHNbMV07Zm9yKHZhciBpPTA7aTxsZW47aSsrKXtpZighY2FsbGJhY2tmbi5jYWxsKHRoaXNBcmcsdC5fZ2V0dGVyKGkpLGksdCkpcmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWxsIix7dmFsdWU6ZnVuY3Rpb24odmFsdWUpe3ZhciBzdGFydD1hcmd1bWVudHNbMV0sZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaztpZihyZWxhdGl2ZVN0YXJ0PDApaz1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBrPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3doaWxlKGs8ZmluYWwpe28uX3NldHRlcihrLHZhbHVlKTtrKz0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWx0ZXIiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKyl7dmFyIHZhbD10Ll9nZXR0ZXIoaSk7aWYoY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHZhbCxpLHQpKXJlcy5wdXNoKHZhbCl9cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHJlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZpbmQiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4ga1ZhbHVlOysra31yZXR1cm4gdW5kZWZpbmVkfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaW5kSW5kZXgiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4gazsrK2t9cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZvckVhY2giLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJpbmRleE9mIix7dmFsdWU6ZnVuY3Rpb24oc2VhcmNoRWxlbWVudCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO2lmKGxlbj09PTApcmV0dXJuLTE7dmFyIG49MDtpZihhcmd1bWVudHMubGVuZ3RoPjApe249TnVtYmVyKGFyZ3VtZW50c1sxXSk7aWYobiE9PW4pe249MH1lbHNlIGlmKG4hPT0wJiZuIT09MS8wJiZuIT09LSgxLzApKXtuPShuPjB8fC0xKSpmbG9vcihhYnMobikpfX1pZihuPj1sZW4pcmV0dXJuLTE7dmFyIGs9bj49MD9uOm1heChsZW4tYWJzKG4pLDApO2Zvcig7azxsZW47aysrKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXtyZXR1cm4ga319cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImpvaW4iLHt2YWx1ZTpmdW5jdGlvbihzZXBhcmF0b3Ipe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTt2YXIgdG1wPUFycmF5KGxlbik7Zm9yKHZhciBpPTA7aTxsZW47KytpKXRtcFtpXT10Ll9nZXR0ZXIoaSk7cmV0dXJuIHRtcC5qb2luKHNlcGFyYXRvcj09PXVuZGVmaW5lZD8iLCI6c2VwYXJhdG9yKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwibGFzdEluZGV4T2YiLHt2YWx1ZTpmdW5jdGlvbihzZWFyY2hFbGVtZW50KXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYobGVuPT09MClyZXR1cm4tMTt2YXIgbj1sZW47aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtuPU51bWJlcihhcmd1bWVudHNbMV0pO2lmKG4hPT1uKXtuPTB9ZWxzZSBpZihuIT09MCYmbiE9PTEvMCYmbiE9PS0oMS8wKSl7bj0obj4wfHwtMSkqZmxvb3IoYWJzKG4pKX19dmFyIGs9bj49MD9taW4obixsZW4tMSk6bGVuLWFicyhuKTtmb3IoO2s+PTA7ay0tKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXJldHVybiBrfXJldHVybi0xfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJtYXAiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTtyZXMubGVuZ3RoPWxlbjt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKylyZXNbaV09Y2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpO3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcihyZXMpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJyZWR1Y2UiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9MDt2YXIgYWNjdW11bGF0b3I7aWYoYXJndW1lbnRzLmxlbmd0aD49Mil7YWNjdW11bGF0b3I9YXJndW1lbnRzWzFdfWVsc2V7YWNjdW11bGF0b3I9dC5fZ2V0dGVyKGsrKyl9d2hpbGUoazxsZW4pe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7aysrfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmVkdWNlUmlnaHQiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9bGVuLTE7dmFyIGFjY3VtdWxhdG9yO2lmKGFyZ3VtZW50cy5sZW5ndGg+PTIpe2FjY3VtdWxhdG9yPWFyZ3VtZW50c1sxXX1lbHNle2FjY3VtdWxhdG9yPXQuX2dldHRlcihrLS0pfXdoaWxlKGs+PTApe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7ay0tfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmV2ZXJzZSIse3ZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciBoYWxmPWZsb29yKGxlbi8yKTtmb3IodmFyIGk9MCxqPWxlbi0xO2k8aGFsZjsrK2ksLS1qKXt2YXIgdG1wPXQuX2dldHRlcihpKTt0Ll9zZXR0ZXIoaSx0Ll9nZXR0ZXIoaikpO3QuX3NldHRlcihqLHRtcCl9cmV0dXJuIHR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNldCIse3ZhbHVlOmZ1bmN0aW9uKGluZGV4LHZhbHVlKXtpZihhcmd1bWVudHMubGVuZ3RoPDEpdGhyb3cgU3ludGF4RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7dmFyIGFycmF5LHNlcXVlbmNlLG9mZnNldCxsZW4saSxzLGQsYnl0ZU9mZnNldCxieXRlTGVuZ3RoLHRtcDtpZih0eXBlb2YgYXJndW1lbnRzWzBdPT09Im9iamVjdCImJmFyZ3VtZW50c1swXS5jb25zdHJ1Y3Rvcj09PXRoaXMuY29uc3RydWN0b3Ipe2FycmF5PWFyZ3VtZW50c1swXTtvZmZzZXQ9VG9VaW50MzIoYXJndW1lbnRzWzFdKTtpZihvZmZzZXQrYXJyYXkubGVuZ3RoPnRoaXMubGVuZ3RoKXt0aHJvdyBSYW5nZUVycm9yKCJPZmZzZXQgcGx1cyBsZW5ndGggb2YgYXJyYXkgaXMgb3V0IG9mIHJhbmdlIil9Ynl0ZU9mZnNldD10aGlzLmJ5dGVPZmZzZXQrb2Zmc2V0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7Ynl0ZUxlbmd0aD1hcnJheS5sZW5ndGgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpZihhcnJheS5idWZmZXI9PT10aGlzLmJ1ZmZlcil7dG1wPVtdO2ZvcihpPTAscz1hcnJheS5ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEpe3RtcFtpXT1hcnJheS5idWZmZXIuX2J5dGVzW3NdfWZvcihpPTAsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLGQrPTEpe3RoaXMuYnVmZmVyLl9ieXRlc1tkXT10bXBbaV19fWVsc2V7Zm9yKGk9MCxzPWFycmF5LmJ5dGVPZmZzZXQsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEsZCs9MSl7dGhpcy5idWZmZXIuX2J5dGVzW2RdPWFycmF5LmJ1ZmZlci5fYnl0ZXNbc119fX1lbHNlIGlmKHR5cGVvZiBhcmd1bWVudHNbMF09PT0ib2JqZWN0IiYmdHlwZW9mIGFyZ3VtZW50c1swXS5sZW5ndGghPT0idW5kZWZpbmVkIil7c2VxdWVuY2U9YXJndW1lbnRzWzBdO2xlbj1Ub1VpbnQzMihzZXF1ZW5jZS5sZW5ndGgpO29mZnNldD1Ub1VpbnQzMihhcmd1bWVudHNbMV0pO2lmKG9mZnNldCtsZW4+dGhpcy5sZW5ndGgpe3Rocm93IFJhbmdlRXJyb3IoIk9mZnNldCBwbHVzIGxlbmd0aCBvZiBhcnJheSBpcyBvdXQgb2YgcmFuZ2UiKX1mb3IoaT0wO2k8bGVuO2krPTEpe3M9c2VxdWVuY2VbaV07dGhpcy5fc2V0dGVyKG9mZnNldCtpLE51bWJlcihzKSl9fWVsc2V7dGhyb3cgVHlwZUVycm9yKCJVbmV4cGVjdGVkIGFyZ3VtZW50IHR5cGUocykiKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNsaWNlIix7dmFsdWU6ZnVuY3Rpb24oc3RhcnQsZW5kKXt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaz1yZWxhdGl2ZVN0YXJ0PDA/bWF4KGxlbityZWxhdGl2ZVN0YXJ0LDApOm1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kPWVuZD09PXVuZGVmaW5lZD9sZW46VG9JbnQzMihlbmQpO3ZhciBmaW5hbD1yZWxhdGl2ZUVuZDwwP21heChsZW4rcmVsYXRpdmVFbmQsMCk6bWluKHJlbGF0aXZlRW5kLGxlbik7dmFyIGNvdW50PWZpbmFsLWs7dmFyIGM9by5jb25zdHJ1Y3Rvcjt2YXIgYT1uZXcgYyhjb3VudCk7dmFyIG49MDt3aGlsZShrPGZpbmFsKXt2YXIga1ZhbHVlPW8uX2dldHRlcihrKTthLl9zZXR0ZXIobixrVmFsdWUpOysrazsrK259cmV0dXJuIGF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNvbWUiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspe2lmKGNhbGxiYWNrZm4uY2FsbCh0aGlzcCx0Ll9nZXR0ZXIoaSksaSx0KSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic29ydCIse3ZhbHVlOmZ1bmN0aW9uKGNvbXBhcmVmbil7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciB0bXA9QXJyYXkobGVuKTtmb3IodmFyIGk9MDtpPGxlbjsrK2kpdG1wW2ldPXQuX2dldHRlcihpKTtpZihjb21wYXJlZm4pdG1wLnNvcnQoY29tcGFyZWZuKTtlbHNlIHRtcC5zb3J0KCk7Zm9yKGk9MDtpPGxlbjsrK2kpdC5fc2V0dGVyKGksdG1wW2ldKTtyZXR1cm4gdH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic3ViYXJyYXkiLHt2YWx1ZTpmdW5jdGlvbihzdGFydCxlbmQpe2Z1bmN0aW9uIGNsYW1wKHYsbWluLG1heCl7cmV0dXJuIHY8bWluP21pbjp2Pm1heD9tYXg6dn1zdGFydD1Ub0ludDMyKHN0YXJ0KTtlbmQ9VG9JbnQzMihlbmQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSl7c3RhcnQ9MH1pZihhcmd1bWVudHMubGVuZ3RoPDIpe2VuZD10aGlzLmxlbmd0aH1pZihzdGFydDwwKXtzdGFydD10aGlzLmxlbmd0aCtzdGFydH1pZihlbmQ8MCl7ZW5kPXRoaXMubGVuZ3RoK2VuZH1zdGFydD1jbGFtcChzdGFydCwwLHRoaXMubGVuZ3RoKTtlbmQ9Y2xhbXAoZW5kLDAsdGhpcy5sZW5ndGgpO3ZhciBsZW49ZW5kLXN0YXJ0O2lmKGxlbjwwKXtsZW49MH1yZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5idWZmZXIsdGhpcy5ieXRlT2Zmc2V0K3N0YXJ0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQsbGVuKX19KTtmdW5jdGlvbiBtYWtlVHlwZWRBcnJheShlbGVtZW50U2l6ZSxwYWNrLHVucGFjayl7dmFyIFR5cGVkQXJyYXk9ZnVuY3Rpb24oKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY29uc3RydWN0b3IiLHt2YWx1ZTpUeXBlZEFycmF5fSk7JFR5cGVkQXJyYXkkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTttYWtlQXJyYXlBY2Nlc3NvcnModGhpcyl9O2lmKCJfX3Byb3RvX18iaW4gVHlwZWRBcnJheSl7VHlwZWRBcnJheS5fX3Byb3RvX189JFR5cGVkQXJyYXkkfWVsc2V7VHlwZWRBcnJheS5mcm9tPSRUeXBlZEFycmF5JC5mcm9tO1R5cGVkQXJyYXkub2Y9JFR5cGVkQXJyYXkkLm9mfVR5cGVkQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ9ZWxlbWVudFNpemU7dmFyIFR5cGVkQXJyYXlQcm90b3R5cGU9ZnVuY3Rpb24oKXt9O1R5cGVkQXJyYXlQcm90b3R5cGUucHJvdG90eXBlPSRUeXBlZEFycmF5UHJvdG90eXBlJDtUeXBlZEFycmF5LnByb3RvdHlwZT1uZXcgVHlwZWRBcnJheVByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIkJZVEVTX1BFUl9FTEVNRU5UIix7dmFsdWU6ZWxlbWVudFNpemV9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIl9wYWNrIix7dmFsdWU6cGFja30pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShUeXBlZEFycmF5LnByb3RvdHlwZSwiX3VucGFjayIse3ZhbHVlOnVucGFja30pO3JldHVybiBUeXBlZEFycmF5fXZhciBJbnQ4QXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrSTgsdW5wYWNrSTgpO3ZhciBVaW50OEFycmF5PW1ha2VUeXBlZEFycmF5KDEscGFja1U4LHVucGFja1U4KTt2YXIgVWludDhDbGFtcGVkQXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrVThDbGFtcGVkLHVucGFja1U4KTt2YXIgSW50MTZBcnJheT1tYWtlVHlwZWRBcnJheSgyLHBhY2tJMTYsdW5wYWNrSTE2KTt2YXIgVWludDE2QXJyYXk9bWFrZVR5cGVkQXJyYXkoMixwYWNrVTE2LHVucGFja1UxNik7dmFyIEludDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrSTMyLHVucGFja0kzMik7dmFyIFVpbnQzMkFycmF5PW1ha2VUeXBlZEFycmF5KDQscGFja1UzMix1bnBhY2tVMzIpO3ZhciBGbG9hdDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrRjMyLHVucGFja0YzMik7dmFyIEZsb2F0NjRBcnJheT1tYWtlVHlwZWRBcnJheSg4LHBhY2tGNjQsdW5wYWNrRjY0KTtnbG9iYWwuSW50OEFycmF5PWdsb2JhbC5JbnQ4QXJyYXl8fEludDhBcnJheTtnbG9iYWwuVWludDhBcnJheT1nbG9iYWwuVWludDhBcnJheXx8VWludDhBcnJheTtnbG9iYWwuVWludDhDbGFtcGVkQXJyYXk9Z2xvYmFsLlVpbnQ4Q2xhbXBlZEFycmF5fHxVaW50OENsYW1wZWRBcnJheTtnbG9iYWwuSW50MTZBcnJheT1nbG9iYWwuSW50MTZBcnJheXx8SW50MTZBcnJheTtnbG9iYWwuVWludDE2QXJyYXk9Z2xvYmFsLlVpbnQxNkFycmF5fHxVaW50MTZBcnJheTtnbG9iYWwuSW50MzJBcnJheT1nbG9iYWwuSW50MzJBcnJheXx8SW50MzJBcnJheTtnbG9iYWwuVWludDMyQXJyYXk9Z2xvYmFsLlVpbnQzMkFycmF5fHxVaW50MzJBcnJheTtnbG9iYWwuRmxvYXQzMkFycmF5PWdsb2JhbC5GbG9hdDMyQXJyYXl8fEZsb2F0MzJBcnJheTtnbG9iYWwuRmxvYXQ2NEFycmF5PWdsb2JhbC5GbG9hdDY0QXJyYXl8fEZsb2F0NjRBcnJheX0pKCk7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihhcnJheSxpbmRleCl7cmV0dXJuIElzQ2FsbGFibGUoYXJyYXkuZ2V0KT9hcnJheS5nZXQoaW5kZXgpOmFycmF5W2luZGV4XX12YXIgSVNfQklHX0VORElBTj1mdW5jdGlvbigpe3ZhciB1MTZhcnJheT1uZXcgVWludDE2QXJyYXkoWzQ2NjBdKSx1OGFycmF5PW5ldyBVaW50OEFycmF5KHUxNmFycmF5LmJ1ZmZlcik7cmV0dXJuIHIodThhcnJheSwwKT09PTE4fSgpO2Z1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlcixieXRlT2Zmc2V0LGJ5dGVMZW5ndGgpe2lmKCEoYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fENsYXNzKGJ1ZmZlcik9PT0iQXJyYXlCdWZmZXIiKSl0aHJvdyBUeXBlRXJyb3IoKTtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQ+YnVmZmVyLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiYnl0ZU9mZnNldCBvdXQgb2YgcmFuZ2UiKTtpZihieXRlTGVuZ3RoPT09dW5kZWZpbmVkKWJ5dGVMZW5ndGg9YnVmZmVyLmJ5dGVMZW5ndGgtYnl0ZU9mZnNldDtlbHNlIGJ5dGVMZW5ndGg9VG9VaW50MzIoYnl0ZUxlbmd0aCk7aWYoYnl0ZU9mZnNldCtieXRlTGVuZ3RoPmJ1ZmZlci5ieXRlTGVuZ3RoKXRocm93IFJhbmdlRXJyb3IoImJ5dGVPZmZzZXQgYW5kIGxlbmd0aCByZWZlcmVuY2UgYW4gYXJlYSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOmJ1ZmZlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6Ynl0ZU9mZnNldH0pfWZ1bmN0aW9uIG1ha2VHZXR0ZXIoYXJyYXlUeXBlKXtyZXR1cm4gZnVuY3Rpb24gR2V0Vmlld1ZhbHVlKGJ5dGVPZmZzZXQsbGl0dGxlRW5kaWFuKXtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQrYXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UPnRoaXMuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UiKTtieXRlT2Zmc2V0Kz10aGlzLmJ5dGVPZmZzZXQ7dmFyIHVpbnQ4QXJyYXk9bmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIsYnl0ZU9mZnNldCxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQpLGJ5dGVzPVtdO2Zvcih2YXIgaT0wO2k8YXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UO2krPTEpYnl0ZXMucHVzaChyKHVpbnQ4QXJyYXksaSkpO2lmKEJvb2xlYW4obGl0dGxlRW5kaWFuKT09PUJvb2xlYW4oSVNfQklHX0VORElBTikpYnl0ZXMucmV2ZXJzZSgpO3JldHVybiByKG5ldyBhcnJheVR5cGUobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlciksMCl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQ4Iix7dmFsdWU6bWFrZUdldHRlcihVaW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDgiLHt2YWx1ZTptYWtlR2V0dGVyKEludDhBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJnZXRVaW50MTYiLHt2YWx1ZTptYWtlR2V0dGVyKFVpbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDE2Iix7dmFsdWU6bWFrZUdldHRlcihJbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoVWludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0SW50MzIiLHt2YWx1ZTptYWtlR2V0dGVyKEludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0RmxvYXQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoRmxvYXQzMkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEZsb2F0NjQiLHt2YWx1ZTptYWtlR2V0dGVyKEZsb2F0NjRBcnJheSl9KTtmdW5jdGlvbiBtYWtlU2V0dGVyKGFycmF5VHlwZSl7cmV0dXJuIGZ1bmN0aW9uIFNldFZpZXdWYWx1ZShieXRlT2Zmc2V0LHZhbHVlLGxpdHRsZUVuZGlhbil7Ynl0ZU9mZnNldD1Ub1VpbnQzMihieXRlT2Zmc2V0KTtpZihieXRlT2Zmc2V0K2FycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVD50aGlzLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlIik7dmFyIHR5cGVBcnJheT1uZXcgYXJyYXlUeXBlKFt2YWx1ZV0pLGJ5dGVBcnJheT1uZXcgVWludDhBcnJheSh0eXBlQXJyYXkuYnVmZmVyKSxieXRlcz1bXSxpLGJ5dGVWaWV3O2ZvcihpPTA7aTxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSlieXRlcy5wdXNoKHIoYnl0ZUFycmF5LGkpKTtpZihCb29sZWFuKGxpdHRsZUVuZGlhbik9PT1Cb29sZWFuKElTX0JJR19FTkRJQU4pKWJ5dGVzLnJldmVyc2UoKTtieXRlVmlldz1uZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlcixieXRlT2Zmc2V0LGFycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVCk7Ynl0ZVZpZXcuc2V0KGJ5dGVzKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDgiLHt2YWx1ZTptYWtlU2V0dGVyKFVpbnQ4QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50OCIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsInNldFVpbnQxNiIse3ZhbHVlOm1ha2VTZXR0ZXIoVWludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50MTYiLHt2YWx1ZTptYWtlU2V0dGVyKEludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDMyIix7dmFsdWU6bWFrZVNldHRlcihVaW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRJbnQzMiIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRGbG9hdDMyIix7dmFsdWU6bWFrZVNldHRlcihGbG9hdDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0RmxvYXQ2NCIse3ZhbHVlOm1ha2VTZXR0ZXIoRmxvYXQ2NEFycmF5KX0pO2dsb2JhbC5EYXRhVmlldz1nbG9iYWwuRGF0YVZpZXd8fERhdGFWaWV3fSkoKX0pKHRoaXMpOw=="></script>
      <script src="data:application/javascript;base64,LyohIGpRdWVyeSB2My41LjEgfCAoYykgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCiFmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijsib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1lLmRvY3VtZW50P3QoZSwhMCk6ZnVuY3Rpb24oZSl7aWYoIWUuZG9jdW1lbnQpdGhyb3cgbmV3IEVycm9yKCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Iik7cmV0dXJuIHQoZSl9OnQoZSl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKEMsZSl7InVzZSBzdHJpY3QiO3ZhciB0PVtdLHI9T2JqZWN0LmdldFByb3RvdHlwZU9mLHM9dC5zbGljZSxnPXQuZmxhdD9mdW5jdGlvbihlKXtyZXR1cm4gdC5mbGF0LmNhbGwoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiB0LmNvbmNhdC5hcHBseShbXSxlKX0sdT10LnB1c2gsaT10LmluZGV4T2Ysbj17fSxvPW4udG9TdHJpbmcsdj1uLmhhc093blByb3BlcnR5LGE9di50b1N0cmluZyxsPWEuY2FsbChPYmplY3QpLHk9e30sbT1mdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmIm51bWJlciIhPXR5cGVvZiBlLm5vZGVUeXBlfSx4PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlPT09ZS53aW5kb3d9LEU9Qy5kb2N1bWVudCxjPXt0eXBlOiEwLHNyYzohMCxub25jZTohMCxub01vZHVsZTohMH07ZnVuY3Rpb24gYihlLHQsbil7dmFyIHIsaSxvPShuPW58fEUpLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2lmKG8udGV4dD1lLHQpZm9yKHIgaW4gYykoaT10W3JdfHx0LmdldEF0dHJpYnV0ZSYmdC5nZXRBdHRyaWJ1dGUocikpJiZvLnNldEF0dHJpYnV0ZShyLGkpO24uaGVhZC5hcHBlbmRDaGlsZChvKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pfWZ1bmN0aW9uIHcoZSl7cmV0dXJuIG51bGw9PWU/ZSsiIjoib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlP25bby5jYWxsKGUpXXx8Im9iamVjdCI6dHlwZW9mIGV9dmFyIGY9IjMuNS4xIixTPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBTLmZuLmluaXQoZSx0KX07ZnVuY3Rpb24gcChlKXt2YXIgdD0hIWUmJiJsZW5ndGgiaW4gZSYmZS5sZW5ndGgsbj13KGUpO3JldHVybiFtKGUpJiYheChlKSYmKCJhcnJheSI9PT1ufHwwPT09dHx8Im51bWJlciI9PXR5cGVvZiB0JiYwPHQmJnQtMSBpbiBlKX1TLmZuPVMucHJvdG90eXBlPXtqcXVlcnk6Zixjb25zdHJ1Y3RvcjpTLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gcy5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/cy5jYWxsKHRoaXMpOmU8MD90aGlzW2UrdGhpcy5sZW5ndGhdOnRoaXNbZV19LHB1c2hTdGFjazpmdW5jdGlvbihlKXt2YXIgdD1TLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxlKTtyZXR1cm4gdC5wcmV2T2JqZWN0PXRoaXMsdH0sZWFjaDpmdW5jdGlvbihlKXtyZXR1cm4gUy5lYWNoKHRoaXMsZSl9LG1hcDpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUy5tYXAodGhpcyxmdW5jdGlvbihlLHQpe3JldHVybiBuLmNhbGwoZSx0LGUpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGV2ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUy5ncmVwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4odCsxKSUyfSkpfSxvZGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUy5ncmVwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCUyfSkpfSxlcTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmxlbmd0aCxuPStlKyhlPDA/dDowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soMDw9biYmbjx0P1t0aGlzW25dXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0scHVzaDp1LHNvcnQ6dC5zb3J0LHNwbGljZTp0LnNwbGljZX0sUy5leHRlbmQ9Uy5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpLG8sYT1hcmd1bWVudHNbMF18fHt9LHM9MSx1PWFyZ3VtZW50cy5sZW5ndGgsbD0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgYSYmKGw9YSxhPWFyZ3VtZW50c1tzXXx8e30scysrKSwib2JqZWN0Ij09dHlwZW9mIGF8fG0oYSl8fChhPXt9KSxzPT09dSYmKGE9dGhpcyxzLS0pO3M8dTtzKyspaWYobnVsbCE9KGU9YXJndW1lbnRzW3NdKSlmb3IodCBpbiBlKXI9ZVt0XSwiX19wcm90b19fIiE9PXQmJmEhPT1yJiYobCYmciYmKFMuaXNQbGFpbk9iamVjdChyKXx8KGk9QXJyYXkuaXNBcnJheShyKSkpPyhuPWFbdF0sbz1pJiYhQXJyYXkuaXNBcnJheShuKT9bXTppfHxTLmlzUGxhaW5PYmplY3Qobik/bjp7fSxpPSExLGFbdF09Uy5leHRlbmQobCxvLHIpKTp2b2lkIDAhPT1yJiYoYVt0XT1yKSk7cmV0dXJuIGF9LFMuZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhmK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKGUpfSxub29wOmZ1bmN0aW9uKCl7fSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuISghZXx8IltvYmplY3QgT2JqZWN0XSIhPT1vLmNhbGwoZSkpJiYoISh0PXIoZSkpfHwiZnVuY3Rpb24iPT10eXBlb2Yobj12LmNhbGwodCwiY29uc3RydWN0b3IiKSYmdC5jb25zdHJ1Y3RvcikmJmEuY2FsbChuKT09PWwpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oZSx0LG4pe2IoZSx7bm9uY2U6dCYmdC5ub25jZX0sbil9LGVhY2g6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTA7aWYocChlKSl7Zm9yKG49ZS5sZW5ndGg7cjxuO3IrKylpZighMT09PXQuY2FsbChlW3JdLHIsZVtyXSkpYnJlYWt9ZWxzZSBmb3IociBpbiBlKWlmKCExPT09dC5jYWxsKGVbcl0scixlW3JdKSlicmVhaztyZXR1cm4gZX0sbWFrZUFycmF5OmZ1bmN0aW9uKGUsdCl7dmFyIG49dHx8W107cmV0dXJuIG51bGwhPWUmJihwKE9iamVjdChlKSk/Uy5tZXJnZShuLCJzdHJpbmciPT10eXBlb2YgZT9bZV06ZSk6dS5jYWxsKG4sZSkpLG59LGluQXJyYXk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT10Py0xOmkuY2FsbCh0LGUsbil9LG1lcmdlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPSt0Lmxlbmd0aCxyPTAsaT1lLmxlbmd0aDtyPG47cisrKWVbaSsrXT10W3JdO3JldHVybiBlLmxlbmd0aD1pLGV9LGdyZXA6ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1bXSxpPTAsbz1lLmxlbmd0aCxhPSFuO2k8bztpKyspIXQoZVtpXSxpKSE9PWEmJnIucHVzaChlW2ldKTtyZXR1cm4gcn0sbWFwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89MCxhPVtdO2lmKHAoZSkpZm9yKHI9ZS5sZW5ndGg7bzxyO28rKyludWxsIT0oaT10KGVbb10sbyxuKSkmJmEucHVzaChpKTtlbHNlIGZvcihvIGluIGUpbnVsbCE9KGk9dChlW29dLG8sbikpJiZhLnB1c2goaSk7cmV0dXJuIGcoYSl9LGd1aWQ6MSxzdXBwb3J0Onl9KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoUy5mbltTeW1ib2wuaXRlcmF0b3JdPXRbU3ltYm9sLml0ZXJhdG9yXSksUy5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbCIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe25bIltvYmplY3QgIit0KyJdIl09dC50b0xvd2VyQ2FzZSgpfSk7dmFyIGQ9ZnVuY3Rpb24obil7dmFyIGUsZCxiLG8saSxoLGYsZyx3LHUsbCxULEMsYSxFLHYscyxjLHksUz0ic2l6emxlIisxKm5ldyBEYXRlLHA9bi5kb2N1bWVudCxrPTAscj0wLG09dWUoKSx4PXVlKCksQT11ZSgpLE49dWUoKSxEPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10JiYobD0hMCksMH0saj17fS5oYXNPd25Qcm9wZXJ0eSx0PVtdLHE9dC5wb3AsTD10LnB1c2gsSD10LnB1c2gsTz10LnNsaWNlLFA9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoZVtuXT09PXQpcmV0dXJuIG47cmV0dXJuLTF9LFI9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIixNPSJbXFx4MjBcXHRcXHJcXG5cXGZdIixJPSIoPzpcXFxcW1xcZGEtZkEtRl17MSw2fSIrTSsiP3xcXFxcW15cXHJcXG5cXGZdfFtcXHctXXxbXlwwLVxceDdmXSkrIixXPSJcXFsiK00rIiooIitJKyIpKD86IitNKyIqKFsqXiR8IX5dPz0pIitNKyIqKD86JygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCJ8KCIrSSsiKSl8KSIrTSsiKlxcXSIsRj0iOigiK0krIikoPzpcXCgoKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwoKD86XFxcXC58W15cXFxcKClbXFxdXXwiK1crIikqKXwuKilcXCl8KSIsQj1uZXcgUmVnRXhwKE0rIisiLCJnIiksJD1uZXcgUmVnRXhwKCJeIitNKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK00rIiskIiwiZyIpLF89bmV3IFJlZ0V4cCgiXiIrTSsiKiwiK00rIioiKSx6PW5ldyBSZWdFeHAoIl4iK00rIiooWz4rfl18IitNKyIpIitNKyIqIiksVT1uZXcgUmVnRXhwKE0rInw+IiksWD1uZXcgUmVnRXhwKEYpLFY9bmV3IFJlZ0V4cCgiXiIrSSsiJCIpLEc9e0lEOm5ldyBSZWdFeHAoIl4jKCIrSSsiKSIpLENMQVNTOm5ldyBSZWdFeHAoIl5cXC4oIitJKyIpIiksVEFHOm5ldyBSZWdFeHAoIl4oIitJKyJ8WypdKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrVyksUFNFVURPOm5ldyBSZWdFeHAoIl4iK0YpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCkiK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAoIl4oPzoiK1IrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitNKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK00rIiooKD86LVxcZCk/XFxkKikiK00rIipcXCl8KSg/PVteLV18JCkiLCJpIil9LFk9L0hUTUwkL2ksUT0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLEo9L15oXGQkL2ksSz0vXltee10rXHtccypcW25hdGl2ZSBcdy8sWj0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLGVlPS9bK35dLyx0ZT1uZXcgUmVnRXhwKCJcXFxcW1xcZGEtZkEtRl17MSw2fSIrTSsiP3xcXFxcKFteXFxyXFxuXFxmXSkiLCJnIiksbmU9ZnVuY3Rpb24oZSx0KXt2YXIgbj0iMHgiK2Uuc2xpY2UoMSktNjU1MzY7cmV0dXJuIHR8fChuPDA/U3RyaW5nLmZyb21DaGFyQ29kZShuKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKG4+PjEwfDU1Mjk2LDEwMjMmbnw1NjMyMCkpfSxyZT0vKFtcMC1ceDFmXHg3Zl18Xi0/XGQpfF4tJHxbXlwwLVx4MWZceDdmLVx1RkZGRlx3LV0vZyxpZT1mdW5jdGlvbihlLHQpe3JldHVybiB0PyJcMCI9PT1lPyJcdWZmZmQiOmUuc2xpY2UoMCwtMSkrIlxcIitlLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSkudG9TdHJpbmcoMTYpKyIgIjoiXFwiK2V9LG9lPWZ1bmN0aW9uKCl7VCgpfSxhZT1iZShmdW5jdGlvbihlKXtyZXR1cm4hMD09PWUuZGlzYWJsZWQmJiJmaWVsZHNldCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9LHtkaXI6InBhcmVudE5vZGUiLG5leHQ6ImxlZ2VuZCJ9KTt0cnl7SC5hcHBseSh0PU8uY2FsbChwLmNoaWxkTm9kZXMpLHAuY2hpbGROb2RlcyksdFtwLmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChlKXtIPXthcHBseTp0Lmxlbmd0aD9mdW5jdGlvbihlLHQpe0wuYXBwbHkoZSxPLmNhbGwodCkpfTpmdW5jdGlvbihlLHQpe3ZhciBuPWUubGVuZ3RoLHI9MDt3aGlsZShlW24rK109dFtyKytdKTtlLmxlbmd0aD1uLTF9fX1mdW5jdGlvbiBzZSh0LGUsbixyKXt2YXIgaSxvLGEscyx1LGwsYyxmPWUmJmUub3duZXJEb2N1bWVudCxwPWU/ZS5ub2RlVHlwZTo5O2lmKG49bnx8W10sInN0cmluZyIhPXR5cGVvZiB0fHwhdHx8MSE9PXAmJjkhPT1wJiYxMSE9PXApcmV0dXJuIG47aWYoIXImJihUKGUpLGU9ZXx8QyxFKSl7aWYoMTEhPT1wJiYodT1aLmV4ZWModCkpKWlmKGk9dVsxXSl7aWYoOT09PXApe2lmKCEoYT1lLmdldEVsZW1lbnRCeUlkKGkpKSlyZXR1cm4gbjtpZihhLmlkPT09aSlyZXR1cm4gbi5wdXNoKGEpLG59ZWxzZSBpZihmJiYoYT1mLmdldEVsZW1lbnRCeUlkKGkpKSYmeShlLGEpJiZhLmlkPT09aSlyZXR1cm4gbi5wdXNoKGEpLG59ZWxzZXtpZih1WzJdKXJldHVybiBILmFwcGx5KG4sZS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0KSksbjtpZigoaT11WzNdKSYmZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEguYXBwbHkobixlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaSkpLG59aWYoZC5xc2EmJiFOW3QrIiAiXSYmKCF2fHwhdi50ZXN0KHQpKSYmKDEhPT1wfHwib2JqZWN0IiE9PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkpe2lmKGM9dCxmPWUsMT09PXAmJihVLnRlc3QodCl8fHoudGVzdCh0KSkpeyhmPWVlLnRlc3QodCkmJnllKGUucGFyZW50Tm9kZSl8fGUpPT09ZSYmZC5zY29wZXx8KChzPWUuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPXMucmVwbGFjZShyZSxpZSk6ZS5zZXRBdHRyaWJ1dGUoImlkIixzPVMpKSxvPShsPWgodCkpLmxlbmd0aDt3aGlsZShvLS0pbFtvXT0ocz8iIyIrczoiOnNjb3BlIikrIiAiK3hlKGxbb10pO2M9bC5qb2luKCIsIil9dHJ5e3JldHVybiBILmFwcGx5KG4sZi5xdWVyeVNlbGVjdG9yQWxsKGMpKSxufWNhdGNoKGUpe04odCwhMCl9ZmluYWxseXtzPT09UyYmZS5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4gZyh0LnJlcGxhY2UoJCwiJDEiKSxlLG4scil9ZnVuY3Rpb24gdWUoKXt2YXIgcj1bXTtyZXR1cm4gZnVuY3Rpb24gZSh0LG4pe3JldHVybiByLnB1c2godCsiICIpPmIuY2FjaGVMZW5ndGgmJmRlbGV0ZSBlW3Iuc2hpZnQoKV0sZVt0KyIgIl09bn19ZnVuY3Rpb24gbGUoZSl7cmV0dXJuIGVbU109ITAsZX1mdW5jdGlvbiBjZShlKXt2YXIgdD1DLmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0Iik7dHJ5e3JldHVybiEhZSh0KX1jYXRjaChlKXtyZXR1cm4hMX1maW5hbGx5e3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHQ9bnVsbH19ZnVuY3Rpb24gZmUoZSx0KXt2YXIgbj1lLnNwbGl0KCJ8Iikscj1uLmxlbmd0aDt3aGlsZShyLS0pYi5hdHRySGFuZGxlW25bcl1dPXR9ZnVuY3Rpb24gcGUoZSx0KXt2YXIgbj10JiZlLHI9biYmMT09PWUubm9kZVR5cGUmJjE9PT10Lm5vZGVUeXBlJiZlLnNvdXJjZUluZGV4LXQuc291cmNlSW5kZXg7aWYocilyZXR1cm4gcjtpZihuKXdoaWxlKG49bi5uZXh0U2libGluZylpZihuPT09dClyZXR1cm4tMTtyZXR1cm4gZT8xOi0xfWZ1bmN0aW9uIGRlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4iaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiZlLnR5cGU9PT10fX1mdW5jdGlvbiBoZShuKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybigiaW5wdXQiPT09dHx8ImJ1dHRvbiI9PT10KSYmZS50eXBlPT09bn19ZnVuY3Rpb24gZ2UodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiJmb3JtImluIGU/ZS5wYXJlbnROb2RlJiYhMT09PWUuZGlzYWJsZWQ/ImxhYmVsImluIGU/ImxhYmVsImluIGUucGFyZW50Tm9kZT9lLnBhcmVudE5vZGUuZGlzYWJsZWQ9PT10OmUuZGlzYWJsZWQ9PT10OmUuaXNEaXNhYmxlZD09PXR8fGUuaXNEaXNhYmxlZCE9PSF0JiZhZShlKT09PXQ6ZS5kaXNhYmxlZD09PXQ6ImxhYmVsImluIGUmJmUuZGlzYWJsZWQ9PT10fX1mdW5jdGlvbiB2ZShhKXtyZXR1cm4gbGUoZnVuY3Rpb24obyl7cmV0dXJuIG89K28sbGUoZnVuY3Rpb24oZSx0KXt2YXIgbixyPWEoW10sZS5sZW5ndGgsbyksaT1yLmxlbmd0aDt3aGlsZShpLS0pZVtuPXJbaV1dJiYoZVtuXT0hKHRbbl09ZVtuXSkpfSl9KX1mdW5jdGlvbiB5ZShlKXtyZXR1cm4gZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEVsZW1lbnRzQnlUYWdOYW1lJiZlfWZvcihlIGluIGQ9c2Uuc3VwcG9ydD17fSxpPXNlLmlzWE1MPWZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZXNwYWNlVVJJLG49KGUub3duZXJEb2N1bWVudHx8ZSkuZG9jdW1lbnRFbGVtZW50O3JldHVybiFZLnRlc3QodHx8biYmbi5ub2RlTmFtZXx8IkhUTUwiKX0sVD1zZS5zZXREb2N1bWVudD1mdW5jdGlvbihlKXt2YXIgdCxuLHI9ZT9lLm93bmVyRG9jdW1lbnR8fGU6cDtyZXR1cm4gciE9QyYmOT09PXIubm9kZVR5cGUmJnIuZG9jdW1lbnRFbGVtZW50JiYoYT0oQz1yKS5kb2N1bWVudEVsZW1lbnQsRT0haShDKSxwIT1DJiYobj1DLmRlZmF1bHRWaWV3KSYmbi50b3AhPT1uJiYobi5hZGRFdmVudExpc3RlbmVyP24uYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIixvZSwhMSk6bi5hdHRhY2hFdmVudCYmbi5hdHRhY2hFdmVudCgib251bmxvYWQiLG9lKSksZC5zY29wZT1jZShmdW5jdGlvbihlKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChlKS5hcHBlbmRDaGlsZChDLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSwidW5kZWZpbmVkIiE9dHlwZW9mIGUucXVlcnlTZWxlY3RvckFsbCYmIWUucXVlcnlTZWxlY3RvckFsbCgiOnNjb3BlIGZpZWxkc2V0IGRpdiIpLmxlbmd0aH0pLGQuYXR0cmlidXRlcz1jZShmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc05hbWU9ImkiLCFlLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxkLmdldEVsZW1lbnRzQnlUYWdOYW1lPWNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKEMuY3JlYXRlQ29tbWVudCgiIikpLCFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPUsudGVzdChDLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpLGQuZ2V0QnlJZD1jZShmdW5jdGlvbihlKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChlKS5pZD1TLCFDLmdldEVsZW1lbnRzQnlOYW1lfHwhQy5nZXRFbGVtZW50c0J5TmFtZShTKS5sZW5ndGh9KSxkLmdldEJ5SWQ/KGIuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZSh0ZSxuZSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgiaWQiKT09PXR9fSxiLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQmJkUpe3ZhciBuPXQuZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIG4/W25dOltdfX0pOihiLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgbj1lLnJlcGxhY2UodGUsbmUpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD0idW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiB0JiZ0LnZhbHVlPT09bn19LGIuZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50QnlJZCYmRSl7dmFyIG4scixpLG89dC5nZXRFbGVtZW50QnlJZChlKTtpZihvKXtpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb107aT10LmdldEVsZW1lbnRzQnlOYW1lKGUpLHI9MDt3aGlsZShvPWlbcisrXSlpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb119cmV0dXJuW119fSksYi5maW5kLlRBRz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGUsdCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lP3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk6ZC5xc2E/dC5xdWVyeVNlbGVjdG9yQWxsKGUpOnZvaWQgMH06ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9MCxvPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk7aWYoIioiPT09ZSl7d2hpbGUobj1vW2krK10pMT09PW4ubm9kZVR5cGUmJnIucHVzaChuKTtyZXR1cm4gcn1yZXR1cm4gb30sYi5maW5kLkNMQVNTPWQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmRSlyZXR1cm4gdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpfSxzPVtdLHY9W10sKGQucXNhPUsudGVzdChDLnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKGNlKGZ1bmN0aW9uKGUpe3ZhciB0O2EuYXBwZW5kQ2hpbGQoZSkuaW5uZXJIVE1MPSI8YSBpZD0nIitTKyInPjwvYT48c2VsZWN0IGlkPSciK1MrIi1cclxcJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsZS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NhcHR1cmVePScnXSIpLmxlbmd0aCYmdi5wdXNoKCJbKl4kXT0iK00rIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8di5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK1IrIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZH49IitTKyItXSIpLmxlbmd0aHx8di5wdXNoKCJ+PSIpLCh0PUMuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkuc2V0QXR0cmlidXRlKCJuYW1lIiwiIiksZS5hcHBlbmRDaGlsZCh0KSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1lPScnXSIpLmxlbmd0aHx8di5wdXNoKCJcXFsiK00rIipuYW1lIitNKyIqPSIrTSsiKig/OicnfFwiXCIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aHx8di5wdXNoKCI6Y2hlY2tlZCIpLGUucXVlcnlTZWxlY3RvckFsbCgiYSMiK1MrIisqIikubGVuZ3RofHx2LnB1c2goIi4jLitbK35dIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJcXFxmIiksdi5wdXNoKCJbXFxyXFxuXFxmXSIpfSksY2UoZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+PHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PiI7dmFyIHQ9Qy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3Quc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJEIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT1kXSIpLmxlbmd0aCYmdi5wdXNoKCJuYW1lIitNKyIqWypeJHwhfl0/PSIpLDIhPT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RoJiZ2LnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksYS5hcHBlbmRDaGlsZChlKS5kaXNhYmxlZD0hMCwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZGlzYWJsZWQiKS5sZW5ndGgmJnYucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSx2LnB1c2goIiwuKjoiKX0pKSwoZC5tYXRjaGVzU2VsZWN0b3I9Sy50ZXN0KGM9YS5tYXRjaGVzfHxhLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8YS5tb3pNYXRjaGVzU2VsZWN0b3J8fGEub01hdGNoZXNTZWxlY3Rvcnx8YS5tc01hdGNoZXNTZWxlY3RvcikpJiZjZShmdW5jdGlvbihlKXtkLmRpc2Nvbm5lY3RlZE1hdGNoPWMuY2FsbChlLCIqIiksYy5jYWxsKGUsIltzIT0nJ106eCIpLHMucHVzaCgiIT0iLEYpfSksdj12Lmxlbmd0aCYmbmV3IFJlZ0V4cCh2LmpvaW4oInwiKSkscz1zLmxlbmd0aCYmbmV3IFJlZ0V4cChzLmpvaW4oInwiKSksdD1LLnRlc3QoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikseT10fHxLLnRlc3QoYS5jb250YWlucyk/ZnVuY3Rpb24oZSx0KXt2YXIgbj05PT09ZS5ub2RlVHlwZT9lLmRvY3VtZW50RWxlbWVudDplLHI9dCYmdC5wYXJlbnROb2RlO3JldHVybiBlPT09cnx8ISghcnx8MSE9PXIubm9kZVR5cGV8fCEobi5jb250YWlucz9uLmNvbnRhaW5zKHIpOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocikpKX06ZnVuY3Rpb24oZSx0KXtpZih0KXdoaWxlKHQ9dC5wYXJlbnROb2RlKWlmKHQ9PT1lKXJldHVybiEwO3JldHVybiExfSxEPXQ/ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gbD0hMCwwO3ZhciBuPSFlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiBufHwoMSYobj0oZS5vd25lckRvY3VtZW50fHxlKT09KHQub3duZXJEb2N1bWVudHx8dCk/ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KToxKXx8IWQuc29ydERldGFjaGVkJiZ0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpPT09bj9lPT1DfHxlLm93bmVyRG9jdW1lbnQ9PXAmJnkocCxlKT8tMTp0PT1DfHx0Lm93bmVyRG9jdW1lbnQ9PXAmJnkocCx0KT8xOnU/UCh1LGUpLVAodSx0KTowOjQmbj8tMToxKX06ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gbD0hMCwwO3ZhciBuLHI9MCxpPWUucGFyZW50Tm9kZSxvPXQucGFyZW50Tm9kZSxhPVtlXSxzPVt0XTtpZighaXx8IW8pcmV0dXJuIGU9PUM/LTE6dD09Qz8xOmk/LTE6bz8xOnU/UCh1LGUpLVAodSx0KTowO2lmKGk9PT1vKXJldHVybiBwZShlLHQpO249ZTt3aGlsZShuPW4ucGFyZW50Tm9kZSlhLnVuc2hpZnQobik7bj10O3doaWxlKG49bi5wYXJlbnROb2RlKXMudW5zaGlmdChuKTt3aGlsZShhW3JdPT09c1tyXSlyKys7cmV0dXJuIHI/cGUoYVtyXSxzW3JdKTphW3JdPT1wPy0xOnNbcl09PXA/MTowfSksQ30sc2UubWF0Y2hlcz1mdW5jdGlvbihlLHQpe3JldHVybiBzZShlLG51bGwsbnVsbCx0KX0sc2UubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7aWYoVChlKSxkLm1hdGNoZXNTZWxlY3RvciYmRSYmIU5bdCsiICJdJiYoIXN8fCFzLnRlc3QodCkpJiYoIXZ8fCF2LnRlc3QodCkpKXRyeXt2YXIgbj1jLmNhbGwoZSx0KTtpZihufHxkLmRpc2Nvbm5lY3RlZE1hdGNofHxlLmRvY3VtZW50JiYxMSE9PWUuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIG59Y2F0Y2goZSl7Tih0LCEwKX1yZXR1cm4gMDxzZSh0LEMsbnVsbCxbZV0pLmxlbmd0aH0sc2UuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZS5vd25lckRvY3VtZW50fHxlKSE9QyYmVChlKSx5KGUsdCl9LHNlLmF0dHI9ZnVuY3Rpb24oZSx0KXsoZS5vd25lckRvY3VtZW50fHxlKSE9QyYmVChlKTt2YXIgbj1iLmF0dHJIYW5kbGVbdC50b0xvd2VyQ2FzZSgpXSxyPW4mJmouY2FsbChiLmF0dHJIYW5kbGUsdC50b0xvd2VyQ2FzZSgpKT9uKGUsdCwhRSk6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1yP3I6ZC5hdHRyaWJ1dGVzfHwhRT9lLmdldEF0dHJpYnV0ZSh0KToocj1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZyLnNwZWNpZmllZD9yLnZhbHVlOm51bGx9LHNlLmVzY2FwZT1mdW5jdGlvbihlKXtyZXR1cm4oZSsiIikucmVwbGFjZShyZSxpZSl9LHNlLmVycm9yPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX0sc2UudW5pcXVlU29ydD1mdW5jdGlvbihlKXt2YXIgdCxuPVtdLHI9MCxpPTA7aWYobD0hZC5kZXRlY3REdXBsaWNhdGVzLHU9IWQuc29ydFN0YWJsZSYmZS5zbGljZSgwKSxlLnNvcnQoRCksbCl7d2hpbGUodD1lW2krK10pdD09PWVbaV0mJihyPW4ucHVzaChpKSk7d2hpbGUoci0tKWUuc3BsaWNlKG5bcl0sMSl9cmV0dXJuIHU9bnVsbCxlfSxvPXNlLmdldFRleHQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj0iIixyPTAsaT1lLm5vZGVUeXBlO2lmKGkpe2lmKDE9PT1pfHw5PT09aXx8MTE9PT1pKXtpZigic3RyaW5nIj09dHlwZW9mIGUudGV4dENvbnRlbnQpcmV0dXJuIGUudGV4dENvbnRlbnQ7Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKW4rPW8oZSl9ZWxzZSBpZigzPT09aXx8ND09PWkpcmV0dXJuIGUubm9kZVZhbHVlfWVsc2Ugd2hpbGUodD1lW3IrK10pbis9byh0KTtyZXR1cm4gbn0sKGI9c2Uuc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86bGUsbWF0Y2g6RyxhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS5yZXBsYWNlKHRlLG5lKSxlWzNdPShlWzNdfHxlWzRdfHxlWzVdfHwiIikucmVwbGFjZSh0ZSxuZSksIn49Ij09PWVbMl0mJihlWzNdPSIgIitlWzNdKyIgIiksZS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnRvTG93ZXJDYXNlKCksIm50aCI9PT1lWzFdLnNsaWNlKDAsMyk/KGVbM118fHNlLmVycm9yKGVbMF0pLGVbNF09KyhlWzRdP2VbNV0rKGVbNl18fDEpOjIqKCJldmVuIj09PWVbM118fCJvZGQiPT09ZVszXSkpLGVbNV09KyhlWzddK2VbOF18fCJvZGQiPT09ZVszXSkpOmVbM10mJnNlLmVycm9yKGVbMF0pLGV9LFBTRVVETzpmdW5jdGlvbihlKXt2YXIgdCxuPSFlWzZdJiZlWzJdO3JldHVybiBHLkNISUxELnRlc3QoZVswXSk/bnVsbDooZVszXT9lWzJdPWVbNF18fGVbNV18fCIiOm4mJlgudGVzdChuKSYmKHQ9aChuLCEwKSkmJih0PW4uaW5kZXhPZigiKSIsbi5sZW5ndGgtdCktbi5sZW5ndGgpJiYoZVswXT1lWzBdLnNsaWNlKDAsdCksZVsyXT1uLnNsaWNlKDAsdCkpLGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UodGUsbmUpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09ZT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dH19LENMQVNTOmZ1bmN0aW9uKGUpe3ZhciB0PW1bZSsiICJdO3JldHVybiB0fHwodD1uZXcgUmVnRXhwKCIoXnwiK00rIikiK2UrIigiK00rInwkKSIpKSYmbShlLGZ1bmN0aW9uKGUpe3JldHVybiB0LnRlc3QoInN0cmluZyI9PXR5cGVvZiBlLmNsYXNzTmFtZSYmZS5jbGFzc05hbWV8fCJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0sQVRUUjpmdW5jdGlvbihuLHIsaSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PXNlLmF0dHIoZSxuKTtyZXR1cm4gbnVsbD09dD8iIT0iPT09cjohcnx8KHQrPSIiLCI9Ij09PXI/dD09PWk6IiE9Ij09PXI/dCE9PWk6Il49Ij09PXI/aSYmMD09PXQuaW5kZXhPZihpKToiKj0iPT09cj9pJiYtMTx0LmluZGV4T2YoaSk6IiQ9Ij09PXI/aSYmdC5zbGljZSgtaS5sZW5ndGgpPT09aToifj0iPT09cj8tMTwoIiAiK3QucmVwbGFjZShCLCIgIikrIiAiKS5pbmRleE9mKGkpOiJ8PSI9PT1yJiYodD09PWl8fHQuc2xpY2UoMCxpLmxlbmd0aCsxKT09PWkrIi0iKSl9fSxDSElMRDpmdW5jdGlvbihoLGUsdCxnLHYpe3ZhciB5PSJudGgiIT09aC5zbGljZSgwLDMpLG09Imxhc3QiIT09aC5zbGljZSgtNCkseD0ib2YtdHlwZSI9PT1lO3JldHVybiAxPT09ZyYmMD09PXY/ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbD15IT09bT8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLGM9ZS5wYXJlbnROb2RlLGY9eCYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHA9IW4mJiF4LGQ9ITE7aWYoYyl7aWYoeSl7d2hpbGUobCl7YT1lO3doaWxlKGE9YVtsXSlpZih4P2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWY6MT09PWEubm9kZVR5cGUpcmV0dXJuITE7dT1sPSJvbmx5Ij09PWgmJiF1JiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKHU9W20/Yy5maXJzdENoaWxkOmMubGFzdENoaWxkXSxtJiZwKXtkPShzPShyPShpPShvPShhPWMpW1NdfHwoYVtTXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdfHxbXSlbMF09PT1rJiZyWzFdKSYmclsyXSxhPXMmJmMuY2hpbGROb2Rlc1tzXTt3aGlsZShhPSsrcyYmYSYmYVtsXXx8KGQ9cz0wKXx8dS5wb3AoKSlpZigxPT09YS5ub2RlVHlwZSYmKytkJiZhPT09ZSl7aVtoXT1bayxzLGRdO2JyZWFrfX1lbHNlIGlmKHAmJihkPXM9KHI9KGk9KG89KGE9ZSlbU118fChhW1NdPXt9KSlbYS51bmlxdWVJRF18fChvW2EudW5pcXVlSURdPXt9KSlbaF18fFtdKVswXT09PWsmJnJbMV0pLCExPT09ZCl3aGlsZShhPSsrcyYmYSYmYVtsXXx8KGQ9cz0wKXx8dS5wb3AoKSlpZigoeD9hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1mOjE9PT1hLm5vZGVUeXBlKSYmKytkJiYocCYmKChpPShvPWFbU118fChhW1NdPXt9KSlbYS51bmlxdWVJRF18fChvW2EudW5pcXVlSURdPXt9KSlbaF09W2ssZF0pLGE9PT1lKSlicmVhaztyZXR1cm4oZC09dik9PT1nfHxkJWc9PTAmJjA8PWQvZ319fSxQU0VVRE86ZnVuY3Rpb24oZSxvKXt2YXIgdCxhPWIucHNldWRvc1tlXXx8Yi5zZXRGaWx0ZXJzW2UudG9Mb3dlckNhc2UoKV18fHNlLmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrZSk7cmV0dXJuIGFbU10/YShvKToxPGEubGVuZ3RoPyh0PVtlLGUsIiIsb10sYi5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/bGUoZnVuY3Rpb24oZSx0KXt2YXIgbixyPWEoZSxvKSxpPXIubGVuZ3RoO3doaWxlKGktLSllW249UChlLHJbaV0pXT0hKHRbbl09cltpXSl9KTpmdW5jdGlvbihlKXtyZXR1cm4gYShlLDAsdCl9KTphfX0scHNldWRvczp7bm90OmxlKGZ1bmN0aW9uKGUpe3ZhciByPVtdLGk9W10scz1mKGUucmVwbGFjZSgkLCIkMSIpKTtyZXR1cm4gc1tTXT9sZShmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvPXMoZSxudWxsLHIsW10pLGE9ZS5sZW5ndGg7d2hpbGUoYS0tKShpPW9bYV0pJiYoZVthXT0hKHRbYV09aSkpfSk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiByWzBdPWUscyhyLG51bGwsbixpKSxyWzBdPW51bGwsIWkucG9wKCl9fSksaGFzOmxlKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gMDxzZSh0LGUpLmxlbmd0aH19KSxjb250YWluczpsZShmdW5jdGlvbih0KXtyZXR1cm4gdD10LnJlcGxhY2UodGUsbmUpLGZ1bmN0aW9uKGUpe3JldHVybi0xPChlLnRleHRDb250ZW50fHxvKGUpKS5pbmRleE9mKHQpfX0pLGxhbmc6bGUoZnVuY3Rpb24obil7cmV0dXJuIFYudGVzdChufHwiIil8fHNlLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK24pLG49bi5yZXBsYWNlKHRlLG5lKS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKGUpe3ZhciB0O2Rve2lmKHQ9RT9lLmxhbmc6ZS5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIil8fGUuZ2V0QXR0cmlidXRlKCJsYW5nIikpcmV0dXJuKHQ9dC50b0xvd2VyQ2FzZSgpKT09PW58fDA9PT10LmluZGV4T2YobisiLSIpfXdoaWxlKChlPWUucGFyZW50Tm9kZSkmJjE9PT1lLm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5sb2NhdGlvbiYmbi5sb2NhdGlvbi5oYXNoO3JldHVybiB0JiZ0LnNsaWNlKDEpPT09ZS5pZH0scm9vdDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PWF9LGZvY3VzOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09Qy5hY3RpdmVFbGVtZW50JiYoIUMuaGFzRm9jdXN8fEMuaGFzRm9jdXMoKSkmJiEhKGUudHlwZXx8ZS5ocmVmfHx+ZS50YWJJbmRleCl9LGVuYWJsZWQ6Z2UoITEpLGRpc2FibGVkOmdlKCEwKSxjaGVja2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmISFlLmNoZWNrZWR8fCJvcHRpb24iPT09dCYmISFlLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCwhMD09PWUuc2VsZWN0ZWR9LGVtcHR5OmZ1bmN0aW9uKGUpe2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZylpZihlLm5vZGVUeXBlPDYpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihlKXtyZXR1cm4hYi5wc2V1ZG9zLmVtcHR5KGUpfSxoZWFkZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIEoudGVzdChlLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFEudGVzdChlLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmImJ1dHRvbiI9PT1lLnR5cGV8fCJidXR0b24iPT09dH0sdGV4dDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4iaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1lLnR5cGUmJihudWxsPT0odD1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8InRleHQiPT09dC50b0xvd2VyQ2FzZSgpKX0sZmlyc3Q6dmUoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0OnZlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuW3QtMV19KSxlcTp2ZShmdW5jdGlvbihlLHQsbil7cmV0dXJuW248MD9uK3Q6bl19KSxldmVuOnZlKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0O24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksb2RkOnZlKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTE7bjx0O24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksbHQ6dmUoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0OnQ8bj90Om47MDw9LS1yOyllLnB1c2gocik7cmV0dXJuIGV9KSxndDp2ZShmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW48MD9uK3Q6bjsrK3I8dDspZS5wdXNoKHIpO3JldHVybiBlfSl9fSkucHNldWRvcy5udGg9Yi5wc2V1ZG9zLmVxLHtyYWRpbzohMCxjaGVja2JveDohMCxmaWxlOiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSliLnBzZXVkb3NbZV09ZGUoZSk7Zm9yKGUgaW57c3VibWl0OiEwLHJlc2V0OiEwfSliLnBzZXVkb3NbZV09aGUoZSk7ZnVuY3Rpb24gbWUoKXt9ZnVuY3Rpb24geGUoZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aCxyPSIiO3Q8bjt0Kyspcis9ZVt0XS52YWx1ZTtyZXR1cm4gcn1mdW5jdGlvbiBiZShzLGUsdCl7dmFyIHU9ZS5kaXIsbD1lLm5leHQsYz1sfHx1LGY9dCYmInBhcmVudE5vZGUiPT09YyxwPXIrKztyZXR1cm4gZS5maXJzdD9mdW5jdGlvbihlLHQsbil7d2hpbGUoZT1lW3VdKWlmKDE9PT1lLm5vZGVUeXBlfHxmKXJldHVybiBzKGUsdCxuKTtyZXR1cm4hMX06ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPVtrLHBdO2lmKG4pe3doaWxlKGU9ZVt1XSlpZigoMT09PWUubm9kZVR5cGV8fGYpJiZzKGUsdCxuKSlyZXR1cm4hMH1lbHNlIHdoaWxlKGU9ZVt1XSlpZigxPT09ZS5ub2RlVHlwZXx8ZilpZihpPShvPWVbU118fChlW1NdPXt9KSlbZS51bmlxdWVJRF18fChvW2UudW5pcXVlSURdPXt9KSxsJiZsPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKWU9ZVt1XXx8ZTtlbHNle2lmKChyPWlbY10pJiZyWzBdPT09ayYmclsxXT09PXApcmV0dXJuIGFbMl09clsyXTtpZigoaVtjXT1hKVsyXT1zKGUsdCxuKSlyZXR1cm4hMH1yZXR1cm4hMX19ZnVuY3Rpb24gd2UoaSl7cmV0dXJuIDE8aS5sZW5ndGg/ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWkubGVuZ3RoO3doaWxlKHItLSlpZighaVtyXShlLHQsbikpcmV0dXJuITE7cmV0dXJuITB9OmlbMF19ZnVuY3Rpb24gVGUoZSx0LG4scixpKXtmb3IodmFyIG8sYT1bXSxzPTAsdT1lLmxlbmd0aCxsPW51bGwhPXQ7czx1O3MrKykobz1lW3NdKSYmKG4mJiFuKG8scixpKXx8KGEucHVzaChvKSxsJiZ0LnB1c2gocykpKTtyZXR1cm4gYX1mdW5jdGlvbiBDZShkLGgsZyx2LHksZSl7cmV0dXJuIHYmJiF2W1NdJiYodj1DZSh2KSkseSYmIXlbU10mJih5PUNlKHksZSkpLGxlKGZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzPVtdLHU9W10sbD10Lmxlbmd0aCxjPWV8fGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspc2UoZSx0W3JdLG4pO3JldHVybiBufShofHwiKiIsbi5ub2RlVHlwZT9bbl06bixbXSksZj0hZHx8IWUmJmg/YzpUZShjLHMsZCxuLHIpLHA9Zz95fHwoZT9kOmx8fHYpP1tdOnQ6ZjtpZihnJiZnKGYscCxuLHIpLHYpe2k9VGUocCx1KSx2KGksW10sbixyKSxvPWkubGVuZ3RoO3doaWxlKG8tLSkoYT1pW29dKSYmKHBbdVtvXV09IShmW3Vbb11dPWEpKX1pZihlKXtpZih5fHxkKXtpZih5KXtpPVtdLG89cC5sZW5ndGg7d2hpbGUoby0tKShhPXBbb10pJiZpLnB1c2goZltvXT1hKTt5KG51bGwscD1bXSxpLHIpfW89cC5sZW5ndGg7d2hpbGUoby0tKShhPXBbb10pJiYtMTwoaT15P1AoZSxhKTpzW29dKSYmKGVbaV09ISh0W2ldPWEpKX19ZWxzZSBwPVRlKHA9PT10P3Auc3BsaWNlKGwscC5sZW5ndGgpOnApLHk/eShudWxsLHQscCxyKTpILmFwcGx5KHQscCl9KX1mdW5jdGlvbiBFZShlKXtmb3IodmFyIGksdCxuLHI9ZS5sZW5ndGgsbz1iLnJlbGF0aXZlW2VbMF0udHlwZV0sYT1vfHxiLnJlbGF0aXZlWyIgIl0scz1vPzE6MCx1PWJlKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09aX0sYSwhMCksbD1iZShmdW5jdGlvbihlKXtyZXR1cm4tMTxQKGksZSl9LGEsITApLGM9W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj0hbyYmKG58fHQhPT13KXx8KChpPXQpLm5vZGVUeXBlP3UoZSx0LG4pOmwoZSx0LG4pKTtyZXR1cm4gaT1udWxsLHJ9XTtzPHI7cysrKWlmKHQ9Yi5yZWxhdGl2ZVtlW3NdLnR5cGVdKWM9W2JlKHdlKGMpLHQpXTtlbHNle2lmKCh0PWIuZmlsdGVyW2Vbc10udHlwZV0uYXBwbHkobnVsbCxlW3NdLm1hdGNoZXMpKVtTXSl7Zm9yKG49KytzO248cjtuKyspaWYoYi5yZWxhdGl2ZVtlW25dLnR5cGVdKWJyZWFrO3JldHVybiBDZSgxPHMmJndlKGMpLDE8cyYmeGUoZS5zbGljZSgwLHMtMSkuY29uY2F0KHt2YWx1ZToiICI9PT1lW3MtMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFjZSgkLCIkMSIpLHQsczxuJiZFZShlLnNsaWNlKHMsbikpLG48ciYmRWUoZT1lLnNsaWNlKG4pKSxuPHImJnhlKGUpKX1jLnB1c2godCl9cmV0dXJuIHdlKGMpfXJldHVybiBtZS5wcm90b3R5cGU9Yi5maWx0ZXJzPWIucHNldWRvcyxiLnNldEZpbHRlcnM9bmV3IG1lLGg9c2UudG9rZW5pemU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhLHMsdSxsPXhbZSsiICJdO2lmKGwpcmV0dXJuIHQ/MDpsLnNsaWNlKDApO2E9ZSxzPVtdLHU9Yi5wcmVGaWx0ZXI7d2hpbGUoYSl7Zm9yKG8gaW4gbiYmIShyPV8uZXhlYyhhKSl8fChyJiYoYT1hLnNsaWNlKHJbMF0ubGVuZ3RoKXx8YSkscy5wdXNoKGk9W10pKSxuPSExLChyPXouZXhlYyhhKSkmJihuPXIuc2hpZnQoKSxpLnB1c2goe3ZhbHVlOm4sdHlwZTpyWzBdLnJlcGxhY2UoJCwiICIpfSksYT1hLnNsaWNlKG4ubGVuZ3RoKSksYi5maWx0ZXIpIShyPUdbb10uZXhlYyhhKSl8fHVbb10mJiEocj11W29dKHIpKXx8KG49ci5zaGlmdCgpLGkucHVzaCh7dmFsdWU6bix0eXBlOm8sbWF0Y2hlczpyfSksYT1hLnNsaWNlKG4ubGVuZ3RoKSk7aWYoIW4pYnJlYWt9cmV0dXJuIHQ/YS5sZW5ndGg6YT9zZS5lcnJvcihlKTp4KGUscykuc2xpY2UoMCl9LGY9c2UuY29tcGlsZT1mdW5jdGlvbihlLHQpe3ZhciBuLHYseSxtLHgscixpPVtdLG89W10sYT1BW2UrIiAiXTtpZighYSl7dHx8KHQ9aChlKSksbj10Lmxlbmd0aDt3aGlsZShuLS0pKGE9RWUodFtuXSkpW1NdP2kucHVzaChhKTpvLnB1c2goYSk7KGE9QShlLCh2PW8sbT0wPCh5PWkpLmxlbmd0aCx4PTA8di5sZW5ndGgscj1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLGEscyx1PTAsbD0iMCIsYz1lJiZbXSxmPVtdLHA9dyxkPWV8fHgmJmIuZmluZC5UQUcoIioiLGkpLGg9ays9bnVsbD09cD8xOk1hdGgucmFuZG9tKCl8fC4xLGc9ZC5sZW5ndGg7Zm9yKGkmJih3PXQ9PUN8fHR8fGkpO2whPT1nJiZudWxsIT0obz1kW2xdKTtsKyspe2lmKHgmJm8pe2E9MCx0fHxvLm93bmVyRG9jdW1lbnQ9PUN8fChUKG8pLG49IUUpO3doaWxlKHM9dlthKytdKWlmKHMobyx0fHxDLG4pKXtyLnB1c2gobyk7YnJlYWt9aSYmKGs9aCl9bSYmKChvPSFzJiZvKSYmdS0tLGUmJmMucHVzaChvKSl9aWYodSs9bCxtJiZsIT09dSl7YT0wO3doaWxlKHM9eVthKytdKXMoYyxmLHQsbik7aWYoZSl7aWYoMDx1KXdoaWxlKGwtLSljW2xdfHxmW2xdfHwoZltsXT1xLmNhbGwocikpO2Y9VGUoZil9SC5hcHBseShyLGYpLGkmJiFlJiYwPGYubGVuZ3RoJiYxPHUreS5sZW5ndGgmJnNlLnVuaXF1ZVNvcnQocil9cmV0dXJuIGkmJihrPWgsdz1wKSxjfSxtP2xlKHIpOnIpKSkuc2VsZWN0b3I9ZX1yZXR1cm4gYX0sZz1zZS5zZWxlY3Q9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHMsdSxsPSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLGM9IXImJmgoZT1sLnNlbGVjdG9yfHxlKTtpZihuPW58fFtdLDE9PT1jLmxlbmd0aCl7aWYoMjwobz1jWzBdPWNbMF0uc2xpY2UoMCkpLmxlbmd0aCYmIklEIj09PShhPW9bMF0pLnR5cGUmJjk9PT10Lm5vZGVUeXBlJiZFJiZiLnJlbGF0aXZlW29bMV0udHlwZV0pe2lmKCEodD0oYi5maW5kLklEKGEubWF0Y2hlc1swXS5yZXBsYWNlKHRlLG5lKSx0KXx8W10pWzBdKSlyZXR1cm4gbjtsJiYodD10LnBhcmVudE5vZGUpLGU9ZS5zbGljZShvLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1pPUcubmVlZHNDb250ZXh0LnRlc3QoZSk/MDpvLmxlbmd0aDt3aGlsZShpLS0pe2lmKGE9b1tpXSxiLnJlbGF0aXZlW3M9YS50eXBlXSlicmVhaztpZigodT1iLmZpbmRbc10pJiYocj11KGEubWF0Y2hlc1swXS5yZXBsYWNlKHRlLG5lKSxlZS50ZXN0KG9bMF0udHlwZSkmJnllKHQucGFyZW50Tm9kZSl8fHQpKSl7aWYoby5zcGxpY2UoaSwxKSwhKGU9ci5sZW5ndGgmJnhlKG8pKSlyZXR1cm4gSC5hcHBseShuLHIpLG47YnJlYWt9fX1yZXR1cm4obHx8ZihlLGMpKShyLHQsIUUsbiwhdHx8ZWUudGVzdChlKSYmeWUodC5wYXJlbnROb2RlKXx8dCksbn0sZC5zb3J0U3RhYmxlPVMuc3BsaXQoIiIpLnNvcnQoRCkuam9pbigiIik9PT1TLGQuZGV0ZWN0RHVwbGljYXRlcz0hIWwsVCgpLGQuc29ydERldGFjaGVkPWNlKGZ1bmN0aW9uKGUpe3JldHVybiAxJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oQy5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpKX0pLGNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGZlKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihlLHQsbil7aWYoIW4pcmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQsInR5cGUiPT09dC50b0xvd2VyQ2FzZSgpPzE6Mil9KSxkLmF0dHJpYnV0ZXMmJmNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGlucHV0Lz4iLGUuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGZlKCJ2YWx1ZSIsZnVuY3Rpb24oZSx0LG4pe2lmKCFuJiYiaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBlLmRlZmF1bHRWYWx1ZX0pLGNlKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxmZShSLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZighbilyZXR1cm4hMD09PWVbdF0/dC50b0xvd2VyQ2FzZSgpOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6bnVsbH0pLHNlfShDKTtTLmZpbmQ9ZCxTLmV4cHI9ZC5zZWxlY3RvcnMsUy5leHByWyI6Il09Uy5leHByLnBzZXVkb3MsUy51bmlxdWVTb3J0PVMudW5pcXVlPWQudW5pcXVlU29ydCxTLnRleHQ9ZC5nZXRUZXh0LFMuaXNYTUxEb2M9ZC5pc1hNTCxTLmNvbnRhaW5zPWQuY29udGFpbnMsUy5lc2NhcGVTZWxlY3Rvcj1kLmVzY2FwZTt2YXIgaD1mdW5jdGlvbihlLHQsbil7dmFyIHI9W10saT12b2lkIDAhPT1uO3doaWxlKChlPWVbdF0pJiY5IT09ZS5ub2RlVHlwZSlpZigxPT09ZS5ub2RlVHlwZSl7aWYoaSYmUyhlKS5pcyhuKSlicmVhaztyLnB1c2goZSl9cmV0dXJuIHJ9LFQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W107ZTtlPWUubmV4dFNpYmxpbmcpMT09PWUubm9kZVR5cGUmJmUhPT10JiZuLnB1c2goZSk7cmV0dXJuIG59LGs9Uy5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtmdW5jdGlvbiBBKGUsdCl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX12YXIgTj0vXjwoW2Etel1bXlwvXDA+Olx4MjBcdFxyXG5cZl0qKVtceDIwXHRcclxuXGZdKlwvPz4oPzo8XC9cMT58KSQvaTtmdW5jdGlvbiBEKGUsbixyKXtyZXR1cm4gbShuKT9TLmdyZXAoZSxmdW5jdGlvbihlLHQpe3JldHVybiEhbi5jYWxsKGUsdCxlKSE9PXJ9KTpuLm5vZGVUeXBlP1MuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09biE9PXJ9KToic3RyaW5nIiE9dHlwZW9mIG4/Uy5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuLTE8aS5jYWxsKG4sZSkhPT1yfSk6Uy5maWx0ZXIobixlLHIpfVMuZmlsdGVyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP1MuZmluZC5tYXRjaGVzU2VsZWN0b3IocixlKT9bcl06W106Uy5maW5kLm1hdGNoZXMoZSxTLmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9KSl9LFMuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzLmxlbmd0aCxpPXRoaXM7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiB0aGlzLnB1c2hTdGFjayhTKGUpLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7dDxyO3QrKylpZihTLmNvbnRhaW5zKGlbdF0sdGhpcykpcmV0dXJuITB9KSk7Zm9yKG49dGhpcy5wdXNoU3RhY2soW10pLHQ9MDt0PHI7dCsrKVMuZmluZChlLGlbdF0sbik7cmV0dXJuIDE8cj9TLnVuaXF1ZVNvcnQobik6bn0sZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhEKHRoaXMsZXx8W10sITEpKX0sbm90OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhEKHRoaXMsZXx8W10sITApKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFEKHRoaXMsInN0cmluZyI9PXR5cGVvZiBlJiZrLnRlc3QoZSk/UyhlKTplfHxbXSwhMSkubGVuZ3RofX0pO3ZhciBqLHE9L14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0rKSkkLzsoUy5mbi5pbml0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKCFlKXJldHVybiB0aGlzO2lmKG49bnx8aiwic3RyaW5nIj09dHlwZW9mIGUpe2lmKCEocj0iPCI9PT1lWzBdJiYiPiI9PT1lW2UubGVuZ3RoLTFdJiYzPD1lLmxlbmd0aD9bbnVsbCxlLG51bGxdOnEuZXhlYyhlKSl8fCFyWzFdJiZ0KXJldHVybiF0fHx0LmpxdWVyeT8odHx8bikuZmluZChlKTp0aGlzLmNvbnN0cnVjdG9yKHQpLmZpbmQoZSk7aWYoclsxXSl7aWYodD10IGluc3RhbmNlb2YgUz90WzBdOnQsUy5tZXJnZSh0aGlzLFMucGFyc2VIVE1MKHJbMV0sdCYmdC5ub2RlVHlwZT90Lm93bmVyRG9jdW1lbnR8fHQ6RSwhMCkpLE4udGVzdChyWzFdKSYmUy5pc1BsYWluT2JqZWN0KHQpKWZvcihyIGluIHQpbSh0aGlzW3JdKT90aGlzW3JdKHRbcl0pOnRoaXMuYXR0cihyLHRbcl0pO3JldHVybiB0aGlzfXJldHVybihpPUUuZ2V0RWxlbWVudEJ5SWQoclsyXSkpJiYodGhpc1swXT1pLHRoaXMubGVuZ3RoPTEpLHRoaXN9cmV0dXJuIGUubm9kZVR5cGU/KHRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOm0oZSk/dm9pZCAwIT09bi5yZWFkeT9uLnJlYWR5KGUpOmUoUyk6Uy5tYWtlQXJyYXkoZSx0aGlzKX0pLnByb3RvdHlwZT1TLmZuLGo9UyhFKTt2YXIgTD0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxIPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O2Z1bmN0aW9uIE8oZSx0KXt3aGlsZSgoZT1lW3RdKSYmMSE9PWUubm9kZVR5cGUpO3JldHVybiBlfVMuZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24oZSl7dmFyIHQ9UyhlLHRoaXMpLG49dC5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxuO2UrKylpZihTLmNvbnRhaW5zKHRoaXMsdFtlXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXRoaXMubGVuZ3RoLG89W10sYT0ic3RyaW5nIiE9dHlwZW9mIGUmJlMoZSk7aWYoIWsudGVzdChlKSlmb3IoO3I8aTtyKyspZm9yKG49dGhpc1tyXTtuJiZuIT09dDtuPW4ucGFyZW50Tm9kZSlpZihuLm5vZGVUeXBlPDExJiYoYT8tMTxhLmluZGV4KG4pOjE9PT1uLm5vZGVUeXBlJiZTLmZpbmQubWF0Y2hlc1NlbGVjdG9yKG4sZSkpKXtvLnB1c2gobik7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKDE8by5sZW5ndGg/Uy51bmlxdWVTb3J0KG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/aS5jYWxsKFMoZSksdGhpc1swXSk6aS5jYWxsKHRoaXMsZS5qcXVlcnk/ZVswXTplKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnB1c2hTdGFjayhTLnVuaXF1ZVNvcnQoUy5tZXJnZSh0aGlzLmdldCgpLFMoZSx0KSkpKX0sYWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSksUy5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBoKGUsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaChlLCJwYXJlbnROb2RlIixuKX0sbmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gTyhlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBPKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBoKGUsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIGgoZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGgoZSwibmV4dFNpYmxpbmciLG4pfSxwcmV2VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBoKGUsInByZXZpb3VzU2libGluZyIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiBUKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4gVChlLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZS5jb250ZW50RG9jdW1lbnQmJnIoZS5jb250ZW50RG9jdW1lbnQpP2UuY29udGVudERvY3VtZW50OihBKGUsInRlbXBsYXRlIikmJihlPWUuY29udGVudHx8ZSksUy5tZXJnZShbXSxlLmNoaWxkTm9kZXMpKX19LGZ1bmN0aW9uKHIsaSl7Uy5mbltyXT1mdW5jdGlvbihlLHQpe3ZhciBuPVMubWFwKHRoaXMsaSxlKTtyZXR1cm4iVW50aWwiIT09ci5zbGljZSgtNSkmJih0PWUpLHQmJiJzdHJpbmciPT10eXBlb2YgdCYmKG49Uy5maWx0ZXIodCxuKSksMTx0aGlzLmxlbmd0aCYmKEhbcl18fFMudW5pcXVlU29ydChuKSxMLnRlc3QocikmJm4ucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhuKX19KTt2YXIgUD0vW15ceDIwXHRcclxuXGZdKy9nO2Z1bmN0aW9uIFIoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gTShlKXt0aHJvdyBlfWZ1bmN0aW9uIEkoZSx0LG4scil7dmFyIGk7dHJ5e2UmJm0oaT1lLnByb21pc2UpP2kuY2FsbChlKS5kb25lKHQpLmZhaWwobik6ZSYmbShpPWUudGhlbik/aS5jYWxsKGUsdCxuKTp0LmFwcGx5KHZvaWQgMCxbZV0uc2xpY2UocikpfWNhdGNoKGUpe24uYXBwbHkodm9pZCAwLFtlXSl9fVMuQ2FsbGJhY2tzPWZ1bmN0aW9uKHIpe3ZhciBlLG47cj0ic3RyaW5nIj09dHlwZW9mIHI/KGU9cixuPXt9LFMuZWFjaChlLm1hdGNoKFApfHxbXSxmdW5jdGlvbihlLHQpe25bdF09ITB9KSxuKTpTLmV4dGVuZCh7fSxyKTt2YXIgaSx0LG8sYSxzPVtdLHU9W10sbD0tMSxjPWZ1bmN0aW9uKCl7Zm9yKGE9YXx8ci5vbmNlLG89aT0hMDt1Lmxlbmd0aDtsPS0xKXt0PXUuc2hpZnQoKTt3aGlsZSgrK2w8cy5sZW5ndGgpITE9PT1zW2xdLmFwcGx5KHRbMF0sdFsxXSkmJnIuc3RvcE9uRmFsc2UmJihsPXMubGVuZ3RoLHQ9ITEpfXIubWVtb3J5fHwodD0hMSksaT0hMSxhJiYocz10P1tdOiIiKX0sZj17YWRkOmZ1bmN0aW9uKCl7cmV0dXJuIHMmJih0JiYhaSYmKGw9cy5sZW5ndGgtMSx1LnB1c2godCkpLGZ1bmN0aW9uIG4oZSl7Uy5lYWNoKGUsZnVuY3Rpb24oZSx0KXttKHQpP3IudW5pcXVlJiZmLmhhcyh0KXx8cy5wdXNoKHQpOnQmJnQubGVuZ3RoJiYic3RyaW5nIiE9PXcodCkmJm4odCl9KX0oYXJndW1lbnRzKSx0JiYhaSYmYygpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gUy5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKC0xPChuPVMuaW5BcnJheSh0LHMsbikpKXMuc3BsaWNlKG4sMSksbjw9bCYmbC0tfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlPy0xPFMuaW5BcnJheShlLHMpOjA8cy5sZW5ndGh9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHMmJihzPVtdKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9dT1bXSxzPXQ9IiIsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hc30sbG9jazpmdW5jdGlvbigpe3JldHVybiBhPXU9W10sdHx8aXx8KHM9dD0iIiksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuISFhfSxmaXJlV2l0aDpmdW5jdGlvbihlLHQpe3JldHVybiBhfHwodD1bZSwodD10fHxbXSkuc2xpY2U/dC5zbGljZSgpOnRdLHUucHVzaCh0KSxpfHxjKCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gZi5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIW99fTtyZXR1cm4gZn0sUy5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGUpe3ZhciBvPVtbIm5vdGlmeSIsInByb2dyZXNzIixTLkNhbGxiYWNrcygibWVtb3J5IiksUy5DYWxsYmFja3MoIm1lbW9yeSIpLDJdLFsicmVzb2x2ZSIsImRvbmUiLFMuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLFMuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLDAsInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIixTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwxLCJyZWplY3RlZCJdXSxpPSJwZW5kaW5nIixhPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBpfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gcy5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LCJjYXRjaCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGEudGhlbihudWxsLGUpfSxwaXBlOmZ1bmN0aW9uKCl7dmFyIGk9YXJndW1lbnRzO3JldHVybiBTLkRlZmVycmVkKGZ1bmN0aW9uKHIpe1MuZWFjaChvLGZ1bmN0aW9uKGUsdCl7dmFyIG49bShpW3RbNF1dKSYmaVt0WzRdXTtzW3RbMV1dKGZ1bmN0aW9uKCl7dmFyIGU9biYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZSYmbShlLnByb21pc2UpP2UucHJvbWlzZSgpLnByb2dyZXNzKHIubm90aWZ5KS5kb25lKHIucmVzb2x2ZSkuZmFpbChyLnJlamVjdCk6clt0WzBdKyJXaXRoIl0odGhpcyxuP1tlXTphcmd1bWVudHMpfSl9KSxpPW51bGx9KS5wcm9taXNlKCl9LHRoZW46ZnVuY3Rpb24odCxuLHIpe3ZhciB1PTA7ZnVuY3Rpb24gbChpLG8sYSxzKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLHI9YXJndW1lbnRzLGU9ZnVuY3Rpb24oKXt2YXIgZSx0O2lmKCEoaTx1KSl7aWYoKGU9YS5hcHBseShuLHIpKT09PW8ucHJvbWlzZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvbiIpO3Q9ZSYmKCJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpJiZlLnRoZW4sbSh0KT9zP3QuY2FsbChlLGwodSxvLFIscyksbCh1LG8sTSxzKSk6KHUrKyx0LmNhbGwoZSxsKHUsbyxSLHMpLGwodSxvLE0scyksbCh1LG8sUixvLm5vdGlmeVdpdGgpKSk6KGEhPT1SJiYobj12b2lkIDAscj1bZV0pLChzfHxvLnJlc29sdmVXaXRoKShuLHIpKX19LHQ9cz9lOmZ1bmN0aW9uKCl7dHJ5e2UoKX1jYXRjaChlKXtTLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2smJlMuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayhlLHQuc3RhY2tUcmFjZSksdTw9aSsxJiYoYSE9PU0mJihuPXZvaWQgMCxyPVtlXSksby5yZWplY3RXaXRoKG4scikpfX07aT90KCk6KFMuRGVmZXJyZWQuZ2V0U3RhY2tIb29rJiYodC5zdGFja1RyYWNlPVMuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCkpLEMuc2V0VGltZW91dCh0KSl9fXJldHVybiBTLkRlZmVycmVkKGZ1bmN0aW9uKGUpe29bMF1bM10uYWRkKGwoMCxlLG0ocik/cjpSLGUubm90aWZ5V2l0aCkpLG9bMV1bM10uYWRkKGwoMCxlLG0odCk/dDpSKSksb1syXVszXS5hZGQobCgwLGUsbShuKT9uOk0pKX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZT9TLmV4dGVuZChlLGEpOmF9fSxzPXt9O3JldHVybiBTLmVhY2gobyxmdW5jdGlvbihlLHQpe3ZhciBuPXRbMl0scj10WzVdO2FbdFsxXV09bi5hZGQsciYmbi5hZGQoZnVuY3Rpb24oKXtpPXJ9LG9bMy1lXVsyXS5kaXNhYmxlLG9bMy1lXVszXS5kaXNhYmxlLG9bMF1bMl0ubG9jayxvWzBdWzNdLmxvY2spLG4uYWRkKHRbM10uZmlyZSksc1t0WzBdXT1mdW5jdGlvbigpe3JldHVybiBzW3RbMF0rIldpdGgiXSh0aGlzPT09cz92b2lkIDA6dGhpcyxhcmd1bWVudHMpLHRoaXN9LHNbdFswXSsiV2l0aCJdPW4uZmlyZVdpdGh9KSxhLnByb21pc2UocyksZSYmZS5jYWxsKHMscyksc30sd2hlbjpmdW5jdGlvbihlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHQ9bixyPUFycmF5KHQpLGk9cy5jYWxsKGFyZ3VtZW50cyksbz1TLkRlZmVycmVkKCksYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7clt0XT10aGlzLGlbdF09MTxhcmd1bWVudHMubGVuZ3RoP3MuY2FsbChhcmd1bWVudHMpOmUsLS1ufHxvLnJlc29sdmVXaXRoKHIsaSl9fTtpZihuPD0xJiYoSShlLG8uZG9uZShhKHQpKS5yZXNvbHZlLG8ucmVqZWN0LCFuKSwicGVuZGluZyI9PT1vLnN0YXRlKCl8fG0oaVt0XSYmaVt0XS50aGVuKSkpcmV0dXJuIG8udGhlbigpO3doaWxlKHQtLSlJKGlbdF0sYSh0KSxvLnJlamVjdCk7cmV0dXJuIG8ucHJvbWlzZSgpfX0pO3ZhciBXPS9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO1MuRGVmZXJyZWQuZXhjZXB0aW9uSG9vaz1mdW5jdGlvbihlLHQpe0MuY29uc29sZSYmQy5jb25zb2xlLndhcm4mJmUmJlcudGVzdChlLm5hbWUpJiZDLmNvbnNvbGUud2FybigialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogIitlLm1lc3NhZ2UsZS5zdGFjayx0KX0sUy5yZWFkeUV4Y2VwdGlvbj1mdW5jdGlvbihlKXtDLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9O3ZhciBGPVMuRGVmZXJyZWQoKTtmdW5jdGlvbiBCKCl7RS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixCKSxDLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLEIpLFMucmVhZHkoKX1TLmZuLnJlYWR5PWZ1bmN0aW9uKGUpe3JldHVybiBGLnRoZW4oZSlbImNhdGNoIl0oZnVuY3Rpb24oZSl7Uy5yZWFkeUV4Y2VwdGlvbihlKX0pLHRoaXN9LFMuZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLHJlYWR5OmZ1bmN0aW9uKGUpeyghMD09PWU/LS1TLnJlYWR5V2FpdDpTLmlzUmVhZHkpfHwoUy5pc1JlYWR5PSEwKSE9PWUmJjA8LS1TLnJlYWR5V2FpdHx8Ri5yZXNvbHZlV2l0aChFLFtTXSl9fSksUy5yZWFkeS50aGVuPUYudGhlbiwiY29tcGxldGUiPT09RS5yZWFkeVN0YXRlfHwibG9hZGluZyIhPT1FLnJlYWR5U3RhdGUmJiFFLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbD9DLnNldFRpbWVvdXQoUy5yZWFkeSk6KEUuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiksQy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixCKSk7dmFyICQ9ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIHM9MCx1PWUubGVuZ3RoLGw9bnVsbD09bjtpZigib2JqZWN0Ij09PXcobikpZm9yKHMgaW4gaT0hMCxuKSQoZSx0LHMsbltzXSwhMCxvLGEpO2Vsc2UgaWYodm9pZCAwIT09ciYmKGk9ITAsbShyKXx8KGE9ITApLGwmJihhPyh0LmNhbGwoZSxyKSx0PW51bGwpOihsPXQsdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGwuY2FsbChTKGUpLG4pfSkpLHQpKWZvcig7czx1O3MrKyl0KGVbc10sbixhP3I6ci5jYWxsKGVbc10scyx0KGVbc10sbikpKTtyZXR1cm4gaT9lOmw/dC5jYWxsKGUpOnU/dChlWzBdLG4pOm99LF89L14tbXMtLyx6PS8tKFthLXpdKS9nO2Z1bmN0aW9uIFUoZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIFgoZSl7cmV0dXJuIGUucmVwbGFjZShfLCJtcy0iKS5yZXBsYWNlKHosVSl9dmFyIFY9ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfHw5PT09ZS5ub2RlVHlwZXx8IStlLm5vZGVUeXBlfTtmdW5jdGlvbiBHKCl7dGhpcy5leHBhbmRvPVMuZXhwYW5kbytHLnVpZCsrfUcudWlkPTEsRy5wcm90b3R5cGU9e2NhY2hlOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdHx8KHQ9e30sVihlKSYmKGUubm9kZVR5cGU/ZVt0aGlzLmV4cGFuZG9dPXQ6T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdGhpcy5leHBhbmRvLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pKSksdH0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXRoaXMuY2FjaGUoZSk7aWYoInN0cmluZyI9PXR5cGVvZiB0KWlbWCh0KV09bjtlbHNlIGZvcihyIGluIHQpaVtYKHIpXT10W3JdO3JldHVybiBpfSxnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLmNhY2hlKGUpOmVbdGhpcy5leHBhbmRvXSYmZVt0aGlzLmV4cGFuZG9dW1godCldfSxhY2Nlc3M6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT10fHx0JiYic3RyaW5nIj09dHlwZW9mIHQmJnZvaWQgMD09PW4/dGhpcy5nZXQoZSx0KToodGhpcy5zZXQoZSx0LG4pLHZvaWQgMCE9PW4/bjp0KX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lW3RoaXMuZXhwYW5kb107aWYodm9pZCAwIT09cil7aWYodm9pZCAwIT09dCl7bj0odD1BcnJheS5pc0FycmF5KHQpP3QubWFwKFgpOih0PVgodCkpaW4gcj9bdF06dC5tYXRjaChQKXx8W10pLmxlbmd0aDt3aGlsZShuLS0pZGVsZXRlIHJbdFtuXV19KHZvaWQgMD09PXR8fFMuaXNFbXB0eU9iamVjdChyKSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT12b2lkIDA6ZGVsZXRlIGVbdGhpcy5leHBhbmRvXSl9fSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdm9pZCAwIT09dCYmIVMuaXNFbXB0eU9iamVjdCh0KX19O3ZhciBZPW5ldyBHLFE9bmV3IEcsSj0vXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLEs9L1tBLVpdL2c7ZnVuY3Rpb24gWihlLHQsbil7dmFyIHIsaTtpZih2b2lkIDA9PT1uJiYxPT09ZS5ub2RlVHlwZSlpZihyPSJkYXRhLSIrdC5yZXBsYWNlKEssIi0kJiIpLnRvTG93ZXJDYXNlKCksInN0cmluZyI9PXR5cGVvZihuPWUuZ2V0QXR0cmlidXRlKHIpKSl7dHJ5e249InRydWUiPT09KGk9bil8fCJmYWxzZSIhPT1pJiYoIm51bGwiPT09aT9udWxsOmk9PT0raSsiIj8raTpKLnRlc3QoaSk/SlNPTi5wYXJzZShpKTppKX1jYXRjaChlKXt9US5zZXQoZSx0LG4pfWVsc2Ugbj12b2lkIDA7cmV0dXJuIG59Uy5leHRlbmQoe2hhc0RhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIFEuaGFzRGF0YShlKXx8WS5oYXNEYXRhKGUpfSxkYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUS5hY2Nlc3MoZSx0LG4pfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCl7US5yZW1vdmUoZSx0KX0sX2RhdGE6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBZLmFjY2VzcyhlLHQsbil9LF9yZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCl7WS5yZW1vdmUoZSx0KX19KSxTLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihuLGUpe3ZhciB0LHIsaSxvPXRoaXNbMF0sYT1vJiZvLmF0dHJpYnV0ZXM7aWYodm9pZCAwPT09bil7aWYodGhpcy5sZW5ndGgmJihpPVEuZ2V0KG8pLDE9PT1vLm5vZGVUeXBlJiYhWS5nZXQobywiaGFzRGF0YUF0dHJzIikpKXt0PWEubGVuZ3RoO3doaWxlKHQtLSlhW3RdJiYwPT09KHI9YVt0XS5uYW1lKS5pbmRleE9mKCJkYXRhLSIpJiYocj1YKHIuc2xpY2UoNSkpLFoobyxyLGlbcl0pKTtZLnNldChvLCJoYXNEYXRhQXR0cnMiLCEwKX1yZXR1cm4gaX1yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG4/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7US5zZXQodGhpcyxuKX0pOiQodGhpcyxmdW5jdGlvbihlKXt2YXIgdDtpZihvJiZ2b2lkIDA9PT1lKXJldHVybiB2b2lkIDAhPT0odD1RLmdldChvLG4pKT90OnZvaWQgMCE9PSh0PVoobyxuKSk/dDp2b2lkIDA7dGhpcy5lYWNoKGZ1bmN0aW9uKCl7US5zZXQodGhpcyxuLGUpfSl9LG51bGwsZSwxPGFyZ3VtZW50cy5sZW5ndGgsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1EucmVtb3ZlKHRoaXMsZSl9KX19KSxTLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKGUpcmV0dXJuIHQ9KHR8fCJmeCIpKyJxdWV1ZSIscj1ZLmdldChlLHQpLG4mJighcnx8QXJyYXkuaXNBcnJheShuKT9yPVkuYWNjZXNzKGUsdCxTLm1ha2VBcnJheShuKSk6ci5wdXNoKG4pKSxyfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj1TLnF1ZXVlKGUsdCkscj1uLmxlbmd0aCxpPW4uc2hpZnQoKSxvPVMuX3F1ZXVlSG9va3MoZSx0KTsiaW5wcm9ncmVzcyI9PT1pJiYoaT1uLnNoaWZ0KCksci0tKSxpJiYoImZ4Ij09PXQmJm4udW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBvLnN0b3AsaS5jYWxsKGUsZnVuY3Rpb24oKXtTLmRlcXVldWUoZSx0KX0sbykpLCFyJiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIjtyZXR1cm4gWS5nZXQoZSxuKXx8WS5hY2Nlc3MoZSxuLHtlbXB0eTpTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtZLnJlbW92ZShlLFt0KyJxdWV1ZSIsbl0pfSl9KX19KSxTLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24odCxuKXt2YXIgZT0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgdCYmKG49dCx0PSJmeCIsZS0tKSxhcmd1bWVudHMubGVuZ3RoPGU/Uy5xdWV1ZSh0aGlzWzBdLHQpOnZvaWQgMD09PW4/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1TLnF1ZXVlKHRoaXMsdCxuKTtTLl9xdWV1ZUhvb2tzKHRoaXMsdCksImZ4Ij09PXQmJiJpbnByb2dyZXNzIiE9PWVbMF0mJlMuZGVxdWV1ZSh0aGlzLHQpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1MuZGVxdWV1ZSh0aGlzLGUpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucXVldWUoZXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTEsaT1TLkRlZmVycmVkKCksbz10aGlzLGE9dGhpcy5sZW5ndGgscz1mdW5jdGlvbigpey0tcnx8aS5yZXNvbHZlV2l0aChvLFtvXSl9OyJzdHJpbmciIT10eXBlb2YgZSYmKHQ9ZSxlPXZvaWQgMCksZT1lfHwiZngiO3doaWxlKGEtLSkobj1ZLmdldChvW2FdLGUrInF1ZXVlSG9va3MiKSkmJm4uZW1wdHkmJihyKyssbi5lbXB0eS5hZGQocykpO3JldHVybiBzKCksaS5wcm9taXNlKHQpfX0pO3ZhciBlZT0vWystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvLnNvdXJjZSx0ZT1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrZWUrIikoW2EteiVdKikkIiwiaSIpLG5lPVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0scmU9RS5kb2N1bWVudEVsZW1lbnQsaWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFMuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfSxvZT17Y29tcG9zZWQ6ITB9O3JlLmdldFJvb3ROb2RlJiYoaWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFMuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfHxlLmdldFJvb3ROb2RlKG9lKT09PWUub3duZXJEb2N1bWVudH0pO3ZhciBhZT1mdW5jdGlvbihlLHQpe3JldHVybiJub25lIj09PShlPXR8fGUpLnN0eWxlLmRpc3BsYXl8fCIiPT09ZS5zdHlsZS5kaXNwbGF5JiZpZShlKSYmIm5vbmUiPT09Uy5jc3MoZSwiZGlzcGxheSIpfTtmdW5jdGlvbiBzZShlLHQsbixyKXt2YXIgaSxvLGE9MjAscz1yP2Z1bmN0aW9uKCl7cmV0dXJuIHIuY3VyKCl9OmZ1bmN0aW9uKCl7cmV0dXJuIFMuY3NzKGUsdCwiIil9LHU9cygpLGw9biYmblszXXx8KFMuY3NzTnVtYmVyW3RdPyIiOiJweCIpLGM9ZS5ub2RlVHlwZSYmKFMuY3NzTnVtYmVyW3RdfHwicHgiIT09bCYmK3UpJiZ0ZS5leGVjKFMuY3NzKGUsdCkpO2lmKGMmJmNbM10hPT1sKXt1Lz0yLGw9bHx8Y1szXSxjPSt1fHwxO3doaWxlKGEtLSlTLnN0eWxlKGUsdCxjK2wpLCgxLW8pKigxLShvPXMoKS91fHwuNSkpPD0wJiYoYT0wKSxjLz1vO2MqPTIsUy5zdHlsZShlLHQsYytsKSxuPW58fFtdfXJldHVybiBuJiYoYz0rY3x8K3V8fDAsaT1uWzFdP2MrKG5bMV0rMSkqblsyXTorblsyXSxyJiYoci51bml0PWwsci5zdGFydD1jLHIuZW5kPWkpKSxpfXZhciB1ZT17fTtmdW5jdGlvbiBsZShlLHQpe2Zvcih2YXIgbixyLGksbyxhLHMsdSxsPVtdLGM9MCxmPWUubGVuZ3RoO2M8ZjtjKyspKHI9ZVtjXSkuc3R5bGUmJihuPXIuc3R5bGUuZGlzcGxheSx0Pygibm9uZSI9PT1uJiYobFtjXT1ZLmdldChyLCJkaXNwbGF5Iil8fG51bGwsbFtjXXx8KHIuc3R5bGUuZGlzcGxheT0iIikpLCIiPT09ci5zdHlsZS5kaXNwbGF5JiZhZShyKSYmKGxbY109KHU9YT1vPXZvaWQgMCxhPShpPXIpLm93bmVyRG9jdW1lbnQscz1pLm5vZGVOYW1lLCh1PXVlW3NdKXx8KG89YS5ib2R5LmFwcGVuZENoaWxkKGEuY3JlYXRlRWxlbWVudChzKSksdT1TLmNzcyhvLCJkaXNwbGF5Iiksby5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pLCJub25lIj09PXUmJih1PSJibG9jayIpLHVlW3NdPXUpKSkpOiJub25lIiE9PW4mJihsW2NdPSJub25lIixZLnNldChyLCJkaXNwbGF5IixuKSkpO2ZvcihjPTA7YzxmO2MrKyludWxsIT1sW2NdJiYoZVtjXS5zdHlsZS5kaXNwbGF5PWxbY10pO3JldHVybiBlfVMuZm4uZXh0ZW5kKHtzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIGxlKHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIGxlKHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZT9lP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe2FlKHRoaXMpP1ModGhpcykuc2hvdygpOlModGhpcykuaGlkZSgpfSl9fSk7dmFyIGNlLGZlLHBlPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pLGRlPS88KFthLXpdW15cL1wwPlx4MjBcdFxyXG5cZl0qKS9pLGhlPS9eJHxebW9kdWxlJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaTtjZT1FLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS5hcHBlbmRDaGlsZChFLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSwoZmU9RS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGZlLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKSxmZS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJ0IiksY2UuYXBwZW5kQ2hpbGQoZmUpLHkuY2hlY2tDbG9uZT1jZS5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsY2UuaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+Iix5Lm5vQ2xvbmVDaGVja2VkPSEhY2UuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlLGNlLmlubmVySFRNTD0iPG9wdGlvbj48L29wdGlvbj4iLHkub3B0aW9uPSEhY2UubGFzdENoaWxkO3ZhciBnZT17dGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLGNvbDpbMiwiPHRhYmxlPjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDpbMCwiIiwiIl19O2Z1bmN0aW9uIHZlKGUsdCl7dmFyIG47cmV0dXJuIG49InVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEVsZW1lbnRzQnlUYWdOYW1lP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHx8IioiKToidW5kZWZpbmVkIiE9dHlwZW9mIGUucXVlcnlTZWxlY3RvckFsbD9lLnF1ZXJ5U2VsZWN0b3JBbGwodHx8IioiKTpbXSx2b2lkIDA9PT10fHx0JiZBKGUsdCk/Uy5tZXJnZShbZV0sbik6bn1mdW5jdGlvbiB5ZShlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylZLnNldChlW25dLCJnbG9iYWxFdmFsIiwhdHx8WS5nZXQodFtuXSwiZ2xvYmFsRXZhbCIpKX1nZS50Ym9keT1nZS50Zm9vdD1nZS5jb2xncm91cD1nZS5jYXB0aW9uPWdlLnRoZWFkLGdlLnRoPWdlLnRkLHkub3B0aW9ufHwoZ2Uub3B0Z3JvdXA9Z2Uub3B0aW9uPVsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0pO3ZhciBtZT0vPHwmIz9cdys7LztmdW5jdGlvbiB4ZShlLHQsbixyLGkpe2Zvcih2YXIgbyxhLHMsdSxsLGMsZj10LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxwPVtdLGQ9MCxoPWUubGVuZ3RoO2Q8aDtkKyspaWYoKG89ZVtkXSl8fDA9PT1vKWlmKCJvYmplY3QiPT09dyhvKSlTLm1lcmdlKHAsby5ub2RlVHlwZT9bb106byk7ZWxzZSBpZihtZS50ZXN0KG8pKXthPWF8fGYuYXBwZW5kQ2hpbGQodC5jcmVhdGVFbGVtZW50KCJkaXYiKSkscz0oZGUuZXhlYyhvKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSx1PWdlW3NdfHxnZS5fZGVmYXVsdCxhLmlubmVySFRNTD11WzFdK1MuaHRtbFByZWZpbHRlcihvKSt1WzJdLGM9dVswXTt3aGlsZShjLS0pYT1hLmxhc3RDaGlsZDtTLm1lcmdlKHAsYS5jaGlsZE5vZGVzKSwoYT1mLmZpcnN0Q2hpbGQpLnRleHRDb250ZW50PSIifWVsc2UgcC5wdXNoKHQuY3JlYXRlVGV4dE5vZGUobykpO2YudGV4dENvbnRlbnQ9IiIsZD0wO3doaWxlKG89cFtkKytdKWlmKHImJi0xPFMuaW5BcnJheShvLHIpKWkmJmkucHVzaChvKTtlbHNlIGlmKGw9aWUobyksYT12ZShmLmFwcGVuZENoaWxkKG8pLCJzY3JpcHQiKSxsJiZ5ZShhKSxuKXtjPTA7d2hpbGUobz1hW2MrK10paGUudGVzdChvLnR5cGV8fCIiKSYmbi5wdXNoKG8pfXJldHVybiBmfXZhciBiZT0vXmtleS8sd2U9L14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLFRlPS9eKFteLl0qKSg/OlwuKC4rKXwpLztmdW5jdGlvbiBDZSgpe3JldHVybiEwfWZ1bmN0aW9uIEVlKCl7cmV0dXJuITF9ZnVuY3Rpb24gU2UoZSx0KXtyZXR1cm4gZT09PWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBFLmFjdGl2ZUVsZW1lbnR9Y2F0Y2goZSl7fX0oKT09KCJmb2N1cyI9PT10KX1mdW5jdGlvbiBrZShlLHQsbixyLGksbyl7dmFyIGEscztpZigib2JqZWN0Ij09dHlwZW9mIHQpe2ZvcihzIGluInN0cmluZyIhPXR5cGVvZiBuJiYocj1yfHxuLG49dm9pZCAwKSx0KWtlKGUscyxuLHIsdFtzXSxvKTtyZXR1cm4gZX1pZihudWxsPT1yJiZudWxsPT1pPyhpPW4scj1uPXZvaWQgMCk6bnVsbD09aSYmKCJzdHJpbmciPT10eXBlb2Ygbj8oaT1yLHI9dm9pZCAwKTooaT1yLHI9bixuPXZvaWQgMCkpLCExPT09aSlpPUVlO2Vsc2UgaWYoIWkpcmV0dXJuIGU7cmV0dXJuIDE9PT1vJiYoYT1pLChpPWZ1bmN0aW9uKGUpe3JldHVybiBTKCkub2ZmKGUpLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSkuZ3VpZD1hLmd1aWR8fChhLmd1aWQ9Uy5ndWlkKyspKSxlLmVhY2goZnVuY3Rpb24oKXtTLmV2ZW50LmFkZCh0aGlzLHQsaSxyLG4pfSl9ZnVuY3Rpb24gQWUoZSxpLG8pe28/KFkuc2V0KGUsaSwhMSksUy5ldmVudC5hZGQoZSxpLHtuYW1lc3BhY2U6ITEsaGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdCxuLHI9WS5nZXQodGhpcyxpKTtpZigxJmUuaXNUcmlnZ2VyJiZ0aGlzW2ldKXtpZihyLmxlbmd0aCkoUy5ldmVudC5zcGVjaWFsW2ldfHx7fSkuZGVsZWdhdGVUeXBlJiZlLnN0b3BQcm9wYWdhdGlvbigpO2Vsc2UgaWYocj1zLmNhbGwoYXJndW1lbnRzKSxZLnNldCh0aGlzLGksciksdD1vKHRoaXMsaSksdGhpc1tpXSgpLHIhPT0obj1ZLmdldCh0aGlzLGkpKXx8dD9ZLnNldCh0aGlzLGksITEpOm49e30sciE9PW4pcmV0dXJuIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpLG4udmFsdWV9ZWxzZSByLmxlbmd0aCYmKFkuc2V0KHRoaXMsaSx7dmFsdWU6Uy5ldmVudC50cmlnZ2VyKFMuZXh0ZW5kKHJbMF0sUy5FdmVudC5wcm90b3R5cGUpLHIuc2xpY2UoMSksdGhpcyl9KSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19KSk6dm9pZCAwPT09WS5nZXQoZSxpKSYmUy5ldmVudC5hZGQoZSxpLENlKX1TLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIG8sYSxzLHUsbCxjLGYscCxkLGgsZyx2PVkuZ2V0KHQpO2lmKFYodCkpe24uaGFuZGxlciYmKG49KG89bikuaGFuZGxlcixpPW8uc2VsZWN0b3IpLGkmJlMuZmluZC5tYXRjaGVzU2VsZWN0b3IocmUsaSksbi5ndWlkfHwobi5ndWlkPVMuZ3VpZCsrKSwodT12LmV2ZW50cyl8fCh1PXYuZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCkpLChhPXYuaGFuZGxlKXx8KGE9di5oYW5kbGU9ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBTJiZTLmV2ZW50LnRyaWdnZXJlZCE9PWUudHlwZT9TLmV2ZW50LmRpc3BhdGNoLmFwcGx5KHQsYXJndW1lbnRzKTp2b2lkIDB9KSxsPShlPShlfHwiIikubWF0Y2goUCl8fFsiIl0pLmxlbmd0aDt3aGlsZShsLS0pZD1nPShzPVRlLmV4ZWMoZVtsXSl8fFtdKVsxXSxoPShzWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksZCYmKGY9Uy5ldmVudC5zcGVjaWFsW2RdfHx7fSxkPShpP2YuZGVsZWdhdGVUeXBlOmYuYmluZFR5cGUpfHxkLGY9Uy5ldmVudC5zcGVjaWFsW2RdfHx7fSxjPVMuZXh0ZW5kKHt0eXBlOmQsb3JpZ1R5cGU6ZyxkYXRhOnIsaGFuZGxlcjpuLGd1aWQ6bi5ndWlkLHNlbGVjdG9yOmksbmVlZHNDb250ZXh0OmkmJlMuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChpKSxuYW1lc3BhY2U6aC5qb2luKCIuIil9LG8pLChwPXVbZF0pfHwoKHA9dVtkXT1bXSkuZGVsZWdhdGVDb3VudD0wLGYuc2V0dXAmJiExIT09Zi5zZXR1cC5jYWxsKHQscixoLGEpfHx0LmFkZEV2ZW50TGlzdGVuZXImJnQuYWRkRXZlbnRMaXN0ZW5lcihkLGEpKSxmLmFkZCYmKGYuYWRkLmNhbGwodCxjKSxjLmhhbmRsZXIuZ3VpZHx8KGMuaGFuZGxlci5ndWlkPW4uZ3VpZCkpLGk/cC5zcGxpY2UocC5kZWxlZ2F0ZUNvdW50KyssMCxjKTpwLnB1c2goYyksUy5ldmVudC5nbG9iYWxbZF09ITApfX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8sYSxzLHUsbCxjLGYscCxkLGgsZyx2PVkuaGFzRGF0YShlKSYmWS5nZXQoZSk7aWYodiYmKHU9di5ldmVudHMpKXtsPSh0PSh0fHwiIikubWF0Y2goUCl8fFsiIl0pLmxlbmd0aDt3aGlsZShsLS0paWYoZD1nPShzPVRlLmV4ZWModFtsXSl8fFtdKVsxXSxoPShzWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksZCl7Zj1TLmV2ZW50LnNwZWNpYWxbZF18fHt9LHA9dVtkPShyP2YuZGVsZWdhdGVUeXBlOmYuYmluZFR5cGUpfHxkXXx8W10scz1zWzJdJiZuZXcgUmVnRXhwKCIoXnxcXC4pIitoLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpLGE9bz1wLmxlbmd0aDt3aGlsZShvLS0pYz1wW29dLCFpJiZnIT09Yy5vcmlnVHlwZXx8biYmbi5ndWlkIT09Yy5ndWlkfHxzJiYhcy50ZXN0KGMubmFtZXNwYWNlKXx8ciYmciE9PWMuc2VsZWN0b3ImJigiKioiIT09cnx8IWMuc2VsZWN0b3IpfHwocC5zcGxpY2UobywxKSxjLnNlbGVjdG9yJiZwLmRlbGVnYXRlQ291bnQtLSxmLnJlbW92ZSYmZi5yZW1vdmUuY2FsbChlLGMpKTthJiYhcC5sZW5ndGgmJihmLnRlYXJkb3duJiYhMSE9PWYudGVhcmRvd24uY2FsbChlLGgsdi5oYW5kbGUpfHxTLnJlbW92ZUV2ZW50KGUsZCx2LmhhbmRsZSksZGVsZXRlIHVbZF0pfWVsc2UgZm9yKGQgaW4gdSlTLmV2ZW50LnJlbW92ZShlLGQrdFtsXSxuLHIsITApO1MuaXNFbXB0eU9iamVjdCh1KSYmWS5yZW1vdmUoZSwiaGFuZGxlIGV2ZW50cyIpfX0sZGlzcGF0Y2g6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxhLHM9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLHU9Uy5ldmVudC5maXgoZSksbD0oWS5nZXQodGhpcywiZXZlbnRzIil8fE9iamVjdC5jcmVhdGUobnVsbCkpW3UudHlwZV18fFtdLGM9Uy5ldmVudC5zcGVjaWFsW3UudHlwZV18fHt9O2ZvcihzWzBdPXUsdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspc1t0XT1hcmd1bWVudHNbdF07aWYodS5kZWxlZ2F0ZVRhcmdldD10aGlzLCFjLnByZURpc3BhdGNofHwhMSE9PWMucHJlRGlzcGF0Y2guY2FsbCh0aGlzLHUpKXthPVMuZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLHUsbCksdD0wO3doaWxlKChpPWFbdCsrXSkmJiF1LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe3UuY3VycmVudFRhcmdldD1pLmVsZW0sbj0wO3doaWxlKChvPWkuaGFuZGxlcnNbbisrXSkmJiF1LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpdS5ybmFtZXNwYWNlJiYhMSE9PW8ubmFtZXNwYWNlJiYhdS5ybmFtZXNwYWNlLnRlc3Qoby5uYW1lc3BhY2UpfHwodS5oYW5kbGVPYmo9byx1LmRhdGE9by5kYXRhLHZvaWQgMCE9PShyPSgoUy5ldmVudC5zcGVjaWFsW28ub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxvLmhhbmRsZXIpLmFwcGx5KGkuZWxlbSxzKSkmJiExPT09KHUucmVzdWx0PXIpJiYodS5wcmV2ZW50RGVmYXVsdCgpLHUuc3RvcFByb3BhZ2F0aW9uKCkpKX1yZXR1cm4gYy5wb3N0RGlzcGF0Y2gmJmMucG9zdERpc3BhdGNoLmNhbGwodGhpcyx1KSx1LnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzPVtdLHU9dC5kZWxlZ2F0ZUNvdW50LGw9ZS50YXJnZXQ7aWYodSYmbC5ub2RlVHlwZSYmISgiY2xpY2siPT09ZS50eXBlJiYxPD1lLmJ1dHRvbikpZm9yKDtsIT09dGhpcztsPWwucGFyZW50Tm9kZXx8dGhpcylpZigxPT09bC5ub2RlVHlwZSYmKCJjbGljayIhPT1lLnR5cGV8fCEwIT09bC5kaXNhYmxlZCkpe2ZvcihvPVtdLGE9e30sbj0wO248dTtuKyspdm9pZCAwPT09YVtpPShyPXRbbl0pLnNlbGVjdG9yKyIgIl0mJihhW2ldPXIubmVlZHNDb250ZXh0Py0xPFMoaSx0aGlzKS5pbmRleChsKTpTLmZpbmQoaSx0aGlzLG51bGwsW2xdKS5sZW5ndGgpLGFbaV0mJm8ucHVzaChyKTtvLmxlbmd0aCYmcy5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6b30pfXJldHVybiBsPXRoaXMsdTx0Lmxlbmd0aCYmcy5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6dC5zbGljZSh1KX0pLHN9LGFkZFByb3A6ZnVuY3Rpb24odCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoUy5FdmVudC5wcm90b3R5cGUsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0Om0oZSk/ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIGUodGhpcy5vcmlnaW5hbEV2ZW50KX06ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFt0XX0sc2V0OmZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmV9KX19KX0sZml4OmZ1bmN0aW9uKGUpe3JldHVybiBlW1MuZXhwYW5kb10/ZTpuZXcgUy5FdmVudChlKX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGNsaWNrOntzZXR1cDpmdW5jdGlvbihlKXt2YXIgdD10aGlzfHxlO3JldHVybiBwZS50ZXN0KHQudHlwZSkmJnQuY2xpY2smJkEodCwiaW5wdXQiKSYmQWUodCwiY2xpY2siLENlKSwhMX0sdHJpZ2dlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzfHxlO3JldHVybiBwZS50ZXN0KHQudHlwZSkmJnQuY2xpY2smJkEodCwiaW5wdXQiKSYmQWUodCwiY2xpY2siKSwhMH0sX2RlZmF1bHQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7cmV0dXJuIHBlLnRlc3QodC50eXBlKSYmdC5jbGljayYmQSh0LCJpbnB1dCIpJiZZLmdldCh0LCJjbGljayIpfHxBKHQsImEiKX19LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUucmVzdWx0JiZlLm9yaWdpbmFsRXZlbnQmJihlLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9ZS5yZXN1bHQpfX19fSxTLnJlbW92ZUV2ZW50PWZ1bmN0aW9uKGUsdCxuKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXImJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pfSxTLkV2ZW50PWZ1bmN0aW9uKGUsdCl7aWYoISh0aGlzIGluc3RhbmNlb2YgUy5FdmVudCkpcmV0dXJuIG5ldyBTLkV2ZW50KGUsdCk7ZSYmZS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9ZSx0aGlzLnR5cGU9ZS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWUuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09ZS5kZWZhdWx0UHJldmVudGVkJiYhMT09PWUucmV0dXJuVmFsdWU/Q2U6RWUsdGhpcy50YXJnZXQ9ZS50YXJnZXQmJjM9PT1lLnRhcmdldC5ub2RlVHlwZT9lLnRhcmdldC5wYXJlbnROb2RlOmUudGFyZ2V0LHRoaXMuY3VycmVudFRhcmdldD1lLmN1cnJlbnRUYXJnZXQsdGhpcy5yZWxhdGVkVGFyZ2V0PWUucmVsYXRlZFRhcmdldCk6dGhpcy50eXBlPWUsdCYmUy5leHRlbmQodGhpcyx0KSx0aGlzLnRpbWVTdGFtcD1lJiZlLnRpbWVTdGFtcHx8RGF0ZS5ub3coKSx0aGlzW1MuZXhwYW5kb109ITB9LFMuRXZlbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpTLkV2ZW50LGlzRGVmYXVsdFByZXZlbnRlZDpFZSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpFZSxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpFZSxpc1NpbXVsYXRlZDohMSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1DZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1DZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9Q2UsZSYmIXRoaXMuaXNTaW11bGF0ZWQmJmUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LFMuZWFjaCh7YWx0S2V5OiEwLGJ1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxjaGFuZ2VkVG91Y2hlczohMCxjdHJsS2V5OiEwLGRldGFpbDohMCxldmVudFBoYXNlOiEwLG1ldGFLZXk6ITAscGFnZVg6ITAscGFnZVk6ITAsc2hpZnRLZXk6ITAsdmlldzohMCwiY2hhciI6ITAsY29kZTohMCxjaGFyQ29kZTohMCxrZXk6ITAsa2V5Q29kZTohMCxidXR0b246ITAsYnV0dG9uczohMCxjbGllbnRYOiEwLGNsaWVudFk6ITAsb2Zmc2V0WDohMCxvZmZzZXRZOiEwLHBvaW50ZXJJZDohMCxwb2ludGVyVHlwZTohMCxzY3JlZW5YOiEwLHNjcmVlblk6ITAsdGFyZ2V0VG91Y2hlczohMCx0b0VsZW1lbnQ6ITAsdG91Y2hlczohMCx3aGljaDpmdW5jdGlvbihlKXt2YXIgdD1lLmJ1dHRvbjtyZXR1cm4gbnVsbD09ZS53aGljaCYmYmUudGVzdChlLnR5cGUpP251bGwhPWUuY2hhckNvZGU/ZS5jaGFyQ29kZTplLmtleUNvZGU6IWUud2hpY2gmJnZvaWQgMCE9PXQmJndlLnRlc3QoZS50eXBlKT8xJnQ/MToyJnQ/Mzo0JnQ/MjowOmUud2hpY2h9fSxTLmV2ZW50LmFkZFByb3ApLFMuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oZSx0KXtTLmV2ZW50LnNwZWNpYWxbZV09e3NldHVwOmZ1bmN0aW9uKCl7cmV0dXJuIEFlKHRoaXMsZSxTZSksITF9LHRyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gQWUodGhpcyxlKSwhMH0sZGVsZWdhdGVUeXBlOnR9fSksUy5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0Iixwb2ludGVyZW50ZXI6InBvaW50ZXJvdmVyIixwb2ludGVybGVhdmU6InBvaW50ZXJvdXQifSxmdW5jdGlvbihlLGkpe1MuZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOmksYmluZFR5cGU6aSxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLnJlbGF0ZWRUYXJnZXQscj1lLmhhbmRsZU9iajtyZXR1cm4gbiYmKG49PT10aGlzfHxTLmNvbnRhaW5zKHRoaXMsbikpfHwoZS50eXBlPXIub3JpZ1R5cGUsdD1yLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT1pKSx0fX19KSxTLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIGtlKHRoaXMsZSx0LG4scil9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4ga2UodGhpcyxlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIHI9ZS5oYW5kbGVPYmosUyhlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2U/ci5vcmlnVHlwZSsiLiIrci5uYW1lc3BhY2U6ci5vcmlnVHlwZSxyLnNlbGVjdG9yLHIuaGFuZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGUpe2ZvcihpIGluIGUpdGhpcy5vZmYoaSx0LGVbaV0pO3JldHVybiB0aGlzfXJldHVybiExIT09dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHR8fChuPXQsdD12b2lkIDApLCExPT09biYmKG49RWUpLHRoaXMuZWFjaChmdW5jdGlvbigpe1MuZXZlbnQucmVtb3ZlKHRoaXMsZSxuLHQpfSl9fSk7dmFyIE5lPS88c2NyaXB0fDxzdHlsZXw8bGluay9pLERlPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGplPS9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZztmdW5jdGlvbiBxZShlLHQpe3JldHVybiBBKGUsInRhYmxlIikmJkEoMTEhPT10Lm5vZGVUeXBlP3Q6dC5maXJzdENoaWxkLCJ0ciIpJiZTKGUpLmNoaWxkcmVuKCJ0Ym9keSIpWzBdfHxlfWZ1bmN0aW9uIExlKGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKSsiLyIrZS50eXBlLGV9ZnVuY3Rpb24gSGUoZSl7cmV0dXJuInRydWUvIj09PShlLnR5cGV8fCIiKS5zbGljZSgwLDUpP2UudHlwZT1lLnR5cGUuc2xpY2UoNSk6ZS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxlfWZ1bmN0aW9uIE9lKGUsdCl7dmFyIG4scixpLG8sYSxzO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihZLmhhc0RhdGEoZSkmJihzPVkuZ2V0KGUpLmV2ZW50cykpZm9yKGkgaW4gWS5yZW1vdmUodCwiaGFuZGxlIGV2ZW50cyIpLHMpZm9yKG49MCxyPXNbaV0ubGVuZ3RoO248cjtuKyspUy5ldmVudC5hZGQodCxpLHNbaV1bbl0pO1EuaGFzRGF0YShlKSYmKG89US5hY2Nlc3MoZSksYT1TLmV4dGVuZCh7fSxvKSxRLnNldCh0LGEpKX19ZnVuY3Rpb24gUGUobixyLGksbyl7cj1nKHIpO3ZhciBlLHQsYSxzLHUsbCxjPTAsZj1uLmxlbmd0aCxwPWYtMSxkPXJbMF0saD1tKGQpO2lmKGh8fDE8ZiYmInN0cmluZyI9PXR5cGVvZiBkJiYheS5jaGVja0Nsb25lJiZEZS50ZXN0KGQpKXJldHVybiBuLmVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9bi5lcShlKTtoJiYoclswXT1kLmNhbGwodGhpcyxlLHQuaHRtbCgpKSksUGUodCxyLGksbyl9KTtpZihmJiYodD0oZT14ZShyLG5bMF0ub3duZXJEb2N1bWVudCwhMSxuLG8pKS5maXJzdENoaWxkLDE9PT1lLmNoaWxkTm9kZXMubGVuZ3RoJiYoZT10KSx0fHxvKSl7Zm9yKHM9KGE9Uy5tYXAodmUoZSwic2NyaXB0IiksTGUpKS5sZW5ndGg7YzxmO2MrKyl1PWUsYyE9PXAmJih1PVMuY2xvbmUodSwhMCwhMCkscyYmUy5tZXJnZShhLHZlKHUsInNjcmlwdCIpKSksaS5jYWxsKG5bY10sdSxjKTtpZihzKWZvcihsPWFbYS5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCxTLm1hcChhLEhlKSxjPTA7YzxzO2MrKyl1PWFbY10saGUudGVzdCh1LnR5cGV8fCIiKSYmIVkuYWNjZXNzKHUsImdsb2JhbEV2YWwiKSYmUy5jb250YWlucyhsLHUpJiYodS5zcmMmJiJtb2R1bGUiIT09KHUudHlwZXx8IiIpLnRvTG93ZXJDYXNlKCk/Uy5fZXZhbFVybCYmIXUubm9Nb2R1bGUmJlMuX2V2YWxVcmwodS5zcmMse25vbmNlOnUubm9uY2V8fHUuZ2V0QXR0cmlidXRlKCJub25jZSIpfSxsKTpiKHUudGV4dENvbnRlbnQucmVwbGFjZShqZSwiIiksdSxsKSl9cmV0dXJuIG59ZnVuY3Rpb24gUmUoZSx0LG4pe2Zvcih2YXIgcixpPXQ/Uy5maWx0ZXIodCxlKTplLG89MDtudWxsIT0ocj1pW29dKTtvKyspbnx8MSE9PXIubm9kZVR5cGV8fFMuY2xlYW5EYXRhKHZlKHIpKSxyLnBhcmVudE5vZGUmJihuJiZpZShyKSYmeWUodmUociwic2NyaXB0IikpLHIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKSk7cmV0dXJuIGV9Uy5leHRlbmQoe2h0bWxQcmVmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGNsb25lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjPWUuY2xvbmVOb2RlKCEwKSxmPWllKGUpO2lmKCEoeS5ub0Nsb25lQ2hlY2tlZHx8MSE9PWUubm9kZVR5cGUmJjExIT09ZS5ub2RlVHlwZXx8Uy5pc1hNTERvYyhlKSkpZm9yKGE9dmUoYykscj0wLGk9KG89dmUoZSkpLmxlbmd0aDtyPGk7cisrKXM9b1tyXSx1PWFbcl0sdm9pZCAwLCJpbnB1dCI9PT0obD11Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpJiZwZS50ZXN0KHMudHlwZSk/dS5jaGVja2VkPXMuY2hlY2tlZDoiaW5wdXQiIT09bCYmInRleHRhcmVhIiE9PWx8fCh1LmRlZmF1bHRWYWx1ZT1zLmRlZmF1bHRWYWx1ZSk7aWYodClpZihuKWZvcihvPW98fHZlKGUpLGE9YXx8dmUoYykscj0wLGk9by5sZW5ndGg7cjxpO3IrKylPZShvW3JdLGFbcl0pO2Vsc2UgT2UoZSxjKTtyZXR1cm4gMDwoYT12ZShjLCJzY3JpcHQiKSkubGVuZ3RoJiZ5ZShhLCFmJiZ2ZShlLCJzY3JpcHQiKSksY30sY2xlYW5EYXRhOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHIsaT1TLmV2ZW50LnNwZWNpYWwsbz0wO3ZvaWQgMCE9PShuPWVbb10pO28rKylpZihWKG4pKXtpZih0PW5bWS5leHBhbmRvXSl7aWYodC5ldmVudHMpZm9yKHIgaW4gdC5ldmVudHMpaVtyXT9TLmV2ZW50LnJlbW92ZShuLHIpOlMucmVtb3ZlRXZlbnQobixyLHQuaGFuZGxlKTtuW1kuZXhwYW5kb109dm9pZCAwfW5bUS5leHBhbmRvXSYmKG5bUS5leHBhbmRvXT12b2lkIDApfX19KSxTLmZuLmV4dGVuZCh7ZGV0YWNoOmZ1bmN0aW9uKGUpe3JldHVybiBSZSh0aGlzLGUsITApfSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIFJlKHRoaXMsZSl9LHRleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuICQodGhpcyxmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT9TLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmVhY2goZnVuY3Rpb24oKXsxIT09dGhpcy5ub2RlVHlwZSYmMTEhPT10aGlzLm5vZGVUeXBlJiY5IT09dGhpcy5ub2RlVHlwZXx8KHRoaXMudGV4dENvbnRlbnQ9ZSl9KX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gUGUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fHFlKHRoaXMsZSkuYXBwZW5kQ2hpbGQoZSl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiBQZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9cWUodGhpcyxlKTt0Lmluc2VydEJlZm9yZShlLHQuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiBQZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiBQZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKX0pfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PTA7bnVsbCE9KGU9dGhpc1t0XSk7dCsrKTE9PT1lLm5vZGVUeXBlJiYoUy5jbGVhbkRhdGEodmUoZSwhMSkpLGUudGV4dENvbnRlbnQ9IiIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGwhPWUmJmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBTLmNsb25lKHRoaXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiAkKHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1swXXx8e30sbj0wLHI9dGhpcy5sZW5ndGg7aWYodm9pZCAwPT09ZSYmMT09PXQubm9kZVR5cGUpcmV0dXJuIHQuaW5uZXJIVE1MO2lmKCJzdHJpbmciPT10eXBlb2YgZSYmIU5lLnRlc3QoZSkmJiFnZVsoZGUuZXhlYyhlKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2U9Uy5odG1sUHJlZmlsdGVyKGUpO3RyeXtmb3IoO248cjtuKyspMT09PSh0PXRoaXNbbl18fHt9KS5ub2RlVHlwZSYmKFMuY2xlYW5EYXRhKHZlKHQsITEpKSx0LmlubmVySFRNTD1lKTt0PTB9Y2F0Y2goZSl7fX10JiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIG49W107cmV0dXJuIFBlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtTLmluQXJyYXkodGhpcyxuKTwwJiYoUy5jbGVhbkRhdGEodmUodGhpcykpLHQmJnQucmVwbGFjZUNoaWxkKGUsdGhpcykpfSxuKX19KSxTLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihlLGEpe1MuZm5bZV09ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49W10scj1TKGUpLGk9ci5sZW5ndGgtMSxvPTA7bzw9aTtvKyspdD1vPT09aT90aGlzOnRoaXMuY2xvbmUoITApLFMocltvXSlbYV0odCksdS5hcHBseShuLHQuZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhuKX19KTt2YXIgTWU9bmV3IFJlZ0V4cCgiXigiK2VlKyIpKD8hcHgpW2EteiVdKyQiLCJpIiksSWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O3JldHVybiB0JiZ0Lm9wZW5lcnx8KHQ9QyksdC5nZXRDb21wdXRlZFN0eWxlKGUpfSxXZT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXt9O2ZvcihpIGluIHQpb1tpXT1lLnN0eWxlW2ldLGUuc3R5bGVbaV09dFtpXTtmb3IoaSBpbiByPW4uY2FsbChlKSx0KWUuc3R5bGVbaV09b1tpXTtyZXR1cm4gcn0sRmU9bmV3IFJlZ0V4cChuZS5qb2luKCJ8IiksImkiKTtmdW5jdGlvbiBCZShlLHQsbil7dmFyIHIsaSxvLGEscz1lLnN0eWxlO3JldHVybihuPW58fEllKGUpKSYmKCIiIT09KGE9bi5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxuW3RdKXx8aWUoZSl8fChhPVMuc3R5bGUoZSx0KSksIXkucGl4ZWxCb3hTdHlsZXMoKSYmTWUudGVzdChhKSYmRmUudGVzdCh0KSYmKHI9cy53aWR0aCxpPXMubWluV2lkdGgsbz1zLm1heFdpZHRoLHMubWluV2lkdGg9cy5tYXhXaWR0aD1zLndpZHRoPWEsYT1uLndpZHRoLHMud2lkdGg9cixzLm1pbldpZHRoPWkscy5tYXhXaWR0aD1vKSksdm9pZCAwIT09YT9hKyIiOmF9ZnVuY3Rpb24gJGUoZSx0KXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7aWYoIWUoKSlyZXR1cm4odGhpcy5nZXQ9dCkuYXBwbHkodGhpcyxhcmd1bWVudHMpO2RlbGV0ZSB0aGlzLmdldH19fSFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtpZihsKXt1LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDttYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjAiLGwuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO21hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7d2lkdGg6NjAlO3RvcDoxJSIscmUuYXBwZW5kQ2hpbGQodSkuYXBwZW5kQ2hpbGQobCk7dmFyIGU9Qy5nZXRDb21wdXRlZFN0eWxlKGwpO249IjElIiE9PWUudG9wLHM9MTI9PT10KGUubWFyZ2luTGVmdCksbC5zdHlsZS5yaWdodD0iNjAlIixvPTM2PT09dChlLnJpZ2h0KSxyPTM2PT09dChlLndpZHRoKSxsLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaT0xMj09PXQobC5vZmZzZXRXaWR0aC8zKSxyZS5yZW1vdmVDaGlsZCh1KSxsPW51bGx9fWZ1bmN0aW9uIHQoZSl7cmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChlKSl9dmFyIG4scixpLG8sYSxzLHU9RS5jcmVhdGVFbGVtZW50KCJkaXYiKSxsPUUuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5zdHlsZSYmKGwuc3R5bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94IixsLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIseS5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PWwuc3R5bGUuYmFja2dyb3VuZENsaXAsUy5leHRlbmQoeSx7Ym94U2l6aW5nUmVsaWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLHJ9LHBpeGVsQm94U3R5bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSxvfSxwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSxufSxyZWxpYWJsZU1hcmdpbkxlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLHN9LHNjcm9sbGJveFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLGl9LHJlbGlhYmxlVHJEaW1lbnNpb25zOmZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI7cmV0dXJuIG51bGw9PWEmJihlPUUuY3JlYXRlRWxlbWVudCgidGFibGUiKSx0PUUuY3JlYXRlRWxlbWVudCgidHIiKSxuPUUuY3JlYXRlRWxlbWVudCgiZGl2IiksZS5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4Iix0LnN0eWxlLmhlaWdodD0iMXB4IixuLnN0eWxlLmhlaWdodD0iOXB4IixyZS5hcHBlbmRDaGlsZChlKS5hcHBlbmRDaGlsZCh0KS5hcHBlbmRDaGlsZChuKSxyPUMuZ2V0Q29tcHV0ZWRTdHlsZSh0KSxhPTM8cGFyc2VJbnQoci5oZWlnaHQpLHJlLnJlbW92ZUNoaWxkKGUpKSxhfX0pKX0oKTt2YXIgX2U9WyJXZWJraXQiLCJNb3oiLCJtcyJdLHplPUUuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsVWU9e307ZnVuY3Rpb24gWGUoZSl7dmFyIHQ9Uy5jc3NQcm9wc1tlXXx8VWVbZV07cmV0dXJuIHR8fChlIGluIHplP2U6VWVbZV09ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSksbj1fZS5sZW5ndGg7d2hpbGUobi0tKWlmKChlPV9lW25dK3QpaW4gemUpcmV0dXJuIGV9KGUpfHxlKX12YXIgVmU9L14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLEdlPS9eLS0vLFllPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSxRZT17bGV0dGVyU3BhY2luZzoiMCIsZm9udFdlaWdodDoiNDAwIn07ZnVuY3Rpb24gSmUoZSx0LG4pe3ZhciByPXRlLmV4ZWModCk7cmV0dXJuIHI/TWF0aC5tYXgoMCxyWzJdLShufHwwKSkrKHJbM118fCJweCIpOnR9ZnVuY3Rpb24gS2UoZSx0LG4scixpLG8pe3ZhciBhPSJ3aWR0aCI9PT10PzE6MCxzPTAsdT0wO2lmKG49PT0ocj8iYm9yZGVyIjoiY29udGVudCIpKXJldHVybiAwO2Zvcig7YTw0O2ErPTIpIm1hcmdpbiI9PT1uJiYodSs9Uy5jc3MoZSxuK25lW2FdLCEwLGkpKSxyPygiY29udGVudCI9PT1uJiYodS09Uy5jc3MoZSwicGFkZGluZyIrbmVbYV0sITAsaSkpLCJtYXJnaW4iIT09biYmKHUtPVMuY3NzKGUsImJvcmRlciIrbmVbYV0rIldpZHRoIiwhMCxpKSkpOih1Kz1TLmNzcyhlLCJwYWRkaW5nIituZVthXSwhMCxpKSwicGFkZGluZyIhPT1uP3UrPVMuY3NzKGUsImJvcmRlciIrbmVbYV0rIldpZHRoIiwhMCxpKTpzKz1TLmNzcyhlLCJib3JkZXIiK25lW2FdKyJXaWR0aCIsITAsaSkpO3JldHVybiFyJiYwPD1vJiYodSs9TWF0aC5tYXgoMCxNYXRoLmNlaWwoZVsib2Zmc2V0Iit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKV0tby11LXMtLjUpKXx8MCksdX1mdW5jdGlvbiBaZShlLHQsbil7dmFyIHI9SWUoZSksaT0oIXkuYm94U2l6aW5nUmVsaWFibGUoKXx8bikmJiJib3JkZXItYm94Ij09PVMuY3NzKGUsImJveFNpemluZyIsITEsciksbz1pLGE9QmUoZSx0LHIpLHM9Im9mZnNldCIrdFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSk7aWYoTWUudGVzdChhKSl7aWYoIW4pcmV0dXJuIGE7YT0iYXV0byJ9cmV0dXJuKCF5LmJveFNpemluZ1JlbGlhYmxlKCkmJml8fCF5LnJlbGlhYmxlVHJEaW1lbnNpb25zKCkmJkEoZSwidHIiKXx8ImF1dG8iPT09YXx8IXBhcnNlRmxvYXQoYSkmJiJpbmxpbmUiPT09Uy5jc3MoZSwiZGlzcGxheSIsITEscikpJiZlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiYoaT0iYm9yZGVyLWJveCI9PT1TLmNzcyhlLCJib3hTaXppbmciLCExLHIpLChvPXMgaW4gZSkmJihhPWVbc10pKSwoYT1wYXJzZUZsb2F0KGEpfHwwKStLZShlLHQsbnx8KGk/ImJvcmRlciI6ImNvbnRlbnQiKSxvLHIsYSkrInB4In1mdW5jdGlvbiBldChlLHQsbixyLGkpe3JldHVybiBuZXcgZXQucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX1TLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPUJlKGUsIm9wYWNpdHkiKTtyZXR1cm4iIj09PW4/IjEiOm59fX19LGNzc051bWJlcjp7YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsY29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGdyaWRBcmVhOiEwLGdyaWRDb2x1bW46ITAsZ3JpZENvbHVtbkVuZDohMCxncmlkQ29sdW1uU3RhcnQ6ITAsZ3JpZFJvdzohMCxncmlkUm93RW5kOiEwLGdyaWRSb3dTdGFydDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOnt9LHN0eWxlOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKGUmJjMhPT1lLm5vZGVUeXBlJiY4IT09ZS5ub2RlVHlwZSYmZS5zdHlsZSl7dmFyIGksbyxhLHM9WCh0KSx1PUdlLnRlc3QodCksbD1lLnN0eWxlO2lmKHV8fCh0PVhlKHMpKSxhPVMuY3NzSG9va3NbdF18fFMuY3NzSG9va3Nbc10sdm9pZCAwPT09bilyZXR1cm4gYSYmImdldCJpbiBhJiZ2b2lkIDAhPT0oaT1hLmdldChlLCExLHIpKT9pOmxbdF07InN0cmluZyI9PT0obz10eXBlb2YgbikmJihpPXRlLmV4ZWMobikpJiZpWzFdJiYobj1zZShlLHQsaSksbz0ibnVtYmVyIiksbnVsbCE9biYmbj09biYmKCJudW1iZXIiIT09b3x8dXx8KG4rPWkmJmlbM118fChTLmNzc051bWJlcltzXT8iIjoicHgiKSkseS5jbGVhckNsb25lU3R5bGV8fCIiIT09bnx8MCE9PXQuaW5kZXhPZigiYmFja2dyb3VuZCIpfHwobFt0XT0iaW5oZXJpdCIpLGEmJiJzZXQiaW4gYSYmdm9pZCAwPT09KG49YS5zZXQoZSxuLHIpKXx8KHU/bC5zZXRQcm9wZXJ0eSh0LG4pOmxbdF09bikpfX0sY3NzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzPVgodCk7cmV0dXJuIEdlLnRlc3QodCl8fCh0PVhlKHMpKSwoYT1TLmNzc0hvb2tzW3RdfHxTLmNzc0hvb2tzW3NdKSYmImdldCJpbiBhJiYoaT1hLmdldChlLCEwLG4pKSx2b2lkIDA9PT1pJiYoaT1CZShlLHQscikpLCJub3JtYWwiPT09aSYmdCBpbiBRZSYmKGk9UWVbdF0pLCIiPT09bnx8bj8obz1wYXJzZUZsb2F0KGkpLCEwPT09bnx8aXNGaW5pdGUobyk/b3x8MDppKTppfX0pLFMuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oZSx1KXtTLmNzc0hvb2tzW3VdPXtnZXQ6ZnVuY3Rpb24oZSx0LG4pe2lmKHQpcmV0dXJuIVZlLnRlc3QoUy5jc3MoZSwiZGlzcGxheSIpKXx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCYmZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD9aZShlLHUsbik6V2UoZSxZZSxmdW5jdGlvbigpe3JldHVybiBaZShlLHUsbil9KX0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPUllKGUpLG89IXkuc2Nyb2xsYm94U2l6ZSgpJiYiYWJzb2x1dGUiPT09aS5wb3NpdGlvbixhPShvfHxuKSYmImJvcmRlci1ib3giPT09Uy5jc3MoZSwiYm94U2l6aW5nIiwhMSxpKSxzPW4/S2UoZSx1LG4sYSxpKTowO3JldHVybiBhJiZvJiYocy09TWF0aC5jZWlsKGVbIm9mZnNldCIrdVswXS50b1VwcGVyQ2FzZSgpK3Uuc2xpY2UoMSldLXBhcnNlRmxvYXQoaVt1XSktS2UoZSx1LCJib3JkZXIiLCExLGkpLS41KSkscyYmKHI9dGUuZXhlYyh0KSkmJiJweCIhPT0oclszXXx8InB4IikmJihlLnN0eWxlW3VdPXQsdD1TLmNzcyhlLHUpKSxKZSgwLHQscyl9fX0pLFMuY3NzSG9va3MubWFyZ2luTGVmdD0kZSh5LnJlbGlhYmxlTWFyZ2luTGVmdCxmdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuKHBhcnNlRmxvYXQoQmUoZSwibWFyZ2luTGVmdCIpKXx8ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LVdlKGUse21hcmdpbkxlZnQ6MH0sZnVuY3Rpb24oKXtyZXR1cm4gZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSkpKyJweCJ9KSxTLmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihpLG8pe1MuY3NzSG9va3NbaStvXT17ZXhwYW5kOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49e30scj0ic3RyaW5nIj09dHlwZW9mIGU/ZS5zcGxpdCgiICIpOltlXTt0PDQ7dCsrKW5baStuZVt0XStvXT1yW3RdfHxyW3QtMl18fHJbMF07cmV0dXJuIG59fSwibWFyZ2luIiE9PWkmJihTLmNzc0hvb2tzW2krb10uc2V0PUplKX0pLFMuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJCh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e30sYT0wO2lmKEFycmF5LmlzQXJyYXkodCkpe2ZvcihyPUllKGUpLGk9dC5sZW5ndGg7YTxpO2ErKylvW3RbYV1dPVMuY3NzKGUsdFthXSwhMSxyKTtyZXR1cm4gb31yZXR1cm4gdm9pZCAwIT09bj9TLnN0eWxlKGUsdCxuKTpTLmNzcyhlLHQpfSxlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX19KSwoKFMuVHdlZW49ZXQpLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZXQsaW5pdDpmdW5jdGlvbihlLHQsbixyLGksbyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8Uy5lYXNpbmcuX2RlZmF1bHQsdGhpcy5vcHRpb25zPXQsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhpcy51bml0PW98fChTLmNzc051bWJlcltuXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGU9ZXQucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGUmJmUuZ2V0P2UuZ2V0KHRoaXMpOmV0LnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihlKXt2YXIgdCxuPWV0LnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9dD1TLmVhc2luZ1t0aGlzLmVhc2luZ10oZSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qZSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp0aGlzLnBvcz10PWUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6ZXQucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0pLmluaXQucHJvdG90eXBlPWV0LnByb3RvdHlwZSwoZXQucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiAxIT09ZS5lbGVtLm5vZGVUeXBlfHxudWxsIT1lLmVsZW1bZS5wcm9wXSYmbnVsbD09ZS5lbGVtLnN0eWxlW2UucHJvcF0/ZS5lbGVtW2UucHJvcF06KHQ9Uy5jc3MoZS5lbGVtLGUucHJvcCwiIikpJiYiYXV0byIhPT10P3Q6MH0sc2V0OmZ1bmN0aW9uKGUpe1MuZnguc3RlcFtlLnByb3BdP1MuZnguc3RlcFtlLnByb3BdKGUpOjEhPT1lLmVsZW0ubm9kZVR5cGV8fCFTLmNzc0hvb2tzW2UucHJvcF0mJm51bGw9PWUuZWxlbS5zdHlsZVtYZShlLnByb3ApXT9lLmVsZW1bZS5wcm9wXT1lLm5vdzpTLnN0eWxlKGUuZWxlbSxlLnByb3AsZS5ub3crZS51bml0KX19fSkuc2Nyb2xsVG9wPWV0LnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oZSl7ZS5lbGVtLm5vZGVUeXBlJiZlLmVsZW0ucGFyZW50Tm9kZSYmKGUuZWxlbVtlLnByb3BdPWUubm93KX19LFMuZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5QSSkvMn0sX2RlZmF1bHQ6InN3aW5nIn0sUy5meD1ldC5wcm90b3R5cGUuaW5pdCxTLmZ4LnN0ZXA9e307dmFyIHR0LG50LHJ0LGl0LG90PS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxhdD0vcXVldWVIb29rcyQvO2Z1bmN0aW9uIHN0KCl7bnQmJighMT09PUUuaGlkZGVuJiZDLnJlcXVlc3RBbmltYXRpb25GcmFtZT9DLnJlcXVlc3RBbmltYXRpb25GcmFtZShzdCk6Qy5zZXRUaW1lb3V0KHN0LFMuZnguaW50ZXJ2YWwpLFMuZngudGljaygpKX1mdW5jdGlvbiB1dCgpe3JldHVybiBDLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0dD12b2lkIDB9KSx0dD1EYXRlLm5vdygpfWZ1bmN0aW9uIGx0KGUsdCl7dmFyIG4scj0wLGk9e2hlaWdodDplfTtmb3IodD10PzE6MDtyPDQ7cis9Mi10KWlbIm1hcmdpbiIrKG49bmVbcl0pXT1pWyJwYWRkaW5nIituXT1lO3JldHVybiB0JiYoaS5vcGFjaXR5PWkud2lkdGg9ZSksaX1mdW5jdGlvbiBjdChlLHQsbil7Zm9yKHZhciByLGk9KGZ0LnR3ZWVuZXJzW3RdfHxbXSkuY29uY2F0KGZ0LnR3ZWVuZXJzWyIqIl0pLG89MCxhPWkubGVuZ3RoO288YTtvKyspaWYocj1pW29dLmNhbGwobix0LGUpKXJldHVybiByfWZ1bmN0aW9uIGZ0KG8sZSx0KXt2YXIgbixhLHI9MCxpPWZ0LnByZWZpbHRlcnMubGVuZ3RoLHM9Uy5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSB1LmVsZW19KSx1PWZ1bmN0aW9uKCl7aWYoYSlyZXR1cm4hMTtmb3IodmFyIGU9dHR8fHV0KCksdD1NYXRoLm1heCgwLGwuc3RhcnRUaW1lK2wuZHVyYXRpb24tZSksbj0xLSh0L2wuZHVyYXRpb258fDApLHI9MCxpPWwudHdlZW5zLmxlbmd0aDtyPGk7cisrKWwudHdlZW5zW3JdLnJ1bihuKTtyZXR1cm4gcy5ub3RpZnlXaXRoKG8sW2wsbix0XSksbjwxJiZpP3Q6KGl8fHMubm90aWZ5V2l0aChvLFtsLDEsMF0pLHMucmVzb2x2ZVdpdGgobyxbbF0pLCExKX0sbD1zLnByb21pc2Uoe2VsZW06byxwcm9wczpTLmV4dGVuZCh7fSxlKSxvcHRzOlMuZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9LGVhc2luZzpTLmVhc2luZy5fZGVmYXVsdH0sdCksb3JpZ2luYWxQcm9wZXJ0aWVzOmUsb3JpZ2luYWxPcHRpb25zOnQsc3RhcnRUaW1lOnR0fHx1dCgpLGR1cmF0aW9uOnQuZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKGUsdCl7dmFyIG49Uy5Ud2VlbihvLGwub3B0cyxlLHQsbC5vcHRzLnNwZWNpYWxFYXNpbmdbZV18fGwub3B0cy5lYXNpbmcpO3JldHVybiBsLnR3ZWVucy5wdXNoKG4pLG59LHN0b3A6ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPWU/bC50d2VlbnMubGVuZ3RoOjA7aWYoYSlyZXR1cm4gdGhpcztmb3IoYT0hMDt0PG47dCsrKWwudHdlZW5zW3RdLnJ1bigxKTtyZXR1cm4gZT8ocy5ub3RpZnlXaXRoKG8sW2wsMSwwXSkscy5yZXNvbHZlV2l0aChvLFtsLGVdKSk6cy5yZWplY3RXaXRoKG8sW2wsZV0pLHRoaXN9fSksYz1sLnByb3BzO2ZvcighZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhO2ZvcihuIGluIGUpaWYoaT10W3I9WChuKV0sbz1lW25dLEFycmF5LmlzQXJyYXkobykmJihpPW9bMV0sbz1lW25dPW9bMF0pLG4hPT1yJiYoZVtyXT1vLGRlbGV0ZSBlW25dKSwoYT1TLmNzc0hvb2tzW3JdKSYmImV4cGFuZCJpbiBhKWZvcihuIGluIG89YS5leHBhbmQobyksZGVsZXRlIGVbcl0sbyluIGluIGV8fChlW25dPW9bbl0sdFtuXT1pKTtlbHNlIHRbcl09aX0oYyxsLm9wdHMuc3BlY2lhbEVhc2luZyk7cjxpO3IrKylpZihuPWZ0LnByZWZpbHRlcnNbcl0uY2FsbChsLG8sYyxsLm9wdHMpKXJldHVybiBtKG4uc3RvcCkmJihTLl9xdWV1ZUhvb2tzKGwuZWxlbSxsLm9wdHMucXVldWUpLnN0b3A9bi5zdG9wLmJpbmQobikpLG47cmV0dXJuIFMubWFwKGMsY3QsbCksbShsLm9wdHMuc3RhcnQpJiZsLm9wdHMuc3RhcnQuY2FsbChvLGwpLGwucHJvZ3Jlc3MobC5vcHRzLnByb2dyZXNzKS5kb25lKGwub3B0cy5kb25lLGwub3B0cy5jb21wbGV0ZSkuZmFpbChsLm9wdHMuZmFpbCkuYWx3YXlzKGwub3B0cy5hbHdheXMpLFMuZngudGltZXIoUy5leHRlbmQodSx7ZWxlbTpvLGFuaW06bCxxdWV1ZTpsLm9wdHMucXVldWV9KSksbH1TLkFuaW1hdGlvbj1TLmV4dGVuZChmdCx7dHdlZW5lcnM6eyIqIjpbZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZVR3ZWVuKGUsdCk7cmV0dXJuIHNlKG4uZWxlbSxlLHRlLmV4ZWModCksbiksbn1dfSx0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7bShlKT8odD1lLGU9WyIqIl0pOmU9ZS5tYXRjaChQKTtmb3IodmFyIG4scj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyluPWVbcl0sZnQudHdlZW5lcnNbbl09ZnQudHdlZW5lcnNbbl18fFtdLGZ0LnR3ZWVuZXJzW25dLnVuc2hpZnQodCl9LHByZWZpbHRlcnM6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjLGY9IndpZHRoImluIHR8fCJoZWlnaHQiaW4gdCxwPXRoaXMsZD17fSxoPWUuc3R5bGUsZz1lLm5vZGVUeXBlJiZhZShlKSx2PVkuZ2V0KGUsImZ4c2hvdyIpO2ZvcihyIGluIG4ucXVldWV8fChudWxsPT0oYT1TLl9xdWV1ZUhvb2tzKGUsImZ4IikpLnVucXVldWVkJiYoYS51bnF1ZXVlZD0wLHM9YS5lbXB0eS5maXJlLGEuZW1wdHkuZmlyZT1mdW5jdGlvbigpe2EudW5xdWV1ZWR8fHMoKX0pLGEudW5xdWV1ZWQrKyxwLmFsd2F5cyhmdW5jdGlvbigpe3AuYWx3YXlzKGZ1bmN0aW9uKCl7YS51bnF1ZXVlZC0tLFMucXVldWUoZSwiZngiKS5sZW5ndGh8fGEuZW1wdHkuZmlyZSgpfSl9KSksdClpZihpPXRbcl0sb3QudGVzdChpKSl7aWYoZGVsZXRlIHRbcl0sbz1vfHwidG9nZ2xlIj09PWksaT09PShnPyJoaWRlIjoic2hvdyIpKXtpZigic2hvdyIhPT1pfHwhdnx8dm9pZCAwPT09dltyXSljb250aW51ZTtnPSEwfWRbcl09diYmdltyXXx8Uy5zdHlsZShlLHIpfWlmKCh1PSFTLmlzRW1wdHlPYmplY3QodCkpfHwhUy5pc0VtcHR5T2JqZWN0KGQpKWZvcihyIGluIGYmJjE9PT1lLm5vZGVUeXBlJiYobi5vdmVyZmxvdz1baC5vdmVyZmxvdyxoLm92ZXJmbG93WCxoLm92ZXJmbG93WV0sbnVsbD09KGw9diYmdi5kaXNwbGF5KSYmKGw9WS5nZXQoZSwiZGlzcGxheSIpKSwibm9uZSI9PT0oYz1TLmNzcyhlLCJkaXNwbGF5IikpJiYobD9jPWw6KGxlKFtlXSwhMCksbD1lLnN0eWxlLmRpc3BsYXl8fGwsYz1TLmNzcyhlLCJkaXNwbGF5IiksbGUoW2VdKSkpLCgiaW5saW5lIj09PWN8fCJpbmxpbmUtYmxvY2siPT09YyYmbnVsbCE9bCkmJiJub25lIj09PVMuY3NzKGUsImZsb2F0IikmJih1fHwocC5kb25lKGZ1bmN0aW9uKCl7aC5kaXNwbGF5PWx9KSxudWxsPT1sJiYoYz1oLmRpc3BsYXksbD0ibm9uZSI9PT1jPyIiOmMpKSxoLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxuLm92ZXJmbG93JiYoaC5vdmVyZmxvdz0iaGlkZGVuIixwLmFsd2F5cyhmdW5jdGlvbigpe2gub3ZlcmZsb3c9bi5vdmVyZmxvd1swXSxoLm92ZXJmbG93WD1uLm92ZXJmbG93WzFdLGgub3ZlcmZsb3dZPW4ub3ZlcmZsb3dbMl19KSksdT0hMSxkKXV8fCh2PyJoaWRkZW4iaW4gdiYmKGc9di5oaWRkZW4pOnY9WS5hY2Nlc3MoZSwiZnhzaG93Iix7ZGlzcGxheTpsfSksbyYmKHYuaGlkZGVuPSFnKSxnJiZsZShbZV0sITApLHAuZG9uZShmdW5jdGlvbigpe2ZvcihyIGluIGd8fGxlKFtlXSksWS5yZW1vdmUoZSwiZnhzaG93IiksZClTLnN0eWxlKGUscixkW3JdKX0pKSx1PWN0KGc/dltyXTowLHIscCksciBpbiB2fHwodltyXT11LnN0YXJ0LGcmJih1LmVuZD11LnN0YXJ0LHUuc3RhcnQ9MCkpfV0scHJlZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dD9mdC5wcmVmaWx0ZXJzLnVuc2hpZnQoZSk6ZnQucHJlZmlsdGVycy5wdXNoKGUpfX0pLFMuc3BlZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUmJiJvYmplY3QiPT10eXBlb2YgZT9TLmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fG0oZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIW0odCkmJnR9O3JldHVybiBTLmZ4Lm9mZj9yLmR1cmF0aW9uPTA6Im51bWJlciIhPXR5cGVvZiByLmR1cmF0aW9uJiYoci5kdXJhdGlvbiBpbiBTLmZ4LnNwZWVkcz9yLmR1cmF0aW9uPVMuZnguc3BlZWRzW3IuZHVyYXRpb25dOnIuZHVyYXRpb249Uy5meC5zcGVlZHMuX2RlZmF1bHQpLG51bGwhPXIucXVldWUmJiEwIT09ci5xdWV1ZXx8KHIucXVldWU9ImZ4Iiksci5vbGQ9ci5jb21wbGV0ZSxyLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bShyLm9sZCkmJnIub2xkLmNhbGwodGhpcyksci5xdWV1ZSYmUy5kZXF1ZXVlKHRoaXMsci5xdWV1ZSl9LHJ9LFMuZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuZmlsdGVyKGFlKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0ZTpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1TLmlzRW1wdHlPYmplY3QodCksbz1TLnNwZWVkKGUsbixyKSxhPWZ1bmN0aW9uKCl7dmFyIGU9ZnQodGhpcyxTLmV4dGVuZCh7fSx0KSxvKTsoaXx8WS5nZXQodGhpcywiZmluaXNoIikpJiZlLnN0b3AoITApfTtyZXR1cm4gYS5maW5pc2g9YSxpfHwhMT09PW8ucXVldWU/dGhpcy5lYWNoKGEpOnRoaXMucXVldWUoby5xdWV1ZSxhKX0sc3RvcDpmdW5jdGlvbihpLGUsbyl7dmFyIGE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChvKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBpJiYobz1lLGU9aSxpPXZvaWQgMCksZSYmdGhpcy5xdWV1ZShpfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT0hMCx0PW51bGwhPWkmJmkrInF1ZXVlSG9va3MiLG49Uy50aW1lcnMscj1ZLmdldCh0aGlzKTtpZih0KXJbdF0mJnJbdF0uc3RvcCYmYShyW3RdKTtlbHNlIGZvcih0IGluIHIpclt0XSYmclt0XS5zdG9wJiZhdC50ZXN0KHQpJiZhKHJbdF0pO2Zvcih0PW4ubGVuZ3RoO3QtLTspblt0XS5lbGVtIT09dGhpc3x8bnVsbCE9aSYmblt0XS5xdWV1ZSE9PWl8fChuW3RdLmFuaW0uc3RvcChvKSxlPSExLG4uc3BsaWNlKHQsMSkpOyFlJiZvfHxTLmRlcXVldWUodGhpcyxpKX0pfSxmaW5pc2g6ZnVuY3Rpb24oYSl7cmV0dXJuITEhPT1hJiYoYT1hfHwiZngiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZSx0PVkuZ2V0KHRoaXMpLG49dFthKyJxdWV1ZSJdLHI9dFthKyJxdWV1ZUhvb2tzIl0saT1TLnRpbWVycyxvPW4/bi5sZW5ndGg6MDtmb3IodC5maW5pc2g9ITAsUy5xdWV1ZSh0aGlzLGEsW10pLHImJnIuc3RvcCYmci5zdG9wLmNhbGwodGhpcywhMCksZT1pLmxlbmd0aDtlLS07KWlbZV0uZWxlbT09PXRoaXMmJmlbZV0ucXVldWU9PT1hJiYoaVtlXS5hbmltLnN0b3AoITApLGkuc3BsaWNlKGUsMSkpO2ZvcihlPTA7ZTxvO2UrKyluW2VdJiZuW2VdLmZpbmlzaCYmbltlXS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgdC5maW5pc2h9KX19KSxTLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGUscil7dmFyIGk9Uy5mbltyXTtTLmZuW3JdPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT10eXBlb2YgZT9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUobHQociwhMCksZSx0LG4pfX0pLFMuZWFjaCh7c2xpZGVEb3duOmx0KCJzaG93Iiksc2xpZGVVcDpsdCgiaGlkZSIpLHNsaWRlVG9nZ2xlOmx0KCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGUscil7Uy5mbltlXT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuYW5pbWF0ZShyLGUsdCxuKX19KSxTLnRpbWVycz1bXSxTLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgZSx0PTAsbj1TLnRpbWVycztmb3IodHQ9RGF0ZS5ub3coKTt0PG4ubGVuZ3RoO3QrKykoZT1uW3RdKSgpfHxuW3RdIT09ZXx8bi5zcGxpY2UodC0tLDEpO24ubGVuZ3RofHxTLmZ4LnN0b3AoKSx0dD12b2lkIDB9LFMuZngudGltZXI9ZnVuY3Rpb24oZSl7Uy50aW1lcnMucHVzaChlKSxTLmZ4LnN0YXJ0KCl9LFMuZnguaW50ZXJ2YWw9MTMsUy5meC5zdGFydD1mdW5jdGlvbigpe250fHwobnQ9ITAsc3QoKSl9LFMuZnguc3RvcD1mdW5jdGlvbigpe250PW51bGx9LFMuZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LFMuZm4uZGVsYXk9ZnVuY3Rpb24ocixlKXtyZXR1cm4gcj1TLmZ4JiZTLmZ4LnNwZWVkc1tyXXx8cixlPWV8fCJmeCIsdGhpcy5xdWV1ZShlLGZ1bmN0aW9uKGUsdCl7dmFyIG49Qy5zZXRUaW1lb3V0KGUscik7dC5zdG9wPWZ1bmN0aW9uKCl7Qy5jbGVhclRpbWVvdXQobil9fSl9LHJ0PUUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxpdD1FLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLmFwcGVuZENoaWxkKEUuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLHJ0LnR5cGU9ImNoZWNrYm94Iix5LmNoZWNrT249IiIhPT1ydC52YWx1ZSx5Lm9wdFNlbGVjdGVkPWl0LnNlbGVjdGVkLChydD1FLmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnZhbHVlPSJ0IixydC50eXBlPSJyYWRpbyIseS5yYWRpb1ZhbHVlPSJ0Ij09PXJ0LnZhbHVlO3ZhciBwdCxkdD1TLmV4cHIuYXR0ckhhbmRsZTtTLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiAkKHRoaXMsUy5hdHRyLGUsdCwxPGFyZ3VtZW50cy5sZW5ndGgpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtTLnJlbW92ZUF0dHIodGhpcyxlKX0pfX0pLFMuZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgZS5nZXRBdHRyaWJ1dGU/Uy5wcm9wKGUsdCxuKTooMT09PW8mJlMuaXNYTUxEb2MoZSl8fChpPVMuYXR0ckhvb2tzW3QudG9Mb3dlckNhc2UoKV18fChTLmV4cHIubWF0Y2guYm9vbC50ZXN0KHQpP3B0OnZvaWQgMCkpLHZvaWQgMCE9PW4/bnVsbD09PW4/dm9pZCBTLnJlbW92ZUF0dHIoZSx0KTppJiYic2V0ImluIGkmJnZvaWQgMCE9PShyPWkuc2V0KGUsbix0KSk/cjooZS5zZXRBdHRyaWJ1dGUodCxuKyIiKSxuKTppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOm51bGw9PShyPVMuZmluZC5hdHRyKGUsdCkpP3ZvaWQgMDpyKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oZSx0KXtpZigheS5yYWRpb1ZhbHVlJiYicmFkaW8iPT09dCYmQShlLCJpbnB1dCIpKXt2YXIgbj1lLnZhbHVlO3JldHVybiBlLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbiYmKGUudmFsdWU9biksdH19fX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXQmJnQubWF0Y2goUCk7aWYoaSYmMT09PWUubm9kZVR5cGUpd2hpbGUobj1pW3IrK10pZS5yZW1vdmVBdHRyaWJ1dGUobil9fSkscHQ9e3NldDpmdW5jdGlvbihlLHQsbil7cmV0dXJuITE9PT10P1MucmVtb3ZlQXR0cihlLG4pOmUuc2V0QXR0cmlidXRlKG4sbiksbn19LFMuZWFjaChTLmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1x3Ky9nKSxmdW5jdGlvbihlLHQpe3ZhciBhPWR0W3RdfHxTLmZpbmQuYXR0cjtkdFt0XT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXQudG9Mb3dlckNhc2UoKTtyZXR1cm4gbnx8KGk9ZHRbb10sZHRbb109cixyPW51bGwhPWEoZSx0LG4pP286bnVsbCxkdFtvXT1pKSxyfX0pO3ZhciBodD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLGd0PS9eKD86YXxhcmVhKSQvaTtmdW5jdGlvbiB2dChlKXtyZXR1cm4oZS5tYXRjaChQKXx8W10pLmpvaW4oIiAiKX1mdW5jdGlvbiB5dChlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIn1mdW5jdGlvbiBtdChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOiJzdHJpbmciPT10eXBlb2YgZSYmZS5tYXRjaChQKXx8W119Uy5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJCh0aGlzLFMucHJvcCxlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbUy5wcm9wRml4W2VdfHxlXX0pfX0pLFMuZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiAxPT09byYmUy5pc1hNTERvYyhlKXx8KHQ9Uy5wcm9wRml4W3RdfHx0LGk9Uy5wcm9wSG9va3NbdF0pLHZvaWQgMCE9PW4/aSYmInNldCJpbiBpJiZ2b2lkIDAhPT0ocj1pLnNldChlLG4sdCkpP3I6ZVt0XT1uOmkmJiJnZXQiaW4gaSYmbnVsbCE9PShyPWkuZ2V0KGUsdCkpP3I6ZVt0XX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PVMuZmluZC5hdHRyKGUsInRhYmluZGV4Iik7cmV0dXJuIHQ/cGFyc2VJbnQodCwxMCk6aHQudGVzdChlLm5vZGVOYW1lKXx8Z3QudGVzdChlLm5vZGVOYW1lKSYmZS5ocmVmPzA6LTF9fX0scHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9fSkseS5vcHRTZWxlY3RlZHx8KFMucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiZ0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LG51bGx9LHNldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7dCYmKHQuc2VsZWN0ZWRJbmRleCx0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KX19KSxTLmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe1MucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSxTLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhLHMsdT0wO2lmKG0odCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLmFkZENsYXNzKHQuY2FsbCh0aGlzLGUseXQodGhpcykpKX0pO2lmKChlPW10KHQpKS5sZW5ndGgpd2hpbGUobj10aGlzW3UrK10paWYoaT15dChuKSxyPTE9PT1uLm5vZGVUeXBlJiYiICIrdnQoaSkrIiAiKXthPTA7d2hpbGUobz1lW2ErK10pci5pbmRleE9mKCIgIitvKyIgIik8MCYmKHIrPW8rIiAiKTtpIT09KHM9dnQocikpJiZuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHMpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxvLGEscyx1PTA7aWYobSh0KSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe1ModGhpcykucmVtb3ZlQ2xhc3ModC5jYWxsKHRoaXMsZSx5dCh0aGlzKSkpfSk7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuYXR0cigiY2xhc3MiLCIiKTtpZigoZT1tdCh0KSkubGVuZ3RoKXdoaWxlKG49dGhpc1t1KytdKWlmKGk9eXQobikscj0xPT09bi5ub2RlVHlwZSYmIiAiK3Z0KGkpKyIgIil7YT0wO3doaWxlKG89ZVthKytdKXdoaWxlKC0xPHIuaW5kZXhPZigiICIrbysiICIpKXI9ci5yZXBsYWNlKCIgIitvKyIgIiwiICIpO2khPT0ocz12dChyKSkmJm4uc2V0QXR0cmlidXRlKCJjbGFzcyIscyl9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGksdCl7dmFyIG89dHlwZW9mIGksYT0ic3RyaW5nIj09PW98fEFycmF5LmlzQXJyYXkoaSk7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdCYmYT90P3RoaXMuYWRkQ2xhc3MoaSk6dGhpcy5yZW1vdmVDbGFzcyhpKTptKGkpP3RoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLnRvZ2dsZUNsYXNzKGkuY2FsbCh0aGlzLGUseXQodGhpcyksdCksdCl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZSx0LG4scjtpZihhKXt0PTAsbj1TKHRoaXMpLHI9bXQoaSk7d2hpbGUoZT1yW3QrK10pbi5oYXNDbGFzcyhlKT9uLnJlbW92ZUNsYXNzKGUpOm4uYWRkQ2xhc3MoZSl9ZWxzZSB2b2lkIDAhPT1pJiYiYm9vbGVhbiIhPT1vfHwoKGU9eXQodGhpcykpJiZZLnNldCh0aGlzLCJfX2NsYXNzTmFtZV9fIixlKSx0aGlzLnNldEF0dHJpYnV0ZSYmdGhpcy5zZXRBdHRyaWJ1dGUoImNsYXNzIixlfHwhMT09PWk/IiI6WS5nZXQodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIikpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj0wO3Q9IiAiK2UrIiAiO3doaWxlKG49dGhpc1tyKytdKWlmKDE9PT1uLm5vZGVUeXBlJiYtMTwoIiAiK3Z0KHl0KG4pKSsiICIpLmluZGV4T2YodCkpcmV0dXJuITA7cmV0dXJuITF9fSk7dmFyIHh0PS9cci9nO1MuZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24obil7dmFyIHIsZSxpLHQ9dGhpc1swXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1tKG4pLHRoaXMuZWFjaChmdW5jdGlvbihlKXt2YXIgdDsxPT09dGhpcy5ub2RlVHlwZSYmKG51bGw9PSh0PWk/bi5jYWxsKHRoaXMsZSxTKHRoaXMpLnZhbCgpKTpuKT90PSIiOiJudW1iZXIiPT10eXBlb2YgdD90Kz0iIjpBcnJheS5pc0FycmF5KHQpJiYodD1TLm1hcCh0LGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSksKHI9Uy52YWxIb29rc1t0aGlzLnR5cGVdfHxTLnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYic2V0ImluIHImJnZvaWQgMCE9PXIuc2V0KHRoaXMsdCwidmFsdWUiKXx8KHRoaXMudmFsdWU9dCkpfSkpOnQ/KHI9Uy52YWxIb29rc1t0LnR5cGVdfHxTLnZhbEhvb2tzW3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYiZ2V0ImluIHImJnZvaWQgMCE9PShlPXIuZ2V0KHQsInZhbHVlIikpP2U6InN0cmluZyI9PXR5cGVvZihlPXQudmFsdWUpP2UucmVwbGFjZSh4dCwiIik6bnVsbD09ZT8iIjplOnZvaWQgMH19KSxTLmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PVMuZmluZC5hdHRyKGUsInZhbHVlIik7cmV0dXJuIG51bGwhPXQ/dDp2dChTLnRleHQoZSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9ZS5vcHRpb25zLG89ZS5zZWxlY3RlZEluZGV4LGE9InNlbGVjdC1vbmUiPT09ZS50eXBlLHM9YT9udWxsOltdLHU9YT9vKzE6aS5sZW5ndGg7Zm9yKHI9bzwwP3U6YT9vOjA7cjx1O3IrKylpZigoKG49aVtyXSkuc2VsZWN0ZWR8fHI9PT1vKSYmIW4uZGlzYWJsZWQmJighbi5wYXJlbnROb2RlLmRpc2FibGVkfHwhQShuLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtpZih0PVMobikudmFsKCksYSlyZXR1cm4gdDtzLnB1c2godCl9cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT1lLm9wdGlvbnMsbz1TLm1ha2VBcnJheSh0KSxhPWkubGVuZ3RoO3doaWxlKGEtLSkoKHI9aVthXSkuc2VsZWN0ZWQ9LTE8Uy5pbkFycmF5KFMudmFsSG9va3Mub3B0aW9uLmdldChyKSxvKSkmJihuPSEwKTtyZXR1cm4gbnx8KGUuc2VsZWN0ZWRJbmRleD0tMSksb319fX0pLFMuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe1MudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGUuY2hlY2tlZD0tMTxTLmluQXJyYXkoUyhlKS52YWwoKSx0KX19LHkuY2hlY2tPbnx8KFMudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjplLnZhbHVlfSl9KSx5LmZvY3VzaW49Im9uZm9jdXNpbiJpbiBDO3ZhciBidD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sd3Q9ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX07Uy5leHRlbmQoUy5ldmVudCx7dHJpZ2dlcjpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGwsYyxmLHA9W258fEVdLGQ9di5jYWxsKGUsInR5cGUiKT9lLnR5cGU6ZSxoPXYuY2FsbChlLCJuYW1lc3BhY2UiKT9lLm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKG89Zj1hPW49bnx8RSwzIT09bi5ub2RlVHlwZSYmOCE9PW4ubm9kZVR5cGUmJiFidC50ZXN0KGQrUy5ldmVudC50cmlnZ2VyZWQpJiYoLTE8ZC5pbmRleE9mKCIuIikmJihkPShoPWQuc3BsaXQoIi4iKSkuc2hpZnQoKSxoLnNvcnQoKSksdT1kLmluZGV4T2YoIjoiKTwwJiYib24iK2QsKGU9ZVtTLmV4cGFuZG9dP2U6bmV3IFMuRXZlbnQoZCwib2JqZWN0Ij09dHlwZW9mIGUmJmUpKS5pc1RyaWdnZXI9cj8yOjMsZS5uYW1lc3BhY2U9aC5qb2luKCIuIiksZS5ybmFtZXNwYWNlPWUubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxlLnJlc3VsdD12b2lkIDAsZS50YXJnZXR8fChlLnRhcmdldD1uKSx0PW51bGw9PXQ/W2VdOlMubWFrZUFycmF5KHQsW2VdKSxjPVMuZXZlbnQuc3BlY2lhbFtkXXx8e30scnx8IWMudHJpZ2dlcnx8ITEhPT1jLnRyaWdnZXIuYXBwbHkobix0KSkpe2lmKCFyJiYhYy5ub0J1YmJsZSYmIXgobikpe2ZvcihzPWMuZGVsZWdhdGVUeXBlfHxkLGJ0LnRlc3QocytkKXx8KG89by5wYXJlbnROb2RlKTtvO289by5wYXJlbnROb2RlKXAucHVzaChvKSxhPW87YT09PShuLm93bmVyRG9jdW1lbnR8fEUpJiZwLnB1c2goYS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3d8fEMpfWk9MDt3aGlsZSgobz1wW2krK10pJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWY9byxlLnR5cGU9MTxpP3M6Yy5iaW5kVHlwZXx8ZCwobD0oWS5nZXQobywiZXZlbnRzIil8fE9iamVjdC5jcmVhdGUobnVsbCkpW2UudHlwZV0mJlkuZ2V0KG8sImhhbmRsZSIpKSYmbC5hcHBseShvLHQpLChsPXUmJm9bdV0pJiZsLmFwcGx5JiZWKG8pJiYoZS5yZXN1bHQ9bC5hcHBseShvLHQpLCExPT09ZS5yZXN1bHQmJmUucHJldmVudERlZmF1bHQoKSk7cmV0dXJuIGUudHlwZT1kLHJ8fGUuaXNEZWZhdWx0UHJldmVudGVkKCl8fGMuX2RlZmF1bHQmJiExIT09Yy5fZGVmYXVsdC5hcHBseShwLnBvcCgpLHQpfHwhVihuKXx8dSYmbShuW2RdKSYmIXgobikmJigoYT1uW3VdKSYmKG5bdV09bnVsbCksUy5ldmVudC50cmlnZ2VyZWQ9ZCxlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmYuYWRkRXZlbnRMaXN0ZW5lcihkLHd0KSxuW2RdKCksZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZmLnJlbW92ZUV2ZW50TGlzdGVuZXIoZCx3dCksUy5ldmVudC50cmlnZ2VyZWQ9dm9pZCAwLGEmJihuW3VdPWEpKSxlLnJlc3VsdH19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1TLmV4dGVuZChuZXcgUy5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITB9KTtTLmV2ZW50LnRyaWdnZXIocixudWxsLHQpfX0pLFMuZm4uZXh0ZW5kKHt0cmlnZ2VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1MuZXZlbnQudHJpZ2dlcihlLHQsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzWzBdO2lmKG4pcmV0dXJuIFMuZXZlbnQudHJpZ2dlcihlLHQsbiwhMCl9fSkseS5mb2N1c2lufHxTLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKG4scil7dmFyIGk9ZnVuY3Rpb24oZSl7Uy5ldmVudC5zaW11bGF0ZShyLGUudGFyZ2V0LFMuZXZlbnQuZml4KGUpKX07Uy5ldmVudC5zcGVjaWFsW3JdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcy5kb2N1bWVudHx8dGhpcyx0PVkuYWNjZXNzKGUscik7dHx8ZS5hZGRFdmVudExpc3RlbmVyKG4saSwhMCksWS5hY2Nlc3MoZSxyLCh0fHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMuZG9jdW1lbnR8fHRoaXMsdD1ZLmFjY2VzcyhlLHIpLTE7dD9ZLmFjY2VzcyhlLHIsdCk6KGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLGksITApLFkucmVtb3ZlKGUscikpfX19KTt2YXIgVHQ9Qy5sb2NhdGlvbixDdD17Z3VpZDpEYXRlLm5vdygpfSxFdD0vXD8vO1MucGFyc2VYTUw9ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDt0cnl7dD0obmV3IEMuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoZSwidGV4dC94bWwiKX1jYXRjaChlKXt0PXZvaWQgMH1yZXR1cm4gdCYmIXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RofHxTLmVycm9yKCJJbnZhbGlkIFhNTDogIitlKSx0fTt2YXIgU3Q9L1xbXF0kLyxrdD0vXHI/XG4vZyxBdD0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksTnQ9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIER0KG4sZSxyLGkpe3ZhciB0O2lmKEFycmF5LmlzQXJyYXkoZSkpUy5lYWNoKGUsZnVuY3Rpb24oZSx0KXtyfHxTdC50ZXN0KG4pP2kobix0KTpEdChuKyJbIisoIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10P2U6IiIpKyJdIix0LHIsaSl9KTtlbHNlIGlmKHJ8fCJvYmplY3QiIT09dyhlKSlpKG4sZSk7ZWxzZSBmb3IodCBpbiBlKUR0KG4rIlsiK3QrIl0iLGVbdF0scixpKX1TLnBhcmFtPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPWZ1bmN0aW9uKGUsdCl7dmFyIG49bSh0KT90KCk6dDtyW3IubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChudWxsPT1uPyIiOm4pfTtpZihudWxsPT1lKXJldHVybiIiO2lmKEFycmF5LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYhUy5pc1BsYWluT2JqZWN0KGUpKVMuZWFjaChlLGZ1bmN0aW9uKCl7aSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihuIGluIGUpRHQobixlW25dLHQsaSk7cmV0dXJuIHIuam9pbigiJiIpfSxTLmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIFMucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT1TLnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT9TLm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFTKHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmTnQudGVzdCh0aGlzLm5vZGVOYW1lKSYmIUF0LnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFwZS50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPVModGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDpBcnJheS5pc0FycmF5KG4pP1MubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShrdCwiXHJcbiIpfX0pOntuYW1lOnQubmFtZSx2YWx1ZTpuLnJlcGxhY2Uoa3QsIlxyXG4iKX19KS5nZXQoKX19KTt2YXIganQ9LyUyMC9nLHF0PS8jLiokLyxMdD0vKFs/Jl0pXz1bXiZdKi8sSHQ9L14oLio/KTpbIFx0XSooW15cclxuXSopJC9nbSxPdD0vXig/OkdFVHxIRUFEKSQvLFB0PS9eXC9cLy8sUnQ9e30sTXQ9e30sSXQ9IiovIi5jb25jYXQoIioiKSxXdD1FLmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiBGdChvKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT0iKiIpO3ZhciBuLHI9MCxpPWUudG9Mb3dlckNhc2UoKS5tYXRjaChQKXx8W107aWYobSh0KSl3aGlsZShuPWlbcisrXSkiKyI9PT1uWzBdPyhuPW4uc2xpY2UoMSl8fCIqIiwob1tuXT1vW25dfHxbXSkudW5zaGlmdCh0KSk6KG9bbl09b1tuXXx8W10pLnB1c2godCl9fWZ1bmN0aW9uIEJ0KHQsaSxvLGEpe3ZhciBzPXt9LHU9dD09PU10O2Z1bmN0aW9uIGwoZSl7dmFyIHI7cmV0dXJuIHNbZV09ITAsUy5lYWNoKHRbZV18fFtdLGZ1bmN0aW9uKGUsdCl7dmFyIG49dChpLG8sYSk7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBufHx1fHxzW25dP3U/IShyPW4pOnZvaWQgMDooaS5kYXRhVHlwZXMudW5zaGlmdChuKSxsKG4pLCExKX0pLHJ9cmV0dXJuIGwoaS5kYXRhVHlwZXNbMF0pfHwhc1siKiJdJiZsKCIqIil9ZnVuY3Rpb24gJHQoZSx0KXt2YXIgbixyLGk9Uy5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihuIGluIHQpdm9pZCAwIT09dFtuXSYmKChpW25dP2U6cnx8KHI9e30pKVtuXT10W25dKTtyZXR1cm4gciYmUy5leHRlbmQoITAsZSxyKSxlfVd0LmhyZWY9VHQuaHJlZixTLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6VHQuaHJlZix0eXBlOiJHRVQiLGlzTG9jYWw6L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8udGVzdChUdC5wcm90b2NvbCksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjpJdCx0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDovXGJ4bWxcYi8saHRtbDovXGJodG1sLyxqc29uOi9cYmpzb25cYi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpKU09OLnBhcnNlLCJ0ZXh0IHhtbCI6Uy5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/JHQoJHQoZSxTLmFqYXhTZXR0aW5ncyksdCk6JHQoUy5hamF4U2V0dGluZ3MsZSl9LGFqYXhQcmVmaWx0ZXI6RnQoUnQpLGFqYXhUcmFuc3BvcnQ6RnQoTXQpLGFqYXg6ZnVuY3Rpb24oZSx0KXsib2JqZWN0Ij09dHlwZW9mIGUmJih0PWUsZT12b2lkIDApLHQ9dHx8e307dmFyIGMsZixwLG4sZCxyLGgsZyxpLG8sdj1TLmFqYXhTZXR1cCh7fSx0KSx5PXYuY29udGV4dHx8dixtPXYuY29udGV4dCYmKHkubm9kZVR5cGV8fHkuanF1ZXJ5KT9TKHkpOlMuZXZlbnQseD1TLkRlZmVycmVkKCksYj1TLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSx3PXYuc3RhdHVzQ29kZXx8e30sYT17fSxzPXt9LHU9ImNhbmNlbGVkIixUPXtyZWFkeVN0YXRlOjAsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoaCl7aWYoIW4pe249e307d2hpbGUodD1IdC5leGVjKHApKW5bdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl09KG5bdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl18fFtdKS5jb25jYXQodFsyXSl9dD1uW2UudG9Mb3dlckNhc2UoKSsiICJdfXJldHVybiBudWxsPT10P251bGw6dC5qb2luKCIsICIpfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gaD9wOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09aCYmKGU9c1tlLnRvTG93ZXJDYXNlKCldPXNbZS50b0xvd2VyQ2FzZSgpXXx8ZSxhW2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWgmJih2Lm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlpZihoKVQuYWx3YXlzKGVbVC5zdGF0dXNdKTtlbHNlIGZvcih0IGluIGUpd1t0XT1bd1t0XSxlW3RdXTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8dTtyZXR1cm4gYyYmYy5hYm9ydCh0KSxsKDAsdCksdGhpc319O2lmKHgucHJvbWlzZShUKSx2LnVybD0oKGV8fHYudXJsfHxUdC5ocmVmKSsiIikucmVwbGFjZShQdCxUdC5wcm90b2NvbCsiLy8iKSx2LnR5cGU9dC5tZXRob2R8fHQudHlwZXx8di5tZXRob2R8fHYudHlwZSx2LmRhdGFUeXBlcz0odi5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKFApfHxbIiJdLG51bGw9PXYuY3Jvc3NEb21haW4pe3I9RS5jcmVhdGVFbGVtZW50KCJhIik7dHJ5e3IuaHJlZj12LnVybCxyLmhyZWY9ci5ocmVmLHYuY3Jvc3NEb21haW49V3QucHJvdG9jb2wrIi8vIitXdC5ob3N0IT1yLnByb3RvY29sKyIvLyIrci5ob3N0fWNhdGNoKGUpe3YuY3Jvc3NEb21haW49ITB9fWlmKHYuZGF0YSYmdi5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiB2LmRhdGEmJih2LmRhdGE9Uy5wYXJhbSh2LmRhdGEsdi50cmFkaXRpb25hbCkpLEJ0KFJ0LHYsdCxUKSxoKXJldHVybiBUO2ZvcihpIGluKGc9Uy5ldmVudCYmdi5nbG9iYWwpJiYwPT1TLmFjdGl2ZSsrJiZTLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLHYudHlwZT12LnR5cGUudG9VcHBlckNhc2UoKSx2Lmhhc0NvbnRlbnQ9IU90LnRlc3Qodi50eXBlKSxmPXYudXJsLnJlcGxhY2UocXQsIiIpLHYuaGFzQ29udGVudD92LmRhdGEmJnYucHJvY2Vzc0RhdGEmJjA9PT0odi5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiYodi5kYXRhPXYuZGF0YS5yZXBsYWNlKGp0LCIrIikpOihvPXYudXJsLnNsaWNlKGYubGVuZ3RoKSx2LmRhdGEmJih2LnByb2Nlc3NEYXRhfHwic3RyaW5nIj09dHlwZW9mIHYuZGF0YSkmJihmKz0oRXQudGVzdChmKT8iJiI6Ij8iKSt2LmRhdGEsZGVsZXRlIHYuZGF0YSksITE9PT12LmNhY2hlJiYoZj1mLnJlcGxhY2UoTHQsIiQxIiksbz0oRXQudGVzdChmKT8iJiI6Ij8iKSsiXz0iK0N0Lmd1aWQrKytvKSx2LnVybD1mK28pLHYuaWZNb2RpZmllZCYmKFMubGFzdE1vZGlmaWVkW2ZdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixTLmxhc3RNb2RpZmllZFtmXSksUy5ldGFnW2ZdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLFMuZXRhZ1tmXSkpLCh2LmRhdGEmJnYuaGFzQ29udGVudCYmITEhPT12LmNvbnRlbnRUeXBlfHx0LmNvbnRlbnRUeXBlKSYmVC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLHYuY29udGVudFR5cGUpLFQuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0Iix2LmRhdGFUeXBlc1swXSYmdi5hY2NlcHRzW3YuZGF0YVR5cGVzWzBdXT92LmFjY2VwdHNbdi5kYXRhVHlwZXNbMF1dKygiKiIhPT12LmRhdGFUeXBlc1swXT8iLCAiK0l0KyI7IHE9MC4wMSI6IiIpOnYuYWNjZXB0c1siKiJdKSx2LmhlYWRlcnMpVC5zZXRSZXF1ZXN0SGVhZGVyKGksdi5oZWFkZXJzW2ldKTtpZih2LmJlZm9yZVNlbmQmJighMT09PXYuYmVmb3JlU2VuZC5jYWxsKHksVCx2KXx8aCkpcmV0dXJuIFQuYWJvcnQoKTtpZih1PSJhYm9ydCIsYi5hZGQodi5jb21wbGV0ZSksVC5kb25lKHYuc3VjY2VzcyksVC5mYWlsKHYuZXJyb3IpLGM9QnQoTXQsdix0LFQpKXtpZihULnJlYWR5U3RhdGU9MSxnJiZtLnRyaWdnZXIoImFqYXhTZW5kIixbVCx2XSksaClyZXR1cm4gVDt2LmFzeW5jJiYwPHYudGltZW91dCYmKGQ9Qy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VC5hYm9ydCgidGltZW91dCIpfSx2LnRpbWVvdXQpKTt0cnl7aD0hMSxjLnNlbmQoYSxsKX1jYXRjaChlKXtpZihoKXRocm93IGU7bCgtMSxlKX19ZWxzZSBsKC0xLCJObyBUcmFuc3BvcnQiKTtmdW5jdGlvbiBsKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbD10O2h8fChoPSEwLGQmJkMuY2xlYXJUaW1lb3V0KGQpLGM9dm9pZCAwLHA9cnx8IiIsVC5yZWFkeVN0YXRlPTA8ZT80OjAsaT0yMDA8PWUmJmU8MzAwfHwzMDQ9PT1lLG4mJihzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzPWUuY29udGVudHMsdT1lLmRhdGFUeXBlczt3aGlsZSgiKiI9PT11WzBdKXUuc2hpZnQoKSx2b2lkIDA9PT1yJiYocj1lLm1pbWVUeXBlfHx0LmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSk7aWYocilmb3IoaSBpbiBzKWlmKHNbaV0mJnNbaV0udGVzdChyKSl7dS51bnNoaWZ0KGkpO2JyZWFrfWlmKHVbMF1pbiBuKW89dVswXTtlbHNle2ZvcihpIGluIG4pe2lmKCF1WzBdfHxlLmNvbnZlcnRlcnNbaSsiICIrdVswXV0pe289aTticmVha31hfHwoYT1pKX1vPW98fGF9aWYobylyZXR1cm4gbyE9PXVbMF0mJnUudW5zaGlmdChvKSxuW29dfSh2LFQsbikpLCFpJiYtMTxTLmluQXJyYXkoInNjcmlwdCIsdi5kYXRhVHlwZXMpJiYodi5jb252ZXJ0ZXJzWyJ0ZXh0IHNjcmlwdCJdPWZ1bmN0aW9uKCl7fSkscz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGw9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gZS5jb252ZXJ0ZXJzKWxbYS50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbYV07bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKCIqIj09PW8pbz11O2Vsc2UgaWYoIioiIT09dSYmdSE9PW8pe2lmKCEoYT1sW3UrIiAiK29dfHxsWyIqICIrb10pKWZvcihpIGluIGwpaWYoKHM9aS5zcGxpdCgiICIpKVsxXT09PW8mJihhPWxbdSsiICIrc1swXV18fGxbIiogIitzWzBdXSkpeyEwPT09YT9hPWxbaV06ITAhPT1sW2ldJiYobz1zWzBdLGMudW5zaGlmdChzWzFdKSk7YnJlYWt9aWYoITAhPT1hKWlmKGEmJmVbInRocm93cyJdKXQ9YSh0KTtlbHNlIHRyeXt0PWEodCl9Y2F0Y2goZSl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6YT9lOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitvfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOnR9fSh2LHMsVCxpKSxpPyh2LmlmTW9kaWZpZWQmJigodT1ULmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIikpJiYoUy5sYXN0TW9kaWZpZWRbZl09dSksKHU9VC5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpKSYmKFMuZXRhZ1tmXT11KSksMjA0PT09ZXx8IkhFQUQiPT09di50eXBlP2w9Im5vY29udGVudCI6MzA0PT09ZT9sPSJub3Rtb2RpZmllZCI6KGw9cy5zdGF0ZSxvPXMuZGF0YSxpPSEoYT1zLmVycm9yKSkpOihhPWwsIWUmJmx8fChsPSJlcnJvciIsZTwwJiYoZT0wKSkpLFQuc3RhdHVzPWUsVC5zdGF0dXNUZXh0PSh0fHxsKSsiIixpP3gucmVzb2x2ZVdpdGgoeSxbbyxsLFRdKTp4LnJlamVjdFdpdGgoeSxbVCxsLGFdKSxULnN0YXR1c0NvZGUodyksdz12b2lkIDAsZyYmbS50cmlnZ2VyKGk/ImFqYXhTdWNjZXNzIjoiYWpheEVycm9yIixbVCx2LGk/bzphXSksYi5maXJlV2l0aCh5LFtULGxdKSxnJiYobS50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtULHZdKSwtLVMuYWN0aXZlfHxTLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gVH0sZ2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFMuZ2V0KGUsdCxuLCJqc29uIil9LGdldFNjcmlwdDpmdW5jdGlvbihlLHQpe3JldHVybiBTLmdldChlLHZvaWQgMCx0LCJzY3JpcHQiKX19KSxTLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oZSxpKXtTW2ldPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBtKHQpJiYocj1yfHxuLG49dCx0PXZvaWQgMCksUy5hamF4KFMuZXh0ZW5kKHt1cmw6ZSx0eXBlOmksZGF0YVR5cGU6cixkYXRhOnQsc3VjY2VzczpufSxTLmlzUGxhaW5PYmplY3QoZSkmJmUpKX19KSxTLmFqYXhQcmVmaWx0ZXIoZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQgaW4gZS5oZWFkZXJzKSJjb250ZW50LXR5cGUiPT09dC50b0xvd2VyQ2FzZSgpJiYoZS5jb250ZW50VHlwZT1lLmhlYWRlcnNbdF18fCIiKX0pLFMuX2V2YWxVcmw9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBTLmFqYXgoe3VybDplLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsY2FjaGU6ITAsYXN5bmM6ITEsZ2xvYmFsOiExLGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oKXt9fSxkYXRhRmlsdGVyOmZ1bmN0aW9uKGUpe1MuZ2xvYmFsRXZhbChlLHQsbil9fSl9LFMuZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzWzBdJiYobShlKSYmKGU9ZS5jYWxsKHRoaXNbMF0pKSx0PVMoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpczt3aGlsZShlLmZpcnN0RWxlbWVudENoaWxkKWU9ZS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKSksdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKG4pe3JldHVybiBtKG4pP3RoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLndyYXBJbm5lcihuLmNhbGwodGhpcyxlKSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1TKHRoaXMpLHQ9ZS5jb250ZW50cygpO3QubGVuZ3RoP3Qud3JhcEFsbChuKTplLmFwcGVuZChuKX0pfSx3cmFwOmZ1bmN0aW9uKHQpe3ZhciBuPW0odCk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLndyYXBBbGwobj90LmNhbGwodGhpcyxlKTp0KX0pfSx1bndyYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucGFyZW50KGUpLm5vdCgiYm9keSIpLmVhY2goZnVuY3Rpb24oKXtTKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KSx0aGlzfX0pLFMuZXhwci5wc2V1ZG9zLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4hUy5leHByLnBzZXVkb3MudmlzaWJsZShlKX0sUy5leHByLnBzZXVkb3MudmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4hIShlLm9mZnNldFdpZHRofHxlLm9mZnNldEhlaWdodHx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9LFMuYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEMuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goZSl7fX07dmFyIF90PXswOjIwMCwxMjIzOjIwNH0senQ9Uy5hamF4U2V0dGluZ3MueGhyKCk7eS5jb3JzPSEhenQmJiJ3aXRoQ3JlZGVudGlhbHMiaW4genQseS5hamF4PXp0PSEhenQsUy5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGkpe3ZhciBvLGE7aWYoeS5jb3JzfHx6dCYmIWkuY3Jvc3NEb21haW4pcmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWkueGhyKCk7aWYoci5vcGVuKGkudHlwZSxpLnVybCxpLmFzeW5jLGkudXNlcm5hbWUsaS5wYXNzd29yZCksaS54aHJGaWVsZHMpZm9yKG4gaW4gaS54aHJGaWVsZHMpcltuXT1pLnhockZpZWxkc1tuXTtmb3IobiBpbiBpLm1pbWVUeXBlJiZyLm92ZXJyaWRlTWltZVR5cGUmJnIub3ZlcnJpZGVNaW1lVHlwZShpLm1pbWVUeXBlKSxpLmNyb3NzRG9tYWlufHxlWyJYLVJlcXVlc3RlZC1XaXRoIl18fChlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0IiksZSlyLnNldFJlcXVlc3RIZWFkZXIobixlW25dKTtvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe28mJihvPWE9ci5vbmxvYWQ9ci5vbmVycm9yPXIub25hYm9ydD1yLm9udGltZW91dD1yLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLCJhYm9ydCI9PT1lP3IuYWJvcnQoKToiZXJyb3IiPT09ZT8ibnVtYmVyIiE9dHlwZW9mIHIuc3RhdHVzP3QoMCwiZXJyb3IiKTp0KHIuc3RhdHVzLHIuc3RhdHVzVGV4dCk6dChfdFtyLnN0YXR1c118fHIuc3RhdHVzLHIuc3RhdHVzVGV4dCwidGV4dCIhPT0oci5yZXNwb25zZVR5cGV8fCJ0ZXh0Iil8fCJzdHJpbmciIT10eXBlb2Ygci5yZXNwb25zZVRleHQ/e2JpbmFyeTpyLnJlc3BvbnNlfTp7dGV4dDpyLnJlc3BvbnNlVGV4dH0sci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0sci5vbmxvYWQ9bygpLGE9ci5vbmVycm9yPXIub250aW1lb3V0PW8oImVycm9yIiksdm9pZCAwIT09ci5vbmFib3J0P3Iub25hYm9ydD1hOnIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PXIucmVhZHlTdGF0ZSYmQy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7byYmYSgpfSl9LG89bygiYWJvcnQiKTt0cnl7ci5zZW5kKGkuaGFzQ29udGVudCYmaS5kYXRhfHxudWxsKX1jYXRjaChlKXtpZihvKXRocm93IGV9fSxhYm9ydDpmdW5jdGlvbigpe28mJm8oKX19fSksUy5hamF4UHJlZmlsdGVyKGZ1bmN0aW9uKGUpe2UuY3Jvc3NEb21haW4mJihlLmNvbnRlbnRzLnNjcmlwdD0hMSl9KSxTLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L1xiKD86amF2YXxlY21hKXNjcmlwdFxiL30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4gUy5nbG9iYWxFdmFsKGUpLGV9fX0pLFMuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXt2b2lkIDA9PT1lLmNhY2hlJiYoZS5jYWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT0iR0VUIil9KSxTLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24obil7dmFyIHIsaTtpZihuLmNyb3NzRG9tYWlufHxuLnNjcmlwdEF0dHJzKXJldHVybntzZW5kOmZ1bmN0aW9uKGUsdCl7cj1TKCI8c2NyaXB0PiIpLmF0dHIobi5zY3JpcHRBdHRyc3x8e30pLnByb3Aoe2NoYXJzZXQ6bi5zY3JpcHRDaGFyc2V0LHNyYzpuLnVybH0pLm9uKCJsb2FkIGVycm9yIixpPWZ1bmN0aW9uKGUpe3IucmVtb3ZlKCksaT1udWxsLGUmJnQoImVycm9yIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxFLmhlYWQuYXBwZW5kQ2hpbGQoclswXSl9LGFib3J0OmZ1bmN0aW9uKCl7aSYmaSgpfX19KTt2YXIgVXQsWHQ9W10sVnQ9Lyg9KVw/KD89JnwkKXxcP1w/LztTLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9WHQucG9wKCl8fFMuZXhwYW5kbysiXyIrQ3QuZ3VpZCsrO3JldHVybiB0aGlzW2VdPSEwLGV9fSksUy5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9ITEhPT1lLmpzb25wJiYoVnQudGVzdChlLnVybCk/InVybCI6InN0cmluZyI9PXR5cGVvZiBlLmRhdGEmJjA9PT0oZS5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZWdC50ZXN0KGUuZGF0YSkmJiJkYXRhIik7aWYoYXx8Impzb25wIj09PWUuZGF0YVR5cGVzWzBdKXJldHVybiByPWUuanNvbnBDYWxsYmFjaz1tKGUuanNvbnBDYWxsYmFjayk/ZS5qc29ucENhbGxiYWNrKCk6ZS5qc29ucENhbGxiYWNrLGE/ZVthXT1lW2FdLnJlcGxhY2UoVnQsIiQxIityKTohMSE9PWUuanNvbnAmJihlLnVybCs9KEV0LnRlc3QoZS51cmwpPyImIjoiPyIpK2UuanNvbnArIj0iK3IpLGUuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiBvfHxTLmVycm9yKHIrIiB3YXMgbm90IGNhbGxlZCIpLG9bMF19LGUuZGF0YVR5cGVzWzBdPSJqc29uIixpPUNbcl0sQ1tyXT1mdW5jdGlvbigpe289YXJndW1lbnRzfSxuLmFsd2F5cyhmdW5jdGlvbigpe3ZvaWQgMD09PWk/UyhDKS5yZW1vdmVQcm9wKHIpOkNbcl09aSxlW3JdJiYoZS5qc29ucENhbGxiYWNrPXQuanNvbnBDYWxsYmFjayxYdC5wdXNoKHIpKSxvJiZtKGkpJiZpKG9bMF0pLG89aT12b2lkIDB9KSwic2NyaXB0In0pLHkuY3JlYXRlSFRNTERvY3VtZW50PSgoVXQ9RS5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpLmJvZHkpLmlubmVySFRNTD0iPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT4iLDI9PT1VdC5jaGlsZE5vZGVzLmxlbmd0aCksUy5wYXJzZUhUTUw9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiJzdHJpbmciIT10eXBlb2YgZT9bXTooImJvb2xlYW4iPT10eXBlb2YgdCYmKG49dCx0PSExKSx0fHwoeS5jcmVhdGVIVE1MRG9jdW1lbnQ/KChyPSh0PUUuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKSkuY3JlYXRlRWxlbWVudCgiYmFzZSIpKS5ocmVmPUUubG9jYXRpb24uaHJlZix0LmhlYWQuYXBwZW5kQ2hpbGQocikpOnQ9RSksbz0hbiYmW10sKGk9Ti5leGVjKGUpKT9bdC5jcmVhdGVFbGVtZW50KGlbMV0pXTooaT14ZShbZV0sdCxvKSxvJiZvLmxlbmd0aCYmUyhvKS5yZW1vdmUoKSxTLm1lcmdlKFtdLGkuY2hpbGROb2RlcykpKTt2YXIgcixpLG99LFMuZm4ubG9hZD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9dGhpcyxzPWUuaW5kZXhPZigiICIpO3JldHVybi0xPHMmJihyPXZ0KGUuc2xpY2UocykpLGU9ZS5zbGljZSgwLHMpKSxtKHQpPyhuPXQsdD12b2lkIDApOnQmJiJvYmplY3QiPT10eXBlb2YgdCYmKGk9IlBPU1QiKSwwPGEubGVuZ3RoJiZTLmFqYXgoe3VybDplLHR5cGU6aXx8IkdFVCIsZGF0YVR5cGU6Imh0bWwiLGRhdGE6dH0pLmRvbmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMsYS5odG1sKHI/UygiPGRpdj4iKS5hcHBlbmQoUy5wYXJzZUhUTUwoZSkpLmZpbmQocik6ZSl9KS5hbHdheXMobiYmZnVuY3Rpb24oZSx0KXthLmVhY2goZnVuY3Rpb24oKXtuLmFwcGx5KHRoaXMsb3x8W2UucmVzcG9uc2VUZXh0LHQsZV0pfSl9KSx0aGlzfSxTLmV4cHIucHNldWRvcy5hbmltYXRlZD1mdW5jdGlvbih0KXtyZXR1cm4gUy5ncmVwKFMudGltZXJzLGZ1bmN0aW9uKGUpe3JldHVybiB0PT09ZS5lbGVtfSkubGVuZ3RofSxTLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbD1TLmNzcyhlLCJwb3NpdGlvbiIpLGM9UyhlKSxmPXt9OyJzdGF0aWMiPT09bCYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIikscz1jLm9mZnNldCgpLG89Uy5jc3MoZSwidG9wIiksdT1TLmNzcyhlLCJsZWZ0IiksKCJhYnNvbHV0ZSI9PT1sfHwiZml4ZWQiPT09bCkmJi0xPChvK3UpLmluZGV4T2YoImF1dG8iKT8oYT0ocj1jLnBvc2l0aW9uKCkpLnRvcCxpPXIubGVmdCk6KGE9cGFyc2VGbG9hdChvKXx8MCxpPXBhcnNlRmxvYXQodSl8fDApLG0odCkmJih0PXQuY2FsbChlLG4sUy5leHRlbmQoe30scykpKSxudWxsIT10LnRvcCYmKGYudG9wPXQudG9wLXMudG9wK2EpLG51bGwhPXQubGVmdCYmKGYubGVmdD10LmxlZnQtcy5sZWZ0K2kpLCJ1c2luZyJpbiB0P3QudXNpbmcuY2FsbChlLGYpOigibnVtYmVyIj09dHlwZW9mIGYudG9wJiYoZi50b3ArPSJweCIpLCJudW1iZXIiPT10eXBlb2YgZi5sZWZ0JiYoZi5sZWZ0Kz0icHgiKSxjLmNzcyhmKSl9fSxTLmZuLmV4dGVuZCh7b2Zmc2V0OmZ1bmN0aW9uKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZvaWQgMD09PXQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oZSl7Uy5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsdCxlKX0pO3ZhciBlLG4scj10aGlzWzBdO3JldHVybiByP3IuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg/KGU9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldyx7dG9wOmUudG9wK24ucGFnZVlPZmZzZXQsbGVmdDplLmxlZnQrbi5wYWdlWE9mZnNldH0pOnt0b3A6MCxsZWZ0OjB9OnZvaWQgMH0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgZSx0LG4scj10aGlzWzBdLGk9e3RvcDowLGxlZnQ6MH07aWYoImZpeGVkIj09PVMuY3NzKHIsInBvc2l0aW9uIikpdD1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Vsc2V7dD10aGlzLm9mZnNldCgpLG49ci5vd25lckRvY3VtZW50LGU9ci5vZmZzZXRQYXJlbnR8fG4uZG9jdW1lbnRFbGVtZW50O3doaWxlKGUmJihlPT09bi5ib2R5fHxlPT09bi5kb2N1bWVudEVsZW1lbnQpJiYic3RhdGljIj09PVMuY3NzKGUsInBvc2l0aW9uIikpZT1lLnBhcmVudE5vZGU7ZSYmZSE9PXImJjE9PT1lLm5vZGVUeXBlJiYoKGk9UyhlKS5vZmZzZXQoKSkudG9wKz1TLmNzcyhlLCJib3JkZXJUb3BXaWR0aCIsITApLGkubGVmdCs9Uy5jc3MoZSwiYm9yZGVyTGVmdFdpZHRoIiwhMCkpfXJldHVybnt0b3A6dC50b3AtaS50b3AtUy5jc3MociwibWFyZ2luVG9wIiwhMCksbGVmdDp0LmxlZnQtaS5sZWZ0LVMuY3NzKHIsIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9mZnNldFBhcmVudDt3aGlsZShlJiYic3RhdGljIj09PVMuY3NzKGUsInBvc2l0aW9uIikpZT1lLm9mZnNldFBhcmVudDtyZXR1cm4gZXx8cmV9KX19KSxTLmVhY2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24odCxpKXt2YXIgbz0icGFnZVlPZmZzZXQiPT09aTtTLmZuW3RdPWZ1bmN0aW9uKGUpe3JldHVybiAkKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKHgoZSk/cj1lOjk9PT1lLm5vZGVUeXBlJiYocj1lLmRlZmF1bHRWaWV3KSx2b2lkIDA9PT1uKXJldHVybiByP3JbaV06ZVt0XTtyP3Iuc2Nyb2xsVG8obz9yLnBhZ2VYT2Zmc2V0Om4sbz9uOnIucGFnZVlPZmZzZXQpOmVbdF09bn0sdCxlLGFyZ3VtZW50cy5sZW5ndGgpfX0pLFMuZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihlLG4pe1MuY3NzSG9va3Nbbl09JGUoeS5waXhlbFBvc2l0aW9uLGZ1bmN0aW9uKGUsdCl7aWYodClyZXR1cm4gdD1CZShlLG4pLE1lLnRlc3QodCk/UyhlKS5wb3NpdGlvbigpW25dKyJweCI6dH0pfSksUy5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oYSxzKXtTLmVhY2goe3BhZGRpbmc6ImlubmVyIithLGNvbnRlbnQ6cywiIjoib3V0ZXIiK2F9LGZ1bmN0aW9uKHIsbyl7Uy5mbltvXT1mdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGgmJihyfHwiYm9vbGVhbiIhPXR5cGVvZiBlKSxpPXJ8fCghMD09PWV8fCEwPT09dD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuICQodGhpcyxmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIHgoZSk/MD09PW8uaW5kZXhPZigib3V0ZXIiKT9lWyJpbm5lciIrYV06ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrYV06OT09PWUubm9kZVR5cGU/KHI9ZS5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgoZS5ib2R5WyJzY3JvbGwiK2FdLHJbInNjcm9sbCIrYV0sZS5ib2R5WyJvZmZzZXQiK2FdLHJbIm9mZnNldCIrYV0sclsiY2xpZW50IithXSkpOnZvaWQgMD09PW4/Uy5jc3MoZSx0LGkpOlMuc3R5bGUoZSx0LG4saSl9LHMsbj9lOnZvaWQgMCxuKX19KX0pLFMuZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGUsdCl7Uy5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbih0LGUpfX0pLFMuZm4uZXh0ZW5kKHtiaW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vbihlLG51bGwsdCxuKX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub2ZmKGUsbnVsbCx0KX0sZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihlLCIqKiIpOnRoaXMub2ZmKHQsZXx8IioqIixuKX0saG92ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGUpLm1vdXNlbGVhdmUodHx8ZSl9fSksUy5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsbil7Uy5mbltuXT1mdW5jdGlvbihlLHQpe3JldHVybiAwPGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vbihuLG51bGwsZSx0KTp0aGlzLnRyaWdnZXIobil9fSk7dmFyIEd0PS9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZztTLnByb3h5PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpO2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKG49ZVt0XSx0PWUsZT1uKSxtKGUpKXJldHVybiByPXMuY2FsbChhcmd1bWVudHMsMiksKGk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0fHx0aGlzLHIuY29uY2F0KHMuY2FsbChhcmd1bWVudHMpKSl9KS5ndWlkPWUuZ3VpZD1lLmd1aWR8fFMuZ3VpZCsrLGl9LFMuaG9sZFJlYWR5PWZ1bmN0aW9uKGUpe2U/Uy5yZWFkeVdhaXQrKzpTLnJlYWR5KCEwKX0sUy5pc0FycmF5PUFycmF5LmlzQXJyYXksUy5wYXJzZUpTT049SlNPTi5wYXJzZSxTLm5vZGVOYW1lPUEsUy5pc0Z1bmN0aW9uPW0sUy5pc1dpbmRvdz14LFMuY2FtZWxDYXNlPVgsUy50eXBlPXcsUy5ub3c9RGF0ZS5ub3csUy5pc051bWVyaWM9ZnVuY3Rpb24oZSl7dmFyIHQ9Uy50eXBlKGUpO3JldHVybigibnVtYmVyIj09PXR8fCJzdHJpbmciPT09dCkmJiFpc05hTihlLXBhcnNlRmxvYXQoZSkpfSxTLnRyaW09ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/IiI6KGUrIiIpLnJlcGxhY2UoR3QsIiIpfSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gU30pO3ZhciBZdD1DLmpRdWVyeSxRdD1DLiQ7cmV0dXJuIFMubm9Db25mbGljdD1mdW5jdGlvbihlKXtyZXR1cm4gQy4kPT09UyYmKEMuJD1RdCksZSYmQy5qUXVlcnk9PT1TJiYoQy5qUXVlcnk9WXQpLFN9LCJ1bmRlZmluZWQiPT10eXBlb2YgZSYmKEMualF1ZXJ5PUMuJD1TKSxTfSk7Cg=="></script>
      <link href="data:text/css,%2Econtainer%2Dfluid%2Ecrosstalk%2Dbscols%7Bmargin%2Dleft%3A%2D30px%3Bmargin%2Dright%3A%2D30px%3Bwhite%2Dspace%3Anormal%7Dbody%3E%2Econtainer%2Dfluid%2Ecrosstalk%2Dbscols%7Bmargin%2Dleft%3Aauto%3Bmargin%2Dright%3Aauto%7D%2Ecrosstalk%2Dinput%2Dcheckboxgroup%20%2Ecrosstalk%2Doptions%2Dgroup%20%2Ecrosstalk%2Doptions%2Dcolumn%7Bdisplay%3Ainline%2Dblock%3Bpadding%2Dright%3A12px%3Bvertical%2Dalign%3Atop%7D%40media%20only%20screen%20and%20%28max%2Dwidth%3A%20480px%29%7B%2Ecrosstalk%2Dinput%2Dcheckboxgroup%20%2Ecrosstalk%2Doptions%2Dgroup%20%2Ecrosstalk%2Doptions%2Dcolumn%7Bdisplay%3Ablock%3Bpadding%2Dright%3Ainherit%7D%7D%2Ecrosstalk%2Dinput%7Bmargin%2Dbottom%3A15px%7D%2Ecrosstalk%2Dinput%20%2Econtrol%2Dlabel%7Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Ecrosstalk%2Dinput%20input%5Btype%3D%22checkbox%22%5D%7Bmargin%3A4px%200%200%3Bmargin%2Dtop%3A1px%3Bline%2Dheight%3Anormal%7D%2Ecrosstalk%2Dinput%20%2Echeckbox%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bmargin%2Dtop%3A10px%3Bmargin%2Dbottom%3A10px%7D%2Ecrosstalk%2Dinput%20%2Echeckbox%3Elabel%7Bpadding%2Dleft%3A20px%3Bmargin%2Dbottom%3A0%3Bfont%2Dweight%3A400%3Bcursor%3Apointer%7D%2Ecrosstalk%2Dinput%20%2Echeckbox%20input%5Btype%3D%22checkbox%22%5D%2C%2Ecrosstalk%2Dinput%20%2Echeckbox%2Dinline%20input%5Btype%3D%22checkbox%22%5D%7Bposition%3Aabsolute%3Bmargin%2Dtop%3A2px%3Bmargin%2Dleft%3A%2D20px%7D%2Ecrosstalk%2Dinput%20%2Echeckbox%2B%2Echeckbox%7Bmargin%2Dtop%3A%2D5px%7D%2Ecrosstalk%2Dinput%20%2Echeckbox%2Dinline%7Bposition%3Arelative%3Bdisplay%3Ainline%2Dblock%3Bpadding%2Dleft%3A20px%3Bmargin%2Dbottom%3A0%3Bfont%2Dweight%3A400%3Bvertical%2Dalign%3Amiddle%3Bcursor%3Apointer%7D%2Ecrosstalk%2Dinput%20%2Echeckbox%2Dinline%2B%2Echeckbox%2Dinline%7Bmargin%2Dtop%3A0%3Bmargin%2Dleft%3A10px%7D%0A" rel="stylesheet" />
      <script src="data:application/javascript;base64,IWZ1bmN0aW9uIG8odSxhLGwpe2Z1bmN0aW9uIHMobixlKXtpZighYVtuXSl7aWYoIXVbbl0pe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFlJiZ0KXJldHVybiB0KG4sITApO2lmKGYpcmV0dXJuIGYobiwhMCk7dmFyIHI9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbisiJyIpO3Rocm93IHIuY29kZT0iTU9EVUxFX05PVF9GT1VORCIscn12YXIgaT1hW25dPXtleHBvcnRzOnt9fTt1W25dWzBdLmNhbGwoaS5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciB0PXVbbl1bMV1bZV07cmV0dXJuIHModHx8ZSl9LGksaS5leHBvcnRzLG8sdSxhLGwpfXJldHVybiBhW25dLmV4cG9ydHN9Zm9yKHZhciBmPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGU9MDtlPGwubGVuZ3RoO2UrKylzKGxbZV0pO3JldHVybiBzfSh7MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmcihlLnByb3RvdHlwZSx0KSxuJiZyKGUsbiksZX19KCk7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5fdHlwZXM9e30sdGhpcy5fc2VxPTB9cmV0dXJuIHIoZSxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fdHlwZXNbZV07bnx8KG49dGhpcy5fdHlwZXNbZV09e30pO3ZhciByPSJzdWIiK3RoaXMuX3NlcSsrO3JldHVybiBuW3JdPXQscn19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl90eXBlc1tlXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdCl7Zm9yKHZhciByIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShyKSYmbltyXT09PXQpcmV0dXJuIGRlbGV0ZSBuW3JdLHI7cmV0dXJuITF9aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiEoIW58fCFuW3RdKSYmKGRlbGV0ZSBuW3RdLHQpO3Rocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCB0eXBlIGZvciBsaXN0ZW5lciIpfX0se2tleToidHJpZ2dlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX3R5cGVzW2VdO2Zvcih2YXIgaSBpbiByKXIuaGFzT3duUHJvcGVydHkoaSkmJnJbaV0uY2FsbChuLHQpfX1dKSxlfSgpO24uZGVmYXVsdD1pfSx7fV0sMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbi5GaWx0ZXJIYW5kbGU9dm9pZCAwO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQmJnIoZS5wcm90b3R5cGUsdCksbiYmcihlLG4pLGV9fSgpLGk9bChlKCIuL2V2ZW50cyIpKSxvPWwoZSgiLi9maWx0ZXJzZXQiKSksdT1sKGUoIi4vZ3JvdXAiKSksYT1mdW5jdGlvbihlKXt7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fX0oZSgiLi91dGlsIikpO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBzPTE7bi5GaWx0ZXJIYW5kbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKGUsdCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsbiksdGhpcy5fZXZlbnRSZWxheT1uZXcgaS5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IGEuU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX2ZpbHRlclNldD1udWxsLHRoaXMuX2ZpbHRlclZhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPWEuZXh0ZW5kKHtzZW5kZXI6dGhpc30sdCksdGhpcy5faWQ9ImZpbHRlciIrcysrLHRoaXMuc2V0R3JvdXAoZSl9cmV0dXJuIHIobixbe2tleToic2V0R3JvdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzO2lmKHRoaXMuX2dyb3VwIT09ZSYmKCh0aGlzLl9ncm91cHx8ZSkmJih0aGlzLl9maWx0ZXJWYXImJih0aGlzLl9maWx0ZXJWYXIub2ZmKCJjaGFuZ2UiLHRoaXMuX3Zhck9uQ2hhbmdlU3ViKSx0aGlzLmNsZWFyKCksdGhpcy5fdmFyT25DaGFuZ2VTdWI9bnVsbCx0aGlzLl9maWx0ZXJWYXI9bnVsbCx0aGlzLl9maWx0ZXJTZXQ9bnVsbCksdGhpcy5fZ3JvdXA9ZSkpKXtlPSgwLHUuZGVmYXVsdCkoZSksdGhpcy5fZmlsdGVyU2V0PSh0PWUudmFyKCJmaWx0ZXJzZXQiKSwobj10LmdldCgpKXx8KG49bmV3IG8uZGVmYXVsdCx0LnNldChuKSksbiksdGhpcy5fZmlsdGVyVmFyPSgwLHUuZGVmYXVsdCkoZSkudmFyKCJmaWx0ZXIiKTt2YXIgaT10aGlzLl9maWx0ZXJWYXIub24oImNoYW5nZSIsZnVuY3Rpb24oZSl7ci5fZXZlbnRSZWxheS50cmlnZ2VyKCJjaGFuZ2UiLGUscil9KTt0aGlzLl92YXJPbkNoYW5nZVN1Yj1pfX19LHtrZXk6Il9tZXJnZUV4dHJhSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGEuZXh0ZW5kKHt9LHRoaXMuX2V4dHJhSW5mbz90aGlzLl9leHRyYUluZm86bnVsbCxlfHxudWxsKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5jbGVhcigpLHRoaXMuc2V0R3JvdXAobnVsbCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LmNsZWFyKHRoaXMuX2lkKSx0aGlzLl9vbkNoYW5nZShlKSl9fSx7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LnVwZGF0ZSh0aGlzLl9pZCxlKSx0aGlzLl9vbkNoYW5nZSh0KSl9fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vbihlLHQpfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9lbWl0dGVyLm9mZihlLHQpfX0se2tleToiX29uQ2hhbmdlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9maWx0ZXJTZXQmJnRoaXMuX2ZpbHRlclZhci5zZXQodGhpcy5fZmlsdGVyU2V0LnZhbHVlLHRoaXMuX21lcmdlRXh0cmFJbmZvKGUpKX19LHtrZXk6ImZpbHRlcmVkS2V5cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbHRlclNldD90aGlzLl9maWx0ZXJTZXQudmFsdWU6bnVsbH19XSksbn0oKX0seyIuL2V2ZW50cyI6MSwiLi9maWx0ZXJzZXQiOjMsIi4vZ3JvdXAiOjQsIi4vdXRpbCI6MTF9XSwzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxhPWUoIi4vdXRpbCIpO2Z1bmN0aW9uIGwoZSx0KXtyZXR1cm4gZT09PXQ/MDplPHQ/LTE6dDxlPzE6dm9pZCAwfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMucmVzZXQoKX1yZXR1cm4gcihlLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9oYW5kbGVzPXt9LHRoaXMuX2tleXM9e30sdGhpcy5fdmFsdWU9bnVsbCx0aGlzLl9hY3RpdmVIYW5kbGVzPTB9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7bnVsbCE9PXQmJih0PXQuc2xpY2UoMCkpLnNvcnQobCk7dmFyIG49KDAsYS5kaWZmU29ydGVkTGlzdHMpKHRoaXMuX2hhbmRsZXNbZV0sdCkscj1uLmFkZGVkLGk9bi5yZW1vdmVkO3RoaXMuX2hhbmRsZXNbZV09dDtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl0aGlzLl9rZXlzW3Jbb11dPSh0aGlzLl9rZXlzW3Jbb11dfHwwKSsxO2Zvcih2YXIgdT0wO3U8aS5sZW5ndGg7dSsrKXRoaXMuX2tleXNbaVt1XV0tLTt0aGlzLl91cGRhdGVWYWx1ZSh0KX19LHtrZXk6Il91cGRhdGVWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5fYWxsS2V5cyx0PU9iamVjdC5rZXlzKHRoaXMuX2hhbmRsZXMpLmxlbmd0aDtpZigwPT09dCl0aGlzLl92YWx1ZT1udWxsO2Vsc2V7dGhpcy5fdmFsdWU9W107Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3RoaXMuX2tleXNbZVtuXV09PT10JiZ0aGlzLl92YWx1ZS5wdXNoKGVbbl0pfX19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09dGhpcy5faGFuZGxlc1tlXSl7dmFyIHQ9dGhpcy5faGFuZGxlc1tlXTt0fHwodD1bXSk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdGhpcy5fa2V5c1t0W25dXS0tO2RlbGV0ZSB0aGlzLl9oYW5kbGVzW2VdLHRoaXMuX3VwZGF0ZVZhbHVlKCl9fX0se2tleToidmFsdWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZX19LHtrZXk6Il9hbGxLZXlzIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Qua2V5cyh0aGlzLl9rZXlzKTtyZXR1cm4gZS5zb3J0KGwpLGV9fV0pLGV9KCk7bi5kZWZhdWx0PWl9LHsiLi91dGlsIjoxMX1dLDQ6W2Z1bmN0aW9uKGwsZSxzKXsoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxyPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTtzLmRlZmF1bHQ9ZnVuY3Rpb24gZSh0KXt7aWYodCYmInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB1Lmhhc093blByb3BlcnR5KHQpfHwodVt0XT1uZXcgYSh0KSksdVt0XTtpZigib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOnIodCkpJiZ0Ll92YXJzJiZ0LnZhcilyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpJiYxPT10Lmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiB0WzBdKXJldHVybiBlKHRbMF0pO3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBncm91cE5hbWUgYXJndW1lbnQiKX19O3ZhciB0LGk9bCgiLi92YXIiKSxvPSh0PWkpJiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fTtlLl9fY3Jvc3N0YWxrX2dyb3Vwcz1lLl9fY3Jvc3N0YWxrX2dyb3Vwc3x8e307dmFyIHU9ZS5fX2Nyb3NzdGFsa19ncm91cHM7dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMubmFtZT1lLHRoaXMuX3ZhcnM9e319cmV0dXJuIG4odCxbe2tleToidmFyIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YXIgbmFtZSIpO3JldHVybiB0aGlzLl92YXJzLmhhc093blByb3BlcnR5KGUpfHwodGhpcy5fdmFyc1tlXT1uZXcgby5kZWZhdWx0KHRoaXMsZSkpLHRoaXMuX3ZhcnNbZV19fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhciBuYW1lIik7cmV0dXJuIHRoaXMuX3ZhcnMuaGFzT3duUHJvcGVydHkoZSl9fV0pLHR9KCl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi92YXIiOjEyfV0sNTpbZnVuY3Rpb24oZixlLGMpeyhmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB0LG49ZigiLi9ncm91cCIpLHI9KHQ9bikmJnQuX19lc01vZHVsZT90OntkZWZhdWx0OnR9LGk9ZigiLi9zZWxlY3Rpb24iKSxvPWYoIi4vZmlsdGVyIiksdT1mKCIuL2lucHV0Iik7ZigiLi9pbnB1dF9zZWxlY3RpemUiKSxmKCIuL2lucHV0X2NoZWNrYm94Z3JvdXAiKSxmKCIuL2lucHV0X3NsaWRlciIpO3ZhciBhPSgwLHIuZGVmYXVsdCkoImRlZmF1bHQiKTtmdW5jdGlvbiBsKGUpe3JldHVybiBhLnZhcihlKX1lLlNoaW55JiZlLlNoaW55LmFkZEN1c3RvbU1lc3NhZ2VIYW5kbGVyKCJ1cGRhdGUtY2xpZW50LXZhbHVlIixmdW5jdGlvbihlKXsic3RyaW5nIj09dHlwZW9mIGUuZ3JvdXA/KDAsci5kZWZhdWx0KShlLmdyb3VwKS52YXIoZS5uYW1lKS5zZXQoZS52YWx1ZSk6bChlLm5hbWUpLnNldChlLnZhbHVlKX0pO3ZhciBzPXtncm91cDpyLmRlZmF1bHQsdmFyOmwsaGFzOmZ1bmN0aW9uKGUpe3JldHVybiBhLmhhcyhlKX0sU2VsZWN0aW9uSGFuZGxlOmkuU2VsZWN0aW9uSGFuZGxlLEZpbHRlckhhbmRsZTpvLkZpbHRlckhhbmRsZSxiaW5kOnUuYmluZH07Yy5kZWZhdWx0PXMsZS5jcm9zc3RhbGs9c30pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2ZpbHRlciI6MiwiLi9ncm91cCI6NCwiLi9pbnB1dCI6NiwiLi9pbnB1dF9jaGVja2JveGdyb3VwIjo3LCIuL2lucHV0X3NlbGVjdGl6ZSI6OCwiLi9pbnB1dF9zbGlkZXIiOjksIi4vc2VsZWN0aW9uIjoxMH1dLDY6W2Z1bmN0aW9uKGUsdCxhKXsoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxhLnJlZ2lzdGVyPWZ1bmN0aW9uKGUpe3JbZS5jbGFzc05hbWVdPWUsdC5kb2N1bWVudCYmImNvbXBsZXRlIiE9PXQuZG9jdW1lbnQucmVhZHlTdGF0ZT9vKGZ1bmN0aW9uKCl7bigpfSk6dC5kb2N1bWVudCYmc2V0VGltZW91dChuLDEwMCl9LGEuYmluZD1uO3ZhciBvPXQualF1ZXJ5LHI9e307ZnVuY3Rpb24gbigpe09iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49cltlXTtvKCIuIituLmNsYXNzTmFtZSkubm90KCIuY3Jvc3N0YWxrLWlucHV0LWJvdW5kIikuZWFjaChmdW5jdGlvbihlLHQpe2kobix0KX0pfSl9ZnVuY3Rpb24gaShlLHQpe3ZhciBuPW8odCkuZmluZCgic2NyaXB0W3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXVtkYXRhLWZvcj0nIit0LmlkLnJlcGxhY2UoLyhbISIjJCUmJygpKissLi86Ozw9Pj9AW1xcXF1eYHt8fX5dKS9nLCJcXCQxIikrIiddIikscj1KU09OLnBhcnNlKG5bMF0uaW5uZXJUZXh0KSxpPWUuZmFjdG9yeSh0LHIpO28odCkuZGF0YSgiY3Jvc3N0YWxrLWluc3RhbmNlIixpKSxvKHQpLmFkZENsYXNzKCJjcm9zc3RhbGstaW5wdXQtYm91bmQiKX1pZih0LlNoaW55KXt2YXIgZT1uZXcgdC5TaGlueS5JbnB1dEJpbmRpbmcsdT10LmpRdWVyeTt1LmV4dGVuZChlLHtmaW5kOmZ1bmN0aW9uKGUpe3JldHVybiB1KGUpLmZpbmQoIi5jcm9zc3RhbGstaW5wdXQiKX0saW5pdGlhbGl6ZTpmdW5jdGlvbihlKXt2YXIgdCxuO3UoZSkuaGFzQ2xhc3MoImNyb3NzdGFsay1pbnB1dC1ib3VuZCIpfHwobj1vKHQ9ZSksT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihlKXtuLmhhc0NsYXNzKGUpJiYhbi5oYXNDbGFzcygiY3Jvc3N0YWxrLWlucHV0LWJvdW5kIikmJmkocltlXSx0KX0pKX0sZ2V0SWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWR9LGdldFZhbHVlOmZ1bmN0aW9uKGUpe30sc2V0VmFsdWU6ZnVuY3Rpb24oZSx0KXt9LHJlY2VpdmVNZXNzYWdlOmZ1bmN0aW9uKGUsdCl7fSxzdWJzY3JpYmU6ZnVuY3Rpb24oZSx0KXt1KGUpLmRhdGEoImNyb3NzdGFsay1pbnN0YW5jZSIpLnJlc3VtZSgpfSx1bnN1YnNjcmliZTpmdW5jdGlvbihlKXt1KGUpLmRhdGEoImNyb3NzdGFsay1pbnN0YW5jZSIpLnN1c3BlbmQoKX19KSx0LlNoaW55LmlucHV0QmluZGluZ3MucmVnaXN0ZXIoZSwiY3Jvc3N0YWxrLmlucHV0QmluZGluZyIpfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDc6W2Z1bmN0aW9uKHIsZSx0KXsoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKGUpe3tpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9fShyKCIuL2lucHV0IikpLG49cigiLi9maWx0ZXIiKTt2YXIgYT1lLmpRdWVyeTt0LnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1jaGVja2JveGdyb3VwIixmYWN0b3J5OmZ1bmN0aW9uKGUscil7dmFyIGk9bmV3IG4uRmlsdGVySGFuZGxlKHIuZ3JvdXApLG89dm9pZCAwLHU9YShlKTtyZXR1cm4gdS5vbigiY2hhbmdlIiwiaW5wdXRbdHlwZT0nY2hlY2tib3gnXSIsZnVuY3Rpb24oKXt2YXIgZT11LmZpbmQoImlucHV0W3R5cGU9J2NoZWNrYm94J106Y2hlY2tlZCIpO2lmKDA9PT1lLmxlbmd0aClvPW51bGwsaS5jbGVhcigpO2Vsc2V7dmFyIHQ9e307ZS5lYWNoKGZ1bmN0aW9uKCl7ci5tYXBbdGhpcy52YWx1ZV0uZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPSEwfSl9KTt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLnNvcnQoKSxvPW4saS5zZXQobil9fSkse3N1c3BlbmQ6ZnVuY3Rpb24oKXtpLmNsZWFyKCl9LHJlc3VtZTpmdW5jdGlvbigpe28mJmkuc2V0KG8pfX19fSl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9maWx0ZXIiOjIsIi4vaW5wdXQiOjZ9XSw4OltmdW5jdGlvbihyLGUsdCl7KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1uKHIoIi4vaW5wdXQiKSksbD1uKHIoIi4vdXRpbCIpKSxzPXIoIi4vZmlsdGVyIik7ZnVuY3Rpb24gbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9dmFyIGY9ZS5qUXVlcnk7dC5yZWdpc3Rlcih7Y2xhc3NOYW1lOiJjcm9zc3RhbGstaW5wdXQtc2VsZWN0IixmYWN0b3J5OmZ1bmN0aW9uKGUsbil7dmFyIHQ9bC5kYXRhZnJhbWVUb0QzKG4uaXRlbXMpLHI9e29wdGlvbnM6W3t2YWx1ZToiIixsYWJlbDoiKEFsbCkifV0uY29uY2F0KHQpLHZhbHVlRmllbGQ6InZhbHVlIixsYWJlbEZpZWxkOiJsYWJlbCIsc2VhcmNoRmllbGQ6ImxhYmVsIn0saT1mKGUpLmZpbmQoInNlbGVjdCIpWzBdLG89ZihpKS5zZWxlY3RpemUocilbMF0uc2VsZWN0aXplLHU9bmV3IHMuRmlsdGVySGFuZGxlKG4uZ3JvdXApLGE9dm9pZCAwO3JldHVybiBvLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7aWYoMD09PW8uaXRlbXMubGVuZ3RoKWE9bnVsbCx1LmNsZWFyKCk7ZWxzZXt2YXIgdD17fTtvLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oZSl7bi5tYXBbZV0uZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPSEwfSl9KTt2YXIgZT1PYmplY3Qua2V5cyh0KTtlLnNvcnQoKSxhPWUsdS5zZXQoZSl9fSkse3N1c3BlbmQ6ZnVuY3Rpb24oKXt1LmNsZWFyKCl9LHJlc3VtZTpmdW5jdGlvbigpe2EmJnUuc2V0KGEpfX19fSl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9maWx0ZXIiOjIsIi4vaW5wdXQiOjYsIi4vdXRpbCI6MTF9XSw5OltmdW5jdGlvbihuLGUsdCl7KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1mdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGU7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKSlyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj1bXSxyPSEwLGk9ITEsbz12b2lkIDA7dHJ5e2Zvcih2YXIgdSxhPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEocj0odT1hLm5leHQoKSkuZG9uZSkmJihuLnB1c2godS52YWx1ZSksIXR8fG4ubGVuZ3RoIT09dCk7cj0hMCk7fWNhdGNoKGUpe2k9ITAsbz1lfWZpbmFsbHl7dHJ5eyFyJiZhLnJldHVybiYmYS5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgb319cmV0dXJuIG59KGUsdCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSx0PWZ1bmN0aW9uKGUpe3tpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9fShuKCIuL2lucHV0IikpLGE9bigiLi9maWx0ZXIiKTt2YXIgdj1lLmpRdWVyeSxwPWUuc3RyZnRpbWU7ZnVuY3Rpb24geShlLHQpe2Zvcih2YXIgbj1lLnRvU3RyaW5nKCk7bi5sZW5ndGg8dDspbj0iMCIrbjtyZXR1cm4gbn10LnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1zbGlkZXIiLGZhY3Rvcnk6ZnVuY3Rpb24oZSxsKXt2YXIgcz1uZXcgYS5GaWx0ZXJIYW5kbGUobC5ncm91cCksdD17fSxmPXYoZSkuZmluZCgiaW5wdXQiKSxuPWYuZGF0YSgiZGF0YS10eXBlIikscj1mLmRhdGEoInRpbWUtZm9ybWF0IiksaT1mLmRhdGEoInJvdW5kIiksbz12b2lkIDA7aWYoImRhdGUiPT09bilvPXAudXRjKCksdC5wcmV0dGlmeT1mdW5jdGlvbihlKXtyZXR1cm4gbyhyLG5ldyBEYXRlKGUpKX07ZWxzZSBpZigiZGF0ZXRpbWUiPT09bil7dmFyIHU9Zi5kYXRhKCJ0aW1lem9uZSIpO289dT9wLnRpbWV6b25lKHUpOnAsdC5wcmV0dGlmeT1mdW5jdGlvbihlKXtyZXR1cm4gbyhyLG5ldyBEYXRlKGUpKX19ZWxzZSJudW1iZXIiPT09biYmdm9pZCAwIT09aSYmKHQucHJldHRpZnk9ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5wb3coMTAsaSk7cmV0dXJuIE1hdGgucm91bmQoZSp0KS90fSk7ZnVuY3Rpb24gYygpe3ZhciBlPWYuZGF0YSgiaW9uUmFuZ2VTbGlkZXIiKS5yZXN1bHQsdD12b2lkIDAsbj1mLmRhdGEoImRhdGEtdHlwZSIpO3JldHVybiB0PSJkYXRlIj09PW4/ZnVuY3Rpb24oZSl7cmV0dXJuKHQ9bmV3IERhdGUoK2UpKWluc3RhbmNlb2YgRGF0ZT90LmdldFVUQ0Z1bGxZZWFyKCkrIi0iK3kodC5nZXRVVENNb250aCgpKzEsMikrIi0iK3kodC5nZXRVVENEYXRlKCksMik6bnVsbDt2YXIgdH06ImRhdGV0aW1lIj09PW4/ZnVuY3Rpb24oZSl7cmV0dXJuK2UvMWUzfTpmdW5jdGlvbihlKXtyZXR1cm4rZX0sImRvdWJsZSI9PT1mLmRhdGEoImlvblJhbmdlU2xpZGVyIikub3B0aW9ucy50eXBlP1t0KGUuZnJvbSksdChlLnRvKV06dChlLmZyb20pfWYuaW9uUmFuZ2VTbGlkZXIodCk7dmFyIGg9bnVsbDtyZXR1cm4gZi5vbigiY2hhbmdlLmNyb3NzdGFsa1NsaWRlcklucHV0IixmdW5jdGlvbihlKXtpZighZi5kYXRhKCJ1cGRhdGluZyIpJiYhZi5kYXRhKCJhbmltYXRpbmciKSl7Zm9yKHZhciB0PWMoKSxuPWQodCwyKSxyPW5bMF0saT1uWzFdLG89W10sdT0wO3U8bC52YWx1ZXMubGVuZ3RoO3UrKyl7dmFyIGE9bC52YWx1ZXNbdV07cjw9YSYmYTw9aSYmby5wdXNoKGwua2V5c1t1XSl9by5zb3J0KCkscy5zZXQobyksaD1vfX0pLHtzdXNwZW5kOmZ1bmN0aW9uKCl7cy5jbGVhcigpfSxyZXN1bWU6ZnVuY3Rpb24oKXtoJiZzLnNldChoKX19fX0pfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vZmlsdGVyIjoyLCIuL2lucHV0Ijo2fV0sMTA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4uU2VsZWN0aW9uSGFuZGxlPXZvaWQgMDt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxpPWEoZSgiLi9ldmVudHMiKSksbz1hKGUoIi4vZ3JvdXAiKSksdT1mdW5jdGlvbihlKXt7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fX0oZSgiLi91dGlsIikpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fW4uU2VsZWN0aW9uSGFuZGxlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBlPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHQ9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsbiksdGhpcy5fZXZlbnRSZWxheT1uZXcgaS5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IHUuU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX3Zhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPXUuZXh0ZW5kKHtzZW5kZXI6dGhpc30sdCksdGhpcy5zZXRHcm91cChlKX1yZXR1cm4gcihuLFt7a2V5OiJzZXRHcm91cCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLl9ncm91cCE9PWUmJih0aGlzLl9ncm91cHx8ZSkmJih0aGlzLl92YXImJih0aGlzLl92YXIub2ZmKCJjaGFuZ2UiLHRoaXMuX3Zhck9uQ2hhbmdlU3ViKSx0aGlzLl92YXI9bnVsbCx0aGlzLl92YXJPbkNoYW5nZVN1Yj1udWxsKSx0aGlzLl9ncm91cD1lKSl7dGhpcy5fdmFyPSgwLG8uZGVmYXVsdCkoZSkudmFyKCJzZWxlY3Rpb24iKTt2YXIgbj10aGlzLl92YXIub24oImNoYW5nZSIsZnVuY3Rpb24oZSl7dC5fZXZlbnRSZWxheS50cmlnZ2VyKCJjaGFuZ2UiLGUsdCl9KTt0aGlzLl92YXJPbkNoYW5nZVN1Yj1ufX19LHtrZXk6Il9tZXJnZUV4dHJhSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHUuZXh0ZW5kKHt9LHRoaXMuX2V4dHJhSW5mbz90aGlzLl9leHRyYUluZm86bnVsbCxlfHxudWxsKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl92YXImJnRoaXMuX3Zhci5zZXQoZSx0aGlzLl9tZXJnZUV4dHJhSW5mbyh0KSl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fdmFyJiZ0aGlzLnNldCh2b2lkIDAsdGhpcy5fbWVyZ2VFeHRyYUluZm8oZSkpfX0se2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2VtaXR0ZXIub24oZSx0KX19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vZmYoZSx0KX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5zZXRHcm91cChudWxsKX19LHtrZXk6InZhbHVlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFyP3RoaXMuX3Zhci5nZXQoKTpudWxsfX1dKSxufSgpfSx7Ii4vZXZlbnRzIjoxLCIuL2dyb3VwIjo0LCIuL3V0aWwiOjExfV0sMTE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQmJnIoZS5wcm90b3R5cGUsdCksbiYmcihlLG4pLGV9fSgpLGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9O2Z1bmN0aW9uIHUoZSl7Zm9yKHZhciB0PTE7dDxlLmxlbmd0aDt0KyspaWYoZVt0XTw9ZVt0LTFdKXRocm93IG5ldyBFcnJvcigiTGlzdCBpcyBub3Qgc29ydGVkIG9yIGNvbnRhaW5zIGR1cGxpY2F0ZSIpfW4uZXh0ZW5kPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkoMTx0P3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldO2lmKG51bGwhPW8pZm9yKHZhciB1IGluIG8pby5oYXNPd25Qcm9wZXJ0eSh1KSYmKGVbdV09b1t1XSl9cmV0dXJuIGV9LG4uY2hlY2tTb3J0ZWQ9dSxuLmRpZmZTb3J0ZWRMaXN0cz1mdW5jdGlvbihlLHQpe3ZhciBuPTAscj0wO2V8fChlPVtdKTt0fHwodD1bXSk7dmFyIGk9W10sbz1bXTt1KGUpLHUodCk7Zm9yKDtuPGUubGVuZ3RoJiZyPHQubGVuZ3RoOyllW25dPT09dFtyXT8obisrLHIrKyk6ZVtuXTx0W3JdP2kucHVzaChlW24rK10pOm8ucHVzaCh0W3IrK10pO248ZS5sZW5ndGgmJihpPWkuY29uY2F0KGUuc2xpY2UobikpKTtyPHQubGVuZ3RoJiYobz1vLmNvbmNhdCh0LnNsaWNlKHIpKSk7cmV0dXJue3JlbW92ZWQ6aSxhZGRlZDpvfX0sbi5kYXRhZnJhbWVUb0QzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49dm9pZCAwO2Zvcih2YXIgciBpbiBlKXtpZihlLmhhc093blByb3BlcnR5KHIpJiZ0LnB1c2gociksIm9iamVjdCIhPT1sKGVbcl0pfHx2b2lkIDA9PT1lW3JdLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkFsbCBmaWVsZHMgbXVzdCBiZSBhcnJheXMiKTtpZih2b2lkIDAhPT1uJiZuIT09ZVtyXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpO249ZVtyXS5sZW5ndGh9Zm9yKHZhciBpPVtdLG89dm9pZCAwLHU9MDt1PG47dSsrKXtvPXt9O2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKW9bdFthXV09ZVt0W2FdXVt1XTtpLnB1c2gobyl9cmV0dXJuIGl9O24uU3Vic2NyaXB0aW9uVHJhY2tlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5fZW1pdHRlcj1lLHRoaXMuX3N1YnM9e319cmV0dXJuIHIodCxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fZW1pdHRlci5vbihlLHQpO3JldHVybiB0aGlzLl9zdWJzW25dPWUsbn19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9lbWl0dGVyLm9mZihlLHQpO3JldHVybiBuJiZkZWxldGUgdGhpcy5fc3Vic1tuXSxufX0se2tleToicmVtb3ZlQWxsTGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj10aGlzLl9zdWJzO3RoaXMuX3N1YnM9e30sT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihlKXt0Ll9lbWl0dGVyLm9mZihuW2VdLGUpfSl9fV0pLHR9KCl9LHt9XSwxMjpbZnVuY3Rpb24oYSxlLGwpeyhmdW5jdGlvbihvKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBlLHU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmcihlLnByb3RvdHlwZSx0KSxuJiZyKGUsbiksZX19KCksbj1hKCIuL2V2ZW50cyIpLGk9KGU9bikmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9O3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsciksdGhpcy5fZ3JvdXA9ZSx0aGlzLl9uYW1lPXQsdGhpcy5fdmFsdWU9bix0aGlzLl9ldmVudHM9bmV3IGkuZGVmYXVsdH1yZXR1cm4gdChyLFt7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX0se2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKHRoaXMuX3ZhbHVlIT09ZSl7dmFyIG49dGhpcy5fdmFsdWU7dGhpcy5fdmFsdWU9ZTt2YXIgcj17fTtpZih0JiYib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOnUodCkpKWZvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihyW2ldPXRbaV0pO3Iub2xkVmFsdWU9bixyLnZhbHVlPWUsdGhpcy5fZXZlbnRzLnRyaWdnZXIoImNoYW5nZSIscix0aGlzKSxvLlNoaW55JiZvLlNoaW55Lm9uSW5wdXRDaGFuZ2UmJm8uU2hpbnkub25JbnB1dENoYW5nZSgiLmNsaWVudFZhbHVlLSIrKG51bGwhPT10aGlzLl9ncm91cC5uYW1lP3RoaXMuX2dyb3VwLm5hbWUrIi0iOiIiKSt0aGlzLl9uYW1lLHZvaWQgMD09PWU/bnVsbDplKX19fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZXZlbnRzLm9uKGUsdCl9fSx7a2V5OiJvZmYiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2V2ZW50cy5vZmYoZSx0KX19XSkscn0oKTtsLmRlZmF1bHQ9cn0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2V2ZW50cyI6MX1dfSx7fSxbNV0pOwovLyMgc291cmNlTWFwcGluZ1VSTD1jcm9zc3RhbGsubWluLmpzLm1hcA=="></script>
      <link href="data:text/css,%0Aslide%3Anot%28%2Ecurrent%29%20%2Eplotly%2Ehtml%2Dwidget%7B%0Adisplay%3A%20none%3B%0A%7D%0A" rel="stylesheet" />
      <script src="data:application/javascript;base64,LyoqCiogcGxvdGx5LmpzIHYyLjUuMQoqIENvcHlyaWdodCAyMDEyLTIwMjEsIFBsb3RseSwgSW5jLgoqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiovCiFmdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPXQoKTtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtdLHQpO2Vsc2V7KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcykuUGxvdGx5PXQoKX19KChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXtmdW5jdGlvbiBpKG8scyl7aWYoIXJbb10pe2lmKCFlW29dKXt2YXIgbD0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighcyYmbClyZXR1cm4gbChvLCEwKTtpZihhKXJldHVybiBhKG8sITApO3ZhciBjPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK28rIiciKTt0aHJvdyBjLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGN9dmFyIHU9cltvXT17ZXhwb3J0czp7fX07ZVtvXVswXS5jYWxsKHUuZXhwb3J0cywoZnVuY3Rpb24odCl7cmV0dXJuIGkoZVtvXVsxXVt0XXx8dCl9KSx1LHUuZXhwb3J0cyx0LGUscixuKX1yZXR1cm4gcltvXS5leHBvcnRzfWZvcih2YXIgYT0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxvPTA7bzxuLmxlbmd0aDtvKyspaShuW29dKTtyZXR1cm4gaX0oezE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc3JjL2xpYiIpLGk9eyJYLFggZGl2IjonZGlyZWN0aW9uOmx0cjtmb250LWZhbWlseToiT3BlbiBTYW5zIix2ZXJkYW5hLGFyaWFsLHNhbnMtc2VyaWY7bWFyZ2luOjA7cGFkZGluZzowOycsIlggaW5wdXQsWCBidXR0b24iOidmb250LWZhbWlseToiT3BlbiBTYW5zIix2ZXJkYW5hLGFyaWFsLHNhbnMtc2VyaWY7JywiWCBpbnB1dDpmb2N1cyxYIGJ1dHRvbjpmb2N1cyI6Im91dGxpbmU6bm9uZTsiLCJYIGEiOiJ0ZXh0LWRlY29yYXRpb246bm9uZTsiLCJYIGE6aG92ZXIiOiJ0ZXh0LWRlY29yYXRpb246bm9uZTsiLCJYIC5jcmlzcCI6InNoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzOyIsIlggLnVzZXItc2VsZWN0LW5vbmUiOiItd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lOy1vLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTsiLCJYIHN2ZyI6Im92ZXJmbG93OmhpZGRlbjsiLCJYIHN2ZyBhIjoiZmlsbDojNDQ3YWRiOyIsIlggc3ZnIGE6aG92ZXIiOiJmaWxsOiMzYzZkYzU7IiwiWCAubWFpbi1zdmciOiJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cG9pbnRlci1ldmVudHM6bm9uZTsiLCJYIC5tYWluLXN2ZyAuZHJhZ2xheWVyIjoicG9pbnRlci1ldmVudHM6YWxsOyIsIlggLmN1cnNvci1kZWZhdWx0IjoiY3Vyc29yOmRlZmF1bHQ7IiwiWCAuY3Vyc29yLXBvaW50ZXIiOiJjdXJzb3I6cG9pbnRlcjsiLCJYIC5jdXJzb3ItY3Jvc3NoYWlyIjoiY3Vyc29yOmNyb3NzaGFpcjsiLCJYIC5jdXJzb3ItbW92ZSI6ImN1cnNvcjptb3ZlOyIsIlggLmN1cnNvci1jb2wtcmVzaXplIjoiY3Vyc29yOmNvbC1yZXNpemU7IiwiWCAuY3Vyc29yLXJvdy1yZXNpemUiOiJjdXJzb3I6cm93LXJlc2l6ZTsiLCJYIC5jdXJzb3ItbnMtcmVzaXplIjoiY3Vyc29yOm5zLXJlc2l6ZTsiLCJYIC5jdXJzb3ItZXctcmVzaXplIjoiY3Vyc29yOmV3LXJlc2l6ZTsiLCJYIC5jdXJzb3Itc3ctcmVzaXplIjoiY3Vyc29yOnN3LXJlc2l6ZTsiLCJYIC5jdXJzb3Itcy1yZXNpemUiOiJjdXJzb3I6cy1yZXNpemU7IiwiWCAuY3Vyc29yLXNlLXJlc2l6ZSI6ImN1cnNvcjpzZS1yZXNpemU7IiwiWCAuY3Vyc29yLXctcmVzaXplIjoiY3Vyc29yOnctcmVzaXplOyIsIlggLmN1cnNvci1lLXJlc2l6ZSI6ImN1cnNvcjplLXJlc2l6ZTsiLCJYIC5jdXJzb3ItbnctcmVzaXplIjoiY3Vyc29yOm53LXJlc2l6ZTsiLCJYIC5jdXJzb3Itbi1yZXNpemUiOiJjdXJzb3I6bi1yZXNpemU7IiwiWCAuY3Vyc29yLW5lLXJlc2l6ZSI6ImN1cnNvcjpuZS1yZXNpemU7IiwiWCAuY3Vyc29yLWdyYWIiOiJjdXJzb3I6LXdlYmtpdC1ncmFiO2N1cnNvcjpncmFiOyIsIlggLm1vZGViYXIiOiJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MnB4O3JpZ2h0OjJweDsiLCJYIC5lYXNlLWJnIjoiLXdlYmtpdC10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjNzIGVhc2UgMHM7LW1vei10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjNzIGVhc2UgMHM7LW1zLXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuM3MgZWFzZSAwczstby10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjNzIGVhc2UgMHM7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4zcyBlYXNlIDBzOyIsIlggLm1vZGViYXItLWhvdmVyPjpub3QoLndhdGVybWFyaykiOiJvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGVhc2UgMHM7LW1vei10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGVhc2UgMHM7LW1zLXRyYW5zaXRpb246b3BhY2l0eSAuM3MgZWFzZSAwczstby10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGVhc2UgMHM7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBlYXNlIDBzOyIsIlg6aG92ZXIgLm1vZGViYXItLWhvdmVyIC5tb2RlYmFyLWdyb3VwIjoib3BhY2l0eToxOyIsIlggLm1vZGViYXItZ3JvdXAiOiJmbG9hdDpsZWZ0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nLWxlZnQ6OHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aGl0ZS1zcGFjZTpub3dyYXA7IiwiWCAubW9kZWJhci1idG4iOiJwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTZweDtwYWRkaW5nOjNweCA0cHg7aGVpZ2h0OjIycHg7Y3Vyc29yOnBvaW50ZXI7bGluZS1oZWlnaHQ6bm9ybWFsO2JveC1zaXppbmc6Ym9yZGVyLWJveDsiLCJYIC5tb2RlYmFyLWJ0biBzdmciOiJwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MnB4OyIsIlggLm1vZGViYXIudmVydGljYWwiOiJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtd3JhcDp3cmFwO2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQ7bWF4LWhlaWdodDoxMDAlOyIsIlggLm1vZGViYXIudmVydGljYWwgc3ZnIjoidG9wOi0xcHg7IiwiWCAubW9kZWJhci52ZXJ0aWNhbCAubW9kZWJhci1ncm91cCI6ImRpc3BsYXk6YmxvY2s7ZmxvYXQ6bm9uZTtwYWRkaW5nLWxlZnQ6MHB4O3BhZGRpbmctYm90dG9tOjhweDsiLCJYIC5tb2RlYmFyLnZlcnRpY2FsIC5tb2RlYmFyLWdyb3VwIC5tb2RlYmFyLWJ0biI6ImRpc3BsYXk6YmxvY2s7dGV4dC1hbGlnbjpjZW50ZXI7IiwiWCBbZGF0YS10aXRsZV06YmVmb3JlLFggW2RhdGEtdGl0bGVdOmFmdGVyIjoicG9zaXRpb246YWJzb2x1dGU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstby10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO2Rpc3BsYXk6bm9uZTtvcGFjaXR5OjA7ei1pbmRleDoxMDAxO3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjExMCU7cmlnaHQ6NTAlOyIsIlggW2RhdGEtdGl0bGVdOmhvdmVyOmJlZm9yZSxYIFtkYXRhLXRpdGxlXTpob3ZlcjphZnRlciI6ImRpc3BsYXk6YmxvY2s7b3BhY2l0eToxOyIsIlggW2RhdGEtdGl0bGVdOmJlZm9yZSI6J2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6NnB4IHNvbGlkIHRyYW5zcGFyZW50O3otaW5kZXg6MTAwMjttYXJnaW4tdG9wOi0xMnB4O2JvcmRlci1ib3R0b20tY29sb3I6IzY5NzM4YTttYXJnaW4tcmlnaHQ6LTZweDsnLCJYIFtkYXRhLXRpdGxlXTphZnRlciI6ImNvbnRlbnQ6YXR0cihkYXRhLXRpdGxlKTtiYWNrZ3JvdW5kOiM2OTczOGE7Y29sb3I6I2ZmZjtwYWRkaW5nOjhweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEycHg7d2hpdGUtc3BhY2U6bm93cmFwO21hcmdpbi1yaWdodDotMThweDtib3JkZXItcmFkaXVzOjJweDsiLCJYIC52ZXJ0aWNhbCBbZGF0YS10aXRsZV06YmVmb3JlLFggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTphZnRlciI6InRvcDowJTtyaWdodDoyMDAlOyIsIlggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTpiZWZvcmUiOiJib3JkZXI6NnB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0LWNvbG9yOiM2OTczOGE7bWFyZ2luLXRvcDo4cHg7bWFyZ2luLXJpZ2h0Oi0zMHB4OyIsIlggLnNlbGVjdC1vdXRsaW5lIjoiZmlsbDpub25lO3N0cm9rZS13aWR0aDoxO3NoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzOyIsIlggLnNlbGVjdC1vdXRsaW5lLTEiOiJzdHJva2U6I2ZmZjsiLCJYIC5zZWxlY3Qtb3V0bGluZS0yIjoic3Ryb2tlOiMwMDA7c3Ryb2tlLWRhc2hhcnJheToycHggMnB4OyIsWTonZm9udC1mYW1pbHk6Ik9wZW4gU2FucyIsdmVyZGFuYSxhcmlhbCxzYW5zLXNlcmlmO3Bvc2l0aW9uOmZpeGVkO3RvcDo1MHB4O3JpZ2h0OjIwcHg7ei1pbmRleDoxMDAwMDtmb250LXNpemU6MTBwdDttYXgtd2lkdGg6MTgwcHg7JywiWSBwIjoibWFyZ2luOjA7IiwiWSAubm90aWZpZXItbm90ZSI6Im1pbi13aWR0aDoxODBweDttYXgtd2lkdGg6MjUwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZmZmO3otaW5kZXg6MzAwMDttYXJnaW46MDtiYWNrZ3JvdW5kLWNvbG9yOiM4Yzk3YWY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE0MCwxNTEsMTc1LC45KTtjb2xvcjojZmZmO3BhZGRpbmc6MTBweDtvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7d29yZC13cmFwOmJyZWFrLXdvcmQ7LW1zLWh5cGhlbnM6YXV0bzstd2Via2l0LWh5cGhlbnM6YXV0bztoeXBoZW5zOmF1dG87IiwiWSAubm90aWZpZXItY2xvc2UiOiJjb2xvcjojZmZmO29wYWNpdHk6Ljg7ZmxvYXQ6cmlnaHQ7cGFkZGluZzowIDVweDtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6Ym9sZDtsaW5lLWhlaWdodDoyMHB4OyIsIlkgLm5vdGlmaWVyLWNsb3NlOmhvdmVyIjoiY29sb3I6IzQ0NDt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcjsifTtmb3IodmFyIGEgaW4gaSl7dmFyIG89YS5yZXBsYWNlKC9eLC8sIiAsIikucmVwbGFjZSgvWC9nLCIuanMtcGxvdGx5LXBsb3QgLnBsb3RseSIpLnJlcGxhY2UoL1kvZywiLnBsb3RseS1ub3RpZmllciIpO24uYWRkU3R5bGVSdWxlKG8saVthXSl9fSx7Ii4uL3NyYy9saWIiOjc3Nn1dLDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFuc2Zvcm1zL2FnZ3JlZ2F0ZSIpfSx7Ii4uL3NyYy90cmFuc2Zvcm1zL2FnZ3JlZ2F0ZSI6MTM3Mn1dLDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvYmFyIil9LHsiLi4vc3JjL3RyYWNlcy9iYXIiOjkyMn1dLDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvYmFycG9sYXIiKX0seyIuLi9zcmMvdHJhY2VzL2JhcnBvbGFyIjo5MzV9XSw1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2JveCIpfSx7Ii4uL3NyYy90cmFjZXMvYm94Ijo5NDV9XSw2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvY29tcG9uZW50cy9jYWxlbmRhcnMiKX0seyIuLi9zcmMvY29tcG9uZW50cy9jYWxlbmRhcnMiOjYzN31dLDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY2FuZGxlc3RpY2siKX0seyIuLi9zcmMvdHJhY2VzL2NhbmRsZXN0aWNrIjo5NTR9XSw4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NhcnBldCIpfSx7Ii4uL3NyYy90cmFjZXMvY2FycGV0Ijo5NzN9XSw5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGgiKX0seyIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGgiOjk4N31dLDEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGhtYXBib3giKX0seyIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGhtYXBib3giOjk5NH1dLDExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NvbmUiKX0seyIuLi9zcmMvdHJhY2VzL2NvbmUiOjFlM31dLDEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NvbnRvdXIiKX0seyIuLi9zcmMvdHJhY2VzL2NvbnRvdXIiOjEwMTV9XSwxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jb250b3VyY2FycGV0Iil9LHsiLi4vc3JjL3RyYWNlcy9jb250b3VyY2FycGV0IjoxMDI2fV0sMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy9jb3JlIil9LHsiLi4vc3JjL2NvcmUiOjc1NH1dLDE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2RlbnNpdHltYXBib3giKX0seyIuLi9zcmMvdHJhY2VzL2RlbnNpdHltYXBib3giOjEwMzR9XSwxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYW5zZm9ybXMvZmlsdGVyIil9LHsiLi4vc3JjL3RyYW5zZm9ybXMvZmlsdGVyIjoxMzczfV0sMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvZnVubmVsIil9LHsiLi4vc3JjL3RyYWNlcy9mdW5uZWwiOjEwNDR9XSwxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9mdW5uZWxhcmVhIil9LHsiLi4vc3JjL3RyYWNlcy9mdW5uZWxhcmVhIjoxMDUzfV0sMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFuc2Zvcm1zL2dyb3VwYnkiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9ncm91cGJ5IjoxMzc0fV0sMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGVhdG1hcCIpfSx7Ii4uL3NyYy90cmFjZXMvaGVhdG1hcCI6MTA2Nn1dLDIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2hlYXRtYXBnbCIpfSx7Ii4uL3NyYy90cmFjZXMvaGVhdG1hcGdsIjoxMDc2fV0sMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0iOjEwODh9XSwyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZCIpfSx7Ii4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmQiOjEwOTR9XSwyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZGNvbnRvdXIiKX0seyIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbTJkY29udG91ciI6MTA5OH1dLDI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2ljaWNsZSIpfSx7Ii4uL3NyYy90cmFjZXMvaWNpY2xlIjoxMTA0fV0sMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaW1hZ2UiKX0seyIuLi9zcmMvdHJhY2VzL2ltYWdlIjoxMTE3fV0sMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb3JlIik7bi5yZWdpc3RlcihbdCgiLi9iYXIiKSx0KCIuL2JveCIpLHQoIi4vaGVhdG1hcCIpLHQoIi4vaGlzdG9ncmFtIiksdCgiLi9oaXN0b2dyYW0yZCIpLHQoIi4vaGlzdG9ncmFtMmRjb250b3VyIiksdCgiLi9jb250b3VyIiksdCgiLi9zY2F0dGVydGVybmFyeSIpLHQoIi4vdmlvbGluIiksdCgiLi9mdW5uZWwiKSx0KCIuL3dhdGVyZmFsbCIpLHQoIi4vaW1hZ2UiKSx0KCIuL3BpZSIpLHQoIi4vc3VuYnVyc3QiKSx0KCIuL3RyZWVtYXAiKSx0KCIuL2ljaWNsZSIpLHQoIi4vZnVubmVsYXJlYSIpLHQoIi4vc2NhdHRlcjNkIiksdCgiLi9zdXJmYWNlIiksdCgiLi9pc29zdXJmYWNlIiksdCgiLi92b2x1bWUiKSx0KCIuL21lc2gzZCIpLHQoIi4vY29uZSIpLHQoIi4vc3RyZWFtdHViZSIpLHQoIi4vc2NhdHRlcmdlbyIpLHQoIi4vY2hvcm9wbGV0aCIpLHQoIi4vc2NhdHRlcmdsIiksdCgiLi9zcGxvbSIpLHQoIi4vcG9pbnRjbG91ZCIpLHQoIi4vaGVhdG1hcGdsIiksdCgiLi9wYXJjb29yZHMiKSx0KCIuL3BhcmNhdHMiKSx0KCIuL3NjYXR0ZXJtYXBib3giKSx0KCIuL2Nob3JvcGxldGhtYXBib3giKSx0KCIuL2RlbnNpdHltYXBib3giKSx0KCIuL3NhbmtleSIpLHQoIi4vaW5kaWNhdG9yIiksdCgiLi90YWJsZSIpLHQoIi4vY2FycGV0IiksdCgiLi9zY2F0dGVyY2FycGV0IiksdCgiLi9jb250b3VyY2FycGV0IiksdCgiLi9vaGxjIiksdCgiLi9jYW5kbGVzdGljayIpLHQoIi4vc2NhdHRlcnBvbGFyIiksdCgiLi9zY2F0dGVycG9sYXJnbCIpLHQoIi4vYmFycG9sYXIiKSx0KCIuL2FnZ3JlZ2F0ZSIpLHQoIi4vZmlsdGVyIiksdCgiLi9ncm91cGJ5IiksdCgiLi9zb3J0IiksdCgiLi9jYWxlbmRhcnMiKV0pLGUuZXhwb3J0cz1ufSx7Ii4vYWdncmVnYXRlIjoyLCIuL2JhciI6MywiLi9iYXJwb2xhciI6NCwiLi9ib3giOjUsIi4vY2FsZW5kYXJzIjo2LCIuL2NhbmRsZXN0aWNrIjo3LCIuL2NhcnBldCI6OCwiLi9jaG9yb3BsZXRoIjo5LCIuL2Nob3JvcGxldGhtYXBib3giOjEwLCIuL2NvbmUiOjExLCIuL2NvbnRvdXIiOjEyLCIuL2NvbnRvdXJjYXJwZXQiOjEzLCIuL2NvcmUiOjE0LCIuL2RlbnNpdHltYXBib3giOjE1LCIuL2ZpbHRlciI6MTYsIi4vZnVubmVsIjoxNywiLi9mdW5uZWxhcmVhIjoxOCwiLi9ncm91cGJ5IjoxOSwiLi9oZWF0bWFwIjoyMCwiLi9oZWF0bWFwZ2wiOjIxLCIuL2hpc3RvZ3JhbSI6MjIsIi4vaGlzdG9ncmFtMmQiOjIzLCIuL2hpc3RvZ3JhbTJkY29udG91ciI6MjQsIi4vaWNpY2xlIjoyNSwiLi9pbWFnZSI6MjYsIi4vaW5kaWNhdG9yIjoyOCwiLi9pc29zdXJmYWNlIjoyOSwiLi9tZXNoM2QiOjMwLCIuL29obGMiOjMxLCIuL3BhcmNhdHMiOjMyLCIuL3BhcmNvb3JkcyI6MzMsIi4vcGllIjozNCwiLi9wb2ludGNsb3VkIjozNSwiLi9zYW5rZXkiOjM2LCIuL3NjYXR0ZXIzZCI6MzcsIi4vc2NhdHRlcmNhcnBldCI6MzgsIi4vc2NhdHRlcmdlbyI6MzksIi4vc2NhdHRlcmdsIjo0MCwiLi9zY2F0dGVybWFwYm94Ijo0MSwiLi9zY2F0dGVycG9sYXIiOjQyLCIuL3NjYXR0ZXJwb2xhcmdsIjo0MywiLi9zY2F0dGVydGVybmFyeSI6NDQsIi4vc29ydCI6NDUsIi4vc3Bsb20iOjQ2LCIuL3N0cmVhbXR1YmUiOjQ3LCIuL3N1bmJ1cnN0Ijo0OCwiLi9zdXJmYWNlIjo0OSwiLi90YWJsZSI6NTAsIi4vdHJlZW1hcCI6NTEsIi4vdmlvbGluIjo1MiwiLi92b2x1bWUiOjUzLCIuL3dhdGVyZmFsbCI6NTR9XSwyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9pbmRpY2F0b3IiKX0seyIuLi9zcmMvdHJhY2VzL2luZGljYXRvciI6MTEyNX1dLDI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2lzb3N1cmZhY2UiKX0seyIuLi9zcmMvdHJhY2VzL2lzb3N1cmZhY2UiOjExMzF9XSwzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9tZXNoM2QiKX0seyIuLi9zcmMvdHJhY2VzL21lc2gzZCI6MTEzNn1dLDMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL29obGMiKX0seyIuLi9zcmMvdHJhY2VzL29obGMiOjExNDF9XSwzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9wYXJjYXRzIil9LHsiLi4vc3JjL3RyYWNlcy9wYXJjYXRzIjoxMTUwfV0sMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvcGFyY29vcmRzIil9LHsiLi4vc3JjL3RyYWNlcy9wYXJjb29yZHMiOjExNjB9XSwzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9waWUiKX0seyIuLi9zcmMvdHJhY2VzL3BpZSI6MTE3MX1dLDM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3BvaW50Y2xvdWQiKX0seyIuLi9zcmMvdHJhY2VzL3BvaW50Y2xvdWQiOjExODB9XSwzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zYW5rZXkiKX0seyIuLi9zcmMvdHJhY2VzL3NhbmtleSI6MTE4Nn1dLDM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXIzZCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcjNkIjoxMjI0fV0sMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcmNhcnBldCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcmNhcnBldCI6MTIzMX1dLDM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnZW8iKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnZW8iOjEyMzl9XSw0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVyZ2wiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnbCI6MTI1Mn1dLDQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJtYXBib3giKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJtYXBib3giOjEyNjJ9XSw0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVycG9sYXIiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhciI6MTI3MH1dLDQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhcmdsIil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVycG9sYXJnbCI6MTI3N31dLDQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJ0ZXJuYXJ5Iil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVydGVybmFyeSI6MTI4NX1dLDQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhbnNmb3Jtcy9zb3J0Iil9LHsiLi4vc3JjL3RyYW5zZm9ybXMvc29ydCI6MTM3Nn1dLDQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NwbG9tIil9LHsiLi4vc3JjL3RyYWNlcy9zcGxvbSI6MTI5NH1dLDQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3N0cmVhbXR1YmUiKX0seyIuLi9zcmMvdHJhY2VzL3N0cmVhbXR1YmUiOjEzMDJ9XSw0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zdW5idXJzdCIpfSx7Ii4uL3NyYy90cmFjZXMvc3VuYnVyc3QiOjEzMTB9XSw0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zdXJmYWNlIil9LHsiLi4vc3JjL3RyYWNlcy9zdXJmYWNlIjoxMzE5fV0sNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvdGFibGUiKX0seyIuLi9zcmMvdHJhY2VzL3RhYmxlIjoxMzI3fV0sNTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvdHJlZW1hcCIpfSx7Ii4uL3NyYy90cmFjZXMvdHJlZW1hcCI6MTMzOH1dLDUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3Zpb2xpbiIpfSx7Ii4uL3NyYy90cmFjZXMvdmlvbGluIjoxMzUxfV0sNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvdm9sdW1lIil9LHsiLi4vc3JjL3RyYWNlcy92b2x1bWUiOjEzNTl9XSw1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy93YXRlcmZhbGwiKX0seyIuLi9zcmMvdHJhY2VzL3dhdGVyZmFsbCI6MTM2N31dLDU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuZXllfHxbMCwwLDFdLHI9dC5jZW50ZXJ8fFswLDAsMF0scz10LnVwfHxbMCwxLDBdLGw9dC5kaXN0YW5jZUxpbWl0c3x8WzAsMS8wXSxjPXQubW9kZXx8InR1cm50YWJsZSIsdT1uKCksZj1pKCksaD1hKCk7cmV0dXJuIHUuc2V0RGlzdGFuY2VMaW1pdHMobFswXSxsWzFdKSx1Lmxvb2tBdCgwLGUscixzKSxmLnNldERpc3RhbmNlTGltaXRzKGxbMF0sbFsxXSksZi5sb29rQXQoMCxlLHIscyksaC5zZXREaXN0YW5jZUxpbWl0cyhsWzBdLGxbMV0pLGgubG9va0F0KDAsZSxyLHMpLG5ldyBvKHt0dXJudGFibGU6dSxvcmJpdDpmLG1hdHJpeDpofSxjKX07dmFyIG49dCgidHVybnRhYmxlLWNhbWVyYS1jb250cm9sbGVyIiksaT10KCJvcmJpdC1jYW1lcmEtY29udHJvbGxlciIpLGE9dCgibWF0cml4LWNhbWVyYS1jb250cm9sbGVyIik7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuX2NvbnRyb2xsZXJOYW1lcz1PYmplY3Qua2V5cyh0KSx0aGlzLl9jb250cm9sbGVyTGlzdD10aGlzLl9jb250cm9sbGVyTmFtZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKSx0aGlzLl9tb2RlPWUsdGhpcy5fYWN0aXZlPXRbZV0sdGhpcy5fYWN0aXZlfHwodGhpcy5fbW9kZT0idHVybnRhYmxlIix0aGlzLl9hY3RpdmU9dC50dXJudGFibGUpLHRoaXMubW9kZXM9dGhpcy5fY29udHJvbGxlck5hbWVzLHRoaXMuY29tcHV0ZWRNYXRyaXg9dGhpcy5fYWN0aXZlLmNvbXB1dGVkTWF0cml4LHRoaXMuY29tcHV0ZWRFeWU9dGhpcy5fYWN0aXZlLmNvbXB1dGVkRXllLHRoaXMuY29tcHV0ZWRVcD10aGlzLl9hY3RpdmUuY29tcHV0ZWRVcCx0aGlzLmNvbXB1dGVkQ2VudGVyPXRoaXMuX2FjdGl2ZS5jb21wdXRlZENlbnRlcix0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFJhZGl1c312YXIgcz1vLnByb3RvdHlwZTtzLmZsdXNoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb250cm9sbGVyTGlzdCxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5mbHVzaCh0KX0scy5pZGxlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb250cm9sbGVyTGlzdCxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5pZGxlKHQpfSxzLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dGhpcy5fY29udHJvbGxlckxpc3QsYT0wO2E8aS5sZW5ndGg7KythKWlbYV0ubG9va0F0KHQsZSxyLG4pfSxzLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dGhpcy5fY29udHJvbGxlckxpc3QsYT0wO2E8aS5sZW5ndGg7KythKWlbYV0ucm90YXRlKHQsZSxyLG4pfSxzLnBhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dGhpcy5fY29udHJvbGxlckxpc3QsYT0wO2E8aS5sZW5ndGg7KythKWlbYV0ucGFuKHQsZSxyLG4pfSxzLnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dGhpcy5fY29udHJvbGxlckxpc3QsYT0wO2E8aS5sZW5ndGg7KythKWlbYV0udHJhbnNsYXRlKHQsZSxyLG4pfSxzLnNldE1hdHJpeD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLl9jb250cm9sbGVyTGlzdCxuPTA7bjxyLmxlbmd0aDsrK24pcltuXS5zZXRNYXRyaXgodCxlKX0scy5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLl9jb250cm9sbGVyTGlzdCxuPTA7bjxyLmxlbmd0aDsrK24pcltuXS5zZXREaXN0YW5jZUxpbWl0cyh0LGUpfSxzLnNldERpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX2NvbnRyb2xsZXJMaXN0LG49MDtuPHIubGVuZ3RoOysrbilyW25dLnNldERpc3RhbmNlKHQsZSl9LHMucmVjYWxjTWF0cml4PWZ1bmN0aW9uKHQpe3RoaXMuX2FjdGl2ZS5yZWNhbGNNYXRyaXgodCl9LHMuZ2V0RGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FjdGl2ZS5nZXREaXN0YW5jZSh0KX0scy5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWN0aXZlLmdldERpc3RhbmNlTGltaXRzKHQpfSxzLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZS5sYXN0VCgpfSxzLnNldE1vZGU9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuX21vZGUpe3ZhciBlPXRoaXMuX2NvbnRyb2xsZXJOYW1lcy5pbmRleE9mKHQpO2lmKCEoZTwwKSl7dmFyIHI9dGhpcy5fYWN0aXZlLG49dGhpcy5fY29udHJvbGxlckxpc3RbZV0saT1NYXRoLm1heChyLmxhc3RUKCksbi5sYXN0VCgpKTtyLnJlY2FsY01hdHJpeChpKSxuLnNldE1hdHJpeChpLHIuY29tcHV0ZWRNYXRyaXgpLHRoaXMuX2FjdGl2ZT1uLHRoaXMuX21vZGU9dCx0aGlzLmNvbXB1dGVkTWF0cml4PXRoaXMuX2FjdGl2ZS5jb21wdXRlZE1hdHJpeCx0aGlzLmNvbXB1dGVkRXllPXRoaXMuX2FjdGl2ZS5jb21wdXRlZEV5ZSx0aGlzLmNvbXB1dGVkVXA9dGhpcy5fYWN0aXZlLmNvbXB1dGVkVXAsdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLl9hY3RpdmUuY29tcHV0ZWRDZW50ZXIsdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLl9hY3RpdmUuY29tcHV0ZWRSYWRpdXN9fX0scy5nZXRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZGV9fSx7Im1hdHJpeC1jYW1lcmEtY29udHJvbGxlciI6NDQ3LCJvcmJpdC1jYW1lcmEtY29udHJvbGxlciI6NDY4LCJ0dXJudGFibGUtY2FtZXJhLWNvbnRyb2xsZXIiOjU3Nn1dLDU2OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKG4saSl7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP2kocix0KCJkMy1hcnJheSIpLHQoImQzLWNvbGxlY3Rpb24iKSx0KCJkMy1zaGFwZSIpLHQoImVsZW1lbnRhcnktY2lyY3VpdHMtZGlyZWN0ZWQtZ3JhcGgiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyxuLmQzLG51bGwpfSh0aGlzLChmdW5jdGlvbih0LGUscixuLGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKHQpe3JldHVybiB0LnRhcmdldC5kZXB0aH1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQuc291cmNlTGlua3MubGVuZ3RoP3QuZGVwdGg6ZS0xfWZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWk9aSYmaS5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdCIpP2kuZGVmYXVsdDppO3ZhciBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fTtmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIGYodC5zb3VyY2UsZS5zb3VyY2UpfHx0LmluZGV4LWUuaW5kZXh9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBmKHQudGFyZ2V0LGUudGFyZ2V0KXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdC5wYXJ0T2ZDeWNsZT09PWUucGFydE9mQ3ljbGU/dC55MC1lLnkwOiJ0b3AiPT09dC5jaXJjdWxhckxpbmtUeXBlfHwiYm90dG9tIj09PWUuY2lyY3VsYXJMaW5rVHlwZT8tMToxfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQudmFsdWV9ZnVuY3Rpb24gcCh0KXtyZXR1cm4odC55MCt0LnkxKS8yfWZ1bmN0aW9uIGQodCl7cmV0dXJuIHAodC5zb3VyY2UpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIHAodC50YXJnZXQpfWZ1bmN0aW9uIGcodCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdC5ub2Rlc31mdW5jdGlvbiB5KHQpe3JldHVybiB0LmxpbmtzfWZ1bmN0aW9uIHgodCxlKXt2YXIgcj10LmdldChlKTtpZighcil0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYih0LGUpe3JldHVybiBlKHQpfWZ1bmN0aW9uIF8odCxlLHIpe3ZhciBuPTA7aWYobnVsbD09PXIpe2Zvcih2YXIgYT1bXSxvPTA7bzx0LmxpbmtzLmxlbmd0aDtvKyspe3ZhciBzPXQubGlua3Nbb10sbD1zLnNvdXJjZS5pbmRleCxjPXMudGFyZ2V0LmluZGV4O2FbbF18fChhW2xdPVtdKSxhW2NdfHwoYVtjXT1bXSksLTE9PT1hW2xdLmluZGV4T2YoYykmJmFbbF0ucHVzaChjKX12YXIgdT1pKGEpO3Uuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGgtZS5sZW5ndGh9KSk7dmFyIGY9e307Zm9yKG89MDtvPHUubGVuZ3RoO28rKyl7dmFyIGg9dVtvXS5zbGljZSgtMik7ZltoWzBdXXx8KGZbaFswXV09e30pLGZbaFswXV1baFsxXV09ITB9dC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnRhcmdldC5pbmRleCxyPXQuc291cmNlLmluZGV4O2U9PT1yfHxmW3JdJiZmW3JdW2VdPyh0LmNpcmN1bGFyPSEwLHQuY2lyY3VsYXJMaW5rSUQ9bixuKz0xKTp0LmNpcmN1bGFyPSExfSkpfWVsc2UgdC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnNvdXJjZVtyXTx0LnRhcmdldFtyXT90LmNpcmN1bGFyPSExOih0LmNpcmN1bGFyPSEwLHQuY2lyY3VsYXJMaW5rSUQ9bixuKz0xKX0pKX1mdW5jdGlvbiB3KHQsZSl7dmFyIHI9MCxuPTA7dC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbihpKXtpLmNpcmN1bGFyJiYoaS5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZXx8aS50YXJnZXQuY2lyY3VsYXJMaW5rVHlwZT9pLmNpcmN1bGFyTGlua1R5cGU9aS5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZT9pLnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlOmkudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGU6aS5jaXJjdWxhckxpbmtUeXBlPXI8bj8idG9wIjoiYm90dG9tIiwidG9wIj09aS5jaXJjdWxhckxpbmtUeXBlP3IrPTE6bis9MSx0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2IodCxlKSE9YihpLnNvdXJjZSxlKSYmYih0LGUpIT1iKGkudGFyZ2V0LGUpfHwodC5jaXJjdWxhckxpbmtUeXBlPWkuY2lyY3VsYXJMaW5rVHlwZSl9KSkpfSkpLHQubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jaXJjdWxhciYmKHQuc291cmNlLmNpcmN1bGFyTGlua1R5cGU9PXQudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGUmJih0LmNpcmN1bGFyTGlua1R5cGU9dC5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZSkscSh0LGUpJiYodC5jaXJjdWxhckxpbmtUeXBlPXQuc291cmNlLmNpcmN1bGFyTGlua1R5cGUpKX0pKX1mdW5jdGlvbiBUKHQpe3ZhciBlPU1hdGguYWJzKHQueTEtdC55MCkscj1NYXRoLmFicyh0LnRhcmdldC54MC10LnNvdXJjZS54MSk7cmV0dXJuIE1hdGguYXRhbihyL2UpfWZ1bmN0aW9uIGsodCxlKXt2YXIgcj0wO3Quc291cmNlTGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7cj10LmNpcmN1bGFyJiYhcSh0LGUpP3IrMTpyfSkpO3ZhciBuPTA7cmV0dXJuIHQudGFyZ2V0TGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7bj10LmNpcmN1bGFyJiYhcSh0LGUpP24rMTpufSkpLHIrbn1mdW5jdGlvbiBBKHQpe3ZhciBlPXQuc291cmNlLnNvdXJjZUxpbmtzLHI9MDtlLmZvckVhY2goKGZ1bmN0aW9uKHQpe3I9dC5jaXJjdWxhcj9yKzE6cn0pKTt2YXIgbj10LnRhcmdldC50YXJnZXRMaW5rcyxpPTA7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7aT10LmNpcmN1bGFyP2krMTppfSkpLCEocj4xfHxpPjEpfWZ1bmN0aW9uIE0odCxlLHIpe3JldHVybiB0LnNvcnQoRSksdC5mb3JFYWNoKChmdW5jdGlvbihuLGkpe3ZhciBhLG8scz0wO2lmKHEobixyKSYmQShuKSluLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXI9cytuLndpZHRoLzI7ZWxzZXtmb3IodmFyIGw9MDtsPGk7bCsrKWlmKGE9dFtpXSxvPXRbbF0sIShhLnNvdXJjZS5jb2x1bW48by50YXJnZXQuY29sdW1ufHxhLnRhcmdldC5jb2x1bW4+by5zb3VyY2UuY29sdW1uKSl7dmFyIGM9dFtsXS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyK3RbbF0ud2lkdGgvMitlO3M9Yz5zP2M6c31uLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXI9cytuLndpZHRoLzJ9fSkpLHR9ZnVuY3Rpb24gUyh0LHIsaSxhKXt2YXIgbz1lLm1pbih0LmxpbmtzLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zb3VyY2UueTB9KSk7dC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNpcmN1bGFyJiYodC5jaXJjdWxhclBhdGhEYXRhPXt9KX0pKSxNKHQubGlua3MuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4idG9wIj09dC5jaXJjdWxhckxpbmtUeXBlfSkpLHIsYSksTSh0LmxpbmtzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZX0pKSxyLGEpLHQubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoZS5jaXJjdWxhcil7aWYoZS5jaXJjdWxhclBhdGhEYXRhLmFyY1JhZGl1cz1lLndpZHRoKzEwLGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0Tm9kZUJ1ZmZlcj01LGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodE5vZGVCdWZmZXI9NSxlLmNpcmN1bGFyUGF0aERhdGEuc291cmNlV2lkdGg9ZS5zb3VyY2UueDEtZS5zb3VyY2UueDAsZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVg9ZS5zb3VyY2UueDArZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVdpZHRoLGUuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYPWUudGFyZ2V0LngwLGUuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZPWUueTAsZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFk9ZS55MSxxKGUsYSkmJkEoZSkpZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cz0xMCtlLndpZHRoLzIsZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cz0xMCtlLndpZHRoLzIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXM9MTArZS53aWR0aC8yLGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzPTEwK2Uud2lkdGgvMiwiYm90dG9tIj09ZS5jaXJjdWxhckxpbmtUeXBlPyhlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50PWUuc291cmNlLnkxKzI1K2UuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyk6KGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQ9ZS5zb3VyY2UueTAtMjUtZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2UuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2UuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKTtlbHNle3ZhciBzPWUuc291cmNlLmNvbHVtbixsPWUuY2lyY3VsYXJMaW5rVHlwZSxjPXQubGlua3MuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zb3VyY2UuY29sdW1uPT1zJiZ0LmNpcmN1bGFyTGlua1R5cGU9PWx9KSk7ImJvdHRvbSI9PWUuY2lyY3VsYXJMaW5rVHlwZT9jLnNvcnQoQyk6Yy5zb3J0KEwpO3ZhciB1PTA7Yy5mb3JFYWNoKChmdW5jdGlvbih0LG4pe3QuY2lyY3VsYXJMaW5rSUQ9PWUuY2lyY3VsYXJMaW5rSUQmJihlLmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzPTEwK2Uud2lkdGgvMit1LGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXM9MTArZS53aWR0aC8yK24qcit1KSx1Kz10LndpZHRofSkpLHM9ZS50YXJnZXQuY29sdW1uLGM9dC5saW5rcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldC5jb2x1bW49PXMmJnQuY2lyY3VsYXJMaW5rVHlwZT09bH0pKSwiYm90dG9tIj09ZS5jaXJjdWxhckxpbmtUeXBlP2Muc29ydChJKTpjLnNvcnQoUCksdT0wLGMuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXt0LmNpcmN1bGFyTGlua0lEPT1lLmNpcmN1bGFyTGlua0lEJiYoZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXM9MTArZS53aWR0aC8yK3UsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXM9MTArZS53aWR0aC8yK24qcit1KSx1Kz10LndpZHRofSkpLCJib3R0b20iPT1lLmNpcmN1bGFyTGlua1R5cGU/KGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQ9TWF0aC5tYXgoaSxlLnNvdXJjZS55MSxlLnRhcmdldC55MSkrMjUrZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50LWUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50LWUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKTooZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudD1vLTI1LWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtlLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyl9ZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEuc291cmNlWCtlLmNpcmN1bGFyUGF0aERhdGEubGVmdE5vZGVCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFgtZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0Tm9kZUJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cytlLmNpcmN1bGFyUGF0aERhdGEubGVmdE5vZGVCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cy1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHROb2RlQnVmZmVyfWlmKGUuY2lyY3VsYXIpZS5wYXRoPWZ1bmN0aW9uKHQpe3ZhciBlPSIiO2U9InRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8iTSIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzKyIgMCAwIDAgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQrIiAiKyh0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWS10LmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzKSsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50KyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cysiIDAgMCAwICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50KyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKyIgMCAwIDAgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50KyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudCsiICIrKHQuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZLXQuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzKSsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cysiIDAgMCAwICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFgrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZOiJNIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWSsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXMrIiAwIDAgMSAiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudCsiICIrKHQuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXMpKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRGdWxsRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzKyIgMCAwIDEgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50KyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrIiAwIDAgMSAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodEZ1bGxFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50KyIgIisodC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFkrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXMpKyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzKyIgMCAwIDEgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFkrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFk7cmV0dXJuIGV9KGUpO2Vsc2V7dmFyIGY9bi5saW5rSG9yaXpvbnRhbCgpLnNvdXJjZSgoZnVuY3Rpb24odCl7cmV0dXJuW3Quc291cmNlLngwKyh0LnNvdXJjZS54MS10LnNvdXJjZS54MCksdC55MF19KSkudGFyZ2V0KChmdW5jdGlvbih0KXtyZXR1cm5bdC50YXJnZXQueDAsdC55MV19KSk7ZS5wYXRoPWYoZSl9fSkpfWZ1bmN0aW9uIEUodCxlKXtyZXR1cm4gTyh0KT09TyhlKT8iYm90dG9tIj09dC5jaXJjdWxhckxpbmtUeXBlP0ModCxlKTpMKHQsZSk6TyhlKS1PKHQpfWZ1bmN0aW9uIEwodCxlKXtyZXR1cm4gdC55MC1lLnkwfWZ1bmN0aW9uIEModCxlKXtyZXR1cm4gZS55MC10LnkwfWZ1bmN0aW9uIFAodCxlKXtyZXR1cm4gdC55MS1lLnkxfWZ1bmN0aW9uIEkodCxlKXtyZXR1cm4gZS55MS10LnkxfWZ1bmN0aW9uIE8odCl7cmV0dXJuIHQudGFyZ2V0LmNvbHVtbi10LnNvdXJjZS5jb2x1bW59ZnVuY3Rpb24geih0KXtyZXR1cm4gdC50YXJnZXQueDAtdC5zb3VyY2UueDF9ZnVuY3Rpb24gRCh0LGUpe3ZhciByPVQodCksbj16KGUpL01hdGgudGFuKHIpO3JldHVybiJ1cCI9PUgodCk/dC55MStuOnQueTEtbn1mdW5jdGlvbiBSKHQsZSl7dmFyIHI9VCh0KSxuPXooZSkvTWF0aC50YW4ocik7cmV0dXJuInVwIj09SCh0KT90LnkxLW46dC55MStufWZ1bmN0aW9uIEYodCxlLHIsbil7dC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbihpKXtpZighaS5jaXJjdWxhciYmaS50YXJnZXQuY29sdW1uLWkuc291cmNlLmNvbHVtbj4xKXt2YXIgYT1pLnNvdXJjZS5jb2x1bW4rMSxvPWkudGFyZ2V0LmNvbHVtbi0xLHM9MSxsPW8tYSsxO2ZvcihzPTE7YTw9bzthKysscysrKXQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24obyl7aWYoby5jb2x1bW49PWEpe3ZhciBjLHU9cy8obCsxKSxmPU1hdGgucG93KDEtdSwzKSxoPTMqdSpNYXRoLnBvdygxLXUsMikscD0zKk1hdGgucG93KHUsMikqKDEtdSksZD1NYXRoLnBvdyh1LDMpLG09ZippLnkwK2gqaS55MCtwKmkueTErZCppLnkxLGc9bS1pLndpZHRoLzIsdj1tK2kud2lkdGgvMjtnPm8ueTAmJmc8by55MT8oYz1vLnkxLWcrMTAsYz0iYm90dG9tIj09by5jaXJjdWxhckxpbmtUeXBlP2M6LWMsbz1OKG8sYyxlLHIpLHQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7Yih0LG4pIT1iKG8sbikmJnQuY29sdW1uPT1vLmNvbHVtbiYmQihvLHQpJiZOKHQsYyxlLHIpfSkpKToodj5vLnkwJiZ2PG8ueTF8fGc8by55MCYmdj5vLnkxKSYmKGM9di1vLnkwKzEwLG89TihvLGMsZSxyKSx0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2IodCxuKSE9YihvLG4pJiZ0LmNvbHVtbj09by5jb2x1bW4mJnQueTA8by55MSYmdC55MT5vLnkxJiZOKHQsYyxlLHIpfSkpKX19KSl9fSkpfWZ1bmN0aW9uIEIodCxlKXtyZXR1cm4gdC55MD5lLnkwJiZ0LnkwPGUueTF8fCh0LnkxPmUueTAmJnQueTE8ZS55MXx8dC55MDxlLnkwJiZ0LnkxPmUueTEpfWZ1bmN0aW9uIE4odCxlLHIsbil7cmV0dXJuIHQueTArZT49ciYmdC55MStlPD1uJiYodC55MD10LnkwK2UsdC55MT10LnkxK2UsdC50YXJnZXRMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnkxPXQueTErZX0pKSx0LnNvdXJjZUxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueTA9dC55MCtlfSkpKSx0fWZ1bmN0aW9uIGoodCxlLHIsbil7dC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbihpKXtuJiZpLnkrKGkueTEtaS55MCk+ZSYmKGkueT1pLnktKGkueSsoaS55MS1pLnkwKS1lKSk7dmFyIGE9dC5saW5rcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBiKHQuc291cmNlLHIpPT1iKGkscil9KSksbz1hLmxlbmd0aDtvPjEmJmEuc29ydCgoZnVuY3Rpb24odCxlKXtpZighdC5jaXJjdWxhciYmIWUuY2lyY3VsYXIpe2lmKHQudGFyZ2V0LmNvbHVtbj09ZS50YXJnZXQuY29sdW1uKXJldHVybiB0LnkxLWUueTE7aWYoIVYodCxlKSlyZXR1cm4gdC55MS1lLnkxO2lmKHQudGFyZ2V0LmNvbHVtbj5lLnRhcmdldC5jb2x1bW4pe3ZhciByPVIoZSx0KTtyZXR1cm4gdC55MS1yfWlmKGUudGFyZ2V0LmNvbHVtbj50LnRhcmdldC5jb2x1bW4pcmV0dXJuIFIodCxlKS1lLnkxfXJldHVybiB0LmNpcmN1bGFyJiYhZS5jaXJjdWxhcj8idG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6ZS5jaXJjdWxhciYmIXQuY2lyY3VsYXI/InRvcCI9PWUuY2lyY3VsYXJMaW5rVHlwZT8xOi0xOnQuY2lyY3VsYXImJmUuY2lyY3VsYXI/dC5jaXJjdWxhckxpbmtUeXBlPT09ZS5jaXJjdWxhckxpbmtUeXBlJiYidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlP3QudGFyZ2V0LmNvbHVtbj09PWUudGFyZ2V0LmNvbHVtbj90LnRhcmdldC55MS1lLnRhcmdldC55MTplLnRhcmdldC5jb2x1bW4tdC50YXJnZXQuY29sdW1uOnQuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZT90LnRhcmdldC5jb2x1bW49PT1lLnRhcmdldC5jb2x1bW4/ZS50YXJnZXQueTEtdC50YXJnZXQueTE6dC50YXJnZXQuY29sdW1uLWUudGFyZ2V0LmNvbHVtbjoidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6dm9pZCAwfSkpO3ZhciBzPWkueTA7YS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnkwPXMrdC53aWR0aC8yLHMrPXQud2lkdGh9KSksYS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2lmKCJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGUpe2Zvcih2YXIgcj1lKzEsbj0wO3I8bztyKyspbis9YVtyXS53aWR0aDt0LnkwPWkueTEtbi10LndpZHRoLzJ9fSkpfSkpfWZ1bmN0aW9uIFUodCxlLHIpe3Qubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dC5saW5rcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBiKHQudGFyZ2V0LHIpPT1iKGUscil9KSksaT1uLmxlbmd0aDtpPjEmJm4uc29ydCgoZnVuY3Rpb24odCxlKXtpZighdC5jaXJjdWxhciYmIWUuY2lyY3VsYXIpe2lmKHQuc291cmNlLmNvbHVtbj09ZS5zb3VyY2UuY29sdW1uKXJldHVybiB0LnkwLWUueTA7aWYoIVYodCxlKSlyZXR1cm4gdC55MC1lLnkwO2lmKGUuc291cmNlLmNvbHVtbjx0LnNvdXJjZS5jb2x1bW4pe3ZhciByPUQoZSx0KTtyZXR1cm4gdC55MC1yfWlmKHQuc291cmNlLmNvbHVtbjxlLnNvdXJjZS5jb2x1bW4pcmV0dXJuIEQodCxlKS1lLnkwfXJldHVybiB0LmNpcmN1bGFyJiYhZS5jaXJjdWxhcj8idG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6ZS5jaXJjdWxhciYmIXQuY2lyY3VsYXI/InRvcCI9PWUuY2lyY3VsYXJMaW5rVHlwZT8xOi0xOnQuY2lyY3VsYXImJmUuY2lyY3VsYXI/dC5jaXJjdWxhckxpbmtUeXBlPT09ZS5jaXJjdWxhckxpbmtUeXBlJiYidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlP3Quc291cmNlLmNvbHVtbj09PWUuc291cmNlLmNvbHVtbj90LnNvdXJjZS55MS1lLnNvdXJjZS55MTp0LnNvdXJjZS5jb2x1bW4tZS5zb3VyY2UuY29sdW1uOnQuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZT90LnNvdXJjZS5jb2x1bW49PT1lLnNvdXJjZS5jb2x1bW4/dC5zb3VyY2UueTEtZS5zb3VyY2UueTE6ZS5zb3VyY2UuY29sdW1uLXQuc291cmNlLmNvbHVtbjoidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6dm9pZCAwfSkpO3ZhciBhPWUueTA7bi5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnkxPWErdC53aWR0aC8yLGErPXQud2lkdGh9KSksbi5mb3JFYWNoKChmdW5jdGlvbih0LHIpe2lmKCJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGUpe2Zvcih2YXIgYT1yKzEsbz0wO2E8aTthKyspbys9blthXS53aWR0aDt0LnkxPWUueTEtby10LndpZHRoLzJ9fSkpfSkpfWZ1bmN0aW9uIFYodCxlKXtyZXR1cm4gSCh0KT09SChlKX1mdW5jdGlvbiBIKHQpe3JldHVybiB0LnkwLXQueTE+MD8idXAiOiJkb3duIn1mdW5jdGlvbiBxKHQsZSl7cmV0dXJuIGIodC5zb3VyY2UsZSk9PWIodC50YXJnZXQsZSl9ZnVuY3Rpb24gRyh0LHIsbil7dmFyIGk9dC5ub2RlcyxhPXQubGlua3Msbz0hMSxzPSExO2lmKGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7InRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT9vPSEwOiJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGUmJihzPSEwKX0pKSwwPT1vfHwwPT1zKXt2YXIgbD1lLm1pbihpLChmdW5jdGlvbih0KXtyZXR1cm4gdC55MH0pKSxjPShuLXIpLyhlLm1heChpLChmdW5jdGlvbih0KXtyZXR1cm4gdC55MX0pKS1sKTtpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPSh0LnkxLXQueTApKmM7dC55MD0odC55MC1sKSpjLHQueTE9dC55MCtlfSkpLGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC55MD0odC55MC1sKSpjLHQueTE9KHQueTEtbCkqYyx0LndpZHRoPXQud2lkdGgqY30pKX19dC5zYW5rZXlDaXJjdWxhcj1mdW5jdGlvbigpe3ZhciB0LG4saT0wLGE9MCxiPTEsVD0xLEE9MjQsTT1nLEU9byxMPXYsQz15LFA9MzIsST0yLE89bnVsbDtmdW5jdGlvbiB6KCl7dmFyIHQ9e25vZGVzOkwuYXBwbHkobnVsbCxhcmd1bWVudHMpLGxpbmtzOkMuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtEKHQpLF8odCxNLE8pLFIodCksQih0KSx3KHQsTSksTih0LFAsTSksVih0KTtmb3IodmFyIGU9NCxyPTA7cjxlO3IrKylqKHQsVCxNKSxVKHQsVCxNKSxGKHQsYSxULE0pLGoodCxULE0pLFUodCxULE0pO3JldHVybiBHKHQsYSxUKSxTKHQsSSxULE0pLHR9ZnVuY3Rpb24gRCh0KXt0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC5pbmRleD1lLHQuc291cmNlTGlua3M9W10sdC50YXJnZXRMaW5rcz1bXX0pKTt2YXIgZT1yLm1hcCh0Lm5vZGVzLE0pO3JldHVybiB0LmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQscil7dC5pbmRleD1yO3ZhciBuPXQuc291cmNlLGk9dC50YXJnZXQ7Im9iamVjdCIhPT0odm9pZCAwPT09bj8idW5kZWZpbmVkIjpsKG4pKSYmKG49dC5zb3VyY2U9eChlLG4pKSwib2JqZWN0IiE9PSh2b2lkIDA9PT1pPyJ1bmRlZmluZWQiOmwoaSkpJiYoaT10LnRhcmdldD14KGUsaSkpLG4uc291cmNlTGlua3MucHVzaCh0KSxpLnRhcmdldExpbmtzLnB1c2godCl9KSksdH1mdW5jdGlvbiBSKHQpe3Qubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5wYXJ0T2ZDeWNsZT0hMSx0LnZhbHVlPU1hdGgubWF4KGUuc3VtKHQuc291cmNlTGlua3MsaCksZS5zdW0odC50YXJnZXRMaW5rcyxoKSksdC5zb3VyY2VMaW5rcy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmNpcmN1bGFyJiYodC5wYXJ0T2ZDeWNsZT0hMCx0LmNpcmN1bGFyTGlua1R5cGU9ZS5jaXJjdWxhckxpbmtUeXBlKX0pKSx0LnRhcmdldExpbmtzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuY2lyY3VsYXImJih0LnBhcnRPZkN5Y2xlPSEwLHQuY2lyY3VsYXJMaW5rVHlwZT1lLmNpcmN1bGFyTGlua1R5cGUpfSkpfSkpfWZ1bmN0aW9uIEIodCl7dmFyIGUscixuO2ZvcihlPXQubm9kZXMscj1bXSxuPTA7ZS5sZW5ndGg7KytuLGU9cixyPVtdKWUuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5kZXB0aD1uLHQuc291cmNlTGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7ci5pbmRleE9mKHQudGFyZ2V0KTwwJiYhdC5jaXJjdWxhciYmci5wdXNoKHQudGFyZ2V0KX0pKX0pKTtmb3IoZT10Lm5vZGVzLHI9W10sbj0wO2UubGVuZ3RoOysrbixlPXIscj1bXSllLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuaGVpZ2h0PW4sdC50YXJnZXRMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXtyLmluZGV4T2YodC5zb3VyY2UpPDAmJiF0LmNpcmN1bGFyJiZyLnB1c2godC5zb3VyY2UpfSkpfSkpO3Qubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jb2x1bW49TWF0aC5mbG9vcihFLmNhbGwobnVsbCx0LG4pKX0pKX1mdW5jdGlvbiBOKG8scyxsKXt2YXIgYz1yLm5lc3QoKS5rZXkoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbn0pKS5zb3J0S2V5cyhlLmFzY2VuZGluZykuZW50cmllcyhvLm5vZGVzKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlc30pKTshZnVuY3Rpb24ocil7aWYobil7dmFyIHM9MS8wO2MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9VCpuLyh0Lmxlbmd0aCsxKTtzPWU8cz9lOnN9KSksdD1zfXZhciBsPWUubWluKGMsKGZ1bmN0aW9uKHIpe3JldHVybihULWEtKHIubGVuZ3RoLTEpKnQpL2Uuc3VtKHIsaCl9KSk7bCo9LjMsby5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqbH0pKTt2YXIgdT1mdW5jdGlvbih0KXt2YXIgcj0wLG49MCxpPTAsYT0wLG89ZS5tYXgodC5ub2RlcywoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1ufSkpO3JldHVybiB0LmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXImJigidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlP3IrPXQud2lkdGg6bis9dC53aWR0aCwwPT10LnRhcmdldC5jb2x1bW4mJihhKz10LndpZHRoKSx0LnNvdXJjZS5jb2x1bW49PW8mJihpKz10LndpZHRoKSl9KSkse3RvcDpyPXI+MD9yKzI1KzEwOnIsYm90dG9tOm49bj4wP24rMjUrMTA6bixsZWZ0OmE9YT4wP2ErMjUrMTA6YSxyaWdodDppPWk+MD9pKzI1KzEwOml9fShvKSxmPWZ1bmN0aW9uKHQscil7dmFyIG49ZS5tYXgodC5ub2RlcywoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1ufSkpLG89Yi1pLHM9VC1hLGw9by8obytyLnJpZ2h0K3IubGVmdCksYz1zLyhzK3IudG9wK3IuYm90dG9tKTtyZXR1cm4gaT1pKmwrci5sZWZ0LGI9MD09ci5yaWdodD9iOmIqbCxhPWEqYytyLnRvcCxUKj1jLHQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC54MD1pK3QuY29sdW1uKigoYi1pLUEpL24pLHQueDE9dC54MCtBfSkpLGN9KG8sdSk7bCo9ZixvLmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Qud2lkdGg9dC52YWx1ZSpsfSkpLGMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7dC5mb3JFYWNoKChmdW5jdGlvbih0LG4pe3QuZGVwdGg9PWMubGVuZ3RoLTEmJjE9PWV8fDA9PXQuZGVwdGgmJjE9PWU/KHQueTA9VC8yLXQudmFsdWUqbCx0LnkxPXQueTArdC52YWx1ZSpsKTp0LnBhcnRPZkN5Y2xlPzA9PWsodCxyKT8odC55MD1ULzIrbix0LnkxPXQueTArdC52YWx1ZSpsKToidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPyh0LnkwPWErbix0LnkxPXQueTArdC52YWx1ZSpsKToodC55MD1ULXQudmFsdWUqbC1uLHQueTE9dC55MCt0LnZhbHVlKmwpOjA9PXUudG9wfHwwPT11LmJvdHRvbT8odC55MD0oVC1hKS9lKm4sdC55MT10LnkwK3QudmFsdWUqbCk6KHQueTA9KFQtYSkvMi1lLzIrbix0LnkxPXQueTArdC52YWx1ZSpsKX0pKX0pKX0obCkseSgpO2Zvcih2YXIgdT0xLGc9cztnPjA7LS1nKXYodSo9Ljk5LGwpLHkoKTtmdW5jdGlvbiB2KHQscil7dmFyIG49Yy5sZW5ndGg7Yy5mb3JFYWNoKChmdW5jdGlvbihpKXt2YXIgYT1pLmxlbmd0aCxvPWlbMF0uZGVwdGg7aS5mb3JFYWNoKChmdW5jdGlvbihpKXt2YXIgcztpZihpLnNvdXJjZUxpbmtzLmxlbmd0aHx8aS50YXJnZXRMaW5rcy5sZW5ndGgpaWYoaS5wYXJ0T2ZDeWNsZSYmayhpLHIpPjApO2Vsc2UgaWYoMD09byYmMT09YSlzPWkueTEtaS55MCxpLnkwPVQvMi1zLzIsaS55MT1ULzIrcy8yO2Vsc2UgaWYobz09bi0xJiYxPT1hKXM9aS55MS1pLnkwLGkueTA9VC8yLXMvMixpLnkxPVQvMitzLzI7ZWxzZXt2YXIgbD1lLm1lYW4oaS5zb3VyY2VMaW5rcyxtKSxjPWUubWVhbihpLnRhcmdldExpbmtzLGQpLHU9KChsJiZjPyhsK2MpLzI6bHx8YyktcChpKSkqdDtpLnkwKz11LGkueTErPXV9fSkpfSkpfWZ1bmN0aW9uIHkoKXtjLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByLG4saSxvPWEscz1lLmxlbmd0aDtmb3IoZS5zb3J0KGYpLGk9MDtpPHM7KytpKShuPW8tKHI9ZVtpXSkueTApPjAmJihyLnkwKz1uLHIueTErPW4pLG89ci55MSt0O2lmKChuPW8tdC1UKT4wKWZvcihvPXIueTAtPW4sci55MS09bixpPXMtMjtpPj0wOy0taSkobj0ocj1lW2ldKS55MSt0LW8pPjAmJihyLnkwLT1uLHIueTEtPW4pLG89ci55MH0pKX19ZnVuY3Rpb24gVih0KXt0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Quc291cmNlTGlua3Muc29ydCh1KSx0LnRhcmdldExpbmtzLnNvcnQoYyl9KSksdC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnkwLHI9ZSxuPXQueTEsaT1uO3Quc291cmNlTGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jaXJjdWxhcj8odC55MD1uLXQud2lkdGgvMixuLT10LndpZHRoKToodC55MD1lK3Qud2lkdGgvMixlKz10LndpZHRoKX0pKSx0LnRhcmdldExpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXI/KHQueTE9aS10LndpZHRoLzIsaS09dC53aWR0aCk6KHQueTE9cit0LndpZHRoLzIscis9dC53aWR0aCl9KSl9KSl9cmV0dXJuIHoubm9kZUlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cyh0KSx6KTpNfSx6Lm5vZGVBbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnModCkseik6RX0sei5ub2RlV2lkdGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9K3Qseik6QX0sei5ub2RlUGFkZGluZz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZSx6KTp0fSx6Lm5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhMPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cyh0KSx6KTpMfSx6LmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhDPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cyh0KSx6KTpDfSx6LnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9YT0wLGI9K3RbMF0sVD0rdFsxXSx6KTpbYi1pLFQtYV19LHouZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0WzBdWzBdLGI9K3RbMV1bMF0sYT0rdFswXVsxXSxUPSt0WzFdWzFdLHopOltbaSxhXSxbYixUXV19LHouaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUD0rdCx6KTpQfSx6LmNpcmN1bGFyTGlua0dhcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oST0rdCx6KTpJfSx6Lm5vZGVQYWRkaW5nUmF0aW89ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3Qseik6bn0sei5zb3J0Tm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE89dCx6KTpPfSx6LnVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdyh0LE0pLFYodCksdC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNpcmN1bGFyJiYodC5jaXJjdWxhckxpbmtUeXBlPXQueTArdC55MTxUPyJ0b3AiOiJib3R0b20iLHQuc291cmNlLmNpcmN1bGFyTGlua1R5cGU9dC5jaXJjdWxhckxpbmtUeXBlLHQudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGU9dC5jaXJjdWxhckxpbmtUeXBlKX0pKSxqKHQsVCxNLCExKSxVKHQsVCxNKSxTKHQsSSxULE0pLHR9LHp9LHQuc2Fua2V5Q2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldExpbmtzLmxlbmd0aD90LmRlcHRoOnQuc291cmNlTGlua3MubGVuZ3RoP2UubWluKHQuc291cmNlTGlua3MsYSktMTowfSx0LnNhbmtleUxlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVwdGh9LHQuc2Fua2V5UmlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS0xLXQuaGVpZ2h0fSx0LnNhbmtleUp1c3RpZnk9byxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtYXJyYXkiOjE1NSwiZDMtY29sbGVjdGlvbiI6MTU2LCJkMy1zaGFwZSI6MTY3LCJlbGVtZW50YXJ5LWNpcmN1aXRzLWRpcmVjdGVkLWdyYXBoIjoxODB9XSw1NzpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihuLGkpeyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9pKHIsdCgiZDMtYXJyYXkiKSx0KCJkMy1jb2xsZWN0aW9uIiksdCgiZDMtc2hhcGUiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyxuLmQzKX0odGhpcywoZnVuY3Rpb24odCxlLHIsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQudGFyZ2V0LmRlcHRofWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gdC5zb3VyY2VMaW5rcy5sZW5ndGg/dC5kZXB0aDplLTF9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBjKHQuc291cmNlLGUuc291cmNlKXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gYyh0LnRhcmdldCxlLnRhcmdldCl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQueTAtZS55MH1mdW5jdGlvbiB1KHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIGYodCl7cmV0dXJuKHQueTArdC55MSkvMn1mdW5jdGlvbiBoKHQpe3JldHVybiBmKHQuc291cmNlKSp0LnZhbHVlfWZ1bmN0aW9uIHAodCl7cmV0dXJuIGYodC50YXJnZXQpKnQudmFsdWV9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBtKHQpe3JldHVybiB0Lm5vZGVzfWZ1bmN0aW9uIGcodCl7cmV0dXJuIHQubGlua3N9ZnVuY3Rpb24gdih0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiB5KHQpe3JldHVyblt0LnNvdXJjZS54MSx0LnkwXX1mdW5jdGlvbiB4KHQpe3JldHVyblt0LnRhcmdldC54MCx0LnkxXX10LnNhbmtleT1mdW5jdGlvbigpe3ZhciB0PTAsbj0wLGk9MSx5PTEseD0yNCxiPTgsXz1kLHc9YSxUPW0saz1nLEE9MzI7ZnVuY3Rpb24gTSgpe3ZhciB0PXtub2RlczpULmFwcGx5KG51bGwsYXJndW1lbnRzKSxsaW5rczprLmFwcGx5KG51bGwsYXJndW1lbnRzKX07cmV0dXJuIFModCksRSh0KSxMKHQpLEModCksUCh0KSx0fWZ1bmN0aW9uIFModCl7dC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3QuaW5kZXg9ZSx0LnNvdXJjZUxpbmtzPVtdLHQudGFyZ2V0TGlua3M9W119KSk7dmFyIGU9ci5tYXAodC5ub2RlcyxfKTt0LmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQscil7dC5pbmRleD1yO3ZhciBuPXQuc291cmNlLGk9dC50YXJnZXQ7Im9iamVjdCIhPXR5cGVvZiBuJiYobj10LnNvdXJjZT12KGUsbikpLCJvYmplY3QiIT10eXBlb2YgaSYmKGk9dC50YXJnZXQ9dihlLGkpKSxuLnNvdXJjZUxpbmtzLnB1c2godCksaS50YXJnZXRMaW5rcy5wdXNoKHQpfSkpfWZ1bmN0aW9uIEUodCl7dC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnZhbHVlPU1hdGgubWF4KGUuc3VtKHQuc291cmNlTGlua3MsdSksZS5zdW0odC50YXJnZXRMaW5rcyx1KSl9KSl9ZnVuY3Rpb24gTChlKXt2YXIgcixuLGE7Zm9yKHI9ZS5ub2RlcyxuPVtdLGE9MDtyLmxlbmd0aDsrK2Escj1uLG49W10pci5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmRlcHRoPWEsdC5zb3VyY2VMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXtuLmluZGV4T2YodC50YXJnZXQpPDAmJm4ucHVzaCh0LnRhcmdldCl9KSl9KSk7Zm9yKHI9ZS5ub2RlcyxuPVtdLGE9MDtyLmxlbmd0aDsrK2Escj1uLG49W10pci5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmhlaWdodD1hLHQudGFyZ2V0TGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7bi5pbmRleE9mKHQuc291cmNlKTwwJiZuLnB1c2godC5zb3VyY2UpfSkpfSkpO3ZhciBvPShpLXQteCkvKGEtMSk7ZS5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLngxPShlLngwPXQrTWF0aC5tYXgoMCxNYXRoLm1pbihhLTEsTWF0aC5mbG9vcih3LmNhbGwobnVsbCxlLGEpKSkpKm8pK3h9KSl9ZnVuY3Rpb24gQyh0KXt2YXIgaT1yLm5lc3QoKS5rZXkoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngwfSkpLnNvcnRLZXlzKGUuYXNjZW5kaW5nKS5lbnRyaWVzKHQubm9kZXMpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWVzfSkpOyFmdW5jdGlvbigpe3ZhciByPWUubWF4KGksKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aH0pKSxhPTIvMyooeS1uKS8oci0xKTtiPmEmJihiPWEpO3ZhciBvPWUubWluKGksKGZ1bmN0aW9uKHQpe3JldHVybih5LW4tKHQubGVuZ3RoLTEpKmIpL2Uuc3VtKHQsdSl9KSk7aS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC55MT0odC55MD1lKSt0LnZhbHVlKm99KSl9KSksdC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqb30pKX0oKSxkKCk7Zm9yKHZhciBhPTEsbz1BO28+MDstLW8pbChhKj0uOTkpLGQoKSxzKGEpLGQoKTtmdW5jdGlvbiBzKHQpe2kuZm9yRWFjaCgoZnVuY3Rpb24ocil7ci5mb3JFYWNoKChmdW5jdGlvbihyKXtpZihyLnRhcmdldExpbmtzLmxlbmd0aCl7dmFyIG49KGUuc3VtKHIudGFyZ2V0TGlua3MsaCkvZS5zdW0oci50YXJnZXRMaW5rcyx1KS1mKHIpKSp0O3IueTArPW4sci55MSs9bn19KSl9KSl9ZnVuY3Rpb24gbCh0KXtpLnNsaWNlKCkucmV2ZXJzZSgpLmZvckVhY2goKGZ1bmN0aW9uKHIpe3IuZm9yRWFjaCgoZnVuY3Rpb24ocil7aWYoci5zb3VyY2VMaW5rcy5sZW5ndGgpe3ZhciBuPShlLnN1bShyLnNvdXJjZUxpbmtzLHApL2Uuc3VtKHIuc291cmNlTGlua3MsdSktZihyKSkqdDtyLnkwKz1uLHIueTErPW59fSkpfSkpfWZ1bmN0aW9uIGQoKXtpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhPW4sbz10Lmxlbmd0aDtmb3IodC5zb3J0KGMpLGk9MDtpPG87KytpKShyPWEtKGU9dFtpXSkueTApPjAmJihlLnkwKz1yLGUueTErPXIpLGE9ZS55MStiO2lmKChyPWEtYi15KT4wKWZvcihhPWUueTAtPXIsZS55MS09cixpPW8tMjtpPj0wOy0taSkocj0oZT10W2ldKS55MStiLWEpPjAmJihlLnkwLT1yLGUueTEtPXIpLGE9ZS55MH0pKX19ZnVuY3Rpb24gUCh0KXt0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Quc291cmNlTGlua3Muc29ydChsKSx0LnRhcmdldExpbmtzLnNvcnQocyl9KSksdC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnkwLHI9ZTt0LnNvdXJjZUxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueTA9ZSt0LndpZHRoLzIsZSs9dC53aWR0aH0pKSx0LnRhcmdldExpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueTE9cit0LndpZHRoLzIscis9dC53aWR0aH0pKX0pKX1yZXR1cm4gTS51cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIFAodCksdH0sTS5ub2RlSWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpvKHQpLE0pOl99LE0ubm9kZUFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6byh0KSxNKTp3fSxNLm5vZGVXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0rdCxNKTp4fSxNLm5vZGVQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPSt0LE0pOmJ9LE0ubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpvKHQpLE0pOlR9LE0ubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpvKHQpLE0pOmt9LE0uc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uPTAsaT0rZVswXSx5PStlWzFdLE0pOltpLXQseS1uXX0sTS5leHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2VbMF1bMF0saT0rZVsxXVswXSxuPStlWzBdWzFdLHk9K2VbMV1bMV0sTSk6W1t0LG5dLFtpLHldXX0sTS5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPSt0LE0pOkF9LE19LHQuc2Fua2V5Q2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldExpbmtzLmxlbmd0aD90LmRlcHRoOnQuc291cmNlTGlua3MubGVuZ3RoP2UubWluKHQuc291cmNlTGlua3MsaSktMTowfSx0LnNhbmtleUxlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVwdGh9LHQuc2Fua2V5UmlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS0xLXQuaGVpZ2h0fSx0LnNhbmtleUp1c3RpZnk9YSx0LnNhbmtleUxpbmtIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuIG4ubGlua0hvcml6b250YWwoKS5zb3VyY2UoeSkudGFyZ2V0KHgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtYXJyYXkiOjE1NSwiZDMtY29sbGVjdGlvbiI6MTU2LCJkMy1zaGFwZSI6MTY3fV0sNTg6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oKXt2YXIgdD17dmVyc2lvbjoiMy44LjAifSxyPVtdLnNsaWNlLG49ZnVuY3Rpb24odCl7cmV0dXJuIHIuY2FsbCh0KX0saT1zZWxmLmRvY3VtZW50O2Z1bmN0aW9uIGEodCl7cmV0dXJuIHQmJih0Lm93bmVyRG9jdW1lbnR8fHQuZG9jdW1lbnR8fHQpLmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBvKHQpe3JldHVybiB0JiYodC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXcpfWlmKGkpdHJ5e24oaS5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcylbMF0ubm9kZVR5cGV9Y2F0Y2godCl7bj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSk7ZS0tOylyW2VdPXRbZV07cmV0dXJuIHJ9fWlmKERhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9KSxpKXRyeXtpLmNyZWF0ZUVsZW1lbnQoIkRJViIpLnN0eWxlLnNldFByb3BlcnR5KCJvcGFjaXR5IiwwLCIiKX1jYXRjaCh0KXt2YXIgcz10aGlzLkVsZW1lbnQucHJvdG90eXBlLGw9cy5zZXRBdHRyaWJ1dGUsYz1zLnNldEF0dHJpYnV0ZU5TLHU9dGhpcy5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZSxmPXUuc2V0UHJvcGVydHk7cy5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXtsLmNhbGwodGhpcyx0LGUrIiIpfSxzLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxyKXtjLmNhbGwodGhpcyx0LGUscisiIil9LHUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe2YuY2FsbCh0aGlzLHQsZSsiIixyKX19ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBwKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9ZnVuY3Rpb24gZCh0KXtyZXR1cm4haXNOYU4odCl9ZnVuY3Rpb24gbSh0KXtyZXR1cm57bGVmdDpmdW5jdGlvbihlLHIsbixpKXtmb3IoYXJndW1lbnRzLmxlbmd0aDwzJiYobj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJihpPWUubGVuZ3RoKTtuPGk7KXt2YXIgYT1uK2k+Pj4xO3QoZVthXSxyKTwwP249YSsxOmk9YX1yZXR1cm4gbn0scmlnaHQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKG49MCksYXJndW1lbnRzLmxlbmd0aDw0JiYoaT1lLmxlbmd0aCk7bjxpOyl7dmFyIGE9bitpPj4+MTt0KGVbYV0scik+MD9pPWE6bj1hKzF9cmV0dXJuIG59fX10LmFzY2VuZGluZz1oLHQuZGVzY2VuZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sdC5taW49ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8YTspaWYobnVsbCE9KG49dFtpXSkmJm4+PW4pe3I9bjticmVha31mb3IoOysraTxhOyludWxsIT0obj10W2ldKSYmcj5uJiYocj1uKX1lbHNle2Zvcig7KytpPGE7KWlmKG51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJnI+biYmKHI9bil9cmV0dXJuIHJ9LHQubWF4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPS0xLGE9dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KytpPGE7KWlmKG51bGwhPShuPXRbaV0pJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49dFtpXSkmJm4+ciYmKHI9bil9ZWxzZXtmb3IoOysraTxhOylpZihudWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPnImJihyPW4pfXJldHVybiByfSx0LmV4dGVudD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPS0xLG89dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KythPG87KWlmKG51bGwhPShuPXRbYV0pJiZuPj1uKXtyPWk9bjticmVha31mb3IoOysrYTxvOyludWxsIT0obj10W2FdKSYmKHI+biYmKHI9biksaTxuJiYoaT1uKSl9ZWxzZXtmb3IoOysrYTxvOylpZihudWxsIT0obj1lLmNhbGwodCx0W2FdLGEpKSYmbj49bil7cj1pPW47YnJlYWt9Zm9yKDsrK2E8bzspbnVsbCE9KG49ZS5jYWxsKHQsdFthXSxhKSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfXJldHVybltyLGldfSx0LnN1bT1mdW5jdGlvbih0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoLGE9LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2E8aTspZChyPSt0W2FdKSYmKG4rPXIpO2Vsc2UgZm9yKDsrK2E8aTspZChyPStlLmNhbGwodCx0W2FdLGEpKSYmKG4rPXIpO3JldHVybiBufSx0Lm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aCxhPS0xLG89aTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrYTxpOylkKHI9cCh0W2FdKSk/bis9cjotLW87ZWxzZSBmb3IoOysrYTxpOylkKHI9cChlLmNhbGwodCx0W2FdLGEpKSk/bis9cjotLW87aWYobylyZXR1cm4gbi9vfSx0LnF1YW50aWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQubGVuZ3RoLTEpKmUrMSxuPU1hdGguZmxvb3IociksaT0rdFtuLTFdLGE9ci1uO3JldHVybiBhP2krYSoodFtuXS1pKTppfSx0Lm1lZGlhbj1mdW5jdGlvbihlLHIpe3ZhciBuLGk9W10sYT1lLmxlbmd0aCxvPS0xO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytvPGE7KWQobj1wKGVbb10pKSYmaS5wdXNoKG4pO2Vsc2UgZm9yKDsrK288YTspZChuPXAoci5jYWxsKGUsZVtvXSxvKSkpJiZpLnB1c2gobik7aWYoaS5sZW5ndGgpcmV0dXJuIHQucXVhbnRpbGUoaS5zb3J0KGgpLC41KX0sdC52YXJpYW5jZT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPTAsbz0wLHM9LTEsbD0wO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytzPGk7KWQocj1wKHRbc10pKSYmKG8rPShuPXItYSkqKHItKGErPW4vKytsKSkpO2Vsc2UgZm9yKDsrK3M8aTspZChyPXAoZS5jYWxsKHQsdFtzXSxzKSkpJiYobys9KG49ci1hKSooci0oYSs9bi8rK2wpKSk7aWYobD4xKXJldHVybiBvLyhsLTEpfSx0LmRldmlhdGlvbj1mdW5jdGlvbigpe3ZhciBlPXQudmFyaWFuY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBlP01hdGguc3FydChlKTplfTt2YXIgZz1tKGgpO2Z1bmN0aW9uIHYodCl7cmV0dXJuIHQubGVuZ3RofXQuYmlzZWN0TGVmdD1nLmxlZnQsdC5iaXNlY3Q9dC5iaXNlY3RSaWdodD1nLnJpZ2h0LHQuYmlzZWN0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIG0oMT09PXQubGVuZ3RoP2Z1bmN0aW9uKGUscil7cmV0dXJuIGgodChlKSxyKX06dCl9LHQuc2h1ZmZsZT1mdW5jdGlvbih0LGUscil7KGE9YXJndW1lbnRzLmxlbmd0aCk8MyYmKHI9dC5sZW5ndGgsYTwyJiYoZT0wKSk7Zm9yKHZhciBuLGksYT1yLWU7YTspaT1NYXRoLnJhbmRvbSgpKmEtLXwwLG49dFthK2VdLHRbYStlXT10W2krZV0sdFtpK2VdPW47cmV0dXJuIHR9LHQucGVybXV0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09dFtlW3JdXTtyZXR1cm4gbn0sdC5wYWlycz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLTEsbj10WzBdLGk9bmV3IEFycmF5KHI8MD8wOnIpO2U8cjspaVtlXT1bbixuPXRbKytlXV07cmV0dXJuIGl9LHQudHJhbnNwb3NlPWZ1bmN0aW9uKGUpe2lmKCEoYT1lLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciByPS0xLG49dC5taW4oZSx2KSxpPW5ldyBBcnJheShuKTsrK3I8bjspZm9yKHZhciBhLG89LTEscz1pW3JdPW5ldyBBcnJheShhKTsrK288YTspc1tvXT1lW29dW3JdO3JldHVybiBpfSx0LnppcD1mdW5jdGlvbigpe3JldHVybiB0LnRyYW5zcG9zZShhcmd1bWVudHMpfSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHIpO3JldHVybiBlfSx0LnZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2godFtyXSk7cmV0dXJuIGV9LHQuZW50cmllcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2goe2tleTpyLHZhbHVlOnRbcl19KTtyZXR1cm4gZX0sdC5tZXJnZT1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihyPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihlPShuPXRbaV0pLmxlbmd0aDstLWU+PTA7KXJbLS1vXT1uW2VdO3JldHVybiByfTt2YXIgeT1NYXRoLmFicztmdW5jdGlvbiB4KHQpe2Zvcih2YXIgZT0xO3QqZSUxOyllKj0xMDtyZXR1cm4gZX1mdW5jdGlvbiBiKHQsZSl7Zm9yKHZhciByIGluIGUpT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLHIse3ZhbHVlOmVbcl0sZW51bWVyYWJsZTohMX0pfWZ1bmN0aW9uIF8oKXt0aGlzLl89T2JqZWN0LmNyZWF0ZShudWxsKX10LnJhbmdlPWZ1bmN0aW9uKHQsZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDMmJihyPTEsYXJndW1lbnRzLmxlbmd0aDwyJiYoZT10LHQ9MCkpLChlLXQpL3I9PTEvMCl0aHJvdyBuZXcgRXJyb3IoImluZmluaXRlIHJhbmdlIik7dmFyIG4saT1bXSxhPXgoeShyKSksbz0tMTtpZih0Kj1hLGUqPWEsKHIqPWEpPDApZm9yKDsobj10K3IqKytvKT5lOylpLnB1c2gobi9hKTtlbHNlIGZvcig7KG49dCtyKisrbyk8ZTspaS5wdXNoKG4vYSk7cmV0dXJuIGl9LHQubWFwPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IF87aWYodCBpbnN0YW5jZW9mIF8pdC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3Iuc2V0KHQsZSl9KSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgbixpPS0xLGE9dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2k8YTspci5zZXQoaSx0W2ldKTtlbHNlIGZvcig7KytpPGE7KXIuc2V0KGUuY2FsbCh0LG49dFtpXSxpKSxuKX1lbHNlIGZvcih2YXIgbyBpbiB0KXIuc2V0KG8sdFtvXSk7cmV0dXJuIHJ9O2Z1bmN0aW9uIHcodCl7cmV0dXJuIl9fcHJvdG9fXyI9PSh0Kz0iIil8fCJcMCI9PT10WzBdPyJcMCIrdDp0fWZ1bmN0aW9uIFQodCl7cmV0dXJuIlwwIj09PSh0Kz0iIilbMF0/dC5zbGljZSgxKTp0fWZ1bmN0aW9uIGsodCl7cmV0dXJuIHcodClpbiB0aGlzLl99ZnVuY3Rpb24gQSh0KXtyZXR1cm4odD13KHQpKWluIHRoaXMuXyYmZGVsZXRlIHRoaXMuX1t0XX1mdW5jdGlvbiBNKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuXyl0LnB1c2goVChlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gUygpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMuXykrK3Q7cmV0dXJuIHR9ZnVuY3Rpb24gRSgpe2Zvcih2YXIgdCBpbiB0aGlzLl8pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gTCgpe3RoaXMuXz1PYmplY3QuY3JlYXRlKG51bGwpfWZ1bmN0aW9uIEModCl7cmV0dXJuIHR9ZnVuY3Rpb24gUCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ci5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIG49PT1lP3Q6bn19ZnVuY3Rpb24gSSh0LGUpe2lmKGUgaW4gdClyZXR1cm4gZTtlPWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtmb3IodmFyIHI9MCxuPU8ubGVuZ3RoO3I8bjsrK3Ipe3ZhciBpPU9bcl0rZTtpZihpIGluIHQpcmV0dXJuIGl9fWIoXyx7aGFzOmssZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9bdyh0KV19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9bdyh0KV09ZX0scmVtb3ZlOkEsa2V5czpNLHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5wdXNoKHRoaXMuX1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fKXQucHVzaCh7a2V5OlQoZSksdmFsdWU6dGhpcy5fW2VdfSk7cmV0dXJuIHR9LHNpemU6UyxlbXB0eTpFLGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuXyl0LmNhbGwodGhpcyxUKGUpLHRoaXMuX1tlXSl9fSksdC5uZXN0PWZ1bmN0aW9uKCl7dmFyIGUscixuPXt9LGk9W10sYT1bXTtmdW5jdGlvbiBvKHQsYSxzKXtpZihzPj1pLmxlbmd0aClyZXR1cm4gcj9yLmNhbGwobixhKTplP2Euc29ydChlKTphO2Zvcih2YXIgbCxjLHUsZixoPS0xLHA9YS5sZW5ndGgsZD1pW3MrK10sbT1uZXcgXzsrK2g8cDspKGY9bS5nZXQobD1kKGM9YVtoXSkpKT9mLnB1c2goYyk6bS5zZXQobCxbY10pO3JldHVybiB0PyhjPXQoKSx1PWZ1bmN0aW9uKGUscil7Yy5zZXQoZSxvKHQscixzKSl9KTooYz17fSx1PWZ1bmN0aW9uKGUscil7Y1tlXT1vKHQscixzKX0pLG0uZm9yRWFjaCh1KSxjfXJldHVybiBuLm1hcD1mdW5jdGlvbih0LGUpe3JldHVybiBvKGUsdCwwKX0sbi5lbnRyaWVzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbiB0KGUscil7aWYocj49aS5sZW5ndGgpcmV0dXJuIGU7dmFyIG49W10sbz1hW3IrK107cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSxpKXtuLnB1c2goe2tleTplLHZhbHVlczp0KGkscil9KX0pKSxvP24uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbyh0LmtleSxlLmtleSl9KSk6bn0obyh0Lm1hcCxlLDApLDApfSxuLmtleT1mdW5jdGlvbih0KXtyZXR1cm4gaS5wdXNoKHQpLG59LG4uc29ydEtleXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFbaS5sZW5ndGgtMV09dCxufSxuLnNvcnRWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGU9dCxufSxuLnJvbGx1cD1mdW5jdGlvbih0KXtyZXR1cm4gcj10LG59LG59LHQuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBMO2lmKHQpZm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47KytyKWUuYWRkKHRbcl0pO3JldHVybiBlfSxiKEwse2hhczprLGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fW3codCs9IiIpXT0hMCx0fSxyZW1vdmU6QSx2YWx1ZXM6TSxzaXplOlMsZW1wdHk6RSxmb3JFYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5jYWxsKHRoaXMsVChlKSl9fSksdC5iZWhhdmlvcj17fSx0LnJlYmluZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPTEsaT1hcmd1bWVudHMubGVuZ3RoOysrbjxpOyl0W3I9YXJndW1lbnRzW25dXT1QKHQsZSxlW3JdKTtyZXR1cm4gdH07dmFyIE89WyJ3ZWJraXQiLCJtcyIsIm1veiIsIk1veiIsIm8iLCJPIl07ZnVuY3Rpb24geigpe31mdW5jdGlvbiBEKCl7fWZ1bmN0aW9uIFIodCl7dmFyIGU9W10scj1uZXcgXztmdW5jdGlvbiBuKCl7Zm9yKHZhciByLG49ZSxpPS0xLGE9bi5sZW5ndGg7KytpPGE7KShyPW5baV0ub24pJiZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdH1yZXR1cm4gbi5vbj1mdW5jdGlvbihuLGkpe3ZhciBhLG89ci5nZXQobik7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9vJiZvLm9uOihvJiYoby5vbj1udWxsLGU9ZS5zbGljZSgwLGE9ZS5pbmRleE9mKG8pKS5jb25jYXQoZS5zbGljZShhKzEpKSxyLnJlbW92ZShuKSksaSYmZS5wdXNoKHIuc2V0KG4se29uOml9KSksdCl9LG59ZnVuY3Rpb24gRigpe3QuZXZlbnQucHJldmVudERlZmF1bHQoKX1mdW5jdGlvbiBCKCl7Zm9yKHZhciBlLHI9dC5ldmVudDtlPXIuc291cmNlRXZlbnQ7KXI9ZTtyZXR1cm4gcn1mdW5jdGlvbiBOKGUpe2Zvcih2YXIgcj1uZXcgRCxuPTAsaT1hcmd1bWVudHMubGVuZ3RoOysrbjxpOylyW2FyZ3VtZW50c1tuXV09UihyKTtyZXR1cm4gci5vZj1mdW5jdGlvbihuLGkpe3JldHVybiBmdW5jdGlvbihhKXt0cnl7dmFyIG89YS5zb3VyY2VFdmVudD10LmV2ZW50O2EudGFyZ2V0PWUsdC5ldmVudD1hLHJbYS50eXBlXS5hcHBseShuLGkpfWZpbmFsbHl7dC5ldmVudD1vfX19LHJ9dC5kaXNwYXRjaD1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgRCxlPS0xLHI9YXJndW1lbnRzLmxlbmd0aDsrK2U8cjspdFthcmd1bWVudHNbZV1dPVIodCk7cmV0dXJuIHR9LEQucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbmRleE9mKCIuIiksbj0iIjtpZihyPj0wJiYobj10LnNsaWNlKHIrMSksdD10LnNsaWNlKDAscikpLHQpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj90aGlzW3RdLm9uKG4pOnRoaXNbdF0ub24obixlKTtpZigyPT09YXJndW1lbnRzLmxlbmd0aCl7aWYobnVsbD09ZSlmb3IodCBpbiB0aGlzKXRoaXMuaGFzT3duUHJvcGVydHkodCkmJnRoaXNbdF0ub24obixudWxsKTtyZXR1cm4gdGhpc319LHQuZXZlbnQ9bnVsbCx0LnJlcXVvdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZShqLCJcXCQmIil9O3ZhciBqPS9bXFxcXlwkXCpcK1w/XHxcW1xdXChcKVwuXHtcfV0vZyxVPXt9Ll9fcHJvdG9fXz9mdW5jdGlvbih0LGUpe3QuX19wcm90b19fPWV9OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdfTtmdW5jdGlvbiBWKHQpe3JldHVybiBVKHQsWSksdH12YXIgSD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnF1ZXJ5U2VsZWN0b3IodCl9LHE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5xdWVyeVNlbGVjdG9yQWxsKHQpfSxHPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5tYXRjaGVzfHx0W0kodCwibWF0Y2hlc1NlbGVjdG9yIildO3JldHVybihHPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuY2FsbCh0LGUpfSkodCxlKX07ImZ1bmN0aW9uIj09dHlwZW9mIFNpenpsZSYmKEg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gU2l6emxlKHQsZSlbMF18fG51bGx9LHE9U2l6emxlLEc9U2l6emxlLm1hdGNoZXNTZWxlY3RvciksdC5zZWxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdC5zZWxlY3QoaS5kb2N1bWVudEVsZW1lbnQpfTt2YXIgWT10LnNlbGVjdGlvbi5wcm90b3R5cGU9W107ZnVuY3Rpb24gVyh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIEgodCx0aGlzKX19ZnVuY3Rpb24gWCh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIHEodCx0aGlzKX19WS5zZWxlY3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT1bXTt0PVcodCk7Zm9yKHZhciBvPS0xLHM9dGhpcy5sZW5ndGg7KytvPHM7KXthLnB1c2goZT1bXSksZS5wYXJlbnROb2RlPShuPXRoaXNbb10pLnBhcmVudE5vZGU7Zm9yKHZhciBsPS0xLGM9bi5sZW5ndGg7KytsPGM7KShpPW5bbF0pPyhlLnB1c2gocj10LmNhbGwoaSxpLl9fZGF0YV9fLGwsbykpLHImJiJfX2RhdGFfXyJpbiBpJiYoci5fX2RhdGFfXz1pLl9fZGF0YV9fKSk6ZS5wdXNoKG51bGwpfXJldHVybiBWKGEpfSxZLnNlbGVjdEFsbD1mdW5jdGlvbih0KXt2YXIgZSxyLGk9W107dD1YKHQpO2Zvcih2YXIgYT0tMSxvPXRoaXMubGVuZ3RoOysrYTxvOylmb3IodmFyIHM9dGhpc1thXSxsPS0xLGM9cy5sZW5ndGg7KytsPGM7KShyPXNbbF0pJiYoaS5wdXNoKGU9bih0LmNhbGwocixyLl9fZGF0YV9fLGwsYSkpKSxlLnBhcmVudE5vZGU9cik7cmV0dXJuIFYoaSl9O3ZhciBaPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixKPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpaLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gSyhlLHIpe3JldHVybiBlPXQubnMucXVhbGlmeShlKSxudWxsPT1yP2UubG9jYWw/ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9OmZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9OiJmdW5jdGlvbiI9PXR5cGVvZiByP2UubG9jYWw/ZnVuY3Rpb24oKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT10P3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX06ZnVuY3Rpb24oKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT10P3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUsdCl9OmUubG9jYWw/ZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX06ZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBRKHQpe3JldHVybiB0LnRyaW0oKS5yZXBsYWNlKC9ccysvZywiICIpfWZ1bmN0aW9uICQoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIig/Ol58XFxzKykiK3QucmVxdW90ZShlKSsiKD86XFxzK3wkKSIsImciKX1mdW5jdGlvbiB0dCh0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIGV0KHQsZSl7dmFyIHI9KHQ9dHQodCkubWFwKHJ0KSkubGVuZ3RoO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7Zm9yKHZhciBuPS0xLGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7KytuPHI7KXRbbl0odGhpcyxpKX06ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPHI7KXRbbl0odGhpcyxlKX19ZnVuY3Rpb24gcnQodCl7dmFyIGU9JCh0KTtyZXR1cm4gZnVuY3Rpb24ocixuKXtpZihpPXIuY2xhc3NMaXN0KXJldHVybiBuP2kuYWRkKHQpOmkucmVtb3ZlKHQpO3ZhciBpPXIuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIjtuPyhlLmxhc3RJbmRleD0wLGUudGVzdChpKXx8ci5zZXRBdHRyaWJ1dGUoImNsYXNzIixRKGkrIiAiK3QpKSk6ci5zZXRBdHRyaWJ1dGUoImNsYXNzIixRKGkucmVwbGFjZShlLCIgIikpKX19ZnVuY3Rpb24gbnQodCxlLHIpe3JldHVybiBudWxsPT1lP2Z1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX06ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4scil9OmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUscil9fWZ1bmN0aW9uIGl0KHQsZSl7cmV0dXJuIG51bGw9PWU/ZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX06ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09cn06ZnVuY3Rpb24oKXt0aGlzW3RdPWV9fWZ1bmN0aW9uIGF0KGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6KGU9dC5ucy5xdWFsaWZ5KGUpKS5sb2NhbD9mdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuc3BhY2UsZS5sb2NhbCl9OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1aJiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1aP3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBvdCgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIHN0KHQpe3JldHVybntfX2RhdGFfXzp0fX1mdW5jdGlvbiBsdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRyh0aGlzLHQpfX1mdW5jdGlvbiBjdCh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aHx8KHQ9aCksZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSYmcj90KGUuX19kYXRhX18sci5fX2RhdGFfXyk6IWUtIXJ9fWZ1bmN0aW9uIHV0KHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47cisrKWZvcih2YXIgaSxhPXRbcl0sbz0wLHM9YS5sZW5ndGg7bzxzO28rKykoaT1hW29dKSYmZShpLG8scik7cmV0dXJuIHR9ZnVuY3Rpb24gZnQodCl7cmV0dXJuIFUodCxodCksdH10Lm5zPXtwcmVmaXg6SixxdWFsaWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiOiIpLHI9dDtyZXR1cm4gZT49MCYmInhtbG5zIiE9PShyPXQuc2xpY2UoMCxlKSkmJih0PXQuc2xpY2UoZSsxKSksSi5oYXNPd25Qcm9wZXJ0eShyKT97c3BhY2U6SltyXSxsb2NhbDp0fTp0fX0sWS5hdHRyPWZ1bmN0aW9uKGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybihlPXQubnMucXVhbGlmeShlKSkubG9jYWw/bi5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOm4uZ2V0QXR0cmlidXRlKGUpfWZvcihyIGluIGUpdGhpcy5lYWNoKEsocixlW3JdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChLKGUscikpfSxZLmNsYXNzZWQ9ZnVuY3Rpb24odCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIHI9dGhpcy5ub2RlKCksbj0odD10dCh0KSkubGVuZ3RoLGk9LTE7aWYoZT1yLmNsYXNzTGlzdCl7Zm9yKDsrK2k8bjspaWYoIWUuY29udGFpbnModFtpXSkpcmV0dXJuITF9ZWxzZSBmb3IoZT1yLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsrK2k8bjspaWYoISQodFtpXSkudGVzdChlKSlyZXR1cm4hMTtyZXR1cm4hMH1mb3IoZSBpbiB0KXRoaXMuZWFjaChldChlLHRbZV0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKGV0KHQsZSkpfSxZLnN0eWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO2lmKG48Myl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXtmb3IociBpbiBuPDImJihlPSIiKSx0KXRoaXMuZWFjaChudChyLHRbcl0sZSkpO3JldHVybiB0aGlzfWlmKG48Mil7dmFyIGk9dGhpcy5ub2RlKCk7cmV0dXJuIG8oaSkuZ2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9cj0iIn1yZXR1cm4gdGhpcy5lYWNoKG50KHQsZSxyKSl9LFkucHJvcGVydHk9ZnVuY3Rpb24odCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdGhpcy5ub2RlKClbdF07Zm9yKGUgaW4gdCl0aGlzLmVhY2goaXQoZSx0W2VdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChpdCh0LGUpKX0sWS50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfTpudWxsPT10P2Z1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD0iIn06ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9KTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0sWS5odG1sPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX06bnVsbD09dD9mdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPSIifTpmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9KTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LFkuYXBwZW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0PWF0KHQpLHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pKX0sWS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1hdCh0KSxlPVcoZSksdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pKX0sWS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKG90KX0sWS5kYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPS0xLGE9dGhpcy5sZW5ndGg7aWYoIWFyZ3VtZW50cy5sZW5ndGgpe2Zvcih0PW5ldyBBcnJheShhPShyPXRoaXNbMF0pLmxlbmd0aCk7KytpPGE7KShuPXJbaV0pJiYodFtpXT1uLl9fZGF0YV9fKTtyZXR1cm4gdH1mdW5jdGlvbiBvKHQscil7dmFyIG4saSxhLG89dC5sZW5ndGgsdT1yLmxlbmd0aCxmPU1hdGgubWluKG8sdSksaD1uZXcgQXJyYXkodSkscD1uZXcgQXJyYXkodSksZD1uZXcgQXJyYXkobyk7aWYoZSl7dmFyIG0sZz1uZXcgXyx2PW5ldyBBcnJheShvKTtmb3Iobj0tMTsrK248bzspKGk9dFtuXSkmJihnLmhhcyhtPWUuY2FsbChpLGkuX19kYXRhX18sbikpP2Rbbl09aTpnLnNldChtLGkpLHZbbl09bSk7Zm9yKG49LTE7KytuPHU7KShpPWcuZ2V0KG09ZS5jYWxsKHIsYT1yW25dLG4pKSk/ITAhPT1pJiYoaFtuXT1pLGkuX19kYXRhX189YSk6cFtuXT1zdChhKSxnLnNldChtLCEwKTtmb3Iobj0tMTsrK248bzspbiBpbiB2JiYhMCE9PWcuZ2V0KHZbbl0pJiYoZFtuXT10W25dKX1lbHNle2ZvcihuPS0xOysrbjxmOylpPXRbbl0sYT1yW25dLGk/KGkuX19kYXRhX189YSxoW25dPWkpOnBbbl09c3QoYSk7Zm9yKDtuPHU7KytuKXBbbl09c3QocltuXSk7Zm9yKDtuPG87KytuKWRbbl09dFtuXX1wLnVwZGF0ZT1oLHAucGFyZW50Tm9kZT1oLnBhcmVudE5vZGU9ZC5wYXJlbnROb2RlPXQucGFyZW50Tm9kZSxzLnB1c2gocCksbC5wdXNoKGgpLGMucHVzaChkKX12YXIgcz1mdChbXSksbD1WKFtdKSxjPVYoW10pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KWZvcig7KytpPGE7KW8ocj10aGlzW2ldLHQuY2FsbChyLHIucGFyZW50Tm9kZS5fX2RhdGFfXyxpKSk7ZWxzZSBmb3IoOysraTxhOylvKHI9dGhpc1tpXSx0KTtyZXR1cm4gbC5lbnRlcj1mdW5jdGlvbigpe3JldHVybiBzfSxsLmV4aXQ9ZnVuY3Rpb24oKXtyZXR1cm4gY30sbH0sWS5kYXR1bT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iKX0sWS5maWx0ZXI9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9W107ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWx0KHQpKTtmb3IodmFyIGE9MCxvPXRoaXMubGVuZ3RoO2E8bzthKyspe2kucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9KHI9dGhpc1thXSkucGFyZW50Tm9kZTtmb3IodmFyIHM9MCxsPXIubGVuZ3RoO3M8bDtzKyspKG49cltzXSkmJnQuY2FsbChuLG4uX19kYXRhX18scyxhKSYmZS5wdXNoKG4pfXJldHVybiBWKGkpfSxZLm9yZGVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xLGU9dGhpcy5sZW5ndGg7Kyt0PGU7KWZvcih2YXIgcixuPXRoaXNbdF0saT1uLmxlbmd0aC0xLGE9bltpXTstLWk+PTA7KShyPW5baV0pJiYoYSYmYSE9PXIubmV4dFNpYmxpbmcmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixhKSxhPXIpO3JldHVybiB0aGlzfSxZLnNvcnQ9ZnVuY3Rpb24odCl7dD1jdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7Zm9yKHZhciBlPS0xLHI9dGhpcy5sZW5ndGg7KytlPHI7KXRoaXNbZV0uc29ydCh0KTtyZXR1cm4gdGhpcy5vcmRlcigpfSxZLmVhY2g9ZnVuY3Rpb24odCl7cmV0dXJuIHV0KHRoaXMsKGZ1bmN0aW9uKGUscixuKXt0LmNhbGwoZSxlLl9fZGF0YV9fLHIsbil9KSl9LFkuY2FsbD1mdW5jdGlvbih0KXt2YXIgZT1uKGFyZ3VtZW50cyk7cmV0dXJuIHQuYXBwbHkoZVswXT10aGlzLGUpLHRoaXN9LFkuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LFkubm9kZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5sZW5ndGg7dDxlO3QrKylmb3IodmFyIHI9dGhpc1t0XSxuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXt2YXIgYT1yW25dO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LFkuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHV0KHRoaXMsKGZ1bmN0aW9uKCl7Kyt0fSkpLHR9O3ZhciBodD1bXTtmdW5jdGlvbiBwdCh0KXt2YXIgZSxyO3JldHVybiBmdW5jdGlvbihuLGksYSl7dmFyIG8scz10W2FdLnVwZGF0ZSxsPXMubGVuZ3RoO2ZvcihhIT1yJiYocj1hLGU9MCksaT49ZSYmKGU9aSsxKTshKG89c1tlXSkmJisrZTxsOyk7cmV0dXJuIG99fWZ1bmN0aW9uIGR0KGUscixpKXt2YXIgYT0iX19vbiIrZSxvPWUuaW5kZXhPZigiLiIpLHM9Z3Q7bz4wJiYoZT1lLnNsaWNlKDAsbykpO3ZhciBsPW10LmdldChlKTtmdW5jdGlvbiBjKCl7dmFyIHQ9dGhpc1thXTt0JiYodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGUsdCx0LiQpLGRlbGV0ZSB0aGlzW2FdKX1yZXR1cm4gbCYmKGU9bCxzPXZ0KSxvP3I/ZnVuY3Rpb24oKXt2YXIgdD1zKHIsbihhcmd1bWVudHMpKTtjLmNhbGwodGhpcyksdGhpcy5hZGRFdmVudExpc3RlbmVyKGUsdGhpc1thXT10LHQuJD1pKSx0Ll89cn06YzpyP3o6ZnVuY3Rpb24oKXt2YXIgcixuPW5ldyBSZWdFeHAoIl5fX29uKFteLl0rKSIrdC5yZXF1b3RlKGUpKyIkIik7Zm9yKHZhciBpIGluIHRoaXMpaWYocj1pLm1hdGNoKG4pKXt2YXIgYT10aGlzW2ldO3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihyWzFdLGEsYS4kKSxkZWxldGUgdGhpc1tpXX19fXQuc2VsZWN0aW9uLmVudGVyPWZ0LHQuc2VsZWN0aW9uLmVudGVyLnByb3RvdHlwZT1odCxodC5hcHBlbmQ9WS5hcHBlbmQsaHQuZW1wdHk9WS5lbXB0eSxodC5ub2RlPVkubm9kZSxodC5jYWxsPVkuY2FsbCxodC5zaXplPVkuc2l6ZSxodC5zZWxlY3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpLGEsbz1bXSxzPS0xLGw9dGhpcy5sZW5ndGg7KytzPGw7KXtuPShpPXRoaXNbc10pLnVwZGF0ZSxvLnB1c2goZT1bXSksZS5wYXJlbnROb2RlPWkucGFyZW50Tm9kZTtmb3IodmFyIGM9LTEsdT1pLmxlbmd0aDsrK2M8dTspKGE9aVtjXSk/KGUucHVzaChuW2NdPXI9dC5jYWxsKGkucGFyZW50Tm9kZSxhLl9fZGF0YV9fLGMscykpLHIuX19kYXRhX189YS5fX2RhdGFfXyk6ZS5wdXNoKG51bGwpfXJldHVybiBWKG8pfSxodC5pbnNlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYoZT1wdCh0aGlzKSksWS5pbnNlcnQuY2FsbCh0aGlzLHQsZSl9LHQuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oZT1bSCh0LGkpXSkucGFyZW50Tm9kZT1pLmRvY3VtZW50RWxlbWVudDooZT1bdF0pLnBhcmVudE5vZGU9YSh0KSxWKFtlXSl9LHQuc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oZT1uKHEodCxpKSkpLnBhcmVudE5vZGU9aS5kb2N1bWVudEVsZW1lbnQ6KGU9bih0KSkucGFyZW50Tm9kZT1udWxsLFYoW2VdKX0sWS5vbj1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuPDMpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7Zm9yKHIgaW4gbjwyJiYoZT0hMSksdCl0aGlzLmVhY2goZHQocix0W3JdLGUpKTtyZXR1cm4gdGhpc31pZihuPDIpcmV0dXJuKG49dGhpcy5ub2RlKClbIl9fb24iK3RdKSYmbi5fO3I9ITF9cmV0dXJuIHRoaXMuZWFjaChkdCh0LGUscikpfTt2YXIgbXQ9dC5tYXAoe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSk7ZnVuY3Rpb24gZ3QoZSxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9dC5ldmVudDt0LmV2ZW50PW4sclswXT10aGlzLl9fZGF0YV9fO3RyeXtlLmFwcGx5KHRoaXMscil9ZmluYWxseXt0LmV2ZW50PWl9fX1mdW5jdGlvbiB2dCh0LGUpe3ZhciByPWd0KHQsZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQucmVsYXRlZFRhcmdldDtlJiYoZT09PXRoaXN8fDgmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHIuY2FsbCh0aGlzLHQpfX1pJiZtdC5mb3JFYWNoKChmdW5jdGlvbih0KXsib24iK3QgaW4gaSYmbXQucmVtb3ZlKHQpfSkpO3ZhciB5dCx4dD0wO2Z1bmN0aW9uIGJ0KGUpe3ZhciByPSIuZHJhZ3N1cHByZXNzLSIrICsreHQsbj0iY2xpY2siK3IsaT10LnNlbGVjdChvKGUpKS5vbigidG91Y2htb3ZlIityLEYpLm9uKCJkcmFnc3RhcnQiK3IsRikub24oInNlbGVjdHN0YXJ0IityLEYpO2lmKG51bGw9PXl0JiYoeXQ9ISgib25zZWxlY3RzdGFydCJpbiBlKSYmSShlLnN0eWxlLCJ1c2VyU2VsZWN0IikpLHl0KXt2YXIgcz1hKGUpLnN0eWxlLGw9c1t5dF07c1t5dF09Im5vbmUifXJldHVybiBmdW5jdGlvbih0KXtpZihpLm9uKHIsbnVsbCkseXQmJihzW3l0XT1sKSx0KXt2YXIgZT1mdW5jdGlvbigpe2kub24obixudWxsKX07aS5vbihuLChmdW5jdGlvbigpe0YoKSxlKCl9KSwhMCksc2V0VGltZW91dChlLDApfX19dC5tb3VzZT1mdW5jdGlvbih0KXtyZXR1cm4gd3QodCxCKCkpfTt2YXIgX3Q9dGhpcy5uYXZpZ2F0b3ImJi9XZWJLaXQvLnRlc3QodGhpcy5uYXZpZ2F0b3IudXNlckFnZW50KT8tMTowO2Z1bmN0aW9uIHd0KGUscil7ci5jaGFuZ2VkVG91Y2hlcyYmKHI9ci5jaGFuZ2VkVG91Y2hlc1swXSk7dmFyIG49ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYobi5jcmVhdGVTVkdQb2ludCl7dmFyIGk9bi5jcmVhdGVTVkdQb2ludCgpO2lmKF90PDApe3ZhciBhPW8oZSk7aWYoYS5zY3JvbGxYfHxhLnNjcm9sbFkpe3ZhciBzPShuPXQuc2VsZWN0KCJib2R5IikuYXBwZW5kKCJzdmciKS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAscGFkZGluZzowLGJvcmRlcjoibm9uZSJ9LCJpbXBvcnRhbnQiKSlbMF1bMF0uZ2V0U2NyZWVuQ1RNKCk7X3Q9IShzLmZ8fHMuZSksbi5yZW1vdmUoKX19cmV0dXJuIF90PyhpLng9ci5wYWdlWCxpLnk9ci5wYWdlWSk6KGkueD1yLmNsaWVudFgsaS55PXIuY2xpZW50WSksWyhpPWkubWF0cml4VHJhbnNmb3JtKGUuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxpLnldfXZhciBsPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3IuY2xpZW50WC1sLmxlZnQtZS5jbGllbnRMZWZ0LHIuY2xpZW50WS1sLnRvcC1lLmNsaWVudFRvcF19ZnVuY3Rpb24gVHQoKXtyZXR1cm4gdC5ldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyfXQudG91Y2g9ZnVuY3Rpb24odCxlLHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9ZSxlPUIoKS5jaGFuZ2VkVG91Y2hlcyksZSlmb3IodmFyIG4saT0wLGE9ZS5sZW5ndGg7aTxhOysraSlpZigobj1lW2ldKS5pZGVudGlmaWVyPT09cilyZXR1cm4gd3QodCxuKX0sdC5iZWhhdmlvci5kcmFnPWZ1bmN0aW9uKCl7dmFyIGU9TihhLCJkcmFnIiwiZHJhZ3N0YXJ0IiwiZHJhZ2VuZCIpLHI9bnVsbCxuPXMoeix0Lm1vdXNlLG8sIm1vdXNlbW92ZSIsIm1vdXNldXAiKSxpPXMoVHQsdC50b3VjaCxDLCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIpO2Z1bmN0aW9uIGEoKXt0aGlzLm9uKCJtb3VzZWRvd24uZHJhZyIsbikub24oInRvdWNoc3RhcnQuZHJhZyIsaSl9ZnVuY3Rpb24gcyhuLGksYSxvLHMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsLGM9dGhpcyx1PXQuZXZlbnQudGFyZ2V0LmNvcnJlc3BvbmRpbmdFbGVtZW50fHx0LmV2ZW50LnRhcmdldCxmPWMucGFyZW50Tm9kZSxoPWUub2YoYyxhcmd1bWVudHMpLHA9MCxkPW4oKSxtPSIuZHJhZyIrKG51bGw9PWQ/IiI6Ii0iK2QpLGc9dC5zZWxlY3QoYSh1KSkub24obyttLHgpLm9uKHMrbSxiKSx2PWJ0KHUpLHk9aShmLGQpO2Z1bmN0aW9uIHgoKXt2YXIgdCxlLHI9aShmLGQpO3ImJih0PXJbMF0teVswXSxlPXJbMV0teVsxXSxwfD10fGUseT1yLGgoe3R5cGU6ImRyYWciLHg6clswXStsWzBdLHk6clsxXStsWzFdLGR4OnQsZHk6ZX0pKX1mdW5jdGlvbiBiKCl7aShmLGQpJiYoZy5vbihvK20sbnVsbCkub24ocyttLG51bGwpLHYocCksaCh7dHlwZToiZHJhZ2VuZCJ9KSl9bD1yP1sobD1yLmFwcGx5KGMsYXJndW1lbnRzKSkueC15WzBdLGwueS15WzFdXTpbMCwwXSxoKHt0eXBlOiJkcmFnc3RhcnQifSl9fXJldHVybiBhLm9yaWdpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGEpOnJ9LHQucmViaW5kKGEsZSwib24iKX0sdC50b3VjaGVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKGU9QigpLnRvdWNoZXMpLGU/bihlKS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciByPXd0KHQsZSk7cmV0dXJuIHIuaWRlbnRpZmllcj1lLmlkZW50aWZpZXIscn0pKTpbXX07dmFyIGt0PTFlLTYsQXQ9TWF0aC5QSSxNdD0yKkF0LFN0PU10LWt0LEV0PUF0LzIsTHQ9QXQvMTgwLEN0PTE4MC9BdDtmdW5jdGlvbiBQdCh0KXtyZXR1cm4gdD4xP0V0OnQ8LTE/LUV0Ok1hdGguYXNpbih0KX1mdW5jdGlvbiBJdCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn12YXIgT3Q9TWF0aC5TUVJUMjt0LmludGVycG9sYXRlWm9vbT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10WzBdLGE9dFsxXSxvPXRbMl0scz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1zLWksZj1sLWEsaD11KnUrZipmO2lmKGg8MWUtMTIpbj1NYXRoLmxvZyhjL28pL090LHI9ZnVuY3Rpb24odCl7cmV0dXJuW2krdCp1LGErdCpmLG8qTWF0aC5leHAoT3QqdCpuKV19O2Vsc2V7dmFyIHA9TWF0aC5zcXJ0KGgpLGQ9KGMqYy1vKm8rNCpoKS8oMipvKjIqcCksbT0oYypjLW8qby00KmgpLygyKmMqMipwKSxnPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCksdj1NYXRoLmxvZyhNYXRoLnNxcnQobSptKzEpLW0pO249KHYtZykvT3Qscj1mdW5jdGlvbih0KXt2YXIgZSxyPXQqbixzPUl0KGcpLGw9by8oMipwKSoocyooZT1PdCpyK2csKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpKS1mdW5jdGlvbih0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpLTEvdCkvMn0oZykpO3JldHVybltpK2wqdSxhK2wqZixvKnMvSXQoT3QqcitnKV19fXJldHVybiByLmR1cmF0aW9uPTFlMypuLHJ9LHQuYmVoYXZpb3Iuem9vbT1mdW5jdGlvbigpe3ZhciBlLHIsbixhLHMsbCxjLHUsZixoPXt4OjAseTowLGs6MX0scD1bOTYwLDUwMF0sZD1SdCxtPTI1MCxnPTAsdj0ibW91c2Vkb3duLnpvb20iLHk9Im1vdXNlbW92ZS56b29tIix4PSJtb3VzZXVwLnpvb20iLGI9InRvdWNoc3RhcnQuem9vbSIsXz1OKHcsInpvb21zdGFydCIsInpvb20iLCJ6b29tZW5kIik7ZnVuY3Rpb24gdyh0KXt0Lm9uKHYsUCkub24oRHQrIi56b29tIixPKS5vbigiZGJsY2xpY2suem9vbSIseikub24oYixJKX1mdW5jdGlvbiBUKHQpe3JldHVyblsodFswXS1oLngpL2guaywodFsxXS1oLnkpL2gua119ZnVuY3Rpb24gayh0KXtoLms9TWF0aC5tYXgoZFswXSxNYXRoLm1pbihkWzFdLHQpKX1mdW5jdGlvbiBBKHQsZSl7ZT1mdW5jdGlvbih0KXtyZXR1cm5bdFswXSpoLmsraC54LHRbMV0qaC5rK2gueV19KGUpLGgueCs9dFswXS1lWzBdLGgueSs9dFsxXS1lWzFdfWZ1bmN0aW9uIE0oZSxuLGksYSl7ZS5fX2NoYXJ0X189e3g6aC54LHk6aC55LGs6aC5rfSxrKE1hdGgucG93KDIsYSkpLEEocj1uLGkpLGU9dC5zZWxlY3QoZSksbT4wJiYoZT1lLnRyYW5zaXRpb24oKS5kdXJhdGlvbihtKSksZS5jYWxsKHcuZXZlbnQpfWZ1bmN0aW9uIFMoKXtjJiZjLmRvbWFpbihsLnJhbmdlKCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4odC1oLngpL2gua30pKS5tYXAobC5pbnZlcnQpKSxmJiZmLmRvbWFpbih1LnJhbmdlKCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4odC1oLnkpL2gua30pKS5tYXAodS5pbnZlcnQpKX1mdW5jdGlvbiBFKHQpe2crK3x8dCh7dHlwZToiem9vbXN0YXJ0In0pfWZ1bmN0aW9uIEwodCl7UygpLHQoe3R5cGU6Inpvb20iLHNjYWxlOmguayx0cmFuc2xhdGU6W2gueCxoLnldfSl9ZnVuY3Rpb24gQyh0KXstLWd8fCh0KHt0eXBlOiJ6b29tZW5kIn0pLHI9bnVsbCl9ZnVuY3Rpb24gUCgpe3ZhciBlPXRoaXMscj1fLm9mKGUsYXJndW1lbnRzKSxuPTAsaT10LnNlbGVjdChvKGUpKS5vbih5LGwpLm9uKHgsYyksYT1UKHQubW91c2UoZSkpLHM9YnQoZSk7ZnVuY3Rpb24gbCgpe249MSxBKHQubW91c2UoZSksYSksTChyKX1mdW5jdGlvbiBjKCl7aS5vbih5LG51bGwpLm9uKHgsbnVsbCkscyhuKSxDKHIpfURpLmNhbGwoZSksRShyKX1mdW5jdGlvbiBJKCl7dmFyIGUscj10aGlzLG49Xy5vZihyLGFyZ3VtZW50cyksaT17fSxhPTAsbz0iLnpvb20tIit0LmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIsbD0idG91Y2htb3ZlIitvLGM9InRvdWNoZW5kIitvLHU9W10sZj10LnNlbGVjdChyKSxwPWJ0KHIpO2Z1bmN0aW9uIGQoKXt2YXIgbj10LnRvdWNoZXMocik7cmV0dXJuIGU9aC5rLG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5pZGVudGlmaWVyIGluIGkmJihpW3QuaWRlbnRpZmllcl09VCh0KSl9KSksbn1mdW5jdGlvbiBtKCl7dmFyIGU9dC5ldmVudC50YXJnZXQ7dC5zZWxlY3QoZSkub24obCxnKS5vbihjLHkpLHUucHVzaChlKTtmb3IodmFyIG49dC5ldmVudC5jaGFuZ2VkVG91Y2hlcyxvPTAsZj1uLmxlbmd0aDtvPGY7KytvKWlbbltvXS5pZGVudGlmaWVyXT1udWxsO3ZhciBwPWQoKSxtPURhdGUubm93KCk7aWYoMT09PXAubGVuZ3RoKXtpZihtLXM8NTAwKXt2YXIgdj1wWzBdO00ocix2LGlbdi5pZGVudGlmaWVyXSxNYXRoLmZsb29yKE1hdGgubG9nKGguaykvTWF0aC5MTjIpKzEpLEYoKX1zPW19ZWxzZSBpZihwLmxlbmd0aD4xKXt2PXBbMF07dmFyIHg9cFsxXSxiPXZbMF0teFswXSxfPXZbMV0teFsxXTthPWIqYitfKl99fWZ1bmN0aW9uIGcoKXt2YXIgbyxsLGMsdSxmPXQudG91Y2hlcyhyKTtEaS5jYWxsKHIpO2Zvcih2YXIgaD0wLHA9Zi5sZW5ndGg7aDxwOysraCx1PW51bGwpaWYoYz1mW2hdLHU9aVtjLmlkZW50aWZpZXJdKXtpZihsKWJyZWFrO289YyxsPXV9aWYodSl7dmFyIGQ9KGQ9Y1swXS1vWzBdKSpkKyhkPWNbMV0tb1sxXSkqZCxtPWEmJk1hdGguc3FydChkL2EpO289WyhvWzBdK2NbMF0pLzIsKG9bMV0rY1sxXSkvMl0sbD1bKGxbMF0rdVswXSkvMiwobFsxXSt1WzFdKS8yXSxrKG0qZSl9cz1udWxsLEEobyxsKSxMKG4pfWZ1bmN0aW9uIHkoKXtpZih0LmV2ZW50LnRvdWNoZXMubGVuZ3RoKXtmb3IodmFyIGU9dC5ldmVudC5jaGFuZ2VkVG91Y2hlcyxyPTAsYT1lLmxlbmd0aDtyPGE7KytyKWRlbGV0ZSBpW2Vbcl0uaWRlbnRpZmllcl07Zm9yKHZhciBzIGluIGkpcmV0dXJuIHZvaWQgZCgpfXQuc2VsZWN0QWxsKHUpLm9uKG8sbnVsbCksZi5vbih2LFApLm9uKGIsSSkscCgpLEMobil9bSgpLEUobiksZi5vbih2LG51bGwpLm9uKGIsbSl9ZnVuY3Rpb24gTygpe3ZhciBpPV8ub2YodGhpcyxhcmd1bWVudHMpO2E/Y2xlYXJUaW1lb3V0KGEpOihEaS5jYWxsKHRoaXMpLGU9VChyPW58fHQubW91c2UodGhpcykpLEUoaSkpLGE9c2V0VGltZW91dCgoZnVuY3Rpb24oKXthPW51bGwsQyhpKX0pLDUwKSxGKCksayhNYXRoLnBvdygyLC4wMDIqenQoKSkqaC5rKSxBKHIsZSksTChpKX1mdW5jdGlvbiB6KCl7dmFyIGU9dC5tb3VzZSh0aGlzKSxyPU1hdGgubG9nKGguaykvTWF0aC5MTjI7TSh0aGlzLGUsVChlKSx0LmV2ZW50LnNoaWZ0S2V5P01hdGguY2VpbChyKS0xOk1hdGguZmxvb3IocikrMSl9cmV0dXJuIER0fHwoRHQ9Im9ud2hlZWwiaW4gaT8oenQ9ZnVuY3Rpb24oKXtyZXR1cm4tdC5ldmVudC5kZWx0YVkqKHQuZXZlbnQuZGVsdGFNb2RlPzEyMDoxKX0sIndoZWVsIik6Im9ubW91c2V3aGVlbCJpbiBpPyh6dD1mdW5jdGlvbigpe3JldHVybiB0LmV2ZW50LndoZWVsRGVsdGF9LCJtb3VzZXdoZWVsIik6KHp0PWZ1bmN0aW9uKCl7cmV0dXJuLXQuZXZlbnQuZGV0YWlsfSwiTW96TW91c2VQaXhlbFNjcm9sbCIpKSx3LmV2ZW50PWZ1bmN0aW9uKGUpe2UuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT1fLm9mKHRoaXMsYXJndW1lbnRzKSxuPWg7Qmk/dC5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goInN0YXJ0Lnpvb20iLChmdW5jdGlvbigpe2g9dGhpcy5fX2NoYXJ0X198fHt4OjAseTowLGs6MX0sRShlKX0pKS50d2Vlbigiem9vbTp6b29tIiwoZnVuY3Rpb24oKXt2YXIgaT1wWzBdLGE9cFsxXSxvPXI/clswXTppLzIscz1yP3JbMV06YS8yLGw9dC5pbnRlcnBvbGF0ZVpvb20oWyhvLWgueCkvaC5rLChzLWgueSkvaC5rLGkvaC5rXSxbKG8tbi54KS9uLmssKHMtbi55KS9uLmssaS9uLmtdKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9bCh0KSxuPWkvclsyXTt0aGlzLl9fY2hhcnRfXz1oPXt4Om8tclswXSpuLHk6cy1yWzFdKm4sazpufSxMKGUpfX0pKS5lYWNoKCJpbnRlcnJ1cHQuem9vbSIsKGZ1bmN0aW9uKCl7QyhlKX0pKS5lYWNoKCJlbmQuem9vbSIsKGZ1bmN0aW9uKCl7QyhlKX0pKToodGhpcy5fX2NoYXJ0X189aCxFKGUpLEwoZSksQyhlKSl9KSl9LHcudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXt4Oit0WzBdLHk6K3RbMV0sazpoLmt9LFMoKSx3KTpbaC54LGgueV19LHcuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9e3g6aC54LHk6aC55LGs6bnVsbH0saygrdCksUygpLHcpOmgua30sdy5zY2FsZUV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1udWxsPT10P1J0OlsrdFswXSwrdFsxXV0sdyk6ZH0sdy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCYmWyt0WzBdLCt0WzFdXSx3KTpufSx3LnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dCYmWyt0WzBdLCt0WzFdXSx3KTpwfSx3LmR1cmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPSt0LHcpOm19LHcueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LGw9dC5jb3B5KCksaD17eDowLHk6MCxrOjF9LHcpOmN9LHcueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj10LHU9dC5jb3B5KCksaD17eDowLHk6MCxrOjF9LHcpOmZ9LHQucmViaW5kKHcsXywib24iKX07dmFyIHp0LER0LFJ0PVswLDEvMF07ZnVuY3Rpb24gRnQoKXt9ZnVuY3Rpb24gQnQodCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgQnQ/KHRoaXMuaD0rdCx0aGlzLnM9K2Usdm9pZCh0aGlzLmw9K3IpKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIEJ0P25ldyBCdCh0LmgsdC5zLHQubCk6bmUoIiIrdCxpZSxCdCk6bmV3IEJ0KHQsZSxyKX10LmNvbG9yPUZ0LEZ0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifSx0LmhzbD1CdDt2YXIgTnQ9QnQucHJvdG90eXBlPW5ldyBGdDtmdW5jdGlvbiBqdCh0LGUscil7dmFyIG4saTtmdW5jdGlvbiBhKHQpe3JldHVybiBNYXRoLnJvdW5kKDI1NSpmdW5jdGlvbih0KXtyZXR1cm4gdD4zNjA/dC09MzYwOnQ8MCYmKHQrPTM2MCksdDw2MD9uKyhpLW4pKnQvNjA6dDwxODA/aTp0PDI0MD9uKyhpLW4pKigyNDAtdCkvNjA6bn0odCkpfXJldHVybiB0PWlzTmFOKHQpPzA6KHQlPTM2MCk8MD90KzM2MDp0LGU9aXNOYU4oZSl8fGU8MD8wOmU+MT8xOmUsbj0yKihyPXI8MD8wOnI+MT8xOnIpLShpPXI8PS41P3IqKDErZSk6citlLXIqZSksbmV3IFF0KGEodCsxMjApLGEodCksYSh0LTEyMCkpfWZ1bmN0aW9uIFV0KGUscixuKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFV0Pyh0aGlzLmg9K2UsdGhpcy5jPStyLHZvaWQodGhpcy5sPStuKSk6YXJndW1lbnRzLmxlbmd0aDwyP2UgaW5zdGFuY2VvZiBVdD9uZXcgVXQoZS5oLGUuYyxlLmwpOlh0KGUgaW5zdGFuY2VvZiBxdD9lLmw6KGU9YWUoKGU9dC5yZ2IoZSkpLnIsZS5nLGUuYikpLmwsZS5hLGUuYik6bmV3IFV0KGUscixuKX1OdC5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSksbmV3IEJ0KHRoaXMuaCx0aGlzLnMsdGhpcy5sL3QpfSxOdC5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpLG5ldyBCdCh0aGlzLmgsdGhpcy5zLHQqdGhpcy5sKX0sTnQucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIGp0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKX0sdC5oY2w9VXQ7dmFyIFZ0PVV0LnByb3RvdHlwZT1uZXcgRnQ7ZnVuY3Rpb24gSHQodCxlLHIpe3JldHVybiBpc05hTih0KSYmKHQ9MCksaXNOYU4oZSkmJihlPTApLG5ldyBxdChyLE1hdGguY29zKHQqPUx0KSplLE1hdGguc2luKHQpKmUpfWZ1bmN0aW9uIHF0KHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHF0Pyh0aGlzLmw9K3QsdGhpcy5hPStlLHZvaWQodGhpcy5iPStyKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBxdD9uZXcgcXQodC5sLHQuYSx0LmIpOnQgaW5zdGFuY2VvZiBVdD9IdCh0LmgsdC5jLHQubCk6YWUoKHQ9UXQodCkpLnIsdC5nLHQuYik6bmV3IHF0KHQsZSxyKX1WdC5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFV0KHRoaXMuaCx0aGlzLmMsTWF0aC5taW4oMTAwLHRoaXMubCtHdCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSl9LFZ0LmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFV0KHRoaXMuaCx0aGlzLmMsTWF0aC5tYXgoMCx0aGlzLmwtR3QqKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSkpfSxWdC5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gSHQodGhpcy5oLHRoaXMuYyx0aGlzLmwpLnJnYigpfSx0LmxhYj1xdDt2YXIgR3Q9MTgsWXQ9cXQucHJvdG90eXBlPW5ldyBGdDtmdW5jdGlvbiBXdCh0LGUscil7dmFyIG49KHQrMTYpLzExNixpPW4rZS81MDAsYT1uLXIvMjAwO3JldHVybiBuZXcgUXQoS3QoMy4yNDA0NTQyKihpPS45NTA0NypadChpKSktMS41MzcxMzg1KihuPTEqWnQobikpLS40OTg1MzE0KihhPTEuMDg4ODMqWnQoYSkpKSxLdCgtLjk2OTI2NippKzEuODc2MDEwOCpuKy4wNDE1NTYqYSksS3QoLjA1NTY0MzQqaS0uMjA0MDI1OSpuKzEuMDU3MjI1MiphKSl9ZnVuY3Rpb24gWHQodCxlLHIpe3JldHVybiB0PjA/bmV3IFV0KE1hdGguYXRhbjIocixlKSpDdCxNYXRoLnNxcnQoZSplK3IqciksdCk6bmV3IFV0KE5hTixOYU4sdCl9ZnVuY3Rpb24gWnQodCl7cmV0dXJuIHQ+LjIwNjg5MzAzND90KnQqdDoodC00LzI5KS83Ljc4NzAzN31mdW5jdGlvbiBKdCh0KXtyZXR1cm4gdD4uMDA4ODU2P01hdGgucG93KHQsMS8zKTo3Ljc4NzAzNyp0KzQvMjl9ZnVuY3Rpb24gS3QodCl7cmV0dXJuIE1hdGgucm91bmQoMjU1Kih0PD0uMDAzMDQ/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KSl9ZnVuY3Rpb24gUXQodCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgUXQ/KHRoaXMucj1+fnQsdGhpcy5nPX5+ZSx2b2lkKHRoaXMuYj1+fnIpKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIFF0P25ldyBRdCh0LnIsdC5nLHQuYik6bmUoIiIrdCxRdCxqdCk6bmV3IFF0KHQsZSxyKX1mdW5jdGlvbiAkdCh0KXtyZXR1cm4gbmV3IFF0KHQ+PjE2LHQ+PjgmMjU1LDI1NSZ0KX1mdW5jdGlvbiB0ZSh0KXtyZXR1cm4gJHQodCkrIiJ9WXQuYnJpZ2h0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBxdChNYXRoLm1pbigxMDAsdGhpcy5sK0d0Kihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpLHRoaXMuYSx0aGlzLmIpfSxZdC5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBxdChNYXRoLm1heCgwLHRoaXMubC1HdCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSx0aGlzLmEsdGhpcy5iKX0sWXQucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIFd0KHRoaXMubCx0aGlzLmEsdGhpcy5iKX0sdC5yZ2I9UXQ7dmFyIGVlPVF0LnByb3RvdHlwZT1uZXcgRnQ7ZnVuY3Rpb24gcmUodCl7cmV0dXJuIHQ8MTY/IjAiK01hdGgubWF4KDAsdCkudG9TdHJpbmcoMTYpOk1hdGgubWluKDI1NSx0KS50b1N0cmluZygxNil9ZnVuY3Rpb24gbmUodCxlLHIpe3ZhciBuLGksYSxvPTAscz0wLGw9MDtpZihuPS8oW2Etel0rKVwoKC4qKVwpLy5leGVjKHQ9dC50b0xvd2VyQ2FzZSgpKSlzd2l0Y2goaT1uWzJdLnNwbGl0KCIsIiksblsxXSl7Y2FzZSJoc2wiOnJldHVybiByKHBhcnNlRmxvYXQoaVswXSkscGFyc2VGbG9hdChpWzFdKS8xMDAscGFyc2VGbG9hdChpWzJdKS8xMDApO2Nhc2UicmdiIjpyZXR1cm4gZShzZShpWzBdKSxzZShpWzFdKSxzZShpWzJdKSl9cmV0dXJuKGE9bGUuZ2V0KHQpKT9lKGEucixhLmcsYS5iKToobnVsbD09dHx8IiMiIT09dC5jaGFyQXQoMCl8fGlzTmFOKGE9cGFyc2VJbnQodC5zbGljZSgxKSwxNikpfHwoND09PXQubGVuZ3RoPyhvPSgzODQwJmEpPj40LG98PW8+PjQscz0yNDAmYSxzfD1zPj40LGw9MTUmYSxsfD1sPDw0KTo3PT09dC5sZW5ndGgmJihvPSgxNjcxMTY4MCZhKT4+MTYscz0oNjUyODAmYSk+PjgsbD0yNTUmYSkpLGUobyxzLGwpKX1mdW5jdGlvbiBpZSh0LGUscil7dmFyIG4saSxhPU1hdGgubWluKHQvPTI1NSxlLz0yNTUsci89MjU1KSxvPU1hdGgubWF4KHQsZSxyKSxzPW8tYSxsPShvK2EpLzI7cmV0dXJuIHM/KGk9bDwuNT9zLyhvK2EpOnMvKDItby1hKSxuPXQ9PW8/KGUtcikvcysoZTxyPzY6MCk6ZT09bz8oci10KS9zKzI6KHQtZSkvcys0LG4qPTYwKToobj1OYU4saT1sPjAmJmw8MT8wOm4pLG5ldyBCdChuLGksbCl9ZnVuY3Rpb24gYWUodCxlLHIpe3ZhciBuPUp0KCguNDEyNDU2NCoodD1vZSh0KSkrLjM1NzU3NjEqKGU9b2UoZSkpKy4xODA0Mzc1KihyPW9lKHIpKSkvLjk1MDQ3KSxpPUp0KCguMjEyNjcyOSp0Ky43MTUxNTIyKmUrLjA3MjE3NSpyKS8xKTtyZXR1cm4gcXQoMTE2KmktMTYsNTAwKihuLWkpLDIwMCooaS1KdCgoLjAxOTMzMzkqdCsuMTE5MTkyKmUrLjk1MDMwNDEqcikvMS4wODg4MykpKX1mdW5jdGlvbiBvZSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBzZSh0KXt2YXIgZT1wYXJzZUZsb2F0KHQpO3JldHVybiIlIj09PXQuY2hhckF0KHQubGVuZ3RoLTEpP01hdGgucm91bmQoMi41NSplKTplfWVlLmJyaWdodGVyPWZ1bmN0aW9uKHQpe3Q9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpO3ZhciBlPXRoaXMucixyPXRoaXMuZyxuPXRoaXMuYixpPTMwO3JldHVybiBlfHxyfHxuPyhlJiZlPGkmJihlPWkpLHImJnI8aSYmKHI9aSksbiYmbjxpJiYobj1pKSxuZXcgUXQoTWF0aC5taW4oMjU1LGUvdCksTWF0aC5taW4oMjU1LHIvdCksTWF0aC5taW4oMjU1LG4vdCkpKTpuZXcgUXQoaSxpLGkpfSxlZS5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBRdCgodD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSkpKnRoaXMucix0KnRoaXMuZyx0KnRoaXMuYil9LGVlLmhzbD1mdW5jdGlvbigpe3JldHVybiBpZSh0aGlzLnIsdGhpcy5nLHRoaXMuYil9LGVlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIiMiK3JlKHRoaXMucikrcmUodGhpcy5nKStyZSh0aGlzLmIpfTt2YXIgbGU9dC5tYXAoe2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH0pO2Z1bmN0aW9uIGNlKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gdWUodCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiByJiYobj1yLHI9bnVsbCksZmUoZSxyLHQsbil9fWZ1bmN0aW9uIGZlKGUscixpLGEpe3ZhciBvPXt9LHM9dC5kaXNwYXRjaCgiYmVmb3Jlc2VuZCIsInByb2dyZXNzIiwibG9hZCIsImVycm9yIiksbD17fSxjPW5ldyBYTUxIdHRwUmVxdWVzdCx1PW51bGw7ZnVuY3Rpb24gZigpe3ZhciB0LGU9Yy5zdGF0dXM7aWYoIWUmJmZ1bmN0aW9uKHQpe3ZhciBlPXQucmVzcG9uc2VUeXBlO3JldHVybiBlJiYidGV4dCIhPT1lP3QucmVzcG9uc2U6dC5yZXNwb25zZVRleHR9KGMpfHxlPj0yMDAmJmU8MzAwfHwzMDQ9PT1lKXt0cnl7dD1pLmNhbGwobyxjKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBzLmVycm9yLmNhbGwobyx0KX1zLmxvYWQuY2FsbChvLHQpfWVsc2Ugcy5lcnJvci5jYWxsKG8sYyl9cmV0dXJuIHNlbGYuWERvbWFpblJlcXVlc3QmJiEoIndpdGhDcmVkZW50aWFscyJpbiBjKSYmL14oaHR0cChzKT86KT9cL1wvLy50ZXN0KGUpJiYoYz1uZXcgWERvbWFpblJlcXVlc3QpLCJvbmxvYWQiaW4gYz9jLm9ubG9hZD1jLm9uZXJyb3I9ZjpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2MucmVhZHlTdGF0ZT4zJiZmKCl9LGMub25wcm9ncmVzcz1mdW5jdGlvbihlKXt2YXIgcj10LmV2ZW50O3QuZXZlbnQ9ZTt0cnl7cy5wcm9ncmVzcy5jYWxsKG8sYyl9ZmluYWxseXt0LmV2ZW50PXJ9fSxvLmhlYWRlcj1mdW5jdGlvbih0LGUpe3JldHVybiB0PSh0KyIiKS50b0xvd2VyQ2FzZSgpLGFyZ3VtZW50cy5sZW5ndGg8Mj9sW3RdOihudWxsPT1lP2RlbGV0ZSBsW3RdOmxbdF09ZSsiIixvKX0sby5taW1lVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10P251bGw6dCsiIixvKTpyfSxvLnJlc3BvbnNlVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LG8pOnV9LG8ucmVzcG9uc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGk9dCxvfSxbImdldCIsInBvc3QiXS5mb3JFYWNoKChmdW5jdGlvbih0KXtvW3RdPWZ1bmN0aW9uKCl7cmV0dXJuIG8uc2VuZC5hcHBseShvLFt0XS5jb25jYXQobihhcmd1bWVudHMpKSl9fSkpLG8uc2VuZD1mdW5jdGlvbih0LG4saSl7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYoaT1uLG49bnVsbCksYy5vcGVuKHQsZSwhMCksbnVsbD09cnx8ImFjY2VwdCJpbiBsfHwobC5hY2NlcHQ9cisiLCovKiIpLGMuc2V0UmVxdWVzdEhlYWRlcilmb3IodmFyIGEgaW4gbCljLnNldFJlcXVlc3RIZWFkZXIoYSxsW2FdKTtyZXR1cm4gbnVsbCE9ciYmYy5vdmVycmlkZU1pbWVUeXBlJiZjLm92ZXJyaWRlTWltZVR5cGUociksbnVsbCE9dSYmKGMucmVzcG9uc2VUeXBlPXUpLG51bGwhPWkmJm8ub24oImVycm9yIixpKS5vbigibG9hZCIsKGZ1bmN0aW9uKHQpe2kobnVsbCx0KX0pKSxzLmJlZm9yZXNlbmQuY2FsbChvLGMpLGMuc2VuZChudWxsPT1uP251bGw6biksb30sby5hYm9ydD1mdW5jdGlvbigpe3JldHVybiBjLmFib3J0KCksb30sdC5yZWJpbmQobyxzLCJvbiIpLG51bGw9PWE/bzpvLmdldChmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RoP2Z1bmN0aW9uKGUscil7dChudWxsPT1lP3I6bnVsbCl9OnR9KGEpKX1sZS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2xlLnNldCh0LCR0KGUpKX0pKSx0LmZ1bmN0b3I9Y2UsdC54aHI9dWUoQyksdC5kc3Y9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgUmVnRXhwKCdbIicrdCsiXG5dIiksbj10LmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gaSh0LHIsbil7YXJndW1lbnRzLmxlbmd0aDwzJiYobj1yLHI9bnVsbCk7dmFyIGk9ZmUodCxlLG51bGw9PXI/YTpvKHIpLG4pO3JldHVybiBpLnJvdz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9pLnJlc3BvbnNlKG51bGw9PShyPXQpP2E6byh0KSk6cn0saX1mdW5jdGlvbiBhKHQpe3JldHVybiBpLnBhcnNlKHQucmVzcG9uc2VUZXh0KX1mdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gaS5wYXJzZShlLnJlc3BvbnNlVGV4dCx0KX19ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZS5tYXAobCkuam9pbih0KX1mdW5jdGlvbiBsKHQpe3JldHVybiByLnRlc3QodCk/JyInK3QucmVwbGFjZSgvXCIvZywnIiInKSsnIic6dH1yZXR1cm4gaS5wYXJzZT1mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBpLnBhcnNlUm93cyh0LChmdW5jdGlvbih0LG4pe2lmKHIpcmV0dXJuIHIodCxuLTEpO3ZhciBpPWZ1bmN0aW9uKGUpe2Zvcih2YXIgcj17fSxuPXQubGVuZ3RoLGk9MDtpPG47KytpKXJbdFtpXV09ZVtpXTtyZXR1cm4gcn07cj1lP2Z1bmN0aW9uKHQscil7cmV0dXJuIGUoaSh0KSxyKX06aX0pKX0saS5wYXJzZVJvd3M9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGE9e30sbz17fSxzPVtdLGw9dC5sZW5ndGgsYz0wLHU9MDtmdW5jdGlvbiBmKCl7aWYoYz49bClyZXR1cm4gbztpZihpKXJldHVybiBpPSExLGE7dmFyIGU9YztpZigzND09PXQuY2hhckNvZGVBdChlKSl7Zm9yKHZhciByPWU7cisrPGw7KWlmKDM0PT09dC5jaGFyQ29kZUF0KHIpKXtpZigzNCE9PXQuY2hhckNvZGVBdChyKzEpKWJyZWFrOysrcn1yZXR1cm4gYz1yKzIsMTM9PT0ocz10LmNoYXJDb2RlQXQocisxKSk/KGk9ITAsMTA9PT10LmNoYXJDb2RlQXQocisyKSYmKytjKToxMD09PXMmJihpPSEwKSx0LnNsaWNlKGUrMSxyKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtjPGw7KXt2YXIgcyx1PTE7aWYoMTA9PT0ocz10LmNoYXJDb2RlQXQoYysrKSkpaT0hMDtlbHNlIGlmKDEzPT09cylpPSEwLDEwPT09dC5jaGFyQ29kZUF0KGMpJiYoKytjLCsrdSk7ZWxzZSBpZihzIT09biljb250aW51ZTtyZXR1cm4gdC5zbGljZShlLGMtdSl9cmV0dXJuIHQuc2xpY2UoZSl9Zm9yKDsocj1mKCkpIT09bzspe2Zvcih2YXIgaD1bXTtyIT09YSYmciE9PW87KWgucHVzaChyKSxyPWYoKTtlJiZudWxsPT0oaD1lKGgsdSsrKSl8fHMucHVzaChoKX1yZXR1cm4gc30saS5mb3JtYXQ9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlWzBdKSlyZXR1cm4gaS5mb3JtYXRSb3dzKGUpO3ZhciByPW5ldyBMLG49W107cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpci5oYXMoZSl8fG4ucHVzaChyLmFkZChlKSl9KSksW24ubWFwKGwpLmpvaW4odCldLmNvbmNhdChlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbChlW3RdKX0pKS5qb2luKHQpfSkpKS5qb2luKCJcbiIpfSxpLmZvcm1hdFJvd3M9ZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKHMpLmpvaW4oIlxuIil9LGl9LHQuY3N2PXQuZHN2KCIsIiwidGV4dC9jc3YiKSx0LnRzdj10LmRzdigiXHQiLCJ0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzIik7dmFyIGhlLHBlLGRlLG1lLGdlPXRoaXNbSSh0aGlzLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKV18fGZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIHZlKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO248MiYmKGU9MCksbjwzJiYocj1EYXRlLm5vdygpKTt2YXIgaT1yK2UsYT17Yzp0LHQ6aSxuOm51bGx9O3JldHVybiBwZT9wZS5uPWE6aGU9YSxwZT1hLGRlfHwobWU9Y2xlYXJUaW1lb3V0KG1lKSxkZT0xLGdlKHllKSksYX1mdW5jdGlvbiB5ZSgpe3ZhciB0PXhlKCksZT1iZSgpLXQ7ZT4yND8oaXNGaW5pdGUoZSkmJihjbGVhclRpbWVvdXQobWUpLG1lPXNldFRpbWVvdXQoeWUsZSkpLGRlPTApOihkZT0xLGdlKHllKSl9ZnVuY3Rpb24geGUoKXtmb3IodmFyIHQ9RGF0ZS5ub3coKSxlPWhlO2U7KXQ+PWUudCYmZS5jKHQtZS50KSYmKGUuYz1udWxsKSxlPWUubjtyZXR1cm4gdH1mdW5jdGlvbiBiZSgpe2Zvcih2YXIgdCxlPWhlLHI9MS8wO2U7KWUuYz8oZS50PHImJihyPWUudCksZT0odD1lKS5uKTplPXQ/dC5uPWUubjpoZT1lLm47cmV0dXJuIHBlPXQscn1mdW5jdGlvbiBfZSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB3ZSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBUZSh0KXtmb3IodmFyIGUscixuLGk9dC5sZW5ndGgsYT1bMCwxXSxvPTIscz0yO3M8aTtzKyspe2Zvcig7bz4xJiYoZT10W2Fbby0yXV0scj10W2Fbby0xXV0sbj10W3NdLChyWzBdLWVbMF0pKihuWzFdLWVbMV0pLShyWzFdLWVbMV0pKihuWzBdLWVbMF0pPD0wKTspLS1vO2FbbysrXT1zfXJldHVybiBhLnNsaWNlKDAsbyl9ZnVuY3Rpb24ga2UodCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV19dC50aW1lcj1mdW5jdGlvbigpe3ZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdC50aW1lci5mbHVzaD1mdW5jdGlvbigpe3hlKCksYmUoKX0sdC5yb3VuZD1mdW5jdGlvbih0LGUpe3JldHVybiBlP01hdGgucm91bmQodCooZT1NYXRoLnBvdygxMCxlKSkpL2U6TWF0aC5yb3VuZCh0KX0sdC5nZW9tPXt9LHQuZ2VvbS5odWxsPWZ1bmN0aW9uKHQpe3ZhciBlPV9lLHI9d2U7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbih0KTtmdW5jdGlvbiBuKHQpe2lmKHQubGVuZ3RoPDMpcmV0dXJuW107dmFyIG4saT1jZShlKSxhPWNlKHIpLG89dC5sZW5ndGgscz1bXSxsPVtdO2ZvcihuPTA7bjxvO24rKylzLnB1c2goWytpLmNhbGwodGhpcyx0W25dLG4pLCthLmNhbGwodGhpcyx0W25dLG4pLG5dKTtmb3Iocy5zb3J0KGtlKSxuPTA7bjxvO24rKylsLnB1c2goW3Nbbl1bMF0sLXNbbl1bMV1dKTt2YXIgYz1UZShzKSx1PVRlKGwpLGY9dVswXT09PWNbMF0saD11W3UubGVuZ3RoLTFdPT09Y1tjLmxlbmd0aC0xXSxwPVtdO2ZvcihuPWMubGVuZ3RoLTE7bj49MDstLW4pcC5wdXNoKHRbc1tjW25dXVsyXV0pO2ZvcihuPStmO248dS5sZW5ndGgtaDsrK24pcC5wdXNoKHRbc1t1W25dXVsyXV0pO3JldHVybiBwfXJldHVybiBuLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxufSx0Lmdlb20ucG9seWdvbj1mdW5jdGlvbih0KXtyZXR1cm4gVSh0LEFlKSx0fTt2YXIgQWU9dC5nZW9tLnBvbHlnb24ucHJvdG90eXBlPVtdO2Z1bmN0aW9uIE1lKHQsZSxyKXtyZXR1cm4oclswXS1lWzBdKSoodFsxXS1lWzFdKTwoclsxXS1lWzFdKSoodFswXS1lWzBdKX1mdW5jdGlvbiBTZSh0LGUscixuKXt2YXIgaT10WzBdLGE9clswXSxvPWVbMF0taSxzPW5bMF0tYSxsPXRbMV0sYz1yWzFdLHU9ZVsxXS1sLGY9blsxXS1jLGg9KHMqKGwtYyktZiooaS1hKSkvKGYqby1zKnUpO3JldHVybltpK2gqbyxsK2gqdV19ZnVuY3Rpb24gRWUodCl7dmFyIGU9dFswXSxyPXRbdC5sZW5ndGgtMV07cmV0dXJuIShlWzBdLXJbMF18fGVbMV0tclsxXSl9QWUuYXJlYT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPS0xLHI9dGhpcy5sZW5ndGgsbj10aGlzW3ItMV0saT0wOysrZTxyOyl0PW4sbj10aGlzW2VdLGkrPXRbMV0qblswXS10WzBdKm5bMV07cmV0dXJuLjUqaX0sQWUuY2VudHJvaWQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPS0xLGk9dGhpcy5sZW5ndGgsYT0wLG89MCxzPXRoaXNbaS0xXTtmb3IoYXJndW1lbnRzLmxlbmd0aHx8KHQ9LTEvKDYqdGhpcy5hcmVhKCkpKTsrK248aTspZT1zLHM9dGhpc1tuXSxyPWVbMF0qc1sxXS1zWzBdKmVbMV0sYSs9KGVbMF0rc1swXSkqcixvKz0oZVsxXStzWzFdKSpyO3JldHVyblthKnQsbyp0XX0sQWUuY2xpcD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvLHM9RWUodCksbD0tMSxjPXRoaXMubGVuZ3RoLUVlKHRoaXMpLHU9dGhpc1tjLTFdOysrbDxjOyl7Zm9yKGU9dC5zbGljZSgpLHQubGVuZ3RoPTAsaT10aGlzW2xdLGE9ZVsobj1lLmxlbmd0aC1zKS0xXSxyPS0xOysrcjxuOylNZShvPWVbcl0sdSxpKT8oTWUoYSx1LGkpfHx0LnB1c2goU2UoYSxvLHUsaSkpLHQucHVzaChvKSk6TWUoYSx1LGkpJiZ0LnB1c2goU2UoYSxvLHUsaSkpLGE9bztzJiZ0LnB1c2godFswXSksdT1pfXJldHVybiB0fTt2YXIgTGUsQ2UsUGUsSWUsT2UsemU9W10sRGU9W107ZnVuY3Rpb24gUmUoKXtlcih0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gRmUodCl7dmFyIGU9emUucG9wKCl8fG5ldyBSZTtyZXR1cm4gZS5zaXRlPXQsZX1mdW5jdGlvbiBCZSh0KXtXZSh0KSxQZS5yZW1vdmUodCksemUucHVzaCh0KSxlcih0KX1mdW5jdGlvbiBOZSh0KXt2YXIgZT10LmNpcmNsZSxyPWUueCxuPWUuY3ksaT17eDpyLHk6bn0sYT10LlAsbz10Lk4scz1bdF07QmUodCk7Zm9yKHZhciBsPWE7bC5jaXJjbGUmJnkoci1sLmNpcmNsZS54KTxrdCYmeShuLWwuY2lyY2xlLmN5KTxrdDspYT1sLlAscy51bnNoaWZ0KGwpLEJlKGwpLGw9YTtzLnVuc2hpZnQobCksV2UobCk7Zm9yKHZhciBjPW87Yy5jaXJjbGUmJnkoci1jLmNpcmNsZS54KTxrdCYmeShuLWMuY2lyY2xlLmN5KTxrdDspbz1jLk4scy5wdXNoKGMpLEJlKGMpLGM9bztzLnB1c2goYyksV2UoYyk7dmFyIHUsZj1zLmxlbmd0aDtmb3IodT0xO3U8ZjsrK3UpYz1zW3VdLGw9c1t1LTFdLFFlKGMuZWRnZSxsLnNpdGUsYy5zaXRlLGkpO2w9c1swXSwoYz1zW2YtMV0pLmVkZ2U9SmUobC5zaXRlLGMuc2l0ZSxudWxsLGkpLFllKGwpLFllKGMpfWZ1bmN0aW9uIGplKHQpe2Zvcih2YXIgZSxyLG4saSxhPXQueCxvPXQueSxzPVBlLl87czspaWYoKG49VWUocyxvKS1hKT5rdClzPXMuTDtlbHNle2lmKCEoKGk9YS1WZShzLG8pKT5rdCkpe24+LWt0PyhlPXMuUCxyPXMpOmk+LWt0PyhlPXMscj1zLk4pOmU9cj1zO2JyZWFrfWlmKCFzLlIpe2U9czticmVha31zPXMuUn12YXIgbD1GZSh0KTtpZihQZS5pbnNlcnQoZSxsKSxlfHxyKXtpZihlPT09cilyZXR1cm4gV2UoZSkscj1GZShlLnNpdGUpLFBlLmluc2VydChsLHIpLGwuZWRnZT1yLmVkZ2U9SmUoZS5zaXRlLGwuc2l0ZSksWWUoZSksdm9pZCBZZShyKTtpZihyKXtXZShlKSxXZShyKTt2YXIgYz1lLnNpdGUsdT1jLngsZj1jLnksaD10LngtdSxwPXQueS1mLGQ9ci5zaXRlLG09ZC54LXUsZz1kLnktZix2PTIqKGgqZy1wKm0pLHk9aCpoK3AqcCx4PW0qbStnKmcsYj17eDooZyp5LXAqeCkvdit1LHk6KGgqeC1tKnkpL3YrZn07UWUoci5lZGdlLGMsZCxiKSxsLmVkZ2U9SmUoYyx0LG51bGwsYiksci5lZGdlPUplKHQsZCxudWxsLGIpLFllKGUpLFllKHIpfWVsc2UgbC5lZGdlPUplKGUuc2l0ZSxsLnNpdGUpfX1mdW5jdGlvbiBVZSh0LGUpe3ZhciByPXQuc2l0ZSxuPXIueCxpPXIueSxhPWktZTtpZighYSlyZXR1cm4gbjt2YXIgbz10LlA7aWYoIW8pcmV0dXJuLTEvMDt2YXIgcz0ocj1vLnNpdGUpLngsbD1yLnksYz1sLWU7aWYoIWMpcmV0dXJuIHM7dmFyIHU9cy1uLGY9MS9hLTEvYyxoPXUvYztyZXR1cm4gZj8oLWgrTWF0aC5zcXJ0KGgqaC0yKmYqKHUqdS8oLTIqYyktbCtjLzIraS1hLzIpKSkvZituOihuK3MpLzJ9ZnVuY3Rpb24gVmUodCxlKXt2YXIgcj10Lk47aWYocilyZXR1cm4gVWUocixlKTt2YXIgbj10LnNpdGU7cmV0dXJuIG4ueT09PWU/bi54OjEvMH1mdW5jdGlvbiBIZSh0KXt0aGlzLnNpdGU9dCx0aGlzLmVkZ2VzPVtdfWZ1bmN0aW9uIHFlKHQsZSl7cmV0dXJuIGUuYW5nbGUtdC5hbmdsZX1mdW5jdGlvbiBHZSgpe2VyKHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBZZSh0KXt2YXIgZT10LlAscj10Lk47aWYoZSYmcil7dmFyIG49ZS5zaXRlLGk9dC5zaXRlLGE9ci5zaXRlO2lmKG4hPT1hKXt2YXIgbz1pLngscz1pLnksbD1uLngtbyxjPW4ueS1zLHU9YS54LW8sZj0yKihsKihnPWEueS1zKS1jKnUpO2lmKCEoZj49LTFlLTEyKSl7dmFyIGg9bCpsK2MqYyxwPXUqdStnKmcsZD0oZypoLWMqcCkvZixtPShsKnAtdSpoKS9mLGc9bStzLHY9RGUucG9wKCl8fG5ldyBHZTt2LmFyYz10LHYuc2l0ZT1pLHYueD1kK28sdi55PWcrTWF0aC5zcXJ0KGQqZCttKm0pLHYuY3k9Zyx0LmNpcmNsZT12O2Zvcih2YXIgeT1udWxsLHg9T2UuXzt4OylpZih2Lnk8eC55fHx2Lnk9PT14LnkmJnYueDw9eC54KXtpZigheC5MKXt5PXguUDticmVha314PXguTH1lbHNle2lmKCF4LlIpe3k9eDticmVha314PXguUn1PZS5pbnNlcnQoeSx2KSx5fHwoSWU9dil9fX19ZnVuY3Rpb24gV2UodCl7dmFyIGU9dC5jaXJjbGU7ZSYmKGUuUHx8KEllPWUuTiksT2UucmVtb3ZlKGUpLERlLnB1c2goZSksZXIoZSksdC5jaXJjbGU9bnVsbCl9ZnVuY3Rpb24gWGUodCxlKXt2YXIgcj10LmI7aWYocilyZXR1cm4hMDt2YXIgbixpLGE9dC5hLG89ZVswXVswXSxzPWVbMV1bMF0sbD1lWzBdWzFdLGM9ZVsxXVsxXSx1PXQubCxmPXQucixoPXUueCxwPXUueSxkPWYueCxtPWYueSxnPShoK2QpLzIsdj0ocCttKS8yO2lmKG09PT1wKXtpZihnPG98fGc+PXMpcmV0dXJuO2lmKGg+ZCl7aWYoYSl7aWYoYS55Pj1jKXJldHVybn1lbHNlIGE9e3g6Zyx5Omx9O3I9e3g6Zyx5OmN9fWVsc2V7aWYoYSl7aWYoYS55PGwpcmV0dXJufWVsc2UgYT17eDpnLHk6Y307cj17eDpnLHk6bH19fWVsc2UgaWYoaT12LShuPShoLWQpLyhtLXApKSpnLG48LTF8fG4+MSlpZihoPmQpe2lmKGEpe2lmKGEueT49YylyZXR1cm59ZWxzZSBhPXt4OihsLWkpL24seTpsfTtyPXt4OihjLWkpL24seTpjfX1lbHNle2lmKGEpe2lmKGEueTxsKXJldHVybn1lbHNlIGE9e3g6KGMtaSkvbix5OmN9O3I9e3g6KGwtaSkvbix5Omx9fWVsc2UgaWYocDxtKXtpZihhKXtpZihhLng+PXMpcmV0dXJufWVsc2UgYT17eDpvLHk6bipvK2l9O3I9e3g6cyx5Om4qcytpfX1lbHNle2lmKGEpe2lmKGEueDxvKXJldHVybn1lbHNlIGE9e3g6cyx5Om4qcytpfTtyPXt4Om8seTpuKm8raX19cmV0dXJuIHQuYT1hLHQuYj1yLCEwfWZ1bmN0aW9uIFplKHQsZSl7dGhpcy5sPXQsdGhpcy5yPWUsdGhpcy5hPXRoaXMuYj1udWxsfWZ1bmN0aW9uIEplKHQsZSxyLG4pe3ZhciBpPW5ldyBaZSh0LGUpO3JldHVybiBMZS5wdXNoKGkpLHImJlFlKGksdCxlLHIpLG4mJlFlKGksZSx0LG4pLENlW3QuaV0uZWRnZXMucHVzaChuZXcgJGUoaSx0LGUpKSxDZVtlLmldLmVkZ2VzLnB1c2gobmV3ICRlKGksZSx0KSksaX1mdW5jdGlvbiBLZSh0LGUscil7dmFyIG49bmV3IFplKHQsbnVsbCk7cmV0dXJuIG4uYT1lLG4uYj1yLExlLnB1c2gobiksbn1mdW5jdGlvbiBRZSh0LGUscixuKXt0LmF8fHQuYj90Lmw9PT1yP3QuYj1uOnQuYT1uOih0LmE9bix0Lmw9ZSx0LnI9cil9ZnVuY3Rpb24gJGUodCxlLHIpe3ZhciBuPXQuYSxpPXQuYjt0aGlzLmVkZ2U9dCx0aGlzLnNpdGU9ZSx0aGlzLmFuZ2xlPXI/TWF0aC5hdGFuMihyLnktZS55LHIueC1lLngpOnQubD09PWU/TWF0aC5hdGFuMihpLngtbi54LG4ueS1pLnkpOk1hdGguYXRhbjIobi54LWkueCxpLnktbi55KX1mdW5jdGlvbiB0cigpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIGVyKHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24gcnIodCxlKXt2YXIgcj1lLG49ZS5SLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjp0Ll89bixuLlU9aSxyLlU9bixyLlI9bi5MLHIuUiYmKHIuUi5VPXIpLG4uTD1yfWZ1bmN0aW9uIG5yKHQsZSl7dmFyIHI9ZSxuPWUuTCxpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46dC5fPW4sbi5VPWksci5VPW4sci5MPW4uUixyLkwmJihyLkwuVT1yKSxuLlI9cn1mdW5jdGlvbiBpcih0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9ZnVuY3Rpb24gYXIodCxlKXt2YXIgcixuLGksYT10LnNvcnQob3IpLnBvcCgpO2ZvcihMZT1bXSxDZT1uZXcgQXJyYXkodC5sZW5ndGgpLFBlPW5ldyB0cixPZT1uZXcgdHI7OylpZihpPUllLGEmJighaXx8YS55PGkueXx8YS55PT09aS55JiZhLng8aS54KSlhLng9PT1yJiZhLnk9PT1ufHwoQ2VbYS5pXT1uZXcgSGUoYSksamUoYSkscj1hLngsbj1hLnkpLGE9dC5wb3AoKTtlbHNle2lmKCFpKWJyZWFrO05lKGkuYXJjKX1lJiYoZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpLGEsbz1MZSxzPShyPXRbMF1bMF0sbj10WzBdWzFdLGk9dFsxXVswXSxhPXRbMV1bMV0sZnVuY3Rpb24odCl7dmFyIGUsbz10LmEscz10LmIsbD1vLngsYz1vLnksdT0wLGY9MSxoPXMueC1sLHA9cy55LWM7aWYoZT1yLWwsaHx8IShlPjApKXtpZihlLz1oLGg8MCl7aWYoZTx1KXJldHVybjtlPGYmJihmPWUpfWVsc2UgaWYoaD4wKXtpZihlPmYpcmV0dXJuO2U+dSYmKHU9ZSl9aWYoZT1pLWwsaHx8IShlPDApKXtpZihlLz1oLGg8MCl7aWYoZT5mKXJldHVybjtlPnUmJih1PWUpfWVsc2UgaWYoaD4wKXtpZihlPHUpcmV0dXJuO2U8ZiYmKGY9ZSl9aWYoZT1uLWMscHx8IShlPjApKXtpZihlLz1wLHA8MCl7aWYoZTx1KXJldHVybjtlPGYmJihmPWUpfWVsc2UgaWYocD4wKXtpZihlPmYpcmV0dXJuO2U+dSYmKHU9ZSl9aWYoZT1hLWMscHx8IShlPDApKXtpZihlLz1wLHA8MCl7aWYoZT5mKXJldHVybjtlPnUmJih1PWUpfWVsc2UgaWYocD4wKXtpZihlPHUpcmV0dXJuO2U8ZiYmKGY9ZSl9cmV0dXJuIHU+MCYmKHQuYT17eDpsK3UqaCx5OmMrdSpwfSksZjwxJiYodC5iPXt4OmwrZipoLHk6YytmKnB9KSx0fX19fX0pLGw9by5sZW5ndGg7bC0tOykoIVhlKGU9b1tsXSx0KXx8IXMoZSl8fHkoZS5hLngtZS5iLngpPGt0JiZ5KGUuYS55LWUuYi55KTxrdCkmJihlLmE9ZS5iPW51bGwsby5zcGxpY2UobCwxKSl9KGUpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxmPXRbMF1bMF0saD10WzFdWzBdLHA9dFswXVsxXSxkPXRbMV1bMV0sbT1DZSxnPW0ubGVuZ3RoO2ctLTspaWYoKGE9bVtnXSkmJmEucHJlcGFyZSgpKWZvcihsPShzPWEuZWRnZXMpLmxlbmd0aCxvPTA7bzxsOyluPSh1PXNbb10uZW5kKCkpLngsaT11LnksZT0oYz1zWysrbyVsXS5zdGFydCgpKS54LHI9Yy55LCh5KG4tZSk+a3R8fHkoaS1yKT5rdCkmJihzLnNwbGljZShvLDAsbmV3ICRlKEtlKGEuc2l0ZSx1LHkobi1mKTxrdCYmZC1pPmt0P3t4OmYseTp5KGUtZik8a3Q/cjpkfTp5KGktZCk8a3QmJmgtbj5rdD97eDp5KHItZCk8a3Q/ZTpoLHk6ZH06eShuLWgpPGt0JiZpLXA+a3Q/e3g6aCx5OnkoZS1oKTxrdD9yOnB9OnkoaS1wKTxrdCYmbi1mPmt0P3t4Onkoci1wKTxrdD9lOmYseTpwfTpudWxsKSxhLnNpdGUsbnVsbCkpLCsrbCl9KGUpKTt2YXIgbz17Y2VsbHM6Q2UsZWRnZXM6TGV9O3JldHVybiBQZT1PZT1MZT1DZT1udWxsLG99ZnVuY3Rpb24gb3IodCxlKXtyZXR1cm4gZS55LXQueXx8ZS54LXQueH1IZS5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPXRoaXMuZWRnZXMscj1lLmxlbmd0aDtyLS07KSh0PWVbcl0uZWRnZSkuYiYmdC5hfHxlLnNwbGljZShyLDEpO3JldHVybiBlLnNvcnQocWUpLGUubGVuZ3RofSwkZS5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRlP3RoaXMuZWRnZS5hOnRoaXMuZWRnZS5ifSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmI6dGhpcy5lZGdlLmF9fSx0ci5wcm90b3R5cGU9e2luc2VydDpmdW5jdGlvbih0LGUpe3ZhciByLG4saTtpZih0KXtpZihlLlA9dCxlLk49dC5OLHQuTiYmKHQuTi5QPWUpLHQuTj1lLHQuUil7Zm9yKHQ9dC5SO3QuTDspdD10Lkw7dC5MPWV9ZWxzZSB0LlI9ZTtyPXR9ZWxzZSB0aGlzLl8/KHQ9aXIodGhpcy5fKSxlLlA9bnVsbCxlLk49dCx0LlA9dC5MPWUscj10KTooZS5QPWUuTj1udWxsLHRoaXMuXz1lLHI9bnVsbCk7Zm9yKGUuTD1lLlI9bnVsbCxlLlU9cixlLkM9ITAsdD1lO3ImJnIuQzspcj09PShuPXIuVSkuTD8oaT1uLlIpJiZpLkM/KHIuQz1pLkM9ITEsbi5DPSEwLHQ9bik6KHQ9PT1yLlImJihycih0aGlzLHIpLHI9KHQ9cikuVSksci5DPSExLG4uQz0hMCxucih0aGlzLG4pKTooaT1uLkwpJiZpLkM/KHIuQz1pLkM9ITEsbi5DPSEwLHQ9bik6KHQ9PT1yLkwmJihucih0aGlzLHIpLHI9KHQ9cikuVSksci5DPSExLG4uQz0hMCxycih0aGlzLG4pKSxyPXQuVTt0aGlzLl8uQz0hMX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3QuTiYmKHQuTi5QPXQuUCksdC5QJiYodC5QLk49dC5OKSx0Lk49dC5QPW51bGw7dmFyIGUscixuLGk9dC5VLGE9dC5MLG89dC5SO2lmKHI9YT9vP2lyKG8pOmE6byxpP2kuTD09PXQ/aS5MPXI6aS5SPXI6dGhpcy5fPXIsYSYmbz8obj1yLkMsci5DPXQuQyxyLkw9YSxhLlU9cixyIT09bz8oaT1yLlUsci5VPXQuVSx0PXIuUixpLkw9dCxyLlI9byxvLlU9cik6KHIuVT1pLGk9cix0PXIuUikpOihuPXQuQyx0PXIpLHQmJih0LlU9aSksIW4paWYodCYmdC5DKXQuQz0hMTtlbHNle2Rve2lmKHQ9PT10aGlzLl8pYnJlYWs7aWYodD09PWkuTCl7aWYoKGU9aS5SKS5DJiYoZS5DPSExLGkuQz0hMCxycih0aGlzLGkpLGU9aS5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLlImJmUuUi5DfHwoZS5MLkM9ITEsZS5DPSEwLG5yKHRoaXMsZSksZT1pLlIpLGUuQz1pLkMsaS5DPWUuUi5DPSExLHJyKHRoaXMsaSksdD10aGlzLl87YnJlYWt9fWVsc2UgaWYoKGU9aS5MKS5DJiYoZS5DPSExLGkuQz0hMCxucih0aGlzLGkpLGU9aS5MKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLkwmJmUuTC5DfHwoZS5SLkM9ITEsZS5DPSEwLHJyKHRoaXMsZSksZT1pLkwpLGUuQz1pLkMsaS5DPWUuTC5DPSExLG5yKHRoaXMsaSksdD10aGlzLl87YnJlYWt9ZS5DPSEwLHQ9aSxpPWkuVX13aGlsZSghdC5DKTt0JiYodC5DPSExKX19fSx0Lmdlb20udm9yb25vaT1mdW5jdGlvbih0KXt2YXIgZT1fZSxyPXdlLG49ZSxpPXIsYT1zcjtpZih0KXJldHVybiBvKHQpO2Z1bmN0aW9uIG8odCl7dmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPWFbMF1bMF0sbj1hWzBdWzFdLGk9YVsxXVswXSxvPWFbMV1bMV07cmV0dXJuIGFyKHModCksYSkuY2VsbHMuZm9yRWFjaCgoZnVuY3Rpb24oYSxzKXt2YXIgbD1hLmVkZ2VzLGM9YS5zaXRlOyhlW3NdPWwubGVuZ3RoP2wubWFwKChmdW5jdGlvbih0KXt2YXIgZT10LnN0YXJ0KCk7cmV0dXJuW2UueCxlLnldfSkpOmMueD49ciYmYy54PD1pJiZjLnk+PW4mJmMueTw9bz9bW3Isb10sW2ksb10sW2ksbl0sW3Isbl1dOltdKS5wb2ludD10W3NdfSkpLGV9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJue3g6TWF0aC5yb3VuZChuKHQsZSkva3QpKmt0LHk6TWF0aC5yb3VuZChpKHQsZSkva3QpKmt0LGk6ZX19KSl9cmV0dXJuIG8ubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIGFyKHModCkpLmVkZ2VzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQubCYmdC5yfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJue3NvdXJjZTp0W2UubC5pXSx0YXJnZXQ6dFtlLnIuaV19fSkpfSxvLnRyaWFuZ2xlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gYXIocyh0KSkuY2VsbHMuZm9yRWFjaCgoZnVuY3Rpb24ocixuKXtmb3IodmFyIGksYSxvLHMsbD1yLnNpdGUsYz1yLmVkZ2VzLnNvcnQocWUpLHU9LTEsZj1jLmxlbmd0aCxoPWNbZi0xXS5lZGdlLHA9aC5sPT09bD9oLnI6aC5sOysrdTxmOyloLGk9cCxwPShoPWNbdV0uZWRnZSkubD09PWw/aC5yOmgubCxuPGkuaSYmbjxwLmkmJihvPWkscz1wLCgoYT1sKS54LXMueCkqKG8ueS1hLnkpLShhLngtby54KSoocy55LWEueSk8MCkmJmUucHVzaChbdFtuXSx0W2kuaV0sdFtwLmldXSl9KSksZX0sby54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWNlKGU9dCksbyk6ZX0sby55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWNlKHI9dCksbyk6cn0sby5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PXQ/c3I6dCxvKTphPT09c3I/bnVsbDphfSxvLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/by5jbGlwRXh0ZW50KHQmJltbMCwwXSx0XSk6YT09PXNyP251bGw6YSYmYVsxXX0sb307dmFyIHNyPVtbLTFlNiwtMWU2XSxbMWU2LDFlNl1dO2Z1bmN0aW9uIGxyKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gY3IodCl7cmV0dXJuIHQueX1mdW5jdGlvbiB1cih0LGUscixuLGksYSl7aWYoIXQoZSxyLG4saSxhKSl7dmFyIG89LjUqKHIraSkscz0uNSoobithKSxsPWUubm9kZXM7bFswXSYmdXIodCxsWzBdLHIsbixvLHMpLGxbMV0mJnVyKHQsbFsxXSxvLG4saSxzKSxsWzJdJiZ1cih0LGxbMl0scixzLG8sYSksbFszXSYmdXIodCxsWzNdLG8scyxpLGEpfX1mdW5jdGlvbiBmcih0LGUscixuLGksYSxvKXt2YXIgcyxsPTEvMDtyZXR1cm4gZnVuY3Rpb24gdChjLHUsZixoLHApe2lmKCEodT5hfHxmPm98fGg8bnx8cDxpKSl7aWYoZD1jLnBvaW50KXt2YXIgZCxtPWUtYy54LGc9ci1jLnksdj1tKm0rZypnO2lmKHY8bCl7dmFyIHk9TWF0aC5zcXJ0KGw9dik7bj1lLXksaT1yLXksYT1lK3ksbz1yK3kscz1kfX1mb3IodmFyIHg9Yy5ub2RlcyxiPS41Kih1K2gpLF89LjUqKGYrcCksdz0ocj49Xyk8PDF8ZT49YixUPXcrNDt3PFQ7Kyt3KWlmKGM9eFszJnddKXN3aXRjaCgzJncpe2Nhc2UgMDp0KGMsdSxmLGIsXyk7YnJlYWs7Y2FzZSAxOnQoYyxiLGYsaCxfKTticmVhaztjYXNlIDI6dChjLHUsXyxiLHApO2JyZWFrO2Nhc2UgMzp0KGMsYixfLGgscCl9fX0odCxuLGksYSxvKSxzfWZ1bmN0aW9uIGhyKGUscil7ZT10LnJnYihlKSxyPXQucmdiKHIpO3ZhciBuPWUucixpPWUuZyxhPWUuYixvPXIuci1uLHM9ci5nLWksbD1yLmItYTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIiMiK3JlKE1hdGgucm91bmQobitvKnQpKStyZShNYXRoLnJvdW5kKGkrcyp0KSkrcmUoTWF0aC5yb3VuZChhK2wqdCkpfX1mdW5jdGlvbiBwcih0LGUpe3ZhciByLG49e30saT17fTtmb3IociBpbiB0KXIgaW4gZT9uW3JdPXlyKHRbcl0sZVtyXSk6aVtyXT10W3JdO2ZvcihyIGluIGUpciBpbiB0fHwoaVtyXT1lW3JdKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHIgaW4gbilpW3JdPW5bcl0odCk7cmV0dXJuIGl9fWZ1bmN0aW9uIGRyKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gdCooMS1yKStlKnJ9fWZ1bmN0aW9uIG1yKHQsZSl7dmFyIHIsbixpLGE9Z3IubGFzdEluZGV4PXZyLmxhc3RJbmRleD0wLG89LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsocj1nci5leGVjKHQpKSYmKG49dnIuZXhlYyhlKSk7KShpPW4uaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChyPXJbMF0pPT09KG49blswXSk/c1tvXT9zW29dKz1uOnNbKytvXT1uOihzWysrb109bnVsbCxsLnB1c2goe2k6byx4OmRyKHIsbil9KSksYT12ci5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2xbMF0/KGU9bFswXS54LGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifSk6ZnVuY3Rpb24oKXtyZXR1cm4gZX06KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciByLG49MDtuPGU7KytuKXNbKHI9bFtuXSkuaV09ci54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9dC5nZW9tLmRlbGF1bmF5PWZ1bmN0aW9uKGUpe3JldHVybiB0Lmdlb20udm9yb25vaSgpLnRyaWFuZ2xlcyhlKX0sdC5nZW9tLnF1YWR0cmVlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbz1fZSxzPXdlO2lmKGE9YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbz1scixzPWNyLDM9PT1hJiYoaT1yLG49ZSxyPWU9MCksbCh0KTtmdW5jdGlvbiBsKHQpe3ZhciBsLGMsdSxmLGgscCxkLG0sZyx2PWNlKG8pLHg9Y2Uocyk7aWYobnVsbCE9ZSlwPWUsZD1yLG09bixnPWk7ZWxzZSBpZihtPWc9LShwPWQ9MS8wKSxjPVtdLHU9W10saD10Lmxlbmd0aCxhKWZvcihmPTA7ZjxoOysrZikobD10W2ZdKS54PHAmJihwPWwueCksbC55PGQmJihkPWwueSksbC54Pm0mJihtPWwueCksbC55PmcmJihnPWwueSksYy5wdXNoKGwueCksdS5wdXNoKGwueSk7ZWxzZSBmb3IoZj0wO2Y8aDsrK2Ype3ZhciBiPSt2KGw9dFtmXSxmKSxfPSt4KGwsZik7YjxwJiYocD1iKSxfPGQmJihkPV8pLGI+bSYmKG09YiksXz5nJiYoZz1fKSxjLnB1c2goYiksdS5wdXNoKF8pfXZhciB3PW0tcCxUPWctZDtmdW5jdGlvbiBrKHQsZSxyLG4saSxhLG8scyl7aWYoIWlzTmFOKHIpJiYhaXNOYU4obikpaWYodC5sZWFmKXt2YXIgbD10LngsYz10Lnk7aWYobnVsbCE9bClpZih5KGwtcikreShjLW4pPC4wMSlBKHQsZSxyLG4saSxhLG8scyk7ZWxzZXt2YXIgdT10LnBvaW50O3QueD10Lnk9dC5wb2ludD1udWxsLEEodCx1LGwsYyxpLGEsbyxzKSxBKHQsZSxyLG4saSxhLG8scyl9ZWxzZSB0Lng9cix0Lnk9bix0LnBvaW50PWV9ZWxzZSBBKHQsZSxyLG4saSxhLG8scyl9ZnVuY3Rpb24gQSh0LGUscixuLGksYSxvLHMpe3ZhciBsPS41KihpK28pLGM9LjUqKGErcyksdT1yPj1sLGY9bj49YyxoPWY8PDF8dTt0LmxlYWY9ITEsdT9pPWw6bz1sLGY/YT1jOnM9YyxrKHQ9dC5ub2Rlc1toXXx8KHQubm9kZXNbaF09e2xlYWY6ITAsbm9kZXM6W10scG9pbnQ6bnVsbCx4Om51bGwseTpudWxsfSksZSxyLG4saSxhLG8scyl9dz5UP2c9ZCt3Om09cCtUO3ZhciBNPXtsZWFmOiEwLG5vZGVzOltdLHBvaW50Om51bGwseDpudWxsLHk6bnVsbCxhZGQ6ZnVuY3Rpb24odCl7ayhNLHQsK3YodCwrK2YpLCt4KHQsZikscCxkLG0sZyl9LHZpc2l0OmZ1bmN0aW9uKHQpe3VyKHQsTSxwLGQsbSxnKX0sZmluZDpmdW5jdGlvbih0KXtyZXR1cm4gZnIoTSx0WzBdLHRbMV0scCxkLG0sZyl9fTtpZihmPS0xLG51bGw9PWUpe2Zvcig7KytmPGg7KWsoTSx0W2ZdLGNbZl0sdVtmXSxwLGQsbSxnKTstLWZ9ZWxzZSB0LmZvckVhY2goTS5hZGQpO3JldHVybiBjPXU9dD1sPW51bGwsTX1yZXR1cm4gbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsbCk6b30sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsbCk6c30sbC5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/ZT1yPW49aT1udWxsOihlPSt0WzBdWzBdLHI9K3RbMF1bMV0sbj0rdFsxXVswXSxpPSt0WzFdWzFdKSxsKTpudWxsPT1lP251bGw6W1tlLHJdLFtuLGldXX0sbC5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2U9cj1uPWk9bnVsbDooZT1yPTAsbj0rdFswXSxpPSt0WzFdKSxsKTpudWxsPT1lP251bGw6W24tZSxpLXJdfSxsfSx0LmludGVycG9sYXRlUmdiPWhyLHQuaW50ZXJwb2xhdGVPYmplY3Q9cHIsdC5pbnRlcnBvbGF0ZU51bWJlcj1kcix0LmludGVycG9sYXRlU3RyaW5nPW1yO3ZhciBncj0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csdnI9bmV3IFJlZ0V4cChnci5zb3VyY2UsImciKTtmdW5jdGlvbiB5cihlLHIpe2Zvcih2YXIgbixpPXQuaW50ZXJwb2xhdG9ycy5sZW5ndGg7LS1pPj0wJiYhKG49dC5pbnRlcnBvbGF0b3JzW2ldKGUscikpOyk7cmV0dXJuIG59ZnVuY3Rpb24geHIodCxlKXt2YXIgcixuPVtdLGk9W10sYT10Lmxlbmd0aCxvPWUubGVuZ3RoLHM9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpO2ZvcihyPTA7cjxzOysrciluLnB1c2goeXIodFtyXSxlW3JdKSk7Zm9yKDtyPGE7KytyKWlbcl09dFtyXTtmb3IoO3I8bzsrK3IpaVtyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3Iocj0wO3I8czsrK3IpaVtyXT1uW3JdKHQpO3JldHVybiBpfX10LmludGVycG9sYXRlPXlyLHQuaW50ZXJwb2xhdG9ycz1bZnVuY3Rpb24odCxlKXt2YXIgcj10eXBlb2YgZTtyZXR1cm4oInN0cmluZyI9PT1yP2xlLmhhcyhlLnRvTG93ZXJDYXNlKCkpfHwvXigjfHJnYlwofGhzbFwoKS9pLnRlc3QoZSk/aHI6bXI6ZSBpbnN0YW5jZW9mIEZ0P2hyOkFycmF5LmlzQXJyYXkoZSk/eHI6Im9iamVjdCI9PT1yJiZpc05hTihlKT9wcjpkcikodCxlKX1dLHQuaW50ZXJwb2xhdGVBcnJheT14cjt2YXIgYnI9ZnVuY3Rpb24oKXtyZXR1cm4gQ30sX3I9dC5tYXAoe2xpbmVhcjpicixwb2x5OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3coZSx0KX19LHF1YWQ6ZnVuY3Rpb24oKXtyZXR1cm4gTXJ9LGN1YmljOmZ1bmN0aW9uKCl7cmV0dXJuIFNyfSxzaW46ZnVuY3Rpb24oKXtyZXR1cm4gTHJ9LGV4cDpmdW5jdGlvbigpe3JldHVybiBDcn0sY2lyY2xlOmZ1bmN0aW9uKCl7cmV0dXJuIFByfSxlbGFzdGljOmZ1bmN0aW9uKHQsZSl7dmFyIHI7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0uNDUpO2FyZ3VtZW50cy5sZW5ndGg/cj1lL010Kk1hdGguYXNpbigxL3QpOih0PTEscj1lLzQpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gMSt0Kk1hdGgucG93KDIsLTEwKm4pKk1hdGguc2luKChuLXIpKk10L2UpfX0sYmFjazpmdW5jdGlvbih0KXt0fHwodD0xLjcwMTU4KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUqZSooKHQrMSkqZS10KX19LGJvdW5jZTpmdW5jdGlvbigpe3JldHVybiBJcn19KSx3cj10Lm1hcCh7aW46QyxvdXQ6a3IsImluLW91dCI6QXIsIm91dC1pbiI6ZnVuY3Rpb24odCl7cmV0dXJuIEFyKGtyKHQpKX19KTtmdW5jdGlvbiBUcih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU8PTA/MDplPj0xPzE6dChlKX19ZnVuY3Rpb24ga3IodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAxLXQoMS1lKX19ZnVuY3Rpb24gQXIodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi41KihlPC41P3QoMiplKToyLXQoMi0yKmUpKX19ZnVuY3Rpb24gTXIodCl7cmV0dXJuIHQqdH1mdW5jdGlvbiBTcih0KXtyZXR1cm4gdCp0KnR9ZnVuY3Rpb24gRXIodCl7aWYodDw9MClyZXR1cm4gMDtpZih0Pj0xKXJldHVybiAxO3ZhciBlPXQqdCxyPWUqdDtyZXR1cm4gNCoodDwuNT9yOjMqKHQtZSkrci0uNzUpfWZ1bmN0aW9uIExyKHQpe3JldHVybiAxLU1hdGguY29zKHQqRXQpfWZ1bmN0aW9uIENyKHQpe3JldHVybiBNYXRoLnBvdygyLDEwKih0LTEpKX1mdW5jdGlvbiBQcih0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfWZ1bmN0aW9uIElyKHQpe3JldHVybiB0PDEvMi43NT83LjU2MjUqdCp0OnQ8Mi8yLjc1PzcuNTYyNSoodC09MS41LzIuNzUpKnQrLjc1OnQ8Mi41LzIuNzU/Ny41NjI1Kih0LT0yLjI1LzIuNzUpKnQrLjkzNzU6Ny41NjI1Kih0LT0yLjYyNS8yLjc1KSp0Ky45ODQzNzV9ZnVuY3Rpb24gT3IodCxlKXtyZXR1cm4gZS09dCxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZCh0K2Uqcil9fWZ1bmN0aW9uIHpyKHQpe3ZhciBlLHIsbixpPVt0LmEsdC5iXSxhPVt0LmMsdC5kXSxvPVJyKGkpLHM9RHIoaSxhKSxsPVJyKCgoZT1hKVswXSs9KG49LXMpKihyPWkpWzBdLGVbMV0rPW4qclsxXSxlKSl8fDA7aVswXSphWzFdPGFbMF0qaVsxXSYmKGlbMF0qPS0xLGlbMV0qPS0xLG8qPS0xLHMqPS0xKSx0aGlzLnJvdGF0ZT0obz9NYXRoLmF0YW4yKGlbMV0saVswXSk6TWF0aC5hdGFuMigtYVswXSxhWzFdKSkqQ3QsdGhpcy50cmFuc2xhdGU9W3QuZSx0LmZdLHRoaXMuc2NhbGU9W28sbF0sdGhpcy5za2V3PWw/TWF0aC5hdGFuMihzLGwpKkN0OjB9ZnVuY3Rpb24gRHIodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXX1mdW5jdGlvbiBScih0KXt2YXIgZT1NYXRoLnNxcnQoRHIodCx0KSk7cmV0dXJuIGUmJih0WzBdLz1lLHRbMV0vPWUpLGV9dC5lYXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLSIpLG49ZT49MD90LnNsaWNlKDAsZSk6dCxpPWU+PTA/dC5zbGljZShlKzEpOiJpbiI7cmV0dXJuIG49X3IuZ2V0KG4pfHxicixUcigoaT13ci5nZXQoaSl8fEMpKG4uYXBwbHkobnVsbCxyLmNhbGwoYXJndW1lbnRzLDEpKSkpfSx0LmludGVycG9sYXRlSGNsPWZ1bmN0aW9uKGUscil7ZT10LmhjbChlKSxyPXQuaGNsKHIpO3ZhciBuPWUuaCxpPWUuYyxhPWUubCxvPXIuaC1uLHM9ci5jLWksbD1yLmwtYTtpc05hTihzKSYmKHM9MCxpPWlzTmFOKGkpP3IuYzppKTtpc05hTihvKT8obz0wLG49aXNOYU4obik/ci5oOm4pOm8+MTgwP28tPTM2MDpvPC0xODAmJihvKz0zNjApO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gSHQobitvKnQsaStzKnQsYStsKnQpKyIifX0sdC5pbnRlcnBvbGF0ZUhzbD1mdW5jdGlvbihlLHIpe2U9dC5oc2woZSkscj10LmhzbChyKTt2YXIgbj1lLmgsaT1lLnMsYT1lLmwsbz1yLmgtbixzPXIucy1pLGw9ci5sLWE7aXNOYU4ocykmJihzPTAsaT1pc05hTihpKT9yLnM6aSk7aXNOYU4obyk/KG89MCxuPWlzTmFOKG4pP3IuaDpuKTpvPjE4MD9vLT0zNjA6bzwtMTgwJiYobys9MzYwKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGp0KG4rbyp0LGkrcyp0LGErbCp0KSsiIn19LHQuaW50ZXJwb2xhdGVMYWI9ZnVuY3Rpb24oZSxyKXtlPXQubGFiKGUpLHI9dC5sYWIocik7dmFyIG49ZS5sLGk9ZS5hLGE9ZS5iLG89ci5sLW4scz1yLmEtaSxsPXIuYi1hO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gV3QobitvKnQsaStzKnQsYStsKnQpKyIifX0sdC5pbnRlcnBvbGF0ZVJvdW5kPU9yLHQudHJhbnNmb3JtPWZ1bmN0aW9uKGUpe3ZhciByPWkuY3JlYXRlRWxlbWVudE5TKHQubnMucHJlZml4LnN2ZywiZyIpO3JldHVybih0LnRyYW5zZm9ybT1mdW5jdGlvbih0KXtpZihudWxsIT10KXtyLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KTt2YXIgZT1yLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCl9cmV0dXJuIG5ldyB6cihlP2UubWF0cml4OkZyKX0pKGUpfSx6ci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy50cmFuc2xhdGUrIilyb3RhdGUoIit0aGlzLnJvdGF0ZSsiKXNrZXdYKCIrdGhpcy5za2V3KyIpc2NhbGUoIit0aGlzLnNjYWxlKyIpIn07dmFyIEZyPXthOjEsYjowLGM6MCxkOjEsZTowLGY6MH07ZnVuY3Rpb24gQnIodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiwiOiIifWZ1bmN0aW9uIE5yKGUscil7dmFyIG49W10saT1bXTtyZXR1cm4gZT10LnRyYW5zZm9ybShlKSxyPXQudHJhbnNmb3JtKHIpLGZ1bmN0aW9uKHQsZSxyLG4pe2lmKHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXSl7dmFyIGk9ci5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLCIsIixudWxsLCIpIik7bi5wdXNoKHtpOmktNCx4OmRyKHRbMF0sZVswXSl9LHtpOmktMix4OmRyKHRbMV0sZVsxXSl9KX1lbHNlKGVbMF18fGVbMV0pJiZyLnB1c2goInRyYW5zbGF0ZSgiK2UrIikiKX0oZS50cmFuc2xhdGUsci50cmFuc2xhdGUsbixpKSxmdW5jdGlvbih0LGUscixuKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksbi5wdXNoKHtpOnIucHVzaChCcihyKSsicm90YXRlKCIsbnVsbCwiKSIpLTIseDpkcih0LGUpfSkpOmUmJnIucHVzaChCcihyKSsicm90YXRlKCIrZSsiKSIpfShlLnJvdGF0ZSxyLnJvdGF0ZSxuLGkpLGZ1bmN0aW9uKHQsZSxyLG4pe3QhPT1lP24ucHVzaCh7aTpyLnB1c2goQnIocikrInNrZXdYKCIsbnVsbCwiKSIpLTIseDpkcih0LGUpfSk6ZSYmci5wdXNoKEJyKHIpKyJza2V3WCgiK2UrIikiKX0oZS5za2V3LHIuc2tldyxuLGkpLGZ1bmN0aW9uKHQsZSxyLG4pe2lmKHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXSl7dmFyIGk9ci5wdXNoKEJyKHIpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtuLnB1c2goe2k6aS00LHg6ZHIodFswXSxlWzBdKX0se2k6aS0yLHg6ZHIodFsxXSxlWzFdKX0pfWVsc2UgMT09PWVbMF0mJjE9PT1lWzFdfHxyLnB1c2goQnIocikrInNjYWxlKCIrZSsiKSIpfShlLnNjYWxlLHIuc2NhbGUsbixpKSxlPXI9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxhPWkubGVuZ3RoOysrcjxhOyluWyhlPWlbcl0pLmldPWUueCh0KTtyZXR1cm4gbi5qb2luKCIiKX19ZnVuY3Rpb24ganIodCxlKXtyZXR1cm4gZT0oZS09dD0rdCl8fDEvZSxmdW5jdGlvbihyKXtyZXR1cm4oci10KS9lfX1mdW5jdGlvbiBVcih0LGUpe3JldHVybiBlPShlLT10PSt0KXx8MS9lLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDEsKHItdCkvZSkpfX1mdW5jdGlvbiBWcih0KXtmb3IodmFyIGU9dC5zb3VyY2Uscj10LnRhcmdldCxuPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIHI9SHIodCksbj1IcihlKSxpPXIucG9wKCksYT1uLnBvcCgpLG89bnVsbDtmb3IoO2k9PT1hOylvPWksaT1yLnBvcCgpLGE9bi5wb3AoKTtyZXR1cm4gb30oZSxyKSxpPVtlXTtlIT09bjspZT1lLnBhcmVudCxpLnB1c2goZSk7Zm9yKHZhciBhPWkubGVuZ3RoO3IhPT1uOylpLnNwbGljZShhLDAscikscj1yLnBhcmVudDtyZXR1cm4gaX1mdW5jdGlvbiBIcih0KXtmb3IodmFyIGU9W10scj10LnBhcmVudDtudWxsIT1yOyllLnB1c2godCksdD1yLHI9ci5wYXJlbnQ7cmV0dXJuIGUucHVzaCh0KSxlfWZ1bmN0aW9uIHFyKHQpe3QuZml4ZWR8PTJ9ZnVuY3Rpb24gR3IodCl7dC5maXhlZCY9LTd9ZnVuY3Rpb24gWXIodCl7dC5maXhlZHw9NCx0LnB4PXQueCx0LnB5PXQueX1mdW5jdGlvbiBXcih0KXt0LmZpeGVkJj0tNX10LmludGVycG9sYXRlVHJhbnNmb3JtPU5yLHQubGF5b3V0PXt9LHQubGF5b3V0LmJ1bmRsZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0tMSxuPXQubGVuZ3RoOysrcjxuOyllLnB1c2goVnIodFtyXSkpO3JldHVybiBlfX0sdC5sYXlvdXQuY2hvcmQ9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG8scyxsPXt9LGM9MDtmdW5jdGlvbiB1KCl7dmFyIGwsdSxoLHAsZCxtPXt9LGc9W10sdj10LnJhbmdlKGkpLHk9W107Zm9yKGU9W10scj1bXSxsPTAscD0tMTsrK3A8aTspe2Zvcih1PTAsZD0tMTsrK2Q8aTspdSs9bltwXVtkXTtnLnB1c2godSkseS5wdXNoKHQucmFuZ2UoaSkpLGwrPXV9Zm9yKGEmJnYuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gYShnW3RdLGdbZV0pfSkpLG8mJnkuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0LnNvcnQoKGZ1bmN0aW9uKHQscil7cmV0dXJuIG8obltlXVt0XSxuW2VdW3JdKX0pKX0pKSxsPShNdC1jKmkpL2wsdT0wLHA9LTE7KytwPGk7KXtmb3IoaD11LGQ9LTE7KytkPGk7KXt2YXIgeD12W3BdLGI9eVt4XVtkXSxfPW5beF1bYl0sdz11LFQ9dSs9XypsO21beCsiLSIrYl09e2luZGV4Ongsc3ViaW5kZXg6YixzdGFydEFuZ2xlOncsZW5kQW5nbGU6VCx2YWx1ZTpffX1yW3hdPXtpbmRleDp4LHN0YXJ0QW5nbGU6aCxlbmRBbmdsZTp1LHZhbHVlOmdbeF19LHUrPWN9Zm9yKHA9LTE7KytwPGk7KWZvcihkPXAtMTsrK2Q8aTspe3ZhciBrPW1bcCsiLSIrZF0sQT1tW2QrIi0iK3BdOyhrLnZhbHVlfHxBLnZhbHVlKSYmZS5wdXNoKGsudmFsdWU8QS52YWx1ZT97c291cmNlOkEsdGFyZ2V0Omt9Ontzb3VyY2U6ayx0YXJnZXQ6QX0pfXMmJmYoKX1mdW5jdGlvbiBmKCl7ZS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBzKCh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSkvMiwoZS5zb3VyY2UudmFsdWUrZS50YXJnZXQudmFsdWUpLzIpfSkpfXJldHVybiBsLm1hdHJpeD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0obj10KSYmbi5sZW5ndGgsZT1yPW51bGwsbCk6bn0sbC5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsZT1yPW51bGwsbCk6Y30sbC5zb3J0R3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsZT1yPW51bGwsbCk6YX0sbC5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsZT1udWxsLGwpOm99LGwuc29ydENob3Jkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGUmJmYoKSxsKTpzfSxsLmNob3Jkcz1mdW5jdGlvbigpe3JldHVybiBlfHx1KCksZX0sbC5ncm91cHM9ZnVuY3Rpb24oKXtyZXR1cm4gcnx8dSgpLHJ9LGx9LHQubGF5b3V0LmZvcmNlPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYSxvLHM9e30sbD10LmRpc3BhdGNoKCJzdGFydCIsInRpY2siLCJlbmQiKSxjPVsxLDFdLHU9LjksZj1YcixoPVpyLHA9LTMwLGQ9SnIsbT0uMSxnPS42NCx2PVtdLHk9W107ZnVuY3Rpb24geCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4saSl7aWYoZS5wb2ludCE9PXQpe3ZhciBhPWUuY3gtdC54LG89ZS5jeS10Lnkscz1pLXIsbD1hKmErbypvO2lmKHMqcy9nPGwpe2lmKGw8ZCl7dmFyIGM9ZS5jaGFyZ2UvbDt0LnB4LT1hKmMsdC5weS09bypjfXJldHVybiEwfWlmKGUucG9pbnQmJmwmJmw8ZCl7Yz1lLnBvaW50Q2hhcmdlL2w7dC5weC09YSpjLHQucHktPW8qY319cmV0dXJuIWUuY2hhcmdlfX1mdW5jdGlvbiBiKGUpe2UucHg9dC5ldmVudC54LGUucHk9dC5ldmVudC55LHMucmVzdW1lKCl9cmV0dXJuIHMudGljaz1mdW5jdGlvbigpe2lmKChuKj0uOTkpPC4wMDUpcmV0dXJuIGU9bnVsbCxsLmVuZCh7dHlwZToiZW5kIixhbHBoYTpuPTB9KSwhMDt2YXIgcixzLGYsaCxkLGcsYixfLHcsVD12Lmxlbmd0aCxrPXkubGVuZ3RoO2ZvcihzPTA7czxrOysrcyloPShmPXlbc10pLnNvdXJjZSwoZz0oXz0oZD1mLnRhcmdldCkueC1oLngpKl8rKHc9ZC55LWgueSkqdykmJihfKj1nPW4qYVtzXSooKGc9TWF0aC5zcXJ0KGcpKS1pW3NdKS9nLHcqPWcsZC54LT1fKihiPWgud2VpZ2h0K2Qud2VpZ2h0P2gud2VpZ2h0LyhoLndlaWdodCtkLndlaWdodCk6LjUpLGQueS09dypiLGgueCs9XyooYj0xLWIpLGgueSs9dypiKTtpZigoYj1uKm0pJiYoXz1jWzBdLzIsdz1jWzFdLzIscz0tMSxiKSlmb3IoOysrczxUOykoZj12W3NdKS54Kz0oXy1mLngpKmIsZi55Kz0ody1mLnkpKmI7aWYocClmb3IoIWZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBpPTAsYT0wO2lmKGUuY2hhcmdlPTAsIWUubGVhZilmb3IodmFyIG8scz1lLm5vZGVzLGw9cy5sZW5ndGgsYz0tMTsrK2M8bDspbnVsbCE9KG89c1tjXSkmJih0KG8scixuKSxlLmNoYXJnZSs9by5jaGFyZ2UsaSs9by5jaGFyZ2Uqby5jeCxhKz1vLmNoYXJnZSpvLmN5KTtpZihlLnBvaW50KXtlLmxlYWZ8fChlLnBvaW50LngrPU1hdGgucmFuZG9tKCktLjUsZS5wb2ludC55Kz1NYXRoLnJhbmRvbSgpLS41KTt2YXIgdT1yKm5bZS5wb2ludC5pbmRleF07ZS5jaGFyZ2UrPWUucG9pbnRDaGFyZ2U9dSxpKz11KmUucG9pbnQueCxhKz11KmUucG9pbnQueX1lLmN4PWkvZS5jaGFyZ2UsZS5jeT1hL2UuY2hhcmdlfShyPXQuZ2VvbS5xdWFkdHJlZSh2KSxuLG8pLHM9LTE7KytzPFQ7KShmPXZbc10pLmZpeGVkfHxyLnZpc2l0KHgoZikpO2ZvcihzPS0xOysrczxUOykoZj12W3NdKS5maXhlZD8oZi54PWYucHgsZi55PWYucHkpOihmLngtPShmLnB4LShmLnB4PWYueCkpKnUsZi55LT0oZi5weS0oZi5weT1mLnkpKSp1KTtsLnRpY2soe3R5cGU6InRpY2siLGFscGhhOm59KX0scy5ub2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj10LHMpOnZ9LHMubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9dCxzKTp5fSxzLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxzKTpjfSxzLmxpbmtEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Oit0LHMpOmZ9LHMuZGlzdGFuY2U9cy5saW5rRGlzdGFuY2Uscy5saW5rU3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDordCxzKTpofSxzLmZyaWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LHMpOnV9LHMuY2hhcmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6K3Qscyk6cH0scy5jaGFyZ2VEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD10KnQscyk6TWF0aC5zcXJ0KGQpfSxzLmdyYXZpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09K3Qscyk6bX0scy50aGV0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz10KnQscyk6TWF0aC5zcXJ0KGcpfSxzLmFscGhhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSt0LG4/dD4wP249dDooZS5jPW51bGwsZS50PU5hTixlPW51bGwsbC5lbmQoe3R5cGU6ImVuZCIsYWxwaGE6bj0wfSkpOnQ+MCYmKGwuc3RhcnQoe3R5cGU6InN0YXJ0IixhbHBoYTpuPXR9KSxlPXZlKHMudGljaykpLHMpOm59LHMuc3RhcnQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbj12Lmxlbmd0aCxsPXkubGVuZ3RoLHU9Y1swXSxkPWNbMV07Zm9yKHQ9MDt0PG47Kyt0KShyPXZbdF0pLmluZGV4PXQsci53ZWlnaHQ9MDtmb3IodD0wO3Q8bDsrK3QpIm51bWJlciI9PXR5cGVvZihyPXlbdF0pLnNvdXJjZSYmKHIuc291cmNlPXZbci5zb3VyY2VdKSwibnVtYmVyIj09dHlwZW9mIHIudGFyZ2V0JiYoci50YXJnZXQ9dltyLnRhcmdldF0pLCsrci5zb3VyY2Uud2VpZ2h0LCsrci50YXJnZXQud2VpZ2h0O2Zvcih0PTA7dDxuOysrdClyPXZbdF0saXNOYU4oci54KSYmKHIueD1tKCJ4Iix1KSksaXNOYU4oci55KSYmKHIueT1tKCJ5IixkKSksaXNOYU4oci5weCkmJihyLnB4PXIueCksaXNOYU4oci5weSkmJihyLnB5PXIueSk7aWYoaT1bXSwiZnVuY3Rpb24iPT10eXBlb2YgZilmb3IodD0wO3Q8bDsrK3QpaVt0XT0rZi5jYWxsKHRoaXMseVt0XSx0KTtlbHNlIGZvcih0PTA7dDxsOysrdClpW3RdPWY7aWYoYT1bXSwiZnVuY3Rpb24iPT10eXBlb2YgaClmb3IodD0wO3Q8bDsrK3QpYVt0XT0raC5jYWxsKHRoaXMseVt0XSx0KTtlbHNlIGZvcih0PTA7dDxsOysrdClhW3RdPWg7aWYobz1bXSwiZnVuY3Rpb24iPT10eXBlb2YgcClmb3IodD0wO3Q8bjsrK3Qpb1t0XT0rcC5jYWxsKHRoaXMsdlt0XSx0KTtlbHNlIGZvcih0PTA7dDxuOysrdClvW3RdPXA7ZnVuY3Rpb24gbShyLGkpe2lmKCFlKXtmb3IoZT1uZXcgQXJyYXkobiksYz0wO2M8bjsrK2MpZVtjXT1bXTtmb3IoYz0wO2M8bDsrK2Mpe3ZhciBhPXlbY107ZVthLnNvdXJjZS5pbmRleF0ucHVzaChhLnRhcmdldCksZVthLnRhcmdldC5pbmRleF0ucHVzaChhLnNvdXJjZSl9fWZvcih2YXIgbyxzPWVbdF0sYz0tMSx1PXMubGVuZ3RoOysrYzx1OylpZighaXNOYU4obz1zW2NdW3JdKSlyZXR1cm4gbztyZXR1cm4gTWF0aC5yYW5kb20oKSppfXJldHVybiBzLnJlc3VtZSgpfSxzLnJlc3VtZT1mdW5jdGlvbigpe3JldHVybiBzLmFscGhhKC4xKX0scy5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHMuYWxwaGEoMCl9LHMuZHJhZz1mdW5jdGlvbigpe2lmKHJ8fChyPXQuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihDKS5vbigiZHJhZ3N0YXJ0LmZvcmNlIixxcikub24oImRyYWcuZm9yY2UiLGIpLm9uKCJkcmFnZW5kLmZvcmNlIixHcikpLCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByO3RoaXMub24oIm1vdXNlb3Zlci5mb3JjZSIsWXIpLm9uKCJtb3VzZW91dC5mb3JjZSIsV3IpLmNhbGwocil9LHQucmViaW5kKHMsbCwib24iKX07dmFyIFhyPTIwLFpyPTEsSnI9MS8wO2Z1bmN0aW9uIEtyKGUscil7cmV0dXJuIHQucmViaW5kKGUsciwic29ydCIsImNoaWxkcmVuIiwidmFsdWUiKSxlLm5vZGVzPWUsZS5saW5rcz1ubixlfWZ1bmN0aW9uIFFyKHQsZSl7Zm9yKHZhciByPVt0XTtudWxsIT0odD1yLnBvcCgpKTspaWYoZSh0KSwoaT10LmNoaWxkcmVuKSYmKG49aS5sZW5ndGgpKWZvcih2YXIgbixpOy0tbj49MDspci5wdXNoKGlbbl0pfWZ1bmN0aW9uICRyKHQsZSl7Zm9yKHZhciByPVt0XSxuPVtdO251bGwhPSh0PXIucG9wKCkpOylpZihuLnB1c2godCksKGE9dC5jaGlsZHJlbikmJihpPWEubGVuZ3RoKSlmb3IodmFyIGksYSxvPS0xOysrbzxpOylyLnB1c2goYVtvXSk7Zm9yKDtudWxsIT0odD1uLnBvcCgpKTspZSh0KX1mdW5jdGlvbiB0bih0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBlbih0KXtyZXR1cm4gdC52YWx1ZX1mdW5jdGlvbiBybih0LGUpe3JldHVybiBlLnZhbHVlLXQudmFsdWV9ZnVuY3Rpb24gbm4oZSl7cmV0dXJuIHQubWVyZ2UoZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybih0LmNoaWxkcmVufHxbXSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm57c291cmNlOnQsdGFyZ2V0OmV9fSkpfSkpKX10LmxheW91dC5oaWVyYXJjaHk9ZnVuY3Rpb24oKXt2YXIgdD1ybixlPXRuLHI9ZW47ZnVuY3Rpb24gbihpKXt2YXIgYSxvPVtpXSxzPVtdO2ZvcihpLmRlcHRoPTA7bnVsbCE9KGE9by5wb3AoKSk7KWlmKHMucHVzaChhKSwoYz1lLmNhbGwobixhLGEuZGVwdGgpKSYmKGw9Yy5sZW5ndGgpKXtmb3IodmFyIGwsYyx1Oy0tbD49MDspby5wdXNoKHU9Y1tsXSksdS5wYXJlbnQ9YSx1LmRlcHRoPWEuZGVwdGgrMTtyJiYoYS52YWx1ZT0wKSxhLmNoaWxkcmVuPWN9ZWxzZSByJiYoYS52YWx1ZT0rci5jYWxsKG4sYSxhLmRlcHRoKXx8MCksZGVsZXRlIGEuY2hpbGRyZW47cmV0dXJuICRyKGksKGZ1bmN0aW9uKGUpe3ZhciBuLGk7dCYmKG49ZS5jaGlsZHJlbikmJm4uc29ydCh0KSxyJiYoaT1lLnBhcmVudCkmJihpLnZhbHVlKz1lLnZhbHVlKX0pKSxzfXJldHVybiBuLnNvcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLmNoaWxkcmVuPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG4ucmV2YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gciYmKFFyKHQsKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW4mJih0LnZhbHVlPTApfSkpLCRyKHQsKGZ1bmN0aW9uKHQpe3ZhciBlO3QuY2hpbGRyZW58fCh0LnZhbHVlPStyLmNhbGwobix0LHQuZGVwdGgpfHwwKSwoZT10LnBhcmVudCkmJihlLnZhbHVlKz10LnZhbHVlKX0pKSksdH0sbn0sdC5sYXlvdXQucGFydGl0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dC5sYXlvdXQuaGllcmFyY2h5KCkscj1bMSwxXTtmdW5jdGlvbiBuKHQsbil7dmFyIGk9ZS5jYWxsKHRoaXMsdCxuKTtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYT1lLmNoaWxkcmVuO2lmKGUueD1yLGUueT1lLmRlcHRoKmksZS5keD1uLGUuZHk9aSxhJiYobz1hLmxlbmd0aCkpe3ZhciBvLHMsbCxjPS0xO2ZvcihuPWUudmFsdWU/bi9lLnZhbHVlOjA7KytjPG87KXQocz1hW2NdLHIsbD1zLnZhbHVlKm4saSkscis9bH19KGlbMF0sMCxyWzBdLHJbMV0vZnVuY3Rpb24gdChlKXt2YXIgcj1lLmNoaWxkcmVuLG49MDtpZihyJiYoaT1yLmxlbmd0aCkpZm9yKHZhciBpLGE9LTE7KythPGk7KW49TWF0aC5tYXgobix0KHJbYV0pKTtyZXR1cm4gMStufShpWzBdKSksaX1yZXR1cm4gbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sS3IobixlKX0sdC5sYXlvdXQucGllPWZ1bmN0aW9uKCl7dmFyIGU9TnVtYmVyLHI9YW4sbj0wLGk9TXQsYT0wO2Z1bmN0aW9uIG8ocyl7dmFyIGwsYz1zLmxlbmd0aCx1PXMubWFwKChmdW5jdGlvbih0LHIpe3JldHVybitlLmNhbGwobyx0LHIpfSkpLGY9KygiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKSxoPSgiZnVuY3Rpb24iPT10eXBlb2YgaT9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTppKS1mLHA9TWF0aC5taW4oTWF0aC5hYnMoaCkvYywrKCJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuYXBwbHkodGhpcyxhcmd1bWVudHMpOmEpKSxkPXAqKGg8MD8tMToxKSxtPXQuc3VtKHUpLGc9bT8oaC1jKmQpL206MCx2PXQucmFuZ2UoYykseT1bXTtyZXR1cm4gbnVsbCE9ciYmdi5zb3J0KHI9PT1hbj9mdW5jdGlvbih0LGUpe3JldHVybiB1W2VdLXVbdF19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIoc1t0XSxzW2VdKX0pLHYuZm9yRWFjaCgoZnVuY3Rpb24odCl7eVt0XT17ZGF0YTpzW3RdLHZhbHVlOmw9dVt0XSxzdGFydEFuZ2xlOmYsZW5kQW5nbGU6Zis9bCpnK2QscGFkQW5nbGU6cH19KSkseX1yZXR1cm4gby52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG8pOmV9LG8uc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG8pOnJ9LG8uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LG8pOm59LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxvKTppfSxvLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbyk6YX0sb307dmFyIGFuPXt9O2Z1bmN0aW9uIG9uKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gc24odCl7cmV0dXJuIHQueX1mdW5jdGlvbiBsbih0LGUscil7dC55MD1lLHQueT1yfXQubGF5b3V0LnN0YWNrPWZ1bmN0aW9uKCl7dmFyIGU9QyxyPWZuLG49aG4saT1sbixhPW9uLG89c247ZnVuY3Rpb24gcyhsLGMpe2lmKCEocD1sLmxlbmd0aCkpcmV0dXJuIGw7dmFyIHU9bC5tYXAoKGZ1bmN0aW9uKHQscil7cmV0dXJuIGUuY2FsbChzLHQscil9KSksZj11Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0LGUpe3JldHVyblthLmNhbGwocyx0LGUpLG8uY2FsbChzLHQsZSldfSkpfSkpLGg9ci5jYWxsKHMsZixjKTt1PXQucGVybXV0ZSh1LGgpLGY9dC5wZXJtdXRlKGYsaCk7dmFyIHAsZCxtLGcsdj1uLmNhbGwocyxmLGMpLHk9dVswXS5sZW5ndGg7Zm9yKG09MDttPHk7KyttKWZvcihpLmNhbGwocyx1WzBdW21dLGc9dlttXSxmWzBdW21dWzFdKSxkPTE7ZDxwOysrZClpLmNhbGwocyx1W2RdW21dLGcrPWZbZC0xXVttXVsxXSxmW2RdW21dWzFdKTtyZXR1cm4gbH1yZXR1cm4gcy52YWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxzKTplfSxzLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Y24uZ2V0KHQpfHxmbixzKTpyfSxzLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnVuLmdldCh0KXx8aG4scyk6bn0scy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQscyk6YX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQscyk6b30scy5vdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxzKTppfSxzfTt2YXIgY249dC5tYXAoeyJpbnNpZGUtb3V0IjpmdW5jdGlvbihlKXt2YXIgcixuLGk9ZS5sZW5ndGgsYT1lLm1hcChwbiksbz1lLm1hcChkbikscz10LnJhbmdlKGkpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFbdF0tYVtlXX0pKSxsPTAsYz0wLHU9W10sZj1bXTtmb3Iocj0wO3I8aTsrK3Ipbj1zW3JdLGw8Yz8obCs9b1tuXSx1LnB1c2gobikpOihjKz1vW25dLGYucHVzaChuKSk7cmV0dXJuIGYucmV2ZXJzZSgpLmNvbmNhdCh1KX0scmV2ZXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gdC5yYW5nZShlLmxlbmd0aCkucmV2ZXJzZSgpfSxkZWZhdWx0OmZufSksdW49dC5tYXAoe3NpbGhvdWV0dGU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dC5sZW5ndGgsYT10WzBdLmxlbmd0aCxvPVtdLHM9MCxsPVtdO2ZvcihyPTA7cjxhOysrcil7Zm9yKGU9MCxuPTA7ZTxpO2UrKyluKz10W2VdW3JdWzFdO24+cyYmKHM9biksby5wdXNoKG4pfWZvcihyPTA7cjxhOysrcilsW3JdPShzLW9bcl0pLzI7cmV0dXJuIGx9LHdpZ2dsZTpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsLGMsdT10Lmxlbmd0aCxmPXRbMF0saD1mLmxlbmd0aCxwPVtdO2ZvcihwWzBdPWw9Yz0wLHI9MTtyPGg7KytyKXtmb3IoZT0wLGk9MDtlPHU7KytlKWkrPXRbZV1bcl1bMV07Zm9yKGU9MCxhPTAscz1mW3JdWzBdLWZbci0xXVswXTtlPHU7KytlKXtmb3Iobj0wLG89KHRbZV1bcl1bMV0tdFtlXVtyLTFdWzFdKS8oMipzKTtuPGU7KytuKW8rPSh0W25dW3JdWzFdLXRbbl1bci0xXVsxXSkvczthKz1vKnRbZV1bcl1bMV19cFtyXT1sLT1pP2EvaSpzOjAsbDxjJiYoYz1sKX1mb3Iocj0wO3I8aDsrK3IpcFtyXS09YztyZXR1cm4gcH0sZXhwYW5kOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9dFswXS5sZW5ndGgsbz0xL2kscz1bXTtmb3Iocj0wO3I8YTsrK3Ipe2ZvcihlPTAsbj0wO2U8aTtlKyspbis9dFtlXVtyXVsxXTtpZihuKWZvcihlPTA7ZTxpO2UrKyl0W2VdW3JdWzFdLz1uO2Vsc2UgZm9yKGU9MDtlPGk7ZSsrKXRbZV1bcl1bMV09b31mb3Iocj0wO3I8YTsrK3Ipc1tyXT0wO3JldHVybiBzfSx6ZXJvOmhufSk7ZnVuY3Rpb24gZm4oZSl7cmV0dXJuIHQucmFuZ2UoZS5sZW5ndGgpfWZ1bmN0aW9uIGhuKHQpe2Zvcih2YXIgZT0tMSxyPXRbMF0ubGVuZ3RoLG49W107KytlPHI7KW5bZV09MDtyZXR1cm4gbn1mdW5jdGlvbiBwbih0KXtmb3IodmFyIGUscj0xLG49MCxpPXRbMF1bMV0sYT10Lmxlbmd0aDtyPGE7KytyKShlPXRbcl1bMV0pPmkmJihuPXIsaT1lKTtyZXR1cm4gbn1mdW5jdGlvbiBkbih0KXtyZXR1cm4gdC5yZWR1Y2UobW4sMCl9ZnVuY3Rpb24gbW4odCxlKXtyZXR1cm4gdCtlWzFdfWZ1bmN0aW9uIGduKHQsZSl7cmV0dXJuIHZuKHQsTWF0aC5jZWlsKE1hdGgubG9nKGUubGVuZ3RoKS9NYXRoLkxOMisxKSl9ZnVuY3Rpb24gdm4odCxlKXtmb3IodmFyIHI9LTEsbj0rdFswXSxpPSh0WzFdLW4pL2UsYT1bXTsrK3I8PWU7KWFbcl09aSpyK247cmV0dXJuIGF9ZnVuY3Rpb24geW4oZSl7cmV0dXJuW3QubWluKGUpLHQubWF4KGUpXX1mdW5jdGlvbiB4bih0LGUpe3JldHVybiB0LnZhbHVlLWUudmFsdWV9ZnVuY3Rpb24gYm4odCxlKXt2YXIgcj10Ll9wYWNrX25leHQ7dC5fcGFja19uZXh0PWUsZS5fcGFja19wcmV2PXQsZS5fcGFja19uZXh0PXIsci5fcGFja19wcmV2PWV9ZnVuY3Rpb24gX24odCxlKXt0Ll9wYWNrX25leHQ9ZSxlLl9wYWNrX3ByZXY9dH1mdW5jdGlvbiB3bih0LGUpe3ZhciByPWUueC10Lngsbj1lLnktdC55LGk9dC5yK2UucjtyZXR1cm4uOTk5KmkqaT5yKnIrbipufWZ1bmN0aW9uIFRuKHQpe2lmKChlPXQuY2hpbGRyZW4pJiYobD1lLmxlbmd0aCkpe3ZhciBlLHIsbixpLGEsbyxzLGwsYz0xLzAsdT0tMS8wLGY9MS8wLGg9LTEvMDtpZihlLmZvckVhY2goa24pLChyPWVbMF0pLng9LXIucixyLnk9MCx4KHIpLGw+MSYmKChuPWVbMV0pLng9bi5yLG4ueT0wLHgobiksbD4yKSlmb3IoTW4ocixuLGk9ZVsyXSkseChpKSxibihyLGkpLHIuX3BhY2tfcHJldj1pLGJuKGksbiksbj1yLl9wYWNrX25leHQsYT0zO2E8bDthKyspe01uKHIsbixpPWVbYV0pO3ZhciBwPTAsZD0xLG09MTtmb3Iobz1uLl9wYWNrX25leHQ7byE9PW47bz1vLl9wYWNrX25leHQsZCsrKWlmKHduKG8saSkpe3A9MTticmVha31pZigxPT1wKWZvcihzPXIuX3BhY2tfcHJldjtzIT09by5fcGFja19wcmV2JiYhd24ocyxpKTtzPXMuX3BhY2tfcHJldixtKyspO3A/KGQ8bXx8ZD09bSYmbi5yPHIucj9fbihyLG49byk6X24ocj1zLG4pLGEtLSk6KGJuKHIsaSksbj1pLHgoaSkpfXZhciBnPShjK3UpLzIsdj0oZitoKS8yLHk9MDtmb3IoYT0wO2E8bDthKyspKGk9ZVthXSkueC09ZyxpLnktPXYseT1NYXRoLm1heCh5LGkucitNYXRoLnNxcnQoaS54KmkueCtpLnkqaS55KSk7dC5yPXksZS5mb3JFYWNoKEFuKX1mdW5jdGlvbiB4KHQpe2M9TWF0aC5taW4odC54LXQucixjKSx1PU1hdGgubWF4KHQueCt0LnIsdSksZj1NYXRoLm1pbih0LnktdC5yLGYpLGg9TWF0aC5tYXgodC55K3QucixoKX19ZnVuY3Rpb24ga24odCl7dC5fcGFja19uZXh0PXQuX3BhY2tfcHJldj10fWZ1bmN0aW9uIEFuKHQpe2RlbGV0ZSB0Ll9wYWNrX25leHQsZGVsZXRlIHQuX3BhY2tfcHJldn1mdW5jdGlvbiBNbih0LGUscil7dmFyIG49dC5yK3IucixpPWUueC10LngsYT1lLnktdC55O2lmKG4mJihpfHxhKSl7dmFyIG89ZS5yK3IucixzPWkqaSthKmEsbD0uNSsoKG4qPW4pLShvKj1vKSkvKDIqcyksYz1NYXRoLnNxcnQoTWF0aC5tYXgoMCwyKm8qKG4rcyktKG4tPXMpKm4tbypvKSkvKDIqcyk7ci54PXQueCtsKmkrYyphLHIueT10LnkrbCphLWMqaX1lbHNlIHIueD10LngrbixyLnk9dC55fWZ1bmN0aW9uIFNuKHQsZSl7cmV0dXJuIHQucGFyZW50PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gRW4odCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZS5sZW5ndGg/ZVswXTp0LnR9ZnVuY3Rpb24gTG4odCl7dmFyIGUscj10LmNoaWxkcmVuO3JldHVybihlPXIubGVuZ3RoKT9yW2UtMV06dC50fWZ1bmN0aW9uIENuKHQsZSxyKXt2YXIgbj1yLyhlLmktdC5pKTtlLmMtPW4sZS5zKz1yLHQuYys9bixlLnorPXIsZS5tKz1yfWZ1bmN0aW9uIFBuKHQsZSxyKXtyZXR1cm4gdC5hLnBhcmVudD09PWUucGFyZW50P3QuYTpyfWZ1bmN0aW9uIEluKHQpe3JldHVybnt4OnQueCx5OnQueSxkeDp0LmR4LGR5OnQuZHl9fWZ1bmN0aW9uIE9uKHQsZSl7dmFyIHI9dC54K2VbM10sbj10LnkrZVswXSxpPXQuZHgtZVsxXS1lWzNdLGE9dC5keS1lWzBdLWVbMl07cmV0dXJuIGk8MCYmKHIrPWkvMixpPTApLGE8MCYmKG4rPWEvMixhPTApLHt4OnIseTpuLGR4OmksZHk6YX19ZnVuY3Rpb24gem4odCl7dmFyIGU9dFswXSxyPXRbdC5sZW5ndGgtMV07cmV0dXJuIGU8cj9bZSxyXTpbcixlXX1mdW5jdGlvbiBEbih0KXtyZXR1cm4gdC5yYW5nZUV4dGVudD90LnJhbmdlRXh0ZW50KCk6em4odC5yYW5nZSgpKX1mdW5jdGlvbiBSbih0LGUscixuKXt2YXIgaT1yKHRbMF0sdFsxXSksYT1uKGVbMF0sZVsxXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBhKGkodCkpfX1mdW5jdGlvbiBGbih0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoLTEsYT10W25dLG89dFtpXTtyZXR1cm4gbzxhJiYocj1uLG49aSxpPXIscj1hLGE9byxvPXIpLHRbbl09ZS5mbG9vcihhKSx0W2ldPWUuY2VpbChvKSx0fWZ1bmN0aW9uIEJuKHQpe3JldHVybiB0P3tmbG9vcjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5mbG9vcihlL3QpKnR9LGNlaWw6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguY2VpbChlL3QpKnR9fTpObn10LmxheW91dC5oaXN0b2dyYW09ZnVuY3Rpb24oKXt2YXIgZT0hMCxyPU51bWJlcixuPXluLGk9Z247ZnVuY3Rpb24gYShhLG8pe2Zvcih2YXIgcyxsLGM9W10sdT1hLm1hcChyLHRoaXMpLGY9bi5jYWxsKHRoaXMsdSxvKSxoPWkuY2FsbCh0aGlzLGYsdSxvKSxwPShvPS0xLHUubGVuZ3RoKSxkPWgubGVuZ3RoLTEsbT1lPzE6MS9wOysrbzxkOykocz1jW29dPVtdKS5keD1oW28rMV0tKHMueD1oW29dKSxzLnk9MDtpZihkPjApZm9yKG89LTE7KytvPHA7KShsPXVbb10pPj1mWzBdJiZsPD1mWzFdJiYoKHM9Y1t0LmJpc2VjdChoLGwsMSxkKS0xXSkueSs9bSxzLnB1c2goYVtvXSkpO3JldHVybiBjfXJldHVybiBhLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jZSh0KSxhKTpufSxhLmJpbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9Im51bWJlciI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUpe3JldHVybiB2bihlLHQpfTpjZSh0KSxhKTppfSxhLmZyZXF1ZW5jeT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0hIXQsYSk6ZX0sYX0sdC5sYXlvdXQucGFjaz1mdW5jdGlvbigpe3ZhciBlLHI9dC5sYXlvdXQuaGllcmFyY2h5KCkuc29ydCh4biksbj0wLGk9WzEsMV07ZnVuY3Rpb24gYSh0LGEpe3ZhciBvPXIuY2FsbCh0aGlzLHQsYSkscz1vWzBdLGw9aVswXSxjPWlbMV0sdT1udWxsPT1lP01hdGguc3FydDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ1bmN0aW9uKCl7cmV0dXJuIGV9O2lmKHMueD1zLnk9MCwkcihzLChmdW5jdGlvbih0KXt0LnI9K3UodC52YWx1ZSl9KSksJHIocyxUbiksbil7dmFyIGY9biooZT8xOk1hdGgubWF4KDIqcy5yL2wsMipzLnIvYykpLzI7JHIocywoZnVuY3Rpb24odCl7dC5yKz1mfSkpLCRyKHMsVG4pLCRyKHMsKGZ1bmN0aW9uKHQpe3Quci09Zn0pKX1yZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYT1lLmNoaWxkcmVuO2lmKGUueD1yKz1pKmUueCxlLnk9bis9aSplLnksZS5yKj1pLGEpZm9yKHZhciBvPS0xLHM9YS5sZW5ndGg7KytvPHM7KXQoYVtvXSxyLG4saSl9KHMsbC8yLGMvMixlPzE6MS9NYXRoLm1heCgyKnMuci9sLDIqcy5yL2MpKSxvfXJldHVybiBhLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxhKTppfSxhLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10fHwiZnVuY3Rpb24iPT10eXBlb2YgdD90Oit0LGEpOmV9LGEucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxhKTpufSxLcihhLHIpfSx0LmxheW91dC50cmVlPWZ1bmN0aW9uKCl7dmFyIGU9dC5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxsKSxyPVNuLG49WzEsMV0saT1udWxsO2Z1bmN0aW9uIGEodCxhKXt2YXIgYz1lLmNhbGwodGhpcyx0LGEpLHU9Y1swXSxmPWZ1bmN0aW9uKHQpe3ZhciBlLHI9e0E6bnVsbCxjaGlsZHJlbjpbdF19LG49W3JdO2Zvcig7bnVsbCE9KGU9bi5wb3AoKSk7KWZvcih2YXIgaSxhPWUuY2hpbGRyZW4sbz0wLHM9YS5sZW5ndGg7bzxzOysrbyluLnB1c2goKGFbb109aT17XzphW29dLHBhcmVudDplLGNoaWxkcmVuOihpPWFbb10uY2hpbGRyZW4pJiZpLnNsaWNlKCl8fFtdLEE6bnVsbCxhOm51bGwsejowLG06MCxjOjAsczowLHQ6bnVsbCxpOm99KS5hPWkpO3JldHVybiByLmNoaWxkcmVuWzBdfSh1KTtpZigkcihmLG8pLGYucGFyZW50Lm09LWYueixRcihmLHMpLGkpUXIodSxsKTtlbHNle3ZhciBoPXUscD11LGQ9dTtRcih1LChmdW5jdGlvbih0KXt0Lng8aC54JiYoaD10KSx0Lng+cC54JiYocD10KSx0LmRlcHRoPmQuZGVwdGgmJihkPXQpfSkpO3ZhciBtPXIoaCxwKS8yLWgueCxnPW5bMF0vKHAueCtyKHAsaCkvMittKSx2PW5bMV0vKGQuZGVwdGh8fDEpO1FyKHUsKGZ1bmN0aW9uKHQpe3QueD0odC54K20pKmcsdC55PXQuZGVwdGgqdn0pKX1yZXR1cm4gY31mdW5jdGlvbiBvKHQpe3ZhciBlPXQuY2hpbGRyZW4sbj10LnBhcmVudC5jaGlsZHJlbixpPXQuaT9uW3QuaS0xXTpudWxsO2lmKGUubGVuZ3RoKXshZnVuY3Rpb24odCl7dmFyIGUscj0wLG49MCxpPXQuY2hpbGRyZW4sYT1pLmxlbmd0aDtmb3IoOy0tYT49MDspKGU9aVthXSkueis9cixlLm0rPXIscis9ZS5zKyhuKz1lLmMpfSh0KTt2YXIgYT0oZVswXS56K2VbZS5sZW5ndGgtMV0ueikvMjtpPyh0Lno9aS56K3IodC5fLGkuXyksdC5tPXQuei1hKTp0Lno9YX1lbHNlIGkmJih0Lno9aS56K3IodC5fLGkuXykpO3QucGFyZW50LkE9ZnVuY3Rpb24odCxlLG4pe2lmKGUpe2Zvcih2YXIgaSxhPXQsbz10LHM9ZSxsPWEucGFyZW50LmNoaWxkcmVuWzBdLGM9YS5tLHU9by5tLGY9cy5tLGg9bC5tO3M9TG4ocyksYT1FbihhKSxzJiZhOylsPUVuKGwpLChvPUxuKG8pKS5hPXQsKGk9cy56K2YtYS56LWMrcihzLl8sYS5fKSk+MCYmKENuKFBuKHMsdCxuKSx0LGkpLGMrPWksdSs9aSksZis9cy5tLGMrPWEubSxoKz1sLm0sdSs9by5tO3MmJiFMbihvKSYmKG8udD1zLG8ubSs9Zi11KSxhJiYhRW4obCkmJihsLnQ9YSxsLm0rPWMtaCxuPXQpfXJldHVybiBufSh0LGksdC5wYXJlbnQuQXx8blswXSl9ZnVuY3Rpb24gcyh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gbCh0KXt0LngqPW5bMF0sdC55PXQuZGVwdGgqblsxXX1yZXR1cm4gYS5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShuPXQpP2w6bnVsbCxhKTppP251bGw6bn0sYS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0obj10KT9udWxsOmwsYSk6aT9uOm51bGx9LEtyKGEsZSl9LHQubGF5b3V0LmNsdXN0ZXI9ZnVuY3Rpb24oKXt2YXIgZT10LmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLHI9U24sbj1bMSwxXSxpPSExO2Z1bmN0aW9uIGEoYSxvKXt2YXIgcyxsPWUuY2FsbCh0aGlzLGEsbyksYz1sWzBdLHU9MDskcihjLChmdW5jdGlvbihlKXt2YXIgbj1lLmNoaWxkcmVuO24mJm4ubGVuZ3RoPyhlLng9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2UueH0pLDApL3QubGVuZ3RofShuKSxlLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIDErdC5tYXgoZSwoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKX0obikpOihlLng9cz91Kz1yKGUscyk6MCxlLnk9MCxzPWUpfSkpO3ZhciBmPWZ1bmN0aW9uIHQoZSl7dmFyIHI9ZS5jaGlsZHJlbjtyZXR1cm4gciYmci5sZW5ndGg/dChyWzBdKTplfShjKSxoPWZ1bmN0aW9uIHQoZSl7dmFyIHIsbj1lLmNoaWxkcmVuO3JldHVybiBuJiYocj1uLmxlbmd0aCk/dChuW3ItMV0pOmV9KGMpLHA9Zi54LXIoZixoKS8yLGQ9aC54K3IoaCxmKS8yO3JldHVybiAkcihjLGk/ZnVuY3Rpb24odCl7dC54PSh0LngtYy54KSpuWzBdLHQueT0oYy55LXQueSkqblsxXX06ZnVuY3Rpb24odCl7dC54PSh0LngtcCkvKGQtcCkqblswXSx0Lnk9KDEtKGMueT90LnkvYy55OjEpKSpuWzFdfSksbH1yZXR1cm4gYS5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShuPXQpLGEpOmk/bnVsbDpufSxhLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGwhPShuPXQpLGEpOmk/bjpudWxsfSxLcihhLGUpfSx0LmxheW91dC50cmVlbWFwPWZ1bmN0aW9uKCl7dmFyIGUscj10LmxheW91dC5oaWVyYXJjaHkoKSxuPU1hdGgucm91bmQsaT1bMSwxXSxhPW51bGwsbz1JbixzPSExLGw9InNxdWFyaWZ5IixjPS41KigxK01hdGguc3FydCg1KSk7ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcixuLGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspbj0ocj10W2ldKS52YWx1ZSooZTwwPzA6ZSksci5hcmVhPWlzTmFOKG4pfHxuPD0wPzA6bn1mdW5jdGlvbiBmKHQpe3ZhciBlPXQuY2hpbGRyZW47aWYoZSYmZS5sZW5ndGgpe3ZhciByLG4saSxhPW8odCkscz1bXSxjPWUuc2xpY2UoKSxoPTEvMCxtPSJzbGljZSI9PT1sP2EuZHg6ImRpY2UiPT09bD9hLmR5OiJzbGljZS1kaWNlIj09PWw/MSZ0LmRlcHRoP2EuZHk6YS5keDpNYXRoLm1pbihhLmR4LGEuZHkpO2Zvcih1KGMsYS5keCphLmR5L3QudmFsdWUpLHMuYXJlYT0wOyhpPWMubGVuZ3RoKT4wOylzLnB1c2gocj1jW2ktMV0pLHMuYXJlYSs9ci5hcmVhLCJzcXVhcmlmeSIhPT1sfHwobj1wKHMsbSkpPD1oPyhjLnBvcCgpLGg9bik6KHMuYXJlYS09cy5wb3AoKS5hcmVhLGQocyxtLGEsITEpLG09TWF0aC5taW4oYS5keCxhLmR5KSxzLmxlbmd0aD1zLmFyZWE9MCxoPTEvMCk7cy5sZW5ndGgmJihkKHMsbSxhLCEwKSxzLmxlbmd0aD1zLmFyZWE9MCksZS5mb3JFYWNoKGYpfX1mdW5jdGlvbiBoKHQpe3ZhciBlPXQuY2hpbGRyZW47aWYoZSYmZS5sZW5ndGgpe3ZhciByLG49byh0KSxpPWUuc2xpY2UoKSxhPVtdO2Zvcih1KGksbi5keCpuLmR5L3QudmFsdWUpLGEuYXJlYT0wO3I9aS5wb3AoKTspYS5wdXNoKHIpLGEuYXJlYSs9ci5hcmVhLG51bGwhPXIueiYmKGQoYSxyLno/bi5keDpuLmR5LG4sIWkubGVuZ3RoKSxhLmxlbmd0aD1hLmFyZWE9MCk7ZS5mb3JFYWNoKGgpfX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByLG49dC5hcmVhLGk9MCxhPTEvMCxvPS0xLHM9dC5sZW5ndGg7KytvPHM7KShyPXRbb10uYXJlYSkmJihyPGEmJihhPXIpLHI+aSYmKGk9cikpO3JldHVybiBlKj1lLChuKj1uKT9NYXRoLm1heChlKmkqYy9uLG4vKGUqYSpjKSk6MS8wfWZ1bmN0aW9uIGQodCxlLHIsaSl7dmFyIGEsbz0tMSxzPXQubGVuZ3RoLGw9ci54LGM9ci55LHU9ZT9uKHQuYXJlYS9lKTowO2lmKGU9PXIuZHgpe2ZvcigoaXx8dT5yLmR5KSYmKHU9ci5keSk7KytvPHM7KShhPXRbb10pLng9bCxhLnk9YyxhLmR5PXUsbCs9YS5keD1NYXRoLm1pbihyLngrci5keC1sLHU/bihhLmFyZWEvdSk6MCk7YS56PSEwLGEuZHgrPXIueCtyLmR4LWwsci55Kz11LHIuZHktPXV9ZWxzZXtmb3IoKGl8fHU+ci5keCkmJih1PXIuZHgpOysrbzxzOykoYT10W29dKS54PWwsYS55PWMsYS5keD11LGMrPWEuZHk9TWF0aC5taW4oci55K3IuZHktYyx1P24oYS5hcmVhL3UpOjApO2Euej0hMSxhLmR5Kz1yLnkrci5keS1jLHIueCs9dSxyLmR4LT11fX1mdW5jdGlvbiBtKHQpe3ZhciBuPWV8fHIodCksYT1uWzBdO3JldHVybiBhLng9YS55PTAsYS52YWx1ZT8oYS5keD1pWzBdLGEuZHk9aVsxXSk6YS5keD1hLmR5PTAsZSYmci5yZXZhbHVlKGEpLHUoW2FdLGEuZHgqYS5keS9hLnZhbHVlKSwoZT9oOmYpKGEpLHMmJihlPW4pLG59cmV0dXJuIG0uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LG0pOml9LG0ucGFkZGluZz1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYTtmdW5jdGlvbiBlKGUpe3ZhciByPXQuY2FsbChtLGUsZS5kZXB0aCk7cmV0dXJuIG51bGw9PXI/SW4oZSk6T24oZSwibnVtYmVyIj09dHlwZW9mIHI/W3IscixyLHJdOnIpfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIE9uKGUsdCl9dmFyIG47cmV0dXJuIG89bnVsbD09KGE9dCk/SW46ImZ1bmN0aW9uIj09KG49dHlwZW9mIHQpP2U6Im51bWJlciI9PT1uPyh0PVt0LHQsdCx0XSxyKTpyLG19LG0ucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dD9NYXRoLnJvdW5kOk51bWJlcixtKTpuIT1OdW1iZXJ9LG0uc3RpY2t5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsZT1udWxsLG0pOnN9LG0ucmF0aW89ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxtKTpjfSxtLm1vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCsiIixtKTpsfSxLcihtLHIpfSx0LnJhbmRvbT17bm9ybWFsOmZ1bmN0aW9uKHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gcjwyJiYoZT0xKSxyPDEmJih0PTApLGZ1bmN0aW9uKCl7dmFyIHIsbixpO2Rve2k9KHI9MipNYXRoLnJhbmRvbSgpLTEpKnIrKG49MipNYXRoLnJhbmRvbSgpLTEpKm59d2hpbGUoIWl8fGk+MSk7cmV0dXJuIHQrZSpyKk1hdGguc3FydCgtMipNYXRoLmxvZyhpKS9pKX19LGxvZ05vcm1hbDpmdW5jdGlvbigpe3ZhciBlPXQucmFuZG9tLm5vcm1hbC5hcHBseSh0LGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKGUoKSl9fSxiYXRlczpmdW5jdGlvbihlKXt2YXIgcj10LnJhbmRvbS5pcndpbkhhbGwoZSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIoKS9lfX0saXJ3aW5IYWxsOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT0wLHI9MDtyPHQ7cisrKWUrPU1hdGgucmFuZG9tKCk7cmV0dXJuIGV9fX0sdC5zY2FsZT17fTt2YXIgTm49e2Zsb29yOkMsY2VpbDpDfTtmdW5jdGlvbiBqbihlLHIsbixpKXt2YXIgYT1bXSxvPVtdLHM9MCxsPU1hdGgubWluKGUubGVuZ3RoLHIubGVuZ3RoKS0xO2ZvcihlW2xdPGVbMF0mJihlPWUuc2xpY2UoKS5yZXZlcnNlKCkscj1yLnNsaWNlKCkucmV2ZXJzZSgpKTsrK3M8PWw7KWEucHVzaChuKGVbcy0xXSxlW3NdKSksby5wdXNoKGkocltzLTFdLHJbc10pKTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dC5iaXNlY3QoZSxyLDEsbCktMTtyZXR1cm4gb1tuXShhW25dKHIpKX19ZnVuY3Rpb24gVW4oZSxyKXtyZXR1cm4gdC5yZWJpbmQoZSxyLCJyYW5nZSIsInJhbmdlUm91bmQiLCJpbnRlcnBvbGF0ZSIsImNsYW1wIil9ZnVuY3Rpb24gVm4odCxlKXtyZXR1cm4gRm4odCxCbihIbih0LGUpWzJdKSksRm4odCxCbihIbih0LGUpWzJdKSksdH1mdW5jdGlvbiBIbih0LGUpe251bGw9PWUmJihlPTEwKTt2YXIgcj16bih0KSxuPXJbMV0tclswXSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobi9lKS9NYXRoLkxOMTApKSxhPWUvbippO3JldHVybiBhPD0uMTU/aSo9MTA6YTw9LjM1P2kqPTU6YTw9Ljc1JiYoaSo9MiksclswXT1NYXRoLmNlaWwoclswXS9pKSppLHJbMV09TWF0aC5mbG9vcihyWzFdL2kpKmkrLjUqaSxyWzJdPWkscn1mdW5jdGlvbiBxbihlLHIpe3JldHVybiB0LnJhbmdlLmFwcGx5KHQsSG4oZSxyKSl9dC5zY2FsZS5saW5lYXI9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYSxvO2Z1bmN0aW9uIHMoKXt2YXIgdD1NYXRoLm1pbihlLmxlbmd0aCxyLmxlbmd0aCk+Mj9qbjpSbixzPWk/VXI6anI7cmV0dXJuIGE9dChlLHIscyxuKSxvPXQocixlLHMseXIpLGx9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gYSh0KX1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG8odCl9LGwuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQubWFwKE51bWJlcikscygpKTplfSxsLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQscygpKTpyfSxsLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwucmFuZ2UodCkuaW50ZXJwb2xhdGUoT3IpfSxsLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQscygpKTppfSxsLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQscygpKTpufSxsLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBxbihlLHQpfSxsLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZDNfc2NhbGVfbGluZWFyVGlja0Zvcm1hdChlLHQscil9LGwubmljZT1mdW5jdGlvbih0KXtyZXR1cm4gVm4oZSx0KSxzKCl9LGwuY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUscixuLGkpfSxzKCl9KFswLDFdLFswLDFdLHlyLCExKX07dC5zY2FsZS5sb2c9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXtmdW5jdGlvbiBhKHQpe3JldHVybihuP01hdGgubG9nKHQ8MD8wOnQpOi1NYXRoLmxvZyh0PjA/MDotdCkpL01hdGgubG9nKHIpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIG4/TWF0aC5wb3cocix0KTotTWF0aC5wb3cociwtdCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZShhKHQpKX1yZXR1cm4gcy5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG8oZS5pbnZlcnQodCkpfSxzLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10WzBdPj0wLGUuZG9tYWluKChpPXQubWFwKE51bWJlcikpLm1hcChhKSkscyk6aX0scy5iYXNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LGUuZG9tYWluKGkubWFwKGEpKSxzKTpyfSxzLm5pY2U9ZnVuY3Rpb24oKXt2YXIgdD1GbihpLm1hcChhKSxuP01hdGg6R24pO3JldHVybiBlLmRvbWFpbih0KSxpPXQubWFwKG8pLHN9LHMudGlja3M9ZnVuY3Rpb24oKXt2YXIgdD16bihpKSxlPVtdLHM9dFswXSxsPXRbMV0sYz1NYXRoLmZsb29yKGEocykpLHU9TWF0aC5jZWlsKGEobCkpLGY9ciUxPzI6cjtpZihpc0Zpbml0ZSh1LWMpKXtpZihuKXtmb3IoO2M8dTtjKyspZm9yKHZhciBoPTE7aDxmO2grKyllLnB1c2gobyhjKSpoKTtlLnB1c2gobyhjKSl9ZWxzZSBmb3IoZS5wdXNoKG8oYykpO2MrKzx1Oylmb3IoaD1mLTE7aD4wO2gtLSllLnB1c2gobyhjKSpoKTtmb3IoYz0wO2VbY108cztjKyspO2Zvcih1PWUubGVuZ3RoO2VbdS0xXT5sO3UtLSk7ZT1lLnNsaWNlKGMsdSl9cmV0dXJuIGV9LHMuY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUuY29weSgpLHIsbixpKX0sVW4ocyxlKX0odC5zY2FsZS5saW5lYXIoKS5kb21haW4oWzAsMV0pLDEwLCEwLFsxLDEwXSl9O3ZhciBHbj17Zmxvb3I6ZnVuY3Rpb24odCl7cmV0dXJuLU1hdGguY2VpbCgtdCl9LGNlaWw6ZnVuY3Rpb24odCl7cmV0dXJuLU1hdGguZmxvb3IoLXQpfX07ZnVuY3Rpb24gWW4odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlPDA/LU1hdGgucG93KC1lLHQpOk1hdGgucG93KGUsdCl9fXQuc2NhbGUucG93PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBpPVluKHIpLGE9WW4oMS9yKTtmdW5jdGlvbiBvKHQpe3JldHVybiBlKGkodCkpfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gYShlLmludmVydCh0KSl9LG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmRvbWFpbigobj10Lm1hcChOdW1iZXIpKS5tYXAoaSkpLG8pOm59LG8udGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIHFuKG4sdCl9LG8udGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBkM19zY2FsZV9saW5lYXJUaWNrRm9ybWF0KG4sdCxlKX0sby5uaWNlPWZ1bmN0aW9uKHQpe3JldHVybiBvLmRvbWFpbihWbihuLHQpKX0sby5leHBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1ZbihyPXQpLGE9WW4oMS9yKSxlLmRvbWFpbihuLm1hcChpKSksbyk6cn0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoZS5jb3B5KCkscixuKX0sVW4obyxlKX0odC5zY2FsZS5saW5lYXIoKSwxLFswLDFdKX0sdC5zY2FsZS5zcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2NhbGUucG93KCkuZXhwb25lbnQoLjUpfSx0LnNjYWxlLm9yZGluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZShyLG4pe3ZhciBpLGEsbztmdW5jdGlvbiBzKHQpe3JldHVybiBhWygoaS5nZXQodCl8fCgicmFuZ2UiPT09bi50P2kuc2V0KHQsci5wdXNoKHQpKTpOYU4pKS0xKSVhLmxlbmd0aF19ZnVuY3Rpb24gbChlLG4pe3JldHVybiB0LnJhbmdlKHIubGVuZ3RoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlK24qdH0pKX1yZXR1cm4gcy5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHI7cj1bXSxpPW5ldyBfO2Zvcih2YXIgZSxhPS0xLG89dC5sZW5ndGg7KythPG87KWkuaGFzKGU9dFthXSl8fGkuc2V0KGUsci5wdXNoKGUpKTtyZXR1cm4gc1tuLnRdLmFwcGx5KHMsbi5hKX0scy5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LG89MCxuPXt0OiJyYW5nZSIsYTphcmd1bWVudHN9LHMpOmF9LHMucmFuZ2VQb2ludHM9ZnVuY3Rpb24odCxlKXthcmd1bWVudHMubGVuZ3RoPDImJihlPTApO3ZhciBpPXRbMF0sYz10WzFdLHU9ci5sZW5ndGg8Mj8oaT0oaStjKS8yLDApOihjLWkpLyhyLmxlbmd0aC0xK2UpO3JldHVybiBhPWwoaSt1KmUvMix1KSxvPTAsbj17dDoicmFuZ2VQb2ludHMiLGE6YXJndW1lbnRzfSxzfSxzLnJhbmdlUm91bmRQb2ludHM9ZnVuY3Rpb24odCxlKXthcmd1bWVudHMubGVuZ3RoPDImJihlPTApO3ZhciBpPXRbMF0sYz10WzFdLHU9ci5sZW5ndGg8Mj8oaT1jPU1hdGgucm91bmQoKGkrYykvMiksMCk6KGMtaSkvKHIubGVuZ3RoLTErZSl8MDtyZXR1cm4gYT1sKGkrTWF0aC5yb3VuZCh1KmUvMisoYy1pLShyLmxlbmd0aC0xK2UpKnUpLzIpLHUpLG89MCxuPXt0OiJyYW5nZVJvdW5kUG9pbnRzIixhOmFyZ3VtZW50c30sc30scy5yYW5nZUJhbmRzPWZ1bmN0aW9uKHQsZSxpKXthcmd1bWVudHMubGVuZ3RoPDImJihlPTApLGFyZ3VtZW50cy5sZW5ndGg8MyYmKGk9ZSk7dmFyIGM9dFsxXTx0WzBdLHU9dFtjLTBdLGY9dFsxLWNdLGg9KGYtdSkvKHIubGVuZ3RoLWUrMippKTtyZXR1cm4gYT1sKHUraCppLGgpLGMmJmEucmV2ZXJzZSgpLG89aCooMS1lKSxuPXt0OiJyYW5nZUJhbmRzIixhOmFyZ3VtZW50c30sc30scy5yYW5nZVJvdW5kQmFuZHM9ZnVuY3Rpb24odCxlLGkpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYoaT1lKTt2YXIgYz10WzFdPHRbMF0sdT10W2MtMF0sZj10WzEtY10saD1NYXRoLmZsb29yKChmLXUpLyhyLmxlbmd0aC1lKzIqaSkpO3JldHVybiBhPWwodStNYXRoLnJvdW5kKChmLXUtKHIubGVuZ3RoLWUpKmgpLzIpLGgpLGMmJmEucmV2ZXJzZSgpLG89TWF0aC5yb3VuZChoKigxLWUpKSxuPXt0OiJyYW5nZVJvdW5kQmFuZHMiLGE6YXJndW1lbnRzfSxzfSxzLnJhbmdlQmFuZD1mdW5jdGlvbigpe3JldHVybiBvfSxzLnJhbmdlRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHpuKG4uYVswXSl9LHMuY29weT1mdW5jdGlvbigpe3JldHVybiBlKHIsbil9LHMuZG9tYWluKHIpfShbXSx7dDoicmFuZ2UiLGE6W1tdXX0pfSx0LnNjYWxlLmNhdGVnb3J5MTA9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoV24pfSx0LnNjYWxlLmNhdGVnb3J5MjA9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoWG4pfSx0LnNjYWxlLmNhdGVnb3J5MjBiPWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2NhbGUub3JkaW5hbCgpLnJhbmdlKFpuKX0sdC5zY2FsZS5jYXRlZ29yeTIwYz1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLm9yZGluYWwoKS5yYW5nZShKbil9O3ZhciBXbj1bMjA2MjI2MCwxNjc0NDIwNiwyOTI0NTg4LDE0MDM0NzI4LDk3MjU4ODUsOTE5NzEzMSwxNDkwNzMzMCw4MzU1NzExLDEyMzY5MTg2LDE1NTYxNzVdLm1hcCh0ZSksWG49WzIwNjIyNjAsMTE0NTQ0NDAsMTY3NDQyMDYsMTY3NTk2NzIsMjkyNDU4OCwxMDAxODY5OCwxNDAzNDcyOCwxNjc1MDc0Miw5NzI1ODg1LDEyOTU1ODYxLDkxOTcxMzEsMTI4ODUxNDAsMTQ5MDczMzAsMTYyMzQxOTQsODM1NTcxMSwxMzA5MjgwNywxMjM2OTE4NiwxNDQwODU4OSwxNTU2MTc1LDEwNDEwNzI1XS5tYXAodGUpLFpuPVszNzUwNzc3LDUzOTU2MTksNzA0MDcxOSwxMDI2NDI4Niw2NTE5MDk3LDkyMTY1OTQsMTE5MTUxMTUsMTM1NTY2MzYsOTIwMjk5MywxMjQyNjgwOSwxNTE4NjUxNCwxNTE5MDkzMiw4NjY2MTY5LDExMzU2NDkwLDE0MDQ5NjQzLDE1MTc3MzcyLDgwNzc2ODMsMTA4MzQzMjQsMTM1Mjg1MDksMTQ1ODk2NTRdLm1hcCh0ZSksSm49WzMyNDQ3MzMsNzA1NzExMCwxMDQwNjYyNSwxMzAzMjQzMSwxNTA5NTA1MywxNjYxNjc2NCwxNjYyNTI1OSwxNjYzNDAxOCwzMjUzMDc2LDc2NTI0NzAsMTA2MDcwMDMsMTMxMDE1MDQsNzY5NTI4MSwxMDM5NDMxMiwxMjM2OTM3MiwxNDM0Mjg5MSw2NTEzNTA3LDk4Njg5NTAsMTI0MzQ4NzcsMTQyNzcwODFdLm1hcCh0ZSk7ZnVuY3Rpb24gS24oKXtyZXR1cm4gMH10LnNjYWxlLnF1YW50aWxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuKXt2YXIgaTtmdW5jdGlvbiBhKCl7dmFyIGU9MCxhPW4ubGVuZ3RoO2ZvcihpPVtdOysrZTxhOylpW2UtMV09dC5xdWFudGlsZShyLGUvYSk7cmV0dXJuIG99ZnVuY3Rpb24gbyhlKXtpZighaXNOYU4oZT0rZSkpcmV0dXJuIG5bdC5iaXNlY3QoaSxlKV19cmV0dXJuIG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQubWFwKHApLmZpbHRlcihkKS5zb3J0KGgpLGEoKSk6cn0sby5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGEoKSk6bn0sby5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gaX0sby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuKHQ9bi5pbmRleE9mKHQpKTwwP1tOYU4sTmFOXTpbdD4wP2lbdC0xXTpyWzBdLHQ8aS5sZW5ndGg/aVt0XTpyW3IubGVuZ3RoLTFdXX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUocixuKX0sYSgpfShbXSxbXSl9LHQuc2NhbGUucXVhbnRpemU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbil7dmFyIGksYTtmdW5jdGlvbiBvKHQpe3JldHVybiBuW01hdGgubWF4KDAsTWF0aC5taW4oYSxNYXRoLmZsb29yKGkqKHQtZSkpKSldfWZ1bmN0aW9uIHMoKXtyZXR1cm4gaT1uLmxlbmd0aC8oci1lKSxhPW4ubGVuZ3RoLTEsb31yZXR1cm4gby5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0scj0rdFt0Lmxlbmd0aC0xXSxzKCkpOltlLHJdfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQscygpKTpufSxvLmludmVydEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm5bdD0odD1uLmluZGV4T2YodCkpPDA/TmFOOnQvaStlLHQrMS9pXX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoZSxyLG4pfSxzKCl9KDAsMSxbMCwxXSl9LHQuc2NhbGUudGhyZXNob2xkPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuKXtmdW5jdGlvbiBpKGUpe2lmKGU8PWUpcmV0dXJuIG5bdC5iaXNlY3QocixlKV19cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaSk6cn0saS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGkpOm59LGkuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0PW4uaW5kZXhPZih0KSxbclt0LTFdLHJbdF1dfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZShyLG4pfSxpfShbLjVdLFswLDFdKX0sdC5zY2FsZS5pZGVudGl0eT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuK3R9cmV0dXJuIHIuaW52ZXJ0PXIsci5kb21haW49ci5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10Lm1hcChyKSxyKTplfSxyLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBxbihlLHQpfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZDNfc2NhbGVfbGluZWFyVGlja0Zvcm1hdChlLHQscil9LHIuY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUpfSxyfShbMCwxXSl9LHQuc3ZnPXt9LHQuc3ZnLmFyYz1mdW5jdGlvbigpe3ZhciB0PSRuLGU9dGkscj1LbixuPVFuLGk9ZWksYT1yaSxvPW5pO2Z1bmN0aW9uIHMoKXt2YXIgcz1NYXRoLm1heCgwLCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYz1NYXRoLm1heCgwLCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksdT1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1FdCxmPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLUV0LGg9TWF0aC5hYnMoZi11KSxwPXU+Zj8wOjE7aWYoYzxzJiYoZD1jLGM9cyxzPWQpLGg+PVN0KXJldHVybiBsKGMscCkrKHM/bChzLDEtcCk6IiIpKyJaIjt2YXIgZCxtLGcsdix5LHgsYixfLHcsVCxrLEEsTT0wLFM9MCxFPVtdO2lmKCh2PSgrby5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDApLzIpJiYoZz1uPT09UW4/TWF0aC5zcXJ0KHMqcytjKmMpOituLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxwfHwoUyo9LTEpLGMmJihTPVB0KGcvYypNYXRoLnNpbih2KSkpLHMmJihNPVB0KGcvcypNYXRoLnNpbih2KSkpKSxjKXt5PWMqTWF0aC5jb3ModStTKSx4PWMqTWF0aC5zaW4odStTKSxiPWMqTWF0aC5jb3MoZi1TKSxfPWMqTWF0aC5zaW4oZi1TKTt2YXIgTD1NYXRoLmFicyhmLXUtMipTKTw9QXQ/MDoxO2lmKFMmJmlpKHkseCxiLF8pPT09cF5MKXt2YXIgQz0odStmKS8yO3k9YypNYXRoLmNvcyhDKSx4PWMqTWF0aC5zaW4oQyksYj1fPW51bGx9fWVsc2UgeT14PTA7aWYocyl7dz1zKk1hdGguY29zKGYtTSksVD1zKk1hdGguc2luKGYtTSksaz1zKk1hdGguY29zKHUrTSksQT1zKk1hdGguc2luKHUrTSk7dmFyIFA9TWF0aC5hYnModS1mKzIqTSk8PUF0PzA6MTtpZihNJiZpaSh3LFQsayxBKT09PTEtcF5QKXt2YXIgST0odStmKS8yO3c9cypNYXRoLmNvcyhJKSxUPXMqTWF0aC5zaW4oSSksaz1BPW51bGx9fWVsc2Ugdz1UPTA7aWYoaD5rdCYmKGQ9TWF0aC5taW4oTWF0aC5hYnMoYy1zKS8yLCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpPi4wMDEpe209czxjXnA/MDoxO3ZhciBPPWQsej1kO2lmKGg8QXQpe3ZhciBEPW51bGw9PWs/W3csVF06bnVsbD09Yj9beSx4XTpTZShbeSx4XSxbayxBXSxbYixfXSxbdyxUXSksUj15LURbMF0sRj14LURbMV0sQj1iLURbMF0sTj1fLURbMV0saj0xL01hdGguc2luKE1hdGguYWNvcygoUipCK0YqTikvKE1hdGguc3FydChSKlIrRipGKSpNYXRoLnNxcnQoQipCK04qTikpKS8yKSxVPU1hdGguc3FydChEWzBdKkRbMF0rRFsxXSpEWzFdKTt6PU1hdGgubWluKGQsKHMtVSkvKGotMSkpLE89TWF0aC5taW4oZCwoYy1VKS8oaisxKSl9aWYobnVsbCE9Yil7dmFyIFY9YWkobnVsbD09az9bdyxUXTpbayxBXSxbeSx4XSxjLE8scCksSD1haShbYixfXSxbdyxUXSxjLE8scCk7ZD09PU8/RS5wdXNoKCJNIixWWzBdLCJBIixPLCIsIixPLCIgMCAwLCIsbSwiICIsVlsxXSwiQSIsYywiLCIsYywiIDAgIiwxLXBeaWkoVlsxXVswXSxWWzFdWzFdLEhbMV1bMF0sSFsxXVsxXSksIiwiLHAsIiAiLEhbMV0sIkEiLE8sIiwiLE8sIiAwIDAsIixtLCIgIixIWzBdKTpFLnB1c2goIk0iLFZbMF0sIkEiLE8sIiwiLE8sIiAwIDEsIixtLCIgIixIWzBdKX1lbHNlIEUucHVzaCgiTSIseSwiLCIseCk7aWYobnVsbCE9ayl7dmFyIHE9YWkoW3kseF0sW2ssQV0scywteixwKSxHPWFpKFt3LFRdLG51bGw9PWI/W3kseF06W2IsX10scywteixwKTtkPT09ej9FLnB1c2goIkwiLEdbMF0sIkEiLHosIiwiLHosIiAwIDAsIixtLCIgIixHWzFdLCJBIixzLCIsIixzLCIgMCAiLHBeaWkoR1sxXVswXSxHWzFdWzFdLHFbMV1bMF0scVsxXVsxXSksIiwiLDEtcCwiICIscVsxXSwiQSIseiwiLCIseiwiIDAgMCwiLG0sIiAiLHFbMF0pOkUucHVzaCgiTCIsR1swXSwiQSIseiwiLCIseiwiIDAgMCwiLG0sIiAiLHFbMF0pfWVsc2UgRS5wdXNoKCJMIix3LCIsIixUKX1lbHNlIEUucHVzaCgiTSIseSwiLCIseCksbnVsbCE9YiYmRS5wdXNoKCJBIixjLCIsIixjLCIgMCAiLEwsIiwiLHAsIiAiLGIsIiwiLF8pLEUucHVzaCgiTCIsdywiLCIsVCksbnVsbCE9ayYmRS5wdXNoKCJBIixzLCIsIixzLCIgMCAiLFAsIiwiLDEtcCwiICIsaywiLCIsQSk7cmV0dXJuIEUucHVzaCgiWiIpLEUuam9pbigiIil9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiJNMCwiK3QrIkEiK3QrIiwiK3QrIiAwIDEsIitlKyIgMCwiKy10KyJBIit0KyIsIit0KyIgMCAxLCIrZSsiIDAsIit0fXJldHVybiBzLmlubmVyUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWNlKGUpLHMpOnR9LHMub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Y2UodCkscyk6ZX0scy5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9Y2UodCkscyk6cn0scy5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dD09UW4/UW46Y2UodCkscyk6bn0scy5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWNlKHQpLHMpOml9LHMuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9Y2UodCkscyk6YX0scy5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1jZSh0KSxzKTpvfSxzLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIHI9KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLG49KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLUV0O3JldHVybltNYXRoLmNvcyhuKSpyLE1hdGguc2luKG4pKnJdfSxzfTt2YXIgUW49ImF1dG8iO2Z1bmN0aW9uICRuKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIHRpKHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIGVpKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gcmkodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gbmkodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gaWkodCxlLHIsbil7cmV0dXJuKHQtcikqZS0oZS1uKSp0PjA/MDoxfWZ1bmN0aW9uIGFpKHQsZSxyLG4saSl7dmFyIGE9dFswXS1lWzBdLG89dFsxXS1lWzFdLHM9KGk/bjotbikvTWF0aC5zcXJ0KGEqYStvKm8pLGw9cypvLGM9LXMqYSx1PXRbMF0rbCxmPXRbMV0rYyxoPWVbMF0rbCxwPWVbMV0rYyxkPSh1K2gpLzIsbT0oZitwKS8yLGc9aC11LHY9cC1mLHk9ZypnK3Yqdix4PXItbixiPXUqcC1oKmYsXz0odjwwPy0xOjEpKk1hdGguc3FydChNYXRoLm1heCgwLHgqeCp5LWIqYikpLHc9KGIqdi1nKl8pL3ksVD0oLWIqZy12Kl8pL3ksaz0oYip2K2cqXykveSxBPSgtYipnK3YqXykveSxNPXctZCxTPVQtbSxFPWstZCxMPUEtbTtyZXR1cm4gTSpNK1MqUz5FKkUrTCpMJiYodz1rLFQ9QSksW1t3LWwsVC1jXSxbdypyL3gsVCpyL3hdXX1mdW5jdGlvbiBvaSgpe3JldHVybiEwfWZ1bmN0aW9uIHNpKHQpe3ZhciBlPV9lLHI9d2Usbj1vaSxpPWNpLGE9aS5rZXksbz0uNztmdW5jdGlvbiBzKGEpe3ZhciBzLGw9W10sYz1bXSx1PS0xLGY9YS5sZW5ndGgsaD1jZShlKSxwPWNlKHIpO2Z1bmN0aW9uIGQoKXtsLnB1c2goIk0iLGkodChjKSxvKSl9Zm9yKDsrK3U8Zjspbi5jYWxsKHRoaXMscz1hW3VdLHUpP2MucHVzaChbK2guY2FsbCh0aGlzLHMsdSksK3AuY2FsbCh0aGlzLHMsdSldKTpjLmxlbmd0aCYmKGQoKSxjPVtdKTtyZXR1cm4gYy5sZW5ndGgmJmQoKSxsLmxlbmd0aD9sLmpvaW4oIiIpOm51bGx9cmV0dXJuIHMueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHMpOmV9LHMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LHMpOnJ9LHMuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LHMpOm59LHMuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/aT10OihpPWxpLmdldCh0KXx8Y2kpLmtleSxzKTphfSxzLnRlbnNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxzKTpvfSxzfXQuc3ZnLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gc2koQyl9O3ZhciBsaT10Lm1hcCh7bGluZWFyOmNpLCJsaW5lYXItY2xvc2VkIjp1aSxzdGVwOmZ1bmN0aW9uKHQpe3ZhciBlPTAscj10Lmxlbmd0aCxuPXRbMF0saT1bblswXSwiLCIsblsxXV07Zm9yKDsrK2U8cjspaS5wdXNoKCJIIiwoblswXSsobj10W2VdKVswXSkvMiwiViIsblsxXSk7cj4xJiZpLnB1c2goIkgiLG5bMF0pO3JldHVybiBpLmpvaW4oIiIpfSwic3RlcC1iZWZvcmUiOmZpLCJzdGVwLWFmdGVyIjpoaSxiYXNpczptaSwiYmFzaXMtb3BlbiI6ZnVuY3Rpb24odCl7aWYodC5sZW5ndGg8NClyZXR1cm4gY2kodCk7dmFyIGUscj1bXSxuPS0xLGk9dC5sZW5ndGgsYT1bMF0sbz1bMF07Zm9yKDsrK248MzspZT10W25dLGEucHVzaChlWzBdKSxvLnB1c2goZVsxXSk7ci5wdXNoKGdpKHhpLGEpKyIsIitnaSh4aSxvKSksLS1uO2Zvcig7KytuPGk7KWU9dFtuXSxhLnNoaWZ0KCksYS5wdXNoKGVbMF0pLG8uc2hpZnQoKSxvLnB1c2goZVsxXSksYmkocixhLG8pO3JldHVybiByLmpvaW4oIiIpfSwiYmFzaXMtY2xvc2VkIjpmdW5jdGlvbih0KXt2YXIgZSxyLG49LTEsaT10Lmxlbmd0aCxhPWkrNCxvPVtdLHM9W107Zm9yKDsrK248NDspcj10W24laV0sby5wdXNoKHJbMF0pLHMucHVzaChyWzFdKTtlPVtnaSh4aSxvKSwiLCIsZ2koeGkscyldLC0tbjtmb3IoOysrbjxhOylyPXRbbiVpXSxvLnNoaWZ0KCksby5wdXNoKHJbMF0pLHMuc2hpZnQoKSxzLnB1c2goclsxXSksYmkoZSxvLHMpO3JldHVybiBlLmpvaW4oIiIpfSxidW5kbGU6ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aC0xO2lmKHIpZm9yKHZhciBuLGksYT10WzBdWzBdLG89dFswXVsxXSxzPXRbcl1bMF0tYSxsPXRbcl1bMV0tbyxjPS0xOysrYzw9cjspbj10W2NdLGk9Yy9yLG5bMF09ZSpuWzBdKygxLWUpKihhK2kqcyksblsxXT1lKm5bMV0rKDEtZSkqKG8raSpsKTtyZXR1cm4gbWkodCl9LGNhcmRpbmFsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDM/Y2kodCk6dFswXStwaSh0LGRpKHQsZSkpfSwiY2FyZGluYWwtb3BlbiI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGg8ND9jaSh0KTp0WzFdK3BpKHQuc2xpY2UoMSwtMSksZGkodCxlKSl9LCJjYXJkaW5hbC1jbG9zZWQiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDM/dWkodCk6dFswXStwaSgodC5wdXNoKHRbMF0pLHQpLGRpKFt0W3QubGVuZ3RoLTJdXS5jb25jYXQodCxbdFsxXV0pLGUpKX0sbW9ub3RvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RoPDM/Y2kodCk6dFswXStwaSh0LGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9W10sbz1mdW5jdGlvbih0KXt2YXIgZT0wLHI9dC5sZW5ndGgtMSxuPVtdLGk9dFswXSxhPXRbMV0sbz1uWzBdPV9pKGksYSk7Zm9yKDsrK2U8cjspbltlXT0obysobz1faShpPWEsYT10W2UrMV0pKSkvMjtyZXR1cm4gbltlXT1vLG59KHQpLHM9LTEsbD10Lmxlbmd0aC0xO2Zvcig7KytzPGw7KWU9X2kodFtzXSx0W3MrMV0pLHkoZSk8a3Q/b1tzXT1vW3MrMV09MDoocj1vW3NdL2Usbj1vW3MrMV0vZSwoaT1yKnIrbipuKT45JiYoaT0zKmUvTWF0aC5zcXJ0KGkpLG9bc109aSpyLG9bcysxXT1pKm4pKTtzPS0xO2Zvcig7KytzPD1sOylpPSh0W01hdGgubWluKGwscysxKV1bMF0tdFtNYXRoLm1heCgwLHMtMSldWzBdKS8oNiooMStvW3NdKm9bc10pKSxhLnB1c2goW2l8fDAsb1tzXSppfHwwXSk7cmV0dXJuIGF9KHQpKX19KTtmdW5jdGlvbiBjaSh0KXtyZXR1cm4gdC5sZW5ndGg+MT90LmpvaW4oIkwiKTp0KyJaIn1mdW5jdGlvbiB1aSh0KXtyZXR1cm4gdC5qb2luKCJMIikrIloifWZ1bmN0aW9uIGZpKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgsbj10WzBdLGk9W25bMF0sIiwiLG5bMV1dOysrZTxyOylpLnB1c2goIlYiLChuPXRbZV0pWzFdLCJIIixuWzBdKTtyZXR1cm4gaS5qb2luKCIiKX1mdW5jdGlvbiBoaSh0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLG49dFswXSxpPVtuWzBdLCIsIixuWzFdXTsrK2U8cjspaS5wdXNoKCJIIiwobj10W2VdKVswXSwiViIsblsxXSk7cmV0dXJuIGkuam9pbigiIil9ZnVuY3Rpb24gcGkodCxlKXtpZihlLmxlbmd0aDwxfHx0Lmxlbmd0aCE9ZS5sZW5ndGgmJnQubGVuZ3RoIT1lLmxlbmd0aCsyKXJldHVybiBjaSh0KTt2YXIgcj10Lmxlbmd0aCE9ZS5sZW5ndGgsbj0iIixpPXRbMF0sYT10WzFdLG89ZVswXSxzPW8sbD0xO2lmKHImJihuKz0iUSIrKGFbMF0tMipvWzBdLzMpKyIsIisoYVsxXS0yKm9bMV0vMykrIiwiK2FbMF0rIiwiK2FbMV0saT10WzFdLGw9MiksZS5sZW5ndGg+MSl7cz1lWzFdLGE9dFtsXSxsKyssbis9IkMiKyhpWzBdK29bMF0pKyIsIisoaVsxXStvWzFdKSsiLCIrKGFbMF0tc1swXSkrIiwiKyhhWzFdLXNbMV0pKyIsIithWzBdKyIsIithWzFdO2Zvcih2YXIgYz0yO2M8ZS5sZW5ndGg7YysrLGwrKylhPXRbbF0scz1lW2NdLG4rPSJTIisoYVswXS1zWzBdKSsiLCIrKGFbMV0tc1sxXSkrIiwiK2FbMF0rIiwiK2FbMV19aWYocil7dmFyIHU9dFtsXTtuKz0iUSIrKGFbMF0rMipzWzBdLzMpKyIsIisoYVsxXSsyKnNbMV0vMykrIiwiK3VbMF0rIiwiK3VbMV19cmV0dXJuIG59ZnVuY3Rpb24gZGkodCxlKXtmb3IodmFyIHIsbj1bXSxpPSgxLWUpLzIsYT10WzBdLG89dFsxXSxzPTEsbD10Lmxlbmd0aDsrK3M8bDspcj1hLGE9byxvPXRbc10sbi5wdXNoKFtpKihvWzBdLXJbMF0pLGkqKG9bMV0tclsxXSldKTtyZXR1cm4gbn1mdW5jdGlvbiBtaSh0KXtpZih0Lmxlbmd0aDwzKXJldHVybiBjaSh0KTt2YXIgZT0xLHI9dC5sZW5ndGgsbj10WzBdLGk9blswXSxhPW5bMV0sbz1baSxpLGksKG49dFsxXSlbMF1dLHM9W2EsYSxhLG5bMV1dLGw9W2ksIiwiLGEsIkwiLGdpKHhpLG8pLCIsIixnaSh4aSxzKV07Zm9yKHQucHVzaCh0W3ItMV0pOysrZTw9cjspbj10W2VdLG8uc2hpZnQoKSxvLnB1c2goblswXSkscy5zaGlmdCgpLHMucHVzaChuWzFdKSxiaShsLG8scyk7cmV0dXJuIHQucG9wKCksbC5wdXNoKCJMIixuKSxsLmpvaW4oIiIpfWZ1bmN0aW9uIGdpKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdK3RbM10qZVszXX1saS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2Uua2V5PXQsZS5jbG9zZWQ9Ly1jbG9zZWQkLy50ZXN0KHQpfSkpO3ZhciB2aT1bMCwyLzMsMS8zLDBdLHlpPVswLDEvMywyLzMsMF0seGk9WzAsMS82LDIvMywxLzZdO2Z1bmN0aW9uIGJpKHQsZSxyKXt0LnB1c2goIkMiLGdpKHZpLGUpLCIsIixnaSh2aSxyKSwiLCIsZ2koeWksZSksIiwiLGdpKHlpLHIpLCIsIixnaSh4aSxlKSwiLCIsZ2koeGkscikpfWZ1bmN0aW9uIF9pKHQsZSl7cmV0dXJuKGVbMV0tdFsxXSkvKGVbMF0tdFswXSl9ZnVuY3Rpb24gd2kodCl7Zm9yKHZhciBlLHIsbixpPS0xLGE9dC5sZW5ndGg7KytpPGE7KXI9KGU9dFtpXSlbMF0sbj1lWzFdLUV0LGVbMF09cipNYXRoLmNvcyhuKSxlWzFdPXIqTWF0aC5zaW4obik7cmV0dXJuIHR9ZnVuY3Rpb24gVGkodCl7dmFyIGU9X2Uscj1fZSxuPTAsaT13ZSxhPW9pLG89Y2kscz1vLmtleSxsPW8sYz0iTCIsdT0uNztmdW5jdGlvbiBmKHMpe3ZhciBmLGgscCxkPVtdLG09W10sZz1bXSx2PS0xLHk9cy5sZW5ndGgseD1jZShlKSxiPWNlKG4pLF89ZT09PXI/ZnVuY3Rpb24oKXtyZXR1cm4gaH06Y2Uociksdz1uPT09aT9mdW5jdGlvbigpe3JldHVybiBwfTpjZShpKTtmdW5jdGlvbiBUKCl7ZC5wdXNoKCJNIixvKHQoZyksdSksYyxsKHQobS5yZXZlcnNlKCkpLHUpLCJaIil9Zm9yKDsrK3Y8eTspYS5jYWxsKHRoaXMsZj1zW3ZdLHYpPyhtLnB1c2goW2g9K3guY2FsbCh0aGlzLGYsdikscD0rYi5jYWxsKHRoaXMsZix2KV0pLGcucHVzaChbK18uY2FsbCh0aGlzLGYsdiksK3cuY2FsbCh0aGlzLGYsdildKSk6bS5sZW5ndGgmJihUKCksbT1bXSxnPVtdKTtyZXR1cm4gbS5sZW5ndGgmJlQoKSxkLmxlbmd0aD9kLmpvaW4oIiIpOm51bGx9cmV0dXJuIGYueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1yPXQsZik6cn0sZi54MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGYpOmV9LGYueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxmKTpyfSxmLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49aT10LGYpOml9LGYueTA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxmKTpufSxmLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsZik6aX0sZi5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsZik6YX0sZi5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD9vPXQ6KG89bGkuZ2V0KHQpfHxjaSkua2V5LGw9by5yZXZlcnNlfHxvLGM9by5jbG9zZWQ/Ik0iOiJMIixmKTpzfSxmLnRlbnNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxmKTp1fSxmfWZ1bmN0aW9uIGtpKHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBBaSh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gTWkodCl7cmV0dXJuIHQucmFkaXVzfWZ1bmN0aW9uIFNpKHQpe3JldHVyblt0LngsdC55XX1mdW5jdGlvbiBFaSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyPWVbMF0sbj1lWzFdLUV0O3JldHVybltyKk1hdGguY29zKG4pLHIqTWF0aC5zaW4obildfX1mdW5jdGlvbiBMaSgpe3JldHVybiA2NH1mdW5jdGlvbiBDaSgpe3JldHVybiJjaXJjbGUifWZ1bmN0aW9uIFBpKHQpe3ZhciBlPU1hdGguc3FydCh0L0F0KTtyZXR1cm4iTTAsIitlKyJBIitlKyIsIitlKyIgMCAxLDEgMCwiKy1lKyJBIitlKyIsIitlKyIgMCAxLDEgMCwiK2UrIloifXQuc3ZnLmxpbmUucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIHQ9c2kod2kpO3JldHVybiB0LnJhZGl1cz10LngsZGVsZXRlIHQueCx0LmFuZ2xlPXQueSxkZWxldGUgdC55LHR9LGZpLnJldmVyc2U9aGksaGkucmV2ZXJzZT1maSx0LnN2Zy5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIFRpKEMpfSx0LnN2Zy5hcmVhLnJhZGlhbD1mdW5jdGlvbigpe3ZhciB0PVRpKHdpKTtyZXR1cm4gdC5yYWRpdXM9dC54LGRlbGV0ZSB0LngsdC5pbm5lclJhZGl1cz10LngwLGRlbGV0ZSB0LngwLHQub3V0ZXJSYWRpdXM9dC54MSxkZWxldGUgdC54MSx0LmFuZ2xlPXQueSxkZWxldGUgdC55LHQuc3RhcnRBbmdsZT10LnkwLGRlbGV0ZSB0LnkwLHQuZW5kQW5nbGU9dC55MSxkZWxldGUgdC55MSx0fSx0LnN2Zy5jaG9yZD1mdW5jdGlvbigpe3ZhciB0PWtpLGU9QWkscj1NaSxuPWVpLGk9cmk7ZnVuY3Rpb24gYShyLG4pe3ZhciBpLGEsYz1vKHRoaXMsdCxyLG4pLHU9byh0aGlzLGUscixuKTtyZXR1cm4iTSIrYy5wMCtzKGMucixjLnAxLGMuYTEtYy5hMCkrKGE9dSwoKGk9YykuYTA9PWEuYTAmJmkuYTE9PWEuYTE/bChjLnIsYy5wMSxjLnIsYy5wMCk6bChjLnIsYy5wMSx1LnIsdS5wMCkrcyh1LnIsdS5wMSx1LmExLXUuYTApK2wodS5yLHUucDEsYy5yLGMucDApKSsiWiIpfWZ1bmN0aW9uIG8odCxlLGEsbyl7dmFyIHM9ZS5jYWxsKHQsYSxvKSxsPXIuY2FsbCh0LHMsbyksYz1uLmNhbGwodCxzLG8pLUV0LHU9aS5jYWxsKHQscyxvKS1FdDtyZXR1cm57cjpsLGEwOmMsYTE6dSxwMDpbbCpNYXRoLmNvcyhjKSxsKk1hdGguc2luKGMpXSxwMTpbbCpNYXRoLmNvcyh1KSxsKk1hdGguc2luKHUpXX19ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuIkEiK3QrIiwiK3QrIiAwICIrICsocj5BdCkrIiwxICIrZX1mdW5jdGlvbiBsKHQsZSxyLG4pe3JldHVybiJRIDAsMCAiK259cmV0dXJuIGEucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWNlKHQpLGEpOnJ9LGEuc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWNlKGUpLGEpOnR9LGEudGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWNlKHQpLGEpOmV9LGEuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jZSh0KSxhKTpufSxhLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWNlKHQpLGEpOml9LGF9LHQuc3ZnLmRpYWdvbmFsPWZ1bmN0aW9uKCl7dmFyIHQ9a2ksZT1BaSxyPVNpO2Z1bmN0aW9uIG4obixpKXt2YXIgYT10LmNhbGwodGhpcyxuLGkpLG89ZS5jYWxsKHRoaXMsbixpKSxzPShhLnkrby55KS8yLGw9W2Ese3g6YS54LHk6c30se3g6by54LHk6c30sb107cmV0dXJuIk0iKyhsPWwubWFwKHIpKVswXSsiQyIrbFsxXSsiICIrbFsyXSsiICIrbFszXX1yZXR1cm4gbi5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9Y2UoZSksbik6dH0sbi50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Y2UodCksbik6ZX0sbi5wcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbn0sdC5zdmcuZGlhZ29uYWwucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIGU9dC5zdmcuZGlhZ29uYWwoKSxyPVNpLG49ZS5wcm9qZWN0aW9uO3JldHVybiBlLnByb2plY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihFaShyPXQpKTpyfSxlfSx0LnN2Zy5zeW1ib2w9ZnVuY3Rpb24oKXt2YXIgdD1DaSxlPUxpO2Z1bmN0aW9uIHIocixuKXtyZXR1cm4oSWkuZ2V0KHQuY2FsbCh0aGlzLHIsbikpfHxQaSkoZS5jYWxsKHRoaXMscixuKSl9cmV0dXJuIHIudHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1jZShlKSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Y2UodCkscik6ZX0scn07dmFyIElpPXQubWFwKHtjaXJjbGU6UGksY3Jvc3M6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQvNSkvMjtyZXR1cm4iTSIrLTMqZSsiLCIrLWUrIkgiKy1lKyJWIistMyplKyJIIitlKyJWIistZSsiSCIrMyplKyJWIitlKyJIIitlKyJWIiszKmUrIkgiKy1lKyJWIitlKyJIIistMyplKyJaIn0sZGlhbW9uZDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC8oMip6aSkpLHI9ZSp6aTtyZXR1cm4iTTAsIistZSsiTCIrcisiLDAgMCwiK2UrIiAiKy1yKyIsMFoifSxzcXVhcmU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQpLzI7cmV0dXJuIk0iKy1lKyIsIistZSsiTCIrZSsiLCIrLWUrIiAiK2UrIiwiK2UrIiAiKy1lKyIsIitlKyJaIn0sInRyaWFuZ2xlLWRvd24iOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0L09pKSxyPWUqT2kvMjtyZXR1cm4iTTAsIityKyJMIitlKyIsIistcisiICIrLWUrIiwiKy1yKyJaIn0sInRyaWFuZ2xlLXVwIjpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC9PaSkscj1lKk9pLzI7cmV0dXJuIk0wLCIrLXIrIkwiK2UrIiwiK3IrIiAiKy1lKyIsIityKyJaIn19KTt0LnN2Zy5zeW1ib2xUeXBlcz1JaS5rZXlzKCk7dmFyIE9pPU1hdGguc3FydCgzKSx6aT1NYXRoLnRhbigzMCpMdCk7WS50cmFuc2l0aW9uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG49Qml8fCsrVWksaT1xaSh0KSxhPVtdLG89Tml8fHt0aW1lOkRhdGUubm93KCksZWFzZTpFcixkZWxheTowLGR1cmF0aW9uOjI1MH0scz0tMSxsPXRoaXMubGVuZ3RoOysrczxsOyl7YS5wdXNoKGU9W10pO2Zvcih2YXIgYz10aGlzW3NdLHU9LTEsZj1jLmxlbmd0aDsrK3U8ZjspKHI9Y1t1XSkmJkdpKHIsdSxpLG4sbyksZS5wdXNoKHIpfXJldHVybiBGaShhLGksbil9LFkuaW50ZXJydXB0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2gobnVsbD09dD9EaTpSaShxaSh0KSkpfTt2YXIgRGk9UmkocWkoKSk7ZnVuY3Rpb24gUmkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGUscixuOyhlPXRoaXNbdF0pJiYobj1lW3I9ZS5hY3RpdmVdKSYmKG4udGltZXIuYz1udWxsLG4udGltZXIudD1OYU4sLS1lLmNvdW50P2RlbGV0ZSBlW3JdOmRlbGV0ZSB0aGlzW3RdLGUuYWN0aXZlKz0uNSxuLmV2ZW50JiZuLmV2ZW50LmludGVycnVwdC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxuLmluZGV4KSl9fWZ1bmN0aW9uIEZpKHQsZSxyKXtyZXR1cm4gVSh0LGppKSx0Lm5hbWVzcGFjZT1lLHQuaWQ9cix0fXZhciBCaSxOaSxqaT1bXSxVaT0wO2Z1bmN0aW9uIFZpKHQsZSxyLG4pe3ZhciBpPXQuaWQsYT10Lm5hbWVzcGFjZTtyZXR1cm4gdXQodCwiZnVuY3Rpb24iPT10eXBlb2Ygcj9mdW5jdGlvbih0LG8scyl7dFthXVtpXS50d2Vlbi5zZXQoZSxuKHIuY2FsbCh0LHQuX19kYXRhX18sbyxzKSkpfToocj1uKHIpLGZ1bmN0aW9uKHQpe3RbYV1baV0udHdlZW4uc2V0KGUscil9KSl9ZnVuY3Rpb24gSGkodCl7cmV0dXJuIG51bGw9PXQmJih0PSIiKSxmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gcWkodCl7cmV0dXJuIG51bGw9PXQ/Il9fdHJhbnNpdGlvbl9fIjoiX190cmFuc2l0aW9uXyIrdCsiX18ifWZ1bmN0aW9uIEdpKHQsZSxyLG4saSl7dmFyIGEsbyxzLGwsYyx1PXRbcl18fCh0W3JdPXthY3RpdmU6MCxjb3VudDowfSksZj11W25dO2Z1bmN0aW9uIGgocil7dmFyIGk9dS5hY3RpdmUsaD11W2ldO2Zvcih2YXIgZCBpbiBoJiYoaC50aW1lci5jPW51bGwsaC50aW1lci50PU5hTiwtLXUuY291bnQsZGVsZXRlIHVbaV0saC5ldmVudCYmaC5ldmVudC5pbnRlcnJ1cHQuY2FsbCh0LHQuX19kYXRhX18saC5pbmRleCkpLHUpaWYoK2Q8bil7dmFyIG09dVtkXTttLnRpbWVyLmM9bnVsbCxtLnRpbWVyLnQ9TmFOLC0tdS5jb3VudCxkZWxldGUgdVtkXX1vLmM9cCx2ZSgoZnVuY3Rpb24oKXtyZXR1cm4gby5jJiZwKHJ8fDEpJiYoby5jPW51bGwsby50PU5hTiksMX0pLDAsYSksdS5hY3RpdmU9bixmLmV2ZW50JiZmLmV2ZW50LnN0YXJ0LmNhbGwodCx0Ll9fZGF0YV9fLGUpLGM9W10sZi50d2Vlbi5mb3JFYWNoKChmdW5jdGlvbihyLG4peyhuPW4uY2FsbCh0LHQuX19kYXRhX18sZSkpJiZjLnB1c2gobil9KSksbD1mLmVhc2Uscz1mLmR1cmF0aW9ufWZ1bmN0aW9uIHAoaSl7Zm9yKHZhciBhPWkvcyxvPWwoYSksaD1jLmxlbmd0aDtoPjA7KWNbLS1oXS5jYWxsKHQsbyk7aWYoYT49MSlyZXR1cm4gZi5ldmVudCYmZi5ldmVudC5lbmQuY2FsbCh0LHQuX19kYXRhX18sZSksLS11LmNvdW50P2RlbGV0ZSB1W25dOmRlbGV0ZSB0W3JdLDF9Znx8KGE9aS50aW1lLG89dmUoKGZ1bmN0aW9uKHQpe3ZhciBlPWYuZGVsYXk7aWYoby50PWUrYSxlPD10KXJldHVybiBoKHQtZSk7by5jPWh9KSwwLGEpLGY9dVtuXT17dHdlZW46bmV3IF8sdGltZTphLHRpbWVyOm8sZGVsYXk6aS5kZWxheSxkdXJhdGlvbjppLmR1cmF0aW9uLGVhc2U6aS5lYXNlLGluZGV4OmV9LGk9bnVsbCwrK3UuY291bnQpfWppLmNhbGw9WS5jYWxsLGppLmVtcHR5PVkuZW1wdHksamkubm9kZT1ZLm5vZGUsamkuc2l6ZT1ZLnNpemUsdC50cmFuc2l0aW9uPWZ1bmN0aW9uKGUscil7cmV0dXJuIGUmJmUudHJhbnNpdGlvbj9CaT9lLnRyYW5zaXRpb24ocik6ZTp0LnNlbGVjdGlvbigpLnRyYW5zaXRpb24oZSl9LHQudHJhbnNpdGlvbi5wcm90b3R5cGU9amksamkuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXRoaXMuaWQsYT10aGlzLm5hbWVzcGFjZSxvPVtdO3Q9Vyh0KTtmb3IodmFyIHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe28ucHVzaChlPVtdKTtmb3IodmFyIGM9dGhpc1tzXSx1PS0xLGY9Yy5sZW5ndGg7Kyt1PGY7KShuPWNbdV0pJiYocj10LmNhbGwobixuLl9fZGF0YV9fLHUscykpPygiX19kYXRhX18iaW4gbiYmKHIuX19kYXRhX189bi5fX2RhdGFfXyksR2kocix1LGEsaSxuW2FdW2ldKSxlLnB1c2gocikpOmUucHVzaChudWxsKX1yZXR1cm4gRmkobyxhLGkpfSxqaS5zZWxlY3RBbGw9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvPXRoaXMuaWQscz10aGlzLm5hbWVzcGFjZSxsPVtdO3Q9WCh0KTtmb3IodmFyIGM9LTEsdT10aGlzLmxlbmd0aDsrK2M8dTspZm9yKHZhciBmPXRoaXNbY10saD0tMSxwPWYubGVuZ3RoOysraDxwOylpZihuPWZbaF0pe2E9bltzXVtvXSxyPXQuY2FsbChuLG4uX19kYXRhX18saCxjKSxsLnB1c2goZT1bXSk7Zm9yKHZhciBkPS0xLG09ci5sZW5ndGg7KytkPG07KShpPXJbZF0pJiZHaShpLGQscyxvLGEpLGUucHVzaChpKX1yZXR1cm4gRmkobCxzLG8pfSxqaS5maWx0ZXI9ZnVuY3Rpb24odCl7dmFyIGUscixuPVtdOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1sdCh0KSk7Zm9yKHZhciBpPTAsYT10aGlzLmxlbmd0aDtpPGE7aSsrKXtuLnB1c2goZT1bXSk7Zm9yKHZhciBvLHM9MCxsPShvPXRoaXNbaV0pLmxlbmd0aDtzPGw7cysrKShyPW9bc10pJiZ0LmNhbGwocixyLl9fZGF0YV9fLHMsaSkmJmUucHVzaChyKX1yZXR1cm4gRmkobix0aGlzLm5hbWVzcGFjZSx0aGlzLmlkKX0samkudHdlZW49ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmlkLG49dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj90aGlzLm5vZGUoKVtuXVtyXS50d2Vlbi5nZXQodCk6dXQodGhpcyxudWxsPT1lP2Z1bmN0aW9uKGUpe2Vbbl1bcl0udHdlZW4ucmVtb3ZlKHQpfTpmdW5jdGlvbihpKXtpW25dW3JdLnR3ZWVuLnNldCh0LGUpfSl9LGppLmF0dHI9ZnVuY3Rpb24oZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2ZvcihyIGluIGUpdGhpcy5hdHRyKHIsZVtyXSk7cmV0dXJuIHRoaXN9dmFyIG49InRyYW5zZm9ybSI9PWU/TnI6eXIsaT10Lm5zLnF1YWxpZnkoZSk7ZnVuY3Rpb24gYSgpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGkpfWZ1bmN0aW9uIG8oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gbnVsbD09dD9hOih0Kz0iIixmdW5jdGlvbigpe3ZhciBlLHI9dGhpcy5nZXRBdHRyaWJ1dGUoaSk7cmV0dXJuIHIhPT10JiYoZT1uKHIsdCksZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGUoaSxlKHQpKX0pfSl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gbnVsbD09dD9vOih0Kz0iIixmdW5jdGlvbigpe3ZhciBlLHI9dGhpcy5nZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpO3JldHVybiByIT09dCYmKGU9bihyLHQpLGZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsLGUodCkpfSl9KX1yZXR1cm4gVmkodGhpcywiYXR0ci4iK2UscixpLmxvY2FsP2w6cyl9LGppLmF0dHJUd2Vlbj1mdW5jdGlvbihlLHIpe3ZhciBuPXQubnMucXVhbGlmeShlKTtyZXR1cm4gdGhpcy50d2VlbigiYXR0ci4iK2Usbi5sb2NhbD9mdW5jdGlvbih0LGUpe3ZhciBpPXIuY2FsbCh0aGlzLHQsZSx0aGlzLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCkpO3JldHVybiBpJiZmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxpKHQpKX19OmZ1bmN0aW9uKHQsZSl7dmFyIGk9ci5jYWxsKHRoaXMsdCxlLHRoaXMuZ2V0QXR0cmlidXRlKG4pKTtyZXR1cm4gaSYmZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGUobixpKHQpKX19KX0samkuc3R5bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYobjwzKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe2ZvcihyIGluIG48MiYmKGU9IiIpLHQpdGhpcy5zdHlsZShyLHRbcl0sZSk7cmV0dXJuIHRoaXN9cj0iIn1mdW5jdGlvbiBpKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX1mdW5jdGlvbiBhKGUpe3JldHVybiBudWxsPT1lP2k6KGUrPSIiLGZ1bmN0aW9uKCl7dmFyIG4saT1vKHRoaXMpLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpO3JldHVybiBpIT09ZSYmKG49eXIoaSxlKSxmdW5jdGlvbihlKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsbihlKSxyKX0pfSl9cmV0dXJuIFZpKHRoaXMsInN0eWxlLiIrdCxlLGEpfSxqaS5zdHlsZVR3ZWVuPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKG4saSl7dmFyIGE9ZS5jYWxsKHRoaXMsbixpLG8odGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCkpO3JldHVybiBhJiZmdW5jdGlvbihlKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsYShlKSxyKX19cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9IiIpLHRoaXMudHdlZW4oInN0eWxlLiIrdCxuKX0samkudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gVmkodGhpcywidGV4dCIsdCxIaSl9LGppLnJlbW92ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMubmFtZXNwYWNlO3JldHVybiB0aGlzLmVhY2goImVuZC50cmFuc2l0aW9uIiwoZnVuY3Rpb24oKXt2YXIgZTt0aGlzW3RdLmNvdW50PDImJihlPXRoaXMucGFyZW50Tm9kZSkmJmUucmVtb3ZlQ2hpbGQodGhpcyl9KSl9LGppLmVhc2U9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5pZCxuPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbbl1bcl0uZWFzZTooImZ1bmN0aW9uIiE9dHlwZW9mIGUmJihlPXQuZWFzZS5hcHBseSh0LGFyZ3VtZW50cykpLHV0KHRoaXMsKGZ1bmN0aW9uKHQpe3Rbbl1bcl0uZWFzZT1lfSkpKX0samkuZGVsYXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZCxyPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbcl1bZV0uZGVsYXk6dXQodGhpcywiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbihuLGksYSl7bltyXVtlXS5kZWxheT0rdC5jYWxsKG4sbi5fX2RhdGFfXyxpLGEpfToodD0rdCxmdW5jdGlvbihuKXtuW3JdW2VdLmRlbGF5PXR9KSl9LGppLmR1cmF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaWQscj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpW3JdW2VdLmR1cmF0aW9uOnV0KHRoaXMsImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24obixpLGEpe25bcl1bZV0uZHVyYXRpb249TWF0aC5tYXgoMSx0LmNhbGwobixuLl9fZGF0YV9fLGksYSkpfToodD1NYXRoLm1heCgxLHQpLGZ1bmN0aW9uKG4pe25bcl1bZV0uZHVyYXRpb249dH0pKX0samkuZWFjaD1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMuaWQsaT10aGlzLm5hbWVzcGFjZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBhPU5pLG89Qmk7dHJ5e0JpPW4sdXQodGhpcywoZnVuY3Rpb24odCxyLGEpe05pPXRbaV1bbl0sZS5jYWxsKHQsdC5fX2RhdGFfXyxyLGEpfSkpfWZpbmFsbHl7Tmk9YSxCaT1vfX1lbHNlIHV0KHRoaXMsKGZ1bmN0aW9uKGEpe3ZhciBvPWFbaV1bbl07KG8uZXZlbnR8fChvLmV2ZW50PXQuZGlzcGF0Y2goInN0YXJ0IiwiZW5kIiwiaW50ZXJydXB0IikpKS5vbihlLHIpfSkpO3JldHVybiB0aGlzfSxqaS50cmFuc2l0aW9uPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUscixuPXRoaXMuaWQsaT0rK1VpLGE9dGhpcy5uYW1lc3BhY2Usbz1bXSxzPTAsbD10aGlzLmxlbmd0aDtzPGw7cysrKXtvLnB1c2godD1bXSk7Zm9yKHZhciBjLHU9MCxmPShjPXRoaXNbc10pLmxlbmd0aDt1PGY7dSsrKShlPWNbdV0pJiZHaShlLHUsYSxpLHt0aW1lOihyPWVbYV1bbl0pLnRpbWUsZWFzZTpyLmVhc2UsZGVsYXk6ci5kZWxheStyLmR1cmF0aW9uLGR1cmF0aW9uOnIuZHVyYXRpb259KSx0LnB1c2goZSl9cmV0dXJuIEZpKG8sYSxpKX0sdC5zdmcuYXhpcz1mdW5jdGlvbigpe3ZhciBlLHI9dC5zY2FsZS5saW5lYXIoKSxpPVlpLGE9NixvPTYscz0zLGw9WzEwXSxjPW51bGw7ZnVuY3Rpb24gdShuKXtuLmVhY2goKGZ1bmN0aW9uKCl7dmFyIG4sdT10LnNlbGVjdCh0aGlzKSxmPXRoaXMuX19jaGFydF9ffHxyLGg9dGhpcy5fX2NoYXJ0X189ci5jb3B5KCkscD1udWxsPT1jP2gudGlja3M/aC50aWNrcy5hcHBseShoLGwpOmguZG9tYWluKCk6YyxkPW51bGw9PWU/aC50aWNrRm9ybWF0P2gudGlja0Zvcm1hdC5hcHBseShoLGwpOkM6ZSxtPXUuc2VsZWN0QWxsKCIudGljayIpLmRhdGEocCxoKSxnPW0uZW50ZXIoKS5pbnNlcnQoImciLCIuZG9tYWluIikuYXR0cigiY2xhc3MiLCJ0aWNrIikuc3R5bGUoIm9wYWNpdHkiLGt0KSx2PXQudHJhbnNpdGlvbihtLmV4aXQoKSkuc3R5bGUoIm9wYWNpdHkiLGt0KS5yZW1vdmUoKSx5PXQudHJhbnNpdGlvbihtLm9yZGVyKCkpLnN0eWxlKCJvcGFjaXR5IiwxKSx4PU1hdGgubWF4KGEsMCkrcyxiPURuKGgpLF89dS5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFswXSksdz0oXy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZG9tYWluIiksdC50cmFuc2l0aW9uKF8pKTtnLmFwcGVuZCgibGluZSIpLGcuYXBwZW5kKCJ0ZXh0Iik7dmFyIFQsayxBLE0sUz1nLnNlbGVjdCgibGluZSIpLEU9eS5zZWxlY3QoImxpbmUiKSxMPW0uc2VsZWN0KCJ0ZXh0IikudGV4dChkKSxQPWcuc2VsZWN0KCJ0ZXh0IiksST15LnNlbGVjdCgidGV4dCIpLE89InRvcCI9PT1pfHwibGVmdCI9PT1pPy0xOjE7aWYoImJvdHRvbSI9PT1pfHwidG9wIj09PWk/KG49WGksVD0ieCIsQT0ieSIsaz0ieDIiLE09InkyIixMLmF0dHIoImR5IixPPDA/IjBlbSI6Ii43MWVtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksdy5hdHRyKCJkIiwiTSIrYlswXSsiLCIrTypvKyJWMEgiK2JbMV0rIlYiK08qbykpOihuPVppLFQ9InkiLEE9IngiLGs9InkyIixNPSJ4MiIsTC5hdHRyKCJkeSIsIi4zMmVtIikuc3R5bGUoInRleHQtYW5jaG9yIixPPDA/ImVuZCI6InN0YXJ0Iiksdy5hdHRyKCJkIiwiTSIrTypvKyIsIitiWzBdKyJIMFYiK2JbMV0rIkgiK08qbykpLFMuYXR0cihNLE8qYSksUC5hdHRyKEEsTyp4KSxFLmF0dHIoaywwKS5hdHRyKE0sTyphKSxJLmF0dHIoVCwwKS5hdHRyKEEsTyp4KSxoLnJhbmdlQmFuZCl7dmFyIHo9aCxEPXoucmFuZ2VCYW5kKCkvMjtmPWg9ZnVuY3Rpb24odCl7cmV0dXJuIHoodCkrRH19ZWxzZSBmLnJhbmdlQmFuZD9mPWg6di5jYWxsKG4saCxmKTtnLmNhbGwobixmLGgpLHkuY2FsbChuLGgsaCl9KSl9cmV0dXJuIHUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCx1KTpyfSx1Lm9yaWVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10IGluIFdpP3QrIiI6WWksdSk6aX0sdS50aWNrcz1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4oYXJndW1lbnRzKSx1KTpsfSx1LnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCx1KTpjfSx1LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCx1KTplfSx1LnRpY2tTaXplPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIGU/KGE9K3Qsbz0rYXJndW1lbnRzW2UtMV0sdSk6YX0sdS5pbm5lclRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LHUpOmF9LHUub3V0ZXJUaWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCx1KTpvfSx1LnRpY2tQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LHUpOnN9LHUudGlja1N1YmRpdmlkZT1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoJiZ1fSx1fTt2YXIgWWk9ImJvdHRvbSIsV2k9e3RvcDoxLHJpZ2h0OjEsYm90dG9tOjEsbGVmdDoxfTtmdW5jdGlvbiBYaSh0LGUscil7dC5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgbj1lKHQpO3JldHVybiJ0cmFuc2xhdGUoIisoaXNGaW5pdGUobik/bjpyKHQpKSsiLDApIn0pKX1mdW5jdGlvbiBaaSh0LGUscil7dC5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgbj1lKHQpO3JldHVybiJ0cmFuc2xhdGUoMCwiKyhpc0Zpbml0ZShuKT9uOnIodCkpKyIpIn0pKX10LnN2Zy5icnVzaD1mdW5jdGlvbigpe3ZhciBlLHIsbj1OKGgsImJydXNoc3RhcnQiLCJicnVzaCIsImJydXNoZW5kIiksaT1udWxsLGE9bnVsbCxzPVswLDBdLGw9WzAsMF0sYz0hMCx1PSEwLGY9S2lbMF07ZnVuY3Rpb24gaChlKXtlLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9dC5zZWxlY3QodGhpcykuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKS5vbigibW91c2Vkb3duLmJydXNoIixnKS5vbigidG91Y2hzdGFydC5icnVzaCIsZykscj1lLnNlbGVjdEFsbCgiLmJhY2tncm91bmQiKS5kYXRhKFswXSk7ci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmFja2dyb3VuZCIpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikuc3R5bGUoImN1cnNvciIsImNyb3NzaGFpciIpLGUuc2VsZWN0QWxsKCIuZXh0ZW50IikuZGF0YShbMF0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJleHRlbnQiKS5zdHlsZSgiY3Vyc29yIiwibW92ZSIpO3ZhciBuPWUuc2VsZWN0QWxsKCIucmVzaXplIikuZGF0YShmLEMpO24uZXhpdCgpLnJlbW92ZSgpLG4uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJyZXNpemUgIit0fSkpLnN0eWxlKCJjdXJzb3IiLChmdW5jdGlvbih0KXtyZXR1cm4gSmlbdF19KSkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybi9bZXddJC8udGVzdCh0KT8tMzpudWxsfSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4vXltuc10vLnRlc3QodCk/LTM6bnVsbH0pKS5hdHRyKCJ3aWR0aCIsNikuYXR0cigiaGVpZ2h0Iiw2KS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLG4uc3R5bGUoImRpc3BsYXkiLGguZW1wdHkoKT8ibm9uZSI6bnVsbCk7dmFyIG8scz10LnRyYW5zaXRpb24oZSksbD10LnRyYW5zaXRpb24ocik7aSYmKG89RG4oaSksbC5hdHRyKCJ4IixvWzBdKS5hdHRyKCJ3aWR0aCIsb1sxXS1vWzBdKSxkKHMpKSxhJiYobz1EbihhKSxsLmF0dHIoInkiLG9bMF0pLmF0dHIoImhlaWdodCIsb1sxXS1vWzBdKSxtKHMpKSxwKHMpfSkpfWZ1bmN0aW9uIHAodCl7dC5zZWxlY3RBbGwoIi5yZXNpemUiKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrc1srL2UkLy50ZXN0KHQpXSsiLCIrbFsrL15zLy50ZXN0KHQpXSsiKSJ9KSl9ZnVuY3Rpb24gZCh0KXt0LnNlbGVjdCgiLmV4dGVudCIpLmF0dHIoIngiLHNbMF0pLHQuc2VsZWN0QWxsKCIuZXh0ZW50LC5uPnJlY3QsLnM+cmVjdCIpLmF0dHIoIndpZHRoIixzWzFdLXNbMF0pfWZ1bmN0aW9uIG0odCl7dC5zZWxlY3QoIi5leHRlbnQiKS5hdHRyKCJ5IixsWzBdKSx0LnNlbGVjdEFsbCgiLmV4dGVudCwuZT5yZWN0LC53PnJlY3QiKS5hdHRyKCJoZWlnaHQiLGxbMV0tbFswXSl9ZnVuY3Rpb24gZygpe3ZhciBmLGcsdj10aGlzLHk9dC5zZWxlY3QodC5ldmVudC50YXJnZXQpLHg9bi5vZih2LGFyZ3VtZW50cyksYj10LnNlbGVjdCh2KSxfPXkuZGF0dW0oKSx3PSEvXihufHMpJC8udGVzdChfKSYmaSxUPSEvXihlfHcpJC8udGVzdChfKSYmYSxrPXkuY2xhc3NlZCgiZXh0ZW50IiksQT1idCh2KSxNPXQubW91c2UodiksUz10LnNlbGVjdChvKHYpKS5vbigia2V5ZG93bi5icnVzaCIsQykub24oImtleXVwLmJydXNoIixQKTtpZih0LmV2ZW50LmNoYW5nZWRUb3VjaGVzP1Mub24oInRvdWNobW92ZS5icnVzaCIsSSkub24oInRvdWNoZW5kLmJydXNoIix6KTpTLm9uKCJtb3VzZW1vdmUuYnJ1c2giLEkpLm9uKCJtb3VzZXVwLmJydXNoIix6KSxiLmludGVycnVwdCgpLnNlbGVjdEFsbCgiKiIpLmludGVycnVwdCgpLGspTVswXT1zWzBdLU1bMF0sTVsxXT1sWzBdLU1bMV07ZWxzZSBpZihfKXt2YXIgRT0rL3ckLy50ZXN0KF8pLEw9Ky9ebi8udGVzdChfKTtnPVtzWzEtRV0tTVswXSxsWzEtTF0tTVsxXV0sTVswXT1zW0VdLE1bMV09bFtMXX1lbHNlIHQuZXZlbnQuYWx0S2V5JiYoZj1NLnNsaWNlKCkpO2Z1bmN0aW9uIEMoKXszMj09dC5ldmVudC5rZXlDb2RlJiYoa3x8KGY9bnVsbCxNWzBdLT1zWzFdLE1bMV0tPWxbMV0saz0yKSxGKCkpfWZ1bmN0aW9uIFAoKXszMj09dC5ldmVudC5rZXlDb2RlJiYyPT1rJiYoTVswXSs9c1sxXSxNWzFdKz1sWzFdLGs9MCxGKCkpfWZ1bmN0aW9uIEkoKXt2YXIgZT10Lm1vdXNlKHYpLHI9ITE7ZyYmKGVbMF0rPWdbMF0sZVsxXSs9Z1sxXSksa3x8KHQuZXZlbnQuYWx0S2V5PyhmfHwoZj1bKHNbMF0rc1sxXSkvMiwobFswXStsWzFdKS8yXSksTVswXT1zWysoZVswXTxmWzBdKV0sTVsxXT1sWysoZVsxXTxmWzFdKV0pOmY9bnVsbCksdyYmTyhlLGksMCkmJihkKGIpLHI9ITApLFQmJk8oZSxhLDEpJiYobShiKSxyPSEwKSxyJiYocChiKSx4KHt0eXBlOiJicnVzaCIsbW9kZTprPyJtb3ZlIjoicmVzaXplIn0pKX1mdW5jdGlvbiBPKHQsbixpKXt2YXIgYSxvLGg9RG4obikscD1oWzBdLGQ9aFsxXSxtPU1baV0sZz1pP2w6cyx2PWdbMV0tZ1swXTtpZihrJiYocC09bSxkLT12K20pLGE9KGk/dTpjKT9NYXRoLm1heChwLE1hdGgubWluKGQsdFtpXSkpOnRbaV0saz9vPShhKz1tKSt2OihmJiYobT1NYXRoLm1heChwLE1hdGgubWluKGQsMipmW2ldLWEpKSksbTxhPyhvPWEsYT1tKTpvPW0pLGdbMF0hPWF8fGdbMV0hPW8pcmV0dXJuIGk/cj1udWxsOmU9bnVsbCxnWzBdPWEsZ1sxXT1vLCEwfWZ1bmN0aW9uIHooKXtJKCksYi5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsaC5lbXB0eSgpPyJub25lIjpudWxsKSx0LnNlbGVjdCgiYm9keSIpLnN0eWxlKCJjdXJzb3IiLG51bGwpLFMub24oIm1vdXNlbW92ZS5icnVzaCIsbnVsbCkub24oIm1vdXNldXAuYnJ1c2giLG51bGwpLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLG51bGwpLm9uKCJ0b3VjaGVuZC5icnVzaCIsbnVsbCkub24oImtleWRvd24uYnJ1c2giLG51bGwpLm9uKCJrZXl1cC5icnVzaCIsbnVsbCksQSgpLHgoe3R5cGU6ImJydXNoZW5kIn0pfWIuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLnN0eWxlKCJkaXNwbGF5IixudWxsKSx0LnNlbGVjdCgiYm9keSIpLnN0eWxlKCJjdXJzb3IiLHkuc3R5bGUoImN1cnNvciIpKSx4KHt0eXBlOiJicnVzaHN0YXJ0In0pLEkoKX1yZXR1cm4gaC5ldmVudD1mdW5jdGlvbihpKXtpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGk9bi5vZih0aGlzLGFyZ3VtZW50cyksYT17eDpzLHk6bCxpOmUsajpyfSxvPXRoaXMuX19jaGFydF9ffHxhO3RoaXMuX19jaGFydF9fPWEsQmk/dC5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goInN0YXJ0LmJydXNoIiwoZnVuY3Rpb24oKXtlPW8uaSxyPW8uaixzPW8ueCxsPW8ueSxpKHt0eXBlOiJicnVzaHN0YXJ0In0pfSkpLnR3ZWVuKCJicnVzaDpicnVzaCIsKGZ1bmN0aW9uKCl7dmFyIHQ9eHIocyxhLngpLG49eHIobCxhLnkpO3JldHVybiBlPXI9bnVsbCxmdW5jdGlvbihlKXtzPWEueD10KGUpLGw9YS55PW4oZSksaSh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KX19KSkuZWFjaCgiZW5kLmJydXNoIiwoZnVuY3Rpb24oKXtlPWEuaSxyPWEuaixpKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pLGkoe3R5cGU6ImJydXNoZW5kIn0pfSkpOihpKHt0eXBlOiJicnVzaHN0YXJ0In0pLGkoe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSksaSh7dHlwZToiYnJ1c2hlbmQifSkpfSkpfSxoLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9S2lbIShpPXQpPDwxfCFhXSxoKTppfSxoLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9S2lbIWk8PDF8IShhPXQpXSxoKTphfSxoLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpJiZhPyhjPSEhdFswXSx1PSEhdFsxXSk6aT9jPSEhdDphJiYodT0hIXQpLGgpOmkmJmE/W2MsdV06aT9jOmE/dTpudWxsfSxoLmV4dGVudD1mdW5jdGlvbih0KXt2YXIgbixvLGMsdSxmO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpJiYobj10WzBdLG89dFsxXSxhJiYobj1uWzBdLG89b1swXSksZT1bbixvXSxpLmludmVydCYmKG49aShuKSxvPWkobykpLG88biYmKGY9bixuPW8sbz1mKSxuPT1zWzBdJiZvPT1zWzFdfHwocz1bbixvXSkpLGEmJihjPXRbMF0sdT10WzFdLGkmJihjPWNbMV0sdT11WzFdKSxyPVtjLHVdLGEuaW52ZXJ0JiYoYz1hKGMpLHU9YSh1KSksdTxjJiYoZj1jLGM9dSx1PWYpLGM9PWxbMF0mJnU9PWxbMV18fChsPVtjLHVdKSksaCk6KGkmJihlPyhuPWVbMF0sbz1lWzFdKToobj1zWzBdLG89c1sxXSxpLmludmVydCYmKG49aS5pbnZlcnQobiksbz1pLmludmVydChvKSksbzxuJiYoZj1uLG49byxvPWYpKSksYSYmKHI/KGM9clswXSx1PXJbMV0pOihjPWxbMF0sdT1sWzFdLGEuaW52ZXJ0JiYoYz1hLmludmVydChjKSx1PWEuaW52ZXJ0KHUpKSx1PGMmJihmPWMsYz11LHU9ZikpKSxpJiZhP1tbbixjXSxbbyx1XV06aT9bbixvXTphJiZbYyx1XSl9LGguY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gaC5lbXB0eSgpfHwocz1bMCwwXSxsPVswLDBdLGU9cj1udWxsKSxofSxoLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuISFpJiZzWzBdPT1zWzFdfHwhIWEmJmxbMF09PWxbMV19LHQucmViaW5kKGgsbiwib24iKX07dmFyIEppPXtuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LEtpPVtbIm4iLCJlIiwicyIsInciLCJudyIsIm5lIiwic2UiLCJzdyJdLFsiZSIsInciXSxbIm4iLCJzIl0sW11dO2Z1bmN0aW9uIFFpKHQpe3JldHVybiBKU09OLnBhcnNlKHQucmVzcG9uc2VUZXh0KX1mdW5jdGlvbiAkaSh0KXt2YXIgZT1pLmNyZWF0ZVJhbmdlKCk7cmV0dXJuIGUuc2VsZWN0Tm9kZShpLmJvZHkpLGUuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHQucmVzcG9uc2VUZXh0KX10LnRleHQ9dWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3BvbnNlVGV4dH0pKSx0Lmpzb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmUodCwiYXBwbGljYXRpb24vanNvbiIsUWksZSl9LHQuaHRtbD1mdW5jdGlvbih0LGUpe3JldHVybiBmZSh0LCJ0ZXh0L2h0bWwiLCRpLGUpfSx0LnhtbD11ZSgoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVzcG9uc2VYTUx9KSksIm9iamVjdCI9PXR5cGVvZiBlJiZlLmV4cG9ydHM/ZS5leHBvcnRzPXQ6dGhpcy5kMz10fSkuYXBwbHkoc2VsZil9LHt9XSw1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9xdWFkIil9LHsiLi9xdWFkIjo2MH1dLDYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksaT10KCJjbGFtcCIpLGE9dCgicGFyc2UtcmVjdCIpLG89dCgiYXJyYXktYm91bmRzIikscz10KCJwaWNrLWJ5LWFsaWFzIiksbD10KCJkZWZpbmVkIiksYz10KCJmbGF0dGVuLXZlcnRleC1kYXRhIiksdT10KCJpcy1vYmoiKSxmPXQoImR0eXBlIiksaD10KCJtYXRoLWxvZzIiKTtmdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPWVbMF0sbj1lWzFdLGE9MS8oZVsyXS1yKSxvPTEvKGVbM10tbikscz1uZXcgQXJyYXkodC5sZW5ndGgpLGw9MCxjPXQubGVuZ3RoLzI7bDxjO2wrKylzWzIqbF09aSgodFsyKmxdLXIpKmEsMCwxKSxzWzIqbCsxXT1pKCh0WzIqbCsxXS1uKSpvLDAsMSk7cmV0dXJuIHN9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9e30pLHQ9Yyh0LCJmbG9hdDY0IiksZT1zKGUse2JvdW5kczoicmFuZ2UgYm91bmRzIGRhdGFCb3ggZGF0YWJveCIsbWF4RGVwdGg6ImRlcHRoIG1heERlcHRoIG1heGRlcHRoIGxldmVsIG1heExldmVsIG1heGxldmVsIGxldmVscyIsZHR5cGU6InR5cGUgZHR5cGUgZm9ybWF0IG91dCBkc3Qgb3V0cHV0IGRlc3RpbmF0aW9uIn0pO3ZhciByPWwoZS5tYXhEZXB0aCwyNTUpLGk9bChlLmJvdW5kcyxvKHQsMikpO2lbMF09PT1pWzJdJiZpWzJdKyssaVsxXT09PWlbM10mJmlbM10rKzt2YXIgZCxtPXAodCxpKSxnPXQubGVuZ3RoPj4+MTtlLmR0eXBlfHwoZS5kdHlwZT0iYXJyYXkiKSwic3RyaW5nIj09dHlwZW9mIGUuZHR5cGU/ZD1uZXcoZihlLmR0eXBlKSkoZyk6ZS5kdHlwZSYmKGQ9ZS5kdHlwZSxBcnJheS5pc0FycmF5KGQpJiYoZC5sZW5ndGg9ZykpO2Zvcih2YXIgdj0wO3Y8ZzsrK3YpZFt2XT12O3ZhciB5PVtdLHg9W10sYj1bXSxfPVtdOyFmdW5jdGlvbiB0KGUsbixpLGEsbyxzKXtpZighYS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIGw9eVtvXXx8KHlbb109W10pLGM9YltvXXx8KGJbb109W10pLHU9eFtvXXx8KHhbb109W10pLGY9bC5sZW5ndGg7aWYoKytvPnJ8fHM+MTA3Mzc0MTgyNCl7Zm9yKHZhciBoPTA7aDxhLmxlbmd0aDtoKyspbC5wdXNoKGFbaF0pLGMucHVzaChzKSx1LnB1c2gobnVsbCxudWxsLG51bGwsbnVsbCk7cmV0dXJuIGZ9aWYobC5wdXNoKGFbMF0pLGMucHVzaChzKSxhLmxlbmd0aDw9MSlyZXR1cm4gdS5wdXNoKG51bGwsbnVsbCxudWxsLG51bGwpLGY7Zm9yKHZhciBwPS41KmksZD1lK3AsZz1uK3Asdj1bXSxfPVtdLHc9W10sVD1bXSxrPTEsQT1hLmxlbmd0aDtrPEE7aysrKXt2YXIgTT1hW2tdLFM9bVsyKk1dLEU9bVsyKk0rMV07UzxkP0U8Zz92LnB1c2goTSk6Xy5wdXNoKE0pOkU8Zz93LnB1c2goTSk6VC5wdXNoKE0pfXJldHVybiBzPDw9Mix1LnB1c2godChlLG4scCx2LG8scyksdChlLGcscCxfLG8scysxKSx0KGQsbixwLHcsbyxzKzIpLHQoZCxnLHAsVCxvLHMrMykpLGZ9KDAsMCwxLGQsMCwxKTtmb3IodmFyIHc9MCxUPTA7VDx5Lmxlbmd0aDtUKyspe3ZhciBrPXlbVF07aWYoZC5zZXQpZC5zZXQoayx3KTtlbHNlIGZvcih2YXIgQT0wLE09ay5sZW5ndGg7QTxNO0ErKylkW0Erd109a1tBXTt2YXIgUz13K3lbVF0ubGVuZ3RoO19bVF09W3csU10sdz1TfXJldHVybiBkLnJhbmdlPWZ1bmN0aW9uKCl7dmFyIGUscj1bXSxuPWFyZ3VtZW50cy5sZW5ndGg7Zm9yKDtuLS07KXJbbl09YXJndW1lbnRzW25dO2lmKHUocltyLmxlbmd0aC0xXSkpe3ZhciBvPXIucG9wKCk7ci5sZW5ndGh8fG51bGw9PW8ueCYmbnVsbD09by5sJiZudWxsPT1vLmxlZnR8fChyPVtvXSxlPXt9KSxlPXMobyx7bGV2ZWw6ImxldmVsIG1heExldmVsIixkOiJkIGRpYW0gZGlhbWV0ZXIgciByYWRpdXMgcHggcHhTaXplIHBpeGVsIHBpeGVsU2l6ZSBtYXhEIHNpemUgbWluU2l6ZSIsbG9kOiJsb2QgZGV0YWlscyByYW5nZXMgb2Zmc2V0cyJ9KX1lbHNlIGU9e307ci5sZW5ndGh8fChyPWkpO3ZhciBjPWEuYXBwbHkodm9pZCAwLHIpLGY9W01hdGgubWluKGMueCxjLngrYy53aWR0aCksTWF0aC5taW4oYy55LGMueStjLmhlaWdodCksTWF0aC5tYXgoYy54LGMueCtjLndpZHRoKSxNYXRoLm1heChjLnksYy55K2MuaGVpZ2h0KV0sZD1mWzBdLG09ZlsxXSxnPWZbMl0sdj1mWzNdLGI9cChbZCxtLGcsdl0saSksXz1iWzBdLHc9YlsxXSxUPWJbMl0saz1iWzNdLEE9bChlLmxldmVsLHkubGVuZ3RoKTtpZihudWxsIT1lLmQpe3ZhciBNOyJudW1iZXIiPT10eXBlb2YgZS5kP009W2UuZCxlLmRdOmUuZC5sZW5ndGgmJihNPWUuZCksQT1NYXRoLm1pbihNYXRoLm1heChNYXRoLmNlaWwoLWgoTWF0aC5hYnMoTVswXSkvKGlbMl0taVswXSkpKSxNYXRoLmNlaWwoLWgoTWF0aC5hYnMoTVsxXSkvKGlbM10taVsxXSkpKSksQSl9aWYoQT1NYXRoLm1pbihBLHkubGVuZ3RoKSxlLmxvZClyZXR1cm4gRShfLHcsVCxrLEEpO3ZhciBTPVtdO2Z1bmN0aW9uIEwoZSxyLG4saSxhLG8pe2lmKG51bGwhPT1hJiZudWxsIT09byYmIShfPmUrbnx8dz5yK258fFQ8ZXx8azxyfHxpPj1BfHxhPT09bykpe3ZhciBzPXlbaV07dm9pZCAwPT09byYmKG89cy5sZW5ndGgpO2Zvcih2YXIgbD1hO2w8bztsKyspe3ZhciBjPXNbbF0sdT10WzIqY10sZj10WzIqYysxXTt1Pj1kJiZ1PD1nJiZmPj1tJiZmPD12JiZTLnB1c2goYyl9dmFyIGg9eFtpXSxwPWhbNCphKzBdLGI9aFs0KmErMV0sTT1oWzQqYSsyXSxFPWhbNCphKzNdLFA9QyhoLGErMSksST0uNSpuLE89aSsxO0woZSxyLEksTyxwLGJ8fE18fEV8fFApLEwoZSxyK0ksSSxPLGIsTXx8RXx8UCksTChlK0kscixJLE8sTSxFfHxQKSxMKGUrSSxyK0ksSSxPLEUsUCl9fWZ1bmN0aW9uIEModCxlKXtmb3IodmFyIHI9bnVsbCxuPTA7bnVsbD09PXI7KWlmKHI9dFs0KmUrbl0sKytuPnQubGVuZ3RoKXJldHVybiBudWxsO3JldHVybiByfXJldHVybiBMKDAsMCwxLDAsMCwxKSxTfSxkO2Z1bmN0aW9uIEUodCxlLHIsaSxhKXtmb3IodmFyIG89W10scz0wO3M8YTtzKyspe3ZhciBsPWJbc10sYz1fW3NdWzBdLHU9TCh0LGUscyksZj1MKHIsaSxzKSxoPW4uZ2UobCx1KSxwPW4uZ3QobCxmLGgsbC5sZW5ndGgtMSk7b1tzXT1baCtjLHArY119cmV0dXJuIG99ZnVuY3Rpb24gTCh0LGUscil7Zm9yKHZhciBuPTEsaT0uNSxhPS41LG89LjUscz0wO3M8cjtzKyspbjw8PTIsbis9dDxpP2U8YT8wOjE6ZTxhPzI6MyxvKj0uNSxpKz10PGk/LW86byxhKz1lPGE/LW86bztyZXR1cm4gbn19fSx7ImFycmF5LWJvdW5kcyI6NzIsImJpbmFyeS1zZWFyY2gtYm91bmRzIjoxMDAsY2xhbXA6MTIxLGRlZmluZWQ6MTcxLGR0eXBlOjE3NiwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MjQ0LCJpcy1vYmoiOjQzNiwibWF0aC1sb2cyIjo0NDYsInBhcnNlLXJlY3QiOjQ3MSwicGljay1ieS1hbGlhcyI6NDc1fV0sNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXQoIkB0dXJmL21ldGEiKTtmdW5jdGlvbiBpKHQpe3ZhciBlPTA7aWYodCYmdC5sZW5ndGg+MCl7ZSs9TWF0aC5hYnMoYSh0WzBdKSk7Zm9yKHZhciByPTE7cjx0Lmxlbmd0aDtyKyspZS09TWF0aC5hYnMoYSh0W3JdKSl9cmV0dXJuIGV9ZnVuY3Rpb24gYSh0KXt2YXIgZSxyLG4saSxhLHMsbD0wLGM9dC5sZW5ndGg7aWYoYz4yKXtmb3Iocz0wO3M8YztzKyspcz09PWMtMj8obj1jLTIsaT1jLTEsYT0wKTpzPT09Yy0xPyhuPWMtMSxpPTAsYT0xKToobj1zLGk9cysxLGE9cysyKSxlPXRbbl0scj10W2ldLGwrPShvKHRbYV1bMF0pLW8oZVswXSkpKk1hdGguc2luKG8oclsxXSkpO2w9NjM3ODEzNypsKjYzNzgxMzcvMn1yZXR1cm4gbH1mdW5jdGlvbiBvKHQpe3JldHVybiB0Kk1hdGguUEkvMTgwfXIuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gbi5nZW9tUmVkdWNlKHQsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZnVuY3Rpb24odCl7dmFyIGUscj0wO3N3aXRjaCh0LnR5cGUpe2Nhc2UiUG9seWdvbiI6cmV0dXJuIGkodC5jb29yZGluYXRlcyk7Y2FzZSJNdWx0aVBvbHlnb24iOmZvcihlPTA7ZTx0LmNvb3JkaW5hdGVzLmxlbmd0aDtlKyspcis9aSh0LmNvb3JkaW5hdGVzW2VdKTtyZXR1cm4gcjtjYXNlIlBvaW50IjpjYXNlIk11bHRpUG9pbnQiOmNhc2UiTGluZVN0cmluZyI6Y2FzZSJNdWx0aUxpbmVTdHJpbmciOnJldHVybiAwfXJldHVybiAwfShlKX0pLDApfX0seyJAdHVyZi9tZXRhIjo2NX1dLDYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj10KCJAdHVyZi9tZXRhIik7ZnVuY3Rpb24gaSh0KXt2YXIgZT1bMS8wLDEvMCwtMS8wLC0xLzBdO3JldHVybiBuLmNvb3JkRWFjaCh0LChmdW5jdGlvbih0KXtlWzBdPnRbMF0mJihlWzBdPXRbMF0pLGVbMV0+dFsxXSYmKGVbMV09dFsxXSksZVsyXTx0WzBdJiYoZVsyXT10WzBdKSxlWzNdPHRbMV0mJihlWzNdPXRbMV0pfSkpLGV9aS5kZWZhdWx0PWksci5kZWZhdWx0PWl9LHsiQHR1cmYvbWV0YSI6NjV9XSw2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49dCgiQHR1cmYvbWV0YSIpLGk9dCgiQHR1cmYvaGVscGVycyIpO3IuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgcj0wLGE9MCxvPTA7cmV0dXJuIG4uY29vcmRFYWNoKHQsKGZ1bmN0aW9uKHQpe3IrPXRbMF0sYSs9dFsxXSxvKyt9KSwhMCksaS5wb2ludChbci9vLGEvb10sZS5wcm9wZXJ0aWVzKX19LHsiQHR1cmYvaGVscGVycyI6NjQsIkB0dXJmL21ldGEiOjY1fV0sNjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dm9pZCAwPT09ciYmKHI9e30pO3ZhciBuPXt0eXBlOiJGZWF0dXJlIn07cmV0dXJuKDA9PT1yLmlkfHxyLmlkKSYmKG4uaWQ9ci5pZCksci5iYm94JiYobi5iYm94PXIuYmJveCksbi5wcm9wZXJ0aWVzPWV8fHt9LG4uZ2VvbWV0cnk9dCxufWZ1bmN0aW9uIGkodCxlLHIpe2lmKHZvaWQgMD09PXImJihyPXt9KSwhdCl0aHJvdyBuZXcgRXJyb3IoImNvb3JkaW5hdGVzIGlzIHJlcXVpcmVkIik7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IEVycm9yKCJjb29yZGluYXRlcyBtdXN0IGJlIGFuIEFycmF5Iik7aWYodC5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoImNvb3JkaW5hdGVzIG11c3QgYmUgYXQgbGVhc3QgMiBudW1iZXJzIGxvbmciKTtpZighZCh0WzBdKXx8IWQodFsxXSkpdGhyb3cgbmV3IEVycm9yKCJjb29yZGluYXRlcyBtdXN0IGNvbnRhaW4gbnVtYmVycyIpO3JldHVybiBuKHt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6dH0sZSxyKX1mdW5jdGlvbiBhKHQsZSxyKXt2b2lkIDA9PT1yJiYocj17fSk7Zm9yKHZhciBpPTAsYT10O2k8YS5sZW5ndGg7aSsrKXt2YXIgbz1hW2ldO2lmKG8ubGVuZ3RoPDQpdGhyb3cgbmV3IEVycm9yKCJFYWNoIExpbmVhclJpbmcgb2YgYSBQb2x5Z29uIG11c3QgaGF2ZSA0IG9yIG1vcmUgUG9zaXRpb25zLiIpO2Zvcih2YXIgcz0wO3M8b1tvLmxlbmd0aC0xXS5sZW5ndGg7cysrKWlmKG9bby5sZW5ndGgtMV1bc10hPT1vWzBdW3NdKXRocm93IG5ldyBFcnJvcigiRmlyc3QgYW5kIGxhc3QgUG9zaXRpb24gYXJlIG5vdCBlcXVpdmFsZW50LiIpfXJldHVybiBuKHt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczp0fSxlLHIpfWZ1bmN0aW9uIG8odCxlLHIpe2lmKHZvaWQgMD09PXImJihyPXt9KSx0Lmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiY29vcmRpbmF0ZXMgbXVzdCBiZSBhbiBhcnJheSBvZiB0d28gb3IgbW9yZSBwb3NpdGlvbnMiKTtyZXR1cm4gbih7dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH0sZSxyKX1mdW5jdGlvbiBzKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciByPXt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiJ9O3JldHVybiBlLmlkJiYoci5pZD1lLmlkKSxlLmJib3gmJihyLmJib3g9ZS5iYm94KSxyLmZlYXR1cmVzPXQscn1mdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLG4oe3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH0sZSxyKX1mdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLG4oe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOnR9LGUscil9ZnVuY3Rpb24gdSh0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxuKHt0eXBlOiJNdWx0aVBvbHlnb24iLGNvb3JkaW5hdGVzOnR9LGUscil9ZnVuY3Rpb24gZih0LGUpe3ZvaWQgMD09PWUmJihlPSJraWxvbWV0ZXJzIik7dmFyIG49ci5mYWN0b3JzW2VdO2lmKCFuKXRocm93IG5ldyBFcnJvcihlKyIgdW5pdHMgaXMgaW52YWxpZCIpO3JldHVybiB0Km59ZnVuY3Rpb24gaCh0LGUpe3ZvaWQgMD09PWUmJihlPSJraWxvbWV0ZXJzIik7dmFyIG49ci5mYWN0b3JzW2VdO2lmKCFuKXRocm93IG5ldyBFcnJvcihlKyIgdW5pdHMgaXMgaW52YWxpZCIpO3JldHVybiB0L259ZnVuY3Rpb24gcCh0KXtyZXR1cm4gMTgwKih0JSgyKk1hdGguUEkpKS9NYXRoLlBJfWZ1bmN0aW9uIGQodCl7cmV0dXJuIWlzTmFOKHQpJiZudWxsIT09dCYmIUFycmF5LmlzQXJyYXkodCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuZWFydGhSYWRpdXM9NjM3MTAwOC44LHIuZmFjdG9ycz17Y2VudGltZXRlcnM6MTAwKnIuZWFydGhSYWRpdXMsY2VudGltZXRyZXM6MTAwKnIuZWFydGhSYWRpdXMsZGVncmVlczpyLmVhcnRoUmFkaXVzLzExMTMyNSxmZWV0OjMuMjgwODQqci5lYXJ0aFJhZGl1cyxpbmNoZXM6MzkuMzcqci5lYXJ0aFJhZGl1cyxraWxvbWV0ZXJzOnIuZWFydGhSYWRpdXMvMWUzLGtpbG9tZXRyZXM6ci5lYXJ0aFJhZGl1cy8xZTMsbWV0ZXJzOnIuZWFydGhSYWRpdXMsbWV0cmVzOnIuZWFydGhSYWRpdXMsbWlsZXM6ci5lYXJ0aFJhZGl1cy8xNjA5LjM0NCxtaWxsaW1ldGVyczoxZTMqci5lYXJ0aFJhZGl1cyxtaWxsaW1ldHJlczoxZTMqci5lYXJ0aFJhZGl1cyxuYXV0aWNhbG1pbGVzOnIuZWFydGhSYWRpdXMvMTg1MixyYWRpYW5zOjEseWFyZHM6MS4wOTM2KnIuZWFydGhSYWRpdXN9LHIudW5pdHNGYWN0b3JzPXtjZW50aW1ldGVyczoxMDAsY2VudGltZXRyZXM6MTAwLGRlZ3JlZXM6MS8xMTEzMjUsZmVldDozLjI4MDg0LGluY2hlczozOS4zNyxraWxvbWV0ZXJzOi4wMDEsa2lsb21ldHJlczouMDAxLG1ldGVyczoxLG1ldHJlczoxLG1pbGVzOjEvMTYwOS4zNDQsbWlsbGltZXRlcnM6MWUzLG1pbGxpbWV0cmVzOjFlMyxuYXV0aWNhbG1pbGVzOjEvMTg1MixyYWRpYW5zOjEvci5lYXJ0aFJhZGl1cyx5YXJkczoxLjA5MzYxMzN9LHIuYXJlYUZhY3RvcnM9e2FjcmVzOjI0NzEwNWUtOSxjZW50aW1ldGVyczoxZTQsY2VudGltZXRyZXM6MWU0LGZlZXQ6MTAuNzYzOTEwNDE3LGhlY3RhcmVzOjFlLTQsaW5jaGVzOjE1NTAuMDAzMTAwMDA2LGtpbG9tZXRlcnM6MWUtNixraWxvbWV0cmVzOjFlLTYsbWV0ZXJzOjEsbWV0cmVzOjEsbWlsZXM6Mzg2ZS05LG1pbGxpbWV0ZXJzOjFlNixtaWxsaW1ldHJlczoxZTYseWFyZHM6MS4xOTU5OTAwNDZ9LHIuZmVhdHVyZT1uLHIuZ2VvbWV0cnk9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaCh2b2lkIDA9PT1yJiYocj17fSksdCl7Y2FzZSJQb2ludCI6cmV0dXJuIGkoZSkuZ2VvbWV0cnk7Y2FzZSJMaW5lU3RyaW5nIjpyZXR1cm4gbyhlKS5nZW9tZXRyeTtjYXNlIlBvbHlnb24iOnJldHVybiBhKGUpLmdlb21ldHJ5O2Nhc2UiTXVsdGlQb2ludCI6cmV0dXJuIGMoZSkuZ2VvbWV0cnk7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOnJldHVybiBsKGUpLmdlb21ldHJ5O2Nhc2UiTXVsdGlQb2x5Z29uIjpyZXR1cm4gdShlKS5nZW9tZXRyeTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcih0KyIgaXMgaW52YWxpZCIpfX0sci5wb2ludD1pLHIucG9pbnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLHModC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBpKHQsZSl9KSkscil9LHIucG9seWdvbj1hLHIucG9seWdvbnM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj17fSkscyh0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGEodCxlKX0pKSxyKX0sci5saW5lU3RyaW5nPW8sci5saW5lU3RyaW5ncz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxzKHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbyh0LGUpfSkpLHIpfSxyLmZlYXR1cmVDb2xsZWN0aW9uPXMsci5tdWx0aUxpbmVTdHJpbmc9bCxyLm11bHRpUG9pbnQ9YyxyLm11bHRpUG9seWdvbj11LHIuZ2VvbWV0cnlDb2xsZWN0aW9uPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLG4oe3R5cGU6Ikdlb21ldHJ5Q29sbGVjdGlvbiIsZ2VvbWV0cmllczp0fSxlLHIpfSxyLnJvdW5kPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09ZSYmKGU9MCksZSYmIShlPj0wKSl0aHJvdyBuZXcgRXJyb3IoInByZWNpc2lvbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIik7dmFyIHI9TWF0aC5wb3coMTAsZXx8MCk7cmV0dXJuIE1hdGgucm91bmQodCpyKS9yfSxyLnJhZGlhbnNUb0xlbmd0aD1mLHIubGVuZ3RoVG9SYWRpYW5zPWgsci5sZW5ndGhUb0RlZ3JlZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcChoKHQsZSkpfSxyLmJlYXJpbmdUb0F6aW11dGg9ZnVuY3Rpb24odCl7dmFyIGU9dCUzNjA7cmV0dXJuIGU8MCYmKGUrPTM2MCksZX0sci5yYWRpYW5zVG9EZWdyZWVzPXAsci5kZWdyZWVzVG9SYWRpYW5zPWZ1bmN0aW9uKHQpe3JldHVybiB0JTM2MCpNYXRoLlBJLzE4MH0sci5jb252ZXJ0TGVuZ3RoPWZ1bmN0aW9uKHQsZSxyKXtpZih2b2lkIDA9PT1lJiYoZT0ia2lsb21ldGVycyIpLHZvaWQgMD09PXImJihyPSJraWxvbWV0ZXJzIiksISh0Pj0wKSl0aHJvdyBuZXcgRXJyb3IoImxlbmd0aCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIik7cmV0dXJuIGYoaCh0LGUpLHIpfSxyLmNvbnZlcnRBcmVhPWZ1bmN0aW9uKHQsZSxuKXtpZih2b2lkIDA9PT1lJiYoZT0ibWV0ZXJzIiksdm9pZCAwPT09biYmKG49ImtpbG9tZXRlcnMiKSwhKHQ+PTApKXRocm93IG5ldyBFcnJvcigiYXJlYSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIik7dmFyIGk9ci5hcmVhRmFjdG9yc1tlXTtpZighaSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgb3JpZ2luYWwgdW5pdHMiKTt2YXIgYT1yLmFyZWFGYWN0b3JzW25dO2lmKCFhKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmaW5hbCB1bml0cyIpO3JldHVybiB0L2kqYX0sci5pc051bWJlcj1kLHIuaXNPYmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuISF0JiZ0LmNvbnN0cnVjdG9yPT09T2JqZWN0fSxyLnZhbGlkYXRlQkJveD1mdW5jdGlvbih0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoImJib3ggaXMgcmVxdWlyZWQiKTtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgRXJyb3IoImJib3ggbXVzdCBiZSBhbiBBcnJheSIpO2lmKDQhPT10Lmxlbmd0aCYmNiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYmJveCBtdXN0IGJlIGFuIEFycmF5IG9mIDQgb3IgNiBudW1iZXJzIik7dC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZighZCh0KSl0aHJvdyBuZXcgRXJyb3IoImJib3ggbXVzdCBvbmx5IGNvbnRhaW4gbnVtYmVycyIpfSkpfSxyLnZhbGlkYXRlSWQ9ZnVuY3Rpb24odCl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJpZCBpcyByZXF1aXJlZCIpO2lmKC0xPT09WyJzdHJpbmciLCJudW1iZXIiXS5pbmRleE9mKHR5cGVvZiB0KSl0aHJvdyBuZXcgRXJyb3IoImlkIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmciKX19LHt9XSw2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49dCgiQHR1cmYvaGVscGVycyIpO2Z1bmN0aW9uIGkodCxlLHIpe2lmKG51bGwhPT10KWZvcih2YXIgbixhLG8scyxsLGMsdSxmLGg9MCxwPTAsZD10LnR5cGUsbT0iRmVhdHVyZUNvbGxlY3Rpb24iPT09ZCxnPSJGZWF0dXJlIj09PWQsdj1tP3QuZmVhdHVyZXMubGVuZ3RoOjEseT0wO3k8djt5Kyspe2w9KGY9ISEodT1tP3QuZmVhdHVyZXNbeV0uZ2VvbWV0cnk6Zz90Lmdlb21ldHJ5OnQpJiYiR2VvbWV0cnlDb2xsZWN0aW9uIj09PXUudHlwZSk/dS5nZW9tZXRyaWVzLmxlbmd0aDoxO2Zvcih2YXIgeD0wO3g8bDt4Kyspe3ZhciBiPTAsXz0wO2lmKG51bGwhPT0ocz1mP3UuZ2VvbWV0cmllc1t4XTp1KSl7Yz1zLmNvb3JkaW5hdGVzO3ZhciB3PXMudHlwZTtzd2l0Y2goaD0hcnx8IlBvbHlnb24iIT09dyYmIk11bHRpUG9seWdvbiIhPT13PzA6MSx3KXtjYXNlIG51bGw6YnJlYWs7Y2FzZSJQb2ludCI6aWYoITE9PT1lKGMscCx5LGIsXykpcmV0dXJuITE7cCsrLGIrKzticmVhaztjYXNlIkxpbmVTdHJpbmciOmNhc2UiTXVsdGlQb2ludCI6Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7aWYoITE9PT1lKGNbbl0scCx5LGIsXykpcmV0dXJuITE7cCsrLCJNdWx0aVBvaW50Ij09PXcmJmIrK30iTGluZVN0cmluZyI9PT13JiZiKys7YnJlYWs7Y2FzZSJQb2x5Z29uIjpjYXNlIk11bHRpTGluZVN0cmluZyI6Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7Zm9yKGE9MDthPGNbbl0ubGVuZ3RoLWg7YSsrKXtpZighMT09PWUoY1tuXVthXSxwLHksYixfKSlyZXR1cm4hMTtwKyt9Ik11bHRpTGluZVN0cmluZyI9PT13JiZiKyssIlBvbHlnb24iPT09dyYmXysrfSJQb2x5Z29uIj09PXcmJmIrKzticmVhaztjYXNlIk11bHRpUG9seWdvbiI6Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7Zm9yKF89MCxhPTA7YTxjW25dLmxlbmd0aDthKyspe2ZvcihvPTA7bzxjW25dW2FdLmxlbmd0aC1oO28rKyl7aWYoITE9PT1lKGNbbl1bYV1bb10scCx5LGIsXykpcmV0dXJuITE7cCsrfV8rK31iKyt9YnJlYWs7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmZvcihuPTA7bjxzLmdlb21ldHJpZXMubGVuZ3RoO24rKylpZighMT09PWkocy5nZW9tZXRyaWVzW25dLGUscikpcmV0dXJuITE7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gR2VvbWV0cnkgVHlwZSIpfX19fX1mdW5jdGlvbiBhKHQsZSl7dmFyIHI7c3dpdGNoKHQudHlwZSl7Y2FzZSJGZWF0dXJlQ29sbGVjdGlvbiI6Zm9yKHI9MDtyPHQuZmVhdHVyZXMubGVuZ3RoJiYhMSE9PWUodC5mZWF0dXJlc1tyXS5wcm9wZXJ0aWVzLHIpO3IrKyk7YnJlYWs7Y2FzZSJGZWF0dXJlIjplKHQucHJvcGVydGllcywwKX19ZnVuY3Rpb24gbyh0LGUpe2lmKCJGZWF0dXJlIj09PXQudHlwZSllKHQsMCk7ZWxzZSBpZigiRmVhdHVyZUNvbGxlY3Rpb24iPT09dC50eXBlKWZvcih2YXIgcj0wO3I8dC5mZWF0dXJlcy5sZW5ndGgmJiExIT09ZSh0LmZlYXR1cmVzW3JdLHIpO3IrKyk7fWZ1bmN0aW9uIHModCxlKXt2YXIgcixuLGksYSxvLHMsbCxjLHUsZixoPTAscD0iRmVhdHVyZUNvbGxlY3Rpb24iPT09dC50eXBlLGQ9IkZlYXR1cmUiPT09dC50eXBlLG09cD90LmZlYXR1cmVzLmxlbmd0aDoxO2ZvcihyPTA7cjxtO3IrKyl7Zm9yKHM9cD90LmZlYXR1cmVzW3JdLmdlb21ldHJ5OmQ/dC5nZW9tZXRyeTp0LGM9cD90LmZlYXR1cmVzW3JdLnByb3BlcnRpZXM6ZD90LnByb3BlcnRpZXM6e30sdT1wP3QuZmVhdHVyZXNbcl0uYmJveDpkP3QuYmJveDp2b2lkIDAsZj1wP3QuZmVhdHVyZXNbcl0uaWQ6ZD90LmlkOnZvaWQgMCxvPShsPSEhcyYmIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1zLnR5cGUpP3MuZ2VvbWV0cmllcy5sZW5ndGg6MSxpPTA7aTxvO2krKylpZihudWxsIT09KGE9bD9zLmdlb21ldHJpZXNbaV06cykpc3dpdGNoKGEudHlwZSl7Y2FzZSJQb2ludCI6Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIk11bHRpUG9pbnQiOmNhc2UiUG9seWdvbiI6Y2FzZSJNdWx0aUxpbmVTdHJpbmciOmNhc2UiTXVsdGlQb2x5Z29uIjppZighMT09PWUoYSxoLGMsdSxmKSlyZXR1cm4hMTticmVhaztjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6Zm9yKG49MDtuPGEuZ2VvbWV0cmllcy5sZW5ndGg7bisrKWlmKCExPT09ZShhLmdlb21ldHJpZXNbbl0saCxjLHUsZikpcmV0dXJuITE7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gR2VvbWV0cnkgVHlwZSIpfWVsc2UgaWYoITE9PT1lKG51bGwsaCxjLHUsZikpcmV0dXJuITE7aCsrfX1mdW5jdGlvbiBsKHQsZSl7cyh0LChmdW5jdGlvbih0LHIsaSxhLG8pe3ZhciBzLGw9bnVsbD09PXQ/bnVsbDp0LnR5cGU7c3dpdGNoKGwpe2Nhc2UgbnVsbDpjYXNlIlBvaW50IjpjYXNlIkxpbmVTdHJpbmciOmNhc2UiUG9seWdvbiI6cmV0dXJuITEhPT1lKG4uZmVhdHVyZSh0LGkse2Jib3g6YSxpZDpvfSksciwwKSYmdm9pZCAwfXN3aXRjaChsKXtjYXNlIk11bHRpUG9pbnQiOnM9IlBvaW50IjticmVhaztjYXNlIk11bHRpTGluZVN0cmluZyI6cz0iTGluZVN0cmluZyI7YnJlYWs7Y2FzZSJNdWx0aVBvbHlnb24iOnM9IlBvbHlnb24ifWZvcih2YXIgYz0wO2M8dC5jb29yZGluYXRlcy5sZW5ndGg7YysrKXt2YXIgdT17dHlwZTpzLGNvb3JkaW5hdGVzOnQuY29vcmRpbmF0ZXNbY119O2lmKCExPT09ZShuLmZlYXR1cmUodSxpKSxyLGMpKXJldHVybiExfX0pKX1mdW5jdGlvbiBjKHQsZSl7bCh0LChmdW5jdGlvbih0LHIsYSl7dmFyIG89MDtpZih0Lmdlb21ldHJ5KXt2YXIgcz10Lmdlb21ldHJ5LnR5cGU7aWYoIlBvaW50IiE9PXMmJiJNdWx0aVBvaW50IiE9PXMpe3ZhciBsLGM9MCx1PTAsZj0wO3JldHVybiExIT09aSh0LChmdW5jdGlvbihpLHMsaCxwLGQpe2lmKHZvaWQgMD09PWx8fHI+Y3x8cD51fHxkPmYpcmV0dXJuIGw9aSxjPXIsdT1wLGY9ZCx2b2lkKG89MCk7dmFyIG09bi5saW5lU3RyaW5nKFtsLGldLHQucHJvcGVydGllcyk7aWYoITE9PT1lKG0scixhLGQsbykpcmV0dXJuITE7bysrLGw9aX0pKSYmdm9pZCAwfX19KSl9ZnVuY3Rpb24gdSh0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiZ2VvanNvbiBpcyByZXF1aXJlZCIpO2wodCwoZnVuY3Rpb24odCxyLGkpe2lmKG51bGwhPT10Lmdlb21ldHJ5KXt2YXIgYT10Lmdlb21ldHJ5LnR5cGUsbz10Lmdlb21ldHJ5LmNvb3JkaW5hdGVzO3N3aXRjaChhKXtjYXNlIkxpbmVTdHJpbmciOmlmKCExPT09ZSh0LHIsaSwwLDApKXJldHVybiExO2JyZWFrO2Nhc2UiUG9seWdvbiI6Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspaWYoITE9PT1lKG4ubGluZVN0cmluZyhvW3NdLHQucHJvcGVydGllcykscixpLHMpKXJldHVybiExfX19KSl9ci5jb29yZEFsbD1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gaSh0LChmdW5jdGlvbih0KXtlLnB1c2godCl9KSksZX0sci5jb29yZEVhY2g9aSxyLmNvb3JkUmVkdWNlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXI7cmV0dXJuIGkodCwoZnVuY3Rpb24odCxuLGksbyxzKXthPTA9PT1uJiZ2b2lkIDA9PT1yP3Q6ZShhLHQsbixpLG8scyl9KSxuKSxhfSxyLmZlYXR1cmVFYWNoPW8sci5mZWF0dXJlUmVkdWNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yO3JldHVybiBvKHQsKGZ1bmN0aW9uKHQsaSl7bj0wPT09aSYmdm9pZCAwPT09cj90OmUobix0LGkpfSkpLG59LHIuZmluZFBvaW50PWZ1bmN0aW9uKHQsZSl7aWYoZT1lfHx7fSwhbi5pc09iamVjdChlKSl0aHJvdyBuZXcgRXJyb3IoIm9wdGlvbnMgaXMgaW52YWxpZCIpO3ZhciByLGk9ZS5mZWF0dXJlSW5kZXh8fDAsYT1lLm11bHRpRmVhdHVyZUluZGV4fHwwLG89ZS5nZW9tZXRyeUluZGV4fHwwLHM9ZS5jb29yZEluZGV4fHwwLGw9ZS5wcm9wZXJ0aWVzO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRmVhdHVyZUNvbGxlY3Rpb24iOmk8MCYmKGk9dC5mZWF0dXJlcy5sZW5ndGgraSksbD1sfHx0LmZlYXR1cmVzW2ldLnByb3BlcnRpZXMscj10LmZlYXR1cmVzW2ldLmdlb21ldHJ5O2JyZWFrO2Nhc2UiRmVhdHVyZSI6bD1sfHx0LnByb3BlcnRpZXMscj10Lmdlb21ldHJ5O2JyZWFrO2Nhc2UiUG9pbnQiOmNhc2UiTXVsdGlQb2ludCI6cmV0dXJuIG51bGw7Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIlBvbHlnb24iOmNhc2UiTXVsdGlMaW5lU3RyaW5nIjpjYXNlIk11bHRpUG9seWdvbiI6cj10O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJnZW9qc29uIGlzIGludmFsaWQiKX1pZihudWxsPT09cilyZXR1cm4gbnVsbDt2YXIgYz1yLmNvb3JkaW5hdGVzO3N3aXRjaChyLnR5cGUpe2Nhc2UiUG9pbnQiOnJldHVybiBuLnBvaW50KGMsbCxlKTtjYXNlIk11bHRpUG9pbnQiOnJldHVybiBhPDAmJihhPWMubGVuZ3RoK2EpLG4ucG9pbnQoY1thXSxsLGUpO2Nhc2UiTGluZVN0cmluZyI6cmV0dXJuIHM8MCYmKHM9Yy5sZW5ndGgrcyksbi5wb2ludChjW3NdLGwsZSk7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gbzwwJiYobz1jLmxlbmd0aCtvKSxzPDAmJihzPWNbb10ubGVuZ3RoK3MpLG4ucG9pbnQoY1tvXVtzXSxsLGUpO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyZXR1cm4gYTwwJiYoYT1jLmxlbmd0aCthKSxzPDAmJihzPWNbYV0ubGVuZ3RoK3MpLG4ucG9pbnQoY1thXVtzXSxsLGUpO2Nhc2UiTXVsdGlQb2x5Z29uIjpyZXR1cm4gYTwwJiYoYT1jLmxlbmd0aCthKSxvPDAmJihvPWNbYV0ubGVuZ3RoK28pLHM8MCYmKHM9Y1thXVtvXS5sZW5ndGgtcyksbi5wb2ludChjW2FdW29dW3NdLGwsZSl9dGhyb3cgbmV3IEVycm9yKCJnZW9qc29uIGlzIGludmFsaWQiKX0sci5maW5kU2VnbWVudD1mdW5jdGlvbih0LGUpe2lmKGU9ZXx8e30sIW4uaXNPYmplY3QoZSkpdGhyb3cgbmV3IEVycm9yKCJvcHRpb25zIGlzIGludmFsaWQiKTt2YXIgcixpPWUuZmVhdHVyZUluZGV4fHwwLGE9ZS5tdWx0aUZlYXR1cmVJbmRleHx8MCxvPWUuZ2VvbWV0cnlJbmRleHx8MCxzPWUuc2VnbWVudEluZGV4fHwwLGw9ZS5wcm9wZXJ0aWVzO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRmVhdHVyZUNvbGxlY3Rpb24iOmk8MCYmKGk9dC5mZWF0dXJlcy5sZW5ndGgraSksbD1sfHx0LmZlYXR1cmVzW2ldLnByb3BlcnRpZXMscj10LmZlYXR1cmVzW2ldLmdlb21ldHJ5O2JyZWFrO2Nhc2UiRmVhdHVyZSI6bD1sfHx0LnByb3BlcnRpZXMscj10Lmdlb21ldHJ5O2JyZWFrO2Nhc2UiUG9pbnQiOmNhc2UiTXVsdGlQb2ludCI6cmV0dXJuIG51bGw7Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIlBvbHlnb24iOmNhc2UiTXVsdGlMaW5lU3RyaW5nIjpjYXNlIk11bHRpUG9seWdvbiI6cj10O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJnZW9qc29uIGlzIGludmFsaWQiKX1pZihudWxsPT09cilyZXR1cm4gbnVsbDt2YXIgYz1yLmNvb3JkaW5hdGVzO3N3aXRjaChyLnR5cGUpe2Nhc2UiUG9pbnQiOmNhc2UiTXVsdGlQb2ludCI6cmV0dXJuIG51bGw7Y2FzZSJMaW5lU3RyaW5nIjpyZXR1cm4gczwwJiYocz1jLmxlbmd0aCtzLTEpLG4ubGluZVN0cmluZyhbY1tzXSxjW3MrMV1dLGwsZSk7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gbzwwJiYobz1jLmxlbmd0aCtvKSxzPDAmJihzPWNbb10ubGVuZ3RoK3MtMSksbi5saW5lU3RyaW5nKFtjW29dW3NdLGNbb11bcysxXV0sbCxlKTtjYXNlIk11bHRpTGluZVN0cmluZyI6cmV0dXJuIGE8MCYmKGE9Yy5sZW5ndGgrYSksczwwJiYocz1jW2FdLmxlbmd0aCtzLTEpLG4ubGluZVN0cmluZyhbY1thXVtzXSxjW2FdW3MrMV1dLGwsZSk7Y2FzZSJNdWx0aVBvbHlnb24iOnJldHVybiBhPDAmJihhPWMubGVuZ3RoK2EpLG88MCYmKG89Y1thXS5sZW5ndGgrbyksczwwJiYocz1jW2FdW29dLmxlbmd0aC1zLTEpLG4ubGluZVN0cmluZyhbY1thXVtvXVtzXSxjW2FdW29dW3MrMV1dLGwsZSl9dGhyb3cgbmV3IEVycm9yKCJnZW9qc29uIGlzIGludmFsaWQiKX0sci5mbGF0dGVuRWFjaD1sLHIuZmxhdHRlblJlZHVjZT1mdW5jdGlvbih0LGUscil7dmFyIG49cjtyZXR1cm4gbCh0LChmdW5jdGlvbih0LGksYSl7bj0wPT09aSYmMD09PWEmJnZvaWQgMD09PXI/dDplKG4sdCxpLGEpfSkpLG59LHIuZ2VvbUVhY2g9cyxyLmdlb21SZWR1Y2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXI7cmV0dXJuIHModCwoZnVuY3Rpb24odCxpLGEsbyxzKXtuPTA9PT1pJiZ2b2lkIDA9PT1yP3Q6ZShuLHQsaSxhLG8scyl9KSksbn0sci5saW5lRWFjaD11LHIubGluZVJlZHVjZT1mdW5jdGlvbih0LGUscil7dmFyIG49cjtyZXR1cm4gdSh0LChmdW5jdGlvbih0LGksYSxvKXtuPTA9PT1pJiZ2b2lkIDA9PT1yP3Q6ZShuLHQsaSxhLG8pfSkpLG59LHIucHJvcEVhY2g9YSxyLnByb3BSZWR1Y2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXI7cmV0dXJuIGEodCwoZnVuY3Rpb24odCxpKXtuPTA9PT1pJiZ2b2lkIDA9PT1yP3Q6ZShuLHQsaSl9KSksbn0sci5zZWdtZW50RWFjaD1jLHIuc2VnbWVudFJlZHVjZT1mdW5jdGlvbih0LGUscil7dmFyIG49cixpPSExO3JldHVybiBjKHQsKGZ1bmN0aW9uKHQsYSxvLHMsbCl7bj0hMT09PWkmJnZvaWQgMD09PXI/dDplKG4sdCxhLG8scyxsKSxpPSEwfSkpLG59fSx7IkB0dXJmL2hlbHBlcnMiOjY0fV0sNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49InVuZGVmaW5lZCI9PXR5cGVvZiBXZWFrTWFwP3QoIndlYWstbWFwIik6V2Vha01hcCxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksbz1uZXcgbjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9by5nZXQodCkscj1lJiYoZS5fdHJpYW5nbGVCdWZmZXIuaGFuZGxlfHxlLl90cmlhbmdsZUJ1ZmZlci5idWZmZXIpO2lmKCFyfHwhdC5pc0J1ZmZlcihyKSl7dmFyIG49aSh0LG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC0xLDQsNCwtMV0pKTsoZT1hKHQsW3tidWZmZXI6bix0eXBlOnQuRkxPQVQsc2l6ZToyfV0pKS5fdHJpYW5nbGVCdWZmZXI9bixvLnNldCh0LGUpfWUuYmluZCgpLHQuZHJhd0FycmF5cyh0LlRSSUFOR0xFUywwLDMpLGUudW5iaW5kKCl9fSx7ImdsLWJ1ZmZlciI6MjU3LCJnbC12YW8iOjM0Mywid2Vhay1tYXAiOjU5OH1dLDY3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wLG49MCxpPTA7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXt2YXIgYT0odD10LnNsaWNlKCkpWzBdLG89YS50b1VwcGVyQ2FzZSgpO2lmKGEhPW8pc3dpdGNoKHRbMF09byxhKXtjYXNlImEiOnRbNl0rPW4sdFs3XSs9aTticmVhaztjYXNlInYiOnRbMV0rPWk7YnJlYWs7Y2FzZSJoIjp0WzFdKz1uO2JyZWFrO2RlZmF1bHQ6Zm9yKHZhciBzPTE7czx0Lmxlbmd0aDspdFtzKytdKz1uLHRbcysrXSs9aX1zd2l0Y2gobyl7Y2FzZSJaIjpuPWUsaT1yO2JyZWFrO2Nhc2UiSCI6bj10WzFdO2JyZWFrO2Nhc2UiViI6aT10WzFdO2JyZWFrO2Nhc2UiTSI6bj1lPXRbMV0saT1yPXRbMl07YnJlYWs7ZGVmYXVsdDpuPXRbdC5sZW5ndGgtMl0saT10W3QubGVuZ3RoLTFdfXJldHVybiB0fSkpfX0se31dLDY4OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgicGFkLWxlZnQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2U9Im51bWJlciI9PXR5cGVvZiBlP2U6MSxyPXJ8fCI6ICI7dmFyIGk9dC5zcGxpdCgvXHI/XG4vKSxhPVN0cmluZyhpLmxlbmd0aCtlLTEpLmxlbmd0aDtyZXR1cm4gaS5tYXAoKGZ1bmN0aW9uKHQsaSl7dmFyIG89aStlLHM9U3RyaW5nKG8pLmxlbmd0aDtyZXR1cm4gbihvLGEtcykrcit0fSkpLmpvaW4oIlxuIil9fSx7InBhZC1sZWZ0Ijo0Njl9XSw2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107aWYoMT09PWUpcmV0dXJuWzBdO2Zvcih2YXIgcj10WzBdLmxlbmd0aCxuPVt0WzBdXSxhPVswXSxvPTE7bzxlOysrbylpZihuLnB1c2godFtvXSksaShuLHIpKXtpZihhLnB1c2gobyksYS5sZW5ndGg9PT1yKzEpcmV0dXJuIGF9ZWxzZSBuLnBvcCgpO3JldHVybiBhfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKTtmdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKzEpLGk9MDtpPHQubGVuZ3RoOysraSlyW2ldPXRbaV07Zm9yKGk9MDtpPD10Lmxlbmd0aDsrK2kpe2Zvcih2YXIgYT10Lmxlbmd0aDthPD1lOysrYSl7Zm9yKHZhciBvPW5ldyBBcnJheShlKSxzPTA7czxlOysrcylvW3NdPU1hdGgucG93KGErMS1pLHMpO3JbYV09b31pZihuLmFwcGx5KHZvaWQgMCxyKSlyZXR1cm4hMH1yZXR1cm4hMX19LHsicm9idXN0LW9yaWVudGF0aW9uIjo1MjR9XSw3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihlKS5maWx0ZXIoKGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoci5sZW5ndGgpLGE9MDthPHIubGVuZ3RoOysrYSluW2FdPWVbclthXV07cmV0dXJuIGkobikqdDwxfSkpfTt2YXIgbj10KCJkZWxhdW5heS10cmlhbmd1bGF0ZSIpLGk9dCgiY2lyY3VtcmFkaXVzIil9LHtjaXJjdW1yYWRpdXM6MTIwLCJkZWxhdW5heS10cmlhbmd1bGF0ZSI6MTcyfV0sNzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaShuKHQsZSkpfTt2YXIgbj10KCJhbHBoYS1jb21wbGV4IiksaT10KCJzaW1wbGljaWFsLWNvbXBsZXgtYm91bmRhcnkiKX0seyJhbHBoYS1jb21wbGV4Ijo3MCwic2ltcGxpY2lhbC1jb21wbGV4LWJvdW5kYXJ5Ijo1MzF9XSw3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighdHx8bnVsbD09dC5sZW5ndGgpdGhyb3cgRXJyb3IoIkFyZ3VtZW50IHNob3VsZCBiZSBhbiBhcnJheSIpO2U9bnVsbD09ZT8xOk1hdGguZmxvb3IoZSk7Zm9yKHZhciByPUFycmF5KDIqZSksbj0wO248ZTtuKyspe2Zvcih2YXIgaT0tMS8wLGE9MS8wLG89bixzPXQubGVuZ3RoO288cztvKz1lKXRbb10+aSYmKGk9dFtvXSksdFtvXTxhJiYoYT10W29dKTtyW25dPWEscltlK25dPWl9cmV0dXJuIHJ9fSx7fV0sNzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleClyZXR1cm4gdC5maW5kSW5kZXgoZSxyKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJwcmVkaWNhdGUgbXVzdCBiZSBhIGZ1bmN0aW9uIik7dmFyIG49T2JqZWN0KHQpLGk9bi5sZW5ndGg7aWYoMD09PWkpcmV0dXJuLTE7Zm9yKHZhciBhPTA7YTxpO2ErKylpZihlLmNhbGwocixuW2FdLGEsbikpcmV0dXJuIGE7cmV0dXJuLTF9fSx7fV0sNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYXJyYXktYm91bmRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZighdHx8bnVsbD09dC5sZW5ndGgpdGhyb3cgRXJyb3IoIkFyZ3VtZW50IHNob3VsZCBiZSBhbiBhcnJheSIpO251bGw9PWUmJihlPTEpO251bGw9PXImJihyPW4odCxlKSk7Zm9yKHZhciBpPTA7aTxlO2krKyl7dmFyIGE9cltlK2ldLG89cltpXSxzPWksbD10Lmxlbmd0aDtpZihhPT09MS8wJiZvPT09LTEvMClmb3Iocz1pO3M8bDtzKz1lKXRbc109dFtzXT09PWE/MTp0W3NdPT09bz8wOi41O2Vsc2UgaWYoYT09PTEvMClmb3Iocz1pO3M8bDtzKz1lKXRbc109dFtzXT09PWE/MTowO2Vsc2UgaWYobz09PS0xLzApZm9yKHM9aTtzPGw7cys9ZSl0W3NdPXRbc109PT1vPzA6MTtlbHNle3ZhciBjPWEtbztmb3Iocz1pO3M8bDtzKz1lKWlzTmFOKHRbc10pfHwodFtzXT0wPT09Yz8uNToodFtzXS1vKS9jKX19cmV0dXJuIHR9fSx7ImFycmF5LWJvdW5kcyI6NzJ9XSw3NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPSJudW1iZXIiPT10eXBlb2YgdCxuPSJudW1iZXIiPT10eXBlb2YgZTtyJiYhbj8oZT10LHQ9MCk6cnx8bnx8KHQ9MCxlPTApO3ZhciBpPShlfD0wKS0odHw9MCk7aWYoaTwwKXRocm93IG5ldyBFcnJvcigiYXJyYXkgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUiKTtmb3IodmFyIGE9bmV3IEFycmF5KGkpLG89MCxzPXQ7bzxpO28rKyxzKyspYVtvXT1zO3JldHVybiBhfX0se31dLDc2OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJvYmplY3QtYXNzaWduIik7Ci8qIQogKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci4KICoKICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+CiAqIEBsaWNlbnNlICBNSVQKICovZnVuY3Rpb24gaSh0LGUpe2lmKHQ9PT1lKXJldHVybiAwO2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MCxhPU1hdGgubWluKHIsbik7aTxhOysraSlpZih0W2ldIT09ZVtpXSl7cj10W2ldLG49ZVtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gci5CdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiByLkJ1ZmZlci5pc0J1ZmZlcj9yLkJ1ZmZlci5pc0J1ZmZlcih0KTohKG51bGw9PXR8fCF0Ll9pc0J1ZmZlcil9dmFyIG89dCgidXRpbC8iKSxzPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbD1BcnJheS5wcm90b3R5cGUuc2xpY2UsYz0iZm9vIj09PWZ1bmN0aW9uKCl7fS5uYW1lO2Z1bmN0aW9uIHUodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBmKHQpe3JldHVybiFhKHQpJiYoImZ1bmN0aW9uIj09dHlwZW9mIHIuQXJyYXlCdWZmZXImJigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyh0KTohIXQmJih0IGluc3RhbmNlb2YgRGF0YVZpZXd8fCEhKHQuYnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkpKX12YXIgaD1lLmV4cG9ydHM9eSxwPS9ccypmdW5jdGlvblxzKyhbXlwoXHNdKilccyovO2Z1bmN0aW9uIGQodCl7aWYoby5pc0Z1bmN0aW9uKHQpKXtpZihjKXJldHVybiB0Lm5hbWU7dmFyIGU9dC50b1N0cmluZygpLm1hdGNoKHApO3JldHVybiBlJiZlWzFdfX1mdW5jdGlvbiBtKHQsZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3QubGVuZ3RoPGU/dDp0LnNsaWNlKDAsZSk6dH1mdW5jdGlvbiBnKHQpe2lmKGN8fCFvLmlzRnVuY3Rpb24odCkpcmV0dXJuIG8uaW5zcGVjdCh0KTt2YXIgZT1kKHQpO3JldHVybiJbRnVuY3Rpb24iKyhlPyI6ICIrZToiIikrIl0ifWZ1bmN0aW9uIHYodCxlLHIsbixpKXt0aHJvdyBuZXcgaC5Bc3NlcnRpb25FcnJvcih7bWVzc2FnZTpyLGFjdHVhbDp0LGV4cGVjdGVkOmUsb3BlcmF0b3I6bixzdGFja1N0YXJ0RnVuY3Rpb246aX0pfWZ1bmN0aW9uIHkodCxlKXt0fHx2KHQsITAsZSwiPT0iLGgub2spfWZ1bmN0aW9uIHgodCxlLHIsbil7aWYodD09PWUpcmV0dXJuITA7aWYoYSh0KSYmYShlKSlyZXR1cm4gMD09PWkodCxlKTtpZihvLmlzRGF0ZSh0KSYmby5pc0RhdGUoZSkpcmV0dXJuIHQuZ2V0VGltZSgpPT09ZS5nZXRUaW1lKCk7aWYoby5pc1JlZ0V4cCh0KSYmby5pc1JlZ0V4cChlKSlyZXR1cm4gdC5zb3VyY2U9PT1lLnNvdXJjZSYmdC5nbG9iYWw9PT1lLmdsb2JhbCYmdC5tdWx0aWxpbmU9PT1lLm11bHRpbGluZSYmdC5sYXN0SW5kZXg9PT1lLmxhc3RJbmRleCYmdC5pZ25vcmVDYXNlPT09ZS5pZ25vcmVDYXNlO2lmKG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGUpe2lmKGYodCkmJmYoZSkmJnUodCk9PT11KGUpJiYhKHQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpKXJldHVybiAwPT09aShuZXcgVWludDhBcnJheSh0LmJ1ZmZlciksbmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpKTtpZihhKHQpIT09YShlKSlyZXR1cm4hMTt2YXIgcz0obj1ufHx7YWN0dWFsOltdLGV4cGVjdGVkOltdfSkuYWN0dWFsLmluZGV4T2YodCk7cmV0dXJuLTEhPT1zJiZzPT09bi5leHBlY3RlZC5pbmRleE9mKGUpfHwobi5hY3R1YWwucHVzaCh0KSxuLmV4cGVjdGVkLnB1c2goZSksZnVuY3Rpb24odCxlLHIsbil7aWYobnVsbD09dHx8bnVsbD09ZSlyZXR1cm4hMTtpZihvLmlzUHJpbWl0aXZlKHQpfHxvLmlzUHJpbWl0aXZlKGUpKXJldHVybiB0PT09ZTtpZihyJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpcmV0dXJuITE7dmFyIGk9Yih0KSxhPWIoZSk7aWYoaSYmIWF8fCFpJiZhKXJldHVybiExO2lmKGkpcmV0dXJuIHQ9bC5jYWxsKHQpLGU9bC5jYWxsKGUpLHgodCxlLHIpO3ZhciBzLGMsdT1UKHQpLGY9VChlKTtpZih1Lmxlbmd0aCE9PWYubGVuZ3RoKXJldHVybiExO2Zvcih1LnNvcnQoKSxmLnNvcnQoKSxjPXUubGVuZ3RoLTE7Yz49MDtjLS0paWYodVtjXSE9PWZbY10pcmV0dXJuITE7Zm9yKGM9dS5sZW5ndGgtMTtjPj0wO2MtLSlpZihzPXVbY10sIXgodFtzXSxlW3NdLHIsbikpcmV0dXJuITE7cmV0dXJuITB9KHQsZSxyLG4pKX1yZXR1cm4gcj90PT09ZTp0PT1lfWZ1bmN0aW9uIGIodCl7cmV0dXJuIltvYmplY3QgQXJndW1lbnRzXSI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBfKHQsZSl7aWYoIXR8fCFlKXJldHVybiExO2lmKCJbb2JqZWN0IFJlZ0V4cF0iPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIGUudGVzdCh0KTt0cnl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuITB9Y2F0Y2godCl7fXJldHVybiFFcnJvci5pc1Byb3RvdHlwZU9mKGUpJiYhMD09PWUuY2FsbCh7fSx0KX1mdW5jdGlvbiB3KHQsZSxyLG4pe3ZhciBpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJibG9jayIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9bnVsbCksaT1mdW5jdGlvbih0KXt2YXIgZTt0cnl7dCgpfWNhdGNoKHQpe2U9dH1yZXR1cm4gZX0oZSksbj0ociYmci5uYW1lPyIgKCIrci5uYW1lKyIpLiI6Ii4iKSsobj8iICIrbjoiLiIpLHQmJiFpJiZ2KGksciwiTWlzc2luZyBleHBlY3RlZCBleGNlcHRpb24iK24pO3ZhciBhPSJzdHJpbmciPT10eXBlb2YgbixzPSF0JiZpJiYhcjtpZigoIXQmJm8uaXNFcnJvcihpKSYmYSYmXyhpLHIpfHxzKSYmdihpLHIsIkdvdCB1bndhbnRlZCBleGNlcHRpb24iK24pLHQmJmkmJnImJiFfKGkscil8fCF0JiZpKXRocm93IGl9aC5Bc3NlcnRpb25FcnJvcj1mdW5jdGlvbih0KXt0aGlzLm5hbWU9IkFzc2VydGlvbkVycm9yIix0aGlzLmFjdHVhbD10LmFjdHVhbCx0aGlzLmV4cGVjdGVkPXQuZXhwZWN0ZWQsdGhpcy5vcGVyYXRvcj10Lm9wZXJhdG9yLHQubWVzc2FnZT8odGhpcy5tZXNzYWdlPXQubWVzc2FnZSx0aGlzLmdlbmVyYXRlZE1lc3NhZ2U9ITEpOih0aGlzLm1lc3NhZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIG0oZyh0LmFjdHVhbCksMTI4KSsiICIrdC5vcGVyYXRvcisiICIrbShnKHQuZXhwZWN0ZWQpLDEyOCl9KHRoaXMpLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMCk7dmFyIGU9dC5zdGFja1N0YXJ0RnVuY3Rpb258fHY7aWYoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxlKTtlbHNle3ZhciByPW5ldyBFcnJvcjtpZihyLnN0YWNrKXt2YXIgbj1yLnN0YWNrLGk9ZChlKSxhPW4uaW5kZXhPZigiXG4iK2kpO2lmKGE+PTApe3ZhciBvPW4uaW5kZXhPZigiXG4iLGErMSk7bj1uLnN1YnN0cmluZyhvKzEpfXRoaXMuc3RhY2s9bn19fSxvLmluaGVyaXRzKGguQXNzZXJ0aW9uRXJyb3IsRXJyb3IpLGguZmFpbD12LGgub2s9eSxoLmVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0IT1lJiZ2KHQsZSxyLCI9PSIsaC5lcXVhbCl9LGgubm90RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3Q9PWUmJnYodCxlLHIsIiE9IixoLm5vdEVxdWFsKX0saC5kZWVwRXF1YWw9ZnVuY3Rpb24odCxlLHIpe3godCxlLCExKXx8dih0LGUsciwiZGVlcEVxdWFsIixoLmRlZXBFcXVhbCl9LGguZGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt4KHQsZSwhMCl8fHYodCxlLHIsImRlZXBTdHJpY3RFcXVhbCIsaC5kZWVwU3RyaWN0RXF1YWwpfSxoLm5vdERlZXBFcXVhbD1mdW5jdGlvbih0LGUscil7eCh0LGUsITEpJiZ2KHQsZSxyLCJub3REZWVwRXF1YWwiLGgubm90RGVlcEVxdWFsKX0saC5ub3REZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24gdChlLHIsbil7eChlLHIsITApJiZ2KGUscixuLCJub3REZWVwU3RyaWN0RXF1YWwiLHQpfSxoLnN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0IT09ZSYmdih0LGUsciwiPT09IixoLnN0cmljdEVxdWFsKX0saC5ub3RTdHJpY3RFcXVhbD1mdW5jdGlvbih0LGUscil7dD09PWUmJnYodCxlLHIsIiE9PSIsaC5ub3RTdHJpY3RFcXVhbCl9LGgudGhyb3dzPWZ1bmN0aW9uKHQsZSxyKXt3KCEwLHQsZSxyKX0saC5kb2VzTm90VGhyb3c9ZnVuY3Rpb24odCxlLHIpe3coITEsdCxlLHIpfSxoLmlmRXJyb3I9ZnVuY3Rpb24odCl7aWYodCl0aHJvdyB0fSxoLnN0cmljdD1uKChmdW5jdGlvbiB0KGUscil7ZXx8dihlLCEwLHIsIj09Iix0KX0pLGgse2VxdWFsOmguc3RyaWN0RXF1YWwsZGVlcEVxdWFsOmguZGVlcFN0cmljdEVxdWFsLG5vdEVxdWFsOmgubm90U3RyaWN0RXF1YWwsbm90RGVlcEVxdWFsOmgubm90RGVlcFN0cmljdEVxdWFsfSksaC5zdHJpY3Quc3RyaWN0PWguc3RyaWN0O3ZhciBUPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdClzLmNhbGwodCxyKSYmZS5wdXNoKHIpO3JldHVybiBlfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsib2JqZWN0LWFzc2lnbiI6NDY2LCJ1dGlsLyI6Nzl9XSw3NzpbZnVuY3Rpb24odCxlLHIpeyJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWUsdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OmUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9fSx7fV0sNzg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJvYmplY3QiPT10eXBlb2YgdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmVhZFVJbnQ4fX0se31dLDc5OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUsbil7KGZ1bmN0aW9uKCl7dmFyIGk9LyVbc2RqJV0vZztyLmZvcm1hdD1mdW5jdGlvbih0KXtpZighdih0KSl7Zm9yKHZhciBlPVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWUucHVzaChzKGFyZ3VtZW50c1tyXSkpO3JldHVybiBlLmpvaW4oIiAiKX1yPTE7Zm9yKHZhciBuPWFyZ3VtZW50cyxhPW4ubGVuZ3RoLG89U3RyaW5nKHQpLnJlcGxhY2UoaSwoZnVuY3Rpb24odCl7aWYoIiUlIj09PXQpcmV0dXJuIiUiO2lmKHI+PWEpcmV0dXJuIHQ7c3dpdGNoKHQpe2Nhc2UiJXMiOnJldHVybiBTdHJpbmcobltyKytdKTtjYXNlIiVkIjpyZXR1cm4gTnVtYmVyKG5bcisrXSk7Y2FzZSIlaiI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShuW3IrK10pfWNhdGNoKHQpe3JldHVybiJbQ2lyY3VsYXJdIn1kZWZhdWx0OnJldHVybiB0fX0pKSxsPW5bcl07cjxhO2w9blsrK3JdKW0obCl8fCFiKGwpP28rPSIgIitsOm8rPSIgIitzKGwpO3JldHVybiBvfSxyLmRlcHJlY2F0ZT1mdW5jdGlvbih0LGkpe2lmKHkobi5wcm9jZXNzKSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gci5kZXByZWNhdGUodCxpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2lmKCEwPT09ZS5ub0RlcHJlY2F0aW9uKXJldHVybiB0O3ZhciBhPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFhKXtpZihlLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKGkpO2UudHJhY2VEZXByZWNhdGlvbj9jb25zb2xlLnRyYWNlKGkpOmNvbnNvbGUuZXJyb3IoaSksYT0hMH1yZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIgYSxvPXt9O2Z1bmN0aW9uIHModCxlKXt2YXIgbj17c2VlbjpbXSxzdHlsaXplOmN9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYobi5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihuLmNvbG9ycz1hcmd1bWVudHNbM10pLGQoZSk/bi5zaG93SGlkZGVuPWU6ZSYmci5fZXh0ZW5kKG4sZSkseShuLnNob3dIaWRkZW4pJiYobi5zaG93SGlkZGVuPSExKSx5KG4uZGVwdGgpJiYobi5kZXB0aD0yKSx5KG4uY29sb3JzKSYmKG4uY29sb3JzPSExKSx5KG4uY3VzdG9tSW5zcGVjdCkmJihuLmN1c3RvbUluc3BlY3Q9ITApLG4uY29sb3JzJiYobi5zdHlsaXplPWwpLHUobix0LG4uZGVwdGgpfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj1zLnN0eWxlc1tlXTtyZXR1cm4gcj8iXHgxYlsiK3MuY29sb3JzW3JdWzBdKyJtIit0KyJceDFiWyIrcy5jb2xvcnNbcl1bMV0rIm0iOnR9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB0fWZ1bmN0aW9uIHUodCxlLG4pe2lmKHQuY3VzdG9tSW5zcGVjdCYmZSYmVChlLmluc3BlY3QpJiZlLmluc3BlY3QhPT1yLmluc3BlY3QmJighZS5jb25zdHJ1Y3Rvcnx8ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT1lKSl7dmFyIGk9ZS5pbnNwZWN0KG4sdCk7cmV0dXJuIHYoaSl8fChpPXUodCxpLG4pKSxpfXZhciBhPWZ1bmN0aW9uKHQsZSl7aWYoeShlKSlyZXR1cm4gdC5zdHlsaXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZih2KGUpKXt2YXIgcj0iJyIrSlNPTi5zdHJpbmdpZnkoZSkucmVwbGFjZSgvXiJ8IiQvZywiIikucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpKyInIjtyZXR1cm4gdC5zdHlsaXplKHIsInN0cmluZyIpfWlmKGcoZSkpcmV0dXJuIHQuc3R5bGl6ZSgiIitlLCJudW1iZXIiKTtpZihkKGUpKXJldHVybiB0LnN0eWxpemUoIiIrZSwiYm9vbGVhbiIpO2lmKG0oZSkpcmV0dXJuIHQuc3R5bGl6ZSgibnVsbCIsIm51bGwiKX0odCxlKTtpZihhKXJldHVybiBhO3ZhciBvPU9iamVjdC5rZXlzKGUpLHM9ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCxyKXtlW3RdPSEwfSkpLGV9KG8pO2lmKHQuc2hvd0hpZGRlbiYmKG89T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkpLHcoZSkmJihvLmluZGV4T2YoIm1lc3NhZ2UiKT49MHx8by5pbmRleE9mKCJkZXNjcmlwdGlvbiIpPj0wKSlyZXR1cm4gZihlKTtpZigwPT09by5sZW5ndGgpe2lmKFQoZSkpe3ZhciBsPWUubmFtZT8iOiAiK2UubmFtZToiIjtyZXR1cm4gdC5zdHlsaXplKCJbRnVuY3Rpb24iK2wrIl0iLCJzcGVjaWFsIil9aWYoeChlKSlyZXR1cm4gdC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSwicmVnZXhwIik7aWYoXyhlKSlyZXR1cm4gdC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSksImRhdGUiKTtpZih3KGUpKXJldHVybiBmKGUpfXZhciBjLGI9IiIsaz0hMSxBPVsieyIsIn0iXTsocChlKSYmKGs9ITAsQT1bIlsiLCJdIl0pLFQoZSkpJiYoYj0iIFtGdW5jdGlvbiIrKGUubmFtZT8iOiAiK2UubmFtZToiIikrIl0iKTtyZXR1cm4geChlKSYmKGI9IiAiK1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSksXyhlKSYmKGI9IiAiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwoZSkpLHcoZSkmJihiPSIgIitmKGUpKSwwIT09by5sZW5ndGh8fGsmJjAhPWUubGVuZ3RoP248MD94KGUpP3Quc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSksInJlZ2V4cCIpOnQuc3R5bGl6ZSgiW09iamVjdF0iLCJzcGVjaWFsIik6KHQuc2Vlbi5wdXNoKGUpLGM9az9mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT1bXSxvPTAscz1lLmxlbmd0aDtvPHM7KytvKUUoZSxTdHJpbmcobykpP2EucHVzaChoKHQsZSxyLG4sU3RyaW5nKG8pLCEwKSk6YS5wdXNoKCIiKTtyZXR1cm4gaS5mb3JFYWNoKChmdW5jdGlvbihpKXtpLm1hdGNoKC9eXGQrJC8pfHxhLnB1c2goaCh0LGUscixuLGksITApKX0pKSxhfSh0LGUsbixzLG8pOm8ubWFwKChmdW5jdGlvbihyKXtyZXR1cm4gaCh0LGUsbixzLHIsayl9KSksdC5zZWVuLnBvcCgpLGZ1bmN0aW9uKHQsZSxyKXtpZih0LnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5pbmRleE9mKCJcbiIpPj0wJiYwLHQrZS5yZXBsYWNlKC9cdTAwMWJcW1xkXGQ/bS9nLCIiKS5sZW5ndGgrMX0pLDApPjYwKXJldHVybiByWzBdKygiIj09PWU/IiI6ZSsiXG4gIikrIiAiK3Quam9pbigiLFxuICAiKSsiICIrclsxXTtyZXR1cm4gclswXStlKyIgIit0LmpvaW4oIiwgIikrIiAiK3JbMV19KGMsYixBKSk6QVswXStiK0FbMV19ZnVuY3Rpb24gZih0KXtyZXR1cm4iWyIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkrIl0ifWZ1bmN0aW9uIGgodCxlLHIsbixpLGEpe3ZhciBvLHMsbDtpZigobD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsaSl8fHt2YWx1ZTplW2ldfSkuZ2V0P3M9bC5zZXQ/dC5zdHlsaXplKCJbR2V0dGVyL1NldHRlcl0iLCJzcGVjaWFsIik6dC5zdHlsaXplKCJbR2V0dGVyXSIsInNwZWNpYWwiKTpsLnNldCYmKHM9dC5zdHlsaXplKCJbU2V0dGVyXSIsInNwZWNpYWwiKSksRShuLGkpfHwobz0iWyIraSsiXSIpLHN8fCh0LnNlZW4uaW5kZXhPZihsLnZhbHVlKTwwPyhzPW0ocik/dSh0LGwudmFsdWUsbnVsbCk6dSh0LGwudmFsdWUsci0xKSkuaW5kZXhPZigiXG4iKT4tMSYmKHM9YT9zLnNwbGl0KCJcbiIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIiAgIit0fSkpLmpvaW4oIlxuIikuc3Vic3RyKDIpOiJcbiIrcy5zcGxpdCgiXG4iKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiIgICAiK3R9KSkuam9pbigiXG4iKSk6cz10LnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLHkobykpe2lmKGEmJmkubWF0Y2goL15cZCskLykpcmV0dXJuIHM7KG89SlNPTi5zdHJpbmdpZnkoIiIraSkpLm1hdGNoKC9eIihbYS16QS1aX11bYS16QS1aXzAtOV0qKSIkLyk/KG89by5zdWJzdHIoMSxvLmxlbmd0aC0yKSxvPXQuc3R5bGl6ZShvLCJuYW1lIikpOihvPW8ucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpLnJlcGxhY2UoLyheInwiJCkvZywiJyIpLG89dC5zdHlsaXplKG8sInN0cmluZyIpKX1yZXR1cm4gbysiOiAiK3N9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KX1mdW5jdGlvbiBkKHQpe3JldHVybiJib29sZWFuIj09dHlwZW9mIHR9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gbnVsbD09PXR9ZnVuY3Rpb24gZyh0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHR9ZnVuY3Rpb24gdih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHR9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdm9pZCAwPT09dH1mdW5jdGlvbiB4KHQpe3JldHVybiBiKHQpJiYiW29iamVjdCBSZWdFeHBdIj09PWsodCl9ZnVuY3Rpb24gYih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10fWZ1bmN0aW9uIF8odCl7cmV0dXJuIGIodCkmJiJbb2JqZWN0IERhdGVdIj09PWsodCl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gYih0KSYmKCJbb2JqZWN0IEVycm9yXSI9PT1rKHQpfHx0IGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIFQodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9ZnVuY3Rpb24gayh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIEEodCl7cmV0dXJuIHQ8MTA/IjAiK3QudG9TdHJpbmcoMTApOnQudG9TdHJpbmcoMTApfXIuZGVidWdsb2c9ZnVuY3Rpb24odCl7aWYoeShhKSYmKGE9ZS5lbnYuTk9ERV9ERUJVR3x8IiIpLHQ9dC50b1VwcGVyQ2FzZSgpLCFvW3RdKWlmKG5ldyBSZWdFeHAoIlxcYiIrdCsiXFxiIiwiaSIpLnRlc3QoYSkpe3ZhciBuPWUucGlkO29bdF09ZnVuY3Rpb24oKXt2YXIgZT1yLmZvcm1hdC5hcHBseShyLGFyZ3VtZW50cyk7Y29uc29sZS5lcnJvcigiJXMgJWQ6ICVzIix0LG4sZSl9fWVsc2Ugb1t0XT1mdW5jdGlvbigpe307cmV0dXJuIG9bdF19LHIuaW5zcGVjdD1zLHMuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxzLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LHIuaXNBcnJheT1wLHIuaXNCb29sZWFuPWQsci5pc051bGw9bSxyLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fSxyLmlzTnVtYmVyPWcsci5pc1N0cmluZz12LHIuaXNTeW1ib2w9ZnVuY3Rpb24odCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fSxyLmlzVW5kZWZpbmVkPXksci5pc1JlZ0V4cD14LHIuaXNPYmplY3Q9YixyLmlzRGF0ZT1fLHIuaXNFcnJvcj13LHIuaXNGdW5jdGlvbj1ULHIuaXNQcmltaXRpdmU9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10fHwiYm9vbGVhbiI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHR8fCJzdHJpbmciPT10eXBlb2YgdHx8InN5bWJvbCI9PXR5cGVvZiB0fHx2b2lkIDA9PT10fSxyLmlzQnVmZmVyPXQoIi4vc3VwcG9ydC9pc0J1ZmZlciIpO3ZhciBNPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl07ZnVuY3Rpb24gUygpe3ZhciB0PW5ldyBEYXRlLGU9W0EodC5nZXRIb3VycygpKSxBKHQuZ2V0TWludXRlcygpKSxBKHQuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpO3JldHVyblt0LmdldERhdGUoKSxNW3QuZ2V0TW9udGgoKV0sZV0uam9pbigiICIpfWZ1bmN0aW9uIEUodCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9ci5sb2c9ZnVuY3Rpb24oKXtjb25zb2xlLmxvZygiJXMgLSAlcyIsUygpLHIuZm9ybWF0LmFwcGx5KHIsYXJndW1lbnRzKSl9LHIuaW5oZXJpdHM9dCgiaW5oZXJpdHMiKSxyLl9leHRlbmQ9ZnVuY3Rpb24odCxlKXtpZighZXx8IWIoZSkpcmV0dXJuIHQ7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLG49ci5sZW5ndGg7bi0tOyl0W3Jbbl1dPWVbcltuXV07cmV0dXJuIHR9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vc3VwcG9ydC9pc0J1ZmZlciI6NzgsX3Byb2Nlc3M6NTA0LGluaGVyaXRzOjc3fV0sODA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGF0b2IodCl9fSx7fV0sODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLGE9bmV3IEFycmF5KHIrMSksbz0wO288cjsrK28pe2Zvcih2YXIgcz1uZXcgQXJyYXkocisxKSxsPTA7bDw9cjsrK2wpc1tsXT10W2xdW29dO2Fbb109c31hW3JdPW5ldyBBcnJheShyKzEpO2ZvcihvPTA7bzw9cjsrK28pYVtyXVtvXT0xO3ZhciBjPW5ldyBBcnJheShyKzEpO2ZvcihvPTA7bzxyOysrbyljW29dPWVbb107Y1tyXT0xO3ZhciB1PW4oYSxjKSxmPWkodVtyKzFdKTswPT09ZiYmKGY9MSk7dmFyIGg9bmV3IEFycmF5KHIrMSk7Zm9yKG89MDtvPD1yOysrbyloW29dPWkodVtvXSkvZjtyZXR1cm4gaH07dmFyIG49dCgicm9idXN0LWxpbmVhci1zb2x2ZSIpO2Z1bmN0aW9uIGkodCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7KytyKWUrPXRbcl07cmV0dXJuIGV9fSx7InJvYnVzdC1saW5lYXItc29sdmUiOjUyM31dLDgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuYnl0ZUxlbmd0aD1mdW5jdGlvbih0KXt2YXIgZT1jKHQpLHI9ZVswXSxuPWVbMV07cmV0dXJuIDMqKHIrbikvNC1ufSxyLnRvQnl0ZUFycmF5PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj1jKHQpLG89blswXSxzPW5bMV0sbD1uZXcgYShmdW5jdGlvbih0LGUscil7cmV0dXJuIDMqKGUrcikvNC1yfSgwLG8scykpLHU9MCxmPXM+MD9vLTQ6bztmb3Iocj0wO3I8ZjtyKz00KWU9aVt0LmNoYXJDb2RlQXQocildPDwxOHxpW3QuY2hhckNvZGVBdChyKzEpXTw8MTJ8aVt0LmNoYXJDb2RlQXQocisyKV08PDZ8aVt0LmNoYXJDb2RlQXQociszKV0sbFt1KytdPWU+PjE2JjI1NSxsW3UrK109ZT4+OCYyNTUsbFt1KytdPTI1NSZlOzI9PT1zJiYoZT1pW3QuY2hhckNvZGVBdChyKV08PDJ8aVt0LmNoYXJDb2RlQXQocisxKV0+PjQsbFt1KytdPTI1NSZlKTsxPT09cyYmKGU9aVt0LmNoYXJDb2RlQXQocildPDwxMHxpW3QuY2hhckNvZGVBdChyKzEpXTw8NHxpW3QuY2hhckNvZGVBdChyKzIpXT4+MixsW3UrK109ZT4+OCYyNTUsbFt1KytdPTI1NSZlKTtyZXR1cm4gbH0sci5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLGk9ciUzLGE9W10sbz0wLHM9ci1pO288cztvKz0xNjM4MylhLnB1c2godSh0LG8sbysxNjM4Mz5zP3M6bysxNjM4MykpOzE9PT1pPyhlPXRbci0xXSxhLnB1c2gobltlPj4yXStuW2U8PDQmNjNdKyI9PSIpKToyPT09aSYmKGU9KHRbci0yXTw8OCkrdFtyLTFdLGEucHVzaChuW2U+PjEwXStuW2U+PjQmNjNdK25bZTw8MiY2M10rIj0iKSk7cmV0dXJuIGEuam9pbigiIil9O2Zvcih2YXIgbj1bXSxpPVtdLGE9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksbz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIscz0wLGw9by5sZW5ndGg7czxsOysrcyluW3NdPW9bc10saVtvLmNoYXJDb2RlQXQocyldPXM7ZnVuY3Rpb24gYyh0KXt2YXIgZT10Lmxlbmd0aDtpZihlJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIgcj10LmluZGV4T2YoIj0iKTtyZXR1cm4tMT09PXImJihyPWUpLFtyLHI9PT1lPzA6NC1yJTRdfWZ1bmN0aW9uIHUodCxlLHIpe2Zvcih2YXIgaSxhLG89W10scz1lO3M8cjtzKz0zKWk9KHRbc108PDE2JjE2NzExNjgwKSsodFtzKzFdPDw4JjY1MjgwKSsoMjU1JnRbcysyXSksby5wdXNoKG5bKGE9aSk+PjE4JjYzXStuW2E+PjEyJjYzXStuW2E+PjYmNjNdK25bNjMmYV0pO3JldHVybiBvLmpvaW4oIiIpfWlbIi0iLmNoYXJDb2RlQXQoMCldPTYyLGlbIl8iLmNoYXJDb2RlQXQoMCldPTYzfSx7fV0sODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvcmF0aW9uYWxpemUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0WzBdLm11bChlWzFdKS5hZGQoZVswXS5tdWwodFsxXSkpLHRbMV0ubXVsKGVbMV0pKX19LHsiLi9saWIvcmF0aW9uYWxpemUiOjkzfV0sODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0ubXVsKGVbMV0pLmNtcChlWzBdLm11bCh0WzFdKSl9fSx7fV0sODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvcmF0aW9uYWxpemUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0WzBdLm11bChlWzFdKSx0WzFdLm11bChlWzBdKSl9fSx7Ii4vbGliL3JhdGlvbmFsaXplIjo5M31dLDg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtcmF0IiksaT10KCIuL2xpYi9pcy1ibiIpLGE9dCgiLi9saWIvbnVtLXRvLWJuIiksbz10KCIuL2xpYi9zdHItdG8tYm4iKSxzPXQoIi4vbGliL3JhdGlvbmFsaXplIiksbD10KCIuL2RpdiIpO2UuZXhwb3J0cz1mdW5jdGlvbiB0KGUscil7aWYobihlKSlyZXR1cm4gcj9sKGUsdChyKSk6W2VbMF0uY2xvbmUoKSxlWzFdLmNsb25lKCldO3ZhciBjLHUsZj0wO2lmKGkoZSkpYz1lLmNsb25lKCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUpYz1vKGUpO2Vsc2V7aWYoMD09PWUpcmV0dXJuW2EoMCksYSgxKV07aWYoZT09PU1hdGguZmxvb3IoZSkpYz1hKGUpO2Vsc2V7Zm9yKDtlIT09TWF0aC5mbG9vcihlKTspZSo9TWF0aC5wb3coMiwyNTYpLGYtPTI1NjtjPWEoZSl9fWlmKG4ocikpYy5tdWwoclsxXSksdT1yWzBdLmNsb25lKCk7ZWxzZSBpZihpKHIpKXU9ci5jbG9uZSgpO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiByKXU9byhyKTtlbHNlIGlmKHIpaWYocj09PU1hdGguZmxvb3IocikpdT1hKHIpO2Vsc2V7Zm9yKDtyIT09TWF0aC5mbG9vcihyKTspcio9TWF0aC5wb3coMiwyNTYpLGYrPTI1Njt1PWEocil9ZWxzZSB1PWEoMSk7Zj4wP2M9Yy51c2hsbihmKTpmPDAmJih1PXUudXNobG4oLWYpKTtyZXR1cm4gcyhjLHUpfX0seyIuL2RpdiI6ODUsIi4vaXMtcmF0Ijo4NywiLi9saWIvaXMtYm4iOjkxLCIuL2xpYi9udW0tdG8tYm4iOjkyLCIuL2xpYi9yYXRpb25hbGl6ZSI6OTMsIi4vbGliL3N0ci10by1ibiI6OTR9XSw4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9pcy1ibiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmMj09PXQubGVuZ3RoJiZuKHRbMF0pJiZuKHRbMV0pfX0seyIuL2xpYi9pcy1ibiI6OTF9XSw4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJibi5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5jbXAobmV3IG4oMCkpfX0seyJibi5qcyI6OTZ9XSw4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2JuLXNpZ24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgscj10LndvcmRzLGk9MDtpZigxPT09ZSlpPXJbMF07ZWxzZSBpZigyPT09ZSlpPXJbMF0rNjcxMDg4NjQqclsxXTtlbHNlIGZvcih2YXIgYT0wO2E8ZTthKyspe3ZhciBvPXJbYV07aSs9bypNYXRoLnBvdyg2NzEwODg2NCxhKX1yZXR1cm4gbih0KSppfX0seyIuL2JuLXNpZ24iOjg4fV0sOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZG91YmxlLWJpdHMiKSxpPXQoImJpdC10d2lkZGxlIikuY291bnRUcmFpbGluZ1plcm9zO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1pKG4ubG8odCkpO2lmKGU8MzIpcmV0dXJuIGU7dmFyIHI9aShuLmhpKHQpKTtpZihyPjIwKXJldHVybiA1MjtyZXR1cm4gciszMn19LHsiYml0LXR3aWRkbGUiOjEwMSwiZG91YmxlLWJpdHMiOjE3NH1dLDkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3QoImJuLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYib2JqZWN0Ij09dHlwZW9mIHQmJkJvb2xlYW4odC53b3Jkcyl9fSx7ImJuLmpzIjo5Nn1dLDkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJuLmpzIiksaT10KCJkb3VibGUtYml0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1pLmV4cG9uZW50KHQpO3JldHVybiBlPDUyP25ldyBuKHQpOm5ldyBuKHQqTWF0aC5wb3coMiw1Mi1lKSkudXNobG4oZS01Mil9fSx7ImJuLmpzIjo5NiwiZG91YmxlLWJpdHMiOjE3NH1dLDkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbnVtLXRvLWJuIiksaT10KCIuL2JuLXNpZ24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1pKHQpLGE9aShlKTtpZigwPT09cilyZXR1cm5bbigwKSxuKDEpXTtpZigwPT09YSlyZXR1cm5bbigwKSxuKDApXTthPDAmJih0PXQubmVnKCksZT1lLm5lZygpKTt2YXIgbz10LmdjZChlKTtpZihvLmNtcG4oMSkpcmV0dXJuW3QuZGl2KG8pLGUuZGl2KG8pXTtyZXR1cm5bdCxlXX19LHsiLi9ibi1zaWduIjo4OCwiLi9udW0tdG8tYm4iOjkyfV0sOTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYm4uanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBuKHQpfX0seyJibi5qcyI6OTZ9XSw5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9yYXRpb25hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHRbMF0ubXVsKGVbMF0pLHRbMV0ubXVsKGVbMV0pKX19LHsiLi9saWIvcmF0aW9uYWxpemUiOjkzfV0sOTY6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24oZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGkodCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIGEodCxlLHIpe2lmKGEuaXNCTih0KSlyZXR1cm4gdDt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09dCYmKCJsZSIhPT1lJiYiYmUiIT09ZXx8KHI9ZSxlPTEwKSx0aGlzLl9pbml0KHR8fDAsZXx8MTAscnx8ImJlIikpfXZhciBvOyJvYmplY3QiPT10eXBlb2YgZT9lLmV4cG9ydHM9YTpyLkJOPWEsYS5CTj1hLGEud29yZFNpemU9MjY7dHJ5e289InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjp0KCJidWZmZXIiKS5CdWZmZXJ9Y2F0Y2godCl7fWZ1bmN0aW9uIHModCxlKXt2YXIgcj10LmNoYXJDb2RlQXQoZSk7cmV0dXJuIHI+PTY1JiZyPD03MD9yLTU1OnI+PTk3JiZyPD0xMDI/ci04NzpyLTQ4JjE1fWZ1bmN0aW9uIGwodCxlLHIpe3ZhciBuPXModCxyKTtyZXR1cm4gci0xPj1lJiYobnw9cyh0LHItMSk8PDQpLG59ZnVuY3Rpb24gYyh0LGUscixuKXtmb3IodmFyIGk9MCxhPU1hdGgubWluKHQubGVuZ3RoLHIpLG89ZTtvPGE7bysrKXt2YXIgcz10LmNoYXJDb2RlQXQobyktNDg7aSo9bixpKz1zPj00OT9zLTQ5KzEwOnM+PTE3P3MtMTcrMTA6c31yZXR1cm4gaX1hLmlzQk49ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBhfHxudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yLndvcmRTaXplPT09YS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheSh0LndvcmRzKX0sYS5tYXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk+MD90OmV9LGEubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPDA/dDplfSxhLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUscil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHQsZSxyKTtpZigib2JqZWN0Ij09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXRBcnJheSh0LGUscik7ImhleCI9PT1lJiYoZT0xNiksbihlPT09KDB8ZSkmJmU+PTImJmU8PTM2KTt2YXIgaT0wOyItIj09PSh0PXQudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoaSsrLHRoaXMubmVnYXRpdmU9MSksaTx0Lmxlbmd0aCYmKDE2PT09ZT90aGlzLl9wYXJzZUhleCh0LGkscik6KHRoaXMuX3BhcnNlQmFzZSh0LGUsaSksImxlIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpKSl9LGEucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHQsZSxyKXt0PDAmJih0aGlzLm5lZ2F0aXZlPTEsdD0tdCksdDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdF0sdGhpcy5sZW5ndGg9MSk6dDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihuKHQ8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sYS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbih0LGUscil7aWYobigibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKSx0Lmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbCh0Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciBhLG8scz0wO2lmKCJiZSI9PT1yKWZvcihpPXQubGVuZ3RoLTEsYT0wO2k+PTA7aS09MylvPXRbaV18dFtpLTFdPDw4fHRbaS0yXTw8MTYsdGhpcy53b3Jkc1thXXw9bzw8cyY2NzEwODg2Myx0aGlzLndvcmRzW2ErMV09bz4+PjI2LXMmNjcxMDg4NjMsKHMrPTI0KT49MjYmJihzLT0yNixhKyspO2Vsc2UgaWYoImxlIj09PXIpZm9yKGk9MCxhPTA7aTx0Lmxlbmd0aDtpKz0zKW89dFtpXXx0W2krMV08PDh8dFtpKzJdPDwxNix0aGlzLndvcmRzW2FdfD1vPDxzJjY3MTA4ODYzLHRoaXMud29yZHNbYSsxXT1vPj4+MjYtcyY2NzEwODg2Mywocys9MjQpPj0yNiYmKHMtPTI2LGErKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHQubGVuZ3RoLWUpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIG49MDtuPHRoaXMubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPTA7dmFyIGksYT0wLG89MDtpZigiYmUiPT09cilmb3Iobj10Lmxlbmd0aC0xO24+PWU7bi09MilpPWwodCxlLG4pPDxhLHRoaXMud29yZHNbb118PTY3MTA4ODYzJmksYT49MTg/KGEtPTE4LG8rPTEsdGhpcy53b3Jkc1tvXXw9aT4+PjI2KTphKz04O2Vsc2UgZm9yKG49KHQubGVuZ3RoLWUpJTI9PTA/ZSsxOmU7bjx0Lmxlbmd0aDtuKz0yKWk9bCh0LGUsbik8PGEsdGhpcy53b3Jkc1tvXXw9NjcxMDg4NjMmaSxhPj0xOD8oYS09MTgsbys9MSx0aGlzLndvcmRzW29dfD1pPj4+MjYpOmErPTg7dGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgbj0wLGk9MTtpPD02NzEwODg2MztpKj1lKW4rKztuLS0saT1pL2V8MDtmb3IodmFyIGE9dC5sZW5ndGgtcixvPWElbixzPU1hdGgubWluKGEsYS1vKStyLGw9MCx1PXI7dTxzO3UrPW4pbD1jKHQsdSx1K24sZSksdGhpcy5pbXVsbihpKSx0aGlzLndvcmRzWzBdK2w8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bDp0aGlzLl9pYWRkbihsKTtpZigwIT09byl7dmFyIGY9MTtmb3IobD1jKHQsdSx0Lmxlbmd0aCxlKSx1PTA7dTxvO3UrKylmKj1lO3RoaXMuaW11bG4oZiksdGhpcy53b3Jkc1swXStsPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWw6dGhpcy5faWFkZG4obCl9dGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3Qud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl0LndvcmRzW2VdPXRoaXMud29yZHNbZV07dC5sZW5ndGg9dGhpcy5sZW5ndGgsdC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHQucmVkPXRoaXMucmVkfSxhLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBhKG51bGwpO3JldHVybiB0aGlzLmNvcHkodCksdH0sYS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQ7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sYS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxhLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sYS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgdT1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxmPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLGg9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gcCh0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmU7dmFyIG49dC5sZW5ndGgrZS5sZW5ndGh8MDtyLmxlbmd0aD1uLG49bi0xfDA7dmFyIGk9MHx0LndvcmRzWzBdLGE9MHxlLndvcmRzWzBdLG89aSphLHM9NjcxMDg4NjMmbyxsPW8vNjcxMDg4NjR8MDtyLndvcmRzWzBdPXM7Zm9yKHZhciBjPTE7YzxuO2MrKyl7Zm9yKHZhciB1PWw+Pj4yNixmPTY3MTA4ODYzJmwsaD1NYXRoLm1pbihjLGUubGVuZ3RoLTEpLHA9TWF0aC5tYXgoMCxjLXQubGVuZ3RoKzEpO3A8PWg7cCsrKXt2YXIgZD1jLXB8MDt1Kz0obz0oaT0wfHQud29yZHNbZF0pKihhPTB8ZS53b3Jkc1twXSkrZikvNjcxMDg4NjR8MCxmPTY3MTA4ODYzJm99ci53b3Jkc1tjXT0wfGYsbD0wfHV9cmV0dXJuIDAhPT1sP3Iud29yZHNbY109MHxsOnIubGVuZ3RoLS0sci5zdHJpcCgpfWEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI7aWYoZT0wfGV8fDEsMTY9PT0odD10fHwxMCl8fCJoZXgiPT09dCl7cj0iIjtmb3IodmFyIGk9MCxhPTAsbz0wO288dGhpcy5sZW5ndGg7bysrKXt2YXIgcz10aGlzLndvcmRzW29dLGw9KDE2Nzc3MjE1JihzPDxpfGEpKS50b1N0cmluZygxNik7cj0wIT09KGE9cz4+PjI0LWkmMTY3NzcyMTUpfHxvIT09dGhpcy5sZW5ndGgtMT91WzYtbC5sZW5ndGhdK2wrcjpsK3IsKGkrPTIpPj0yNiYmKGktPTI2LG8tLSl9Zm9yKDAhPT1hJiYocj1hLnRvU3RyaW5nKDE2KStyKTtyLmxlbmd0aCVlIT0wOylyPSIwIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9Ii0iK3IpLHJ9aWYodD09PSgwfHQpJiZ0Pj0yJiZ0PD0zNil7dmFyIGM9Zlt0XSxwPWhbdF07cj0iIjt2YXIgZD10aGlzLmNsb25lKCk7Zm9yKGQubmVnYXRpdmU9MDshZC5pc1plcm8oKTspe3ZhciBtPWQubW9kbihwKS50b1N0cmluZyh0KTtyPShkPWQuaWRpdm4ocCkpLmlzWmVybygpP20rcjp1W2MtbS5sZW5ndGhdK20rcn1mb3IodGhpcy5pc1plcm8oKSYmKHI9IjAiK3IpO3IubGVuZ3RoJWUhPTA7KXI9IjAiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj0iLSIrcikscn1uKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LGEucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3QrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT90Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbighMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXQ6dH0sYS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxhLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuKHZvaWQgMCE9PW8pLHRoaXMudG9BcnJheUxpa2Uobyx0LGUpfSxhLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksdCxlKX0sYS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuYnl0ZUxlbmd0aCgpLGE9cnx8TWF0aC5tYXgoMSxpKTtuKGk8PWEsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxuKGE+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBvLHMsbD0ibGUiPT09ZSxjPW5ldyB0KGEpLHU9dGhpcy5jbG9uZSgpO2lmKGwpe2ZvcihzPTA7IXUuaXNaZXJvKCk7cysrKW89dS5hbmRsbigyNTUpLHUuaXVzaHJuKDgpLGNbc109bztmb3IoO3M8YTtzKyspY1tzXT0wfWVsc2V7Zm9yKHM9MDtzPGEtaTtzKyspY1tzXT0wO2ZvcihzPTA7IXUuaXNaZXJvKCk7cysrKW89dS5hbmRsbigyNTUpLHUuaXVzaHJuKDgpLGNbYS1zLTFdPW99cmV0dXJuIGN9LE1hdGguY2x6MzI/YS5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXtyZXR1cm4gMzItTWF0aC5jbHozMih0KX06YS5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXt2YXIgZT10LHI9MDtyZXR1cm4gZT49NDA5NiYmKHIrPTEzLGU+Pj49MTMpLGU+PTY0JiYocis9NyxlPj4+PTcpLGU+PTgmJihyKz00LGU+Pj49NCksZT49MiYmKHIrPTIsZT4+Pj0yKSxyK2V9LGEucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbih0KXtpZigwPT09dClyZXR1cm4gMjY7dmFyIGU9dCxyPTA7cmV0dXJuIDA9PSg4MTkxJmUpJiYocis9MTMsZT4+Pj0xMyksMD09KDEyNyZlKSYmKHIrPTcsZT4+Pj03KSwwPT0oMTUmZSkmJihyKz00LGU+Pj49NCksMD09KDMmZSkmJihyKz0yLGU+Pj49MiksMD09KDEmZSkmJnIrKyxyfSxhLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdLGU9dGhpcy5fY291bnRCaXRzKHQpO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrZX0sYS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgdD0wLGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tlXSk7aWYodCs9ciwyNiE9PXIpYnJlYWt9cmV0dXJuIHR9LGEucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LGEucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bih0KS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LGEucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRlc3RuKHQtMSk/dGhpcy5ub3RuKHQpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LGEucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxhLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sYS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sYS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy53b3Jkc1tlXT10aGlzLndvcmRzW2VdfHQud29yZHNbZV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1b3IodCl9LGEucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHQpOnQuY2xvbmUoKS5pb3IodGhpcyl9LGEucHJvdG90eXBlLnVvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IodCk6dC5jbG9uZSgpLml1b3IodGhpcyl9LGEucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHQpe3ZhciBlO2U9dGhpcy5sZW5ndGg+dC5sZW5ndGg/dDp0aGlzO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ0LndvcmRzW3JdO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQodCl9LGEucHJvdG90eXBlLmFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQodCk6dC5jbG9uZSgpLmlhbmQodGhpcyl9LGEucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZCh0KTp0LmNsb25lKCkuaXVhbmQodGhpcyl9LGEucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5sZW5ndGg+dC5sZW5ndGg/KGU9dGhpcyxyPXQpOihlPXQscj10aGlzKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl1eci53b3Jkc1tuXTtpZih0aGlzIT09ZSlmb3IoO248ZS5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1eG9yKHQpfSxhLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHQpOnQuY2xvbmUoKS5peG9yKHRoaXMpfSxhLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IodCk6dC5jbG9uZSgpLml1eG9yKHRoaXMpfSxhLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9MHxNYXRoLmNlaWwodC8yNikscj10JTI2O3RoaXMuX2V4cGFuZChlKSxyPjAmJmUtLTtmb3IodmFyIGk9MDtpPGU7aSsrKXRoaXMud29yZHNbaV09NjcxMDg4NjMmfnRoaXMud29yZHNbaV07cmV0dXJuIHI+MCYmKHRoaXMud29yZHNbaV09fnRoaXMud29yZHNbaV0mNjcxMDg4NjM+PjI2LXIpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUubm90bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHQpfSxhLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHQsZSl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciByPXQvMjZ8MCxpPXQlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl09ZT90aGlzLndvcmRzW3JdfDE8PGk6dGhpcy53b3Jkc1tyXSZ+KDE8PGkpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0KXt2YXIgZSxyLG47aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gdC5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhyPXRoaXMsbj10KToocj10LG49dGhpcyk7Zm9yKHZhciBpPTAsYT0wO2E8bi5sZW5ndGg7YSsrKWU9KDB8ci53b3Jkc1thXSkrKDB8bi53b3Jkc1thXSkraSx0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmUsaT1lPj4+MjY7Zm9yKDswIT09aSYmYTxyLmxlbmd0aDthKyspZT0oMHxyLndvcmRzW2FdKStpLHRoaXMud29yZHNbYV09NjcxMDg4NjMmZSxpPWU+Pj4yNjtpZih0aGlzLmxlbmd0aD1yLmxlbmd0aCwwIT09aSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1pLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihyIT09dGhpcylmb3IoO2E8ci5sZW5ndGg7YSsrKXRoaXMud29yZHNbYV09ci53b3Jkc1thXTtyZXR1cm4gdGhpc30sYS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiAwIT09dC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHQubmVnYXRpdmU9MCxlPXRoaXMuc3ViKHQpLHQubmVnYXRpdmVePTEsZSk6MD09PXQubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsZT10LnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsZSk6dGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQodCk6dC5jbG9uZSgpLmlhZGQodGhpcyl9LGEucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCl7aWYoMCE9PXQubmVnYXRpdmUpe3QubmVnYXRpdmU9MDt2YXIgZT10aGlzLmlhZGQodCk7cmV0dXJuIHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciByLG4saT10aGlzLmNtcCh0KTtpZigwPT09aSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7aT4wPyhyPXRoaXMsbj10KToocj10LG49dGhpcyk7Zm9yKHZhciBhPTAsbz0wO288bi5sZW5ndGg7bysrKWE9KGU9KDB8ci53b3Jkc1tvXSktKDB8bi53b3Jkc1tvXSkrYSk+PjI2LHRoaXMud29yZHNbb109NjcxMDg4NjMmZTtmb3IoOzAhPT1hJiZvPHIubGVuZ3RoO28rKylhPShlPSgwfHIud29yZHNbb10pK2EpPj4yNix0aGlzLndvcmRzW29dPTY3MTA4ODYzJmU7aWYoMD09PWEmJm88ci5sZW5ndGgmJnIhPT10aGlzKWZvcig7bzxyLmxlbmd0aDtvKyspdGhpcy53b3Jkc1tvXT1yLndvcmRzW29dO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxvKSxyIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHQpfTt2YXIgZD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG89dC53b3JkcyxzPWUud29yZHMsbD1yLndvcmRzLGM9MCx1PTB8b1swXSxmPTgxOTEmdSxoPXU+Pj4xMyxwPTB8b1sxXSxkPTgxOTEmcCxtPXA+Pj4xMyxnPTB8b1syXSx2PTgxOTEmZyx5PWc+Pj4xMyx4PTB8b1szXSxiPTgxOTEmeCxfPXg+Pj4xMyx3PTB8b1s0XSxUPTgxOTEmdyxrPXc+Pj4xMyxBPTB8b1s1XSxNPTgxOTEmQSxTPUE+Pj4xMyxFPTB8b1s2XSxMPTgxOTEmRSxDPUU+Pj4xMyxQPTB8b1s3XSxJPTgxOTEmUCxPPVA+Pj4xMyx6PTB8b1s4XSxEPTgxOTEmeixSPXo+Pj4xMyxGPTB8b1s5XSxCPTgxOTEmRixOPUY+Pj4xMyxqPTB8c1swXSxVPTgxOTEmaixWPWo+Pj4xMyxIPTB8c1sxXSxxPTgxOTEmSCxHPUg+Pj4xMyxZPTB8c1syXSxXPTgxOTEmWSxYPVk+Pj4xMyxaPTB8c1szXSxKPTgxOTEmWixLPVo+Pj4xMyxRPTB8c1s0XSwkPTgxOTEmUSx0dD1RPj4+MTMsZXQ9MHxzWzVdLHJ0PTgxOTEmZXQsbnQ9ZXQ+Pj4xMyxpdD0wfHNbNl0sYXQ9ODE5MSZpdCxvdD1pdD4+PjEzLHN0PTB8c1s3XSxsdD04MTkxJnN0LGN0PXN0Pj4+MTMsdXQ9MHxzWzhdLGZ0PTgxOTEmdXQsaHQ9dXQ+Pj4xMyxwdD0wfHNbOV0sZHQ9ODE5MSZwdCxtdD1wdD4+PjEzO3IubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPTE5O3ZhciBndD0oYysobj1NYXRoLmltdWwoZixVKSl8MCkrKCg4MTkxJihpPShpPU1hdGguaW11bChmLFYpKStNYXRoLmltdWwoaCxVKXwwKSk8PDEzKXwwO2M9KChhPU1hdGguaW11bChoLFYpKSsoaT4+PjEzKXwwKSsoZ3Q+Pj4yNil8MCxndCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoZCxVKSxpPShpPU1hdGguaW11bChkLFYpKStNYXRoLmltdWwobSxVKXwwLGE9TWF0aC5pbXVsKG0sVik7dmFyIHZ0PShjKyhuPW4rTWF0aC5pbXVsKGYscSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGYsRyl8MCkrTWF0aC5pbXVsKGgscSl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLEcpfDApKyhpPj4+MTMpfDApKyh2dD4+PjI2KXwwLHZ0Jj02NzEwODg2MyxuPU1hdGguaW11bCh2LFUpLGk9KGk9TWF0aC5pbXVsKHYsVikpK01hdGguaW11bCh5LFUpfDAsYT1NYXRoLmltdWwoeSxWKSxuPW4rTWF0aC5pbXVsKGQscSl8MCxpPShpPWkrTWF0aC5pbXVsKGQsRyl8MCkrTWF0aC5pbXVsKG0scSl8MCxhPWErTWF0aC5pbXVsKG0sRyl8MDt2YXIgeXQ9KGMrKG49bitNYXRoLmltdWwoZixXKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZixYKXwwKStNYXRoLmltdWwoaCxXKXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGgsWCl8MCkrKGk+Pj4xMyl8MCkrKHl0Pj4+MjYpfDAseXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGIsVSksaT0oaT1NYXRoLmltdWwoYixWKSkrTWF0aC5pbXVsKF8sVSl8MCxhPU1hdGguaW11bChfLFYpLG49bitNYXRoLmltdWwodixxKXwwLGk9KGk9aStNYXRoLmltdWwodixHKXwwKStNYXRoLmltdWwoeSxxKXwwLGE9YStNYXRoLmltdWwoeSxHKXwwLG49bitNYXRoLmltdWwoZCxXKXwwLGk9KGk9aStNYXRoLmltdWwoZCxYKXwwKStNYXRoLmltdWwobSxXKXwwLGE9YStNYXRoLmltdWwobSxYKXwwO3ZhciB4dD0oYysobj1uK01hdGguaW11bChmLEopfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLEspfDApK01hdGguaW11bChoLEopfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoaCxLKXwwKSsoaT4+PjEzKXwwKSsoeHQ+Pj4yNil8MCx4dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVCxVKSxpPShpPU1hdGguaW11bChULFYpKStNYXRoLmltdWwoayxVKXwwLGE9TWF0aC5pbXVsKGssViksbj1uK01hdGguaW11bChiLHEpfDAsaT0oaT1pK01hdGguaW11bChiLEcpfDApK01hdGguaW11bChfLHEpfDAsYT1hK01hdGguaW11bChfLEcpfDAsbj1uK01hdGguaW11bCh2LFcpfDAsaT0oaT1pK01hdGguaW11bCh2LFgpfDApK01hdGguaW11bCh5LFcpfDAsYT1hK01hdGguaW11bCh5LFgpfDAsbj1uK01hdGguaW11bChkLEopfDAsaT0oaT1pK01hdGguaW11bChkLEspfDApK01hdGguaW11bChtLEopfDAsYT1hK01hdGguaW11bChtLEspfDA7dmFyIGJ0PShjKyhuPW4rTWF0aC5pbXVsKGYsJCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGYsdHQpfDApK01hdGguaW11bChoLCQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoaCx0dCl8MCkrKGk+Pj4xMyl8MCkrKGJ0Pj4+MjYpfDAsYnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKE0sVSksaT0oaT1NYXRoLmltdWwoTSxWKSkrTWF0aC5pbXVsKFMsVSl8MCxhPU1hdGguaW11bChTLFYpLG49bitNYXRoLmltdWwoVCxxKXwwLGk9KGk9aStNYXRoLmltdWwoVCxHKXwwKStNYXRoLmltdWwoayxxKXwwLGE9YStNYXRoLmltdWwoayxHKXwwLG49bitNYXRoLmltdWwoYixXKXwwLGk9KGk9aStNYXRoLmltdWwoYixYKXwwKStNYXRoLmltdWwoXyxXKXwwLGE9YStNYXRoLmltdWwoXyxYKXwwLG49bitNYXRoLmltdWwodixKKXwwLGk9KGk9aStNYXRoLmltdWwodixLKXwwKStNYXRoLmltdWwoeSxKKXwwLGE9YStNYXRoLmltdWwoeSxLKXwwLG49bitNYXRoLmltdWwoZCwkKXwwLGk9KGk9aStNYXRoLmltdWwoZCx0dCl8MCkrTWF0aC5pbXVsKG0sJCl8MCxhPWErTWF0aC5pbXVsKG0sdHQpfDA7dmFyIF90PShjKyhuPW4rTWF0aC5pbXVsKGYscnQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLG50KXwwKStNYXRoLmltdWwoaCxydCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLG50KXwwKSsoaT4+PjEzKXwwKSsoX3Q+Pj4yNil8MCxfdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoTCxVKSxpPShpPU1hdGguaW11bChMLFYpKStNYXRoLmltdWwoQyxVKXwwLGE9TWF0aC5pbXVsKEMsViksbj1uK01hdGguaW11bChNLHEpfDAsaT0oaT1pK01hdGguaW11bChNLEcpfDApK01hdGguaW11bChTLHEpfDAsYT1hK01hdGguaW11bChTLEcpfDAsbj1uK01hdGguaW11bChULFcpfDAsaT0oaT1pK01hdGguaW11bChULFgpfDApK01hdGguaW11bChrLFcpfDAsYT1hK01hdGguaW11bChrLFgpfDAsbj1uK01hdGguaW11bChiLEopfDAsaT0oaT1pK01hdGguaW11bChiLEspfDApK01hdGguaW11bChfLEopfDAsYT1hK01hdGguaW11bChfLEspfDAsbj1uK01hdGguaW11bCh2LCQpfDAsaT0oaT1pK01hdGguaW11bCh2LHR0KXwwKStNYXRoLmltdWwoeSwkKXwwLGE9YStNYXRoLmltdWwoeSx0dCl8MCxuPW4rTWF0aC5pbXVsKGQscnQpfDAsaT0oaT1pK01hdGguaW11bChkLG50KXwwKStNYXRoLmltdWwobSxydCl8MCxhPWErTWF0aC5pbXVsKG0sbnQpfDA7dmFyIHd0PShjKyhuPW4rTWF0aC5pbXVsKGYsYXQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLG90KXwwKStNYXRoLmltdWwoaCxhdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLG90KXwwKSsoaT4+PjEzKXwwKSsod3Q+Pj4yNil8MCx3dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoSSxVKSxpPShpPU1hdGguaW11bChJLFYpKStNYXRoLmltdWwoTyxVKXwwLGE9TWF0aC5pbXVsKE8sViksbj1uK01hdGguaW11bChMLHEpfDAsaT0oaT1pK01hdGguaW11bChMLEcpfDApK01hdGguaW11bChDLHEpfDAsYT1hK01hdGguaW11bChDLEcpfDAsbj1uK01hdGguaW11bChNLFcpfDAsaT0oaT1pK01hdGguaW11bChNLFgpfDApK01hdGguaW11bChTLFcpfDAsYT1hK01hdGguaW11bChTLFgpfDAsbj1uK01hdGguaW11bChULEopfDAsaT0oaT1pK01hdGguaW11bChULEspfDApK01hdGguaW11bChrLEopfDAsYT1hK01hdGguaW11bChrLEspfDAsbj1uK01hdGguaW11bChiLCQpfDAsaT0oaT1pK01hdGguaW11bChiLHR0KXwwKStNYXRoLmltdWwoXywkKXwwLGE9YStNYXRoLmltdWwoXyx0dCl8MCxuPW4rTWF0aC5pbXVsKHYscnQpfDAsaT0oaT1pK01hdGguaW11bCh2LG50KXwwKStNYXRoLmltdWwoeSxydCl8MCxhPWErTWF0aC5pbXVsKHksbnQpfDAsbj1uK01hdGguaW11bChkLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxvdCl8MCkrTWF0aC5pbXVsKG0sYXQpfDAsYT1hK01hdGguaW11bChtLG90KXwwO3ZhciBUdD0oYysobj1uK01hdGguaW11bChmLGx0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZixjdCl8MCkrTWF0aC5pbXVsKGgsbHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoaCxjdCl8MCkrKGk+Pj4xMyl8MCkrKFR0Pj4+MjYpfDAsVHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEQsVSksaT0oaT1NYXRoLmltdWwoRCxWKSkrTWF0aC5pbXVsKFIsVSl8MCxhPU1hdGguaW11bChSLFYpLG49bitNYXRoLmltdWwoSSxxKXwwLGk9KGk9aStNYXRoLmltdWwoSSxHKXwwKStNYXRoLmltdWwoTyxxKXwwLGE9YStNYXRoLmltdWwoTyxHKXwwLG49bitNYXRoLmltdWwoTCxXKXwwLGk9KGk9aStNYXRoLmltdWwoTCxYKXwwKStNYXRoLmltdWwoQyxXKXwwLGE9YStNYXRoLmltdWwoQyxYKXwwLG49bitNYXRoLmltdWwoTSxKKXwwLGk9KGk9aStNYXRoLmltdWwoTSxLKXwwKStNYXRoLmltdWwoUyxKKXwwLGE9YStNYXRoLmltdWwoUyxLKXwwLG49bitNYXRoLmltdWwoVCwkKXwwLGk9KGk9aStNYXRoLmltdWwoVCx0dCl8MCkrTWF0aC5pbXVsKGssJCl8MCxhPWErTWF0aC5pbXVsKGssdHQpfDAsbj1uK01hdGguaW11bChiLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoYixudCl8MCkrTWF0aC5pbXVsKF8scnQpfDAsYT1hK01hdGguaW11bChfLG50KXwwLG49bitNYXRoLmltdWwodixhdCl8MCxpPShpPWkrTWF0aC5pbXVsKHYsb3QpfDApK01hdGguaW11bCh5LGF0KXwwLGE9YStNYXRoLmltdWwoeSxvdCl8MCxuPW4rTWF0aC5pbXVsKGQsbHQpfDAsaT0oaT1pK01hdGguaW11bChkLGN0KXwwKStNYXRoLmltdWwobSxsdCl8MCxhPWErTWF0aC5pbXVsKG0sY3QpfDA7dmFyIGt0PShjKyhuPW4rTWF0aC5pbXVsKGYsZnQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLGh0KXwwKStNYXRoLmltdWwoaCxmdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLGh0KXwwKSsoaT4+PjEzKXwwKSsoa3Q+Pj4yNil8MCxrdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixVKSxpPShpPU1hdGguaW11bChCLFYpKStNYXRoLmltdWwoTixVKXwwLGE9TWF0aC5pbXVsKE4sViksbj1uK01hdGguaW11bChELHEpfDAsaT0oaT1pK01hdGguaW11bChELEcpfDApK01hdGguaW11bChSLHEpfDAsYT1hK01hdGguaW11bChSLEcpfDAsbj1uK01hdGguaW11bChJLFcpfDAsaT0oaT1pK01hdGguaW11bChJLFgpfDApK01hdGguaW11bChPLFcpfDAsYT1hK01hdGguaW11bChPLFgpfDAsbj1uK01hdGguaW11bChMLEopfDAsaT0oaT1pK01hdGguaW11bChMLEspfDApK01hdGguaW11bChDLEopfDAsYT1hK01hdGguaW11bChDLEspfDAsbj1uK01hdGguaW11bChNLCQpfDAsaT0oaT1pK01hdGguaW11bChNLHR0KXwwKStNYXRoLmltdWwoUywkKXwwLGE9YStNYXRoLmltdWwoUyx0dCl8MCxuPW4rTWF0aC5pbXVsKFQscnQpfDAsaT0oaT1pK01hdGguaW11bChULG50KXwwKStNYXRoLmltdWwoayxydCl8MCxhPWErTWF0aC5pbXVsKGssbnQpfDAsbj1uK01hdGguaW11bChiLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoYixvdCl8MCkrTWF0aC5pbXVsKF8sYXQpfDAsYT1hK01hdGguaW11bChfLG90KXwwLG49bitNYXRoLmltdWwodixsdCl8MCxpPShpPWkrTWF0aC5pbXVsKHYsY3QpfDApK01hdGguaW11bCh5LGx0KXwwLGE9YStNYXRoLmltdWwoeSxjdCl8MCxuPW4rTWF0aC5pbXVsKGQsZnQpfDAsaT0oaT1pK01hdGguaW11bChkLGh0KXwwKStNYXRoLmltdWwobSxmdCl8MCxhPWErTWF0aC5pbXVsKG0saHQpfDA7dmFyIEF0PShjKyhuPW4rTWF0aC5pbXVsKGYsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLG10KXwwKStNYXRoLmltdWwoaCxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLG10KXwwKSsoaT4+PjEzKXwwKSsoQXQ+Pj4yNil8MCxBdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixxKSxpPShpPU1hdGguaW11bChCLEcpKStNYXRoLmltdWwoTixxKXwwLGE9TWF0aC5pbXVsKE4sRyksbj1uK01hdGguaW11bChELFcpfDAsaT0oaT1pK01hdGguaW11bChELFgpfDApK01hdGguaW11bChSLFcpfDAsYT1hK01hdGguaW11bChSLFgpfDAsbj1uK01hdGguaW11bChJLEopfDAsaT0oaT1pK01hdGguaW11bChJLEspfDApK01hdGguaW11bChPLEopfDAsYT1hK01hdGguaW11bChPLEspfDAsbj1uK01hdGguaW11bChMLCQpfDAsaT0oaT1pK01hdGguaW11bChMLHR0KXwwKStNYXRoLmltdWwoQywkKXwwLGE9YStNYXRoLmltdWwoQyx0dCl8MCxuPW4rTWF0aC5pbXVsKE0scnQpfDAsaT0oaT1pK01hdGguaW11bChNLG50KXwwKStNYXRoLmltdWwoUyxydCl8MCxhPWErTWF0aC5pbXVsKFMsbnQpfDAsbj1uK01hdGguaW11bChULGF0KXwwLGk9KGk9aStNYXRoLmltdWwoVCxvdCl8MCkrTWF0aC5pbXVsKGssYXQpfDAsYT1hK01hdGguaW11bChrLG90KXwwLG49bitNYXRoLmltdWwoYixsdCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsY3QpfDApK01hdGguaW11bChfLGx0KXwwLGE9YStNYXRoLmltdWwoXyxjdCl8MCxuPW4rTWF0aC5pbXVsKHYsZnQpfDAsaT0oaT1pK01hdGguaW11bCh2LGh0KXwwKStNYXRoLmltdWwoeSxmdCl8MCxhPWErTWF0aC5pbXVsKHksaHQpfDA7dmFyIE10PShjKyhuPW4rTWF0aC5pbXVsKGQsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChkLG10KXwwKStNYXRoLmltdWwobSxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChtLG10KXwwKSsoaT4+PjEzKXwwKSsoTXQ+Pj4yNil8MCxNdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixXKSxpPShpPU1hdGguaW11bChCLFgpKStNYXRoLmltdWwoTixXKXwwLGE9TWF0aC5pbXVsKE4sWCksbj1uK01hdGguaW11bChELEopfDAsaT0oaT1pK01hdGguaW11bChELEspfDApK01hdGguaW11bChSLEopfDAsYT1hK01hdGguaW11bChSLEspfDAsbj1uK01hdGguaW11bChJLCQpfDAsaT0oaT1pK01hdGguaW11bChJLHR0KXwwKStNYXRoLmltdWwoTywkKXwwLGE9YStNYXRoLmltdWwoTyx0dCl8MCxuPW4rTWF0aC5pbXVsKEwscnQpfDAsaT0oaT1pK01hdGguaW11bChMLG50KXwwKStNYXRoLmltdWwoQyxydCl8MCxhPWErTWF0aC5pbXVsKEMsbnQpfDAsbj1uK01hdGguaW11bChNLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoTSxvdCl8MCkrTWF0aC5pbXVsKFMsYXQpfDAsYT1hK01hdGguaW11bChTLG90KXwwLG49bitNYXRoLmltdWwoVCxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKFQsY3QpfDApK01hdGguaW11bChrLGx0KXwwLGE9YStNYXRoLmltdWwoayxjdCl8MCxuPW4rTWF0aC5pbXVsKGIsZnQpfDAsaT0oaT1pK01hdGguaW11bChiLGh0KXwwKStNYXRoLmltdWwoXyxmdCl8MCxhPWErTWF0aC5pbXVsKF8saHQpfDA7dmFyIFN0PShjKyhuPW4rTWF0aC5pbXVsKHYsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bCh2LG10KXwwKStNYXRoLmltdWwoeSxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bCh5LG10KXwwKSsoaT4+PjEzKXwwKSsoU3Q+Pj4yNil8MCxTdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixKKSxpPShpPU1hdGguaW11bChCLEspKStNYXRoLmltdWwoTixKKXwwLGE9TWF0aC5pbXVsKE4sSyksbj1uK01hdGguaW11bChELCQpfDAsaT0oaT1pK01hdGguaW11bChELHR0KXwwKStNYXRoLmltdWwoUiwkKXwwLGE9YStNYXRoLmltdWwoUix0dCl8MCxuPW4rTWF0aC5pbXVsKEkscnQpfDAsaT0oaT1pK01hdGguaW11bChJLG50KXwwKStNYXRoLmltdWwoTyxydCl8MCxhPWErTWF0aC5pbXVsKE8sbnQpfDAsbj1uK01hdGguaW11bChMLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoTCxvdCl8MCkrTWF0aC5pbXVsKEMsYXQpfDAsYT1hK01hdGguaW11bChDLG90KXwwLG49bitNYXRoLmltdWwoTSxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKE0sY3QpfDApK01hdGguaW11bChTLGx0KXwwLGE9YStNYXRoLmltdWwoUyxjdCl8MCxuPW4rTWF0aC5pbXVsKFQsZnQpfDAsaT0oaT1pK01hdGguaW11bChULGh0KXwwKStNYXRoLmltdWwoayxmdCl8MCxhPWErTWF0aC5pbXVsKGssaHQpfDA7dmFyIEV0PShjKyhuPW4rTWF0aC5pbXVsKGIsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChiLG10KXwwKStNYXRoLmltdWwoXyxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChfLG10KXwwKSsoaT4+PjEzKXwwKSsoRXQ+Pj4yNil8MCxFdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQiwkKSxpPShpPU1hdGguaW11bChCLHR0KSkrTWF0aC5pbXVsKE4sJCl8MCxhPU1hdGguaW11bChOLHR0KSxuPW4rTWF0aC5pbXVsKEQscnQpfDAsaT0oaT1pK01hdGguaW11bChELG50KXwwKStNYXRoLmltdWwoUixydCl8MCxhPWErTWF0aC5pbXVsKFIsbnQpfDAsbj1uK01hdGguaW11bChJLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoSSxvdCl8MCkrTWF0aC5pbXVsKE8sYXQpfDAsYT1hK01hdGguaW11bChPLG90KXwwLG49bitNYXRoLmltdWwoTCxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKEwsY3QpfDApK01hdGguaW11bChDLGx0KXwwLGE9YStNYXRoLmltdWwoQyxjdCl8MCxuPW4rTWF0aC5pbXVsKE0sZnQpfDAsaT0oaT1pK01hdGguaW11bChNLGh0KXwwKStNYXRoLmltdWwoUyxmdCl8MCxhPWErTWF0aC5pbXVsKFMsaHQpfDA7dmFyIEx0PShjKyhuPW4rTWF0aC5pbXVsKFQsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChULG10KXwwKStNYXRoLmltdWwoayxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChrLG10KXwwKSsoaT4+PjEzKXwwKSsoTHQ+Pj4yNil8MCxMdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixydCksaT0oaT1NYXRoLmltdWwoQixudCkpK01hdGguaW11bChOLHJ0KXwwLGE9TWF0aC5pbXVsKE4sbnQpLG49bitNYXRoLmltdWwoRCxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKEQsb3QpfDApK01hdGguaW11bChSLGF0KXwwLGE9YStNYXRoLmltdWwoUixvdCl8MCxuPW4rTWF0aC5pbXVsKEksbHQpfDAsaT0oaT1pK01hdGguaW11bChJLGN0KXwwKStNYXRoLmltdWwoTyxsdCl8MCxhPWErTWF0aC5pbXVsKE8sY3QpfDAsbj1uK01hdGguaW11bChMLGZ0KXwwLGk9KGk9aStNYXRoLmltdWwoTCxodCl8MCkrTWF0aC5pbXVsKEMsZnQpfDAsYT1hK01hdGguaW11bChDLGh0KXwwO3ZhciBDdD0oYysobj1uK01hdGguaW11bChNLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoTSxtdCl8MCkrTWF0aC5pbXVsKFMsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoUyxtdCl8MCkrKGk+Pj4xMyl8MCkrKEN0Pj4+MjYpfDAsQ3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsYXQpLGk9KGk9TWF0aC5pbXVsKEIsb3QpKStNYXRoLmltdWwoTixhdCl8MCxhPU1hdGguaW11bChOLG90KSxuPW4rTWF0aC5pbXVsKEQsbHQpfDAsaT0oaT1pK01hdGguaW11bChELGN0KXwwKStNYXRoLmltdWwoUixsdCl8MCxhPWErTWF0aC5pbXVsKFIsY3QpfDAsbj1uK01hdGguaW11bChJLGZ0KXwwLGk9KGk9aStNYXRoLmltdWwoSSxodCl8MCkrTWF0aC5pbXVsKE8sZnQpfDAsYT1hK01hdGguaW11bChPLGh0KXwwO3ZhciBQdD0oYysobj1uK01hdGguaW11bChMLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoTCxtdCl8MCkrTWF0aC5pbXVsKEMsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoQyxtdCl8MCkrKGk+Pj4xMyl8MCkrKFB0Pj4+MjYpfDAsUHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsbHQpLGk9KGk9TWF0aC5pbXVsKEIsY3QpKStNYXRoLmltdWwoTixsdCl8MCxhPU1hdGguaW11bChOLGN0KSxuPW4rTWF0aC5pbXVsKEQsZnQpfDAsaT0oaT1pK01hdGguaW11bChELGh0KXwwKStNYXRoLmltdWwoUixmdCl8MCxhPWErTWF0aC5pbXVsKFIsaHQpfDA7dmFyIEl0PShjKyhuPW4rTWF0aC5pbXVsKEksZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChJLG10KXwwKStNYXRoLmltdWwoTyxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChPLG10KXwwKSsoaT4+PjEzKXwwKSsoSXQ+Pj4yNil8MCxJdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixmdCksaT0oaT1NYXRoLmltdWwoQixodCkpK01hdGguaW11bChOLGZ0KXwwLGE9TWF0aC5pbXVsKE4saHQpO3ZhciBPdD0oYysobj1uK01hdGguaW11bChELGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoRCxtdCl8MCkrTWF0aC5pbXVsKFIsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoUixtdCl8MCkrKGk+Pj4xMyl8MCkrKE90Pj4+MjYpfDAsT3QmPTY3MTA4ODYzO3ZhciB6dD0oYysobj1NYXRoLmltdWwoQixkdCkpfDApKygoODE5MSYoaT0oaT1NYXRoLmltdWwoQixtdCkpK01hdGguaW11bChOLGR0KXwwKSk8PDEzKXwwO3JldHVybiBjPSgoYT1NYXRoLmltdWwoTixtdCkpKyhpPj4+MTMpfDApKyh6dD4+PjI2KXwwLHp0Jj02NzEwODg2MyxsWzBdPWd0LGxbMV09dnQsbFsyXT15dCxsWzNdPXh0LGxbNF09YnQsbFs1XT1fdCxsWzZdPXd0LGxbN109VHQsbFs4XT1rdCxsWzldPUF0LGxbMTBdPU10LGxbMTFdPVN0LGxbMTJdPUV0LGxbMTNdPUx0LGxbMTRdPUN0LGxbMTVdPVB0LGxbMTZdPUl0LGxbMTddPU90LGxbMThdPXp0LDAhPT1jJiYobFsxOV09YyxyLmxlbmd0aCsrKSxyfTtmdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4obmV3IGcpLm11bHAodCxlLHIpfWZ1bmN0aW9uIGcodCxlKXt0aGlzLng9dCx0aGlzLnk9ZX1NYXRoLmltdWx8fChkPXApLGEucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGgrdC5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09dC5sZW5ndGg/ZCh0aGlzLHQsZSk6cjw2Mz9wKHRoaXMsdCxlKTpyPDEwMjQ/ZnVuY3Rpb24odCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoO2Zvcih2YXIgbj0wLGk9MCxhPTA7YTxyLmxlbmd0aC0xO2ErKyl7dmFyIG89aTtpPTA7Zm9yKHZhciBzPTY3MTA4ODYzJm4sbD1NYXRoLm1pbihhLGUubGVuZ3RoLTEpLGM9TWF0aC5tYXgoMCxhLXQubGVuZ3RoKzEpO2M8PWw7YysrKXt2YXIgdT1hLWMsZj0oMHx0LndvcmRzW3VdKSooMHxlLndvcmRzW2NdKSxoPTY3MTA4ODYzJmY7cz02NzEwODg2MyYoaD1oK3N8MCksaSs9KG89KG89bysoZi82NzEwODg2NHwwKXwwKSsoaD4+PjI2KXwwKT4+PjI2LG8mPTY3MTA4ODYzfXIud29yZHNbYV09cyxuPW8sbz1pfXJldHVybiAwIT09bj9yLndvcmRzW2FdPW46ci5sZW5ndGgtLSxyLnN0cmlwKCl9KHRoaXMsdCxlKTptKHRoaXMsdCxlKX0sZy5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9YS5wcm90b3R5cGUuX2NvdW50Qml0cyh0KS0xLG49MDtuPHQ7bisrKWVbbl09dGhpcy5yZXZCaW4obixyLHQpO3JldHVybiBlfSxnLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24odCxlLHIpe2lmKDA9PT10fHx0PT09ci0xKXJldHVybiB0O2Zvcih2YXIgbj0wLGk9MDtpPGU7aSsrKW58PSgxJnQpPDxlLWktMSx0Pj49MTtyZXR1cm4gbn0sZy5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzxhO28rKyluW29dPWVbdFtvXV0saVtvXT1yW3Rbb11dfSxnLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMucGVybXV0ZShhLHQsZSxyLG4saSk7Zm9yKHZhciBvPTE7bzxpO288PD0xKWZvcih2YXIgcz1vPDwxLGw9TWF0aC5jb3MoMipNYXRoLlBJL3MpLGM9TWF0aC5zaW4oMipNYXRoLlBJL3MpLHU9MDt1PGk7dSs9cylmb3IodmFyIGY9bCxoPWMscD0wO3A8bztwKyspe3ZhciBkPXJbdStwXSxtPW5bdStwXSxnPXJbdStwK29dLHY9blt1K3Arb10seT1mKmctaCp2O3Y9Zip2K2gqZyxnPXksclt1K3BdPWQrZyxuW3UrcF09bSt2LHJbdStwK29dPWQtZyxuW3UrcCtvXT1tLXYscCE9PXMmJih5PWwqZi1jKmgsaD1sKmgrYypmLGY9eSl9fSxnLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbih0LGUpe3ZhciByPTF8TWF0aC5tYXgoZSx0KSxuPTEmcixpPTA7Zm9yKHI9ci8yfDA7cjtyPj4+PTEpaSsrO3JldHVybiAxPDxpKzErbn0sZy5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZighKHI8PTEpKWZvcih2YXIgbj0wO248ci8yO24rKyl7dmFyIGk9dFtuXTt0W25dPXRbci1uLTFdLHRbci1uLTFdPWksaT1lW25dLGVbbl09LWVbci1uLTFdLGVbci1uLTFdPS1pfX0sZy5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wO248ZS8yO24rKyl7dmFyIGk9ODE5MipNYXRoLnJvdW5kKHRbMipuKzFdL2UpK01hdGgucm91bmQodFsyKm5dL2UpK3I7dFtuXT02NzEwODg2MyZpLHI9aTw2NzEwODg2ND8wOmkvNjcxMDg4NjR8MH1yZXR1cm4gdH0sZy5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbih0LGUscixpKXtmb3IodmFyIGE9MCxvPTA7bzxlO28rKylhKz0wfHRbb10sclsyKm9dPTgxOTEmYSxhPj4+PTEzLHJbMipvKzFdPTgxOTEmYSxhPj4+PTEzO2ZvcihvPTIqZTtvPGk7KytvKXJbb109MDtuKDA9PT1hKSxuKDA9PSgtODE5MiZhKSl9LGcucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPTA7cmV0dXJuIGV9LGcucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdGhpcy5ndWVzc0xlbjEzYih0Lmxlbmd0aCxlLmxlbmd0aCksaT10aGlzLm1ha2VSQlQobiksYT10aGlzLnN0dWIobiksbz1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksbD1uZXcgQXJyYXkobiksYz1uZXcgQXJyYXkobiksdT1uZXcgQXJyYXkobiksZj1uZXcgQXJyYXkobiksaD1yLndvcmRzO2gubGVuZ3RoPW4sdGhpcy5jb252ZXJ0MTNiKHQud29yZHMsdC5sZW5ndGgsbyxuKSx0aGlzLmNvbnZlcnQxM2IoZS53b3JkcyxlLmxlbmd0aCxjLG4pLHRoaXMudHJhbnNmb3JtKG8sYSxzLGwsbixpKSx0aGlzLnRyYW5zZm9ybShjLGEsdSxmLG4saSk7Zm9yKHZhciBwPTA7cDxuO3ArKyl7dmFyIGQ9c1twXSp1W3BdLWxbcF0qZltwXTtsW3BdPXNbcF0qZltwXStsW3BdKnVbcF0sc1twXT1kfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShzLGwsbiksdGhpcy50cmFuc2Zvcm0ocyxsLGgsYSxuLGkpLHRoaXMuY29uanVnYXRlKGgsYSxuKSx0aGlzLm5vcm1hbGl6ZTEzYihoLG4pLHIubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoLHIuc3RyaXAoKX0sYS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBhKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksdGhpcy5tdWxUbyh0LGUpfSxhLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBhKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksbSh0aGlzLHQsZSl9LGEucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyh0LHRoaXMpfSxhLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KTtmb3IodmFyIGU9MCxyPTA7cjx0aGlzLmxlbmd0aDtyKyspe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKnQsYT0oNjcxMDg4NjMmaSkrKDY3MTA4ODYzJmUpO2U+Pj0yNixlKz1pLzY3MTA4ODY0fDAsZSs9YT4+PjI2LHRoaXMud29yZHNbcl09NjcxMDg4NjMmYX1yZXR1cm4gMCE9PWUmJih0aGlzLndvcmRzW3JdPWUsdGhpcy5sZW5ndGgrKyksdGhpc30sYS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHQpfSxhLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LGEucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LGEucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQuYml0TGVuZ3RoKCkpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ci8yNnwwLGk9ciUyNjtlW3JdPSh0LndvcmRzW25dJjE8PGkpPj4+aX1yZXR1cm4gZX0odCk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBuZXcgYSgxKTtmb3IodmFyIHI9dGhpcyxuPTA7bjxlLmxlbmd0aCYmMD09PWVbbl07bisrLHI9ci5zcXIoKSk7aWYoKytuPGUubGVuZ3RoKWZvcih2YXIgaT1yLnNxcigpO248ZS5sZW5ndGg7bisrLGk9aS5zcXIoKSkwIT09ZVtuXSYmKHI9ci5tdWwoaSkpO3JldHVybiByfSxhLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlLHI9dCUyNixpPSh0LXIpLzI2LGE9NjcxMDg4NjM+Pj4yNi1yPDwyNi1yO2lmKDAhPT1yKXt2YXIgbz0wO2ZvcihlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciBzPXRoaXMud29yZHNbZV0mYSxsPSgwfHRoaXMud29yZHNbZV0pLXM8PHI7dGhpcy53b3Jkc1tlXT1sfG8sbz1zPj4+MjYtcn1vJiYodGhpcy53b3Jkc1tlXT1vLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1pKXtmb3IoZT10aGlzLmxlbmd0aC0xO2U+PTA7ZS0tKXRoaXMud29yZHNbZStpXT10aGlzLndvcmRzW2VdO2ZvcihlPTA7ZTxpO2UrKyl0aGlzLndvcmRzW2VdPTA7dGhpcy5sZW5ndGgrPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHQpfSxhLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24odCxlLHIpe3ZhciBpO24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKSxpPWU/KGUtZSUyNikvMjY6MDt2YXIgYT10JTI2LG89TWF0aC5taW4oKHQtYSkvMjYsdGhpcy5sZW5ndGgpLHM9NjcxMDg4NjNeNjcxMDg4NjM+Pj5hPDxhLGw9cjtpZihpLT1vLGk9TWF0aC5tYXgoMCxpKSxsKXtmb3IodmFyIGM9MDtjPG87YysrKWwud29yZHNbY109dGhpcy53b3Jkc1tjXTtsLmxlbmd0aD1vfWlmKDA9PT1vKTtlbHNlIGlmKHRoaXMubGVuZ3RoPm8pZm9yKHRoaXMubGVuZ3RoLT1vLGM9MDtjPHRoaXMubGVuZ3RoO2MrKyl0aGlzLndvcmRzW2NdPXRoaXMud29yZHNbYytvXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciB1PTA7Zm9yKGM9dGhpcy5sZW5ndGgtMTtjPj0wJiYoMCE9PXV8fGM+PWkpO2MtLSl7dmFyIGY9MHx0aGlzLndvcmRzW2NdO3RoaXMud29yZHNbY109dTw8MjYtYXxmPj4+YSx1PWYmc31yZXR1cm4gbCYmMCE9PXUmJihsLndvcmRzW2wubGVuZ3RoKytdPXUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4odCxlLHIpfSxhLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4odCl9LGEucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHQpfSxhLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4odCl9LGEucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHQpfSxhLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtyZXR1cm4hKHRoaXMubGVuZ3RoPD1yKSYmISEodGhpcy53b3Jkc1tyXSZpKX0sYS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjY7aWYobigwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXM7aWYoMCE9PWUmJnIrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihyLHRoaXMubGVuZ3RoKSwwIT09ZSl7dmFyIGk9NjcxMDg4NjNeNjcxMDg4NjM+Pj5lPDxlO3RoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24odCl9LGEucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHQpe3JldHVybiBuKCJudW1iZXIiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDA/dGhpcy5pc3VibigtdCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTx0Pyh0aGlzLndvcmRzWzBdPXQtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3Vibih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4odCl9LGEucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbih0KXt0aGlzLndvcmRzWzBdKz10O2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV0+PTY3MTA4ODY0O2UrKyl0aGlzLndvcmRzW2VdLT02NzEwODg2NCxlPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2UrMV09MTp0aGlzLndvcmRzW2UrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsZSsxKSx0aGlzfSxhLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbih0KXtpZihuKCJudW1iZXIiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDApcmV0dXJuIHRoaXMuaWFkZG4oLXQpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT10LDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXTwwO2UrKyl0aGlzLndvcmRzW2VdKz02NzEwODg2NCx0aGlzLndvcmRzW2UrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHQpfSxhLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4odCl9LGEucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LGEucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxhLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbz10Lmxlbmd0aCtyO3RoaXMuX2V4cGFuZChvKTt2YXIgcz0wO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2E9KDB8dGhpcy53b3Jkc1tpK3JdKStzO3ZhciBsPSgwfHQud29yZHNbaV0pKmU7cz0oKGEtPTY3MTA4ODYzJmwpPj4yNiktKGwvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmF9Zm9yKDtpPHRoaXMubGVuZ3RoLXI7aSsrKXM9KGE9KDB8dGhpcy53b3Jkc1tpK3JdKStzKT4+MjYsdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmE7aWYoMD09PXMpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobigtMT09PXMpLHM9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspcz0oYT0tKDB8dGhpcy53b3Jkc1tpXSkrcyk+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmYTtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24odCxlKXt2YXIgcj0odGhpcy5sZW5ndGgsdC5sZW5ndGgpLG49dGhpcy5jbG9uZSgpLGk9dCxvPTB8aS53b3Jkc1tpLmxlbmd0aC0xXTswIT09KHI9MjYtdGhpcy5fY291bnRCaXRzKG8pKSYmKGk9aS51c2hsbihyKSxuLml1c2hsbihyKSxvPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSk7dmFyIHMsbD1uLmxlbmd0aC1pLmxlbmd0aDtpZigibW9kIiE9PWUpeyhzPW5ldyBhKG51bGwpKS5sZW5ndGg9bCsxLHMud29yZHM9bmV3IEFycmF5KHMubGVuZ3RoKTtmb3IodmFyIGM9MDtjPHMubGVuZ3RoO2MrKylzLndvcmRzW2NdPTB9dmFyIHU9bi5jbG9uZSgpLl9pc2hsbnN1Ym11bChpLDEsbCk7MD09PXUubmVnYXRpdmUmJihuPXUscyYmKHMud29yZHNbbF09MSkpO2Zvcih2YXIgZj1sLTE7Zj49MDtmLS0pe3ZhciBoPTY3MTA4ODY0KigwfG4ud29yZHNbaS5sZW5ndGgrZl0pKygwfG4ud29yZHNbaS5sZW5ndGgrZi0xXSk7Zm9yKGg9TWF0aC5taW4oaC9vfDAsNjcxMDg4NjMpLG4uX2lzaGxuc3VibXVsKGksaCxmKTswIT09bi5uZWdhdGl2ZTspaC0tLG4ubmVnYXRpdmU9MCxuLl9pc2hsbnN1Ym11bChpLDEsZiksbi5pc1plcm8oKXx8KG4ubmVnYXRpdmVePTEpO3MmJihzLndvcmRzW2ZdPWgpfXJldHVybiBzJiZzLnN0cmlwKCksbi5zdHJpcCgpLCJkaXYiIT09ZSYmMCE9PXImJm4uaXVzaHJuKHIpLHtkaXY6c3x8bnVsbCxtb2Q6bn19LGEucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4oIXQuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgYSgwKSxtb2Q6bmV3IGEoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZT8ocz10aGlzLm5lZygpLmRpdm1vZCh0LGUpLCJtb2QiIT09ZSYmKGk9cy5kaXYubmVnKCkpLCJkaXYiIT09ZSYmKG89cy5tb2QubmVnKCksciYmMCE9PW8ubmVnYXRpdmUmJm8uaWFkZCh0KSkse2RpdjppLG1vZDpvfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlPyhzPXRoaXMuZGl2bW9kKHQubmVnKCksZSksIm1vZCIhPT1lJiYoaT1zLmRpdi5uZWcoKSkse2RpdjppLG1vZDpzLm1vZH0pOjAhPSh0aGlzLm5lZ2F0aXZlJnQubmVnYXRpdmUpPyhzPXRoaXMubmVnKCkuZGl2bW9kKHQubmVnKCksZSksImRpdiIhPT1lJiYobz1zLm1vZC5uZWcoKSxyJiYwIT09by5uZWdhdGl2ZSYmby5pc3ViKHQpKSx7ZGl2OnMuZGl2LG1vZDpvfSk6dC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHQpPDA/e2RpdjpuZXcgYSgwKSxtb2Q6dGhpc306MT09PXQubGVuZ3RoPyJkaXYiPT09ZT97ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1lP3tkaXY6bnVsbCxtb2Q6bmV3IGEodGhpcy5tb2RuKHQud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm5ldyBhKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYodCxlKTt2YXIgaSxvLHN9LGEucHJvdG90eXBlLmRpdj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCwiZGl2IiwhMSkuZGl2fSxhLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsIm1vZCIsITEpLm1vZH0sYS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCwibW9kIiwhMCkubW9kfSxhLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRpdm1vZCh0KTtpZihlLm1vZC5pc1plcm8oKSlyZXR1cm4gZS5kaXY7dmFyIHI9MCE9PWUuZGl2Lm5lZ2F0aXZlP2UubW9kLmlzdWIodCk6ZS5tb2Qsbj10LnVzaHJuKDEpLGk9dC5hbmRsbigxKSxhPXIuY21wKG4pO3JldHVybiBhPDB8fDE9PT1pJiYwPT09YT9lLmRpdjowIT09ZS5kaXYubmVnYXRpdmU/ZS5kaXYuaXN1Ym4oMSk6ZS5kaXYuaWFkZG4oMSl9LGEucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPSgxPDwyNikldCxyPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXI9KGUqcisoMHx0aGlzLndvcmRzW2ldKSkldDtyZXR1cm4gcn0sYS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSs2NzEwODg2NCplO3RoaXMud29yZHNbcl09aS90fDAsZT1pJXR9cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHQpfSxhLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaT1uZXcgYSgxKSxvPW5ldyBhKDApLHM9bmV3IGEoMCksbD1uZXcgYSgxKSxjPTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTspZS5pdXNocm4oMSksci5pdXNocm4oMSksKytjO2Zvcih2YXIgdT1yLmNsb25lKCksZj1lLmNsb25lKCk7IWUuaXNaZXJvKCk7KXtmb3IodmFyIGg9MCxwPTE7MD09KGUud29yZHNbMF0mcCkmJmg8MjY7KytoLHA8PD0xKTtpZihoPjApZm9yKGUuaXVzaHJuKGgpO2gtLSA+MDspKGkuaXNPZGQoKXx8by5pc09kZCgpKSYmKGkuaWFkZCh1KSxvLmlzdWIoZikpLGkuaXVzaHJuKDEpLG8uaXVzaHJuKDEpO2Zvcih2YXIgZD0wLG09MTswPT0oci53b3Jkc1swXSZtKSYmZDwyNjsrK2QsbTw8PTEpO2lmKGQ+MClmb3Ioci5pdXNocm4oZCk7ZC0tID4wOykocy5pc09kZCgpfHxsLmlzT2RkKCkpJiYocy5pYWRkKHUpLGwuaXN1YihmKSkscy5pdXNocm4oMSksbC5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIocyksby5pc3ViKGwpKTooci5pc3ViKGUpLHMuaXN1YihpKSxsLmlzdWIobykpfXJldHVybnthOnMsYjpsLGdjZDpyLml1c2hsbihjKX19LGEucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGksbz1uZXcgYSgxKSxzPW5ldyBhKDApLGw9ci5jbG9uZSgpO2UuY21wbigxKT4wJiZyLmNtcG4oMSk+MDspe2Zvcih2YXIgYz0wLHU9MTswPT0oZS53b3Jkc1swXSZ1KSYmYzwyNjsrK2MsdTw8PTEpO2lmKGM+MClmb3IoZS5pdXNocm4oYyk7Yy0tID4wOylvLmlzT2RkKCkmJm8uaWFkZChsKSxvLml1c2hybigxKTtmb3IodmFyIGY9MCxoPTE7MD09KHIud29yZHNbMF0maCkmJmY8MjY7KytmLGg8PD0xKTtpZihmPjApZm9yKHIuaXVzaHJuKGYpO2YtLSA+MDspcy5pc09kZCgpJiZzLmlhZGQobCkscy5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxvLmlzdWIocykpOihyLmlzdWIoZSkscy5pc3ViKG8pKX1yZXR1cm4oaT0wPT09ZS5jbXBuKDEpP286cykuY21wbigwKTwwJiZpLmlhZGQodCksaX0sYS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHQuYWJzKCk7aWYodC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgZT10aGlzLmNsb25lKCkscj10LmNsb25lKCk7ZS5uZWdhdGl2ZT0wLHIubmVnYXRpdmU9MDtmb3IodmFyIG49MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpO24rKyllLml1c2hybigxKSxyLml1c2hybigxKTtmb3IoOzspe2Zvcig7ZS5pc0V2ZW4oKTspZS5pdXNocm4oMSk7Zm9yKDtyLmlzRXZlbigpOylyLml1c2hybigxKTt2YXIgaT1lLmNtcChyKTtpZihpPDApe3ZhciBhPWU7ZT1yLHI9YX1lbHNlIGlmKDA9PT1pfHwwPT09ci5jbXBuKDEpKWJyZWFrO2UuaXN1YihyKX1yZXR1cm4gci5pdXNobG4obil9LGEucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWdjZCh0KS5hLnVtb2QodCl9LGEucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sYS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LGEucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLndvcmRzWzBdJnR9LGEucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0KTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO2lmKHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzLl9leHBhbmQocisxKSx0aGlzLndvcmRzW3JdfD1pLHRoaXM7Zm9yKHZhciBhPWksbz1yOzAhPT1hJiZvPHRoaXMubGVuZ3RoO28rKyl7dmFyIHM9MHx0aGlzLndvcmRzW29dO2E9KHMrPWEpPj4+MjYscyY9NjcxMDg4NjMsdGhpcy53b3Jkc1tvXT1zfXJldHVybiAwIT09YSYmKHRoaXMud29yZHNbb109YSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxhLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sYS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbih0KXt2YXIgZSxyPXQ8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXIpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJnIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpZT0xO2Vsc2V7ciYmKHQ9LXQpLG4odDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIGk9MHx0aGlzLndvcmRzWzBdO2U9aT09PXQ/MDppPHQ/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtZTplfSxhLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24odCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgZT10aGlzLnVjbXAodCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sYS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih0KXtpZih0aGlzLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBuPTB8dGhpcy53b3Jkc1tyXSxpPTB8dC53b3Jkc1tyXTtpZihuIT09aSl7bjxpP2U9LTE6bj5pJiYoZT0xKTticmVha319cmV0dXJuIGV9LGEucHJvdG90eXBlLmd0bj1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wbih0KX0sYS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcCh0KX0sYS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPj0wfSxhLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPj0wfSxhLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24odCl7cmV0dXJuLTE9PT10aGlzLmNtcG4odCl9LGEucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHQpe3JldHVybi0xPT09dGhpcy5jbXAodCl9LGEucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KTw9MH0sYS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KTw9MH0sYS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXBuKHQpfSxhLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wKHQpfSxhLnJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFQodCl9LGEucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG4oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksdC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHQpfSxhLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sYS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlZD10LHRoaXN9LGEucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHQpfSxhLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQubXVsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLmltdWwodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LGEucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sYS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LGEucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQmJiF0LnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx0KX07dmFyIHY9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiB5KHQsZSl7dGhpcy5uYW1lPXQsdGhpcy5wPW5ldyBhKGUsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBhKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB4KCl7eS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGIoKXt5LmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gXygpe3kuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiB3KCl7eS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFQodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgZT1hLl9wcmltZSh0KTt0aGlzLm09ZS5wLHRoaXMucHJpbWU9ZX1lbHNlIG4odC5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT10LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBrKHQpe1QuY2FsbCh0aGlzLHQpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IGEoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9eS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciB0PW5ldyBhKG51bGwpO3JldHVybiB0LndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksdH0seS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQ7ZG97dGhpcy5zcGxpdChyLHRoaXMudG1wKSxlPShyPShyPXRoaXMuaW11bEsocikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShlPnRoaXMubik7dmFyIG49ZTx0aGlzLm4/LTE6ci51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1uPyhyLndvcmRzWzBdPTAsci5sZW5ndGg9MSk6bj4wP3IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PXIuc3RyaXA/ci5zdHJpcCgpOnIuX3N0cmlwKCkscn0seS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXt0Lml1c2hybih0aGlzLm4sMCxlKX0seS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW11bCh0aGlzLmspfSxpKHgseSkseC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5taW4odC5sZW5ndGgsOSksbj0wO248cjtuKyspZS53b3Jkc1tuXT10LndvcmRzW25dO2lmKGUubGVuZ3RoPXIsdC5sZW5ndGg8PTkpcmV0dXJuIHQud29yZHNbMF09MCx2b2lkKHQubGVuZ3RoPTEpO3ZhciBpPXQud29yZHNbOV07Zm9yKGUud29yZHNbZS5sZW5ndGgrK109NDE5NDMwMyZpLG49MTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBhPTB8dC53b3Jkc1tuXTt0LndvcmRzW24tMTBdPSg0MTk0MzAzJmEpPDw0fGk+Pj4yMixpPWF9aT4+Pj0yMix0LndvcmRzW24tMTBdPWksMD09PWkmJnQubGVuZ3RoPjEwP3QubGVuZ3RoLT0xMDp0Lmxlbmd0aC09OX0seC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7dC53b3Jkc1t0Lmxlbmd0aF09MCx0LndvcmRzW3QubGVuZ3RoKzFdPTAsdC5sZW5ndGgrPTI7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0wfHQud29yZHNbcl07ZSs9OTc3Km4sdC53b3Jkc1tyXT02NzEwODg2MyZlLGU9NjQqbisoZS82NzEwODg2NHwwKX1yZXR1cm4gMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJih0Lmxlbmd0aC0tLDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiZ0Lmxlbmd0aC0tKSx0fSxpKGIseSksaShfLHkpLGkodyx5KSx3LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTE5KigwfHQud29yZHNbcl0pK2UsaT02NzEwODg2MyZuO24+Pj49MjYsdC53b3Jkc1tyXT1pLGU9bn1yZXR1cm4gMCE9PWUmJih0LndvcmRzW3QubGVuZ3RoKytdPWUpLHR9LGEuX3ByaW1lPWZ1bmN0aW9uKHQpe2lmKHZbdF0pcmV0dXJuIHZbdF07dmFyIGU7aWYoImsyNTYiPT09dCllPW5ldyB4O2Vsc2UgaWYoInAyMjQiPT09dCllPW5ldyBiO2Vsc2UgaWYoInAxOTIiPT09dCllPW5ldyBfO2Vsc2V7aWYoInAyNTUxOSIhPT10KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3QpO2U9bmV3IHd9cmV0dXJuIHZbdF09ZSxlfSxULnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG4odC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sVC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24odCxlKXtuKDA9PSh0Lm5lZ2F0aXZlfGUubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG4odC5yZWQmJnQucmVkPT09ZS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sVC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UodCkuX2ZvcmNlUmVkKHRoaXMpOnQudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sVC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHQpe3JldHVybiB0LmlzWmVybygpP3QuY2xvbmUoKTp0aGlzLm0uc3ViKHQpLl9mb3JjZVJlZCh0aGlzKX0sVC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sVC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlhZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHJ9LFQucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LnN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxULnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaXN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHJ9LFQucHJvdG90eXBlLnNobD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkxKHQpLHRoaXMuaW1vZCh0LnVzaGxuKGUpKX0sVC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQuaW11bChlKSl9LFQucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQubXVsKGUpKX0sVC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbXVsKHQsdC5jbG9uZSgpKX0sVC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm11bCh0LHQpfSxULnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHQpe2lmKHQuaXNaZXJvKCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgZT10aGlzLm0uYW5kbG4oMyk7aWYobihlJTI9PTEpLDM9PT1lKXt2YXIgcj10aGlzLm0uYWRkKG5ldyBhKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHQscil9Zm9yKHZhciBpPXRoaXMubS5zdWJuKDEpLG89MDshaS5pc1plcm8oKSYmMD09PWkuYW5kbG4oMSk7KW8rKyxpLml1c2hybigxKTtuKCFpLmlzWmVybygpKTt2YXIgcz1uZXcgYSgxKS50b1JlZCh0aGlzKSxsPXMucmVkTmVnKCksYz10aGlzLm0uc3VibigxKS5pdXNocm4oMSksdT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHU9bmV3IGEoMip1KnUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyh1LGMpLmNtcChsKTspdS5yZWRJQWRkKGwpO2Zvcih2YXIgZj10aGlzLnBvdyh1LGkpLGg9dGhpcy5wb3codCxpLmFkZG4oMSkuaXVzaHJuKDEpKSxwPXRoaXMucG93KHQsaSksZD1vOzAhPT1wLmNtcChzKTspe2Zvcih2YXIgbT1wLGc9MDswIT09bS5jbXAocyk7ZysrKW09bS5yZWRTcXIoKTtuKGc8ZCk7dmFyIHY9dGhpcy5wb3coZixuZXcgYSgxKS5pdXNobG4oZC1nLTEpKTtoPWgucmVkTXVsKHYpLGY9di5yZWRTcXIoKSxwPXAucmVkTXVsKGYpLGQ9Z31yZXR1cm4gaH0sVC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10Ll9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09ZS5uZWdhdGl2ZT8oZS5uZWdhdGl2ZT0wLHRoaXMuaW1vZChlKS5yZWROZWcoKSk6dGhpcy5pbW9kKGUpfSxULnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCxlKXtpZihlLmlzWmVybygpKXJldHVybiBuZXcgYSgxKS50b1JlZCh0aGlzKTtpZigwPT09ZS5jbXBuKDEpKXJldHVybiB0LmNsb25lKCk7dmFyIHI9bmV3IEFycmF5KDE2KTtyWzBdPW5ldyBhKDEpLnRvUmVkKHRoaXMpLHJbMV09dDtmb3IodmFyIG49MjtuPHIubGVuZ3RoO24rKylyW25dPXRoaXMubXVsKHJbbi0xXSx0KTt2YXIgaT1yWzBdLG89MCxzPTAsbD1lLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bCYmKGw9MjYpLG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7Zm9yKHZhciBjPWUud29yZHNbbl0sdT1sLTE7dT49MDt1LS0pe3ZhciBmPWM+PnUmMTtpIT09clswXSYmKGk9dGhpcy5zcXIoaSkpLDAhPT1mfHwwIT09bz8obzw8PTEsb3w9ZiwoND09PSsrc3x8MD09PW4mJjA9PT11KSYmKGk9dGhpcy5tdWwoaSxyW29dKSxzPTAsbz0wKSk6cz0wfWw9MjZ9cmV0dXJuIGl9LFQucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXt2YXIgZT10LnVtb2QodGhpcy5tKTtyZXR1cm4gZT09PXQ/ZS5jbG9uZSgpOmV9LFQucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xvbmUoKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxhLm1vbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBrKHQpfSxpKGssVCksay5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltb2QodC51c2hsbih0aGlzLnNoaWZ0KSl9LGsucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1vZCh0Lm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxrLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gdC53b3Jkc1swXT0wLHQubGVuZ3RoPTEsdDt2YXIgcj10LmltdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksYT1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP2E9aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihhPWkuaWFkZCh0aGlzLm0pKSxhLl9mb3JjZVJlZCh0aGlzKX0say5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gbmV3IGEoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciByPXQubXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLG89aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9vPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYobz1pLmlhZGQodGhpcy5tKSksby5fZm9yY2VSZWQodGhpcyl9LGsucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1vZCh0Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odm9pZCAwPT09ZXx8ZSx0aGlzKX0se2J1ZmZlcjoxMTF9XSw5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9ibi1zaWduIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRbMF0pKm4odFsxXSl9fSx7Ii4vbGliL2JuLXNpZ24iOjg4fV0sOTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvcmF0aW9uYWxpemUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0WzBdLm11bChlWzFdKS5zdWIodFsxXS5tdWwoZVswXSkpLHRbMV0ubXVsKGVbMV0pKX19LHsiLi9saWIvcmF0aW9uYWxpemUiOjkzfV0sOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvYm4tdG8tbnVtIiksaT10KCIuL2xpYi9jdHoiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV07aWYoMD09PWUuY21wbigwKSlyZXR1cm4gMDt2YXIgYT1lLmFicygpLmRpdm1vZChyLmFicygpKSxvPWEuZGl2LHM9bihvKSxsPWEubW9kLGM9ZS5uZWdhdGl2ZSE9PXIubmVnYXRpdmU/LTE6MTtpZigwPT09bC5jbXBuKDApKXJldHVybiBjKnM7aWYocyl7dmFyIHU9aShzKSs0LGY9bihsLnVzaGxuKHUpLmRpdlJvdW5kKHIpKTtyZXR1cm4gYyoocytmKk1hdGgucG93KDIsLXUpKX12YXIgaD1yLmJpdExlbmd0aCgpLWwuYml0TGVuZ3RoKCkrNTM7Zj1uKGwudXNobG4oaCkuZGl2Um91bmQocikpO3JldHVybiBoPDEwMjM/YypmKk1hdGgucG93KDIsLWgpOihmKj1NYXRoLnBvdygyLC0xMDIzKSxjKmYqTWF0aC5wb3coMiwxMDIzLWgpKX19LHsiLi9saWIvYm4tdG8tbnVtIjo4OSwiLi9saWIvY3R6Ijo5MH1dLDEwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSl7Zm9yKHZhciBhPWkrMTtuPD1pOyl7dmFyIG89bitpPj4+MSxzPXRbb107KHZvaWQgMCE9PXI/cihzLGUpOnMtZSk+PTA/KGE9byxpPW8tMSk6bj1vKzF9cmV0dXJuIGF9ZnVuY3Rpb24gaSh0LGUscixuLGkpe2Zvcih2YXIgYT1pKzE7bjw9aTspe3ZhciBvPW4raT4+PjEscz10W29dOyh2b2lkIDAhPT1yP3IocyxlKTpzLWUpPjA/KGE9byxpPW8tMSk6bj1vKzF9cmV0dXJuIGF9ZnVuY3Rpb24gYSh0LGUscixuLGkpe2Zvcih2YXIgYT1uLTE7bjw9aTspe3ZhciBvPW4raT4+PjEscz10W29dOyh2b2lkIDAhPT1yP3IocyxlKTpzLWUpPDA/KGE9byxuPW8rMSk6aT1vLTF9cmV0dXJuIGF9ZnVuY3Rpb24gbyh0LGUscixuLGkpe2Zvcih2YXIgYT1uLTE7bjw9aTspe3ZhciBvPW4raT4+PjEscz10W29dOyh2b2lkIDAhPT1yP3IocyxlKTpzLWUpPD0wPyhhPW8sbj1vKzEpOmk9by0xfXJldHVybiBhfWZ1bmN0aW9uIHModCxlLHIsbixpKXtmb3IoO248PWk7KXt2YXIgYT1uK2k+Pj4xLG89dFthXSxzPXZvaWQgMCE9PXI/cihvLGUpOm8tZTtpZigwPT09cylyZXR1cm4gYTtzPD0wP249YSsxOmk9YS0xfXJldHVybi0xfWZ1bmN0aW9uIGwodCxlLHIsbixpLGEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByP2EodCxlLHIsdm9pZCAwPT09bj8wOjB8bix2b2lkIDA9PT1pP3QubGVuZ3RoLTE6MHxpKTphKHQsZSx2b2lkIDAsdm9pZCAwPT09cj8wOjB8cix2b2lkIDA9PT1uP3QubGVuZ3RoLTE6MHxuKX1lLmV4cG9ydHM9e2dlOmZ1bmN0aW9uKHQsZSxyLGksYSl7cmV0dXJuIGwodCxlLHIsaSxhLG4pfSxndDpmdW5jdGlvbih0LGUscixuLGEpe3JldHVybiBsKHQsZSxyLG4sYSxpKX0sbHQ6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gbCh0LGUscixuLGksYSl9LGxlOmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGwodCxlLHIsbixpLG8pfSxlcTpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBsKHQsZSxyLG4saSxzKX19fSx7fV0sMTAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9MzI7cmV0dXJuKHQmPS10KSYmZS0tLDY1NTM1JnQmJihlLT0xNiksMTY3MTE5MzUmdCYmKGUtPTgpLDI1MjY0NTEzNSZ0JiYoZS09NCksODU4OTkzNDU5JnQmJihlLT0yKSwxNDMxNjU1NzY1JnQmJihlLT0xKSxlfXIuSU5UX0JJVFM9MzIsci5JTlRfTUFYPTIxNDc0ODM2NDcsci5JTlRfTUlOPS0xPDwzMSxyLnNpZ249ZnVuY3Rpb24odCl7cmV0dXJuKHQ+MCktKHQ8MCl9LHIuYWJzPWZ1bmN0aW9uKHQpe3ZhciBlPXQ+PjMxO3JldHVybih0XmUpLWV9LHIubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVeKHReZSkmLSh0PGUpfSxyLm1heD1mdW5jdGlvbih0LGUpe3JldHVybiB0Xih0XmUpJi0odDxlKX0sci5pc1BvdzI9ZnVuY3Rpb24odCl7cmV0dXJuISh0JnQtMXx8IXQpfSxyLmxvZzI9ZnVuY3Rpb24odCl7dmFyIGUscjtyZXR1cm4gZT0odD42NTUzNSk8PDQsZXw9cj0oKHQ+Pj49ZSk+MjU1KTw8MyxlfD1yPSgodD4+Pj1yKT4xNSk8PDIsKGV8PXI9KCh0Pj4+PXIpPjMpPDwxKXwodD4+Pj1yKT4+MX0sci5sb2cxMD1mdW5jdGlvbih0KXtyZXR1cm4gdD49MWU5Pzk6dD49MWU4Pzg6dD49MWU3Pzc6dD49MWU2PzY6dD49MWU1PzU6dD49MWU0PzQ6dD49MWUzPzM6dD49MTAwPzI6dD49MTA/MTowfSxyLnBvcENvdW50PWZ1bmN0aW9uKHQpe3JldHVybiAxNjg0MzAwOSooKHQ9KDg1ODk5MzQ1OSYodC09dD4+PjEmMTQzMTY1NTc2NSkpKyh0Pj4+MiY4NTg5OTM0NTkpKSsodD4+PjQpJjI1MjY0NTEzNSk+Pj4yNH0sci5jb3VudFRyYWlsaW5nWmVyb3M9bixyLm5leHRQb3cyPWZ1bmN0aW9uKHQpe3JldHVybiB0Kz0wPT09dCwtLXQsdHw9dD4+PjEsdHw9dD4+PjIsdHw9dD4+PjQsdHw9dD4+PjgsKHR8PXQ+Pj4xNikrMX0sci5wcmV2UG93Mj1mdW5jdGlvbih0KXtyZXR1cm4gdHw9dD4+PjEsdHw9dD4+PjIsdHw9dD4+PjQsdHw9dD4+PjgsKHR8PXQ+Pj4xNiktKHQ+Pj4xKX0sci5wYXJpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRePXQ+Pj4xNix0Xj10Pj4+OCx0Xj10Pj4+NCwyNzAzMD4+Pih0Jj0xNSkmMX07dmFyIGk9bmV3IEFycmF5KDI1Nik7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8MjU2OysrZSl7dmFyIHI9ZSxuPWUsaT03O2ZvcihyPj4+PTE7cjtyPj4+PTEpbjw8PTEsbnw9MSZyLC0taTt0W2VdPW48PGkmMjU1fX0oaSksci5yZXZlcnNlPWZ1bmN0aW9uKHQpe3JldHVybiBpWzI1NSZ0XTw8MjR8aVt0Pj4+OCYyNTVdPDwxNnxpW3Q+Pj4xNiYyNTVdPDw4fGlbdD4+PjI0JjI1NV19LHIuaW50ZXJsZWF2ZTI9ZnVuY3Rpb24odCxlKXtyZXR1cm4odD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0Jj02NTUzNSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpfChlPTE0MzE2NTU3NjUmKChlPTg1ODk5MzQ1OSYoKGU9MjUyNjQ1MTM1JigoZT0xNjcxMTkzNSYoKGUmPTY1NTM1KXxlPDw4KSl8ZTw8NCkpfGU8PDIpKXxlPDwxKSk8PDF9LHIuZGVpbnRlcmxlYXZlMj1mdW5jdGlvbih0LGUpe3JldHVybih0PTY1NTM1JigodD0xNjcxMTkzNSYoKHQ9MjUyNjQ1MTM1JigodD04NTg5OTM0NTkmKCh0PXQ+Pj5lJjE0MzE2NTU3NjUpfHQ+Pj4xKSl8dD4+PjIpKXx0Pj4+NCkpfHQ+Pj4xNikpPDwxNj4+MTZ9LHIuaW50ZXJsZWF2ZTM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PTEyMjcxMzM1MTMmKCh0PTMyNzIzNTYwMzUmKCh0PTI1MTcxOTY5NSYoKHQ9NDI3ODE5MDMzNSYoKHQmPTEwMjMpfHQ8PDE2KSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSwodHw9KGU9MTIyNzEzMzUxMyYoKGU9MzI3MjM1NjAzNSYoKGU9MjUxNzE5Njk1JigoZT00Mjc4MTkwMzM1JigoZSY9MTAyMyl8ZTw8MTYpKXxlPDw4KSl8ZTw8NCkpfGU8PDIpKTw8MSl8KHI9MTIyNzEzMzUxMyYoKHI9MzI3MjM1NjAzNSYoKHI9MjUxNzE5Njk1Jigocj00Mjc4MTkwMzM1JigociY9MTAyMyl8cjw8MTYpKXxyPDw4KSl8cjw8NCkpfHI8PDIpKTw8Mn0sci5kZWludGVybGVhdmUzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQ9MTAyMyYoKHQ9NDI3ODE5MDMzNSYoKHQ9MjUxNzE5Njk1JigodD0zMjcyMzU2MDM1JigodD10Pj4+ZSYxMjI3MTMzNTEzKXx0Pj4+MikpfHQ+Pj40KSl8dD4+PjgpKXx0Pj4+MTYpKTw8MjI+PjIyfSxyLm5leHRDb21iaW5hdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10fHQtMTtyZXR1cm4gZSsxfCh+ZSYtfmUpLTE+Pj5uKHQpKzF9fSx7fV0sMTAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNsYW1wIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9e30pO3ZhciByLG8scyxsLGMsdSxmLGgscCxkLG0sZz1udWxsPT1lLmN1dG9mZj8uMjU6ZS5jdXRvZmYsdj1udWxsPT1lLnJhZGl1cz84OmUucmFkaXVzLHk9ZS5jaGFubmVsfHwwO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KXx8QXJyYXkuaXNBcnJheSh0KSl7aWYoIWUud2lkdGh8fCFlLmhlaWdodCl0aHJvdyBFcnJvcigiRm9yIHJhdyBkYXRhIHdpZHRoIGFuZCBoZWlnaHQgc2hvdWxkIGJlIHByb3ZpZGVkIGJ5IG9wdGlvbnMiKTtyPWUud2lkdGgsbz1lLmhlaWdodCxsPXQsdT1lLnN0cmlkZT9lLnN0cmlkZTpNYXRoLmZsb29yKHQubGVuZ3RoL3Ivbyl9ZWxzZSB3aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQmJnQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQ/KGY9KGg9dCkuZ2V0Q29udGV4dCgiMmQiKSxyPWgud2lkdGgsbz1oLmhlaWdodCxwPWYuZ2V0SW1hZ2VEYXRhKDAsMCxyLG8pLGw9cC5kYXRhLHU9NCk6d2luZG93LkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCYmdCBpbnN0YW5jZW9mIHdpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ/KGg9dC5jYW52YXMsZj10LHI9aC53aWR0aCxvPWguaGVpZ2h0LHA9Zi5nZXRJbWFnZURhdGEoMCwwLHIsbyksbD1wLmRhdGEsdT00KTp3aW5kb3cuSW1hZ2VEYXRhJiZ0IGluc3RhbmNlb2Ygd2luZG93LkltYWdlRGF0YSYmKHA9dCxyPXQud2lkdGgsbz10LmhlaWdodCxsPXAuZGF0YSx1PTQpO2lmKHM9TWF0aC5tYXgocixvKSx3aW5kb3cuVWludDhDbGFtcGVkQXJyYXkmJmwgaW5zdGFuY2VvZiB3aW5kb3cuVWludDhDbGFtcGVkQXJyYXl8fHdpbmRvdy5VaW50OEFycmF5JiZsIGluc3RhbmNlb2Ygd2luZG93LlVpbnQ4QXJyYXkpZm9yKGM9bCxsPUFycmF5KHIqbyksZD0wLG09Yy5sZW5ndGg7ZDxtO2QrKylsW2RdPWNbZCp1K3ldLzI1NTtlbHNlIGlmKDEhPT11KXRocm93IEVycm9yKCJSYXcgZGF0YSBjYW4gaGF2ZSBvbmx5IDEgdmFsdWUgcGVyIHBpeGVsIik7dmFyIHg9QXJyYXkocipvKSxiPUFycmF5KHIqbyksXz1BcnJheShzKSx3PUFycmF5KHMpLFQ9QXJyYXkocysxKSxrPUFycmF5KHMpO2ZvcihkPTAsbT1yKm87ZDxtO2QrKyl7dmFyIEE9bFtkXTt4W2RdPTE9PT1BPzA6MD09PUE/aTpNYXRoLnBvdyhNYXRoLm1heCgwLC41LUEpLDIpLGJbZF09MT09PUE/aTowPT09QT8wOk1hdGgucG93KE1hdGgubWF4KDAsQS0uNSksMil9YSh4LHIsbyxfLHcsayxUKSxhKGIscixvLF8sdyxrLFQpO3ZhciBNPXdpbmRvdy5GbG9hdDMyQXJyYXk/bmV3IEZsb2F0MzJBcnJheShyKm8pOm5ldyBBcnJheShyKm8pO2ZvcihkPTAsbT1yKm87ZDxtO2QrKylNW2RdPW4oMS0oKHhbZF0tYltkXSkvditnKSwwLDEpO3JldHVybiBNfTt2YXIgaT0xZTIwO2Z1bmN0aW9uIGEodCxlLHIsbixpLGEscyl7Zm9yKHZhciBsPTA7bDxlO2wrKyl7Zm9yKHZhciBjPTA7YzxyO2MrKyluW2NdPXRbYyplK2xdO2ZvcihvKG4saSxhLHMsciksYz0wO2M8cjtjKyspdFtjKmUrbF09aVtjXX1mb3IoYz0wO2M8cjtjKyspe2ZvcihsPTA7bDxlO2wrKyluW2xdPXRbYyplK2xdO2ZvcihvKG4saSxhLHMsZSksbD0wO2w8ZTtsKyspdFtjKmUrbF09TWF0aC5zcXJ0KGlbbF0pfX1mdW5jdGlvbiBvKHQsZSxyLG4sYSl7clswXT0wLG5bMF09LWksblsxXT0raTtmb3IodmFyIG89MSxzPTA7bzxhO28rKyl7Zm9yKHZhciBsPSh0W29dK28qby0odFtyW3NdXStyW3NdKnJbc10pKS8oMipvLTIqcltzXSk7bDw9bltzXTspcy0tLGw9KHRbb10rbypvLSh0W3Jbc11dK3Jbc10qcltzXSkpLygyKm8tMipyW3NdKTtyWysrc109byxuW3NdPWwsbltzKzFdPStpfWZvcihvPTAscz0wO288YTtvKyspe2Zvcig7bltzKzFdPG87KXMrKztlW29dPShvLXJbc10pKihvLXJbc10pK3RbcltzXV19fX0se2NsYW1wOjEyMX1dLDEwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dC5sZW5ndGgsYT0wO2ZvcihlPTA7ZTxpOysrZSlhKz10W2VdLmxlbmd0aDt2YXIgbz1uZXcgQXJyYXkoYSkscz0wO2ZvcihlPTA7ZTxpOysrZSl7dmFyIGw9dFtlXSxjPWwubGVuZ3RoO2ZvcihyPTA7cjxjOysrcil7dmFyIHU9b1tzKytdPW5ldyBBcnJheShjLTEpLGY9MDtmb3Iobj0wO248YzsrK24pbiE9PXImJih1W2YrK109bFtuXSk7aWYoMSZyKXt2YXIgaD11WzFdO3VbMV09dVswXSx1WzBdPWh9fX1yZXR1cm4gb319LHt9XSwxMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBmKHQpO2Nhc2UgMjpyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9jKHQsdCxlLCEwKTpoKHQsZSk7Y2FzZSAzOnJldHVybiBjKHQsZSxyLCExKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiYm94LWludGVyc2VjdDogSW52YWxpZCBhcmd1bWVudHMiKX19O3ZhciBuLGk9dCgidHlwZWRhcnJheS1wb29sIiksYT10KCIuL2xpYi9zd2VlcCIpLG89dCgiLi9saWIvaW50ZXJzZWN0Iik7ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcj0wO3I8dDsrK3IpaWYoIShlW3JdPD1lW3IrdF0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGwodCxlLHIsbil7Zm9yKHZhciBpPTAsYT0wLG89MCxsPXQubGVuZ3RoO288bDsrK28pe3ZhciBjPXRbb107aWYoIXMoZSxjKSl7Zm9yKHZhciB1PTA7dTwyKmU7Kyt1KXJbaSsrXT1jW3VdO25bYSsrXT1vfX1yZXR1cm4gYX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBzPXQubGVuZ3RoLGM9ZS5sZW5ndGg7aWYoIShzPD0wfHxjPD0wKSl7dmFyIHU9dFswXS5sZW5ndGg+Pj4xO2lmKCEodTw9MCkpe3ZhciBmLGg9aS5tYWxsb2NEb3VibGUoMip1KnMpLHA9aS5tYWxsb2NJbnQzMihzKTtpZigocz1sKHQsdSxoLHApKT4wKXtpZigxPT09dSYmbilhLmluaXQocyksZj1hLnN3ZWVwQ29tcGxldGUodSxyLDAscyxoLHAsMCxzLGgscCk7ZWxzZXt2YXIgZD1pLm1hbGxvY0RvdWJsZSgyKnUqYyksbT1pLm1hbGxvY0ludDMyKGMpOyhjPWwoZSx1LGQsbSkpPjAmJihhLmluaXQocytjKSxmPTE9PT11P2Euc3dlZXBCaXBhcnRpdGUodSxyLDAscyxoLHAsMCxjLGQsbSk6byh1LHIsbixzLGgscCxjLGQsbSksaS5mcmVlKGQpLGkuZnJlZShtKSl9aS5mcmVlKGgpLGkuZnJlZShwKX1yZXR1cm4gZn19fWZ1bmN0aW9uIHUodCxlKXtuLnB1c2goW3QsZV0pfWZ1bmN0aW9uIGYodCl7cmV0dXJuIG49W10sYyh0LHQsdSwhMCksbn1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIG49W10sYyh0LGUsdSwhMSksbn19LHsiLi9saWIvaW50ZXJzZWN0IjoxMDYsIi4vbGliL3N3ZWVwIjoxMTAsInR5cGVkYXJyYXktcG9vbCI6NTkwfV0sMTA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQ/ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXtyZXR1cm4gaS1uPmwtcz9mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUpe2Zvcih2YXIgZj0yKnQsaD1uLHA9ZipuO2g8aTsrK2gscCs9Zil7dmFyIGQ9YVtlK3BdLG09YVtlK3ArdF0sZz1vW2hdO3Q6Zm9yKHZhciB2PXMseT1mKnM7djxsOysrdix5Kz1mKXt2YXIgeD1jW2UreV0sYj1jW2UreSt0XSxfPXVbdl07aWYoIShiPGR8fG08eCkpe2Zvcih2YXIgdz1lKzE7dzx0Oysrdyl7dmFyIFQ9YVt3K3BdLGs9YVt3K3QrcF0sQT1jW3creV0sTT1jW3crdCt5XTtpZihrPEF8fE08VCljb250aW51ZSB0fXZhciBTPXIoZyxfKTtpZih2b2lkIDAhPT1TKXJldHVybiBTfX19fSh0LGUscixuLGksYSxvLHMsbCxjLHUpOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7Zm9yKHZhciBmPTIqdCxoPXMscD1mKnM7aDxsOysraCxwKz1mKXt2YXIgZD1jW2UrcF0sbT1jW2UrcCt0XSxnPXVbaF07dDpmb3IodmFyIHY9bix5PWYqbjt2PGk7Kyt2LHkrPWYpe3ZhciB4PWFbZSt5XSxiPWFbZSt5K3RdLF89b1t2XTtpZighKG08eHx8YjxkKSl7Zm9yKHZhciB3PWUrMTt3PHQ7Kyt3KXt2YXIgVD1hW3creV0saz1hW3crdCt5XSxBPWNbdytwXSxNPWNbdyt0K3BdO2lmKGs8QXx8TTxUKWNvbnRpbnVlIHR9dmFyIFM9cihfLGcpO2lmKHZvaWQgMCE9PVMpcmV0dXJuIFN9fX19KHQsZSxyLG4saSxhLG8scyxsLGMsdSl9OmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmKXtyZXR1cm4gYS1pPmMtbD9uP2Z1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7Zm9yKHZhciBmPTIqdCxoPW4scD1mKm47aDxpOysraCxwKz1mKXt2YXIgZD1hW2UrcF0sbT1hW2UrcCt0XSxnPW9baF07dDpmb3IodmFyIHY9cyx5PWYqczt2PGw7Kyt2LHkrPWYpe3ZhciB4PWNbZSt5XSxiPXVbdl07aWYoISh4PD1kfHxtPHgpKXtmb3IodmFyIF89ZSsxO188dDsrK18pe3ZhciB3PWFbXytwXSxUPWFbXyt0K3BdLGs9Y1tfK3ldLEE9Y1tfK3QreV07aWYoVDxrfHxBPHcpY29udGludWUgdH12YXIgTT1yKGIsZyk7aWYodm9pZCAwIT09TSlyZXR1cm4gTX19fX0odCxlLHIsaSxhLG8scyxsLGMsdSxmKTpmdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUpe2Zvcih2YXIgZj0yKnQsaD1uLHA9ZipuO2g8aTsrK2gscCs9Zil7dmFyIGQ9YVtlK3BdLG09YVtlK3ArdF0sZz1vW2hdO3Q6Zm9yKHZhciB2PXMseT1mKnM7djxsOysrdix5Kz1mKXt2YXIgeD1jW2UreV0sYj11W3ZdO2lmKCEoeDxkfHxtPHgpKXtmb3IodmFyIF89ZSsxO188dDsrK18pe3ZhciB3PWFbXytwXSxUPWFbXyt0K3BdLGs9Y1tfK3ldLEE9Y1tfK3QreV07aWYoVDxrfHxBPHcpY29udGludWUgdH12YXIgTT1yKGcsYik7aWYodm9pZCAwIT09TSlyZXR1cm4gTX19fX0odCxlLHIsaSxhLG8scyxsLGMsdSxmKTpuP2Z1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7Zm9yKHZhciBmPTIqdCxoPXMscD1mKnM7aDxsOysraCxwKz1mKXt2YXIgZD1jW2UrcF0sbT11W2hdO3Q6Zm9yKHZhciBnPW4sdj1mKm47ZzxpOysrZyx2Kz1mKXt2YXIgeT1hW2Urdl0seD1hW2Urdit0XSxiPW9bZ107aWYoIShkPD15fHx4PGQpKXtmb3IodmFyIF89ZSsxO188dDsrK18pe3ZhciB3PWFbXyt2XSxUPWFbXyt0K3ZdLGs9Y1tfK3BdLEE9Y1tfK3QrcF07aWYoVDxrfHxBPHcpY29udGludWUgdH12YXIgTT1yKG0sYik7aWYodm9pZCAwIT09TSlyZXR1cm4gTX19fX0odCxlLHIsaSxhLG8scyxsLGMsdSxmKTpmdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUpe2Zvcih2YXIgZj0yKnQsaD1zLHA9ZipzO2g8bDsrK2gscCs9Zil7dmFyIGQ9Y1tlK3BdLG09dVtoXTt0OmZvcih2YXIgZz1uLHY9ZipuO2c8aTsrK2csdis9Zil7dmFyIHk9YVtlK3ZdLHg9YVtlK3YrdF0sYj1vW2ddO2lmKCEoZDx5fHx4PGQpKXtmb3IodmFyIF89ZSsxO188dDsrK18pe3ZhciB3PWFbXyt2XSxUPWFbXyt0K3ZdLGs9Y1tfK3BdLEE9Y1tfK3QrcF07aWYoVDxrfHxBPHcpY29udGludWUgdH12YXIgTT1yKGIsbSk7aWYodm9pZCAwIT09TSlyZXR1cm4gTX19fX0odCxlLHIsaSxhLG8scyxsLGMsdSxmKX19ci5wYXJ0aWFsPW4oITEpLHIuZnVsbD1uKCEwKX0se31dLDEwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSx1LHcsVCxrLEEpeyFmdW5jdGlvbih0LGUpe3ZhciByPTgqaS5sb2cyKGUrMSkqKHQrMSl8MCxhPWkubmV4dFBvdzIoNipyKTt2Lmxlbmd0aDxhJiYobi5mcmVlKHYpLHY9bi5tYWxsb2NJbnQzMihhKSk7dmFyIG89aS5uZXh0UG93MigyKnIpO3kubGVuZ3RoPG8mJihuLmZyZWUoeSkseT1uLm1hbGxvY0RvdWJsZShvKSl9KHQsYStUKTt2YXIgTSxTPTAsRT0yKnQ7eChTKyssMCwwLGEsMCxULHI/MTY6MCwtMS8wLDEvMCkscnx8eChTKyssMCwwLFQsMCxhLDEsLTEvMCwxLzApO2Zvcig7Uz4wOyl7dmFyIEw9NiooUy09MSksQz12W0xdLFA9dltMKzFdLEk9dltMKzJdLE89dltMKzNdLHo9dltMKzRdLEQ9dltMKzVdLFI9MipTLEY9eVtSXSxCPXlbUisxXSxOPTEmRCxqPSEhKDE2JkQpLFU9dSxWPXcsSD1rLHE9QTtpZihOJiYoVT1rLFY9QSxIPXUscT13KSwhKDImRCYmKEk9cCh0LEMsUCxJLFUsVixCKSxQPj1JKXx8NCZEJiYoUD1kKHQsQyxQLEksVSxWLEYpKT49SSkpe3ZhciBHPUktUCxZPXotTztpZihqKXtpZih0KkcqKEcrWSk8MTw8MjIpe2lmKHZvaWQgMCE9PShNPWwuc2NhbkNvbXBsZXRlKHQsQyxlLFAsSSxVLFYsTyx6LEgscSkpKXJldHVybiBNO2NvbnRpbnVlfX1lbHNle2lmKHQqTWF0aC5taW4oRyxZKTwxMjgpe2lmKHZvaWQgMCE9PShNPW8odCxDLGUsTixQLEksVSxWLE8seixILHEpKSlyZXR1cm4gTTtjb250aW51ZX1pZih0KkcqWTwxPDwyMil7aWYodm9pZCAwIT09KE09bC5zY2FuQmlwYXJ0aXRlKHQsQyxlLE4sUCxJLFUsVixPLHosSCxxKSkpcmV0dXJuIE07Y29udGludWV9fXZhciBXPWYodCxDLFAsSSxVLFYsRixCKTtpZihQPFcpaWYodCooVy1QKTwxMjgpe2lmKHZvaWQgMCE9PShNPXModCxDKzEsZSxQLFcsVSxWLE8seixILHEpKSlyZXR1cm4gTX1lbHNlIGlmKEM9PT10LTIpe2lmKHZvaWQgMCE9PShNPU4/bC5zd2VlcEJpcGFydGl0ZSh0LGUsTyx6LEgscSxQLFcsVSxWKTpsLnN3ZWVwQmlwYXJ0aXRlKHQsZSxQLFcsVSxWLE8seixILHEpKSlyZXR1cm4gTX1lbHNlIHgoUysrLEMrMSxQLFcsTyx6LE4sLTEvMCwxLzApLHgoUysrLEMrMSxPLHosUCxXLDFeTiwtMS8wLDEvMCk7aWYoVzxJKXt2YXIgWD1jKHQsQyxPLHosSCxxKSxaPUhbRSpYK0NdLEo9aCh0LEMsWCx6LEgscSxaKTtpZihKPHomJngoUysrLEMsVyxJLEoseiwoNHxOKSsoaj8xNjowKSxaLEIpLE88WCYmeChTKyssQyxXLEksTyxYLCgyfE4pKyhqPzE2OjApLEYsWiksWCsxPT09Sil7aWYodm9pZCAwIT09KE09aj9fKHQsQyxlLFcsSSxVLFYsWCxILHFbWF0pOmIodCxDLGUsTixXLEksVSxWLFgsSCxxW1hdKSkpcmV0dXJuIE19ZWxzZSBpZihYPEope3ZhciBLO2lmKGope2lmKEs9bSh0LEMsVyxJLFUsVixaKSxXPEspe3ZhciBRPWgodCxDLFcsSyxVLFYsWik7aWYoQz09PXQtMil7aWYoVzxRJiZ2b2lkIDAhPT0oTT1sLnN3ZWVwQ29tcGxldGUodCxlLFcsUSxVLFYsWCxKLEgscSkpKXJldHVybiBNO2lmKFE8SyYmdm9pZCAwIT09KE09bC5zd2VlcEJpcGFydGl0ZSh0LGUsUSxLLFUsVixYLEosSCxxKSkpcmV0dXJuIE19ZWxzZSBXPFEmJngoUysrLEMrMSxXLFEsWCxKLDE2LC0xLzAsMS8wKSxRPEsmJih4KFMrKyxDKzEsUSxLLFgsSiwwLC0xLzAsMS8wKSx4KFMrKyxDKzEsWCxKLFEsSywxLC0xLzAsMS8wKSl9fWVsc2UgSz1OP2codCxDLFcsSSxVLFYsWik6bSh0LEMsVyxJLFUsVixaKSxXPEsmJihDPT09dC0yP009Tj9sLnN3ZWVwQmlwYXJ0aXRlKHQsZSxYLEosSCxxLFcsSyxVLFYpOmwuc3dlZXBCaXBhcnRpdGUodCxlLFcsSyxVLFYsWCxKLEgscSk6KHgoUysrLEMrMSxXLEssWCxKLE4sLTEvMCwxLzApLHgoUysrLEMrMSxYLEosVyxLLDFeTiwtMS8wLDEvMCkpKX19fX19O3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9dCgiYml0LXR3aWRkbGUiKSxhPXQoIi4vYnJ1dGUiKSxvPWEucGFydGlhbCxzPWEuZnVsbCxsPXQoIi4vc3dlZXAiKSxjPXQoIi4vbWVkaWFuIiksdT10KCIuL3BhcnRpdGlvbiIpLGY9dSgiIShsbz49cDApJiYhKHAxPj1oaSkiKSxoPXUoImxvPT09cDAiKSxwPXUoImxvPHAwIiksZD11KCJoaTw9cDAiKSxtPXUoImxvPD1wMCYmcDA8PWhpIiksZz11KCJsbzxwMCYmcDA8PWhpIiksdj1uLm1hbGxvY0ludDMyKDEwMjQpLHk9bi5tYWxsb2NEb3VibGUoMTAyNCk7ZnVuY3Rpb24geCh0LGUscixuLGksYSxvLHMsbCl7dmFyIGM9Nip0O3ZbY109ZSx2W2MrMV09cix2W2MrMl09bix2W2MrM109aSx2W2MrNF09YSx2W2MrNV09bzt2YXIgdT0yKnQ7eVt1XT1zLHlbdSsxXT1sfWZ1bmN0aW9uIGIodCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgZj0yKnQsaD1sKmYscD1jW2grZV07dDpmb3IodmFyIGQ9aSxtPWkqZjtkPGE7KytkLG0rPWYpe3ZhciBnPW9bbStlXSx2PW9bbStlK3RdO2lmKCEocDxnfHx2PHApJiYoIW58fHAhPT1nKSl7Zm9yKHZhciB5LHg9c1tkXSxiPWUrMTtiPHQ7KytiKXtnPW9bbStiXSx2PW9bbStiK3RdO3ZhciBfPWNbaCtiXSx3PWNbaCtiK3RdO2lmKHY8X3x8dzxnKWNvbnRpbnVlIHR9aWYodm9pZCAwIT09KHk9bj9yKHUseCk6cih4LHUpKSlyZXR1cm4geX19fWZ1bmN0aW9uIF8odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9Mip0LGY9cyp1LGg9bFtmK2VdO3Q6Zm9yKHZhciBwPW4sZD1uKnU7cDxpOysrcCxkKz11KXt2YXIgbT1vW3BdO2lmKG0hPT1jKXt2YXIgZz1hW2QrZV0sdj1hW2QrZSt0XTtpZighKGg8Z3x8djxoKSl7Zm9yKHZhciB5PWUrMTt5PHQ7Kyt5KXtnPWFbZCt5XSx2PWFbZCt5K3RdO3ZhciB4PWxbZit5XSxiPWxbZit5K3RdO2lmKHY8eHx8YjxnKWNvbnRpbnVlIHR9dmFyIF89cihtLGMpO2lmKHZvaWQgMCE9PV8pcmV0dXJuIF99fX19fSx7Ii4vYnJ1dGUiOjEwNSwiLi9tZWRpYW4iOjEwNywiLi9wYXJ0aXRpb24iOjEwOCwiLi9zd2VlcCI6MTEwLCJiaXQtdHdpZGRsZSI6MTAxLCJ0eXBlZGFycmF5LXBvb2wiOjU5MH1dLDEwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvLHMpe2lmKGE8PXIrMSlyZXR1cm4gcjt2YXIgbD1yLGM9YSx1PWErcj4+PjEsZj0yKnQsaD11LHA9b1tmKnUrZV07Zm9yKDtsPGM7KXtpZihjLWw8OCl7aSh0LGUsbCxjLG8scykscD1vW2YqdStlXTticmVha312YXIgZD1jLWwsbT1NYXRoLnJhbmRvbSgpKmQrbHwwLGc9b1tmKm0rZV0sdj1NYXRoLnJhbmRvbSgpKmQrbHwwLHk9b1tmKnYrZV0seD1NYXRoLnJhbmRvbSgpKmQrbHwwLGI9b1tmKngrZV07Zzw9eT9iPj15PyhoPXYscD15KTpnPj1iPyhoPW0scD1nKTooaD14LHA9Yik6eT49Yj8oaD12LHA9eSk6Yj49Zz8oaD1tLHA9Zyk6KGg9eCxwPWIpO2Zvcih2YXIgXz1mKihjLTEpLHc9ZipoLFQ9MDtUPGY7KytULCsrXywrK3cpe3ZhciBrPW9bX107b1tfXT1vW3ddLG9bd109a312YXIgQT1zW2MtMV07c1tjLTFdPXNbaF0sc1toXT1BLGg9bih0LGUsbCxjLTEsbyxzLHApO2ZvcihfPWYqKGMtMSksdz1mKmgsVD0wO1Q8ZjsrK1QsKytfLCsrdyl7az1vW19dO29bX109b1t3XSxvW3ddPWt9QT1zW2MtMV07aWYoc1tjLTFdPXNbaF0sc1toXT1BLHU8aCl7Zm9yKGM9aC0xO2w8YyYmb1tmKihjLTEpK2VdPT09cDspYy09MTtjKz0xfWVsc2V7aWYoIShoPHUpKWJyZWFrO2ZvcihsPWgrMTtsPGMmJm9bZipsK2VdPT09cDspbCs9MX19cmV0dXJuIG4odCxlLHIsdSxvLHMsb1tmKnUrZV0pfTt2YXIgbj10KCIuL3BhcnRpdGlvbiIpKCJsbzxwMCIpO2Z1bmN0aW9uIGkodCxlLHIsbixpLGEpe2Zvcih2YXIgbz0yKnQscz1vKihyKzEpK2UsbD1yKzE7bDxuOysrbCxzKz1vKWZvcih2YXIgYz1pW3NdLHU9bCxmPW8qKGwtMSk7dT5yJiZpW2YrZV0+YzstLXUsZi09byl7Zm9yKHZhciBoPWYscD1mK28sZD0wO2Q8bzsrK2QsKytoLCsrcCl7dmFyIG09aVtoXTtpW2hdPWlbcF0saVtwXT1tfXZhciBnPWFbdV07YVt1XT1hW3UtMV0sYVt1LTFdPWd9fX0seyIuL3BhcnRpdGlvbiI6MTA4fV0sMTA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblt0XX07dmFyIG49eyJsbz09PXAwIjpmdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9Mip0LGw9cypyLGM9bCx1PXIsZj1lLGg9cjtuPmg7KytoLGwrPXMpe2lmKGlbbCtmXT09PW8paWYodT09PWgpdSs9MSxjKz1zO2Vsc2V7Zm9yKHZhciBwPTA7cz5wOysrcCl7dmFyIGQ9aVtsK3BdO2lbbCtwXT1pW2NdLGlbYysrXT1kfXZhciBtPWFbaF07YVtoXT1hW3VdLGFbdSsrXT1tfX1yZXR1cm4gdX0sImxvPHAwIjpmdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9Mip0LGw9cypyLGM9bCx1PXIsZj1lLGg9cjtuPmg7KytoLGwrPXMpe2lmKGlbbCtmXTxvKWlmKHU9PT1oKXUrPTEsYys9cztlbHNle2Zvcih2YXIgcD0wO3M+cDsrK3Ape3ZhciBkPWlbbCtwXTtpW2wrcF09aVtjXSxpW2MrK109ZH12YXIgbT1hW2hdO2FbaF09YVt1XSxhW3UrK109bX19cmV0dXJuIHV9LCJsbzw9cDAiOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz0yKnQsbD1zKnIsYz1sLHU9cixmPXQrZSxoPXI7bj5oOysraCxsKz1zKXtpZihpW2wrZl08PW8paWYodT09PWgpdSs9MSxjKz1zO2Vsc2V7Zm9yKHZhciBwPTA7cz5wOysrcCl7dmFyIGQ9aVtsK3BdO2lbbCtwXT1pW2NdLGlbYysrXT1kfXZhciBtPWFbaF07YVtoXT1hW3VdLGFbdSsrXT1tfX1yZXR1cm4gdX0sImhpPD1wMCI6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTIqdCxsPXMqcixjPWwsdT1yLGY9dCtlLGg9cjtuPmg7KytoLGwrPXMpe2lmKGlbbCtmXTw9bylpZih1PT09aCl1Kz0xLGMrPXM7ZWxzZXtmb3IodmFyIHA9MDtzPnA7KytwKXt2YXIgZD1pW2wrcF07aVtsK3BdPWlbY10saVtjKytdPWR9dmFyIG09YVtoXTthW2hdPWFbdV0sYVt1KytdPW19fXJldHVybiB1fSwibG88cDAmJnAwPD1oaSI6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTIqdCxsPXMqcixjPWwsdT1yLGY9ZSxoPXQrZSxwPXI7bj5wOysrcCxsKz1zKXt2YXIgZD1pW2wrZl0sbT1pW2wraF07aWYoZDxvJiZvPD1tKWlmKHU9PT1wKXUrPTEsYys9cztlbHNle2Zvcih2YXIgZz0wO3M+ZzsrK2cpe3ZhciB2PWlbbCtnXTtpW2wrZ109aVtjXSxpW2MrK109dn12YXIgeT1hW3BdO2FbcF09YVt1XSxhW3UrK109eX19cmV0dXJuIHV9LCJsbzw9cDAmJnAwPD1oaSI6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTIqdCxsPXMqcixjPWwsdT1yLGY9ZSxoPXQrZSxwPXI7bj5wOysrcCxsKz1zKXt2YXIgZD1pW2wrZl0sbT1pW2wraF07aWYoZDw9byYmbzw9bSlpZih1PT09cCl1Kz0xLGMrPXM7ZWxzZXtmb3IodmFyIGc9MDtzPmc7KytnKXt2YXIgdj1pW2wrZ107aVtsK2ddPWlbY10saVtjKytdPXZ9dmFyIHk9YVtwXTthW3BdPWFbdV0sYVt1KytdPXl9fXJldHVybiB1fSwiIShsbz49cDApJiYhKHAxPj1oaSkiOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7Zm9yKHZhciBsPTIqdCxjPWwqcix1PWMsZj1yLGg9ZSxwPXQrZSxkPXI7bj5kOysrZCxjKz1sKXt2YXIgbT1pW2MraF0sZz1pW2MrcF07aWYoIShtPj1vfHxzPj1nKSlpZihmPT09ZClmKz0xLHUrPWw7ZWxzZXtmb3IodmFyIHY9MDtsPnY7Kyt2KXt2YXIgeT1pW2Mrdl07aVtjK3ZdPWlbdV0saVt1KytdPXl9dmFyIHg9YVtkXTthW2RdPWFbZl0sYVtmKytdPXh9fXJldHVybiBmfX19LHt9XSwxMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZTw9MTI4P24oMCxlLTEsdCk6ZnVuY3Rpb24gdChlLHIsdSl7dmFyIGY9KHItZSsxKS82fDAsaD1lK2YscD1yLWYsZD1lK3I+PjEsbT1kLWYsZz1kK2Ysdj1oLHk9bSx4PWQsYj1nLF89cCx3PWUrMSxUPXItMSxrPTA7bCh2LHksdSkmJihrPXYsdj15LHk9ayk7bChiLF8sdSkmJihrPWIsYj1fLF89ayk7bCh2LHgsdSkmJihrPXYsdj14LHg9ayk7bCh5LHgsdSkmJihrPXkseT14LHg9ayk7bCh2LGIsdSkmJihrPXYsdj1iLGI9ayk7bCh4LGIsdSkmJihrPXgseD1iLGI9ayk7bCh5LF8sdSkmJihrPXkseT1fLF89ayk7bCh5LHgsdSkmJihrPXkseT14LHg9ayk7bChiLF8sdSkmJihrPWIsYj1fLF89ayk7Zm9yKHZhciBBPXVbMip5XSxNPXVbMip5KzFdLFM9dVsyKmJdLEU9dVsyKmIrMV0sTD0yKnYsQz0yKngsUD0yKl8sST0yKmgsTz0yKmQsej0yKnAsRD0wO0Q8MjsrK0Qpe3ZhciBSPXVbTCtEXSxGPXVbQytEXSxCPXVbUCtEXTt1W0krRF09Uix1W08rRF09Rix1W3orRF09Qn1hKG0sZSx1KSxhKGcscix1KTtmb3IodmFyIE49dztOPD1UOysrTilpZihjKE4sQSxNLHUpKU4hPT13JiZpKE4sdyx1KSwrK3c7ZWxzZSBpZighYyhOLFMsRSx1KSlmb3IoOzspe2lmKGMoVCxTLEUsdSkpe2MoVCxBLE0sdSk/KG8oTix3LFQsdSksKyt3LC0tVCk6KGkoTixULHUpLC0tVCk7YnJlYWt9aWYoLS1UPE4pYnJlYWt9cyhlLHctMSxBLE0sdSkscyhyLFQrMSxTLEUsdSksdy0yLWU8PTMyP24oZSx3LTIsdSk6dChlLHctMix1KTtyLShUKzIpPD0zMj9uKFQrMixyLHUpOnQoVCsyLHIsdSk7VC13PD0zMj9uKHcsVCx1KTp0KHcsVCx1KX0oMCxlLTEsdCl9O2Z1bmN0aW9uIG4odCxlLHIpe2Zvcih2YXIgbj0yKih0KzEpLGk9dCsxO2k8PWU7KytpKXtmb3IodmFyIGE9cltuKytdLG89cltuKytdLHM9aSxsPW4tMjtzLS0gPnQ7KXt2YXIgYz1yW2wtMl0sdT1yW2wtMV07aWYoYzxhKWJyZWFrO2lmKGM9PT1hJiZ1PG8pYnJlYWs7cltsXT1jLHJbbCsxXT11LGwtPTJ9cltsXT1hLHJbbCsxXT1vfX1mdW5jdGlvbiBpKHQsZSxyKXtlKj0yO3ZhciBuPXJbdCo9Ml0saT1yW3QrMV07clt0XT1yW2VdLHJbdCsxXT1yW2UrMV0scltlXT1uLHJbZSsxXT1pfWZ1bmN0aW9uIGEodCxlLHIpe2UqPTIsclt0Kj0yXT1yW2VdLHJbdCsxXT1yW2UrMV19ZnVuY3Rpb24gbyh0LGUscixuKXtlKj0yLHIqPTI7dmFyIGk9blt0Kj0yXSxhPW5bdCsxXTtuW3RdPW5bZV0sblt0KzFdPW5bZSsxXSxuW2VdPW5bcl0sbltlKzFdPW5bcisxXSxuW3JdPWksbltyKzFdPWF9ZnVuY3Rpb24gcyh0LGUscixuLGkpe2UqPTIsaVt0Kj0yXT1pW2VdLGlbZV09cixpW3QrMV09aVtlKzFdLGlbZSsxXT1ufWZ1bmN0aW9uIGwodCxlLHIpe2UqPTI7dmFyIG49clt0Kj0yXSxpPXJbZV07cmV0dXJuIShuPGkpJiYobiE9PWl8fHJbdCsxXT5yW2UrMV0pfWZ1bmN0aW9uIGModCxlLHIsbil7dmFyIGk9blt0Kj0yXTtyZXR1cm4gaTxlfHxpPT09ZSYmblt0KzFdPHJ9fSx7fV0sMTEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aW5pdDpmdW5jdGlvbih0KXt2YXIgZT1pLm5leHRQb3cyKHQpO28ubGVuZ3RoPGUmJihuLmZyZWUobyksbz1uLm1hbGxvY0ludDMyKGUpKTtzLmxlbmd0aDxlJiYobi5mcmVlKHMpLHM9bi5tYWxsb2NJbnQzMihlKSk7bC5sZW5ndGg8ZSYmKG4uZnJlZShsKSxsPW4ubWFsbG9jSW50MzIoZSkpO2MubGVuZ3RoPGUmJihuLmZyZWUoYyksYz1uLm1hbGxvY0ludDMyKGUpKTt1Lmxlbmd0aDxlJiYobi5mcmVlKHUpLHU9bi5tYWxsb2NJbnQzMihlKSk7Zi5sZW5ndGg8ZSYmKG4uZnJlZShmKSxmPW4ubWFsbG9jSW50MzIoZSkpO3ZhciByPTgqZTtoLmxlbmd0aDxyJiYobi5mcmVlKGgpLGg9bi5tYWxsb2NEb3VibGUocikpfSxzd2VlcEJpcGFydGl0ZTpmdW5jdGlvbih0LGUscixuLGksdSxmLG0sZyx2KXtmb3IodmFyIHk9MCx4PTIqdCxiPXQtMSxfPXgtMSx3PXI7dzxuOysrdyl7dmFyIFQ9dVt3XSxrPXgqdztoW3krK109aVtrK2JdLGhbeSsrXT0tKFQrMSksaFt5KytdPWlbaytfXSxoW3krK109VH1mb3Iodz1mO3c8bTsrK3cpe1Q9dlt3XSsoMTw8MjgpO3ZhciBBPXgqdztoW3krK109Z1tBK2JdLGhbeSsrXT0tVCxoW3krK109Z1tBK19dLGhbeSsrXT1UfXZhciBNPXk+Pj4xO2EoaCxNKTt2YXIgUz0wLEU9MDtmb3Iodz0wO3c8TTsrK3cpe3ZhciBMPTB8aFsyKncrMV07aWYoTD49MTw8MjgpcChsLGMsRS0tLEw9TC0oMTw8MjgpfDApO2Vsc2UgaWYoTD49MClwKG8scyxTLS0sTCk7ZWxzZSBpZihMPD0tKDE8PDI4KSl7TD0tTC0oMTw8MjgpfDA7Zm9yKHZhciBDPTA7QzxTOysrQyl7aWYodm9pZCAwIT09KFA9ZShvW0NdLEwpKSlyZXR1cm4gUH1kKGwsYyxFKyssTCl9ZWxzZXtMPS1MLTF8MDtmb3IoQz0wO0M8RTsrK0Mpe3ZhciBQO2lmKHZvaWQgMCE9PShQPWUoTCxsW0NdKSkpcmV0dXJuIFB9ZChvLHMsUysrLEwpfX19LHN3ZWVwQ29tcGxldGU6ZnVuY3Rpb24odCxlLHIsbixpLG0sZyx2LHkseCl7Zm9yKHZhciBiPTAsXz0yKnQsdz10LTEsVD1fLTEsaz1yO2s8bjsrK2spe3ZhciBBPW1ba10rMTw8MSxNPV8qaztoW2IrK109aVtNK3ddLGhbYisrXT0tQSxoW2IrK109aVtNK1RdLGhbYisrXT1BfWZvcihrPWc7azx2Oysrayl7QT14W2tdKzE8PDE7dmFyIFM9XyprO2hbYisrXT15W1Mrd10saFtiKytdPTF8LUEsaFtiKytdPXlbUytUXSxoW2IrK109MXxBfXZhciBFPWI+Pj4xO2EoaCxFKTt2YXIgTD0wLEM9MCxQPTA7Zm9yKGs9MDtrPEU7KytrKXt2YXIgST0wfGhbMiprKzFdLE89MSZJO2lmKGs8RS0xJiZJPj4xPT1oWzIqayszXT4+MSYmKE89MixrKz0xKSxJPDApe2Zvcih2YXIgej0tKEk+PjEpLTEsRD0wO0Q8UDsrK0Qpe2lmKHZvaWQgMCE9PShSPWUodVtEXSx6KSkpcmV0dXJuIFJ9aWYoMCE9PU8pZm9yKEQ9MDtEPEw7KytEKXtpZih2b2lkIDAhPT0oUj1lKG9bRF0seikpKXJldHVybiBSfWlmKDEhPT1PKWZvcihEPTA7RDxDOysrRCl7dmFyIFI7aWYodm9pZCAwIT09KFI9ZShsW0RdLHopKSlyZXR1cm4gUn0wPT09Tz9kKG8scyxMKysseik6MT09PU8/ZChsLGMsQysrLHopOjI9PT1PJiZkKHUsZixQKysseil9ZWxzZXt6PShJPj4xKS0xOzA9PT1PP3AobyxzLEwtLSx6KToxPT09Tz9wKGwsYyxDLS0seik6Mj09PU8mJnAodSxmLFAtLSx6KX19fSxzY2FuQmlwYXJ0aXRlOmZ1bmN0aW9uKHQsZSxyLG4saSxsLGMsdSxmLG0sZyx2KXt2YXIgeT0wLHg9Mip0LGI9ZSxfPWUrdCx3PTEsVD0xO24/VD0xPDwyODp3PTE8PDI4O2Zvcih2YXIgaz1pO2s8bDsrK2spe3ZhciBBPWsrdyxNPXgqaztoW3krK109Y1tNK2JdLGhbeSsrXT0tQSxoW3krK109Y1tNK19dLGhbeSsrXT1BfWZvcihrPWY7azxtOysrayl7QT1rK1Q7dmFyIFM9eCprO2hbeSsrXT1nW1MrYl0saFt5KytdPS1BfXZhciBFPXk+Pj4xO2EoaCxFKTt2YXIgTD0wO2ZvcihrPTA7azxFOysrayl7dmFyIEM9MHxoWzIqaysxXTtpZihDPDApe3ZhciBQPSExO2lmKChBPS1DKT49MTw8Mjg/KFA9IW4sQS09MTw8MjgpOihQPSEhbixBLT0xKSxQKWQobyxzLEwrKyxBKTtlbHNle3ZhciBJPXZbQV0sTz14KkEsej1nW08rZSsxXSxEPWdbTytlKzErdF07dDpmb3IodmFyIFI9MDtSPEw7KytSKXt2YXIgRj1vW1JdLEI9eCpGO2lmKCEoRDxjW0IrZSsxXXx8Y1tCK2UrMSt0XTx6KSl7Zm9yKHZhciBOPWUrMjtOPHQ7KytOKWlmKGdbTytOK3RdPGNbQitOXXx8Y1tCK04rdF08Z1tPK05dKWNvbnRpbnVlIHQ7dmFyIGosVT11W0ZdO2lmKHZvaWQgMCE9PShqPW4/cihJLFUpOnIoVSxJKSkpcmV0dXJuIGp9fX19ZWxzZSBwKG8scyxMLS0sQy13KX19LHNjYW5Db21wbGV0ZTpmdW5jdGlvbih0LGUscixuLGkscyxsLGMsdSxmLHApe2Zvcih2YXIgZD0wLG09Mip0LGc9ZSx2PWUrdCx5PW47eTxpOysreSl7dmFyIHg9eSsoMTw8MjgpLGI9bSp5O2hbZCsrXT1zW2IrZ10saFtkKytdPS14LGhbZCsrXT1zW2Irdl0saFtkKytdPXh9Zm9yKHk9Yzt5PHU7Kyt5KXt4PXkrMTt2YXIgXz1tKnk7aFtkKytdPWZbXytnXSxoW2QrK109LXh9dmFyIHc9ZD4+PjE7YShoLHcpO3ZhciBUPTA7Zm9yKHk9MDt5PHc7Kyt5KXt2YXIgaz0wfGhbMip5KzFdO2lmKGs8MCl7aWYoKHg9LWspPj0xPDwyOClvW1QrK109eC0oMTw8MjgpO2Vsc2V7dmFyIEE9cFt4LT0xXSxNPW0qeCxTPWZbTStlKzFdLEU9ZltNK2UrMSt0XTt0OmZvcih2YXIgTD0wO0w8VDsrK0wpe3ZhciBDPW9bTF0sUD1sW0NdO2lmKFA9PT1BKWJyZWFrO3ZhciBJPW0qQztpZighKEU8c1tJK2UrMV18fHNbSStlKzErdF08Uykpe2Zvcih2YXIgTz1lKzI7Tzx0OysrTylpZihmW00rTyt0XTxzW0krT118fHNbSStPK3RdPGZbTStPXSljb250aW51ZSB0O3ZhciB6PXIoUCxBKTtpZih2b2lkIDAhPT16KXJldHVybiB6fX19fWVsc2V7Zm9yKHg9ay0oMTw8MjgpLEw9VC0xO0w+PTA7LS1MKWlmKG9bTF09PT14KXtmb3IoTz1MKzE7TzxUOysrTylvW08tMV09b1tPXTticmVha30tLVR9fX19O3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9dCgiYml0LXR3aWRkbGUiKSxhPXQoIi4vc29ydCIpLG89bi5tYWxsb2NJbnQzMigxMDI0KSxzPW4ubWFsbG9jSW50MzIoMTAyNCksbD1uLm1hbGxvY0ludDMyKDEwMjQpLGM9bi5tYWxsb2NJbnQzMigxMDI0KSx1PW4ubWFsbG9jSW50MzIoMTAyNCksZj1uLm1hbGxvY0ludDMyKDEwMjQpLGg9bi5tYWxsb2NEb3VibGUoODE5Mik7ZnVuY3Rpb24gcCh0LGUscixuKXt2YXIgaT1lW25dLGE9dFtyLTFdO3RbaV09YSxlW2FdPWl9ZnVuY3Rpb24gZCh0LGUscixuKXt0W3JdPW4sZVtuXT1yfX0seyIuL3NvcnQiOjEwOSwiYml0LXR3aWRkbGUiOjEwMSwidHlwZWRhcnJheS1wb29sIjo1OTB9XSwxMTE6W2Z1bmN0aW9uKHQsZSxyKXt9LHt9XSwxMTI6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKCl7Ci8qIQogKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci4KICoKICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz4KICogQGxpY2Vuc2UgIE1JVAogKi8KInVzZSBzdHJpY3QiO3ZhciBlPXQoImJhc2U2NC1qcyIpLG49dCgiaWVlZTc1NCIpO3IuQnVmZmVyPWEsci5TbG93QnVmZmVyPWZ1bmN0aW9uKHQpeyt0IT10JiYodD0wKTtyZXR1cm4gYS5hbGxvYygrdCl9LHIuSU5TUEVDVF9NQVhfQllURVM9NTA7ZnVuY3Rpb24gaSh0KXtpZih0PjIxNDc0ODM2NDcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gZS5fX3Byb3RvX189YS5wcm90b3R5cGUsZX1mdW5jdGlvbiBhKHQsZSxyKXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gbCh0KX1yZXR1cm4gbyh0LGUscil9ZnVuY3Rpb24gbyh0LGUscil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBmdW5jdGlvbih0LGUpeyJzdHJpbmciPT10eXBlb2YgZSYmIiIhPT1lfHwoZT0idXRmOCIpO2lmKCFhLmlzRW5jb2RpbmcoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTt2YXIgcj0wfGYodCxlKSxuPWkociksbz1uLndyaXRlKHQsZSk7byE9PXImJihuPW4uc2xpY2UoMCxvKSk7cmV0dXJuIG59KHQsZSk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpKXJldHVybiBjKHQpO2lmKG51bGw9PXQpdGhyb3cgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiB0KTtpZihCKHQsQXJyYXlCdWZmZXIpfHx0JiZCKHQuYnVmZmVyLEFycmF5QnVmZmVyKSlyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGU8MHx8dC5ieXRlTGVuZ3RoPGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJvZmZzZXQiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKHQuYnl0ZUxlbmd0aDxlKyhyfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignImxlbmd0aCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7dmFyIG47bj12b2lkIDA9PT1lJiZ2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCxlKTpuZXcgVWludDhBcnJheSh0LGUscik7cmV0dXJuIG4uX19wcm90b19fPWEucHJvdG90eXBlLG59KHQsZSxyKTtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7dmFyIG49dC52YWx1ZU9mJiZ0LnZhbHVlT2YoKTtpZihudWxsIT1uJiZuIT09dClyZXR1cm4gYS5mcm9tKG4sZSxyKTt2YXIgbz1mdW5jdGlvbih0KXtpZihhLmlzQnVmZmVyKHQpKXt2YXIgZT0wfHUodC5sZW5ndGgpLHI9aShlKTtyZXR1cm4gMD09PXIubGVuZ3RofHx0LmNvcHkociwwLDAsZSkscn1pZih2b2lkIDAhPT10Lmxlbmd0aClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHxOKHQubGVuZ3RoKT9pKDApOmModCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJkFycmF5LmlzQXJyYXkodC5kYXRhKSlyZXR1cm4gYyh0LmRhdGEpfSh0KTtpZihvKXJldHVybiBvO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIGEuZnJvbSh0W1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLGUscik7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgdCl9ZnVuY3Rpb24gcyh0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiBsKHQpe3JldHVybiBzKHQpLGkodDwwPzA6MHx1KHQpKX1mdW5jdGlvbiBjKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDwwPzA6MHx1KHQubGVuZ3RoKSxyPWkoZSksbj0wO248ZTtuKz0xKXJbbl09MjU1JnRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gdSh0KXtpZih0Pj0yMTQ3NDgzNjQ3KXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IisyMTQ3NDgzNjQ3Li50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfHR9ZnVuY3Rpb24gZih0LGUpe2lmKGEuaXNCdWZmZXIodCkpcmV0dXJuIHQubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KXx8Qih0LEFycmF5QnVmZmVyKSlyZXR1cm4gdC5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCk7dmFyIHI9dC5sZW5ndGgsbj1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFuJiYwPT09cilyZXR1cm4gMDtmb3IodmFyIGk9ITE7Oylzd2l0Y2goZSl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBEKHQpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gUih0KS5sZW5ndGg7ZGVmYXVsdDppZihpKXJldHVybiBuPy0xOkQodCkubGVuZ3RoO2U9KCIiK2UpLnRvTG93ZXJDYXNlKCksaT0hMH19ZnVuY3Rpb24gaCh0LGUscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PWV8fGU8MCkmJihlPTApLGU+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KGU+Pj49MCkpcmV0dXJuIiI7Zm9yKHR8fCh0PSJ1dGY4Iik7Oylzd2l0Y2godCl7Y2FzZSJoZXgiOnJldHVybiBNKHRoaXMsZSxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBUKHRoaXMsZSxyKTtjYXNlImFzY2lpIjpyZXR1cm4gayh0aGlzLGUscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gQSh0aGlzLGUscik7Y2FzZSJiYXNlNjQiOnJldHVybiB3KHRoaXMsZSxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIFModGhpcyxlLHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3QpO3Q9KHQrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gcCh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIGQodCxlLHIsbixpKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxOKHI9K3IpJiYocj1pPzA6dC5sZW5ndGgtMSkscjwwJiYocj10Lmxlbmd0aCtyKSxyPj10Lmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPXQubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIGUmJihlPWEuZnJvbShlLG4pKSxhLmlzQnVmZmVyKGUpKXJldHVybiAwPT09ZS5sZW5ndGg/LTE6bSh0LGUscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgZSlyZXR1cm4gZSY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHQsZSxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKHQsZSxyKTptKHQsW2VdLHIsbixpKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBtKHQsZSxyLG4saSl7dmFyIGEsbz0xLHM9dC5sZW5ndGgsbD1lLmxlbmd0aDtpZih2b2lkIDAhPT1uJiYoInVjczIiPT09KG49U3RyaW5nKG4pLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09bnx8InV0ZjE2bGUiPT09bnx8InV0Zi0xNmxlIj09PW4pKXtpZih0Lmxlbmd0aDwyfHxlLmxlbmd0aDwyKXJldHVybi0xO289MixzLz0yLGwvPTIsci89Mn1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIDE9PT1vP3RbZV06dC5yZWFkVUludDE2QkUoZSpvKX1pZihpKXt2YXIgdT0tMTtmb3IoYT1yO2E8czthKyspaWYoYyh0LGEpPT09YyhlLC0xPT09dT8wOmEtdSkpe2lmKC0xPT09dSYmKHU9YSksYS11KzE9PT1sKXJldHVybiB1Km99ZWxzZS0xIT09dSYmKGEtPWEtdSksdT0tMX1lbHNlIGZvcihyK2w+cyYmKHI9cy1sKSxhPXI7YT49MDthLS0pe2Zvcih2YXIgZj0hMCxoPTA7aDxsO2grKylpZihjKHQsYStoKSE9PWMoZSxoKSl7Zj0hMTticmVha31pZihmKXJldHVybiBhfXJldHVybi0xfWZ1bmN0aW9uIGcodCxlLHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGk9dC5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+aSYmKG49aSk6bj1pO3ZhciBhPWUubGVuZ3RoO24+YS8yJiYobj1hLzIpO2Zvcih2YXIgbz0wO288bjsrK28pe3ZhciBzPXBhcnNlSW50KGUuc3Vic3RyKDIqbywyKSwxNik7aWYoTihzKSlyZXR1cm4gbzt0W3Irb109c31yZXR1cm4gb31mdW5jdGlvbiB2KHQsZSxyLG4pe3JldHVybiBGKEQoZSx0Lmxlbmd0aC1yKSx0LHIsbil9ZnVuY3Rpb24geSh0LGUscixuKXtyZXR1cm4gRihmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaCgyNTUmdC5jaGFyQ29kZUF0KHIpKTtyZXR1cm4gZX0oZSksdCxyLG4pfWZ1bmN0aW9uIHgodCxlLHIsbil7cmV0dXJuIHkodCxlLHIsbil9ZnVuY3Rpb24gYih0LGUscixuKXtyZXR1cm4gRihSKGUpLHQscixuKX1mdW5jdGlvbiBfKHQsZSxyLG4pe3JldHVybiBGKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG4saSxhPVtdLG89MDtvPHQubGVuZ3RoJiYhKChlLT0yKTwwKTsrK28pcj10LmNoYXJDb2RlQXQobyksbj1yPj44LGk9ciUyNTYsYS5wdXNoKGkpLGEucHVzaChuKTtyZXR1cm4gYX0oZSx0Lmxlbmd0aC1yKSx0LHIsbil9ZnVuY3Rpb24gdyh0LHIsbil7cmV0dXJuIDA9PT1yJiZuPT09dC5sZW5ndGg/ZS5mcm9tQnl0ZUFycmF5KHQpOmUuZnJvbUJ5dGVBcnJheSh0LnNsaWNlKHIsbikpfWZ1bmN0aW9uIFQodCxlLHIpe3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBuPVtdLGk9ZTtpPHI7KXt2YXIgYSxvLHMsbCxjPXRbaV0sdT1udWxsLGY9Yz4yMzk/NDpjPjIyMz8zOmM+MTkxPzI6MTtpZihpK2Y8PXIpc3dpdGNoKGYpe2Nhc2UgMTpjPDEyOCYmKHU9Yyk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYoYT10W2krMV0pKSYmKGw9KDMxJmMpPDw2fDYzJmEpPjEyNyYmKHU9bCk7YnJlYWs7Y2FzZSAzOmE9dFtpKzFdLG89dFtpKzJdLDEyOD09KDE5MiZhKSYmMTI4PT0oMTkyJm8pJiYobD0oMTUmYyk8PDEyfCg2MyZhKTw8Nnw2MyZvKT4yMDQ3JiYobDw1NTI5Nnx8bD41NzM0MykmJih1PWwpO2JyZWFrO2Nhc2UgNDphPXRbaSsxXSxvPXRbaSsyXSxzPXRbaSszXSwxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYobD0oMTUmYyk8PDE4fCg2MyZhKTw8MTJ8KDYzJm8pPDw2fDYzJnMpPjY1NTM1JiZsPDExMTQxMTImJih1PWwpfW51bGw9PT11Pyh1PTY1NTMzLGY9MSk6dT42NTUzNSYmKHUtPTY1NTM2LG4ucHVzaCh1Pj4+MTAmMTAyM3w1NTI5NiksdT01NjMyMHwxMDIzJnUpLG4ucHVzaCh1KSxpKz1mfXJldHVybiBmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZihlPD00MDk2KXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyx0KTt2YXIgcj0iIixuPTA7Zm9yKDtuPGU7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHQuc2xpY2UobixuKz00MDk2KSk7cmV0dXJuIHJ9KG4pfXIua01heExlbmd0aD0yMTQ3NDgzNjQ3LGEuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbigpe3RyeXt2YXIgdD1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gdC5fX3Byb3RvX189e19fcHJvdG9fXzpVaW50OEFycmF5LnByb3RvdHlwZSxmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fSw0Mj09PXQuZm9vKCl9Y2F0Y2godCl7cmV0dXJuITF9fSgpLGEuVFlQRURfQVJSQVlfU1VQUE9SVHx8InVuZGVmaW5lZCI9PXR5cGVvZiBjb25zb2xlfHwiZnVuY3Rpb24iIT10eXBlb2YgY29uc29sZS5lcnJvcnx8Y29uc29sZS5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGEucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKGEuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihhLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPVN5bWJvbC5zcGVjaWVzJiZhW1N5bWJvbC5zcGVjaWVzXT09PWEmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFN5bWJvbC5zcGVjaWVzLHt2YWx1ZTpudWxsLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExfSksYS5wb29sU2l6ZT04MTkyLGEuZnJvbT1mdW5jdGlvbih0LGUscil7cmV0dXJuIG8odCxlLHIpfSxhLnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUsYS5fX3Byb3RvX189VWludDhBcnJheSxhLmFsbG9jPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3JldHVybiBzKHQpLHQ8PTA/aSh0KTp2b2lkIDAhPT1lPyJzdHJpbmciPT10eXBlb2Ygcj9pKHQpLmZpbGwoZSxyKTppKHQpLmZpbGwoZSk6aSh0KX0odCxlLHIpfSxhLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQpfSxhLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0KX0sYS5pc0J1ZmZlcj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmITA9PT10Ll9pc0J1ZmZlciYmdCE9PWEucHJvdG90eXBlfSxhLmNvbXBhcmU9ZnVuY3Rpb24odCxlKXtpZihCKHQsVWludDhBcnJheSkmJih0PWEuZnJvbSh0LHQub2Zmc2V0LHQuYnl0ZUxlbmd0aCkpLEIoZSxVaW50OEFycmF5KSYmKGU9YS5mcm9tKGUsZS5vZmZzZXQsZS5ieXRlTGVuZ3RoKSksIWEuaXNCdWZmZXIodCl8fCFhLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKHQ9PT1lKXJldHVybiAwO2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MCxvPU1hdGgubWluKHIsbik7aTxvOysraSlpZih0W2ldIT09ZVtpXSl7cj10W2ldLG49ZVtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LGEuaXNFbmNvZGluZz1mdW5jdGlvbih0KXtzd2l0Y2goU3RyaW5nKHQpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sYS5jb25jYXQ9ZnVuY3Rpb24odCxlKXtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PXQubGVuZ3RoKXJldHVybiBhLmFsbG9jKDApO3ZhciByO2lmKHZvaWQgMD09PWUpZm9yKGU9MCxyPTA7cjx0Lmxlbmd0aDsrK3IpZSs9dFtyXS5sZW5ndGg7dmFyIG49YS5hbGxvY1Vuc2FmZShlKSxpPTA7Zm9yKHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG89dFtyXTtpZihCKG8sVWludDhBcnJheSkmJihvPWEuZnJvbShvKSksIWEuaXNCdWZmZXIobykpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO28uY29weShuLGkpLGkrPW8ubGVuZ3RofXJldHVybiBufSxhLmJ5dGVMZW5ndGg9ZixhLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsYS5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgZT0wO2U8dDtlKz0yKXAodGhpcyxlLGUrMSk7cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9NClwKHRoaXMsZSxlKzMpLHAodGhpcyxlKzEsZSsyKTtyZXR1cm4gdGhpc30sYS5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgZT0wO2U8dDtlKz04KXAodGhpcyxlLGUrNykscCh0aGlzLGUrMSxlKzYpLHAodGhpcyxlKzIsZSs1KSxwKHRoaXMsZSszLGUrNCk7cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT10PyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP1QodGhpcywwLHQpOmguYXBwbHkodGhpcyxhcmd1bWVudHMpfSxhLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1hLnByb3RvdHlwZS50b1N0cmluZyxhLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7aWYoIWEuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09dHx8MD09PWEuY29tcGFyZSh0aGlzLHQpfSxhLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9IiIsZT1yLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiB0PXRoaXMudG9TdHJpbmcoImhleCIsMCxlKS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3RoPmUmJih0Kz0iIC4uLiAiKSwiPEJ1ZmZlciAiK3QrIj4ifSxhLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYoQih0LFVpbnQ4QXJyYXkpJiYodD1hLmZyb20odCx0Lm9mZnNldCx0LmJ5dGVMZW5ndGgpKSwhYS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB0KTtpZih2b2lkIDA9PT1lJiYoZT0wKSx2b2lkIDA9PT1yJiYocj10P3QubGVuZ3RoOjApLHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSxlPDB8fHI+dC5sZW5ndGh8fG48MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobj49aSYmZT49cilyZXR1cm4gMDtpZihuPj1pKXJldHVybi0xO2lmKGU+PXIpcmV0dXJuIDE7aWYodGhpcz09PXQpcmV0dXJuIDA7Zm9yKHZhciBvPShpPj4+PTApLShuPj4+PTApLHM9KHI+Pj49MCktKGU+Pj49MCksbD1NYXRoLm1pbihvLHMpLGM9dGhpcy5zbGljZShuLGkpLHU9dC5zbGljZShlLHIpLGY9MDtmPGw7KytmKWlmKGNbZl0hPT11W2ZdKXtvPWNbZl0scz11W2ZdO2JyZWFrfXJldHVybiBvPHM/LTE6czxvPzE6MH0sYS5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24odCxlLHIpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKHQsZSxyKX0sYS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGQodGhpcyx0LGUsciwhMCl9LGEucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZCh0aGlzLHQsZSxyLCExKX0sYS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwPT09ZSluPSJ1dGY4IixyPXRoaXMubGVuZ3RoLGU9MDtlbHNlIGlmKHZvaWQgMD09PXImJiJzdHJpbmciPT10eXBlb2YgZSluPWUscj10aGlzLmxlbmd0aCxlPTA7ZWxzZXtpZighaXNGaW5pdGUoZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO2U+Pj49MCxpc0Zpbml0ZShyKT8ocj4+Pj0wLHZvaWQgMD09PW4mJihuPSJ1dGY4IikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLWU7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLHQubGVuZ3RoPjAmJihyPDB8fGU8MCl8fGU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7bnx8KG49InV0ZjgiKTtmb3IodmFyIGE9ITE7Oylzd2l0Y2gobil7Y2FzZSJoZXgiOnJldHVybiBnKHRoaXMsdCxlLHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHYodGhpcyx0LGUscik7Y2FzZSJhc2NpaSI6cmV0dXJuIHkodGhpcyx0LGUscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4geCh0aGlzLHQsZSxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIGIodGhpcyx0LGUscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBfKHRoaXMsdCxlLHIpO2RlZmF1bHQ6aWYoYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksYT0hMH19LGEucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07ZnVuY3Rpb24gayh0LGUscil7dmFyIG49IiI7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIGk9ZTtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JnRbaV0pO3JldHVybiBufWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPSIiO3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBpPWU7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbaV0pO3JldHVybiBufWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBuPXQubGVuZ3RoOyghZXx8ZTwwKSYmKGU9MCksKCFyfHxyPDB8fHI+bikmJihyPW4pO2Zvcih2YXIgaT0iIixhPWU7YTxyOysrYSlpKz16KHRbYV0pO3JldHVybiBpfWZ1bmN0aW9uIFModCxlLHIpe2Zvcih2YXIgbj10LnNsaWNlKGUsciksaT0iIixhPTA7YTxuLmxlbmd0aDthKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUoblthXSsyNTYqblthKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBFKHQsZSxyKXtpZih0JTEhPTB8fHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYodCtlPnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBMKHQsZSxyLG4saSxvKXtpZighYS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYoZT5pfHxlPG8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHIrbj50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gQyh0LGUscixuLGksYSl7aWYocituPnQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFAodCxlLHIsaSxhKXtyZXR1cm4gZT0rZSxyPj4+PTAsYXx8Qyh0LDAsciw0KSxuLndyaXRlKHQsZSxyLGksMjMsNCkscis0fWZ1bmN0aW9uIEkodCxlLHIsaSxhKXtyZXR1cm4gZT0rZSxyPj4+PTAsYXx8Qyh0LDAsciw4KSxuLndyaXRlKHQsZSxyLGksNTIsOCkscis4fWEucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGg7KHQ9fn50KTwwPyh0Kz1yKTwwJiYodD0wKTp0PnImJih0PXIpLChlPXZvaWQgMD09PWU/cjp+fmUpPDA/KGUrPXIpPDAmJihlPTApOmU+ciYmKGU9ciksZTx0JiYoZT10KTt2YXIgbj10aGlzLnN1YmFycmF5KHQsZSk7cmV0dXJuIG4uX19wcm90b19fPWEucHJvdG90eXBlLG59LGEucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8RSh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3RdLGk9MSxhPTA7KythPGUmJihpKj0yNTYpOyluKz10aGlzW3QrYV0qaTtyZXR1cm4gbn0sYS5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxFKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdCstLWVdLGk9MTtlPjAmJihpKj0yNTYpOyluKz10aGlzW3QrLS1lXSppO3JldHVybiBufSxhLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCwxLHRoaXMubGVuZ3RoKSx0aGlzW3RdfSxhLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCwyLHRoaXMubGVuZ3RoKSx0aGlzW3RdfHRoaXNbdCsxXTw8OH0sYS5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XTw8OHx0aGlzW3QrMV19LGEucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDQsdGhpcy5sZW5ndGgpLCh0aGlzW3RdfHRoaXNbdCsxXTw8OHx0aGlzW3QrMl08PDE2KSsxNjc3NzIxNip0aGlzW3QrM119LGEucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbdF0rKHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXSl9LGEucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxFKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdF0saT0xLGE9MDsrK2E8ZSYmKGkqPTI1Nik7KW4rPXRoaXNbdCthXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCplKSksbn0sYS5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEUodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49ZSxpPTEsYT10aGlzW3QrLS1uXTtuPjAmJihpKj0yNTYpOylhKz10aGlzW3QrLS1uXSppO3JldHVybiBhPj0oaSo9MTI4KSYmKGEtPU1hdGgucG93KDIsOCplKSksYX0sYS5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1t0XT8tMSooMjU1LXRoaXNbdF0rMSk6dGhpc1t0XX0sYS5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24odCxlKXt0Pj4+PTAsZXx8RSh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdF18dGhpc1t0KzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxhLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih0LGUpe3Q+Pj49MCxlfHxFKHQsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1t0KzFdfHRoaXNbdF08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LGEucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsNCx0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNnx0aGlzW3QrM108PDI0fSxhLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDI0fHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXX0sYS5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw0LHRoaXMubGVuZ3RoKSxuLnJlYWQodGhpcyx0LCEwLDIzLDQpfSxhLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDQsdGhpcy5sZW5ndGgpLG4ucmVhZCh0aGlzLHQsITEsMjMsNCl9LGEucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDgsdGhpcy5sZW5ndGgpLG4ucmVhZCh0aGlzLHQsITAsNTIsOCl9LGEucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDgsdGhpcy5sZW5ndGgpLG4ucmVhZCh0aGlzLHQsITEsNTIsOCl9LGEucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKHQsZSxyLG4peyh0PSt0LGU+Pj49MCxyPj4+PTAsbil8fEwodGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT0xLGE9MDtmb3IodGhpc1tlXT0yNTUmdDsrK2E8ciYmKGkqPTI1Nik7KXRoaXNbZSthXT10L2kmMjU1O3JldHVybiBlK3J9LGEucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKHQsZSxyLG4peyh0PSt0LGU+Pj49MCxyPj4+PTAsbil8fEwodGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT1yLTEsYT0xO2Zvcih0aGlzW2UraV09MjU1JnQ7LS1pPj0wJiYoYSo9MjU2KTspdGhpc1tlK2ldPXQvYSYyNTU7cmV0dXJuIGUrcn0sYS5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEwodGhpcyx0LGUsMSwyNTUsMCksdGhpc1tlXT0yNTUmdCxlKzF9LGEucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDIsNjU1MzUsMCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxhLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TCh0aGlzLHQsZSwyLDY1NTM1LDApLHRoaXNbZV09dD4+PjgsdGhpc1tlKzFdPTI1NSZ0LGUrMn0sYS5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEwodGhpcyx0LGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbZSszXT10Pj4+MjQsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrMV09dD4+PjgsdGhpc1tlXT0yNTUmdCxlKzR9LGEucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2VdPXQ+Pj4yNCx0aGlzW2UrMV09dD4+PjE2LHRoaXNbZSsyXT10Pj4+OCx0aGlzW2UrM109MjU1JnQsZSs0fSxhLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtMKHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgYT0wLG89MSxzPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihvKj0yNTYpOyl0PDAmJjA9PT1zJiYwIT09dGhpc1tlK2EtMV0mJihzPTEpLHRoaXNbZSthXT0odC9vPj4wKS1zJjI1NTtyZXR1cm4gZStyfSxhLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtMKHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgYT1yLTEsbz0xLHM9MDtmb3IodGhpc1tlK2FdPTI1NSZ0Oy0tYT49MCYmKG8qPTI1Nik7KXQ8MCYmMD09PXMmJjAhPT10aGlzW2UrYSsxXSYmKHM9MSksdGhpc1tlK2FdPSh0L28+PjApLXMmMjU1O3JldHVybiBlK3J9LGEucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEwodGhpcyx0LGUsMSwxMjcsLTEyOCksdDwwJiYodD0yNTUrdCsxKSx0aGlzW2VdPTI1NSZ0LGUrMX0sYS5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TCh0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxhLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCxlKzJ9LGEucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEwodGhpcyx0LGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW2VdPTI1NSZ0LHRoaXNbZSsxXT10Pj4+OCx0aGlzW2UrMl09dD4+PjE2LHRoaXNbZSszXT10Pj4+MjQsZSs0fSxhLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdDwwJiYodD00Mjk0OTY3Mjk1K3QrMSksdGhpc1tlXT10Pj4+MjQsdGhpc1tlKzFdPXQ+Pj4xNix0aGlzW2UrMl09dD4+PjgsdGhpc1tlKzNdPTI1NSZ0LGUrNH0sYS5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gUCh0aGlzLHQsZSwhMCxyKX0sYS5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gUCh0aGlzLHQsZSwhMSxyKX0sYS5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEkodGhpcyx0LGUsITAscil9LGEucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBJKHRoaXMsdCxlLCExLHIpfSxhLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCFhLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKHJ8fChyPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCksZT49dC5sZW5ndGgmJihlPXQubGVuZ3RoKSxlfHwoZT0wKSxuPjAmJm48ciYmKG49ciksbj09PXIpcmV0dXJuIDA7aWYoMD09PXQubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwfHxyPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSx0Lmxlbmd0aC1lPG4tciYmKG49dC5sZW5ndGgtZStyKTt2YXIgaT1uLXI7aWYodGhpcz09PXQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKXRoaXMuY29weVdpdGhpbihlLHIsbik7ZWxzZSBpZih0aGlzPT09dCYmcjxlJiZlPG4pZm9yKHZhciBvPWktMTtvPj0wOy0tbyl0W28rZV09dGhpc1tvK3JdO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwodCx0aGlzLnN1YmFycmF5KHIsbiksZSk7cmV0dXJuIGl9LGEucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24odCxlLHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZigic3RyaW5nIj09dHlwZW9mIGU/KG49ZSxlPTAscj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9dGhpcy5sZW5ndGgpLHZvaWQgMCE9PW4mJiJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYhYS5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbik7aWYoMT09PXQubGVuZ3RoKXt2YXIgaT10LmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PW4mJmk8MTI4fHwibGF0aW4xIj09PW4pJiYodD1pKX19ZWxzZSJudW1iZXIiPT10eXBlb2YgdCYmKHQmPTI1NSk7aWYoZTwwfHx0aGlzLmxlbmd0aDxlfHx0aGlzLmxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihyPD1lKXJldHVybiB0aGlzO3ZhciBvO2lmKGU+Pj49MCxyPXZvaWQgMD09PXI/dGhpcy5sZW5ndGg6cj4+PjAsdHx8KHQ9MCksIm51bWJlciI9PXR5cGVvZiB0KWZvcihvPWU7bzxyOysrbyl0aGlzW29dPXQ7ZWxzZXt2YXIgcz1hLmlzQnVmZmVyKHQpP3Q6YS5mcm9tKHQsbiksbD1zLmxlbmd0aDtpZigwPT09bCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicrdCsnIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCAidmFsdWUiJyk7Zm9yKG89MDtvPHItZTsrK28pdGhpc1tvK2VdPXNbbyVsXX1yZXR1cm4gdGhpc307dmFyIE89L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiB6KHQpe3JldHVybiB0PDE2PyIwIit0LnRvU3RyaW5nKDE2KTp0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBEKHQsZSl7dmFyIHI7ZT1lfHwxLzA7Zm9yKHZhciBuPXQubGVuZ3RoLGk9bnVsbCxhPVtdLG89MDtvPG47KytvKXtpZigocj10LmNoYXJDb2RlQXQobykpPjU1Mjk1JiZyPDU3MzQ0KXtpZighaSl7aWYocj41NjMxOSl7KGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKG8rMT09PW4peyhlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pPXI7Y29udGludWV9aWYocjw1NjMyMCl7KGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpLGk9cjtjb250aW51ZX1yPTY1NTM2KyhpLTU1Mjk2PDwxMHxyLTU2MzIwKX1lbHNlIGkmJihlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KTtpZihpPW51bGwscjwxMjgpe2lmKChlLT0xKTwwKWJyZWFrO2EucHVzaChyKX1lbHNlIGlmKHI8MjA0OCl7aWYoKGUtPTIpPDApYnJlYWs7YS5wdXNoKHI+PjZ8MTkyLDYzJnJ8MTI4KX1lbHNlIGlmKHI8NjU1MzYpe2lmKChlLT0zKTwwKWJyZWFrO2EucHVzaChyPj4xMnwyMjQscj4+NiY2M3wxMjgsNjMmcnwxMjgpfWVsc2V7aWYoIShyPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKGUtPTQpPDApYnJlYWs7YS5wdXNoKHI+PjE4fDI0MCxyPj4xMiY2M3wxMjgscj4+NiY2M3wxMjgsNjMmcnwxMjgpfX1yZXR1cm4gYX1mdW5jdGlvbiBSKHQpe3JldHVybiBlLnRvQnl0ZUFycmF5KGZ1bmN0aW9uKHQpe2lmKCh0PSh0PXQuc3BsaXQoIj0iKVswXSkudHJpbSgpLnJlcGxhY2UoTywiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7dC5sZW5ndGglNCE9MDspdCs9Ij0iO3JldHVybiB0fSh0KSl9ZnVuY3Rpb24gRih0LGUscixuKXtmb3IodmFyIGk9MDtpPG4mJiEoaStyPj1lLmxlbmd0aHx8aT49dC5sZW5ndGgpOysraSllW2krcl09dFtpXTtyZXR1cm4gaX1mdW5jdGlvbiBCKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBlfHxudWxsIT10JiZudWxsIT10LmNvbnN0cnVjdG9yJiZudWxsIT10LmNvbnN0cnVjdG9yLm5hbWUmJnQuY29uc3RydWN0b3IubmFtZT09PWUubmFtZX1mdW5jdGlvbiBOKHQpe3JldHVybiB0IT10fX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiYnVmZmVyIikuQnVmZmVyKX0seyJiYXNlNjQtanMiOjgyLGJ1ZmZlcjoxMTIsaWVlZTc1NDo0Mjd9XSwxMTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvbW9ub3RvbmUiKSxpPXQoIi4vbGliL3RyaWFuZ3VsYXRpb24iKSxhPXQoIi4vbGliL2RlbGF1bmF5Iiksbz10KCIuL2xpYi9maWx0ZXIiKTtmdW5jdGlvbiBzKHQpe3JldHVybltNYXRoLm1pbih0WzBdLHRbMV0pLE1hdGgubWF4KHRbMF0sdFsxXSldfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV19ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIGUgaW4gdD90W2VdOnJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtBcnJheS5pc0FycmF5KGUpPyhyPXJ8fHt9LGU9ZXx8W10pOihyPWV8fHt9LGU9W10pO3ZhciB1PSEhYyhyLCJkZWxhdW5heSIsITApLGY9ISFjKHIsImludGVyaW9yIiwhMCksaD0hIWMociwiZXh0ZXJpb3IiLCEwKSxwPSEhYyhyLCJpbmZpbml0eSIsITEpO2lmKCFmJiYhaHx8MD09PXQubGVuZ3RoKXJldHVybltdO3ZhciBkPW4odCxlKTtpZih1fHxmIT09aHx8cCl7Zm9yKHZhciBtPWkodC5sZW5ndGgsZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKHMpLnNvcnQobCl9KGUpKSxnPTA7ZzxkLmxlbmd0aDsrK2cpe3ZhciB2PWRbZ107bS5hZGRUcmlhbmdsZSh2WzBdLHZbMV0sdlsyXSl9cmV0dXJuIHUmJmEodCxtKSxoP2Y/cD9vKG0sMCxwKTptLmNlbGxzKCk6byhtLDEscCk6byhtLC0xKX1yZXR1cm4gZH19LHsiLi9saWIvZGVsYXVuYXkiOjExNCwiLi9saWIvZmlsdGVyIjoxMTUsIi4vbGliL21vbm90b25lIjoxMTYsIi4vbGliL3RyaWFuZ3VsYXRpb24iOjExN31dLDExNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyb2J1c3QtaW4tc3BoZXJlIilbNF07dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBpKHQsZSxyLGksYSxvKXt2YXIgcz1lLm9wcG9zaXRlKGksYSk7aWYoIShzPDApKXtpZihhPGkpe3ZhciBsPWk7aT1hLGE9bCxsPW8sbz1zLHM9bH1lLmlzQ29uc3RyYWludChpLGEpfHxuKHRbaV0sdFthXSx0W29dLHRbc10pPDAmJnIucHVzaChpLGEpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sYT10Lmxlbmd0aCxvPWUuc3RhcnMscz0wO3M8YTsrK3MpZm9yKHZhciBsPW9bc10sYz0xO2M8bC5sZW5ndGg7Yys9Mil7aWYoISgocD1sW2NdKTxzKSYmIWUuaXNDb25zdHJhaW50KHMscCkpe2Zvcih2YXIgdT1sW2MtMV0sZj0tMSxoPTE7aDxsLmxlbmd0aDtoKz0yKWlmKGxbaC0xXT09PXApe2Y9bFtoXTticmVha31mPDB8fG4odFtzXSx0W3BdLHRbdV0sdFtmXSk8MCYmci5wdXNoKHMscCl9fWZvcig7ci5sZW5ndGg+MDspe2Zvcih2YXIgcD1yLnBvcCgpLGQ9KHM9ci5wb3AoKSx1PS0xLGY9LTEsbD1vW3NdLDEpO2Q8bC5sZW5ndGg7ZCs9Mil7dmFyIG09bFtkLTFdLGc9bFtkXTttPT09cD9mPWc6Zz09PXAmJih1PW0pfXU8MHx8ZjwwfHwobih0W3NdLHRbcF0sdFt1XSx0W2ZdKT49MHx8KGUuZmxpcChzLHApLGkodCxlLHIsdSxzLGYpLGkodCxlLHIscyxmLHUpLGkodCxlLHIsZixwLHUpLGkodCxlLHIscCx1LGYpKSl9fX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTAwLCJyb2J1c3QtaW4tc3BoZXJlIjo1MjJ9XSwxMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpO2Z1bmN0aW9uIGEodCxlLHIsbixpLGEsbyl7dGhpcy5jZWxscz10LHRoaXMubmVpZ2hib3I9ZSx0aGlzLmZsYWdzPW4sdGhpcy5jb25zdHJhaW50PXIsdGhpcy5hY3RpdmU9aSx0aGlzLm5leHQ9YSx0aGlzLmJvdW5kYXJ5PW99ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXXx8dFsyXS1lWzJdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jZWxscygpLG49ci5sZW5ndGgsaT0wO2k8bjsrK2kpe3ZhciBzPSh2PXJbaV0pWzBdLGw9dlsxXSxjPXZbMl07bDxjP2w8cyYmKHZbMF09bCx2WzFdPWMsdlsyXT1zKTpjPHMmJih2WzBdPWMsdlsxXT1zLHZbMl09bCl9ci5zb3J0KG8pO3ZhciB1PW5ldyBBcnJheShuKTtmb3IoaT0wO2k8dS5sZW5ndGg7KytpKXVbaV09MDt2YXIgZj1bXSxoPVtdLHA9bmV3IEFycmF5KDMqbiksZD1uZXcgQXJyYXkoMypuKSxtPW51bGw7ZSYmKG09W10pO3ZhciBnPW5ldyBhKHIscCxkLHUsZixoLG0pO2ZvcihpPTA7aTxuOysraSlmb3IodmFyIHY9cltpXSx5PTA7eTwzOysreSl7cz12W3ldLGw9dlsoeSsxKSUzXTt2YXIgeD1wWzMqaSt5XT1nLmxvY2F0ZShsLHMsdC5vcHBvc2l0ZShsLHMpKSxiPWRbMyppK3ldPXQuaXNDb25zdHJhaW50KHMsbCk7eDwwJiYoYj9oLnB1c2goaSk6KGYucHVzaChpKSx1W2ldPTEpLGUmJm0ucHVzaChbbCxzLC0xXSkpfXJldHVybiBnfSh0LHIpO2lmKDA9PT1lKXJldHVybiByP24uY2VsbHMuY29uY2F0KG4uYm91bmRhcnkpOm4uY2VsbHM7dmFyIGk9MSxzPW4uYWN0aXZlLGw9bi5uZXh0LGM9bi5mbGFncyx1PW4uY2VsbHMsZj1uLmNvbnN0cmFpbnQsaD1uLm5laWdoYm9yO2Zvcig7cy5sZW5ndGg+MHx8bC5sZW5ndGg+MDspe2Zvcig7cy5sZW5ndGg+MDspe3ZhciBwPXMucG9wKCk7aWYoY1twXSE9PS1pKXtjW3BdPWk7dVtwXTtmb3IodmFyIGQ9MDtkPDM7KytkKXt2YXIgbT1oWzMqcCtkXTttPj0wJiYwPT09Y1ttXSYmKGZbMypwK2RdP2wucHVzaChtKToocy5wdXNoKG0pLGNbbV09aSkpfX19dmFyIGc9bDtsPXMscz1nLGwubGVuZ3RoPTAsaT0taX12YXIgdj1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT0wO2k8dC5sZW5ndGg7KytpKWVbaV09PT1yJiYodFtuKytdPXRbaV0pO3JldHVybiB0Lmxlbmd0aD1uLHR9KHUsYyxlKTtpZihyKXJldHVybiB2LmNvbmNhdChuLmJvdW5kYXJ5KTtyZXR1cm4gdn0sYS5wcm90b3R5cGUubG9jYXRlPShuPVswLDAsMF0sZnVuY3Rpb24odCxlLHIpe3ZhciBhPXQscz1lLGw9cjtyZXR1cm4gZTxyP2U8dCYmKGE9ZSxzPXIsbD10KTpyPHQmJihhPXIscz10LGw9ZSksYTwwPy0xOihuWzBdPWEsblsxXT1zLG5bMl09bCxpLmVxKHRoaXMuY2VsbHMsbixvKSl9KX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTAwfV0sMTE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksaT10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXTtmdW5jdGlvbiBhKHQsZSxyLG4saSl7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5pZHg9cix0aGlzLmxvd2VySWRzPW4sdGhpcy51cHBlcklkcz1pfWZ1bmN0aW9uIG8odCxlLHIsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy50eXBlPXIsdGhpcy5pZHg9bn1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9dC5hWzBdLWUuYVswXXx8dC5hWzFdLWUuYVsxXXx8dC50eXBlLWUudHlwZTtyZXR1cm4gcnx8KDAhPT10LnR5cGUmJihyPWkodC5hLHQuYixlLmIpKT9yOnQuaWR4LWUuaWR4KX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGkodC5hLHQuYixlKX1mdW5jdGlvbiBjKHQsZSxyLGEsbyl7Zm9yKHZhciBzPW4ubHQoZSxhLGwpLGM9bi5ndChlLGEsbCksdT1zO3U8YzsrK3Upe2Zvcih2YXIgZj1lW3VdLGg9Zi5sb3dlcklkcyxwPWgubGVuZ3RoO3A+MSYmaShyW2hbcC0yXV0scltoW3AtMV1dLGEpPjA7KXQucHVzaChbaFtwLTFdLGhbcC0yXSxvXSkscC09MTtoLmxlbmd0aD1wLGgucHVzaChvKTt2YXIgZD1mLnVwcGVySWRzO2ZvcihwPWQubGVuZ3RoO3A+MSYmaShyW2RbcC0yXV0scltkW3AtMV1dLGEpPDA7KXQucHVzaChbZFtwLTJdLGRbcC0xXSxvXSkscC09MTtkLmxlbmd0aD1wLGQucHVzaChvKX19ZnVuY3Rpb24gdSh0LGUpe3ZhciByO3JldHVybihyPXQuYVswXTxlLmFbMF0/aSh0LmEsdC5iLGUuYSk6aShlLmIsZS5hLHQuYSkpP3I6KHI9ZS5iWzBdPHQuYlswXT9pKHQuYSx0LmIsZS5iKTppKGUuYixlLmEsdC5iKSl8fHQuaWR4LWUuaWR4fWZ1bmN0aW9uIGYodCxlLHIpe3ZhciBpPW4ubGUodCxyLHUpLG89dFtpXSxzPW8udXBwZXJJZHMsbD1zW3MubGVuZ3RoLTFdO28udXBwZXJJZHM9W2xdLHQuc3BsaWNlKGkrMSwwLG5ldyBhKHIuYSxyLmIsci5pZHgsW2xdLHMpKX1mdW5jdGlvbiBoKHQsZSxyKXt2YXIgaT1yLmE7ci5hPXIuYixyLmI9aTt2YXIgYT1uLmVxKHQscix1KSxvPXRbYV07dFthLTFdLnVwcGVySWRzPW8udXBwZXJJZHMsdC5zcGxpY2UoYSwxKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1lLmxlbmd0aCxpPVtdLGw9MDtsPHI7KytsKWkucHVzaChuZXcgbyh0W2xdLG51bGwsMCxsKSk7Zm9yKGw9MDtsPG47KytsKXt2YXIgdT1lW2xdLHA9dFt1WzBdXSxkPXRbdVsxXV07cFswXTxkWzBdP2kucHVzaChuZXcgbyhwLGQsMixsKSxuZXcgbyhkLHAsMSxsKSk6cFswXT5kWzBdJiZpLnB1c2gobmV3IG8oZCxwLDIsbCksbmV3IG8ocCxkLDEsbCkpfWkuc29ydChzKTtmb3IodmFyIG09aVswXS5hWzBdLSgxK01hdGguYWJzKGlbMF0uYVswXSkpKk1hdGgucG93KDIsLTUyKSxnPVtuZXcgYShbbSwxXSxbbSwwXSwtMSxbXSxbXSxbXSxbXSldLHY9W10seT0obD0wLGkubGVuZ3RoKTtsPHk7KytsKXt2YXIgeD1pW2xdLGI9eC50eXBlOzA9PT1iP2ModixnLHQseC5hLHguaWR4KToyPT09Yj9mKGcsdCx4KTpoKGcsdCx4KX1yZXR1cm4gdn19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjEwMCwicm9idXN0LW9yaWVudGF0aW9uIjo1MjR9XSwxMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBpKHQsZSl7dGhpcy5zdGFycz10LHRoaXMuZWRnZXM9ZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09W107cmV0dXJuIG5ldyBpKHIsZSl9O3ZhciBhPWkucHJvdG90eXBlO2Z1bmN0aW9uIG8odCxlLHIpe2Zvcih2YXIgbj0xLGk9dC5sZW5ndGg7bjxpO24rPTIpaWYodFtuLTFdPT09ZSYmdFtuXT09PXIpcmV0dXJuIHRbbi0xXT10W2ktMl0sdFtuXT10W2ktMV0sdm9pZCh0Lmxlbmd0aD1pLTIpfWEuaXNDb25zdHJhaW50PWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF07ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1yZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gdFswXT1NYXRoLm1pbihyLGkpLHRbMV09TWF0aC5tYXgocixpKSxuLmVxKHRoaXMuZWRnZXMsdCxlKT49MH19KCksYS5yZW1vdmVUcmlhbmdsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zdGFycztvKG5bdF0sZSxyKSxvKG5bZV0scix0KSxvKG5bcl0sdCxlKX0sYS5hZGRUcmlhbmdsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zdGFycztuW3RdLnB1c2goZSxyKSxuW2VdLnB1c2gocix0KSxuW3JdLnB1c2godCxlKX0sYS5vcHBvc2l0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnN0YXJzW2VdLG49MSxpPXIubGVuZ3RoO248aTtuKz0yKWlmKHJbbl09PT10KXJldHVybiByW24tMV07cmV0dXJuLTF9LGEuZmxpcD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMub3Bwb3NpdGUodCxlKSxuPXRoaXMub3Bwb3NpdGUoZSx0KTt0aGlzLnJlbW92ZVRyaWFuZ2xlKHQsZSxyKSx0aGlzLnJlbW92ZVRyaWFuZ2xlKGUsdCxuKSx0aGlzLmFkZFRyaWFuZ2xlKHQsbixyKSx0aGlzLmFkZFRyaWFuZ2xlKGUscixuKX0sYS5lZGdlcz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN0YXJzLGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTAsbz1pLmxlbmd0aDthPG87YSs9MillLnB1c2goW2lbYV0saVthKzFdXSk7cmV0dXJuIGV9LGEuY2VsbHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5zdGFycyxlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wLG89aS5sZW5ndGg7YTxvO2ErPTIpe3ZhciBzPWlbYV0sbD1pW2ErMV07cjxNYXRoLm1pbihzLGwpJiZlLnB1c2goW3IscyxsXSl9cmV0dXJuIGV9fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjoxMDB9XSwxMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLHI9MTtyPHQubGVuZ3RoOysrcilmb3IodmFyIG49MDtuPHI7KytuKWlmKHRbcl08dFtuXSllPS1lO2Vsc2UgaWYodFtuXT09PXRbcl0pcmV0dXJuIDA7cmV0dXJuIGV9fSx7fV0sMTE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImR1cCIpLGk9dCgicm9idXN0LWxpbmVhci1zb2x2ZSIpO2Z1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLGk9MDtpPG47KytpKXIrPXRbaV0qZVtpXTtyZXR1cm4gcn1mdW5jdGlvbiBvKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDA9PT1lKXJldHVybltdO3RbMF0ubGVuZ3RoO3ZhciByPW4oW3QubGVuZ3RoKzEsdC5sZW5ndGgrMV0sMSksbz1uKFt0Lmxlbmd0aCsxXSwxKTtyW2VdW2VdPTA7Zm9yKHZhciBzPTA7czxlOysrcyl7Zm9yKHZhciBsPTA7bDw9czsrK2wpcltsXVtzXT1yW3NdW2xdPTIqYSh0W3NdLHRbbF0pO29bc109YSh0W3NdLHRbc10pfXZhciBjPWkocixvKSx1PTAsZj1jW2UrMV07Zm9yKHM9MDtzPGYubGVuZ3RoOysrcyl1Kz1mW3NdO3ZhciBoPW5ldyBBcnJheShlKTtmb3Iocz0wO3M8ZTsrK3Mpe2Y9Y1tzXTt2YXIgcD0wO2ZvcihsPTA7bDxmLmxlbmd0aDsrK2wpcCs9ZltsXTtoW3NdPXAvdX1yZXR1cm4gaH1mdW5jdGlvbiBzKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIGU9dFswXS5sZW5ndGgscj1uKFtlXSksaT1vKHQpLGE9MDthPHQubGVuZ3RoOysrYSlmb3IodmFyIHM9MDtzPGU7KytzKXJbc10rPXRbYV1bc10qaVthXTtyZXR1cm4gcn1zLmJhcnljZW5ldHJpYz1vLGUuZXhwb3J0cz1zfSx7ZHVwOjE3Nywicm9idXN0LWxpbmVhci1zb2x2ZSI6NTIzfV0sMTIwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uKHQpLHI9MCxpPTA7aTx0Lmxlbmd0aDsrK2kpZm9yKHZhciBhPXRbaV0sbz0wO288ZS5sZW5ndGg7KytvKXIrPU1hdGgucG93KGFbb10tZVtvXSwyKTtyZXR1cm4gTWF0aC5zcXJ0KHIvdC5sZW5ndGgpfTt2YXIgbj10KCJjaXJjdW1jZW50ZXIiKX0se2NpcmN1bWNlbnRlcjoxMTl9XSwxMjE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPHI/dDxlP2U6dD5yP3I6dDp0PHI/cjp0PmU/ZTp0fX0se31dLDEyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuO2lmKHIpe249ZTtmb3IodmFyIGk9bmV3IEFycmF5KGUubGVuZ3RoKSxhPTA7YTxlLmxlbmd0aDsrK2Epe3ZhciBvPWVbYV07aVthXT1bb1swXSxvWzFdLHJbYV1dfWU9aX12YXIgcz1mdW5jdGlvbih0LGUscil7dmFyIG49ZCh0LFtdLHAodCkpO3JldHVybiB2KGUsbixyKSwhIW59KHQsZSwhIXIpO2Zvcig7eSh0LGUsISFyKTspcz0hMDtpZihyJiZzKXtuLmxlbmd0aD0wLHIubGVuZ3RoPTA7Zm9yKGE9MDthPGUubGVuZ3RoOysrYSl7bz1lW2FdO24ucHVzaChbb1swXSxvWzFdXSksci5wdXNoKG9bMl0pfX1yZXR1cm4gc307dmFyIG49dCgidW5pb24tZmluZCIpLGk9dCgiYm94LWludGVyc2VjdCIpLGE9dCgicm9idXN0LXNlZ21lbnQtaW50ZXJzZWN0Iiksbz10KCJiaWctcmF0Iikscz10KCJiaWctcmF0L2NtcCIpLGw9dCgiYmlnLXJhdC90by1mbG9hdCIpLGM9dCgicmF0LXZlYyIpLHU9dCgibmV4dGFmdGVyIiksZj10KCIuL2xpYi9yYXQtc2VnLWludGVyc2VjdCIpO2Z1bmN0aW9uIGgodCl7dmFyIGU9bCh0KTtyZXR1cm5bdShlLC0xLzApLHUoZSwxLzApXX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXTtlW3JdPVt1KG5bMF0sLTEvMCksdShuWzFdLC0xLzApLHUoblswXSwxLzApLHUoblsxXSwxLzApXX1yZXR1cm4gZX1mdW5jdGlvbiBkKHQsZSxyKXtmb3IodmFyIGE9ZS5sZW5ndGgsbz1uZXcgbihhKSxzPVtdLGw9MDtsPGUubGVuZ3RoOysrbCl7dmFyIGM9ZVtsXSxmPWgoY1swXSkscD1oKGNbMV0pO3MucHVzaChbdShmWzBdLC0xLzApLHUocFswXSwtMS8wKSx1KGZbMV0sMS8wKSx1KHBbMV0sMS8wKV0pfWkocywoZnVuY3Rpb24odCxlKXtvLmxpbmsodCxlKX0pKTt2YXIgZD0hMCxtPW5ldyBBcnJheShhKTtmb3IobD0wO2w8YTsrK2wpeyh2PW8uZmluZChsKSkhPT1sJiYoZD0hMSx0W3ZdPVtNYXRoLm1pbih0W2xdWzBdLHRbdl1bMF0pLE1hdGgubWluKHRbbF1bMV0sdFt2XVsxXSldKX1pZihkKXJldHVybiBudWxsO3ZhciBnPTA7Zm9yKGw9MDtsPGE7KytsKXt2YXIgdjsodj1vLmZpbmQobCkpPT09bD8obVtsXT1nLHRbZysrXT10W2xdKTptW2xdPS0xfXQubGVuZ3RoPWc7Zm9yKGw9MDtsPGE7KytsKW1bbF08MCYmKG1bbF09bVtvLmZpbmQobCldKTtyZXR1cm4gbX1mdW5jdGlvbiBtKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIGcodCxlKXt2YXIgcj10WzBdLWVbMF18fHRbMV0tZVsxXTtyZXR1cm4gcnx8KHRbMl08ZVsyXT8tMTp0WzJdPmVbMl0/MTowKX1mdW5jdGlvbiB2KHQsZSxyKXtpZigwIT09dC5sZW5ndGgpe2lmKGUpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBpPWVbKG89dFtuXSlbMF1dLGE9ZVtvWzFdXTtvWzBdPU1hdGgubWluKGksYSksb1sxXT1NYXRoLm1heChpLGEpfWVsc2UgZm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIG87aT0obz10W25dKVswXSxhPW9bMV07b1swXT1NYXRoLm1pbihpLGEpLG9bMV09TWF0aC5tYXgoaSxhKX1yP3Quc29ydChnKTp0LnNvcnQobSk7dmFyIHM9MTtmb3Iobj0xO248dC5sZW5ndGg7KytuKXt2YXIgbD10W24tMV0sYz10W25dOyhjWzBdIT09bFswXXx8Y1sxXSE9PWxbMV18fHImJmNbMl0hPT1sWzJdKSYmKHRbcysrXT1jKX10Lmxlbmd0aD1zfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZS5sZW5ndGgpLG49MDtuPGUubGVuZ3RoOysrbil7dmFyIGk9ZVtuXSxhPXRbaVswXV0sbz10W2lbMV1dO3Jbbl09W3UoTWF0aC5taW4oYVswXSxvWzBdKSwtMS8wKSx1KE1hdGgubWluKGFbMV0sb1sxXSksLTEvMCksdShNYXRoLm1heChhWzBdLG9bMF0pLDEvMCksdShNYXRoLm1heChhWzFdLG9bMV0pLDEvMCldfXJldHVybiByfSh0LGUpLGg9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtdO3JldHVybiBpKHIsKGZ1bmN0aW9uKHIsaSl7dmFyIG89ZVtyXSxzPWVbaV07aWYob1swXSE9PXNbMF0mJm9bMF0hPT1zWzFdJiZvWzFdIT09c1swXSYmb1sxXSE9PXNbMV0pe3ZhciBsPXRbb1swXV0sYz10W29bMV1dLHU9dFtzWzBdXSxmPXRbc1sxXV07YShsLGMsdSxmKSYmbi5wdXNoKFtyLGldKX19KSksbn0odCxlLG4pLG09cCh0KSxnPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBvPVtdO3JldHVybiBpKHIsbiwoZnVuY3Rpb24ocixuKXt2YXIgaT1lW3JdO2lmKGlbMF0hPT1uJiZpWzFdIT09bil7dmFyIHM9dFtuXSxsPXRbaVswXV0sYz10W2lbMV1dO2EobCxjLHMscykmJm8ucHVzaChbcixuXSl9fSkpLG99KHQsZSxuLG0pLHk9ZCh0LGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsdSxoPXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm5bbyh0WzBdKSxvKHRbMV0pXX0pKTtmb3IoYT0wO2E8ci5sZW5ndGg7KythKXt2YXIgcD1yW2FdO3U9cFswXTt2YXIgZD1wWzFdLG09ZVt1XSxnPWVbZF0sdj1mKGModFttWzBdXSksYyh0W21bMV1dKSxjKHRbZ1swXV0pLGModFtnWzFdXSkpO2lmKHYpe3ZhciB5PXQubGVuZ3RoO3QucHVzaChbbCh2WzBdKSxsKHZbMV0pXSksaC5wdXNoKHYpLG4ucHVzaChbdSx5XSxbZCx5XSl9fWZvcihuLnNvcnQoKGZ1bmN0aW9uKHQsZSl7aWYodFswXSE9PWVbMF0pcmV0dXJuIHRbMF0tZVswXTt2YXIgcj1oW3RbMV1dLG49aFtlWzFdXTtyZXR1cm4gcyhyWzBdLG5bMF0pfHxzKHJbMV0sblsxXSl9KSksYT1uLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgeD1lW3U9KFM9blthXSlbMF1dLGI9eFswXSxfPXhbMV0sdz10W2JdLFQ9dFtfXTtpZigod1swXS1UWzBdfHx3WzFdLVRbMV0pPDApe3ZhciBrPWI7Yj1fLF89a314WzBdPWI7dmFyIEEsTT14WzFdPVNbMV07Zm9yKGkmJihBPXhbMl0pO2E+MCYmblthLTFdWzBdPT09dTspe3ZhciBTLEU9KFM9blstLWFdKVsxXTtpP2UucHVzaChbTSxFLEFdKTplLnB1c2goW00sRV0pLE09RX1pP2UucHVzaChbTSxfLEFdKTplLnB1c2goW00sX10pfXJldHVybiBofSh0LGUsaCxnLHIpKTtyZXR1cm4gdihlLHksciksISF5fHwoaC5sZW5ndGg+MHx8Zy5sZW5ndGg+MCl9fSx7Ii4vbGliL3JhdC1zZWctaW50ZXJzZWN0IjoxMjMsImJpZy1yYXQiOjg2LCJiaWctcmF0L2NtcCI6ODQsImJpZy1yYXQvdG8tZmxvYXQiOjk5LCJib3gtaW50ZXJzZWN0IjoxMDQsbmV4dGFmdGVyOjQ2MywicmF0LXZlYyI6NTA4LCJyb2J1c3Qtc2VnbWVudC1pbnRlcnNlY3QiOjUyNywidW5pb24tZmluZCI6NTkxfV0sMTIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgYT1zKGUsdCksZj1zKG4sciksaD11KGEsZik7aWYoMD09PW8oaCkpcmV0dXJuIG51bGw7dmFyIHA9cyh0LHIpLGQ9dShmLHApLG09aShkLGgpLGc9YyhhLG0pO3JldHVybiBsKHQsZyl9O3ZhciBuPXQoImJpZy1yYXQvbXVsIiksaT10KCJiaWctcmF0L2RpdiIpLGE9dCgiYmlnLXJhdC9zdWIiKSxvPXQoImJpZy1yYXQvc2lnbiIpLHM9dCgicmF0LXZlYy9zdWIiKSxsPXQoInJhdC12ZWMvYWRkIiksYz10KCJyYXQtdmVjL211bHMiKTtmdW5jdGlvbiB1KHQsZSl7cmV0dXJuIGEobih0WzBdLGVbMV0pLG4odFsxXSxlWzBdKSl9fSx7ImJpZy1yYXQvZGl2Ijo4NSwiYmlnLXJhdC9tdWwiOjk1LCJiaWctcmF0L3NpZ24iOjk3LCJiaWctcmF0L3N1YiI6OTgsInJhdC12ZWMvYWRkIjo1MDcsInJhdC12ZWMvbXVscyI6NTA5LCJyYXQtdmVjL3N1YiI6NTEwfV0sMTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNsYW1wIik7ZnVuY3Rpb24gaSh0LGUpe251bGw9PWUmJihlPSEwKTt2YXIgcj10WzBdLGk9dFsxXSxhPXRbMl0sbz10WzNdO3JldHVybiBudWxsPT1vJiYobz1lPzE6MjU1KSxlJiYocio9MjU1LGkqPTI1NSxhKj0yNTUsbyo9MjU1KSwxNjc3NzIxNioocj0yNTUmbihyLDAsMjU1KSkrKChpPTI1NSZuKGksMCwyNTUpKTw8MTYpKygoYT0yNTUmbihhLDAsMjU1KSk8PDgpKyhvPTI1NSZuKG8sMCwyNTUpKX1lLmV4cG9ydHM9aSxlLmV4cG9ydHMudG89aSxlLmV4cG9ydHMuZnJvbT1mdW5jdGlvbih0LGUpe3ZhciByPSh0PSt0KT4+PjI0LG49KDE2NzExNjgwJnQpPj4+MTYsaT0oNjUyODAmdCk+Pj44LGE9MjU1JnQ7cmV0dXJuITE9PT1lP1tyLG4saSxhXTpbci8yNTUsbi8yNTUsaS8yNTUsYS8yNTVdfX0se2NsYW1wOjEyMX1dLDEyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2FsaWNlYmx1ZTpbMjQwLDI0OCwyNTVdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTVdLGFxdWE6WzAsMjU1LDI1NV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTJdLGF6dXJlOlsyNDAsMjU1LDI1NV0sYmVpZ2U6WzI0NSwyNDUsMjIwXSxiaXNxdWU6WzI1NSwyMjgsMTk2XSxibGFjazpbMCwwLDBdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNV0sYmx1ZTpbMCwwLDI1NV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNl0sYnJvd246WzE2NSw0Miw0Ml0sYnVybHl3b29kOlsyMjIsMTg0LDEzNV0sY2FkZXRibHVlOls5NSwxNTgsMTYwXSxjaGFydHJldXNlOlsxMjcsMjU1LDBdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMF0sY29yYWw6WzI1NSwxMjcsODBdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzN10sY29ybnNpbGs6WzI1NSwyNDgsMjIwXSxjcmltc29uOlsyMjAsMjAsNjBdLGN5YW46WzAsMjU1LDI1NV0sZGFya2JsdWU6WzAsMCwxMzldLGRhcmtjeWFuOlswLDEzOSwxMzldLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTFdLGRhcmtncmF5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEwMCwwXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjldLGRhcmtraGFraTpbMTg5LDE4MywxMDddLGRhcmttYWdlbnRhOlsxMzksMCwxMzldLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDddLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMF0sZGFya29yY2hpZDpbMTUzLDUwLDIwNF0sZGFya3JlZDpbMTM5LDAsMF0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjJdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDNdLGRhcmtzbGF0ZWJsdWU6WzcyLDYxLDEzOV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzldLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5XSxkYXJrdHVycXVvaXNlOlswLDIwNiwyMDldLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMV0sZGVlcHBpbms6WzI1NSwyMCwxNDddLGRlZXBza3libHVlOlswLDE5MSwyNTVdLGRpbWdyYXk6WzEwNSwxMDUsMTA1XSxkaW1ncmV5OlsxMDUsMTA1LDEwNV0sZG9kZ2VyYmx1ZTpbMzAsMTQ0LDI1NV0sZmlyZWJyaWNrOlsxNzgsMzQsMzRdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MF0sZm9yZXN0Z3JlZW46WzM0LDEzOSwzNF0sZnVjaHNpYTpbMjU1LDAsMjU1XSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwXSxnaG9zdHdoaXRlOlsyNDgsMjQ4LDI1NV0sZ29sZDpbMjU1LDIxNSwwXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzJdLGdyYXk6WzEyOCwxMjgsMTI4XSxncmVlbjpbMCwxMjgsMF0sZ3JlZW55ZWxsb3c6WzE3MywyNTUsNDddLGdyZXk6WzEyOCwxMjgsMTI4XSxob25leWRldzpbMjQwLDI1NSwyNDBdLGhvdHBpbms6WzI1NSwxMDUsMTgwXSxpbmRpYW5yZWQ6WzIwNSw5Miw5Ml0saW5kaWdvOls3NSwwLDEzMF0saXZvcnk6WzI1NSwyNTUsMjQwXSxraGFraTpbMjQwLDIzMCwxNDBdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MF0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDVdLGxhd25ncmVlbjpbMTI0LDI1MiwwXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1XSxsaWdodGJsdWU6WzE3MywyMTYsMjMwXSxsaWdodGNvcmFsOlsyNDAsMTI4LDEyOF0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwXSxsaWdodGdyYXk6WzIxMSwyMTEsMjExXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NF0sbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwXSxsaWdodHNreWJsdWU6WzEzNSwyMDYsMjUwXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTNdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1M10sbGlnaHRzdGVlbGJsdWU6WzE3NiwxOTYsMjIyXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjRdLGxpbWU6WzAsMjU1LDBdLGxpbWVncmVlbjpbNTAsMjA1LDUwXSxsaW5lbjpbMjUwLDI0MCwyMzBdLG1hZ2VudGE6WzI1NSwwLDI1NV0sbWFyb29uOlsxMjgsMCwwXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MF0sbWVkaXVtYmx1ZTpbMCwwLDIwNV0sbWVkaXVtb3JjaGlkOlsxODYsODUsMjExXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5XSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExM10sbWVkaXVtc2xhdGVibHVlOlsxMjMsMTA0LDIzOF0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NF0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0XSxtZWRpdW12aW9sZXRyZWQ6WzE5OSwyMSwxMzNdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwXSxtaXN0eXJvc2U6WzI1NSwyMjgsMjI1XSxtb2NjYXNpbjpbMjU1LDIyOCwxODFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3M10sbmF2eTpbMCwwLDEyOF0sb2xkbGFjZTpbMjUzLDI0NSwyMzBdLG9saXZlOlsxMjgsMTI4LDBdLG9saXZlZHJhYjpbMTA3LDE0MiwzNV0sb3JhbmdlOlsyNTUsMTY1LDBdLG9yYW5nZXJlZDpbMjU1LDY5LDBdLG9yY2hpZDpbMjE4LDExMiwyMTRdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyXSxwYWxldHVycXVvaXNlOlsxNzUsMjM4LDIzOF0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDddLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzXSxwZWFjaHB1ZmY6WzI1NSwyMTgsMTg1XSxwZXJ1OlsyMDUsMTMzLDYzXSxwaW5rOlsyNTUsMTkyLDIwM10scGx1bTpbMjIxLDE2MCwyMjFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwXSxwdXJwbGU6WzEyOCwwLDEyOF0scmViZWNjYXB1cnBsZTpbMTAyLDUxLDE1M10scmVkOlsyNTUsMCwwXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzXSxyb3lhbGJsdWU6WzY1LDEwNSwyMjVdLHNhZGRsZWJyb3duOlsxMzksNjksMTldLHNhbG1vbjpbMjUwLDEyOCwxMTRdLHNhbmR5YnJvd246WzI0NCwxNjQsOTZdLHNlYWdyZWVuOls0NiwxMzksODddLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOF0sc2llbm5hOlsxNjAsODIsNDVdLHNpbHZlcjpbMTkyLDE5MiwxOTJdLHNreWJsdWU6WzEzNSwyMDYsMjM1XSxzbGF0ZWJsdWU6WzEwNiw5MCwyMDVdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDRdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDRdLHNub3c6WzI1NSwyNTAsMjUwXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3XSxzdGVlbGJsdWU6WzcwLDEzMCwxODBdLHRhbjpbMjEwLDE4MCwxNDBdLHRlYWw6WzAsMTI4LDEyOF0sdGhpc3RsZTpbMjE2LDE5MSwyMTZdLHRvbWF0bzpbMjU1LDk5LDcxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDhdLHZpb2xldDpbMjM4LDEzMCwyMzhdLHdoZWF0OlsyNDUsMjIyLDE3OV0sd2hpdGU6WzI1NSwyNTUsMjU1XSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NV0seWVsbG93OlsyNTUsMjU1LDBdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwXX19LHt9XSwxMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29sb3ItcmdiYSIpLGk9dCgiY2xhbXAiKSxhPXQoImR0eXBlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ImZsb2F0IiE9PWUmJmV8fChlPSJhcnJheSIpLCJ1aW50Ij09PWUmJihlPSJ1aW50OCIpLCJ1aW50X2NsYW1wZWQiPT09ZSYmKGU9InVpbnQ4X2NsYW1wZWQiKTt2YXIgcj1uZXcoYShlKSkoNCksbz0idWludDgiIT09ZSYmInVpbnQ4X2NsYW1wZWQiIT09ZTtyZXR1cm4gdC5sZW5ndGgmJiJzdHJpbmciIT10eXBlb2YgdHx8KCh0PW4odCkpWzBdLz0yNTUsdFsxXS89MjU1LHRbMl0vPTI1NSksZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXl8fCEhKEFycmF5LmlzQXJyYXkodCkmJih0WzBdPjF8fDA9PT10WzBdKSYmKHRbMV0+MXx8MD09PXRbMV0pJiYodFsyXT4xfHwwPT09dFsyXSkmJighdFszXXx8dFszXT4xKSl9KHQpPyhyWzBdPXRbMF0sclsxXT10WzFdLHJbMl09dFsyXSxyWzNdPW51bGwhPXRbM10/dFszXToyNTUsbyYmKHJbMF0vPTI1NSxyWzFdLz0yNTUsclsyXS89MjU1LHJbM10vPTI1NSkscik6KG8/KHJbMF09dFswXSxyWzFdPXRbMV0sclsyXT10WzJdLHJbM109bnVsbCE9dFszXT90WzNdOjEpOihyWzBdPWkoTWF0aC5mbG9vcigyNTUqdFswXSksMCwyNTUpLHJbMV09aShNYXRoLmZsb29yKDI1NSp0WzFdKSwwLDI1NSksclsyXT1pKE1hdGguZmxvb3IoMjU1KnRbMl0pLDAsMjU1KSxyWzNdPW51bGw9PXRbM10/MjU1OmkoTWF0aC5mbG9vcigyNTUqdFszXSksMCwyNTUpKSxyKX19LHtjbGFtcDoxMjEsImNvbG9yLXJnYmEiOjEyOCxkdHlwZToxNzZ9XSwxMjc6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLW5hbWUiKSxpPXQoImlzLXBsYWluLW9iaiIpLGE9dCgiZGVmaW5lZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxzLGw9W10sYz0xO2lmKCJzdHJpbmciPT10eXBlb2YgdClpZihuW3RdKWw9blt0XS5zbGljZSgpLHM9InJnYiI7ZWxzZSBpZigidHJhbnNwYXJlbnQiPT09dCljPTAscz0icmdiIixsPVswLDAsMF07ZWxzZSBpZigvXiNbQS1GYS1mMC05XSskLy50ZXN0KHQpKXt2YXIgdT0ocD10LnNsaWNlKDEpKS5sZW5ndGg7Yz0xLHU8PTQ/KGw9W3BhcnNlSW50KHBbMF0rcFswXSwxNikscGFyc2VJbnQocFsxXStwWzFdLDE2KSxwYXJzZUludChwWzJdK3BbMl0sMTYpXSw0PT09dSYmKGM9cGFyc2VJbnQocFszXStwWzNdLDE2KS8yNTUpKToobD1bcGFyc2VJbnQocFswXStwWzFdLDE2KSxwYXJzZUludChwWzJdK3BbM10sMTYpLHBhcnNlSW50KHBbNF0rcFs1XSwxNildLDg9PT11JiYoYz1wYXJzZUludChwWzZdK3BbN10sMTYpLzI1NSkpLGxbMF18fChsWzBdPTApLGxbMV18fChsWzFdPTApLGxbMl18fChsWzJdPTApLHM9InJnYiJ9ZWxzZSBpZihlPS9eKCg/OnJnYnxoc1tsdmJdfGh3YnxjbXlrP3x4eVt6eV18Z3JheXxsYWJ8bGNodT92P3xbbHlddXZ8bG1zKWE/KVxzKlwoKFteXCldKilcKS8uZXhlYyh0KSl7dmFyIGY9ZVsxXSxoPSJyZ2IiPT09ZixwPWYucmVwbGFjZSgvYSQvLCIiKTtzPXA7dT0iY215ayI9PT1wPzQ6ImdyYXkiPT09cD8xOjM7bD1lWzJdLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pLm1hcCgoZnVuY3Rpb24odCxlKXtpZigvJSQvLnRlc3QodCkpcmV0dXJuIGU9PT11P3BhcnNlRmxvYXQodCkvMTAwOiJyZ2IiPT09cD8yNTUqcGFyc2VGbG9hdCh0KS8xMDA6cGFyc2VGbG9hdCh0KTtpZigiaCI9PT1wW2VdKXtpZigvZGVnJC8udGVzdCh0KSlyZXR1cm4gcGFyc2VGbG9hdCh0KTtpZih2b2lkIDAhPT1vW3RdKXJldHVybiBvW3RdfXJldHVybiBwYXJzZUZsb2F0KHQpfSkpLGY9PT1wJiZsLnB1c2goMSksYz1ofHx2b2lkIDA9PT1sW3VdPzE6bFt1XSxsPWwuc2xpY2UoMCx1KX1lbHNlIHQubGVuZ3RoPjEwJiYvWzAtOV0oPzpcc3xcLykvLnRlc3QodCkmJihsPXQubWF0Y2goLyhbMC05XSspL2cpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQodCl9KSkscz10Lm1hdGNoKC8oW2Etel0pL2dpKS5qb2luKCIiKS50b0xvd2VyQ2FzZSgpKTtlbHNlIGlmKGlzTmFOKHQpKWlmKGkodCkpe3ZhciBkPWEodC5yLHQucmVkLHQuUixudWxsKTtudWxsIT09ZD8ocz0icmdiIixsPVtkLGEodC5nLHQuZ3JlZW4sdC5HKSxhKHQuYix0LmJsdWUsdC5CKV0pOihzPSJoc2wiLGw9W2EodC5oLHQuaHVlLHQuSCksYSh0LnMsdC5zYXR1cmF0aW9uLHQuUyksYSh0LmwsdC5saWdodG5lc3MsdC5MLHQuYix0LmJyaWdodG5lc3MpXSksYz1hKHQuYSx0LmFscGhhLHQub3BhY2l0eSwxKSxudWxsIT10Lm9wYWNpdHkmJihjLz0xMDApfWVsc2UoQXJyYXkuaXNBcnJheSh0KXx8ci5BcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3JiZBcnJheUJ1ZmZlci5pc1ZpZXcodCkpJiYobD1bdFswXSx0WzFdLHRbMl1dLHM9InJnYiIsYz00PT09dC5sZW5ndGg/dFszXToxKTtlbHNlIHM9InJnYiIsbD1bdD4+PjE2LCg2NTI4MCZ0KT4+PjgsMjU1JnRdO3JldHVybntzcGFjZTpzLHZhbHVlczpsLGFscGhhOmN9fTt2YXIgbz17cmVkOjAsb3JhbmdlOjYwLHllbGxvdzoxMjAsZ3JlZW46MTgwLGJsdWU6MjQwLHB1cnBsZTozMDB9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJjb2xvci1uYW1lIjoxMjUsZGVmaW5lZDoxNzEsImlzLXBsYWluLW9iaiI6NDM3fV0sMTI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLXBhcnNlIiksaT10KCJjb2xvci1zcGFjZS9oc2wiKSxhPXQoImNsYW1wIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9bih0KTtyZXR1cm4gci5zcGFjZT8oKGU9QXJyYXkoMykpWzBdPWEoci52YWx1ZXNbMF0sMCwyNTUpLGVbMV09YShyLnZhbHVlc1sxXSwwLDI1NSksZVsyXT1hKHIudmFsdWVzWzJdLDAsMjU1KSwiaCI9PT1yLnNwYWNlWzBdJiYoZT1pLnJnYihlKSksZS5wdXNoKGEoci5hbHBoYSwwLDEpKSxlKTpbXX19LHtjbGFtcDoxMjEsImNvbG9yLXBhcnNlIjoxMjcsImNvbG9yLXNwYWNlL2hzbCI6MTI5fV0sMTI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vcmdiIik7ZS5leHBvcnRzPXtuYW1lOiJoc2wiLG1pbjpbMCwwLDBdLG1heDpbMzYwLDEwMCwxMDBdLGNoYW5uZWw6WyJodWUiLCJzYXR1cmF0aW9uIiwibGlnaHRuZXNzIl0sYWxpYXM6WyJIU0wiXSxyZ2I6ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvPXRbMF0vMzYwLHM9dFsxXS8xMDAsbD10WzJdLzEwMDtpZigwPT09cylyZXR1cm5bYT0yNTUqbCxhLGFdO2U9MipsLShyPWw8LjU/bCooMStzKTpsK3MtbCpzKSxpPVswLDAsMF07Zm9yKHZhciBjPTA7YzwzO2MrKykobj1vKzEvMyotKGMtMSkpPDA/bisrOm4+MSYmbi0tLGE9NipuPDE/ZSs2KihyLWUpKm46MipuPDE/cjozKm48Mj9lKyhyLWUpKigyLzMtbikqNjplLGlbY109MjU1KmE7cmV0dXJuIGl9fSxuLmhzbD1mdW5jdGlvbih0KXt2YXIgZSxyLG49dFswXS8yNTUsaT10WzFdLzI1NSxhPXRbMl0vMjU1LG89TWF0aC5taW4obixpLGEpLHM9TWF0aC5tYXgobixpLGEpLGw9cy1vO3JldHVybiBzPT09bz9lPTA6bj09PXM/ZT0oaS1hKS9sOmk9PT1zP2U9MisoYS1uKS9sOmE9PT1zJiYoZT00KyhuLWkpL2wpLChlPU1hdGgubWluKDYwKmUsMzYwKSk8MCYmKGUrPTM2MCkscj0obytzKS8yLFtlLDEwMCoocz09PW8/MDpyPD0uNT9sLyhzK28pOmwvKDItcy1vKSksMTAwKnJdfX0seyIuL3JnYiI6MTMwfV0sMTMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToicmdiIixtaW46WzAsMCwwXSxtYXg6WzI1NSwyNTUsMjU1XSxjaGFubmVsOlsicmVkIiwiZ3JlZW4iLCJibHVlIl0sYWxpYXM6WyJSR0IiXX19LHt9XSwxMzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2pldDpbe2luZGV4OjAscmdiOlswLDAsMTMxXX0se2luZGV4Oi4xMjUscmdiOlswLDYwLDE3MF19LHtpbmRleDouMzc1LHJnYjpbNSwyNTUsMjU1XX0se2luZGV4Oi42MjUscmdiOlsyNTUsMjU1LDBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1MCwwLDBdfSx7aW5kZXg6MSxyZ2I6WzEyOCwwLDBdfV0saHN2Olt7aW5kZXg6MCxyZ2I6WzI1NSwwLDBdfSx7aW5kZXg6LjE2OSxyZ2I6WzI1MywyNTUsMl19LHtpbmRleDouMTczLHJnYjpbMjQ3LDI1NSwyXX0se2luZGV4Oi4zMzcscmdiOlswLDI1Miw0XX0se2luZGV4Oi4zNDEscmdiOlswLDI1MiwxMF19LHtpbmRleDouNTA2LHJnYjpbMSwyNDksMjU1XX0se2luZGV4Oi42NzEscmdiOlsyLDAsMjUzXX0se2luZGV4Oi42NzUscmdiOls4LDAsMjUzXX0se2luZGV4Oi44MzkscmdiOlsyNTUsMCwyNTFdfSx7aW5kZXg6Ljg0MyxyZ2I6WzI1NSwwLDI0NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsNl19XSxob3Q6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjMscmdiOlsyMzAsMCwwXX0se2luZGV4Oi42LHJnYjpbMjU1LDIxMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSxzcHJpbmc6W3tpbmRleDowLHJnYjpbMjU1LDAsMjU1XX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDBdfV0sc3VtbWVyOlt7aW5kZXg6MCxyZ2I6WzAsMTI4LDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwxMDJdfV0sYXV0dW1uOlt7aW5kZXg6MCxyZ2I6WzI1NSwwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMF19XSx3aW50ZXI6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDoxLHJnYjpbMCwyNTUsMTI4XX1dLGJvbmU6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjM3NixyZ2I6Wzg0LDg0LDExNl19LHtpbmRleDouNzUzLHJnYjpbMTY5LDIwMCwyMDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLGNvcHBlcjpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouODA0LHJnYjpbMjU1LDE2MCwxMDJdfSx7aW5kZXg6MSxyZ2I6WzI1NSwxOTksMTI3XX1dLGdyZXlzOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSx5aWduYnU6W3tpbmRleDowLHJnYjpbOCwyOSw4OF19LHtpbmRleDouMTI1LHJnYjpbMzcsNTIsMTQ4XX0se2luZGV4Oi4yNSxyZ2I6WzM0LDk0LDE2OF19LHtpbmRleDouMzc1LHJnYjpbMjksMTQ1LDE5Ml19LHtpbmRleDouNSxyZ2I6WzY1LDE4MiwxOTZdfSx7aW5kZXg6LjYyNSxyZ2I6WzEyNywyMDUsMTg3XX0se2luZGV4Oi43NSxyZ2I6WzE5OSwyMzMsMTgwXX0se2luZGV4Oi44NzUscmdiOlsyMzcsMjQ4LDIxN119LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyMTddfV0sZ3JlZW5zOlt7aW5kZXg6MCxyZ2I6WzAsNjgsMjddfSx7aW5kZXg6LjEyNSxyZ2I6WzAsMTA5LDQ0XX0se2luZGV4Oi4yNSxyZ2I6WzM1LDEzOSw2OV19LHtpbmRleDouMzc1LHJnYjpbNjUsMTcxLDkzXX0se2luZGV4Oi41LHJnYjpbMTE2LDE5NiwxMThdfSx7aW5kZXg6LjYyNSxyZ2I6WzE2MSwyMTcsMTU1XX0se2luZGV4Oi43NSxyZ2I6WzE5OSwyMzMsMTkyXX0se2luZGV4Oi44NzUscmdiOlsyMjksMjQ1LDIyNF19LHtpbmRleDoxLHJnYjpbMjQ3LDI1MiwyNDVdfV0seWlvcnJkOlt7aW5kZXg6MCxyZ2I6WzEyOCwwLDM4XX0se2luZGV4Oi4xMjUscmdiOlsxODksMCwzOF19LHtpbmRleDouMjUscmdiOlsyMjcsMjYsMjhdfSx7aW5kZXg6LjM3NSxyZ2I6WzI1Miw3OCw0Ml19LHtpbmRleDouNSxyZ2I6WzI1MywxNDEsNjBdfSx7aW5kZXg6LjYyNSxyZ2I6WzI1NCwxNzgsNzZdfSx7aW5kZXg6Ljc1LHJnYjpbMjU0LDIxNywxMThdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1NSwyMzcsMTYwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDIwNF19XSxibHVlcmVkOlt7aW5kZXg6MCxyZ2I6WzAsMCwyNTVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDBdfV0scmRidTpbe2luZGV4OjAscmdiOls1LDEwLDE3Ml19LHtpbmRleDouMzUscmdiOlsxMDYsMTM3LDI0N119LHtpbmRleDouNSxyZ2I6WzE5MCwxOTAsMTkwXX0se2luZGV4Oi42LHJnYjpbMjIwLDE3MCwxMzJdfSx7aW5kZXg6LjcscmdiOlsyMzAsMTQ1LDkwXX0se2luZGV4OjEscmdiOlsxNzgsMTAsMjhdfV0scGljbmljOlt7aW5kZXg6MCxyZ2I6WzAsMCwyNTVdfSx7aW5kZXg6LjEscmdiOls1MSwxNTMsMjU1XX0se2luZGV4Oi4yLHJnYjpbMTAyLDIwNCwyNTVdfSx7aW5kZXg6LjMscmdiOlsxNTMsMjA0LDI1NV19LHtpbmRleDouNCxyZ2I6WzIwNCwyMDQsMjU1XX0se2luZGV4Oi41LHJnYjpbMjU1LDI1NSwyNTVdfSx7aW5kZXg6LjYscmdiOlsyNTUsMjA0LDI1NV19LHtpbmRleDouNyxyZ2I6WzI1NSwxNTMsMjU1XX0se2luZGV4Oi44LHJnYjpbMjU1LDEwMiwyMDRdfSx7aW5kZXg6LjkscmdiOlsyNTUsMTAyLDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxyYWluYm93Olt7aW5kZXg6MCxyZ2I6WzE1MCwwLDkwXX0se2luZGV4Oi4xMjUscmdiOlswLDAsMjAwXX0se2luZGV4Oi4yNSxyZ2I6WzAsMjUsMjU1XX0se2luZGV4Oi4zNzUscmdiOlswLDE1MiwyNTVdfSx7aW5kZXg6LjUscmdiOls0NCwyNTUsMTUwXX0se2luZGV4Oi42MjUscmdiOlsxNTEsMjU1LDBdfSx7aW5kZXg6Ljc1LHJnYjpbMjU1LDIzNCwwXX0se2luZGV4Oi44NzUscmdiOlsyNTUsMTExLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDBdfV0scG9ydGxhbmQ6W3tpbmRleDowLHJnYjpbMTIsNTEsMTMxXX0se2luZGV4Oi4yNSxyZ2I6WzEwLDEzNiwxODZdfSx7aW5kZXg6LjUscmdiOlsyNDIsMjExLDU2XX0se2luZGV4Oi43NSxyZ2I6WzI0MiwxNDMsNTZdfSx7aW5kZXg6MSxyZ2I6WzIxNywzMCwzMF19XSxibGFja2JvZHk6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjIscmdiOlsyMzAsMCwwXX0se2luZGV4Oi40LHJnYjpbMjMwLDIxMCwwXX0se2luZGV4Oi43LHJnYjpbMjU1LDI1NSwyNTVdfSx7aW5kZXg6MSxyZ2I6WzE2MCwyMDAsMjU1XX1dLGVhcnRoOlt7aW5kZXg6MCxyZ2I6WzAsMCwxMzBdfSx7aW5kZXg6LjEscmdiOlswLDE4MCwxODBdfSx7aW5kZXg6LjIscmdiOls0MCwyMTAsNDBdfSx7aW5kZXg6LjQscmdiOlsyMzAsMjMwLDUwXX0se2luZGV4Oi42LHJnYjpbMTIwLDcwLDIwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSxlbGVjdHJpYzpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMTUscmdiOlszMCwwLDEwMF19LHtpbmRleDouNCxyZ2I6WzEyMCwwLDEwMF19LHtpbmRleDouNixyZ2I6WzE2MCw5MCwwXX0se2luZGV4Oi44LHJnYjpbMjMwLDIwMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjUwLDIyMF19XSxhbHBoYTpbe2luZGV4OjAscmdiOlsyNTUsMjU1LDI1NSwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NSwxXX1dLHZpcmlkaXM6W3tpbmRleDowLHJnYjpbNjgsMSw4NF19LHtpbmRleDouMTMscmdiOls3MSw0NCwxMjJdfSx7aW5kZXg6LjI1LHJnYjpbNTksODEsMTM5XX0se2luZGV4Oi4zOCxyZ2I6WzQ0LDExMywxNDJdfSx7aW5kZXg6LjUscmdiOlszMywxNDQsMTQxXX0se2luZGV4Oi42MyxyZ2I6WzM5LDE3MywxMjldfSx7aW5kZXg6Ljc1LHJnYjpbOTIsMjAwLDk5XX0se2luZGV4Oi44OCxyZ2I6WzE3MCwyMjAsNTBdfSx7aW5kZXg6MSxyZ2I6WzI1MywyMzEsMzddfV0saW5mZXJubzpbe2luZGV4OjAscmdiOlswLDAsNF19LHtpbmRleDouMTMscmdiOlszMSwxMiw3Ml19LHtpbmRleDouMjUscmdiOls4NSwxNSwxMDldfSx7aW5kZXg6LjM4LHJnYjpbMTM2LDM0LDEwNl19LHtpbmRleDouNSxyZ2I6WzE4Niw1NCw4NV19LHtpbmRleDouNjMscmdiOlsyMjcsODksNTFdfSx7aW5kZXg6Ljc1LHJnYjpbMjQ5LDE0MCwxMF19LHtpbmRleDouODgscmdiOlsyNDksMjAxLDUwXX0se2luZGV4OjEscmdiOlsyNTIsMjU1LDE2NF19XSxtYWdtYTpbe2luZGV4OjAscmdiOlswLDAsNF19LHtpbmRleDouMTMscmdiOlsyOCwxNiw2OF19LHtpbmRleDouMjUscmdiOls3OSwxOCwxMjNdfSx7aW5kZXg6LjM4LHJnYjpbMTI5LDM3LDEyOV19LHtpbmRleDouNSxyZ2I6WzE4MSw1NCwxMjJdfSx7aW5kZXg6LjYzLHJnYjpbMjI5LDgwLDEwMF19LHtpbmRleDouNzUscmdiOlsyNTEsMTM1LDk3XX0se2luZGV4Oi44OCxyZ2I6WzI1NCwxOTQsMTM1XX0se2luZGV4OjEscmdiOlsyNTIsMjUzLDE5MV19XSxwbGFzbWE6W3tpbmRleDowLHJnYjpbMTMsOCwxMzVdfSx7aW5kZXg6LjEzLHJnYjpbNzUsMywxNjFdfSx7aW5kZXg6LjI1LHJnYjpbMTI1LDMsMTY4XX0se2luZGV4Oi4zOCxyZ2I6WzE2OCwzNCwxNTBdfSx7aW5kZXg6LjUscmdiOlsyMDMsNzAsMTIxXX0se2luZGV4Oi42MyxyZ2I6WzIyOSwxMDcsOTNdfSx7aW5kZXg6Ljc1LHJnYjpbMjQ4LDE0OCw2NV19LHtpbmRleDouODgscmdiOlsyNTMsMTk1LDQwXX0se2luZGV4OjEscmdiOlsyNDAsMjQ5LDMzXX1dLHdhcm06W3tpbmRleDowLHJnYjpbMTI1LDAsMTc5XX0se2luZGV4Oi4xMyxyZ2I6WzE3MiwwLDE4N119LHtpbmRleDouMjUscmdiOlsyMTksMCwxNzBdfSx7aW5kZXg6LjM4LHJnYjpbMjU1LDAsMTMwXX0se2luZGV4Oi41LHJnYjpbMjU1LDYzLDc0XX0se2luZGV4Oi42MyxyZ2I6WzI1NSwxMjMsMF19LHtpbmRleDouNzUscmdiOlsyMzQsMTc2LDBdfSx7aW5kZXg6Ljg4LHJnYjpbMTkwLDIyOCwwXX0se2luZGV4OjEscmdiOlsxNDcsMjU1LDBdfV0sY29vbDpbe2luZGV4OjAscmdiOlsxMjUsMCwxNzldfSx7aW5kZXg6LjEzLHJnYjpbMTE2LDAsMjE4XX0se2luZGV4Oi4yNSxyZ2I6Wzk4LDc0LDIzN119LHtpbmRleDouMzgscmdiOls2OCwxNDYsMjMxXX0se2luZGV4Oi41LHJnYjpbMCwyMDQsMTk3XX0se2luZGV4Oi42MyxyZ2I6WzAsMjQ3LDE0Nl19LHtpbmRleDouNzUscmdiOlswLDI1NSw4OF19LHtpbmRleDouODgscmdiOls0MCwyNTUsOF19LHtpbmRleDoxLHJnYjpbMTQ3LDI1NSwwXX1dLCJyYWluYm93LXNvZnQiOlt7aW5kZXg6MCxyZ2I6WzEyNSwwLDE3OV19LHtpbmRleDouMSxyZ2I6WzE5OSwwLDE4MF19LHtpbmRleDouMixyZ2I6WzI1NSwwLDEyMV19LHtpbmRleDouMyxyZ2I6WzI1NSwxMDgsMF19LHtpbmRleDouNCxyZ2I6WzIyMiwxOTQsMF19LHtpbmRleDouNSxyZ2I6WzE1MCwyNTUsMF19LHtpbmRleDouNixyZ2I6WzAsMjU1LDU1XX0se2luZGV4Oi43LHJnYjpbMCwyNDYsMTUwXX0se2luZGV4Oi44LHJnYjpbNTAsMTY3LDIyMl19LHtpbmRleDouOSxyZ2I6WzEwMyw1MSwyMzVdfSx7aW5kZXg6MSxyZ2I6WzEyNCwwLDE4Nl19XSxiYXRoeW1ldHJ5Olt7aW5kZXg6MCxyZ2I6WzQwLDI2LDQ0XX0se2luZGV4Oi4xMyxyZ2I6WzU5LDQ5LDkwXX0se2luZGV4Oi4yNSxyZ2I6WzY0LDc2LDEzOV19LHtpbmRleDouMzgscmdiOls2MywxMTAsMTUxXX0se2luZGV4Oi41LHJnYjpbNzIsMTQyLDE1OF19LHtpbmRleDouNjMscmdiOls4NSwxNzQsMTYzXX0se2luZGV4Oi43NSxyZ2I6WzEyMCwyMDYsMTYzXX0se2luZGV4Oi44OCxyZ2I6WzE4NywyMzAsMTcyXX0se2luZGV4OjEscmdiOlsyNTMsMjU0LDIwNF19XSxjZG9tOlt7aW5kZXg6MCxyZ2I6WzQ3LDE1LDYyXX0se2luZGV4Oi4xMyxyZ2I6Wzg3LDIzLDg2XX0se2luZGV4Oi4yNSxyZ2I6WzEzMCwyOCw5OV19LHtpbmRleDouMzgscmdiOlsxNzEsNDEsOTZdfSx7aW5kZXg6LjUscmdiOlsyMDYsNjcsODZdfSx7aW5kZXg6LjYzLHJnYjpbMjMwLDEwNiw4NF19LHtpbmRleDouNzUscmdiOlsyNDIsMTQ5LDEwM119LHtpbmRleDouODgscmdiOlsyNDksMTkzLDEzNV19LHtpbmRleDoxLHJnYjpbMjU0LDIzNywxNzZdfV0sY2hsb3JvcGh5bGw6W3tpbmRleDowLHJnYjpbMTgsMzYsMjBdfSx7aW5kZXg6LjEzLHJnYjpbMjUsNjMsNDFdfSx7aW5kZXg6LjI1LHJnYjpbMjQsOTEsNTldfSx7aW5kZXg6LjM4LHJnYjpbMTMsMTE5LDcyXX0se2luZGV4Oi41LHJnYjpbMTgsMTQ4LDgwXX0se2luZGV4Oi42MyxyZ2I6WzgwLDE3Myw4OV19LHtpbmRleDouNzUscmdiOlsxMzIsMTk2LDEyMl19LHtpbmRleDouODgscmdiOlsxNzUsMjIxLDE2Ml19LHtpbmRleDoxLHJnYjpbMjE1LDI0OSwyMDhdfV0sZGVuc2l0eTpbe2luZGV4OjAscmdiOls1NCwxNCwzNl19LHtpbmRleDouMTMscmdiOls4OSwyMyw4MF19LHtpbmRleDouMjUscmdiOlsxMTAsNDUsMTMyXX0se2luZGV4Oi4zOCxyZ2I6WzEyMCw3NywxNzhdfSx7aW5kZXg6LjUscmdiOlsxMjAsMTEzLDIxM119LHtpbmRleDouNjMscmdiOlsxMTUsMTUxLDIyOF19LHtpbmRleDouNzUscmdiOlsxMzQsMTg1LDIyN119LHtpbmRleDouODgscmdiOlsxNzcsMjE0LDIyN119LHtpbmRleDoxLHJnYjpbMjMwLDI0MSwyNDFdfV0sImZyZWVzdXJmYWNlLWJsdWUiOlt7aW5kZXg6MCxyZ2I6WzMwLDQsMTEwXX0se2luZGV4Oi4xMyxyZ2I6WzQ3LDE0LDE3Nl19LHtpbmRleDouMjUscmdiOls0MSw0NSwyMzZdfSx7aW5kZXg6LjM4LHJnYjpbMjUsOTksMjEyXX0se2luZGV4Oi41LHJnYjpbNjgsMTMxLDIwMF19LHtpbmRleDouNjMscmdiOlsxMTQsMTU2LDE5N119LHtpbmRleDouNzUscmdiOlsxNTcsMTgxLDIwM119LHtpbmRleDouODgscmdiOlsyMDAsMjA4LDIxNl19LHtpbmRleDoxLHJnYjpbMjQxLDIzNywyMzZdfV0sImZyZWVzdXJmYWNlLXJlZCI6W3tpbmRleDowLHJnYjpbNjAsOSwxOF19LHtpbmRleDouMTMscmdiOlsxMDAsMTcsMjddfSx7aW5kZXg6LjI1LHJnYjpbMTQyLDIwLDI5XX0se2luZGV4Oi4zOCxyZ2I6WzE3Nyw0MywyN119LHtpbmRleDouNSxyZ2I6WzE5Miw4Nyw2M119LHtpbmRleDouNjMscmdiOlsyMDUsMTI1LDEwNV19LHtpbmRleDouNzUscmdiOlsyMTYsMTYyLDE0OF19LHtpbmRleDouODgscmdiOlsyMjcsMTk5LDE5M119LHtpbmRleDoxLHJnYjpbMjQxLDIzNywyMzZdfV0sb3h5Z2VuOlt7aW5kZXg6MCxyZ2I6WzY0LDUsNV19LHtpbmRleDouMTMscmdiOlsxMDYsNiwxNV19LHtpbmRleDouMjUscmdiOlsxNDQsMjYsN119LHtpbmRleDouMzgscmdiOlsxNjgsNjQsM119LHtpbmRleDouNSxyZ2I6WzE4OCwxMDAsNF19LHtpbmRleDouNjMscmdiOlsyMDYsMTM2LDExXX0se2luZGV4Oi43NSxyZ2I6WzIyMCwxNzQsMjVdfSx7aW5kZXg6Ljg4LHJnYjpbMjMxLDIxNSw0NF19LHtpbmRleDoxLHJnYjpbMjQ4LDI1NCwxMDVdfV0scGFyOlt7aW5kZXg6MCxyZ2I6WzUxLDIwLDI0XX0se2luZGV4Oi4xMyxyZ2I6WzkwLDMyLDM1XX0se2luZGV4Oi4yNSxyZ2I6WzEyOSw0NCwzNF19LHtpbmRleDouMzgscmdiOlsxNTksNjgsMjVdfSx7aW5kZXg6LjUscmdiOlsxODIsOTksMTldfSx7aW5kZXg6LjYzLHJnYjpbMTk5LDEzNCwyMl19LHtpbmRleDouNzUscmdiOlsyMTIsMTcxLDM1XX0se2luZGV4Oi44OCxyZ2I6WzIyMSwyMTAsNTRdfSx7aW5kZXg6MSxyZ2I6WzIyNSwyNTMsNzVdfV0scGhhc2U6W3tpbmRleDowLHJnYjpbMTQ1LDEwNSwxOF19LHtpbmRleDouMTMscmdiOlsxODQsNzEsMzhdfSx7aW5kZXg6LjI1LHJnYjpbMTg2LDU4LDExNV19LHtpbmRleDouMzgscmdiOlsxNjAsNzEsMTg1XX0se2luZGV4Oi41LHJnYjpbMTEwLDk3LDIxOF19LHtpbmRleDouNjMscmdiOls1MCwxMjMsMTY0XX0se2luZGV4Oi43NSxyZ2I6WzMxLDEzMSwxMTBdfSx7aW5kZXg6Ljg4LHJnYjpbNzcsMTI5LDM0XX0se2luZGV4OjEscmdiOlsxNDUsMTA1LDE4XX1dLHNhbGluaXR5Olt7aW5kZXg6MCxyZ2I6WzQyLDI0LDEwOF19LHtpbmRleDouMTMscmdiOlszMyw1MCwxNjJdfSx7aW5kZXg6LjI1LHJnYjpbMTUsOTAsMTQ1XX0se2luZGV4Oi4zOCxyZ2I6WzQwLDExOCwxMzddfSx7aW5kZXg6LjUscmdiOls1OSwxNDYsMTM1XX0se2luZGV4Oi42MyxyZ2I6Wzc5LDE3NSwxMjZdfSx7aW5kZXg6Ljc1LHJnYjpbMTIwLDIwMywxMDRdfSx7aW5kZXg6Ljg4LHJnYjpbMTkzLDIyMSwxMDBdfSx7aW5kZXg6MSxyZ2I6WzI1MywyMzksMTU0XX1dLHRlbXBlcmF0dXJlOlt7aW5kZXg6MCxyZ2I6WzQsMzUsNTFdfSx7aW5kZXg6LjEzLHJnYjpbMjMsNTEsMTIyXX0se2luZGV4Oi4yNSxyZ2I6Wzg1LDU5LDE1N119LHtpbmRleDouMzgscmdiOlsxMjksNzksMTQzXX0se2luZGV4Oi41LHJnYjpbMTc1LDk1LDEzMF19LHtpbmRleDouNjMscmdiOlsyMjIsMTEyLDEwMV19LHtpbmRleDouNzUscmdiOlsyNDksMTQ2LDY2XX0se2luZGV4Oi44OCxyZ2I6WzI0OSwxOTYsNjVdfSx7aW5kZXg6MSxyZ2I6WzIzMiwyNTAsOTFdfV0sdHVyYmlkaXR5Olt7aW5kZXg6MCxyZ2I6WzM0LDMxLDI3XX0se2luZGV4Oi4xMyxyZ2I6WzY1LDUwLDQxXX0se2luZGV4Oi4yNSxyZ2I6Wzk4LDY5LDUyXX0se2luZGV4Oi4zOCxyZ2I6WzEzMSw4OSw1N119LHtpbmRleDouNSxyZ2I6WzE2MSwxMTIsNTldfSx7aW5kZXg6LjYzLHJnYjpbMTg1LDE0MCw2Nl19LHtpbmRleDouNzUscmdiOlsyMDIsMTc0LDg4XX0se2luZGV4Oi44OCxyZ2I6WzIxNiwyMDksMTI2XX0se2luZGV4OjEscmdiOlsyMzMsMjQ2LDE3MV19XSwidmVsb2NpdHktYmx1ZSI6W3tpbmRleDowLHJnYjpbMTcsMzIsNjRdfSx7aW5kZXg6LjEzLHJnYjpbMzUsNTIsMTE2XX0se2luZGV4Oi4yNSxyZ2I6WzI5LDgxLDE1Nl19LHtpbmRleDouMzgscmdiOlszMSwxMTMsMTYyXX0se2luZGV4Oi41LHJnYjpbNTAsMTQ0LDE2OV19LHtpbmRleDouNjMscmdiOls4NywxNzMsMTc2XX0se2luZGV4Oi43NSxyZ2I6WzE0OSwxOTYsMTg5XX0se2luZGV4Oi44OCxyZ2I6WzIwMywyMjEsMjExXX0se2luZGV4OjEscmdiOlsyNTQsMjUxLDIzMF19XSwidmVsb2NpdHktZ3JlZW4iOlt7aW5kZXg6MCxyZ2I6WzIzLDM1LDE5XX0se2luZGV4Oi4xMyxyZ2I6WzI0LDY0LDM4XX0se2luZGV4Oi4yNSxyZ2I6WzExLDk1LDQ1XX0se2luZGV4Oi4zOCxyZ2I6WzM5LDEyMywzNV19LHtpbmRleDouNSxyZ2I6Wzk1LDE0NiwxMl19LHtpbmRleDouNjMscmdiOlsxNTIsMTY1LDE4XX0se2luZGV4Oi43NSxyZ2I6WzIwMSwxODYsNjldfSx7aW5kZXg6Ljg4LHJnYjpbMjMzLDIxNiwxMzddfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTMsMjA1XX1dLGN1YmVoZWxpeDpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMDcscmdiOlsyMiw1LDU5XX0se2luZGV4Oi4xMyxyZ2I6WzYwLDQsMTA1XX0se2luZGV4Oi4yLHJnYjpbMTA5LDEsMTM1XX0se2luZGV4Oi4yNyxyZ2I6WzE2MSwwLDE0N119LHtpbmRleDouMzMscmdiOlsyMTAsMiwxNDJdfSx7aW5kZXg6LjQscmdiOlsyNTEsMTEsMTIzXX0se2luZGV4Oi40NyxyZ2I6WzI1NSwyOSw5N119LHtpbmRleDouNTMscmdiOlsyNTUsNTQsNjldfSx7aW5kZXg6LjYscmdiOlsyNTUsODUsNDZdfSx7aW5kZXg6LjY3LHJnYjpbMjU1LDEyMCwzNF19LHtpbmRleDouNzMscmdiOlsyNTUsMTU3LDM3XX0se2luZGV4Oi44LHJnYjpbMjQxLDE5MSw1N119LHtpbmRleDouODcscmdiOlsyMjQsMjIwLDkzXX0se2luZGV4Oi45MyxyZ2I6WzIxOCwyNDEsMTQyXX0se2luZGV4OjEscmdiOlsyMjcsMjUzLDE5OF19XX19LHt9XSwxMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb2xvclNjYWxlIiksaT10KCJsZXJwIik7ZnVuY3Rpb24gYSh0KXtyZXR1cm5bdFswXS8yNTUsdFsxXS8yNTUsdFsyXS8yNTUsdFszXV19ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGUscj0iIyIsbj0wO248MzsrK24pcis9KCIwMCIrKGU9KGU9dFtuXSkudG9TdHJpbmcoMTYpKSkuc3Vic3RyKGUubGVuZ3RoKTtyZXR1cm4gcn1mdW5jdGlvbiBzKHQpe3JldHVybiJyZ2JhKCIrdC5qb2luKCIsIikrIikifWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGwsYyx1LGYsaCxwLGQsbTt0fHwodD17fSk7cD0odC5uc2hhZGVzfHw3MiktMSxoPXQuZm9ybWF0fHwiaGV4IiwoZj10LmNvbG9ybWFwKXx8KGY9ImpldCIpO2lmKCJzdHJpbmciPT10eXBlb2YgZil7aWYoZj1mLnRvTG93ZXJDYXNlKCksIW5bZl0pdGhyb3cgRXJyb3IoZisiIG5vdCBhIHN1cHBvcnRlZCBjb2xvcnNjYWxlIik7dT1uW2ZdfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkoZikpdGhyb3cgRXJyb3IoInVuc3VwcG9ydGVkIGNvbG9ybWFwIG9wdGlvbiIsZik7dT1mLnNsaWNlKCl9aWYodS5sZW5ndGg+cCsxKXRocm93IG5ldyBFcnJvcihmKyIgbWFwIHJlcXVpcmVzIG5zaGFkZXMgdG8gYmUgYXQgbGVhc3Qgc2l6ZSAiK3UubGVuZ3RoKTtkPUFycmF5LmlzQXJyYXkodC5hbHBoYSk/MiE9PXQuYWxwaGEubGVuZ3RoP1sxLDFdOnQuYWxwaGEuc2xpY2UoKToibnVtYmVyIj09dHlwZW9mIHQuYWxwaGE/W3QuYWxwaGEsdC5hbHBoYV06WzEsMV07ZT11Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodC5pbmRleCpwKX0pKSxkWzBdPU1hdGgubWluKE1hdGgubWF4KGRbMF0sMCksMSksZFsxXT1NYXRoLm1pbihNYXRoLm1heChkWzFdLDApLDEpO3ZhciBnPXUubWFwKChmdW5jdGlvbih0LGUpe3ZhciByPXVbZV0uaW5kZXgsbj11W2VdLnJnYi5zbGljZSgpO3JldHVybiA0PT09bi5sZW5ndGgmJm5bM10+PTAmJm5bM108PTF8fChuWzNdPWRbMF0rKGRbMV0tZFswXSkqciksbn0pKSx2PVtdO2ZvcihtPTA7bTxlLmxlbmd0aC0xOysrbSl7Yz1lW20rMV0tZVttXSxyPWdbbV0sbD1nW20rMV07Zm9yKHZhciB5PTA7eTxjO3krKyl7dmFyIHg9eS9jO3YucHVzaChbTWF0aC5yb3VuZChpKHJbMF0sbFswXSx4KSksTWF0aC5yb3VuZChpKHJbMV0sbFsxXSx4KSksTWF0aC5yb3VuZChpKHJbMl0sbFsyXSx4KSksaShyWzNdLGxbM10seCldKX19di5wdXNoKHVbdS5sZW5ndGgtMV0ucmdiLmNvbmNhdChkWzFdKSksImhleCI9PT1oP3Y9di5tYXAobyk6InJnYmFTdHJpbmciPT09aD92PXYubWFwKHMpOiJmbG9hdCI9PT1oJiYodj12Lm1hcChhKSk7cmV0dXJuIHZ9fSx7Ii4vY29sb3JTY2FsZSI6MTMxLGxlcnA6NDQwfV0sMTMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKGUscixhKTtpZigwPT09byl7dmFyIHM9aShuKHQsZSxyKSksYz1pKG4odCxlLGEpKTtpZihzPT09Yyl7aWYoMD09PXMpe3ZhciB1PWwodCxlLHIpLGY9bCh0LGUsYSk7cmV0dXJuIHU9PT1mPzA6dT8xOi0xfXJldHVybiAwfXJldHVybiAwPT09Yz9zPjB8fGwodCxlLGEpPy0xOjE6MD09PXM/Yz4wfHxsKHQsZSxyKT8xOi0xOmkoYy1zKX12YXIgaD1uKHQsZSxyKTtyZXR1cm4gaD4wP28+MCYmbih0LGUsYSk+MD8xOi0xOmg8MD9vPjB8fG4odCxlLGEpPjA/MTotMTpuKHQsZSxhKT4wfHxsKHQsZSxyKT8xOi0xfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKSxpPXQoInNpZ251bSIpLGE9dCgidHdvLXN1bSIpLG89dCgicm9idXN0LXByb2R1Y3QiKSxzPXQoInJvYnVzdC1zdW0iKTtmdW5jdGlvbiBsKHQsZSxyKXt2YXIgbj1hKHRbMF0sLWVbMF0pLGk9YSh0WzFdLC1lWzFdKSxsPWEoclswXSwtZVswXSksYz1hKHJbMV0sLWVbMV0pLHU9cyhvKG4sbCksbyhpLGMpKTtyZXR1cm4gdVt1Lmxlbmd0aC0xXT49MH19LHsicm9idXN0LW9yaWVudGF0aW9uIjo1MjQsInJvYnVzdC1wcm9kdWN0Ijo1MjUsInJvYnVzdC1zdW0iOjUyOSxzaWdudW06MTM0LCJ0d28tc3VtIjo1Nzh9XSwxMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PDA/LTE6dD4wPzE6MH19LHt9XSwxMzU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aCxhPXQubGVuZ3RoLWUubGVuZ3RoO2lmKGEpcmV0dXJuIGE7c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIHRbMF0tZVswXTtjYXNlIDI6cmV0dXJuIHRbMF0rdFsxXS1lWzBdLWVbMV18fG4odFswXSx0WzFdKS1uKGVbMF0sZVsxXSk7Y2FzZSAzOnZhciBvPXRbMF0rdFsxXSxzPWVbMF0rZVsxXTtpZihhPW8rdFsyXS0ocytlWzJdKSlyZXR1cm4gYTt2YXIgbD1uKHRbMF0sdFsxXSksYz1uKGVbMF0sZVsxXSk7cmV0dXJuIG4obCx0WzJdKS1uKGMsZVsyXSl8fG4obCt0WzJdLG8pLW4oYytlWzJdLHMpO2Nhc2UgNDp2YXIgdT10WzBdLGY9dFsxXSxoPXRbMl0scD10WzNdLGQ9ZVswXSxtPWVbMV0sZz1lWzJdLHY9ZVszXTtyZXR1cm4gdStmK2grcC0oZCttK2crdil8fG4odSxmLGgscCktbihkLG0sZyx2LGQpfHxuKHUrZix1K2gsdStwLGYraCxmK3AsaCtwKS1uKGQrbSxkK2csZCt2LG0rZyxtK3YsZyt2KXx8bih1K2YraCx1K2YrcCx1K2grcCxmK2grcCktbihkK20rZyxkK20rdixkK2crdixtK2crdik7ZGVmYXVsdDpmb3IodmFyIHk9dC5zbGljZSgpLnNvcnQoaSkseD1lLnNsaWNlKCkuc29ydChpKSxiPTA7YjxyOysrYilpZihhPXlbYl0teFtiXSlyZXR1cm4gYTtyZXR1cm4gMH19O3ZhciBuPU1hdGgubWluO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gdC1lfX0se31dLDEzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjb21wYXJlLWNlbGwiKSxpPXQoImNlbGwtb3JpZW50YXRpb24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LGUpfHxpKHQpLWkoZSl9fSx7ImNlbGwtb3JpZW50YXRpb24iOjExOCwiY29tcGFyZS1jZWxsIjoxMzV9XSwxMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvY2gxZCIpLGk9dCgiLi9saWIvY2gyZCIpLGE9dCgiLi9saWIvY2huZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZigwPT09ZSlyZXR1cm5bXTtpZigxPT09ZSlyZXR1cm5bWzBdXTt2YXIgcj10WzBdLmxlbmd0aDtpZigwPT09cilyZXR1cm5bXTtpZigxPT09cilyZXR1cm4gbih0KTtpZigyPT09cilyZXR1cm4gaSh0KTtyZXR1cm4gYSh0LHIpfX0seyIuL2xpYi9jaDFkIjoxMzgsIi4vbGliL2NoMmQiOjEzOSwiLi9saWIvY2huZCI6MTQwfV0sMTM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTAsbj0xO248dC5sZW5ndGg7KytuKXRbbl1bMF08dFtlXVswXSYmKGU9biksdFtuXVswXT50W3JdWzBdJiYocj1uKTtyZXR1cm4gZTxyP1tbZV0sW3JdXTplPnI/W1tyXSxbZV1dOltbZV1dfX0se31dLDEzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bih0KSxyPWUubGVuZ3RoO2lmKHI8PTIpcmV0dXJuW107Zm9yKHZhciBpPW5ldyBBcnJheShyKSxhPWVbci0xXSxvPTA7bzxyOysrbyl7dmFyIHM9ZVtvXTtpW29dPVthLHNdLGE9c31yZXR1cm4gaX07dmFyIG49dCgibW9ub3RvbmUtY29udmV4LWh1bGwtMmQiKX0seyJtb25vdG9uZS1jb252ZXgtaHVsbC0yZCI6NDQ4fV0sMTQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gbih0LCEwKX1jYXRjaChvKXt2YXIgcj1pKHQpO2lmKHIubGVuZ3RoPD1lKXJldHVybltdO3ZhciBhPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPGUubGVuZ3RoOysraSluW2ldPXRbZVtpXV07dmFyIGE9ZS5sZW5ndGg7Zm9yKGk9MDtpPHI7KytpKWUuaW5kZXhPZihpKTwwJiYoblthKytdPXRbaV0pO3JldHVybiBufSh0LHIpO3JldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MDtpPHI7KytpKWZvcih2YXIgYT10W2ldLG89MDtvPGEubGVuZ3RoOysrbyl7dmFyIHM9YVtvXTtpZihzPG4pYVtvXT1lW3NdO2Vsc2V7cy09bjtmb3IodmFyIGw9MDtsPG47KytsKXM+PWVbbF0mJihzKz0xKTthW29dPXN9fXJldHVybiB0fShuKGEsITApLHIpfX07dmFyIG49dCgiaW5jcmVtZW50YWwtY29udmV4LWh1bGwiKSxpPXQoImFmZmluZS1odWxsIil9LHsiYWZmaW5lLWh1bGwiOjY5LCJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCI6NDI4fV0sMTQxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXtBRkc6ImFmZ2hhbiIsQUxBOiJcXGJcXHdsYW5kIixBTEI6ImFsYmFuaWEiLERaQToiYWxnZXJpYSIsQVNNOiJeKD89LiphbWVyaWMpLipzYW1vYSIsQU5EOiJhbmRvcnJhIixBR086ImFuZ29sYSIsQUlBOiJhbmd1aWxsP2EiLEFUQToiYW50YXJjdGljYSIsQVRHOiJhbnRpZ3VhIixBUkc6ImFyZ2VudGluIixBUk06ImFybWVuaWEiLEFCVzoiXig/IS4qYm9uYWlyZSkuKlxcYmFydWJhIixBVVM6ImF1c3RyYWxpYSIsQVVUOiJeKD8hLipodW5nYXJ5KS4qYXVzdHJpYXxcXGJhdXN0cmkuKlxcYmVtcCIsQVpFOiJhemVyYmFpamFuIixCSFM6ImJhaGFtYXMiLEJIUjoiYmFocmFpbiIsQkdEOiJiYW5nbGFkZXNofF4oPz0uKmVhc3QpLipwYWtpP3N0YW4iLEJSQjoiYmFyYmFkb3MiLEJMUjoiYmVsYXJ1c3xieWVsbyIsQkVMOiJeKD8hLipsdXhlbSkuKmJlbGdpdW0iLEJMWjoiYmVsaXplfF4oPz0uKmJyaXRpc2gpLipob25kdXJhcyIsQkVOOiJiZW5pbnxkYWhvbWUiLEJNVToiYmVybXVkYSIsQlROOiJiaHV0YW4iLEJPTDoiYm9saXZpYSIsQkVTOiJeKD89Lipib25haXJlKS4qZXVzdGF0aXVzfF4oPz0uKmNhcmliKS4qbmV0aGVybGFuZHN8XFxiYmVzLj9pc2xhbmRzIixCSUg6ImhlcnplZ292aW5hfGJvc25pYSIsQldBOiJib3Rzd2FuYXxiZWNodWFuYSIsQlZUOiJib3V2ZXQiLEJSQToiYnJhemlsIixJT1Q6ImJyaXRpc2guP2luZGlhbi4/b2NlYW4iLEJSTjoiYnJ1bmVpIixCR1I6ImJ1bGdhcmlhIixCRkE6ImJ1cmtpbmF8XFxiZmFzb3x1cHBlci4/dm9sdGEiLEJESToiYnVydW5kaSIsQ1BWOiJ2ZXJkZSIsS0hNOiJjYW1ib2RpYXxrYW1wdWNoZWF8a2htZXIiLENNUjoiY2FtZXJvb24iLENBTjoiY2FuYWRhIixDWU06ImNheW1hbiIsQ0FGOiJcXGJjZW50cmFsLmFmcmljYW4ucmVwdWJsaWMiLFRDRDoiXFxiY2hhZCIsQ0hMOiJcXGJjaGlsZSIsQ0hOOiJeKD8hLipcXGJtYWMpKD8hLipcXGJob25nKSg/IS4qXFxidGFpKSg/IS4qXFxicmVwKS4qY2hpbmF8Xig/PS4qcGVvKSg/PS4qcmVwKS4qY2hpbmEiLENYUjoiY2hyaXN0bWFzIixDQ0s6IlxcYmNvY29zfGtlZWxpbmciLENPTDoiY29sb21iaWEiLENPTToiY29tb3JvIixDT0c6Il4oPyEuKlxcYmRlbSkoPyEuKlxcYmRbXFwuXT9yKSg/IS4qa2luc2hhc2EpKD8hLip6YWlyZSkoPyEuKmJlbGcpKD8hLipsLm9wb2xkdmlsbGUpKD8hLipmcmVlKS4qXFxiY29uZ28iLENPSzoiXFxiY29vayIsQ1JJOiJjb3N0YS4/cmljYSIsQ0lWOiJpdm9pcmV8aXZvcnkiLEhSVjoiY3JvYXRpYSIsQ1VCOiJcXGJjdWJhIixDVVc6Il4oPyEuKmJvbmFpcmUpLipcXGJjdXJhKGN8XHhlNylhbyIsQ1lQOiJjeXBydXMiLENTSzoiY3plY2hvc2xvdmFraWEiLENaRToiXig/PS4qcmVwKS4qY3plY2h8Y3plY2hpYXxib2hlbWlhIixDT0Q6IlxcYmRlbS4qY29uZ298Y29uZ28uKlxcYmRlbXxjb25nby4qXFxiZFtcXC5dP3J8XFxiZFtcXC5dP3IuKmNvbmdvfGJlbGdpYW4uP2NvbmdvfGNvbmdvLj9mcmVlLj9zdGF0ZXxraW5zaGFzYXx6YWlyZXxsLm9wb2xkdmlsbGV8ZHJjfGRyb2N8cmRjIixETks6ImRlbm1hcmsiLERKSToiZGppYm91dGkiLERNQToiZG9taW5pY2EoPyFuKSIsRE9NOiJkb21pbmljYW4ucmVwIixFQ1U6ImVjdWFkb3IiLEVHWToiZWd5cHQiLFNMVjoiZWwuP3NhbHZhZG9yIixHTlE6Imd1aW5lLiplcXxlcS4qZ3VpbmV8Xig/PS4qc3BhbikuKmd1aW5lYSIsRVJJOiJlcml0cmVhIixFU1Q6ImVzdG9uaWEiLEVUSDoiZXRoaW9waWF8YWJ5c3NpbmlhIixGTEs6ImZhbGtsYW5kfG1hbHZpbmFzIixGUk86ImZhcm9lfGZhZXJvZSIsRkpJOiJmaWppIixGSU46ImZpbmxhbmQiLEZSQToiXig/IS4qXFxiZGVwKSg/IS4qbWFydGluaXF1ZSkuKmZyYW5jZXxmcmVuY2guP3JlcHVibGljfFxcYmdhdWwiLEdVRjoiXig/PS4qZnJlbmNoKS4qZ3VpYW5hIixQWUY6ImZyZW5jaC4/cG9seW5lc2lhfHRhaGl0aSIsQVRGOiJmcmVuY2guP3NvdXRoZXJuIixHQUI6ImdhYm9uIixHTUI6ImdhbWJpYSIsR0VPOiJeKD8hLipzb3V0aCkuKmdlb3JnaWEiLEREUjoiZ2VybWFuLj9kZW1vY3JhdGljLj9yZXB1YmxpY3xkZW1vY3JhdGljLj9yZXB1YmxpYy4qZ2VybWFueXxlYXN0Lmdlcm1hbnkiLERFVToiXig/IS4qZWFzdCkuKmdlcm1hbnl8Xig/PS4qXFxiZmVkLipcXGJyZXApLipnZXJtYW4iLEdIQToiZ2hhbmF8Z29sZC4/Y29hc3QiLEdJQjoiZ2licmFsdGFyIixHUkM6ImdyZWVjZXxoZWxsZW5pY3xoZWxsYXMiLEdSTDoiZ3JlZW5sYW5kIixHUkQ6ImdyZW5hZGEiLEdMUDoiZ3VhZGVsb3VwZSIsR1VNOiJcXGJndWFtIixHVE06Imd1YXRlbWFsYSIsR0dZOiJndWVybnNleSIsR0lOOiJeKD8hLiplcSkoPyEuKnNwYW4pKD8hLipiaXNzYXUpKD8hLipwb3J0dSkoPyEuKm5ldykuKmd1aW5lYSIsR05COiJiaXNzYXV8Xig/PS4qcG9ydHUpLipndWluZWEiLEdVWToiZ3V5YW5hfGJyaXRpc2guP2d1aWFuYSIsSFRJOiJoYWl0aSIsSE1EOiJoZWFyZC4qbWNkb25hbGQiLFZBVDoiaG9seS4/c2VlfHZhdGljYW58cGFwYWwuP3N0IixITkQ6Il4oPyEuKmJyaXQpLipob25kdXJhcyIsSEtHOiJob25nLj9rb25nIixIVU46Il4oPyEuKmF1c3RyKS4qaHVuZ2FyeSIsSVNMOiJpY2VsYW5kIixJTkQ6ImluZGlhKD8hLipvY2VhKSIsSUROOiJpbmRvbmVzaWEiLElSTjoiXFxiaXJhbnxwZXJzaWEiLElSUToiXFxiaXJhcXxtZXNvcG90YW1pYSIsSVJMOiIoXmlyZWxhbmQpfChecmVwdWJsaWMuKmlyZWxhbmQpIixJTU46Il4oPz0uKmlzbGUpLipcXGJtYW4iLElTUjoiaXNyYWVsIixJVEE6Iml0YWx5IixKQU06ImphbWFpY2EiLEpQTjoiamFwYW4iLEpFWToiamVyc2V5IixKT1I6ImpvcmRhbiIsS0FaOiJrYXphayIsS0VOOiJrZW55YXxicml0aXNoLj9lYXN0Lj9hZnJpY2F8ZWFzdC4/YWZyaWNhLj9wcm90IixLSVI6ImtpcmliYXRpIixQUks6Il4oPz0uKmRlbW9jcmF0fHBlb3BsZXxub3J0aHxkLipwLioucikuKlxcYmtvcmVhfGRwcmt8a29yZWEuKihkLipwLipyKSIsS1dUOiJrdXdhaXQiLEtHWjoia3lyZ3l6fGtpcmdoaXoiLExBTzoiXFxibGFvcz9cXGIiLExWQToibGF0dmlhIixMQk46ImxlYmFub24iLExTTzoibGVzb3Rob3xiYXN1dG8iLExCUjoibGliZXJpYSIsTEJZOiJsaWJ5YSIsTElFOiJsaWVjaHRlbnN0ZWluIixMVFU6ImxpdGh1YW5pYSIsTFVYOiJeKD8hLipiZWxnKS4qbHV4ZW0iLE1BQzoibWFjYShvfHUpIixNREc6Im1hZGFnYXNjYXJ8bWFsYWdhc3kiLE1XSToibWFsYXdpfG55YXNhIixNWVM6Im1hbGF5c2lhIixNRFY6Im1hbGRpdmUiLE1MSToiXFxibWFsaVxcYiIsTUxUOiJcXGJtYWx0YSIsTUhMOiJtYXJzaGFsbCIsTVRROiJtYXJ0aW5pcXVlIixNUlQ6Im1hdXJpdGFuaWEiLE1VUzoibWF1cml0aXVzIixNWVQ6IlxcYm1heW90dGUiLE1FWDoiXFxibWV4aWMiLEZTTToiZmVkLiptaWNyb25lc2lhfG1pY3JvbmVzaWEuKmZlZCIsTUNPOiJtb25hY28iLE1ORzoibW9uZ29saWEiLE1ORToiXig/IS4qc2VyYmlhKS4qbW9udGVuZWdybyIsTVNSOiJtb250c2VycmF0IixNQVI6Im1vcm9jY298XFxibWFyb2MiLE1PWjoibW96YW1iaXF1ZSIsTU1SOiJteWFubWFyfGJ1cm1hIixOQU06Im5hbWliaWEiLE5SVToibmF1cnUiLE5QTDoibmVwYWwiLE5MRDoiXig/IS4qXFxiYW50KSg/IS4qXFxiY2FyaWIpLipuZXRoZXJsYW5kcyIsQU5UOiJeKD89LipcXGJhbnQpLioobmV0aGVyfGR1dGNoKSIsTkNMOiJuZXcuP2NhbGVkb25pYSIsTlpMOiJuZXcuP3plYWxhbmQiLE5JQzoibmljYXJhZ3VhIixORVI6IlxcYm5pZ2VyKD8haWEpIixOR0E6Im5pZ2VyaWEiLE5JVToibml1ZSIsTkZLOiJub3Jmb2xrIixNTlA6Im1hcmlhbmEiLE5PUjoibm9yd2F5IixPTU46IlxcYm9tYW58dHJ1Y2lhbCIsUEFLOiJeKD8hLiplYXN0KS4qcGFraT9zdGFuIixQTFc6InBhbGF1IixQU0U6InBhbGVzdGlufFxcYmdhemF8d2VzdC4/YmFuayIsUEFOOiJwYW5hbWEiLFBORzoicGFwdWF8bmV3Lj9ndWluZWEiLFBSWToicGFyYWd1YXkiLFBFUjoicGVydSIsUEhMOiJwaGlsaXBwaW5lcyIsUENOOiJwaXRjYWlybiIsUE9MOiJwb2xhbmQiLFBSVDoicG9ydHVnYWwiLFBSSToicHVlcnRvLj9yaWNvIixRQVQ6InFhdGFyIixLT1I6Il4oPyEuKmQuKnAuKnIpKD8hLipkZW1vY3JhdCkoPyEuKnBlb3BsZSkoPyEuKm5vcnRoKS4qXFxia29yZWEoPyEuKmQuKnAuKnIpIixNREE6Im1vbGRvdnxiKGF8ZSlzc2FyYWJpYSIsUkVVOiJyKGV8XHhlOSl1bmlvbiIsUk9VOiJyKG98dXxvdSltYW5pYSIsUlVTOiJcXGJydXNzaWF8c292aWV0Lj91bmlvbnx1XFwuP3NcXC4/c1xcLj9yfHNvY2lhbGlzdC4/cmVwdWJsaWNzIixSV0E6InJ3YW5kYSIsQkxNOiJiYXJ0aChlfFx4ZTkpbGVteSIsU0hOOiJoZWxlbmEiLEtOQToia2l0dHN8XFxibmV2aXMiLExDQToiXFxibHVjaWEiLE1BRjoiXig/PS4qY29sbGVjdGl2aXR5KS4qbWFydGlufF4oPz0uKmZyYW5jZSkuKm1hcnRpbig/IWlxdWUpfF4oPz0uKmZyZW5jaCkuKm1hcnRpbig/IWlxdWUpIixTUE06Im1pcXVlbG9uIixWQ1Q6InZpbmNlbnQiLFdTTToiXig/IS4qYW1lcikuKnNhbW9hIixTTVI6InNhbi4/bWFyaW5vIixTVFA6IlxcYnMoYXxceGUzKW8uP3RvbShlfFx4ZTkpIixTQVU6IlxcYnNhXFx3Ki4/YXJhYmlhIixTRU46InNlbmVnYWwiLFNSQjoiXig/IS4qbW9udGUpLipzZXJiaWEiLFNZQzoic2V5Y2hlbGwiLFNMRToic2llcnJhIixTR1A6InNpbmdhcG9yZSIsU1hNOiJeKD8hLiptYXJ0aW4pKD8hLipzYWJhKS4qbWFhcnRlbiIsU1ZLOiJeKD8hLipjemUpLipzbG92YWsiLFNWTjoic2xvdmVuaWEiLFNMQjoic29sb21vbiIsU09NOiJzb21hbGkiLFpBRjoic291dGguYWZyaWNhfHNcXFxcLi4/YWZyaWNhIixTR1M6InNvdXRoLj9nZW9yZ2lhfHNhbmR3aWNoIixTU0Q6IlxcYnNcXHcqLj9zdWRhbiIsRVNQOiJzcGFpbiIsTEtBOiJzcmkuP2xhbmthfGNleWxvbiIsU0ROOiJeKD8hLipcXGJzKD8hdSkpLipzdWRhbiIsU1VSOiJzdXJpbmFtfGR1dGNoLj9ndWlhbmEiLFNKTToic3ZhbGJhcmQiLFNXWjoic3dhemlsYW5kIixTV0U6InN3ZWRlbiIsQ0hFOiJzd2l0enxzd2lzcyIsU1lSOiJzeXJpYSIsVFdOOiJ0YWl3YW58dGFpcGVpfGZvcm1vc2F8Xig/IS4qcGVvKSg/PS4qcmVwKS4qY2hpbmEiLFRKSzoidGFqaWsiLFRIQToidGhhaWxhbmR8XFxic2lhbSIsTUtEOiJtYWNlZG9uaWF8Znlyb20iLFRMUzoiXig/PS4qbGVzdGUpLip0aW1vcnxeKD89LiplYXN0KS4qdGltb3IiLFRHTzoidG9nbyIsVEtMOiJ0b2tlbGF1IixUT046InRvbmdhIixUVE86InRyaW5pZGFkfHRvYmFnbyIsVFVOOiJ0dW5pc2lhIixUVVI6InR1cmtleSIsVEtNOiJ0dXJrbWVuIixUQ0E6InR1cmtzIixUVVY6InR1dmFsdSIsVUdBOiJ1Z2FuZGEiLFVLUjoidWtyYWluIixBUkU6ImVtaXJhdGVzfF51XFwuP2FcXC4/ZVxcLj8kfHVuaXRlZC4/YXJhYi4/ZW0iLEdCUjoidW5pdGVkLj9raW5nZG9tfGJyaXRhaW58XnVcXC4/a1xcLj8kIixUWkE6InRhbnphbmlhIixVU0E6InVuaXRlZC4/c3RhdGVzXFxiKD8hLippc2xhbmRzKXxcXGJ1XFwuP3NcXC4/YVxcLj9cXGJ8Xlxccyp1XFwuP3NcXC4/XFxiKD8hLippc2xhbmRzKSIsVU1JOiJtaW5vci4/b3V0bHlpbmcuP2lzIixVUlk6InVydWd1YXkiLFVaQjoidXpiZWsiLFZVVDoidmFudWF0dXxuZXcuP2hlYnJpZGVzIixWRU46InZlbmV6dWVsYSIsVk5NOiJeKD8hLipyZXB1YmxpYykuKnZpZXQuP25hbXxeKD89Lipzb2NpYWxpc3QpLip2aWV0Lj9uYW0iLFZHQjoiXig/PS4qXFxidVxcLj9cXHM/aykuKnZpcmdpbnxeKD89Lipicml0KS4qdmlyZ2lufF4oPz0uKmtpbmdkb20pLip2aXJnaW4iLFZJUjoiXig/PS4qXFxidVxcLj9cXHM/cykuKnZpcmdpbnxeKD89LipzdGF0ZXMpLip2aXJnaW4iLFdMRjoiZnV0dW5hfHdhbGxpcyIsRVNIOiJ3ZXN0ZXJuLnNhaGFyYSIsWUVNOiJeKD8hLiphcmFiKSg/IS4qbm9ydGgpKD8hLipzYW5hKSg/IS4qcGVvKSg/IS4qZGVtKSg/IS4qc291dGgpKD8hLiphZGVuKSg/IS4qXFxicFxcLj9kXFwuP3IpLip5ZW1lbiIsWU1EOiJeKD89LipwZW8pLip5ZW1lbnxeKD8hLipyZXApKD89LipkZW0pLip5ZW1lbnxeKD89Lipzb3V0aCkuKnllbWVufF4oPz0uKmFkZW4pLip5ZW1lbnxeKD89LipcXGJwXFwuP2RcXC4/cikuKnllbWVuIixZVUc6Inl1Z29zbGF2aWEiLFpNQjoiemFtYmlhfG5vcnRoZXJuLj9yaG9kZXNpYSIsRUFaOiJ6YW56aWJhciIsWldFOiJ6aW1iYWJ3ZXxeKD8hLipub3J0aGVybikuKnJob2Rlc2lhIn19LHt9XSwxNDI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJ4eC1zbWFsbCIsIngtc21hbGwiLCJzbWFsbCIsIm1lZGl1bSIsImxhcmdlIiwieC1sYXJnZSIsInh4LWxhcmdlIiwibGFyZ2VyIiwic21hbGxlciJdfSx7fV0sMTQzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsibm9ybWFsIiwiY29uZGVuc2VkIiwic2VtaS1jb25kZW5zZWQiLCJleHRyYS1jb25kZW5zZWQiLCJ1bHRyYS1jb25kZW5zZWQiLCJleHBhbmRlZCIsInNlbWktZXhwYW5kZWQiLCJleHRyYS1leHBhbmRlZCIsInVsdHJhLWV4cGFuZGVkIl19LHt9XSwxNDQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJub3JtYWwiLCJpdGFsaWMiLCJvYmxpcXVlIl19LHt9XSwxNDU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJub3JtYWwiLCJib2xkIiwiYm9sZGVyIiwibGlnaHRlciIsIjEwMCIsIjIwMCIsIjMwMCIsIjQwMCIsIjUwMCIsIjYwMCIsIjcwMCIsIjgwMCIsIjkwMCJdfSx7fV0sMTQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17cGFyc2U6dCgiLi9wYXJzZSIpLHN0cmluZ2lmeTp0KCIuL3N0cmluZ2lmeSIpfX0seyIuL3BhcnNlIjoxNDgsIi4vc3RyaW5naWZ5IjoxNDl9XSwxNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY3NzLWZvbnQtc2l6ZS1rZXl3b3JkcyIpO2UuZXhwb3J0cz17aXNTaXplOmZ1bmN0aW9uKHQpe3JldHVybi9eW1xkXC5dLy50ZXN0KHQpfHwtMSE9PXQuaW5kZXhPZigiLyIpfHwtMSE9PW4uaW5kZXhPZih0KX19fSx7ImNzcy1mb250LXNpemUta2V5d29yZHMiOjE0Mn1dLDE0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ1bnF1b3RlIiksaT10KCJjc3MtZ2xvYmFsLWtleXdvcmRzIiksYT10KCJjc3Mtc3lzdGVtLWZvbnQta2V5d29yZHMiKSxvPXQoImNzcy1mb250LXdlaWdodC1rZXl3b3JkcyIpLHM9dCgiY3NzLWZvbnQtc3R5bGUta2V5d29yZHMiKSxsPXQoImNzcy1mb250LXN0cmV0Y2gta2V5d29yZHMiKSxjPXQoInN0cmluZy1zcGxpdC1ieSIpLHU9dCgiLi9saWIvdXRpbCIpLmlzU2l6ZTtlLmV4cG9ydHM9aDt2YXIgZj1oLmNhY2hlPXt9O2Z1bmN0aW9uIGgodCl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiRm9udCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLiIpO2lmKGZbdF0pcmV0dXJuIGZbdF07aWYoIiI9PT10KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHBhcnNlIGFuIGVtcHR5IHN0cmluZy4iKTtpZigtMSE9PWEuaW5kZXhPZih0KSlyZXR1cm4gZlt0XT17c3lzdGVtOnR9O2Zvcih2YXIgZSxyPXtzdHlsZToibm9ybWFsIix2YXJpYW50OiJub3JtYWwiLHdlaWdodDoibm9ybWFsIixzdHJldGNoOiJub3JtYWwiLGxpbmVIZWlnaHQ6Im5vcm1hbCIsc2l6ZToiMXJlbSIsZmFtaWx5Olsic2VyaWYiXX0saD1jKHQsL1xzKy8pO2U9aC5zaGlmdCgpOyl7aWYoLTEhPT1pLmluZGV4T2YoZSkpcmV0dXJuWyJzdHlsZSIsInZhcmlhbnQiLCJ3ZWlnaHQiLCJzdHJldGNoIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7clt0XT1lfSkpLGZbdF09cjtpZigtMT09PXMuaW5kZXhPZihlKSlpZigibm9ybWFsIiE9PWUmJiJzbWFsbC1jYXBzIiE9PWUpaWYoLTE9PT1sLmluZGV4T2YoZSkpe2lmKC0xPT09by5pbmRleE9mKGUpKXtpZih1KGUpKXt2YXIgZD1jKGUsIi8iKTtpZihyLnNpemU9ZFswXSxudWxsIT1kWzFdP3IubGluZUhlaWdodD1wKGRbMV0pOiIvIj09PWhbMF0mJihoLnNoaWZ0KCksci5saW5lSGVpZ2h0PXAoaC5zaGlmdCgpKSksIWgubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1aXJlZCBmb250LWZhbWlseS4iKTtyZXR1cm4gci5mYW1pbHk9YyhoLmpvaW4oIiAiKSwvXHMqLFxzKi8pLm1hcChuKSxmW3RdPXJ9dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG9yIHVuc3VwcG9ydGVkIGZvbnQgdG9rZW46ICIrZSl9ci53ZWlnaHQ9ZX1lbHNlIHIuc3RyZXRjaD1lO2Vsc2Ugci52YXJpYW50PWU7ZWxzZSByLnN0eWxlPWV9dGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIHJlcXVpcmVkIGZvbnQtc2l6ZS4iKX1mdW5jdGlvbiBwKHQpe3ZhciBlPXBhcnNlRmxvYXQodCk7cmV0dXJuIGUudG9TdHJpbmcoKT09PXQ/ZTp0fX0seyIuL2xpYi91dGlsIjoxNDcsImNzcy1mb250LXN0cmV0Y2gta2V5d29yZHMiOjE0MywiY3NzLWZvbnQtc3R5bGUta2V5d29yZHMiOjE0NCwiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzIjoxNDUsImNzcy1nbG9iYWwta2V5d29yZHMiOjE1MCwiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzIjoxNTEsInN0cmluZy1zcGxpdC1ieSI6NTYyLHVucXVvdGU6NTkzfV0sMTQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBpY2stYnktYWxpYXMiKSxpPXQoIi4vbGliL3V0aWwiKS5pc1NpemUsYT1tKHQoImNzcy1nbG9iYWwta2V5d29yZHMiKSksbz1tKHQoImNzcy1zeXN0ZW0tZm9udC1rZXl3b3JkcyIpKSxzPW0odCgiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzIikpLGw9bSh0KCJjc3MtZm9udC1zdHlsZS1rZXl3b3JkcyIpKSxjPW0odCgiY3NzLWZvbnQtc3RyZXRjaC1rZXl3b3JkcyIpKSx1PXtub3JtYWw6MSwic21hbGwtY2FwcyI6MX0sZj17c2VyaWY6MSwic2Fucy1zZXJpZiI6MSxtb25vc3BhY2U6MSxjdXJzaXZlOjEsZmFudGFzeToxLCJzeXN0ZW0tdWkiOjF9LGg9IjFyZW0iLHA9InNlcmlmIjtmdW5jdGlvbiBkKHQsZSl7aWYodCYmIWVbdF0mJiFhW3RdKXRocm93IEVycm9yKCJVbmtub3duIGtleXdvcmQgYCIrdCsiYCIpO3JldHVybiB0fWZ1bmN0aW9uIG0odCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoO3IrKyllW3Rbcl1dPTE7cmV0dXJuIGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCh0PW4odCx7c3R5bGU6InN0eWxlIGZvbnRzdHlsZSBmb250U3R5bGUgZm9udC1zdHlsZSBzbG9wZSBkaXN0aW5jdGlvbiIsdmFyaWFudDoidmFyaWFudCBmb250LXZhcmlhbnQgZm9udFZhcmlhbnQgZm9udHZhcmlhbnQgdmFyIGNhcGl0YWxpemF0aW9uIix3ZWlnaHQ6IndlaWdodCB3IGZvbnQtd2VpZ2h0IGZvbnRXZWlnaHQgZm9udHdlaWdodCIsc3RyZXRjaDoic3RyZXRjaCBmb250LXN0cmV0Y2ggZm9udFN0cmV0Y2ggZm9udHN0cmV0Y2ggd2lkdGgiLHNpemU6InNpemUgcyBmb250LXNpemUgZm9udFNpemUgZm9udHNpemUgaGVpZ2h0IGVtIGVtU2l6ZSIsbGluZUhlaWdodDoibGggbGluZS1oZWlnaHQgbGluZUhlaWdodCBsaW5laGVpZ2h0IGxlYWRpbmciLGZhbWlseToiZm9udCBmYW1pbHkgZm9udEZhbWlseSBmb250LWZhbWlseSBmb250ZmFtaWx5IHR5cGUgdHlwZWZhY2UgZmFjZSIsc3lzdGVtOiJzeXN0ZW0gcmVzZXJ2ZWQgZGVmYXVsdCBnbG9iYWwifSkpLnN5c3RlbSlyZXR1cm4gdC5zeXN0ZW0mJmQodC5zeXN0ZW0sbyksdC5zeXN0ZW07aWYoZCh0LnN0eWxlLGwpLGQodC52YXJpYW50LHUpLGQodC53ZWlnaHQscyksZCh0LnN0cmV0Y2gsYyksbnVsbD09dC5zaXplJiYodC5zaXplPWgpLCJudW1iZXIiPT10eXBlb2YgdC5zaXplJiYodC5zaXplKz0icHgiKSwhaSl0aHJvdyBFcnJvcigiQmFkIHNpemUgdmFsdWUgYCIrdC5zaXplKyJgIik7dC5mYW1pbHl8fCh0LmZhbWlseT1wKSxBcnJheS5pc0FycmF5KHQuZmFtaWx5KSYmKHQuZmFtaWx5Lmxlbmd0aHx8KHQuZmFtaWx5PVtwXSksdC5mYW1pbHk9dC5mYW1pbHkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZlt0XT90OiciJyt0KyciJ30pKS5qb2luKCIsICIpKTt2YXIgZT1bXTtyZXR1cm4gZS5wdXNoKHQuc3R5bGUpLHQudmFyaWFudCE9PXQuc3R5bGUmJmUucHVzaCh0LnZhcmlhbnQpLHQud2VpZ2h0IT09dC52YXJpYW50JiZ0LndlaWdodCE9PXQuc3R5bGUmJmUucHVzaCh0LndlaWdodCksdC5zdHJldGNoIT09dC53ZWlnaHQmJnQuc3RyZXRjaCE9PXQudmFyaWFudCYmdC5zdHJldGNoIT09dC5zdHlsZSYmZS5wdXNoKHQuc3RyZXRjaCksZS5wdXNoKHQuc2l6ZSsobnVsbD09dC5saW5lSGVpZ2h0fHwibm9ybWFsIj09PXQubGluZUhlaWdodHx8dC5saW5lSGVpZ2h0KyIiPT0iMSI/IiI6Ii8iK3QubGluZUhlaWdodCkpLGUucHVzaCh0LmZhbWlseSksZS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpfX0seyIuL2xpYi91dGlsIjoxNDcsImNzcy1mb250LXN0cmV0Y2gta2V5d29yZHMiOjE0MywiY3NzLWZvbnQtc3R5bGUta2V5d29yZHMiOjE0NCwiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzIjoxNDUsImNzcy1nbG9iYWwta2V5d29yZHMiOjE1MCwiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzIjoxNTEsInBpY2stYnktYWxpYXMiOjQ3NX1dLDE1MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bImluaGVyaXQiLCJpbml0aWFsIiwidW5zZXQiXX0se31dLDE1MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bImNhcHRpb24iLCJpY29uIiwibWVudSIsIm1lc3NhZ2UtYm94Iiwic21hbGwtY2FwdGlvbiIsInN0YXR1cy1iYXIiXX0se31dLDE1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWktMSxzPWkqaSxsPW8qbyxjPSgxKzIqaSkqbCx1PWkqbCxmPXMqKDMtMippKSxoPXMqbztpZih0Lmxlbmd0aCl7YXx8KGE9bmV3IEFycmF5KHQubGVuZ3RoKSk7Zm9yKHZhciBwPXQubGVuZ3RoLTE7cD49MDstLXApYVtwXT1jKnRbcF0rdSplW3BdK2YqcltwXStoKm5bcF07cmV0dXJuIGF9cmV0dXJuIGMqdCt1KmUrZipyK2gqbn0sZS5leHBvcnRzLmRlcml2YXRpdmU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPTYqaSppLTYqaSxzPTMqaSppLTQqaSsxLGw9LTYqaSppKzYqaSxjPTMqaSppLTIqaTtpZih0Lmxlbmd0aCl7YXx8KGE9bmV3IEFycmF5KHQubGVuZ3RoKSk7Zm9yKHZhciB1PXQubGVuZ3RoLTE7dT49MDstLXUpYVt1XT1vKnRbdV0rcyplW3VdK2wqclt1XStjKm5bdV07cmV0dXJuIGF9cmV0dXJuIG8qdCtzKmUrbCpyW3VdK2Mqbn19LHt9XSwxNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJ0eXBlL3ZhbHVlL2lzIiksYT10KCJ0eXBlL3ZhbHVlL2Vuc3VyZSIpLG89dCgidHlwZS9wbGFpbi1mdW5jdGlvbi9lbnN1cmUiKSxzPXQoImVzNS1leHQvb2JqZWN0L2NvcHkiKSxsPXQoImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zIiksYz10KCJlczUtZXh0L29iamVjdC9tYXAiKSx1PUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLGY9T2JqZWN0LmRlZmluZVByb3BlcnR5LGg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtuPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPWEoZSkmJm8oZS52YWx1ZSk7cmV0dXJuIGRlbGV0ZShuPXMoZSkpLndyaXRhYmxlLGRlbGV0ZSBuLnZhbHVlLG4uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIXIub3ZlcndyaXRlRGVmaW5pdGlvbiYmaC5jYWxsKHRoaXMsdCk/aTooZS52YWx1ZT11LmNhbGwoaSxyLnJlc29sdmVDb250ZXh0P3IucmVzb2x2ZUNvbnRleHQodGhpcyk6dGhpcyksZih0aGlzLHQsZSksdGhpc1t0XSl9LG59LGUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1sKGFyZ3VtZW50c1sxXSk7cmV0dXJuIGkoZS5yZXNvbHZlQ29udGV4dCkmJm8oZS5yZXNvbHZlQ29udGV4dCksYyh0LChmdW5jdGlvbih0LHIpe3JldHVybiBuKHIsdCxlKX0pKX19LHsiZXM1LWV4dC9vYmplY3QvY29weSI6MTk3LCJlczUtZXh0L29iamVjdC9tYXAiOjIwNSwiZXM1LWV4dC9vYmplY3Qvbm9ybWFsaXplLW9wdGlvbnMiOjIwNiwidHlwZS9wbGFpbi1mdW5jdGlvbi9lbnN1cmUiOjU4NCwidHlwZS92YWx1ZS9lbnN1cmUiOjU4OCwidHlwZS92YWx1ZS9pcyI6NTg5fV0sMTU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR5cGUvdmFsdWUvaXMiKSxpPXQoInR5cGUvcGxhaW4tZnVuY3Rpb24vaXMiKSxhPXQoImVzNS1leHQvb2JqZWN0L2Fzc2lnbiIpLG89dCgiZXM1LWV4dC9vYmplY3Qvbm9ybWFsaXplLW9wdGlvbnMiKSxzPXQoImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiKTsoZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxsLGMsdTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyfHwic3RyaW5nIiE9dHlwZW9mIHQ/KGM9ZSxlPXQsdD1udWxsKTpjPWFyZ3VtZW50c1syXSxuKHQpPyhyPXMuY2FsbCh0LCJjIiksaT1zLmNhbGwodCwiZSIpLGw9cy5jYWxsKHQsInciKSk6KHI9bD0hMCxpPSExKSx1PXt2YWx1ZTplLGNvbmZpZ3VyYWJsZTpyLGVudW1lcmFibGU6aSx3cml0YWJsZTpsfSxjP2EobyhjKSx1KTp1fSkuZ3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBsLGMsdSxmO3JldHVybiJzdHJpbmciIT10eXBlb2YgdD8odT1yLHI9ZSxlPXQsdD1udWxsKTp1PWFyZ3VtZW50c1szXSxuKGUpP2koZSk/bihyKT9pKHIpfHwodT1yLHI9dm9pZCAwKTpyPXZvaWQgMDoodT1lLGU9cj12b2lkIDApOmU9dm9pZCAwLG4odCk/KGw9cy5jYWxsKHQsImMiKSxjPXMuY2FsbCh0LCJlIikpOihsPSEwLGM9ITEpLGY9e2dldDplLHNldDpyLGNvbmZpZ3VyYWJsZTpsLGVudW1lcmFibGU6Y30sdT9hKG8odSksZik6Zn19LHsiZXM1LWV4dC9vYmplY3QvYXNzaWduIjoxOTQsImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zIjoyMDYsImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiOjIxMywidHlwZS9wbGFpbi1mdW5jdGlvbi9pcyI6NTg1LCJ0eXBlL3ZhbHVlL2lzIjo1ODl9XSwxNTU6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXtuKCJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9yOnQuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiByKHQpe3ZhciByO3JldHVybiAxPT09dC5sZW5ndGgmJihyPXQsdD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHIodCksbil9KSx7bGVmdDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPDA/bj1hKzE6aT1hfXJldHVybiBufSxyaWdodDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPjA/aT1hOm49YSsxfXJldHVybiBufX19dmFyIG49cihlKSxpPW4ucmlnaHQsYT1uLmxlZnQ7ZnVuY3Rpb24gbyh0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIHModCl7cmV0dXJuIG51bGw9PT10P05hTjordH1mdW5jdGlvbiBsKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9MCxvPS0xLGw9MCxjPTA7aWYobnVsbD09ZSlmb3IoOysrbzxpOylpc05hTihyPXModFtvXSkpfHwoYys9KG49ci1sKSooci0obCs9bi8rK2EpKSk7ZWxzZSBmb3IoOysrbzxpOylpc05hTihyPXMoZSh0W29dLG8sdCkpKXx8KGMrPShuPXItbCkqKHItKGwrPW4vKythKSkpO2lmKGE+MSlyZXR1cm4gYy8oYS0xKX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9bCh0LGUpO3JldHVybiByP01hdGguc3FydChyKTpyfWZ1bmN0aW9uIHUodCxlKXt2YXIgcixuLGksYT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPGE7KWlmKG51bGwhPShyPXRbb10pJiZyPj1yKWZvcihuPWk9cjsrK288YTspbnVsbCE9KHI9dFtvXSkmJihuPnImJihuPXIpLGk8ciYmKGk9cikpfWVsc2UgZm9yKDsrK288YTspaWYobnVsbCE9KHI9ZSh0W29dLG8sdCkpJiZyPj1yKWZvcihuPWk9cjsrK288YTspbnVsbCE9KHI9ZSh0W29dLG8sdCkpJiYobj5yJiYobj1yKSxpPHImJihpPXIpKTtyZXR1cm5bbixpXX12YXIgZj1BcnJheS5wcm90b3R5cGUsaD1mLnNsaWNlLHA9Zi5tYXA7ZnVuY3Rpb24gZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdH1mdW5jdGlvbiBnKHQsZSxyKXt0PSt0LGU9K2Uscj0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOmk8Mz8xOityO2Zvcih2YXIgbj0tMSxpPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvcikpLGE9bmV3IEFycmF5KGkpOysrbjxpOylhW25dPXQrbipyO3JldHVybiBhfXZhciB2PU1hdGguc3FydCg1MCkseT1NYXRoLnNxcnQoMTApLHg9TWF0aC5zcXJ0KDIpO2Z1bmN0aW9uIGIodCxlLHIpe3ZhciBuPShlLXQpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksYT1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhhPj12PzEwOmE+PXk/NTphPj14PzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8oYT49dj8xMDphPj15PzU6YT49eD8yOjEpfWZ1bmN0aW9uIF8odCxlLHIpe3ZhciBuPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxyKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSksYT1uL2k7cmV0dXJuIGE+PXY/aSo9MTA6YT49eT9pKj01OmE+PXgmJihpKj0yKSxlPHQ/LWk6aX1mdW5jdGlvbiB3KHQpe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4yKSsxfWZ1bmN0aW9uIFQodCxlLHIpe2lmKG51bGw9PXImJihyPXMpLG49dC5sZW5ndGgpe2lmKChlPStlKTw9MHx8bjwyKXJldHVybityKHRbMF0sMCx0KTtpZihlPj0xKXJldHVybityKHRbbi0xXSxuLTEsdCk7dmFyIG4saT0obi0xKSplLGE9TWF0aC5mbG9vcihpKSxvPStyKHRbYV0sYSx0KTtyZXR1cm4gbysoK3IodFthKzFdLGErMSx0KS1vKSooaS1hKX19ZnVuY3Rpb24gayh0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPGk7KWlmKG51bGwhPShyPXRbYV0pJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPXRbYV0pJiZuPnImJihuPXIpfWVsc2UgZm9yKDsrK2E8aTspaWYobnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPWUodFthXSxhLHQpKSYmbj5yJiYobj1yKTtyZXR1cm4gbn1mdW5jdGlvbiBBKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLHI9ayh0LE0pLG49bmV3IEFycmF5KHIpOysrZTxyOylmb3IodmFyIGksYT0tMSxvPW5bZV09bmV3IEFycmF5KGkpOysrYTxpOylvW2FdPXRbYV1bZV07cmV0dXJuIG59ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdC5sZW5ndGh9dC5iaXNlY3Q9aSx0LmJpc2VjdFJpZ2h0PWksdC5iaXNlY3RMZWZ0PWEsdC5hc2NlbmRpbmc9ZSx0LmJpc2VjdG9yPXIsdC5jcm9zcz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLHMsbD10Lmxlbmd0aCxjPWUubGVuZ3RoLHU9bmV3IEFycmF5KGwqYyk7Zm9yKG51bGw9PXImJihyPW8pLG49YT0wO248bDsrK24pZm9yKHM9dFtuXSxpPTA7aTxjOysraSwrK2EpdVthXT1yKHMsZVtpXSk7cmV0dXJuIHV9LHQuZGVzY2VuZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sdC5kZXZpYXRpb249Yyx0LmV4dGVudD11LHQuaGlzdG9ncmFtPWZ1bmN0aW9uKCl7dmFyIHQ9bSxlPXUscj13O2Z1bmN0aW9uIG4obil7dmFyIGEsbyxzPW4ubGVuZ3RoLGw9bmV3IEFycmF5KHMpO2ZvcihhPTA7YTxzOysrYSlsW2FdPXQoblthXSxhLG4pO3ZhciBjPWUobCksdT1jWzBdLGY9Y1sxXSxoPXIobCx1LGYpO0FycmF5LmlzQXJyYXkoaCl8fChoPV8odSxmLGgpLGg9ZyhNYXRoLmNlaWwodS9oKSpoLGYsaCkpO2Zvcih2YXIgcD1oLmxlbmd0aDtoWzBdPD11OyloLnNoaWZ0KCksLS1wO2Zvcig7aFtwLTFdPmY7KWgucG9wKCksLS1wO3ZhciBkLG09bmV3IEFycmF5KHArMSk7Zm9yKGE9MDthPD1wOysrYSkoZD1tW2FdPVtdKS54MD1hPjA/aFthLTFdOnUsZC54MT1hPHA/aFthXTpmO2ZvcihhPTA7YTxzOysrYSl1PD0obz1sW2FdKSYmbzw9ZiYmbVtpKGgsbywwLHApXS5wdXNoKG5bYV0pO3JldHVybiBtfXJldHVybiBuLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZChlKSxuKTp0fSxuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmQoW3RbMF0sdFsxXV0pLG4pOmV9LG4udGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/ZChoLmNhbGwodCkpOmQodCksbik6cn0sbn0sdC50aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdD1wLmNhbGwodCxzKS5zb3J0KGUpLE1hdGguY2VpbCgobi1yKS8oMiooVCh0LC43NSktVCh0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHQudGhyZXNob2xkU2NvdHQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBNYXRoLmNlaWwoKHItZSkvKDMuNSpjKHQpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHQudGhyZXNob2xkU3R1cmdlcz13LHQubWF4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KHI9dFthXSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9dFthXSkmJnI+biYmKG49cil9ZWxzZSBmb3IoOysrYTxpOylpZihudWxsIT0ocj1lKHRbYV0sYSx0KSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPm4mJihuPXIpO3JldHVybiBufSx0Lm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQubGVuZ3RoLGk9bixhPS0xLG89MDtpZihudWxsPT1lKWZvcig7KythPG47KWlzTmFOKHI9cyh0W2FdKSk/LS1pOm8rPXI7ZWxzZSBmb3IoOysrYTxuOylpc05hTihyPXMoZSh0W2FdLGEsdCkpKT8tLWk6bys9cjtpZihpKXJldHVybiBvL2l9LHQubWVkaWFuPWZ1bmN0aW9uKHQscil7dmFyIG4saT10Lmxlbmd0aCxhPS0xLG89W107aWYobnVsbD09cilmb3IoOysrYTxpOylpc05hTihuPXModFthXSkpfHxvLnB1c2gobik7ZWxzZSBmb3IoOysrYTxpOylpc05hTihuPXMocih0W2FdLGEsdCkpKXx8by5wdXNoKG4pO3JldHVybiBUKG8uc29ydChlKSwuNSl9LHQubWVyZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpPXQubGVuZ3RoLGE9LTEsbz0wOysrYTxpOylvKz10W2FdLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyk7LS1pPj0wOylmb3IoZT0obj10W2ldKS5sZW5ndGg7LS1lPj0wOylyWy0tb109bltlXTtyZXR1cm4gcn0sdC5taW49ayx0LnBhaXJzPWZ1bmN0aW9uKHQsZSl7bnVsbD09ZSYmKGU9byk7Zm9yKHZhciByPTAsbj10Lmxlbmd0aC0xLGk9dFswXSxhPW5ldyBBcnJheShuPDA/MDpuKTtyPG47KWFbcl09ZShpLGk9dFsrK3JdKTtyZXR1cm4gYX0sdC5wZXJtdXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpO3ItLTspbltyXT10W2Vbcl1dO3JldHVybiBufSx0LnF1YW50aWxlPVQsdC5yYW5nZT1nLHQuc2Nhbj1mdW5jdGlvbih0LHIpe2lmKG49dC5sZW5ndGgpe3ZhciBuLGksYT0wLG89MCxzPXRbb107Zm9yKG51bGw9PXImJihyPWUpOysrYTxuOykocihpPXRbYV0scyk8MHx8MCE9PXIocyxzKSkmJihzPWksbz1hKTtyZXR1cm4gMD09PXIocyxzKT9vOnZvaWQgMH19LHQuc2h1ZmZsZT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYT0obnVsbD09cj90Lmxlbmd0aDpyKS0oZT1udWxsPT1lPzA6K2UpO2E7KWk9TWF0aC5yYW5kb20oKSphLS18MCxuPXRbYStlXSx0W2ErZV09dFtpK2VdLHRbaStlXT1uO3JldHVybiB0fSx0LnN1bT1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5sZW5ndGgsaT0tMSxhPTA7aWYobnVsbD09ZSlmb3IoOysraTxuOykocj0rdFtpXSkmJihhKz1yKTtlbHNlIGZvcig7KytpPG47KShyPStlKHRbaV0saSx0KSkmJihhKz1yKTtyZXR1cm4gYX0sdC50aWNrcz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scz0tMTtpZihyPStyLCh0PSt0KT09PShlPStlKSYmcj4wKXJldHVyblt0XTtpZigobj1lPHQpJiYoaT10LHQ9ZSxlPWkpLDA9PT0obz1iKHQsZSxyKSl8fCFpc0Zpbml0ZShvKSlyZXR1cm5bXTtpZihvPjApZm9yKHQ9TWF0aC5jZWlsKHQvbyksZT1NYXRoLmZsb29yKGUvbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwoZS10KzEpKTsrK3M8aTspYVtzXT0odCtzKSpvO2Vsc2UgZm9yKHQ9TWF0aC5mbG9vcih0Km8pLGU9TWF0aC5jZWlsKGUqbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwodC1lKzEpKTsrK3M8aTspYVtzXT0odC1zKS9vO3JldHVybiBuJiZhLnJldmVyc2UoKSxhfSx0LnRpY2tJbmNyZW1lbnQ9Yix0LnRpY2tTdGVwPV8sdC50cmFuc3Bvc2U9QSx0LnZhcmlhbmNlPWwsdC56aXA9ZnVuY3Rpb24oKXtyZXR1cm4gQShhcmd1bWVudHMpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwxNTY6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXtuKCJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9yOnQuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSgpe31mdW5jdGlvbiByKHQscil7dmFyIG49bmV3IGU7aWYodCBpbnN0YW5jZW9mIGUpdC5lYWNoKChmdW5jdGlvbih0LGUpe24uc2V0KGUsdCl9KSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgaSxhPS0xLG89dC5sZW5ndGg7aWYobnVsbD09cilmb3IoOysrYTxvOyluLnNldChhLHRbYV0pO2Vsc2UgZm9yKDsrK2E8bzspbi5zZXQocihpPXRbYV0sYSx0KSxpKX1lbHNlIGlmKHQpZm9yKHZhciBzIGluIHQpbi5zZXQocyx0W3NdKTtyZXR1cm4gbn1mdW5jdGlvbiBuKCl7cmV0dXJue319ZnVuY3Rpb24gaSh0LGUscil7dFtlXT1yfWZ1bmN0aW9uIGEoKXtyZXR1cm4gcigpfWZ1bmN0aW9uIG8odCxlLHIpe3Quc2V0KGUscil9ZnVuY3Rpb24gcygpe31lLnByb3RvdHlwZT1yLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIiQiK3QgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIit0XX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbIiQiK3RdPWUsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPSIkIit0O3JldHVybiBlIGluIHRoaXMmJmRlbGV0ZSB0aGlzW2VdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKSIkIj09PXRbMF0mJmRlbGV0ZSB0aGlzW3RdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKGUuc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2godGhpc1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2goe2tleTplLnNsaWNlKDEpLHZhbHVlOnRoaXNbZV19KTtyZXR1cm4gdH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKCIkIj09PXRbMF0pcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdCh0aGlzW2VdLGUuc2xpY2UoMSksdGhpcyl9fTt2YXIgbD1yLnByb3RvdHlwZTtmdW5jdGlvbiBjKHQsZSl7dmFyIHI9bmV3IHM7aWYodCBpbnN0YW5jZW9mIHMpdC5lYWNoKChmdW5jdGlvbih0KXtyLmFkZCh0KX0pKTtlbHNlIGlmKHQpe3ZhciBuPS0xLGk9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysrbjxpOylyLmFkZCh0W25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKGUodFtuXSxuLHQpKX1yZXR1cm4gcn1zLnByb3RvdHlwZT1jLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cyxoYXM6bC5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIisodCs9IiIpXT10LHRoaXN9LHJlbW92ZTpsLnJlbW92ZSxjbGVhcjpsLmNsZWFyLHZhbHVlczpsLmtleXMsc2l6ZTpsLnNpemUsZW1wdHk6bC5lbXB0eSxlYWNoOmwuZWFjaH0sdC5uZXN0PWZ1bmN0aW9uKCl7dmFyIHQsZSxzLGw9W10sYz1bXTtmdW5jdGlvbiB1KG4saSxhLG8pe2lmKGk+PWwubGVuZ3RoKXJldHVybiBudWxsIT10JiZuLnNvcnQodCksbnVsbCE9ZT9lKG4pOm47Zm9yKHZhciBzLGMsZixoPS0xLHA9bi5sZW5ndGgsZD1sW2krK10sbT1yKCksZz1hKCk7KytoPHA7KShmPW0uZ2V0KHM9ZChjPW5baF0pKyIiKSk/Zi5wdXNoKGMpOm0uc2V0KHMsW2NdKTtyZXR1cm4gbS5lYWNoKChmdW5jdGlvbih0LGUpe28oZyxlLHUodCxpLGEsbykpfSkpLGd9cmV0dXJuIHM9e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdSh0LDAsbixpKX0sbWFwOmZ1bmN0aW9uKHQpe3JldHVybiB1KHQsMCxhLG8pfSxlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0KHIsbil7aWYoKytuPmwubGVuZ3RoKXJldHVybiByO3ZhciBpLGE9Y1tuLTFdO3JldHVybiBudWxsIT1lJiZuPj1sLmxlbmd0aD9pPXIuZW50cmllcygpOihpPVtdLHIuZWFjaCgoZnVuY3Rpb24oZSxyKXtpLnB1c2goe2tleTpyLHZhbHVlczp0KGUsbil9KX0pKSksbnVsbCE9YT9pLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEodC5rZXksZS5rZXkpfSkpOml9KHUodCwwLGEsbyksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gbC5wdXNoKHQpLHN9LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBjW2wubGVuZ3RoLTFdPXQsc30sc29ydFZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gdD1lLHN9LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gZT10LHN9fX0sdC5zZXQ9Yyx0Lm1hcD1yLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2gocik7cmV0dXJuIGV9LHQudmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX0sdC5lbnRyaWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh7a2V5OnIsdmFsdWU6dFtyXX0pO3JldHVybiBlfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwxNTc6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/bihyKTpuKCh0PXR8fHNlbGYpLmQzPXQuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCxlLHIpe3QucHJvdG90eXBlPWUucHJvdG90eXBlPXIsci5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIHIodCxlKXt2YXIgcj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gZSlyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gbigpe312YXIgaT0iXFxzKihbKy1dP1xcZCspXFxzKiIsYT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixvPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixzPS9eIyhbMC05YS1mXXszLDh9KSQvLGw9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2ksaSxpXSsiXFwpJCIpLGM9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW28sbyxvXSsiXFwpJCIpLHU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tpLGksaSxhXSsiXFwpJCIpLGY9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tvLG8sbyxhXSsiXFwpJCIpLGg9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW2EsbyxvXSsiXFwpJCIpLHA9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1thLG8sbyxhXSsiXFwpJCIpLGQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gbSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIGcoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiB2KHQpe3ZhciBlLHI7cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPXMuZXhlYyh0KSk/KHI9ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSw2PT09cj95KGUpOjM9PT1yP25ldyB3KGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTo4PT09cj94KGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1yP3goZT4+MTImMTV8ZT4+OCYyNDAsZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgoMTUmZSk8PDR8MTUmZSkvMjU1KTpudWxsKTooZT1sLmV4ZWModCkpP25ldyB3KGVbMV0sZVsyXSxlWzNdLDEpOihlPWMuZXhlYyh0KSk/bmV3IHcoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9dS5leGVjKHQpKT94KGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPWYuZXhlYyh0KSk/eCgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1oLmV4ZWModCkpP00oZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1wLmV4ZWModCkpP00oZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTpkLmhhc093blByb3BlcnR5KHQpP3koZFt0XSk6InRyYW5zcGFyZW50Ij09PXQ/bmV3IHcoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB5KHQpe3JldHVybiBuZXcgdyh0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24geCh0LGUscixuKXtyZXR1cm4gbjw9MCYmKHQ9ZT1yPU5hTiksbmV3IHcodCxlLHIsbil9ZnVuY3Rpb24gYih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG58fCh0PXYodCkpLHQ/bmV3IHcoKHQ9dC5yZ2IoKSkucix0LmcsdC5iLHQub3BhY2l0eSk6bmV3IHd9ZnVuY3Rpb24gXyh0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/Yih0KTpuZXcgdyh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gdyh0LGUscixuKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gVCgpe3JldHVybiIjIitBKHRoaXMucikrQSh0aGlzLmcpK0EodGhpcy5iKX1mdW5jdGlvbiBrKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gQSh0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIE0odCxlLHIsbil7cmV0dXJuIG48PTA/dD1lPXI9TmFOOnI8PTB8fHI+PTE/dD1lPU5hTjplPD0wJiYodD1OYU4pLG5ldyBMKHQsZSxyLG4pfWZ1bmN0aW9uIFModCl7aWYodCBpbnN0YW5jZW9mIEwpcmV0dXJuIG5ldyBMKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIG58fCh0PXYodCkpLCF0KXJldHVybiBuZXcgTDtpZih0IGluc3RhbmNlb2YgTClyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxyPXQuZy8yNTUsaT10LmIvMjU1LGE9TWF0aC5taW4oZSxyLGkpLG89TWF0aC5tYXgoZSxyLGkpLHM9TmFOLGw9by1hLGM9KG8rYSkvMjtyZXR1cm4gbD8ocz1lPT09bz8oci1pKS9sKzYqKHI8aSk6cj09PW8/KGktZSkvbCsyOihlLXIpL2wrNCxsLz1jPC41P28rYToyLW8tYSxzKj02MCk6bD1jPjAmJmM8MT8wOnMsbmV3IEwocyxsLGMsdC5vcGFjaXR5KX1mdW5jdGlvbiBFKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9TKHQpOm5ldyBMKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBMKHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBDKHQsZSxyKXtyZXR1cm4gMjU1Kih0PDYwP2UrKHItZSkqdC82MDp0PDE4MD9yOnQ8MjQwP2UrKHItZSkqKDI0MC10KS82MDplKX1lKG4sdix7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDptLGZvcm1hdEhleDptLGZvcm1hdEhzbDpmdW5jdGlvbigpe3JldHVybiBTKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6Zyx0b1N0cmluZzpnfSksZSh3LF8scihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgdyh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgdyh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OlQsZm9ybWF0SGV4OlQsZm9ybWF0UmdiOmssdG9TdHJpbmc6a30pKSxlKEwsRSxyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBMKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IEwodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSplLGk9MipyLW47cmV0dXJuIG5ldyB3KEModD49MjQwP3QtMjQwOnQrMTIwLGksbiksQyh0LGksbiksQyh0PDEyMD90KzI0MDp0LTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpO3ZhciBQPU1hdGguUEkvMTgwLEk9MTgwL01hdGguUEksTz02LzI5LHo9MypPKk87ZnVuY3Rpb24gRCh0KXtpZih0IGluc3RhbmNlb2YgRilyZXR1cm4gbmV3IEYodC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgcSlyZXR1cm4gRyh0KTt0IGluc3RhbmNlb2Ygd3x8KHQ9Yih0KSk7dmFyIGUscixuPVUodC5yKSxpPVUodC5nKSxhPVUodC5iKSxvPUIoKC4yMjI1MDQ1Km4rLjcxNjg3ODYqaSsuMDYwNjE2OSphKS8xKTtyZXR1cm4gbj09PWkmJmk9PT1hP2U9cj1vOihlPUIoKC40MzYwNzQ3Km4rLjM4NTA2NDkqaSsuMTQzMDgwNCphKS8uOTY0MjIpLHI9QigoLjAxMzkzMjIqbisuMDk3MTA0NSppKy43MTQxNzMzKmEpLy44MjUyMSkpLG5ldyBGKDExNipvLTE2LDUwMCooZS1vKSwyMDAqKG8tciksdC5vcGFjaXR5KX1mdW5jdGlvbiBSKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9EKHQpOm5ldyBGKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBGKHQsZSxyLG4pe3RoaXMubD0rdCx0aGlzLmE9K2UsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBCKHQpe3JldHVybiB0Pi4wMDg4NTY0NTE2NzkwMzU2MzE/TWF0aC5wb3codCwxLzMpOnQveis0LzI5fWZ1bmN0aW9uIE4odCl7cmV0dXJuIHQ+Tz90KnQqdDp6Kih0LTQvMjkpfWZ1bmN0aW9uIGoodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBVKHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIFYodCl7aWYodCBpbnN0YW5jZW9mIHEpcmV0dXJuIG5ldyBxKHQuaCx0LmMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIEZ8fCh0PUQodCkpLDA9PT10LmEmJjA9PT10LmIpcmV0dXJuIG5ldyBxKE5hTiwwPHQubCYmdC5sPDEwMD8wOk5hTix0LmwsdC5vcGFjaXR5KTt2YXIgZT1NYXRoLmF0YW4yKHQuYix0LmEpKkk7cmV0dXJuIG5ldyBxKGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIEgodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1YodCk6bmV3IHEodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIHEodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMuYz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIEcodCl7aWYoaXNOYU4odC5oKSlyZXR1cm4gbmV3IEYodC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCpQO3JldHVybiBuZXcgRih0LmwsTWF0aC5jb3MoZSkqdC5jLE1hdGguc2luKGUpKnQuYyx0Lm9wYWNpdHkpfWUoRixSLHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBGKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRih0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAscj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBuZXcgdyhqKDMuMTMzODU2MSooZT0uOTY0MjIqTihlKSktMS42MTY4NjY3Kih0PTEqTih0KSktLjQ5MDYxNDYqKHI9LjgyNTIxKk4ocikpKSxqKC0uOTc4NzY4NCplKzEuOTE2MTQxNSp0Ky4wMzM0NTQqciksaiguMDcxOTQ1MyplLS4yMjg5OTE0KnQrMS40MDUyNDI3KnIpLHRoaXMub3BhY2l0eSl9fSkpLGUocSxILHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBxKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcSh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBHKHRoaXMpLnJnYigpfX0pKTt2YXIgWT0tLjE0ODYxLFc9MS43ODI3NyxYPS0uMjkyMjcsWj0tLjkwNjQ5LEo9MS45NzI5NCxLPUoqWixRPUoqVywkPVcqWC1aKlk7ZnVuY3Rpb24gdHQodCl7aWYodCBpbnN0YW5jZW9mIHJ0KXJldHVybiBuZXcgcnQodC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2Ygd3x8KHQ9Yih0KSk7dmFyIGU9dC5yLzI1NSxyPXQuZy8yNTUsbj10LmIvMjU1LGk9KCQqbitLKmUtUSpyKS8oJCtLLVEpLGE9bi1pLG89KEoqKHItaSktWCphKS9aLHM9TWF0aC5zcXJ0KG8qbythKmEpLyhKKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKG8sYSkqSS0xMjA6TmFOO3JldHVybiBuZXcgcnQobDwwP2wrMzYwOmwscyxpLHQub3BhY2l0eSl9ZnVuY3Rpb24gZXQodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3R0KHQpOm5ldyBydCh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gcnQodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWUocnQsZXQscihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgcnQodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgcnQodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKlAsZT0rdGhpcy5sLHI9aXNOYU4odGhpcy5zKT8wOnRoaXMucyplKigxLWUpLG49TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gbmV3IHcoMjU1KihlK3IqKFkqbitXKmkpKSwyNTUqKGUrciooWCpuK1oqaSkpLDI1NSooZStyKihKKm4pKSx0aGlzLm9wYWNpdHkpfX0pKSx0LmNvbG9yPXYsdC5jdWJlaGVsaXg9ZXQsdC5ncmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBGKHQsMCwwLG51bGw9PWU/MTplKX0sdC5oY2w9SCx0LmhzbD1FLHQubGFiPVIsdC5sY2g9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1YodCk6bmV3IHEocixlLHQsbnVsbD09bj8xOm4pfSx0LnJnYj1fLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDE1ODpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9uKHIpOm4oKHQ9dHx8c2VsZikuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dmFyIGU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gcigpe2Zvcih2YXIgdCxlPTAscj1hcmd1bWVudHMubGVuZ3RoLGk9e307ZTxyOysrZSl7aWYoISh0PWFyZ3VtZW50c1tlXSsiIil8fHQgaW4gaXx8L1tccy5dLy50ZXN0KHQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO2lbdF09W119cmV0dXJuIG5ldyBuKGkpfWZ1bmN0aW9uIG4odCl7dGhpcy5fPXR9ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7aWYobj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx0JiYhZS5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6cn19KSl9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcixuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWlmKChyPXRbbl0pLm5hbWU9PT1lKXJldHVybiByLnZhbHVlfWZ1bmN0aW9uIG8odCxyLG4pe2Zvcih2YXIgaT0wLGE9dC5sZW5ndGg7aTxhOysraSlpZih0W2ldLm5hbWU9PT1yKXt0W2ldPWUsdD10LnNsaWNlKDAsaSkuY29uY2F0KHQuc2xpY2UoaSsxKSk7YnJlYWt9cmV0dXJuIG51bGwhPW4mJnQucHVzaCh7bmFtZTpyLHZhbHVlOm59KSx0fW4ucHJvdG90eXBlPXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10aGlzLl8scz1pKHQrIiIsbiksbD0tMSxjPXMubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KytsPGM7KWlmKHI9KHQ9c1tsXSkudHlwZSluW3JdPW8obltyXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihyIGluIG4pbltyXT1vKG5bcl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KytsPGM7KWlmKChyPSh0PXNbbF0pLnR5cGUpJiYocj1hKG5bcl0sdC5uYW1lKSkpcmV0dXJuIHJ9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl0uc2xpY2UoKTtyZXR1cm4gbmV3IG4odCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigocj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByLG4saT1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihhPTAscj0obj10aGlzLl9bdF0pLmxlbmd0aDthPHI7KythKW5bYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciBuPXRoaXMuX1t0XSxpPTAsYT1uLmxlbmd0aDtpPGE7KytpKW5baV0udmFsdWUuYXBwbHkoZSxyKX19LHQuZGlzcGF0Y2g9cixPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwxNTk6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24obixpKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/aShyLHQoImQzLXF1YWR0cmVlIiksdCgiZDMtY29sbGVjdGlvbiIpLHQoImQzLWRpc3BhdGNoIiksdCgiZDMtdGltZXIiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyxuLmQzLG4uZDMpfSh0aGlzLChmdW5jdGlvbih0LGUscixuLGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBvKCl7cmV0dXJuIDFlLTYqKE1hdGgucmFuZG9tKCktLjUpfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIGwodCl7cmV0dXJuIHQueSt0LnZ5fWZ1bmN0aW9uIGModCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiBmKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC55fXZhciBwPU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKTt0LmZvcmNlQ2VudGVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI7ZnVuY3Rpb24gbigpe3ZhciBuLGksYT1yLmxlbmd0aCxvPTAscz0wO2ZvcihuPTA7bjxhOysrbilvKz0oaT1yW25dKS54LHMrPWkueTtmb3Iobz1vL2EtdCxzPXMvYS1lLG49MDtuPGE7KytuKShpPXJbbl0pLngtPW8saS55LT1zfXJldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1lJiYoZT0wKSxuLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cj10fSxuLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Usbik6dH0sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LG4pOmV9LG59LHQuZm9yY2VDb2xsaWRlPWZ1bmN0aW9uKHQpe3ZhciByLG4saT0xLGM9MTtmdW5jdGlvbiB1KCl7Zm9yKHZhciB0LGEsdSxoLHAsZCxtLGc9ci5sZW5ndGgsdj0wO3Y8YzsrK3YpZm9yKGE9ZS5xdWFkdHJlZShyLHMsbCkudmlzaXRBZnRlcihmKSx0PTA7dDxnOysrdCl1PXJbdF0sZD1uW3UuaW5kZXhdLG09ZCpkLGg9dS54K3UudngscD11LnkrdS52eSxhLnZpc2l0KHkpO2Z1bmN0aW9uIHkodCxlLHIsbixhKXt2YXIgcz10LmRhdGEsbD10LnIsYz1kK2w7aWYoIXMpcmV0dXJuIGU+aCtjfHxuPGgtY3x8cj5wK2N8fGE8cC1jO2lmKHMuaW5kZXg+dS5pbmRleCl7dmFyIGY9aC1zLngtcy52eCxnPXAtcy55LXMudnksdj1mKmYrZypnO3Y8YypjJiYoMD09PWYmJih2Kz0oZj1vKCkpKmYpLDA9PT1nJiYodis9KGc9bygpKSpnKSx2PShjLSh2PU1hdGguc3FydCh2KSkpL3YqaSx1LnZ4Kz0oZio9dikqKGM9KGwqPWwpLyhtK2wpKSx1LnZ5Kz0oZyo9dikqYyxzLnZ4LT1mKihjPTEtYykscy52eS09ZypjKX19fWZ1bmN0aW9uIGYodCl7aWYodC5kYXRhKXJldHVybiB0LnI9blt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgZT10LnI9MDtlPDQ7KytlKXRbZV0mJnRbZV0ucj50LnImJih0LnI9dFtlXS5yKX1mdW5jdGlvbiBoKCl7aWYocil7dmFyIGUsaSxhPXIubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShhKSxlPTA7ZTxhOysrZSlpPXJbZV0sbltpLmluZGV4XT0rdChpLGUscil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1hKG51bGw9PXQ/MTordCkpLHUuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsaCgpfSx1Lml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsdSk6Y30sdS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCx1KTppfSx1LnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmEoK2UpLGgoKSx1KTp0fSx1fSx0LmZvcmNlTGluaz1mdW5jdGlvbih0KXt2YXIgZSxuLGkscyxsLGY9YyxoPWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGgubWluKHNbdC5zb3VyY2UuaW5kZXhdLHNbdC50YXJnZXQuaW5kZXhdKX0scD1hKDMwKSxkPTE7ZnVuY3Rpb24gbShyKXtmb3IodmFyIGk9MCxhPXQubGVuZ3RoO2k8ZDsrK2kpZm9yKHZhciBzLGMsdSxmLGgscCxtLGc9MDtnPGE7KytnKWM9KHM9dFtnXSkuc291cmNlLGY9KHU9cy50YXJnZXQpLngrdS52eC1jLngtYy52eHx8bygpLGg9dS55K3UudnktYy55LWMudnl8fG8oKSxmKj1wPSgocD1NYXRoLnNxcnQoZipmK2gqaCkpLW5bZ10pL3AqciplW2ddLGgqPXAsdS52eC09ZioobT1sW2ddKSx1LnZ5LT1oKm0sYy52eCs9ZioobT0xLW0pLGMudnkrPWgqbX1mdW5jdGlvbiBnKCl7aWYoaSl7dmFyIGEsbyxjPWkubGVuZ3RoLGg9dC5sZW5ndGgscD1yLm1hcChpLGYpO2ZvcihhPTAscz1uZXcgQXJyYXkoYyk7YTxoOysrYSkobz10W2FdKS5pbmRleD1hLCJvYmplY3QiIT10eXBlb2Ygby5zb3VyY2UmJihvLnNvdXJjZT11KHAsby5zb3VyY2UpKSwib2JqZWN0IiE9dHlwZW9mIG8udGFyZ2V0JiYoby50YXJnZXQ9dShwLG8udGFyZ2V0KSksc1tvLnNvdXJjZS5pbmRleF09KHNbby5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbby50YXJnZXQuaW5kZXhdPShzW28udGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoYT0wLGw9bmV3IEFycmF5KGgpO2E8aDsrK2Epbz10W2FdLGxbYV09c1tvLnNvdXJjZS5pbmRleF0vKHNbby5zb3VyY2UuaW5kZXhdK3Nbby50YXJnZXQuaW5kZXhdKTtlPW5ldyBBcnJheShoKSx2KCksbj1uZXcgQXJyYXkoaCkseSgpfX1mdW5jdGlvbiB2KCl7aWYoaSlmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZVtyXT0raCh0W3JdLHIsdCl9ZnVuY3Rpb24geSgpe2lmKGkpZm9yKHZhciBlPTAscj10Lmxlbmd0aDtlPHI7KytlKW5bZV09K3AodFtlXSxlLHQpfXJldHVybiBudWxsPT10JiYodD1bXSksbS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2k9dCxnKCl9LG0ubGlua3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxnKCksbSk6dH0sbS5pZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj10LG0pOmZ9LG0uaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rdCxtKTpkfSxtLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSgrdCksdigpLG0pOmh9LG0uZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSx5KCksbSk6cH0sbX0sdC5mb3JjZU1hbnlCb2R5PWZ1bmN0aW9uKCl7dmFyIHQscixuLGkscz1hKC0zMCksbD0xLGM9MS8wLHU9LjgxO2Z1bmN0aW9uIHAoaSl7dmFyIGEsbz10Lmxlbmd0aCxzPWUucXVhZHRyZWUodCxmLGgpLnZpc2l0QWZ0ZXIobSk7Zm9yKG49aSxhPTA7YTxvOysrYSlyPXRbYV0scy52aXNpdChnKX1mdW5jdGlvbiBkKCl7aWYodCl7dmFyIGUscixuPXQubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShuKSxlPTA7ZTxuOysrZSlyPXRbZV0saVtyLmluZGV4XT0rcyhyLGUsdCl9fWZ1bmN0aW9uIG0odCl7dmFyIGUscixuLGEsbyxzPTAsbD0wO2lmKHQubGVuZ3RoKXtmb3Iobj1hPW89MDtvPDQ7KytvKShlPXRbb10pJiYocj1NYXRoLmFicyhlLnZhbHVlKSkmJihzKz1lLnZhbHVlLGwrPXIsbis9ciplLngsYSs9ciplLnkpO3QueD1uL2wsdC55PWEvbH1lbHNleyhlPXQpLng9ZS5kYXRhLngsZS55PWUuZGF0YS55O2Rve3MrPWlbZS5kYXRhLmluZGV4XX13aGlsZShlPWUubmV4dCl9dC52YWx1ZT1zfWZ1bmN0aW9uIGcodCxlLGEscyl7aWYoIXQudmFsdWUpcmV0dXJuITA7dmFyIGY9dC54LXIueCxoPXQueS1yLnkscD1zLWUsZD1mKmYraCpoO2lmKHAqcC91PGQpcmV0dXJuIGQ8YyYmKDA9PT1mJiYoZCs9KGY9bygpKSpmKSwwPT09aCYmKGQrPShoPW8oKSkqaCksZDxsJiYoZD1NYXRoLnNxcnQobCpkKSksci52eCs9Zip0LnZhbHVlKm4vZCxyLnZ5Kz1oKnQudmFsdWUqbi9kKSwhMDtpZighKHQubGVuZ3RofHxkPj1jKSl7KHQuZGF0YSE9PXJ8fHQubmV4dCkmJigwPT09ZiYmKGQrPShmPW8oKSkqZiksMD09PWgmJihkKz0oaD1vKCkpKmgpLGQ8bCYmKGQ9TWF0aC5zcXJ0KGwqZCkpKTtkb3t0LmRhdGEhPT1yJiYocD1pW3QuZGF0YS5pbmRleF0qbi9kLHIudngrPWYqcCxyLnZ5Kz1oKnApfXdoaWxlKHQ9dC5uZXh0KX19cmV0dXJuIHAuaW5pdGlhbGl6ZT1mdW5jdGlvbihlKXt0PWUsZCgpfSxwLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSgrdCksZCgpLHApOnN9LHAuZGlzdGFuY2VNaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCp0LHApOk1hdGguc3FydChsKX0scC5kaXN0YW5jZU1heD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10KnQscCk6TWF0aC5zcXJ0KGMpfSxwLnRoZXRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQqdCxwKTpNYXRoLnNxcnQodSl9LHB9LHQuZm9yY2VSYWRpYWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbyxzPWEoLjEpO2Z1bmN0aW9uIGwodCl7Zm9yKHZhciBhPTAscz1uLmxlbmd0aDthPHM7KythKXt2YXIgbD1uW2FdLGM9bC54LWV8fDFlLTYsdT1sLnktcnx8MWUtNixmPU1hdGguc3FydChjKmMrdSp1KSxoPShvW2FdLWYpKmlbYV0qdC9mO2wudngrPWMqaCxsLnZ5Kz11Kmh9fWZ1bmN0aW9uIGMoKXtpZihuKXt2YXIgZSxyPW4ubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxlPTA7ZTxyOysrZSlvW2VdPSt0KG5bZV0sZSxuKSxpW2VdPWlzTmFOKG9bZV0pPzA6K3MobltlXSxlLG4pfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9YSgrdCkpLG51bGw9PWUmJihlPTApLG51bGw9PXImJihyPTApLGwuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtuPXQsYygpfSxsLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSgrdCksYygpLGwpOnN9LGwucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YSgrZSksYygpLGwpOnR9LGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCxsKTplfSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsbCk6cn0sbH0sdC5mb3JjZVNpbXVsYXRpb249ZnVuY3Rpb24odCl7dmFyIGUsYT0xLG89LjAwMSxzPTEtTWF0aC5wb3cobywxLzMwMCksbD0wLGM9LjYsdT1yLm1hcCgpLGY9aS50aW1lcihkKSxoPW4uZGlzcGF0Y2goInRpY2siLCJlbmQiKTtmdW5jdGlvbiBkKCl7bSgpLGguY2FsbCgidGljayIsZSksYTxvJiYoZi5zdG9wKCksaC5jYWxsKCJlbmQiLGUpKX1mdW5jdGlvbiBtKHIpe3ZhciBuLGksbz10Lmxlbmd0aDt2b2lkIDA9PT1yJiYocj0xKTtmb3IodmFyIGY9MDtmPHI7KytmKWZvcihhKz0obC1hKSpzLHUuZWFjaCgoZnVuY3Rpb24odCl7dChhKX0pKSxuPTA7bjxvOysrbiludWxsPT0oaT10W25dKS5meD9pLngrPWkudngqPWM6KGkueD1pLmZ4LGkudng9MCksbnVsbD09aS5meT9pLnkrPWkudnkqPWM6KGkueT1pLmZ5LGkudnk9MCk7cmV0dXJuIGV9ZnVuY3Rpb24gZygpe2Zvcih2YXIgZSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKXtpZigoZT10W3JdKS5pbmRleD1yLG51bGwhPWUuZngmJihlLng9ZS5meCksbnVsbCE9ZS5meSYmKGUueT1lLmZ5KSxpc05hTihlLngpfHxpc05hTihlLnkpKXt2YXIgaT0xMCpNYXRoLnNxcnQociksYT1yKnA7ZS54PWkqTWF0aC5jb3MoYSksZS55PWkqTWF0aC5zaW4oYSl9KGlzTmFOKGUudngpfHxpc05hTihlLnZ5KSkmJihlLnZ4PWUudnk9MCl9fWZ1bmN0aW9uIHYoZSl7cmV0dXJuIGUuaW5pdGlhbGl6ZSYmZS5pbml0aWFsaXplKHQpLGV9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxnKCksZT17dGljazptLHJlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZi5yZXN0YXJ0KGQpLGV9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gZi5zdG9wKCksZX0sbm9kZXM6ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cixnKCksdS5lYWNoKHYpLGUpOnR9LGFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LGUpOmF9LGFscGhhTWluOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGUpOm99LGFscGhhRGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsZSk6K3N9LGFscGhhVGFyZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSt0LGUpOmx9LHZlbG9jaXR5RGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9MS10LGUpOjEtY30sZm9yY2U6ZnVuY3Rpb24odCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhudWxsPT1yP3UucmVtb3ZlKHQpOnUuc2V0KHQsdihyKSksZSk6dS5nZXQodCl9LGZpbmQ6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpLGEsbyxzLGwsYz0wLHU9dC5sZW5ndGg7Zm9yKG51bGw9PW4/bj0xLzA6bio9bixjPTA7Yzx1OysrYykobz0oaT1lLShzPXRbY10pLngpKmkrKGE9ci1zLnkpKmEpPG4mJihsPXMsbj1vKTtyZXR1cm4gbH0sb246ZnVuY3Rpb24odCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhoLm9uKHQsciksZSk6aC5vbih0KX19fSx0LmZvcmNlWD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1hKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKShpPWVbYV0pLnZ4Kz0oblthXS1pLngpKnJbYV0qdH1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIGEsbz1lLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyksbj1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2EpclthXT1pc05hTihuW2FdPSt0KGVbYV0sYSxlKSk/MDoraShlW2FdLGEsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1hKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQscygpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSgrdCkscygpLG8pOml9LG8ueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmEoK2UpLHMoKSxvKTp0fSxvfSx0LmZvcmNlWT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1hKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKShpPWVbYV0pLnZ5Kz0oblthXS1pLnkpKnJbYV0qdH1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIGEsbz1lLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyksbj1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2EpclthXT1pc05hTihuW2FdPSt0KGVbYV0sYSxlKSk/MDoraShlW2FdLGEsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1hKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQscygpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSgrdCkscygpLG8pOml9LG8ueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmEoK2UpLHMoKSxvKTp0fSxvfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtY29sbGVjdGlvbiI6MTU2LCJkMy1kaXNwYXRjaCI6MTU4LCJkMy1xdWFkdHJlZSI6MTY2LCJkMy10aW1lciI6MTcwfV0sMTYwOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP24ocik6bigodD0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczp0fHxzZWxmKS5kMz10LmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsZSl7aWYoKHI9KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49dC5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCt0LnNsaWNlKHIrMSldfWZ1bmN0aW9uIHIodCl7cmV0dXJuKHQ9ZShNYXRoLmFicyh0KSkpP3RbMV06TmFOfXZhciBuLGk9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gYSh0KXtpZighKGU9aS5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlO3JldHVybiBuZXcgbyh7ZmlsbDplWzFdLGFsaWduOmVbMl0sc2lnbjplWzNdLHN5bWJvbDplWzRdLHplcm86ZVs1XSx3aWR0aDplWzZdLGNvbW1hOmVbN10scHJlY2lzaW9uOmVbOF0mJmVbOF0uc2xpY2UoMSksdHJpbTplWzldLHR5cGU6ZVsxMF19KX1mdW5jdGlvbiBvKHQpe3RoaXMuZmlsbD12b2lkIDA9PT10LmZpbGw/IiAiOnQuZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PXQuYWxpZ24/Ij4iOnQuYWxpZ24rIiIsdGhpcy5zaWduPXZvaWQgMD09PXQuc2lnbj8iLSI6dC5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PXQuc3ltYm9sPyIiOnQuc3ltYm9sKyIiLHRoaXMuemVybz0hIXQuemVybyx0aGlzLndpZHRoPXZvaWQgMD09PXQud2lkdGg/dm9pZCAwOit0LndpZHRoLHRoaXMuY29tbWE9ISF0LmNvbW1hLHRoaXMucHJlY2lzaW9uPXZvaWQgMD09PXQucHJlY2lzaW9uP3ZvaWQgMDordC5wcmVjaXNpb24sdGhpcy50cmltPSEhdC50cmltLHRoaXMudHlwZT12b2lkIDA9PT10LnR5cGU/IiI6dC50eXBlKyIifWZ1bmN0aW9uIHModCxyKXt2YXIgbj1lKHQscik7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIGk9blswXSxhPW5bMV07cmV0dXJuIGE8MD8iMC4iK25ldyBBcnJheSgtYSkuam9pbigiMCIpK2k6aS5sZW5ndGg+YSsxP2kuc2xpY2UoMCxhKzEpKyIuIitpLnNsaWNlKGErMSk6aStuZXcgQXJyYXkoYS1pLmxlbmd0aCsyKS5qb2luKCIwIil9YS5wcm90b3R5cGU9by5wcm90b3R5cGUsby5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodm9pZCAwPT09dGhpcy53aWR0aD8iIjpNYXRoLm1heCgxLDB8dGhpcy53aWR0aCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHZvaWQgMD09PXRoaXMucHJlY2lzaW9uPyIiOiIuIitNYXRoLm1heCgwLDB8dGhpcy5wcmVjaXNpb24pKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTt2YXIgbD17IiUiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKDEwMCp0KS50b0ZpeGVkKGUpfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKHQpe3JldHVybiB0KyIifSxkOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0PU1hdGgucm91bmQodCkpPj0xZTIxP3QudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTp0LnRvU3RyaW5nKDEwKX0sZTpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRXhwb25lbnRpYWwoZSl9LGY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0ZpeGVkKGUpfSxnOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9QcmVjaXNpb24oZSl9LG86ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gcygxMDAqdCxlKX0scjpzLHM6ZnVuY3Rpb24odCxyKXt2YXIgaT1lKHQscik7aWYoIWkpcmV0dXJuIHQrIiI7dmFyIGE9aVswXSxvPWlbMV0scz1vLShuPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKG8vMykpKSkrMSxsPWEubGVuZ3RoO3JldHVybiBzPT09bD9hOnM+bD9hK25ldyBBcnJheShzLWwrMSkuam9pbigiMCIpOnM+MD9hLnNsaWNlKDAscykrIi4iK2Euc2xpY2Uocyk6IjAuIituZXcgQXJyYXkoMS1zKS5qb2luKCIwIikrZSh0LE1hdGgubWF4KDAscitzLTEpKVswXX0sWDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNil9fTtmdW5jdGlvbiBjKHQpe3JldHVybiB0fXZhciB1LGY9QXJyYXkucHJvdG90eXBlLm1hcCxoPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhiNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIHAodCl7dmFyIGUsaSxvPXZvaWQgMD09PXQuZ3JvdXBpbmd8fHZvaWQgMD09PXQudGhvdXNhbmRzP2M6KGU9Zi5jYWxsKHQuZ3JvdXBpbmcsTnVtYmVyKSxpPXQudGhvdXNhbmRzKyIiLGZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPXQubGVuZ3RoLGE9W10sbz0wLHM9ZVswXSxsPTA7bj4wJiZzPjAmJihsK3MrMT5yJiYocz1NYXRoLm1heCgxLHItbCkpLGEucHVzaCh0LnN1YnN0cmluZyhuLT1zLG4rcykpLCEoKGwrPXMrMSk+cikpOylzPWVbbz0obysxKSVlLmxlbmd0aF07cmV0dXJuIGEucmV2ZXJzZSgpLmpvaW4oaSl9KSxzPXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVswXSsiIix1PXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVsxXSsiIixwPXZvaWQgMD09PXQuZGVjaW1hbD8iLiI6dC5kZWNpbWFsKyIiLGQ9dm9pZCAwPT09dC5udW1lcmFscz9jOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFsrZV19KSl9fShmLmNhbGwodC5udW1lcmFscyxTdHJpbmcpKSxtPXZvaWQgMD09PXQucGVyY2VudD8iJSI6dC5wZXJjZW50KyIiLGc9dm9pZCAwPT09dC5taW51cz8iLSI6dC5taW51cysiIix2PXZvaWQgMD09PXQubmFuPyJOYU4iOnQubmFuKyIiO2Z1bmN0aW9uIHkodCl7dmFyIGU9KHQ9YSh0KSkuZmlsbCxyPXQuYWxpZ24saT10LnNpZ24sYz10LnN5bWJvbCxmPXQuemVybyx5PXQud2lkdGgseD10LmNvbW1hLGI9dC5wcmVjaXNpb24sXz10LnRyaW0sdz10LnR5cGU7Im4iPT09dz8oeD0hMCx3PSJnIik6bFt3XXx8KHZvaWQgMD09PWImJihiPTEyKSxfPSEwLHc9ImciKSwoZnx8IjAiPT09ZSYmIj0iPT09cikmJihmPSEwLGU9IjAiLHI9Ij0iKTt2YXIgVD0iJCI9PT1jP3M6IiMiPT09YyYmL1tib3hYXS8udGVzdCh3KT8iMCIrdy50b0xvd2VyQ2FzZSgpOiIiLGs9IiQiPT09Yz91Oi9bJXBdLy50ZXN0KHcpP206IiIsQT1sW3ddLE09L1tkZWZncHJzJV0vLnRlc3Qodyk7ZnVuY3Rpb24gUyh0KXt2YXIgYSxzLGwsYz1ULHU9aztpZigiYyI9PT13KXU9QSh0KSt1LHQ9IiI7ZWxzZXt2YXIgbT0odD0rdCk8MHx8MS90PDA7aWYodD1pc05hTih0KT92OkEoTWF0aC5hYnModCksYiksXyYmKHQ9ZnVuY3Rpb24odCl7dDpmb3IodmFyIGUscj10Lmxlbmd0aCxuPTEsaT0tMTtuPHI7KytuKXN3aXRjaCh0W25dKXtjYXNlIi4iOmk9ZT1uO2JyZWFrO2Nhc2UiMCI6MD09PWkmJihpPW4pLGU9bjticmVhaztkZWZhdWx0OmlmKCErdFtuXSlicmVhayB0O2k+MCYmKGk9MCl9cmV0dXJuIGk+MD90LnNsaWNlKDAsaSkrdC5zbGljZShlKzEpOnR9KHQpKSxtJiYwPT0rdCYmIisiIT09aSYmKG09ITEpLGM9KG0/IigiPT09aT9pOmc6Ii0iPT09aXx8IigiPT09aT8iIjppKStjLHU9KCJzIj09PXc/aFs4K24vM106IiIpK3UrKG0mJiIoIj09PWk/IikiOiIiKSxNKWZvcihhPS0xLHM9dC5sZW5ndGg7KythPHM7KWlmKDQ4PihsPXQuY2hhckNvZGVBdChhKSl8fGw+NTcpe3U9KDQ2PT09bD9wK3Quc2xpY2UoYSsxKTp0LnNsaWNlKGEpKSt1LHQ9dC5zbGljZSgwLGEpO2JyZWFrfX14JiYhZiYmKHQ9byh0LDEvMCkpO3ZhciBTPWMubGVuZ3RoK3QubGVuZ3RoK3UubGVuZ3RoLEU9Uzx5P25ldyBBcnJheSh5LVMrMSkuam9pbihlKToiIjtzd2l0Y2goeCYmZiYmKHQ9byhFK3QsRS5sZW5ndGg/eS11Lmxlbmd0aDoxLzApLEU9IiIpLHIpe2Nhc2UiPCI6dD1jK3QrdStFO2JyZWFrO2Nhc2UiPSI6dD1jK0UrdCt1O2JyZWFrO2Nhc2UiXiI6dD1FLnNsaWNlKDAsUz1FLmxlbmd0aD4+MSkrYyt0K3UrRS5zbGljZShTKTticmVhaztkZWZhdWx0OnQ9RStjK3QrdX1yZXR1cm4gZCh0KX1yZXR1cm4gYj12b2lkIDA9PT1iPzY6L1tncHJzXS8udGVzdCh3KT9NYXRoLm1heCgxLE1hdGgubWluKDIxLGIpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGIpKSxTLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHQrIiJ9LFN9cmV0dXJue2Zvcm1hdDp5LGZvcm1hdFByZWZpeDpmdW5jdGlvbih0LGUpe3ZhciBuPXkoKCh0PWEodCkpLnR5cGU9ImYiLHQpKSxpPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIoZSkvMykpKSxvPU1hdGgucG93KDEwLC1pKSxzPWhbOCtpLzNdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbihvKnQpK3N9fX19ZnVuY3Rpb24gZChlKXtyZXR1cm4gdT1wKGUpLHQuZm9ybWF0PXUuZm9ybWF0LHQuZm9ybWF0UHJlZml4PXUuZm9ybWF0UHJlZml4LHV9ZCh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sbWludXM6Ii0ifSksdC5Gb3JtYXRTcGVjaWZpZXI9byx0LmZvcm1hdERlZmF1bHRMb2NhbGU9ZCx0LmZvcm1hdExvY2FsZT1wLHQuZm9ybWF0U3BlY2lmaWVyPWEsdC5wcmVjaXNpb25GaXhlZD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCwtcihNYXRoLmFicyh0KSkpfSx0LnByZWNpc2lvblByZWZpeD1mdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCgwLDMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIoZSkvMykpKS1yKE1hdGguYWJzKHQpKSl9LHQucHJlY2lzaW9uUm91bmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1NYXRoLmFicyh0KSxlPU1hdGguYWJzKGUpLXQsTWF0aC5tYXgoMCxyKGUpLXIodCkpKzF9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDE2MTpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihuLGkpeyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9pKHIsdCgiZDMtZ2VvIiksdCgiZDMtYXJyYXkiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyl9KHRoaXMsKGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49TWF0aC5hYnMsaT1NYXRoLmF0YW4sYT1NYXRoLmF0YW4yLG89TWF0aC5jb3Mscz1NYXRoLmV4cCxsPU1hdGguZmxvb3IsYz1NYXRoLmxvZyx1PU1hdGgubWF4LGY9TWF0aC5taW4saD1NYXRoLnBvdyxwPU1hdGgucm91bmQsZD1NYXRoLnNpZ258fGZ1bmN0aW9uKHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH0sbT1NYXRoLnNpbixnPU1hdGgudGFuLHY9MWUtNix5PU1hdGguUEkseD15LzIsYj15LzQsXz1NYXRoLlNRUlQxXzIsdz1MKDIpLFQ9TCh5KSxrPTIqeSxBPTE4MC95LE09eS8xODA7ZnVuY3Rpb24gUyh0KXtyZXR1cm4gdD4xP3g6dDwtMT8teDpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gRSh0KXtyZXR1cm4gdD4xPzA6dDwtMT95Ok1hdGguYWNvcyh0KX1mdW5jdGlvbiBMKHQpe3JldHVybiB0PjA/TWF0aC5zcXJ0KHQpOjB9ZnVuY3Rpb24gQyh0KXtyZXR1cm4ocyh0KS1zKC10KSkvMn1mdW5jdGlvbiBQKHQpe3JldHVybihzKHQpK3MoLXQpKS8yfWZ1bmN0aW9uIEkodCl7dmFyIGU9Zyh0LzIpLHI9MipjKG8odC8yKSkvKGUqZSk7ZnVuY3Rpb24gaSh0LGUpe3ZhciBuPW8odCksaT1vKGUpLGE9bShlKSxzPWkqbixsPS0oKDEtcz9jKCgxK3MpLzIpLygxLXMpOi0uNSkrci8oMStzKSk7cmV0dXJuW2wqaSptKHQpLGwqYV19cmV0dXJuIGkuaW52ZXJ0PWZ1bmN0aW9uKGUsaSl7dmFyIHMsbD1MKGUqZStpKmkpLHU9LXQvMixmPTUwO2lmKCFsKXJldHVyblswLDBdO2Rve3ZhciBoPXUvMixwPW8oaCksZD1tKGgpLGc9ZC9wLHk9LWMobihwKSk7dS09cz0oMi9nKnktcipnLWwpLygteS8oZCpkKSsxLXIvKDIqcCpwKSkqKHA8MD8uNzoxKX13aGlsZShuKHMpPnYmJi0tZj4wKTt2YXIgeD1tKHUpO3JldHVyblthKGUqeCxsKm8odSkpLFMoaSp4L2wpXX0saX1mdW5jdGlvbiBPKHQsZSl7dmFyIHI9byhlKSxuPWZ1bmN0aW9uKHQpe3JldHVybiB0P3QvTWF0aC5zaW4odCk6MX0oRShyKm8odC89MikpKTtyZXR1cm5bMipyKm0odCkqbixtKGUpKm5dfWZ1bmN0aW9uIHoodCl7dmFyIGU9bSh0KSxyPW8odCksaT10Pj0wPzE6LTEscz1nKGkqdCksbD0oMStlLXIpLzI7ZnVuY3Rpb24gYyh0LG4pe3ZhciBjPW8obiksdT1vKHQvPTIpO3JldHVyblsoMStjKSptKHQpLChpKm4+LWEodSxzKS0uMDAxPzA6MTAqLWkpK2wrbShuKSpyLSgxK2MpKmUqdV19cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKHQsYyl7dmFyIHU9MCxmPTAsaD01MDtkb3t2YXIgcD1vKHUpLGQ9bSh1KSxnPW8oZikseT1tKGYpLHg9MStnLGI9eCpkLXQsXz1sK3kqci14KmUqcC1jLHc9eCpwLzIsVD0tZCp5LGs9ZSp4KmQvMixBPXIqZytlKnAqeSxNPVQqay1BKncsUz0oXypULWIqQSkvTS8yLEU9KGIqay1fKncpL007bihFKT4yJiYoRS89MiksdS09UyxmLT1FfXdoaWxlKChuKFMpPnZ8fG4oRSk+dikmJi0taD4wKTtyZXR1cm4gaSpmPi1hKG8odSkscyktLjAwMT9bMip1LGZdOm51bGx9LGN9ZnVuY3Rpb24gRCh0LGUpe3ZhciByPWcoZS8yKSxuPUwoMS1yKnIpLGk9MStuKm8odC89MiksYT1tKHQpKm4vaSxzPXIvaSxsPWEqYSxjPXMqcztyZXR1cm5bNC8zKmEqKDMrbC0zKmMpLDQvMypzKigzKzMqbC1jKV19Ty5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtpZighKHQqdCs0KmUqZT55Knkrdikpe3ZhciByPXQsaT1lLGE9MjU7ZG97dmFyIHMsbD1tKHIpLGM9bShyLzIpLHU9byhyLzIpLGY9bShpKSxoPW8oaSkscD1tKDIqaSksZD1mKmYsZz1oKmgseD1jKmMsYj0xLWcqdSp1LF89Yj9FKGgqdSkqTChzPTEvYik6cz0wLHc9MipfKmgqYy10LFQ9XypmLWUsaz1zKihnKngrXypoKnUqZCksQT1zKiguNSpsKnAtMipfKmYqYyksTT0uMjUqcyoocCpjLV8qZipnKmwpLFM9cyooZCp1K18qeCpoKSxDPUEqTS1TKms7aWYoIUMpYnJlYWs7dmFyIFA9KFQqQS13KlMpL0MsST0odypNLVQqaykvQztyLT1QLGktPUl9d2hpbGUoKG4oUCk+dnx8bihJKT52KSYmLS1hPjApO3JldHVybltyLGldfX0sRC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtpZihlKj0zLzgsISh0Kj0zLzgpJiZuKGUpPjEpcmV0dXJuIG51bGw7dmFyIHI9MSt0KnQrZSplLGk9TCgoci1MKHIqci00KmUqZSkpLzIpLHM9UyhpKS8zLGw9aT9mdW5jdGlvbih0KXtyZXR1cm4gYyh0K0wodCp0LTEpKX0obihlL2kpKS8zOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQrTCh0KnQrMSkpfShuKHQpKS8zLHU9byhzKSxmPVAobCksaD1mKmYtdSp1O3JldHVyblsyKmQodCkqYShDKGwpKnUsLjI1LWgpLDIqZChlKSphKGYqbShzKSwuMjUraCldfTt2YXIgUj1MKDgpLEY9YygxK3cpO2Z1bmN0aW9uIEIodCxlKXt2YXIgcj1uKGUpO3JldHVybiByPGI/W3QsYyhnKGIrZS8yKSldOlt0Km8ocikqKDIqdy0xL20ocikpLGQoZSkqKDIqdyooci1iKS1jKGcoci8yKSkpXX1mdW5jdGlvbiBOKHQpe3ZhciByPTIqeS90O2Z1bmN0aW9uIHModCxpKXt2YXIgcz1lLmdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3KHQsaSk7aWYobih0KT54KXt2YXIgbD1hKHNbMV0sc1swXSksYz1MKHNbMF0qc1swXStzWzFdKnNbMV0pLHU9cipwKChsLXgpL3IpK3gsZj1hKG0obC09dSksMi1vKGwpKTtsPXUrUyh5L2MqbShmKSktZixzWzBdPWMqbyhsKSxzWzFdPWMqbShsKX1yZXR1cm4gc31yZXR1cm4gcy5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgcz1MKHQqdCtuKm4pO2lmKHM+eCl7dmFyIGw9YShuLHQpLGM9cipwKChsLXgpL3IpK3gsdT1sPmM/LTE6MSxmPXMqbyhjLWwpLGg9MS9nKHUqRSgoZi15KS9MKHkqKHktMipmKStzKnMpKSk7bD1jKzIqaSgoaCt1KkwoaCpoLTMpKS8zKSx0PXMqbyhsKSxuPXMqbShsKX1yZXR1cm4gZS5nZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdy5pbnZlcnQodCxuKX0sc31mdW5jdGlvbiBqKHQscil7aWYoYXJndW1lbnRzLmxlbmd0aDwyJiYocj10KSwxPT09cilyZXR1cm4gZS5nZW9BemltdXRoYWxFcXVhbEFyZWFSYXc7aWYocj09PTEvMClyZXR1cm4gVTtmdW5jdGlvbiBuKG4saSl7dmFyIGE9ZS5nZW9BemltdXRoYWxFcXVhbEFyZWFSYXcobi9yLGkpO3JldHVybiBhWzBdKj10LGF9cmV0dXJuIG4uaW52ZXJ0PWZ1bmN0aW9uKG4saSl7dmFyIGE9ZS5nZW9BemltdXRoYWxFcXVhbEFyZWFSYXcuaW52ZXJ0KG4vdCxpKTtyZXR1cm4gYVswXSo9cixhfSxufWZ1bmN0aW9uIFUodCxlKXtyZXR1cm5bdCpvKGUpL28oZS89MiksMiptKGUpXX1mdW5jdGlvbiBWKHQsZSxyKXt2YXIgaSxhLG8scz0xMDA7cj12b2lkIDA9PT1yPzA6K3IsZT0rZTtkb3soYT10KHIpKT09PShvPXQocit2KSkmJihvPWErdiksci09aT0tMSp2KihhLWUpLyhhLW8pfXdoaWxlKHMtLSA+MCYmbihpKT52KTtyZXR1cm4gczwwP05hTjpyfWZ1bmN0aW9uIEgodCxlLHIpe3JldHVybiB2b2lkIDA9PT1lJiYoZT00MCksdm9pZCAwPT09ciYmKHI9MWUtMTIpLGZ1bmN0aW9uKGksYSxvLHMpe3ZhciBsLGMsdTtvPXZvaWQgMD09PW8/MDorbyxzPXZvaWQgMD09PXM/MDorcztmb3IodmFyIGY9MDtmPGU7ZisrKXt2YXIgaD10KG8scykscD1oWzBdLWksZD1oWzFdLWE7aWYobihwKTxyJiZuKGQpPHIpYnJlYWs7dmFyIG09cCpwK2QqZDtpZihtPmwpby09Yy89MixzLT11Lz0yO2Vsc2V7bD1tO3ZhciBnPShvPjA/LTE6MSkqcix2PShzPjA/LTE6MSkqcix5PXQobytnLHMpLHg9dChvLHMrdiksYj0oeVswXS1oWzBdKS9nLF89KHlbMV0taFsxXSkvZyx3PSh4WzBdLWhbMF0pL3YsVD0oeFsxXS1oWzFdKS92LGs9VCpiLV8qdyxBPShuKGspPC41Py41OjEpL2s7aWYobys9Yz0oZCp3LXAqVCkqQSxzKz11PShwKl8tZCpiKSpBLG4oYyk8ciYmbih1KTxyKWJyZWFrfX1yZXR1cm5bbyxzXX19ZnVuY3Rpb24gcSgpe3ZhciB0PWooMS42OCwyKTtmdW5jdGlvbiBlKGUscil7aWYoZStyPC0xLjQpe3ZhciBuPShlLXIrMS42KSooZStyKzEuNCkvODtlKz1uLHItPS44Km4qbShyK3kvMil9dmFyIGk9dChlLHIpLGE9KDEtbyhlKnIpKS8xMjtyZXR1cm4gaVsxXTwwJiYoaVswXSo9MSthKSxpWzFdPjAmJihpWzFdKj0xK2EvMS41KmlbMF0qaVswXSksaX1yZXR1cm4gZS5pbnZlcnQ9SChlKSxlfWZ1bmN0aW9uIEcodCxlKXt2YXIgcixpPXQqbShlKSxhPTMwO2Rve2UtPXI9KGUrbShlKS1pKS8oMStvKGUpKX13aGlsZShuKHIpPnYmJi0tYT4wKTtyZXR1cm4gZS8yfWZ1bmN0aW9uIFkodCxlLHIpe2Z1bmN0aW9uIG4obixpKXtyZXR1cm5bdCpuKm8oaT1HKHIsaSkpLGUqbShpKV19cmV0dXJuIG4uaW52ZXJ0PWZ1bmN0aW9uKG4saSl7cmV0dXJuIGk9UyhpL2UpLFtuLyh0Km8oaSkpLFMoKDIqaSttKDIqaSkpL3IpXX0sbn1CLmludmVydD1mdW5jdGlvbih0LGUpe2lmKChhPW4oZSkpPEYpcmV0dXJuW3QsMippKHMoZSkpLXhdO3ZhciByLGEsbD1iLHU9MjU7ZG97dmFyIGY9byhsLzIpLGg9ZyhsLzIpO2wtPXI9KFIqKGwtYiktYyhoKS1hKS8oUi1mKmYvKDIqaCkpfXdoaWxlKG4ocik+MWUtMTImJi0tdT4wKTtyZXR1cm5bdC8obyhsKSooUi0xL20obCkpKSxkKGUpKmxdfSxVLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPTIqUyhlLzIpO3JldHVyblt0Km8oci8yKS9vKHIpLHJdfTt2YXIgVz1ZKHcveCx3LHkpO3ZhciBYPTIuMDAyNzYsWj0xLjExMDcyO2Z1bmN0aW9uIEoodCxlKXt2YXIgcj1HKHksZSk7cmV0dXJuW1gqdC8oMS9vKGUpK1ovbyhyKSksKGUrdyptKHIpKS9YXX1mdW5jdGlvbiBLKHQpe3ZhciByPTAsbj1lLmdlb1Byb2plY3Rpb25NdXRhdG9yKHQpLGk9bihyKTtyZXR1cm4gaS5wYXJhbGxlbD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHI9dCpNKTpyKkF9LGl9ZnVuY3Rpb24gUSh0LGUpe3JldHVyblt0Km8oZSksZV19ZnVuY3Rpb24gJCh0KXtpZighdClyZXR1cm4gUTt2YXIgZT0xL2codCk7ZnVuY3Rpb24gcihyLG4pe3ZhciBpPWUrdC1uLGE9aT9yKm8obikvaTppO3JldHVybltpKm0oYSksZS1pKm8oYSldfXJldHVybiByLmludmVydD1mdW5jdGlvbihyLG4pe3ZhciBpPUwocipyKyhuPWUtbikqbikscz1lK3QtaTtyZXR1cm5baS9vKHMpKmEocixuKSxzXX0scn1mdW5jdGlvbiB0dCh0KXtmdW5jdGlvbiBlKGUscil7dmFyIG49eC1yLGk9bj9lKnQqbShuKS9uOm47cmV0dXJuW24qbShpKS90LHgtbipvKGkpXX1yZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24oZSxyKXt2YXIgbj1lKnQsaT14LXIsbz1MKG4qbitpKmkpLHM9YShuLGkpO3JldHVyblsobz9vL20obyk6MSkqcy90LHgtb119LGV9Si5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGE9WCplLHM9ZTwwPy1iOmIsbD0yNTtkb3tpPWEtdyptKHMpLHMtPXI9KG0oMipzKSsyKnMteSptKGkpKS8oMipvKDIqcykrMit5Km8oaSkqdypvKHMpKX13aGlsZShuKHIpPnYmJi0tbD4wKTtyZXR1cm4gaT1hLXcqbShzKSxbdCooMS9vKGkpK1ovbyhzKSkvWCxpXX0sUS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdC9vKGUpLGVdfTt2YXIgZXQ9WSgxLDQveSx5KTtmdW5jdGlvbiBydCh0LGUscixpLHMsbCl7dmFyIGMsdT1vKGwpO2lmKG4odCk+MXx8bihsKT4xKWM9RShyKnMrZSppKnUpO2Vsc2V7dmFyIGY9bSh0LzIpLGg9bShsLzIpO2M9MipTKEwoZipmK2UqaSpoKmgpKX1yZXR1cm4gbihjKT52P1tjLGEoaSptKGwpLGUqcy1yKmkqdSldOlswLDBdfWZ1bmN0aW9uIG50KHQsZSxyKXtyZXR1cm4gRSgodCp0K2UqZS1yKnIpLygyKnQqZSkpfWZ1bmN0aW9uIGl0KHQpe3JldHVybiB0LTIqeSpsKCh0K3kpLygyKnkpKX1mdW5jdGlvbiBhdCh0LGUscil7Zm9yKHZhciBuLGk9W1t0WzBdLHRbMV0sbSh0WzFdKSxvKHRbMV0pXSxbZVswXSxlWzFdLG0oZVsxXSksbyhlWzFdKV0sW3JbMF0sclsxXSxtKHJbMV0pLG8oclsxXSldXSxhPWlbMl0scz0wO3M8MzsrK3MsYT1uKW49aVtzXSxhLnY9cnQoblsxXS1hWzFdLGFbM10sYVsyXSxuWzNdLG5bMl0sblswXS1hWzBdKSxhLnBvaW50PVswLDBdO3ZhciBsPW50KGlbMF0udlswXSxpWzJdLnZbMF0saVsxXS52WzBdKSxjPW50KGlbMF0udlswXSxpWzFdLnZbMF0saVsyXS52WzBdKSx1PXktbDtpWzJdLnBvaW50WzFdPTAsaVswXS5wb2ludFswXT0tKGlbMV0ucG9pbnRbMF09aVswXS52WzBdLzIpO3ZhciBmPVtpWzJdLnBvaW50WzBdPWlbMF0ucG9pbnRbMF0raVsyXS52WzBdKm8obCksMiooaVswXS5wb2ludFsxXT1pWzFdLnBvaW50WzFdPWlbMl0udlswXSptKGwpKV07cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1tKGUpLGE9byhlKSxzPW5ldyBBcnJheSgzKTtmb3Iocj0wO3I8MzsrK3Ipe3ZhciBsPWlbcl07aWYoc1tyXT1ydChlLWxbMV0sbFszXSxsWzJdLGEsbix0LWxbMF0pLCFzW3JdWzBdKXJldHVybiBsLnBvaW50O3Nbcl1bMV09aXQoc1tyXVsxXS1sLnZbMV0pfXZhciBoPWYuc2xpY2UoKTtmb3Iocj0wO3I8MzsrK3Ipe3ZhciBwPTI9PXI/MDpyKzEsZD1udChpW3JdLnZbMF0sc1tyXVswXSxzW3BdWzBdKTtzW3JdWzFdPDAmJihkPS1kKSxyPzE9PXI/KGQ9Yy1kLGhbMF0tPXNbcl1bMF0qbyhkKSxoWzFdLT1zW3JdWzBdKm0oZCkpOihkPXUtZCxoWzBdKz1zW3JdWzBdKm8oZCksaFsxXSs9c1tyXVswXSptKGQpKTooaFswXSs9c1tyXVswXSpvKGQpLGhbMV0tPXNbcl1bMF0qbShkKSl9cmV0dXJuIGhbMF0vPTMsaFsxXS89MyxofX1mdW5jdGlvbiBvdCh0KXtyZXR1cm4gdFswXSo9TSx0WzFdKj1NLHR9ZnVuY3Rpb24gc3QodCxyLG4pe3ZhciBpPWUuZ2VvQ2VudHJvaWQoe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOlt0LHIsbl19KSxhPVstaVswXSwtaVsxXV0sbz1lLmdlb1JvdGF0aW9uKGEpLHM9YXQob3Qobyh0KSksb3QobyhyKSksb3QobyhuKSkpO3MuaW52ZXJ0PUgocyk7dmFyIGw9ZS5nZW9Qcm9qZWN0aW9uKHMpLnJvdGF0ZShhKSxjPWwuY2VudGVyO3JldHVybiBkZWxldGUgbC5yb3RhdGUsbC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/YyhvKHQpKTpvLmludmVydChjKCkpfSxsLmNsaXBBbmdsZSg5MCl9ZnVuY3Rpb24gbHQodCxlKXt2YXIgcj1MKDEtbShlKSk7cmV0dXJuWzIvVCp0KnIsVCooMS1yKV19ZnVuY3Rpb24gY3QodCl7dmFyIGU9Zyh0KTtmdW5jdGlvbiByKHQscil7cmV0dXJuW3QsKHQ/dC9tKHQpOjEpKihtKHIpKm8odCktZSpvKHIpKV19cmV0dXJuIHIuaW52ZXJ0PWU/ZnVuY3Rpb24odCxyKXt0JiYocio9bSh0KS90KTt2YXIgbj1vKHQpO3JldHVyblt0LDIqYShMKG4qbitlKmUtcipyKS1uLGUtcildfTpmdW5jdGlvbih0LGUpe3JldHVyblt0LFModD9lKmcodCkvdDplKV19LHJ9bHQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHI9ZS9ULTEpKnI7cmV0dXJuW3I+MD90KkwoeS9yKS8yOjAsUygxLXIpXX07dmFyIHV0PUwoMyk7ZnVuY3Rpb24gZnQodCxlKXtyZXR1cm5bdXQqdCooMipvKDIqZS8zKS0xKS9ULHV0KlQqbShlLzMpXX1mdW5jdGlvbiBodCh0KXt2YXIgZT1vKHQpO2Z1bmN0aW9uIHIodCxyKXtyZXR1cm5bdCplLG0ocikvZV19cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHQscil7cmV0dXJuW3QvZSxTKHIqZSldfSxyfWZ1bmN0aW9uIHB0KHQpe3ZhciBlPW8odCk7ZnVuY3Rpb24gcih0LHIpe3JldHVyblt0KmUsKDErZSkqZyhyLzIpXX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCxyKXtyZXR1cm5bdC9lLDIqaShyLygxK2UpKV19LHJ9ZnVuY3Rpb24gZHQodCxlKXt2YXIgcj1MKDgvKDMqeSkpO3JldHVybltyKnQqKDEtbihlKS95KSxyKmVdfWZ1bmN0aW9uIG10KHQsZSl7dmFyIHI9TCg0LTMqbShuKGUpKSk7cmV0dXJuWzIvTCg2KnkpKnQqcixkKGUpKkwoMip5LzMpKigyLXIpXX1mdW5jdGlvbiBndCh0LGUpe3ZhciByPUwoeSooNCt5KSk7cmV0dXJuWzIvcip0KigxK0woMS00KmUqZS8oeSp5KSkpLDQvciplXX1mdW5jdGlvbiB2dCh0LGUpe3ZhciByPSgyK3gpKm0oZSk7ZS89Mjtmb3IodmFyIGk9MCxhPTEvMDtpPDEwJiZuKGEpPnY7aSsrKXt2YXIgcz1vKGUpO2UtPWE9KGUrbShlKSoocysyKS1yKS8oMipzKigxK3MpKX1yZXR1cm5bMi9MKHkqKDQreSkpKnQqKDErbyhlKSksMipMKHkvKDQreSkpKm0oZSldfWZ1bmN0aW9uIHl0KHQsZSl7cmV0dXJuW3QqKDErbyhlKSkvTCgyK3kpLDIqZS9MKDIreSldfWZ1bmN0aW9uIHh0KHQsZSl7Zm9yKHZhciByPSgxK3gpKm0oZSksaT0wLGE9MS8wO2k8MTAmJm4oYSk+djtpKyspZS09YT0oZSttKGUpLXIpLygxK28oZSkpO3JldHVybiByPUwoMit5KSxbdCooMStvKGUpKS9yLDIqZS9yXX1mdC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0zKlMoZS8odXQqVCkpO3JldHVybltUKnQvKHV0KigyKm8oMipyLzMpLTEpKSxyXX0sZHQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9TCg4LygzKnkpKSxpPWUvcjtyZXR1cm5bdC8ociooMS1uKGkpL3kpKSxpXX0sbXQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9Mi1uKGUpL0woMip5LzMpO3JldHVyblt0KkwoNip5KS8oMipyKSxkKGUpKlMoKDQtcipyKS8zKV19LGd0LmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPUwoeSooNCt5KSkvMjtyZXR1cm5bdCpyLygxK0woMS1lKmUqKDQreSkvKDQqeSkpKSxlKnIvMl19LHZ0LmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWUqTCgoNCt5KS95KS8yLG49UyhyKSxpPW8obik7cmV0dXJuW3QvKDIvTCh5Kig0K3kpKSooMStpKSksUygobityKihpKzIpKS8oMit4KSldfSx5dC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1MKDIreSksbj1lKnIvMjtyZXR1cm5bcip0LygxK28obikpLG5dfSx4dC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0xK3gsbj1MKHIvMik7cmV0dXJuWzIqdCpuLygxK28oZSo9bikpLFMoKGUrbShlKSkvcildfTt2YXIgYnQ9MysyKnc7ZnVuY3Rpb24gX3QodCxlKXt2YXIgcj1tKHQvPTIpLG49byh0KSxhPUwobyhlKSkscz1vKGUvPTIpLGw9bShlKS8ocyt3Km4qYSksdT1MKDIvKDErbCpsKSksZj1MKCh3KnMrKG4rcikqYSkvKHcqcysobi1yKSphKSk7cmV0dXJuW2J0Kih1KihmLTEvZiktMipjKGYpKSxidCoodSpsKihmKzEvZiktMippKGwpKV19X3QuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7aWYoIShyPUQuaW52ZXJ0KHQvMS4yLDEuMDY1KmUpKSlyZXR1cm4gbnVsbDt2YXIgcixhPXJbMF0scz1yWzFdLGw9MjA7dC89YnQsZS89YnQ7ZG97dmFyIGg9YS8yLHA9cy8yLGQ9bShoKSxnPW8oaCkseT1tKHApLGI9byhwKSxUPW8ocyksaz1MKFQpLEE9eS8oYit3KmcqayksTT1BKkEsUz1MKDIvKDErTSkpLEU9KHcqYisoZytkKSprKS8odypiKyhnLWQpKmspLEM9TChFKSxQPUMtMS9DLEk9QysxL0MsTz1TKlAtMipjKEMpLXQsej1TKkEqSS0yKmkoQSktZSxSPXkmJl8qaypkKk0veSxGPSh3KmcqYitrKS8oMiooYit3KmcqaykqKGIrdypnKmspKmspLEI9LS41KkEqUypTKlMsTj1CKlIsaj1CKkYsVT0oVT0yKmIrdyprKihnLWQpKSpVKkMsVj0odypnKmIqaytUKS9VLEg9LXcqZCp5LyhrKlUpLHE9UCpOLTIqVi9DK1MqKFYrVi9FKSxHPVAqai0yKkgvQytTKihIK0gvRSksWT1BKkkqTi0yKlIvKDErTSkrUypJKlIrUypBKihWLVYvRSksVz1BKkkqai0yKkYvKDErTSkrUypJKkYrUypBKihILUgvRSksWD1HKlktVypxO2lmKCFYKWJyZWFrO3ZhciBaPSh6KkctTypXKS9YLEo9KE8qWS16KnEpL1g7YS09WixzPXUoLXgsZih4LHMtSikpfXdoaWxlKChuKFopPnZ8fG4oSik+dikmJi0tbD4wKTtyZXR1cm4gbihuKHMpLXgpPHY/WzAsc106bCYmW2Esc119O3ZhciB3dD1vKDM1Kk0pO2Z1bmN0aW9uIFR0KHQsZSl7dmFyIHI9ZyhlLzIpO3JldHVyblt0Knd0KkwoMS1yKnIpLCgxK3d0KSpyXX1mdW5jdGlvbiBrdCh0LGUpe3ZhciByPWUvMixuPW8ocik7cmV0dXJuWzIqdC9UKm8oZSkqbipuLFQqZyhyKV19ZnVuY3Rpb24gQXQodCl7dmFyIGU9MS10LHI9aSh5LDApWzBdLWkoLXksMClbMF0sbj1MKDIqKGkoMCx4KVsxXS1pKDAsLXgpWzFdKS9yKTtmdW5jdGlvbiBpKHIsbil7dmFyIGk9byhuKSxhPW0obik7cmV0dXJuW2kvKGUrdCppKSpyLGUqbit0KmFdfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1pKHQsZSk7cmV0dXJuW3JbMF0qbixyWzFdL25dfWZ1bmN0aW9uIHModCl7cmV0dXJuIGEoMCx0KVsxXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocixpKXt2YXIgYT1WKHMsaSk7cmV0dXJuW3IvbioodCtlL28oYSkpLGFdfSxhfWZ1bmN0aW9uIE10KHQpe3JldHVyblt0WzBdLzIsUyhnKHRbMV0vMipNKSkqQV19ZnVuY3Rpb24gU3QodCl7cmV0dXJuWzIqdFswXSwyKmkobSh0WzFdKk0pKSpBXX1mdW5jdGlvbiBFdCh0LHIpe3ZhciBpPTIqeS9yLHM9dCp0O2Z1bmN0aW9uIGwocixsKXt2YXIgYz1lLmdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3KHIsbCksdT1jWzBdLGY9Y1sxXSxoPXUqdStmKmY7aWYoaD5zKXt2YXIgZD1MKGgpLGc9YShmLHUpLGI9aSpwKGcvaSksXz1nLWIsdz10Km8oXyksVD0odCptKF8pLV8qbSh3KSkvKHgtdyksaz1MdChfLFQpLEE9KHktdCkvQ3Qoayx3LHkpO3U9ZDt2YXIgTSxTPTUwO2Rve3UtPU09KHQrQ3Qoayx3LHUpKkEtZCkvKGsodSkqQSl9d2hpbGUobihNKT52JiYtLVM+MCk7Zj1fKm0odSksdTx4JiYoZi09VCoodS14KSk7dmFyIEU9bShiKSxDPW8oYik7Y1swXT11KkMtZipFLGNbMV09dSpFK2YqQ31yZXR1cm4gY31yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24ocixsKXt2YXIgYz1yKnIrbCpsO2lmKGM+cyl7dmFyIHU9TChjKSxmPWEobCxyKSxoPWkqcChmL2kpLGQ9Zi1oO3I9dSpvKGQpLGw9dSptKGQpO2Zvcih2YXIgZz1yLXgsdj1tKHIpLGI9bC92LF89cjx4PzEvMDowLHc9MTA7Oyl7dmFyIFQ9dCptKGIpLGs9dCpvKGIpLEE9bShrKSxNPXgtayxTPShULWIqQSkvTSxFPUx0KGIsUyk7aWYobihfKTwxZS0xMnx8IS0tdylicmVhaztiLT1fPShiKnYtUypnLWwpLyh2LTIqZyooTSooaytiKlQqbyhrKS1BKS1UKihULWIqQSkpLyhNKk0pKX1yPSh1PXQrQ3QoRSxrLHIpKih5LXQpL0N0KEUsayx5KSkqbyhmPWgrYiksbD11Km0oZil9cmV0dXJuIGUuZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXcuaW52ZXJ0KHIsbCl9LGx9ZnVuY3Rpb24gTHQodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dCpvKHIpO3JldHVybiByPHgmJihuLT1lKSxMKDErbipuKX19ZnVuY3Rpb24gQ3QodCxlLHIpe2Zvcih2YXIgbj0oci1lKS81MCxpPXQoZSkrdChyKSxhPTEsbz1lO2E8NTA7KythKWkrPTIqdChvKz1uKTtyZXR1cm4uNSppKm59ZnVuY3Rpb24gUHQodCxlLHIsaSxhLHMsbCxjKXtmdW5jdGlvbiB1KG4sdSl7aWYoIXUpcmV0dXJuW3Qqbi95LDBdO3ZhciBmPXUqdSxoPXQrZiooZStmKihyK2YqaSkpLHA9dSooYS0xK2YqKHMtYytmKmwpKSxkPShoKmgrcCpwKS8oMipwKSxnPW4qUyhoL2QpL3k7cmV0dXJuW2QqbShnKSx1KigxK2YqYykrZCooMS1vKGcpKV19cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8OCYmKGM9MCksdS5pbnZlcnQ9ZnVuY3Rpb24odSxmKXt2YXIgaCxwLGQ9eSp1L3QsZz1mLHg9NTA7ZG97dmFyIGI9ZypnLF89dCtiKihlK2IqKHIrYippKSksdz1nKihhLTErYioocy1jK2IqbCkpLFQ9XypfK3cqdyxrPTIqdyxBPVQvayxNPUEqQSxFPVMoXy9BKS95LEM9ZCpFLFA9XypfLEk9KDIqZStiKig0KnIrNipiKmkpKSpnLE89YStiKigzKnMrNSpiKmwpLHo9KDIqKF8qSSt3KihPLTEpKSprLVQqKDIqKE8tMSkpKS8oayprKSxEPW8oQyksUj1tKEMpLEY9QSpELEI9QSpSLE49ZC95KigxL0woMS1QL00pKSooSSpBLV8qeikvTSxqPUItdSxVPWcqKDErYipjKStBLUYtZixWPXoqUitGKk4sSD1GKkUscT0xK3otKHoqRC1CKk4pLEc9QipFLFk9VipHLXEqSDtpZighWSlicmVhaztkLT1oPShVKlYtaipxKS9ZLGctPXA9KGoqRy1VKkgpL1l9d2hpbGUoKG4oaCk+dnx8bihwKT52KSYmLS14PjApO3JldHVybltkLGddfSx1fVR0LmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWUvKDErd3QpO3JldHVyblt0JiZ0Lyh3dCpMKDEtcipyKSksMippKHIpXX0sa3QuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9aShlL1QpLG49byhyKSxhPTIqcjtyZXR1cm5bdCpULzIvKG8oYSkqbipuKSxhXX07dmFyIEl0PVB0KDIuODI4NCwtMS42OTg4LC43NTQzMiwtLjE4MDcxLDEuNzYwMDMsLS4zODkxNCwuMDQyNTU1KTt2YXIgT3Q9UHQoMi41ODM4MTksLS44MzU4MjcsLjE3MDM1NCwtLjAzODA5NCwxLjU0MzMxMywtLjQxMTQzNSwuMDgyNzQyKTt2YXIgenQ9UHQoNS82KnksLS42MjYzNiwtLjAzNDQsMCwxLjM0OTMsLS4wNTUyNCwwLC4wNDUpO2Z1bmN0aW9uIER0KHQsZSl7dmFyIHI9dCp0LG49ZSplO3JldHVyblt0KigxLS4xNjIzODgqbikqKC44Ny05NTI0MjZlLTkqcipyKSxlKigxK24vMTIpXX1EdC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixpPXQsYT1lLG89NTA7ZG97dmFyIHM9YSphO2EtPXI9KGEqKDErcy8xMiktZSkvKDErcy80KX13aGlsZShuKHIpPnYmJi0tbz4wKTtvPTUwLHQvPTEtLjE2MjM4OCpzO2Rve3ZhciBsPShsPWkqaSkqbDtpLT1yPShpKiguODctOTUyNDI2ZS05KmwpLXQpLyguODctLjAwNDc2MjEzKmwpfXdoaWxlKG4ocik+diYmLS1vPjApO3JldHVybltpLGFdfTt2YXIgUnQ9UHQoMi42NTE2LC0uNzY1MzQsLjE5MTIzLC0uMDQ3MDk0LDEuMzYyODksLS4xMzk2NSwuMDMxNzYyKTtmdW5jdGlvbiBGdCh0KXt2YXIgZT10KHgsMClbMF0tdCgteCwwKVswXTtmdW5jdGlvbiByKHIsbil7dmFyIGk9cj4wPy0uNTouNSxhPXQocitpKnksbik7cmV0dXJuIGFbMF0tPWkqZSxhfXJldHVybiB0LmludmVydCYmKHIuaW52ZXJ0PWZ1bmN0aW9uKHIsbil7dmFyIGk9cj4wPy0uNTouNSxhPXQuaW52ZXJ0KHIraSplLG4pLG89YVswXS1pKnk7cmV0dXJuIG88LXk/bys9Mip5Om8+eSYmKG8tPTIqeSksYVswXT1vLGF9KSxyfWZ1bmN0aW9uIEJ0KHQsZSl7dmFyIHI9ZCh0KSxpPWQoZSkscz1vKGUpLGw9byh0KSpzLGM9bSh0KSpzLHU9bShpKmUpO3Q9bihhKGMsdSkpLGU9UyhsKSxuKHQteCk+diYmKHQlPXgpO3ZhciBmPWZ1bmN0aW9uKHQsZSl7aWYoZT09PXgpcmV0dXJuWzAsMF07dmFyIHIsaSxhPW0oZSkscz1hKmEsbD1zKnMsYz0xK2wsdT0xKzMqbCxmPTEtbCxoPVMoMS9MKGMpKSxwPWYrcypjKmgsZD0oMS1hKS9wLGc9TChkKSxiPWQqYyxfPUwoYiksdz1nKmY7aWYoMD09PXQpcmV0dXJuWzAsLSh3K3MqXyldO3ZhciBULGs9byhlKSxBPTEvayxNPTIqYSprLEU9KC1wKmstKC0zKnMraCp1KSpNKigxLWEpKS8ocCpwKSxDPS1BKk0sUD0tQSoocypjKkUrZCp1Kk0pLEk9LTIqQSooZiooLjUqRS9nKS0yKnMqZypNKSxPPTQqdC95O2lmKHQ+LjIyMip5fHxlPHkvNCYmdD4uMTc1Knkpe2lmKHI9KHcrcypMKGIqKDErbCktdyp3KSkvKDErbCksdD55LzQpcmV0dXJuW3Iscl07dmFyIHo9cixEPS41KnI7cj0uNSooRCt6KSxpPTUwO2Rve3ZhciBSPUwoYi1yKnIpLEY9ciooSStDKlIpK1AqUyhyL18pLU87aWYoIUYpYnJlYWs7RjwwP0Q9cjp6PXIscj0uNSooRCt6KX13aGlsZShuKHotRCk+diYmLS1pPjApfWVsc2V7cj12LGk9MjU7ZG97dmFyIEI9cipyLE49TChiLUIpLGo9SStDKk4sVT1yKmorUCpTKHIvXyktTyxWPWorKFAtQypCKS9OO3ItPVQ9Tj9VL1Y6MH13aGlsZShuKFQpPnYmJi0taT4wKX1yZXR1cm5bciwtdy1zKkwoYi1yKnIpXX0odD55LzQ/eC10OnQsZSk7cmV0dXJuIHQ+eS80JiYodT1mWzBdLGZbMF09LWZbMV0sZlsxXT0tdSksZlswXSo9cixmWzFdKj0taSxmfWZ1bmN0aW9uIE50KHQsZSl7dmFyIHIsYSxsLGMsdSxmO2lmKGU8dilyZXR1cm5bKGM9bSh0KSktKHI9ZSoodC1jKihhPW8odCkpKS80KSphLGErcipjLDEtZSpjKmMvMix0LXJdO2lmKGU+PTEtdilyZXR1cm4gcj0oMS1lKS80LGw9MS8oYT1QKHQpKSxbKGM9KChmPXMoMiooZj10KSkpLTEpLyhmKzEpKStyKigodT1hKkModCkpLXQpLyhhKmEpLGwtcipjKmwqKHUtdCksbCtyKmMqbCoodSt0KSwyKmkocyh0KSkteCtyKih1LXQpL2FdO3ZhciBoPVsxLDAsMCwwLDAsMCwwLDAsMF0scD1bTChlKSwwLDAsMCwwLDAsMCwwLDBdLGQ9MDtmb3IoYT1MKDEtZSksdT0xO24ocFtkXS9oW2RdKT52JiZkPDg7KXI9aFtkKytdLHBbZF09KHItYSkvMixoW2RdPShyK2EpLzIsYT1MKHIqYSksdSo9MjtsPXUqaFtkXSp0O2Rve2w9KFMoYz1wW2RdKm0oYT1sKS9oW2RdKStsKS8yfXdoaWxlKC0tZCk7cmV0dXJuW20obCksYz1vKGwpLGMvbyhsLWEpLGxdfWZ1bmN0aW9uIGp0KHQsZSl7aWYoIWUpcmV0dXJuIHQ7aWYoMT09PWUpcmV0dXJuIGMoZyh0LzIrYikpO2Zvcih2YXIgcj0xLGE9TCgxLWUpLG89TChlKSxzPTA7bihvKT52O3MrKyl7aWYodCV5KXt2YXIgbD1pKGEqZyh0KS9yKTtsPDAmJihsKz15KSx0Kz1sK35+KHQveSkqeX1lbHNlIHQrPXQ7bz0ocithKS8yLGE9TChyKmEpLG89KChyPW8pLWEpLzJ9cmV0dXJuIHQvKGgoMixzKSpyKX1mdW5jdGlvbiBVdCh0LGUpe3ZhciByPSh3LTEpLyh3KzEpLGw9TCgxLXIqciksdT1qdCh4LGwqbCksZj1jKGcoeS80K24oZSkvMikpLGg9cygtMSpmKS9MKHIpLHA9ZnVuY3Rpb24odCxlKXt2YXIgcj10KnQsbj1lKzEsaT0xLXItZSplO3JldHVyblsuNSooKHQ+PTA/eDoteCktYShpLDIqdCkpLC0uMjUqYyhpKmkrNCpyKSsuNSpjKG4qbityKV19KGgqbygtMSp0KSxoKm0oLTEqdCkpLHY9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPW4odCksbz1DKG4oZSkpO2lmKGEpe3ZhciBzPTEvbShhKSxsPTEvKGcoYSkqZyhhKSksYz0tKGwrcioobypvKnMqcyktMStyKSx1PSgtYytMKGMqYy00Kigoci0xKSpsKSkpLzI7cmV0dXJuW2p0KGkoMS9MKHUpKSxyKSpkKHQpLGp0KGkoTCgodS9sLTEpL3IpKSwxLXIpKmQoZSldfXJldHVyblswLGp0KGkobyksMS1yKSpkKGUpXX0ocFswXSxwWzFdLGwqbCk7cmV0dXJuWy12WzFdLChlPj0wPzE6LTEpKiguNSp1LXZbMF0pXX1mdW5jdGlvbiBWdCh0KXt2YXIgZT1tKHQpLHI9byh0KSxpPUh0KHQpO2Z1bmN0aW9uIHModCxhKXt2YXIgcz1pKHQsYSk7dD1zWzBdLGE9c1sxXTt2YXIgbD1tKGEpLGM9byhhKSx1PW8odCksZj1FKGUqbCtyKmMqdSksaD1tKGYpLHA9bihoKT52P2YvaDoxO3JldHVybltwKnIqbSh0KSwobih0KT54P3A6LXApKihlKmMtcipsKnUpXX1yZXR1cm4gaS5pbnZlcnQ9SHQoLXQpLHMuaW52ZXJ0PWZ1bmN0aW9uKHQscil7dmFyIG49TCh0KnQrcipyKSxzPS1tKG4pLGw9byhuKSxjPW4qbCx1PS1yKnMsZj1uKmUsaD1MKGMqYyt1KnUtZipmKSxwPWEoYypmK3UqaCx1KmYtYypoKSxkPShuPng/LTE6MSkqYSh0KnMsbipvKHApKmwrciptKHApKnMpO3JldHVybiBpLmludmVydChkLHApfSxzfWZ1bmN0aW9uIEh0KHQpe3ZhciBlPW0odCkscj1vKHQpO3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciBpPW8obikscz1vKHQpKmksbD1tKHQpKmksYz1tKG4pO3JldHVyblthKGwscypyLWMqZSksUyhjKnIrcyplKV19fUJ0LmludmVydD1mdW5jdGlvbih0LGUpe24odCk+MSYmKHQ9MipkKHQpLXQpLG4oZSk+MSYmKGU9MipkKGUpLWUpO3ZhciByPWQodCksaT1kKGUpLHM9LXIqdCxsPS1pKmUsYz1sL3M8MSx1PWZ1bmN0aW9uKHQsZSl7dmFyIHI9MCxpPTEsYT0uNSxzPTUwO2Zvcig7Oyl7dmFyIGw9YSphLGM9TChhKSx1PVMoMS9MKDErbCkpLGY9MS1sK2EqKDErbCkqdSxoPSgxLWMpL2YscD1MKGgpLGQ9aCooMStsKSxtPXAqKDEtbCksZz1MKGQtdCp0KSx2PWUrbSthKmc7aWYobihpLXIpPDFlLTEyfHwwPT0tLXN8fDA9PT12KWJyZWFrO3Y+MD9yPWE6aT1hLGE9LjUqKHIraSl9aWYoIXMpcmV0dXJuIG51bGw7dmFyIHg9UyhjKSxiPW8oeCksXz0xL2Isdz0yKmMqYixUPSgtZipiLSgtMyphK3UqKDErMypsKSkqdyooMS1jKSkvKGYqZik7cmV0dXJuW3kvNCoodCooLTIqXyooLjUqVC9wKigxLWwpLTIqYSpwKncpKy1fKncqZykrLV8qKGEqKDErbCkqVCtoKigxKzMqbCkqdykqUyh0L0woZCkpKSx4XX0oYz9sOnMsYz9zOmwpLGY9dVswXSxoPXVbMV0scD1vKGgpO3JldHVybiBjJiYoZj0teC1mKSxbciooYShtKGYpKnAsLW0oaCkpK3kpLGkqUyhvKGYpKnApXX0sVXQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixvLGwsdSxmLGg9KHctMSkvKHcrMSkscD1MKDEtaCpoKSxkPWp0KHgscCpwKSxtPShuPS10LG89cCpwLChyPS41KmQtZSk/KGw9TnQocixvKSxuPyhmPSh1PU50KG4sMS1vKSlbMV0qdVsxXStvKmxbMF0qbFswXSp1WzBdKnVbMF0sW1tsWzBdKnVbMl0vZixsWzFdKmxbMl0qdVswXSp1WzFdL2ZdLFtsWzFdKnVbMV0vZiwtbFswXSpsWzJdKnVbMF0qdVsyXS9mXSxbbFsyXSp1WzFdKnVbMl0vZiwtbypsWzBdKmxbMV0qdVswXS9mXV0pOltbbFswXSwwXSxbbFsxXSwwXSxbbFsyXSwwXV0pOltbMCwodT1OdChuLDEtbykpWzBdL3VbMV1dLFsxL3VbMV0sMF0sW3VbMl0vdVsxXSwwXV0pLGc9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdKmVbMF0rZVsxXSplWzFdO3JldHVyblsodFswXSplWzBdK3RbMV0qZVsxXSkvciwodFsxXSplWzBdLXRbMF0qZVsxXSkvcl19KG1bMF0sbVsxXSk7cmV0dXJuW2EoZ1sxXSxnWzBdKS8tMSwyKmkocygtLjUqYyhoKmdbMF0qZ1swXStoKmdbMV0qZ1sxXSkpKS14XX07dmFyIHF0PVMoMS0xLzMpKkEsR3Q9aHQoMCk7ZnVuY3Rpb24gWXQodCl7dmFyIGU9cXQqTSxyPWx0KHksZSlbMF0tbHQoLXksZSlbMF0saT1HdCgwLGUpWzFdLGE9bHQoMCxlKVsxXSxvPVQtYSxzPWsvdCxjPTQvayxoPWkrbypvKjQvaztmdW5jdGlvbiBwKHAsZCl7dmFyIG0sZz1uKGQpO2lmKGc+ZSl7dmFyIHY9Zih0LTEsdSgwLGwoKHAreSkvcykpKTsobT1sdChwKz15Kih0LTEpL3QtdipzLGcpKVswXT1tWzBdKmsvci1rKih0LTEpLygyKnQpK3Yqay90LG1bMV09aSs0KihtWzFdLWEpKm8vayxkPDAmJihtWzFdPS1tWzFdKX1lbHNlIG09R3QocCxkKTtyZXR1cm4gbVswXSo9YyxtWzFdLz1oLG19cmV0dXJuIHAuaW52ZXJ0PWZ1bmN0aW9uKGUscCl7ZS89Yzt2YXIgZD1uKHAqPWgpO2lmKGQ+aSl7dmFyIG09Zih0LTEsdSgwLGwoKGUreSkvcykpKTtlPShlK3kqKHQtMSkvdC1tKnMpKnIvazt2YXIgZz1sdC5pbnZlcnQoZSwuMjUqKGQtaSkqay9vK2EpO3JldHVybiBnWzBdLT15Kih0LTEpL3QtbSpzLHA8MCYmKGdbMV09LWdbMV0pLGd9cmV0dXJuIEd0LmludmVydChlLHApfSxwfWZ1bmN0aW9uIFd0KHQsZSl7cmV0dXJuW3QsMSZlPzkwLXY6cXRdfWZ1bmN0aW9uIFh0KHQsZSl7cmV0dXJuW3QsMSZlPy05MCt2Oi1xdF19ZnVuY3Rpb24gWnQodCl7cmV0dXJuW3RbMF0qKDEtdiksdFsxXV19ZnVuY3Rpb24gSnQodCl7dmFyIGUscj0xK3QsaT1TKG0oMS9yKSkscz0yKkwoeS8oZT15KzQqaSpyKSksbD0uNSpzKihyK0wodCooMit0KSkpLGM9dCp0LHU9cipyO2Z1bmN0aW9uIGYoZixoKXt2YXIgcCxkLGc9MS1tKGgpO2lmKGcmJmc8Mil7dmFyIHYsYj14LWgsXz0yNTtkb3t2YXIgdz1tKGIpLFQ9byhiKSxrPWkrYSh3LHItVCksQT0xK3UtMipyKlQ7Yi09dj0oYi1jKmktcip3K0Eqay0uNSpnKmUpLygyKnIqdyprKX13aGlsZShuKHYpPjFlLTEyJiYtLV8+MCk7cD1zKkwoQSksZD1mKmsveX1lbHNlIHA9cyoodCtnKSxkPWYqaS95O3JldHVybltwKm0oZCksbC1wKm8oZCldfXJldHVybiBmLmludmVydD1mdW5jdGlvbih0LG4pe3ZhciBvPXQqdCsobi09bCkqbixmPSgxK3Utby8ocypzKSkvKDIqciksaD1FKGYpLHA9bShoKSxkPWkrYShwLHItZik7cmV0dXJuW1ModC9MKG8pKSp5L2QsUygxLTIqKGgtYyppLXIqcCsoMSt1LTIqcipmKSpkKS9lKV19LGZ9ZnVuY3Rpb24gS3QodCxlKXtyZXR1cm4gZT4tLjcxMDk4ODk1OTYyMDc1Njc/KCh0PVcodCxlKSlbMV0rPS4wNTI4MDM1Mjc0NTQyLHQpOlEodCxlKX1mdW5jdGlvbiBRdCh0LGUpe3JldHVybiBuKGUpPi43MTA5ODg5NTk2MjA3NTY3PygodD1XKHQsZSkpWzFdLT1lPjA/LjA1MjgwMzUyNzQ1NDI6LS4wNTI4MDM1Mjc0NTQyLHQpOlEodCxlKX1mdW5jdGlvbiAkdCh0LGUscixuKXt2YXIgaT1MKDQqeS8oMipyKygxK3QtZS8yKSptKDIqcikrKHQrZSkvMiptKDQqcikrZS8yKm0oNipyKSkpLGE9TChuKm0ocikqTCgoMSt0Km8oMipyKStlKm8oNCpyKSkvKDErdCtlKSkpLHM9cipjKDEpO2Z1bmN0aW9uIGwocil7cmV0dXJuIEwoMSt0Km8oMipyKStlKm8oNCpyKSl9ZnVuY3Rpb24gYyhuKXt2YXIgaT1uKnI7cmV0dXJuKDIqaSsoMSt0LWUvMikqbSgyKmkpKyh0K2UpLzIqbSg0KmkpK2UvMiptKDYqaSkpL3J9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gbCh0KSptKHQpfXZhciBmPWZ1bmN0aW9uKHQsZSl7dmFyIG49cipWKGMscyptKGUpL3IsZS95KTtpc05hTihuKSYmKG49cipkKGUpKTt2YXIgdT1pKmwobik7cmV0dXJuW3UqYSp0L3kqbyhuKSx1L2EqbShuKV19O3JldHVybiBmLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuPVYodSxlKmEvaSk7cmV0dXJuW3QqeS8obyhuKSppKmEqbChuKSksUyhyKmMobi9yKS9zKV19LDA9PT1yJiYoaT1MKG4veSksKGY9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCppLG0oZSkvaV19KS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdC9pLFMoZSppKV19KSxmfWZ1bmN0aW9uIHRlKHQsZSxyLG4saSl7dm9pZCAwPT09biYmKG49MWUtOCksdm9pZCAwPT09aSYmKGk9MjApO3ZhciBhPXQoZSksbz10KC41KihlK3IpKSxzPXQocik7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSxhLG8scyxsLGMsdSxmKXtpZihmLm5hbkVuY291bnRlcmVkKXJldHVybiBOYU47dmFyIGgscCxkLG0sZyx2LHkseCxiLF87aWYocD1lKHIrLjI1KihoPW4tcikpLGQ9ZShuLS4yNSpoKSxpc05hTihwKSlmLm5hbkVuY291bnRlcmVkPSEwO2Vsc2V7aWYoIWlzTmFOKGQpKXJldHVybiBfPSgodj0obT1oKihpKzQqcCthKS8xMikrKGc9aCooYSs0KmQrbykvMTIpKS1zKS8xNSx1PmM/KGYubWF4RGVwdGhDb3VudCsrLHYrXyk6TWF0aC5hYnMoXyk8bD92K186KHg9dChlLHIseT1yKy41KmgsaSxwLGEsbSwuNSpsLGMsdSsxLGYpLGlzTmFOKHgpPyhmLm5hbkVuY291bnRlcmVkPSEwLE5hTik6KGI9dChlLHksbixhLGQsbyxnLC41KmwsYyx1KzEsZiksaXNOYU4oYik/KGYubmFuRW5jb3VudGVyZWQ9ITAsTmFOKTp4K2IpKTtmLm5hbkVuY291bnRlcmVkPSEwfX0odCxlLHIsYSxvLHMsKGErNCpvK3MpKihyLWUpLzYsbixpLDEse21heERlcHRoQ291bnQ6MCxuYW5FbmNvdW50ZXJlZDohMX0pfWZ1bmN0aW9uIGVlKHQsZSxyKXtmdW5jdGlvbiBpKHIpe3JldHVybiB0KygxLXQpKmgoMS1oKHIsZSksMS9lKX1mdW5jdGlvbiBhKHQpe3JldHVybiB0ZShpLDAsdCwxZS00KX1mb3IodmFyIG89MS9hKDEpLHM9MWUzLGw9KDErMWUtOCkqbyxjPVtdLHU9MDt1PD1zO3UrKyljLnB1c2goYSh1L3MpKmwpO2Z1bmN0aW9uIGYodCl7dmFyIGU9MCxyPXMsbj01MDA7ZG97Y1tuXT50P3I9bjplPW4sbj1lK3I+PjF9d2hpbGUobj5lKTt2YXIgaT1jW24rMV0tY1tuXTtyZXR1cm4gaSYmKGk9KHQtY1tuKzFdKS9pKSwobisxK2kpL3N9dmFyIHA9MipmKDEpL3kqby9yLGc9ZnVuY3Rpb24odCxlKXt2YXIgcj1mKG4obShlKSkpLGE9aShyKSp0O3JldHVybiByLz1wLFthLGU+PTA/cjotcl19O3JldHVybiBnLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBuKGUqPXApPDEmJihyPWQoZSkqUyhhKG4oZSkpKm8pKSxbdC9pKG4oZSkpLHJdfSxnfWZ1bmN0aW9uIHJlKHQsZSl7cmV0dXJuIG4odFswXS1lWzBdKTx2JiZuKHRbMV0tZVsxXSk8dn1mdW5jdGlvbiBuZSh0LGUpe2Zvcih2YXIgcixuLGksYT0tMSxvPXQubGVuZ3RoLHM9dFswXSxsPVtdOysrYTxvOyl7bj0oKHI9dFthXSlbMF0tc1swXSkvZSxpPShyWzFdLXNbMV0pL2U7Zm9yKHZhciBjPTA7YzxlOysrYylsLnB1c2goW3NbMF0rYypuLHNbMV0rYyppXSk7cz1yfXJldHVybiBsLnB1c2gociksbH1mdW5jdGlvbiBpZSh0KXt2YXIgZSxuLGksYSxvLHMsbCxjPVtdLHU9dFswXS5sZW5ndGg7Zm9yKGw9MDtsPHU7KytsKW49KGU9dFswXVtsXSlbMF1bMF0saT1lWzBdWzFdLGE9ZVsxXVsxXSxvPWVbMl1bMF0scz1lWzJdWzFdLGMucHVzaChuZShbW24rdixpK3ZdLFtuK3YsYS12XSxbby12LGEtdl0sW28tdixzK3ZdXSwzMCkpO2ZvcihsPXRbMV0ubGVuZ3RoLTE7bD49MDstLWwpbj0oZT10WzFdW2xdKVswXVswXSxpPWVbMF1bMV0sYT1lWzFdWzFdLG89ZVsyXVswXSxzPWVbMl1bMV0sYy5wdXNoKG5lKFtbby12LHMtdl0sW28tdixhK3ZdLFtuK3YsYSt2XSxbbit2LGktdl1dLDMwKSk7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltyLm1lcmdlKGMpXX19ZnVuY3Rpb24gYWUodCxyLG4pe3ZhciBpLGE7ZnVuY3Rpb24gbyhlLG4pe2Zvcih2YXIgaT1uPDA/LTE6MSxhPXJbKyhuPDApXSxvPTAscz1hLmxlbmd0aC0xO288cyYmZT5hW29dWzJdWzBdOysrbyk7dmFyIGw9dChlLWFbb11bMV1bMF0sbik7cmV0dXJuIGxbMF0rPXQoYVtvXVsxXVswXSxpKm4+aSphW29dWzBdWzFdP2Fbb11bMF1bMV06bilbMF0sbH1uP28uaW52ZXJ0PW4obyk6dC5pbnZlcnQmJihvLmludmVydD1mdW5jdGlvbihlLG4pe2Zvcih2YXIgaT1hWysobjwwKV0scz1yWysobjwwKV0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbCl7dmFyIHU9aVtsXTtpZih1WzBdWzBdPD1lJiZlPHVbMV1bMF0mJnVbMF1bMV08PW4mJm48dVsxXVsxXSl7dmFyIGY9dC5pbnZlcnQoZS10KHNbbF1bMV1bMF0sMClbMF0sbik7cmV0dXJuIGZbMF0rPXNbbF1bMV1bMF0scmUobyhmWzBdLGZbMV0pLFtlLG5dKT9mOm51bGx9fX0pO3ZhciBzPWUuZ2VvUHJvamVjdGlvbihvKSxsPXMuc3RyZWFtO3JldHVybiBzLnN0cmVhbT1mdW5jdGlvbih0KXt2YXIgcj1zLnJvdGF0ZSgpLG49bCh0KSxhPShzLnJvdGF0ZShbMCwwXSksbCh0KSk7cmV0dXJuIHMucm90YXRlKHIpLG4uc3BoZXJlPWZ1bmN0aW9uKCl7ZS5nZW9TdHJlYW0oaSxhKX0sbn0scy5sb2Jlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1pZShlKSxyPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybltbdFswXVswXSpNLHRbMF1bMV0qTV0sW3RbMV1bMF0qTSx0WzFdWzFdKk1dLFt0WzJdWzBdKk0sdFsyXVsxXSpNXV19KSl9KSksYT1yLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUubWFwKChmdW5jdGlvbihlKXt2YXIgcixuPXQoZVswXVswXSxlWzBdWzFdKVswXSxpPXQoZVsyXVswXSxlWzJdWzFdKVswXSxhPXQoZVsxXVswXSxlWzBdWzFdKVsxXSxvPXQoZVsxXVswXSxlWzFdWzFdKVsxXTtyZXR1cm4gYT5vJiYocj1hLGE9byxvPXIpLFtbbixhXSxbaSxvXV19KSl9KSkscyk6ci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW1t0WzBdWzBdKkEsdFswXVsxXSpBXSxbdFsxXVswXSpBLHRbMV1bMV0qQV0sW3RbMl1bMF0qQSx0WzJdWzFdKkFdXX0pKX0pKX0sbnVsbCE9ciYmcy5sb2JlcyhyKSxzfUt0LmludmVydD1mdW5jdGlvbih0LGUpe3JldHVybiBlPi0uNzEwOTg4OTU5NjIwNzU2Nz9XLmludmVydCh0LGUtLjA1MjgwMzUyNzQ1NDIpOlEuaW52ZXJ0KHQsZSl9LFF0LmludmVydD1mdW5jdGlvbih0LGUpe3JldHVybiBuKGUpPi43MTA5ODg5NTk2MjA3NTY3P1cuaW52ZXJ0KHQsZSsoZT4wPy4wNTI4MDM1Mjc0NTQyOi0uMDUyODAzNTI3NDU0MikpOlEuaW52ZXJ0KHQsZSl9O3ZhciBvZT1bW1tbLTE4MCwwXSxbLTEwMCw5MF0sWy00MCwwXV0sW1stNDAsMF0sWzMwLDkwXSxbMTgwLDBdXV0sW1tbLTE4MCwwXSxbLTE2MCwtOTBdLFstMTAwLDBdXSxbWy0xMDAsMF0sWy02MCwtOTBdLFstMjAsMF1dLFtbLTIwLDBdLFsyMCwtOTBdLFs4MCwwXV0sW1s4MCwwXSxbMTQwLC05MF0sWzE4MCwwXV1dXTt2YXIgc2U9W1tbWy0xODAsMF0sWy0xMDAsOTBdLFstNDAsMF1dLFtbLTQwLDBdLFszMCw5MF0sWzE4MCwwXV1dLFtbWy0xODAsMF0sWy0xNjAsLTkwXSxbLTEwMCwwXV0sW1stMTAwLDBdLFstNjAsLTkwXSxbLTIwLDBdXSxbWy0yMCwwXSxbMjAsLTkwXSxbODAsMF1dLFtbODAsMF0sWzE0MCwtOTBdLFsxODAsMF1dXV07dmFyIGxlPVtbW1stMTgwLDBdLFstMTAwLDkwXSxbLTQwLDBdXSxbWy00MCwwXSxbMzAsOTBdLFsxODAsMF1dXSxbW1stMTgwLDBdLFstMTYwLC05MF0sWy0xMDAsMF1dLFtbLTEwMCwwXSxbLTYwLC05MF0sWy0yMCwwXV0sW1stMjAsMF0sWzIwLC05MF0sWzgwLDBdXSxbWzgwLDBdLFsxNDAsLTkwXSxbMTgwLDBdXV1dO3ZhciBjZT1bW1tbLTE4MCwwXSxbLTkwLDkwXSxbMCwwXV0sW1swLDBdLFs5MCw5MF0sWzE4MCwwXV1dLFtbWy0xODAsMF0sWy05MCwtOTBdLFswLDBdXSxbWzAsMF0sWzkwLC05MF0sWzE4MCwwXV1dXTt2YXIgdWU9W1tbWy0xODAsMzVdLFstMzAsOTBdLFswLDM1XV0sW1swLDM1XSxbMzAsOTBdLFsxODAsMzVdXV0sW1tbLTE4MCwtMTBdLFstMTAyLC05MF0sWy02NSwtMTBdXSxbWy02NSwtMTBdLFs1LC05MF0sWzc3LC0xMF1dLFtbNzcsLTEwXSxbMTAzLC05MF0sWzE4MCwtMTBdXV1dO3ZhciBmZT1bW1tbLTE4MCwwXSxbLTExMCw5MF0sWy00MCwwXV0sW1stNDAsMF0sWzAsOTBdLFs0MCwwXV0sW1s0MCwwXSxbMTEwLDkwXSxbMTgwLDBdXV0sW1tbLTE4MCwwXSxbLTExMCwtOTBdLFstNDAsMF1dLFtbLTQwLDBdLFswLC05MF0sWzQwLDBdXSxbWzQwLDBdLFsxMTAsLTkwXSxbMTgwLDBdXV1dO2Z1bmN0aW9uIGhlKHQsZSl7cmV0dXJuWzMvayp0KkwoeSp5LzMtZSplKSxlXX1mdW5jdGlvbiBwZSh0KXtmdW5jdGlvbiBlKGUscil7aWYobihuKHIpLXgpPHYpcmV0dXJuWzAscjwwPy0yOjJdO3ZhciBpPW0ociksYT1oKCgxK2kpLygxLWkpLHQvMikscz0uNSooYSsxL2EpK28oZSo9dCk7cmV0dXJuWzIqbShlKS9zLChhLTEvYSkvc119cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKGUscil7dmFyIGk9bihyKTtpZihuKGktMik8dilyZXR1cm4gZT9udWxsOlswLGQocikqeF07aWYoaT4yKXJldHVybiBudWxsO3ZhciBvPShlLz0yKSplLHM9KHIvPTIpKnIsbD0yKnIvKDErbytzKTtyZXR1cm4gbD1oKCgxK2wpLygxLWwpLDEvdCksW2EoMiplLDEtby1zKS90LFMoKGwtMSkvKGwrMSkpXX0sZX1oZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bay8zKnQvTCh5KnkvMy1lKmUpLGVdfTt2YXIgZGU9eS93O2Z1bmN0aW9uIG1lKHQsZSl7cmV0dXJuW3QqKDErTChvKGUpKSkvMixlLyhvKGUvMikqbyh0LzYpKV19ZnVuY3Rpb24gZ2UodCxlKXt2YXIgcj10KnQsbj1lKmU7cmV0dXJuW3QqKC45NzU1MzQrbiooLS4wMTQzMDU5KnItLjExOTE2MSstLjA1NDcwMDkqbikpLGUqKDEuMDAzODQrciooLjA4MDI4OTQrLS4wMjg1NSpuKzE5OTAyNWUtOSpyKStuKiguMDk5ODkwOSstLjA0OTEwMzIqbikpXX1mdW5jdGlvbiB2ZSh0LGUpe3JldHVyblttKHQpL28oZSksZyhlKSpvKHQpXX1mdW5jdGlvbiB5ZSh0KXt2YXIgZT1vKHQpLHI9ZyhiK3QvMik7ZnVuY3Rpb24gaShpLGEpe3ZhciBvPWEtdCxzPW4obyk8dj9pKmU6bihzPWIrYS8yKTx2fHxuKG4ocykteCk8dj8wOmkqby9jKGcocykvcik7cmV0dXJuW3Msb119cmV0dXJuIGkuaW52ZXJ0PWZ1bmN0aW9uKGksYSl7dmFyIG8scz1hK3Q7cmV0dXJuW24oYSk8dj9pL2U6bihvPWIrcy8yKTx2fHxuKG4obykteCk8dj8wOmkqYyhnKG8pL3IpL2Esc119LGl9ZnVuY3Rpb24geGUodCxlKXtyZXR1cm5bdCwxLjI1KmMoZyhiKy40KmUpKV19ZnVuY3Rpb24gYmUodCl7dmFyIGU9dC5sZW5ndGgtMTtmdW5jdGlvbiByKHIsbil7Zm9yKHZhciBpLGE9byhuKSxzPTIvKDErYSpvKHIpKSxsPXMqYSptKHIpLGM9cyptKG4pLHU9ZSxmPXRbdV0saD1mWzBdLHA9ZlsxXTstLXU+PTA7KWg9KGY9dFt1XSlbMF0rbCooaT1oKS1jKnAscD1mWzFdK2wqcCtjKmk7cmV0dXJuW2g9bCooaT1oKS1jKnAscD1sKnArYyppXX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24ocixzKXt2YXIgbD0yMCxjPXIsdT1zO2Rve2Zvcih2YXIgZixoPWUscD10W2hdLGQ9cFswXSxnPXBbMV0sdj0wLHk9MDstLWg+PTA7KXY9ZCtjKihmPXYpLXUqeSx5PWcrYyp5K3UqZixkPShwPXRbaF0pWzBdK2MqKGY9ZCktdSpnLGc9cFsxXStjKmcrdSpmO3ZhciB4LGIsXz0odj1kK2MqKGY9diktdSp5KSp2Kyh5PWcrYyp5K3UqZikqeTtjLT14PSgoZD1jKihmPWQpLXUqZy1yKSp2KyhnPWMqZyt1KmYtcykqeSkvXyx1LT1iPShnKnYtZCp5KS9ffXdoaWxlKG4oeCkrbihiKT4xZS0xMiYmLS1sPjApO2lmKGwpe3ZhciB3PUwoYypjK3UqdSksVD0yKmkoLjUqdyksaz1tKFQpO3JldHVyblthKGMqayx3Km8oVCkpLHc/Uyh1Kmsvdyk6MF19fSxyfW1lLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPW4odCksaT1uKGUpLGE9dixzPXg7aTxkZT9zKj1pL2RlOmErPTYqRShkZS9pKTtmb3IodmFyIGw9MDtsPDI1O2wrKyl7dmFyIGM9bShzKSx1PUwobyhzKSksZj1tKHMvMiksaD1vKHMvMikscD1tKGEvNiksZD1vKGEvNiksZz0uNSphKigxK3UpLXIseT1zLyhoKmQpLWksYj11Py0uMjUqYSpjL3U6MCxfPS41KigxK3UpLHc9KDErLjUqcypmL2gpLyhoKmQpLFQ9cy9oKihwLzYpLyhkKmQpLGs9YipULXcqXyxBPShnKlQteSpfKS9rLE09KHkqYi1nKncpL2s7aWYocy09QSxhLT1NLG4oQSk8diYmbihNKTx2KWJyZWFrfXJldHVyblt0PDA/LWE6YSxlPDA/LXM6c119LGdlLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWQodCkqeSxpPWUvMixhPTUwO2Rve3ZhciBvPXIqcixzPWkqaSxsPXIqaSxjPXIqKC45NzU1MzQrcyooLS4wMTQzMDU5Km8tLjExOTE2MSstLjA1NDcwMDkqcykpLXQsdT1pKigxLjAwMzg0K28qKC4wODAyODk0Ky0uMDI4NTUqcysxOTkwMjVlLTkqbykrcyooLjA5OTg5MDkrLS4wNDkxMDMyKnMpKS1lLGY9Ljk3NTUzNC1zKiguMTE5MTYxKzMqbyouMDE0MzA1OSsuMDU0NzAwOSpzKSxoPS1sKiguMjM4MzIyKy4yMTg4MDM2KnMrLjAyODYxMTgqbykscD1sKiguMTYwNTc4OCs3OTYxZS03Km8rLS4wNTcxKnMpLG09MS4wMDM4NCtvKiguMDgwMjg5NCsxOTkwMjVlLTkqbykrcyooMyooLjA5OTg5MDktLjAyODU1Km8pLS4yNDU1MTYqcyksZz1oKnAtbSpmLHg9KHUqaC1jKm0pL2csYj0oYypwLXUqZikvZztyLT14LGktPWJ9d2hpbGUoKG4oeCk+dnx8bihiKT52KSYmLS1hPjApO3JldHVybiBhJiZbcixpXX0sdmUuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dCp0LG49ZSplKzEsaT1yK24sYT10P18qTCgoaS1MKGkqaS00KnIpKS9yKToxL0wobik7cmV0dXJuW1ModCphKSxkKGUpKkUoYSldfSx4ZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCwyLjUqaShzKC44KmUpKS0uNjI1KnldfTt2YXIgX2U9W1suOTk3MjUyMywwXSxbLjAwNTI1MTMsLS4wMDQxMTc1XSxbLjAwNzQ2MDYsLjAwNDgxMjVdLFstLjAxNTM3ODMsLS4xOTY4MjUzXSxbLjA2MzY4NzEsLS4xNDA4MDI3XSxbLjM2NjA5NzYsLS4yOTM3MzgyXV0sd2U9W1suOTg4NzksMF0sWzAsMF0sWy0uMDUwOTA5LDBdLFswLDBdLFsuMDc1NTI4LDBdXSxUZT1bWy45ODQyOTksMF0sWy4wMjExNjQyLC4wMDM3NjA4XSxbLS4xMDM2MDE4LC0uMDU3NTEwMl0sWy0uMDMyOTA5NSwtLjAzMjAxMTldLFsuMDQ5OTQ3MSwuMTIyMzMzNV0sWy4wMjYwNDYsLjA4OTk4MDVdLFs3Mzg4ZS03LC0uMTQzNTc5Ml0sWy4wMDc1ODQ4LC0uMTMzNDEwOF0sWy0uMDIxNjQ3MywuMDc3NjY0NV0sWy0uMDIyNTE2MSwuMDg1MzY3M11dLGtlPVtbLjkyNDUsMF0sWzAsMF0sWy4wMTk0MywwXV0sQWU9W1suNzIxMzE2LDBdLFswLDBdLFstLjAwODgxNjI1LC0uMDA2MTczMjVdXTtmdW5jdGlvbiBNZSh0LHIpe3ZhciBuPWUuZ2VvUHJvamVjdGlvbihiZSh0KSkucm90YXRlKHIpLmNsaXBBbmdsZSg5MCksaT1lLmdlb1JvdGF0aW9uKHIpLGE9bi5jZW50ZXI7cmV0dXJuIGRlbGV0ZSBuLnJvdGF0ZSxuLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9hKGkodCkpOmkuaW52ZXJ0KGEoKSl9LG59dmFyIFNlPUwoNiksRWU9TCg3KTtmdW5jdGlvbiBMZSh0LGUpe3ZhciByPVMoNyptKGUpLygzKlNlKSk7cmV0dXJuW1NlKnQqKDIqbygyKnIvMyktMSkvRWUsOSptKHIvMykvRWVdfWZ1bmN0aW9uIENlKHQsZSl7Zm9yKHZhciByLGk9KDErXykqbShlKSxhPWUscz0wO3M8MjUmJihhLT1yPShtKGEvMikrbShhKS1pKS8oLjUqbyhhLzIpK28oYSkpLCEobihyKTx2KSk7cysrKTtyZXR1cm5bdCooMSsyKm8oYSkvbyhhLzIpKS8oMyp3KSwyKkwoMykqbShhLzIpL0woMit3KV19ZnVuY3Rpb24gUGUodCxlKXtmb3IodmFyIHIsaT1MKDYvKDQreSkpLGE9KDEreS80KSptKGUpLHM9ZS8yLGw9MDtsPDI1JiYocy09cj0ocy8yK20ocyktYSkvKC41K28ocykpLCEobihyKTx2KSk7bCsrKTtyZXR1cm5baSooLjUrbyhzKSkqdC8xLjUsaSpzXX1mdW5jdGlvbiBJZSh0LGUpe3ZhciByPWUqZSxuPXIqcixpPXIqbjtyZXR1cm5bdCooLjg0NzE5LS4xMzA2MypyK2kqaSooLjA1NDk0KnItLjA0NTE1LS4wMjMyNipuKy4wMDMzMSppKSksZSooMS4wMTE4MytuKm4qKC4wMTkyNipyLS4wMjYyNS0uMDAzOTYqbikpXX1mdW5jdGlvbiBPZSh0LGUpe3JldHVyblt0KigxK28oZSkpLzIsMiooZS1nKGUvMikpXX1MZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0zKlMoZSpFZS85KTtyZXR1cm5bdCpFZS8oU2UqKDIqbygyKnIvMyktMSkpLFMoMyptKHIpKlNlLzcpXX0sQ2UuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZSpMKDIrdykvKDIqTCgzKSksbj0yKlMocik7cmV0dXJuWzMqdyp0LygxKzIqbyhuKS9vKG4vMikpLFMoKHIrbShuKSkvKDErXykpXX0sUGUuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9TCg2Lyg0K3kpKSxpPWUvcjtyZXR1cm4gbihuKGkpLXgpPHYmJihpPWk8MD8teDp4KSxbMS41KnQvKHIqKC41K28oaSkpKSxTKChpLzIrbShpKSkvKDEreS80KSldfSxJZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsbyxzPWUsbD0yNTtkb3tzLT1yPShzKigxLjAxMTgzKyhhPShpPXMqcykqaSkqYSooLjAxOTI2KmktLjAyNjI1LS4wMDM5NiphKSktZSkvKDEuMDExODMrYSphKiguMjExODYqaS0uMjM2MjUrLS4wNTE0OCphKSl9d2hpbGUobihyKT4xZS0xMiYmLS1sPjApO3JldHVyblt0LyguODQ3MTktLjEzMDYzKihpPXMqcykrKG89aSooYT1pKmkpKSpvKiguMDU0OTQqaS0uMDQ1MTUtLjAyMzI2KmErLjAwMzMxKm8pKSxzXX0sT2UuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUvMixpPTAsYT0xLzA7aTwxMCYmbihhKT52OysraSl7dmFyIHM9byhlLzIpO2UtPWE9KGUtZyhlLzIpLXIpLygxLS41LyhzKnMpKX1yZXR1cm5bMip0LygxK28oZSkpLGVdfTt2YXIgemU9W1tbWy0xODAsMF0sWy05MCw5MF0sWzAsMF1dLFtbMCwwXSxbOTAsOTBdLFsxODAsMF1dXSxbW1stMTgwLDBdLFstOTAsLTkwXSxbMCwwXV0sW1swLDBdLFs5MCwtOTBdLFsxODAsMF1dXV07ZnVuY3Rpb24gRGUodCxlKXt2YXIgcj1tKGUpLGk9byhlKSxhPWQodCk7aWYoMD09PXR8fG4oZSk9PT14KXJldHVyblswLGVdO2lmKDA9PT1lKXJldHVyblt0LDBdO2lmKG4odCk9PT14KXJldHVyblt0KmkseCpyXTt2YXIgcz15LygyKnQpLTIqdC95LGw9MiplL3ksYz0oMS1sKmwpLyhyLWwpLHU9cypzLGY9YypjLGg9MSt1L2YscD0xK2YvdSxnPShzKnIvYy1zLzIpL2gsdj0oZipyL3UrYy8yKS9wLGI9dip2LShmKnIqci91K2Mqci0xKS9wO3JldHVyblt4KihnK0woZypnK2kqaS9oKSphKSx4Kih2K0woYjwwPzA6YikqZCgtZSpzKSphKV19RGUuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQvPXgpKnQsbj1yKyhlLz14KSplLGk9eSp5O3JldHVyblt0PyhuLTErTCgoMS1uKSooMS1uKSs0KnIpKS8oMip0KSp4OjAsVigoZnVuY3Rpb24odCl7cmV0dXJuIG4qKHkqbSh0KS0yKnQpKnkrNCp0KnQqKGUtbSh0KSkrMip5KnQtaSplfSksMCldfTtmdW5jdGlvbiBSZSh0LGUpe3ZhciByPWUqZTtyZXR1cm5bdCxlKigxLjAxNDgrcipyKiguMjMxODUrciooLjAyNDA2KnItLjE0NDk5KSkpXX1mdW5jdGlvbiBGZSh0LGUpe2lmKG4oZSk8dilyZXR1cm5bdCwwXTt2YXIgcj1nKGUpLGk9dCptKGUpO3JldHVyblttKGkpL3IsZSsoMS1vKGkpKS9yXX1mdW5jdGlvbiBCZSh0LGUpe3ZhciByPWplKHRbMV0sdFswXSksbj1qZShlWzFdLGVbMF0pLGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYSh0WzBdKmVbMV0tdFsxXSplWzBdLHRbMF0qZVswXSt0WzFdKmVbMV0pfShyLG4pLHM9VWUocikvVWUobik7cmV0dXJuIE5lKFsxLDAsdFswXVswXSwwLDEsdFswXVsxXV0sTmUoW3MsMCwwLDAscywwXSxOZShbbyhpKSxtKGkpLDAsLW0oaSksbyhpKSwwXSxbMSwwLC1lWzBdWzBdLDAsMSwtZVswXVsxXV0pKSl9ZnVuY3Rpb24gTmUodCxlKXtyZXR1cm5bdFswXSplWzBdK3RbMV0qZVszXSx0WzBdKmVbMV0rdFsxXSplWzRdLHRbMF0qZVsyXSt0WzFdKmVbNV0rdFsyXSx0WzNdKmVbMF0rdFs0XSplWzNdLHRbM10qZVsxXSt0WzRdKmVbNF0sdFszXSplWzJdK3RbNF0qZVs1XSt0WzVdXX1mdW5jdGlvbiBqZSh0LGUpe3JldHVyblt0WzBdLWVbMF0sdFsxXS1lWzFdXX1mdW5jdGlvbiBVZSh0KXtyZXR1cm4gTCh0WzBdKnRbMF0rdFsxXSp0WzFdKX1mdW5jdGlvbiBWZSh0LHIsaSl7ZnVuY3Rpb24gYSh0LGUpe3ZhciBuLGk9cih0LGUpLGE9aS5wcm9qZWN0KFt0KkEsZSpBXSk7cmV0dXJuKG49aS50cmFuc2Zvcm0pP1tuWzBdKmFbMF0rblsxXSphWzFdK25bMl0sLShuWzNdKmFbMF0rbls0XSphWzFdK25bNV0pXTooYVsxXT0tYVsxXSxhKX0hZnVuY3Rpb24gdChlLHIpe2lmKGUuZWRnZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9W10sbj10W2UtMV0saT0wO2k8ZTsrK2kpci5wdXNoKFtuLG49dFtpXV0pO3JldHVybiByfShlLmZhY2UpLHIuZmFjZSl7dmFyIG49ZS5zaGFyZWQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpPXQubGVuZ3RoLGE9bnVsbCxvPTA7bzxpOysrbyl7cj10W29dO2Zvcih2YXIgcz1lLmxlbmd0aDstLXM+PTA7KWlmKG49ZVtzXSxyWzBdPT09blswXSYmclsxXT09PW5bMV0pe2lmKGEpcmV0dXJuW2Escl07YT1yfX19KGUuZmFjZSxyLmZhY2UpLGk9QmUobi5tYXAoci5wcm9qZWN0KSxuLm1hcChlLnByb2plY3QpKTtlLnRyYW5zZm9ybT1yLnRyYW5zZm9ybT9OZShyLnRyYW5zZm9ybSxpKTppO2Zvcih2YXIgYT1yLmVkZ2VzLG89MCxzPWEubGVuZ3RoO288czsrK28pSGUoblswXSxhW29dWzFdKSYmSGUoblsxXSxhW29dWzBdKSYmKGFbb109ZSksSGUoblswXSxhW29dWzBdKSYmSGUoblsxXSxhW29dWzFdKSYmKGFbb109ZSk7Zm9yKGE9ZS5lZGdlcyxvPTAscz1hLmxlbmd0aDtvPHM7KytvKUhlKG5bMF0sYVtvXVswXSkmJkhlKG5bMV0sYVtvXVsxXSkmJihhW29dPXIpLEhlKG5bMF0sYVtvXVsxXSkmJkhlKG5bMV0sYVtvXVswXSkmJihhW29dPXIpfWVsc2UgZS50cmFuc2Zvcm09ci50cmFuc2Zvcm07ZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbihyKXt0KHIsZSl9KSk7cmV0dXJuIGV9KHQse3RyYW5zZm9ybTpudWxsfSkscWUodCkmJihhLmludmVydD1mdW5jdGlvbihlLG4pe3ZhciBpPWZ1bmN0aW9uIHQoZSxuKXt2YXIgaT1lLnByb2plY3QuaW52ZXJ0LGE9ZS50cmFuc2Zvcm0sbz1uO2EmJihhPWZ1bmN0aW9uKHQpe3ZhciBlPTEvKHRbMF0qdFs0XS10WzFdKnRbM10pO3JldHVybltlKnRbNF0sLWUqdFsxXSxlKih0WzFdKnRbNV0tdFsyXSp0WzRdKSwtZSp0WzNdLGUqdFswXSxlKih0WzJdKnRbM10tdFswXSp0WzVdKV19KGEpLG89W2FbMF0qb1swXSthWzFdKm9bMV0rYVsyXSxhWzNdKm9bMF0rYVs0XSpvWzFdK2FbNV1dKTtpZihpJiZlPT09ZnVuY3Rpb24odCl7cmV0dXJuIHIodFswXSpNLHRbMV0qTSl9KHM9aShvKSkpcmV0dXJuIHM7Zm9yKHZhciBzLGw9ZS5jaGlsZHJlbixjPTAsdT1sJiZsLmxlbmd0aDtjPHU7KytjKWlmKHM9dChsW2NdLG4pKXJldHVybiBzfSh0LFtlLC1uXSk7cmV0dXJuIGkmJihpWzBdKj1NLGlbMV0qPU0saSl9KTt2YXIgbz1lLmdlb1Byb2plY3Rpb24oYSkscz1vLnN0cmVhbTtyZXR1cm4gby5zdHJlYW09ZnVuY3Rpb24ocil7dmFyIGk9by5yb3RhdGUoKSxhPXMociksbD0oby5yb3RhdGUoWzAsMF0pLHMocikpO3JldHVybiBvLnJvdGF0ZShpKSxhLnNwaGVyZT1mdW5jdGlvbigpe2wucG9seWdvblN0YXJ0KCksbC5saW5lU3RhcnQoKSxmdW5jdGlvbiB0KHIsaSxhKXt2YXIgbyxzLGw9aS5lZGdlcyxjPWwubGVuZ3RoLHU9e3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOmkuZmFjZX0sZj1pLmZhY2UuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gOTAhPT1uKHRbMV0pfSkpLGg9ZS5nZW9Cb3VuZHMoe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOmZ9KSxwPSExLGQ9LTEsbT1oWzFdWzBdLWhbMF1bMF0sZz0xODA9PT1tfHwzNjA9PT1tP1soaFswXVswXStoWzFdWzBdKS8yLChoWzBdWzFdK2hbMV1bMV0pLzJdOmUuZ2VvQ2VudHJvaWQodSk7aWYoYSlmb3IoOysrZDxjJiZsW2RdIT09YTspOysrZDtmb3IodmFyIHk9MDt5PGM7Kyt5KXM9bFsoeStkKSVjXSxBcnJheS5pc0FycmF5KHMpPyhwfHwoci5wb2ludCgobz1lLmdlb0ludGVycG9sYXRlKHNbMF0sZykodikpWzBdLG9bMV0pLHA9ITApLHIucG9pbnQoKG89ZS5nZW9JbnRlcnBvbGF0ZShzWzFdLGcpKHYpKVswXSxvWzFdKSk6KHA9ITEscyE9PWEmJnQocixzLGkpKX0obCx0KSxsLmxpbmVFbmQoKSxsLnBvbHlnb25FbmQoKX0sYX0sby5hbmdsZShudWxsPT1pPy0zMDppKkEpfWZ1bmN0aW9uIEhlKHQsZSl7cmV0dXJuIHQmJmUmJnRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXX1mdW5jdGlvbiBxZSh0KXtyZXR1cm4gdC5wcm9qZWN0LmludmVydHx8dC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5zb21lKHFlKX1SZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtlPjEuNzkwODU3MTgzP2U9MS43OTA4NTcxODM6ZTwtMS43OTA4NTcxODMmJihlPS0xLjc5MDg1NzE4Myk7dmFyIHIsaT1lO2Rve3ZhciBhPWkqaTtpLT1yPShpKigxLjAxNDgrYSphKiguMjMxODUrYSooLjAyNDA2KmEtLjE0NDk5KSkpLWUpLygxLjAxNDgrYSphKig1Ki4yMzE4NSthKiguMjE2NTQqYS0xLjAxNDkzKSkpfXdoaWxlKG4ocik+dik7cmV0dXJuW3QsaV19LEZlLmludmVydD1mdW5jdGlvbih0LGUpe2lmKG4oZSk8dilyZXR1cm5bdCwwXTt2YXIgcixpPXQqdCtlKmUsYT0uNSplLHM9MTA7ZG97dmFyIGw9ZyhhKSxjPTEvbyhhKSx1PWktMiplKmErYSphO2EtPXI9KGwqdSsyKihhLWUpKS8oMit1KmMqYysyKihhLWUpKmwpfXdoaWxlKG4ocik+diYmLS1zPjApO3JldHVybiBsPWcoYSksWyhuKGUpPG4oYSsxL2wpP1ModCpsKTpkKGUpKmQodCkqKEUobih0KmwpKSt4KSkvbShhKSxhXX07dmFyIEdlPVtbMCw5MF0sWy05MCwwXSxbMCwwXSxbOTAsMF0sWzE4MCwwXSxbMCwtOTBdXSxZZT1bWzAsMiwxXSxbMCwzLDJdLFs1LDEsMl0sWzUsMiwzXSxbMCwxLDRdLFswLDQsM10sWzUsNCwxXSxbNSwzLDRdXS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIEdlW3RdfSkpfSkpO3ZhciBXZT0yL0woMyk7ZnVuY3Rpb24gWGUodCxlKXt2YXIgcj1sdCh0LGUpO3JldHVybltyWzBdKldlLHJbMV1dfWZ1bmN0aW9uIFplKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aCxpPTA7cjxuOysrcilpKz10W3JdKmVbcl07cmV0dXJuIGl9ZnVuY3Rpb24gSmUodCl7cmV0dXJuW2EodFsxXSx0WzBdKSpBLFModSgtMSxmKDEsdFsyXSkpKSpBXX1mdW5jdGlvbiBLZSh0KXt2YXIgZT10WzBdKk0scj10WzFdKk0sbj1vKHIpO3JldHVybltuKm8oZSksbiptKGUpLG0ocildfWZ1bmN0aW9uIFFlKCl7fWZ1bmN0aW9uICRlKHQsZSl7cmV0dXJue3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczp0LmZlYXR1cmVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRyKHQsZSl9KSl9fWZ1bmN0aW9uIHRyKHQsZSl7cmV0dXJue3R5cGU6IkZlYXR1cmUiLGlkOnQuaWQscHJvcGVydGllczp0LnByb3BlcnRpZXMsZ2VvbWV0cnk6ZXIodC5nZW9tZXRyeSxlKX19ZnVuY3Rpb24gZXIodCxyKXtpZighdClyZXR1cm4gbnVsbDtpZigiR2VvbWV0cnlDb2xsZWN0aW9uIj09PXQudHlwZSlyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm57dHlwZToiR2VvbWV0cnlDb2xsZWN0aW9uIixnZW9tZXRyaWVzOnQuZ2VvbWV0cmllcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlcih0LGUpfSkpfX0odCxyKTt2YXIgbjtzd2l0Y2godC50eXBlKXtjYXNlIlBvaW50IjpjYXNlIk11bHRpUG9pbnQiOm49aXI7YnJlYWs7Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIk11bHRpTGluZVN0cmluZyI6bj1hcjticmVhaztjYXNlIlBvbHlnb24iOmNhc2UiTXVsdGlQb2x5Z29uIjpjYXNlIlNwaGVyZSI6bj1vcjticmVhaztkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBlLmdlb1N0cmVhbSh0LHIobikpLG4ucmVzdWx0KCl9WGUuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGx0LmludmVydCh0L1dlLGUpfTt2YXIgcnI9W10sbnI9W10saXI9e3BvaW50OmZ1bmN0aW9uKHQsZSl7cnIucHVzaChbdCxlXSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PXJyLmxlbmd0aD9yci5sZW5ndGg8Mj97dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOnJyWzBdfTp7dHlwZToiTXVsdGlQb2ludCIsY29vcmRpbmF0ZXM6cnJ9Om51bGw7cmV0dXJuIHJyPVtdLHR9fSxhcj17bGluZVN0YXJ0OlFlLHBvaW50OmZ1bmN0aW9uKHQsZSl7cnIucHVzaChbdCxlXSl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtyci5sZW5ndGgmJihuci5wdXNoKHJyKSxycj1bXSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PW5yLmxlbmd0aD9uci5sZW5ndGg8Mj97dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6bnJbMF19Ont0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOm5yfTpudWxsO3JldHVybiBucj1bXSx0fX0sb3I9e3BvbHlnb25TdGFydDpRZSxsaW5lU3RhcnQ6UWUscG9pbnQ6ZnVuY3Rpb24odCxlKXtyci5wdXNoKFt0LGVdKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXJyLmxlbmd0aDtpZih0KXtkb3tyci5wdXNoKHJyWzBdLnNsaWNlKCkpfXdoaWxlKCsrdDw0KTtuci5wdXNoKHJyKSxycj1bXX19LHBvbHlnb25FbmQ6UWUscmVzdWx0OmZ1bmN0aW9uKCl7aWYoIW5yLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgdD1bXSxlPVtdO3JldHVybiBuci5mb3JFYWNoKChmdW5jdGlvbihyKXshZnVuY3Rpb24odCl7aWYoKGU9dC5sZW5ndGgpPDQpcmV0dXJuITE7Zm9yKHZhciBlLHI9MCxuPXRbZS0xXVsxXSp0WzBdWzBdLXRbZS0xXVswXSp0WzBdWzFdOysrcjxlOyluKz10W3ItMV1bMV0qdFtyXVswXS10W3ItMV1bMF0qdFtyXVsxXTtyZXR1cm4gbjw9MH0ocik/ZS5wdXNoKHIpOnQucHVzaChbcl0pfSkpLGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZVswXTt0LnNvbWUoKGZ1bmN0aW9uKHQpe2lmKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWVbMF0sbj1lWzFdLGk9ITEsYT0wLG89dC5sZW5ndGgscz1vLTE7YTxvO3M9YSsrKXt2YXIgbD10W2FdLGM9bFswXSx1PWxbMV0sZj10W3NdLGg9ZlswXSxwPWZbMV07dT5uXnA+biYmcjwoaC1jKSoobi11KS8ocC11KStjJiYoaT0haSl9cmV0dXJuIGl9KHRbMF0scikpcmV0dXJuIHQucHVzaChlKSwhMH0pKXx8dC5wdXNoKFtlXSl9KSksbnI9W10sdC5sZW5ndGg/dC5sZW5ndGg+MT97dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczp0fTp7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6dFswXX06bnVsbH19O2Z1bmN0aW9uIHNyKHQpe3ZhciByPXQoeCwwKVswXS10KC14LDApWzBdO2Z1bmN0aW9uIGkoZSxpKXt2YXIgYT1uKGUpPHgsbz10KGE/ZTplPjA/ZS15OmUreSxpKSxzPShvWzBdLW9bMV0pKl8sbD0ob1swXStvWzFdKSpfO2lmKGEpcmV0dXJuW3MsbF07dmFyIGM9cipfLHU9cz4wXmw+MD8tMToxO3JldHVyblt1KnMtZChsKSpjLHUqbC1kKHMpKmNdfXJldHVybiB0LmludmVydCYmKGkuaW52ZXJ0PWZ1bmN0aW9uKGUsaSl7dmFyIGE9KGUraSkqXyxvPShpLWUpKl8scz1uKGEpPC41KnImJm4obyk8LjUqcjtpZighcyl7dmFyIGw9cipfLGM9YT4wXm8+MD8tMToxLHU9LWMqZSsobz4wPzE6LTEpKmwsZj0tYyppKyhhPjA/MTotMSkqbDthPSgtdS1mKSpfLG89KHUtZikqX312YXIgaD10LmludmVydChhLG8pO3JldHVybiBzfHwoaFswXSs9YT4wP3k6LXkpLGh9KSxlLmdlb1Byb2plY3Rpb24oaSkucm90YXRlKFstOTAsLTkwLDQ1XSkuY2xpcEFuZ2xlKDE3OS45OTkpfWZ1bmN0aW9uIGxyKCl7cmV0dXJuIHNyKFV0KS5zY2FsZSgxMTEuNDgpfWZ1bmN0aW9uIGNyKHQpe3ZhciBlPW0odCk7ZnVuY3Rpb24gcihyLG4pe3ZhciBhPWU/ZyhyKmUvMikvZTpyLzI7aWYoIW4pcmV0dXJuWzIqYSwtdF07dmFyIHM9MippKGEqbShuKSksbD0xL2cobik7cmV0dXJuW20ocykqbCxuKygxLW8ocykpKmwtdF19cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHIsYSl7aWYobihhKz10KTx2KXJldHVybltlPzIqaShlKnIvMikvZTpyLDBdO3ZhciBzLGw9cipyK2EqYSxjPTAsdT0xMDtkb3t2YXIgZj1nKGMpLGg9MS9vKGMpLHA9bC0yKmEqYytjKmM7Yy09cz0oZipwKzIqKGMtYSkpLygyK3AqaCpoKzIqKGMtYSkqZil9d2hpbGUobihzKT52JiYtLXU+MCk7dmFyIGQ9ciooZj1nKGMpKSx4PWcobihhKTxuKGMrMS9mKT8uNSpTKGQpOi41KkUoZCkreS80KS9tKGMpO3JldHVybltlPzIqaShlKngpL2U6Mip4LGNdfSxyfXZhciB1cj1bWy45OTg2LC0uMDYyXSxbMSwwXSxbLjk5ODYsLjA2Ml0sWy45OTU0LC4xMjRdLFsuOTksLjE4Nl0sWy45ODIyLC4yNDhdLFsuOTczLC4zMV0sWy45NiwuMzcyXSxbLjk0MjcsLjQzNF0sWy45MjE2LC40OTU4XSxbLjg5NjIsLjU1NzFdLFsuODY3OSwuNjE3Nl0sWy44MzUsLjY3NjldLFsuNzk4NiwuNzM0Nl0sWy43NTk3LC43OTAzXSxbLjcxODYsLjg0MzVdLFsuNjczMiwuODkzNl0sWy42MjEzLC45Mzk0XSxbLjU3MjIsLjk3NjFdLFsuNTMyMiwxXV07ZnVuY3Rpb24gZnIodCxlKXt2YXIgcixpPWYoMTgsMzYqbihlKS95KSxhPWwoaSksbz1pLWEscz0ocj11clthXSlbMF0sYz1yWzFdLHU9KHI9dXJbKythXSlbMF0saD1yWzFdLHA9KHI9dXJbZigxOSwrK2EpXSlbMF0sZD1yWzFdO3JldHVyblt0Kih1K28qKHAtcykvMitvKm8qKHAtMip1K3MpLzIpLChlPjA/eDoteCkqKGgrbyooZC1jKS8yK28qbyooZC0yKmgrYykvMildfWZ1bmN0aW9uIGhyKHQsZSl7dmFyIHI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3ZhciBuPW8ociksaT0odC0xKS8odC1uKm8oZSkpO3JldHVybltpKm4qbShlKSxpKm0ocildfXJldHVybiBlLmludmVydD1mdW5jdGlvbihlLHIpe3ZhciBuPWUqZStyKnIsaT1MKG4pLG89KHQtTCgxLW4qKHQrMSkvKHQtMSkpKS8oKHQtMSkvaStpLyh0LTEpKTtyZXR1cm5bYShlKm8saSpMKDEtbypvKSksaT9TKHIqby9pKTowXX0sZX0odCk7aWYoIWUpcmV0dXJuIHI7dmFyIG49byhlKSxpPW0oZSk7ZnVuY3Rpb24gcyhlLGEpe3ZhciBvPXIoZSxhKSxzPW9bMV0sbD1zKmkvKHQtMSkrbjtyZXR1cm5bb1swXSpuL2wscy9sXX1yZXR1cm4gcy5pbnZlcnQ9ZnVuY3Rpb24oZSxhKXt2YXIgbz0odC0xKS8odC0xLWEqaSk7cmV0dXJuIHIuaW52ZXJ0KG8qZSxvKmEqbil9LHN9dXIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dFsxXSo9MS4wMTQ0fSkpLGZyLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWUveCxpPTkwKnIsYT1mKDE4LG4oaS81KSksbz11KDAsbChhKSk7ZG97dmFyIHM9dXJbb11bMV0sYz11cltvKzFdWzFdLGg9dXJbZigxOSxvKzIpXVsxXSxwPWgtcyxkPWgtMipjK3MsbT0yKihuKHIpLWMpL3AsZz1kL3Asdj1tKigxLWcqbSooMS0yKmcqbSkpO2lmKHY+PTB8fDE9PT1vKXtpPShlPj0wPzU6LTUpKih2K2EpO3ZhciB5LGI9NTA7ZG97dj0oYT1mKDE4LG4oaSkvNSkpLShvPWwoYSkpLHM9dXJbb11bMV0sYz11cltvKzFdWzFdLGg9dXJbZigxOSxvKzIpXVsxXSxpLT0oeT0oZT49MD94Oi14KSooYyt2KihoLXMpLzIrdip2KihoLTIqYytzKS8yKS1lKSpBfXdoaWxlKG4oeSk+MWUtMTImJi0tYj4wKTticmVha319d2hpbGUoLS1vPj0wKTt2YXIgXz11cltvXVswXSx3PXVyW28rMV1bMF0sVD11cltmKDE5LG8rMildWzBdO3JldHVyblt0Lyh3K3YqKFQtXykvMit2KnYqKFQtMip3K18pLzIpLGkqTV19O3ZhciBwcj0tMTc5Ljk5OTksZHI9MTc5Ljk5OTksbXI9LTg5Ljk5OTk7ZnVuY3Rpb24gZ3IodCl7cmV0dXJuIHQubGVuZ3RoPjB9ZnVuY3Rpb24gdnIodCl7cmV0dXJuLTkwPT09dHx8OTA9PT10P1swLHRdOlstMTgwLChlPXQsTWF0aC5mbG9vcigxZTQqZSkvMWU0KV07dmFyIGV9ZnVuY3Rpb24geXIodCl7dmFyIGU9dFswXSxyPXRbMV0sbj0hMTtyZXR1cm4gZTw9cHI/KGU9LTE4MCxuPSEwKTplPj1kciYmKGU9MTgwLG49ITApLHI8PW1yPyhyPS05MCxuPSEwKTpyPj04OS45OTk5JiYocj05MCxuPSEwKSxuP1tlLHJdOnR9ZnVuY3Rpb24geHIodCl7cmV0dXJuIHQubWFwKHlyKX1mdW5jdGlvbiBicih0LGUscil7Zm9yKHZhciBuPTAsaT10Lmxlbmd0aDtuPGk7KytuKXt2YXIgYT10W25dLnNsaWNlKCk7ci5wdXNoKHtpbmRleDotMSxwb2x5Z29uOmUscmluZzphfSk7Zm9yKHZhciBvPTAscz1hLmxlbmd0aDtvPHM7KytvKXt2YXIgbD1hW29dLGM9bFswXSx1PWxbMV07aWYoYzw9cHJ8fGM+PWRyfHx1PD1tcnx8dT49ODkuOTk5OSl7YVtvXT15cihsKTtmb3IodmFyIGY9bysxO2Y8czsrK2Ype3ZhciBoPWFbZl0scD1oWzBdLGQ9aFsxXTtpZihwPnByJiZwPGRyJiZkPm1yJiZkPDg5Ljk5OTkpYnJlYWt9aWYoZj09PW8rMSljb250aW51ZTtpZihvKXt2YXIgbT17aW5kZXg6LTEscG9seWdvbjplLHJpbmc6YS5zbGljZSgwLG8rMSl9O20ucmluZ1ttLnJpbmcubGVuZ3RoLTFdPXZyKHUpLHJbci5sZW5ndGgtMV09bX1lbHNlIHIucG9wKCk7aWYoZj49cylicmVhaztyLnB1c2goe2luZGV4Oi0xLHBvbHlnb246ZSxyaW5nOmE9YS5zbGljZShmLTEpfSksYVswXT12cihhWzBdWzFdKSxvPS0xLHM9YS5sZW5ndGh9fX19ZnVuY3Rpb24gX3IodCl7dmFyIGUscixuLGksYSxvLHM9dC5sZW5ndGgsbD17fSxjPXt9O2ZvcihlPTA7ZTxzOysrZSluPShyPXRbZV0pLnJpbmdbMF0sYT1yLnJpbmdbci5yaW5nLmxlbmd0aC0xXSxuWzBdIT09YVswXXx8blsxXSE9PWFbMV0/KHIuaW5kZXg9ZSxsW25dPWNbYV09cik6KHIucG9seWdvbi5wdXNoKHIucmluZyksdFtlXT1udWxsKTtmb3IoZT0wO2U8czsrK2UpaWYocj10W2VdKXtpZihuPXIucmluZ1swXSxhPXIucmluZ1tyLnJpbmcubGVuZ3RoLTFdLGk9Y1tuXSxvPWxbYV0sZGVsZXRlIGxbbl0sZGVsZXRlIGNbYV0sblswXT09PWFbMF0mJm5bMV09PT1hWzFdKXtyLnBvbHlnb24ucHVzaChyLnJpbmcpO2NvbnRpbnVlfWk/KGRlbGV0ZSBjW25dLGRlbGV0ZSBsW2kucmluZ1swXV0saS5yaW5nLnBvcCgpLHRbaS5pbmRleF09bnVsbCxyPXtpbmRleDotMSxwb2x5Z29uOmkucG9seWdvbixyaW5nOmkucmluZy5jb25jYXQoci5yaW5nKX0saT09PW8/ci5wb2x5Z29uLnB1c2goci5yaW5nKTooci5pbmRleD1zKyssdC5wdXNoKGxbci5yaW5nWzBdXT1jW3IucmluZ1tyLnJpbmcubGVuZ3RoLTFdXT1yKSkpOm8/KGRlbGV0ZSBsW2FdLGRlbGV0ZSBjW28ucmluZ1tvLnJpbmcubGVuZ3RoLTFdXSxyLnJpbmcucG9wKCkscj17aW5kZXg6cysrLHBvbHlnb246by5wb2x5Z29uLHJpbmc6ci5yaW5nLmNvbmNhdChvLnJpbmcpfSx0W28uaW5kZXhdPW51bGwsdC5wdXNoKGxbci5yaW5nWzBdXT1jW3IucmluZ1tyLnJpbmcubGVuZ3RoLTFdXT1yKSk6KHIucmluZy5wdXNoKHIucmluZ1swXSksci5wb2x5Z29uLnB1c2goci5yaW5nKSl9fWZ1bmN0aW9uIHdyKHQpe3ZhciBlPXt0eXBlOiJGZWF0dXJlIixnZW9tZXRyeTpUcih0Lmdlb21ldHJ5KX07cmV0dXJuIG51bGwhPXQuaWQmJihlLmlkPXQuaWQpLG51bGwhPXQuYmJveCYmKGUuYmJveD10LmJib3gpLG51bGwhPXQucHJvcGVydGllcyYmKGUucHJvcGVydGllcz10LnByb3BlcnRpZXMpLGV9ZnVuY3Rpb24gVHIodCl7aWYobnVsbD09dClyZXR1cm4gdDt2YXIgZSxyLG4saTtzd2l0Y2godC50eXBlKXtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6ZT17dHlwZToiR2VvbWV0cnlDb2xsZWN0aW9uIixnZW9tZXRyaWVzOnQuZ2VvbWV0cmllcy5tYXAoVHIpfTticmVhaztjYXNlIlBvaW50IjplPXt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6eXIodC5jb29yZGluYXRlcyl9O2JyZWFrO2Nhc2UiTXVsdGlQb2ludCI6Y2FzZSJMaW5lU3RyaW5nIjplPXt0eXBlOnQudHlwZSxjb29yZGluYXRlczp4cih0LmNvb3JkaW5hdGVzKX07YnJlYWs7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOmU9e3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dC5jb29yZGluYXRlcy5tYXAoeHIpfTticmVhaztjYXNlIlBvbHlnb24iOnZhciBhPVtdO2JyKHQuY29vcmRpbmF0ZXMsYSxyPVtdKSxfcihyKSxlPXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczphfTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6cj1bXSxuPS0xLGk9dC5jb29yZGluYXRlcy5sZW5ndGg7Zm9yKHZhciBvPW5ldyBBcnJheShpKTsrK248aTspYnIodC5jb29yZGluYXRlc1tuXSxvW25dPVtdLHIpO19yKHIpLGU9e3R5cGU6Ik11bHRpUG9seWdvbiIsY29vcmRpbmF0ZXM6by5maWx0ZXIoZ3IpfTticmVhaztkZWZhdWx0OnJldHVybiB0fXJldHVybiBudWxsIT10LmJib3gmJihlLmJib3g9dC5iYm94KSxlfWZ1bmN0aW9uIGtyKHQsZSl7dmFyIHI9ZyhlLzIpLG49bShiKnIpO3JldHVyblt0KiguNzQ0ODItLjM0NTg4Km4qbiksMS43MDcxMSpyXX1mdW5jdGlvbiBBcih0LHIsbil7dmFyIGk9ZS5nZW9JbnRlcnBvbGF0ZShyLG4pLGE9aSguNSksbz1lLmdlb1JvdGF0aW9uKFstYVswXSwtYVsxXV0pKHIpLHM9aS5kaXN0YW5jZS8yLGw9LVMobShvWzFdKk0pL20ocykpLGM9Wy1hWzBdLC1hWzFdLC0ob1swXT4wP3ktbDpsKSpBXSx1PWUuZ2VvUHJvamVjdGlvbih0KHMpKS5yb3RhdGUoYyksZj1lLmdlb1JvdGF0aW9uKGMpLGg9dS5jZW50ZXI7cmV0dXJuIGRlbGV0ZSB1LnJvdGF0ZSx1LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9oKGYodCkpOmYuaW52ZXJ0KGgoKSl9LHUuY2xpcEFuZ2xlKDkwKX1mdW5jdGlvbiBNcih0KXt2YXIgcj1vKHQpO2Z1bmN0aW9uIG4odCxuKXt2YXIgaT1lLmdlb0dub21vbmljUmF3KHQsbik7cmV0dXJuIGlbMF0qPXIsaX1yZXR1cm4gbi5pbnZlcnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5nZW9Hbm9tb25pY1Jhdy5pbnZlcnQodC9yLG4pfSxufWZ1bmN0aW9uIFNyKHQsZSl7cmV0dXJuIEFyKE1yLHQsZSl9ZnVuY3Rpb24gRXIodCl7aWYoISh0Kj0yKSlyZXR1cm4gZS5nZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdzt2YXIgcj0tdC8yLG49LXIsaT10KnQscz1nKG4pLGw9LjUvbShuKTtmdW5jdGlvbiBjKGUsYSl7dmFyIHM9RShvKGEpKm8oZS1yKSksbD1FKG8oYSkqbyhlLW4pKTtyZXR1cm5bKChzKj1zKS0obCo9bCkpLygyKnQpLChhPDA/LTE6MSkqTCg0KmkqbC0oaS1zK2wpKihpLXMrbCkpLygyKnQpXX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgaSxjLHU9ZSplLGY9byhMKHUrKGk9dCtyKSppKSksaD1vKEwodSsoaT10K24pKmkpKTtyZXR1cm5bYShjPWYtaCxpPShmK2gpKnMpLChlPDA/LTE6MSkqRShMKGkqaStjKmMpKmwpXX0sY31mdW5jdGlvbiBMcih0LGUpe3JldHVybiBBcihFcix0LGUpfWZ1bmN0aW9uIENyKHQsZSl7aWYobihlKTx2KXJldHVyblt0LDBdO3ZhciByPW4oZS94KSxpPVMocik7aWYobih0KTx2fHxuKG4oZSkteCk8dilyZXR1cm5bMCxkKGUpKnkqZyhpLzIpXTt2YXIgYT1vKGkpLHM9bih5L3QtdC95KS8yLGw9cypzLGM9YS8ocithLTEpLHU9YyooMi9yLTEpLGY9dSp1LGg9ZitsLHA9Yy1mLG09bCtjO3JldHVybltkKHQpKnkqKHMqcCtMKGwqcCpwLWgqKGMqYy1mKSkpL2gsZChlKSp5Kih1Km0tcypMKChsKzEpKmgtbSptKSkvaF19ZnVuY3Rpb24gUHIodCxlKXtpZihuKGUpPHYpcmV0dXJuW3QsMF07dmFyIHI9bihlL3gpLGk9UyhyKTtpZihuKHQpPHZ8fG4obihlKS14KTx2KXJldHVyblswLGQoZSkqeSpnKGkvMildO3ZhciBhPW8oaSkscz1uKHkvdC10L3kpLzIsbD1zKnMsYz1hKihMKDErbCktcyphKS8oMStsKnIqcik7cmV0dXJuW2QodCkqeSpjLGQoZSkqeSpMKDEtYyooMipzK2MpKV19ZnVuY3Rpb24gSXIodCxlKXtpZihuKGUpPHYpcmV0dXJuW3QsMF07dmFyIHI9ZS94LGk9UyhyKTtpZihuKHQpPHZ8fG4obihlKS14KTx2KXJldHVyblswLHkqZyhpLzIpXTt2YXIgYT0oeS90LXQveSkvMixzPXIvKDErbyhpKSk7cmV0dXJuW3kqKGQodCkqTChhKmErMS1zKnMpLWEpLHkqc119ZnVuY3Rpb24gT3IodCxlKXtpZighZSlyZXR1cm5bdCwwXTt2YXIgcj1uKGUpO2lmKCF0fHxyPT09eClyZXR1cm5bMCxlXTt2YXIgaT1yL3gsYT1pKmksbz0oOCppLWEqKGErMiktNSkvKDIqYSooaS0xKSkscz1vKm8sbD1pKm8sYz1hK3MrMipsLHU9aSszKm8sZj10L3gsaD1mKzEvZixwPWQobih0KS14KSpMKGgqaC00KSxtPXAqcCxnPShwKihjK3MtMSkrMipMKGMqKGErcyptLTEpKygxLWEpKihhKih1KnUrNCpzKSsxMipsKnMrNCpzKnMpKSkvKDQqYyttKTtyZXR1cm5bZCh0KSp4KmcsZChlKSp4KkwoMStwKm4oZyktZypnKV19ZnVuY3Rpb24genIodCxlLHIsbil7dmFyIGk9eS8zO3Q9dSh0LHYpLGU9dShlLHYpLHQ9Zih0LHgpLGU9ZihlLHktdikscj11KHIsMCkscj1mKHIsMTAwLXYpO3ZhciBzPShuPXUobix2KSkvMTAwLGw9RSgoci8xMDArMSkqbyhpKSkvaSxjPW0odCkvbShsKngpLGg9ZS95LHA9TChzKm0odC8yKS9tKGUvMikpO3JldHVybiBmdW5jdGlvbih0LGUscixuLGkpe2Z1bmN0aW9uIHMoYSxzKXt2YXIgbD1yKm0obipzKSxjPUwoMS1sKmwpLHU9TCgyLygxK2MqbyhhKj1pKSkpO3JldHVyblt0KmMqdSptKGEpLGUqbCp1XX1yZXR1cm4gcy5pbnZlcnQ9ZnVuY3Rpb24obyxzKXt2YXIgbD1vL3QsYz1zL2UsdT1MKGwqbCtjKmMpLGY9MipTKHUvMik7cmV0dXJuW2EobypnKGYpLHQqdSkvaSx1JiZTKHMqbShmKS8oZSpyKnUpKS9uXX0sc30ocC9MKGgqYypsKSwxLyhwKkwoaCpjKmwpKSxjLGwsaCl9ZnVuY3Rpb24gRHIoKXt2YXIgdD02NSpNLHI9NjAqTSxuPTIwLGk9MjAwLGE9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcih6ciksbz1hKHQscixuLGkpO3JldHVybiBvLnBvbGVsaW5lPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2EodD0rZSpNLHIsbixpKTp0KkF9LG8ucGFyYWxsZWxzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2EodCxyPStlKk0sbixpKTpyKkF9LG8uaW5mbGF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2EodCxyLG49K2UsaSk6bn0sby5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9hKHQscixuLGk9K2UpOml9LG8uc2NhbGUoMTYzLjc3NSl9a3IuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS8xLjcwNzExLG49bShiKnIpO3JldHVyblt0LyguNzQ0ODItLjM0NTg4Km4qbiksMippKHIpXX0sQ3IuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7aWYobihlKTx2KXJldHVyblt0LDBdO2lmKG4odCk8dilyZXR1cm5bMCx4Km0oMippKGUveSkpXTt2YXIgcj0odC89eSkqdCxhPShlLz15KSplLHM9cithLGw9cypzLGM9LW4oZSkqKDErcyksdT1jLTIqYStyLGY9LTIqYysxKzIqYStsLGg9YS9mKygyKnUqdSp1LyhmKmYqZiktOSpjKnUvKGYqZikpLzI3LHA9KGMtdSp1LygzKmYpKS9mLGc9MipMKC1wLzMpLGI9RSgzKmgvKHAqZykpLzM7cmV0dXJuW3kqKHMtMStMKDErMiooci1hKStsKSkvKDIqdCksZChlKSp5KigtZypvKGIreS8zKS11LygzKmYpKV19LFByLmludmVydD1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVyblswLHgqbSgyKmkoZS95KSldO3ZhciByPW4odC95KSxvPSgxLXIqci0oZS89eSkqZSkvKDIqcikscz1MKG8qbysxKTtyZXR1cm5bZCh0KSp5KihzLW8pLGQoZSkqeCptKDIqYShMKCgxLTIqbypyKSoobytzKS1yKSxMKHMrbytyKSkpXX0sSXIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuW3QsMF07dmFyIHI9ZS95LG49KHkqeSooMS1yKnIpLXQqdCkvKDIqeSp0KTtyZXR1cm5bdD95KihkKHQpKkwobipuKzEpLW4pOjAseCptKDIqaShyKSldfSxPci5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcjtpZighdHx8IWUpcmV0dXJuW3QsZV07ZS89eTt2YXIgaT1kKHQpKnQveCxhPShpKmktMSs0KmUqZSkvbihpKSxvPWEqYSxzPTIqZSxsPTUwO2Rve3ZhciBjPXMqcyx1PSg4KnMtYyooYysyKS01KS8oMipjKihzLTEpKSxmPSgzKnMtYypzLTEwKS8oMipjKnMpLGg9dSp1LHA9cyp1LG09cyt1LGc9bSptLGI9cyszKnUsXz0tMiptKig0KnAqaCsoMS00KmMrMypjKmMpKigxK2YpK2gqKDE0KmMtNi1vKyg4KmMtOC0yKm8pKmYpK3AqKDEyKmMtOCsoMTAqYy0xMC1vKSpmKSksdz1MKGcqKGMraCpvLTEpKygxLWMpKihjKihiKmIrNCpoKStoKigxMipwKzQqaCkpKTtzLT1yPShhKihnK2gtMSkrMip3LWkqKDQqZytvKSkvKGEqKDIqdSpmKzIqbSooMStmKSkrXy93LTgqbSooYSooLTEraCtnKSsyKncpKigxK2YpLyhvKzQqZykpfXdoaWxlKHI+diYmLS1sPjApO3JldHVybltkKHQpKihMKGEqYSs0KSthKSp5LzQseCpzXX07dmFyIFJyPTQqeSszKkwoMyksRnI9MipMKDIqeSpMKDMpL1JyKSxCcj1ZKEZyKkwoMykveSxGcixSci82KTtmdW5jdGlvbiBOcih0LGUpe3JldHVyblt0KkwoMS0zKmUqZS8oeSp5KSksZV19ZnVuY3Rpb24ganIodCxlKXt2YXIgcj1vKGUpLG49byh0KSpyLGk9MS1uLHM9byh0PWEobSh0KSpyLC1tKGUpKSksbD1tKHQpO3JldHVybltsKihyPUwoMS1uKm4pKS1zKmksLXMqci1sKmldfWZ1bmN0aW9uIFVyKHQsZSl7dmFyIHI9Tyh0LGUpO3JldHVyblsoclswXSt0L3gpLzIsKHJbMV0rZSkvMl19TnIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QvTCgxLTMqZSplLyh5KnkpKSxlXX0sanIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQqdCtlKmUpLy0yLG49TCgtciooMityKSksaT1lKnIrdCpuLG89dCpyLWUqbixzPUwobypvK2kqaSk7cmV0dXJuW2EobippLHMqKDErcikpLHM/LVMobipvL3MpOjBdfSxVci5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10LGk9ZSxhPTI1O2Rve3ZhciBzLGw9byhpKSxjPW0oaSksdT1tKDIqaSksZj1jKmMsaD1sKmwscD1tKHIpLGQ9byhyLzIpLGc9bShyLzIpLHk9ZypnLGI9MS1oKmQqZCxfPWI/RShsKmQpKkwocz0xL2IpOnM9MCx3PS41KigyKl8qbCpnK3IveCktdCxUPS41KihfKmMraSktZSxrPS41KnMqKGgqeStfKmwqZCpmKSsuNS94LEE9cyoocCp1LzQtXypjKmcpLE09LjEyNSpzKih1KmctXypjKmgqcCksUz0uNSpzKihmKmQrXyp5KmwpKy41LEM9QSpNLVMqayxQPShUKkEtdypTKS9DLEk9KHcqTS1UKmspL0M7ci09UCxpLT1JfXdoaWxlKChuKFApPnZ8fG4oSSk+dikmJi0tYT4wKTtyZXR1cm5bcixpXX0sdC5nZW9OYXR1cmFsRWFydGg9ZS5nZW9OYXR1cmFsRWFydGgxLHQuZ2VvTmF0dXJhbEVhcnRoUmF3PWUuZ2VvTmF0dXJhbEVhcnRoMVJhdyx0Lmdlb0Fpcnk9ZnVuY3Rpb24oKXt2YXIgdD14LHI9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihJKSxuPXIodCk7cmV0dXJuIG4ucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3IodD1lKk0pOnQqQX0sbi5zY2FsZSgxNzkuOTc2KS5jbGlwQW5nbGUoMTQ3KX0sdC5nZW9BaXJ5UmF3PUksdC5nZW9BaXRvZmY9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKE8pLnNjYWxlKDE1Mi42Myl9LHQuZ2VvQWl0b2ZmUmF3PU8sdC5nZW9Bcm1hZGlsbG89ZnVuY3Rpb24oKXt2YXIgdD0yMCpNLHI9dD49MD8xOi0xLG49ZyhyKnQpLGk9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcih6KSxzPWkodCksbD1zLnN0cmVhbTtyZXR1cm4gcy5wYXJhbGxlbD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1nKChyPSh0PWUqTSk+PTA/MTotMSkqdCksaSh0KSk6dCpBfSxzLnN0cmVhbT1mdW5jdGlvbihlKXt2YXIgaT1zLnJvdGF0ZSgpLGM9bChlKSx1PShzLnJvdGF0ZShbMCwwXSksbChlKSksZj1zLnByZWNpc2lvbigpO3JldHVybiBzLnJvdGF0ZShpKSxjLnNwaGVyZT1mdW5jdGlvbigpe3UucG9seWdvblN0YXJ0KCksdS5saW5lU3RhcnQoKTtmb3IodmFyIGU9LTE4MCpyO3IqZTwxODA7ZSs9OTAqcil1LnBvaW50KGUsOTAqcik7aWYodClmb3IoO3IqKGUtPTMqcipmKT49LTE4MDspdS5wb2ludChlLHIqLWEobyhlKk0vMiksbikqQSk7dS5saW5lRW5kKCksdS5wb2x5Z29uRW5kKCl9LGN9LHMuc2NhbGUoMjE4LjY5NSkuY2VudGVyKFswLDI4LjA5NzRdKX0sdC5nZW9Bcm1hZGlsbG9SYXc9eix0Lmdlb0F1Z3VzdD1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oRCkuc2NhbGUoNjYuMTYwMyl9LHQuZ2VvQXVndXN0UmF3PUQsdC5nZW9CYWtlcj1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oQikuc2NhbGUoMTEyLjMxNCl9LHQuZ2VvQmFrZXJSYXc9Qix0Lmdlb0JlcmdoYXVzPWZ1bmN0aW9uKCl7dmFyIHQ9NSxyPWUuZ2VvUHJvamVjdGlvbk11dGF0b3IoTiksbj1yKHQpLGk9bi5zdHJlYW0scz0tbyguMDEqTSksbD1tKC4wMSpNKTtyZXR1cm4gbi5sb2Jlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9yKHQ9K2UpOnR9LG4uc3RyZWFtPWZ1bmN0aW9uKGUpe3ZhciByPW4ucm90YXRlKCksYz1pKGUpLHU9KG4ucm90YXRlKFswLDBdKSxpKGUpKTtyZXR1cm4gbi5yb3RhdGUociksYy5zcGhlcmU9ZnVuY3Rpb24oKXt1LnBvbHlnb25TdGFydCgpLHUubGluZVN0YXJ0KCk7Zm9yKHZhciBlPTAscj0zNjAvdCxuPTIqeS90LGk9OTAtMTgwL3QsYz14O2U8dDsrK2UsaS09cixjLT1uKXUucG9pbnQoYShsKm8oYykscykqQSxTKGwqbShjKSkqQSksaTwtOTA/KHUucG9pbnQoLTkwLC0xODAtaS0uMDEpLHUucG9pbnQoLTkwLC0xODAtaSsuMDEpKToodS5wb2ludCg5MCxpKy4wMSksdS5wb2ludCg5MCxpLS4wMSkpO3UubGluZUVuZCgpLHUucG9seWdvbkVuZCgpfSxjfSxuLnNjYWxlKDg3LjgwNzYpLmNlbnRlcihbMCwxNy4xODc1XSkuY2xpcEFuZ2xlKDE3OS45OTkpfSx0Lmdlb0JlcmdoYXVzUmF3PU4sdC5nZW9CZXJ0aW4xOTUzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihxKCkpLnJvdGF0ZShbLTE2LjUsLTQyXSkuc2NhbGUoMTc2LjU3KS5jZW50ZXIoWzcuOTMsLjA5XSl9LHQuZ2VvQmVydGluMTk1M1Jhdz1xLHQuZ2VvQm9nZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKEopLnNjYWxlKDE2MC44NTcpfSx0Lmdlb0JvZ2dzUmF3PUosdC5nZW9Cb25uZT1mdW5jdGlvbigpe3JldHVybiBLKCQpLnNjYWxlKDEyMy4wODIpLmNlbnRlcihbMCwyNi4xNDQxXSkucGFyYWxsZWwoNDUpfSx0Lmdlb0Jvbm5lUmF3PSQsdC5nZW9Cb3R0b21sZXk9ZnVuY3Rpb24oKXt2YXIgdD0uNSxyPWUuZ2VvUHJvamVjdGlvbk11dGF0b3IodHQpLG49cih0KTtyZXR1cm4gbi5mcmFjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9yKHQ9K2UpOnR9LG4uc2NhbGUoMTU4LjgzNyl9LHQuZ2VvQm90dG9tbGV5UmF3PXR0LHQuZ2VvQnJvbWxleT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oZXQpLnNjYWxlKDE1Mi42Myl9LHQuZ2VvQnJvbWxleVJhdz1ldCx0Lmdlb0NoYW1iZXJsaW49c3QsdC5nZW9DaGFtYmVybGluUmF3PWF0LHQuZ2VvQ2hhbWJlcmxpbkFmcmljYT1mdW5jdGlvbigpe3JldHVybiBzdChbMCwyMl0sWzQ1LDIyXSxbMjIuNSwtMjJdKS5zY2FsZSgzODApLmNlbnRlcihbMjIuNSwyXSl9LHQuZ2VvQ29sbGlnbm9uPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihsdCkuc2NhbGUoOTUuNjQ2NCkuY2VudGVyKFswLDMwXSl9LHQuZ2VvQ29sbGlnbm9uUmF3PWx0LHQuZ2VvQ3JhaWc9ZnVuY3Rpb24oKXtyZXR1cm4gSyhjdCkuc2NhbGUoMjQ5LjgyOCkuY2xpcEFuZ2xlKDkwKX0sdC5nZW9DcmFpZ1Jhdz1jdCx0Lmdlb0NyYXN0ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKGZ0KS5zY2FsZSgxNTYuMTkpfSx0Lmdlb0NyYXN0ZXJSYXc9ZnQsdC5nZW9DeWxpbmRyaWNhbEVxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBLKGh0KS5wYXJhbGxlbCgzOC41OCkuc2NhbGUoMTk1LjA0NCl9LHQuZ2VvQ3lsaW5kcmljYWxFcXVhbEFyZWFSYXc9aHQsdC5nZW9DeWxpbmRyaWNhbFN0ZXJlb2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gSyhwdCkuc2NhbGUoMTI0Ljc1KX0sdC5nZW9DeWxpbmRyaWNhbFN0ZXJlb2dyYXBoaWNSYXc9cHQsdC5nZW9FY2tlcnQxPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihkdCkuc2NhbGUoMTY1LjY2NCl9LHQuZ2VvRWNrZXJ0MVJhdz1kdCx0Lmdlb0Vja2VydDI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKG10KS5zY2FsZSgxNjUuNjY0KX0sdC5nZW9FY2tlcnQyUmF3PW10LHQuZ2VvRWNrZXJ0Mz1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oZ3QpLnNjYWxlKDE4MC43MzkpfSx0Lmdlb0Vja2VydDNSYXc9Z3QsdC5nZW9FY2tlcnQ0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbih2dCkuc2NhbGUoMTgwLjczOSl9LHQuZ2VvRWNrZXJ0NFJhdz12dCx0Lmdlb0Vja2VydDU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKHl0KS5zY2FsZSgxNzMuMDQ0KX0sdC5nZW9FY2tlcnQ1UmF3PXl0LHQuZ2VvRWNrZXJ0Nj1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oeHQpLnNjYWxlKDE3My4wNDQpfSx0Lmdlb0Vja2VydDZSYXc9eHQsdC5nZW9FaXNlbmxvaHI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKF90KS5zY2FsZSg2Mi41MjcxKX0sdC5nZW9FaXNlbmxvaHJSYXc9X3QsdC5nZW9GYWhleT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oVHQpLnNjYWxlKDEzNy4xNTIpfSx0Lmdlb0ZhaGV5UmF3PVR0LHQuZ2VvRm91Y2F1dD1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oa3QpLnNjYWxlKDEzNS4yNjQpfSx0Lmdlb0ZvdWNhdXRSYXc9a3QsdC5nZW9Gb3VjYXV0U2ludXNvaWRhbD1mdW5jdGlvbigpe3ZhciB0PS41LHI9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihBdCksbj1yKHQpO3JldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3IodD0rZSk6dH0sbi5zY2FsZSgxNjguNzI1KX0sdC5nZW9Gb3VjYXV0U2ludXNvaWRhbFJhdz1BdCx0Lmdlb0dpbGJlcnQ9ZnVuY3Rpb24odCl7bnVsbD09dCYmKHQ9ZS5nZW9PcnRob2dyYXBoaWMpO3ZhciByPXQoKSxuPWUuZ2VvRXF1aXJlY3Rhbmd1bGFyKCkuc2NhbGUoQSkucHJlY2lzaW9uKDApLmNsaXBBbmdsZShudWxsKS50cmFuc2xhdGUoWzAsMF0pO2Z1bmN0aW9uIGkodCl7cmV0dXJuIHIoTXQodCkpfWZ1bmN0aW9uIGEodCl7aVt0XT1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyW3RdLmFwcGx5KHIsYXJndW1lbnRzKSxpKTpyW3RdKCl9fXJldHVybiByLmludmVydCYmKGkuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBTdChyLmludmVydCh0KSl9KSxpLnN0cmVhbT1mdW5jdGlvbih0KXt2YXIgZT1yLnN0cmVhbSh0KSxpPW4uc3RyZWFtKHtwb2ludDpmdW5jdGlvbih0LHIpe2UucG9pbnQodC8yLFMoZygtci8yKk0pKSpBKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2UubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZS5wb2x5Z29uRW5kKCl9fSk7cmV0dXJuIGkuc3BoZXJlPWUuc3BoZXJlLGl9LGkucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuLnJvdGF0ZSh0KSxpKTpuLnJvdGF0ZSgpfSxpLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5jZW50ZXIoTXQodCkpLGkpOlN0KHIuY2VudGVyKCkpfSxhKCJhbmdsZSIpLGEoImNsaXBBbmdsZSIpLGEoImNsaXBFeHRlbnQiKSxhKCJmaXRFeHRlbnQiKSxhKCJmaXRIZWlnaHQiKSxhKCJmaXRTaXplIiksYSgiZml0V2lkdGgiKSxhKCJzY2FsZSIpLGEoInRyYW5zbGF0ZSIpLGEoInByZWNpc2lvbiIpLGkuc2NhbGUoMjQ5LjUpfSx0Lmdlb0dpbmdlcnk9ZnVuY3Rpb24oKXt2YXIgdD02LHI9MzAqTSxuPW8ociksaT1tKHIpLHM9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihFdCksbD1zKHIsdCksYz1sLnN0cmVhbSx1PS1vKC4wMSpNKSxmPW0oLjAxKk0pO3JldHVybiBsLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1vKHI9ZSpNKSxpPW0ocikscyhyLHQpKTpyKkF9LGwubG9iZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cyhyLHQ9K2UpOnR9LGwuc3RyZWFtPWZ1bmN0aW9uKGUpe3ZhciByPWwucm90YXRlKCkscz1jKGUpLGg9KGwucm90YXRlKFswLDBdKSxjKGUpKTtyZXR1cm4gbC5yb3RhdGUocikscy5zcGhlcmU9ZnVuY3Rpb24oKXtoLnBvbHlnb25TdGFydCgpLGgubGluZVN0YXJ0KCk7Zm9yKHZhciBlPTAscj0yKnkvdCxzPTA7ZTx0OysrZSxzLT1yKWgucG9pbnQoYShmKm8ocyksdSkqQSxTKGYqbShzKSkqQSksaC5wb2ludChhKGkqbyhzLXIvMiksbikqQSxTKGkqbShzLXIvMikpKkEpO2gubGluZUVuZCgpLGgucG9seWdvbkVuZCgpfSxzfSxsLnJvdGF0ZShbOTAsLTQwXSkuc2NhbGUoOTEuNzA5NSkuY2xpcEFuZ2xlKDE3OS45OTkpfSx0Lmdlb0dpbmdlcnlSYXc9RXQsdC5nZW9HaW56YnVyZzQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKEl0KS5zY2FsZSgxNDkuOTk1KX0sdC5nZW9HaW56YnVyZzRSYXc9SXQsdC5nZW9HaW56YnVyZzU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKE90KS5zY2FsZSgxNTMuOTMpfSx0Lmdlb0dpbnpidXJnNVJhdz1PdCx0Lmdlb0dpbnpidXJnNj1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oenQpLnNjYWxlKDEzMC45NDUpfSx0Lmdlb0dpbnpidXJnNlJhdz16dCx0Lmdlb0dpbnpidXJnOD1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oRHQpLnNjYWxlKDEzMS43NDcpfSx0Lmdlb0dpbnpidXJnOFJhdz1EdCx0Lmdlb0dpbnpidXJnOT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oUnQpLnNjYWxlKDEzMS4wODcpfSx0Lmdlb0dpbnpidXJnOVJhdz1SdCx0Lmdlb0dyaW5nb3J0ZW49ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKEZ0KEJ0KSkuc2NhbGUoMjM5Ljc1KX0sdC5nZW9HcmluZ29ydGVuUmF3PUJ0LHQuZ2VvR3V5b3U9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKEZ0KFV0KSkuc2NhbGUoMTUxLjQ5Nil9LHQuZ2VvR3V5b3VSYXc9VXQsdC5nZW9IYW1tZXI9ZnVuY3Rpb24oKXt2YXIgdD0yLHI9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihqKSxuPXIodCk7cmV0dXJuIG4uY29lZmZpY2llbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cih0PStlKTp0fSxuLnNjYWxlKDE2OS41MjkpfSx0Lmdlb0hhbW1lclJhdz1qLHQuZ2VvSGFtbWVyUmV0cm9hemltdXRoYWw9ZnVuY3Rpb24oKXt2YXIgdD0wLHI9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihWdCksbj1yKHQpLGk9bi5yb3RhdGUsYT1uLnN0cmVhbSxvPWUuZ2VvQ2lyY2xlKCk7cmV0dXJuIG4ucGFyYWxsZWw9ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHQqQTt2YXIgaT1uLnJvdGF0ZSgpO3JldHVybiByKHQ9ZSpNKS5yb3RhdGUoaSl9LG4ucm90YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpLmNhbGwobixbZVswXSxlWzFdLXQqQV0pLG8uY2VudGVyKFstZVswXSwtZVsxXV0pLG4pOigoZT1pLmNhbGwobikpWzFdKz10KkEsZSl9LG4uc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybih0PWEodCkpLnNwaGVyZT1mdW5jdGlvbigpe3QucG9seWdvblN0YXJ0KCk7dmFyIGUscj1vLnJhZGl1cyg4OS45OSkoKS5jb29yZGluYXRlc1swXSxuPXIubGVuZ3RoLTEsaT0tMTtmb3IodC5saW5lU3RhcnQoKTsrK2k8bjspdC5wb2ludCgoZT1yW2ldKVswXSxlWzFdKTtmb3IodC5saW5lRW5kKCksbj0ocj1vLnJhZGl1cyg5MC4wMSkoKS5jb29yZGluYXRlc1swXSkubGVuZ3RoLTEsdC5saW5lU3RhcnQoKTstLWk+PTA7KXQucG9pbnQoKGU9cltpXSlbMF0sZVsxXSk7dC5saW5lRW5kKCksdC5wb2x5Z29uRW5kKCl9LHR9LG4uc2NhbGUoNzkuNDE4NykucGFyYWxsZWwoNDUpLmNsaXBBbmdsZSgxNzkuOTk5KX0sdC5nZW9IYW1tZXJSZXRyb2F6aW11dGhhbFJhdz1WdCx0Lmdlb0hlYWxwaXg9ZnVuY3Rpb24oKXt2YXIgdD00LG49ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihZdCksaT1uKHQpLGE9aS5zdHJlYW07cmV0dXJuIGkubG9iZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bih0PStlKTp0fSxpLnN0cmVhbT1mdW5jdGlvbihuKXt2YXIgbz1pLnJvdGF0ZSgpLHM9YShuKSxsPShpLnJvdGF0ZShbMCwwXSksYShuKSk7cmV0dXJuIGkucm90YXRlKG8pLHMuc3BoZXJlPWZ1bmN0aW9uKCl7dmFyIG4saTtlLmdlb1N0cmVhbSgobj0xODAvdCxpPVtdLmNvbmNhdChyLnJhbmdlKC0xODAsMTgwK24vMixuKS5tYXAoV3QpLHIucmFuZ2UoMTgwLC0xODAtbi8yLC1uKS5tYXAoWHQpKSx7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6WzE4MD09PW4/aS5tYXAoWnQpOmldfSksbCl9LHN9LGkuc2NhbGUoMjM5Ljc1KX0sdC5nZW9IZWFscGl4UmF3PVl0LHQuZ2VvSGlsbD1mdW5jdGlvbigpe3ZhciB0PTEscj1lLmdlb1Byb2plY3Rpb25NdXRhdG9yKEp0KSxuPXIodCk7cmV0dXJuIG4ucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cih0PStlKTp0fSxuLnNjYWxlKDE2Ny43NzQpLmNlbnRlcihbMCwxOC42N10pfSx0Lmdlb0hpbGxSYXc9SnQsdC5nZW9Ib21vbG9zaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihRdCkuc2NhbGUoMTUyLjYzKX0sdC5nZW9Ib21vbG9zaW5lUmF3PVF0LHQuZ2VvSHVmbmFnZWw9ZnVuY3Rpb24oKXt2YXIgdD0xLHI9MCxuPTQ1Kk0saT0yLGE9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcigkdCksbz1hKHQscixuLGkpO3JldHVybiBvLmE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/YSh0PStlLHIsbixpKTp0fSxvLmI9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/YSh0LHI9K2UsbixpKTpyfSxvLnBzaU1heD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9hKHQscixuPStlKk0saSk6bipBfSxvLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2EodCxyLG4saT0rZSk6aX0sby5zY2FsZSgxODAuNzM5KX0sdC5nZW9IdWZuYWdlbFJhdz0kdCx0Lmdlb0h5cGVyZWxsaXB0aWNhbD1mdW5jdGlvbigpe3ZhciB0PTAscj0yLjUsbj0xLjE4MzEzNixpPWUuZ2VvUHJvamVjdGlvbk11dGF0b3IoZWUpLGE9aSh0LHIsbik7cmV0dXJuIGEuYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aSh0PStlLHIsbik6dH0sYS5rPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2kodCxyPStlLG4pOnJ9LGEuZ2FtbWE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aSh0LHIsbj0rZSk6bn0sYS5zY2FsZSgxNTIuNjMpfSx0Lmdlb0h5cGVyZWxsaXB0aWNhbFJhdz1lZSx0Lmdlb0ludGVycnVwdD1hZSx0Lmdlb0ludGVycnVwdGVkQm9nZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gYWUoSixvZSkuc2NhbGUoMTYwLjg1Nyl9LHQuZ2VvSW50ZXJydXB0ZWRIb21vbG9zaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIGFlKFF0LHNlKS5zY2FsZSgxNTIuNjMpfSx0Lmdlb0ludGVycnVwdGVkTW9sbHdlaWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFlKFcsbGUpLnNjYWxlKDE2OS41MjkpfSx0Lmdlb0ludGVycnVwdGVkTW9sbHdlaWRlSGVtaXNwaGVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYWUoVyxjZSkuc2NhbGUoMTY5LjUyOSkucm90YXRlKFsyMCwwXSl9LHQuZ2VvSW50ZXJydXB0ZWRTaW51TW9sbHdlaWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFlKEt0LHVlLEgpLnJvdGF0ZShbLTIwLC01NV0pLnNjYWxlKDE2NC4yNjMpLmNlbnRlcihbMCwtNS40MDM2XSl9LHQuZ2VvSW50ZXJydXB0ZWRTaW51c29pZGFsPWZ1bmN0aW9uKCl7cmV0dXJuIGFlKFEsZmUpLnNjYWxlKDE1Mi42Mykucm90YXRlKFstMjAsMF0pfSx0Lmdlb0thdnJheXNraXk3PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihoZSkuc2NhbGUoMTU4LjgzNyl9LHQuZ2VvS2F2cmF5c2tpeTdSYXc9aGUsdC5nZW9MYWdyYW5nZT1mdW5jdGlvbigpe3ZhciB0PS41LHI9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihwZSksbj1yKHQpO3JldHVybiBuLnNwYWNpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cih0PStlKTp0fSxuLnNjYWxlKDEyNC43NSl9LHQuZ2VvTGFncmFuZ2VSYXc9cGUsdC5nZW9MYXJyaXZlZT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24obWUpLnNjYWxlKDk3LjI2NzIpfSx0Lmdlb0xhcnJpdmVlUmF3PW1lLHQuZ2VvTGFza293c2tpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihnZSkuc2NhbGUoMTM5Ljk4KX0sdC5nZW9MYXNrb3dza2lSYXc9Z2UsdC5nZW9MaXR0cm93PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbih2ZSkuc2NhbGUoMTQ0LjA0OSkuY2xpcEFuZ2xlKDg5Ljk5OSl9LHQuZ2VvTGl0dHJvd1Jhdz12ZSx0Lmdlb0xveGltdXRoYWw9ZnVuY3Rpb24oKXtyZXR1cm4gSyh5ZSkucGFyYWxsZWwoNDApLnNjYWxlKDE1OC44MzcpfSx0Lmdlb0xveGltdXRoYWxSYXc9eWUsdC5nZW9NaWxsZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKHhlKS5zY2FsZSgxMDguMzE4KX0sdC5nZW9NaWxsZXJSYXc9eGUsdC5nZW9Nb2RpZmllZFN0ZXJlb2dyYXBoaWM9TWUsdC5nZW9Nb2RpZmllZFN0ZXJlb2dyYXBoaWNSYXc9YmUsdC5nZW9Nb2RpZmllZFN0ZXJlb2dyYXBoaWNBbGFza2E9ZnVuY3Rpb24oKXtyZXR1cm4gTWUoX2UsWzE1MiwtNjRdKS5zY2FsZSgxNDAwKS5jZW50ZXIoWy0xNjAuOTA4LDYyLjQ4NjRdKS5jbGlwQW5nbGUoMzApLmFuZ2xlKDcuOCl9LHQuZ2VvTW9kaWZpZWRTdGVyZW9ncmFwaGljR3M0OD1mdW5jdGlvbigpe3JldHVybiBNZSh3ZSxbOTUsLTM4XSkuc2NhbGUoMWUzKS5jbGlwQW5nbGUoNTUpLmNlbnRlcihbLTk2LjU1NjMsMzguODY3NV0pfSx0Lmdlb01vZGlmaWVkU3RlcmVvZ3JhcGhpY0dzNTA9ZnVuY3Rpb24oKXtyZXR1cm4gTWUoVGUsWzEyMCwtNDVdKS5zY2FsZSgzNTkuNTEzKS5jbGlwQW5nbGUoNTUpLmNlbnRlcihbLTExNy40NzQsNTMuMDYyOF0pfSx0Lmdlb01vZGlmaWVkU3RlcmVvZ3JhcGhpY01pbGxlcj1mdW5jdGlvbigpe3JldHVybiBNZShrZSxbLTIwLC0xOF0pLnNjYWxlKDIwOS4wOTEpLmNlbnRlcihbMjAsMTYuNzIxNF0pLmNsaXBBbmdsZSg4Mil9LHQuZ2VvTW9kaWZpZWRTdGVyZW9ncmFwaGljTGVlPWZ1bmN0aW9uKCl7cmV0dXJuIE1lKEFlLFsxNjUsMTBdKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxMzApLmNlbnRlcihbLTE2NSwtMTBdKX0sdC5nZW9Nb2xsd2VpZGU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKFcpLnNjYWxlKDE2OS41MjkpfSx0Lmdlb01vbGx3ZWlkZVJhdz1XLHQuZ2VvTXRGbGF0UG9sYXJQYXJhYm9saWM9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKExlKS5zY2FsZSgxNjQuODU5KX0sdC5nZW9NdEZsYXRQb2xhclBhcmFib2xpY1Jhdz1MZSx0Lmdlb010RmxhdFBvbGFyUXVhcnRpYz1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oQ2UpLnNjYWxlKDE4OC4yMDkpfSx0Lmdlb010RmxhdFBvbGFyUXVhcnRpY1Jhdz1DZSx0Lmdlb010RmxhdFBvbGFyU2ludXNvaWRhbD1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oUGUpLnNjYWxlKDE2Ni41MTgpfSx0Lmdlb010RmxhdFBvbGFyU2ludXNvaWRhbFJhdz1QZSx0Lmdlb05hdHVyYWxFYXJ0aDI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKEllKS5zY2FsZSgxNzUuMjk1KX0sdC5nZW9OYXR1cmFsRWFydGgyUmF3PUllLHQuZ2VvTmVsbEhhbW1lcj1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oT2UpLnNjYWxlKDE1Mi42Myl9LHQuZ2VvTmVsbEhhbW1lclJhdz1PZSx0Lmdlb0ludGVycnVwdGVkUXVhcnRpY0F1dGhhbGljPWZ1bmN0aW9uKCl7cmV0dXJuIGFlKGooMS8wKSx6ZSkucm90YXRlKFsyMCwwXSkuc2NhbGUoMTUyLjYzKX0sdC5nZW9OaWNvbG9zaT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oRGUpLnNjYWxlKDEyNy4yNjcpfSx0Lmdlb05pY29sb3NpUmF3PURlLHQuZ2VvUGF0dGVyc29uPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihSZSkuc2NhbGUoMTM5LjMxOSl9LHQuZ2VvUGF0dGVyc29uUmF3PVJlLHQuZ2VvUG9seWNvbmljPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihGZSkuc2NhbGUoMTAzLjc0KX0sdC5nZW9Qb2x5Y29uaWNSYXc9RmUsdC5nZW9Qb2x5aGVkcmFsPVZlLHQuZ2VvUG9seWhlZHJhbEJ1dHRlcmZseT1mdW5jdGlvbih0KXt0PXR8fGZ1bmN0aW9uKHQpe3ZhciByPWUuZ2VvQ2VudHJvaWQoe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOnR9KTtyZXR1cm4gZS5nZW9Hbm9tb25pYygpLnNjYWxlKDEpLnRyYW5zbGF0ZShbMCwwXSkucm90YXRlKFstclswXSwtclsxXV0pfTt2YXIgcj1ZZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybntmYWNlOmUscHJvamVjdDp0KGUpfX0pKTtyZXR1cm5bLTEsMCwwLDEsMCwxLDQsNV0uZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt2YXIgbj1yW3RdO24mJihuLmNoaWxkcmVufHwobi5jaGlsZHJlbj1bXSkpLnB1c2gocltlXSl9KSksVmUoclswXSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gclt0PC15LzI/ZTwwPzY6NDp0PDA/ZTwwPzI6MDp0PHkvMj9lPDA/MzoxOmU8MD83OjVdfSkpLmFuZ2xlKC0zMCkuc2NhbGUoMTAxLjg1OCkuY2VudGVyKFswLDQ1XSl9LHQuZ2VvUG9seWhlZHJhbENvbGxpZ25vbj1mdW5jdGlvbih0KXt0PXR8fGZ1bmN0aW9uKHQpe3ZhciByPWUuZ2VvQ2VudHJvaWQoe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOnR9KTtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKFhlKS50cmFuc2xhdGUoWzAsMF0pLnNjYWxlKDEpLnJvdGF0ZShyWzFdPjA/Wy1yWzBdLDBdOlsxODAtclswXSwxODBdKX07dmFyIHI9WWUubWFwKChmdW5jdGlvbihlKXtyZXR1cm57ZmFjZTplLHByb2plY3Q6dChlKX19KSk7cmV0dXJuWy0xLDAsMCwxLDAsMSw0LDVdLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dmFyIG49clt0XTtuJiYobi5jaGlsZHJlbnx8KG4uY2hpbGRyZW49W10pKS5wdXNoKHJbZV0pfSkpLFZlKHJbMF0sKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJbdDwteS8yP2U8MD82OjQ6dDwwP2U8MD8yOjA6dDx5LzI/ZTwwPzM6MTplPDA/Nzo1XX0pKS5hbmdsZSgtMzApLnNjYWxlKDEyMS45MDYpLmNlbnRlcihbMCw0OC41OTA0XSl9LHQuZ2VvUG9seWhlZHJhbFdhdGVybWFuPWZ1bmN0aW9uKHQpe3Q9dHx8ZnVuY3Rpb24odCl7dmFyIHI9Nj09PXQubGVuZ3RoP2UuZ2VvQ2VudHJvaWQoe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOnR9KTp0WzBdO3JldHVybiBlLmdlb0dub21vbmljKCkuc2NhbGUoMSkudHJhbnNsYXRlKFswLDBdKS5yb3RhdGUoWy1yWzBdLC1yWzFdXSl9O3ZhciByPVllLm1hcCgoZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dC5tYXAoS2UpLG49ci5sZW5ndGgsaT1yW24tMV0sYT1bXSxvPTA7bzxuOysrbyllPXJbb10sYS5wdXNoKEplKFsuOTQ4NjgzMjk4MDUwNTEzOCppWzBdKy4zMTYyMjc3NjYwMTY4Mzc5NCplWzBdLC45NDg2ODMyOTgwNTA1MTM4KmlbMV0rLjMxNjIyNzc2NjAxNjgzNzk0KmVbMV0sLjk0ODY4MzI5ODA1MDUxMzgqaVsyXSsuMzE2MjI3NzY2MDE2ODM3OTQqZVsyXV0pLEplKFsuOTQ4NjgzMjk4MDUwNTEzOCplWzBdKy4zMTYyMjc3NjYwMTY4Mzc5NCppWzBdLC45NDg2ODMyOTgwNTA1MTM4KmVbMV0rLjMxNjIyNzc2NjAxNjgzNzk0KmlbMV0sLjk0ODY4MzI5ODA1MDUxMzgqZVsyXSsuMzE2MjI3NzY2MDE2ODM3OTQqaVsyXV0pKSxpPWU7cmV0dXJuIGF9KSksbj1bXSxpPVstMSwwLDAsMSwwLDEsNCw1XTtyLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBhLG8scz1ZZVtlXSxsPXMubGVuZ3RoLGM9bltlXT1bXSx1PTA7dTxsOysrdSlyLnB1c2goW3NbdV0sdFsoMip1KzIpJSgyKmwpXSx0WygyKnUrMSklKDIqbCldXSksaS5wdXNoKGUpLGMucHVzaCgoYT1LZSh0WygyKnUrMiklKDIqbCldKSxvPUtlKHRbKDIqdSsxKSUoMipsKV0pLFthWzFdKm9bMl0tYVsyXSpvWzFdLGFbMl0qb1swXS1hWzBdKm9bMl0sYVswXSpvWzFdLWFbMV0qb1swXV0pKX0pKTt2YXIgYT1yLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJue3Byb2plY3Q6dChlKSxmYWNlOmV9fSkpO3JldHVybiBpLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dmFyIHI9YVt0XTtyJiYoci5jaGlsZHJlbnx8KHIuY2hpbGRyZW49W10pKS5wdXNoKGFbZV0pfSkpLFZlKGFbMF0sKGZ1bmN0aW9uKHQsZSl7dmFyIHI9byhlKSxpPVtyKm8odCksciptKHQpLG0oZSldLHM9dDwteS8yP2U8MD82OjQ6dDwwP2U8MD8yOjA6dDx5LzI/ZTwwPzM6MTplPDA/Nzo1LGw9bltzXTtyZXR1cm4gYVtaZShsWzBdLGkpPDA/OCszKnM6WmUobFsxXSxpKTwwPzgrMypzKzE6WmUobFsyXSxpKTwwPzgrMypzKzI6c119KSkuYW5nbGUoLTMwKS5zY2FsZSgxMTAuNjI1KS5jZW50ZXIoWzAsNDVdKX0sdC5nZW9Qcm9qZWN0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLnN0cmVhbTtpZighbil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcHJvamVjdGlvbiIpO3N3aXRjaCh0JiZ0LnR5cGUpe2Nhc2UiRmVhdHVyZSI6cj10cjticmVhaztjYXNlIkZlYXR1cmVDb2xsZWN0aW9uIjpyPSRlO2JyZWFrO2RlZmF1bHQ6cj1lcn1yZXR1cm4gcih0LG4pfSx0Lmdlb0dyaW5nb3J0ZW5RdWluY3VuY2lhbD1mdW5jdGlvbigpe3JldHVybiBzcihCdCkuc2NhbGUoMTc2LjQyMyl9LHQuZ2VvUGVpcmNlUXVpbmN1bmNpYWw9bHIsdC5nZW9QaWVyY2VRdWluY3VuY2lhbD1scix0Lmdlb1F1YW50aXplPWZ1bmN0aW9uKHQsZSl7aWYoISgwPD0oZT0rZSkmJmU8PTIwKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZGlnaXRzIik7ZnVuY3Rpb24gcih0KXt2YXIgcj10Lmxlbmd0aCxuPTIsaT1uZXcgQXJyYXkocik7Zm9yKGlbMF09K3RbMF0udG9GaXhlZChlKSxpWzFdPSt0WzFdLnRvRml4ZWQoZSk7bjxyOylpW25dPXRbbl0sKytuO3JldHVybiBpfWZ1bmN0aW9uIG4odCl7cmV0dXJuIHQubWFwKHIpfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPXIodFswXSksbj1bZV0saT0xO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1yKHRbaV0pOyhhLmxlbmd0aD4yfHxhWzBdIT1lWzBdfHxhWzFdIT1lWzFdKSYmKG4ucHVzaChhKSxlPWEpfXJldHVybiAxPT09bi5sZW5ndGgmJnQubGVuZ3RoPjEmJm4ucHVzaChyKHRbdC5sZW5ndGgtMV0pKSxufWZ1bmN0aW9uIGEodCl7cmV0dXJuIHQubWFwKGkpfWZ1bmN0aW9uIG8odCl7aWYobnVsbD09dClyZXR1cm4gdDt2YXIgZTtzd2l0Y2godC50eXBlKXtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6ZT17dHlwZToiR2VvbWV0cnlDb2xsZWN0aW9uIixnZW9tZXRyaWVzOnQuZ2VvbWV0cmllcy5tYXAobyl9O2JyZWFrO2Nhc2UiUG9pbnQiOmU9e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpyKHQuY29vcmRpbmF0ZXMpfTticmVhaztjYXNlIk11bHRpUG9pbnQiOmU9e3R5cGU6dC50eXBlLGNvb3JkaW5hdGVzOm4odC5jb29yZGluYXRlcyl9O2JyZWFrO2Nhc2UiTGluZVN0cmluZyI6ZT17dHlwZTp0LnR5cGUsY29vcmRpbmF0ZXM6aSh0LmNvb3JkaW5hdGVzKX07YnJlYWs7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOmNhc2UiUG9seWdvbiI6ZT17dHlwZTp0LnR5cGUsY29vcmRpbmF0ZXM6YSh0LmNvb3JkaW5hdGVzKX07YnJlYWs7Y2FzZSJNdWx0aVBvbHlnb24iOmU9e3R5cGU6Ik11bHRpUG9seWdvbiIsY29vcmRpbmF0ZXM6dC5jb29yZGluYXRlcy5tYXAoYSl9O2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHR9cmV0dXJuIG51bGwhPXQuYmJveCYmKGUuYmJveD10LmJib3gpLGV9ZnVuY3Rpb24gcyh0KXt2YXIgZT17dHlwZToiRmVhdHVyZSIscHJvcGVydGllczp0LnByb3BlcnRpZXMsZ2VvbWV0cnk6byh0Lmdlb21ldHJ5KX07cmV0dXJuIG51bGwhPXQuaWQmJihlLmlkPXQuaWQpLG51bGwhPXQuYmJveCYmKGUuYmJveD10LmJib3gpLGV9aWYobnVsbCE9dClzd2l0Y2godC50eXBlKXtjYXNlIkZlYXR1cmUiOnJldHVybiBzKHQpO2Nhc2UiRmVhdHVyZUNvbGxlY3Rpb24iOnZhciBsPXt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6dC5mZWF0dXJlcy5tYXAocyl9O3JldHVybiBudWxsIT10LmJib3gmJihsLmJib3g9dC5iYm94KSxsO2RlZmF1bHQ6cmV0dXJuIG8odCl9cmV0dXJuIHR9LHQuZ2VvUXVpbmN1bmNpYWw9c3IsdC5nZW9SZWN0YW5ndWxhclBvbHljb25pYz1mdW5jdGlvbigpe3JldHVybiBLKGNyKS5zY2FsZSgxMzEuMjE1KX0sdC5nZW9SZWN0YW5ndWxhclBvbHljb25pY1Jhdz1jcix0Lmdlb1JvYmluc29uPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihmcikuc2NhbGUoMTUyLjYzKX0sdC5nZW9Sb2JpbnNvblJhdz1mcix0Lmdlb1NhdGVsbGl0ZT1mdW5jdGlvbigpe3ZhciB0PTIscj0wLG49ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihociksaT1uKHQscik7cmV0dXJuIGkuZGlzdGFuY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bih0PStlLHIpOnR9LGkudGlsdD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQscj1lKk0pOnIqQX0saS5zY2FsZSg0MzIuMTQ3KS5jbGlwQW5nbGUoRSgxL3QpKkEtMWUtNil9LHQuZ2VvU2F0ZWxsaXRlUmF3PWhyLHQuZ2VvU2ludU1vbGx3ZWlkZT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oS3QpLnJvdGF0ZShbLTIwLC01NV0pLnNjYWxlKDE2NC4yNjMpLmNlbnRlcihbMCwtNS40MDM2XSl9LHQuZ2VvU2ludU1vbGx3ZWlkZVJhdz1LdCx0Lmdlb1NpbnVzb2lkYWw9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKFEpLnNjYWxlKDE1Mi42Myl9LHQuZ2VvU2ludXNvaWRhbFJhdz1RLHQuZ2VvU3RpdGNoPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHQ7c3dpdGNoKHQudHlwZSl7Y2FzZSJGZWF0dXJlIjpyZXR1cm4gd3IodCk7Y2FzZSJGZWF0dXJlQ29sbGVjdGlvbiI6dmFyIGU9e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczp0LmZlYXR1cmVzLm1hcCh3cil9O3JldHVybiBudWxsIT10LmJib3gmJihlLmJib3g9dC5iYm94KSxlO2RlZmF1bHQ6cmV0dXJuIFRyKHQpfX0sdC5nZW9UaW1lcz1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oa3IpLnNjYWxlKDE0Ni4xNTMpfSx0Lmdlb1RpbWVzUmF3PWtyLHQuZ2VvVHdvUG9pbnRBemltdXRoYWw9U3IsdC5nZW9Ud29Qb2ludEF6aW11dGhhbFJhdz1Ncix0Lmdlb1R3b1BvaW50QXppbXV0aGFsVXNhPWZ1bmN0aW9uKCl7cmV0dXJuIFNyKFstMTU4LDIxLjVdLFstNzcsMzldKS5jbGlwQW5nbGUoNjApLnNjYWxlKDQwMCl9LHQuZ2VvVHdvUG9pbnRFcXVpZGlzdGFudD1Mcix0Lmdlb1R3b1BvaW50RXF1aWRpc3RhbnRSYXc9RXIsdC5nZW9Ud29Qb2ludEVxdWlkaXN0YW50VXNhPWZ1bmN0aW9uKCl7cmV0dXJuIExyKFstMTU4LDIxLjVdLFstNzcsMzldKS5jbGlwQW5nbGUoMTMwKS5zY2FsZSgxMjIuNTcxKX0sdC5nZW9WYW5EZXJHcmludGVuPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihDcikuc2NhbGUoNzkuNDE4Myl9LHQuZ2VvVmFuRGVyR3JpbnRlblJhdz1Dcix0Lmdlb1ZhbkRlckdyaW50ZW4yPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihQcikuc2NhbGUoNzkuNDE4Myl9LHQuZ2VvVmFuRGVyR3JpbnRlbjJSYXc9UHIsdC5nZW9WYW5EZXJHcmludGVuMz1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oSXIpLnNjYWxlKDc5LjQxODMpfSx0Lmdlb1ZhbkRlckdyaW50ZW4zUmF3PUlyLHQuZ2VvVmFuRGVyR3JpbnRlbjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKE9yKS5zY2FsZSgxMjcuMTYpfSx0Lmdlb1ZhbkRlckdyaW50ZW40UmF3PU9yLHQuZ2VvV2FnbmVyPURyLHQuZ2VvV2FnbmVyNz1mdW5jdGlvbigpe3JldHVybiBEcigpLnBvbGVsaW5lKDY1KS5wYXJhbGxlbHMoNjApLmluZmxhdGlvbigwKS5yYXRpbygyMDApLnNjYWxlKDE3Mi42MzMpfSx0Lmdlb1dhZ25lclJhdz16cix0Lmdlb1dhZ25lcjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKEJyKS5zY2FsZSgxNzYuODQpfSx0Lmdlb1dhZ25lcjRSYXc9QnIsdC5nZW9XYWduZXI2PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihOcikuc2NhbGUoMTUyLjYzKX0sdC5nZW9XYWduZXI2UmF3PU5yLHQuZ2VvV2llY2hlbD1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oanIpLnJvdGF0ZShbMCwtOTAsNDVdKS5zY2FsZSgxMjQuNzUpLmNsaXBBbmdsZSgxNzkuOTk5KX0sdC5nZW9XaWVjaGVsUmF3PWpyLHQuZ2VvV2lua2VsMz1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oVXIpLnNjYWxlKDE1OC44MzcpfSx0Lmdlb1dpbmtlbDNSYXc9VXIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7ImQzLWFycmF5IjoxNTUsImQzLWdlbyI6MTYyfV0sMTYyOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKG4saSl7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP2kocix0KCJkMy1hcnJheSIpKTppKChuPW58fHNlbGYpLmQzPW4uZDN8fHt9LG4uZDMpfSh0aGlzLChmdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7cmV0dXJuIG5ldyBufWZ1bmN0aW9uIG4oKXt0aGlzLnJlc2V0KCl9bi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm4scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbih0KXthKGksdCx0aGlzLnQpLGEodGhpcyxpLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1pLnQ6dGhpcy5zPWkudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgaT1uZXcgbjtmdW5jdGlvbiBhKHQsZSxyKXt2YXIgbj10LnM9ZStyLGk9bi1lLGE9bi1pO3QudD1lLWErKHItaSl9dmFyIG89MWUtNixzPU1hdGguUEksbD1zLzIsYz1zLzQsdT0yKnMsZj0xODAvcyxoPXMvMTgwLHA9TWF0aC5hYnMsZD1NYXRoLmF0YW4sbT1NYXRoLmF0YW4yLGc9TWF0aC5jb3Msdj1NYXRoLmNlaWwseT1NYXRoLmV4cCx4PU1hdGgubG9nLGI9TWF0aC5wb3csXz1NYXRoLnNpbix3PU1hdGguc2lnbnx8ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD8xOnQ8MD8tMTowfSxUPU1hdGguc3FydCxrPU1hdGgudGFuO2Z1bmN0aW9uIEEodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/czpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdD4xP2w6dDwtMT8tbDpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gUyh0KXtyZXR1cm4odD1fKHQvMikpKnR9ZnVuY3Rpb24gRSgpe31mdW5jdGlvbiBMKHQsZSl7dCYmUC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpJiZQW3QudHlwZV0odCxlKX12YXIgQz17RmVhdHVyZTpmdW5jdGlvbih0LGUpe0wodC5nZW9tZXRyeSxlKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KUwocltuXS5nZW9tZXRyeSxlKX19LFA9e1NwaGVyZTpmdW5jdGlvbih0LGUpe2Uuc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKHQsZSl7dD10LmNvb3JkaW5hdGVzLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOyl0PXJbbl0sZS5wb2ludCh0WzBdLHRbMV0sdFsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtJKHQuY29vcmRpbmF0ZXMsZSwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylJKHJbbl0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe08odC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylPKHJbbl0sZSl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylMKHJbbl0sZSl9fTtmdW5jdGlvbiBJKHQsZSxyKXt2YXIgbixpPS0xLGE9dC5sZW5ndGgtcjtmb3IoZS5saW5lU3RhcnQoKTsrK2k8YTspbj10W2ldLGUucG9pbnQoblswXSxuWzFdLG5bMl0pO2UubGluZUVuZCgpfWZ1bmN0aW9uIE8odCxlKXt2YXIgcj0tMSxuPXQubGVuZ3RoO2ZvcihlLnBvbHlnb25TdGFydCgpOysrcjxuOylJKHRbcl0sZSwxKTtlLnBvbHlnb25FbmQoKX1mdW5jdGlvbiB6KHQsZSl7dCYmQy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP0NbdC50eXBlXSh0LGUpOkwodCxlKX12YXIgRCxSLEYsQixOLGo9cigpLFU9cigpLFY9e3BvaW50OkUsbGluZVN0YXJ0OkUsbGluZUVuZDpFLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2oucmVzZXQoKSxWLmxpbmVTdGFydD1ILFYubGluZUVuZD1xfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9K2o7VS5hZGQodDwwP3UrdDp0KSx0aGlzLmxpbmVTdGFydD10aGlzLmxpbmVFbmQ9dGhpcy5wb2ludD1FfSxzcGhlcmU6ZnVuY3Rpb24oKXtVLmFkZCh1KX19O2Z1bmN0aW9uIEgoKXtWLnBvaW50PUd9ZnVuY3Rpb24gcSgpe1koRCxSKX1mdW5jdGlvbiBHKHQsZSl7Vi5wb2ludD1ZLEQ9dCxSPWUsRj10Kj1oLEI9ZyhlPShlKj1oKS8yK2MpLE49XyhlKX1mdW5jdGlvbiBZKHQsZSl7dmFyIHI9KHQqPWgpLUYsbj1yPj0wPzE6LTEsaT1uKnIsYT1nKGU9KGUqPWgpLzIrYyksbz1fKGUpLHM9TipvLGw9QiphK3MqZyhpKSx1PXMqbipfKGkpO2ouYWRkKG0odSxsKSksRj10LEI9YSxOPW99ZnVuY3Rpb24gVyh0KXtyZXR1cm5bbSh0WzFdLHRbMF0pLE0odFsyXSldfWZ1bmN0aW9uIFgodCl7dmFyIGU9dFswXSxyPXRbMV0sbj1nKHIpO3JldHVybltuKmcoZSksbipfKGUpLF8ocildfWZ1bmN0aW9uIFoodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19ZnVuY3Rpb24gSih0LGUpe3JldHVyblt0WzFdKmVbMl0tdFsyXSplWzFdLHRbMl0qZVswXS10WzBdKmVbMl0sdFswXSplWzFdLXRbMV0qZVswXV19ZnVuY3Rpb24gSyh0LGUpe3RbMF0rPWVbMF0sdFsxXSs9ZVsxXSx0WzJdKz1lWzJdfWZ1bmN0aW9uIFEodCxlKXtyZXR1cm5bdFswXSplLHRbMV0qZSx0WzJdKmVdfWZ1bmN0aW9uICQodCl7dmFyIGU9VCh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSk7dFswXS89ZSx0WzFdLz1lLHRbMl0vPWV9dmFyIHR0LGV0LHJ0LG50LGl0LGF0LG90LHN0LGx0LGN0LHV0LGZ0LGh0LHB0LGR0LG10LGd0LHZ0LHl0LHh0LGJ0LF90LHd0LFR0LGt0LEF0LE10PXIoKSxTdD17cG9pbnQ6RXQsbGluZVN0YXJ0OkN0LGxpbmVFbmQ6UHQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7U3QucG9pbnQ9SXQsU3QubGluZVN0YXJ0PU90LFN0LmxpbmVFbmQ9enQsTXQucmVzZXQoKSxWLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Vi5wb2x5Z29uRW5kKCksU3QucG9pbnQ9RXQsU3QubGluZVN0YXJ0PUN0LFN0LmxpbmVFbmQ9UHQsajwwPyh0dD0tKHJ0PTE4MCksZXQ9LShudD05MCkpOk10Pm8/bnQ9OTA6TXQ8LW8mJihldD0tOTApLGN0WzBdPXR0LGN0WzFdPXJ0fSxzcGhlcmU6ZnVuY3Rpb24oKXt0dD0tKHJ0PTE4MCksZXQ9LShudD05MCl9fTtmdW5jdGlvbiBFdCh0LGUpe2x0LnB1c2goY3Q9W3R0PXQscnQ9dF0pLGU8ZXQmJihldD1lKSxlPm50JiYobnQ9ZSl9ZnVuY3Rpb24gTHQodCxlKXt2YXIgcj1YKFt0KmgsZSpoXSk7aWYoc3Qpe3ZhciBuPUooc3QsciksaT1KKFtuWzFdLC1uWzBdLDBdLG4pOyQoaSksaT1XKGkpO3ZhciBhLG89dC1pdCxzPW8+MD8xOi0xLGw9aVswXSpmKnMsYz1wKG8pPjE4MDtjXihzKml0PGwmJmw8cyp0KT8oYT1pWzFdKmYpPm50JiYobnQ9YSk6Y14ocyppdDwobD0obCszNjApJTM2MC0xODApJiZsPHMqdCk/KGE9LWlbMV0qZik8ZXQmJihldD1hKTooZTxldCYmKGV0PWUpLGU+bnQmJihudD1lKSksYz90PGl0P0R0KHR0LHQpPkR0KHR0LHJ0KSYmKHJ0PXQpOkR0KHQscnQpPkR0KHR0LHJ0KSYmKHR0PXQpOnJ0Pj10dD8odDx0dCYmKHR0PXQpLHQ+cnQmJihydD10KSk6dD5pdD9EdCh0dCx0KT5EdCh0dCxydCkmJihydD10KTpEdCh0LHJ0KT5EdCh0dCxydCkmJih0dD10KX1lbHNlIGx0LnB1c2goY3Q9W3R0PXQscnQ9dF0pO2U8ZXQmJihldD1lKSxlPm50JiYobnQ9ZSksc3Q9cixpdD10fWZ1bmN0aW9uIEN0KCl7U3QucG9pbnQ9THR9ZnVuY3Rpb24gUHQoKXtjdFswXT10dCxjdFsxXT1ydCxTdC5wb2ludD1FdCxzdD1udWxsfWZ1bmN0aW9uIEl0KHQsZSl7aWYoc3Qpe3ZhciByPXQtaXQ7TXQuYWRkKHAocik+MTgwP3IrKHI+MD8zNjA6LTM2MCk6cil9ZWxzZSBhdD10LG90PWU7Vi5wb2ludCh0LGUpLEx0KHQsZSl9ZnVuY3Rpb24gT3QoKXtWLmxpbmVTdGFydCgpfWZ1bmN0aW9uIHp0KCl7SXQoYXQsb3QpLFYubGluZUVuZCgpLHAoTXQpPm8mJih0dD0tKHJ0PTE4MCkpLGN0WzBdPXR0LGN0WzFdPXJ0LHN0PW51bGx9ZnVuY3Rpb24gRHQodCxlKXtyZXR1cm4oZS09dCk8MD9lKzM2MDplfWZ1bmN0aW9uIFJ0KHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBGdCh0LGUpe3JldHVybiB0WzBdPD10WzFdP3RbMF08PWUmJmU8PXRbMV06ZTx0WzBdfHx0WzFdPGV9dmFyIEJ0PXtzcGhlcmU6RSxwb2ludDpOdCxsaW5lU3RhcnQ6VXQsbGluZUVuZDpxdCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtCdC5saW5lU3RhcnQ9R3QsQnQubGluZUVuZD1ZdH0scG9seWdvbkVuZDpmdW5jdGlvbigpe0J0LmxpbmVTdGFydD1VdCxCdC5saW5lRW5kPXF0fX07ZnVuY3Rpb24gTnQodCxlKXt0Kj1oO3ZhciByPWcoZSo9aCk7anQocipnKHQpLHIqXyh0KSxfKGUpKX1mdW5jdGlvbiBqdCh0LGUscil7Kyt1dCxodCs9KHQtaHQpL3V0LHB0Kz0oZS1wdCkvdXQsZHQrPShyLWR0KS91dH1mdW5jdGlvbiBVdCgpe0J0LnBvaW50PVZ0fWZ1bmN0aW9uIFZ0KHQsZSl7dCo9aDt2YXIgcj1nKGUqPWgpO1R0PXIqZyh0KSxrdD1yKl8odCksQXQ9XyhlKSxCdC5wb2ludD1IdCxqdChUdCxrdCxBdCl9ZnVuY3Rpb24gSHQodCxlKXt0Kj1oO3ZhciByPWcoZSo9aCksbj1yKmcodCksaT1yKl8odCksYT1fKGUpLG89bShUKChvPWt0KmEtQXQqaSkqbysobz1BdCpuLVR0KmEpKm8rKG89VHQqaS1rdCpuKSpvKSxUdCpuK2t0KmkrQXQqYSk7ZnQrPW8sbXQrPW8qKFR0KyhUdD1uKSksZ3QrPW8qKGt0KyhrdD1pKSksdnQrPW8qKEF0KyhBdD1hKSksanQoVHQsa3QsQXQpfWZ1bmN0aW9uIHF0KCl7QnQucG9pbnQ9TnR9ZnVuY3Rpb24gR3QoKXtCdC5wb2ludD1XdH1mdW5jdGlvbiBZdCgpe1h0KF90LHd0KSxCdC5wb2ludD1OdH1mdW5jdGlvbiBXdCh0LGUpe190PXQsd3Q9ZSx0Kj1oLGUqPWgsQnQucG9pbnQ9WHQ7dmFyIHI9ZyhlKTtUdD1yKmcodCksa3Q9cipfKHQpLEF0PV8oZSksanQoVHQsa3QsQXQpfWZ1bmN0aW9uIFh0KHQsZSl7dCo9aDt2YXIgcj1nKGUqPWgpLG49cipnKHQpLGk9cipfKHQpLGE9XyhlKSxvPWt0KmEtQXQqaSxzPUF0Km4tVHQqYSxsPVR0Kmkta3QqbixjPVQobypvK3MqcytsKmwpLHU9TShjKSxmPWMmJi11L2M7eXQrPWYqbyx4dCs9ZipzLGJ0Kz1mKmwsZnQrPXUsbXQrPXUqKFR0KyhUdD1uKSksZ3QrPXUqKGt0KyhrdD1pKSksdnQrPXUqKEF0KyhBdD1hKSksanQoVHQsa3QsQXQpfWZ1bmN0aW9uIFp0KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBKdCh0LGUpe2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gcj10KHIsbiksZShyWzBdLHJbMV0pfXJldHVybiB0LmludmVydCYmZS5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihyLG4pe3JldHVybihyPWUuaW52ZXJ0KHIsbikpJiZ0LmludmVydChyWzBdLHJbMV0pfSkscn1mdW5jdGlvbiBLdCh0LGUpe3JldHVybltwKHQpPnM/dCtNYXRoLnJvdW5kKC10L3UpKnU6dCxlXX1mdW5jdGlvbiBRdCh0LGUscil7cmV0dXJuKHQlPXUpP2V8fHI/SnQodGUodCksZWUoZSxyKSk6dGUodCk6ZXx8cj9lZShlLHIpOkt0fWZ1bmN0aW9uICR0KHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVyblsoZSs9dCk+cz9lLXU6ZTwtcz9lK3U6ZSxyXX19ZnVuY3Rpb24gdGUodCl7dmFyIGU9JHQodCk7cmV0dXJuIGUuaW52ZXJ0PSR0KC10KSxlfWZ1bmN0aW9uIGVlKHQsZSl7dmFyIHI9Zyh0KSxuPV8odCksaT1nKGUpLGE9XyhlKTtmdW5jdGlvbiBvKHQsZSl7dmFyIG89ZyhlKSxzPWcodCkqbyxsPV8odCkqbyxjPV8oZSksdT1jKnIrcypuO3JldHVyblttKGwqaS11KmEscypyLWMqbiksTSh1KmkrbCphKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG89ZyhlKSxzPWcodCkqbyxsPV8odCkqbyxjPV8oZSksdT1jKmktbCphO3JldHVyblttKGwqaStjKmEscypyK3UqbiksTSh1KnItcypuKV19LG99ZnVuY3Rpb24gcmUodCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4oZT10KGVbMF0qaCxlWzFdKmgpKVswXSo9ZixlWzFdKj1mLGV9cmV0dXJuIHQ9UXQodFswXSpoLHRbMV0qaCx0Lmxlbmd0aD4yP3RbMl0qaDowKSxlLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4oZT10LmludmVydChlWzBdKmgsZVsxXSpoKSlbMF0qPWYsZVsxXSo9ZixlfSxlfWZ1bmN0aW9uIG5lKHQsZSxyLG4saSxhKXtpZihyKXt2YXIgbz1nKGUpLHM9XyhlKSxsPW4qcjtudWxsPT1pPyhpPWUrbip1LGE9ZS1sLzIpOihpPWllKG8saSksYT1pZShvLGEpLChuPjA/aTxhOmk+YSkmJihpKz1uKnUpKTtmb3IodmFyIGMsZj1pO24+MD9mPmE6ZjxhO2YtPWwpYz1XKFtvLC1zKmcoZiksLXMqXyhmKV0pLHQucG9pbnQoY1swXSxjWzFdKX19ZnVuY3Rpb24gaWUodCxlKXsoZT1YKGUpKVswXS09dCwkKGUpO3ZhciByPUEoLWVbMV0pO3JldHVybigoLWVbMl08MD8tcjpyKSt1LW8pJXV9ZnVuY3Rpb24gYWUoKXt2YXIgdCxlPVtdO3JldHVybntwb2ludDpmdW5jdGlvbihlLHIsbil7dC5wdXNoKFtlLHIsbl0pfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLnB1c2godD1bXSl9LGxpbmVFbmQ6RSxyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciByPWU7cmV0dXJuIGU9W10sdD1udWxsLHJ9fX1mdW5jdGlvbiBvZSh0LGUpe3JldHVybiBwKHRbMF0tZVswXSk8byYmcCh0WzFdLWVbMV0pPG99ZnVuY3Rpb24gc2UodCxlLHIsbil7dGhpcy54PXQsdGhpcy56PWUsdGhpcy5vPXIsdGhpcy5lPW4sdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBsZSh0LGUscixuLGkpe3ZhciBhLHMsbD1bXSxjPVtdO2lmKHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoISgoZT10Lmxlbmd0aC0xKTw9MCkpe3ZhciBlLHIsbj10WzBdLHM9dFtlXTtpZihvZShuLHMpKXtpZighblsyXSYmIXNbMl0pe2ZvcihpLmxpbmVTdGFydCgpLGE9MDthPGU7KythKWkucG9pbnQoKG49dFthXSlbMF0sblsxXSk7cmV0dXJuIHZvaWQgaS5saW5lRW5kKCl9c1swXSs9MipvfWwucHVzaChyPW5ldyBzZShuLHQsbnVsbCwhMCkpLGMucHVzaChyLm89bmV3IHNlKG4sbnVsbCxyLCExKSksbC5wdXNoKHI9bmV3IHNlKHMsdCxudWxsLCExKSksYy5wdXNoKHIubz1uZXcgc2UocyxudWxsLHIsITApKX19KSksbC5sZW5ndGgpe2ZvcihjLnNvcnQoZSksY2UobCksY2UoYyksYT0wLHM9Yy5sZW5ndGg7YTxzOysrYSljW2FdLmU9cj0hcjtmb3IodmFyIHUsZixoPWxbMF07Oyl7Zm9yKHZhciBwPWgsZD0hMDtwLnY7KWlmKChwPXAubik9PT1oKXJldHVybjt1PXAueixpLmxpbmVTdGFydCgpO2Rve2lmKHAudj1wLm8udj0hMCxwLmUpe2lmKGQpZm9yKGE9MCxzPXUubGVuZ3RoO2E8czsrK2EpaS5wb2ludCgoZj11W2FdKVswXSxmWzFdKTtlbHNlIG4ocC54LHAubi54LDEsaSk7cD1wLm59ZWxzZXtpZihkKWZvcih1PXAucC56LGE9dS5sZW5ndGgtMTthPj0wOy0tYSlpLnBvaW50KChmPXVbYV0pWzBdLGZbMV0pO2Vsc2UgbihwLngscC5wLngsLTEsaSk7cD1wLnB9dT0ocD1wLm8pLnosZD0hZH13aGlsZSghcC52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIGNlKHQpe2lmKGU9dC5sZW5ndGgpe2Zvcih2YXIgZSxyLG49MCxpPXRbMF07KytuPGU7KWkubj1yPXRbbl0sci5wPWksaT1yO2kubj1yPXRbMF0sci5wPWl9fUt0LmludmVydD1LdDt2YXIgdWU9cigpO2Z1bmN0aW9uIGZlKHQpe3JldHVybiBwKHRbMF0pPD1zP3RbMF06dyh0WzBdKSooKHAodFswXSkrcykldS1zKX1mdW5jdGlvbiBoZSh0LGUpe3ZhciByPWZlKGUpLG49ZVsxXSxpPV8obiksYT1bXyhyKSwtZyhyKSwwXSxmPTAsaD0wO3VlLnJlc2V0KCksMT09PWk/bj1sK286LTE9PT1pJiYobj0tbC1vKTtmb3IodmFyIHA9MCxkPXQubGVuZ3RoO3A8ZDsrK3ApaWYoeT0odj10W3BdKS5sZW5ndGgpZm9yKHZhciB2LHkseD12W3ktMV0sYj1mZSh4KSx3PXhbMV0vMitjLFQ9Xyh3KSxrPWcodyksQT0wO0E8eTsrK0EsYj1FLFQ9QyxrPVAseD1TKXt2YXIgUz12W0FdLEU9ZmUoUyksTD1TWzFdLzIrYyxDPV8oTCksUD1nKEwpLEk9RS1iLE89ST49MD8xOi0xLHo9TypJLEQ9ej5zLFI9VCpDO2lmKHVlLmFkZChtKFIqTypfKHopLGsqUCtSKmcoeikpKSxmKz1EP0krTyp1OkksRF5iPj1yXkU+PXIpe3ZhciBGPUooWCh4KSxYKFMpKTskKEYpO3ZhciBCPUooYSxGKTskKEIpO3ZhciBOPShEXkk+PTA/LTE6MSkqTShCWzJdKTsobj5OfHxuPT09TiYmKEZbMF18fEZbMV0pKSYmKGgrPUReST49MD8xOi0xKX19cmV0dXJuKGY8LW98fGY8byYmdWU8LW8pXjEmaH1mdW5jdGlvbiBwZSh0LHIsbixpKXtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIG8scyxsLGM9cihhKSx1PWFlKCksZj1yKHUpLGg9ITEscD17cG9pbnQ6ZCxsaW5lU3RhcnQ6ZyxsaW5lRW5kOnYscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7cC5wb2ludD15LHAubGluZVN0YXJ0PXgscC5saW5lRW5kPWIscz1bXSxvPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7cC5wb2ludD1kLHAubGluZVN0YXJ0PWcscC5saW5lRW5kPXYscz1lLm1lcmdlKHMpO3ZhciB0PWhlKG8saSk7cy5sZW5ndGg/KGh8fChhLnBvbHlnb25TdGFydCgpLGg9ITApLGxlKHMsbWUsdCxuLGEpKTp0JiYoaHx8KGEucG9seWdvblN0YXJ0KCksaD0hMCksYS5saW5lU3RhcnQoKSxuKG51bGwsbnVsbCwxLGEpLGEubGluZUVuZCgpKSxoJiYoYS5wb2x5Z29uRW5kKCksaD0hMSkscz1vPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe2EucG9seWdvblN0YXJ0KCksYS5saW5lU3RhcnQoKSxuKG51bGwsbnVsbCwxLGEpLGEubGluZUVuZCgpLGEucG9seWdvbkVuZCgpfX07ZnVuY3Rpb24gZChlLHIpe3QoZSxyKSYmYS5wb2ludChlLHIpfWZ1bmN0aW9uIG0odCxlKXtjLnBvaW50KHQsZSl9ZnVuY3Rpb24gZygpe3AucG9pbnQ9bSxjLmxpbmVTdGFydCgpfWZ1bmN0aW9uIHYoKXtwLnBvaW50PWQsYy5saW5lRW5kKCl9ZnVuY3Rpb24geSh0LGUpe2wucHVzaChbdCxlXSksZi5wb2ludCh0LGUpfWZ1bmN0aW9uIHgoKXtmLmxpbmVTdGFydCgpLGw9W119ZnVuY3Rpb24gYigpe3kobFswXVswXSxsWzBdWzFdKSxmLmxpbmVFbmQoKTt2YXIgdCxlLHIsbixpPWYuY2xlYW4oKSxjPXUucmVzdWx0KCkscD1jLmxlbmd0aDtpZihsLnBvcCgpLG8ucHVzaChsKSxsPW51bGwscClpZigxJmkpe2lmKChlPShyPWNbMF0pLmxlbmd0aC0xKT4wKXtmb3IoaHx8KGEucG9seWdvblN0YXJ0KCksaD0hMCksYS5saW5lU3RhcnQoKSx0PTA7dDxlOysrdClhLnBvaW50KChuPXJbdF0pWzBdLG5bMV0pO2EubGluZUVuZCgpfX1lbHNlIHA+MSYmMiZpJiZjLnB1c2goYy5wb3AoKS5jb25jYXQoYy5zaGlmdCgpKSkscy5wdXNoKGMuZmlsdGVyKGRlKSl9cmV0dXJuIHB9fWZ1bmN0aW9uIGRlKHQpe3JldHVybiB0Lmxlbmd0aD4xfWZ1bmN0aW9uIG1lKHQsZSl7cmV0dXJuKCh0PXQueClbMF08MD90WzFdLWwtbzpsLXRbMV0pLSgoZT1lLngpWzBdPDA/ZVsxXS1sLW86bC1lWzFdKX12YXIgZ2U9cGUoKGZ1bmN0aW9uKCl7cmV0dXJuITB9KSwoZnVuY3Rpb24odCl7dmFyIGUscj1OYU4sbj1OYU4saT1OYU47cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3QubGluZVN0YXJ0KCksZT0xfSxwb2ludDpmdW5jdGlvbihhLGMpe3ZhciB1PWE+MD9zOi1zLGY9cChhLXIpO3AoZi1zKTxvPyh0LnBvaW50KHIsbj0obitjKS8yPjA/bDotbCksdC5wb2ludChpLG4pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludCh1LG4pLHQucG9pbnQoYSxuKSxlPTApOmkhPT11JiZmPj1zJiYocChyLWkpPG8mJihyLT1pKm8pLHAoYS11KTxvJiYoYS09dSpvKSxuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEscz1fKHQtcik7cmV0dXJuIHAocyk+bz9kKChfKGUpKihhPWcobikpKl8ociktXyhuKSooaT1nKGUpKSpfKHQpKS8oaSphKnMpKTooZStuKS8yfShyLG4sYSxjKSx0LnBvaW50KGksbiksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHUsbiksZT0wKSx0LnBvaW50KHI9YSxuPWMpLGk9dX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLHI9bj1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItZX19fSksKGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpO2lmKG51bGw9PXQpaT1yKmwsbi5wb2ludCgtcyxpKSxuLnBvaW50KDAsaSksbi5wb2ludChzLGkpLG4ucG9pbnQocywwKSxuLnBvaW50KHMsLWkpLG4ucG9pbnQoMCwtaSksbi5wb2ludCgtcywtaSksbi5wb2ludCgtcywwKSxuLnBvaW50KC1zLGkpO2Vsc2UgaWYocCh0WzBdLWVbMF0pPm8pe3ZhciBhPXRbMF08ZVswXT9zOi1zO2k9ciphLzIsbi5wb2ludCgtYSxpKSxuLnBvaW50KDAsaSksbi5wb2ludChhLGkpfWVsc2Ugbi5wb2ludChlWzBdLGVbMV0pfSksWy1zLC1sXSk7ZnVuY3Rpb24gdmUodCl7dmFyIGU9Zyh0KSxyPTYqaCxuPWU+MCxpPXAoZSk+bztmdW5jdGlvbiBhKHQscil7cmV0dXJuIGcodCkqZyhyKT5lfWZ1bmN0aW9uIGwodCxyLG4pe3ZhciBpPVsxLDAsMF0sYT1KKFgodCksWChyKSksbD1aKGEsYSksYz1hWzBdLHU9bC1jKmM7aWYoIXUpcmV0dXJuIW4mJnQ7dmFyIGY9ZSpsL3UsaD0tZSpjL3UsZD1KKGksYSksbT1RKGksZik7SyhtLFEoYSxoKSk7dmFyIGc9ZCx2PVoobSxnKSx5PVooZyxnKSx4PXYqdi15KihaKG0sbSktMSk7aWYoISh4PDApKXt2YXIgYj1UKHgpLF89UShnLCgtdi1iKS95KTtpZihLKF8sbSksXz1XKF8pLCFuKXJldHVybiBfO3ZhciB3LGs9dFswXSxBPXJbMF0sTT10WzFdLFM9clsxXTtBPGsmJih3PWssaz1BLEE9dyk7dmFyIEU9QS1rLEw9cChFLXMpPG87aWYoIUwmJlM8TSYmKHc9TSxNPVMsUz13KSxMfHxFPG8/TD9NK1M+MF5fWzFdPChwKF9bMF0tayk8bz9NOlMpOk08PV9bMV0mJl9bMV08PVM6RT5zXihrPD1fWzBdJiZfWzBdPD1BKSl7dmFyIEM9UShnLCgtditiKS95KTtyZXR1cm4gSyhDLG0pLFtfLFcoQyldfX19ZnVuY3Rpb24gYyhlLHIpe3ZhciBpPW4/dDpzLXQsYT0wO3JldHVybiBlPC1pP2F8PTE6ZT5pJiYoYXw9MikscjwtaT9hfD00OnI+aSYmKGF8PTgpLGF9cmV0dXJuIHBlKGEsKGZ1bmN0aW9uKHQpe3ZhciBlLHIsbyx1LGY7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3U9bz0hMSxmPTF9LHBvaW50OmZ1bmN0aW9uKGgscCl7dmFyIGQsbT1baCxwXSxnPWEoaCxwKSx2PW4/Zz8wOmMoaCxwKTpnP2MoaCsoaDwwP3M6LXMpLHApOjA7aWYoIWUmJih1PW89ZykmJnQubGluZVN0YXJ0KCksZyE9PW8mJighKGQ9bChlLG0pKXx8b2UoZSxkKXx8b2UobSxkKSkmJihtWzJdPTEpLGchPT1vKWY9MCxnPyh0LmxpbmVTdGFydCgpLGQ9bChtLGUpLHQucG9pbnQoZFswXSxkWzFdKSk6KGQ9bChlLG0pLHQucG9pbnQoZFswXSxkWzFdLDIpLHQubGluZUVuZCgpKSxlPWQ7ZWxzZSBpZihpJiZlJiZuXmcpe3ZhciB5O3Ymcnx8ISh5PWwobSxlLCEwKSl8fChmPTAsbj8odC5saW5lU3RhcnQoKSx0LnBvaW50KHlbMF1bMF0seVswXVsxXSksdC5wb2ludCh5WzFdWzBdLHlbMV1bMV0pLHQubGluZUVuZCgpKToodC5wb2ludCh5WzFdWzBdLHlbMV1bMV0pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludCh5WzBdWzBdLHlbMF1bMV0sMykpKX0hZ3x8ZSYmb2UoZSxtKXx8dC5wb2ludChtWzBdLG1bMV0pLGU9bSxvPWcscj12fSxsaW5lRW5kOmZ1bmN0aW9uKCl7byYmdC5saW5lRW5kKCksZT1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBmfCh1JiZvKTw8MX19fSksKGZ1bmN0aW9uKGUsbixpLGEpe25lKGEsdCxyLGksZSxuKX0pLG4/WzAsLXRdOlstcyx0LXNdKX1mdW5jdGlvbiB5ZSh0LHIsbixpKXtmdW5jdGlvbiBhKGUsYSl7cmV0dXJuIHQ8PWUmJmU8PW4mJnI8PWEmJmE8PWl9ZnVuY3Rpb24gcyhlLGEsbyxzKXt2YXIgYz0wLGY9MDtpZihudWxsPT1lfHwoYz1sKGUsbykpIT09KGY9bChhLG8pKXx8dShlLGEpPDBebz4wKWRve3MucG9pbnQoMD09PWN8fDM9PT1jP3Q6bixjPjE/aTpyKX13aGlsZSgoYz0oYytvKzQpJTQpIT09Zik7ZWxzZSBzLnBvaW50KGFbMF0sYVsxXSl9ZnVuY3Rpb24gbChlLGkpe3JldHVybiBwKGVbMF0tdCk8bz9pPjA/MDozOnAoZVswXS1uKTxvP2k+MD8yOjE6cChlWzFdLXIpPG8/aT4wPzE6MDppPjA/MzoyfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdSh0LngsZS54KX1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9bCh0LDEpLG49bChlLDEpO3JldHVybiByIT09bj9yLW46MD09PXI/ZVsxXS10WzFdOjE9PT1yP3RbMF0tZVswXToyPT09cj90WzFdLWVbMV06ZVswXS10WzBdfXJldHVybiBmdW5jdGlvbihvKXt2YXIgbCx1LGYsaCxwLGQsbSxnLHYseSx4LGI9byxfPWFlKCksdz17cG9pbnQ6VCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt3LnBvaW50PWssdSYmdS5wdXNoKGY9W10pO3k9ITAsdj0hMSxtPWc9TmFOfSxsaW5lRW5kOmZ1bmN0aW9uKCl7bCYmKGsoaCxwKSxkJiZ2JiZfLnJlam9pbigpLGwucHVzaChfLnJlc3VsdCgpKSk7dy5wb2ludD1ULHYmJmIubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtiPV8sbD1bXSx1PVtdLHg9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgcj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLHI9MCxuPXUubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBhLG8scz11W3JdLGw9MSxjPXMubGVuZ3RoLGY9c1swXSxoPWZbMF0scD1mWzFdO2w8YzsrK2wpYT1oLG89cCxmPXNbbF0saD1mWzBdLHA9ZlsxXSxvPD1pP3A+aSYmKGgtYSkqKGktbyk+KHAtbykqKHQtYSkmJisrZTpwPD1pJiYoaC1hKSooaS1vKTwocC1vKSoodC1hKSYmLS1lO3JldHVybiBlfSgpLG49eCYmcixhPShsPWUubWVyZ2UobCkpLmxlbmd0aDsobnx8YSkmJihvLnBvbHlnb25TdGFydCgpLG4mJihvLmxpbmVTdGFydCgpLHMobnVsbCxudWxsLDEsbyksby5saW5lRW5kKCkpLGEmJmxlKGwsYyxyLHMsbyksby5wb2x5Z29uRW5kKCkpO2I9byxsPXU9Zj1udWxsfX07ZnVuY3Rpb24gVCh0LGUpe2EodCxlKSYmYi5wb2ludCh0LGUpfWZ1bmN0aW9uIGsoZSxvKXt2YXIgcz1hKGUsbyk7aWYodSYmZi5wdXNoKFtlLG9dKSx5KWg9ZSxwPW8sZD1zLHk9ITEscyYmKGIubGluZVN0YXJ0KCksYi5wb2ludChlLG8pKTtlbHNlIGlmKHMmJnYpYi5wb2ludChlLG8pO2Vsc2V7dmFyIGw9W209TWF0aC5tYXgoLTFlOSxNYXRoLm1pbigxZTksbSkpLGc9TWF0aC5tYXgoLTFlOSxNYXRoLm1pbigxZTksZykpXSxjPVtlPU1hdGgubWF4KC0xZTksTWF0aC5taW4oMWU5LGUpKSxvPU1hdGgubWF4KC0xZTksTWF0aC5taW4oMWU5LG8pKV07IWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxzPXRbMF0sbD10WzFdLGM9MCx1PTEsZj1lWzBdLXMsaD1lWzFdLWw7aWYobz1yLXMsZnx8IShvPjApKXtpZihvLz1mLGY8MCl7aWYobzxjKXJldHVybjtvPHUmJih1PW8pfWVsc2UgaWYoZj4wKXtpZihvPnUpcmV0dXJuO28+YyYmKGM9byl9aWYobz1pLXMsZnx8IShvPDApKXtpZihvLz1mLGY8MCl7aWYobz51KXJldHVybjtvPmMmJihjPW8pfWVsc2UgaWYoZj4wKXtpZihvPGMpcmV0dXJuO288dSYmKHU9byl9aWYobz1uLWwsaHx8IShvPjApKXtpZihvLz1oLGg8MCl7aWYobzxjKXJldHVybjtvPHUmJih1PW8pfWVsc2UgaWYoaD4wKXtpZihvPnUpcmV0dXJuO28+YyYmKGM9byl9aWYobz1hLWwsaHx8IShvPDApKXtpZihvLz1oLGg8MCl7aWYobz51KXJldHVybjtvPmMmJihjPW8pfWVsc2UgaWYoaD4wKXtpZihvPGMpcmV0dXJuO288dSYmKHU9byl9cmV0dXJuIGM+MCYmKHRbMF09cytjKmYsdFsxXT1sK2MqaCksdTwxJiYoZVswXT1zK3UqZixlWzFdPWwrdSpoKSwhMH19fX19KGwsYyx0LHIsbixpKT9zJiYoYi5saW5lU3RhcnQoKSxiLnBvaW50KGUsbykseD0hMSk6KHZ8fChiLmxpbmVTdGFydCgpLGIucG9pbnQobFswXSxsWzFdKSksYi5wb2ludChjWzBdLGNbMV0pLHN8fGIubGluZUVuZCgpLHg9ITEpfW09ZSxnPW8sdj1zfXJldHVybiB3fX12YXIgeGUsYmUsX2Usd2U9cigpLFRlPXtzcGhlcmU6RSxwb2ludDpFLGxpbmVTdGFydDpmdW5jdGlvbigpe1RlLnBvaW50PUFlLFRlLmxpbmVFbmQ9a2V9LGxpbmVFbmQ6RSxwb2x5Z29uU3RhcnQ6RSxwb2x5Z29uRW5kOkV9O2Z1bmN0aW9uIGtlKCl7VGUucG9pbnQ9VGUubGluZUVuZD1FfWZ1bmN0aW9uIEFlKHQsZSl7eGU9dCo9aCxiZT1fKGUqPWgpLF9lPWcoZSksVGUucG9pbnQ9TWV9ZnVuY3Rpb24gTWUodCxlKXt0Kj1oO3ZhciByPV8oZSo9aCksbj1nKGUpLGk9cCh0LXhlKSxhPWcoaSksbz1uKl8oaSkscz1fZSpyLWJlKm4qYSxsPWJlKnIrX2UqbiphO3dlLmFkZChtKFQobypvK3MqcyksbCkpLHhlPXQsYmU9cixfZT1ufWZ1bmN0aW9uIFNlKHQpe3JldHVybiB3ZS5yZXNldCgpLHoodCxUZSksK3dlfXZhciBFZT1bbnVsbCxudWxsXSxMZT17dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6RWV9O2Z1bmN0aW9uIENlKHQsZSl7cmV0dXJuIEVlWzBdPXQsRWVbMV09ZSxTZShMZSl9dmFyIFBlPXtGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9lKHQuZ2VvbWV0cnksZSl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZmVhdHVyZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihPZShyW25dLmdlb21ldHJ5LGUpKXJldHVybiEwO3JldHVybiExfX0sSWU9e1NwaGVyZTpmdW5jdGlvbigpe3JldHVybiEwfSxQb2ludDpmdW5jdGlvbih0LGUpe3JldHVybiB6ZSh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZih6ZShyW25dLGUpKXJldHVybiEwO3JldHVybiExfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIERlKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYoRGUocltuXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe3JldHVybiBSZSh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKFJlKHJbbl0sZSkpcmV0dXJuITA7cmV0dXJuITF9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihPZShyW25dLGUpKXJldHVybiEwO3JldHVybiExfX07ZnVuY3Rpb24gT2UodCxlKXtyZXR1cm4hKCF0fHwhSWUuaGFzT3duUHJvcGVydHkodC50eXBlKSkmJkllW3QudHlwZV0odCxlKX1mdW5jdGlvbiB6ZSh0LGUpe3JldHVybiAwPT09Q2UodCxlKX1mdW5jdGlvbiBEZSh0LGUpe2Zvcih2YXIgcixuLGksYT0wLG89dC5sZW5ndGg7YTxvO2ErKyl7aWYoMD09PShuPUNlKHRbYV0sZSkpKXJldHVybiEwO2lmKGE+MCYmKGk9Q2UodFthXSx0W2EtMV0pKT4wJiZyPD1pJiZuPD1pJiYocituLWkpKigxLU1hdGgucG93KChyLW4pL2ksMikpPDFlLTEyKmkpcmV0dXJuITA7cj1ufXJldHVybiExfWZ1bmN0aW9uIFJlKHQsZSl7cmV0dXJuISFoZSh0Lm1hcChGZSksQmUoZSkpfWZ1bmN0aW9uIEZlKHQpe3JldHVybih0PXQubWFwKEJlKSkucG9wKCksdH1mdW5jdGlvbiBCZSh0KXtyZXR1cm5bdFswXSpoLHRbMV0qaF19ZnVuY3Rpb24gTmUodCxyLG4pe3ZhciBpPWUucmFuZ2UodCxyLW8sbikuY29uY2F0KHIpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVyblt0LGVdfSkpfX1mdW5jdGlvbiBqZSh0LHIsbil7dmFyIGk9ZS5yYW5nZSh0LHItbyxuKS5jb25jYXQocik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuW2UsdF19KSl9fWZ1bmN0aW9uIFVlKCl7dmFyIHQscixuLGksYSxzLGwsYyx1LGYsaCxkLG09MTAsZz1tLHk9OTAseD0zNjAsYj0yLjU7ZnVuY3Rpb24gXygpe3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOncoKX19ZnVuY3Rpb24gdygpe3JldHVybiBlLnJhbmdlKHYoaS95KSp5LG4seSkubWFwKGgpLmNvbmNhdChlLnJhbmdlKHYoYy94KSp4LGwseCkubWFwKGQpKS5jb25jYXQoZS5yYW5nZSh2KHIvbSkqbSx0LG0pLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHAodCV5KT5vfSkpLm1hcCh1KSkuY29uY2F0KGUucmFuZ2UodihzL2cpKmcsYSxnKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBwKHQleCk+b30pKS5tYXAoZikpfXJldHVybiBfLmxpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIHcoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczp0fX0pKX0sXy5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltoKGkpLmNvbmNhdChkKGwpLnNsaWNlKDEpLGgobikucmV2ZXJzZSgpLnNsaWNlKDEpLGQoYykucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSxfLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9fLmV4dGVudE1ham9yKHQpLmV4dGVudE1pbm9yKHQpOl8uZXh0ZW50TWlub3IoKX0sXy5leHRlbnRNYWpvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdFswXVswXSxuPSt0WzFdWzBdLGM9K3RbMF1bMV0sbD0rdFsxXVsxXSxpPm4mJih0PWksaT1uLG49dCksYz5sJiYodD1jLGM9bCxsPXQpLF8ucHJlY2lzaW9uKGIpKTpbW2ksY10sW24sbF1dfSxfLmV4dGVudE1pbm9yPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStlWzBdWzBdLHQ9K2VbMV1bMF0scz0rZVswXVsxXSxhPStlWzFdWzFdLHI+dCYmKGU9cixyPXQsdD1lKSxzPmEmJihlPXMscz1hLGE9ZSksXy5wcmVjaXNpb24oYikpOltbcixzXSxbdCxhXV19LF8uc3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9fLnN0ZXBNYWpvcih0KS5zdGVwTWlub3IodCk6Xy5zdGVwTWlub3IoKX0sXy5zdGVwTWFqb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9K3RbMF0seD0rdFsxXSxfKTpbeSx4XX0sXy5zdGVwTWlub3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09K3RbMF0sZz0rdFsxXSxfKTpbbSxnXX0sXy5wcmVjaXNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9K2UsdT1OZShzLGEsOTApLGY9amUocix0LGIpLGg9TmUoYyxsLDkwKSxkPWplKGksbixiKSxfKTpifSxfLmV4dGVudE1ham9yKFtbLTE4MCwtOTArb10sWzE4MCw5MC1vXV0pLmV4dGVudE1pbm9yKFtbLTE4MCwtODAtb10sWzE4MCw4MCtvXV0pfWZ1bmN0aW9uIFZlKHQpe3JldHVybiB0fXZhciBIZSxxZSxHZSxZZSxXZT1yKCksWGU9cigpLFplPXtwb2ludDpFLGxpbmVTdGFydDpFLGxpbmVFbmQ6RSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtaZS5saW5lU3RhcnQ9SmUsWmUubGluZUVuZD0kZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1plLmxpbmVTdGFydD1aZS5saW5lRW5kPVplLnBvaW50PUUsV2UuYWRkKHAoWGUpKSxYZS5yZXNldCgpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1XZS8yO3JldHVybiBXZS5yZXNldCgpLHR9fTtmdW5jdGlvbiBKZSgpe1plLnBvaW50PUtlfWZ1bmN0aW9uIEtlKHQsZSl7WmUucG9pbnQ9UWUsSGU9R2U9dCxxZT1ZZT1lfWZ1bmN0aW9uIFFlKHQsZSl7WGUuYWRkKFllKnQtR2UqZSksR2U9dCxZZT1lfWZ1bmN0aW9uICRlKCl7UWUoSGUscWUpfXZhciB0cj0xLzAsZXI9dHIscnI9LXRyLG5yPXJyLGlyPXtwb2ludDpmdW5jdGlvbih0LGUpe3Q8dHImJih0cj10KTt0PnJyJiYocnI9dCk7ZTxlciYmKGVyPWUpO2U+bnImJihucj1lKX0sbGluZVN0YXJ0OkUsbGluZUVuZDpFLHBvbHlnb25TdGFydDpFLHBvbHlnb25FbmQ6RSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1bW3RyLGVyXSxbcnIsbnJdXTtyZXR1cm4gcnI9bnI9LShlcj10cj0xLzApLHR9fTt2YXIgYXIsb3Isc3IsbHIsY3I9MCx1cj0wLGZyPTAsaHI9MCxwcj0wLGRyPTAsbXI9MCxncj0wLHZyPTAseXI9e3BvaW50OnhyLGxpbmVTdGFydDpicixsaW5lRW5kOlRyLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3lyLmxpbmVTdGFydD1rcix5ci5saW5lRW5kPUFyfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7eXIucG9pbnQ9eHIseXIubGluZVN0YXJ0PWJyLHlyLmxpbmVFbmQ9VHJ9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PXZyP1ttci92cixnci92cl06ZHI/W2hyL2RyLHByL2RyXTpmcj9bY3IvZnIsdXIvZnJdOltOYU4sTmFOXTtyZXR1cm4gY3I9dXI9ZnI9aHI9cHI9ZHI9bXI9Z3I9dnI9MCx0fX07ZnVuY3Rpb24geHIodCxlKXtjcis9dCx1cis9ZSwrK2ZyfWZ1bmN0aW9uIGJyKCl7eXIucG9pbnQ9X3J9ZnVuY3Rpb24gX3IodCxlKXt5ci5wb2ludD13cix4cihzcj10LGxyPWUpfWZ1bmN0aW9uIHdyKHQsZSl7dmFyIHI9dC1zcixuPWUtbHIsaT1UKHIqcituKm4pO2hyKz1pKihzcit0KS8yLHByKz1pKihscitlKS8yLGRyKz1pLHhyKHNyPXQsbHI9ZSl9ZnVuY3Rpb24gVHIoKXt5ci5wb2ludD14cn1mdW5jdGlvbiBrcigpe3lyLnBvaW50PU1yfWZ1bmN0aW9uIEFyKCl7U3IoYXIsb3IpfWZ1bmN0aW9uIE1yKHQsZSl7eXIucG9pbnQ9U3IseHIoYXI9c3I9dCxvcj1scj1lKX1mdW5jdGlvbiBTcih0LGUpe3ZhciByPXQtc3Isbj1lLWxyLGk9VChyKnIrbipuKTtocis9aSooc3IrdCkvMixwcis9aSoobHIrZSkvMixkcis9aSxtcis9KGk9bHIqdC1zciplKSooc3IrdCksZ3IrPWkqKGxyK2UpLHZyKz0zKmkseHIoc3I9dCxscj1lKX1mdW5jdGlvbiBFcih0KXt0aGlzLl9jb250ZXh0PXR9RXIucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmFkaXVzPXQsdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5tb3ZlVG8odCt0aGlzLl9yYWRpdXMsZSksdGhpcy5fY29udGV4dC5hcmModCxlLHRoaXMuX3JhZGl1cywwLHUpfX0scmVzdWx0OkV9O3ZhciBMcixDcixQcixJcixPcix6cj1yKCksRHI9e3BvaW50OkUsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7RHIucG9pbnQ9UnJ9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtMciYmRnIoQ3IsUHIpLERyLnBvaW50PUV9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0xyPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7THI9bnVsbH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9K3pyO3JldHVybiB6ci5yZXNldCgpLHR9fTtmdW5jdGlvbiBScih0LGUpe0RyLnBvaW50PUZyLENyPUlyPXQsUHI9T3I9ZX1mdW5jdGlvbiBGcih0LGUpe0lyLT10LE9yLT1lLHpyLmFkZChUKElyKklyK09yKk9yKSksSXI9dCxPcj1lfWZ1bmN0aW9uIEJyKCl7dGhpcy5fc3RyaW5nPVtdfWZ1bmN0aW9uIE5yKHQpe3JldHVybiJtMCwiK3QrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrLTIqdCsiYSIrdCsiLCIrdCsiIDAgMSwxIDAsIisyKnQrInoifWZ1bmN0aW9uIGpyKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1uZXcgVXI7Zm9yKHZhciBuIGluIHQpcltuXT10W25dO3JldHVybiByLnN0cmVhbT1lLHJ9fWZ1bmN0aW9uIFVyKCl7fWZ1bmN0aW9uIFZyKHQsZSxyKXt2YXIgbj10LmNsaXBFeHRlbnQmJnQuY2xpcEV4dGVudCgpO3JldHVybiB0LnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxudWxsIT1uJiZ0LmNsaXBFeHRlbnQobnVsbCkseihyLHQuc3RyZWFtKGlyKSksZShpci5yZXN1bHQoKSksbnVsbCE9biYmdC5jbGlwRXh0ZW50KG4pLHR9ZnVuY3Rpb24gSHIodCxlLHIpe3JldHVybiBWcih0LChmdW5jdGlvbihyKXt2YXIgbj1lWzFdWzBdLWVbMF1bMF0saT1lWzFdWzFdLWVbMF1bMV0sYT1NYXRoLm1pbihuLyhyWzFdWzBdLXJbMF1bMF0pLGkvKHJbMV1bMV0tclswXVsxXSkpLG89K2VbMF1bMF0rKG4tYSooclsxXVswXStyWzBdWzBdKSkvMixzPStlWzBdWzFdKyhpLWEqKHJbMV1bMV0rclswXVsxXSkpLzI7dC5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtvLHNdKX0pLHIpfWZ1bmN0aW9uIHFyKHQsZSxyKXtyZXR1cm4gSHIodCxbWzAsMF0sZV0scil9ZnVuY3Rpb24gR3IodCxlLHIpe3JldHVybiBWcih0LChmdW5jdGlvbihyKXt2YXIgbj0rZSxpPW4vKHJbMV1bMF0tclswXVswXSksYT0obi1pKihyWzFdWzBdK3JbMF1bMF0pKS8yLG89LWkqclswXVsxXTt0LnNjYWxlKDE1MCppKS50cmFuc2xhdGUoW2Esb10pfSkscil9ZnVuY3Rpb24gWXIodCxlLHIpe3JldHVybiBWcih0LChmdW5jdGlvbihyKXt2YXIgbj0rZSxpPW4vKHJbMV1bMV0tclswXVsxXSksYT0taSpyWzBdWzBdLG89KG4taSooclsxXVsxXStyWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCppKS50cmFuc2xhdGUoW2Esb10pfSkscil9QnIucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOk5yKDQuNSkscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpIT09dGhpcy5fcmFkaXVzJiYodGhpcy5fcmFkaXVzPXQsdGhpcy5fY2lyY2xlPW51bGwpLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX3N0cmluZy5wdXNoKCJaIiksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3N0cmluZy5wdXNoKCJNIix0LCIsIixlKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9zdHJpbmcucHVzaCgiTCIsdCwiLCIsZSk7YnJlYWs7ZGVmYXVsdDpudWxsPT10aGlzLl9jaXJjbGUmJih0aGlzLl9jaXJjbGU9TnIodGhpcy5fcmFkaXVzKSksdGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUsdGhpcy5fY2lyY2xlKX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciB0PXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLHR9cmV0dXJuIG51bGx9fSxVci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlVyLHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5zdHJlYW0ucG9pbnQodCxlKX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19O3ZhciBXcj1nKDMwKmgpO2Z1bmN0aW9uIFhyKHQsZSl7cmV0dXJuK2U/ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKG4saSxhLHMsbCxjLHUsZixoLGQsZyx2LHkseCl7dmFyIGI9dS1uLF89Zi1pLHc9YipiK18qXztpZih3PjQqZSYmeS0tKXt2YXIgaz1zK2QsQT1sK2csUz1jK3YsRT1UKGsqaytBKkErUypTKSxMPU0oUy89RSksQz1wKHAoUyktMSk8b3x8cChhLWgpPG8/KGEraCkvMjptKEEsayksUD10KEMsTCksST1QWzBdLE89UFsxXSx6PUktbixEPU8taSxSPV8qei1iKkQ7KFIqUi93PmV8fHAoKGIqeitfKkQpL3ctLjUpPi4zfHxzKmQrbCpnK2MqdjxXcikmJihyKG4saSxhLHMsbCxjLEksTyxDLGsvPUUsQS89RSxTLHkseCkseC5wb2ludChJLE8pLHIoSSxPLEMsayxBLFMsdSxmLGgsZCxnLHYseSx4KSl9fXJldHVybiBmdW5jdGlvbihlKXt2YXIgbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsbT17cG9pbnQ6ZyxsaW5lU3RhcnQ6dixsaW5lRW5kOngscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ZS5wb2x5Z29uU3RhcnQoKSxtLmxpbmVTdGFydD1ifSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZS5wb2x5Z29uRW5kKCksbS5saW5lU3RhcnQ9dn19O2Z1bmN0aW9uIGcocixuKXtyPXQocixuKSxlLnBvaW50KHJbMF0sclsxXSl9ZnVuY3Rpb24gdigpe3U9TmFOLG0ucG9pbnQ9eSxlLmxpbmVTdGFydCgpfWZ1bmN0aW9uIHkobixpKXt2YXIgYT1YKFtuLGldKSxvPXQobixpKTtyKHUsZixjLGgscCxkLHU9b1swXSxmPW9bMV0sYz1uLGg9YVswXSxwPWFbMV0sZD1hWzJdLDE2LGUpLGUucG9pbnQodSxmKX1mdW5jdGlvbiB4KCl7bS5wb2ludD1nLGUubGluZUVuZCgpfWZ1bmN0aW9uIGIoKXt2KCksbS5wb2ludD1fLG0ubGluZUVuZD13fWZ1bmN0aW9uIF8odCxlKXt5KG49dCxlKSxpPXUsYT1mLG89aCxzPXAsbD1kLG0ucG9pbnQ9eX1mdW5jdGlvbiB3KCl7cih1LGYsYyxoLHAsZCxpLGEsbixvLHMsbCwxNixlKSxtLmxpbmVFbmQ9eCx4KCl9cmV0dXJuIG19fSh0LGUpOmZ1bmN0aW9uKHQpe3JldHVybiBqcih7cG9pbnQ6ZnVuY3Rpb24oZSxyKXtlPXQoZSxyKSx0aGlzLnN0cmVhbS5wb2ludChlWzBdLGVbMV0pfX0pfSh0KX12YXIgWnI9anIoe3BvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5zdHJlYW0ucG9pbnQodCpoLGUqaCl9fSk7ZnVuY3Rpb24gSnIodCxlLHIsbixpKXtmdW5jdGlvbiBhKGEsbyl7cmV0dXJuW2UrdCooYSo9biksci10KihvKj1pKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKGEsbyl7cmV0dXJuWyhhLWUpL3Qqbiwoci1vKS90KmldfSxhfWZ1bmN0aW9uIEtyKHQsZSxyLG4saSxhKXt2YXIgbz1nKGEpLHM9XyhhKSxsPW8qdCxjPXMqdCx1PW8vdCxmPXMvdCxoPShzKnItbyplKS90LHA9KHMqZStvKnIpL3Q7ZnVuY3Rpb24gZCh0LGEpe3JldHVybltsKih0Kj1uKS1jKihhKj1pKStlLHItYyp0LWwqYV19cmV0dXJuIGQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW24qKHUqdC1mKmUraCksaSoocC1mKnQtdSplKV19LGR9ZnVuY3Rpb24gUXIodCl7cmV0dXJuICRyKChmdW5jdGlvbigpe3JldHVybiB0fSkpKCl9ZnVuY3Rpb24gJHIodCl7dmFyIGUscixuLGksYSxvLHMsbCxjLHUscD0xNTAsZD00ODAsbT0yNTAsZz0wLHY9MCx5PTAseD0wLGI9MCxfPTAsdz0xLGs9MSxBPW51bGwsTT1nZSxTPW51bGwsRT1WZSxMPS41O2Z1bmN0aW9uIEModCl7cmV0dXJuIGwodFswXSpoLHRbMV0qaCl9ZnVuY3Rpb24gUCh0KXtyZXR1cm4odD1sLmludmVydCh0WzBdLHRbMV0pKSYmW3RbMF0qZix0WzFdKmZdfWZ1bmN0aW9uIEkoKXt2YXIgdD1LcihwLDAsMCx3LGssXykuYXBwbHkobnVsbCxlKGcsdikpLG49KF8/S3I6SnIpKHAsZC10WzBdLG0tdFsxXSx3LGssXyk7cmV0dXJuIHI9UXQoeSx4LGIpLHM9SnQoZSxuKSxsPUp0KHIscyksbz1YcihzLEwpLE8oKX1mdW5jdGlvbiBPKCl7cmV0dXJuIGM9dT1udWxsLEN9cmV0dXJuIEMuc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBjJiZ1PT09dD9jOmM9WnIoZnVuY3Rpb24odCl7cmV0dXJuIGpyKHtwb2ludDpmdW5jdGlvbihlLHIpe3ZhciBuPXQoZSxyKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoblswXSxuWzFdKX19KX0ocikoTShvKEUodT10KSkpKSl9LEMucHJlY2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT10LEE9dm9pZCAwLE8oKSk6TX0sQy5wb3N0Y2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT10LFM9bj1pPWE9bnVsbCxPKCkpOkV9LEMuY2xpcEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPSt0P3ZlKEE9dCpoKTooQT1udWxsLGdlKSxPKCkpOkEqZn0sQy5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPW51bGw9PXQ/KFM9bj1pPWE9bnVsbCxWZSk6eWUoUz0rdFswXVswXSxuPSt0WzBdWzFdLGk9K3RbMV1bMF0sYT0rdFsxXVsxXSksTygpKTpudWxsPT1TP251bGw6W1tTLG5dLFtpLGFdXX0sQy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0rdCxJKCkpOnB9LEMudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0WzBdLG09K3RbMV0sSSgpKTpbZCxtXX0sQy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9dFswXSUzNjAqaCx2PXRbMV0lMzYwKmgsSSgpKTpbZypmLHYqZl19LEMucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PXRbMF0lMzYwKmgseD10WzFdJTM2MCpoLGI9dC5sZW5ndGg+Mj90WzJdJTM2MCpoOjAsSSgpKTpbeSpmLHgqZixiKmZdfSxDLmFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPXQlMzYwKmgsSSgpKTpfKmZ9LEMucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9dD8tMToxLEkoKSk6dzwwfSxDLnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPXQ/LTE6MSxJKCkpOms8MH0sQy5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89WHIocyxMPXQqdCksTygpKTpUKEwpfSxDLmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3JldHVybiBIcihDLHQsZSl9LEMuZml0U2l6ZT1mdW5jdGlvbih0LGUpe3JldHVybiBxcihDLHQsZSl9LEMuZml0V2lkdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gR3IoQyx0LGUpfSxDLmZpdEhlaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBZcihDLHQsZSl9LGZ1bmN0aW9uKCl7cmV0dXJuIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksQy5pbnZlcnQ9ZS5pbnZlcnQmJlAsSSgpfX1mdW5jdGlvbiB0bih0KXt2YXIgZT0wLHI9cy8zLG49JHIodCksaT1uKGUscik7cmV0dXJuIGkucGFyYWxsZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oZT10WzBdKmgscj10WzFdKmgpOltlKmYscipmXX0saX1mdW5jdGlvbiBlbih0LGUpe3ZhciByPV8odCksbj0ocitfKGUpKS8yO2lmKHAobik8bylyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zyh0KTtmdW5jdGlvbiByKHQscil7cmV0dXJuW3QqZSxfKHIpL2VdfXJldHVybiByLmludmVydD1mdW5jdGlvbih0LHIpe3JldHVyblt0L2UsTShyKmUpXX0scn0odCk7dmFyIGk9MStyKigyKm4tciksYT1UKGkpL247ZnVuY3Rpb24gbCh0LGUpe3ZhciByPVQoaS0yKm4qXyhlKSkvbjtyZXR1cm5bcipfKHQqPW4pLGEtcipnKHQpXX1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1hLWUsbz1tKHQscChyKSkqdyhyKTtyZXR1cm4gcipuPDAmJihvLT1zKncodCkqdyhyKSksW28vbixNKChpLSh0KnQrcipyKSpuKm4pLygyKm4pKV19LGx9ZnVuY3Rpb24gcm4oKXtyZXR1cm4gdG4oZW4pLnNjYWxlKDE1NS40MjQpLmNlbnRlcihbMCwzMy42NDQyXSl9ZnVuY3Rpb24gbm4oKXtyZXR1cm4gcm4oKS5wYXJhbGxlbHMoWzI5LjUsNDUuNV0pLnNjYWxlKDEwNzApLnRyYW5zbGF0ZShbNDgwLDI1MF0pLnJvdGF0ZShbOTYsMF0pLmNlbnRlcihbLS42LDM4LjddKX1mdW5jdGlvbiBhbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj1nKGUpLGk9ZyhyKSxhPXQobippKTtyZXR1cm5bYSppKl8oZSksYSpfKHIpXX19ZnVuY3Rpb24gb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG49VChlKmUrcipyKSxpPXQobiksYT1fKGkpLG89ZyhpKTtyZXR1cm5bbShlKmEsbipvKSxNKG4mJnIqYS9uKV19fXZhciBzbj1hbigoZnVuY3Rpb24odCl7cmV0dXJuIFQoMi8oMSt0KSl9KSk7c24uaW52ZXJ0PW9uKChmdW5jdGlvbih0KXtyZXR1cm4gMipNKHQvMil9KSk7dmFyIGxuPWFuKChmdW5jdGlvbih0KXtyZXR1cm4odD1BKHQpKSYmdC9fKHQpfSkpO2Z1bmN0aW9uIGNuKHQsZSl7cmV0dXJuW3QseChrKChsK2UpLzIpKV19ZnVuY3Rpb24gdW4odCl7dmFyIGUscixuLGk9UXIodCksYT1pLmNlbnRlcixvPWkuc2NhbGUsbD1pLnRyYW5zbGF0ZSxjPWkuY2xpcEV4dGVudCx1PW51bGw7ZnVuY3Rpb24gZigpe3ZhciBhPXMqbygpLGw9aShyZShpLnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gYyhudWxsPT11P1tbbFswXS1hLGxbMV0tYV0sW2xbMF0rYSxsWzFdK2FdXTp0PT09Y24/W1tNYXRoLm1heChsWzBdLWEsdSksZV0sW01hdGgubWluKGxbMF0rYSxyKSxuXV06W1t1LE1hdGgubWF4KGxbMV0tYSxlKV0sW3IsTWF0aC5taW4obFsxXSthLG4pXV0pfXJldHVybiBpLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvKHQpLGYoKSk6bygpfSxpLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obCh0KSxmKCkpOmwoKX0saS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEodCksZigpKTphKCl9LGkuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD91PWU9cj1uPW51bGw6KHU9K3RbMF1bMF0sZT0rdFswXVsxXSxyPSt0WzFdWzBdLG49K3RbMV1bMV0pLGYoKSk6bnVsbD09dT9udWxsOltbdSxlXSxbcixuXV19LGYoKX1mdW5jdGlvbiBmbih0KXtyZXR1cm4gaygobCt0KS8yKX1mdW5jdGlvbiBobih0LGUpe3ZhciByPWcodCksbj10PT09ZT9fKHQpOngoci9nKGUpKS94KGZuKGUpL2ZuKHQpKSxpPXIqYihmbih0KSxuKS9uO2lmKCFuKXJldHVybiBjbjtmdW5jdGlvbiBhKHQsZSl7aT4wP2U8LWwrbyYmKGU9LWwrbyk6ZT5sLW8mJihlPWwtbyk7dmFyIHI9aS9iKGZuKGUpLG4pO3JldHVybltyKl8obip0KSxpLXIqZyhuKnQpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1pLWUsYT13KG4pKlQodCp0K3Iqciksbz1tKHQscChyKSkqdyhyKTtyZXR1cm4gcipuPDAmJihvLT1zKncodCkqdyhyKSksW28vbiwyKmQoYihpL2EsMS9uKSktbF19LGF9ZnVuY3Rpb24gcG4odCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiBkbih0LGUpe3ZhciByPWcodCksbj10PT09ZT9fKHQpOihyLWcoZSkpLyhlLXQpLGk9ci9uK3Q7aWYocChuKTxvKXJldHVybiBwbjtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9aS1lLGE9bip0O3JldHVybltyKl8oYSksaS1yKmcoYSldfXJldHVybiBhLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWktZSxhPW0odCxwKHIpKSp3KHIpO3JldHVybiByKm48MCYmKGEtPXMqdyh0KSp3KHIpKSxbYS9uLGktdyhuKSpUKHQqdCtyKnIpXX0sYX1sbi5pbnZlcnQ9b24oKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLGNuLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIqZCh5KGUpKS1sXX0scG4uaW52ZXJ0PXBuO3ZhciBtbj0xLjM0MDI2NCxnbj0tLjA4MTEwNix2bj04OTNlLTYseW49LjAwMzc5Nix4bj1UKDMpLzI7ZnVuY3Rpb24gYm4odCxlKXt2YXIgcj1NKHhuKl8oZSkpLG49cipyLGk9bipuKm47cmV0dXJuW3QqZyhyKS8oeG4qKG1uKzMqZ24qbitpKig3KnZuKzkqeW4qbikpKSxyKihtbitnbipuK2kqKHZuK3luKm4pKV19ZnVuY3Rpb24gX24odCxlKXt2YXIgcj1nKGUpLG49Zyh0KSpyO3JldHVybltyKl8odCkvbixfKGUpL25dfWZ1bmN0aW9uIHduKHQsZSl7dmFyIHI9ZSplLG49cipyO3JldHVyblt0KiguODcwNy0uMTMxOTc5KnIrbioobiooLjAwMzk3MSpyLS4wMDE1MjkqbiktLjAxMzc5MSkpLGUqKDEuMDA3MjI2K3IqKC4wMTUwODUrbiooLjAyODg3NCpyLS4wNDQ0NzUtLjAwNTkxNipuKSkpXX1mdW5jdGlvbiBUbih0LGUpe3JldHVybltnKGUpKl8odCksXyhlKV19ZnVuY3Rpb24ga24odCxlKXt2YXIgcj1nKGUpLG49MStnKHQpKnI7cmV0dXJuW3IqXyh0KS9uLF8oZSkvbl19ZnVuY3Rpb24gQW4odCxlKXtyZXR1cm5beChrKChsK2UpLzIpKSwtdF19Ym4uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49ZSxpPW4qbixhPWkqaSppLG89MDtvPDEyJiYoYT0oaT0obi09cj0obioobW4rZ24qaSthKih2bit5bippKSktZSkvKG1uKzMqZ24qaSthKig3KnZuKzkqeW4qaSkpKSpuKSppKmksIShwKHIpPDFlLTEyKSk7KytvKTtyZXR1cm5beG4qdCoobW4rMypnbippK2EqKDcqdm4rOSp5bippKSkvZyhuKSxNKF8obikveG4pXX0sX24uaW52ZXJ0PW9uKGQpLHduLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByLG49ZSxpPTI1O2Rve3ZhciBhPW4qbixzPWEqYTtuLT1yPShuKigxLjAwNzIyNithKiguMDE1MDg1K3MqKC4wMjg4NzQqYS0uMDQ0NDc1LS4wMDU5MTYqcykpKS1lKS8oMS4wMDcyMjYrYSooLjA0NTI1NStzKiguMjU5ODY2KmEtLjMxMTMyNS0uMDA1OTE2KjExKnMpKSl9d2hpbGUocChyKT5vJiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhhPW4qbikqKGEqKGEqYSphKiguMDAzOTcxLS4wMDE1MjkqYSktLjAxMzc5MSktLjEzMTk3OSkpLG5dfSxUbi5pbnZlcnQ9b24oTSksa24uaW52ZXJ0PW9uKChmdW5jdGlvbih0KXtyZXR1cm4gMipkKHQpfSkpLEFuLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblstZSwyKmQoeSh0KSktbF19LHQuZ2VvQWxiZXJzPW5uLHQuZ2VvQWxiZXJzVXNhPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4saSxhLHM9bm4oKSxsPXJuKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxjPXJuKCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLHU9e3BvaW50OmZ1bmN0aW9uKHQsZSl7YT1bdCxlXX19O2Z1bmN0aW9uIGYodCl7dmFyIGU9dFswXSxvPXRbMV07cmV0dXJuIGE9bnVsbCxyLnBvaW50KGUsbyksYXx8KG4ucG9pbnQoZSxvKSxhKXx8KGkucG9pbnQoZSxvKSxhKX1mdW5jdGlvbiBoKCl7cmV0dXJuIHQ9ZT1udWxsLGZ9cmV0dXJuIGYuaW52ZXJ0PWZ1bmN0aW9uKHQpe3ZhciBlPXMuc2NhbGUoKSxyPXMudHJhbnNsYXRlKCksbj0odFswXS1yWzBdKS9lLGk9KHRbMV0tclsxXSkvZTtyZXR1cm4oaT49LjEyJiZpPC4yMzQmJm4+PS0uNDI1JiZuPC0uMjE0P2w6aT49LjE2NiYmaTwuMjM0JiZuPj0tLjIxNCYmbjwtLjExNT9jOnMpLmludmVydCh0KX0sZi5zdHJlYW09ZnVuY3Rpb24ocil7cmV0dXJuIHQmJmU9PT1yP3Q6KG49W3Muc3RyZWFtKGU9ciksbC5zdHJlYW0ociksYy5zdHJlYW0ocildLGk9bi5sZW5ndGgsdD17cG9pbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9LTE7KytyPGk7KW5bcl0ucG9pbnQodCxlKX0sc3BoZXJlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOyluW3RdLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KW5bdF0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KW5bdF0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KW5bdF0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KW5bdF0ucG9seWdvbkVuZCgpfX0pO3ZhciBuLGl9LGYucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzLnByZWNpc2lvbih0KSxsLnByZWNpc2lvbih0KSxjLnByZWNpc2lvbih0KSxoKCkpOnMucHJlY2lzaW9uKCl9LGYuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHMuc2NhbGUodCksbC5zY2FsZSguMzUqdCksYy5zY2FsZSh0KSxmLnRyYW5zbGF0ZShzLnRyYW5zbGF0ZSgpKSk6cy5zY2FsZSgpfSxmLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcy50cmFuc2xhdGUoKTt2YXIgZT1zLnNjYWxlKCksYT0rdFswXSxmPSt0WzFdO3JldHVybiByPXMudHJhbnNsYXRlKHQpLmNsaXBFeHRlbnQoW1thLS40NTUqZSxmLS4yMzgqZV0sW2ErLjQ1NSplLGYrLjIzOCplXV0pLnN0cmVhbSh1KSxuPWwudHJhbnNsYXRlKFthLS4zMDcqZSxmKy4yMDEqZV0pLmNsaXBFeHRlbnQoW1thLS40MjUqZStvLGYrLjEyKmUrb10sW2EtLjIxNCplLW8sZisuMjM0KmUtb11dKS5zdHJlYW0odSksaT1jLnRyYW5zbGF0ZShbYS0uMjA1KmUsZisuMjEyKmVdKS5jbGlwRXh0ZW50KFtbYS0uMjE0KmUrbyxmKy4xNjYqZStvXSxbYS0uMTE1KmUtbyxmKy4yMzQqZS1vXV0pLnN0cmVhbSh1KSxoKCl9LGYuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEhyKGYsdCxlKX0sZi5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHFyKGYsdCxlKX0sZi5maXRXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiBHcihmLHQsZSl9LGYuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFlyKGYsdCxlKX0sZi5zY2FsZSgxMDcwKX0sdC5nZW9BcmVhPWZ1bmN0aW9uKHQpe3JldHVybiBVLnJlc2V0KCkseih0LFYpLDIqVX0sdC5nZW9BemltdXRoYWxFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gUXIoc24pLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE3OS45OTkpfSx0Lmdlb0F6aW11dGhhbEVxdWFsQXJlYVJhdz1zbix0Lmdlb0F6aW11dGhhbEVxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIFFyKGxuKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTc5Ljk5OSl9LHQuZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXc9bG4sdC5nZW9Cb3VuZHM9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHM7aWYobnQ9cnQ9LSh0dD1ldD0xLzApLGx0PVtdLHoodCxTdCkscj1sdC5sZW5ndGgpe2ZvcihsdC5zb3J0KFJ0KSxlPTEsYT1bbj1sdFswXV07ZTxyOysrZSlGdChuLChpPWx0W2VdKVswXSl8fEZ0KG4saVsxXSk/KER0KG5bMF0saVsxXSk+RHQoblswXSxuWzFdKSYmKG5bMV09aVsxXSksRHQoaVswXSxuWzFdKT5EdChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6YS5wdXNoKG49aSk7Zm9yKG89LTEvMCxlPTAsbj1hW3I9YS5sZW5ndGgtMV07ZTw9cjtuPWksKytlKWk9YVtlXSwocz1EdChuWzFdLGlbMF0pKT5vJiYobz1zLHR0PWlbMF0scnQ9blsxXSl9cmV0dXJuIGx0PWN0PW51bGwsdHQ9PT0xLzB8fGV0PT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW3R0LGV0XSxbcnQsbnRdXX0sdC5nZW9DZW50cm9pZD1mdW5jdGlvbih0KXt1dD1mdD1odD1wdD1kdD1tdD1ndD12dD15dD14dD1idD0wLHoodCxCdCk7dmFyIGU9eXQscj14dCxuPWJ0LGk9ZSplK3IqcituKm47cmV0dXJuIGk8MWUtMTImJihlPW10LHI9Z3Qsbj12dCxmdDxvJiYoZT1odCxyPXB0LG49ZHQpLChpPWUqZStyKnIrbipuKTwxZS0xMik/W05hTixOYU5dOlttKHIsZSkqZixNKG4vVChpKSkqZl19LHQuZ2VvQ2lyY2xlPWZ1bmN0aW9uKCl7dmFyIHQsZSxyPVp0KFswLDBdKSxuPVp0KDkwKSxpPVp0KDYpLGE9e3BvaW50OmZ1bmN0aW9uKHIsbil7dC5wdXNoKHI9ZShyLG4pKSxyWzBdKj1mLHJbMV0qPWZ9fTtmdW5jdGlvbiBvKCl7dmFyIG89ci5hcHBseSh0aGlzLGFyZ3VtZW50cykscz1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSpoLGw9aS5hcHBseSh0aGlzLGFyZ3VtZW50cykqaDtyZXR1cm4gdD1bXSxlPVF0KC1vWzBdKmgsLW9bMV0qaCwwKS5pbnZlcnQsbmUoYSxzLGwsMSksbz17dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3RdfSx0PWU9bnVsbCxvfXJldHVybiBvLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Olp0KFsrdFswXSwrdFsxXV0pLG8pOnJ9LG8ucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6WnQoK3QpLG8pOm59LG8ucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6WnQoK3QpLG8pOml9LG99LHQuZ2VvQ2xpcEFudGltZXJpZGlhbj1nZSx0Lmdlb0NsaXBDaXJjbGU9dmUsdC5nZW9DbGlwRXh0ZW50PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49MCxpPTAsYT05NjAsbz01MDA7cmV0dXJuIHI9e3N0cmVhbTpmdW5jdGlvbihyKXtyZXR1cm4gdCYmZT09PXI/dDp0PXllKG4saSxhLG8pKGU9cil9LGV4dGVudDpmdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rc1swXVswXSxpPStzWzBdWzFdLGE9K3NbMV1bMF0sbz0rc1sxXVsxXSx0PWU9bnVsbCxyKTpbW24saV0sW2Esb11dfX19LHQuZ2VvQ2xpcFJlY3RhbmdsZT15ZSx0Lmdlb0NvbmljQ29uZm9ybWFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRuKGhuKS5zY2FsZSgxMDkuNSkucGFyYWxsZWxzKFszMCwzMF0pfSx0Lmdlb0NvbmljQ29uZm9ybWFsUmF3PWhuLHQuZ2VvQ29uaWNFcXVhbEFyZWE9cm4sdC5nZW9Db25pY0VxdWFsQXJlYVJhdz1lbix0Lmdlb0NvbmljRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdG4oZG4pLnNjYWxlKDEzMS4xNTQpLmNlbnRlcihbMCwxMy45Mzg5XSl9LHQuZ2VvQ29uaWNFcXVpZGlzdGFudFJhdz1kbix0Lmdlb0NvbnRhaW5zPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQmJlBlLmhhc093blByb3BlcnR5KHQudHlwZSk/UGVbdC50eXBlXTpPZSkodCxlKX0sdC5nZW9EaXN0YW5jZT1DZSx0Lmdlb0VxdWFsRWFydGg9ZnVuY3Rpb24oKXtyZXR1cm4gUXIoYm4pLnNjYWxlKDE3Ny4xNTgpfSx0Lmdlb0VxdWFsRWFydGhSYXc9Ym4sdC5nZW9FcXVpcmVjdGFuZ3VsYXI9ZnVuY3Rpb24oKXtyZXR1cm4gUXIocG4pLnNjYWxlKDE1Mi42Myl9LHQuZ2VvRXF1aXJlY3Rhbmd1bGFyUmF3PXBuLHQuZ2VvR25vbW9uaWM9ZnVuY3Rpb24oKXtyZXR1cm4gUXIoX24pLnNjYWxlKDE0NC4wNDkpLmNsaXBBbmdsZSg2MCl9LHQuZ2VvR25vbW9uaWNSYXc9X24sdC5nZW9HcmF0aWN1bGU9VWUsdC5nZW9HcmF0aWN1bGUxMD1mdW5jdGlvbigpe3JldHVybiBVZSgpKCl9LHQuZ2VvSWRlbnRpdHk9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixpLGEsbyxzPTEsbD0wLGM9MCx1PTEscD0xLGQ9MCxtPW51bGwsdj0xLHk9MSx4PWpyKHtwb2ludDpmdW5jdGlvbih0LGUpe3ZhciByPVQoW3QsZV0pO3RoaXMuc3RyZWFtLnBvaW50KHJbMF0sclsxXSl9fSksYj1WZTtmdW5jdGlvbiB3KCl7cmV0dXJuIHY9cyp1LHk9cypwLGE9bz1udWxsLFR9ZnVuY3Rpb24gVChyKXt2YXIgbj1yWzBdKnYsaT1yWzFdKnk7aWYoZCl7dmFyIGE9aSp0LW4qZTtuPW4qdCtpKmUsaT1hfXJldHVybltuK2wsaStjXX1yZXR1cm4gVC5pbnZlcnQ9ZnVuY3Rpb24ocil7dmFyIG49clswXS1sLGk9clsxXS1jO2lmKGQpe3ZhciBhPWkqdCtuKmU7bj1uKnQtaSplLGk9YX1yZXR1cm5bbi92LGkveV19LFQuc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBhJiZvPT09dD9hOmE9eChiKG89dCkpfSxULnBvc3RjbGlwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPXQsbT1yPW49aT1udWxsLHcoKSk6Yn0sVC5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPW51bGw9PXQ/KG09cj1uPWk9bnVsbCxWZSk6eWUobT0rdFswXVswXSxyPSt0WzBdWzFdLG49K3RbMV1bMF0saT0rdFsxXVsxXSksdygpKTpudWxsPT1tP251bGw6W1ttLHJdLFtuLGldXX0sVC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCx3KCkpOnN9LFQudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSt0WzBdLGM9K3RbMV0sdygpKTpbbCxjXX0sVC5hbmdsZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1fKGQ9ciUzNjAqaCksdD1nKGQpLHcoKSk6ZCpmfSxULnJlZmxlY3RYPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQ/LTE6MSx3KCkpOnU8MH0sVC5yZWZsZWN0WT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10Py0xOjEsdygpKTpwPDB9LFQuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEhyKFQsdCxlKX0sVC5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHFyKFQsdCxlKX0sVC5maXRXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiBHcihULHQsZSl9LFQuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFlyKFQsdCxlKX0sVH0sdC5nZW9JbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0qaCxuPXRbMV0qaCxpPWVbMF0qaCxhPWVbMV0qaCxvPWcobikscz1fKG4pLGw9ZyhhKSxjPV8oYSksdT1vKmcocikscD1vKl8ociksZD1sKmcoaSksdj1sKl8oaSkseT0yKk0oVChTKGEtbikrbypsKlMoaS1yKSkpLHg9Xyh5KSxiPXk/ZnVuY3Rpb24odCl7dmFyIGU9Xyh0Kj15KS94LHI9Xyh5LXQpL3gsbj1yKnUrZSpkLGk9cipwK2UqdixhPXIqcytlKmM7cmV0dXJuW20oaSxuKSpmLG0oYSxUKG4qbitpKmkpKSpmXX06ZnVuY3Rpb24oKXtyZXR1cm5bcipmLG4qZl19O3JldHVybiBiLmRpc3RhbmNlPXksYn0sdC5nZW9MZW5ndGg9U2UsdC5nZW9NZXJjYXRvcj1mdW5jdGlvbigpe3JldHVybiB1bihjbikuc2NhbGUoOTYxL3UpfSx0Lmdlb01lcmNhdG9yUmF3PWNuLHQuZ2VvTmF0dXJhbEVhcnRoMT1mdW5jdGlvbigpe3JldHVybiBRcih3bikuc2NhbGUoMTc1LjI5NSl9LHQuZ2VvTmF0dXJhbEVhcnRoMVJhdz13bix0Lmdlb09ydGhvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiBRcihUbikuc2NhbGUoMjQ5LjUpLmNsaXBBbmdsZSg5MCtvKX0sdC5nZW9PcnRob2dyYXBoaWNSYXc9VG4sdC5nZW9QYXRoPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPTQuNTtmdW5jdGlvbiBhKHQpe3JldHVybiB0JiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJm4ucG9pbnRSYWRpdXMoK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx6KHQscihuKSkpLG4ucmVzdWx0KCl9cmV0dXJuIGEuYXJlYT1mdW5jdGlvbih0KXtyZXR1cm4geih0LHIoWmUpKSxaZS5yZXN1bHQoKX0sYS5tZWFzdXJlPWZ1bmN0aW9uKHQpe3JldHVybiB6KHQscihEcikpLERyLnJlc3VsdCgpfSxhLmJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4geih0LHIoaXIpKSxpci5yZXN1bHQoKX0sYS5jZW50cm9pZD1mdW5jdGlvbih0KXtyZXR1cm4geih0LHIoeXIpKSx5ci5yZXN1bHQoKX0sYS5wcm9qZWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PWU/KHQ9bnVsbCxWZSk6KHQ9ZSkuc3RyZWFtLGEpOnR9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10PyhlPW51bGwsbmV3IEJyKTpuZXcgRXIoZT10KSwiZnVuY3Rpb24iIT10eXBlb2YgaSYmbi5wb2ludFJhZGl1cyhpKSxhKTplfSxhLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KG4ucG9pbnRSYWRpdXMoK3QpLCt0KSxhKTppfSxhLnByb2plY3Rpb24odCkuY29udGV4dChlKX0sdC5nZW9Qcm9qZWN0aW9uPVFyLHQuZ2VvUHJvamVjdGlvbk11dGF0b3I9JHIsdC5nZW9Sb3RhdGlvbj1yZSx0Lmdlb1N0ZXJlb2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gUXIoa24pLnNjYWxlKDI1MCkuY2xpcEFuZ2xlKDE0Mil9LHQuZ2VvU3RlcmVvZ3JhcGhpY1Jhdz1rbix0Lmdlb1N0cmVhbT16LHQuZ2VvVHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3JldHVybntzdHJlYW06anIodCl9fSx0Lmdlb1RyYW5zdmVyc2VNZXJjYXRvcj1mdW5jdGlvbigpe3ZhciB0PXVuKEFuKSxlPXQuY2VudGVyLHI9dC5yb3RhdGU7cmV0dXJuIHQuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoWy10WzFdLHRbMF1dKTpbKHQ9ZSgpKVsxXSwtdFswXV19LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3IoW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKTpbKHQ9cigpKVswXSx0WzFdLHRbMl0tOTBdfSxyKFswLDAsOTBdKS5zY2FsZSgxNTkuMTU1KX0sdC5nZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc9QW4sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7ImQzLWFycmF5IjoxNTV9XSwxNjM6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/bihyKTpuKCh0PXR8fHNlbGYpLmQzPXQuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gcih0LGUpe3JldHVybiB0K2UueH1mdW5jdGlvbiBuKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZS55KX1mdW5jdGlvbiBpKHQpe3ZhciBlPTAscj10LmNoaWxkcmVuLG49ciYmci5sZW5ndGg7aWYobilmb3IoOy0tbj49MDspZSs9cltuXS52YWx1ZTtlbHNlIGU9MTt0LnZhbHVlPWV9ZnVuY3Rpb24gYSh0LGUpe3ZhciByLG4saSxhLHMsdT1uZXcgYyh0KSxmPSt0LnZhbHVlJiYodS52YWx1ZT10LnZhbHVlKSxoPVt1XTtmb3IobnVsbD09ZSYmKGU9byk7cj1oLnBvcCgpOylpZihmJiYoci52YWx1ZT0rci5kYXRhLnZhbHVlKSwoaT1lKHIuZGF0YSkpJiYocz1pLmxlbmd0aCkpZm9yKHIuY2hpbGRyZW49bmV3IEFycmF5KHMpLGE9cy0xO2E+PTA7LS1hKWgucHVzaChuPXIuY2hpbGRyZW5bYV09bmV3IGMoaVthXSkpLG4ucGFyZW50PXIsbi5kZXB0aD1yLmRlcHRoKzE7cmV0dXJuIHUuZWFjaEJlZm9yZShsKX1mdW5jdGlvbiBvKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIHModCl7dC5kYXRhPXQuZGF0YS5kYXRhfWZ1bmN0aW9uIGwodCl7dmFyIGU9MDtkb3t0LmhlaWdodD1lfXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytlKX1mdW5jdGlvbiBjKHQpe3RoaXMuZGF0YT10LHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfWMucHJvdG90eXBlPWEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjLGNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKGkpfSxlYWNoOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dGhpcyxvPVthXTtkb3tmb3IoZT1vLnJldmVyc2UoKSxvPVtdO2E9ZS5wb3AoKTspaWYodChhKSxyPWEuY2hpbGRyZW4pZm9yKG49MCxpPXIubGVuZ3RoO248aTsrK24pby5wdXNoKHJbbl0pfXdoaWxlKG8ubGVuZ3RoKTtyZXR1cm4gdGhpc30sZWFjaEFmdGVyOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saT10aGlzLGE9W2ldLG89W107aT1hLnBvcCgpOylpZihvLnB1c2goaSksZT1pLmNoaWxkcmVuKWZvcihyPTAsbj1lLmxlbmd0aDtyPG47KytyKWEucHVzaChlW3JdKTtmb3IoO2k9by5wb3AoKTspdChpKTtyZXR1cm4gdGhpc30sZWFjaEJlZm9yZTpmdW5jdGlvbih0KXtmb3IodmFyIGUscixuPXRoaXMsaT1bbl07bj1pLnBvcCgpOylpZih0KG4pLGU9bi5jaGlsZHJlbilmb3Iocj1lLmxlbmd0aC0xO3I+PTA7LS1yKWkucHVzaChlW3JdKTtyZXR1cm4gdGhpc30sc3VtOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hBZnRlcigoZnVuY3Rpb24oZSl7Zm9yKHZhciByPSt0KGUuZGF0YSl8fDAsbj1lLmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7LS1pPj0wOylyKz1uW2ldLnZhbHVlO2UudmFsdWU9cn0pKX0sc29ydDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKChmdW5jdGlvbihlKXtlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLnNvcnQodCl9KSl9LHBhdGg6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciByPXQuYW5jZXN0b3JzKCksbj1lLmFuY2VzdG9ycygpLGk9bnVsbDt0PXIucG9wKCksZT1uLnBvcCgpO2Zvcig7dD09PWU7KWk9dCx0PXIucG9wKCksZT1uLnBvcCgpO3JldHVybiBpfShlLHQpLG49W2VdO2UhPT1yOyllPWUucGFyZW50LG4ucHVzaChlKTtmb3IodmFyIGk9bi5sZW5ndGg7dCE9PXI7KW4uc3BsaWNlKGksMCx0KSx0PXQucGFyZW50O3JldHVybiBufSxhbmNlc3RvcnM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVt0XTt0PXQucGFyZW50OyllLnB1c2godCk7cmV0dXJuIGV9LGRlc2NlbmRhbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSkpLHR9LGxlYXZlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fHQucHVzaChlKX0pKSx0fSxsaW5rczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbihyKXtyIT09dCYmZS5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pKSxlfSxjb3B5OmZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcykuZWFjaEJlZm9yZShzKX19O3ZhciB1PUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBmKHQpe2Zvcih2YXIgZSxyLG49MCxpPSh0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG49dC5sZW5ndGg7bjspcj1NYXRoLnJhbmRvbSgpKm4tLXwwLGU9dFtuXSx0W25dPXRbcl0sdFtyXT1lO3JldHVybiB0fSh1LmNhbGwodCkpKS5sZW5ndGgsYT1bXTtuPGk7KWU9dFtuXSxyJiZkKHIsZSk/KytuOihyPWcoYT1oKGEsZSkpLG49MCk7cmV0dXJuIHJ9ZnVuY3Rpb24gaCh0LGUpe3ZhciByLG47aWYobShlLHQpKXJldHVybltlXTtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKWlmKHAoZSx0W3JdKSYmbSh2KHRbcl0sZSksdCkpcmV0dXJuW3Rbcl0sZV07Zm9yKHI9MDtyPHQubGVuZ3RoLTE7KytyKWZvcihuPXIrMTtuPHQubGVuZ3RoOysrbilpZihwKHYodFtyXSx0W25dKSxlKSYmcCh2KHRbcl0sZSksdFtuXSkmJnAodih0W25dLGUpLHRbcl0pJiZtKHkodFtyXSx0W25dLGUpLHQpKXJldHVyblt0W3JdLHRbbl0sZV07dGhyb3cgbmV3IEVycm9yfWZ1bmN0aW9uIHAodCxlKXt2YXIgcj10LnItZS5yLG49ZS54LXQueCxpPWUueS10Lnk7cmV0dXJuIHI8MHx8cipyPG4qbitpKml9ZnVuY3Rpb24gZCh0LGUpe3ZhciByPXQuci1lLnIrMWUtNixuPWUueC10LngsaT1lLnktdC55O3JldHVybiByPjAmJnIqcj5uKm4raSppfWZ1bmN0aW9uIG0odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcilpZighZCh0LGVbcl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGcodCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6cmV0dXJue3g6KGU9dFswXSkueCx5OmUueSxyOmUucn07Y2FzZSAyOnJldHVybiB2KHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiB5KHRbMF0sdFsxXSx0WzJdKX12YXIgZX1mdW5jdGlvbiB2KHQsZSl7dmFyIHI9dC54LG49dC55LGk9dC5yLGE9ZS54LG89ZS55LHM9ZS5yLGw9YS1yLGM9by1uLHU9cy1pLGY9TWF0aC5zcXJ0KGwqbCtjKmMpO3JldHVybnt4OihyK2ErbC9mKnUpLzIseToobitvK2MvZip1KS8yLHI6KGYraStzKS8yfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj10LngsaT10LnksYT10LnIsbz1lLngscz1lLnksbD1lLnIsYz1yLngsdT1yLnksZj1yLnIsaD1uLW8scD1uLWMsZD1pLXMsbT1pLXUsZz1sLWEsdj1mLWEseT1uKm4raSppLWEqYSx4PXktbypvLXMqcytsKmwsYj15LWMqYy11KnUrZipmLF89cCpkLWgqbSx3PShkKmItbSp4KS8oMipfKS1uLFQ9KG0qZy1kKnYpL18saz0ocCp4LWgqYikvKDIqXyktaSxBPShoKnYtcCpnKS9fLE09VCpUK0EqQS0xLFM9MiooYSt3KlQraypBKSxFPXcqdytrKmstYSphLEw9LShNPyhTK01hdGguc3FydChTKlMtNCpNKkUpKS8oMipNKTpFL1MpO3JldHVybnt4Om4rdytUKkwseTppK2srQSpMLHI6TH19ZnVuY3Rpb24geCh0LGUscil7dmFyIG4saSxhLG8scz10LngtZS54LGw9dC55LWUueSxjPXMqcytsKmw7Yz8oaT1lLnIrci5yLGkqPWksbz10LnIrci5yLGk+KG8qPW8pPyhuPShjK28taSkvKDIqYyksYT1NYXRoLnNxcnQoTWF0aC5tYXgoMCxvL2MtbipuKSksci54PXQueC1uKnMtYSpsLHIueT10LnktbipsK2Eqcyk6KG49KGMraS1vKS8oMipjKSxhPU1hdGguc3FydChNYXRoLm1heCgwLGkvYy1uKm4pKSxyLng9ZS54K24qcy1hKmwsci55PWUueStuKmwrYSpzKSk6KHIueD1lLngrci5yLHIueT1lLnkpfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj10LnIrZS5yLTFlLTYsbj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gcj4wJiZyKnI+bipuK2kqaX1mdW5jdGlvbiBfKHQpe3ZhciBlPXQuXyxyPXQubmV4dC5fLG49ZS5yK3IucixpPShlLngqci5yK3IueCplLnIpL24sYT0oZS55KnIucityLnkqZS5yKS9uO3JldHVybiBpKmkrYSphfWZ1bmN0aW9uIHcodCl7dGhpcy5fPXQsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIFQodCl7aWYoIShpPXQubGVuZ3RoKSlyZXR1cm4gMDt2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxoO2lmKChlPXRbMF0pLng9MCxlLnk9MCwhKGk+MSkpcmV0dXJuIGUucjtpZihyPXRbMV0sZS54PS1yLnIsci54PWUucixyLnk9MCwhKGk+MikpcmV0dXJuIGUucityLnI7eChyLGUsbj10WzJdKSxlPW5ldyB3KGUpLHI9bmV3IHcociksbj1uZXcgdyhuKSxlLm5leHQ9bi5wcmV2aW91cz1yLHIubmV4dD1lLnByZXZpb3VzPW4sbi5uZXh0PXIucHJldmlvdXM9ZTt0OmZvcihzPTM7czxpOysrcyl7eChlLl8sci5fLG49dFtzXSksbj1uZXcgdyhuKSxsPXIubmV4dCxjPWUucHJldmlvdXMsdT1yLl8ucixoPWUuXy5yO2Rve2lmKHU8PWgpe2lmKGIobC5fLG4uXykpe3I9bCxlLm5leHQ9cixyLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9dSs9bC5fLnIsbD1sLm5leHR9ZWxzZXtpZihiKGMuXyxuLl8pKXsoZT1jKS5uZXh0PXIsci5wcmV2aW91cz1lLC0tcztjb250aW51ZSB0fWgrPWMuXy5yLGM9Yy5wcmV2aW91c319d2hpbGUobCE9PWMubmV4dCk7Zm9yKG4ucHJldmlvdXM9ZSxuLm5leHQ9cixlLm5leHQ9ci5wcmV2aW91cz1yPW4sYT1fKGUpOyhuPW4ubmV4dCkhPT1yOykobz1fKG4pKTxhJiYoZT1uLGE9byk7cj1lLm5leHR9Zm9yKGU9W3IuX10sbj1yOyhuPW4ubmV4dCkhPT1yOyllLnB1c2gobi5fKTtmb3Iobj1mKGUpLHM9MDtzPGk7KytzKShlPXRbc10pLngtPW4ueCxlLnktPW4ueTtyZXR1cm4gbi5yfWZ1bmN0aW9uIGsodCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpBKHQpfWZ1bmN0aW9uIEEodCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0fWZ1bmN0aW9uIE0oKXtyZXR1cm4gMH1mdW5jdGlvbiBTKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBFKHQpe3JldHVybiBNYXRoLnNxcnQodC52YWx1ZSl9ZnVuY3Rpb24gTCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8KGUucj1NYXRoLm1heCgwLCt0KGUpfHwwKSl9fWZ1bmN0aW9uIEModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7aWYobj1yLmNoaWxkcmVuKXt2YXIgbixpLGEsbz1uLmxlbmd0aCxzPXQocikqZXx8MDtpZihzKWZvcihpPTA7aTxvOysraSluW2ldLnIrPXM7aWYoYT1UKG4pLHMpZm9yKGk9MDtpPG87KytpKW5baV0uci09cztyLnI9YStzfX19ZnVuY3Rpb24gUCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9ZS5wYXJlbnQ7ZS5yKj10LHImJihlLng9ci54K3QqZS54LGUueT1yLnkrdCplLnkpfX1mdW5jdGlvbiBJKHQpe3QueDA9TWF0aC5yb3VuZCh0LngwKSx0LnkwPU1hdGgucm91bmQodC55MCksdC54MT1NYXRoLnJvdW5kKHQueDEpLHQueTE9TWF0aC5yb3VuZCh0LnkxKX1mdW5jdGlvbiBPKHQsZSxyLG4saSl7Zm9yKHZhciBhLG89dC5jaGlsZHJlbixzPS0xLGw9by5sZW5ndGgsYz10LnZhbHVlJiYobi1lKS90LnZhbHVlOysrczxsOykoYT1vW3NdKS55MD1yLGEueTE9aSxhLngwPWUsYS54MT1lKz1hLnZhbHVlKmN9dmFyIHo9e2RlcHRoOi0xfSxEPXt9O2Z1bmN0aW9uIFIodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBCKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIE4odCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lWzBdOnQudH1mdW5jdGlvbiBqKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGU/ZVtlLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gVSh0LGUscil7dmFyIG49ci8oZS5pLXQuaSk7ZS5jLT1uLGUucys9cix0LmMrPW4sZS56Kz1yLGUubSs9cn1mdW5jdGlvbiBWKHQsZSxyKXtyZXR1cm4gdC5hLnBhcmVudD09PWUucGFyZW50P3QuYTpyfWZ1bmN0aW9uIEgodCxlKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9ZX1mdW5jdGlvbiBxKHQsZSxyLG4saSl7Zm9yKHZhciBhLG89dC5jaGlsZHJlbixzPS0xLGw9by5sZW5ndGgsYz10LnZhbHVlJiYoaS1yKS90LnZhbHVlOysrczxsOykoYT1vW3NdKS54MD1lLGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9SC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSk7dmFyIEc9KDErTWF0aC5zcXJ0KDUpKS8yO2Z1bmN0aW9uIFkodCxlLHIsbixpLGEpe2Zvcih2YXIgbyxzLGwsYyx1LGYsaCxwLGQsbSxnLHY9W10seT1lLmNoaWxkcmVuLHg9MCxiPTAsXz15Lmxlbmd0aCx3PWUudmFsdWU7eDxfOyl7bD1pLXIsYz1hLW47ZG97dT15W2IrK10udmFsdWV9d2hpbGUoIXUmJmI8Xyk7Zm9yKGY9aD11LGc9dSp1KihtPU1hdGgubWF4KGMvbCxsL2MpLyh3KnQpKSxkPU1hdGgubWF4KGgvZyxnL2YpO2I8XzsrK2Ipe2lmKHUrPXM9eVtiXS52YWx1ZSxzPGYmJihmPXMpLHM+aCYmKGg9cyksZz11KnUqbSwocD1NYXRoLm1heChoL2csZy9mKSk+ZCl7dS09czticmVha31kPXB9di5wdXNoKG89e3ZhbHVlOnUsZGljZTpsPGMsY2hpbGRyZW46eS5zbGljZSh4LGIpfSksby5kaWNlP08obyxyLG4saSx3P24rPWMqdS93OmEpOnEobyxyLG4sdz9yKz1sKnUvdzppLGEpLHctPXUseD1ifXJldHVybiB2fXZhciBXPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0LHIsbixpLGEpe1koZSx0LHIsbixpLGEpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LHJ9KEcpO3ZhciBYPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0LHIsbixpLGEpe2lmKChvPXQuX3NxdWFyaWZ5KSYmby5yYXRpbz09PWUpZm9yKHZhciBvLHMsbCxjLHUsZj0tMSxoPW8ubGVuZ3RoLHA9dC52YWx1ZTsrK2Y8aDspe2ZvcihsPShzPW9bZl0pLmNoaWxkcmVuLGM9cy52YWx1ZT0wLHU9bC5sZW5ndGg7Yzx1OysrYylzLnZhbHVlKz1sW2NdLnZhbHVlO3MuZGljZT9PKHMscixuLGksbis9KGEtbikqcy52YWx1ZS9wKTpxKHMscixuLHIrPShpLXIpKnMudmFsdWUvcCxhKSxwLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9bz1ZKGUsdCxyLG4saSxhKSxvLnJhdGlvPWV9cmV0dXJuIHIucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0scn0oRyk7dC5jbHVzdGVyPWZ1bmN0aW9uKCl7dmFyIHQ9ZSxpPTEsYT0xLG89ITE7ZnVuY3Rpb24gcyhlKXt2YXIgcyxsPTA7ZS5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKGUpe3ZhciBpPWUuY2hpbGRyZW47aT8oZS54PWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZShyLDApL3QubGVuZ3RofShpKSxlLnk9ZnVuY3Rpb24odCl7cmV0dXJuIDErdC5yZWR1Y2UobiwwKX0oaSkpOihlLng9cz9sKz10KGUscyk6MCxlLnk9MCxzPWUpfSkpO3ZhciBjPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVswXTtyZXR1cm4gdH0oZSksdT1mdW5jdGlvbih0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbZS5sZW5ndGgtMV07cmV0dXJuIHR9KGUpLGY9Yy54LXQoYyx1KS8yLGg9dS54K3QodSxjKS8yO3JldHVybiBlLmVhY2hBZnRlcihvP2Z1bmN0aW9uKHQpe3QueD0odC54LWUueCkqaSx0Lnk9KGUueS10LnkpKmF9OmZ1bmN0aW9uKHQpe3QueD0odC54LWYpLyhoLWYpKmksdC55PSgxLShlLnk/dC55L2UueToxKSkqYX0pfXJldHVybiBzLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxzKTp0fSxzLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ITEsaT0rdFswXSxhPSt0WzFdLHMpOm8/bnVsbDpbaSxhXX0scy5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0hMCxpPSt0WzBdLGE9K3RbMV0scyk6bz9baSxhXTpudWxsfSxzfSx0LmhpZXJhcmNoeT1hLHQucGFjaz1mdW5jdGlvbigpe3ZhciB0PW51bGwsZT0xLHI9MSxuPU07ZnVuY3Rpb24gaShpKXtyZXR1cm4gaS54PWUvMixpLnk9ci8yLHQ/aS5lYWNoQmVmb3JlKEwodCkpLmVhY2hBZnRlcihDKG4sLjUpKS5lYWNoQmVmb3JlKFAoMSkpOmkuZWFjaEJlZm9yZShMKEUpKS5lYWNoQWZ0ZXIoQyhNLDEpKS5lYWNoQWZ0ZXIoQyhuLGkuci9NYXRoLm1pbihlLHIpKSkuZWFjaEJlZm9yZShQKE1hdGgubWluKGUscikvKDIqaS5yKSkpLGl9cmV0dXJuIGkucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWsoZSksaSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLHI9K3RbMV0saSk6W2Uscl19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlMoK3QpLGkpOm59LGl9LHQucGFja0VuY2xvc2U9Zix0LnBhY2tTaWJsaW5ncz1mdW5jdGlvbih0KXtyZXR1cm4gVCh0KSx0fSx0LnBhcnRpdGlvbj1mdW5jdGlvbigpe3ZhciB0PTEsZT0xLHI9MCxuPSExO2Z1bmN0aW9uIGkoaSl7dmFyIGE9aS5oZWlnaHQrMTtyZXR1cm4gaS54MD1pLnkwPXIsaS54MT10LGkueTE9ZS9hLGkuZWFjaEJlZm9yZShmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihuKXtuLmNoaWxkcmVuJiZPKG4sbi54MCx0KihuLmRlcHRoKzEpL2Usbi54MSx0KihuLmRlcHRoKzIpL2UpO3ZhciBpPW4ueDAsYT1uLnkwLG89bi54MS1yLHM9bi55MS1yO288aSYmKGk9bz0oaStvKS8yKSxzPGEmJihhPXM9KGErcykvMiksbi54MD1pLG4ueTA9YSxuLngxPW8sbi55MT1zfX0oZSxhKSksbiYmaS5lYWNoQmVmb3JlKEkpLGl9cmV0dXJuIGkucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ISF0LGkpOm59LGkuc2l6ZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rclswXSxlPStyWzFdLGkpOlt0LGVdfSxpLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsaSk6cn0saX0sdC5zdHJhdGlmeT1mdW5jdGlvbigpe3ZhciB0PVIsZT1GO2Z1bmN0aW9uIHIocil7dmFyIG4saSxhLG8scyx1LGYsaD1yLmxlbmd0aCxwPW5ldyBBcnJheShoKSxkPXt9O2ZvcihpPTA7aTxoOysraSluPXJbaV0scz1wW2ldPW5ldyBjKG4pLG51bGwhPSh1PXQobixpLHIpKSYmKHUrPSIiKSYmKGRbZj0iJCIrKHMuaWQ9dSldPWYgaW4gZD9EOnMpO2ZvcihpPTA7aTxoOysraSlpZihzPXBbaV0sbnVsbCE9KHU9ZShyW2ldLGkscikpJiYodSs9IiIpKXtpZighKG89ZFsiJCIrdV0pKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit1KTtpZihvPT09RCl0aHJvdyBuZXcgRXJyb3IoImFtYmlndW91czogIit1KTtvLmNoaWxkcmVuP28uY2hpbGRyZW4ucHVzaChzKTpvLmNoaWxkcmVuPVtzXSxzLnBhcmVudD1vfWVsc2V7aWYoYSl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIHJvb3RzIik7YT1zfWlmKCFhKXRocm93IG5ldyBFcnJvcigibm8gcm9vdCIpO2lmKGEucGFyZW50PXosYS5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0LmRlcHRoPXQucGFyZW50LmRlcHRoKzEsLS1ofSkpLmVhY2hCZWZvcmUobCksYS5wYXJlbnQ9bnVsbCxoPjApdGhyb3cgbmV3IEVycm9yKCJjeWNsZSIpO3JldHVybiBhfXJldHVybiByLmlkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PUEoZSkscik6dH0sci5wYXJlbnRJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1BKHQpLHIpOmV9LHJ9LHQudHJlZT1mdW5jdGlvbigpe3ZhciB0PUIsZT0xLHI9MSxuPW51bGw7ZnVuY3Rpb24gaShpKXt2YXIgbD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvPW5ldyBIKHQsMCkscz1bb107ZT1zLnBvcCgpOylpZihuPWUuXy5jaGlsZHJlbilmb3IoZS5jaGlsZHJlbj1uZXcgQXJyYXkoYT1uLmxlbmd0aCksaT1hLTE7aT49MDstLWkpcy5wdXNoKHI9ZS5jaGlsZHJlbltpXT1uZXcgSChuW2ldLGkpKSxyLnBhcmVudD1lO3JldHVybihvLnBhcmVudD1uZXcgSChudWxsLDApKS5jaGlsZHJlbj1bb10sb30oaSk7aWYobC5lYWNoQWZ0ZXIoYSksbC5wYXJlbnQubT0tbC56LGwuZWFjaEJlZm9yZShvKSxuKWkuZWFjaEJlZm9yZShzKTtlbHNle3ZhciBjPWksdT1pLGY9aTtpLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QueDxjLngmJihjPXQpLHQueD51LngmJih1PXQpLHQuZGVwdGg+Zi5kZXB0aCYmKGY9dCl9KSk7dmFyIGg9Yz09PXU/MTp0KGMsdSkvMixwPWgtYy54LGQ9ZS8odS54K2grcCksbT1yLyhmLmRlcHRofHwxKTtpLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QueD0odC54K3ApKmQsdC55PXQuZGVwdGgqbX0pKX1yZXR1cm4gaX1mdW5jdGlvbiBhKGUpe3ZhciByPWUuY2hpbGRyZW4sbj1lLnBhcmVudC5jaGlsZHJlbixpPWUuaT9uW2UuaS0xXTpudWxsO2lmKHIpeyFmdW5jdGlvbih0KXtmb3IodmFyIGUscj0wLG49MCxpPXQuY2hpbGRyZW4sYT1pLmxlbmd0aDstLWE+PTA7KShlPWlbYV0pLnorPXIsZS5tKz1yLHIrPWUucysobis9ZS5jKX0oZSk7dmFyIGE9KHJbMF0ueityW3IubGVuZ3RoLTFdLnopLzI7aT8oZS56PWkueit0KGUuXyxpLl8pLGUubT1lLnotYSk6ZS56PWF9ZWxzZSBpJiYoZS56PWkueit0KGUuXyxpLl8pKTtlLnBhcmVudC5BPWZ1bmN0aW9uKGUscixuKXtpZihyKXtmb3IodmFyIGksYT1lLG89ZSxzPXIsbD1hLnBhcmVudC5jaGlsZHJlblswXSxjPWEubSx1PW8ubSxmPXMubSxoPWwubTtzPWoocyksYT1OKGEpLHMmJmE7KWw9TihsKSwobz1qKG8pKS5hPWUsKGk9cy56K2YtYS56LWMrdChzLl8sYS5fKSk+MCYmKFUoVihzLGUsbiksZSxpKSxjKz1pLHUrPWkpLGYrPXMubSxjKz1hLm0saCs9bC5tLHUrPW8ubTtzJiYhaihvKSYmKG8udD1zLG8ubSs9Zi11KSxhJiYhTihsKSYmKGwudD1hLGwubSs9Yy1oLG49ZSl9cmV0dXJuIG59KGUsaSxlLnBhcmVudC5BfHxuWzBdKX1mdW5jdGlvbiBvKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiBzKHQpe3QueCo9ZSx0Lnk9dC5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsZT0rdFswXSxyPSt0WzFdLGkpOm4/bnVsbDpbZSxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCxlPSt0WzBdLHI9K3RbMV0saSk6bj9bZSxyXTpudWxsfSxpfSx0LnRyZWVtYXA9ZnVuY3Rpb24oKXt2YXIgdD1XLGU9ITEscj0xLG49MSxpPVswXSxhPU0sbz1NLHM9TSxsPU0sYz1NO2Z1bmN0aW9uIHUodCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9cix0LnkxPW4sdC5lYWNoQmVmb3JlKGYpLGk9WzBdLGUmJnQuZWFjaEJlZm9yZShJKSx0fWZ1bmN0aW9uIGYoZSl7dmFyIHI9aVtlLmRlcHRoXSxuPWUueDArcix1PWUueTArcixmPWUueDEtcixoPWUueTEtcjtmPG4mJihuPWY9KG4rZikvMiksaDx1JiYodT1oPSh1K2gpLzIpLGUueDA9bixlLnkwPXUsZS54MT1mLGUueTE9aCxlLmNoaWxkcmVuJiYocj1pW2UuZGVwdGgrMV09YShlKS8yLG4rPWMoZSktcix1Kz1vKGUpLXIsKGYtPXMoZSktcik8biYmKG49Zj0obitmKS8yKSwoaC09bChlKS1yKTx1JiYodT1oPSh1K2gpLzIpLHQoZSxuLHUsZixoKSl9cmV0dXJuIHUucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISF0LHUpOmV9LHUuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdFswXSxuPSt0WzFdLHUpOltyLG5dfSx1LnRpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9QShlKSx1KTp0fSx1LnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nSW5uZXIodCkucGFkZGluZ091dGVyKHQpOnUucGFkZGluZ0lubmVyKCl9LHUucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UygrdCksdSk6YX0sdS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nVG9wKHQpLnBhZGRpbmdSaWdodCh0KS5wYWRkaW5nQm90dG9tKHQpLnBhZGRpbmdMZWZ0KHQpOnUucGFkZGluZ1RvcCgpfSx1LnBhZGRpbmdUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTKCt0KSx1KTpvfSx1LnBhZGRpbmdSaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlMoK3QpLHUpOnN9LHUucGFkZGluZ0JvdHRvbT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlMoK3QpLHUpOmx9LHUucGFkZGluZ0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTKCt0KSx1KTpjfSx1fSx0LnRyZWVtYXBCaW5hcnk9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvLHM9dC5jaGlsZHJlbixsPXMubGVuZ3RoLGM9bmV3IEFycmF5KGwrMSk7Zm9yKGNbMF09bz1hPTA7YTxsOysrYSljW2ErMV09bys9c1thXS52YWx1ZTshZnVuY3Rpb24gdChlLHIsbixpLGEsbyxsKXtpZihlPj1yLTEpe3ZhciB1PXNbZV07cmV0dXJuIHUueDA9aSx1LnkwPWEsdS54MT1vLHZvaWQodS55MT1sKX12YXIgZj1jW2VdLGg9bi8yK2YscD1lKzEsZD1yLTE7Zm9yKDtwPGQ7KXt2YXIgbT1wK2Q+Pj4xO2NbbV08aD9wPW0rMTpkPW19aC1jW3AtMV08Y1twXS1oJiZlKzE8cCYmLS1wO3ZhciBnPWNbcF0tZix2PW4tZztpZihvLWk+bC1hKXt2YXIgeT0oaSp2K28qZykvbjt0KGUscCxnLGksYSx5LGwpLHQocCxyLHYseSxhLG8sbCl9ZWxzZXt2YXIgeD0oYSp2K2wqZykvbjt0KGUscCxnLGksYSxvLHgpLHQocCxyLHYsaSx4LG8sbCl9fSgwLGwsdC52YWx1ZSxlLHIsbixpKX0sdC50cmVlbWFwRGljZT1PLHQudHJlZW1hcFJlc3F1YXJpZnk9WCx0LnRyZWVtYXBTbGljZT1xLHQudHJlZW1hcFNsaWNlRGljZT1mdW5jdGlvbih0LGUscixuLGkpeygxJnQuZGVwdGg/cTpPKSh0LGUscixuLGkpfSx0LnRyZWVtYXBTcXVhcmlmeT1XLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDE2NDpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihuLGkpeyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9pKHIsdCgiZDMtY29sb3IiKSk6aSgobj1ufHxzZWxmKS5kMz1uLmQzfHx7fSxuLmQzKX0odGhpcywoZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUscixuLGkpe3ZhciBhPXQqdCxvPWEqdDtyZXR1cm4oKDEtMyp0KzMqYS1vKSplKyg0LTYqYSszKm8pKnIrKDErMyp0KzMqYS0zKm8pKm4rbyppKS82fWZ1bmN0aW9uIG4odCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9bjw9MD9uPTA6bj49MT8obj0xLGUtMSk6TWF0aC5mbG9vcihuKmUpLGE9dFtpXSxvPXRbaSsxXSxzPWk+MD90W2ktMV06MiphLW8sbD1pPGUtMT90W2krMl06MipvLWE7cmV0dXJuIHIoKG4taS9lKSplLHMsYSxvLGwpfX1mdW5jdGlvbiBpKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1NYXRoLmZsb29yKCgobiU9MSk8MD8rK246bikqZSksYT10WyhpK2UtMSklZV0sbz10W2klZV0scz10WyhpKzEpJWVdLGw9dFsoaSsyKSVlXTtyZXR1cm4gcigobi1pL2UpKmUsYSxvLHMsbCl9fWZ1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQrciplfX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9ZS10O3JldHVybiByP28odCxyPjE4MHx8cjwtMTgwP3ItMzYwKk1hdGgucm91bmQoci8zNjApOnIpOmEoaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBsKHQpe3JldHVybiAxPT0odD0rdCk/YzpmdW5jdGlvbihlLHIpe3JldHVybiByLWU/ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PU1hdGgucG93KHQsciksZT1NYXRoLnBvdyhlLHIpLXQscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KHQrbiplLHIpfX0oZSxyLHQpOmEoaXNOYU4oZSk/cjplKX19ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWUtdDtyZXR1cm4gcj9vKHQscik6YShpc05hTih0KT9lOnQpfXZhciB1PWZ1bmN0aW9uIHQocil7dmFyIG49bChyKTtmdW5jdGlvbiBpKHQscil7dmFyIGk9bigodD1lLnJnYih0KSkuciwocj1lLnJnYihyKSkuciksYT1uKHQuZyxyLmcpLG89bih0LmIsci5iKSxzPWModC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9aShlKSx0Lmc9YShlKSx0LmI9byhlKSx0Lm9wYWNpdHk9cyhlKSx0KyIifX1yZXR1cm4gaS5nYW1tYT10LGl9KDEpO2Z1bmN0aW9uIGYodCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuLGksYT1yLmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKTtmb3Iobj0wO248YTsrK24paT1lLnJnYihyW25dKSxvW25dPWkucnx8MCxzW25dPWkuZ3x8MCxsW25dPWkuYnx8MDtyZXR1cm4gbz10KG8pLHM9dChzKSxsPXQobCksaS5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIGkucj1vKHQpLGkuZz1zKHQpLGkuYj1sKHQpLGkrIiJ9fX12YXIgaD1mKG4pLHA9ZihpKTtmdW5jdGlvbiBkKHQsZSl7ZXx8KGU9W10pO3ZhciByLG49dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxpPWUuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKHI9MDtyPG47KytyKWlbcl09dFtyXSooMS1hKStlW3JdKmE7cmV0dXJuIGl9fWZ1bmN0aW9uIG0odCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgRGF0YVZpZXcpfWZ1bmN0aW9uIGcodCxlKXt2YXIgcixuPWU/ZS5sZW5ndGg6MCxpPXQ/TWF0aC5taW4obix0Lmxlbmd0aCk6MCxhPW5ldyBBcnJheShpKSxvPW5ldyBBcnJheShuKTtmb3Iocj0wO3I8aTsrK3IpYVtyXT1UKHRbcl0sZVtyXSk7Zm9yKDtyPG47KytyKW9bcl09ZVtyXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHI9MDtyPGk7KytyKW9bcl09YVtyXSh0KTtyZXR1cm4gb319ZnVuY3Rpb24gdih0LGUpe3ZhciByPW5ldyBEYXRlO3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZSh0KigxLW4pK2Uqbikscn19ZnVuY3Rpb24geSh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24ocil7cmV0dXJuIHQqKDEtcikrZSpyfX1mdW5jdGlvbiB4KHQsZSl7dmFyIHIsbj17fSxpPXt9O2ZvcihyIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSlyIGluIHQ/bltyXT1UKHRbcl0sZVtyXSk6aVtyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3IociBpbiBuKWlbcl09bltyXSh0KTtyZXR1cm4gaX19dmFyIGI9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLF89bmV3IFJlZ0V4cChiLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIHcodCxlKXt2YXIgcixuLGksYT1iLmxhc3RJbmRleD1fLmxhc3RJbmRleD0wLG89LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsocj1iLmV4ZWModCkpJiYobj1fLmV4ZWMoZSkpOykoaT1uLmluZGV4KT5hJiYoaT1lLnNsaWNlKGEsaSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSwocj1yWzBdKT09PShuPW5bMF0pP3Nbb10/c1tvXSs9bjpzWysrb109bjooc1srK29dPW51bGwsbC5wdXNoKHtpOm8seDp5KHIsbil9KSksYT1fLmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/bFswXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fShsWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciByLG49MDtuPGU7KytuKXNbKHI9bFtuXSkuaV09ci54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gVCh0LHIpe3ZhciBuLGk9dHlwZW9mIHI7cmV0dXJuIG51bGw9PXJ8fCJib29sZWFuIj09PWk/YShyKTooIm51bWJlciI9PT1pP3k6InN0cmluZyI9PT1pPyhuPWUuY29sb3IocikpPyhyPW4sdSk6dzpyIGluc3RhbmNlb2YgZS5jb2xvcj91OnIgaW5zdGFuY2VvZiBEYXRlP3Y6bShyKT9kOkFycmF5LmlzQXJyYXkocik/ZzoiZnVuY3Rpb24iIT10eXBlb2Ygci52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2Ygci50b1N0cmluZ3x8aXNOYU4ocik/eDp5KSh0LHIpfXZhciBrLEEsTSxTLEU9MTgwL01hdGguUEksTD17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBDKHQsZSxyLG4saSxhKXt2YXIgbyxzLGw7cmV0dXJuKG89TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPW8sZS89byksKGw9dCpyK2UqbikmJihyLT10Kmwsbi09ZSpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLHQqbjxlKnImJih0PS10LGU9LWUsbD0tbCxvPS1vKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6YSxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKkUsc2tld1g6TWF0aC5hdGFuKGwpKkUsc2NhbGVYOm8sc2NhbGVZOnN9fWZ1bmN0aW9uIFAodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKGEsbyl7dmFyIHM9W10sbD1bXTtyZXR1cm4gYT10KGEpLG89dChvKSxmdW5jdGlvbih0LG4saSxhLG8scyl7aWYodCE9PWl8fG4hPT1hKXt2YXIgbD1vLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLHIpO3MucHVzaCh7aTpsLTQseDp5KHQsaSl9LHtpOmwtMix4OnkobixhKX0pfWVsc2UoaXx8YSkmJm8ucHVzaCgidHJhbnNsYXRlKCIraStlK2Ercil9KGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxzLGwpLGZ1bmN0aW9uKHQsZSxyLGEpe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxhLnB1c2goe2k6ci5wdXNoKGkocikrInJvdGF0ZSgiLG51bGwsbiktMix4OnkodCxlKX0pKTplJiZyLnB1c2goaShyKSsicm90YXRlKCIrZStuKX0oYS5yb3RhdGUsby5yb3RhdGUscyxsKSxmdW5jdGlvbih0LGUscixhKXt0IT09ZT9hLnB1c2goe2k6ci5wdXNoKGkocikrInNrZXdYKCIsbnVsbCxuKS0yLHg6eSh0LGUpfSk6ZSYmci5wdXNoKGkocikrInNrZXdYKCIrZStuKX0oYS5za2V3WCxvLnNrZXdYLHMsbCksZnVuY3Rpb24odCxlLHIsbixhLG8pe2lmKHQhPT1yfHxlIT09bil7dmFyIHM9YS5wdXNoKGkoYSkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO28ucHVzaCh7aTpzLTQseDp5KHQscil9LHtpOnMtMix4OnkoZSxuKX0pfWVsc2UgMT09PXImJjE9PT1ufHxhLnB1c2goaShhKSsic2NhbGUoIityKyIsIituKyIpIil9KGEuc2NhbGVYLGEuc2NhbGVZLG8uc2NhbGVYLG8uc2NhbGVZLHMsbCksYT1vPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9LTEsbj1sLmxlbmd0aDsrK3I8bjspc1soZT1sW3JdKS5pXT1lLngodCk7cmV0dXJuIHMuam9pbigiIil9fX12YXIgST1QKChmdW5jdGlvbih0KXtyZXR1cm4ibm9uZSI9PT10P0w6KGt8fChrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLEE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LE09ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLGsuc3R5bGUudHJhbnNmb3JtPXQsdD1NLmdldENvbXB1dGVkU3R5bGUoQS5hcHBlbmRDaGlsZChrKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxBLnJlbW92ZUNoaWxkKGspLEMoKyh0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLE89UCgoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/TDooU3x8KFM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksUy5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9Uy50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9DKCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOkwpfSksIiwgIiwiKSIsIikiKSx6PU1hdGguU1FSVDI7ZnVuY3Rpb24gRCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBSKHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPXQoKHI9ZS5oc2wocikpLmgsKG49ZS5oc2wobikpLmgpLGE9YyhyLnMsbi5zKSxvPWMoci5sLG4ubCkscz1jKHIub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5oPWkodCksci5zPWEodCksci5sPW8odCksci5vcGFjaXR5PXModCkscisiIn19fXZhciBGPVIocyksQj1SKGMpO2Z1bmN0aW9uIE4odCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9dCgocj1lLmhjbChyKSkuaCwobj1lLmhjbChuKSkuaCksYT1jKHIuYyxuLmMpLG89YyhyLmwsbi5sKSxzPWMoci5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9aSh0KSxyLmM9YSh0KSxyLmw9byh0KSxyLm9wYWNpdHk9cyh0KSxyKyIifX19dmFyIGo9TihzKSxVPU4oYyk7ZnVuY3Rpb24gVih0KXtyZXR1cm4gZnVuY3Rpb24gcihuKXtmdW5jdGlvbiBpKHIsaSl7dmFyIGE9dCgocj1lLmN1YmVoZWxpeChyKSkuaCwoaT1lLmN1YmVoZWxpeChpKSkuaCksbz1jKHIucyxpLnMpLHM9YyhyLmwsaS5sKSxsPWMoci5vcGFjaXR5LGkub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9YSh0KSxyLnM9byh0KSxyLmw9cyhNYXRoLnBvdyh0LG4pKSxyLm9wYWNpdHk9bCh0KSxyKyIifX1yZXR1cm4gbj0rbixpLmdhbW1hPXIsaX0oMSl9dmFyIEg9VihzKSxxPVYoYyk7dC5pbnRlcnBvbGF0ZT1ULHQuaW50ZXJwb2xhdGVBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybihtKGUpP2Q6ZykodCxlKX0sdC5pbnRlcnBvbGF0ZUJhc2lzPW4sdC5pbnRlcnBvbGF0ZUJhc2lzQ2xvc2VkPWksdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeD1ILHQuaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nPXEsdC5pbnRlcnBvbGF0ZURhdGU9dix0LmludGVycG9sYXRlRGlzY3JldGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0W01hdGgubWF4KDAsTWF0aC5taW4oZS0xLE1hdGguZmxvb3IociplKSkpXX19LHQuaW50ZXJwb2xhdGVIY2w9aix0LmludGVycG9sYXRlSGNsTG9uZz1VLHQuaW50ZXJwb2xhdGVIc2w9Rix0LmludGVycG9sYXRlSHNsTG9uZz1CLHQuaW50ZXJwb2xhdGVIdWU9ZnVuY3Rpb24odCxlKXt2YXIgcj1zKCt0LCtlKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9cih0KTtyZXR1cm4gZS0zNjAqTWF0aC5mbG9vcihlLzM2MCl9fSx0LmludGVycG9sYXRlTGFiPWZ1bmN0aW9uKHQscil7dmFyIG49YygodD1lLmxhYih0KSkubCwocj1lLmxhYihyKSkubCksaT1jKHQuYSxyLmEpLGE9Yyh0LmIsci5iKSxvPWModC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0Lmw9bihlKSx0LmE9aShlKSx0LmI9YShlKSx0Lm9wYWNpdHk9byhlKSx0KyIifX0sdC5pbnRlcnBvbGF0ZU51bWJlcj15LHQuaW50ZXJwb2xhdGVOdW1iZXJBcnJheT1kLHQuaW50ZXJwb2xhdGVPYmplY3Q9eCx0LmludGVycG9sYXRlUmdiPXUsdC5pbnRlcnBvbGF0ZVJnYkJhc2lzPWgsdC5pbnRlcnBvbGF0ZVJnYkJhc2lzQ2xvc2VkPXAsdC5pbnRlcnBvbGF0ZVJvdW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZCh0KigxLXIpK2Uqcil9fSx0LmludGVycG9sYXRlU3RyaW5nPXcsdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcz1JLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc9Tyx0LmludGVycG9sYXRlWm9vbT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10WzBdLGE9dFsxXSxvPXRbMl0scz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1zLWksZj1sLWEsaD11KnUrZipmO2lmKGg8MWUtMTIpbj1NYXRoLmxvZyhjL28pL3oscj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KnUsYSt0KmYsbypNYXRoLmV4cCh6KnQqbildfTtlbHNle3ZhciBwPU1hdGguc3FydChoKSxkPShjKmMtbypvKzQqaCkvKDIqbyoyKnApLG09KGMqYy1vKm8tNCpoKS8oMipjKjIqcCksZz1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLHY9TWF0aC5sb2coTWF0aC5zcXJ0KG0qbSsxKS1tKTtuPSh2LWcpL3oscj1mdW5jdGlvbih0KXt2YXIgZSxyPXQqbixzPUQoZyksbD1vLygyKnApKihzKihlPXoqcitnLCgoZT1NYXRoLmV4cCgyKmUpKS0xKS8oZSsxKSktZnVuY3Rpb24odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9KGcpKTtyZXR1cm5baStsKnUsYStsKmYsbypzL0QoeipyK2cpXX19cmV0dXJuIHIuZHVyYXRpb249MWUzKm4scn0sdC5waWVjZXdpc2U9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lWzBdLGE9bmV3IEFycmF5KG48MD8wOm4pO3I8bjspYVtyXT10KGksaT1lWysrcl0pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKHQqPW4pKSk7cmV0dXJuIGFbZV0odC1lKX19LHQucXVhbnRpemU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dChuLyhlLTEpKTtyZXR1cm4gcn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7ImQzLWNvbG9yIjoxNTd9XSwxNjU6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/bihyKTpuKCh0PXR8fHNlbGYpLmQzPXQuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPU1hdGguUEkscj0yKmUsbj1yLTFlLTY7ZnVuY3Rpb24gaSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIGEoKXtyZXR1cm4gbmV3IGl9aS5wcm90b3R5cGU9YS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmksbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rYSl9LGFyY1RvOmZ1bmN0aW9uKHQscixuLGksYSl7dD0rdCxyPStyLG49K24saT0raSxhPSthO3ZhciBvPXRoaXMuX3gxLHM9dGhpcy5feTEsbD1uLXQsYz1pLXIsdT1vLXQsZj1zLXIsaD11KnUrZipmO2lmKGE8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIithKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9cik7ZWxzZSBpZihoPjFlLTYpaWYoTWF0aC5hYnMoZipsLWMqdSk+MWUtNiYmYSl7dmFyIHA9bi1vLGQ9aS1zLG09bCpsK2MqYyxnPXAqcCtkKmQsdj1NYXRoLnNxcnQobSkseT1NYXRoLnNxcnQoaCkseD1hKk1hdGgudGFuKChlLU1hdGguYWNvcygobStoLWcpLygyKnYqeSkpKS8yKSxiPXgveSxfPXgvdjtNYXRoLmFicyhiLTEpPjFlLTYmJih0aGlzLl8rPSJMIisodCtiKnUpKyIsIisocitiKmYpKSx0aGlzLl8rPSJBIithKyIsIithKyIsMCwwLCIrICsoZipwPnUqZCkrIiwiKyh0aGlzLl94MT10K18qbCkrIiwiKyh0aGlzLl95MT1yK18qYyl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1yKTtlbHNlO30sYXJjOmZ1bmN0aW9uKHQsaSxhLG8scyxsKXt0PSt0LGk9K2ksbD0hIWw7dmFyIGM9KGE9K2EpKk1hdGguY29zKG8pLHU9YSpNYXRoLnNpbihvKSxmPXQrYyxoPWkrdSxwPTFebCxkPWw/by1zOnMtbztpZihhPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrYSk7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2YrIiwiK2g6KE1hdGguYWJzKHRoaXMuX3gxLWYpPjFlLTZ8fE1hdGguYWJzKHRoaXMuX3kxLWgpPjFlLTYpJiYodGhpcy5fKz0iTCIrZisiLCIraCksYSYmKGQ8MCYmKGQ9ZCVyK3IpLGQ+bj90aGlzLl8rPSJBIithKyIsIithKyIsMCwxLCIrcCsiLCIrKHQtYykrIiwiKyhpLXUpKyJBIithKyIsIithKyIsMCwxLCIrcCsiLCIrKHRoaXMuX3gxPWYpKyIsIisodGhpcy5feTE9aCk6ZD4xZS02JiYodGhpcy5fKz0iQSIrYSsiLCIrYSsiLDAsIisgKyhkPj1lKSsiLCIrcCsiLCIrKHRoaXMuX3gxPXQrYSpNYXRoLmNvcyhzKSkrIiwiKyh0aGlzLl95MT1pK2EqTWF0aC5zaW4ocykpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKSsiaCIrICtyKyJ2IisgK24rImgiKy1yKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX0sdC5wYXRoPWEsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7fV0sMTY2OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP24ocik6bigodD10fHxzZWxmKS5kMz10LmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsZSxyLG4pe2lmKGlzTmFOKGUpfHxpc05hTihyKSlyZXR1cm4gdDt2YXIgaSxhLG8scyxsLGMsdSxmLGgscD10Ll9yb290LGQ9e2RhdGE6bn0sbT10Ll94MCxnPXQuX3kwLHY9dC5feDEseT10Ll95MTtpZighcClyZXR1cm4gdC5fcm9vdD1kLHQ7Zm9yKDtwLmxlbmd0aDspaWYoKGM9ZT49KGE9KG0rdikvMikpP209YTp2PWEsKHU9cj49KG89KGcreSkvMikpP2c9bzp5PW8saT1wLCEocD1wW2Y9dTw8MXxjXSkpcmV0dXJuIGlbZl09ZCx0O2lmKHM9K3QuX3guY2FsbChudWxsLHAuZGF0YSksbD0rdC5feS5jYWxsKG51bGwscC5kYXRhKSxlPT09cyYmcj09PWwpcmV0dXJuIGQubmV4dD1wLGk/aVtmXT1kOnQuX3Jvb3Q9ZCx0O2Rve2k9aT9pW2ZdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwoYz1lPj0oYT0obSt2KS8yKSk/bT1hOnY9YSwodT1yPj0obz0oZyt5KS8yKSk/Zz1vOnk9b313aGlsZSgoZj11PDwxfGMpPT0oaD0obD49byk8PDF8cz49YSkpO3JldHVybiBpW2hdPXAsaVtmXT1kLHR9ZnVuY3Rpb24gcih0LGUscixuLGkpe3RoaXMubm9kZT10LHRoaXMueDA9ZSx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX1mdW5jdGlvbiBuKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gYSh0LGUscil7dmFyIGE9bmV3IG8obnVsbD09ZT9uOmUsbnVsbD09cj9pOnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9hOmEuYWRkQWxsKHQpfWZ1bmN0aW9uIG8odCxlLHIsbixpLGEpe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9YSx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT17ZGF0YTp0LmRhdGF9LHI9ZTt0PXQubmV4dDspcj1yLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gZX12YXIgbD1hLnByb3RvdHlwZT1vLnByb3RvdHlwZTtsLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9bmV3IG8odGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxuPXRoaXMuX3Jvb3Q7aWYoIW4pcmV0dXJuIHI7aWYoIW4ubGVuZ3RoKXJldHVybiByLl9yb290PXMobikscjtmb3IodD1be3NvdXJjZTpuLHRhcmdldDpyLl9yb290PW5ldyBBcnJheSg0KX1dO249dC5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkoZT1uLnNvdXJjZVtpXSkmJihlLmxlbmd0aD90LnB1c2goe3NvdXJjZTplLHRhcmdldDpuLnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTpuLnRhcmdldFtpXT1zKGUpKTtyZXR1cm4gcn0sbC5hZGQ9ZnVuY3Rpb24odCl7dmFyIHI9K3RoaXMuX3guY2FsbChudWxsLHQpLG49K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiBlKHRoaXMuY292ZXIocixuKSxyLG4sdCl9LGwuYWRkQWxsPWZ1bmN0aW9uKHQpe3ZhciByLG4saSxhLG89dC5sZW5ndGgscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0xLzAsdT0xLzAsZj0tMS8wLGg9LTEvMDtmb3Iobj0wO248bzsrK24paXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwscj10W25dKSl8fGlzTmFOKGE9K3RoaXMuX3kuY2FsbChudWxsLHIpKXx8KHNbbl09aSxsW25dPWEsaTxjJiYoYz1pKSxpPmYmJihmPWkpLGE8dSYmKHU9YSksYT5oJiYoaD1hKSk7aWYoYz5mfHx1PmgpcmV0dXJuIHRoaXM7Zm9yKHRoaXMuY292ZXIoYyx1KS5jb3ZlcihmLGgpLG49MDtuPG87KytuKWUodGhpcyxzW25dLGxbbl0sdFtuXSk7cmV0dXJuIHRoaXN9LGwuY292ZXI9ZnVuY3Rpb24odCxlKXtpZihpc05hTih0PSt0KXx8aXNOYU4oZT0rZSkpcmV0dXJuIHRoaXM7dmFyIHI9dGhpcy5feDAsbj10aGlzLl95MCxpPXRoaXMuX3gxLGE9dGhpcy5feTE7aWYoaXNOYU4ocikpaT0ocj1NYXRoLmZsb29yKHQpKSsxLGE9KG49TWF0aC5mbG9vcihlKSkrMTtlbHNle2Zvcih2YXIgbyxzLGw9aS1yLGM9dGhpcy5fcm9vdDtyPnR8fHQ+PWl8fG4+ZXx8ZT49YTspc3dpdGNoKHM9KGU8bik8PDF8dDxyLChvPW5ldyBBcnJheSg0KSlbc109YyxjPW8sbCo9MixzKXtjYXNlIDA6aT1yK2wsYT1uK2w7YnJlYWs7Y2FzZSAxOnI9aS1sLGE9bitsO2JyZWFrO2Nhc2UgMjppPXIrbCxuPWEtbDticmVhaztjYXNlIDM6cj1pLWwsbj1hLWx9dGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5sZW5ndGgmJih0aGlzLl9yb290PWMpfXJldHVybiB0aGlzLl94MD1yLHRoaXMuX3kwPW4sdGhpcy5feDE9aSx0aGlzLl95MT1hLHRoaXN9LGwuZGF0YT1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLnZpc2l0KChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97dC5wdXNoKGUuZGF0YSl9d2hpbGUoZT1lLm5leHQpfSkpLHR9LGwuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSxsLmZpbmQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbyxzLGwsYyx1LGY9dGhpcy5feDAsaD10aGlzLl95MCxwPXRoaXMuX3gxLGQ9dGhpcy5feTEsbT1bXSxnPXRoaXMuX3Jvb3Q7Zm9yKGcmJm0ucHVzaChuZXcgcihnLGYsaCxwLGQpKSxudWxsPT1uP249MS8wOihmPXQtbixoPWUtbixwPXQrbixkPWUrbixuKj1uKTtjPW0ucG9wKCk7KWlmKCEoIShnPWMubm9kZSl8fChhPWMueDApPnB8fChvPWMueTApPmR8fChzPWMueDEpPGZ8fChsPWMueTEpPGgpKWlmKGcubGVuZ3RoKXt2YXIgdj0oYStzKS8yLHk9KG8rbCkvMjttLnB1c2gobmV3IHIoZ1szXSx2LHkscyxsKSxuZXcgcihnWzJdLGEseSx2LGwpLG5ldyByKGdbMV0sdixvLHMseSksbmV3IHIoZ1swXSxhLG8sdix5KSksKHU9KGU+PXkpPDwxfHQ+PXYpJiYoYz1tW20ubGVuZ3RoLTFdLG1bbS5sZW5ndGgtMV09bVttLmxlbmd0aC0xLXVdLG1bbS5sZW5ndGgtMS11XT1jKX1lbHNle3ZhciB4PXQtK3RoaXMuX3guY2FsbChudWxsLGcuZGF0YSksYj1lLSt0aGlzLl95LmNhbGwobnVsbCxnLmRhdGEpLF89eCp4K2IqYjtpZihfPG4pe3ZhciB3PU1hdGguc3FydChuPV8pO2Y9dC13LGg9ZS13LHA9dCt3LGQ9ZSt3LGk9Zy5kYXRhfX1yZXR1cm4gaX0sbC5yZW1vdmU9ZnVuY3Rpb24odCl7aWYoaXNOYU4oYT0rdGhpcy5feC5jYWxsKG51bGwsdCkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSkpcmV0dXJuIHRoaXM7dmFyIGUscixuLGksYSxvLHMsbCxjLHUsZixoLHA9dGhpcy5fcm9vdCxkPXRoaXMuX3gwLG09dGhpcy5feTAsZz10aGlzLl94MSx2PXRoaXMuX3kxO2lmKCFwKXJldHVybiB0aGlzO2lmKHAubGVuZ3RoKWZvcig7Oyl7aWYoKGM9YT49KHM9KGQrZykvMikpP2Q9czpnPXMsKHU9bz49KGw9KG0rdikvMikpP209bDp2PWwsZT1wLCEocD1wW2Y9dTw8MXxjXSkpcmV0dXJuIHRoaXM7aWYoIXAubGVuZ3RoKWJyZWFrOyhlW2YrMSYzXXx8ZVtmKzImM118fGVbZiszJjNdKSYmKHI9ZSxoPWYpfWZvcig7cC5kYXRhIT09dDspaWYobj1wLCEocD1wLm5leHQpKXJldHVybiB0aGlzO3JldHVybihpPXAubmV4dCkmJmRlbGV0ZSBwLm5leHQsbj8oaT9uLm5leHQ9aTpkZWxldGUgbi5uZXh0LHRoaXMpOmU/KGk/ZVtmXT1pOmRlbGV0ZSBlW2ZdLChwPWVbMF18fGVbMV18fGVbMl18fGVbM10pJiZwPT09KGVbM118fGVbMl18fGVbMV18fGVbMF0pJiYhcC5sZW5ndGgmJihyP3JbaF09cDp0aGlzLl9yb290PXApLHRoaXMpOih0aGlzLl9yb290PWksdGhpcyl9LGwucmVtb3ZlQWxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSl0aGlzLnJlbW92ZSh0W2VdKTtyZXR1cm4gdGhpc30sbC5yb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LGwuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMudmlzaXQoKGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3srK3R9d2hpbGUoZT1lLm5leHQpfSkpLHR9LGwudmlzaXQ9ZnVuY3Rpb24odCl7dmFyIGUsbixpLGEsbyxzLGw9W10sYz10aGlzLl9yb290O2ZvcihjJiZsLnB1c2gobmV3IHIoYyx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9bC5wb3AoKTspaWYoIXQoYz1lLm5vZGUsaT1lLngwLGE9ZS55MCxvPWUueDEscz1lLnkxKSYmYy5sZW5ndGgpe3ZhciB1PShpK28pLzIsZj0oYStzKS8yOyhuPWNbM10pJiZsLnB1c2gobmV3IHIobix1LGYsbyxzKSksKG49Y1syXSkmJmwucHVzaChuZXcgcihuLGksZix1LHMpKSwobj1jWzFdKSYmbC5wdXNoKG5ldyByKG4sdSxhLG8sZikpLChuPWNbMF0pJiZsLnB1c2gobmV3IHIobixpLGEsdSxmKSl9cmV0dXJuIHRoaXN9LGwudmlzaXRBZnRlcj1mdW5jdGlvbih0KXt2YXIgZSxuPVtdLGk9W107Zm9yKHRoaXMuX3Jvb3QmJm4ucHVzaChuZXcgcih0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1uLnBvcCgpOyl7dmFyIGE9ZS5ub2RlO2lmKGEubGVuZ3RoKXt2YXIgbyxzPWUueDAsbD1lLnkwLGM9ZS54MSx1PWUueTEsZj0ocytjKS8yLGg9KGwrdSkvMjsobz1hWzBdKSYmbi5wdXNoKG5ldyByKG8scyxsLGYsaCkpLChvPWFbMV0pJiZuLnB1c2gobmV3IHIobyxmLGwsYyxoKSksKG89YVsyXSkmJm4ucHVzaChuZXcgcihvLHMsaCxmLHUpKSwobz1hWzNdKSYmbi5wdXNoKG5ldyByKG8sZixoLGMsdSkpfWkucHVzaChlKX1mb3IoO2U9aS5wb3AoKTspdChlLm5vZGUsZS54MCxlLnkwLGUueDEsZS55MSk7cmV0dXJuIHRoaXN9LGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9LHQucXVhZHRyZWU9YSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwxNjc6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24obixpKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/aShyLHQoImQzLXBhdGgiKSk6aSgobj1ufHxzZWxmKS5kMz1uLmQzfHx7fSxuLmQzKX0odGhpcywoZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIG49TWF0aC5hYnMsaT1NYXRoLmF0YW4yLGE9TWF0aC5jb3Msbz1NYXRoLm1heCxzPU1hdGgubWluLGw9TWF0aC5zaW4sYz1NYXRoLnNxcnQsdT1NYXRoLlBJLGY9dS8yLGg9Mip1O2Z1bmN0aW9uIHAodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/dTpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdD49MT9mOnQ8PS0xPy1mOk1hdGguYXNpbih0KX1mdW5jdGlvbiBtKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIGcodCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24geCh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiBiKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9ci10LGM9bi1lLHU9by1pLGY9cy1hLGg9ZipsLXUqYztpZighKGgqaDwxZS0xMikpcmV0dXJuW3QrKGg9KHUqKGUtYSktZioodC1pKSkvaCkqbCxlK2gqY119ZnVuY3Rpb24gXyh0LGUscixuLGksYSxzKXt2YXIgbD10LXIsdT1lLW4sZj0ocz9hOi1hKS9jKGwqbCt1KnUpLGg9Zip1LHA9LWYqbCxkPXQraCxtPWUrcCxnPXIraCx2PW4rcCx5PShkK2cpLzIseD0obSt2KS8yLGI9Zy1kLF89di1tLHc9YipiK18qXyxUPWktYSxrPWQqdi1nKm0sQT0oXzwwPy0xOjEpKmMobygwLFQqVCp3LWsqaykpLE09KGsqXy1iKkEpL3csUz0oLWsqYi1fKkEpL3csRT0oaypfK2IqQSkvdyxMPSgtaypiK18qQSkvdyxDPU0teSxQPVMteCxJPUUteSxPPUwteDtyZXR1cm4gQypDK1AqUD5JKkkrTypPJiYoTT1FLFM9TCkse2N4Ok0sY3k6Uyx4MDE6LWgseTAxOi1wLHgxMTpNKihpL1QtMSkseTExOlMqKGkvVC0xKX19ZnVuY3Rpb24gdyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gVCh0KXtyZXR1cm4gbmV3IHcodCl9ZnVuY3Rpb24gayh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBBKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIE0oKXt2YXIgdD1rLG49QSxpPXIoITApLGE9bnVsbCxvPVQscz1udWxsO2Z1bmN0aW9uIGwocil7dmFyIGwsYyx1LGY9ci5sZW5ndGgsaD0hMTtmb3IobnVsbD09YSYmKHM9byh1PWUucGF0aCgpKSksbD0wO2w8PWY7KytsKSEobDxmJiZpKGM9cltsXSxsLHIpKT09PWgmJigoaD0haCk/cy5saW5lU3RhcnQoKTpzLmxpbmVFbmQoKSksaCYmcy5wb2ludCgrdChjLGwsciksK24oYyxsLHIpKTtpZih1KXJldHVybiBzPW51bGwsdSsiInx8bnVsbH1yZXR1cm4gbC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cigrZSksbCk6dH0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksbCk6bn0sbC5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cighIXQpLGwpOml9LGwuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxudWxsIT1hJiYocz1vKGEpKSxsKTpvfSxsLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/YT1zPW51bGw6cz1vKGE9dCksbCk6YX0sbH1mdW5jdGlvbiBTKCl7dmFyIHQ9ayxuPW51bGwsaT1yKDApLGE9QSxvPXIoITApLHM9bnVsbCxsPVQsYz1udWxsO2Z1bmN0aW9uIHUocil7dmFyIHUsZixoLHAsZCxtPXIubGVuZ3RoLGc9ITEsdj1uZXcgQXJyYXkobSkseT1uZXcgQXJyYXkobSk7Zm9yKG51bGw9PXMmJihjPWwoZD1lLnBhdGgoKSkpLHU9MDt1PD1tOysrdSl7aWYoISh1PG0mJm8ocD1yW3VdLHUscikpPT09ZylpZihnPSFnKWY9dSxjLmFyZWFTdGFydCgpLGMubGluZVN0YXJ0KCk7ZWxzZXtmb3IoYy5saW5lRW5kKCksYy5saW5lU3RhcnQoKSxoPXUtMTtoPj1mOy0taCljLnBvaW50KHZbaF0seVtoXSk7Yy5saW5lRW5kKCksYy5hcmVhRW5kKCl9ZyYmKHZbdV09K3QocCx1LHIpLHlbdV09K2kocCx1LHIpLGMucG9pbnQobj8rbihwLHUscik6dlt1XSxhPythKHAsdSxyKTp5W3VdKSl9aWYoZClyZXR1cm4gYz1udWxsLGQrIiJ8fG51bGx9ZnVuY3Rpb24gZigpe3JldHVybiBNKCkuZGVmaW5lZChvKS5jdXJ2ZShsKS5jb250ZXh0KHMpfXJldHVybiB1Lng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKCtlKSxuPW51bGwsdSk6dH0sdS54MD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoK2UpLHUpOnR9LHUueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksdSk6bn0sdS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksYT1udWxsLHUpOml9LHUueTA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSx1KTppfSx1LnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLHUpOmF9LHUubGluZVgwPXUubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIGYoKS54KHQpLnkoaSl9LHUubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIGYoKS54KHQpLnkoYSl9LHUubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIGYoKS54KG4pLnkoaSl9LHUuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoISF0KSx1KTpvfSx1LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsbnVsbCE9cyYmKGM9bChzKSksdSk6bH0sdS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3M9Yz1udWxsOmM9bChzPXQpLHUpOnN9LHV9ZnVuY3Rpb24gRSh0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBMKHQpe3JldHVybiB0fXcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9fX07dmFyIEM9SShUKTtmdW5jdGlvbiBQKHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24gSSh0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcgUCh0KGUpKX1yZXR1cm4gZS5fY3VydmU9dCxlfWZ1bmN0aW9uIE8odCl7dmFyIGU9dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoSSh0KSk6ZSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiB6KCl7cmV0dXJuIE8oTSgpLmN1cnZlKEMpKX1mdW5jdGlvbiBEKCl7dmFyIHQ9UygpLmN1cnZlKEMpLGU9dC5jdXJ2ZSxyPXQubGluZVgwLG49dC5saW5lWDEsaT10LmxpbmVZMCxhPXQubGluZVkxO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQuc3RhcnRBbmdsZT10LngwLGRlbGV0ZSB0LngwLHQuZW5kQW5nbGU9dC54MSxkZWxldGUgdC54MSx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmlubmVyUmFkaXVzPXQueTAsZGVsZXRlIHQueTAsdC5vdXRlclJhZGl1cz10LnkxLGRlbGV0ZSB0LnkxLHQubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gTyhyKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gTyhuKCkpfSxkZWxldGUgdC5saW5lWDEsdC5saW5lSW5uZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gTyhpKCkpfSxkZWxldGUgdC5saW5lWTAsdC5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gTyhhKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKEkodCkpOmUoKS5fY3VydmV9LHR9ZnVuY3Rpb24gUih0LGUpe3JldHVyblsoZT0rZSkqTWF0aC5jb3ModC09TWF0aC5QSS8yKSxlKk1hdGguc2luKHQpXX1QLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX2N1cnZlLnBvaW50KGUqTWF0aC5zaW4odCksZSotTWF0aC5jb3ModCkpfX07dmFyIEY9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEIodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIE4odCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIGoodCl7dmFyIG49QixpPU4sYT1rLG89QSxzPW51bGw7ZnVuY3Rpb24gbCgpe3ZhciByLGw9Ri5jYWxsKGFyZ3VtZW50cyksYz1uLmFwcGx5KHRoaXMsbCksdT1pLmFwcGx5KHRoaXMsbCk7aWYoc3x8KHM9cj1lLnBhdGgoKSksdChzLCthLmFwcGx5KHRoaXMsKGxbMF09YyxsKSksK28uYXBwbHkodGhpcyxsKSwrYS5hcHBseSh0aGlzLChsWzBdPXUsbCkpLCtvLmFwcGx5KHRoaXMsbCkpLHIpcmV0dXJuIHM9bnVsbCxyKyIifHxudWxsfXJldHVybiBsLnNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGwpOm59LGwudGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbCk6aX0sbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksbCk6YX0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksbCk6b30sbC5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PXQ/bnVsbDp0LGwpOnN9LGx9ZnVuY3Rpb24gVSh0LGUscixuLGkpe3QubW92ZVRvKGUsciksdC5iZXppZXJDdXJ2ZVRvKGU9KGUrbikvMixyLGUsaSxuLGkpfWZ1bmN0aW9uIFYodCxlLHIsbixpKXt0Lm1vdmVUbyhlLHIpLHQuYmV6aWVyQ3VydmVUbyhlLHI9KHIraSkvMixuLHIsbixpKX1mdW5jdGlvbiBIKHQsZSxyLG4saSl7dmFyIGE9UihlLHIpLG89UihlLHI9KHIraSkvMikscz1SKG4sciksbD1SKG4saSk7dC5tb3ZlVG8oYVswXSxhWzFdKSx0LmJlemllckN1cnZlVG8ob1swXSxvWzFdLHNbMF0sc1sxXSxsWzBdLGxbMV0pfXZhciBxPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUvdSk7dC5tb3ZlVG8ociwwKSx0LmFyYygwLDAsciwwLGgpfX0sRz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlLzUpLzI7dC5tb3ZlVG8oLTMqciwtciksdC5saW5lVG8oLXIsLXIpLHQubGluZVRvKC1yLC0zKnIpLHQubGluZVRvKHIsLTMqciksdC5saW5lVG8ociwtciksdC5saW5lVG8oMypyLC1yKSx0LmxpbmVUbygzKnIsciksdC5saW5lVG8ocixyKSx0LmxpbmVUbyhyLDMqciksdC5saW5lVG8oLXIsMypyKSx0LmxpbmVUbygtcixyKSx0LmxpbmVUbygtMypyLHIpLHQuY2xvc2VQYXRoKCl9fSxZPU1hdGguc3FydCgxLzMpLFc9MipZLFg9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoZS9XKSxuPXIqWTt0Lm1vdmVUbygwLC1yKSx0LmxpbmVUbyhuLDApLHQubGluZVRvKDAsciksdC5saW5lVG8oLW4sMCksdC5jbG9zZVBhdGgoKX19LFo9TWF0aC5zaW4odS8xMCkvTWF0aC5zaW4oNyp1LzEwKSxKPU1hdGguc2luKGgvMTApKlosSz0tTWF0aC5jb3MoaC8xMCkqWixRPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KC44OTA4MTMwOTE1MjkyODUyKmUpLG49SipyLGk9SypyO3QubW92ZVRvKDAsLXIpLHQubGluZVRvKG4saSk7Zm9yKHZhciBhPTE7YTw1OysrYSl7dmFyIG89aCphLzUscz1NYXRoLmNvcyhvKSxsPU1hdGguc2luKG8pO3QubGluZVRvKGwqciwtcypyKSx0LmxpbmVUbyhzKm4tbCppLGwqbitzKmkpfXQuY2xvc2VQYXRoKCl9fSwkPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUpLG49LXIvMjt0LnJlY3QobixuLHIscil9fSx0dD1NYXRoLnNxcnQoMyksZXQ9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj0tTWF0aC5zcXJ0KGUvKDMqdHQpKTt0Lm1vdmVUbygwLDIqciksdC5saW5lVG8oLXR0KnIsLXIpLHQubGluZVRvKHR0KnIsLXIpLHQuY2xvc2VQYXRoKCl9fSxydD0tLjUsbnQ9TWF0aC5zcXJ0KDMpLzIsaXQ9MS9NYXRoLnNxcnQoMTIpLGF0PTMqKGl0LzIrMSksb3Q9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoZS9hdCksbj1yLzIsaT1yKml0LGE9bixvPXIqaXQrcixzPS1hLGw9bzt0Lm1vdmVUbyhuLGkpLHQubGluZVRvKGEsbyksdC5saW5lVG8ocyxsKSx0LmxpbmVUbyhydCpuLW50KmksbnQqbitydCppKSx0LmxpbmVUbyhydCphLW50Km8sbnQqYStydCpvKSx0LmxpbmVUbyhydCpzLW50KmwsbnQqcytydCpsKSx0LmxpbmVUbyhydCpuK250KmkscnQqaS1udCpuKSx0LmxpbmVUbyhydCphK250Km8scnQqby1udCphKSx0LmxpbmVUbyhydCpzK250KmwscnQqbC1udCpzKSx0LmNsb3NlUGF0aCgpfX0sc3Q9W3EsRyxYLCQsUSxldCxvdF07ZnVuY3Rpb24gbHQoKXt9ZnVuY3Rpb24gY3QodCxlLHIpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStlKS82LCh0Ll95MCs0KnQuX3kxK3IpLzYpfWZ1bmN0aW9uIHV0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBmdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gaHQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHB0KHQsZSl7dGhpcy5fYmFzaXM9bmV3IHV0KHQpLHRoaXMuX2JldGE9ZX11dC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOmN0KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0OmN0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxmdC5wcm90b3R5cGU9e2FyZWFTdGFydDpsdCxhcmVhRW5kOmx0LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gyPXQsdGhpcy5feTI9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDQ9dCx0aGlzLl95ND1lLHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsKHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNik7YnJlYWs7ZGVmYXVsdDpjdCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0saHQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIHI9KHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNixuPSh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhyLG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHIsbik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpjdCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0scHQucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxyPXQubGVuZ3RoLTE7aWYocj4wKWZvcih2YXIgbixpPXRbMF0sYT1lWzBdLG89dFtyXS1pLHM9ZVtyXS1hLGw9LTE7KytsPD1yOyluPWwvcix0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbbF0rKDEtdGhpcy5fYmV0YSkqKGkrbipvKSx0aGlzLl9iZXRhKmVbbF0rKDEtdGhpcy5fYmV0YSkqKGErbipzKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19O3ZhciBkdD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIDE9PT1lP25ldyB1dCh0KTpuZXcgcHQodCxlKX1yZXR1cm4gci5iZXRhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oLjg1KTtmdW5jdGlvbiBtdCh0LGUscil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQuX3gxK3QuX2sqKHQuX3gyLXQuX3gwKSx0Ll95MSt0Ll9rKih0Ll95Mi10Ll95MCksdC5feDIrdC5fayoodC5feDEtZSksdC5feTIrdC5fayoodC5feTEtciksdC5feDIsdC5feTIpfWZ1bmN0aW9uIGd0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1ndC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6bXQodGhpcyx0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPXQsdGhpcy5feTE9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Om10KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgdnQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuZXcgZ3QodCxlKX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oMCk7ZnVuY3Rpb24geXQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fXl0LnByb3RvdHlwZT17YXJlYVN0YXJ0Omx0LGFyZWFFbmQ6bHQsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDptdCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIHh0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gbmV3IHl0KHQsZSl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KDApO2Z1bmN0aW9uIGJ0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1idC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDptdCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIF90PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gbmV3IGJ0KHQsZSl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KDApO2Z1bmN0aW9uIHd0KHQsZSxyKXt2YXIgbj10Ll94MSxpPXQuX3kxLGE9dC5feDIsbz10Ll95MjtpZih0Ll9sMDFfYT4xZS0xMil7dmFyIHM9Mip0Ll9sMDFfMmErMyp0Ll9sMDFfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsbD0zKnQuX2wwMV9hKih0Ll9sMDFfYSt0Ll9sMTJfYSk7bj0obipzLXQuX3gwKnQuX2wxMl8yYSt0Ll94Mip0Ll9sMDFfMmEpL2wsaT0oaSpzLXQuX3kwKnQuX2wxMl8yYSt0Ll95Mip0Ll9sMDFfMmEpL2x9aWYodC5fbDIzX2E+MWUtMTIpe3ZhciBjPTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLHU9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO2E9KGEqYyt0Ll94MSp0Ll9sMjNfMmEtZSp0Ll9sMTJfMmEpL3Usbz0obypjK3QuX3kxKnQuX2wyM18yYS1yKnQuX2wxMl8yYSkvdX10Ll9jb250ZXh0LmJlemllckN1cnZlVG8obixpLGEsbyx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gVHQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1UdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mil9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItdCxuPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Ond0KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIGt0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZT9uZXcgVHQodCxlKTpuZXcgZ3QodCwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KC41KTtmdW5jdGlvbiBBdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfUF0LnByb3RvdHlwZT17YXJlYVN0YXJ0Omx0LGFyZWFFbmQ6bHQsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6d3QodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgTXQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP25ldyBBdCh0LGUpOm5ldyB5dCh0LDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oLjUpO2Z1bmN0aW9uIFN0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9U3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi10LG49dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Ond0KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIEV0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZT9uZXcgU3QodCxlKTpuZXcgYnQodCwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KC41KTtmdW5jdGlvbiBMdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gQ3QodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIFB0KHQsZSxyKXt2YXIgbj10Ll94MS10Ll94MCxpPWUtdC5feDEsYT0odC5feTEtdC5feTApLyhufHxpPDAmJi0wKSxvPShyLXQuX3kxKS8oaXx8bjwwJiYtMCkscz0oYSppK28qbikvKG4raSk7cmV0dXJuKEN0KGEpK0N0KG8pKSpNYXRoLm1pbihNYXRoLmFicyhhKSxNYXRoLmFicyhvKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24gSXQodCxlKXt2YXIgcj10Ll94MS10Ll94MDtyZXR1cm4gcj8oMyoodC5feTEtdC5feTApL3ItZSkvMjplfWZ1bmN0aW9uIE90KHQsZSxyKXt2YXIgbj10Ll94MCxpPXQuX3kwLGE9dC5feDEsbz10Ll95MSxzPShhLW4pLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4rcyxpK3MqZSxhLXMsby1zKnIsYSxvKX1mdW5jdGlvbiB6dCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gRHQodCl7dGhpcy5fY29udGV4dD1uZXcgUnQodCl9ZnVuY3Rpb24gUnQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEZ0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBCdCh0KXt2YXIgZSxyLG49dC5sZW5ndGgtMSxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKTtmb3IoaVswXT0wLGFbMF09MixvWzBdPXRbMF0rMip0WzFdLGU9MTtlPG4tMTsrK2UpaVtlXT0xLGFbZV09NCxvW2VdPTQqdFtlXSsyKnRbZSsxXTtmb3IoaVtuLTFdPTIsYVtuLTFdPTcsb1tuLTFdPTgqdFtuLTFdK3Rbbl0sZT0xO2U8bjsrK2Upcj1pW2VdL2FbZS0xXSxhW2VdLT1yLG9bZV0tPXIqb1tlLTFdO2ZvcihpW24tMV09b1tuLTFdL2Fbbi0xXSxlPW4tMjtlPj0wOy0tZSlpW2VdPShvW2VdLWlbZSsxXSkvYVtlXTtmb3IoYVtuLTFdPSh0W25dK2lbbi0xXSkvMixlPTA7ZTxuLTE7KytlKWFbZV09Mip0W2UrMV0taVtlKzFdO3JldHVybltpLGFdfWZ1bmN0aW9uIE50KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9ZX1mdW5jdGlvbiBqdCh0LGUpe2lmKChpPXQubGVuZ3RoKT4xKWZvcih2YXIgcixuLGksYT0xLG89dFtlWzBdXSxzPW8ubGVuZ3RoO2E8aTsrK2EpZm9yKG49byxvPXRbZVthXV0scj0wO3I8czsrK3Ipb1tyXVsxXSs9b1tyXVswXT1pc05hTihuW3JdWzFdKT9uW3JdWzBdOm5bcl1bMV19ZnVuY3Rpb24gVXQodCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpOy0tZT49MDspcltlXT1lO3JldHVybiByfWZ1bmN0aW9uIFZ0KHQsZSl7cmV0dXJuIHRbZV19ZnVuY3Rpb24gSHQodCl7dmFyIGU9dC5tYXAocXQpO3JldHVybiBVdCh0KS5zb3J0KChmdW5jdGlvbih0LHIpe3JldHVybiBlW3RdLWVbcl19KSl9ZnVuY3Rpb24gcXQodCl7Zm9yKHZhciBlLHI9LTEsbj0wLGk9dC5sZW5ndGgsYT0tMS8wOysrcjxpOykoZT0rdFtyXVsxXSk+YSYmKGE9ZSxuPXIpO3JldHVybiBufWZ1bmN0aW9uIEd0KHQpe3ZhciBlPXQubWFwKFl0KTtyZXR1cm4gVXQodCkuc29ydCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gZVt0XS1lW3JdfSkpfWZ1bmN0aW9uIFl0KHQpe2Zvcih2YXIgZSxyPTAsbj0tMSxpPXQubGVuZ3RoOysrbjxpOykoZT0rdFtuXVsxXSkmJihyKz1lKTtyZXR1cm4gcn1MdC5wcm90b3R5cGU9e2FyZWFTdGFydDpsdCxhcmVhRW5kOmx0LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0PSt0LGU9K2UsdGhpcy5fcG9pbnQ/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKToodGhpcy5fcG9pbnQ9MSx0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpKX19LHp0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpPdCh0aGlzLHRoaXMuX3QwLEl0KHRoaXMsdGhpcy5fdDApKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TmFOO2lmKGU9K2UsKHQ9K3QpIT09dGhpcy5feDF8fGUhPT10aGlzLl95MSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxPdCh0aGlzLEl0KHRoaXMscj1QdCh0aGlzLHQsZSkpLHIpO2JyZWFrO2RlZmF1bHQ6T3QodGhpcyx0aGlzLl90MCxyPVB0KHRoaXMsdCxlKSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lLHRoaXMuX3QwPXJ9fX0sKER0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHp0LnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKHQsZSl7enQucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyxlLHQpfSxSdC5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubW92ZVRvKGUsdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLHQsbixyLGEsaSl9fSxGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W119LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxyPXQubGVuZ3RoO2lmKHIpaWYodGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0WzBdLGVbMF0pOnRoaXMuX2NvbnRleHQubW92ZVRvKHRbMF0sZVswXSksMj09PXIpdGhpcy5fY29udGV4dC5saW5lVG8odFsxXSxlWzFdKTtlbHNlIGZvcih2YXIgbj1CdCh0KSxpPUJ0KGUpLGE9MCxvPTE7bzxyOysrYSwrK28pdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG5bMF1bYV0saVswXVthXSxuWzFdW2FdLGlbMV1bYV0sdFtvXSxlW29dKTsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT1yKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9fSxOdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmMj09PXRoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LGUpLHRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK3QqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsZSl9fXRoaXMuX3g9dCx0aGlzLl95PWV9fSx0LmFyYz1mdW5jdGlvbigpe3ZhciB0PW0sbz1nLHc9cigwKSxUPW51bGwsaz12LEE9eSxNPXgsUz1udWxsO2Z1bmN0aW9uIEUoKXt2YXIgcixtLGc9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLHY9K28uYXBwbHkodGhpcyxhcmd1bWVudHMpLHk9ay5hcHBseSh0aGlzLGFyZ3VtZW50cyktZix4PUEuYXBwbHkodGhpcyxhcmd1bWVudHMpLWYsRT1uKHgteSksTD14Pnk7aWYoU3x8KFM9cj1lLnBhdGgoKSksdjxnJiYobT12LHY9ZyxnPW0pLHY+MWUtMTIpaWYoRT5oLTFlLTEyKVMubW92ZVRvKHYqYSh5KSx2KmwoeSkpLFMuYXJjKDAsMCx2LHkseCwhTCksZz4xZS0xMiYmKFMubW92ZVRvKGcqYSh4KSxnKmwoeCkpLFMuYXJjKDAsMCxnLHgseSxMKSk7ZWxzZXt2YXIgQyxQLEk9eSxPPXgsej15LEQ9eCxSPUUsRj1FLEI9TS5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixOPUI+MWUtMTImJihUPytULmFwcGx5KHRoaXMsYXJndW1lbnRzKTpjKGcqZyt2KnYpKSxqPXMobih2LWcpLzIsK3cuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxVPWosVj1qO2lmKE4+MWUtMTIpe3ZhciBIPWQoTi9nKmwoQikpLHE9ZChOL3YqbChCKSk7KFItPTIqSCk+MWUtMTI/KHorPUgqPUw/MTotMSxELT1IKTooUj0wLHo9RD0oeSt4KS8yKSwoRi09MipxKT4xZS0xMj8oSSs9cSo9TD8xOi0xLE8tPXEpOihGPTAsST1PPSh5K3gpLzIpfXZhciBHPXYqYShJKSxZPXYqbChJKSxXPWcqYShEKSxYPWcqbChEKTtpZihqPjFlLTEyKXt2YXIgWixKPXYqYShPKSxLPXYqbChPKSxRPWcqYSh6KSwkPWcqbCh6KTtpZihFPHUmJihaPWIoRyxZLFEsJCxKLEssVyxYKSkpe3ZhciB0dD1HLVpbMF0sZXQ9WS1aWzFdLHJ0PUotWlswXSxudD1LLVpbMV0saXQ9MS9sKHAoKHR0KnJ0K2V0Km50KS8oYyh0dCp0dCtldCpldCkqYyhydCpydCtudCpudCkpKS8yKSxhdD1jKFpbMF0qWlswXStaWzFdKlpbMV0pO1U9cyhqLChnLWF0KS8oaXQtMSkpLFY9cyhqLCh2LWF0KS8oaXQrMSkpfX1GPjFlLTEyP1Y+MWUtMTI/KEM9XyhRLCQsRyxZLHYsVixMKSxQPV8oSixLLFcsWCx2LFYsTCksUy5tb3ZlVG8oQy5jeCtDLngwMSxDLmN5K0MueTAxKSxWPGo/Uy5hcmMoQy5jeCxDLmN5LFYsaShDLnkwMSxDLngwMSksaShQLnkwMSxQLngwMSksIUwpOihTLmFyYyhDLmN4LEMuY3ksVixpKEMueTAxLEMueDAxKSxpKEMueTExLEMueDExKSwhTCksUy5hcmMoMCwwLHYsaShDLmN5K0MueTExLEMuY3grQy54MTEpLGkoUC5jeStQLnkxMSxQLmN4K1AueDExKSwhTCksUy5hcmMoUC5jeCxQLmN5LFYsaShQLnkxMSxQLngxMSksaShQLnkwMSxQLngwMSksIUwpKSk6KFMubW92ZVRvKEcsWSksUy5hcmMoMCwwLHYsSSxPLCFMKSk6Uy5tb3ZlVG8oRyxZKSxnPjFlLTEyJiZSPjFlLTEyP1U+MWUtMTI/KEM9XyhXLFgsSixLLGcsLVUsTCksUD1fKEcsWSxRLCQsZywtVSxMKSxTLmxpbmVUbyhDLmN4K0MueDAxLEMuY3krQy55MDEpLFU8aj9TLmFyYyhDLmN4LEMuY3ksVSxpKEMueTAxLEMueDAxKSxpKFAueTAxLFAueDAxKSwhTCk6KFMuYXJjKEMuY3gsQy5jeSxVLGkoQy55MDEsQy54MDEpLGkoQy55MTEsQy54MTEpLCFMKSxTLmFyYygwLDAsZyxpKEMuY3krQy55MTEsQy5jeCtDLngxMSksaShQLmN5K1AueTExLFAuY3grUC54MTEpLEwpLFMuYXJjKFAuY3gsUC5jeSxVLGkoUC55MTEsUC54MTEpLGkoUC55MDEsUC54MDEpLCFMKSkpOlMuYXJjKDAsMCxnLEQseixMKTpTLmxpbmVUbyhXLFgpfWVsc2UgUy5tb3ZlVG8oMCwwKTtpZihTLmNsb3NlUGF0aCgpLHIpcmV0dXJuIFM9bnVsbCxyKyIifHxudWxsfXJldHVybiBFLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGU9KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHI9KCtrLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK0EuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLXUvMjtyZXR1cm5bYShyKSplLGwocikqZV19LEUuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKCtlKSxFKTp0fSxFLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksRSk6b30sRS5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxFKTp3fSxFLnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxFKTpUfSxFLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxFKTprfSxFLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksRSk6QX0sRS5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLEUpOk19LEUuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz1udWxsPT10P251bGw6dCxFKTpTfSxFfSx0LmFyZWE9Uyx0LmFyZWFSYWRpYWw9RCx0LmN1cnZlQmFzaXM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB1dCh0KX0sdC5jdXJ2ZUJhc2lzQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZnQodCl9LHQuY3VydmVCYXNpc09wZW49ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBodCh0KX0sdC5jdXJ2ZUJ1bmRsZT1kdCx0LmN1cnZlQ2FyZGluYWw9dnQsdC5jdXJ2ZUNhcmRpbmFsQ2xvc2VkPXh0LHQuY3VydmVDYXJkaW5hbE9wZW49X3QsdC5jdXJ2ZUNhdG11bGxSb209a3QsdC5jdXJ2ZUNhdG11bGxSb21DbG9zZWQ9TXQsdC5jdXJ2ZUNhdG11bGxSb21PcGVuPUV0LHQuY3VydmVMaW5lYXI9VCx0LmN1cnZlTGluZWFyQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTHQodCl9LHQuY3VydmVNb25vdG9uZVg9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB6dCh0KX0sdC5jdXJ2ZU1vbm90b25lWT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IER0KHQpfSx0LmN1cnZlTmF0dXJhbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEZ0KHQpfSx0LmN1cnZlU3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE50KHQsLjUpfSx0LmN1cnZlU3RlcEFmdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTnQodCwxKX0sdC5jdXJ2ZVN0ZXBCZWZvcmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBOdCh0LDApfSx0LmxpbmU9TSx0LmxpbmVSYWRpYWw9eix0LmxpbmtIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuIGooVSl9LHQubGlua1JhZGlhbD1mdW5jdGlvbigpe3ZhciB0PWooSCk7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdH0sdC5saW5rVmVydGljYWw9ZnVuY3Rpb24oKXtyZXR1cm4gaihWKX0sdC5waWU9ZnVuY3Rpb24oKXt2YXIgdD1MLGU9RSxuPW51bGwsaT1yKDApLGE9cihoKSxvPXIoMCk7ZnVuY3Rpb24gcyhyKXt2YXIgcyxsLGMsdSxmLHA9ci5sZW5ndGgsZD0wLG09bmV3IEFycmF5KHApLGc9bmV3IEFycmF5KHApLHY9K2kuYXBwbHkodGhpcyxhcmd1bWVudHMpLHk9TWF0aC5taW4oaCxNYXRoLm1heCgtaCxhLmFwcGx5KHRoaXMsYXJndW1lbnRzKS12KSkseD1NYXRoLm1pbihNYXRoLmFicyh5KS9wLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxiPXgqKHk8MD8tMToxKTtmb3Iocz0wO3M8cDsrK3MpKGY9Z1ttW3NdPXNdPSt0KHJbc10scyxyKSk+MCYmKGQrPWYpO2ZvcihudWxsIT1lP20uc29ydCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gZShnW3RdLGdbcl0pfSkpOm51bGwhPW4mJm0uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbihyW3RdLHJbZV0pfSkpLHM9MCxjPWQ/KHktcCpiKS9kOjA7czxwOysrcyx2PXUpbD1tW3NdLHU9disoKGY9Z1tsXSk+MD9mKmM6MCkrYixnW2xdPXtkYXRhOnJbbF0saW5kZXg6cyx2YWx1ZTpmLHN0YXJ0QW5nbGU6dixlbmRBbmdsZTp1LHBhZEFuZ2xlOnh9O3JldHVybiBnfXJldHVybiBzLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cigrZSkscyk6dH0scy5zb3J0VmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbj1udWxsLHMpOmV9LHMuc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGU9bnVsbCxzKTpufSxzLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxzKTppfSxzLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCkscyk6YX0scy5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLHMpOm99LHN9LHQucG9pbnRSYWRpYWw9Uix0LnJhZGlhbEFyZWE9RCx0LnJhZGlhbExpbmU9eix0LnN0YWNrPWZ1bmN0aW9uKCl7dmFyIHQ9cihbXSksZT1VdCxuPWp0LGk9VnQ7ZnVuY3Rpb24gYShyKXt2YXIgYSxvLHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbD1yLmxlbmd0aCxjPXMubGVuZ3RoLHU9bmV3IEFycmF5KGMpO2ZvcihhPTA7YTxjOysrYSl7Zm9yKHZhciBmLGg9c1thXSxwPXVbYV09bmV3IEFycmF5KGwpLGQ9MDtkPGw7KytkKXBbZF09Zj1bMCwraShyW2RdLGgsZCxyKV0sZi5kYXRhPXJbZF07cC5rZXk9aH1mb3IoYT0wLG89ZSh1KTthPGM7KythKXVbb1thXV0uaW5kZXg9YTtyZXR1cm4gbih1LG8pLHV9cmV0dXJuIGEua2V5cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoRi5jYWxsKGUpKSxhKTp0fSxhLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksYSk6aX0sYS5vcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P1V0OiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cihGLmNhbGwodCkpLGEpOmV9LGEub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/anQ6dCxhKTpufSxhfSx0LnN0YWNrT2Zmc2V0RGl2ZXJnaW5nPWZ1bmN0aW9uKHQsZSl7aWYoKHM9dC5sZW5ndGgpPjApZm9yKHZhciByLG4saSxhLG8scyxsPTAsYz10W2VbMF1dLmxlbmd0aDtsPGM7KytsKWZvcihhPW89MCxyPTA7cjxzOysrcikoaT0obj10W2Vbcl1dW2xdKVsxXS1uWzBdKT4wPyhuWzBdPWEsblsxXT1hKz1pKTppPDA/KG5bMV09byxuWzBdPW8rPWkpOihuWzBdPTAsblsxXT1pKX0sdC5zdGFja09mZnNldEV4cGFuZD1mdW5jdGlvbih0LGUpe2lmKChuPXQubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpLGE9MCxvPXRbMF0ubGVuZ3RoO2E8bzsrK2Epe2ZvcihpPXI9MDtyPG47KytyKWkrPXRbcl1bYV1bMV18fDA7aWYoaSlmb3Iocj0wO3I8bjsrK3IpdFtyXVthXVsxXS89aX1qdCh0LGUpfX0sdC5zdGFja09mZnNldE5vbmU9anQsdC5zdGFja09mZnNldFNpbGhvdWV0dGU9ZnVuY3Rpb24odCxlKXtpZigocj10Lmxlbmd0aCk+MCl7Zm9yKHZhciByLG49MCxpPXRbZVswXV0sYT1pLmxlbmd0aDtuPGE7KytuKXtmb3IodmFyIG89MCxzPTA7bzxyOysrbylzKz10W29dW25dWzFdfHwwO2lbbl1bMV0rPWlbbl1bMF09LXMvMn1qdCh0LGUpfX0sdC5zdGFja09mZnNldFdpZ2dsZT1mdW5jdGlvbih0LGUpe2lmKChpPXQubGVuZ3RoKT4wJiYobj0ocj10W2VbMF1dKS5sZW5ndGgpPjApe2Zvcih2YXIgcixuLGksYT0wLG89MTtvPG47KytvKXtmb3IodmFyIHM9MCxsPTAsYz0wO3M8aTsrK3Mpe2Zvcih2YXIgdT10W2Vbc11dLGY9dVtvXVsxXXx8MCxoPShmLSh1W28tMV1bMV18fDApKS8yLHA9MDtwPHM7KytwKXt2YXIgZD10W2VbcF1dO2grPShkW29dWzFdfHwwKS0oZFtvLTFdWzFdfHwwKX1sKz1mLGMrPWgqZn1yW28tMV1bMV0rPXJbby0xXVswXT1hLGwmJihhLT1jL2wpfXJbby0xXVsxXSs9cltvLTFdWzBdPWEsanQodCxlKX19LHQuc3RhY2tPcmRlckFwcGVhcmFuY2U9SHQsdC5zdGFja09yZGVyQXNjZW5kaW5nPUd0LHQuc3RhY2tPcmRlckRlc2NlbmRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIEd0KHQpLnJldmVyc2UoKX0sdC5zdGFja09yZGVySW5zaWRlT3V0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10Lmxlbmd0aCxpPXQubWFwKFl0KSxhPUh0KHQpLG89MCxzPTAsbD1bXSxjPVtdO2ZvcihlPTA7ZTxuOysrZSlyPWFbZV0sbzxzPyhvKz1pW3JdLGwucHVzaChyKSk6KHMrPWlbcl0sYy5wdXNoKHIpKTtyZXR1cm4gYy5yZXZlcnNlKCkuY29uY2F0KGwpfSx0LnN0YWNrT3JkZXJOb25lPVV0LHQuc3RhY2tPcmRlclJldmVyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIFV0KHQpLnJldmVyc2UoKX0sdC5zeW1ib2w9ZnVuY3Rpb24oKXt2YXIgdD1yKHEpLG49cig2NCksaT1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgcjtpZihpfHwoaT1yPWUucGF0aCgpKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KGksK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxyKXJldHVybiBpPW51bGwscisiInx8bnVsbH1yZXR1cm4gYS50eXBlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cihlKSxhKTp0fSxhLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxhKTpufSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09dD9udWxsOnQsYSk6aX0sYX0sdC5zeW1ib2xDaXJjbGU9cSx0LnN5bWJvbENyb3NzPUcsdC5zeW1ib2xEaWFtb25kPVgsdC5zeW1ib2xTcXVhcmU9JCx0LnN5bWJvbFN0YXI9USx0LnN5bWJvbFRyaWFuZ2xlPWV0LHQuc3ltYm9sV3llPW90LHQuc3ltYm9scz1zdCxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtcGF0aCI6MTY1fV0sMTY4OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKG4saSl7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP2kocix0KCJkMy10aW1lIikpOmkoKG49bnx8c2VsZikuZDM9bi5kM3x8e30sbi5kMyl9KHRoaXMsKGZ1bmN0aW9uKHQsZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIG4odCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJue3k6dCxtOmUsZDpyLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gYSh0KXt2YXIgYT10LmRhdGVUaW1lLG89dC5kYXRlLGw9dC50aW1lLGM9dC5wZXJpb2RzLHU9dC5kYXlzLGY9dC5zaG9ydERheXMsaD10Lm1vbnRocyxZPXQuc2hvcnRNb250aHMsaHQ9cChjKSxrdD1kKGMpLEF0PXAodSksTXQ9ZCh1KSxTdD1wKGYpLEV0PWQoZiksTHQ9cChoKSxDdD1kKGgpLFB0PXAoWSksSXQ9ZChZKSxPdD17YTpmdW5jdGlvbih0KXtyZXR1cm4gZlt0LmdldERheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gdVt0LmdldERheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gWVt0LmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBoW3QuZ2V0TW9udGgoKV19LGM6bnVsbCxkOkQsZTpELGY6aixnOkssRzokLEg6UixJOkYsajpCLEw6TixtOlUsTTpWLHA6ZnVuY3Rpb24odCl7cmV0dXJuIGNbKyh0LmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRNb250aCgpLzMpfSxROnd0LHM6VHQsUzpILHU6cSxVOkcsVjpXLHc6WCxXOloseDpudWxsLFg6bnVsbCx5OkosWTpRLFo6dHQsIiUiOl90fSx6dD17YTpmdW5jdGlvbih0KXtyZXR1cm4gZlt0LmdldFVUQ0RheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gdVt0LmdldFVUQ0RheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gWVt0LmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBoW3QuZ2V0VVRDTW9udGgoKV19LGM6bnVsbCxkOmV0LGU6ZXQsZjpvdCxnOnZ0LEc6eHQsSDpydCxJOm50LGo6aXQsTDphdCxtOnN0LE06bHQscDpmdW5jdGlvbih0KXtyZXR1cm4gY1srKHQuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbih0KXtyZXR1cm4gMSt+fih0LmdldFVUQ01vbnRoKCkvMyl9LFE6d3QsczpUdCxTOmN0LHU6dXQsVTpmdCxWOnB0LHc6ZHQsVzptdCx4Om51bGwsWDpudWxsLHk6Z3QsWTp5dCxaOmJ0LCIlIjpfdH0sRHQ9e2E6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVN0LmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQudz1FdFtuWzBdLnRvTG93ZXJDYXNlKCldLHIrblswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1BdC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lnc9TXRbblswXS50b0xvd2VyQ2FzZSgpXSxyK25bMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbih0LGUscil7dmFyIG49UHQuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5tPUl0W25bMF0udG9Mb3dlckNhc2UoKV0scituWzBdLmxlbmd0aCk6LTF9LEI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPUx0LmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQubT1DdFtuWzBdLnRvTG93ZXJDYXNlKCldLHIrblswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gQnQodCxhLGUscil9LGQ6QSxlOkEsZjpQLGc6XyxHOmIsSDpTLEk6UyxqOk0sTDpDLG06ayxNOkUscDpmdW5jdGlvbih0LGUscil7dmFyIG49aHQuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5wPWt0W25bMF0udG9Mb3dlckNhc2UoKV0scituWzBdLmxlbmd0aCk6LTF9LHE6VCxROk8sczp6LFM6TCx1OmcsVTp2LFY6eSx3Om0sVzp4LHg6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBCdCh0LG8sZSxyKX0sWDpmdW5jdGlvbih0LGUscil7cmV0dXJuIEJ0KHQsbCxlLHIpfSx5Ol8sWTpiLFo6dywiJSI6SX07ZnVuY3Rpb24gUnQodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG4saSxhLG89W10sbD0tMSxjPTAsdT10Lmxlbmd0aDtmb3IociBpbnN0YW5jZW9mIERhdGV8fChyPW5ldyBEYXRlKCtyKSk7KytsPHU7KTM3PT09dC5jaGFyQ29kZUF0KGwpJiYoby5wdXNoKHQuc2xpY2UoYyxsKSksbnVsbCE9KGk9c1tuPXQuY2hhckF0KCsrbCldKT9uPXQuY2hhckF0KCsrbCk6aT0iZSI9PT1uPyIgIjoiMCIsKGE9ZVtuXSkmJihuPWEocixpKSksby5wdXNoKG4pLGM9bCsxKTtyZXR1cm4gby5wdXNoKHQuc2xpY2UoYyxsKSksby5qb2luKCIiKX19ZnVuY3Rpb24gRnQodCxhKXtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIHMsbCxjPWkoMTkwMCx2b2lkIDAsMSk7aWYoQnQoYyx0LG8rPSIiLDApIT1vLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBjKXJldHVybiBuZXcgRGF0ZShjLlEpO2lmKCJzImluIGMpcmV0dXJuIG5ldyBEYXRlKDFlMypjLnMrKCJMImluIGM/Yy5MOjApKTtpZihhJiYhKCJaImluIGMpJiYoYy5aPTApLCJwImluIGMmJihjLkg9Yy5IJTEyKzEyKmMucCksdm9pZCAwPT09Yy5tJiYoYy5tPSJxImluIGM/Yy5xOjApLCJWImluIGMpe2lmKGMuVjwxfHxjLlY+NTMpcmV0dXJuIG51bGw7InciaW4gY3x8KGMudz0xKSwiWiJpbiBjPyhsPShzPW4oaShjLnksMCwxKSkpLmdldFVUQ0RheSgpLHM9bD40fHwwPT09bD9lLnV0Y01vbmRheS5jZWlsKHMpOmUudXRjTW9uZGF5KHMpLHM9ZS51dGNEYXkub2Zmc2V0KHMsNyooYy5WLTEpKSxjLnk9cy5nZXRVVENGdWxsWWVhcigpLGMubT1zLmdldFVUQ01vbnRoKCksYy5kPXMuZ2V0VVRDRGF0ZSgpKyhjLncrNiklNyk6KGw9KHM9cihpKGMueSwwLDEpKSkuZ2V0RGF5KCkscz1sPjR8fDA9PT1sP2UudGltZU1vbmRheS5jZWlsKHMpOmUudGltZU1vbmRheShzKSxzPWUudGltZURheS5vZmZzZXQocyw3KihjLlYtMSkpLGMueT1zLmdldEZ1bGxZZWFyKCksYy5tPXMuZ2V0TW9udGgoKSxjLmQ9cy5nZXREYXRlKCkrKGMudys2KSU3KX1lbHNlKCJXImluIGN8fCJVImluIGMpJiYoInciaW4gY3x8KGMudz0idSJpbiBjP2MudSU3OiJXImluIGM/MTowKSxsPSJaImluIGM/bihpKGMueSwwLDEpKS5nZXRVVENEYXkoKTpyKGkoYy55LDAsMSkpLmdldERheSgpLGMubT0wLGMuZD0iVyJpbiBjPyhjLncrNiklNys3KmMuVy0obCs1KSU3OmMudys3KmMuVS0obCs2KSU3KTtyZXR1cm4iWiJpbiBjPyhjLkgrPWMuWi8xMDB8MCxjLk0rPWMuWiUxMDAsbihjKSk6cihjKX19ZnVuY3Rpb24gQnQodCxlLHIsbil7Zm9yKHZhciBpLGEsbz0wLGw9ZS5sZW5ndGgsYz1yLmxlbmd0aDtvPGw7KXtpZihuPj1jKXJldHVybi0xO2lmKDM3PT09KGk9ZS5jaGFyQ29kZUF0KG8rKykpKXtpZihpPWUuY2hhckF0KG8rKyksIShhPUR0W2kgaW4gcz9lLmNoYXJBdChvKyspOmldKXx8KG49YSh0LHIsbikpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1yLmNoYXJDb2RlQXQobisrKSlyZXR1cm4tMX1yZXR1cm4gbn1yZXR1cm4gT3QueD1SdChvLE90KSxPdC5YPVJ0KGwsT3QpLE90LmM9UnQoYSxPdCksenQueD1SdChvLHp0KSx6dC5YPVJ0KGwsenQpLHp0LmM9UnQoYSx6dCkse2Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1SdCh0Kz0iIixPdCk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9RnQodCs9IiIsITEpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y0Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1SdCh0Kz0iIix6dCk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjUGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9RnQodCs9IiIsITApO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9fX12YXIgbyxzPXsiLSI6IiIsXzoiICIsMDoiMCJ9LGw9L15ccypcZCsvLGM9L14lLyx1PS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBmKHQsZSxyKXt2YXIgbj10PDA/Ii0iOiIiLGk9KG4/LXQ6dCkrIiIsYT1pLmxlbmd0aDtyZXR1cm4gbisoYTxyP25ldyBBcnJheShyLWErMSkuam9pbihlKStpOmkpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQucmVwbGFjZSh1LCJcXCQmIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAoaCkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIGQodCl7Zm9yKHZhciBlPXt9LHI9LTEsbj10Lmxlbmd0aDsrK3I8bjspZVt0W3JdLnRvTG93ZXJDYXNlKCldPXI7cmV0dXJuIGV9ZnVuY3Rpb24gbSh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8odC53PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGcodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KHQudT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB2KHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LlU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geSh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5WPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuVz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBiKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrNCkpO3JldHVybiBuPyh0Lnk9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gXyh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC55PStuWzBdKygrblswXT42OD8xOTAwOjJlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdyh0LGUscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShyLHIrNikpO3JldHVybiBuPyh0Llo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFQodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KHQucT0zKm5bMF0tMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBNKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lm09MCx0LmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUyh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEUodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQyh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8odC5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFAodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KHQuTD1NYXRoLmZsb29yKG5bMF0vMWUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJKHQsZSxyKXt2YXIgbj1jLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuP3IrblswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gTyh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0LlE9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geih0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0LnM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRCh0LGUpe3JldHVybiBmKHQuZ2V0RGF0ZSgpLGUsMil9ZnVuY3Rpb24gUih0LGUpe3JldHVybiBmKHQuZ2V0SG91cnMoKSxlLDIpfWZ1bmN0aW9uIEYodCxlKXtyZXR1cm4gZih0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gQih0LHIpe3JldHVybiBmKDErZS50aW1lRGF5LmNvdW50KGUudGltZVllYXIodCksdCksciwzKX1mdW5jdGlvbiBOKHQsZSl7cmV0dXJuIGYodC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gTih0LGUpKyIwMDAifWZ1bmN0aW9uIFUodCxlKXtyZXR1cm4gZih0LmdldE1vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIFYodCxlKXtyZXR1cm4gZih0LmdldE1pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIEgodCxlKXtyZXR1cm4gZih0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIHEodCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIEcodCxyKXtyZXR1cm4gZihlLnRpbWVTdW5kYXkuY291bnQoZS50aW1lWWVhcih0KS0xLHQpLHIsMil9ZnVuY3Rpb24gWSh0KXt2YXIgcj10LmdldERheSgpO3JldHVybiByPj00fHwwPT09cj9lLnRpbWVUaHVyc2RheSh0KTplLnRpbWVUaHVyc2RheS5jZWlsKHQpfWZ1bmN0aW9uIFcodCxyKXtyZXR1cm4gdD1ZKHQpLGYoZS50aW1lVGh1cnNkYXkuY291bnQoZS50aW1lWWVhcih0KSx0KSsoND09PWUudGltZVllYXIodCkuZ2V0RGF5KCkpLHIsMil9ZnVuY3Rpb24gWCh0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBaKHQscil7cmV0dXJuIGYoZS50aW1lTW9uZGF5LmNvdW50KGUudGltZVllYXIodCktMSx0KSxyLDIpfWZ1bmN0aW9uIEoodCxlKXtyZXR1cm4gZih0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gSyh0LGUpe3JldHVybiBmKCh0PVkodCkpLmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gUSh0LGUpe3JldHVybiBmKHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiAkKHQscil7dmFyIG49dC5nZXREYXkoKTtyZXR1cm4gZigodD1uPj00fHwwPT09bj9lLnRpbWVUaHVyc2RheSh0KTplLnRpbWVUaHVyc2RheS5jZWlsKHQpKS5nZXRGdWxsWWVhcigpJTFlNCxyLDQpfWZ1bmN0aW9uIHR0KHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4oZT4wPyItIjooZSo9LTEsIisiKSkrZihlLzYwfDAsIjAiLDIpK2YoZSU2MCwiMCIsMil9ZnVuY3Rpb24gZXQodCxlKXtyZXR1cm4gZih0LmdldFVUQ0RhdGUoKSxlLDIpfWZ1bmN0aW9uIHJ0KHQsZSl7cmV0dXJuIGYodC5nZXRVVENIb3VycygpLGUsMil9ZnVuY3Rpb24gbnQodCxlKXtyZXR1cm4gZih0LmdldFVUQ0hvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gaXQodCxyKXtyZXR1cm4gZigxK2UudXRjRGF5LmNvdW50KGUudXRjWWVhcih0KSx0KSxyLDMpfWZ1bmN0aW9uIGF0KHQsZSl7cmV0dXJuIGYodC5nZXRVVENNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIG90KHQsZSl7cmV0dXJuIGF0KHQsZSkrIjAwMCJ9ZnVuY3Rpb24gc3QodCxlKXtyZXR1cm4gZih0LmdldFVUQ01vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIGx0KHQsZSl7cmV0dXJuIGYodC5nZXRVVENNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBjdCh0LGUpe3JldHVybiBmKHQuZ2V0VVRDU2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gdXQodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIGZ0KHQscil7cmV0dXJuIGYoZS51dGNTdW5kYXkuY291bnQoZS51dGNZZWFyKHQpLTEsdCksciwyKX1mdW5jdGlvbiBodCh0KXt2YXIgcj10LmdldFVUQ0RheSgpO3JldHVybiByPj00fHwwPT09cj9lLnV0Y1RodXJzZGF5KHQpOmUudXRjVGh1cnNkYXkuY2VpbCh0KX1mdW5jdGlvbiBwdCh0LHIpe3JldHVybiB0PWh0KHQpLGYoZS51dGNUaHVyc2RheS5jb3VudChlLnV0Y1llYXIodCksdCkrKDQ9PT1lLnV0Y1llYXIodCkuZ2V0VVRDRGF5KCkpLHIsMil9ZnVuY3Rpb24gZHQodCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gbXQodCxyKXtyZXR1cm4gZihlLnV0Y01vbmRheS5jb3VudChlLnV0Y1llYXIodCktMSx0KSxyLDIpfWZ1bmN0aW9uIGd0KHQsZSl7cmV0dXJuIGYodC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIHZ0KHQsZSl7cmV0dXJuIGYoKHQ9aHQodCkpLmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24geXQodCxlKXtyZXR1cm4gZih0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24geHQodCxyKXt2YXIgbj10LmdldFVUQ0RheSgpO3JldHVybiBmKCh0PW4+PTR8fDA9PT1uP2UudXRjVGh1cnNkYXkodCk6ZS51dGNUaHVyc2RheS5jZWlsKHQpKS5nZXRVVENGdWxsWWVhcigpJTFlNCxyLDQpfWZ1bmN0aW9uIGJ0KCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBfdCgpe3JldHVybiIlIn1mdW5jdGlvbiB3dCh0KXtyZXR1cm4rdH1mdW5jdGlvbiBUdCh0KXtyZXR1cm4gTWF0aC5mbG9vcigrdC8xZTMpfWZ1bmN0aW9uIGt0KGUpe3JldHVybiBvPWEoZSksdC50aW1lRm9ybWF0PW8uZm9ybWF0LHQudGltZVBhcnNlPW8ucGFyc2UsdC51dGNGb3JtYXQ9by51dGNGb3JtYXQsdC51dGNQYXJzZT1vLnV0Y1BhcnNlLG99a3Qoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt2YXIgQXQ9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc/ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX06dC51dGNGb3JtYXQoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpO3ZhciBNdD0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2Z1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihlKT9udWxsOmV9OnQudXRjUGFyc2UoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpO3QuaXNvRm9ybWF0PUF0LHQuaXNvUGFyc2U9TXQsdC50aW1lRm9ybWF0RGVmYXVsdExvY2FsZT1rdCx0LnRpbWVGb3JtYXRMb2NhbGU9YSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtdGltZSI6MTY5fV0sMTY5OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP24ocik6bigodD10fHxzZWxmKS5kMz10LmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZT1uZXcgRGF0ZSxyPW5ldyBEYXRlO2Z1bmN0aW9uIG4odCxpLGEsbyl7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gdChlPTA9PT1hcmd1bWVudHMubGVuZ3RoP25ldyBEYXRlOm5ldyBEYXRlKCtlKSksZX1yZXR1cm4gcy5mbG9vcj1mdW5jdGlvbihlKXtyZXR1cm4gdChlPW5ldyBEYXRlKCtlKSksZX0scy5jZWlsPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoZS0xKSksaShlLDEpLHQoZSksZX0scy5yb3VuZD1mdW5jdGlvbih0KXt2YXIgZT1zKHQpLHI9cy5jZWlsKHQpO3JldHVybiB0LWU8ci10P2U6cn0scy5vZmZzZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaSh0PW5ldyBEYXRlKCt0KSxudWxsPT1lPzE6TWF0aC5mbG9vcihlKSksdH0scy5yYW5nZT1mdW5jdGlvbihlLHIsbil7dmFyIGEsbz1bXTtpZihlPXMuY2VpbChlKSxuPW51bGw9PW4/MTpNYXRoLmZsb29yKG4pLCEoZTxyJiZuPjApKXJldHVybiBvO2Rve28ucHVzaChhPW5ldyBEYXRlKCtlKSksaShlLG4pLHQoZSl9d2hpbGUoYTxlJiZlPHIpO3JldHVybiBvfSxzLmZpbHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gbigoZnVuY3Rpb24ocil7aWYocj49cilmb3IoO3QociksIWUocik7KXIuc2V0VGltZShyLTEpfSksKGZ1bmN0aW9uKHQscil7aWYodD49dClpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7aSh0LC0xKSwhZSh0KTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7aSh0LDEpLCFlKHQpOyk7fSkpfSxhJiYocy5jb3VudD1mdW5jdGlvbihuLGkpe3JldHVybiBlLnNldFRpbWUoK24pLHIuc2V0VGltZSgraSksdChlKSx0KHIpLE1hdGguZmxvb3IoYShlLHIpKX0scy5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP3MuZmlsdGVyKG8/ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIHMuY291bnQoMCxlKSV0PT0wfSk6czpudWxsfSksc312YXIgaT1uKChmdW5jdGlvbigpe30pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLXR9KSk7aS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP24oKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvdCkqdCl9KSwoZnVuY3Rpb24oZSxyKXtlLnNldFRpbWUoK2Urcip0KX0pLChmdW5jdGlvbihlLHIpe3JldHVybihyLWUpL3R9KSk6aTpudWxsfTt2YXIgYT1pLnJhbmdlLG89bigoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMWUzKmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMWUzfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX0pKSxzPW8ucmFuZ2UsbD1uKChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLTFlMyp0LmdldFNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrNmU0KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvNmU0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pKSxjPWwucmFuZ2UsdT1uKChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLTFlMyp0LmdldFNlY29uZHMoKS02ZTQqdC5nZXRNaW51dGVzKCkpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzM2ZTUqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8zNmU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSksZj11LnJhbmdlLGg9bigoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtNmU0KihlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSkvODY0ZTV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpLTF9KSkscD1oLnJhbmdlO2Z1bmN0aW9uIGQodCl7cmV0dXJuIG4oKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs3LXQpJTcpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtNmU0KihlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSkvNjA0OGU1fSkpfXZhciBtPWQoMCksZz1kKDEpLHY9ZCgyKSx5PWQoMykseD1kKDQpLGI9ZCg1KSxfPWQoNiksdz1tLnJhbmdlLFQ9Zy5yYW5nZSxrPXYucmFuZ2UsQT15LnJhbmdlLE09eC5yYW5nZSxTPWIucmFuZ2UsRT1fLnJhbmdlLEw9bigoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSkpLEM9TC5yYW5nZSxQPW4oKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO1AuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9uKChmdW5jdGlvbihlKXtlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRGdWxsWWVhcigpL3QpKnQpLGUuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUscil7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrcip0KX0pKTpudWxsfTt2YXIgST1QLnJhbmdlLE89bigoZnVuY3Rpb24odCl7dC5zZXRVVENTZWNvbmRzKDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrNmU0KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvNmU0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pKSx6PU8ucmFuZ2UsRD1uKChmdW5jdGlvbih0KXt0LnNldFVUQ01pbnV0ZXMoMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzM2ZTUqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8zNmU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9KSksUj1ELnJhbmdlLEY9bigoZnVuY3Rpb24odCl7dC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzg2NGU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RhdGUoKS0xfSkpLEI9Ri5yYW5nZTtmdW5jdGlvbiBOKHQpe3JldHVybiBuKChmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS82MDQ4ZTV9KSl9dmFyIGo9TigwKSxVPU4oMSksVj1OKDIpLEg9TigzKSxxPU4oNCksRz1OKDUpLFk9Tig2KSxXPWoucmFuZ2UsWD1VLnJhbmdlLFo9Vi5yYW5nZSxKPUgucmFuZ2UsSz1xLnJhbmdlLFE9Ry5yYW5nZSwkPVkucmFuZ2UsdHQ9bigoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfSkpLGV0PXR0LnJhbmdlLHJ0PW4oKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSkpO3J0LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/bigoZnVuY3Rpb24oZSl7ZS5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0VVRDRnVsbFllYXIoKS90KSp0KSxlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLHIpe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK3IqdCl9KSk6bnVsbH07dmFyIG50PXJ0LnJhbmdlO3QudGltZURheT1oLHQudGltZURheXM9cCx0LnRpbWVGcmlkYXk9Yix0LnRpbWVGcmlkYXlzPVMsdC50aW1lSG91cj11LHQudGltZUhvdXJzPWYsdC50aW1lSW50ZXJ2YWw9bix0LnRpbWVNaWxsaXNlY29uZD1pLHQudGltZU1pbGxpc2Vjb25kcz1hLHQudGltZU1pbnV0ZT1sLHQudGltZU1pbnV0ZXM9Yyx0LnRpbWVNb25kYXk9Zyx0LnRpbWVNb25kYXlzPVQsdC50aW1lTW9udGg9TCx0LnRpbWVNb250aHM9Qyx0LnRpbWVTYXR1cmRheT1fLHQudGltZVNhdHVyZGF5cz1FLHQudGltZVNlY29uZD1vLHQudGltZVNlY29uZHM9cyx0LnRpbWVTdW5kYXk9bSx0LnRpbWVTdW5kYXlzPXcsdC50aW1lVGh1cnNkYXk9eCx0LnRpbWVUaHVyc2RheXM9TSx0LnRpbWVUdWVzZGF5PXYsdC50aW1lVHVlc2RheXM9ayx0LnRpbWVXZWRuZXNkYXk9eSx0LnRpbWVXZWRuZXNkYXlzPUEsdC50aW1lV2Vlaz1tLHQudGltZVdlZWtzPXcsdC50aW1lWWVhcj1QLHQudGltZVllYXJzPUksdC51dGNEYXk9Rix0LnV0Y0RheXM9Qix0LnV0Y0ZyaWRheT1HLHQudXRjRnJpZGF5cz1RLHQudXRjSG91cj1ELHQudXRjSG91cnM9Uix0LnV0Y01pbGxpc2Vjb25kPWksdC51dGNNaWxsaXNlY29uZHM9YSx0LnV0Y01pbnV0ZT1PLHQudXRjTWludXRlcz16LHQudXRjTW9uZGF5PVUsdC51dGNNb25kYXlzPVgsdC51dGNNb250aD10dCx0LnV0Y01vbnRocz1ldCx0LnV0Y1NhdHVyZGF5PVksdC51dGNTYXR1cmRheXM9JCx0LnV0Y1NlY29uZD1vLHQudXRjU2Vjb25kcz1zLHQudXRjU3VuZGF5PWosdC51dGNTdW5kYXlzPVcsdC51dGNUaHVyc2RheT1xLHQudXRjVGh1cnNkYXlzPUssdC51dGNUdWVzZGF5PVYsdC51dGNUdWVzZGF5cz1aLHQudXRjV2VkbmVzZGF5PUgsdC51dGNXZWRuZXNkYXlzPUosdC51dGNXZWVrPWosdC51dGNXZWVrcz1XLHQudXRjWWVhcj1ydCx0LnV0Y1llYXJzPW50LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDE3MDpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9uKHIpOm4oKHQ9dHx8c2VsZikuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dmFyIGUscixuPTAsaT0wLGE9MCxvPTAscz0wLGw9MCxjPSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLHU9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24gZigpe3JldHVybiBzfHwodShoKSxzPWMubm93KCkrbCl9ZnVuY3Rpb24gaCgpe3M9MH1mdW5jdGlvbiBwKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj1uZXcgcDtyZXR1cm4gbi5yZXN0YXJ0KHQsZSxyKSxufWZ1bmN0aW9uIG0oKXtmKCksKytuO2Zvcih2YXIgdCxyPWU7cjspKHQ9cy1yLl90aW1lKT49MCYmci5fY2FsbC5jYWxsKG51bGwsdCkscj1yLl9uZXh0Oy0tbn1mdW5jdGlvbiBnKCl7cz0obz1jLm5vdygpKStsLG49aT0wO3RyeXttKCl9ZmluYWxseXtuPTAsZnVuY3Rpb24oKXt2YXIgdCxuLGk9ZSxhPTEvMDtmb3IoO2k7KWkuX2NhbGw/KGE+aS5fdGltZSYmKGE9aS5fdGltZSksdD1pLGk9aS5fbmV4dCk6KG49aS5fbmV4dCxpLl9uZXh0PW51bGwsaT10P3QuX25leHQ9bjplPW4pO3I9dCx5KGEpfSgpLHM9MH19ZnVuY3Rpb24gdigpe3ZhciB0PWMubm93KCksZT10LW87ZT4xZTMmJihsLT1lLG89dCl9ZnVuY3Rpb24geSh0KXtufHwoaSYmKGk9Y2xlYXJUaW1lb3V0KGkpKSx0LXM+MjQ/KHQ8MS8wJiYoaT1zZXRUaW1lb3V0KGcsdC1jLm5vdygpLWwpKSxhJiYoYT1jbGVhckludGVydmFsKGEpKSk6KGF8fChvPWMubm93KCksYT1zZXRJbnRlcnZhbCh2LDFlMykpLG49MSx1KGcpKSl9cC5wcm90b3R5cGU9ZC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnAscmVzdGFydDpmdW5jdGlvbih0LG4saSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtpPShudWxsPT1pP2YoKToraSkrKG51bGw9PW4/MDorbiksdGhpcy5fbmV4dHx8cj09PXRoaXN8fChyP3IuX25leHQ9dGhpczplPXRoaXMscj10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1pLHkoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAseSgpKX19LHQuaW50ZXJ2YWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBwLGk9ZTtyZXR1cm4gbnVsbD09ZT8obi5yZXN0YXJ0KHQsZSxyKSxuKTooZT0rZSxyPW51bGw9PXI/ZigpOityLG4ucmVzdGFydCgoZnVuY3Rpb24gYShvKXtvKz1pLG4ucmVzdGFydChhLGkrPWUsciksdChvKX0pLGUsciksbil9LHQubm93PWYsdC50aW1lb3V0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgcDtyZXR1cm4gZT1udWxsPT1lPzA6K2Usbi5yZXN0YXJ0KChmdW5jdGlvbihyKXtuLnN0b3AoKSx0KHIrZSl9KSxlLHIpLG59LHQudGltZXI9ZCx0LnRpbWVyRmx1c2g9bSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwxNzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWlmKHZvaWQgMCE9PWFyZ3VtZW50c1t0XSlyZXR1cm4gYXJndW1lbnRzW3RdfX0se31dLDE3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCIpLGk9dCgidW5pcSIpO2Z1bmN0aW9uIGEodCxlKXt0aGlzLnBvaW50PXQsdGhpcy5pbmRleD1lfWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9dC5wb2ludCxuPWUucG9pbnQsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSl7dmFyIG89blthXS1yW2FdO2lmKG8pcmV0dXJuIG99cmV0dXJuIDB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoMD09PXIpcmV0dXJuW107dmFyIHM9dFswXS5sZW5ndGg7aWYoczwxKXJldHVybltdO2lmKDE9PT1zKXJldHVybiBmdW5jdGlvbih0LGUscil7aWYoMT09PXQpcmV0dXJuIHI/W1stMSwwXV06W107dmFyIG49ZS5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0sZV19KSk7bi5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLWVbMF19KSk7Zm9yKHZhciBpPW5ldyBBcnJheSh0LTEpLGE9MTthPHQ7KythKXt2YXIgbz1uW2EtMV0scz1uW2FdO2lbYS0xXT1bb1sxXSxzWzFdXX1yJiZpLnB1c2goWy0xLGlbMF1bMV1dLFtpW3QtMV1bMV0sLTFdKTtyZXR1cm4gaX0ocix0LGUpO2Zvcih2YXIgbD1uZXcgQXJyYXkociksYz0xLHU9MDt1PHI7Kyt1KXtmb3IodmFyIGY9dFt1XSxoPW5ldyBBcnJheShzKzEpLHA9MCxkPTA7ZDxzOysrZCl7dmFyIG09ZltkXTtoW2RdPW0scCs9bSptfWhbc109cCxsW3VdPW5ldyBhKGgsdSksYz1NYXRoLm1heChwLGMpfWkobCxvKSxyPWwubGVuZ3RoO3ZhciBnPW5ldyBBcnJheShyK3MrMSksdj1uZXcgQXJyYXkocitzKzEpLHk9KHMrMSkqKHMrMSkqYyx4PW5ldyBBcnJheShzKzEpO2Zvcih1PTA7dTw9czsrK3UpeFt1XT0wO3hbc109eSxnWzBdPXguc2xpY2UoKSx2WzBdPS0xO2Zvcih1PTA7dTw9czsrK3UpeyhoPXguc2xpY2UoKSlbdV09MSxnW3UrMV09aCx2W3UrMV09LTF9Zm9yKHU9MDt1PHI7Kyt1KXt2YXIgYj1sW3VdO2dbdStzKzFdPWIucG9pbnQsdlt1K3MrMV09Yi5pbmRleH12YXIgXz1uKGcsITEpO189ZT9fLmZpbHRlcigoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8PXM7KytyKXt2YXIgbj12W3Rbcl1dO2lmKG48MCYmKytlPj0yKXJldHVybiExO3Rbcl09bn1yZXR1cm4hMH0pKTpfLmZpbHRlcigoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTw9czsrK2Upe3ZhciByPXZbdFtlXV07aWYocjwwKXJldHVybiExO3RbZV09cn1yZXR1cm4hMH0pKTtpZigxJnMpZm9yKHU9MDt1PF8ubGVuZ3RoOysrdSl7aD0oYj1fW3VdKVswXTtiWzBdPWJbMV0sYlsxXT1ofXJldHVybiBffX0seyJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCI6NDI4LHVuaXE6NTkyfV0sMTczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1hO3ZhciBuPShhLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSkuZ2V0Q29udGV4dCgiMmQiKSxpPW8oWzMyLDEyNl0pO2Z1bmN0aW9uIGEodCxlKXtBcnJheS5pc0FycmF5KHQpJiYodD10LmpvaW4oIiwgIikpO3ZhciByLGE9e30scz0xNixsPS4wNTtlJiYoMj09PWUubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIGVbMF0/cj1vKGUpOkFycmF5LmlzQXJyYXkoZSk/cj1lOihlLm8/cj1vKGUubyk6ZS5wYWlycyYmKHI9ZS5wYWlycyksZS5mb250U2l6ZSYmKHM9ZS5mb250U2l6ZSksbnVsbCE9ZS50aHJlc2hvbGQmJihsPWUudGhyZXNob2xkKSkpLHJ8fChyPWkpLG4uZm9udD1zKyJweCAiK3Q7Zm9yKHZhciBjPTA7YzxyLmxlbmd0aDtjKyspe3ZhciB1PXJbY10sZj1uLm1lYXN1cmVUZXh0KHVbMF0pLndpZHRoK24ubWVhc3VyZVRleHQodVsxXSkud2lkdGgsaD1uLm1lYXN1cmVUZXh0KHUpLndpZHRoO2lmKE1hdGguYWJzKGYtaCk+cypsKXt2YXIgcD0oaC1mKS9zO2FbdV09MWUzKnB9fXJldHVybiBhfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPVtdLHI9dFswXTtyPD10WzFdO3IrKylmb3IodmFyIG49U3RyaW5nLmZyb21DaGFyQ29kZShyKSxpPXRbMF07aTx0WzFdO2krKyl7dmFyIGE9bitTdHJpbmcuZnJvbUNoYXJDb2RlKGkpO2UucHVzaChhKX1yZXR1cm4gZX1hLmNyZWF0ZVBhaXJzPW8sYS5hc2NpaT1pfSx7fV0sMTc0OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyhmdW5jdGlvbigpe3ZhciByPSExO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgRmxvYXQ2NEFycmF5KXt2YXIgbj1uZXcgRmxvYXQ2NEFycmF5KDEpLGk9bmV3IFVpbnQzMkFycmF5KG4uYnVmZmVyKTtpZihuWzBdPTEscj0hMCwxMDcyNjkzMjQ4PT09aVsxXSl7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsW2lbMF0saVsxXV19LGUuZXhwb3J0cy5wYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGlbMF09dCxpWzFdPWUsblswXX0sZS5leHBvcnRzLmxvPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsaVswXX0sZS5leHBvcnRzLmhpPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsaVsxXX19ZWxzZSBpZigxMDcyNjkzMjQ4PT09aVswXSl7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsW2lbMV0saVswXV19LGUuZXhwb3J0cy5wYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGlbMV09dCxpWzBdPWUsblswXX0sZS5leHBvcnRzLmxvPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsaVsxXX0sZS5leHBvcnRzLmhpPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsaVswXX19ZWxzZSByPSExfWlmKCFyKXt2YXIgYT1uZXcgdCg4KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEud3JpdGVEb3VibGVMRSh0LDAsITApLFthLnJlYWRVSW50MzJMRSgwLCEwKSxhLnJlYWRVSW50MzJMRSg0LCEwKV19LGUuZXhwb3J0cy5wYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEud3JpdGVVSW50MzJMRSh0LDAsITApLGEud3JpdGVVSW50MzJMRShlLDQsITApLGEucmVhZERvdWJsZUxFKDAsITApfSxlLmV4cG9ydHMubG89ZnVuY3Rpb24odCl7cmV0dXJuIGEud3JpdGVEb3VibGVMRSh0LDAsITApLGEucmVhZFVJbnQzMkxFKDAsITApfSxlLmV4cG9ydHMuaGk9ZnVuY3Rpb24odCl7cmV0dXJuIGEud3JpdGVEb3VibGVMRSh0LDAsITApLGEucmVhZFVJbnQzMkxFKDQsITApfX1lLmV4cG9ydHMuc2lnbj1mdW5jdGlvbih0KXtyZXR1cm4gZS5leHBvcnRzLmhpKHQpPj4+MzF9LGUuZXhwb3J0cy5leHBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4oZS5leHBvcnRzLmhpKHQpPDwxPj4+MjEpLTEwMjN9LGUuZXhwb3J0cy5mcmFjdGlvbj1mdW5jdGlvbih0KXt2YXIgcj1lLmV4cG9ydHMubG8odCksbj1lLmV4cG9ydHMuaGkodCksaT0xMDQ4NTc1Jm47cmV0dXJuIDIxNDY0MzUwNzImbiYmKGkrPTE8PDIwKSxbcixpXX0sZS5leHBvcnRzLmRlbm9ybWFsaXplZD1mdW5jdGlvbih0KXtyZXR1cm4hKDIxNDY0MzUwNzImZS5leHBvcnRzLmhpKHQpKX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoImJ1ZmZlciIpLkJ1ZmZlcil9LHtidWZmZXI6MTEyfV0sMTc1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiYWJzLXN2Zy1wYXRoIiksaT10KCJub3JtYWxpemUtc3ZnLXBhdGgiKSxhPXtNOiJtb3ZlVG8iLEM6ImJlemllckN1cnZlVG8ifTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LmJlZ2luUGF0aCgpLGkobihlKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZVswXSxuPWUuc2xpY2UoMSk7dFthW3JdXS5hcHBseSh0LG4pfSkpLHQuY2xvc2VQYXRoKCl9fSx7ImFicy1zdmctcGF0aCI6NjcsIm5vcm1hbGl6ZS1zdmctcGF0aCI6NDY0fV0sMTc2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlImludDgiOnJldHVybiBJbnQ4QXJyYXk7Y2FzZSJpbnQxNiI6cmV0dXJuIEludDE2QXJyYXk7Y2FzZSJpbnQzMiI6cmV0dXJuIEludDMyQXJyYXk7Y2FzZSJ1aW50OCI6cmV0dXJuIFVpbnQ4QXJyYXk7Y2FzZSJ1aW50MTYiOnJldHVybiBVaW50MTZBcnJheTtjYXNlInVpbnQzMiI6cmV0dXJuIFVpbnQzMkFycmF5O2Nhc2UiZmxvYXQzMiI6cmV0dXJuIEZsb2F0MzJBcnJheTtjYXNlImZsb2F0NjQiOnJldHVybiBGbG9hdDY0QXJyYXk7Y2FzZSJhcnJheSI6cmV0dXJuIEFycmF5O2Nhc2UidWludDhfY2xhbXBlZCI6cmV0dXJuIFVpbnQ4Q2xhbXBlZEFycmF5fX19LHt9XSwxNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7c3dpdGNoKHZvaWQgMD09PWUmJihlPTApLHR5cGVvZiB0KXtjYXNlIm51bWJlciI6aWYodD4wKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByLG47Zm9yKHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZTtyZXR1cm4gcn0oMHx0LGUpO2JyZWFrO2Nhc2Uib2JqZWN0IjppZigibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXJldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgaT0wfGVbbl07aWYoaTw9MClyZXR1cm5bXTt2YXIgYSxvPW5ldyBBcnJheShpKTtpZihuPT09ZS5sZW5ndGgtMSlmb3IoYT0wO2E8aTsrK2Epb1thXT1yO2Vsc2UgZm9yKGE9MDthPGk7KythKW9bYV09dChlLHIsbisxKTtyZXR1cm4gb30odCxlLDApfXJldHVybltdfX0se31dLDE3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtyPXJ8fDI7dmFyIG4scyxsLGMsdSxwLGQsZz1lJiZlLmxlbmd0aCx2PWc/ZVswXSpyOnQubGVuZ3RoLHk9aSh0LDAsdixyLCEwKSx4PVtdO2lmKCF5fHx5Lm5leHQ9PT15LnByZXYpcmV0dXJuIHg7aWYoZyYmKHk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIG8scyxsLGMsdSxwPVtdO2ZvcihvPTAscz1lLmxlbmd0aDtvPHM7bysrKWw9ZVtvXSpuLGM9bzxzLTE/ZVtvKzFdKm46dC5sZW5ndGgsKHU9aSh0LGwsYyxuLCExKSk9PT11Lm5leHQmJih1LnN0ZWluZXI9ITApLHAucHVzaChtKHUpKTtmb3IocC5zb3J0KGYpLG89MDtvPHAubGVuZ3RoO28rKylyPWEocj1oKHBbb10sciksci5uZXh0KTtyZXR1cm4gcn0odCxlLHkscikpLHQubGVuZ3RoPjgwKnIpe249bD10WzBdLHM9Yz10WzFdO2Zvcih2YXIgYj1yO2I8djtiKz1yKSh1PXRbYl0pPG4mJihuPXUpLChwPXRbYisxXSk8cyYmKHM9cCksdT5sJiYobD11KSxwPmMmJihjPXApO2Q9MCE9PShkPU1hdGgubWF4KGwtbixjLXMpKT8xL2Q6MH1yZXR1cm4gbyh5LHgscixuLHMsZCkseH1mdW5jdGlvbiBpKHQsZSxyLG4saSl7dmFyIGEsbztpZihpPT09RSh0LGUscixuKT4wKWZvcihhPWU7YTxyO2ErPW4pbz1BKGEsdFthXSx0W2ErMV0sbyk7ZWxzZSBmb3IoYT1yLW47YT49ZTthLT1uKW89QShhLHRbYV0sdFthKzFdLG8pO3JldHVybiBvJiZ4KG8sby5uZXh0KSYmKE0obyksbz1vLm5leHQpLG99ZnVuY3Rpb24gYSh0LGUpe2lmKCF0KXJldHVybiB0O2V8fChlPXQpO3ZhciByLG49dDtkb3tpZihyPSExLG4uc3RlaW5lcnx8IXgobixuLm5leHQpJiYwIT09eShuLnByZXYsbixuLm5leHQpKW49bi5uZXh0O2Vsc2V7aWYoTShuKSwobj1lPW4ucHJldik9PT1uLm5leHQpYnJlYWs7cj0hMH19d2hpbGUocnx8biE9PWUpO3JldHVybiBlfWZ1bmN0aW9uIG8odCxlLHIsbixpLGYsaCl7aWYodCl7IWgmJmYmJmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQ7ZG97bnVsbD09PWkueiYmKGkuej1kKGkueCxpLnksZSxyLG4pKSxpLnByZXZaPWkucHJldixpLm5leHRaPWkubmV4dCxpPWkubmV4dH13aGlsZShpIT09dCk7aS5wcmV2Wi5uZXh0Wj1udWxsLGkucHJldlo9bnVsbCxmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsLGM9MTtkb3tmb3Iocj10LHQ9bnVsbCxhPW51bGwsbz0wO3I7KXtmb3IobysrLG49cixzPTAsZT0wO2U8YyYmKHMrKyxuPW4ubmV4dFopO2UrKyk7Zm9yKGw9YztzPjB8fGw+MCYmbjspMCE9PXMmJigwPT09bHx8IW58fHIuejw9bi56KT8oaT1yLHI9ci5uZXh0WixzLS0pOihpPW4sbj1uLm5leHRaLGwtLSksYT9hLm5leHRaPWk6dD1pLGkucHJldlo9YSxhPWk7cj1ufWEubmV4dFo9bnVsbCxjKj0yfXdoaWxlKG8+MSl9KGkpfSh0LG4saSxmKTtmb3IodmFyIHAsbSxnPXQ7dC5wcmV2IT09dC5uZXh0OylpZihwPXQucHJldixtPXQubmV4dCxmP2wodCxuLGksZik6cyh0KSllLnB1c2gocC5pL3IpLGUucHVzaCh0LmkvciksZS5wdXNoKG0uaS9yKSxNKHQpLHQ9bS5uZXh0LGc9bS5uZXh0O2Vsc2UgaWYoKHQ9bSk9PT1nKXtoPzE9PT1oP28odD1jKGEodCksZSxyKSxlLHIsbixpLGYsMik6Mj09PWgmJnUodCxlLHIsbixpLGYpOm8oYSh0KSxlLHIsbixpLGYsMSk7YnJlYWt9fX1mdW5jdGlvbiBzKHQpe3ZhciBlPXQucHJldixyPXQsbj10Lm5leHQ7aWYoeShlLHIsbik+PTApcmV0dXJuITE7Zm9yKHZhciBpPXQubmV4dC5uZXh0O2khPT10LnByZXY7KXtpZihnKGUueCxlLnksci54LHIueSxuLngsbi55LGkueCxpLnkpJiZ5KGkucHJldixpLGkubmV4dCk+PTApcmV0dXJuITE7aT1pLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gbCh0LGUscixuKXt2YXIgaT10LnByZXYsYT10LG89dC5uZXh0O2lmKHkoaSxhLG8pPj0wKXJldHVybiExO2Zvcih2YXIgcz1pLng8YS54P2kueDxvLng/aS54Om8ueDphLng8by54P2EueDpvLngsbD1pLnk8YS55P2kueTxvLnk/aS55Om8ueTphLnk8by55P2EueTpvLnksYz1pLng+YS54P2kueD5vLng/aS54Om8ueDphLng+by54P2EueDpvLngsdT1pLnk+YS55P2kueT5vLnk/aS55Om8ueTphLnk+by55P2EueTpvLnksZj1kKHMsbCxlLHIsbiksaD1kKGMsdSxlLHIsbikscD10LnByZXZaLG09dC5uZXh0WjtwJiZwLno+PWYmJm0mJm0uejw9aDspe2lmKHAhPT10LnByZXYmJnAhPT10Lm5leHQmJmcoaS54LGkueSxhLngsYS55LG8ueCxvLnkscC54LHAueSkmJnkocC5wcmV2LHAscC5uZXh0KT49MClyZXR1cm4hMTtpZihwPXAucHJldlosbSE9PXQucHJldiYmbSE9PXQubmV4dCYmZyhpLngsaS55LGEueCxhLnksby54LG8ueSxtLngsbS55KSYmeShtLnByZXYsbSxtLm5leHQpPj0wKXJldHVybiExO209bS5uZXh0Wn1mb3IoO3AmJnAuej49Zjspe2lmKHAhPT10LnByZXYmJnAhPT10Lm5leHQmJmcoaS54LGkueSxhLngsYS55LG8ueCxvLnkscC54LHAueSkmJnkocC5wcmV2LHAscC5uZXh0KT49MClyZXR1cm4hMTtwPXAucHJldlp9Zm9yKDttJiZtLno8PWg7KXtpZihtIT09dC5wcmV2JiZtIT09dC5uZXh0JiZnKGkueCxpLnksYS54LGEueSxvLngsby55LG0ueCxtLnkpJiZ5KG0ucHJldixtLG0ubmV4dCk+PTApcmV0dXJuITE7bT1tLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPXQ7ZG97dmFyIGk9bi5wcmV2LG89bi5uZXh0Lm5leHQ7IXgoaSxvKSYmYihpLG4sbi5uZXh0LG8pJiZUKGksbykmJlQobyxpKSYmKGUucHVzaChpLmkvciksZS5wdXNoKG4uaS9yKSxlLnB1c2goby5pL3IpLE0obiksTShuLm5leHQpLG49dD1vKSxuPW4ubmV4dH13aGlsZShuIT09dCk7cmV0dXJuIGEobil9ZnVuY3Rpb24gdSh0LGUscixuLGkscyl7dmFyIGw9dDtkb3tmb3IodmFyIGM9bC5uZXh0Lm5leHQ7YyE9PWwucHJldjspe2lmKGwuaSE9PWMuaSYmdihsLGMpKXt2YXIgdT1rKGwsYyk7cmV0dXJuIGw9YShsLGwubmV4dCksdT1hKHUsdS5uZXh0KSxvKGwsZSxyLG4saSxzKSx2b2lkIG8odSxlLHIsbixpLHMpfWM9Yy5uZXh0fWw9bC5uZXh0fXdoaWxlKGwhPT10KX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHQueC1lLnh9ZnVuY3Rpb24gaCh0LGUpe3ZhciByPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLGk9dC54LGE9dC55LG89LTEvMDtkb3tpZihhPD1uLnkmJmE+PW4ubmV4dC55JiZuLm5leHQueSE9PW4ueSl7dmFyIHM9bi54KyhhLW4ueSkqKG4ubmV4dC54LW4ueCkvKG4ubmV4dC55LW4ueSk7aWYoczw9aSYmcz5vKXtpZihvPXMscz09PWkpe2lmKGE9PT1uLnkpcmV0dXJuIG47aWYoYT09PW4ubmV4dC55KXJldHVybiBuLm5leHR9cj1uLng8bi5uZXh0Lng/bjpuLm5leHR9fW49bi5uZXh0fXdoaWxlKG4hPT1lKTtpZighcilyZXR1cm4gbnVsbDtpZihpPT09bylyZXR1cm4gcjt2YXIgbCxjPXIsdT1yLngsZj1yLnksaD0xLzA7bj1yO2Rve2k+PW4ueCYmbi54Pj11JiZpIT09bi54JiZnKGE8Zj9pOm8sYSx1LGYsYTxmP286aSxhLG4ueCxuLnkpJiYobD1NYXRoLmFicyhhLW4ueSkvKGktbi54KSxUKG4sdCkmJihsPGh8fGw9PT1oJiYobi54PnIueHx8bi54PT09ci54JiZwKHIsbikpKSYmKHI9bixoPWwpKSxuPW4ubmV4dH13aGlsZShuIT09Yyk7cmV0dXJuIHJ9KHQsZSk7aWYoIXIpcmV0dXJuIGU7dmFyIG49ayhyLHQpLGk9YShyLHIubmV4dCk7cmV0dXJuIGEobixuLm5leHQpLGU9PT1yP2k6ZX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHkodC5wcmV2LHQsZS5wcmV2KTwwJiZ5KGUubmV4dCx0LHQubmV4dCk8MH1mdW5jdGlvbiBkKHQsZSxyLG4saSl7cmV0dXJuKHQ9MTQzMTY1NTc2NSYoKHQ9ODU4OTkzNDU5JigodD0yNTI2NDUxMzUmKCh0PTE2NzExOTM1JigodD0zMjc2NyoodC1yKSppKXx0PDw4KSl8dDw8NCkpfHQ8PDIpKXx0PDwxKSl8KGU9MTQzMTY1NTc2NSYoKGU9ODU4OTkzNDU5JigoZT0yNTI2NDUxMzUmKChlPTE2NzExOTM1JigoZT0zMjc2NyooZS1uKSppKXxlPDw4KSl8ZTw8NCkpfGU8PDIpKXxlPDwxKSk8PDF9ZnVuY3Rpb24gbSh0KXt2YXIgZT10LHI9dDtkb3soZS54PHIueHx8ZS54PT09ci54JiZlLnk8ci55KSYmKHI9ZSksZT1lLm5leHR9d2hpbGUoZSE9PXQpO3JldHVybiByfWZ1bmN0aW9uIGcodCxlLHIsbixpLGEsbyxzKXtyZXR1cm4oaS1vKSooZS1zKS0odC1vKSooYS1zKT49MCYmKHQtbykqKG4tcyktKHItbykqKGUtcyk+PTAmJihyLW8pKihhLXMpLShpLW8pKihuLXMpPj0wfWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4gdC5uZXh0LmkhPT1lLmkmJnQucHJldi5pIT09ZS5pJiYhZnVuY3Rpb24odCxlKXt2YXIgcj10O2Rve2lmKHIuaSE9PXQuaSYmci5uZXh0LmkhPT10LmkmJnIuaSE9PWUuaSYmci5uZXh0LmkhPT1lLmkmJmIocixyLm5leHQsdCxlKSlyZXR1cm4hMDtyPXIubmV4dH13aGlsZShyIT09dCk7cmV0dXJuITF9KHQsZSkmJihUKHQsZSkmJlQoZSx0KSYmZnVuY3Rpb24odCxlKXt2YXIgcj10LG49ITEsaT0odC54K2UueCkvMixhPSh0LnkrZS55KS8yO2Rve3IueT5hIT1yLm5leHQueT5hJiZyLm5leHQueSE9PXIueSYmaTwoci5uZXh0Lngtci54KSooYS1yLnkpLyhyLm5leHQueS1yLnkpK3IueCYmKG49IW4pLHI9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4gbn0odCxlKSYmKHkodC5wcmV2LHQsZS5wcmV2KXx8eSh0LGUucHJldixlKSl8fHgodCxlKSYmeSh0LnByZXYsdCx0Lm5leHQpPjAmJnkoZS5wcmV2LGUsZS5uZXh0KT4wKX1mdW5jdGlvbiB5KHQsZSxyKXtyZXR1cm4oZS55LXQueSkqKHIueC1lLngpLShlLngtdC54KSooci55LWUueSl9ZnVuY3Rpb24geCh0LGUpe3JldHVybiB0Lng9PT1lLngmJnQueT09PWUueX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpPXcoeSh0LGUscikpLGE9dyh5KHQsZSxuKSksbz13KHkocixuLHQpKSxzPXcoeShyLG4sZSkpO3JldHVybiBpIT09YSYmbyE9PXN8fCghKDAhPT1pfHwhXyh0LHIsZSkpfHwoISgwIT09YXx8IV8odCxuLGUpKXx8KCEoMCE9PW98fCFfKHIsdCxuKSl8fCEoMCE9PXN8fCFfKHIsZSxuKSkpKSl9ZnVuY3Rpb24gXyh0LGUscil7cmV0dXJuIGUueDw9TWF0aC5tYXgodC54LHIueCkmJmUueD49TWF0aC5taW4odC54LHIueCkmJmUueTw9TWF0aC5tYXgodC55LHIueSkmJmUueT49TWF0aC5taW4odC55LHIueSl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9ZnVuY3Rpb24gVCh0LGUpe3JldHVybiB5KHQucHJldix0LHQubmV4dCk8MD95KHQsZSx0Lm5leHQpPj0wJiZ5KHQsdC5wcmV2LGUpPj0wOnkodCxlLHQucHJldik8MHx8eSh0LHQubmV4dCxlKTwwfWZ1bmN0aW9uIGsodCxlKXt2YXIgcj1uZXcgUyh0LmksdC54LHQueSksbj1uZXcgUyhlLmksZS54LGUueSksaT10Lm5leHQsYT1lLnByZXY7cmV0dXJuIHQubmV4dD1lLGUucHJldj10LHIubmV4dD1pLGkucHJldj1yLG4ubmV4dD1yLHIucHJldj1uLGEubmV4dD1uLG4ucHJldj1hLG59ZnVuY3Rpb24gQSh0LGUscixuKXt2YXIgaT1uZXcgUyh0LGUscik7cmV0dXJuIG4/KGkubmV4dD1uLm5leHQsaS5wcmV2PW4sbi5uZXh0LnByZXY9aSxuLm5leHQ9aSk6KGkucHJldj1pLGkubmV4dD1pKSxpfWZ1bmN0aW9uIE0odCl7dC5uZXh0LnByZXY9dC5wcmV2LHQucHJldi5uZXh0PXQubmV4dCx0LnByZXZaJiYodC5wcmV2Wi5uZXh0Wj10Lm5leHRaKSx0Lm5leHRaJiYodC5uZXh0Wi5wcmV2Wj10LnByZXZaKX1mdW5jdGlvbiBTKHQsZSxyKXt0aGlzLmk9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9bnVsbCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX1mdW5jdGlvbiBFKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9ZSxvPXItbjthPHI7YSs9bilpKz0odFtvXS10W2FdKSoodFthKzFdK3RbbysxXSksbz1hO3JldHVybiBpfWUuZXhwb3J0cz1uLGUuZXhwb3J0cy5kZWZhdWx0PW4sbi5kZXZpYXRpb249ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZSYmZS5sZW5ndGgsYT1pP2VbMF0qcjp0Lmxlbmd0aCxvPU1hdGguYWJzKEUodCwwLGEscikpO2lmKGkpZm9yKHZhciBzPTAsbD1lLmxlbmd0aDtzPGw7cysrKXt2YXIgYz1lW3NdKnIsdT1zPGwtMT9lW3MrMV0qcjp0Lmxlbmd0aDtvLT1NYXRoLmFicyhFKHQsYyx1LHIpKX12YXIgZj0wO2ZvcihzPTA7czxuLmxlbmd0aDtzKz0zKXt2YXIgaD1uW3NdKnIscD1uW3MrMV0qcixkPW5bcysyXSpyO2YrPU1hdGguYWJzKCh0W2hdLXRbZF0pKih0W3ArMV0tdFtoKzFdKS0odFtoXS10W3BdKSoodFtkKzFdLXRbaCsxXSkpfXJldHVybiAwPT09byYmMD09PWY/MDpNYXRoLmFicygoZi1vKS9vKX0sbi5mbGF0dGVuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdWzBdLmxlbmd0aCxyPXt2ZXJ0aWNlczpbXSxob2xlczpbXSxkaW1lbnNpb25zOmV9LG49MCxpPTA7aTx0Lmxlbmd0aDtpKyspe2Zvcih2YXIgYT0wO2E8dFtpXS5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288ZTtvKyspci52ZXJ0aWNlcy5wdXNoKHRbaV1bYV1bb10pO2k+MCYmKG4rPXRbaS0xXS5sZW5ndGgsci5ob2xlcy5wdXNoKG4pKX1yZXR1cm4gcn19LHt9XSwxNzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoIm51bWJlciIhPXR5cGVvZiBlKXtlPTA7Zm9yKHZhciBpPTA7aTxyOysraSl7dmFyIGE9dFtpXTtlPU1hdGgubWF4KGUsYVswXSxhWzFdKX1lPTErKDB8ZSl9ZXw9MDt2YXIgbz1uZXcgQXJyYXkoZSk7Zm9yKGk9MDtpPGU7KytpKW9baV09W107Zm9yKGk9MDtpPHI7KytpKXthPXRbaV07b1thWzBdXS5wdXNoKGFbMV0pLG9bYVsxXV0ucHVzaChhWzBdKX1mb3IodmFyIHM9MDtzPGU7KytzKW4ob1tzXSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpO3JldHVybiBvfTt2YXIgbj10KCJ1bmlxIil9LHt1bmlxOjU5Mn1dLDE4MDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaT1bXSxhPVtdLG89W10scz17fSxsPVtdO2Z1bmN0aW9uIGModCl7dmFyIGUsbixpPSExO2ZvcihhLnB1c2godCksb1t0XT0hMCxlPTA7ZTxsW3RdLmxlbmd0aDtlKyspKG49bFt0XVtlXSk9PT1yPyh1KHIsYSksaT0hMCk6b1tuXXx8KGk9YyhuKSk7aWYoaSkhZnVuY3Rpb24gdChlKXtvW2VdPSExLHMuaGFzT3duUHJvcGVydHkoZSkmJk9iamVjdC5rZXlzKHNbZV0pLmZvckVhY2goKGZ1bmN0aW9uKHIpe2RlbGV0ZSBzW2VdW3JdLG9bcl0mJnQocil9KSl9KHQpO2Vsc2UgZm9yKGU9MDtlPGxbdF0ubGVuZ3RoO2UrKyl7bj1sW3RdW2VdO3ZhciBmPXNbbl07Znx8KGY9e30sc1tuXT1mKSxmW25dPSEwfXJldHVybiBhLnBvcCgpLGl9ZnVuY3Rpb24gdSh0LHIpe3ZhciBuPVtdLmNvbmNhdChyKS5jb25jYXQodCk7ZT9lKG4pOmkucHVzaChuKX1mdW5jdGlvbiBmKGUpeyFmdW5jdGlvbihlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKykocjxlfHwhdFtyXSkmJih0W3JdPVtdKSx0W3JdPXRbcl0uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdD49ZX0pKX0oZSk7Zm9yKHZhciByLGk9bih0KS5jb21wb25lbnRzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RoPjF9KSksYT0xLzAsbz0wO288aS5sZW5ndGg7bysrKWZvcih2YXIgcz0wO3M8aVtvXS5sZW5ndGg7cysrKWlbb11bc108YSYmKGE9aVtvXVtzXSxyPW8pO3ZhciBsPWlbcl07cmV0dXJuISFsJiZ7bGVhc3RWZXJ0ZXg6YSxhZGpMaXN0OnQubWFwKChmdW5jdGlvbih0LGUpe3JldHVybi0xPT09bC5pbmRleE9mKGUpP1tdOnQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4tMSE9PWwuaW5kZXhPZih0KX0pKX0pKX19cj0wO2Zvcih2YXIgaD10Lmxlbmd0aDtyPGg7KXt2YXIgcD1mKHIpO2lmKHI9cC5sZWFzdFZlcnRleCxsPXAuYWRqTGlzdCl7Zm9yKHZhciBkPTA7ZDxsLmxlbmd0aDtkKyspZm9yKHZhciBtPTA7bTxsW2RdLmxlbmd0aDttKyspe3ZhciBnPWxbZF1bbV07b1srZ109ITEsc1tnXT17fX1jKHIpLHIrPTF9ZWxzZSByPWh9cmV0dXJuIGU/dm9pZCAwOml9fSx7InN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzIjo1NjR9XSwxODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vb2JqZWN0L3ZhbGlkLXZhbHVlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcykubGVuZ3RoPTAsdGhpc319LHsiLi4vLi4vb2JqZWN0L3ZhbGlkLXZhbHVlIjoyMTJ9XSwxODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP0FycmF5LmZyb206dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MTgzLCIuL3NoaW0iOjE4NH1dLDE4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9QXJyYXkuZnJvbTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgciYmKGU9cih0PVsicmF6IiwiZHdhIl0pLEJvb2xlYW4oZSYmZSE9PXQmJiJkd2EiPT09ZVsxXSkpfX0se31dLDE4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJlczYtc3ltYm9sIikuaXRlcmF0b3IsaT10KCIuLi8uLi9mdW5jdGlvbi9pcy1hcmd1bWVudHMiKSxhPXQoIi4uLy4uL2Z1bmN0aW9uL2lzLWZ1bmN0aW9uIiksbz10KCIuLi8uLi9udW1iZXIvdG8tcG9zLWludGVnZXIiKSxzPXQoIi4uLy4uL29iamVjdC92YWxpZC1jYWxsYWJsZSIpLGw9dCgiLi4vLi4vb2JqZWN0L3ZhbGlkLXZhbHVlIiksYz10KCIuLi8uLi9vYmplY3QvaXMtdmFsdWUiKSx1PXQoIi4uLy4uL3N0cmluZy9pcy1zdHJpbmciKSxmPUFycmF5LmlzQXJyYXksaD1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxwPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpudWxsfSxkPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixtLGcsdix5LHgsYixfLHcsVD1hcmd1bWVudHNbMV0saz1hcmd1bWVudHNbMl07aWYodD1PYmplY3QobCh0KSksYyhUKSYmcyhUKSx0aGlzJiZ0aGlzIT09QXJyYXkmJmEodGhpcykpZT10aGlzO2Vsc2V7aWYoIVQpe2lmKGkodCkpcmV0dXJuIDEhPT0odj10Lmxlbmd0aCk/QXJyYXkuYXBwbHkobnVsbCx0KTooKGc9bmV3IEFycmF5KDEpKVswXT10WzBdLGcpO2lmKGYodCkpe2ZvcihnPW5ldyBBcnJheSh2PXQubGVuZ3RoKSxyPTA7cjx2OysrcilnW3JdPXRbcl07cmV0dXJuIGd9fWc9W119aWYoIWYodCkpaWYodm9pZCAwIT09KF89dFtuXSkpe2Zvcih4PXMoXykuY2FsbCh0KSxlJiYoZz1uZXcgZSksYj14Lm5leHQoKSxyPTA7IWIuZG9uZTspdz1UP2guY2FsbChULGssYi52YWx1ZSxyKTpiLnZhbHVlLGU/KHAudmFsdWU9dyxkKGcscixwKSk6Z1tyXT13LGI9eC5uZXh0KCksKytyO3Y9cn1lbHNlIGlmKHUodCkpe2Zvcih2PXQubGVuZ3RoLGUmJihnPW5ldyBlKSxyPTAsbT0wO3I8djsrK3Ipdz10W3JdLHIrMTx2JiYoeT13LmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmeTw9NTYzMTkmJih3Kz10Wysrcl0pLHc9VD9oLmNhbGwoVCxrLHcsbSk6dyxlPyhwLnZhbHVlPXcsZChnLG0scCkpOmdbbV09dywrK207dj1tfWlmKHZvaWQgMD09PXYpZm9yKHY9byh0Lmxlbmd0aCksZSYmKGc9bmV3IGUodikpLHI9MDtyPHY7KytyKXc9VD9oLmNhbGwoVCxrLHRbcl0scik6dFtyXSxlPyhwLnZhbHVlPXcsZChnLHIscCkpOmdbcl09dztyZXR1cm4gZSYmKHAudmFsdWU9bnVsbCxnLmxlbmd0aD12KSxnfX0seyIuLi8uLi9mdW5jdGlvbi9pcy1hcmd1bWVudHMiOjE4NSwiLi4vLi4vZnVuY3Rpb24vaXMtZnVuY3Rpb24iOjE4NiwiLi4vLi4vbnVtYmVyL3RvLXBvcy1pbnRlZ2VyIjoxOTIsIi4uLy4uL29iamVjdC9pcy12YWx1ZSI6MjAxLCIuLi8uLi9vYmplY3QvdmFsaWQtY2FsbGFibGUiOjIxMCwiLi4vLi4vb2JqZWN0L3ZhbGlkLXZhbHVlIjoyMTIsIi4uLy4uL3N0cmluZy9pcy1zdHJpbmciOjIxNiwiZXM2LXN5bWJvbCI6MjI1fV0sMTg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaT1uLmNhbGwoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4uY2FsbCh0KT09PWl9fSx7fV0sMTg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaT1SZWdFeHAucHJvdG90eXBlLnRlc3QuYmluZCgvXltvYmplY3QgW0EtWmEtejAtOV0qRnVuY3Rpb25dJC8pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmaShuLmNhbGwodCkpfX0se31dLDE4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSx7fV0sMTg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9NYXRoLnNpZ246dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MTg5LCIuL3NoaW0iOjE5MH1dLDE4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLnNpZ247cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJigxPT09dCgxMCkmJi0xPT09dCgtMjApKX19LHt9XSwxOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PU51bWJlcih0KSxpc05hTih0KXx8MD09PXQ/dDp0PjA/MTotMX19LHt9XSwxOTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbWF0aC9zaWduIiksaT1NYXRoLmFicyxhPU1hdGguZmxvb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0KT8wOjAhPT0odD1OdW1iZXIodCkpJiZpc0Zpbml0ZSh0KT9uKHQpKmEoaSh0KSk6dH19LHsiLi4vbWF0aC9zaWduIjoxODh9XSwxOTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi90by1pbnRlZ2VyIiksaT1NYXRoLm1heDtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkoMCxuKHQpKX19LHsiLi90by1pbnRlZ2VyIjoxOTF9XSwxOTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi92YWxpZC1jYWxsYWJsZSIpLGk9dCgiLi92YWxpZC12YWx1ZSIpLGE9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsbz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxzPU9iamVjdC5rZXlzLGw9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixjKXt2YXIgdSxmPWFyZ3VtZW50c1syXSxoPWFyZ3VtZW50c1szXTtyZXR1cm4gcj1PYmplY3QoaShyKSksbihjKSx1PXMociksaCYmdS5zb3J0KCJmdW5jdGlvbiI9PXR5cGVvZiBoP2EuY2FsbChoLHIpOnZvaWQgMCksImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXVbdF0pLG8uY2FsbCh0LHUsKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGwuY2FsbChyLHQpP28uY2FsbChjLGYsclt0XSx0LHIsbik6ZX0pKX19fSx7Ii4vdmFsaWQtY2FsbGFibGUiOjIxMCwiLi92YWxpZC12YWx1ZSI6MjEyfV0sMTk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9PYmplY3QuYXNzaWduOnQoIi4vc2hpbSIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjE5NSwiLi9zaGltIjoxOTZ9XSwxOTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZT1PYmplY3QuYXNzaWduO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoZSh0PXtmb286InJheiJ9LHtiYXI6ImR3YSJ9LHt0cnp5OiJ0cnp5In0pLHQuZm9vK3QuYmFyK3QudHJ6eT09PSJyYXpkd2F0cnp5Iil9fSx7fV0sMTk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2tleXMiKSxpPXQoIi4uL3ZhbGlkLXZhbHVlIiksYT1NYXRoLm1heDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixvLHMsbD1hKGFyZ3VtZW50cy5sZW5ndGgsMik7Zm9yKHQ9T2JqZWN0KGkodCkpLHM9ZnVuY3Rpb24obil7dHJ5e3Rbbl09ZVtuXX1jYXRjaCh0KXtyfHwocj10KX19LG89MTtvPGw7KytvKW4oZT1hcmd1bWVudHNbb10pLmZvckVhY2gocyk7aWYodm9pZCAwIT09cil0aHJvdyByO3JldHVybiB0fX0seyIuLi9rZXlzIjoyMDIsIi4uL3ZhbGlkLXZhbHVlIjoyMTJ9XSwxOTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYXJyYXkvZnJvbSIpLGk9dCgiLi9hc3NpZ24iKSxhPXQoIi4vdmFsaWQtdmFsdWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KGEodCkpLHI9YXJndW1lbnRzWzFdLG89T2JqZWN0KGFyZ3VtZW50c1syXSk7aWYoZSE9PXQmJiFyKXJldHVybiBlO3ZhciBzPXt9O3JldHVybiByP24ociwoZnVuY3Rpb24oZSl7KG8uZW5zdXJlfHxlIGluIHQpJiYoc1tlXT10W2VdKX0pKTppKHMsdCksc319LHsiLi4vYXJyYXkvZnJvbSI6MTgyLCIuL2Fzc2lnbiI6MTk0LCIuL3ZhbGlkLXZhbHVlIjoyMTJ9XSwxOTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhLG8scz1PYmplY3QuY3JlYXRlO3QoIi4vc2V0LXByb3RvdHlwZS1vZi9pcy1pbXBsZW1lbnRlZCIpKCl8fChuPXQoIi4vc2V0LXByb3RvdHlwZS1vZi9zaGltIikpLGUuZXhwb3J0cz1uPzEhPT1uLmxldmVsP3M6KGk9e30sYT17fSxvPXtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE9iamVjdC5wcm90b3R5cGUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2FbdF09Il9fcHJvdG9fXyIhPT10P286e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH19KSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoaSxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwibnVsbFBvbHlmaWxsIix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsdmFsdWU6aX0pLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMobnVsbD09PXQ/aTp0LGUpfSk6c30seyIuL3NldC1wcm90b3R5cGUtb2YvaXMtaW1wbGVtZW50ZWQiOjIwOCwiLi9zZXQtcHJvdG90eXBlLW9mL3NoaW0iOjIwOX1dLDE5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9faXRlcmF0ZSIpKCJmb3JFYWNoIil9LHsiLi9faXRlcmF0ZSI6MTkzfV0sMjAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtdmFsdWUiKSxpPXtmdW5jdGlvbjohMCxvYmplY3Q6ITB9O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbih0KSYmaVt0eXBlb2YgdF18fCExfX0seyIuL2lzLXZhbHVlIjoyMDF9XSwyMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZnVuY3Rpb24vbm9vcCIpKCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IT09biYmbnVsbCE9PXR9fSx7Ii4uL2Z1bmN0aW9uL25vb3AiOjE4N31dLDIwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/T2JqZWN0LmtleXM6dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MjAzLCIuL3NoaW0iOjIwNH1dLDIwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIE9iamVjdC5rZXlzKCJwcmltaXRpdmUiKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSx7fV0sMjA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2lzLXZhbHVlIiksaT1PYmplY3Qua2V5cztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkobih0KT9PYmplY3QodCk6dCl9fSx7Ii4uL2lzLXZhbHVlIjoyMDF9XSwyMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi92YWxpZC1jYWxsYWJsZSIpLGk9dCgiLi9mb3ItZWFjaCIpLGE9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e30sbz1hcmd1bWVudHNbMl07cmV0dXJuIG4oZSksaSh0LChmdW5jdGlvbih0LG4saSxzKXtyW25dPWEuY2FsbChlLG8sdCxuLGkscyl9KSkscn19LHsiLi9mb3ItZWFjaCI6MTk5LCIuL3ZhbGlkLWNhbGxhYmxlIjoyMTB9XSwyMDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy12YWx1ZSIpLGk9QXJyYXkucHJvdG90eXBlLmZvckVhY2gsYT1PYmplY3QuY3JlYXRlLG89ZnVuY3Rpb24odCxlKXt2YXIgcjtmb3IociBpbiB0KWVbcl09dFtyXX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWEobnVsbCk7cmV0dXJuIGkuY2FsbChhcmd1bWVudHMsKGZ1bmN0aW9uKHQpe24odCkmJm8oT2JqZWN0KHQpLGUpfSkpLGV9fSx7Ii4vaXMtdmFsdWUiOjIwMX1dLDIwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/T2JqZWN0LnNldFByb3RvdHlwZU9mOnQoIi4vc2hpbSIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjIwOCwiLi9zaGltIjoyMDl9XSwyMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LmNyZWF0ZSxpPU9iamVjdC5nZXRQcm90b3R5cGVPZixhPXt9O2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZixlPWFyZ3VtZW50c1swXXx8bjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmaSh0KGUobnVsbCksYSkpPT09YX19LHt9XSwyMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCIuLi9pcy1vYmplY3QiKSxhPXQoIi4uL3ZhbGlkLXZhbHVlIiksbz1PYmplY3QucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yscz1PYmplY3QuZGVmaW5lUHJvcGVydHksbD17Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfTtuPWZ1bmN0aW9uKHQsZSl7aWYoYSh0KSxudWxsPT09ZXx8aShlKSlyZXR1cm4gdDt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcm90b3R5cGUgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCIpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscjtyZXR1cm4gdD8oMj09PXQubGV2ZWw/dC5zZXQ/KHI9dC5zZXQsZT1mdW5jdGlvbih0LGUpe3JldHVybiByLmNhbGwobih0LGUpLGUpLHR9KTplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlKS5fX3Byb3RvX189ZSx0fTplPWZ1bmN0aW9uIHQoZSxyKXt2YXIgaTtyZXR1cm4gbihlLHIpLChpPW8uY2FsbCh0Lm51bGxQb2x5ZmlsbCxlKSkmJmRlbGV0ZSB0Lm51bGxQb2x5ZmlsbC5fX3Byb3RvX18sbnVsbD09PXImJihyPXQubnVsbFBvbHlmaWxsKSxlLl9fcHJvdG9fXz1yLGkmJnModC5udWxsUG9seWZpbGwsIl9fcHJvdG9fXyIsbCksZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImxldmVsIix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsdmFsdWU6dC5sZXZlbH0pKTpudWxsfShmdW5jdGlvbigpe3ZhciB0LGU9T2JqZWN0LmNyZWF0ZShudWxsKSxyPXt9LG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKTtpZihuKXt0cnl7KHQ9bi5zZXQpLmNhbGwoZSxyKX1jYXRjaCh0KXt9aWYoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09cilyZXR1cm57c2V0OnQsbGV2ZWw6Mn19cmV0dXJuIGUuX19wcm90b19fPXIsT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09cj97bGV2ZWw6Mn06KChlPXt9KS5fX3Byb3RvX189cixPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yJiZ7bGV2ZWw6MX0pfSgpKSx0KCIuLi9jcmVhdGUiKX0seyIuLi9jcmVhdGUiOjE5OCwiLi4vaXMtb2JqZWN0IjoyMDAsIi4uL3ZhbGlkLXZhbHVlIjoyMTJ9XSwyMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IodCsiIGlzIG5vdCBhIGZ1bmN0aW9uIik7cmV0dXJuIHR9fSx7fV0sMjExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtb2JqZWN0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXRocm93IG5ldyBUeXBlRXJyb3IodCsiIGlzIG5vdCBhbiBPYmplY3QiKTtyZXR1cm4gdH19LHsiLi9pcy1vYmplY3QiOjIwMH1dLDIxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLXZhbHVlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB1c2UgbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4gdH19LHsiLi9pcy12YWx1ZSI6MjAxfV0sMjEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9TdHJpbmcucHJvdG90eXBlLmNvbnRhaW5zOnQoIi4vc2hpbSIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjIxNCwiLi9zaGltIjoyMTV9XSwyMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49InJhemR3YXRyenkiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuLmNvbnRhaW5zJiYoITA9PT1uLmNvbnRhaW5zKCJkd2EiKSYmITE9PT1uLmNvbnRhaW5zKCJmb28iKSl9fSx7fV0sMjE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPVN0cmluZy5wcm90b3R5cGUuaW5kZXhPZjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4uY2FsbCh0aGlzLHQsYXJndW1lbnRzWzFdKT4tMX19LHt9XSwyMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPW4uY2FsbCgiIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdHx8dCYmIm9iamVjdCI9PXR5cGVvZiB0JiYodCBpbnN0YW5jZW9mIFN0cmluZ3x8bi5jYWxsKHQpPT09aSl8fCExfX0se31dLDIxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLGk9TWF0aC5yYW5kb207ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ7ZG97dD1pKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpfXdoaWxlKG5bdF0pO3JldHVybiB0fX0se31dLDIxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YiKSxhPXQoImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiKSxvPXQoImQiKSxzPXQoImVzNi1zeW1ib2wiKSxsPXQoIi4vIiksYz1PYmplY3QuZGVmaW5lUHJvcGVydHk7bj1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyIpO2wuY2FsbCh0aGlzLHQpLGU9ZT9hLmNhbGwoZSwia2V5K3ZhbHVlIik/ImtleSt2YWx1ZSI6YS5jYWxsKGUsImtleSIpPyJrZXkiOiJ2YWx1ZSI6InZhbHVlIixjKHRoaXMsIl9fa2luZF9fIixvKCIiLGUpKX0saSYmaShuLGwpLGRlbGV0ZSBuLnByb3RvdHlwZS5jb25zdHJ1Y3RvcixuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGwucHJvdG90eXBlLHtfcmVzb2x2ZTpvKChmdW5jdGlvbih0KXtyZXR1cm4idmFsdWUiPT09dGhpcy5fX2tpbmRfXz90aGlzLl9fbGlzdF9fW3RdOiJrZXkrdmFsdWUiPT09dGhpcy5fX2tpbmRfXz9bdCx0aGlzLl9fbGlzdF9fW3RdXTp0fSkpfSksYyhuLnByb3RvdHlwZSxzLnRvU3RyaW5nVGFnLG8oImMiLCJBcnJheSBJdGVyYXRvciIpKX0seyIuLyI6MjIxLGQ6MTU0LCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mIjoyMDcsImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiOjIxMywiZXM2LXN5bWJvbCI6MjI1fV0sMjE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIiksaT10KCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSIpLGE9dCgiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIiksbz10KCIuL2dldCIpLHM9QXJyYXkuaXNBcnJheSxsPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLGM9QXJyYXkucHJvdG90eXBlLnNvbWU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxmLGgscCxkLG0sZyx2PWFyZ3VtZW50c1syXTtpZihzKHQpfHxuKHQpP3I9ImFycmF5IjphKHQpP3I9InN0cmluZyI6dD1vKHQpLGkoZSksZj1mdW5jdGlvbigpe2g9ITB9LCJhcnJheSIhPT1yKWlmKCJzdHJpbmciIT09cilmb3IodT10Lm5leHQoKTshdS5kb25lOyl7aWYobC5jYWxsKGUsdix1LnZhbHVlLGYpLGgpcmV0dXJuO3U9dC5uZXh0KCl9ZWxzZSBmb3IoZD10Lmxlbmd0aCxwPTA7cDxkJiYobT10W3BdLHArMTxkJiYoZz1tLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmZzw9NTYzMTkmJihtKz10WysrcF0pLGwuY2FsbChlLHYsbSxmKSwhaCk7KytwKTtlbHNlIGMuY2FsbCh0LChmdW5jdGlvbih0KXtyZXR1cm4gbC5jYWxsKGUsdix0LGYpLGh9KSl9fSx7Ii4vZ2V0IjoyMjAsImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIjoxODUsImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIjoyMTAsImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZyI6MjE2fV0sMjIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIiksaT10KCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciKSxhPXQoIi4vYXJyYXkiKSxvPXQoIi4vc3RyaW5nIikscz10KCIuL3ZhbGlkLWl0ZXJhYmxlIiksbD10KCJlczYtc3ltYm9sIikuaXRlcmF0b3I7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBzKHQpW2xdP3RbbF0oKTpuKHQpP25ldyBhKHQpOmkodCk/bmV3IG8odCk6bmV3IGEodCl9fSx7Ii4vYXJyYXkiOjIxOCwiLi9zdHJpbmciOjIyMywiLi92YWxpZC1pdGVyYWJsZSI6MjI0LCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyI6MTg1LCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciOjIxNiwiZXM2LXN5bWJvbCI6MjI1fV0sMjIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiZXM1LWV4dC9hcnJheS8jL2NsZWFyIiksYT10KCJlczUtZXh0L29iamVjdC9hc3NpZ24iKSxvPXQoImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIikscz10KCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZSIpLGw9dCgiZCIpLGM9dCgiZC9hdXRvLWJpbmQiKSx1PXQoImVzNi1zeW1ib2wiKSxmPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxoPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO2UuZXhwb3J0cz1uPWZ1bmN0aW9uKHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ29uc3RydWN0b3IgcmVxdWlyZXMgJ25ldyciKTtoKHRoaXMse19fbGlzdF9fOmwoInciLHModCkpLF9fY29udGV4dF9fOmwoInciLGUpLF9fbmV4dEluZGV4X186bCgidyIsMCl9KSxlJiYobyhlLm9uKSxlLm9uKCJfYWRkIix0aGlzLl9vbkFkZCksZS5vbigiX2RlbGV0ZSIsdGhpcy5fb25EZWxldGUpLGUub24oIl9jbGVhciIsdGhpcy5fb25DbGVhcikpfSxkZWxldGUgbi5wcm90b3R5cGUuY29uc3RydWN0b3IsaChuLnByb3RvdHlwZSxhKHtfbmV4dDpsKChmdW5jdGlvbigpe3ZhciB0O2lmKHRoaXMuX19saXN0X18pcmV0dXJuIHRoaXMuX19yZWRvX18mJnZvaWQgMCE9PSh0PXRoaXMuX19yZWRvX18uc2hpZnQoKSk/dDp0aGlzLl9fbmV4dEluZGV4X188dGhpcy5fX2xpc3RfXy5sZW5ndGg/dGhpcy5fX25leHRJbmRleF9fKys6dm9pZCB0aGlzLl91bkJpbmQoKX0pKSxuZXh0OmwoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZVJlc3VsdCh0aGlzLl9uZXh0KCkpfSkpLF9jcmVhdGVSZXN1bHQ6bCgoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/e2RvbmU6ITAsdmFsdWU6dm9pZCAwfTp7ZG9uZTohMSx2YWx1ZTp0aGlzLl9yZXNvbHZlKHQpfX0pKSxfcmVzb2x2ZTpsKChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2xpc3RfX1t0XX0pKSxfdW5CaW5kOmwoKGZ1bmN0aW9uKCl7dGhpcy5fX2xpc3RfXz1udWxsLGRlbGV0ZSB0aGlzLl9fcmVkb19fLHRoaXMuX19jb250ZXh0X18mJih0aGlzLl9fY29udGV4dF9fLm9mZigiX2FkZCIsdGhpcy5fb25BZGQpLHRoaXMuX19jb250ZXh0X18ub2ZmKCJfZGVsZXRlIix0aGlzLl9vbkRlbGV0ZSksdGhpcy5fX2NvbnRleHRfXy5vZmYoIl9jbGVhciIsdGhpcy5fb25DbGVhciksdGhpcy5fX2NvbnRleHRfXz1udWxsKX0pKSx0b1N0cmluZzpsKChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrKHRoaXNbdS50b1N0cmluZ1RhZ118fCJPYmplY3QiKSsiXSJ9KSl9LGMoe19vbkFkZDpsKChmdW5jdGlvbih0KXt0Pj10aGlzLl9fbmV4dEluZGV4X198fCgrK3RoaXMuX19uZXh0SW5kZXhfXyx0aGlzLl9fcmVkb19fPyh0aGlzLl9fcmVkb19fLmZvckVhY2goKGZ1bmN0aW9uKGUscil7ZT49dCYmKHRoaXMuX19yZWRvX19bcl09KytlKX0pLHRoaXMpLHRoaXMuX19yZWRvX18ucHVzaCh0KSk6Zih0aGlzLCJfX3JlZG9fXyIsbCgiYyIsW3RdKSkpfSkpLF9vbkRlbGV0ZTpsKChmdW5jdGlvbih0KXt2YXIgZTt0Pj10aGlzLl9fbmV4dEluZGV4X198fCgtLXRoaXMuX19uZXh0SW5kZXhfXyx0aGlzLl9fcmVkb19fJiYoLTEhPT0oZT10aGlzLl9fcmVkb19fLmluZGV4T2YodCkpJiZ0aGlzLl9fcmVkb19fLnNwbGljZShlLDEpLHRoaXMuX19yZWRvX18uZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtlPnQmJih0aGlzLl9fcmVkb19fW3JdPS0tZSl9KSx0aGlzKSkpfSkpLF9vbkNsZWFyOmwoKGZ1bmN0aW9uKCl7dGhpcy5fX3JlZG9fXyYmaS5jYWxsKHRoaXMuX19yZWRvX18pLHRoaXMuX19uZXh0SW5kZXhfXz0wfSkpfSkpKSxmKG4ucHJvdG90eXBlLHUuaXRlcmF0b3IsbCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSl9LHtkOjE1NCwiZC9hdXRvLWJpbmQiOjE1MywiZXM1LWV4dC9hcnJheS8jL2NsZWFyIjoxODEsImVzNS1leHQvb2JqZWN0L2Fzc2lnbiI6MTk0LCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSI6MjEwLCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZSI6MjEyLCJlczYtc3ltYm9sIjoyMjV9XSwyMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZXM1LWV4dC9mdW5jdGlvbi9pcy1hcmd1bWVudHMiKSxpPXQoImVzNS1leHQvb2JqZWN0L2lzLXZhbHVlIiksYT10KCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciKSxvPXQoImVzNi1zeW1ib2wiKS5pdGVyYXRvcixzPUFycmF5LmlzQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhaSh0KSYmKCEhcyh0KXx8KCEhYSh0KXx8KCEhbih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHRbb10pKSl9fSx7ImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIjoxODUsImVzNS1leHQvb2JqZWN0L2lzLXZhbHVlIjoyMDEsImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZyI6MjE2LCJlczYtc3ltYm9sIjoyMjV9XSwyMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mIiksYT10KCJkIiksbz10KCJlczYtc3ltYm9sIikscz10KCIuLyIpLGw9T2JqZWN0LmRlZmluZVByb3BlcnR5O249ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIik7dD1TdHJpbmcodCkscy5jYWxsKHRoaXMsdCksbCh0aGlzLCJfX2xlbmd0aF9fIixhKCIiLHQubGVuZ3RoKSl9LGkmJmkobixzKSxkZWxldGUgbi5wcm90b3R5cGUuY29uc3RydWN0b3Isbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShzLnByb3RvdHlwZSx7X25leHQ6YSgoZnVuY3Rpb24oKXtpZih0aGlzLl9fbGlzdF9fKXJldHVybiB0aGlzLl9fbmV4dEluZGV4X188dGhpcy5fX2xlbmd0aF9fP3RoaXMuX19uZXh0SW5kZXhfXysrOnZvaWQgdGhpcy5fdW5CaW5kKCl9KSksX3Jlc29sdmU6YSgoZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLl9fbGlzdF9fW3RdO3JldHVybiB0aGlzLl9fbmV4dEluZGV4X189PT10aGlzLl9fbGVuZ3RoX18/cjooZT1yLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmZTw9NTYzMTk/cit0aGlzLl9fbGlzdF9fW3RoaXMuX19uZXh0SW5kZXhfXysrXTpyfSkpfSksbChuLnByb3RvdHlwZSxvLnRvU3RyaW5nVGFnLGEoImMiLCJTdHJpbmcgSXRlcmF0b3IiKSl9LHsiLi8iOjIyMSxkOjE1NCwiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiI6MjA3LCJlczYtc3ltYm9sIjoyMjV9XSwyMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy1pdGVyYWJsZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKHQrIiBpcyBub3QgaXRlcmFibGUiKTtyZXR1cm4gdH19LHsiLi9pcy1pdGVyYWJsZSI6MjIyfV0sMjI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT90KCJleHQvZ2xvYmFsLXRoaXMiKS5TeW1ib2w6dCgiLi9wb2x5ZmlsbCIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjIyNiwiLi9wb2x5ZmlsbCI6MjMxLCJleHQvZ2xvYmFsLXRoaXMiOjIzOX1dLDIyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJleHQvZ2xvYmFsLXRoaXMiKSxpPXtvYmplY3Q6ITAsc3ltYm9sOiEwfTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlPW4uU3ltYm9sO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXJldHVybiExO3Q9ZSgidGVzdCBzeW1ib2wiKTt0cnl7U3RyaW5nKHQpfWNhdGNoKHQpe3JldHVybiExfXJldHVybiEhaVt0eXBlb2YgZS5pdGVyYXRvcl0mJighIWlbdHlwZW9mIGUudG9QcmltaXRpdmVdJiYhIWlbdHlwZW9mIGUudG9TdHJpbmdUYWddKX19LHsiZXh0L2dsb2JhbC10aGlzIjoyMzl9XSwyMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhdCYmKCJzeW1ib2wiPT10eXBlb2YgdHx8ISF0LmNvbnN0cnVjdG9yJiYoIlN5bWJvbCI9PT10LmNvbnN0cnVjdG9yLm5hbWUmJiJTeW1ib2wiPT09dFt0LmNvbnN0cnVjdG9yLnRvU3RyaW5nVGFnXSkpfX0se31dLDIyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkIiksaT1PYmplY3QuY3JlYXRlLGE9T2JqZWN0LmRlZmluZVByb3BlcnR5LG89T2JqZWN0LnByb3RvdHlwZSxzPWkobnVsbCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLGk9MDtzW3QrKGl8fCIiKV07KSsraTtyZXR1cm4gc1t0Kz1pfHwiIl09ITAsYShvLGU9IkBAIit0LG4uZ3MobnVsbCwoZnVuY3Rpb24odCl7cnx8KHI9ITAsYSh0aGlzLGUsbih0KSkscj0hMSl9KSkpLGV9fSx7ZDoxNTR9XSwyMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZCIpLGk9dCgiZXh0L2dsb2JhbC10aGlzIikuU3ltYm9sO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModCx7aGFzSW5zdGFuY2U6bigiIixpJiZpLmhhc0luc3RhbmNlfHx0KCJoYXNJbnN0YW5jZSIpKSxpc0NvbmNhdFNwcmVhZGFibGU6bigiIixpJiZpLmlzQ29uY2F0U3ByZWFkYWJsZXx8dCgiaXNDb25jYXRTcHJlYWRhYmxlIikpLGl0ZXJhdG9yOm4oIiIsaSYmaS5pdGVyYXRvcnx8dCgiaXRlcmF0b3IiKSksbWF0Y2g6bigiIixpJiZpLm1hdGNofHx0KCJtYXRjaCIpKSxyZXBsYWNlOm4oIiIsaSYmaS5yZXBsYWNlfHx0KCJyZXBsYWNlIikpLHNlYXJjaDpuKCIiLGkmJmkuc2VhcmNofHx0KCJzZWFyY2giKSksc3BlY2llczpuKCIiLGkmJmkuc3BlY2llc3x8dCgic3BlY2llcyIpKSxzcGxpdDpuKCIiLGkmJmkuc3BsaXR8fHQoInNwbGl0IikpLHRvUHJpbWl0aXZlOm4oIiIsaSYmaS50b1ByaW1pdGl2ZXx8dCgidG9QcmltaXRpdmUiKSksdG9TdHJpbmdUYWc6bigiIixpJiZpLnRvU3RyaW5nVGFnfHx0KCJ0b1N0cmluZ1RhZyIpKSx1bnNjb3BhYmxlczpuKCIiLGkmJmkudW5zY29wYWJsZXN8fHQoInVuc2NvcGFibGVzIikpfSl9fSx7ZDoxNTQsImV4dC9nbG9iYWwtdGhpcyI6MjM5fV0sMjMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQiKSxpPXQoIi4uLy4uLy4uL3ZhbGlkYXRlLXN5bWJvbCIpLGE9T2JqZWN0LmNyZWF0ZShudWxsKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQse2ZvcjpuKChmdW5jdGlvbihlKXtyZXR1cm4gYVtlXT9hW2VdOmFbZV09dChTdHJpbmcoZSkpfSkpLGtleUZvcjpuKChmdW5jdGlvbih0KXt2YXIgZTtmb3IoZSBpbiBpKHQpLGEpaWYoYVtlXT09PXQpcmV0dXJuIGV9KSl9KX19LHsiLi4vLi4vLi4vdmFsaWRhdGUtc3ltYm9sIjoyMzIsZDoxNTR9XSwyMzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhLG89dCgiZCIpLHM9dCgiLi92YWxpZGF0ZS1zeW1ib2wiKSxsPXQoImV4dC9nbG9iYWwtdGhpcyIpLlN5bWJvbCxjPXQoIi4vbGliL3ByaXZhdGUvZ2VuZXJhdGUtbmFtZSIpLHU9dCgiLi9saWIvcHJpdmF0ZS9zZXR1cC9zdGFuZGFyZC1zeW1ib2xzIiksZj10KCIuL2xpYi9wcml2YXRlL3NldHVwL3N5bWJvbC1yZWdpc3RyeSIpLGg9T2JqZWN0LmNyZWF0ZSxwPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLGQ9T2JqZWN0LmRlZmluZVByb3BlcnR5O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBsKXRyeXtTdHJpbmcobCgpKSxhPSEwfWNhdGNoKHQpe31lbHNlIGw9bnVsbDtpPWZ1bmN0aW9uKHQpe2lmKHRoaXMgaW5zdGFuY2VvZiBpKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3JldHVybiBuKHQpfSxlLmV4cG9ydHM9bj1mdW5jdGlvbiB0KGUpe3ZhciByO2lmKHRoaXMgaW5zdGFuY2VvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3JldHVybiBhP2woZSk6KHI9aChpLnByb3RvdHlwZSksZT12b2lkIDA9PT1lPyIiOlN0cmluZyhlKSxwKHIse19fZGVzY3JpcHRpb25fXzpvKCIiLGUpLF9fbmFtZV9fOm8oIiIsYyhlKSl9KSl9LHUobiksZihuKSxwKGkucHJvdG90eXBlLHtjb25zdHJ1Y3RvcjpvKG4pLHRvU3RyaW5nOm8oIiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19uYW1lX199KSl9KSxwKG4ucHJvdG90eXBlLHt0b1N0cmluZzpvKChmdW5jdGlvbigpe3JldHVybiJTeW1ib2wgKCIrcyh0aGlzKS5fX2Rlc2NyaXB0aW9uX18rIikifSkpLHZhbHVlT2Y6bygoZnVuY3Rpb24oKXtyZXR1cm4gcyh0aGlzKX0pKX0pLGQobi5wcm90b3R5cGUsbi50b1ByaW1pdGl2ZSxvKCIiLChmdW5jdGlvbigpe3ZhciB0PXModGhpcyk7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dC50b1N0cmluZygpfSkpKSxkKG4ucHJvdG90eXBlLG4udG9TdHJpbmdUYWcsbygiYyIsIlN5bWJvbCIpKSxkKGkucHJvdG90eXBlLG4udG9TdHJpbmdUYWcsbygiYyIsbi5wcm90b3R5cGVbbi50b1N0cmluZ1RhZ10pKSxkKGkucHJvdG90eXBlLG4udG9QcmltaXRpdmUsbygiYyIsbi5wcm90b3R5cGVbbi50b1ByaW1pdGl2ZV0pKX0seyIuL2xpYi9wcml2YXRlL2dlbmVyYXRlLW5hbWUiOjIyOCwiLi9saWIvcHJpdmF0ZS9zZXR1cC9zdGFuZGFyZC1zeW1ib2xzIjoyMjksIi4vbGliL3ByaXZhdGUvc2V0dXAvc3ltYm9sLXJlZ2lzdHJ5IjoyMzAsIi4vdmFsaWRhdGUtc3ltYm9sIjoyMzIsZDoxNTQsImV4dC9nbG9iYWwtdGhpcyI6MjM5fV0sMjMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtc3ltYm9sIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXRocm93IG5ldyBUeXBlRXJyb3IodCsiIGlzIG5vdCBhIHN5bWJvbCIpO3JldHVybiB0fX0seyIuL2lzLXN5bWJvbCI6MjI3fV0sMjMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9XZWFrTWFwOnQoIi4vcG9seWZpbGwiKX0seyIuL2lzLWltcGxlbWVudGVkIjoyMzQsIi4vcG9seWZpbGwiOjIzNn1dLDIzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBXZWFrTWFwKXJldHVybiExO3RyeXt0PW5ldyBXZWFrTWFwKFtbZT17fSwib25lIl0sW3t9LCJ0d28iXSxbe30sInRocmVlIl1dKX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4iW29iamVjdCBXZWFrTWFwXSI9PT1TdHJpbmcodCkmJigiZnVuY3Rpb24iPT10eXBlb2YgdC5zZXQmJih0LnNldCh7fSwxKT09PXQmJigiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWxldGUmJigiZnVuY3Rpb24iPT10eXBlb2YgdC5oYXMmJiJvbmUiPT09dC5nZXQoZSkpKSkpfX0se31dLDIzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIFdlYWtNYXAmJiJbb2JqZWN0IFdlYWtNYXBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXcgV2Vha01hcCl9LHt9XSwyMzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJlczUtZXh0L29iamVjdC9pcy12YWx1ZSIpLGE9dCgiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiIpLG89dCgiZXM1LWV4dC9vYmplY3QvdmFsaWQtb2JqZWN0Iikscz10KCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZSIpLGw9dCgiZXM1LWV4dC9zdHJpbmcvcmFuZG9tLXVuaXEiKSxjPXQoImQiKSx1PXQoImVzNi1pdGVyYXRvci9nZXQiKSxmPXQoImVzNi1pdGVyYXRvci9mb3Itb2YiKSxoPXQoImVzNi1zeW1ib2wiKS50b1N0cmluZ1RhZyxwPXQoIi4vaXMtbmF0aXZlLWltcGxlbWVudGVkIiksZD1BcnJheS5pc0FycmF5LG09T2JqZWN0LmRlZmluZVByb3BlcnR5LGc9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx2PU9iamVjdC5nZXRQcm90b3R5cGVPZjtlLmV4cG9ydHM9bj1mdW5jdGlvbigpe3ZhciB0LGU9YXJndW1lbnRzWzBdO2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIik7cmV0dXJuIHQ9cCYmYSYmV2Vha01hcCE9PW4/YShuZXcgV2Vha01hcCx2KHRoaXMpKTp0aGlzLGkoZSkmJihkKGUpfHwoZT11KGUpKSksbSh0LCJfX3dlYWtNYXBEYXRhX18iLGMoImMiLCIkd2Vha01hcCQiK2woKSkpLGU/KGYoZSwoZnVuY3Rpb24oZSl7cyhlKSx0LnNldChlWzBdLGVbMV0pfSkpLHQpOnR9LHAmJihhJiZhKG4sV2Vha01hcCksbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShXZWFrTWFwLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6YyhuKX0pKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLnByb3RvdHlwZSx7ZGVsZXRlOmMoKGZ1bmN0aW9uKHQpe3JldHVybiEhZy5jYWxsKG8odCksdGhpcy5fX3dlYWtNYXBEYXRhX18pJiYoZGVsZXRlIHRbdGhpcy5fX3dlYWtNYXBEYXRhX19dLCEwKX0pKSxnZXQ6YygoZnVuY3Rpb24odCl7aWYoZy5jYWxsKG8odCksdGhpcy5fX3dlYWtNYXBEYXRhX18pKXJldHVybiB0W3RoaXMuX193ZWFrTWFwRGF0YV9fXX0pKSxoYXM6YygoZnVuY3Rpb24odCl7cmV0dXJuIGcuY2FsbChvKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fKX0pKSxzZXQ6YygoZnVuY3Rpb24odCxlKXtyZXR1cm4gbShvKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fLGMoImMiLGUpKSx0aGlzfSkpLHRvU3RyaW5nOmMoKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgV2Vha01hcF0ifSkpfSksbShuLnByb3RvdHlwZSxoLGMoImMiLCJXZWFrTWFwIikpfSx7Ii4vaXMtbmF0aXZlLWltcGxlbWVudGVkIjoyMzUsZDoxNTQsImVzNS1leHQvb2JqZWN0L2lzLXZhbHVlIjoyMDEsImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YiOjIwNywiZXM1LWV4dC9vYmplY3QvdmFsaWQtb2JqZWN0IjoyMTEsImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlIjoyMTIsImVzNS1leHQvc3RyaW5nL3JhbmRvbS11bmlxIjoyMTcsImVzNi1pdGVyYXRvci9mb3Itb2YiOjIxOSwiZXM2LWl0ZXJhdG9yL2dldCI6MjIwLCJlczYtc3ltYm9sIjoyMjV9XSwyMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3Q/UmVmbGVjdDpudWxsLGE9aSYmImZ1bmN0aW9uIj09dHlwZW9mIGkuYXBwbHk/aS5hcHBseTpmdW5jdGlvbih0LGUscil7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKHQsZSxyKX07bj1pJiYiZnVuY3Rpb24iPT10eXBlb2YgaS5vd25LZXlzP2kub3duS2V5czpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KSl9OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KX07dmFyIG89TnVtYmVyLmlzTmFOfHxmdW5jdGlvbih0KXtyZXR1cm4gdCE9dH07ZnVuY3Rpb24gcygpe3MuaW5pdC5jYWxsKHRoaXMpfWUuZXhwb3J0cz1zLGUuZXhwb3J0cy5vbmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2Z1bmN0aW9uIGkocil7dC5yZW1vdmVMaXN0ZW5lcihlLGEpLG4ocil9ZnVuY3Rpb24gYSgpeyJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlbW92ZUxpc3RlbmVyJiZ0LnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsaSkscihbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfXYodCxlLGEse29uY2U6ITB9KSwiZXJyb3IiIT09ZSYmZnVuY3Rpb24odCxlLHIpeyJmdW5jdGlvbiI9PXR5cGVvZiB0Lm9uJiZ2KHQsImVycm9yIixlLHIpfSh0LGkse29uY2U6ITB9KX0pKX0scy5FdmVudEVtaXR0ZXI9cyxzLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxzLnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MCxzLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgbD0xMDtmdW5jdGlvbiBjKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB0KX1mdW5jdGlvbiB1KHQpe3JldHVybiB2b2lkIDA9PT10Ll9tYXhMaXN0ZW5lcnM/cy5kZWZhdWx0TWF4TGlzdGVuZXJzOnQuX21heExpc3RlbmVyc31mdW5jdGlvbiBmKHQsZSxyLG4pe3ZhciBpLGEsbyxzO2lmKGMociksdm9pZCAwPT09KGE9dC5fZXZlbnRzKT8oYT10Ll9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0Ll9ldmVudHNDb3VudD0wKToodm9pZCAwIT09YS5uZXdMaXN0ZW5lciYmKHQuZW1pdCgibmV3TGlzdGVuZXIiLGUsci5saXN0ZW5lcj9yLmxpc3RlbmVyOnIpLGE9dC5fZXZlbnRzKSxvPWFbZV0pLHZvaWQgMD09PW8pbz1hW2VdPXIsKyt0Ll9ldmVudHNDb3VudDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBvP289YVtlXT1uP1tyLG9dOltvLHJdOm4/by51bnNoaWZ0KHIpOm8ucHVzaChyKSwoaT11KHQpKT4wJiZvLmxlbmd0aD5pJiYhby53YXJuZWQpe28ud2FybmVkPSEwO3ZhciBsPW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAiK28ubGVuZ3RoKyIgIitTdHJpbmcoZSkrIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0Iik7bC5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLGwuZW1pdHRlcj10LGwudHlwZT1lLGwuY291bnQ9by5sZW5ndGgscz1sLGNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKHMpfXJldHVybiB0fWZ1bmN0aW9uIGgoKXtpZighdGhpcy5maXJlZClyZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk6dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCxhcmd1bWVudHMpfWZ1bmN0aW9uIHAodCxlLHIpe3ZhciBuPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDp0LHR5cGU6ZSxsaXN0ZW5lcjpyfSxpPWguYmluZChuKTtyZXR1cm4gaS5saXN0ZW5lcj1yLG4ud3JhcEZuPWksaX1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj10Ll9ldmVudHM7aWYodm9pZCAwPT09bilyZXR1cm5bXTt2YXIgaT1uW2VdO3JldHVybiB2b2lkIDA9PT1pP1tdOiJmdW5jdGlvbiI9PXR5cGVvZiBpP3I/W2kubGlzdGVuZXJ8fGldOltpXTpyP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPGUubGVuZ3RoOysrcillW3JdPXRbcl0ubGlzdGVuZXJ8fHRbcl07cmV0dXJuIGV9KGkpOmcoaSxpLmxlbmd0aCl9ZnVuY3Rpb24gbSh0KXt2YXIgZT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09ZSl7dmFyIHI9ZVt0XTtpZigiZnVuY3Rpb24iPT10eXBlb2YgcilyZXR1cm4gMTtpZih2b2lkIDAhPT1yKXJldHVybiByLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiBnKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gdih0LGUscixuKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5vbiluLm9uY2U/dC5vbmNlKGUscik6dC5vbihlLHIpO2Vsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQuYWRkRXZlbnRMaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImVtaXR0ZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCk7dC5hZGRFdmVudExpc3RlbmVyKGUsKGZ1bmN0aW9uIGkoYSl7bi5vbmNlJiZ0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxpKSxyKGEpfSkpfX1PYmplY3QuZGVmaW5lUHJvcGVydHkocywiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LHNldDpmdW5jdGlvbih0KXtpZigibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MHx8byh0KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJkZWZhdWx0TWF4TGlzdGVuZXJzIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK3QrIi4iKTtsPXR9fSkscy5pbml0PWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy5fZXZlbnRzJiZ0aGlzLl9ldmVudHMhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50c3x8KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0scy5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdHx8dDwwfHxvKHQpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrdCsiLiIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9dCx0aGlzfSxzLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzKX0scy5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZS5wdXNoKGFyZ3VtZW50c1tyXSk7dmFyIG49ImVycm9yIj09PXQsaT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09aSluPW4mJnZvaWQgMD09PWkuZXJyb3I7ZWxzZSBpZighbilyZXR1cm4hMTtpZihuKXt2YXIgbztpZihlLmxlbmd0aD4wJiYobz1lWzBdKSxvIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgbzt2YXIgcz1uZXcgRXJyb3IoIlVuaGFuZGxlZCBlcnJvci4iKyhvPyIgKCIrby5tZXNzYWdlKyIpIjoiIikpO3Rocm93IHMuY29udGV4dD1vLHN9dmFyIGw9aVt0XTtpZih2b2lkIDA9PT1sKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBsKWEobCx0aGlzLGUpO2Vsc2V7dmFyIGM9bC5sZW5ndGgsdT1nKGwsYyk7Zm9yKHI9MDtyPGM7KytyKWEodVtyXSx0aGlzLGUpfXJldHVybiEwfSxzLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3JldHVybiBmKHRoaXMsdCxlLCExKX0scy5wcm90b3R5cGUub249cy5wcm90b3R5cGUuYWRkTGlzdGVuZXIscy5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodGhpcyx0LGUsITApfSxzLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGMoZSksdGhpcy5vbih0LHAodGhpcyx0LGUpKSx0aGlzfSxzLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGMoZSksdGhpcy5wcmVwZW5kTGlzdGVuZXIodCxwKHRoaXMsdCxlKSksdGhpc30scy5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvO2lmKGMoZSksdm9pZCAwPT09KG49dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT0ocj1uW3RdKSlyZXR1cm4gdGhpcztpZihyPT09ZXx8ci5saXN0ZW5lcj09PWUpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTooZGVsZXRlIG5bdF0sbi5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsdCxyLmxpc3RlbmVyfHxlKSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2Ygcil7Zm9yKGk9LTEsYT1yLmxlbmd0aC0xO2E+PTA7YS0tKWlmKHJbYV09PT1lfHxyW2FdLmxpc3RlbmVyPT09ZSl7bz1yW2FdLmxpc3RlbmVyLGk9YTticmVha31pZihpPDApcmV0dXJuIHRoaXM7MD09PWk/ci5zaGlmdCgpOmZ1bmN0aW9uKHQsZSl7Zm9yKDtlKzE8dC5sZW5ndGg7ZSsrKXRbZV09dFtlKzFdO3QucG9wKCl9KHIsaSksMT09PXIubGVuZ3RoJiYoblt0XT1yWzBdKSx2b2lkIDAhPT1uLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIix0LG98fGUpfXJldHVybiB0aGlzfSxzLnByb3RvdHlwZS5vZmY9cy5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIscy5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbjtpZih2b2lkIDA9PT0ocj10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PXIucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKTp2b2lkIDAhPT1yW3RdJiYoMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTpkZWxldGUgclt0XSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIGksYT1PYmplY3Qua2V5cyhyKTtmb3Iobj0wO248YS5sZW5ndGg7KytuKSJyZW1vdmVMaXN0ZW5lciIhPT0oaT1hW25dKSYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoaSk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCJyZW1vdmVMaXN0ZW5lciIpLHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTAsdGhpc31pZigiZnVuY3Rpb24iPT10eXBlb2YoZT1yW3RdKSl0aGlzLnJlbW92ZUxpc3RlbmVyKHQsZSk7ZWxzZSBpZih2b2lkIDAhPT1lKWZvcihuPWUubGVuZ3RoLTE7bj49MDtuLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcih0LGVbbl0pO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuIGQodGhpcyx0LCEwKX0scy5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBkKHRoaXMsdCwhMSl9LHMubGlzdGVuZXJDb3VudD1mdW5jdGlvbih0LGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0Lmxpc3RlbmVyQ291bnQ/dC5saXN0ZW5lckNvdW50KGUpOm0uY2FsbCh0LGUpfSxzLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PW0scy5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4wP24odGhpcy5fZXZlbnRzKTpbXX19LHt9XSwyMzg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbigpe2lmKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZilyZXR1cm4gc2VsZjtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93KXJldHVybiB3aW5kb3c7dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSBnbG9iYWwgYHRoaXNgIil9O2UuZXhwb3J0cz1mdW5jdGlvbigpe2lmKHRoaXMpcmV0dXJuIHRoaXM7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCJfX2dsb2JhbF9fIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGNvbmZpZ3VyYWJsZTohMH0pfWNhdGNoKHQpe3JldHVybiBuKCl9dHJ5e3JldHVybiBfX2dsb2JhbF9ffHxuKCl9ZmluYWxseXtkZWxldGUgT2JqZWN0LnByb3RvdHlwZS5fX2dsb2JhbF9ffX0oKX0se31dLDIzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/Z2xvYmFsVGhpczp0KCIuL2ltcGxlbWVudGF0aW9uIil9LHsiLi9pbXBsZW1lbnRhdGlvbiI6MjM4LCIuL2lzLWltcGxlbWVudGVkIjoyNDB9XSwyNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiYoISFnbG9iYWxUaGlzJiZnbG9iYWxUaGlzLkFycmF5PT09QXJyYXkpfX0se31dLDI0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWV8fDAsaT1yfHwxO3JldHVybltbdFsxMl0rdFswXSx0WzEzXSt0WzFdLHRbMTRdK3RbMl0sdFsxNV0rdFszXV0sW3RbMTJdLXRbMF0sdFsxM10tdFsxXSx0WzE0XS10WzJdLHRbMTVdLXRbM11dLFt0WzEyXSt0WzRdLHRbMTNdK3RbNV0sdFsxNF0rdFs2XSx0WzE1XSt0WzddXSxbdFsxMl0tdFs0XSx0WzEzXS10WzVdLHRbMTRdLXRbNl0sdFsxNV0tdFs3XV0sW24qdFsxMl0rdFs4XSxuKnRbMTNdK3RbOV0sbip0WzE0XSt0WzEwXSxuKnRbMTVdK3RbMTFdXSxbaSp0WzEyXS10WzhdLGkqdFsxM10tdFs5XSxpKnRbMTRdLXRbMTBdLGkqdFsxNV0tdFsxMV1dXX19LHt9XSwyNDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiaXMtc3RyaW5nLWJsYW5rIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O2lmKCJzdHJpbmciPT09ZSl7dmFyIHI9dDtpZigwPT09KHQ9K3QpJiZuKHIpKXJldHVybiExfWVsc2UgaWYoIm51bWJlciIhPT1lKXJldHVybiExO3JldHVybiB0LXQ8MX19LHsiaXMtc3RyaW5nLWJsYW5rIjo0Mzh9XSwyNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgbyhbMF0sWzBdLDApO2Nhc2UgMTpyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/bmV3IG8obj1sKHQpLG4sMCk6bmV3IG8odCxsKHQubGVuZ3RoKSwwKTtjYXNlIDI6aWYoIm51bWJlciI9PXR5cGVvZiBlKXt2YXIgbj1sKHQubGVuZ3RoKTtyZXR1cm4gbmV3IG8odCxuLCtlKX1yPTA7Y2FzZSAzOmlmKHQubGVuZ3RoIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJzdGF0ZSBhbmQgdmVsb2NpdHkgbGVuZ3RocyBtdXN0IG1hdGNoIik7cmV0dXJuIG5ldyBvKHQsZSxyKX19O3ZhciBuPXQoImN1YmljLWhlcm1pdGUiKSxpPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZnVuY3Rpb24gYSh0LGUscil7cmV0dXJuIE1hdGgubWluKGUsTWF0aC5tYXgodCxyKSl9ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5kaW1lbnNpb249dC5sZW5ndGgsdGhpcy5ib3VuZHM9W25ldyBBcnJheSh0aGlzLmRpbWVuc2lvbiksbmV3IEFycmF5KHRoaXMuZGltZW5zaW9uKV07Zm9yKHZhciBuPTA7bjx0aGlzLmRpbWVuc2lvbjsrK24pdGhpcy5ib3VuZHNbMF1bbl09LTEvMCx0aGlzLmJvdW5kc1sxXVtuXT0xLzA7dGhpcy5fc3RhdGU9dC5zbGljZSgpLnJldmVyc2UoKSx0aGlzLl92ZWxvY2l0eT1lLnNsaWNlKCkucmV2ZXJzZSgpLHRoaXMuX3RpbWU9W3JdLHRoaXMuX3NjcmF0Y2g9W3Quc2xpY2UoKSx0LnNsaWNlKCksdC5zbGljZSgpLHQuc2xpY2UoKSx0LnNsaWNlKCldfXZhciBzPW8ucHJvdG90eXBlO2Z1bmN0aW9uIGwodCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9cy5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT1pLmd0KHRoaXMuX3RpbWUsdCktMTtlPD0wfHwodGhpcy5fdGltZS5zcGxpY2UoMCxlKSx0aGlzLl9zdGF0ZS5zcGxpY2UoMCxlKnRoaXMuZGltZW5zaW9uKSx0aGlzLl92ZWxvY2l0eS5zcGxpY2UoMCxlKnRoaXMuZGltZW5zaW9uKSl9LHMuY3VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPWUubGVuZ3RoLG89aS5sZShlLHQpLHM9dGhpcy5fc2NyYXRjaFswXSxsPXRoaXMuX3N0YXRlLGM9dGhpcy5fdmVsb2NpdHksdT10aGlzLmRpbWVuc2lvbixmPXRoaXMuYm91bmRzO2lmKG88MClmb3IodmFyIGg9dS0xLHA9MDtwPHU7KytwLC0taClzW3BdPWxbaF07ZWxzZSBpZihvPj1yLTEpe2g9bC5sZW5ndGgtMTt2YXIgZD10LWVbci0xXTtmb3IocD0wO3A8dTsrK3AsLS1oKXNbcF09bFtoXStkKmNbaF19ZWxzZXtoPXUqKG8rMSktMTt2YXIgbT1lW29dLGc9ZVtvKzFdLW18fDEsdj10aGlzLl9zY3JhdGNoWzFdLHk9dGhpcy5fc2NyYXRjaFsyXSx4PXRoaXMuX3NjcmF0Y2hbM10sYj10aGlzLl9zY3JhdGNoWzRdLF89ITA7Zm9yKHA9MDtwPHU7KytwLC0taCl2W3BdPWxbaF0seFtwXT1jW2hdKmcseVtwXT1sW2grdV0sYltwXT1jW2grdV0qZyxfPV8mJnZbcF09PT15W3BdJiZ4W3BdPT09YltwXSYmMD09PXhbcF07aWYoXylmb3IocD0wO3A8dTsrK3Apc1twXT12W3BdO2Vsc2Ugbih2LHgseSxiLCh0LW0pL2cscyl9dmFyIHc9ZlswXSxUPWZbMV07Zm9yKHA9MDtwPHU7KytwKXNbcF09YSh3W3BdLFRbcF0sc1twXSk7cmV0dXJuIHN9LHMuZGN1cnZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbWUscj1lLmxlbmd0aCxhPWkubGUoZSx0KSxvPXRoaXMuX3NjcmF0Y2hbMF0scz10aGlzLl9zdGF0ZSxsPXRoaXMuX3ZlbG9jaXR5LGM9dGhpcy5kaW1lbnNpb247aWYoYT49ci0xKWZvcih2YXIgdT1zLmxlbmd0aC0xLGY9KGVbci0xXSwwKTtmPGM7KytmLC0tdSlvW2ZdPWxbdV07ZWxzZXt1PWMqKGErMSktMTt2YXIgaD1lW2FdLHA9ZVthKzFdLWh8fDEsZD10aGlzLl9zY3JhdGNoWzFdLG09dGhpcy5fc2NyYXRjaFsyXSxnPXRoaXMuX3NjcmF0Y2hbM10sdj10aGlzLl9zY3JhdGNoWzRdLHk9ITA7Zm9yKGY9MDtmPGM7KytmLC0tdSlkW2ZdPXNbdV0sZ1tmXT1sW3VdKnAsbVtmXT1zW3UrY10sdltmXT1sW3UrY10qcCx5PXkmJmRbZl09PT1tW2ZdJiZnW2ZdPT09dltmXSYmMD09PWdbZl07aWYoeSlmb3IoZj0wO2Y8YzsrK2Ypb1tmXT0wO2Vsc2V7bi5kZXJpdmF0aXZlKGQsZyxtLHYsKHQtaCkvcCxvKTtmb3IoZj0wO2Y8YzsrK2Ypb1tmXS89cH19cmV0dXJuIG99LHMubGFzdFQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aW1lO3JldHVybiB0W3QubGVuZ3RoLTFdfSxzLnN0YWJsZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl92ZWxvY2l0eSxlPXQubGVuZ3RoLHI9dGhpcy5kaW1lbnNpb24tMTtyPj0wOy0tcilpZih0Wy0tZV0pcmV0dXJuITE7cmV0dXJuITB9LHMuanVtcD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10aGlzLmRpbWVuc2lvbjtpZighKHQ8ZXx8YXJndW1lbnRzLmxlbmd0aCE9PXIrMSkpe3ZhciBuPXRoaXMuX3N0YXRlLGk9dGhpcy5fdmVsb2NpdHksbz1uLmxlbmd0aC10aGlzLmRpbWVuc2lvbixzPXRoaXMuYm91bmRzLGw9c1swXSxjPXNbMV07dGhpcy5fdGltZS5wdXNoKGUsdCk7Zm9yKHZhciB1PTA7dTwyOysrdSlmb3IodmFyIGY9MDtmPHI7KytmKW4ucHVzaChuW28rK10pLGkucHVzaCgwKTt0aGlzLl90aW1lLnB1c2godCk7Zm9yKGY9cjtmPjA7LS1mKW4ucHVzaChhKGxbZi0xXSxjW2YtMV0sYXJndW1lbnRzW2ZdKSksaS5wdXNoKDApfX0scy5wdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDxlfHxhcmd1bWVudHMubGVuZ3RoIT09cisxKSl7dmFyIG49dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXRoaXMuZGltZW5zaW9uLHM9dC1lLGw9dGhpcy5ib3VuZHMsYz1sWzBdLHU9bFsxXSxmPXM+MWUtNj8xL3M6MDt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBoPXI7aD4wOy0taCl7dmFyIHA9YShjW2gtMV0sdVtoLTFdLGFyZ3VtZW50c1toXSk7bi5wdXNoKHApLGkucHVzaCgocC1uW28rK10pKmYpfX19LHMuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGltZW5zaW9uO2lmKCEodDx0aGlzLmxhc3RUKCl8fGFyZ3VtZW50cy5sZW5ndGghPT1lKzEpKXt2YXIgcj10aGlzLl9zdGF0ZSxuPXRoaXMuX3ZlbG9jaXR5LGk9dGhpcy5ib3VuZHMsbz1pWzBdLHM9aVsxXTt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBsPWU7bD4wOy0tbClyLnB1c2goYShvW2wtMV0sc1tsLTFdLGFyZ3VtZW50c1tsXSkpLG4ucHVzaCgwKX19LHMubW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10aGlzLmRpbWVuc2lvbjtpZighKHQ8PWV8fGFyZ3VtZW50cy5sZW5ndGghPT1yKzEpKXt2YXIgbj10aGlzLl9zdGF0ZSxpPXRoaXMuX3ZlbG9jaXR5LG89bi5sZW5ndGgtdGhpcy5kaW1lbnNpb24scz10aGlzLmJvdW5kcyxsPXNbMF0sYz1zWzFdLHU9dC1lLGY9dT4xZS02PzEvdTowO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGg9cjtoPjA7LS1oKXt2YXIgcD1hcmd1bWVudHNbaF07bi5wdXNoKGEobFtoLTFdLGNbaC0xXSxuW28rK10rcCkpLGkucHVzaChwKmYpfX19LHMuaWRsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCk7aWYoISh0PGUpKXt2YXIgcj10aGlzLmRpbWVuc2lvbixuPXRoaXMuX3N0YXRlLGk9dGhpcy5fdmVsb2NpdHksbz1uLmxlbmd0aC1yLHM9dGhpcy5ib3VuZHMsbD1zWzBdLGM9c1sxXSx1PXQtZTt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBmPXItMTtmPj0wOy0tZiluLnB1c2goYShsW2ZdLGNbZl0sbltvXSt1Kmlbb10pKSxpLnB1c2goMCksbys9MX19fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjoxMDAsImN1YmljLWhlcm1pdGUiOjE1Mn1dLDI0NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImR0eXBlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZighdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHNwZWNpZnkgZGF0YSBhcyBmaXJzdCBwYXJhbWV0ZXIiKTtpZihyPTB8KyhyfHwwKSxBcnJheS5pc0FycmF5KHQpJiZ0WzBdJiYibnVtYmVyIj09dHlwZW9mIHRbMF1bMF0pe3ZhciBpLGEsbyxzLGw9dFswXS5sZW5ndGgsYz10Lmxlbmd0aCpsO2UmJiJzdHJpbmciIT10eXBlb2YgZXx8KGU9bmV3KG4oZXx8ImZsb2F0MzIiKSkoYytyKSk7dmFyIHU9ZS5sZW5ndGgtcjtpZihjIT09dSl0aHJvdyBuZXcgRXJyb3IoInNvdXJjZSBsZW5ndGggIitjKyIgKCIrbCsieCIrdC5sZW5ndGgrIikgZG9lcyBub3QgbWF0Y2ggZGVzdGluYXRpb24gbGVuZ3RoICIrdSk7Zm9yKGk9MCxvPXI7aTx0Lmxlbmd0aDtpKyspZm9yKGE9MDthPGw7YSsrKWVbbysrXT1udWxsPT09dFtpXVthXT9OYU46dFtpXVthXX1lbHNlIGlmKGUmJiJzdHJpbmciIT10eXBlb2YgZSllLnNldCh0LHIpO2Vsc2V7dmFyIGY9bihlfHwiZmxvYXQzMiIpO2lmKEFycmF5LmlzQXJyYXkodCl8fCJhcnJheSI9PT1lKWZvcihlPW5ldyBmKHQubGVuZ3RoK3IpLGk9MCxvPXIscz1lLmxlbmd0aDtvPHM7bysrLGkrKyllW29dPW51bGw9PT10W2ldP05hTjp0W2ldO2Vsc2UgMD09PXI/ZT1uZXcgZih0KTooZT1uZXcgZih0Lmxlbmd0aCtyKSkuc2V0KHQscil9cmV0dXJuIGV9fSx7ZHR5cGU6MTc2fV0sMjQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNzcy1mb250L3N0cmluZ2lmeSIpLGk9WzMyLDEyNl07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5zaGFwZT90LnNoYXBlOnQuY2FudmFzP1t0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHRdOls1MTIsNTEyXSxyPXQuY2FudmFzfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxhPXQuZm9udCxvPSJudW1iZXIiPT10eXBlb2YgdC5zdGVwP1t0LnN0ZXAsdC5zdGVwXTp0LnN0ZXB8fFszMiwzMl0scz10LmNoYXJzfHxpO2EmJiJzdHJpbmciIT10eXBlb2YgYSYmKGE9bihhKSk7aWYoQXJyYXkuaXNBcnJheShzKSl7aWYoMj09PXMubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIHNbMF0mJiJudW1iZXIiPT10eXBlb2Ygc1sxXSl7Zm9yKHZhciBsPVtdLGM9c1swXSx1PTA7Yzw9c1sxXTtjKyspbFt1KytdPVN0cmluZy5mcm9tQ2hhckNvZGUoYyk7cz1sfX1lbHNlIHM9U3RyaW5nKHMpLnNwbGl0KCIiKTtlPWUuc2xpY2UoKSxyLndpZHRoPWVbMF0sci5oZWlnaHQ9ZVsxXTt2YXIgZj1yLmdldENvbnRleHQoIjJkIik7Zi5maWxsU3R5bGU9IiMwMDAiLGYuZmlsbFJlY3QoMCwwLHIud2lkdGgsci5oZWlnaHQpLGYuZm9udD1hLGYudGV4dEFsaWduPSJjZW50ZXIiLGYudGV4dEJhc2VsaW5lPSJtaWRkbGUiLGYuZmlsbFN0eWxlPSIjZmZmIjt2YXIgaD1vWzBdLzIscD1vWzFdLzI7Zm9yKGM9MDtjPHMubGVuZ3RoO2MrKylmLmZpbGxUZXh0KHNbY10saCxwKSwoaCs9b1swXSk+ZVswXS1vWzBdLzImJihoPW9bMF0vMixwKz1vWzFdKTtyZXR1cm4gcn19LHsiY3NzLWZvbnQvc3RyaW5naWZ5IjoxNDl9XSwyNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2V8fChlPXt9KSwoInN0cmluZyI9PXR5cGVvZiB0fHxBcnJheS5pc0FycmF5KHQpKSYmKGUuZmFtaWx5PXQpO3ZhciByPUFycmF5LmlzQXJyYXkoZS5mYW1pbHkpP2UuZmFtaWx5LmpvaW4oIiwgIik6ZS5mYW1pbHk7aWYoIXIpdGhyb3cgRXJyb3IoImBmYW1pbHlgIG11c3QgYmUgZGVmaW5lZCIpO3ZhciBzPWUuc2l6ZXx8ZS5mb250U2l6ZXx8ZS5lbXx8NDgsbD1lLndlaWdodHx8ZS5mb250V2VpZ2h0fHwiIixjPSh0PVtlLnN0eWxlfHxlLmZvbnRTdHlsZXx8IiIsbCxzXS5qb2luKCIgIikrInB4ICIrcixlLm9yaWdpbnx8InRvcCIpO2lmKG4uY2FjaGVbcl0mJnM8PW4uY2FjaGVbcl0uZW0pcmV0dXJuIGkobi5jYWNoZVtyXSxjKTt2YXIgdT1lLmNhbnZhc3x8bi5jYW52YXMsZj11LmdldENvbnRleHQoIjJkIiksaD17dXBwZXI6dm9pZCAwIT09ZS51cHBlcj9lLnVwcGVyOiJIIixsb3dlcjp2b2lkIDAhPT1lLmxvd2VyP2UubG93ZXI6IngiLGRlc2NlbnQ6dm9pZCAwIT09ZS5kZXNjZW50P2UuZGVzY2VudDoicCIsYXNjZW50OnZvaWQgMCE9PWUuYXNjZW50P2UuYXNjZW50OiJoIix0aXR0bGU6dm9pZCAwIT09ZS50aXR0bGU/ZS50aXR0bGU6ImkiLG92ZXJzaG9vdDp2b2lkIDAhPT1lLm92ZXJzaG9vdD9lLm92ZXJzaG9vdDoiTyJ9LHA9TWF0aC5jZWlsKDEuNSpzKTt1LmhlaWdodD1wLHUud2lkdGg9LjUqcCxmLmZvbnQ9dDt2YXIgZD17dG9wOjB9O2YuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJ0b3AiLGYuZmlsbFN0eWxlPSJibGFjayIsZi5maWxsVGV4dCgiSCIsMCwwKTt2YXIgbT1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0iYm90dG9tIixmLmZpbGxUZXh0KCJIIiwwLHApO3ZhciBnPWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2QubGluZUhlaWdodD1kLmJvdHRvbT1wLWcrbSxmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0iYWxwaGFiZXRpYyIsZi5maWxsVGV4dCgiSCIsMCxwKTt2YXIgdj1wLWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpLTErbTtkLmJhc2VsaW5lPWQuYWxwaGFiZXRpYz12LGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJtaWRkbGUiLGYuZmlsbFRleHQoIkgiLDAsLjUqcCk7dmFyIHk9YShmLmdldEltYWdlRGF0YSgwLDAscCxwKSk7ZC5tZWRpYW49ZC5taWRkbGU9cC15LTErbS0uNSpwLGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJoYW5naW5nIixmLmZpbGxUZXh0KCJIIiwwLC41KnApO3ZhciB4PWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2QuaGFuZ2luZz1wLXgtMSttLS41KnAsZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9ImlkZW9ncmFwaGljIixmLmZpbGxUZXh0KCJIIiwwLHApO3ZhciBiPWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2lmKGQuaWRlb2dyYXBoaWM9cC1iLTErbSxoLnVwcGVyJiYoZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9InRvcCIsZi5maWxsVGV4dChoLnVwcGVyLDAsMCksZC51cHBlcj1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSxkLmNhcEhlaWdodD1kLmJhc2VsaW5lLWQudXBwZXIpLGgubG93ZXImJihmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0idG9wIixmLmZpbGxUZXh0KGgubG93ZXIsMCwwKSxkLmxvd2VyPWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpLGQueEhlaWdodD1kLmJhc2VsaW5lLWQubG93ZXIpLGgudGl0dGxlJiYoZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9InRvcCIsZi5maWxsVGV4dChoLnRpdHRsZSwwLDApLGQudGl0dGxlPWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpKSxoLmFzY2VudCYmKGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJ0b3AiLGYuZmlsbFRleHQoaC5hc2NlbnQsMCwwKSxkLmFzY2VudD1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSksaC5kZXNjZW50JiYoZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9InRvcCIsZi5maWxsVGV4dChoLmRlc2NlbnQsMCwwKSxkLmRlc2NlbnQ9byhmLmdldEltYWdlRGF0YSgwLDAscCxwKSkpLGgub3ZlcnNob290KXtmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0idG9wIixmLmZpbGxUZXh0KGgub3ZlcnNob290LDAsMCk7dmFyIF89byhmLmdldEltYWdlRGF0YSgwLDAscCxwKSk7ZC5vdmVyc2hvb3Q9Xy12fWZvcih2YXIgdyBpbiBkKWRbd10vPXM7cmV0dXJuIGQuZW09cyxuLmNhY2hlW3JdPWQsaShkLGMpfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj17fTtmb3IodmFyIG4gaW4ic3RyaW5nIj09dHlwZW9mIGUmJihlPXRbZV0pLHQpImVtIiE9PW4mJihyW25dPXRbbl0tZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9dC5oZWlnaHQscj10LmRhdGEsbj0zO248ci5sZW5ndGg7bis9NClpZigwIT09cltuXSlyZXR1cm4gTWF0aC5mbG9vciguMjUqKG4tMykvZSl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dC5oZWlnaHQscj10LmRhdGEsbj1yLmxlbmd0aC0xO24+MDtuLT00KWlmKDAhPT1yW25dKXJldHVybiBNYXRoLmZsb29yKC4yNSoobi0zKS9lKX1lLmV4cG9ydHM9bixuLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxuLmNhY2hlPXt9fSx7fV0sMjQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHModHx8bSxudWxsKX07ZnVuY3Rpb24gbih0LGUscixuLGksYSl7dGhpcy5fY29sb3I9dCx0aGlzLmtleT1lLHRoaXMudmFsdWU9cix0aGlzLmxlZnQ9bix0aGlzLnJpZ2h0PWksdGhpcy5fY291bnQ9YX1mdW5jdGlvbiBpKHQpe3JldHVybiBuZXcgbih0Ll9jb2xvcix0LmtleSx0LnZhbHVlLHQubGVmdCx0LnJpZ2h0LHQuX2NvdW50KX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIG5ldyBuKHQsZS5rZXksZS52YWx1ZSxlLmxlZnQsZS5yaWdodCxlLl9jb3VudCl9ZnVuY3Rpb24gbyh0KXt0Ll9jb3VudD0xKyh0LmxlZnQ/dC5sZWZ0Ll9jb3VudDowKSsodC5yaWdodD90LnJpZ2h0Ll9jb3VudDowKX1mdW5jdGlvbiBzKHQsZSl7dGhpcy5fY29tcGFyZT10LHRoaXMucm9vdD1lfXZhciBsPXMucHJvdG90eXBlO2Z1bmN0aW9uIGModCxlKXt2YXIgcjtpZihlLmxlZnQmJihyPWModCxlLmxlZnQpKSlyZXR1cm4gcjtyZXR1cm4ocj10KGUua2V5LGUudmFsdWUpKXx8KGUucmlnaHQ/Yyh0LGUucmlnaHQpOnZvaWQgMCl9ZnVuY3Rpb24gdSh0LGUscixuKXtpZihlKHQsbi5rZXkpPD0wKXt2YXIgaTtpZihuLmxlZnQpaWYoaT11KHQsZSxyLG4ubGVmdCkpcmV0dXJuIGk7aWYoaT1yKG4ua2V5LG4udmFsdWUpKXJldHVybiBpfWlmKG4ucmlnaHQpcmV0dXJuIHUodCxlLHIsbi5yaWdodCl9ZnVuY3Rpb24gZih0LGUscixuLGkpe3ZhciBhLG89cih0LGkua2V5KSxzPXIoZSxpLmtleSk7aWYobzw9MCl7aWYoaS5sZWZ0JiYoYT1mKHQsZSxyLG4saS5sZWZ0KSkpcmV0dXJuIGE7aWYocz4wJiYoYT1uKGkua2V5LGkudmFsdWUpKSlyZXR1cm4gYX1pZihzPjAmJmkucmlnaHQpcmV0dXJuIGYodCxlLHIsbixpLnJpZ2h0KX1mdW5jdGlvbiBoKHQsZSl7dGhpcy50cmVlPXQsdGhpcy5fc3RhY2s9ZX1PYmplY3QuZGVmaW5lUHJvcGVydHkobCwia2V5cyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKGUscil7dC5wdXNoKGUpfSkpLHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInZhbHVlcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKGUscil7dC5wdXNoKHIpfSkpLHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3Q/dGhpcy5yb290Ll9jb3VudDowfX0pLGwuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX2NvbXBhcmUsaT10aGlzLnJvb3QsbD1bXSxjPVtdO2k7KXt2YXIgdT1yKHQsaS5rZXkpO2wucHVzaChpKSxjLnB1c2godSksaT11PD0wP2kubGVmdDppLnJpZ2h0fWwucHVzaChuZXcgbigwLHQsZSxudWxsLG51bGwsMSkpO2Zvcih2YXIgZj1sLmxlbmd0aC0yO2Y+PTA7LS1mKXtpPWxbZl07Y1tmXTw9MD9sW2ZdPW5ldyBuKGkuX2NvbG9yLGkua2V5LGkudmFsdWUsbFtmKzFdLGkucmlnaHQsaS5fY291bnQrMSk6bFtmXT1uZXcgbihpLl9jb2xvcixpLmtleSxpLnZhbHVlLGkubGVmdCxsW2YrMV0saS5fY291bnQrMSl9Zm9yKGY9bC5sZW5ndGgtMTtmPjE7LS1mKXt2YXIgaD1sW2YtMV07aT1sW2ZdO2lmKDE9PT1oLl9jb2xvcnx8MT09PWkuX2NvbG9yKWJyZWFrO3ZhciBwPWxbZi0yXTtpZihwLmxlZnQ9PT1oKWlmKGgubGVmdD09PWkpe2lmKCEoZD1wLnJpZ2h0KXx8MCE9PWQuX2NvbG9yKXtpZihwLl9jb2xvcj0wLHAubGVmdD1oLnJpZ2h0LGguX2NvbG9yPTEsaC5yaWdodD1wLGxbZi0yXT1oLGxbZi0xXT1pLG8ocCksbyhoKSxmPj0zKShtPWxbZi0zXSkubGVmdD09PXA/bS5sZWZ0PWg6bS5yaWdodD1oO2JyZWFrfWguX2NvbG9yPTEscC5yaWdodD1hKDEsZCkscC5fY29sb3I9MCxmLT0xfWVsc2V7aWYoIShkPXAucmlnaHQpfHwwIT09ZC5fY29sb3Ipe2lmKGgucmlnaHQ9aS5sZWZ0LHAuX2NvbG9yPTAscC5sZWZ0PWkucmlnaHQsaS5fY29sb3I9MSxpLmxlZnQ9aCxpLnJpZ2h0PXAsbFtmLTJdPWksbFtmLTFdPWgsbyhwKSxvKGgpLG8oaSksZj49MykobT1sW2YtM10pLmxlZnQ9PT1wP20ubGVmdD1pOm0ucmlnaHQ9aTticmVha31oLl9jb2xvcj0xLHAucmlnaHQ9YSgxLGQpLHAuX2NvbG9yPTAsZi09MX1lbHNlIGlmKGgucmlnaHQ9PT1pKXtpZighKGQ9cC5sZWZ0KXx8MCE9PWQuX2NvbG9yKXtpZihwLl9jb2xvcj0wLHAucmlnaHQ9aC5sZWZ0LGguX2NvbG9yPTEsaC5sZWZ0PXAsbFtmLTJdPWgsbFtmLTFdPWksbyhwKSxvKGgpLGY+PTMpKG09bFtmLTNdKS5yaWdodD09PXA/bS5yaWdodD1oOm0ubGVmdD1oO2JyZWFrfWguX2NvbG9yPTEscC5sZWZ0PWEoMSxkKSxwLl9jb2xvcj0wLGYtPTF9ZWxzZXt2YXIgZDtpZighKGQ9cC5sZWZ0KXx8MCE9PWQuX2NvbG9yKXt2YXIgbTtpZihoLmxlZnQ9aS5yaWdodCxwLl9jb2xvcj0wLHAucmlnaHQ9aS5sZWZ0LGkuX2NvbG9yPTEsaS5yaWdodD1oLGkubGVmdD1wLGxbZi0yXT1pLGxbZi0xXT1oLG8ocCksbyhoKSxvKGkpLGY+PTMpKG09bFtmLTNdKS5yaWdodD09PXA/bS5yaWdodD1pOm0ubGVmdD1pO2JyZWFrfWguX2NvbG9yPTEscC5sZWZ0PWEoMSxkKSxwLl9jb2xvcj0wLGYtPTF9fXJldHVybiBsWzBdLl9jb2xvcj0xLG5ldyBzKHIsbFswXSl9LGwuZm9yRWFjaD1mdW5jdGlvbih0LGUscil7aWYodGhpcy5yb290KXN3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIGModCx0aGlzLnJvb3QpO2Nhc2UgMjpyZXR1cm4gdShlLHRoaXMuX2NvbXBhcmUsdCx0aGlzLnJvb3QpO2Nhc2UgMzppZih0aGlzLl9jb21wYXJlKGUscik+PTApcmV0dXJuO3JldHVybiBmKGUscix0aGlzLl9jb21wYXJlLHQsdGhpcy5yb290KX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJiZWdpbiIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMucm9vdDtlOyl0LnB1c2goZSksZT1lLmxlZnQ7cmV0dXJuIG5ldyBoKHRoaXMsdCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImVuZCIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMucm9vdDtlOyl0LnB1c2goZSksZT1lLnJpZ2h0O3JldHVybiBuZXcgaCh0aGlzLHQpfX0pLGwuYXQ9ZnVuY3Rpb24odCl7aWYodDwwKXJldHVybiBuZXcgaCh0aGlzLFtdKTtmb3IodmFyIGU9dGhpcy5yb290LHI9W107Oyl7aWYoci5wdXNoKGUpLGUubGVmdCl7aWYodDxlLmxlZnQuX2NvdW50KXtlPWUubGVmdDtjb250aW51ZX10LT1lLmxlZnQuX2NvdW50fWlmKCF0KXJldHVybiBuZXcgaCh0aGlzLHIpO2lmKHQtPTEsIWUucmlnaHQpYnJlYWs7aWYodD49ZS5yaWdodC5fY291bnQpYnJlYWs7ZT1lLnJpZ2h0fXJldHVybiBuZXcgaCh0aGlzLFtdKX0sbC5nZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYTw9MCYmKGk9bi5sZW5ndGgpLHI9YTw9MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgaCh0aGlzLG4pfSxsLmd0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPDAmJihpPW4ubGVuZ3RoKSxyPWE8MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgaCh0aGlzLG4pfSxsLmx0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPjAmJihpPW4ubGVuZ3RoKSxyPWE8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWksbmV3IGgodGhpcyxuKX0sbC5sZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYT49MCYmKGk9bi5sZW5ndGgpLHI9YTwwP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuLmxlbmd0aD1pLG5ldyBoKHRoaXMsbil9LGwuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdO3I7KXt2YXIgaT1lKHQsci5rZXkpO2lmKG4ucHVzaChyKSwwPT09aSlyZXR1cm4gbmV3IGgodGhpcyxuKTtyPWk8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG5ldyBoKHRoaXMsW10pfSxsLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZpbmQodCk7cmV0dXJuIGU/ZS5yZW1vdmUoKTp0aGlzfSxsLmdldD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdDtyOyl7dmFyIG49ZSh0LHIua2V5KTtpZigwPT09bilyZXR1cm4gci52YWx1ZTtyPW48PTA/ci5sZWZ0OnIucmlnaHR9fTt2YXIgcD1oLnByb3RvdHlwZTtmdW5jdGlvbiBkKHQsZSl7dC5rZXk9ZS5rZXksdC52YWx1ZT1lLnZhbHVlLHQubGVmdD1lLmxlZnQsdC5yaWdodD1lLnJpZ2h0LHQuX2NvbG9yPWUuX2NvbG9yLHQuX2NvdW50PWUuX2NvdW50fWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9T2JqZWN0LmRlZmluZVByb3BlcnR5KHAsInZhbGlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YWNrLmxlbmd0aD4wfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJub2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YWNrLmxlbmd0aD4wP3RoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aC0xXTpudWxsfSxlbnVtZXJhYmxlOiEwfSkscC5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgaCh0aGlzLnRyZWUsdGhpcy5fc3RhY2suc2xpY2UoKSl9LHAucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0aGlzLnRyZWU7dmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPXRbdC5sZW5ndGgtMV07ZVtlLmxlbmd0aC0xXT1uZXcgbihyLl9jb2xvcixyLmtleSxyLnZhbHVlLHIubGVmdCxyLnJpZ2h0LHIuX2NvdW50KTtmb3IodmFyIGw9dC5sZW5ndGgtMjtsPj0wOy0tbCl7KHI9dFtsXSkubGVmdD09PXRbbCsxXT9lW2xdPW5ldyBuKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsZVtsKzFdLHIucmlnaHQsci5fY291bnQpOmVbbF09bmV3IG4oci5fY29sb3Isci5rZXksci52YWx1ZSxyLmxlZnQsZVtsKzFdLHIuX2NvdW50KX1pZigocj1lW2UubGVuZ3RoLTFdKS5sZWZ0JiZyLnJpZ2h0KXt2YXIgYz1lLmxlbmd0aDtmb3Iocj1yLmxlZnQ7ci5yaWdodDspZS5wdXNoKHIpLHI9ci5yaWdodDt2YXIgdT1lW2MtMV07ZS5wdXNoKG5ldyBuKHIuX2NvbG9yLHUua2V5LHUudmFsdWUsci5sZWZ0LHIucmlnaHQsci5fY291bnQpKSxlW2MtMV0ua2V5PXIua2V5LGVbYy0xXS52YWx1ZT1yLnZhbHVlO2ZvcihsPWUubGVuZ3RoLTI7bD49YzstLWwpcj1lW2xdLGVbbF09bmV3IG4oci5fY29sb3Isci5rZXksci52YWx1ZSxyLmxlZnQsZVtsKzFdLHIuX2NvdW50KTtlW2MtMV0ubGVmdD1lW2NdfWlmKDA9PT0ocj1lW2UubGVuZ3RoLTFdKS5fY29sb3Ipe3ZhciBmPWVbZS5sZW5ndGgtMl07Zi5sZWZ0PT09cj9mLmxlZnQ9bnVsbDpmLnJpZ2h0PT09ciYmKGYucmlnaHQ9bnVsbCksZS5wb3AoKTtmb3IobD0wO2w8ZS5sZW5ndGg7KytsKWVbbF0uX2NvdW50LS07cmV0dXJuIG5ldyBzKHRoaXMudHJlZS5fY29tcGFyZSxlWzBdKX1pZihyLmxlZnR8fHIucmlnaHQpe3IubGVmdD9kKHIsci5sZWZ0KTpyLnJpZ2h0JiZkKHIsci5yaWdodCksci5fY29sb3I9MTtmb3IobD0wO2w8ZS5sZW5ndGgtMTsrK2wpZVtsXS5fY291bnQtLTtyZXR1cm4gbmV3IHModGhpcy50cmVlLl9jb21wYXJlLGVbMF0pfWlmKDE9PT1lLmxlbmd0aClyZXR1cm4gbmV3IHModGhpcy50cmVlLl9jb21wYXJlLG51bGwpO2ZvcihsPTA7bDxlLmxlbmd0aDsrK2wpZVtsXS5fY291bnQtLTt2YXIgaD1lW2UubGVuZ3RoLTJdO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGUscixuLHMsbD10Lmxlbmd0aC0xO2w+PTA7LS1sKXtpZihlPXRbbF0sMD09PWwpcmV0dXJuIHZvaWQoZS5fY29sb3I9MSk7aWYoKHI9dFtsLTFdKS5sZWZ0PT09ZSl7aWYoKG49ci5yaWdodCkucmlnaHQmJjA9PT1uLnJpZ2h0Ll9jb2xvcil7aWYocz0obj1yLnJpZ2h0PWkobikpLnJpZ2h0PWkobi5yaWdodCksci5yaWdodD1uLmxlZnQsbi5sZWZ0PXIsbi5yaWdodD1zLG4uX2NvbG9yPXIuX2NvbG9yLGUuX2NvbG9yPTEsci5fY29sb3I9MSxzLl9jb2xvcj0xLG8ociksbyhuKSxsPjEpKGM9dFtsLTJdKS5sZWZ0PT09cj9jLmxlZnQ9bjpjLnJpZ2h0PW47cmV0dXJuIHZvaWQodFtsLTFdPW4pfWlmKG4ubGVmdCYmMD09PW4ubGVmdC5fY29sb3Ipe2lmKHM9KG49ci5yaWdodD1pKG4pKS5sZWZ0PWkobi5sZWZ0KSxyLnJpZ2h0PXMubGVmdCxuLmxlZnQ9cy5yaWdodCxzLmxlZnQ9cixzLnJpZ2h0PW4scy5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9MSxuLl9jb2xvcj0xLGUuX2NvbG9yPTEsbyhyKSxvKG4pLG8ocyksbD4xKShjPXRbbC0yXSkubGVmdD09PXI/Yy5sZWZ0PXM6Yy5yaWdodD1zO3JldHVybiB2b2lkKHRbbC0xXT1zKX1pZigxPT09bi5fY29sb3Ipe2lmKDA9PT1yLl9jb2xvcilyZXR1cm4gci5fY29sb3I9MSx2b2lkKHIucmlnaHQ9YSgwLG4pKTtyLnJpZ2h0PWEoMCxuKTtjb250aW51ZX1uPWkobiksci5yaWdodD1uLmxlZnQsbi5sZWZ0PXIsbi5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9MCxvKHIpLG8obiksbD4xJiYoKGM9dFtsLTJdKS5sZWZ0PT09cj9jLmxlZnQ9bjpjLnJpZ2h0PW4pLHRbbC0xXT1uLHRbbF09cixsKzE8dC5sZW5ndGg/dFtsKzFdPWU6dC5wdXNoKGUpLGwrPTJ9ZWxzZXtpZigobj1yLmxlZnQpLmxlZnQmJjA9PT1uLmxlZnQuX2NvbG9yKXtpZihzPShuPXIubGVmdD1pKG4pKS5sZWZ0PWkobi5sZWZ0KSxyLmxlZnQ9bi5yaWdodCxuLnJpZ2h0PXIsbi5sZWZ0PXMsbi5fY29sb3I9ci5fY29sb3IsZS5fY29sb3I9MSxyLl9jb2xvcj0xLHMuX2NvbG9yPTEsbyhyKSxvKG4pLGw+MSkoYz10W2wtMl0pLnJpZ2h0PT09cj9jLnJpZ2h0PW46Yy5sZWZ0PW47cmV0dXJuIHZvaWQodFtsLTFdPW4pfWlmKG4ucmlnaHQmJjA9PT1uLnJpZ2h0Ll9jb2xvcil7aWYocz0obj1yLmxlZnQ9aShuKSkucmlnaHQ9aShuLnJpZ2h0KSxyLmxlZnQ9cy5yaWdodCxuLnJpZ2h0PXMubGVmdCxzLnJpZ2h0PXIscy5sZWZ0PW4scy5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9MSxuLl9jb2xvcj0xLGUuX2NvbG9yPTEsbyhyKSxvKG4pLG8ocyksbD4xKShjPXRbbC0yXSkucmlnaHQ9PT1yP2MucmlnaHQ9czpjLmxlZnQ9cztyZXR1cm4gdm9pZCh0W2wtMV09cyl9aWYoMT09PW4uX2NvbG9yKXtpZigwPT09ci5fY29sb3IpcmV0dXJuIHIuX2NvbG9yPTEsdm9pZChyLmxlZnQ9YSgwLG4pKTtyLmxlZnQ9YSgwLG4pO2NvbnRpbnVlfXZhciBjO249aShuKSxyLmxlZnQ9bi5yaWdodCxuLnJpZ2h0PXIsbi5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9MCxvKHIpLG8obiksbD4xJiYoKGM9dFtsLTJdKS5yaWdodD09PXI/Yy5yaWdodD1uOmMubGVmdD1uKSx0W2wtMV09bix0W2xdPXIsbCsxPHQubGVuZ3RoP3RbbCsxXT1lOnQucHVzaChlKSxsKz0yfX19KGUpLGgubGVmdD09PXI/aC5sZWZ0PW51bGw6aC5yaWdodD1udWxsLG5ldyBzKHRoaXMudHJlZS5fY29tcGFyZSxlWzBdKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsImtleSIse2dldDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0YWNrLmxlbmd0aD4wKXJldHVybiB0aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV0ua2V5fSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsInZhbHVlIix7Z2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RhY2subGVuZ3RoPjApcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aC0xXS52YWx1ZX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJpbmRleCIse2dldDpmdW5jdGlvbigpe3ZhciB0PTAsZT10aGlzLl9zdGFjaztpZigwPT09ZS5sZW5ndGgpe3ZhciByPXRoaXMudHJlZS5yb290O3JldHVybiByP3IuX2NvdW50OjB9ZVtlLmxlbmd0aC0xXS5sZWZ0JiYodD1lW2UubGVuZ3RoLTFdLmxlZnQuX2NvdW50KTtmb3IodmFyIG49ZS5sZW5ndGgtMjtuPj0wOy0tbillW24rMV09PT1lW25dLnJpZ2h0JiYoKyt0LGVbbl0ubGVmdCYmKHQrPWVbbl0ubGVmdC5fY291bnQpKTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMH0pLHAubmV4dD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDAhPT10Lmxlbmd0aCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtpZihlLnJpZ2h0KWZvcihlPWUucmlnaHQ7ZTspdC5wdXNoKGUpLGU9ZS5sZWZ0O2Vsc2UgZm9yKHQucG9wKCk7dC5sZW5ndGg+MCYmdFt0Lmxlbmd0aC0xXS5yaWdodD09PWU7KWU9dFt0Lmxlbmd0aC0xXSx0LnBvcCgpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsImhhc05leHQiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuITE7aWYodFt0Lmxlbmd0aC0xXS5yaWdodClyZXR1cm4hMDtmb3IodmFyIGU9dC5sZW5ndGgtMTtlPjA7LS1lKWlmKHRbZS0xXS5sZWZ0PT09dFtlXSlyZXR1cm4hMDtyZXR1cm4hMX19KSxwLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zdGFjaztpZigwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYW4ndCB1cGRhdGUgZW1wdHkgbm9kZSEiKTt2YXIgcj1uZXcgQXJyYXkoZS5sZW5ndGgpLGk9ZVtlLmxlbmd0aC0xXTtyW3IubGVuZ3RoLTFdPW5ldyBuKGkuX2NvbG9yLGkua2V5LHQsaS5sZWZ0LGkucmlnaHQsaS5fY291bnQpO2Zvcih2YXIgYT1lLmxlbmd0aC0yO2E+PTA7LS1hKShpPWVbYV0pLmxlZnQ9PT1lW2ErMV0/clthXT1uZXcgbihpLl9jb2xvcixpLmtleSxpLnZhbHVlLHJbYSsxXSxpLnJpZ2h0LGkuX2NvdW50KTpyW2FdPW5ldyBuKGkuX2NvbG9yLGkua2V5LGkudmFsdWUsaS5sZWZ0LHJbYSsxXSxpLl9jb3VudCk7cmV0dXJuIG5ldyBzKHRoaXMudHJlZS5fY29tcGFyZSxyWzBdKX0scC5wcmV2PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMCE9PXQubGVuZ3RoKXt2YXIgZT10W3QubGVuZ3RoLTFdO2lmKGUubGVmdClmb3IoZT1lLmxlZnQ7ZTspdC5wdXNoKGUpLGU9ZS5yaWdodDtlbHNlIGZvcih0LnBvcCgpO3QubGVuZ3RoPjAmJnRbdC5sZW5ndGgtMV0ubGVmdD09PWU7KWU9dFt0Lmxlbmd0aC0xXSx0LnBvcCgpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsImhhc1ByZXYiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuITE7aWYodFt0Lmxlbmd0aC0xXS5sZWZ0KXJldHVybiEwO2Zvcih2YXIgZT10Lmxlbmd0aC0xO2U+MDstLWUpaWYodFtlLTFdLnJpZ2h0PT09dFtlXSlyZXR1cm4hMDtyZXR1cm4hMX19KX0se31dLDI0ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHNwZWNpZnkgdHlwZSBzdHJpbmciKTtpZihlPWV8fHt9LCJ1bmRlZmluZWQiPT10eXBlb2YgZG9jdW1lbnQmJiFlLmNhbnZhcylyZXR1cm4gbnVsbDt2YXIgcj1lLmNhbnZhc3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Im51bWJlciI9PXR5cGVvZiBlLndpZHRoJiYoci53aWR0aD1lLndpZHRoKTsibnVtYmVyIj09dHlwZW9mIGUuaGVpZ2h0JiYoci5oZWlnaHQ9ZS5oZWlnaHQpO3ZhciBuLGk9ZTt0cnl7dmFyIGE9W3RdOzA9PT10LmluZGV4T2YoIndlYmdsIikmJmEucHVzaCgiZXhwZXJpbWVudGFsLSIrdCk7Zm9yKHZhciBvPTA7bzxhLmxlbmd0aDtvKyspaWYobj1yLmdldENvbnRleHQoYVtvXSxpKSlyZXR1cm4gbn1jYXRjaCh0KXtuPW51bGx9cmV0dXJuIG58fG51bGx9fSx7fV0sMjQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyB1KHQpO3JldHVybiByLnVwZGF0ZShlKSxyfTt2YXIgbj10KCIuL2xpYi90ZXh0LmpzIiksaT10KCIuL2xpYi9saW5lcy5qcyIpLGE9dCgiLi9saWIvYmFja2dyb3VuZC5qcyIpLG89dCgiLi9saWIvY3ViZS5qcyIpLHM9dCgiLi9saWIvdGlja3MuanMiKSxsPW5ldyBGbG9hdDMyQXJyYXkoWzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKTtmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9ZnVuY3Rpb24gdSh0KXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5ib3VuZHM9W1stMTAsLTEwLC0xMF0sWzEwLDEwLDEwXV0sdGhpcy50aWNrcz1bW10sW10sW11dLHRoaXMuYXV0b1RpY2tzPSEwLHRoaXMudGlja1NwYWNpbmc9WzEsMSwxXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLnRpY2tGb250PVsic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGhpcy50aWNrU2l6ZT1bMTIsMTIsMTJdLHRoaXMudGlja0FuZ2xlPVswLDAsMF0sdGhpcy50aWNrQWxpZ249WyJhdXRvIiwiYXV0byIsImF1dG8iXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTAsMTAsMTBdLHRoaXMubGFzdEN1YmVQcm9wcz17Y3ViZUVkZ2VzOlswLDAsMF0sYXhpczpbMCwwLDBdfSx0aGlzLmxhYmVscz1bIngiLCJ5IiwieiJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxhYmVsRm9udD0ic2Fucy1zZXJpZiIsdGhpcy5sYWJlbFNpemU9WzIwLDIwLDIwXSx0aGlzLmxhYmVsQW5nbGU9WzAsMCwwXSx0aGlzLmxhYmVsQWxpZ249WyJhdXRvIiwiYXV0byIsImF1dG8iXSx0aGlzLmxhYmVsQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVsxMCwxMCwxMF0sdGhpcy5saW5lRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGluZVRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVUaWNrTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lVGlja0xlbmd0aD1bMCwwLDBdLHRoaXMubGluZVRpY2tXaWR0aD1bMSwxLDFdLHRoaXMubGluZVRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZEVuYWJsZT1bITAsITAsITBdLHRoaXMuZ3JpZFdpZHRoPVsxLDEsMV0sdGhpcy5ncmlkQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9FbmFibGU9WyEwLCEwLCEwXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9MaW5lV2lkdGg9WzIsMiwyXSx0aGlzLmJhY2tncm91bmRFbmFibGU9WyExLCExLCExXSx0aGlzLmJhY2tncm91bmRDb2xvcj1bWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV1dLHRoaXMuX2ZpcnN0SW5pdD0hMCx0aGlzLl90ZXh0PW51bGwsdGhpcy5fbGluZXM9bnVsbCx0aGlzLl9iYWNrZ3JvdW5kPWEodCl9dmFyIGY9dS5wcm90b3R5cGU7ZnVuY3Rpb24gaCgpe3RoaXMucHJpbWFsT2Zmc2V0PVswLDAsMF0sdGhpcy5wcmltYWxNaW5vcj1bMCwwLDBdLHRoaXMubWlycm9yT2Zmc2V0PVswLDAsMF0sdGhpcy5taXJyb3JNaW5vcj1bMCwwLDBdfWYudXBkYXRlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLG4pe2lmKG4gaW4gdCl7dmFyIGksYT10W25dLG89dGhpc1tuXTsoZT9BcnJheS5pc0FycmF5KGEpJiZBcnJheS5pc0FycmF5KGFbMF0pOkFycmF5LmlzQXJyYXkoYSkpP3RoaXNbbl09aT1bcihhWzBdKSxyKGFbMV0pLHIoYVsyXSldOnRoaXNbbl09aT1bcihhKSxyKGEpLHIoYSldO2Zvcih2YXIgcz0wO3M8MzsrK3MpaWYoaVtzXSE9PW9bc10pcmV0dXJuITB9cmV0dXJuITF9dD10fHx7fTt2YXIgcixhPWUuYmluZCh0aGlzLCExLE51bWJlciksbz1lLmJpbmQodGhpcywhMSxCb29sZWFuKSxsPWUuYmluZCh0aGlzLCExLFN0cmluZyksYz1lLmJpbmQodGhpcywhMCwoZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoMz09PXQubGVuZ3RoKXJldHVyblsrdFswXSwrdFsxXSwrdFsyXSwxXTtpZig0PT09dC5sZW5ndGgpcmV0dXJuWyt0WzBdLCt0WzFdLCt0WzJdLCt0WzNdXX1yZXR1cm5bMCwwLDAsMV19KSksdT0hMSxmPSExO2lmKCJib3VuZHMiaW4gdClmb3IodmFyIGg9dC5ib3VuZHMscD0wO3A8MjsrK3ApZm9yKHZhciBkPTA7ZDwzOysrZCloW3BdW2RdIT09dGhpcy5ib3VuZHNbcF1bZF0mJihmPSEwKSx0aGlzLmJvdW5kc1twXVtkXT1oW3BdW2RdO2lmKCJ0aWNrcyJpbiB0KXtyPXQudGlja3MsdT0hMCx0aGlzLmF1dG9UaWNrcz0hMTtmb3IocD0wO3A8MzsrK3ApdGhpcy50aWNrU3BhY2luZ1twXT0wfWVsc2UgYSgidGlja1NwYWNpbmciKSYmKHRoaXMuYXV0b1RpY2tzPSEwLGY9ITApO2lmKHRoaXMuX2ZpcnN0SW5pdCYmKCJ0aWNrcyJpbiB0fHwidGlja1NwYWNpbmciaW4gdHx8KHRoaXMuYXV0b1RpY2tzPSEwKSxmPSEwLHU9ITAsdGhpcy5fZmlyc3RJbml0PSExKSxmJiZ0aGlzLmF1dG9UaWNrcyYmKHI9cy5jcmVhdGUodGhpcy5ib3VuZHMsdGhpcy50aWNrU3BhY2luZyksdT0hMCksdSl7Zm9yKHA9MDtwPDM7KytwKXJbcF0uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54LWUueH0pKTtzLmVxdWFsKHIsdGhpcy50aWNrcyk/dT0hMTp0aGlzLnRpY2tzPXJ9bygidGlja0VuYWJsZSIpLGwoInRpY2tGb250IikmJih1PSEwKSxhKCJ0aWNrU2l6ZSIpLGEoInRpY2tBbmdsZSIpLGEoInRpY2tQYWQiKSxjKCJ0aWNrQ29sb3IiKTt2YXIgbT1sKCJsYWJlbHMiKTtsKCJsYWJlbEZvbnQiKSYmKG09ITApLG8oImxhYmVsRW5hYmxlIiksYSgibGFiZWxTaXplIiksYSgibGFiZWxQYWQiKSxjKCJsYWJlbENvbG9yIiksbygibGluZUVuYWJsZSIpLG8oImxpbmVNaXJyb3IiKSxhKCJsaW5lV2lkdGgiKSxjKCJsaW5lQ29sb3IiKSxvKCJsaW5lVGlja0VuYWJsZSIpLG8oImxpbmVUaWNrTWlycm9yIiksYSgibGluZVRpY2tMZW5ndGgiKSxhKCJsaW5lVGlja1dpZHRoIiksYygibGluZVRpY2tDb2xvciIpLG8oImdyaWRFbmFibGUiKSxhKCJncmlkV2lkdGgiKSxjKCJncmlkQ29sb3IiKSxvKCJ6ZXJvRW5hYmxlIiksYygiemVyb0xpbmVDb2xvciIpLGEoInplcm9MaW5lV2lkdGgiKSxvKCJiYWNrZ3JvdW5kRW5hYmxlIiksYygiYmFja2dyb3VuZENvbG9yIiksdGhpcy5fdGV4dD90aGlzLl90ZXh0JiYobXx8dSkmJnRoaXMuX3RleHQudXBkYXRlKHRoaXMuYm91bmRzLHRoaXMubGFiZWxzLHRoaXMubGFiZWxGb250LHRoaXMudGlja3MsdGhpcy50aWNrRm9udCk6dGhpcy5fdGV4dD1uKHRoaXMuZ2wsdGhpcy5ib3VuZHMsdGhpcy5sYWJlbHMsdGhpcy5sYWJlbEZvbnQsdGhpcy50aWNrcyx0aGlzLnRpY2tGb250KSx0aGlzLl9saW5lcyYmdSYmKHRoaXMuX2xpbmVzLmRpc3Bvc2UoKSx0aGlzLl9saW5lcz1udWxsKSx0aGlzLl9saW5lc3x8KHRoaXMuX2xpbmVzPWkodGhpcy5nbCx0aGlzLmJvdW5kcyx0aGlzLnRpY2tzKSl9O3ZhciBwPVtuZXcgaCxuZXcgaCxuZXcgaF07ZnVuY3Rpb24gZCh0LGUscixuLGkpe2Zvcih2YXIgYT10LnByaW1hbE9mZnNldCxvPXQucHJpbWFsTWlub3Iscz10Lm1pcnJvck9mZnNldCxsPXQubWlycm9yTWlub3IsYz1uW2VdLHU9MDt1PDM7Kyt1KWlmKGUhPT11KXt2YXIgZj1hLGg9cyxwPW8sZD1sO2MmMTw8dSYmKGY9cyxoPWEscD1sLGQ9byksZlt1XT1yWzBdW3VdLGhbdV09clsxXVt1XSxpW3VdPjA/KHBbdV09LTEsZFt1XT0wKToocFt1XT0wLGRbdV09MSl9fXZhciBtPVswLDAsMF0sZz17bW9kZWw6bCx2aWV3OmwscHJvamVjdGlvbjpsLF9vcnRobzohMX07Zi5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiEwfSxmLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZi5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7fTt2YXIgdj1bMCwwLDBdLHk9WzAsMCwwXSx4PVswLDAsMF07Zi5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8Zztmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fGwsbj10LnZpZXd8fGwsaT10LnByb2plY3Rpb258fGwsYT10aGlzLmJvdW5kcyxzPXQuX29ydGhvfHwhMSx1PW8ocixuLGksYSxzKSxmPXUuY3ViZUVkZ2VzLGg9dS5heGlzLGI9blsxMl0sXz1uWzEzXSx3PW5bMTRdLFQ9blsxNV0saz0ocz8yOjEpKnRoaXMucGl4ZWxSYXRpbyooaVszXSpiK2lbN10qXytpWzExXSp3K2lbMTVdKlQpL2UuZHJhd2luZ0J1ZmZlckhlaWdodCxBPTA7QTwzOysrQSl0aGlzLmxhc3RDdWJlUHJvcHMuY3ViZUVkZ2VzW0FdPWZbQV0sdGhpcy5sYXN0Q3ViZVByb3BzLmF4aXNbQV09aFtBXTt2YXIgTT1wO2ZvcihBPTA7QTwzOysrQSlkKHBbQV0sQSx0aGlzLmJvdW5kcyxmLGgpO2U9dGhpcy5nbDt2YXIgUyxFPW07Zm9yKEE9MDtBPDM7KytBKXRoaXMuYmFja2dyb3VuZEVuYWJsZVtBXT9FW0FdPWhbQV06RVtBXT0wO3RoaXMuX2JhY2tncm91bmQuZHJhdyhyLG4saSxhLEUsdGhpcy5iYWNrZ3JvdW5kQ29sb3IpLHRoaXMuX2xpbmVzLmJpbmQocixuLGksdGhpcyk7Zm9yKEE9MDtBPDM7KytBKXt2YXIgTD1bMCwwLDBdO2hbQV0+MD9MW0FdPWFbMV1bQV06TFtBXT1hWzBdW0FdO2Zvcih2YXIgQz0wO0M8MjsrK0Mpe3ZhciBQPShBKzErQyklMyxJPShBKzErKDFeQykpJTM7dGhpcy5ncmlkRW5hYmxlW1BdJiZ0aGlzLl9saW5lcy5kcmF3R3JpZChQLEksdGhpcy5ib3VuZHMsTCx0aGlzLmdyaWRDb2xvcltQXSx0aGlzLmdyaWRXaWR0aFtQXSp0aGlzLnBpeGVsUmF0aW8pfWZvcihDPTA7QzwyOysrQyl7UD0oQSsxK0MpJTMsST0oQSsxKygxXkMpKSUzO3RoaXMuemVyb0VuYWJsZVtJXSYmTWF0aC5taW4oYVswXVtJXSxhWzFdW0ldKTw9MCYmTWF0aC5tYXgoYVswXVtJXSxhWzFdW0ldKT49MCYmdGhpcy5fbGluZXMuZHJhd1plcm8oUCxJLHRoaXMuYm91bmRzLEwsdGhpcy56ZXJvTGluZUNvbG9yW0ldLHRoaXMuemVyb0xpbmVXaWR0aFtJXSp0aGlzLnBpeGVsUmF0aW8pfX1mb3IoQT0wO0E8MzsrK0Epe3RoaXMubGluZUVuYWJsZVtBXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNMaW5lKEEsdGhpcy5ib3VuZHMsTVtBXS5wcmltYWxPZmZzZXQsdGhpcy5saW5lQ29sb3JbQV0sdGhpcy5saW5lV2lkdGhbQV0qdGhpcy5waXhlbFJhdGlvKSx0aGlzLmxpbmVNaXJyb3JbQV0mJnRoaXMuX2xpbmVzLmRyYXdBeGlzTGluZShBLHRoaXMuYm91bmRzLE1bQV0ubWlycm9yT2Zmc2V0LHRoaXMubGluZUNvbG9yW0FdLHRoaXMubGluZVdpZHRoW0FdKnRoaXMucGl4ZWxSYXRpbyk7dmFyIE89Yyh2LE1bQV0ucHJpbWFsTWlub3IpLHo9Yyh5LE1bQV0ubWlycm9yTWlub3IpLEQ9dGhpcy5saW5lVGlja0xlbmd0aDtmb3IoQz0wO0M8MzsrK0Mpe3ZhciBSPWsvcls1KkNdO09bQ10qPURbQ10qUix6W0NdKj1EW0NdKlJ9dGhpcy5saW5lVGlja0VuYWJsZVtBXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNUaWNrcyhBLE1bQV0ucHJpbWFsT2Zmc2V0LE8sdGhpcy5saW5lVGlja0NvbG9yW0FdLHRoaXMubGluZVRpY2tXaWR0aFtBXSp0aGlzLnBpeGVsUmF0aW8pLHRoaXMubGluZVRpY2tNaXJyb3JbQV0mJnRoaXMuX2xpbmVzLmRyYXdBeGlzVGlja3MoQSxNW0FdLm1pcnJvck9mZnNldCx6LHRoaXMubGluZVRpY2tDb2xvcltBXSx0aGlzLmxpbmVUaWNrV2lkdGhbQV0qdGhpcy5waXhlbFJhdGlvKX10aGlzLl9saW5lcy51bmJpbmQoKSx0aGlzLl90ZXh0LmJpbmQocixuLGksdGhpcy5waXhlbFJhdGlvKTt2YXIgRixCO2Z1bmN0aW9uIE4odCl7KEI9WzAsMCwwXSlbdF09MX1mdW5jdGlvbiBqKHQsZSxyKXt2YXIgbj0odCsxKSUzLGk9KHQrMiklMyxhPWVbbl0sbz1lW2ldLHM9cltuXSxsPXJbaV07YT4wJiZsPjB8fGE+MCYmbDwwfHxhPDAmJmw+MHx8YTwwJiZsPDA/TihuKToobz4wJiZzPjB8fG8+MCYmczwwfHxvPDAmJnM+MHx8bzwwJiZzPDApJiZOKGkpfWZvcihBPTA7QTwzOysrQSl7dmFyIFU9TVtBXS5wcmltYWxNaW5vcixWPU1bQV0ubWlycm9yTWlub3IsSD1jKHgsTVtBXS5wcmltYWxPZmZzZXQpO2ZvcihDPTA7QzwzOysrQyl0aGlzLmxpbmVUaWNrRW5hYmxlW0FdJiYoSFtDXSs9aypVW0NdKk1hdGgubWF4KHRoaXMubGluZVRpY2tMZW5ndGhbQ10sMCkvcls1KkNdKTt2YXIgcT1bMCwwLDBdO2lmKHFbQV09MSx0aGlzLnRpY2tFbmFibGVbQV0pey0zNjAwPT09dGhpcy50aWNrQW5nbGVbQV0/KHRoaXMudGlja0FuZ2xlW0FdPTAsdGhpcy50aWNrQWxpZ25bQV09ImF1dG8iKTp0aGlzLnRpY2tBbGlnbltBXT0tMSxGPTEsImF1dG8iPT09KFM9W3RoaXMudGlja0FsaWduW0FdLC41LEZdKVswXT9TWzBdPTA6U1swXT1wYXJzZUludCgiIitTWzBdKSxCPVswLDAsMF0saihBLFUsVik7Zm9yKEM9MDtDPDM7KytDKUhbQ10rPWsqVVtDXSp0aGlzLnRpY2tQYWRbQ10vcls1KkNdO3RoaXMuX3RleHQuZHJhd1RpY2tzKEEsdGhpcy50aWNrU2l6ZVtBXSx0aGlzLnRpY2tBbmdsZVtBXSxILHRoaXMudGlja0NvbG9yW0FdLHEsQixTKX1pZih0aGlzLmxhYmVsRW5hYmxlW0FdKXtGPTAsQj1bMCwwLDBdLHRoaXMubGFiZWxzW0FdLmxlbmd0aD40JiYoTihBKSxGPTEpLCJhdXRvIj09PShTPVt0aGlzLmxhYmVsQWxpZ25bQV0sLjUsRl0pWzBdP1NbMF09MDpTWzBdPXBhcnNlSW50KCIiK1NbMF0pO2ZvcihDPTA7QzwzOysrQylIW0NdKz1rKlVbQ10qdGhpcy5sYWJlbFBhZFtDXS9yWzUqQ107SFtBXSs9LjUqKGFbMF1bQV0rYVsxXVtBXSksdGhpcy5fdGV4dC5kcmF3TGFiZWwoQSx0aGlzLmxhYmVsU2l6ZVtBXSx0aGlzLmxhYmVsQW5nbGVbQV0sSCx0aGlzLmxhYmVsQ29sb3JbQV0sWzAsMCwwXSxCLFMpfX10aGlzLl90ZXh0LnVuYmluZCgpfSxmLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl90ZXh0LmRpc3Bvc2UoKSx0aGlzLl9saW5lcy5kaXNwb3NlKCksdGhpcy5fYmFja2dyb3VuZC5kaXNwb3NlKCksdGhpcy5fbGluZXM9bnVsbCx0aGlzLl90ZXh0PW51bGwsdGhpcy5fYmFja2dyb3VuZD1udWxsLHRoaXMuZ2w9bnVsbH19LHsiLi9saWIvYmFja2dyb3VuZC5qcyI6MjUwLCIuL2xpYi9jdWJlLmpzIjoyNTEsIi4vbGliL2xpbmVzLmpzIjoyNTIsIi4vbGliL3RleHQuanMiOjI1NCwiLi9saWIvdGlja3MuanMiOjI1NX1dLDI1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9W10scz0wLGw9MDtsPDM7KytsKWZvcih2YXIgYz0obCsxKSUzLHU9KGwrMiklMyxmPVswLDAsMF0saD1bMCwwLDBdLHA9LTE7cDw9MTtwKz0yKXtyLnB1c2gocyxzKzIscysxLHMrMSxzKzIscyszKSxmW2xdPXAsaFtsXT1wO2Zvcih2YXIgZD0tMTtkPD0xO2QrPTIpe2ZbY109ZDtmb3IodmFyIG09LTE7bTw9MTttKz0yKWZbdV09bSxlLnB1c2goZlswXSxmWzFdLGZbMl0saFswXSxoWzFdLGhbMl0pLHMrPTF9dmFyIGc9YztjPXUsdT1nfXZhciB2PW4odCxuZXcgRmxvYXQzMkFycmF5KGUpKSx5PW4odCxuZXcgVWludDE2QXJyYXkociksdC5FTEVNRU5UX0FSUkFZX0JVRkZFUikseD1pKHQsW3tidWZmZXI6dix0eXBlOnQuRkxPQVQsc2l6ZTozLG9mZnNldDowLHN0cmlkZToyNH0se2J1ZmZlcjp2LHR5cGU6dC5GTE9BVCxzaXplOjMsb2Zmc2V0OjEyLHN0cmlkZToyNH1dLHkpLGI9YSh0KTtyZXR1cm4gYi5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsYi5hdHRyaWJ1dGVzLm5vcm1hbC5sb2NhdGlvbj0xLG5ldyBvKHQsdix4LGIpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLGE9dCgiLi9zaGFkZXJzIikuYmc7ZnVuY3Rpb24gbyh0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW59dmFyIHM9by5wcm90b3R5cGU7cy5kcmF3PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89ITEscz0wO3M8MzsrK3Mpbz1vfHxpW3NdO2lmKG8pe3ZhciBsPXRoaXMuZ2w7bC5lbmFibGUobC5QT0xZR09OX09GRlNFVF9GSUxMKSxsLnBvbHlnb25PZmZzZXQoMSwyKSx0aGlzLnNoYWRlci5iaW5kKCksdGhpcy5zaGFkZXIudW5pZm9ybXM9e21vZGVsOnQsdmlldzplLHByb2plY3Rpb246cixib3VuZHM6bixlbmFibGU6aSxjb2xvcnM6YX0sdGhpcy52YW8uYmluZCgpLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsMzYpLHRoaXMudmFvLnVuYmluZCgpLGwuZGlzYWJsZShsLlBPTFlHT05fT0ZGU0VUX0ZJTEwpfX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MjUzLCJnbC1idWZmZXIiOjI1NywiZ2wtdmFvIjozNDN9XSwyNTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEscCl7aShzLGUsdCksaShzLHIscyk7Zm9yKHZhciB5PTAseD0wO3g8MjsrK3gpe3VbMl09YVt4XVsyXTtmb3IodmFyIGI9MDtiPDI7KytiKXt1WzFdPWFbYl1bMV07Zm9yKHZhciBfPTA7XzwyOysrXyl1WzBdPWFbX11bMF0saChsW3ldLHUscykseSs9MX19dmFyIHc9LTE7Zm9yKHg9MDt4PDg7Kyt4KXtmb3IodmFyIFQ9bFt4XVszXSxrPTA7azwzOysrayljW3hdW2tdPWxbeF1ba10vVDtwJiYoY1t4XVsyXSo9LTEpLFQ8MCYmKHc8MHx8Y1t4XVsyXTxjW3ddWzJdKSYmKHc9eCl9aWYodzwwKXt3PTA7Zm9yKHZhciBBPTA7QTwzOysrQSl7Zm9yKHZhciBNPShBKzIpJTMsUz0oQSsxKSUzLEU9LTEsTD0tMSxDPTA7QzwyOysrQyl7dmFyIFA9KE89Qzw8QSkrKEM8PE0pKygxLUM8PFMpLEk9TysoMS1DPDxNKSsoQzw8Uyk7byhjW09dLGNbUF0sY1tJXSxmKTwwfHwoQz9FPTE6TD0xKX1pZihFPDB8fEw8MClMPkUmJih3fD0xPDxBKTtlbHNle2ZvcihDPTA7QzwyOysrQyl7UD0oTz1DPDxBKSsoQzw8TSkrKDEtQzw8UyksST1PKygxLUM8PE0pKyhDPDxTKTt2YXIgTyx6PWQoW2xbT10sbFtQXSxsW0ldLGxbTysoMTw8TSkrKDE8PFMpXV0pO0M/RT16Okw9en1MPkUmJih3fD0xPDxBKX19fXZhciBEPTdedyxSPS0xO2Zvcih4PTA7eDw4OysreCl4IT09dyYmeCE9PUQmJihSPDB8fGNbUl1bMV0+Y1t4XVsxXSkmJihSPXgpO3ZhciBGPS0xO2Zvcih4PTA7eDwzOysreCl7aWYoKE49Ul4xPDx4KSE9PXcmJk4hPT1EKUY8MCYmKEY9TiksKFM9Y1tOXSlbMF08Y1tGXVswXSYmKEY9Til9dmFyIEI9LTE7Zm9yKHg9MDt4PDM7Kyt4KXt2YXIgTjtpZigoTj1SXjE8PHgpIT09dyYmTiE9PUQmJk4hPT1GKUI8MCYmKEI9TiksKFM9Y1tOXSlbMF0+Y1tCXVswXSYmKEI9Til9dmFyIGo9bTtqWzBdPWpbMV09alsyXT0wLGpbbi5sb2cyKEZeUildPVImRixqW24ubG9nMihSXkIpXT1SJkI7dmFyIFU9N15CO1U9PT13fHxVPT09RD8oVT03XkYsaltuLmxvZzIoQl5VKV09VSZCKTpqW24ubG9nMihGXlUpXT1VJkY7dmFyIFY9ZyxIPXc7Zm9yKEE9MDtBPDM7KytBKVZbQV09SCYxPDxBPy0xOjE7cmV0dXJuIHZ9O3ZhciBuPXQoImJpdC10d2lkZGxlIiksaT10KCJnbC1tYXQ0L211bHRpcGx5IiksYT10KCJzcGxpdC1wb2x5Z29uIiksbz10KCJyb2J1c3Qtb3JpZW50YXRpb24iKSxzPW5ldyBBcnJheSgxNiksbD1uZXcgQXJyYXkoOCksYz1uZXcgQXJyYXkoOCksdT1uZXcgQXJyYXkoMyksZj1bMCwwLDBdO2Z1bmN0aW9uIGgodCxlLHIpe2Zvcih2YXIgbj0wO248NDsrK24pe3Rbbl09clsxMituXTtmb3IodmFyIGk9MDtpPDM7KytpKXRbbl0rPWVbaV0qcls0Kmkrbl19fSFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ODsrK3QpbFt0XT1bMSwxLDEsMV0sY1t0XT1bMSwxLDFdfSgpO3ZhciBwPVtbMCwwLDEsMCwwXSxbMCwwLC0xLDEsMF0sWzAsLTEsMCwxLDBdLFswLDEsMCwxLDBdLFstMSwwLDAsMSwwXSxbMSwwLDAsMSwwXV07ZnVuY3Rpb24gZCh0KXtmb3IodmFyIGU9MDtlPHAubGVuZ3RoOysrZSlpZigodD1hLnBvc2l0aXZlKHQscFtlXSkpLmxlbmd0aDwzKXJldHVybiAwO3ZhciByPXRbMF0sbj1yWzBdL3JbM10saT1yWzFdL3JbM10sbz0wO2ZvcihlPTE7ZSsxPHQubGVuZ3RoOysrZSl7dmFyIHM9dFtlXSxsPXRbZSsxXSxjPXNbMF0vc1szXS1uLHU9c1sxXS9zWzNdLWksZj1sWzBdL2xbM10tbixoPWxbMV0vbFszXS1pO28rPU1hdGguYWJzKGMqaC11KmYpfXJldHVybiBvfXZhciBtPVsxLDEsMV0sZz1bMCwwLDBdLHY9e2N1YmVFZGdlczptLGF4aXM6Z319LHsiYml0LXR3aWRkbGUiOjEwMSwiZ2wtbWF0NC9tdWx0aXBseSI6Mjg5LCJyb2J1c3Qtb3JpZW50YXRpb24iOjUyNCwic3BsaXQtcG9seWdvbiI6NTQxfV0sMjUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG89W10scz1bMCwwLDBdLGw9WzAsMCwwXSxjPVswLDAsMF0sdT1bMCwwLDBdO28ucHVzaCgwLDAsMSwwLDEsMSwwLDAsLTEsMCwwLC0xLDAsMSwxLDAsMSwtMSk7Zm9yKHZhciBmPTA7ZjwzOysrZil7Zm9yKHZhciBoPW8ubGVuZ3RoLzN8MCxkPTA7ZDxyW2ZdLmxlbmd0aDsrK2Qpe3ZhciBtPStyW2ZdW2RdLng7by5wdXNoKG0sMCwxLG0sMSwxLG0sMCwtMSxtLDAsLTEsbSwxLDEsbSwxLC0xKX12YXIgZz1vLmxlbmd0aC8zfDA7c1tmXT1oLGxbZl09Zy1oO2g9by5sZW5ndGgvM3wwO2Zvcih2YXIgdj0wO3Y8cltmXS5sZW5ndGg7Kyt2KXttPStyW2ZdW3ZdLng7by5wdXNoKG0sMCwxLG0sMSwxLG0sMCwtMSxtLDAsLTEsbSwxLDEsbSwxLC0xKX1nPW8ubGVuZ3RoLzN8MDtjW2ZdPWgsdVtmXT1nLWh9dmFyIHk9bih0LG5ldyBGbG9hdDMyQXJyYXkobykpLHg9aSh0LFt7YnVmZmVyOnksdHlwZTp0LkZMT0FULHNpemU6MyxzdHJpZGU6MCxvZmZzZXQ6MH1dKSxiPWEodCk7cmV0dXJuIGIuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLG5ldyBwKHQseSx4LGIsbCxzLHUsYyl9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCIuL3NoYWRlcnMiKS5saW5lLG89WzAsMCwwXSxzPVswLDAsMF0sbD1bMCwwLDBdLGM9WzAsMCwwXSx1PVsxLDFdO2Z1bmN0aW9uIGYodCl7cmV0dXJuIHRbMF09dFsxXT10WzJdPTAsdH1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9ZnVuY3Rpb24gcCh0LGUscixuLGksYSxvLHMpe3RoaXMuZ2w9dCx0aGlzLnZlcnRCdWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW4sdGhpcy50aWNrQ291bnQ9aSx0aGlzLnRpY2tPZmZzZXQ9YSx0aGlzLmdyaWRDb3VudD1vLHRoaXMuZ3JpZE9mZnNldD1zfXZhciBkPXAucHJvdG90eXBlO2QuYmluZD1mdW5jdGlvbih0LGUscil7dGhpcy5zaGFkZXIuYmluZCgpLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1vZGVsPXQsdGhpcy5zaGFkZXIudW5pZm9ybXMudmlldz1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb249cix1WzBdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLHVbMV09dGhpcy5nbC5kcmF3aW5nQnVmZmVySGVpZ2h0LHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlblNoYXBlPXUsdGhpcy52YW8uYmluZCgpfSxkLnVuYmluZD1mdW5jdGlvbigpe3RoaXMudmFvLnVuYmluZCgpfSxkLmRyYXdBeGlzTGluZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWYocyk7dGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPXMsYVt0XT1lWzFdW3RdLWVbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPWE7dmFyIG8sdT1oKGMscik7dVt0XSs9ZVswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9dSx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9aSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1uLChvPWYobCkpWyh0KzIpJTNdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1vLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNiksKG89ZihsKSlbKHQrMSklM109MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPW8sdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KX0sZC5kcmF3QXhpc1RpY2tzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYodGhpcy50aWNrQ291bnRbdF0pe3ZhciBhPWYobyk7YVt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz1yLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPW4sdGhpcy5zaGFkZXIudW5pZm9ybXMubGluZVdpZHRoPWk7dmFyIHM9ZihsKTtzW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1zLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy50aWNrQ291bnRbdF0sdGhpcy50aWNrT2Zmc2V0W3RdKX19LGQuZHJhd0dyaWQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKHRoaXMuZ3JpZENvdW50W3RdKXt2YXIgdT1mKHMpO3VbZV09clsxXVtlXS1yWzBdW2VdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz11O3ZhciBwPWgoYyxuKTtwW2VdKz1yWzBdW2VdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1wO3ZhciBkPWYobyk7ZFt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1kO3ZhciBtPWYobCk7bVt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9bSx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy5ncmlkQ291bnRbdF0sdGhpcy5ncmlkT2Zmc2V0W3RdKX19LGQuZHJhd1plcm89ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWYocyk7dGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPW8sb1t0XT1yWzFdW3RdLXJbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPW87dmFyIHU9aChjLG4pO3VbdF0rPXJbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PXU7dmFyIHA9ZihsKTtwW2VdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1wLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KX0sZC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMudmVydEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjI1MywiZ2wtYnVmZmVyIjoyNTcsImdsLXZhbyI6MzQzfV0sMjUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxpPXQoImdsLXNoYWRlciIpLGE9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgb2Zmc2V0LCBtYWpvckF4aXMsIG1pbm9yQXhpcywgc2NyZWVuQXhpcztcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xuXG52ZWMzIHByb2plY3QodmVjMyBwKSB7XG4gIHZlYzQgcHAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xuICByZXR1cm4gcHAueHl6IC8gbWF4KHBwLncsIDAuMDAwMSk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBtYWpvciA9IHBvc2l0aW9uLnggKiBtYWpvckF4aXM7XG4gIHZlYzMgbWlub3IgPSBwb3NpdGlvbi55ICogbWlub3JBeGlzO1xuXG4gIHZlYzMgdlBvc2l0aW9uID0gbWFqb3IgKyBtaW5vciArIG9mZnNldDtcbiAgdmVjMyBwUG9zaXRpb24gPSBwcm9qZWN0KHZQb3NpdGlvbik7XG4gIHZlYzMgb2Zmc2V0ID0gcHJvamVjdCh2UG9zaXRpb24gKyBzY3JlZW5BeGlzICogcG9zaXRpb24ueik7XG5cbiAgdmVjMiBzY3JlZW4gPSBub3JtYWxpemUoKG9mZnNldCAtIHBQb3NpdGlvbikueHkgKiBzY3JlZW5TaGFwZSkgLyBzY3JlZW5TaGFwZTtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocFBvc2l0aW9uICsgdmVjMygwLjUgKiBzY3JlZW4gKiBsaW5lV2lkdGgsIDApLCAxLjApO1xufVxuIl0pLG89bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG59Il0pO3IubGluZT1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifV0pfTt2YXIgcz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBvZmZzZXQsIGF4aXMsIGFsaWduRGlyLCBhbGlnbk9wdDtcbnVuaWZvcm0gZmxvYXQgc2NhbGUsIGFuZ2xlLCBwaXhlbFNjYWxlO1xudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XG5cbnZlYzMgcHJvamVjdCh2ZWMzIHApIHtcbiAgdmVjNCBwcCA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHAsIDEuMCk7XG4gIHJldHVybiBwcC54eXogLyBtYXgocHAudywgMC4wMDAxKTtcbn1cblxuZmxvYXQgY29tcHV0ZVZpZXdBbmdsZSh2ZWMzIGEsIHZlYzMgYikge1xuICB2ZWMzIEEgPSBwcm9qZWN0KGEpO1xuICB2ZWMzIEIgPSBwcm9qZWN0KGIpO1xuXG4gIHJldHVybiBhdGFuKFxuICAgIChCLnkgLSBBLnkpICogcmVzb2x1dGlvbi55LFxuICAgIChCLnggLSBBLngpICogcmVzb2x1dGlvbi54XG4gICk7XG59XG5cbmNvbnN0IGZsb2F0IFBJID0gMy4xNDE1OTI7XG5jb25zdCBmbG9hdCBUV09fUEkgPSAyLjAgKiBQSTtcbmNvbnN0IGZsb2F0IEhBTEZfUEkgPSAwLjUgKiBQSTtcbmNvbnN0IGZsb2F0IE9ORV9BTkRfSEFMRl9QSSA9IDEuNSAqIFBJO1xuXG5pbnQgb3B0aW9uID0gaW50KGZsb29yKGFsaWduT3B0LnggKyAwLjAwMSkpO1xuZmxvYXQgaHZfcmF0aW8gPSAgICAgICBhbGlnbk9wdC55O1xuYm9vbCBlbmFibGVBbGlnbiA9ICAgIChhbGlnbk9wdC56ICE9IDAuMCk7XG5cbmZsb2F0IG1vZF9hbmdsZShmbG9hdCBhKSB7XG4gIHJldHVybiBtb2QoYSwgUEkpO1xufVxuXG5mbG9hdCBwb3NpdGl2ZV9hbmdsZShmbG9hdCBhKSB7XG4gIHJldHVybiBtb2RfYW5nbGUoKGEgPCAwLjApID9cbiAgICBhICsgVFdPX1BJIDpcbiAgICBhXG4gICk7XG59XG5cbmZsb2F0IGxvb2tfdXB3YXJkcyhmbG9hdCBhKSB7XG4gIGZsb2F0IGIgPSBwb3NpdGl2ZV9hbmdsZShhKTtcbiAgcmV0dXJuICgoYiA+IEhBTEZfUEkpICYmIChiIDw9IE9ORV9BTkRfSEFMRl9QSSkpID9cbiAgICBiIC0gUEkgOlxuICAgIGI7XG59XG5cbmZsb2F0IGxvb2tfaG9yaXpvbnRhbF9vcl92ZXJ0aWNhbChmbG9hdCBhLCBmbG9hdCByYXRpbykge1xuICAvLyByYXRpbyBjb250cm9scyB0aGUgcmF0aW8gYmV0d2VlbiBiZWluZyBob3Jpem9udGFsIHRvICh2ZXJ0aWNhbCArIGhvcml6b250YWwpXG4gIC8vIGlmIHJhdGlvIGlzIHNldCB0byAwLjUgdGhlbiBpdCBpcyA1MCUsIDUwJS5cbiAgLy8gd2hlbiB1c2luZyBhIGhpZ2hlciByYXRpbyBlLmcuIDAuNzUgdGhlIHJlc3VsdCB3b3VsZFxuICAvLyBsaWtlbHkgYmUgbW9yZSBob3Jpem9udGFsIHRoYW4gdmVydGljYWwuXG5cbiAgZmxvYXQgYiA9IHBvc2l0aXZlX2FuZ2xlKGEpO1xuXG4gIHJldHVyblxuICAgIChiIDwgKCAgICAgIHJhdGlvKSAqIEhBTEZfUEkpID8gMC4wIDpcbiAgICAoYiA8ICgyLjAgLSByYXRpbykgKiBIQUxGX1BJKSA/IC1IQUxGX1BJIDpcbiAgICAoYiA8ICgyLjAgKyByYXRpbykgKiBIQUxGX1BJKSA/IDAuMCA6XG4gICAgKGIgPCAoNC4wIC0gcmF0aW8pICogSEFMRl9QSSkgPyBIQUxGX1BJIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMDtcbn1cblxuZmxvYXQgcm91bmRUbyhmbG9hdCBhLCBmbG9hdCBiKSB7XG4gIHJldHVybiBmbG9hdChiICogZmxvb3IoKGEgKyAwLjUgKiBiKSAvIGIpKTtcbn1cblxuZmxvYXQgbG9va19yb3VuZF9uX2RpcmVjdGlvbnMoZmxvYXQgYSwgaW50IG4pIHtcbiAgZmxvYXQgYiA9IHBvc2l0aXZlX2FuZ2xlKGEpO1xuICBmbG9hdCBkaXYgPSBUV09fUEkgLyBmbG9hdChuKTtcbiAgZmxvYXQgYyA9IHJvdW5kVG8oYiwgZGl2KTtcbiAgcmV0dXJuIGxvb2tfdXB3YXJkcyhjKTtcbn1cblxuZmxvYXQgYXBwbHlBbGlnbk9wdGlvbihmbG9hdCByYXdBbmdsZSwgZmxvYXQgZGVsdGEpIHtcbiAgcmV0dXJuXG4gICAgKG9wdGlvbiA+ICAyKSA/IGxvb2tfcm91bmRfbl9kaXJlY3Rpb25zKHJhd0FuZ2xlICsgZGVsdGEsIG9wdGlvbikgOiAgICAgICAvLyBvcHRpb24gMy1uOiByb3VuZCB0byBuIGRpcmVjdGlvbnNcbiAgICAob3B0aW9uID09IDIpID8gbG9va19ob3Jpem9udGFsX29yX3ZlcnRpY2FsKHJhd0FuZ2xlICsgZGVsdGEsIGh2X3JhdGlvKSA6IC8vIGhvcml6b250YWwgb3IgdmVydGljYWxcbiAgICAob3B0aW9uID09IDEpID8gcmF3QW5nbGUgKyBkZWx0YSA6ICAgICAgIC8vIHVzZSBmcmVlIGFuZ2xlLCBhbmQgZmxpcCB0byBhbGlnbiB3aXRoIG9uZSBkaXJlY3Rpb24gb2YgdGhlIGF4aXNcbiAgICAob3B0aW9uID09IDApID8gbG9va191cHdhcmRzKHJhd0FuZ2xlKSA6IC8vIHVzZSBmcmVlIGFuZ2xlLCBhbmQgc3RheSB1cHdhcmRzXG4gICAgKG9wdGlvbiA9PS0xKSA/IDAuMCA6ICAgICAgICAgICAgICAgICAgICAvLyB1c2VmdWwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGFsbCB0ZXh0cyByZW1haW5zIGhvcml6b250YWxcbiAgICAgICAgICAgICAgICAgICAgcmF3QW5nbGU7ICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSByZXR1cm4gYmFjayByYXcgaW5wdXQgYW5nbGVcbn1cblxuYm9vbCBpc0F4aXNUaXRsZSA9IChheGlzLnggPT0gMC4wKSAmJlxuICAgICAgICAgICAgICAgICAgIChheGlzLnkgPT0gMC4wKSAmJlxuICAgICAgICAgICAgICAgICAgIChheGlzLnogPT0gMC4wKTtcblxudm9pZCBtYWluKCkge1xuICAvL0NvbXB1dGUgd29ybGQgb2Zmc2V0XG4gIGZsb2F0IGF4aXNEaXN0YW5jZSA9IHBvc2l0aW9uLno7XG4gIHZlYzMgZGF0YVBvc2l0aW9uID0gYXhpc0Rpc3RhbmNlICogYXhpcyArIG9mZnNldDtcblxuICBmbG9hdCBiZXRhID0gYW5nbGU7IC8vIGkuZS4gdXNlciBkZWZpbmVkIGF0dHJpYnV0ZXMgZm9yIGVhY2ggdGlja1xuXG4gIGZsb2F0IGF4aXNBbmdsZTtcbiAgZmxvYXQgY2xpcEFuZ2xlO1xuICBmbG9hdCBmbGlwO1xuXG4gIGlmIChlbmFibGVBbGlnbikge1xuICAgIGF4aXNBbmdsZSA9IChpc0F4aXNUaXRsZSkgPyBIQUxGX1BJIDpcbiAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlVmlld0FuZ2xlKGRhdGFQb3NpdGlvbiwgZGF0YVBvc2l0aW9uICsgYXhpcyk7XG4gICAgY2xpcEFuZ2xlID0gY29tcHV0ZVZpZXdBbmdsZShkYXRhUG9zaXRpb24sIGRhdGFQb3NpdGlvbiArIGFsaWduRGlyKTtcblxuICAgIGF4aXNBbmdsZSArPSAoc2luKGF4aXNBbmdsZSkgPCAwLjApID8gUEkgOiAwLjA7XG4gICAgY2xpcEFuZ2xlICs9IChzaW4oY2xpcEFuZ2xlKSA8IDAuMCkgPyBQSSA6IDAuMDtcblxuICAgIGZsaXAgPSAoZG90KHZlYzIoY29zKGF4aXNBbmdsZSksIHNpbihheGlzQW5nbGUpKSxcbiAgICAgICAgICAgICAgICB2ZWMyKHNpbihjbGlwQW5nbGUpLC1jb3MoY2xpcEFuZ2xlKSkpID4gMC4wKSA/IDEuMCA6IDAuMDtcblxuICAgIGJldGEgKz0gYXBwbHlBbGlnbk9wdGlvbihjbGlwQW5nbGUsIGZsaXAgKiBQSSk7XG4gIH1cblxuICAvL0NvbXB1dGUgcGxhbmUgb2Zmc2V0XG4gIHZlYzIgcGxhbmVDb29yZCA9IHBvc2l0aW9uLnh5ICogcGl4ZWxTY2FsZTtcblxuICBtYXQyIHBsYW5lWGZvcm0gPSBzY2FsZSAqIG1hdDIoXG4gICAgIGNvcyhiZXRhKSwgc2luKGJldGEpLFxuICAgIC1zaW4oYmV0YSksIGNvcyhiZXRhKVxuICApO1xuXG4gIHZlYzIgdmlld09mZnNldCA9IDIuMCAqIHBsYW5lWGZvcm0gKiBwbGFuZUNvb3JkIC8gcmVzb2x1dGlvbjtcblxuICAvL0NvbXB1dGUgY2xpcCBwb3NpdGlvblxuICB2ZWMzIGNsaXBQb3NpdGlvbiA9IHByb2plY3QoZGF0YVBvc2l0aW9uKTtcblxuICAvL0FwcGx5IHRleHQgb2Zmc2V0IGluIGNsaXAgY29vcmRpbmF0ZXNcbiAgY2xpcFBvc2l0aW9uICs9IHZlYzModmlld09mZnNldCwgMC4wKTtcblxuICAvL0RvbmVcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KGNsaXBQb3NpdGlvbiwgMS4wKTtcbn0iXSksbD1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcbn0iXSk7ci50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBpKHQscyxsLG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9XSl9O3ZhciBjPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGVuYWJsZTtcbnVuaWZvcm0gdmVjMyBib3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjMyBjb2xvckNoYW5uZWw7XG5cbnZvaWQgbWFpbigpIHtcblxuICB2ZWMzIHNpZ25BeGlzID0gc2lnbihib3VuZHNbMV0gLSBib3VuZHNbMF0pO1xuXG4gIHZlYzMgcmVhbE5vcm1hbCA9IHNpZ25BeGlzICogbm9ybWFsO1xuXG4gIGlmKGRvdChyZWFsTm9ybWFsLCBlbmFibGUpID4gMC4wKSB7XG4gICAgdmVjMyBtaW5SYW5nZSA9IG1pbihib3VuZHNbMF0sIGJvdW5kc1sxXSk7XG4gICAgdmVjMyBtYXhSYW5nZSA9IG1heChib3VuZHNbMF0sIGJvdW5kc1sxXSk7XG4gICAgdmVjMyBuUG9zaXRpb24gPSBtaXgobWluUmFuZ2UsIG1heFJhbmdlLCAwLjUgKiAocG9zaXRpb24gKyAxLjApKTtcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KG5Qb3NpdGlvbiwgMS4wKTtcbiAgfSBlbHNlIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH1cblxuICBjb2xvckNoYW5uZWwgPSBhYnMocmVhbE5vcm1hbCk7XG59Il0pLHU9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcnNbM107XG5cbnZhcnlpbmcgdmVjMyBjb2xvckNoYW5uZWw7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3JDaGFubmVsLnggKiBjb2xvcnNbMF0gK1xuICAgICAgICAgICAgICAgICBjb2xvckNoYW5uZWwueSAqIGNvbG9yc1sxXSArXG4gICAgICAgICAgICAgICAgIGNvbG9yQ2hhbm5lbC56ICogY29sb3JzWzJdO1xufSJdKTtyLmJnPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYyx1LG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifV0pfX0seyJnbC1zaGFkZXIiOjMyMyxnbHNsaWZ5OjQyNH1dLDI1NDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEscyxsKXt2YXIgdT1uKHQpLGY9aSh0LFt7YnVmZmVyOnUsc2l6ZTozfV0pLGg9byh0KTtoLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MDt2YXIgcD1uZXcgYyh0LGgsdSxmKTtyZXR1cm4gcC51cGRhdGUoZSxyLGEscyxsKSxwfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLGE9dCgidmVjdG9yaXplLXRleHQiKSxvPXQoIi4vc2hhZGVycyIpLnRleHQscz13aW5kb3d8fHIuZ2xvYmFsfHx7fSxsPXMuX19URVhUX0NBQ0hFfHx7fTtzLl9fVEVYVF9DQUNIRT17fTtmdW5jdGlvbiBjKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcj1lLHRoaXMuYnVmZmVyPXIsdGhpcy52YW89bix0aGlzLnRpY2tPZmZzZXQ9dGhpcy50aWNrQ291bnQ9dGhpcy5sYWJlbE9mZnNldD10aGlzLmxhYmVsQ291bnQ9bnVsbH12YXIgdT1jLnByb3RvdHlwZSxmPVswLDBdO3UuYmluZD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnZhby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpO3ZhciBpPXRoaXMuc2hhZGVyLnVuaWZvcm1zO2kubW9kZWw9dCxpLnZpZXc9ZSxpLnByb2plY3Rpb249cixpLnBpeGVsU2NhbGU9bixmWzBdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLGZbMV09dGhpcy5nbC5kcmF3aW5nQnVmZmVySGVpZ2h0LHRoaXMuc2hhZGVyLnVuaWZvcm1zLnJlc29sdXRpb249Zn0sdS51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLnZhby51bmJpbmQoKX0sdS51cGRhdGU9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz1bXTtmdW5jdGlvbiBzKHQsZSxyLG4saSxzKXt2YXIgYz1sW3JdO2N8fChjPWxbcl09e30pO3ZhciB1PWNbZV07dXx8KHU9Y1tlXT1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gYSh0LGUpfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLndhcm4oJ2Vycm9yIHZlY3Rvcml6aW5nIHRleHQ6IicrdCsnIiBlcnJvcjonLGUpLHtjZWxsczpbXSxwb3NpdGlvbnM6W119fX0oZSx7dHJpYW5nbGVzOiEwLGZvbnQ6cix0ZXh0QWxpZ246ImNlbnRlciIsdGV4dEJhc2VsaW5lOiJtaWRkbGUiLGxpbmVTcGFjaW5nOmksc3R5bGV0YWdzOnN9KSk7Zm9yKHZhciBmPShufHwxMikvMTIsaD11LnBvc2l0aW9ucyxwPXUuY2VsbHMsZD0wLG09cC5sZW5ndGg7ZDxtOysrZClmb3IodmFyIGc9cFtkXSx2PTI7dj49MDstLXYpe3ZhciB5PWhbZ1t2XV07by5wdXNoKGYqeVswXSwtZip5WzFdLHQpfX1mb3IodmFyIGM9WzAsMCwwXSx1PVswLDAsMF0sZj1bMCwwLDBdLGg9WzAsMCwwXSxwPXticmVha2xpbmVzOiEwLGJvbGRzOiEwLGl0YWxpY3M6ITAsc3Vic2NyaXB0czohMCxzdXBlcnNjcmlwdHM6ITB9LGQ9MDtkPDM7KytkKXtmW2RdPW8ubGVuZ3RoLzN8MCxzKC41Kih0WzBdW2RdK3RbMV1bZF0pLGVbZF0scltkXSwxMiwxLjI1LHApLGhbZF09KG8ubGVuZ3RoLzN8MCktZltkXSxjW2RdPW8ubGVuZ3RoLzN8MDtmb3IodmFyIG09MDttPG5bZF0ubGVuZ3RoOysrbSluW2RdW21dLnRleHQmJnMobltkXVttXS54LG5bZF1bbV0udGV4dCxuW2RdW21dLmZvbnR8fGksbltkXVttXS5mb250U2l6ZXx8MTIsMS4yNSxwKTt1W2RdPShvLmxlbmd0aC8zfDApLWNbZF19dGhpcy5idWZmZXIudXBkYXRlKG8pLHRoaXMudGlja09mZnNldD1jLHRoaXMudGlja0NvdW50PXUsdGhpcy5sYWJlbE9mZnNldD1mLHRoaXMubGFiZWxDb3VudD1ofSx1LmRyYXdUaWNrcz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3RoaXMudGlja0NvdW50W3RdJiYodGhpcy5zaGFkZXIudW5pZm9ybXMuYXhpcz1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy5zaGFkZXIudW5pZm9ybXMuYW5nbGU9cix0aGlzLnNoYWRlci51bmlmb3Jtcy5zY2FsZT1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1uLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFsaWduRGlyPW8sdGhpcy5zaGFkZXIudW5pZm9ybXMuYWxpZ25PcHQ9cyx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMudGlja0NvdW50W3RdLHRoaXMudGlja09mZnNldFt0XSkpfSx1LmRyYXdMYWJlbD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3RoaXMubGFiZWxDb3VudFt0XSYmKHRoaXMuc2hhZGVyLnVuaWZvcm1zLmF4aXM9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFuZ2xlPXIsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NhbGU9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9bix0aGlzLnNoYWRlci51bmlmb3Jtcy5hbGlnbkRpcj1vLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFsaWduT3B0PXMsdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyx0aGlzLmxhYmVsQ291bnRbdF0sdGhpcy5sYWJlbE9mZnNldFt0XSkpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7Ii4vc2hhZGVycyI6MjUzLF9wcm9jZXNzOjUwNCwiZ2wtYnVmZmVyIjoyNTcsImdsLXZhbyI6MzQzLCJ2ZWN0b3JpemUtdGV4dCI6NTk2fV0sMjU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10KyIiLG49ci5pbmRleE9mKCIuIiksaT0wO24+PTAmJihpPXIubGVuZ3RoLW4tMSk7dmFyIGE9TWF0aC5wb3coMTAsaSksbz1NYXRoLnJvdW5kKHQqZSphKSxzPW8rIiI7aWYocy5pbmRleE9mKCJlIik+PTApcmV0dXJuIHM7dmFyIGw9by9hLGM9byVhO288MD8obD0wfC1NYXRoLmNlaWwobCksYz0wfC1jKToobD0wfE1hdGguZmxvb3IobCksY3w9MCk7dmFyIHU9IiIrbDtpZihvPDAmJih1PSItIit1KSxpKXtmb3IodmFyIGY9IiIrYztmLmxlbmd0aDxpOylmPSIwIitmO3JldHVybiB1KyIuIitmfXJldHVybiB1fXIuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGk9MDtpPDM7KytpKXtmb3IodmFyIGE9W10sbz0odFswXVtpXSx0WzFdW2ldLDApO28qZVtpXTw9dFsxXVtpXTsrK28pYS5wdXNoKHt4Om8qZVtpXSx0ZXh0Om4oZVtpXSxvKX0pO2ZvcihvPS0xO28qZVtpXT49dFswXVtpXTstLW8pYS5wdXNoKHt4Om8qZVtpXSx0ZXh0Om4oZVtpXSxvKX0pO3IucHVzaChhKX1yZXR1cm4gcn0sci5lcXVhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8MzsrK3Ipe2lmKHRbcl0ubGVuZ3RoIT09ZVtyXS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0W3JdLmxlbmd0aDsrK24pe3ZhciBpPXRbcl1bbl0sYT1lW3JdW25dO2lmKGkueCE9PWEueHx8aS50ZXh0IT09YS50ZXh0fHxpLmZvbnQhPT1hLmZvbnR8fGkuZm9udENvbG9yIT09YS5mb250Q29sb3J8fGkuZm9udFNpemUhPT1hLmZvbnRTaXplfHxpLmR4IT09YS5keHx8aS5keSE9PWEuZHkpcmV0dXJuITF9fXJldHVybiEwfX0se31dLDI1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCxmKXt2YXIgaD1lLm1vZGVsfHxjLHA9ZS52aWV3fHxjLHY9ZS5wcm9qZWN0aW9ufHxjLHk9ZS5fb3J0aG98fCExLHg9dC5ib3VuZHMsYj0oZj1mfHxhKGgscCx2LHgseSkpLmF4aXM7byh1LHAsaCksbyh1LHYsdSk7Zm9yKHZhciBfPW0sdz0wO3c8MzsrK3cpX1t3XS5sbz0xLzAsX1t3XS5oaT0tMS8wLF9bd10ucGl4ZWxzUGVyRGF0YVVuaXQ9MS8wO3ZhciBUPW4ocyh1LHUpKTtzKHUsdSk7Zm9yKHZhciBrPTA7azwzOysrayl7dmFyIEE9KGsrMSklMyxNPShrKzIpJTMsUz1nO3Q6Zm9yKHc9MDt3PDI7Kyt3KXt2YXIgRT1bXTtpZihiW2tdPDAhPSEhdyl7U1trXT14W3ddW2tdO2Zvcih2YXIgTD0wO0w8MjsrK0wpe1NbQV09eFtMXnddW0FdO2Zvcih2YXIgQz0wO0M8MjsrK0MpU1tNXT14W0NeTF53XVtNXSxFLnB1c2goUy5zbGljZSgpKX12YXIgUD15PzU6NDtmb3IoTD1QO0w9PT1QOysrTCl7aWYoMD09PUUubGVuZ3RoKWNvbnRpbnVlIHQ7RT1pLnBvc2l0aXZlKEUsVFtMXSl9Zm9yKEw9MDtMPEUubGVuZ3RoOysrTCl7TT1FW0xdO3ZhciBJPWQoZyx1LE0scixsKTtmb3IoQz0wO0M8MzsrK0MpX1tDXS5sbz1NYXRoLm1pbihfW0NdLmxvLE1bQ10pLF9bQ10uaGk9TWF0aC5tYXgoX1tDXS5oaSxNW0NdKSxDIT09ayYmKF9bQ10ucGl4ZWxzUGVyRGF0YVVuaXQ9TWF0aC5taW4oX1tDXS5waXhlbHNQZXJEYXRhVW5pdCxNYXRoLmFicyhJW0NdKSkpfX19fXJldHVybiBffTt2YXIgbj10KCJleHRyYWN0LWZydXN0dW0tcGxhbmVzIiksaT10KCJzcGxpdC1wb2x5Z29uIiksYT10KCIuL2xpYi9jdWJlLmpzIiksbz10KCJnbC1tYXQ0L211bHRpcGx5Iikscz10KCJnbC1tYXQ0L3RyYW5zcG9zZSIpLGw9dCgiZ2wtdmVjNC90cmFuc2Zvcm1NYXQ0IiksYz1uZXcgRmxvYXQzMkFycmF5KFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSksdT1uZXcgRmxvYXQzMkFycmF5KDE2KTtmdW5jdGlvbiBmKHQsZSxyKXt0aGlzLmxvPXQsdGhpcy5oaT1lLHRoaXMucGl4ZWxzUGVyRGF0YVVuaXQ9cn12YXIgaD1bMCwwLDAsMV0scD1bMCwwLDAsMV07ZnVuY3Rpb24gZCh0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8MzsrK2Epe2Zvcih2YXIgbz1oLHM9cCxjPTA7YzwzOysrYylzW2NdPW9bY109cltjXTtzWzNdPW9bM109MSxzW2FdKz0xLGwocyxzLGUpLHNbM108MCYmKHRbYV09MS8wKSxvW2FdLT0xLGwobyxvLGUpLG9bM108MCYmKHRbYV09MS8wKTt2YXIgdT0ob1swXS9vWzNdLXNbMF0vc1szXSkqbixmPShvWzFdL29bM10tc1sxXS9zWzNdKSppO3RbYV09LjI1Kk1hdGguc3FydCh1KnUrZipmKX1yZXR1cm4gdH12YXIgbT1bbmV3IGYoMS8wLC0xLzAsMS8wKSxuZXcgZigxLzAsLTEvMCwxLzApLG5ldyBmKDEvMCwtMS8wLDEvMCldLGc9WzAsMCwwXX0seyIuL2xpYi9jdWJlLmpzIjoyNTEsImV4dHJhY3QtZnJ1c3R1bS1wbGFuZXMiOjI0MSwiZ2wtbWF0NC9tdWx0aXBseSI6Mjg5LCJnbC1tYXQ0L3RyYW5zcG9zZSI6MzAwLCJnbC12ZWM0L3RyYW5zZm9ybU1hdDQiOjQxNCwic3BsaXQtcG9seWdvbiI6NTQxfV0sMjU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9dCgibmRhcnJheS1vcHMiKSxhPXQoIm5kYXJyYXkiKSxvPVsidWludDgiLCJ1aW50OF9jbGFtcGVkIiwidWludDE2IiwidWludDMyIiwiaW50OCIsImludDE2IiwiaW50MzIiLCJmbG9hdDMyIl07ZnVuY3Rpb24gcyh0LGUscixuLGkpe3RoaXMuZ2w9dCx0aGlzLnR5cGU9ZSx0aGlzLmhhbmRsZT1yLHRoaXMubGVuZ3RoPW4sdGhpcy51c2FnZT1pfXZhciBsPXMucHJvdG90eXBlO2Z1bmN0aW9uIGModCxlLHIsbixpLGEpe3ZhciBvPWkubGVuZ3RoKmkuQllURVNfUEVSX0VMRU1FTlQ7aWYoYTwwKXJldHVybiB0LmJ1ZmZlckRhdGEoZSxpLG4pLG87aWYobythPnIpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IElmIHJlc2l6aW5nIGJ1ZmZlciwgbXVzdCBub3Qgc3BlY2lmeSBvZmZzZXQiKTtyZXR1cm4gdC5idWZmZXJTdWJEYXRhKGUsYSxpKSxyfWZ1bmN0aW9uIHUodCxlKXtmb3IodmFyIHI9bi5tYWxsb2ModC5sZW5ndGgsZSksaT10Lmxlbmd0aCxhPTA7YTxpOysrYSlyW2FdPXRbYV07cmV0dXJuIHJ9bC5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5nbC5iaW5kQnVmZmVyKHRoaXMudHlwZSx0aGlzLmhhbmRsZSl9LGwudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5nbC5iaW5kQnVmZmVyKHRoaXMudHlwZSxudWxsKX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5oYW5kbGUpfSxsLnVwZGF0ZT1mdW5jdGlvbih0LGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSYmKGU9LTEpLHRoaXMuYmluZCgpLCJvYmplY3QiPT10eXBlb2YgdCYmdm9pZCAwIT09dC5zaGFwZSl7dmFyIHI9dC5kdHlwZTtpZihvLmluZGV4T2Yocik8MCYmKHI9ImZsb2F0MzIiKSx0aGlzLnR5cGU9PT10aGlzLmdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSKXI9Z2wuZ2V0RXh0ZW5zaW9uKCJPRVNfZWxlbWVudF9pbmRleF91aW50IikmJiJ1aW50MTYiIT09cj8idWludDMyIjoidWludDE2IjtpZihyPT09dC5kdHlwZSYmZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MSxuPWUubGVuZ3RoLTE7bj49MDstLW4pe2lmKGVbbl0hPT1yKXJldHVybiExO3IqPXRbbl19cmV0dXJuITB9KHQuc2hhcGUsdC5zdHJpZGUpKTA9PT10Lm9mZnNldCYmdC5kYXRhLmxlbmd0aD09PXQuc2hhcGVbMF0/dGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLHQuZGF0YSxlKTp0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsdC5kYXRhLnN1YmFycmF5KHQub2Zmc2V0LHQuc2hhcGVbMF0pLGUpO2Vsc2V7dmFyIHM9bi5tYWxsb2ModC5zaXplLHIpLGw9YShzLHQuc2hhcGUpO2kuYXNzaWduKGwsdCksdGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLGU8MD9zOnMuc3ViYXJyYXkoMCx0LnNpemUpLGUpLG4uZnJlZShzKX19ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgZjtmPXRoaXMudHlwZT09PXRoaXMuZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVI/dSh0LCJ1aW50MTYiKTp1KHQsImZsb2F0MzIiKSx0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsZTwwP2Y6Zi5zdWJhcnJheSgwLHQubGVuZ3RoKSxlKSxuLmZyZWUoZil9ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpdGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLHQsZSk7ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIHQmJnZvaWQgMCE9PXQpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IEludmFsaWQgZGF0YSB0eXBlIik7aWYoZT49MCl0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogQ2Fubm90IHNwZWNpZnkgb2Zmc2V0IHdoZW4gcmVzaXppbmcgYnVmZmVyIik7KHR8PTApPD0wJiYodD0xKSx0aGlzLmdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLDB8dCx0aGlzLnVzYWdlKSx0aGlzLmxlbmd0aD10fX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHI9cnx8dC5BUlJBWV9CVUZGRVIsbj1ufHx0LkRZTkFNSUNfRFJBVyxyIT09dC5BUlJBWV9CVUZGRVImJnIhPT10LkVMRU1FTlRfQVJSQVlfQlVGRkVSKXRocm93IG5ldyBFcnJvcigiZ2wtYnVmZmVyOiBJbnZhbGlkIHR5cGUgZm9yIHdlYmdsIGJ1ZmZlciwgbXVzdCBiZSBlaXRoZXIgZ2wuQVJSQVlfQlVGRkVSIG9yIGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSIik7aWYobiE9PXQuRFlOQU1JQ19EUkFXJiZuIT09dC5TVEFUSUNfRFJBVyYmbiE9PXQuU1RSRUFNX0RSQVcpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IEludmFsaWQgdXNhZ2UgZm9yIGJ1ZmZlciwgbXVzdCBiZSBlaXRoZXIgZ2wuRFlOQU1JQ19EUkFXLCBnbC5TVEFUSUNfRFJBVyBvciBnbC5TVFJFQU1fRFJBVyIpO3ZhciBpPXQuY3JlYXRlQnVmZmVyKCksYT1uZXcgcyh0LHIsaSwwLG4pO3JldHVybiBhLnVwZGF0ZShlKSxhfX0se25kYXJyYXk6NDYyLCJuZGFycmF5LW9wcyI6NDU3LCJ0eXBlZGFycmF5LXBvb2wiOjU5MH1dLDI1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC12ZWMzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5wb3NpdGlvbnMsaT10LnZlY3RvcnMsYT17cG9zaXRpb25zOltdLHZlcnRleEludGVuc2l0eTpbXSx2ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM6dC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHMsdmVjdG9yczpbXSxjZWxsczpbXSxjb25lT2Zmc2V0OnQuY29uZU9mZnNldCxjb2xvcm1hcDp0LmNvbG9ybWFwfTtpZigwPT09dC5wb3NpdGlvbnMubGVuZ3RoKXJldHVybiBlJiYoZVswXT1bMCwwLDBdLGVbMV09WzAsMCwwXSksYTtmb3IodmFyIG89MCxzPTEvMCxsPS0xLzAsYz0xLzAsdT0tMS8wLGY9MS8wLGg9LTEvMCxwPW51bGwsZD1udWxsLG09W10sZz0xLzAsdj0hMSx5PTA7eTxyLmxlbmd0aDt5Kyspe3ZhciB4PXJbeV07cz1NYXRoLm1pbih4WzBdLHMpLGw9TWF0aC5tYXgoeFswXSxsKSxjPU1hdGgubWluKHhbMV0sYyksdT1NYXRoLm1heCh4WzFdLHUpLGY9TWF0aC5taW4oeFsyXSxmKSxoPU1hdGgubWF4KHhbMl0saCk7dmFyIGI9aVt5XTtpZihuLmxlbmd0aChiKT5vJiYobz1uLmxlbmd0aChiKSkseSl7dmFyIF89MipuLmRpc3RhbmNlKHAseCkvKG4ubGVuZ3RoKGQpK24ubGVuZ3RoKGIpKTtfPyhnPU1hdGgubWluKGcsXyksdj0hMSk6dj0hMH12fHwocD14LGQ9YiksbS5wdXNoKGIpfXZhciB3PVtzLGMsZl0sVD1bbCx1LGhdO2UmJihlWzBdPXcsZVsxXT1UKSwwPT09byYmKG89MSk7dmFyIGs9MS9vO2lzRmluaXRlKGcpfHwoZz0xKSxhLnZlY3RvclNjYWxlPWc7dmFyIEE9dC5jb25lU2l6ZXx8LjU7dC5hYnNvbHV0ZUNvbmVTaXplJiYoQT10LmFic29sdXRlQ29uZVNpemUqayksYS5jb25lU2NhbGU9QTt5PTA7Zm9yKHZhciBNPTA7eTxyLmxlbmd0aDt5KyspZm9yKHZhciBTPSh4PXJbeV0pWzBdLEU9eFsxXSxMPXhbMl0sQz1tW3ldLFA9bi5sZW5ndGgoQykqayxJPTA7STw4O0krKyl7YS5wb3NpdGlvbnMucHVzaChbUyxFLEwsTSsrXSksYS5wb3NpdGlvbnMucHVzaChbUyxFLEwsTSsrXSksYS5wb3NpdGlvbnMucHVzaChbUyxFLEwsTSsrXSksYS5wb3NpdGlvbnMucHVzaChbUyxFLEwsTSsrXSksYS5wb3NpdGlvbnMucHVzaChbUyxFLEwsTSsrXSksYS5wb3NpdGlvbnMucHVzaChbUyxFLEwsTSsrXSksYS52ZWN0b3JzLnB1c2goQyksYS52ZWN0b3JzLnB1c2goQyksYS52ZWN0b3JzLnB1c2goQyksYS52ZWN0b3JzLnB1c2goQyksYS52ZWN0b3JzLnB1c2goQyksYS52ZWN0b3JzLnB1c2goQyksYS52ZXJ0ZXhJbnRlbnNpdHkucHVzaChQLFAsUCksYS52ZXJ0ZXhJbnRlbnNpdHkucHVzaChQLFAsUCk7dmFyIE89YS5wb3NpdGlvbnMubGVuZ3RoO2EuY2VsbHMucHVzaChbTy02LE8tNSxPLTRdLFtPLTMsTy0yLE8tMV0pfXJldHVybiBhfTt2YXIgaT10KCIuL2xpYi9zaGFkZXJzIik7ZS5leHBvcnRzLmNyZWF0ZU1lc2g9dCgiLi9jcmVhdGVfbWVzaCIpLGUuZXhwb3J0cy5jcmVhdGVDb25lTWVzaD1mdW5jdGlvbih0LHIpe3JldHVybiBlLmV4cG9ydHMuY3JlYXRlTWVzaCh0LHIse3NoYWRlcnM6aSx0cmFjZVR5cGU6ImNvbmUifSl9fSx7Ii4vY3JlYXRlX21lc2giOjI1OSwiLi9saWIvc2hhZGVycyI6MjYwLCJnbC12ZWMzIjozNjJ9XSwyNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbC1idWZmZXIiKSxhPXQoImdsLXZhbyIpLG89dCgiZ2wtdGV4dHVyZTJkIikscz10KCJnbC1tYXQ0L211bHRpcGx5IiksbD10KCJnbC1tYXQ0L2ludmVydCIpLGM9dCgibmRhcnJheSIpLHU9dCgiY29sb3JtYXAiKSxmPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBoKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuY2VsbHM9W10sdGhpcy5wb3NpdGlvbnM9W10sdGhpcy5pbnRlbnNpdHk9W10sdGhpcy50ZXh0dXJlPWUsdGhpcy5kaXJ0eT0hMCx0aGlzLnRyaVNoYWRlcj1yLHRoaXMucGlja1NoYWRlcj1uLHRoaXMudHJpYW5nbGVQb3NpdGlvbnM9aSx0aGlzLnRyaWFuZ2xlVmVjdG9ycz1hLHRoaXMudHJpYW5nbGVDb2xvcnM9cyx0aGlzLnRyaWFuZ2xlVVZzPWwsdGhpcy50cmlhbmdsZUlkcz1vLHRoaXMudHJpYW5nbGVWQU89Yyx0aGlzLnRyaWFuZ2xlQ291bnQ9MCx0aGlzLnBpY2tJZD0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpZ2h0UG9zaXRpb249WzFlNSwxZTUsMF0sdGhpcy5hbWJpZW50TGlnaHQ9LjgsdGhpcy5kaWZmdXNlTGlnaHQ9LjgsdGhpcy5zcGVjdWxhckxpZ2h0PTIsdGhpcy5yb3VnaG5lc3M9LjUsdGhpcy5mcmVzbmVsPTEuNSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYWNlVHlwZT11LHRoaXMudHViZVNjYWxlPTEsdGhpcy5jb25lU2NhbGU9Mix0aGlzLnZlY3RvclNjYWxlPTEsdGhpcy5jb25lT2Zmc2V0PS4yNSx0aGlzLl9tb2RlbD1mLHRoaXMuX3ZpZXc9Zix0aGlzLl9wcm9qZWN0aW9uPWYsdGhpcy5fcmVzb2x1dGlvbj1bMSwxXX12YXIgcD1oLnByb3RvdHlwZTtmdW5jdGlvbiBkKHQsZSl7dmFyIHI9bih0LGUubWVzaFNoYWRlci52ZXJ0ZXgsZS5tZXNoU2hhZGVyLmZyYWdtZW50LG51bGwsZS5tZXNoU2hhZGVyLmF0dHJpYnV0ZXMpO3JldHVybiByLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxyLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixyLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxyLmF0dHJpYnV0ZXMudmVjdG9yLmxvY2F0aW9uPTQscn1mdW5jdGlvbiBtKHQsZSl7dmFyIHI9bih0LGUucGlja1NoYWRlci52ZXJ0ZXgsZS5waWNrU2hhZGVyLmZyYWdtZW50LG51bGwsZS5waWNrU2hhZGVyLmF0dHJpYnV0ZXMpO3JldHVybiByLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxyLmF0dHJpYnV0ZXMuaWQubG9jYXRpb249MSxyLmF0dHJpYnV0ZXMudmVjdG9yLmxvY2F0aW9uPTQscn1wLmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BhY2l0eT49MX0scC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BhY2l0eTwxfSxwLnBpY2tTbG90cz0xLHAuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0scC51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLmdsO3RoaXMuZGlydHk9ITAsImxpZ2h0UG9zaXRpb24iaW4gdCYmKHRoaXMubGlnaHRQb3NpdGlvbj10LmxpZ2h0UG9zaXRpb24pLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5KSwiYW1iaWVudCJpbiB0JiYodGhpcy5hbWJpZW50TGlnaHQ9dC5hbWJpZW50KSwiZGlmZnVzZSJpbiB0JiYodGhpcy5kaWZmdXNlTGlnaHQ9dC5kaWZmdXNlKSwic3BlY3VsYXIiaW4gdCYmKHRoaXMuc3BlY3VsYXJMaWdodD10LnNwZWN1bGFyKSwicm91Z2huZXNzImluIHQmJih0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyksImZyZXNuZWwiaW4gdCYmKHRoaXMuZnJlc25lbD10LmZyZXNuZWwpLHZvaWQgMCE9PXQudHViZVNjYWxlJiYodGhpcy50dWJlU2NhbGU9dC50dWJlU2NhbGUpLHZvaWQgMCE9PXQudmVjdG9yU2NhbGUmJih0aGlzLnZlY3RvclNjYWxlPXQudmVjdG9yU2NhbGUpLHZvaWQgMCE9PXQuY29uZVNjYWxlJiYodGhpcy5jb25lU2NhbGU9dC5jb25lU2NhbGUpLHZvaWQgMCE9PXQuY29uZU9mZnNldCYmKHRoaXMuY29uZU9mZnNldD10LmNvbmVPZmZzZXQpLHQuY29sb3JtYXAmJih0aGlzLnRleHR1cmUuc2hhcGU9WzI1NiwyNTZdLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5MSU5FQVJfTUlQTUFQX0xJTkVBUix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUuTElORUFSLHRoaXMudGV4dHVyZS5zZXRQaXhlbHMoZnVuY3Rpb24odCl7Zm9yKHZhciBlPXUoe2NvbG9ybWFwOnQsbnNoYWRlczoyNTYsZm9ybWF0OiJyZ2JhIn0pLHI9bmV3IFVpbnQ4QXJyYXkoMTAyNCksbj0wO248MjU2Oysrbil7Zm9yKHZhciBpPWVbbl0sYT0wO2E8MzsrK2Epcls0Km4rYV09aVthXTtyWzQqbiszXT0yNTUqaVszXX1yZXR1cm4gYyhyLFsyNTYsMjU2LDRdLFs0LDAsMV0pfSh0LmNvbG9ybWFwKSksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwKCkpO3ZhciByPXQuY2VsbHMsbj10LnBvc2l0aW9ucyxpPXQudmVjdG9ycztpZihuJiZyJiZpKXt2YXIgYT1bXSxvPVtdLHM9W10sbD1bXSxmPVtdO3RoaXMuY2VsbHM9cix0aGlzLnBvc2l0aW9ucz1uLHRoaXMudmVjdG9ycz1pO3ZhciBoPXQubWVzaENvbG9yfHxbMSwxLDEsMV0scD10LnZlcnRleEludGVuc2l0eSxkPTEvMCxtPS0xLzA7aWYocClpZih0LnZlcnRleEludGVuc2l0eUJvdW5kcylkPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1swXSxtPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1sxXTtlbHNlIGZvcih2YXIgZz0wO2c8cC5sZW5ndGg7KytnKXt2YXIgdj1wW2ddO2Q9TWF0aC5taW4oZCx2KSxtPU1hdGgubWF4KG0sdil9ZWxzZSBmb3IoZz0wO2c8bi5sZW5ndGg7KytnKXt2PW5bZ11bMl07ZD1NYXRoLm1pbihkLHYpLG09TWF0aC5tYXgobSx2KX10aGlzLmludGVuc2l0eT1wfHxmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10W25dWzJdO3JldHVybiByfShuKSx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXTtmb3IoZz0wO2c8bi5sZW5ndGg7KytnKWZvcih2YXIgeT1uW2ddLHg9MDt4PDM7Kyt4KSFpc05hTih5W3hdKSYmaXNGaW5pdGUoeVt4XSkmJih0aGlzLmJvdW5kc1swXVt4XT1NYXRoLm1pbih0aGlzLmJvdW5kc1swXVt4XSx5W3hdKSx0aGlzLmJvdW5kc1sxXVt4XT1NYXRoLm1heCh0aGlzLmJvdW5kc1sxXVt4XSx5W3hdKSk7dmFyIGI9MDt0OmZvcihnPTA7ZzxyLmxlbmd0aDsrK2cpe3ZhciBfPXJbZ107c3dpdGNoKF8ubGVuZ3RoKXtjYXNlIDM6Zm9yKHg9MDt4PDM7Kyt4KXt5PW5bVD1fW3hdXTtmb3IodmFyIHc9MDt3PDM7Kyt3KWlmKGlzTmFOKHlbd10pfHwhaXNGaW5pdGUoeVt3XSkpY29udGludWUgdH1mb3IoeD0wO3g8MzsrK3gpe3ZhciBUO3k9bltUPV9bMi14XV07YS5wdXNoKHlbMF0seVsxXSx5WzJdLHlbM10pO3ZhciBrPWlbVF07by5wdXNoKGtbMF0sa1sxXSxrWzJdLGtbM118fDApO3ZhciBBLE09aDszPT09TS5sZW5ndGg/cy5wdXNoKE1bMF0sTVsxXSxNWzJdLDEpOnMucHVzaChNWzBdLE1bMV0sTVsyXSxNWzNdKSxBPXA/WyhwW1RdLWQpLyhtLWQpLDBdOlsoeVsyXS1kKS8obS1kKSwwXSxsLnB1c2goQVswXSxBWzFdKSxmLnB1c2goZyl9Yis9MX19dGhpcy50cmlhbmdsZUNvdW50PWIsdGhpcy50cmlhbmdsZVBvc2l0aW9ucy51cGRhdGUoYSksdGhpcy50cmlhbmdsZVZlY3RvcnMudXBkYXRlKG8pLHRoaXMudHJpYW5nbGVDb2xvcnMudXBkYXRlKHMpLHRoaXMudHJpYW5nbGVVVnMudXBkYXRlKGwpLHRoaXMudHJpYW5nbGVJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShmKSl9fSxwLmRyYXdUcmFuc3BhcmVudD1wLmRyYXc9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fGYsbj10LnZpZXd8fGYsaT10LnByb2plY3Rpb258fGYsYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt2YXIgYz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGludmVyc2VNb2RlbDpmLnNsaWNlKCksY2xpcEJvdW5kczphLGthbWJpZW50OnRoaXMuYW1iaWVudExpZ2h0LGtkaWZmdXNlOnRoaXMuZGlmZnVzZUxpZ2h0LGtzcGVjdWxhcjp0aGlzLnNwZWN1bGFyTGlnaHQscm91Z2huZXNzOnRoaXMucm91Z2huZXNzLGZyZXNuZWw6dGhpcy5mcmVzbmVsLGV5ZVBvc2l0aW9uOlswLDAsMF0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LHR1YmVTY2FsZTp0aGlzLnR1YmVTY2FsZSx2ZWN0b3JTY2FsZTp0aGlzLnZlY3RvclNjYWxlLGNvbmVTY2FsZTp0aGlzLmNvbmVTY2FsZSxjb25lT2Zmc2V0OnRoaXMuY29uZU9mZnNldCx0ZXh0dXJlOjB9O2MuaW52ZXJzZU1vZGVsPWwoYy5pbnZlcnNlTW9kZWwsYy5tb2RlbCksZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKSx0aGlzLnRleHR1cmUuYmluZCgwKTt2YXIgdT1uZXcgQXJyYXkoMTYpO3ModSxjLnZpZXcsYy5tb2RlbCkscyh1LGMucHJvamVjdGlvbix1KSxsKHUsdSk7Zm9yKG89MDtvPDM7KytvKWMuZXllUG9zaXRpb25bb109dVsxMitvXS91WzE1XTt2YXIgaD11WzE1XTtmb3Iobz0wO288MzsrK28paCs9dGhpcy5saWdodFBvc2l0aW9uW29dKnVbNCpvKzNdO2ZvcihvPTA7bzwzOysrbyl7Zm9yKHZhciBwPXVbMTIrb10sZD0wO2Q8MzsrK2QpcCs9dVs0KmQrb10qdGhpcy5saWdodFBvc2l0aW9uW2RdO2MubGlnaHRQb3NpdGlvbltvXT1wL2h9aWYodGhpcy50cmlhbmdsZUNvdW50PjApe3ZhciBtPXRoaXMudHJpU2hhZGVyO20uYmluZCgpLG0udW5pZm9ybXM9Yyx0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKX19LHAuZHJhd1BpY2s9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fGYsbj10LnZpZXd8fGYsaT10LnByb2plY3Rpb258fGYsYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt0aGlzLl9tb2RlbD1bXS5zbGljZS5jYWxsKHIpLHRoaXMuX3ZpZXc9W10uc2xpY2UuY2FsbChuKSx0aGlzLl9wcm9qZWN0aW9uPVtdLnNsaWNlLmNhbGwoaSksdGhpcy5fcmVzb2x1dGlvbj1bZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGNsaXBCb3VuZHM6YSx0dWJlU2NhbGU6dGhpcy50dWJlU2NhbGUsdmVjdG9yU2NhbGU6dGhpcy52ZWN0b3JTY2FsZSxjb25lU2NhbGU6dGhpcy5jb25lU2NhbGUsY29uZU9mZnNldDp0aGlzLmNvbmVPZmZzZXQscGlja0lkOnRoaXMucGlja0lkLzI1NX0sbD10aGlzLnBpY2tTaGFkZXI7bC5iaW5kKCksbC51bmlmb3Jtcz1zLHRoaXMudHJpYW5nbGVDb3VudD4wJiYodGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCkpfSxwLnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPXQudmFsdWVbMF0rMjU2KnQudmFsdWVbMV0rNjU1MzYqdC52YWx1ZVsyXSxyPXRoaXMuY2VsbHNbZV0sbj10aGlzLnBvc2l0aW9uc1tyWzFdXS5zbGljZSgwLDMpLGk9e3Bvc2l0aW9uOm4sZGF0YUNvb3JkaW5hdGU6bixpbmRleDpNYXRoLmZsb29yKHJbMV0vNDgpfTtyZXR1cm4iY29uZSI9PT10aGlzLnRyYWNlVHlwZT9pLmluZGV4PU1hdGguZmxvb3IoclsxXS80OCk6InN0cmVhbXR1YmUiPT09dGhpcy50cmFjZVR5cGUmJihpLmludGVuc2l0eT10aGlzLmludGVuc2l0eVtyWzFdXSxpLnZlbG9jaXR5PXRoaXMudmVjdG9yc1tyWzFdXS5zbGljZSgwLDMpLGkuZGl2ZXJnZW5jZT10aGlzLnZlY3RvcnNbclsxXV1bM10saS5pbmRleD1lKSxpfSxwLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudHJpU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVWQU8uZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVWZWN0b3JzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVVZzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlSWRzLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLnNoYWRlcnM7MT09PWFyZ3VtZW50cy5sZW5ndGgmJih0PShlPXQpLmdsKTt2YXIgcz1kKHQsbiksbD1tKHQsbiksdT1vKHQsYyhuZXcgVWludDhBcnJheShbMjU1LDI1NSwyNTUsMjU1XSksWzEsMSw0XSkpO3UuZ2VuZXJhdGVNaXBtYXAoKSx1Lm1pbkZpbHRlcj10LkxJTkVBUl9NSVBNQVBfTElORUFSLHUubWFnRmlsdGVyPXQuTElORUFSO3ZhciBmPWkodCkscD1pKHQpLGc9aSh0KSx2PWkodCkseT1pKHQpLHg9YSh0LFt7YnVmZmVyOmYsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjp5LHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOmcsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjp2LHR5cGU6dC5GTE9BVCxzaXplOjJ9LHtidWZmZXI6cCx0eXBlOnQuRkxPQVQsc2l6ZTo0fV0pLGI9bmV3IGgodCx1LHMsbCxmLHAseSxnLHYseCxyLnRyYWNlVHlwZXx8ImNvbmUiKTtyZXR1cm4gYi51cGRhdGUoZSksYn19LHtjb2xvcm1hcDoxMzIsImdsLWJ1ZmZlciI6MjU3LCJnbC1tYXQ0L2ludmVydCI6Mjg3LCJnbC1tYXQ0L211bHRpcGx5IjoyODksImdsLXNoYWRlciI6MzIzLCJnbC10ZXh0dXJlMmQiOjMzOCwiZ2wtdmFvIjozNDMsbmRhcnJheTo0NjJ9XSwyNjA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5IiksaT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XG4gIC8vIFJldHVybiB1cC12ZWN0b3IgZm9yIG9ubHkteiB2ZWN0b3IuXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cbiAgLy8gQXNzaWduIHogPSAwLCB4ID0gLWIsIHkgPSBhOlxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoLXYueSwgdi54LCAwLjApKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcbiAgfVxufVxuXG4vLyBDYWxjdWxhdGUgdGhlIGNvbmUgdmVydGV4IGFuZCBub3JtYWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuLy9cbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgY29uZSB3aXRoIGl0cyB0b3AgYXQgb3JpZ2luIGFuZCBoZWlnaHQgb2YgMS4wLFxuLy8gcG9pbnRpbmcgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgdmVjdG9yIGF0dHJpYnV0ZS5cbi8vXG4vLyBFYWNoIGNvbmUgaXMgbWFkZSB1cCBvZiBhIHRvcCB2ZXJ0ZXgsIGEgY2VudGVyIGJhc2UgdmVydGV4IGFuZCBiYXNlIHBlcmltZXRlciB2ZXJ0aWNlcy5cbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgY29uZSBieSB0aGUgZm9sbG93aW5nOlxuLy8gICBzZWdtZW50ICsgMCB0b3AgdmVydGV4XG4vLyAgIHNlZ21lbnQgKyAxIHBlcmltZXRlciB2ZXJ0ZXggYSsxXG4vLyAgIHNlZ21lbnQgKyAyIHBlcmltZXRlciB2ZXJ0ZXggYVxuLy8gICBzZWdtZW50ICsgMyBjZW50ZXIgYmFzZSB2ZXJ0ZXhcbi8vICAgc2VnbWVudCArIDQgcGVyaW1ldGVyIHZlcnRleCBhXG4vLyAgIHNlZ21lbnQgKyA1IHBlcmltZXRlciB2ZXJ0ZXggYSsxXG4vLyBXaGVyZSBzZWdtZW50IGlzIHRoZSBudW1iZXIgb2YgdGhlIHJhZGlhbCBzZWdtZW50ICogNiBhbmQgYSBpcyB0aGUgYW5nbGUgYXQgdGhhdCByYWRpYWwgc2VnbWVudC5cbi8vIFRvIGdvIGZyb20gaW5kZXggdG8gc2VnbWVudCwgZmxvb3IoaW5kZXggLyA2KVxuLy8gVG8gZ28gZnJvbSBzZWdtZW50IHRvIGFuZ2xlLCAyKnBpICogKHNlZ21lbnQvc2VnbWVudENvdW50KVxuLy8gVG8gZ28gZnJvbSBpbmRleCB0byBzZWdtZW50IGluZGV4LCBpbmRleCAtIChzZWdtZW50KjYpXG4vL1xudmVjMyBnZXRDb25lUG9zaXRpb24odmVjMyBkLCBmbG9hdCByYXdJbmRleCwgZmxvYXQgY29uZU9mZnNldCwgb3V0IHZlYzMgbm9ybWFsKSB7XG5cbiAgY29uc3QgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xuXG4gIGZsb2F0IGluZGV4ID0gcmF3SW5kZXggLSBmbG9vcihyYXdJbmRleCAvXG4gICAgKHNlZ21lbnRDb3VudCAqIDYuMCkpICpcbiAgICAoc2VnbWVudENvdW50ICogNi4wKTtcblxuICBmbG9hdCBzZWdtZW50ID0gZmxvb3IoMC4wMDEgKyBpbmRleC82LjApO1xuICBmbG9hdCBzZWdtZW50SW5kZXggPSBpbmRleCAtIChzZWdtZW50KjYuMCk7XG5cbiAgbm9ybWFsID0gLW5vcm1hbGl6ZShkKTtcblxuICBpZiAoc2VnbWVudEluZGV4ID4gMi45OSAmJiBzZWdtZW50SW5kZXggPCAzLjAxKSB7XG4gICAgcmV0dXJuIG1peCh2ZWMzKDAuMCksIC1kLCBjb25lT2Zmc2V0KTtcbiAgfVxuXG4gIGZsb2F0IG5leHRBbmdsZSA9IChcbiAgICAoc2VnbWVudEluZGV4ID4gMC45OSAmJiAgc2VnbWVudEluZGV4IDwgMS4wMSkgfHxcbiAgICAoc2VnbWVudEluZGV4ID4gNC45OSAmJiAgc2VnbWVudEluZGV4IDwgNS4wMSlcbiAgKSA/IDEuMCA6IDAuMDtcbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKChzZWdtZW50ICsgbmV4dEFuZ2xlKSAvIHNlZ21lbnRDb3VudCk7XG5cbiAgdmVjMyB2MSA9IG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xuICB2ZWMzIHYyID0gdjEgLSBkO1xuXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XG4gIHZlYzMgdiA9IG5vcm1hbGl6ZShjcm9zcyh1LCBkKSk7XG5cbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcbiAgdmVjMyB5ID0gdiAqIHNpbihhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcbiAgdmVjMyB2MyA9IHYyICsgeCArIHk7XG4gIGlmIChzZWdtZW50SW5kZXggPCAzLjApIHtcbiAgICB2ZWMzIHR4ID0gdSAqIHNpbihhbmdsZSk7XG4gICAgdmVjMyB0eSA9IHYgKiAtY29zKGFuZ2xlKTtcbiAgICB2ZWMzIHRhbmdlbnQgPSB0eCArIHR5O1xuICAgIG5vcm1hbCA9IG5vcm1hbGl6ZShjcm9zcyh2MyAtIHYxLCB0YW5nZW50KSk7XG4gIH1cblxuICBpZiAoc2VnbWVudEluZGV4ID09IDAuMCkge1xuICAgIHJldHVybiBtaXgoZCwgdmVjMygwLjApLCBjb25lT2Zmc2V0KTtcbiAgfVxuICByZXR1cm4gdjM7XG59XG5cbmF0dHJpYnV0ZSB2ZWMzIHZlY3RvcjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yLCBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIGZsb2F0IHZlY3RvclNjYWxlLCBjb25lU2NhbGUsIGNvbmVPZmZzZXQ7XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb24sIGludmVyc2VNb2RlbDtcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvbiwgbGlnaHRQb3NpdGlvbjtcblxudmFyeWluZyB2ZWMzIGZfbm9ybWFsLCBmX2xpZ2h0RGlyZWN0aW9uLCBmX2V5ZURpcmVjdGlvbiwgZl9kYXRhLCBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICAvLyBTY2FsZSB0aGUgdmVjdG9yIG1hZ25pdHVkZSB0byBzdGF5IGNvbnN0YW50IHdpdGhcbiAgLy8gbW9kZWwgJiB2aWV3IGNoYW5nZXMuXG4gIHZlYzMgbm9ybWFsO1xuICB2ZWMzIFhZWiA9IGdldENvbmVQb3NpdGlvbihtYXQzKG1vZGVsKSAqICgodmVjdG9yU2NhbGUgKiBjb25lU2NhbGUpICogdmVjdG9yKSwgcG9zaXRpb24udywgY29uZU9mZnNldCwgbm9ybWFsKTtcbiAgdmVjNCBjb25lUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24ueHl6LCAxLjApICsgdmVjNChYWVosIDAuMCk7XG5cbiAgLy9MaWdodGluZyBnZW9tZXRyeSBwYXJhbWV0ZXJzXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiBjb25lUG9zaXRpb247XG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcbiAgZl9saWdodERpcmVjdGlvbiA9IGxpZ2h0UG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgZl9leWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfbm9ybWFsID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwgMC4wKSAqIGludmVyc2VNb2RlbCkueHl6KTtcblxuICAvLyB2ZWM0IG1fcG9zaXRpb24gID0gbW9kZWwgKiB2ZWM0KGNvbmVQb3NpdGlvbiwgMS4wKTtcbiAgdmVjNCB0X3Bvc2l0aW9uICA9IHZpZXcgKiBjb25lUG9zaXRpb247XG4gIGdsX1Bvc2l0aW9uICAgICAgPSBwcm9qZWN0aW9uICogdF9wb3NpdGlvbjtcblxuICBmX2NvbG9yICAgICAgICAgID0gY29sb3I7XG4gIGZfZGF0YSAgICAgICAgICAgPSBjb25lUG9zaXRpb24ueHl6O1xuICBmX3Bvc2l0aW9uICAgICAgID0gcG9zaXRpb24ueHl6O1xuICBmX3V2ICAgICAgICAgICAgID0gdXY7XG59XG4iXSksYT1uKFsiI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGVcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XG4gIGZsb2F0IGNvczJBbHBoYSA9IE5kb3RIICogTmRvdEg7XG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xuICBmbG9hdCBkZW5vbSA9IDMuMTQxNTkyNjUzNTg5NzkzICogcm91Z2huZXNzMiAqIGNvczJBbHBoYSAqIGNvczJBbHBoYTtcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xufVxuXG5mbG9hdCBjb29rVG9ycmFuY2VTcGVjdWxhcihcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXG4gIGZsb2F0IHJvdWdobmVzcyxcbiAgZmxvYXQgZnJlc25lbCkge1xuXG4gIGZsb2F0IFZkb3ROID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcbiAgZmxvYXQgTGRvdE4gPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcblxuICAvL0hhbGYgYW5nbGUgdmVjdG9yXG4gIHZlYzMgSCA9IG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiArIHZpZXdEaXJlY3Rpb24pO1xuXG4gIC8vR2VvbWV0cmljIHRlcm1cbiAgZmxvYXQgTmRvdEggPSBtYXgoZG90KHN1cmZhY2VOb3JtYWwsIEgpLCAwLjApO1xuICBmbG9hdCBWZG90SCA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgTGRvdEggPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBHMSA9ICgyLjAgKiBOZG90SCAqIFZkb3ROKSAvIFZkb3RIO1xuICBmbG9hdCBHMiA9ICgyLjAgKiBOZG90SCAqIExkb3ROKSAvIExkb3RIO1xuICBmbG9hdCBHID0gbWluKDEuMCwgbWluKEcxLCBHMikpO1xuICBcbiAgLy9EaXN0cmlidXRpb24gdGVybVxuICBmbG9hdCBEID0gYmVja21hbm5EaXN0cmlidXRpb24oTmRvdEgsIHJvdWdobmVzcyk7XG5cbiAgLy9GcmVzbmVsIHRlcm1cbiAgZmxvYXQgRiA9IHBvdygxLjAgLSBWZG90TiwgZnJlc25lbCk7XG5cbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxuICByZXR1cm4gIEcgKiBGICogRCAvIG1heCgzLjE0MTU5MjY1ICogVmRvdE4sIDAuMDAwMDAxKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCByb3VnaG5lc3MsIGZyZXNuZWwsIGthbWJpZW50LCBrZGlmZnVzZSwga3NwZWN1bGFyLCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcblxudmFyeWluZyB2ZWMzIGZfbm9ybWFsLCBmX2xpZ2h0RGlyZWN0aW9uLCBmX2V5ZURpcmVjdGlvbiwgZl9kYXRhLCBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmX3Bvc2l0aW9uKSkgZGlzY2FyZDtcbiAgdmVjMyBOID0gbm9ybWFsaXplKGZfbm9ybWFsKTtcbiAgdmVjMyBMID0gbm9ybWFsaXplKGZfbGlnaHREaXJlY3Rpb24pO1xuICB2ZWMzIFYgPSBub3JtYWxpemUoZl9leWVEaXJlY3Rpb24pO1xuXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBtaW4oMS4wLCBtYXgoMC4wLCBjb29rVG9ycmFuY2VTcGVjdWxhcihMLCBWLCBOLCByb3VnaG5lc3MsIGZyZXNuZWwpKSk7XG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xuXG4gIHZlYzQgc3VyZmFjZUNvbG9yID0gZl9jb2xvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KTtcbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGxpdENvbG9yICogb3BhY2l0eTtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZlYzMgZ2V0T3J0aG9nb25hbFZlY3Rvcih2ZWMzIHYpIHtcbiAgLy8gUmV0dXJuIHVwLXZlY3RvciBmb3Igb25seS16IHZlY3Rvci5cbiAgLy8gUmV0dXJuIGF4ICsgYnkgKyBjeiA9IDAsIGEgcG9pbnQgdGhhdCBsaWVzIG9uIHRoZSBwbGFuZSB0aGF0IGhhcyB2IGFzIGEgbm9ybWFsIGFuZCB0aGF0IGlzbid0ICgwLDAsMCkuXG4gIC8vIEZyb20gdGhlIGFib3ZlIGlmLXN0YXRlbWVudCB3ZSBoYXZlIHx8YXx8ID4gMCAgVSAgfHxifHwgPiAwLlxuICAvLyBBc3NpZ24geiA9IDAsIHggPSAtYiwgeSA9IGE6XG4gIC8vIGEqLWIgKyBiKmEgKyBjKjAgPSAtYmEgKyBiYSArIDAgPSAwXG4gIGlmICh2Lngqdi54ID4gdi56KnYueiB8fCB2Lnkqdi55ID4gdi56KnYueikge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygtdi55LCB2LngsIDAuMCkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygwLjAsIHYueiwgLXYueSkpO1xuICB9XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgY29uZSB2ZXJ0ZXggYW5kIG5vcm1hbCBhdCB0aGUgZ2l2ZW4gaW5kZXguXG4vL1xuLy8gVGhlIHJldHVybmVkIHZlcnRleCBpcyBmb3IgYSBjb25lIHdpdGggaXRzIHRvcCBhdCBvcmlnaW4gYW5kIGhlaWdodCBvZiAxLjAsXG4vLyBwb2ludGluZyBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSB2ZWN0b3IgYXR0cmlidXRlLlxuLy9cbi8vIEVhY2ggY29uZSBpcyBtYWRlIHVwIG9mIGEgdG9wIHZlcnRleCwgYSBjZW50ZXIgYmFzZSB2ZXJ0ZXggYW5kIGJhc2UgcGVyaW1ldGVyIHZlcnRpY2VzLlxuLy8gVGhlc2UgdmVydGljZXMgYXJlIHVzZWQgdG8gbWFrZSB1cCB0aGUgdHJpYW5nbGVzIG9mIHRoZSBjb25lIGJ5IHRoZSBmb2xsb3dpbmc6XG4vLyAgIHNlZ21lbnQgKyAwIHRvcCB2ZXJ0ZXhcbi8vICAgc2VnbWVudCArIDEgcGVyaW1ldGVyIHZlcnRleCBhKzFcbi8vICAgc2VnbWVudCArIDIgcGVyaW1ldGVyIHZlcnRleCBhXG4vLyAgIHNlZ21lbnQgKyAzIGNlbnRlciBiYXNlIHZlcnRleFxuLy8gICBzZWdtZW50ICsgNCBwZXJpbWV0ZXIgdmVydGV4IGFcbi8vICAgc2VnbWVudCArIDUgcGVyaW1ldGVyIHZlcnRleCBhKzFcbi8vIFdoZXJlIHNlZ21lbnQgaXMgdGhlIG51bWJlciBvZiB0aGUgcmFkaWFsIHNlZ21lbnQgKiA2IGFuZCBhIGlzIHRoZSBhbmdsZSBhdCB0aGF0IHJhZGlhbCBzZWdtZW50LlxuLy8gVG8gZ28gZnJvbSBpbmRleCB0byBzZWdtZW50LCBmbG9vcihpbmRleCAvIDYpXG4vLyBUbyBnbyBmcm9tIHNlZ21lbnQgdG8gYW5nbGUsIDIqcGkgKiAoc2VnbWVudC9zZWdtZW50Q291bnQpXG4vLyBUbyBnbyBmcm9tIGluZGV4IHRvIHNlZ21lbnQgaW5kZXgsIGluZGV4IC0gKHNlZ21lbnQqNilcbi8vXG52ZWMzIGdldENvbmVQb3NpdGlvbih2ZWMzIGQsIGZsb2F0IHJhd0luZGV4LCBmbG9hdCBjb25lT2Zmc2V0LCBvdXQgdmVjMyBub3JtYWwpIHtcblxuICBjb25zdCBmbG9hdCBzZWdtZW50Q291bnQgPSA4LjA7XG5cbiAgZmxvYXQgaW5kZXggPSByYXdJbmRleCAtIGZsb29yKHJhd0luZGV4IC9cbiAgICAoc2VnbWVudENvdW50ICogNi4wKSkgKlxuICAgIChzZWdtZW50Q291bnQgKiA2LjApO1xuXG4gIGZsb2F0IHNlZ21lbnQgPSBmbG9vcigwLjAwMSArIGluZGV4LzYuMCk7XG4gIGZsb2F0IHNlZ21lbnRJbmRleCA9IGluZGV4IC0gKHNlZ21lbnQqNi4wKTtcblxuICBub3JtYWwgPSAtbm9ybWFsaXplKGQpO1xuXG4gIGlmIChzZWdtZW50SW5kZXggPiAyLjk5ICYmIHNlZ21lbnRJbmRleCA8IDMuMDEpIHtcbiAgICByZXR1cm4gbWl4KHZlYzMoMC4wKSwgLWQsIGNvbmVPZmZzZXQpO1xuICB9XG5cbiAgZmxvYXQgbmV4dEFuZ2xlID0gKFxuICAgIChzZWdtZW50SW5kZXggPiAwLjk5ICYmICBzZWdtZW50SW5kZXggPCAxLjAxKSB8fFxuICAgIChzZWdtZW50SW5kZXggPiA0Ljk5ICYmICBzZWdtZW50SW5kZXggPCA1LjAxKVxuICApID8gMS4wIDogMC4wO1xuICBmbG9hdCBhbmdsZSA9IDIuMCAqIDMuMTQxNTkgKiAoKHNlZ21lbnQgKyBuZXh0QW5nbGUpIC8gc2VnbWVudENvdW50KTtcblxuICB2ZWMzIHYxID0gbWl4KGQsIHZlYzMoMC4wKSwgY29uZU9mZnNldCk7XG4gIHZlYzMgdjIgPSB2MSAtIGQ7XG5cbiAgdmVjMyB1ID0gZ2V0T3J0aG9nb25hbFZlY3RvcihkKTtcbiAgdmVjMyB2ID0gbm9ybWFsaXplKGNyb3NzKHUsIGQpKTtcblxuICB2ZWMzIHggPSB1ICogY29zKGFuZ2xlKSAqIGxlbmd0aChkKSowLjI1O1xuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKSowLjI1O1xuICB2ZWMzIHYzID0gdjIgKyB4ICsgeTtcbiAgaWYgKHNlZ21lbnRJbmRleCA8IDMuMCkge1xuICAgIHZlYzMgdHggPSB1ICogc2luKGFuZ2xlKTtcbiAgICB2ZWMzIHR5ID0gdiAqIC1jb3MoYW5nbGUpO1xuICAgIHZlYzMgdGFuZ2VudCA9IHR4ICsgdHk7XG4gICAgbm9ybWFsID0gbm9ybWFsaXplKGNyb3NzKHYzIC0gdjEsIHRhbmdlbnQpKTtcbiAgfVxuXG4gIGlmIChzZWdtZW50SW5kZXggPT0gMC4wKSB7XG4gICAgcmV0dXJuIG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xuICB9XG4gIHJldHVybiB2Mztcbn1cblxuYXR0cmlidXRlIHZlYzQgdmVjdG9yO1xuYXR0cmlidXRlIHZlYzQgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSBmbG9hdCB2ZWN0b3JTY2FsZSwgY29uZVNjYWxlLCBjb25lT2Zmc2V0O1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgbm9ybWFsO1xuICB2ZWMzIFhZWiA9IGdldENvbmVQb3NpdGlvbihtYXQzKG1vZGVsKSAqICgodmVjdG9yU2NhbGUgKiBjb25lU2NhbGUpICogdmVjdG9yLnh5eiksIHBvc2l0aW9uLncsIGNvbmVPZmZzZXQsIG5vcm1hbCk7XG4gIHZlYzQgY29uZVBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLnh5eiwgMS4wKSArIHZlYzQoWFlaLCAwLjApO1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogY29uZVBvc2l0aW9uO1xuICBmX2lkICAgICAgICA9IGlkO1xuICBmX3Bvc2l0aW9uICA9IHBvc2l0aW9uLnh5ejtcbn1cbiJdKSxzPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzICBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQsIGZfaWQueHl6KTtcbn0iXSk7ci5tZXNoU2hhZGVyPXt2ZXJ0ZXg6aSxmcmFnbWVudDphLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjNCJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9LHtuYW1lOiJ2ZWN0b3IiLHR5cGU6InZlYzMifV19LHIucGlja1NoYWRlcj17dmVydGV4Om8sZnJhZ21lbnQ6cyxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzQifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifSx7bmFtZToidmVjdG9yIix0eXBlOiJ2ZWMzIn1dfX0se2dsc2xpZnk6NDI0fV0sMjYxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXswOiJOT05FIiwxOiJPTkUiLDI6IkxJTkVfTE9PUCIsMzoiTElORV9TVFJJUCIsNDoiVFJJQU5HTEVTIiw1OiJUUklBTkdMRV9TVFJJUCIsNjoiVFJJQU5HTEVfRkFOIiwyNTY6IkRFUFRIX0JVRkZFUl9CSVQiLDUxMjoiTkVWRVIiLDUxMzoiTEVTUyIsNTE0OiJFUVVBTCIsNTE1OiJMRVFVQUwiLDUxNjoiR1JFQVRFUiIsNTE3OiJOT1RFUVVBTCIsNTE4OiJHRVFVQUwiLDUxOToiQUxXQVlTIiw3Njg6IlNSQ19DT0xPUiIsNzY5OiJPTkVfTUlOVVNfU1JDX0NPTE9SIiw3NzA6IlNSQ19BTFBIQSIsNzcxOiJPTkVfTUlOVVNfU1JDX0FMUEhBIiw3NzI6IkRTVF9BTFBIQSIsNzczOiJPTkVfTUlOVVNfRFNUX0FMUEhBIiw3NzQ6IkRTVF9DT0xPUiIsNzc1OiJPTkVfTUlOVVNfRFNUX0NPTE9SIiw3NzY6IlNSQ19BTFBIQV9TQVRVUkFURSIsMTAyNDoiU1RFTkNJTF9CVUZGRVJfQklUIiwxMDI4OiJGUk9OVCIsMTAyOToiQkFDSyIsMTAzMjoiRlJPTlRfQU5EX0JBQ0siLDEyODA6IklOVkFMSURfRU5VTSIsMTI4MToiSU5WQUxJRF9WQUxVRSIsMTI4MjoiSU5WQUxJRF9PUEVSQVRJT04iLDEyODU6Ik9VVF9PRl9NRU1PUlkiLDEyODY6IklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIiwyMzA0OiJDVyIsMjMwNToiQ0NXIiwyODQ5OiJMSU5FX1dJRFRIIiwyODg0OiJDVUxMX0ZBQ0UiLDI4ODU6IkNVTExfRkFDRV9NT0RFIiwyODg2OiJGUk9OVF9GQUNFIiwyOTI4OiJERVBUSF9SQU5HRSIsMjkyOToiREVQVEhfVEVTVCIsMjkzMDoiREVQVEhfV1JJVEVNQVNLIiwyOTMxOiJERVBUSF9DTEVBUl9WQUxVRSIsMjkzMjoiREVQVEhfRlVOQyIsMjk2MDoiU1RFTkNJTF9URVNUIiwyOTYxOiJTVEVOQ0lMX0NMRUFSX1ZBTFVFIiwyOTYyOiJTVEVOQ0lMX0ZVTkMiLDI5NjM6IlNURU5DSUxfVkFMVUVfTUFTSyIsMjk2NDoiU1RFTkNJTF9GQUlMIiwyOTY1OiJTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCIsMjk2NjoiU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MiLDI5Njc6IlNURU5DSUxfUkVGIiwyOTY4OiJTVEVOQ0lMX1dSSVRFTUFTSyIsMjk3ODoiVklFV1BPUlQiLDMwMjQ6IkRJVEhFUiIsMzA0MjoiQkxFTkQiLDMwODg6IlNDSVNTT1JfQk9YIiwzMDg5OiJTQ0lTU09SX1RFU1QiLDMxMDY6IkNPTE9SX0NMRUFSX1ZBTFVFIiwzMTA3OiJDT0xPUl9XUklURU1BU0siLDMzMTc6IlVOUEFDS19BTElHTk1FTlQiLDMzMzM6IlBBQ0tfQUxJR05NRU5UIiwzMzc5OiJNQVhfVEVYVFVSRV9TSVpFIiwzMzg2OiJNQVhfVklFV1BPUlRfRElNUyIsMzQwODoiU1VCUElYRUxfQklUUyIsMzQxMDoiUkVEX0JJVFMiLDM0MTE6IkdSRUVOX0JJVFMiLDM0MTI6IkJMVUVfQklUUyIsMzQxMzoiQUxQSEFfQklUUyIsMzQxNDoiREVQVEhfQklUUyIsMzQxNToiU1RFTkNJTF9CSVRTIiwzNTUzOiJURVhUVVJFXzJEIiw0MzUyOiJET05UX0NBUkUiLDQzNTM6IkZBU1RFU1QiLDQzNTQ6Ik5JQ0VTVCIsNTEyMDoiQllURSIsNTEyMToiVU5TSUdORURfQllURSIsNTEyMjoiU0hPUlQiLDUxMjM6IlVOU0lHTkVEX1NIT1JUIiw1MTI0OiJJTlQiLDUxMjU6IlVOU0lHTkVEX0lOVCIsNTEyNjoiRkxPQVQiLDUzODY6IklOVkVSVCIsNTg5MDoiVEVYVFVSRSIsNjQwMToiU1RFTkNJTF9JTkRFWCIsNjQwMjoiREVQVEhfQ09NUE9ORU5UIiw2NDA2OiJBTFBIQSIsNjQwNzoiUkdCIiw2NDA4OiJSR0JBIiw2NDA5OiJMVU1JTkFOQ0UiLDY0MTA6IkxVTUlOQU5DRV9BTFBIQSIsNzY4MDoiS0VFUCIsNzY4MToiUkVQTEFDRSIsNzY4MjoiSU5DUiIsNzY4MzoiREVDUiIsNzkzNjoiVkVORE9SIiw3OTM3OiJSRU5ERVJFUiIsNzkzODoiVkVSU0lPTiIsOTcyODoiTkVBUkVTVCIsOTcyOToiTElORUFSIiw5OTg0OiJORUFSRVNUX01JUE1BUF9ORUFSRVNUIiw5OTg1OiJMSU5FQVJfTUlQTUFQX05FQVJFU1QiLDk5ODY6Ik5FQVJFU1RfTUlQTUFQX0xJTkVBUiIsOTk4NzoiTElORUFSX01JUE1BUF9MSU5FQVIiLDEwMjQwOiJURVhUVVJFX01BR19GSUxURVIiLDEwMjQxOiJURVhUVVJFX01JTl9GSUxURVIiLDEwMjQyOiJURVhUVVJFX1dSQVBfUyIsMTAyNDM6IlRFWFRVUkVfV1JBUF9UIiwxMDQ5NzoiUkVQRUFUIiwxMDc1MjoiUE9MWUdPTl9PRkZTRVRfVU5JVFMiLDE2Mzg0OiJDT0xPUl9CVUZGRVJfQklUIiwzMjc2OToiQ09OU1RBTlRfQ09MT1IiLDMyNzcwOiJPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IiLDMyNzcxOiJDT05TVEFOVF9BTFBIQSIsMzI3NzI6Ik9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSIsMzI3NzM6IkJMRU5EX0NPTE9SIiwzMjc3NDoiRlVOQ19BREQiLDMyNzc3OiJCTEVORF9FUVVBVElPTl9SR0IiLDMyNzc4OiJGVU5DX1NVQlRSQUNUIiwzMjc3OToiRlVOQ19SRVZFUlNFX1NVQlRSQUNUIiwzMjgxOToiVU5TSUdORURfU0hPUlRfNF80XzRfNCIsMzI4MjA6IlVOU0lHTkVEX1NIT1JUXzVfNV81XzEiLDMyODIzOiJQT0xZR09OX09GRlNFVF9GSUxMIiwzMjgyNDoiUE9MWUdPTl9PRkZTRVRfRkFDVE9SIiwzMjg1NDoiUkdCQTQiLDMyODU1OiJSR0I1X0ExIiwzMjg3MzoiVEVYVFVSRV9CSU5ESU5HXzJEIiwzMjkyNjoiU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFIiwzMjkyODoiU0FNUExFX0NPVkVSQUdFIiwzMjkzNjoiU0FNUExFX0JVRkZFUlMiLDMyOTM3OiJTQU1QTEVTIiwzMjkzODoiU0FNUExFX0NPVkVSQUdFX1ZBTFVFIiwzMjkzOToiU0FNUExFX0NPVkVSQUdFX0lOVkVSVCIsMzI5Njg6IkJMRU5EX0RTVF9SR0IiLDMyOTY5OiJCTEVORF9TUkNfUkdCIiwzMjk3MDoiQkxFTkRfRFNUX0FMUEhBIiwzMjk3MToiQkxFTkRfU1JDX0FMUEhBIiwzMzA3MToiQ0xBTVBfVE9fRURHRSIsMzMxNzA6IkdFTkVSQVRFX01JUE1BUF9ISU5UIiwzMzE4OToiREVQVEhfQ09NUE9ORU5UMTYiLDMzMzA2OiJERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQiLDMzNjM1OiJVTlNJR05FRF9TSE9SVF81XzZfNSIsMzM2NDg6Ik1JUlJPUkVEX1JFUEVBVCIsMzM5MDE6IkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRSIsMzM5MDI6IkFMSUFTRURfTElORV9XSURUSF9SQU5HRSIsMzM5ODQ6IlRFWFRVUkUwIiwzMzk4NToiVEVYVFVSRTEiLDMzOTg2OiJURVhUVVJFMiIsMzM5ODc6IlRFWFRVUkUzIiwzMzk4ODoiVEVYVFVSRTQiLDMzOTg5OiJURVhUVVJFNSIsMzM5OTA6IlRFWFRVUkU2IiwzMzk5MToiVEVYVFVSRTciLDMzOTkyOiJURVhUVVJFOCIsMzM5OTM6IlRFWFRVUkU5IiwzMzk5NDoiVEVYVFVSRTEwIiwzMzk5NToiVEVYVFVSRTExIiwzMzk5NjoiVEVYVFVSRTEyIiwzMzk5NzoiVEVYVFVSRTEzIiwzMzk5ODoiVEVYVFVSRTE0IiwzMzk5OToiVEVYVFVSRTE1IiwzNGUzOiJURVhUVVJFMTYiLDM0MDAxOiJURVhUVVJFMTciLDM0MDAyOiJURVhUVVJFMTgiLDM0MDAzOiJURVhUVVJFMTkiLDM0MDA0OiJURVhUVVJFMjAiLDM0MDA1OiJURVhUVVJFMjEiLDM0MDA2OiJURVhUVVJFMjIiLDM0MDA3OiJURVhUVVJFMjMiLDM0MDA4OiJURVhUVVJFMjQiLDM0MDA5OiJURVhUVVJFMjUiLDM0MDEwOiJURVhUVVJFMjYiLDM0MDExOiJURVhUVVJFMjciLDM0MDEyOiJURVhUVVJFMjgiLDM0MDEzOiJURVhUVVJFMjkiLDM0MDE0OiJURVhUVVJFMzAiLDM0MDE1OiJURVhUVVJFMzEiLDM0MDE2OiJBQ1RJVkVfVEVYVFVSRSIsMzQwMjQ6Ik1BWF9SRU5ERVJCVUZGRVJfU0laRSIsMzQwNDE6IkRFUFRIX1NURU5DSUwiLDM0MDU1OiJJTkNSX1dSQVAiLDM0MDU2OiJERUNSX1dSQVAiLDM0MDY3OiJURVhUVVJFX0NVQkVfTUFQIiwzNDA2ODoiVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQIiwzNDA2OToiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YIiwzNDA3MDoiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YIiwzNDA3MToiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZIiwzNDA3MjoiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZIiwzNDA3MzoiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aIiwzNDA3NDoiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aIiwzNDA3NjoiTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSIsMzQzMzg6IlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCIsMzQzMzk6IlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSIsMzQzNDA6IlZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFIiwzNDM0MToiVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFIiwzNDM0MjoiQ1VSUkVOVF9WRVJURVhfQVRUUklCIiwzNDM3MzoiVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSIiwzNDQ2NjoiTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTIiwzNDQ2NzoiQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMiLDM0NjYwOiJCVUZGRVJfU0laRSIsMzQ2NjE6IkJVRkZFUl9VU0FHRSIsMzQ4MTY6IlNURU5DSUxfQkFDS19GVU5DIiwzNDgxNzoiU1RFTkNJTF9CQUNLX0ZBSUwiLDM0ODE4OiJTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMIiwzNDgxOToiU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyIsMzQ4Nzc6IkJMRU5EX0VRVUFUSU9OX0FMUEhBIiwzNDkyMToiTUFYX1ZFUlRFWF9BVFRSSUJTIiwzNDkyMjoiVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEIiwzNDkzMDoiTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMiLDM0OTYyOiJBUlJBWV9CVUZGRVIiLDM0OTYzOiJFTEVNRU5UX0FSUkFZX0JVRkZFUiIsMzQ5NjQ6IkFSUkFZX0JVRkZFUl9CSU5ESU5HIiwzNDk2NToiRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyIsMzQ5NzU6IlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkciLDM1MDQwOiJTVFJFQU1fRFJBVyIsMzUwNDQ6IlNUQVRJQ19EUkFXIiwzNTA0ODoiRFlOQU1JQ19EUkFXIiwzNTYzMjoiRlJBR01FTlRfU0hBREVSIiwzNTYzMzoiVkVSVEVYX1NIQURFUiIsMzU2NjA6Ik1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyIsMzU2NjE6Ik1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTIiwzNTY2MzoiU0hBREVSX1RZUEUiLDM1NjY0OiJGTE9BVF9WRUMyIiwzNTY2NToiRkxPQVRfVkVDMyIsMzU2NjY6IkZMT0FUX1ZFQzQiLDM1NjY3OiJJTlRfVkVDMiIsMzU2Njg6IklOVF9WRUMzIiwzNTY2OToiSU5UX1ZFQzQiLDM1NjcwOiJCT09MIiwzNTY3MToiQk9PTF9WRUMyIiwzNTY3MjoiQk9PTF9WRUMzIiwzNTY3MzoiQk9PTF9WRUM0IiwzNTY3NDoiRkxPQVRfTUFUMiIsMzU2NzU6IkZMT0FUX01BVDMiLDM1Njc2OiJGTE9BVF9NQVQ0IiwzNTY3ODoiU0FNUExFUl8yRCIsMzU2ODA6IlNBTVBMRVJfQ1VCRSIsMzU3MTI6IkRFTEVURV9TVEFUVVMiLDM1NzEzOiJDT01QSUxFX1NUQVRVUyIsMzU3MTQ6IkxJTktfU1RBVFVTIiwzNTcxNToiVkFMSURBVEVfU1RBVFVTIiwzNTcxNjoiSU5GT19MT0dfTEVOR1RIIiwzNTcxNzoiQVRUQUNIRURfU0hBREVSUyIsMzU3MTg6IkFDVElWRV9VTklGT1JNUyIsMzU3MTk6IkFDVElWRV9VTklGT1JNX01BWF9MRU5HVEgiLDM1NzIwOiJTSEFERVJfU09VUkNFX0xFTkdUSCIsMzU3MjE6IkFDVElWRV9BVFRSSUJVVEVTIiwzNTcyMjoiQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIiwzNTcyNDoiU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OIiwzNTcyNToiQ1VSUkVOVF9QUk9HUkFNIiwzNjAwMzoiU1RFTkNJTF9CQUNLX1JFRiIsMzYwMDQ6IlNURU5DSUxfQkFDS19WQUxVRV9NQVNLIiwzNjAwNToiU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyIsMzYwMDY6IkZSQU1FQlVGRkVSX0JJTkRJTkciLDM2MDA3OiJSRU5ERVJCVUZGRVJfQklORElORyIsMzYwNDg6IkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUiLDM2MDQ5OiJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FIiwzNjA1MDoiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMIiwzNjA1MToiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0UiLDM2MDUzOiJGUkFNRUJVRkZFUl9DT01QTEVURSIsMzYwNTQ6IkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCIsMzYwNTU6IkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UIiwzNjA1NzoiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TIiwzNjA2MToiRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQiLDM2MDY0OiJDT0xPUl9BVFRBQ0hNRU5UMCIsMzYwOTY6IkRFUFRIX0FUVEFDSE1FTlQiLDM2MTI4OiJTVEVOQ0lMX0FUVEFDSE1FTlQiLDM2MTYwOiJGUkFNRUJVRkZFUiIsMzYxNjE6IlJFTkRFUkJVRkZFUiIsMzYxNjI6IlJFTkRFUkJVRkZFUl9XSURUSCIsMzYxNjM6IlJFTkRFUkJVRkZFUl9IRUlHSFQiLDM2MTY0OiJSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUIiwzNjE2ODoiU1RFTkNJTF9JTkRFWDgiLDM2MTc2OiJSRU5ERVJCVUZGRVJfUkVEX1NJWkUiLDM2MTc3OiJSRU5ERVJCVUZGRVJfR1JFRU5fU0laRSIsMzYxNzg6IlJFTkRFUkJVRkZFUl9CTFVFX1NJWkUiLDM2MTc5OiJSRU5ERVJCVUZGRVJfQUxQSEFfU0laRSIsMzYxODA6IlJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFIiwzNjE4MToiUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSIsMzYxOTQ6IlJHQjU2NSIsMzYzMzY6IkxPV19GTE9BVCIsMzYzMzc6Ik1FRElVTV9GTE9BVCIsMzYzMzg6IkhJR0hfRkxPQVQiLDM2MzM5OiJMT1dfSU5UIiwzNjM0MDoiTUVESVVNX0lOVCIsMzYzNDE6IkhJR0hfSU5UIiwzNjM0NjoiU0hBREVSX0NPTVBJTEVSIiwzNjM0NzoiTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMiLDM2MzQ4OiJNQVhfVkFSWUlOR19WRUNUT1JTIiwzNjM0OToiTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyIsMzc0NDA6IlVOUEFDS19GTElQX1lfV0VCR0wiLDM3NDQxOiJVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wiLDM3NDQyOiJDT05URVhUX0xPU1RfV0VCR0wiLDM3NDQzOiJVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIiwzNzQ0NDoiQlJPV1NFUl9ERUZBVUxUX1dFQkdMIn19LHt9XSwyNjI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLzEuMC9udW1iZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuW3RdfX0seyIuLzEuMC9udW1iZXJzIjoyNjF9XSwyNjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUpLG89aShlLFt7YnVmZmVyOnIsdHlwZTplLkZMT0FULHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6NDB9LHtidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTo0LG9mZnNldDoxMixzdHJpZGU6NDB9LHtidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTozLG9mZnNldDoyOCxzdHJpZGU6NDB9XSksbD1hKGUpO2wuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGwuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0xLGwuYXR0cmlidXRlcy5vZmZzZXQubG9jYXRpb249Mjt2YXIgYz1uZXcgcyhlLHIsbyxsKTtyZXR1cm4gYy51cGRhdGUodCksY307dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC12YW8iKSxhPXQoIi4vc2hhZGVycy9pbmRleCIpLG89WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIHModCxlLHIsbil7dGhpcy5nbD10LHRoaXMuc2hhZGVyPW4sdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdLHRoaXMuY2FwU2l6ZT1bMTAsMTAsMTBdLHRoaXMubGluZUNvdW50PVswLDAsMF0sdGhpcy5saW5lT2Zmc2V0PVswLDAsMF0sdGhpcy5vcGFjaXR5PTEsdGhpcy5oYXNBbHBoYT0hMX12YXIgbD1zLnByb3RvdHlwZTtmdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPTA7cjwzOysrcil0WzBdW3JdPU1hdGgubWluKHRbMF1bcl0sZVtyXSksdFsxXVtyXT1NYXRoLm1heCh0WzFdW3JdLGVbcl0pfWwuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5oYXNBbHBoYX0sbC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQWxwaGF9LGwuZHJhd1RyYW5zcGFyZW50PWwuZHJhdz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5zaGFkZXIudW5pZm9ybXM7dGhpcy5zaGFkZXIuYmluZCgpO3ZhciBuPXIudmlldz10LnZpZXd8fG8saT1yLnByb2plY3Rpb249dC5wcm9qZWN0aW9ufHxvO3IubW9kZWw9dC5tb2RlbHx8byxyLmNsaXBCb3VuZHM9dGhpcy5jbGlwQm91bmRzLHIub3BhY2l0eT10aGlzLm9wYWNpdHk7dmFyIGE9blsxMl0scz1uWzEzXSxsPW5bMTRdLGM9blsxNV0sdT0odC5fb3J0aG98fCExPzI6MSkqdGhpcy5waXhlbFJhdGlvKihpWzNdKmEraVs3XSpzK2lbMTFdKmwraVsxNV0qYykvZS5kcmF3aW5nQnVmZmVySGVpZ2h0O3RoaXMudmFvLmJpbmQoKTtmb3IodmFyIGY9MDtmPDM7KytmKWUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoW2ZdKnRoaXMucGl4ZWxSYXRpbyksci5jYXBTaXplPXRoaXMuY2FwU2l6ZVtmXSp1LHRoaXMubGluZUNvdW50W2ZdJiZlLmRyYXdBcnJheXMoZS5MSU5FUyx0aGlzLmxpbmVPZmZzZXRbZl0sdGhpcy5saW5lQ291bnRbZl0pO3RoaXMudmFvLnVuYmluZCgpfTt2YXIgdT1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgQXJyYXkoMyksZT0wO2U8MzsrK2Upe2Zvcih2YXIgcj1bXSxuPTE7bjw9MjsrK24pZm9yKHZhciBpPS0xO2k8PTE7aSs9Mil7dmFyIGE9WzAsMCwwXTthWyhuK2UpJTNdPWksci5wdXNoKGEpfXRbZV09cn1yZXR1cm4gdH0oKTtmdW5jdGlvbiBmKHQsZSxyLG4pe2Zvcih2YXIgaT11W25dLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIG89aVthXTt0LnB1c2goZVswXSxlWzFdLGVbMl0sclswXSxyWzFdLHJbMl0sclszXSxvWzBdLG9bMV0sb1syXSl9cmV0dXJuIGkubGVuZ3RofWwudXBkYXRlPWZ1bmN0aW9uKHQpeyJsaW5lV2lkdGgiaW4odD10fHx7fSkmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCxBcnJheS5pc0FycmF5KHRoaXMubGluZVdpZHRoKXx8KHRoaXMubGluZVdpZHRoPVt0aGlzLmxpbmVXaWR0aCx0aGlzLmxpbmVXaWR0aCx0aGlzLmxpbmVXaWR0aF0pKSwiY2FwU2l6ZSJpbiB0JiYodGhpcy5jYXBTaXplPXQuY2FwU2l6ZSxBcnJheS5pc0FycmF5KHRoaXMuY2FwU2l6ZSl8fCh0aGlzLmNhcFNpemU9W3RoaXMuY2FwU2l6ZSx0aGlzLmNhcFNpemUsdGhpcy5jYXBTaXplXSkpLHRoaXMuaGFzQWxwaGE9ITEsIm9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT0rdC5vcGFjaXR5LHRoaXMub3BhY2l0eTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpO3ZhciBlPXQuY29sb3J8fFtbMCwwLDBdLFswLDAsMF0sWzAsMCwwXV0scj10LnBvc2l0aW9uLG49dC5lcnJvcjtpZihBcnJheS5pc0FycmF5KGVbMF0pfHwoZT1bZSxlLGVdKSxyJiZuKXt2YXIgaT1bXSxhPXIubGVuZ3RoLG89MDt0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmxpbmVDb3VudD1bMCwwLDBdO2Zvcih2YXIgcz0wO3M8MzsrK3Mpe3RoaXMubGluZU9mZnNldFtzXT1vO3Q6Zm9yKHZhciBsPTA7bDxhOysrbCl7Zm9yKHZhciB1PXJbbF0saD0wO2g8MzsrK2gpaWYoaXNOYU4odVtoXSl8fCFpc0Zpbml0ZSh1W2hdKSljb250aW51ZSB0O3ZhciBwPW5bbF0sZD1lW3NdO2lmKEFycmF5LmlzQXJyYXkoZFswXSkmJihkPWVbbF0pLDM9PT1kLmxlbmd0aD9kPVtkWzBdLGRbMV0sZFsyXSwxXTo0PT09ZC5sZW5ndGgmJihkPVtkWzBdLGRbMV0sZFsyXSxkWzNdXSwhdGhpcy5oYXNBbHBoYSYmZFszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLCFpc05hTihwWzBdW3NdKSYmIWlzTmFOKHBbMV1bc10pKXt2YXIgbTtpZihwWzBdW3NdPDApKG09dS5zbGljZSgpKVtzXSs9cFswXVtzXSxpLnB1c2godVswXSx1WzFdLHVbMl0sZFswXSxkWzFdLGRbMl0sZFszXSwwLDAsMCxtWzBdLG1bMV0sbVsyXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwKSxjKHRoaXMuYm91bmRzLG0pLG8rPTIrZihpLG0sZCxzKTtpZihwWzFdW3NdPjApKG09dS5zbGljZSgpKVtzXSs9cFsxXVtzXSxpLnB1c2godVswXSx1WzFdLHVbMl0sZFswXSxkWzFdLGRbMl0sZFszXSwwLDAsMCxtWzBdLG1bMV0sbVsyXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwKSxjKHRoaXMuYm91bmRzLG0pLG8rPTIrZihpLG0sZCxzKX19dGhpcy5saW5lQ291bnRbc109by10aGlzLmxpbmVPZmZzZXRbc119dGhpcy5idWZmZXIudXBkYXRlKGkpfX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycy9pbmRleCI6MjY0LCJnbC1idWZmZXIiOjI1NywiZ2wtdmFvIjozNDN9XSwyNjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24sIG9mZnNldDtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSBmbG9hdCBjYXBTaXplO1xudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMyBmcmFnUG9zaXRpb247XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCB3b3JsZFBvc2l0aW9uICA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgd29ybGRQb3NpdGlvbiAgICAgICA9ICh3b3JsZFBvc2l0aW9uIC8gd29ybGRQb3NpdGlvbi53KSArIHZlYzQoY2FwU2l6ZSAqIG9mZnNldCwgMC4wKTtcbiAgZ2xfUG9zaXRpb24gICAgICAgICA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgZnJhZ0NvbG9yICAgICAgICAgICA9IGNvbG9yO1xuICBmcmFnUG9zaXRpb24gICAgICAgID0gcG9zaXRpb247XG59Il0pLG89bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnZhcnlpbmcgdmVjMyBmcmFnUG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZyYWdQb3NpdGlvbikgfHxcbiAgICBmcmFnQ29sb3IuYSAqIG9wYWNpdHkgPT0gMC5cbiAgKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IG9wYWNpdHkgKiBmcmFnQ29sb3I7XG59Il0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToib2Zmc2V0Iix0eXBlOiJ2ZWMzIn1dKX19LHsiZ2wtc2hhZGVyIjozMjMsZ2xzbGlmeTo0MjR9XSwyNjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtdGV4dHVyZTJkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2l8fChpPXQuRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQsYT10LkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCxvPXQuRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TLHM9dC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCk7dmFyIGM9dC5nZXRFeHRlbnNpb24oIldFQkdMX2RyYXdfYnVmZmVycyIpOyFsJiZjJiZmdW5jdGlvbih0LGUpe3ZhciByPXQuZ2V0UGFyYW1ldGVyKGUuTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKTtsPW5ldyBBcnJheShyKzEpO2Zvcih2YXIgbj0wO248PXI7KytuKXtmb3IodmFyIGk9bmV3IEFycmF5KHIpLGE9MDthPG47KythKWlbYV09dC5DT0xPUl9BVFRBQ0hNRU5UMCthO2ZvcihhPW47YTxyOysrYSlpW2FdPXQuTk9ORTtsW25dPWl9fSh0LGMpO0FycmF5LmlzQXJyYXkoZSkmJihuPXIscj0wfGVbMV0sZT0wfGVbMF0pO2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogTWlzc2luZyBzaGFwZSBwYXJhbWV0ZXIiKTt2YXIgdT10LmdldFBhcmFtZXRlcih0Lk1BWF9SRU5ERVJCVUZGRVJfU0laRSk7aWYoZTwwfHxlPnV8fHI8MHx8cj51KXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBQYXJhbWV0ZXJzIGFyZSB0b28gbGFyZ2UgZm9yIEZCTyIpO3ZhciBmPTE7aWYoImNvbG9yImluKG49bnx8e30pKXtpZigoZj1NYXRoLm1heCgwfG4uY29sb3IsMCkpPDApdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IE11c3Qgc3BlY2lmeSBhIG5vbm5lZ2F0aXZlIG51bWJlciBvZiBjb2xvcnMiKTtpZihmPjEpe2lmKCFjKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBNdWx0aXBsZSBkcmF3IGJ1ZmZlciBleHRlbnNpb24gbm90IHN1cHBvcnRlZCIpO2lmKGY+dC5nZXRQYXJhbWV0ZXIoYy5NQVhfQ09MT1JfQVRUQUNITUVOVFNfV0VCR0wpKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBDb250ZXh0IGRvZXMgbm90IHN1cHBvcnQgIitmKyIgZHJhdyBidWZmZXJzIil9fXZhciBoPXQuVU5TSUdORURfQllURSxwPXQuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9mbG9hdCIpO2lmKG4uZmxvYXQmJmY+MCl7aWYoIXApdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCBmbG9hdGluZyBwb2ludCB0ZXh0dXJlcyIpO2g9dC5GTE9BVH1lbHNlIG4ucHJlZmVyRmxvYXQmJmY+MCYmcCYmKGg9dC5GTE9BVCk7dmFyIG09ITA7ImRlcHRoImluIG4mJihtPSEhbi5kZXB0aCk7dmFyIGc9ITE7InN0ZW5jaWwiaW4gbiYmKGc9ISFuLnN0ZW5jaWwpO3JldHVybiBuZXcgZCh0LGUscixoLGYsbSxnLGMpfTt2YXIgaSxhLG8scyxsPW51bGw7ZnVuY3Rpb24gYyh0KXtyZXR1cm5bdC5nZXRQYXJhbWV0ZXIodC5GUkFNRUJVRkZFUl9CSU5ESU5HKSx0LmdldFBhcmFtZXRlcih0LlJFTkRFUkJVRkZFUl9CSU5ESU5HKSx0LmdldFBhcmFtZXRlcih0LlRFWFRVUkVfQklORElOR18yRCldfWZ1bmN0aW9uIHUodCxlKXt0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLGVbMF0pLHQuYmluZFJlbmRlcmJ1ZmZlcih0LlJFTkRFUkJVRkZFUixlWzFdKSx0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCxlWzJdKX1mdW5jdGlvbiBmKHQpe3N3aXRjaCh0KXtjYXNlIGk6dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIHVuc3VwcG9ydGVkIik7Y2FzZSBhOnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIGF0dGFjaG1lbnQiKTtjYXNlIG86dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIGluY29tcGxldGUgZGltZW5zaW9ucyIpO2Nhc2Ugczp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgaW5jb21wbGV0ZSBtaXNzaW5nIGF0dGFjaG1lbnQiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBmYWlsZWQgZm9yIHVuc3BlY2lmaWVkIHJlYXNvbiIpfX1mdW5jdGlvbiBoKHQsZSxyLGksYSxvKXtpZighaSlyZXR1cm4gbnVsbDt2YXIgcz1uKHQsZSxyLGEsaSk7cmV0dXJuIHMubWFnRmlsdGVyPXQuTkVBUkVTVCxzLm1pbkZpbHRlcj10Lk5FQVJFU1Qscy5taXBTYW1wbGVzPTEscy5iaW5kKCksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0LkZSQU1FQlVGRkVSLG8sdC5URVhUVVJFXzJELHMuaGFuZGxlLDApLHN9ZnVuY3Rpb24gcCh0LGUscixuLGkpe3ZhciBhPXQuY3JlYXRlUmVuZGVyYnVmZmVyKCk7cmV0dXJuIHQuYmluZFJlbmRlcmJ1ZmZlcih0LlJFTkRFUkJVRkZFUixhKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UodC5SRU5ERVJCVUZGRVIsbixlLHIpLHQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodC5GUkFNRUJVRkZFUixpLHQuUkVOREVSQlVGRkVSLGEpLGF9ZnVuY3Rpb24gZCh0LGUscixuLGksYSxvLHMpe3RoaXMuZ2w9dCx0aGlzLl9zaGFwZT1bMHxlLDB8cl0sdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2V4dD1zLHRoaXMuY29sb3I9bmV3IEFycmF5KGkpO2Zvcih2YXIgZD0wO2Q8aTsrK2QpdGhpcy5jb2xvcltkXT1udWxsO3RoaXMuX2NvbG9yX3JiPW51bGwsdGhpcy5kZXB0aD1udWxsLHRoaXMuX2RlcHRoX3JiPW51bGwsdGhpcy5fY29sb3JUeXBlPW4sdGhpcy5fdXNlRGVwdGg9YSx0aGlzLl91c2VTdGVuY2lsPW87dmFyIG09dGhpcyxnPVswfGUsMHxyXTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhnLHswOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gbS53aWR0aD10fX0sMTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0uaGVpZ2h0PXR9fX0pLHRoaXMuX3NoYXBlVmVjdG9yPWcsZnVuY3Rpb24odCl7dmFyIGU9Yyh0LmdsKSxyPXQuZ2wsbj10LmhhbmRsZT1yLmNyZWF0ZUZyYW1lYnVmZmVyKCksaT10Ll9zaGFwZVswXSxhPXQuX3NoYXBlWzFdLG89dC5jb2xvci5sZW5ndGgscz10Ll9leHQsZD10Ll91c2VTdGVuY2lsLG09dC5fdXNlRGVwdGgsZz10Ll9jb2xvclR5cGU7ci5iaW5kRnJhbWVidWZmZXIoci5GUkFNRUJVRkZFUixuKTtmb3IodmFyIHY9MDt2PG87Kyt2KXQuY29sb3Jbdl09aChyLGksYSxnLHIuUkdCQSxyLkNPTE9SX0FUVEFDSE1FTlQwK3YpOzA9PT1vPyh0Ll9jb2xvcl9yYj1wKHIsaSxhLHIuUkdCQTQsci5DT0xPUl9BVFRBQ0hNRU5UMCkscyYmcy5kcmF3QnVmZmVyc1dFQkdMKGxbMF0pKTpvPjEmJnMuZHJhd0J1ZmZlcnNXRUJHTChsW29dKTt2YXIgeT1yLmdldEV4dGVuc2lvbigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpO3k/ZD90LmRlcHRoPWgocixpLGEseS5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTCxyLkRFUFRIX1NURU5DSUwsci5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpOm0mJih0LmRlcHRoPWgocixpLGEsci5VTlNJR05FRF9TSE9SVCxyLkRFUFRIX0NPTVBPTkVOVCxyLkRFUFRIX0FUVEFDSE1FTlQpKTptJiZkP3QuX2RlcHRoX3JiPXAocixpLGEsci5ERVBUSF9TVEVOQ0lMLHIuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTptP3QuX2RlcHRoX3JiPXAocixpLGEsci5ERVBUSF9DT01QT05FTlQxNixyLkRFUFRIX0FUVEFDSE1FTlQpOmQmJih0Ll9kZXB0aF9yYj1wKHIsaSxhLHIuU1RFTkNJTF9JTkRFWCxyLlNURU5DSUxfQVRUQUNITUVOVCkpO3ZhciB4PXIuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhyLkZSQU1FQlVGRkVSKTtpZih4IT09ci5GUkFNRUJVRkZFUl9DT01QTEVURSl7dC5fZGVzdHJveWVkPSEwLHIuYmluZEZyYW1lYnVmZmVyKHIuRlJBTUVCVUZGRVIsbnVsbCksci5kZWxldGVGcmFtZWJ1ZmZlcih0LmhhbmRsZSksdC5oYW5kbGU9bnVsbCx0LmRlcHRoJiYodC5kZXB0aC5kaXNwb3NlKCksdC5kZXB0aD1udWxsKSx0Ll9kZXB0aF9yYiYmKHIuZGVsZXRlUmVuZGVyYnVmZmVyKHQuX2RlcHRoX3JiKSx0Ll9kZXB0aF9yYj1udWxsKTtmb3Iodj0wO3Y8dC5jb2xvci5sZW5ndGg7Kyt2KXQuY29sb3Jbdl0uZGlzcG9zZSgpLHQuY29sb3Jbdl09bnVsbDt0Ll9jb2xvcl9yYiYmKHIuZGVsZXRlUmVuZGVyYnVmZmVyKHQuX2NvbG9yX3JiKSx0Ll9jb2xvcl9yYj1udWxsKSx1KHIsZSksZih4KX11KHIsZSl9KHRoaXMpfXZhciBtPWQucHJvdG90eXBlO2Z1bmN0aW9uIGcodCxlLHIpe2lmKHQuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogQ2FuJ3QgcmVzaXplIGRlc3Ryb3llZCBGQk8iKTtpZih0Ll9zaGFwZVswXSE9PWV8fHQuX3NoYXBlWzFdIT09cil7dmFyIG49dC5nbCxpPW4uZ2V0UGFyYW1ldGVyKG4uTUFYX1JFTkRFUkJVRkZFUl9TSVpFKTtpZihlPDB8fGU+aXx8cjwwfHxyPmkpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENhbid0IHJlc2l6ZSBGQk8sIGludmFsaWQgZGltZW5zaW9ucyIpO3QuX3NoYXBlWzBdPWUsdC5fc2hhcGVbMV09cjtmb3IodmFyIGE9YyhuKSxvPTA7bzx0LmNvbG9yLmxlbmd0aDsrK28pdC5jb2xvcltvXS5zaGFwZT10Ll9zaGFwZTt0Ll9jb2xvcl9yYiYmKG4uYmluZFJlbmRlcmJ1ZmZlcihuLlJFTkRFUkJVRkZFUix0Ll9jb2xvcl9yYiksbi5yZW5kZXJidWZmZXJTdG9yYWdlKG4uUkVOREVSQlVGRkVSLG4uUkdCQTQsdC5fc2hhcGVbMF0sdC5fc2hhcGVbMV0pKSx0LmRlcHRoJiYodC5kZXB0aC5zaGFwZT10Ll9zaGFwZSksdC5fZGVwdGhfcmImJihuLmJpbmRSZW5kZXJidWZmZXIobi5SRU5ERVJCVUZGRVIsdC5fZGVwdGhfcmIpLHQuX3VzZURlcHRoJiZ0Ll91c2VTdGVuY2lsP24ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUixuLkRFUFRIX1NURU5DSUwsdC5fc2hhcGVbMF0sdC5fc2hhcGVbMV0pOnQuX3VzZURlcHRoP24ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUixuLkRFUFRIX0NPTVBPTkVOVDE2LHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKTp0Ll91c2VTdGVuY2lsJiZuLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5TVEVOQ0lMX0lOREVYLHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKSksbi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUix0LmhhbmRsZSk7dmFyIHM9bi5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKG4uRlJBTUVCVUZGRVIpO3MhPT1uLkZSQU1FQlVGRkVSX0NPTVBMRVRFJiYodC5kaXNwb3NlKCksdShuLGEpLGYocykpLHUobixhKX19T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobSx7c2hhcGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXN0cm95ZWQ/WzAsMF06dGhpcy5fc2hhcGVWZWN0b3J9LHNldDpmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpfHwodD1bMHx0LDB8dF0pLDIhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogU2hhcGUgdmVjdG9yIG11c3QgYmUgbGVuZ3RoIDIiKTt2YXIgZT0wfHRbMF0scj0wfHRbMV07cmV0dXJuIGcodGhpcyxlLHIpLFtlLHJdfSxlbnVtZXJhYmxlOiExfSx3aWR0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZD8wOnRoaXMuX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGcodGhpcyx0fD0wLHRoaXMuX3NoYXBlWzFdKSx0fSxlbnVtZXJhYmxlOiExfSxoZWlnaHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXN0cm95ZWQ/MDp0aGlzLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0fD0wLGcodGhpcyx0aGlzLl9zaGFwZVswXSx0KSx0fSxlbnVtZXJhYmxlOiExfX0pLG0uYmluZD1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZXN0cm95ZWQpe3ZhciB0PXRoaXMuZ2w7dC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUix0aGlzLmhhbmRsZSksdC52aWV3cG9ydCgwLDAsdGhpcy5fc2hhcGVbMF0sdGhpcy5fc2hhcGVbMV0pfX0sbS5kaXNwb3NlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2Rlc3Ryb3llZCl7dGhpcy5fZGVzdHJveWVkPSEwO3ZhciB0PXRoaXMuZ2w7dC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmhhbmRsZSksdGhpcy5oYW5kbGU9bnVsbCx0aGlzLmRlcHRoJiYodGhpcy5kZXB0aC5kaXNwb3NlKCksdGhpcy5kZXB0aD1udWxsKSx0aGlzLl9kZXB0aF9yYiYmKHQuZGVsZXRlUmVuZGVyYnVmZmVyKHRoaXMuX2RlcHRoX3JiKSx0aGlzLl9kZXB0aF9yYj1udWxsKTtmb3IodmFyIGU9MDtlPHRoaXMuY29sb3IubGVuZ3RoOysrZSl0aGlzLmNvbG9yW2VdLmRpc3Bvc2UoKSx0aGlzLmNvbG9yW2VdPW51bGw7dGhpcy5fY29sb3JfcmImJih0LmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLl9jb2xvcl9yYiksdGhpcy5fY29sb3JfcmI9bnVsbCl9fX0seyJnbC10ZXh0dXJlMmQiOjMzOH1dLDI2NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoInNwcmludGYtanMiKS5zcHJpbnRmLGk9dCgiZ2wtY29uc3RhbnRzL2xvb2t1cCIpLGE9dCgiZ2xzbC1zaGFkZXItbmFtZSIpLG89dCgiYWRkLWxpbmUtbnVtYmVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBzPWEoZSl8fCJvZiB1bmtub3duIG5hbWUgKHNlZSBucG0gZ2xzbC1zaGFkZXItbmFtZSkiLGw9InVua25vd24gdHlwZSI7dm9pZCAwIT09ciYmKGw9cj09PWkuRlJBR01FTlRfU0hBREVSPyJmcmFnbWVudCI6InZlcnRleCIpO2Zvcih2YXIgYz1uKCJFcnJvciBjb21waWxpbmcgJXMgc2hhZGVyICVzOlxuIixsLHMpLHU9bigiJXMlcyIsYyx0KSxmPXQuc3BsaXQoIlxuIiksaD17fSxwPTA7cDxmLmxlbmd0aDtwKyspe3ZhciBkPWZbcF07aWYoIiIhPT1kJiYiXDAiIT09ZCl7dmFyIG09cGFyc2VJbnQoZC5zcGxpdCgiOiIpWzJdKTtpZihpc05hTihtKSl0aHJvdyBuZXcgRXJyb3IobigiQ291bGQgbm90IHBhcnNlIGVycm9yOiAlcyIsZCkpO2hbbV09ZH19dmFyIGc9byhlKS5zcGxpdCgiXG4iKTtmb3IocD0wO3A8Zy5sZW5ndGg7cCsrKWlmKGhbcCszXXx8aFtwKzJdfHxoW3ArMV0pe3ZhciB2PWdbcF07aWYoYys9disiXG4iLGhbcCsxXSl7dmFyIHk9aFtwKzFdO3k9eS5zdWJzdHIoeS5zcGxpdCgiOiIsMykuam9pbigiOiIpLmxlbmd0aCsxKS50cmltKCksYys9bigiXl5eICVzXG5cbiIseSl9fXJldHVybntsb25nOmMudHJpbSgpLHNob3J0OnUudHJpbSgpfX19LHsiYWRkLWxpbmUtbnVtYmVycyI6NjgsImdsLWNvbnN0YW50cy9sb29rdXAiOjI2MiwiZ2xzbC1zaGFkZXItbmFtZSI6NDE2LCJzcHJpbnRmLWpzIjo1NDJ9XSwyNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbCxuPW8ocixsLnZlcnRleCxsLmZyYWdtZW50KSxpPW8ocixsLnBpY2tWZXJ0ZXgsbC5waWNrRnJhZ21lbnQpLGE9cyhyKSx1PXMociksZj1zKHIpLGg9cyhyKSxwPW5ldyBjKHQsbixpLGEsdSxmLGgpO3JldHVybiBwLnVwZGF0ZShlKSx0LmFkZE9iamVjdChwKSxwfTt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGk9dCgiaW90YS1hcnJheSIpLGE9dCgidHlwZWRhcnJheS1wb29sIiksbz10KCJnbC1zaGFkZXIiKSxzPXQoImdsLWJ1ZmZlciIpLGw9dCgiLi9saWIvc2hhZGVycyIpO2Z1bmN0aW9uIGModCxlLHIsbixpLGEsbyl7dGhpcy5wbG90PXQsdGhpcy5zaGFkZXI9ZSx0aGlzLnBpY2tTaGFkZXI9cix0aGlzLnBvc2l0aW9uQnVmZmVyPW4sdGhpcy53ZWlnaHRCdWZmZXI9aSx0aGlzLmNvbG9yQnVmZmVyPWEsdGhpcy5pZEJ1ZmZlcj1vLHRoaXMueERhdGE9W10sdGhpcy55RGF0YT1bXSx0aGlzLnNoYXBlPVswLDBdLHRoaXMuYm91bmRzPVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy5waWNrT2Zmc2V0PTB9dmFyIHUsZj1jLnByb3RvdHlwZSxoPVswLDAsMSwwLDAsMSwxLDAsMSwxLDAsMV07Zi5kcmF3PSh1PVsxLDAsMCwwLDEsMCwwLDAsMV0sZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBsb3QsZT10aGlzLnNoYWRlcixyPXRoaXMuYm91bmRzLG49dGhpcy5udW1WZXJ0aWNlcztpZighKG48PTApKXt2YXIgaT10LmdsLGE9dC5kYXRhQm94LG89clsyXS1yWzBdLHM9clszXS1yWzFdLGw9YVsyXS1hWzBdLGM9YVszXS1hWzFdO3VbMF09MipvL2wsdVs0XT0yKnMvYyx1WzZdPTIqKHJbMF0tYVswXSkvbC0xLHVbN109MiooclsxXS1hWzFdKS9jLTEsZS5iaW5kKCk7dmFyIGY9ZS51bmlmb3JtcztmLnZpZXdUcmFuc2Zvcm09dSxmLnNoYXBlPXRoaXMuc2hhcGU7dmFyIGg9ZS5hdHRyaWJ1dGVzO3RoaXMucG9zaXRpb25CdWZmZXIuYmluZCgpLGgucG9zaXRpb24ucG9pbnRlcigpLHRoaXMud2VpZ2h0QnVmZmVyLmJpbmQoKSxoLndlaWdodC5wb2ludGVyKGkuVU5TSUdORURfQllURSwhMSksdGhpcy5jb2xvckJ1ZmZlci5iaW5kKCksaC5jb2xvci5wb2ludGVyKGkuVU5TSUdORURfQllURSwhMCksaS5kcmF3QXJyYXlzKGkuVFJJQU5HTEVTLDAsbil9fSksZi5kcmF3UGljaz1mdW5jdGlvbigpe3ZhciB0PVsxLDAsMCwwLDEsMCwwLDAsMV0sZT1bMCwwLDAsMF07cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMucGxvdCxpPXRoaXMucGlja1NoYWRlcixhPXRoaXMuYm91bmRzLG89dGhpcy5udW1WZXJ0aWNlcztpZighKG88PTApKXt2YXIgcz1uLmdsLGw9bi5kYXRhQm94LGM9YVsyXS1hWzBdLHU9YVszXS1hWzFdLGY9bFsyXS1sWzBdLGg9bFszXS1sWzFdO3RbMF09MipjL2YsdFs0XT0yKnUvaCx0WzZdPTIqKGFbMF0tbFswXSkvZi0xLHRbN109MiooYVsxXS1sWzFdKS9oLTE7Zm9yKHZhciBwPTA7cDw0OysrcCllW3BdPXI+PjgqcCYyNTU7dGhpcy5waWNrT2Zmc2V0PXIsaS5iaW5kKCk7dmFyIGQ9aS51bmlmb3JtcztkLnZpZXdUcmFuc2Zvcm09dCxkLnBpY2tPZmZzZXQ9ZSxkLnNoYXBlPXRoaXMuc2hhcGU7dmFyIG09aS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLnBvc2l0aW9uQnVmZmVyLmJpbmQoKSxtLnBvc2l0aW9uLnBvaW50ZXIoKSx0aGlzLndlaWdodEJ1ZmZlci5iaW5kKCksbS53ZWlnaHQucG9pbnRlcihzLlVOU0lHTkVEX0JZVEUsITEpLHRoaXMuaWRCdWZmZXIuYmluZCgpLG0ucGlja0lkLnBvaW50ZXIocy5VTlNJR05FRF9CWVRFLCExKSxzLmRyYXdBcnJheXMocy5UUklBTkdMRVMsMCxvKSxyK3RoaXMuc2hhcGVbMF0qdGhpcy5zaGFwZVsxXX19fSgpLGYucGljaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5waWNrT2Zmc2V0LGk9dGhpcy5zaGFwZVswXSp0aGlzLnNoYXBlWzFdO2lmKHI8bnx8cj49bitpKXJldHVybiBudWxsO3ZhciBhPXItbixvPXRoaXMueERhdGEscz10aGlzLnlEYXRhO3JldHVybntvYmplY3Q6dGhpcyxwb2ludElkOmEsZGF0YUNvb3JkOltvW2EldGhpcy5zaGFwZVswXV0sc1thL3RoaXMuc2hhcGVbMF18MF1dfX0sZi51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9dHx8e30pLnNoYXBlfHxbMCwwXSxyPXQueHx8aShlWzBdKSxvPXQueXx8aShlWzFdKSxzPXQuenx8bmV3IEZsb2F0MzJBcnJheShlWzBdKmVbMV0pLGw9ITEhPT10LnpzbW9vdGg7dGhpcy54RGF0YT1yLHRoaXMueURhdGE9bzt2YXIgYyx1LGYscCxkPXQuY29sb3JMZXZlbHN8fFswXSxtPXQuY29sb3JWYWx1ZXN8fFswLDAsMCwxXSxnPWQubGVuZ3RoLHY9dGhpcy5ib3VuZHM7bD8oYz12WzBdPXJbMF0sdT12WzFdPW9bMF0sZj12WzJdPXJbci5sZW5ndGgtMV0scD12WzNdPW9bby5sZW5ndGgtMV0pOihjPXZbMF09clswXSsoclsxXS1yWzBdKS8yLHU9dlsxXT1vWzBdKyhvWzFdLW9bMF0pLzIsZj12WzJdPXJbci5sZW5ndGgtMV0rKHJbci5sZW5ndGgtMV0tcltyLmxlbmd0aC0yXSkvMixwPXZbM109b1tvLmxlbmd0aC0xXSsob1tvLmxlbmd0aC0xXS1vW28ubGVuZ3RoLTJdKS8yKTt2YXIgeT0xLyhmLWMpLHg9MS8ocC11KSxiPWVbMF0sXz1lWzFdO3RoaXMuc2hhcGU9W2IsX107dmFyIHc9KGw/KGItMSkqKF8tMSk6YipfKSooaC5sZW5ndGg+Pj4xKTt0aGlzLm51bVZlcnRpY2VzPXc7Zm9yKHZhciBUPWEubWFsbG9jVWludDgoNCp3KSxrPWEubWFsbG9jRmxvYXQzMigyKncpLEE9YS5tYWxsb2NVaW50OCgyKncpLE09YS5tYWxsb2NVaW50MzIodyksUz0wLEU9bD9iLTE6YixMPWw/Xy0xOl8sQz0wO0M8TDsrK0Mpe3ZhciBQLEk7bD8oUD14KihvW0NdLXUpLEk9eCoob1tDKzFdLXUpKTooUD1DPF8tMT94KihvW0NdLShvW0MrMV0tb1tDXSkvMi11KTp4KihvW0NdLShvW0NdLW9bQy0xXSkvMi11KSxJPUM8Xy0xP3gqKG9bQ10rKG9bQysxXS1vW0NdKS8yLXUpOngqKG9bQ10rKG9bQ10tb1tDLTFdKS8yLXUpKTtmb3IodmFyIE89MDtPPEU7KytPKXt2YXIgeixEO2w/KHo9eSoocltPXS1jKSxEPXkqKHJbTysxXS1jKSk6KHo9TzxiLTE/eSoocltPXS0ocltPKzFdLXJbT10pLzItYyk6eSoocltPXS0ocltPXS1yW08tMV0pLzItYyksRD1PPGItMT95KihyW09dKyhyW08rMV0tcltPXSkvMi1jKTp5KihyW09dKyhyW09dLXJbTy0xXSkvMi1jKSk7Zm9yKHZhciBSPTA7UjxoLmxlbmd0aDtSKz0yKXt2YXIgRixCLE4saixVPWhbUl0sVj1oW1IrMV0sSD1zW2w/KEMrVikqYisoTytVKTpDKmIrT10scT1uLmxlKGQsSCk7aWYocTwwKUY9bVswXSxCPW1bMV0sTj1tWzJdLGo9bVszXTtlbHNlIGlmKHE9PT1nLTEpRj1tWzQqZy00XSxCPW1bNCpnLTNdLE49bVs0KmctMl0saj1tWzQqZy0xXTtlbHNle3ZhciBHPShILWRbcV0pLyhkW3ErMV0tZFtxXSksWT0xLUcsVz00KnEsWD00KihxKzEpO0Y9WSptW1ddK0cqbVtYXSxCPVkqbVtXKzFdK0cqbVtYKzFdLE49WSptW1crMl0rRyptW1grMl0saj1ZKm1bVyszXStHKm1bWCszXX1UWzQqU109MjU1KkYsVFs0KlMrMV09MjU1KkIsVFs0KlMrMl09MjU1Kk4sVFs0KlMrM109MjU1Kmosa1syKlNdPS41KnorLjUqRCxrWzIqUysxXT0uNSpQKy41KkksQVsyKlNdPVUsQVsyKlMrMV09VixNW1NdPUMqYitPLFMrPTF9fX10aGlzLnBvc2l0aW9uQnVmZmVyLnVwZGF0ZShrKSx0aGlzLndlaWdodEJ1ZmZlci51cGRhdGUoQSksdGhpcy5jb2xvckJ1ZmZlci51cGRhdGUoVCksdGhpcy5pZEJ1ZmZlci51cGRhdGUoTSksYS5mcmVlKGspLGEuZnJlZShUKSxhLmZyZWUoQSksYS5mcmVlKE0pfSxmLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBvc2l0aW9uQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLndlaWdodEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5jb2xvckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5pZEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKX19LHsiLi9saWIvc2hhZGVycyI6MjY4LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTAwLCJnbC1idWZmZXIiOjI1NywiZ2wtc2hhZGVyIjozMjMsImlvdGEtYXJyYXkiOjQzMSwidHlwZWRhcnJheS1wb29sIjo1OTB9XSwyNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpO2UuZXhwb3J0cz17ZnJhZ21lbnQ6bihbInByZWNpc2lvbiBsb3dwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoZnJhZ0NvbG9yLnJnYiAqIGZyYWdDb2xvci5hLCBmcmFnQ29sb3IuYSk7XG59XG4iXSksdmVydGV4Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiB3ZWlnaHQ7XG5cbnVuaWZvcm0gdmVjMiBzaGFwZTtcbnVuaWZvcm0gbWF0MyB2aWV3VHJhbnNmb3JtO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgdlBvc2l0aW9uID0gdmlld1RyYW5zZm9ybSAqIHZlYzMoIHBvc2l0aW9uICsgKHdlaWdodC0uNSkvKHNoYXBlLTEuKSAsIDEuMCk7XG4gIGZyYWdDb2xvciA9IGNvbG9yO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQodlBvc2l0aW9uLnh5LCAwLCB2UG9zaXRpb24ueik7XG59XG4iXSkscGlja0ZyYWdtZW50Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG52YXJ5aW5nIHZlYzIgdldlaWdodDtcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBkID0gc3RlcCguNSwgdldlaWdodCk7XG4gIHZlYzQgaWQgPSBmcmFnSWQgKyBwaWNrT2Zmc2V0O1xuICBpZC54ICs9IGQueCArIGQueSpzaGFwZS54O1xuXG4gIGlkLnkgKz0gZmxvb3IoaWQueCAvIDI1Ni4wKTtcbiAgaWQueCAtPSBmbG9vcihpZC54IC8gMjU2LjApICogMjU2LjA7XG5cbiAgaWQueiArPSBmbG9vcihpZC55IC8gMjU2LjApO1xuICBpZC55IC09IGZsb29yKGlkLnkgLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC53ICs9IGZsb29yKGlkLnogLyAyNTYuMCk7XG4gIGlkLnogLT0gZmxvb3IoaWQueiAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGlkLzI1NS47XG59XG4iXSkscGlja1ZlcnRleDpuKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IHBpY2tJZDtcbmF0dHJpYnV0ZSB2ZWMyIHdlaWdodDtcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSBtYXQzIHZpZXdUcmFuc2Zvcm07XG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG52YXJ5aW5nIHZlYzIgdldlaWdodDtcblxudm9pZCBtYWluKCkge1xuICB2V2VpZ2h0ID0gd2VpZ2h0O1xuXG4gIGZyYWdJZCA9IHBpY2tJZDtcblxuICB2ZWMzIHZQb3NpdGlvbiA9IHZpZXdUcmFuc2Zvcm0gKiB2ZWMzKCBwb3NpdGlvbiArICh3ZWlnaHQtLjUpLyhzaGFwZS0xLikgLCAxLjApO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQodlBvc2l0aW9uLnh5LCAwLCB2UG9zaXRpb24ueik7XG59XG4iXSl9fSx7Z2xzbGlmeTo0MjR9XSwyNjk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5IiksaT10KCJnbC1zaGFkZXIiKSxhPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgbmV4dFBvc2l0aW9uO1xuYXR0cmlidXRlIGZsb2F0IGFyY0xlbmd0aCwgbGluZVdpZHRoO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5cbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcbnVuaWZvcm0gZmxvYXQgcGl4ZWxSYXRpbztcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMyB3b3JsZFBvc2l0aW9uO1xudmFyeWluZyBmbG9hdCBwaXhlbEFyY0xlbmd0aDtcblxudmVjNCBwcm9qZWN0KHZlYzMgcCkge1xuICByZXR1cm4gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocCwgMS4wKTtcbn1cblxudm9pZCBtYWluKCkge1xuICB2ZWM0IHN0YXJ0UG9pbnQgPSBwcm9qZWN0KHBvc2l0aW9uKTtcbiAgdmVjNCBlbmRQb2ludCAgID0gcHJvamVjdChuZXh0UG9zaXRpb24pO1xuXG4gIHZlYzIgQSA9IHN0YXJ0UG9pbnQueHkgLyBzdGFydFBvaW50Lnc7XG4gIHZlYzIgQiA9ICAgZW5kUG9pbnQueHkgLyAgIGVuZFBvaW50Lnc7XG5cbiAgZmxvYXQgY2xpcEFuZ2xlID0gYXRhbihcbiAgICAoQi55IC0gQS55KSAqIHNjcmVlblNoYXBlLnksXG4gICAgKEIueCAtIEEueCkgKiBzY3JlZW5TaGFwZS54XG4gICk7XG5cbiAgdmVjMiBvZmZzZXQgPSAwLjUgKiBwaXhlbFJhdGlvICogbGluZVdpZHRoICogdmVjMihcbiAgICBzaW4oY2xpcEFuZ2xlKSxcbiAgICAtY29zKGNsaXBBbmdsZSlcbiAgKSAvIHNjcmVlblNoYXBlO1xuXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzdGFydFBvaW50Lnh5ICsgc3RhcnRQb2ludC53ICogb2Zmc2V0LCBzdGFydFBvaW50Lnp3KTtcblxuICB3b3JsZFBvc2l0aW9uID0gcG9zaXRpb247XG4gIHBpeGVsQXJjTGVuZ3RoID0gYXJjTGVuZ3RoO1xuICBmcmFnQ29sb3IgPSBjb2xvcjtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzICAgICAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gc2FtcGxlcjJEIGRhc2hUZXh0dXJlO1xudW5pZm9ybSBmbG9hdCAgICAgZGFzaFNjYWxlO1xudW5pZm9ybSBmbG9hdCAgICAgb3BhY2l0eTtcblxudmFyeWluZyB2ZWMzICAgIHdvcmxkUG9zaXRpb247XG52YXJ5aW5nIGZsb2F0ICAgcGl4ZWxBcmNMZW5ndGg7XG52YXJ5aW5nIHZlYzQgICAgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkUG9zaXRpb24pIHx8XG4gICAgZnJhZ0NvbG9yLmEgKiBvcGFjaXR5ID09IDAuXG4gICkgZGlzY2FyZDtcblxuICBmbG9hdCBkYXNoV2VpZ2h0ID0gdGV4dHVyZTJEKGRhc2hUZXh0dXJlLCB2ZWMyKGRhc2hTY2FsZSAqIHBpeGVsQXJjTGVuZ3RoLCAwKSkucjtcbiAgaWYoZGFzaFdlaWdodCA8IDAuNSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yICogb3BhY2l0eTtcbn1cbiJdKSxzPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG4jZGVmaW5lIEZMT0FUX01BWCAgMS43MDE0MTE4NGUzOFxuI2RlZmluZSBGTE9BVF9NSU4gIDEuMTc1NDk0MzVlLTM4XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9taWtvbGFseXNlbmtvL2dsc2wtcmVhZC1mbG9hdC9ibG9iL21hc3Rlci9pbmRleC5nbHNsXG52ZWM0IHBhY2tGbG9hdChmbG9hdCB2KSB7XG4gIGZsb2F0IGF2ID0gYWJzKHYpO1xuXG4gIC8vSGFuZGxlIHNwZWNpYWwgY2FzZXNcbiAgaWYoYXYgPCBGTE9BVF9NSU4pIHtcbiAgICByZXR1cm4gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuICB9IGVsc2UgaWYodiA+IEZMT0FUX01BWCkge1xuICAgIHJldHVybiB2ZWM0KDEyNy4wLCAxMjguMCwgMC4wLCAwLjApIC8gMjU1LjA7XG4gIH0gZWxzZSBpZih2IDwgLUZMT0FUX01BWCkge1xuICAgIHJldHVybiB2ZWM0KDI1NS4wLCAxMjguMCwgMC4wLCAwLjApIC8gMjU1LjA7XG4gIH1cblxuICB2ZWM0IGMgPSB2ZWM0KDAsMCwwLDApO1xuXG4gIC8vQ29tcHV0ZSBleHBvbmVudCBhbmQgbWFudGlzc2FcbiAgZmxvYXQgZSA9IGZsb29yKGxvZzIoYXYpKTtcbiAgZmxvYXQgbSA9IGF2ICogcG93KDIuMCwgLWUpIC0gMS4wO1xuXG4gIC8vVW5wYWNrIG1hbnRpc3NhXG4gIGNbMV0gPSBmbG9vcigxMjguMCAqIG0pO1xuICBtIC09IGNbMV0gLyAxMjguMDtcbiAgY1syXSA9IGZsb29yKDMyNzY4LjAgKiBtKTtcbiAgbSAtPSBjWzJdIC8gMzI3NjguMDtcbiAgY1szXSA9IGZsb29yKDgzODg2MDguMCAqIG0pO1xuXG4gIC8vVW5wYWNrIGV4cG9uZW50XG4gIGZsb2F0IGViaWFzID0gZSArIDEyNy4wO1xuICBjWzBdID0gZmxvb3IoZWJpYXMgLyAyLjApO1xuICBlYmlhcyAtPSBjWzBdICogMi4wO1xuICBjWzFdICs9IGZsb29yKGViaWFzKSAqIDEyOC4wO1xuXG4gIC8vVW5wYWNrIHNpZ24gYml0XG4gIGNbMF0gKz0gMTI4LjAgKiBzdGVwKDAuMCwgLXYpO1xuXG4gIC8vU2NhbGUgYmFjayB0byByYW5nZVxuICByZXR1cm4gYyAvIDI1NS4wO1xufVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWMzIHdvcmxkUG9zaXRpb247XG52YXJ5aW5nIGZsb2F0IHBpeGVsQXJjTGVuZ3RoO1xudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCB3b3JsZFBvc2l0aW9uKSkgZGlzY2FyZDtcblxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZC8yNTUuMCwgcGFja0Zsb2F0KHBpeGVsQXJjTGVuZ3RoKS54eXopO1xufSJdKSxsPVt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToibmV4dFBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImFyY0xlbmd0aCIsdHlwZToiZmxvYXQifSx7bmFtZToibGluZVdpZHRoIix0eXBlOiJmbG9hdCJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9XTtyLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLGwpfSxyLmNyZWF0ZVBpY2tTaGFkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLHMsbnVsbCxsKX19LHsiZ2wtc2hhZGVyIjozMjMsZ2xzbGlmeTo0MjR9XSwyNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2x8fHQuc2NlbmUmJnQuc2NlbmUuZ2wscj1mKGUpO3IuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLHIuYXR0cmlidXRlcy5uZXh0UG9zaXRpb24ubG9jYXRpb249MSxyLmF0dHJpYnV0ZXMuYXJjTGVuZ3RoLmxvY2F0aW9uPTIsci5hdHRyaWJ1dGVzLmxpbmVXaWR0aC5sb2NhdGlvbj0zLHIuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj00O3ZhciBvPWgoZSk7by5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsby5hdHRyaWJ1dGVzLm5leHRQb3NpdGlvbi5sb2NhdGlvbj0xLG8uYXR0cmlidXRlcy5hcmNMZW5ndGgubG9jYXRpb249MixvLmF0dHJpYnV0ZXMubGluZVdpZHRoLmxvY2F0aW9uPTMsby5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTQ7Zm9yKHZhciBzPW4oZSksbD1pKGUsW3tidWZmZXI6cyxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjQ4fSx7YnVmZmVyOnMsc2l6ZTozLG9mZnNldDoxMixzdHJpZGU6NDh9LHtidWZmZXI6cyxzaXplOjEsb2Zmc2V0OjI0LHN0cmlkZTo0OH0se2J1ZmZlcjpzLHNpemU6MSxvZmZzZXQ6Mjgsc3RyaWRlOjQ4fSx7YnVmZmVyOnMsc2l6ZTo0LG9mZnNldDozMixzdHJpZGU6NDh9XSksdT1jKG5ldyBBcnJheSgxMDI0KSxbMjU2LDEsNF0pLHA9MDtwPDEwMjQ7KytwKXUuZGF0YVtwXT0yNTU7dmFyIGQ9YShlLHUpO2Qud3JhcD1lLlJFUEVBVDt2YXIgbT1uZXcgdihlLHIsbyxzLGwsZCk7cmV0dXJuIG0udXBkYXRlKHQpLG19O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCJnbC10ZXh0dXJlMmQiKSxvPW5ldyBVaW50OEFycmF5KDQpLHM9bmV3IEZsb2F0MzJBcnJheShvLmJ1ZmZlcik7dmFyIGw9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxjPXQoIm5kYXJyYXkiKSx1PXQoIi4vbGliL3NoYWRlcnMiKSxmPXUuY3JlYXRlU2hhZGVyLGg9dS5jcmVhdGVQaWNrU2hhZGVyLHA9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIGQodCxlKXtmb3IodmFyIHI9MCxuPTA7bjwzOysrbil7dmFyIGk9dFtuXS1lW25dO3IrPWkqaX1yZXR1cm4gTWF0aC5zcXJ0KHIpfWZ1bmN0aW9uIG0odCl7Zm9yKHZhciBlPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLHI9MDtyPDM7KytyKWVbMF1bcl09TWF0aC5tYXgodFswXVtyXSxlWzBdW3JdKSxlWzFdW3JdPU1hdGgubWluKHRbMV1bcl0sZVsxXVtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gZyh0LGUscixuKXt0aGlzLmFyY0xlbmd0aD10LHRoaXMucG9zaXRpb249ZSx0aGlzLmluZGV4PXIsdGhpcy5kYXRhQ29vcmRpbmF0ZT1ufWZ1bmN0aW9uIHYodCxlLHIsbixpLGEpe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcj1lLHRoaXMucGlja1NoYWRlcj1yLHRoaXMuYnVmZmVyPW4sdGhpcy52YW89aSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5wb2ludHM9W10sdGhpcy5hcmNMZW5ndGg9W10sdGhpcy52ZXJ0ZXhDb3VudD0wLHRoaXMuYm91bmRzPVtbMCwwLDBdLFswLDAsMF1dLHRoaXMucGlja0lkPTAsdGhpcy5saW5lV2lkdGg9MSx0aGlzLnRleHR1cmU9YSx0aGlzLmRhc2hTY2FsZT0xLHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5kaXJ0eT0hMCx0aGlzLnBpeGVsUmF0aW89MX12YXIgeT12LnByb3RvdHlwZTt5LmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBbHBoYX0seS5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmhhc0FscGhhfSx5LnBpY2tTbG90cz0xLHkuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0seS5kcmF3VHJhbnNwYXJlbnQ9eS5kcmF3PWZ1bmN0aW9uKHQpe2lmKHRoaXMudmVydGV4Q291bnQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnNoYWRlcixuPXRoaXMudmFvO3IuYmluZCgpLHIudW5pZm9ybXM9e21vZGVsOnQubW9kZWx8fHAsdmlldzp0LnZpZXd8fHAscHJvamVjdGlvbjp0LnByb2plY3Rpb258fHAsY2xpcEJvdW5kczptKHRoaXMuY2xpcEJvdW5kcyksZGFzaFRleHR1cmU6dGhpcy50ZXh0dXJlLmJpbmQoKSxkYXNoU2NhbGU6dGhpcy5kYXNoU2NhbGUvdGhpcy5hcmNMZW5ndGhbdGhpcy5hcmNMZW5ndGgubGVuZ3RoLTFdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LHNjcmVlblNoYXBlOltlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvfSxuLmJpbmQoKSxuLmRyYXcoZS5UUklBTkdMRV9TVFJJUCx0aGlzLnZlcnRleENvdW50KSxuLnVuYmluZCgpfX0seS5kcmF3UGljaz1mdW5jdGlvbih0KXtpZih0aGlzLnZlcnRleENvdW50KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5waWNrU2hhZGVyLG49dGhpcy52YW87ci5iaW5kKCksci51bmlmb3Jtcz17bW9kZWw6dC5tb2RlbHx8cCx2aWV3OnQudmlld3x8cCxwcm9qZWN0aW9uOnQucHJvamVjdGlvbnx8cCxwaWNrSWQ6dGhpcy5waWNrSWQsY2xpcEJvdW5kczptKHRoaXMuY2xpcEJvdW5kcyksc2NyZWVuU2hhcGU6W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0scGl4ZWxSYXRpbzp0aGlzLnBpeGVsUmF0aW99LG4uYmluZCgpLG4uZHJhdyhlLlRSSUFOR0xFX1NUUklQLHRoaXMudmVydGV4Q291bnQpLG4udW5iaW5kKCl9fSx5LnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMuZGlydHk9ITA7dmFyIG49ISF0LmNvbm5lY3RHYXBzOyJkYXNoU2NhbGUiaW4gdCYmKHRoaXMuZGFzaFNjYWxlPXQuZGFzaFNjYWxlKSx0aGlzLmhhc0FscGhhPSExLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9K3Qub3BhY2l0eSx0aGlzLm9wYWNpdHk8MSYmKHRoaXMuaGFzQWxwaGE9ITApKTt2YXIgaT1bXSxhPVtdLG89W10scz0wLHU9MCxmPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLGg9dC5wb3NpdGlvbnx8dC5wb3NpdGlvbnM7aWYoaCl7dmFyIHA9dC5jb2xvcnx8dC5jb2xvcnN8fFswLDAsMCwxXSxtPXQubGluZVdpZHRofHwxLGc9ITE7dDpmb3IoZT0xO2U8aC5sZW5ndGg7KytlKXt2YXIgdix5LHgsYj1oW2UtMV0sXz1oW2VdO2ZvcihhLnB1c2gocyksby5wdXNoKGIuc2xpY2UoKSkscj0wO3I8MzsrK3Ipe2lmKGlzTmFOKGJbcl0pfHxpc05hTihfW3JdKXx8IWlzRmluaXRlKGJbcl0pfHwhaXNGaW5pdGUoX1tyXSkpe2lmKCFuJiZpLmxlbmd0aD4wKXtmb3IodmFyIHc9MDt3PDI0OysrdylpLnB1c2goaVtpLmxlbmd0aC0xMl0pO3UrPTIsZz0hMH1jb250aW51ZSB0fWZbMF1bcl09TWF0aC5taW4oZlswXVtyXSxiW3JdLF9bcl0pLGZbMV1bcl09TWF0aC5tYXgoZlsxXVtyXSxiW3JdLF9bcl0pfUFycmF5LmlzQXJyYXkocFswXSk/KHY9cC5sZW5ndGg+ZS0xP3BbZS0xXTpwLmxlbmd0aD4wP3BbcC5sZW5ndGgtMV06WzAsMCwwLDFdLHk9cC5sZW5ndGg+ZT9wW2VdOnAubGVuZ3RoPjA/cFtwLmxlbmd0aC0xXTpbMCwwLDAsMV0pOnY9eT1wLDM9PT12Lmxlbmd0aCYmKHY9W3ZbMF0sdlsxXSx2WzJdLDFdKSwzPT09eS5sZW5ndGgmJih5PVt5WzBdLHlbMV0seVsyXSwxXSksIXRoaXMuaGFzQWxwaGEmJnZbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApLHg9QXJyYXkuaXNBcnJheShtKT9tLmxlbmd0aD5lLTE/bVtlLTFdOm0ubGVuZ3RoPjA/bVttLmxlbmd0aC0xXTpbMCwwLDAsMV06bTt2YXIgVD1zO2lmKHMrPWQoYixfKSxnKXtmb3Iocj0wO3I8MjsrK3IpaS5wdXNoKGJbMF0sYlsxXSxiWzJdLF9bMF0sX1sxXSxfWzJdLFQseCx2WzBdLHZbMV0sdlsyXSx2WzNdKTt1Kz0yLGc9ITF9aS5wdXNoKGJbMF0sYlsxXSxiWzJdLF9bMF0sX1sxXSxfWzJdLFQseCx2WzBdLHZbMV0sdlsyXSx2WzNdLGJbMF0sYlsxXSxiWzJdLF9bMF0sX1sxXSxfWzJdLFQsLXgsdlswXSx2WzFdLHZbMl0sdlszXSxfWzBdLF9bMV0sX1syXSxiWzBdLGJbMV0sYlsyXSxzLC14LHlbMF0seVsxXSx5WzJdLHlbM10sX1swXSxfWzFdLF9bMl0sYlswXSxiWzFdLGJbMl0scyx4LHlbMF0seVsxXSx5WzJdLHlbM10pLHUrPTR9fWlmKHRoaXMuYnVmZmVyLnVwZGF0ZShpKSxhLnB1c2gocyksby5wdXNoKGhbaC5sZW5ndGgtMV0uc2xpY2UoKSksdGhpcy5ib3VuZHM9Zix0aGlzLnZlcnRleENvdW50PXUsdGhpcy5wb2ludHM9byx0aGlzLmFyY0xlbmd0aD1hLCJkYXNoZXMiaW4gdCl7dmFyIGs9dC5kYXNoZXMuc2xpY2UoKTtmb3Ioay51bnNoaWZ0KDApLGU9MTtlPGsubGVuZ3RoOysrZSlrW2VdPWtbZS0xXStrW2VdO3ZhciBBPWMobmV3IEFycmF5KDEwMjQpLFsyNTYsMSw0XSk7Zm9yKGU9MDtlPDI1NjsrK2Upe2ZvcihyPTA7cjw0OysrcilBLnNldChlLDAsciwwKTsxJmwubGUoayxrW2subGVuZ3RoLTFdKmUvMjU1KT9BLnNldChlLDAsMCwwKTpBLnNldChlLDAsMCwyNTUpfXRoaXMudGV4dHVyZS5zZXRQaXhlbHMoQSl9fSx5LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKX0seS5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gb1swXT1uLG9bMV09cixvWzJdPWUsb1szXT10LHNbMF19KHQudmFsdWVbMF0sdC52YWx1ZVsxXSx0LnZhbHVlWzJdLDApLHI9bC5sZSh0aGlzLmFyY0xlbmd0aCxlKTtpZihyPDApcmV0dXJuIG51bGw7aWYocj09PXRoaXMuYXJjTGVuZ3RoLmxlbmd0aC0xKXJldHVybiBuZXcgZyh0aGlzLmFyY0xlbmd0aFt0aGlzLmFyY0xlbmd0aC5sZW5ndGgtMV0sdGhpcy5wb2ludHNbdGhpcy5wb2ludHMubGVuZ3RoLTFdLnNsaWNlKCkscik7Zm9yKHZhciBuPXRoaXMucG9pbnRzW3JdLGk9dGhpcy5wb2ludHNbTWF0aC5taW4ocisxLHRoaXMucG9pbnRzLmxlbmd0aC0xKV0sYT0oZS10aGlzLmFyY0xlbmd0aFtyXSkvKHRoaXMuYXJjTGVuZ3RoW3IrMV0tdGhpcy5hcmNMZW5ndGhbcl0pLGM9MS1hLHU9WzAsMCwwXSxmPTA7ZjwzOysrZil1W2ZdPWMqbltmXSthKmlbZl07dmFyIGg9TWF0aC5taW4oYTwuNT9yOnIrMSx0aGlzLnBvaW50cy5sZW5ndGgtMSk7cmV0dXJuIG5ldyBnKGUsdSxoLHRoaXMucG9pbnRzW2hdKX19LHsiLi9saWIvc2hhZGVycyI6MjY5LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTAwLCJnbC1idWZmZXIiOjI1NywiZ2wtdGV4dHVyZTJkIjozMzgsImdsLXZhbyI6MzQzLG5kYXJyYXk6NDYyfV0sMjcxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGY9ZVs5XSxoPWVbMTBdLHA9ZVsxMV0sZD1lWzEyXSxtPWVbMTNdLGc9ZVsxNF0sdj1lWzE1XTtyZXR1cm4gdFswXT1zKihoKnYtcCpnKS1mKihsKnYtYypnKSttKihsKnAtYypoKSx0WzFdPS0obiooaCp2LXAqZyktZiooaSp2LWEqZykrbSooaSpwLWEqaCkpLHRbMl09bioobCp2LWMqZyktcyooaSp2LWEqZykrbSooaSpjLWEqbCksdFszXT0tKG4qKGwqcC1jKmgpLXMqKGkqcC1hKmgpK2YqKGkqYy1hKmwpKSx0WzRdPS0obyooaCp2LXAqZyktdSoobCp2LWMqZykrZCoobCpwLWMqaCkpLHRbNV09ciooaCp2LXAqZyktdSooaSp2LWEqZykrZCooaSpwLWEqaCksdFs2XT0tKHIqKGwqdi1jKmcpLW8qKGkqdi1hKmcpK2QqKGkqYy1hKmwpKSx0WzddPXIqKGwqcC1jKmgpLW8qKGkqcC1hKmgpK3UqKGkqYy1hKmwpLHRbOF09byooZip2LXAqbSktdSoocyp2LWMqbSkrZCoocypwLWMqZiksdFs5XT0tKHIqKGYqdi1wKm0pLXUqKG4qdi1hKm0pK2QqKG4qcC1hKmYpKSx0WzEwXT1yKihzKnYtYyptKS1vKihuKnYtYSptKStkKihuKmMtYSpzKSx0WzExXT0tKHIqKHMqcC1jKmYpLW8qKG4qcC1hKmYpK3UqKG4qYy1hKnMpKSx0WzEyXT0tKG8qKGYqZy1oKm0pLXUqKHMqZy1sKm0pK2QqKHMqaC1sKmYpKSx0WzEzXT1yKihmKmctaCptKS11KihuKmctaSptKStkKihuKmgtaSpmKSx0WzE0XT0tKHIqKHMqZy1sKm0pLW8qKG4qZy1pKm0pK2QqKG4qbC1pKnMpKSx0WzE1XT1yKihzKmgtbCpmKS1vKihuKmgtaSpmKSt1KihuKmwtaSpzKSx0fX0se31dLDI3MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGVbNF09dFs0XSxlWzVdPXRbNV0sZVs2XT10WzZdLGVbN109dFs3XSxlWzhdPXRbOF0sZVs5XT10WzldLGVbMTBdPXRbMTBdLGVbMTFdPXRbMTFdLGVbMTJdPXRbMTJdLGVbMTNdPXRbMTNdLGVbMTRdPXRbMTRdLGVbMTVdPXRbMTVdLGV9fSx7fV0sMjczOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFs4XT1lWzhdLHRbOV09ZVs5XSx0WzEwXT1lWzEwXSx0WzExXT1lWzExXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSx0fX0se31dLDI3NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyNzU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXSxhPXRbNF0sbz10WzVdLHM9dFs2XSxsPXRbN10sYz10WzhdLHU9dFs5XSxmPXRbMTBdLGg9dFsxMV0scD10WzEyXSxkPXRbMTNdLG09dFsxNF0sZz10WzE1XTtyZXR1cm4oZSpvLXIqYSkqKGYqZy1oKm0pLShlKnMtbiphKSoodSpnLWgqZCkrKGUqbC1pKmEpKih1Km0tZipkKSsocipzLW4qbykqKGMqZy1oKnApLShyKmwtaSpvKSooYyptLWYqcCkrKG4qbC1pKnMpKihjKmQtdSpwKX19LHt9XSwyNzY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89cityLHM9bituLGw9aStpLGM9cipvLHU9bipvLGY9bipzLGg9aSpvLHA9aSpzLGQ9aSpsLG09YSpvLGc9YSpzLHY9YSpsO3JldHVybiB0WzBdPTEtZi1kLHRbMV09dSt2LHRbMl09aC1nLHRbM109MCx0WzRdPXUtdix0WzVdPTEtYy1kLHRbNl09cCttLHRbN109MCx0WzhdPWgrZyx0WzldPXAtbSx0WzEwXT0xLWMtZix0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyNzc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvPXJbMF0scz1yWzFdLGw9clsyXSxjPU1hdGguc3FydChvKm8rcypzK2wqbCk7aWYoTWF0aC5hYnMoYyk8MWUtNilyZXR1cm4gbnVsbDtyZXR1cm4gbyo9Yz0xL2Mscyo9YyxsKj1jLG49TWF0aC5zaW4oZSksaT1NYXRoLmNvcyhlKSxhPTEtaSx0WzBdPW8qbyphK2ksdFsxXT1zKm8qYStsKm4sdFsyXT1sKm8qYS1zKm4sdFszXT0wLHRbNF09bypzKmEtbCpuLHRbNV09cypzKmEraSx0WzZdPWwqcyphK28qbix0WzddPTAsdFs4XT1vKmwqYStzKm4sdFs5XT1zKmwqYS1vKm4sdFsxMF09bCpsKmEraSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyNzg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1uK24sbD1pK2ksYz1hK2EsdT1uKnMsZj1uKmwsaD1uKmMscD1pKmwsZD1pKmMsbT1hKmMsZz1vKnMsdj1vKmwseT1vKmM7cmV0dXJuIHRbMF09MS0ocCttKSx0WzFdPWYreSx0WzJdPWgtdix0WzNdPTAsdFs0XT1mLXksdFs1XT0xLSh1K20pLHRbNl09ZCtnLHRbN109MCx0WzhdPWgrdix0WzldPWQtZyx0WzEwXT0xLSh1K3ApLHRbMTFdPTAsdFsxMl09clswXSx0WzEzXT1yWzFdLHRbMTRdPXJbMl0sdFsxNV09MSx0fX0se31dLDI3OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09ZVsxXSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09ZVsyXSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyODA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT1lWzBdLHRbMTNdPWVbMV0sdFsxNF09ZVsyXSx0WzE1XT0xLHR9fSx7fV0sMjgxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zaW4oZSksbj1NYXRoLmNvcyhlKTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPW4sdFs2XT1yLHRbN109MCx0WzhdPTAsdFs5XT0tcix0WzEwXT1uLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDI4MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc2luKGUpLG49TWF0aC5jb3MoZSk7cmV0dXJuIHRbMF09bix0WzFdPTAsdFsyXT0tcix0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09cix0WzldPTAsdFsxMF09bix0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyODM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNpbihlKSxuPU1hdGguY29zKGUpO3JldHVybiB0WzBdPW4sdFsxXT1yLHRbMl09MCx0WzNdPTAsdFs0XT0tcix0WzVdPW4sdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9fSx7fV0sMjg0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTEvKHItZSksbD0xLyhpLW4pLGM9MS8oYS1vKTtyZXR1cm4gdFswXT0yKmEqcyx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0yKmEqbCx0WzZdPTAsdFs3XT0wLHRbOF09KHIrZSkqcyx0WzldPShpK24pKmwsdFsxMF09KG8rYSkqYyx0WzExXT0tMSx0WzEyXT0wLHRbMTNdPTAsdFsxNF09byphKjIqYyx0WzE1XT0wLHR9fSx7fV0sMjg1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyODY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2NyZWF0ZTp0KCIuL2NyZWF0ZSIpLGNsb25lOnQoIi4vY2xvbmUiKSxjb3B5OnQoIi4vY29weSIpLGlkZW50aXR5OnQoIi4vaWRlbnRpdHkiKSx0cmFuc3Bvc2U6dCgiLi90cmFuc3Bvc2UiKSxpbnZlcnQ6dCgiLi9pbnZlcnQiKSxhZGpvaW50OnQoIi4vYWRqb2ludCIpLGRldGVybWluYW50OnQoIi4vZGV0ZXJtaW5hbnQiKSxtdWx0aXBseTp0KCIuL211bHRpcGx5IiksdHJhbnNsYXRlOnQoIi4vdHJhbnNsYXRlIiksc2NhbGU6dCgiLi9zY2FsZSIpLHJvdGF0ZTp0KCIuL3JvdGF0ZSIpLHJvdGF0ZVg6dCgiLi9yb3RhdGVYIikscm90YXRlWTp0KCIuL3JvdGF0ZVkiKSxyb3RhdGVaOnQoIi4vcm90YXRlWiIpLGZyb21Sb3RhdGlvbjp0KCIuL2Zyb21Sb3RhdGlvbiIpLGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uOnQoIi4vZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24iKSxmcm9tU2NhbGluZzp0KCIuL2Zyb21TY2FsaW5nIiksZnJvbVRyYW5zbGF0aW9uOnQoIi4vZnJvbVRyYW5zbGF0aW9uIiksZnJvbVhSb3RhdGlvbjp0KCIuL2Zyb21YUm90YXRpb24iKSxmcm9tWVJvdGF0aW9uOnQoIi4vZnJvbVlSb3RhdGlvbiIpLGZyb21aUm90YXRpb246dCgiLi9mcm9tWlJvdGF0aW9uIiksZnJvbVF1YXQ6dCgiLi9mcm9tUXVhdCIpLGZydXN0dW06dCgiLi9mcnVzdHVtIikscGVyc3BlY3RpdmU6dCgiLi9wZXJzcGVjdGl2ZSIpLHBlcnNwZWN0aXZlRnJvbUZpZWxkT2ZWaWV3OnQoIi4vcGVyc3BlY3RpdmVGcm9tRmllbGRPZlZpZXciKSxvcnRobzp0KCIuL29ydGhvIiksbG9va0F0OnQoIi4vbG9va0F0Iiksc3RyOnQoIi4vc3RyIil9fSx7Ii4vYWRqb2ludCI6MjcxLCIuL2Nsb25lIjoyNzIsIi4vY29weSI6MjczLCIuL2NyZWF0ZSI6Mjc0LCIuL2RldGVybWluYW50IjoyNzUsIi4vZnJvbVF1YXQiOjI3NiwiLi9mcm9tUm90YXRpb24iOjI3NywiLi9mcm9tUm90YXRpb25UcmFuc2xhdGlvbiI6Mjc4LCIuL2Zyb21TY2FsaW5nIjoyNzksIi4vZnJvbVRyYW5zbGF0aW9uIjoyODAsIi4vZnJvbVhSb3RhdGlvbiI6MjgxLCIuL2Zyb21ZUm90YXRpb24iOjI4MiwiLi9mcm9tWlJvdGF0aW9uIjoyODMsIi4vZnJ1c3R1bSI6Mjg0LCIuL2lkZW50aXR5IjoyODUsIi4vaW52ZXJ0IjoyODcsIi4vbG9va0F0IjoyODgsIi4vbXVsdGlwbHkiOjI4OSwiLi9vcnRobyI6MjkwLCIuL3BlcnNwZWN0aXZlIjoyOTEsIi4vcGVyc3BlY3RpdmVGcm9tRmllbGRPZlZpZXciOjI5MiwiLi9yb3RhdGUiOjI5MywiLi9yb3RhdGVYIjoyOTQsIi4vcm90YXRlWSI6Mjk1LCIuL3JvdGF0ZVoiOjI5NiwiLi9zY2FsZSI6Mjk3LCIuL3N0ciI6Mjk4LCIuL3RyYW5zbGF0ZSI6Mjk5LCIuL3RyYW5zcG9zZSI6MzAwfV0sMjg3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGY9ZVs5XSxoPWVbMTBdLHA9ZVsxMV0sZD1lWzEyXSxtPWVbMTNdLGc9ZVsxNF0sdj1lWzE1XSx5PXIqcy1uKm8seD1yKmwtaSpvLGI9cipjLWEqbyxfPW4qbC1pKnMsdz1uKmMtYSpzLFQ9aSpjLWEqbCxrPXUqbS1mKmQsQT11KmctaCpkLE09dSp2LXAqZCxTPWYqZy1oKm0sRT1mKnYtcCptLEw9aCp2LXAqZyxDPXkqTC14KkUrYipTK18qTS13KkErVCprO2lmKCFDKXJldHVybiBudWxsO3JldHVybiBDPTEvQyx0WzBdPShzKkwtbCpFK2MqUykqQyx0WzFdPShpKkUtbipMLWEqUykqQyx0WzJdPShtKlQtZyp3K3YqXykqQyx0WzNdPShoKnctZipULXAqXykqQyx0WzRdPShsKk0tbypMLWMqQSkqQyx0WzVdPShyKkwtaSpNK2EqQSkqQyx0WzZdPShnKmItZCpULXYqeCkqQyx0WzddPSh1KlQtaCpiK3AqeCkqQyx0WzhdPShvKkUtcypNK2MqaykqQyx0WzldPShuKk0tcipFLWEqaykqQyx0WzEwXT0oZCp3LW0qYit2KnkpKkMsdFsxMV09KGYqYi11KnctcCp5KSpDLHRbMTJdPShzKkEtbypTLWwqaykqQyx0WzEzXT0ocipTLW4qQStpKmspKkMsdFsxNF09KG0qeC1kKl8tZyp5KSpDLHRbMTVdPSh1Kl8tZip4K2gqeSkqQyx0fX0se31dLDI4ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vaWRlbnRpdHkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzLGwsYyx1LGYsaCxwLGQsbT1lWzBdLGc9ZVsxXSx2PWVbMl0seT1pWzBdLHg9aVsxXSxiPWlbMl0sXz1yWzBdLHc9clsxXSxUPXJbMl07aWYoTWF0aC5hYnMobS1fKTwxZS02JiZNYXRoLmFicyhnLXcpPDFlLTYmJk1hdGguYWJzKHYtVCk8MWUtNilyZXR1cm4gbih0KTtmPW0tXyxoPWctdyxwPXYtVCxkPTEvTWF0aC5zcXJ0KGYqZitoKmgrcCpwKSxhPXgqKHAqPWQpLWIqKGgqPWQpLG89YiooZio9ZCkteSpwLHM9eSpoLXgqZiwoZD1NYXRoLnNxcnQoYSphK28qbytzKnMpKT8oYSo9ZD0xL2Qsbyo9ZCxzKj1kKTooYT0wLG89MCxzPTApO2w9aCpzLXAqbyxjPXAqYS1mKnMsdT1mKm8taCphLChkPU1hdGguc3FydChsKmwrYypjK3UqdSkpPyhsKj1kPTEvZCxjKj1kLHUqPWQpOihsPTAsYz0wLHU9MCk7cmV0dXJuIHRbMF09YSx0WzFdPWwsdFsyXT1mLHRbM109MCx0WzRdPW8sdFs1XT1jLHRbNl09aCx0WzddPTAsdFs4XT1zLHRbOV09dSx0WzEwXT1wLHRbMTFdPTAsdFsxMl09LShhKm0rbypnK3MqdiksdFsxM109LShsKm0rYypnK3UqdiksdFsxNF09LShmKm0raCpnK3AqdiksdFsxNV09MSx0fX0seyIuL2lkZW50aXR5IjoyODV9XSwyODk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGY9ZVs4XSxoPWVbOV0scD1lWzEwXSxkPWVbMTFdLG09ZVsxMl0sZz1lWzEzXSx2PWVbMTRdLHk9ZVsxNV0seD1yWzBdLGI9clsxXSxfPXJbMl0sdz1yWzNdO3JldHVybiB0WzBdPXgqbitiKnMrXypmK3cqbSx0WzFdPXgqaStiKmwrXypoK3cqZyx0WzJdPXgqYStiKmMrXypwK3cqdix0WzNdPXgqbytiKnUrXypkK3cqeSx4PXJbNF0sYj1yWzVdLF89cls2XSx3PXJbN10sdFs0XT14Km4rYipzK18qZit3Km0sdFs1XT14KmkrYipsK18qaCt3KmcsdFs2XT14KmErYipjK18qcCt3KnYsdFs3XT14Km8rYip1K18qZCt3KnkseD1yWzhdLGI9cls5XSxfPXJbMTBdLHc9clsxMV0sdFs4XT14Km4rYipzK18qZit3Km0sdFs5XT14KmkrYipsK18qaCt3KmcsdFsxMF09eCphK2IqYytfKnArdyp2LHRbMTFdPXgqbytiKnUrXypkK3cqeSx4PXJbMTJdLGI9clsxM10sXz1yWzE0XSx3PXJbMTVdLHRbMTJdPXgqbitiKnMrXypmK3cqbSx0WzEzXT14KmkrYipsK18qaCt3KmcsdFsxNF09eCphK2IqYytfKnArdyp2LHRbMTVdPXgqbytiKnUrXypkK3cqeSx0fX0se31dLDI5MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz0xLyhlLXIpLGw9MS8obi1pKSxjPTEvKGEtbyk7cmV0dXJuIHRbMF09LTIqcyx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0tMipsLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0yKmMsdFsxMV09MCx0WzEyXT0oZStyKSpzLHRbMTNdPShpK24pKmwsdFsxNF09KG8rYSkqYyx0WzE1XT0xLHR9fSx7fV0sMjkxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9MS9NYXRoLnRhbihlLzIpLG89MS8obi1pKTtyZXR1cm4gdFswXT1hL3IsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09YSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09KGkrbikqbyx0WzExXT0tMSx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MippKm4qbyx0WzE1XT0wLHR9fSx7fV0sMjkyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPU1hdGgudGFuKGUudXBEZWdyZWVzKk1hdGguUEkvMTgwKSxhPU1hdGgudGFuKGUuZG93bkRlZ3JlZXMqTWF0aC5QSS8xODApLG89TWF0aC50YW4oZS5sZWZ0RGVncmVlcypNYXRoLlBJLzE4MCkscz1NYXRoLnRhbihlLnJpZ2h0RGVncmVlcypNYXRoLlBJLzE4MCksbD0yLyhvK3MpLGM9Mi8oaSthKTtyZXR1cm4gdFswXT1sLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPWMsdFs2XT0wLHRbN109MCx0WzhdPS0oby1zKSpsKi41LHRbOV09KGktYSkqYyouNSx0WzEwXT1uLyhyLW4pLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT1uKnIvKHItbiksdFsxNV09MCx0fX0se31dLDI5MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2LHkseCxiLF8sdyxULGssQSxNLFMsRT1uWzBdLEw9blsxXSxDPW5bMl0sUD1NYXRoLnNxcnQoRSpFK0wqTCtDKkMpO2lmKE1hdGguYWJzKFApPDFlLTYpcmV0dXJuIG51bGw7RSo9UD0xL1AsTCo9UCxDKj1QLGk9TWF0aC5zaW4ociksYT1NYXRoLmNvcyhyKSxvPTEtYSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PWVbM10sZj1lWzRdLGg9ZVs1XSxwPWVbNl0sZD1lWzddLG09ZVs4XSxnPWVbOV0sdj1lWzEwXSx5PWVbMTFdLHg9RSpFKm8rYSxiPUwqRSpvK0MqaSxfPUMqRSpvLUwqaSx3PUUqTCpvLUMqaSxUPUwqTCpvK2Esaz1DKkwqbytFKmksQT1FKkMqbytMKmksTT1MKkMqby1FKmksUz1DKkMqbythLHRbMF09cyp4K2YqYittKl8sdFsxXT1sKngraCpiK2cqXyx0WzJdPWMqeCtwKmIrdipfLHRbM109dSp4K2QqYit5Kl8sdFs0XT1zKncrZipUK20qayx0WzVdPWwqdytoKlQrZyprLHRbNl09Yyp3K3AqVCt2KmssdFs3XT11KncrZCpUK3kqayx0WzhdPXMqQStmKk0rbSpTLHRbOV09bCpBK2gqTStnKlMsdFsxMF09YypBK3AqTSt2KlMsdFsxMV09dSpBK2QqTSt5KlMsZSE9PXQmJih0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHR9fSx7fV0sMjk0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVs0XSxvPWVbNV0scz1lWzZdLGw9ZVs3XSxjPWVbOF0sdT1lWzldLGY9ZVsxMF0saD1lWzExXTtlIT09dCYmKHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHRbNF09YSppK2Mqbix0WzVdPW8qaSt1Km4sdFs2XT1zKmkrZipuLHRbN109bCppK2gqbix0WzhdPWMqaS1hKm4sdFs5XT11KmktbypuLHRbMTBdPWYqaS1zKm4sdFsxMV09aCppLWwqbix0fX0se31dLDI5NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sYz1lWzhdLHU9ZVs5XSxmPWVbMTBdLGg9ZVsxMV07ZSE9PXQmJih0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0WzBdPWEqaS1jKm4sdFsxXT1vKmktdSpuLHRbMl09cyppLWYqbix0WzNdPWwqaS1oKm4sdFs4XT1hKm4rYyppLHRbOV09bypuK3UqaSx0WzEwXT1zKm4rZippLHRbMTFdPWwqbitoKmksdH19LHt9XSwyOTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLGM9ZVs0XSx1PWVbNV0sZj1lWzZdLGg9ZVs3XTtlIT09dCYmKHRbOF09ZVs4XSx0WzldPWVbOV0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxMV0sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0WzBdPWEqaStjKm4sdFsxXT1vKmkrdSpuLHRbMl09cyppK2Yqbix0WzNdPWwqaStoKm4sdFs0XT1jKmktYSpuLHRbNV09dSppLW8qbix0WzZdPWYqaS1zKm4sdFs3XT1oKmktbCpuLHR9fSx7fV0sMjk3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yWzBdLGk9clsxXSxhPXJbMl07cmV0dXJuIHRbMF09ZVswXSpuLHRbMV09ZVsxXSpuLHRbMl09ZVsyXSpuLHRbM109ZVszXSpuLHRbNF09ZVs0XSppLHRbNV09ZVs1XSppLHRbNl09ZVs2XSppLHRbN109ZVs3XSppLHRbOF09ZVs4XSphLHRbOV09ZVs5XSphLHRbMTBdPWVbMTBdKmEsdFsxMV09ZVsxMV0qYSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSx0fX0se31dLDI5ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ibWF0NCgiK3RbMF0rIiwgIit0WzFdKyIsICIrdFsyXSsiLCAiK3RbM10rIiwgIit0WzRdKyIsICIrdFs1XSsiLCAiK3RbNl0rIiwgIit0WzddKyIsICIrdFs4XSsiLCAiK3RbOV0rIiwgIit0WzEwXSsiLCAiK3RbMTFdKyIsICIrdFsxMl0rIiwgIit0WzEzXSsiLCAiK3RbMTRdKyIsICIrdFsxNV0rIikifX0se31dLDI5OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG09clswXSxnPXJbMV0sdj1yWzJdO2U9PT10Pyh0WzEyXT1lWzBdKm0rZVs0XSpnK2VbOF0qditlWzEyXSx0WzEzXT1lWzFdKm0rZVs1XSpnK2VbOV0qditlWzEzXSx0WzE0XT1lWzJdKm0rZVs2XSpnK2VbMTBdKnYrZVsxNF0sdFsxNV09ZVszXSptK2VbN10qZytlWzExXSp2K2VbMTVdKToobj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxmPWVbOF0saD1lWzldLHA9ZVsxMF0sZD1lWzExXSx0WzBdPW4sdFsxXT1pLHRbMl09YSx0WzNdPW8sdFs0XT1zLHRbNV09bCx0WzZdPWMsdFs3XT11LHRbOF09Zix0WzldPWgsdFsxMF09cCx0WzExXT1kLHRbMTJdPW4qbStzKmcrZip2K2VbMTJdLHRbMTNdPWkqbStsKmcraCp2K2VbMTNdLHRbMTRdPWEqbStjKmcrcCp2K2VbMTRdLHRbMTVdPW8qbSt1KmcrZCp2K2VbMTVdKTtyZXR1cm4gdH19LHt9XSwzMDA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0PT09ZSl7dmFyIHI9ZVsxXSxuPWVbMl0saT1lWzNdLGE9ZVs2XSxvPWVbN10scz1lWzExXTt0WzFdPWVbNF0sdFsyXT1lWzhdLHRbM109ZVsxMl0sdFs0XT1yLHRbNl09ZVs5XSx0WzddPWVbMTNdLHRbOF09bix0WzldPWEsdFsxMV09ZVsxNF0sdFsxMl09aSx0WzEzXT1vLHRbMTRdPXN9ZWxzZSB0WzBdPWVbMF0sdFsxXT1lWzRdLHRbMl09ZVs4XSx0WzNdPWVbMTJdLHRbNF09ZVsxXSx0WzVdPWVbNV0sdFs2XT1lWzldLHRbN109ZVsxM10sdFs4XT1lWzJdLHRbOV09ZVs2XSx0WzEwXT1lWzEwXSx0WzExXT1lWzE0XSx0WzEyXT1lWzNdLHRbMTNdPWVbN10sdFsxNF09ZVsxMV0sdFsxNV09ZVsxNV07cmV0dXJuIHR9fSx7fV0sMzAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJhcnljZW50cmljIiksaT10KCJwb2x5dG9wZS1jbG9zZXN0LXBvaW50L2xpYi9jbG9zZXN0X3BvaW50XzJkLmpzIik7ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1bMCwwLDAsMF0sbj0wO248NDsrK24pZm9yKHZhciBpPTA7aTw0OysraSlyW2ldKz10WzQqbitpXSplW25dO3JldHVybiByfWZ1bmN0aW9uIG8odCxlLHIsbixpKXtmb3IodmFyIG89YShuLGEocixhKGUsW3RbMF0sdFsxXSx0WzJdLDFdKSkpLHM9MDtzPDM7KytzKW9bc10vPW9bM107cmV0dXJuWy41KmlbMF0qKDErb1swXSksLjUqaVsxXSooMS1vWzFdKV19ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcj1bMCwwLDBdLG49MDtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9dFtuXSxhPWVbbl0sbz0wO288MzsrK28pcltvXSs9YSppW29dO3JldHVybiByfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLGwsYyl7aWYoMT09PXQubGVuZ3RoKXJldHVyblswLHRbMF0uc2xpY2UoKV07Zm9yKHZhciB1PW5ldyBBcnJheSh0Lmxlbmd0aCksZj0wO2Y8dC5sZW5ndGg7KytmKXVbZl09byh0W2ZdLHIsYSxsLGMpO3ZhciBoPTAscD0xLzA7Zm9yKGY9MDtmPHUubGVuZ3RoOysrZil7Zm9yKHZhciBkPTAsbT0wO208MjsrK20pZCs9TWF0aC5wb3codVtmXVttXS1lW21dLDIpO2Q8cCYmKHA9ZCxoPWYpfXZhciBnPWZ1bmN0aW9uKHQsZSl7aWYoMj09PXQubGVuZ3RoKXtmb3IodmFyIHI9MCxhPTAsbz0wO288MjsrK28pcis9TWF0aC5wb3coZVtvXS10WzBdW29dLDIpLGErPU1hdGgucG93KGVbb10tdFsxXVtvXSwyKTtyZXR1cm4gcj1NYXRoLnNxcnQociksYT1NYXRoLnNxcnQoYSkscithPDFlLTY/WzEsMF06W2EvKHIrYSksci8oYStyKV19aWYoMz09PXQubGVuZ3RoKXt2YXIgcz1bMCwwXTtyZXR1cm4gaSh0WzBdLHRbMV0sdFsyXSxlLHMpLG4odCxzKX1yZXR1cm5bXX0odSxlKSx2PTA7Zm9yKGY9MDtmPDM7KytmKXtpZihnW2ZdPC0uMDAxfHxnW2ZdPjEuMDAwMSlyZXR1cm4gbnVsbDt2Kz1nW2ZdfWlmKE1hdGguYWJzKHYtMSk+LjAwMSlyZXR1cm4gbnVsbDtyZXR1cm5baCxzKHQsZyksZ119fSx7YmFyeWNlbnRyaWM6ODEsInBvbHl0b3BlLWNsb3Nlc3QtcG9pbnQvbGliL2Nsb3Nlc3RfcG9pbnRfMmQuanMiOjQ4OH1dLDMwMjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsc2xpZnkiKSxpPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgbm9ybWFsO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiB1djtcblxudW5pZm9ybSBtYXQ0IG1vZGVsXG4gICAgICAgICAgICwgdmlld1xuICAgICAgICAgICAsIHByb2plY3Rpb25cbiAgICAgICAgICAgLCBpbnZlcnNlTW9kZWw7XG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb25cbiAgICAgICAgICAgLCBsaWdodFBvc2l0aW9uO1xuXG52YXJ5aW5nIHZlYzMgZl9ub3JtYWxcbiAgICAgICAgICAgLCBmX2xpZ2h0RGlyZWN0aW9uXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2RhdGE7XG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52ZWM0IHByb2plY3QodmVjMyBwKSB7XG4gIHJldHVybiBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uICAgICAgPSBwcm9qZWN0KHBvc2l0aW9uKTtcblxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIHZlYzQocG9zaXRpb24gLCAxLjApO1xuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XG4gIGZfbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfZXllRGlyZWN0aW9uICAgPSBleWVQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBmX25vcm1hbCAgPSBub3JtYWxpemUoKHZlYzQobm9ybWFsLCAwLjApICogaW52ZXJzZU1vZGVsKS54eXopO1xuXG4gIGZfY29sb3IgICAgICAgICAgPSBjb2xvcjtcbiAgZl9kYXRhICAgICAgICAgICA9IHBvc2l0aW9uO1xuICBmX3V2ICAgICAgICAgICAgID0gdXY7XG59XG4iXSksYT1uKFsiI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGVcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XG4gIGZsb2F0IGNvczJBbHBoYSA9IE5kb3RIICogTmRvdEg7XG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xuICBmbG9hdCBkZW5vbSA9IDMuMTQxNTkyNjUzNTg5NzkzICogcm91Z2huZXNzMiAqIGNvczJBbHBoYSAqIGNvczJBbHBoYTtcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xufVxuXG5mbG9hdCBjb29rVG9ycmFuY2VTcGVjdWxhcihcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXG4gIGZsb2F0IHJvdWdobmVzcyxcbiAgZmxvYXQgZnJlc25lbCkge1xuXG4gIGZsb2F0IFZkb3ROID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcbiAgZmxvYXQgTGRvdE4gPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcblxuICAvL0hhbGYgYW5nbGUgdmVjdG9yXG4gIHZlYzMgSCA9IG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiArIHZpZXdEaXJlY3Rpb24pO1xuXG4gIC8vR2VvbWV0cmljIHRlcm1cbiAgZmxvYXQgTmRvdEggPSBtYXgoZG90KHN1cmZhY2VOb3JtYWwsIEgpLCAwLjApO1xuICBmbG9hdCBWZG90SCA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgTGRvdEggPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBHMSA9ICgyLjAgKiBOZG90SCAqIFZkb3ROKSAvIFZkb3RIO1xuICBmbG9hdCBHMiA9ICgyLjAgKiBOZG90SCAqIExkb3ROKSAvIExkb3RIO1xuICBmbG9hdCBHID0gbWluKDEuMCwgbWluKEcxLCBHMikpO1xuICBcbiAgLy9EaXN0cmlidXRpb24gdGVybVxuICBmbG9hdCBEID0gYmVja21hbm5EaXN0cmlidXRpb24oTmRvdEgsIHJvdWdobmVzcyk7XG5cbiAgLy9GcmVzbmVsIHRlcm1cbiAgZmxvYXQgRiA9IHBvdygxLjAgLSBWZG90TiwgZnJlc25lbCk7XG5cbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxuICByZXR1cm4gIEcgKiBGICogRCAvIG1heCgzLjE0MTU5MjY1ICogVmRvdE4sIDAuMDAwMDAxKTtcbn1cblxuLy8jcHJhZ21hIGdsc2xpZnk6IGJlY2ttYW5uID0gcmVxdWlyZShnbHNsLXNwZWN1bGFyLWJlY2ttYW5uKSAvLyB1c2VkIGluIGdsLXN1cmZhY2UzZFxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzc1xuICAgICAgICAgICAgLCBmcmVzbmVsXG4gICAgICAgICAgICAsIGthbWJpZW50XG4gICAgICAgICAgICAsIGtkaWZmdXNlXG4gICAgICAgICAgICAsIGtzcGVjdWxhcjtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YTtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKGZfY29sb3IuYSA9PSAwLjAgfHxcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfZGF0YSlcbiAgKSBkaXNjYXJkO1xuXG4gIHZlYzMgTiA9IG5vcm1hbGl6ZShmX25vcm1hbCk7XG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShmX2xpZ2h0RGlyZWN0aW9uKTtcbiAgdmVjMyBWID0gbm9ybWFsaXplKGZfZXllRGlyZWN0aW9uKTtcblxuICBpZihnbF9Gcm9udEZhY2luZykge1xuICAgIE4gPSAtTjtcbiAgfVxuXG4gIGZsb2F0IHNwZWN1bGFyID0gbWluKDEuMCwgbWF4KDAuMCwgY29va1RvcnJhbmNlU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKSkpO1xuICAvL2Zsb2F0IHNwZWN1bGFyID0gbWF4KDAuMCwgYmVja21hbm4oTCwgViwgTiwgcm91Z2huZXNzKSk7IC8vIHVzZWQgaW4gZ2wtc3VyZmFjZTNkXG5cbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XG5cbiAgdmVjNCBzdXJmYWNlQ29sb3IgPSB2ZWM0KGZfY29sb3IucmdiLCAxLjApICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpO1xuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gbGl0Q29sb3IgKiBmX2NvbG9yLmE7XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMzIGZfZGF0YTtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIGZfY29sb3IgPSBjb2xvcjtcbiAgZl9kYXRhICA9IHBvc2l0aW9uO1xuICBmX3V2ICAgID0gdXY7XG59Il0pLHM9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMzIGZfZGF0YTtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfZGF0YSkpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gZl9jb2xvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KSAqIG9wYWNpdHk7XG59Il0pLGw9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgdXY7XG5hdHRyaWJ1dGUgZmxvYXQgcG9pbnRTaXplO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcblxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLjAsIDAuMCAsMC4wICwwLjApO1xuICB9IGVsc2Uge1xuICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIH1cbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xuICBmX2NvbG9yID0gY29sb3I7XG4gIGZfdXYgPSB1djtcbn0iXSksYz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIHBvaW50UiA9IGdsX1BvaW50Q29vcmQueHkgLSB2ZWMyKDAuNSwgMC41KTtcbiAgaWYoZG90KHBvaW50UiwgcG9pbnRSKSA+IDAuMjUpIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dikgKiBvcGFjaXR5O1xufSJdKSx1PW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgZl9pZCAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbjtcbn0iXSksZj1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCBmX2lkLnh5eik7XG59Il0pLGg9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyAgcG9zaXRpb247XG5hdHRyaWJ1dGUgZmxvYXQgcG9pbnRTaXplO1xuYXR0cmlidXRlIHZlYzQgIGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcblxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuICB9IGVsc2Uge1xuICAgIGdsX1Bvc2l0aW9uICA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcbiAgfVxuICBmX2lkICAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgID0gcG9zaXRpb247XG59Il0pLHA9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbn0iXSksZD1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWMzIGNvbnRvdXJDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbnRvdXJDb2xvciwgMS4wKTtcbn1cbiJdKTtyLm1lc2hTaGFkZXI9e3ZlcnRleDppLGZyYWdtZW50OmEsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5vcm1hbCIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9XX0sci53aXJlU2hhZGVyPXt2ZXJ0ZXg6byxmcmFnbWVudDpzLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9XX0sci5wb2ludFNoYWRlcj17dmVydGV4OmwsZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifSx7bmFtZToicG9pbnRTaXplIix0eXBlOiJmbG9hdCJ9XX0sci5waWNrU2hhZGVyPXt2ZXJ0ZXg6dSxmcmFnbWVudDpmLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJpZCIsdHlwZToidmVjNCJ9XX0sci5wb2ludFBpY2tTaGFkZXI9e3ZlcnRleDpoLGZyYWdtZW50OmYsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6InBvaW50U2l6ZSIsdHlwZToiZmxvYXQifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifV19LHIuY29udG91clNoYWRlcj17dmVydGV4OnAsZnJhZ21lbnQ6ZCxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifV19fSx7Z2xzbGlmeTo0MjR9XSwzMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbC1idWZmZXIiKSxhPXQoImdsLXZhbyIpLG89dCgiZ2wtdGV4dHVyZTJkIikscz10KCJub3JtYWxzIiksbD10KCJnbC1tYXQ0L211bHRpcGx5IiksYz10KCJnbC1tYXQ0L2ludmVydCIpLHU9dCgibmRhcnJheSIpLGY9dCgiY29sb3JtYXAiKSxoPXQoInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIikscD10KCJ0eXBlZGFycmF5LXBvb2wiKSxkPXQoIi4vbGliL3NoYWRlcnMiKSxtPXQoIi4vbGliL2Nsb3Nlc3QtcG9pbnQiKSxnPWQubWVzaFNoYWRlcix2PWQud2lyZVNoYWRlcix5PWQucG9pbnRTaGFkZXIseD1kLnBpY2tTaGFkZXIsYj1kLnBvaW50UGlja1NoYWRlcixfPWQuY29udG91clNoYWRlcix3PVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBUKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2LHkseCxiLF8sVCxrLEEsTSxTKXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5jZWxscz1bXSx0aGlzLnBvc2l0aW9ucz1bXSx0aGlzLmludGVuc2l0eT1bXSx0aGlzLnRleHR1cmU9ZSx0aGlzLmRpcnR5PSEwLHRoaXMudHJpU2hhZGVyPXIsdGhpcy5saW5lU2hhZGVyPW4sdGhpcy5wb2ludFNoYWRlcj1pLHRoaXMucGlja1NoYWRlcj1hLHRoaXMucG9pbnRQaWNrU2hhZGVyPW8sdGhpcy5jb250b3VyU2hhZGVyPXMsdGhpcy50cmlhbmdsZVBvc2l0aW9ucz1sLHRoaXMudHJpYW5nbGVDb2xvcnM9dSx0aGlzLnRyaWFuZ2xlTm9ybWFscz1oLHRoaXMudHJpYW5nbGVVVnM9Zix0aGlzLnRyaWFuZ2xlSWRzPWMsdGhpcy50cmlhbmdsZVZBTz1wLHRoaXMudHJpYW5nbGVDb3VudD0wLHRoaXMubGluZVdpZHRoPTEsdGhpcy5lZGdlUG9zaXRpb25zPWQsdGhpcy5lZGdlQ29sb3JzPWcsdGhpcy5lZGdlVVZzPXYsdGhpcy5lZGdlSWRzPW0sdGhpcy5lZGdlVkFPPXksdGhpcy5lZGdlQ291bnQ9MCx0aGlzLnBvaW50UG9zaXRpb25zPXgsdGhpcy5wb2ludENvbG9ycz1fLHRoaXMucG9pbnRVVnM9VCx0aGlzLnBvaW50U2l6ZXM9ayx0aGlzLnBvaW50SWRzPWIsdGhpcy5wb2ludFZBTz1BLHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29udG91ckxpbmVXaWR0aD0xLHRoaXMuY29udG91clBvc2l0aW9ucz1NLHRoaXMuY29udG91clZBTz1TLHRoaXMuY29udG91ckNvdW50PTAsdGhpcy5jb250b3VyQ29sb3I9WzAsMCwwXSx0aGlzLmNvbnRvdXJFbmFibGU9ITAsdGhpcy5waWNrVmVydGV4PSEwLHRoaXMucGlja0lkPTEsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMubGlnaHRQb3NpdGlvbj1bMWU1LDFlNSwwXSx0aGlzLmFtYmllbnRMaWdodD0uOCx0aGlzLmRpZmZ1c2VMaWdodD0uOCx0aGlzLnNwZWN1bGFyTGlnaHQ9Mix0aGlzLnJvdWdobmVzcz0uNSx0aGlzLmZyZXNuZWw9MS41LHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5vcGFjaXR5c2NhbGU9ITEsdGhpcy5fbW9kZWw9dyx0aGlzLl92aWV3PXcsdGhpcy5fcHJvamVjdGlvbj13LHRoaXMuX3Jlc29sdXRpb249WzEsMV19dmFyIGs9VC5wcm90b3R5cGU7ZnVuY3Rpb24gQSh0LGUpe2lmKCFlKXJldHVybiAxO2lmKCFlLmxlbmd0aClyZXR1cm4gMTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcil7aWYoZS5sZW5ndGg8MilyZXR1cm4gMTtpZihlW3JdWzBdPT09dClyZXR1cm4gZVtyXVsxXTtpZihlW3JdWzBdPnQmJnI+MCl7dmFyIG49KGVbcl1bMF0tdCkvKGVbcl1bMF0tZVtyLTFdWzBdKTtyZXR1cm4gZVtyXVsxXSooMS1uKStuKmVbci0xXVsxXX19cmV0dXJuIDF9ZnVuY3Rpb24gTSh0KXt2YXIgZT1uKHQsZy52ZXJ0ZXgsZy5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGUuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249NCxlfWZ1bmN0aW9uIFModCl7dmFyIGU9bih0LHYudmVydGV4LHYuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlfWZ1bmN0aW9uIEUodCl7dmFyIGU9bih0LHkudmVydGV4LHkuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMucG9pbnRTaXplLmxvY2F0aW9uPTQsZX1mdW5jdGlvbiBMKHQpe3ZhciBlPW4odCx4LnZlcnRleCx4LmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZX1mdW5jdGlvbiBDKHQpe3ZhciBlPW4odCxiLnZlcnRleCxiLmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLnBvaW50U2l6ZS5sb2NhdGlvbj00LGV9ZnVuY3Rpb24gUCh0KXt2YXIgZT1uKHQsXy52ZXJ0ZXgsXy5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGV9ay5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmhhc0FscGhhfSxrLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBbHBoYX0say5waWNrU2xvdHM9MSxrLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LGsuaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQmJnRoaXMuY29udG91ckVuYWJsZSl7Zm9yKHZhciBlPWgodGhpcy5jZWxscyx0aGlzLmludGVuc2l0eSx0LmludGVuc2l0eSkscj1lLmNlbGxzLG49ZS52ZXJ0ZXhJZHMsaT1lLnZlcnRleFdlaWdodHMsYT1yLmxlbmd0aCxvPXAubWFsbG9jRmxvYXQzMig2KmEpLHM9MCxsPTA7bDxhOysrbClmb3IodmFyIGM9cltsXSx1PTA7dTwyOysrdSl7dmFyIGY9Y1swXTsyPT09Yy5sZW5ndGgmJihmPWNbdV0pO2Zvcih2YXIgZD1uW2ZdWzBdLG09bltmXVsxXSxnPWlbZl0sdj0xLWcseT10aGlzLnBvc2l0aW9uc1tkXSx4PXRoaXMucG9zaXRpb25zW21dLGI9MDtiPDM7KytiKW9bcysrXT1nKnlbYl0rdip4W2JdfXRoaXMuY29udG91ckNvdW50PXMvM3wwLHRoaXMuY29udG91clBvc2l0aW9ucy51cGRhdGUoby5zdWJhcnJheSgwLHMpKSxwLmZyZWUobyl9ZWxzZSB0aGlzLmNvbnRvdXJDb3VudD0wfSxrLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5kaXJ0eT0hMCwiY29udG91ckVuYWJsZSJpbiB0JiYodGhpcy5jb250b3VyRW5hYmxlPXQuY29udG91ckVuYWJsZSksImNvbnRvdXJDb2xvciJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9dC5jb250b3VyQ29sb3IpLCJsaW5lV2lkdGgiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSwibGlnaHRQb3NpdGlvbiJpbiB0JiYodGhpcy5saWdodFBvc2l0aW9uPXQubGlnaHRQb3NpdGlvbiksdGhpcy5oYXNBbHBoYT0hMSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSx0aGlzLm9wYWNpdHk8MSYmKHRoaXMuaGFzQWxwaGE9ITApKSwib3BhY2l0eXNjYWxlImluIHQmJih0aGlzLm9wYWNpdHlzY2FsZT10Lm9wYWNpdHlzY2FsZSx0aGlzLmhhc0FscGhhPSEwKSwiYW1iaWVudCJpbiB0JiYodGhpcy5hbWJpZW50TGlnaHQ9dC5hbWJpZW50KSwiZGlmZnVzZSJpbiB0JiYodGhpcy5kaWZmdXNlTGlnaHQ9dC5kaWZmdXNlKSwic3BlY3VsYXIiaW4gdCYmKHRoaXMuc3BlY3VsYXJMaWdodD10LnNwZWN1bGFyKSwicm91Z2huZXNzImluIHQmJih0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyksImZyZXNuZWwiaW4gdCYmKHRoaXMuZnJlc25lbD10LmZyZXNuZWwpLHQudGV4dHVyZT8odGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRleHR1cmU9byhlLHQudGV4dHVyZSkpOnQuY29sb3JtYXAmJih0aGlzLnRleHR1cmUuc2hhcGU9WzI1NiwyNTZdLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5MSU5FQVJfTUlQTUFQX0xJTkVBUix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUuTElORUFSLHRoaXMudGV4dHVyZS5zZXRQaXhlbHMoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9Zih7Y29sb3JtYXA6dCxuc2hhZGVzOjI1Nixmb3JtYXQ6InJnYmEifSksbj1uZXcgVWludDhBcnJheSgxMDI0KSxpPTA7aTwyNTY7KytpKXtmb3IodmFyIGE9cltpXSxvPTA7bzwzOysrbyluWzQqaStvXT1hW29dO25bNCppKzNdPWU/MjU1KkEoaS8yNTUsZSk6MjU1KmFbM119cmV0dXJuIHUobixbMjU2LDI1Niw0XSxbNCwwLDFdKX0odC5jb2xvcm1hcCx0aGlzLm9wYWNpdHlzY2FsZSkpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcCgpKTt2YXIgcj10LmNlbGxzLG49dC5wb3NpdGlvbnM7aWYobiYmcil7dmFyIGk9W10sYT1bXSxsPVtdLGM9W10saD1bXSxwPVtdLGQ9W10sbT1bXSxnPVtdLHY9W10seT1bXSx4PVtdLGI9W10sXz1bXTt0aGlzLmNlbGxzPXIsdGhpcy5wb3NpdGlvbnM9bjt2YXIgdz10LnZlcnRleE5vcm1hbHMsVD10LmNlbGxOb3JtYWxzLGs9dm9pZCAwPT09dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbj8xZS02OnQudmVydGV4Tm9ybWFsc0Vwc2lsb24sTT12b2lkIDA9PT10LmZhY2VOb3JtYWxzRXBzaWxvbj8xZS02OnQuZmFjZU5vcm1hbHNFcHNpbG9uO3QudXNlRmFjZXROb3JtYWxzJiYhVCYmKFQ9cy5mYWNlTm9ybWFscyhyLG4sTSkpLFR8fHd8fCh3PXMudmVydGV4Tm9ybWFscyhyLG4saykpO3ZhciBTPXQudmVydGV4Q29sb3JzLEU9dC5jZWxsQ29sb3JzLEw9dC5tZXNoQ29sb3J8fFsxLDEsMSwxXSxDPXQudmVydGV4VVZzLFA9dC52ZXJ0ZXhJbnRlbnNpdHksST10LmNlbGxVVnMsTz10LmNlbGxJbnRlbnNpdHksej0xLzAsRD0tMS8wO2lmKCFDJiYhSSlpZihQKWlmKHQudmVydGV4SW50ZW5zaXR5Qm91bmRzKXo9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzBdLEQ9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzFdO2Vsc2UgZm9yKHZhciBSPTA7UjxQLmxlbmd0aDsrK1Ipe3ZhciBGPVBbUl07ej1NYXRoLm1pbih6LEYpLEQ9TWF0aC5tYXgoRCxGKX1lbHNlIGlmKE8paWYodC5jZWxsSW50ZW5zaXR5Qm91bmRzKXo9K3QuY2VsbEludGVuc2l0eUJvdW5kc1swXSxEPSt0LmNlbGxJbnRlbnNpdHlCb3VuZHNbMV07ZWxzZSBmb3IoUj0wO1I8Ty5sZW5ndGg7KytSKXtGPU9bUl07ej1NYXRoLm1pbih6LEYpLEQ9TWF0aC5tYXgoRCxGKX1lbHNlIGZvcihSPTA7UjxuLmxlbmd0aDsrK1Ipe0Y9bltSXVsyXTt6PU1hdGgubWluKHosRiksRD1NYXRoLm1heChELEYpfXRoaXMuaW50ZW5zaXR5PVB8fChPfHxmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10W25dWzJdO3JldHVybiByfShuKSksdGhpcy5waWNrVmVydGV4PSEoT3x8RSk7dmFyIEI9dC5wb2ludFNpemVzLE49dC5wb2ludFNpemV8fDE7dGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKFI9MDtSPG4ubGVuZ3RoOysrUilmb3IodmFyIGo9bltSXSxVPTA7VTwzOysrVSkhaXNOYU4oaltVXSkmJmlzRmluaXRlKGpbVV0pJiYodGhpcy5ib3VuZHNbMF1bVV09TWF0aC5taW4odGhpcy5ib3VuZHNbMF1bVV0saltVXSksdGhpcy5ib3VuZHNbMV1bVV09TWF0aC5tYXgodGhpcy5ib3VuZHNbMV1bVV0saltVXSkpO3ZhciBWPTAsSD0wLHE9MDt0OmZvcihSPTA7UjxyLmxlbmd0aDsrK1Ipe3ZhciBHPXJbUl07c3dpdGNoKEcubGVuZ3RoKXtjYXNlIDE6Zm9yKGo9bltXPUdbMF1dLFU9MDtVPDM7KytVKWlmKGlzTmFOKGpbVV0pfHwhaXNGaW5pdGUoaltVXSkpY29udGludWUgdDt2LnB1c2goalswXSxqWzFdLGpbMl0pLFg9Uz9TW1ddOkU/RVtSXTpMLHRoaXMub3BhY2l0eXNjYWxlJiZQP2EucHVzaChYWzBdLFhbMV0sWFsyXSx0aGlzLm9wYWNpdHkqQSgoUFtXXS16KS8oRC16KSx0aGlzLm9wYWNpdHlzY2FsZSkpOjM9PT1YLmxlbmd0aD95LnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KTooeS5wdXNoKFhbMF0sWFsxXSxYWzJdLFhbM10qdGhpcy5vcGFjaXR5KSxYWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSksWj1DP0NbV106UD9bKFBbV10teikvKEQteiksMF06ST9JW1JdOk8/WyhPW1JdLXopLyhELXopLDBdOlsoalsyXS16KS8oRC16KSwwXSx4LnB1c2goWlswXSxaWzFdKSxCP2IucHVzaChCW1ddKTpiLnB1c2goTiksXy5wdXNoKFIpLHErPTE7YnJlYWs7Y2FzZSAyOmZvcihVPTA7VTwyOysrVSl7aj1uW1c9R1tVXV07Zm9yKHZhciBZPTA7WTwzOysrWSlpZihpc05hTihqW1ldKXx8IWlzRmluaXRlKGpbWV0pKWNvbnRpbnVlIHR9Zm9yKFU9MDtVPDI7KytVKXtqPW5bVz1HW1VdXTtwLnB1c2goalswXSxqWzFdLGpbMl0pLFg9Uz9TW1ddOkU/RVtSXTpMLHRoaXMub3BhY2l0eXNjYWxlJiZQP2EucHVzaChYWzBdLFhbMV0sWFsyXSx0aGlzLm9wYWNpdHkqQSgoUFtXXS16KS8oRC16KSx0aGlzLm9wYWNpdHlzY2FsZSkpOjM9PT1YLmxlbmd0aD9kLnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KTooZC5wdXNoKFhbMF0sWFsxXSxYWzJdLFhbM10qdGhpcy5vcGFjaXR5KSxYWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSksWj1DP0NbV106UD9bKFBbV10teikvKEQteiksMF06ST9JW1JdOk8/WyhPW1JdLXopLyhELXopLDBdOlsoalsyXS16KS8oRC16KSwwXSxtLnB1c2goWlswXSxaWzFdKSxnLnB1c2goUil9SCs9MTticmVhaztjYXNlIDM6Zm9yKFU9MDtVPDM7KytVKWZvcihqPW5bVz1HW1VdXSxZPTA7WTwzOysrWSlpZihpc05hTihqW1ldKXx8IWlzRmluaXRlKGpbWV0pKWNvbnRpbnVlIHQ7Zm9yKFU9MDtVPDM7KytVKXt2YXIgVyxYLFosSjtqPW5bVz1HWzItVV1dO2kucHVzaChqWzBdLGpbMV0salsyXSksKFg9Uz9TW1ddOkU/RVtSXTpMKT90aGlzLm9wYWNpdHlzY2FsZSYmUD9hLnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KkEoKFBbV10teikvKEQteiksdGhpcy5vcGFjaXR5c2NhbGUpKTozPT09WC5sZW5ndGg/YS5wdXNoKFhbMF0sWFsxXSxYWzJdLHRoaXMub3BhY2l0eSk6KGEucHVzaChYWzBdLFhbMV0sWFsyXSxYWzNdKnRoaXMub3BhY2l0eSksWFszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpOmEucHVzaCguNSwuNSwuNSwxKSxaPUM/Q1tXXTpQP1soUFtXXS16KS8oRC16KSwwXTpJP0lbUl06Tz9bKE9bUl0teikvKEQteiksMF06WyhqWzJdLXopLyhELXopLDBdLGMucHVzaChaWzBdLFpbMV0pLEo9dz93W1ddOlRbUl0sbC5wdXNoKEpbMF0sSlsxXSxKWzJdKSxoLnB1c2goUil9Vis9MX19dGhpcy5wb2ludENvdW50PXEsdGhpcy5lZGdlQ291bnQ9SCx0aGlzLnRyaWFuZ2xlQ291bnQ9Vix0aGlzLnBvaW50UG9zaXRpb25zLnVwZGF0ZSh2KSx0aGlzLnBvaW50Q29sb3JzLnVwZGF0ZSh5KSx0aGlzLnBvaW50VVZzLnVwZGF0ZSh4KSx0aGlzLnBvaW50U2l6ZXMudXBkYXRlKGIpLHRoaXMucG9pbnRJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShfKSksdGhpcy5lZGdlUG9zaXRpb25zLnVwZGF0ZShwKSx0aGlzLmVkZ2VDb2xvcnMudXBkYXRlKGQpLHRoaXMuZWRnZVVWcy51cGRhdGUobSksdGhpcy5lZGdlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoZykpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMudXBkYXRlKGkpLHRoaXMudHJpYW5nbGVDb2xvcnMudXBkYXRlKGEpLHRoaXMudHJpYW5nbGVVVnMudXBkYXRlKGMpLHRoaXMudHJpYW5nbGVOb3JtYWxzLnVwZGF0ZShsKSx0aGlzLnRyaWFuZ2xlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoaCkpfX0say5kcmF3VHJhbnNwYXJlbnQ9ay5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHx3LG49dC52aWV3fHx3LGk9dC5wcm9qZWN0aW9ufHx3LGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dmFyIHM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxpbnZlcnNlTW9kZWw6dy5zbGljZSgpLGNsaXBCb3VuZHM6YSxrYW1iaWVudDp0aGlzLmFtYmllbnRMaWdodCxrZGlmZnVzZTp0aGlzLmRpZmZ1c2VMaWdodCxrc3BlY3VsYXI6dGhpcy5zcGVjdWxhckxpZ2h0LHJvdWdobmVzczp0aGlzLnJvdWdobmVzcyxmcmVzbmVsOnRoaXMuZnJlc25lbCxleWVQb3NpdGlvbjpbMCwwLDBdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxjb250b3VyQ29sb3I6dGhpcy5jb250b3VyQ29sb3IsdGV4dHVyZTowfTtzLmludmVyc2VNb2RlbD1jKHMuaW52ZXJzZU1vZGVsLHMubW9kZWwpLGUuZGlzYWJsZShlLkNVTExfRkFDRSksdGhpcy50ZXh0dXJlLmJpbmQoMCk7dmFyIHU9bmV3IEFycmF5KDE2KTtsKHUscy52aWV3LHMubW9kZWwpLGwodSxzLnByb2plY3Rpb24sdSksYyh1LHUpO2ZvcihvPTA7bzwzOysrbylzLmV5ZVBvc2l0aW9uW29dPXVbMTIrb10vdVsxNV07dmFyIGYsaD11WzE1XTtmb3Iobz0wO288MzsrK28paCs9dGhpcy5saWdodFBvc2l0aW9uW29dKnVbNCpvKzNdO2ZvcihvPTA7bzwzOysrbyl7Zm9yKHZhciBwPXVbMTIrb10sZD0wO2Q8MzsrK2QpcCs9dVs0KmQrb10qdGhpcy5saWdodFBvc2l0aW9uW2RdO3MubGlnaHRQb3NpdGlvbltvXT1wL2h9dGhpcy50cmlhbmdsZUNvdW50PjAmJigoZj10aGlzLnRyaVNoYWRlcikuYmluZCgpLGYudW5pZm9ybXM9cyx0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSk7dGhpcy5lZGdlQ291bnQ+MCYmdGhpcy5saW5lV2lkdGg+MCYmKChmPXRoaXMubGluZVNoYWRlcikuYmluZCgpLGYudW5pZm9ybXM9cyx0aGlzLmVkZ2VWQU8uYmluZCgpLGUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKnRoaXMucGl4ZWxSYXRpbyksZS5kcmF3QXJyYXlzKGUuTElORVMsMCwyKnRoaXMuZWRnZUNvdW50KSx0aGlzLmVkZ2VWQU8udW5iaW5kKCkpO3RoaXMucG9pbnRDb3VudD4wJiYoKGY9dGhpcy5wb2ludFNoYWRlcikuYmluZCgpLGYudW5pZm9ybXM9cyx0aGlzLnBvaW50VkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5QT0lOVFMsMCx0aGlzLnBvaW50Q291bnQpLHRoaXMucG9pbnRWQU8udW5iaW5kKCkpO3RoaXMuY29udG91ckVuYWJsZSYmdGhpcy5jb250b3VyQ291bnQ+MCYmdGhpcy5jb250b3VyTGluZVdpZHRoPjAmJigoZj10aGlzLmNvbnRvdXJTaGFkZXIpLmJpbmQoKSxmLnVuaWZvcm1zPXMsdGhpcy5jb250b3VyVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLHRoaXMuY29udG91ckNvdW50KSx0aGlzLmNvbnRvdXJWQU8udW5iaW5kKCkpfSxrLmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHx3LG49dC52aWV3fHx3LGk9dC5wcm9qZWN0aW9ufHx3LGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dGhpcy5fbW9kZWw9W10uc2xpY2UuY2FsbChyKSx0aGlzLl92aWV3PVtdLnNsaWNlLmNhbGwobiksdGhpcy5fcHJvamVjdGlvbj1bXS5zbGljZS5jYWxsKGkpLHRoaXMuX3Jlc29sdXRpb249W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF07dmFyIHMsbD17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGNsaXBCb3VuZHM6YSxwaWNrSWQ6dGhpcy5waWNrSWQvMjU1fTsoKHM9dGhpcy5waWNrU2hhZGVyKS5iaW5kKCkscy51bmlmb3Jtcz1sLHRoaXMudHJpYW5nbGVDb3VudD4wJiYodGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCkpLHRoaXMuZWRnZUNvdW50PjAmJih0aGlzLmVkZ2VWQU8uYmluZCgpLGUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKnRoaXMucGl4ZWxSYXRpbyksZS5kcmF3QXJyYXlzKGUuTElORVMsMCwyKnRoaXMuZWRnZUNvdW50KSx0aGlzLmVkZ2VWQU8udW5iaW5kKCkpLHRoaXMucG9pbnRDb3VudD4wKSYmKChzPXRoaXMucG9pbnRQaWNrU2hhZGVyKS5iaW5kKCkscy51bmlmb3Jtcz1sLHRoaXMucG9pbnRWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlBPSU5UUywwLHRoaXMucG9pbnRDb3VudCksdGhpcy5wb2ludFZBTy51bmJpbmQoKSl9LGsucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7Zm9yKHZhciBlPXQudmFsdWVbMF0rMjU2KnQudmFsdWVbMV0rNjU1MzYqdC52YWx1ZVsyXSxyPXRoaXMuY2VsbHNbZV0sbj10aGlzLnBvc2l0aW9ucyxpPW5ldyBBcnJheShyLmxlbmd0aCksYT0wO2E8ci5sZW5ndGg7KythKWlbYV09bltyW2FdXTt2YXIgbz10LmNvb3JkWzBdLHM9dC5jb29yZFsxXTtpZighdGhpcy5waWNrVmVydGV4KXt2YXIgbD10aGlzLnBvc2l0aW9uc1tyWzBdXSxjPXRoaXMucG9zaXRpb25zW3JbMV1dLHU9dGhpcy5wb3NpdGlvbnNbclsyXV0sZj1bKGxbMF0rY1swXSt1WzBdKS8zLChsWzFdK2NbMV0rdVsxXSkvMywobFsyXStjWzJdK3VbMl0pLzNdO3JldHVybntfY2VsbENlbnRlcjohMCxwb3NpdGlvbjpbbyxzXSxpbmRleDplLGNlbGw6cixjZWxsSWQ6ZSxpbnRlbnNpdHk6dGhpcy5pbnRlbnNpdHlbZV0sZGF0YUNvb3JkaW5hdGU6Zn19dmFyIGg9bShpLFtvKnRoaXMucGl4ZWxSYXRpbyx0aGlzLl9yZXNvbHV0aW9uWzFdLXMqdGhpcy5waXhlbFJhdGlvXSx0aGlzLl9tb2RlbCx0aGlzLl92aWV3LHRoaXMuX3Byb2plY3Rpb24sdGhpcy5fcmVzb2x1dGlvbik7aWYoIWgpcmV0dXJuIG51bGw7dmFyIHA9aFsyXSxkPTA7Zm9yKGE9MDthPHIubGVuZ3RoOysrYSlkKz1wW2FdKnRoaXMuaW50ZW5zaXR5W3JbYV1dO3JldHVybntwb3NpdGlvbjpoWzFdLGluZGV4OnJbaFswXV0sY2VsbDpyLGNlbGxJZDplLGludGVuc2l0eTpkLGRhdGFDb29yZGluYXRlOnRoaXMucG9zaXRpb25zW3JbaFswXV1dfX0say5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRyaVNoYWRlci5kaXNwb3NlKCksdGhpcy5saW5lU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBvaW50U2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9pbnRQaWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVkFPLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVVZzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlTm9ybWFscy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUlkcy5kaXNwb3NlKCksdGhpcy5lZGdlVkFPLmRpc3Bvc2UoKSx0aGlzLmVkZ2VQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMuZWRnZUNvbG9ycy5kaXNwb3NlKCksdGhpcy5lZGdlVVZzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VJZHMuZGlzcG9zZSgpLHRoaXMucG9pbnRWQU8uZGlzcG9zZSgpLHRoaXMucG9pbnRQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMucG9pbnRDb2xvcnMuZGlzcG9zZSgpLHRoaXMucG9pbnRVVnMuZGlzcG9zZSgpLHRoaXMucG9pbnRTaXplcy5kaXNwb3NlKCksdGhpcy5wb2ludElkcy5kaXNwb3NlKCksdGhpcy5jb250b3VyVkFPLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMuY29udG91clNoYWRlci5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpezE9PT1hcmd1bWVudHMubGVuZ3RoJiYodD0oZT10KS5nbCk7dmFyIHI9dC5nZXRFeHRlbnNpb24oIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfHx0LmdldEV4dGVuc2lvbigiTU9aX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfHx0LmdldEV4dGVuc2lvbigiV0VCS0lUX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpO2lmKCFyKXRocm93IG5ldyBFcnJvcigiZGVyaXZhdGl2ZXMgbm90IHN1cHBvcnRlZCIpO3ZhciBuPU0odCkscz1TKHQpLGw9RSh0KSxjPUwodCksZj1DKHQpLGg9UCh0KSxwPW8odCx1KG5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTVdKSxbMSwxLDRdKSk7cC5nZW5lcmF0ZU1pcG1hcCgpLHAubWluRmlsdGVyPXQuTElORUFSX01JUE1BUF9MSU5FQVIscC5tYWdGaWx0ZXI9dC5MSU5FQVI7dmFyIGQ9aSh0KSxtPWkodCksZz1pKHQpLHY9aSh0KSx5PWkodCkseD1hKHQsW3tidWZmZXI6ZCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOnksdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6bSx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOmcsdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjp2LHR5cGU6dC5GTE9BVCxzaXplOjN9XSksYj1pKHQpLF89aSh0KSx3PWkodCksaz1pKHQpLEE9YSh0LFt7YnVmZmVyOmIsdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjprLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOl8sdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjp3LHR5cGU6dC5GTE9BVCxzaXplOjJ9XSksST1pKHQpLE89aSh0KSx6PWkodCksRD1pKHQpLFI9aSh0KSxGPWEodCxbe2J1ZmZlcjpJLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6Uix0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpPLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6eix0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOkQsdHlwZTp0LkZMT0FULHNpemU6MX1dKSxCPWkodCksTj1hKHQsW3tidWZmZXI6Qix0eXBlOnQuRkxPQVQsc2l6ZTozfV0pLGo9bmV3IFQodCxwLG4scyxsLGMsZixoLGQseSxtLGcsdix4LGIsayxfLHcsQSxJLFIsTyx6LEQsRixCLE4pO3JldHVybiBqLnVwZGF0ZShlKSxqfX0seyIuL2xpYi9jbG9zZXN0LXBvaW50IjozMDEsIi4vbGliL3NoYWRlcnMiOjMwMixjb2xvcm1hcDoxMzIsImdsLWJ1ZmZlciI6MjU3LCJnbC1tYXQ0L2ludmVydCI6Mjg3LCJnbC1tYXQ0L211bHRpcGx5IjoyODksImdsLXNoYWRlciI6MzIzLCJnbC10ZXh0dXJlMmQiOjMzOCwiZ2wtdmFvIjozNDMsbmRhcnJheTo0NjIsbm9ybWFsczo0NjUsInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIjo1MzIsInR5cGVkYXJyYXktcG9vbCI6NTkwfV0sMzA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlLFswLDAsMCwxLDEsMCwxLDFdKSxzPWkoZSxhLmJveFZlcnQsYS5saW5lRnJhZyk7cmV0dXJuIG5ldyBvKHQscixzKX07dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC1zaGFkZXIiKSxhPXQoIi4vc2hhZGVycyIpO2Z1bmN0aW9uIG8odCxlLHIpe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cn12YXIgcyxsLGM9by5wcm90b3R5cGU7Yy5iaW5kPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zaGFkZXI7dGhpcy52Ym8uYmluZCgpLHRoaXMuc2hhZGVyLmJpbmQoKSx0LmF0dHJpYnV0ZXMuY29vcmQucG9pbnRlcigpLHQudW5pZm9ybXMuc2NyZWVuQm94PXRoaXMucGxvdC5zY3JlZW5Cb3h9LGMuZHJhd0JveD0ocz1bMCwwXSxsPVswLDBdLGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5wbG90LG89dGhpcy5zaGFkZXIsYz1hLmdsO3NbMF09dCxzWzFdPWUsbFswXT1yLGxbMV09bixvLnVuaWZvcm1zLmxvPXMsby51bmlmb3Jtcy5oaT1sLG8udW5pZm9ybXMuY29sb3I9aSxjLmRyYXdBcnJheXMoYy5UUklBTkdMRV9TVFJJUCwwLDQpfSksYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjozMDcsImdsLWJ1ZmZlciI6MjU3LCJnbC1zaGFkZXIiOjMyM31dLDMwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPW4oZSksYT1pKGUsby5ncmlkVmVydCxvLmdyaWRGcmFnKSxsPWkoZSxvLnRpY2tWZXJ0LG8uZ3JpZEZyYWcpO3JldHVybiBuZXcgcyh0LHIsYSxsKX07dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC1zaGFkZXIiKSxhPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksbz10KCIuL3NoYWRlcnMiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cix0aGlzLnRpY2tTaGFkZXI9bix0aGlzLnRpY2tzPVtbXSxbXV19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0LWV9dmFyIGMsdSxmLGgscCxkPXMucHJvdG90eXBlO2QuZHJhdz0oYz1bMCwwXSx1PVswLDBdLGY9WzAsMF0sZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5wbG90LGU9dGhpcy52Ym8scj10aGlzLnNoYWRlcixuPXRoaXMudGlja3MsaT10LmdsLGE9dC5fdGlja0JvdW5kcyxvPXQuZGF0YUJveCxzPXQudmlld0JveCxsPXQuZ3JpZExpbmVXaWR0aCxoPXQuZ3JpZExpbmVDb2xvcixwPXQuZ3JpZExpbmVFbmFibGUsZD10LnBpeGVsUmF0aW8sbT0wO208MjsrK20pe3ZhciBnPWFbbV0sdj1hW20rMl0tZyx5PS41KihvW20rMl0rb1ttXSkseD1vW20rMl0tb1ttXTt1W21dPTIqdi94LGNbbV09MiooZy15KS94fXIuYmluZCgpLGUuYmluZCgpLHIuYXR0cmlidXRlcy5kYXRhQ29vcmQucG9pbnRlcigpLHIudW5pZm9ybXMuZGF0YVNoaWZ0PWMsci51bmlmb3Jtcy5kYXRhU2NhbGU9dTt2YXIgYj0wO2ZvcihtPTA7bTwyOysrbSl7ZlswXT1mWzFdPTAsZlttXT0xLHIudW5pZm9ybXMuZGF0YUF4aXM9ZixyLnVuaWZvcm1zLmxpbmVXaWR0aD1sW21dLyhzW20rMl0tc1ttXSkqZCxyLnVuaWZvcm1zLmNvbG9yPWhbbV07dmFyIF89NipuW21dLmxlbmd0aDtwW21dJiZfJiZpLmRyYXdBcnJheXMoaS5UUklBTkdMRVMsYixfKSxiKz1ffX0pLGQuZHJhd1RpY2tNYXJrcz1mdW5jdGlvbigpe3ZhciB0PVswLDBdLGU9WzAsMF0scj1bMSwwXSxuPVswLDFdLGk9WzAsMF0sbz1bMCwwXTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHM9dGhpcy5wbG90LGM9dGhpcy52Ym8sdT10aGlzLnRpY2tTaGFkZXIsZj10aGlzLnRpY2tzLGg9cy5nbCxwPXMuX3RpY2tCb3VuZHMsZD1zLmRhdGFCb3gsbT1zLnZpZXdCb3gsZz1zLnBpeGVsUmF0aW8sdj1zLnNjcmVlbkJveCx5PXZbMl0tdlswXSx4PXZbM10tdlsxXSxiPW1bMl0tbVswXSxfPW1bM10tbVsxXSx3PTA7dzwyOysrdyl7dmFyIFQ9cFt3XSxrPXBbdysyXS1ULEE9LjUqKGRbdysyXStkW3ddKSxNPWRbdysyXS1kW3ddO2Vbd109MiprL00sdFt3XT0yKihULUEpL019ZVswXSo9Yi95LHRbMF0qPWIveSxlWzFdKj1fL3gsdFsxXSo9Xy94LHUuYmluZCgpLGMuYmluZCgpLHUuYXR0cmlidXRlcy5kYXRhQ29vcmQucG9pbnRlcigpO3ZhciBTPXUudW5pZm9ybXM7Uy5kYXRhU2hpZnQ9dCxTLmRhdGFTY2FsZT1lO3ZhciBFPXMudGlja01hcmtMZW5ndGgsTD1zLnRpY2tNYXJrV2lkdGgsQz1zLnRpY2tNYXJrQ29sb3IsUD02KmZbMF0ubGVuZ3RoLEk9TWF0aC5taW4oYS5nZShmWzBdLChkWzBdLXBbMF0pLyhwWzJdLXBbMF0pLGwpLGZbMF0ubGVuZ3RoKSxPPU1hdGgubWluKGEuZ3QoZlswXSwoZFsyXS1wWzBdKS8ocFsyXS1wWzBdKSxsKSxmWzBdLmxlbmd0aCksej0wKzYqSSxEPTYqTWF0aC5tYXgoMCxPLUkpLFI9TWF0aC5taW4oYS5nZShmWzFdLChkWzFdLXBbMV0pLyhwWzNdLXBbMV0pLGwpLGZbMV0ubGVuZ3RoKSxGPU1hdGgubWluKGEuZ3QoZlsxXSwoZFszXS1wWzFdKS8ocFszXS1wWzFdKSxsKSxmWzFdLmxlbmd0aCksQj1QKzYqUixOPTYqTWF0aC5tYXgoMCxGLVIpO2lbMF09MioobVswXS1FWzFdKS95LTEsaVsxXT0obVszXSttWzFdKS94LTEsb1swXT1FWzFdKmcveSxvWzFdPUxbMV0qZy94LE4mJihTLmNvbG9yPUNbMV0sUy50aWNrU2NhbGU9byxTLmRhdGFBeGlzPW4sUy5zY3JlZW5PZmZzZXQ9aSxoLmRyYXdBcnJheXMoaC5UUklBTkdMRVMsQixOKSksaVswXT0obVsyXSttWzBdKS95LTEsaVsxXT0yKihtWzFdLUVbMF0pL3gtMSxvWzBdPUxbMF0qZy95LG9bMV09RVswXSpnL3gsRCYmKFMuY29sb3I9Q1swXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9cixTLnNjcmVlbk9mZnNldD1pLGguZHJhd0FycmF5cyhoLlRSSUFOR0xFUyx6LEQpKSxpWzBdPTIqKG1bMl0rRVszXSkveS0xLGlbMV09KG1bM10rbVsxXSkveC0xLG9bMF09RVszXSpnL3ksb1sxXT1MWzNdKmcveCxOJiYoUy5jb2xvcj1DWzNdLFMudGlja1NjYWxlPW8sUy5kYXRhQXhpcz1uLFMuc2NyZWVuT2Zmc2V0PWksaC5kcmF3QXJyYXlzKGguVFJJQU5HTEVTLEIsTikpLGlbMF09KG1bMl0rbVswXSkveS0xLGlbMV09MioobVszXStFWzJdKS94LTEsb1swXT1MWzJdKmcveSxvWzFdPUVbMl0qZy94LEQmJihTLmNvbG9yPUNbMl0sUy50aWNrU2NhbGU9byxTLmRhdGFBeGlzPXIsUy5zY3JlZW5PZmZzZXQ9aSxoLmRyYXdBcnJheXMoaC5UUklBTkdMRVMseixEKSl9fSgpLGQudXBkYXRlPShoPVsxLDEsLTEsLTEsMSwtMV0scD1bMSwtMSwxLDEsLTEsLTFdLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LnRpY2tzLHI9dC5ib3VuZHMsbj1uZXcgRmxvYXQzMkFycmF5KDE4KihlWzBdLmxlbmd0aCtlWzFdLmxlbmd0aCkpLGk9KHRoaXMucGxvdC56ZXJvTGluZUVuYWJsZSwwKSxhPVtbXSxbXV0sbz0wO288MjsrK28pZm9yKHZhciBzPWFbb10sbD1lW29dLGM9cltvXSx1PXJbbysyXSxmPTA7ZjxsLmxlbmd0aDsrK2Ype3ZhciBkPShsW2ZdLngtYykvKHUtYyk7cy5wdXNoKGQpO2Zvcih2YXIgbT0wO208NjsrK20pbltpKytdPWQsbltpKytdPWhbbV0sbltpKytdPXBbbV19dGhpcy50aWNrcz1hLHRoaXMudmJvLnVwZGF0ZShuKX0pLGQuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy50aWNrU2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjozMDcsImJpbmFyeS1zZWFyY2gtYm91bmRzIjoxMDAsImdsLWJ1ZmZlciI6MjU3LCJnbC1zaGFkZXIiOjMyM31dLDMwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPW4oZSxbLTEsLTEsLTEsMSwxLC0xLDEsMV0pLHM9aShlLGEubGluZVZlcnQsYS5saW5lRnJhZyk7cmV0dXJuIG5ldyBvKHQscixzKX07dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC1zaGFkZXIiKSxhPXQoIi4vc2hhZGVycyIpO2Z1bmN0aW9uIG8odCxlLHIpe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cn12YXIgcyxsLGM9by5wcm90b3R5cGU7Yy5iaW5kPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zaGFkZXI7dGhpcy52Ym8uYmluZCgpLHRoaXMuc2hhZGVyLmJpbmQoKSx0LmF0dHJpYnV0ZXMuY29vcmQucG9pbnRlcigpLHQudW5pZm9ybXMuc2NyZWVuQm94PXRoaXMucGxvdC5zY3JlZW5Cb3h9LGMuZHJhd0xpbmU9KHM9WzAsMF0sbD1bMCwwXSxmdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89dGhpcy5wbG90LGM9dGhpcy5zaGFkZXIsdT1vLmdsO3NbMF09dCxzWzFdPWUsbFswXT1yLGxbMV09bixjLnVuaWZvcm1zLnN0YXJ0PXMsYy51bmlmb3Jtcy5lbmQ9bCxjLnVuaWZvcm1zLndpZHRoPWkqby5waXhlbFJhdGlvLGMudW5pZm9ybXMuY29sb3I9YSx1LmRyYXdBcnJheXModS5UUklBTkdMRV9TVFJJUCwwLDQpfSksYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjozMDcsImdsLWJ1ZmZlciI6MjU3LCJnbC1zaGFkZXIiOjMyM31dLDMwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5IiksaT1uKFsicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnh5eiAqIGNvbG9yLncsIGNvbG9yLncpO1xufVxuIl0pO2UuZXhwb3J0cz17bGluZVZlcnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgY29vcmQ7XG5cbnVuaWZvcm0gdmVjNCBzY3JlZW5Cb3g7XG51bmlmb3JtIHZlYzIgc3RhcnQsIGVuZDtcbnVuaWZvcm0gZmxvYXQgd2lkdGg7XG5cbnZlYzIgcGVycCh2ZWMyIHYpIHtcbiAgcmV0dXJuIHZlYzIodi55LCAtdi54KTtcbn1cblxudmVjMiBzY3JlZW4odmVjMiB2KSB7XG4gIHJldHVybiAyLjAgKiAodiAtIHNjcmVlbkJveC54eSkgLyAoc2NyZWVuQm94Lnp3IC0gc2NyZWVuQm94Lnh5KSAtIDEuMDtcbn1cblxudm9pZCBtYWluKCkge1xuICB2ZWMyIGRlbHRhID0gbm9ybWFsaXplKHBlcnAoc3RhcnQgLSBlbmQpKTtcbiAgdmVjMiBvZmZzZXQgPSBtaXgoc3RhcnQsIGVuZCwgMC41ICogKGNvb3JkLnkrMS4wKSk7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzY3JlZW4ob2Zmc2V0ICsgMC41ICogd2lkdGggKiBkZWx0YSAqIGNvb3JkLngpLCAwLCAxKTtcbn1cbiJdKSxsaW5lRnJhZzppLHRleHRWZXJ0Om4oWyIjZGVmaW5lIEdMU0xJRlkgMVxuYXR0cmlidXRlIHZlYzMgdGV4dENvb3JkaW5hdGU7XG5cbnVuaWZvcm0gdmVjMiBkYXRhU2NhbGUsIGRhdGFTaGlmdCwgZGF0YUF4aXMsIHNjcmVlbk9mZnNldCwgdGV4dFNjYWxlO1xudW5pZm9ybSBmbG9hdCBhbmdsZTtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCBkYXRhT2Zmc2V0ICA9IHRleHRDb29yZGluYXRlLno7XG4gIHZlYzIgZ2x5cGhPZmZzZXQgID0gdGV4dENvb3JkaW5hdGUueHk7XG4gIG1hdDIgZ2x5cGhNYXRyaXggPSBtYXQyKGNvcyhhbmdsZSksIHNpbihhbmdsZSksIC1zaW4oYW5nbGUpLCBjb3MoYW5nbGUpKTtcbiAgdmVjMiBzY3JlZW5Db29yZGluYXRlID0gZGF0YUF4aXMgKiAoZGF0YVNjYWxlICogZGF0YU9mZnNldCArIGRhdGFTaGlmdCkgK1xuICAgIGdseXBoTWF0cml4ICogZ2x5cGhPZmZzZXQgKiB0ZXh0U2NhbGUgKyBzY3JlZW5PZmZzZXQ7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzY3JlZW5Db29yZGluYXRlLCAwLCAxKTtcbn1cbiJdKSx0ZXh0RnJhZzppLGdyaWRWZXJ0Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIGRhdGFDb29yZDtcblxudW5pZm9ybSB2ZWMyIGRhdGFBeGlzLCBkYXRhU2hpZnQsIGRhdGFTY2FsZTtcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzIgcG9zID0gZGF0YUF4aXMgKiAoZGF0YVNjYWxlICogZGF0YUNvb3JkLnggKyBkYXRhU2hpZnQpO1xuICBwb3MgKz0gMTAuMCAqIGRhdGFDb29yZC55ICogdmVjMihkYXRhQXhpcy55LCAtZGF0YUF4aXMueCkgKyBkYXRhQ29vcmQueiAqIGxpbmVXaWR0aDtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcywgMCwgMSk7XG59XG4iXSksZ3JpZEZyYWc6aSxib3hWZXJ0Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIGNvb3JkO1xuXG51bmlmb3JtIHZlYzQgc2NyZWVuQm94O1xudW5pZm9ybSB2ZWMyIGxvLCBoaTtcblxudmVjMiBzY3JlZW4odmVjMiB2KSB7XG4gIHJldHVybiAyLjAgKiAodiAtIHNjcmVlbkJveC54eSkgLyAoc2NyZWVuQm94Lnp3IC0gc2NyZWVuQm94Lnh5KSAtIDEuMDtcbn1cblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQoc2NyZWVuKG1peChsbywgaGksIGNvb3JkKSksIDAsIDEpO1xufVxuIl0pLHRpY2tWZXJ0Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIGRhdGFDb29yZDtcblxudW5pZm9ybSB2ZWMyIGRhdGFBeGlzLCBkYXRhU2hpZnQsIGRhdGFTY2FsZSwgc2NyZWVuT2Zmc2V0LCB0aWNrU2NhbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwb3MgPSBkYXRhQXhpcyAqIChkYXRhU2NhbGUgKiBkYXRhQ29vcmQueCArIGRhdGFTaGlmdCk7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3MgKyB0aWNrU2NhbGUqZGF0YUNvb3JkLnl6ICsgc2NyZWVuT2Zmc2V0LCAwLCAxKTtcbn1cbiJdKX19LHtnbHNsaWZ5OjQyNH1dLDMwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPW4oZSksYT1pKGUscy50ZXh0VmVydCxzLnRleHRGcmFnKTtyZXR1cm4gbmV3IGwodCxyLGEpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXNoYWRlciIpLGE9dCgidGV4dC1jYWNoZSIpLG89dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxzPXQoIi4vc2hhZGVycyIpO2Z1bmN0aW9uIGwodCxlLHIpe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cix0aGlzLnRpY2tPZmZzZXQ9W1tdLFtdXSx0aGlzLnRpY2tYPVtbXSxbXV0sdGhpcy5sYWJlbE9mZnNldD1bMCwwXSx0aGlzLmxhYmVsQ291bnQ9WzAsMF19dmFyIGMsdSxmLGgscCxkLG09bC5wcm90b3R5cGU7bS5kcmF3VGlja3M9KGM9WzAsMF0sdT1bMCwwXSxmPVswLDBdLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGxvdCxyPXRoaXMuc2hhZGVyLG49dGhpcy50aWNrWFt0XSxpPXRoaXMudGlja09mZnNldFt0XSxhPWUuZ2wscz1lLnZpZXdCb3gsbD1lLmRhdGFCb3gsaD1lLnNjcmVlbkJveCxwPWUucGl4ZWxSYXRpbyxkPWUudGlja0VuYWJsZSxtPWUudGlja1BhZCxnPWUudGlja0NvbG9yLHY9ZS50aWNrQW5nbGUseT1lLmxhYmVsRW5hYmxlLHg9ZS5sYWJlbFBhZCxiPWUubGFiZWxDb2xvcixfPWUubGFiZWxBbmdsZSx3PXRoaXMubGFiZWxPZmZzZXRbdF0sVD10aGlzLmxhYmVsQ291bnRbdF0saz1vLmx0KG4sbFt0XSksQT1vLmxlKG4sbFt0KzJdKTtjWzBdPWNbMV09MCxjW3RdPTEsdVt0XT0oc1syK3RdK3NbdF0pLyhoWzIrdF0taFt0XSktMTt2YXIgTT0yL2hbMisoMV50KV0taFsxXnRdO3VbMV50XT1NKnNbMV50XS0xLGRbdF0mJih1WzFedF0tPU0qcCptW3RdLGs8QSYmaVtBXT5pW2tdJiYoci51bmlmb3Jtcy5kYXRhQXhpcz1jLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj1nW3RdLHIudW5pZm9ybXMuYW5nbGU9dlt0XSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsaVtrXSxpW0FdLWlba10pKSkseVt0XSYmVCYmKHVbMV50XS09TSpwKnhbdF0sci51bmlmb3Jtcy5kYXRhQXhpcz1mLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj1iW3RdLHIudW5pZm9ybXMuYW5nbGU9X1t0XSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsdyxUKSksdVsxXnRdPU0qc1syKygxXnQpXS0xLGRbdCsyXSYmKHVbMV50XSs9TSpwKm1bdCsyXSxrPEEmJmlbQV0+aVtrXSYmKHIudW5pZm9ybXMuZGF0YUF4aXM9YyxyLnVuaWZvcm1zLnNjcmVlbk9mZnNldD11LHIudW5pZm9ybXMuY29sb3I9Z1t0KzJdLHIudW5pZm9ybXMuYW5nbGU9dlt0KzJdLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUyxpW2tdLGlbQV0taVtrXSkpKSx5W3QrMl0mJlQmJih1WzFedF0rPU0qcCp4W3QrMl0sci51bmlmb3Jtcy5kYXRhQXhpcz1mLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj1iW3QrMl0sci51bmlmb3Jtcy5hbmdsZT1fW3QrMl0sYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVTLHcsVCkpfSksbS5kcmF3VGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXSxlPVswLDBdO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMucGxvdCxuPXRoaXMuc2hhZGVyLGk9ci5nbCxhPXIuc2NyZWVuQm94LG89ci50aXRsZUNlbnRlcixzPXIudGl0bGVBbmdsZSxsPXIudGl0bGVDb2xvcixjPXIucGl4ZWxSYXRpbztpZih0aGlzLnRpdGxlQ291bnQpe2Zvcih2YXIgdT0wO3U8MjsrK3UpZVt1XT0yKihvW3VdKmMtYVt1XSkvKGFbMit1XS1hW3VdKS0xO24uYmluZCgpLG4udW5pZm9ybXMuZGF0YUF4aXM9dCxuLnVuaWZvcm1zLnNjcmVlbk9mZnNldD1lLG4udW5pZm9ybXMuYW5nbGU9cyxuLnVuaWZvcm1zLmNvbG9yPWwsaS5kcmF3QXJyYXlzKGkuVFJJQU5HTEVTLHRoaXMudGl0bGVPZmZzZXQsdGhpcy50aXRsZUNvdW50KX19fSgpLG0uYmluZD0oaD1bMCwwXSxwPVswLDBdLGQ9WzAsMF0sZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBsb3QsZT10aGlzLnNoYWRlcixyPXQuX3RpY2tCb3VuZHMsbj10LmRhdGFCb3gsaT10LnNjcmVlbkJveCxhPXQudmlld0JveDtlLmJpbmQoKTtmb3IodmFyIG89MDtvPDI7KytvKXt2YXIgcz1yW29dLGw9cltvKzJdLXMsYz0uNSoobltvKzJdK25bb10pLHU9bltvKzJdLW5bb10sZj1hW29dLG09YVtvKzJdLWYsZz1pW29dLHY9aVtvKzJdLWc7cFtvXT0yKmwvdSptL3YsaFtvXT0yKihzLWMpL3UqbS92fWRbMV09Mip0LnBpeGVsUmF0aW8vKGlbM10taVsxXSksZFswXT1kWzFdKihpWzNdLWlbMV0pLyhpWzJdLWlbMF0pLGUudW5pZm9ybXMuZGF0YVNjYWxlPXAsZS51bmlmb3Jtcy5kYXRhU2hpZnQ9aCxlLnVuaWZvcm1zLnRleHRTY2FsZT1kLHRoaXMudmJvLmJpbmQoKSxlLmF0dHJpYnV0ZXMudGV4dENvb3JkaW5hdGUucG9pbnRlcigpfSksbS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksbyxzPVtdLGw9dC50aWNrcyxjPXQuYm91bmRzO2ZvcihvPTA7bzwyOysrbyl7dmFyIHU9W01hdGguZmxvb3Iocy5sZW5ndGgvMyldLGY9Wy0xLzBdLGg9bFtvXTtmb3IoZT0wO2U8aC5sZW5ndGg7KytlKXt2YXIgcD1oW2VdLGQ9cC54LG09cC50ZXh0LGc9cC5mb250fHwic2Fucy1zZXJpZiI7aT1wLmZvbnRTaXplfHwxMjtmb3IodmFyIHY9MS8oY1tvKzJdLWNbb10pLHk9Y1tvXSx4PW0uc3BsaXQoIlxuIiksYj0wO2I8eC5sZW5ndGg7YisrKWZvcihuPWEoZyx4W2JdKS5kYXRhLHI9MDtyPG4ubGVuZ3RoO3IrPTIpcy5wdXNoKG5bcl0qaSwtbltyKzFdKmktYippKjEuMiwoZC15KSp2KTt1LnB1c2goTWF0aC5mbG9vcihzLmxlbmd0aC8zKSksZi5wdXNoKGQpfXRoaXMudGlja09mZnNldFtvXT11LHRoaXMudGlja1hbb109Zn1mb3Iobz0wO288MjsrK28pe2Zvcih0aGlzLmxhYmVsT2Zmc2V0W29dPU1hdGguZmxvb3Iocy5sZW5ndGgvMyksbj1hKHQubGFiZWxGb250W29dLHQubGFiZWxzW29dLHt0ZXh0QWxpZ246ImNlbnRlciJ9KS5kYXRhLGk9dC5sYWJlbFNpemVbb10sZT0wO2U8bi5sZW5ndGg7ZSs9MilzLnB1c2gobltlXSppLC1uW2UrMV0qaSwwKTt0aGlzLmxhYmVsQ291bnRbb109TWF0aC5mbG9vcihzLmxlbmd0aC8zKS10aGlzLmxhYmVsT2Zmc2V0W29dfWZvcih0aGlzLnRpdGxlT2Zmc2V0PU1hdGguZmxvb3Iocy5sZW5ndGgvMyksbj1hKHQudGl0bGVGb250LHQudGl0bGUpLmRhdGEsaT10LnRpdGxlU2l6ZSxlPTA7ZTxuLmxlbmd0aDtlKz0yKXMucHVzaChuW2VdKmksLW5bZSsxXSppLDApO3RoaXMudGl0bGVDb3VudD1NYXRoLmZsb29yKHMubGVuZ3RoLzMpLXRoaXMudGl0bGVPZmZzZXQsdGhpcy52Ym8udXBkYXRlKHMpfSxtLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjMwNywiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjEwMCwiZ2wtYnVmZmVyIjoyNTcsImdsLXNoYWRlciI6MzIzLCJ0ZXh0LWNhY2hlIjo1NzB9XSwzMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUsW2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0pLGM9bmV3IGwoZSxyKTtyZXR1cm4gYy5ncmlkPWkoYyksYy50ZXh0PWEoYyksYy5saW5lPW8oYyksYy5ib3g9cyhjKSxjLnVwZGF0ZSh0KSxjfTt2YXIgbj10KCJnbC1zZWxlY3Qtc3RhdGljIiksaT10KCIuL2xpYi9ncmlkIiksYT10KCIuL2xpYi90ZXh0Iiksbz10KCIuL2xpYi9saW5lIikscz10KCIuL2xpYi9ib3giKTtmdW5jdGlvbiBsKHQsZSl7dGhpcy5nbD10LHRoaXMucGlja0J1ZmZlcj1lLHRoaXMuc2NyZWVuQm94PVswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSx0aGlzLnZpZXdCb3g9WzAsMCwwLDBdLHRoaXMuZGF0YUJveD1bLTEwLC0xMCwxMCwxMF0sdGhpcy5ncmlkTGluZUVuYWJsZT1bITAsITBdLHRoaXMuZ3JpZExpbmVXaWR0aD1bMSwxXSx0aGlzLmdyaWRMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMudGlja01hcmtMZW5ndGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtXaWR0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTUsMTUsMTUsMTVdLHRoaXMudGlja0FuZ2xlPVswLDAsMCwwXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwLCEwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy5sYWJlbEFuZ2xlPVswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGl0bGVDZW50ZXI9WzAsMF0sdGhpcy50aXRsZUVuYWJsZT0hMCx0aGlzLnRpdGxlQW5nbGU9MCx0aGlzLnRpdGxlQ29sb3I9WzAsMCwwLDFdLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVswLDAsMCwwXSx0aGlzLnplcm9MaW5lRW5hYmxlPVshMCwhMF0sdGhpcy56ZXJvTGluZVdpZHRoPVs0LDRdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ib3JkZXJMaW5lRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy5ib3JkZXJMaW5lV2lkdGg9WzIsMiwyLDJdLHRoaXMuYm9yZGVyTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZD1udWxsLHRoaXMudGV4dD1udWxsLHRoaXMubGluZT1udWxsLHRoaXMuYm94PW51bGwsdGhpcy5vYmplY3RzPVtdLHRoaXMub3ZlcmxheXM9W10sdGhpcy5fdGlja0JvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMuc3RhdGljPSExLHRoaXMuZGlydHk9ITEsdGhpcy5waWNrRGlydHk9ITEsdGhpcy5waWNrRGVsYXk9MTIwLHRoaXMucGlja1JhZGl1cz0xMCx0aGlzLl9waWNrVGltZW91dD1udWxsLHRoaXMuX2RyYXdQaWNrPXRoaXMuZHJhd1BpY2suYmluZCh0aGlzKSx0aGlzLl9kZXB0aENvdW50ZXI9MH12YXIgYz1sLnByb3RvdHlwZTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT10LnNsaWNlKCkscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl09ZVtyXS5zbGljZSgpO3JldHVybiBlfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdC54LWUueH1jLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT10aGlzLnBpY2tEaXJ0eT0hMH0sYy5zZXRPdmVybGF5RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmRpcnR5PSEwfSxjLm5leHREZXB0aFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlcHRoQ291bnRlcisrLzY1NTM2fSxjLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsLGU9dGhpcy5zY3JlZW5Cb3gscj10aGlzLnZpZXdCb3gsbj10aGlzLmRhdGFCb3gsaT10aGlzLnBpeGVsUmF0aW8sYT10aGlzLmdyaWQsbz10aGlzLmxpbmUscz10aGlzLnRleHQsbD10aGlzLm9iamVjdHM7aWYodGhpcy5fZGVwdGhDb3VudGVyPTAsdGhpcy5waWNrRGlydHkmJih0aGlzLl9waWNrVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3BpY2tUaW1lb3V0KSx0aGlzLnBpY2tEaXJ0eT0hMSx0aGlzLl9waWNrVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX2RyYXdQaWNrLHRoaXMucGlja0RlbGF5KSksdGhpcy5kaXJ0eSl7aWYodGhpcy5kaXJ0eT0hMSx0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHQuZW5hYmxlKHQuU0NJU1NPUl9URVNUKSx0LmRpc2FibGUodC5ERVBUSF9URVNUKSx0LmRlcHRoRnVuYyh0LkxFU1MpLHQuZGVwdGhNYXNrKCExKSx0LmVuYWJsZSh0LkJMRU5EKSx0LmJsZW5kRXF1YXRpb24odC5GVU5DX0FERCx0LkZVTkNfQUREKSx0LmJsZW5kRnVuYyh0Lk9ORSx0Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHRoaXMuYm9yZGVyQ29sb3Ipe3Quc2Npc3NvcihlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSk7dmFyIGM9dGhpcy5ib3JkZXJDb2xvcjt0LmNsZWFyQ29sb3IoY1swXSpjWzNdLGNbMV0qY1szXSxjWzJdKmNbM10sY1szXSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVR8dC5ERVBUSF9CVUZGRVJfQklUKX10LnNjaXNzb3IoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pLHQudmlld3BvcnQoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pO3ZhciB1PXRoaXMuYmFja2dyb3VuZENvbG9yO3QuY2xlYXJDb2xvcih1WzBdKnVbM10sdVsxXSp1WzNdLHVbMl0qdVszXSx1WzNdKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVCksYS5kcmF3KCk7dmFyIGY9dGhpcy56ZXJvTGluZUVuYWJsZSxoPXRoaXMuemVyb0xpbmVDb2xvcixwPXRoaXMuemVyb0xpbmVXaWR0aDtpZihmWzBdfHxmWzFdKXtvLmJpbmQoKTtmb3IodmFyIGQ9MDtkPDI7KytkKWlmKGZbZF0mJm5bZF08PTAmJm5bZCsyXT49MCl7dmFyIG09ZVtkXS1uW2RdKihlW2QrMl0tZVtkXSkvKG5bZCsyXS1uW2RdKTswPT09ZD9vLmRyYXdMaW5lKG0sZVsxXSxtLGVbM10scFtkXSxoW2RdKTpvLmRyYXdMaW5lKGVbMF0sbSxlWzJdLG0scFtkXSxoW2RdKX19Zm9yKGQ9MDtkPGwubGVuZ3RoOysrZClsW2RdLmRyYXcoKTt0LnZpZXdwb3J0KGVbMF0sZVsxXSxlWzJdLWVbMF0sZVszXS1lWzFdKSx0LnNjaXNzb3IoZVswXSxlWzFdLGVbMl0tZVswXSxlWzNdLWVbMV0pLHRoaXMuZ3JpZC5kcmF3VGlja01hcmtzKCksby5iaW5kKCk7dmFyIGc9dGhpcy5ib3JkZXJMaW5lRW5hYmxlLHY9dGhpcy5ib3JkZXJMaW5lV2lkdGgseT10aGlzLmJvcmRlckxpbmVDb2xvcjtmb3IoZ1sxXSYmby5kcmF3TGluZShyWzBdLHJbMV0tLjUqdlsxXSppLHJbMF0sclszXSsuNSp2WzNdKmksdlsxXSx5WzFdKSxnWzBdJiZvLmRyYXdMaW5lKHJbMF0tLjUqdlswXSppLHJbMV0sclsyXSsuNSp2WzJdKmksclsxXSx2WzBdLHlbMF0pLGdbM10mJm8uZHJhd0xpbmUoclsyXSxyWzFdLS41KnZbMV0qaSxyWzJdLHJbM10rLjUqdlszXSppLHZbM10seVszXSksZ1syXSYmby5kcmF3TGluZShyWzBdLS41KnZbMF0qaSxyWzNdLHJbMl0rLjUqdlsyXSppLHJbM10sdlsyXSx5WzJdKSxzLmJpbmQoKSxkPTA7ZDwyOysrZClzLmRyYXdUaWNrcyhkKTt0aGlzLnRpdGxlRW5hYmxlJiZzLmRyYXdUaXRsZSgpO3ZhciB4PXRoaXMub3ZlcmxheXM7Zm9yKGQ9MDtkPHgubGVuZ3RoOysrZCl4W2RdLmRyYXcoKTt0LmRpc2FibGUodC5TQ0lTU09SX1RFU1QpLHQuZGlzYWJsZSh0LkJMRU5EKSx0LmRlcHRoTWFzayghMCl9fSxjLmRyYXdQaWNrPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RhdGljKXt2YXIgdD10aGlzLnBpY2tCdWZmZXI7dGhpcy5nbCx0aGlzLl9waWNrVGltZW91dD1udWxsLHQuYmVnaW4oKTtmb3IodmFyIGU9MSxyPXRoaXMub2JqZWN0cyxuPTA7bjxyLmxlbmd0aDsrK24pZT1yW25dLmRyYXdQaWNrKGUpO3QuZW5kKCl9fSxjLnBpY2s9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5zdGF0aWMpe3ZhciByPXRoaXMucGl4ZWxSYXRpbyxuPXRoaXMucGlja1BpeGVsUmF0aW8saT10aGlzLnZpZXdCb3gsYT0wfE1hdGgucm91bmQoKHQtaVswXS9yKSpuKSxvPTB8TWF0aC5yb3VuZCgoZS1pWzFdL3IpKm4pLHM9dGhpcy5waWNrQnVmZmVyLnF1ZXJ5KGEsbyx0aGlzLnBpY2tSYWRpdXMpO2lmKCFzKXJldHVybiBudWxsO2Zvcih2YXIgbD1zLmlkKyhzLnZhbHVlWzBdPDw4KSsocy52YWx1ZVsxXTw8MTYpKyhzLnZhbHVlWzJdPDwyNCksYz10aGlzLm9iamVjdHMsdT0wO3U8Yy5sZW5ndGg7Kyt1KXt2YXIgZj1jW3VdLnBpY2soYSxvLGwpO2lmKGYpcmV0dXJuIGZ9cmV0dXJuIG51bGx9fSxjLnNldFNjcmVlbkJveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjcmVlbkJveCxyPXRoaXMucGl4ZWxSYXRpbztlWzBdPTB8TWF0aC5yb3VuZCh0WzBdKnIpLGVbMV09MHxNYXRoLnJvdW5kKHRbMV0qciksZVsyXT0wfE1hdGgucm91bmQodFsyXSpyKSxlWzNdPTB8TWF0aC5yb3VuZCh0WzNdKnIpLHRoaXMuc2V0RGlydHkoKX0sYy5zZXREYXRhQm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF0YUJveDsoZVswXSE9PXRbMF18fGVbMV0hPT10WzFdfHxlWzJdIT09dFsyXXx8ZVszXSE9PXRbM10pJiYoZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLHRoaXMuc2V0RGlydHkoKSl9LGMuc2V0Vmlld0JveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBpeGVsUmF0aW8scj10aGlzLnZpZXdCb3g7clswXT0wfE1hdGgucm91bmQodFswXSplKSxyWzFdPTB8TWF0aC5yb3VuZCh0WzFdKmUpLHJbMl09MHxNYXRoLnJvdW5kKHRbMl0qZSksclszXT0wfE1hdGgucm91bmQodFszXSplKTt2YXIgbj10aGlzLnBpY2tQaXhlbFJhdGlvO3RoaXMucGlja0J1ZmZlci5zaGFwZT1bMHxNYXRoLnJvdW5kKCh0WzJdLXRbMF0pKm4pLDB8TWF0aC5yb3VuZCgodFszXS10WzFdKSpuKV0sdGhpcy5zZXREaXJ0eSgpfSxjLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpb3x8MTt2YXIgcj10aGlzLnBpeGVsUmF0aW87dGhpcy5waWNrUGl4ZWxSYXRpbz1NYXRoLm1heChyLDEpLHRoaXMuc2V0U2NyZWVuQm94KHQuc2NyZWVuQm94fHxbMCwwLGUuZHJhd2luZ0J1ZmZlcldpZHRoL3IsZS5kcmF3aW5nQnVmZmVySGVpZ2h0L3JdKTt0aGlzLnNjcmVlbkJveDt0aGlzLnNldFZpZXdCb3godC52aWV3Qm94fHxbLjEyNSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjEyNSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3JdKTt2YXIgbj10aGlzLnZpZXdCb3gsaT0oblsyXS1uWzBdKS8oblszXS1uWzFdKTt0aGlzLnNldERhdGFCb3godC5kYXRhQm94fHxbLTEwLC0xMC9pLDEwLDEwL2ldKSx0aGlzLmJvcmRlckNvbG9yPSExIT09dC5ib3JkZXJDb2xvciYmKHQuYm9yZGVyQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmJhY2tncm91bmRDb2xvcj0odC5iYWNrZ3JvdW5kQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lRW5hYmxlPSh0LmdyaWRMaW5lRW5hYmxlfHxbITAsITBdKS5zbGljZSgpLHRoaXMuZ3JpZExpbmVXaWR0aD0odC5ncmlkTGluZVdpZHRofHxbMSwxXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lQ29sb3I9dSh0LmdyaWRMaW5lQ29sb3J8fFtbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSksdGhpcy56ZXJvTGluZUVuYWJsZT0odC56ZXJvTGluZUVuYWJsZXx8WyEwLCEwXSkuc2xpY2UoKSx0aGlzLnplcm9MaW5lV2lkdGg9KHQuemVyb0xpbmVXaWR0aHx8WzQsNF0pLnNsaWNlKCksdGhpcy56ZXJvTGluZUNvbG9yPXUodC56ZXJvTGluZUNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGlja01hcmtMZW5ndGg9KHQudGlja01hcmtMZW5ndGh8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tNYXJrV2lkdGg9KHQudGlja01hcmtXaWR0aHx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja01hcmtDb2xvcj11KHQudGlja01hcmtDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGl0bGVDZW50ZXI9KHQudGl0bGVDZW50ZXJ8fFsuNSooblswXStuWzJdKS9yLChuWzNdKzEyMCkvcl0pLnNsaWNlKCksdGhpcy50aXRsZUVuYWJsZT0hKCJ0aXRsZUVuYWJsZSJpbiB0KXx8ISF0LnRpdGxlRW5hYmxlLHRoaXMudGl0bGVBbmdsZT10LnRpdGxlQW5nbGV8fDAsdGhpcy50aXRsZUNvbG9yPSh0LnRpdGxlQ29sb3J8fFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmxhYmVsUGFkPSh0LmxhYmVsUGFkfHxbMTUsMTUsMTUsMTVdKS5zbGljZSgpLHRoaXMubGFiZWxBbmdsZT0odC5sYWJlbEFuZ2xlfHxbMCxNYXRoLlBJLzIsMCwzKk1hdGguUEkvMl0pLnNsaWNlKCksdGhpcy5sYWJlbEVuYWJsZT0odC5sYWJlbEVuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLmxhYmVsQ29sb3I9dSh0LmxhYmVsQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLnRpY2tQYWQ9KHQudGlja1BhZHx8WzE1LDE1LDE1LDE1XSkuc2xpY2UoKSx0aGlzLnRpY2tBbmdsZT0odC50aWNrQW5nbGV8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tFbmFibGU9KHQudGlja0VuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLnRpY2tDb2xvcj11KHQudGlja0NvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSksdGhpcy5ib3JkZXJMaW5lRW5hYmxlPSh0LmJvcmRlckxpbmVFbmFibGV8fFshMCwhMCwhMCwhMF0pLnNsaWNlKCksdGhpcy5ib3JkZXJMaW5lV2lkdGg9KHQuYm9yZGVyTGluZVdpZHRofHxbMiwyLDIsMl0pLnNsaWNlKCksdGhpcy5ib3JkZXJMaW5lQ29sb3I9dSh0LmJvcmRlckxpbmVDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pO3ZhciBhPXQudGlja3N8fFtbXSxbXV0sbz10aGlzLl90aWNrQm91bmRzO29bMF09b1sxXT0xLzAsb1syXT1vWzNdPS0xLzA7Zm9yKHZhciBzPTA7czwyOysrcyl7dmFyIGw9YVtzXS5zbGljZSgwKTswIT09bC5sZW5ndGgmJihsLnNvcnQoZiksb1tzXT1NYXRoLm1pbihvW3NdLGxbMF0ueCksb1tzKzJdPU1hdGgubWF4KG9bcysyXSxsW2wubGVuZ3RoLTFdLngpKX10aGlzLmdyaWQudXBkYXRlKHtib3VuZHM6byx0aWNrczphfSksdGhpcy50ZXh0LnVwZGF0ZSh7Ym91bmRzOm8sdGlja3M6YSxsYWJlbHM6dC5sYWJlbHN8fFsieCIsInkiXSxsYWJlbFNpemU6dC5sYWJlbFNpemV8fFsxMiwxMl0sbGFiZWxGb250OnQubGFiZWxGb250fHxbInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGl0bGU6dC50aXRsZXx8IiIsdGl0bGVTaXplOnQudGl0bGVTaXplfHwxOCx0aXRsZUZvbnQ6dC50aXRsZUZvbnR8fCJzYW5zLXNlcmlmIn0pLHRoaXMuc3RhdGljPSEhdC5zdGF0aWMsdGhpcy5zZXREaXJ0eSgpfSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmJveC5kaXNwb3NlKCksdGhpcy5ncmlkLmRpc3Bvc2UoKSx0aGlzLnRleHQuZGlzcG9zZSgpLHRoaXMubGluZS5kaXNwb3NlKCk7Zm9yKHZhciB0PXRoaXMub2JqZWN0cy5sZW5ndGgtMTt0Pj0wOy0tdCl0aGlzLm9iamVjdHNbdF0uZGlzcG9zZSgpO3RoaXMub2JqZWN0cy5sZW5ndGg9MDtmb3IodD10aGlzLm92ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7LS10KXRoaXMub3ZlcmxheXNbdF0uZGlzcG9zZSgpO3RoaXMub3ZlcmxheXMubGVuZ3RoPTAsdGhpcy5nbD1udWxsfSxjLmFkZE9iamVjdD1mdW5jdGlvbih0KXt0aGlzLm9iamVjdHMuaW5kZXhPZih0KTwwJiYodGhpcy5vYmplY3RzLnB1c2godCksdGhpcy5zZXREaXJ0eSgpKX0sYy5yZW1vdmVPYmplY3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub2JqZWN0cyxyPTA7cjxlLmxlbmd0aDsrK3IpaWYoZVtyXT09PXQpe2Uuc3BsaWNlKHIsMSksdGhpcy5zZXREaXJ0eSgpO2JyZWFrfX0sYy5hZGRPdmVybGF5PWZ1bmN0aW9uKHQpe3RoaXMub3ZlcmxheXMuaW5kZXhPZih0KTwwJiYodGhpcy5vdmVybGF5cy5wdXNoKHQpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCkpfSxjLnJlbW92ZU92ZXJsYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub3ZlcmxheXMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PT10KXtlLnNwbGljZShyLDEpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCk7YnJlYWt9fX0seyIuL2xpYi9ib3giOjMwNCwiLi9saWIvZ3JpZCI6MzA1LCIuL2xpYi9saW5lIjozMDYsIi4vbGliL3RleHQiOjMwOCwiZ2wtc2VsZWN0LXN0YXRpYyI6MzIyfV0sMzEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Q9dHx8ZG9jdW1lbnQuYm9keSxlPWV8fHt9O3ZhciByPVsuMDEsMS8wXTsiZGlzdGFuY2VMaW1pdHMiaW4gZSYmKHJbMF09ZS5kaXN0YW5jZUxpbWl0c1swXSxyWzFdPWUuZGlzdGFuY2VMaW1pdHNbMV0pOyJ6b29tTWluImluIGUmJihyWzBdPWUuem9vbU1pbik7Inpvb21NYXgiaW4gZSYmKHJbMV09ZS56b29tTWF4KTt2YXIgYz1pKHtjZW50ZXI6ZS5jZW50ZXJ8fFswLDAsMF0sdXA6ZS51cHx8WzAsMSwwXSxleWU6ZS5leWV8fFswLDAsMTBdLG1vZGU6ZS5tb2RlfHwib3JiaXQiLGRpc3RhbmNlTGltaXRzOnJ9KSx1PVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSxmPTAsaD10LmNsaWVudFdpZHRoLHA9dC5jbGllbnRIZWlnaHQsZD17a2V5QmluZGluZ01vZGU6InJvdGF0ZSIsZW5hYmxlV2hlZWw6ITAsdmlldzpjLGVsZW1lbnQ6dCxkZWxheTplLmRlbGF5fHwxNixyb3RhdGVTcGVlZDplLnJvdGF0ZVNwZWVkfHwxLHpvb21TcGVlZDplLnpvb21TcGVlZHx8MSx0cmFuc2xhdGVTcGVlZDplLnRyYW5zbGF0ZVNwZWVkfHwxLGZsaXBYOiEhZS5mbGlwWCxmbGlwWTohIWUuZmxpcFksbW9kZXM6Yy5tb2Rlcyxfb3J0aG86ZS5fb3J0aG98fGUucHJvamVjdGlvbiYmIm9ydGhvZ3JhcGhpYyI9PT1lLnByb2plY3Rpb24udHlwZXx8ITEsdGljazpmdW5jdGlvbigpe3ZhciBlPW4oKSxyPXRoaXMuZGVsYXksaT1lLTIqcjtjLmlkbGUoZS1yKSxjLnJlY2FsY01hdHJpeChpKSxjLmZsdXNoKGUtKDEwMCsyKnIpKTtmb3IodmFyIGE9ITAsbz1jLmNvbXB1dGVkTWF0cml4LHM9MDtzPDE2OysrcylhPWEmJnVbc109PT1vW3NdLHVbc109b1tzXTt2YXIgbD10LmNsaWVudFdpZHRoPT09aCYmdC5jbGllbnRIZWlnaHQ9PT1wO3JldHVybiBoPXQuY2xpZW50V2lkdGgscD10LmNsaWVudEhlaWdodCxhPyFsOihmPU1hdGguZXhwKGMuY29tcHV0ZWRSYWRpdXNbMF0pLCEwKX0sbG9va0F0OmZ1bmN0aW9uKHQsZSxyKXtjLmxvb2tBdChjLmxhc3RUKCksdCxlLHIpfSxyb3RhdGU6ZnVuY3Rpb24odCxlLHIpe2Mucm90YXRlKGMubGFzdFQoKSx0LGUscil9LHBhbjpmdW5jdGlvbih0LGUscil7Yy5wYW4oYy5sYXN0VCgpLHQsZSxyKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSxyKXtjLnRyYW5zbGF0ZShjLmxhc3RUKCksdCxlLHIpfX07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGQse21hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRNYXRyaXh9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5zZXRNYXRyaXgoYy5sYXN0VCgpLHQpLGMuY29tcHV0ZWRNYXRyaXh9LGVudW1lcmFibGU6ITB9LG1vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmdldE1vZGUoKX0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPWMuY29tcHV0ZWRVcC5zbGljZSgpLHI9Yy5jb21wdXRlZEV5ZS5zbGljZSgpLGk9Yy5jb21wdXRlZENlbnRlci5zbGljZSgpO2lmKGMuc2V0TW9kZSh0KSwidHVybnRhYmxlIj09PXQpe3ZhciBhPW4oKTtjLl9hY3RpdmUubG9va0F0KGEscixpLGUpLGMuX2FjdGl2ZS5sb29rQXQoYSs1MDAscixpLFswLDAsMV0pLGMuX2FjdGl2ZS5mbHVzaChhKX1yZXR1cm4gYy5nZXRNb2RlKCl9LGVudW1lcmFibGU6ITB9LGNlbnRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRDZW50ZXJ9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5sb29rQXQoYy5sYXN0VCgpLG51bGwsdCksYy5jb21wdXRlZENlbnRlcn0sZW51bWVyYWJsZTohMH0sZXllOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZEV5ZX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksdCksYy5jb21wdXRlZEV5ZX0sZW51bWVyYWJsZTohMH0sdXA6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmNvbXB1dGVkVXB9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5sb29rQXQoYy5sYXN0VCgpLG51bGwsbnVsbCx0KSxjLmNvbXB1dGVkVXB9LGVudW1lcmFibGU6ITB9LGRpc3RhbmNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLnNldERpc3RhbmNlKGMubGFzdFQoKSx0KSx0fSxlbnVtZXJhYmxlOiEwfSxkaXN0YW5jZUxpbWl0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuZ2V0RGlzdGFuY2VMaW1pdHMocil9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5zZXREaXN0YW5jZUxpbWl0cyh0KSx0fSxlbnVtZXJhYmxlOiEwfX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLCExfSkpLGQuX2xhc3RYPS0xLGQuX2xhc3RZPS0xLGQuX2xhc3RNb2RzPXtzaGlmdDohMSxjb250cm9sOiExLGFsdDohMSxtZXRhOiExfSxkLmVuYWJsZU1vdXNlTGlzdGVuZXJzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHIsaSxhKXt2YXIgbz1kLmtleUJpbmRpbmdNb2RlO2lmKCExIT09byl7dmFyIHM9InJvdGF0ZSI9PT1vLGw9InBhbiI9PT1vLHU9Inpvb20iPT09byxoPSEhYS5jb250cm9sLHA9ISFhLmFsdCxtPSEhYS5zaGlmdCxnPSEhKDEmZSksdj0hISgyJmUpLHk9ISEoNCZlKSx4PTEvdC5jbGllbnRIZWlnaHQsYj14KihyLWQuX2xhc3RYKSxfPXgqKGktZC5fbGFzdFkpLHc9ZC5mbGlwWD8xOi0xLFQ9ZC5mbGlwWT8xOi0xLGs9TWF0aC5QSSpkLnJvdGF0ZVNwZWVkLEE9bigpO2lmKC0xIT09ZC5fbGFzdFgmJi0xIT09ZC5fbGFzdFkmJigocyYmZyYmIWgmJiFwJiYhbXx8ZyYmIWgmJiFwJiZtKSYmYy5yb3RhdGUoQSx3KmsqYiwtVCprKl8sMCksKGwmJmcmJiFoJiYhcCYmIW18fHZ8fGcmJmgmJiFwJiYhbSkmJmMucGFuKEEsLWQudHJhbnNsYXRlU3BlZWQqYipmLGQudHJhbnNsYXRlU3BlZWQqXypmLDApLHUmJmcmJiFoJiYhcCYmIW18fHl8fGcmJiFoJiZwJiYhbSkpe3ZhciBNPS1kLnpvb21TcGVlZCpfL3dpbmRvdy5pbm5lckhlaWdodCooQS1jLmxhc3RUKCkpKjEwMDtjLnBhbihBLDAsMCxmKihNYXRoLmV4cChNKS0xKSl9cmV0dXJuIGQuX2xhc3RYPXIsZC5fbGFzdFk9aSxkLl9sYXN0TW9kcz1hLCEwfX1kLm1vdXNlTGlzdGVuZXI9YSh0LGUpLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsKGZ1bmN0aW9uKHIpe3ZhciBuPXMoci5jaGFuZ2VkVG91Y2hlc1swXSx0KTtlKDAsblswXSxuWzFdLGQuX2xhc3RNb2RzKSxlKDEsblswXSxuWzFdLGQuX2xhc3RNb2RzKX0pLCEhbCYme3Bhc3NpdmU6ITB9KSx0LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsKGZ1bmN0aW9uKHIpe3ZhciBuPXMoci5jaGFuZ2VkVG91Y2hlc1swXSx0KTtlKDEsblswXSxuWzFdLGQuX2xhc3RNb2RzKSxyLnByZXZlbnREZWZhdWx0KCl9KSwhIWwmJntwYXNzaXZlOiExfSksdC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsKGZ1bmN0aW9uKHQpe2UoMCxkLl9sYXN0WCxkLl9sYXN0WSxkLl9sYXN0TW9kcyl9KSwhIWwmJntwYXNzaXZlOiEwfSksZC53aGVlbExpc3RlbmVyPW8odCwoZnVuY3Rpb24odCxlKXtpZighMSE9PWQua2V5QmluZGluZ01vZGUmJmQuZW5hYmxlV2hlZWwpe3ZhciByPWQuZmxpcFg/MTotMSxpPWQuZmxpcFk/MTotMSxhPW4oKTtpZihNYXRoLmFicyh0KT5NYXRoLmFicyhlKSljLnJvdGF0ZShhLDAsMCwtdCpyKk1hdGguUEkqZC5yb3RhdGVTcGVlZC93aW5kb3cuaW5uZXJXaWR0aCk7ZWxzZSBpZighZC5fb3J0aG8pe3ZhciBvPS1kLnpvb21TcGVlZCppKmUvd2luZG93LmlubmVySGVpZ2h0KihhLWMubGFzdFQoKSkvMjA7Yy5wYW4oYSwwLDAsZiooTWF0aC5leHAobyktMSkpfX19KSwhMCl9LGQuZW5hYmxlTW91c2VMaXN0ZW5lcnMoKSxkfTt2YXIgbj10KCJyaWdodC1ub3ciKSxpPXQoIjNkLXZpZXciKSxhPXQoIm1vdXNlLWNoYW5nZSIpLG89dCgibW91c2Utd2hlZWwiKSxzPXQoIm1vdXNlLWV2ZW50LW9mZnNldCIpLGw9dCgiaGFzLXBhc3NpdmUtZXZlbnRzIil9LHsiM2QtdmlldyI6NTUsImhhcy1wYXNzaXZlLWV2ZW50cyI6NDI2LCJtb3VzZS1jaGFuZ2UiOjQ0OSwibW91c2UtZXZlbnQtb2Zmc2V0Ijo0NTAsIm1vdXNlLXdoZWVsIjo0NTIsInJpZ2h0LW5vdyI6NTE4fV0sMzExOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG52YXJ5aW5nIHZlYzIgdXY7XG52b2lkIG1haW4oKSB7XG4gIHV2ID0gcG9zaXRpb247XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMCwgMSk7XG59Il0pLG89bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgYWNjdW1CdWZmZXI7XG52YXJ5aW5nIHZlYzIgdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCBhY2N1bSA9IHRleHR1cmUyRChhY2N1bUJ1ZmZlciwgMC41ICogKHV2ICsgMS4wKSk7XG4gIGdsX0ZyYWdDb2xvciA9IG1pbih2ZWM0KDEsMSwxLDEpLCBhY2N1bSk7XG59Il0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzIifV0pfX0seyJnbC1zaGFkZXIiOjMyMyxnbHNsaWZ5OjQyNH1dLDMxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NhbWVyYS5qcyIpLGk9dCgiZ2wtYXhlczNkIiksYT10KCJnbC1heGVzM2QvcHJvcGVydGllcyIpLG89dCgiZ2wtc3Bpa2VzM2QiKSxzPXQoImdsLXNlbGVjdC1zdGF0aWMiKSxsPXQoImdsLWZibyIpLGM9dCgiYS1iaWctdHJpYW5nbGUiKSx1PXQoIm1vdXNlLWNoYW5nZSIpLGY9dCgiZ2wtbWF0NC9wZXJzcGVjdGl2ZSIpLGg9dCgiZ2wtbWF0NC9vcnRobyIpLHA9dCgiLi9saWIvc2hhZGVyIiksZD10KCJpcy1tb2JpbGUiKSh7dGFibGV0OiEwLGZlYXR1cmVEZXRlY3Q6ITB9KTtmdW5jdGlvbiBtKCl7dGhpcy5tb3VzZT1bLTEsLTFdLHRoaXMuc2NyZWVuPW51bGwsdGhpcy5kaXN0YW5jZT0xLzAsdGhpcy5pbmRleD1udWxsLHRoaXMuZGF0YUNvb3JkaW5hdGU9bnVsbCx0aGlzLmRhdGFQb3NpdGlvbj1udWxsLHRoaXMub2JqZWN0PW51bGwsdGhpcy5kYXRhPW51bGx9ZnVuY3Rpb24gZyh0KXt2YXIgZT1NYXRoLnJvdW5kKE1hdGgubG9nKE1hdGguYWJzKHQpKS9NYXRoLmxvZygxMCkpO2lmKGU8MCl7dmFyIHI9TWF0aC5yb3VuZChNYXRoLnBvdygxMCwtZSkpO3JldHVybiBNYXRoLmNlaWwodCpyKS9yfWlmKGU+MCl7cj1NYXRoLnJvdW5kKE1hdGgucG93KDEwLGUpKTtyZXR1cm4gTWF0aC5jZWlsKHQvcikqcn1yZXR1cm4gTWF0aC5jZWlsKHQpfWZ1bmN0aW9uIHYodCl7cmV0dXJuImJvb2xlYW4iIT10eXBlb2YgdHx8dH1lLmV4cG9ydHM9e2NyZWF0ZVNjZW5lOmZ1bmN0aW9uKHQpeyh0PXR8fHt9KS5jYW1lcmE9dC5jYW1lcmF8fHt9O3ZhciBlPXQuY2FudmFzO2lmKCFlKXtpZihlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHQuY29udGFpbmVyKXQuY29udGFpbmVyLmFwcGVuZENoaWxkKGUpO2Vsc2UgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKX12YXIgcj10LmdsO3J8fCh0LmdsT3B0aW9ucyYmKGQ9ISF0LmdsT3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIpLHI9ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsO3RyeXsocj10LmdldENvbnRleHQoIndlYmdsIixlKSl8fChyPXQuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixlKSl9Y2F0Y2godCl7cmV0dXJuIG51bGx9cmV0dXJuIHJ9KGUsdC5nbE9wdGlvbnN8fHtwcmVtdWx0aXBsaWVkQWxwaGE6ITAsYW50aWFsaWFzOiEwLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpkfSkpO2lmKCFyKXRocm93IG5ldyBFcnJvcigid2ViZ2wgbm90IHN1cHBvcnRlZCIpO3ZhciB5PXQuYm91bmRzfHxbWy0xMCwtMTAsLTEwXSxbMTAsMTAsMTBdXSx4PW5ldyBtLGI9bChyLHIuZHJhd2luZ0J1ZmZlcldpZHRoLHIuZHJhd2luZ0J1ZmZlckhlaWdodCx7cHJlZmVyRmxvYXQ6IWR9KSxfPXAociksdz10LmNhbWVyYU9iamVjdCYmITA9PT10LmNhbWVyYU9iamVjdC5fb3J0aG98fHQuY2FtZXJhLnByb2plY3Rpb24mJiJvcnRob2dyYXBoaWMiPT09dC5jYW1lcmEucHJvamVjdGlvbi50eXBlfHwhMSxUPXtleWU6dC5jYW1lcmEuZXllfHxbMiwwLDBdLGNlbnRlcjp0LmNhbWVyYS5jZW50ZXJ8fFswLDAsMF0sdXA6dC5jYW1lcmEudXB8fFswLDEsMF0sem9vbU1pbjp0LmNhbWVyYS56b29tTWF4fHwuMSx6b29tTWF4OnQuY2FtZXJhLnpvb21NaW58fDEwMCxtb2RlOnQuY2FtZXJhLm1vZGV8fCJ0dXJudGFibGUiLF9vcnRobzp3fSxrPXQuYXhlc3x8e30sQT1pKHIsayk7QS5lbmFibGU9IWsuZGlzYWJsZTt2YXIgTT10LnNwaWtlc3x8e30sUz1vKHIsTSksRT1bXSxMPVtdLEM9W10sUD1bXSxJPSEwLE89ITAsej1uZXcgQXJyYXkoMTYpLEQ9bmV3IEFycmF5KDE2KSxSPXt2aWV3Om51bGwscHJvamVjdGlvbjp6LG1vZGVsOkQsX29ydGhvOiExfSxGPShPPSEwLFtyLmRyYXdpbmdCdWZmZXJXaWR0aCxyLmRyYXdpbmdCdWZmZXJIZWlnaHRdKSxCPXQuY2FtZXJhT2JqZWN0fHxuKGUsVCksTj17Z2w6cixjb250ZXh0TG9zdDohMSxwaXhlbFJhdGlvOnQucGl4ZWxSYXRpb3x8MSxjYW52YXM6ZSxzZWxlY3Rpb246eCxjYW1lcmE6QixheGVzOkEsYXhlc1BpeGVsczpudWxsLHNwaWtlczpTLGJvdW5kczp5LG9iamVjdHM6RSxzaGFwZTpGLGFzcGVjdDp0LmFzcGVjdFJhdGlvfHxbMSwxLDFdLHBpY2tSYWRpdXM6dC5waWNrUmFkaXVzfHwxMCx6TmVhcjp0LnpOZWFyfHwuMDEsekZhcjp0LnpGYXJ8fDFlMyxmb3Z5OnQuZm92eXx8TWF0aC5QSS80LGNsZWFyQ29sb3I6dC5jbGVhckNvbG9yfHxbMCwwLDAsMF0sYXV0b1Jlc2l6ZTp2KHQuYXV0b1Jlc2l6ZSksYXV0b0JvdW5kczp2KHQuYXV0b0JvdW5kcyksYXV0b1NjYWxlOiEhdC5hdXRvU2NhbGUsYXV0b0NlbnRlcjp2KHQuYXV0b0NlbnRlciksY2xpcFRvQm91bmRzOnYodC5jbGlwVG9Cb3VuZHMpLHNuYXBUb0RhdGE6ISF0LnNuYXBUb0RhdGEsb25zZWxlY3Q6dC5vbnNlbGVjdHx8bnVsbCxvbnJlbmRlcjp0Lm9ucmVuZGVyfHxudWxsLG9uY2xpY2s6dC5vbmNsaWNrfHxudWxsLGNhbWVyYVBhcmFtczpSLG9uY29udGV4dGxvc3M6bnVsbCxtb3VzZUxpc3RlbmVyOm51bGwsX3N0b3BwZWQ6ITEsZ2V0QXNwZWN0cmF0aW86ZnVuY3Rpb24oKXtyZXR1cm57eDp0aGlzLmFzcGVjdFswXSx5OnRoaXMuYXNwZWN0WzFdLHo6dGhpcy5hc3BlY3RbMl19fSxzZXRBc3BlY3RyYXRpbzpmdW5jdGlvbih0KXt0aGlzLmFzcGVjdFswXT10LngsdGhpcy5hc3BlY3RbMV09dC55LHRoaXMuYXNwZWN0WzJdPXQueixPPSEwfSxzZXRCb3VuZHM6ZnVuY3Rpb24odCxlKXt0aGlzLmJvdW5kc1swXVt0XT1lLm1pbix0aGlzLmJvdW5kc1sxXVt0XT1lLm1heH0sc2V0Q2xlYXJDb2xvcjpmdW5jdGlvbih0KXt0aGlzLmNsZWFyQ29sb3I9dH0sY2xlYXJSR0JBOmZ1bmN0aW9uKCl7dGhpcy5nbC5jbGVhckNvbG9yKHRoaXMuY2xlYXJDb2xvclswXSx0aGlzLmNsZWFyQ29sb3JbMV0sdGhpcy5jbGVhckNvbG9yWzJdLHRoaXMuY2xlYXJDb2xvclszXSksdGhpcy5nbC5jbGVhcih0aGlzLmdsLkNPTE9SX0JVRkZFUl9CSVR8dGhpcy5nbC5ERVBUSF9CVUZGRVJfQklUKX19LGo9W3IuZHJhd2luZ0J1ZmZlcldpZHRoL04ucGl4ZWxSYXRpb3wwLHIuZHJhd2luZ0J1ZmZlckhlaWdodC9OLnBpeGVsUmF0aW98MF07ZnVuY3Rpb24gVSgpe2lmKCFOLl9zdG9wcGVkJiZOLmF1dG9SZXNpemUpe3ZhciB0PWUucGFyZW50Tm9kZSxyPTEsbj0xO3QmJnQhPT1kb2N1bWVudC5ib2R5PyhyPXQuY2xpZW50V2lkdGgsbj10LmNsaWVudEhlaWdodCk6KHI9d2luZG93LmlubmVyV2lkdGgsbj13aW5kb3cuaW5uZXJIZWlnaHQpO3ZhciBpPTB8TWF0aC5jZWlsKHIqTi5waXhlbFJhdGlvKSxhPTB8TWF0aC5jZWlsKG4qTi5waXhlbFJhdGlvKTtpZihpIT09ZS53aWR0aHx8YSE9PWUuaGVpZ2h0KXtlLndpZHRoPWksZS5oZWlnaHQ9YTt2YXIgbz1lLnN0eWxlO28ucG9zaXRpb249by5wb3NpdGlvbnx8ImFic29sdXRlIixvLmxlZnQ9IjBweCIsby50b3A9IjBweCIsby53aWR0aD1yKyJweCIsby5oZWlnaHQ9bisicHgiLEk9ITB9fX1OLmF1dG9SZXNpemUmJlUoKTtmdW5jdGlvbiBWKCl7Zm9yKHZhciB0PUUubGVuZ3RoLGU9UC5sZW5ndGgsbj0wO248ZTsrK24pQ1tuXT0wO3Q6Zm9yKG49MDtuPHQ7KytuKXt2YXIgaT1FW25dLGE9aS5waWNrU2xvdHM7aWYoYSl7Zm9yKHZhciBvPTA7bzxlOysrbylpZihDW29dK2E8MjU1KXtMW25dPW8saS5zZXRQaWNrQmFzZShDW29dKzEpLENbb10rPWE7Y29udGludWUgdH12YXIgbD1zKHIsRik7TFtuXT1lLFAucHVzaChsKSxDLnB1c2goYSksaS5zZXRQaWNrQmFzZSgxKSxlKz0xfWVsc2UgTFtuXT0tMX1mb3IoO2U+MCYmMD09PUNbZS0xXTspQy5wb3AoKSxQLnBvcCgpLmRpc3Bvc2UoKX1mdW5jdGlvbiBIKCl7aWYoTi5jb250ZXh0TG9zdClyZXR1cm4hMDtyLmlzQ29udGV4dExvc3QoKSYmKE4uY29udGV4dExvc3Q9ITAsTi5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsTi5zZWxlY3Rpb24ub2JqZWN0PW51bGwsTi5vbmNvbnRleHRsb3NzJiZOLm9uY29udGV4dGxvc3MoKSl9d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsVSksTi51cGRhdGU9ZnVuY3Rpb24odCl7Ti5fc3RvcHBlZHx8KHQ9dHx8e30sST0hMCxPPSEwKX0sTi5hZGQ9ZnVuY3Rpb24odCl7Ti5fc3RvcHBlZHx8KHQuYXhlcz1BLEUucHVzaCh0KSxMLnB1c2goLTEpLEk9ITAsTz0hMCxWKCkpfSxOLnJlbW92ZT1mdW5jdGlvbih0KXtpZighTi5fc3RvcHBlZCl7dmFyIGU9RS5pbmRleE9mKHQpO2U8MHx8KEUuc3BsaWNlKGUsMSksTC5wb3AoKSxJPSEwLE89ITAsVigpKX19LE4uZGlzcG9zZT1mdW5jdGlvbigpe2lmKCFOLl9zdG9wcGVkJiYoTi5fc3RvcHBlZD0hMCx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixVKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLEgpLE4ubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLCFOLmNvbnRleHRMb3N0KSl7QS5kaXNwb3NlKCksUy5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDxFLmxlbmd0aDsrK3QpRVt0XS5kaXNwb3NlKCk7Yi5kaXNwb3NlKCk7Zm9yKHQ9MDt0PFAubGVuZ3RoOysrdClQW3RdLmRpc3Bvc2UoKTtfLmRpc3Bvc2UoKSxyPW51bGwsQT1udWxsLFM9bnVsbCxFPVtdfX0sTi5fbW91c2VSb3RhdGluZz0hMSxOLl9wcmV2QnV0dG9ucz0wLE4uZW5hYmxlTW91c2VMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtOLm1vdXNlTGlzdGVuZXI9dShlLChmdW5jdGlvbih0LGUscil7aWYoIU4uX3N0b3BwZWQpe3ZhciBuPVAubGVuZ3RoLGk9RS5sZW5ndGgsYT14Lm9iamVjdDt4LmRpc3RhbmNlPTEvMCx4Lm1vdXNlWzBdPWUseC5tb3VzZVsxXT1yLHgub2JqZWN0PW51bGwseC5zY3JlZW49bnVsbCx4LmRhdGFDb29yZGluYXRlPXguZGF0YVBvc2l0aW9uPW51bGw7dmFyIG89ITE7aWYodCYmTi5fcHJldkJ1dHRvbnMpTi5fbW91c2VSb3RhdGluZz0hMDtlbHNle04uX21vdXNlUm90YXRpbmcmJihPPSEwKSxOLl9tb3VzZVJvdGF0aW5nPSExO2Zvcih2YXIgcz0wO3M8bjsrK3Mpe3ZhciBsPVBbc10ucXVlcnkoZSxqWzFdLXItMSxOLnBpY2tSYWRpdXMpO2lmKGwpe2lmKGwuZGlzdGFuY2U+eC5kaXN0YW5jZSljb250aW51ZTtmb3IodmFyIGM9MDtjPGk7KytjKXt2YXIgdT1FW2NdO2lmKExbY109PT1zKXt2YXIgZj11LnBpY2sobCk7ZiYmKHguYnV0dG9ucz10LHguc2NyZWVuPWwuY29vcmQseC5kaXN0YW5jZT1sLmRpc3RhbmNlLHgub2JqZWN0PXUseC5pbmRleD1mLmRpc3RhbmNlLHguZGF0YVBvc2l0aW9uPWYucG9zaXRpb24seC5kYXRhQ29vcmRpbmF0ZT1mLmRhdGFDb29yZGluYXRlLHguZGF0YT1mLG89ITApfX19fX1hJiZhIT09eC5vYmplY3QmJihhLmhpZ2hsaWdodCYmYS5oaWdobGlnaHQobnVsbCksST0hMCkseC5vYmplY3QmJih4Lm9iamVjdC5oaWdobGlnaHQmJngub2JqZWN0LmhpZ2hsaWdodCh4LmRhdGEpLEk9ITApLChvPW98fHgub2JqZWN0IT09YSkmJk4ub25zZWxlY3QmJk4ub25zZWxlY3QoeCksMSZ0JiYhKDEmTi5fcHJldkJ1dHRvbnMpJiZOLm9uY2xpY2smJk4ub25jbGljayh4KSxOLl9wcmV2QnV0dG9ucz10fX0pKX0sZS5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixIKTt2YXIgcT1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSxHPVtxWzBdLnNsaWNlKCkscVsxXS5zbGljZSgpXTtmdW5jdGlvbiBZKCl7aWYoIUgoKSl7VSgpO3ZhciB0PU4uY2FtZXJhLnRpY2soKTtSLnZpZXc9Ti5jYW1lcmEubWF0cml4LEk9SXx8dCxPPU98fHQsQS5waXhlbFJhdGlvPU4ucGl4ZWxSYXRpbyxTLnBpeGVsUmF0aW89Ti5waXhlbFJhdGlvO3ZhciBlPUUubGVuZ3RoLG49cVswXSxpPXFbMV07blswXT1uWzFdPW5bMl09MS8wLGlbMF09aVsxXT1pWzJdPS0xLzA7Zm9yKHZhciBvPTA7bzxlOysrbyl7KEM9RVtvXSkucGl4ZWxSYXRpbz1OLnBpeGVsUmF0aW8sQy5heGVzPU4uYXhlcyxJPUl8fCEhQy5kaXJ0eSxPPU98fCEhQy5kaXJ0eTt2YXIgcz1DLmJvdW5kcztpZihzKWZvcih2YXIgbD1zWzBdLHU9c1sxXSxwPTA7cDwzOysrcCluW3BdPU1hdGgubWluKG5bcF0sbFtwXSksaVtwXT1NYXRoLm1heChpW3BdLHVbcF0pfXZhciBkPU4uYm91bmRzO2lmKE4uYXV0b0JvdW5kcylmb3IocD0wO3A8MzsrK3Ape2lmKGlbcF08bltwXSluW3BdPS0xLGlbcF09MTtlbHNle25bcF09PT1pW3BdJiYobltwXS09MSxpW3BdKz0xKTt2YXIgbT0uMDUqKGlbcF0tbltwXSk7bltwXT1uW3BdLW0saVtwXT1pW3BdK219ZFswXVtwXT1uW3BdLGRbMV1bcF09aVtwXX12YXIgdj0hMTtmb3IocD0wO3A8MzsrK3Apdj12fHxHWzBdW3BdIT09ZFswXVtwXXx8R1sxXVtwXSE9PWRbMV1bcF0sR1swXVtwXT1kWzBdW3BdLEdbMV1bcF09ZFsxXVtwXTtpZihPPU98fHYsST1JfHx2KXtpZih2KXt2YXIgeT1bMCwwLDBdO2ZvcihvPTA7bzwzOysrbyl5W29dPWcoKGRbMV1bb10tZFswXVtvXSkvMTApO0EuYXV0b1RpY2tzP0EudXBkYXRlKHtib3VuZHM6ZCx0aWNrU3BhY2luZzp5fSk6QS51cGRhdGUoe2JvdW5kczpkfSl9dmFyIFQ9ci5kcmF3aW5nQnVmZmVyV2lkdGgsaz1yLmRyYXdpbmdCdWZmZXJIZWlnaHQ7RlswXT1ULEZbMV09ayxqWzBdPTB8TWF0aC5tYXgoVC9OLnBpeGVsUmF0aW8sMSksalsxXT0wfE1hdGgubWF4KGsvTi5waXhlbFJhdGlvLDEpLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5ib3VuZHMsbj10LmNhbWVyYVBhcmFtcyxpPW4ucHJvamVjdGlvbixhPW4ubW9kZWwsbz10LmdsLmRyYXdpbmdCdWZmZXJXaWR0aCxzPXQuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCxsPXQuek5lYXIsYz10LnpGYXIsdT10LmZvdnkscD1vL3M7ZT8oaChpLC1wLHAsLTEsMSxsLGMpLG4uX29ydGhvPSEwKTooZihpLHUscCxsLGMpLG4uX29ydGhvPSExKTtmb3IodmFyIGQ9MDtkPDE2OysrZClhW2RdPTA7YVsxNV09MTt2YXIgbT0wO2ZvcihkPTA7ZDwzOysrZCltPU1hdGgubWF4KG0sclsxXVtkXS1yWzBdW2RdKTtmb3IoZD0wO2Q8MzsrK2QpdC5hdXRvU2NhbGU/YVs1KmRdPXQuYXNwZWN0W2RdLyhyWzFdW2RdLXJbMF1bZF0pOmFbNSpkXT0xL20sdC5hdXRvQ2VudGVyJiYoYVsxMitkXT0uNSotYVs1KmRdKihyWzBdW2RdK3JbMV1bZF0pKX0oTix3KTtmb3Iobz0wO288ZTsrK28peyhDPUVbb10pLmF4ZXNCb3VuZHM9ZCxOLmNsaXBUb0JvdW5kcyYmKEMuY2xpcEJvdW5kcz1kKX14Lm9iamVjdCYmKE4uc25hcFRvRGF0YT9TLnBvc2l0aW9uPXguZGF0YUNvb3JkaW5hdGU6Uy5wb3NpdGlvbj14LmRhdGFQb3NpdGlvbixTLmJvdW5kcz1kKSxPJiYoTz0hMSxmdW5jdGlvbigpe2lmKCFIKCkpe3IuY29sb3JNYXNrKCEwLCEwLCEwLCEwKSxyLmRlcHRoTWFzayghMCksci5kaXNhYmxlKHIuQkxFTkQpLHIuZW5hYmxlKHIuREVQVEhfVEVTVCksci5kZXB0aEZ1bmMoci5MRVFVQUwpO2Zvcih2YXIgdD1FLmxlbmd0aCxlPVAubGVuZ3RoLG49MDtuPGU7KytuKXt2YXIgaT1QW25dO2kuc2hhcGU9aixpLmJlZ2luKCk7Zm9yKHZhciBhPTA7YTx0OysrYSlpZihMW2FdPT09bil7dmFyIG89RVthXTtvLmRyYXdQaWNrJiYoby5waXhlbFJhdGlvPTEsby5kcmF3UGljayhSKSl9aS5lbmQoKX19fSgpKSxOLmF4ZXNQaXhlbHM9YShOLmF4ZXMsUixULGspLE4ub25yZW5kZXImJk4ub25yZW5kZXIoKSxyLmJpbmRGcmFtZWJ1ZmZlcihyLkZSQU1FQlVGRkVSLG51bGwpLHIudmlld3BvcnQoMCwwLFQsayksTi5jbGVhclJHQkEoKSxyLmRlcHRoTWFzayghMCksci5jb2xvck1hc2soITAsITAsITAsITApLHIuZW5hYmxlKHIuREVQVEhfVEVTVCksci5kZXB0aEZ1bmMoci5MRVFVQUwpLHIuZGlzYWJsZShyLkJMRU5EKSxyLmRpc2FibGUoci5DVUxMX0ZBQ0UpO3ZhciBNPSExO0EuZW5hYmxlJiYoTT1NfHxBLmlzVHJhbnNwYXJlbnQoKSxBLmRyYXcoUikpLFMuYXhlcz1BLHgub2JqZWN0JiZTLmRyYXcoUiksci5kaXNhYmxlKHIuQ1VMTF9GQUNFKTtmb3Iobz0wO288ZTsrK28peyhDPUVbb10pLmF4ZXM9QSxDLnBpeGVsUmF0aW89Ti5waXhlbFJhdGlvLEMuaXNPcGFxdWUmJkMuaXNPcGFxdWUoKSYmQy5kcmF3KFIpLEMuaXNUcmFuc3BhcmVudCYmQy5pc1RyYW5zcGFyZW50KCkmJihNPSEwKX1pZihNKXtiLnNoYXBlPUYsYi5iaW5kKCksci5jbGVhcihyLkRFUFRIX0JVRkZFUl9CSVQpLHIuY29sb3JNYXNrKCExLCExLCExLCExKSxyLmRlcHRoTWFzayghMCksci5kZXB0aEZ1bmMoci5MRVNTKSxBLmVuYWJsZSYmQS5pc1RyYW5zcGFyZW50KCkmJkEuZHJhd1RyYW5zcGFyZW50KFIpO2ZvcihvPTA7bzxlOysrbyl7KEM9RVtvXSkuaXNPcGFxdWUmJkMuaXNPcGFxdWUoKSYmQy5kcmF3KFIpfXIuZW5hYmxlKHIuQkxFTkQpLHIuYmxlbmRFcXVhdGlvbihyLkZVTkNfQUREKSxyLmJsZW5kRnVuYyhyLk9ORSxyLk9ORV9NSU5VU19TUkNfQUxQSEEpLHIuY29sb3JNYXNrKCEwLCEwLCEwLCEwKSxyLmRlcHRoTWFzayghMSksci5jbGVhckNvbG9yKDAsMCwwLDApLHIuY2xlYXIoci5DT0xPUl9CVUZGRVJfQklUKSxBLmlzVHJhbnNwYXJlbnQoKSYmQS5kcmF3VHJhbnNwYXJlbnQoUik7Zm9yKG89MDtvPGU7KytvKXt2YXIgQzsoQz1FW29dKS5pc1RyYW5zcGFyZW50JiZDLmlzVHJhbnNwYXJlbnQoKSYmQy5kcmF3VHJhbnNwYXJlbnQoUil9ci5iaW5kRnJhbWVidWZmZXIoci5GUkFNRUJVRkZFUixudWxsKSxyLmJsZW5kRnVuYyhyLk9ORSxyLk9ORV9NSU5VU19TUkNfQUxQSEEpLHIuZGlzYWJsZShyLkRFUFRIX1RFU1QpLF8uYmluZCgpLGIuY29sb3JbMF0uYmluZCgwKSxfLnVuaWZvcm1zLmFjY3VtQnVmZmVyPTAsYyhyKSxyLmRpc2FibGUoci5CTEVORCl9ST0hMTtmb3Iobz0wO288ZTsrK28pRVtvXS5kaXJ0eT0hMX19fXJldHVybiBOLmVuYWJsZU1vdXNlTGlzdGVuZXJzKCksZnVuY3Rpb24gdCgpe2lmKE4uX3N0b3BwZWR8fE4uY29udGV4dExvc3QpcmV0dXJuO1koKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9KCksTi5yZWRyYXc9ZnVuY3Rpb24oKXtOLl9zdG9wcGVkfHwoST0hMCxZKCkpfSxOfSxjcmVhdGVDYW1lcmE6bn19LHsiLi9jYW1lcmEuanMiOjMxMCwiLi9saWIvc2hhZGVyIjozMTEsImEtYmlnLXRyaWFuZ2xlIjo2NiwiZ2wtYXhlczNkIjoyNDksImdsLWF4ZXMzZC9wcm9wZXJ0aWVzIjoyNTYsImdsLWZibyI6MjY1LCJnbC1tYXQ0L29ydGhvIjoyOTAsImdsLW1hdDQvcGVyc3BlY3RpdmUiOjI5MSwiZ2wtc2VsZWN0LXN0YXRpYyI6MzIyLCJnbC1zcGlrZXMzZCI6MzMyLCJpcy1tb2JpbGUiOjQzNSwibW91c2UtY2hhbmdlIjo0NDl9XSwzMTM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5Iik7ci5wb2ludFZlcnRleD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcblxudW5pZm9ybSBtYXQzIG1hdHJpeDtcbnVuaWZvcm0gZmxvYXQgcG9pbnRTaXplO1xudW5pZm9ybSBmbG9hdCBwb2ludENsb3VkO1xuXG5oaWdocCBmbG9hdCByYW5kKHZlYzIgY28pIHtcbiAgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTg7XG4gIGhpZ2hwIGZsb2F0IGIgPSA3OC4yMzM7XG4gIGhpZ2hwIGZsb2F0IGMgPSA0Mzc1OC41NDUzO1xuICBoaWdocCBmbG9hdCBkID0gZG90KGNvLnh5LCB2ZWMyKGEsIGIpKTtcbiAgaGlnaHAgZmxvYXQgZSA9IG1vZChkLCAzLjE0KTtcbiAgcmV0dXJuIGZyYWN0KHNpbihlKSAqIGMpO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgaGdQb3NpdGlvbiA9IG1hdHJpeCAqIHZlYzMocG9zaXRpb24sIDEpO1xuICBnbF9Qb3NpdGlvbiAgPSB2ZWM0KGhnUG9zaXRpb24ueHksIDAsIGhnUG9zaXRpb24ueik7XG4gICAgLy8gaWYgd2UgZG9uJ3Qgaml0dGVyIHRoZSBwb2ludCBzaXplIGEgYml0LCBvdmVyYWxsIHBvaW50IGNsb3VkXG4gICAgLy8gc2F0dXJhdGlvbiAnanVtcHMnIG9uIHpvb21pbmcsIHdoaWNoIGlzIGRpc3R1cmJpbmcgYW5kIGNvbmZ1c2luZ1xuICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemUgKiAoKDE5LjUgKyByYW5kKHBvc2l0aW9uKSkgLyAyMC4wKTtcbiAgaWYocG9pbnRDbG91ZCAhPSAwLjApIHsgLy8gcG9pbnRDbG91ZCBpcyB0cnV0aHlcbiAgICAvLyBnZXQgdGhlIHNhbWUgc3F1YXJlIHN1cmZhY2UgYXMgY2lyY2xlIHdvdWxkIGJlXG4gICAgZ2xfUG9pbnRTaXplICo9IDAuODg2O1xuICB9XG59Il0pLHIucG9pbnRGcmFnbWVudD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3IsIGJvcmRlckNvbG9yO1xudW5pZm9ybSBmbG9hdCBjZW50ZXJGcmFjdGlvbjtcbnVuaWZvcm0gZmxvYXQgcG9pbnRDbG91ZDtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCByYWRpdXM7XG4gIHZlYzQgYmFzZUNvbG9yO1xuICBpZihwb2ludENsb3VkICE9IDAuMCkgeyAvLyBwb2ludENsb3VkIGlzIHRydXRoeVxuICAgIGlmKGNlbnRlckZyYWN0aW9uID09IDEuMCkge1xuICAgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdsX0ZyYWdDb2xvciA9IG1peChib3JkZXJDb2xvciwgY29sb3IsIGNlbnRlckZyYWN0aW9uKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmFkaXVzID0gbGVuZ3RoKDIuMCAqIGdsX1BvaW50Q29vcmQueHkgLSAxLjApO1xuICAgIGlmKHJhZGl1cyA+IDEuMCkge1xuICAgICAgZGlzY2FyZDtcbiAgICB9XG4gICAgYmFzZUNvbG9yID0gbWl4KGJvcmRlckNvbG9yLCBjb2xvciwgc3RlcChyYWRpdXMsIGNlbnRlckZyYWN0aW9uKSk7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChiYXNlQ29sb3IucmdiICogYmFzZUNvbG9yLmEsIGJhc2VDb2xvci5hKTtcbiAgfVxufVxuIl0pLHIucGlja1ZlcnRleD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IHBpY2tJZDtcblxudW5pZm9ybSBtYXQzIG1hdHJpeDtcbnVuaWZvcm0gZmxvYXQgcG9pbnRTaXplO1xudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBoZ1Bvc2l0aW9uID0gbWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMSk7XG4gIGdsX1Bvc2l0aW9uICA9IHZlYzQoaGdQb3NpdGlvbi54eSwgMCwgaGdQb3NpdGlvbi56KTtcbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xuXG4gIHZlYzQgaWQgPSBwaWNrSWQgKyBwaWNrT2Zmc2V0O1xuICBpZC55ICs9IGZsb29yKGlkLnggLyAyNTYuMCk7XG4gIGlkLnggLT0gZmxvb3IoaWQueCAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGlkLnogKz0gZmxvb3IoaWQueSAvIDI1Ni4wKTtcbiAgaWQueSAtPSBmbG9vcihpZC55IC8gMjU2LjApICogMjU2LjA7XG5cbiAgaWQudyArPSBmbG9vcihpZC56IC8gMjU2LjApO1xuICBpZC56IC09IGZsb29yKGlkLnogLyAyNTYuMCkgKiAyNTYuMDtcblxuICBmcmFnSWQgPSBpZDtcbn1cbiJdKSxyLnBpY2tGcmFnbWVudD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IHJhZGl1cyA9IGxlbmd0aCgyLjAgKiBnbF9Qb2ludENvb3JkLnh5IC0gMS4wKTtcbiAgaWYocmFkaXVzID4gMS4wKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSBmcmFnSWQgLyAyNTUuMDtcbn1cbiJdKX0se2dsc2xpZnk6NDI0fV0sMzE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2wtYnVmZmVyIiksYT10KCJ0eXBlZGFycmF5LXBvb2wiKSxvPXQoIi4vbGliL3NoYWRlciIpO2Z1bmN0aW9uIHModCxlLHIsbixpKXt0aGlzLnBsb3Q9dCx0aGlzLm9mZnNldEJ1ZmZlcj1lLHRoaXMucGlja0J1ZmZlcj1yLHRoaXMuc2hhZGVyPW4sdGhpcy5waWNrU2hhZGVyPWksdGhpcy5zaXplTWluPS41LHRoaXMuc2l6ZU1pbkNhcD0yLHRoaXMuc2l6ZU1heD0yMCx0aGlzLmFyZWFSYXRpbz0xLHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29sb3I9WzEsMCwwLDFdLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDFdLHRoaXMuYmxlbmQ9ITEsdGhpcy5waWNrT2Zmc2V0PTAsdGhpcy5wb2ludHM9bnVsbH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdsLGE9aShyKSxsPWkociksYz1uKHIsby5wb2ludFZlcnRleCxvLnBvaW50RnJhZ21lbnQpLHU9bihyLG8ucGlja1ZlcnRleCxvLnBpY2tGcmFnbWVudCksZj1uZXcgcyh0LGEsbCxjLHUpO3JldHVybiBmLnVwZGF0ZShlKSx0LmFkZE9iamVjdChmKSxmfTt2YXIgbCxjLHU9cy5wcm90b3R5cGU7dS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5vZmZzZXRCdWZmZXIuZGlzcG9zZSgpLHRoaXMucGlja0J1ZmZlci5kaXNwb3NlKCksdGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKX0sdS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU7ZnVuY3Rpb24gcihlLHIpe3JldHVybiBlIGluIHQ/dFtlXTpyfXQ9dHx8e30sdGhpcy5zaXplTWluPXIoInNpemVNaW4iLC41KSx0aGlzLnNpemVNYXg9cigic2l6ZU1heCIsMjApLHRoaXMuY29sb3I9cigiY29sb3IiLFsxLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmFyZWFSYXRpbz1yKCJhcmVhUmF0aW8iLDEpLHRoaXMuYm9yZGVyQ29sb3I9cigiYm9yZGVyQ29sb3IiLFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmJsZW5kPXIoImJsZW5kIiwhMSk7dmFyIG49dC5wb3NpdGlvbnMubGVuZ3RoPj4+MSxpPXQucG9zaXRpb25zIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5LG89dC5pZFRvSW5kZXggaW5zdGFuY2VvZiBJbnQzMkFycmF5JiZ0LmlkVG9JbmRleC5sZW5ndGg+PW4scz10LnBvc2l0aW9ucyxsPWk/czphLm1hbGxvY0Zsb2F0MzIocy5sZW5ndGgpLGM9bz90LmlkVG9JbmRleDphLm1hbGxvY0ludDMyKG4pO2lmKGl8fGwuc2V0KHMpLCFvKWZvcihsLnNldChzKSxlPTA7ZTxuO2UrKyljW2VdPWU7dGhpcy5wb2ludHM9cyx0aGlzLm9mZnNldEJ1ZmZlci51cGRhdGUobCksdGhpcy5waWNrQnVmZmVyLnVwZGF0ZShjKSxpfHxhLmZyZWUobCksb3x8YS5mcmVlKGMpLHRoaXMucG9pbnRDb3VudD1uLHRoaXMucGlja09mZnNldD0wfSx1LnVuaWZpZWREcmF3PShsPVsxLDAsMCwwLDEsMCwwLDAsMV0sYz1bMCwwLDAsMF0sZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwIT09dCxyPWU/dGhpcy5waWNrU2hhZGVyOnRoaXMuc2hhZGVyLG49dGhpcy5wbG90LmdsLGk9dGhpcy5wbG90LmRhdGFCb3g7aWYoMD09PXRoaXMucG9pbnRDb3VudClyZXR1cm4gdDt2YXIgYT1pWzJdLWlbMF0sbz1pWzNdLWlbMV0scz1mdW5jdGlvbih0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoPj4+MTtmb3Iocj0wO3I8aTtyKyspe3ZhciBhPXRbMipyXSxvPXRbMipyKzFdO2E+PWVbMF0mJmE8PWVbMl0mJm8+PWVbMV0mJm88PWVbM10mJm4rK31yZXR1cm4gbn0odGhpcy5wb2ludHMsaSksdT10aGlzLnBsb3QucGlja1BpeGVsUmF0aW8qTWF0aC5tYXgoTWF0aC5taW4odGhpcy5zaXplTWluQ2FwLHRoaXMuc2l6ZU1pbiksTWF0aC5taW4odGhpcy5zaXplTWF4LHRoaXMuc2l6ZU1heC9NYXRoLnBvdyhzLC4zMzMzMykpKTtsWzBdPTIvYSxsWzRdPTIvbyxsWzZdPS0yKmlbMF0vYS0xLGxbN109LTIqaVsxXS9vLTEsdGhpcy5vZmZzZXRCdWZmZXIuYmluZCgpLHIuYmluZCgpLHIuYXR0cmlidXRlcy5wb3NpdGlvbi5wb2ludGVyKCksci51bmlmb3Jtcy5tYXRyaXg9bCxyLnVuaWZvcm1zLmNvbG9yPXRoaXMuY29sb3Isci51bmlmb3Jtcy5ib3JkZXJDb2xvcj10aGlzLmJvcmRlckNvbG9yLHIudW5pZm9ybXMucG9pbnRDbG91ZD11PDUsci51bmlmb3Jtcy5wb2ludFNpemU9dSxyLnVuaWZvcm1zLmNlbnRlckZyYWN0aW9uPU1hdGgubWluKDEsTWF0aC5tYXgoMCxNYXRoLnNxcnQoMS10aGlzLmFyZWFSYXRpbykpKSxlJiYoY1swXT0yNTUmdCxjWzFdPXQ+PjgmMjU1LGNbMl09dD4+MTYmMjU1LGNbM109dD4+MjQmMjU1LHRoaXMucGlja0J1ZmZlci5iaW5kKCksci5hdHRyaWJ1dGVzLnBpY2tJZC5wb2ludGVyKG4uVU5TSUdORURfQllURSksci51bmlmb3Jtcy5waWNrT2Zmc2V0PWMsdGhpcy5waWNrT2Zmc2V0PXQpO3ZhciBmPW4uZ2V0UGFyYW1ldGVyKG4uQkxFTkQpLGg9bi5nZXRQYXJhbWV0ZXIobi5ESVRIRVIpO3JldHVybiBmJiYhdGhpcy5ibGVuZCYmbi5kaXNhYmxlKG4uQkxFTkQpLGgmJm4uZGlzYWJsZShuLkRJVEhFUiksbi5kcmF3QXJyYXlzKG4uUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KSxmJiYhdGhpcy5ibGVuZCYmbi5lbmFibGUobi5CTEVORCksaCYmbi5lbmFibGUobi5ESVRIRVIpLHQrdGhpcy5wb2ludENvdW50fSksdS5kcmF3PXUudW5pZmllZERyYXcsdS5kcmF3UGljaz11LnVuaWZpZWREcmF3LHUucGljaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5waWNrT2Zmc2V0LGk9dGhpcy5wb2ludENvdW50O2lmKHI8bnx8cj49bitpKXJldHVybiBudWxsO3ZhciBhPXItbixvPXRoaXMucG9pbnRzO3JldHVybntvYmplY3Q6dGhpcyxwb2ludElkOmEsZGF0YUNvb3JkOltvWzIqYV0sb1syKmErMV1dfX19LHsiLi9saWIvc2hhZGVyIjozMTMsImdsLWJ1ZmZlciI6MjU3LCJnbC1zaGFkZXIiOjMyMywidHlwZWRhcnJheS1wb29sIjo1OTB9XSwzMTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsbCxjPWVbMF0sdT1lWzFdLGY9ZVsyXSxoPWVbM10scD1yWzBdLGQ9clsxXSxtPXJbMl0sZz1yWzNdOyhhPWMqcCt1KmQrZiptK2gqZyk8MCYmKGE9LWEscD0tcCxkPS1kLG09LW0sZz0tZyk7MS1hPjFlLTY/KGk9TWF0aC5hY29zKGEpLG89TWF0aC5zaW4oaSkscz1NYXRoLnNpbigoMS1uKSppKS9vLGw9TWF0aC5zaW4obippKS9vKToocz0xLW4sbD1uKTtyZXR1cm4gdFswXT1zKmMrbCpwLHRbMV09cyp1K2wqZCx0WzJdPXMqZitsKm0sdFszXT1zKmgrbCpnLHR9fSx7fV0sMzE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdHx8MD09PXQ/dC50b1N0cmluZygpOiIifX0se31dLDMxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ2ZWN0b3JpemUtdGV4dCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9aVtlXTthfHwoYT1pW2VdPXt9KTtpZih0IGluIGEpcmV0dXJuIGFbdF07dmFyIG89e3RleHRBbGlnbjoiY2VudGVyIix0ZXh0QmFzZWxpbmU6Im1pZGRsZSIsbGluZUhlaWdodDoxLGZvbnQ6ZSxsaW5lU3BhY2luZzoxLjI1LHN0eWxldGFnczp7YnJlYWtsaW5lczohMCxib2xkczohMCxpdGFsaWNzOiEwLHN1YnNjcmlwdHM6ITAsc3VwZXJzY3JpcHRzOiEwfSx0cmlhbmdsZXM6ITB9LHM9bih0LG8pO28udHJpYW5nbGVzPSExO3ZhciBsLGMsdT1uKHQsbyk7aWYociYmMSE9PXIpe2ZvcihsPTA7bDxzLnBvc2l0aW9ucy5sZW5ndGg7KytsKWZvcihjPTA7YzxzLnBvc2l0aW9uc1tsXS5sZW5ndGg7KytjKXMucG9zaXRpb25zW2xdW2NdLz1yO2ZvcihsPTA7bDx1LnBvc2l0aW9ucy5sZW5ndGg7KytsKWZvcihjPTA7Yzx1LnBvc2l0aW9uc1tsXS5sZW5ndGg7KytjKXUucG9zaXRpb25zW2xdW2NdLz1yfXZhciBmPVtbMS8wLDEvMF0sWy0xLzAsLTEvMF1dLGg9dS5wb3NpdGlvbnMubGVuZ3RoO2ZvcihsPTA7bDxoOysrbCl7dmFyIHA9dS5wb3NpdGlvbnNbbF07Zm9yKGM9MDtjPDI7KytjKWZbMF1bY109TWF0aC5taW4oZlswXVtjXSxwW2NdKSxmWzFdW2NdPU1hdGgubWF4KGZbMV1bY10scFtjXSl9cmV0dXJuIGFbdF09W3MsdSxmXX07dmFyIGk9e319LHsidmVjdG9yaXplLXRleHQiOjU5Nn1dLDMxODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2xzbGlmeSIpLGE9aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgZ2x5cGg7XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZTtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xuXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGZsb2F0IHNjYWxlID0gMS4wO1xuICAgIGlmKGRpc3RhbmNlKGhpZ2hsaWdodElkLCBpZCkgPCAwLjAwMDEpIHtcbiAgICAgIHNjYWxlID0gaGlnaGxpZ2h0U2NhbGU7XG4gICAgfVxuXG4gICAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxKTtcbiAgICB2ZWM0IHZpZXdQb3NpdGlvbiA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICAgIHZpZXdQb3NpdGlvbiA9IHZpZXdQb3NpdGlvbiAvIHZpZXdQb3NpdGlvbi53O1xuICAgIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqICh2aWV3UG9zaXRpb24gKyBzY2FsZSAqIHZlYzQoZ2x5cGgueCwgLWdseXBoLnksIDAsIDApKTtcblxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICAgIGludGVycENvbG9yID0gY29sb3I7XG4gICAgcGlja0lkID0gaWQ7XG4gICAgZGF0YUNvb3JkaW5hdGUgPSBwb3NpdGlvbjtcbiAgfVxufSJdKSxvPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIGdseXBoO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaXplO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IGhpZ2hsaWdodFNjYWxlLCBwaXhlbFJhdGlvO1xudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xuXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGZsb2F0IHNjYWxlID0gcGl4ZWxSYXRpbztcbiAgICBpZihkaXN0YW5jZShoaWdobGlnaHRJZC5iZ3IsIGlkLmJncikgPCAwLjAwMSkge1xuICAgICAgc2NhbGUgKj0gaGlnaGxpZ2h0U2NhbGU7XG4gICAgfVxuXG4gICAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgIHZlYzQgdmlld1Bvc2l0aW9uID0gdmlldyAqIHdvcmxkUG9zaXRpb247XG4gICAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlld1Bvc2l0aW9uO1xuICAgIGNsaXBQb3NpdGlvbiAvPSBjbGlwUG9zaXRpb24udztcblxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uICsgdmVjNChzY3JlZW5TaXplICogc2NhbGUgKiB2ZWMyKGdseXBoLngsIC1nbHlwaC55KSwgMC4wLCAwLjApO1xuICAgIGludGVycENvbG9yID0gY29sb3I7XG4gICAgcGlja0lkID0gaWQ7XG4gICAgZGF0YUNvb3JkaW5hdGUgPSBwb3NpdGlvbjtcbiAgfVxufSJdKSxzPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIGdseXBoO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gZmxvYXQgaGlnaGxpZ2h0U2NhbGU7XG51bmlmb3JtIHZlYzQgaGlnaGxpZ2h0SWQ7XG51bmlmb3JtIHZlYzMgYXhlc1syXTtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaXplO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHNjYWxlLCBwaXhlbFJhdGlvO1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xuXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGZsb2F0IGxzY2FsZSA9IHBpeGVsUmF0aW8gKiBzY2FsZTtcbiAgICBpZihkaXN0YW5jZShoaWdobGlnaHRJZCwgaWQpIDwgMC4wMDAxKSB7XG4gICAgICBsc2NhbGUgKj0gaGlnaGxpZ2h0U2NhbGU7XG4gICAgfVxuXG4gICAgdmVjNCBjbGlwQ2VudGVyICAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMSk7XG4gICAgdmVjMyBkYXRhUG9zaXRpb24gPSBwb3NpdGlvbiArIDAuNSpsc2NhbGUqKGF4ZXNbMF0gKiBnbHlwaC54ICsgYXhlc1sxXSAqIGdseXBoLnkpICogY2xpcENlbnRlci53ICogc2NyZWVuU2l6ZS55O1xuICAgIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQoZGF0YVBvc2l0aW9uLCAxKTtcblxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICAgIGludGVycENvbG9yID0gY29sb3I7XG4gICAgcGlja0lkID0gaWQ7XG4gICAgZGF0YUNvb3JkaW5hdGUgPSBkYXRhUG9zaXRpb247XG4gIH1cbn1cbiJdKSxsPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGZyYWdDbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKFxuICAgIG91dE9mUmFuZ2UoZnJhZ0NsaXBCb3VuZHNbMF0sIGZyYWdDbGlwQm91bmRzWzFdLCBkYXRhQ29vcmRpbmF0ZSkgfHxcbiAgICBpbnRlcnBDb2xvci5hICogb3BhY2l0eSA9PSAwLlxuICApIGRpc2NhcmQ7XG4gIGdsX0ZyYWdDb2xvciA9IGludGVycENvbG9yICogb3BhY2l0eTtcbn1cbiJdKSxjPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGZyYWdDbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBwaWNrR3JvdXA7XG5cbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoZnJhZ0NsaXBCb3VuZHNbMF0sIGZyYWdDbGlwQm91bmRzWzFdLCBkYXRhQ29vcmRpbmF0ZSkpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrR3JvdXAsIHBpY2tJZC5iZ3IpO1xufSJdKSx1PVt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToiZ2x5cGgiLHR5cGU6InZlYzIifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifV0sZj17dmVydGV4OmEsZnJhZ21lbnQ6bCxhdHRyaWJ1dGVzOnV9LGg9e3ZlcnRleDpvLGZyYWdtZW50OmwsYXR0cmlidXRlczp1fSxwPXt2ZXJ0ZXg6cyxmcmFnbWVudDpsLGF0dHJpYnV0ZXM6dX0sZD17dmVydGV4OmEsZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOnV9LG09e3ZlcnRleDpvLGZyYWdtZW50OmMsYXR0cmlidXRlczp1fSxnPXt2ZXJ0ZXg6cyxmcmFnbWVudDpjLGF0dHJpYnV0ZXM6dX07ZnVuY3Rpb24gdih0LGUpe3ZhciByPW4odCxlKSxpPXIuYXR0cmlidXRlcztyZXR1cm4gaS5wb3NpdGlvbi5sb2NhdGlvbj0wLGkuY29sb3IubG9jYXRpb249MSxpLmdseXBoLmxvY2F0aW9uPTIsaS5pZC5sb2NhdGlvbj0zLHJ9ci5jcmVhdGVQZXJzcGVjdGl2ZT1mdW5jdGlvbih0KXtyZXR1cm4gdih0LGYpfSxyLmNyZWF0ZU9ydGhvPWZ1bmN0aW9uKHQpe3JldHVybiB2KHQsaCl9LHIuY3JlYXRlUHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gdih0LHApfSxyLmNyZWF0ZVBpY2tQZXJzcGVjdGl2ZT1mdW5jdGlvbih0KXtyZXR1cm4gdih0LGQpfSxyLmNyZWF0ZVBpY2tPcnRobz1mdW5jdGlvbih0KXtyZXR1cm4gdih0LG0pfSxyLmNyZWF0ZVBpY2tQcm9qZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB2KHQsZyl9fSx7ImdsLXNoYWRlciI6MzIzLGdsc2xpZnk6NDI0fV0sMzE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImlzLXN0cmluZy1ibGFuayIpLGk9dCgiZ2wtYnVmZmVyIiksYT10KCJnbC12YW8iKSxvPXQoInR5cGVkYXJyYXktcG9vbCIpLHM9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGw9dCgiLi9saWIvc2hhZGVycyIpLGM9dCgiLi9saWIvZ2x5cGhzIiksdT10KCIuL2xpYi9nZXQtc2ltcGxlLXN0cmluZyIpLGY9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIGgodCxlKXt2YXIgcj10WzBdLG49dFsxXSxpPXRbMl0sYT10WzNdO3JldHVybiB0WzBdPWVbMF0qcitlWzRdKm4rZVs4XSppK2VbMTJdKmEsdFsxXT1lWzFdKnIrZVs1XSpuK2VbOV0qaStlWzEzXSphLHRbMl09ZVsyXSpyK2VbNl0qbitlWzEwXSppK2VbMTRdKmEsdFszXT1lWzNdKnIrZVs3XSpuK2VbMTFdKmkrZVsxNV0qYSx0fWZ1bmN0aW9uIHAodCxlLHIsbil7cmV0dXJuIGgobixuKSxoKG4sbiksaChuLG4pfWZ1bmN0aW9uIGQodCxlKXt0aGlzLmluZGV4PXQsdGhpcy5kYXRhQ29vcmRpbmF0ZT10aGlzLnBvc2l0aW9uPWV9ZnVuY3Rpb24gbSh0KXtyZXR1cm4hMD09PXR8fHQ+MT8xOnR9ZnVuY3Rpb24gZyh0LGUscixuLGksYSxvLHMsbCxjLHUsZil7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuc2hhZGVyPWUsdGhpcy5vcnRob1NoYWRlcj1yLHRoaXMucHJvamVjdFNoYWRlcj1uLHRoaXMucG9pbnRCdWZmZXI9aSx0aGlzLmNvbG9yQnVmZmVyPWEsdGhpcy5nbHlwaEJ1ZmZlcj1vLHRoaXMuaWRCdWZmZXI9cyx0aGlzLnZhbz1sLHRoaXMudmVydGV4Q291bnQ9MCx0aGlzLmxpbmVWZXJ0ZXhDb3VudD0wLHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5saW5lV2lkdGg9MCx0aGlzLnByb2plY3RTY2FsZT1bMi8zLDIvMywyLzNdLHRoaXMucHJvamVjdE9wYWNpdHk9WzEsMSwxXSx0aGlzLnByb2plY3RIYXNBbHBoYT0hMSx0aGlzLnBpY2tJZD0wLHRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyPWMsdGhpcy5waWNrT3J0aG9TaGFkZXI9dSx0aGlzLnBpY2tQcm9qZWN0U2hhZGVyPWYsdGhpcy5wb2ludHM9W10sdGhpcy5fc2VsZWN0UmVzdWx0PW5ldyBkKDAsWzAsMCwwXSksdGhpcy51c2VPcnRobz0hMCx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmF4ZXNQcm9qZWN0PVshMCwhMCwhMF0sdGhpcy5heGVzQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMuaGlnaGxpZ2h0SWQ9WzEsMSwxLDFdLHRoaXMuaGlnaGxpZ2h0U2NhbGU9Mix0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5kaXJ0eT0hMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPWwuY3JlYXRlUGVyc3BlY3RpdmUoZSksbj1sLmNyZWF0ZU9ydGhvKGUpLG89bC5jcmVhdGVQcm9qZWN0KGUpLHM9bC5jcmVhdGVQaWNrUGVyc3BlY3RpdmUoZSksYz1sLmNyZWF0ZVBpY2tPcnRobyhlKSx1PWwuY3JlYXRlUGlja1Byb2plY3QoZSksZj1pKGUpLGg9aShlKSxwPWkoZSksZD1pKGUpLG09YShlLFt7YnVmZmVyOmYsc2l6ZTozLHR5cGU6ZS5GTE9BVH0se2J1ZmZlcjpoLHNpemU6NCx0eXBlOmUuRkxPQVR9LHtidWZmZXI6cCxzaXplOjIsdHlwZTplLkZMT0FUfSx7YnVmZmVyOmQsc2l6ZTo0LHR5cGU6ZS5VTlNJR05FRF9CWVRFLG5vcm1hbGl6ZWQ6ITB9XSksdj1uZXcgZyhlLHIsbixvLGYsaCxwLGQsbSxzLGMsdSk7cmV0dXJuIHYudXBkYXRlKHQpLHZ9O3ZhciB2PWcucHJvdG90eXBlO3YucGlja1Nsb3RzPTEsdi5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSx2LmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtpZih0aGlzLmhhc0FscGhhKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5heGVzUHJvamVjdFt0XSYmdGhpcy5wcm9qZWN0SGFzQWxwaGEpcmV0dXJuITA7cmV0dXJuITF9LHYuaXNPcGFxdWU9ZnVuY3Rpb24oKXtpZighdGhpcy5oYXNBbHBoYSlyZXR1cm4hMDtmb3IodmFyIHQ9MDt0PDM7Kyt0KWlmKHRoaXMuYXhlc1Byb2plY3RbdF0mJiF0aGlzLnByb2plY3RIYXNBbHBoYSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIHk9WzAsMF0seD1bMCwwLDBdLGI9WzAsMCwwXSxfPVswLDAsMCwxXSx3PVswLDAsMCwxXSxUPWYuc2xpY2UoKSxrPVswLDAsMF0sQT1bWzAsMCwwXSxbMCwwLDBdXTtmdW5jdGlvbiBNKHQpe3JldHVybiB0WzBdPXRbMV09dFsyXT0wLHR9ZnVuY3Rpb24gUyh0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPTEsdH1mdW5jdGlvbiBFKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0W3JdPW4sdH1mdW5jdGlvbiBMKHQsZSxyLG4pe3ZhciBpLGE9ZS5heGVzUHJvamVjdCxvPWUuZ2wsbD10LnVuaWZvcm1zLGM9ci5tb2RlbHx8Zix1PXIudmlld3x8ZixoPXIucHJvamVjdGlvbnx8ZixkPWUuYXhlc0JvdW5kcyxtPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1BLHI9MDtyPDI7KytyKWZvcih2YXIgbj0wO248MzsrK24pZVtyXVtuXT1NYXRoLm1heChNYXRoLm1pbih0W3JdW25dLDFlOCksLTFlOCk7cmV0dXJuIGV9KGUuY2xpcEJvdW5kcyk7aT1lLmF4ZXMmJmUuYXhlcy5sYXN0Q3ViZVByb3BzP2UuYXhlcy5sYXN0Q3ViZVByb3BzLmF4aXM6WzEsMSwxXSx5WzBdPTIvby5kcmF3aW5nQnVmZmVyV2lkdGgseVsxXT0yL28uZHJhd2luZ0J1ZmZlckhlaWdodCx0LmJpbmQoKSxsLnZpZXc9dSxsLnByb2plY3Rpb249aCxsLnNjcmVlblNpemU9eSxsLmhpZ2hsaWdodElkPWUuaGlnaGxpZ2h0SWQsbC5oaWdobGlnaHRTY2FsZT1lLmhpZ2hsaWdodFNjYWxlLGwuY2xpcEJvdW5kcz1tLGwucGlja0dyb3VwPWUucGlja0lkLzI1NSxsLnBpeGVsUmF0aW89bjtmb3IodmFyIGc9MDtnPDM7KytnKWlmKGFbZ10pe2wuc2NhbGU9ZS5wcm9qZWN0U2NhbGVbZ10sbC5vcGFjaXR5PWUucHJvamVjdE9wYWNpdHlbZ107Zm9yKHZhciB2PVQsTD0wO0w8MTY7KytMKXZbTF09MDtmb3IoTD0wO0w8NDsrK0wpdls1KkxdPTE7dls1KmddPTAsaVtnXTwwP3ZbMTIrZ109ZFswXVtnXTp2WzEyK2ddPWRbMV1bZ10scyh2LGMsdiksbC5tb2RlbD12O3ZhciBDPShnKzEpJTMsUD0oZysyKSUzLEk9TSh4KSxPPU0oYik7SVtDXT0xLE9bUF09MTt2YXIgej1wKDAsMCwwLFMoXyxJKSksRD1wKDAsMCwwLFModyxPKSk7aWYoTWF0aC5hYnMoelsxXSk+TWF0aC5hYnMoRFsxXSkpe3ZhciBSPXo7ej1ELEQ9UixSPUksST1PLE89Ujt2YXIgRj1DO0M9UCxQPUZ9elswXTwwJiYoSVtDXT0tMSksRFsxXT4wJiYoT1tQXT0tMSk7dmFyIEI9MCxOPTA7Zm9yKEw9MDtMPDQ7KytMKUIrPU1hdGgucG93KGNbNCpDK0xdLDIpLE4rPU1hdGgucG93KGNbNCpQK0xdLDIpO0lbQ10vPU1hdGguc3FydChCKSxPW1BdLz1NYXRoLnNxcnQoTiksbC5heGVzWzBdPUksbC5heGVzWzFdPU8sbC5mcmFnQ2xpcEJvdW5kc1swXT1FKGssbVswXSxnLC0xZTgpLGwuZnJhZ0NsaXBCb3VuZHNbMV09RShrLG1bMV0sZywxZTgpLGUudmFvLmJpbmQoKSxlLnZhby5kcmF3KG8uVFJJQU5HTEVTLGUudmVydGV4Q291bnQpLGUubGluZVdpZHRoPjAmJihvLmxpbmVXaWR0aChlLmxpbmVXaWR0aCpuKSxlLnZhby5kcmF3KG8uTElORVMsZS5saW5lVmVydGV4Q291bnQsZS52ZXJ0ZXhDb3VudCkpLGUudmFvLnVuYmluZCgpfX12YXIgQz1bWy0xZTgsLTFlOCwtMWU4XSxbMWU4LDFlOCwxZThdXTtmdW5jdGlvbiBQKHQsZSxyLG4saSxhLG8pe3ZhciBzPXIuZ2w7aWYoKGE9PT1yLnByb2plY3RIYXNBbHBoYXx8bykmJkwoZSxyLG4saSksYT09PXIuaGFzQWxwaGF8fG8pe3QuYmluZCgpO3ZhciBsPXQudW5pZm9ybXM7bC5tb2RlbD1uLm1vZGVsfHxmLGwudmlldz1uLnZpZXd8fGYsbC5wcm9qZWN0aW9uPW4ucHJvamVjdGlvbnx8Zix5WzBdPTIvcy5kcmF3aW5nQnVmZmVyV2lkdGgseVsxXT0yL3MuZHJhd2luZ0J1ZmZlckhlaWdodCxsLnNjcmVlblNpemU9eSxsLmhpZ2hsaWdodElkPXIuaGlnaGxpZ2h0SWQsbC5oaWdobGlnaHRTY2FsZT1yLmhpZ2hsaWdodFNjYWxlLGwuZnJhZ0NsaXBCb3VuZHM9QyxsLmNsaXBCb3VuZHM9ci5heGVzLmJvdW5kcyxsLm9wYWNpdHk9ci5vcGFjaXR5LGwucGlja0dyb3VwPXIucGlja0lkLzI1NSxsLnBpeGVsUmF0aW89aSxyLnZhby5iaW5kKCksci52YW8uZHJhdyhzLlRSSUFOR0xFUyxyLnZlcnRleENvdW50KSxyLmxpbmVXaWR0aD4wJiYocy5saW5lV2lkdGgoci5saW5lV2lkdGgqaSksci52YW8uZHJhdyhzLkxJTkVTLHIubGluZVZlcnRleENvdW50LHIudmVydGV4Q291bnQpKSxyLnZhby51bmJpbmQoKX19ZnVuY3Rpb24gSSh0LGUscixpKXt2YXIgYTthPUFycmF5LmlzQXJyYXkodCk/ZTx0Lmxlbmd0aD90W2VdOnZvaWQgMDp0LGE9dShhKTt2YXIgbz0hMDtuKGEpJiYoYT0iXHUyNWJjIixvPSExKTt2YXIgcz1jKGEscixpKTtyZXR1cm57bWVzaDpzWzBdLGxpbmVzOnNbMV0sYm91bmRzOnNbMl0sdmlzaWJsZTpvfX12LmRyYXc9ZnVuY3Rpb24odCl7UCh0aGlzLnVzZU9ydGhvP3RoaXMub3J0aG9TaGFkZXI6dGhpcy5zaGFkZXIsdGhpcy5wcm9qZWN0U2hhZGVyLHRoaXMsdCx0aGlzLnBpeGVsUmF0aW8sITEsITEpfSx2LmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXtQKHRoaXMudXNlT3J0aG8/dGhpcy5vcnRob1NoYWRlcjp0aGlzLnNoYWRlcix0aGlzLnByb2plY3RTaGFkZXIsdGhpcyx0LHRoaXMucGl4ZWxSYXRpbywhMCwhMSl9LHYuZHJhd1BpY2s9ZnVuY3Rpb24odCl7UCh0aGlzLnVzZU9ydGhvP3RoaXMucGlja09ydGhvU2hhZGVyOnRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyLHRoaXMucGlja1Byb2plY3RTaGFkZXIsdGhpcyx0LDEsITAsITApfSx2LnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPXQudmFsdWVbMl0rKHQudmFsdWVbMV08PDgpKyh0LnZhbHVlWzBdPDwxNik7aWYoZT49dGhpcy5wb2ludENvdW50fHxlPDApcmV0dXJuIG51bGw7dmFyIHI9dGhpcy5wb2ludHNbZV0sbj10aGlzLl9zZWxlY3RSZXN1bHQ7bi5pbmRleD1lO2Zvcih2YXIgaT0wO2k8MzsrK2kpbi5wb3NpdGlvbltpXT1uLmRhdGFDb29yZGluYXRlW2ldPXJbaV07cmV0dXJuIG59LHYuaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBlPXQuaW5kZXgscj0yNTUmZSxuPWU+PjgmMjU1LGk9ZT4+MTYmMjU1O3RoaXMuaGlnaGxpZ2h0SWQ9W3IvMjU1LG4vMjU1LGkvMjU1LDBdfWVsc2UgdGhpcy5oaWdobGlnaHRJZD1bMSwxLDEsMV19LHYudXBkYXRlPWZ1bmN0aW9uKHQpe2lmKCJwZXJzcGVjdGl2ZSJpbih0PXR8fHt9KSYmKHRoaXMudXNlT3J0aG89IXQucGVyc3BlY3RpdmUpLCJvcnRob2dyYXBoaWMiaW4gdCYmKHRoaXMudXNlT3J0aG89ISF0Lm9ydGhvZ3JhcGhpYyksImxpbmVXaWR0aCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLCJwcm9qZWN0ImluIHQpaWYoQXJyYXkuaXNBcnJheSh0LnByb2plY3QpKXRoaXMuYXhlc1Byb2plY3Q9dC5wcm9qZWN0O2Vsc2V7dmFyIGU9ISF0LnByb2plY3Q7dGhpcy5heGVzUHJvamVjdD1bZSxlLGVdfWlmKCJwcm9qZWN0U2NhbGUiaW4gdClpZihBcnJheS5pc0FycmF5KHQucHJvamVjdFNjYWxlKSl0aGlzLnByb2plY3RTY2FsZT10LnByb2plY3RTY2FsZS5zbGljZSgpO2Vsc2V7dmFyIHI9K3QucHJvamVjdFNjYWxlO3RoaXMucHJvamVjdFNjYWxlPVtyLHIscl19aWYodGhpcy5wcm9qZWN0SGFzQWxwaGE9ITEsInByb2plY3RPcGFjaXR5ImluIHQpe2lmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0T3BhY2l0eSkpdGhpcy5wcm9qZWN0T3BhY2l0eT10LnByb2plY3RPcGFjaXR5LnNsaWNlKCk7ZWxzZXtyPSt0LnByb2plY3RPcGFjaXR5O3RoaXMucHJvamVjdE9wYWNpdHk9W3IscixyXX1mb3IodmFyIG49MDtuPDM7KytuKXRoaXMucHJvamVjdE9wYWNpdHlbbl09bSh0aGlzLnByb2plY3RPcGFjaXR5W25dKSx0aGlzLnByb2plY3RPcGFjaXR5W25dPDEmJih0aGlzLnByb2plY3RIYXNBbHBoYT0hMCl9dGhpcy5oYXNBbHBoYT0hMSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PW0odC5vcGFjaXR5KSx0aGlzLm9wYWNpdHk8MSYmKHRoaXMuaGFzQWxwaGE9ITApKSx0aGlzLmRpcnR5PSEwO3ZhciBpLGEscz10LnBvc2l0aW9uLGw9dC5mb250fHwibm9ybWFsIixjPXQuYWxpZ25tZW50fHxbMCwwXTtpZigyPT09Yy5sZW5ndGgpaT1jWzBdLGE9Y1sxXTtlbHNle2k9W10sYT1bXTtmb3Iobj0wO248Yy5sZW5ndGg7KytuKWlbbl09Y1tuXVswXSxhW25dPWNbbl1bMV19dmFyIHU9WzEvMCwxLzAsMS8wXSxmPVstMS8wLC0xLzAsLTEvMF0saD10LmdseXBoLHA9dC5jb2xvcixkPXQuc2l6ZSxnPXQuYW5nbGUsdj10LmxpbmVDb2xvcix5PS0xLHg9MCxiPTAsXz0wO2lmKHMubGVuZ3RoKXtfPXMubGVuZ3RoO3Q6Zm9yKG49MDtuPF87KytuKXtmb3IodmFyIHc9c1tuXSxUPTA7VDwzOysrVClpZihpc05hTih3W1RdKXx8IWlzRmluaXRlKHdbVF0pKWNvbnRpbnVlIHQ7dmFyIGs9KE49SShoLG4sbCx0aGlzLnBpeGVsUmF0aW8pKS5tZXNoLEE9Ti5saW5lcyxNPU4uYm91bmRzO3grPTMqay5jZWxscy5sZW5ndGgsYis9MipBLmVkZ2VzLmxlbmd0aH19dmFyIFM9eCtiLEU9by5tYWxsb2NGbG9hdCgzKlMpLEw9by5tYWxsb2NGbG9hdCg0KlMpLEM9by5tYWxsb2NGbG9hdCgyKlMpLFA9by5tYWxsb2NVaW50MzIoUyk7aWYoUz4wKXt2YXIgTz0wLHo9eCxEPVswLDAsMCwxXSxSPVswLDAsMCwxXSxGPUFycmF5LmlzQXJyYXkocCkmJkFycmF5LmlzQXJyYXkocFswXSksQj1BcnJheS5pc0FycmF5KHYpJiZBcnJheS5pc0FycmF5KHZbMF0pO3Q6Zm9yKG49MDtuPF87KytuKXt5Kz0xO2Zvcih3PXNbbl0sVD0wO1Q8MzsrK1Qpe2lmKGlzTmFOKHdbVF0pfHwhaXNGaW5pdGUod1tUXSkpY29udGludWUgdDtmW1RdPU1hdGgubWF4KGZbVF0sd1tUXSksdVtUXT1NYXRoLm1pbih1W1RdLHdbVF0pfWs9KE49SShoLG4sbCx0aGlzLnBpeGVsUmF0aW8pKS5tZXNoLEE9Ti5saW5lcyxNPU4uYm91bmRzO3ZhciBOLGo9Ti52aXNpYmxlO2lmKGopaWYoQXJyYXkuaXNBcnJheShwKSl7aWYoMz09PShVPUY/bjxwLmxlbmd0aD9wW25dOlswLDAsMCwwXTpwKS5sZW5ndGgpe2ZvcihUPTA7VDwzOysrVClEW1RdPVVbVF07RFszXT0xfWVsc2UgaWYoND09PVUubGVuZ3RoKXtmb3IoVD0wO1Q8NDsrK1QpRFtUXT1VW1RdOyF0aGlzLmhhc0FscGhhJiZVWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKX19ZWxzZSBEWzBdPURbMV09RFsyXT0wLERbM109MTtlbHNlIEQ9WzEsMSwxLDBdO2lmKGopaWYoQXJyYXkuaXNBcnJheSh2KSl7dmFyIFU7aWYoMz09PShVPUI/bjx2Lmxlbmd0aD92W25dOlswLDAsMCwwXTp2KS5sZW5ndGgpe2ZvcihUPTA7VDwzOysrVClSW1RdPVVbVF07UltUXT0xfWVsc2UgaWYoND09PVUubGVuZ3RoKXtmb3IoVD0wO1Q8NDsrK1QpUltUXT1VW1RdOyF0aGlzLmhhc0FscGhhJiZVWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKX19ZWxzZSBSWzBdPVJbMV09UlsyXT0wLFJbM109MTtlbHNlIFI9WzEsMSwxLDBdO3ZhciBWPS41O2o/QXJyYXkuaXNBcnJheShkKT9WPW48ZC5sZW5ndGg/K2Rbbl06MTI6ZD9WPStkOnRoaXMudXNlT3J0aG8mJihWPTEyKTpWPTA7dmFyIEg9MDtBcnJheS5pc0FycmF5KGcpP0g9bjxnLmxlbmd0aD8rZ1tuXTowOmcmJihIPStnKTt2YXIgcT1NYXRoLmNvcyhIKSxHPU1hdGguc2luKEgpO2Zvcih3PXNbbl0sVD0wO1Q8MzsrK1QpZltUXT1NYXRoLm1heChmW1RdLHdbVF0pLHVbVF09TWF0aC5taW4odVtUXSx3W1RdKTt2YXIgWT1pLFc9YTtZPTA7QXJyYXkuaXNBcnJheShpKT9ZPW48aS5sZW5ndGg/aVtuXTowOmkmJihZPWkpO1c9MDtBcnJheS5pc0FycmF5KGEpP1c9bjxhLmxlbmd0aD9hW25dOjA6YSYmKFc9YSk7dmFyIFg9W1kqPVk+MD8xLU1bMF1bMF06WTwwPzErTVsxXVswXToxLFcqPVc+MD8xLU1bMF1bMV06VzwwPzErTVsxXVsxXToxXSxaPWsuY2VsbHN8fFtdLEo9ay5wb3NpdGlvbnN8fFtdO2ZvcihUPTA7VDxaLmxlbmd0aDsrK1QpZm9yKHZhciBLPVpbVF0sUT0wO1E8MzsrK1Epe2Zvcih2YXIgJD0wOyQ8MzsrKyQpRVszKk8rJF09d1skXTtmb3IoJD0wOyQ8NDsrKyQpTFs0Kk8rJF09RFskXTtQW09dPXk7dmFyIHR0PUpbS1tRXV07Q1syKk9dPVYqKHEqdHRbMF0tRyp0dFsxXStYWzBdKSxDWzIqTysxXT1WKihHKnR0WzBdK3EqdHRbMV0rWFsxXSksTys9MX1mb3IoWj1BLmVkZ2VzLEo9QS5wb3NpdGlvbnMsVD0wO1Q8Wi5sZW5ndGg7KytUKWZvcihLPVpbVF0sUT0wO1E8MjsrK1Epe2ZvcigkPTA7JDwzOysrJClFWzMqeiskXT13WyRdO2ZvcigkPTA7JDw0OysrJClMWzQqeiskXT1SWyRdO1Bbel09eTt0dD1KW0tbUV1dO0NbMip6XT1WKihxKnR0WzBdLUcqdHRbMV0rWFswXSksQ1syKnorMV09ViooRyp0dFswXStxKnR0WzFdK1hbMV0pLHorPTF9fX10aGlzLmJvdW5kcz1bdSxmXSx0aGlzLnBvaW50cz1zLHRoaXMucG9pbnRDb3VudD1zLmxlbmd0aCx0aGlzLnZlcnRleENvdW50PXgsdGhpcy5saW5lVmVydGV4Q291bnQ9Yix0aGlzLnBvaW50QnVmZmVyLnVwZGF0ZShFKSx0aGlzLmNvbG9yQnVmZmVyLnVwZGF0ZShMKSx0aGlzLmdseXBoQnVmZmVyLnVwZGF0ZShDKSx0aGlzLmlkQnVmZmVyLnVwZGF0ZShQKSxvLmZyZWUoRSksby5mcmVlKEwpLG8uZnJlZShDKSxvLmZyZWUoUCl9LHYuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLm9ydGhvU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tQZXJzcGVjdGl2ZVNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrT3J0aG9TaGFkZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLnBvaW50QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmNvbG9yQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmdseXBoQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmlkQnVmZmVyLmRpc3Bvc2UoKX19LHsiLi9saWIvZ2V0LXNpbXBsZS1zdHJpbmciOjMxNiwiLi9saWIvZ2x5cGhzIjozMTcsIi4vbGliL3NoYWRlcnMiOjMxOCwiZ2wtYnVmZmVyIjoyNTcsImdsLW1hdDQvbXVsdGlwbHkiOjI4OSwiZ2wtdmFvIjozNDMsImlzLXN0cmluZy1ibGFuayI6NDM4LCJ0eXBlZGFycmF5LXBvb2wiOjU5MH1dLDMyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5Iik7ci5ib3hWZXJ0ZXg9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgdmVydGV4O1xuXG51bmlmb3JtIHZlYzIgY29ybmVyQSwgY29ybmVyQjtcblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQobWl4KGNvcm5lckEsIGNvcm5lckIsIHZlcnRleCksIDAsIDEpO1xufVxuIl0pLHIuYm94RnJhZ21lbnQ9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufVxuIl0pfSx7Z2xzbGlmeTo0MjR9XSwzMjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbC1idWZmZXIiKSxhPXQoIi4vbGliL3NoYWRlcnMiKTtmdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnBsb3Q9dCx0aGlzLmJveEJ1ZmZlcj1lLHRoaXMuYm94U2hhZGVyPXIsdGhpcy5lbmFibGVkPSEwLHRoaXMuc2VsZWN0Qm94PVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMV0sdGhpcy5pbm5lckZpbGw9ITEsdGhpcy5pbm5lckNvbG9yPVswLDAsMCwuMjVdLHRoaXMub3V0ZXJGaWxsPSEwLHRoaXMub3V0ZXJDb2xvcj1bMCwwLDAsLjVdLHRoaXMuYm9yZGVyV2lkdGg9MTB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbCxzPWkocixbMCwwLDAsMSwxLDAsMSwxXSksbD1uKHIsYS5ib3hWZXJ0ZXgsYS5ib3hGcmFnbWVudCksYz1uZXcgbyh0LHMsbCk7cmV0dXJuIGMudXBkYXRlKGUpLHQuYWRkT3ZlcmxheShjKSxjfTt2YXIgcz1vLnByb3RvdHlwZTtzLmRyYXc9ZnVuY3Rpb24oKXtpZih0aGlzLmVuYWJsZWQpe3ZhciB0PXRoaXMucGxvdCxlPXRoaXMuc2VsZWN0Qm94LHI9dGhpcy5ib3JkZXJXaWR0aCxuPSh0aGlzLmlubmVyRmlsbCx0aGlzLmlubmVyQ29sb3IpLGk9KHRoaXMub3V0ZXJGaWxsLHRoaXMub3V0ZXJDb2xvciksYT10aGlzLmJvcmRlckNvbG9yLG89dC5ib3gscz10LnNjcmVlbkJveCxsPXQuZGF0YUJveCxjPXQudmlld0JveCx1PXQucGl4ZWxSYXRpbyxmPShlWzBdLWxbMF0pKihjWzJdLWNbMF0pLyhsWzJdLWxbMF0pK2NbMF0saD0oZVsxXS1sWzFdKSooY1szXS1jWzFdKS8obFszXS1sWzFdKStjWzFdLHA9KGVbMl0tbFswXSkqKGNbMl0tY1swXSkvKGxbMl0tbFswXSkrY1swXSxkPShlWzNdLWxbMV0pKihjWzNdLWNbMV0pLyhsWzNdLWxbMV0pK2NbMV07aWYoZj1NYXRoLm1heChmLGNbMF0pLGg9TWF0aC5tYXgoaCxjWzFdKSxwPU1hdGgubWluKHAsY1syXSksZD1NYXRoLm1pbihkLGNbM10pLCEocDxmfHxkPGgpKXtvLmJpbmQoKTt2YXIgbT1zWzJdLXNbMF0sZz1zWzNdLXNbMV07aWYodGhpcy5vdXRlckZpbGwmJihvLmRyYXdCb3goMCwwLG0saCxpKSxvLmRyYXdCb3goMCxoLGYsZCxpKSxvLmRyYXdCb3goMCxkLG0sZyxpKSxvLmRyYXdCb3gocCxoLG0sZCxpKSksdGhpcy5pbm5lckZpbGwmJm8uZHJhd0JveChmLGgscCxkLG4pLHI+MCl7dmFyIHY9cip1O28uZHJhd0JveChmLXYsaC12LHArdixoK3YsYSksby5kcmF3Qm94KGYtdixkLXYscCt2LGQrdixhKSxvLmRyYXdCb3goZi12LGgtdixmK3YsZCt2LGEpLG8uZHJhd0JveChwLXYsaC12LHArdixkK3YsYSl9fX19LHMudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e30sdGhpcy5pbm5lckZpbGw9ISF0LmlubmVyRmlsbCx0aGlzLm91dGVyRmlsbD0hIXQub3V0ZXJGaWxsLHRoaXMuaW5uZXJDb2xvcj0odC5pbm5lckNvbG9yfHxbMCwwLDAsLjVdKS5zbGljZSgpLHRoaXMub3V0ZXJDb2xvcj0odC5vdXRlckNvbG9yfHxbMCwwLDAsLjVdKS5zbGljZSgpLHRoaXMuYm9yZGVyQ29sb3I9KHQuYm9yZGVyQ29sb3J8fFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmJvcmRlcldpZHRoPXQuYm9yZGVyV2lkdGh8fDAsdGhpcy5zZWxlY3RCb3g9KHQuc2VsZWN0Qm94fHx0aGlzLnNlbGVjdEJveCkuc2xpY2UoKX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5ib3hCdWZmZXIuZGlzcG9zZSgpLHRoaXMuYm94U2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT3ZlcmxheSh0aGlzKX19LHsiLi9saWIvc2hhZGVycyI6MzIwLCJnbC1idWZmZXIiOjI1NywiZ2wtc2hhZGVyIjozMjN9XSwzMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxhPWVbMV0sbz1uKHQscixhLHt9KSxzPWkubWFsbG9jVWludDgociphKjQpO3JldHVybiBuZXcgbCh0LG8scyl9O3ZhciBuPXQoImdsLWZibyIpLGk9dCgidHlwZWRhcnJheS1wb29sIiksYT10KCJuZGFycmF5Iiksbz10KCJiaXQtdHdpZGRsZSIpLm5leHRQb3cyO2Z1bmN0aW9uIHModCxlLHIsbixpKXt0aGlzLmNvb3JkPVt0LGVdLHRoaXMuaWQ9cix0aGlzLnZhbHVlPW4sdGhpcy5kaXN0YW5jZT1pfWZ1bmN0aW9uIGwodCxlLHIpe3RoaXMuZ2w9dCx0aGlzLmZibz1lLHRoaXMuYnVmZmVyPXIsdGhpcy5fcmVhZFRpbWVvdXQ9bnVsbDt2YXIgbj10aGlzO3RoaXMuX3JlYWRDYWxsYmFjaz1mdW5jdGlvbigpe24uZ2wmJihlLmJpbmQoKSx0LnJlYWRQaXhlbHMoMCwwLGUuc2hhcGVbMF0sZS5zaGFwZVsxXSx0LlJHQkEsdC5VTlNJR05FRF9CWVRFLG4uYnVmZmVyKSxuLl9yZWFkVGltZW91dD1udWxsKX19dmFyIGM9bC5wcm90b3R5cGU7T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsInNoYXBlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2w/dGhpcy5mYm8uc2hhcGUuc2xpY2UoKTpbMCwwXX0sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuZ2wpe3RoaXMuZmJvLnNoYXBlPXQ7dmFyIGU9dGhpcy5mYm8uc2hhcGVbMF0scj10aGlzLmZiby5zaGFwZVsxXTtpZihyKmUqND50aGlzLmJ1ZmZlci5sZW5ndGgpe2kuZnJlZSh0aGlzLmJ1ZmZlcik7Zm9yKHZhciBuPXRoaXMuYnVmZmVyPWkubWFsbG9jVWludDgobyhyKmUqNCkpLGE9MDthPHIqZSo0OysrYSluW2FdPTI1NX1yZXR1cm4gdH19fSksYy5iZWdpbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2w7dGhpcy5zaGFwZTt0JiYodGhpcy5mYm8uYmluZCgpLHQuY2xlYXJDb2xvcigxLDEsMSwxKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVHx0LkRFUFRIX0JVRkZFUl9CSVQpKX0sYy5lbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3QmJih0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHRoaXMuX3JlYWRUaW1lb3V0fHxjbGVhclRpbWVvdXQodGhpcy5fcmVhZFRpbWVvdXQpLHRoaXMuX3JlYWRUaW1lb3V0PXNldFRpbWVvdXQodGhpcy5fcmVhZENhbGxiYWNrLDEpKX0sYy5xdWVyeT1mdW5jdGlvbih0LGUscil7aWYoIXRoaXMuZ2wpcmV0dXJuIG51bGw7dmFyIG49dGhpcy5mYm8uc2hhcGUuc2xpY2UoKTt0fD0wLGV8PTAsIm51bWJlciIhPXR5cGVvZiByJiYocj0xKTt2YXIgaT0wfE1hdGgubWluKE1hdGgubWF4KHQtciwwKSxuWzBdKSxvPTB8TWF0aC5taW4oTWF0aC5tYXgodCtyLDApLG5bMF0pLGw9MHxNYXRoLm1pbihNYXRoLm1heChlLXIsMCksblsxXSksYz0wfE1hdGgubWluKE1hdGgubWF4KGUrciwwKSxuWzFdKTtpZihvPD1pfHxjPD1sKXJldHVybiBudWxsO3ZhciB1PVtvLWksYy1sXSxmPWEodGhpcy5idWZmZXIsW3VbMF0sdVsxXSw0XSxbNCw0Km5bMF0sMV0sNCooaStuWzBdKmwpKSxoPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MWU4LGk9LTEsYT0tMSxvPXQuc2hhcGVbMF0scz10LnNoYXBlWzFdLGw9MDtsPG87bCsrKWZvcih2YXIgYz0wO2M8cztjKyspe3ZhciB1PXQuZ2V0KGwsYywwKSxmPXQuZ2V0KGwsYywxKSxoPXQuZ2V0KGwsYywyKSxwPXQuZ2V0KGwsYywzKTtpZih1PDI1NXx8ZjwyNTV8fGg8MjU1fHxwPDI1NSl7dmFyIGQ9ZS1sLG09ci1jLGc9ZCpkK20qbTtnPG4mJihuPWcsaT1sLGE9Yyl9fXJldHVybltpLGEsbl19KGYuaGkodVswXSx1WzFdLDEpLHIscikscD1oWzBdLGQ9aFsxXTtyZXR1cm4gcDwwfHxNYXRoLnBvdyh0aGlzLnJhZGl1cywyKTxoWzJdP251bGw6bmV3IHMocCtpfDAsZCtsfDAsZi5nZXQocCxkLDApLFtmLmdldChwLGQsMSksZi5nZXQocCxkLDIpLGYuZ2V0KHAsZCwzKV0sTWF0aC5zcXJ0KGhbMl0pKX0sYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nbCYmKHRoaXMuZmJvLmRpc3Bvc2UoKSxpLmZyZWUodGhpcy5idWZmZXIpLHRoaXMuZ2w9bnVsbCx0aGlzLl9yZWFkVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3JlYWRUaW1lb3V0KSl9fSx7ImJpdC10d2lkZGxlIjoxMDEsImdsLWZibyI6MjY1LG5kYXJyYXk6NDYyLCJ0eXBlZGFycmF5LXBvb2wiOjU5MH1dLDMyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9jcmVhdGUtdW5pZm9ybXMiKSxpPXQoIi4vbGliL2NyZWF0ZS1hdHRyaWJ1dGVzIiksYT10KCIuL2xpYi9yZWZsZWN0Iiksbz10KCIuL2xpYi9zaGFkZXItY2FjaGUiKSxzPXQoIi4vbGliL3J1bnRpbWUtcmVmbGVjdCIpLGw9dCgiLi9saWIvR0xFcnJvciIpO2Z1bmN0aW9uIGModCl7dGhpcy5nbD10LHRoaXMuZ2wubGFzdEF0dHJpYkNvdW50PTAsdGhpcy5fdnJlZj10aGlzLl9mcmVmPXRoaXMuX3JlbGluaz10aGlzLnZlcnRTaGFkZXI9dGhpcy5mcmFnU2hhZGVyPXRoaXMucHJvZ3JhbT10aGlzLmF0dHJpYnV0ZXM9dGhpcy51bmlmb3Jtcz10aGlzLnR5cGVzPW51bGx9dmFyIHU9Yy5wcm90b3R5cGU7ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0Lm5hbWU8ZS5uYW1lPy0xOjF9dS5iaW5kPWZ1bmN0aW9uKCl7dmFyIHQ7dGhpcy5wcm9ncmFtfHx0aGlzLl9yZWxpbmsoKTt2YXIgZT10aGlzLmdsLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLHRoaXMuZ2wuQUNUSVZFX0FUVFJJQlVURVMpLHI9dGhpcy5nbC5sYXN0QXR0cmliQ291bnQ7aWYoZT5yKWZvcih0PXI7dDxlO3QrKyl0aGlzLmdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHQpO2Vsc2UgaWYocj5lKWZvcih0PWU7dDxyO3QrKyl0aGlzLmdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh0KTt0aGlzLmdsLmxhc3RBdHRyaWJDb3VudD1lLHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5nbC5sYXN0QXR0cmliQ291bnQsZT0wO2U8dDtlKyspdGhpcy5nbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSk7dGhpcy5nbC5sYXN0QXR0cmliQ291bnQ9MCx0aGlzLl9mcmVmJiZ0aGlzLl9mcmVmLmRpc3Bvc2UoKSx0aGlzLl92cmVmJiZ0aGlzLl92cmVmLmRpc3Bvc2UoKSx0aGlzLmF0dHJpYnV0ZXM9dGhpcy50eXBlcz10aGlzLnZlcnRTaGFkZXI9dGhpcy5mcmFnU2hhZGVyPXRoaXMucHJvZ3JhbT10aGlzLl9yZWxpbms9dGhpcy5fZnJlZj10aGlzLl92cmVmPW51bGx9LHUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyLGMpe2lmKCFlfHwxPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIHU9dDt0PXUudmVydGV4LGU9dS5mcmFnbWVudCxyPXUudW5pZm9ybXMsYz11LmF0dHJpYnV0ZXN9dmFyIGg9dGhpcyxwPWguZ2wsZD1oLl92cmVmO2guX3ZyZWY9by5zaGFkZXIocCxwLlZFUlRFWF9TSEFERVIsdCksZCYmZC5kaXNwb3NlKCksaC52ZXJ0U2hhZGVyPWguX3ZyZWYuc2hhZGVyO3ZhciBtPXRoaXMuX2ZyZWY7aWYoaC5fZnJlZj1vLnNoYWRlcihwLHAuRlJBR01FTlRfU0hBREVSLGUpLG0mJm0uZGlzcG9zZSgpLGguZnJhZ1NoYWRlcj1oLl9mcmVmLnNoYWRlciwhcnx8IWMpe3ZhciBnPXAuY3JlYXRlUHJvZ3JhbSgpO2lmKHAuYXR0YWNoU2hhZGVyKGcsaC5mcmFnU2hhZGVyKSxwLmF0dGFjaFNoYWRlcihnLGgudmVydFNoYWRlcikscC5saW5rUHJvZ3JhbShnKSwhcC5nZXRQcm9ncmFtUGFyYW1ldGVyKGcscC5MSU5LX1NUQVRVUykpe3ZhciB2PXAuZ2V0UHJvZ3JhbUluZm9Mb2coZyk7dGhyb3cgbmV3IGwodiwiRXJyb3IgbGlua2luZyBwcm9ncmFtOiIrdil9cj1yfHxzLnVuaWZvcm1zKHAsZyksYz1jfHxzLmF0dHJpYnV0ZXMocCxnKSxwLmRlbGV0ZVByb2dyYW0oZyl9KGM9Yy5zbGljZSgpKS5zb3J0KGYpO3ZhciB5LHg9W10sYj1bXSxfPVtdO2Zvcih5PTA7eTxjLmxlbmd0aDsrK3kpe3ZhciB3PWNbeV07aWYody50eXBlLmluZGV4T2YoIm1hdCIpPj0wKXtmb3IodmFyIFQ9MHx3LnR5cGUuY2hhckF0KHcudHlwZS5sZW5ndGgtMSksaz1uZXcgQXJyYXkoVCksQT0wO0E8VDsrK0Epa1tBXT1fLmxlbmd0aCxiLnB1c2gody5uYW1lKyJbIitBKyJdIiksIm51bWJlciI9PXR5cGVvZiB3LmxvY2F0aW9uP18ucHVzaCh3LmxvY2F0aW9uK0EpOkFycmF5LmlzQXJyYXkody5sb2NhdGlvbikmJncubG9jYXRpb24ubGVuZ3RoPT09VCYmIm51bWJlciI9PXR5cGVvZiB3LmxvY2F0aW9uW0FdP18ucHVzaCgwfHcubG9jYXRpb25bQV0pOl8ucHVzaCgtMSk7eC5wdXNoKHtuYW1lOncubmFtZSx0eXBlOncudHlwZSxsb2NhdGlvbnM6a30pfWVsc2UgeC5wdXNoKHtuYW1lOncubmFtZSx0eXBlOncudHlwZSxsb2NhdGlvbnM6W18ubGVuZ3RoXX0pLGIucHVzaCh3Lm5hbWUpLCJudW1iZXIiPT10eXBlb2Ygdy5sb2NhdGlvbj9fLnB1c2goMHx3LmxvY2F0aW9uKTpfLnB1c2goLTEpfXZhciBNPTA7Zm9yKHk9MDt5PF8ubGVuZ3RoOysreSlpZihfW3ldPDApe2Zvcig7Xy5pbmRleE9mKE0pPj0wOylNKz0xO19beV09TX12YXIgUz1uZXcgQXJyYXkoci5sZW5ndGgpO2Z1bmN0aW9uIEUoKXtoLnByb2dyYW09by5wcm9ncmFtKHAsaC5fdnJlZixoLl9mcmVmLGIsXyk7Zm9yKHZhciB0PTA7dDxyLmxlbmd0aDsrK3QpU1t0XT1wLmdldFVuaWZvcm1Mb2NhdGlvbihoLnByb2dyYW0sclt0XS5uYW1lKX1FKCksaC5fcmVsaW5rPUUsaC50eXBlcz17dW5pZm9ybXM6YShyKSxhdHRyaWJ1dGVzOmEoYyl9LGguYXR0cmlidXRlcz1pKHAsaCx4LF8pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJ1bmlmb3JtcyIsbihwLGgscixTKSl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPW5ldyBjKHQpO3JldHVybiBhLnVwZGF0ZShlLHIsbixpKSxhfX0seyIuL2xpYi9HTEVycm9yIjozMjQsIi4vbGliL2NyZWF0ZS1hdHRyaWJ1dGVzIjozMjUsIi4vbGliL2NyZWF0ZS11bmlmb3JtcyI6MzI2LCIuL2xpYi9yZWZsZWN0IjozMjcsIi4vbGliL3J1bnRpbWUtcmVmbGVjdCI6MzI4LCIuL2xpYi9zaGFkZXItY2FjaGUiOjMyOX1dLDMyNDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMuc2hvcnRNZXNzYWdlPWV8fCIiLHRoaXMubG9uZ01lc3NhZ2U9cnx8IiIsdGhpcy5yYXdFcnJvcj10fHwiIix0aGlzLm1lc3NhZ2U9ImdsLXNoYWRlcjogIisoZXx8dHx8IiIpKyhyPyJcbiIrcjoiIiksdGhpcy5zdGFjaz0obmV3IEVycm9yKS5zdGFja31uLnByb3RvdHlwZT1uZXcgRXJyb3Isbi5wcm90b3R5cGUubmFtZT0iR0xFcnJvciIsbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixlLmV4cG9ydHM9bn0se31dLDMyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKHZhciBhPXt9LG89MCxjPXIubGVuZ3RoO288YzsrK28pe3ZhciB1PXJbb10sZj11Lm5hbWUsaD11LnR5cGUscD11LmxvY2F0aW9ucztzd2l0Y2goaCl7Y2FzZSJib29sIjpjYXNlImludCI6Y2FzZSJmbG9hdCI6cyh0LGUscFswXSxpLDEsYSxmKTticmVhaztkZWZhdWx0OmlmKGguaW5kZXhPZigidmVjIik+PTApe2lmKChkPWguY2hhckNvZGVBdChoLmxlbmd0aC0xKS00OCk8Mnx8ZD40KXRocm93IG5ldyBuKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIrZisiOiAiK2gpO3ModCxlLHBbMF0saSxkLGEsZil9ZWxzZXtpZighKGguaW5kZXhPZigibWF0Iik+PTApKXRocm93IG5ldyBuKCIiLCJVbmtub3duIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIrZisiOiAiK2gpO3ZhciBkO2lmKChkPWguY2hhckNvZGVBdChoLmxlbmd0aC0xKS00OCk8Mnx8ZD40KXRocm93IG5ldyBuKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIrZisiOiAiK2gpO2wodCxlLHAsaSxkLGEsZil9fX1yZXR1cm4gYX07dmFyIG49dCgiLi9HTEVycm9yIik7ZnVuY3Rpb24gaSh0LGUscixuLGksYSl7dGhpcy5fZ2w9dCx0aGlzLl93cmFwcGVyPWUsdGhpcy5faW5kZXg9cix0aGlzLl9sb2NhdGlvbnM9bix0aGlzLl9kaW1lbnNpb249aSx0aGlzLl9jb25zdEZ1bmM9YX12YXIgYT1pLnByb3RvdHlwZTthLnBvaW50ZXI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5fZ2wsYT10aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdO2kudmVydGV4QXR0cmliUG9pbnRlcihhLHRoaXMuX2RpbWVuc2lvbix0fHxpLkZMT0FULCEhZSxyfHwwLG58fDApLGkuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYSl9LGEuc2V0PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9jb25zdEZ1bmModGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XSx0LGUscixuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsImxvY2F0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdCE9PXRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF0mJih0aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdPTB8dCx0aGlzLl93cmFwcGVyLnByb2dyYW09bnVsbCksMHx0fX0pO3ZhciBvPVtmdW5jdGlvbih0LGUscil7cmV0dXJuIHZvaWQgMD09PXIubGVuZ3RoP3QudmVydGV4QXR0cmliMWYoZSxyKTp0LnZlcnRleEF0dHJpYjFmdihlLHIpfSxmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdm9pZCAwPT09ci5sZW5ndGg/dC52ZXJ0ZXhBdHRyaWIyZihlLHIsbik6dC52ZXJ0ZXhBdHRyaWIyZnYoZSxyKX0sZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdm9pZCAwPT09ci5sZW5ndGg/dC52ZXJ0ZXhBdHRyaWIzZihlLHIsbixpKTp0LnZlcnRleEF0dHJpYjNmdihlLHIpfSxmdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIHZvaWQgMD09PXIubGVuZ3RoP3QudmVydGV4QXR0cmliNGYoZSxyLG4saSxhKTp0LnZlcnRleEF0dHJpYjRmdihlLHIpfV07ZnVuY3Rpb24gcyh0LGUscixuLGEscyxsKXt2YXIgYz1vW2FdLHU9bmV3IGkodCxlLHIsbixhLGMpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLGwse3NldDpmdW5jdGlvbihlKXtyZXR1cm4gdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobltyXSksYyh0LG5bcl0sZSksZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHV9LGVudW1lcmFibGU6ITB9KX1mdW5jdGlvbiBsKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgbD1uZXcgQXJyYXkoaSksYz1uZXcgQXJyYXkoaSksdT0wO3U8aTsrK3Upcyh0LGUsclt1XSxuLGksbCx1KSxjW3VdPWxbdV07T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImxvY2F0aW9uIix7c2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBlPTA7ZTxpOysrZSljW2VdLmxvY2F0aW9uPXRbZV07ZWxzZSBmb3IoZT0wO2U8aTsrK2UpY1tlXS5sb2NhdGlvbj10K2U7cmV0dXJuIHR9LGdldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgQXJyYXkoaSksZT0wO2U8aTsrK2UpdFtlXT1uW3JbZV1dO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwfSksbC5wb2ludGVyPWZ1bmN0aW9uKGUsYSxvLHMpe2U9ZXx8dC5GTE9BVCxhPSEhYSxvPW98fGkqaSxzPXN8fDA7Zm9yKHZhciBsPTA7bDxpOysrbCl7dmFyIGM9bltyW2xdXTt0LnZlcnRleEF0dHJpYlBvaW50ZXIoYyxpLGUsYSxvLHMrbCppKSx0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGMpfX07dmFyIGY9bmV3IEFycmF5KGkpLGg9dFsidmVydGV4QXR0cmliIitpKyJmdiJdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLG8se3NldDpmdW5jdGlvbihlKXtmb3IodmFyIGE9MDthPGk7KythKXt2YXIgbz1uW3JbYV1dO2lmKHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG8pLEFycmF5LmlzQXJyYXkoZVswXSkpaC5jYWxsKHQsbyxlW2FdKTtlbHNle2Zvcih2YXIgcz0wO3M8aTsrK3MpZltzXT1lW2kqYStzXTtoLmNhbGwodCxvLGYpfX1yZXR1cm4gZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGVudW1lcmFibGU6ITB9KX19LHsiLi9HTEVycm9yIjozMjR9XSwzMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9yZWZsZWN0IiksaT10KCIuL0dMRXJyb3IiKTtmdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWU7cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2Zvcih2YXIgYT1mdW5jdGlvbiB0KGUscil7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybltbZSxyXV07dmFyIG49W107Zm9yKHZhciBpIGluIHIpe3ZhciBhPXJbaV0sbz1lO3BhcnNlSW50KGkpKyIiPT09aT9vKz0iWyIraSsiXSI6bys9Ii4iK2ksIm9iamVjdCI9PXR5cGVvZiBhP24ucHVzaC5hcHBseShuLHQobyxhKSk6bi5wdXNoKFtvLGFdKX1yZXR1cm4gbn0oIiIsZSksbz0wO288YS5sZW5ndGg7KytvKXt2YXIgbD1hW29dLGM9bFswXSx1PWxbMV07aWYoc1t1XSl7dmFyIGY9bjtpZigic3RyaW5nIj09dHlwZW9mIGMmJigwPT09Yy5pbmRleE9mKCIuIil8fDA9PT1jLmluZGV4T2YoIlsiKSkpe3ZhciBoPWM7aWYoMD09PWMuaW5kZXhPZigiLiIpJiYoaD1jLnNsaWNlKDEpKSxoLmluZGV4T2YoIl0iKT09PWgubGVuZ3RoLTEpe3ZhciBwPWguaW5kZXhPZigiWyIpLGQ9aC5zbGljZSgwLHApLG09aC5zbGljZShwKzEsaC5sZW5ndGgtMSk7Zj1kP25bZF1bbV06blttXX1lbHNlIGY9bltoXX12YXIgZyx2PXJbdV0udHlwZTtzd2l0Y2godil7Y2FzZSJib29sIjpjYXNlImludCI6Y2FzZSJzYW1wbGVyMkQiOmNhc2Uic2FtcGxlckN1YmUiOnQudW5pZm9ybTFpKHNbdV0sZik7YnJlYWs7Y2FzZSJmbG9hdCI6dC51bmlmb3JtMWYoc1t1XSxmKTticmVhaztkZWZhdWx0OnZhciB5PXYuaW5kZXhPZigidmVjIik7aWYoISgwPD15JiZ5PD0xJiZ2Lmxlbmd0aD09PTQreSkpe2lmKDA9PT12LmluZGV4T2YoIm1hdCIpJiY0PT09di5sZW5ndGgpe2lmKChnPXYuY2hhckNvZGVBdCh2Lmxlbmd0aC0xKS00OCk8Mnx8Zz40KXRocm93IG5ldyBpKCIiLCJJbnZhbGlkIHVuaWZvcm0gZGltZW5zaW9uIHR5cGUgZm9yIG1hdHJpeCAiK25hbWUrIjogIit2KTt0WyJ1bmlmb3JtTWF0cml4IitnKyJmdiJdKHNbdV0sITEsZik7YnJlYWt9dGhyb3cgbmV3IGkoIiIsIlVua25vd24gdW5pZm9ybSBkYXRhIHR5cGUgZm9yICIrbmFtZSsiOiAiK3YpfWlmKChnPXYuY2hhckNvZGVBdCh2Lmxlbmd0aC0xKS00OCk8Mnx8Zz40KXRocm93IG5ldyBpKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSIpO3N3aXRjaCh2LmNoYXJBdCgwKSl7Y2FzZSJiIjpjYXNlImkiOnRbInVuaWZvcm0iK2crIml2Il0oc1t1XSxmKTticmVhaztjYXNlInYiOnRbInVuaWZvcm0iK2crImZ2Il0oc1t1XSxmKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBpKCIiLCJVbnJlY29nbml6ZWQgZGF0YSB0eXBlIGZvciB2ZWN0b3IgIituYW1lKyI6ICIrdil9fX19fX1mdW5jdGlvbiBjKHQsZSxuKXtpZigib2JqZWN0Ij09dHlwZW9mIG4pe3ZhciBjPXUobik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7Z2V0OmEoYyksc2V0OmwobiksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KX1lbHNlIHNbbl0/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7Z2V0OihmPW4sZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LmdldFVuaWZvcm0oZS5wcm9ncmFtLHJbZl0pfSksc2V0OmwobiksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KTp0W2VdPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlImJvb2wiOnJldHVybiExO2Nhc2UiaW50IjpjYXNlInNhbXBsZXIyRCI6Y2FzZSJzYW1wbGVyQ3ViZSI6Y2FzZSJmbG9hdCI6cmV0dXJuIDA7ZGVmYXVsdDp2YXIgZT10LmluZGV4T2YoInZlYyIpO2lmKDA8PWUmJmU8PTEmJnQubGVuZ3RoPT09NCtlKXtpZigocj10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSktNDgpPDJ8fHI+NCl0aHJvdyBuZXcgaSgiIiwiSW52YWxpZCBkYXRhIHR5cGUiKTtyZXR1cm4iYiI9PT10LmNoYXJBdCgwKT9vKHIsITEpOm8ociwwKX1pZigwPT09dC5pbmRleE9mKCJtYXQiKSYmND09PXQubGVuZ3RoKXt2YXIgcjtpZigocj10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSktNDgpPDJ8fHI+NCl0aHJvdyBuZXcgaSgiIiwiSW52YWxpZCB1bmlmb3JtIGRpbWVuc2lvbiB0eXBlIGZvciBtYXRyaXggIituYW1lKyI6ICIrdCk7cmV0dXJuIG8ocipyLDApfXRocm93IG5ldyBpKCIiLCJVbmtub3duIHVuaWZvcm0gZGF0YSB0eXBlIGZvciAiK25hbWUrIjogIit0KX19KHJbbl0udHlwZSk7dmFyIGZ9ZnVuY3Rpb24gdSh0KXt2YXIgZTtpZihBcnJheS5pc0FycmF5KHQpKXtlPW5ldyBBcnJheSh0Lmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpYyhlLHIsdFtyXSl9ZWxzZSBmb3IodmFyIG4gaW4gZT17fSx0KWMoZSxuLHRbbl0pO3JldHVybiBlfXZhciBmPW4ociwhMCk7cmV0dXJue2dldDphKHUoZikpLHNldDpsKGYpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfX19LHsiLi9HTEVycm9yIjozMjQsIi4vcmVmbGVjdCI6MzI3fV0sMzI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXRbbl0ubmFtZS5zcGxpdCgiLiIpLGE9cixvPTA7bzxpLmxlbmd0aDsrK28pe3ZhciBzPWlbb10uc3BsaXQoIlsiKTtpZihzLmxlbmd0aD4xKXtzWzBdaW4gYXx8KGFbc1swXV09W10pLGE9YVtzWzBdXTtmb3IodmFyIGw9MTtsPHMubGVuZ3RoOysrbCl7dmFyIGM9cGFyc2VJbnQoc1tsXSk7bDxzLmxlbmd0aC0xfHxvPGkubGVuZ3RoLTE/KGMgaW4gYXx8KGw8cy5sZW5ndGgtMT9hW2NdPVtdOmFbY109e30pLGE9YVtjXSk6YVtjXT1lP246dFtuXS50eXBlfX1lbHNlIG88aS5sZW5ndGgtMT8oc1swXWluIGF8fChhW3NbMF1dPXt9KSxhPWFbc1swXV0pOmFbc1swXV09ZT9uOnRbbl0udHlwZX1yZXR1cm4gcn19LHt9XSwzMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci51bmlmb3Jtcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx0LkFDVElWRV9VTklGT1JNUyksbj1bXSxpPTA7aTxyOysraSl7dmFyIG89dC5nZXRBY3RpdmVVbmlmb3JtKGUsaSk7aWYobyl7dmFyIHM9YSh0LG8udHlwZSk7aWYoby5zaXplPjEpZm9yKHZhciBsPTA7bDxvLnNpemU7KytsKW4ucHVzaCh7bmFtZTpvLm5hbWUucmVwbGFjZSgiWzBdIiwiWyIrbCsiXSIpLHR5cGU6c30pO2Vsc2Ugbi5wdXNoKHtuYW1lOm8ubmFtZSx0eXBlOnN9KX19cmV0dXJuIG59LHIuYXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx0LkFDVElWRV9BVFRSSUJVVEVTKSxuPVtdLGk9MDtpPHI7KytpKXt2YXIgbz10LmdldEFjdGl2ZUF0dHJpYihlLGkpO28mJm4ucHVzaCh7bmFtZTpvLm5hbWUsdHlwZTphKHQsby50eXBlKX0pfXJldHVybiBufTt2YXIgbj17RkxPQVQ6ImZsb2F0IixGTE9BVF9WRUMyOiJ2ZWMyIixGTE9BVF9WRUMzOiJ2ZWMzIixGTE9BVF9WRUM0OiJ2ZWM0IixJTlQ6ImludCIsSU5UX1ZFQzI6Iml2ZWMyIixJTlRfVkVDMzoiaXZlYzMiLElOVF9WRUM0OiJpdmVjNCIsQk9PTDoiYm9vbCIsQk9PTF9WRUMyOiJidmVjMiIsQk9PTF9WRUMzOiJidmVjMyIsQk9PTF9WRUM0OiJidmVjNCIsRkxPQVRfTUFUMjoibWF0MiIsRkxPQVRfTUFUMzoibWF0MyIsRkxPQVRfTUFUNDoibWF0NCIsU0FNUExFUl8yRDoic2FtcGxlcjJEIixTQU1QTEVSX0NVQkU6InNhbXBsZXJDdWJlIn0saT1udWxsO2Z1bmN0aW9uIGEodCxlKXtpZighaSl7dmFyIHI9T2JqZWN0LmtleXMobik7aT17fTtmb3IodmFyIGE9MDthPHIubGVuZ3RoOysrYSl7dmFyIG89clthXTtpW3Rbb11dPW5bb119fXJldHVybiBpW2VdfX0se31dLDMyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnNoYWRlcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHUodCkuZ2V0U2hhZGVyUmVmZXJlbmNlKGUscil9LHIucHJvZ3JhbT1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiB1KHQpLmdldFByb2dyYW0oZSxyLG4saSl9O3ZhciBuPXQoIi4vR0xFcnJvciIpLGk9dCgiZ2wtZm9ybWF0LWNvbXBpbGVyLWVycm9yIiksYT1uZXcoInVuZGVmaW5lZCI9PXR5cGVvZiBXZWFrTWFwP3QoIndlYWttYXAtc2hpbSIpOldlYWtNYXApLG89MDtmdW5jdGlvbiBzKHQsZSxyLG4saSxhLG8pe3RoaXMuaWQ9dCx0aGlzLnNyYz1lLHRoaXMudHlwZT1yLHRoaXMuc2hhZGVyPW4sdGhpcy5jb3VudD1hLHRoaXMucHJvZ3JhbXM9W10sdGhpcy5jYWNoZT1vfWZ1bmN0aW9uIGwodCl7dGhpcy5nbD10LHRoaXMuc2hhZGVycz1be30se31dLHRoaXMucHJvZ3JhbXM9e319cy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2lmKDA9PS0tdGhpcy5jb3VudCl7Zm9yKHZhciB0PXRoaXMuY2FjaGUsZT10LmdsLHI9dGhpcy5wcm9ncmFtcyxuPTAsaT1yLmxlbmd0aDtuPGk7KytuKXt2YXIgYT10LnByb2dyYW1zW3Jbbl1dO2EmJihkZWxldGUgdC5wcm9ncmFtc1tuXSxlLmRlbGV0ZVByb2dyYW0oYSkpfWUuZGVsZXRlU2hhZGVyKHRoaXMuc2hhZGVyKSxkZWxldGUgdC5zaGFkZXJzW3RoaXMudHlwZT09PWUuRlJBR01FTlRfU0hBREVSfDBdW3RoaXMuc3JjXX19O3ZhciBjPWwucHJvdG90eXBlO2Z1bmN0aW9uIHUodCl7dmFyIGU9YS5nZXQodCk7cmV0dXJuIGV8fChlPW5ldyBsKHQpLGEuc2V0KHQsZSkpLGV9Yy5nZXRTaGFkZXJSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdsLGE9dGhpcy5zaGFkZXJzW3Q9PT1yLkZSQUdNRU5UX1NIQURFUnwwXSxsPWFbZV07aWYobCYmci5pc1NoYWRlcihsLnNoYWRlcikpbC5jb3VudCs9MTtlbHNle3ZhciBjPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10LmNyZWF0ZVNoYWRlcihlKTtpZih0LnNoYWRlclNvdXJjZShhLHIpLHQuY29tcGlsZVNoYWRlcihhKSwhdC5nZXRTaGFkZXJQYXJhbWV0ZXIoYSx0LkNPTVBJTEVfU1RBVFVTKSl7dmFyIG89dC5nZXRTaGFkZXJJbmZvTG9nKGEpO3RyeXt2YXIgcz1pKG8scixlKX1jYXRjaCh0KXt0aHJvdyBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBmb3JtYXQgY29tcGlsZXIgZXJyb3I6ICIrdCksbmV3IG4obywiRXJyb3IgY29tcGlsaW5nIHNoYWRlcjpcbiIrbyl9dGhyb3cgbmV3IG4obyxzLnNob3J0LHMubG9uZyl9cmV0dXJuIGF9KHIsdCxlKTtsPWFbZV09bmV3IHMobysrLGUsdCxjLFtdLDEsdGhpcyl9cmV0dXJuIGx9LGMuZ2V0UHJvZ3JhbT1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1bdC5pZCxlLmlkLHIuam9pbigiOiIpLGkuam9pbigiOiIpXS5qb2luKCJAIiksbz10aGlzLnByb2dyYW1zW2FdO3JldHVybiBvJiZ0aGlzLmdsLmlzUHJvZ3JhbShvKXx8KHRoaXMucHJvZ3JhbXNbYV09bz1mdW5jdGlvbih0LGUscixpLGEpe3ZhciBvPXQuY3JlYXRlUHJvZ3JhbSgpO3QuYXR0YWNoU2hhZGVyKG8sZSksdC5hdHRhY2hTaGFkZXIobyxyKTtmb3IodmFyIHM9MDtzPGkubGVuZ3RoOysrcyl0LmJpbmRBdHRyaWJMb2NhdGlvbihvLGFbc10saVtzXSk7aWYodC5saW5rUHJvZ3JhbShvKSwhdC5nZXRQcm9ncmFtUGFyYW1ldGVyKG8sdC5MSU5LX1NUQVRVUykpe3ZhciBsPXQuZ2V0UHJvZ3JhbUluZm9Mb2cobyk7dGhyb3cgbmV3IG4obCwiRXJyb3IgbGlua2luZyBwcm9ncmFtOiAiK2wpfXJldHVybiBvfSh0aGlzLmdsLHQuc2hhZGVyLGUuc2hhZGVyLHIsaSksdC5wcm9ncmFtcy5wdXNoKGEpLGUucHJvZ3JhbXMucHVzaChhKSksb319LHsiLi9HTEVycm9yIjozMjQsImdsLWZvcm1hdC1jb21waWxlci1lcnJvciI6MjY2LCJ3ZWFrbWFwLXNoaW0iOjYwMX1dLDMzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMucGxvdD10LHRoaXMuZW5hYmxlPVshMCwhMCwhMSwhMV0sdGhpcy53aWR0aD1bMSwxLDEsMV0sdGhpcy5jb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmNlbnRlcj1bMS8wLDEvMF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IG4odCk7cmV0dXJuIHIudXBkYXRlKGUpLHQuYWRkT3ZlcmxheShyKSxyfTt2YXIgaT1uLnByb3RvdHlwZTtpLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9LHRoaXMuZW5hYmxlPSh0LmVuYWJsZXx8WyEwLCEwLCExLCExXSkuc2xpY2UoKSx0aGlzLndpZHRoPSh0LndpZHRofHxbMSwxLDEsMV0pLnNsaWNlKCksdGhpcy5jb2xvcj0odC5jb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKX0pKSx0aGlzLmNlbnRlcj0odC5jZW50ZXJ8fFsxLzAsMS8wXSkuc2xpY2UoKSx0aGlzLnBsb3Quc2V0T3ZlcmxheURpcnR5KCl9LGkuZHJhdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZW5hYmxlLGU9dGhpcy53aWR0aCxyPXRoaXMuY29sb3Isbj10aGlzLmNlbnRlcixpPXRoaXMucGxvdCxhPWkubGluZSxvPWkuZGF0YUJveCxzPWkudmlld0JveDtpZihhLmJpbmQoKSxvWzBdPD1uWzBdJiZuWzBdPD1vWzJdJiZvWzFdPD1uWzFdJiZuWzFdPD1vWzNdKXt2YXIgbD1zWzBdKyhuWzBdLW9bMF0pLyhvWzJdLW9bMF0pKihzWzJdLXNbMF0pLGM9c1sxXSsoblsxXS1vWzFdKS8ob1szXS1vWzFdKSooc1szXS1zWzFdKTt0WzBdJiZhLmRyYXdMaW5lKGwsYyxzWzBdLGMsZVswXSxyWzBdKSx0WzFdJiZhLmRyYXdMaW5lKGwsYyxsLHNbMV0sZVsxXSxyWzFdKSx0WzJdJiZhLmRyYXdMaW5lKGwsYyxzWzJdLGMsZVsyXSxyWzJdKSx0WzNdJiZhLmRyYXdMaW5lKGwsYyxsLHNbM10sZVszXSxyWzNdKX19LGkuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMucGxvdC5yZW1vdmVPdmVybGF5KHRoaXMpfX0se31dLDMzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5IiksaT10KCJnbC1zaGFkZXIiKSxhPW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBjb2xvcjtcbmF0dHJpYnV0ZSBmbG9hdCB3ZWlnaHQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBjb29yZGluYXRlc1szXTtcbnVuaWZvcm0gdmVjNCBjb2xvcnNbM107XG51bmlmb3JtIHZlYzIgc2NyZWVuU2hhcGU7XG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aDtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIHZlcnRleFBvc2l0aW9uID0gbWl4KGNvb3JkaW5hdGVzWzBdLFxuICAgIG1peChjb29yZGluYXRlc1syXSwgY29vcmRpbmF0ZXNbMV0sIDAuNSAqIChwb3NpdGlvbiArIDEuMCkpLCBhYnMocG9zaXRpb24pKTtcblxuICB2ZWM0IGNsaXBQb3MgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNCh2ZXJ0ZXhQb3NpdGlvbiwgMS4wKTtcbiAgdmVjMiBjbGlwT2Zmc2V0ID0gKHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KGNvbG9yLCAwLjApKS54eTtcbiAgdmVjMiBkZWx0YSA9IHdlaWdodCAqIGNsaXBPZmZzZXQgKiBzY3JlZW5TaGFwZTtcbiAgdmVjMiBsaW5lT2Zmc2V0ID0gbm9ybWFsaXplKHZlYzIoZGVsdGEueSwgLWRlbHRhLngpKSAvIHNjcmVlblNoYXBlO1xuXG4gIGdsX1Bvc2l0aW9uICAgPSB2ZWM0KGNsaXBQb3MueHkgKyBjbGlwUG9zLncgKiAwLjUgKiBsaW5lV2lkdGggKiBsaW5lT2Zmc2V0LCBjbGlwUG9zLnosIGNsaXBQb3Mudyk7XG4gIGZyYWdDb2xvciAgICAgPSBjb2xvci54ICogY29sb3JzWzBdICsgY29sb3IueSAqIGNvbG9yc1sxXSArIGNvbG9yLnogKiBjb2xvcnNbMl07XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcbn0iXSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYSxvLG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjMyJ9LHtuYW1lOiJ3ZWlnaHQiLHR5cGU6ImZsb2F0In1dKX19LHsiZ2wtc2hhZGVyIjozMjMsZ2xzbGlmeTo0MjR9XSwzMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC12YW8iKSxhPXQoIi4vc2hhZGVycy9pbmRleCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO2Z1bmN0aW9uIG8odCxlLG4saSxhLG8pe3ZhciBzPVt0LGUsbiwwLDAsMCwxXTtzW2krM109MSxzW2ldPWEsci5wdXNoLmFwcGx5KHIscyksc1s2XT0tMSxyLnB1c2guYXBwbHkocixzKSxzW2ldPW8sci5wdXNoLmFwcGx5KHIscyksci5wdXNoLmFwcGx5KHIscyksc1s2XT0xLHIucHVzaC5hcHBseShyLHMpLHNbaV09YSxyLnB1c2guYXBwbHkocixzKX1vKDAsMCwwLDAsMCwxKSxvKDAsMCwwLDEsMCwxKSxvKDAsMCwwLDIsMCwxKSxvKDEsMCwwLDEsLTEsMSksbygxLDAsMCwyLC0xLDEpLG8oMCwxLDAsMCwtMSwxKSxvKDAsMSwwLDIsLTEsMSksbygwLDAsMSwwLC0xLDEpLG8oMCwwLDEsMSwtMSwxKTt2YXIgbD1uKHQsciksYz1pKHQsW3t0eXBlOnQuRkxPQVQsYnVmZmVyOmwsc2l6ZTozLG9mZnNldDowLHN0cmlkZToyOH0se3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjMsb2Zmc2V0OjEyLHN0cmlkZToyOH0se3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjEsb2Zmc2V0OjI0LHN0cmlkZToyOH1dKSx1PWEodCk7dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsdS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTEsdS5hdHRyaWJ1dGVzLndlaWdodC5sb2NhdGlvbj0yO3ZhciBmPW5ldyBzKHQsbCxjLHUpO3JldHVybiBmLnVwZGF0ZShlKSxmfTt2YXIgbz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gcyh0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW4sdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5ib3VuZHM9W1stMWUzLC0xZTMsLTFlM10sWzFlMywxZTMsMWUzXV0sdGhpcy5wb3NpdGlvbj1bMCwwLDBdLHRoaXMubGluZVdpZHRoPVsyLDIsMl0sdGhpcy5jb2xvcnM9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmVuYWJsZWQ9WyEwLCEwLCEwXSx0aGlzLmRyYXdTaWRlcz1bITAsITAsITBdLHRoaXMuYXhlcz1udWxsfXZhciBsPXMucHJvdG90eXBlLGM9WzAsMCwwXSx1PVswLDAsMF0sZj1bMCwwXTtsLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7fSxsLmRyYXc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbCxyPXRoaXMudmFvLG49dGhpcy5zaGFkZXI7ci5iaW5kKCksbi5iaW5kKCk7dmFyIGksYT10Lm1vZGVsfHxvLHM9dC52aWV3fHxvLGw9dC5wcm9qZWN0aW9ufHxvO3RoaXMuYXhlcyYmKGk9dGhpcy5heGVzLmxhc3RDdWJlUHJvcHMuYXhpcyk7Zm9yKHZhciBoPWMscD11LGQ9MDtkPDM7KytkKWkmJmlbZF08MD8oaFtkXT10aGlzLmJvdW5kc1swXVtkXSxwW2RdPXRoaXMuYm91bmRzWzFdW2RdKTooaFtkXT10aGlzLmJvdW5kc1sxXVtkXSxwW2RdPXRoaXMuYm91bmRzWzBdW2RdKTtmWzBdPWUuZHJhd2luZ0J1ZmZlcldpZHRoLGZbMV09ZS5kcmF3aW5nQnVmZmVySGVpZ2h0LG4udW5pZm9ybXMubW9kZWw9YSxuLnVuaWZvcm1zLnZpZXc9cyxuLnVuaWZvcm1zLnByb2plY3Rpb249bCxuLnVuaWZvcm1zLmNvb3JkaW5hdGVzPVt0aGlzLnBvc2l0aW9uLGgscF0sbi51bmlmb3Jtcy5jb2xvcnM9dGhpcy5jb2xvcnMsbi51bmlmb3Jtcy5zY3JlZW5TaGFwZT1mO2ZvcihkPTA7ZDwzOysrZCluLnVuaWZvcm1zLmxpbmVXaWR0aD10aGlzLmxpbmVXaWR0aFtkXSp0aGlzLnBpeGVsUmF0aW8sdGhpcy5lbmFibGVkW2RdJiYoci5kcmF3KGUuVFJJQU5HTEVTLDYsNipkKSx0aGlzLmRyYXdTaWRlc1tkXSYmci5kcmF3KGUuVFJJQU5HTEVTLDEyLDE4KzEyKmQpKTtyLnVuYmluZCgpfSxsLnVwZGF0ZT1mdW5jdGlvbih0KXt0JiYoImJvdW5kcyJpbiB0JiYodGhpcy5ib3VuZHM9dC5ib3VuZHMpLCJwb3NpdGlvbiJpbiB0JiYodGhpcy5wb3NpdGlvbj10LnBvc2l0aW9uKSwibGluZVdpZHRoImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksImNvbG9ycyJpbiB0JiYodGhpcy5jb2xvcnM9dC5jb2xvcnMpLCJlbmFibGVkImluIHQmJih0aGlzLmVuYWJsZWQ9dC5lbmFibGVkKSwiZHJhd1NpZGVzImluIHQmJih0aGlzLmRyYXdTaWRlcz10LmRyYXdTaWRlcykpfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzL2luZGV4IjozMzEsImdsLWJ1ZmZlciI6MjU3LCJnbC12YW8iOjM0M31dLDMzMzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsc2xpZnkiKSxpPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZlYzMgZ2V0T3J0aG9nb25hbFZlY3Rvcih2ZWMzIHYpIHtcbiAgLy8gUmV0dXJuIHVwLXZlY3RvciBmb3Igb25seS16IHZlY3Rvci5cbiAgLy8gUmV0dXJuIGF4ICsgYnkgKyBjeiA9IDAsIGEgcG9pbnQgdGhhdCBsaWVzIG9uIHRoZSBwbGFuZSB0aGF0IGhhcyB2IGFzIGEgbm9ybWFsIGFuZCB0aGF0IGlzbid0ICgwLDAsMCkuXG4gIC8vIEZyb20gdGhlIGFib3ZlIGlmLXN0YXRlbWVudCB3ZSBoYXZlIHx8YXx8ID4gMCAgVSAgfHxifHwgPiAwLlxuICAvLyBBc3NpZ24geiA9IDAsIHggPSAtYiwgeSA9IGE6XG4gIC8vIGEqLWIgKyBiKmEgKyBjKjAgPSAtYmEgKyBiYSArIDAgPSAwXG4gIGlmICh2Lngqdi54ID4gdi56KnYueiB8fCB2Lnkqdi55ID4gdi56KnYueikge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygtdi55LCB2LngsIDAuMCkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygwLjAsIHYueiwgLXYueSkpO1xuICB9XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgdHViZSB2ZXJ0ZXggYW5kIG5vcm1hbCBhdCB0aGUgZ2l2ZW4gaW5kZXguXG4vL1xuLy8gVGhlIHJldHVybmVkIHZlcnRleCBpcyBmb3IgYSB0dWJlIHJpbmcgd2l0aCBpdHMgY2VudGVyIGF0IG9yaWdpbiwgcmFkaXVzIG9mIGxlbmd0aChkKSwgcG9pbnRpbmcgaW4gdGhlIGRpcmVjdGlvbiBvZiBkLlxuLy9cbi8vIEVhY2ggdHViZSBzZWdtZW50IGlzIG1hZGUgdXAgb2YgYSByaW5nIG9mIHZlcnRpY2VzLlxuLy8gVGhlc2UgdmVydGljZXMgYXJlIHVzZWQgdG8gbWFrZSB1cCB0aGUgdHJpYW5nbGVzIG9mIHRoZSB0dWJlIGJ5IGNvbm5lY3RpbmcgdGhlbSB0b2dldGhlciBpbiB0aGUgdmVydGV4IGFycmF5LlxuLy8gVGhlIGluZGV4ZXMgb2YgdHViZSBzZWdtZW50cyBydW4gZnJvbSAwIHRvIDguXG4vL1xudmVjMyBnZXRUdWJlUG9zaXRpb24odmVjMyBkLCBmbG9hdCBpbmRleCwgb3V0IHZlYzMgbm9ybWFsKSB7XG4gIGZsb2F0IHNlZ21lbnRDb3VudCA9IDguMDtcblxuICBmbG9hdCBhbmdsZSA9IDIuMCAqIDMuMTQxNTkgKiAoaW5kZXggLyBzZWdtZW50Q291bnQpO1xuXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XG4gIHZlYzMgdiA9IG5vcm1hbGl6ZShjcm9zcyh1LCBkKSk7XG5cbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCk7XG4gIHZlYzMgeSA9IHYgKiBzaW4oYW5nbGUpICogbGVuZ3RoKGQpO1xuICB2ZWMzIHYzID0geCArIHk7XG5cbiAgbm9ybWFsID0gbm9ybWFsaXplKHYzKTtcblxuICByZXR1cm4gdjM7XG59XG5cbmF0dHJpYnV0ZSB2ZWM0IHZlY3RvcjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yLCBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIGZsb2F0IHZlY3RvclNjYWxlLCB0dWJlU2NhbGU7XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb24sIGludmVyc2VNb2RlbDtcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvbiwgbGlnaHRQb3NpdGlvbjtcblxudmFyeWluZyB2ZWMzIGZfbm9ybWFsLCBmX2xpZ2h0RGlyZWN0aW9uLCBmX2V5ZURpcmVjdGlvbiwgZl9kYXRhLCBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICAvLyBTY2FsZSB0aGUgdmVjdG9yIG1hZ25pdHVkZSB0byBzdGF5IGNvbnN0YW50IHdpdGhcbiAgLy8gbW9kZWwgJiB2aWV3IGNoYW5nZXMuXG4gIHZlYzMgbm9ybWFsO1xuICB2ZWMzIFhZWiA9IGdldFR1YmVQb3NpdGlvbihtYXQzKG1vZGVsKSAqICh0dWJlU2NhbGUgKiB2ZWN0b3IudyAqIG5vcm1hbGl6ZSh2ZWN0b3IueHl6KSksIHBvc2l0aW9uLncsIG5vcm1hbCk7XG4gIHZlYzQgdHViZVBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLnh5eiwgMS4wKSArIHZlYzQoWFlaLCAwLjApO1xuXG4gIC8vTGlnaHRpbmcgZ2VvbWV0cnkgcGFyYW1ldGVyc1xuICB2ZWM0IGNhbWVyYUNvb3JkaW5hdGUgPSB2aWV3ICogdHViZVBvc2l0aW9uO1xuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XG4gIGZfbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfZXllRGlyZWN0aW9uICAgPSBleWVQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBmX25vcm1hbCA9IG5vcm1hbGl6ZSgodmVjNChub3JtYWwsIDAuMCkgKiBpbnZlcnNlTW9kZWwpLnh5eik7XG5cbiAgLy8gdmVjNCBtX3Bvc2l0aW9uICA9IG1vZGVsICogdmVjNCh0dWJlUG9zaXRpb24sIDEuMCk7XG4gIHZlYzQgdF9wb3NpdGlvbiAgPSB2aWV3ICogdHViZVBvc2l0aW9uO1xuICBnbF9Qb3NpdGlvbiAgICAgID0gcHJvamVjdGlvbiAqIHRfcG9zaXRpb247XG5cbiAgZl9jb2xvciAgICAgICAgICA9IGNvbG9yO1xuICBmX2RhdGEgICAgICAgICAgID0gdHViZVBvc2l0aW9uLnh5ejtcbiAgZl9wb3NpdGlvbiAgICAgICA9IHBvc2l0aW9uLnh5ejtcbiAgZl91diAgICAgICAgICAgICA9IHV2O1xufVxuIl0pLGE9bihbIiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmZsb2F0IGJlY2ttYW5uRGlzdHJpYnV0aW9uKGZsb2F0IHgsIGZsb2F0IHJvdWdobmVzcykge1xuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xuICBmbG9hdCBjb3MyQWxwaGEgPSBOZG90SCAqIE5kb3RIO1xuICBmbG9hdCB0YW4yQWxwaGEgPSAoY29zMkFscGhhIC0gMS4wKSAvIGNvczJBbHBoYTtcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcbiAgZmxvYXQgZGVub20gPSAzLjE0MTU5MjY1MzU4OTc5MyAqIHJvdWdobmVzczIgKiBjb3MyQWxwaGEgKiBjb3MyQWxwaGE7XG4gIHJldHVybiBleHAodGFuMkFscGhhIC8gcm91Z2huZXNzMikgLyBkZW5vbTtcbn1cblxuZmxvYXQgY29va1RvcnJhbmNlU3BlY3VsYXIoXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxuICBmbG9hdCByb3VnaG5lc3MsXG4gIGZsb2F0IGZyZXNuZWwpIHtcblxuICBmbG9hdCBWZG90TiA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XG4gIGZsb2F0IExkb3ROID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XG5cbiAgLy9IYWxmIGFuZ2xlIHZlY3RvclxuICB2ZWMzIEggPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKTtcblxuICAvL0dlb21ldHJpYyB0ZXJtXG4gIGZsb2F0IE5kb3RIID0gbWF4KGRvdChzdXJmYWNlTm9ybWFsLCBIKSwgMC4wKTtcbiAgZmxvYXQgVmRvdEggPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IExkb3RIID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgRzEgPSAoMi4wICogTmRvdEggKiBWZG90TikgLyBWZG90SDtcbiAgZmxvYXQgRzIgPSAoMi4wICogTmRvdEggKiBMZG90TikgLyBMZG90SDtcbiAgZmxvYXQgRyA9IG1pbigxLjAsIG1pbihHMSwgRzIpKTtcbiAgXG4gIC8vRGlzdHJpYnV0aW9uIHRlcm1cbiAgZmxvYXQgRCA9IGJlY2ttYW5uRGlzdHJpYnV0aW9uKE5kb3RILCByb3VnaG5lc3MpO1xuXG4gIC8vRnJlc25lbCB0ZXJtXG4gIGZsb2F0IEYgPSBwb3coMS4wIC0gVmRvdE4sIGZyZXNuZWwpO1xuXG4gIC8vTXVsdGlwbHkgdGVybXMgYW5kIGRvbmVcbiAgcmV0dXJuICBHICogRiAqIEQgLyBtYXgoMy4xNDE1OTI2NSAqIFZkb3ROLCAwLjAwMDAwMSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzLCBmcmVzbmVsLCBrYW1iaWVudCwga2RpZmZ1c2UsIGtzcGVjdWxhciwgb3BhY2l0eTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbCwgZl9saWdodERpcmVjdGlvbiwgZl9leWVEaXJlY3Rpb24sIGZfZGF0YSwgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XG4gIHZlYzMgTiA9IG5vcm1hbGl6ZShmX25vcm1hbCk7XG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShmX2xpZ2h0RGlyZWN0aW9uKTtcbiAgdmVjMyBWID0gbm9ybWFsaXplKGZfZXllRGlyZWN0aW9uKTtcblxuICBpZihnbF9Gcm9udEZhY2luZykge1xuICAgIE4gPSAtTjtcbiAgfVxuXG4gIGZsb2F0IHNwZWN1bGFyID0gbWluKDEuMCwgbWF4KDAuMCwgY29va1RvcnJhbmNlU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKSkpO1xuICBmbG9hdCBkaWZmdXNlICA9IG1pbihrYW1iaWVudCArIGtkaWZmdXNlICogbWF4KGRvdChOLCBMKSwgMC4wKSwgMS4wKTtcblxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dik7XG4gIHZlYzQgbGl0Q29sb3IgPSBzdXJmYWNlQ29sb3IuYSAqIHZlYzQoZGlmZnVzZSAqIHN1cmZhY2VDb2xvci5yZ2IgKyBrc3BlY3VsYXIgKiB2ZWMzKDEsMSwxKSAqIHNwZWN1bGFyLCAgMS4wKTtcblxuICBnbF9GcmFnQ29sb3IgPSBsaXRDb2xvciAqIG9wYWNpdHk7XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XG4gIC8vIFJldHVybiB1cC12ZWN0b3IgZm9yIG9ubHkteiB2ZWN0b3IuXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cbiAgLy8gQXNzaWduIHogPSAwLCB4ID0gLWIsIHkgPSBhOlxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoLXYueSwgdi54LCAwLjApKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcbiAgfVxufVxuXG4vLyBDYWxjdWxhdGUgdGhlIHR1YmUgdmVydGV4IGFuZCBub3JtYWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuLy9cbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgdHViZSByaW5nIHdpdGggaXRzIGNlbnRlciBhdCBvcmlnaW4sIHJhZGl1cyBvZiBsZW5ndGgoZCksIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgZC5cbi8vXG4vLyBFYWNoIHR1YmUgc2VnbWVudCBpcyBtYWRlIHVwIG9mIGEgcmluZyBvZiB2ZXJ0aWNlcy5cbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgdHViZSBieSBjb25uZWN0aW5nIHRoZW0gdG9nZXRoZXIgaW4gdGhlIHZlcnRleCBhcnJheS5cbi8vIFRoZSBpbmRleGVzIG9mIHR1YmUgc2VnbWVudHMgcnVuIGZyb20gMCB0byA4LlxuLy9cbnZlYzMgZ2V0VHViZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgaW5kZXgsIG91dCB2ZWMzIG5vcm1hbCkge1xuICBmbG9hdCBzZWdtZW50Q291bnQgPSA4LjA7XG5cbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKGluZGV4IC8gc2VnbWVudENvdW50KTtcblxuICB2ZWMzIHUgPSBnZXRPcnRob2dvbmFsVmVjdG9yKGQpO1xuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xuXG4gIHZlYzMgeCA9IHUgKiBjb3MoYW5nbGUpICogbGVuZ3RoKGQpO1xuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKTtcbiAgdmVjMyB2MyA9IHggKyB5O1xuXG4gIG5vcm1hbCA9IG5vcm1hbGl6ZSh2Myk7XG5cbiAgcmV0dXJuIHYzO1xufVxuXG5hdHRyaWJ1dGUgdmVjNCB2ZWN0b3I7XG5hdHRyaWJ1dGUgdmVjNCBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIGZsb2F0IHR1YmVTY2FsZTtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIG5vcm1hbDtcbiAgdmVjMyBYWVogPSBnZXRUdWJlUG9zaXRpb24obWF0Myhtb2RlbCkgKiAodHViZVNjYWxlICogdmVjdG9yLncgKiBub3JtYWxpemUodmVjdG9yLnh5eikpLCBwb3NpdGlvbi53LCBub3JtYWwpO1xuICB2ZWM0IHR1YmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcblxuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogdHViZVBvc2l0aW9uO1xuICBmX2lkICAgICAgICA9IGlkO1xuICBmX3Bvc2l0aW9uICA9IHBvc2l0aW9uLnh5ejtcbn1cbiJdKSxzPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzICBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQsIGZfaWQueHl6KTtcbn0iXSk7ci5tZXNoU2hhZGVyPXt2ZXJ0ZXg6aSxmcmFnbWVudDphLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjNCJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9LHtuYW1lOiJ2ZWN0b3IiLHR5cGU6InZlYzQifV19LHIucGlja1NoYWRlcj17dmVydGV4Om8sZnJhZ21lbnQ6cyxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzQifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifSx7bmFtZToidmVjdG9yIix0eXBlOiJ2ZWM0In1dfX0se2dsc2xpZnk6NDI0fV0sMzM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXZlYzMiKSxpPXQoImdsLXZlYzQiKSxhPVsieHl6IiwieHp5IiwieXh6IiwieXp4Iiwienh5Iiwienl4Il0sbz1mdW5jdGlvbih0LGUscixhKXtmb3IodmFyIG89MCxzPTA7czx0Lmxlbmd0aDtzKyspZm9yKHZhciBsPXRbc10udmVsb2NpdGllcyxjPTA7YzxsLmxlbmd0aDtjKyspbz1NYXRoLm1heChvLG4ubGVuZ3RoKGxbY10pKTt2YXIgdT10Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLGEpe2Zvcih2YXIgbz10LnBvaW50cyxzPXQudmVsb2NpdGllcyxsPXQuZGl2ZXJnZW5jZXMsYz1bXSx1PVtdLGY9W10saD1bXSxwPVtdLGQ9W10sbT0wLGc9MCx2PWkuY3JlYXRlKCkseT1pLmNyZWF0ZSgpLHg9MDt4PG8ubGVuZ3RoO3grKyl7dmFyIGI9b1t4XSxfPXNbeF0sdz1sW3hdOzA9PT1lJiYodz0uMDUqciksZz1uLmxlbmd0aChfKS9hLHY9aS5jcmVhdGUoKSxuLmNvcHkodixfKSx2WzNdPXc7Zm9yKHZhciBUPTA7VDw4O1QrKylwW1RdPVtiWzBdLGJbMV0sYlsyXSxUXTtpZihoLmxlbmd0aD4wKWZvcihUPTA7VDw4O1QrKyl7dmFyIGs9KFQrMSklODtjLnB1c2goaFtUXSxwW1RdLHBba10scFtrXSxoW2tdLGhbVF0pLGYucHVzaCh5LHYsdix2LHkseSksZC5wdXNoKG0sZyxnLGcsbSxtKTt2YXIgQT1jLmxlbmd0aDt1LnB1c2goW0EtNixBLTUsQS00XSxbQS0zLEEtMixBLTFdKX12YXIgTT1oO2g9cCxwPU07dmFyIFM9eTt5PXYsdj1TO3ZhciBFPW07bT1nLGc9RX1yZXR1cm57cG9zaXRpb25zOmMsY2VsbHM6dSx2ZWN0b3JzOmYsdmVydGV4SW50ZW5zaXR5OmR9fSh0LHIsYSxvKX0pKSxmPVtdLGg9W10scD1bXSxkPVtdO2ZvcihzPTA7czx1Lmxlbmd0aDtzKyspe3ZhciBtPXVbc10sZz1mLmxlbmd0aDtmPWYuY29uY2F0KG0ucG9zaXRpb25zKSxwPXAuY29uY2F0KG0udmVjdG9ycyksZD1kLmNvbmNhdChtLnZlcnRleEludGVuc2l0eSk7Zm9yKGM9MDtjPG0uY2VsbHMubGVuZ3RoO2MrKyl7dmFyIHY9bS5jZWxsc1tjXSx5PVtdO2gucHVzaCh5KTtmb3IodmFyIHg9MDt4PHYubGVuZ3RoO3grKyl5LnB1c2godlt4XStnKX19cmV0dXJue3Bvc2l0aW9uczpmLGNlbGxzOmgsdmVjdG9yczpwLHZlcnRleEludGVuc2l0eTpkLGNvbG9ybWFwOmV9fSxzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Lmxlbmd0aDtmb3Iocj0wO3I8bjtyKyspe3ZhciBpPXRbcl07aWYoaT09PWUpcmV0dXJuIHI7aWYoaT5lKXJldHVybiByLTF9cmV0dXJuIHJ9LGw9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PGU/ZTp0PnI/cjp0fSxjPWZ1bmN0aW9uKHQpe3ZhciBlPTEvMDt0LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKTtmb3IodmFyIHI9dC5sZW5ndGgsbj0xO248cjtuKyspe3ZhciBpPU1hdGguYWJzKHRbbl0tdFtuLTFdKTtpPGUmJihlPWkpfXJldHVybiBlfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnN0YXJ0aW5nUG9zaXRpb25zLGk9dC5tYXhMZW5ndGh8fDFlMyx1PXQudHViZVNpemV8fDEsZj10LmFic29sdXRlVHViZVNpemUsaD10LmdyaWRGaWxsfHwiK3greSt6IixwPXt9Oy0xIT09aC5pbmRleE9mKCIteCIpJiYocC5yZXZlcnNlZFg9ITApLC0xIT09aC5pbmRleE9mKCIteSIpJiYocC5yZXZlcnNlZFk9ITApLC0xIT09aC5pbmRleE9mKCIteiIpJiYocC5yZXZlcnNlZFo9ITApLHAuZmlsbGVkPWEuaW5kZXhPZihoLnJlcGxhY2UoLy0vZywiIikucmVwbGFjZSgvXCsvZywiIikpO3ZhciBkPXQuZ2V0VmVsb2NpdHl8fGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LGUscil7dmFyIGk9ZS52ZWN0b3JzLGE9ZS5tZXNoZ3JpZCxvPXRbMF0sYz10WzFdLHU9dFsyXSxmPWFbMF0ubGVuZ3RoLGg9YVsxXS5sZW5ndGgscD1hWzJdLmxlbmd0aCxkPXMoYVswXSxvKSxtPXMoYVsxXSxjKSxnPXMoYVsyXSx1KSx2PWQrMSx5PW0rMSx4PWcrMTtpZihkPWwoZCwwLGYtMSksdj1sKHYsMCxmLTEpLG09bChtLDAsaC0xKSx5PWwoeSwwLGgtMSksZz1sKGcsMCxwLTEpLHg9bCh4LDAscC0xKSxkPDB8fG08MHx8ZzwwfHx2PmYtMXx8eT5oLTF8fHg+cC0xKXJldHVybiBuLmNyZWF0ZSgpO3ZhciBiLF8sdyxULGssQSxNPWFbMF1bZF0sUz1hWzBdW3ZdLEU9YVsxXVttXSxMPWFbMV1beV0sQz1hWzJdW2ddLFA9KG8tTSkvKFMtTSksST0oYy1FKS8oTC1FKSxPPSh1LUMpLyhhWzJdW3hdLUMpO3N3aXRjaChpc0Zpbml0ZShQKXx8KFA9LjUpLGlzRmluaXRlKEkpfHwoST0uNSksaXNGaW5pdGUoTyl8fChPPS41KSxyLnJldmVyc2VkWCYmKGQ9Zi0xLWQsdj1mLTEtdiksci5yZXZlcnNlZFkmJihtPWgtMS1tLHk9aC0xLXkpLHIucmV2ZXJzZWRaJiYoZz1wLTEtZyx4PXAtMS14KSxyLmZpbGxlZCl7Y2FzZSA1Oms9ZyxBPXgsdz1tKnAsVD15KnAsYj1kKnAqaCxfPXYqcCpoO2JyZWFrO2Nhc2UgNDprPWcsQT14LGI9ZCpwLF89dipwLHc9bSpwKmYsVD15KnAqZjticmVhaztjYXNlIDM6dz1tLFQ9eSxrPWcqaCxBPXgqaCxiPWQqaCpwLF89dipoKnA7YnJlYWs7Y2FzZSAyOnc9bSxUPXksYj1kKmgsXz12Kmgsaz1nKmgqZixBPXgqaCpmO2JyZWFrO2Nhc2UgMTpiPWQsXz12LGs9ZypmLEE9eCpmLHc9bSpmKnAsVD15KmYqcDticmVhaztkZWZhdWx0OmI9ZCxfPXYsdz1tKmYsVD15KmYsaz1nKmYqaCxBPXgqZipofXZhciB6PWlbYit3K2tdLEQ9aVtiK3crQV0sUj1pW2IrVCtrXSxGPWlbYitUK0FdLEI9aVtfK3cra10sTj1pW18rdytBXSxqPWlbXytUK2tdLFU9aVtfK1QrQV0sVj1uLmNyZWF0ZSgpLEg9bi5jcmVhdGUoKSxxPW4uY3JlYXRlKCksRz1uLmNyZWF0ZSgpO24ubGVycChWLHosQixQKSxuLmxlcnAoSCxELE4sUCksbi5sZXJwKHEsUixqLFApLG4ubGVycChHLEYsVSxQKTt2YXIgWT1uLmNyZWF0ZSgpLFc9bi5jcmVhdGUoKTtuLmxlcnAoWSxWLHEsSSksbi5sZXJwKFcsSCxHLEkpO3ZhciBYPW4uY3JlYXRlKCk7cmV0dXJuIG4ubGVycChYLFksVyxPKSxYfShlLHQscCl9LG09dC5nZXREaXZlcmdlbmNlfHxmdW5jdGlvbih0LGUpe3ZhciByPW4uY3JlYXRlKCksaT0xZS00O24uYWRkKHIsdCxbaSwwLDBdKTt2YXIgYT1kKHIpO24uc3VidHJhY3QoYSxhLGUpLG4uc2NhbGUoYSxhLDEvaSksbi5hZGQocix0LFswLGksMF0pO3ZhciBvPWQocik7bi5zdWJ0cmFjdChvLG8sZSksbi5zY2FsZShvLG8sMS9pKSxuLmFkZChyLHQsWzAsMCxpXSk7dmFyIHM9ZChyKTtyZXR1cm4gbi5zdWJ0cmFjdChzLHMsZSksbi5zY2FsZShzLHMsMS9pKSxuLmFkZChyLGEsbyksbi5hZGQocixyLHMpLHJ9LGc9W10sdj1lWzBdWzBdLHk9ZVswXVsxXSx4PWVbMF1bMl0sYj1lWzFdWzBdLF89ZVsxXVsxXSx3PWVbMV1bMl0sVD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIShlPHZ8fGU+Ynx8cjx5fHxyPl98fG48eHx8bj53KX0saz0xMCpuLmRpc3RhbmNlKGVbMF0sZVsxXSkvaSxBPWsqayxNPTEsUz0wLEU9ci5sZW5ndGg7RT4xJiYoTT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj1bXSxuPVtdLGk9e30sYT17fSxvPXt9LHM9dC5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciB1PXRbbF0sZj11WzBdLGg9dVsxXSxwPXVbMl07aVtmXXx8KGUucHVzaChmKSxpW2ZdPSEwKSxhW2hdfHwoci5wdXNoKGgpLGFbaF09ITApLG9bcF18fChuLnB1c2gocCksb1twXT0hMCl9dmFyIGQ9YyhlKSxtPWMociksZz1jKG4pLHY9TWF0aC5taW4oZCxtLGcpO3JldHVybiBpc0Zpbml0ZSh2KT92OjF9KHIpKTtmb3IodmFyIEw9MDtMPEU7TCsrKXt2YXIgQz1uLmNyZWF0ZSgpO24uY29weShDLHJbTF0pO3ZhciBQPVtDXSxJPVtdLE89ZChDKSx6PUM7SS5wdXNoKE8pO3ZhciBEPVtdLFI9bShDLE8pLEY9bi5sZW5ndGgoUik7aXNGaW5pdGUoRikmJkY+UyYmKFM9RiksRC5wdXNoKEYpLGcucHVzaCh7cG9pbnRzOlAsdmVsb2NpdGllczpJLGRpdmVyZ2VuY2VzOkR9KTtmb3IodmFyIEI9MDtCPDEwMCppJiZQLmxlbmd0aDxpJiZUKEMpOyl7QisrO3ZhciBOPW4uY2xvbmUoTyksaj1uLnNxdWFyZWRMZW5ndGgoTik7aWYoMD09PWopYnJlYWs7aWYoaj5BJiZuLnNjYWxlKE4sTixrL01hdGguc3FydChqKSksbi5hZGQoTixOLEMpLE89ZChOKSxuLnNxdWFyZWREaXN0YW5jZSh6LE4pLUE+LTFlLTQqQSl7UC5wdXNoKE4pLHo9TixJLnB1c2goTyk7Uj1tKE4sTyksRj1uLmxlbmd0aChSKTtpc0Zpbml0ZShGKSYmRj5TJiYoUz1GKSxELnB1c2goRil9Qz1OfX12YXIgVT1vKGcsdC5jb2xvcm1hcCxTLE0pO3JldHVybiBmP1UudHViZVNjYWxlPWY6KDA9PT1TJiYoUz0xKSxVLnR1YmVTY2FsZT0uNSp1Kk0vUyksVX07dmFyIHU9dCgiLi9saWIvc2hhZGVycyIpLGY9dCgiZ2wtY29uZTNkIikuY3JlYXRlTWVzaDtlLmV4cG9ydHMuY3JlYXRlVHViZU1lc2g9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0LGUse3NoYWRlcnM6dSx0cmFjZVR5cGU6InN0cmVhbXR1YmUifSl9fSx7Ii4vbGliL3NoYWRlcnMiOjMzMywiZ2wtY29uZTNkIjoyNTgsImdsLXZlYzMiOjM2MiwiZ2wtdmVjNCI6Mzk4fV0sMzM1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbHNsaWZ5IiksYT1pKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzQgdXY7XG5hdHRyaWJ1dGUgdmVjMyBmO1xuYXR0cmlidXRlIHZlYzMgbm9ybWFsO1xuXG51bmlmb3JtIHZlYzMgb2JqZWN0T2Zmc2V0O1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uLCBpbnZlcnNlTW9kZWw7XG51bmlmb3JtIHZlYzMgbGlnaHRQb3NpdGlvbiwgZXllUG9zaXRpb247XG51bmlmb3JtIHNhbXBsZXIyRCBjb2xvcm1hcDtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgbG9jYWxDb29yZGluYXRlID0gdmVjMyh1di56dywgZi54KTtcbiAgd29ybGRDb29yZGluYXRlID0gb2JqZWN0T2Zmc2V0ICsgbG9jYWxDb29yZGluYXRlO1xuICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQod29ybGRDb29yZGluYXRlLCAxLjApO1xuICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gIGtpbGwgPSBmLnk7XG4gIHZhbHVlID0gZi56O1xuICBwbGFuZUNvb3JkaW5hdGUgPSB1di54eTtcblxuICB2Q29sb3IgPSB0ZXh0dXJlMkQoY29sb3JtYXAsIHZlYzIodmFsdWUsIHZhbHVlKSk7XG5cbiAgLy9MaWdodGluZyBnZW9tZXRyeSBwYXJhbWV0ZXJzXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XG4gIGxpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBleWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIHN1cmZhY2VOb3JtYWwgID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwwKSAqIGludmVyc2VNb2RlbCkueHl6KTtcbn1cbiJdKSxvPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbihmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcbiAgZmxvYXQgTmRvdEggPSBtYXgoeCwgMC4wMDAxKTtcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XG4gIGZsb2F0IHJvdWdobmVzczIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XG59XG5cbmZsb2F0IGJlY2ttYW5uU3BlY3VsYXIoXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxuICBmbG9hdCByb3VnaG5lc3MpIHtcbiAgcmV0dXJuIGJlY2ttYW5uRGlzdHJpYnV0aW9uKGRvdChzdXJmYWNlTm9ybWFsLCBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKSksIHJvdWdobmVzcyk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgbG93ZXJCb3VuZCwgdXBwZXJCb3VuZDtcbnVuaWZvcm0gZmxvYXQgY29udG91clRpbnQ7XG51bmlmb3JtIHZlYzQgY29udG91ckNvbG9yO1xudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzLCBmcmVzbmVsLCBrYW1iaWVudCwga2RpZmZ1c2UsIGtzcGVjdWxhciwgb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgdmVydGV4Q29sb3I7XG5cbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChcbiAgICBraWxsID4gMC4wIHx8XG4gICAgdkNvbG9yLmEgPT0gMC4wIHx8XG4gICAgb3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCB3b3JsZENvb3JkaW5hdGUpXG4gICkgZGlzY2FyZDtcblxuICB2ZWMzIE4gPSBub3JtYWxpemUoc3VyZmFjZU5vcm1hbCk7XG4gIHZlYzMgViA9IG5vcm1hbGl6ZShleWVEaXJlY3Rpb24pO1xuICB2ZWMzIEwgPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24pO1xuXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBtYXgoYmVja21hbm5TcGVjdWxhcihMLCBWLCBOLCByb3VnaG5lc3MpLCAwLik7XG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xuXG4gIC8vZGVjaWRlIGhvdyB0byBpbnRlcnBvbGF0ZSBjb2xvciBcdTIwMTQgaW4gdmVydGV4IG9yIGluIGZyYWdtZW50XG4gIHZlYzQgc3VyZmFjZUNvbG9yID1cbiAgICBzdGVwKHZlcnRleENvbG9yLCAuNSkgKiB0ZXh0dXJlMkQoY29sb3JtYXAsIHZlYzIodmFsdWUsIHZhbHVlKSkgK1xuICAgIHN0ZXAoLjUsIHZlcnRleENvbG9yKSAqIHZDb2xvcjtcblxuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gbWl4KGxpdENvbG9yLCBjb250b3VyQ29sb3IsIGNvbnRvdXJUaW50KSAqIG9wYWNpdHk7XG59XG4iXSkscz1pKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzQgdXY7XG5hdHRyaWJ1dGUgZmxvYXQgZjtcblxudW5pZm9ybSB2ZWMzIG9iamVjdE9mZnNldDtcbnVuaWZvcm0gbWF0MyBwZXJtdXRhdGlvbjtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gZmxvYXQgaGVpZ2h0LCB6T2Zmc2V0O1xudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XG5cbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xudmFyeWluZyB2ZWMyIHBsYW5lQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMyBsaWdodERpcmVjdGlvbiwgZXllRGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsO1xudmFyeWluZyB2ZWM0IHZDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIGRhdGFDb29yZGluYXRlID0gcGVybXV0YXRpb24gKiB2ZWMzKHV2Lnh5LCBoZWlnaHQpO1xuICB3b3JsZENvb3JkaW5hdGUgPSBvYmplY3RPZmZzZXQgKyBkYXRhQ29vcmRpbmF0ZTtcbiAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHdvcmxkQ29vcmRpbmF0ZSwgMS4wKTtcblxuICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgY2xpcFBvc2l0aW9uLnogKz0gek9mZnNldDtcblxuICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcbiAgdmFsdWUgPSBmICsgb2JqZWN0T2Zmc2V0Lno7XG4gIGtpbGwgPSAtMS4wO1xuICBwbGFuZUNvb3JkaW5hdGUgPSB1di56dztcblxuICB2Q29sb3IgPSB0ZXh0dXJlMkQoY29sb3JtYXAsIHZlYzIodmFsdWUsIHZhbHVlKSk7XG5cbiAgLy9Eb24ndCBkbyBsaWdodGluZyBmb3IgY29udG91cnNcbiAgc3VyZmFjZU5vcm1hbCAgID0gdmVjMygxLDAsMCk7XG4gIGV5ZURpcmVjdGlvbiAgICA9IHZlYzMoMCwxLDApO1xuICBsaWdodERpcmVjdGlvbiAgPSB2ZWMzKDAsMCwxKTtcbn1cbiJdKSxsPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIHN1cmZhY2VOb3JtYWw7XG5cbnZlYzIgc3BsaXRGbG9hdChmbG9hdCB2KSB7XG4gIGZsb2F0IHZoID0gMjU1LjAgKiB2O1xuICBmbG9hdCB1cHBlciA9IGZsb29yKHZoKTtcbiAgZmxvYXQgbG93ZXIgPSBmcmFjdCh2aCk7XG4gIHJldHVybiB2ZWMyKHVwcGVyIC8gMjU1LjAsIGZsb29yKGxvd2VyICogMTYuMCkgLyAxNi4wKTtcbn1cblxudm9pZCBtYWluKCkge1xuICBpZiAoKGtpbGwgPiAwLjApIHx8XG4gICAgICAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCB3b3JsZENvb3JkaW5hdGUpKSkgZGlzY2FyZDtcblxuICB2ZWMyIHV4ID0gc3BsaXRGbG9hdChwbGFuZUNvb3JkaW5hdGUueCAvIHNoYXBlLngpO1xuICB2ZWMyIHV5ID0gc3BsaXRGbG9hdChwbGFuZUNvb3JkaW5hdGUueSAvIHNoYXBlLnkpO1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZCwgdXgueCwgdXkueCwgdXgueSArICh1eS55LzE2LjApKTtcbn1cbiJdKTtyLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQsYSxvLG51bGwsW3tuYW1lOiJ1diIsdHlwZToidmVjNCJ9LHtuYW1lOiJmIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5vcm1hbCIsdHlwZToidmVjMyJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLm5vcm1hbC5sb2NhdGlvbj0yLGV9LHIuY3JlYXRlUGlja1NoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQsYSxsLG51bGwsW3tuYW1lOiJ1diIsdHlwZToidmVjNCJ9LHtuYW1lOiJmIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5vcm1hbCIsdHlwZToidmVjMyJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLm5vcm1hbC5sb2NhdGlvbj0yLGV9LHIuY3JlYXRlQ29udG91clNoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQscyxvLG51bGwsW3tuYW1lOiJ1diIsdHlwZToidmVjNCJ9LHtuYW1lOiJmIix0eXBlOiJmbG9hdCJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZX0sci5jcmVhdGVQaWNrQ29udG91clNoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQscyxsLG51bGwsW3tuYW1lOiJ1diIsdHlwZToidmVjNCJ9LHtuYW1lOiJmIix0eXBlOiJmbG9hdCJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZX19LHsiZ2wtc2hhZGVyIjozMjMsZ2xzbGlmeTo0MjR9XSwzMzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj15KGUpLG49YihlKSxzPXgoZSksbD1fKGUpLGM9aShlKSx1PWEoZSxbe2J1ZmZlcjpjLHNpemU6NCxzdHJpZGU6NDAsb2Zmc2V0OjB9LHtidWZmZXI6YyxzaXplOjMsc3RyaWRlOjQwLG9mZnNldDoxNn0se2J1ZmZlcjpjLHNpemU6MyxzdHJpZGU6NDAsb2Zmc2V0OjI4fV0pLGY9aShlKSxoPWEoZSxbe2J1ZmZlcjpmLHNpemU6NCxzdHJpZGU6MjAsb2Zmc2V0OjB9LHtidWZmZXI6ZixzaXplOjEsc3RyaWRlOjIwLG9mZnNldDoxNn1dKSxwPWkoZSksZD1hKGUsW3tidWZmZXI6cCxzaXplOjIsdHlwZTplLkZMT0FUfV0pLG09byhlLDEsMjU2LGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUpO20ubWluRmlsdGVyPWUuTElORUFSLG0ubWFnRmlsdGVyPWUuTElORUFSO3ZhciBnPW5ldyBNKGUsWzAsMF0sW1swLDAsMF0sWzAsMCwwXV0scixuLGMsdSxtLHMsbCxmLGgscCxkLFswLDAsMF0pLHY9e2xldmVsczpbW10sW10sW11dfTtmb3IodmFyIHcgaW4gdCl2W3ddPXRbd107cmV0dXJuIHYuY29sb3JtYXA9di5jb2xvcm1hcHx8ImpldCIsZy51cGRhdGUodiksZ307dmFyIG49dCgiYml0LXR3aWRkbGUiKSxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksbz10KCJnbC10ZXh0dXJlMmQiKSxzPXQoInR5cGVkYXJyYXktcG9vbCIpLGw9dCgiY29sb3JtYXAiKSxjPXQoIm5kYXJyYXktb3BzIiksdT10KCJuZGFycmF5LXBhY2siKSxmPXQoIm5kYXJyYXkiKSxoPXQoInN1cmZhY2UtbmV0cyIpLHA9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGQ9dCgiZ2wtbWF0NC9pbnZlcnQiKSxtPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksZz10KCJuZGFycmF5LWdyYWRpZW50Iiksdj10KCIuL2xpYi9zaGFkZXJzIikseT12LmNyZWF0ZVNoYWRlcix4PXYuY3JlYXRlQ29udG91clNoYWRlcixiPXYuY3JlYXRlUGlja1NoYWRlcixfPXYuY3JlYXRlUGlja0NvbnRvdXJTaGFkZXIsdz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sVD1bWzAsMF0sWzAsMV0sWzEsMF0sWzEsMV0sWzEsMF0sWzAsMV1dLGs9W1swLDAsMCwwLDAsMCwwLDAsMF0sWzAsMCwwLDAsMCwwLDAsMCwwXSxbMCwwLDAsMCwwLDAsMCwwLDBdXTtmdW5jdGlvbiBBKHQsZSxyLG4saSl7dGhpcy5wb3NpdGlvbj10LHRoaXMuaW5kZXg9ZSx0aGlzLnV2PXIsdGhpcy5sZXZlbD1uLHRoaXMuZGF0YUNvb3JkaW5hdGU9aX0hZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDM7Kyt0KXt2YXIgZT1rW3RdLHI9KHQrMiklMztlWyh0KzEpJTMrMF09MSxlW3IrM109MSxlW3QrNl09MX19KCk7ZnVuY3Rpb24gTSh0LGUscixuLGksYSxvLGwsYyx1LGgscCxkLG0sZyl7dGhpcy5nbD10LHRoaXMuc2hhcGU9ZSx0aGlzLmJvdW5kcz1yLHRoaXMub2JqZWN0T2Zmc2V0PWcsdGhpcy5pbnRlbnNpdHlCb3VuZHM9W10sdGhpcy5fc2hhZGVyPW4sdGhpcy5fcGlja1NoYWRlcj1pLHRoaXMuX2Nvb3JkaW5hdGVCdWZmZXI9YSx0aGlzLl92YW89byx0aGlzLl9jb2xvck1hcD1sLHRoaXMuX2NvbnRvdXJTaGFkZXI9Yyx0aGlzLl9jb250b3VyUGlja1NoYWRlcj11LHRoaXMuX2NvbnRvdXJCdWZmZXI9aCx0aGlzLl9jb250b3VyVkFPPXAsdGhpcy5fY29udG91ck9mZnNldHM9W1tdLFtdLFtdXSx0aGlzLl9jb250b3VyQ291bnRzPVtbXSxbXSxbXV0sdGhpcy5fdmVydGV4Q291bnQ9MCx0aGlzLl9waWNrUmVzdWx0PW5ldyBBKFswLDAsMF0sWzAsMF0sWzAsMF0sWzAsMCwwXSxbMCwwLDBdKSx0aGlzLl9keW5hbWljQnVmZmVyPWQsdGhpcy5fZHluYW1pY1ZBTz1tLHRoaXMuX2R5bmFtaWNPZmZzZXRzPVswLDAsMF0sdGhpcy5fZHluYW1pY0NvdW50cz1bMCwwLDBdLHRoaXMuY29udG91cldpZHRoPVsxLDEsMV0sdGhpcy5jb250b3VyTGV2ZWxzPVtbMV0sWzFdLFsxXV0sdGhpcy5jb250b3VyVGludD1bMCwwLDBdLHRoaXMuY29udG91ckNvbG9yPVtbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdLFsuNSwuNSwuNSwxXV0sdGhpcy5zaG93Q29udG91cj0hMCx0aGlzLnNob3dTdXJmYWNlPSEwLHRoaXMuZW5hYmxlSGlnaGxpZ2h0PVshMCwhMCwhMF0sdGhpcy5oaWdobGlnaHRDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuaGlnaGxpZ2h0VGludD1bMSwxLDFdLHRoaXMuaGlnaGxpZ2h0TGV2ZWw9Wy0xLC0xLC0xXSx0aGlzLmVuYWJsZUR5bmFtaWM9WyEwLCEwLCEwXSx0aGlzLmR5bmFtaWNMZXZlbD1bTmFOLE5hTixOYU5dLHRoaXMuZHluYW1pY0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5keW5hbWljVGludD1bMSwxLDFdLHRoaXMuZHluYW1pY1dpZHRoPVsxLDEsMV0sdGhpcy5heGVzQm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuc3VyZmFjZVByb2plY3Q9WyExLCExLCExXSx0aGlzLmNvbnRvdXJQcm9qZWN0PVtbITEsITEsITFdLFshMSwhMSwhMV0sWyExLCExLCExXV0sdGhpcy5jb2xvckJvdW5kcz1bITEsITFdLHRoaXMuX2ZpZWxkPVtmKHMubWFsbG9jRmxvYXQoMTAyNCksWzAsMF0pLGYocy5tYWxsb2NGbG9hdCgxMDI0KSxbMCwwXSksZihzLm1hbGxvY0Zsb2F0KDEwMjQpLFswLDBdKV0sdGhpcy5waWNrSWQ9MSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5zbmFwVG9EYXRhPSExLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMub3BhY2l0eT0xLHRoaXMubGlnaHRQb3NpdGlvbj1bMTAsMWU0LDBdLHRoaXMuYW1iaWVudExpZ2h0PS44LHRoaXMuZGlmZnVzZUxpZ2h0PS44LHRoaXMuc3BlY3VsYXJMaWdodD0yLHRoaXMucm91Z2huZXNzPS41LHRoaXMuZnJlc25lbD0xLjUsdGhpcy52ZXJ0ZXhDb2xvcj0wLHRoaXMuZGlydHk9ITB9dmFyIFM9TS5wcm90b3R5cGU7Uy5nZW5Db2xvcm1hcD1mdW5jdGlvbih0LGUpe3ZhciByPSExLG49dShbbCh7Y29sb3JtYXA6dCxuc2hhZGVzOjI1Nixmb3JtYXQ6InJnYmEifSkubWFwKChmdW5jdGlvbih0LG4pe3ZhciBpPWU/ZnVuY3Rpb24odCxlKXtpZighZSlyZXR1cm4gMTtpZighZS5sZW5ndGgpcmV0dXJuIDE7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3Ipe2lmKGUubGVuZ3RoPDIpcmV0dXJuIDE7aWYoZVtyXVswXT09PXQpcmV0dXJuIGVbcl1bMV07aWYoZVtyXVswXT50JiZyPjApe3ZhciBuPShlW3JdWzBdLXQpLyhlW3JdWzBdLWVbci0xXVswXSk7cmV0dXJuIGVbcl1bMV0qKDEtbikrbiplW3ItMV1bMV19fXJldHVybiAxfShuLzI1NSxlKTp0WzNdO3JldHVybiBpPDEmJihyPSEwKSxbdFswXSx0WzFdLHRbMl0sMjU1KmldfSkpXSk7cmV0dXJuIGMuZGl2c2VxKG4sMjU1KSx0aGlzLmhhc0FscGhhU2NhbGU9cixufSxTLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF8fHRoaXMuaGFzQWxwaGFTY2FsZX0sUy5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzVHJhbnNwYXJlbnQoKX0sUy5waWNrU2xvdHM9MSxTLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9O3ZhciBFPVswLDAsMF0sTD17c2hvd1N1cmZhY2U6ITEsc2hvd0NvbnRvdXI6ITEscHJvamVjdGlvbnM6W3cuc2xpY2UoKSx3LnNsaWNlKCksdy5zbGljZSgpXSxjbGlwQm91bmRzOltbWzAsMCwwXSxbMCwwLDBdXSxbWzAsMCwwXSxbMCwwLDBdXSxbWzAsMCwwXSxbMCwwLDBdXV19O2Z1bmN0aW9uIEModCxlKXt2YXIgcixuLGksYT1lLmF4ZXMmJmUuYXhlcy5sYXN0Q3ViZVByb3BzLmF4aXN8fEUsbz1lLnNob3dTdXJmYWNlLHM9ZS5zaG93Q29udG91cjtmb3Iocj0wO3I8MzsrK3IpZm9yKG89b3x8ZS5zdXJmYWNlUHJvamVjdFtyXSxuPTA7bjwzOysrbilzPXN8fGUuY29udG91clByb2plY3Rbcl1bbl07Zm9yKHI9MDtyPDM7KytyKXt2YXIgbD1MLnByb2plY3Rpb25zW3JdO2ZvcihuPTA7bjwxNjsrK24pbFtuXT0wO2ZvcihuPTA7bjw0OysrbilsWzUqbl09MTtsWzUqcl09MCxsWzEyK3JdPWUuYXhlc0JvdW5kc1srKGFbcl0+MCldW3JdLHAobCx0Lm1vZGVsLGwpO3ZhciBjPUwuY2xpcEJvdW5kc1tyXTtmb3IoaT0wO2k8MjsrK2kpZm9yKG49MDtuPDM7KytuKWNbaV1bbl09dC5jbGlwQm91bmRzW2ldW25dO2NbMF1bcl09LTFlOCxjWzFdW3JdPTFlOH1yZXR1cm4gTC5zaG93U3VyZmFjZT1vLEwuc2hvd0NvbnRvdXI9cyxMfXZhciBQPXttb2RlbDp3LHZpZXc6dyxwcm9qZWN0aW9uOncsaW52ZXJzZU1vZGVsOncuc2xpY2UoKSxsb3dlckJvdW5kOlswLDAsMF0sdXBwZXJCb3VuZDpbMCwwLDBdLGNvbG9yTWFwOjAsY2xpcEJvdW5kczpbWzAsMCwwXSxbMCwwLDBdXSxoZWlnaHQ6MCxjb250b3VyVGludDowLGNvbnRvdXJDb2xvcjpbMCwwLDAsMV0scGVybXV0YXRpb246WzEsMCwwLDAsMSwwLDAsMCwxXSx6T2Zmc2V0Oi0xZS00LG9iamVjdE9mZnNldDpbMCwwLDBdLGthbWJpZW50OjEsa2RpZmZ1c2U6MSxrc3BlY3VsYXI6MSxsaWdodFBvc2l0aW9uOlsxZTMsMWUzLDFlM10sZXllUG9zaXRpb246WzAsMCwwXSxyb3VnaG5lc3M6MSxmcmVzbmVsOjEsb3BhY2l0eToxLHZlcnRleENvbG9yOjB9LEk9dy5zbGljZSgpLE89WzEsMCwwLDAsMSwwLDAsMCwxXTtmdW5jdGlvbiB6KHQsZSl7dD10fHx7fTt2YXIgcj10aGlzLmdsO3IuZGlzYWJsZShyLkNVTExfRkFDRSksdGhpcy5fY29sb3JNYXAuYmluZCgwKTt2YXIgbj1QO24ubW9kZWw9dC5tb2RlbHx8dyxuLnZpZXc9dC52aWV3fHx3LG4ucHJvamVjdGlvbj10LnByb2plY3Rpb258fHcsbi5sb3dlckJvdW5kPVt0aGlzLmJvdW5kc1swXVswXSx0aGlzLmJvdW5kc1swXVsxXSx0aGlzLmNvbG9yQm91bmRzWzBdfHx0aGlzLmJvdW5kc1swXVsyXV0sbi51cHBlckJvdW5kPVt0aGlzLmJvdW5kc1sxXVswXSx0aGlzLmJvdW5kc1sxXVsxXSx0aGlzLmNvbG9yQm91bmRzWzFdfHx0aGlzLmJvdW5kc1sxXVsyXV0sbi5vYmplY3RPZmZzZXQ9dGhpcy5vYmplY3RPZmZzZXQsbi5jb250b3VyQ29sb3I9dGhpcy5jb250b3VyQ29sb3JbMF0sbi5pbnZlcnNlTW9kZWw9ZChuLmludmVyc2VNb2RlbCxuLm1vZGVsKTtmb3IodmFyIGk9MDtpPDI7KytpKWZvcih2YXIgYT1uLmNsaXBCb3VuZHNbaV0sbz0wO288MzsrK28pYVtvXT1NYXRoLm1pbihNYXRoLm1heCh0aGlzLmNsaXBCb3VuZHNbaV1bb10sLTFlOCksMWU4KTtuLmthbWJpZW50PXRoaXMuYW1iaWVudExpZ2h0LG4ua2RpZmZ1c2U9dGhpcy5kaWZmdXNlTGlnaHQsbi5rc3BlY3VsYXI9dGhpcy5zcGVjdWxhckxpZ2h0LG4ucm91Z2huZXNzPXRoaXMucm91Z2huZXNzLG4uZnJlc25lbD10aGlzLmZyZXNuZWwsbi5vcGFjaXR5PXRoaXMub3BhY2l0eSxuLmhlaWdodD0wLG4ucGVybXV0YXRpb249TyxuLnZlcnRleENvbG9yPXRoaXMudmVydGV4Q29sb3I7dmFyIHM9STtmb3IocChzLG4udmlldyxuLm1vZGVsKSxwKHMsbi5wcm9qZWN0aW9uLHMpLGQocyxzKSxpPTA7aTwzOysraSluLmV5ZVBvc2l0aW9uW2ldPXNbMTIraV0vc1sxNV07dmFyIGw9c1sxNV07Zm9yKGk9MDtpPDM7KytpKWwrPXRoaXMubGlnaHRQb3NpdGlvbltpXSpzWzQqaSszXTtmb3IoaT0wO2k8MzsrK2kpe3ZhciBjPXNbMTIraV07Zm9yKG89MDtvPDM7KytvKWMrPXNbNCpvK2ldKnRoaXMubGlnaHRQb3NpdGlvbltvXTtuLmxpZ2h0UG9zaXRpb25baV09Yy9sfXZhciB1PUMobix0aGlzKTtpZih1LnNob3dTdXJmYWNlKXtmb3IodGhpcy5fc2hhZGVyLmJpbmQoKSx0aGlzLl9zaGFkZXIudW5pZm9ybXM9bix0aGlzLl92YW8uYmluZCgpLHRoaXMuc2hvd1N1cmZhY2UmJnRoaXMuX3ZlcnRleENvdW50JiZ0aGlzLl92YW8uZHJhdyhyLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCksaT0wO2k8MzsrK2kpdGhpcy5zdXJmYWNlUHJvamVjdFtpXSYmdGhpcy52ZXJ0ZXhDb3VudCYmKHRoaXMuX3NoYWRlci51bmlmb3Jtcy5tb2RlbD11LnByb2plY3Rpb25zW2ldLHRoaXMuX3NoYWRlci51bmlmb3Jtcy5jbGlwQm91bmRzPXUuY2xpcEJvdW5kc1tpXSx0aGlzLl92YW8uZHJhdyhyLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCkpO3RoaXMuX3Zhby51bmJpbmQoKX1pZih1LnNob3dDb250b3VyKXt2YXIgZj10aGlzLl9jb250b3VyU2hhZGVyO24ua2FtYmllbnQ9MSxuLmtkaWZmdXNlPTAsbi5rc3BlY3VsYXI9MCxuLm9wYWNpdHk9MSxmLmJpbmQoKSxmLnVuaWZvcm1zPW47dmFyIGg9dGhpcy5fY29udG91clZBTztmb3IoaC5iaW5kKCksaT0wO2k8MzsrK2kpZm9yKGYudW5pZm9ybXMucGVybXV0YXRpb249a1tpXSxyLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFtpXSp0aGlzLnBpeGVsUmF0aW8pLG89MDtvPHRoaXMuY29udG91ckxldmVsc1tpXS5sZW5ndGg7KytvKW89PT10aGlzLmhpZ2hsaWdodExldmVsW2ldPyhmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmhpZ2hsaWdodENvbG9yW2ldLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5oaWdobGlnaHRUaW50W2ldKTowIT09byYmby0xIT09dGhpcy5oaWdobGlnaHRMZXZlbFtpXXx8KGYudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yW2ldLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5jb250b3VyVGludFtpXSksdGhpcy5fY29udG91ckNvdW50c1tpXVtvXSYmKGYudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1tpXVtvXSxoLmRyYXcoci5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW2ldW29dLHRoaXMuX2NvbnRvdXJPZmZzZXRzW2ldW29dKSk7Zm9yKGk9MDtpPDM7KytpKWZvcihmLnVuaWZvcm1zLm1vZGVsPXUucHJvamVjdGlvbnNbaV0sZi51bmlmb3Jtcy5jbGlwQm91bmRzPXUuY2xpcEJvdW5kc1tpXSxvPTA7bzwzOysrbylpZih0aGlzLmNvbnRvdXJQcm9qZWN0W2ldW29dKXtmLnVuaWZvcm1zLnBlcm11dGF0aW9uPWtbb10sci5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbb10qdGhpcy5waXhlbFJhdGlvKTtmb3IodmFyIG09MDttPHRoaXMuY29udG91ckxldmVsc1tvXS5sZW5ndGg7KyttKW09PT10aGlzLmhpZ2hsaWdodExldmVsW29dPyhmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmhpZ2hsaWdodENvbG9yW29dLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5oaWdobGlnaHRUaW50W29dKTowIT09bSYmbS0xIT09dGhpcy5oaWdobGlnaHRMZXZlbFtvXXx8KGYudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yW29dLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5jb250b3VyVGludFtvXSksdGhpcy5fY29udG91ckNvdW50c1tvXVttXSYmKGYudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1tvXVttXSxoLmRyYXcoci5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW29dW21dLHRoaXMuX2NvbnRvdXJPZmZzZXRzW29dW21dKSl9Zm9yKGgudW5iaW5kKCksKGg9dGhpcy5fZHluYW1pY1ZBTykuYmluZCgpLGk9MDtpPDM7KytpKWlmKDAhPT10aGlzLl9keW5hbWljQ291bnRzW2ldKWZvcihmLnVuaWZvcm1zLm1vZGVsPW4ubW9kZWwsZi51bmlmb3Jtcy5jbGlwQm91bmRzPW4uY2xpcEJvdW5kcyxmLnVuaWZvcm1zLnBlcm11dGF0aW9uPWtbaV0sci5saW5lV2lkdGgodGhpcy5keW5hbWljV2lkdGhbaV0qdGhpcy5waXhlbFJhdGlvKSxmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmR5bmFtaWNDb2xvcltpXSxmLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuZHluYW1pY1RpbnRbaV0sZi51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5keW5hbWljTGV2ZWxbaV0saC5kcmF3KHIuTElORVMsdGhpcy5fZHluYW1pY0NvdW50c1tpXSx0aGlzLl9keW5hbWljT2Zmc2V0c1tpXSksbz0wO288MzsrK28pdGhpcy5jb250b3VyUHJvamVjdFtvXVtpXSYmKGYudW5pZm9ybXMubW9kZWw9dS5wcm9qZWN0aW9uc1tvXSxmLnVuaWZvcm1zLmNsaXBCb3VuZHM9dS5jbGlwQm91bmRzW29dLGguZHJhdyhyLkxJTkVTLHRoaXMuX2R5bmFtaWNDb3VudHNbaV0sdGhpcy5fZHluYW1pY09mZnNldHNbaV0pKTtoLnVuYmluZCgpfX1TLmRyYXc9ZnVuY3Rpb24odCl7cmV0dXJuIHouY2FsbCh0aGlzLHQsITEpfSxTLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXtyZXR1cm4gei5jYWxsKHRoaXMsdCwhMCl9O3ZhciBEPXttb2RlbDp3LHZpZXc6dyxwcm9qZWN0aW9uOncsaW52ZXJzZU1vZGVsOncsY2xpcEJvdW5kczpbWzAsMCwwXSxbMCwwLDBdXSxoZWlnaHQ6MCxzaGFwZTpbMCwwXSxwaWNrSWQ6MCxsb3dlckJvdW5kOlswLDAsMF0sdXBwZXJCb3VuZDpbMCwwLDBdLHpPZmZzZXQ6MCxvYmplY3RPZmZzZXQ6WzAsMCwwXSxwZXJtdXRhdGlvbjpbMSwwLDAsMCwxLDAsMCwwLDFdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxleWVQb3NpdGlvbjpbMCwwLDBdfTtmdW5jdGlvbiBSKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/W2UodFswXSksZSh0WzFdKSxlKHRbMl0pXTpbZSh0KSxlKHQpLGUodCldfWZ1bmN0aW9uIEYodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/Mz09PXQubGVuZ3RoP1t0WzBdLHRbMV0sdFsyXSwxXTpbdFswXSx0WzFdLHRbMl0sdFszXV06WzAsMCwwLDFdfWZ1bmN0aW9uIEIodCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm5bRih0WzBdKSxGKHRbMV0pLEYodFsyXSldO3ZhciBlPUYodCk7cmV0dXJuW2Uuc2xpY2UoKSxlLnNsaWNlKCksZS5zbGljZSgpXX19Uy5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7ZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKTt2YXIgcj1EO3IubW9kZWw9dC5tb2RlbHx8dyxyLnZpZXc9dC52aWV3fHx3LHIucHJvamVjdGlvbj10LnByb2plY3Rpb258fHcsci5zaGFwZT10aGlzLl9maWVsZFsyXS5zaGFwZSxyLnBpY2tJZD10aGlzLnBpY2tJZC8yNTUsci5sb3dlckJvdW5kPXRoaXMuYm91bmRzWzBdLHIudXBwZXJCb3VuZD10aGlzLmJvdW5kc1sxXSxyLm9iamVjdE9mZnNldD10aGlzLm9iamVjdE9mZnNldCxyLnBlcm11dGF0aW9uPU87Zm9yKHZhciBuPTA7bjwyOysrbilmb3IodmFyIGk9ci5jbGlwQm91bmRzW25dLGE9MDthPDM7KythKWlbYV09TWF0aC5taW4oTWF0aC5tYXgodGhpcy5jbGlwQm91bmRzW25dW2FdLC0xZTgpLDFlOCk7dmFyIG89QyhyLHRoaXMpO2lmKG8uc2hvd1N1cmZhY2Upe2Zvcih0aGlzLl9waWNrU2hhZGVyLmJpbmQoKSx0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zPXIsdGhpcy5fdmFvLmJpbmQoKSx0aGlzLl92YW8uZHJhdyhlLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCksbj0wO248MzsrK24pdGhpcy5zdXJmYWNlUHJvamVjdFtuXSYmKHRoaXMuX3BpY2tTaGFkZXIudW5pZm9ybXMubW9kZWw9by5wcm9qZWN0aW9uc1tuXSx0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zLmNsaXBCb3VuZHM9by5jbGlwQm91bmRzW25dLHRoaXMuX3Zhby5kcmF3KGUuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSk7dGhpcy5fdmFvLnVuYmluZCgpfWlmKG8uc2hvd0NvbnRvdXIpe3ZhciBzPXRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyO3MuYmluZCgpLHMudW5pZm9ybXM9cjt2YXIgbD10aGlzLl9jb250b3VyVkFPO2ZvcihsLmJpbmQoKSxhPTA7YTwzOysrYSlmb3IoZS5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbYV0qdGhpcy5waXhlbFJhdGlvKSxzLnVuaWZvcm1zLnBlcm11dGF0aW9uPWtbYV0sbj0wO248dGhpcy5jb250b3VyTGV2ZWxzW2FdLmxlbmd0aDsrK24pdGhpcy5fY29udG91ckNvdW50c1thXVtuXSYmKHMudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1thXVtuXSxsLmRyYXcoZS5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW2FdW25dLHRoaXMuX2NvbnRvdXJPZmZzZXRzW2FdW25dKSk7Zm9yKG49MDtuPDM7KytuKWZvcihzLnVuaWZvcm1zLm1vZGVsPW8ucHJvamVjdGlvbnNbbl0scy51bmlmb3Jtcy5jbGlwQm91bmRzPW8uY2xpcEJvdW5kc1tuXSxhPTA7YTwzOysrYSlpZih0aGlzLmNvbnRvdXJQcm9qZWN0W25dW2FdKXtzLnVuaWZvcm1zLnBlcm11dGF0aW9uPWtbYV0sZS5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbYV0qdGhpcy5waXhlbFJhdGlvKTtmb3IodmFyIGM9MDtjPHRoaXMuY29udG91ckxldmVsc1thXS5sZW5ndGg7KytjKXRoaXMuX2NvbnRvdXJDb3VudHNbYV1bY10mJihzLnVuaWZvcm1zLmhlaWdodD10aGlzLmNvbnRvdXJMZXZlbHNbYV1bY10sbC5kcmF3KGUuTElORVMsdGhpcy5fY29udG91ckNvdW50c1thXVtjXSx0aGlzLl9jb250b3VyT2Zmc2V0c1thXVtjXSkpfWwudW5iaW5kKCl9fSxTLnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPXRoaXMuX2ZpZWxkWzJdLnNoYXBlLHI9dGhpcy5fcGlja1Jlc3VsdCxuPWVbMF0qKHQudmFsdWVbMF0rKHQudmFsdWVbMl0+PjQpLzE2KS8yNTUsaT1NYXRoLmZsb29yKG4pLGE9bi1pLG89ZVsxXSoodC52YWx1ZVsxXSsoMTUmdC52YWx1ZVsyXSkvMTYpLzI1NSxzPU1hdGguZmxvb3IobyksbD1vLXM7aSs9MSxzKz0xO3ZhciBjPXIucG9zaXRpb247Y1swXT1jWzFdPWNbMl09MDtmb3IodmFyIHU9MDt1PDI7Kyt1KWZvcih2YXIgZj11P2E6MS1hLGg9MDtoPDI7KytoKWZvcih2YXIgcD1pK3UsZD1zK2gsZz1mKihoP2w6MS1sKSx2PTA7djwzOysrdiljW3ZdKz10aGlzLl9maWVsZFt2XS5nZXQocCxkKSpnO2Zvcih2YXIgeT10aGlzLl9waWNrUmVzdWx0LmxldmVsLHg9MDt4PDM7Kyt4KWlmKHlbeF09bS5sZSh0aGlzLmNvbnRvdXJMZXZlbHNbeF0sY1t4XSkseVt4XTwwKXRoaXMuY29udG91ckxldmVsc1t4XS5sZW5ndGg+MCYmKHlbeF09MCk7ZWxzZSBpZih5W3hdPHRoaXMuY29udG91ckxldmVsc1t4XS5sZW5ndGgtMSl7dmFyIGI9dGhpcy5jb250b3VyTGV2ZWxzW3hdW3lbeF1dLF89dGhpcy5jb250b3VyTGV2ZWxzW3hdW3lbeF0rMV07TWF0aC5hYnMoYi1jW3hdKT5NYXRoLmFicyhfLWNbeF0pJiYoeVt4XSs9MSl9Zm9yKHIuaW5kZXhbMF09YTwuNT9pOmkrMSxyLmluZGV4WzFdPWw8LjU/czpzKzEsci51dlswXT1uL2VbMF0sci51dlsxXT1vL2VbMV0sdj0wO3Y8MzsrK3Ypci5kYXRhQ29vcmRpbmF0ZVt2XT10aGlzLl9maWVsZFt2XS5nZXQoci5pbmRleFswXSxyLmluZGV4WzFdKTtyZXR1cm4gcn0sUy5wYWRGaWVsZD1mdW5jdGlvbih0LGUpe3ZhciByPWUuc2hhcGUuc2xpY2UoKSxuPXQuc2hhcGUuc2xpY2UoKTtjLmFzc2lnbih0LmxvKDEsMSkuaGkoclswXSxyWzFdKSxlKSxjLmFzc2lnbih0LmxvKDEpLmhpKHJbMF0sMSksZS5oaShyWzBdLDEpKSxjLmFzc2lnbih0LmxvKDEsblsxXS0xKS5oaShyWzBdLDEpLGUubG8oMCxyWzFdLTEpLmhpKHJbMF0sMSkpLGMuYXNzaWduKHQubG8oMCwxKS5oaSgxLHJbMV0pLGUuaGkoMSkpLGMuYXNzaWduKHQubG8oblswXS0xLDEpLmhpKDEsclsxXSksZS5sbyhyWzBdLTEpKSx0LnNldCgwLDAsZS5nZXQoMCwwKSksdC5zZXQoMCxuWzFdLTEsZS5nZXQoMCxyWzFdLTEpKSx0LnNldChuWzBdLTEsMCxlLmdldChyWzBdLTEsMCkpLHQuc2V0KG5bMF0tMSxuWzFdLTEsZS5nZXQoclswXS0xLHJbMV0tMSkpfSxTLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9LHRoaXMub2JqZWN0T2Zmc2V0PXQub2JqZWN0T2Zmc2V0fHx0aGlzLm9iamVjdE9mZnNldCx0aGlzLmRpcnR5PSEwLCJjb250b3VyV2lkdGgiaW4gdCYmKHRoaXMuY29udG91cldpZHRoPVIodC5jb250b3VyV2lkdGgsTnVtYmVyKSksInNob3dDb250b3VyImluIHQmJih0aGlzLnNob3dDb250b3VyPVIodC5zaG93Q29udG91cixCb29sZWFuKSksInNob3dTdXJmYWNlImluIHQmJih0aGlzLnNob3dTdXJmYWNlPSEhdC5zaG93U3VyZmFjZSksImNvbnRvdXJUaW50ImluIHQmJih0aGlzLmNvbnRvdXJUaW50PVIodC5jb250b3VyVGludCxCb29sZWFuKSksImNvbnRvdXJDb2xvciJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9Qih0LmNvbnRvdXJDb2xvcikpLCJjb250b3VyUHJvamVjdCJpbiB0JiYodGhpcy5jb250b3VyUHJvamVjdD1SKHQuY29udG91clByb2plY3QsKGZ1bmN0aW9uKHQpe3JldHVybiBSKHQsQm9vbGVhbil9KSkpLCJzdXJmYWNlUHJvamVjdCJpbiB0JiYodGhpcy5zdXJmYWNlUHJvamVjdD10LnN1cmZhY2VQcm9qZWN0KSwiZHluYW1pY0NvbG9yImluIHQmJih0aGlzLmR5bmFtaWNDb2xvcj1CKHQuZHluYW1pY0NvbG9yKSksImR5bmFtaWNUaW50ImluIHQmJih0aGlzLmR5bmFtaWNUaW50PVIodC5keW5hbWljVGludCxOdW1iZXIpKSwiZHluYW1pY1dpZHRoImluIHQmJih0aGlzLmR5bmFtaWNXaWR0aD1SKHQuZHluYW1pY1dpZHRoLE51bWJlcikpLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5KSwib3BhY2l0eXNjYWxlImluIHQmJih0aGlzLm9wYWNpdHlzY2FsZT10Lm9wYWNpdHlzY2FsZSksImNvbG9yQm91bmRzImluIHQmJih0aGlzLmNvbG9yQm91bmRzPXQuY29sb3JCb3VuZHMpLCJ2ZXJ0ZXhDb2xvciJpbiB0JiYodGhpcy52ZXJ0ZXhDb2xvcj10LnZlcnRleENvbG9yPzE6MCksImNvbG9ybWFwImluIHQmJnRoaXMuX2NvbG9yTWFwLnNldFBpeGVscyh0aGlzLmdlbkNvbG9ybWFwKHQuY29sb3JtYXAsdGhpcy5vcGFjaXR5c2NhbGUpKTt2YXIgZT10LmZpZWxkfHx0LmNvb3JkcyYmdC5jb29yZHNbMl18fG51bGwscj0hMTtpZihlfHwoZT10aGlzLl9maWVsZFsyXS5zaGFwZVswXXx8dGhpcy5fZmllbGRbMl0uc2hhcGVbMl0/dGhpcy5fZmllbGRbMl0ubG8oMSwxKS5oaSh0aGlzLl9maWVsZFsyXS5zaGFwZVswXS0yLHRoaXMuX2ZpZWxkWzJdLnNoYXBlWzFdLTIpOnRoaXMuX2ZpZWxkWzJdLmhpKDAsMCkpLCJmaWVsZCJpbiB0fHwiY29vcmRzImluIHQpe3ZhciBpPShlLnNoYXBlWzBdKzIpKihlLnNoYXBlWzFdKzIpO2k+dGhpcy5fZmllbGRbMl0uZGF0YS5sZW5ndGgmJihzLmZyZWVGbG9hdCh0aGlzLl9maWVsZFsyXS5kYXRhKSx0aGlzLl9maWVsZFsyXS5kYXRhPXMubWFsbG9jRmxvYXQobi5uZXh0UG93MihpKSkpLHRoaXMuX2ZpZWxkWzJdPWYodGhpcy5fZmllbGRbMl0uZGF0YSxbZS5zaGFwZVswXSsyLGUuc2hhcGVbMV0rMl0pLHRoaXMucGFkRmllbGQodGhpcy5fZmllbGRbMl0sZSksdGhpcy5zaGFwZT1lLnNoYXBlLnNsaWNlKCk7Zm9yKHZhciBhPXRoaXMuc2hhcGUsbz0wO288MjsrK28pdGhpcy5fZmllbGRbMl0uc2l6ZT50aGlzLl9maWVsZFtvXS5kYXRhLmxlbmd0aCYmKHMuZnJlZUZsb2F0KHRoaXMuX2ZpZWxkW29dLmRhdGEpLHRoaXMuX2ZpZWxkW29dLmRhdGE9cy5tYWxsb2NGbG9hdCh0aGlzLl9maWVsZFsyXS5zaXplKSksdGhpcy5fZmllbGRbb109Zih0aGlzLl9maWVsZFtvXS5kYXRhLFthWzBdKzIsYVsxXSsyXSk7aWYodC5jb29yZHMpe3ZhciBsPXQuY29vcmRzO2lmKCFBcnJheS5pc0FycmF5KGwpfHwzIT09bC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC1zdXJmYWNlOiBpbnZhbGlkIGNvb3JkaW5hdGVzIGZvciB4L3kiKTtmb3Iobz0wO288MjsrK28pe3ZhciBjPWxbb107Zm9yKHY9MDt2PDI7Kyt2KWlmKGMuc2hhcGVbdl0hPT1hW3ZdKXRocm93IG5ldyBFcnJvcigiZ2wtc3VyZmFjZTogY29vcmRzIGhhdmUgaW5jb3JyZWN0IHNoYXBlIik7dGhpcy5wYWRGaWVsZCh0aGlzLl9maWVsZFtvXSxjKX19ZWxzZSBpZih0LnRpY2tzKXt2YXIgdT10LnRpY2tzO2lmKCFBcnJheS5pc0FycmF5KHUpfHwyIT09dS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC1zdXJmYWNlOiBpbnZhbGlkIHRpY2tzIik7Zm9yKG89MDtvPDI7KytvKXt2YXIgcD11W29dO2lmKChBcnJheS5pc0FycmF5KHApfHxwLmxlbmd0aCkmJihwPWYocCkpLHAuc2hhcGVbMF0hPT1hW29dKXRocm93IG5ldyBFcnJvcigiZ2wtc3VyZmFjZTogaW52YWxpZCB0aWNrIGxlbmd0aCIpO3ZhciBkPWYocC5kYXRhLGEpO2Quc3RyaWRlW29dPXAuc3RyaWRlWzBdLGQuc3RyaWRlWzFeb109MCx0aGlzLnBhZEZpZWxkKHRoaXMuX2ZpZWxkW29dLGQpfX1lbHNle2ZvcihvPTA7bzwyOysrbyl7dmFyIG09WzAsMF07bVtvXT0xLHRoaXMuX2ZpZWxkW29dPWYodGhpcy5fZmllbGRbb10uZGF0YSxbYVswXSsyLGFbMV0rMl0sbSwwKX10aGlzLl9maWVsZFswXS5zZXQoMCwwLDApO2Zvcih2YXIgdj0wO3Y8YVswXTsrK3YpdGhpcy5fZmllbGRbMF0uc2V0KHYrMSwwLHYpO2Zvcih0aGlzLl9maWVsZFswXS5zZXQoYVswXSsxLDAsYVswXS0xKSx0aGlzLl9maWVsZFsxXS5zZXQoMCwwLDApLHY9MDt2PGFbMV07Kyt2KXRoaXMuX2ZpZWxkWzFdLnNldCgwLHYrMSx2KTt0aGlzLl9maWVsZFsxXS5zZXQoMCxhWzFdKzEsYVsxXS0xKX12YXIgeT10aGlzLl9maWVsZCx4PWYocy5tYWxsb2NGbG9hdCgzKnlbMl0uc2l6ZSoyKSxbMyxhWzBdKzIsYVsxXSsyLDJdKTtmb3Iobz0wO288MzsrK28pZyh4LnBpY2sobykseVtvXSwibWlycm9yIik7dmFyIGI9ZihzLm1hbGxvY0Zsb2F0KDMqeVsyXS5zaXplKSxbYVswXSsyLGFbMV0rMiwzXSk7Zm9yKG89MDtvPGFbMF0rMjsrK28pZm9yKHY9MDt2PGFbMV0rMjsrK3Ype3ZhciBfPXguZ2V0KDAsbyx2LDApLHc9eC5nZXQoMCxvLHYsMSksaz14LmdldCgxLG8sdiwwKSxBPXguZ2V0KDEsbyx2LDEpLE09eC5nZXQoMixvLHYsMCksUz14LmdldCgyLG8sdiwxKSxFPWsqUy1BKk0sTD1NKnctUypfLEM9XypBLXcqayxQPU1hdGguc3FydChFKkUrTCpMK0MqQyk7UDwxZS04PyhQPU1hdGgubWF4KE1hdGguYWJzKEUpLE1hdGguYWJzKEwpLE1hdGguYWJzKEMpKSk8MWUtOD8oQz0xLEw9RT0wLFA9MSk6UD0xL1A6UD0xL01hdGguc3FydChQKSxiLnNldChvLHYsMCxFKlApLGIuc2V0KG8sdiwxLEwqUCksYi5zZXQobyx2LDIsQypQKX1zLmZyZWUoeC5kYXRhKTt2YXIgST1bMS8wLDEvMCwxLzBdLE89Wy0xLzAsLTEvMCwtMS8wXSx6PTEvMCxEPS0xLzAsRj0oYVswXS0xKSooYVsxXS0xKSo2LE49cy5tYWxsb2NGbG9hdChuLm5leHRQb3cyKDEwKkYpKSxqPTAsVT0wO2ZvcihvPTA7bzxhWzBdLTE7KytvKXQ6Zm9yKHY9MDt2PGFbMV0tMTsrK3Ype2Zvcih2YXIgVj0wO1Y8MjsrK1YpZm9yKHZhciBIPTA7SDwyOysrSClmb3IodmFyIHE9MDtxPDM7KytxKXt2YXIgRz10aGlzLl9maWVsZFtxXS5nZXQoMStvK1YsMSt2K0gpO2lmKGlzTmFOKEcpfHwhaXNGaW5pdGUoRykpY29udGludWUgdH1mb3IocT0wO3E8NjsrK3Epe3ZhciBZPW8rVFtxXVswXSxXPXYrVFtxXVsxXSxYPXRoaXMuX2ZpZWxkWzBdLmdldChZKzEsVysxKSxaPXRoaXMuX2ZpZWxkWzFdLmdldChZKzEsVysxKTtHPXRoaXMuX2ZpZWxkWzJdLmdldChZKzEsVysxKSxFPWIuZ2V0KFkrMSxXKzEsMCksTD1iLmdldChZKzEsVysxLDEpLEM9Yi5nZXQoWSsxLFcrMSwyKSx0LmludGVuc2l0eSYmKEo9dC5pbnRlbnNpdHkuZ2V0KFksVykpO3ZhciBKPXQuaW50ZW5zaXR5P3QuaW50ZW5zaXR5LmdldChZLFcpOkcrdGhpcy5vYmplY3RPZmZzZXRbMl07TltqKytdPVksTltqKytdPVcsTltqKytdPVgsTltqKytdPVosTltqKytdPUcsTltqKytdPTAsTltqKytdPUosTltqKytdPUUsTltqKytdPUwsTltqKytdPUMsSVswXT1NYXRoLm1pbihJWzBdLFgrdGhpcy5vYmplY3RPZmZzZXRbMF0pLElbMV09TWF0aC5taW4oSVsxXSxaK3RoaXMub2JqZWN0T2Zmc2V0WzFdKSxJWzJdPU1hdGgubWluKElbMl0sRyt0aGlzLm9iamVjdE9mZnNldFsyXSksej1NYXRoLm1pbih6LEopLE9bMF09TWF0aC5tYXgoT1swXSxYK3RoaXMub2JqZWN0T2Zmc2V0WzBdKSxPWzFdPU1hdGgubWF4KE9bMV0sWit0aGlzLm9iamVjdE9mZnNldFsxXSksT1syXT1NYXRoLm1heChPWzJdLEcrdGhpcy5vYmplY3RPZmZzZXRbMl0pLEQ9TWF0aC5tYXgoRCxKKSxVKz0xfX1mb3IodC5pbnRlbnNpdHlCb3VuZHMmJih6PSt0LmludGVuc2l0eUJvdW5kc1swXSxEPSt0LmludGVuc2l0eUJvdW5kc1sxXSksbz02O288ajtvKz0xMClOW29dPShOW29dLXopLyhELXopO3RoaXMuX3ZlcnRleENvdW50PVUsdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlci51cGRhdGUoTi5zdWJhcnJheSgwLGopKSxzLmZyZWVGbG9hdChOKSxzLmZyZWUoYi5kYXRhKSx0aGlzLmJvdW5kcz1bSSxPXSx0aGlzLmludGVuc2l0eT10LmludGVuc2l0eXx8dGhpcy5fZmllbGRbMl0sdGhpcy5pbnRlbnNpdHlCb3VuZHNbMF09PT16JiZ0aGlzLmludGVuc2l0eUJvdW5kc1sxXT09PUR8fChyPSEwKSx0aGlzLmludGVuc2l0eUJvdW5kcz1beixEXX1pZigibGV2ZWxzImluIHQpe3ZhciBLPXQubGV2ZWxzO2ZvcihLPUFycmF5LmlzQXJyYXkoS1swXSk/Sy5zbGljZSgpOltbXSxbXSxLXSxvPTA7bzwzOysrbylLW29dPUtbb10uc2xpY2UoKSxLW29dLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKTtmb3Iobz0wO288MzsrK28pZm9yKHY9MDt2PEtbb10ubGVuZ3RoOysrdilLW29dW3ZdLT10aGlzLm9iamVjdE9mZnNldFtvXTt0OmZvcihvPTA7bzwzOysrbyl7aWYoS1tvXS5sZW5ndGghPT10aGlzLmNvbnRvdXJMZXZlbHNbb10ubGVuZ3RoKXtyPSEwO2JyZWFrfWZvcih2PTA7djxLW29dLmxlbmd0aDsrK3YpaWYoS1tvXVt2XSE9PXRoaXMuY29udG91ckxldmVsc1tvXVt2XSl7cj0hMDticmVhayB0fX10aGlzLmNvbnRvdXJMZXZlbHM9S31pZihyKXt5PXRoaXMuX2ZpZWxkLGE9dGhpcy5zaGFwZTtmb3IodmFyIFE9W10sJD0wOyQ8MzsrKyQpe3ZhciB0dD10aGlzLmNvbnRvdXJMZXZlbHNbJF0sZXQ9W10scnQ9W10sbnQ9WzAsMCwwXTtmb3Iobz0wO288dHQubGVuZ3RoOysrbyl7dmFyIGl0PWgodGhpcy5fZmllbGRbJF0sdHRbb10pO2V0LnB1c2goUS5sZW5ndGgvNXwwKSxVPTA7dDpmb3Iodj0wO3Y8aXQuY2VsbHMubGVuZ3RoOysrdil7dmFyIGF0PWl0LmNlbGxzW3ZdO2ZvcihxPTA7cTwyOysrcSl7dmFyIG90PWl0LnBvc2l0aW9uc1thdFtxXV0sc3Q9b3RbMF0sbHQ9MHxNYXRoLmZsb29yKHN0KSxjdD1zdC1sdCx1dD1vdFsxXSxmdD0wfE1hdGguZmxvb3IodXQpLGh0PXV0LWZ0LHB0PSExO2U6Zm9yKHZhciBkdD0wO2R0PDM7KytkdCl7bnRbZHRdPTA7dmFyIG10PSgkK2R0KzEpJTM7Zm9yKFY9MDtWPDI7KytWKXt2YXIgZ3Q9Vj9jdDoxLWN0O2ZvcihZPTB8TWF0aC5taW4oTWF0aC5tYXgobHQrViwwKSxhWzBdKSxIPTA7SDwyOysrSCl7dmFyIHZ0PUg/aHQ6MS1odDtpZihXPTB8TWF0aC5taW4oTWF0aC5tYXgoZnQrSCwwKSxhWzFdKSxHPWR0PDI/dGhpcy5fZmllbGRbbXRdLmdldChZLFcpOih0aGlzLmludGVuc2l0eS5nZXQoWSxXKS10aGlzLmludGVuc2l0eUJvdW5kc1swXSkvKHRoaXMuaW50ZW5zaXR5Qm91bmRzWzFdLXRoaXMuaW50ZW5zaXR5Qm91bmRzWzBdKSwhaXNGaW5pdGUoRyl8fGlzTmFOKEcpKXtwdD0hMDticmVhayBlfXZhciB5dD1ndCp2dDtudFtkdF0rPXl0Kkd9fX1pZihwdCl7aWYocT4wKXtmb3IodmFyIHh0PTA7eHQ8NTsrK3h0KVEucG9wKCk7VS09MX1jb250aW51ZSB0fVEucHVzaChudFswXSxudFsxXSxvdFswXSxvdFsxXSxudFsyXSksVSs9MX19cnQucHVzaChVKX10aGlzLl9jb250b3VyT2Zmc2V0c1skXT1ldCx0aGlzLl9jb250b3VyQ291bnRzWyRdPXJ0fXZhciBidD1zLm1hbGxvY0Zsb2F0KFEubGVuZ3RoKTtmb3Iobz0wO288US5sZW5ndGg7KytvKWJ0W29dPVFbb107dGhpcy5fY29udG91ckJ1ZmZlci51cGRhdGUoYnQpLHMuZnJlZUZsb2F0KGJ0KX19LFMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX3NoYWRlci5kaXNwb3NlKCksdGhpcy5fdmFvLmRpc3Bvc2UoKSx0aGlzLl9jb29yZGluYXRlQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLl9jb2xvck1hcC5kaXNwb3NlKCksdGhpcy5fY29udG91ckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5fY29udG91clZBTy5kaXNwb3NlKCksdGhpcy5fY29udG91clNoYWRlci5kaXNwb3NlKCksdGhpcy5fY29udG91clBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMuX2R5bmFtaWNCdWZmZXIuZGlzcG9zZSgpLHRoaXMuX2R5bmFtaWNWQU8uZGlzcG9zZSgpO2Zvcih2YXIgdD0wO3Q8MzsrK3Qpcy5mcmVlRmxvYXQodGhpcy5fZmllbGRbdF0uZGF0YSl9LFMuaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYoIXQpcmV0dXJuIHRoaXMuX2R5bmFtaWNDb3VudHM9WzAsMCwwXSx0aGlzLmR5YW5hbWljTGV2ZWw9W05hTixOYU4sTmFOXSx2b2lkKHRoaXMuaGlnaGxpZ2h0TGV2ZWw9Wy0xLC0xLC0xXSk7Zm9yKGU9MDtlPDM7KytlKXRoaXMuZW5hYmxlSGlnaGxpZ2h0W2VdP3RoaXMuaGlnaGxpZ2h0TGV2ZWxbZV09dC5sZXZlbFtlXTp0aGlzLmhpZ2hsaWdodExldmVsW2VdPS0xO2ZvcihyPXRoaXMuc25hcFRvRGF0YT90LmRhdGFDb29yZGluYXRlOnQucG9zaXRpb24sZT0wO2U8MzsrK2UpcltlXS09dGhpcy5vYmplY3RPZmZzZXRbZV07aWYodGhpcy5lbmFibGVEeW5hbWljWzBdJiZyWzBdIT09dGhpcy5keW5hbWljTGV2ZWxbMF18fHRoaXMuZW5hYmxlRHluYW1pY1sxXSYmclsxXSE9PXRoaXMuZHluYW1pY0xldmVsWzFdfHx0aGlzLmVuYWJsZUR5bmFtaWNbMl0mJnJbMl0hPT10aGlzLmR5bmFtaWNMZXZlbFsyXSl7Zm9yKHZhciBuPTAsaT10aGlzLnNoYXBlLGE9cy5tYWxsb2NGbG9hdCgxMippWzBdKmlbMV0pLG89MDtvPDM7KytvKWlmKHRoaXMuZW5hYmxlRHluYW1pY1tvXSl7dGhpcy5keW5hbWljTGV2ZWxbb109cltvXTt2YXIgbD0obysxKSUzLGM9KG8rMiklMyx1PXRoaXMuX2ZpZWxkW29dLGY9dGhpcy5fZmllbGRbbF0scD10aGlzLl9maWVsZFtjXSxkPWgodSxyW29dKSxtPWQuY2VsbHMsZz1kLnBvc2l0aW9ucztmb3IodGhpcy5fZHluYW1pY09mZnNldHNbb109bixlPTA7ZTxtLmxlbmd0aDsrK2UpZm9yKHZhciB2PW1bZV0seT0wO3k8MjsrK3kpe3ZhciB4PWdbdlt5XV0sYj0reFswXSxfPTB8Yix3PTB8TWF0aC5taW4oXysxLGlbMF0pLFQ9Yi1fLGs9MS1ULEE9K3hbMV0sTT0wfEEsUz0wfE1hdGgubWluKE0rMSxpWzFdKSxFPUEtTSxMPTEtRSxDPWsqTCxQPWsqRSxJPVQqTCxPPVQqRSx6PUMqZi5nZXQoXyxNKStQKmYuZ2V0KF8sUykrSSpmLmdldCh3LE0pK08qZi5nZXQodyxTKSxEPUMqcC5nZXQoXyxNKStQKnAuZ2V0KF8sUykrSSpwLmdldCh3LE0pK08qcC5nZXQodyxTKTtpZihpc05hTih6KXx8aXNOYU4oRCkpe3kmJihuLT0xKTticmVha31hWzIqbiswXT16LGFbMipuKzFdPUQsbis9MX10aGlzLl9keW5hbWljQ291bnRzW29dPW4tdGhpcy5fZHluYW1pY09mZnNldHNbb119ZWxzZSB0aGlzLmR5bmFtaWNMZXZlbFtvXT1OYU4sdGhpcy5fZHluYW1pY0NvdW50c1tvXT0wO3RoaXMuX2R5bmFtaWNCdWZmZXIudXBkYXRlKGEuc3ViYXJyYXkoMCwyKm4pKSxzLmZyZWVGbG9hdChhKX19fSx7Ii4vbGliL3NoYWRlcnMiOjMzNSwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjEwMCwiYml0LXR3aWRkbGUiOjEwMSxjb2xvcm1hcDoxMzIsImdsLWJ1ZmZlciI6MjU3LCJnbC1tYXQ0L2ludmVydCI6Mjg3LCJnbC1tYXQ0L211bHRpcGx5IjoyODksImdsLXRleHR1cmUyZCI6MzM4LCJnbC12YW8iOjM0MyxuZGFycmF5OjQ2MiwibmRhcnJheS1ncmFkaWVudCI6NDU1LCJuZGFycmF5LW9wcyI6NDU3LCJuZGFycmF5LXBhY2siOjQ1OCwic3VyZmFjZS1uZXRzIjo1NjUsInR5cGVkYXJyYXktcG9vbCI6NTkwfV0sMzM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNzcy1mb250IiksaT10KCJwaWNrLWJ5LWFsaWFzIiksYT10KCJyZWdsIiksbz10KCJnbC11dGlsL2NvbnRleHQiKSxzPXQoImVzNi13ZWFrLW1hcCIpLGw9dCgiY29sb3Itbm9ybWFsaXplIiksYz10KCJmb250LWF0bGFzIiksdT10KCJ0eXBlZGFycmF5LXBvb2wiKSxmPXQoInBhcnNlLXJlY3QiKSxoPXQoImlzLXBsYWluLW9iaiIpLHA9dCgicGFyc2UtdW5pdCIpLGQ9dCgidG8tcHgiKSxtPXQoImRldGVjdC1rZXJuaW5nIiksZz10KCJvYmplY3QtYXNzaWduIiksdj10KCJmb250LW1lYXN1cmUiKSx5PXQoImZsYXR0ZW4tdmVydGV4LWRhdGEiKSx4PXQoImJpdC10d2lkZGxlIikubmV4dFBvdzIsYj1uZXcgcyxfPSExO2lmKGRvY3VtZW50LmJvZHkpe3ZhciB3PWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpO3cuc3R5bGUuZm9udD0iaXRhbGljIHNtYWxsLWNhcHMgYm9sZCBjb25kZW5zZWQgMTZweC8yIGN1cnNpdmUiLGdldENvbXB1dGVkU3R5bGUodykuZm9udFN0cmV0Y2gmJihfPSEwKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHcpfXZhciBUPWZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5fZ2wmJnQucHJvcCYmdC50ZXh0dXJlJiZ0LmJ1ZmZlcn0odCk/dGhpcy5nbD1vKHQpOih0PXtyZWdsOnR9LHRoaXMuZ2w9dC5yZWdsLl9nbCksdGhpcy5zaGFkZXI9Yi5nZXQodGhpcy5nbCksdGhpcy5zaGFkZXI/dGhpcy5yZWdsPXRoaXMuc2hhZGVyLnJlZ2w6dGhpcy5yZWdsPXQucmVnbHx8YSh7Z2w6dGhpcy5nbH0pLHRoaXMuY2hhckJ1ZmZlcj10aGlzLnJlZ2wuYnVmZmVyKHt0eXBlOiJ1aW50OCIsdXNhZ2U6InN0cmVhbSJ9KSx0aGlzLnNpemVCdWZmZXI9dGhpcy5yZWdsLmJ1ZmZlcih7dHlwZToiZmxvYXQiLHVzYWdlOiJzdHJlYW0ifSksdGhpcy5zaGFkZXJ8fCh0aGlzLnNoYWRlcj10aGlzLmNyZWF0ZVNoYWRlcigpLGIuc2V0KHRoaXMuZ2wsdGhpcy5zaGFkZXIpKSx0aGlzLmJhdGNoPVtdLHRoaXMuZm9udFNpemU9W10sdGhpcy5mb250PVtdLHRoaXMuZm9udEF0bGFzPVtdLHRoaXMuZHJhdz10aGlzLnNoYWRlci5kcmF3LmJpbmQodGhpcyksdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLnJlZ2wuX3JlZnJlc2goKSx0aGlzLmRyYXcodGhpcy5iYXRjaCl9LHRoaXMuY2FudmFzPXRoaXMuZ2wuY2FudmFzLHRoaXMudXBkYXRlKGgodCk/dDp7fSl9O1QucHJvdG90eXBlLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMucmVnbCxlPXQoe2JsZW5kOntlbmFibGU6ITAsY29sb3I6WzAsMCwwLDFdLGZ1bmM6e3NyY1JHQjoic3JjIGFscGhhIixkc3RSR0I6Im9uZSBtaW51cyBzcmMgYWxwaGEiLHNyY0FscGhhOiJvbmUgbWludXMgZHN0IGFscGhhIixkc3RBbHBoYToib25lIn19LHN0ZW5jaWw6e2VuYWJsZTohMX0sZGVwdGg6e2VuYWJsZTohMX0sY291bnQ6dC5wcm9wKCJjb3VudCIpLG9mZnNldDp0LnByb3AoIm9mZnNldCIpLGF0dHJpYnV0ZXM6e2NoYXJPZmZzZXQ6e29mZnNldDo0LHN0cmlkZTo4LGJ1ZmZlcjp0LnRoaXMoInNpemVCdWZmZXIiKX0sd2lkdGg6e29mZnNldDowLHN0cmlkZTo4LGJ1ZmZlcjp0LnRoaXMoInNpemVCdWZmZXIiKX0sY2hhcjp0LnRoaXMoImNoYXJCdWZmZXIiKSxwb3NpdGlvbjp0LnRoaXMoInBvc2l0aW9uIil9LHVuaWZvcm1zOnthdGxhc1NpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS5hdGxhcy53aWR0aCxlLmF0bGFzLmhlaWdodF19LGF0bGFzRGltOmZ1bmN0aW9uKHQsZSl7cmV0dXJuW2UuYXRsYXMuY29scyxlLmF0bGFzLnJvd3NdfSxhdGxhczpmdW5jdGlvbih0LGUpe3JldHVybiBlLmF0bGFzLnRleHR1cmV9LGNoYXJTdGVwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYXRsYXMuc3RlcH0sZW06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5hdGxhcy5lbX0sY29sb3I6dC5wcm9wKCJjb2xvciIpLG9wYWNpdHk6dC5wcm9wKCJvcGFjaXR5Iiksdmlld3BvcnQ6dC50aGlzKCJ2aWV3cG9ydEFycmF5Iiksc2NhbGU6dC50aGlzKCJzY2FsZSIpLGFsaWduOnQucHJvcCgiYWxpZ24iKSxiYXNlbGluZTp0LnByb3AoImJhc2VsaW5lIiksdHJhbnNsYXRlOnQudGhpcygidHJhbnNsYXRlIikscG9zaXRpb25PZmZzZXQ6dC5wcm9wKCJwb3NpdGlvbk9mZnNldCIpfSxwcmltaXRpdmU6InBvaW50cyIsdmlld3BvcnQ6dC50aGlzKCJ2aWV3cG9ydCIpLHZlcnQ6IlxuXHRcdFx0cHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXHRcdFx0YXR0cmlidXRlIGZsb2F0IHdpZHRoLCBjaGFyT2Zmc2V0LCBjaGFyO1xuXHRcdFx0YXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5cdFx0XHR1bmlmb3JtIGZsb2F0IGZvbnRTaXplLCBjaGFyU3RlcCwgZW0sIGFsaWduLCBiYXNlbGluZTtcblx0XHRcdHVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcblx0XHRcdHVuaWZvcm0gdmVjNCBjb2xvcjtcblx0XHRcdHVuaWZvcm0gdmVjMiBhdGxhc1NpemUsIGF0bGFzRGltLCBzY2FsZSwgdHJhbnNsYXRlLCBwb3NpdGlvbk9mZnNldDtcblx0XHRcdHZhcnlpbmcgdmVjMiBjaGFyQ29vcmQsIGNoYXJJZDtcblx0XHRcdHZhcnlpbmcgZmxvYXQgY2hhcldpZHRoO1xuXHRcdFx0dmFyeWluZyB2ZWM0IGZvbnRDb2xvcjtcblx0XHRcdHZvaWQgbWFpbiAoKSB7XG5cdFx0XHRcdHZlYzIgb2Zmc2V0ID0gZmxvb3IoZW0gKiAodmVjMihhbGlnbiArIGNoYXJPZmZzZXQsIGJhc2VsaW5lKVxuXHRcdFx0XHRcdCsgdmVjMihwb3NpdGlvbk9mZnNldC54LCAtcG9zaXRpb25PZmZzZXQueSkpKVxuXHRcdFx0XHRcdC8gKHZpZXdwb3J0Lnp3ICogc2NhbGUueHkpO1xuXG5cdFx0XHRcdHZlYzIgcG9zaXRpb24gPSAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGU7XG5cdFx0XHRcdHBvc2l0aW9uICs9IG9mZnNldCAqIHNjYWxlO1xuXG5cdFx0XHRcdGNoYXJDb29yZCA9IHBvc2l0aW9uICogdmlld3BvcnQuencgKyB2aWV3cG9ydC54eTtcblxuXHRcdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24gKiAyLiAtIDEuLCAwLCAxKTtcblxuXHRcdFx0XHRnbF9Qb2ludFNpemUgPSBjaGFyU3RlcDtcblxuXHRcdFx0XHRjaGFySWQueCA9IG1vZChjaGFyLCBhdGxhc0RpbS54KTtcblx0XHRcdFx0Y2hhcklkLnkgPSBmbG9vcihjaGFyIC8gYXRsYXNEaW0ueCk7XG5cblx0XHRcdFx0Y2hhcldpZHRoID0gd2lkdGggKiBlbTtcblxuXHRcdFx0XHRmb250Q29sb3IgPSBjb2xvciAvIDI1NS47XG5cdFx0XHR9IixmcmFnOiJcblx0XHRcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcblx0XHRcdHVuaWZvcm0gZmxvYXQgZm9udFNpemUsIGNoYXJTdGVwLCBvcGFjaXR5O1xuXHRcdFx0dW5pZm9ybSB2ZWMyIGF0bGFzU2l6ZTtcblx0XHRcdHVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcblx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIGF0bGFzO1xuXHRcdFx0dmFyeWluZyB2ZWM0IGZvbnRDb2xvcjtcblx0XHRcdHZhcnlpbmcgdmVjMiBjaGFyQ29vcmQsIGNoYXJJZDtcblx0XHRcdHZhcnlpbmcgZmxvYXQgY2hhcldpZHRoO1xuXG5cdFx0XHRmbG9hdCBsaWdodG5lc3ModmVjNCBjb2xvcikge1xuXHRcdFx0XHRyZXR1cm4gY29sb3IuciAqIDAuMjk5ICsgY29sb3IuZyAqIDAuNTg3ICsgY29sb3IuYiAqIDAuMTE0O1xuXHRcdFx0fVxuXG5cdFx0XHR2b2lkIG1haW4gKCkge1xuXHRcdFx0XHR2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC0gY2hhckNvb3JkICsgY2hhclN0ZXAgKiAuNTtcblx0XHRcdFx0ZmxvYXQgaGFsZkNoYXJTdGVwID0gZmxvb3IoY2hhclN0ZXAgKiAuNSArIC41KTtcblxuXHRcdFx0XHQvLyBpbnZlcnQgeSBhbmQgc2hpZnQgYnkgMXB4IChGRiBleHBlY2lhbGx5IG5lZWRzIHRoYXQpXG5cdFx0XHRcdHV2LnkgPSBjaGFyU3RlcCAtIHV2Lnk7XG5cblx0XHRcdFx0Ly8gaWdub3JlIHBvaW50cyBvdXRzaWRlIG9mIGNoYXJhY3RlciBib3VuZGluZyBib3hcblx0XHRcdFx0ZmxvYXQgaGFsZkNoYXJXaWR0aCA9IGNlaWwoY2hhcldpZHRoICogLjUpO1xuXHRcdFx0XHRpZiAoZmxvb3IodXYueCkgPiBoYWxmQ2hhclN0ZXAgKyBoYWxmQ2hhcldpZHRoIHx8XG5cdFx0XHRcdFx0Zmxvb3IodXYueCkgPCBoYWxmQ2hhclN0ZXAgLSBoYWxmQ2hhcldpZHRoKSByZXR1cm47XG5cblx0XHRcdFx0dXYgKz0gY2hhcklkICogY2hhclN0ZXA7XG5cdFx0XHRcdHV2ID0gdXYgLyBhdGxhc1NpemU7XG5cblx0XHRcdFx0dmVjNCBjb2xvciA9IGZvbnRDb2xvcjtcblx0XHRcdFx0dmVjNCBtYXNrID0gdGV4dHVyZTJEKGF0bGFzLCB1dik7XG5cblx0XHRcdFx0ZmxvYXQgbWFza1kgPSBsaWdodG5lc3MobWFzayk7XG5cdFx0XHRcdC8vIGZsb2F0IGNvbG9yWSA9IGxpZ2h0bmVzcyhjb2xvcik7XG5cdFx0XHRcdGNvbG9yLmEgKj0gbWFza1k7XG5cdFx0XHRcdGNvbG9yLmEgKj0gb3BhY2l0eTtcblxuXHRcdFx0XHQvLyBjb2xvci5hICs9IC4xO1xuXG5cdFx0XHRcdC8vIGFudGlhbGlhc2luZywgc2VlIHlpcSBjb2xvciBzcGFjZSB5LWNoYW5uZWwgZm9ybXVsYVxuXHRcdFx0XHQvLyBjb2xvci5yZ2IgKz0gKDEuIC0gY29sb3IucmdiKSAqICgxLiAtIG1hc2sucmdiKTtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSBjb2xvcjtcblx0XHRcdH0ifSk7cmV0dXJue3JlZ2w6dCxkcmF3OmUsYXRsYXM6e319fSxULnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigic3RyaW5nIj09dHlwZW9mIHQpdD17dGV4dDp0fTtlbHNlIGlmKCF0KXJldHVybjtudWxsIT0odD1pKHQse3Bvc2l0aW9uOiJwb3NpdGlvbiBwb3NpdGlvbnMgY29vcmQgY29vcmRzIGNvb3JkaW5hdGVzIixmb250OiJmb250IGZvbnRGYWNlIGZvbnRmYWNlIHR5cGVmYWNlIGNzc0ZvbnQgY3NzLWZvbnQgZmFtaWx5IGZvbnRGYW1pbHkiLGZvbnRTaXplOiJmb250U2l6ZSBmb250c2l6ZSBzaXplIGZvbnQtc2l6ZSIsdGV4dDoidGV4dCB0ZXh0cyBjaGFycyBjaGFyYWN0ZXJzIHZhbHVlIHZhbHVlcyBzeW1ib2xzIixhbGlnbjoiYWxpZ24gYWxpZ25tZW50IHRleHRBbGlnbiB0ZXh0YmFzZWxpbmUiLGJhc2VsaW5lOiJiYXNlbGluZSB0ZXh0QmFzZWxpbmUgdGV4dGJhc2VsaW5lIixkaXJlY3Rpb246ImRpciBkaXJlY3Rpb24gdGV4dERpcmVjdGlvbiIsY29sb3I6ImNvbG9yIGNvbG91ciBmaWxsIGZpbGwtY29sb3IgZmlsbENvbG9yIHRleHRDb2xvciB0ZXh0Y29sb3IiLGtlcm5pbmc6Imtlcm5pbmcga2VybiIscmFuZ2U6InJhbmdlIGRhdGFCb3giLHZpZXdwb3J0OiJ2cCB2aWV3cG9ydCB2aWV3Qm94IHZpZXdib3ggdmlld1BvcnQiLG9wYWNpdHk6Im9wYWNpdHkgYWxwaGEgdHJhbnNwYXJlbmN5IHZpc2libGUgdmlzaWJpbGl0eSBvcGFxdWUiLG9mZnNldDoib2Zmc2V0IHBvc2l0aW9uT2Zmc2V0IHBhZGRpbmcgc2hpZnQgaW5kZW50IGluZGVudGF0aW9uIn0sITApKS5vcGFjaXR5JiYoQXJyYXkuaXNBcnJheSh0Lm9wYWNpdHkpP3RoaXMub3BhY2l0eT10Lm9wYWNpdHkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KX0pKTp0aGlzLm9wYWNpdHk9cGFyc2VGbG9hdCh0Lm9wYWNpdHkpKSxudWxsIT10LnZpZXdwb3J0JiYodGhpcy52aWV3cG9ydD1mKHQudmlld3BvcnQpLHRoaXMudmlld3BvcnRBcnJheT1bdGhpcy52aWV3cG9ydC54LHRoaXMudmlld3BvcnQueSx0aGlzLnZpZXdwb3J0LndpZHRoLHRoaXMudmlld3BvcnQuaGVpZ2h0XSksbnVsbD09dGhpcy52aWV3cG9ydCYmKHRoaXMudmlld3BvcnQ9e3g6MCx5OjAsd2lkdGg6dGhpcy5nbC5kcmF3aW5nQnVmZmVyV2lkdGgsaGVpZ2h0OnRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodH0sdGhpcy52aWV3cG9ydEFycmF5PVt0aGlzLnZpZXdwb3J0LngsdGhpcy52aWV3cG9ydC55LHRoaXMudmlld3BvcnQud2lkdGgsdGhpcy52aWV3cG9ydC5oZWlnaHRdKSxudWxsIT10Lmtlcm5pbmcmJih0aGlzLmtlcm5pbmc9dC5rZXJuaW5nKSxudWxsIT10Lm9mZnNldCYmKCJudW1iZXIiPT10eXBlb2YgdC5vZmZzZXQmJih0Lm9mZnNldD1bdC5vZmZzZXQsMF0pLHRoaXMucG9zaXRpb25PZmZzZXQ9eSh0Lm9mZnNldCkpLHQuZGlyZWN0aW9uJiYodGhpcy5kaXJlY3Rpb249dC5kaXJlY3Rpb24pLHQucmFuZ2UmJih0aGlzLnJhbmdlPXQucmFuZ2UsdGhpcy5zY2FsZT1bMS8odC5yYW5nZVsyXS10LnJhbmdlWzBdKSwxLyh0LnJhbmdlWzNdLXQucmFuZ2VbMV0pXSx0aGlzLnRyYW5zbGF0ZT1bLXQucmFuZ2VbMF0sLXQucmFuZ2VbMV1dKSx0LnNjYWxlJiYodGhpcy5zY2FsZT10LnNjYWxlKSx0LnRyYW5zbGF0ZSYmKHRoaXMudHJhbnNsYXRlPXQudHJhbnNsYXRlKSx0aGlzLnNjYWxlfHwodGhpcy5zY2FsZT1bMS90aGlzLnZpZXdwb3J0LndpZHRoLDEvdGhpcy52aWV3cG9ydC5oZWlnaHRdKSx0aGlzLnRyYW5zbGF0ZXx8KHRoaXMudHJhbnNsYXRlPVswLDBdKSx0aGlzLmZvbnQubGVuZ3RofHx0LmZvbnR8fCh0LmZvbnQ9VC5iYXNlRm9udFNpemUrInB4IHNhbnMtc2VyaWYiKTt2YXIgcixhPSExLG89ITE7aWYodC5mb250JiYoQXJyYXkuaXNBcnJheSh0LmZvbnQpP3QuZm9udDpbdC5mb250XSkuZm9yRWFjaCgoZnVuY3Rpb24odCxyKXtpZigic3RyaW5nIj09dHlwZW9mIHQpdHJ5e3Q9bi5wYXJzZSh0KX1jYXRjaChlKXt0PW4ucGFyc2UoVC5iYXNlRm9udFNpemUrInB4ICIrdCl9ZWxzZSB0PW4ucGFyc2Uobi5zdHJpbmdpZnkodCkpO3ZhciBpPW4uc3RyaW5naWZ5KHtzaXplOlQuYmFzZUZvbnRTaXplLGZhbWlseTp0LmZhbWlseSxzdHJldGNoOl8/dC5zdHJldGNoOnZvaWQgMCx2YXJpYW50OnQudmFyaWFudCx3ZWlnaHQ6dC53ZWlnaHQsc3R5bGU6dC5zdHlsZX0pLHM9cCh0LnNpemUpLGw9TWF0aC5yb3VuZChzWzBdKmQoc1sxXSkpO2lmKGwhPT1lLmZvbnRTaXplW3JdJiYobz0hMCxlLmZvbnRTaXplW3JdPWwpLCEoZS5mb250W3JdJiZpPT1lLmZvbnRbcl0uYmFzZVN0cmluZ3x8KGE9ITAsZS5mb250W3JdPVQuZm9udHNbaV0sZS5mb250W3JdKSkpe3ZhciBjPXQuZmFtaWx5LmpvaW4oIiwgIiksdT1bdC5zdHlsZV07dC5zdHlsZSE9dC52YXJpYW50JiZ1LnB1c2godC52YXJpYW50KSx0LnZhcmlhbnQhPXQud2VpZ2h0JiZ1LnB1c2godC53ZWlnaHQpLF8mJnQud2VpZ2h0IT10LnN0cmV0Y2gmJnUucHVzaCh0LnN0cmV0Y2gpLGUuZm9udFtyXT17YmFzZVN0cmluZzppLGZhbWlseTpjLHdlaWdodDp0LndlaWdodCxzdHJldGNoOnQuc3RyZXRjaCxzdHlsZTp0LnN0eWxlLHZhcmlhbnQ6dC52YXJpYW50LHdpZHRoOnt9LGtlcm5pbmc6e30sbWV0cmljczp2KGMse29yaWdpbjoidG9wIixmb250U2l6ZTpULmJhc2VGb250U2l6ZSxmb250U3R5bGU6dS5qb2luKCIgIil9KX0sVC5mb250c1tpXT1lLmZvbnRbcl19fSkpLChhfHxvKSYmdGhpcy5mb250LmZvckVhY2goKGZ1bmN0aW9uKHIsaSl7dmFyIGE9bi5zdHJpbmdpZnkoe3NpemU6ZS5mb250U2l6ZVtpXSxmYW1pbHk6ci5mYW1pbHksc3RyZXRjaDpfP3Iuc3RyZXRjaDp2b2lkIDAsdmFyaWFudDpyLnZhcmlhbnQsd2VpZ2h0OnIud2VpZ2h0LHN0eWxlOnIuc3R5bGV9KTtpZihlLmZvbnRBdGxhc1tpXT1lLnNoYWRlci5hdGxhc1thXSwhZS5mb250QXRsYXNbaV0pe3ZhciBvPXIubWV0cmljcztlLnNoYWRlci5hdGxhc1thXT1lLmZvbnRBdGxhc1tpXT17Zm9udFN0cmluZzphLHN0ZXA6MipNYXRoLmNlaWwoZS5mb250U2l6ZVtpXSpvLmJvdHRvbSouNSksZW06ZS5mb250U2l6ZVtpXSxjb2xzOjAscm93czowLGhlaWdodDowLHdpZHRoOjAsY2hhcnM6W10saWRzOnt9LHRleHR1cmU6ZS5yZWdsLnRleHR1cmUoKX19bnVsbD09dC50ZXh0JiYodC50ZXh0PWUudGV4dCl9KSksInN0cmluZyI9PXR5cGVvZiB0LnRleHQmJnQucG9zaXRpb24mJnQucG9zaXRpb24ubGVuZ3RoPjIpe2Zvcih2YXIgcz1BcnJheSguNSp0LnBvc2l0aW9uLmxlbmd0aCksaD0wO2g8cy5sZW5ndGg7aCsrKXNbaF09dC50ZXh0O3QudGV4dD1zfWlmKG51bGwhPXQudGV4dHx8YSl7aWYodGhpcy50ZXh0T2Zmc2V0cz1bMF0sQXJyYXkuaXNBcnJheSh0LnRleHQpKXt0aGlzLmNvdW50PXQudGV4dFswXS5sZW5ndGgsdGhpcy5jb3VudHM9W3RoaXMuY291bnRdO2Zvcih2YXIgYj0xO2I8dC50ZXh0Lmxlbmd0aDtiKyspdGhpcy50ZXh0T2Zmc2V0c1tiXT10aGlzLnRleHRPZmZzZXRzW2ItMV0rdC50ZXh0W2ItMV0ubGVuZ3RoLHRoaXMuY291bnQrPXQudGV4dFtiXS5sZW5ndGgsdGhpcy5jb3VudHMucHVzaCh0LnRleHRbYl0ubGVuZ3RoKTt0aGlzLnRleHQ9dC50ZXh0LmpvaW4oIiIpfWVsc2UgdGhpcy50ZXh0PXQudGV4dCx0aGlzLmNvdW50PXRoaXMudGV4dC5sZW5ndGgsdGhpcy5jb3VudHM9W3RoaXMuY291bnRdO3I9W10sdGhpcy5mb250LmZvckVhY2goKGZ1bmN0aW9uKHQsbil7VC5hdGxhc0NvbnRleHQuZm9udD10LmJhc2VTdHJpbmc7Zm9yKHZhciBpPWUuZm9udEF0bGFzW25dLGE9MDthPGUudGV4dC5sZW5ndGg7YSsrKXt2YXIgbz1lLnRleHQuY2hhckF0KGEpO2lmKG51bGw9PWkuaWRzW29dJiYoaS5pZHNbb109aS5jaGFycy5sZW5ndGgsaS5jaGFycy5wdXNoKG8pLHIucHVzaChvKSksbnVsbD09dC53aWR0aFtvXSYmKHQud2lkdGhbb109VC5hdGxhc0NvbnRleHQubWVhc3VyZVRleHQobykud2lkdGgvVC5iYXNlRm9udFNpemUsZS5rZXJuaW5nKSl7dmFyIHM9W107Zm9yKHZhciBsIGluIHQud2lkdGgpcy5wdXNoKGwrbyxvK2wpO2codC5rZXJuaW5nLG0odC5mYW1pbHkse3BhaXJzOnN9KSl9fX0pKX1pZih0LnBvc2l0aW9uKWlmKHQucG9zaXRpb24ubGVuZ3RoPjIpe2Zvcih2YXIgdz0hdC5wb3NpdGlvblswXS5sZW5ndGgsaz11Lm1hbGxvY0Zsb2F0KDIqdGhpcy5jb3VudCksQT0wLE09MDtBPHRoaXMuY291bnRzLmxlbmd0aDtBKyspe3ZhciBTPXRoaXMuY291bnRzW0FdO2lmKHcpZm9yKHZhciBFPTA7RTxTO0UrKylrW00rK109dC5wb3NpdGlvblsyKkFdLGtbTSsrXT10LnBvc2l0aW9uWzIqQSsxXTtlbHNlIGZvcih2YXIgTD0wO0w8UztMKyspa1tNKytdPXQucG9zaXRpb25bQV1bMF0sa1tNKytdPXQucG9zaXRpb25bQV1bMV19dGhpcy5wb3NpdGlvbi5jYWxsP3RoaXMucG9zaXRpb24oe3R5cGU6ImZsb2F0IixkYXRhOmt9KTp0aGlzLnBvc2l0aW9uPXRoaXMucmVnbC5idWZmZXIoe3R5cGU6ImZsb2F0IixkYXRhOmt9KSx1LmZyZWVGbG9hdChrKX1lbHNlIHRoaXMucG9zaXRpb24uZGVzdHJveSYmdGhpcy5wb3NpdGlvbi5kZXN0cm95KCksdGhpcy5wb3NpdGlvbj17Y29uc3RhbnQ6dC5wb3NpdGlvbn07aWYodC50ZXh0fHxhKXt2YXIgQz11Lm1hbGxvY1VpbnQ4KHRoaXMuY291bnQpLFA9dS5tYWxsb2NGbG9hdCgyKnRoaXMuY291bnQpO3RoaXMudGV4dFdpZHRoPVtdO2Zvcih2YXIgST0wLE89MDtJPHRoaXMuY291bnRzLmxlbmd0aDtJKyspe2Zvcih2YXIgej10aGlzLmNvdW50c1tJXSxEPXRoaXMuZm9udFtJXXx8dGhpcy5mb250WzBdLFI9dGhpcy5mb250QXRsYXNbSV18fHRoaXMuZm9udEF0bGFzWzBdLEY9MDtGPHo7RisrKXt2YXIgQj10aGlzLnRleHQuY2hhckF0KE8pLE49dGhpcy50ZXh0LmNoYXJBdChPLTEpO2lmKENbT109Ui5pZHNbQl0sUFsyKk9dPUQud2lkdGhbQl0sRil7dmFyIGo9UFsyKk8tMl0sVT1QWzIqT10sVj1QWzIqTy0xXSsuNSpqKy41KlU7aWYodGhpcy5rZXJuaW5nKXt2YXIgSD1ELmtlcm5pbmdbTitCXTtIJiYoVis9LjAwMSpIKX1QWzIqTysxXT1WfWVsc2UgUFsyKk8rMV09LjUqUFsyKk9dO08rK310aGlzLnRleHRXaWR0aC5wdXNoKFAubGVuZ3RoPy41KlBbMipPLTJdK1BbMipPLTFdOjApfXQuYWxpZ258fCh0LmFsaWduPXRoaXMuYWxpZ24pLHRoaXMuY2hhckJ1ZmZlcih7ZGF0YTpDLHR5cGU6InVpbnQ4Iix1c2FnZToic3RyZWFtIn0pLHRoaXMuc2l6ZUJ1ZmZlcih7ZGF0YTpQLHR5cGU6ImZsb2F0Iix1c2FnZToic3RyZWFtIn0pLHUuZnJlZVVpbnQ4KEMpLHUuZnJlZUZsb2F0KFApLHIubGVuZ3RoJiZ0aGlzLmZvbnQuZm9yRWFjaCgoZnVuY3Rpb24odCxyKXt2YXIgbj1lLmZvbnRBdGxhc1tyXSxpPW4uc3RlcCxhPU1hdGguZmxvb3IoVC5tYXhBdGxhc1NpemUvaSksbz1NYXRoLm1pbihhLG4uY2hhcnMubGVuZ3RoKSxzPU1hdGguY2VpbChuLmNoYXJzLmxlbmd0aC9vKSxsPXgobyppKSx1PXgocyppKTtuLndpZHRoPWwsbi5oZWlnaHQ9dSxuLnJvd3M9cyxuLmNvbHM9byxuLmVtJiZuLnRleHR1cmUoe2RhdGE6Yyh7Y2FudmFzOlQuYXRsYXNDYW52YXMsZm9udDpuLmZvbnRTdHJpbmcsY2hhcnM6bi5jaGFycyxzaGFwZTpbbCx1XSxzdGVwOltpLGldfSl9KX0pKX1pZih0LmFsaWduJiYodGhpcy5hbGlnbj10LmFsaWduLHRoaXMuYWxpZ25PZmZzZXQ9dGhpcy50ZXh0V2lkdGgubWFwKChmdW5jdGlvbih0LHIpe3ZhciBuPUFycmF5LmlzQXJyYXkoZS5hbGlnbik/ZS5hbGlnbi5sZW5ndGg+MT9lLmFsaWduW3JdOmUuYWxpZ25bMF06ZS5hbGlnbjtpZigibnVtYmVyIj09dHlwZW9mIG4pcmV0dXJuIG47c3dpdGNoKG4pe2Nhc2UicmlnaHQiOmNhc2UiZW5kIjpyZXR1cm4tdDtjYXNlImNlbnRlciI6Y2FzZSJjZW50cmUiOmNhc2UibWlkZGxlIjpyZXR1cm4uNSotdH1yZXR1cm4gMH0pKSksbnVsbD09dGhpcy5iYXNlbGluZSYmbnVsbD09dC5iYXNlbGluZSYmKHQuYmFzZWxpbmU9MCksbnVsbCE9dC5iYXNlbGluZSYmKHRoaXMuYmFzZWxpbmU9dC5iYXNlbGluZSxBcnJheS5pc0FycmF5KHRoaXMuYmFzZWxpbmUpfHwodGhpcy5iYXNlbGluZT1bdGhpcy5iYXNlbGluZV0pLHRoaXMuYmFzZWxpbmVPZmZzZXQ9dGhpcy5iYXNlbGluZS5tYXAoKGZ1bmN0aW9uKHQscil7dmFyIG49KGUuZm9udFtyXXx8ZS5mb250WzBdKS5tZXRyaWNzLGk9MDtyZXR1cm4gaSs9LjUqbi5ib3R0b20saSs9Im51bWJlciI9PXR5cGVvZiB0P3Qtbi5iYXNlbGluZTotblt0XSxpKj0tMX0pKSksbnVsbCE9dC5jb2xvcilpZih0LmNvbG9yfHwodC5jb2xvcj0idHJhbnNwYXJlbnQiKSwic3RyaW5nIiE9dHlwZW9mIHQuY29sb3ImJmlzTmFOKHQuY29sb3IpKXt2YXIgcTtpZigibnVtYmVyIj09dHlwZW9mIHQuY29sb3JbMF0mJnQuY29sb3IubGVuZ3RoPnRoaXMuY291bnRzLmxlbmd0aCl7dmFyIEc9dC5jb2xvci5sZW5ndGg7cT11Lm1hbGxvY1VpbnQ4KEcpO2Zvcih2YXIgWT0odC5jb2xvci5zdWJhcnJheXx8dC5jb2xvci5zbGljZSkuYmluZCh0LmNvbG9yKSxXPTA7VzxHO1crPTQpcS5zZXQobChZKFcsVys0KSwidWludDgiKSxXKX1lbHNle3ZhciBYPXQuY29sb3IubGVuZ3RoO3E9dS5tYWxsb2NVaW50OCg0KlgpO2Zvcih2YXIgWj0wO1o8WDtaKyspcS5zZXQobCh0LmNvbG9yW1pdfHwwLCJ1aW50OCIpLDQqWil9dGhpcy5jb2xvcj1xfWVsc2UgdGhpcy5jb2xvcj1sKHQuY29sb3IsInVpbnQ4Iik7aWYodC5wb3NpdGlvbnx8dC50ZXh0fHx0LmNvbG9yfHx0LmJhc2VsaW5lfHx0LmFsaWdufHx0LmZvbnR8fHQub2Zmc2V0fHx0Lm9wYWNpdHkpaWYodGhpcy5jb2xvci5sZW5ndGg+NHx8dGhpcy5iYXNlbGluZU9mZnNldC5sZW5ndGg+MXx8dGhpcy5hbGlnbiYmdGhpcy5hbGlnbi5sZW5ndGg+MXx8dGhpcy5mb250QXRsYXMubGVuZ3RoPjF8fHRoaXMucG9zaXRpb25PZmZzZXQubGVuZ3RoPjIpe3ZhciBKPU1hdGgubWF4KC41KnRoaXMucG9zaXRpb24ubGVuZ3RofHwwLC4yNSp0aGlzLmNvbG9yLmxlbmd0aHx8MCx0aGlzLmJhc2VsaW5lT2Zmc2V0Lmxlbmd0aHx8MCx0aGlzLmFsaWduT2Zmc2V0Lmxlbmd0aHx8MCx0aGlzLmZvbnQubGVuZ3RofHwwLHRoaXMub3BhY2l0eS5sZW5ndGh8fDAsLjUqdGhpcy5wb3NpdGlvbk9mZnNldC5sZW5ndGh8fDApO3RoaXMuYmF0Y2g9QXJyYXkoSik7Zm9yKHZhciBLPTA7Szx0aGlzLmJhdGNoLmxlbmd0aDtLKyspdGhpcy5iYXRjaFtLXT17Y291bnQ6dGhpcy5jb3VudHMubGVuZ3RoPjE/dGhpcy5jb3VudHNbS106dGhpcy5jb3VudHNbMF0sb2Zmc2V0OnRoaXMudGV4dE9mZnNldHMubGVuZ3RoPjE/dGhpcy50ZXh0T2Zmc2V0c1tLXTp0aGlzLnRleHRPZmZzZXRzWzBdLGNvbG9yOnRoaXMuY29sb3I/dGhpcy5jb2xvci5sZW5ndGg8PTQ/dGhpcy5jb2xvcjp0aGlzLmNvbG9yLnN1YmFycmF5KDQqSyw0KksrNCk6WzAsMCwwLDI1NV0sb3BhY2l0eTpBcnJheS5pc0FycmF5KHRoaXMub3BhY2l0eSk/dGhpcy5vcGFjaXR5W0tdOnRoaXMub3BhY2l0eSxiYXNlbGluZTpudWxsIT10aGlzLmJhc2VsaW5lT2Zmc2V0W0tdP3RoaXMuYmFzZWxpbmVPZmZzZXRbS106dGhpcy5iYXNlbGluZU9mZnNldFswXSxhbGlnbjp0aGlzLmFsaWduP251bGwhPXRoaXMuYWxpZ25PZmZzZXRbS10/dGhpcy5hbGlnbk9mZnNldFtLXTp0aGlzLmFsaWduT2Zmc2V0WzBdOjAsYXRsYXM6dGhpcy5mb250QXRsYXNbS118fHRoaXMuZm9udEF0bGFzWzBdLHBvc2l0aW9uT2Zmc2V0OnRoaXMucG9zaXRpb25PZmZzZXQubGVuZ3RoPjI/dGhpcy5wb3NpdGlvbk9mZnNldC5zdWJhcnJheSgyKkssMipLKzIpOnRoaXMucG9zaXRpb25PZmZzZXR9fWVsc2UgdGhpcy5jb3VudD90aGlzLmJhdGNoPVt7Y291bnQ6dGhpcy5jb3VudCxvZmZzZXQ6MCxjb2xvcjp0aGlzLmNvbG9yfHxbMCwwLDAsMjU1XSxvcGFjaXR5OkFycmF5LmlzQXJyYXkodGhpcy5vcGFjaXR5KT90aGlzLm9wYWNpdHlbMF06dGhpcy5vcGFjaXR5LGJhc2VsaW5lOnRoaXMuYmFzZWxpbmVPZmZzZXRbMF0sYWxpZ246dGhpcy5hbGlnbk9mZnNldD90aGlzLmFsaWduT2Zmc2V0WzBdOjAsYXRsYXM6dGhpcy5mb250QXRsYXNbMF0scG9zaXRpb25PZmZzZXQ6dGhpcy5wb3NpdGlvbk9mZnNldH1dOnRoaXMuYmF0Y2g9W119LFQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt9LFQucHJvdG90eXBlLmtlcm5pbmc9ITAsVC5wcm90b3R5cGUucG9zaXRpb249e2NvbnN0YW50Om5ldyBGbG9hdDMyQXJyYXkoMil9LFQucHJvdG90eXBlLnRyYW5zbGF0ZT1udWxsLFQucHJvdG90eXBlLnNjYWxlPW51bGwsVC5wcm90b3R5cGUuZm9udD1udWxsLFQucHJvdG90eXBlLnRleHQ9IiIsVC5wcm90b3R5cGUucG9zaXRpb25PZmZzZXQ9WzAsMF0sVC5wcm90b3R5cGUub3BhY2l0eT0xLFQucHJvdG90eXBlLmNvbG9yPW5ldyBVaW50OEFycmF5KFswLDAsMCwyNTVdKSxULnByb3RvdHlwZS5hbGlnbk9mZnNldD1bMCwwXSxULm1heEF0bGFzU2l6ZT0xMDI0LFQuYXRsYXNDYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksVC5hdGxhc0NvbnRleHQ9VC5hdGxhc0NhbnZhcy5nZXRDb250ZXh0KCIyZCIse2FscGhhOiExfSksVC5iYXNlRm9udFNpemU9NjQsVC5mb250cz17fSxlLmV4cG9ydHM9VH0seyJiaXQtdHdpZGRsZSI6MTAxLCJjb2xvci1ub3JtYWxpemUiOjEyNiwiY3NzLWZvbnQiOjE0NiwiZGV0ZWN0LWtlcm5pbmciOjE3MywiZXM2LXdlYWstbWFwIjoyMzMsImZsYXR0ZW4tdmVydGV4LWRhdGEiOjI0NCwiZm9udC1hdGxhcyI6MjQ1LCJmb250LW1lYXN1cmUiOjI0NiwiZ2wtdXRpbC9jb250ZXh0IjozMzksImlzLXBsYWluLW9iaiI6NDM3LCJvYmplY3QtYXNzaWduIjo0NjYsInBhcnNlLXJlY3QiOjQ3MSwicGFyc2UtdW5pdCI6NDczLCJwaWNrLWJ5LWFsaWFzIjo0NzUscmVnbDo1MTYsInRvLXB4Ijo1NzQsInR5cGVkYXJyYXktcG9vbCI6NTkwfV0sMzM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm5kYXJyYXkiKSxpPXQoIm5kYXJyYXktb3BzIiksYT10KCJ0eXBlZGFycmF5LXBvb2wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoYXJndW1lbnRzLmxlbmd0aDw9MSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogTWlzc2luZyBhcmd1bWVudHMgZm9yIHRleHR1cmUyZCBjb25zdHJ1Y3RvciIpO298fGModCk7aWYoIm51bWJlciI9PXR5cGVvZiBhcmd1bWVudHNbMV0pcmV0dXJuIHYodCxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXXx8dC5SR0JBLGFyZ3VtZW50c1s0XXx8dC5VTlNJR05FRF9CWVRFKTtpZihBcnJheS5pc0FycmF5KGFyZ3VtZW50c1sxXSkpcmV0dXJuIHYodCwwfGFyZ3VtZW50c1sxXVswXSwwfGFyZ3VtZW50c1sxXVsxXSxhcmd1bWVudHNbMl18fHQuUkdCQSxhcmd1bWVudHNbM118fHQuVU5TSUdORURfQllURSk7aWYoIm9iamVjdCI9PXR5cGVvZiBhcmd1bWVudHNbMV0pe3ZhciBlPWFyZ3VtZW50c1sxXSxyPXUoZSk/ZTplLnJhdztpZihyKXJldHVybiB5KHQsciwwfGUud2lkdGgsMHxlLmhlaWdodCxhcmd1bWVudHNbMl18fHQuUkdCQSxhcmd1bWVudHNbM118fHQuVU5TSUdORURfQllURSk7aWYoZS5zaGFwZSYmZS5kYXRhJiZlLnN0cmlkZSlyZXR1cm4geCh0LGUpfXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgdGV4dHVyZTJkIGNvbnN0cnVjdG9yIil9O3ZhciBvPW51bGwscz1udWxsLGw9bnVsbDtmdW5jdGlvbiBjKHQpe289W3QuTElORUFSLHQuTkVBUkVTVF9NSVBNQVBfTElORUFSLHQuTElORUFSX01JUE1BUF9ORUFSRVNULHQuTElORUFSX01JUE1BUF9ORUFSRVNUXSxzPVt0Lk5FQVJFU1QsdC5MSU5FQVIsdC5ORUFSRVNUX01JUE1BUF9ORUFSRVNULHQuTkVBUkVTVF9NSVBNQVBfTElORUFSLHQuTElORUFSX01JUE1BUF9ORUFSRVNULHQuTElORUFSX01JUE1BUF9MSU5FQVJdLGw9W3QuUkVQRUFULHQuQ0xBTVBfVE9fRURHRSx0Lk1JUlJPUkVEX1JFUEVBVF19ZnVuY3Rpb24gdSh0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTEltYWdlRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTFZpZGVvRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSW1hZ2VEYXRhJiZ0IGluc3RhbmNlb2YgSW1hZ2VEYXRhfXZhciBmPWZ1bmN0aW9uKHQsZSl7aS5tdWxzKHQsZSwyNTUpfTtmdW5jdGlvbiBoKHQsZSxyKXt2YXIgbj10LmdsLGk9bi5nZXRQYXJhbWV0ZXIobi5NQVhfVEVYVFVSRV9TSVpFKTtpZihlPDB8fGU+aXx8cjwwfHxyPmkpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaXplIik7cmV0dXJuIHQuX3NoYXBlPVtlLHJdLHQuYmluZCgpLG4udGV4SW1hZ2UyRChuLlRFWFRVUkVfMkQsMCx0LmZvcm1hdCxlLHIsMCx0LmZvcm1hdCx0LnR5cGUsbnVsbCksdC5fbWlwTGV2ZWxzPVswXSx0fWZ1bmN0aW9uIHAodCxlLHIsbixpLGEpe3RoaXMuZ2w9dCx0aGlzLmhhbmRsZT1lLHRoaXMuZm9ybWF0PWksdGhpcy50eXBlPWEsdGhpcy5fc2hhcGU9W3Isbl0sdGhpcy5fbWlwTGV2ZWxzPVswXSx0aGlzLl9tYWdGaWx0ZXI9dC5ORUFSRVNULHRoaXMuX21pbkZpbHRlcj10Lk5FQVJFU1QsdGhpcy5fd3JhcFM9dC5DTEFNUF9UT19FREdFLHRoaXMuX3dyYXBUPXQuQ0xBTVBfVE9fRURHRSx0aGlzLl9hbmlzb1NhbXBsZXM9MTt2YXIgbz10aGlzLHM9W3RoaXMuX3dyYXBTLHRoaXMuX3dyYXBUXTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzLFt7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3dyYXBTfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8ud3JhcFM9dH19LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fd3JhcFR9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby53cmFwVD10fX1dKSx0aGlzLl93cmFwVmVjdG9yPXM7dmFyIGw9W3RoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdXTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsLFt7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8ud2lkdGg9dH19LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby5oZWlnaHQ9dH19XSksdGhpcy5fc2hhcGVWZWN0b3I9bH12YXIgZD1wLnByb3RvdHlwZTtmdW5jdGlvbiBtKHQsZSl7cmV0dXJuIDM9PT10Lmxlbmd0aD8xPT09ZVsyXSYmZVsxXT09PXRbMF0qdFsyXSYmZVswXT09PXRbMl06MT09PWVbMF0mJmVbMV09PT10WzBdfWZ1bmN0aW9uIGcodCl7dmFyIGU9dC5jcmVhdGVUZXh0dXJlKCk7cmV0dXJuIHQuYmluZFRleHR1cmUodC5URVhUVVJFXzJELGUpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01JTl9GSUxURVIsdC5ORUFSRVNUKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NQUdfRklMVEVSLHQuTkVBUkVTVCksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9TLHQuQ0xBTVBfVE9fRURHRSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9ULHQuQ0xBTVBfVE9fRURHRSksZX1mdW5jdGlvbiB2KHQsZSxyLG4saSl7dmFyIGE9dC5nZXRQYXJhbWV0ZXIodC5NQVhfVEVYVFVSRV9TSVpFKTtpZihlPDB8fGU+YXx8cjwwfHxyPmEpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaGFwZSIpO2lmKGk9PT10LkZMT0FUJiYhdC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0IikpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEZsb2F0aW5nIHBvaW50IHRleHR1cmVzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpO3ZhciBvPWcodCk7cmV0dXJuIHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCxuLGUsciwwLG4saSxudWxsKSxuZXcgcCh0LG8sZSxyLG4saSl9ZnVuY3Rpb24geSh0LGUscixuLGksYSl7dmFyIG89Zyh0KTtyZXR1cm4gdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLGksaSxhLGUpLG5ldyBwKHQsbyxyLG4saSxhKX1mdW5jdGlvbiB4KHQsZSl7dmFyIHI9ZS5kdHlwZSxvPWUuc2hhcGUuc2xpY2UoKSxzPXQuZ2V0UGFyYW1ldGVyKHQuTUFYX1RFWFRVUkVfU0laRSk7aWYob1swXTwwfHxvWzBdPnN8fG9bMV08MHx8b1sxXT5zKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2l6ZSIpO3ZhciBsPW0obyxlLnN0cmlkZS5zbGljZSgpKSxjPTA7ImZsb2F0MzIiPT09cj9jPXQuRkxPQVQ6ImZsb2F0NjQiPT09cj8oYz10LkZMT0FULGw9ITEscj0iZmxvYXQzMiIpOiJ1aW50OCI9PT1yP2M9dC5VTlNJR05FRF9CWVRFOihjPXQuVU5TSUdORURfQllURSxsPSExLHI9InVpbnQ4Iik7dmFyIHUsaCxkPTA7aWYoMj09PW8ubGVuZ3RoKWQ9dC5MVU1JTkFOQ0Usbz1bb1swXSxvWzFdLDFdLGU9bihlLmRhdGEsbyxbZS5zdHJpZGVbMF0sZS5zdHJpZGVbMV0sMV0sZS5vZmZzZXQpO2Vsc2V7aWYoMyE9PW8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciB0ZXh0dXJlIik7aWYoMT09PW9bMl0pZD10LkFMUEhBO2Vsc2UgaWYoMj09PW9bMl0pZD10LkxVTUlOQU5DRV9BTFBIQTtlbHNlIGlmKDM9PT1vWzJdKWQ9dC5SR0I7ZWxzZXtpZig0IT09b1syXSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgcGl4ZWwgY29vcmRzIik7ZD10LlJHQkF9fWMhPT10LkZMT0FUfHx0LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXQiKXx8KGM9dC5VTlNJR05FRF9CWVRFLGw9ITEpO3ZhciB2PWUuc2l6ZTtpZihsKXU9MD09PWUub2Zmc2V0JiZlLmRhdGEubGVuZ3RoPT09dj9lLmRhdGE6ZS5kYXRhLnN1YmFycmF5KGUub2Zmc2V0LGUub2Zmc2V0K3YpO2Vsc2V7dmFyIHk9W29bMl0sb1syXSpvWzBdLDFdO2g9YS5tYWxsb2ModixyKTt2YXIgeD1uKGgsbyx5LDApOyJmbG9hdDMyIiE9PXImJiJmbG9hdDY0IiE9PXJ8fGMhPT10LlVOU0lHTkVEX0JZVEU/aS5hc3NpZ24oeCxlKTpmKHgsZSksdT1oLnN1YmFycmF5KDAsdil9dmFyIGI9Zyh0KTtyZXR1cm4gdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLGQsb1swXSxvWzFdLDAsZCxjLHUpLGx8fGEuZnJlZShoKSxuZXcgcCh0LGIsb1swXSxvWzFdLGQsYyl9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZCx7bWluRmlsdGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5iaW5kKCk7dmFyIGU9dGhpcy5nbDtpZih0aGlzLnR5cGU9PT1lLkZMT0FUJiZvLmluZGV4T2YodCk+PTAmJihlLmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIil8fCh0PWUuTkVBUkVTVCkpLHMuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIGZpbHRlciBtb2RlICIrdCk7cmV0dXJuIGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX01JTl9GSUxURVIsdCksdGhpcy5fbWluRmlsdGVyPXR9fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYWdGaWx0ZXJ9LHNldDpmdW5jdGlvbih0KXt0aGlzLmJpbmQoKTt2YXIgZT10aGlzLmdsO2lmKHRoaXMudHlwZT09PWUuRkxPQVQmJm8uaW5kZXhPZih0KT49MCYmKGUuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKXx8KHQ9ZS5ORUFSRVNUKSkscy5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gZmlsdGVyIG1vZGUgIit0KTtyZXR1cm4gZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUFHX0ZJTFRFUix0KSx0aGlzLl9tYWdGaWx0ZXI9dH19LG1pcFNhbXBsZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmlzb1NhbXBsZXN9LHNldDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hbmlzb1NhbXBsZXM7aWYodGhpcy5fYW5pc29TYW1wbGVzPTB8TWF0aC5tYXgodCwxKSxlIT09dGhpcy5fYW5pc29TYW1wbGVzKXt2YXIgcj10aGlzLmdsLmdldEV4dGVuc2lvbigiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7ciYmdGhpcy5nbC50ZXhQYXJhbWV0ZXJmKHRoaXMuZ2wuVEVYVFVSRV8yRCxyLlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULHRoaXMuX2FuaXNvU2FtcGxlcyl9cmV0dXJuIHRoaXMuX2FuaXNvU2FtcGxlc319LHdyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JhcFN9LHNldDpmdW5jdGlvbih0KXtpZih0aGlzLmJpbmQoKSxsLmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biB3cmFwIG1vZGUgIit0KTtyZXR1cm4gdGhpcy5nbC50ZXhQYXJhbWV0ZXJpKHRoaXMuZ2wuVEVYVFVSRV8yRCx0aGlzLmdsLlRFWFRVUkVfV1JBUF9TLHQpLHRoaXMuX3dyYXBTPXR9fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBUfSxzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5iaW5kKCksbC5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gd3JhcCBtb2RlICIrdCk7cmV0dXJuIHRoaXMuZ2wudGV4UGFyYW1ldGVyaSh0aGlzLmdsLlRFWFRVUkVfMkQsdGhpcy5nbC5URVhUVVJFX1dSQVBfVCx0KSx0aGlzLl93cmFwVD10fX0sd3JhcDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBWZWN0b3J9LHNldDpmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpfHwodD1bdCx0XSksMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBNdXN0IHNwZWNpZnkgd3JhcCBtb2RlIGZvciByb3dzIGFuZCBjb2x1bW5zIik7Zm9yKHZhciBlPTA7ZTwyOysrZSlpZihsLmluZGV4T2YodFtlXSk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biB3cmFwIG1vZGUgIit0KTt0aGlzLl93cmFwUz10WzBdLHRoaXMuX3dyYXBUPXRbMV07dmFyIHI9dGhpcy5nbDtyZXR1cm4gdGhpcy5iaW5kKCksci50ZXhQYXJhbWV0ZXJpKHIuVEVYVFVSRV8yRCxyLlRFWFRVUkVfV1JBUF9TLHRoaXMuX3dyYXBTKSxyLnRleFBhcmFtZXRlcmkoci5URVhUVVJFXzJELHIuVEVYVFVSRV9XUkFQX1QsdGhpcy5fd3JhcFQpLHR9fSxzaGFwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlVmVjdG9yfSxzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2hhcGUiKX1lbHNlIHQ9WzB8dCwwfHRdO3JldHVybiBoKHRoaXMsMHx0WzBdLDB8dFsxXSksWzB8dFswXSwwfHRbMV1dfX0sd2lkdGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBoKHRoaXMsdHw9MCx0aGlzLl9zaGFwZVsxXSksdH19LGhlaWdodDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR8PTAsaCh0aGlzLHRoaXMuX3NoYXBlWzBdLHQpLHR9fX0pLGQuYmluZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsO3JldHVybiB2b2lkIDAhPT10JiZlLmFjdGl2ZVRleHR1cmUoZS5URVhUVVJFMCsoMHx0KSksZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy5oYW5kbGUpLHZvaWQgMCE9PXQ/MHx0OmUuZ2V0UGFyYW1ldGVyKGUuQUNUSVZFX1RFWFRVUkUpLWUuVEVYVFVSRTB9LGQuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLmhhbmRsZSl9LGQuZ2VuZXJhdGVNaXBtYXA9ZnVuY3Rpb24oKXt0aGlzLmJpbmQoKSx0aGlzLmdsLmdlbmVyYXRlTWlwbWFwKHRoaXMuZ2wuVEVYVFVSRV8yRCk7Zm9yKHZhciB0PU1hdGgubWluKHRoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdKSxlPTA7dD4wOysrZSx0Pj4+PTEpdGhpcy5fbWlwTGV2ZWxzLmluZGV4T2YoZSk8MCYmdGhpcy5fbWlwTGV2ZWxzLnB1c2goZSl9LGQuc2V0UGl4ZWxzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPXRoaXMuZ2w7dGhpcy5iaW5kKCksQXJyYXkuaXNBcnJheShlKT8obz1yLHI9MHxlWzFdLGU9MHxlWzBdKTooZT1lfHwwLHI9cnx8MCksbz1vfHwwO3ZhciBsPXUodCk/dDp0LnJhdztpZihsKXt0aGlzLl9taXBMZXZlbHMuaW5kZXhPZihvKTwwPyhzLnRleEltYWdlMkQocy5URVhUVVJFXzJELDAsdGhpcy5mb3JtYXQsdGhpcy5mb3JtYXQsdGhpcy50eXBlLGwpLHRoaXMuX21pcExldmVscy5wdXNoKG8pKTpzLnRleFN1YkltYWdlMkQocy5URVhUVVJFXzJELG8sZSxyLHRoaXMuZm9ybWF0LHRoaXMudHlwZSxsKX1lbHNle2lmKCEodC5zaGFwZSYmdC5zdHJpZGUmJnQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVuc3VwcG9ydGVkIGRhdGEgdHlwZSIpO2lmKHQuc2hhcGUubGVuZ3RoPDJ8fGUrdC5zaGFwZVsxXT50aGlzLl9zaGFwZVsxXT4+Pm98fHIrdC5zaGFwZVswXT50aGlzLl9zaGFwZVswXT4+Pm98fGU8MHx8cjwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBUZXh0dXJlIGRpbWVuc2lvbnMgYXJlIG91dCBvZiBib3VuZHMiKTshZnVuY3Rpb24odCxlLHIsbyxzLGwsYyx1KXt2YXIgaD11LmR0eXBlLHA9dS5zaGFwZS5zbGljZSgpO2lmKHAubGVuZ3RoPDJ8fHAubGVuZ3RoPjMpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgbmRhcnJheSwgbXVzdCBiZSAyZCBvciAzZCIpO3ZhciBkPTAsZz0wLHY9bShwLHUuc3RyaWRlLnNsaWNlKCkpOyJmbG9hdDMyIj09PWg/ZD10LkZMT0FUOiJmbG9hdDY0Ij09PWg/KGQ9dC5GTE9BVCx2PSExLGg9ImZsb2F0MzIiKToidWludDgiPT09aD9kPXQuVU5TSUdORURfQllURTooZD10LlVOU0lHTkVEX0JZVEUsdj0hMSxoPSJ1aW50OCIpO2lmKDI9PT1wLmxlbmd0aClnPXQuTFVNSU5BTkNFLHA9W3BbMF0scFsxXSwxXSx1PW4odS5kYXRhLHAsW3Uuc3RyaWRlWzBdLHUuc3RyaWRlWzFdLDFdLHUub2Zmc2V0KTtlbHNle2lmKDMhPT1wLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgdGV4dHVyZSIpO2lmKDE9PT1wWzJdKWc9dC5BTFBIQTtlbHNlIGlmKDI9PT1wWzJdKWc9dC5MVU1JTkFOQ0VfQUxQSEE7ZWxzZSBpZigzPT09cFsyXSlnPXQuUkdCO2Vsc2V7aWYoNCE9PXBbMl0pdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHBpeGVsIGNvb3JkcyIpO2c9dC5SR0JBfXBbMl19ZyE9PXQuTFVNSU5BTkNFJiZnIT09dC5BTFBIQXx8cyE9PXQuTFVNSU5BTkNFJiZzIT09dC5BTFBIQXx8KGc9cyk7aWYoZyE9PXMpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEluY29tcGF0aWJsZSB0ZXh0dXJlIGZvcm1hdCBmb3Igc2V0UGl4ZWxzIik7dmFyIHk9dS5zaXplLHg9Yy5pbmRleE9mKG8pPDA7eCYmYy5wdXNoKG8pO2lmKGQ9PT1sJiZ2KTA9PT11Lm9mZnNldCYmdS5kYXRhLmxlbmd0aD09PXk/eD90LnRleEltYWdlMkQodC5URVhUVVJFXzJELG8scyxwWzBdLHBbMV0sMCxzLGwsdS5kYXRhKTp0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELG8sZSxyLHBbMF0scFsxXSxzLGwsdS5kYXRhKTp4P3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxzLHBbMF0scFsxXSwwLHMsbCx1LmRhdGEuc3ViYXJyYXkodS5vZmZzZXQsdS5vZmZzZXQreSkpOnQudGV4U3ViSW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxlLHIscFswXSxwWzFdLHMsbCx1LmRhdGEuc3ViYXJyYXkodS5vZmZzZXQsdS5vZmZzZXQreSkpO2Vsc2V7dmFyIGI7Yj1sPT09dC5GTE9BVD9hLm1hbGxvY0Zsb2F0MzIoeSk6YS5tYWxsb2NVaW50OCh5KTt2YXIgXz1uKGIscCxbcFsyXSxwWzJdKnBbMF0sMV0pO2Q9PT10LkZMT0FUJiZsPT09dC5VTlNJR05FRF9CWVRFP2YoXyx1KTppLmFzc2lnbihfLHUpLHg/dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLHMscFswXSxwWzFdLDAscyxsLGIuc3ViYXJyYXkoMCx5KSk6dC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLGUscixwWzBdLHBbMV0scyxsLGIuc3ViYXJyYXkoMCx5KSksbD09PXQuRkxPQVQ/YS5mcmVlRmxvYXQzMihiKTphLmZyZWVVaW50OChiKX19KHMsZSxyLG8sdGhpcy5mb3JtYXQsdGhpcy50eXBlLHRoaXMuX21pcExldmVscyx0KX19fSx7bmRhcnJheTo0NjIsIm5kYXJyYXktb3BzIjo0NTcsInR5cGVkYXJyYXktcG9vbCI6NTkwfV0sMzM5OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwaWNrLWJ5LWFsaWFzIik7ZnVuY3Rpb24gaSh0KXtpZih0LmNvbnRhaW5lcilpZih0LmNvbnRhaW5lcj09ZG9jdW1lbnQuYm9keSlkb2N1bWVudC5ib2R5LnN0eWxlLndpZHRofHwodC5jYW52YXMud2lkdGg9dC53aWR0aHx8dC5waXhlbFJhdGlvKnIuaW5uZXJXaWR0aCksZG9jdW1lbnQuYm9keS5zdHlsZS5oZWlnaHR8fCh0LmNhbnZhcy5oZWlnaHQ9dC5oZWlnaHR8fHQucGl4ZWxSYXRpbypyLmlubmVySGVpZ2h0KTtlbHNle3ZhciBlPXQuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3QuY2FudmFzLndpZHRoPXQud2lkdGh8fGUucmlnaHQtZS5sZWZ0LHQuY2FudmFzLmhlaWdodD10LmhlaWdodHx8ZS5ib3R0b20tZS50b3B9fWZ1bmN0aW9uIGEodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQuZ2V0Q29udGV4dCYmIndpZHRoImluIHQmJiJoZWlnaHQiaW4gdH1mdW5jdGlvbiBvKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7cmV0dXJuIHQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0LnN0eWxlLnRvcD0wLHQuc3R5bGUubGVmdD0wLHR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKHQ/InN0cmluZyI9PXR5cGVvZiB0JiYodD17Y29udGFpbmVyOnR9KTp0PXt9LGEodCk/dD17Y29udGFpbmVyOnR9OnQ9InN0cmluZyI9PXR5cGVvZihlPXQpLm5vZGVOYW1lJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5hcHBlbmRDaGlsZCYmImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0P3tjb250YWluZXI6dH06ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQuZHJhd0FycmF5c3x8ImZ1bmN0aW9uIj09dHlwZW9mIHQuZHJhd0VsZW1lbnRzfSh0KT97Z2w6dH06bih0LHtjb250YWluZXI6ImNvbnRhaW5lciB0YXJnZXQgZWxlbWVudCBlbCBjYW52YXMgaG9sZGVyIHBhcmVudCBwYXJlbnROb2RlIHdyYXBwZXIgdXNlIHJlZiByb290IG5vZGUiLGdsOiJnbCBjb250ZXh0IHdlYmdsIGdsQ29udGV4dCIsYXR0cnM6ImF0dHJpYnV0ZXMgYXR0cnMgY29udGV4dEF0dHJpYnV0ZXMiLHBpeGVsUmF0aW86InBpeGVsUmF0aW8gcHhSYXRpbyBweCByYXRpbyBweHJhdGlvIHBpeGVscmF0aW8iLHdpZHRoOiJ3IHdpZHRoIixoZWlnaHQ6ImggaGVpZ2h0In0sITApLHQucGl4ZWxSYXRpb3x8KHQucGl4ZWxSYXRpbz1yLnBpeGVsUmF0aW98fDEpLHQuZ2wpcmV0dXJuIHQuZ2w7aWYodC5jYW52YXMmJih0LmNvbnRhaW5lcj10LmNhbnZhcy5wYXJlbnROb2RlKSx0LmNvbnRhaW5lcil7aWYoInN0cmluZyI9PXR5cGVvZiB0LmNvbnRhaW5lcil7dmFyIHM9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0LmNvbnRhaW5lcik7aWYoIXMpdGhyb3cgRXJyb3IoIkVsZW1lbnQgIit0LmNvbnRhaW5lcisiIGlzIG5vdCBmb3VuZCIpO3QuY29udGFpbmVyPXN9YSh0LmNvbnRhaW5lcik/KHQuY2FudmFzPXQuY29udGFpbmVyLHQuY29udGFpbmVyPXQuY2FudmFzLnBhcmVudE5vZGUpOnQuY2FudmFzfHwodC5jYW52YXM9bygpLHQuY29udGFpbmVyLmFwcGVuZENoaWxkKHQuY2FudmFzKSxpKHQpKX1lbHNlIGlmKCF0LmNhbnZhcyl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBkb2N1bWVudCl0aHJvdyBFcnJvcigiTm90IERPTSBlbnZpcm9ubWVudC4gVXNlIGhlYWRsZXNzLWdsLiIpO3QuY29udGFpbmVyPWRvY3VtZW50LmJvZHl8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0LmNhbnZhcz1vKCksdC5jb250YWluZXIuYXBwZW5kQ2hpbGQodC5jYW52YXMpLGkodCl9cmV0dXJuIHQuZ2x8fFsid2ViZ2wiLCJleHBlcmltZW50YWwtd2ViZ2wiLCJ3ZWJnbC1leHBlcmltZW50YWwiXS5zb21lKChmdW5jdGlvbihlKXt0cnl7dC5nbD10LmNhbnZhcy5nZXRDb250ZXh0KGUsdC5hdHRycyl9Y2F0Y2godCl7fXJldHVybiB0LmdsfSkpLHQuZ2x9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJwaWNrLWJ5LWFsaWFzIjo0NzV9XSwzNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtlP2UuYmluZCgpOnQuYmluZEJ1ZmZlcih0LkVMRU1FTlRfQVJSQVlfQlVGRkVSLG51bGwpO3ZhciBuPTB8dC5nZXRQYXJhbWV0ZXIodC5NQVhfVkVSVEVYX0FUVFJJQlMpO2lmKHIpe2lmKHIubGVuZ3RoPm4pdGhyb3cgbmV3IEVycm9yKCJnbC12YW86IFRvbyBtYW55IHZlcnRleCBhdHRyaWJ1dGVzIik7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDsrK2kpe3ZhciBhPXJbaV07aWYoYS5idWZmZXIpe3ZhciBvPWEuYnVmZmVyLHM9YS5zaXplfHw0LGw9YS50eXBlfHx0LkZMT0FULGM9ISFhLm5vcm1hbGl6ZWQsdT1hLnN0cmlkZXx8MCxmPWEub2Zmc2V0fHwwO28uYmluZCgpLHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGkscyxsLGMsdSxmKX1lbHNle2lmKCJudW1iZXIiPT10eXBlb2YgYSl0LnZlcnRleEF0dHJpYjFmKGksYSk7ZWxzZSBpZigxPT09YS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIxZihpLGFbMF0pO2Vsc2UgaWYoMj09PWEubGVuZ3RoKXQudmVydGV4QXR0cmliMmYoaSxhWzBdLGFbMV0pO2Vsc2UgaWYoMz09PWEubGVuZ3RoKXQudmVydGV4QXR0cmliM2YoaSxhWzBdLGFbMV0sYVsyXSk7ZWxzZXtpZig0IT09YS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC12YW86IEludmFsaWQgdmVydGV4IGF0dHJpYnV0ZSIpO3QudmVydGV4QXR0cmliNGYoaSxhWzBdLGFbMV0sYVsyXSxhWzNdKX10LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX19Zm9yKDtpPG47KytpKXQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpfWVsc2V7dC5iaW5kQnVmZmVyKHQuQVJSQVlfQlVGRkVSLG51bGwpO2ZvcihpPTA7aTxuOysraSl0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX19fSx7fV0sMzQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZG8tYmluZC5qcyIpO2Z1bmN0aW9uIGkodCl7dGhpcy5nbD10LHRoaXMuX2VsZW1lbnRzPW51bGwsdGhpcy5fYXR0cmlidXRlcz1udWxsLHRoaXMuX2VsZW1lbnRzVHlwZT10LlVOU0lHTkVEX1NIT1JUfWkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXtuKHRoaXMuZ2wsdGhpcy5fZWxlbWVudHMsdGhpcy5fYXR0cmlidXRlcyl9LGkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5fZWxlbWVudHM9ZSx0aGlzLl9hdHRyaWJ1dGVzPXQsdGhpcy5fZWxlbWVudHNUeXBlPXJ8fHRoaXMuZ2wuVU5TSUdORURfU0hPUlR9LGkucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9LGkucHJvdG90eXBlLnVuYmluZD1mdW5jdGlvbigpe30saS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUscil7cj1yfHwwO3ZhciBuPXRoaXMuZ2w7dGhpcy5fZWxlbWVudHM/bi5kcmF3RWxlbWVudHModCxlLHRoaXMuX2VsZW1lbnRzVHlwZSxyKTpuLmRyYXdBcnJheXModCxyLGUpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpKHQpfX0seyIuL2RvLWJpbmQuanMiOjM0MH1dLDM0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2RvLWJpbmQuanMiKTtmdW5jdGlvbiBpKHQsZSxyLG4saSxhKXt0aGlzLmxvY2F0aW9uPXQsdGhpcy5kaW1lbnNpb249ZSx0aGlzLmE9cix0aGlzLmI9bix0aGlzLmM9aSx0aGlzLmQ9YX1mdW5jdGlvbiBhKHQsZSxyKXt0aGlzLmdsPXQsdGhpcy5fZXh0PWUsdGhpcy5oYW5kbGU9cix0aGlzLl9hdHRyaWJzPVtdLHRoaXMuX3VzZUVsZW1lbnRzPSExLHRoaXMuX2VsZW1lbnRzVHlwZT10LlVOU0lHTkVEX1NIT1JUfWkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMuZGltZW5zaW9uKXtjYXNlIDE6dC52ZXJ0ZXhBdHRyaWIxZih0aGlzLmxvY2F0aW9uLHRoaXMuYSk7YnJlYWs7Y2FzZSAyOnQudmVydGV4QXR0cmliMmYodGhpcy5sb2NhdGlvbix0aGlzLmEsdGhpcy5iKTticmVhaztjYXNlIDM6dC52ZXJ0ZXhBdHRyaWIzZih0aGlzLmxvY2F0aW9uLHRoaXMuYSx0aGlzLmIsdGhpcy5jKTticmVhaztjYXNlIDQ6dC52ZXJ0ZXhBdHRyaWI0Zih0aGlzLmxvY2F0aW9uLHRoaXMuYSx0aGlzLmIsdGhpcy5jLHRoaXMuZCl9fSxhLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5fZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLmhhbmRsZSk7Zm9yKHZhciB0PTA7dDx0aGlzLl9hdHRyaWJzLmxlbmd0aDsrK3QpdGhpcy5fYXR0cmlic1t0XS5iaW5kKHRoaXMuZ2wpfSxhLnByb3RvdHlwZS51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLl9leHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpfSxhLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fZXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHRoaXMuaGFuZGxlKX0sYS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLmJpbmQoKSxuKHRoaXMuZ2wsZSx0KSx0aGlzLnVuYmluZCgpLHRoaXMuX2F0dHJpYnMubGVuZ3RoPTAsdClmb3IodmFyIGE9MDthPHQubGVuZ3RoOysrYSl7dmFyIG89dFthXTsibnVtYmVyIj09dHlwZW9mIG8/dGhpcy5fYXR0cmlicy5wdXNoKG5ldyBpKGEsMSxvKSk6QXJyYXkuaXNBcnJheShvKSYmdGhpcy5fYXR0cmlicy5wdXNoKG5ldyBpKGEsby5sZW5ndGgsb1swXSxvWzFdLG9bMl0sb1szXSkpfXRoaXMuX3VzZUVsZW1lbnRzPSEhZSx0aGlzLl9lbGVtZW50c1R5cGU9cnx8dGhpcy5nbC5VTlNJR05FRF9TSE9SVH0sYS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUscil7cj1yfHwwO3ZhciBuPXRoaXMuZ2w7dGhpcy5fdXNlRWxlbWVudHM/bi5kcmF3RWxlbWVudHModCxlLHRoaXMuX2VsZW1lbnRzVHlwZSxyKTpuLmRyYXdBcnJheXModCxyLGUpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGEodCxlLGUuY3JlYXRlVmVydGV4QXJyYXlPRVMoKSl9fSx7Ii4vZG8tYmluZC5qcyI6MzQwfV0sMzQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3Zhby1uYXRpdmUuanMiKSxpPXQoIi4vbGliL3Zhby1lbXVsYXRlZC5qcyIpO2Z1bmN0aW9uIGEodCl7dGhpcy5iaW5kVmVydGV4QXJyYXlPRVM9dC5iaW5kVmVydGV4QXJyYXkuYmluZCh0KSx0aGlzLmNyZWF0ZVZlcnRleEFycmF5T0VTPXQuY3JlYXRlVmVydGV4QXJyYXkuYmluZCh0KSx0aGlzLmRlbGV0ZVZlcnRleEFycmF5T0VTPXQuZGVsZXRlVmVydGV4QXJyYXkuYmluZCh0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHMsbD10LmNyZWF0ZVZlcnRleEFycmF5P25ldyBhKHQpOnQuZ2V0RXh0ZW5zaW9uKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpO3JldHVybihzPWw/bih0LGwpOmkodCkpLnVwZGF0ZShlLHIsbyksc319LHsiLi9saWIvdmFvLWVtdWxhdGVkLmpzIjozNDEsIi4vbGliL3Zhby1uYXRpdmUuanMiOjM0Mn1dLDM0NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHR9fSx7fV0sMzQ1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0WzBdLHRbMV0sdFsyXSksbz1uKGVbMF0sZVsxXSxlWzJdKTtpKHIsciksaShvLG8pO3ZhciBzPWEocixvKTtyZXR1cm4gcz4xPzA6TWF0aC5hY29zKHMpfTt2YXIgbj10KCIuL2Zyb21WYWx1ZXMiKSxpPXQoIi4vbm9ybWFsaXplIiksYT10KCIuL2RvdCIpfSx7Ii4vZG90IjozNTUsIi4vZnJvbVZhbHVlcyI6MzYxLCIuL25vcm1hbGl6ZSI6MzcyfV0sMzQ2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5jZWlsKGVbMF0pLHRbMV09TWF0aC5jZWlsKGVbMV0pLHRbMl09TWF0aC5jZWlsKGVbMl0pLHR9fSx7fV0sMzQ3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoMyk7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGV9fSx7fV0sMzQ4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9fSx7fV0sMzQ5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSgzKTtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdH19LHt9XSwzNTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXTtyZXR1cm4gdFswXT1pKmwtYSpzLHRbMV09YSpvLW4qbCx0WzJdPW4qcy1pKm8sdH19LHt9XSwzNTE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9kaXN0YW5jZSIpfSx7Ii4vZGlzdGFuY2UiOjM1Mn1dLDM1MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4raSppKX19LHt9XSwzNTM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9kaXZpZGUiKX0seyIuL2RpdmlkZSI6MzU0fV0sMzU0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdL3JbMF0sdFsxXT1lWzFdL3JbMV0sdFsyXT1lWzJdL3JbMl0sdH19LHt9XSwzNTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19fSx7fV0sMzU2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPTFlLTZ9LHt9XSwzNTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLGk9dFsxXSxhPXRbMl0sbz1lWzBdLHM9ZVsxXSxsPWVbMl07cmV0dXJuIE1hdGguYWJzKHItbyk8PW4qTWF0aC5tYXgoMSxNYXRoLmFicyhyKSxNYXRoLmFicyhvKSkmJk1hdGguYWJzKGktcyk8PW4qTWF0aC5tYXgoMSxNYXRoLmFicyhpKSxNYXRoLmFicyhzKSkmJk1hdGguYWJzKGEtbCk8PW4qTWF0aC5tYXgoMSxNYXRoLmFicyhhKSxNYXRoLmFicyhsKSl9O3ZhciBuPXQoIi4vZXBzaWxvbiIpfSx7Ii4vZXBzaWxvbiI6MzU2fV0sMzU4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl19fSx7fV0sMzU5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5mbG9vcihlWzBdKSx0WzFdPU1hdGguZmxvb3IoZVsxXSksdFsyXT1NYXRoLmZsb29yKGVbMl0pLHR9fSx7fV0sMzYwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSxvKXt2YXIgcyxsO2V8fChlPTMpO3J8fChyPTApO2w9aT9NYXRoLm1pbihpKmUrcix0Lmxlbmd0aCk6dC5sZW5ndGg7Zm9yKHM9cjtzPGw7cys9ZSluWzBdPXRbc10sblsxXT10W3MrMV0sblsyXT10W3MrMl0sYShuLG4sbyksdFtzXT1uWzBdLHRbcysxXT1uWzFdLHRbcysyXT1uWzJdO3JldHVybiB0fTt2YXIgbj10KCIuL2NyZWF0ZSIpKCl9LHsiLi9jcmVhdGUiOjM0OX1dLDM2MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IEZsb2F0MzJBcnJheSgzKTtyZXR1cm4gblswXT10LG5bMV09ZSxuWzJdPXIsbn19LHt9XSwzNjI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e0VQU0lMT046dCgiLi9lcHNpbG9uIiksY3JlYXRlOnQoIi4vY3JlYXRlIiksY2xvbmU6dCgiLi9jbG9uZSIpLGFuZ2xlOnQoIi4vYW5nbGUiKSxmcm9tVmFsdWVzOnQoIi4vZnJvbVZhbHVlcyIpLGNvcHk6dCgiLi9jb3B5Iiksc2V0OnQoIi4vc2V0IiksZXF1YWxzOnQoIi4vZXF1YWxzIiksZXhhY3RFcXVhbHM6dCgiLi9leGFjdEVxdWFscyIpLGFkZDp0KCIuL2FkZCIpLHN1YnRyYWN0OnQoIi4vc3VidHJhY3QiKSxzdWI6dCgiLi9zdWIiKSxtdWx0aXBseTp0KCIuL211bHRpcGx5IiksbXVsOnQoIi4vbXVsIiksZGl2aWRlOnQoIi4vZGl2aWRlIiksZGl2OnQoIi4vZGl2IiksbWluOnQoIi4vbWluIiksbWF4OnQoIi4vbWF4IiksZmxvb3I6dCgiLi9mbG9vciIpLGNlaWw6dCgiLi9jZWlsIikscm91bmQ6dCgiLi9yb3VuZCIpLHNjYWxlOnQoIi4vc2NhbGUiKSxzY2FsZUFuZEFkZDp0KCIuL3NjYWxlQW5kQWRkIiksZGlzdGFuY2U6dCgiLi9kaXN0YW5jZSIpLGRpc3Q6dCgiLi9kaXN0Iiksc3F1YXJlZERpc3RhbmNlOnQoIi4vc3F1YXJlZERpc3RhbmNlIiksc3FyRGlzdDp0KCIuL3NxckRpc3QiKSxsZW5ndGg6dCgiLi9sZW5ndGgiKSxsZW46dCgiLi9sZW4iKSxzcXVhcmVkTGVuZ3RoOnQoIi4vc3F1YXJlZExlbmd0aCIpLHNxckxlbjp0KCIuL3NxckxlbiIpLG5lZ2F0ZTp0KCIuL25lZ2F0ZSIpLGludmVyc2U6dCgiLi9pbnZlcnNlIiksbm9ybWFsaXplOnQoIi4vbm9ybWFsaXplIiksZG90OnQoIi4vZG90IiksY3Jvc3M6dCgiLi9jcm9zcyIpLGxlcnA6dCgiLi9sZXJwIikscmFuZG9tOnQoIi4vcmFuZG9tIiksdHJhbnNmb3JtTWF0NDp0KCIuL3RyYW5zZm9ybU1hdDQiKSx0cmFuc2Zvcm1NYXQzOnQoIi4vdHJhbnNmb3JtTWF0MyIpLHRyYW5zZm9ybVF1YXQ6dCgiLi90cmFuc2Zvcm1RdWF0Iikscm90YXRlWDp0KCIuL3JvdGF0ZVgiKSxyb3RhdGVZOnQoIi4vcm90YXRlWSIpLHJvdGF0ZVo6dCgiLi9yb3RhdGVaIiksZm9yRWFjaDp0KCIuL2ZvckVhY2giKX19LHsiLi9hZGQiOjM0NCwiLi9hbmdsZSI6MzQ1LCIuL2NlaWwiOjM0NiwiLi9jbG9uZSI6MzQ3LCIuL2NvcHkiOjM0OCwiLi9jcmVhdGUiOjM0OSwiLi9jcm9zcyI6MzUwLCIuL2Rpc3QiOjM1MSwiLi9kaXN0YW5jZSI6MzUyLCIuL2RpdiI6MzUzLCIuL2RpdmlkZSI6MzU0LCIuL2RvdCI6MzU1LCIuL2Vwc2lsb24iOjM1NiwiLi9lcXVhbHMiOjM1NywiLi9leGFjdEVxdWFscyI6MzU4LCIuL2Zsb29yIjozNTksIi4vZm9yRWFjaCI6MzYwLCIuL2Zyb21WYWx1ZXMiOjM2MSwiLi9pbnZlcnNlIjozNjMsIi4vbGVuIjozNjQsIi4vbGVuZ3RoIjozNjUsIi4vbGVycCI6MzY2LCIuL21heCI6MzY3LCIuL21pbiI6MzY4LCIuL211bCI6MzY5LCIuL211bHRpcGx5IjozNzAsIi4vbmVnYXRlIjozNzEsIi4vbm9ybWFsaXplIjozNzIsIi4vcmFuZG9tIjozNzMsIi4vcm90YXRlWCI6Mzc0LCIuL3JvdGF0ZVkiOjM3NSwiLi9yb3RhdGVaIjozNzYsIi4vcm91bmQiOjM3NywiLi9zY2FsZSI6Mzc4LCIuL3NjYWxlQW5kQWRkIjozNzksIi4vc2V0IjozODAsIi4vc3FyRGlzdCI6MzgxLCIuL3NxckxlbiI6MzgyLCIuL3NxdWFyZWREaXN0YW5jZSI6MzgzLCIuL3NxdWFyZWRMZW5ndGgiOjM4NCwiLi9zdWIiOjM4NSwiLi9zdWJ0cmFjdCI6Mzg2LCIuL3RyYW5zZm9ybU1hdDMiOjM4NywiLi90cmFuc2Zvcm1NYXQ0IjozODgsIi4vdHJhbnNmb3JtUXVhdCI6Mzg5fV0sMzYzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09MS9lWzBdLHRbMV09MS9lWzFdLHRbMl09MS9lWzJdLHR9fSx7fV0sMzY0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vbGVuZ3RoIil9LHsiLi9sZW5ndGgiOjM2NX1dLDM2NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIE1hdGguc3FydChlKmUrcipyK24qbil9fSx7fV0sMzY2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWVbMF0sYT1lWzFdLG89ZVsyXTtyZXR1cm4gdFswXT1pK24qKHJbMF0taSksdFsxXT1hK24qKHJbMV0tYSksdFsyXT1vK24qKHJbMl0tbyksdH19LHt9XSwzNjc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWF4KGVbMF0sclswXSksdFsxXT1NYXRoLm1heChlWzFdLHJbMV0pLHRbMl09TWF0aC5tYXgoZVsyXSxyWzJdKSx0fX0se31dLDM2ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5taW4oZVswXSxyWzBdKSx0WzFdPU1hdGgubWluKGVbMV0sclsxXSksdFsyXT1NYXRoLm1pbihlWzJdLHJbMl0pLHR9fSx7fV0sMzY5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vbXVsdGlwbHkiKX0seyIuL211bHRpcGx5IjozNzB9XSwzNzA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qclswXSx0WzFdPWVbMV0qclsxXSx0WzJdPWVbMl0qclsyXSx0fX0se31dLDM3MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPS1lWzBdLHRbMV09LWVbMV0sdFsyXT0tZVsyXSx0fX0se31dLDM3MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPXIqcituKm4raSppO2E+MCYmKGE9MS9NYXRoLnNxcnQoYSksdFswXT1lWzBdKmEsdFsxXT1lWzFdKmEsdFsyXT1lWzJdKmEpO3JldHVybiB0fX0se31dLDM3MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U9ZXx8MTt2YXIgcj0yKk1hdGgucmFuZG9tKCkqTWF0aC5QSSxuPTIqTWF0aC5yYW5kb20oKS0xLGk9TWF0aC5zcXJ0KDEtbipuKSplO3JldHVybiB0WzBdPU1hdGguY29zKHIpKmksdFsxXT1NYXRoLnNpbihyKSppLHRbMl09biplLHR9fSx7fV0sMzc0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMV0sYT1yWzJdLG89ZVsxXS1pLHM9ZVsyXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1lWzBdLHRbMV09aStvKmMtcypsLHRbMl09YStvKmwrcypjLHR9fSx7fV0sMzc1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzJdLG89ZVswXS1pLHM9ZVsyXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1pK3MqbCtvKmMsdFsxXT1lWzFdLHRbMl09YStzKmMtbypsLHR9fSx7fV0sMzc2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzFdLG89ZVswXS1pLHM9ZVsxXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1pK28qYy1zKmwsdFsxXT1hK28qbCtzKmMsdFsyXT1lWzJdLHR9fSx7fV0sMzc3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5yb3VuZChlWzBdKSx0WzFdPU1hdGgucm91bmQoZVsxXSksdFsyXT1NYXRoLnJvdW5kKGVbMl0pLHR9fSx7fV0sMzc4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdH19LHt9XSwzNzk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0WzJdPWVbMl0rclsyXSpuLHR9fSx7fV0sMzgwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWUsdFsxXT1yLHRbMl09bix0fX0se31dLDM4MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuL3NxdWFyZWREaXN0YW5jZSIpfSx7Ii4vc3F1YXJlZERpc3RhbmNlIjozODN9XSwzODI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9zcXVhcmVkTGVuZ3RoIil9LHsiLi9zcXVhcmVkTGVuZ3RoIjozODR9XSwzODM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj1lWzFdLXRbMV0saT1lWzJdLXRbMl07cmV0dXJuIHIqcituKm4raSppfX0se31dLDM4NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIGUqZStyKnIrbipufX0se31dLDM4NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuL3N1YnRyYWN0Iil9LHsiLi9zdWJ0cmFjdCI6Mzg2fV0sMzg2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdFsyXT1lWzJdLXJbMl0sdH19LHt9XSwzODc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXTtyZXR1cm4gdFswXT1uKnJbMF0raSpyWzNdK2Eqcls2XSx0WzFdPW4qclsxXStpKnJbNF0rYSpyWzddLHRbMl09bipyWzJdK2kqcls1XSthKnJbOF0sdH19LHt9XSwzODg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XTtyZXR1cm4gbz1vfHwxLHRbMF09KHJbMF0qbityWzRdKmkrcls4XSphK3JbMTJdKS9vLHRbMV09KHJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKS9vLHRbMl09KHJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSkvbyx0fX0se31dLDM4OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdLGM9clszXSx1PWMqbitzKmEtbCppLGY9YyppK2wqbi1vKmEsaD1jKmErbyppLXMqbixwPS1vKm4tcyppLWwqYTtyZXR1cm4gdFswXT11KmMrcCotbytmKi1sLWgqLXMsdFsxXT1mKmMrcCotcytoKi1vLXUqLWwsdFsyXT1oKmMrcCotbCt1Ki1zLWYqLW8sdH19LHt9XSwzOTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0WzJdPWVbMl0rclsyXSx0WzNdPWVbM10rclszXSx0fX0se31dLDM5MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KDQpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZX19LHt9XSwzOTI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHR9fSx7fV0sMzkzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSg0KTtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdFszXT0wLHR9fSx7fV0sMzk0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdLGE9ZVszXS10WzNdO3JldHVybiBNYXRoLnNxcnQocipyK24qbitpKmkrYSphKX19LHt9XSwzOTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0vclswXSx0WzFdPWVbMV0vclsxXSx0WzJdPWVbMl0vclsyXSx0WzNdPWVbM10vclszXSx0fX0se31dLDM5NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXSt0WzNdKmVbM119fSx7fV0sMzk3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5ldyBGbG9hdDMyQXJyYXkoNCk7cmV0dXJuIGlbMF09dCxpWzFdPWUsaVsyXT1yLGlbM109bixpfX0se31dLDM5ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17Y3JlYXRlOnQoIi4vY3JlYXRlIiksY2xvbmU6dCgiLi9jbG9uZSIpLGZyb21WYWx1ZXM6dCgiLi9mcm9tVmFsdWVzIiksY29weTp0KCIuL2NvcHkiKSxzZXQ6dCgiLi9zZXQiKSxhZGQ6dCgiLi9hZGQiKSxzdWJ0cmFjdDp0KCIuL3N1YnRyYWN0IiksbXVsdGlwbHk6dCgiLi9tdWx0aXBseSIpLGRpdmlkZTp0KCIuL2RpdmlkZSIpLG1pbjp0KCIuL21pbiIpLG1heDp0KCIuL21heCIpLHNjYWxlOnQoIi4vc2NhbGUiKSxzY2FsZUFuZEFkZDp0KCIuL3NjYWxlQW5kQWRkIiksZGlzdGFuY2U6dCgiLi9kaXN0YW5jZSIpLHNxdWFyZWREaXN0YW5jZTp0KCIuL3NxdWFyZWREaXN0YW5jZSIpLGxlbmd0aDp0KCIuL2xlbmd0aCIpLHNxdWFyZWRMZW5ndGg6dCgiLi9zcXVhcmVkTGVuZ3RoIiksbmVnYXRlOnQoIi4vbmVnYXRlIiksaW52ZXJzZTp0KCIuL2ludmVyc2UiKSxub3JtYWxpemU6dCgiLi9ub3JtYWxpemUiKSxkb3Q6dCgiLi9kb3QiKSxsZXJwOnQoIi4vbGVycCIpLHJhbmRvbTp0KCIuL3JhbmRvbSIpLHRyYW5zZm9ybU1hdDQ6dCgiLi90cmFuc2Zvcm1NYXQ0IiksdHJhbnNmb3JtUXVhdDp0KCIuL3RyYW5zZm9ybVF1YXQiKX19LHsiLi9hZGQiOjM5MCwiLi9jbG9uZSI6MzkxLCIuL2NvcHkiOjM5MiwiLi9jcmVhdGUiOjM5MywiLi9kaXN0YW5jZSI6Mzk0LCIuL2RpdmlkZSI6Mzk1LCIuL2RvdCI6Mzk2LCIuL2Zyb21WYWx1ZXMiOjM5NywiLi9pbnZlcnNlIjozOTksIi4vbGVuZ3RoIjo0MDAsIi4vbGVycCI6NDAxLCIuL21heCI6NDAyLCIuL21pbiI6NDAzLCIuL211bHRpcGx5Ijo0MDQsIi4vbmVnYXRlIjo0MDUsIi4vbm9ybWFsaXplIjo0MDYsIi4vcmFuZG9tIjo0MDcsIi4vc2NhbGUiOjQwOCwiLi9zY2FsZUFuZEFkZCI6NDA5LCIuL3NldCI6NDEwLCIuL3NxdWFyZWREaXN0YW5jZSI6NDExLCIuL3NxdWFyZWRMZW5ndGgiOjQxMiwiLi9zdWJ0cmFjdCI6NDEzLCIuL3RyYW5zZm9ybU1hdDQiOjQxNCwiLi90cmFuc2Zvcm1RdWF0Ijo0MTV9XSwzOTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0xL2VbMF0sdFsxXT0xL2VbMV0sdFsyXT0xL2VbMl0sdFszXT0xL2VbM10sdH19LHt9XSw0MDA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXTtyZXR1cm4gTWF0aC5zcXJ0KGUqZStyKnIrbipuK2kqaSl9fSx7fV0sNDAxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWVbMF0sYT1lWzFdLG89ZVsyXSxzPWVbM107cmV0dXJuIHRbMF09aStuKihyWzBdLWkpLHRbMV09YStuKihyWzFdLWEpLHRbMl09bytuKihyWzJdLW8pLHRbM109cytuKihyWzNdLXMpLHR9fSx7fV0sNDAyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1heChlWzBdLHJbMF0pLHRbMV09TWF0aC5tYXgoZVsxXSxyWzFdKSx0WzJdPU1hdGgubWF4KGVbMl0sclsyXSksdFszXT1NYXRoLm1heChlWzNdLHJbM10pLHR9fSx7fV0sNDAzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1pbihlWzBdLHJbMF0pLHRbMV09TWF0aC5taW4oZVsxXSxyWzFdKSx0WzJdPU1hdGgubWluKGVbMl0sclsyXSksdFszXT1NYXRoLm1pbihlWzNdLHJbM10pLHR9fSx7fV0sNDA0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnJbMF0sdFsxXT1lWzFdKnJbMV0sdFsyXT1lWzJdKnJbMl0sdFszXT1lWzNdKnJbM10sdH19LHt9XSw0MDU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0tZVswXSx0WzFdPS1lWzFdLHRbMl09LWVbMl0sdFszXT0tZVszXSx0fX0se31dLDQwNjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yKnIrbipuK2kqaSthKmE7bz4wJiYobz0xL01hdGguc3FydChvKSx0WzBdPXIqbyx0WzFdPW4qbyx0WzJdPWkqbyx0WzNdPWEqbyk7cmV0dXJuIHR9fSx7fV0sNDA3OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9ub3JtYWxpemUiKSxpPXQoIi4vc2NhbGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lfHwxLHRbMF09TWF0aC5yYW5kb20oKSx0WzFdPU1hdGgucmFuZG9tKCksdFsyXT1NYXRoLnJhbmRvbSgpLHRbM109TWF0aC5yYW5kb20oKSxuKHQsdCksaSh0LHQsZSksdH19LHsiLi9ub3JtYWxpemUiOjQwNiwiLi9zY2FsZSI6NDA4fV0sNDA4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdFszXT1lWzNdKnIsdH19LHt9XSw0MDk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0WzJdPWVbMl0rclsyXSpuLHRbM109ZVszXStyWzNdKm4sdH19LHt9XSw0MTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdFswXT1lLHRbMV09cix0WzJdPW4sdFszXT1pLHR9fSx7fV0sNDExOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdLGE9ZVszXS10WzNdO3JldHVybiByKnIrbipuK2kqaSthKmF9fSx7fV0sNDEyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM107cmV0dXJuIGUqZStyKnIrbipuK2kqaX19LHt9XSw0MTM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0tclswXSx0WzFdPWVbMV0tclsxXSx0WzJdPWVbMl0tclsyXSx0WzNdPWVbM10tclszXSx0fX0se31dLDQxNDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbOF0qYStyWzEyXSpvLHRbMV09clsxXSpuK3JbNV0qaStyWzldKmErclsxM10qbyx0WzJdPXJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSpvLHRbM109clszXSpuK3JbN10qaStyWzExXSphK3JbMTVdKm8sdH19LHt9XSw0MTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXSxjPXJbM10sdT1jKm4rcyphLWwqaSxmPWMqaStsKm4tbyphLGg9YyphK28qaS1zKm4scD0tbypuLXMqaS1sKmE7cmV0dXJuIHRbMF09dSpjK3AqLW8rZiotbC1oKi1zLHRbMV09ZipjK3AqLXMraCotby11Ki1sLHRbMl09aCpjK3AqLWwrdSotcy1mKi1vLHRbM109ZVszXSx0fX0se31dLDQxNjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsc2wtdG9rZW5pemVyIiksaT10KCJhdG9iLWxpdGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPUFycmF5LmlzQXJyYXkodCk/dDpuKHQpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGE9ZVtyXTtpZigicHJlcHJvY2Vzc29yIj09PWEudHlwZSl7dmFyIG89YS5kYXRhLm1hdGNoKC9cI2RlZmluZVxzK1NIQURFUl9OQU1FKF9CNjQpP1xzKyguKykkLyk7aWYobyYmb1syXSl7dmFyIHM9b1sxXSxsPW9bMl07cmV0dXJuKHM/aShsKTpsKS50cmltKCl9fX19fSx7ImF0b2ItbGl0ZSI6ODAsImdsc2wtdG9rZW5pemVyIjo0MjN9XSw0MTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixjLHU9MCxmPTAsaD05OTkscD1bXSxkPVtdLG09MSxnPTAsdj0wLHk9ITEseD0hMSxiPSIiLF89YSx3PW47IjMwMCBlcyI9PT0odD10fHx7fSkudmVyc2lvbiYmKF89cyx3PW8pO3ZhciBUPXt9LGs9e307Zm9yKHU9MDt1PF8ubGVuZ3RoO3UrKylUW19bdV1dPSEwO2Zvcih1PTA7dTx3Lmxlbmd0aDt1Kyspa1t3W3VdXT0hMDtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGQ9W10sbnVsbCE9PXQ/ZnVuY3Rpb24odCl7dT0wLHQudG9TdHJpbmcmJih0PXQudG9TdHJpbmcoKSk7dmFyIHI7Yis9dC5yZXBsYWNlKC9cclxuL2csIlxuIiksYz1iLmxlbmd0aDtmb3IoO2U9Ylt1XSx1PGM7KXtzd2l0Y2gocj11LGgpe2Nhc2UgMDp1PUwoKTticmVhaztjYXNlIDE6Y2FzZSAyOnU9RSgpO2JyZWFrO2Nhc2UgMzp1PUMoKTticmVhaztjYXNlIDQ6dT1PKCk7YnJlYWs7Y2FzZSAxMTp1PUkoKTticmVhaztjYXNlIDU6dT16KCk7YnJlYWs7Y2FzZSA5OTk5OnU9RCgpO2JyZWFrO2Nhc2UgOTp1PVMoKTticmVhaztjYXNlIDk5OTp1PU0oKX1pZihyIT09dSlzd2l0Y2goYltyXSl7Y2FzZSJcbiI6Zz0wLCsrbTticmVhaztkZWZhdWx0OisrZ319cmV0dXJuIGYrPXUsYj1iLnNsaWNlKHUpLGR9KHQpOmZ1bmN0aW9uKHQpe3AubGVuZ3RoJiZBKHAuam9pbigiIikpO3JldHVybiBoPTEwLEEoIihlb2YpIiksZH0oKX07ZnVuY3Rpb24gQSh0KXt0Lmxlbmd0aCYmZC5wdXNoKHt0eXBlOmxbaF0sZGF0YTp0LHBvc2l0aW9uOnYsbGluZTptLGNvbHVtbjpnfSl9ZnVuY3Rpb24gTSgpe3JldHVybiBwPXAubGVuZ3RoP1tdOnAsIi8iPT09ciYmIioiPT09ZT8odj1mK3UtMSxoPTAscj1lLHUrMSk6Ii8iPT09ciYmIi8iPT09ZT8odj1mK3UtMSxoPTEscj1lLHUrMSk6IiMiPT09ZT8oaD0yLHY9Zit1LHUpOi9ccy8udGVzdChlKT8oaD05LHY9Zit1LHUpOih5PS9cZC8udGVzdChlKSx4PS9bXlx3X10vLnRlc3QoZSksdj1mK3UsaD15PzQ6eD8zOjk5OTksdSl9ZnVuY3Rpb24gUygpe3JldHVybi9bXlxzXS9nLnRlc3QoZSk/KEEocC5qb2luKCIiKSksaD05OTksdSk6KHAucHVzaChlKSxyPWUsdSsxKX1mdW5jdGlvbiBFKCl7cmV0dXJuIlxyIiE9PWUmJiJcbiIhPT1lfHwiXFwiPT09cj8ocC5wdXNoKGUpLHI9ZSx1KzEpOihBKHAuam9pbigiIikpLGg9OTk5LHUpfWZ1bmN0aW9uIEwoKXtyZXR1cm4iLyI9PT1lJiYiKiI9PT1yPyhwLnB1c2goZSksQShwLmpvaW4oIiIpKSxoPTk5OSx1KzEpOihwLnB1c2goZSkscj1lLHUrMSl9ZnVuY3Rpb24gQygpe2lmKCIuIj09PXImJi9cZC8udGVzdChlKSlyZXR1cm4gaD01LHU7aWYoIi8iPT09ciYmIioiPT09ZSlyZXR1cm4gaD0wLHU7aWYoIi8iPT09ciYmIi8iPT09ZSlyZXR1cm4gaD0xLHU7aWYoIi4iPT09ZSYmcC5sZW5ndGgpe2Zvcig7UChwKTspO3JldHVybiBoPTUsdX1pZigiOyI9PT1lfHwiKSI9PT1lfHwiKCI9PT1lKXtpZihwLmxlbmd0aClmb3IoO1AocCk7KTtyZXR1cm4gQShlKSxoPTk5OSx1KzF9dmFyIHQ9Mj09PXAubGVuZ3RoJiYiPSIhPT1lO2lmKC9bXHdfXGRcc10vLnRlc3QoZSl8fHQpe2Zvcig7UChwKTspO3JldHVybiBoPTk5OSx1fXJldHVybiBwLnB1c2goZSkscj1lLHUrMX1mdW5jdGlvbiBQKHQpe2Zvcih2YXIgZSxyLG49MDs7KXtpZihlPWkuaW5kZXhPZih0LnNsaWNlKDAsdC5sZW5ndGgrbikuam9pbigiIikpLHI9aVtlXSwtMT09PWUpe2lmKG4tLSt0Lmxlbmd0aD4wKWNvbnRpbnVlO3I9dC5zbGljZSgwLDEpLmpvaW4oIiIpfXJldHVybiBBKHIpLHYrPXIubGVuZ3RoLChwPXAuc2xpY2Uoci5sZW5ndGgpKS5sZW5ndGh9fWZ1bmN0aW9uIEkoKXtyZXR1cm4vW15hLWZBLUYwLTldLy50ZXN0KGUpPyhBKHAuam9pbigiIikpLGg9OTk5LHUpOihwLnB1c2goZSkscj1lLHUrMSl9ZnVuY3Rpb24gTygpe3JldHVybiIuIj09PWV8fC9bZUVdLy50ZXN0KGUpPyhwLnB1c2goZSksaD01LHI9ZSx1KzEpOiJ4Ij09PWUmJjE9PT1wLmxlbmd0aCYmIjAiPT09cFswXT8oaD0xMSxwLnB1c2goZSkscj1lLHUrMSk6L1teXGRdLy50ZXN0KGUpPyhBKHAuam9pbigiIikpLGg9OTk5LHUpOihwLnB1c2goZSkscj1lLHUrMSl9ZnVuY3Rpb24geigpe3JldHVybiJmIj09PWUmJihwLnB1c2goZSkscj1lLHUrPTEpLC9bZUVdLy50ZXN0KGUpPyhwLnB1c2goZSkscj1lLHUrMSk6KCItIiE9PWUmJiIrIiE9PWV8fCEvW2VFXS8udGVzdChyKSkmJi9bXlxkXS8udGVzdChlKT8oQShwLmpvaW4oIiIpKSxoPTk5OSx1KToocC5wdXNoKGUpLHI9ZSx1KzEpfWZ1bmN0aW9uIEQoKXtpZigvW15cZFx3X10vLnRlc3QoZSkpe3ZhciB0PXAuam9pbigiIik7cmV0dXJuIGg9a1t0XT84OlRbdF0/Nzo2LEEocC5qb2luKCIiKSksaD05OTksdX1yZXR1cm4gcC5wdXNoKGUpLHI9ZSx1KzF9fTt2YXIgbj10KCIuL2xpYi9saXRlcmFscyIpLGk9dCgiLi9saWIvb3BlcmF0b3JzIiksYT10KCIuL2xpYi9idWlsdGlucyIpLG89dCgiLi9saWIvbGl0ZXJhbHMtMzAwZXMiKSxzPXQoIi4vbGliL2J1aWx0aW5zLTMwMGVzIiksbD1bImJsb2NrLWNvbW1lbnQiLCJsaW5lLWNvbW1lbnQiLCJwcmVwcm9jZXNzb3IiLCJvcGVyYXRvciIsImludGVnZXIiLCJmbG9hdCIsImlkZW50IiwiYnVpbHRpbiIsImtleXdvcmQiLCJ3aGl0ZXNwYWNlIiwiZW9mIiwiaW50ZWdlciJdfSx7Ii4vbGliL2J1aWx0aW5zIjo0MTksIi4vbGliL2J1aWx0aW5zLTMwMGVzIjo0MTgsIi4vbGliL2xpdGVyYWxzIjo0MjEsIi4vbGliL2xpdGVyYWxzLTMwMGVzIjo0MjAsIi4vbGliL29wZXJhdG9ycyI6NDIyfV0sNDE4OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9idWlsdGlucyIpO249bi5zbGljZSgpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIS9eKGdsXF98dGV4dHVyZSkvLnRlc3QodCl9KSksZS5leHBvcnRzPW4uY29uY2F0KFsiZ2xfVmVydGV4SUQiLCJnbF9JbnN0YW5jZUlEIiwiZ2xfUG9zaXRpb24iLCJnbF9Qb2ludFNpemUiLCJnbF9GcmFnQ29vcmQiLCJnbF9Gcm9udEZhY2luZyIsImdsX0ZyYWdEZXB0aCIsImdsX1BvaW50Q29vcmQiLCJnbF9NYXhWZXJ0ZXhBdHRyaWJzIiwiZ2xfTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMiLCJnbF9NYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzIiwiZ2xfTWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMiLCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMiLCJnbF9NYXhEcmF3QnVmZmVycyIsImdsX01pblByb2dyYW1UZXhlbE9mZnNldCIsImdsX01heFByb2dyYW1UZXhlbE9mZnNldCIsImdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIiwiZ2xfRGVwdGhSYW5nZSIsInRydW5jIiwicm91bmQiLCJyb3VuZEV2ZW4iLCJpc25hbiIsImlzaW5mIiwiZmxvYXRCaXRzVG9JbnQiLCJmbG9hdEJpdHNUb1VpbnQiLCJpbnRCaXRzVG9GbG9hdCIsInVpbnRCaXRzVG9GbG9hdCIsInBhY2tTbm9ybTJ4MTYiLCJ1bnBhY2tTbm9ybTJ4MTYiLCJwYWNrVW5vcm0yeDE2IiwidW5wYWNrVW5vcm0yeDE2IiwicGFja0hhbGYyeDE2IiwidW5wYWNrSGFsZjJ4MTYiLCJvdXRlclByb2R1Y3QiLCJ0cmFuc3Bvc2UiLCJkZXRlcm1pbmFudCIsImludmVyc2UiLCJ0ZXh0dXJlIiwidGV4dHVyZVNpemUiLCJ0ZXh0dXJlUHJvaiIsInRleHR1cmVMb2QiLCJ0ZXh0dXJlT2Zmc2V0IiwidGV4ZWxGZXRjaCIsInRleGVsRmV0Y2hPZmZzZXQiLCJ0ZXh0dXJlUHJvak9mZnNldCIsInRleHR1cmVMb2RPZmZzZXQiLCJ0ZXh0dXJlUHJvakxvZCIsInRleHR1cmVQcm9qTG9kT2Zmc2V0IiwidGV4dHVyZUdyYWQiLCJ0ZXh0dXJlR3JhZE9mZnNldCIsInRleHR1cmVQcm9qR3JhZCIsInRleHR1cmVQcm9qR3JhZE9mZnNldCJdKX0seyIuL2J1aWx0aW5zIjo0MTl9XSw0MTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJhYnMiLCJhY29zIiwiYWxsIiwiYW55IiwiYXNpbiIsImF0YW4iLCJjZWlsIiwiY2xhbXAiLCJjb3MiLCJjcm9zcyIsImRGZHgiLCJkRmR5IiwiZGVncmVlcyIsImRpc3RhbmNlIiwiZG90IiwiZXF1YWwiLCJleHAiLCJleHAyIiwiZmFjZWZvcndhcmQiLCJmbG9vciIsImZyYWN0IiwiZ2xfQmFja0NvbG9yIiwiZ2xfQmFja0xpZ2h0TW9kZWxQcm9kdWN0IiwiZ2xfQmFja0xpZ2h0UHJvZHVjdCIsImdsX0JhY2tNYXRlcmlhbCIsImdsX0JhY2tTZWNvbmRhcnlDb2xvciIsImdsX0NsaXBQbGFuZSIsImdsX0NsaXBWZXJ0ZXgiLCJnbF9Db2xvciIsImdsX0RlcHRoUmFuZ2UiLCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIsImdsX0V5ZVBsYW5lUSIsImdsX0V5ZVBsYW5lUiIsImdsX0V5ZVBsYW5lUyIsImdsX0V5ZVBsYW5lVCIsImdsX0ZvZyIsImdsX0ZvZ0Nvb3JkIiwiZ2xfRm9nRnJhZ0Nvb3JkIiwiZ2xfRm9nUGFyYW1ldGVycyIsImdsX0ZyYWdDb2xvciIsImdsX0ZyYWdDb29yZCIsImdsX0ZyYWdEYXRhIiwiZ2xfRnJhZ0RlcHRoIiwiZ2xfRnJhZ0RlcHRoRVhUIiwiZ2xfRnJvbnRDb2xvciIsImdsX0Zyb250RmFjaW5nIiwiZ2xfRnJvbnRMaWdodE1vZGVsUHJvZHVjdCIsImdsX0Zyb250TGlnaHRQcm9kdWN0IiwiZ2xfRnJvbnRNYXRlcmlhbCIsImdsX0Zyb250U2Vjb25kYXJ5Q29sb3IiLCJnbF9MaWdodE1vZGVsIiwiZ2xfTGlnaHRNb2RlbFBhcmFtZXRlcnMiLCJnbF9MaWdodE1vZGVsUHJvZHVjdHMiLCJnbF9MaWdodFByb2R1Y3RzIiwiZ2xfTGlnaHRTb3VyY2UiLCJnbF9MaWdodFNvdXJjZVBhcmFtZXRlcnMiLCJnbF9NYXRlcmlhbFBhcmFtZXRlcnMiLCJnbF9NYXhDbGlwUGxhbmVzIiwiZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heERyYXdCdWZmZXJzIiwiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtQ29tcG9uZW50cyIsImdsX01heExpZ2h0cyIsImdsX01heFRleHR1cmVDb29yZHMiLCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heFRleHR1cmVVbml0cyIsImdsX01heFZhcnlpbmdGbG9hdHMiLCJnbF9NYXhWZXJ0ZXhBdHRyaWJzIiwiZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhWZXJ0ZXhVbmlmb3JtQ29tcG9uZW50cyIsImdsX01vZGVsVmlld01hdHJpeCIsImdsX01vZGVsVmlld01hdHJpeEludmVyc2UiLCJnbF9Nb2RlbFZpZXdNYXRyaXhJbnZlcnNlVHJhbnNwb3NlIiwiZ2xfTW9kZWxWaWV3TWF0cml4VHJhbnNwb3NlIiwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCIsImdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlIiwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeEludmVyc2VUcmFuc3Bvc2UiLCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4VHJhbnNwb3NlIiwiZ2xfTXVsdGlUZXhDb29yZDAiLCJnbF9NdWx0aVRleENvb3JkMSIsImdsX011bHRpVGV4Q29vcmQyIiwiZ2xfTXVsdGlUZXhDb29yZDMiLCJnbF9NdWx0aVRleENvb3JkNCIsImdsX011bHRpVGV4Q29vcmQ1IiwiZ2xfTXVsdGlUZXhDb29yZDYiLCJnbF9NdWx0aVRleENvb3JkNyIsImdsX05vcm1hbCIsImdsX05vcm1hbE1hdHJpeCIsImdsX05vcm1hbFNjYWxlIiwiZ2xfT2JqZWN0UGxhbmVRIiwiZ2xfT2JqZWN0UGxhbmVSIiwiZ2xfT2JqZWN0UGxhbmVTIiwiZ2xfT2JqZWN0UGxhbmVUIiwiZ2xfUG9pbnQiLCJnbF9Qb2ludENvb3JkIiwiZ2xfUG9pbnRQYXJhbWV0ZXJzIiwiZ2xfUG9pbnRTaXplIiwiZ2xfUG9zaXRpb24iLCJnbF9Qcm9qZWN0aW9uTWF0cml4IiwiZ2xfUHJvamVjdGlvbk1hdHJpeEludmVyc2UiLCJnbF9Qcm9qZWN0aW9uTWF0cml4SW52ZXJzZVRyYW5zcG9zZSIsImdsX1Byb2plY3Rpb25NYXRyaXhUcmFuc3Bvc2UiLCJnbF9TZWNvbmRhcnlDb2xvciIsImdsX1RleENvb3JkIiwiZ2xfVGV4dHVyZUVudkNvbG9yIiwiZ2xfVGV4dHVyZU1hdHJpeCIsImdsX1RleHR1cmVNYXRyaXhJbnZlcnNlIiwiZ2xfVGV4dHVyZU1hdHJpeEludmVyc2VUcmFuc3Bvc2UiLCJnbF9UZXh0dXJlTWF0cml4VHJhbnNwb3NlIiwiZ2xfVmVydGV4IiwiZ3JlYXRlclRoYW4iLCJncmVhdGVyVGhhbkVxdWFsIiwiaW52ZXJzZXNxcnQiLCJsZW5ndGgiLCJsZXNzVGhhbiIsImxlc3NUaGFuRXF1YWwiLCJsb2ciLCJsb2cyIiwibWF0cml4Q29tcE11bHQiLCJtYXgiLCJtaW4iLCJtaXgiLCJtb2QiLCJub3JtYWxpemUiLCJub3QiLCJub3RFcXVhbCIsInBvdyIsInJhZGlhbnMiLCJyZWZsZWN0IiwicmVmcmFjdCIsInNpZ24iLCJzaW4iLCJzbW9vdGhzdGVwIiwic3FydCIsInN0ZXAiLCJ0YW4iLCJ0ZXh0dXJlMkQiLCJ0ZXh0dXJlMkRMb2QiLCJ0ZXh0dXJlMkRQcm9qIiwidGV4dHVyZTJEUHJvakxvZCIsInRleHR1cmVDdWJlIiwidGV4dHVyZUN1YmVMb2QiLCJ0ZXh0dXJlMkRMb2RFWFQiLCJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwidGV4dHVyZUN1YmVMb2RFWFQiLCJ0ZXh0dXJlMkRHcmFkRVhUIiwidGV4dHVyZTJEUHJvakdyYWRFWFQiLCJ0ZXh0dXJlQ3ViZUdyYWRFWFQiXX0se31dLDQyMDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vbGl0ZXJhbHMiKTtlLmV4cG9ydHM9bi5zbGljZSgpLmNvbmNhdChbImxheW91dCIsImNlbnRyb2lkIiwic21vb3RoIiwiY2FzZSIsIm1hdDJ4MiIsIm1hdDJ4MyIsIm1hdDJ4NCIsIm1hdDN4MiIsIm1hdDN4MyIsIm1hdDN4NCIsIm1hdDR4MiIsIm1hdDR4MyIsIm1hdDR4NCIsInV2ZWMyIiwidXZlYzMiLCJ1dmVjNCIsInNhbXBsZXJDdWJlU2hhZG93Iiwic2FtcGxlcjJEQXJyYXkiLCJzYW1wbGVyMkRBcnJheVNoYWRvdyIsImlzYW1wbGVyMkQiLCJpc2FtcGxlcjNEIiwiaXNhbXBsZXJDdWJlIiwiaXNhbXBsZXIyREFycmF5IiwidXNhbXBsZXIyRCIsInVzYW1wbGVyM0QiLCJ1c2FtcGxlckN1YmUiLCJ1c2FtcGxlcjJEQXJyYXkiLCJjb2hlcmVudCIsInJlc3RyaWN0IiwicmVhZG9ubHkiLCJ3cml0ZW9ubHkiLCJyZXNvdXJjZSIsImF0b21pY191aW50Iiwibm9wZXJzcGVjdGl2ZSIsInBhdGNoIiwic2FtcGxlIiwic3Vicm91dGluZSIsImNvbW1vbiIsInBhcnRpdGlvbiIsImFjdGl2ZSIsImZpbHRlciIsImltYWdlMUQiLCJpbWFnZTJEIiwiaW1hZ2UzRCIsImltYWdlQ3ViZSIsImlpbWFnZTFEIiwiaWltYWdlMkQiLCJpaW1hZ2UzRCIsImlpbWFnZUN1YmUiLCJ1aW1hZ2UxRCIsInVpbWFnZTJEIiwidWltYWdlM0QiLCJ1aW1hZ2VDdWJlIiwiaW1hZ2UxREFycmF5IiwiaW1hZ2UyREFycmF5IiwiaWltYWdlMURBcnJheSIsImlpbWFnZTJEQXJyYXkiLCJ1aW1hZ2UxREFycmF5IiwidWltYWdlMkRBcnJheSIsImltYWdlMURTaGFkb3ciLCJpbWFnZTJEU2hhZG93IiwiaW1hZ2UxREFycmF5U2hhZG93IiwiaW1hZ2UyREFycmF5U2hhZG93IiwiaW1hZ2VCdWZmZXIiLCJpaW1hZ2VCdWZmZXIiLCJ1aW1hZ2VCdWZmZXIiLCJzYW1wbGVyMURBcnJheSIsInNhbXBsZXIxREFycmF5U2hhZG93IiwiaXNhbXBsZXIxRCIsImlzYW1wbGVyMURBcnJheSIsInVzYW1wbGVyMUQiLCJ1c2FtcGxlcjFEQXJyYXkiLCJpc2FtcGxlcjJEUmVjdCIsInVzYW1wbGVyMkRSZWN0Iiwic2FtcGxlckJ1ZmZlciIsImlzYW1wbGVyQnVmZmVyIiwidXNhbXBsZXJCdWZmZXIiLCJzYW1wbGVyMkRNUyIsImlzYW1wbGVyMkRNUyIsInVzYW1wbGVyMkRNUyIsInNhbXBsZXIyRE1TQXJyYXkiLCJpc2FtcGxlcjJETVNBcnJheSIsInVzYW1wbGVyMkRNU0FycmF5Il0pfSx7Ii4vbGl0ZXJhbHMiOjQyMX1dLDQyMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bInByZWNpc2lvbiIsImhpZ2hwIiwibWVkaXVtcCIsImxvd3AiLCJhdHRyaWJ1dGUiLCJjb25zdCIsInVuaWZvcm0iLCJ2YXJ5aW5nIiwiYnJlYWsiLCJjb250aW51ZSIsImRvIiwiZm9yIiwid2hpbGUiLCJpZiIsImVsc2UiLCJpbiIsIm91dCIsImlub3V0IiwiZmxvYXQiLCJpbnQiLCJ1aW50Iiwidm9pZCIsImJvb2wiLCJ0cnVlIiwiZmFsc2UiLCJkaXNjYXJkIiwicmV0dXJuIiwibWF0MiIsIm1hdDMiLCJtYXQ0IiwidmVjMiIsInZlYzMiLCJ2ZWM0IiwiaXZlYzIiLCJpdmVjMyIsIml2ZWM0IiwiYnZlYzIiLCJidmVjMyIsImJ2ZWM0Iiwic2FtcGxlcjFEIiwic2FtcGxlcjJEIiwic2FtcGxlcjNEIiwic2FtcGxlckN1YmUiLCJzYW1wbGVyMURTaGFkb3ciLCJzYW1wbGVyMkRTaGFkb3ciLCJzdHJ1Y3QiLCJhc20iLCJjbGFzcyIsInVuaW9uIiwiZW51bSIsInR5cGVkZWYiLCJ0ZW1wbGF0ZSIsInRoaXMiLCJwYWNrZWQiLCJnb3RvIiwic3dpdGNoIiwiZGVmYXVsdCIsImlubGluZSIsIm5vaW5saW5lIiwidm9sYXRpbGUiLCJwdWJsaWMiLCJzdGF0aWMiLCJleHRlcm4iLCJleHRlcm5hbCIsImludGVyZmFjZSIsImxvbmciLCJzaG9ydCIsImRvdWJsZSIsImhhbGYiLCJmaXhlZCIsInVuc2lnbmVkIiwiaW5wdXQiLCJvdXRwdXQiLCJodmVjMiIsImh2ZWMzIiwiaHZlYzQiLCJkdmVjMiIsImR2ZWMzIiwiZHZlYzQiLCJmdmVjMiIsImZ2ZWMzIiwiZnZlYzQiLCJzYW1wbGVyMkRSZWN0Iiwic2FtcGxlcjNEUmVjdCIsInNhbXBsZXIyRFJlY3RTaGFkb3ciLCJzaXplb2YiLCJjYXN0IiwibmFtZXNwYWNlIiwidXNpbmciXX0se31dLDQyMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bIjw8PSIsIj4+PSIsIisrIiwiLS0iLCI8PCIsIj4+IiwiPD0iLCI+PSIsIj09IiwiIT0iLCImJiIsInx8IiwiKz0iLCItPSIsIio9IiwiLz0iLCIlPSIsIiY9IiwiXl4iLCJePSIsInw9IiwiKCIsIikiLCJbIiwiXSIsIi4iLCIhIiwifiIsIioiLCIvIiwiJSIsIisiLCItIiwiPCIsIj4iLCImIiwiXiIsInwiLCI/IiwiOiIsIj0iLCIsIiwiOyIsInsiLCJ9Il19LHt9XSw0MjM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2luZGV4Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlKSxpPVtdO3JldHVybiBpPShpPWkuY29uY2F0KHIodCkpKS5jb25jYXQocihudWxsKSl9fSx7Ii4vaW5kZXgiOjQxN31dLDQyNDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXsic3RyaW5nIj09dHlwZW9mIHQmJih0PVt0XSk7Zm9yKHZhciBlPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHI9W10sbj0wO248dC5sZW5ndGgtMTtuKyspci5wdXNoKHRbbl0sZVtuXXx8IiIpO3JldHVybiByLnB1c2godFtuXSksci5qb2luKCIiKX19LHt9XSw0MjU6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiaXMtYnJvd3NlciIpO249ImZ1bmN0aW9uIj09dHlwZW9mIHIubWF0Y2hNZWRpYT8hci5tYXRjaE1lZGlhKCIoaG92ZXI6IG5vbmUpIikubWF0Y2hlczppLGUuZXhwb3J0cz1ufSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJpcy1icm93c2VyIjo0MzJ9XSw0MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiaXMtYnJvd3NlciIpO2UuZXhwb3J0cz1uJiZmdW5jdGlvbigpe3ZhciB0PSExO3RyeXt2YXIgZT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXt0PSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpfWNhdGNoKGUpe3Q9ITF9cmV0dXJuIHR9KCl9LHsiaXMtYnJvd3NlciI6NDMyfV0sNDI3OltmdW5jdGlvbih0LGUscil7Ci8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovCnIucmVhZD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scz04Kmktbi0xLGw9KDE8PHMpLTEsYz1sPj4xLHU9LTcsZj1yP2ktMTowLGg9cj8tMToxLHA9dFtlK2ZdO2ZvcihmKz1oLGE9cCYoMTw8LXUpLTEscD4+PS11LHUrPXM7dT4wO2E9MjU2KmErdFtlK2ZdLGYrPWgsdS09OCk7Zm9yKG89YSYoMTw8LXUpLTEsYT4+PS11LHUrPW47dT4wO289MjU2Km8rdFtlK2ZdLGYrPWgsdS09OCk7aWYoMD09PWEpYT0xLWM7ZWxzZXtpZihhPT09bClyZXR1cm4gbz9OYU46MS8wKihwPy0xOjEpO28rPU1hdGgucG93KDIsbiksYS09Y31yZXR1cm4ocD8tMToxKSpvKk1hdGgucG93KDIsYS1uKX0sci53cml0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scyxsLGM9OCphLWktMSx1PSgxPDxjKS0xLGY9dT4+MSxoPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAscD1uPzA6YS0xLGQ9bj8xOi0xLG09ZTwwfHwwPT09ZSYmMS9lPDA/MTowO2ZvcihlPU1hdGguYWJzKGUpLGlzTmFOKGUpfHxlPT09MS8wPyhzPWlzTmFOKGUpPzE6MCxvPXUpOihvPU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjIpLGUqKGw9TWF0aC5wb3coMiwtbykpPDEmJihvLS0sbCo9MiksKGUrPW8rZj49MT9oL2w6aCpNYXRoLnBvdygyLDEtZikpKmw+PTImJihvKyssbC89MiksbytmPj11PyhzPTAsbz11KTpvK2Y+PTE/KHM9KGUqbC0xKSpNYXRoLnBvdygyLGkpLG8rPWYpOihzPWUqTWF0aC5wb3coMixmLTEpKk1hdGgucG93KDIsaSksbz0wKSk7aT49ODt0W3IrcF09MjU1JnMscCs9ZCxzLz0yNTYsaS09OCk7Zm9yKG89bzw8aXxzLGMrPWk7Yz4wO3RbcitwXT0yNTUmbyxwKz1kLG8vPTI1NixjLT04KTt0W3IrcC1kXXw9MTI4Km19fSx7fV0sNDI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKDA9PT1yKXRocm93IG5ldyBFcnJvcigiTXVzdCBoYXZlIGF0IGxlYXN0IGQrMSBwb2ludHMiKTt2YXIgaT10WzBdLmxlbmd0aDtpZihyPD1pKXRocm93IG5ldyBFcnJvcigiTXVzdCBpbnB1dCBhdCBsZWFzdCBkKzEgcG9pbnRzIik7dmFyIG89dC5zbGljZSgwLGkrMSkscz1uLmFwcGx5KHZvaWQgMCxvKTtpZigwPT09cyl0aHJvdyBuZXcgRXJyb3IoIklucHV0IG5vdCBpbiBnZW5lcmFsIHBvc2l0aW9uIik7Zm9yKHZhciBsPW5ldyBBcnJheShpKzEpLHU9MDt1PD1pOysrdSlsW3VdPXU7czwwJiYobFswXT0xLGxbMV09MCk7dmFyIGY9bmV3IGEobCxuZXcgQXJyYXkoaSsxKSwhMSksaD1mLmFkamFjZW50LHA9bmV3IEFycmF5KGkrMik7Zm9yKHU9MDt1PD1pOysrdSl7Zm9yKHZhciBkPWwuc2xpY2UoKSxtPTA7bTw9aTsrK20pbT09PXUmJihkW21dPS0xKTt2YXIgZz1kWzBdO2RbMF09ZFsxXSxkWzFdPWc7dmFyIHY9bmV3IGEoZCxuZXcgQXJyYXkoaSsxKSwhMCk7aFt1XT12LHBbdV09dn1wW2krMV09Zjtmb3IodT0wO3U8PWk7Kyt1KXtkPWhbdV0udmVydGljZXM7dmFyIHk9aFt1XS5hZGphY2VudDtmb3IobT0wO208PWk7KyttKXt2YXIgeD1kW21dO2lmKHg8MCl5W21dPWY7ZWxzZSBmb3IodmFyIGI9MDtiPD1pOysrYiloW2JdLnZlcnRpY2VzLmluZGV4T2YoeCk8MCYmKHlbbV09aFtiXSl9fXZhciBfPW5ldyBjKGksbyxwKSx3PSEhZTtmb3IodT1pKzE7dTxyOysrdSlfLmluc2VydCh0W3VdLHcpO3JldHVybiBfLmJvdW5kYXJ5KCl9O3ZhciBuPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLGk9dCgic2ltcGxpY2lhbC1jb21wbGV4IikuY29tcGFyZUNlbGxzO2Z1bmN0aW9uIGEodCxlLHIpe3RoaXMudmVydGljZXM9dCx0aGlzLmFkamFjZW50PWUsdGhpcy5ib3VuZGFyeT1yLHRoaXMubGFzdFZpc2l0ZWQ9LTF9ZnVuY3Rpb24gbyh0LGUscil7dGhpcy52ZXJ0aWNlcz10LHRoaXMuY2VsbD1lLHRoaXMuaW5kZXg9cn1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIGkodC52ZXJ0aWNlcyxlLnZlcnRpY2VzKX1hLnByb3RvdHlwZS5mbGlwPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52ZXJ0aWNlc1swXTt0aGlzLnZlcnRpY2VzWzBdPXRoaXMudmVydGljZXNbMV0sdGhpcy52ZXJ0aWNlc1sxXT10O3ZhciBlPXRoaXMuYWRqYWNlbnRbMF07dGhpcy5hZGphY2VudFswXT10aGlzLmFkamFjZW50WzFdLHRoaXMuYWRqYWNlbnRbMV09ZX07dmFyIGw9W107ZnVuY3Rpb24gYyh0LGUscil7dGhpcy5kaW1lbnNpb249dCx0aGlzLnZlcnRpY2VzPWUsdGhpcy5zaW1wbGljZXM9cix0aGlzLmludGVyaW9yPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hdC5ib3VuZGFyeX0pKSx0aGlzLnR1cGxlPW5ldyBBcnJheSh0KzEpO2Zvcih2YXIgaT0wO2k8PXQ7KytpKXRoaXMudHVwbGVbaV09dGhpcy52ZXJ0aWNlc1tpXTt2YXIgYSxvPWxbdF07b3x8KG89bFt0XT0oKGE9blt0KzFdKXx8KGE9biksZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50dXBsZTtyZXR1cm4gdC5hcHBseSh0aGlzLGUpfX0oYSkpKSx0aGlzLm9yaWVudD1vfXZhciB1PWMucHJvdG90eXBlO3UuaGFuZGxlQm91bmRhcnlEZWdlbmVyYWN5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kaW1lbnNpb24sbj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xLGk9dGhpcy50dXBsZSxhPXRoaXMudmVydGljZXMsbz1bdF07Zm9yKHQubGFzdFZpc2l0ZWQ9LW47by5sZW5ndGg+MDspZm9yKHZhciBzPSh0PW8ucG9wKCkpLmFkamFjZW50LGw9MDtsPD1yOysrbCl7dmFyIGM9c1tsXTtpZihjLmJvdW5kYXJ5JiYhKGMubGFzdFZpc2l0ZWQ8PS1uKSl7Zm9yKHZhciB1PWMudmVydGljZXMsZj0wO2Y8PXI7KytmKXt2YXIgaD11W2ZdO2lbZl09aDwwP2U6YVtoXX12YXIgcD10aGlzLm9yaWVudCgpO2lmKHA+MClyZXR1cm4gYztjLmxhc3RWaXNpdGVkPS1uLDA9PT1wJiZvLnB1c2goYyl9fXJldHVybiBudWxsfSx1LndhbGs9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xLG49dGhpcy5kaW1lbnNpb24saT10aGlzLnZlcnRpY2VzLGE9dGhpcy50dXBsZSxvPWU/dGhpcy5pbnRlcmlvci5sZW5ndGgqTWF0aC5yYW5kb20oKXwwOnRoaXMuaW50ZXJpb3IubGVuZ3RoLTEscz10aGlzLmludGVyaW9yW29dO3Q6Zm9yKDshcy5ib3VuZGFyeTspe2Zvcih2YXIgbD1zLnZlcnRpY2VzLGM9cy5hZGphY2VudCx1PTA7dTw9bjsrK3UpYVt1XT1pW2xbdV1dO3MubGFzdFZpc2l0ZWQ9cjtmb3IodT0wO3U8PW47Kyt1KXt2YXIgZj1jW3VdO2lmKCEoZi5sYXN0VmlzaXRlZD49cikpe3ZhciBoPWFbdV07YVt1XT10O3ZhciBwPXRoaXMub3JpZW50KCk7aWYoYVt1XT1oLHA8MCl7cz1mO2NvbnRpbnVlIHR9Zi5ib3VuZGFyeT9mLmxhc3RWaXNpdGVkPS1yOmYubGFzdFZpc2l0ZWQ9cn19cmV0dXJufXJldHVybiBzfSx1LmFkZFBlYWtzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMSxuPXRoaXMuZGltZW5zaW9uLGk9dGhpcy52ZXJ0aWNlcyxsPXRoaXMudHVwbGUsYz10aGlzLmludGVyaW9yLHU9dGhpcy5zaW1wbGljZXMsZj1bZV07ZS5sYXN0VmlzaXRlZD1yLGUudmVydGljZXNbZS52ZXJ0aWNlcy5pbmRleE9mKC0xKV09cixlLmJvdW5kYXJ5PSExLGMucHVzaChlKTtmb3IodmFyIGg9W107Zi5sZW5ndGg+MDspe3ZhciBwPShlPWYucG9wKCkpLnZlcnRpY2VzLGQ9ZS5hZGphY2VudCxtPXAuaW5kZXhPZihyKTtpZighKG08MCkpZm9yKHZhciBnPTA7Zzw9bjsrK2cpaWYoZyE9PW0pe3ZhciB2PWRbZ107aWYodi5ib3VuZGFyeSYmISh2Lmxhc3RWaXNpdGVkPj1yKSl7dmFyIHk9di52ZXJ0aWNlcztpZih2Lmxhc3RWaXNpdGVkIT09LXIpe2Zvcih2YXIgeD0wLGI9MDtiPD1uOysrYil5W2JdPDA/KHg9YixsW2JdPXQpOmxbYl09aVt5W2JdXTtpZih0aGlzLm9yaWVudCgpPjApe3lbeF09cix2LmJvdW5kYXJ5PSExLGMucHVzaCh2KSxmLnB1c2godiksdi5sYXN0VmlzaXRlZD1yO2NvbnRpbnVlfXYubGFzdFZpc2l0ZWQ9LXJ9dmFyIF89di5hZGphY2VudCx3PXAuc2xpY2UoKSxUPWQuc2xpY2UoKSxrPW5ldyBhKHcsVCwhMCk7dS5wdXNoKGspO3ZhciBBPV8uaW5kZXhPZihlKTtpZighKEE8MCkpe19bQV09ayxUW21dPXYsd1tnXT0tMSxUW2ddPWUsZFtnXT1rLGsuZmxpcCgpO2ZvcihiPTA7Yjw9bjsrK2Ipe3ZhciBNPXdbYl07aWYoIShNPDB8fE09PT1yKSl7Zm9yKHZhciBTPW5ldyBBcnJheShuLTEpLEU9MCxMPTA7TDw9bjsrK0wpe3ZhciBDPXdbTF07QzwwfHxMPT09Ynx8KFNbRSsrXT1DKX1oLnB1c2gobmV3IG8oUyxrLGIpKX19fX19fWguc29ydChzKTtmb3IoZz0wO2crMTxoLmxlbmd0aDtnKz0yKXt2YXIgUD1oW2ddLEk9aFtnKzFdLE89UC5pbmRleCx6PUkuaW5kZXg7TzwwfHx6PDB8fChQLmNlbGwuYWRqYWNlbnRbUC5pbmRleF09SS5jZWxsLEkuY2VsbC5hZGphY2VudFtJLmluZGV4XT1QLmNlbGwpfX0sdS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnZlcnRpY2VzO3IucHVzaCh0KTt2YXIgbj10aGlzLndhbGsodCxlKTtpZihuKXtmb3IodmFyIGk9dGhpcy5kaW1lbnNpb24sYT10aGlzLnR1cGxlLG89MDtvPD1pOysrbyl7dmFyIHM9bi52ZXJ0aWNlc1tvXTthW29dPXM8MD90OnJbc119dmFyIGw9dGhpcy5vcmllbnQoYSk7bDwwfHwoMCE9PWx8fChuPXRoaXMuaGFuZGxlQm91bmRhcnlEZWdlbmVyYWN5KG4sdCkpKSYmdGhpcy5hZGRQZWFrcyh0LG4pfX0sdS5ib3VuZGFyeT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmRpbWVuc2lvbixlPVtdLHI9dGhpcy5zaW1wbGljZXMsbj1yLmxlbmd0aCxpPTA7aTxuOysraSl7dmFyIGE9cltpXTtpZihhLmJvdW5kYXJ5KXtmb3IodmFyIG89bmV3IEFycmF5KHQpLHM9YS52ZXJ0aWNlcyxsPTAsYz0wLHU9MDt1PD10OysrdSlzW3VdPj0wP29bbCsrXT1zW3VdOmM9MSZ1O2lmKGM9PT0oMSZ0KSl7dmFyIGY9b1swXTtvWzBdPW9bMV0sb1sxXT1mfWUucHVzaChvKX19cmV0dXJuIGV9fSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NTI0LCJzaW1wbGljaWFsLWNvbXBsZXgiOjUzNH1dLDQyOTpbZnVuY3Rpb24odCxlLHIpeyJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2UmJih0LnN1cGVyXz1lLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pKX06ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH19fSx7fV0sNDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZnVuY3Rpb24gaSh0LGUscixuLGkpe3RoaXMubWlkPXQsdGhpcy5sZWZ0PWUsdGhpcy5yaWdodD1yLHRoaXMubGVmdFBvaW50cz1uLHRoaXMucmlnaHRQb2ludHM9aSx0aGlzLmNvdW50PShlP2UuY291bnQ6MCkrKHI/ci5jb3VudDowKStuLmxlbmd0aH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIXR8fDA9PT10Lmxlbmd0aClyZXR1cm4gbmV3IHYobnVsbCk7cmV0dXJuIG5ldyB2KGcodCkpfTt2YXIgYT1pLnByb3RvdHlwZTtmdW5jdGlvbiBvKHQsZSl7dC5taWQ9ZS5taWQsdC5sZWZ0PWUubGVmdCx0LnJpZ2h0PWUucmlnaHQsdC5sZWZ0UG9pbnRzPWUubGVmdFBvaW50cyx0LnJpZ2h0UG9pbnRzPWUucmlnaHRQb2ludHMsdC5jb3VudD1lLmNvdW50fWZ1bmN0aW9uIHModCxlKXt2YXIgcj1nKGUpO3QubWlkPXIubWlkLHQubGVmdD1yLmxlZnQsdC5yaWdodD1yLnJpZ2h0LHQubGVmdFBvaW50cz1yLmxlZnRQb2ludHMsdC5yaWdodFBvaW50cz1yLnJpZ2h0UG9pbnRzLHQuY291bnQ9ci5jb3VudH1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9dC5pbnRlcnZhbHMoW10pO3IucHVzaChlKSxzKHQscil9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPXQuaW50ZXJ2YWxzKFtdKSxuPXIuaW5kZXhPZihlKTtyZXR1cm4gbjwwPzA6KHIuc3BsaWNlKG4sMSkscyh0LHIpLDEpfWZ1bmN0aW9uIHUodCxlLHIpe2Zvcih2YXIgbj0wO248dC5sZW5ndGgmJnRbbl1bMF08PWU7KytuKXt2YXIgaT1yKHRbbl0pO2lmKGkpcmV0dXJuIGl9fWZ1bmN0aW9uIGYodCxlLHIpe2Zvcih2YXIgbj10Lmxlbmd0aC0xO24+PTAmJnRbbl1bMV0+PWU7LS1uKXt2YXIgaT1yKHRbbl0pO2lmKGkpcmV0dXJuIGl9fWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49ZSh0W3JdKTtpZihuKXJldHVybiBufX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHQtZX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dFswXS1lWzBdO3JldHVybiByfHx0WzFdLWVbMV19ZnVuY3Rpb24gbSh0LGUpe3ZhciByPXRbMV0tZVsxXTtyZXR1cm4gcnx8dFswXS1lWzBdfWZ1bmN0aW9uIGcodCl7aWYoMD09PXQubGVuZ3RoKXJldHVybiBudWxsO2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKHRbcl1bMF0sdFtyXVsxXSk7ZS5zb3J0KHApO3ZhciBuPWVbZS5sZW5ndGg+PjFdLGE9W10sbz1bXSxzPVtdO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBsPXRbcl07bFsxXTxuP2EucHVzaChsKTpuPGxbMF0/by5wdXNoKGwpOnMucHVzaChsKX12YXIgYz1zLHU9cy5zbGljZSgpO3JldHVybiBjLnNvcnQoZCksdS5zb3J0KG0pLG5ldyBpKG4sZyhhKSxnKG8pLGMsdSl9ZnVuY3Rpb24gdih0KXt0aGlzLnJvb3Q9dH1hLmludGVydmFscz1mdW5jdGlvbih0KXtyZXR1cm4gdC5wdXNoLmFwcGx5KHQsdGhpcy5sZWZ0UG9pbnRzKSx0aGlzLmxlZnQmJnRoaXMubGVmdC5pbnRlcnZhbHModCksdGhpcy5yaWdodCYmdGhpcy5yaWdodC5pbnRlcnZhbHModCksdH0sYS5pbnNlcnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb3VudC10aGlzLmxlZnRQb2ludHMubGVuZ3RoO2lmKHRoaXMuY291bnQrPTEsdFsxXTx0aGlzLm1pZCl0aGlzLmxlZnQ/NCoodGhpcy5sZWZ0LmNvdW50KzEpPjMqKGUrMSk/bCh0aGlzLHQpOnRoaXMubGVmdC5pbnNlcnQodCk6dGhpcy5sZWZ0PWcoW3RdKTtlbHNlIGlmKHRbMF0+dGhpcy5taWQpdGhpcy5yaWdodD80Kih0aGlzLnJpZ2h0LmNvdW50KzEpPjMqKGUrMSk/bCh0aGlzLHQpOnRoaXMucmlnaHQuaW5zZXJ0KHQpOnRoaXMucmlnaHQ9ZyhbdF0pO2Vsc2V7dmFyIHI9bi5nZSh0aGlzLmxlZnRQb2ludHMsdCxkKSxpPW4uZ2UodGhpcy5yaWdodFBvaW50cyx0LG0pO3RoaXMubGVmdFBvaW50cy5zcGxpY2UociwwLHQpLHRoaXMucmlnaHRQb2ludHMuc3BsaWNlKGksMCx0KX19LGEucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY291bnQtdGhpcy5sZWZ0UG9pbnRzO2lmKHRbMV08dGhpcy5taWQpcmV0dXJuIHRoaXMubGVmdD80Kih0aGlzLnJpZ2h0P3RoaXMucmlnaHQuY291bnQ6MCk+MyooZS0xKT9jKHRoaXMsdCk6Mj09PShzPXRoaXMubGVmdC5yZW1vdmUodCkpPyh0aGlzLmxlZnQ9bnVsbCx0aGlzLmNvdW50LT0xLDEpOigxPT09cyYmKHRoaXMuY291bnQtPTEpLHMpOjA7aWYodFswXT50aGlzLm1pZClyZXR1cm4gdGhpcy5yaWdodD80Kih0aGlzLmxlZnQ/dGhpcy5sZWZ0LmNvdW50OjApPjMqKGUtMSk/Yyh0aGlzLHQpOjI9PT0ocz10aGlzLnJpZ2h0LnJlbW92ZSh0KSk/KHRoaXMucmlnaHQ9bnVsbCx0aGlzLmNvdW50LT0xLDEpOigxPT09cyYmKHRoaXMuY291bnQtPTEpLHMpOjA7aWYoMT09PXRoaXMuY291bnQpcmV0dXJuIHRoaXMubGVmdFBvaW50c1swXT09PXQ/MjowO2lmKDE9PT10aGlzLmxlZnRQb2ludHMubGVuZ3RoJiZ0aGlzLmxlZnRQb2ludHNbMF09PT10KXtpZih0aGlzLmxlZnQmJnRoaXMucmlnaHQpe2Zvcih2YXIgcj10aGlzLGk9dGhpcy5sZWZ0O2kucmlnaHQ7KXI9aSxpPWkucmlnaHQ7aWYocj09PXRoaXMpaS5yaWdodD10aGlzLnJpZ2h0O2Vsc2V7dmFyIGE9dGhpcy5sZWZ0LHM9dGhpcy5yaWdodDtyLmNvdW50LT1pLmNvdW50LHIucmlnaHQ9aS5sZWZ0LGkubGVmdD1hLGkucmlnaHQ9c31vKHRoaXMsaSksdGhpcy5jb3VudD0odGhpcy5sZWZ0P3RoaXMubGVmdC5jb3VudDowKSsodGhpcy5yaWdodD90aGlzLnJpZ2h0LmNvdW50OjApK3RoaXMubGVmdFBvaW50cy5sZW5ndGh9ZWxzZSB0aGlzLmxlZnQ/byh0aGlzLHRoaXMubGVmdCk6byh0aGlzLHRoaXMucmlnaHQpO3JldHVybiAxfWZvcihhPW4uZ2UodGhpcy5sZWZ0UG9pbnRzLHQsZCk7YTx0aGlzLmxlZnRQb2ludHMubGVuZ3RoJiZ0aGlzLmxlZnRQb2ludHNbYV1bMF09PT10WzBdOysrYSlpZih0aGlzLmxlZnRQb2ludHNbYV09PT10KXt0aGlzLmNvdW50LT0xLHRoaXMubGVmdFBvaW50cy5zcGxpY2UoYSwxKTtmb3Iocz1uLmdlKHRoaXMucmlnaHRQb2ludHMsdCxtKTtzPHRoaXMucmlnaHRQb2ludHMubGVuZ3RoJiZ0aGlzLnJpZ2h0UG9pbnRzW3NdWzFdPT09dFsxXTsrK3MpaWYodGhpcy5yaWdodFBvaW50c1tzXT09PXQpcmV0dXJuIHRoaXMucmlnaHRQb2ludHMuc3BsaWNlKHMsMSksMX1yZXR1cm4gMH0sYS5xdWVyeVBvaW50PWZ1bmN0aW9uKHQsZSl7aWYodDx0aGlzLm1pZCl7aWYodGhpcy5sZWZ0KWlmKHI9dGhpcy5sZWZ0LnF1ZXJ5UG9pbnQodCxlKSlyZXR1cm4gcjtyZXR1cm4gdSh0aGlzLmxlZnRQb2ludHMsdCxlKX1pZih0PnRoaXMubWlkKXt2YXIgcjtpZih0aGlzLnJpZ2h0KWlmKHI9dGhpcy5yaWdodC5xdWVyeVBvaW50KHQsZSkpcmV0dXJuIHI7cmV0dXJuIGYodGhpcy5yaWdodFBvaW50cyx0LGUpfXJldHVybiBoKHRoaXMubGVmdFBvaW50cyxlKX0sYS5xdWVyeUludGVydmFsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtpZih0PHRoaXMubWlkJiZ0aGlzLmxlZnQmJihuPXRoaXMubGVmdC5xdWVyeUludGVydmFsKHQsZSxyKSkpcmV0dXJuIG47aWYoZT50aGlzLm1pZCYmdGhpcy5yaWdodCYmKG49dGhpcy5yaWdodC5xdWVyeUludGVydmFsKHQsZSxyKSkpcmV0dXJuIG47cmV0dXJuIGU8dGhpcy5taWQ/dSh0aGlzLmxlZnRQb2ludHMsZSxyKTp0PnRoaXMubWlkP2YodGhpcy5yaWdodFBvaW50cyx0LHIpOmgodGhpcy5sZWZ0UG9pbnRzLHIpfTt2YXIgeT12LnByb3RvdHlwZTt5Lmluc2VydD1mdW5jdGlvbih0KXt0aGlzLnJvb3Q/dGhpcy5yb290Lmluc2VydCh0KTp0aGlzLnJvb3Q9bmV3IGkodFswXSxudWxsLG51bGwsW3RdLFt0XSl9LHkucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKHRoaXMucm9vdCl7dmFyIGU9dGhpcy5yb290LnJlbW92ZSh0KTtyZXR1cm4gMj09PWUmJih0aGlzLnJvb3Q9bnVsbCksMCE9PWV9cmV0dXJuITF9LHkucXVlcnlQb2ludD1mdW5jdGlvbih0LGUpe2lmKHRoaXMucm9vdClyZXR1cm4gdGhpcy5yb290LnF1ZXJ5UG9pbnQodCxlKX0seS5xdWVyeUludGVydmFsPWZ1bmN0aW9uKHQsZSxyKXtpZih0PD1lJiZ0aGlzLnJvb3QpcmV0dXJuIHRoaXMucm9vdC5xdWVyeUludGVydmFsKHQsZSxyKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHksImNvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuY291bnQ6MH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiaW50ZXJ2YWxzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuaW50ZXJ2YWxzKFtdKTpbXX19KX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTAwfV0sNDMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09cjtyZXR1cm4gZX19LHt9XSw0MzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ITB9LHt9XSw0MzM6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3JldHVybiEhdC5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY29uc3RydWN0b3IuaXNCdWZmZXImJnQuY29uc3RydWN0b3IuaXNCdWZmZXIodCl9Ci8qIQogKiBEZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgQnVmZmVyCiAqCiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+CiAqIEBsaWNlbnNlICBNSVQKICovCmUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmKG4odCl8fGZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zbGljZSYmbih0LnNsaWNlKDAsMCkpfSh0KXx8ISF0Ll9pc0J1ZmZlcil9fSx7fV0sNDM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmKC9NU0lFLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpfHwvVHJpZGVudFwvLy50ZXN0KG5hdmlnYXRvci5hcHBWZXJzaW9uKSl9LHt9XSw0MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWEsZS5leHBvcnRzLmlzTW9iaWxlPWEsZS5leHBvcnRzLmRlZmF1bHQ9YTt2YXIgbj0vKGFuZHJvaWR8YmJcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXNbNDZdMHxzeW1iaWFufHRyZW98dXBcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIChjZXxwaG9uZSl8eGRhfHhpaW5vL2ksaT0vKGFuZHJvaWR8YmJcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXNbNDZdMHxzeW1iaWFufHRyZW98dXBcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIChjZXxwaG9uZSl8eGRhfHhpaW5vfGFuZHJvaWR8aXBhZHxwbGF5Ym9va3xzaWxrL2k7ZnVuY3Rpb24gYSh0KXt0fHwodD17fSk7dmFyIGU9dC51YTtpZihlfHwidW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcnx8KGU9bmF2aWdhdG9yLnVzZXJBZ2VudCksZSYmZS5oZWFkZXJzJiYic3RyaW5nIj09dHlwZW9mIGUuaGVhZGVyc1sidXNlci1hZ2VudCJdJiYoZT1lLmhlYWRlcnNbInVzZXItYWdlbnQiXSksInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiExO3ZhciByPXQudGFibGV0P2kudGVzdChlKTpuLnRlc3QoZSk7cmV0dXJuIXImJnQudGFibGV0JiZ0LmZlYXR1cmVEZXRlY3QmJm5hdmlnYXRvciYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjEmJi0xIT09ZS5pbmRleE9mKCJNYWNpbnRvc2giKSYmLTEhPT1lLmluZGV4T2YoIlNhZmFyaSIpJiYocj0hMCkscn19LHt9XSw0MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBudWxsIT09dCYmKCJvYmplY3QiPT09ZXx8ImZ1bmN0aW9uIj09PWUpfX0se31dLDQzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PW4uY2FsbCh0KSYmKG51bGw9PT0oZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpfHxlPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHt9KSl9fSx7fV0sNDM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxuPTA7bjxyO24rKylpZigoKGU9dC5jaGFyQ29kZUF0KG4pKTw5fHxlPjEzKSYmMzIhPT1lJiYxMzMhPT1lJiYxNjAhPT1lJiY1NzYwIT09ZSYmNjE1OCE9PWUmJihlPDgxOTJ8fGU+ODIwNSkmJjgyMzIhPT1lJiY4MjMzIT09ZSYmODIzOSE9PWUmJjgyODchPT1lJiY4Mjg4IT09ZSYmMTIyODghPT1lJiY2NTI3OSE9PWUpcmV0dXJuITE7cmV0dXJuITB9fSx7fV0sNDM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJih0PXQudHJpbSgpLCEhKC9eW216bGh2Y3NxdGFdXHMqWy0rLjAtOV1bXm1saHZ6Y3NxdGFdKy9pLnRlc3QodCkmJi9bXGR6XSQvaS50ZXN0KHQpJiZ0Lmxlbmd0aD40KSl9fSx7fV0sNDQwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCooMS1yKStlKnJ9fSx7fV0sNDQxOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP2UuZXhwb3J0cz1uKCk6KHQ9dHx8c2VsZikubWFwYm94Z2w9bigpfSh0aGlzLChmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdCxlLHI7ZnVuY3Rpb24gbihuLGkpe2lmKHQpaWYoZSl7dmFyIGE9InZhciBzaGFyZWRDaHVuayA9IHt9OyAoIit0KyIpKHNoYXJlZENodW5rKTsgKCIrZSsiKShzaGFyZWRDaHVuayk7IixvPXt9O3QobyksKHI9aShvKSkud29ya2VyVXJsPXdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFthXSx7dHlwZToidGV4dC9qYXZhc2NyaXB0In0pKX1lbHNlIGU9aTtlbHNlIHQ9aX1yZXR1cm4gbigwLChmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIHQoZT17ZXhwb3J0czp7fX0sZS5leHBvcnRzKSxlLmV4cG9ydHN9dmFyIHI9bjtmdW5jdGlvbiBuKHQsZSxyLG4pe3RoaXMuY3g9Myp0LHRoaXMuYng9Myooci10KS10aGlzLmN4LHRoaXMuYXg9MS10aGlzLmN4LXRoaXMuYngsdGhpcy5jeT0zKmUsdGhpcy5ieT0zKihuLWUpLXRoaXMuY3ksdGhpcy5heT0xLXRoaXMuY3ktdGhpcy5ieSx0aGlzLnAxeD10LHRoaXMucDF5PW4sdGhpcy5wMng9cix0aGlzLnAyeT1ufW4ucHJvdG90eXBlLnNhbXBsZUN1cnZlWD1mdW5jdGlvbih0KXtyZXR1cm4oKHRoaXMuYXgqdCt0aGlzLmJ4KSp0K3RoaXMuY3gpKnR9LG4ucHJvdG90eXBlLnNhbXBsZUN1cnZlWT1mdW5jdGlvbih0KXtyZXR1cm4oKHRoaXMuYXkqdCt0aGlzLmJ5KSp0K3RoaXMuY3kpKnR9LG4ucHJvdG90eXBlLnNhbXBsZUN1cnZlRGVyaXZhdGl2ZVg9ZnVuY3Rpb24odCl7cmV0dXJuKDMqdGhpcy5heCp0KzIqdGhpcy5ieCkqdCt0aGlzLmN4fSxuLnByb3RvdHlwZS5zb2x2ZUN1cnZlWD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG87Zm9yKHZvaWQgMD09PWUmJihlPTFlLTYpLGk9dCxvPTA7bzw4O28rKyl7aWYoYT10aGlzLnNhbXBsZUN1cnZlWChpKS10LE1hdGguYWJzKGEpPGUpcmV0dXJuIGk7dmFyIHM9dGhpcy5zYW1wbGVDdXJ2ZURlcml2YXRpdmVYKGkpO2lmKE1hdGguYWJzKHMpPDFlLTYpYnJlYWs7aS09YS9zfWlmKChpPXQpPChyPTApKXJldHVybiByO2lmKGk+KG49MSkpcmV0dXJuIG47Zm9yKDtyPG47KXtpZihhPXRoaXMuc2FtcGxlQ3VydmVYKGkpLE1hdGguYWJzKGEtdCk8ZSlyZXR1cm4gaTt0PmE/cj1pOm49aSxpPS41KihuLXIpK3J9cmV0dXJuIGl9LG4ucHJvdG90eXBlLnNvbHZlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2FtcGxlQ3VydmVZKHRoaXMuc29sdmVDdXJ2ZVgodCxlKSl9O3ZhciBpPWE7ZnVuY3Rpb24gYSh0LGUpe3RoaXMueD10LHRoaXMueT1lfWZ1bmN0aW9uIG8odCxlLG4saSl7dmFyIGE9bmV3IHIodCxlLG4saSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBhLnNvbHZlKHQpfX1hLnByb3RvdHlwZT17Y2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGEodGhpcy54LHRoaXMueSl9LGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9hZGQodCl9LHN1YjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9zdWIodCl9LG11bHRCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHRCeVBvaW50KHQpfSxkaXZCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2RpdkJ5UG9pbnQodCl9LG11bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fbXVsdCh0KX0sZGl2OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2Rpdih0KX0scm90YXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZSh0KX0scm90YXRlQXJvdW5kOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm90YXRlQXJvdW5kKHQsZSl9LG1hdE11bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fbWF0TXVsdCh0KX0sdW5pdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3VuaXQoKX0scGVycDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3BlcnAoKX0scm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3VuZCgpfSxtYWc6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54PT09dC54JiZ0aGlzLnk9PT10Lnl9LGRpc3Q6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RTcXIodCkpfSxkaXN0U3FyOmZ1bmN0aW9uKHQpe3ZhciBlPXQueC10aGlzLngscj10LnktdGhpcy55O3JldHVybiBlKmUrcipyfSxhbmdsZTpmdW5jdGlvbigpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueSx0aGlzLngpfSxhbmdsZVRvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueS10LnksdGhpcy54LXQueCl9LGFuZ2xlV2l0aDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hbmdsZVdpdGhTZXAodC54LHQueSl9LGFuZ2xlV2l0aFNlcDpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueCplLXRoaXMueSp0LHRoaXMueCp0K3RoaXMueSplKX0sX21hdE11bHQ6ZnVuY3Rpb24odCl7dmFyIGU9dFswXSp0aGlzLngrdFsxXSp0aGlzLnkscj10WzJdKnRoaXMueCt0WzNdKnRoaXMueTtyZXR1cm4gdGhpcy54PWUsdGhpcy55PXIsdGhpc30sX2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpc30sX3N1YjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54LT10LngsdGhpcy55LT10LnksdGhpc30sX211bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc30sX2RpdjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Lz10LHRoaXMueS89dCx0aGlzfSxfbXVsdEJ5UG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9LF9kaXZCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzfSxfdW5pdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXYodGhpcy5tYWcoKSksdGhpc30sX3BlcnA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnk7cmV0dXJuIHRoaXMueT10aGlzLngsdGhpcy54PS10LHRoaXN9LF9yb3RhdGU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5jb3ModCkscj1NYXRoLnNpbih0KSxuPWUqdGhpcy54LXIqdGhpcy55LGk9cip0aGlzLngrZSp0aGlzLnk7cmV0dXJuIHRoaXMueD1uLHRoaXMueT1pLHRoaXN9LF9yb3RhdGVBcm91bmQ6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpLGk9ZS54K3IqKHRoaXMueC1lLngpLW4qKHRoaXMueS1lLnkpLGE9ZS55K24qKHRoaXMueC1lLngpK3IqKHRoaXMueS1lLnkpO3JldHVybiB0aGlzLng9aSx0aGlzLnk9YSx0aGlzfSxfcm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9fSxhLmNvbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBhP3Q6QXJyYXkuaXNBcnJheSh0KT9uZXcgYSh0WzBdLHRbMV0pOnR9O3ZhciBzPW8oLjI1LC4xLC4yNSwxKTtmdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gTWF0aC5taW4ocixNYXRoLm1heChlLHQpKX1mdW5jdGlvbiBjKHQsZSxyKXt2YXIgbj1yLWUsaT0oKHQtZSklbituKSVuK2U7cmV0dXJuIGk9PT1lP3I6aX1mdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGgtMTtyLS0gPjA7KWVbcl09YXJndW1lbnRzW3IrMV07Zm9yKHZhciBuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtmb3IodmFyIG8gaW4gYSl0W29dPWFbb119cmV0dXJuIHR9dmFyIGY9MTtmdW5jdGlvbiBoKCl7cmV0dXJuIGYrK31mdW5jdGlvbiBwKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGU/KGVeMTYqTWF0aC5yYW5kb20oKT4+ZS80KS50b1N0cmluZygxNik6KFsxZTddKy1bMWUzXSstNGUzKy04ZTMrLTFlMTEpLnJlcGxhY2UoL1swMThdL2csdCl9KCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4hIXQmJi9eWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzRdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9JC9pLnRlc3QodCl9ZnVuY3Rpb24gbSh0LGUpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0XSYmKGVbdF09ZVt0XS5iaW5kKGUpKX0pKX1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuLTEhPT10LmluZGV4T2YoZSx0Lmxlbmd0aC1lLmxlbmd0aCl9ZnVuY3Rpb24gdih0LGUscil7dmFyIG49e307Zm9yKHZhciBpIGluIHQpbltpXT1lLmNhbGwocnx8dGhpcyx0W2ldLGksdCk7cmV0dXJuIG59ZnVuY3Rpb24geSh0LGUscil7dmFyIG49e307Zm9yKHZhciBpIGluIHQpZS5jYWxsKHJ8fHRoaXMsdFtpXSxpLHQpJiYobltpXT10W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiB4KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKHgpOiJvYmplY3QiPT10eXBlb2YgdCYmdD92KHQseCk6dH12YXIgYj17fTtmdW5jdGlvbiBfKHQpe2JbdF18fCgidW5kZWZpbmVkIiE9dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUud2Fybih0KSxiW3RdPSEwKX1mdW5jdGlvbiB3KHQsZSxyKXtyZXR1cm4oci55LXQueSkqKGUueC10LngpPihlLnktdC55KSooci54LXQueCl9ZnVuY3Rpb24gVCh0KXtmb3IodmFyIGU9MCxyPTAsbj10Lmxlbmd0aCxpPW4tMSxhPXZvaWQgMCxvPXZvaWQgMDtyPG47aT1yKyspYT10W3JdLGUrPSgobz10W2ldKS54LWEueCkqKGEueStvLnkpO3JldHVybiBlfWZ1bmN0aW9uIGsoKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlJiYidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1mdW5jdGlvbiBBKHQpe3ZhciBlPXt9O2lmKHQucmVwbGFjZSgvKD86XnwoPzpccypcLFxzKikpKFteXHgwMC1ceDIwXChcKTw+QFwsO1w6XFwiXC9cW1xdXD9cPVx7XH1ceDdGXSspKD86XD0oPzooW15ceDAwLVx4MjBcKFwpPD5AXCw7XDpcXCJcL1xbXF1cP1w9XHtcfVx4N0ZdKyl8KD86XCIoKD86W14iXFxdfFxcLikqKVwiKSkpPy9nLChmdW5jdGlvbih0LHIsbixpKXt2YXIgYT1ufHxpO3JldHVybiBlW3JdPSFhfHxhLnRvTG93ZXJDYXNlKCksIiJ9KSksZVsibWF4LWFnZSJdKXt2YXIgcj1wYXJzZUludChlWyJtYXgtYWdlIl0sMTApO2lzTmFOKHIpP2RlbGV0ZSBlWyJtYXgtYWdlIl06ZVsibWF4LWFnZSJdPXJ9cmV0dXJuIGV9dmFyIE09bnVsbDtmdW5jdGlvbiBTKHQpe2lmKG51bGw9PU0pe3ZhciBlPXQubmF2aWdhdG9yP3QubmF2aWdhdG9yLnVzZXJBZ2VudDpudWxsO009ISF0LnNhZmFyaXx8ISghZXx8ISgvXGIoaVBhZHxpUGhvbmV8aVBvZClcYi8udGVzdChlKXx8ZS5tYXRjaCgiU2FmYXJpIikmJiFlLm1hdGNoKCJDaHJvbWUiKSkpfXJldHVybiBNfWZ1bmN0aW9uIEUodCl7dHJ5e3ZhciBlPXNlbGZbdF07cmV0dXJuIGUuc2V0SXRlbSgiX21hcGJveF90ZXN0XyIsMSksZS5yZW1vdmVJdGVtKCJfbWFwYm94X3Rlc3RfIiksITB9Y2F0Y2godCl7cmV0dXJuITF9fXZhciBMLEMsUCxJLE89c2VsZi5wZXJmb3JtYW5jZSYmc2VsZi5wZXJmb3JtYW5jZS5ub3c/c2VsZi5wZXJmb3JtYW5jZS5ub3cuYmluZChzZWxmLnBlcmZvcm1hbmNlKTpEYXRlLm5vdy5iaW5kKERhdGUpLHo9c2VsZi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHNlbGYubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxzZWxmLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZXx8c2VsZi5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSxEPXNlbGYuY2FuY2VsQW5pbWF0aW9uRnJhbWV8fHNlbGYubW96Q2FuY2VsQW5pbWF0aW9uRnJhbWV8fHNlbGYud2Via2l0Q2FuY2VsQW5pbWF0aW9uRnJhbWV8fHNlbGYubXNDYW5jZWxBbmltYXRpb25GcmFtZSxSPXtub3c6TyxmcmFtZTpmdW5jdGlvbih0KXt2YXIgZT16KHQpO3JldHVybntjYW5jZWw6ZnVuY3Rpb24oKXtyZXR1cm4gRChlKX19fSxnZXRJbWFnZURhdGE6ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0wKTt2YXIgcj1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLG49ci5nZXRDb250ZXh0KCIyZCIpO2lmKCFuKXRocm93IG5ldyBFcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBjYW52YXMgMmQgY29udGV4dCIpO3JldHVybiByLndpZHRoPXQud2lkdGgsci5oZWlnaHQ9dC5oZWlnaHQsbi5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCksbi5nZXRJbWFnZURhdGEoLWUsLWUsdC53aWR0aCsyKmUsdC5oZWlnaHQrMiplKX0scmVzb2x2ZVVSTDpmdW5jdGlvbih0KXtyZXR1cm4gTHx8KEw9c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLEwuaHJlZj10LEwuaHJlZn0saGFyZHdhcmVDb25jdXJyZW5jeTpzZWxmLm5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5fHw0LGdldCBkZXZpY2VQaXhlbFJhdGlvKCl7cmV0dXJuIHNlbGYuZGV2aWNlUGl4ZWxSYXRpb30sZ2V0IHByZWZlcnNSZWR1Y2VkTW90aW9uKCl7cmV0dXJuISFzZWxmLm1hdGNoTWVkaWEmJihudWxsPT1DJiYoQz1zZWxmLm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikpLEMubWF0Y2hlcyl9fSxGPXtBUElfVVJMOiJodHRwczovL2FwaS5tYXBib3guY29tIixnZXQgRVZFTlRTX1VSTCgpe3JldHVybiB0aGlzLkFQSV9VUkw/MD09PXRoaXMuQVBJX1VSTC5pbmRleE9mKCJodHRwczovL2FwaS5tYXBib3guY24iKT8iaHR0cHM6Ly9ldmVudHMubWFwYm94LmNuL2V2ZW50cy92MiI6MD09PXRoaXMuQVBJX1VSTC5pbmRleE9mKCJodHRwczovL2FwaS5tYXBib3guY29tIik/Imh0dHBzOi8vZXZlbnRzLm1hcGJveC5jb20vZXZlbnRzL3YyIjpudWxsOm51bGx9LEZFRURCQUNLX1VSTDoiaHR0cHM6Ly9hcHBzLm1hcGJveC5jb20vZmVlZGJhY2siLFJFUVVJUkVfQUNDRVNTX1RPS0VOOiEwLEFDQ0VTU19UT0tFTjpudWxsLE1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUzoxNn0sQj17c3VwcG9ydGVkOiExLHRlc3RTdXBwb3J0OmZ1bmN0aW9uKHQpe2lmKE58fCFJKXJldHVybjtqP1UodCk6UD10fX0sTj0hMSxqPSExO2Z1bmN0aW9uIFUodCl7dmFyIGU9dC5jcmVhdGVUZXh0dXJlKCk7dC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsZSk7dHJ5e2lmKHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCx0LlJHQkEsdC5SR0JBLHQuVU5TSUdORURfQllURSxJKSx0LmlzQ29udGV4dExvc3QoKSlyZXR1cm47Qi5zdXBwb3J0ZWQ9ITB9Y2F0Y2godCl7fXQuZGVsZXRlVGV4dHVyZShlKSxOPSEwfXNlbGYuZG9jdW1lbnQmJigoST1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpKS5vbmxvYWQ9ZnVuY3Rpb24oKXtQJiZVKFApLFA9bnVsbCxqPSEwfSxJLm9uZXJyb3I9ZnVuY3Rpb24oKXtOPSEwLFA9bnVsbH0sSS5zcmM9ImRhdGE6aW1hZ2Uvd2VicDtiYXNlNjQsVWtsR1JoNEFBQUJYUlVKUVZsQTRUQkVBQUFBdkFRQUFBQWZRLy83M3YvK0JpT2gvQUFBPSIpO3ZhciBWPSIwMSI7dmFyIEg9ZnVuY3Rpb24odCxlKXt0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm49dCx0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbj1lLHRoaXMuX2NyZWF0ZVNrdVRva2VuKCl9O2Z1bmN0aW9uIHEodCl7cmV0dXJuIDA9PT10LmluZGV4T2YoIm1hcGJveDoiKX1ILnByb3RvdHlwZS5fY3JlYXRlU2t1VG9rZW49ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe2Zvcih2YXIgdD0iIixlPTA7ZTwxMDtlKyspdCs9IjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIltNYXRoLmZsb29yKDYyKk1hdGgucmFuZG9tKCkpXTtyZXR1cm57dG9rZW46WyIxIixWLHRdLmpvaW4oIiIpLHRva2VuRXhwaXJlc0F0OkRhdGUubm93KCkrNDMyZTV9fSgpO3RoaXMuX3NrdVRva2VuPXQudG9rZW4sdGhpcy5fc2t1VG9rZW5FeHBpcmVzQXQ9dC50b2tlbkV4cGlyZXNBdH0sSC5wcm90b3R5cGUuX2lzU2t1VG9rZW5FeHBpcmVkPWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCk+dGhpcy5fc2t1VG9rZW5FeHBpcmVzQXR9LEgucHJvdG90eXBlLnRyYW5zZm9ybVJlcXVlc3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtUmVxdWVzdEZuJiZ0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm4odCxlKXx8e3VybDp0fX0sSC5wcm90b3R5cGUubm9ybWFsaXplU3R5bGVVUkw9ZnVuY3Rpb24odCxlKXtpZighcSh0KSlyZXR1cm4gdDt2YXIgcj1YKHQpO3JldHVybiByLnBhdGg9Ii9zdHlsZXMvdjEiK3IucGF0aCx0aGlzLl9tYWtlQVBJVVJMKHIsdGhpcy5fY3VzdG9tQWNjZXNzVG9rZW58fGUpfSxILnByb3RvdHlwZS5ub3JtYWxpemVHbHlwaHNVUkw9ZnVuY3Rpb24odCxlKXtpZighcSh0KSlyZXR1cm4gdDt2YXIgcj1YKHQpO3JldHVybiByLnBhdGg9Ii9mb250cy92MSIrci5wYXRoLHRoaXMuX21ha2VBUElVUkwocix0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbnx8ZSl9LEgucHJvdG90eXBlLm5vcm1hbGl6ZVNvdXJjZVVSTD1mdW5jdGlvbih0LGUpe2lmKCFxKHQpKXJldHVybiB0O3ZhciByPVgodCk7cmV0dXJuIHIucGF0aD0iL3Y0LyIrci5hdXRob3JpdHkrIi5qc29uIixyLnBhcmFtcy5wdXNoKCJzZWN1cmUiKSx0aGlzLl9tYWtlQVBJVVJMKHIsdGhpcy5fY3VzdG9tQWNjZXNzVG9rZW58fGUpfSxILnByb3RvdHlwZS5ub3JtYWxpemVTcHJpdGVVUkw9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9WCh0KTtyZXR1cm4gcSh0KT8oaS5wYXRoPSIvc3R5bGVzL3YxIitpLnBhdGgrIi9zcHJpdGUiK2Urcix0aGlzLl9tYWtlQVBJVVJMKGksdGhpcy5fY3VzdG9tQWNjZXNzVG9rZW58fG4pKTooaS5wYXRoKz0iIitlK3IsWihpKSl9LEgucHJvdG90eXBlLm5vcm1hbGl6ZVRpbGVVUkw9ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9pc1NrdVRva2VuRXhwaXJlZCgpJiZ0aGlzLl9jcmVhdGVTa3VUb2tlbigpLHQmJiFxKHQpKXJldHVybiB0O3ZhciByPVgodCksbj1SLmRldmljZVBpeGVsUmF0aW8+PTJ8fDUxMj09PWU/IkAyeCI6IiIsaT1CLnN1cHBvcnRlZD8iLndlYnAiOiIkMSI7ci5wYXRoPXIucGF0aC5yZXBsYWNlKC8oXC4ocG5nfGpwZylcZCopKD89JCkvLCIiK24raSksci5wYXRoPXIucGF0aC5yZXBsYWNlKC9eLitcL3Y0XC8vLCIvIiksci5wYXRoPSIvdjQiK3IucGF0aDt2YXIgYT10aGlzLl9jdXN0b21BY2Nlc3NUb2tlbnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXS5tYXRjaCgvXmFjY2Vzc190b2tlbj0oLiopJC8pO2lmKG4pcmV0dXJuIG5bMV19cmV0dXJuIG51bGx9KHIucGFyYW1zKXx8Ri5BQ0NFU1NfVE9LRU47cmV0dXJuIEYuUkVRVUlSRV9BQ0NFU1NfVE9LRU4mJmEmJnRoaXMuX3NrdVRva2VuJiZyLnBhcmFtcy5wdXNoKCJza3U9Iit0aGlzLl9za3VUb2tlbiksdGhpcy5fbWFrZUFQSVVSTChyLGEpfSxILnByb3RvdHlwZS5jYW5vbmljYWxpemVUaWxlVVJMPWZ1bmN0aW9uKHQsZSl7dmFyIHI9WCh0KTtpZighci5wYXRoLm1hdGNoKC8oXlwvdjRcLykvKXx8IXIucGF0aC5tYXRjaCgvXC5bXHddKyQvKSlyZXR1cm4gdDt2YXIgbj0ibWFwYm94Oi8vdGlsZXMvIjtuKz1yLnBhdGgucmVwbGFjZSgiL3Y0LyIsIiIpO3ZhciBpPXIucGFyYW1zO3JldHVybiBlJiYoaT1pLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIXQubWF0Y2goL15hY2Nlc3NfdG9rZW49Lyl9KSkpLGkubGVuZ3RoJiYobis9Ij8iK2kuam9pbigiJiIpKSxufSxILnByb3RvdHlwZS5jYW5vbmljYWxpemVUaWxlc2V0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPSEhZSYmcShlKSxuPVtdLGk9MCxhPXQudGlsZXN8fFtdO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTtZKG8pP24ucHVzaCh0aGlzLmNhbm9uaWNhbGl6ZVRpbGVVUkwobyxyKSk6bi5wdXNoKG8pfXJldHVybiBufSxILnByb3RvdHlwZS5fbWFrZUFQSVVSTD1mdW5jdGlvbih0LGUpe3ZhciByPSJTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9hcGktZG9jdW1lbnRhdGlvbi8jYWNjZXNzLXRva2Vucy1hbmQtdG9rZW4tc2NvcGVzIixuPVgoRi5BUElfVVJMKTtpZih0LnByb3RvY29sPW4ucHJvdG9jb2wsdC5hdXRob3JpdHk9bi5hdXRob3JpdHksIi8iIT09bi5wYXRoJiYodC5wYXRoPSIiK24ucGF0aCt0LnBhdGgpLCFGLlJFUVVJUkVfQUNDRVNTX1RPS0VOKXJldHVybiBaKHQpO2lmKCEoZT1lfHxGLkFDQ0VTU19UT0tFTikpdGhyb3cgbmV3IEVycm9yKCJBbiBBUEkgYWNjZXNzIHRva2VuIGlzIHJlcXVpcmVkIHRvIHVzZSBNYXBib3ggR0wuICIrcik7aWYoInMiPT09ZVswXSl0aHJvdyBuZXcgRXJyb3IoIlVzZSBhIHB1YmxpYyBhY2Nlc3MgdG9rZW4gKHBrLiopIHdpdGggTWFwYm94IEdMLCBub3QgYSBzZWNyZXQgYWNjZXNzIHRva2VuIChzay4qKS4gIityKTtyZXR1cm4gdC5wYXJhbXM9dC5wYXJhbXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4tMT09PXQuaW5kZXhPZigiYWNjZXNzX3Rva2VuIil9KSksdC5wYXJhbXMucHVzaCgiYWNjZXNzX3Rva2VuPSIrZSksWih0KX07dmFyIEc9L14oKGh0dHBzPzopP1wvXC8pPyhbXlwvXStcLik/bWFwYm94XC5jKG58b20pKFwvfFw/fCQpL2k7ZnVuY3Rpb24gWSh0KXtyZXR1cm4gRy50ZXN0KHQpfXZhciBXPS9eKFx3Kyk6XC9cLyhbXi8/XSopKFwvW14/XSspP1w/PyguKyk/LztmdW5jdGlvbiBYKHQpe3ZhciBlPXQubWF0Y2goVyk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gcGFyc2UgVVJMIG9iamVjdCIpO3JldHVybntwcm90b2NvbDplWzFdLGF1dGhvcml0eTplWzJdLHBhdGg6ZVszXXx8Ii8iLHBhcmFtczplWzRdP2VbNF0uc3BsaXQoIiYiKTpbXX19ZnVuY3Rpb24gWih0KXt2YXIgZT10LnBhcmFtcy5sZW5ndGg/Ij8iK3QucGFyYW1zLmpvaW4oIiYiKToiIjtyZXR1cm4gdC5wcm90b2NvbCsiOi8vIit0LmF1dGhvcml0eSt0LnBhdGgrZX1mdW5jdGlvbiBKKHQpe2lmKCF0KXJldHVybiBudWxsO3ZhciBlLHI9dC5zcGxpdCgiLiIpO2lmKCFyfHwzIT09ci5sZW5ndGgpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBKU09OLnBhcnNlKChlPXJbMV0sZGVjb2RlVVJJQ29tcG9uZW50KHNlbGYuYXRvYihlKS5zcGxpdCgiIikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iJSIrKCIwMCIrdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpfSkpLmpvaW4oIiIpKSkpfWNhdGNoKHQpe3JldHVybiBudWxsfX12YXIgSz1mdW5jdGlvbih0KXt0aGlzLnR5cGU9dCx0aGlzLmFub25JZD1udWxsLHRoaXMuZXZlbnREYXRhPXt9LHRoaXMucXVldWU9W10sdGhpcy5wZW5kaW5nUmVxdWVzdD1udWxsfTtLLnByb3RvdHlwZS5nZXRTdG9yYWdlS2V5PWZ1bmN0aW9uKHQpe3ZhciBlLHI9SihGLkFDQ0VTU19UT0tFTiksbj0iIjtyZXR1cm4gciYmci51PyhlPXIudSxuPXNlbGYuYnRvYShlbmNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZSgvJShbMC05QS1GXXsyfSkvZywoZnVuY3Rpb24odCxlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShOdW1iZXIoIjB4IitlKSl9KSkpKTpuPUYuQUNDRVNTX1RPS0VOfHwiIix0PyJtYXBib3guZXZlbnREYXRhLiIrdCsiOiIrbjoibWFwYm94LmV2ZW50RGF0YToiK259LEsucHJvdG90eXBlLmZldGNoRXZlbnREYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9RSgibG9jYWxTdG9yYWdlIiksZT10aGlzLmdldFN0b3JhZ2VLZXkoKSxyPXRoaXMuZ2V0U3RvcmFnZUtleSgidXVpZCIpO2lmKHQpdHJ5e3ZhciBuPXNlbGYubG9jYWxTdG9yYWdlLmdldEl0ZW0oZSk7biYmKHRoaXMuZXZlbnREYXRhPUpTT04ucGFyc2UobikpO3ZhciBpPXNlbGYubG9jYWxTdG9yYWdlLmdldEl0ZW0ocik7aSYmKHRoaXMuYW5vbklkPWkpfWNhdGNoKHQpe18oIlVuYWJsZSB0byByZWFkIGZyb20gTG9jYWxTdG9yYWdlIil9fSxLLnByb3RvdHlwZS5zYXZlRXZlbnREYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9RSgibG9jYWxTdG9yYWdlIiksZT10aGlzLmdldFN0b3JhZ2VLZXkoKSxyPXRoaXMuZ2V0U3RvcmFnZUtleSgidXVpZCIpO2lmKHQpdHJ5e3NlbGYubG9jYWxTdG9yYWdlLnNldEl0ZW0ocix0aGlzLmFub25JZCksT2JqZWN0LmtleXModGhpcy5ldmVudERhdGEpLmxlbmd0aD49MSYmc2VsZi5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShlLEpTT04uc3RyaW5naWZ5KHRoaXMuZXZlbnREYXRhKSl9Y2F0Y2godCl7XygiVW5hYmxlIHRvIHdyaXRlIHRvIExvY2FsU3RvcmFnZSIpfX0sSy5wcm90b3R5cGUucHJvY2Vzc1JlcXVlc3RzPWZ1bmN0aW9uKHQpe30sSy5wcm90b3R5cGUucG9zdEV2ZW50PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXM7aWYoRi5FVkVOVFNfVVJMKXt2YXIgYT1YKEYuRVZFTlRTX1VSTCk7YS5wYXJhbXMucHVzaCgiYWNjZXNzX3Rva2VuPSIrKG58fEYuQUNDRVNTX1RPS0VOfHwiIikpO3ZhciBvPXtldmVudDp0aGlzLnR5cGUsY3JlYXRlZDpuZXcgRGF0ZSh0KS50b0lTT1N0cmluZygpLHNka0lkZW50aWZpZXI6Im1hcGJveC1nbC1qcyIsc2RrVmVyc2lvbjoiMS4xMC4xIixza3VJZDpWLHVzZXJJZDp0aGlzLmFub25JZH0scz1lP3UobyxlKTpvLGw9e3VybDpaKGEpLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIn0sYm9keTpKU09OLnN0cmluZ2lmeShbc10pfTt0aGlzLnBlbmRpbmdSZXF1ZXN0PWJ0KGwsKGZ1bmN0aW9uKHQpe2kucGVuZGluZ1JlcXVlc3Q9bnVsbCxyKHQpLGkuc2F2ZUV2ZW50RGF0YSgpLGkucHJvY2Vzc1JlcXVlc3RzKG4pfSkpfX0sSy5wcm90b3R5cGUucXVldWVSZXF1ZXN0PWZ1bmN0aW9uKHQsZSl7dGhpcy5xdWV1ZS5wdXNoKHQpLHRoaXMucHJvY2Vzc1JlcXVlc3RzKGUpfTt2YXIgUSwkLHR0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmNhbGwodGhpcywibWFwLmxvYWQiKSx0aGlzLnN1Y2Nlc3M9e30sdGhpcy5za3VUb2tlbj0iIn1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucG9zdE1hcExvYWRFdmVudD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnNrdVRva2VuPXIsKEYuRVZFTlRTX1VSTCYmbnx8Ri5BQ0NFU1NfVE9LRU4mJkFycmF5LmlzQXJyYXkodCkmJnQuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIHEodCl8fFkodCl9KSkpJiZ0aGlzLnF1ZXVlUmVxdWVzdCh7aWQ6ZSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0sbil9LGUucHJvdG90eXBlLnByb2Nlc3NSZXF1ZXN0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCF0aGlzLnBlbmRpbmdSZXF1ZXN0JiYwIT09dGhpcy5xdWV1ZS5sZW5ndGgpe3ZhciByPXRoaXMucXVldWUuc2hpZnQoKSxuPXIuaWQsaT1yLnRpbWVzdGFtcDtuJiZ0aGlzLnN1Y2Nlc3Nbbl18fCh0aGlzLmFub25JZHx8dGhpcy5mZXRjaEV2ZW50RGF0YSgpLGQodGhpcy5hbm9uSWQpfHwodGhpcy5hbm9uSWQ9cCgpKSx0aGlzLnBvc3RFdmVudChpLHtza3VUb2tlbjp0aGlzLnNrdVRva2VufSwoZnVuY3Rpb24odCl7dHx8biYmKGUuc3VjY2Vzc1tuXT0hMCl9KSx0KSl9fSxlfShLKSxldD1uZXcoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcywiYXBwVXNlclR1cm5zdGlsZSIpLHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuPWV9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnBvc3RUdXJuc3RpbGVFdmVudD1mdW5jdGlvbih0LGUpe0YuRVZFTlRTX1VSTCYmRi5BQ0NFU1NfVE9LRU4mJkFycmF5LmlzQXJyYXkodCkmJnQuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIHEodCl8fFkodCl9KSkmJnRoaXMucXVldWVSZXF1ZXN0KERhdGUubm93KCksZSl9LGUucHJvdG90eXBlLnByb2Nlc3NSZXF1ZXN0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCF0aGlzLnBlbmRpbmdSZXF1ZXN0JiYwIT09dGhpcy5xdWV1ZS5sZW5ndGgpe3RoaXMuYW5vbklkJiZ0aGlzLmV2ZW50RGF0YS5sYXN0U3VjY2VzcyYmdGhpcy5ldmVudERhdGEudG9rZW5VfHx0aGlzLmZldGNoRXZlbnREYXRhKCk7dmFyIHI9SihGLkFDQ0VTU19UT0tFTiksbj1yP3IudTpGLkFDQ0VTU19UT0tFTixpPW4hPT10aGlzLmV2ZW50RGF0YS50b2tlblU7ZCh0aGlzLmFub25JZCl8fCh0aGlzLmFub25JZD1wKCksaT0hMCk7dmFyIGE9dGhpcy5xdWV1ZS5zaGlmdCgpO2lmKHRoaXMuZXZlbnREYXRhLmxhc3RTdWNjZXNzKXt2YXIgbz1uZXcgRGF0ZSh0aGlzLmV2ZW50RGF0YS5sYXN0U3VjY2Vzcykscz1uZXcgRGF0ZShhKSxsPShhLXRoaXMuZXZlbnREYXRhLmxhc3RTdWNjZXNzKS84NjRlNTtpPWl8fGw+PTF8fGw8LTF8fG8uZ2V0RGF0ZSgpIT09cy5nZXREYXRlKCl9ZWxzZSBpPSEwO2lmKCFpKXJldHVybiB0aGlzLnByb2Nlc3NSZXF1ZXN0cygpO3RoaXMucG9zdEV2ZW50KGEseyJlbmFibGVkLnRlbGVtZXRyeSI6ITF9LChmdW5jdGlvbih0KXt0fHwoZS5ldmVudERhdGEubGFzdFN1Y2Nlc3M9YSxlLmV2ZW50RGF0YS50b2tlblU9bil9KSx0KX19LGV9KEspKSxydD1ldC5wb3N0VHVybnN0aWxlRXZlbnQuYmluZChldCksbnQ9bmV3IHR0LGl0PW50LnBvc3RNYXBMb2FkRXZlbnQuYmluZChudCksYXQ9NTAwLG90PTUwO2Z1bmN0aW9uIHN0KCl7c2VsZi5jYWNoZXMmJiFRJiYoUT1zZWxmLmNhY2hlcy5vcGVuKCJtYXBib3gtdGlsZXMiKSl9ZnVuY3Rpb24gbHQodCxlLHIpe2lmKHN0KCksUSl7dmFyIG49e3N0YXR1czplLnN0YXR1cyxzdGF0dXNUZXh0OmUuc3RhdHVzVGV4dCxoZWFkZXJzOm5ldyBzZWxmLkhlYWRlcnN9O2UuaGVhZGVycy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3JldHVybiBuLmhlYWRlcnMuc2V0KGUsdCl9KSk7dmFyIGk9QShlLmhlYWRlcnMuZ2V0KCJDYWNoZS1Db250cm9sIil8fCIiKTtpZighaVsibm8tc3RvcmUiXSlpWyJtYXgtYWdlIl0mJm4uaGVhZGVycy5zZXQoIkV4cGlyZXMiLG5ldyBEYXRlKHIrMWUzKmlbIm1heC1hZ2UiXSkudG9VVENTdHJpbmcoKSksbmV3IERhdGUobi5oZWFkZXJzLmdldCgiRXhwaXJlcyIpKS5nZXRUaW1lKCktcjw0MmU0fHxmdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PSQpdHJ5e25ldyBSZXNwb25zZShuZXcgUmVhZGFibGVTdHJlYW0pLCQ9ITB9Y2F0Y2godCl7JD0hMX0kP2UodC5ib2R5KTp0LmJsb2IoKS50aGVuKGUpfShlLChmdW5jdGlvbihlKXt2YXIgcj1uZXcgc2VsZi5SZXNwb25zZShlLG4pO3N0KCksUSYmUS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wdXQoY3QodC51cmwpLHIpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtyZXR1cm4gXyh0Lm1lc3NhZ2UpfSkpfSkpfX1mdW5jdGlvbiBjdCh0KXt2YXIgZT10LmluZGV4T2YoIj8iKTtyZXR1cm4gZTwwP3Q6dC5zbGljZSgwLGUpfWZ1bmN0aW9uIHV0KHQsZSl7aWYoc3QoKSwhUSlyZXR1cm4gZShudWxsKTt2YXIgcj1jdCh0LnVybCk7US50aGVuKChmdW5jdGlvbih0KXt0Lm1hdGNoKHIpLnRoZW4oKGZ1bmN0aW9uKG4pe3ZhciBpPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiExO3ZhciBlPW5ldyBEYXRlKHQuaGVhZGVycy5nZXQoIkV4cGlyZXMiKXx8MCkscj1BKHQuaGVhZGVycy5nZXQoIkNhY2hlLUNvbnRyb2wiKXx8IiIpO3JldHVybiBlPkRhdGUubm93KCkmJiFyWyJuby1jYWNoZSJdfShuKTt0LmRlbGV0ZShyKSxpJiZ0LnB1dChyLG4uY2xvbmUoKSksZShudWxsLG4saSl9KSkuY2F0Y2goZSl9KSkuY2F0Y2goZSl9dmFyIGZ0LGh0PTEvMDtmdW5jdGlvbiBwdCgpe3JldHVybiBudWxsPT1mdCYmKGZ0PXNlbGYuT2Zmc2NyZWVuQ2FudmFzJiZuZXcgc2VsZi5PZmZzY3JlZW5DYW52YXMoMSwxKS5nZXRDb250ZXh0KCIyZCIpJiYiZnVuY3Rpb24iPT10eXBlb2Ygc2VsZi5jcmVhdGVJbWFnZUJpdG1hcCksZnR9dmFyIGR0PXtVbmtub3duOiJVbmtub3duIixTdHlsZToiU3R5bGUiLFNvdXJjZToiU291cmNlIixUaWxlOiJUaWxlIixHbHlwaHM6IkdseXBocyIsU3ByaXRlSW1hZ2U6IlNwcml0ZUltYWdlIixTcHJpdGVKU09OOiJTcHJpdGVKU09OIixJbWFnZToiSW1hZ2UifTsiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmZyZWV6ZSYmT2JqZWN0LmZyZWV6ZShkdCk7dmFyIG10PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLG4pezQwMT09PXImJlkobikmJihlKz0iOiB5b3UgbWF5IGhhdmUgcHJvdmlkZWQgYW4gaW52YWxpZCBNYXBib3ggYWNjZXNzIHRva2VuLiBTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9hcGktZG9jdW1lbnRhdGlvbi8jYWNjZXNzLXRva2Vucy1hbmQtdG9rZW4tc2NvcGVzIiksdC5jYWxsKHRoaXMsZSksdGhpcy5zdGF0dXM9cix0aGlzLnVybD1uLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsdGhpcy5tZXNzYWdlPWV9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSsiOiAiK3RoaXMubWVzc2FnZSsiICgiK3RoaXMuc3RhdHVzKyIpOiAiK3RoaXMudXJsfSxlfShFcnJvciksZ3Q9aygpP2Z1bmN0aW9uKCl7cmV0dXJuIHNlbGYud29ya2VyJiZzZWxmLndvcmtlci5yZWZlcnJlcn06ZnVuY3Rpb24oKXtyZXR1cm4oImJsb2I6Ij09PXNlbGYubG9jYXRpb24ucHJvdG9jb2w/c2VsZi5wYXJlbnQ6c2VsZikubG9jYXRpb24uaHJlZn07ZnVuY3Rpb24gdnQodCxlKXt2YXIgcixuPW5ldyBzZWxmLkFib3J0Q29udHJvbGxlcixpPW5ldyBzZWxmLlJlcXVlc3QodC51cmwse21ldGhvZDp0Lm1ldGhvZHx8IkdFVCIsYm9keTp0LmJvZHksY3JlZGVudGlhbHM6dC5jcmVkZW50aWFscyxoZWFkZXJzOnQuaGVhZGVycyxyZWZlcnJlcjpndCgpLHNpZ25hbDpuLnNpZ25hbH0pLGE9ITEsbz0hMSxzPShyPWkudXJsKS5pbmRleE9mKCJza3U9Iik+MCYmWShyKTsianNvbiI9PT10LnR5cGUmJmkuaGVhZGVycy5zZXQoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24iKTt2YXIgbD1mdW5jdGlvbihyLG4sYSl7aWYoIW8pe2lmKHImJiJTZWN1cml0eUVycm9yIiE9PXIubWVzc2FnZSYmXyhyKSxuJiZhKXJldHVybiBjKG4pO3ZhciBsPURhdGUubm93KCk7c2VsZi5mZXRjaChpKS50aGVuKChmdW5jdGlvbihyKXtpZihyLm9rKXt2YXIgbj1zP3IuY2xvbmUoKTpudWxsO3JldHVybiBjKHIsbixsKX1yZXR1cm4gZShuZXcgbXQoci5zdGF0dXNUZXh0LHIuc3RhdHVzLHQudXJsKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpezIwIT09dC5jb2RlJiZlKG5ldyBFcnJvcih0Lm1lc3NhZ2UpKX0pKX19LGM9ZnVuY3Rpb24ocixuLHMpeygiYXJyYXlCdWZmZXIiPT09dC50eXBlP3IuYXJyYXlCdWZmZXIoKToianNvbiI9PT10LnR5cGU/ci5qc29uKCk6ci50ZXh0KCkpLnRoZW4oKGZ1bmN0aW9uKHQpe298fChuJiZzJiZsdChpLG4scyksYT0hMCxlKG51bGwsdCxyLmhlYWRlcnMuZ2V0KCJDYWNoZS1Db250cm9sIiksci5oZWFkZXJzLmdldCgiRXhwaXJlcyIpKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpe298fGUobmV3IEVycm9yKHQubWVzc2FnZSkpfSkpfTtyZXR1cm4gcz91dChpLGwpOmwobnVsbCxudWxsKSx7Y2FuY2VsOmZ1bmN0aW9uKCl7bz0hMCxhfHxuLmFib3J0KCl9fX12YXIgeXQ9ZnVuY3Rpb24odCxlKXtpZihyPXQudXJsLCEoL15maWxlOi8udGVzdChyKXx8L15maWxlOi8udGVzdChndCgpKSYmIS9eXHcrOi8udGVzdChyKSkpe2lmKHNlbGYuZmV0Y2gmJnNlbGYuUmVxdWVzdCYmc2VsZi5BYm9ydENvbnRyb2xsZXImJnNlbGYuUmVxdWVzdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoInNpZ25hbCIpKXJldHVybiB2dCh0LGUpO2lmKGsoKSYmc2VsZi53b3JrZXImJnNlbGYud29ya2VyLmFjdG9yKXtyZXR1cm4gc2VsZi53b3JrZXIuYWN0b3Iuc2VuZCgiZ2V0UmVzb3VyY2UiLHQsZSx2b2lkIDAsITApfX12YXIgcjtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgc2VsZi5YTUxIdHRwUmVxdWVzdDtmb3IodmFyIG4gaW4gci5vcGVuKHQubWV0aG9kfHwiR0VUIix0LnVybCwhMCksImFycmF5QnVmZmVyIj09PXQudHlwZSYmKHIucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIpLHQuaGVhZGVycylyLnNldFJlcXVlc3RIZWFkZXIobix0LmhlYWRlcnNbbl0pO3JldHVybiJqc29uIj09PXQudHlwZSYmKHIucmVzcG9uc2VUeXBlPSJ0ZXh0IixyLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24iKSksci53aXRoQ3JlZGVudGlhbHM9ImluY2x1ZGUiPT09dC5jcmVkZW50aWFscyxyLm9uZXJyb3I9ZnVuY3Rpb24oKXtlKG5ldyBFcnJvcihyLnN0YXR1c1RleHQpKX0sci5vbmxvYWQ9ZnVuY3Rpb24oKXtpZigoci5zdGF0dXM+PTIwMCYmci5zdGF0dXM8MzAwfHwwPT09ci5zdGF0dXMpJiZudWxsIT09ci5yZXNwb25zZSl7dmFyIG49ci5yZXNwb25zZTtpZigianNvbiI9PT10LnR5cGUpdHJ5e249SlNPTi5wYXJzZShyLnJlc3BvbnNlKX1jYXRjaCh0KXtyZXR1cm4gZSh0KX1lKG51bGwsbixyLmdldFJlc3BvbnNlSGVhZGVyKCJDYWNoZS1Db250cm9sIiksci5nZXRSZXNwb25zZUhlYWRlcigiRXhwaXJlcyIpKX1lbHNlIGUobmV3IG10KHIuc3RhdHVzVGV4dCxyLnN0YXR1cyx0LnVybCkpfSxyLnNlbmQodC5ib2R5KSx7Y2FuY2VsOmZ1bmN0aW9uKCl7cmV0dXJuIHIuYWJvcnQoKX19fSh0LGUpfSx4dD1mdW5jdGlvbih0LGUpe3JldHVybiB5dCh1KHQse3R5cGU6ImFycmF5QnVmZmVyIn0pLGUpfSxidD1mdW5jdGlvbih0LGUpe3JldHVybiB5dCh1KHQse21ldGhvZDoiUE9TVCJ9KSxlKX07dmFyIF90LHd0O190PVtdLHd0PTA7dmFyIFR0PWZ1bmN0aW9uKHQsZSl7aWYoQi5zdXBwb3J0ZWQmJih0LmhlYWRlcnN8fCh0LmhlYWRlcnM9e30pLHQuaGVhZGVycy5hY2NlcHQ9ImltYWdlL3dlYnAsKi8qIiksd3Q+PUYuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTKXt2YXIgcj17cmVxdWVzdFBhcmFtZXRlcnM6dCxjYWxsYmFjazplLGNhbmNlbGxlZDohMSxjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbGxlZD0hMH19O3JldHVybiBfdC5wdXNoKHIpLHJ9d3QrKzt2YXIgbj0hMSxpPWZ1bmN0aW9uKCl7aWYoIW4pZm9yKG49ITAsd3QtLTtfdC5sZW5ndGgmJnd0PEYuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTOyl7dmFyIHQ9X3Quc2hpZnQoKSxlPXQucmVxdWVzdFBhcmFtZXRlcnMscj10LmNhbGxiYWNrO3QuY2FuY2VsbGVkfHwodC5jYW5jZWw9VHQoZSxyKS5jYW5jZWwpfX0sYT14dCh0LChmdW5jdGlvbih0LHIsbixhKXtpKCksdD9lKHQpOnImJihwdCgpP2Z1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHNlbGYuQmxvYihbbmV3IFVpbnQ4QXJyYXkodCldLHt0eXBlOiJpbWFnZS9wbmcifSk7c2VsZi5jcmVhdGVJbWFnZUJpdG1hcChyKS50aGVuKChmdW5jdGlvbih0KXtlKG51bGwsdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpe2UobmV3IEVycm9yKCJDb3VsZCBub3QgbG9hZCBpbWFnZSBiZWNhdXNlIG9mICIrdC5tZXNzYWdlKyIuIFBsZWFzZSBtYWtlIHN1cmUgdG8gdXNlIGEgc3VwcG9ydGVkIGltYWdlIHR5cGUgc3VjaCBhcyBQTkcgb3IgSlBFRy4gTm90ZSB0aGF0IFNWR3MgYXJlIG5vdCBzdXBwb3J0ZWQuIikpfSkpfShyLGUpOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5ldyBzZWxmLkltYWdlLGE9c2VsZi5VUkw7aS5vbmxvYWQ9ZnVuY3Rpb24oKXtlKG51bGwsaSksYS5yZXZva2VPYmplY3RVUkwoaS5zcmMpfSxpLm9uZXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gZShuZXcgRXJyb3IoIkNvdWxkIG5vdCBsb2FkIGltYWdlLiBQbGVhc2UgbWFrZSBzdXJlIHRvIHVzZSBhIHN1cHBvcnRlZCBpbWFnZSB0eXBlIHN1Y2ggYXMgUE5HIG9yIEpQRUcuIE5vdGUgdGhhdCBTVkdzIGFyZSBub3Qgc3VwcG9ydGVkLiIpKX07dmFyIG89bmV3IHNlbGYuQmxvYihbbmV3IFVpbnQ4QXJyYXkodCldLHt0eXBlOiJpbWFnZS9wbmcifSk7aS5jYWNoZUNvbnRyb2w9cixpLmV4cGlyZXM9bixpLnNyYz10LmJ5dGVMZW5ndGg/YS5jcmVhdGVPYmplY3RVUkwobyk6ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFDMGxFUVZRWVYyTmdBQUlBQUFVQUFhclZ5RkVBQUFBQVNVVk9SSzVDWUlJPSJ9KHIsZSxuLGEpKX0pKTtyZXR1cm57Y2FuY2VsOmZ1bmN0aW9uKCl7YS5jYW5jZWwoKSxpKCl9fX07ZnVuY3Rpb24ga3QodCxlLHIpe3JbdF0mJi0xIT09clt0XS5pbmRleE9mKGUpfHwoclt0XT1yW3RdfHxbXSxyW3RdLnB1c2goZSkpfWZ1bmN0aW9uIEF0KHQsZSxyKXtpZihyJiZyW3RdKXt2YXIgbj1yW3RdLmluZGV4T2YoZSk7LTEhPT1uJiZyW3RdLnNwbGljZShuLDEpfX12YXIgTXQ9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSksdSh0aGlzLGUpLHRoaXMudHlwZT10fSxTdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dm9pZCAwPT09ciYmKHI9e30pLHQuY2FsbCh0aGlzLCJlcnJvciIsdSh7ZXJyb3I6ZX0scikpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShNdCksRXQ9ZnVuY3Rpb24oKXt9O0V0LnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9saXN0ZW5lcnM9dGhpcy5fbGlzdGVuZXJzfHx7fSxrdCh0LGUsdGhpcy5fbGlzdGVuZXJzKSx0aGlzfSxFdC5wcm90b3R5cGUub2ZmPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEF0KHQsZSx0aGlzLl9saXN0ZW5lcnMpLEF0KHQsZSx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSx0aGlzfSxFdC5wcm90b3R5cGUub25jZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzPXRoaXMuX29uZVRpbWVMaXN0ZW5lcnN8fHt9LGt0KHQsZSx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSx0aGlzfSxFdC5wcm90b3R5cGUuZmlyZT1mdW5jdGlvbih0LGUpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9bmV3IE10KHQsZXx8e30pKTt2YXIgcj10LnR5cGU7aWYodGhpcy5saXN0ZW5zKHIpKXt0LnRhcmdldD10aGlzO2Zvcih2YXIgbj0wLGk9dGhpcy5fbGlzdGVuZXJzJiZ0aGlzLl9saXN0ZW5lcnNbcl0/dGhpcy5fbGlzdGVuZXJzW3JdLnNsaWNlKCk6W107bjxpLmxlbmd0aDtuKz0xKXtpW25dLmNhbGwodGhpcyx0KX1mb3IodmFyIGE9MCxvPXRoaXMuX29uZVRpbWVMaXN0ZW5lcnMmJnRoaXMuX29uZVRpbWVMaXN0ZW5lcnNbcl0/dGhpcy5fb25lVGltZUxpc3RlbmVyc1tyXS5zbGljZSgpOltdO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXTtBdChyLHMsdGhpcy5fb25lVGltZUxpc3RlbmVycykscy5jYWxsKHRoaXMsdCl9dmFyIGw9dGhpcy5fZXZlbnRlZFBhcmVudDtsJiYodSh0LCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9ldmVudGVkUGFyZW50RGF0YT90aGlzLl9ldmVudGVkUGFyZW50RGF0YSgpOnRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhKSxsLmZpcmUodCkpfWVsc2UgdCBpbnN0YW5jZW9mIFN0JiZjb25zb2xlLmVycm9yKHQuZXJyb3IpO3JldHVybiB0aGlzfSxFdC5wcm90b3R5cGUubGlzdGVucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGlzdGVuZXJzJiZ0aGlzLl9saXN0ZW5lcnNbdF0mJnRoaXMuX2xpc3RlbmVyc1t0XS5sZW5ndGg+MHx8dGhpcy5fb25lVGltZUxpc3RlbmVycyYmdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0XSYmdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0XS5sZW5ndGg+MHx8dGhpcy5fZXZlbnRlZFBhcmVudCYmdGhpcy5fZXZlbnRlZFBhcmVudC5saXN0ZW5zKHQpfSxFdC5wcm90b3R5cGUuc2V0RXZlbnRlZFBhcmVudD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9ldmVudGVkUGFyZW50PXQsdGhpcy5fZXZlbnRlZFBhcmVudERhdGE9ZSx0aGlzfTt2YXIgTHQ9eyR2ZXJzaW9uOjgsJHJvb3Q6e3ZlcnNpb246e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczpbOF19LG5hbWU6e3R5cGU6InN0cmluZyJ9LG1ldGFkYXRhOnt0eXBlOiIqIn0sY2VudGVyOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciJ9LHpvb206e3R5cGU6Im51bWJlciJ9LGJlYXJpbmc6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHBlcmlvZDozNjAsdW5pdHM6ImRlZ3JlZXMifSxwaXRjaDp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsdW5pdHM6ImRlZ3JlZXMifSxsaWdodDp7dHlwZToibGlnaHQifSxzb3VyY2VzOntyZXF1aXJlZDohMCx0eXBlOiJzb3VyY2VzIn0sc3ByaXRlOnt0eXBlOiJzdHJpbmcifSxnbHlwaHM6e3R5cGU6InN0cmluZyJ9LHRyYW5zaXRpb246e3R5cGU6InRyYW5zaXRpb24ifSxsYXllcnM6e3JlcXVpcmVkOiEwLHR5cGU6ImFycmF5Iix2YWx1ZToibGF5ZXIifX0sc291cmNlczp7IioiOnt0eXBlOiJzb3VyY2UifX0sc291cmNlOlsic291cmNlX3ZlY3RvciIsInNvdXJjZV9yYXN0ZXIiLCJzb3VyY2VfcmFzdGVyX2RlbSIsInNvdXJjZV9nZW9qc29uIiwic291cmNlX3ZpZGVvIiwic291cmNlX2ltYWdlIl0sc291cmNlX3ZlY3Rvcjp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOnt2ZWN0b3I6e319fSx1cmw6e3R5cGU6InN0cmluZyJ9LHRpbGVzOnt0eXBlOiJhcnJheSIsdmFsdWU6InN0cmluZyJ9LGJvdW5kczp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDo0LGRlZmF1bHQ6Wy0xODAsLTg1LjA1MTEyOSwxODAsODUuMDUxMTI5XX0sc2NoZW1lOnt0eXBlOiJlbnVtIix2YWx1ZXM6e3h5ejp7fSx0bXM6e319LGRlZmF1bHQ6Inh5eiJ9LG1pbnpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDowfSxtYXh6b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MjJ9LGF0dHJpYnV0aW9uOnt0eXBlOiJzdHJpbmcifSxwcm9tb3RlSWQ6e3R5cGU6InByb21vdGVJZCJ9LCIqIjp7dHlwZToiKiJ9fSxzb3VyY2VfcmFzdGVyOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e3Jhc3Rlcjp7fX19LHVybDp7dHlwZToic3RyaW5nIn0sdGlsZXM6e3R5cGU6ImFycmF5Iix2YWx1ZToic3RyaW5nIn0sYm91bmRzOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjQsZGVmYXVsdDpbLTE4MCwtODUuMDUxMTI5LDE4MCw4NS4wNTExMjldfSxtaW56b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MH0sbWF4em9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjIyfSx0aWxlU2l6ZTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjUxMix1bml0czoicGl4ZWxzIn0sc2NoZW1lOnt0eXBlOiJlbnVtIix2YWx1ZXM6e3h5ejp7fSx0bXM6e319LGRlZmF1bHQ6Inh5eiJ9LGF0dHJpYnV0aW9uOnt0eXBlOiJzdHJpbmcifSwiKiI6e3R5cGU6IioifX0sc291cmNlX3Jhc3Rlcl9kZW06e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczp7InJhc3Rlci1kZW0iOnt9fX0sdXJsOnt0eXBlOiJzdHJpbmcifSx0aWxlczp7dHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxib3VuZHM6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6NCxkZWZhdWx0OlstMTgwLC04NS4wNTExMjksMTgwLDg1LjA1MTEyOV19LG1pbnpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDowfSxtYXh6b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MjJ9LHRpbGVTaXplOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NTEyLHVuaXRzOiJwaXhlbHMifSxhdHRyaWJ1dGlvbjp7dHlwZToic3RyaW5nIn0sZW5jb2Rpbmc6e3R5cGU6ImVudW0iLHZhbHVlczp7dGVycmFyaXVtOnt9LG1hcGJveDp7fX0sZGVmYXVsdDoibWFwYm94In0sIioiOnt0eXBlOiIqIn19LHNvdXJjZV9nZW9qc29uOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e2dlb2pzb246e319fSxkYXRhOnt0eXBlOiIqIn0sbWF4em9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjE4fSxhdHRyaWJ1dGlvbjp7dHlwZToic3RyaW5nIn0sYnVmZmVyOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MTI4LG1heGltdW06NTEyLG1pbmltdW06MH0sdG9sZXJhbmNlOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6LjM3NX0sY2x1c3Rlcjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sY2x1c3RlclJhZGl1czp7dHlwZToibnVtYmVyIixkZWZhdWx0OjUwLG1pbmltdW06MH0sY2x1c3Rlck1heFpvb206e3R5cGU6Im51bWJlciJ9LGNsdXN0ZXJQcm9wZXJ0aWVzOnt0eXBlOiIqIn0sbGluZU1ldHJpY3M6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LGdlbmVyYXRlSWQ6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LHByb21vdGVJZDp7dHlwZToicHJvbW90ZUlkIn19LHNvdXJjZV92aWRlbzp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOnt2aWRlbzp7fX19LHVybHM6e3JlcXVpcmVkOiEwLHR5cGU6ImFycmF5Iix2YWx1ZToic3RyaW5nIn0sY29vcmRpbmF0ZXM6e3JlcXVpcmVkOiEwLHR5cGU6ImFycmF5IixsZW5ndGg6NCx2YWx1ZTp7dHlwZToiYXJyYXkiLGxlbmd0aDoyLHZhbHVlOiJudW1iZXIifX19LHNvdXJjZV9pbWFnZTp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOntpbWFnZTp7fX19LHVybDp7cmVxdWlyZWQ6ITAsdHlwZToic3RyaW5nIn0sY29vcmRpbmF0ZXM6e3JlcXVpcmVkOiEwLHR5cGU6ImFycmF5IixsZW5ndGg6NCx2YWx1ZTp7dHlwZToiYXJyYXkiLGxlbmd0aDoyLHZhbHVlOiJudW1iZXIifX19LGxheWVyOntpZDp7dHlwZToic3RyaW5nIixyZXF1aXJlZDohMH0sdHlwZTp7dHlwZToiZW51bSIsdmFsdWVzOntmaWxsOnt9LGxpbmU6e30sc3ltYm9sOnt9LGNpcmNsZTp7fSxoZWF0bWFwOnt9LCJmaWxsLWV4dHJ1c2lvbiI6e30scmFzdGVyOnt9LGhpbGxzaGFkZTp7fSxiYWNrZ3JvdW5kOnt9fSxyZXF1aXJlZDohMH0sbWV0YWRhdGE6e3R5cGU6IioifSxzb3VyY2U6e3R5cGU6InN0cmluZyJ9LCJzb3VyY2UtbGF5ZXIiOnt0eXBlOiJzdHJpbmcifSxtaW56b29tOnt0eXBlOiJudW1iZXIiLG1pbmltdW06MCxtYXhpbXVtOjI0fSxtYXh6b29tOnt0eXBlOiJudW1iZXIiLG1pbmltdW06MCxtYXhpbXVtOjI0fSxmaWx0ZXI6e3R5cGU6ImZpbHRlciJ9LGxheW91dDp7dHlwZToibGF5b3V0In0scGFpbnQ6e3R5cGU6InBhaW50In19LGxheW91dDpbImxheW91dF9maWxsIiwibGF5b3V0X2xpbmUiLCJsYXlvdXRfY2lyY2xlIiwibGF5b3V0X2hlYXRtYXAiLCJsYXlvdXRfZmlsbC1leHRydXNpb24iLCJsYXlvdXRfc3ltYm9sIiwibGF5b3V0X3Jhc3RlciIsImxheW91dF9oaWxsc2hhZGUiLCJsYXlvdXRfYmFja2dyb3VuZCJdLGxheW91dF9iYWNrZ3JvdW5kOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxsYXlvdXRfZmlsbDp7ImZpbGwtc29ydC1rZXkiOnt0eXBlOiJudW1iZXIiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LHZpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIiwicHJvcGVydHktdHlwZSI6ImNvbnN0YW50In19LGxheW91dF9jaXJjbGU6eyJjaXJjbGUtc29ydC1rZXkiOnt0eXBlOiJudW1iZXIiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LHZpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIiwicHJvcGVydHktdHlwZSI6ImNvbnN0YW50In19LGxheW91dF9oZWF0bWFwOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSwibGF5b3V0X2ZpbGwtZXh0cnVzaW9uIjp7dmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUiLCJwcm9wZXJ0eS10eXBlIjoiY29uc3RhbnQifX0sbGF5b3V0X2xpbmU6eyJsaW5lLWNhcCI6e3R5cGU6ImVudW0iLHZhbHVlczp7YnV0dDp7fSxyb3VuZDp7fSxzcXVhcmU6e319LGRlZmF1bHQ6ImJ1dHQiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwibGluZS1qb2luIjp7dHlwZToiZW51bSIsdmFsdWVzOntiZXZlbDp7fSxyb3VuZDp7fSxtaXRlcjp7fX0sZGVmYXVsdDoibWl0ZXIiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJsaW5lLW1pdGVyLWxpbWl0Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjIscmVxdWlyZXM6W3sibGluZS1qb2luIjoibWl0ZXIifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJsaW5lLXJvdW5kLWxpbWl0Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEuMDUscmVxdWlyZXM6W3sibGluZS1qb2luIjoicm91bmQifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJsaW5lLXNvcnQta2V5Ijp7dHlwZToibnVtYmVyIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSx2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxsYXlvdXRfc3ltYm9sOnsic3ltYm9sLXBsYWNlbWVudCI6e3R5cGU6ImVudW0iLHZhbHVlczp7cG9pbnQ6e30sbGluZTp7fSwibGluZS1jZW50ZXIiOnt9fSxkZWZhdWx0OiJwb2ludCIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJzeW1ib2wtc3BhY2luZyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyNTAsbWluaW11bToxLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlt7InN5bWJvbC1wbGFjZW1lbnQiOiJsaW5lIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwic3ltYm9sLWF2b2lkLWVkZ2VzIjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInN5bWJvbC1zb3J0LWtleSI6e3R5cGU6Im51bWJlciIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInN5bWJvbC16LW9yZGVyIjp7dHlwZToiZW51bSIsdmFsdWVzOnthdXRvOnt9LCJ2aWV3cG9ydC15Ijp7fSxzb3VyY2U6e319LGRlZmF1bHQ6ImF1dG8iLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi1hbGxvdy1vdmVybGFwIjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSxyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24taWdub3JlLXBsYWNlbWVudCI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJpY29uLW9wdGlvbmFsIjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSxyZXF1aXJlczpbImljb24taW1hZ2UiLCJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9LGF1dG86e319LGRlZmF1bHQ6ImF1dG8iLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi1zaXplIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLHVuaXRzOiJmYWN0b3Igb2YgdGhlIG9yaWdpbmFsIGljb24gc2l6ZSIscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24tdGV4dC1maXQiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e25vbmU6e30sd2lkdGg6e30saGVpZ2h0Ont9LGJvdGg6e319LGRlZmF1bHQ6Im5vbmUiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24tdGV4dC1maXQtcGFkZGluZyI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6NCxkZWZhdWx0OlswLDAsMCwwXSx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbImljb24taW1hZ2UiLCJ0ZXh0LWZpZWxkIix7Imljb24tdGV4dC1maXQiOlsiYm90aCIsIndpZHRoIiwiaGVpZ2h0Il19XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24taW1hZ2UiOnt0eXBlOiJyZXNvbHZlZEltYWdlIix0b2tlbnM6ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24tcm90YXRlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCx1bml0czoiZGVncmVlcyIscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24tcGFkZGluZyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyLG1pbmltdW06MCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24ta2VlcC11cHJpZ2h0Ijp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSxyZXF1aXJlczpbImljb24taW1hZ2UiLHsiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiOiJtYXAifSx7InN5bWJvbC1wbGFjZW1lbnQiOlsibGluZSIsImxpbmUtY2VudGVyIl19XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24tb2Zmc2V0Ijp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0scmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24tYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOntjZW50ZXI6e30sbGVmdDp7fSxyaWdodDp7fSx0b3A6e30sYm90dG9tOnt9LCJ0b3AtbGVmdCI6e30sInRvcC1yaWdodCI6e30sImJvdHRvbS1sZWZ0Ijp7fSwiYm90dG9tLXJpZ2h0Ijp7fX0sZGVmYXVsdDoiY2VudGVyIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi1waXRjaC1hbGlnbm1lbnQiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fSxhdXRvOnt9fSxkZWZhdWx0OiJhdXRvIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtcGl0Y2gtYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e30sYXV0bzp7fX0sZGVmYXVsdDoiYXV0byIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9LGF1dG86e319LGRlZmF1bHQ6ImF1dG8iLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1maWVsZCI6e3R5cGU6ImZvcm1hdHRlZCIsZGVmYXVsdDoiIix0b2tlbnM6ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtZm9udCI6e3R5cGU6ImFycmF5Iix2YWx1ZToic3RyaW5nIixkZWZhdWx0OlsiT3BlbiBTYW5zIFJlZ3VsYXIiLCJBcmlhbCBVbmljb2RlIE1TIFJlZ3VsYXIiXSxyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1zaXplIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjE2LG1pbmltdW06MCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1tYXgtd2lkdGgiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MTAsbWluaW11bTowLHVuaXRzOiJlbXMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LWxpbmUtaGVpZ2h0Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEuMix1bml0czoiZW1zIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtbGV0dGVyLXNwYWNpbmciOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCx1bml0czoiZW1zIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1qdXN0aWZ5Ijp7dHlwZToiZW51bSIsdmFsdWVzOnthdXRvOnt9LGxlZnQ6e30sY2VudGVyOnt9LHJpZ2h0Ont9fSxkZWZhdWx0OiJjZW50ZXIiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LXJhZGlhbC1vZmZzZXQiOnt0eXBlOiJudW1iZXIiLHVuaXRzOiJlbXMiLGRlZmF1bHQ6MCxyZXF1aXJlczpbInRleHQtZmllbGQiXSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19fSwidGV4dC12YXJpYWJsZS1hbmNob3IiOnt0eXBlOiJhcnJheSIsdmFsdWU6ImVudW0iLHZhbHVlczp7Y2VudGVyOnt9LGxlZnQ6e30scmlnaHQ6e30sdG9wOnt9LGJvdHRvbTp7fSwidG9wLWxlZnQiOnt9LCJ0b3AtcmlnaHQiOnt9LCJib3R0b20tbGVmdCI6e30sImJvdHRvbS1yaWdodCI6e319LHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyJzeW1ib2wtcGxhY2VtZW50IjpbInBvaW50Il19XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOntjZW50ZXI6e30sbGVmdDp7fSxyaWdodDp7fSx0b3A6e30sYm90dG9tOnt9LCJ0b3AtbGVmdCI6e30sInRvcC1yaWdodCI6e30sImJvdHRvbS1sZWZ0Ijp7fSwiYm90dG9tLXJpZ2h0Ijp7fX0sZGVmYXVsdDoiY2VudGVyIixyZXF1aXJlczpbInRleHQtZmllbGQiLHsiISI6InRleHQtdmFyaWFibGUtYW5jaG9yIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LW1heC1hbmdsZSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDo0NSx1bml0czoiZGVncmVlcyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIix7InN5bWJvbC1wbGFjZW1lbnQiOlsibGluZSIsImxpbmUtY2VudGVyIl19XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtd3JpdGluZy1tb2RlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJlbnVtIix2YWx1ZXM6e2hvcml6b250YWw6e30sdmVydGljYWw6e319LHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyJzeW1ib2wtcGxhY2VtZW50IjpbInBvaW50Il19XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtcm90YXRlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCx1bml0czoiZGVncmVlcyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtcGFkZGluZyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyLG1pbmltdW06MCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQta2VlcC11cHJpZ2h0Ijp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMCxyZXF1aXJlczpbInRleHQtZmllbGQiLHsidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiOiJtYXAifSx7InN5bWJvbC1wbGFjZW1lbnQiOlsibGluZSIsImxpbmUtY2VudGVyIl19XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtdHJhbnNmb3JtIjp7dHlwZToiZW51bSIsdmFsdWVzOntub25lOnt9LHVwcGVyY2FzZTp7fSxsb3dlcmNhc2U6e319LGRlZmF1bHQ6Im5vbmUiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LW9mZnNldCI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIix1bml0czoiZW1zIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyIhIjoidGV4dC1yYWRpYWwtb2Zmc2V0In1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LWFsbG93LW92ZXJsYXAiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1pZ25vcmUtcGxhY2VtZW50Ijp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSxyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtb3B0aW9uYWwiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLHJlcXVpcmVzOlsidGV4dC1maWVsZCIsImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sdmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUiLCJwcm9wZXJ0eS10eXBlIjoiY29uc3RhbnQifX0sbGF5b3V0X3Jhc3Rlcjp7dmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUiLCJwcm9wZXJ0eS10eXBlIjoiY29uc3RhbnQifX0sbGF5b3V0X2hpbGxzaGFkZTp7dmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUiLCJwcm9wZXJ0eS10eXBlIjoiY29uc3RhbnQifX0sZmlsdGVyOnt0eXBlOiJhcnJheSIsdmFsdWU6IioifSxmaWx0ZXJfb3BlcmF0b3I6e3R5cGU6ImVudW0iLHZhbHVlczp7Ij09Ijp7fSwiIT0iOnt9LCI+Ijp7fSwiPj0iOnt9LCI8Ijp7fSwiPD0iOnt9LGluOnt9LCIhaW4iOnt9LGFsbDp7fSxhbnk6e30sbm9uZTp7fSxoYXM6e30sIiFoYXMiOnt9LHdpdGhpbjp7fX19LGdlb21ldHJ5X3R5cGU6e3R5cGU6ImVudW0iLHZhbHVlczp7UG9pbnQ6e30sTGluZVN0cmluZzp7fSxQb2x5Z29uOnt9fX0sZnVuY3Rpb246e2V4cHJlc3Npb246e3R5cGU6ImV4cHJlc3Npb24ifSxzdG9wczp7dHlwZToiYXJyYXkiLHZhbHVlOiJmdW5jdGlvbl9zdG9wIn0sYmFzZTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowfSxwcm9wZXJ0eTp7dHlwZToic3RyaW5nIixkZWZhdWx0OiIkem9vbSJ9LHR5cGU6e3R5cGU6ImVudW0iLHZhbHVlczp7aWRlbnRpdHk6e30sZXhwb25lbnRpYWw6e30saW50ZXJ2YWw6e30sY2F0ZWdvcmljYWw6e319LGRlZmF1bHQ6ImV4cG9uZW50aWFsIn0sY29sb3JTcGFjZTp7dHlwZToiZW51bSIsdmFsdWVzOntyZ2I6e30sbGFiOnt9LGhjbDp7fX0sZGVmYXVsdDoicmdiIn0sZGVmYXVsdDp7dHlwZToiKiIscmVxdWlyZWQ6ITF9fSxmdW5jdGlvbl9zdG9wOnt0eXBlOiJhcnJheSIsbWluaW11bTowLG1heGltdW06MjQsdmFsdWU6WyJudW1iZXIiLCJjb2xvciJdLGxlbmd0aDoyfSxleHByZXNzaW9uOnt0eXBlOiJhcnJheSIsdmFsdWU6IioiLG1pbmltdW06MX0sZXhwcmVzc2lvbl9uYW1lOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2xldDp7Z3JvdXA6IlZhcmlhYmxlIGJpbmRpbmcifSx2YXI6e2dyb3VwOiJWYXJpYWJsZSBiaW5kaW5nIn0sbGl0ZXJhbDp7Z3JvdXA6IlR5cGVzIn0sYXJyYXk6e2dyb3VwOiJUeXBlcyJ9LGF0Ontncm91cDoiTG9va3VwIn0saW46e2dyb3VwOiJMb29rdXAifSwiaW5kZXgtb2YiOntncm91cDoiTG9va3VwIn0sc2xpY2U6e2dyb3VwOiJMb29rdXAifSxjYXNlOntncm91cDoiRGVjaXNpb24ifSxtYXRjaDp7Z3JvdXA6IkRlY2lzaW9uIn0sY29hbGVzY2U6e2dyb3VwOiJEZWNpc2lvbiJ9LHN0ZXA6e2dyb3VwOiJSYW1wcywgc2NhbGVzLCBjdXJ2ZXMifSxpbnRlcnBvbGF0ZTp7Z3JvdXA6IlJhbXBzLCBzY2FsZXMsIGN1cnZlcyJ9LCJpbnRlcnBvbGF0ZS1oY2wiOntncm91cDoiUmFtcHMsIHNjYWxlcywgY3VydmVzIn0sImludGVycG9sYXRlLWxhYiI6e2dyb3VwOiJSYW1wcywgc2NhbGVzLCBjdXJ2ZXMifSxsbjI6e2dyb3VwOiJNYXRoIn0scGk6e2dyb3VwOiJNYXRoIn0sZTp7Z3JvdXA6Ik1hdGgifSx0eXBlb2Y6e2dyb3VwOiJUeXBlcyJ9LHN0cmluZzp7Z3JvdXA6IlR5cGVzIn0sbnVtYmVyOntncm91cDoiVHlwZXMifSxib29sZWFuOntncm91cDoiVHlwZXMifSxvYmplY3Q6e2dyb3VwOiJUeXBlcyJ9LGNvbGxhdG9yOntncm91cDoiVHlwZXMifSxmb3JtYXQ6e2dyb3VwOiJUeXBlcyJ9LGltYWdlOntncm91cDoiVHlwZXMifSwibnVtYmVyLWZvcm1hdCI6e2dyb3VwOiJUeXBlcyJ9LCJ0by1zdHJpbmciOntncm91cDoiVHlwZXMifSwidG8tbnVtYmVyIjp7Z3JvdXA6IlR5cGVzIn0sInRvLWJvb2xlYW4iOntncm91cDoiVHlwZXMifSwidG8tcmdiYSI6e2dyb3VwOiJDb2xvciJ9LCJ0by1jb2xvciI6e2dyb3VwOiJUeXBlcyJ9LHJnYjp7Z3JvdXA6IkNvbG9yIn0scmdiYTp7Z3JvdXA6IkNvbG9yIn0sZ2V0Ontncm91cDoiTG9va3VwIn0saGFzOntncm91cDoiTG9va3VwIn0sbGVuZ3RoOntncm91cDoiTG9va3VwIn0scHJvcGVydGllczp7Z3JvdXA6IkZlYXR1cmUgZGF0YSJ9LCJmZWF0dXJlLXN0YXRlIjp7Z3JvdXA6IkZlYXR1cmUgZGF0YSJ9LCJnZW9tZXRyeS10eXBlIjp7Z3JvdXA6IkZlYXR1cmUgZGF0YSJ9LGlkOntncm91cDoiRmVhdHVyZSBkYXRhIn0sem9vbTp7Z3JvdXA6Ilpvb20ifSwiaGVhdG1hcC1kZW5zaXR5Ijp7Z3JvdXA6IkhlYXRtYXAifSwibGluZS1wcm9ncmVzcyI6e2dyb3VwOiJGZWF0dXJlIGRhdGEifSxhY2N1bXVsYXRlZDp7Z3JvdXA6IkZlYXR1cmUgZGF0YSJ9LCIrIjp7Z3JvdXA6Ik1hdGgifSwiKiI6e2dyb3VwOiJNYXRoIn0sIi0iOntncm91cDoiTWF0aCJ9LCIvIjp7Z3JvdXA6Ik1hdGgifSwiJSI6e2dyb3VwOiJNYXRoIn0sIl4iOntncm91cDoiTWF0aCJ9LHNxcnQ6e2dyb3VwOiJNYXRoIn0sbG9nMTA6e2dyb3VwOiJNYXRoIn0sbG46e2dyb3VwOiJNYXRoIn0sbG9nMjp7Z3JvdXA6Ik1hdGgifSxzaW46e2dyb3VwOiJNYXRoIn0sY29zOntncm91cDoiTWF0aCJ9LHRhbjp7Z3JvdXA6Ik1hdGgifSxhc2luOntncm91cDoiTWF0aCJ9LGFjb3M6e2dyb3VwOiJNYXRoIn0sYXRhbjp7Z3JvdXA6Ik1hdGgifSxtaW46e2dyb3VwOiJNYXRoIn0sbWF4Ontncm91cDoiTWF0aCJ9LHJvdW5kOntncm91cDoiTWF0aCJ9LGFiczp7Z3JvdXA6Ik1hdGgifSxjZWlsOntncm91cDoiTWF0aCJ9LGZsb29yOntncm91cDoiTWF0aCJ9LGRpc3RhbmNlOntncm91cDoiTWF0aCJ9LCI9PSI6e2dyb3VwOiJEZWNpc2lvbiJ9LCIhPSI6e2dyb3VwOiJEZWNpc2lvbiJ9LCI+Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sIjwiOntncm91cDoiRGVjaXNpb24ifSwiPj0iOntncm91cDoiRGVjaXNpb24ifSwiPD0iOntncm91cDoiRGVjaXNpb24ifSxhbGw6e2dyb3VwOiJEZWNpc2lvbiJ9LGFueTp7Z3JvdXA6IkRlY2lzaW9uIn0sIiEiOntncm91cDoiRGVjaXNpb24ifSx3aXRoaW46e2dyb3VwOiJEZWNpc2lvbiJ9LCJpcy1zdXBwb3J0ZWQtc2NyaXB0Ijp7Z3JvdXA6IlN0cmluZyJ9LHVwY2FzZTp7Z3JvdXA6IlN0cmluZyJ9LGRvd25jYXNlOntncm91cDoiU3RyaW5nIn0sY29uY2F0Ontncm91cDoiU3RyaW5nIn0sInJlc29sdmVkLWxvY2FsZSI6e2dyb3VwOiJTdHJpbmcifX19LGxpZ2h0OnthbmNob3I6e3R5cGU6ImVudW0iLGRlZmF1bHQ6InZpZXdwb3J0Iix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50Iix0cmFuc2l0aW9uOiExLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfX0scG9zaXRpb246e3R5cGU6ImFycmF5IixkZWZhdWx0OlsxLjE1LDIxMCwzMF0sbGVuZ3RoOjMsdmFsdWU6Im51bWJlciIsInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50Iix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfX0sY29sb3I6e3R5cGU6ImNvbG9yIiwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQiLGRlZmF1bHQ6IiNmZmZmZmYiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSx0cmFuc2l0aW9uOiEwfSxpbnRlbnNpdHk6e3R5cGU6Im51bWJlciIsInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50IixkZWZhdWx0Oi41LG1pbmltdW06MCxtYXhpbXVtOjEsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LHRyYW5zaXRpb246ITB9fSxwYWludDpbInBhaW50X2ZpbGwiLCJwYWludF9saW5lIiwicGFpbnRfY2lyY2xlIiwicGFpbnRfaGVhdG1hcCIsInBhaW50X2ZpbGwtZXh0cnVzaW9uIiwicGFpbnRfc3ltYm9sIiwicGFpbnRfcmFzdGVyIiwicGFpbnRfaGlsbHNoYWRlIiwicGFpbnRfYmFja2dyb3VuZCJdLHBhaW50X2ZpbGw6eyJmaWxsLWFudGlhbGlhcyI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJmaWxsLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJmaWxsLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImZpbGwtcGF0dGVybiJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImZpbGwtb3V0bGluZS1jb2xvciI6e3R5cGU6ImNvbG9yIix0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7IiEiOiJmaWxsLXBhdHRlcm4ifSx7ImZpbGwtYW50aWFsaWFzIjohMH1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiZmlsbC10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiZmlsbC10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJmaWxsLXRyYW5zbGF0ZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiZmlsbC1wYXR0ZXJuIjp7dHlwZToicmVzb2x2ZWRJbWFnZSIsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4ifX0sInBhaW50X2ZpbGwtZXh0cnVzaW9uIjp7ImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJmaWxsLWV4dHJ1c2lvbi1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIix0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7IiEiOiJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3IiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiZmlsbC1leHRydXNpb24tcGF0dGVybiI6e3R5cGU6InJlc29sdmVkSW1hZ2UiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIn0sImZpbGwtZXh0cnVzaW9uLWhlaWdodCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czoibWV0ZXJzIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiZmlsbC1leHRydXNpb24tYmFzZSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czoibWV0ZXJzIix0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsiZmlsbC1leHRydXNpb24taGVpZ2h0Il0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJmaWxsLWV4dHJ1c2lvbi12ZXJ0aWNhbC1ncmFkaWVudCI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITAsdHJhbnNpdGlvbjohMSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In19LHBhaW50X2xpbmU6eyJsaW5lLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJsaW5lLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImxpbmUtcGF0dGVybiJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImxpbmUtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsibGluZS10cmFuc2xhdGUiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImxpbmUtd2lkdGgiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtZ2FwLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJsaW5lLW9mZnNldCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJsaW5lLWJsdXIiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtZGFzaGFycmF5Ijp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJsaW5lIHdpZHRocyIscmVxdWlyZXM6W3siISI6ImxpbmUtcGF0dGVybiJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJjcm9zcy1mYWRlZCJ9LCJsaW5lLXBhdHRlcm4iOnt0eXBlOiJyZXNvbHZlZEltYWdlIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJjcm9zcy1mYWRlZC1kYXRhLWRyaXZlbiJ9LCJsaW5lLWdyYWRpZW50Ijp7dHlwZToiY29sb3IiLHRyYW5zaXRpb246ITEscmVxdWlyZXM6W3siISI6ImxpbmUtZGFzaGFycmF5In0seyIhIjoibGluZS1wYXR0ZXJuIn0se3NvdXJjZToiZ2VvanNvbiIsaGFzOntsaW5lTWV0cmljczohMH19XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbImxpbmUtcHJvZ3Jlc3MiXX0sInByb3BlcnR5LXR5cGUiOiJjb2xvci1yYW1wIn19LHBhaW50X2NpcmNsZTp7ImNpcmNsZS1yYWRpdXMiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NSxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImNpcmNsZS1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiY2lyY2xlLWJsdXIiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiY2lyY2xlLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJjaXJjbGUtdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJjaXJjbGUtdHJhbnNsYXRlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJjaXJjbGUtcGl0Y2gtc2NhbGUiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImNpcmNsZS1waXRjaC1hbGlnbm1lbnQiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoidmlld3BvcnQiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiY2lyY2xlLXN0cm9rZS13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiY2lyY2xlLXN0cm9rZS1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiY2lyY2xlLXN0cm9rZS1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifX0scGFpbnRfaGVhdG1hcDp7ImhlYXRtYXAtcmFkaXVzIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjMwLG1pbmltdW06MSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaGVhdG1hcC13ZWlnaHQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImhlYXRtYXAtaW50ZW5zaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJoZWF0bWFwLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6WyJpbnRlcnBvbGF0ZSIsWyJsaW5lYXIiXSxbImhlYXRtYXAtZGVuc2l0eSJdLDAsInJnYmEoMCwgMCwgMjU1LCAwKSIsLjEsInJveWFsYmx1ZSIsLjMsImN5YW4iLC41LCJsaW1lIiwuNywieWVsbG93IiwxLCJyZWQiXSx0cmFuc2l0aW9uOiExLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiaGVhdG1hcC1kZW5zaXR5Il19LCJwcm9wZXJ0eS10eXBlIjoiY29sb3ItcmFtcCJ9LCJoZWF0bWFwLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9fSxwYWludF9zeW1ib2w6eyJpY29uLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJpY29uLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJpY29uLWhhbG8tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoicmdiYSgwLCAwLCAwLCAwKSIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24taGFsby13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi1oYWxvLWJsdXIiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24tdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24tdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsImljb24tdHJhbnNsYXRlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAsb3ZlcnJpZGFibGU6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LWhhbG8tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoicmdiYSgwLCAwLCAwLCAwKSIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtaGFsby13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1oYWxvLWJsdXIiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsidGV4dC1maWVsZCIsInRleHQtdHJhbnNsYXRlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9fSxwYWludF9yYXN0ZXI6eyJyYXN0ZXItb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInJhc3Rlci1odWUtcm90YXRlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJkZWdyZWVzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInJhc3Rlci1icmlnaHRuZXNzLW1pbiI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInJhc3Rlci1icmlnaHRuZXNzLW1heCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInJhc3Rlci1zYXR1cmF0aW9uIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTotMSxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInJhc3Rlci1jb250cmFzdCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06LTEsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJyYXN0ZXItcmVzYW1wbGluZyI6e3R5cGU6ImVudW0iLHZhbHVlczp7bGluZWFyOnt9LG5lYXJlc3Q6e319LGRlZmF1bHQ6ImxpbmVhciIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJyYXN0ZXItZmFkZS1kdXJhdGlvbiI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDozMDAsbWluaW11bTowLHRyYW5zaXRpb246ITEsdW5pdHM6Im1pbGxpc2Vjb25kcyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9fSxwYWludF9oaWxsc2hhZGU6eyJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvbiI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDozMzUsbWluaW11bTowLG1heGltdW06MzU5LHRyYW5zaXRpb246ITEsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvciI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJ2aWV3cG9ydCIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uIjp7dHlwZToibnVtYmVyIixkZWZhdWx0Oi41LG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImhpbGxzaGFkZS1zaGFkb3ctY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiI0ZGRkZGRiIsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImhpbGxzaGFkZS1hY2NlbnQtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In19LHBhaW50X2JhY2tncm91bmQ6eyJiYWNrZ3JvdW5kLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImJhY2tncm91bmQtcGF0dGVybiJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImJhY2tncm91bmQtcGF0dGVybiI6e3R5cGU6InJlc29sdmVkSW1hZ2UiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiY3Jvc3MtZmFkZWQifSwiYmFja2dyb3VuZC1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3R5cGU6Im51bWJlciIsZGVmYXVsdDozMDAsbWluaW11bTowLHVuaXRzOiJtaWxsaXNlY29uZHMifSxkZWxheTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHVuaXRzOiJtaWxsaXNlY29uZHMifX0sInByb3BlcnR5LXR5cGUiOnsiZGF0YS1kcml2ZW4iOnt0eXBlOiJwcm9wZXJ0eS10eXBlIn0sImNyb3NzLWZhZGVkIjp7dHlwZToicHJvcGVydHktdHlwZSJ9LCJjcm9zcy1mYWRlZC1kYXRhLWRyaXZlbiI6e3R5cGU6InByb3BlcnR5LXR5cGUifSwiY29sb3ItcmFtcCI6e3R5cGU6InByb3BlcnR5LXR5cGUifSwiZGF0YS1jb25zdGFudCI6e3R5cGU6InByb3BlcnR5LXR5cGUifSxjb25zdGFudDp7dHlwZToicHJvcGVydHktdHlwZSJ9fSxwcm9tb3RlSWQ6eyIqIjp7dHlwZToic3RyaW5nIn19fSxDdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLm1lc3NhZ2U9KHQ/dCsiOiAiOiIiKStyLG4mJih0aGlzLmlkZW50aWZpZXI9biksbnVsbCE9ZSYmZS5fX2xpbmVfXyYmKHRoaXMubGluZT1lLl9fbGluZV9fKX07ZnVuY3Rpb24gUHQodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlO3JldHVybiByP1tuZXcgQ3QoZSxyLCJjb25zdGFudHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgYXMgb2YgdjgiKV06W119ZnVuY3Rpb24gSXQodCl7Zm9yKHZhciBlPVtdLHI9YXJndW1lbnRzLmxlbmd0aC0xO3ItLSA+MDspZVtyXT1hcmd1bWVudHNbcisxXTtmb3IodmFyIG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2Zvcih2YXIgbyBpbiBhKXRbb109YVtvXX1yZXR1cm4gdH1mdW5jdGlvbiBPdCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE51bWJlcnx8dCBpbnN0YW5jZW9mIFN0cmluZ3x8dCBpbnN0YW5jZW9mIEJvb2xlYW4/dC52YWx1ZU9mKCk6dH1mdW5jdGlvbiB6dCh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0Lm1hcCh6dCk7aWYodCBpbnN0YW5jZW9mIE9iamVjdCYmISh0IGluc3RhbmNlb2YgTnVtYmVyfHx0IGluc3RhbmNlb2YgU3RyaW5nfHx0IGluc3RhbmNlb2YgQm9vbGVhbikpe3ZhciBlPXt9O2Zvcih2YXIgciBpbiB0KWVbcl09enQodFtyXSk7cmV0dXJuIGV9cmV0dXJuIE90KHQpfXZhciBEdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsciksdGhpcy5tZXNzYWdlPXIsdGhpcy5rZXk9ZX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oRXJyb3IpLFJ0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9W10pLHRoaXMucGFyZW50PXQsdGhpcy5iaW5kaW5ncz17fTtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdLGE9aVswXSxvPWlbMV07dGhpcy5iaW5kaW5nc1thXT1vfX07UnQucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFJ0KHRoaXMsdCl9LFJ0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5iaW5kaW5nc1t0XSlyZXR1cm4gdGhpcy5iaW5kaW5nc1t0XTtpZih0aGlzLnBhcmVudClyZXR1cm4gdGhpcy5wYXJlbnQuZ2V0KHQpO3Rocm93IG5ldyBFcnJvcih0KyIgbm90IGZvdW5kIGluIHNjb3BlLiIpfSxSdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5iaW5kaW5nc1t0XXx8ISF0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuaGFzKHQpfTt2YXIgRnQ9e2tpbmQ6Im51bGwifSxCdD17a2luZDoibnVtYmVyIn0sTnQ9e2tpbmQ6InN0cmluZyJ9LGp0PXtraW5kOiJib29sZWFuIn0sVXQ9e2tpbmQ6ImNvbG9yIn0sVnQ9e2tpbmQ6Im9iamVjdCJ9LEh0PXtraW5kOiJ2YWx1ZSJ9LHF0PXtraW5kOiJjb2xsYXRvciJ9LEd0PXtraW5kOiJmb3JtYXR0ZWQifSxZdD17a2luZDoicmVzb2x2ZWRJbWFnZSJ9O2Z1bmN0aW9uIFd0KHQsZSl7cmV0dXJue2tpbmQ6ImFycmF5IixpdGVtVHlwZTp0LE46ZX19ZnVuY3Rpb24gWHQodCl7aWYoImFycmF5Ij09PXQua2luZCl7dmFyIGU9WHQodC5pdGVtVHlwZSk7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0Lk4/ImFycmF5PCIrZSsiLCAiK3QuTisiPiI6InZhbHVlIj09PXQuaXRlbVR5cGUua2luZD8iYXJyYXkiOiJhcnJheTwiK2UrIj4ifXJldHVybiB0LmtpbmR9dmFyIFp0PVtGdCxCdCxOdCxqdCxVdCxHdCxWdCxXdChIdCksWXRdO2Z1bmN0aW9uIEp0KHQsZSl7aWYoImVycm9yIj09PWUua2luZClyZXR1cm4gbnVsbDtpZigiYXJyYXkiPT09dC5raW5kKXtpZigiYXJyYXkiPT09ZS5raW5kJiYoMD09PWUuTiYmInZhbHVlIj09PWUuaXRlbVR5cGUua2luZHx8IUp0KHQuaXRlbVR5cGUsZS5pdGVtVHlwZSkpJiYoIm51bWJlciIhPXR5cGVvZiB0Lk58fHQuTj09PWUuTikpcmV0dXJuIG51bGx9ZWxzZXtpZih0LmtpbmQ9PT1lLmtpbmQpcmV0dXJuIG51bGw7aWYoInZhbHVlIj09PXQua2luZClmb3IodmFyIHI9MCxuPVp0O3I8bi5sZW5ndGg7cis9MSl7aWYoIUp0KG5bcl0sZSkpcmV0dXJuIG51bGx9fXJldHVybiJFeHBlY3RlZCAiK1h0KHQpKyIgYnV0IGZvdW5kICIrWHQoZSkrIiBpbnN0ZWFkLiJ9ZnVuY3Rpb24gS3QodCxlKXtyZXR1cm4gZS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZS5raW5kPT09dC5raW5kfSkpfWZ1bmN0aW9uIFF0KHQsZSl7cmV0dXJuIGUuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIm51bGwiPT09ZT9udWxsPT09dDoiYXJyYXkiPT09ZT9BcnJheS5pc0FycmF5KHQpOiJvYmplY3QiPT09ZT90JiYhQXJyYXkuaXNBcnJheSh0KSYmIm9iamVjdCI9PXR5cGVvZiB0OmU9PT10eXBlb2YgdH0pKX12YXIgJHQ9ZSgoZnVuY3Rpb24odCxlKXt2YXIgcj17dHJhbnNwYXJlbnQ6WzAsMCwwLDBdLGFsaWNlYmx1ZTpbMjQwLDI0OCwyNTUsMV0sYW50aXF1ZXdoaXRlOlsyNTAsMjM1LDIxNSwxXSxhcXVhOlswLDI1NSwyNTUsMV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTIsMV0sYXp1cmU6WzI0MCwyNTUsMjU1LDFdLGJlaWdlOlsyNDUsMjQ1LDIyMCwxXSxiaXNxdWU6WzI1NSwyMjgsMTk2LDFdLGJsYWNrOlswLDAsMCwxXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDUsMV0sYmx1ZTpbMCwwLDI1NSwxXSxibHVldmlvbGV0OlsxMzgsNDMsMjI2LDFdLGJyb3duOlsxNjUsNDIsNDIsMV0sYnVybHl3b29kOlsyMjIsMTg0LDEzNSwxXSxjYWRldGJsdWU6Wzk1LDE1OCwxNjAsMV0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwLDFdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMCwxXSxjb3JhbDpbMjU1LDEyNyw4MCwxXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzcsMV0sY29ybnNpbGs6WzI1NSwyNDgsMjIwLDFdLGNyaW1zb246WzIyMCwyMCw2MCwxXSxjeWFuOlswLDI1NSwyNTUsMV0sZGFya2JsdWU6WzAsMCwxMzksMV0sZGFya2N5YW46WzAsMTM5LDEzOSwxXSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExLDFdLGRhcmtncmF5OlsxNjksMTY5LDE2OSwxXSxkYXJrZ3JlZW46WzAsMTAwLDAsMV0sZGFya2dyZXk6WzE2OSwxNjksMTY5LDFdLGRhcmtraGFraTpbMTg5LDE4MywxMDcsMV0sZGFya21hZ2VudGE6WzEzOSwwLDEzOSwxXSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3LDFdLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMCwxXSxkYXJrb3JjaGlkOlsxNTMsNTAsMjA0LDFdLGRhcmtyZWQ6WzEzOSwwLDAsMV0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjIsMV0sZGFya3NlYWdyZWVuOlsxNDMsMTg4LDE0MywxXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzksMV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzksMV0sZGFya3NsYXRlZ3JleTpbNDcsNzksNzksMV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5LDFdLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMSwxXSxkZWVwcGluazpbMjU1LDIwLDE0NywxXSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1LDFdLGRpbWdyYXk6WzEwNSwxMDUsMTA1LDFdLGRpbWdyZXk6WzEwNSwxMDUsMTA1LDFdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTUsMV0sZmlyZWJyaWNrOlsxNzgsMzQsMzQsMV0sZmxvcmFsd2hpdGU6WzI1NSwyNTAsMjQwLDFdLGZvcmVzdGdyZWVuOlszNCwxMzksMzQsMV0sZnVjaHNpYTpbMjU1LDAsMjU1LDFdLGdhaW5zYm9ybzpbMjIwLDIyMCwyMjAsMV0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTUsMV0sZ29sZDpbMjU1LDIxNSwwLDFdLGdvbGRlbnJvZDpbMjE4LDE2NSwzMiwxXSxncmF5OlsxMjgsMTI4LDEyOCwxXSxncmVlbjpbMCwxMjgsMCwxXSxncmVlbnllbGxvdzpbMTczLDI1NSw0NywxXSxncmV5OlsxMjgsMTI4LDEyOCwxXSxob25leWRldzpbMjQwLDI1NSwyNDAsMV0saG90cGluazpbMjU1LDEwNSwxODAsMV0saW5kaWFucmVkOlsyMDUsOTIsOTIsMV0saW5kaWdvOls3NSwwLDEzMCwxXSxpdm9yeTpbMjU1LDI1NSwyNDAsMV0sa2hha2k6WzI0MCwyMzAsMTQwLDFdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MCwxXSxsYXZlbmRlcmJsdXNoOlsyNTUsMjQwLDI0NSwxXSxsYXduZ3JlZW46WzEyNCwyNTIsMCwxXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1LDFdLGxpZ2h0Ymx1ZTpbMTczLDIxNiwyMzAsMV0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjgsMV0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NSwxXSxsaWdodGdvbGRlbnJvZHllbGxvdzpbMjUwLDI1MCwyMTAsMV0sbGlnaHRncmF5OlsyMTEsMjExLDIxMSwxXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NCwxXSxsaWdodGdyZXk6WzIxMSwyMTEsMjExLDFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTMsMV0sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyLDFdLGxpZ2h0c2VhZ3JlZW46WzMyLDE3OCwxNzAsMV0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MCwxXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTMsMV0sbGlnaHRzbGF0ZWdyZXk6WzExOSwxMzYsMTUzLDFdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMiwxXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjQsMV0sbGltZTpbMCwyNTUsMCwxXSxsaW1lZ3JlZW46WzUwLDIwNSw1MCwxXSxsaW5lbjpbMjUwLDI0MCwyMzAsMV0sbWFnZW50YTpbMjU1LDAsMjU1LDFdLG1hcm9vbjpbMTI4LDAsMCwxXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MCwxXSxtZWRpdW1ibHVlOlswLDAsMjA1LDFdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMSwxXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5LDFdLG1lZGl1bXNlYWdyZWVuOls2MCwxNzksMTEzLDFdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzgsMV0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NCwxXSxtZWRpdW10dXJxdW9pc2U6WzcyLDIwOSwyMDQsMV0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzLDFdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyLDFdLG1pbnRjcmVhbTpbMjQ1LDI1NSwyNTAsMV0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNSwxXSxtb2NjYXNpbjpbMjU1LDIyOCwxODEsMV0sbmF2YWpvd2hpdGU6WzI1NSwyMjIsMTczLDFdLG5hdnk6WzAsMCwxMjgsMV0sb2xkbGFjZTpbMjUzLDI0NSwyMzAsMV0sb2xpdmU6WzEyOCwxMjgsMCwxXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzUsMV0sb3JhbmdlOlsyNTUsMTY1LDAsMV0sb3JhbmdlcmVkOlsyNTUsNjksMCwxXSxvcmNoaWQ6WzIxOCwxMTIsMjE0LDFdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwLDFdLHBhbGVncmVlbjpbMTUyLDI1MSwxNTIsMV0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzgsMV0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDcsMV0scGFwYXlhd2hpcDpbMjU1LDIzOSwyMTMsMV0scGVhY2hwdWZmOlsyNTUsMjE4LDE4NSwxXSxwZXJ1OlsyMDUsMTMzLDYzLDFdLHBpbms6WzI1NSwxOTIsMjAzLDFdLHBsdW06WzIyMSwxNjAsMjIxLDFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwLDFdLHB1cnBsZTpbMTI4LDAsMTI4LDFdLHJlYmVjY2FwdXJwbGU6WzEwMiw1MSwxNTMsMV0scmVkOlsyNTUsMCwwLDFdLHJvc3licm93bjpbMTg4LDE0MywxNDMsMV0scm95YWxibHVlOls2NSwxMDUsMjI1LDFdLHNhZGRsZWJyb3duOlsxMzksNjksMTksMV0sc2FsbW9uOlsyNTAsMTI4LDExNCwxXSxzYW5keWJyb3duOlsyNDQsMTY0LDk2LDFdLHNlYWdyZWVuOls0NiwxMzksODcsMV0sc2Vhc2hlbGw6WzI1NSwyNDUsMjM4LDFdLHNpZW5uYTpbMTYwLDgyLDQ1LDFdLHNpbHZlcjpbMTkyLDE5MiwxOTIsMV0sc2t5Ymx1ZTpbMTM1LDIwNiwyMzUsMV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1LDFdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDQsMV0sc2xhdGVncmV5OlsxMTIsMTI4LDE0NCwxXSxzbm93OlsyNTUsMjUwLDI1MCwxXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3LDFdLHN0ZWVsYmx1ZTpbNzAsMTMwLDE4MCwxXSx0YW46WzIxMCwxODAsMTQwLDFdLHRlYWw6WzAsMTI4LDEyOCwxXSx0aGlzdGxlOlsyMTYsMTkxLDIxNiwxXSx0b21hdG86WzI1NSw5OSw3MSwxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDgsMV0sdmlvbGV0OlsyMzgsMTMwLDIzOCwxXSx3aGVhdDpbMjQ1LDIyMiwxNzksMV0sd2hpdGU6WzI1NSwyNTUsMjU1LDFdLHdoaXRlc21va2U6WzI0NSwyNDUsMjQ1LDFdLHllbGxvdzpbMjU1LDI1NSwwLDFdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwLDFdfTtmdW5jdGlvbiBuKHQpe3JldHVybih0PU1hdGgucm91bmQodCkpPDA/MDp0PjI1NT8yNTU6dH1mdW5jdGlvbiBpKHQpe3JldHVybiB0PDA/MDp0PjE/MTp0fWZ1bmN0aW9uIGEodCl7cmV0dXJuIiUiPT09dFt0Lmxlbmd0aC0xXT9uKHBhcnNlRmxvYXQodCkvMTAwKjI1NSk6bihwYXJzZUludCh0KSl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4iJSI9PT10W3QubGVuZ3RoLTFdP2kocGFyc2VGbG9hdCh0KS8xMDApOmkocGFyc2VGbG9hdCh0KSl9ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuIHI8MD9yKz0xOnI+MSYmKHItPTEpLDYqcjwxP3QrKGUtdCkqcio2OjIqcjwxP2U6MypyPDI/dCsoZS10KSooMi8zLXIpKjY6dH10cnl7ZS5wYXJzZUNTU0NvbG9yPWZ1bmN0aW9uKHQpe3ZhciBlLGk9dC5yZXBsYWNlKC8gL2csIiIpLnRvTG93ZXJDYXNlKCk7aWYoaSBpbiByKXJldHVybiByW2ldLnNsaWNlKCk7aWYoIiMiPT09aVswXSlyZXR1cm4gND09PWkubGVuZ3RoPyhlPXBhcnNlSW50KGkuc3Vic3RyKDEpLDE2KSk+PTAmJmU8PTQwOTU/WygzODQwJmUpPj40fCgzODQwJmUpPj44LDI0MCZlfCgyNDAmZSk+PjQsMTUmZXwoMTUmZSk8PDQsMV06bnVsbDo3PT09aS5sZW5ndGgmJihlPXBhcnNlSW50KGkuc3Vic3RyKDEpLDE2KSk+PTAmJmU8PTE2Nzc3MjE1P1soMTY3MTE2ODAmZSk+PjE2LCg2NTI4MCZlKT4+OCwyNTUmZSwxXTpudWxsO3ZhciBsPWkuaW5kZXhPZigiKCIpLGM9aS5pbmRleE9mKCIpIik7aWYoLTEhPT1sJiZjKzE9PT1pLmxlbmd0aCl7dmFyIHU9aS5zdWJzdHIoMCxsKSxmPWkuc3Vic3RyKGwrMSxjLShsKzEpKS5zcGxpdCgiLCIpLGg9MTtzd2l0Y2godSl7Y2FzZSJyZ2JhIjppZig0IT09Zi5sZW5ndGgpcmV0dXJuIG51bGw7aD1vKGYucG9wKCkpO2Nhc2UicmdiIjpyZXR1cm4gMyE9PWYubGVuZ3RoP251bGw6W2EoZlswXSksYShmWzFdKSxhKGZbMl0pLGhdO2Nhc2UiaHNsYSI6aWYoNCE9PWYubGVuZ3RoKXJldHVybiBudWxsO2g9byhmLnBvcCgpKTtjYXNlImhzbCI6aWYoMyE9PWYubGVuZ3RoKXJldHVybiBudWxsO3ZhciBwPShwYXJzZUZsb2F0KGZbMF0pJTM2MCszNjApJTM2MC8zNjAsZD1vKGZbMV0pLG09byhmWzJdKSxnPW08PS41P20qKGQrMSk6bStkLW0qZCx2PTIqbS1nO3JldHVybltuKDI1NSpzKHYsZyxwKzEvMykpLG4oMjU1KnModixnLHApKSxuKDI1NSpzKHYsZyxwLTEvMykpLGhdO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXJldHVybiBudWxsfX1jYXRjaCh0KXt9fSkpLnBhcnNlQ1NTQ29sb3IsdGU9ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09biYmKG49MSksdGhpcy5yPXQsdGhpcy5nPWUsdGhpcy5iPXIsdGhpcy5hPW59O3RlLnBhcnNlPWZ1bmN0aW9uKHQpe2lmKHQpe2lmKHQgaW5zdGFuY2VvZiB0ZSlyZXR1cm4gdDtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPSR0KHQpO2lmKGUpcmV0dXJuIG5ldyB0ZShlWzBdLzI1NSplWzNdLGVbMV0vMjU1KmVbM10sZVsyXS8yNTUqZVszXSxlWzNdKX19fSx0ZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRvQXJyYXkoKSxlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM107cmV0dXJuInJnYmEoIitNYXRoLnJvdW5kKGUpKyIsIitNYXRoLnJvdW5kKHIpKyIsIitNYXRoLnJvdW5kKG4pKyIsIitpKyIpIn0sdGUucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnIsZT10aGlzLmcscj10aGlzLmIsbj10aGlzLmE7cmV0dXJuIDA9PT1uP1swLDAsMCwwXTpbMjU1KnQvbiwyNTUqZS9uLDI1NSpyL24sbl19LHRlLmJsYWNrPW5ldyB0ZSgwLDAsMCwxKSx0ZS53aGl0ZT1uZXcgdGUoMSwxLDEsMSksdGUudHJhbnNwYXJlbnQ9bmV3IHRlKDAsMCwwLDApLHRlLnJlZD1uZXcgdGUoMSwwLDAsMSk7dmFyIGVlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNlbnNpdGl2aXR5PXQ/ZT8idmFyaWFudCI6ImNhc2UiOmU/ImFjY2VudCI6ImJhc2UiLHRoaXMubG9jYWxlPXIsdGhpcy5jb2xsYXRvcj1uZXcgSW50bC5Db2xsYXRvcih0aGlzLmxvY2FsZT90aGlzLmxvY2FsZTpbXSx7c2Vuc2l0aXZpdHk6dGhpcy5zZW5zaXRpdml0eSx1c2FnZToic2VhcmNoIn0pfTtlZS5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNvbGxhdG9yLmNvbXBhcmUodCxlKX0sZWUucHJvdG90eXBlLnJlc29sdmVkTG9jYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBJbnRsLkNvbGxhdG9yKHRoaXMubG9jYWxlP3RoaXMubG9jYWxlOltdKS5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGV9O3ZhciByZT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMudGV4dD10LHRoaXMuaW1hZ2U9ZSx0aGlzLnNjYWxlPXIsdGhpcy5mb250U3RhY2s9bix0aGlzLnRleHRDb2xvcj1pfSxuZT1mdW5jdGlvbih0KXt0aGlzLnNlY3Rpb25zPXR9O25lLmZyb21TdHJpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBuZShbbmV3IHJlKHQsbnVsbCxudWxsLG51bGwsbnVsbCldKX0sbmUucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuc2VjdGlvbnMubGVuZ3RofHwhdGhpcy5zZWN0aW9ucy5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gMCE9PXQudGV4dC5sZW5ndGh8fHQuaW1hZ2UmJjAhPT10LmltYWdlLm5hbWUubGVuZ3RofSkpfSxuZS5mYWN0b3J5PWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgbmU/dDpuZS5mcm9tU3RyaW5nKHQpfSxuZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuc2VjdGlvbnMubGVuZ3RoPyIiOnRoaXMuc2VjdGlvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0fSkpLmpvaW4oIiIpfSxuZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVsiZm9ybWF0Il0sZT0wLHI9dGhpcy5zZWN0aW9ucztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07aWYobi5pbWFnZSl0LnB1c2goWyJpbWFnZSIsbi5pbWFnZS5uYW1lXSk7ZWxzZXt0LnB1c2gobi50ZXh0KTt2YXIgaT17fTtuLmZvbnRTdGFjayYmKGlbInRleHQtZm9udCJdPVsibGl0ZXJhbCIsbi5mb250U3RhY2suc3BsaXQoIiwiKV0pLG4uc2NhbGUmJihpWyJmb250LXNjYWxlIl09bi5zY2FsZSksbi50ZXh0Q29sb3ImJihpWyJ0ZXh0LWNvbG9yIl09WyJyZ2JhIl0uY29uY2F0KG4udGV4dENvbG9yLnRvQXJyYXkoKSkpLHQucHVzaChpKX19cmV0dXJuIHR9O3ZhciBpZT1mdW5jdGlvbih0KXt0aGlzLm5hbWU9dC5uYW1lLHRoaXMuYXZhaWxhYmxlPXQuYXZhaWxhYmxlfTtmdW5jdGlvbiBhZSh0LGUscixuKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTAmJnQ8PTI1NSYmIm51bWJlciI9PXR5cGVvZiBlJiZlPj0wJiZlPD0yNTUmJiJudW1iZXIiPT10eXBlb2YgciYmcj49MCYmcjw9MjU1P3ZvaWQgMD09PW58fCJudW1iZXIiPT10eXBlb2YgbiYmbj49MCYmbjw9MT9udWxsOiJJbnZhbGlkIHJnYmEgdmFsdWUgWyIrW3QsZSxyLG5dLmpvaW4oIiwgIikrIl06ICdhJyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4iOiJJbnZhbGlkIHJnYmEgdmFsdWUgWyIrKCJudW1iZXIiPT10eXBlb2Ygbj9bdCxlLHIsbl06W3QsZSxyXSkuam9pbigiLCAiKSsiXTogJ3InLCAnZycsIGFuZCAnYicgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI1NS4ifWZ1bmN0aW9uIG9lKHQpe2lmKG51bGw9PT10KXJldHVybiEwO2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4hMDtpZigiYm9vbGVhbiI9PXR5cGVvZiB0KXJldHVybiEwO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4hMDtpZih0IGluc3RhbmNlb2YgdGUpcmV0dXJuITA7aWYodCBpbnN0YW5jZW9mIGVlKXJldHVybiEwO2lmKHQgaW5zdGFuY2VvZiBuZSlyZXR1cm4hMDtpZih0IGluc3RhbmNlb2YgaWUpcmV0dXJuITA7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSl7aWYoIW9lKHJbZV0pKXJldHVybiExfXJldHVybiEwfWlmKCJvYmplY3QiPT10eXBlb2YgdCl7Zm9yKHZhciBuIGluIHQpaWYoIW9lKHRbbl0pKXJldHVybiExO3JldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHNlKHQpe2lmKG51bGw9PT10KXJldHVybiBGdDtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIE50O2lmKCJib29sZWFuIj09dHlwZW9mIHQpcmV0dXJuIGp0O2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gQnQ7aWYodCBpbnN0YW5jZW9mIHRlKXJldHVybiBVdDtpZih0IGluc3RhbmNlb2YgZWUpcmV0dXJuIHF0O2lmKHQgaW5zdGFuY2VvZiBuZSlyZXR1cm4gR3Q7aWYodCBpbnN0YW5jZW9mIGllKXJldHVybiBZdDtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGUscj10Lmxlbmd0aCxuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9c2UoaVtuXSk7aWYoZSl7aWYoZT09PWEpY29udGludWU7ZT1IdDticmVha31lPWF9cmV0dXJuIFd0KGV8fEh0LHIpfXJldHVybiBWdH1mdW5jdGlvbiBsZSh0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbD09PXQ/IiI6InN0cmluZyI9PT1lfHwibnVtYmVyIj09PWV8fCJib29sZWFuIj09PWU/U3RyaW5nKHQpOnQgaW5zdGFuY2VvZiB0ZXx8dCBpbnN0YW5jZW9mIG5lfHx0IGluc3RhbmNlb2YgaWU/dC50b1N0cmluZygpOkpTT04uc3RyaW5naWZ5KHQpfWllLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWV9LGllLmZyb21TdHJpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/bmV3IGllKHtuYW1lOnQsYXZhaWxhYmxlOiExfSk6bnVsbH0saWUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsiaW1hZ2UiLHRoaXMubmFtZV19O3ZhciBjZT1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMudmFsdWU9ZX07Y2UucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIidsaXRlcmFsJyBleHByZXNzaW9uIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO2lmKCFvZSh0WzFdKSlyZXR1cm4gZS5lcnJvcigiaW52YWxpZCB2YWx1ZSIpO3ZhciByPXRbMV0sbj1zZShyKSxpPWUuZXhwZWN0ZWRUeXBlO3JldHVybiJhcnJheSIhPT1uLmtpbmR8fDAhPT1uLk58fCFpfHwiYXJyYXkiIT09aS5raW5kfHwibnVtYmVyIj09dHlwZW9mIGkuTiYmMCE9PWkuTnx8KG49aSksbmV3IGNlKG4scil9LGNlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfSxjZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKCl7fSxjZS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiEwfSxjZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuImFycmF5Ij09PXRoaXMudHlwZS5raW5kfHwib2JqZWN0Ij09PXRoaXMudHlwZS5raW5kP1sibGl0ZXJhbCIsdGhpcy52YWx1ZV06dGhpcy52YWx1ZSBpbnN0YW5jZW9mIHRlP1sicmdiYSJdLmNvbmNhdCh0aGlzLnZhbHVlLnRvQXJyYXkoKSk6dGhpcy52YWx1ZSBpbnN0YW5jZW9mIG5lP3RoaXMudmFsdWUuc2VyaWFsaXplKCk6dGhpcy52YWx1ZX07dmFyIHVlPWZ1bmN0aW9uKHQpe3RoaXMubmFtZT0iRXhwcmVzc2lvbkV2YWx1YXRpb25FcnJvciIsdGhpcy5tZXNzYWdlPXR9O3VlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlfTt2YXIgZmU9e3N0cmluZzpOdCxudW1iZXI6QnQsYm9vbGVhbjpqdCxvYmplY3Q6VnR9LGhlPWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy5hcmdzPWV9O2hlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MilyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpO3ZhciByLG49MSxpPXRbMF07aWYoImFycmF5Ij09PWkpe3ZhciBhLG87aWYodC5sZW5ndGg+Mil7dmFyIHM9dFsxXTtpZigic3RyaW5nIiE9dHlwZW9mIHN8fCEocyBpbiBmZSl8fCJvYmplY3QiPT09cylyZXR1cm4gZS5lcnJvcignVGhlIGl0ZW0gdHlwZSBhcmd1bWVudCBvZiAiYXJyYXkiIG11c3QgYmUgb25lIG9mIHN0cmluZywgbnVtYmVyLCBib29sZWFuJywxKTthPWZlW3NdLG4rK31lbHNlIGE9SHQ7aWYodC5sZW5ndGg+Myl7aWYobnVsbCE9PXRbMl0mJigibnVtYmVyIiE9dHlwZW9mIHRbMl18fHRbMl08MHx8dFsyXSE9PU1hdGguZmxvb3IodFsyXSkpKXJldHVybiBlLmVycm9yKCdUaGUgbGVuZ3RoIGFyZ3VtZW50IHRvICJhcnJheSIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgbGl0ZXJhbCcsMik7bz10WzJdLG4rK31yPVd0KGEsbyl9ZWxzZSByPWZlW2ldO2Zvcih2YXIgbD1bXTtuPHQubGVuZ3RoO24rKyl7dmFyIGM9ZS5wYXJzZSh0W25dLG4sSHQpO2lmKCFjKXJldHVybiBudWxsO2wucHVzaChjKX1yZXR1cm4gbmV3IGhlKHIsbCl9LGhlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHRoaXMuYXJncy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLmFyZ3NbZV0uZXZhbHVhdGUodCk7aWYoIUp0KHRoaXMudHlwZSxzZShyKSkpcmV0dXJuIHI7aWYoZT09PXRoaXMuYXJncy5sZW5ndGgtMSl0aHJvdyBuZXcgdWUoIkV4cGVjdGVkIHZhbHVlIHRvIGJlIG9mIHR5cGUgIitYdCh0aGlzLnR5cGUpKyIsIGJ1dCBmb3VuZCAiK1h0KHNlKHIpKSsiIGluc3RlYWQuIil9cmV0dXJuIG51bGx9LGhlLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5hcmdzLmZvckVhY2godCl9LGhlLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXJncy5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQub3V0cHV0RGVmaW5lZCgpfSkpfSxoZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50eXBlLGU9W3Qua2luZF07aWYoImFycmF5Ij09PXQua2luZCl7dmFyIHI9dC5pdGVtVHlwZTtpZigic3RyaW5nIj09PXIua2luZHx8Im51bWJlciI9PT1yLmtpbmR8fCJib29sZWFuIj09PXIua2luZCl7ZS5wdXNoKHIua2luZCk7dmFyIG49dC5OOygibnVtYmVyIj09dHlwZW9mIG58fHRoaXMuYXJncy5sZW5ndGg+MSkmJmUucHVzaChuKX19cmV0dXJuIGUuY29uY2F0KHRoaXMuYXJncy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSkpKX07dmFyIHBlPWZ1bmN0aW9uKHQpe3RoaXMudHlwZT1HdCx0aGlzLnNlY3Rpb25zPXR9O3BlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MilyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpO3ZhciByPXRbMV07aWYoIUFycmF5LmlzQXJyYXkocikmJiJvYmplY3QiPT10eXBlb2YgcilyZXR1cm4gZS5lcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBpbWFnZSBvciB0ZXh0IHNlY3Rpb24uIik7Zm9yKHZhciBuPVtdLGk9ITEsYT0xO2E8PXQubGVuZ3RoLTE7KythKXt2YXIgbz10W2FdO2lmKGkmJiJvYmplY3QiPT10eXBlb2YgbyYmIUFycmF5LmlzQXJyYXkobykpe2k9ITE7dmFyIHM9bnVsbDtpZihvWyJmb250LXNjYWxlIl0mJiEocz1lLnBhcnNlKG9bImZvbnQtc2NhbGUiXSwxLEJ0KSkpcmV0dXJuIG51bGw7dmFyIGw9bnVsbDtpZihvWyJ0ZXh0LWZvbnQiXSYmIShsPWUucGFyc2Uob1sidGV4dC1mb250Il0sMSxXdChOdCkpKSlyZXR1cm4gbnVsbDt2YXIgYz1udWxsO2lmKG9bInRleHQtY29sb3IiXSYmIShjPWUucGFyc2Uob1sidGV4dC1jb2xvciJdLDEsVXQpKSlyZXR1cm4gbnVsbDt2YXIgdT1uW24ubGVuZ3RoLTFdO3Uuc2NhbGU9cyx1LmZvbnQ9bCx1LnRleHRDb2xvcj1jfWVsc2V7dmFyIGY9ZS5wYXJzZSh0W2FdLDEsSHQpO2lmKCFmKXJldHVybiBudWxsO3ZhciBoPWYudHlwZS5raW5kO2lmKCJzdHJpbmciIT09aCYmInZhbHVlIiE9PWgmJiJudWxsIiE9PWgmJiJyZXNvbHZlZEltYWdlIiE9PWgpcmV0dXJuIGUuZXJyb3IoIkZvcm1hdHRlZCB0ZXh0IHR5cGUgbXVzdCBiZSAnc3RyaW5nJywgJ3ZhbHVlJywgJ2ltYWdlJyBvciAnbnVsbCcuIik7aT0hMCxuLnB1c2goe2NvbnRlbnQ6ZixzY2FsZTpudWxsLGZvbnQ6bnVsbCx0ZXh0Q29sb3I6bnVsbH0pfX1yZXR1cm4gbmV3IHBlKG4pfSxwZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBuZSh0aGlzLnNlY3Rpb25zLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHI9ZS5jb250ZW50LmV2YWx1YXRlKHQpO3JldHVybiBzZShyKT09PVl0P25ldyByZSgiIixyLG51bGwsbnVsbCxudWxsKTpuZXcgcmUobGUociksbnVsbCxlLnNjYWxlP2Uuc2NhbGUuZXZhbHVhdGUodCk6bnVsbCxlLmZvbnQ/ZS5mb250LmV2YWx1YXRlKHQpLmpvaW4oIiwiKTpudWxsLGUudGV4dENvbG9yP2UudGV4dENvbG9yLmV2YWx1YXRlKHQpOm51bGwpfSkpKX0scGUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuc2VjdGlvbnM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO3Qobi5jb250ZW50KSxuLnNjYWxlJiZ0KG4uc2NhbGUpLG4uZm9udCYmdChuLmZvbnQpLG4udGV4dENvbG9yJiZ0KG4udGV4dENvbG9yKX19LHBlLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHBlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9WyJmb3JtYXQiXSxlPTAscj10aGlzLnNlY3Rpb25zO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTt0LnB1c2gobi5jb250ZW50LnNlcmlhbGl6ZSgpKTt2YXIgaT17fTtuLnNjYWxlJiYoaVsiZm9udC1zY2FsZSJdPW4uc2NhbGUuc2VyaWFsaXplKCkpLG4uZm9udCYmKGlbInRleHQtZm9udCJdPW4uZm9udC5zZXJpYWxpemUoKSksbi50ZXh0Q29sb3ImJihpWyJ0ZXh0LWNvbG9yIl09bi50ZXh0Q29sb3Iuc2VyaWFsaXplKCkpLHQucHVzaChpKX1yZXR1cm4gdH07dmFyIGRlPWZ1bmN0aW9uKHQpe3RoaXMudHlwZT1ZdCx0aGlzLmlucHV0PXR9O2RlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMiE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCB0d28gYXJndW1lbnRzLiIpO3ZhciByPWUucGFyc2UodFsxXSwxLE50KTtyZXR1cm4gcj9uZXcgZGUocik6ZS5lcnJvcigiTm8gaW1hZ2UgbmFtZSBwcm92aWRlZC4iKX0sZGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQuZXZhbHVhdGUodCkscj1pZS5mcm9tU3RyaW5nKGUpO3JldHVybiByJiZ0LmF2YWlsYWJsZUltYWdlcyYmKHIuYXZhaWxhYmxlPXQuYXZhaWxhYmxlSW1hZ2VzLmluZGV4T2YoZSk+LTEpLHJ9LGRlLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KX0sZGUucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZGUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsiaW1hZ2UiLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldfTt2YXIgbWU9eyJ0by1ib29sZWFuIjpqdCwidG8tY29sb3IiOlV0LCJ0by1udW1iZXIiOkJ0LCJ0by1zdHJpbmciOk50fSxnZT1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMuYXJncz1lfTtnZS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDIpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKTt2YXIgcj10WzBdO2lmKCgidG8tYm9vbGVhbiI9PT1yfHwidG8tc3RyaW5nIj09PXIpJiYyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIG9uZSBhcmd1bWVudC4iKTtmb3IodmFyIG49bWVbcl0saT1bXSxhPTE7YTx0Lmxlbmd0aDthKyspe3ZhciBvPWUucGFyc2UodFthXSxhLEh0KTtpZighbylyZXR1cm4gbnVsbDtpLnB1c2gobyl9cmV0dXJuIG5ldyBnZShuLGkpfSxnZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7aWYoImJvb2xlYW4iPT09dGhpcy50eXBlLmtpbmQpcmV0dXJuIEJvb2xlYW4odGhpcy5hcmdzWzBdLmV2YWx1YXRlKHQpKTtpZigiY29sb3IiPT09dGhpcy50eXBlLmtpbmQpe2Zvcih2YXIgZSxyLG49MCxpPXRoaXMuYXJncztuPGkubGVuZ3RoO24rPTEpe2lmKHI9bnVsbCwoZT1pW25dLmV2YWx1YXRlKHQpKWluc3RhbmNlb2YgdGUpcmV0dXJuIGU7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgYT10LnBhcnNlQ29sb3IoZSk7aWYoYSlyZXR1cm4gYX1lbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkmJiEocj1lLmxlbmd0aDwzfHxlLmxlbmd0aD40PyJJbnZhbGlkIHJiZ2EgdmFsdWUgIitKU09OLnN0cmluZ2lmeShlKSsiOiBleHBlY3RlZCBhbiBhcnJheSBjb250YWluaW5nIGVpdGhlciB0aHJlZSBvciBmb3VyIG51bWVyaWMgdmFsdWVzLiI6YWUoZVswXSxlWzFdLGVbMl0sZVszXSkpKXJldHVybiBuZXcgdGUoZVswXS8yNTUsZVsxXS8yNTUsZVsyXS8yNTUsZVszXSl9dGhyb3cgbmV3IHVlKHJ8fCJDb3VsZCBub3QgcGFyc2UgY29sb3IgZnJvbSB2YWx1ZSAnIisoInN0cmluZyI9PXR5cGVvZiBlP2U6U3RyaW5nKEpTT04uc3RyaW5naWZ5KGUpKSkrIiciKX1pZigibnVtYmVyIj09PXRoaXMudHlwZS5raW5kKXtmb3IodmFyIG89bnVsbCxzPTAsbD10aGlzLmFyZ3M7czxsLmxlbmd0aDtzKz0xKXtpZihudWxsPT09KG89bFtzXS5ldmFsdWF0ZSh0KSkpcmV0dXJuIDA7dmFyIGM9TnVtYmVyKG8pO2lmKCFpc05hTihjKSlyZXR1cm4gY310aHJvdyBuZXcgdWUoIkNvdWxkIG5vdCBjb252ZXJ0ICIrSlNPTi5zdHJpbmdpZnkobykrIiB0byBudW1iZXIuIil9cmV0dXJuImZvcm1hdHRlZCI9PT10aGlzLnR5cGUua2luZD9uZS5mcm9tU3RyaW5nKGxlKHRoaXMuYXJnc1swXS5ldmFsdWF0ZSh0KSkpOiJyZXNvbHZlZEltYWdlIj09PXRoaXMudHlwZS5raW5kP2llLmZyb21TdHJpbmcobGUodGhpcy5hcmdzWzBdLmV2YWx1YXRlKHQpKSk6bGUodGhpcy5hcmdzWzBdLmV2YWx1YXRlKHQpKX0sZ2UucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0aGlzLmFyZ3MuZm9yRWFjaCh0KX0sZ2UucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcmdzLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC5vdXRwdXREZWZpbmVkKCl9KSl9LGdlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtpZigiZm9ybWF0dGVkIj09PXRoaXMudHlwZS5raW5kKXJldHVybiBuZXcgcGUoW3tjb250ZW50OnRoaXMuYXJnc1swXSxzY2FsZTpudWxsLGZvbnQ6bnVsbCx0ZXh0Q29sb3I6bnVsbH1dKS5zZXJpYWxpemUoKTtpZigicmVzb2x2ZWRJbWFnZSI9PT10aGlzLnR5cGUua2luZClyZXR1cm4gbmV3IGRlKHRoaXMuYXJnc1swXSkuc2VyaWFsaXplKCk7dmFyIHQ9WyJ0by0iK3RoaXMudHlwZS5raW5kXTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoKGZ1bmN0aW9uKGUpe3QucHVzaChlLnNlcmlhbGl6ZSgpKX0pKSx0fTt2YXIgdmU9WyJVbmtub3duIiwiUG9pbnQiLCJMaW5lU3RyaW5nIiwiUG9seWdvbiJdLHllPWZ1bmN0aW9uKCl7dGhpcy5nbG9iYWxzPW51bGwsdGhpcy5mZWF0dXJlPW51bGwsdGhpcy5mZWF0dXJlU3RhdGU9bnVsbCx0aGlzLmZvcm1hdHRlZFNlY3Rpb249bnVsbCx0aGlzLl9wYXJzZUNvbG9yQ2FjaGU9e30sdGhpcy5hdmFpbGFibGVJbWFnZXM9bnVsbCx0aGlzLmNhbm9uaWNhbD1udWxsfTt5ZS5wcm90b3R5cGUuaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZWF0dXJlJiYiaWQiaW4gdGhpcy5mZWF0dXJlP3RoaXMuZmVhdHVyZS5pZDpudWxsfSx5ZS5wcm90b3R5cGUuZ2VvbWV0cnlUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmVhdHVyZT8ibnVtYmVyIj09dHlwZW9mIHRoaXMuZmVhdHVyZS50eXBlP3ZlW3RoaXMuZmVhdHVyZS50eXBlXTp0aGlzLmZlYXR1cmUudHlwZTpudWxsfSx5ZS5wcm90b3R5cGUuZ2VvbWV0cnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZWF0dXJlJiYiZ2VvbWV0cnkiaW4gdGhpcy5mZWF0dXJlP3RoaXMuZmVhdHVyZS5nZW9tZXRyeTpudWxsfSx5ZS5wcm90b3R5cGUuY2Fub25pY2FsSUQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5vbmljYWx9LHllLnByb3RvdHlwZS5wcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmVhdHVyZSYmdGhpcy5mZWF0dXJlLnByb3BlcnRpZXN8fHt9fSx5ZS5wcm90b3R5cGUucGFyc2VDb2xvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wYXJzZUNvbG9yQ2FjaGVbdF07cmV0dXJuIGV8fChlPXRoaXMuX3BhcnNlQ29sb3JDYWNoZVt0XT10ZS5wYXJzZSh0KSksZX07dmFyIHhlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuX2V2YWx1YXRlPXIsdGhpcy5hcmdzPW59O3hlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXZhbHVhdGUodCx0aGlzLmFyZ3MpfSx4ZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSx4ZS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSx4ZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMubmFtZV0uY29uY2F0KHRoaXMuYXJncy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSkpKX0seGUucGFyc2U9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRbMF0saT14ZS5kZWZpbml0aW9uc1tuXTtpZighaSlyZXR1cm4gZS5lcnJvcignVW5rbm93biBleHByZXNzaW9uICInK24rJyIuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgWyJsaXRlcmFsIiwgWy4uLl1dLicsMCk7Zm9yKHZhciBhPUFycmF5LmlzQXJyYXkoaSk/aVswXTppLnR5cGUsbz1BcnJheS5pc0FycmF5KGkpP1tbaVsxXSxpWzJdXV06aS5vdmVybG9hZHMscz1vLmZpbHRlcigoZnVuY3Rpb24oZSl7dmFyIHI9ZVswXTtyZXR1cm4hQXJyYXkuaXNBcnJheShyKXx8ci5sZW5ndGg9PT10Lmxlbmd0aC0xfSkpLGw9bnVsbCxjPTAsdT1zO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGY9dVtjXSxoPWZbMF0scD1mWzFdO2w9bmV3IFVlKGUucmVnaXN0cnksZS5wYXRoLG51bGwsZS5zY29wZSk7Zm9yKHZhciBkPVtdLG09ITEsZz0xO2c8dC5sZW5ndGg7ZysrKXt2YXIgdj10W2ddLHk9QXJyYXkuaXNBcnJheShoKT9oW2ctMV06aC50eXBlLHg9bC5wYXJzZSh2LDErZC5sZW5ndGgseSk7aWYoIXgpe209ITA7YnJlYWt9ZC5wdXNoKHgpfWlmKCFtKWlmKEFycmF5LmlzQXJyYXkoaCkmJmgubGVuZ3RoIT09ZC5sZW5ndGgpbC5lcnJvcigiRXhwZWN0ZWQgIitoLmxlbmd0aCsiIGFyZ3VtZW50cywgYnV0IGZvdW5kICIrZC5sZW5ndGgrIiBpbnN0ZWFkLiIpO2Vsc2V7Zm9yKHZhciBiPTA7YjxkLmxlbmd0aDtiKyspe3ZhciBfPUFycmF5LmlzQXJyYXkoaCk/aFtiXTpoLnR5cGUsdz1kW2JdO2wuY29uY2F0KGIrMSkuY2hlY2tTdWJ0eXBlKF8sdy50eXBlKX1pZigwPT09bC5lcnJvcnMubGVuZ3RoKXJldHVybiBuZXcgeGUobixhLHAsZCl9fWlmKDE9PT1zLmxlbmd0aCkocj1lLmVycm9ycykucHVzaC5hcHBseShyLGwuZXJyb3JzKTtlbHNle2Zvcih2YXIgVD0ocy5sZW5ndGg/czpvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlLHI9dFswXTtyZXR1cm4gZT1yLEFycmF5LmlzQXJyYXkoZSk/IigiK2UubWFwKFh0KS5qb2luKCIsICIpKyIpIjoiKCIrWHQoZS50eXBlKSsiLi4uKSJ9KSkuam9pbigiIHwgIiksaz1bXSxBPTE7QTx0Lmxlbmd0aDtBKyspe3ZhciBNPWUucGFyc2UodFtBXSwxK2subGVuZ3RoKTtpZighTSlyZXR1cm4gbnVsbDtrLnB1c2goWHQoTS50eXBlKSl9ZS5lcnJvcigiRXhwZWN0ZWQgYXJndW1lbnRzIG9mIHR5cGUgIitUKyIsIGJ1dCBmb3VuZCAoIitrLmpvaW4oIiwgIikrIikgaW5zdGVhZC4iKX1yZXR1cm4gbnVsbH0seGUucmVnaXN0ZXI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4geGUuZGVmaW5pdGlvbnM9ZSxlKXRbcl09eGV9O3ZhciBiZT1mdW5jdGlvbih0LGUscil7dGhpcy50eXBlPXF0LHRoaXMubG9jYWxlPXIsdGhpcy5jYXNlU2Vuc2l0aXZlPXQsdGhpcy5kaWFjcml0aWNTZW5zaXRpdmU9ZX07YmUucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIG9uZSBhcmd1bWVudC4iKTt2YXIgcj10WzFdO2lmKCJvYmplY3QiIT10eXBlb2Ygcnx8QXJyYXkuaXNBcnJheShyKSlyZXR1cm4gZS5lcnJvcigiQ29sbGF0b3Igb3B0aW9ucyBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdC4iKTt2YXIgbj1lLnBhcnNlKHZvaWQgMCE9PXJbImNhc2Utc2Vuc2l0aXZlIl0mJnJbImNhc2Utc2Vuc2l0aXZlIl0sMSxqdCk7aWYoIW4pcmV0dXJuIG51bGw7dmFyIGk9ZS5wYXJzZSh2b2lkIDAhPT1yWyJkaWFjcml0aWMtc2Vuc2l0aXZlIl0mJnJbImRpYWNyaXRpYy1zZW5zaXRpdmUiXSwxLGp0KTtpZighaSlyZXR1cm4gbnVsbDt2YXIgYT1udWxsO3JldHVybiByLmxvY2FsZSYmIShhPWUucGFyc2Uoci5sb2NhbGUsMSxOdCkpP251bGw6bmV3IGJlKG4saSxhKX0sYmUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZWUodGhpcy5jYXNlU2Vuc2l0aXZlLmV2YWx1YXRlKHQpLHRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlLmV2YWx1YXRlKHQpLHRoaXMubG9jYWxlP3RoaXMubG9jYWxlLmV2YWx1YXRlKHQpOm51bGwpfSxiZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5jYXNlU2Vuc2l0aXZlKSx0KHRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlKSx0aGlzLmxvY2FsZSYmdCh0aGlzLmxvY2FsZSl9LGJlLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGJlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdFsiY2FzZS1zZW5zaXRpdmUiXT10aGlzLmNhc2VTZW5zaXRpdmUuc2VyaWFsaXplKCksdFsiZGlhY3JpdGljLXNlbnNpdGl2ZSJdPXRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlLnNlcmlhbGl6ZSgpLHRoaXMubG9jYWxlJiYodC5sb2NhbGU9dGhpcy5sb2NhbGUuc2VyaWFsaXplKCkpLFsiY29sbGF0b3IiLHRdfTtmdW5jdGlvbiBfZSh0LGUpe3RbMF09TWF0aC5taW4odFswXSxlWzBdKSx0WzFdPU1hdGgubWluKHRbMV0sZVsxXSksdFsyXT1NYXRoLm1heCh0WzJdLGVbMF0pLHRbM109TWF0aC5tYXgodFszXSxlWzFdKX1mdW5jdGlvbiB3ZSh0LGUpe3JldHVybiEodFswXTw9ZVswXSkmJighKHRbMl0+PWVbMl0pJiYoISh0WzFdPD1lWzFdKSYmISh0WzNdPj1lWzNdKSkpfWZ1bmN0aW9uIFRlKHQsZSl7dmFyIHIsbj0oMTgwK3RbMF0pLzM2MCxpPShyPXRbMV0sKDE4MC0xODAvTWF0aC5QSSpNYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJLzQrcipNYXRoLlBJLzM2MCkpKS8zNjApLGE9TWF0aC5wb3coMixlLnopO3JldHVybltNYXRoLnJvdW5kKG4qYSo4MTkyKSxNYXRoLnJvdW5kKGkqYSo4MTkyKV19ZnVuY3Rpb24ga2UodCxlLHIpe3JldHVybiBlWzFdPnRbMV0hPXJbMV0+dFsxXSYmdFswXTwoclswXS1lWzBdKSoodFsxXS1lWzFdKS8oclsxXS1lWzFdKStlWzBdfWZ1bmN0aW9uIEFlKHQsZSl7Zm9yKHZhciByLG4saSxhLG8scyxsLGM9ITEsdT0wLGY9ZS5sZW5ndGg7dTxmO3UrKylmb3IodmFyIGg9ZVt1XSxwPTAsZD1oLmxlbmd0aDtwPGQtMTtwKyspe2lmKHI9dCxuPWhbcF0saT1oW3ArMV0sYT12b2lkIDAsbz12b2lkIDAscz12b2lkIDAsbD12b2lkIDAsYT1yWzBdLW5bMF0sbz1yWzFdLW5bMV0scz1yWzBdLWlbMF0sbD1yWzFdLWlbMV0sYSpsLXMqbz09MCYmYSpzPD0wJiZvKmw8PTApcmV0dXJuITE7a2UodCxoW3BdLGhbcCsxXSkmJihjPSFjKX1yZXR1cm4gY31mdW5jdGlvbiBNZSh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKEFlKHQsZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gU2UodCxlLHIsbil7dmFyIGk9dFswXS1yWzBdLGE9dFsxXS1yWzFdLG89ZVswXS1yWzBdLHM9ZVsxXS1yWzFdLGw9blswXS1yWzBdLGM9blsxXS1yWzFdLHU9aSpjLWwqYSxmPW8qYy1sKnM7cmV0dXJuIHU+MCYmZjwwfHx1PDAmJmY+MH1mdW5jdGlvbiBFZSh0LGUscil7Zm9yKHZhciBuPTAsaT1yO248aS5sZW5ndGg7bis9MSlmb3IodmFyIGE9aVtuXSxvPTA7bzxhLmxlbmd0aC0xOysrbylpZihzPXQsbD1lLGM9YVtvXSx1PWFbbysxXSxmPXZvaWQgMCxoPXZvaWQgMCxwPXZvaWQgMCxkPXZvaWQgMCxwPVtsWzBdLXNbMF0sbFsxXS1zWzFdXSxkPVt1WzBdLWNbMF0sdVsxXS1jWzFdXSwwIT0oZj1kKVswXSooaD1wKVsxXS1mWzFdKmhbMF0mJlNlKHMsbCxjLHUpJiZTZShjLHUscyxsKSlyZXR1cm4hMDt2YXIgcyxsLGMsdSxmLGgscCxkO3JldHVybiExfWZ1bmN0aW9uIExlKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYoIUFlKHRbcl0sZSkpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aC0xOysrbilpZihFZSh0W25dLHRbbisxXSxlKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBDZSh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKExlKHQsZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gUGUodCxlLHIpe2Zvcih2YXIgbj1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspe2Zvcih2YXIgYT1bXSxvPTA7bzx0W2ldLmxlbmd0aDtvKyspe3ZhciBzPVRlKHRbaV1bb10scik7X2UoZSxzKSxhLnB1c2gocyl9bi5wdXNoKGEpfXJldHVybiBufWZ1bmN0aW9uIEllKHQsZSxyKXtmb3IodmFyIG49W10saT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1QZSh0W2ldLGUscik7bi5wdXNoKGEpfXJldHVybiBufWZ1bmN0aW9uIE9lKHQsZSxyLG4pe2lmKHRbMF08clswXXx8dFswXT5yWzJdKXt2YXIgaT0uNSpuLGE9dFswXS1yWzBdPmk/LW46clswXS10WzBdPmk/bjowOzA9PT1hJiYoYT10WzBdLXJbMl0+aT8tbjpyWzJdLXRbMF0+aT9uOjApLHRbMF0rPWF9X2UoZSx0KX1mdW5jdGlvbiB6ZSh0LGUscixuKXtmb3IodmFyIGk9ODE5MipNYXRoLnBvdygyLG4ueiksYT1bODE5MipuLngsODE5MipuLnldLG89W10scz0wLGw9dDtzPGwubGVuZ3RoO3MrPTEpZm9yKHZhciBjPTAsdT1sW3NdO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGY9dVtjXSxoPVtmLngrYVswXSxmLnkrYVsxXV07T2UoaCxlLHIsaSksby5wdXNoKGgpfXJldHVybiBvfWZ1bmN0aW9uIERlKHQsZSxyLG4pe2Zvcih2YXIgaSxhPTgxOTIqTWF0aC5wb3coMixuLnopLG89WzgxOTIqbi54LDgxOTIqbi55XSxzPVtdLGw9MCxjPXQ7bDxjLmxlbmd0aDtsKz0xKXtmb3IodmFyIHU9W10sZj0wLGg9Y1tsXTtmPGgubGVuZ3RoO2YrPTEpe3ZhciBwPWhbZl0sZD1bcC54K29bMF0scC55K29bMV1dO19lKGUsZCksdS5wdXNoKGQpfXMucHVzaCh1KX1pZihlWzJdLWVbMF08PWEvMil7KGk9ZSlbMF09aVsxXT0xLzAsaVsyXT1pWzNdPS0xLzA7Zm9yKHZhciBtPTAsZz1zO208Zy5sZW5ndGg7bSs9MSlmb3IodmFyIHY9MCx5PWdbbV07djx5Lmxlbmd0aDt2Kz0xKXtPZSh5W3ZdLGUscixhKX19cmV0dXJuIHN9dmFyIFJlPWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPWp0LHRoaXMuZ2VvanNvbj10LHRoaXMuZ2VvbWV0cmllcz1lfTtmdW5jdGlvbiBGZSh0KXtpZih0IGluc3RhbmNlb2YgeGUpe2lmKCJnZXQiPT09dC5uYW1lJiYxPT09dC5hcmdzLmxlbmd0aClyZXR1cm4hMTtpZigiZmVhdHVyZS1zdGF0ZSI9PT10Lm5hbWUpcmV0dXJuITE7aWYoImhhcyI9PT10Lm5hbWUmJjE9PT10LmFyZ3MubGVuZ3RoKXJldHVybiExO2lmKCJwcm9wZXJ0aWVzIj09PXQubmFtZXx8Imdlb21ldHJ5LXR5cGUiPT09dC5uYW1lfHwiaWQiPT09dC5uYW1lKXJldHVybiExO2lmKC9eZmlsdGVyLS8udGVzdCh0Lm5hbWUpKXJldHVybiExfWlmKHQgaW5zdGFuY2VvZiBSZSlyZXR1cm4hMTt2YXIgZT0hMDtyZXR1cm4gdC5lYWNoQ2hpbGQoKGZ1bmN0aW9uKHQpe2UmJiFGZSh0KSYmKGU9ITEpfSkpLGV9ZnVuY3Rpb24gQmUodCl7aWYodCBpbnN0YW5jZW9mIHhlJiYiZmVhdHVyZS1zdGF0ZSI9PT10Lm5hbWUpcmV0dXJuITE7dmFyIGU9ITA7cmV0dXJuIHQuZWFjaENoaWxkKChmdW5jdGlvbih0KXtlJiYhQmUodCkmJihlPSExKX0pKSxlfWZ1bmN0aW9uIE5lKHQsZSl7aWYodCBpbnN0YW5jZW9mIHhlJiZlLmluZGV4T2YodC5uYW1lKT49MClyZXR1cm4hMTt2YXIgcj0hMDtyZXR1cm4gdC5lYWNoQ2hpbGQoKGZ1bmN0aW9uKHQpe3ImJiFOZSh0LGUpJiYocj0hMSl9KSkscn1SZS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiJ3dpdGhpbicgZXhwcmVzc2lvbiByZXF1aXJlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTtpZihvZSh0WzFdKSl7dmFyIHI9dFsxXTtpZigiRmVhdHVyZUNvbGxlY3Rpb24iPT09ci50eXBlKWZvcih2YXIgbj0wO248ci5mZWF0dXJlcy5sZW5ndGg7KytuKXt2YXIgaT1yLmZlYXR1cmVzW25dLmdlb21ldHJ5LnR5cGU7aWYoIlBvbHlnb24iPT09aXx8Ik11bHRpUG9seWdvbiI9PT1pKXJldHVybiBuZXcgUmUocixyLmZlYXR1cmVzW25dLmdlb21ldHJ5KX1lbHNlIGlmKCJGZWF0dXJlIj09PXIudHlwZSl7dmFyIGE9ci5nZW9tZXRyeS50eXBlO2lmKCJQb2x5Z29uIj09PWF8fCJNdWx0aVBvbHlnb24iPT09YSlyZXR1cm4gbmV3IFJlKHIsci5nZW9tZXRyeSl9ZWxzZSBpZigiUG9seWdvbiI9PT1yLnR5cGV8fCJNdWx0aVBvbHlnb24iPT09ci50eXBlKXJldHVybiBuZXcgUmUocixyKX1yZXR1cm4gZS5lcnJvcigiJ3dpdGhpbicgZXhwcmVzc2lvbiByZXF1aXJlcyB2YWxpZCBnZW9qc29uIG9iamVjdCB0aGF0IGNvbnRhaW5zIHBvbHlnb24gZ2VvbWV0cnkgdHlwZS4iKX0sUmUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXQuZ2VvbWV0cnkoKSYmbnVsbCE9dC5jYW5vbmljYWxJRCgpKXtpZigiUG9pbnQiPT09dC5nZW9tZXRyeVR5cGUoKSlyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1bMS8wLDEvMCwtMS8wLC0xLzBdLG49WzEvMCwxLzAsLTEvMCwtMS8wXSxpPXQuY2Fub25pY2FsSUQoKTtpZigiUG9seWdvbiI9PT1lLnR5cGUpe3ZhciBhPVBlKGUuY29vcmRpbmF0ZXMsbixpKSxvPXplKHQuZ2VvbWV0cnkoKSxyLG4saSk7aWYoIXdlKHIsbikpcmV0dXJuITE7Zm9yKHZhciBzPTAsbD1vO3M8bC5sZW5ndGg7cys9MSl7aWYoIUFlKGxbc10sYSkpcmV0dXJuITF9fWlmKCJNdWx0aVBvbHlnb24iPT09ZS50eXBlKXt2YXIgYz1JZShlLmNvb3JkaW5hdGVzLG4saSksdT16ZSh0Lmdlb21ldHJ5KCkscixuLGkpO2lmKCF3ZShyLG4pKXJldHVybiExO2Zvcih2YXIgZj0wLGg9dTtmPGgubGVuZ3RoO2YrPTEpe2lmKCFNZShoW2ZdLGMpKXJldHVybiExfX1yZXR1cm4hMH0odCx0aGlzLmdlb21ldHJpZXMpO2lmKCJMaW5lU3RyaW5nIj09PXQuZ2VvbWV0cnlUeXBlKCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9WzEvMCwxLzAsLTEvMCwtMS8wXSxuPVsxLzAsMS8wLC0xLzAsLTEvMF0saT10LmNhbm9uaWNhbElEKCk7aWYoIlBvbHlnb24iPT09ZS50eXBlKXt2YXIgYT1QZShlLmNvb3JkaW5hdGVzLG4saSksbz1EZSh0Lmdlb21ldHJ5KCkscixuLGkpO2lmKCF3ZShyLG4pKXJldHVybiExO2Zvcih2YXIgcz0wLGw9bztzPGwubGVuZ3RoO3MrPTEpe2lmKCFMZShsW3NdLGEpKXJldHVybiExfX1pZigiTXVsdGlQb2x5Z29uIj09PWUudHlwZSl7dmFyIGM9SWUoZS5jb29yZGluYXRlcyxuLGkpLHU9RGUodC5nZW9tZXRyeSgpLHIsbixpKTtpZighd2UocixuKSlyZXR1cm4hMTtmb3IodmFyIGY9MCxoPXU7ZjxoLmxlbmd0aDtmKz0xKXtpZighQ2UoaFtmXSxjKSlyZXR1cm4hMX19cmV0dXJuITB9KHQsdGhpcy5nZW9tZXRyaWVzKX1yZXR1cm4hMX0sUmUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbigpe30sUmUucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUmUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsid2l0aGluIix0aGlzLmdlb2pzb25dfTt2YXIgamU9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9ZS50eXBlLHRoaXMubmFtZT10LHRoaXMuYm91bmRFeHByZXNzaW9uPWV9O2plLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMiE9PXQubGVuZ3RofHwic3RyaW5nIiE9dHlwZW9mIHRbMV0pcmV0dXJuIGUuZXJyb3IoIid2YXInIGV4cHJlc3Npb24gcmVxdWlyZXMgZXhhY3RseSBvbmUgc3RyaW5nIGxpdGVyYWwgYXJndW1lbnQuIik7dmFyIHI9dFsxXTtyZXR1cm4gZS5zY29wZS5oYXMocik/bmV3IGplKHIsZS5zY29wZS5nZXQocikpOmUuZXJyb3IoJ1Vua25vd24gdmFyaWFibGUgIicrcisnIi4gTWFrZSBzdXJlICInK3IrJyIgaGFzIGJlZW4gYm91bmQgaW4gYW4gZW5jbG9zaW5nICJsZXQiIGV4cHJlc3Npb24gYmVmb3JlIHVzaW5nIGl0LicsMSl9LGplLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5ib3VuZEV4cHJlc3Npb24uZXZhbHVhdGUodCl9LGplLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24oKXt9LGplLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGplLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm5bInZhciIsdGhpcy5uYW1lXX07dmFyIFVlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dm9pZCAwPT09ZSYmKGU9W10pLHZvaWQgMD09PW4mJihuPW5ldyBSdCksdm9pZCAwPT09aSYmKGk9W10pLHRoaXMucmVnaXN0cnk9dCx0aGlzLnBhdGg9ZSx0aGlzLmtleT1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIlsiK3QrIl0ifSkpLmpvaW4oIiIpLHRoaXMuc2NvcGU9bix0aGlzLmVycm9ycz1pLHRoaXMuZXhwZWN0ZWRUeXBlPXJ9O2Z1bmN0aW9uIFZlKHQsZSl7Zm9yKHZhciByLG4saT10Lmxlbmd0aC0xLGE9MCxvPWkscz0wO2E8PW87KWlmKHI9dFtzPU1hdGguZmxvb3IoKGErbykvMildLG49dFtzKzFdLHI8PWUpe2lmKHM9PT1pfHxlPG4pcmV0dXJuIHM7YT1zKzF9ZWxzZXtpZighKHI+ZSkpdGhyb3cgbmV3IHVlKCJJbnB1dCBpcyBub3QgYSBudW1iZXIuIik7bz1zLTF9cmV0dXJuIDB9VWUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHZvaWQgMD09PWkmJihpPXt9KSxlP3RoaXMuY29uY2F0KGUscixuKS5fcGFyc2UodCxpKTp0aGlzLl9wYXJzZSh0LGkpfSxVZS5wcm90b3R5cGUuX3BhcnNlPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUscil7cmV0dXJuImFzc2VydCI9PT1yP25ldyBoZShlLFt0XSk6ImNvZXJjZSI9PT1yP25ldyBnZShlLFt0XSk6dH1pZihudWxsIT09dCYmInN0cmluZyIhPXR5cGVvZiB0JiYiYm9vbGVhbiIhPXR5cGVvZiB0JiYibnVtYmVyIiE9dHlwZW9mIHR8fCh0PVsibGl0ZXJhbCIsdF0pLEFycmF5LmlzQXJyYXkodCkpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy5lcnJvcignRXhwZWN0ZWQgYW4gYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudC4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbImxpdGVyYWwiLCBbXV0uJyk7dmFyIG49dFswXTtpZigic3RyaW5nIiE9dHlwZW9mIG4pcmV0dXJuIHRoaXMuZXJyb3IoIkV4cHJlc3Npb24gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLCBidXQgZm91bmQgIit0eXBlb2YgbisnIGluc3RlYWQuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgWyJsaXRlcmFsIiwgWy4uLl1dLicsMCksbnVsbDt2YXIgaT10aGlzLnJlZ2lzdHJ5W25dO2lmKGkpe3ZhciBhPWkucGFyc2UodCx0aGlzKTtpZighYSlyZXR1cm4gbnVsbDtpZih0aGlzLmV4cGVjdGVkVHlwZSl7dmFyIG89dGhpcy5leHBlY3RlZFR5cGUscz1hLnR5cGU7aWYoInN0cmluZyIhPT1vLmtpbmQmJiJudW1iZXIiIT09by5raW5kJiYiYm9vbGVhbiIhPT1vLmtpbmQmJiJvYmplY3QiIT09by5raW5kJiYiYXJyYXkiIT09by5raW5kfHwidmFsdWUiIT09cy5raW5kKWlmKCJjb2xvciIhPT1vLmtpbmQmJiJmb3JtYXR0ZWQiIT09by5raW5kJiYicmVzb2x2ZWRJbWFnZSIhPT1vLmtpbmR8fCJ2YWx1ZSIhPT1zLmtpbmQmJiJzdHJpbmciIT09cy5raW5kKXtpZih0aGlzLmNoZWNrU3VidHlwZShvLHMpKXJldHVybiBudWxsfWVsc2UgYT1yKGEsbyxlLnR5cGVBbm5vdGF0aW9ufHwiY29lcmNlIik7ZWxzZSBhPXIoYSxvLGUudHlwZUFubm90YXRpb258fCJhc3NlcnQiKX1pZighKGEgaW5zdGFuY2VvZiBjZSkmJiJyZXNvbHZlZEltYWdlIiE9PWEudHlwZS5raW5kJiZmdW5jdGlvbiB0KGUpe2lmKGUgaW5zdGFuY2VvZiBqZSlyZXR1cm4gdChlLmJvdW5kRXhwcmVzc2lvbik7aWYoZSBpbnN0YW5jZW9mIHhlJiYiZXJyb3IiPT09ZS5uYW1lKXJldHVybiExO2lmKGUgaW5zdGFuY2VvZiBiZSlyZXR1cm4hMTtpZihlIGluc3RhbmNlb2YgUmUpcmV0dXJuITE7dmFyIHI9ZSBpbnN0YW5jZW9mIGdlfHxlIGluc3RhbmNlb2YgaGUsbj0hMDtpZihlLmVhY2hDaGlsZCgoZnVuY3Rpb24oZSl7bj1yP24mJnQoZSk6biYmZSBpbnN0YW5jZW9mIGNlfSkpLCFuKXJldHVybiExO3JldHVybiBGZShlKSYmTmUoZSxbInpvb20iLCJoZWF0bWFwLWRlbnNpdHkiLCJsaW5lLXByb2dyZXNzIiwiYWNjdW11bGF0ZWQiLCJpcy1zdXBwb3J0ZWQtc2NyaXB0Il0pfShhKSl7dmFyIGw9bmV3IHllO3RyeXthPW5ldyBjZShhLnR5cGUsYS5ldmFsdWF0ZShsKSl9Y2F0Y2godCl7cmV0dXJuIHRoaXMuZXJyb3IodC5tZXNzYWdlKSxudWxsfX1yZXR1cm4gYX1yZXR1cm4gdGhpcy5lcnJvcignVW5rbm93biBleHByZXNzaW9uICInK24rJyIuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgWyJsaXRlcmFsIiwgWy4uLl1dLicsMCl9cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5lcnJvcigiJ3VuZGVmaW5lZCcgdmFsdWUgaW52YWxpZC4gVXNlIG51bGwgaW5zdGVhZC4iKToib2JqZWN0Ij09dHlwZW9mIHQ/dGhpcy5lcnJvcignQmFyZSBvYmplY3RzIGludmFsaWQuIFVzZSBbImxpdGVyYWwiLCB7Li4ufV0gaW5zdGVhZC4nKTp0aGlzLmVycm9yKCJFeHBlY3RlZCBhbiBhcnJheSwgYnV0IGZvdW5kICIrdHlwZW9mIHQrIiBpbnN0ZWFkLiIpfSxVZS5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0ibnVtYmVyIj09dHlwZW9mIHQ/dGhpcy5wYXRoLmNvbmNhdCh0KTp0aGlzLnBhdGgsaT1yP3RoaXMuc2NvcGUuY29uY2F0KHIpOnRoaXMuc2NvcGU7cmV0dXJuIG5ldyBVZSh0aGlzLnJlZ2lzdHJ5LG4sZXx8bnVsbCxpLHRoaXMuZXJyb3JzKX0sVWUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGgtMTtyLS0gPjA7KWVbcl09YXJndW1lbnRzW3IrMV07dmFyIG49IiIrdGhpcy5rZXkrZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiJbIit0KyJdIn0pKS5qb2luKCIiKTt0aGlzLmVycm9ycy5wdXNoKG5ldyBEdChuLHQpKX0sVWUucHJvdG90eXBlLmNoZWNrU3VidHlwZT1mdW5jdGlvbih0LGUpe3ZhciByPUp0KHQsZSk7cmV0dXJuIHImJnRoaXMuZXJyb3Iocikscn07dmFyIEhlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnR5cGU9dCx0aGlzLmlucHV0PWUsdGhpcy5sYWJlbHM9W10sdGhpcy5vdXRwdXRzPVtdO2Zvcih2YXIgbj0wLGk9cjtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz1hWzBdLHM9YVsxXTt0aGlzLmxhYmVscy5wdXNoKG8pLHRoaXMub3V0cHV0cy5wdXNoKHMpfX07ZnVuY3Rpb24gcWUodCxlLHIpe3JldHVybiB0KigxLXIpK2Uqcn1IZS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoLTE8NClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICIrKHQubGVuZ3RoLTEpKyIuIik7aWYoKHQubGVuZ3RoLTEpJTIhPTApcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cy4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxCdCk7aWYoIXIpcmV0dXJuIG51bGw7dmFyIG49W10saT1udWxsO2UuZXhwZWN0ZWRUeXBlJiYidmFsdWUiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKGk9ZS5leHBlY3RlZFR5cGUpO2Zvcih2YXIgYT0xO2E8dC5sZW5ndGg7YSs9Mil7dmFyIG89MT09PWE/LTEvMDp0W2FdLHM9dFthKzFdLGw9YSxjPWErMTtpZigibnVtYmVyIiE9dHlwZW9mIG8pcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgInN0ZXAiIGV4cHJlc3Npb25zIG11c3QgYmUgZGVmaW5lZCB1c2luZyBsaXRlcmFsIG51bWVyaWMgdmFsdWVzIChub3QgY29tcHV0ZWQgZXhwcmVzc2lvbnMpIGZvciB0aGUgaW5wdXQgdmFsdWVzLicsbCk7aWYobi5sZW5ndGgmJm5bbi5sZW5ndGgtMV1bMF0+PW8pcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgInN0ZXAiIGV4cHJlc3Npb25zIG11c3QgYmUgYXJyYW5nZWQgd2l0aCBpbnB1dCB2YWx1ZXMgaW4gc3RyaWN0bHkgYXNjZW5kaW5nIG9yZGVyLicsbCk7dmFyIHU9ZS5wYXJzZShzLGMsaSk7aWYoIXUpcmV0dXJuIG51bGw7aT1pfHx1LnR5cGUsbi5wdXNoKFtvLHVdKX1yZXR1cm4gbmV3IEhlKGkscixuKX0sSGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFiZWxzLHI9dGhpcy5vdXRwdXRzO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gclswXS5ldmFsdWF0ZSh0KTt2YXIgbj10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKG48PWVbMF0pcmV0dXJuIHJbMF0uZXZhbHVhdGUodCk7dmFyIGk9ZS5sZW5ndGg7cmV0dXJuIG4+PWVbaS0xXT9yW2ktMV0uZXZhbHVhdGUodCk6cltWZShlLG4pXS5ldmFsdWF0ZSh0KX0sSGUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpO2Zvcih2YXIgZT0wLHI9dGhpcy5vdXRwdXRzO2U8ci5sZW5ndGg7ZSs9MSl7dChyW2VdKX19LEhlLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3V0cHV0cy5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQub3V0cHV0RGVmaW5lZCgpfSkpfSxIZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVsic3RlcCIsdGhpcy5pbnB1dC5zZXJpYWxpemUoKV0sZT0wO2U8dGhpcy5sYWJlbHMubGVuZ3RoO2UrKyllPjAmJnQucHVzaCh0aGlzLmxhYmVsc1tlXSksdC5wdXNoKHRoaXMub3V0cHV0c1tlXS5zZXJpYWxpemUoKSk7cmV0dXJuIHR9O3ZhciBHZT1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxudW1iZXI6cWUsY29sb3I6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgdGUocWUodC5yLGUucixyKSxxZSh0LmcsZS5nLHIpLHFlKHQuYixlLmIscikscWUodC5hLGUuYSxyKSl9LGFycmF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHFlKHQsZVtuXSxyKX0pKX19KSxZZT02LzI5LFdlPTMqWWUqWWUsWGU9TWF0aC5QSS8xODAsWmU9MTgwL01hdGguUEk7ZnVuY3Rpb24gSmUodCl7cmV0dXJuIHQ+LjAwODg1NjQ1MTY3OTAzNTYzMT9NYXRoLnBvdyh0LDEvMyk6dC9XZSs0LzI5fWZ1bmN0aW9uIEtlKHQpe3JldHVybiB0PlllP3QqdCp0OldlKih0LTQvMjkpfWZ1bmN0aW9uIFFlKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gJGUodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gdHIodCl7dmFyIGU9JGUodC5yKSxyPSRlKHQuZyksbj0kZSh0LmIpLGk9SmUoKC40MTI0NTY0KmUrLjM1NzU3NjEqcisuMTgwNDM3NSpuKS8uOTUwNDcpLGE9SmUoKC4yMTI2NzI5KmUrLjcxNTE1MjIqcisuMDcyMTc1Km4pLzEpO3JldHVybntsOjExNiphLTE2LGE6NTAwKihpLWEpLGI6MjAwKihhLUplKCguMDE5MzMzOSplKy4xMTkxOTIqcisuOTUwMzA0MSpuKS8xLjA4ODgzKSksYWxwaGE6dC5hfX1mdW5jdGlvbiBlcih0KXt2YXIgZT0odC5sKzE2KS8xMTYscj1pc05hTih0LmEpP2U6ZSt0LmEvNTAwLG49aXNOYU4odC5iKT9lOmUtdC5iLzIwMDtyZXR1cm4gZT0xKktlKGUpLHI9Ljk1MDQ3KktlKHIpLG49MS4wODg4MypLZShuKSxuZXcgdGUoUWUoMy4yNDA0NTQyKnItMS41MzcxMzg1KmUtLjQ5ODUzMTQqbiksUWUoLS45NjkyNjYqcisxLjg3NjAxMDgqZSsuMDQxNTU2Km4pLFFlKC4wNTU2NDM0KnItLjIwNDAyNTkqZSsxLjA1NzIyNTIqbiksdC5hbHBoYSl9ZnVuY3Rpb24gcnIodCxlLHIpe3ZhciBuPWUtdDtyZXR1cm4gdCtyKihuPjE4MHx8bjwtMTgwP24tMzYwKk1hdGgucm91bmQobi8zNjApOm4pfXZhciBucj17Zm9yd2FyZDp0cixyZXZlcnNlOmVyLGludGVycG9sYXRlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm57bDpxZSh0LmwsZS5sLHIpLGE6cWUodC5hLGUuYSxyKSxiOnFlKHQuYixlLmIsciksYWxwaGE6cWUodC5hbHBoYSxlLmFscGhhLHIpfX19LGlyPXtmb3J3YXJkOmZ1bmN0aW9uKHQpe3ZhciBlPXRyKHQpLHI9ZS5sLG49ZS5hLGk9ZS5iLGE9TWF0aC5hdGFuMihpLG4pKlplO3JldHVybntoOmE8MD9hKzM2MDphLGM6TWF0aC5zcXJ0KG4qbitpKmkpLGw6cixhbHBoYTp0LmF9fSxyZXZlcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuaCpYZSxyPXQuYztyZXR1cm4gZXIoe2w6dC5sLGE6TWF0aC5jb3MoZSkqcixiOk1hdGguc2luKGUpKnIsYWxwaGE6dC5hbHBoYX0pfSxpbnRlcnBvbGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJue2g6cnIodC5oLGUuaCxyKSxjOnFlKHQuYyxlLmMsciksbDpxZSh0LmwsZS5sLHIpLGFscGhhOnFlKHQuYWxwaGEsZS5hbHBoYSxyKX19fSxhcj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxsYWI6bnIsaGNsOmlyfSksb3I9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnR5cGU9dCx0aGlzLm9wZXJhdG9yPWUsdGhpcy5pbnRlcnBvbGF0aW9uPXIsdGhpcy5pbnB1dD1uLHRoaXMubGFiZWxzPVtdLHRoaXMub3V0cHV0cz1bXTtmb3IodmFyIGE9MCxvPWk7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLGw9c1swXSxjPXNbMV07dGhpcy5sYWJlbHMucHVzaChsKSx0aGlzLm91dHB1dHMucHVzaChjKX19O2Z1bmN0aW9uIHNyKHQsZSxyLG4pe3ZhciBpPW4tcixhPXQtcjtyZXR1cm4gMD09PWk/MDoxPT09ZT9hL2k6KE1hdGgucG93KGUsYSktMSkvKE1hdGgucG93KGUsaSktMSl9b3IuaW50ZXJwb2xhdGlvbkZhY3Rvcj1mdW5jdGlvbih0LGUsbixpKXt2YXIgYT0wO2lmKCJleHBvbmVudGlhbCI9PT10Lm5hbWUpYT1zcihlLHQuYmFzZSxuLGkpO2Vsc2UgaWYoImxpbmVhciI9PT10Lm5hbWUpYT1zcihlLDEsbixpKTtlbHNlIGlmKCJjdWJpYy1iZXppZXIiPT09dC5uYW1lKXt2YXIgbz10LmNvbnRyb2xQb2ludHM7YT1uZXcgcihvWzBdLG9bMV0sb1syXSxvWzNdKS5zb2x2ZShzcihlLDEsbixpKSl9cmV0dXJuIGF9LG9yLnBhcnNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT10WzJdLGE9dC5zbGljZSgzKTtpZighQXJyYXkuaXNBcnJheShuKXx8MD09PW4ubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhbiBpbnRlcnBvbGF0aW9uIHR5cGUgZXhwcmVzc2lvbi4iLDEpO2lmKCJsaW5lYXIiPT09blswXSluPXtuYW1lOiJsaW5lYXIifTtlbHNlIGlmKCJleHBvbmVudGlhbCI9PT1uWzBdKXt2YXIgbz1uWzFdO2lmKCJudW1iZXIiIT10eXBlb2YgbylyZXR1cm4gZS5lcnJvcigiRXhwb25lbnRpYWwgaW50ZXJwb2xhdGlvbiByZXF1aXJlcyBhIG51bWVyaWMgYmFzZS4iLDEsMSk7bj17bmFtZToiZXhwb25lbnRpYWwiLGJhc2U6b319ZWxzZXtpZigiY3ViaWMtYmV6aWVyIiE9PW5bMF0pcmV0dXJuIGUuZXJyb3IoIlVua25vd24gaW50ZXJwb2xhdGlvbiB0eXBlICIrU3RyaW5nKG5bMF0pLDEsMCk7dmFyIHM9bi5zbGljZSgxKTtpZig0IT09cy5sZW5ndGh8fHMuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0fHx0PDB8fHQ+MX0pKSlyZXR1cm4gZS5lcnJvcigiQ3ViaWMgYmV6aWVyIGludGVycG9sYXRpb24gcmVxdWlyZXMgZm91ciBudW1lcmljIGFyZ3VtZW50cyB3aXRoIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDEuIiwxKTtuPXtuYW1lOiJjdWJpYy1iZXppZXIiLGNvbnRyb2xQb2ludHM6c319aWYodC5sZW5ndGgtMTw0KXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCA0IGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgIisodC5sZW5ndGgtMSkrIi4iKTtpZigodC5sZW5ndGgtMSklMiE9MClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLiIpO2lmKCEoaT1lLnBhcnNlKGksMixCdCkpKXJldHVybiBudWxsO3ZhciBsPVtdLGM9bnVsbDsiaW50ZXJwb2xhdGUtaGNsIj09PXJ8fCJpbnRlcnBvbGF0ZS1sYWIiPT09cj9jPVV0OmUuZXhwZWN0ZWRUeXBlJiYidmFsdWUiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKGM9ZS5leHBlY3RlZFR5cGUpO2Zvcih2YXIgdT0wO3U8YS5sZW5ndGg7dSs9Mil7dmFyIGY9YVt1XSxoPWFbdSsxXSxwPXUrMyxkPXUrNDtpZigibnVtYmVyIiE9dHlwZW9mIGYpcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgImludGVycG9sYXRlIiBleHByZXNzaW9ucyBtdXN0IGJlIGRlZmluZWQgdXNpbmcgbGl0ZXJhbCBudW1lcmljIHZhbHVlcyAobm90IGNvbXB1dGVkIGV4cHJlc3Npb25zKSBmb3IgdGhlIGlucHV0IHZhbHVlcy4nLHApO2lmKGwubGVuZ3RoJiZsW2wubGVuZ3RoLTFdWzBdPj1mKXJldHVybiBlLmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yICJpbnRlcnBvbGF0ZSIgZXhwcmVzc2lvbnMgbXVzdCBiZSBhcnJhbmdlZCB3aXRoIGlucHV0IHZhbHVlcyBpbiBzdHJpY3RseSBhc2NlbmRpbmcgb3JkZXIuJyxwKTt2YXIgbT1lLnBhcnNlKGgsZCxjKTtpZighbSlyZXR1cm4gbnVsbDtjPWN8fG0udHlwZSxsLnB1c2goW2YsbV0pfXJldHVybiJudW1iZXIiPT09Yy5raW5kfHwiY29sb3IiPT09Yy5raW5kfHwiYXJyYXkiPT09Yy5raW5kJiYibnVtYmVyIj09PWMuaXRlbVR5cGUua2luZCYmIm51bWJlciI9PXR5cGVvZiBjLk4/bmV3IG9yKGMscixuLGksbCk6ZS5lcnJvcigiVHlwZSAiK1h0KGMpKyIgaXMgbm90IGludGVycG9sYXRhYmxlLiIpfSxvci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYWJlbHMscj10aGlzLm91dHB1dHM7aWYoMT09PWUubGVuZ3RoKXJldHVybiByWzBdLmV2YWx1YXRlKHQpO3ZhciBuPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYobjw9ZVswXSlyZXR1cm4gclswXS5ldmFsdWF0ZSh0KTt2YXIgaT1lLmxlbmd0aDtpZihuPj1lW2ktMV0pcmV0dXJuIHJbaS0xXS5ldmFsdWF0ZSh0KTt2YXIgYT1WZShlLG4pLG89ZVthXSxzPWVbYSsxXSxsPW9yLmludGVycG9sYXRpb25GYWN0b3IodGhpcy5pbnRlcnBvbGF0aW9uLG4sbyxzKSxjPXJbYV0uZXZhbHVhdGUodCksdT1yW2ErMV0uZXZhbHVhdGUodCk7cmV0dXJuImludGVycG9sYXRlIj09PXRoaXMub3BlcmF0b3I/R2VbdGhpcy50eXBlLmtpbmQudG9Mb3dlckNhc2UoKV0oYyx1LGwpOiJpbnRlcnBvbGF0ZS1oY2wiPT09dGhpcy5vcGVyYXRvcj9pci5yZXZlcnNlKGlyLmludGVycG9sYXRlKGlyLmZvcndhcmQoYyksaXIuZm9yd2FyZCh1KSxsKSk6bnIucmV2ZXJzZShuci5pbnRlcnBvbGF0ZShuci5mb3J3YXJkKGMpLG5yLmZvcndhcmQodSksbCkpfSxvci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCk7Zm9yKHZhciBlPTAscj10aGlzLm91dHB1dHM7ZTxyLmxlbmd0aDtlKz0xKXt0KHJbZV0pfX0sb3IucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vdXRwdXRzLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC5vdXRwdXREZWZpbmVkKCl9KSl9LG9yLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdDt0PSJsaW5lYXIiPT09dGhpcy5pbnRlcnBvbGF0aW9uLm5hbWU/WyJsaW5lYXIiXToiZXhwb25lbnRpYWwiPT09dGhpcy5pbnRlcnBvbGF0aW9uLm5hbWU/MT09PXRoaXMuaW50ZXJwb2xhdGlvbi5iYXNlP1sibGluZWFyIl06WyJleHBvbmVudGlhbCIsdGhpcy5pbnRlcnBvbGF0aW9uLmJhc2VdOlsiY3ViaWMtYmV6aWVyIl0uY29uY2F0KHRoaXMuaW50ZXJwb2xhdGlvbi5jb250cm9sUG9pbnRzKTtmb3IodmFyIGU9W3RoaXMub3BlcmF0b3IsdCx0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXSxyPTA7cjx0aGlzLmxhYmVscy5sZW5ndGg7cisrKWUucHVzaCh0aGlzLmxhYmVsc1tyXSx0aGlzLm91dHB1dHNbcl0uc2VyaWFsaXplKCkpO3JldHVybiBlfTt2YXIgbHI9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9dCx0aGlzLmFyZ3M9ZX07bHIucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwyKXJldHVybiBlLmVycm9yKCJFeHBlY3RlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIik7dmFyIHI9bnVsbCxuPWUuZXhwZWN0ZWRUeXBlO24mJiJ2YWx1ZSIhPT1uLmtpbmQmJihyPW4pO2Zvcih2YXIgaT1bXSxhPTAsbz10LnNsaWNlKDEpO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXSxsPWUucGFyc2UocywxK2kubGVuZ3RoLHIsdm9pZCAwLHt0eXBlQW5ub3RhdGlvbjoib21pdCJ9KTtpZighbClyZXR1cm4gbnVsbDtyPXJ8fGwudHlwZSxpLnB1c2gobCl9dmFyIGM9biYmaS5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gSnQobix0LnR5cGUpfSkpO3JldHVybiBuZXcgbHIoYz9IdDpyLGkpfSxsci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9bnVsbCxuPTAsaT0wLGE9dGhpcy5hcmdzO2k8YS5sZW5ndGg7aSs9MSl7aWYobisrLChyPWFbaV0uZXZhbHVhdGUodCkpJiZyIGluc3RhbmNlb2YgaWUmJiFyLmF2YWlsYWJsZSYmKGV8fChlPXIubmFtZSkscj1udWxsLG49PT10aGlzLmFyZ3MubGVuZ3RoJiYocj1lKSksbnVsbCE9PXIpYnJlYWt9cmV0dXJuIHJ9LGxyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5hcmdzLmZvckVhY2godCl9LGxyLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXJncy5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQub3V0cHV0RGVmaW5lZCgpfSkpfSxsci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9WyJjb2FsZXNjZSJdO3JldHVybiB0aGlzLmVhY2hDaGlsZCgoZnVuY3Rpb24oZSl7dC5wdXNoKGUuc2VyaWFsaXplKCkpfSkpLHR9O3ZhciBjcj1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT1lLnR5cGUsdGhpcy5iaW5kaW5ncz1bXS5jb25jYXQodCksdGhpcy5yZXN1bHQ9ZX07Y3IucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlc3VsdC5ldmFsdWF0ZSh0KX0sY3IucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYmluZGluZ3M7ZTxyLmxlbmd0aDtlKz0xKXt0KHJbZV1bMV0pfXQodGhpcy5yZXN1bHQpfSxjci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDQpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDMgYXJndW1lbnRzLCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO2Zvcih2YXIgcj1bXSxuPTE7bjx0Lmxlbmd0aC0xO24rPTIpe3ZhciBpPXRbbl07aWYoInN0cmluZyIhPXR5cGVvZiBpKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBzdHJpbmcsIGJ1dCBmb3VuZCAiK3R5cGVvZiBpKyIgaW5zdGVhZC4iLG4pO2lmKC9bXmEtekEtWjAtOV9dLy50ZXN0KGkpKXJldHVybiBlLmVycm9yKCJWYXJpYWJsZSBuYW1lcyBtdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvciAnXycuIixuKTt2YXIgYT1lLnBhcnNlKHRbbisxXSxuKzEpO2lmKCFhKXJldHVybiBudWxsO3IucHVzaChbaSxhXSl9dmFyIG89ZS5wYXJzZSh0W3QubGVuZ3RoLTFdLHQubGVuZ3RoLTEsZS5leHBlY3RlZFR5cGUscik7cmV0dXJuIG8/bmV3IGNyKHIsbyk6bnVsbH0sY3IucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXN1bHQub3V0cHV0RGVmaW5lZCgpfSxjci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVsibGV0Il0sZT0wLHI9dGhpcy5iaW5kaW5ncztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT1uWzBdLGE9blsxXTt0LnB1c2goaSxhLnNlcmlhbGl6ZSgpKX1yZXR1cm4gdC5wdXNoKHRoaXMucmVzdWx0LnNlcmlhbGl6ZSgpKSx0fTt2YXIgdXI9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT10LHRoaXMuaW5kZXg9ZSx0aGlzLmlucHV0PXJ9O3VyLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMyE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxCdCksbj1lLnBhcnNlKHRbMl0sMixXdChlLmV4cGVjdGVkVHlwZXx8SHQpKTtpZighcnx8IW4pcmV0dXJuIG51bGw7dmFyIGk9bi50eXBlO3JldHVybiBuZXcgdXIoaS5pdGVtVHlwZSxyLG4pfSx1ci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbmRleC5ldmFsdWF0ZSh0KSxyPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYoZTwwKXRocm93IG5ldyB1ZSgiQXJyYXkgaW5kZXggb3V0IG9mIGJvdW5kczogIitlKyIgPCAwLiIpO2lmKGU+PXIubGVuZ3RoKXRocm93IG5ldyB1ZSgiQXJyYXkgaW5kZXggb3V0IG9mIGJvdW5kczogIitlKyIgPiAiKyhyLmxlbmd0aC0xKSsiLiIpO2lmKGUhPT1NYXRoLmZsb29yKGUpKXRocm93IG5ldyB1ZSgiQXJyYXkgaW5kZXggbXVzdCBiZSBhbiBpbnRlZ2VyLCBidXQgZm91bmQgIitlKyIgaW5zdGVhZC4iKTtyZXR1cm4gcltlXX0sdXIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5kZXgpLHQodGhpcy5pbnB1dCl9LHVyLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHVyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm5bImF0Iix0aGlzLmluZGV4LnNlcmlhbGl6ZSgpLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldfTt2YXIgZnI9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9anQsdGhpcy5uZWVkbGU9dCx0aGlzLmhheXN0YWNrPWV9O2ZyLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMyE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxIdCksbj1lLnBhcnNlKHRbMl0sMixIdCk7cmV0dXJuIHImJm4/S3Qoci50eXBlLFtqdCxOdCxCdCxGdCxIdF0pP25ldyBmcihyLG4pOmUuZXJyb3IoIkV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYm9vbGVhbiwgc3RyaW5nLCBudW1iZXIgb3IgbnVsbCwgYnV0IGZvdW5kICIrWHQoci50eXBlKSsiIGluc3RlYWQiKTpudWxsfSxmci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5uZWVkbGUuZXZhbHVhdGUodCkscj10aGlzLmhheXN0YWNrLmV2YWx1YXRlKHQpO2lmKCFyKXJldHVybiExO2lmKCFRdChlLFsiYm9vbGVhbiIsInN0cmluZyIsIm51bWJlciIsIm51bGwiXSkpdGhyb3cgbmV3IHVlKCJFeHBlY3RlZCBmaXJzdCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGJvb2xlYW4sIHN0cmluZywgbnVtYmVyIG9yIG51bGwsIGJ1dCBmb3VuZCAiK1h0KHNlKGUpKSsiIGluc3RlYWQuIik7aWYoIVF0KHIsWyJzdHJpbmciLCJhcnJheSJdKSl0aHJvdyBuZXcgdWUoIkV4cGVjdGVkIHNlY29uZCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGFycmF5IG9yIHN0cmluZywgYnV0IGZvdW5kICIrWHQoc2UocikpKyIgaW5zdGVhZC4iKTtyZXR1cm4gci5pbmRleE9mKGUpPj0wfSxmci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5uZWVkbGUpLHQodGhpcy5oYXlzdGFjayl9LGZyLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGZyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm5bImluIix0aGlzLm5lZWRsZS5zZXJpYWxpemUoKSx0aGlzLmhheXN0YWNrLnNlcmlhbGl6ZSgpXX07dmFyIGhyPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnR5cGU9QnQsdGhpcy5uZWVkbGU9dCx0aGlzLmhheXN0YWNrPWUsdGhpcy5mcm9tSW5kZXg9cn07aHIucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDw9Mnx8dC5sZW5ndGg+PTUpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIDMgb3IgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCAiKyh0Lmxlbmd0aC0xKSsiIGluc3RlYWQuIik7dmFyIHI9ZS5wYXJzZSh0WzFdLDEsSHQpLG49ZS5wYXJzZSh0WzJdLDIsSHQpO2lmKCFyfHwhbilyZXR1cm4gbnVsbDtpZighS3Qoci50eXBlLFtqdCxOdCxCdCxGdCxIdF0pKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBmaXJzdCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGJvb2xlYW4sIHN0cmluZywgbnVtYmVyIG9yIG51bGwsIGJ1dCBmb3VuZCAiK1h0KHIudHlwZSkrIiBpbnN0ZWFkIik7aWYoND09PXQubGVuZ3RoKXt2YXIgaT1lLnBhcnNlKHRbM10sMyxCdCk7cmV0dXJuIGk/bmV3IGhyKHIsbixpKTpudWxsfXJldHVybiBuZXcgaHIocixuKX0saHIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubmVlZGxlLmV2YWx1YXRlKHQpLHI9dGhpcy5oYXlzdGFjay5ldmFsdWF0ZSh0KTtpZighUXQoZSxbImJvb2xlYW4iLCJzdHJpbmciLCJudW1iZXIiLCJudWxsIl0pKXRocm93IG5ldyB1ZSgiRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gYmUgb2YgdHlwZSBib29sZWFuLCBzdHJpbmcsIG51bWJlciBvciBudWxsLCBidXQgZm91bmQgIitYdChzZShlKSkrIiBpbnN0ZWFkLiIpO2lmKCFRdChyLFsic3RyaW5nIiwiYXJyYXkiXSkpdGhyb3cgbmV3IHVlKCJFeHBlY3RlZCBzZWNvbmQgYXJndW1lbnQgdG8gYmUgb2YgdHlwZSBhcnJheSBvciBzdHJpbmcsIGJ1dCBmb3VuZCAiK1h0KHNlKHIpKSsiIGluc3RlYWQuIik7aWYodGhpcy5mcm9tSW5kZXgpe3ZhciBuPXRoaXMuZnJvbUluZGV4LmV2YWx1YXRlKHQpO3JldHVybiByLmluZGV4T2YoZSxuKX1yZXR1cm4gci5pbmRleE9mKGUpfSxoci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5uZWVkbGUpLHQodGhpcy5oYXlzdGFjayksdGhpcy5mcm9tSW5kZXgmJnQodGhpcy5mcm9tSW5kZXgpfSxoci5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSxoci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5mcm9tSW5kZXgmJnZvaWQgMCE9PXRoaXMuZnJvbUluZGV4KXt2YXIgdD10aGlzLmZyb21JbmRleC5zZXJpYWxpemUoKTtyZXR1cm5bImluZGV4LW9mIix0aGlzLm5lZWRsZS5zZXJpYWxpemUoKSx0aGlzLmhheXN0YWNrLnNlcmlhbGl6ZSgpLHRdfXJldHVyblsiaW5kZXgtb2YiLHRoaXMubmVlZGxlLnNlcmlhbGl6ZSgpLHRoaXMuaGF5c3RhY2suc2VyaWFsaXplKCldfTt2YXIgcHI9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuaW5wdXRUeXBlPXQsdGhpcy50eXBlPWUsdGhpcy5pbnB1dD1yLHRoaXMuY2FzZXM9bix0aGlzLm91dHB1dHM9aSx0aGlzLm90aGVyd2lzZT1hfTtwci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDUpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDQgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAiKyh0Lmxlbmd0aC0xKSsiLiIpO2lmKHQubGVuZ3RoJTIhPTEpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cy4iKTt2YXIgcixuO2UuZXhwZWN0ZWRUeXBlJiYidmFsdWUiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKG49ZS5leHBlY3RlZFR5cGUpO2Zvcih2YXIgaT17fSxhPVtdLG89MjtvPHQubGVuZ3RoLTE7bys9Mil7dmFyIHM9dFtvXSxsPXRbbysxXTtBcnJheS5pc0FycmF5KHMpfHwocz1bc10pO3ZhciBjPWUuY29uY2F0KG8pO2lmKDA9PT1zLmxlbmd0aClyZXR1cm4gYy5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGJyYW5jaCBsYWJlbC4iKTtmb3IodmFyIHU9MCxmPXM7dTxmLmxlbmd0aDt1Kz0xKXt2YXIgaD1mW3VdO2lmKCJudW1iZXIiIT10eXBlb2YgaCYmInN0cmluZyIhPXR5cGVvZiBoKXJldHVybiBjLmVycm9yKCJCcmFuY2ggbGFiZWxzIG11c3QgYmUgbnVtYmVycyBvciBzdHJpbmdzLiIpO2lmKCJudW1iZXIiPT10eXBlb2YgaCYmTWF0aC5hYnMoaCk+TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpcmV0dXJuIGMuZXJyb3IoIkJyYW5jaCBsYWJlbHMgbXVzdCBiZSBpbnRlZ2VycyBubyBsYXJnZXIgdGhhbiAiK051bWJlci5NQVhfU0FGRV9JTlRFR0VSKyIuIik7aWYoIm51bWJlciI9PXR5cGVvZiBoJiZNYXRoLmZsb29yKGgpIT09aClyZXR1cm4gYy5lcnJvcigiTnVtZXJpYyBicmFuY2ggbGFiZWxzIG11c3QgYmUgaW50ZWdlciB2YWx1ZXMuIik7aWYocil7aWYoYy5jaGVja1N1YnR5cGUocixzZShoKSkpcmV0dXJuIG51bGx9ZWxzZSByPXNlKGgpO2lmKHZvaWQgMCE9PWlbU3RyaW5nKGgpXSlyZXR1cm4gYy5lcnJvcigiQnJhbmNoIGxhYmVscyBtdXN0IGJlIHVuaXF1ZS4iKTtpW1N0cmluZyhoKV09YS5sZW5ndGh9dmFyIHA9ZS5wYXJzZShsLG8sbik7aWYoIXApcmV0dXJuIG51bGw7bj1ufHxwLnR5cGUsYS5wdXNoKHApfXZhciBkPWUucGFyc2UodFsxXSwxLEh0KTtpZighZClyZXR1cm4gbnVsbDt2YXIgbT1lLnBhcnNlKHRbdC5sZW5ndGgtMV0sdC5sZW5ndGgtMSxuKTtyZXR1cm4gbT8idmFsdWUiIT09ZC50eXBlLmtpbmQmJmUuY29uY2F0KDEpLmNoZWNrU3VidHlwZShyLGQudHlwZSk/bnVsbDpuZXcgcHIocixuLGQsaSxhLG0pOm51bGx9LHByLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlucHV0LmV2YWx1YXRlKHQpO3JldHVybihzZShlKT09PXRoaXMuaW5wdXRUeXBlJiZ0aGlzLm91dHB1dHNbdGhpcy5jYXNlc1tlXV18fHRoaXMub3RoZXJ3aXNlKS5ldmFsdWF0ZSh0KX0scHIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpLHRoaXMub3V0cHV0cy5mb3JFYWNoKHQpLHQodGhpcy5vdGhlcndpc2UpfSxwci5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm91dHB1dHMuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm91dHB1dERlZmluZWQoKX0pKSYmdGhpcy5vdGhlcndpc2Uub3V0cHV0RGVmaW5lZCgpfSxwci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bIm1hdGNoIix0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXSxyPVtdLG49e30saT0wLGE9T2JqZWN0LmtleXModGhpcy5jYXNlcykuc29ydCgpO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTt2b2lkIDA9PT0oZj1uW3RoaXMuY2FzZXNbb11dKT8oblt0aGlzLmNhc2VzW29dXT1yLmxlbmd0aCxyLnB1c2goW3RoaXMuY2FzZXNbb10sW29dXSkpOnJbZl1bMV0ucHVzaChvKX1mb3IodmFyIHM9ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PT10LmlucHV0VHlwZS5raW5kP051bWJlcihlKTplfSxsPTAsYz1yO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXSxmPXVbMF0saD11WzFdOzE9PT1oLmxlbmd0aD9lLnB1c2gocyhoWzBdKSk6ZS5wdXNoKGgubWFwKHMpKSxlLnB1c2godGhpcy5vdXRwdXRzW291dHB1dEluZGV4JDFdLnNlcmlhbGl6ZSgpKX1yZXR1cm4gZS5wdXNoKHRoaXMub3RoZXJ3aXNlLnNlcmlhbGl6ZSgpKSxlfTt2YXIgZHI9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT10LHRoaXMuYnJhbmNoZXM9ZSx0aGlzLm90aGVyd2lzZT1yfTtkci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDQpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDMgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAiKyh0Lmxlbmd0aC0xKSsiLiIpO2lmKHQubGVuZ3RoJTIhPTApcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGFuIG9kZCBudW1iZXIgb2YgYXJndW1lbnRzLiIpO3ZhciByO2UuZXhwZWN0ZWRUeXBlJiYidmFsdWUiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKHI9ZS5leHBlY3RlZFR5cGUpO2Zvcih2YXIgbj1bXSxpPTE7aTx0Lmxlbmd0aC0xO2krPTIpe3ZhciBhPWUucGFyc2UodFtpXSxpLGp0KTtpZighYSlyZXR1cm4gbnVsbDt2YXIgbz1lLnBhcnNlKHRbaSsxXSxpKzEscik7aWYoIW8pcmV0dXJuIG51bGw7bi5wdXNoKFthLG9dKSxyPXJ8fG8udHlwZX12YXIgcz1lLnBhcnNlKHRbdC5sZW5ndGgtMV0sdC5sZW5ndGgtMSxyKTtyZXR1cm4gcz9uZXcgZHIocixuLHMpOm51bGx9LGRyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYnJhbmNoZXM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9blswXSxhPW5bMV07aWYoaS5ldmFsdWF0ZSh0KSlyZXR1cm4gYS5ldmFsdWF0ZSh0KX1yZXR1cm4gdGhpcy5vdGhlcndpc2UuZXZhbHVhdGUodCl9LGRyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmJyYW5jaGVzO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxpPW5bMF0sYT1uWzFdO3QoaSksdChhKX10KHRoaXMub3RoZXJ3aXNlKX0sZHIucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5icmFuY2hlcy5ldmVyeSgoZnVuY3Rpb24odCl7dFswXTtyZXR1cm4gdFsxXS5vdXRwdXREZWZpbmVkKCl9KSkmJnRoaXMub3RoZXJ3aXNlLm91dHB1dERlZmluZWQoKX0sZHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVsiY2FzZSJdO3JldHVybiB0aGlzLmVhY2hDaGlsZCgoZnVuY3Rpb24oZSl7dC5wdXNoKGUuc2VyaWFsaXplKCkpfSkpLHR9O3ZhciBtcj1mdW5jdGlvbih0LGUscixuKXt0aGlzLnR5cGU9dCx0aGlzLmlucHV0PWUsdGhpcy5iZWdpbkluZGV4PXIsdGhpcy5lbmRJbmRleD1ufTtmdW5jdGlvbiBncih0LGUpe3JldHVybiI9PSI9PT10fHwiIT0iPT09dD8iYm9vbGVhbiI9PT1lLmtpbmR8fCJzdHJpbmciPT09ZS5raW5kfHwibnVtYmVyIj09PWUua2luZHx8Im51bGwiPT09ZS5raW5kfHwidmFsdWUiPT09ZS5raW5kOiJzdHJpbmciPT09ZS5raW5kfHwibnVtYmVyIj09PWUua2luZHx8InZhbHVlIj09PWUua2luZH1mdW5jdGlvbiB2cih0LGUscixuKXtyZXR1cm4gMD09PW4uY29tcGFyZShlLHIpfWZ1bmN0aW9uIHlyKHQsZSxyKXt2YXIgbj0iPT0iIT09dCYmIiE9IiE9PXQ7cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh0LGUscil7dGhpcy50eXBlPWp0LHRoaXMubGhzPXQsdGhpcy5yaHM9ZSx0aGlzLmNvbGxhdG9yPXIsdGhpcy5oYXNVbnR5cGVkQXJndW1lbnQ9InZhbHVlIj09PXQudHlwZS5raW5kfHwidmFsdWUiPT09ZS50eXBlLmtpbmR9cmV0dXJuIGkucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigzIT09dC5sZW5ndGgmJjQhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgdHdvIG9yIHRocmVlIGFyZ3VtZW50cy4iKTt2YXIgcj10WzBdLGE9ZS5wYXJzZSh0WzFdLDEsSHQpO2lmKCFhKXJldHVybiBudWxsO2lmKCFncihyLGEudHlwZSkpcmV0dXJuIGUuY29uY2F0KDEpLmVycm9yKCciJytyKyJcIiBjb21wYXJpc29ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgdHlwZSAnIitYdChhLnR5cGUpKyInLiIpO3ZhciBvPWUucGFyc2UodFsyXSwyLEh0KTtpZighbylyZXR1cm4gbnVsbDtpZighZ3IocixvLnR5cGUpKXJldHVybiBlLmNvbmNhdCgyKS5lcnJvcignIicrcisiXCIgY29tcGFyaXNvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHR5cGUgJyIrWHQoby50eXBlKSsiJy4iKTtpZihhLnR5cGUua2luZCE9PW8udHlwZS5raW5kJiYidmFsdWUiIT09YS50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1vLnR5cGUua2luZClyZXR1cm4gZS5lcnJvcigiQ2Fubm90IGNvbXBhcmUgdHlwZXMgJyIrWHQoYS50eXBlKSsiJyBhbmQgJyIrWHQoby50eXBlKSsiJy4iKTtuJiYoInZhbHVlIj09PWEudHlwZS5raW5kJiYidmFsdWUiIT09by50eXBlLmtpbmQ/YT1uZXcgaGUoby50eXBlLFthXSk6InZhbHVlIiE9PWEudHlwZS5raW5kJiYidmFsdWUiPT09by50eXBlLmtpbmQmJihvPW5ldyBoZShhLnR5cGUsW29dKSkpO3ZhciBzPW51bGw7aWYoND09PXQubGVuZ3RoKXtpZigic3RyaW5nIiE9PWEudHlwZS5raW5kJiYic3RyaW5nIiE9PW8udHlwZS5raW5kJiYidmFsdWUiIT09YS50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1vLnR5cGUua2luZClyZXR1cm4gZS5lcnJvcigiQ2Fubm90IHVzZSBjb2xsYXRvciB0byBjb21wYXJlIG5vbi1zdHJpbmcgdHlwZXMuIik7aWYoIShzPWUucGFyc2UodFszXSwzLHF0KSkpcmV0dXJuIG51bGx9cmV0dXJuIG5ldyBpKGEsbyxzKX0saS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oaSl7dmFyIGE9dGhpcy5saHMuZXZhbHVhdGUoaSksbz10aGlzLnJocy5ldmFsdWF0ZShpKTtpZihuJiZ0aGlzLmhhc1VudHlwZWRBcmd1bWVudCl7dmFyIHM9c2UoYSksbD1zZShvKTtpZihzLmtpbmQhPT1sLmtpbmR8fCJzdHJpbmciIT09cy5raW5kJiYibnVtYmVyIiE9PXMua2luZCl0aHJvdyBuZXcgdWUoJ0V4cGVjdGVkIGFyZ3VtZW50cyBmb3IgIicrdCsnIiB0byBiZSAoc3RyaW5nLCBzdHJpbmcpIG9yIChudW1iZXIsIG51bWJlciksIGJ1dCBmb3VuZCAoJytzLmtpbmQrIiwgIitsLmtpbmQrIikgaW5zdGVhZC4iKX1pZih0aGlzLmNvbGxhdG9yJiYhbiYmdGhpcy5oYXNVbnR5cGVkQXJndW1lbnQpe3ZhciBjPXNlKGEpLHU9c2Uobyk7aWYoInN0cmluZyIhPT1jLmtpbmR8fCJzdHJpbmciIT09dS5raW5kKXJldHVybiBlKGksYSxvKX1yZXR1cm4gdGhpcy5jb2xsYXRvcj9yKGksYSxvLHRoaXMuY29sbGF0b3IuZXZhbHVhdGUoaSkpOmUoaSxhLG8pfSxpLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmxocyksdCh0aGlzLnJocyksdGhpcy5jb2xsYXRvciYmdCh0aGlzLmNvbGxhdG9yKX0saS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiEwfSxpLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgZT1bdF07cmV0dXJuIHRoaXMuZWFjaENoaWxkKChmdW5jdGlvbih0KXtlLnB1c2godC5zZXJpYWxpemUoKSl9KSksZX0saX0oKX1tci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPD0yfHx0Lmxlbmd0aD49NSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgMyBvciA0IGFyZ3VtZW50cywgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxIdCksbj1lLnBhcnNlKHRbMl0sMixCdCk7aWYoIXJ8fCFuKXJldHVybiBudWxsO2lmKCFLdChyLnR5cGUsW1d0KEh0KSxOdCxIdF0pKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBmaXJzdCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGFycmF5IG9yIHN0cmluZywgYnV0IGZvdW5kICIrWHQoci50eXBlKSsiIGluc3RlYWQiKTtpZig0PT09dC5sZW5ndGgpe3ZhciBpPWUucGFyc2UodFszXSwzLEJ0KTtyZXR1cm4gaT9uZXcgbXIoci50eXBlLHIsbixpKTpudWxsfXJldHVybiBuZXcgbXIoci50eXBlLHIsbil9LG1yLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlucHV0LmV2YWx1YXRlKHQpLHI9dGhpcy5iZWdpbkluZGV4LmV2YWx1YXRlKHQpO2lmKCFRdChlLFsic3RyaW5nIiwiYXJyYXkiXSkpdGhyb3cgbmV3IHVlKCJFeHBlY3RlZCBmaXJzdCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGFycmF5IG9yIHN0cmluZywgYnV0IGZvdW5kICIrWHQoc2UoZSkpKyIgaW5zdGVhZC4iKTtpZih0aGlzLmVuZEluZGV4KXt2YXIgbj10aGlzLmVuZEluZGV4LmV2YWx1YXRlKHQpO3JldHVybiBlLnNsaWNlKHIsbil9cmV0dXJuIGUuc2xpY2Uocil9LG1yLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KSx0KHRoaXMuYmVnaW5JbmRleCksdGhpcy5lbmRJbmRleCYmdCh0aGlzLmVuZEluZGV4KX0sbXIucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbXIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2lmKG51bGwhPXRoaXMuZW5kSW5kZXgmJnZvaWQgMCE9PXRoaXMuZW5kSW5kZXgpe3ZhciB0PXRoaXMuZW5kSW5kZXguc2VyaWFsaXplKCk7cmV0dXJuWyJzbGljZSIsdGhpcy5pbnB1dC5zZXJpYWxpemUoKSx0aGlzLmJlZ2luSW5kZXguc2VyaWFsaXplKCksdF19cmV0dXJuWyJzbGljZSIsdGhpcy5pbnB1dC5zZXJpYWxpemUoKSx0aGlzLmJlZ2luSW5kZXguc2VyaWFsaXplKCldfTt2YXIgeHI9eXIoIj09IiwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPT09cn0pLHZyKSxicj15cigiIT0iLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGUhPT1yfSksKGZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiF2cigwLGUscixuKX0pKSxfcj15cigiPCIsKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZTxyfSksKGZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuLmNvbXBhcmUoZSxyKTwwfSkpLHdyPXlyKCI+IiwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPnJ9KSwoZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG4uY29tcGFyZShlLHIpPjB9KSksVHI9eXIoIjw9IiwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPD1yfSksKGZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuLmNvbXBhcmUoZSxyKTw9MH0pKSxrcj15cigiPj0iLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGU+PXJ9KSwoZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG4uY29tcGFyZShlLHIpPj0wfSkpLEFyPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy50eXBlPU50LHRoaXMubnVtYmVyPXQsdGhpcy5sb2NhbGU9ZSx0aGlzLmN1cnJlbmN5PXIsdGhpcy5taW5GcmFjdGlvbkRpZ2l0cz1uLHRoaXMubWF4RnJhY3Rpb25EaWdpdHM9aX07QXIucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigzIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIHR3byBhcmd1bWVudHMuIik7dmFyIHI9ZS5wYXJzZSh0WzFdLDEsQnQpO2lmKCFyKXJldHVybiBudWxsO3ZhciBuPXRbMl07aWYoIm9iamVjdCIhPXR5cGVvZiBufHxBcnJheS5pc0FycmF5KG4pKXJldHVybiBlLmVycm9yKCJOdW1iZXJGb3JtYXQgb3B0aW9ucyBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdC4iKTt2YXIgaT1udWxsO2lmKG4ubG9jYWxlJiYhKGk9ZS5wYXJzZShuLmxvY2FsZSwxLE50KSkpcmV0dXJuIG51bGw7dmFyIGE9bnVsbDtpZihuLmN1cnJlbmN5JiYhKGE9ZS5wYXJzZShuLmN1cnJlbmN5LDEsTnQpKSlyZXR1cm4gbnVsbDt2YXIgbz1udWxsO2lmKG5bIm1pbi1mcmFjdGlvbi1kaWdpdHMiXSYmIShvPWUucGFyc2UoblsibWluLWZyYWN0aW9uLWRpZ2l0cyJdLDEsQnQpKSlyZXR1cm4gbnVsbDt2YXIgcz1udWxsO3JldHVybiBuWyJtYXgtZnJhY3Rpb24tZGlnaXRzIl0mJiEocz1lLnBhcnNlKG5bIm1heC1mcmFjdGlvbi1kaWdpdHMiXSwxLEJ0KSk/bnVsbDpuZXcgQXIocixpLGEsbyxzKX0sQXIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQodGhpcy5sb2NhbGU/dGhpcy5sb2NhbGUuZXZhbHVhdGUodCk6W10se3N0eWxlOnRoaXMuY3VycmVuY3k/ImN1cnJlbmN5IjoiZGVjaW1hbCIsY3VycmVuY3k6dGhpcy5jdXJyZW5jeT90aGlzLmN1cnJlbmN5LmV2YWx1YXRlKHQpOnZvaWQgMCxtaW5pbXVtRnJhY3Rpb25EaWdpdHM6dGhpcy5taW5GcmFjdGlvbkRpZ2l0cz90aGlzLm1pbkZyYWN0aW9uRGlnaXRzLmV2YWx1YXRlKHQpOnZvaWQgMCxtYXhpbXVtRnJhY3Rpb25EaWdpdHM6dGhpcy5tYXhGcmFjdGlvbkRpZ2l0cz90aGlzLm1heEZyYWN0aW9uRGlnaXRzLmV2YWx1YXRlKHQpOnZvaWQgMH0pLmZvcm1hdCh0aGlzLm51bWJlci5ldmFsdWF0ZSh0KSl9LEFyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLm51bWJlciksdGhpcy5sb2NhbGUmJnQodGhpcy5sb2NhbGUpLHRoaXMuY3VycmVuY3kmJnQodGhpcy5jdXJyZW5jeSksdGhpcy5taW5GcmFjdGlvbkRpZ2l0cyYmdCh0aGlzLm1pbkZyYWN0aW9uRGlnaXRzKSx0aGlzLm1heEZyYWN0aW9uRGlnaXRzJiZ0KHRoaXMubWF4RnJhY3Rpb25EaWdpdHMpfSxBci5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSxBci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIHRoaXMubG9jYWxlJiYodC5sb2NhbGU9dGhpcy5sb2NhbGUuc2VyaWFsaXplKCkpLHRoaXMuY3VycmVuY3kmJih0LmN1cnJlbmN5PXRoaXMuY3VycmVuY3kuc2VyaWFsaXplKCkpLHRoaXMubWluRnJhY3Rpb25EaWdpdHMmJih0WyJtaW4tZnJhY3Rpb24tZGlnaXRzIl09dGhpcy5taW5GcmFjdGlvbkRpZ2l0cy5zZXJpYWxpemUoKSksdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cyYmKHRbIm1heC1mcmFjdGlvbi1kaWdpdHMiXT10aGlzLm1heEZyYWN0aW9uRGlnaXRzLnNlcmlhbGl6ZSgpKSxbIm51bWJlci1mb3JtYXQiLHRoaXMubnVtYmVyLnNlcmlhbGl6ZSgpLHRdfTt2YXIgTXI9ZnVuY3Rpb24odCl7dGhpcy50eXBlPUJ0LHRoaXMuaW5wdXQ9dH07TXIucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIDEgYXJndW1lbnQsIGJ1dCBmb3VuZCAiKyh0Lmxlbmd0aC0xKSsiIGluc3RlYWQuIik7dmFyIHI9ZS5wYXJzZSh0WzFdLDEpO3JldHVybiByPyJhcnJheSIhPT1yLnR5cGUua2luZCYmInN0cmluZyIhPT1yLnR5cGUua2luZCYmInZhbHVlIiE9PXIudHlwZS5raW5kP2UuZXJyb3IoIkV4cGVjdGVkIGFyZ3VtZW50IG9mIHR5cGUgc3RyaW5nIG9yIGFycmF5LCBidXQgZm91bmQgIitYdChyLnR5cGUpKyIgaW5zdGVhZC4iKTpuZXcgTXIocik6bnVsbH0sTXIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlLmxlbmd0aDtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlLmxlbmd0aDt0aHJvdyBuZXcgdWUoIkV4cGVjdGVkIHZhbHVlIHRvIGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFycmF5LCBidXQgZm91bmQgIitYdChzZShlKSkrIiBpbnN0ZWFkLiIpfSxNci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCl9LE1yLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LE1yLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD1bImxlbmd0aCJdO3JldHVybiB0aGlzLmVhY2hDaGlsZCgoZnVuY3Rpb24oZSl7dC5wdXNoKGUuc2VyaWFsaXplKCkpfSkpLHR9O3ZhciBTcj17Ij09Ijp4ciwiIT0iOmJyLCI+Ijp3ciwiPCI6X3IsIj49IjprciwiPD0iOlRyLGFycmF5OmhlLGF0OnVyLGJvb2xlYW46aGUsY2FzZTpkcixjb2FsZXNjZTpscixjb2xsYXRvcjpiZSxmb3JtYXQ6cGUsaW1hZ2U6ZGUsaW46ZnIsImluZGV4LW9mIjpocixpbnRlcnBvbGF0ZTpvciwiaW50ZXJwb2xhdGUtaGNsIjpvciwiaW50ZXJwb2xhdGUtbGFiIjpvcixsZW5ndGg6TXIsbGV0OmNyLGxpdGVyYWw6Y2UsbWF0Y2g6cHIsbnVtYmVyOmhlLCJudW1iZXItZm9ybWF0IjpBcixvYmplY3Q6aGUsc2xpY2U6bXIsc3RlcDpIZSxzdHJpbmc6aGUsInRvLWJvb2xlYW4iOmdlLCJ0by1jb2xvciI6Z2UsInRvLW51bWJlciI6Z2UsInRvLXN0cmluZyI6Z2UsdmFyOmplLHdpdGhpbjpSZX07ZnVuY3Rpb24gRXIodCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdO3I9ci5ldmFsdWF0ZSh0KSxuPW4uZXZhbHVhdGUodCksaT1pLmV2YWx1YXRlKHQpO3ZhciBvPWE/YS5ldmFsdWF0ZSh0KToxLHM9YWUocixuLGksbyk7aWYocyl0aHJvdyBuZXcgdWUocyk7cmV0dXJuIG5ldyB0ZShyLzI1NSpvLG4vMjU1Km8saS8yNTUqbyxvKX1mdW5jdGlvbiBMcih0LGUpe3JldHVybiB0IGluIGV9ZnVuY3Rpb24gQ3IodCxlKXt2YXIgcj1lW3RdO3JldHVybiB2b2lkIDA9PT1yP251bGw6cn1mdW5jdGlvbiBQcih0KXtyZXR1cm57dHlwZTp0fX1mdW5jdGlvbiBJcih0KXtyZXR1cm57cmVzdWx0OiJzdWNjZXNzIix2YWx1ZTp0fX1mdW5jdGlvbiBPcih0KXtyZXR1cm57cmVzdWx0OiJlcnJvciIsdmFsdWU6dH19ZnVuY3Rpb24genIodCl7cmV0dXJuImRhdGEtZHJpdmVuIj09PXRbInByb3BlcnR5LXR5cGUiXXx8ImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIj09PXRbInByb3BlcnR5LXR5cGUiXX1mdW5jdGlvbiBEcih0KXtyZXR1cm4hIXQuZXhwcmVzc2lvbiYmdC5leHByZXNzaW9uLnBhcmFtZXRlcnMuaW5kZXhPZigiem9vbSIpPi0xfWZ1bmN0aW9uIFJyKHQpe3JldHVybiEhdC5leHByZXNzaW9uJiZ0LmV4cHJlc3Npb24uaW50ZXJwb2xhdGVkfWZ1bmN0aW9uIEZyKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTnVtYmVyPyJudW1iZXIiOnQgaW5zdGFuY2VvZiBTdHJpbmc/InN0cmluZyI6dCBpbnN0YW5jZW9mIEJvb2xlYW4/ImJvb2xlYW4iOkFycmF5LmlzQXJyYXkodCk/ImFycmF5IjpudWxsPT09dD8ibnVsbCI6dHlwZW9mIHR9ZnVuY3Rpb24gQnIodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCYmIUFycmF5LmlzQXJyYXkodCl9ZnVuY3Rpb24gTnIodCl7cmV0dXJuIHR9ZnVuY3Rpb24ganIodCxlLHIpe3JldHVybiB2b2lkIDAhPT10P3Q6dm9pZCAwIT09ZT9lOnZvaWQgMCE9PXI/cjp2b2lkIDB9ZnVuY3Rpb24gVXIodCxlLHIsbixpKXtyZXR1cm4ganIodHlwZW9mIHI9PT1pP25bcl06dm9pZCAwLHQuZGVmYXVsdCxlLmRlZmF1bHQpfWZ1bmN0aW9uIFZyKHQsZSxyKXtpZigibnVtYmVyIiE9PUZyKHIpKXJldHVybiBqcih0LmRlZmF1bHQsZS5kZWZhdWx0KTt2YXIgbj10LnN0b3BzLmxlbmd0aDtpZigxPT09bilyZXR1cm4gdC5zdG9wc1swXVsxXTtpZihyPD10LnN0b3BzWzBdWzBdKXJldHVybiB0LnN0b3BzWzBdWzFdO2lmKHI+PXQuc3RvcHNbbi0xXVswXSlyZXR1cm4gdC5zdG9wc1tuLTFdWzFdO3ZhciBpPVZlKHQuc3RvcHMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pKSxyKTtyZXR1cm4gdC5zdG9wc1tpXVsxXX1mdW5jdGlvbiBIcih0LGUscil7dmFyIG49dm9pZCAwIT09dC5iYXNlP3QuYmFzZToxO2lmKCJudW1iZXIiIT09RnIocikpcmV0dXJuIGpyKHQuZGVmYXVsdCxlLmRlZmF1bHQpO3ZhciBpPXQuc3RvcHMubGVuZ3RoO2lmKDE9PT1pKXJldHVybiB0LnN0b3BzWzBdWzFdO2lmKHI8PXQuc3RvcHNbMF1bMF0pcmV0dXJuIHQuc3RvcHNbMF1bMV07aWYocj49dC5zdG9wc1tpLTFdWzBdKXJldHVybiB0LnN0b3BzW2ktMV1bMV07dmFyIGE9VmUodC5zdG9wcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkpLHIpLG89ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi1yLGE9dC1yO3JldHVybiAwPT09aT8wOjE9PT1lP2EvaTooTWF0aC5wb3coZSxhKS0xKS8oTWF0aC5wb3coZSxpKS0xKX0ocixuLHQuc3RvcHNbYV1bMF0sdC5zdG9wc1thKzFdWzBdKSxzPXQuc3RvcHNbYV1bMV0sbD10LnN0b3BzW2ErMV1bMV0sYz1HZVtlLnR5cGVdfHxOcjtpZih0LmNvbG9yU3BhY2UmJiJyZ2IiIT09dC5jb2xvclNwYWNlKXt2YXIgdT1hclt0LmNvbG9yU3BhY2VdO2M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdS5yZXZlcnNlKHUuaW50ZXJwb2xhdGUodS5mb3J3YXJkKHQpLHUuZm9yd2FyZChlKSxvKSl9fXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBzLmV2YWx1YXRlP3tldmFsdWF0ZTpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPWFyZ3VtZW50cy5sZW5ndGg7ZS0tOyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgcj1zLmV2YWx1YXRlLmFwcGx5KHZvaWQgMCx0KSxuPWwuZXZhbHVhdGUuYXBwbHkodm9pZCAwLHQpO2lmKHZvaWQgMCE9PXImJnZvaWQgMCE9PW4pcmV0dXJuIGMocixuLG8pfX06YyhzLGwsbyl9ZnVuY3Rpb24gcXIodCxlLHIpe3JldHVybiJjb2xvciI9PT1lLnR5cGU/cj10ZS5wYXJzZShyKToiZm9ybWF0dGVkIj09PWUudHlwZT9yPW5lLmZyb21TdHJpbmcoci50b1N0cmluZygpKToicmVzb2x2ZWRJbWFnZSI9PT1lLnR5cGU/cj1pZS5mcm9tU3RyaW5nKHIudG9TdHJpbmcoKSk6RnIocik9PT1lLnR5cGV8fCJlbnVtIj09PWUudHlwZSYmZS52YWx1ZXNbcl18fChyPXZvaWQgMCksanIocix0LmRlZmF1bHQsZS5kZWZhdWx0KX14ZS5yZWdpc3RlcihTcix7ZXJyb3I6W3traW5kOiJlcnJvciJ9LFtOdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3Rocm93IG5ldyB1ZShyLmV2YWx1YXRlKHQpKX1dLHR5cGVvZjpbTnQsW0h0XSxmdW5jdGlvbih0LGUpe3JldHVybiBYdChzZShlWzBdLmV2YWx1YXRlKHQpKSl9XSwidG8tcmdiYSI6W1d0KEJ0LDQpLFtVdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS50b0FycmF5KCl9XSxyZ2I6W1V0LFtCdCxCdCxCdF0sRXJdLHJnYmE6W1V0LFtCdCxCdCxCdCxCdF0sRXJdLGhhczp7dHlwZTpqdCxvdmVybG9hZHM6W1tbTnRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIExyKGVbMF0uZXZhbHVhdGUodCksdC5wcm9wZXJ0aWVzKCkpfV0sW1tOdCxWdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gTHIoci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKX1dXX0sZ2V0Ont0eXBlOkh0LG92ZXJsb2FkczpbW1tOdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gQ3IoZVswXS5ldmFsdWF0ZSh0KSx0LnByb3BlcnRpZXMoKSl9XSxbW050LFZ0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBDcihyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpfV1dfSwiZmVhdHVyZS1zdGF0ZSI6W0h0LFtOdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gQ3IoZVswXS5ldmFsdWF0ZSh0KSx0LmZlYXR1cmVTdGF0ZXx8e30pfV0scHJvcGVydGllczpbVnQsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQucHJvcGVydGllcygpfV0sImdlb21ldHJ5LXR5cGUiOltOdCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZW9tZXRyeVR5cGUoKX1dLGlkOltIdCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5pZCgpfV0sem9vbTpbQnQsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2xvYmFscy56b29tfV0sImhlYXRtYXAtZGVuc2l0eSI6W0J0LFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbHMuaGVhdG1hcERlbnNpdHl8fDB9XSwibGluZS1wcm9ncmVzcyI6W0J0LFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbHMubGluZVByb2dyZXNzfHwwfV0sYWNjdW11bGF0ZWQ6W0h0LFtdLGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10Lmdsb2JhbHMuYWNjdW11bGF0ZWQ/bnVsbDp0Lmdsb2JhbHMuYWNjdW11bGF0ZWR9XSwiKyI6W0J0LFByKEJ0KSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXtyKz1pW25dLmV2YWx1YXRlKHQpfXJldHVybiByfV0sIioiOltCdCxQcihCdCksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MSxuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7cio9aVtuXS5ldmFsdWF0ZSh0KX1yZXR1cm4gcn1dLCItIjp7dHlwZTpCdCxvdmVybG9hZHM6W1tbQnQsQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCktbi5ldmFsdWF0ZSh0KX1dLFtbQnRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuLWVbMF0uZXZhbHVhdGUodCl9XV19LCIvIjpbQnQsW0J0LEJ0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpL24uZXZhbHVhdGUodCl9XSwiJSI6W0J0LFtCdCxCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KSVuLmV2YWx1YXRlKHQpfV0sbG4yOltCdCxbXSxmdW5jdGlvbigpe3JldHVybiBNYXRoLkxOMn1dLHBpOltCdCxbXSxmdW5jdGlvbigpe3JldHVybiBNYXRoLlBJfV0sZTpbQnQsW10sZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5FfV0sIl4iOltCdCxbQnQsQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIE1hdGgucG93KHIuZXZhbHVhdGUodCksbi5ldmFsdWF0ZSh0KSl9XSxzcXJ0OltCdCxbQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5zcXJ0KHIuZXZhbHVhdGUodCkpfV0sbG9nMTA6W0J0LFtCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmxvZyhyLmV2YWx1YXRlKHQpKS9NYXRoLkxOMTB9XSxsbjpbQnQsW0J0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgubG9nKHIuZXZhbHVhdGUodCkpfV0sbG9nMjpbQnQsW0J0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgubG9nKHIuZXZhbHVhdGUodCkpL01hdGguTE4yfV0sc2luOltCdCxbQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5zaW4oci5ldmFsdWF0ZSh0KSl9XSxjb3M6W0J0LFtCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmNvcyhyLmV2YWx1YXRlKHQpKX1dLHRhbjpbQnQsW0J0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgudGFuKHIuZXZhbHVhdGUodCkpfV0sYXNpbjpbQnQsW0J0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguYXNpbihyLmV2YWx1YXRlKHQpKX1dLGFjb3M6W0J0LFtCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmFjb3Moci5ldmFsdWF0ZSh0KSl9XSxhdGFuOltCdCxbQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5hdGFuKHIuZXZhbHVhdGUodCkpfV0sbWluOltCdCxQcihCdCksZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5taW4uYXBwbHkoTWF0aCxlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXZhbHVhdGUodCl9KSkpfV0sbWF4OltCdCxQcihCdCksZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXguYXBwbHkoTWF0aCxlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXZhbHVhdGUodCl9KSkpfV0sYWJzOltCdCxbQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5hYnMoci5ldmFsdWF0ZSh0KSl9XSxyb3VuZDpbQnQsW0J0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0uZXZhbHVhdGUodCk7cmV0dXJuIHI8MD8tTWF0aC5yb3VuZCgtcik6TWF0aC5yb3VuZChyKX1dLGZsb29yOltCdCxbQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5mbG9vcihyLmV2YWx1YXRlKHQpKX1dLGNlaWw6W0J0LFtCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmNlaWwoci5ldmFsdWF0ZSh0KSl9XSwiZmlsdGVyLT09IjpbanQsW050LEh0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiB0LnByb3BlcnRpZXMoKVtyLnZhbHVlXT09PW4udmFsdWV9XSwiZmlsdGVyLWlkLT09IjpbanQsW0h0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIHQuaWQoKT09PXIudmFsdWV9XSwiZmlsdGVyLXR5cGUtPT0iOltqdCxbTnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gdC5nZW9tZXRyeVR5cGUoKT09PXIudmFsdWV9XSwiZmlsdGVyLTwiOltqdCxbTnQsSHRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT10LnByb3BlcnRpZXMoKVtyLnZhbHVlXSxhPW4udmFsdWU7cmV0dXJuIHR5cGVvZiBpPT10eXBlb2YgYSYmaTxhfV0sImZpbHRlci1pZC08IjpbanQsW0h0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10LmlkKCksaT1yLnZhbHVlO3JldHVybiB0eXBlb2Ygbj09dHlwZW9mIGkmJm48aX1dLCJmaWx0ZXItPiI6W2p0LFtOdCxIdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPXQucHJvcGVydGllcygpW3IudmFsdWVdLGE9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIGk9PXR5cGVvZiBhJiZpPmF9XSwiZmlsdGVyLWlkLT4iOltqdCxbSHRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuaWQoKSxpPXIudmFsdWU7cmV0dXJuIHR5cGVvZiBuPT10eXBlb2YgaSYmbj5pfV0sImZpbHRlci08PSI6W2p0LFtOdCxIdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPXQucHJvcGVydGllcygpW3IudmFsdWVdLGE9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIGk9PXR5cGVvZiBhJiZpPD1hfV0sImZpbHRlci1pZC08PSI6W2p0LFtIdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5pZCgpLGk9ci52YWx1ZTtyZXR1cm4gdHlwZW9mIG49PXR5cGVvZiBpJiZuPD1pfV0sImZpbHRlci0+PSI6W2p0LFtOdCxIdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPXQucHJvcGVydGllcygpW3IudmFsdWVdLGE9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIGk9PXR5cGVvZiBhJiZpPj1hfV0sImZpbHRlci1pZC0+PSI6W2p0LFtIdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5pZCgpLGk9ci52YWx1ZTtyZXR1cm4gdHlwZW9mIG49PXR5cGVvZiBpJiZuPj1pfV0sImZpbHRlci1oYXMiOltqdCxbSHRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0udmFsdWUgaW4gdC5wcm9wZXJ0aWVzKCl9XSwiZmlsdGVyLWhhcy1pZCI6W2p0LFtdLGZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09dC5pZCgpJiZ2b2lkIDAhPT10LmlkKCl9XSwiZmlsdGVyLXR5cGUtaW4iOltqdCxbV3QoTnQpXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLnZhbHVlLmluZGV4T2YodC5nZW9tZXRyeVR5cGUoKSk+PTB9XSwiZmlsdGVyLWlkLWluIjpbanQsW1d0KEh0KV0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS52YWx1ZS5pbmRleE9mKHQuaWQoKSk+PTB9XSwiZmlsdGVyLWluLXNtYWxsIjpbanQsW050LFd0KEh0KV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBlWzFdLnZhbHVlLmluZGV4T2YodC5wcm9wZXJ0aWVzKClbci52YWx1ZV0pPj0wfV0sImZpbHRlci1pbi1sYXJnZSI6W2p0LFtOdCxXdChIdCldLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4pe2Zvcig7cjw9bjspe3ZhciBpPXIrbj4+MTtpZihlW2ldPT09dClyZXR1cm4hMDtlW2ldPnQ/bj1pLTE6cj1pKzF9cmV0dXJuITF9KHQucHJvcGVydGllcygpW3IudmFsdWVdLG4udmFsdWUsMCxuLnZhbHVlLmxlbmd0aC0xKX1dLGFsbDp7dHlwZTpqdCxvdmVybG9hZHM6W1tbanQsanRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCkmJm4uZXZhbHVhdGUodCl9XSxbUHIoanQpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1lO3I8bi5sZW5ndGg7cis9MSl7aWYoIW5bcl0uZXZhbHVhdGUodCkpcmV0dXJuITF9cmV0dXJuITB9XV19LGFueTp7dHlwZTpqdCxvdmVybG9hZHM6W1tbanQsanRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCl8fG4uZXZhbHVhdGUodCl9XSxbUHIoanQpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1lO3I8bi5sZW5ndGg7cis9MSl7aWYobltyXS5ldmFsdWF0ZSh0KSlyZXR1cm4hMH1yZXR1cm4hMX1dXX0sIiEiOltqdCxbanRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIWVbMF0uZXZhbHVhdGUodCl9XSwiaXMtc3VwcG9ydGVkLXNjcmlwdCI6W2p0LFtOdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5nbG9iYWxzJiZ0Lmdsb2JhbHMuaXNTdXBwb3J0ZWRTY3JpcHQ7cmV0dXJuIW58fG4oci5ldmFsdWF0ZSh0KSl9XSx1cGNhc2U6W050LFtOdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS50b1VwcGVyQ2FzZSgpfV0sZG93bmNhc2U6W050LFtOdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS50b0xvd2VyQ2FzZSgpfV0sY29uY2F0OltOdCxQcihIdCksZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBsZShlLmV2YWx1YXRlKHQpKX0pKS5qb2luKCIiKX1dLCJyZXNvbHZlZC1sb2NhbGUiOltOdCxbcXRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0uZXZhbHVhdGUodCkucmVzb2x2ZWRMb2NhbGUoKX1dfSk7dmFyIEdyPWZ1bmN0aW9uKHQsZSl7dGhpcy5leHByZXNzaW9uPXQsdGhpcy5fd2FybmluZ0hpc3Rvcnk9e30sdGhpcy5fZXZhbHVhdG9yPW5ldyB5ZSx0aGlzLl9kZWZhdWx0VmFsdWU9ZT9mdW5jdGlvbih0KXtyZXR1cm4iY29sb3IiPT09dC50eXBlJiZCcih0LmRlZmF1bHQpP25ldyB0ZSgwLDAsMCwwKToiY29sb3IiPT09dC50eXBlP3RlLnBhcnNlKHQuZGVmYXVsdCl8fG51bGw6dm9pZCAwPT09dC5kZWZhdWx0P251bGw6dC5kZWZhdWx0fShlKTpudWxsLHRoaXMuX2VudW1WYWx1ZXM9ZSYmImVudW0iPT09ZS50eXBlP2UudmFsdWVzOm51bGx9O2Z1bmN0aW9uIFlyKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD4wJiYic3RyaW5nIj09dHlwZW9mIHRbMF0mJnRbMF1pbiBTcn1mdW5jdGlvbiBXcih0LGUpe3ZhciByPW5ldyBVZShTcixbXSxlP2Z1bmN0aW9uKHQpe3ZhciBlPXtjb2xvcjpVdCxzdHJpbmc6TnQsbnVtYmVyOkJ0LGVudW06TnQsYm9vbGVhbjpqdCxmb3JtYXR0ZWQ6R3QscmVzb2x2ZWRJbWFnZTpZdH07aWYoImFycmF5Ij09PXQudHlwZSlyZXR1cm4gV3QoZVt0LnZhbHVlXXx8SHQsdC5sZW5ndGgpO3JldHVybiBlW3QudHlwZV19KGUpOnZvaWQgMCksbj1yLnBhcnNlKHQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsZSYmInN0cmluZyI9PT1lLnR5cGU/e3R5cGVBbm5vdGF0aW9uOiJjb2VyY2UifTp2b2lkIDApO3JldHVybiBuP0lyKG5ldyBHcihuLGUpKTpPcihyLmVycm9ycyl9R3IucHJvdG90eXBlLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmc9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiB0aGlzLl9ldmFsdWF0b3IuZ2xvYmFscz10LHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlPWUsdGhpcy5fZXZhbHVhdG9yLmZlYXR1cmVTdGF0ZT1yLHRoaXMuX2V2YWx1YXRvci5jYW5vbmljYWw9bix0aGlzLl9ldmFsdWF0b3IuYXZhaWxhYmxlSW1hZ2VzPWl8fG51bGwsdGhpcy5fZXZhbHVhdG9yLmZvcm1hdHRlZFNlY3Rpb249YSx0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUodGhpcy5fZXZhbHVhdG9yKX0sR3IucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLl9ldmFsdWF0b3IuZ2xvYmFscz10LHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlPWV8fG51bGwsdGhpcy5fZXZhbHVhdG9yLmZlYXR1cmVTdGF0ZT1yfHxudWxsLHRoaXMuX2V2YWx1YXRvci5jYW5vbmljYWw9bix0aGlzLl9ldmFsdWF0b3IuYXZhaWxhYmxlSW1hZ2VzPWl8fG51bGwsdGhpcy5fZXZhbHVhdG9yLmZvcm1hdHRlZFNlY3Rpb249YXx8bnVsbDt0cnl7dmFyIG89dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuX2V2YWx1YXRvcik7aWYobnVsbD09b3x8Im51bWJlciI9PXR5cGVvZiBvJiZvIT1vKXJldHVybiB0aGlzLl9kZWZhdWx0VmFsdWU7aWYodGhpcy5fZW51bVZhbHVlcyYmIShvIGluIHRoaXMuX2VudW1WYWx1ZXMpKXRocm93IG5ldyB1ZSgiRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb25lIG9mICIrT2JqZWN0LmtleXModGhpcy5fZW51bVZhbHVlcykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCl9KSkuam9pbigiLCAiKSsiLCBidXQgZm91bmQgIitKU09OLnN0cmluZ2lmeShvKSsiIGluc3RlYWQuIik7cmV0dXJuIG99Y2F0Y2godCl7cmV0dXJuIHRoaXMuX3dhcm5pbmdIaXN0b3J5W3QubWVzc2FnZV18fCh0aGlzLl93YXJuaW5nSGlzdG9yeVt0Lm1lc3NhZ2VdPSEwLCJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuKHQubWVzc2FnZSkpLHRoaXMuX2RlZmF1bHRWYWx1ZX19O3ZhciBYcj1mdW5jdGlvbih0LGUpe3RoaXMua2luZD10LHRoaXMuX3N0eWxlRXhwcmVzc2lvbj1lLHRoaXMuaXNTdGF0ZURlcGVuZGVudD0iY29uc3RhbnQiIT09dCYmIUJlKGUuZXhwcmVzc2lvbil9O1hyLnByb3RvdHlwZS5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmcodCxlLHIsbixpLGEpfSxYci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGUodCxlLHIsbixpLGEpfTt2YXIgWnI9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5raW5kPXQsdGhpcy56b29tU3RvcHM9cix0aGlzLl9zdHlsZUV4cHJlc3Npb249ZSx0aGlzLmlzU3RhdGVEZXBlbmRlbnQ9ImNhbWVyYSIhPT10JiYhQmUoZS5leHByZXNzaW9uKSx0aGlzLmludGVycG9sYXRpb25UeXBlPW59O2Z1bmN0aW9uIEpyKHQsZSl7aWYoImVycm9yIj09PSh0PVdyKHQsZSkpLnJlc3VsdClyZXR1cm4gdDt2YXIgcj10LnZhbHVlLmV4cHJlc3Npb24sbj1GZShyKTtpZighbiYmIXpyKGUpKXJldHVybiBPcihbbmV3IER0KCIiLCJkYXRhIGV4cHJlc3Npb25zIG5vdCBzdXBwb3J0ZWQiKV0pO3ZhciBpPU5lKHIsWyJ6b29tIl0pO2lmKCFpJiYhRHIoZSkpcmV0dXJuIE9yKFtuZXcgRHQoIiIsInpvb20gZXhwcmVzc2lvbnMgbm90IHN1cHBvcnRlZCIpXSk7dmFyIGE9ZnVuY3Rpb24gdChlKXt2YXIgcj1udWxsO2lmKGUgaW5zdGFuY2VvZiBjcilyPXQoZS5yZXN1bHQpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIGxyKWZvcih2YXIgbj0wLGk9ZS5hcmdzO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtpZihyPXQoYSkpYnJlYWt9ZWxzZShlIGluc3RhbmNlb2YgSGV8fGUgaW5zdGFuY2VvZiBvcikmJmUuaW5wdXQgaW5zdGFuY2VvZiB4ZSYmInpvb20iPT09ZS5pbnB1dC5uYW1lJiYocj1lKTtpZihyIGluc3RhbmNlb2YgRHQpcmV0dXJuIHI7cmV0dXJuIGUuZWFjaENoaWxkKChmdW5jdGlvbihlKXt2YXIgbj10KGUpO24gaW5zdGFuY2VvZiBEdD9yPW46IXImJm4/cj1uZXcgRHQoIiIsJyJ6b29tIiBleHByZXNzaW9uIG1heSBvbmx5IGJlIHVzZWQgYXMgaW5wdXQgdG8gYSB0b3AtbGV2ZWwgInN0ZXAiIG9yICJpbnRlcnBvbGF0ZSIgZXhwcmVzc2lvbi4nKTpyJiZuJiZyIT09biYmKHI9bmV3IER0KCIiLCdPbmx5IG9uZSB6b29tLWJhc2VkICJzdGVwIiBvciAiaW50ZXJwb2xhdGUiIHN1YmV4cHJlc3Npb24gbWF5IGJlIHVzZWQgaW4gYW4gZXhwcmVzc2lvbi4nKSl9KSkscn0ocik7aWYoIWEmJiFpKXJldHVybiBPcihbbmV3IER0KCIiLCciem9vbSIgZXhwcmVzc2lvbiBtYXkgb25seSBiZSB1c2VkIGFzIGlucHV0IHRvIGEgdG9wLWxldmVsICJzdGVwIiBvciAiaW50ZXJwb2xhdGUiIGV4cHJlc3Npb24uJyldKTtpZihhIGluc3RhbmNlb2YgRHQpcmV0dXJuIE9yKFthXSk7aWYoYSBpbnN0YW5jZW9mIG9yJiYhUnIoZSkpcmV0dXJuIE9yKFtuZXcgRHQoIiIsJyJpbnRlcnBvbGF0ZSIgZXhwcmVzc2lvbnMgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGlzIHByb3BlcnR5JyldKTtpZighYSlyZXR1cm4gSXIobmV3IFhyKG4/ImNvbnN0YW50Ijoic291cmNlIix0LnZhbHVlKSk7dmFyIG89YSBpbnN0YW5jZW9mIG9yP2EuaW50ZXJwb2xhdGlvbjp2b2lkIDA7cmV0dXJuIElyKG5ldyBacihuPyJjYW1lcmEiOiJjb21wb3NpdGUiLHQudmFsdWUsYS5sYWJlbHMsbykpfVpyLnByb3RvdHlwZS5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmcodCxlLHIsbixpLGEpfSxaci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGUodCxlLHIsbixpLGEpfSxaci5wcm90b3R5cGUuaW50ZXJwb2xhdGlvbkZhY3Rvcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuaW50ZXJwb2xhdGlvblR5cGU/b3IuaW50ZXJwb2xhdGlvbkZhY3Rvcih0aGlzLmludGVycG9sYXRpb25UeXBlLHQsZSxyKTowfTt2YXIgS3I9ZnVuY3Rpb24odCxlKXt0aGlzLl9wYXJhbWV0ZXJzPXQsdGhpcy5fc3BlY2lmaWNhdGlvbj1lLEl0KHRoaXMsZnVuY3Rpb24gdChlLHIpe3ZhciBuLGksYSxvPSJjb2xvciI9PT1yLnR5cGUscz1lLnN0b3BzJiYib2JqZWN0Ij09dHlwZW9mIGUuc3RvcHNbMF1bMF0sbD1zfHx2b2lkIDAhPT1lLnByb3BlcnR5LGM9c3x8IWwsdT1lLnR5cGV8fChScihyKT8iZXhwb25lbnRpYWwiOiJpbnRlcnZhbCIpO2lmKG8mJigoZT1JdCh7fSxlKSkuc3RvcHMmJihlLnN0b3BzPWUuc3RvcHMubWFwKChmdW5jdGlvbih0KXtyZXR1cm5bdFswXSx0ZS5wYXJzZSh0WzFdKV19KSkpLGUuZGVmYXVsdD9lLmRlZmF1bHQ9dGUucGFyc2UoZS5kZWZhdWx0KTplLmRlZmF1bHQ9dGUucGFyc2Uoci5kZWZhdWx0KSksZS5jb2xvclNwYWNlJiYicmdiIiE9PWUuY29sb3JTcGFjZSYmIWFyW2UuY29sb3JTcGFjZV0pdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNvbG9yIHNwYWNlOiAiK2UuY29sb3JTcGFjZSk7aWYoImV4cG9uZW50aWFsIj09PXUpbj1IcjtlbHNlIGlmKCJpbnRlcnZhbCI9PT11KW49VnI7ZWxzZSBpZigiY2F0ZWdvcmljYWwiPT09dSl7bj1VcixpPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBmPTAsaD1lLnN0b3BzO2Y8aC5sZW5ndGg7Zis9MSl7dmFyIHA9aFtmXTtpW3BbMF1dPXBbMV19YT10eXBlb2YgZS5zdG9wc1swXVswXX1lbHNle2lmKCJpZGVudGl0eSIhPT11KXRocm93IG5ldyBFcnJvcignVW5rbm93biBmdW5jdGlvbiB0eXBlICInK3UrJyInKTtuPXFyfWlmKHMpe2Zvcih2YXIgZD17fSxtPVtdLGc9MDtnPGUuc3RvcHMubGVuZ3RoO2crKyl7dmFyIHY9ZS5zdG9wc1tnXSx5PXZbMF0uem9vbTt2b2lkIDA9PT1kW3ldJiYoZFt5XT17em9vbTp5LHR5cGU6ZS50eXBlLHByb3BlcnR5OmUucHJvcGVydHksZGVmYXVsdDplLmRlZmF1bHQsc3RvcHM6W119LG0ucHVzaCh5KSksZFt5XS5zdG9wcy5wdXNoKFt2WzBdLnZhbHVlLHZbMV1dKX1mb3IodmFyIHg9W10sYj0wLF89bTtiPF8ubGVuZ3RoO2IrPTEpe3ZhciB3PV9bYl07eC5wdXNoKFtkW3ddLnpvb20sdChkW3ddLHIpXSl9dmFyIFQ9e25hbWU6ImxpbmVhciJ9O3JldHVybntraW5kOiJjb21wb3NpdGUiLGludGVycG9sYXRpb25UeXBlOlQsaW50ZXJwb2xhdGlvbkZhY3Rvcjpvci5pbnRlcnBvbGF0aW9uRmFjdG9yLmJpbmQodm9pZCAwLFQpLHpvb21TdG9wczp4Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSksZXZhbHVhdGU6ZnVuY3Rpb24odCxuKXt2YXIgaT10Lnpvb207cmV0dXJuIEhyKHtzdG9wczp4LGJhc2U6ZS5iYXNlfSxyLGkpLmV2YWx1YXRlKGksbil9fX1pZihjKXt2YXIgaz0iZXhwb25lbnRpYWwiPT09dT97bmFtZToiZXhwb25lbnRpYWwiLGJhc2U6dm9pZCAwIT09ZS5iYXNlP2UuYmFzZToxfTpudWxsO3JldHVybntraW5kOiJjYW1lcmEiLGludGVycG9sYXRpb25UeXBlOmssaW50ZXJwb2xhdGlvbkZhY3Rvcjpvci5pbnRlcnBvbGF0aW9uRmFjdG9yLmJpbmQodm9pZCAwLGspLHpvb21TdG9wczplLnN0b3BzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSksZXZhbHVhdGU6ZnVuY3Rpb24odCl7dmFyIG89dC56b29tO3JldHVybiBuKGUscixvLGksYSl9fX1yZXR1cm57a2luZDoic291cmNlIixldmFsdWF0ZTpmdW5jdGlvbih0LG8pe3ZhciBzPW8mJm8ucHJvcGVydGllcz9vLnByb3BlcnRpZXNbZS5wcm9wZXJ0eV06dm9pZCAwO3JldHVybiB2b2lkIDA9PT1zP2pyKGUuZGVmYXVsdCxyLmRlZmF1bHQpOm4oZSxyLHMsaSxhKX19fSh0aGlzLl9wYXJhbWV0ZXJzLHRoaXMuX3NwZWNpZmljYXRpb24pKX07ZnVuY3Rpb24gUXIodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWN8fHt9LGk9dC5vYmplY3RFbGVtZW50VmFsaWRhdG9yc3x8e30sYT10LnN0eWxlLG89dC5zdHlsZVNwZWMscz1bXSxsPUZyKHIpO2lmKCJvYmplY3QiIT09bClyZXR1cm5bbmV3IEN0KGUsciwib2JqZWN0IGV4cGVjdGVkLCAiK2wrIiBmb3VuZCIpXTtmb3IodmFyIGMgaW4gcil7dmFyIHU9Yy5zcGxpdCgiLiIpWzBdLGY9blt1XXx8blsiKiJdLGg9dm9pZCAwO2lmKGlbdV0paD1pW3VdO2Vsc2UgaWYoblt1XSloPWtuO2Vsc2UgaWYoaVsiKiJdKWg9aVsiKiJdO2Vsc2V7aWYoIW5bIioiXSl7cy5wdXNoKG5ldyBDdChlLHJbY10sJ3Vua25vd24gcHJvcGVydHkgIicrYysnIicpKTtjb250aW51ZX1oPWtufXM9cy5jb25jYXQoaCh7a2V5OihlP2UrIi4iOmUpK2MsdmFsdWU6cltjXSx2YWx1ZVNwZWM6ZixzdHlsZTphLHN0eWxlU3BlYzpvLG9iamVjdDpyLG9iamVjdEtleTpjfSxyKSl9Zm9yKHZhciBwIGluIG4paVtwXXx8bltwXS5yZXF1aXJlZCYmdm9pZCAwPT09bltwXS5kZWZhdWx0JiZ2b2lkIDA9PT1yW3BdJiZzLnB1c2gobmV3IEN0KGUsciwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAiJytwKyciJykpO3JldHVybiBzfWZ1bmN0aW9uICRyKHQpe3ZhciBlPXQudmFsdWUscj10LnZhbHVlU3BlYyxuPXQuc3R5bGUsaT10LnN0eWxlU3BlYyxhPXQua2V5LG89dC5hcnJheUVsZW1lbnRWYWxpZGF0b3J8fGtuO2lmKCJhcnJheSIhPT1GcihlKSlyZXR1cm5bbmV3IEN0KGEsZSwiYXJyYXkgZXhwZWN0ZWQsICIrRnIoZSkrIiBmb3VuZCIpXTtpZihyLmxlbmd0aCYmZS5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm5bbmV3IEN0KGEsZSwiYXJyYXkgbGVuZ3RoICIrci5sZW5ndGgrIiBleHBlY3RlZCwgbGVuZ3RoICIrZS5sZW5ndGgrIiBmb3VuZCIpXTtpZihyWyJtaW4tbGVuZ3RoIl0mJmUubGVuZ3RoPHJbIm1pbi1sZW5ndGgiXSlyZXR1cm5bbmV3IEN0KGEsZSwiYXJyYXkgbGVuZ3RoIGF0IGxlYXN0ICIrclsibWluLWxlbmd0aCJdKyIgZXhwZWN0ZWQsIGxlbmd0aCAiK2UubGVuZ3RoKyIgZm91bmQiKV07dmFyIHM9e3R5cGU6ci52YWx1ZSx2YWx1ZXM6ci52YWx1ZXN9O2kuJHZlcnNpb248NyYmKHMuZnVuY3Rpb249ci5mdW5jdGlvbiksIm9iamVjdCI9PT1GcihyLnZhbHVlKSYmKHM9ci52YWx1ZSk7Zm9yKHZhciBsPVtdLGM9MDtjPGUubGVuZ3RoO2MrKylsPWwuY29uY2F0KG8oe2FycmF5OmUsYXJyYXlJbmRleDpjLHZhbHVlOmVbY10sdmFsdWVTcGVjOnMsc3R5bGU6bixzdHlsZVNwZWM6aSxrZXk6YSsiWyIrYysiXSJ9KSk7cmV0dXJuIGx9ZnVuY3Rpb24gdG4odCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWMsaT1GcihyKTtyZXR1cm4ibnVtYmVyIj09PWkmJnIhPXImJihpPSJOYU4iKSwibnVtYmVyIiE9PWk/W25ldyBDdChlLHIsIm51bWJlciBleHBlY3RlZCwgIitpKyIgZm91bmQiKV06Im1pbmltdW0iaW4gbiYmcjxuLm1pbmltdW0/W25ldyBDdChlLHIscisiIGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bSB2YWx1ZSAiK24ubWluaW11bSldOiJtYXhpbXVtImluIG4mJnI+bi5tYXhpbXVtP1tuZXcgQ3QoZSxyLHIrIiBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gdmFsdWUgIituLm1heGltdW0pXTpbXX1mdW5jdGlvbiBlbih0KXt2YXIgZSxyLG4saT10LnZhbHVlU3BlYyxhPU90KHQudmFsdWUudHlwZSksbz17fSxzPSJjYXRlZ29yaWNhbCIhPT1hJiZ2b2lkIDA9PT10LnZhbHVlLnByb3BlcnR5LGw9IXMsYz0iYXJyYXkiPT09RnIodC52YWx1ZS5zdG9wcykmJiJhcnJheSI9PT1Gcih0LnZhbHVlLnN0b3BzWzBdKSYmIm9iamVjdCI9PT1Gcih0LnZhbHVlLnN0b3BzWzBdWzBdKSx1PVFyKHtrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSx2YWx1ZVNwZWM6dC5zdHlsZVNwZWMuZnVuY3Rpb24sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e3N0b3BzOmZ1bmN0aW9uKHQpe2lmKCJpZGVudGl0eSI9PT1hKXJldHVybltuZXcgQ3QodC5rZXksdC52YWx1ZSwnaWRlbnRpdHkgZnVuY3Rpb24gbWF5IG5vdCBoYXZlIGEgInN0b3BzIiBwcm9wZXJ0eScpXTt2YXIgZT1bXSxyPXQudmFsdWU7ZT1lLmNvbmNhdCgkcih7a2V5OnQua2V5LHZhbHVlOnIsdmFsdWVTcGVjOnQudmFsdWVTcGVjLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLGFycmF5RWxlbWVudFZhbGlkYXRvcjpmfSkpLCJhcnJheSI9PT1GcihyKSYmMD09PXIubGVuZ3RoJiZlLnB1c2gobmV3IEN0KHQua2V5LHIsImFycmF5IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc3RvcCIpKTtyZXR1cm4gZX0sZGVmYXVsdDpmdW5jdGlvbih0KXtyZXR1cm4ga24oe2tleTp0LmtleSx2YWx1ZTp0LnZhbHVlLHZhbHVlU3BlYzppLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjfSl9fX0pO3JldHVybiJpZGVudGl0eSI9PT1hJiZzJiZ1LnB1c2gobmV3IEN0KHQua2V5LHQudmFsdWUsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgInByb3BlcnR5IicpKSwiaWRlbnRpdHkiPT09YXx8dC52YWx1ZS5zdG9wc3x8dS5wdXNoKG5ldyBDdCh0LmtleSx0LnZhbHVlLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJzdG9wcyInKSksImV4cG9uZW50aWFsIj09PWEmJnQudmFsdWVTcGVjLmV4cHJlc3Npb24mJiFScih0LnZhbHVlU3BlYykmJnUucHVzaChuZXcgQ3QodC5rZXksdC52YWx1ZSwiZXhwb25lbnRpYWwgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKSksdC5zdHlsZVNwZWMuJHZlcnNpb24+PTgmJihsJiYhenIodC52YWx1ZVNwZWMpP3UucHVzaChuZXcgQ3QodC5rZXksdC52YWx1ZSwicHJvcGVydHkgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKSk6cyYmIURyKHQudmFsdWVTcGVjKSYmdS5wdXNoKG5ldyBDdCh0LmtleSx0LnZhbHVlLCJ6b29tIGZ1bmN0aW9ucyBub3Qgc3VwcG9ydGVkIikpKSwiY2F0ZWdvcmljYWwiIT09YSYmIWN8fHZvaWQgMCE9PXQudmFsdWUucHJvcGVydHl8fHUucHVzaChuZXcgQ3QodC5rZXksdC52YWx1ZSwnInByb3BlcnR5IiBwcm9wZXJ0eSBpcyByZXF1aXJlZCcpKSx1O2Z1bmN0aW9uIGYodCl7dmFyIGU9W10sYT10LnZhbHVlLHM9dC5rZXk7aWYoImFycmF5IiE9PUZyKGEpKXJldHVybltuZXcgQ3QocyxhLCJhcnJheSBleHBlY3RlZCwgIitGcihhKSsiIGZvdW5kIildO2lmKDIhPT1hLmxlbmd0aClyZXR1cm5bbmV3IEN0KHMsYSwiYXJyYXkgbGVuZ3RoIDIgZXhwZWN0ZWQsIGxlbmd0aCAiK2EubGVuZ3RoKyIgZm91bmQiKV07aWYoYyl7aWYoIm9iamVjdCIhPT1GcihhWzBdKSlyZXR1cm5bbmV3IEN0KHMsYSwib2JqZWN0IGV4cGVjdGVkLCAiK0ZyKGFbMF0pKyIgZm91bmQiKV07aWYodm9pZCAwPT09YVswXS56b29tKXJldHVybltuZXcgQ3QocyxhLCJvYmplY3Qgc3RvcCBrZXkgbXVzdCBoYXZlIHpvb20iKV07aWYodm9pZCAwPT09YVswXS52YWx1ZSlyZXR1cm5bbmV3IEN0KHMsYSwib2JqZWN0IHN0b3Aga2V5IG11c3QgaGF2ZSB2YWx1ZSIpXTtpZihuJiZuPk90KGFbMF0uem9vbSkpcmV0dXJuW25ldyBDdChzLGFbMF0uem9vbSwic3RvcCB6b29tIHZhbHVlcyBtdXN0IGFwcGVhciBpbiBhc2NlbmRpbmcgb3JkZXIiKV07T3QoYVswXS56b29tKSE9PW4mJihuPU90KGFbMF0uem9vbSkscj12b2lkIDAsbz17fSksZT1lLmNvbmNhdChRcih7a2V5OnMrIlswXSIsdmFsdWU6YVswXSx2YWx1ZVNwZWM6e3pvb206e319LHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOnt6b29tOnRuLHZhbHVlOmh9fSkpfWVsc2UgZT1lLmNvbmNhdChoKHtrZXk6cysiWzBdIix2YWx1ZTphWzBdLHZhbHVlU3BlYzp7fSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlY30sYSkpO3JldHVybiBZcih6dChhWzFdKSk/ZS5jb25jYXQoW25ldyBDdChzKyJbMV0iLGFbMV0sImV4cHJlc3Npb25zIGFyZSBub3QgYWxsb3dlZCBpbiBmdW5jdGlvbiBzdG9wcy4iKV0pOmUuY29uY2F0KGtuKHtrZXk6cysiWzFdIix2YWx1ZTphWzFdLHZhbHVlU3BlYzppLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjfSkpfWZ1bmN0aW9uIGgodCxuKXt2YXIgcz1Gcih0LnZhbHVlKSxsPU90KHQudmFsdWUpLGM9bnVsbCE9PXQudmFsdWU/dC52YWx1ZTpuO2lmKGUpe2lmKHMhPT1lKXJldHVybltuZXcgQ3QodC5rZXksYyxzKyIgc3RvcCBkb21haW4gdHlwZSBtdXN0IG1hdGNoIHByZXZpb3VzIHN0b3AgZG9tYWluIHR5cGUgIitlKV19ZWxzZSBlPXM7aWYoIm51bWJlciIhPT1zJiYic3RyaW5nIiE9PXMmJiJib29sZWFuIiE9PXMpcmV0dXJuW25ldyBDdCh0LmtleSxjLCJzdG9wIGRvbWFpbiB2YWx1ZSBtdXN0IGJlIGEgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4iKV07aWYoIm51bWJlciIhPT1zJiYiY2F0ZWdvcmljYWwiIT09YSl7dmFyIHU9Im51bWJlciBleHBlY3RlZCwgIitzKyIgZm91bmQiO3JldHVybiB6cihpKSYmdm9pZCAwPT09YSYmKHUrPSdcbklmIHlvdSBpbnRlbmRlZCB0byB1c2UgYSBjYXRlZ29yaWNhbCBmdW5jdGlvbiwgc3BlY2lmeSBgInR5cGUiOiAiY2F0ZWdvcmljYWwiYC4nKSxbbmV3IEN0KHQua2V5LGMsdSldfXJldHVybiJjYXRlZ29yaWNhbCIhPT1hfHwibnVtYmVyIiE9PXN8fGlzRmluaXRlKGwpJiZNYXRoLmZsb29yKGwpPT09bD8iY2F0ZWdvcmljYWwiIT09YSYmIm51bWJlciI9PT1zJiZ2b2lkIDAhPT1yJiZsPHI/W25ldyBDdCh0LmtleSxjLCJzdG9wIGRvbWFpbiB2YWx1ZXMgbXVzdCBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyIildOihyPWwsImNhdGVnb3JpY2FsIj09PWEmJmwgaW4gbz9bbmV3IEN0KHQua2V5LGMsInN0b3AgZG9tYWluIHZhbHVlcyBtdXN0IGJlIHVuaXF1ZSIpXToob1tsXT0hMCxbXSkpOltuZXcgQ3QodC5rZXksYywiaW50ZWdlciBleHBlY3RlZCwgZm91bmQgIitsKV19fWZ1bmN0aW9uIHJuKHQpe3ZhciBlPSgicHJvcGVydHkiPT09dC5leHByZXNzaW9uQ29udGV4dD9KcjpXcikoenQodC52YWx1ZSksdC52YWx1ZVNwZWMpO2lmKCJlcnJvciI9PT1lLnJlc3VsdClyZXR1cm4gZS52YWx1ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQ3QoIiIrdC5rZXkrZS5rZXksdC52YWx1ZSxlLm1lc3NhZ2UpfSkpO3ZhciByPWUudmFsdWUuZXhwcmVzc2lvbnx8ZS52YWx1ZS5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb247aWYoInByb3BlcnR5Ij09PXQuZXhwcmVzc2lvbkNvbnRleHQmJiJ0ZXh0LWZvbnQiPT09dC5wcm9wZXJ0eUtleSYmIXIub3V0cHV0RGVmaW5lZCgpKXJldHVybltuZXcgQ3QodC5rZXksdC52YWx1ZSwnSW52YWxpZCBkYXRhIGV4cHJlc3Npb24gZm9yICInK3QucHJvcGVydHlLZXkrJyIuIE91dHB1dCB2YWx1ZXMgbXVzdCBiZSBjb250YWluZWQgYXMgbGl0ZXJhbHMgd2l0aGluIHRoZSBleHByZXNzaW9uLicpXTtpZigicHJvcGVydHkiPT09dC5leHByZXNzaW9uQ29udGV4dCYmImxheW91dCI9PT10LnByb3BlcnR5VHlwZSYmIUJlKHIpKXJldHVybltuZXcgQ3QodC5rZXksdC52YWx1ZSwnImZlYXR1cmUtc3RhdGUiIGRhdGEgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBsYXlvdXQgcHJvcGVydGllcy4nKV07aWYoImZpbHRlciI9PT10LmV4cHJlc3Npb25Db250ZXh0JiYhQmUocikpcmV0dXJuW25ldyBDdCh0LmtleSx0LnZhbHVlLCciZmVhdHVyZS1zdGF0ZSIgZGF0YSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGZpbHRlcnMuJyldO2lmKHQuZXhwcmVzc2lvbkNvbnRleHQmJjA9PT10LmV4cHJlc3Npb25Db250ZXh0LmluZGV4T2YoImNsdXN0ZXIiKSl7aWYoIU5lKHIsWyJ6b29tIiwiZmVhdHVyZS1zdGF0ZSJdKSlyZXR1cm5bbmV3IEN0KHQua2V5LHQudmFsdWUsJyJ6b29tIiBhbmQgImZlYXR1cmUtc3RhdGUiIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggY2x1c3RlciBwcm9wZXJ0aWVzLicpXTtpZigiY2x1c3Rlci1pbml0aWFsIj09PXQuZXhwcmVzc2lvbkNvbnRleHQmJiFGZShyKSlyZXR1cm5bbmV3IEN0KHQua2V5LHQudmFsdWUsIkZlYXR1cmUgZGF0YSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGluaXRpYWwgZXhwcmVzc2lvbiBwYXJ0IG9mIGNsdXN0ZXIgcHJvcGVydGllcy4iKV19cmV0dXJuW119ZnVuY3Rpb24gbm4odCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWMsaT1bXTtyZXR1cm4gQXJyYXkuaXNBcnJheShuLnZhbHVlcyk/LTE9PT1uLnZhbHVlcy5pbmRleE9mKE90KHIpKSYmaS5wdXNoKG5ldyBDdChlLHIsImV4cGVjdGVkIG9uZSBvZiBbIituLnZhbHVlcy5qb2luKCIsICIpKyJdLCAiK0pTT04uc3RyaW5naWZ5KHIpKyIgZm91bmQiKSk6LTE9PT1PYmplY3Qua2V5cyhuLnZhbHVlcykuaW5kZXhPZihPdChyKSkmJmkucHVzaChuZXcgQ3QoZSxyLCJleHBlY3RlZCBvbmUgb2YgWyIrT2JqZWN0LmtleXMobi52YWx1ZXMpLmpvaW4oIiwgIikrIl0sICIrSlNPTi5zdHJpbmdpZnkocikrIiBmb3VuZCIpKSxpfWZ1bmN0aW9uIGFuKHQpe2lmKCEwPT09dHx8ITE9PT10KXJldHVybiEwO2lmKCFBcnJheS5pc0FycmF5KHQpfHwwPT09dC5sZW5ndGgpcmV0dXJuITE7c3dpdGNoKHRbMF0pe2Nhc2UiaGFzIjpyZXR1cm4gdC5sZW5ndGg+PTImJiIkaWQiIT09dFsxXSYmIiR0eXBlIiE9PXRbMV07Y2FzZSJpbiI6cmV0dXJuIHQubGVuZ3RoPj0zJiYoInN0cmluZyIhPXR5cGVvZiB0WzFdfHxBcnJheS5pc0FycmF5KHRbMl0pKTtjYXNlIiFpbiI6Y2FzZSIhaGFzIjpjYXNlIm5vbmUiOnJldHVybiExO2Nhc2UiPT0iOmNhc2UiIT0iOmNhc2UiPiI6Y2FzZSI+PSI6Y2FzZSI8IjpjYXNlIjw9IjpyZXR1cm4gMyE9PXQubGVuZ3RofHxBcnJheS5pc0FycmF5KHRbMV0pfHxBcnJheS5pc0FycmF5KHRbMl0pO2Nhc2UiYW55IjpjYXNlImFsbCI6Zm9yKHZhciBlPTAscj10LnNsaWNlKDEpO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTtpZighYW4obikmJiJib29sZWFuIiE9dHlwZW9mIG4pcmV0dXJuITF9cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMH19S3IuZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBLcih0Ll9wYXJhbWV0ZXJzLHQuX3NwZWNpZmljYXRpb24pfSxLci5zZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJue19wYXJhbWV0ZXJzOnQuX3BhcmFtZXRlcnMsX3NwZWNpZmljYXRpb246dC5fc3BlY2lmaWNhdGlvbn19O3ZhciBvbj17dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSx0cmFuc2l0aW9uOiExLCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4iLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX19O2Z1bmN0aW9uIHNuKHQpe2lmKG51bGw9PXQpcmV0dXJue2ZpbHRlcjpmdW5jdGlvbigpe3JldHVybiEwfSxuZWVkR2VvbWV0cnk6ITF9O2FuKHQpfHwodD1jbih0KSk7dmFyIGU9V3IodCxvbik7aWYoImVycm9yIj09PWUucmVzdWx0KXRocm93IG5ldyBFcnJvcihlLnZhbHVlLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5KyI6ICIrdC5tZXNzYWdlfSkpLmpvaW4oIiwgIikpO3JldHVybntmaWx0ZXI6ZnVuY3Rpb24odCxyLG4pe3JldHVybiBlLnZhbHVlLmV2YWx1YXRlKHQscix7fSxuKX0sbmVlZEdlb21ldHJ5OmZ1bmN0aW9uIHQoZSl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuITE7aWYoIndpdGhpbiI9PT1lWzBdKXJldHVybiEwO2Zvcih2YXIgcj0xO3I8ZS5sZW5ndGg7cisrKWlmKHQoZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9KHQpfX1mdW5jdGlvbiBsbih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6MH1mdW5jdGlvbiBjbih0KXtpZighdClyZXR1cm4hMDt2YXIgZSxyPXRbMF07cmV0dXJuIHQubGVuZ3RoPD0xPyJhbnkiIT09cjoiPT0iPT09cj91bih0WzFdLHRbMl0sIj09Iik6IiE9Ij09PXI/cG4odW4odFsxXSx0WzJdLCI9PSIpKToiPCI9PT1yfHwiPiI9PT1yfHwiPD0iPT09cnx8Ij49Ij09PXI/dW4odFsxXSx0WzJdLHIpOiJhbnkiPT09cj8oZT10LnNsaWNlKDEpLFsiYW55Il0uY29uY2F0KGUubWFwKGNuKSkpOiJhbGwiPT09cj9bImFsbCJdLmNvbmNhdCh0LnNsaWNlKDEpLm1hcChjbikpOiJub25lIj09PXI/WyJhbGwiXS5jb25jYXQodC5zbGljZSgxKS5tYXAoY24pLm1hcChwbikpOiJpbiI9PT1yP2ZuKHRbMV0sdC5zbGljZSgyKSk6IiFpbiI9PT1yP3BuKGZuKHRbMV0sdC5zbGljZSgyKSkpOiJoYXMiPT09cj9obih0WzFdKToiIWhhcyI9PT1yP3BuKGhuKHRbMV0pKToid2l0aGluIiE9PXJ8fHR9ZnVuY3Rpb24gdW4odCxlLHIpe3N3aXRjaCh0KXtjYXNlIiR0eXBlIjpyZXR1cm5bImZpbHRlci10eXBlLSIrcixlXTtjYXNlIiRpZCI6cmV0dXJuWyJmaWx0ZXItaWQtIityLGVdO2RlZmF1bHQ6cmV0dXJuWyJmaWx0ZXItIityLHQsZV19fWZ1bmN0aW9uIGZuKHQsZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiExO3N3aXRjaCh0KXtjYXNlIiR0eXBlIjpyZXR1cm5bImZpbHRlci10eXBlLWluIixbImxpdGVyYWwiLGVdXTtjYXNlIiRpZCI6cmV0dXJuWyJmaWx0ZXItaWQtaW4iLFsibGl0ZXJhbCIsZV1dO2RlZmF1bHQ6cmV0dXJuIGUubGVuZ3RoPjIwMCYmIWUuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0IT10eXBlb2YgZVswXX0pKT9bImZpbHRlci1pbi1sYXJnZSIsdCxbImxpdGVyYWwiLGUuc29ydChsbildXTpbImZpbHRlci1pbi1zbWFsbCIsdCxbImxpdGVyYWwiLGVdXX19ZnVuY3Rpb24gaG4odCl7c3dpdGNoKHQpe2Nhc2UiJHR5cGUiOnJldHVybiEwO2Nhc2UiJGlkIjpyZXR1cm5bImZpbHRlci1oYXMtaWQiXTtkZWZhdWx0OnJldHVyblsiZmlsdGVyLWhhcyIsdF19fWZ1bmN0aW9uIHBuKHQpe3JldHVyblsiISIsdF19ZnVuY3Rpb24gZG4odCl7cmV0dXJuIGFuKHp0KHQudmFsdWUpKT9ybihJdCh7fSx0LHtleHByZXNzaW9uQ29udGV4dDoiZmlsdGVyIix2YWx1ZVNwZWM6e3ZhbHVlOiJib29sZWFuIn19KSk6ZnVuY3Rpb24gdChlKXt2YXIgcj1lLnZhbHVlLG49ZS5rZXk7aWYoImFycmF5IiE9PUZyKHIpKXJldHVybltuZXcgQ3QobixyLCJhcnJheSBleHBlY3RlZCwgIitGcihyKSsiIGZvdW5kIildO3ZhciBpLGE9ZS5zdHlsZVNwZWMsbz1bXTtpZihyLmxlbmd0aDwxKXJldHVybltuZXcgQ3QobixyLCJmaWx0ZXIgYXJyYXkgbXVzdCBoYXZlIGF0IGxlYXN0IDEgZWxlbWVudCIpXTtzd2l0Y2gobz1vLmNvbmNhdChubih7a2V5Om4rIlswXSIsdmFsdWU6clswXSx2YWx1ZVNwZWM6YS5maWx0ZXJfb3BlcmF0b3Isc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSksT3QoclswXSkpe2Nhc2UiPCI6Y2FzZSI8PSI6Y2FzZSI+IjpjYXNlIj49IjpyLmxlbmd0aD49MiYmIiR0eXBlIj09PU90KHJbMV0pJiZvLnB1c2gobmV3IEN0KG4sciwnIiR0eXBlIiBjYW5ub3QgYmUgdXNlIHdpdGggb3BlcmF0b3IgIicrclswXSsnIicpKTtjYXNlIj09IjpjYXNlIiE9IjozIT09ci5sZW5ndGgmJm8ucHVzaChuZXcgQ3QobixyLCdmaWx0ZXIgYXJyYXkgZm9yIG9wZXJhdG9yICInK3JbMF0rJyIgbXVzdCBoYXZlIDMgZWxlbWVudHMnKSk7Y2FzZSJpbiI6Y2FzZSIhaW4iOnIubGVuZ3RoPj0yJiYic3RyaW5nIiE9PShpPUZyKHJbMV0pKSYmby5wdXNoKG5ldyBDdChuKyJbMV0iLHJbMV0sInN0cmluZyBleHBlY3RlZCwgIitpKyIgZm91bmQiKSk7Zm9yKHZhciBzPTI7czxyLmxlbmd0aDtzKyspaT1GcihyW3NdKSwiJHR5cGUiPT09T3QoclsxXSk/bz1vLmNvbmNhdChubih7a2V5Om4rIlsiK3MrIl0iLHZhbHVlOnJbc10sdmFsdWVTcGVjOmEuZ2VvbWV0cnlfdHlwZSxzdHlsZTplLnN0eWxlLHN0eWxlU3BlYzplLnN0eWxlU3BlY30pKToic3RyaW5nIiE9PWkmJiJudW1iZXIiIT09aSYmImJvb2xlYW4iIT09aSYmby5wdXNoKG5ldyBDdChuKyJbIitzKyJdIixyW3NdLCJzdHJpbmcsIG51bWJlciwgb3IgYm9vbGVhbiBleHBlY3RlZCwgIitpKyIgZm91bmQiKSk7YnJlYWs7Y2FzZSJhbnkiOmNhc2UiYWxsIjpjYXNlIm5vbmUiOmZvcih2YXIgbD0xO2w8ci5sZW5ndGg7bCsrKW89by5jb25jYXQodCh7a2V5Om4rIlsiK2wrIl0iLHZhbHVlOnJbbF0sc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSk7YnJlYWs7Y2FzZSJoYXMiOmNhc2UiIWhhcyI6aT1GcihyWzFdKSwyIT09ci5sZW5ndGg/by5wdXNoKG5ldyBDdChuLHIsJ2ZpbHRlciBhcnJheSBmb3IgIicrclswXSsnIiBvcGVyYXRvciBtdXN0IGhhdmUgMiBlbGVtZW50cycpKToic3RyaW5nIiE9PWkmJm8ucHVzaChuZXcgQ3QobisiWzFdIixyWzFdLCJzdHJpbmcgZXhwZWN0ZWQsICIraSsiIGZvdW5kIikpO2JyZWFrO2Nhc2Uid2l0aGluIjppPUZyKHJbMV0pLDIhPT1yLmxlbmd0aD9vLnB1c2gobmV3IEN0KG4sciwnZmlsdGVyIGFycmF5IGZvciAiJytyWzBdKyciIG9wZXJhdG9yIG11c3QgaGF2ZSAyIGVsZW1lbnRzJykpOiJvYmplY3QiIT09aSYmby5wdXNoKG5ldyBDdChuKyJbMV0iLHJbMV0sIm9iamVjdCBleHBlY3RlZCwgIitpKyIgZm91bmQiKSl9cmV0dXJuIG99KHQpfWZ1bmN0aW9uIG1uKHQsZSl7dmFyIHI9dC5rZXksbj10LnN0eWxlLGk9dC5zdHlsZVNwZWMsYT10LnZhbHVlLG89dC5vYmplY3RLZXkscz1pW2UrIl8iK3QubGF5ZXJUeXBlXTtpZighcylyZXR1cm5bXTt2YXIgbD1vLm1hdGNoKC9eKC4qKS10cmFuc2l0aW9uJC8pO2lmKCJwYWludCI9PT1lJiZsJiZzW2xbMV1dJiZzW2xbMV1dLnRyYW5zaXRpb24pcmV0dXJuIGtuKHtrZXk6cix2YWx1ZTphLHZhbHVlU3BlYzppLnRyYW5zaXRpb24sc3R5bGU6bixzdHlsZVNwZWM6aX0pO3ZhciBjLHU9dC52YWx1ZVNwZWN8fHNbb107aWYoIXUpcmV0dXJuW25ldyBDdChyLGEsJ3Vua25vd24gcHJvcGVydHkgIicrbysnIicpXTtpZigic3RyaW5nIj09PUZyKGEpJiZ6cih1KSYmIXUudG9rZW5zJiYoYz0vXnsoW159XSspfSQvLmV4ZWMoYSkpKXJldHVybltuZXcgQ3QocixhLCciJytvKyciIGRvZXMgbm90IHN1cHBvcnQgaW50ZXJwb2xhdGlvbiBzeW50YXhcblVzZSBhbiBpZGVudGl0eSBwcm9wZXJ0eSBmdW5jdGlvbiBpbnN0ZWFkOiBgeyAidHlwZSI6ICJpZGVudGl0eSIsICJwcm9wZXJ0eSI6ICcrSlNPTi5zdHJpbmdpZnkoY1sxXSkrIiB9YC4iKV07dmFyIGY9W107cmV0dXJuInN5bWJvbCI9PT10LmxheWVyVHlwZSYmKCJ0ZXh0LWZpZWxkIj09PW8mJm4mJiFuLmdseXBocyYmZi5wdXNoKG5ldyBDdChyLGEsJ3VzZSBvZiAidGV4dC1maWVsZCIgcmVxdWlyZXMgYSBzdHlsZSAiZ2x5cGhzIiBwcm9wZXJ0eScpKSwidGV4dC1mb250Ij09PW8mJkJyKHp0KGEpKSYmImlkZW50aXR5Ij09PU90KGEudHlwZSkmJmYucHVzaChuZXcgQ3QocixhLCcidGV4dC1mb250IiBkb2VzIG5vdCBzdXBwb3J0IGlkZW50aXR5IGZ1bmN0aW9ucycpKSksZi5jb25jYXQoa24oe2tleTp0LmtleSx2YWx1ZTphLHZhbHVlU3BlYzp1LHN0eWxlOm4sc3R5bGVTcGVjOmksZXhwcmVzc2lvbkNvbnRleHQ6InByb3BlcnR5Iixwcm9wZXJ0eVR5cGU6ZSxwcm9wZXJ0eUtleTpvfSkpfWZ1bmN0aW9uIGduKHQpe3JldHVybiBtbih0LCJwYWludCIpfWZ1bmN0aW9uIHZuKHQpe3JldHVybiBtbih0LCJsYXlvdXQiKX1mdW5jdGlvbiB5bih0KXt2YXIgZT1bXSxyPXQudmFsdWUsbj10LmtleSxpPXQuc3R5bGUsYT10LnN0eWxlU3BlYztyLnR5cGV8fHIucmVmfHxlLnB1c2gobmV3IEN0KG4sciwnZWl0aGVyICJ0eXBlIiBvciAicmVmIiBpcyByZXF1aXJlZCcpKTt2YXIgbyxzPU90KHIudHlwZSksbD1PdChyLnJlZik7aWYoci5pZClmb3IodmFyIGM9T3Qoci5pZCksdT0wO3U8dC5hcnJheUluZGV4O3UrKyl7dmFyIGY9aS5sYXllcnNbdV07T3QoZi5pZCk9PT1jJiZlLnB1c2gobmV3IEN0KG4sci5pZCwnZHVwbGljYXRlIGxheWVyIGlkICInK3IuaWQrJyIsIHByZXZpb3VzbHkgdXNlZCBhdCBsaW5lICcrZi5pZC5fX2xpbmVfXykpfWlmKCJyZWYiaW4gcilbInR5cGUiLCJzb3VyY2UiLCJzb3VyY2UtbGF5ZXIiLCJmaWx0ZXIiLCJsYXlvdXQiXS5mb3JFYWNoKChmdW5jdGlvbih0KXt0IGluIHImJmUucHVzaChuZXcgQ3QobixyW3RdLCciJyt0KyciIGlzIHByb2hpYml0ZWQgZm9yIHJlZiBsYXllcnMnKSl9KSksaS5sYXllcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7T3QodC5pZCk9PT1sJiYobz10KX0pKSxvP28ucmVmP2UucHVzaChuZXcgQ3QobixyLnJlZiwicmVmIGNhbm5vdCByZWZlcmVuY2UgYW5vdGhlciByZWYgbGF5ZXIiKSk6cz1PdChvLnR5cGUpOmUucHVzaChuZXcgQ3QobixyLnJlZiwncmVmIGxheWVyICInK2wrJyIgbm90IGZvdW5kJykpO2Vsc2UgaWYoImJhY2tncm91bmQiIT09cylpZihyLnNvdXJjZSl7dmFyIGg9aS5zb3VyY2VzJiZpLnNvdXJjZXNbci5zb3VyY2VdLHA9aCYmT3QoaC50eXBlKTtoPyJ2ZWN0b3IiPT09cCYmInJhc3RlciI9PT1zP2UucHVzaChuZXcgQ3QobixyLnNvdXJjZSwnbGF5ZXIgIicrci5pZCsnIiByZXF1aXJlcyBhIHJhc3RlciBzb3VyY2UnKSk6InJhc3RlciI9PT1wJiYicmFzdGVyIiE9PXM/ZS5wdXNoKG5ldyBDdChuLHIuc291cmNlLCdsYXllciAiJytyLmlkKyciIHJlcXVpcmVzIGEgdmVjdG9yIHNvdXJjZScpKToidmVjdG9yIiE9PXB8fHJbInNvdXJjZS1sYXllciJdPyJyYXN0ZXItZGVtIj09PXAmJiJoaWxsc2hhZGUiIT09cz9lLnB1c2gobmV3IEN0KG4sci5zb3VyY2UsInJhc3Rlci1kZW0gc291cmNlIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBsYXllciB0eXBlICdoaWxsc2hhZGUnLiIpKToibGluZSIhPT1zfHwhci5wYWludHx8IXIucGFpbnRbImxpbmUtZ3JhZGllbnQiXXx8Imdlb2pzb24iPT09cCYmaC5saW5lTWV0cmljc3x8ZS5wdXNoKG5ldyBDdChuLHIsJ2xheWVyICInK3IuaWQrJyIgc3BlY2lmaWVzIGEgbGluZS1ncmFkaWVudCwgd2hpY2ggcmVxdWlyZXMgYSBHZW9KU09OIHNvdXJjZSB3aXRoIGBsaW5lTWV0cmljc2AgZW5hYmxlZC4nKSk6ZS5wdXNoKG5ldyBDdChuLHIsJ2xheWVyICInK3IuaWQrJyIgbXVzdCBzcGVjaWZ5IGEgInNvdXJjZS1sYXllciInKSk6ZS5wdXNoKG5ldyBDdChuLHIuc291cmNlLCdzb3VyY2UgIicrci5zb3VyY2UrJyIgbm90IGZvdW5kJykpfWVsc2UgZS5wdXNoKG5ldyBDdChuLHIsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgInNvdXJjZSInKSk7cmV0dXJuIGU9ZS5jb25jYXQoUXIoe2tleTpuLHZhbHVlOnIsdmFsdWVTcGVjOmEubGF5ZXIsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6eyIqIjpmdW5jdGlvbigpe3JldHVybltdfSx0eXBlOmZ1bmN0aW9uKCl7cmV0dXJuIGtuKHtrZXk6bisiLnR5cGUiLHZhbHVlOnIudHlwZSx2YWx1ZVNwZWM6YS5sYXllci50eXBlLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdDpyLG9iamVjdEtleToidHlwZSJ9KX0sZmlsdGVyOmRuLGxheW91dDpmdW5jdGlvbih0KXtyZXR1cm4gUXIoe2xheWVyOnIsa2V5OnQua2V5LHZhbHVlOnQudmFsdWUsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6eyIqIjpmdW5jdGlvbih0KXtyZXR1cm4gdm4oSXQoe2xheWVyVHlwZTpzfSx0KSl9fX0pfSxwYWludDpmdW5jdGlvbih0KXtyZXR1cm4gUXIoe2xheWVyOnIsa2V5OnQua2V5LHZhbHVlOnQudmFsdWUsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6eyIqIjpmdW5jdGlvbih0KXtyZXR1cm4gZ24oSXQoe2xheWVyVHlwZTpzfSx0KSl9fX0pfX19KSl9ZnVuY3Rpb24geG4odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49RnIoZSk7cmV0dXJuInN0cmluZyIhPT1uP1tuZXcgQ3QocixlLCJzdHJpbmcgZXhwZWN0ZWQsICIrbisiIGZvdW5kIildOltdfXZhciBibj17cHJvbW90ZUlkOmZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZTtpZigic3RyaW5nIj09PUZyKHIpKXJldHVybiB4bih7a2V5OmUsdmFsdWU6cn0pO3ZhciBuPVtdO2Zvcih2YXIgaSBpbiByKW4ucHVzaC5hcHBseShuLHhuKHtrZXk6ZSsiLiIraSx2YWx1ZTpyW2ldfSkpO3JldHVybiBufX07ZnVuY3Rpb24gX24odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49dC5zdHlsZVNwZWMsaT10LnN0eWxlO2lmKCFlLnR5cGUpcmV0dXJuW25ldyBDdChyLGUsJyJ0eXBlIiBpcyByZXF1aXJlZCcpXTt2YXIgYSxvPU90KGUudHlwZSk7c3dpdGNoKG8pe2Nhc2UidmVjdG9yIjpjYXNlInJhc3RlciI6Y2FzZSJyYXN0ZXItZGVtIjpyZXR1cm4gYT1Rcih7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6blsic291cmNlXyIrby5yZXBsYWNlKCItIiwiXyIpXSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzpuLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOmJufSk7Y2FzZSJnZW9qc29uIjppZihhPVFyKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpuLnNvdXJjZV9nZW9qc29uLHN0eWxlOmksc3R5bGVTcGVjOm4sb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6Ym59KSxlLmNsdXN0ZXIpZm9yKHZhciBzIGluIGUuY2x1c3RlclByb3BlcnRpZXMpe3ZhciBsPWUuY2x1c3RlclByb3BlcnRpZXNbc10sYz1sWzBdLHU9bFsxXSxmPSJzdHJpbmciPT10eXBlb2YgYz9bYyxbImFjY3VtdWxhdGVkIl0sWyJnZXQiLHNdXTpjO2EucHVzaC5hcHBseShhLHJuKHtrZXk6cisiLiIrcysiLm1hcCIsdmFsdWU6dSxleHByZXNzaW9uQ29udGV4dDoiY2x1c3Rlci1tYXAifSkpLGEucHVzaC5hcHBseShhLHJuKHtrZXk6cisiLiIrcysiLnJlZHVjZSIsdmFsdWU6ZixleHByZXNzaW9uQ29udGV4dDoiY2x1c3Rlci1yZWR1Y2UifSkpfXJldHVybiBhO2Nhc2UidmlkZW8iOnJldHVybiBRcih7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6bi5zb3VyY2VfdmlkZW8sc3R5bGU6aSxzdHlsZVNwZWM6bn0pO2Nhc2UiaW1hZ2UiOnJldHVybiBRcih7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6bi5zb3VyY2VfaW1hZ2Usc3R5bGU6aSxzdHlsZVNwZWM6bn0pO2Nhc2UiY2FudmFzIjpyZXR1cm5bbmV3IEN0KHIsbnVsbCwiUGxlYXNlIHVzZSBydW50aW1lIEFQSXMgdG8gYWRkIGNhbnZhcyBzb3VyY2VzLCByYXRoZXIgdGhhbiBpbmNsdWRpbmcgdGhlbSBpbiBzdHlsZXNoZWV0cy4iLCJzb3VyY2UuY2FudmFzIildO2RlZmF1bHQ6cmV0dXJuIG5uKHtrZXk6cisiLnR5cGUiLHZhbHVlOmUudHlwZSx2YWx1ZVNwZWM6e3ZhbHVlczpbInZlY3RvciIsInJhc3RlciIsInJhc3Rlci1kZW0iLCJnZW9qc29uIiwidmlkZW8iLCJpbWFnZSJdfSxzdHlsZTppLHN0eWxlU3BlYzpufSl9fWZ1bmN0aW9uIHduKHQpe3ZhciBlPXQudmFsdWUscj10LnN0eWxlU3BlYyxuPXIubGlnaHQsaT10LnN0eWxlLGE9W10sbz1GcihlKTtpZih2b2lkIDA9PT1lKXJldHVybiBhO2lmKCJvYmplY3QiIT09bylyZXR1cm4gYT1hLmNvbmNhdChbbmV3IEN0KCJsaWdodCIsZSwib2JqZWN0IGV4cGVjdGVkLCAiK28rIiBmb3VuZCIpXSk7Zm9yKHZhciBzIGluIGUpe3ZhciBsPXMubWF0Y2goL14oLiopLXRyYW5zaXRpb24kLyk7YT1sJiZuW2xbMV1dJiZuW2xbMV1dLnRyYW5zaXRpb24/YS5jb25jYXQoa24oe2tleTpzLHZhbHVlOmVbc10sdmFsdWVTcGVjOnIudHJhbnNpdGlvbixzdHlsZTppLHN0eWxlU3BlYzpyfSkpOm5bc10/YS5jb25jYXQoa24oe2tleTpzLHZhbHVlOmVbc10sdmFsdWVTcGVjOm5bc10sc3R5bGU6aSxzdHlsZVNwZWM6cn0pKTphLmNvbmNhdChbbmV3IEN0KHMsZVtzXSwndW5rbm93biBwcm9wZXJ0eSAiJytzKyciJyldKX1yZXR1cm4gYX12YXIgVG49eyIqIjpmdW5jdGlvbigpe3JldHVybltdfSxhcnJheTokcixib29sZWFuOmZ1bmN0aW9uKHQpe3ZhciBlPXQudmFsdWUscj10LmtleSxuPUZyKGUpO3JldHVybiJib29sZWFuIiE9PW4/W25ldyBDdChyLGUsImJvb2xlYW4gZXhwZWN0ZWQsICIrbisiIGZvdW5kIildOltdfSxudW1iZXI6dG4sY29sb3I6ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49RnIocik7cmV0dXJuInN0cmluZyIhPT1uP1tuZXcgQ3QoZSxyLCJjb2xvciBleHBlY3RlZCwgIituKyIgZm91bmQiKV06bnVsbD09PSR0KHIpP1tuZXcgQ3QoZSxyLCdjb2xvciBleHBlY3RlZCwgIicrcisnIiBmb3VuZCcpXTpbXX0sY29uc3RhbnRzOlB0LGVudW06bm4sZmlsdGVyOmRuLGZ1bmN0aW9uOmVuLGxheWVyOnluLG9iamVjdDpRcixzb3VyY2U6X24sbGlnaHQ6d24sc3RyaW5nOnhuLGZvcm1hdHRlZDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXhuKHQpLmxlbmd0aD9bXTpybih0KX0scmVzb2x2ZWRJbWFnZTpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXhuKHQpLmxlbmd0aD9bXTpybih0KX19O2Z1bmN0aW9uIGtuKHQpe3ZhciBlPXQudmFsdWUscj10LnZhbHVlU3BlYyxuPXQuc3R5bGVTcGVjO3JldHVybiByLmV4cHJlc3Npb24mJkJyKE90KGUpKT9lbih0KTpyLmV4cHJlc3Npb24mJllyKHp0KGUpKT9ybih0KTpyLnR5cGUmJlRuW3IudHlwZV0/VG5bci50eXBlXSh0KTpRcihJdCh7fSx0LHt2YWx1ZVNwZWM6ci50eXBlP25bci50eXBlXTpyfSkpfWZ1bmN0aW9uIEFuKHQpe3ZhciBlPXQudmFsdWUscj10LmtleSxuPXhuKHQpO3JldHVybiBuLmxlbmd0aHx8KC0xPT09ZS5pbmRleE9mKCJ7Zm9udHN0YWNrfSIpJiZuLnB1c2gobmV3IEN0KHIsZSwnImdseXBocyIgdXJsIG11c3QgaW5jbHVkZSBhICJ7Zm9udHN0YWNrfSIgdG9rZW4nKSksLTE9PT1lLmluZGV4T2YoIntyYW5nZX0iKSYmbi5wdXNoKG5ldyBDdChyLGUsJyJnbHlwaHMiIHVybCBtdXN0IGluY2x1ZGUgYSAie3JhbmdlfSIgdG9rZW4nKSkpLG59ZnVuY3Rpb24gTW4odCxlKXt2b2lkIDA9PT1lJiYoZT1MdCk7dmFyIHI9W107cmV0dXJuIHI9ci5jb25jYXQoa24oe2tleToiIix2YWx1ZTp0LHZhbHVlU3BlYzplLiRyb290LHN0eWxlU3BlYzplLHN0eWxlOnQsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e2dseXBoczpBbiwiKiI6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSkpLHQuY29uc3RhbnRzJiYocj1yLmNvbmNhdChQdCh7a2V5OiJjb25zdGFudHMiLHZhbHVlOnQuY29uc3RhbnRzLHN0eWxlOnQsc3R5bGVTcGVjOmV9KSkpLFNuKHIpfWZ1bmN0aW9uIFNuKHQpe3JldHVybltdLmNvbmNhdCh0KS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LmxpbmUtZS5saW5lfSkpfWZ1bmN0aW9uIEVuKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4gU24odC5hcHBseSh0aGlzLGUpKX19TW4uc291cmNlPUVuKF9uKSxNbi5saWdodD1Fbih3biksTW4ubGF5ZXI9RW4oeW4pLE1uLmZpbHRlcj1FbihkbiksTW4ucGFpbnRQcm9wZXJ0eT1FbihnbiksTW4ubGF5b3V0UHJvcGVydHk9RW4odm4pO3ZhciBMbj1NbixDbj1Mbi5saWdodCxQbj1Mbi5wYWludFByb3BlcnR5LEluPUxuLmxheW91dFByb3BlcnR5O2Z1bmN0aW9uIE9uKHQsZSl7dmFyIHI9ITE7aWYoZSYmZS5sZW5ndGgpZm9yKHZhciBuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTt0LmZpcmUobmV3IFN0KG5ldyBFcnJvcihhLm1lc3NhZ2UpKSkscj0hMH1yZXR1cm4gcn12YXIgem49RG47ZnVuY3Rpb24gRG4odCxlLHIpe3ZhciBuPXRoaXMuY2VsbHM9W107aWYodCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXt0aGlzLmFycmF5QnVmZmVyPXQ7dmFyIGk9bmV3IEludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7dD1pWzBdLGU9aVsxXSxyPWlbMl0sdGhpcy5kPWUrMipyO2Zvcih2YXIgYT0wO2E8dGhpcy5kKnRoaXMuZDthKyspe3ZhciBvPWlbMythXSxzPWlbMythKzFdO24ucHVzaChvPT09cz9udWxsOmkuc3ViYXJyYXkobyxzKSl9dmFyIGw9aVszK24ubGVuZ3RoXSxjPWlbMytuLmxlbmd0aCsxXTt0aGlzLmtleXM9aS5zdWJhcnJheShsLGMpLHRoaXMuYmJveGVzPWkuc3ViYXJyYXkoYyksdGhpcy5pbnNlcnQ9dGhpcy5faW5zZXJ0UmVhZG9ubHl9ZWxzZXt0aGlzLmQ9ZSsyKnI7Zm9yKHZhciB1PTA7dTx0aGlzLmQqdGhpcy5kO3UrKyluLnB1c2goW10pO3RoaXMua2V5cz1bXSx0aGlzLmJib3hlcz1bXX10aGlzLm49ZSx0aGlzLmV4dGVudD10LHRoaXMucGFkZGluZz1yLHRoaXMuc2NhbGU9ZS90LHRoaXMudWlkPTA7dmFyIGY9ci9lKnQ7dGhpcy5taW49LWYsdGhpcy5tYXg9dCtmfURuLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLl9mb3JFYWNoQ2VsbChlLHIsbixpLHRoaXMuX2luc2VydENlbGwsdGhpcy51aWQrKyksdGhpcy5rZXlzLnB1c2godCksdGhpcy5iYm94ZXMucHVzaChlKSx0aGlzLmJib3hlcy5wdXNoKHIpLHRoaXMuYmJveGVzLnB1c2gobiksdGhpcy5iYm94ZXMucHVzaChpKX0sRG4ucHJvdG90eXBlLl9pbnNlcnRSZWFkb25seT1mdW5jdGlvbigpe3Rocm93IkNhbm5vdCBpbnNlcnQgaW50byBhIEdyaWRJbmRleCBjcmVhdGVkIGZyb20gYW4gQXJyYXlCdWZmZXIuIn0sRG4ucHJvdG90eXBlLl9pbnNlcnRDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLmNlbGxzW2ldLnB1c2goYSl9LERuLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXRoaXMubWluLG89dGhpcy5tYXg7aWYodDw9YSYmZTw9YSYmbzw9ciYmbzw9biYmIWkpcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMua2V5cyk7dmFyIHM9W107cmV0dXJuIHRoaXMuX2ZvckVhY2hDZWxsKHQsZSxyLG4sdGhpcy5fcXVlcnlDZWxsLHMse30saSksc30sRG4ucHJvdG90eXBlLl9xdWVyeUNlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD10aGlzLmNlbGxzW2ldO2lmKG51bGwhPT1sKWZvcih2YXIgYz10aGlzLmtleXMsdT10aGlzLmJib3hlcyxmPTA7ZjxsLmxlbmd0aDtmKyspe3ZhciBoPWxbZl07aWYodm9pZCAwPT09b1toXSl7dmFyIHA9NCpoOyhzP3ModVtwKzBdLHVbcCsxXSx1W3ArMl0sdVtwKzNdKTp0PD11W3ArMl0mJmU8PXVbcCszXSYmcj49dVtwKzBdJiZuPj11W3ArMV0pPyhvW2hdPSEwLGEucHVzaChjW2hdKSk6b1toXT0hMX19fSxEbi5wcm90b3R5cGUuX2ZvckVhY2hDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7Zm9yKHZhciBsPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZCh0KSxjPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChlKSx1PXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChyKSxmPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChuKSxoPWw7aDw9dTtoKyspZm9yKHZhciBwPWM7cDw9ZjtwKyspe3ZhciBkPXRoaXMuZCpwK2g7aWYoKCFzfHxzKHRoaXMuX2NvbnZlcnRGcm9tQ2VsbENvb3JkKGgpLHRoaXMuX2NvbnZlcnRGcm9tQ2VsbENvb3JkKHApLHRoaXMuX2NvbnZlcnRGcm9tQ2VsbENvb3JkKGgrMSksdGhpcy5fY29udmVydEZyb21DZWxsQ29vcmQocCsxKSkpJiZpLmNhbGwodGhpcyx0LGUscixuLGQsYSxvLHMpKXJldHVybn19LERuLnByb3RvdHlwZS5fY29udmVydEZyb21DZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy5wYWRkaW5nKS90aGlzLnNjYWxlfSxEbi5wcm90b3R5cGUuX2NvbnZlcnRUb0NlbGxDb29yZD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLmQtMSxNYXRoLmZsb29yKHQqdGhpcy5zY2FsZSkrdGhpcy5wYWRkaW5nKSl9LERuLnByb3RvdHlwZS50b0FycmF5QnVmZmVyPWZ1bmN0aW9uKCl7aWYodGhpcy5hcnJheUJ1ZmZlcilyZXR1cm4gdGhpcy5hcnJheUJ1ZmZlcjtmb3IodmFyIHQ9dGhpcy5jZWxscyxlPTMrdGhpcy5jZWxscy5sZW5ndGgrMSsxLHI9MCxuPTA7bjx0aGlzLmNlbGxzLmxlbmd0aDtuKyspcis9dGhpcy5jZWxsc1tuXS5sZW5ndGg7dmFyIGk9bmV3IEludDMyQXJyYXkoZStyK3RoaXMua2V5cy5sZW5ndGgrdGhpcy5iYm94ZXMubGVuZ3RoKTtpWzBdPXRoaXMuZXh0ZW50LGlbMV09dGhpcy5uLGlbMl09dGhpcy5wYWRkaW5nO2Zvcih2YXIgYT1lLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXTtpWzMrb109YSxpLnNldChzLGEpLGErPXMubGVuZ3RofXJldHVybiBpWzMrdC5sZW5ndGhdPWEsaS5zZXQodGhpcy5rZXlzLGEpLGErPXRoaXMua2V5cy5sZW5ndGgsaVszK3QubGVuZ3RoKzFdPWEsaS5zZXQodGhpcy5iYm94ZXMsYSksYSs9dGhpcy5iYm94ZXMubGVuZ3RoLGkuYnVmZmVyfTt2YXIgUm49c2VsZi5JbWFnZURhdGEsRm49c2VsZi5JbWFnZUJpdG1hcCxCbj17fTtmdW5jdGlvbiBObih0LGUscil7dm9pZCAwPT09ciYmKHI9e30pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfY2xhc3NSZWdpc3RyeUtleSIse3ZhbHVlOnQsd3JpdGVhYmxlOiExfSksQm5bdF09e2tsYXNzOmUsb21pdDpyLm9taXR8fFtdLHNoYWxsb3c6ci5zaGFsbG93fHxbXX19Zm9yKHZhciBqbiBpbiBObigiT2JqZWN0IixPYmplY3QpLHpuLnNlcmlhbGl6ZT1mdW5jdGlvbih0LGUpe3ZhciByPXQudG9BcnJheUJ1ZmZlcigpO3JldHVybiBlJiZlLnB1c2gocikse2J1ZmZlcjpyfX0sem4uZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB6bih0LmJ1ZmZlcil9LE5uKCJHcmlkIix6biksTm4oIkNvbG9yIix0ZSksTm4oIkVycm9yIixFcnJvciksTm4oIlJlc29sdmVkSW1hZ2UiLGllKSxObigiU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uIixLciksTm4oIlN0eWxlRXhwcmVzc2lvbiIsR3Ise29taXQ6WyJfZXZhbHVhdG9yIl19KSxObigiWm9vbURlcGVuZGVudEV4cHJlc3Npb24iLFpyKSxObigiWm9vbUNvbnN0YW50RXhwcmVzc2lvbiIsWHIpLE5uKCJDb21wb3VuZEV4cHJlc3Npb24iLHhlLHtvbWl0OlsiX2V2YWx1YXRlIl19KSxTcilTcltqbl0uX2NsYXNzUmVnaXN0cnlLZXl8fE5uKCJFeHByZXNzaW9uXyIram4sU3Jbam5dKTtmdW5jdGlvbiBVbih0KXtyZXR1cm4gdCYmInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmKHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8dC5jb25zdHJ1Y3RvciYmIkFycmF5QnVmZmVyIj09PXQuY29uc3RydWN0b3IubmFtZSl9ZnVuY3Rpb24gVm4odCl7cmV0dXJuIEZuJiZ0IGluc3RhbmNlb2YgRm59ZnVuY3Rpb24gSG4odCxlKXtpZihudWxsPT10fHwiYm9vbGVhbiI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHR8fCJzdHJpbmciPT10eXBlb2YgdHx8dCBpbnN0YW5jZW9mIEJvb2xlYW58fHQgaW5zdGFuY2VvZiBOdW1iZXJ8fHQgaW5zdGFuY2VvZiBTdHJpbmd8fHQgaW5zdGFuY2VvZiBEYXRlfHx0IGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiB0O2lmKFVuKHQpfHxWbih0KSlyZXR1cm4gZSYmZS5wdXNoKHQpLHQ7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpKXt2YXIgcj10O3JldHVybiBlJiZlLnB1c2goci5idWZmZXIpLHJ9aWYodCBpbnN0YW5jZW9mIFJuKXJldHVybiBlJiZlLnB1c2godC5kYXRhLmJ1ZmZlciksdDtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIG49W10saT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07bi5wdXNoKEhuKG8sZSkpfXJldHVybiBufWlmKCJvYmplY3QiPT10eXBlb2YgdCl7dmFyIHM9dC5jb25zdHJ1Y3RvcixsPXMuX2NsYXNzUmVnaXN0cnlLZXk7aWYoIWwpdGhyb3cgbmV3IEVycm9yKCJjYW4ndCBzZXJpYWxpemUgb2JqZWN0IG9mIHVucmVnaXN0ZXJlZCBjbGFzcyIpO3ZhciBjPXMuc2VyaWFsaXplP3Muc2VyaWFsaXplKHQsZSk6e307aWYoIXMuc2VyaWFsaXplKXtmb3IodmFyIHUgaW4gdClpZih0Lmhhc093blByb3BlcnR5KHUpJiYhKEJuW2xdLm9taXQuaW5kZXhPZih1KT49MCkpe3ZhciBmPXRbdV07Y1t1XT1CbltsXS5zaGFsbG93LmluZGV4T2YodSk+PTA/ZjpIbihmLGUpfXQgaW5zdGFuY2VvZiBFcnJvciYmKGMubWVzc2FnZT10Lm1lc3NhZ2UpfWlmKGMuJG5hbWUpdGhyb3cgbmV3IEVycm9yKCIkbmFtZSBwcm9wZXJ0eSBpcyByZXNlcnZlZCBmb3Igd29ya2VyIHNlcmlhbGl6YXRpb24gbG9naWMuIik7cmV0dXJuIk9iamVjdCIhPT1sJiYoYy4kbmFtZT1sKSxjfXRocm93IG5ldyBFcnJvcigiY2FuJ3Qgc2VyaWFsaXplIG9iamVjdCBvZiB0eXBlICIrdHlwZW9mIHQpfWZ1bmN0aW9uIHFuKHQpe2lmKG51bGw9PXR8fCJib29sZWFuIj09dHlwZW9mIHR8fCJudW1iZXIiPT10eXBlb2YgdHx8InN0cmluZyI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgQm9vbGVhbnx8dCBpbnN0YW5jZW9mIE51bWJlcnx8dCBpbnN0YW5jZW9mIFN0cmluZ3x8dCBpbnN0YW5jZW9mIERhdGV8fHQgaW5zdGFuY2VvZiBSZWdFeHB8fFVuKHQpfHxWbih0KXx8QXJyYXlCdWZmZXIuaXNWaWV3KHQpfHx0IGluc3RhbmNlb2YgUm4pcmV0dXJuIHQ7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdC5tYXAocW4pO2lmKCJvYmplY3QiPT10eXBlb2YgdCl7dmFyIGU9dC4kbmFtZXx8Ik9iamVjdCIscj1CbltlXS5rbGFzcztpZighcil0aHJvdyBuZXcgRXJyb3IoImNhbid0IGRlc2VyaWFsaXplIHVucmVnaXN0ZXJlZCBjbGFzcyAiK2UpO2lmKHIuZGVzZXJpYWxpemUpcmV0dXJuIHIuZGVzZXJpYWxpemUodCk7Zm9yKHZhciBuPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpLGk9MCxhPU9iamVjdC5rZXlzKHQpO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTtpZigiJG5hbWUiIT09byl7dmFyIHM9dFtvXTtuW29dPUJuW2VdLnNoYWxsb3cuaW5kZXhPZihvKT49MD9zOnFuKHMpfX1yZXR1cm4gbn10aHJvdyBuZXcgRXJyb3IoImNhbid0IGRlc2VyaWFsaXplIG9iamVjdCBvZiB0eXBlICIrdHlwZW9mIHQpfXZhciBHbj1mdW5jdGlvbigpe3RoaXMuZmlyc3Q9ITB9O0duLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLmZsb29yKHQpO3JldHVybiB0aGlzLmZpcnN0Pyh0aGlzLmZpcnN0PSExLHRoaXMubGFzdEludGVnZXJab29tPXIsdGhpcy5sYXN0SW50ZWdlclpvb21UaW1lPTAsdGhpcy5sYXN0Wm9vbT10LHRoaXMubGFzdEZsb29yWm9vbT1yLCEwKToodGhpcy5sYXN0Rmxvb3Jab29tPnI/KHRoaXMubGFzdEludGVnZXJab29tPXIrMSx0aGlzLmxhc3RJbnRlZ2VyWm9vbVRpbWU9ZSk6dGhpcy5sYXN0Rmxvb3Jab29tPHImJih0aGlzLmxhc3RJbnRlZ2VyWm9vbT1yLHRoaXMubGFzdEludGVnZXJab29tVGltZT1lKSx0IT09dGhpcy5sYXN0Wm9vbSYmKHRoaXMubGFzdFpvb209dCx0aGlzLmxhc3RGbG9vclpvb209ciwhMCkpfTt2YXIgWW49eyJMYXRpbi0xIFN1cHBsZW1lbnQiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjgmJnQ8PTI1NX0sQXJhYmljOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xNTM2JiZ0PD0xNzkxfSwiQXJhYmljIFN1cHBsZW1lbnQiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xODcyJiZ0PD0xOTE5fSwiQXJhYmljIEV4dGVuZGVkLUEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yMjA4JiZ0PD0yMzAzfSwiSGFuZ3VsIEphbW8iOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MzUyJiZ0PD00NjA3fSwiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTUxMjAmJnQ8PTU3NTl9LEtobWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02MDE2JiZ0PD02MTQzfSwiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyBFeHRlbmRlZCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTYzMjAmJnQ8PTYzOTl9LCJHZW5lcmFsIFB1bmN0dWF0aW9uIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49ODE5MiYmdDw9ODMwM30sIkxldHRlcmxpa2UgU3ltYm9scyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTg0NDgmJnQ8PTg1Mjd9LCJOdW1iZXIgRm9ybXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj04NTI4JiZ0PD04NTkxfSwiTWlzY2VsbGFuZW91cyBUZWNobmljYWwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj04OTYwJiZ0PD05MjE1fSwiQ29udHJvbCBQaWN0dXJlcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTkyMTYmJnQ8PTkyNzl9LCJPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvbiI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTkyODAmJnQ8PTkzMTF9LCJFbmNsb3NlZCBBbHBoYW51bWVyaWNzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTMxMiYmdDw9OTQ3MX0sIkdlb21ldHJpYyBTaGFwZXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05NjMyJiZ0PD05NzI3fSwiTWlzY2VsbGFuZW91cyBTeW1ib2xzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTcyOCYmdDw9OTk4M30sIk1pc2NlbGxhbmVvdXMgU3ltYm9scyBhbmQgQXJyb3dzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTEwMDgmJnQ8PTExMjYzfSwiQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMTkwNCYmdDw9MTIwMzF9LCJLYW5neGkgUmFkaWNhbHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjAzMiYmdDw9MTIyNTV9LCJJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIyNzImJnQ8PTEyMjg3fSwiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIyODgmJnQ8PTEyMzUxfSxIaXJhZ2FuYTpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIzNTImJnQ8PTEyNDQ3fSxLYXRha2FuYTpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI0NDgmJnQ8PTEyNTQzfSxCb3BvbW9mbzpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI1NDQmJnQ8PTEyNTkxfSwiSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNTkyJiZ0PD0xMjY4N30sS2FuYnVuOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjY4OCYmdDw9MTI3MDN9LCJCb3BvbW9mbyBFeHRlbmRlZCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNzA0JiZ0PD0xMjczNX0sIkNKSyBTdHJva2VzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI3MzYmJnQ8PTEyNzgzfSwiS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNzg0JiZ0PD0xMjc5OX0sIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjgwMCYmdDw9MTMwNTV9LCJDSksgQ29tcGF0aWJpbGl0eSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEzMDU2JiZ0PD0xMzMxMX0sIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMzMxMiYmdDw9MTk5MDN9LCJZaWppbmcgSGV4YWdyYW0gU3ltYm9scyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE5OTA0JiZ0PD0xOTk2N30sIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xOTk2OCYmdDw9NDA5NTl9LCJZaSBTeWxsYWJsZXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MDk2MCYmdDw9NDIxMjd9LCJZaSBSYWRpY2FscyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQyMTI4JiZ0PD00MjE5MX0sIkhhbmd1bCBKYW1vIEV4dGVuZGVkLUEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MzM2MCYmdDw9NDMzOTF9LCJIYW5ndWwgU3lsbGFibGVzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NDQwMzImJnQ8PTU1MjE1fSwiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQiI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTU1MjE2JiZ0PD01NTI5NX0sIlByaXZhdGUgVXNlIEFyZWEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj01NzM0NCYmdDw9NjM3NDN9LCJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjM3NDQmJnQ8PTY0MjU1fSwiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjQzMzYmJnQ8PTY1MDIzfSwiVmVydGljYWwgRm9ybXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTA0MCYmdDw9NjUwNTV9LCJDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MDcyJiZ0PD02NTEwM30sIlNtYWxsIEZvcm0gVmFyaWFudHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTEwNCYmdDw9NjUxMzV9LCJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUIiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTEzNiYmdDw9NjUyNzl9LCJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MjgwJiZ0PD02NTUxOX19O2Z1bmN0aW9uIFduKHQpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpe2lmKFpuKHJbZV0uY2hhckNvZGVBdCgwKSkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gWG4odCl7cmV0dXJuIVluLkFyYWJpYyh0KSYmKCFZblsiQXJhYmljIFN1cHBsZW1lbnQiXSh0KSYmKCFZblsiQXJhYmljIEV4dGVuZGVkLUEiXSh0KSYmKCFZblsiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BIl0odCkmJiFZblsiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CIl0odCkpKSl9ZnVuY3Rpb24gWm4odCl7cmV0dXJuIDc0Nj09PXR8fDc0Nz09PXR8fCEodDw0MzUyKSYmKCEhWW5bIkJvcG9tb2ZvIEV4dGVuZGVkIl0odCl8fCghIVluLkJvcG9tb2ZvKHQpfHwoISghWW5bIkNKSyBDb21wYXRpYmlsaXR5IEZvcm1zIl0odCl8fHQ+PTY1MDk3JiZ0PD02NTEwMyl8fCghIVluWyJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIl0odCl8fCghIVluWyJDSksgQ29tcGF0aWJpbGl0eSJdKHQpfHwoISFZblsiQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQiXSh0KXx8KCEhWW5bIkNKSyBTdHJva2VzIl0odCl8fCghKCFZblsiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIl0odCl8fHQ+PTEyMjk2JiZ0PD0xMjMwNXx8dD49MTIzMDgmJnQ8PTEyMzE5fHwxMjMzNj09PXQpfHwoISFZblsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSJdKHQpfHwoISFZblsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyJdKHQpfHwoISFZblsiRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyJdKHQpfHwoISFZblsiSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbyJdKHQpfHwoISFZblsiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQSJdKHQpfHwoISFZblsiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQiJdKHQpfHwoISFZblsiSGFuZ3VsIEphbW8iXSh0KXx8KCEhWW5bIkhhbmd1bCBTeWxsYWJsZXMiXSh0KXx8KCEhWW4uSGlyYWdhbmEodCl8fCghIVluWyJJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzIl0odCl8fCghIVluLkthbmJ1bih0KXx8KCEhWW5bIkthbmd4aSBSYWRpY2FscyJdKHQpfHwoISFZblsiS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyJdKHQpfHwoISghWW4uS2F0YWthbmEodCl8fDEyNTQwPT09dCl8fCghKCFZblsiSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMiXSh0KXx8NjUyODg9PT10fHw2NTI4OT09PXR8fDY1MjkzPT09dHx8dD49NjUzMDYmJnQ8PTY1MzEwfHw2NTMzOT09PXR8fDY1MzQxPT09dHx8NjUzNDM9PT10fHx0Pj02NTM3MSYmdDw9NjU1MDN8fDY1NTA3PT09dHx8dD49NjU1MTImJnQ8PTY1NTE5KXx8KCEoIVluWyJTbWFsbCBGb3JtIFZhcmlhbnRzIl0odCl8fHQ+PTY1MTEyJiZ0PD02NTExOHx8dD49NjUxMjMmJnQ8PTY1MTI2KXx8KCEhWW5bIlVuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MiXSh0KXx8KCEhWW5bIlVuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MgRXh0ZW5kZWQiXSh0KXx8KCEhWW5bIlZlcnRpY2FsIEZvcm1zIl0odCl8fCghIVluWyJZaWppbmcgSGV4YWdyYW0gU3ltYm9scyJdKHQpfHwoISFZblsiWWkgU3lsbGFibGVzIl0odCl8fCEhWW5bIllpIFJhZGljYWxzIl0odCkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKX1mdW5jdGlvbiBKbih0KXtyZXR1cm4hKFpuKHQpfHxmdW5jdGlvbih0KXtyZXR1cm4hKCFZblsiTGF0aW4tMSBTdXBwbGVtZW50Il0odCl8fDE2NyE9PXQmJjE2OSE9PXQmJjE3NCE9PXQmJjE3NyE9PXQmJjE4OCE9PXQmJjE4OSE9PXQmJjE5MCE9PXQmJjIxNSE9PXQmJjI0NyE9PXQpfHwoISghWW5bIkdlbmVyYWwgUHVuY3R1YXRpb24iXSh0KXx8ODIxNCE9PXQmJjgyMjQhPT10JiY4MjI1IT09dCYmODI0MCE9PXQmJjgyNDEhPT10JiY4MjUxIT09dCYmODI1MiE9PXQmJjgyNTghPT10JiY4MjYzIT09dCYmODI2NCE9PXQmJjgyNjUhPT10JiY4MjczIT09dCl8fCghIVluWyJMZXR0ZXJsaWtlIFN5bWJvbHMiXSh0KXx8KCEhWW5bIk51bWJlciBGb3JtcyJdKHQpfHwoISghWW5bIk1pc2NlbGxhbmVvdXMgVGVjaG5pY2FsIl0odCl8fCEodD49ODk2MCYmdDw9ODk2N3x8dD49ODk3MiYmdDw9ODk5MXx8dD49ODk5NiYmdDw9OWUzfHw5MDAzPT09dHx8dD49OTA4NSYmdDw9OTExNHx8dD49OTE1MCYmdDw9OTE2NXx8OTE2Nz09PXR8fHQ+PTkxNjkmJnQ8PTkxNzl8fHQ+PTkxODYmJnQ8PTkyMTUpKXx8KCEoIVluWyJDb250cm9sIFBpY3R1cmVzIl0odCl8fDkyNTE9PT10KXx8KCEhWW5bIk9wdGljYWwgQ2hhcmFjdGVyIFJlY29nbml0aW9uIl0odCl8fCghIVluWyJFbmNsb3NlZCBBbHBoYW51bWVyaWNzIl0odCl8fCghIVluWyJHZW9tZXRyaWMgU2hhcGVzIl0odCl8fCghKCFZblsiTWlzY2VsbGFuZW91cyBTeW1ib2xzIl0odCl8fHQ+PTk3NTQmJnQ8PTk3NTkpfHwoISghWW5bIk1pc2NlbGxhbmVvdXMgU3ltYm9scyBhbmQgQXJyb3dzIl0odCl8fCEodD49MTEwMjYmJnQ8PTExMDU1fHx0Pj0xMTA4OCYmdDw9MTEwOTd8fHQ+PTExMTkyJiZ0PD0xMTI0MykpfHwoISFZblsiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIl0odCl8fCghIVluLkthdGFrYW5hKHQpfHwoISFZblsiUHJpdmF0ZSBVc2UgQXJlYSJdKHQpfHwoISFZblsiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiXSh0KXx8KCEhWW5bIlNtYWxsIEZvcm0gVmFyaWFudHMiXSh0KXx8KCEhWW5bIkhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zIl0odCl8fCg4NzM0PT09dHx8ODc1Nj09PXR8fDg3NTc9PT10fHx0Pj05OTg0JiZ0PD0xMDA4N3x8dD49MTAxMDImJnQ8PTEwMTMxfHw2NTUzMj09PXR8fDY1NTMzPT09dCkpKSkpKSkpKSkpKSkpKSkpfSh0KSl9ZnVuY3Rpb24gS24odCl7cmV0dXJuIHQ+PTE0MjQmJnQ8PTIzMDN8fFluWyJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEiXSh0KXx8WW5bIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiJdKHQpfWZ1bmN0aW9uIFFuKHQsZSl7cmV0dXJuISghZSYmS24odCkpJiYhKHQ+PTIzMDQmJnQ8PTM1ODN8fHQ+PTM4NDAmJnQ8PTQyNTV8fFluLktobWVyKHQpKX1mdW5jdGlvbiAkbih0KXtmb3IodmFyIGU9MCxyPXQ7ZTxyLmxlbmd0aDtlKz0xKXtpZihLbihyW2VdLmNoYXJDb2RlQXQoMCkpKXJldHVybiEwfXJldHVybiExfXZhciB0aT0iZGVmZXJyZWQiLGVpPSJsb2FkaW5nIixyaT0ibG9hZGVkIixuaT0iZXJyb3IiLGlpPW51bGwsYWk9InVuYXZhaWxhYmxlIixvaT1udWxsLHNpPWZ1bmN0aW9uKHQpe3QmJiJzdHJpbmciPT10eXBlb2YgdCYmdC5pbmRleE9mKCJOZXR3b3JrRXJyb3IiKT4tMSYmKGFpPW5pKSxpaSYmaWkodCl9O2Z1bmN0aW9uIGxpKCl7Y2kuZmlyZShuZXcgTXQoInBsdWdpblN0YXRlQ2hhbmdlIix7cGx1Z2luU3RhdHVzOmFpLHBsdWdpblVSTDpvaX0pKX12YXIgY2k9bmV3IEV0LHVpPWZ1bmN0aW9uKCl7cmV0dXJuIGFpfSxmaT1mdW5jdGlvbigpe2lmKGFpIT09dGl8fCFvaSl0aHJvdyBuZXcgRXJyb3IoInJ0bC10ZXh0LXBsdWdpbiBjYW5ub3QgYmUgZG93bmxvYWRlZCB1bmxlc3MgYSBwbHVnaW5VUkwgaXMgc3BlY2lmaWVkIik7YWk9ZWksbGkoKSxvaSYmeHQoe3VybDpvaX0sKGZ1bmN0aW9uKHQpe3Q/c2kodCk6KGFpPXJpLGxpKCkpfSkpfSxoaT17YXBwbHlBcmFiaWNTaGFwaW5nOm51bGwscHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0Om51bGwscHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0Om51bGwsaXNMb2FkZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gYWk9PT1yaXx8bnVsbCE9aGkuYXBwbHlBcmFiaWNTaGFwaW5nfSxpc0xvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gYWk9PT1laX0sc2V0U3RhdGU6ZnVuY3Rpb24odCl7YWk9dC5wbHVnaW5TdGF0dXMsb2k9dC5wbHVnaW5VUkx9LGlzUGFyc2VkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPWhpLmFwcGx5QXJhYmljU2hhcGluZyYmbnVsbCE9aGkucHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0JiZudWxsIT1oaS5wcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHR9LGdldFBsdWdpblVSTDpmdW5jdGlvbigpe3JldHVybiBvaX19LHBpPWZ1bmN0aW9uKHQsZSl7dGhpcy56b29tPXQsZT8odGhpcy5ub3c9ZS5ub3csdGhpcy5mYWRlRHVyYXRpb249ZS5mYWRlRHVyYXRpb24sdGhpcy56b29tSGlzdG9yeT1lLnpvb21IaXN0b3J5LHRoaXMudHJhbnNpdGlvbj1lLnRyYW5zaXRpb24pOih0aGlzLm5vdz0wLHRoaXMuZmFkZUR1cmF0aW9uPTAsdGhpcy56b29tSGlzdG9yeT1uZXcgR24sdGhpcy50cmFuc2l0aW9uPXt9KX07cGkucHJvdG90eXBlLmlzU3VwcG9ydGVkU2NyaXB0PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpe2lmKCFRbihuW3JdLmNoYXJDb2RlQXQoMCksZSkpcmV0dXJuITF9cmV0dXJuITB9KHQsaGkuaXNMb2FkZWQoKSl9LHBpLnByb3RvdHlwZS5jcm9zc0ZhZGluZ0ZhY3Rvcj1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5mYWRlRHVyYXRpb24/MTpNYXRoLm1pbigodGhpcy5ub3ctdGhpcy56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb21UaW1lKS90aGlzLmZhZGVEdXJhdGlvbiwxKX0scGkucHJvdG90eXBlLmdldENyb3NzZmFkZVBhcmFtZXRlcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnpvb20sZT10LU1hdGguZmxvb3IodCkscj10aGlzLmNyb3NzRmFkaW5nRmFjdG9yKCk7cmV0dXJuIHQ+dGhpcy56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb20/e2Zyb21TY2FsZToyLHRvU2NhbGU6MSx0OmUrKDEtZSkqcn06e2Zyb21TY2FsZTouNSx0b1NjYWxlOjEsdDoxLSgxLXIpKmV9fTt2YXIgZGk9ZnVuY3Rpb24odCxlKXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1lLHRoaXMuZXhwcmVzc2lvbj1mdW5jdGlvbih0LGUpe2lmKEJyKHQpKXJldHVybiBuZXcgS3IodCxlKTtpZihZcih0KSl7dmFyIHI9SnIodCxlKTtpZigiZXJyb3IiPT09ci5yZXN1bHQpdGhyb3cgbmV3IEVycm9yKHIudmFsdWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXkrIjogIit0Lm1lc3NhZ2V9KSkuam9pbigiLCAiKSk7cmV0dXJuIHIudmFsdWV9dmFyIG49dDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJiJjb2xvciI9PT1lLnR5cGUmJihuPXRlLnBhcnNlKHQpKSx7a2luZDoiY29uc3RhbnQiLGV2YWx1YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG59fX0odm9pZCAwPT09ZT90LnNwZWNpZmljYXRpb24uZGVmYXVsdDplLHQuc3BlY2lmaWNhdGlvbil9O2RpLnByb3RvdHlwZS5pc0RhdGFEcml2ZW49ZnVuY3Rpb24oKXtyZXR1cm4ic291cmNlIj09PXRoaXMuZXhwcmVzc2lvbi5raW5kfHwiY29tcG9zaXRlIj09PXRoaXMuZXhwcmVzc2lvbi5raW5kfSxkaS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMucHJvcGVydHkucG9zc2libHlFdmFsdWF0ZSh0aGlzLHQsZSxyKX07dmFyIG1pPWZ1bmN0aW9uKHQpe3RoaXMucHJvcGVydHk9dCx0aGlzLnZhbHVlPW5ldyBkaSh0LHZvaWQgMCl9O21pLnByb3RvdHlwZS50cmFuc2l0aW9uZWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IHZpKHRoaXMucHJvcGVydHksdGhpcy52YWx1ZSxlLHUoe30sdC50cmFuc2l0aW9uLHRoaXMudHJhbnNpdGlvbiksdC5ub3cpfSxtaS5wcm90b3R5cGUudW50cmFuc2l0aW9uZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHZpKHRoaXMucHJvcGVydHksdGhpcy52YWx1ZSxudWxsLHt9LDApfTt2YXIgZ2k9ZnVuY3Rpb24odCl7dGhpcy5fcHJvcGVydGllcz10LHRoaXMuX3ZhbHVlcz1PYmplY3QuY3JlYXRlKHQuZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXMpfTtnaS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHgodGhpcy5fdmFsdWVzW3RdLnZhbHVlLnZhbHVlKX0sZ2kucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmFsdWVzLmhhc093blByb3BlcnR5KHQpfHwodGhpcy5fdmFsdWVzW3RdPW5ldyBtaSh0aGlzLl92YWx1ZXNbdF0ucHJvcGVydHkpKSx0aGlzLl92YWx1ZXNbdF0udmFsdWU9bmV3IGRpKHRoaXMuX3ZhbHVlc1t0XS5wcm9wZXJ0eSxudWxsPT09ZT92b2lkIDA6eChlKSl9LGdpLnByb3RvdHlwZS5nZXRUcmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB4KHRoaXMuX3ZhbHVlc1t0XS50cmFuc2l0aW9uKX0sZ2kucHJvdG90eXBlLnNldFRyYW5zaXRpb249ZnVuY3Rpb24odCxlKXt0aGlzLl92YWx1ZXMuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLl92YWx1ZXNbdF09bmV3IG1pKHRoaXMuX3ZhbHVlc1t0XS5wcm9wZXJ0eSkpLHRoaXMuX3ZhbHVlc1t0XS50cmFuc2l0aW9uPXgoZSl8fHZvaWQgMH0sZ2kucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD17fSxlPTAscj1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxpPXRoaXMuZ2V0VmFsdWUobik7dm9pZCAwIT09aSYmKHRbbl09aSk7dmFyIGE9dGhpcy5nZXRUcmFuc2l0aW9uKG4pO3ZvaWQgMCE9PWEmJih0W24rIi10cmFuc2l0aW9uIl09YSl9cmV0dXJuIHR9LGdpLnByb3RvdHlwZS50cmFuc2l0aW9uZWQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IHlpKHRoaXMuX3Byb3BlcnRpZXMpLG49MCxpPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3IuX3ZhbHVlc1thXT10aGlzLl92YWx1ZXNbYV0udHJhbnNpdGlvbmVkKHQsZS5fdmFsdWVzW2FdKX1yZXR1cm4gcn0sZ2kucHJvdG90eXBlLnVudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyB5aSh0aGlzLl9wcm9wZXJ0aWVzKSxlPTAscj1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTt0Ll92YWx1ZXNbbl09dGhpcy5fdmFsdWVzW25dLnVudHJhbnNpdGlvbmVkKCl9cmV0dXJuIHR9O3ZhciB2aT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMucHJvcGVydHk9dCx0aGlzLnZhbHVlPWUsdGhpcy5iZWdpbj1pK24uZGVsYXl8fDAsdGhpcy5lbmQ9dGhpcy5iZWdpbituLmR1cmF0aW9ufHwwLHQuc3BlY2lmaWNhdGlvbi50cmFuc2l0aW9uJiYobi5kZWxheXx8bi5kdXJhdGlvbikmJih0aGlzLnByaW9yPXIpfTt2aS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5ub3d8fDAsaT10aGlzLnZhbHVlLnBvc3NpYmx5RXZhbHVhdGUodCxlLHIpLGE9dGhpcy5wcmlvcjtpZihhKXtpZihuPnRoaXMuZW5kKXJldHVybiB0aGlzLnByaW9yPW51bGwsaTtpZih0aGlzLnZhbHVlLmlzRGF0YURyaXZlbigpKXJldHVybiB0aGlzLnByaW9yPW51bGwsaTtpZihuPHRoaXMuYmVnaW4pcmV0dXJuIGEucG9zc2libHlFdmFsdWF0ZSh0LGUscik7dmFyIG89KG4tdGhpcy5iZWdpbikvKHRoaXMuZW5kLXRoaXMuYmVnaW4pO3JldHVybiB0aGlzLnByb3BlcnR5LmludGVycG9sYXRlKGEucG9zc2libHlFdmFsdWF0ZSh0LGUsciksaSxmdW5jdGlvbih0KXtpZih0PD0wKXJldHVybiAwO2lmKHQ+PTEpcmV0dXJuIDE7dmFyIGU9dCp0LHI9ZSp0O3JldHVybiA0Kih0PC41P3I6MyoodC1lKStyLS43NSl9KG8pKX1yZXR1cm4gaX07dmFyIHlpPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXMpfTt5aS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPW5ldyBfaSh0aGlzLl9wcm9wZXJ0aWVzKSxpPTAsYT1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTtuLl92YWx1ZXNbb109dGhpcy5fdmFsdWVzW29dLnBvc3NpYmx5RXZhbHVhdGUodCxlLHIpfXJldHVybiBufSx5aS5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07aWYodGhpcy5fdmFsdWVzW3JdLnByaW9yKXJldHVybiEwfXJldHVybiExfTt2YXIgeGk9ZnVuY3Rpb24odCl7dGhpcy5fcHJvcGVydGllcz10LHRoaXMuX3ZhbHVlcz1PYmplY3QuY3JlYXRlKHQuZGVmYXVsdFByb3BlcnR5VmFsdWVzKX07eGkucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB4KHRoaXMuX3ZhbHVlc1t0XS52YWx1ZSl9LHhpLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3RoaXMuX3ZhbHVlc1t0XT1uZXcgZGkodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5LG51bGw9PT1lP3ZvaWQgMDp4KGUpKX0seGkucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD17fSxlPTAscj1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxpPXRoaXMuZ2V0VmFsdWUobik7dm9pZCAwIT09aSYmKHRbbl09aSl9cmV0dXJuIHR9LHhpLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49bmV3IF9pKHRoaXMuX3Byb3BlcnRpZXMpLGk9MCxhPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO24uX3ZhbHVlc1tvXT10aGlzLl92YWx1ZXNbb10ucG9zc2libHlFdmFsdWF0ZSh0LGUscil9cmV0dXJuIG59O3ZhciBiaT1mdW5jdGlvbih0LGUscil7dGhpcy5wcm9wZXJ0eT10LHRoaXMudmFsdWU9ZSx0aGlzLnBhcmFtZXRlcnM9cn07YmkucHJvdG90eXBlLmlzQ29uc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4iY29uc3RhbnQiPT09dGhpcy52YWx1ZS5raW5kfSxiaS5wcm90b3R5cGUuY29uc3RhbnRPcj1mdW5jdGlvbih0KXtyZXR1cm4iY29uc3RhbnQiPT09dGhpcy52YWx1ZS5raW5kP3RoaXMudmFsdWUudmFsdWU6dH0sYmkucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLnByb3BlcnR5LmV2YWx1YXRlKHRoaXMudmFsdWUsdGhpcy5wYXJhbWV0ZXJzLHQsZSxyLG4pfTt2YXIgX2k9ZnVuY3Rpb24odCl7dGhpcy5fcHJvcGVydGllcz10LHRoaXMuX3ZhbHVlcz1PYmplY3QuY3JlYXRlKHQuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzKX07X2kucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsdWVzW3RdfTt2YXIgd2k9ZnVuY3Rpb24odCl7dGhpcy5zcGVjaWZpY2F0aW9uPXR9O3dpLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZXhwcmVzc2lvbi5ldmFsdWF0ZShlKX0sd2kucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1HZVt0aGlzLnNwZWNpZmljYXRpb24udHlwZV07cmV0dXJuIG4/bih0LGUscik6dH07dmFyIFRpPWZ1bmN0aW9uKHQsZSl7dGhpcy5zcGVjaWZpY2F0aW9uPXQsdGhpcy5vdmVycmlkZXM9ZX07VGkucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuImNvbnN0YW50Ij09PXQuZXhwcmVzc2lvbi5raW5kfHwiY2FtZXJhIj09PXQuZXhwcmVzc2lvbi5raW5kP25ldyBiaSh0aGlzLHtraW5kOiJjb25zdGFudCIsdmFsdWU6dC5leHByZXNzaW9uLmV2YWx1YXRlKGUsbnVsbCx7fSxyLG4pfSxlKTpuZXcgYmkodGhpcyx0LmV4cHJlc3Npb24sZSl9LFRpLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUscil7aWYoImNvbnN0YW50IiE9PXQudmFsdWUua2luZHx8ImNvbnN0YW50IiE9PWUudmFsdWUua2luZClyZXR1cm4gdDtpZih2b2lkIDA9PT10LnZhbHVlLnZhbHVlfHx2b2lkIDA9PT1lLnZhbHVlLnZhbHVlKXJldHVybiBuZXcgYmkodGhpcyx7a2luZDoiY29uc3RhbnQiLHZhbHVlOnZvaWQgMH0sdC5wYXJhbWV0ZXJzKTt2YXIgbj1HZVt0aGlzLnNwZWNpZmljYXRpb24udHlwZV07cmV0dXJuIG4/bmV3IGJpKHRoaXMse2tpbmQ6ImNvbnN0YW50Iix2YWx1ZTpuKHQudmFsdWUudmFsdWUsZS52YWx1ZS52YWx1ZSxyKX0sdC5wYXJhbWV0ZXJzKTp0fSxUaS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiJjb25zdGFudCI9PT10LmtpbmQ/dC52YWx1ZTp0LmV2YWx1YXRlKGUscixuLGksYSl9O3ZhciBraT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwPT09dC52YWx1ZSlyZXR1cm4gbmV3IGJpKHRoaXMse2tpbmQ6ImNvbnN0YW50Iix2YWx1ZTp2b2lkIDB9LGUpO2lmKCJjb25zdGFudCI9PT10LmV4cHJlc3Npb24ua2luZCl7dmFyIGk9dC5leHByZXNzaW9uLmV2YWx1YXRlKGUsbnVsbCx7fSxyLG4pLGE9InJlc29sdmVkSW1hZ2UiPT09dC5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLnR5cGUmJiJzdHJpbmciIT10eXBlb2YgaT9pLm5hbWU6aSxvPXRoaXMuX2NhbGN1bGF0ZShhLGEsYSxlKTtyZXR1cm4gbmV3IGJpKHRoaXMse2tpbmQ6ImNvbnN0YW50Iix2YWx1ZTpvfSxlKX1pZigiY2FtZXJhIj09PXQuZXhwcmVzc2lvbi5raW5kKXt2YXIgcz10aGlzLl9jYWxjdWxhdGUodC5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOmUuem9vbS0xfSksdC5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOmUuem9vbX0pLHQuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTplLnpvb20rMX0pLGUpO3JldHVybiBuZXcgYmkodGhpcyx7a2luZDoiY29uc3RhbnQiLHZhbHVlOnN9LGUpfXJldHVybiBuZXcgYmkodGhpcyx0LmV4cHJlc3Npb24sZSl9LGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtpZigic291cmNlIj09PXQua2luZCl7dmFyIG89dC5ldmFsdWF0ZShlLHIsbixpLGEpO3JldHVybiB0aGlzLl9jYWxjdWxhdGUobyxvLG8sZSl9cmV0dXJuImNvbXBvc2l0ZSI9PT10LmtpbmQ/dGhpcy5fY2FsY3VsYXRlKHQuZXZhbHVhdGUoe3pvb206TWF0aC5mbG9vcihlLnpvb20pLTF9LHIsbiksdC5ldmFsdWF0ZSh7em9vbTpNYXRoLmZsb29yKGUuem9vbSl9LHIsbiksdC5ldmFsdWF0ZSh7em9vbTpNYXRoLmZsb29yKGUuem9vbSkrMX0scixuKSxlKTp0LnZhbHVlfSxlLnByb3RvdHlwZS5fY2FsY3VsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuLnpvb20+bi56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb20/e2Zyb206dCx0bzplfTp7ZnJvbTpyLHRvOmV9fSxlLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdH0sZX0oVGkpLEFpPWZ1bmN0aW9uKHQpe3RoaXMuc3BlY2lmaWNhdGlvbj10fTtBaS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUscixuKXtpZih2b2lkIDAhPT10LnZhbHVlKXtpZigiY29uc3RhbnQiPT09dC5leHByZXNzaW9uLmtpbmQpe3ZhciBpPXQuZXhwcmVzc2lvbi5ldmFsdWF0ZShlLG51bGwse30scixuKTtyZXR1cm4gdGhpcy5fY2FsY3VsYXRlKGksaSxpLGUpfXJldHVybiB0aGlzLl9jYWxjdWxhdGUodC5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBwaShNYXRoLmZsb29yKGUuem9vbS0xKSxlKSksdC5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBwaShNYXRoLmZsb29yKGUuem9vbSksZSkpLHQuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgcGkoTWF0aC5mbG9vcihlLnpvb20rMSksZSkpLGUpfX0sQWkucHJvdG90eXBlLl9jYWxjdWxhdGU9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG4uem9vbT5uLnpvb21IaXN0b3J5Lmxhc3RJbnRlZ2VyWm9vbT97ZnJvbTp0LHRvOmV9Ontmcm9tOnIsdG86ZX19LEFpLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdH07dmFyIE1pPWZ1bmN0aW9uKHQpe3RoaXMuc3BlY2lmaWNhdGlvbj10fTtNaS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4hIXQuZXhwcmVzc2lvbi5ldmFsdWF0ZShlLG51bGwse30scixuKX0sTWkucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKCl7cmV0dXJuITF9O3ZhciBTaT1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5wcm9wZXJ0aWVzPXQsdGhpcy5kZWZhdWx0UHJvcGVydHlWYWx1ZXM9e30sdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlcz17fSx0aGlzLmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXM9e30sdGhpcy5kZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXM9e30sdGhpcy5vdmVycmlkYWJsZVByb3BlcnRpZXM9W10sdCl7dmFyIHI9dFtlXTtyLnNwZWNpZmljYXRpb24ub3ZlcnJpZGFibGUmJnRoaXMub3ZlcnJpZGFibGVQcm9wZXJ0aWVzLnB1c2goZSk7dmFyIG49dGhpcy5kZWZhdWx0UHJvcGVydHlWYWx1ZXNbZV09bmV3IGRpKHIsdm9pZCAwKSxpPXRoaXMuZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXNbZV09bmV3IG1pKHIpO3RoaXMuZGVmYXVsdFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlc1tlXT1pLnVudHJhbnNpdGlvbmVkKCksdGhpcy5kZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXNbZV09bi5wb3NzaWJseUV2YWx1YXRlKHt9KX19O05uKCJEYXRhRHJpdmVuUHJvcGVydHkiLFRpKSxObigiRGF0YUNvbnN0YW50UHJvcGVydHkiLHdpKSxObigiQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSIsa2kpLE5uKCJDcm9zc0ZhZGVkUHJvcGVydHkiLEFpKSxObigiQ29sb3JSYW1wUHJvcGVydHkiLE1pKTt2YXIgRWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe2lmKHQuY2FsbCh0aGlzKSx0aGlzLmlkPWUuaWQsdGhpcy50eXBlPWUudHlwZSx0aGlzLl9mZWF0dXJlRmlsdGVyPXtmaWx0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbmVlZEdlb21ldHJ5OiExfSwiY3VzdG9tIiE9PWUudHlwZSYmKGU9ZSx0aGlzLm1ldGFkYXRhPWUubWV0YWRhdGEsdGhpcy5taW56b29tPWUubWluem9vbSx0aGlzLm1heHpvb209ZS5tYXh6b29tLCJiYWNrZ3JvdW5kIiE9PWUudHlwZSYmKHRoaXMuc291cmNlPWUuc291cmNlLHRoaXMuc291cmNlTGF5ZXI9ZVsic291cmNlLWxheWVyIl0sdGhpcy5maWx0ZXI9ZS5maWx0ZXIpLHIubGF5b3V0JiYodGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQ9bmV3IHhpKHIubGF5b3V0KSksci5wYWludCkpe2Zvcih2YXIgbiBpbiB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50PW5ldyBnaShyLnBhaW50KSxlLnBhaW50KXRoaXMuc2V0UGFpbnRQcm9wZXJ0eShuLGUucGFpbnRbbl0se3ZhbGlkYXRlOiExfSk7Zm9yKHZhciBpIGluIGUubGF5b3V0KXRoaXMuc2V0TGF5b3V0UHJvcGVydHkoaSxlLmxheW91dFtpXSx7dmFsaWRhdGU6ITF9KTt0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQ9dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC51bnRyYW5zaXRpb25lZCgpLHRoaXMucGFpbnQ9bmV3IF9pKHIucGFpbnQpfX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcm9zc2ZhZGVQYXJhbWV0ZXJzfSxlLnByb3RvdHlwZS5nZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4idmlzaWJpbGl0eSI9PT10P3RoaXMudmlzaWJpbGl0eTp0aGlzLl91bmV2YWx1YXRlZExheW91dC5nZXRWYWx1ZSh0KX0sZS5wcm90b3R5cGUuc2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe2lmKHZvaWQgMD09PXImJihyPXt9KSxudWxsIT1lKXt2YXIgbj0ibGF5ZXJzLiIrdGhpcy5pZCsiLmxheW91dC4iK3Q7aWYodGhpcy5fdmFsaWRhdGUoSW4sbix0LGUscikpcmV0dXJufSJ2aXNpYmlsaXR5IiE9PXQ/dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuc2V0VmFsdWUodCxlKTp0aGlzLnZpc2liaWxpdHk9ZX0sZS5wcm90b3R5cGUuZ2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4gZyh0LCItdHJhbnNpdGlvbiIpP3RoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuZ2V0VHJhbnNpdGlvbih0LnNsaWNlKDAsLSItdHJhbnNpdGlvbiIubGVuZ3RoKSk6dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5nZXRWYWx1ZSh0KX0sZS5wcm90b3R5cGUuc2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscil7aWYodm9pZCAwPT09ciYmKHI9e30pLG51bGwhPWUpe3ZhciBuPSJsYXllcnMuIit0aGlzLmlkKyIucGFpbnQuIit0O2lmKHRoaXMuX3ZhbGlkYXRlKFBuLG4sdCxlLHIpKXJldHVybiExfWlmKGcodCwiLXRyYW5zaXRpb24iKSlyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXRUcmFuc2l0aW9uKHQuc2xpY2UoMCwtIi10cmFuc2l0aW9uIi5sZW5ndGgpLGV8fHZvaWQgMCksITE7dmFyIGk9dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzW3RdLGE9ImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIj09PWkucHJvcGVydHkuc3BlY2lmaWNhdGlvblsicHJvcGVydHktdHlwZSJdLG89aS52YWx1ZS5pc0RhdGFEcml2ZW4oKSxzPWkudmFsdWU7dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXRWYWx1ZSh0LGUpLHRoaXMuX2hhbmRsZVNwZWNpYWxQYWludFByb3BlcnR5VXBkYXRlKHQpO3ZhciBsPXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1t0XS52YWx1ZTtyZXR1cm4gbC5pc0RhdGFEcml2ZW4oKXx8b3x8YXx8dGhpcy5faGFuZGxlT3ZlcnJpZGFibGVQYWludFByb3BlcnR5VXBkYXRlKHQscyxsKX0sZS5wcm90b3R5cGUuX2hhbmRsZVNwZWNpYWxQYWludFByb3BlcnR5VXBkYXRlPWZ1bmN0aW9uKHQpe30sZS5wcm90b3R5cGUuX2hhbmRsZU92ZXJyaWRhYmxlUGFpbnRQcm9wZXJ0eVVwZGF0ZT1mdW5jdGlvbih0LGUscil7cmV0dXJuITF9LGUucHJvdG90eXBlLmlzSGlkZGVuPWZ1bmN0aW9uKHQpe3JldHVybiEhKHRoaXMubWluem9vbSYmdDx0aGlzLm1pbnpvb20pfHwoISEodGhpcy5tYXh6b29tJiZ0Pj10aGlzLm1heHpvb20pfHwibm9uZSI9PT10aGlzLnZpc2liaWxpdHkpfSxlLnByb3RvdHlwZS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbih0KXt0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQ9dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC50cmFuc2l0aW9uZWQodCx0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQpfSxlLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5oYXNUcmFuc2l0aW9uKCl9LGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKHQsZSl7dC5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzJiYodGhpcy5fY3Jvc3NmYWRlUGFyYW1ldGVycz10LmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKSksdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQmJih0aGlzLmxheW91dD10aGlzLl91bmV2YWx1YXRlZExheW91dC5wb3NzaWJseUV2YWx1YXRlKHQsdm9pZCAwLGUpKSx0aGlzLnBhaW50PXRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5wb3NzaWJseUV2YWx1YXRlKHQsdm9pZCAwLGUpfSxlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD17aWQ6dGhpcy5pZCx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5zb3VyY2UsInNvdXJjZS1sYXllciI6dGhpcy5zb3VyY2VMYXllcixtZXRhZGF0YTp0aGlzLm1ldGFkYXRhLG1pbnpvb206dGhpcy5taW56b29tLG1heHpvb206dGhpcy5tYXh6b29tLGZpbHRlcjp0aGlzLmZpbHRlcixsYXlvdXQ6dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQmJnRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LnNlcmlhbGl6ZSgpLHBhaW50OnRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQmJnRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2VyaWFsaXplKCl9O3JldHVybiB0aGlzLnZpc2liaWxpdHkmJih0LmxheW91dD10LmxheW91dHx8e30sdC5sYXlvdXQudmlzaWJpbGl0eT10aGlzLnZpc2liaWxpdHkpLHkodCwoZnVuY3Rpb24odCxlKXtyZXR1cm4hKHZvaWQgMD09PXR8fCJsYXlvdXQiPT09ZSYmIU9iamVjdC5rZXlzKHQpLmxlbmd0aHx8InBhaW50Ij09PWUmJiFPYmplY3Qua2V5cyh0KS5sZW5ndGgpfSkpfSxlLnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9e30pLCghaXx8ITEhPT1pLnZhbGlkYXRlKSYmT24odGhpcyx0LmNhbGwoTG4se2tleTplLGxheWVyVHlwZTp0aGlzLnR5cGUsb2JqZWN0S2V5OnIsdmFsdWU6bixzdHlsZVNwZWM6THQsc3R5bGU6e2dseXBoczohMCxzcHJpdGU6ITB9fSkpfSxlLnByb3RvdHlwZS5pczNEPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmlzVGlsZUNsaXBwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuaGFzT2Zmc2NyZWVuUGFzcz1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLmlzU3RhdGVEZXBlbmRlbnQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5wYWludC5fdmFsdWVzKXt2YXIgZT10aGlzLnBhaW50LmdldCh0KTtpZihlIGluc3RhbmNlb2YgYmkmJnpyKGUucHJvcGVydHkuc3BlY2lmaWNhdGlvbikmJigoInNvdXJjZSI9PT1lLnZhbHVlLmtpbmR8fCJjb21wb3NpdGUiPT09ZS52YWx1ZS5raW5kKSYmZS52YWx1ZS5pc1N0YXRlRGVwZW5kZW50KSlyZXR1cm4hMH1yZXR1cm4hMX0sZX0oRXQpLExpPXtJbnQ4OkludDhBcnJheSxVaW50ODpVaW50OEFycmF5LEludDE2OkludDE2QXJyYXksVWludDE2OlVpbnQxNkFycmF5LEludDMyOkludDMyQXJyYXksVWludDMyOlVpbnQzMkFycmF5LEZsb2F0MzI6RmxvYXQzMkFycmF5fSxDaT1mdW5jdGlvbih0LGUpe3RoaXMuX3N0cnVjdEFycmF5PXQsdGhpcy5fcG9zMT1lKnRoaXMuc2l6ZSx0aGlzLl9wb3MyPXRoaXMuX3BvczEvMix0aGlzLl9wb3M0PXRoaXMuX3BvczEvNCx0aGlzLl9wb3M4PXRoaXMuX3BvczEvOH0sUGk9ZnVuY3Rpb24oKXt0aGlzLmlzVHJhbnNmZXJyZWQ9ITEsdGhpcy5jYXBhY2l0eT0tMSx0aGlzLnJlc2l6ZSgwKX07ZnVuY3Rpb24gSWkodCxlKXt2b2lkIDA9PT1lJiYoZT0xKTt2YXIgcj0wLG49MDtyZXR1cm57bWVtYmVyczp0Lm1hcCgoZnVuY3Rpb24odCl7dmFyIGksYT0oaT10LnR5cGUsTGlbaV0uQllURVNfUEVSX0VMRU1FTlQpLG89cj1PaShyLE1hdGgubWF4KGUsYSkpLHM9dC5jb21wb25lbnRzfHwxO3JldHVybiBuPU1hdGgubWF4KG4sYSkscis9YSpzLHtuYW1lOnQubmFtZSx0eXBlOnQudHlwZSxjb21wb25lbnRzOnMsb2Zmc2V0Om99fSkpLHNpemU6T2kocixNYXRoLm1heChuLGUpKSxhbGlnbm1lbnQ6ZX19ZnVuY3Rpb24gT2kodCxlKXtyZXR1cm4gTWF0aC5jZWlsKHQvZSkqZX1QaS5zZXJpYWxpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fdHJpbSgpLGUmJih0LmlzVHJhbnNmZXJyZWQ9ITAsZS5wdXNoKHQuYXJyYXlCdWZmZXIpKSx7bGVuZ3RoOnQubGVuZ3RoLGFycmF5QnVmZmVyOnQuYXJyYXlCdWZmZXJ9fSxQaS5kZXNlcmlhbGl6ZT1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QuY3JlYXRlKHRoaXMucHJvdG90eXBlKTtyZXR1cm4gZS5hcnJheUJ1ZmZlcj10LmFycmF5QnVmZmVyLGUubGVuZ3RoPXQubGVuZ3RoLGUuY2FwYWNpdHk9dC5hcnJheUJ1ZmZlci5ieXRlTGVuZ3RoL2UuYnl0ZXNQZXJFbGVtZW50LGUuX3JlZnJlc2hWaWV3cygpLGV9LFBpLnByb3RvdHlwZS5fdHJpbT1mdW5jdGlvbigpe3RoaXMubGVuZ3RoIT09dGhpcy5jYXBhY2l0eSYmKHRoaXMuY2FwYWNpdHk9dGhpcy5sZW5ndGgsdGhpcy5hcnJheUJ1ZmZlcj10aGlzLmFycmF5QnVmZmVyLnNsaWNlKDAsdGhpcy5sZW5ndGgqdGhpcy5ieXRlc1BlckVsZW1lbnQpLHRoaXMuX3JlZnJlc2hWaWV3cygpKX0sUGkucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5sZW5ndGg9MH0sUGkucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXt0aGlzLnJlc2VydmUodCksdGhpcy5sZW5ndGg9dH0sUGkucHJvdG90eXBlLnJlc2VydmU9ZnVuY3Rpb24odCl7aWYodD50aGlzLmNhcGFjaXR5KXt0aGlzLmNhcGFjaXR5PU1hdGgubWF4KHQsTWF0aC5mbG9vcig1KnRoaXMuY2FwYWNpdHkpLDEyOCksdGhpcy5hcnJheUJ1ZmZlcj1uZXcgQXJyYXlCdWZmZXIodGhpcy5jYXBhY2l0eSp0aGlzLmJ5dGVzUGVyRWxlbWVudCk7dmFyIGU9dGhpcy51aW50ODt0aGlzLl9yZWZyZXNoVmlld3MoKSxlJiZ0aGlzLnVpbnQ4LnNldChlKX19LFBpLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfcmVmcmVzaFZpZXdzKCkgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIGNvbmNyZXRlIFN0cnVjdEFycmF5IGxheW91dCIpfTt2YXIgemk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShyKzEpLHRoaXMuZW1wbGFjZShyLHQsZSl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdDtyZXR1cm4gdGhpcy5pbnQxNltuKzBdPWUsdGhpcy5pbnQxNltuKzFdPXIsdH0sZX0oUGkpO3ppLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxObigiU3RydWN0QXJyYXlMYXlvdXQyaTQiLHppKTt2YXIgRGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUoaSsxKSx0aGlzLmVtcGxhY2UoaSx0LGUscixuKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPTQqdDtyZXR1cm4gdGhpcy5pbnQxNlthKzBdPWUsdGhpcy5pbnQxNlthKzFdPXIsdGhpcy5pbnQxNlthKzJdPW4sdGhpcy5pbnQxNlthKzNdPWksdH0sZX0oUGkpO0RpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxObigiU3RydWN0QXJyYXlMYXlvdXQ0aTgiLERpKTt2YXIgUmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG8rMSksdGhpcy5lbXBsYWNlKG8sdCxlLHIsbixpLGEpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTYqdDtyZXR1cm4gdGhpcy5pbnQxNltzKzBdPWUsdGhpcy5pbnQxNltzKzFdPXIsdGhpcy5pbnQxNltzKzJdPW4sdGhpcy5pbnQxNltzKzNdPWksdGhpcy5pbnQxNltzKzRdPWEsdGhpcy5pbnQxNltzKzVdPW8sdH0sZX0oUGkpO1JpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTIsTm4oIlN0cnVjdEFycmF5TGF5b3V0Mmk0aTEyIixSaSk7dmFyIEZpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShvKzEpLHRoaXMuZW1wbGFjZShvLHQsZSxyLG4saSxhKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz00KnQsbD04KnQ7cmV0dXJuIHRoaXMuaW50MTZbcyswXT1lLHRoaXMuaW50MTZbcysxXT1yLHRoaXMudWludDhbbCs0XT1uLHRoaXMudWludDhbbCs1XT1pLHRoaXMudWludDhbbCs2XT1hLHRoaXMudWludDhbbCs3XT1vLHR9LGV9KFBpKTtGaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTgsTm4oIlN0cnVjdEFycmF5TGF5b3V0Mmk0dWI4IixGaSk7dmFyIEJpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUodSsxKSx0aGlzLmVtcGxhY2UodSx0LGUscixuLGksYSxvLHMsbCxjKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUpe3ZhciBmPTkqdCxoPTE4KnQ7cmV0dXJuIHRoaXMudWludDE2W2YrMF09ZSx0aGlzLnVpbnQxNltmKzFdPXIsdGhpcy51aW50MTZbZisyXT1uLHRoaXMudWludDE2W2YrM109aSx0aGlzLnVpbnQxNltmKzRdPWEsdGhpcy51aW50MTZbZis1XT1vLHRoaXMudWludDE2W2YrNl09cyx0aGlzLnVpbnQxNltmKzddPWwsdGhpcy51aW50OFtoKzE2XT1jLHRoaXMudWludDhbaCsxN109dSx0fSxlfShQaSk7QmkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xOCxObigiU3RydWN0QXJyYXlMYXlvdXQ4dWkydWIxOCIsQmkpO3ZhciBOaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsZil7dmFyIGg9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKGgrMSksdGhpcy5lbXBsYWNlKGgsdCxlLHIsbixpLGEsbyxzLGwsYyx1LGYpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgpe3ZhciBwPTEyKnQ7cmV0dXJuIHRoaXMuaW50MTZbcCswXT1lLHRoaXMuaW50MTZbcCsxXT1yLHRoaXMuaW50MTZbcCsyXT1uLHRoaXMuaW50MTZbcCszXT1pLHRoaXMudWludDE2W3ArNF09YSx0aGlzLnVpbnQxNltwKzVdPW8sdGhpcy51aW50MTZbcCs2XT1zLHRoaXMudWludDE2W3ArN109bCx0aGlzLmludDE2W3ArOF09Yyx0aGlzLmludDE2W3ArOV09dSx0aGlzLmludDE2W3ArMTBdPWYsdGhpcy5pbnQxNltwKzExXT1oLHR9LGV9KFBpKTtOaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTI0LE5uKCJTdHJ1Y3RBcnJheUxheW91dDRpNHVpNGkyNCIsTmkpO3ZhciBqaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG4rMSksdGhpcy5lbXBsYWNlKG4sdCxlLHIpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTMqdDtyZXR1cm4gdGhpcy5mbG9hdDMyW2krMF09ZSx0aGlzLmZsb2F0MzJbaSsxXT1yLHRoaXMuZmxvYXQzMltpKzJdPW4sdH0sZX0oUGkpO2ppLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTIsTm4oIlN0cnVjdEFycmF5TGF5b3V0M2YxMiIsamkpO3ZhciBVaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDMyPW5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKGUrMSksdGhpcy5lbXBsYWNlKGUsdCl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj0xKnQ7cmV0dXJuIHRoaXMudWludDMyW3IrMF09ZSx0fSxlfShQaSk7VWkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LE5uKCJTdHJ1Y3RBcnJheUxheW91dDF1bDQiLFVpKTt2YXIgVmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDMyPW5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsKXt2YXIgYz10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUoYysxKSx0aGlzLmVtcGxhY2UoYyx0LGUscixuLGksYSxvLHMsbCl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9MTAqdCxmPTUqdDtyZXR1cm4gdGhpcy5pbnQxNlt1KzBdPWUsdGhpcy5pbnQxNlt1KzFdPXIsdGhpcy5pbnQxNlt1KzJdPW4sdGhpcy5pbnQxNlt1KzNdPWksdGhpcy5pbnQxNlt1KzRdPWEsdGhpcy5pbnQxNlt1KzVdPW8sdGhpcy51aW50MzJbZiszXT1zLHRoaXMudWludDE2W3UrOF09bCx0aGlzLnVpbnQxNlt1KzldPWMsdH0sZX0oUGkpO1ZpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MjAsTm4oIlN0cnVjdEFycmF5TGF5b3V0NmkxdWwydWkyMCIsVmkpO3ZhciBIaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUobysxKSx0aGlzLmVtcGxhY2Uobyx0LGUscixuLGksYSl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9Nip0O3JldHVybiB0aGlzLmludDE2W3MrMF09ZSx0aGlzLmludDE2W3MrMV09cix0aGlzLmludDE2W3MrMl09bix0aGlzLmludDE2W3MrM109aSx0aGlzLmludDE2W3MrNF09YSx0aGlzLmludDE2W3MrNV09byx0fSxlfShQaSk7SGkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xMixObigiU3RydWN0QXJyYXlMYXlvdXQyaTJpMmkxMiIsSGkpO3ZhciBxaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKGErMSksdGhpcy5lbXBsYWNlKGEsdCxlLHIsbixpKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89NCp0LHM9OCp0O3JldHVybiB0aGlzLmZsb2F0MzJbbyswXT1lLHRoaXMuZmxvYXQzMltvKzFdPXIsdGhpcy5mbG9hdDMyW28rMl09bix0aGlzLmludDE2W3MrNl09aSx0aGlzLmludDE2W3MrN109YSx0fSxlfShQaSk7cWkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xNixObigiU3RydWN0QXJyYXlMYXlvdXQyZjFmMmkxNiIscWkpO3ZhciBHaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUoaSsxKSx0aGlzLmVtcGxhY2UoaSx0LGUscixuKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPTEyKnQsbz0zKnQ7cmV0dXJuIHRoaXMudWludDhbYSswXT1lLHRoaXMudWludDhbYSsxXT1yLHRoaXMuZmxvYXQzMltvKzFdPW4sdGhpcy5mbG9hdDMyW28rMl09aSx0fSxlfShQaSk7R2kucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xMixObigiU3RydWN0QXJyYXlMYXlvdXQydWIyZjEyIixHaSk7dmFyIFlpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG4rMSksdGhpcy5lbXBsYWNlKG4sdCxlLHIpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTMqdDtyZXR1cm4gdGhpcy51aW50MTZbaSswXT1lLHRoaXMudWludDE2W2krMV09cix0aGlzLnVpbnQxNltpKzJdPW4sdH0sZX0oUGkpO1lpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NixObigiU3RydWN0QXJyYXlMYXlvdXQzdWk2IixZaSk7dmFyIFdpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCxtLGcpe3ZhciB2PXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZSh2KzEpLHRoaXMuZW1wbGFjZSh2LHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG0sZyl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsbSxnLHYpe3ZhciB5PTI0KnQseD0xMip0LGI9NDgqdDtyZXR1cm4gdGhpcy5pbnQxNlt5KzBdPWUsdGhpcy5pbnQxNlt5KzFdPXIsdGhpcy51aW50MTZbeSsyXT1uLHRoaXMudWludDE2W3krM109aSx0aGlzLnVpbnQzMlt4KzJdPWEsdGhpcy51aW50MzJbeCszXT1vLHRoaXMudWludDMyW3grNF09cyx0aGlzLnVpbnQxNlt5KzEwXT1sLHRoaXMudWludDE2W3krMTFdPWMsdGhpcy51aW50MTZbeSsxMl09dSx0aGlzLmZsb2F0MzJbeCs3XT1mLHRoaXMuZmxvYXQzMlt4KzhdPWgsdGhpcy51aW50OFtiKzM2XT1wLHRoaXMudWludDhbYiszN109ZCx0aGlzLnVpbnQ4W2IrMzhdPW0sdGhpcy51aW50MzJbeCsxMF09Zyx0aGlzLmludDE2W3krMjJdPXYsdH0sZX0oUGkpO1dpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NDgsTm4oIlN0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjN1YjF1bDFpNDgiLFdpKTt2YXIgWGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2LHkseCxiLF8sdyxULGssQSxNLFMpe3ZhciBFPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShFKzEpLHRoaXMuZW1wbGFjZShFLHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2LHkseCxiLF8sdyxULGssQSxNLFMpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2LHkseCxiLF8sdyxULGssQSxNLFMsRSl7dmFyIEw9MzQqdCxDPTE3KnQ7cmV0dXJuIHRoaXMuaW50MTZbTCswXT1lLHRoaXMuaW50MTZbTCsxXT1yLHRoaXMuaW50MTZbTCsyXT1uLHRoaXMuaW50MTZbTCszXT1pLHRoaXMuaW50MTZbTCs0XT1hLHRoaXMuaW50MTZbTCs1XT1vLHRoaXMuaW50MTZbTCs2XT1zLHRoaXMuaW50MTZbTCs3XT1sLHRoaXMudWludDE2W0wrOF09Yyx0aGlzLnVpbnQxNltMKzldPXUsdGhpcy51aW50MTZbTCsxMF09Zix0aGlzLnVpbnQxNltMKzExXT1oLHRoaXMudWludDE2W0wrMTJdPXAsdGhpcy51aW50MTZbTCsxM109ZCx0aGlzLnVpbnQxNltMKzE0XT1tLHRoaXMudWludDE2W0wrMTVdPWcsdGhpcy51aW50MTZbTCsxNl09dix0aGlzLnVpbnQxNltMKzE3XT15LHRoaXMudWludDE2W0wrMThdPXgsdGhpcy51aW50MTZbTCsxOV09Yix0aGlzLnVpbnQxNltMKzIwXT1fLHRoaXMudWludDE2W0wrMjFdPXcsdGhpcy51aW50MTZbTCsyMl09VCx0aGlzLnVpbnQzMltDKzEyXT1rLHRoaXMuZmxvYXQzMltDKzEzXT1BLHRoaXMuZmxvYXQzMltDKzE0XT1NLHRoaXMuZmxvYXQzMltDKzE1XT1TLHRoaXMuZmxvYXQzMltDKzE2XT1FLHR9LGV9KFBpKTtYaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTY4LE5uKCJTdHJ1Y3RBcnJheUxheW91dDhpMTV1aTF1bDRmNjgiLFhpKTt2YXIgWmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKGUrMSksdGhpcy5lbXBsYWNlKGUsdCl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj0xKnQ7cmV0dXJuIHRoaXMuZmxvYXQzMltyKzBdPWUsdH0sZX0oUGkpO1ppLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxObigiU3RydWN0QXJyYXlMYXlvdXQxZjQiLFppKTt2YXIgSmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG4rMSksdGhpcy5lbXBsYWNlKG4sdCxlLHIpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTMqdDtyZXR1cm4gdGhpcy5pbnQxNltpKzBdPWUsdGhpcy5pbnQxNltpKzFdPXIsdGhpcy5pbnQxNltpKzJdPW4sdH0sZX0oUGkpO0ppLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NixObigiU3RydWN0QXJyYXlMYXlvdXQzaTYiLEppKTt2YXIgS2k9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG4rMSksdGhpcy5lbXBsYWNlKG4sdCxlLHIpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTIqdCxhPTQqdDtyZXR1cm4gdGhpcy51aW50MzJbaSswXT1lLHRoaXMudWludDE2W2ErMl09cix0aGlzLnVpbnQxNlthKzNdPW4sdH0sZX0oUGkpO0tpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxObigiU3RydWN0QXJyYXlMYXlvdXQxdWwydWk4IixLaSk7dmFyIFFpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShyKzEpLHRoaXMuZW1wbGFjZShyLHQsZSl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdDtyZXR1cm4gdGhpcy51aW50MTZbbiswXT1lLHRoaXMudWludDE2W24rMV09cix0fSxlfShQaSk7UWkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LE5uKCJTdHJ1Y3RBcnJheUxheW91dDJ1aTQiLFFpKTt2YXIgJGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShlKzEpLHRoaXMuZW1wbGFjZShlLHQpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MSp0O3JldHVybiB0aGlzLnVpbnQxNltyKzBdPWUsdH0sZX0oUGkpOyRpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MixObigiU3RydWN0QXJyYXlMYXlvdXQxdWkyIiwkaSk7dmFyIHRhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKHIrMSksdGhpcy5lbXBsYWNlKHIsdCxlKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscil7dmFyIG49Mip0O3JldHVybiB0aGlzLmZsb2F0MzJbbiswXT1lLHRoaXMuZmxvYXQzMltuKzFdPXIsdH0sZX0oUGkpO3RhLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxObigiU3RydWN0QXJyYXlMYXlvdXQyZjgiLHRhKTt2YXIgZWE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKGkrMSksdGhpcy5lbXBsYWNlKGksdCxlLHIsbil9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT00KnQ7cmV0dXJuIHRoaXMuZmxvYXQzMlthKzBdPWUsdGhpcy5mbG9hdDMyW2ErMV09cix0aGlzLmZsb2F0MzJbYSsyXT1uLHRoaXMuZmxvYXQzMlthKzNdPWksdH0sZX0oUGkpO2VhLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTYsTm4oIlN0cnVjdEFycmF5TGF5b3V0NGYxNiIsZWEpO3ZhciByYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2FuY2hvclBvaW50WDp7Y29uZmlndXJhYmxlOiEwfSxhbmNob3JQb2ludFk6e2NvbmZpZ3VyYWJsZTohMH0seDE6e2NvbmZpZ3VyYWJsZTohMH0seTE6e2NvbmZpZ3VyYWJsZTohMH0seDI6e2NvbmZpZ3VyYWJsZTohMH0seTI6e2NvbmZpZ3VyYWJsZTohMH0sZmVhdHVyZUluZGV4Ontjb25maWd1cmFibGU6ITB9LHNvdXJjZUxheWVySW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sYnVja2V0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yUG9pbnQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLmFuY2hvclBvaW50WC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiswXX0sci5hbmNob3JQb2ludFkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV19LHIueDEuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMl19LHIueTEuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrM119LHIueDIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNF19LHIueTIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNV19LHIuZmVhdHVyZUluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCszXX0sci5zb3VyY2VMYXllckluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis4XX0sci5idWNrZXRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOV19LHIuYW5jaG9yUG9pbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpKHRoaXMuYW5jaG9yUG9pbnRYLHRoaXMuYW5jaG9yUG9pbnRZKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0oQ2kpO3JhLnByb3RvdHlwZS5zaXplPTIwO3ZhciBuYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHJhKHRoaXMsdCl9LGV9KFZpKTtObigiQ29sbGlzaW9uQm94QXJyYXkiLG5hKTt2YXIgaWE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXthbmNob3JYOntjb25maWd1cmFibGU6ITB9LGFuY2hvclk6e2NvbmZpZ3VyYWJsZTohMH0sZ2x5cGhTdGFydEluZGV4Ontjb25maWd1cmFibGU6ITB9LG51bUdseXBoczp7Y29uZmlndXJhYmxlOiEwfSx2ZXJ0ZXhTdGFydEluZGV4Ontjb25maWd1cmFibGU6ITB9LGxpbmVTdGFydEluZGV4Ontjb25maWd1cmFibGU6ITB9LGxpbmVMZW5ndGg6e2NvbmZpZ3VyYWJsZTohMH0sc2VnbWVudDp7Y29uZmlndXJhYmxlOiEwfSxsb3dlclNpemU6e2NvbmZpZ3VyYWJsZTohMH0sdXBwZXJTaXplOntjb25maWd1cmFibGU6ITB9LGxpbmVPZmZzZXRYOntjb25maWd1cmFibGU6ITB9LGxpbmVPZmZzZXRZOntjb25maWd1cmFibGU6ITB9LHdyaXRpbmdNb2RlOntjb25maWd1cmFibGU6ITB9LHBsYWNlZE9yaWVudGF0aW9uOntjb25maWd1cmFibGU6ITB9LGhpZGRlbjp7Y29uZmlndXJhYmxlOiEwfSxjcm9zc1RpbGVJRDp7Y29uZmlndXJhYmxlOiEwfSxhc3NvY2lhdGVkSWNvbkluZGV4Ontjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5hbmNob3JYLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdfSxyLmFuY2hvclkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV19LHIuZ2x5cGhTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyXX0sci5udW1HbHlwaHMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzNdfSxyLnZlcnRleFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzJdfSxyLmxpbmVTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCszXX0sci5saW5lTGVuZ3RoLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCs0XX0sci5zZWdtZW50LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMF19LHIubG93ZXJTaXplLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMV19LHIudXBwZXJTaXplLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMl19LHIubGluZU9mZnNldFguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCs3XX0sci5saW5lT2Zmc2V0WS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzhdfSxyLndyaXRpbmdNb2RlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM2XX0sci5wbGFjZWRPcmllbnRhdGlvbi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSszN119LHIucGxhY2VkT3JpZW50YXRpb24uc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzddPXR9LHIuaGlkZGVuLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM4XX0sci5oaWRkZW4uc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzhdPXR9LHIuY3Jvc3NUaWxlSUQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzEwXX0sci5jcm9zc1RpbGVJRC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrMTBdPXR9LHIuYXNzb2NpYXRlZEljb25JbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisyMl19LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KENpKTtpYS5wcm90b3R5cGUuc2l6ZT00ODt2YXIgYWE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpYSh0aGlzLHQpfSxlfShXaSk7Tm4oIlBsYWNlZFN5bWJvbEFycmF5IixhYSk7dmFyIG9hPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17YW5jaG9yWDp7Y29uZmlndXJhYmxlOiEwfSxhbmNob3JZOntjb25maWd1cmFibGU6ITB9LHJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4Ontjb25maWd1cmFibGU6ITB9LGNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxsZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4Ontjb25maWd1cmFibGU6ITB9LHZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4Ontjb25maWd1cmFibGU6ITB9LHBsYWNlZEljb25TeW1ib2xJbmRleDp7Y29uZmlndXJhYmxlOiEwfSx2ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxrZXk6e2NvbmZpZ3VyYWJsZTohMH0sdGV4dEJveFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sdGV4dEJveEVuZEluZGV4Ontjb25maWd1cmFibGU6ITB9LHZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGljYWxUZXh0Qm94RW5kSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0saWNvbkJveFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0saWNvbkJveEVuZEluZGV4Ontjb25maWd1cmFibGU6ITB9LHZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGljYWxJY29uQm94RW5kSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sZmVhdHVyZUluZGV4Ontjb25maWd1cmFibGU6ITB9LG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzOntjb25maWd1cmFibGU6ITB9LG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlczp7Y29uZmlndXJhYmxlOiEwfSxudW1JY29uVmVydGljZXM6e2NvbmZpZ3VyYWJsZTohMH0sbnVtVmVydGljYWxJY29uVmVydGljZXM6e2NvbmZpZ3VyYWJsZTohMH0sdXNlUnVudGltZUNvbGxpc2lvbkNpcmNsZXM6e2NvbmZpZ3VyYWJsZTohMH0sY3Jvc3NUaWxlSUQ6e2NvbmZpZ3VyYWJsZTohMH0sdGV4dEJveFNjYWxlOntjb25maWd1cmFibGU6ITB9LHRleHRPZmZzZXQwOntjb25maWd1cmFibGU6ITB9LHRleHRPZmZzZXQxOntjb25maWd1cmFibGU6ITB9LGNvbGxpc2lvbkNpcmNsZURpYW1ldGVyOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5hbmNob3JYLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdfSxyLmFuY2hvclkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV19LHIucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMl19LHIuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzNdfSxyLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNF19LHIudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNV19LHIucGxhY2VkSWNvblN5bWJvbEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzZdfSxyLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzddfSxyLmtleS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOF19LHIudGV4dEJveFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzldfSxyLnRleHRCb3hFbmRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTBdfSxyLnZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzExXX0sci52ZXJ0aWNhbFRleHRCb3hFbmRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTJdfSxyLmljb25Cb3hTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxM119LHIuaWNvbkJveEVuZEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxNF19LHIudmVydGljYWxJY29uQm94U3RhcnRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTVdfSxyLnZlcnRpY2FsSWNvbkJveEVuZEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxNl19LHIuZmVhdHVyZUluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxN119LHIubnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzE4XX0sci5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzE5XX0sci5udW1JY29uVmVydGljZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzIwXX0sci5udW1WZXJ0aWNhbEljb25WZXJ0aWNlcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMjFdfSxyLnVzZVJ1bnRpbWVDb2xsaXNpb25DaXJjbGVzLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyMl19LHIuY3Jvc3NUaWxlSUQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzEyXX0sci5jcm9zc1RpbGVJRC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrMTJdPXR9LHIudGV4dEJveFNjYWxlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMTNdfSxyLnRleHRPZmZzZXQwLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMTRdfSxyLnRleHRPZmZzZXQxLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMTVdfSxyLmNvbGxpc2lvbkNpcmNsZURpYW1ldGVyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMTZdfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShDaSk7b2EucHJvdG90eXBlLnNpemU9Njg7dmFyIHNhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgb2EodGhpcyx0KX0sZX0oWGkpO05uKCJTeW1ib2xJbnN0YW5jZUFycmF5IixzYSk7dmFyIGxhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0b2Zmc2V0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mbG9hdDMyWzEqdCswXX0sZX0oWmkpO05uKCJHbHlwaE9mZnNldEFycmF5IixsYSk7dmFyIGNhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0eD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnQxNlszKnQrMF19LGUucHJvdG90eXBlLmdldHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW50MTZbMyp0KzFdfSxlLnByb3RvdHlwZS5nZXR0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnQxNlszKnQrMl19LGV9KEppKTtObigiU3ltYm9sTGluZVZlcnRleEFycmF5IixjYSk7dmFyIHVhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17ZmVhdHVyZUluZGV4Ontjb25maWd1cmFibGU6ITB9LHNvdXJjZUxheWVySW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sYnVja2V0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLmZlYXR1cmVJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrMF19LHIuc291cmNlTGF5ZXJJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl19LHIuYnVja2V0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzNdfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShDaSk7dWEucHJvdG90eXBlLnNpemU9ODt2YXIgZmE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB1YSh0aGlzLHQpfSxlfShLaSk7Tm4oIkZlYXR1cmVJbmRleEFycmF5IixmYSk7dmFyIGhhPUlpKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9XSw0KS5tZW1iZXJzLHBhPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnNlZ21lbnRzPXR9O2Z1bmN0aW9uIGRhKHQsZSl7cmV0dXJuIDI1NioodD1sKE1hdGguZmxvb3IodCksMCwyNTUpKSsoZT1sKE1hdGguZmxvb3IoZSksMCwyNTUpKX1wYS5wcm90b3R5cGUucHJlcGFyZVNlZ21lbnQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5zZWdtZW50c1t0aGlzLnNlZ21lbnRzLmxlbmd0aC0xXTtyZXR1cm4gdD5wYS5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCYmXygiTWF4IHZlcnRpY2VzIHBlciBzZWdtZW50IGlzICIrcGEuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgrIjogYnVja2V0IHJlcXVlc3RlZCAiK3QpLCghaXx8aS52ZXJ0ZXhMZW5ndGgrdD5wYS5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSHx8aS5zb3J0S2V5IT09bikmJihpPXt2ZXJ0ZXhPZmZzZXQ6ZS5sZW5ndGgscHJpbWl0aXZlT2Zmc2V0OnIubGVuZ3RoLHZlcnRleExlbmd0aDowLHByaW1pdGl2ZUxlbmd0aDowfSx2b2lkIDAhPT1uJiYoaS5zb3J0S2V5PW4pLHRoaXMuc2VnbWVudHMucHVzaChpKSksaX0scGEucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlZ21lbnRzfSxwYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5zZWdtZW50czt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07Zm9yKHZhciBuIGluIHIudmFvcylyLnZhb3Nbbl0uZGVzdHJveSgpfX0scGEuc2ltcGxlU2VnbWVudD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbmV3IHBhKFt7dmVydGV4T2Zmc2V0OnQscHJpbWl0aXZlT2Zmc2V0OmUsdmVydGV4TGVuZ3RoOnIscHJpbWl0aXZlTGVuZ3RoOm4sdmFvczp7fSxzb3J0S2V5OjB9XSl9LHBhLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIPU1hdGgucG93KDIsMTYpLTEsTm4oIlNlZ21lbnRWZWN0b3IiLHBhKTt2YXIgbWE9SWkoW3tuYW1lOiJhX3BhdHRlcm5fZnJvbSIsY29tcG9uZW50czo0LHR5cGU6IlVpbnQxNiJ9LHtuYW1lOiJhX3BhdHRlcm5fdG8iLGNvbXBvbmVudHM6NCx0eXBlOiJVaW50MTYifSx7bmFtZToiYV9waXhlbF9yYXRpb19mcm9tIixjb21wb25lbnRzOjEsdHlwZToiVWludDgifSx7bmFtZToiYV9waXhlbF9yYXRpb190byIsY29tcG9uZW50czoxLHR5cGU6IlVpbnQ4In1dKSxnYT1lKChmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHMsbCxjO2ZvcihyPTMmdC5sZW5ndGgsbj10Lmxlbmd0aC1yLGk9ZSxvPTM0MzI5MTgzNTMscz00NjE4NDU5MDcsYz0wO2M8bjspbD0yNTUmdC5jaGFyQ29kZUF0KGMpfCgyNTUmdC5jaGFyQ29kZUF0KCsrYykpPDw4fCgyNTUmdC5jaGFyQ29kZUF0KCsrYykpPDwxNnwoMjU1JnQuY2hhckNvZGVBdCgrK2MpKTw8MjQsKytjLGk9Mjc0OTIrKDY1NTM1JihhPTUqKDY1NTM1JihpPShpXj1sPSg2NTUzNSYobD0obD0oNjU1MzUmbCkqbysoKChsPj4+MTYpKm8mNjU1MzUpPDwxNikmNDI5NDk2NzI5NSk8PDE1fGw+Pj4xNykpKnMrKCgobD4+PjE2KSpzJjY1NTM1KTw8MTYpJjQyOTQ5NjcyOTUpPDwxM3xpPj4+MTkpKSsoKDUqKGk+Pj4xNikmNjU1MzUpPDwxNikmNDI5NDk2NzI5NSkpKygoNTg5NjQrKGE+Pj4xNikmNjU1MzUpPDwxNik7c3dpdGNoKGw9MCxyKXtjYXNlIDM6bF49KDI1NSZ0LmNoYXJDb2RlQXQoYysyKSk8PDE2O2Nhc2UgMjpsXj0oMjU1JnQuY2hhckNvZGVBdChjKzEpKTw8ODtjYXNlIDE6aV49bD0oNjU1MzUmKGw9KGw9KDY1NTM1JihsXj0yNTUmdC5jaGFyQ29kZUF0KGMpKSkqbysoKChsPj4+MTYpKm8mNjU1MzUpPDwxNikmNDI5NDk2NzI5NSk8PDE1fGw+Pj4xNykpKnMrKCgobD4+PjE2KSpzJjY1NTM1KTw8MTYpJjQyOTQ5NjcyOTV9cmV0dXJuIGlePXQubGVuZ3RoLGk9MjI0NjgyMjUwNyooNjU1MzUmKGlePWk+Pj4xNikpKygoMjI0NjgyMjUwNyooaT4+PjE2KSY2NTUzNSk8PDE2KSY0Mjk0OTY3Mjk1LGk9MzI2NjQ4OTkwOSooNjU1MzUmKGlePWk+Pj4xMykpKygoMzI2NjQ4OTkwOSooaT4+PjE2KSY2NTUzNSk8PDE2KSY0Mjk0OTY3Mjk1LChpXj1pPj4+MTYpPj4+MH19KSksdmE9ZSgoZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5sZW5ndGgsaT1lXm4sYT0wO24+PTQ7KXI9MTU0MDQ4MzQ3NyooNjU1MzUmKHI9MjU1JnQuY2hhckNvZGVBdChhKXwoMjU1JnQuY2hhckNvZGVBdCgrK2EpKTw8OHwoMjU1JnQuY2hhckNvZGVBdCgrK2EpKTw8MTZ8KDI1NSZ0LmNoYXJDb2RlQXQoKythKSk8PDI0KSkrKCgxNTQwNDgzNDc3KihyPj4+MTYpJjY1NTM1KTw8MTYpLGk9MTU0MDQ4MzQ3NyooNjU1MzUmaSkrKCgxNTQwNDgzNDc3KihpPj4+MTYpJjY1NTM1KTw8MTYpXihyPTE1NDA0ODM0NzcqKDY1NTM1JihyXj1yPj4+MjQpKSsoKDE1NDA0ODM0NzcqKHI+Pj4xNikmNjU1MzUpPDwxNikpLG4tPTQsKythO3N3aXRjaChuKXtjYXNlIDM6aV49KDI1NSZ0LmNoYXJDb2RlQXQoYSsyKSk8PDE2O2Nhc2UgMjppXj0oMjU1JnQuY2hhckNvZGVBdChhKzEpKTw8ODtjYXNlIDE6aT0xNTQwNDgzNDc3Kig2NTUzNSYoaV49MjU1JnQuY2hhckNvZGVBdChhKSkpKygoMTU0MDQ4MzQ3NyooaT4+PjE2KSY2NTUzNSk8PDE2KX1yZXR1cm4gaT0xNTQwNDgzNDc3Kig2NTUzNSYoaV49aT4+PjEzKSkrKCgxNTQwNDgzNDc3KihpPj4+MTYpJjY1NTM1KTw8MTYpLChpXj1pPj4+MTUpPj4+MH19KSkseWE9Z2EseGE9Z2EsYmE9dmE7eWEubXVybXVyMz14YSx5YS5tdXJtdXIyPWJhO3ZhciBfYT1mdW5jdGlvbigpe3RoaXMuaWRzPVtdLHRoaXMucG9zaXRpb25zPVtdLHRoaXMuaW5kZXhlZD0hMX07X2EucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUscixuKXt0aGlzLmlkcy5wdXNoKFRhKHQpKSx0aGlzLnBvc2l0aW9ucy5wdXNoKGUscixuKX0sX2EucHJvdG90eXBlLmdldFBvc2l0aW9ucz1mdW5jdGlvbih0KXtmb3IodmFyIGU9VGEodCkscj0wLG49dGhpcy5pZHMubGVuZ3RoLTE7cjxuOyl7dmFyIGk9cituPj4xO3RoaXMuaWRzW2ldPj1lP249aTpyPWkrMX1mb3IodmFyIGE9W107dGhpcy5pZHNbcl09PT1lOyl7dmFyIG89dGhpcy5wb3NpdGlvbnNbMypyXSxzPXRoaXMucG9zaXRpb25zWzMqcisxXSxsPXRoaXMucG9zaXRpb25zWzMqcisyXTthLnB1c2goe2luZGV4Om8sc3RhcnQ6cyxlbmQ6bH0pLHIrK31yZXR1cm4gYX0sX2Euc2VyaWFsaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IEZsb2F0NjRBcnJheSh0Lmlkcyksbj1uZXcgVWludDMyQXJyYXkodC5wb3NpdGlvbnMpO3JldHVybiBmdW5jdGlvbiB0KGUscixuLGkpe2Zvcig7bjxpOyl7Zm9yKHZhciBhPWVbbitpPj4xXSxvPW4tMSxzPWkrMTs7KXtkb3tvKyt9d2hpbGUoZVtvXTxhKTtkb3tzLS19d2hpbGUoZVtzXT5hKTtpZihvPj1zKWJyZWFrO2thKGUsbyxzKSxrYShyLDMqbywzKnMpLGthKHIsMypvKzEsMypzKzEpLGthKHIsMypvKzIsMypzKzIpfXMtbjxpLXM/KHQoZSxyLG4scyksbj1zKzEpOih0KGUscixzKzEsaSksaT1zKX19KHIsbiwwLHIubGVuZ3RoLTEpLGUmJmUucHVzaChyLmJ1ZmZlcixuLmJ1ZmZlcikse2lkczpyLHBvc2l0aW9uczpufX0sX2EuZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IF9hO3JldHVybiBlLmlkcz10LmlkcyxlLnBvc2l0aW9ucz10LnBvc2l0aW9ucyxlLmluZGV4ZWQ9ITAsZX07dmFyIHdhPU1hdGgucG93KDIsNTMpLTE7ZnVuY3Rpb24gVGEodCl7dmFyIGU9K3Q7cmV0dXJuIWlzTmFOKGUpJiZlPD13YT9lOnlhKFN0cmluZyh0KSl9ZnVuY3Rpb24ga2EodCxlLHIpe3ZhciBuPXRbZV07dFtlXT10W3JdLHRbcl09bn1ObigiRmVhdHVyZVBvc2l0aW9uTWFwIixfYSk7dmFyIEFhPWZ1bmN0aW9uKHQsZSl7dGhpcy5nbD10LmdsLHRoaXMubG9jYXRpb249ZX0sTWE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5jdXJyZW50PTB9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiYodGhpcy5jdXJyZW50PXQsdGhpcy5nbC51bmlmb3JtMWkodGhpcy5sb2NhdGlvbix0KSl9LGV9KEFhKSxTYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsZSxyKSx0aGlzLmN1cnJlbnQ9MH1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmN1cnJlbnQ9dCx0aGlzLmdsLnVuaWZvcm0xZih0aGlzLmxvY2F0aW9uLHQpKX0sZX0oQWEpLEVhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuY3VycmVudD1bMCwwXX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RbMF09PT10aGlzLmN1cnJlbnRbMF0mJnRbMV09PT10aGlzLmN1cnJlbnRbMV18fCh0aGlzLmN1cnJlbnQ9dCx0aGlzLmdsLnVuaWZvcm0yZih0aGlzLmxvY2F0aW9uLHRbMF0sdFsxXSkpfSxlfShBYSksTGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5jdXJyZW50PVswLDAsMF19cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0WzBdPT09dGhpcy5jdXJyZW50WzBdJiZ0WzFdPT09dGhpcy5jdXJyZW50WzFdJiZ0WzJdPT09dGhpcy5jdXJyZW50WzJdfHwodGhpcy5jdXJyZW50PXQsdGhpcy5nbC51bmlmb3JtM2YodGhpcy5sb2NhdGlvbix0WzBdLHRbMV0sdFsyXSkpfSxlfShBYSksQ2E9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5jdXJyZW50PVswLDAsMCwwXX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RbMF09PT10aGlzLmN1cnJlbnRbMF0mJnRbMV09PT10aGlzLmN1cnJlbnRbMV0mJnRbMl09PT10aGlzLmN1cnJlbnRbMl0mJnRbM109PT10aGlzLmN1cnJlbnRbM118fCh0aGlzLmN1cnJlbnQ9dCx0aGlzLmdsLnVuaWZvcm00Zih0aGlzLmxvY2F0aW9uLHRbMF0sdFsxXSx0WzJdLHRbM10pKX0sZX0oQWEpLFBhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuY3VycmVudD10ZS50cmFuc3BhcmVudH1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3Qucj09PXRoaXMuY3VycmVudC5yJiZ0Lmc9PT10aGlzLmN1cnJlbnQuZyYmdC5iPT09dGhpcy5jdXJyZW50LmImJnQuYT09PXRoaXMuY3VycmVudC5hfHwodGhpcy5jdXJyZW50PXQsdGhpcy5nbC51bmlmb3JtNGYodGhpcy5sb2NhdGlvbix0LnIsdC5nLHQuYix0LmEpKX0sZX0oQWEpLElhPW5ldyBGbG9hdDMyQXJyYXkoMTYpLE9hPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuY3VycmVudD1JYX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRbMTJdIT09dGhpcy5jdXJyZW50WzEyXXx8dFswXSE9PXRoaXMuY3VycmVudFswXSlyZXR1cm4gdGhpcy5jdXJyZW50PXQsdm9pZCB0aGlzLmdsLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5sb2NhdGlvbiwhMSx0KTtmb3IodmFyIGU9MTtlPDE2O2UrKylpZih0W2VdIT09dGhpcy5jdXJyZW50W2VdKXt0aGlzLmN1cnJlbnQ9dCx0aGlzLmdsLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5sb2NhdGlvbiwhMSx0KTticmVha319LGV9KEFhKTtmdW5jdGlvbiB6YSh0KXtyZXR1cm5bZGEoMjU1KnQuciwyNTUqdC5nKSxkYSgyNTUqdC5iLDI1NSp0LmEpXX12YXIgRGE9ZnVuY3Rpb24odCxlLHIpe3RoaXMudmFsdWU9dCx0aGlzLnVuaWZvcm1OYW1lcz1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuInVfIit0fSkpLHRoaXMudHlwZT1yfTtEYS5wcm90b3R5cGUuc2V0VW5pZm9ybT1mdW5jdGlvbih0LGUscil7dC5zZXQoci5jb25zdGFudE9yKHRoaXMudmFsdWUpKX0sRGEucHJvdG90eXBlLmdldEJpbmRpbmc9ZnVuY3Rpb24odCxlLHIpe3JldHVybiJjb2xvciI9PT10aGlzLnR5cGU/bmV3IFBhKHQsZSk6bmV3IFNhKHQsZSl9O3ZhciBSYT1mdW5jdGlvbih0LGUpe3RoaXMudW5pZm9ybU5hbWVzPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4idV8iK3R9KSksdGhpcy5wYXR0ZXJuRnJvbT1udWxsLHRoaXMucGF0dGVyblRvPW51bGwsdGhpcy5waXhlbFJhdGlvRnJvbT0xLHRoaXMucGl4ZWxSYXRpb1RvPTF9O1JhLnByb3RvdHlwZS5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnM9ZnVuY3Rpb24odCxlKXt0aGlzLnBpeGVsUmF0aW9Gcm9tPWUucGl4ZWxSYXRpbyx0aGlzLnBpeGVsUmF0aW9Ubz10LnBpeGVsUmF0aW8sdGhpcy5wYXR0ZXJuRnJvbT1lLnRsYnIsdGhpcy5wYXR0ZXJuVG89dC50bGJyfSxSYS5wcm90b3R5cGUuc2V0VW5pZm9ybT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT0idV9wYXR0ZXJuX3RvIj09PW4/dGhpcy5wYXR0ZXJuVG86InVfcGF0dGVybl9mcm9tIj09PW4/dGhpcy5wYXR0ZXJuRnJvbToidV9waXhlbF9yYXRpb190byI9PT1uP3RoaXMucGl4ZWxSYXRpb1RvOiJ1X3BpeGVsX3JhdGlvX2Zyb20iPT09bj90aGlzLnBpeGVsUmF0aW9Gcm9tOm51bGw7aSYmdC5zZXQoaSl9LFJhLnByb3RvdHlwZS5nZXRCaW5kaW5nPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4idV9wYXR0ZXJuIj09PXIuc3Vic3RyKDAsOSk/bmV3IENhKHQsZSk6bmV3IFNhKHQsZSl9O3ZhciBGYT1mdW5jdGlvbih0LGUscixuKXt0aGlzLmV4cHJlc3Npb249dCx0aGlzLnR5cGU9cix0aGlzLm1heFZhbHVlPTAsdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXM9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntuYW1lOiJhXyIrdCx0eXBlOiJGbG9hdDMyIixjb21wb25lbnRzOiJjb2xvciI9PT1yPzI6MSxvZmZzZXQ6MH19KSksdGhpcy5wYWludFZlcnRleEFycmF5PW5ldyBufTtGYS5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5wYWludFZlcnRleEFycmF5Lmxlbmd0aCxvPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgcGkoMCksZSx7fSxuLFtdLGkpO3RoaXMucGFpbnRWZXJ0ZXhBcnJheS5yZXNpemUodCksdGhpcy5fc2V0UGFpbnRWYWx1ZShhLHQsbyl9LEZhLnByb3RvdHlwZS51cGRhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTowfSxyLG4pO3RoaXMuX3NldFBhaW50VmFsdWUodCxlLGkpfSxGYS5wcm90b3R5cGUuX3NldFBhaW50VmFsdWU9ZnVuY3Rpb24odCxlLHIpe2lmKCJjb2xvciI9PT10aGlzLnR5cGUpZm9yKHZhciBuPXphKHIpLGk9dDtpPGU7aSsrKXRoaXMucGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKGksblswXSxuWzFdKTtlbHNle2Zvcih2YXIgYT10O2E8ZTthKyspdGhpcy5wYWludFZlcnRleEFycmF5LmVtcGxhY2UoYSxyKTt0aGlzLm1heFZhbHVlPU1hdGgubWF4KHRoaXMubWF4VmFsdWUsTWF0aC5hYnMocikpfX0sRmEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnBhaW50VmVydGV4QXJyYXkmJnRoaXMucGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlciYmKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuYnVmZmVyP3RoaXMucGFpbnRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLnBhaW50VmVydGV4QXJyYXkpOnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5wYWludFZlcnRleEFycmF5LHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzLHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KSl9LEZhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wYWludFZlcnRleEJ1ZmZlciYmdGhpcy5wYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCl9O3ZhciBCYT1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5leHByZXNzaW9uPXQsdGhpcy51bmlmb3JtTmFtZXM9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiJ1XyIrdCsiX3QifSkpLHRoaXMudHlwZT1yLHRoaXMudXNlSW50ZWdlclpvb209bix0aGlzLnpvb209aSx0aGlzLm1heFZhbHVlPTAsdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXM9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntuYW1lOiJhXyIrdCx0eXBlOiJGbG9hdDMyIixjb21wb25lbnRzOiJjb2xvciI9PT1yPzQ6MixvZmZzZXQ6MH19KSksdGhpcy5wYWludFZlcnRleEFycmF5PW5ldyBhfTtCYS5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBwaSh0aGlzLnpvb20pLGUse30sbixbXSxpKSxvPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgcGkodGhpcy56b29tKzEpLGUse30sbixbXSxpKSxzPXRoaXMucGFpbnRWZXJ0ZXhBcnJheS5sZW5ndGg7dGhpcy5wYWludFZlcnRleEFycmF5LnJlc2l6ZSh0KSx0aGlzLl9zZXRQYWludFZhbHVlKHMsdCxhLG8pfSxCYS5wcm90b3R5cGUudXBkYXRlUGFpbnRBcnJheT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206dGhpcy56b29tfSxyLG4pLGE9dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOnRoaXMuem9vbSsxfSxyLG4pO3RoaXMuX3NldFBhaW50VmFsdWUodCxlLGksYSl9LEJhLnByb3RvdHlwZS5fc2V0UGFpbnRWYWx1ZT1mdW5jdGlvbih0LGUscixuKXtpZigiY29sb3IiPT09dGhpcy50eXBlKWZvcih2YXIgaT16YShyKSxhPXphKG4pLG89dDtvPGU7bysrKXRoaXMucGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKG8saVswXSxpWzFdLGFbMF0sYVsxXSk7ZWxzZXtmb3IodmFyIHM9dDtzPGU7cysrKXRoaXMucGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKHMscixuKTt0aGlzLm1heFZhbHVlPU1hdGgubWF4KHRoaXMubWF4VmFsdWUsTWF0aC5hYnMociksTWF0aC5hYnMobikpfX0sQmEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnBhaW50VmVydGV4QXJyYXkmJnRoaXMucGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlciYmKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuYnVmZmVyP3RoaXMucGFpbnRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLnBhaW50VmVydGV4QXJyYXkpOnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5wYWludFZlcnRleEFycmF5LHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzLHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KSl9LEJhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wYWludFZlcnRleEJ1ZmZlciYmdGhpcy5wYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCl9LEJhLnByb3RvdHlwZS5zZXRVbmlmb3JtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy51c2VJbnRlZ2VyWm9vbT9NYXRoLmZsb29yKGUuem9vbSk6ZS56b29tLG49bCh0aGlzLmV4cHJlc3Npb24uaW50ZXJwb2xhdGlvbkZhY3RvcihyLHRoaXMuem9vbSx0aGlzLnpvb20rMSksMCwxKTt0LnNldChuKX0sQmEucHJvdG90eXBlLmdldEJpbmRpbmc9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgU2EodCxlKX07dmFyIE5hPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLmV4cHJlc3Npb249dCx0aGlzLnR5cGU9ZSx0aGlzLnVzZUludGVnZXJab29tPXIsdGhpcy56b29tPW4sdGhpcy5sYXllcklkPWEsdGhpcy56b29tSW5QYWludFZlcnRleEFycmF5PW5ldyBpLHRoaXMuem9vbU91dFBhaW50VmVydGV4QXJyYXk9bmV3IGl9O05hLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheS5sZW5ndGg7dGhpcy56b29tSW5QYWludFZlcnRleEFycmF5LnJlc2l6ZSh0KSx0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LnJlc2l6ZSh0KSx0aGlzLl9zZXRQYWludFZhbHVlcyhuLHQsZS5wYXR0ZXJucyYmZS5wYXR0ZXJuc1t0aGlzLmxheWVySWRdLHIpfSxOYS5wcm90b3R5cGUudXBkYXRlUGFpbnRBcnJheT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMuX3NldFBhaW50VmFsdWVzKHQsZSxyLnBhdHRlcm5zJiZyLnBhdHRlcm5zW3RoaXMubGF5ZXJJZF0saSl9LE5hLnByb3RvdHlwZS5fc2V0UGFpbnRWYWx1ZXM9ZnVuY3Rpb24odCxlLHIsbil7aWYobiYmcil7dmFyIGk9ci5taW4sYT1yLm1pZCxvPXIubWF4LHM9bltpXSxsPW5bYV0sYz1uW29dO2lmKHMmJmwmJmMpZm9yKHZhciB1PXQ7dTxlO3UrKyl0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXkuZW1wbGFjZSh1LGwudGxbMF0sbC50bFsxXSxsLmJyWzBdLGwuYnJbMV0scy50bFswXSxzLnRsWzFdLHMuYnJbMF0scy5iclsxXSxsLnBpeGVsUmF0aW8scy5waXhlbFJhdGlvKSx0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LmVtcGxhY2UodSxsLnRsWzBdLGwudGxbMV0sbC5iclswXSxsLmJyWzFdLGMudGxbMF0sYy50bFsxXSxjLmJyWzBdLGMuYnJbMV0sbC5waXhlbFJhdGlvLGMucGl4ZWxSYXRpbyl9fSxOYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheSYmdGhpcy56b29tSW5QYWludFZlcnRleEFycmF5LmFycmF5QnVmZmVyJiZ0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5JiZ0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LmFycmF5QnVmZmVyJiYodGhpcy56b29tSW5QYWludFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXksbWEubWVtYmVycyx0aGlzLmV4cHJlc3Npb24uaXNTdGF0ZURlcGVuZGVudCksdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheSxtYS5tZW1iZXJzLHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KSl9LE5hLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMuem9vbU91dFBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnpvb21JblBhaW50VmVydGV4QnVmZmVyJiZ0aGlzLnpvb21JblBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKX07dmFyIGphPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuYmluZGVycz17fSx0aGlzLmxheW91dEF0dHJpYnV0ZXM9bix0aGlzLl9idWZmZXJzPVtdO3ZhciBpPVtdO2Zvcih2YXIgYSBpbiB0LnBhaW50Ll92YWx1ZXMpaWYocihhKSl7dmFyIG89dC5wYWludC5nZXQoYSk7aWYobyBpbnN0YW5jZW9mIGJpJiZ6cihvLnByb3BlcnR5LnNwZWNpZmljYXRpb24pKXt2YXIgcz1WYShhLHQudHlwZSksbD1vLnZhbHVlLGM9by5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLnR5cGUsdT1vLnByb3BlcnR5LnVzZUludGVnZXJab29tLGY9by5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uWyJwcm9wZXJ0eS10eXBlIl0saD0iY3Jvc3MtZmFkZWQiPT09Znx8ImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIj09PWY7aWYoImNvbnN0YW50Ij09PWwua2luZCl0aGlzLmJpbmRlcnNbYV09aD9uZXcgUmEobC52YWx1ZSxzKTpuZXcgRGEobC52YWx1ZSxzLGMpLGkucHVzaCgiL3VfIithKTtlbHNlIGlmKCJzb3VyY2UiPT09bC5raW5kfHxoKXt2YXIgcD1IYShhLGMsInNvdXJjZSIpO3RoaXMuYmluZGVyc1thXT1oP25ldyBOYShsLGMsdSxlLHAsdC5pZCk6bmV3IEZhKGwscyxjLHApLGkucHVzaCgiL2FfIithKX1lbHNle3ZhciBkPUhhKGEsYywiY29tcG9zaXRlIik7dGhpcy5iaW5kZXJzW2FdPW5ldyBCYShsLHMsYyx1LGUsZCksaS5wdXNoKCIvel8iK2EpfX19dGhpcy5jYWNoZUtleT1pLnNvcnQoKS5qb2luKCIiKX07amEucHJvdG90eXBlLmdldE1heFZhbHVlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYmluZGVyc1t0XTtyZXR1cm4gZSBpbnN0YW5jZW9mIEZhfHxlIGluc3RhbmNlb2YgQmE/ZS5tYXhWYWx1ZTowfSxqYS5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5cz1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYSBpbiB0aGlzLmJpbmRlcnMpe3ZhciBvPXRoaXMuYmluZGVyc1thXTsobyBpbnN0YW5jZW9mIEZhfHxvIGluc3RhbmNlb2YgQmF8fG8gaW5zdGFuY2VvZiBOYSkmJm8ucG9wdWxhdGVQYWludEFycmF5KHQsZSxyLG4saSl9fSxqYS5wcm90b3R5cGUuc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHRoaXMuYmluZGVycyl7dmFyIG49dGhpcy5iaW5kZXJzW3JdO24gaW5zdGFuY2VvZiBSYSYmbi5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnModCxlKX19LGphLnByb3RvdHlwZS51cGRhdGVQYWludEFycmF5cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPSExO2Zvcih2YXIgbyBpbiB0KWZvcih2YXIgcz0wLGw9ZS5nZXRQb3NpdGlvbnMobyk7czxsLmxlbmd0aDtzKz0xKXt2YXIgYz1sW3NdLHU9ci5mZWF0dXJlKGMuaW5kZXgpO2Zvcih2YXIgZiBpbiB0aGlzLmJpbmRlcnMpe3ZhciBoPXRoaXMuYmluZGVyc1tmXTtpZigoaCBpbnN0YW5jZW9mIEZhfHxoIGluc3RhbmNlb2YgQmF8fGggaW5zdGFuY2VvZiBOYSkmJiEwPT09aC5leHByZXNzaW9uLmlzU3RhdGVEZXBlbmRlbnQpe3ZhciBwPW4ucGFpbnQuZ2V0KGYpO2guZXhwcmVzc2lvbj1wLnZhbHVlLGgudXBkYXRlUGFpbnRBcnJheShjLnN0YXJ0LGMuZW5kLHUsdFtvXSxpKSxhPSEwfX19cmV0dXJuIGF9LGphLnByb3RvdHlwZS5kZWZpbmVzPWZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuYmluZGVycyl7dmFyIHI9dGhpcy5iaW5kZXJzW2VdOyhyIGluc3RhbmNlb2YgRGF8fHIgaW5zdGFuY2VvZiBSYSkmJnQucHVzaC5hcHBseSh0LHIudW5pZm9ybU5hbWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIiNkZWZpbmUgSEFTX1VOSUZPUk1fIit0fSkpKX1yZXR1cm4gdH0samEucHJvdG90eXBlLmdldFBhaW50VmVydGV4QnVmZmVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9idWZmZXJzfSxqYS5wcm90b3R5cGUuZ2V0VW5pZm9ybXM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtmb3IodmFyIG4gaW4gdGhpcy5iaW5kZXJzKXt2YXIgaT10aGlzLmJpbmRlcnNbbl07aWYoaSBpbnN0YW5jZW9mIERhfHxpIGluc3RhbmNlb2YgUmF8fGkgaW5zdGFuY2VvZiBCYSlmb3IodmFyIGE9MCxvPWkudW5pZm9ybU5hbWVzO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXTtpZihlW3NdKXt2YXIgbD1pLmdldEJpbmRpbmcodCxlW3NdLHMpO3IucHVzaCh7bmFtZTpzLHByb3BlcnR5Om4sYmluZGluZzpsfSl9fX1yZXR1cm4gcn0samEucHJvdG90eXBlLnNldFVuaWZvcm1zPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz1vLm5hbWUsbD1vLnByb3BlcnR5LGM9by5iaW5kaW5nO3RoaXMuYmluZGVyc1tsXS5zZXRVbmlmb3JtKGMsbixyLmdldChsKSxzKX19LGphLnByb3RvdHlwZS51cGRhdGVQYWludEJ1ZmZlcnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuX2J1ZmZlcnM9W10sdGhpcy5iaW5kZXJzKXt2YXIgcj10aGlzLmJpbmRlcnNbZV07aWYodCYmciBpbnN0YW5jZW9mIE5hKXt2YXIgbj0yPT09dC5mcm9tU2NhbGU/ci56b29tSW5QYWludFZlcnRleEJ1ZmZlcjpyLnpvb21PdXRQYWludFZlcnRleEJ1ZmZlcjtuJiZ0aGlzLl9idWZmZXJzLnB1c2gobil9ZWxzZShyIGluc3RhbmNlb2YgRmF8fHIgaW5zdGFuY2VvZiBCYSkmJnIucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMuX2J1ZmZlcnMucHVzaChyLnBhaW50VmVydGV4QnVmZmVyKX19LGphLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuYmluZGVycyl7dmFyIHI9dGhpcy5iaW5kZXJzW2VdOyhyIGluc3RhbmNlb2YgRmF8fHIgaW5zdGFuY2VvZiBCYXx8ciBpbnN0YW5jZW9mIE5hKSYmci51cGxvYWQodCl9dGhpcy51cGRhdGVQYWludEJ1ZmZlcnMoKX0samEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5iaW5kZXJzKXt2YXIgZT10aGlzLmJpbmRlcnNbdF07KGUgaW5zdGFuY2VvZiBGYXx8ZSBpbnN0YW5jZW9mIEJhfHxlIGluc3RhbmNlb2YgTmEpJiZlLmRlc3Ryb3koKX19O3ZhciBVYT1mdW5jdGlvbih0LGUscixuKXt2b2lkIDA9PT1uJiYobj1mdW5jdGlvbigpe3JldHVybiEwfSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9e307Zm9yKHZhciBpPTAsYT1lO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTt0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1tvLmlkXT1uZXcgamEobyxyLG4sdCl9dGhpcy5uZWVkc1VwbG9hZD0hMSx0aGlzLl9mZWF0dXJlTWFwPW5ldyBfYSx0aGlzLl9idWZmZXJPZmZzZXQ9MH07ZnVuY3Rpb24gVmEodCxlKXtyZXR1cm57InRleHQtb3BhY2l0eSI6WyJvcGFjaXR5Il0sImljb24tb3BhY2l0eSI6WyJvcGFjaXR5Il0sInRleHQtY29sb3IiOlsiZmlsbF9jb2xvciJdLCJpY29uLWNvbG9yIjpbImZpbGxfY29sb3IiXSwidGV4dC1oYWxvLWNvbG9yIjpbImhhbG9fY29sb3IiXSwiaWNvbi1oYWxvLWNvbG9yIjpbImhhbG9fY29sb3IiXSwidGV4dC1oYWxvLWJsdXIiOlsiaGFsb19ibHVyIl0sImljb24taGFsby1ibHVyIjpbImhhbG9fYmx1ciJdLCJ0ZXh0LWhhbG8td2lkdGgiOlsiaGFsb193aWR0aCJdLCJpY29uLWhhbG8td2lkdGgiOlsiaGFsb193aWR0aCJdLCJsaW5lLWdhcC13aWR0aCI6WyJnYXB3aWR0aCJdLCJsaW5lLXBhdHRlcm4iOlsicGF0dGVybl90byIsInBhdHRlcm5fZnJvbSIsInBpeGVsX3JhdGlvX3RvIiwicGl4ZWxfcmF0aW9fZnJvbSJdLCJmaWxsLXBhdHRlcm4iOlsicGF0dGVybl90byIsInBhdHRlcm5fZnJvbSIsInBpeGVsX3JhdGlvX3RvIiwicGl4ZWxfcmF0aW9fZnJvbSJdLCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuIjpbInBhdHRlcm5fdG8iLCJwYXR0ZXJuX2Zyb20iLCJwaXhlbF9yYXRpb190byIsInBpeGVsX3JhdGlvX2Zyb20iXX1bdF18fFt0LnJlcGxhY2UoZSsiLSIsIiIpLnJlcGxhY2UoLy0vZywiXyIpXX1mdW5jdGlvbiBIYSh0LGUscil7dmFyIG49e2NvbG9yOntzb3VyY2U6dGEsY29tcG9zaXRlOmVhfSxudW1iZXI6e3NvdXJjZTpaaSxjb21wb3NpdGU6dGF9fSxpPWZ1bmN0aW9uKHQpe3JldHVybnsibGluZS1wYXR0ZXJuIjp7c291cmNlOkJpLGNvbXBvc2l0ZTpCaX0sImZpbGwtcGF0dGVybiI6e3NvdXJjZTpCaSxjb21wb3NpdGU6Qml9LCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuIjp7c291cmNlOkJpLGNvbXBvc2l0ZTpCaX19W3RdfSh0KTtyZXR1cm4gaSYmaVtyXXx8bltlXVtyXX1VYS5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5cz1mdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvIGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW29dLnBvcHVsYXRlUGFpbnRBcnJheXModCxlLG4saSxhKTt2b2lkIDAhPT1lLmlkJiZ0aGlzLl9mZWF0dXJlTWFwLmFkZChlLmlkLHIsdGhpcy5fYnVmZmVyT2Zmc2V0LHQpLHRoaXMuX2J1ZmZlck9mZnNldD10LHRoaXMubmVlZHNVcGxvYWQ9ITB9LFVhLnByb3RvdHlwZS51cGRhdGVQYWludEFycmF5cz1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MCxhPXI7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO3RoaXMubmVlZHNVcGxvYWQ9dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbby5pZF0udXBkYXRlUGFpbnRBcnJheXModCx0aGlzLl9mZWF0dXJlTWFwLGUsbyxuKXx8dGhpcy5uZWVkc1VwbG9hZH19LFVhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW3RdfSxVYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe2lmKHRoaXMubmVlZHNVcGxvYWQpe2Zvcih2YXIgZSBpbiB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucyl0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1tlXS51cGxvYWQodCk7dGhpcy5uZWVkc1VwbG9hZD0hMX19LFVhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW3RdLmRlc3Ryb3koKX0sTm4oIkNvbnN0YW50QmluZGVyIixEYSksTm4oIkNyb3NzRmFkZWRDb25zdGFudEJpbmRlciIsUmEpLE5uKCJTb3VyY2VFeHByZXNzaW9uQmluZGVyIixGYSksTm4oIkNyb3NzRmFkZWRDb21wb3NpdGVCaW5kZXIiLE5hKSxObigiQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlciIsQmEpLE5uKCJQcm9ncmFtQ29uZmlndXJhdGlvbiIsamEse29taXQ6WyJfYnVmZmVycyJdfSksTm4oIlByb2dyYW1Db25maWd1cmF0aW9uU2V0IixVYSk7dmFyIHFhLEdhPShxYT0xNSx7bWluOi0xKk1hdGgucG93KDIscWEtMSksbWF4Ok1hdGgucG93KDIscWEtMSktMX0pO2Z1bmN0aW9uIFlhKHQpe2Zvcih2YXIgZT04MTkyL3QuZXh0ZW50LHI9dC5sb2FkR2VvbWV0cnkoKSxuPTA7bjxyLmxlbmd0aDtuKyspZm9yKHZhciBpPXJbbl0sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO28ueD1NYXRoLnJvdW5kKG8ueCplKSxvLnk9TWF0aC5yb3VuZChvLnkqZSksKG8ueDxHYS5taW58fG8ueD5HYS5tYXh8fG8ueTxHYS5taW58fG8ueT5HYS5tYXgpJiYoXygiR2VvbWV0cnkgZXhjZWVkcyBhbGxvd2VkIGV4dGVudCwgcmVkdWNlIHlvdXIgdmVjdG9yIHRpbGUgYnVmZmVyIHNpemUiKSxvLng9bChvLngsR2EubWluLEdhLm1heCksby55PWwoby55LEdhLm1pbixHYS5tYXgpKX1yZXR1cm4gcn1mdW5jdGlvbiBXYSh0LGUscixuLGkpe3QuZW1wbGFjZUJhY2soMiplKyhuKzEpLzIsMipyKyhpKzEpLzIpfXZhciBYYT1mdW5jdGlvbih0KXt0aGlzLnpvb209dC56b29tLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmxheWVycz10LmxheWVycyx0aGlzLmxheWVySWRzPXRoaXMubGF5ZXJzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMuaGFzUGF0dGVybj0hMSx0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyB6aSx0aGlzLmluZGV4QXJyYXk9bmV3IFlpLHRoaXMuc2VnbWVudHM9bmV3IHBhLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPW5ldyBVYShoYSx0LmxheWVycyx0Lnpvb20pLHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcz10aGlzLmxheWVycy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlzU3RhdGVEZXBlbmRlbnQoKX0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpfTtmdW5jdGlvbiBaYSh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKGlvKGUsdFtyXSkpcmV0dXJuITA7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoaW8odCxlW25dKSlyZXR1cm4hMDtyZXR1cm4hISRhKHQsZSl9ZnVuY3Rpb24gSmEodCxlLHIpe3JldHVybiEhaW8odCxlKXx8ISFlbyhlLHQscil9ZnVuY3Rpb24gS2EodCxlKXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIG5vKGUsdFswXSk7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspZm9yKHZhciBuPWVbcl0saT0wO2k8bi5sZW5ndGg7aSsrKWlmKGlvKHQsbltpXSkpcmV0dXJuITA7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspaWYobm8oZSx0W2FdKSlyZXR1cm4hMDtmb3IodmFyIG89MDtvPGUubGVuZ3RoO28rKylpZigkYSh0LGVbb10pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFFhKHQsZSxyKXtpZih0Lmxlbmd0aD4xKXtpZigkYSh0LGUpKXJldHVybiEwO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKGVvKGVbbl0sdCxyKSlyZXR1cm4hMH1mb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKylpZihlbyh0W2ldLGUscikpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gJGEodCxlKXtpZigwPT09dC5sZW5ndGh8fDA9PT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoLTE7cisrKWZvcih2YXIgbj10W3JdLGk9dFtyKzFdLGE9MDthPGUubGVuZ3RoLTE7YSsrKXtpZih0byhuLGksZVthXSxlW2ErMV0pKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHRvKHQsZSxyLG4pe3JldHVybiB3KHQscixuKSE9PXcoZSxyLG4pJiZ3KHQsZSxyKSE9PXcodCxlLG4pfWZ1bmN0aW9uIGVvKHQsZSxyKXt2YXIgbj1yKnI7aWYoMT09PWUubGVuZ3RoKXJldHVybiB0LmRpc3RTcXIoZVswXSk8bjtmb3IodmFyIGk9MTtpPGUubGVuZ3RoO2krKyl7aWYocm8odCxlW2ktMV0sZVtpXSk8bilyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBybyh0LGUscil7dmFyIG49ZS5kaXN0U3FyKHIpO2lmKDA9PT1uKXJldHVybiB0LmRpc3RTcXIoZSk7dmFyIGk9KCh0LngtZS54KSooci54LWUueCkrKHQueS1lLnkpKihyLnktZS55KSkvbjtyZXR1cm4gaTwwP3QuZGlzdFNxcihlKTppPjE/dC5kaXN0U3FyKHIpOnQuZGlzdFNxcihyLnN1YihlKS5fbXVsdChpKS5fYWRkKGUpKX1mdW5jdGlvbiBubyh0LGUpe2Zvcih2YXIgcixuLGksYT0hMSxvPTA7bzx0Lmxlbmd0aDtvKyspZm9yKHZhciBzPTAsbD0ocj10W29dKS5sZW5ndGgtMTtzPHIubGVuZ3RoO2w9cysrKW49cltzXSxpPXJbbF0sbi55PmUueSE9aS55PmUueSYmZS54PChpLngtbi54KSooZS55LW4ueSkvKGkueS1uLnkpK24ueCYmKGE9IWEpO3JldHVybiBhfWZ1bmN0aW9uIGlvKHQsZSl7Zm9yKHZhciByPSExLG49MCxpPXQubGVuZ3RoLTE7bjx0Lmxlbmd0aDtpPW4rKyl7dmFyIGE9dFtuXSxvPXRbaV07YS55PmUueSE9by55PmUueSYmZS54PChvLngtYS54KSooZS55LWEueSkvKG8ueS1hLnkpK2EueCYmKHI9IXIpfXJldHVybiByfWZ1bmN0aW9uIGFvKHQsZSxyKXt2YXIgbj1yWzBdLGk9clsyXTtpZih0Lng8bi54JiZlLng8bi54fHx0Lng+aS54JiZlLng+aS54fHx0Lnk8bi55JiZlLnk8bi55fHx0Lnk+aS55JiZlLnk+aS55KXJldHVybiExO3ZhciBhPXcodCxlLHJbMF0pO3JldHVybiBhIT09dyh0LGUsclsxXSl8fGEhPT13KHQsZSxyWzJdKXx8YSE9PXcodCxlLHJbM10pfWZ1bmN0aW9uIG9vKHQsZSxyKXt2YXIgbj1lLnBhaW50LmdldCh0KS52YWx1ZTtyZXR1cm4iY29uc3RhbnQiPT09bi5raW5kP24udmFsdWU6ci5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGUuaWQpLmdldE1heFZhbHVlKHQpfWZ1bmN0aW9uIHNvKHQpe3JldHVybiBNYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSl9ZnVuY3Rpb24gbG8odCxlLHIsbixhKXtpZighZVswXSYmIWVbMV0pcmV0dXJuIHQ7dmFyIG89aS5jb252ZXJ0KGUpLl9tdWx0KGEpOyJ2aWV3cG9ydCI9PT1yJiZvLl9yb3RhdGUoLW4pO2Zvcih2YXIgcz1bXSxsPTA7bDx0Lmxlbmd0aDtsKyspe3ZhciBjPXRbbF07cy5wdXNoKGMuc3ViKG8pKX1yZXR1cm4gc31YYS5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGF5ZXJzWzBdLGk9W10sYT1udWxsOyJjaXJjbGUiPT09bi50eXBlJiYoYT1uLmxheW91dC5nZXQoImNpcmNsZS1zb3J0LWtleSIpKTtmb3IodmFyIG89MCxzPXQ7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dLGM9bC5mZWF0dXJlLHU9bC5pZCxmPWwuaW5kZXgsaD1sLnNvdXJjZUxheWVySW5kZXgscD10aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5uZWVkR2VvbWV0cnksZD17dHlwZTpjLnR5cGUsaWQ6dSxwcm9wZXJ0aWVzOmMucHJvcGVydGllcyxnZW9tZXRyeTpwP1lhKGMpOltdfTtpZih0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5maWx0ZXIobmV3IHBpKHRoaXMuem9vbSksZCxyKSl7cHx8KGQuZ2VvbWV0cnk9WWEoYykpO3ZhciBtPWE/YS5ldmFsdWF0ZShkLHt9LHIpOnZvaWQgMCxnPXtpZDp1LHByb3BlcnRpZXM6Yy5wcm9wZXJ0aWVzLHR5cGU6Yy50eXBlLHNvdXJjZUxheWVySW5kZXg6aCxpbmRleDpmLGdlb21ldHJ5OmQuZ2VvbWV0cnkscGF0dGVybnM6e30sc29ydEtleTptfTtpLnB1c2goZyl9fWEmJmkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zb3J0S2V5LWUuc29ydEtleX0pKTtmb3IodmFyIHY9MCx5PWk7djx5Lmxlbmd0aDt2Kz0xKXt2YXIgeD15W3ZdLGI9eCxfPWIuZ2VvbWV0cnksdz1iLmluZGV4LFQ9Yi5zb3VyY2VMYXllckluZGV4LGs9dFt3XS5mZWF0dXJlO3RoaXMuYWRkRmVhdHVyZSh4LF8sdyxyKSxlLmZlYXR1cmVJbmRleC5pbnNlcnQoayxfLHcsVCx0aGlzLmluZGV4KX19LFhhLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMubGVuZ3RoJiZ0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyh0LGUsdGhpcy5zdGF0ZURlcGVuZGVudExheWVycyxyKX0sWGEucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RofSxYYS5wcm90b3R5cGUudXBsb2FkUGVuZGluZz1mdW5jdGlvbigpe3JldHVybiF0aGlzLnVwbG9hZGVkfHx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZH0sWGEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnVwbG9hZGVkfHwodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxoYSksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSkpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZCh0KSx0aGlzLnVwbG9hZGVkPSEwfSxYYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSl9LFhhLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpZm9yKHZhciBvPTAscz1hW2ldO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPWwueCx1PWwueTtpZighKGM8MHx8Yz49ODE5Mnx8dTwwfHx1Pj04MTkyKSl7dmFyIGY9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5LHQuc29ydEtleSksaD1mLnZlcnRleExlbmd0aDtXYSh0aGlzLmxheW91dFZlcnRleEFycmF5LGMsdSwtMSwtMSksV2EodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxjLHUsMSwtMSksV2EodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxjLHUsMSwxKSxXYSh0aGlzLmxheW91dFZlcnRleEFycmF5LGMsdSwtMSwxKSx0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soaCxoKzEsaCsyKSx0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soaCxoKzMsaCsyKSxmLnZlcnRleExlbmd0aCs9NCxmLnByaW1pdGl2ZUxlbmd0aCs9Mn19dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCx0LHIse30sbil9LE5uKCJDaXJjbGVCdWNrZXQiLFhhLHtvbWl0OlsibGF5ZXJzIl19KTt2YXIgY289bmV3IFNpKHsiY2lyY2xlLXNvcnQta2V5IjpuZXcgVGkoTHQubGF5b3V0X2NpcmNsZVsiY2lyY2xlLXNvcnQta2V5Il0pfSksdW89e3BhaW50Om5ldyBTaSh7ImNpcmNsZS1yYWRpdXMiOm5ldyBUaShMdC5wYWludF9jaXJjbGVbImNpcmNsZS1yYWRpdXMiXSksImNpcmNsZS1jb2xvciI6bmV3IFRpKEx0LnBhaW50X2NpcmNsZVsiY2lyY2xlLWNvbG9yIl0pLCJjaXJjbGUtYmx1ciI6bmV3IFRpKEx0LnBhaW50X2NpcmNsZVsiY2lyY2xlLWJsdXIiXSksImNpcmNsZS1vcGFjaXR5IjpuZXcgVGkoTHQucGFpbnRfY2lyY2xlWyJjaXJjbGUtb3BhY2l0eSJdKSwiY2lyY2xlLXRyYW5zbGF0ZSI6bmV3IHdpKEx0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXRyYW5zbGF0ZSJdKSwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiOm5ldyB3aShMdC5wYWludF9jaXJjbGVbImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yIl0pLCJjaXJjbGUtcGl0Y2gtc2NhbGUiOm5ldyB3aShMdC5wYWludF9jaXJjbGVbImNpcmNsZS1waXRjaC1zY2FsZSJdKSwiY2lyY2xlLXBpdGNoLWFsaWdubWVudCI6bmV3IHdpKEx0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXBpdGNoLWFsaWdubWVudCJdKSwiY2lyY2xlLXN0cm9rZS13aWR0aCI6bmV3IFRpKEx0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXN0cm9rZS13aWR0aCJdKSwiY2lyY2xlLXN0cm9rZS1jb2xvciI6bmV3IFRpKEx0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXN0cm9rZS1jb2xvciJdKSwiY2lyY2xlLXN0cm9rZS1vcGFjaXR5IjpuZXcgVGkoTHQucGFpbnRfY2lyY2xlWyJjaXJjbGUtc3Ryb2tlLW9wYWNpdHkiXSl9KSxsYXlvdXQ6Y299LGZvPSJ1bmRlZmluZWQiIT10eXBlb2YgRmxvYXQzMkFycmF5P0Zsb2F0MzJBcnJheTpBcnJheTtmdW5jdGlvbiBobyh0KXtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9ZnVuY3Rpb24gcG8odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGY9ZVs4XSxoPWVbOV0scD1lWzEwXSxkPWVbMTFdLG09ZVsxMl0sZz1lWzEzXSx2PWVbMTRdLHk9ZVsxNV0seD1yWzBdLGI9clsxXSxfPXJbMl0sdz1yWzNdO3JldHVybiB0WzBdPXgqbitiKnMrXypmK3cqbSx0WzFdPXgqaStiKmwrXypoK3cqZyx0WzJdPXgqYStiKmMrXypwK3cqdix0WzNdPXgqbytiKnUrXypkK3cqeSx4PXJbNF0sYj1yWzVdLF89cls2XSx3PXJbN10sdFs0XT14Km4rYipzK18qZit3Km0sdFs1XT14KmkrYipsK18qaCt3KmcsdFs2XT14KmErYipjK18qcCt3KnYsdFs3XT14Km8rYip1K18qZCt3KnkseD1yWzhdLGI9cls5XSxfPXJbMTBdLHc9clsxMV0sdFs4XT14Km4rYipzK18qZit3Km0sdFs5XT14KmkrYipsK18qaCt3KmcsdFsxMF09eCphK2IqYytfKnArdyp2LHRbMTFdPXgqbytiKnUrXypkK3cqeSx4PXJbMTJdLGI9clsxM10sXz1yWzE0XSx3PXJbMTVdLHRbMTJdPXgqbitiKnMrXypmK3cqbSx0WzEzXT14KmkrYipsK18qaCt3KmcsdFsxNF09eCphK2IqYytfKnArdyp2LHRbMTVdPXgqbytiKnUrXypkK3cqeSx0fU1hdGguaHlwb3R8fChNYXRoLmh5cG90PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cyxlPTAscj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZSs9dFtyXSp0W3JdO3JldHVybiBNYXRoLnNxcnQoZSl9KTt2YXIgbW89cG87dmFyIGdvLHZvLHlvPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdFsyXT1lWzJdLXJbMl0sdH07Z289bmV3IGZvKDMpLGZvIT1GbG9hdDMyQXJyYXkmJihnb1swXT0wLGdvWzFdPTAsZ29bMl09MCksdm89Z287ZnVuY3Rpb24geG8odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM107cmV0dXJuIHRbMF09clswXSpuK3JbNF0qaStyWzhdKmErclsxMl0qbyx0WzFdPXJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKm8sdFsyXT1yWzJdKm4rcls2XSppK3JbMTBdKmErclsxNF0qbyx0WzNdPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XSpvLHR9IWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZm8oNCk7cmV0dXJuIGZvIT1GbG9hdDMyQXJyYXkmJih0WzBdPTAsdFsxXT0wLHRbMl09MCx0WzNdPTApLHR9KCl9KCk7dmFyIGJvPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdO3JldHVybiBlKmUrcipyfSxfbz0oZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe3ZhciB0PW5ldyBmbygyKTtyZXR1cm4gZm8hPUZsb2F0MzJBcnJheSYmKHRbMF09MCx0WzFdPTApLHR9KCl9KCksZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLHVvKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWGEodCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKHQpe3ZhciBlPXQ7cmV0dXJuIG9vKCJjaXJjbGUtcmFkaXVzIix0aGlzLGUpK29vKCJjaXJjbGUtc3Ryb2tlLXdpZHRoIix0aGlzLGUpK3NvKHRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtdHJhbnNsYXRlIikpfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7Zm9yKHZhciBsPWxvKHQsdGhpcy5wYWludC5nZXQoImNpcmNsZS10cmFuc2xhdGUiKSx0aGlzLnBhaW50LmdldCgiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiKSxhLmFuZ2xlLG8pLGM9dGhpcy5wYWludC5nZXQoImNpcmNsZS1yYWRpdXMiKS5ldmFsdWF0ZShlLHIpK3RoaXMucGFpbnQuZ2V0KCJjaXJjbGUtc3Ryb2tlLXdpZHRoIikuZXZhbHVhdGUoZSxyKSx1PSJtYXAiPT09dGhpcy5wYWludC5nZXQoImNpcmNsZS1waXRjaC1hbGlnbm1lbnQiKSxmPXU/bDpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHdvKHQsZSl9KSl9KGwscyksaD11P2MqbzpjLHA9MCxkPW47cDxkLmxlbmd0aDtwKz0xKWZvcih2YXIgbT0wLGc9ZFtwXTttPGcubGVuZ3RoO20rPTEpe3ZhciB2PWdbbV0seT11P3Y6d28odixzKSx4PWgsYj14byhbXSxbdi54LHYueSwwLDFdLHMpO2lmKCJ2aWV3cG9ydCI9PT10aGlzLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLXNjYWxlIikmJiJtYXAiPT09dGhpcy5wYWludC5nZXQoImNpcmNsZS1waXRjaC1hbGlnbm1lbnQiKT94Kj1iWzNdL2EuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZToibWFwIj09PXRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtc2NhbGUiKSYmInZpZXdwb3J0Ij09PXRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50IikmJih4Kj1hLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UvYlszXSksSmEoZix5LHgpKXJldHVybiEwfXJldHVybiExfSxlfShFaSkpO2Z1bmN0aW9uIHdvKHQsZSl7dmFyIHI9eG8oW10sW3QueCx0LnksMCwxXSxlKTtyZXR1cm4gbmV3IGkoclswXS9yWzNdLHJbMV0vclszXSl9dmFyIFRvPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oWGEpO2Z1bmN0aW9uIGtvKHQsZSxyLG4pe3ZhciBpPWUud2lkdGgsYT1lLmhlaWdodDtpZihuKXtpZihuIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpbj1uZXcgVWludDhBcnJheShuLmJ1ZmZlcik7ZWxzZSBpZihuLmxlbmd0aCE9PWkqYSpyKXRocm93IG5ldyBSYW5nZUVycm9yKCJtaXNtYXRjaGVkIGltYWdlIHNpemUiKX1lbHNlIG49bmV3IFVpbnQ4QXJyYXkoaSphKnIpO3JldHVybiB0LndpZHRoPWksdC5oZWlnaHQ9YSx0LmRhdGE9bix0fWZ1bmN0aW9uIEFvKHQsZSxyKXt2YXIgbj1lLndpZHRoLGk9ZS5oZWlnaHQ7aWYobiE9PXQud2lkdGh8fGkhPT10LmhlaWdodCl7dmFyIGE9a28oe30se3dpZHRoOm4saGVpZ2h0Oml9LHIpO01vKHQsYSx7eDowLHk6MH0se3g6MCx5OjB9LHt3aWR0aDpNYXRoLm1pbih0LndpZHRoLG4pLGhlaWdodDpNYXRoLm1pbih0LmhlaWdodCxpKX0sciksdC53aWR0aD1uLHQuaGVpZ2h0PWksdC5kYXRhPWEuZGF0YX19ZnVuY3Rpb24gTW8odCxlLHIsbixpLGEpe2lmKDA9PT1pLndpZHRofHwwPT09aS5oZWlnaHQpcmV0dXJuIGU7aWYoaS53aWR0aD50LndpZHRofHxpLmhlaWdodD50LmhlaWdodHx8ci54PnQud2lkdGgtaS53aWR0aHx8ci55PnQuaGVpZ2h0LWkuaGVpZ2h0KXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2Ugc291cmNlIGNvb3JkaW5hdGVzIGZvciBpbWFnZSBjb3B5Iik7aWYoaS53aWR0aD5lLndpZHRofHxpLmhlaWdodD5lLmhlaWdodHx8bi54PmUud2lkdGgtaS53aWR0aHx8bi55PmUuaGVpZ2h0LWkuaGVpZ2h0KXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgZGVzdGluYXRpb24gY29vcmRpbmF0ZXMgZm9yIGltYWdlIGNvcHkiKTtmb3IodmFyIG89dC5kYXRhLHM9ZS5kYXRhLGw9MDtsPGkuaGVpZ2h0O2wrKylmb3IodmFyIGM9KChyLnkrbCkqdC53aWR0aCtyLngpKmEsdT0oKG4ueStsKSplLndpZHRoK24ueCkqYSxmPTA7ZjxpLndpZHRoKmE7ZisrKXNbdStmXT1vW2MrZl07cmV0dXJuIGV9Tm4oIkhlYXRtYXBCdWNrZXQiLFRvLHtvbWl0OlsibGF5ZXJzIl19KTt2YXIgU289ZnVuY3Rpb24odCxlKXtrbyh0aGlzLHQsMSxlKX07U28ucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXtBbyh0aGlzLHQsMSl9LFNvLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgU28oe3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSxuZXcgVWludDhBcnJheSh0aGlzLmRhdGEpKX0sU28uY29weT1mdW5jdGlvbih0LGUscixuLGkpe01vKHQsZSxyLG4saSwxKX07dmFyIEVvPWZ1bmN0aW9uKHQsZSl7a28odGhpcyx0LDQsZSl9O0VvLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7QW8odGhpcyx0LDQpfSxFby5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbih0LGUpe2U/dGhpcy5kYXRhLnNldCh0KTp0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXk/dGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyKTp0aGlzLmRhdGE9dH0sRW8ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFbyh7d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHR9LG5ldyBVaW50OEFycmF5KHRoaXMuZGF0YSkpfSxFby5jb3B5PWZ1bmN0aW9uKHQsZSxyLG4saSl7TW8odCxlLHIsbixpLDQpfSxObigiQWxwaGFJbWFnZSIsU28pLE5uKCJSR0JBSW1hZ2UiLEVvKTt2YXIgTG89e3BhaW50Om5ldyBTaSh7ImhlYXRtYXAtcmFkaXVzIjpuZXcgVGkoTHQucGFpbnRfaGVhdG1hcFsiaGVhdG1hcC1yYWRpdXMiXSksImhlYXRtYXAtd2VpZ2h0IjpuZXcgVGkoTHQucGFpbnRfaGVhdG1hcFsiaGVhdG1hcC13ZWlnaHQiXSksImhlYXRtYXAtaW50ZW5zaXR5IjpuZXcgd2koTHQucGFpbnRfaGVhdG1hcFsiaGVhdG1hcC1pbnRlbnNpdHkiXSksImhlYXRtYXAtY29sb3IiOm5ldyBNaShMdC5wYWludF9oZWF0bWFwWyJoZWF0bWFwLWNvbG9yIl0pLCJoZWF0bWFwLW9wYWNpdHkiOm5ldyB3aShMdC5wYWludF9oZWF0bWFwWyJoZWF0bWFwLW9wYWNpdHkiXSl9KX07ZnVuY3Rpb24gQ28odCxlKXtmb3IodmFyIHI9bmV3IFVpbnQ4QXJyYXkoMTAyNCksbj17fSxpPTAsYT0wO2k8MjU2O2krKyxhKz00KXtuW2VdPWkvMjU1O3ZhciBvPXQuZXZhbHVhdGUobik7clthKzBdPU1hdGguZmxvb3IoMjU1Km8uci9vLmEpLHJbYSsxXT1NYXRoLmZsb29yKDI1NSpvLmcvby5hKSxyW2ErMl09TWF0aC5mbG9vcigyNTUqby5iL28uYSksclthKzNdPU1hdGguZmxvb3IoMjU1Km8uYSl9cmV0dXJuIG5ldyBFbyh7d2lkdGg6MjU2LGhlaWdodDoxfSxyKX12YXIgUG89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLExvKSx0aGlzLl91cGRhdGVDb2xvclJhbXAoKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVG8odCl9LGUucHJvdG90eXBlLl9oYW5kbGVTcGVjaWFsUGFpbnRQcm9wZXJ0eVVwZGF0ZT1mdW5jdGlvbih0KXsiaGVhdG1hcC1jb2xvciI9PT10JiZ0aGlzLl91cGRhdGVDb2xvclJhbXAoKX0sZS5wcm90b3R5cGUuX3VwZGF0ZUNvbG9yUmFtcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1siaGVhdG1hcC1jb2xvciJdLnZhbHVlLmV4cHJlc3Npb247dGhpcy5jb2xvclJhbXA9Q28odCwiaGVhdG1hcERlbnNpdHkiKSx0aGlzLmNvbG9yUmFtcFRleHR1cmU9bnVsbH0sZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7dGhpcy5oZWF0bWFwRmJvJiYodGhpcy5oZWF0bWFwRmJvLmRlc3Ryb3koKSx0aGlzLmhlYXRtYXBGYm89bnVsbCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuaGFzT2Zmc2NyZWVuUGFzcz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5wYWludC5nZXQoImhlYXRtYXAtb3BhY2l0eSIpJiYibm9uZSIhPT10aGlzLnZpc2liaWxpdHl9LGV9KEVpKSxJbz17cGFpbnQ6bmV3IFNpKHsiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb24iOm5ldyB3aShMdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uIl0pLCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvciI6bmV3IHdpKEx0LnBhaW50X2hpbGxzaGFkZVsiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3IiXSksImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iOm5ldyB3aShMdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iXSksImhpbGxzaGFkZS1zaGFkb3ctY29sb3IiOm5ldyB3aShMdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1zaGFkb3ctY29sb3IiXSksImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3IiOm5ldyB3aShMdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3IiXSksImhpbGxzaGFkZS1hY2NlbnQtY29sb3IiOm5ldyB3aShMdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1hY2NlbnQtY29sb3IiXSl9KX0sT289ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLElvKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuaGFzT2Zmc2NyZWVuUGFzcz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5wYWludC5nZXQoImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iKSYmIm5vbmUiIT09dGhpcy52aXNpYmlsaXR5fSxlfShFaSksem89SWkoW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In1dLDQpLm1lbWJlcnMsRG89Rm8sUm89Rm87ZnVuY3Rpb24gRm8odCxlLHIpe3I9cnx8Mjt2YXIgbixpLGEsbyxzLGwsYyx1PWUmJmUubGVuZ3RoLGY9dT9lWzBdKnI6dC5sZW5ndGgsaD1Cbyh0LDAsZixyLCEwKSxwPVtdO2lmKCFofHxoLm5leHQ9PT1oLnByZXYpcmV0dXJuIHA7aWYodSYmKGg9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsbCxjPVtdO2ZvcihpPTAsYT1lLmxlbmd0aDtpPGE7aSsrKW89ZVtpXSpuLHM9aTxhLTE/ZVtpKzFdKm46dC5sZW5ndGgsKGw9Qm8odCxvLHMsbiwhMSkpPT09bC5uZXh0JiYobC5zdGVpbmVyPSEwKSxjLnB1c2goWm8obCkpO2ZvcihjLnNvcnQoR28pLGk9MDtpPGMubGVuZ3RoO2krKylZbyhjW2ldLHIpLHI9Tm8ocixyLm5leHQpO3JldHVybiByfSh0LGUsaCxyKSksdC5sZW5ndGg+ODAqcil7bj1hPXRbMF0saT1vPXRbMV07Zm9yKHZhciBkPXI7ZDxmO2QrPXIpKHM9dFtkXSk8biYmKG49cyksKGw9dFtkKzFdKTxpJiYoaT1sKSxzPmEmJihhPXMpLGw+byYmKG89bCk7Yz0wIT09KGM9TWF0aC5tYXgoYS1uLG8taSkpPzEvYzowfXJldHVybiBqbyhoLHAscixuLGksYykscH1mdW5jdGlvbiBCbyh0LGUscixuLGkpe3ZhciBhLG87aWYoaT09PWxzKHQsZSxyLG4pPjApZm9yKGE9ZTthPHI7YSs9bilvPWFzKGEsdFthXSx0W2ErMV0sbyk7ZWxzZSBmb3IoYT1yLW47YT49ZTthLT1uKW89YXMoYSx0W2FdLHRbYSsxXSxvKTtyZXR1cm4gbyYmJG8obyxvLm5leHQpJiYob3Mobyksbz1vLm5leHQpLG99ZnVuY3Rpb24gTm8odCxlKXtpZighdClyZXR1cm4gdDtlfHwoZT10KTt2YXIgcixuPXQ7ZG97aWYocj0hMSxuLnN0ZWluZXJ8fCEkbyhuLG4ubmV4dCkmJjAhPT1RbyhuLnByZXYsbixuLm5leHQpKW49bi5uZXh0O2Vsc2V7aWYob3MobiksKG49ZT1uLnByZXYpPT09bi5uZXh0KWJyZWFrO3I9ITB9fXdoaWxlKHJ8fG4hPT1lKTtyZXR1cm4gZX1mdW5jdGlvbiBqbyh0LGUscixuLGksYSxvKXtpZih0KXshbyYmYSYmZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dDtkb3tudWxsPT09aS56JiYoaS56PVhvKGkueCxpLnksZSxyLG4pKSxpLnByZXZaPWkucHJldixpLm5leHRaPWkubmV4dCxpPWkubmV4dH13aGlsZShpIT09dCk7aS5wcmV2Wi5uZXh0Wj1udWxsLGkucHJldlo9bnVsbCxmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsLGM9MTtkb3tmb3Iocj10LHQ9bnVsbCxhPW51bGwsbz0wO3I7KXtmb3IobysrLG49cixzPTAsZT0wO2U8YyYmKHMrKyxuPW4ubmV4dFopO2UrKyk7Zm9yKGw9YztzPjB8fGw+MCYmbjspMCE9PXMmJigwPT09bHx8IW58fHIuejw9bi56KT8oaT1yLHI9ci5uZXh0WixzLS0pOihpPW4sbj1uLm5leHRaLGwtLSksYT9hLm5leHRaPWk6dD1pLGkucHJldlo9YSxhPWk7cj1ufWEubmV4dFo9bnVsbCxjKj0yfXdoaWxlKG8+MSl9KGkpfSh0LG4saSxhKTtmb3IodmFyIHMsbCxjPXQ7dC5wcmV2IT09dC5uZXh0OylpZihzPXQucHJldixsPXQubmV4dCxhP1ZvKHQsbixpLGEpOlVvKHQpKWUucHVzaChzLmkvciksZS5wdXNoKHQuaS9yKSxlLnB1c2gobC5pL3IpLG9zKHQpLHQ9bC5uZXh0LGM9bC5uZXh0O2Vsc2UgaWYoKHQ9bCk9PT1jKXtvPzE9PT1vP2pvKHQ9SG8oTm8odCksZSxyKSxlLHIsbixpLGEsMik6Mj09PW8mJnFvKHQsZSxyLG4saSxhKTpqbyhObyh0KSxlLHIsbixpLGEsMSk7YnJlYWt9fX1mdW5jdGlvbiBVbyh0KXt2YXIgZT10LnByZXYscj10LG49dC5uZXh0O2lmKFFvKGUscixuKT49MClyZXR1cm4hMTtmb3IodmFyIGk9dC5uZXh0Lm5leHQ7aSE9PXQucHJldjspe2lmKEpvKGUueCxlLnksci54LHIueSxuLngsbi55LGkueCxpLnkpJiZRbyhpLnByZXYsaSxpLm5leHQpPj0wKXJldHVybiExO2k9aS5uZXh0fXJldHVybiEwfWZ1bmN0aW9uIFZvKHQsZSxyLG4pe3ZhciBpPXQucHJldixhPXQsbz10Lm5leHQ7aWYoUW8oaSxhLG8pPj0wKXJldHVybiExO2Zvcih2YXIgcz1pLng8YS54P2kueDxvLng/aS54Om8ueDphLng8by54P2EueDpvLngsbD1pLnk8YS55P2kueTxvLnk/aS55Om8ueTphLnk8by55P2EueTpvLnksYz1pLng+YS54P2kueD5vLng/aS54Om8ueDphLng+by54P2EueDpvLngsdT1pLnk+YS55P2kueT5vLnk/aS55Om8ueTphLnk+by55P2EueTpvLnksZj1YbyhzLGwsZSxyLG4pLGg9WG8oYyx1LGUscixuKSxwPXQucHJldlosZD10Lm5leHRaO3AmJnAuej49ZiYmZCYmZC56PD1oOyl7aWYocCE9PXQucHJldiYmcCE9PXQubmV4dCYmSm8oaS54LGkueSxhLngsYS55LG8ueCxvLnkscC54LHAueSkmJlFvKHAucHJldixwLHAubmV4dCk+PTApcmV0dXJuITE7aWYocD1wLnByZXZaLGQhPT10LnByZXYmJmQhPT10Lm5leHQmJkpvKGkueCxpLnksYS54LGEueSxvLngsby55LGQueCxkLnkpJiZRbyhkLnByZXYsZCxkLm5leHQpPj0wKXJldHVybiExO2Q9ZC5uZXh0Wn1mb3IoO3AmJnAuej49Zjspe2lmKHAhPT10LnByZXYmJnAhPT10Lm5leHQmJkpvKGkueCxpLnksYS54LGEueSxvLngsby55LHAueCxwLnkpJiZRbyhwLnByZXYscCxwLm5leHQpPj0wKXJldHVybiExO3A9cC5wcmV2Wn1mb3IoO2QmJmQuejw9aDspe2lmKGQhPT10LnByZXYmJmQhPT10Lm5leHQmJkpvKGkueCxpLnksYS54LGEueSxvLngsby55LGQueCxkLnkpJiZRbyhkLnByZXYsZCxkLm5leHQpPj0wKXJldHVybiExO2Q9ZC5uZXh0Wn1yZXR1cm4hMH1mdW5jdGlvbiBIbyh0LGUscil7dmFyIG49dDtkb3t2YXIgaT1uLnByZXYsYT1uLm5leHQubmV4dDshJG8oaSxhKSYmdHMoaSxuLG4ubmV4dCxhKSYmbnMoaSxhKSYmbnMoYSxpKSYmKGUucHVzaChpLmkvciksZS5wdXNoKG4uaS9yKSxlLnB1c2goYS5pL3IpLG9zKG4pLG9zKG4ubmV4dCksbj10PWEpLG49bi5uZXh0fXdoaWxlKG4hPT10KTtyZXR1cm4gTm8obil9ZnVuY3Rpb24gcW8odCxlLHIsbixpLGEpe3ZhciBvPXQ7ZG97Zm9yKHZhciBzPW8ubmV4dC5uZXh0O3MhPT1vLnByZXY7KXtpZihvLmkhPT1zLmkmJktvKG8scykpe3ZhciBsPWlzKG8scyk7cmV0dXJuIG89Tm8obyxvLm5leHQpLGw9Tm8obCxsLm5leHQpLGpvKG8sZSxyLG4saSxhKSx2b2lkIGpvKGwsZSxyLG4saSxhKX1zPXMubmV4dH1vPW8ubmV4dH13aGlsZShvIT09dCl9ZnVuY3Rpb24gR28odCxlKXtyZXR1cm4gdC54LWUueH1mdW5jdGlvbiBZbyh0LGUpe2lmKGU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUsaT10LngsYT10Lnksbz0tMS8wO2Rve2lmKGE8PW4ueSYmYT49bi5uZXh0LnkmJm4ubmV4dC55IT09bi55KXt2YXIgcz1uLngrKGEtbi55KSoobi5uZXh0Lngtbi54KS8obi5uZXh0Lnktbi55KTtpZihzPD1pJiZzPm8pe2lmKG89cyxzPT09aSl7aWYoYT09PW4ueSlyZXR1cm4gbjtpZihhPT09bi5uZXh0LnkpcmV0dXJuIG4ubmV4dH1yPW4ueDxuLm5leHQueD9uOm4ubmV4dH19bj1uLm5leHR9d2hpbGUobiE9PWUpO2lmKCFyKXJldHVybiBudWxsO2lmKGk9PT1vKXJldHVybiByO3ZhciBsLGM9cix1PXIueCxmPXIueSxoPTEvMDtuPXI7ZG97aT49bi54JiZuLng+PXUmJmkhPT1uLngmJkpvKGE8Zj9pOm8sYSx1LGYsYTxmP286aSxhLG4ueCxuLnkpJiYobD1NYXRoLmFicyhhLW4ueSkvKGktbi54KSxucyhuLHQpJiYobDxofHxsPT09aCYmKG4ueD5yLnh8fG4ueD09PXIueCYmV28ocixuKSkpJiYocj1uLGg9bCkpLG49bi5uZXh0fXdoaWxlKG4hPT1jKTtyZXR1cm4gcn0odCxlKSl7dmFyIHI9aXMoZSx0KTtObyhlLGUubmV4dCksTm8ocixyLm5leHQpfX1mdW5jdGlvbiBXbyh0LGUpe3JldHVybiBRbyh0LnByZXYsdCxlLnByZXYpPDAmJlFvKGUubmV4dCx0LHQubmV4dCk8MH1mdW5jdGlvbiBYbyh0LGUscixuLGkpe3JldHVybih0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQ9MzI3NjcqKHQtcikqaSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpfChlPTE0MzE2NTU3NjUmKChlPTg1ODk5MzQ1OSYoKGU9MjUyNjQ1MTM1JigoZT0xNjcxMTkzNSYoKGU9MzI3NjcqKGUtbikqaSl8ZTw8OCkpfGU8PDQpKXxlPDwyKSl8ZTw8MSkpPDwxfWZ1bmN0aW9uIFpvKHQpe3ZhciBlPXQscj10O2RveyhlLng8ci54fHxlLng9PT1yLngmJmUueTxyLnkpJiYocj1lKSxlPWUubmV4dH13aGlsZShlIT09dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gSm8odCxlLHIsbixpLGEsbyxzKXtyZXR1cm4oaS1vKSooZS1zKS0odC1vKSooYS1zKT49MCYmKHQtbykqKG4tcyktKHItbykqKGUtcyk+PTAmJihyLW8pKihhLXMpLShpLW8pKihuLXMpPj0wfWZ1bmN0aW9uIEtvKHQsZSl7cmV0dXJuIHQubmV4dC5pIT09ZS5pJiZ0LnByZXYuaSE9PWUuaSYmIWZ1bmN0aW9uKHQsZSl7dmFyIHI9dDtkb3tpZihyLmkhPT10LmkmJnIubmV4dC5pIT09dC5pJiZyLmkhPT1lLmkmJnIubmV4dC5pIT09ZS5pJiZ0cyhyLHIubmV4dCx0LGUpKXJldHVybiEwO3I9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4hMX0odCxlKSYmKG5zKHQsZSkmJm5zKGUsdCkmJmZ1bmN0aW9uKHQsZSl7dmFyIHI9dCxuPSExLGk9KHQueCtlLngpLzIsYT0odC55K2UueSkvMjtkb3tyLnk+YSE9ci5uZXh0Lnk+YSYmci5uZXh0LnkhPT1yLnkmJmk8KHIubmV4dC54LXIueCkqKGEtci55KS8oci5uZXh0Lnktci55KStyLngmJihuPSFuKSxyPXIubmV4dH13aGlsZShyIT09dCk7cmV0dXJuIG59KHQsZSkmJihRbyh0LnByZXYsdCxlLnByZXYpfHxRbyh0LGUucHJldixlKSl8fCRvKHQsZSkmJlFvKHQucHJldix0LHQubmV4dCk+MCYmUW8oZS5wcmV2LGUsZS5uZXh0KT4wKX1mdW5jdGlvbiBRbyh0LGUscil7cmV0dXJuKGUueS10LnkpKihyLngtZS54KS0oZS54LXQueCkqKHIueS1lLnkpfWZ1bmN0aW9uICRvKHQsZSl7cmV0dXJuIHQueD09PWUueCYmdC55PT09ZS55fWZ1bmN0aW9uIHRzKHQsZSxyLG4pe3ZhciBpPXJzKFFvKHQsZSxyKSksYT1ycyhRbyh0LGUsbikpLG89cnMoUW8ocixuLHQpKSxzPXJzKFFvKHIsbixlKSk7cmV0dXJuIGkhPT1hJiZvIT09c3x8KCEoMCE9PWl8fCFlcyh0LHIsZSkpfHwoISgwIT09YXx8IWVzKHQsbixlKSl8fCghKDAhPT1vfHwhZXMocix0LG4pKXx8ISgwIT09c3x8IWVzKHIsZSxuKSkpKSl9ZnVuY3Rpb24gZXModCxlLHIpe3JldHVybiBlLng8PU1hdGgubWF4KHQueCxyLngpJiZlLng+PU1hdGgubWluKHQueCxyLngpJiZlLnk8PU1hdGgubWF4KHQueSxyLnkpJiZlLnk+PU1hdGgubWluKHQueSxyLnkpfWZ1bmN0aW9uIHJzKHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH1mdW5jdGlvbiBucyh0LGUpe3JldHVybiBRbyh0LnByZXYsdCx0Lm5leHQpPDA/UW8odCxlLHQubmV4dCk+PTAmJlFvKHQsdC5wcmV2LGUpPj0wOlFvKHQsZSx0LnByZXYpPDB8fFFvKHQsdC5uZXh0LGUpPDB9ZnVuY3Rpb24gaXModCxlKXt2YXIgcj1uZXcgc3ModC5pLHQueCx0LnkpLG49bmV3IHNzKGUuaSxlLngsZS55KSxpPXQubmV4dCxhPWUucHJldjtyZXR1cm4gdC5uZXh0PWUsZS5wcmV2PXQsci5uZXh0PWksaS5wcmV2PXIsbi5uZXh0PXIsci5wcmV2PW4sYS5uZXh0PW4sbi5wcmV2PWEsbn1mdW5jdGlvbiBhcyh0LGUscixuKXt2YXIgaT1uZXcgc3ModCxlLHIpO3JldHVybiBuPyhpLm5leHQ9bi5uZXh0LGkucHJldj1uLG4ubmV4dC5wcmV2PWksbi5uZXh0PWkpOihpLnByZXY9aSxpLm5leHQ9aSksaX1mdW5jdGlvbiBvcyh0KXt0Lm5leHQucHJldj10LnByZXYsdC5wcmV2Lm5leHQ9dC5uZXh0LHQucHJldlomJih0LnByZXZaLm5leHRaPXQubmV4dFopLHQubmV4dFomJih0Lm5leHRaLnByZXZaPXQucHJldlopfWZ1bmN0aW9uIHNzKHQsZSxyKXt0aGlzLmk9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9bnVsbCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX1mdW5jdGlvbiBscyh0LGUscixuKXtmb3IodmFyIGk9MCxhPWUsbz1yLW47YTxyO2ErPW4paSs9KHRbb10tdFthXSkqKHRbYSsxXSt0W28rMV0pLG89YTtyZXR1cm4gaX1mdW5jdGlvbiBjcyh0LGUscixuLGkpeyFmdW5jdGlvbiB0KGUscixuLGksYSl7Zm9yKDtpPm47KXtpZihpLW4+NjAwKXt2YXIgbz1pLW4rMSxzPXItbisxLGw9TWF0aC5sb2cobyksYz0uNSpNYXRoLmV4cCgyKmwvMyksdT0uNSpNYXRoLnNxcnQobCpjKihvLWMpL28pKihzLW8vMjwwPy0xOjEpLGY9TWF0aC5tYXgobixNYXRoLmZsb29yKHItcypjL28rdSkpLGg9TWF0aC5taW4oaSxNYXRoLmZsb29yKHIrKG8tcykqYy9vK3UpKTt0KGUscixmLGgsYSl9dmFyIHA9ZVtyXSxkPW4sbT1pO2Zvcih1cyhlLG4sciksYShlW2ldLHApPjAmJnVzKGUsbixpKTtkPG07KXtmb3IodXMoZSxkLG0pLGQrKyxtLS07YShlW2RdLHApPDA7KWQrKztmb3IoO2EoZVttXSxwKT4wOyltLS19MD09PWEoZVtuXSxwKT91cyhlLG4sbSk6KG0rKyx1cyhlLG0saSkpLG08PXImJihuPW0rMSkscjw9bSYmKGk9bS0xKX19KHQsZSxyfHwwLG58fHQubGVuZ3RoLTEsaXx8ZnMpfWZ1bmN0aW9uIHVzKHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59ZnVuY3Rpb24gZnModCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24gaHModCxlKXt2YXIgcj10Lmxlbmd0aDtpZihyPD0xKXJldHVyblt0XTtmb3IodmFyIG4saSxhPVtdLG89MDtvPHI7bysrKXt2YXIgcz1UKHRbb10pOzAhPT1zJiYodFtvXS5hcmVhPU1hdGguYWJzKHMpLHZvaWQgMD09PWkmJihpPXM8MCksaT09PXM8MD8obiYmYS5wdXNoKG4pLG49W3Rbb11dKTpuLnB1c2godFtvXSkpfWlmKG4mJmEucHVzaChuKSxlPjEpZm9yKHZhciBsPTA7bDxhLmxlbmd0aDtsKyspYVtsXS5sZW5ndGg8PWV8fChjcyhhW2xdLGUsMSxhW2xdLmxlbmd0aC0xLHBzKSxhW2xdPWFbbF0uc2xpY2UoMCxlKSk7cmV0dXJuIGF9ZnVuY3Rpb24gcHModCxlKXtyZXR1cm4gZS5hcmVhLXQuYXJlYX1mdW5jdGlvbiBkcyh0LGUscil7Zm9yKHZhciBuPXIucGF0dGVybkRlcGVuZGVuY2llcyxpPSExLGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLnBhaW50LmdldCh0KyItcGF0dGVybiIpO3MuaXNDb25zdGFudCgpfHwoaT0hMCk7dmFyIGw9cy5jb25zdGFudE9yKG51bGwpO2wmJihpPSEwLG5bbC50b109ITAsbltsLmZyb21dPSEwKX1yZXR1cm4gaX1mdW5jdGlvbiBtcyh0LGUscixuLGkpe2Zvcih2YXIgYT1pLnBhdHRlcm5EZXBlbmRlbmNpZXMsbz0wLHM9ZTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1sLnBhaW50LmdldCh0KyItcGF0dGVybiIpLnZhbHVlO2lmKCJjb25zdGFudCIhPT1jLmtpbmQpe3ZhciB1PWMuZXZhbHVhdGUoe3pvb206bi0xfSxyLHt9LGkuYXZhaWxhYmxlSW1hZ2VzKSxmPWMuZXZhbHVhdGUoe3pvb206bn0scix7fSxpLmF2YWlsYWJsZUltYWdlcyksaD1jLmV2YWx1YXRlKHt6b29tOm4rMX0scix7fSxpLmF2YWlsYWJsZUltYWdlcyk7dT11JiZ1Lm5hbWU/dS5uYW1lOnUsZj1mJiZmLm5hbWU/Zi5uYW1lOmYsaD1oJiZoLm5hbWU/aC5uYW1lOmgsYVt1XT0hMCxhW2ZdPSEwLGFbaF09ITAsci5wYXR0ZXJuc1tsLmlkXT17bWluOnUsbWlkOmYsbWF4Omh9fX1yZXR1cm4gcn1Gby5kZXZpYXRpb249ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZSYmZS5sZW5ndGgsYT1pP2VbMF0qcjp0Lmxlbmd0aCxvPU1hdGguYWJzKGxzKHQsMCxhLHIpKTtpZihpKWZvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsO3MrKyl7dmFyIGM9ZVtzXSpyLHU9czxsLTE/ZVtzKzFdKnI6dC5sZW5ndGg7by09TWF0aC5hYnMobHModCxjLHUscikpfXZhciBmPTA7Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrPTMpe3ZhciBoPW5bc10qcixwPW5bcysxXSpyLGQ9bltzKzJdKnI7Zis9TWF0aC5hYnMoKHRbaF0tdFtkXSkqKHRbcCsxXS10W2grMV0pLSh0W2hdLXRbcF0pKih0W2QrMV0tdFtoKzFdKSl9cmV0dXJuIDA9PT1vJiYwPT09Zj8wOk1hdGguYWJzKChmLW8pL28pfSxGby5mbGF0dGVuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdWzBdLmxlbmd0aCxyPXt2ZXJ0aWNlczpbXSxob2xlczpbXSxkaW1lbnNpb25zOmV9LG49MCxpPTA7aTx0Lmxlbmd0aDtpKyspe2Zvcih2YXIgYT0wO2E8dFtpXS5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288ZTtvKyspci52ZXJ0aWNlcy5wdXNoKHRbaV1bYV1bb10pO2k+MCYmKG4rPXRbaS0xXS5sZW5ndGgsci5ob2xlcy5wdXNoKG4pKX1yZXR1cm4gcn0sRG8uZGVmYXVsdD1Sbzt2YXIgZ3M9ZnVuY3Rpb24odCl7dGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmhhc1BhdHRlcm49ITEsdGhpcy5wYXR0ZXJuRmVhdHVyZXM9W10sdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgemksdGhpcy5pbmRleEFycmF5PW5ldyBZaSx0aGlzLmluZGV4QXJyYXkyPW5ldyBRaSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgVWEoem8sdC5sYXllcnMsdC56b29tKSx0aGlzLnNlZ21lbnRzPW5ldyBwYSx0aGlzLnNlZ21lbnRzMj1uZXcgcGEsdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzPXRoaXMubGF5ZXJzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNTdGF0ZURlcGVuZGVudCgpfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSl9O2dzLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5oYXNQYXR0ZXJuPWRzKCJmaWxsIix0aGlzLmxheWVycyxlKTtmb3IodmFyIG49dGhpcy5sYXllcnNbMF0ubGF5b3V0LmdldCgiZmlsbC1zb3J0LWtleSIpLGk9W10sYT0wLG89dDthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD1zLmZlYXR1cmUsYz1zLmlkLHU9cy5pbmRleCxmPXMuc291cmNlTGF5ZXJJbmRleCxoPXRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLm5lZWRHZW9tZXRyeSxwPXt0eXBlOmwudHlwZSxpZDpjLHByb3BlcnRpZXM6bC5wcm9wZXJ0aWVzLGdlb21ldHJ5Omg/WWEobCk6W119O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLmZpbHRlcihuZXcgcGkodGhpcy56b29tKSxwLHIpKXtofHwocC5nZW9tZXRyeT1ZYShsKSk7dmFyIGQ9bj9uLmV2YWx1YXRlKHAse30scixlLmF2YWlsYWJsZUltYWdlcyk6dm9pZCAwLG09e2lkOmMscHJvcGVydGllczpsLnByb3BlcnRpZXMsdHlwZTpsLnR5cGUsc291cmNlTGF5ZXJJbmRleDpmLGluZGV4OnUsZ2VvbWV0cnk6cC5nZW9tZXRyeSxwYXR0ZXJuczp7fSxzb3J0S2V5OmR9O2kucHVzaChtKX19biYmaS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNvcnRLZXktZS5zb3J0S2V5fSkpO2Zvcih2YXIgZz0wLHY9aTtnPHYubGVuZ3RoO2crPTEpe3ZhciB5PXZbZ10seD15LGI9eC5nZW9tZXRyeSxfPXguaW5kZXgsdz14LnNvdXJjZUxheWVySW5kZXg7aWYodGhpcy5oYXNQYXR0ZXJuKXt2YXIgVD1tcygiZmlsbCIsdGhpcy5sYXllcnMseSx0aGlzLnpvb20sZSk7dGhpcy5wYXR0ZXJuRmVhdHVyZXMucHVzaChUKX1lbHNlIHRoaXMuYWRkRmVhdHVyZSh5LGIsXyxyLHt9KTt2YXIgaz10W19dLmZlYXR1cmU7ZS5mZWF0dXJlSW5kZXguaW5zZXJ0KGssYixfLHcsdGhpcy5pbmRleCl9fSxncy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLmxlbmd0aCYmdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXModCxlLHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMscil9LGdzLnByb3RvdHlwZS5hZGRGZWF0dXJlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT10aGlzLnBhdHRlcm5GZWF0dXJlcztuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07dGhpcy5hZGRGZWF0dXJlKGEsYS5nZW9tZXRyeSxhLmluZGV4LGUscil9fSxncy5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LGdzLnByb3RvdHlwZS51cGxvYWRQZW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudXBsb2FkZWR8fHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkfSxncy5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMudXBsb2FkZWR8fCh0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LHpvKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSx0aGlzLmluZGV4QnVmZmVyMj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheTIpKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCksdGhpcy51cGxvYWRlZD0hMH0sZ3MucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyMi5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMyLmRlc3Ryb3koKSl9LGdzLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPTAsbz1ocyhlLDUwMCk7YTxvLmxlbmd0aDthKz0xKXtmb3IodmFyIHM9b1thXSxsPTAsYz0wLHU9cztjPHUubGVuZ3RoO2MrPTEpe2wrPXVbY10ubGVuZ3RofWZvcih2YXIgZj10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KGwsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpLGg9Zi52ZXJ0ZXhMZW5ndGgscD1bXSxkPVtdLG09MCxnPXM7bTxnLmxlbmd0aDttKz0xKXt2YXIgdj1nW21dO2lmKDAhPT12Lmxlbmd0aCl7diE9PXNbMF0mJmQucHVzaChwLmxlbmd0aC8yKTt2YXIgeT10aGlzLnNlZ21lbnRzMi5wcmVwYXJlU2VnbWVudCh2Lmxlbmd0aCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheTIpLHg9eS52ZXJ0ZXhMZW5ndGg7dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayh2WzBdLngsdlswXS55KSx0aGlzLmluZGV4QXJyYXkyLmVtcGxhY2VCYWNrKHgrdi5sZW5ndGgtMSx4KSxwLnB1c2godlswXS54KSxwLnB1c2godlswXS55KTtmb3IodmFyIGI9MTtiPHYubGVuZ3RoO2IrKyl0aGlzLmxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHZbYl0ueCx2W2JdLnkpLHRoaXMuaW5kZXhBcnJheTIuZW1wbGFjZUJhY2soeCtiLTEseCtiKSxwLnB1c2godltiXS54KSxwLnB1c2godltiXS55KTt5LnZlcnRleExlbmd0aCs9di5sZW5ndGgseS5wcmltaXRpdmVMZW5ndGgrPXYubGVuZ3RofX1mb3IodmFyIF89RG8ocCxkKSx3PTA7dzxfLmxlbmd0aDt3Kz0zKXRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhoK19bd10saCtfW3crMV0saCtfW3crMl0pO2YudmVydGV4TGVuZ3RoKz1sLGYucHJpbWl0aXZlTGVuZ3RoKz1fLmxlbmd0aC8zfXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsdCxyLGksbil9LE5uKCJGaWxsQnVja2V0Iixncyx7b21pdDpbImxheWVycyIsInBhdHRlcm5GZWF0dXJlcyJdfSk7dmFyIHZzPW5ldyBTaSh7ImZpbGwtc29ydC1rZXkiOm5ldyBUaShMdC5sYXlvdXRfZmlsbFsiZmlsbC1zb3J0LWtleSJdKX0pLHlzPXtwYWludDpuZXcgU2koeyJmaWxsLWFudGlhbGlhcyI6bmV3IHdpKEx0LnBhaW50X2ZpbGxbImZpbGwtYW50aWFsaWFzIl0pLCJmaWxsLW9wYWNpdHkiOm5ldyBUaShMdC5wYWludF9maWxsWyJmaWxsLW9wYWNpdHkiXSksImZpbGwtY29sb3IiOm5ldyBUaShMdC5wYWludF9maWxsWyJmaWxsLWNvbG9yIl0pLCJmaWxsLW91dGxpbmUtY29sb3IiOm5ldyBUaShMdC5wYWludF9maWxsWyJmaWxsLW91dGxpbmUtY29sb3IiXSksImZpbGwtdHJhbnNsYXRlIjpuZXcgd2koTHQucGFpbnRfZmlsbFsiZmlsbC10cmFuc2xhdGUiXSksImZpbGwtdHJhbnNsYXRlLWFuY2hvciI6bmV3IHdpKEx0LnBhaW50X2ZpbGxbImZpbGwtdHJhbnNsYXRlLWFuY2hvciJdKSwiZmlsbC1wYXR0ZXJuIjpuZXcga2koTHQucGFpbnRfZmlsbFsiZmlsbC1wYXR0ZXJuIl0pfSksbGF5b3V0OnZzfSx4cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUseXMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbihlLHIpe3QucHJvdG90eXBlLnJlY2FsY3VsYXRlLmNhbGwodGhpcyxlLHIpO3ZhciBuPXRoaXMucGFpbnQuX3ZhbHVlc1siZmlsbC1vdXRsaW5lLWNvbG9yIl07ImNvbnN0YW50Ij09PW4udmFsdWUua2luZCYmdm9pZCAwPT09bi52YWx1ZS52YWx1ZSYmKHRoaXMucGFpbnQuX3ZhbHVlc1siZmlsbC1vdXRsaW5lLWNvbG9yIl09dGhpcy5wYWludC5fdmFsdWVzWyJmaWxsLWNvbG9yIl0pfSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBncyh0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gc28odGhpcy5wYWludC5nZXQoImZpbGwtdHJhbnNsYXRlIikpfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3JldHVybiBLYShsbyh0LHRoaXMucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZSIpLHRoaXMucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZS1hbmNob3IiKSxhLmFuZ2xlLG8pLG4pfSxlLnByb3RvdHlwZS5pc1RpbGVDbGlwcGVkPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGV9KEVpKSxicz1JaShbe25hbWU6ImFfcG9zIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifSx7bmFtZToiYV9ub3JtYWxfZWQiLGNvbXBvbmVudHM6NCx0eXBlOiJJbnQxNiJ9XSw0KS5tZW1iZXJzLF9zPXdzO2Z1bmN0aW9uIHdzKHQsZSxyLG4saSl7dGhpcy5wcm9wZXJ0aWVzPXt9LHRoaXMuZXh0ZW50PXIsdGhpcy50eXBlPTAsdGhpcy5fcGJmPXQsdGhpcy5fZ2VvbWV0cnk9LTEsdGhpcy5fa2V5cz1uLHRoaXMuX3ZhbHVlcz1pLHQucmVhZEZpZWxkcyhUcyx0aGlzLGUpfWZ1bmN0aW9uIFRzKHQsZSxyKXsxPT10P2UuaWQ9ci5yZWFkVmFyaW50KCk6Mj09dD9mdW5jdGlvbih0LGUpe3ZhciByPXQucmVhZFZhcmludCgpK3QucG9zO2Zvcig7dC5wb3M8cjspe3ZhciBuPWUuX2tleXNbdC5yZWFkVmFyaW50KCldLGk9ZS5fdmFsdWVzW3QucmVhZFZhcmludCgpXTtlLnByb3BlcnRpZXNbbl09aX19KHIsZSk6Mz09dD9lLnR5cGU9ci5yZWFkVmFyaW50KCk6ND09dCYmKGUuX2dlb21ldHJ5PXIucG9zKX1mdW5jdGlvbiBrcyh0KXtmb3IodmFyIGUscixuPTAsaT0wLGE9dC5sZW5ndGgsbz1hLTE7aTxhO289aSsrKWU9dFtpXSxuKz0oKHI9dFtvXSkueC1lLngpKihlLnkrci55KTtyZXR1cm4gbn13cy50eXBlcz1bIlVua25vd24iLCJQb2ludCIsIkxpbmVTdHJpbmciLCJQb2x5Z29uIl0sd3MucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BiZjt0LnBvcz10aGlzLl9nZW9tZXRyeTtmb3IodmFyIGUscj10LnJlYWRWYXJpbnQoKSt0LnBvcyxuPTEsYT0wLG89MCxzPTAsbD1bXTt0LnBvczxyOyl7aWYoYTw9MCl7dmFyIGM9dC5yZWFkVmFyaW50KCk7bj03JmMsYT1jPj4zfWlmKGEtLSwxPT09bnx8Mj09PW4pbys9dC5yZWFkU1ZhcmludCgpLHMrPXQucmVhZFNWYXJpbnQoKSwxPT09biYmKGUmJmwucHVzaChlKSxlPVtdKSxlLnB1c2gobmV3IGkobyxzKSk7ZWxzZXtpZig3IT09bil0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY29tbWFuZCAiK24pO2UmJmUucHVzaChlWzBdLmNsb25lKCkpfX1yZXR1cm4gZSYmbC5wdXNoKGUpLGx9LHdzLnByb3RvdHlwZS5iYm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGJmO3QucG9zPXRoaXMuX2dlb21ldHJ5O2Zvcih2YXIgZT10LnJlYWRWYXJpbnQoKSt0LnBvcyxyPTEsbj0wLGk9MCxhPTAsbz0xLzAscz0tMS8wLGw9MS8wLGM9LTEvMDt0LnBvczxlOyl7aWYobjw9MCl7dmFyIHU9dC5yZWFkVmFyaW50KCk7cj03JnUsbj11Pj4zfWlmKG4tLSwxPT09cnx8Mj09PXIpKGkrPXQucmVhZFNWYXJpbnQoKSk8byYmKG89aSksaT5zJiYocz1pKSwoYSs9dC5yZWFkU1ZhcmludCgpKTxsJiYobD1hKSxhPmMmJihjPWEpO2Vsc2UgaWYoNyE9PXIpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGNvbW1hbmQgIityKX1yZXR1cm5bbyxsLHMsY119LHdzLnByb3RvdHlwZS50b0dlb0pTT049ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT10aGlzLmV4dGVudCpNYXRoLnBvdygyLHIpLG89dGhpcy5leHRlbnQqdCxzPXRoaXMuZXh0ZW50KmUsbD10aGlzLmxvYWRHZW9tZXRyeSgpLGM9d3MudHlwZXNbdGhpcy50eXBlXTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdLG49MTgwLTM2MCooci55K3MpL2E7dFtlXT1bMzYwKihyLngrbykvYS0xODAsMzYwL01hdGguUEkqTWF0aC5hdGFuKE1hdGguZXhwKG4qTWF0aC5QSS8xODApKS05MF19fXN3aXRjaCh0aGlzLnR5cGUpe2Nhc2UgMTp2YXIgZj1bXTtmb3Iobj0wO248bC5sZW5ndGg7bisrKWZbbl09bFtuXVswXTt1KGw9Zik7YnJlYWs7Y2FzZSAyOmZvcihuPTA7bjxsLmxlbmd0aDtuKyspdShsW25dKTticmVhaztjYXNlIDM6Zm9yKGw9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTw9MSlyZXR1cm5bdF07Zm9yKHZhciByLG4saT1bXSxhPTA7YTxlO2ErKyl7dmFyIG89a3ModFthXSk7MCE9PW8mJih2b2lkIDA9PT1uJiYobj1vPDApLG49PT1vPDA/KHImJmkucHVzaChyKSxyPVt0W2FdXSk6ci5wdXNoKHRbYV0pKX1yJiZpLnB1c2gocik7cmV0dXJuIGl9KGwpLG49MDtuPGwubGVuZ3RoO24rKylmb3IoaT0wO2k8bFtuXS5sZW5ndGg7aSsrKXUobFtuXVtpXSl9MT09PWwubGVuZ3RoP2w9bFswXTpjPSJNdWx0aSIrYzt2YXIgaD17dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6e3R5cGU6Yyxjb29yZGluYXRlczpsfSxwcm9wZXJ0aWVzOnRoaXMucHJvcGVydGllc307cmV0dXJuImlkImluIHRoaXMmJihoLmlkPXRoaXMuaWQpLGh9O3ZhciBBcz1NcztmdW5jdGlvbiBNcyh0LGUpe3RoaXMudmVyc2lvbj0xLHRoaXMubmFtZT1udWxsLHRoaXMuZXh0ZW50PTQwOTYsdGhpcy5sZW5ndGg9MCx0aGlzLl9wYmY9dCx0aGlzLl9rZXlzPVtdLHRoaXMuX3ZhbHVlcz1bXSx0aGlzLl9mZWF0dXJlcz1bXSx0LnJlYWRGaWVsZHMoU3MsdGhpcyxlKSx0aGlzLmxlbmd0aD10aGlzLl9mZWF0dXJlcy5sZW5ndGh9ZnVuY3Rpb24gU3ModCxlLHIpezE1PT09dD9lLnZlcnNpb249ci5yZWFkVmFyaW50KCk6MT09PXQ/ZS5uYW1lPXIucmVhZFN0cmluZygpOjU9PT10P2UuZXh0ZW50PXIucmVhZFZhcmludCgpOjI9PT10P2UuX2ZlYXR1cmVzLnB1c2goci5wb3MpOjM9PT10P2UuX2tleXMucHVzaChyLnJlYWRTdHJpbmcoKSk6ND09PXQmJmUuX3ZhbHVlcy5wdXNoKGZ1bmN0aW9uKHQpe3ZhciBlPW51bGwscj10LnJlYWRWYXJpbnQoKSt0LnBvcztmb3IoO3QucG9zPHI7KXt2YXIgbj10LnJlYWRWYXJpbnQoKT4+MztlPTE9PT1uP3QucmVhZFN0cmluZygpOjI9PT1uP3QucmVhZEZsb2F0KCk6Mz09PW4/dC5yZWFkRG91YmxlKCk6ND09PW4/dC5yZWFkVmFyaW50NjQoKTo1PT09bj90LnJlYWRWYXJpbnQoKTo2PT09bj90LnJlYWRTVmFyaW50KCk6Nz09PW4/dC5yZWFkQm9vbGVhbigpOm51bGx9cmV0dXJuIGV9KHIpKX1mdW5jdGlvbiBFcyh0LGUscil7aWYoMz09PXQpe3ZhciBuPW5ldyBBcyhyLHIucmVhZFZhcmludCgpK3IucG9zKTtuLmxlbmd0aCYmKGVbbi5uYW1lXT1uKX19TXMucHJvdG90eXBlLmZlYXR1cmU9ZnVuY3Rpb24odCl7aWYodDwwfHx0Pj10aGlzLl9mZWF0dXJlcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJmZWF0dXJlIGluZGV4IG91dCBvZiBib3VuZHMiKTt0aGlzLl9wYmYucG9zPXRoaXMuX2ZlYXR1cmVzW3RdO3ZhciBlPXRoaXMuX3BiZi5yZWFkVmFyaW50KCkrdGhpcy5fcGJmLnBvcztyZXR1cm4gbmV3IF9zKHRoaXMuX3BiZixlLHRoaXMuZXh0ZW50LHRoaXMuX2tleXMsdGhpcy5fdmFsdWVzKX07dmFyIExzPXtWZWN0b3JUaWxlOmZ1bmN0aW9uKHQsZSl7dGhpcy5sYXllcnM9dC5yZWFkRmllbGRzKEVzLHt9LGUpfSxWZWN0b3JUaWxlRmVhdHVyZTpfcyxWZWN0b3JUaWxlTGF5ZXI6QXN9LENzPUxzLlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzLFBzPU1hdGgucG93KDIsMTMpO2Z1bmN0aW9uIElzKHQsZSxyLG4saSxhLG8scyl7dC5lbXBsYWNlQmFjayhlLHIsMipNYXRoLmZsb29yKG4qUHMpK28saSpQcyoyLGEqUHMqMixNYXRoLnJvdW5kKHMpKX12YXIgT3M9ZnVuY3Rpb24odCl7dGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmhhc1BhdHRlcm49ITEsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgUmksdGhpcy5pbmRleEFycmF5PW5ldyBZaSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgVWEoYnMsdC5sYXllcnMsdC56b29tKSx0aGlzLnNlZ21lbnRzPW5ldyBwYSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHM9dGhpcy5sYXllcnMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pc1N0YXRlRGVwZW5kZW50KCl9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKX07ZnVuY3Rpb24genModCxlKXtyZXR1cm4gdC54PT09ZS54JiYodC54PDB8fHQueD44MTkyKXx8dC55PT09ZS55JiYodC55PDB8fHQueT44MTkyKX1mdW5jdGlvbiBEcyh0KXtyZXR1cm4gdC5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueDwwfSkpfHx0LmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC54PjgxOTJ9KSl8fHQuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnk8MH0pKXx8dC5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueT44MTkyfSkpfU9zLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5mZWF0dXJlcz1bXSx0aGlzLmhhc1BhdHRlcm49ZHMoImZpbGwtZXh0cnVzaW9uIix0aGlzLmxheWVycyxlKTtmb3IodmFyIG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YS5mZWF0dXJlLHM9YS5pZCxsPWEuaW5kZXgsYz1hLnNvdXJjZUxheWVySW5kZXgsdT10aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5uZWVkR2VvbWV0cnksZj17dHlwZTpvLnR5cGUsaWQ6cyxwcm9wZXJ0aWVzOm8ucHJvcGVydGllcyxnZW9tZXRyeTp1P1lhKG8pOltdfTtpZih0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5maWx0ZXIobmV3IHBpKHRoaXMuem9vbSksZixyKSl7dmFyIGg9e2lkOnMsc291cmNlTGF5ZXJJbmRleDpjLGluZGV4OmwsZ2VvbWV0cnk6dT9mLmdlb21ldHJ5OllhKG8pLHByb3BlcnRpZXM6by5wcm9wZXJ0aWVzLHR5cGU6by50eXBlLHBhdHRlcm5zOnt9fTt2b2lkIDAhPT1vLmlkJiYoaC5pZD1vLmlkKSx0aGlzLmhhc1BhdHRlcm4/dGhpcy5mZWF0dXJlcy5wdXNoKG1zKCJmaWxsLWV4dHJ1c2lvbiIsdGhpcy5sYXllcnMsaCx0aGlzLnpvb20sZSkpOnRoaXMuYWRkRmVhdHVyZShoLGguZ2VvbWV0cnksbCxyLHt9KSxlLmZlYXR1cmVJbmRleC5pbnNlcnQobyxoLmdlb21ldHJ5LGwsYyx0aGlzLmluZGV4LCEwKX19fSxPcy5wcm90b3R5cGUuYWRkRmVhdHVyZXM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wLGk9dGhpcy5mZWF0dXJlcztuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz1hLmdlb21ldHJ5O3RoaXMuYWRkRmVhdHVyZShhLG8sYS5pbmRleCxlLHIpfX0sT3MucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgmJnRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHQsZSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLHIpfSxPcy5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LE9zLnByb3RvdHlwZS51cGxvYWRQZW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudXBsb2FkZWR8fHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkfSxPcy5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMudXBsb2FkZWR8fCh0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LGJzKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpLHRoaXMudXBsb2FkZWQ9ITB9LE9zLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpKX0sT3MucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9MCxvPWhzKGUsNTAwKTthPG8ubGVuZ3RoO2ErPTEpe2Zvcih2YXIgcz1vW2FdLGw9MCxjPTAsdT1zO2M8dS5sZW5ndGg7Yys9MSl7bCs9dVtjXS5sZW5ndGh9Zm9yKHZhciBmPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSksaD0wLHA9cztoPHAubGVuZ3RoO2grPTEpe3ZhciBkPXBbaF07aWYoMCE9PWQubGVuZ3RoJiYhRHMoZCkpZm9yKHZhciBtPTAsZz0wO2c8ZC5sZW5ndGg7ZysrKXt2YXIgdj1kW2ddO2lmKGc+PTEpe3ZhciB5PWRbZy0xXTtpZighenModix5KSl7Zi52ZXJ0ZXhMZW5ndGgrND5wYS5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCYmKGY9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSk7dmFyIHg9di5zdWIoeSkuX3BlcnAoKS5fdW5pdCgpLGI9eS5kaXN0KHYpO20rYj4zMjc2OCYmKG09MCksSXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx2Lngsdi55LHgueCx4LnksMCwwLG0pLElzKHRoaXMubGF5b3V0VmVydGV4QXJyYXksdi54LHYueSx4LngseC55LDAsMSxtKSxtKz1iLElzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkseS54LHkueSx4LngseC55LDAsMCxtKSxJcyh0aGlzLmxheW91dFZlcnRleEFycmF5LHkueCx5LnkseC54LHgueSwwLDEsbSk7dmFyIF89Zi52ZXJ0ZXhMZW5ndGg7dGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKF8sXysyLF8rMSksdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKF8rMSxfKzIsXyszKSxmLnZlcnRleExlbmd0aCs9NCxmLnByaW1pdGl2ZUxlbmd0aCs9Mn19fX1pZihmLnZlcnRleExlbmd0aCtsPnBhLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIJiYoZj10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KGwsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpKSwiUG9seWdvbiI9PT1Dc1t0LnR5cGVdKXtmb3IodmFyIHc9W10sVD1bXSxrPWYudmVydGV4TGVuZ3RoLEE9MCxNPXM7QTxNLmxlbmd0aDtBKz0xKXt2YXIgUz1NW0FdO2lmKDAhPT1TLmxlbmd0aCl7UyE9PXNbMF0mJlQucHVzaCh3Lmxlbmd0aC8yKTtmb3IodmFyIEU9MDtFPFMubGVuZ3RoO0UrKyl7dmFyIEw9U1tFXTtJcyh0aGlzLmxheW91dFZlcnRleEFycmF5LEwueCxMLnksMCwwLDEsMSwwKSx3LnB1c2goTC54KSx3LnB1c2goTC55KX19fWZvcih2YXIgQz1Ebyh3LFQpLFA9MDtQPEMubGVuZ3RoO1ArPTMpdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGsrQ1tQXSxrK0NbUCsyXSxrK0NbUCsxXSk7Zi5wcmltaXRpdmVMZW5ndGgrPUMubGVuZ3RoLzMsZi52ZXJ0ZXhMZW5ndGgrPWx9fXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsdCxyLGksbil9LE5uKCJGaWxsRXh0cnVzaW9uQnVja2V0IixPcyx7b21pdDpbImxheWVycyIsImZlYXR1cmVzIl19KTt2YXIgUnM9e3BhaW50Om5ldyBTaSh7ImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiOm5ldyB3aShMdFsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tb3BhY2l0eSJdKSwiZmlsbC1leHRydXNpb24tY29sb3IiOm5ldyBUaShMdFsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tY29sb3IiXSksImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSI6bmV3IHdpKEx0WyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiXSksImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3IiOm5ldyB3aShMdFsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvciJdKSwiZmlsbC1leHRydXNpb24tcGF0dGVybiI6bmV3IGtpKEx0WyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuIl0pLCJmaWxsLWV4dHJ1c2lvbi1oZWlnaHQiOm5ldyBUaShMdFsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24taGVpZ2h0Il0pLCJmaWxsLWV4dHJ1c2lvbi1iYXNlIjpuZXcgVGkoTHRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLWJhc2UiXSksImZpbGwtZXh0cnVzaW9uLXZlcnRpY2FsLWdyYWRpZW50IjpuZXcgd2koTHRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLXZlcnRpY2FsLWdyYWRpZW50Il0pfSl9LEZzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxScyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE9zKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBzbyh0aGlzLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIikpfSxlLnByb3RvdHlwZS5pczNEPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixhLG8scyxsKXt2YXIgYz1sbyh0LHRoaXMucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiKSx0aGlzLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvciIpLG8uYW5nbGUscyksdT10aGlzLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24taGVpZ2h0IikuZXZhbHVhdGUoZSxyKSxmPXRoaXMucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi1iYXNlIikuZXZhbHVhdGUoZSxyKSxoPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgYT1bXSxvPTAscz10O288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPVtsLngsbC55LG4sMV07eG8oYyxjLGUpLGEucHVzaChuZXcgaShjWzBdL2NbM10sY1sxXS9jWzNdKSl9cmV0dXJuIGF9KGMsbCwwLDApLHA9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBhPVtdLG89W10scz1uWzhdKmUsbD1uWzldKmUsYz1uWzEwXSplLHU9blsxMV0qZSxmPW5bOF0qcixoPW5bOV0qcixwPW5bMTBdKnIsZD1uWzExXSpyLG09MCxnPXQ7bTxnLmxlbmd0aDttKz0xKXtmb3IodmFyIHY9Z1ttXSx5PVtdLHg9W10sYj0wLF89djtiPF8ubGVuZ3RoO2IrPTEpe3ZhciB3PV9bYl0sVD13Lngsaz13LnksQT1uWzBdKlQrbls0XSprK25bMTJdLE09blsxXSpUK25bNV0qaytuWzEzXSxTPW5bMl0qVCtuWzZdKmsrblsxNF0sRT1uWzNdKlQrbls3XSprK25bMTVdLEw9UytjLEM9RSt1LFA9QStmLEk9TStoLE89UytwLHo9RStkLEQ9bmV3IGkoKEErcykvQywoTStsKS9DKTtELno9TC9DLHkucHVzaChEKTt2YXIgUj1uZXcgaShQL3osSS96KTtSLno9Ty96LHgucHVzaChSKX1hLnB1c2goeSksby5wdXNoKHgpfXJldHVyblthLG9dfShuLGYsdSxsKTtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBuPTEvMDtLYShyLGUpJiYobj1OcyhyLGVbMF0pKTtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKylmb3IodmFyIGE9ZVtpXSxvPXRbaV0scz0wO3M8YS5sZW5ndGgtMTtzKyspe3ZhciBsPWFbc10sYz1hW3MrMV0sdT1vW3NdLGY9b1tzKzFdLGg9W2wsYyxmLHUsbF07WmEocixoKSYmKG49TWF0aC5taW4obixOcyhyLGgpKSl9cmV0dXJuIG4hPT0xLzAmJm59KHBbMF0scFsxXSxoKX0sZX0oRWkpO2Z1bmN0aW9uIEJzKHQsZSl7cmV0dXJuIHQueCplLngrdC55KmUueX1mdW5jdGlvbiBOcyh0LGUpe2lmKDE9PT10Lmxlbmd0aCl7Zm9yKHZhciByLG49MCxpPWVbbisrXTshcnx8aS5lcXVhbHMocik7KWlmKCEocj1lW24rK10pKXJldHVybiAxLzA7Zm9yKDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXSxvPXRbMF0scz1yLnN1YihpKSxsPWEuc3ViKGkpLGM9by5zdWIoaSksdT1CcyhzLHMpLGY9QnMocyxsKSxoPUJzKGwsbCkscD1CcyhjLHMpLGQ9QnMoYyxsKSxtPXUqaC1mKmYsZz0oaCpwLWYqZCkvbSx2PSh1KmQtZipwKS9tLHk9MS1nLXYseD1pLnoqeStyLnoqZythLnoqdjtpZihpc0Zpbml0ZSh4KSlyZXR1cm4geH1yZXR1cm4gMS8wfWZvcih2YXIgYj0xLzAsXz0wLHc9ZTtfPHcubGVuZ3RoO18rPTEpe3ZhciBUPXdbX107Yj1NYXRoLm1pbihiLFQueil9cmV0dXJuIGJ9dmFyIGpzPUlpKFt7bmFtZToiYV9wb3Nfbm9ybWFsIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifSx7bmFtZToiYV9kYXRhIixjb21wb25lbnRzOjQsdHlwZToiVWludDgifV0sNCkubWVtYmVycyxVcz1Mcy5WZWN0b3JUaWxlRmVhdHVyZS50eXBlcyxWcz1NYXRoLmNvcyhNYXRoLlBJLzE4MCozNy41KSxIcz1NYXRoLnBvdygyLDE0KS8uNSxxcz1mdW5jdGlvbih0KXt0aGlzLnpvb209dC56b29tLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmxheWVycz10LmxheWVycyx0aGlzLmxheWVySWRzPXRoaXMubGF5ZXJzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMuaGFzUGF0dGVybj0hMSx0aGlzLnBhdHRlcm5GZWF0dXJlcz1bXSx0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyBGaSx0aGlzLmluZGV4QXJyYXk9bmV3IFlpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPW5ldyBVYShqcyx0LmxheWVycyx0Lnpvb20pLHRoaXMuc2VnbWVudHM9bmV3IHBhLHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcz10aGlzLmxheWVycy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlzU3RhdGVEZXBlbmRlbnQoKX0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpfTtxcy5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuaGFzUGF0dGVybj1kcygibGluZSIsdGhpcy5sYXllcnMsZSk7Zm9yKHZhciBuPXRoaXMubGF5ZXJzWzBdLmxheW91dC5nZXQoImxpbmUtc29ydC1rZXkiKSxpPVtdLGE9MCxvPXQ7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLGw9cy5mZWF0dXJlLGM9cy5pZCx1PXMuaW5kZXgsZj1zLnNvdXJjZUxheWVySW5kZXgsaD10aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5uZWVkR2VvbWV0cnkscD17dHlwZTpsLnR5cGUsaWQ6Yyxwcm9wZXJ0aWVzOmwucHJvcGVydGllcyxnZW9tZXRyeTpoP1lhKGwpOltdfTtpZih0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5maWx0ZXIobmV3IHBpKHRoaXMuem9vbSkscCxyKSl7aHx8KHAuZ2VvbWV0cnk9WWEobCkpO3ZhciBkPW4/bi5ldmFsdWF0ZShwLHt9LHIpOnZvaWQgMCxtPXtpZDpjLHByb3BlcnRpZXM6bC5wcm9wZXJ0aWVzLHR5cGU6bC50eXBlLHNvdXJjZUxheWVySW5kZXg6ZixpbmRleDp1LGdlb21ldHJ5OnAuZ2VvbWV0cnkscGF0dGVybnM6e30sc29ydEtleTpkfTtpLnB1c2gobSl9fW4mJmkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zb3J0S2V5LWUuc29ydEtleX0pKTtmb3IodmFyIGc9MCx2PWk7Zzx2Lmxlbmd0aDtnKz0xKXt2YXIgeT12W2ddLHg9eSxiPXguZ2VvbWV0cnksXz14LmluZGV4LHc9eC5zb3VyY2VMYXllckluZGV4O2lmKHRoaXMuaGFzUGF0dGVybil7dmFyIFQ9bXMoImxpbmUiLHRoaXMubGF5ZXJzLHksdGhpcy56b29tLGUpO3RoaXMucGF0dGVybkZlYXR1cmVzLnB1c2goVCl9ZWxzZSB0aGlzLmFkZEZlYXR1cmUoeSxiLF8scix7fSk7dmFyIGs9dFtfXS5mZWF0dXJlO2UuZmVhdHVyZUluZGV4Lmluc2VydChrLGIsXyx3LHRoaXMuaW5kZXgpfX0scXMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgmJnRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHQsZSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLHIpfSxxcy5wcm90b3R5cGUuYWRkRmVhdHVyZXM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wLGk9dGhpcy5wYXR0ZXJuRmVhdHVyZXM7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3RoaXMuYWRkRmVhdHVyZShhLGEuZ2VvbWV0cnksYS5pbmRleCxlLHIpfX0scXMucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RofSxxcy5wcm90b3R5cGUudXBsb2FkUGVuZGluZz1mdW5jdGlvbigpe3JldHVybiF0aGlzLnVwbG9hZGVkfHx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZH0scXMucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnVwbG9hZGVkfHwodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxqcyksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSkpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZCh0KSx0aGlzLnVwbG9hZGVkPSEwfSxxcy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSl9LHFzLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPXRoaXMubGF5ZXJzWzBdLmxheW91dCxvPWEuZ2V0KCJsaW5lLWpvaW4iKS5ldmFsdWF0ZSh0LHt9KSxzPWEuZ2V0KCJsaW5lLWNhcCIpLGw9YS5nZXQoImxpbmUtbWl0ZXItbGltaXQiKSxjPWEuZ2V0KCJsaW5lLXJvdW5kLWxpbWl0IiksdT0wLGY9ZTt1PGYubGVuZ3RoO3UrPTEpe3ZhciBoPWZbdV07dGhpcy5hZGRMaW5lKGgsdCxvLHMsbCxjKX10aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLHQscixpLG4pfSxxcy5wcm90b3R5cGUuYWRkTGluZT1mdW5jdGlvbih0LGUscixuLGksYSl7aWYodGhpcy5kaXN0YW5jZT0wLHRoaXMuc2NhbGVkRGlzdGFuY2U9MCx0aGlzLnRvdGFsRGlzdGFuY2U9MCxlLnByb3BlcnRpZXMmJmUucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgibWFwYm94X2NsaXBfc3RhcnQiKSYmZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KCJtYXBib3hfY2xpcF9lbmQiKSl7dGhpcy5jbGlwU3RhcnQ9K2UucHJvcGVydGllcy5tYXBib3hfY2xpcF9zdGFydCx0aGlzLmNsaXBFbmQ9K2UucHJvcGVydGllcy5tYXBib3hfY2xpcF9lbmQ7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aC0xO28rKyl0aGlzLnRvdGFsRGlzdGFuY2UrPXRbb10uZGlzdCh0W28rMV0pO3RoaXMudXBkYXRlU2NhbGVkRGlzdGFuY2UoKX1mb3IodmFyIHM9IlBvbHlnb24iPT09VXNbZS50eXBlXSxsPXQubGVuZ3RoO2w+PTImJnRbbC0xXS5lcXVhbHModFtsLTJdKTspbC0tO2Zvcih2YXIgYz0wO2M8bC0xJiZ0W2NdLmVxdWFscyh0W2MrMV0pOyljKys7aWYoIShsPChzPzM6MikpKXsiYmV2ZWwiPT09ciYmKGk9MS4wNSk7dmFyIHUsZj10aGlzLm92ZXJzY2FsaW5nPD0xNj8xMjI4ODAvKDUxMip0aGlzLm92ZXJzY2FsaW5nKTowLGg9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCgxMCpsLHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSxwPXZvaWQgMCxkPXZvaWQgMCxtPXZvaWQgMCxnPXZvaWQgMDt0aGlzLmUxPXRoaXMuZTI9LTEscyYmKHU9dFtsLTJdLGc9dFtjXS5zdWIodSkuX3VuaXQoKS5fcGVycCgpKTtmb3IodmFyIHY9Yzt2PGw7disrKWlmKCEoZD12PT09bC0xP3M/dFtjKzFdOnZvaWQgMDp0W3YrMV0pfHwhdFt2XS5lcXVhbHMoZCkpe2cmJihtPWcpLHUmJihwPXUpLHU9dFt2XSxnPWQ/ZC5zdWIodSkuX3VuaXQoKS5fcGVycCgpOm07dmFyIHk9KG09bXx8ZykuYWRkKGcpOzA9PT15LngmJjA9PT15Lnl8fHkuX3VuaXQoKTt2YXIgeD1tLngqZy54K20ueSpnLnksYj15LngqZy54K3kueSpnLnksXz0wIT09Yj8xL2I6MS8wLHc9MipNYXRoLnNxcnQoMi0yKmIpLFQ9YjxWcyYmcCYmZCxrPW0ueCpnLnktbS55KmcueD4wO2lmKFQmJnY+Yyl7dmFyIEE9dS5kaXN0KHApO2lmKEE+MipmKXt2YXIgTT11LnN1Yih1LnN1YihwKS5fbXVsdChmL0EpLl9yb3VuZCgpKTt0aGlzLnVwZGF0ZURpc3RhbmNlKHAsTSksdGhpcy5hZGRDdXJyZW50VmVydGV4KE0sbSwwLDAsaCkscD1NfX12YXIgUz1wJiZkLEU9Uz9yOnM/ImJ1dHQiOm47aWYoUyYmInJvdW5kIj09PUUmJihfPGE/RT0ibWl0ZXIiOl88PTImJihFPSJmYWtlcm91bmQiKSksIm1pdGVyIj09PUUmJl8+aSYmKEU9ImJldmVsIiksImJldmVsIj09PUUmJihfPjImJihFPSJmbGlwYmV2ZWwiKSxfPGkmJihFPSJtaXRlciIpKSxwJiZ0aGlzLnVwZGF0ZURpc3RhbmNlKHAsdSksIm1pdGVyIj09PUUpeS5fbXVsdChfKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSx5LDAsMCxoKTtlbHNlIGlmKCJmbGlwYmV2ZWwiPT09RSl7aWYoXz4xMDApeT1nLm11bHQoLTEpO2Vsc2V7dmFyIEw9XyptLmFkZChnKS5tYWcoKS9tLnN1YihnKS5tYWcoKTt5Ll9wZXJwKCkuX211bHQoTCooaz8tMToxKSl9dGhpcy5hZGRDdXJyZW50VmVydGV4KHUseSwwLDAsaCksdGhpcy5hZGRDdXJyZW50VmVydGV4KHUseS5tdWx0KC0xKSwwLDAsaCl9ZWxzZSBpZigiYmV2ZWwiPT09RXx8ImZha2Vyb3VuZCI9PT1FKXt2YXIgQz0tTWF0aC5zcXJ0KF8qXy0xKSxQPWs/QzowLEk9az8wOkM7aWYocCYmdGhpcy5hZGRDdXJyZW50VmVydGV4KHUsbSxQLEksaCksImZha2Vyb3VuZCI9PT1FKWZvcih2YXIgTz1NYXRoLnJvdW5kKDE4MCp3L01hdGguUEkvMjApLHo9MTt6PE87eisrKXt2YXIgRD16L087aWYoLjUhPT1EKXt2YXIgUj1ELS41O0QrPUQqUiooRC0xKSooKDEuMDkwNCt4Kih4KigzLjU1NjQ1LTEuNDM1MTkqeCktMy4yNDUyKSkqUipSKyguODQ4MDEzK3gqKC4yMTU2MzgqeC0xLjA2MDIxKSkpfXZhciBGPWcuc3ViKG0pLl9tdWx0KEQpLl9hZGQobSkuX3VuaXQoKS5fbXVsdChrPy0xOjEpO3RoaXMuYWRkSGFsZlZlcnRleCh1LEYueCxGLnksITEsaywwLGgpfWQmJnRoaXMuYWRkQ3VycmVudFZlcnRleCh1LGcsLVAsLUksaCl9ZWxzZSBpZigiYnV0dCI9PT1FKXRoaXMuYWRkQ3VycmVudFZlcnRleCh1LHksMCwwLGgpO2Vsc2UgaWYoInNxdWFyZSI9PT1FKXt2YXIgQj1wPzE6LTE7dGhpcy5hZGRDdXJyZW50VmVydGV4KHUseSxCLEIsaCl9ZWxzZSJyb3VuZCI9PT1FJiYocCYmKHRoaXMuYWRkQ3VycmVudFZlcnRleCh1LG0sMCwwLGgpLHRoaXMuYWRkQ3VycmVudFZlcnRleCh1LG0sMSwxLGgsITApKSxkJiYodGhpcy5hZGRDdXJyZW50VmVydGV4KHUsZywtMSwtMSxoLCEwKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSxnLDAsMCxoKSkpO2lmKFQmJnY8bC0xKXt2YXIgTj11LmRpc3QoZCk7aWYoTj4yKmYpe3ZhciBqPXUuYWRkKGQuc3ViKHUpLl9tdWx0KGYvTikuX3JvdW5kKCkpO3RoaXMudXBkYXRlRGlzdGFuY2UodSxqKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoaixnLDAsMCxoKSx1PWp9fX19fSxxcy5wcm90b3R5cGUuYWRkQ3VycmVudFZlcnRleD1mdW5jdGlvbih0LGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9ITEpO3ZhciBvPWUueCtlLnkqcixzPWUueS1lLngqcixsPS1lLngrZS55Km4sYz0tZS55LWUueCpuO3RoaXMuYWRkSGFsZlZlcnRleCh0LG8scyxhLCExLHIsaSksdGhpcy5hZGRIYWxmVmVydGV4KHQsbCxjLGEsITAsLW4saSksdGhpcy5kaXN0YW5jZT5Icy8yJiYwPT09dGhpcy50b3RhbERpc3RhbmNlJiYodGhpcy5kaXN0YW5jZT0wLHRoaXMuYWRkQ3VycmVudFZlcnRleCh0LGUscixuLGksYSkpfSxxcy5wcm90b3R5cGUuYWRkSGFsZlZlcnRleD1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz10LngsbD10LnksYz0uNSp0aGlzLnNjYWxlZERpc3RhbmNlO3RoaXMubGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soKHM8PDEpKyhuPzE6MCksKGw8PDEpKyhpPzE6MCksTWF0aC5yb3VuZCg2MyplKSsxMjgsTWF0aC5yb3VuZCg2MypyKSsxMjgsMSsoMD09PWE/MDphPDA/LTE6MSl8KDYzJmMpPDwyLGM+PjYpO3ZhciB1PW8udmVydGV4TGVuZ3RoKys7dGhpcy5lMT49MCYmdGhpcy5lMj49MCYmKHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayh0aGlzLmUxLHRoaXMuZTIsdSksby5wcmltaXRpdmVMZW5ndGgrKyksaT90aGlzLmUyPXU6dGhpcy5lMT11fSxxcy5wcm90b3R5cGUudXBkYXRlU2NhbGVkRGlzdGFuY2U9ZnVuY3Rpb24oKXt0aGlzLnNjYWxlZERpc3RhbmNlPXRoaXMudG90YWxEaXN0YW5jZT4wPyh0aGlzLmNsaXBTdGFydCsodGhpcy5jbGlwRW5kLXRoaXMuY2xpcFN0YXJ0KSp0aGlzLmRpc3RhbmNlL3RoaXMudG90YWxEaXN0YW5jZSkqKEhzLTEpOnRoaXMuZGlzdGFuY2V9LHFzLnByb3RvdHlwZS51cGRhdGVEaXN0YW5jZT1mdW5jdGlvbih0LGUpe3RoaXMuZGlzdGFuY2UrPXQuZGlzdChlKSx0aGlzLnVwZGF0ZVNjYWxlZERpc3RhbmNlKCl9LE5uKCJMaW5lQnVja2V0Iixxcyx7b21pdDpbImxheWVycyIsInBhdHRlcm5GZWF0dXJlcyJdfSk7dmFyIEdzPW5ldyBTaSh7ImxpbmUtY2FwIjpuZXcgd2koTHQubGF5b3V0X2xpbmVbImxpbmUtY2FwIl0pLCJsaW5lLWpvaW4iOm5ldyBUaShMdC5sYXlvdXRfbGluZVsibGluZS1qb2luIl0pLCJsaW5lLW1pdGVyLWxpbWl0IjpuZXcgd2koTHQubGF5b3V0X2xpbmVbImxpbmUtbWl0ZXItbGltaXQiXSksImxpbmUtcm91bmQtbGltaXQiOm5ldyB3aShMdC5sYXlvdXRfbGluZVsibGluZS1yb3VuZC1saW1pdCJdKSwibGluZS1zb3J0LWtleSI6bmV3IFRpKEx0LmxheW91dF9saW5lWyJsaW5lLXNvcnQta2V5Il0pfSksWXM9e3BhaW50Om5ldyBTaSh7ImxpbmUtb3BhY2l0eSI6bmV3IFRpKEx0LnBhaW50X2xpbmVbImxpbmUtb3BhY2l0eSJdKSwibGluZS1jb2xvciI6bmV3IFRpKEx0LnBhaW50X2xpbmVbImxpbmUtY29sb3IiXSksImxpbmUtdHJhbnNsYXRlIjpuZXcgd2koTHQucGFpbnRfbGluZVsibGluZS10cmFuc2xhdGUiXSksImxpbmUtdHJhbnNsYXRlLWFuY2hvciI6bmV3IHdpKEx0LnBhaW50X2xpbmVbImxpbmUtdHJhbnNsYXRlLWFuY2hvciJdKSwibGluZS13aWR0aCI6bmV3IFRpKEx0LnBhaW50X2xpbmVbImxpbmUtd2lkdGgiXSksImxpbmUtZ2FwLXdpZHRoIjpuZXcgVGkoTHQucGFpbnRfbGluZVsibGluZS1nYXAtd2lkdGgiXSksImxpbmUtb2Zmc2V0IjpuZXcgVGkoTHQucGFpbnRfbGluZVsibGluZS1vZmZzZXQiXSksImxpbmUtYmx1ciI6bmV3IFRpKEx0LnBhaW50X2xpbmVbImxpbmUtYmx1ciJdKSwibGluZS1kYXNoYXJyYXkiOm5ldyBBaShMdC5wYWludF9saW5lWyJsaW5lLWRhc2hhcnJheSJdKSwibGluZS1wYXR0ZXJuIjpuZXcga2koTHQucGFpbnRfbGluZVsibGluZS1wYXR0ZXJuIl0pLCJsaW5lLWdyYWRpZW50IjpuZXcgTWkoTHQucGFpbnRfbGluZVsibGluZS1ncmFkaWVudCJdKX0pLGxheW91dDpHc30sV3M9bmV3KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbihlLHIpe3JldHVybiByPW5ldyBwaShNYXRoLmZsb29yKHIuem9vbSkse25vdzpyLm5vdyxmYWRlRHVyYXRpb246ci5mYWRlRHVyYXRpb24sem9vbUhpc3Rvcnk6ci56b29tSGlzdG9yeSx0cmFuc2l0aW9uOnIudHJhbnNpdGlvbn0pLHQucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGUuY2FsbCh0aGlzLGUscil9LGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUscixuLGkpe3JldHVybiByPXUoe30scix7em9vbTpNYXRoLmZsb29yKHIuem9vbSl9KSx0LnByb3RvdHlwZS5ldmFsdWF0ZS5jYWxsKHRoaXMsZSxyLG4saSl9LGV9KFRpKSkoWXMucGFpbnQucHJvcGVydGllc1sibGluZS13aWR0aCJdLnNwZWNpZmljYXRpb24pO1dzLnVzZUludGVnZXJab29tPSEwO3ZhciBYcz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsWXMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5faGFuZGxlU3BlY2lhbFBhaW50UHJvcGVydHlVcGRhdGU9ZnVuY3Rpb24odCl7ImxpbmUtZ3JhZGllbnQiPT09dCYmdGhpcy5fdXBkYXRlR3JhZGllbnQoKX0sZS5wcm90b3R5cGUuX3VwZGF0ZUdyYWRpZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzWyJsaW5lLWdyYWRpZW50Il0udmFsdWUuZXhwcmVzc2lvbjt0aGlzLmdyYWRpZW50PUNvKHQsImxpbmVQcm9ncmVzcyIpLHRoaXMuZ3JhZGllbnRUZXh0dXJlPW51bGx9LGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKGUscil7dC5wcm90b3R5cGUucmVjYWxjdWxhdGUuY2FsbCh0aGlzLGUsciksdGhpcy5wYWludC5fdmFsdWVzWyJsaW5lLWZsb29yd2lkdGgiXT1Xcy5wb3NzaWJseUV2YWx1YXRlKHRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5fdmFsdWVzWyJsaW5lLXdpZHRoIl0udmFsdWUsZSl9LGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHFzKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbih0KXt2YXIgZT10LHI9WnMob28oImxpbmUtd2lkdGgiLHRoaXMsZSksb28oImxpbmUtZ2FwLXdpZHRoIix0aGlzLGUpKSxuPW9vKCJsaW5lLW9mZnNldCIsdGhpcyxlKTtyZXR1cm4gci8yK01hdGguYWJzKG4pK3NvKHRoaXMucGFpbnQuZ2V0KCJsaW5lLXRyYW5zbGF0ZSIpKX0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGEsbyxzKXt2YXIgbD1sbyh0LHRoaXMucGFpbnQuZ2V0KCJsaW5lLXRyYW5zbGF0ZSIpLHRoaXMucGFpbnQuZ2V0KCJsaW5lLXRyYW5zbGF0ZS1hbmNob3IiKSxvLmFuZ2xlLHMpLGM9cy8yKlpzKHRoaXMucGFpbnQuZ2V0KCJsaW5lLXdpZHRoIikuZXZhbHVhdGUoZSxyKSx0aGlzLnBhaW50LmdldCgibGluZS1nYXAtd2lkdGgiKS5ldmFsdWF0ZShlLHIpKSx1PXRoaXMucGFpbnQuZ2V0KCJsaW5lLW9mZnNldCIpLmV2YWx1YXRlKGUscik7cmV0dXJuIHUmJihuPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49bmV3IGkoMCwwKSxhPTA7YTx0Lmxlbmd0aDthKyspe2Zvcih2YXIgbz10W2FdLHM9W10sbD0wO2w8by5sZW5ndGg7bCsrKXt2YXIgYz1vW2wtMV0sdT1vW2xdLGY9b1tsKzFdLGg9MD09PWw/bjp1LnN1YihjKS5fdW5pdCgpLl9wZXJwKCkscD1sPT09by5sZW5ndGgtMT9uOmYuc3ViKHUpLl91bml0KCkuX3BlcnAoKSxkPWguX2FkZChwKS5fdW5pdCgpLG09ZC54KnAueCtkLnkqcC55O2QuX211bHQoMS9tKSxzLnB1c2goZC5fbXVsdChlKS5fYWRkKHUpKX1yLnB1c2gocyl9cmV0dXJuIHJ9KG4sdSpzKSksZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2lmKHQubGVuZ3RoPj0zKWZvcih2YXIgYT0wO2E8aS5sZW5ndGg7YSsrKWlmKGlvKHQsaVthXSkpcmV0dXJuITA7aWYoUWEodCxpLHIpKXJldHVybiEwfXJldHVybiExfShsLG4sYyl9LGUucHJvdG90eXBlLmlzVGlsZUNsaXBwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZX0oRWkpO2Z1bmN0aW9uIFpzKHQsZSl7cmV0dXJuIGU+MD9lKzIqdDp0fXZhciBKcz1JaShbe25hbWU6ImFfcG9zX29mZnNldCIsY29tcG9uZW50czo0LHR5cGU6IkludDE2In0se25hbWU6ImFfZGF0YSIsY29tcG9uZW50czo0LHR5cGU6IlVpbnQxNiJ9LHtuYW1lOiJhX3BpeGVsb2Zmc2V0Iixjb21wb25lbnRzOjQsdHlwZToiSW50MTYifV0sNCksS3M9SWkoW3tuYW1lOiJhX3Byb2plY3RlZF9wb3MiLGNvbXBvbmVudHM6Myx0eXBlOiJGbG9hdDMyIn1dLDQpLFFzPShJaShbe25hbWU6ImFfZmFkZV9vcGFjaXR5Iixjb21wb25lbnRzOjEsdHlwZToiVWludDMyIn1dLDQpLElpKFt7bmFtZToiYV9wbGFjZWQiLGNvbXBvbmVudHM6Mix0eXBlOiJVaW50OCJ9LHtuYW1lOiJhX3NoaWZ0Iixjb21wb25lbnRzOjIsdHlwZToiRmxvYXQzMiJ9XSkpLCRzPShJaShbe3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JQb2ludFgifSx7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclBvaW50WSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieDEifSx7dHlwZToiSW50MTYiLG5hbWU6InkxIn0se3R5cGU6IkludDE2IixuYW1lOiJ4MiJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieTIifSx7dHlwZToiVWludDMyIixuYW1lOiJmZWF0dXJlSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJzb3VyY2VMYXllckluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiYnVja2V0SW5kZXgifV0pLElpKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2FuY2hvcl9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2V4dHJ1ZGUiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9XSw0KSksdGw9SWkoW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkZsb2F0MzIifSx7bmFtZToiYV9yYWRpdXMiLGNvbXBvbmVudHM6MSx0eXBlOiJGbG9hdDMyIn0se25hbWU6ImFfZmxhZ3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9XSw0KTtJaShbe25hbWU6InRyaWFuZ2xlIixjb21wb25lbnRzOjMsdHlwZToiVWludDE2In1dKSxJaShbe3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JYIn0se3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JZIn0se3R5cGU6IlVpbnQxNiIsbmFtZToiZ2x5cGhTdGFydEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToibnVtR2x5cGhzIn0se3R5cGU6IlVpbnQzMiIsbmFtZToidmVydGV4U3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MzIiLG5hbWU6ImxpbmVTdGFydEluZGV4In0se3R5cGU6IlVpbnQzMiIsbmFtZToibGluZUxlbmd0aCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InNlZ21lbnQifSx7dHlwZToiVWludDE2IixuYW1lOiJsb3dlclNpemUifSx7dHlwZToiVWludDE2IixuYW1lOiJ1cHBlclNpemUifSx7dHlwZToiRmxvYXQzMiIsbmFtZToibGluZU9mZnNldFgifSx7dHlwZToiRmxvYXQzMiIsbmFtZToibGluZU9mZnNldFkifSx7dHlwZToiVWludDgiLG5hbWU6IndyaXRpbmdNb2RlIn0se3R5cGU6IlVpbnQ4IixuYW1lOiJwbGFjZWRPcmllbnRhdGlvbiJ9LHt0eXBlOiJVaW50OCIsbmFtZToiaGlkZGVuIn0se3R5cGU6IlVpbnQzMiIsbmFtZToiY3Jvc3NUaWxlSUQifSx7dHlwZToiSW50MTYiLG5hbWU6ImFzc29jaWF0ZWRJY29uSW5kZXgifV0pLElpKFt7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclgifSx7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclkifSx7dHlwZToiSW50MTYiLG5hbWU6InJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4In0se3R5cGU6IkludDE2IixuYW1lOiJjZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgifSx7dHlwZToiSW50MTYiLG5hbWU6ImxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgifSx7dHlwZToiSW50MTYiLG5hbWU6InZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4In0se3R5cGU6IkludDE2IixuYW1lOiJwbGFjZWRJY29uU3ltYm9sSW5kZXgifSx7dHlwZToiSW50MTYiLG5hbWU6InZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToia2V5In0se3R5cGU6IlVpbnQxNiIsbmFtZToidGV4dEJveFN0YXJ0SW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJ0ZXh0Qm94RW5kSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJ2ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToidmVydGljYWxUZXh0Qm94RW5kSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJpY29uQm94U3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6Imljb25Cb3hFbmRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJ2ZXJ0aWNhbEljb25Cb3hFbmRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6ImZlYXR1cmVJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6Im51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzIn0se3R5cGU6IlVpbnQxNiIsbmFtZToibnVtVmVydGljYWxHbHlwaFZlcnRpY2VzIn0se3R5cGU6IlVpbnQxNiIsbmFtZToibnVtSWNvblZlcnRpY2VzIn0se3R5cGU6IlVpbnQxNiIsbmFtZToibnVtVmVydGljYWxJY29uVmVydGljZXMifSx7dHlwZToiVWludDE2IixuYW1lOiJ1c2VSdW50aW1lQ29sbGlzaW9uQ2lyY2xlcyJ9LHt0eXBlOiJVaW50MzIiLG5hbWU6ImNyb3NzVGlsZUlEIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6InRleHRCb3hTY2FsZSJ9LHt0eXBlOiJGbG9hdDMyIixjb21wb25lbnRzOjIsbmFtZToidGV4dE9mZnNldCJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJjb2xsaXNpb25DaXJjbGVEaWFtZXRlciJ9XSksSWkoW3t0eXBlOiJGbG9hdDMyIixuYW1lOiJvZmZzZXRYIn1dKSxJaShbe3R5cGU6IkludDE2IixuYW1lOiJ4In0se3R5cGU6IkludDE2IixuYW1lOiJ5In0se3R5cGU6IkludDE2IixuYW1lOiJ0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvciJ9XSk7ZnVuY3Rpb24gZWwodCxlLHIpe3JldHVybiB0LnNlY3Rpb25zLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QudGV4dD1mdW5jdGlvbih0LGUscil7dmFyIG49ZS5sYXlvdXQuZ2V0KCJ0ZXh0LXRyYW5zZm9ybSIpLmV2YWx1YXRlKHIse30pO3JldHVybiJ1cHBlcmNhc2UiPT09bj90PXQudG9Mb2NhbGVVcHBlckNhc2UoKToibG93ZXJjYXNlIj09PW4mJih0PXQudG9Mb2NhbGVMb3dlckNhc2UoKSksaGkuYXBwbHlBcmFiaWNTaGFwaW5nJiYodD1oaS5hcHBseUFyYWJpY1NoYXBpbmcodCkpLHR9KHQudGV4dCxlLHIpfSkpLHR9dmFyIHJsPXsiISI6Ilx1ZmUxNSIsIiMiOiJcdWZmMDMiLCQ6Ilx1ZmYwNCIsIiUiOiJcdWZmMDUiLCImIjoiXHVmZjA2IiwiKCI6Ilx1ZmUzNSIsIikiOiJcdWZlMzYiLCIqIjoiXHVmZjBhIiwiKyI6Ilx1ZmYwYiIsIiwiOiJcdWZlMTAiLCItIjoiXHVmZTMyIiwiLiI6Ilx1MzBmYiIsIi8iOiJcdWZmMGYiLCI6IjoiXHVmZTEzIiwiOyI6Ilx1ZmUxNCIsIjwiOiJcdWZlM2YiLCI9IjoiXHVmZjFkIiwiPiI6Ilx1ZmU0MCIsIj8iOiJcdWZlMTYiLCJAIjoiXHVmZjIwIiwiWyI6Ilx1ZmU0NyIsIlxcIjoiXHVmZjNjIiwiXSI6Ilx1ZmU0OCIsIl4iOiJcdWZmM2UiLF86Ilx1ZmUzMyIsImAiOiJcdWZmNDAiLCJ7IjoiXHVmZTM3IiwifCI6Ilx1MjAxNSIsIn0iOiJcdWZlMzgiLCJ+IjoiXHVmZjVlIiwiXHhhMiI6Ilx1ZmZlMCIsIlx4YTMiOiJcdWZmZTEiLCJceGE1IjoiXHVmZmU1IiwiXHhhNiI6Ilx1ZmZlNCIsIlx4YWMiOiJcdWZmZTIiLCJceGFmIjoiXHVmZmUzIiwiXHUyMDEzIjoiXHVmZTMyIiwiXHUyMDE0IjoiXHVmZTMxIiwiXHUyMDE4IjoiXHVmZTQzIiwiXHUyMDE5IjoiXHVmZTQ0IiwiXHUyMDFjIjoiXHVmZTQxIiwiXHUyMDFkIjoiXHVmZTQyIiwiXHUyMDI2IjoiXHVmZTE5IiwiXHUyMDI3IjoiXHUzMGZiIiwiXHUyMGE5IjoiXHVmZmU2IiwiXHUzMDAxIjoiXHVmZTExIiwiXHUzMDAyIjoiXHVmZTEyIiwiXHUzMDA4IjoiXHVmZTNmIiwiXHUzMDA5IjoiXHVmZTQwIiwiXHUzMDBhIjoiXHVmZTNkIiwiXHUzMDBiIjoiXHVmZTNlIiwiXHUzMDBjIjoiXHVmZTQxIiwiXHUzMDBkIjoiXHVmZTQyIiwiXHUzMDBlIjoiXHVmZTQzIiwiXHUzMDBmIjoiXHVmZTQ0IiwiXHUzMDEwIjoiXHVmZTNiIiwiXHUzMDExIjoiXHVmZTNjIiwiXHUzMDE0IjoiXHVmZTM5IiwiXHUzMDE1IjoiXHVmZTNhIiwiXHUzMDE2IjoiXHVmZTE3IiwiXHUzMDE3IjoiXHVmZTE4IiwiXHVmZjAxIjoiXHVmZTE1IiwiXHVmZjA4IjoiXHVmZTM1IiwiXHVmZjA5IjoiXHVmZTM2IiwiXHVmZjBjIjoiXHVmZTEwIiwiXHVmZjBkIjoiXHVmZTMyIiwiXHVmZjBlIjoiXHUzMGZiIiwiXHVmZjFhIjoiXHVmZTEzIiwiXHVmZjFiIjoiXHVmZTE0IiwiXHVmZjFjIjoiXHVmZTNmIiwiXHVmZjFlIjoiXHVmZTQwIiwiXHVmZjFmIjoiXHVmZTE2IiwiXHVmZjNiIjoiXHVmZTQ3IiwiXHVmZjNkIjoiXHVmZTQ4IiwiXHVmZjNmIjoiXHVmZTMzIiwiXHVmZjViIjoiXHVmZTM3IiwiXHVmZjVjIjoiXHUyMDE1IiwiXHVmZjVkIjoiXHVmZTM4IiwiXHVmZjVmIjoiXHVmZTM1IiwiXHVmZjYwIjoiXHVmZTM2IiwiXHVmZjYxIjoiXHVmZTEyIiwiXHVmZjYyIjoiXHVmZTQxIiwiXHVmZjYzIjoiXHVmZTQyIn07dmFyIG5sPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzPTgqaS1uLTEsbD0oMTw8cyktMSxjPWw+PjEsdT0tNyxmPXI/aS0xOjAsaD1yPy0xOjEscD10W2UrZl07Zm9yKGYrPWgsYT1wJigxPDwtdSktMSxwPj49LXUsdSs9czt1PjA7YT0yNTYqYSt0W2UrZl0sZis9aCx1LT04KTtmb3Iobz1hJigxPDwtdSktMSxhPj49LXUsdSs9bjt1PjA7bz0yNTYqbyt0W2UrZl0sZis9aCx1LT04KTtpZigwPT09YSlhPTEtYztlbHNle2lmKGE9PT1sKXJldHVybiBvP05hTjoxLzAqKHA/LTE6MSk7bys9TWF0aC5wb3coMixuKSxhLT1jfXJldHVybihwPy0xOjEpKm8qTWF0aC5wb3coMixhLW4pfSxpbD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scyxsLGM9OCphLWktMSx1PSgxPDxjKS0xLGY9dT4+MSxoPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAscD1uPzA6YS0xLGQ9bj8xOi0xLG09ZTwwfHwwPT09ZSYmMS9lPDA/MTowO2ZvcihlPU1hdGguYWJzKGUpLGlzTmFOKGUpfHxlPT09MS8wPyhzPWlzTmFOKGUpPzE6MCxvPXUpOihvPU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjIpLGUqKGw9TWF0aC5wb3coMiwtbykpPDEmJihvLS0sbCo9MiksKGUrPW8rZj49MT9oL2w6aCpNYXRoLnBvdygyLDEtZikpKmw+PTImJihvKyssbC89MiksbytmPj11PyhzPTAsbz11KTpvK2Y+PTE/KHM9KGUqbC0xKSpNYXRoLnBvdygyLGkpLG8rPWYpOihzPWUqTWF0aC5wb3coMixmLTEpKk1hdGgucG93KDIsaSksbz0wKSk7aT49ODt0W3IrcF09MjU1JnMscCs9ZCxzLz0yNTYsaS09OCk7Zm9yKG89bzw8aXxzLGMrPWk7Yz4wO3RbcitwXT0yNTUmbyxwKz1kLG8vPTI1NixjLT04KTt0W3IrcC1kXXw9MTI4Km19LGFsPW9sO2Z1bmN0aW9uIG9sKHQpe3RoaXMuYnVmPUFycmF5QnVmZmVyLmlzVmlldyYmQXJyYXlCdWZmZXIuaXNWaWV3KHQpP3Q6bmV3IFVpbnQ4QXJyYXkodHx8MCksdGhpcy5wb3M9MCx0aGlzLnR5cGU9MCx0aGlzLmxlbmd0aD10aGlzLmJ1Zi5sZW5ndGh9b2wuVmFyaW50PTAsb2wuRml4ZWQ2ND0xLG9sLkJ5dGVzPTIsb2wuRml4ZWQzMj01O3ZhciBzbD0idW5kZWZpbmVkIj09dHlwZW9mIFRleHREZWNvZGVyP251bGw6bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik7ZnVuY3Rpb24gbGwodCl7cmV0dXJuIHQudHlwZT09PW9sLkJ5dGVzP3QucmVhZFZhcmludCgpK3QucG9zOnQucG9zKzF9ZnVuY3Rpb24gY2wodCxlLHIpe3JldHVybiByPzQyOTQ5NjcyOTYqZSsodD4+PjApOjQyOTQ5NjcyOTYqKGU+Pj4wKSsodD4+PjApfWZ1bmN0aW9uIHVsKHQsZSxyKXt2YXIgbj1lPD0xNjM4Mz8xOmU8PTIwOTcxNTE/MjplPD0yNjg0MzU0NTU/MzpNYXRoLmZsb29yKE1hdGgubG9nKGUpLyg3Kk1hdGguTE4yKSk7ci5yZWFsbG9jKG4pO2Zvcih2YXIgaT1yLnBvcy0xO2k+PXQ7aS0tKXIuYnVmW2krbl09ci5idWZbaV19ZnVuY3Rpb24gZmwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlVmFyaW50KHRbcl0pfWZ1bmN0aW9uIGhsKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVNWYXJpbnQodFtyXSl9ZnVuY3Rpb24gcGwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRmxvYXQodFtyXSl9ZnVuY3Rpb24gZGwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRG91YmxlKHRbcl0pfWZ1bmN0aW9uIG1sKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUJvb2xlYW4odFtyXSl9ZnVuY3Rpb24gZ2wodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRml4ZWQzMih0W3JdKX1mdW5jdGlvbiB2bCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVTRml4ZWQzMih0W3JdKX1mdW5jdGlvbiB5bCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVGaXhlZDY0KHRbcl0pfWZ1bmN0aW9uIHhsKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVNGaXhlZDY0KHRbcl0pfWZ1bmN0aW9uIGJsKHQsZSl7cmV0dXJuKHRbZV18dFtlKzFdPDw4fHRbZSsyXTw8MTYpKzE2Nzc3MjE2KnRbZSszXX1mdW5jdGlvbiBfbCh0LGUscil7dFtyXT1lLHRbcisxXT1lPj4+OCx0W3IrMl09ZT4+PjE2LHRbciszXT1lPj4+MjR9ZnVuY3Rpb24gd2wodCxlKXtyZXR1cm4odFtlXXx0W2UrMV08PDh8dFtlKzJdPDwxNikrKHRbZSszXTw8MjQpfW9sLnByb3RvdHlwZT17ZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuYnVmPW51bGx9LHJlYWRGaWVsZHM6ZnVuY3Rpb24odCxlLHIpe2ZvcihyPXJ8fHRoaXMubGVuZ3RoO3RoaXMucG9zPHI7KXt2YXIgbj10aGlzLnJlYWRWYXJpbnQoKSxpPW4+PjMsYT10aGlzLnBvczt0aGlzLnR5cGU9NyZuLHQoaSxlLHRoaXMpLHRoaXMucG9zPT09YSYmdGhpcy5za2lwKG4pfXJldHVybiBlfSxyZWFkTWVzc2FnZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnJlYWRGaWVsZHModCxlLHRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zKX0scmVhZEZpeGVkMzI6ZnVuY3Rpb24oKXt2YXIgdD1ibCh0aGlzLmJ1Zix0aGlzLnBvcyk7cmV0dXJuIHRoaXMucG9zKz00LHR9LHJlYWRTRml4ZWQzMjpmdW5jdGlvbigpe3ZhciB0PXdsKHRoaXMuYnVmLHRoaXMucG9zKTtyZXR1cm4gdGhpcy5wb3MrPTQsdH0scmVhZEZpeGVkNjQ6ZnVuY3Rpb24oKXt2YXIgdD1ibCh0aGlzLmJ1Zix0aGlzLnBvcykrNDI5NDk2NzI5NipibCh0aGlzLmJ1Zix0aGlzLnBvcys0KTtyZXR1cm4gdGhpcy5wb3MrPTgsdH0scmVhZFNGaXhlZDY0OmZ1bmN0aW9uKCl7dmFyIHQ9YmwodGhpcy5idWYsdGhpcy5wb3MpKzQyOTQ5NjcyOTYqd2wodGhpcy5idWYsdGhpcy5wb3MrNCk7cmV0dXJuIHRoaXMucG9zKz04LHR9LHJlYWRGbG9hdDpmdW5jdGlvbigpe3ZhciB0PW5sKHRoaXMuYnVmLHRoaXMucG9zLCEwLDIzLDQpO3JldHVybiB0aGlzLnBvcys9NCx0fSxyZWFkRG91YmxlOmZ1bmN0aW9uKCl7dmFyIHQ9bmwodGhpcy5idWYsdGhpcy5wb3MsITAsNTIsOCk7cmV0dXJuIHRoaXMucG9zKz04LHR9LHJlYWRWYXJpbnQ6ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMuYnVmO3JldHVybiBlPTEyNyYocj1uW3RoaXMucG9zKytdKSxyPDEyOD9lOihlfD0oMTI3JihyPW5bdGhpcy5wb3MrK10pKTw8NyxyPDEyOD9lOihlfD0oMTI3JihyPW5bdGhpcy5wb3MrK10pKTw8MTQscjwxMjg/ZTooZXw9KDEyNyYocj1uW3RoaXMucG9zKytdKSk8PDIxLHI8MTI4P2U6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1yLmJ1ZjtpZihpPWFbci5wb3MrK10sbj0oMTEyJmkpPj40LGk8MTI4KXJldHVybiBjbCh0LG4sZSk7aWYoaT1hW3IucG9zKytdLG58PSgxMjcmaSk8PDMsaTwxMjgpcmV0dXJuIGNsKHQsbixlKTtpZihpPWFbci5wb3MrK10sbnw9KDEyNyZpKTw8MTAsaTwxMjgpcmV0dXJuIGNsKHQsbixlKTtpZihpPWFbci5wb3MrK10sbnw9KDEyNyZpKTw8MTcsaTwxMjgpcmV0dXJuIGNsKHQsbixlKTtpZihpPWFbci5wb3MrK10sbnw9KDEyNyZpKTw8MjQsaTwxMjgpcmV0dXJuIGNsKHQsbixlKTtpZihpPWFbci5wb3MrK10sbnw9KDEmaSk8PDMxLGk8MTI4KXJldHVybiBjbCh0LG4sZSk7dGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB2YXJpbnQgbm90IG1vcmUgdGhhbiAxMCBieXRlcyIpfShlfD0oMTUmKHI9blt0aGlzLnBvc10pKTw8MjgsdCx0aGlzKSkpKX0scmVhZFZhcmludDY0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFZhcmludCghMCl9LHJlYWRTVmFyaW50OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWFkVmFyaW50KCk7cmV0dXJuIHQlMj09MT8odCsxKS8tMjp0LzJ9LHJlYWRCb29sZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5yZWFkVmFyaW50KCkpfSxyZWFkU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT10aGlzLnBvcztyZXR1cm4gdGhpcy5wb3M9dCx0LWU+PTEyJiZzbD9mdW5jdGlvbih0LGUscil7cmV0dXJuIHNsLmRlY29kZSh0LnN1YmFycmF5KGUscikpfSh0aGlzLmJ1ZixlLHQpOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0iIixpPWU7Zm9yKDtpPHI7KXt2YXIgYSxvLHMsbD10W2ldLGM9bnVsbCx1PWw+MjM5PzQ6bD4yMjM/MzpsPjE5MT8yOjE7aWYoaSt1PnIpYnJlYWs7MT09PXU/bDwxMjgmJihjPWwpOjI9PT11PzEyOD09KDE5MiYoYT10W2krMV0pKSYmKGM9KDMxJmwpPDw2fDYzJmEpPD0xMjcmJihjPW51bGwpOjM9PT11PyhhPXRbaSsxXSxvPXRbaSsyXSwxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZvKSYmKChjPSgxNSZsKTw8MTJ8KDYzJmEpPDw2fDYzJm8pPD0yMDQ3fHxjPj01NTI5NiYmYzw9NTczNDMpJiYoYz1udWxsKSk6ND09PXUmJihhPXRbaSsxXSxvPXRbaSsyXSxzPXRbaSszXSwxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYoKGM9KDE1JmwpPDwxOHwoNjMmYSk8PDEyfCg2MyZvKTw8Nnw2MyZzKTw9NjU1MzV8fGM+PTExMTQxMTIpJiYoYz1udWxsKSksbnVsbD09PWM/KGM9NjU1MzMsdT0xKTpjPjY1NTM1JiYoYy09NjU1MzYsbis9U3RyaW5nLmZyb21DaGFyQ29kZShjPj4+MTAmMTAyM3w1NTI5NiksYz01NjMyMHwxMDIzJmMpLG4rPVN0cmluZy5mcm9tQ2hhckNvZGUoYyksaSs9dX1yZXR1cm4gbn0odGhpcy5idWYsZSx0KX0scmVhZEJ5dGVzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT10aGlzLmJ1Zi5zdWJhcnJheSh0aGlzLnBvcyx0KTtyZXR1cm4gdGhpcy5wb3M9dCxlfSxyZWFkUGFja2VkVmFyaW50OmZ1bmN0aW9uKHQsZSl7aWYodGhpcy50eXBlIT09b2wuQnl0ZXMpcmV0dXJuIHQucHVzaCh0aGlzLnJlYWRWYXJpbnQoZSkpO3ZhciByPWxsKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPHI7KXQucHVzaCh0aGlzLnJlYWRWYXJpbnQoZSkpO3JldHVybiB0fSxyZWFkUGFja2VkU1ZhcmludDpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1vbC5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZFNWYXJpbnQoKSk7dmFyIGU9bGwodGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZFNWYXJpbnQoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRCb29sZWFuOmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PW9sLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkQm9vbGVhbigpKTt2YXIgZT1sbCh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkQm9vbGVhbigpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEZsb2F0OmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PW9sLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkRmxvYXQoKSk7dmFyIGU9bGwodGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZsb2F0KCkpO3JldHVybiB0fSxyZWFkUGFja2VkRG91YmxlOmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PW9sLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkRG91YmxlKCkpO3ZhciBlPWxsKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWREb3VibGUoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRGaXhlZDMyOmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PW9sLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkRml4ZWQzMigpKTt2YXIgZT1sbCh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRml4ZWQzMigpKTtyZXR1cm4gdH0scmVhZFBhY2tlZFNGaXhlZDMyOmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PW9sLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7dmFyIGU9bGwodGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZFNGaXhlZDMyKCkpO3JldHVybiB0fSxyZWFkUGFja2VkRml4ZWQ2NDpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1vbC5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZEZpeGVkNjQoKSk7dmFyIGU9bGwodGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZpeGVkNjQoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRTRml4ZWQ2NDpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1vbC5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO3ZhciBlPWxsKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRTRml4ZWQ2NCgpKTtyZXR1cm4gdH0sc2tpcDpmdW5jdGlvbih0KXt2YXIgZT03JnQ7aWYoZT09PW9sLlZhcmludClmb3IoO3RoaXMuYnVmW3RoaXMucG9zKytdPjEyNzspO2Vsc2UgaWYoZT09PW9sLkJ5dGVzKXRoaXMucG9zPXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zO2Vsc2UgaWYoZT09PW9sLkZpeGVkMzIpdGhpcy5wb3MrPTQ7ZWxzZXtpZihlIT09b2wuRml4ZWQ2NCl0aHJvdyBuZXcgRXJyb3IoIlVuaW1wbGVtZW50ZWQgdHlwZTogIitlKTt0aGlzLnBvcys9OH19LHdyaXRlVGFnOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVZhcmludCh0PDwzfGUpfSxyZWFsbG9jOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmxlbmd0aHx8MTY7ZTx0aGlzLnBvcyt0OyllKj0yO2lmKGUhPT10aGlzLmxlbmd0aCl7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoZSk7ci5zZXQodGhpcy5idWYpLHRoaXMuYnVmPXIsdGhpcy5sZW5ndGg9ZX19LGZpbmlzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aD10aGlzLnBvcyx0aGlzLnBvcz0wLHRoaXMuYnVmLnN1YmFycmF5KDAsdGhpcy5sZW5ndGgpfSx3cml0ZUZpeGVkMzI6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDQpLF9sKHRoaXMuYnVmLHQsdGhpcy5wb3MpLHRoaXMucG9zKz00fSx3cml0ZVNGaXhlZDMyOmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg0KSxfbCh0aGlzLmJ1Zix0LHRoaXMucG9zKSx0aGlzLnBvcys9NH0sd3JpdGVGaXhlZDY0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSxfbCh0aGlzLmJ1ZiwtMSZ0LHRoaXMucG9zKSxfbCh0aGlzLmJ1ZixNYXRoLmZsb29yKHQqKDEvNDI5NDk2NzI5NikpLHRoaXMucG9zKzQpLHRoaXMucG9zKz04fSx3cml0ZVNGaXhlZDY0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSxfbCh0aGlzLmJ1ZiwtMSZ0LHRoaXMucG9zKSxfbCh0aGlzLmJ1ZixNYXRoLmZsb29yKHQqKDEvNDI5NDk2NzI5NikpLHRoaXMucG9zKzQpLHRoaXMucG9zKz04fSx3cml0ZVZhcmludDpmdW5jdGlvbih0KXsodD0rdHx8MCk+MjY4NDM1NDU1fHx0PDA/ZnVuY3Rpb24odCxlKXt2YXIgcixuO3Q+PTA/KHI9dCU0Mjk0OTY3Mjk2fDAsbj10LzQyOTQ5NjcyOTZ8MCk6KG49figtdC80Mjk0OTY3Mjk2KSw0Mjk0OTY3Mjk1XihyPX4oLXQlNDI5NDk2NzI5NikpP3I9cisxfDA6KHI9MCxuPW4rMXwwKSk7aWYodD49MHgxMDAwMDAwMDAwMDAwMDAwMHx8dDwtMHgxMDAwMDAwMDAwMDAwMDAwMCl0aHJvdyBuZXcgRXJyb3IoIkdpdmVuIHZhcmludCBkb2Vzbid0IGZpdCBpbnRvIDEwIGJ5dGVzIik7ZS5yZWFsbG9jKDEwKSxmdW5jdGlvbih0LGUscil7ci5idWZbci5wb3MrK109MTI3JnR8MTI4LHQ+Pj49NyxyLmJ1ZltyLnBvcysrXT0xMjcmdHwxMjgsdD4+Pj03LHIuYnVmW3IucG9zKytdPTEyNyZ0fDEyOCx0Pj4+PTcsci5idWZbci5wb3MrK109MTI3JnR8MTI4LHQ+Pj49NyxyLmJ1ZltyLnBvc109MTI3JnR9KHIsMCxlKSxmdW5jdGlvbih0LGUpe3ZhciByPSg3JnQpPDw0O2lmKGUuYnVmW2UucG9zKytdfD1yfCgodD4+Pj0zKT8xMjg6MCksIXQpcmV0dXJuO2lmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksIXQpcmV0dXJuO2lmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksIXQpcmV0dXJuO2lmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksIXQpcmV0dXJuO2lmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksIXQpcmV0dXJuO2UuYnVmW2UucG9zKytdPTEyNyZ0fShuLGUpfSh0LHRoaXMpOih0aGlzLnJlYWxsb2MoNCksdGhpcy5idWZbdGhpcy5wb3MrK109MTI3JnR8KHQ+MTI3PzEyODowKSx0PD0xMjd8fCh0aGlzLmJ1Zlt0aGlzLnBvcysrXT0xMjcmKHQ+Pj49Nyl8KHQ+MTI3PzEyODowKSx0PD0xMjd8fCh0aGlzLmJ1Zlt0aGlzLnBvcysrXT0xMjcmKHQ+Pj49Nyl8KHQ+MTI3PzEyODowKSx0PD0xMjd8fCh0aGlzLmJ1Zlt0aGlzLnBvcysrXT10Pj4+NyYxMjcpKSkpfSx3cml0ZVNWYXJpbnQ6ZnVuY3Rpb24odCl7dGhpcy53cml0ZVZhcmludCh0PDA/MiotdC0xOjIqdCl9LHdyaXRlQm9vbGVhbjpmdW5jdGlvbih0KXt0aGlzLndyaXRlVmFyaW50KEJvb2xlYW4odCkpfSx3cml0ZVN0cmluZzpmdW5jdGlvbih0KXt0PVN0cmluZyh0KSx0aGlzLnJlYWxsb2MoNCp0Lmxlbmd0aCksdGhpcy5wb3MrKzt2YXIgZT10aGlzLnBvczt0aGlzLnBvcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYT0wO2E8ZS5sZW5ndGg7YSsrKXtpZigobj1lLmNoYXJDb2RlQXQoYSkpPjU1Mjk1JiZuPDU3MzQ0KXtpZighaSl7bj41NjMxOXx8YSsxPT09ZS5sZW5ndGg/KHRbcisrXT0yMzksdFtyKytdPTE5MSx0W3IrK109MTg5KTppPW47Y29udGludWV9aWYobjw1NjMyMCl7dFtyKytdPTIzOSx0W3IrK109MTkxLHRbcisrXT0xODksaT1uO2NvbnRpbnVlfW49aS01NTI5Njw8MTB8bi01NjMyMHw2NTUzNixpPW51bGx9ZWxzZSBpJiYodFtyKytdPTIzOSx0W3IrK109MTkxLHRbcisrXT0xODksaT1udWxsKTtuPDEyOD90W3IrK109bjoobjwyMDQ4P3RbcisrXT1uPj42fDE5Mjoobjw2NTUzNj90W3IrK109bj4+MTJ8MjI0Oih0W3IrK109bj4+MTh8MjQwLHRbcisrXT1uPj4xMiY2M3wxMjgpLHRbcisrXT1uPj42JjYzfDEyOCksdFtyKytdPTYzJm58MTI4KX1yZXR1cm4gcn0odGhpcy5idWYsdCx0aGlzLnBvcyk7dmFyIHI9dGhpcy5wb3MtZTtyPj0xMjgmJnVsKGUscix0aGlzKSx0aGlzLnBvcz1lLTEsdGhpcy53cml0ZVZhcmludChyKSx0aGlzLnBvcys9cn0sd3JpdGVGbG9hdDpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoNCksaWwodGhpcy5idWYsdCx0aGlzLnBvcywhMCwyMyw0KSx0aGlzLnBvcys9NH0sd3JpdGVEb3VibGU6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDgpLGlsKHRoaXMuYnVmLHQsdGhpcy5wb3MsITAsNTIsOCksdGhpcy5wb3MrPTh9LHdyaXRlQnl0ZXM6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7dGhpcy53cml0ZVZhcmludChlKSx0aGlzLnJlYWxsb2MoZSk7Zm9yKHZhciByPTA7cjxlO3IrKyl0aGlzLmJ1Zlt0aGlzLnBvcysrXT10W3JdfSx3cml0ZVJhd01lc3NhZ2U6ZnVuY3Rpb24odCxlKXt0aGlzLnBvcysrO3ZhciByPXRoaXMucG9zO3QoZSx0aGlzKTt2YXIgbj10aGlzLnBvcy1yO24+PTEyOCYmdWwocixuLHRoaXMpLHRoaXMucG9zPXItMSx0aGlzLndyaXRlVmFyaW50KG4pLHRoaXMucG9zKz1ufSx3cml0ZU1lc3NhZ2U6ZnVuY3Rpb24odCxlLHIpe3RoaXMud3JpdGVUYWcodCxvbC5CeXRlcyksdGhpcy53cml0ZVJhd01lc3NhZ2UoZSxyKX0sd3JpdGVQYWNrZWRWYXJpbnQ6ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxmbCxlKX0sd3JpdGVQYWNrZWRTVmFyaW50OmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsaGwsZSl9LHdyaXRlUGFja2VkQm9vbGVhbjpmdW5jdGlvbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LG1sLGUpfSx3cml0ZVBhY2tlZEZsb2F0OmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQscGwsZSl9LHdyaXRlUGFja2VkRG91YmxlOmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsZGwsZSl9LHdyaXRlUGFja2VkRml4ZWQzMjpmdW5jdGlvbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LGdsLGUpfSx3cml0ZVBhY2tlZFNGaXhlZDMyOmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsdmwsZSl9LHdyaXRlUGFja2VkRml4ZWQ2NDpmdW5jdGlvbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LHlsLGUpfSx3cml0ZVBhY2tlZFNGaXhlZDY0OmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQseGwsZSl9LHdyaXRlQnl0ZXNGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxvbC5CeXRlcyksdGhpcy53cml0ZUJ5dGVzKGUpfSx3cml0ZUZpeGVkMzJGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxvbC5GaXhlZDMyKSx0aGlzLndyaXRlRml4ZWQzMihlKX0sd3JpdGVTRml4ZWQzMkZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG9sLkZpeGVkMzIpLHRoaXMud3JpdGVTRml4ZWQzMihlKX0sd3JpdGVGaXhlZDY0RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsb2wuRml4ZWQ2NCksdGhpcy53cml0ZUZpeGVkNjQoZSl9LHdyaXRlU0ZpeGVkNjRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxvbC5GaXhlZDY0KSx0aGlzLndyaXRlU0ZpeGVkNjQoZSl9LHdyaXRlVmFyaW50RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsb2wuVmFyaW50KSx0aGlzLndyaXRlVmFyaW50KGUpfSx3cml0ZVNWYXJpbnRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxvbC5WYXJpbnQpLHRoaXMud3JpdGVTVmFyaW50KGUpfSx3cml0ZVN0cmluZ0ZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG9sLkJ5dGVzKSx0aGlzLndyaXRlU3RyaW5nKGUpfSx3cml0ZUZsb2F0RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsb2wuRml4ZWQzMiksdGhpcy53cml0ZUZsb2F0KGUpfSx3cml0ZURvdWJsZUZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG9sLkZpeGVkNjQpLHRoaXMud3JpdGVEb3VibGUoZSl9LHdyaXRlQm9vbGVhbkZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVZhcmludEZpZWxkKHQsQm9vbGVhbihlKSl9fTtmdW5jdGlvbiBUbCh0LGUscil7MT09PXQmJnIucmVhZE1lc3NhZ2Uoa2wsZSl9ZnVuY3Rpb24ga2wodCxlLHIpe2lmKDM9PT10KXt2YXIgbj1yLnJlYWRNZXNzYWdlKEFsLHt9KSxpPW4uaWQsYT1uLmJpdG1hcCxvPW4ud2lkdGgscz1uLmhlaWdodCxsPW4ubGVmdCxjPW4udG9wLHU9bi5hZHZhbmNlO2UucHVzaCh7aWQ6aSxiaXRtYXA6bmV3IFNvKHt3aWR0aDpvKzYsaGVpZ2h0OnMrNn0sYSksbWV0cmljczp7d2lkdGg6byxoZWlnaHQ6cyxsZWZ0OmwsdG9wOmMsYWR2YW5jZTp1fX0pfX1mdW5jdGlvbiBBbCh0LGUscil7MT09PXQ/ZS5pZD1yLnJlYWRWYXJpbnQoKToyPT09dD9lLmJpdG1hcD1yLnJlYWRCeXRlcygpOjM9PT10P2Uud2lkdGg9ci5yZWFkVmFyaW50KCk6ND09PXQ/ZS5oZWlnaHQ9ci5yZWFkVmFyaW50KCk6NT09PXQ/ZS5sZWZ0PXIucmVhZFNWYXJpbnQoKTo2PT09dD9lLnRvcD1yLnJlYWRTVmFyaW50KCk6Nz09PXQmJihlLmFkdmFuY2U9ci5yZWFkVmFyaW50KCkpfWZ1bmN0aW9uIE1sKHQpe2Zvcih2YXIgZT0wLHI9MCxuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtlKz1hLncqYS5oLHI9TWF0aC5tYXgocixhLncpfXQuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5oLXQuaH0pKTtmb3IodmFyIG89W3t4OjAseTowLHc6TWF0aC5tYXgoTWF0aC5jZWlsKE1hdGguc3FydChlLy45NSkpLHIpLGg6MS8wfV0scz0wLGw9MCxjPTAsdT10O2M8dS5sZW5ndGg7Yys9MSlmb3IodmFyIGY9dVtjXSxoPW8ubGVuZ3RoLTE7aD49MDtoLS0pe3ZhciBwPW9baF07aWYoIShmLnc+cC53fHxmLmg+cC5oKSl7aWYoZi54PXAueCxmLnk9cC55LGw9TWF0aC5tYXgobCxmLnkrZi5oKSxzPU1hdGgubWF4KHMsZi54K2YudyksZi53PT09cC53JiZmLmg9PT1wLmgpe3ZhciBkPW8ucG9wKCk7aDxvLmxlbmd0aCYmKG9baF09ZCl9ZWxzZSBmLmg9PT1wLmg/KHAueCs9Zi53LHAudy09Zi53KTpmLnc9PT1wLnc/KHAueSs9Zi5oLHAuaC09Zi5oKTooby5wdXNoKHt4OnAueCtmLncseTpwLnksdzpwLnctZi53LGg6Zi5ofSkscC55Kz1mLmgscC5oLT1mLmgpO2JyZWFrfX1yZXR1cm57dzpzLGg6bCxmaWxsOmUvKHMqbCl8fDB9fXZhciBTbD1mdW5jdGlvbih0LGUpe3ZhciByPWUucGl4ZWxSYXRpbyxuPWUudmVyc2lvbixpPWUuc3RyZXRjaFgsYT1lLnN0cmV0Y2hZLG89ZS5jb250ZW50O3RoaXMucGFkZGVkUmVjdD10LHRoaXMucGl4ZWxSYXRpbz1yLHRoaXMuc3RyZXRjaFg9aSx0aGlzLnN0cmV0Y2hZPWEsdGhpcy5jb250ZW50PW8sdGhpcy52ZXJzaW9uPW59LEVsPXt0bDp7Y29uZmlndXJhYmxlOiEwfSxicjp7Y29uZmlndXJhYmxlOiEwfSx0bGJyOntjb25maWd1cmFibGU6ITB9LGRpc3BsYXlTaXplOntjb25maWd1cmFibGU6ITB9fTtFbC50bC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5wYWRkZWRSZWN0LngrMSx0aGlzLnBhZGRlZFJlY3QueSsxXX0sRWwuYnIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMucGFkZGVkUmVjdC54K3RoaXMucGFkZGVkUmVjdC53LTEsdGhpcy5wYWRkZWRSZWN0LnkrdGhpcy5wYWRkZWRSZWN0LmgtMV19LEVsLnRsYnIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGwuY29uY2F0KHRoaXMuYnIpfSxFbC5kaXNwbGF5U2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bKHRoaXMucGFkZGVkUmVjdC53LTIpL3RoaXMucGl4ZWxSYXRpbywodGhpcy5wYWRkZWRSZWN0LmgtMikvdGhpcy5waXhlbFJhdGlvXX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2wucHJvdG90eXBlLEVsKTt2YXIgTGw9ZnVuY3Rpb24odCxlKXt2YXIgcj17fSxuPXt9O3RoaXMuaGF2ZVJlbmRlckNhbGxiYWNrcz1bXTt2YXIgaT1bXTt0aGlzLmFkZEltYWdlcyh0LHIsaSksdGhpcy5hZGRJbWFnZXMoZSxuLGkpO3ZhciBhPU1sKGkpLG89YS53LHM9YS5oLGw9bmV3IEVvKHt3aWR0aDpvfHwxLGhlaWdodDpzfHwxfSk7Zm9yKHZhciBjIGluIHQpe3ZhciB1PXRbY10sZj1yW2NdLnBhZGRlZFJlY3Q7RW8uY29weSh1LmRhdGEsbCx7eDowLHk6MH0se3g6Zi54KzEseTpmLnkrMX0sdS5kYXRhKX1mb3IodmFyIGggaW4gZSl7dmFyIHA9ZVtoXSxkPW5baF0ucGFkZGVkUmVjdCxtPWQueCsxLGc9ZC55KzEsdj1wLmRhdGEud2lkdGgseT1wLmRhdGEuaGVpZ2h0O0VvLmNvcHkocC5kYXRhLGwse3g6MCx5OjB9LHt4Om0seTpnfSxwLmRhdGEpLEVvLmNvcHkocC5kYXRhLGwse3g6MCx5OnktMX0se3g6bSx5OmctMX0se3dpZHRoOnYsaGVpZ2h0OjF9KSxFby5jb3B5KHAuZGF0YSxsLHt4OjAseTowfSx7eDptLHk6Zyt5fSx7d2lkdGg6dixoZWlnaHQ6MX0pLEVvLmNvcHkocC5kYXRhLGwse3g6di0xLHk6MH0se3g6bS0xLHk6Z30se3dpZHRoOjEsaGVpZ2h0Onl9KSxFby5jb3B5KHAuZGF0YSxsLHt4OjAseTowfSx7eDptK3YseTpnfSx7d2lkdGg6MSxoZWlnaHQ6eX0pfXRoaXMuaW1hZ2U9bCx0aGlzLmljb25Qb3NpdGlvbnM9cix0aGlzLnBhdHRlcm5Qb3NpdGlvbnM9bn07TGwucHJvdG90eXBlLmFkZEltYWdlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuIGluIHQpe3ZhciBpPXRbbl0sYT17eDowLHk6MCx3OmkuZGF0YS53aWR0aCsyLGg6aS5kYXRhLmhlaWdodCsyfTtyLnB1c2goYSksZVtuXT1uZXcgU2woYSxpKSxpLmhhc1JlbmRlckNhbGxiYWNrJiZ0aGlzLmhhdmVSZW5kZXJDYWxsYmFja3MucHVzaChuKX19LExsLnByb3RvdHlwZS5wYXRjaFVwZGF0ZWRJbWFnZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdC5kaXNwYXRjaFJlbmRlckNhbGxiYWNrcyh0aGlzLmhhdmVSZW5kZXJDYWxsYmFja3MpLHQudXBkYXRlZEltYWdlcyl0aGlzLnBhdGNoVXBkYXRlZEltYWdlKHRoaXMuaWNvblBvc2l0aW9uc1tyXSx0LmdldEltYWdlKHIpLGUpLHRoaXMucGF0Y2hVcGRhdGVkSW1hZ2UodGhpcy5wYXR0ZXJuUG9zaXRpb25zW3JdLHQuZ2V0SW1hZ2UociksZSl9LExsLnByb3RvdHlwZS5wYXRjaFVwZGF0ZWRJbWFnZT1mdW5jdGlvbih0LGUscil7aWYodCYmZSYmdC52ZXJzaW9uIT09ZS52ZXJzaW9uKXt0LnZlcnNpb249ZS52ZXJzaW9uO3ZhciBuPXQudGwsaT1uWzBdLGE9blsxXTtyLnVwZGF0ZShlLmRhdGEsdm9pZCAwLHt4OmkseTphfSl9fSxObigiSW1hZ2VQb3NpdGlvbiIsU2wpLE5uKCJJbWFnZUF0bGFzIixMbCk7dmFyIENsPXtob3Jpem9udGFsOjEsdmVydGljYWw6Mixob3Jpem9udGFsT25seTozfTt2YXIgUGw9ZnVuY3Rpb24oKXt0aGlzLnNjYWxlPTEsdGhpcy5mb250U3RhY2s9IiIsdGhpcy5pbWFnZU5hbWU9bnVsbH07UGwuZm9yVGV4dD1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBQbDtyZXR1cm4gci5zY2FsZT10fHwxLHIuZm9udFN0YWNrPWUscn0sUGwuZm9ySW1hZ2U9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFBsO3JldHVybiBlLmltYWdlTmFtZT10LGV9O3ZhciBJbD1mdW5jdGlvbigpe3RoaXMudGV4dD0iIix0aGlzLnNlY3Rpb25JbmRleD1bXSx0aGlzLnNlY3Rpb25zPVtdLHRoaXMuaW1hZ2VTZWN0aW9uSUQ9bnVsbH07ZnVuY3Rpb24gT2wodCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsbSl7dmFyIGcsdj1JbC5mcm9tRmVhdHVyZSh0LGkpO2Y9PT1DbC52ZXJ0aWNhbCYmdi52ZXJ0aWNhbGl6ZVB1bmN0dWF0aW9uKCk7dmFyIHk9aGkucHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0LHg9aGkucHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0O2lmKHkmJjE9PT12LnNlY3Rpb25zLmxlbmd0aCl7Zz1bXTtmb3IodmFyIGI9MCxfPXkodi50b1N0cmluZygpLGpsKHYsYyxhLGUsbixwLGQpKTtiPF8ubGVuZ3RoO2IrPTEpe3ZhciB3PV9bYl0sVD1uZXcgSWw7VC50ZXh0PXcsVC5zZWN0aW9ucz12LnNlY3Rpb25zO2Zvcih2YXIgaz0wO2s8dy5sZW5ndGg7aysrKVQuc2VjdGlvbkluZGV4LnB1c2goMCk7Zy5wdXNoKFQpfX1lbHNlIGlmKHgpe2c9W107Zm9yKHZhciBBPTAsTT14KHYudGV4dCx2LnNlY3Rpb25JbmRleCxqbCh2LGMsYSxlLG4scCxkKSk7QTxNLmxlbmd0aDtBKz0xKXt2YXIgUz1NW0FdLEU9bmV3IElsO0UudGV4dD1TWzBdLEUuc2VjdGlvbkluZGV4PVNbMV0sRS5zZWN0aW9ucz12LnNlY3Rpb25zLGcucHVzaChFKX19ZWxzZSBnPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dC50ZXh0LGk9MCxhPTAsbz1lO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXTtyLnB1c2godC5zdWJzdHJpbmcoaSxzKSksaT1zfXJldHVybiBpPG4ubGVuZ3RoJiZyLnB1c2godC5zdWJzdHJpbmcoaSxuLmxlbmd0aCkpLHJ9KHYsamwodixjLGEsZSxuLHAsZCkpO3ZhciBMPVtdLEM9e3Bvc2l0aW9uZWRMaW5lczpMLHRleHQ6di50b1N0cmluZygpLHRvcDp1WzFdLGJvdHRvbTp1WzFdLGxlZnQ6dVswXSxyaWdodDp1WzBdLHdyaXRpbmdNb2RlOmYsaWNvbnNJblRleHQ6ITEsdmVydGljYWxpemFibGU6ITF9O3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsZil7Zm9yKHZhciBoPTAscD0tMTcsZD0wLG09MCxnPSJyaWdodCI9PT1zPzE6ImxlZnQiPT09cz8wOi41LHY9MCx5PTAseD1pO3k8eC5sZW5ndGg7eSs9MSl7dmFyIGI9eFt5XTtiLnRyaW0oKTt2YXIgXz1iLmdldE1heFNjYWxlKCksdz0yNCooXy0xKSxUPXtwb3NpdGlvbmVkR2x5cGhzOltdLGxpbmVPZmZzZXQ6MH07dC5wb3NpdGlvbmVkTGluZXNbdl09VDt2YXIgaz1ULnBvc2l0aW9uZWRHbHlwaHMsQT0wO2lmKGIubGVuZ3RoKCkpe2Zvcih2YXIgTT0wO008Yi5sZW5ndGgoKTtNKyspe3ZhciBTPWIuZ2V0U2VjdGlvbihNKSxFPWIuZ2V0U2VjdGlvbkluZGV4KE0pLEw9Yi5nZXRDaGFyQ29kZShNKSxDPTAsUD1udWxsLEk9bnVsbCxPPW51bGwsej0yNCxEPSEobD09PUNsLmhvcml6b250YWx8fCF1JiYhWm4oTCl8fHUmJih6bFtMXXx8KFk9TCxZbi5BcmFiaWMoWSl8fFluWyJBcmFiaWMgU3VwcGxlbWVudCJdKFkpfHxZblsiQXJhYmljIEV4dGVuZGVkLUEiXShZKXx8WW5bIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSJdKFkpfHxZblsiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CIl0oWSkpKSk7aWYoUy5pbWFnZU5hbWUpe3ZhciBSPW5bUy5pbWFnZU5hbWVdO2lmKCFSKWNvbnRpbnVlO089Uy5pbWFnZU5hbWUsdC5pY29uc0luVGV4dD10Lmljb25zSW5UZXh0fHwhMCxJPVIucGFkZGVkUmVjdDt2YXIgRj1SLmRpc3BsYXlTaXplO1Muc2NhbGU9MjQqUy5zY2FsZS9mLFA9e3dpZHRoOkZbMF0saGVpZ2h0OkZbMV0sbGVmdDoxLHRvcDotMyxhZHZhbmNlOkQ/RlsxXTpGWzBdfTt2YXIgQj0yNC1GWzFdKlMuc2NhbGU7Qz13K0Isej1QLmFkdmFuY2U7dmFyIE49RD9GWzBdKlMuc2NhbGUtMjQqXzpGWzFdKlMuc2NhbGUtMjQqXztOPjAmJk4+QSYmKEE9Til9ZWxzZXt2YXIgaj1yW1MuZm9udFN0YWNrXSxVPWomJmpbTF07aWYoVSYmVS5yZWN0KUk9VS5yZWN0LFA9VS5tZXRyaWNzO2Vsc2V7dmFyIFY9ZVtTLmZvbnRTdGFja10sSD1WJiZWW0xdO2lmKCFIKWNvbnRpbnVlO1A9SC5tZXRyaWNzfUM9MjQqKF8tUy5zY2FsZSl9RD8odC52ZXJ0aWNhbGl6YWJsZT0hMCxrLnB1c2goe2dseXBoOkwsaW1hZ2VOYW1lOk8seDpoLHk6cCtDLHZlcnRpY2FsOkQsc2NhbGU6Uy5zY2FsZSxmb250U3RhY2s6Uy5mb250U3RhY2ssc2VjdGlvbkluZGV4OkUsbWV0cmljczpQLHJlY3Q6SX0pLGgrPXoqUy5zY2FsZStjKTooay5wdXNoKHtnbHlwaDpMLGltYWdlTmFtZTpPLHg6aCx5OnArQyx2ZXJ0aWNhbDpELHNjYWxlOlMuc2NhbGUsZm9udFN0YWNrOlMuZm9udFN0YWNrLHNlY3Rpb25JbmRleDpFLG1ldHJpY3M6UCxyZWN0Okl9KSxoKz1QLmFkdmFuY2UqUy5zY2FsZStjKX1pZigwIT09ay5sZW5ndGgpe3ZhciBxPWgtYztkPU1hdGgubWF4KHEsZCksVmwoaywwLGsubGVuZ3RoLTEsZyxBKX1oPTA7dmFyIEc9YSpfK0E7VC5saW5lT2Zmc2V0PU1hdGgubWF4KEEsdykscCs9RyxtPU1hdGgubWF4KEcsbSksKyt2fWVsc2UgcCs9YSwrK3Z9dmFyIFk7dmFyIFc9cC0gLTE3LFg9VWwobyksWj1YLmhvcml6b250YWxBbGlnbixKPVgudmVydGljYWxBbGlnbjsoZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwpe3ZhciBjPShlLXIpKmksdT0wO3U9YSE9PW8/LXMqbi0gLTE3OigtbipsKy41KSpvO2Zvcih2YXIgZj0wLGg9dDtmPGgubGVuZ3RoO2YrPTEpZm9yKHZhciBwPWhbZl0sZD0wLG09cC5wb3NpdGlvbmVkR2x5cGhzO2Q8bS5sZW5ndGg7ZCs9MSl7dmFyIGc9bVtkXTtnLngrPWMsZy55Kz11fX0pKHQucG9zaXRpb25lZExpbmVzLGcsWixKLGQsbSxhLFcsaS5sZW5ndGgpLHQudG9wKz0tSipXLHQuYm90dG9tPXQudG9wK1csdC5sZWZ0Kz0tWipkLHQucmlnaHQ9dC5sZWZ0K2R9KEMsZSxyLG4sZyxvLHMsbCxmLGMsaCxtKSwhZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSl7aWYoMCE9PXJbZV0ucG9zaXRpb25lZEdseXBocy5sZW5ndGgpcmV0dXJuITF9cmV0dXJuITB9KEwpJiZDfUlsLmZyb21GZWF0dXJlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBJbCxuPTA7bjx0LnNlY3Rpb25zLmxlbmd0aDtuKyspe3ZhciBpPXQuc2VjdGlvbnNbbl07aS5pbWFnZT9yLmFkZEltYWdlU2VjdGlvbihpKTpyLmFkZFRleHRTZWN0aW9uKGksZSl9cmV0dXJuIHJ9LElsLnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0Lmxlbmd0aH0sSWwucHJvdG90eXBlLmdldFNlY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VjdGlvbnNbdGhpcy5zZWN0aW9uSW5kZXhbdF1dfSxJbC5wcm90b3R5cGUuZ2V0U2VjdGlvbkluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlY3Rpb25JbmRleFt0XX0sSWwucHJvdG90eXBlLmdldENoYXJDb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRleHQuY2hhckNvZGVBdCh0KX0sSWwucHJvdG90eXBlLnZlcnRpY2FsaXplUHVuY3R1YXRpb249ZnVuY3Rpb24oKXt0aGlzLnRleHQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPSIiLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dC5jaGFyQ29kZUF0KHIrMSl8fG51bGwsaT10LmNoYXJDb2RlQXQoci0xKXx8bnVsbDsoIW58fCFKbihuKXx8cmxbdFtyKzFdXSkmJighaXx8IUpuKGkpfHxybFt0W3ItMV1dKSYmcmxbdFtyXV0/ZSs9cmxbdFtyXV06ZSs9dFtyXX1yZXR1cm4gZX0odGhpcy50ZXh0KX0sSWwucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPTA7ZTx0aGlzLnRleHQubGVuZ3RoJiZ6bFt0aGlzLnRleHQuY2hhckNvZGVBdChlKV07ZSsrKXQrKztmb3IodmFyIHI9dGhpcy50ZXh0Lmxlbmd0aCxuPXRoaXMudGV4dC5sZW5ndGgtMTtuPj0wJiZuPj10JiZ6bFt0aGlzLnRleHQuY2hhckNvZGVBdChuKV07bi0tKXItLTt0aGlzLnRleHQ9dGhpcy50ZXh0LnN1YnN0cmluZyh0LHIpLHRoaXMuc2VjdGlvbkluZGV4PXRoaXMuc2VjdGlvbkluZGV4LnNsaWNlKHQscil9LElsLnByb3RvdHlwZS5zdWJzdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgSWw7cmV0dXJuIHIudGV4dD10aGlzLnRleHQuc3Vic3RyaW5nKHQsZSksci5zZWN0aW9uSW5kZXg9dGhpcy5zZWN0aW9uSW5kZXguc2xpY2UodCxlKSxyLnNlY3Rpb25zPXRoaXMuc2VjdGlvbnMscn0sSWwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dH0sSWwucHJvdG90eXBlLmdldE1heFNjYWxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5zZWN0aW9uSW5kZXgucmVkdWNlKChmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLm1heChlLHQuc2VjdGlvbnNbcl0uc2NhbGUpfSksMCl9LElsLnByb3RvdHlwZS5hZGRUZXh0U2VjdGlvbj1mdW5jdGlvbih0LGUpe3RoaXMudGV4dCs9dC50ZXh0LHRoaXMuc2VjdGlvbnMucHVzaChQbC5mb3JUZXh0KHQuc2NhbGUsdC5mb250U3RhY2t8fGUpKTtmb3IodmFyIHI9dGhpcy5zZWN0aW9ucy5sZW5ndGgtMSxuPTA7bjx0LnRleHQubGVuZ3RoOysrbil0aGlzLnNlY3Rpb25JbmRleC5wdXNoKHIpfSxJbC5wcm90b3R5cGUuYWRkSW1hZ2VTZWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQuaW1hZ2U/dC5pbWFnZS5uYW1lOiIiO2lmKDAhPT1lLmxlbmd0aCl7dmFyIHI9dGhpcy5nZXROZXh0SW1hZ2VTZWN0aW9uQ2hhckNvZGUoKTtyPyh0aGlzLnRleHQrPVN0cmluZy5mcm9tQ2hhckNvZGUociksdGhpcy5zZWN0aW9ucy5wdXNoKFBsLmZvckltYWdlKGUpKSx0aGlzLnNlY3Rpb25JbmRleC5wdXNoKHRoaXMuc2VjdGlvbnMubGVuZ3RoLTEpKTpfKCJSZWFjaGVkIG1heGltdW0gbnVtYmVyIG9mIGltYWdlcyA2NDAxIil9ZWxzZSBfKCJDYW4ndCBhZGQgRm9ybWF0dGVkU2VjdGlvbiB3aXRoIGFuIGVtcHR5IGltYWdlLiIpfSxJbC5wcm90b3R5cGUuZ2V0TmV4dEltYWdlU2VjdGlvbkNoYXJDb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW1hZ2VTZWN0aW9uSUQ/dGhpcy5pbWFnZVNlY3Rpb25JRD49NjM3NDM/bnVsbDorK3RoaXMuaW1hZ2VTZWN0aW9uSUQ6KHRoaXMuaW1hZ2VTZWN0aW9uSUQ9NTczNDQsdGhpcy5pbWFnZVNlY3Rpb25JRCl9O3ZhciB6bD17OTohMCwxMDohMCwxMTohMCwxMjohMCwxMzohMCwzMjohMH0sRGw9e307ZnVuY3Rpb24gUmwodCxlLHIsbixpLGEpe2lmKGUuaW1hZ2VOYW1lKXt2YXIgbz1uW2UuaW1hZ2VOYW1lXTtyZXR1cm4gbz9vLmRpc3BsYXlTaXplWzBdKmUuc2NhbGUqMjQvYStpOjB9dmFyIHM9cltlLmZvbnRTdGFja10sbD1zJiZzW3RdO3JldHVybiBsP2wubWV0cmljcy5hZHZhbmNlKmUuc2NhbGUraTowfWZ1bmN0aW9uIEZsKHQsZSxyLG4pe3ZhciBpPU1hdGgucG93KHQtZSwyKTtyZXR1cm4gbj90PGU/aS8yOjIqaTppK01hdGguYWJzKHIpKnJ9ZnVuY3Rpb24gQmwodCxlLHIpe3ZhciBuPTA7cmV0dXJuIDEwPT09dCYmKG4tPTFlNCksciYmKG4rPTE1MCksNDAhPT10JiY2NTI4OCE9PXR8fChuKz01MCksNDEhPT1lJiY2NTI4OSE9PWV8fChuKz01MCksbn1mdW5jdGlvbiBObCh0LGUscixuLGksYSl7Zm9yKHZhciBvPW51bGwscz1GbChlLHIsaSxhKSxsPTAsYz1uO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXSxmPUZsKGUtdS54LHIsaSxhKSt1LmJhZG5lc3M7Zjw9cyYmKG89dSxzPWYpfXJldHVybntpbmRleDp0LHg6ZSxwcmlvckJyZWFrOm8sYmFkbmVzczpzfX1mdW5jdGlvbiBqbCh0LGUscixuLGksYSxvKXtpZigicG9pbnQiIT09YSlyZXR1cm5bXTtpZighdClyZXR1cm5bXTtmb3IodmFyIHMsbD1bXSxjPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89MCxzPTA7czx0Lmxlbmd0aCgpO3MrKyl7dmFyIGw9dC5nZXRTZWN0aW9uKHMpO28rPVJsKHQuZ2V0Q2hhckNvZGUocyksbCxuLGksZSxhKX1yZXR1cm4gby9NYXRoLm1heCgxLE1hdGguY2VpbChvL3IpKX0odCxlLHIsbixpLG8pLHU9dC50ZXh0LmluZGV4T2YoIlx1MjAwYiIpPj0wLGY9MCxoPTA7aDx0Lmxlbmd0aCgpO2grKyl7dmFyIHA9dC5nZXRTZWN0aW9uKGgpLGQ9dC5nZXRDaGFyQ29kZShoKTtpZih6bFtkXXx8KGYrPVJsKGQscCxuLGksZSxvKSksaDx0Lmxlbmd0aCgpLTEpe3ZhciBtPSEhKCEoKHM9ZCk8MTE5MDQpJiYoWW5bIkJvcG9tb2ZvIEV4dGVuZGVkIl0ocyl8fFluLkJvcG9tb2ZvKHMpfHxZblsiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiXShzKXx8WW5bIkNKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMiXShzKXx8WW5bIkNKSyBDb21wYXRpYmlsaXR5Il0ocyl8fFluWyJDSksgUmFkaWNhbHMgU3VwcGxlbWVudCJdKHMpfHxZblsiQ0pLIFN0cm9rZXMiXShzKXx8WW5bIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiJdKHMpfHxZblsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSJdKHMpfHxZblsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyJdKHMpfHxZblsiRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyJdKHMpfHxZblsiSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMiXShzKXx8WW4uSGlyYWdhbmEocyl8fFluWyJJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzIl0ocyl8fFluWyJLYW5neGkgUmFkaWNhbHMiXShzKXx8WW5bIkthdGFrYW5hIFBob25ldGljIEV4dGVuc2lvbnMiXShzKXx8WW4uS2F0YWthbmEocyl8fFluWyJWZXJ0aWNhbCBGb3JtcyJdKHMpfHxZblsiWWkgUmFkaWNhbHMiXShzKXx8WW5bIllpIFN5bGxhYmxlcyJdKHMpKSk7KERsW2RdfHxtfHxwLmltYWdlTmFtZSkmJmwucHVzaChObChoKzEsZixjLGwsQmwoZCx0LmdldENoYXJDb2RlKGgrMSksbSYmdSksITEpKX19cmV0dXJuIGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGU/dChlLnByaW9yQnJlYWspLmNvbmNhdChlLmluZGV4KTpbXX0oTmwodC5sZW5ndGgoKSxmLGMsbCwwLCEwKSl9ZnVuY3Rpb24gVWwodCl7dmFyIGU9LjUscj0uNTtzd2l0Y2godCl7Y2FzZSJyaWdodCI6Y2FzZSJ0b3AtcmlnaHQiOmNhc2UiYm90dG9tLXJpZ2h0IjplPTE7YnJlYWs7Y2FzZSJsZWZ0IjpjYXNlInRvcC1sZWZ0IjpjYXNlImJvdHRvbS1sZWZ0IjplPTB9c3dpdGNoKHQpe2Nhc2UiYm90dG9tIjpjYXNlImJvdHRvbS1yaWdodCI6Y2FzZSJib3R0b20tbGVmdCI6cj0xO2JyZWFrO2Nhc2UidG9wIjpjYXNlInRvcC1yaWdodCI6Y2FzZSJ0b3AtbGVmdCI6cj0wfXJldHVybntob3Jpem9udGFsQWxpZ246ZSx2ZXJ0aWNhbEFsaWduOnJ9fWZ1bmN0aW9uIFZsKHQsZSxyLG4saSl7aWYobnx8aSlmb3IodmFyIGE9dFtyXSxvPWEubWV0cmljcy5hZHZhbmNlKmEuc2NhbGUscz0odFtyXS54K28pKm4sbD1lO2w8PXI7bCsrKXRbbF0ueC09cyx0W2xdLnkrPWl9ZnVuY3Rpb24gSGwodCxlLHIsbixpLGEpe3ZhciBvLHM9dC5pbWFnZTtpZihzLmNvbnRlbnQpe3ZhciBsPXMuY29udGVudCxjPXMucGl4ZWxSYXRpb3x8MTtvPVtsWzBdL2MsbFsxXS9jLHMuZGlzcGxheVNpemVbMF0tbFsyXS9jLHMuZGlzcGxheVNpemVbMV0tbFszXS9jXX12YXIgdSxmLGgscCxkPWUubGVmdCphLG09ZS5yaWdodCphOyJ3aWR0aCI9PT1yfHwiYm90aCI9PT1yPyhwPWlbMF0rZC1uWzNdLGY9aVswXSttK25bMV0pOmY9KHA9aVswXSsoZCttLXMuZGlzcGxheVNpemVbMF0pLzIpK3MuZGlzcGxheVNpemVbMF07dmFyIGc9ZS50b3AqYSx2PWUuYm90dG9tKmE7cmV0dXJuImhlaWdodCI9PT1yfHwiYm90aCI9PT1yPyh1PWlbMV0rZy1uWzBdLGg9aVsxXSt2K25bMl0pOmg9KHU9aVsxXSsoZyt2LXMuZGlzcGxheVNpemVbMV0pLzIpK3MuZGlzcGxheVNpemVbMV0se2ltYWdlOnMsdG9wOnUscmlnaHQ6Zixib3R0b206aCxsZWZ0OnAsY29sbGlzaW9uUGFkZGluZzpvfX1EbFsxMF09ITAsRGxbMzJdPSEwLERsWzM4XT0hMCxEbFs0MF09ITAsRGxbNDFdPSEwLERsWzQzXT0hMCxEbFs0NV09ITAsRGxbNDddPSEwLERsWzE3M109ITAsRGxbMTgzXT0hMCxEbFs4MjAzXT0hMCxEbFs4MjA4XT0hMCxEbFs4MjExXT0hMCxEbFs4MjMxXT0hMDt2YXIgcWw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIsbixpKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuYW5nbGU9bix2b2lkIDAhPT1pJiYodGhpcy5zZWdtZW50PWkpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZSh0aGlzLngsdGhpcy55LHRoaXMuYW5nbGUsdGhpcy5zZWdtZW50KX0sZX0oaSk7Tm4oIkFuY2hvciIscWwpO2Z1bmN0aW9uIEdsKHQsZSl7dmFyIHI9ZS5leHByZXNzaW9uO2lmKCJjb25zdGFudCI9PT1yLmtpbmQpcmV0dXJue2tpbmQ6ImNvbnN0YW50IixsYXlvdXRTaXplOnIuZXZhbHVhdGUobmV3IHBpKHQrMSkpfTtpZigic291cmNlIj09PXIua2luZClyZXR1cm57a2luZDoic291cmNlIn07Zm9yKHZhciBuPXIuem9vbVN0b3BzLGk9ci5pbnRlcnBvbGF0aW9uVHlwZSxhPTA7YTxuLmxlbmd0aCYmblthXTw9dDspYSsrO2Zvcih2YXIgbz1hPU1hdGgubWF4KDAsYS0xKTtvPG4ubGVuZ3RoJiZuW29dPHQrMTspbysrO289TWF0aC5taW4obi5sZW5ndGgtMSxvKTt2YXIgcz1uW2FdLGw9bltvXTtyZXR1cm4iY29tcG9zaXRlIj09PXIua2luZD97a2luZDoiY29tcG9zaXRlIixtaW5ab29tOnMsbWF4Wm9vbTpsLGludGVycG9sYXRpb25UeXBlOml9OntraW5kOiJjYW1lcmEiLG1pblpvb206cyxtYXhab29tOmwsbWluU2l6ZTpyLmV2YWx1YXRlKG5ldyBwaShzKSksbWF4U2l6ZTpyLmV2YWx1YXRlKG5ldyBwaShsKSksaW50ZXJwb2xhdGlvblR5cGU6aX19ZnVuY3Rpb24gWWwodCxlLHIpe3ZhciBuPWUudVNpemUsaT1lLnVTaXplVCxhPXIubG93ZXJTaXplLG89ci51cHBlclNpemU7cmV0dXJuInNvdXJjZSI9PT10LmtpbmQ/YS8xMjg6ImNvbXBvc2l0ZSI9PT10LmtpbmQ/cWUoYS8xMjgsby8xMjgsaSk6bn1mdW5jdGlvbiBXbCh0LGUpe3ZhciByPTAsbj0wO2lmKCJjb25zdGFudCI9PT10LmtpbmQpbj10LmxheW91dFNpemU7ZWxzZSBpZigic291cmNlIiE9PXQua2luZCl7dmFyIGk9dC5pbnRlcnBvbGF0aW9uVHlwZSxhPXQubWluWm9vbSxvPXQubWF4Wm9vbSxzPWk/bChvci5pbnRlcnBvbGF0aW9uRmFjdG9yKGksZSxhLG8pLDAsMSk6MDsiY2FtZXJhIj09PXQua2luZD9uPXFlKHQubWluU2l6ZSx0Lm1heFNpemUscyk6cj1zfXJldHVybnt1U2l6ZVQ6cix1U2l6ZTpufX12YXIgWGw9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsZ2V0U2l6ZURhdGE6R2wsZXZhbHVhdGVTaXplRm9yRmVhdHVyZTpZbCxldmFsdWF0ZVNpemVGb3Jab29tOldsLFNJWkVfUEFDS19GQUNUT1I6MTI4fSk7ZnVuY3Rpb24gWmwodCxlLHIsbixpKXtpZih2b2lkIDA9PT1lLnNlZ21lbnQpcmV0dXJuITA7Zm9yKHZhciBhPWUsbz1lLnNlZ21lbnQrMSxzPTA7cz4tci8yOyl7aWYoLS1vPDApcmV0dXJuITE7cy09dFtvXS5kaXN0KGEpLGE9dFtvXX1zKz10W29dLmRpc3QodFtvKzFdKSxvKys7Zm9yKHZhciBsPVtdLGM9MDtzPHIvMjspe3ZhciB1PXRbby0xXSxmPXRbb10saD10W28rMV07aWYoIWgpcmV0dXJuITE7dmFyIHA9dS5hbmdsZVRvKGYpLWYuYW5nbGVUbyhoKTtmb3IocD1NYXRoLmFicygocCszKk1hdGguUEkpJSgyKk1hdGguUEkpLU1hdGguUEkpLGwucHVzaCh7ZGlzdGFuY2U6cyxhbmdsZURlbHRhOnB9KSxjKz1wO3MtbFswXS5kaXN0YW5jZT5uOyljLT1sLnNoaWZ0KCkuYW5nbGVEZWx0YTtpZihjPmkpcmV0dXJuITE7bysrLHMrPWYuZGlzdChoKX1yZXR1cm4hMH1mdW5jdGlvbiBKbCh0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aC0xO3IrKyllKz10W3JdLmRpc3QodFtyKzFdKTtyZXR1cm4gZX1mdW5jdGlvbiBLbCh0LGUscil7cmV0dXJuIHQ/LjYqZSpyOjB9ZnVuY3Rpb24gUWwodCxlKXtyZXR1cm4gTWF0aC5tYXgodD90LnJpZ2h0LXQubGVmdDowLGU/ZS5yaWdodC1lLmxlZnQ6MCl9ZnVuY3Rpb24gJGwodCxlLHIsbixpLGEpe2Zvcih2YXIgbz1LbChyLGksYSkscz1RbChyLG4pKmEsbD0wLGM9SmwodCkvMix1PTA7dTx0Lmxlbmd0aC0xO3UrKyl7dmFyIGY9dFt1XSxoPXRbdSsxXSxwPWYuZGlzdChoKTtpZihsK3A+Yyl7dmFyIGQ9KGMtbCkvcCxtPXFlKGYueCxoLngsZCksZz1xZShmLnksaC55LGQpLHY9bmV3IHFsKG0sZyxoLmFuZ2xlVG8oZiksdSk7cmV0dXJuIHYuX3JvdW5kKCksIW98fFpsKHQsdixzLG8sZSk/djp2b2lkIDB9bCs9cH19ZnVuY3Rpb24gdGModCxlLHIsbixpLGEsbyxzLGwpe3ZhciBjPUtsKG4sYSxvKSx1PVFsKG4saSksZj11Km8saD0wPT09dFswXS54fHx0WzBdLng9PT1sfHwwPT09dFswXS55fHx0WzBdLnk9PT1sO3JldHVybiBlLWY8ZS80JiYoZT1mK2UvNCksZnVuY3Rpb24gdChlLHIsbixpLGEsbyxzLGwsYyl7Zm9yKHZhciB1PW8vMixmPUpsKGUpLGg9MCxwPXItbixkPVtdLG09MDttPGUubGVuZ3RoLTE7bSsrKXtmb3IodmFyIGc9ZVttXSx2PWVbbSsxXSx5PWcuZGlzdCh2KSx4PXYuYW5nbGVUbyhnKTtwK248aCt5Oyl7dmFyIGI9KChwKz1uKS1oKS95LF89cWUoZy54LHYueCxiKSx3PXFlKGcueSx2LnksYik7aWYoXz49MCYmXzxjJiZ3Pj0wJiZ3PGMmJnAtdT49MCYmcCt1PD1mKXt2YXIgVD1uZXcgcWwoXyx3LHgsbSk7VC5fcm91bmQoKSxpJiYhWmwoZSxULG8saSxhKXx8ZC5wdXNoKFQpfX1oKz15fWx8fGQubGVuZ3RofHxzfHwoZD10KGUsaC8yLG4saSxhLG8scywhMCxjKSk7cmV0dXJuIGR9KHQsaD9lLzIqcyVlOih1LzIrMiphKSpvKnMlZSxlLGMscixmLGgsITEsbCl9ZnVuY3Rpb24gZWModCxlLHIsbixhKXtmb3IodmFyIG89W10scz0wO3M8dC5sZW5ndGg7cysrKWZvcih2YXIgbD10W3NdLGM9dm9pZCAwLHU9MDt1PGwubGVuZ3RoLTE7dSsrKXt2YXIgZj1sW3VdLGg9bFt1KzFdO2YueDxlJiZoLng8ZXx8KGYueDxlP2Y9bmV3IGkoZSxmLnkrKGgueS1mLnkpKigoZS1mLngpLyhoLngtZi54KSkpLl9yb3VuZCgpOmgueDxlJiYoaD1uZXcgaShlLGYueSsoaC55LWYueSkqKChlLWYueCkvKGgueC1mLngpKSkuX3JvdW5kKCkpLGYueTxyJiZoLnk8cnx8KGYueTxyP2Y9bmV3IGkoZi54KyhoLngtZi54KSooKHItZi55KS8oaC55LWYueSkpLHIpLl9yb3VuZCgpOmgueTxyJiYoaD1uZXcgaShmLngrKGgueC1mLngpKigoci1mLnkpLyhoLnktZi55KSkscikuX3JvdW5kKCkpLGYueD49biYmaC54Pj1ufHwoZi54Pj1uP2Y9bmV3IGkobixmLnkrKGgueS1mLnkpKigobi1mLngpLyhoLngtZi54KSkpLl9yb3VuZCgpOmgueD49biYmKGg9bmV3IGkobixmLnkrKGgueS1mLnkpKigobi1mLngpLyhoLngtZi54KSkpLl9yb3VuZCgpKSxmLnk+PWEmJmgueT49YXx8KGYueT49YT9mPW5ldyBpKGYueCsoaC54LWYueCkqKChhLWYueSkvKGgueS1mLnkpKSxhKS5fcm91bmQoKTpoLnk+PWEmJihoPW5ldyBpKGYueCsoaC54LWYueCkqKChhLWYueSkvKGgueS1mLnkpKSxhKS5fcm91bmQoKSksYyYmZi5lcXVhbHMoY1tjLmxlbmd0aC0xXSl8fChjPVtmXSxvLnB1c2goYykpLGMucHVzaChoKSkpKSl9cmV0dXJuIG99ZnVuY3Rpb24gcmModCxlLHIsbil7dmFyIGE9W10sbz10LmltYWdlLHM9by5waXhlbFJhdGlvLGw9by5wYWRkZWRSZWN0LnctMixjPW8ucGFkZGVkUmVjdC5oLTIsdT10LnJpZ2h0LXQubGVmdCxmPXQuYm90dG9tLXQudG9wLGg9by5zdHJldGNoWHx8W1swLGxdXSxwPW8uc3RyZXRjaFl8fFtbMCxjXV0sZD1mdW5jdGlvbih0LGUpe3JldHVybiB0K2VbMV0tZVswXX0sbT1oLnJlZHVjZShkLDApLGc9cC5yZWR1Y2UoZCwwKSx2PWwtbSx5PWMtZyx4PTAsYj1tLF89MCx3PWcsVD0wLGs9dixBPTAsTT15O2lmKG8uY29udGVudCYmbil7dmFyIFM9by5jb250ZW50O3g9bmMoaCwwLFNbMF0pLF89bmMocCwwLFNbMV0pLGI9bmMoaCxTWzBdLFNbMl0pLHc9bmMocCxTWzFdLFNbM10pLFQ9U1swXS14LEE9U1sxXS1fLGs9U1syXS1TWzBdLWIsTT1TWzNdLVNbMV0td312YXIgRT1mdW5jdGlvbihuLGEsbCxjKXt2YXIgaD1hYyhuLnN0cmV0Y2gteCxiLHUsdC5sZWZ0KSxwPW9jKG4uZml4ZWQtVCxrLG4uc3RyZXRjaCxtKSxkPWFjKGEuc3RyZXRjaC1fLHcsZix0LnRvcCksdj1vYyhhLmZpeGVkLUEsTSxhLnN0cmV0Y2gsZykseT1hYyhsLnN0cmV0Y2gteCxiLHUsdC5sZWZ0KSxTPW9jKGwuZml4ZWQtVCxrLGwuc3RyZXRjaCxtKSxFPWFjKGMuc3RyZXRjaC1fLHcsZix0LnRvcCksTD1vYyhjLmZpeGVkLUEsTSxjLnN0cmV0Y2gsZyksQz1uZXcgaShoLGQpLFA9bmV3IGkoeSxkKSxJPW5ldyBpKHksRSksTz1uZXcgaShoLEUpLHo9bmV3IGkocC9zLHYvcyksRD1uZXcgaShTL3MsTC9zKSxSPWUqTWF0aC5QSS8xODA7aWYoUil7dmFyIEY9TWF0aC5zaW4oUiksQj1NYXRoLmNvcyhSKSxOPVtCLC1GLEYsQl07Qy5fbWF0TXVsdChOKSxQLl9tYXRNdWx0KE4pLE8uX21hdE11bHQoTiksSS5fbWF0TXVsdChOKX12YXIgaj1uLnN0cmV0Y2grbi5maXhlZCxVPWwuc3RyZXRjaCtsLmZpeGVkLFY9YS5zdHJldGNoK2EuZml4ZWQsSD1jLnN0cmV0Y2grYy5maXhlZDtyZXR1cm57dGw6Qyx0cjpQLGJsOk8sYnI6SSx0ZXg6e3g6by5wYWRkZWRSZWN0LngrMStqLHk6by5wYWRkZWRSZWN0LnkrMStWLHc6VS1qLGg6SC1WfSx3cml0aW5nTW9kZTp2b2lkIDAsZ2x5cGhPZmZzZXQ6WzAsMF0sc2VjdGlvbkluZGV4OjAscGl4ZWxPZmZzZXRUTDp6LHBpeGVsT2Zmc2V0QlI6RCxtaW5Gb250U2NhbGVYOmsvcy91LG1pbkZvbnRTY2FsZVk6TS9zL2YsaXNTREY6cn19O2lmKG4mJihvLnN0cmV0Y2hYfHxvLnN0cmV0Y2hZKSlmb3IodmFyIEw9aWMoaCx2LG0pLEM9aWMocCx5LGcpLFA9MDtQPEwubGVuZ3RoLTE7UCsrKWZvcih2YXIgST1MW1BdLE89TFtQKzFdLHo9MDt6PEMubGVuZ3RoLTE7eisrKXt2YXIgRD1DW3pdLFI9Q1t6KzFdO2EucHVzaChFKEksRCxPLFIpKX1lbHNlIGEucHVzaChFKHtmaXhlZDowLHN0cmV0Y2g6LTF9LHtmaXhlZDowLHN0cmV0Y2g6LTF9LHtmaXhlZDowLHN0cmV0Y2g6bCsxfSx7Zml4ZWQ6MCxzdHJldGNoOmMrMX0pKTtyZXR1cm4gYX1mdW5jdGlvbiBuYyh0LGUscil7Zm9yKHZhciBuPTAsaT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07bis9TWF0aC5tYXgoZSxNYXRoLm1pbihyLG9bMV0pKS1NYXRoLm1heChlLE1hdGgubWluKHIsb1swXSkpfXJldHVybiBufWZ1bmN0aW9uIGljKHQsZSxyKXtmb3IodmFyIG49W3tmaXhlZDotMSxzdHJldGNoOjB9XSxpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXSxzPW9bMF0sbD1vWzFdLGM9bltuLmxlbmd0aC0xXTtuLnB1c2goe2ZpeGVkOnMtYy5zdHJldGNoLHN0cmV0Y2g6Yy5zdHJldGNofSksbi5wdXNoKHtmaXhlZDpzLWMuc3RyZXRjaCxzdHJldGNoOmMuc3RyZXRjaCsobC1zKX0pfXJldHVybiBuLnB1c2goe2ZpeGVkOmUrMSxzdHJldGNoOnJ9KSxufWZ1bmN0aW9uIGFjKHQsZSxyLG4pe3JldHVybiB0L2UqcitufWZ1bmN0aW9uIG9jKHQsZSxyLG4pe3JldHVybiB0LWUqci9ufXZhciBzYz1mdW5jdGlvbih0LGUscixuLGEsbyxzLGwsYyx1KXtpZih0aGlzLmJveFN0YXJ0SW5kZXg9dC5sZW5ndGgsYyl7dmFyIGY9by50b3AsaD1vLmJvdHRvbSxwPW8uY29sbGlzaW9uUGFkZGluZztwJiYoZi09cFsxXSxoKz1wWzNdKTt2YXIgZD1oLWY7ZD4wJiYoZD1NYXRoLm1heCgxMCxkKSx0aGlzLmNpcmNsZURpYW1ldGVyPWQpfWVsc2V7dmFyIG09by50b3Aqcy1sLGc9by5ib3R0b20qcytsLHY9by5sZWZ0KnMtbCx5PW8ucmlnaHQqcytsLHg9by5jb2xsaXNpb25QYWRkaW5nO2lmKHgmJih2LT14WzBdKnMsbS09eFsxXSpzLHkrPXhbMl0qcyxnKz14WzNdKnMpLHUpe3ZhciBiPW5ldyBpKHYsbSksXz1uZXcgaSh5LG0pLHc9bmV3IGkodixnKSxUPW5ldyBpKHksZyksaz11Kk1hdGguUEkvMTgwO2IuX3JvdGF0ZShrKSxfLl9yb3RhdGUoayksdy5fcm90YXRlKGspLFQuX3JvdGF0ZShrKSx2PU1hdGgubWluKGIueCxfLngsdy54LFQueCkseT1NYXRoLm1heChiLngsXy54LHcueCxULngpLG09TWF0aC5taW4oYi55LF8ueSx3LnksVC55KSxnPU1hdGgubWF4KGIueSxfLnksdy55LFQueSl9dC5lbXBsYWNlQmFjayhlLngsZS55LHYsbSx5LGcscixuLGEpfXRoaXMuYm94RW5kSW5kZXg9dC5sZW5ndGh9LGxjPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PWUmJihlPWNjKSx0aGlzLmRhdGE9dCx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuY29tcGFyZT1lLHRoaXMubGVuZ3RoPjApZm9yKHZhciByPSh0aGlzLmxlbmd0aD4+MSktMTtyPj0wO3ItLSl0aGlzLl9kb3duKHIpfTtmdW5jdGlvbiBjYyh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6MH1mdW5jdGlvbiB1Yyh0LGUscil7dm9pZCAwPT09ZSYmKGU9MSksdm9pZCAwPT09ciYmKHI9ITEpO2Zvcih2YXIgbj0xLzAsYT0xLzAsbz0tMS8wLHM9LTEvMCxsPXRbMF0sYz0wO2M8bC5sZW5ndGg7YysrKXt2YXIgdT1sW2NdOyghY3x8dS54PG4pJiYobj11LngpLCghY3x8dS55PGEpJiYoYT11LnkpLCghY3x8dS54Pm8pJiYobz11LngpLCghY3x8dS55PnMpJiYocz11LnkpfXZhciBmPW8tbixoPXMtYSxwPU1hdGgubWluKGYsaCksZD1wLzIsbT1uZXcgbGMoW10sZmMpO2lmKDA9PT1wKXJldHVybiBuZXcgaShuLGEpO2Zvcih2YXIgZz1uO2c8bztnKz1wKWZvcih2YXIgdj1hO3Y8czt2Kz1wKW0ucHVzaChuZXcgaGMoZytkLHYrZCxkLHQpKTtmb3IodmFyIHk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wLG49MCxpPXRbMF0sYT0wLG89aS5sZW5ndGgscz1vLTE7YTxvO3M9YSsrKXt2YXIgbD1pW2FdLGM9aVtzXSx1PWwueCpjLnktYy54KmwueTtyKz0obC54K2MueCkqdSxuKz0obC55K2MueSkqdSxlKz0zKnV9cmV0dXJuIG5ldyBoYyhyL2Usbi9lLDAsdCl9KHQpLHg9bS5sZW5ndGg7bS5sZW5ndGg7KXt2YXIgYj1tLnBvcCgpOyhiLmQ+eS5kfHwheS5kKSYmKHk9YixyJiZjb25zb2xlLmxvZygiZm91bmQgYmVzdCAlZCBhZnRlciAlZCBwcm9iZXMiLE1hdGgucm91bmQoMWU0KmIuZCkvMWU0LHgpKSxiLm1heC15LmQ8PWV8fChkPWIuaC8yLG0ucHVzaChuZXcgaGMoYi5wLngtZCxiLnAueS1kLGQsdCkpLG0ucHVzaChuZXcgaGMoYi5wLngrZCxiLnAueS1kLGQsdCkpLG0ucHVzaChuZXcgaGMoYi5wLngtZCxiLnAueStkLGQsdCkpLG0ucHVzaChuZXcgaGMoYi5wLngrZCxiLnAueStkLGQsdCkpLHgrPTQpfXJldHVybiByJiYoY29uc29sZS5sb2coIm51bSBwcm9iZXM6ICIreCksY29uc29sZS5sb2coImJlc3QgZGlzdGFuY2U6ICIreS5kKSkseS5wfWZ1bmN0aW9uIGZjKHQsZSl7cmV0dXJuIGUubWF4LXQubWF4fWZ1bmN0aW9uIGhjKHQsZSxyLG4pe3RoaXMucD1uZXcgaSh0LGUpLHRoaXMuaD1yLHRoaXMuZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0hMSxuPTEvMCxpPTA7aTxlLmxlbmd0aDtpKyspZm9yKHZhciBhPWVbaV0sbz0wLHM9YS5sZW5ndGgsbD1zLTE7bzxzO2w9bysrKXt2YXIgYz1hW29dLHU9YVtsXTtjLnk+dC55IT11Lnk+dC55JiZ0Lng8KHUueC1jLngpKih0LnktYy55KS8odS55LWMueSkrYy54JiYocj0hciksbj1NYXRoLm1pbihuLHJvKHQsYyx1KSl9cmV0dXJuKHI/MTotMSkqTWF0aC5zcXJ0KG4pfSh0aGlzLnAsbiksdGhpcy5tYXg9dGhpcy5kK3RoaXMuaCpNYXRoLlNRUlQyfWxjLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHQpe3RoaXMuZGF0YS5wdXNoKHQpLHRoaXMubGVuZ3RoKyssdGhpcy5fdXAodGhpcy5sZW5ndGgtMSl9LGxjLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciB0PXRoaXMuZGF0YVswXSxlPXRoaXMuZGF0YS5wb3AoKTtyZXR1cm4gdGhpcy5sZW5ndGgtLSx0aGlzLmxlbmd0aD4wJiYodGhpcy5kYXRhWzBdPWUsdGhpcy5fZG93bigwKSksdH19LGxjLnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YVswXX0sbGMucHJvdG90eXBlLl91cD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5kYXRhLHI9dGhpcy5jb21wYXJlLG49ZVt0XTt0PjA7KXt2YXIgaT10LTE+PjEsYT1lW2ldO2lmKHIobixhKT49MClicmVhaztlW3RdPWEsdD1pfWVbdF09bn0sbGMucHJvdG90eXBlLl9kb3duPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmRhdGEscj10aGlzLmNvbXBhcmUsbj10aGlzLmxlbmd0aD4+MSxpPWVbdF07dDxuOyl7dmFyIGE9MSsodDw8MSksbz1lW2FdLHM9YSsxO2lmKHM8dGhpcy5sZW5ndGgmJnIoZVtzXSxvKTwwJiYoYT1zLG89ZVtzXSkscihvLGkpPj0wKWJyZWFrO2VbdF09byx0PWF9ZVt0XT1pfTt2YXIgcGM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2Z1bmN0aW9uIGRjKHQsZSl7cmV0dXJuIGVbMV0hPT1wYz9mdW5jdGlvbih0LGUscil7dmFyIG49MCxpPTA7c3dpdGNoKGU9TWF0aC5hYnMoZSkscj1NYXRoLmFicyhyKSx0KXtjYXNlInRvcC1yaWdodCI6Y2FzZSJ0b3AtbGVmdCI6Y2FzZSJ0b3AiOmk9ci03O2JyZWFrO2Nhc2UiYm90dG9tLXJpZ2h0IjpjYXNlImJvdHRvbS1sZWZ0IjpjYXNlImJvdHRvbSI6aT03LXJ9c3dpdGNoKHQpe2Nhc2UidG9wLXJpZ2h0IjpjYXNlImJvdHRvbS1yaWdodCI6Y2FzZSJyaWdodCI6bj0tZTticmVhaztjYXNlInRvcC1sZWZ0IjpjYXNlImJvdHRvbS1sZWZ0IjpjYXNlImxlZnQiOm49ZX1yZXR1cm5bbixpXX0odCxlWzBdLGVbMV0pOmZ1bmN0aW9uKHQsZSl7dmFyIHI9MCxuPTA7ZTwwJiYoZT0wKTt2YXIgaT1lL01hdGguc3FydCgyKTtzd2l0Y2godCl7Y2FzZSJ0b3AtcmlnaHQiOmNhc2UidG9wLWxlZnQiOm49aS03O2JyZWFrO2Nhc2UiYm90dG9tLXJpZ2h0IjpjYXNlImJvdHRvbS1sZWZ0IjpuPTctaTticmVhaztjYXNlImJvdHRvbSI6bj03LWU7YnJlYWs7Y2FzZSJ0b3AiOm49ZS03fXN3aXRjaCh0KXtjYXNlInRvcC1yaWdodCI6Y2FzZSJib3R0b20tcmlnaHQiOnI9LWk7YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6Y2FzZSJib3R0b20tbGVmdCI6cj1pO2JyZWFrO2Nhc2UibGVmdCI6cj1lO2JyZWFrO2Nhc2UicmlnaHQiOnI9LWV9cmV0dXJuW3Isbl19KHQsZVswXSl9ZnVuY3Rpb24gbWModCl7c3dpdGNoKHQpe2Nhc2UicmlnaHQiOmNhc2UidG9wLXJpZ2h0IjpjYXNlImJvdHRvbS1yaWdodCI6cmV0dXJuInJpZ2h0IjtjYXNlImxlZnQiOmNhc2UidG9wLWxlZnQiOmNhc2UiYm90dG9tLWxlZnQiOnJldHVybiJsZWZ0In1yZXR1cm4iY2VudGVyIn1mdW5jdGlvbiBnYyh0LGUscixuLGEsbyxzLGwsYyx1LGYsaCxwLGQsbSl7dmFyIGc9ZnVuY3Rpb24odCxlLHIsbixhLG8scyxsKXtmb3IodmFyIGM9bi5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0ZSIpLmV2YWx1YXRlKG8se30pKk1hdGguUEkvMTgwLHU9W10sZj0wLGg9ZS5wb3NpdGlvbmVkTGluZXM7ZjxoLmxlbmd0aDtmKz0xKWZvcih2YXIgcD1oW2ZdLGQ9MCxtPXAucG9zaXRpb25lZEdseXBocztkPG0ubGVuZ3RoO2QrPTEpe3ZhciBnPW1bZF07aWYoZy5yZWN0KXt2YXIgdj1nLnJlY3R8fHt9LHk9NCx4PSEwLGI9MSxfPTAsdz0oYXx8bCkmJmcudmVydGljYWwsVD1nLm1ldHJpY3MuYWR2YW5jZSpnLnNjYWxlLzI7aWYobCYmZS52ZXJ0aWNhbGl6YWJsZSl7dmFyIGs9MjQqKGcuc2NhbGUtMSksQT0oMjQtZy5tZXRyaWNzLndpZHRoKmcuc2NhbGUpLzI7Xz1wLmxpbmVPZmZzZXQvMi0oZy5pbWFnZU5hbWU/LUE6ayl9aWYoZy5pbWFnZU5hbWUpe3ZhciBNPXNbZy5pbWFnZU5hbWVdO3g9TS5zZGYseT0xLyhiPU0ucGl4ZWxSYXRpbyl9dmFyIFM9YT9bZy54K1QsZy55XTpbMCwwXSxFPWE/WzAsMF06W2cueCtUK3JbMF0sZy55K3JbMV0tX10sTD1bMCwwXTt3JiYoTD1FLEU9WzAsMF0pO3ZhciBDPShnLm1ldHJpY3MubGVmdC15KSpnLnNjYWxlLVQrRVswXSxQPSgtZy5tZXRyaWNzLnRvcC15KSpnLnNjYWxlK0VbMV0sST1DK3YudypnLnNjYWxlL2IsTz1QK3YuaCpnLnNjYWxlL2Isej1uZXcgaShDLFApLEQ9bmV3IGkoSSxQKSxSPW5ldyBpKEMsTyksRj1uZXcgaShJLE8pO2lmKHcpe3ZhciBCPW5ldyBpKC1ULFQtIC0xNyksTj0tTWF0aC5QSS8yLGo9MTItVCxVPWcuaW1hZ2VOYW1lP2o6MCxWPW5ldyBpKDIyLWosLVUpLEg9bmV3KEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KGksW251bGxdLmNvbmNhdChMKSkpO3ouX3JvdGF0ZUFyb3VuZChOLEIpLl9hZGQoVikuX2FkZChIKSxELl9yb3RhdGVBcm91bmQoTixCKS5fYWRkKFYpLl9hZGQoSCksUi5fcm90YXRlQXJvdW5kKE4sQikuX2FkZChWKS5fYWRkKEgpLEYuX3JvdGF0ZUFyb3VuZChOLEIpLl9hZGQoVikuX2FkZChIKX1pZihjKXt2YXIgcT1NYXRoLnNpbihjKSxHPU1hdGguY29zKGMpLFk9W0csLXEscSxHXTt6Ll9tYXRNdWx0KFkpLEQuX21hdE11bHQoWSksUi5fbWF0TXVsdChZKSxGLl9tYXRNdWx0KFkpfXZhciBXPW5ldyBpKDAsMCksWD1uZXcgaSgwLDApO3UucHVzaCh7dGw6eix0cjpELGJsOlIsYnI6Rix0ZXg6dix3cml0aW5nTW9kZTplLndyaXRpbmdNb2RlLGdseXBoT2Zmc2V0OlMsc2VjdGlvbkluZGV4Omcuc2VjdGlvbkluZGV4LGlzU0RGOngscGl4ZWxPZmZzZXRUTDpXLHBpeGVsT2Zmc2V0QlI6WCxtaW5Gb250U2NhbGVYOjAsbWluRm9udFNjYWxlWTowfSl9fXJldHVybiB1fSgwLHIsbCxhLG8scyxuLHQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCksdj10LnRleHRTaXplRGF0YSx5PW51bGw7InNvdXJjZSI9PT12LmtpbmQ/KHk9WzEyOCphLmxheW91dC5nZXQoInRleHQtc2l6ZSIpLmV2YWx1YXRlKHMse30pXSlbMF0+MzI2NDAmJl8odC5sYXllcklkc1swXSsnOiBWYWx1ZSBmb3IgInRleHQtc2l6ZSIgaXMgPj0gMjU1LiBSZWR1Y2UgeW91ciAidGV4dC1zaXplIi4nKToiY29tcG9zaXRlIj09PXYua2luZCYmKCh5PVsxMjgqZC5jb21wb3NpdGVUZXh0U2l6ZXNbMF0uZXZhbHVhdGUocyx7fSxtKSwxMjgqZC5jb21wb3NpdGVUZXh0U2l6ZXNbMV0uZXZhbHVhdGUocyx7fSxtKV0pWzBdPjMyNjQwfHx5WzFdPjMyNjQwKSYmXyh0LmxheWVySWRzWzBdKyc6IFZhbHVlIGZvciAidGV4dC1zaXplIiBpcyA+PSAyNTUuIFJlZHVjZSB5b3VyICJ0ZXh0LXNpemUiLicpLHQuYWRkU3ltYm9scyh0LnRleHQsZyx5LGwsbyxzLHUsZSxjLmxpbmVTdGFydEluZGV4LGMubGluZUxlbmd0aCxwLG0pO2Zvcih2YXIgeD0wLGI9Zjt4PGIubGVuZ3RoO3grPTEpe2hbYlt4XV09dC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5Lmxlbmd0aC0xfXJldHVybiA0KmcubGVuZ3RofWZ1bmN0aW9uIHZjKHQpe2Zvcih2YXIgZSBpbiB0KXJldHVybiB0W2VdO3JldHVybiBudWxsfWZ1bmN0aW9uIHljKHQsZSxyLG4pe3ZhciBpPXQuY29tcGFyZVRleHQ7aWYoZSBpbiBpKXtmb3IodmFyIGE9aVtlXSxvPWEubGVuZ3RoLTE7bz49MDtvLS0paWYobi5kaXN0KGFbb10pPHIpcmV0dXJuITB9ZWxzZSBpW2VdPVtdO3JldHVybiBpW2VdLnB1c2gobiksITF9dmFyIHhjPUxzLlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzLGJjPVt7bmFtZToiYV9mYWRlX29wYWNpdHkiLGNvbXBvbmVudHM6MSx0eXBlOiJVaW50OCIsb2Zmc2V0OjB9XTtmdW5jdGlvbiBfYyh0LGUscixuLGksYSxvLHMsbCxjLHUsZixoKXt2YXIgcD1zP01hdGgubWluKDMyNjQwLE1hdGgucm91bmQoc1swXSkpOjAsZD1zP01hdGgubWluKDMyNjQwLE1hdGgucm91bmQoc1sxXSkpOjA7dC5lbXBsYWNlQmFjayhlLHIsTWF0aC5yb3VuZCgzMipuKSxNYXRoLnJvdW5kKDMyKmkpLGEsbywocDw8MSkrKGw/MTowKSxkLDE2KmMsMTYqdSwyNTYqZiwyNTYqaCl9ZnVuY3Rpb24gd2ModCxlLHIpe3QuZW1wbGFjZUJhY2soZS54LGUueSxyKSx0LmVtcGxhY2VCYWNrKGUueCxlLnksciksdC5lbXBsYWNlQmFjayhlLngsZS55LHIpLHQuZW1wbGFjZUJhY2soZS54LGUueSxyKX1mdW5jdGlvbiBUYyh0KXtmb3IodmFyIGU9MCxyPXQuc2VjdGlvbnM7ZTxyLmxlbmd0aDtlKz0xKXtpZigkbihyW2VdLnRleHQpKXJldHVybiEwfXJldHVybiExfXZhciBrYz1mdW5jdGlvbih0KXt0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyBOaSx0aGlzLmluZGV4QXJyYXk9bmV3IFlpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPXQsdGhpcy5zZWdtZW50cz1uZXcgcGEsdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk9bmV3IGppLHRoaXMub3BhY2l0eVZlcnRleEFycmF5PW5ldyBVaSx0aGlzLnBsYWNlZFN5bWJvbEFycmF5PW5ldyBhYX07a2MucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoJiYwPT09dGhpcy5pbmRleEFycmF5Lmxlbmd0aCYmMD09PXRoaXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5Lmxlbmd0aCYmMD09PXRoaXMub3BhY2l0eVZlcnRleEFycmF5Lmxlbmd0aH0sa2MucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0LGUscixuKXt0aGlzLmlzRW1wdHkoKXx8KHImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LEpzLm1lbWJlcnMpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXksZSksdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5LEtzLm1lbWJlcnMsITApLHRoaXMub3BhY2l0eVZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLm9wYWNpdHlWZXJ0ZXhBcnJheSxiYywhMCksdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyLml0ZW1TaXplPTEpLChyfHxuKSYmdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpKX0sa2MucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCksdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLm9wYWNpdHlWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpKX0sTm4oIlN5bWJvbEJ1ZmZlcnMiLGtjKTt2YXIgQWM9ZnVuY3Rpb24odCxlLHIpe3RoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IHQsdGhpcy5sYXlvdXRBdHRyaWJ1dGVzPWUsdGhpcy5pbmRleEFycmF5PW5ldyByLHRoaXMuc2VnbWVudHM9bmV3IHBhLHRoaXMuY29sbGlzaW9uVmVydGV4QXJyYXk9bmV3IEdpfTtBYy5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5sYXlvdXRBdHRyaWJ1dGVzKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSx0aGlzLmNvbGxpc2lvblZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmNvbGxpc2lvblZlcnRleEFycmF5LFFzLm1lbWJlcnMsITApfSxBYy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpLHRoaXMuY29sbGlzaW9uVmVydGV4QnVmZmVyLmRlc3Ryb3koKSl9LE5uKCJDb2xsaXNpb25CdWZmZXJzIixBYyk7dmFyIE1jPWZ1bmN0aW9uKHQpe3RoaXMuY29sbGlzaW9uQm94QXJyYXk9dC5jb2xsaXNpb25Cb3hBcnJheSx0aGlzLnpvb209dC56b29tLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmxheWVycz10LmxheWVycyx0aGlzLmxheWVySWRzPXRoaXMubGF5ZXJzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMucGl4ZWxSYXRpbz10LnBpeGVsUmF0aW8sdGhpcy5zb3VyY2VMYXllckluZGV4PXQuc291cmNlTGF5ZXJJbmRleCx0aGlzLmhhc1BhdHRlcm49ITEsdGhpcy5oYXNSVExUZXh0PSExLHRoaXMuc29ydEtleVJhbmdlcz1bXSx0aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5PVtdLHRoaXMucGxhY2VtZW50SW52UHJvak1hdHJpeD1obyhbXSksdGhpcy5wbGFjZW1lbnRWaWV3cG9ydE1hdHJpeD1obyhbXSk7dmFyIGU9dGhpcy5sYXllcnNbMF0uX3VuZXZhbHVhdGVkTGF5b3V0Ll92YWx1ZXM7dGhpcy50ZXh0U2l6ZURhdGE9R2wodGhpcy56b29tLGVbInRleHQtc2l6ZSJdKSx0aGlzLmljb25TaXplRGF0YT1HbCh0aGlzLnpvb20sZVsiaWNvbi1zaXplIl0pO3ZhciByPXRoaXMubGF5ZXJzWzBdLmxheW91dCxuPXIuZ2V0KCJzeW1ib2wtc29ydC1rZXkiKSxpPXIuZ2V0KCJzeW1ib2wtei1vcmRlciIpO3RoaXMuc29ydEZlYXR1cmVzQnlLZXk9InZpZXdwb3J0LXkiIT09aSYmdm9pZCAwIT09bi5jb25zdGFudE9yKDEpO3ZhciBhPSJ2aWV3cG9ydC15Ij09PWl8fCJhdXRvIj09PWkmJiF0aGlzLnNvcnRGZWF0dXJlc0J5S2V5O3RoaXMuc29ydEZlYXR1cmVzQnlZPWEmJihyLmdldCgidGV4dC1hbGxvdy1vdmVybGFwIil8fHIuZ2V0KCJpY29uLWFsbG93LW92ZXJsYXAiKXx8ci5nZXQoInRleHQtaWdub3JlLXBsYWNlbWVudCIpfHxyLmdldCgiaWNvbi1pZ25vcmUtcGxhY2VtZW50IikpLCJwb2ludCI9PT1yLmdldCgic3ltYm9sLXBsYWNlbWVudCIpJiYodGhpcy53cml0aW5nTW9kZXM9ci5nZXQoInRleHQtd3JpdGluZy1tb2RlIikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gQ2xbdF19KSkpLHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcz10aGlzLmxheWVycy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlzU3RhdGVEZXBlbmRlbnQoKX0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpLHRoaXMuc291cmNlSUQ9dC5zb3VyY2VJRH07TWMucHJvdG90eXBlLmNyZWF0ZUFycmF5cz1mdW5jdGlvbigpe3RoaXMudGV4dD1uZXcga2MobmV3IFVhKEpzLm1lbWJlcnMsdGhpcy5sYXllcnMsdGhpcy56b29tLChmdW5jdGlvbih0KXtyZXR1cm4vXnRleHQvLnRlc3QodCl9KSkpLHRoaXMuaWNvbj1uZXcga2MobmV3IFVhKEpzLm1lbWJlcnMsdGhpcy5sYXllcnMsdGhpcy56b29tLChmdW5jdGlvbih0KXtyZXR1cm4vXmljb24vLnRlc3QodCl9KSkpLHRoaXMuZ2x5cGhPZmZzZXRBcnJheT1uZXcgbGEsdGhpcy5saW5lVmVydGV4QXJyYXk9bmV3IGNhLHRoaXMuc3ltYm9sSW5zdGFuY2VzPW5ldyBzYX0sTWMucHJvdG90eXBlLmNhbGN1bGF0ZUdseXBoRGVwZW5kZW5jaWVzPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspaWYoZVt0LmNoYXJDb2RlQXQoYSldPSEwLChyfHxuKSYmaSl7dmFyIG89cmxbdC5jaGFyQXQoYSldO28mJihlW28uY2hhckNvZGVBdCgwKV09ITApfX0sTWMucHJvdG90eXBlLnBvcHVsYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxheWVyc1swXSxpPW4ubGF5b3V0LGE9aS5nZXQoInRleHQtZm9udCIpLG89aS5nZXQoInRleHQtZmllbGQiKSxzPWkuZ2V0KCJpY29uLWltYWdlIiksbD0oImNvbnN0YW50IiE9PW8udmFsdWUua2luZHx8by52YWx1ZS52YWx1ZSBpbnN0YW5jZW9mIG5lJiYhby52YWx1ZS52YWx1ZS5pc0VtcHR5KCl8fG8udmFsdWUudmFsdWUudG9TdHJpbmcoKS5sZW5ndGg+MCkmJigiY29uc3RhbnQiIT09YS52YWx1ZS5raW5kfHxhLnZhbHVlLnZhbHVlLmxlbmd0aD4wKSxjPSJjb25zdGFudCIhPT1zLnZhbHVlLmtpbmR8fCEhcy52YWx1ZS52YWx1ZXx8T2JqZWN0LmtleXMocy5wYXJhbWV0ZXJzKS5sZW5ndGg+MCx1PWkuZ2V0KCJzeW1ib2wtc29ydC1rZXkiKTtpZih0aGlzLmZlYXR1cmVzPVtdLGx8fGMpe2Zvcih2YXIgZj1lLmljb25EZXBlbmRlbmNpZXMsaD1lLmdseXBoRGVwZW5kZW5jaWVzLHA9ZS5hdmFpbGFibGVJbWFnZXMsZD1uZXcgcGkodGhpcy56b29tKSxtPTAsZz10O208Zy5sZW5ndGg7bSs9MSl7dmFyIHY9Z1ttXSx5PXYuZmVhdHVyZSx4PXYuaWQsYj12LmluZGV4LF89di5zb3VyY2VMYXllckluZGV4LHc9bi5fZmVhdHVyZUZpbHRlci5uZWVkR2VvbWV0cnksVD17dHlwZTp5LnR5cGUsaWQ6eCxwcm9wZXJ0aWVzOnkucHJvcGVydGllcyxnZW9tZXRyeTp3P1lhKHkpOltdfTtpZihuLl9mZWF0dXJlRmlsdGVyLmZpbHRlcihkLFQscikpe3d8fChULmdlb21ldHJ5PVlhKHkpKTt2YXIgaz12b2lkIDA7aWYobCl7dmFyIEE9bi5nZXRWYWx1ZUFuZFJlc29sdmVUb2tlbnMoInRleHQtZmllbGQiLFQscixwKSxNPW5lLmZhY3RvcnkoQSk7VGMoTSkmJih0aGlzLmhhc1JUTFRleHQ9ITApLCghdGhpcy5oYXNSVExUZXh0fHwidW5hdmFpbGFibGUiPT09dWkoKXx8dGhpcy5oYXNSVExUZXh0JiZoaS5pc1BhcnNlZCgpKSYmKGs9ZWwoTSxuLFQpKX12YXIgUz12b2lkIDA7aWYoYyl7dmFyIEU9bi5nZXRWYWx1ZUFuZFJlc29sdmVUb2tlbnMoImljb24taW1hZ2UiLFQscixwKTtTPUUgaW5zdGFuY2VvZiBpZT9FOmllLmZyb21TdHJpbmcoRSl9aWYoa3x8Uyl7dmFyIEw9dGhpcy5zb3J0RmVhdHVyZXNCeUtleT91LmV2YWx1YXRlKFQse30scik6dm9pZCAwLEM9e2lkOngsdGV4dDprLGljb246UyxpbmRleDpiLHNvdXJjZUxheWVySW5kZXg6XyxnZW9tZXRyeTpZYSh5KSxwcm9wZXJ0aWVzOnkucHJvcGVydGllcyx0eXBlOnhjW3kudHlwZV0sc29ydEtleTpMfTtpZih0aGlzLmZlYXR1cmVzLnB1c2goQyksUyYmKGZbUy5uYW1lXT0hMCksayl7dmFyIFA9YS5ldmFsdWF0ZShULHt9LHIpLmpvaW4oIiwiKSxJPSJtYXAiPT09aS5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IikmJiJwb2ludCIhPT1pLmdldCgic3ltYm9sLXBsYWNlbWVudCIpO3RoaXMuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudD10aGlzLndyaXRpbmdNb2RlcyYmdGhpcy53cml0aW5nTW9kZXMuaW5kZXhPZihDbC52ZXJ0aWNhbCk+PTA7Zm9yKHZhciBPPTAsej1rLnNlY3Rpb25zO088ei5sZW5ndGg7Tys9MSl7dmFyIEQ9eltPXTtpZihELmltYWdlKWZbRC5pbWFnZS5uYW1lXT0hMDtlbHNle3ZhciBSPVduKGsudG9TdHJpbmcoKSksRj1ELmZvbnRTdGFja3x8UCxCPWhbRl09aFtGXXx8e307dGhpcy5jYWxjdWxhdGVHbHlwaERlcGVuZGVuY2llcyhELnRleHQsQixJLHRoaXMuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCxSKX19fX19fSJsaW5lIj09PWkuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IikmJih0aGlzLmZlYXR1cmVzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9e30sbj1bXSxpPTA7ZnVuY3Rpb24gYShlKXtuLnB1c2godFtlXSksaSsrfWZ1bmN0aW9uIG8odCxlLGkpe3ZhciBhPXJbdF07cmV0dXJuIGRlbGV0ZSByW3RdLHJbZV09YSxuW2FdLmdlb21ldHJ5WzBdLnBvcCgpLG5bYV0uZ2VvbWV0cnlbMF09blthXS5nZW9tZXRyeVswXS5jb25jYXQoaVswXSksYX1mdW5jdGlvbiBzKHQscixpKXt2YXIgYT1lW3JdO3JldHVybiBkZWxldGUgZVtyXSxlW3RdPWEsblthXS5nZW9tZXRyeVswXS5zaGlmdCgpLG5bYV0uZ2VvbWV0cnlbMF09aVswXS5jb25jYXQoblthXS5nZW9tZXRyeVswXSksYX1mdW5jdGlvbiBsKHQsZSxyKXt2YXIgbj1yP2VbMF1bZVswXS5sZW5ndGgtMV06ZVswXVswXTtyZXR1cm4gdCsiOiIrbi54KyI6IituLnl9Zm9yKHZhciBjPTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciB1PXRbY10sZj11Lmdlb21ldHJ5LGg9dS50ZXh0P3UudGV4dC50b1N0cmluZygpOm51bGw7aWYoaCl7dmFyIHA9bChoLGYpLGQ9bChoLGYsITApO2lmKHAgaW4gciYmZCBpbiBlJiZyW3BdIT09ZVtkXSl7dmFyIG09cyhwLGQsZiksZz1vKHAsZCxuW21dLmdlb21ldHJ5KTtkZWxldGUgZVtwXSxkZWxldGUgcltkXSxyW2woaCxuW2ddLmdlb21ldHJ5LCEwKV09ZyxuW21dLmdlb21ldHJ5PW51bGx9ZWxzZSBwIGluIHI/byhwLGQsZik6ZCBpbiBlP3MocCxkLGYpOihhKGMpLGVbcF09aS0xLHJbZF09aS0xKX1lbHNlIGEoYyl9cmV0dXJuIG4uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZW9tZXRyeX0pKX0odGhpcy5mZWF0dXJlcykpLHRoaXMuc29ydEZlYXR1cmVzQnlLZXkmJnRoaXMuZmVhdHVyZXMuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zb3J0S2V5LWUuc29ydEtleX0pKX19LE1jLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMubGVuZ3RoJiYodGhpcy50ZXh0LnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyh0LGUsdGhpcy5sYXllcnMsciksdGhpcy5pY29uLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyh0LGUsdGhpcy5sYXllcnMscikpfSxNYy5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoJiYhdGhpcy5oYXNSVExUZXh0fSxNYy5wcm90b3R5cGUudXBsb2FkUGVuZGluZz1mdW5jdGlvbigpe3JldHVybiF0aGlzLnVwbG9hZGVkfHx0aGlzLnRleHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkfHx0aGlzLmljb24ucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkfSxNYy5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpeyF0aGlzLnVwbG9hZGVkJiZ0aGlzLmhhc0RlYnVnRGF0YSgpJiYodGhpcy50ZXh0Q29sbGlzaW9uQm94LnVwbG9hZCh0KSx0aGlzLmljb25Db2xsaXNpb25Cb3gudXBsb2FkKHQpKSx0aGlzLnRleHQudXBsb2FkKHQsdGhpcy5zb3J0RmVhdHVyZXNCeVksIXRoaXMudXBsb2FkZWQsdGhpcy50ZXh0LnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZCksdGhpcy5pY29uLnVwbG9hZCh0LHRoaXMuc29ydEZlYXR1cmVzQnlZLCF0aGlzLnVwbG9hZGVkLHRoaXMuaWNvbi5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWQpLHRoaXMudXBsb2FkZWQ9ITB9LE1jLnByb3RvdHlwZS5kZXN0cm95RGVidWdEYXRhPWZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29sbGlzaW9uQm94LmRlc3Ryb3koKSx0aGlzLmljb25Db2xsaXNpb25Cb3guZGVzdHJveSgpfSxNYy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMudGV4dC5kZXN0cm95KCksdGhpcy5pY29uLmRlc3Ryb3koKSx0aGlzLmhhc0RlYnVnRGF0YSgpJiZ0aGlzLmRlc3Ryb3lEZWJ1Z0RhdGEoKX0sTWMucHJvdG90eXBlLmFkZFRvTGluZVZlcnRleEFycmF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5saW5lVmVydGV4QXJyYXkubGVuZ3RoO2lmKHZvaWQgMCE9PXQuc2VnbWVudCl7Zm9yKHZhciBuPXQuZGlzdChlW3Quc2VnbWVudCsxXSksaT10LmRpc3QoZVt0LnNlZ21lbnRdKSxhPXt9LG89dC5zZWdtZW50KzE7bzxlLmxlbmd0aDtvKyspYVtvXT17eDplW29dLngseTplW29dLnksdGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3I6bn0sbzxlLmxlbmd0aC0xJiYobis9ZVtvKzFdLmRpc3QoZVtvXSkpO2Zvcih2YXIgcz10LnNlZ21lbnR8fDA7cz49MDtzLS0pYVtzXT17eDplW3NdLngseTplW3NdLnksdGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3I6aX0scz4wJiYoaSs9ZVtzLTFdLmRpc3QoZVtzXSkpO2Zvcih2YXIgbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgYz1hW2xdO3RoaXMubGluZVZlcnRleEFycmF5LmVtcGxhY2VCYWNrKGMueCxjLnksYy50aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcil9fXJldHVybntsaW5lU3RhcnRJbmRleDpyLGxpbmVMZW5ndGg6dGhpcy5saW5lVmVydGV4QXJyYXkubGVuZ3RoLXJ9fSxNYy5wcm90b3R5cGUuYWRkU3ltYm9scz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsZil7Zm9yKHZhciBoPXQuaW5kZXhBcnJheSxwPXQubGF5b3V0VmVydGV4QXJyYXksZD10LnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQqZS5sZW5ndGgscCxoLGEuc29ydEtleSksbT10aGlzLmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoLGc9ZC52ZXJ0ZXhMZW5ndGgsdj10aGlzLmFsbG93VmVydGljYWxQbGFjZW1lbnQmJm89PT1DbC52ZXJ0aWNhbD9NYXRoLlBJLzI6MCx5PWEudGV4dCYmYS50ZXh0LnNlY3Rpb25zLHg9MDt4PGUubGVuZ3RoO3grKyl7dmFyIGI9ZVt4XSxfPWIudGwsdz1iLnRyLFQ9Yi5ibCxrPWIuYnIsQT1iLnRleCxNPWIucGl4ZWxPZmZzZXRUTCxTPWIucGl4ZWxPZmZzZXRCUixFPWIubWluRm9udFNjYWxlWCxMPWIubWluRm9udFNjYWxlWSxDPWIuZ2x5cGhPZmZzZXQsUD1iLmlzU0RGLEk9Yi5zZWN0aW9uSW5kZXgsTz1kLnZlcnRleExlbmd0aCx6PUNbMV07X2MocCxzLngscy55LF8ueCx6K18ueSxBLngsQS55LHIsUCxNLngsTS55LEUsTCksX2MocCxzLngscy55LHcueCx6K3cueSxBLngrQS53LEEueSxyLFAsUy54LE0ueSxFLEwpLF9jKHAscy54LHMueSxULngseitULnksQS54LEEueStBLmgscixQLE0ueCxTLnksRSxMKSxfYyhwLHMueCxzLnksay54LHoray55LEEueCtBLncsQS55K0EuaCxyLFAsUy54LFMueSxFLEwpLHdjKHQuZHluYW1pY0xheW91dFZlcnRleEFycmF5LHMsdiksaC5lbXBsYWNlQmFjayhPLE8rMSxPKzIpLGguZW1wbGFjZUJhY2soTysxLE8rMixPKzMpLGQudmVydGV4TGVuZ3RoKz00LGQucHJpbWl0aXZlTGVuZ3RoKz0yLHRoaXMuZ2x5cGhPZmZzZXRBcnJheS5lbXBsYWNlQmFjayhDWzBdKSx4IT09ZS5sZW5ndGgtMSYmST09PWVbeCsxXS5zZWN0aW9uSW5kZXh8fHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXMocC5sZW5ndGgsYSxhLmluZGV4LHt9LGYseSYmeVtJXSl9dC5wbGFjZWRTeW1ib2xBcnJheS5lbXBsYWNlQmFjayhzLngscy55LG0sdGhpcy5nbHlwaE9mZnNldEFycmF5Lmxlbmd0aC1tLGcsbCxjLHMuc2VnbWVudCxyP3JbMF06MCxyP3JbMV06MCxuWzBdLG5bMV0sbywwLCExLDAsdSl9LE1jLnByb3RvdHlwZS5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXg9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiBlLmVtcGxhY2VCYWNrKDAsMCksdC5lbXBsYWNlQmFjayhyLngsci55LG4saSxNYXRoLnJvdW5kKGEueCksTWF0aC5yb3VuZChhLnkpKX0sTWMucHJvdG90eXBlLmFkZENvbGxpc2lvbkRlYnVnVmVydGljZXM9ZnVuY3Rpb24odCxlLHIsbixhLG8scyl7dmFyIGw9YS5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LGEubGF5b3V0VmVydGV4QXJyYXksYS5pbmRleEFycmF5KSxjPWwudmVydGV4TGVuZ3RoLHU9YS5sYXlvdXRWZXJ0ZXhBcnJheSxmPWEuY29sbGlzaW9uVmVydGV4QXJyYXksaD1zLmFuY2hvclgscD1zLmFuY2hvclk7dGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgodSxmLG8saCxwLG5ldyBpKHQsZSkpLHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KHUsZixvLGgscCxuZXcgaShyLGUpKSx0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleCh1LGYsbyxoLHAsbmV3IGkocixuKSksdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgodSxmLG8saCxwLG5ldyBpKHQsbikpLGwudmVydGV4TGVuZ3RoKz00O3ZhciBkPWEuaW5kZXhBcnJheTtkLmVtcGxhY2VCYWNrKGMsYysxKSxkLmVtcGxhY2VCYWNrKGMrMSxjKzIpLGQuZW1wbGFjZUJhY2soYysyLGMrMyksZC5lbXBsYWNlQmFjayhjKzMsYyksbC5wcmltaXRpdmVMZW5ndGgrPTR9LE1jLnByb3RvdHlwZS5hZGREZWJ1Z0NvbGxpc2lvbkJveGVzPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10O2k8ZTtpKyspe3ZhciBhPXRoaXMuY29sbGlzaW9uQm94QXJyYXkuZ2V0KGkpLG89YS54MSxzPWEueTEsbD1hLngyLGM9YS55Mjt0aGlzLmFkZENvbGxpc2lvbkRlYnVnVmVydGljZXMobyxzLGwsYyxuP3RoaXMudGV4dENvbGxpc2lvbkJveDp0aGlzLmljb25Db2xsaXNpb25Cb3gsYS5hbmNob3JQb2ludCxyKX19LE1jLnByb3RvdHlwZS5nZW5lcmF0ZUNvbGxpc2lvbkRlYnVnQnVmZmVycz1mdW5jdGlvbigpe3RoaXMuaGFzRGVidWdEYXRhKCkmJnRoaXMuZGVzdHJveURlYnVnRGF0YSgpLHRoaXMudGV4dENvbGxpc2lvbkJveD1uZXcgQWMoSGksJHMubWVtYmVycyxRaSksdGhpcy5pY29uQ29sbGlzaW9uQm94PW5ldyBBYyhIaSwkcy5tZW1iZXJzLFFpKTtmb3IodmFyIHQ9MDt0PHRoaXMuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDt0Kyspe3ZhciBlPXRoaXMuc3ltYm9sSW5zdGFuY2VzLmdldCh0KTt0aGlzLmFkZERlYnVnQ29sbGlzaW9uQm94ZXMoZS50ZXh0Qm94U3RhcnRJbmRleCxlLnRleHRCb3hFbmRJbmRleCxlLCEwKSx0aGlzLmFkZERlYnVnQ29sbGlzaW9uQm94ZXMoZS52ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4LGUudmVydGljYWxUZXh0Qm94RW5kSW5kZXgsZSwhMCksdGhpcy5hZGREZWJ1Z0NvbGxpc2lvbkJveGVzKGUuaWNvbkJveFN0YXJ0SW5kZXgsZS5pY29uQm94RW5kSW5kZXgsZSwhMSksdGhpcy5hZGREZWJ1Z0NvbGxpc2lvbkJveGVzKGUudmVydGljYWxJY29uQm94U3RhcnRJbmRleCxlLnZlcnRpY2FsSWNvbkJveEVuZEluZGV4LGUsITEpfX0sTWMucHJvdG90eXBlLl9kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzRm9yU3ltYm9sPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsKXtmb3IodmFyIGM9e30sdT1lO3U8cjt1Kyspe3ZhciBmPXQuZ2V0KHUpO2MudGV4dEJveD17eDE6Zi54MSx5MTpmLnkxLHgyOmYueDIseTI6Zi55MixhbmNob3JQb2ludFg6Zi5hbmNob3JQb2ludFgsYW5jaG9yUG9pbnRZOmYuYW5jaG9yUG9pbnRZfSxjLnRleHRGZWF0dXJlSW5kZXg9Zi5mZWF0dXJlSW5kZXg7YnJlYWt9Zm9yKHZhciBoPW47aDxpO2grKyl7dmFyIHA9dC5nZXQoaCk7Yy52ZXJ0aWNhbFRleHRCb3g9e3gxOnAueDEseTE6cC55MSx4MjpwLngyLHkyOnAueTIsYW5jaG9yUG9pbnRYOnAuYW5jaG9yUG9pbnRYLGFuY2hvclBvaW50WTpwLmFuY2hvclBvaW50WX0sYy52ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXg9cC5mZWF0dXJlSW5kZXg7YnJlYWt9Zm9yKHZhciBkPWE7ZDxvO2QrKyl7dmFyIG09dC5nZXQoZCk7Yy5pY29uQm94PXt4MTptLngxLHkxOm0ueTEseDI6bS54Mix5MjptLnkyLGFuY2hvclBvaW50WDptLmFuY2hvclBvaW50WCxhbmNob3JQb2ludFk6bS5hbmNob3JQb2ludFl9LGMuaWNvbkZlYXR1cmVJbmRleD1tLmZlYXR1cmVJbmRleDticmVha31mb3IodmFyIGc9cztnPGw7ZysrKXt2YXIgdj10LmdldChnKTtjLnZlcnRpY2FsSWNvbkJveD17eDE6di54MSx5MTp2LnkxLHgyOnYueDIseTI6di55MixhbmNob3JQb2ludFg6di5hbmNob3JQb2ludFgsYW5jaG9yUG9pbnRZOnYuYW5jaG9yUG9pbnRZfSxjLnZlcnRpY2FsSWNvbkZlYXR1cmVJbmRleD12LmZlYXR1cmVJbmRleDticmVha31yZXR1cm4gY30sTWMucHJvdG90eXBlLmRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXM9ZnVuY3Rpb24odCl7dGhpcy5jb2xsaXNpb25BcnJheXM9W107Zm9yKHZhciBlPTA7ZTx0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQoZSk7dGhpcy5jb2xsaXNpb25BcnJheXMucHVzaCh0aGlzLl9kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzRm9yU3ltYm9sKHQsci50ZXh0Qm94U3RhcnRJbmRleCxyLnRleHRCb3hFbmRJbmRleCxyLnZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgsci52ZXJ0aWNhbFRleHRCb3hFbmRJbmRleCxyLmljb25Cb3hTdGFydEluZGV4LHIuaWNvbkJveEVuZEluZGV4LHIudmVydGljYWxJY29uQm94U3RhcnRJbmRleCxyLnZlcnRpY2FsSWNvbkJveEVuZEluZGV4KSl9fSxNYy5wcm90b3R5cGUuaGFzVGV4dERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0LnNlZ21lbnRzLmdldCgpLmxlbmd0aD4wfSxNYy5wcm90b3R5cGUuaGFzSWNvbkRhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pY29uLnNlZ21lbnRzLmdldCgpLmxlbmd0aD4wfSxNYy5wcm90b3R5cGUuaGFzRGVidWdEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dENvbGxpc2lvbkJveCYmdGhpcy5pY29uQ29sbGlzaW9uQm94fSxNYy5wcm90b3R5cGUuaGFzVGV4dENvbGxpc2lvbkJveERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNEZWJ1Z0RhdGEoKSYmdGhpcy50ZXh0Q29sbGlzaW9uQm94LnNlZ21lbnRzLmdldCgpLmxlbmd0aD4wfSxNYy5wcm90b3R5cGUuaGFzSWNvbkNvbGxpc2lvbkJveERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNEZWJ1Z0RhdGEoKSYmdGhpcy5pY29uQ29sbGlzaW9uQm94LnNlZ21lbnRzLmdldCgpLmxlbmd0aD4wfSxNYy5wcm90b3R5cGUuYWRkSW5kaWNlc0ZvclBsYWNlZFN5bWJvbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LnBsYWNlZFN5bWJvbEFycmF5LmdldChlKSxuPXIudmVydGV4U3RhcnRJbmRleCs0KnIubnVtR2x5cGhzLGk9ci52ZXJ0ZXhTdGFydEluZGV4O2k8bjtpKz00KXQuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpLGkrMSxpKzIpLHQuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpKzEsaSsyLGkrMyl9LE1jLnByb3RvdHlwZS5nZXRTb3J0ZWRTeW1ib2xJbmRleGVzPWZ1bmN0aW9uKHQpe2lmKHRoaXMuc29ydGVkQW5nbGU9PT10JiZ2b2lkIDAhPT10aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcylyZXR1cm4gdGhpcy5zeW1ib2xJbnN0YW5jZUluZGV4ZXM7Zm9yKHZhciBlPU1hdGguc2luKHQpLHI9TWF0aC5jb3ModCksbj1bXSxpPVtdLGE9W10sbz0wO288dGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoOysrbyl7YS5wdXNoKG8pO3ZhciBzPXRoaXMuc3ltYm9sSW5zdGFuY2VzLmdldChvKTtuLnB1c2goMHxNYXRoLnJvdW5kKGUqcy5hbmNob3JYK3Iqcy5hbmNob3JZKSksaS5wdXNoKHMuZmVhdHVyZUluZGV4KX1yZXR1cm4gYS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBuW3RdLW5bZV18fGlbZV0taVt0XX0pKSxhfSxNYy5wcm90b3R5cGUuYWRkVG9Tb3J0S2V5UmFuZ2VzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5zb3J0S2V5UmFuZ2VzW3RoaXMuc29ydEtleVJhbmdlcy5sZW5ndGgtMV07ciYmci5zb3J0S2V5PT09ZT9yLnN5bWJvbEluc3RhbmNlRW5kPXQrMTp0aGlzLnNvcnRLZXlSYW5nZXMucHVzaCh7c29ydEtleTplLHN5bWJvbEluc3RhbmNlU3RhcnQ6dCxzeW1ib2xJbnN0YW5jZUVuZDp0KzF9KX0sTWMucHJvdG90eXBlLnNvcnRGZWF0dXJlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuc29ydEZlYXR1cmVzQnlZJiZ0aGlzLnNvcnRlZEFuZ2xlIT09dCYmISh0aGlzLnRleHQuc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjF8fHRoaXMuaWNvbi5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MSkpe3RoaXMuc3ltYm9sSW5zdGFuY2VJbmRleGVzPXRoaXMuZ2V0U29ydGVkU3ltYm9sSW5kZXhlcyh0KSx0aGlzLnNvcnRlZEFuZ2xlPXQsdGhpcy50ZXh0LmluZGV4QXJyYXkuY2xlYXIoKSx0aGlzLmljb24uaW5kZXhBcnJheS5jbGVhcigpLHRoaXMuZmVhdHVyZVNvcnRPcmRlcj1bXTtmb3IodmFyIHI9MCxuPXRoaXMuc3ltYm9sSW5zdGFuY2VJbmRleGVzO3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXSxhPXRoaXMuc3ltYm9sSW5zdGFuY2VzLmdldChpKTt0aGlzLmZlYXR1cmVTb3J0T3JkZXIucHVzaChhLmZlYXR1cmVJbmRleCksW2EucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsYS5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsYS5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4XS5mb3JFYWNoKChmdW5jdGlvbih0LHIsbil7dD49MCYmbi5pbmRleE9mKHQpPT09ciYmZS5hZGRJbmRpY2VzRm9yUGxhY2VkU3ltYm9sKGUudGV4dCx0KX0pKSxhLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4Pj0wJiZ0aGlzLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2wodGhpcy50ZXh0LGEudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgpLGEucGxhY2VkSWNvblN5bWJvbEluZGV4Pj0wJiZ0aGlzLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2wodGhpcy5pY29uLGEucGxhY2VkSWNvblN5bWJvbEluZGV4KSxhLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4Pj0wJiZ0aGlzLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2wodGhpcy5pY29uLGEudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXgpfXRoaXMudGV4dC5pbmRleEJ1ZmZlciYmdGhpcy50ZXh0LmluZGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy50ZXh0LmluZGV4QXJyYXkpLHRoaXMuaWNvbi5pbmRleEJ1ZmZlciYmdGhpcy5pY29uLmluZGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy5pY29uLmluZGV4QXJyYXkpfX0sTm4oIlN5bWJvbEJ1Y2tldCIsTWMse29taXQ6WyJsYXllcnMiLCJjb2xsaXNpb25Cb3hBcnJheSIsImZlYXR1cmVzIiwiY29tcGFyZVRleHQiXX0pLE1jLk1BWF9HTFlQSFM9NjU1MzUsTWMuYWRkRHluYW1pY0F0dHJpYnV0ZXM9d2M7dmFyIFNjPW5ldyBTaSh7InN5bWJvbC1wbGFjZW1lbnQiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtcGxhY2VtZW50Il0pLCJzeW1ib2wtc3BhY2luZyI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbInN5bWJvbC1zcGFjaW5nIl0pLCJzeW1ib2wtYXZvaWQtZWRnZXMiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtYXZvaWQtZWRnZXMiXSksInN5bWJvbC1zb3J0LWtleSI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbInN5bWJvbC1zb3J0LWtleSJdKSwic3ltYm9sLXotb3JkZXIiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtei1vcmRlciJdKSwiaWNvbi1hbGxvdy1vdmVybGFwIjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsiaWNvbi1hbGxvdy1vdmVybGFwIl0pLCJpY29uLWlnbm9yZS1wbGFjZW1lbnQiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLWlnbm9yZS1wbGFjZW1lbnQiXSksImljb24tb3B0aW9uYWwiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLW9wdGlvbmFsIl0pLCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbImljb24tcm90YXRpb24tYWxpZ25tZW50Il0pLCJpY29uLXNpemUiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLXNpemUiXSksImljb24tdGV4dC1maXQiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLXRleHQtZml0Il0pLCJpY29uLXRleHQtZml0LXBhZGRpbmciOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLXRleHQtZml0LXBhZGRpbmciXSksImljb24taW1hZ2UiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLWltYWdlIl0pLCJpY29uLXJvdGF0ZSI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbImljb24tcm90YXRlIl0pLCJpY29uLXBhZGRpbmciOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLXBhZGRpbmciXSksImljb24ta2VlcC11cHJpZ2h0IjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsiaWNvbi1rZWVwLXVwcmlnaHQiXSksImljb24tb2Zmc2V0IjpuZXcgVGkoTHQubGF5b3V0X3N5bWJvbFsiaWNvbi1vZmZzZXQiXSksImljb24tYW5jaG9yIjpuZXcgVGkoTHQubGF5b3V0X3N5bWJvbFsiaWNvbi1hbmNob3IiXSksImljb24tcGl0Y2gtYWxpZ25tZW50IjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsiaWNvbi1waXRjaC1hbGlnbm1lbnQiXSksInRleHQtcGl0Y2gtYWxpZ25tZW50IjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsidGV4dC1waXRjaC1hbGlnbm1lbnQiXSksInRleHQtcm90YXRpb24tYWxpZ25tZW50IjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiXSksInRleHQtZmllbGQiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWZpZWxkIl0pLCJ0ZXh0LWZvbnQiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWZvbnQiXSksInRleHQtc2l6ZSI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbInRleHQtc2l6ZSJdKSwidGV4dC1tYXgtd2lkdGgiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LW1heC13aWR0aCJdKSwidGV4dC1saW5lLWhlaWdodCI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbInRleHQtbGluZS1oZWlnaHQiXSksInRleHQtbGV0dGVyLXNwYWNpbmciOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWxldHRlci1zcGFjaW5nIl0pLCJ0ZXh0LWp1c3RpZnkiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWp1c3RpZnkiXSksInRleHQtcmFkaWFsLW9mZnNldCI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbInRleHQtcmFkaWFsLW9mZnNldCJdKSwidGV4dC12YXJpYWJsZS1hbmNob3IiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXZhcmlhYmxlLWFuY2hvciJdKSwidGV4dC1hbmNob3IiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWFuY2hvciJdKSwidGV4dC1tYXgtYW5nbGUiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LW1heC1hbmdsZSJdKSwidGV4dC13cml0aW5nLW1vZGUiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXdyaXRpbmctbW9kZSJdKSwidGV4dC1yb3RhdGUiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXJvdGF0ZSJdKSwidGV4dC1wYWRkaW5nIjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsidGV4dC1wYWRkaW5nIl0pLCJ0ZXh0LWtlZXAtdXByaWdodCI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbInRleHQta2VlcC11cHJpZ2h0Il0pLCJ0ZXh0LXRyYW5zZm9ybSI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbInRleHQtdHJhbnNmb3JtIl0pLCJ0ZXh0LW9mZnNldCI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbInRleHQtb2Zmc2V0Il0pLCJ0ZXh0LWFsbG93LW92ZXJsYXAiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWFsbG93LW92ZXJsYXAiXSksInRleHQtaWdub3JlLXBsYWNlbWVudCI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbInRleHQtaWdub3JlLXBsYWNlbWVudCJdKSwidGV4dC1vcHRpb25hbCI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbInRleHQtb3B0aW9uYWwiXSl9KSxFYz17cGFpbnQ6bmV3IFNpKHsiaWNvbi1vcGFjaXR5IjpuZXcgVGkoTHQucGFpbnRfc3ltYm9sWyJpY29uLW9wYWNpdHkiXSksImljb24tY29sb3IiOm5ldyBUaShMdC5wYWludF9zeW1ib2xbImljb24tY29sb3IiXSksImljb24taGFsby1jb2xvciI6bmV3IFRpKEx0LnBhaW50X3N5bWJvbFsiaWNvbi1oYWxvLWNvbG9yIl0pLCJpY29uLWhhbG8td2lkdGgiOm5ldyBUaShMdC5wYWludF9zeW1ib2xbImljb24taGFsby13aWR0aCJdKSwiaWNvbi1oYWxvLWJsdXIiOm5ldyBUaShMdC5wYWludF9zeW1ib2xbImljb24taGFsby1ibHVyIl0pLCJpY29uLXRyYW5zbGF0ZSI6bmV3IHdpKEx0LnBhaW50X3N5bWJvbFsiaWNvbi10cmFuc2xhdGUiXSksImljb24tdHJhbnNsYXRlLWFuY2hvciI6bmV3IHdpKEx0LnBhaW50X3N5bWJvbFsiaWNvbi10cmFuc2xhdGUtYW5jaG9yIl0pLCJ0ZXh0LW9wYWNpdHkiOm5ldyBUaShMdC5wYWludF9zeW1ib2xbInRleHQtb3BhY2l0eSJdKSwidGV4dC1jb2xvciI6bmV3IFRpKEx0LnBhaW50X3N5bWJvbFsidGV4dC1jb2xvciJdLHtydW50aW1lVHlwZTpVdCxnZXRPdmVycmlkZTpmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0Q29sb3J9LGhhc092ZXJyaWRlOmZ1bmN0aW9uKHQpe3JldHVybiEhdC50ZXh0Q29sb3J9fSksInRleHQtaGFsby1jb2xvciI6bmV3IFRpKEx0LnBhaW50X3N5bWJvbFsidGV4dC1oYWxvLWNvbG9yIl0pLCJ0ZXh0LWhhbG8td2lkdGgiOm5ldyBUaShMdC5wYWludF9zeW1ib2xbInRleHQtaGFsby13aWR0aCJdKSwidGV4dC1oYWxvLWJsdXIiOm5ldyBUaShMdC5wYWludF9zeW1ib2xbInRleHQtaGFsby1ibHVyIl0pLCJ0ZXh0LXRyYW5zbGF0ZSI6bmV3IHdpKEx0LnBhaW50X3N5bWJvbFsidGV4dC10cmFuc2xhdGUiXSksInRleHQtdHJhbnNsYXRlLWFuY2hvciI6bmV3IHdpKEx0LnBhaW50X3N5bWJvbFsidGV4dC10cmFuc2xhdGUtYW5jaG9yIl0pfSksbGF5b3V0OlNjfSxMYz1mdW5jdGlvbih0KXt0aGlzLnR5cGU9dC5wcm9wZXJ0eS5vdmVycmlkZXM/dC5wcm9wZXJ0eS5vdmVycmlkZXMucnVudGltZVR5cGU6RnQsdGhpcy5kZWZhdWx0VmFsdWU9dH07TGMucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2lmKHQuZm9ybWF0dGVkU2VjdGlvbil7dmFyIGU9dGhpcy5kZWZhdWx0VmFsdWUucHJvcGVydHkub3ZlcnJpZGVzO2lmKGUmJmUuaGFzT3ZlcnJpZGUodC5mb3JtYXR0ZWRTZWN0aW9uKSlyZXR1cm4gZS5nZXRPdmVycmlkZSh0LmZvcm1hdHRlZFNlY3Rpb24pfXJldHVybiB0LmZlYXR1cmUmJnQuZmVhdHVyZVN0YXRlP3RoaXMuZGVmYXVsdFZhbHVlLmV2YWx1YXRlKHQuZmVhdHVyZSx0LmZlYXR1cmVTdGF0ZSk6dGhpcy5kZWZhdWx0VmFsdWUucHJvcGVydHkuc3BlY2lmaWNhdGlvbi5kZWZhdWx0fSxMYy5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuZGVmYXVsdFZhbHVlLmlzQ29uc3RhbnQoKXx8dCh0aGlzLmRlZmF1bHRWYWx1ZS52YWx1ZS5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb24pfSxMYy5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSxMYy5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LE5uKCJGb3JtYXRTZWN0aW9uT3ZlcnJpZGUiLExjLHtvbWl0OlsiZGVmYXVsdFZhbHVlIl19KTt2YXIgQ2M9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLEVjKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24oZSxyKXtpZih0LnByb3RvdHlwZS5yZWNhbGN1bGF0ZS5jYWxsKHRoaXMsZSxyKSwiYXV0byI9PT10aGlzLmxheW91dC5nZXQoImljb24tcm90YXRpb24tYWxpZ25tZW50IikmJigicG9pbnQiIT09dGhpcy5sYXlvdXQuZ2V0KCJzeW1ib2wtcGxhY2VtZW50Iik/dGhpcy5sYXlvdXQuX3ZhbHVlc1siaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiXT0ibWFwIjp0aGlzLmxheW91dC5fdmFsdWVzWyJpY29uLXJvdGF0aW9uLWFsaWdubWVudCJdPSJ2aWV3cG9ydCIpLCJhdXRvIj09PXRoaXMubGF5b3V0LmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmKCJwb2ludCIhPT10aGlzLmxheW91dC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKT90aGlzLmxheW91dC5fdmFsdWVzWyJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCJdPSJtYXAiOnRoaXMubGF5b3V0Ll92YWx1ZXNbInRleHQtcm90YXRpb24tYWxpZ25tZW50Il09InZpZXdwb3J0IiksImF1dG8iPT09dGhpcy5sYXlvdXQuZ2V0KCJ0ZXh0LXBpdGNoLWFsaWdubWVudCIpJiYodGhpcy5sYXlvdXQuX3ZhbHVlc1sidGV4dC1waXRjaC1hbGlnbm1lbnQiXT10aGlzLmxheW91dC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IikpLCJhdXRvIj09PXRoaXMubGF5b3V0LmdldCgiaWNvbi1waXRjaC1hbGlnbm1lbnQiKSYmKHRoaXMubGF5b3V0Ll92YWx1ZXNbImljb24tcGl0Y2gtYWxpZ25tZW50Il09dGhpcy5sYXlvdXQuZ2V0KCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCIpKSwicG9pbnQiPT09dGhpcy5sYXlvdXQuZ2V0KCJzeW1ib2wtcGxhY2VtZW50Iikpe3ZhciBuPXRoaXMubGF5b3V0LmdldCgidGV4dC13cml0aW5nLW1vZGUiKTtpZihuKXtmb3IodmFyIGk9W10sYT0wLG89bjthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV07aS5pbmRleE9mKHMpPDAmJmkucHVzaChzKX10aGlzLmxheW91dC5fdmFsdWVzWyJ0ZXh0LXdyaXRpbmctbW9kZSJdPWl9ZWxzZSB0aGlzLmxheW91dC5fdmFsdWVzWyJ0ZXh0LXdyaXRpbmctbW9kZSJdPVsiaG9yaXpvbnRhbCJdfXRoaXMuX3NldFBhaW50T3ZlcnJpZGVzKCl9LGUucHJvdG90eXBlLmdldFZhbHVlQW5kUmVzb2x2ZVRva2Vucz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmxheW91dC5nZXQodCkuZXZhbHVhdGUoZSx7fSxyLG4pLGE9dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlc1t0XTtyZXR1cm4gYS5pc0RhdGFEcml2ZW4oKXx8WXIoYS52YWx1ZSl8fCFpP2k6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5yZXBsYWNlKC97KFtee31dKyl9L2csKGZ1bmN0aW9uKGUscil7cmV0dXJuIHIgaW4gdD9TdHJpbmcodFtyXSk6IiJ9KSl9KGUucHJvcGVydGllcyxpKX0sZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTWModCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuX3NldFBhaW50T3ZlcnJpZGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAscj1FYy5wYWludC5vdmVycmlkYWJsZVByb3BlcnRpZXM7dDxyLmxlbmd0aDt0Kz0xKXt2YXIgbj1yW3RdO2lmKGUuaGFzUGFpbnRPdmVycmlkZSh0aGlzLmxheW91dCxuKSl7dmFyIGk9dGhpcy5wYWludC5nZXQobiksYT1uZXcgTGMoaSksbz1uZXcgR3IoYSxpLnByb3BlcnR5LnNwZWNpZmljYXRpb24pLHM9bnVsbDtzPSJjb25zdGFudCI9PT1pLnZhbHVlLmtpbmR8fCJzb3VyY2UiPT09aS52YWx1ZS5raW5kP25ldyBYcigic291cmNlIixvKTpuZXcgWnIoImNvbXBvc2l0ZSIsbyxpLnZhbHVlLnpvb21TdG9wcyxpLnZhbHVlLl9pbnRlcnBvbGF0aW9uVHlwZSksdGhpcy5wYWludC5fdmFsdWVzW25dPW5ldyBiaShpLnByb3BlcnR5LHMsaS5wYXJhbWV0ZXJzKX19fSxlLnByb3RvdHlwZS5faGFuZGxlT3ZlcnJpZGFibGVQYWludFByb3BlcnR5VXBkYXRlPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4hKCF0aGlzLmxheW91dHx8ci5pc0RhdGFEcml2ZW4oKXx8bi5pc0RhdGFEcml2ZW4oKSkmJmUuaGFzUGFpbnRPdmVycmlkZSh0aGlzLmxheW91dCx0KX0sZS5oYXNQYWludE92ZXJyaWRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nZXQoInRleHQtZmllbGQiKSxuPUVjLnBhaW50LnByb3BlcnRpZXNbZV0saT0hMSxhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpe3ZhciBhPXJbZV07aWYobi5vdmVycmlkZXMmJm4ub3ZlcnJpZGVzLmhhc092ZXJyaWRlKGEpKXJldHVybiB2b2lkKGk9ITApfX07aWYoImNvbnN0YW50Ij09PXIudmFsdWUua2luZCYmci52YWx1ZS52YWx1ZSBpbnN0YW5jZW9mIG5lKWEoci52YWx1ZS52YWx1ZS5zZWN0aW9ucyk7ZWxzZSBpZigic291cmNlIj09PXIudmFsdWUua2luZCl7dmFyIG89ZnVuY3Rpb24odCl7aWYoIWkpaWYodCBpbnN0YW5jZW9mIGNlJiZzZSh0LnZhbHVlKT09PUd0KXt2YXIgZT10LnZhbHVlO2EoZS5zZWN0aW9ucyl9ZWxzZSB0IGluc3RhbmNlb2YgcGU/YSh0LnNlY3Rpb25zKTp0LmVhY2hDaGlsZChvKX0scz1yLnZhbHVlO3MuX3N0eWxlRXhwcmVzc2lvbiYmbyhzLl9zdHlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbil9cmV0dXJuIGl9LGV9KEVpKSxQYz17cGFpbnQ6bmV3IFNpKHsiYmFja2dyb3VuZC1jb2xvciI6bmV3IHdpKEx0LnBhaW50X2JhY2tncm91bmRbImJhY2tncm91bmQtY29sb3IiXSksImJhY2tncm91bmQtcGF0dGVybiI6bmV3IEFpKEx0LnBhaW50X2JhY2tncm91bmRbImJhY2tncm91bmQtcGF0dGVybiJdKSwiYmFja2dyb3VuZC1vcGFjaXR5IjpuZXcgd2koTHQucGFpbnRfYmFja2dyb3VuZFsiYmFja2dyb3VuZC1vcGFjaXR5Il0pfSl9LEljPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxQYyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9KEVpKSxPYz17cGFpbnQ6bmV3IFNpKHsicmFzdGVyLW9wYWNpdHkiOm5ldyB3aShMdC5wYWludF9yYXN0ZXJbInJhc3Rlci1vcGFjaXR5Il0pLCJyYXN0ZXItaHVlLXJvdGF0ZSI6bmV3IHdpKEx0LnBhaW50X3Jhc3RlclsicmFzdGVyLWh1ZS1yb3RhdGUiXSksInJhc3Rlci1icmlnaHRuZXNzLW1pbiI6bmV3IHdpKEx0LnBhaW50X3Jhc3RlclsicmFzdGVyLWJyaWdodG5lc3MtbWluIl0pLCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXgiOm5ldyB3aShMdC5wYWludF9yYXN0ZXJbInJhc3Rlci1icmlnaHRuZXNzLW1heCJdKSwicmFzdGVyLXNhdHVyYXRpb24iOm5ldyB3aShMdC5wYWludF9yYXN0ZXJbInJhc3Rlci1zYXR1cmF0aW9uIl0pLCJyYXN0ZXItY29udHJhc3QiOm5ldyB3aShMdC5wYWludF9yYXN0ZXJbInJhc3Rlci1jb250cmFzdCJdKSwicmFzdGVyLXJlc2FtcGxpbmciOm5ldyB3aShMdC5wYWludF9yYXN0ZXJbInJhc3Rlci1yZXNhbXBsaW5nIl0pLCJyYXN0ZXItZmFkZS1kdXJhdGlvbiI6bmV3IHdpKEx0LnBhaW50X3Jhc3RlclsicmFzdGVyLWZhZGUtZHVyYXRpb24iXSl9KX0semM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLE9jKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oRWkpO3ZhciBEYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUse30pLHRoaXMuaW1wbGVtZW50YXRpb249ZX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuaXMzRD1mdW5jdGlvbigpe3JldHVybiIzZCI9PT10aGlzLmltcGxlbWVudGF0aW9uLnJlbmRlcmluZ01vZGV9LGUucHJvdG90eXBlLmhhc09mZnNjcmVlblBhc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5pbXBsZW1lbnRhdGlvbi5wcmVyZW5kZXJ9LGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLmltcGxlbWVudGF0aW9uLm9uQWRkJiZ0aGlzLmltcGxlbWVudGF0aW9uLm9uQWRkKHQsdC5wYWludGVyLmNvbnRleHQuZ2wpfSxlLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbih0KXt0aGlzLmltcGxlbWVudGF0aW9uLm9uUmVtb3ZlJiZ0aGlzLmltcGxlbWVudGF0aW9uLm9uUmVtb3ZlKHQsdC5wYWludGVyLmNvbnRleHQuZ2wpfSxlfShFaSksUmM9e2NpcmNsZTpfbyxoZWF0bWFwOlBvLGhpbGxzaGFkZTpPbyxmaWxsOnhzLCJmaWxsLWV4dHJ1c2lvbiI6RnMsbGluZTpYcyxzeW1ib2w6Q2MsYmFja2dyb3VuZDpJYyxyYXN0ZXI6emN9O3ZhciBGYz1zZWxmLkhUTUxJbWFnZUVsZW1lbnQsQmM9c2VsZi5IVE1MQ2FudmFzRWxlbWVudCxOYz1zZWxmLkhUTUxWaWRlb0VsZW1lbnQsamM9c2VsZi5JbWFnZURhdGEsVWM9c2VsZi5JbWFnZUJpdG1hcCxWYz1mdW5jdGlvbih0LGUscixuKXt0aGlzLmNvbnRleHQ9dCx0aGlzLmZvcm1hdD1yLHRoaXMudGV4dHVyZT10LmdsLmNyZWF0ZVRleHR1cmUoKSx0aGlzLnVwZGF0ZShlLG4pfTtWYy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LndpZHRoLGk9dC5oZWlnaHQsYT0hKHRoaXMuc2l6ZSYmdGhpcy5zaXplWzBdPT09biYmdGhpcy5zaXplWzFdPT09aXx8ciksbz10aGlzLmNvbnRleHQscz1vLmdsO2lmKHRoaXMudXNlTWlwbWFwPUJvb2xlYW4oZSYmZS51c2VNaXBtYXApLHMuYmluZFRleHR1cmUocy5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksby5waXhlbFN0b3JlVW5wYWNrRmxpcFkuc2V0KCExKSxvLnBpeGVsU3RvcmVVbnBhY2suc2V0KDEpLG8ucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0KHRoaXMuZm9ybWF0PT09cy5SR0JBJiYoIWV8fCExIT09ZS5wcmVtdWx0aXBseSkpLGEpdGhpcy5zaXplPVtuLGldLHQgaW5zdGFuY2VvZiBGY3x8dCBpbnN0YW5jZW9mIEJjfHx0IGluc3RhbmNlb2YgTmN8fHQgaW5zdGFuY2VvZiBqY3x8VWMmJnQgaW5zdGFuY2VvZiBVYz9zLnRleEltYWdlMkQocy5URVhUVVJFXzJELDAsdGhpcy5mb3JtYXQsdGhpcy5mb3JtYXQscy5VTlNJR05FRF9CWVRFLHQpOnMudGV4SW1hZ2UyRChzLlRFWFRVUkVfMkQsMCx0aGlzLmZvcm1hdCxuLGksMCx0aGlzLmZvcm1hdCxzLlVOU0lHTkVEX0JZVEUsdC5kYXRhKTtlbHNle3ZhciBsPXJ8fHt4OjAseTowfSxjPWwueCx1PWwueTt0IGluc3RhbmNlb2YgRmN8fHQgaW5zdGFuY2VvZiBCY3x8dCBpbnN0YW5jZW9mIE5jfHx0IGluc3RhbmNlb2YgamN8fFVjJiZ0IGluc3RhbmNlb2YgVWM/cy50ZXhTdWJJbWFnZTJEKHMuVEVYVFVSRV8yRCwwLGMsdSxzLlJHQkEscy5VTlNJR05FRF9CWVRFLHQpOnMudGV4U3ViSW1hZ2UyRChzLlRFWFRVUkVfMkQsMCxjLHUsbixpLHMuUkdCQSxzLlVOU0lHTkVEX0JZVEUsdC5kYXRhKX10aGlzLnVzZU1pcG1hcCYmdGhpcy5pc1NpemVQb3dlck9mVHdvKCkmJnMuZ2VuZXJhdGVNaXBtYXAocy5URVhUVVJFXzJEKX0sVmMucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuY29udGV4dC5nbDtuLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLHIhPT1uLkxJTkVBUl9NSVBNQVBfTkVBUkVTVHx8dGhpcy5pc1NpemVQb3dlck9mVHdvKCl8fChyPW4uTElORUFSKSx0IT09dGhpcy5maWx0ZXImJihuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NQUdfRklMVEVSLHQpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01JTl9GSUxURVIscnx8dCksdGhpcy5maWx0ZXI9dCksZSE9PXRoaXMud3JhcCYmKG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfUyxlKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1QsZSksdGhpcy53cmFwPWUpfSxWYy5wcm90b3R5cGUuaXNTaXplUG93ZXJPZlR3bz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemVbMF09PT10aGlzLnNpemVbMV0mJk1hdGgubG9nKHRoaXMuc2l6ZVswXSkvTWF0aC5MTjIlMT09MH0sVmMucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpLHRoaXMudGV4dHVyZT1udWxsfTt2YXIgSGM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9jYWxsYmFjaz10LHRoaXMuX3RyaWdnZXJlZD0hMSwidW5kZWZpbmVkIiE9dHlwZW9mIE1lc3NhZ2VDaGFubmVsJiYodGhpcy5fY2hhbm5lbD1uZXcgTWVzc2FnZUNoYW5uZWwsdGhpcy5fY2hhbm5lbC5wb3J0Mi5vbm1lc3NhZ2U9ZnVuY3Rpb24oKXtlLl90cmlnZ2VyZWQ9ITEsZS5fY2FsbGJhY2soKX0pfTtIYy5wcm90b3R5cGUudHJpZ2dlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fdHJpZ2dlcmVkfHwodGhpcy5fdHJpZ2dlcmVkPSEwLHRoaXMuX2NoYW5uZWw/dGhpcy5fY2hhbm5lbC5wb3J0MS5wb3N0TWVzc2FnZSghMCk6c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0Ll90cmlnZ2VyZWQ9ITEsdC5fY2FsbGJhY2soKX0pLDApKX0sSGMucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe2RlbGV0ZSB0aGlzLl9jaGFubmVsLHRoaXMuX2NhbGxiYWNrPWZ1bmN0aW9uKCl7fX07dmFyIHFjPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRhcmdldD10LHRoaXMucGFyZW50PWUsdGhpcy5tYXBJZD1yLHRoaXMuY2FsbGJhY2tzPXt9LHRoaXMudGFza3M9e30sdGhpcy50YXNrUXVldWU9W10sdGhpcy5jYW5jZWxDYWxsYmFja3M9e30sbShbInJlY2VpdmUiLCJwcm9jZXNzIl0sdGhpcyksdGhpcy5pbnZva2VyPW5ldyBIYyh0aGlzLnByb2Nlc3MpLHRoaXMudGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMucmVjZWl2ZSwhMSksdGhpcy5nbG9iYWxTY29wZT1rKCk/dDpzZWxmfTtmdW5jdGlvbiBHYyh0LGUscil7dmFyIG49MipNYXRoLlBJKjYzNzgxMzcvMjU2L01hdGgucG93KDIscik7cmV0dXJuW3Qqbi0yKk1hdGguUEkqNjM3ODEzNy8yLGUqbi0yKk1hdGguUEkqNjM3ODEzNy8yXX1xYy5wcm90b3R5cGUuc2VuZD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXRoaXM7dm9pZCAwPT09aSYmKGk9ITEpO3ZhciBvPU1hdGgucm91bmQoMWUxOCpNYXRoLnJhbmRvbSgpKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDAsMTApO3ImJih0aGlzLmNhbGxiYWNrc1tvXT1yKTt2YXIgcz1TKHRoaXMuZ2xvYmFsU2NvcGUpP3ZvaWQgMDpbXTtyZXR1cm4gdGhpcy50YXJnZXQucG9zdE1lc3NhZ2Uoe2lkOm8sdHlwZTp0LGhhc0NhbGxiYWNrOiEhcix0YXJnZXRNYXBJZDpuLG11c3RRdWV1ZTppLHNvdXJjZU1hcElkOnRoaXMubWFwSWQsZGF0YTpIbihlLHMpfSxzKSx7Y2FuY2VsOmZ1bmN0aW9uKCl7ciYmZGVsZXRlIGEuY2FsbGJhY2tzW29dLGEudGFyZ2V0LnBvc3RNZXNzYWdlKHtpZDpvLHR5cGU6IjxjYW5jZWw+Iix0YXJnZXRNYXBJZDpuLHNvdXJjZU1hcElkOmEubWFwSWR9KX19fSxxYy5wcm90b3R5cGUucmVjZWl2ZT1mdW5jdGlvbih0KXt2YXIgZT10LmRhdGEscj1lLmlkO2lmKHImJighZS50YXJnZXRNYXBJZHx8dGhpcy5tYXBJZD09PWUudGFyZ2V0TWFwSWQpKWlmKCI8Y2FuY2VsPiI9PT1lLnR5cGUpe2RlbGV0ZSB0aGlzLnRhc2tzW3JdO3ZhciBuPXRoaXMuY2FuY2VsQ2FsbGJhY2tzW3JdO2RlbGV0ZSB0aGlzLmNhbmNlbENhbGxiYWNrc1tyXSxuJiZuKCl9ZWxzZSBrKCl8fGUubXVzdFF1ZXVlPyh0aGlzLnRhc2tzW3JdPWUsdGhpcy50YXNrUXVldWUucHVzaChyKSx0aGlzLmludm9rZXIudHJpZ2dlcigpKTp0aGlzLnByb2Nlc3NUYXNrKHIsZSl9LHFjLnByb3RvdHlwZS5wcm9jZXNzPWZ1bmN0aW9uKCl7aWYodGhpcy50YXNrUXVldWUubGVuZ3RoKXt2YXIgdD10aGlzLnRhc2tRdWV1ZS5zaGlmdCgpLGU9dGhpcy50YXNrc1t0XTtkZWxldGUgdGhpcy50YXNrc1t0XSx0aGlzLnRhc2tRdWV1ZS5sZW5ndGgmJnRoaXMuaW52b2tlci50cmlnZ2VyKCksZSYmdGhpcy5wcm9jZXNzVGFzayh0LGUpfX0scWMucHJvdG90eXBlLnByb2Nlc3NUYXNrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztpZigiPHJlc3BvbnNlPiI9PT1lLnR5cGUpe3ZhciBuPXRoaXMuY2FsbGJhY2tzW3RdO2RlbGV0ZSB0aGlzLmNhbGxiYWNrc1t0XSxuJiYoZS5lcnJvcj9uKHFuKGUuZXJyb3IpKTpuKG51bGwscW4oZS5kYXRhKSkpfWVsc2V7dmFyIGk9ITEsYT1TKHRoaXMuZ2xvYmFsU2NvcGUpP3ZvaWQgMDpbXSxvPWUuaGFzQ2FsbGJhY2s/ZnVuY3Rpb24oZSxuKXtpPSEwLGRlbGV0ZSByLmNhbmNlbENhbGxiYWNrc1t0XSxyLnRhcmdldC5wb3N0TWVzc2FnZSh7aWQ6dCx0eXBlOiI8cmVzcG9uc2U+Iixzb3VyY2VNYXBJZDpyLm1hcElkLGVycm9yOmU/SG4oZSk6bnVsbCxkYXRhOkhuKG4sYSl9LGEpfTpmdW5jdGlvbih0KXtpPSEwfSxzPW51bGwsbD1xbihlLmRhdGEpO2lmKHRoaXMucGFyZW50W2UudHlwZV0pcz10aGlzLnBhcmVudFtlLnR5cGVdKGUuc291cmNlTWFwSWQsbCxvKTtlbHNlIGlmKHRoaXMucGFyZW50LmdldFdvcmtlclNvdXJjZSl7dmFyIGM9ZS50eXBlLnNwbGl0KCIuIik7cz10aGlzLnBhcmVudC5nZXRXb3JrZXJTb3VyY2UoZS5zb3VyY2VNYXBJZCxjWzBdLGwuc291cmNlKVtjWzFdXShsLG8pfWVsc2UgbyhuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZ1bmN0aW9uICIrZS50eXBlKSk7IWkmJnMmJnMuY2FuY2VsJiYodGhpcy5jYW5jZWxDYWxsYmFja3NbdF09cy5jYW5jZWwpfX0scWMucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuaW52b2tlci5yZW1vdmUoKSx0aGlzLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLnJlY2VpdmUsITEpfTt2YXIgWWM9ZnVuY3Rpb24odCxlKXt0JiYoZT90aGlzLnNldFNvdXRoV2VzdCh0KS5zZXROb3J0aEVhc3QoZSk6ND09PXQubGVuZ3RoP3RoaXMuc2V0U291dGhXZXN0KFt0WzBdLHRbMV1dKS5zZXROb3J0aEVhc3QoW3RbMl0sdFszXV0pOnRoaXMuc2V0U291dGhXZXN0KHRbMF0pLnNldE5vcnRoRWFzdCh0WzFdKSl9O1ljLnByb3RvdHlwZS5zZXROb3J0aEVhc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25lPXQgaW5zdGFuY2VvZiBXYz9uZXcgV2ModC5sbmcsdC5sYXQpOldjLmNvbnZlcnQodCksdGhpc30sWWMucHJvdG90eXBlLnNldFNvdXRoV2VzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fc3c9dCBpbnN0YW5jZW9mIFdjP25ldyBXYyh0LmxuZyx0LmxhdCk6V2MuY29udmVydCh0KSx0aGlzfSxZYy5wcm90b3R5cGUuZXh0ZW5kPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10aGlzLl9zdyxpPXRoaXMuX25lO2lmKHQgaW5zdGFuY2VvZiBXYyllPXQscj10O2Vsc2V7aWYoISh0IGluc3RhbmNlb2YgWWMpKXtpZihBcnJheS5pc0FycmF5KHQpKXtpZig0PT09dC5sZW5ndGh8fHQuZXZlcnkoQXJyYXkuaXNBcnJheSkpe3ZhciBhPXQ7cmV0dXJuIHRoaXMuZXh0ZW5kKFljLmNvbnZlcnQoYSkpfXZhciBvPXQ7cmV0dXJuIHRoaXMuZXh0ZW5kKFdjLmNvbnZlcnQobykpfXJldHVybiB0aGlzfWlmKGU9dC5fc3cscj10Ll9uZSwhZXx8IXIpcmV0dXJuIHRoaXN9cmV0dXJuIG58fGk/KG4ubG5nPU1hdGgubWluKGUubG5nLG4ubG5nKSxuLmxhdD1NYXRoLm1pbihlLmxhdCxuLmxhdCksaS5sbmc9TWF0aC5tYXgoci5sbmcsaS5sbmcpLGkubGF0PU1hdGgubWF4KHIubGF0LGkubGF0KSk6KHRoaXMuX3N3PW5ldyBXYyhlLmxuZyxlLmxhdCksdGhpcy5fbmU9bmV3IFdjKHIubG5nLHIubGF0KSksdGhpc30sWWMucHJvdG90eXBlLmdldENlbnRlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgV2MoKHRoaXMuX3N3LmxuZyt0aGlzLl9uZS5sbmcpLzIsKHRoaXMuX3N3LmxhdCt0aGlzLl9uZS5sYXQpLzIpfSxZYy5wcm90b3R5cGUuZ2V0U291dGhXZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3fSxZYy5wcm90b3R5cGUuZ2V0Tm9ydGhFYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25lfSxZYy5wcm90b3R5cGUuZ2V0Tm9ydGhXZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBXYyh0aGlzLmdldFdlc3QoKSx0aGlzLmdldE5vcnRoKCkpfSxZYy5wcm90b3R5cGUuZ2V0U291dGhFYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBXYyh0aGlzLmdldEVhc3QoKSx0aGlzLmdldFNvdXRoKCkpfSxZYy5wcm90b3R5cGUuZ2V0V2VzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdy5sbmd9LFljLnByb3RvdHlwZS5nZXRTb3V0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdy5sYXR9LFljLnByb3RvdHlwZS5nZXRFYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25lLmxuZ30sWWMucHJvdG90eXBlLmdldE5vcnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25lLmxhdH0sWWMucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5fc3cudG9BcnJheSgpLHRoaXMuX25lLnRvQXJyYXkoKV19LFljLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJMbmdMYXRCb3VuZHMoIit0aGlzLl9zdy50b1N0cmluZygpKyIsICIrdGhpcy5fbmUudG9TdHJpbmcoKSsiKSJ9LFljLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLl9zdyYmdGhpcy5fbmUpfSxZYy5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCl7dmFyIGU9V2MuY29udmVydCh0KSxyPWUubG5nLG49ZS5sYXQsaT10aGlzLl9zdy5sYXQ8PW4mJm48PXRoaXMuX25lLmxhdCxhPXRoaXMuX3N3LmxuZzw9ciYmcjw9dGhpcy5fbmUubG5nO3JldHVybiB0aGlzLl9zdy5sbmc+dGhpcy5fbmUubG5nJiYoYT10aGlzLl9zdy5sbmc+PXImJnI+PXRoaXMuX25lLmxuZyksaSYmYX0sWWMuY29udmVydD1mdW5jdGlvbih0KXtyZXR1cm4hdHx8dCBpbnN0YW5jZW9mIFljP3Q6bmV3IFljKHQpfTt2YXIgV2M9ZnVuY3Rpb24odCxlKXtpZihpc05hTih0KXx8aXNOYU4oZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIExuZ0xhdCBvYmplY3Q6ICgiK3QrIiwgIitlKyIpIik7aWYodGhpcy5sbmc9K3QsdGhpcy5sYXQ9K2UsdGhpcy5sYXQ+OTB8fHRoaXMubGF0PC05MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgTG5nTGF0IGxhdGl0dWRlIHZhbHVlOiBtdXN0IGJlIGJldHdlZW4gLTkwIGFuZCA5MCIpfTtXYy5wcm90b3R5cGUud3JhcD1mdW5jdGlvbigpe3JldHVybiBuZXcgV2MoYyh0aGlzLmxuZywtMTgwLDE4MCksdGhpcy5sYXQpfSxXYy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVyblt0aGlzLmxuZyx0aGlzLmxhdF19LFdjLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJMbmdMYXQoIit0aGlzLmxuZysiLCAiK3RoaXMubGF0KyIpIn0sV2MucHJvdG90eXBlLmRpc3RhbmNlVG89ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5QSS8xODAscj10aGlzLmxhdCplLG49dC5sYXQqZSxpPU1hdGguc2luKHIpKk1hdGguc2luKG4pK01hdGguY29zKHIpKk1hdGguY29zKG4pKk1hdGguY29zKCh0LmxuZy10aGlzLmxuZykqZSk7cmV0dXJuIDYzNzEwMDguOCpNYXRoLmFjb3MoTWF0aC5taW4oaSwxKSl9LFdjLnByb3RvdHlwZS50b0JvdW5kcz1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0wKTt2YXIgZT0zNjAqdC80MDA3NTAxNyxyPWUvTWF0aC5jb3MoTWF0aC5QSS8xODAqdGhpcy5sYXQpO3JldHVybiBuZXcgWWMobmV3IFdjKHRoaXMubG5nLXIsdGhpcy5sYXQtZSksbmV3IFdjKHRoaXMubG5nK3IsdGhpcy5sYXQrZSkpfSxXYy5jb252ZXJ0PWZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBXYylyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpJiYoMj09PXQubGVuZ3RofHwzPT09dC5sZW5ndGgpKXJldHVybiBuZXcgV2MoTnVtYmVyKHRbMF0pLE51bWJlcih0WzFdKSk7aWYoIUFycmF5LmlzQXJyYXkodCkmJiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXQpcmV0dXJuIG5ldyBXYyhOdW1iZXIoImxuZyJpbiB0P3QubG5nOnQubG9uKSxOdW1iZXIodC5sYXQpKTt0aHJvdyBuZXcgRXJyb3IoImBMbmdMYXRMaWtlYCBhcmd1bWVudCBtdXN0IGJlIHNwZWNpZmllZCBhcyBhIExuZ0xhdCBpbnN0YW5jZSwgYW4gb2JqZWN0IHtsbmc6IDxsbmc+LCBsYXQ6IDxsYXQ+fSwgYW4gb2JqZWN0IHtsb246IDxsbmc+LCBsYXQ6IDxsYXQ+fSwgb3IgYW4gYXJyYXkgb2YgWzxsbmc+LCA8bGF0Pl0iKX07dmFyIFhjPTIqTWF0aC5QSSo2MzcxMDA4Ljg7ZnVuY3Rpb24gWmModCl7cmV0dXJuIFhjKk1hdGguY29zKHQqTWF0aC5QSS8xODApfWZ1bmN0aW9uIEpjKHQpe3JldHVybigxODArdCkvMzYwfWZ1bmN0aW9uIEtjKHQpe3JldHVybigxODAtMTgwL01hdGguUEkqTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80K3QqTWF0aC5QSS8zNjApKSkvMzYwfWZ1bmN0aW9uIFFjKHQsZSl7cmV0dXJuIHQvWmMoZSl9ZnVuY3Rpb24gJGModCl7dmFyIGU9MTgwLTM2MCp0O3JldHVybiAzNjAvTWF0aC5QSSpNYXRoLmF0YW4oTWF0aC5leHAoZSpNYXRoLlBJLzE4MCkpLTkwfXZhciB0dT1mdW5jdGlvbih0LGUscil7dm9pZCAwPT09ciYmKHI9MCksdGhpcy54PSt0LHRoaXMueT0rZSx0aGlzLno9K3J9O3R1LmZyb21MbmdMYXQ9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0wKTt2YXIgcj1XYy5jb252ZXJ0KHQpO3JldHVybiBuZXcgdHUoSmMoci5sbmcpLEtjKHIubGF0KSxRYyhlLHIubGF0KSl9LHR1LnByb3RvdHlwZS50b0xuZ0xhdD1mdW5jdGlvbigpe3JldHVybiBuZXcgV2MoMzYwKnRoaXMueC0xODAsJGModGhpcy55KSl9LHR1LnByb3RvdHlwZS50b0FsdGl0dWRlPWZ1bmN0aW9uKCl7cmV0dXJuIHQ9dGhpcy56LGU9dGhpcy55LHQqWmMoJGMoZSkpO3ZhciB0LGV9LHR1LnByb3RvdHlwZS5tZXRlckluTWVyY2F0b3JDb29yZGluYXRlVW5pdHM9ZnVuY3Rpb24oKXtyZXR1cm4gMS9YYyoodD0kYyh0aGlzLnkpLDEvTWF0aC5jb3ModCpNYXRoLlBJLzE4MCkpO3ZhciB0fTt2YXIgZXU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuej10LHRoaXMueD1lLHRoaXMueT1yLHRoaXMua2V5PWl1KDAsdCx0LGUscil9O2V1LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuej09PXQueiYmdGhpcy54PT09dC54JiZ0aGlzLnk9PT10Lnl9LGV1LnByb3RvdHlwZS51cmw9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHM9KHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LGE9R2MoMjU2KnIsMjU2KihuPU1hdGgucG93KDIsaSktbi0xKSxpKSxvPUdjKDI1NioocisxKSwyNTYqKG4rMSksaSksYVswXSsiLCIrYVsxXSsiLCIrb1swXSsiLCIrb1sxXSksbD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGk9IiIsYT10O2E+MDthLS0paSs9KGUmKG49MTw8YS0xKT8xOjApKyhyJm4/MjowKTtyZXR1cm4gaX0odGhpcy56LHRoaXMueCx0aGlzLnkpO3JldHVybiB0Wyh0aGlzLngrdGhpcy55KSV0Lmxlbmd0aF0ucmVwbGFjZSgie3ByZWZpeH0iLCh0aGlzLnglMTYpLnRvU3RyaW5nKDE2KSsodGhpcy55JTE2KS50b1N0cmluZygxNikpLnJlcGxhY2UoInt6fSIsU3RyaW5nKHRoaXMueikpLnJlcGxhY2UoInt4fSIsU3RyaW5nKHRoaXMueCkpLnJlcGxhY2UoInt5fSIsU3RyaW5nKCJ0bXMiPT09ZT9NYXRoLnBvdygyLHRoaXMueiktdGhpcy55LTE6dGhpcy55KSkucmVwbGFjZSgie3F1YWRrZXl9IixsKS5yZXBsYWNlKCJ7YmJveC1lcHNnLTM4NTd9IixzKX0sZXUucHJvdG90eXBlLmdldFRpbGVQb2ludD1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnBvdygyLHRoaXMueik7cmV0dXJuIG5ldyBpKDgxOTIqKHQueCplLXRoaXMueCksODE5MioodC55KmUtdGhpcy55KSl9LGV1LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnorIi8iK3RoaXMueCsiLyIrdGhpcy55fTt2YXIgcnU9ZnVuY3Rpb24odCxlKXt0aGlzLndyYXA9dCx0aGlzLmNhbm9uaWNhbD1lLHRoaXMua2V5PWl1KHQsZS56LGUueixlLngsZS55KX0sbnU9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLm92ZXJzY2FsZWRaPXQsdGhpcy53cmFwPWUsdGhpcy5jYW5vbmljYWw9bmV3IGV1KHIsK24sK2kpLHRoaXMua2V5PWl1KGUsdCxyLG4saSl9O2Z1bmN0aW9uIGl1KHQsZSxyLG4saSl7KHQqPTIpPDAmJih0PS0xKnQtMSk7dmFyIGE9MTw8cjtyZXR1cm4oYSphKnQrYSppK24pLnRvU3RyaW5nKDM2KStyLnRvU3RyaW5nKDM2KStlLnRvU3RyaW5nKDM2KX1udS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm92ZXJzY2FsZWRaPT09dC5vdmVyc2NhbGVkWiYmdGhpcy53cmFwPT09dC53cmFwJiZ0aGlzLmNhbm9uaWNhbC5lcXVhbHModC5jYW5vbmljYWwpfSxudS5wcm90b3R5cGUuc2NhbGVkVG89ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jYW5vbmljYWwuei10O3JldHVybiB0PnRoaXMuY2Fub25pY2FsLno/bmV3IG51KHQsdGhpcy53cmFwLHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KTpuZXcgbnUodCx0aGlzLndyYXAsdCx0aGlzLmNhbm9uaWNhbC54Pj5lLHRoaXMuY2Fub25pY2FsLnk+PmUpfSxudS5wcm90b3R5cGUuY2FsY3VsYXRlU2NhbGVkS2V5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jYW5vbmljYWwuei10O3JldHVybiB0PnRoaXMuY2Fub25pY2FsLno/aXUodGhpcy53cmFwKitlLHQsdGhpcy5jYW5vbmljYWwueix0aGlzLmNhbm9uaWNhbC54LHRoaXMuY2Fub25pY2FsLnkpOml1KHRoaXMud3JhcCorZSx0LHQsdGhpcy5jYW5vbmljYWwueD4+cix0aGlzLmNhbm9uaWNhbC55Pj5yKX0sbnUucHJvdG90eXBlLmlzQ2hpbGRPZj1mdW5jdGlvbih0KXtpZih0LndyYXAhPT10aGlzLndyYXApcmV0dXJuITE7dmFyIGU9dGhpcy5jYW5vbmljYWwuei10LmNhbm9uaWNhbC56O3JldHVybiAwPT09dC5vdmVyc2NhbGVkWnx8dC5vdmVyc2NhbGVkWjx0aGlzLm92ZXJzY2FsZWRaJiZ0LmNhbm9uaWNhbC54PT09dGhpcy5jYW5vbmljYWwueD4+ZSYmdC5jYW5vbmljYWwueT09PXRoaXMuY2Fub25pY2FsLnk+PmV9LG51LnByb3RvdHlwZS5jaGlsZHJlbj1mdW5jdGlvbih0KXtpZih0aGlzLm92ZXJzY2FsZWRaPj10KXJldHVybltuZXcgbnUodGhpcy5vdmVyc2NhbGVkWisxLHRoaXMud3JhcCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSldO3ZhciBlPXRoaXMuY2Fub25pY2FsLnorMSxyPTIqdGhpcy5jYW5vbmljYWwueCxuPTIqdGhpcy5jYW5vbmljYWwueTtyZXR1cm5bbmV3IG51KGUsdGhpcy53cmFwLGUscixuKSxuZXcgbnUoZSx0aGlzLndyYXAsZSxyKzEsbiksbmV3IG51KGUsdGhpcy53cmFwLGUscixuKzEpLG5ldyBudShlLHRoaXMud3JhcCxlLHIrMSxuKzEpXX0sbnUucHJvdG90eXBlLmlzTGVzc1RoYW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud3JhcDx0LndyYXB8fCEodGhpcy53cmFwPnQud3JhcCkmJih0aGlzLm92ZXJzY2FsZWRaPHQub3ZlcnNjYWxlZFp8fCEodGhpcy5vdmVyc2NhbGVkWj50Lm92ZXJzY2FsZWRaKSYmKHRoaXMuY2Fub25pY2FsLng8dC5jYW5vbmljYWwueHx8ISh0aGlzLmNhbm9uaWNhbC54PnQuY2Fub25pY2FsLngpJiZ0aGlzLmNhbm9uaWNhbC55PHQuY2Fub25pY2FsLnkpKX0sbnUucHJvdG90eXBlLndyYXBwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG51KHRoaXMub3ZlcnNjYWxlZFosMCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSl9LG51LnByb3RvdHlwZS51bndyYXBUbz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG51KHRoaXMub3ZlcnNjYWxlZFosdCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSl9LG51LnByb3RvdHlwZS5vdmVyc2NhbGVGYWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5wb3coMix0aGlzLm92ZXJzY2FsZWRaLXRoaXMuY2Fub25pY2FsLnopfSxudS5wcm90b3R5cGUudG9VbndyYXBwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHJ1KHRoaXMud3JhcCx0aGlzLmNhbm9uaWNhbCl9LG51LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm92ZXJzY2FsZWRaKyIvIit0aGlzLmNhbm9uaWNhbC54KyIvIit0aGlzLmNhbm9uaWNhbC55fSxudS5wcm90b3R5cGUuZ2V0VGlsZVBvaW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNhbm9uaWNhbC5nZXRUaWxlUG9pbnQobmV3IHR1KHQueC10aGlzLndyYXAsdC55KSl9LE5uKCJDYW5vbmljYWxUaWxlSUQiLGV1KSxObigiT3ZlcnNjYWxlZFRpbGVJRCIsbnUse29taXQ6WyJwb3NNYXRyaXgiXX0pO3ZhciBhdT1mdW5jdGlvbih0LGUscil7aWYodGhpcy51aWQ9dCxlLmhlaWdodCE9PWUud2lkdGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkRFTSB0aWxlcyBtdXN0IGJlIHNxdWFyZSIpO2lmKHImJiJtYXBib3giIT09ciYmInRlcnJhcml1bSIhPT1yKXJldHVybiBfKCciJytyKyciIGlzIG5vdCBhIHZhbGlkIGVuY29kaW5nIHR5cGUuIFZhbGlkIHR5cGVzIGluY2x1ZGUgIm1hcGJveCIgYW5kICJ0ZXJyYXJpdW0iLicpO3RoaXMuc3RyaWRlPWUuaGVpZ2h0O3ZhciBuPXRoaXMuZGltPWUuaGVpZ2h0LTI7dGhpcy5kYXRhPW5ldyBVaW50MzJBcnJheShlLmRhdGEuYnVmZmVyKSx0aGlzLmVuY29kaW5nPXJ8fCJtYXBib3giO2Zvcih2YXIgaT0wO2k8bjtpKyspdGhpcy5kYXRhW3RoaXMuX2lkeCgtMSxpKV09dGhpcy5kYXRhW3RoaXMuX2lkeCgwLGkpXSx0aGlzLmRhdGFbdGhpcy5faWR4KG4saSldPXRoaXMuZGF0YVt0aGlzLl9pZHgobi0xLGkpXSx0aGlzLmRhdGFbdGhpcy5faWR4KGksLTEpXT10aGlzLmRhdGFbdGhpcy5faWR4KGksMCldLHRoaXMuZGF0YVt0aGlzLl9pZHgoaSxuKV09dGhpcy5kYXRhW3RoaXMuX2lkeChpLG4tMSldO3RoaXMuZGF0YVt0aGlzLl9pZHgoLTEsLTEpXT10aGlzLmRhdGFbdGhpcy5faWR4KDAsMCldLHRoaXMuZGF0YVt0aGlzLl9pZHgobiwtMSldPXRoaXMuZGF0YVt0aGlzLl9pZHgobi0xLDApXSx0aGlzLmRhdGFbdGhpcy5faWR4KC0xLG4pXT10aGlzLmRhdGFbdGhpcy5faWR4KDAsbi0xKV0sdGhpcy5kYXRhW3RoaXMuX2lkeChuLG4pXT10aGlzLmRhdGFbdGhpcy5faWR4KG4tMSxuLTEpXX07YXUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBVaW50OEFycmF5KHRoaXMuZGF0YS5idWZmZXIpLG49NCp0aGlzLl9pZHgodCxlKTtyZXR1cm4oInRlcnJhcml1bSI9PT10aGlzLmVuY29kaW5nP3RoaXMuX3VucGFja1RlcnJhcml1bTp0aGlzLl91bnBhY2tNYXBib3gpKHJbbl0scltuKzFdLHJbbisyXSl9LGF1LnByb3RvdHlwZS5nZXRVbnBhY2tWZWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4idGVycmFyaXVtIj09PXRoaXMuZW5jb2Rpbmc/WzI1NiwxLDEvMjU2LDMyNzY4XTpbNjU1My42LDI1LjYsLjEsMWU0XX0sYXUucHJvdG90eXBlLl9pZHg9ZnVuY3Rpb24odCxlKXtpZih0PC0xfHx0Pj10aGlzLmRpbSsxfHxlPC0xfHxlPj10aGlzLmRpbSsxKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2Ugc291cmNlIGNvb3JkaW5hdGVzIGZvciBERU0gZGF0YSIpO3JldHVybihlKzEpKnRoaXMuc3RyaWRlKyh0KzEpfSxhdS5wcm90b3R5cGUuX3VucGFja01hcGJveD1mdW5jdGlvbih0LGUscil7cmV0dXJuKDI1Nip0KjI1NisyNTYqZStyKS8xMC0xZTR9LGF1LnByb3RvdHlwZS5fdW5wYWNrVGVycmFyaXVtPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMjU2KnQrZStyLzI1Ni0zMjc2OH0sYXUucHJvdG90eXBlLmdldFBpeGVscz1mdW5jdGlvbigpe3JldHVybiBuZXcgRW8oe3dpZHRoOnRoaXMuc3RyaWRlLGhlaWdodDp0aGlzLnN0cmlkZX0sbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcikpfSxhdS5wcm90b3R5cGUuYmFja2ZpbGxCb3JkZXI9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuZGltIT09dC5kaW0pdGhyb3cgbmV3IEVycm9yKCJkZW0gZGltZW5zaW9uIG1pc21hdGNoIik7dmFyIG49ZSp0aGlzLmRpbSxpPWUqdGhpcy5kaW0rdGhpcy5kaW0sYT1yKnRoaXMuZGltLG89cip0aGlzLmRpbSt0aGlzLmRpbTtzd2l0Y2goZSl7Y2FzZS0xOm49aS0xO2JyZWFrO2Nhc2UgMTppPW4rMX1zd2l0Y2gocil7Y2FzZS0xOmE9by0xO2JyZWFrO2Nhc2UgMTpvPWErMX1mb3IodmFyIHM9LWUqdGhpcy5kaW0sbD0tcip0aGlzLmRpbSxjPWE7YzxvO2MrKylmb3IodmFyIHU9bjt1PGk7dSsrKXRoaXMuZGF0YVt0aGlzLl9pZHgodSxjKV09dC5kYXRhW3RoaXMuX2lkeCh1K3MsYytsKV19LE5uKCJERU1EYXRhIixhdSk7dmFyIG91PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cmluZ1RvTnVtYmVyPXt9LHRoaXMuX251bWJlclRvU3RyaW5nPVtdO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdO3RoaXMuX3N0cmluZ1RvTnVtYmVyW3JdPWUsdGhpcy5fbnVtYmVyVG9TdHJpbmdbZV09cn19O291LnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3N0cmluZ1RvTnVtYmVyW3RdfSxvdS5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9udW1iZXJUb1N0cmluZ1t0XX07dmFyIHN1PWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy50eXBlPSJGZWF0dXJlIix0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZT10LHQuX3o9ZSx0Ll94PXIsdC5feT1uLHRoaXMucHJvcGVydGllcz10LnByb3BlcnRpZXMsdGhpcy5pZD1pfSxsdT17Z2VvbWV0cnk6e2NvbmZpZ3VyYWJsZTohMH19O2x1Lmdlb21ldHJ5LmdldD1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLl9nZW9tZXRyeSYmKHRoaXMuX2dlb21ldHJ5PXRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLnRvR2VvSlNPTih0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feCx0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feSx0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feikuZ2VvbWV0cnkpLHRoaXMuX2dlb21ldHJ5fSxsdS5nZW9tZXRyeS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fZ2VvbWV0cnk9dH0sc3UucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciB0PXtnZW9tZXRyeTp0aGlzLmdlb21ldHJ5fTtmb3IodmFyIGUgaW4gdGhpcykiX2dlb21ldHJ5IiE9PWUmJiJfdmVjdG9yVGlsZUZlYXR1cmUiIT09ZSYmKHRbZV09dGhpc1tlXSk7cmV0dXJuIHR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN1LnByb3RvdHlwZSxsdSk7dmFyIGN1PWZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT17fSx0aGlzLnN0YXRlQ2hhbmdlcz17fSx0aGlzLmRlbGV0ZWRTdGF0ZXM9e319O2N1LnByb3RvdHlwZS51cGRhdGVTdGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49U3RyaW5nKGUpO2lmKHRoaXMuc3RhdGVDaGFuZ2VzW3RdPXRoaXMuc3RhdGVDaGFuZ2VzW3RdfHx7fSx0aGlzLnN0YXRlQ2hhbmdlc1t0XVtuXT10aGlzLnN0YXRlQ2hhbmdlc1t0XVtuXXx8e30sdSh0aGlzLnN0YXRlQ2hhbmdlc1t0XVtuXSxyKSxudWxsPT09dGhpcy5kZWxldGVkU3RhdGVzW3RdKWZvcih2YXIgaSBpbiB0aGlzLmRlbGV0ZWRTdGF0ZXNbdF09e30sdGhpcy5zdGF0ZVt0XSlpIT09biYmKHRoaXMuZGVsZXRlZFN0YXRlc1t0XVtpXT1udWxsKTtlbHNlIGlmKHRoaXMuZGVsZXRlZFN0YXRlc1t0XSYmbnVsbD09PXRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXSlmb3IodmFyIGEgaW4gdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dPXt9LHRoaXMuc3RhdGVbdF1bbl0pclthXXx8KHRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXVthXT1udWxsKTtlbHNlIGZvcih2YXIgbyBpbiByKXt0aGlzLmRlbGV0ZWRTdGF0ZXNbdF0mJnRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXSYmbnVsbD09PXRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXVtvXSYmZGVsZXRlIHRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXVtvXX19LGN1LnByb3RvdHlwZS5yZW1vdmVGZWF0dXJlU3RhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKCEobnVsbD09PXRoaXMuZGVsZXRlZFN0YXRlc1t0XSkpe3ZhciBuPVN0cmluZyhlKTtpZih0aGlzLmRlbGV0ZWRTdGF0ZXNbdF09dGhpcy5kZWxldGVkU3RhdGVzW3RdfHx7fSxyJiZ2b2lkIDAhPT1lKW51bGwhPT10aGlzLmRlbGV0ZWRTdGF0ZXNbdF1bbl0mJih0aGlzLmRlbGV0ZWRTdGF0ZXNbdF1bbl09dGhpcy5kZWxldGVkU3RhdGVzW3RdW25dfHx7fSx0aGlzLmRlbGV0ZWRTdGF0ZXNbdF1bbl1bcl09bnVsbCk7ZWxzZSBpZih2b2lkIDAhPT1lKXtpZih0aGlzLnN0YXRlQ2hhbmdlc1t0XSYmdGhpcy5zdGF0ZUNoYW5nZXNbdF1bbl0pZm9yKHIgaW4gdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dPXt9LHRoaXMuc3RhdGVDaGFuZ2VzW3RdW25dKXRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXVtyXT1udWxsO2Vsc2UgdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dPW51bGx9ZWxzZSB0aGlzLmRlbGV0ZWRTdGF0ZXNbdF09bnVsbH19LGN1LnByb3RvdHlwZS5nZXRTdGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPVN0cmluZyhlKSxuPXRoaXMuc3RhdGVbdF18fHt9LGk9dGhpcy5zdGF0ZUNoYW5nZXNbdF18fHt9LGE9dSh7fSxuW3JdLGlbcl0pO2lmKG51bGw9PT10aGlzLmRlbGV0ZWRTdGF0ZXNbdF0pcmV0dXJue307aWYodGhpcy5kZWxldGVkU3RhdGVzW3RdKXt2YXIgbz10aGlzLmRlbGV0ZWRTdGF0ZXNbdF1bZV07aWYobnVsbD09PW8pcmV0dXJue307Zm9yKHZhciBzIGluIG8pZGVsZXRlIGFbc119cmV0dXJuIGF9LGN1LnByb3RvdHlwZS5pbml0aWFsaXplVGlsZVN0YXRlPWZ1bmN0aW9uKHQsZSl7dC5zZXRGZWF0dXJlU3RhdGUodGhpcy5zdGF0ZSxlKX0sY3UucHJvdG90eXBlLmNvYWxlc2NlQ2hhbmdlcz1mdW5jdGlvbih0LGUpe3ZhciByPXt9O2Zvcih2YXIgbiBpbiB0aGlzLnN0YXRlQ2hhbmdlcyl7dGhpcy5zdGF0ZVtuXT10aGlzLnN0YXRlW25dfHx7fTt2YXIgaT17fTtmb3IodmFyIGEgaW4gdGhpcy5zdGF0ZUNoYW5nZXNbbl0pdGhpcy5zdGF0ZVtuXVthXXx8KHRoaXMuc3RhdGVbbl1bYV09e30pLHUodGhpcy5zdGF0ZVtuXVthXSx0aGlzLnN0YXRlQ2hhbmdlc1tuXVthXSksaVthXT10aGlzLnN0YXRlW25dW2FdO3Jbbl09aX1mb3IodmFyIG8gaW4gdGhpcy5kZWxldGVkU3RhdGVzKXt0aGlzLnN0YXRlW29dPXRoaXMuc3RhdGVbb118fHt9O3ZhciBzPXt9O2lmKG51bGw9PT10aGlzLmRlbGV0ZWRTdGF0ZXNbb10pZm9yKHZhciBsIGluIHRoaXMuc3RhdGVbb10pc1tsXT17fSx0aGlzLnN0YXRlW29dW2xdPXt9O2Vsc2UgZm9yKHZhciBjIGluIHRoaXMuZGVsZXRlZFN0YXRlc1tvXSl7aWYobnVsbD09PXRoaXMuZGVsZXRlZFN0YXRlc1tvXVtjXSl0aGlzLnN0YXRlW29dW2NdPXt9O2Vsc2UgZm9yKHZhciBmPTAsaD1PYmplY3Qua2V5cyh0aGlzLmRlbGV0ZWRTdGF0ZXNbb11bY10pO2Y8aC5sZW5ndGg7Zis9MSl7dmFyIHA9aFtmXTtkZWxldGUgdGhpcy5zdGF0ZVtvXVtjXVtwXX1zW2NdPXRoaXMuc3RhdGVbb11bY119cltvXT1yW29dfHx7fSx1KHJbb10scyl9aWYodGhpcy5zdGF0ZUNoYW5nZXM9e30sdGhpcy5kZWxldGVkU3RhdGVzPXt9LDAhPT1PYmplY3Qua2V5cyhyKS5sZW5ndGgpZm9yKHZhciBkIGluIHQpe3RbZF0uc2V0RmVhdHVyZVN0YXRlKHIsZSl9fTt2YXIgdXU9ZnVuY3Rpb24odCxlKXt0aGlzLnRpbGVJRD10LHRoaXMueD10LmNhbm9uaWNhbC54LHRoaXMueT10LmNhbm9uaWNhbC55LHRoaXMuej10LmNhbm9uaWNhbC56LHRoaXMuZ3JpZD1uZXcgem4oODE5MiwxNiwwKSx0aGlzLmdyaWQzRD1uZXcgem4oODE5MiwxNiwwKSx0aGlzLmZlYXR1cmVJbmRleEFycmF5PW5ldyBmYSx0aGlzLnByb21vdGVJZD1lfTtmdW5jdGlvbiBmdSh0LGUscixuLGkpe3JldHVybiB2KHQsKGZ1bmN0aW9uKHQsYSl7dmFyIG89ZSBpbnN0YW5jZW9mIF9pP2UuZ2V0KGEpOm51bGw7cmV0dXJuIG8mJm8uZXZhbHVhdGU/by5ldmFsdWF0ZShyLG4saSk6b30pKX1mdW5jdGlvbiBodSh0KXtmb3IodmFyIGU9MS8wLHI9MS8wLG49LTEvMCxpPS0xLzAsYT0wLG89dDthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV07ZT1NYXRoLm1pbihlLHMueCkscj1NYXRoLm1pbihyLHMueSksbj1NYXRoLm1heChuLHMueCksaT1NYXRoLm1heChpLHMueSl9cmV0dXJue21pblg6ZSxtaW5ZOnIsbWF4WDpuLG1heFk6aX19ZnVuY3Rpb24gcHUodCxlKXtyZXR1cm4gZS10fXV1LnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXRoaXMuZmVhdHVyZUluZGV4QXJyYXkubGVuZ3RoO3RoaXMuZmVhdHVyZUluZGV4QXJyYXkuZW1wbGFjZUJhY2socixuLGkpO2Zvcih2YXIgcz1hP3RoaXMuZ3JpZDNEOnRoaXMuZ3JpZCxsPTA7bDxlLmxlbmd0aDtsKyspe2Zvcih2YXIgYz1lW2xdLHU9WzEvMCwxLzAsLTEvMCwtMS8wXSxmPTA7ZjxjLmxlbmd0aDtmKyspe3ZhciBoPWNbZl07dVswXT1NYXRoLm1pbih1WzBdLGgueCksdVsxXT1NYXRoLm1pbih1WzFdLGgueSksdVsyXT1NYXRoLm1heCh1WzJdLGgueCksdVszXT1NYXRoLm1heCh1WzNdLGgueSl9dVswXTw4MTkyJiZ1WzFdPDgxOTImJnVbMl0+PTAmJnVbM10+PTAmJnMuaW5zZXJ0KG8sdVswXSx1WzFdLHVbMl0sdVszXSl9fSx1dS5wcm90b3R5cGUubG9hZFZUTGF5ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudnRMYXllcnN8fCh0aGlzLnZ0TGF5ZXJzPW5ldyBMcy5WZWN0b3JUaWxlKG5ldyBhbCh0aGlzLnJhd1RpbGVEYXRhKSkubGF5ZXJzLHRoaXMuc291cmNlTGF5ZXJDb2Rlcj1uZXcgb3UodGhpcy52dExheWVycz9PYmplY3Qua2V5cyh0aGlzLnZ0TGF5ZXJzKS5zb3J0KCk6WyJfZ2VvanNvblRpbGVMYXllciJdKSksdGhpcy52dExheWVyc30sdXUucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXRoaXM7dGhpcy5sb2FkVlRMYXllcnMoKTtmb3IodmFyIG89dC5wYXJhbXN8fHt9LHM9ODE5Mi90LnRpbGVTaXplL3Quc2NhbGUsbD1zbihvLmZpbHRlciksYz10LnF1ZXJ5R2VvbWV0cnksdT10LnF1ZXJ5UGFkZGluZypzLGY9aHUoYyksaD10aGlzLmdyaWQucXVlcnkoZi5taW5YLXUsZi5taW5ZLXUsZi5tYXhYK3UsZi5tYXhZK3UpLHA9aHUodC5jYW1lcmFRdWVyeUdlb21ldHJ5KSxkPXRoaXMuZ3JpZDNELnF1ZXJ5KHAubWluWC11LHAubWluWS11LHAubWF4WCt1LHAubWF4WSt1LChmdW5jdGlvbihlLHIsbixhKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixhKXtmb3IodmFyIG89MCxzPXQ7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dO2lmKGU8PWwueCYmcjw9bC55JiZuPj1sLngmJmE+PWwueSlyZXR1cm4hMH12YXIgYz1bbmV3IGkoZSxyKSxuZXcgaShlLGEpLG5ldyBpKG4sYSksbmV3IGkobixyKV07aWYodC5sZW5ndGg+Milmb3IodmFyIHU9MCxmPWM7dTxmLmxlbmd0aDt1Kz0xKXtpZihpbyh0LGZbdV0pKXJldHVybiEwfWZvcih2YXIgaD0wO2g8dC5sZW5ndGgtMTtoKyspe2lmKGFvKHRbaF0sdFtoKzFdLGMpKXJldHVybiEwfXJldHVybiExfSh0LmNhbWVyYVF1ZXJ5R2VvbWV0cnksZS11LHItdSxuK3UsYSt1KX0pKSxtPTAsZz1kO208Zy5sZW5ndGg7bSs9MSl7dmFyIHY9Z1ttXTtoLnB1c2godil9aC5zb3J0KHB1KTtmb3IodmFyIHkseD17fSxiPWZ1bmN0aW9uKGkpe3ZhciB1PWhbaV07aWYodSE9PXkpe3k9dTt2YXIgZj1hLmZlYXR1cmVJbmRleEFycmF5LmdldCh1KSxwPW51bGw7YS5sb2FkTWF0Y2hpbmdGZWF0dXJlKHgsZi5idWNrZXRJbmRleCxmLnNvdXJjZUxheWVySW5kZXgsZi5mZWF0dXJlSW5kZXgsbCxvLmxheWVycyxvLmF2YWlsYWJsZUltYWdlcyxlLHIsbiwoZnVuY3Rpb24oZSxyLG4pe3JldHVybiBwfHwocD1ZYShlKSksci5xdWVyeUludGVyc2VjdHNGZWF0dXJlKGMsZSxuLHAsYS56LHQudHJhbnNmb3JtLHMsdC5waXhlbFBvc01hdHJpeCl9KSl9fSxfPTA7XzxoLmxlbmd0aDtfKyspYihfKTtyZXR1cm4geH0sdXUucHJvdG90eXBlLmxvYWRNYXRjaGluZ0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgZj10aGlzLmJ1Y2tldExheWVySURzW2VdO2lmKCFhfHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKGUuaW5kZXhPZih0W3JdKT49MClyZXR1cm4hMDtyZXR1cm4hMX0oYSxmKSl7dmFyIGg9dGhpcy5zb3VyY2VMYXllckNvZGVyLmRlY29kZShyKSxwPXRoaXMudnRMYXllcnNbaF0uZmVhdHVyZShuKTtpZihpLmZpbHRlcihuZXcgcGkodGhpcy50aWxlSUQub3ZlcnNjYWxlZFopLHApKWZvcih2YXIgZD10aGlzLmdldElkKHAsaCksbT0wO208Zi5sZW5ndGg7bSsrKXt2YXIgZz1mW21dO2lmKCEoYSYmYS5pbmRleE9mKGcpPDApKXt2YXIgdj1zW2ddO2lmKHYpe3ZhciB5PXt9O3ZvaWQgMCE9PWQmJmMmJih5PWMuZ2V0U3RhdGUodi5zb3VyY2VMYXllcnx8Il9nZW9qc29uVGlsZUxheWVyIixkKSk7dmFyIHg9bFtnXTt4LnBhaW50PWZ1KHgucGFpbnQsdi5wYWludCxwLHksbykseC5sYXlvdXQ9ZnUoeC5sYXlvdXQsdi5sYXlvdXQscCx5LG8pO3ZhciBiPSF1fHx1KHAsdix5KTtpZihiKXt2YXIgXz1uZXcgc3UocCx0aGlzLnosdGhpcy54LHRoaXMueSxkKTtfLmxheWVyPXg7dmFyIHc9dFtnXTt2b2lkIDA9PT13JiYodz10W2ddPVtdKSx3LnB1c2goe2ZlYXR1cmVJbmRleDpuLGZlYXR1cmU6XyxpbnRlcnNlY3Rpb25aOmJ9KX19fX19fSx1dS5wcm90b3R5cGUubG9va3VwU3ltYm9sRmVhdHVyZXM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD17fTt0aGlzLmxvYWRWVExheWVycygpO2Zvcih2YXIgYz1zbihpKSx1PTAsZj10O3U8Zi5sZW5ndGg7dSs9MSl7dmFyIGg9Zlt1XTt0aGlzLmxvYWRNYXRjaGluZ0ZlYXR1cmUobCxyLG4saCxjLGEsbyxzLGUpfXJldHVybiBsfSx1dS5wcm90b3R5cGUuaGFzTGF5ZXI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmJ1Y2tldExheWVySURzO2U8ci5sZW5ndGg7ZSs9MSlmb3IodmFyIG49MCxpPXJbZV07bjxpLmxlbmd0aDtuKz0xKXtpZih0PT09aVtuXSlyZXR1cm4hMH1yZXR1cm4hMX0sdXUucHJvdG90eXBlLmdldElkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pZDtpZih0aGlzLnByb21vdGVJZCl7dmFyIG49InN0cmluZyI9PXR5cGVvZiB0aGlzLnByb21vdGVJZD90aGlzLnByb21vdGVJZDp0aGlzLnByb21vdGVJZFtlXTsiYm9vbGVhbiI9PXR5cGVvZihyPXQucHJvcGVydGllc1tuXSkmJihyPU51bWJlcihyKSl9cmV0dXJuIHJ9LE5uKCJGZWF0dXJlSW5kZXgiLHV1LHtvbWl0OlsicmF3VGlsZURhdGEiLCJzb3VyY2VMYXllckNvZGVyIl19KTt2YXIgZHU9ZnVuY3Rpb24odCxlKXt0aGlzLnRpbGVJRD10LHRoaXMudWlkPWgoKSx0aGlzLnVzZXM9MCx0aGlzLnRpbGVTaXplPWUsdGhpcy5idWNrZXRzPXt9LHRoaXMuZXhwaXJhdGlvblRpbWU9bnVsbCx0aGlzLnF1ZXJ5UGFkZGluZz0wLHRoaXMuaGFzU3ltYm9sQnVja2V0cz0hMSx0aGlzLmhhc1JUTFRleHQ9ITEsdGhpcy5kZXBlbmRlbmNpZXM9e30sdGhpcy5leHBpcmVkUmVxdWVzdENvdW50PTAsdGhpcy5zdGF0ZT0ibG9hZGluZyJ9O2R1LnByb3RvdHlwZS5yZWdpc3RlckZhZGVEdXJhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10K3RoaXMudGltZUFkZGVkO2U8Ui5ub3coKXx8dGhpcy5mYWRlRW5kVGltZSYmZTx0aGlzLmZhZGVFbmRUaW1lfHwodGhpcy5mYWRlRW5kVGltZT1lKX0sZHUucHJvdG90eXBlLndhc1JlcXVlc3RlZD1mdW5jdGlvbigpe3JldHVybiJlcnJvcmVkIj09PXRoaXMuc3RhdGV8fCJsb2FkZWQiPT09dGhpcy5zdGF0ZXx8InJlbG9hZGluZyI9PT10aGlzLnN0YXRlfSxkdS5wcm90b3R5cGUubG9hZFZlY3RvckRhdGE9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuaGFzRGF0YSgpJiZ0aGlzLnVubG9hZFZlY3RvckRhdGEoKSx0aGlzLnN0YXRlPSJsb2FkZWQiLHQpe2Zvcih2YXIgbiBpbiB0LmZlYXR1cmVJbmRleCYmKHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4PXQuZmVhdHVyZUluZGV4LHQucmF3VGlsZURhdGE/KHRoaXMubGF0ZXN0UmF3VGlsZURhdGE9dC5yYXdUaWxlRGF0YSx0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YT10LnJhd1RpbGVEYXRhKTp0aGlzLmxhdGVzdFJhd1RpbGVEYXRhJiYodGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGE9dGhpcy5sYXRlc3RSYXdUaWxlRGF0YSkpLHRoaXMuY29sbGlzaW9uQm94QXJyYXk9dC5jb2xsaXNpb25Cb3hBcnJheSx0aGlzLmJ1Y2tldHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17fTtpZighZSlyZXR1cm4gcjtmb3IodmFyIG49ZnVuY3Rpb24oKXt2YXIgdD1hW2ldLG49dC5sYXllcklkcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmdldExheWVyKHQpfSkpLmZpbHRlcihCb29sZWFuKTtpZigwIT09bi5sZW5ndGgpe3QubGF5ZXJzPW4sdC5zdGF0ZURlcGVuZGVudExheWVySWRzJiYodC5zdGF0ZURlcGVuZGVudExheWVycz10LnN0YXRlRGVwZW5kZW50TGF5ZXJJZHMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbi5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT09dH0pKVswXX0pKSk7Zm9yKHZhciBvPTAscz1uO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTtyW2wuaWRdPXR9fX0saT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpbigpO3JldHVybiByfSh0LmJ1Y2tldHMsZS5zdHlsZSksdGhpcy5oYXNTeW1ib2xCdWNrZXRzPSExLHRoaXMuYnVja2V0cyl7dmFyIGk9dGhpcy5idWNrZXRzW25dO2lmKGkgaW5zdGFuY2VvZiBNYyl7aWYodGhpcy5oYXNTeW1ib2xCdWNrZXRzPSEwLCFyKWJyZWFrO2kuanVzdFJlbG9hZGVkPSEwfX1pZih0aGlzLmhhc1JUTFRleHQ9ITEsdGhpcy5oYXNTeW1ib2xCdWNrZXRzKWZvcih2YXIgYSBpbiB0aGlzLmJ1Y2tldHMpe3ZhciBvPXRoaXMuYnVja2V0c1thXTtpZihvIGluc3RhbmNlb2YgTWMmJm8uaGFzUlRMVGV4dCl7dGhpcy5oYXNSVExUZXh0PSEwLGhpLmlzTG9hZGluZygpfHxoaS5pc0xvYWRlZCgpfHwiZGVmZXJyZWQiIT09dWkoKXx8ZmkoKTticmVha319Zm9yKHZhciBzIGluIHRoaXMucXVlcnlQYWRkaW5nPTAsdGhpcy5idWNrZXRzKXt2YXIgbD10aGlzLmJ1Y2tldHNbc107dGhpcy5xdWVyeVBhZGRpbmc9TWF0aC5tYXgodGhpcy5xdWVyeVBhZGRpbmcsZS5zdHlsZS5nZXRMYXllcihzKS5xdWVyeVJhZGl1cyhsKSl9dC5pbWFnZUF0bGFzJiYodGhpcy5pbWFnZUF0bGFzPXQuaW1hZ2VBdGxhcyksdC5nbHlwaEF0bGFzSW1hZ2UmJih0aGlzLmdseXBoQXRsYXNJbWFnZT10LmdseXBoQXRsYXNJbWFnZSl9ZWxzZSB0aGlzLmNvbGxpc2lvbkJveEFycmF5PW5ldyBuYX0sZHUucHJvdG90eXBlLnVubG9hZFZlY3RvckRhdGE9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5idWNrZXRzKXRoaXMuYnVja2V0c1t0XS5kZXN0cm95KCk7dGhpcy5idWNrZXRzPXt9LHRoaXMuaW1hZ2VBdGxhc1RleHR1cmUmJnRoaXMuaW1hZ2VBdGxhc1RleHR1cmUuZGVzdHJveSgpLHRoaXMuaW1hZ2VBdGxhcyYmKHRoaXMuaW1hZ2VBdGxhcz1udWxsKSx0aGlzLmdseXBoQXRsYXNUZXh0dXJlJiZ0aGlzLmdseXBoQXRsYXNUZXh0dXJlLmRlc3Ryb3koKSx0aGlzLmxhdGVzdEZlYXR1cmVJbmRleD1udWxsLHRoaXMuc3RhdGU9InVubG9hZGVkIn0sZHUucHJvdG90eXBlLmdldEJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5idWNrZXRzW3QuaWRdfSxkdS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLmJ1Y2tldHMpe3ZhciByPXRoaXMuYnVja2V0c1tlXTtyLnVwbG9hZFBlbmRpbmcoKSYmci51cGxvYWQodCl9dmFyIG49dC5nbDt0aGlzLmltYWdlQXRsYXMmJiF0aGlzLmltYWdlQXRsYXMudXBsb2FkZWQmJih0aGlzLmltYWdlQXRsYXNUZXh0dXJlPW5ldyBWYyh0LHRoaXMuaW1hZ2VBdGxhcy5pbWFnZSxuLlJHQkEpLHRoaXMuaW1hZ2VBdGxhcy51cGxvYWRlZD0hMCksdGhpcy5nbHlwaEF0bGFzSW1hZ2UmJih0aGlzLmdseXBoQXRsYXNUZXh0dXJlPW5ldyBWYyh0LHRoaXMuZ2x5cGhBdGxhc0ltYWdlLG4uQUxQSEEpLHRoaXMuZ2x5cGhBdGxhc0ltYWdlPW51bGwpfSxkdS5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbih0KXt0aGlzLmltYWdlQXRsYXMmJnRoaXMuaW1hZ2VBdGxhcy5wYXRjaFVwZGF0ZWRJbWFnZXModCx0aGlzLmltYWdlQXRsYXNUZXh0dXJlKX0sZHUucHJvdG90eXBlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXtyZXR1cm4gdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgmJnRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhP3RoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnF1ZXJ5KHtxdWVyeUdlb21ldHJ5Om4sY2FtZXJhUXVlcnlHZW9tZXRyeTppLHNjYWxlOmEsdGlsZVNpemU6dGhpcy50aWxlU2l6ZSxwaXhlbFBvc01hdHJpeDpjLHRyYW5zZm9ybTpzLHBhcmFtczpvLHF1ZXJ5UGFkZGluZzp0aGlzLnF1ZXJ5UGFkZGluZypsfSx0LGUscik6e319LGR1LnByb3RvdHlwZS5xdWVyeVNvdXJjZUZlYXR1cmVzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sYXRlc3RGZWF0dXJlSW5kZXg7aWYociYmci5yYXdUaWxlRGF0YSl7dmFyIG49ci5sb2FkVlRMYXllcnMoKSxpPWU/ZS5zb3VyY2VMYXllcjoiIixhPW4uX2dlb2pzb25UaWxlTGF5ZXJ8fG5baV07aWYoYSlmb3IodmFyIG89c24oZSYmZS5maWx0ZXIpLHM9dGhpcy50aWxlSUQuY2Fub25pY2FsLGw9cy56LGM9cy54LHU9cy55LGY9e3o6bCx4OmMseTp1fSxoPTA7aDxhLmxlbmd0aDtoKyspe3ZhciBwPWEuZmVhdHVyZShoKTtpZihvLmZpbHRlcihuZXcgcGkodGhpcy50aWxlSUQub3ZlcnNjYWxlZFopLHApKXt2YXIgZD1yLmdldElkKHAsaSksbT1uZXcgc3UocCxsLGMsdSxkKTttLnRpbGU9Zix0LnB1c2gobSl9fX19LGR1LnByb3RvdHlwZS5oYXNEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuImxvYWRlZCI9PT10aGlzLnN0YXRlfHwicmVsb2FkaW5nIj09PXRoaXMuc3RhdGV8fCJleHBpcmVkIj09PXRoaXMuc3RhdGV9LGR1LnByb3RvdHlwZS5wYXR0ZXJuc0xvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltYWdlQXRsYXMmJiEhT2JqZWN0LmtleXModGhpcy5pbWFnZUF0bGFzLnBhdHRlcm5Qb3NpdGlvbnMpLmxlbmd0aH0sZHUucHJvdG90eXBlLnNldEV4cGlyeURhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5leHBpcmF0aW9uVGltZTtpZih0LmNhY2hlQ29udHJvbCl7dmFyIHI9QSh0LmNhY2hlQ29udHJvbCk7clsibWF4LWFnZSJdJiYodGhpcy5leHBpcmF0aW9uVGltZT1EYXRlLm5vdygpKzFlMypyWyJtYXgtYWdlIl0pfWVsc2UgdC5leHBpcmVzJiYodGhpcy5leHBpcmF0aW9uVGltZT1uZXcgRGF0ZSh0LmV4cGlyZXMpLmdldFRpbWUoKSk7aWYodGhpcy5leHBpcmF0aW9uVGltZSl7dmFyIG49RGF0ZS5ub3coKSxpPSExO2lmKHRoaXMuZXhwaXJhdGlvblRpbWU+bilpPSExO2Vsc2UgaWYoZSlpZih0aGlzLmV4cGlyYXRpb25UaW1lPGUpaT0hMDtlbHNle3ZhciBhPXRoaXMuZXhwaXJhdGlvblRpbWUtZTthP3RoaXMuZXhwaXJhdGlvblRpbWU9bitNYXRoLm1heChhLDNlNCk6aT0hMH1lbHNlIGk9ITA7aT8odGhpcy5leHBpcmVkUmVxdWVzdENvdW50KyssdGhpcy5zdGF0ZT0iZXhwaXJlZCIpOnRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudD0wfX0sZHUucHJvdG90eXBlLmdldEV4cGlyeVRpbWVvdXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmV4cGlyYXRpb25UaW1lKXJldHVybiB0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQ/MWUzKigxPDxNYXRoLm1pbih0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQtMSwzMSkpOk1hdGgubWluKHRoaXMuZXhwaXJhdGlvblRpbWUtKG5ldyBEYXRlKS5nZXRUaW1lKCksTWF0aC5wb3coMiwzMSktMSl9LGR1LnByb3RvdHlwZS5zZXRGZWF0dXJlU3RhdGU9ZnVuY3Rpb24odCxlKXtpZih0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCYmdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGEmJjAhPT1PYmplY3Qua2V5cyh0KS5sZW5ndGgpe3ZhciByPXRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LmxvYWRWVExheWVycygpO2Zvcih2YXIgbiBpbiB0aGlzLmJ1Y2tldHMpaWYoZS5zdHlsZS5oYXNMYXllcihuKSl7dmFyIGk9dGhpcy5idWNrZXRzW25dLGE9aS5sYXllcnNbMF0uc291cmNlTGF5ZXJ8fCJfZ2VvanNvblRpbGVMYXllciIsbz1yW2FdLHM9dFthXTtpZihvJiZzJiYwIT09T2JqZWN0LmtleXMocykubGVuZ3RoKXtpLnVwZGF0ZShzLG8sdGhpcy5pbWFnZUF0bGFzJiZ0aGlzLmltYWdlQXRsYXMucGF0dGVyblBvc2l0aW9uc3x8e30pO3ZhciBsPWUmJmUuc3R5bGUmJmUuc3R5bGUuZ2V0TGF5ZXIobik7bCYmKHRoaXMucXVlcnlQYWRkaW5nPU1hdGgubWF4KHRoaXMucXVlcnlQYWRkaW5nLGwucXVlcnlSYWRpdXMoaSkpKX19fX0sZHUucHJvdG90eXBlLmhvbGRpbmdGb3JGYWRlPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbH0sZHUucHJvdG90eXBlLnN5bWJvbEZhZGVGaW5pc2hlZD1mdW5jdGlvbigpe3JldHVybiF0aGlzLnN5bWJvbEZhZGVIb2xkVW50aWx8fHRoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbDxSLm5vdygpfSxkdS5wcm90b3R5cGUuY2xlYXJGYWRlSG9sZD1mdW5jdGlvbigpe3RoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbD12b2lkIDB9LGR1LnByb3RvdHlwZS5zZXRIb2xkRHVyYXRpb249ZnVuY3Rpb24odCl7dGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsPVIubm93KCkrdH0sZHUucHJvdG90eXBlLnNldERlcGVuZGVuY2llcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7cltpW25dXT0hMH10aGlzLmRlcGVuZGVuY2llc1t0XT1yfSxkdS5wcm90b3R5cGUuaGFzRGVwZW5kZW5jeT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT10aGlzLmRlcGVuZGVuY2llc1tpXTtpZihhKWZvcih2YXIgbz0wLHM9ZTtvPHMubGVuZ3RoO28rPTEpe2lmKGFbc1tvXV0pcmV0dXJuITB9fXJldHVybiExfTt2YXIgbXU9c2VsZi5wZXJmb3JtYW5jZSxndT1mdW5jdGlvbih0KXt0aGlzLl9tYXJrcz17c3RhcnQ6W3QudXJsLCJzdGFydCJdLmpvaW4oIiMiKSxlbmQ6W3QudXJsLCJlbmQiXS5qb2luKCIjIiksbWVhc3VyZTp0LnVybC50b1N0cmluZygpfSxtdS5tYXJrKHRoaXMuX21hcmtzLnN0YXJ0KX07Z3UucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe211Lm1hcmsodGhpcy5fbWFya3MuZW5kKTt2YXIgdD1tdS5nZXRFbnRyaWVzQnlOYW1lKHRoaXMuX21hcmtzLm1lYXN1cmUpO3JldHVybiAwPT09dC5sZW5ndGgmJihtdS5tZWFzdXJlKHRoaXMuX21hcmtzLm1lYXN1cmUsdGhpcy5fbWFya3Muc3RhcnQsdGhpcy5fbWFya3MuZW5kKSx0PW11LmdldEVudHJpZXNCeU5hbWUodGhpcy5fbWFya3MubWVhc3VyZSksbXUuY2xlYXJNYXJrcyh0aGlzLl9tYXJrcy5zdGFydCksbXUuY2xlYXJNYXJrcyh0aGlzLl9tYXJrcy5lbmQpLG11LmNsZWFyTWVhc3VyZXModGhpcy5fbWFya3MubWVhc3VyZSkpLHR9LHQuQWN0b3I9cWMsdC5BbHBoYUltYWdlPVNvLHQuQ2Fub25pY2FsVGlsZUlEPWV1LHQuQ29sbGlzaW9uQm94QXJyYXk9bmEsdC5Db2xvcj10ZSx0LkRFTURhdGE9YXUsdC5EYXRhQ29uc3RhbnRQcm9wZXJ0eT13aSx0LkRpY3Rpb25hcnlDb2Rlcj1vdSx0LkVYVEVOVD04MTkyLHQuRXJyb3JFdmVudD1TdCx0LkV2YWx1YXRpb25QYXJhbWV0ZXJzPXBpLHQuRXZlbnQ9TXQsdC5FdmVudGVkPUV0LHQuRmVhdHVyZUluZGV4PXV1LHQuRmlsbEJ1Y2tldD1ncyx0LkZpbGxFeHRydXNpb25CdWNrZXQ9T3MsdC5JbWFnZUF0bGFzPUxsLHQuSW1hZ2VQb3NpdGlvbj1TbCx0LkxpbmVCdWNrZXQ9cXMsdC5MbmdMYXQ9V2MsdC5MbmdMYXRCb3VuZHM9WWMsdC5NZXJjYXRvckNvb3JkaW5hdGU9dHUsdC5PTkVfRU09MjQsdC5PdmVyc2NhbGVkVGlsZUlEPW51LHQuUG9pbnQ9aSx0LlBvaW50JDE9aSx0LlByb3BlcnRpZXM9U2ksdC5Qcm90b2J1Zj1hbCx0LlJHQkFJbWFnZT1Fbyx0LlJlcXVlc3RNYW5hZ2VyPUgsdC5SZXF1ZXN0UGVyZm9ybWFuY2U9Z3UsdC5SZXNvdXJjZVR5cGU9ZHQsdC5TZWdtZW50VmVjdG9yPXBhLHQuU291cmNlRmVhdHVyZVN0YXRlPWN1LHQuU3RydWN0QXJyYXlMYXlvdXQxdWkyPSRpLHQuU3RydWN0QXJyYXlMYXlvdXQyZjFmMmkxNj1xaSx0LlN0cnVjdEFycmF5TGF5b3V0Mmk0PXppLHQuU3RydWN0QXJyYXlMYXlvdXQzdWk2PVlpLHQuU3RydWN0QXJyYXlMYXlvdXQ0aTg9RGksdC5TeW1ib2xCdWNrZXQ9TWMsdC5UZXh0dXJlPVZjLHQuVGlsZT1kdSx0LlRyYW5zaXRpb25hYmxlPWdpLHQuVW5pZm9ybTFmPVNhLHQuVW5pZm9ybTFpPU1hLHQuVW5pZm9ybTJmPUVhLHQuVW5pZm9ybTNmPUxhLHQuVW5pZm9ybTRmPUNhLHQuVW5pZm9ybUNvbG9yPVBhLHQuVW5pZm9ybU1hdHJpeDRmPU9hLHQuVW53cmFwcGVkVGlsZUlEPXJ1LHQuVmFsaWRhdGlvbkVycm9yPUN0LHQuV3JpdGluZ01vZGU9Q2wsdC5ab29tSGlzdG9yeT1Hbix0LmFkZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHR9LHQuYWRkRHluYW1pY0F0dHJpYnV0ZXM9d2MsdC5hc3luY0FsbD1mdW5jdGlvbih0LGUscil7aWYoIXQubGVuZ3RoKXJldHVybiByKG51bGwsW10pO3ZhciBuPXQubGVuZ3RoLGk9bmV3IEFycmF5KHQubGVuZ3RoKSxhPW51bGw7dC5mb3JFYWNoKChmdW5jdGlvbih0LG8pe2UodCwoZnVuY3Rpb24odCxlKXt0JiYoYT10KSxpW29dPWUsMD09LS1uJiZyKGEsaSl9KSl9KSl9LHQuYmV6aWVyPW8sdC5iaW5kQWxsPW0sdC5icm93c2VyPVIsdC5jYWNoZUVudHJ5UG9zc2libHlBZGRlZD1mdW5jdGlvbih0KXsrK2h0Pm90JiYodC5nZXRBY3RvcigpLnNlbmQoImVuZm9yY2VDYWNoZVNpemVMaW1pdCIsYXQpLGh0PTApfSx0LmNsYW1wPWwsdC5jbGVhclRpbGVDYWNoZT1mdW5jdGlvbih0KXt2YXIgZT1zZWxmLmNhY2hlcy5kZWxldGUoIm1hcGJveC10aWxlcyIpO3QmJmUuY2F0Y2godCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdCgpfSkpfSx0LmNsaXBMaW5lPWVjLHQuY2xvbmU9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGZvKDE2KTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGVbNF09dFs0XSxlWzVdPXRbNV0sZVs2XT10WzZdLGVbN109dFs3XSxlWzhdPXRbOF0sZVs5XT10WzldLGVbMTBdPXRbMTBdLGVbMTFdPXRbMTFdLGVbMTJdPXRbMTJdLGVbMTNdPXRbMTNdLGVbMTRdPXRbMTRdLGVbMTVdPXRbMTVdLGV9LHQuY2xvbmUkMT14LHQuY2xvbmUkMj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgZm8oMyk7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGV9LHQuY29sbGlzaW9uQ2lyY2xlTGF5b3V0PXRsLHQuY29uZmlnPUYsdC5jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZm8oMTYpO3JldHVybiBmbyE9RmxvYXQzMkFycmF5JiYodFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wKSx0WzBdPTEsdFs1XT0xLHRbMTBdPTEsdFsxNV09MSx0fSx0LmNyZWF0ZSQxPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGZvKDkpO3JldHVybiBmbyE9RmxvYXQzMkFycmF5JiYodFsxXT0wLHRbMl09MCx0WzNdPTAsdFs1XT0wLHRbNl09MCx0WzddPTApLHRbMF09MSx0WzRdPTEsdFs4XT0xLHR9LHQuY3JlYXRlJDI9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZm8oNCk7cmV0dXJuIGZvIT1GbG9hdDMyQXJyYXkmJih0WzFdPTAsdFsyXT0wKSx0WzBdPTEsdFszXT0xLHR9LHQuY3JlYXRlQ29tbW9uanNNb2R1bGU9ZSx0LmNyZWF0ZUV4cHJlc3Npb249V3IsdC5jcmVhdGVMYXlvdXQ9SWksdC5jcmVhdGVTdHlsZUxheWVyPWZ1bmN0aW9uKHQpe3JldHVybiJjdXN0b20iPT09dC50eXBlP25ldyBEYyh0KTpuZXcgUmNbdC50eXBlXSh0KX0sdC5jcm9zcz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdO3JldHVybiB0WzBdPWkqbC1hKnMsdFsxXT1hKm8tbipsLHRbMl09bipzLWkqbyx0fSx0LmRlZXBFcXVhbD1mdW5jdGlvbiB0KGUscil7aWYoQXJyYXkuaXNBcnJheShlKSl7aWYoIUFycmF5LmlzQXJyYXkocil8fGUubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoIXQoZVtuXSxyW25dKSlyZXR1cm4hMTtyZXR1cm4hMH1pZigib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lJiZudWxsIT09cil7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiExO2lmKE9iamVjdC5rZXlzKGUpLmxlbmd0aCE9PU9iamVjdC5rZXlzKHIpLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGkgaW4gZSlpZighdChlW2ldLHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiBlPT09cn0sdC5kb3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19LHQuZG90JDE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl0rdFszXSplWzNdfSx0LmVhc2U9cyx0LmVtaXRWYWxpZGF0aW9uRXJyb3JzPU9uLHQuZW5kc1dpdGg9Zyx0LmVuZm9yY2VDYWNoZVNpemVMaW1pdD1mdW5jdGlvbih0KXtzdCgpLFEmJlEudGhlbigoZnVuY3Rpb24oZSl7ZS5rZXlzKCkudGhlbigoZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aC10O24rKyllLmRlbGV0ZShyW25dKX0pKX0pKX0sdC5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlPVlsLHQuZXZhbHVhdGVTaXplRm9yWm9vbT1XbCx0LmV2YWx1YXRlVmFyaWFibGVPZmZzZXQ9ZGMsdC5ldmVudGVkPWNpLHQuZXh0ZW5kPXUsdC5mZWF0dXJlRmlsdGVyPXNuLHQuZmlsdGVyT2JqZWN0PXksdC5mcm9tUm90YXRpb249ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNpbihlKSxuPU1hdGguY29zKGUpO3JldHVybiB0WzBdPW4sdFsxXT1yLHRbMl09MCx0WzNdPS1yLHRbNF09bix0WzVdPTAsdFs2XT0wLHRbN109MCx0WzhdPTEsdH0sdC5nZXRBbmNob3JBbGlnbm1lbnQ9VWwsdC5nZXRBbmNob3JKdXN0aWZpY2F0aW9uPW1jLHQuZ2V0QXJyYXlCdWZmZXI9eHQsdC5nZXRJbWFnZT1UdCx0LmdldEpTT049ZnVuY3Rpb24odCxlKXtyZXR1cm4geXQodSh0LHt0eXBlOiJqc29uIn0pLGUpfSx0LmdldFJUTFRleHRQbHVnaW5TdGF0dXM9dWksdC5nZXRSZWZlcnJlcj1ndCx0LmdldFZpZGVvPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmlkZW8iKTtpLm11dGVkPSEwLGkub25sb2Fkc3RhcnQ9ZnVuY3Rpb24oKXtlKG51bGwsaSl9O2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNvdXJjZSIpO3I9dFthXSxuPXZvaWQgMCwobj1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSkuaHJlZj1yLChuLnByb3RvY29sIT09c2VsZi5kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbHx8bi5ob3N0IT09c2VsZi5kb2N1bWVudC5sb2NhdGlvbi5ob3N0KSYmKGkuY3Jvc3NPcmlnaW49IkFub255bW91cyIpLG8uc3JjPXRbYV0saS5hcHBlbmRDaGlsZChvKX1yZXR1cm57Y2FuY2VsOmZ1bmN0aW9uKCl7fX19LHQuaWRlbnRpdHk9aG8sdC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLGM9ZVs3XSx1PWVbOF0sZj1lWzldLGg9ZVsxMF0scD1lWzExXSxkPWVbMTJdLG09ZVsxM10sZz1lWzE0XSx2PWVbMTVdLHk9cipzLW4qbyx4PXIqbC1pKm8sYj1yKmMtYSpvLF89bipsLWkqcyx3PW4qYy1hKnMsVD1pKmMtYSpsLGs9dSptLWYqZCxBPXUqZy1oKmQsTT11KnYtcCpkLFM9ZipnLWgqbSxFPWYqdi1wKm0sTD1oKnYtcCpnLEM9eSpMLXgqRStiKlMrXypNLXcqQStUKms7cmV0dXJuIEM/KEM9MS9DLHRbMF09KHMqTC1sKkUrYypTKSpDLHRbMV09KGkqRS1uKkwtYSpTKSpDLHRbMl09KG0qVC1nKncrdipfKSpDLHRbM109KGgqdy1mKlQtcCpfKSpDLHRbNF09KGwqTS1vKkwtYypBKSpDLHRbNV09KHIqTC1pKk0rYSpBKSpDLHRbNl09KGcqYi1kKlQtdip4KSpDLHRbN109KHUqVC1oKmIrcCp4KSpDLHRbOF09KG8qRS1zKk0rYyprKSpDLHRbOV09KG4qTS1yKkUtYSprKSpDLHRbMTBdPShkKnctbSpiK3YqeSkqQyx0WzExXT0oZipiLXUqdy1wKnkpKkMsdFsxMl09KHMqQS1vKlMtbCprKSpDLHRbMTNdPShyKlMtbipBK2kqaykqQyx0WzE0XT0obSp4LWQqXy1nKnkpKkMsdFsxNV09KHUqXy1mKngraCp5KSpDLHQpOm51bGx9LHQuaXNDaGFyPVluLHQuaXNNYXBib3hVUkw9cSx0LmtleXNEaWZmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107Zm9yKHZhciBuIGluIHQpbiBpbiBlfHxyLnB1c2gobik7cmV0dXJuIHJ9LHQubWFrZVJlcXVlc3Q9eXQsdC5tYXBPYmplY3Q9dix0Lm1lcmNhdG9yWGZyb21Mbmc9SmMsdC5tZXJjYXRvcllmcm9tTGF0PUtjLHQubWVyY2F0b3JaZnJvbUFsdGl0dWRlPVFjLHQubXVsPW1vLHQubXVsdGlwbHk9cG8sdC5tdnQ9THMsdC5ub3JtYWxpemU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1yKnIrbipuK2kqaTtyZXR1cm4gYT4wJiYoYT0xL01hdGguc3FydChhKSksdFswXT1lWzBdKmEsdFsxXT1lWzFdKmEsdFsyXT1lWzJdKmEsdH0sdC5udW1iZXI9cWUsdC5vZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ9cHQsdC5vcnRobz1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz0xLyhlLXIpLGw9MS8obi1pKSxjPTEvKGEtbyk7cmV0dXJuIHRbMF09LTIqcyx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0tMipsLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0yKmMsdFsxMV09MCx0WzEyXT0oZStyKSpzLHRbMTNdPShpK24pKmwsdFsxNF09KG8rYSkqYyx0WzE1XT0xLHR9LHQucGFyc2VHbHlwaFBCRj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGFsKHQpLnJlYWRGaWVsZHMoVGwsW10pfSx0LnBiZj1hbCx0LnBlcmZvcm1TeW1ib2xMYXlvdXQ9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dC5jcmVhdGVBcnJheXMoKTt2YXIgcz01MTIqdC5vdmVyc2NhbGluZzt0LnRpbGVQaXhlbFJhdGlvPTgxOTIvcyx0LmNvbXBhcmVUZXh0PXt9LHQuaWNvbnNOZWVkTGluZWFyPSExO3ZhciBsPXQubGF5ZXJzWzBdLmxheW91dCxjPXQubGF5ZXJzWzBdLl91bmV2YWx1YXRlZExheW91dC5fdmFsdWVzLHU9e307aWYoImNvbXBvc2l0ZSI9PT10LnRleHRTaXplRGF0YS5raW5kKXt2YXIgZj10LnRleHRTaXplRGF0YSxoPWYubWluWm9vbSxwPWYubWF4Wm9vbTt1LmNvbXBvc2l0ZVRleHRTaXplcz1bY1sidGV4dC1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgcGkoaCksbyksY1sidGV4dC1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgcGkocCksbyldfWlmKCJjb21wb3NpdGUiPT09dC5pY29uU2l6ZURhdGEua2luZCl7dmFyIGQ9dC5pY29uU2l6ZURhdGEsbT1kLm1pblpvb20sZz1kLm1heFpvb207dS5jb21wb3NpdGVJY29uU2l6ZXM9W2NbImljb24tc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHBpKG0pLG8pLGNbImljb24tc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHBpKGcpLG8pXX11LmxheW91dFRleHRTaXplPWNbInRleHQtc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHBpKHQuem9vbSsxKSxvKSx1LmxheW91dEljb25TaXplPWNbImljb24tc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHBpKHQuem9vbSsxKSxvKSx1LnRleHRNYXhTaXplPWNbInRleHQtc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHBpKDE4KSk7Zm9yKHZhciB2PTI0KmwuZ2V0KCJ0ZXh0LWxpbmUtaGVpZ2h0IikseT0ibWFwIj09PWwuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpJiYicG9pbnQiIT09bC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSx4PWwuZ2V0KCJ0ZXh0LWtlZXAtdXByaWdodCIpLGI9bC5nZXQoInRleHQtc2l6ZSIpLHc9ZnVuY3Rpb24oKXt2YXIgYT1rW1RdLHM9bC5nZXQoInRleHQtZm9udCIpLmV2YWx1YXRlKGEse30sbykuam9pbigiLCIpLGM9Yi5ldmFsdWF0ZShhLHt9LG8pLGY9dS5sYXlvdXRUZXh0U2l6ZS5ldmFsdWF0ZShhLHt9LG8pLGg9dS5sYXlvdXRJY29uU2l6ZS5ldmFsdWF0ZShhLHt9LG8pLHA9e2hvcml6b250YWw6e30sdmVydGljYWw6dm9pZCAwfSxkPWEudGV4dCxtPVswLDBdO2lmKGQpe3ZhciBnPWQudG9TdHJpbmcoKSx3PTI0KmwuZ2V0KCJ0ZXh0LWxldHRlci1zcGFjaW5nIikuZXZhbHVhdGUoYSx7fSxvKSxBPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpe2lmKCFYbihyW2VdLmNoYXJDb2RlQXQoMCkpKXJldHVybiExfXJldHVybiEwfShnKT93OjAsTT1sLmdldCgidGV4dC1hbmNob3IiKS5ldmFsdWF0ZShhLHt9LG8pLFM9bC5nZXQoInRleHQtdmFyaWFibGUtYW5jaG9yIik7aWYoIVMpe3ZhciBFPWwuZ2V0KCJ0ZXh0LXJhZGlhbC1vZmZzZXQiKS5ldmFsdWF0ZShhLHt9LG8pO209RT9kYyhNLFsyNCpFLHBjXSk6bC5nZXQoInRleHQtb2Zmc2V0IikuZXZhbHVhdGUoYSx7fSxvKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiAyNCp0fSkpfXZhciBMPXk/ImNlbnRlciI6bC5nZXQoInRleHQtanVzdGlmeSIpLmV2YWx1YXRlKGEse30sbyksQz1sLmdldCgic3ltYm9sLXBsYWNlbWVudCIpLFA9InBvaW50Ij09PUM/MjQqbC5nZXQoInRleHQtbWF4LXdpZHRoIikuZXZhbHVhdGUoYSx7fSxvKTowLEk9ZnVuY3Rpb24oKXt0LmFsbG93VmVydGljYWxQbGFjZW1lbnQmJlduKGcpJiYocC52ZXJ0aWNhbD1PbChkLGUscixpLHMsUCx2LE0sImxlZnQiLEEsbSxDbC52ZXJ0aWNhbCwhMCxDLGYsYykpfTtpZigheSYmUyl7Zm9yKHZhciBPPSJhdXRvIj09PUw/Uy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBtYyh0KX0pKTpbTF0sej0hMSxEPTA7RDxPLmxlbmd0aDtEKyspe3ZhciBSPU9bRF07aWYoIXAuaG9yaXpvbnRhbFtSXSlpZih6KXAuaG9yaXpvbnRhbFtSXT1wLmhvcml6b250YWxbMF07ZWxzZXt2YXIgRj1PbChkLGUscixpLHMsUCx2LCJjZW50ZXIiLFIsQSxtLENsLmhvcml6b250YWwsITEsQyxmLGMpO0YmJihwLmhvcml6b250YWxbUl09Rix6PTE9PT1GLnBvc2l0aW9uZWRMaW5lcy5sZW5ndGgpfX1JKCl9ZWxzZXsiYXV0byI9PT1MJiYoTD1tYyhNKSk7dmFyIEI9T2woZCxlLHIsaSxzLFAsdixNLEwsQSxtLENsLmhvcml6b250YWwsITEsQyxmLGMpO0ImJihwLmhvcml6b250YWxbTF09QiksSSgpLFduKGcpJiZ5JiZ4JiYocC52ZXJ0aWNhbD1PbChkLGUscixpLHMsUCx2LE0sTCxBLG0sQ2wudmVydGljYWwsITEsQyxmLGMpKX19dmFyIE49dm9pZCAwLGo9ITE7aWYoYS5pY29uJiZhLmljb24ubmFtZSl7dmFyIFU9blthLmljb24ubmFtZV07VSYmKE49ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVVsKHIpLGk9bi5ob3Jpem9udGFsQWxpZ24sYT1uLnZlcnRpY2FsQWxpZ24sbz1lWzBdLHM9ZVsxXSxsPW8tdC5kaXNwbGF5U2l6ZVswXSppLGM9bCt0LmRpc3BsYXlTaXplWzBdLHU9cy10LmRpc3BsYXlTaXplWzFdKmE7cmV0dXJue2ltYWdlOnQsdG9wOnUsYm90dG9tOnUrdC5kaXNwbGF5U2l6ZVsxXSxsZWZ0OmwscmlnaHQ6Y319KGlbYS5pY29uLm5hbWVdLGwuZ2V0KCJpY29uLW9mZnNldCIpLmV2YWx1YXRlKGEse30sbyksbC5nZXQoImljb24tYW5jaG9yIikuZXZhbHVhdGUoYSx7fSxvKSksaj1VLnNkZix2b2lkIDA9PT10LnNkZkljb25zP3Quc2RmSWNvbnM9VS5zZGY6dC5zZGZJY29ucyE9PVUuc2RmJiZfKCJTdHlsZSBzaGVldCB3YXJuaW5nOiBDYW5ub3QgbWl4IFNERiBhbmQgbm9uLVNERiBpY29ucyBpbiBvbmUgYnVmZmVyIiksKFUucGl4ZWxSYXRpbyE9PXQucGl4ZWxSYXRpb3x8MCE9PWwuZ2V0KCJpY29uLXJvdGF0ZSIpLmNvbnN0YW50T3IoMSkpJiYodC5pY29uc05lZWRMaW5lYXI9ITApKX12YXIgVj12YyhwLmhvcml6b250YWwpfHxwLnZlcnRpY2FsO3QuaWNvbnNJblRleHQ9ISFWJiZWLmljb25zSW5UZXh0LChWfHxOKSYmZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgZj1hLnRleHRNYXhTaXplLmV2YWx1YXRlKGUse30pO3ZvaWQgMD09PWYmJihmPW8pO3ZhciBoLHA9dC5sYXllcnNbMF0ubGF5b3V0LGQ9cC5nZXQoImljb24tb2Zmc2V0IikuZXZhbHVhdGUoZSx7fSx1KSxtPXZjKHIuaG9yaXpvbnRhbCksZz1vLzI0LHY9dC50aWxlUGl4ZWxSYXRpbypnLHk9dC50aWxlUGl4ZWxSYXRpbypmLzI0LHg9dC50aWxlUGl4ZWxSYXRpbypzLGI9dC50aWxlUGl4ZWxSYXRpbypwLmdldCgic3ltYm9sLXNwYWNpbmciKSx3PXAuZ2V0KCJ0ZXh0LXBhZGRpbmciKSp0LnRpbGVQaXhlbFJhdGlvLFQ9cC5nZXQoImljb24tcGFkZGluZyIpKnQudGlsZVBpeGVsUmF0aW8saz1wLmdldCgidGV4dC1tYXgtYW5nbGUiKS8xODAqTWF0aC5QSSxBPSJtYXAiPT09cC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IikmJiJwb2ludCIhPT1wLmdldCgic3ltYm9sLXBsYWNlbWVudCIpLE09Im1hcCI9PT1wLmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmInBvaW50IiE9PXAuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IiksUz1wLmdldCgic3ltYm9sLXBsYWNlbWVudCIpLEU9Yi8yLEw9cC5nZXQoImljb24tdGV4dC1maXQiKTtuJiYibm9uZSIhPT1MJiYodC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiZyLnZlcnRpY2FsJiYoaD1IbChuLHIudmVydGljYWwsTCxwLmdldCgiaWNvbi10ZXh0LWZpdC1wYWRkaW5nIiksZCxnKSksbSYmKG49SGwobixtLEwscC5nZXQoImljb24tdGV4dC1maXQtcGFkZGluZyIpLGQsZykpKTt2YXIgQz1mdW5jdGlvbihzLGYpe2YueDwwfHxmLng+PTgxOTJ8fGYueTwwfHxmLnk+PTgxOTJ8fGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2LHkseCxiLHcsVCxrLEEpe3ZhciBNLFMsRSxMLEMsUD10LmFkZFRvTGluZVZlcnRleEFycmF5KGUsciksST0wLE89MCx6PTAsRD0wLFI9LTEsRj0tMSxCPXt9LE49eWEoIiIpLGo9MCxVPTA7dm9pZCAwPT09cy5fdW5ldmFsdWF0ZWRMYXlvdXQuZ2V0VmFsdWUoInRleHQtcmFkaWFsLW9mZnNldCIpPyhNPXMubGF5b3V0LmdldCgidGV4dC1vZmZzZXQiKS5ldmFsdWF0ZShiLHt9LGspLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIDI0KnR9KSksaj1NWzBdLFU9TVsxXSk6KGo9MjQqcy5sYXlvdXQuZ2V0KCJ0ZXh0LXJhZGlhbC1vZmZzZXQiKS5ldmFsdWF0ZShiLHt9LGspLFU9cGMpO2lmKHQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmbi52ZXJ0aWNhbCl7dmFyIFY9cy5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0ZSIpLmV2YWx1YXRlKGIse30saykrOTAsSD1uLnZlcnRpY2FsO0w9bmV3IHNjKGwsZSxjLHUsZixILGgscCxkLFYpLG8mJihDPW5ldyBzYyhsLGUsYyx1LGYsbyxnLHYsZCxWKSl9aWYoaSl7dmFyIHE9cy5sYXlvdXQuZ2V0KCJpY29uLXJvdGF0ZSIpLmV2YWx1YXRlKGIse30pLEc9Im5vbmUiIT09cy5sYXlvdXQuZ2V0KCJpY29uLXRleHQtZml0IiksWT1yYyhpLHEsVCxHKSxXPW8/cmMobyxxLFQsRyk6dm9pZCAwO0U9bmV3IHNjKGwsZSxjLHUsZixpLGcsdiwhMSxxKSxJPTQqWS5sZW5ndGg7dmFyIFg9dC5pY29uU2l6ZURhdGEsWj1udWxsOyJzb3VyY2UiPT09WC5raW5kPyhaPVsxMjgqcy5sYXlvdXQuZ2V0KCJpY29uLXNpemUiKS5ldmFsdWF0ZShiLHt9KV0pWzBdPjMyNjQwJiZfKHQubGF5ZXJJZHNbMF0rJzogVmFsdWUgZm9yICJpY29uLXNpemUiIGlzID49IDI1NS4gUmVkdWNlIHlvdXIgImljb24tc2l6ZSIuJyk6ImNvbXBvc2l0ZSI9PT1YLmtpbmQmJigoWj1bMTI4KncuY29tcG9zaXRlSWNvblNpemVzWzBdLmV2YWx1YXRlKGIse30sayksMTI4KncuY29tcG9zaXRlSWNvblNpemVzWzFdLmV2YWx1YXRlKGIse30sayldKVswXT4zMjY0MHx8WlsxXT4zMjY0MCkmJl8odC5sYXllcklkc1swXSsnOiBWYWx1ZSBmb3IgImljb24tc2l6ZSIgaXMgPj0gMjU1LiBSZWR1Y2UgeW91ciAiaWNvbi1zaXplIi4nKSx0LmFkZFN5bWJvbHModC5pY29uLFksWix4LHksYiwhMSxlLFAubGluZVN0YXJ0SW5kZXgsUC5saW5lTGVuZ3RoLC0xLGspLFI9dC5pY29uLnBsYWNlZFN5bWJvbEFycmF5Lmxlbmd0aC0xLFcmJihPPTQqVy5sZW5ndGgsdC5hZGRTeW1ib2xzKHQuaWNvbixXLFoseCx5LGIsQ2wudmVydGljYWwsZSxQLmxpbmVTdGFydEluZGV4LFAubGluZUxlbmd0aCwtMSxrKSxGPXQuaWNvbi5wbGFjZWRTeW1ib2xBcnJheS5sZW5ndGgtMSl9Zm9yKHZhciBKIGluIG4uaG9yaXpvbnRhbCl7dmFyIEs9bi5ob3Jpem9udGFsW0pdO2lmKCFTKXtOPXlhKEsudGV4dCk7dmFyIFE9cy5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0ZSIpLmV2YWx1YXRlKGIse30sayk7Uz1uZXcgc2MobCxlLGMsdSxmLEssaCxwLGQsUSl9dmFyICQ9MT09PUsucG9zaXRpb25lZExpbmVzLmxlbmd0aDtpZih6Kz1nYyh0LGUsSyxhLHMsZCxiLG0sUCxuLnZlcnRpY2FsP0NsLmhvcml6b250YWw6Q2wuaG9yaXpvbnRhbE9ubHksJD9PYmplY3Qua2V5cyhuLmhvcml6b250YWwpOltKXSxCLFIsdyxrKSwkKWJyZWFrfW4udmVydGljYWwmJihEKz1nYyh0LGUsbi52ZXJ0aWNhbCxhLHMsZCxiLG0sUCxDbC52ZXJ0aWNhbCxbInZlcnRpY2FsIl0sQixGLHcsaykpO3ZhciB0dD1TP1MuYm94U3RhcnRJbmRleDp0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxldD1TP1MuYm94RW5kSW5kZXg6dC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgscnQ9TD9MLmJveFN0YXJ0SW5kZXg6dC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgsbnQ9TD9MLmJveEVuZEluZGV4OnQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLGl0PUU/RS5ib3hTdGFydEluZGV4OnQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLGF0PUU/RS5ib3hFbmRJbmRleDp0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxvdD1DP0MuYm94U3RhcnRJbmRleDp0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxzdD1DP0MuYm94RW5kSW5kZXg6dC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgsbHQ9LTEsY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmdC5jaXJjbGVEaWFtZXRlcj9NYXRoLm1heCh0LmNpcmNsZURpYW1ldGVyLGUpOmV9O2x0PWN0KFMsbHQpLGx0PWN0KEwsbHQpLGx0PWN0KEUsbHQpO3ZhciB1dD0obHQ9Y3QoQyxsdCkpPi0xPzE6MDt1dCYmKGx0Kj1BLzI0KTt0LmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoPj1NYy5NQVhfR0xZUEhTJiZfKCJUb28gbWFueSBnbHlwaHMgYmVpbmcgcmVuZGVyZWQgaW4gYSB0aWxlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzI5MDciKTt2b2lkIDAhPT1iLnNvcnRLZXkmJnQuYWRkVG9Tb3J0S2V5UmFuZ2VzKHQuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aCxiLnNvcnRLZXkpO3Quc3ltYm9sSW5zdGFuY2VzLmVtcGxhY2VCYWNrKGUueCxlLnksQi5yaWdodD49MD9CLnJpZ2h0Oi0xLEIuY2VudGVyPj0wP0IuY2VudGVyOi0xLEIubGVmdD49MD9CLmxlZnQ6LTEsQi52ZXJ0aWNhbHx8LTEsUixGLE4sdHQsZXQscnQsbnQsaXQsYXQsb3Qsc3QsYyx6LEQsSSxPLHV0LDAsaCxqLFUsbHQpfSh0LGYscyxyLG4saSxoLHQubGF5ZXJzWzBdLHQuY29sbGlzaW9uQm94QXJyYXksZS5pbmRleCxlLnNvdXJjZUxheWVySW5kZXgsdC5pbmRleCx2LHcsQSxsLHgsVCxNLGQsZSxhLGMsdSxvKX07aWYoImxpbmUiPT09Uylmb3IodmFyIFA9MCxJPWVjKGUuZ2VvbWV0cnksMCwwLDgxOTIsODE5Mik7UDxJLmxlbmd0aDtQKz0xKWZvcih2YXIgTz1JW1BdLHo9dGMoTyxiLGssci52ZXJ0aWNhbHx8bSxuLDI0LHksdC5vdmVyc2NhbGluZyw4MTkyKSxEPTAsUj16O0Q8Ui5sZW5ndGg7RCs9MSl7dmFyIEY9UltEXSxCPW07QiYmeWModCxCLnRleHQsRSxGKXx8QyhPLEYpfWVsc2UgaWYoImxpbmUtY2VudGVyIj09PVMpZm9yKHZhciBOPTAsaj1lLmdlb21ldHJ5O048ai5sZW5ndGg7Tis9MSl7dmFyIFU9altOXTtpZihVLmxlbmd0aD4xKXt2YXIgVj0kbChVLGssci52ZXJ0aWNhbHx8bSxuLDI0LHkpO1YmJkMoVSxWKX19ZWxzZSBpZigiUG9seWdvbiI9PT1lLnR5cGUpZm9yKHZhciBIPTAscT1ocyhlLmdlb21ldHJ5LDApO0g8cS5sZW5ndGg7SCs9MSl7dmFyIEc9cVtIXSxZPXVjKEcsMTYpO0MoR1swXSxuZXcgcWwoWS54LFkueSwwKSl9ZWxzZSBpZigiTGluZVN0cmluZyI9PT1lLnR5cGUpZm9yKHZhciBXPTAsWD1lLmdlb21ldHJ5O1c8WC5sZW5ndGg7Vys9MSl7dmFyIFo9WFtXXTtDKFosbmV3IHFsKFpbMF0ueCxaWzBdLnksMCkpfWVsc2UgaWYoIlBvaW50Ij09PWUudHlwZSlmb3IodmFyIEo9MCxLPWUuZ2VvbWV0cnk7SjxLLmxlbmd0aDtKKz0xKWZvcih2YXIgUT1LW0pdLCQ9MCx0dD1ROyQ8dHQubGVuZ3RoOyQrPTEpe3ZhciBldD10dFskXTtDKFtldF0sbmV3IHFsKGV0LngsZXQueSwwKSl9fSh0LGEscCxOLG4sdSxmLGgsbSxqLG8pfSxUPTAsaz10LmZlYXR1cmVzO1Q8ay5sZW5ndGg7VCs9MSl3KCk7YSYmdC5nZW5lcmF0ZUNvbGxpc2lvbkRlYnVnQnVmZmVycygpfSx0LnBlcnNwZWN0aXZlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbz0xL01hdGgudGFuKGUvMik7cmV0dXJuIHRbMF09by9yLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPW8sdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE1XT0wLG51bGwhPWkmJmkhPT0xLzA/KGE9MS8obi1pKSx0WzEwXT0oaStuKSphLHRbMTRdPTIqaSpuKmEpOih0WzEwXT0tMSx0WzE0XT0tMipuKSx0fSx0LnBpY2s9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2kgaW4gdCYmKHJbaV09dFtpXSl9cmV0dXJuIHJ9LHQucGx1Z2luPWhpLHQucG9seWdvbkludGVyc2VjdHNQb2x5Z29uPVphLHQucG9zdE1hcExvYWRFdmVudD1pdCx0LnBvc3RUdXJuc3RpbGVFdmVudD1ydCx0LnBvdHBhY2s9TWwsdC5yZWZQcm9wZXJ0aWVzPVsidHlwZSIsInNvdXJjZSIsInNvdXJjZS1sYXllciIsIm1pbnpvb20iLCJtYXh6b29tIiwiZmlsdGVyIiwibGF5b3V0Il0sdC5yZWdpc3Rlcj1Obix0LnJlZ2lzdGVyRm9yUGx1Z2luU3RhdGVDaGFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQoe3BsdWdpblN0YXR1czphaSxwbHVnaW5VUkw6b2l9KSxjaS5vbigicGx1Z2luU3RhdGVDaGFuZ2UiLHQpLHR9LHQucm90YXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9TWF0aC5zaW4ociksbD1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1uKmwrYSpzLHRbMV09aSpsK28qcyx0WzJdPW4qLXMrYSpsLHRbM109aSotcytvKmwsdH0sdC5yb3RhdGVYPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVs0XSxvPWVbNV0scz1lWzZdLGw9ZVs3XSxjPWVbOF0sdT1lWzldLGY9ZVsxMF0saD1lWzExXTtyZXR1cm4gZSE9PXQmJih0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pLHRbNF09YSppK2Mqbix0WzVdPW8qaSt1Km4sdFs2XT1zKmkrZipuLHRbN109bCppK2gqbix0WzhdPWMqaS1hKm4sdFs5XT11KmktbypuLHRbMTBdPWYqaS1zKm4sdFsxMV09aCppLWwqbix0fSx0LnJvdGF0ZVo9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLGM9ZVs0XSx1PWVbNV0sZj1lWzZdLGg9ZVs3XTtyZXR1cm4gZSE9PXQmJih0WzhdPWVbOF0sdFs5XT1lWzldLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTFdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKSx0WzBdPWEqaStjKm4sdFsxXT1vKmkrdSpuLHRbMl09cyppK2Yqbix0WzNdPWwqaStoKm4sdFs0XT1jKmktYSpuLHRbNV09dSppLW8qbix0WzZdPWYqaS1zKm4sdFs3XT1oKmktbCpuLHR9LHQuc2NhbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbMF0saT1yWzFdLGE9clsyXTtyZXR1cm4gdFswXT1lWzBdKm4sdFsxXT1lWzFdKm4sdFsyXT1lWzJdKm4sdFszXT1lWzNdKm4sdFs0XT1lWzRdKmksdFs1XT1lWzVdKmksdFs2XT1lWzZdKmksdFs3XT1lWzddKmksdFs4XT1lWzhdKmEsdFs5XT1lWzldKmEsdFsxMF09ZVsxMF0qYSx0WzExXT1lWzExXSphLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdLHR9LHQuc2NhbGUkMT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyLHRbMV09ZVsxXSpyLHRbMl09ZVsyXSpyLHRbM109ZVszXSpyLHR9LHQuc2NhbGUkMj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyLHRbMV09ZVsxXSpyLHRbMl09ZVsyXSpyLHR9LHQuc2V0Q2FjaGVMaW1pdHM9ZnVuY3Rpb24odCxlKXthdD10LG90PWV9LHQuc2V0UlRMVGV4dFBsdWdpbj1mdW5jdGlvbih0LGUscil7aWYodm9pZCAwPT09ciYmKHI9ITEpLGFpPT09dGl8fGFpPT09ZWl8fGFpPT09cmkpdGhyb3cgbmV3IEVycm9yKCJzZXRSVExUZXh0UGx1Z2luIGNhbm5vdCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIik7b2k9Ui5yZXNvbHZlVVJMKHQpLGFpPXRpLGlpPWUsbGkoKSxyfHxmaSgpfSx0LnNwaGVyaWNhbFRvQ2FydGVzaWFuPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXTtyZXR1cm4gcis9OTAscio9TWF0aC5QSS8xODAsbio9TWF0aC5QSS8xODAse3g6ZSpNYXRoLmNvcyhyKSpNYXRoLnNpbihuKSx5OmUqTWF0aC5zaW4ocikqTWF0aC5zaW4obiksejplKk1hdGguY29zKG4pfX0sdC5zcXJMZW49Ym8sdC5zdHlsZVNwZWM9THQsdC5zdWI9eW8sdC5zeW1ib2xTaXplPVhsLHQudHJhbnNmb3JtTWF0Mz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdO3JldHVybiB0WzBdPW4qclswXStpKnJbM10rYSpyWzZdLHRbMV09bipyWzFdK2kqcls0XSthKnJbN10sdFsyXT1uKnJbMl0raSpyWzVdK2Eqcls4XSx0fSx0LnRyYW5zZm9ybU1hdDQ9eG8sdC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHMsbCxjLHUsZixoLHAsZCxtPXJbMF0sZz1yWzFdLHY9clsyXTtyZXR1cm4gZT09PXQ/KHRbMTJdPWVbMF0qbStlWzRdKmcrZVs4XSp2K2VbMTJdLHRbMTNdPWVbMV0qbStlWzVdKmcrZVs5XSp2K2VbMTNdLHRbMTRdPWVbMl0qbStlWzZdKmcrZVsxMF0qditlWzE0XSx0WzE1XT1lWzNdKm0rZVs3XSpnK2VbMTFdKnYrZVsxNV0pOihuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGY9ZVs4XSxoPWVbOV0scD1lWzEwXSxkPWVbMTFdLHRbMF09bix0WzFdPWksdFsyXT1hLHRbM109byx0WzRdPXMsdFs1XT1sLHRbNl09Yyx0WzddPXUsdFs4XT1mLHRbOV09aCx0WzEwXT1wLHRbMTFdPWQsdFsxMl09biptK3MqZytmKnYrZVsxMl0sdFsxM109aSptK2wqZytoKnYrZVsxM10sdFsxNF09YSptK2MqZytwKnYrZVsxNF0sdFsxNV09byptK3UqZytkKnYrZVsxNV0pLHR9LHQudHJpZ2dlclBsdWdpbkNvbXBsZXRpb25FdmVudD1zaSx0LnVuaXF1ZUlkPWgsdC52YWxpZGF0ZUN1c3RvbVN0eWxlTGF5ZXI9ZnVuY3Rpb24odCl7dmFyIGU9W10scj10LmlkO3JldHVybiB2b2lkIDA9PT1yJiZlLnB1c2goe21lc3NhZ2U6ImxheWVycy4iK3IrJzogbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAiaWQiJ30pLHZvaWQgMD09PXQucmVuZGVyJiZlLnB1c2goe21lc3NhZ2U6ImxheWVycy4iK3IrJzogbWlzc2luZyByZXF1aXJlZCBtZXRob2QgInJlbmRlciInfSksdC5yZW5kZXJpbmdNb2RlJiYiMmQiIT09dC5yZW5kZXJpbmdNb2RlJiYiM2QiIT09dC5yZW5kZXJpbmdNb2RlJiZlLnB1c2goe21lc3NhZ2U6ImxheWVycy4iK3IrJzogcHJvcGVydHkgInJlbmRlcmluZ01vZGUiIG11c3QgYmUgZWl0aGVyICIyZCIgb3IgIjNkIid9KSxlfSx0LnZhbGlkYXRlTGlnaHQ9Q24sdC52YWxpZGF0ZVN0eWxlPUxuLHQudmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX0sdC52ZWN0b3JUaWxlPUxzLHQudmVyc2lvbj0iMS4xMC4xIix0Lndhcm5PbmNlPV8sdC53ZWJwU3VwcG9ydGVkPUIsdC53aW5kb3c9c2VsZix0LndyYXA9Y30pKSxuKDAsKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dHlwZW9mIHQ7aWYoIm51bWJlciI9PT1yfHwiYm9vbGVhbiI9PT1yfHwic3RyaW5nIj09PXJ8fG51bGw9PXQpcmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpO2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgbj0iWyIsaT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpe24rPWUoYVtpXSkrIiwifXJldHVybiBuKyJdIn1mb3IodmFyIG89T2JqZWN0LmtleXModCkuc29ydCgpLHM9InsiLGw9MDtsPG8ubGVuZ3RoO2wrKylzKz1KU09OLnN0cmluZ2lmeShvW2xdKSsiOiIrZSh0W29bbF1dKSsiLCI7cmV0dXJuIHMrIn0ifWZ1bmN0aW9uIHIocil7Zm9yKHZhciBuPSIiLGk9MCxhPXQucmVmUHJvcGVydGllcztpPGEubGVuZ3RoO2krPTEpe24rPSIvIitlKHJbYVtpXV0pfXJldHVybiBufXZhciBuPWZ1bmN0aW9uKHQpe3RoaXMua2V5Q2FjaGU9e30sdCYmdGhpcy5yZXBsYWNlKHQpfTtuLnByb3RvdHlwZS5yZXBsYWNlPWZ1bmN0aW9uKHQpe3RoaXMuX2xheWVyQ29uZmlncz17fSx0aGlzLl9sYXllcnM9e30sdGhpcy51cGRhdGUodCxbXSl9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLG4pe2Zvcih2YXIgaT10aGlzLGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdO3RoaXMuX2xheWVyQ29uZmlnc1tzLmlkXT1zO3ZhciBsPXRoaXMuX2xheWVyc1tzLmlkXT10LmNyZWF0ZVN0eWxlTGF5ZXIocyk7bC5fZmVhdHVyZUZpbHRlcj10LmZlYXR1cmVGaWx0ZXIobC5maWx0ZXIpLHRoaXMua2V5Q2FjaGVbcy5pZF0mJmRlbGV0ZSB0aGlzLmtleUNhY2hlW3MuaWRdfWZvcih2YXIgYz0wLHU9bjtjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY107ZGVsZXRlIHRoaXMua2V5Q2FjaGVbZl0sZGVsZXRlIHRoaXMuX2xheWVyQ29uZmlnc1tmXSxkZWxldGUgdGhpcy5fbGF5ZXJzW2ZdfXRoaXMuZmFtaWxpZXNCeVNvdXJjZT17fTtmb3IodmFyIGg9MCxwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXt9LGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9ZSYmZVt0W2ldLmlkXXx8cih0W2ldKTtlJiYoZVt0W2ldLmlkXT1hKTt2YXIgbz1uW2FdO298fChvPW5bYV09W10pLG8ucHVzaCh0W2ldKX12YXIgcz1bXTtmb3IodmFyIGwgaW4gbilzLnB1c2gobltsXSk7cmV0dXJuIHN9KHQudmFsdWVzKHRoaXMuX2xheWVyQ29uZmlncyksdGhpcy5rZXlDYWNoZSk7aDxwLmxlbmd0aDtoKz0xKXt2YXIgZD1wW2hdLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGkuX2xheWVyc1t0LmlkXX0pKSxtPWRbMF07aWYoIm5vbmUiIT09bS52aXNpYmlsaXR5KXt2YXIgZz1tLnNvdXJjZXx8IiIsdj10aGlzLmZhbWlsaWVzQnlTb3VyY2VbZ107dnx8KHY9dGhpcy5mYW1pbGllc0J5U291cmNlW2ddPXt9KTt2YXIgeT1tLnNvdXJjZUxheWVyfHwiX2dlb2pzb25UaWxlTGF5ZXIiLHg9dlt5XTt4fHwoeD12W3ldPVtdKSx4LnB1c2goZCl9fX07dmFyIGk9ZnVuY3Rpb24oZSl7dmFyIHI9e30sbj1bXTtmb3IodmFyIGkgaW4gZSl7dmFyIGE9ZVtpXSxvPXJbaV09e307Zm9yKHZhciBzIGluIGEpe3ZhciBsPWFbK3NdO2lmKGwmJjAhPT1sLmJpdG1hcC53aWR0aCYmMCE9PWwuYml0bWFwLmhlaWdodCl7dmFyIGM9e3g6MCx5OjAsdzpsLmJpdG1hcC53aWR0aCsyLGg6bC5iaXRtYXAuaGVpZ2h0KzJ9O24ucHVzaChjKSxvW3NdPXtyZWN0OmMsbWV0cmljczpsLm1ldHJpY3N9fX19dmFyIHU9dC5wb3RwYWNrKG4pLGY9dS53LGg9dS5oLHA9bmV3IHQuQWxwaGFJbWFnZSh7d2lkdGg6Znx8MSxoZWlnaHQ6aHx8MX0pO2Zvcih2YXIgZCBpbiBlKXt2YXIgbT1lW2RdO2Zvcih2YXIgZyBpbiBtKXt2YXIgdj1tWytnXTtpZih2JiYwIT09di5iaXRtYXAud2lkdGgmJjAhPT12LmJpdG1hcC5oZWlnaHQpe3ZhciB5PXJbZF1bZ10ucmVjdDt0LkFscGhhSW1hZ2UuY29weSh2LmJpdG1hcCxwLHt4OjAseTowfSx7eDp5LngrMSx5OnkueSsxfSx2LmJpdG1hcCl9fX10aGlzLmltYWdlPXAsdGhpcy5wb3NpdGlvbnM9cn07dC5yZWdpc3RlcigiR2x5cGhBdGxhcyIsaSk7dmFyIGE9ZnVuY3Rpb24oZSl7dGhpcy50aWxlSUQ9bmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLnRpbGVJRC5vdmVyc2NhbGVkWixlLnRpbGVJRC53cmFwLGUudGlsZUlELmNhbm9uaWNhbC56LGUudGlsZUlELmNhbm9uaWNhbC54LGUudGlsZUlELmNhbm9uaWNhbC55KSx0aGlzLnVpZD1lLnVpZCx0aGlzLnpvb209ZS56b29tLHRoaXMucGl4ZWxSYXRpbz1lLnBpeGVsUmF0aW8sdGhpcy50aWxlU2l6ZT1lLnRpbGVTaXplLHRoaXMuc291cmNlPWUuc291cmNlLHRoaXMub3ZlcnNjYWxpbmc9dGhpcy50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCksdGhpcy5zaG93Q29sbGlzaW9uQm94ZXM9ZS5zaG93Q29sbGlzaW9uQm94ZXMsdGhpcy5jb2xsZWN0UmVzb3VyY2VUaW1pbmc9ISFlLmNvbGxlY3RSZXNvdXJjZVRpbWluZyx0aGlzLnJldHVybkRlcGVuZGVuY2llcz0hIWUucmV0dXJuRGVwZW5kZW5jaWVzLHRoaXMucHJvbW90ZUlkPWUucHJvbW90ZUlkfTtmdW5jdGlvbiBvKGUscixuKXtmb3IodmFyIGk9bmV3IHQuRXZhbHVhdGlvblBhcmFtZXRlcnMociksYT0wLG89ZTthPG8ubGVuZ3RoO2ErPTEpe29bYV0ucmVjYWxjdWxhdGUoaSxuKX19ZnVuY3Rpb24gcyhlLHIpe3ZhciBuPXQuZ2V0QXJyYXlCdWZmZXIoZS5yZXF1ZXN0LChmdW5jdGlvbihlLG4saSxhKXtlP3IoZSk6biYmcihudWxsLHt2ZWN0b3JUaWxlOm5ldyB0LnZlY3RvclRpbGUuVmVjdG9yVGlsZShuZXcgdC5wYmYobikpLHJhd0RhdGE6bixjYWNoZUNvbnRyb2w6aSxleHBpcmVzOmF9KX0pKTtyZXR1cm4gZnVuY3Rpb24oKXtuLmNhbmNlbCgpLHIoKX19YS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSxyLG4sYSxzKXt2YXIgbD10aGlzO3RoaXMuc3RhdHVzPSJwYXJzaW5nIix0aGlzLmRhdGE9ZSx0aGlzLmNvbGxpc2lvbkJveEFycmF5PW5ldyB0LkNvbGxpc2lvbkJveEFycmF5O3ZhciBjPW5ldyB0LkRpY3Rpb25hcnlDb2RlcihPYmplY3Qua2V5cyhlLmxheWVycykuc29ydCgpKSx1PW5ldyB0LkZlYXR1cmVJbmRleCh0aGlzLnRpbGVJRCx0aGlzLnByb21vdGVJZCk7dS5idWNrZXRMYXllcklEcz1bXTt2YXIgZixoLHAsZCxtPXt9LGc9e2ZlYXR1cmVJbmRleDp1LGljb25EZXBlbmRlbmNpZXM6e30scGF0dGVybkRlcGVuZGVuY2llczp7fSxnbHlwaERlcGVuZGVuY2llczp7fSxhdmFpbGFibGVJbWFnZXM6bn0sdj1yLmZhbWlsaWVzQnlTb3VyY2VbdGhpcy5zb3VyY2VdO2Zvcih2YXIgeSBpbiB2KXt2YXIgeD1lLmxheWVyc1t5XTtpZih4KXsxPT09eC52ZXJzaW9uJiZ0Lndhcm5PbmNlKCdWZWN0b3IgdGlsZSBzb3VyY2UgIicrdGhpcy5zb3VyY2UrJyIgbGF5ZXIgIicreSsnIiBkb2VzIG5vdCB1c2UgdmVjdG9yIHRpbGUgc3BlYyB2MiBhbmQgdGhlcmVmb3JlIG1heSBoYXZlIHNvbWUgcmVuZGVyaW5nIGVycm9ycy4nKTtmb3IodmFyIGI9Yy5lbmNvZGUoeSksXz1bXSx3PTA7dzx4Lmxlbmd0aDt3Kyspe3ZhciBUPXguZmVhdHVyZSh3KSxrPXUuZ2V0SWQoVCx5KTtfLnB1c2goe2ZlYXR1cmU6VCxpZDprLGluZGV4Oncsc291cmNlTGF5ZXJJbmRleDpifSl9Zm9yKHZhciBBPTAsTT12W3ldO0E8TS5sZW5ndGg7QSs9MSl7dmFyIFM9TVtBXSxFPVNbMF07aWYoIShFLm1pbnpvb20mJnRoaXMuem9vbTxNYXRoLmZsb29yKEUubWluem9vbSkpKWlmKCEoRS5tYXh6b29tJiZ0aGlzLnpvb20+PUUubWF4em9vbSkpaWYoIm5vbmUiIT09RS52aXNpYmlsaXR5KW8oUyx0aGlzLnpvb20sbiksKG1bRS5pZF09RS5jcmVhdGVCdWNrZXQoe2luZGV4OnUuYnVja2V0TGF5ZXJJRHMubGVuZ3RoLGxheWVyczpTLHpvb206dGhpcy56b29tLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvLG92ZXJzY2FsaW5nOnRoaXMub3ZlcnNjYWxpbmcsY29sbGlzaW9uQm94QXJyYXk6dGhpcy5jb2xsaXNpb25Cb3hBcnJheSxzb3VyY2VMYXllckluZGV4OmIsc291cmNlSUQ6dGhpcy5zb3VyY2V9KSkucG9wdWxhdGUoXyxnLHRoaXMudGlsZUlELmNhbm9uaWNhbCksdS5idWNrZXRMYXllcklEcy5wdXNoKFMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSl9fX12YXIgTD10Lm1hcE9iamVjdChnLmdseXBoRGVwZW5kZW5jaWVzLChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKE51bWJlcil9KSk7T2JqZWN0LmtleXMoTCkubGVuZ3RoP2Euc2VuZCgiZ2V0R2x5cGhzIix7dWlkOnRoaXMudWlkLHN0YWNrczpMfSwoZnVuY3Rpb24odCxlKXtmfHwoZj10LGg9ZSxJLmNhbGwobCkpfSkpOmg9e307dmFyIEM9T2JqZWN0LmtleXMoZy5pY29uRGVwZW5kZW5jaWVzKTtDLmxlbmd0aD9hLnNlbmQoImdldEltYWdlcyIse2ljb25zOkMsc291cmNlOnRoaXMuc291cmNlLHRpbGVJRDp0aGlzLnRpbGVJRCx0eXBlOiJpY29ucyJ9LChmdW5jdGlvbih0LGUpe2Z8fChmPXQscD1lLEkuY2FsbChsKSl9KSk6cD17fTt2YXIgUD1PYmplY3Qua2V5cyhnLnBhdHRlcm5EZXBlbmRlbmNpZXMpO2Z1bmN0aW9uIEkoKXtpZihmKXJldHVybiBzKGYpO2lmKGgmJnAmJmQpe3ZhciBlPW5ldyBpKGgpLHI9bmV3IHQuSW1hZ2VBdGxhcyhwLGQpO2Zvcih2YXIgYSBpbiBtKXt2YXIgbD1tW2FdO2wgaW5zdGFuY2VvZiB0LlN5bWJvbEJ1Y2tldD8obyhsLmxheWVycyx0aGlzLnpvb20sbiksdC5wZXJmb3JtU3ltYm9sTGF5b3V0KGwsaCxlLnBvc2l0aW9ucyxwLHIuaWNvblBvc2l0aW9ucyx0aGlzLnNob3dDb2xsaXNpb25Cb3hlcyx0aGlzLnRpbGVJRC5jYW5vbmljYWwpKTpsLmhhc1BhdHRlcm4mJihsIGluc3RhbmNlb2YgdC5MaW5lQnVja2V0fHxsIGluc3RhbmNlb2YgdC5GaWxsQnVja2V0fHxsIGluc3RhbmNlb2YgdC5GaWxsRXh0cnVzaW9uQnVja2V0KSYmKG8obC5sYXllcnMsdGhpcy56b29tLG4pLGwuYWRkRmVhdHVyZXMoZyx0aGlzLnRpbGVJRC5jYW5vbmljYWwsci5wYXR0ZXJuUG9zaXRpb25zKSl9dGhpcy5zdGF0dXM9ImRvbmUiLHMobnVsbCx7YnVja2V0czp0LnZhbHVlcyhtKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiF0LmlzRW1wdHkoKX0pKSxmZWF0dXJlSW5kZXg6dSxjb2xsaXNpb25Cb3hBcnJheTp0aGlzLmNvbGxpc2lvbkJveEFycmF5LGdseXBoQXRsYXNJbWFnZTplLmltYWdlLGltYWdlQXRsYXM6cixnbHlwaE1hcDp0aGlzLnJldHVybkRlcGVuZGVuY2llcz9oOm51bGwsaWNvbk1hcDp0aGlzLnJldHVybkRlcGVuZGVuY2llcz9wOm51bGwsZ2x5cGhQb3NpdGlvbnM6dGhpcy5yZXR1cm5EZXBlbmRlbmNpZXM/ZS5wb3NpdGlvbnM6bnVsbH0pfX1QLmxlbmd0aD9hLnNlbmQoImdldEltYWdlcyIse2ljb25zOlAsc291cmNlOnRoaXMuc291cmNlLHRpbGVJRDp0aGlzLnRpbGVJRCx0eXBlOiJwYXR0ZXJucyJ9LChmdW5jdGlvbih0LGUpe2Z8fChmPXQsZD1lLEkuY2FsbChsKSl9KSk6ZD17fSxJLmNhbGwodGhpcyl9O3ZhciBsPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuYWN0b3I9dCx0aGlzLmxheWVySW5kZXg9ZSx0aGlzLmF2YWlsYWJsZUltYWdlcz1yLHRoaXMubG9hZFZlY3RvckRhdGE9bnx8cyx0aGlzLmxvYWRpbmc9e30sdGhpcy5sb2FkZWQ9e319O2wucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPWUudWlkO3RoaXMubG9hZGluZ3x8KHRoaXMubG9hZGluZz17fSk7dmFyIG89ISEoZSYmZS5yZXF1ZXN0JiZlLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nKSYmbmV3IHQuUmVxdWVzdFBlcmZvcm1hbmNlKGUucmVxdWVzdCkscz10aGlzLmxvYWRpbmdbaV09bmV3IGEoZSk7cy5hYm9ydD10aGlzLmxvYWRWZWN0b3JEYXRhKGUsKGZ1bmN0aW9uKGUsYSl7aWYoZGVsZXRlIG4ubG9hZGluZ1tpXSxlfHwhYSlyZXR1cm4gcy5zdGF0dXM9ImRvbmUiLG4ubG9hZGVkW2ldPXMscihlKTt2YXIgbD1hLnJhd0RhdGEsYz17fTthLmV4cGlyZXMmJihjLmV4cGlyZXM9YS5leHBpcmVzKSxhLmNhY2hlQ29udHJvbCYmKGMuY2FjaGVDb250cm9sPWEuY2FjaGVDb250cm9sKTt2YXIgdT17fTtpZihvKXt2YXIgZj1vLmZpbmlzaCgpO2YmJih1LnJlc291cmNlVGltaW5nPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZikpKX1zLnZlY3RvclRpbGU9YS52ZWN0b3JUaWxlLHMucGFyc2UoYS52ZWN0b3JUaWxlLG4ubGF5ZXJJbmRleCxuLmF2YWlsYWJsZUltYWdlcyxuLmFjdG9yLChmdW5jdGlvbihlLG4pe2lmKGV8fCFuKXJldHVybiByKGUpO3IobnVsbCx0LmV4dGVuZCh7cmF3VGlsZURhdGE6bC5zbGljZSgwKX0sbixjLHUpKX0pKSxuLmxvYWRlZD1uLmxvYWRlZHx8e30sbi5sb2FkZWRbaV09c30pKX0sbC5wcm90b3R5cGUucmVsb2FkVGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj10aGlzLmxvYWRlZCxpPXQudWlkLGE9dGhpcztpZihuJiZuW2ldKXt2YXIgbz1uW2ldO28uc2hvd0NvbGxpc2lvbkJveGVzPXQuc2hvd0NvbGxpc2lvbkJveGVzO3ZhciBzPWZ1bmN0aW9uKHQsbil7dmFyIGk9by5yZWxvYWRDYWxsYmFjaztpJiYoZGVsZXRlIG8ucmVsb2FkQ2FsbGJhY2ssby5wYXJzZShvLnZlY3RvclRpbGUsYS5sYXllckluZGV4LHIuYXZhaWxhYmxlSW1hZ2VzLGEuYWN0b3IsaSkpLGUodCxuKX07InBhcnNpbmciPT09by5zdGF0dXM/by5yZWxvYWRDYWxsYmFjaz1zOiJkb25lIj09PW8uc3RhdHVzJiYoby52ZWN0b3JUaWxlP28ucGFyc2Uoby52ZWN0b3JUaWxlLHRoaXMubGF5ZXJJbmRleCx0aGlzLmF2YWlsYWJsZUltYWdlcyx0aGlzLmFjdG9yLHMpOnMoKSl9fSxsLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxvYWRpbmcsbj10LnVpZDtyJiZyW25dJiZyW25dLmFib3J0JiYocltuXS5hYm9ydCgpLGRlbGV0ZSByW25dKSxlKCl9LGwucHJvdG90eXBlLnJlbW92ZVRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxvYWRlZCxuPXQudWlkO3ImJnJbbl0mJmRlbGV0ZSByW25dLGUoKX07dmFyIGM9dC53aW5kb3cuSW1hZ2VCaXRtYXAsdT1mdW5jdGlvbigpe3RoaXMubG9hZGVkPXt9fTt1LnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPWUudWlkLGk9ZS5lbmNvZGluZyxhPWUucmF3SW1hZ2VEYXRhLG89YyYmYSBpbnN0YW5jZW9mIGM/dGhpcy5nZXRJbWFnZURhdGEoYSk6YSxzPW5ldyB0LkRFTURhdGEobixvLGkpO3RoaXMubG9hZGVkPXRoaXMubG9hZGVkfHx7fSx0aGlzLmxvYWRlZFtuXT1zLHIobnVsbCxzKX0sdS5wcm90b3R5cGUuZ2V0SW1hZ2VEYXRhPWZ1bmN0aW9uKGUpe3RoaXMub2Zmc2NyZWVuQ2FudmFzJiZ0aGlzLm9mZnNjcmVlbkNhbnZhc0NvbnRleHR8fCh0aGlzLm9mZnNjcmVlbkNhbnZhcz1uZXcgT2Zmc2NyZWVuQ2FudmFzKGUud2lkdGgsZS5oZWlnaHQpLHRoaXMub2Zmc2NyZWVuQ2FudmFzQ29udGV4dD10aGlzLm9mZnNjcmVlbkNhbnZhcy5nZXRDb250ZXh0KCIyZCIpKSx0aGlzLm9mZnNjcmVlbkNhbnZhcy53aWR0aD1lLndpZHRoLHRoaXMub2Zmc2NyZWVuQ2FudmFzLmhlaWdodD1lLmhlaWdodCx0aGlzLm9mZnNjcmVlbkNhbnZhc0NvbnRleHQuZHJhd0ltYWdlKGUsMCwwLGUud2lkdGgsZS5oZWlnaHQpO3ZhciByPXRoaXMub2Zmc2NyZWVuQ2FudmFzQ29udGV4dC5nZXRJbWFnZURhdGEoLTEsLTEsZS53aWR0aCsyLGUuaGVpZ2h0KzIpO3JldHVybiB0aGlzLm9mZnNjcmVlbkNhbnZhc0NvbnRleHQuY2xlYXJSZWN0KDAsMCx0aGlzLm9mZnNjcmVlbkNhbnZhcy53aWR0aCx0aGlzLm9mZnNjcmVlbkNhbnZhcy5oZWlnaHQpLG5ldyB0LlJHQkFJbWFnZSh7d2lkdGg6ci53aWR0aCxoZWlnaHQ6ci5oZWlnaHR9LHIuZGF0YSl9LHUucHJvdG90eXBlLnJlbW92ZVRpbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sb2FkZWQscj10LnVpZDtlJiZlW3JdJiZkZWxldGUgZVtyXX07dmFyIGY9ZnVuY3Rpb24gdChlLHIpe3ZhciBuLGk9ZSYmZS50eXBlO2lmKCJGZWF0dXJlQ29sbGVjdGlvbiI9PT1pKWZvcihuPTA7bjxlLmZlYXR1cmVzLmxlbmd0aDtuKyspdChlLmZlYXR1cmVzW25dLHIpO2Vsc2UgaWYoIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1pKWZvcihuPTA7bjxlLmdlb21ldHJpZXMubGVuZ3RoO24rKyl0KGUuZ2VvbWV0cmllc1tuXSxyKTtlbHNlIGlmKCJGZWF0dXJlIj09PWkpdChlLmdlb21ldHJ5LHIpO2Vsc2UgaWYoIlBvbHlnb24iPT09aSloKGUuY29vcmRpbmF0ZXMscik7ZWxzZSBpZigiTXVsdGlQb2x5Z29uIj09PWkpZm9yKG49MDtuPGUuY29vcmRpbmF0ZXMubGVuZ3RoO24rKyloKGUuY29vcmRpbmF0ZXNbbl0scik7cmV0dXJuIGV9O2Z1bmN0aW9uIGgodCxlKXtpZigwIT09dC5sZW5ndGgpe3AodFswXSxlKTtmb3IodmFyIHI9MTtyPHQubGVuZ3RoO3IrKylwKHRbcl0sIWUpfX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9dC5sZW5ndGgsYT1pLTE7bjxpO2E9bisrKXIrPSh0W25dWzBdLXRbYV1bMF0pKih0W2FdWzFdK3Rbbl1bMV0pO3I+PTAhPSEhZSYmdC5yZXZlcnNlKCl9dmFyIGQ9dC52ZWN0b3JUaWxlLlZlY3RvclRpbGVGZWF0dXJlLnByb3RvdHlwZS50b0dlb0pTT04sbT1mdW5jdGlvbihlKXt0aGlzLl9mZWF0dXJlPWUsdGhpcy5leHRlbnQ9dC5FWFRFTlQsdGhpcy50eXBlPWUudHlwZSx0aGlzLnByb3BlcnRpZXM9ZS50YWdzLCJpZCJpbiBlJiYhaXNOYU4oZS5pZCkmJih0aGlzLmlkPXBhcnNlSW50KGUuaWQsMTApKX07bS5wcm90b3R5cGUubG9hZEdlb21ldHJ5PWZ1bmN0aW9uKCl7aWYoMT09PXRoaXMuX2ZlYXR1cmUudHlwZSl7Zm9yKHZhciBlPVtdLHI9MCxuPXRoaXMuX2ZlYXR1cmUuZ2VvbWV0cnk7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2UucHVzaChbbmV3IHQuUG9pbnQkMShpWzBdLGlbMV0pXSl9cmV0dXJuIGV9Zm9yKHZhciBhPVtdLG89MCxzPXRoaXMuX2ZlYXR1cmUuZ2VvbWV0cnk7bzxzLmxlbmd0aDtvKz0xKXtmb3IodmFyIGw9W10sYz0wLHU9c1tvXTtjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY107bC5wdXNoKG5ldyB0LlBvaW50JDEoZlswXSxmWzFdKSl9YS5wdXNoKGwpfXJldHVybiBhfSxtLnByb3RvdHlwZS50b0dlb0pTT049ZnVuY3Rpb24odCxlLHIpe3JldHVybiBkLmNhbGwodGhpcyx0LGUscil9O3ZhciBnPWZ1bmN0aW9uKGUpe3RoaXMubGF5ZXJzPXtfZ2VvanNvblRpbGVMYXllcjp0aGlzfSx0aGlzLm5hbWU9Il9nZW9qc29uVGlsZUxheWVyIix0aGlzLmV4dGVudD10LkVYVEVOVCx0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLl9mZWF0dXJlcz1lfTtnLnByb3RvdHlwZS5mZWF0dXJlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbSh0aGlzLl9mZWF0dXJlc1t0XSl9O3ZhciB2PXQudmVjdG9yVGlsZS5WZWN0b3JUaWxlRmVhdHVyZSx5PXg7ZnVuY3Rpb24geCh0LGUpe3RoaXMub3B0aW9ucz1lfHx7fSx0aGlzLmZlYXR1cmVzPXQsdGhpcy5sZW5ndGg9dC5sZW5ndGh9ZnVuY3Rpb24gYih0LGUpe3RoaXMuaWQ9Im51bWJlciI9PXR5cGVvZiB0LmlkP3QuaWQ6dm9pZCAwLHRoaXMudHlwZT10LnR5cGUsdGhpcy5yYXdHZW9tZXRyeT0xPT09dC50eXBlP1t0Lmdlb21ldHJ5XTp0Lmdlb21ldHJ5LHRoaXMucHJvcGVydGllcz10LnRhZ3MsdGhpcy5leHRlbnQ9ZXx8NDA5Nn14LnByb3RvdHlwZS5mZWF0dXJlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYih0aGlzLmZlYXR1cmVzW3RdLHRoaXMub3B0aW9ucy5leHRlbnQpfSxiLnByb3RvdHlwZS5sb2FkR2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJhd0dlb21ldHJ5O3RoaXMuZ2VvbWV0cnk9W107Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe2Zvcih2YXIgbj1lW3JdLGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKWkucHVzaChuZXcgdC5Qb2ludCQxKG5bYV1bMF0sblthXVsxXSkpO3RoaXMuZ2VvbWV0cnkucHVzaChpKX1yZXR1cm4gdGhpcy5nZW9tZXRyeX0sYi5wcm90b3R5cGUuYmJveD1mdW5jdGlvbigpe3RoaXMuZ2VvbWV0cnl8fHRoaXMubG9hZEdlb21ldHJ5KCk7Zm9yKHZhciB0PXRoaXMuZ2VvbWV0cnksZT0xLzAscj0tMS8wLG49MS8wLGk9LTEvMCxhPTA7YTx0Lmxlbmd0aDthKyspZm9yKHZhciBvPXRbYV0scz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2U9TWF0aC5taW4oZSxsLngpLHI9TWF0aC5tYXgocixsLngpLG49TWF0aC5taW4obixsLnkpLGk9TWF0aC5tYXgoaSxsLnkpfXJldHVybltlLG4scixpXX0sYi5wcm90b3R5cGUudG9HZW9KU09OPXYucHJvdG90eXBlLnRvR2VvSlNPTjt2YXIgXz1BLHc9QSxUPWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgcj17fTtmb3IodmFyIG4gaW4gdClyW25dPW5ldyB5KHRbbl0uZmVhdHVyZXMsZSkscltuXS5uYW1lPW4scltuXS52ZXJzaW9uPWUudmVyc2lvbixyW25dLmV4dGVudD1lLmV4dGVudDtyZXR1cm4gQSh7bGF5ZXJzOnJ9KX0saz15O2Z1bmN0aW9uIEEoZSl7dmFyIHI9bmV3IHQucGJmO3JldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0LmxheWVycyllLndyaXRlTWVzc2FnZSgzLE0sdC5sYXllcnNbcl0pfShlLHIpLHIuZmluaXNoKCl9ZnVuY3Rpb24gTSh0LGUpe3ZhciByO2Uud3JpdGVWYXJpbnRGaWVsZCgxNSx0LnZlcnNpb258fDEpLGUud3JpdGVTdHJpbmdGaWVsZCgxLHQubmFtZXx8IiIpLGUud3JpdGVWYXJpbnRGaWVsZCg1LHQuZXh0ZW50fHw0MDk2KTt2YXIgbj17a2V5czpbXSx2YWx1ZXM6W10sa2V5Y2FjaGU6e30sdmFsdWVjYWNoZTp7fX07Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyluLmZlYXR1cmU9dC5mZWF0dXJlKHIpLGUud3JpdGVNZXNzYWdlKDIsUyxuKTt2YXIgaT1uLmtleXM7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyllLndyaXRlU3RyaW5nRmllbGQoMyxpW3JdKTt2YXIgYT1uLnZhbHVlcztmb3Iocj0wO3I8YS5sZW5ndGg7cisrKWUud3JpdGVNZXNzYWdlKDQsSSxhW3JdKX1mdW5jdGlvbiBTKHQsZSl7dmFyIHI9dC5mZWF0dXJlO3ZvaWQgMCE9PXIuaWQmJmUud3JpdGVWYXJpbnRGaWVsZCgxLHIuaWQpLGUud3JpdGVNZXNzYWdlKDIsRSx0KSxlLndyaXRlVmFyaW50RmllbGQoMyxyLnR5cGUpLGUud3JpdGVNZXNzYWdlKDQsUCxyKX1mdW5jdGlvbiBFKHQsZSl7dmFyIHI9dC5mZWF0dXJlLG49dC5rZXlzLGk9dC52YWx1ZXMsYT10LmtleWNhY2hlLG89dC52YWx1ZWNhY2hlO2Zvcih2YXIgcyBpbiByLnByb3BlcnRpZXMpe3ZhciBsPWFbc107dm9pZCAwPT09bCYmKG4ucHVzaChzKSxsPW4ubGVuZ3RoLTEsYVtzXT1sKSxlLndyaXRlVmFyaW50KGwpO3ZhciBjPXIucHJvcGVydGllc1tzXSx1PXR5cGVvZiBjOyJzdHJpbmciIT09dSYmImJvb2xlYW4iIT09dSYmIm51bWJlciIhPT11JiYoYz1KU09OLnN0cmluZ2lmeShjKSk7dmFyIGY9dSsiOiIrYyxoPW9bZl07dm9pZCAwPT09aCYmKGkucHVzaChjKSxoPWkubGVuZ3RoLTEsb1tmXT1oKSxlLndyaXRlVmFyaW50KGgpfX1mdW5jdGlvbiBMKHQsZSl7cmV0dXJuKGU8PDMpKyg3JnQpfWZ1bmN0aW9uIEModCl7cmV0dXJuIHQ8PDFedD4+MzF9ZnVuY3Rpb24gUCh0LGUpe2Zvcih2YXIgcj10LmxvYWRHZW9tZXRyeSgpLG49dC50eXBlLGk9MCxhPTAsbz1yLmxlbmd0aCxzPTA7czxvO3MrKyl7dmFyIGw9cltzXSxjPTE7MT09PW4mJihjPWwubGVuZ3RoKSxlLndyaXRlVmFyaW50KEwoMSxjKSk7Zm9yKHZhciB1PTM9PT1uP2wubGVuZ3RoLTE6bC5sZW5ndGgsZj0wO2Y8dTtmKyspezE9PT1mJiYxIT09biYmZS53cml0ZVZhcmludChMKDIsdS0xKSk7dmFyIGg9bFtmXS54LWkscD1sW2ZdLnktYTtlLndyaXRlVmFyaW50KEMoaCkpLGUud3JpdGVWYXJpbnQoQyhwKSksaSs9aCxhKz1wfTM9PT1uJiZlLndyaXRlVmFyaW50KEwoNywxKSl9fWZ1bmN0aW9uIEkodCxlKXt2YXIgcj10eXBlb2YgdDsic3RyaW5nIj09PXI/ZS53cml0ZVN0cmluZ0ZpZWxkKDEsdCk6ImJvb2xlYW4iPT09cj9lLndyaXRlQm9vbGVhbkZpZWxkKDcsdCk6Im51bWJlciI9PT1yJiYodCUxIT0wP2Uud3JpdGVEb3VibGVGaWVsZCgzLHQpOnQ8MD9lLndyaXRlU1ZhcmludEZpZWxkKDYsdCk6ZS53cml0ZVZhcmludEZpZWxkKDUsdCkpfWZ1bmN0aW9uIE8odCxlLHIsbixpLGEpe2lmKCEoaS1uPD1yKSl7dmFyIG89bitpPj4xOyFmdW5jdGlvbiB0KGUscixuLGksYSxvKXtmb3IoO2E+aTspe2lmKGEtaT42MDApe3ZhciBzPWEtaSsxLGw9bi1pKzEsYz1NYXRoLmxvZyhzKSx1PS41Kk1hdGguZXhwKDIqYy8zKSxmPS41Kk1hdGguc3FydChjKnUqKHMtdSkvcykqKGwtcy8yPDA/LTE6MSksaD1NYXRoLm1heChpLE1hdGguZmxvb3Iobi1sKnUvcytmKSkscD1NYXRoLm1pbihhLE1hdGguZmxvb3Iobisocy1sKSp1L3MrZikpO3QoZSxyLG4saCxwLG8pfXZhciBkPXJbMipuK29dLG09aSxnPWE7Zm9yKHooZSxyLGksbiksclsyKmErb10+ZCYmeihlLHIsaSxhKTttPGc7KXtmb3IoeihlLHIsbSxnKSxtKyssZy0tO3JbMiptK29dPGQ7KW0rKztmb3IoO3JbMipnK29dPmQ7KWctLX1yWzIqaStvXT09PWQ/eihlLHIsaSxnKTooZysrLHooZSxyLGcsYSkpLGc8PW4mJihpPWcrMSksbjw9ZyYmKGE9Zy0xKX19KHQsZSxvLG4saSxhJTIpLE8odCxlLHIsbixvLTEsYSsxKSxPKHQsZSxyLG8rMSxpLGErMSl9fWZ1bmN0aW9uIHoodCxlLHIsbil7RCh0LHIsbiksRChlLDIqciwyKm4pLEQoZSwyKnIrMSwyKm4rMSl9ZnVuY3Rpb24gRCh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIFIodCxlLHIsbil7dmFyIGk9dC1yLGE9ZS1uO3JldHVybiBpKmkrYSphfV8uZnJvbVZlY3RvclRpbGVKcz13LF8uZnJvbUdlb2pzb25WdD1ULF8uR2VvSlNPTldyYXBwZXI9azt2YXIgRj1mdW5jdGlvbih0KXtyZXR1cm4gdFswXX0sQj1mdW5jdGlvbih0KXtyZXR1cm4gdFsxXX0sTj1mdW5jdGlvbih0LGUscixuLGkpe3ZvaWQgMD09PWUmJihlPUYpLHZvaWQgMD09PXImJihyPUIpLHZvaWQgMD09PW4mJihuPTY0KSx2b2lkIDA9PT1pJiYoaT1GbG9hdDY0QXJyYXkpLHRoaXMubm9kZVNpemU9bix0aGlzLnBvaW50cz10O2Zvcih2YXIgYT10Lmxlbmd0aDw2NTUzNj9VaW50MTZBcnJheTpVaW50MzJBcnJheSxvPXRoaXMuaWRzPW5ldyBhKHQubGVuZ3RoKSxzPXRoaXMuY29vcmRzPW5ldyBpKDIqdC5sZW5ndGgpLGw9MDtsPHQubGVuZ3RoO2wrKylvW2xdPWwsc1syKmxdPWUodFtsXSksc1syKmwrMV09cih0W2xdKTtPKG8scyxuLDAsby5sZW5ndGgtMSwwKX07Ti5wcm90b3R5cGUucmFuZ2U9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcyxsLGM9WzAsdC5sZW5ndGgtMSwwXSx1PVtdO2MubGVuZ3RoOyl7dmFyIGY9Yy5wb3AoKSxoPWMucG9wKCkscD1jLnBvcCgpO2lmKGgtcDw9bylmb3IodmFyIGQ9cDtkPD1oO2QrKylzPWVbMipkXSxsPWVbMipkKzFdLHM+PXImJnM8PWkmJmw+PW4mJmw8PWEmJnUucHVzaCh0W2RdKTtlbHNle3ZhciBtPU1hdGguZmxvb3IoKHAraCkvMik7cz1lWzIqbV0sbD1lWzIqbSsxXSxzPj1yJiZzPD1pJiZsPj1uJiZsPD1hJiZ1LnB1c2godFttXSk7dmFyIGc9KGYrMSklMjsoMD09PWY/cjw9czpuPD1sKSYmKGMucHVzaChwKSxjLnB1c2gobS0xKSxjLnB1c2goZykpLCgwPT09Zj9pPj1zOmE+PWwpJiYoYy5wdXNoKG0rMSksYy5wdXNoKGgpLGMucHVzaChnKSl9fXJldHVybiB1fSh0aGlzLmlkcyx0aGlzLmNvb3Jkcyx0LGUscixuLHRoaXMubm9kZVNpemUpfSxOLnByb3RvdHlwZS53aXRoaW49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPVswLHQubGVuZ3RoLTEsMF0scz1bXSxsPWkqaTtvLmxlbmd0aDspe3ZhciBjPW8ucG9wKCksdT1vLnBvcCgpLGY9by5wb3AoKTtpZih1LWY8PWEpZm9yKHZhciBoPWY7aDw9dTtoKyspUihlWzIqaF0sZVsyKmgrMV0scixuKTw9bCYmcy5wdXNoKHRbaF0pO2Vsc2V7dmFyIHA9TWF0aC5mbG9vcigoZit1KS8yKSxkPWVbMipwXSxtPWVbMipwKzFdO1IoZCxtLHIsbik8PWwmJnMucHVzaCh0W3BdKTt2YXIgZz0oYysxKSUyOygwPT09Yz9yLWk8PWQ6bi1pPD1tKSYmKG8ucHVzaChmKSxvLnB1c2gocC0xKSxvLnB1c2goZykpLCgwPT09Yz9yK2k+PWQ6bitpPj1tKSYmKG8ucHVzaChwKzEpLG8ucHVzaCh1KSxvLnB1c2goZykpfX1yZXR1cm4gc30odGhpcy5pZHMsdGhpcy5jb29yZHMsdCxlLHIsdGhpcy5ub2RlU2l6ZSl9O3ZhciBqPXttaW5ab29tOjAsbWF4Wm9vbToxNixyYWRpdXM6NDAsZXh0ZW50OjUxMixub2RlU2l6ZTo2NCxsb2c6ITEsZ2VuZXJhdGVJZDohMSxyZWR1Y2U6bnVsbCxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxVPWZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz1YKE9iamVjdC5jcmVhdGUoaiksdCksdGhpcy50cmVlcz1uZXcgQXJyYXkodGhpcy5vcHRpb25zLm1heFpvb20rMSl9O2Z1bmN0aW9uIFYodCxlLHIsbixpKXtyZXR1cm57eDp0LHk6ZSx6b29tOjEvMCxpZDpyLHBhcmVudElkOi0xLG51bVBvaW50czpuLHByb3BlcnRpZXM6aX19ZnVuY3Rpb24gSCh0LGUpe3ZhciByPXQuZ2VvbWV0cnkuY29vcmRpbmF0ZXMsbj1yWzBdLGk9clsxXTtyZXR1cm57eDpZKG4pLHk6VyhpKSx6b29tOjEvMCxpbmRleDplLHBhcmVudElkOi0xfX1mdW5jdGlvbiBxKHQpe3JldHVybnt0eXBlOiJGZWF0dXJlIixpZDp0LmlkLHByb3BlcnRpZXM6Ryh0KSxnZW9tZXRyeTp7dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOlsobj10LngsMzYwKihuLS41KSksKGU9dC55LHI9KDE4MC0zNjAqZSkqTWF0aC5QSS8xODAsMzYwKk1hdGguYXRhbihNYXRoLmV4cChyKSkvTWF0aC5QSS05MCldfX07dmFyIGUscixufWZ1bmN0aW9uIEcodCl7dmFyIGU9dC5udW1Qb2ludHMscj1lPj0xZTQ/TWF0aC5yb3VuZChlLzFlMykrImsiOmU+PTFlMz9NYXRoLnJvdW5kKGUvMTAwKS8xMCsiayI6ZTtyZXR1cm4gWChYKHt9LHQucHJvcGVydGllcykse2NsdXN0ZXI6ITAsY2x1c3Rlcl9pZDp0LmlkLHBvaW50X2NvdW50OmUscG9pbnRfY291bnRfYWJicmV2aWF0ZWQ6cn0pfWZ1bmN0aW9uIFkodCl7cmV0dXJuIHQvMzYwKy41fWZ1bmN0aW9uIFcodCl7dmFyIGU9TWF0aC5zaW4odCpNYXRoLlBJLzE4MCkscj0uNS0uMjUqTWF0aC5sb2coKDErZSkvKDEtZSkpL01hdGguUEk7cmV0dXJuIHI8MD8wOnI+MT8xOnJ9ZnVuY3Rpb24gWCh0LGUpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXTtyZXR1cm4gdH1mdW5jdGlvbiBaKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gSih0KXtyZXR1cm4gdC55fWZ1bmN0aW9uIEsodCxlLHIsbixpLGEpe3ZhciBvPWktcixzPWEtbjtpZigwIT09b3x8MCE9PXMpe3ZhciBsPSgodC1yKSpvKyhlLW4pKnMpLyhvKm8rcypzKTtsPjE/KHI9aSxuPWEpOmw+MCYmKHIrPW8qbCxuKz1zKmwpfXJldHVybihvPXQtcikqbysocz1lLW4pKnN9ZnVuY3Rpb24gUSh0LGUscixuKXt2YXIgaT17aWQ6dm9pZCAwPT09dD9udWxsOnQsdHlwZTplLGdlb21ldHJ5OnIsdGFnczpuLG1pblg6MS8wLG1pblk6MS8wLG1heFg6LTEvMCxtYXhZOi0xLzB9O3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10Lmdlb21ldHJ5LHI9dC50eXBlO2lmKCJQb2ludCI9PT1yfHwiTXVsdGlQb2ludCI9PT1yfHwiTGluZVN0cmluZyI9PT1yKSQodCxlKTtlbHNlIGlmKCJQb2x5Z29uIj09PXJ8fCJNdWx0aUxpbmVTdHJpbmciPT09cilmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKykkKHQsZVtuXSk7ZWxzZSBpZigiTXVsdGlQb2x5Z29uIj09PXIpZm9yKG49MDtuPGUubGVuZ3RoO24rKylmb3IodmFyIGk9MDtpPGVbbl0ubGVuZ3RoO2krKykkKHQsZVtuXVtpXSl9KGkpLGl9ZnVuY3Rpb24gJCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cis9Myl0Lm1pblg9TWF0aC5taW4odC5taW5YLGVbcl0pLHQubWluWT1NYXRoLm1pbih0Lm1pblksZVtyKzFdKSx0Lm1heFg9TWF0aC5tYXgodC5tYXhYLGVbcl0pLHQubWF4WT1NYXRoLm1heCh0Lm1heFksZVtyKzFdKX1mdW5jdGlvbiB0dCh0LGUscixuKXtpZihlLmdlb21ldHJ5KXt2YXIgaT1lLmdlb21ldHJ5LmNvb3JkaW5hdGVzLGE9ZS5nZW9tZXRyeS50eXBlLG89TWF0aC5wb3coci50b2xlcmFuY2UvKCgxPDxyLm1heFpvb20pKnIuZXh0ZW50KSwyKSxzPVtdLGw9ZS5pZDtpZihyLnByb21vdGVJZD9sPWUucHJvcGVydGllc1tyLnByb21vdGVJZF06ci5nZW5lcmF0ZUlkJiYobD1ufHwwKSwiUG9pbnQiPT09YSlldChpLHMpO2Vsc2UgaWYoIk11bHRpUG9pbnQiPT09YSlmb3IodmFyIGM9MDtjPGkubGVuZ3RoO2MrKylldChpW2NdLHMpO2Vsc2UgaWYoIkxpbmVTdHJpbmciPT09YSlydChpLHMsbywhMSk7ZWxzZSBpZigiTXVsdGlMaW5lU3RyaW5nIj09PWEpe2lmKHIubGluZU1ldHJpY3Mpe2ZvcihjPTA7YzxpLmxlbmd0aDtjKyspcz1bXSxydChpW2NdLHMsbywhMSksdC5wdXNoKFEobCwiTGluZVN0cmluZyIscyxlLnByb3BlcnRpZXMpKTtyZXR1cm59bnQoaSxzLG8sITEpfWVsc2UgaWYoIlBvbHlnb24iPT09YSludChpLHMsbywhMCk7ZWxzZXtpZigiTXVsdGlQb2x5Z29uIiE9PWEpe2lmKCJHZW9tZXRyeUNvbGxlY3Rpb24iPT09YSl7Zm9yKGM9MDtjPGUuZ2VvbWV0cnkuZ2VvbWV0cmllcy5sZW5ndGg7YysrKXR0KHQse2lkOmwsZ2VvbWV0cnk6ZS5nZW9tZXRyeS5nZW9tZXRyaWVzW2NdLHByb3BlcnRpZXM6ZS5wcm9wZXJ0aWVzfSxyLG4pO3JldHVybn10aHJvdyBuZXcgRXJyb3IoIklucHV0IGRhdGEgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuIil9Zm9yKGM9MDtjPGkubGVuZ3RoO2MrKyl7dmFyIHU9W107bnQoaVtjXSx1LG8sITApLHMucHVzaCh1KX19dC5wdXNoKFEobCxhLHMsZS5wcm9wZXJ0aWVzKSl9fWZ1bmN0aW9uIGV0KHQsZSl7ZS5wdXNoKGl0KHRbMF0pKSxlLnB1c2goYXQodFsxXSkpLGUucHVzaCgwKX1mdW5jdGlvbiBydCh0LGUscixuKXtmb3IodmFyIGksYSxvPTAscz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD1pdCh0W3NdWzBdKSxjPWF0KHRbc11bMV0pO2UucHVzaChsKSxlLnB1c2goYyksZS5wdXNoKDApLHM+MCYmKG8rPW4/KGkqYy1sKmEpLzI6TWF0aC5zcXJ0KE1hdGgucG93KGwtaSwyKStNYXRoLnBvdyhjLWEsMikpKSxpPWwsYT1jfXZhciB1PWUubGVuZ3RoLTM7ZVsyXT0xLGZ1bmN0aW9uIHQoZSxyLG4saSl7Zm9yKHZhciBhLG89aSxzPW4tcj4+MSxsPW4tcixjPWVbcl0sdT1lW3IrMV0sZj1lW25dLGg9ZVtuKzFdLHA9ciszO3A8bjtwKz0zKXt2YXIgZD1LKGVbcF0sZVtwKzFdLGMsdSxmLGgpO2lmKGQ+bylhPXAsbz1kO2Vsc2UgaWYoZD09PW8pe3ZhciBtPU1hdGguYWJzKHAtcyk7bTxsJiYoYT1wLGw9bSl9fW8+aSYmKGEtcj4zJiZ0KGUscixhLGkpLGVbYSsyXT1vLG4tYT4zJiZ0KGUsYSxuLGkpKX0oZSwwLHUsciksZVt1KzJdPTEsZS5zaXplPU1hdGguYWJzKG8pLGUuc3RhcnQ9MCxlLmVuZD1lLnNpemV9ZnVuY3Rpb24gbnQodCxlLHIsbil7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPVtdO3J0KHRbaV0sYSxyLG4pLGUucHVzaChhKX19ZnVuY3Rpb24gaXQodCl7cmV0dXJuIHQvMzYwKy41fWZ1bmN0aW9uIGF0KHQpe3ZhciBlPU1hdGguc2luKHQqTWF0aC5QSS8xODApLHI9LjUtLjI1Kk1hdGgubG9nKCgxK2UpLygxLWUpKS9NYXRoLlBJO3JldHVybiByPDA/MDpyPjE/MTpyfWZ1bmN0aW9uIG90KHQsZSxyLG4saSxhLG8scyl7aWYobi89ZSxhPj0oci89ZSkmJm88bilyZXR1cm4gdDtpZihvPHJ8fGE+PW4pcmV0dXJuIG51bGw7Zm9yKHZhciBsPVtdLGM9MDtjPHQubGVuZ3RoO2MrKyl7dmFyIHU9dFtjXSxmPXUuZ2VvbWV0cnksaD11LnR5cGUscD0wPT09aT91Lm1pblg6dS5taW5ZLGQ9MD09PWk/dS5tYXhYOnUubWF4WTtpZihwPj1yJiZkPG4pbC5wdXNoKHUpO2Vsc2UgaWYoIShkPHJ8fHA+PW4pKXt2YXIgbT1bXTtpZigiUG9pbnQiPT09aHx8Ik11bHRpUG9pbnQiPT09aClzdChmLG0scixuLGkpO2Vsc2UgaWYoIkxpbmVTdHJpbmciPT09aClsdChmLG0scixuLGksITEscy5saW5lTWV0cmljcyk7ZWxzZSBpZigiTXVsdGlMaW5lU3RyaW5nIj09PWgpdXQoZixtLHIsbixpLCExKTtlbHNlIGlmKCJQb2x5Z29uIj09PWgpdXQoZixtLHIsbixpLCEwKTtlbHNlIGlmKCJNdWx0aVBvbHlnb24iPT09aClmb3IodmFyIGc9MDtnPGYubGVuZ3RoO2crKyl7dmFyIHY9W107dXQoZltnXSx2LHIsbixpLCEwKSx2Lmxlbmd0aCYmbS5wdXNoKHYpfWlmKG0ubGVuZ3RoKXtpZihzLmxpbmVNZXRyaWNzJiYiTGluZVN0cmluZyI9PT1oKXtmb3IoZz0wO2c8bS5sZW5ndGg7ZysrKWwucHVzaChRKHUuaWQsaCxtW2ddLHUudGFncykpO2NvbnRpbnVlfSJMaW5lU3RyaW5nIiE9PWgmJiJNdWx0aUxpbmVTdHJpbmciIT09aHx8KDE9PT1tLmxlbmd0aD8oaD0iTGluZVN0cmluZyIsbT1tWzBdKTpoPSJNdWx0aUxpbmVTdHJpbmciKSwiUG9pbnQiIT09aCYmIk11bHRpUG9pbnQiIT09aHx8KGg9Mz09PW0ubGVuZ3RoPyJQb2ludCI6Ik11bHRpUG9pbnQiKSxsLnB1c2goUSh1LmlkLGgsbSx1LnRhZ3MpKX19fXJldHVybiBsLmxlbmd0aD9sOm51bGx9ZnVuY3Rpb24gc3QodCxlLHIsbixpKXtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErPTMpe3ZhciBvPXRbYStpXTtvPj1yJiZvPD1uJiYoZS5wdXNoKHRbYV0pLGUucHVzaCh0W2ErMV0pLGUucHVzaCh0W2ErMl0pKX19ZnVuY3Rpb24gbHQodCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzLGwsYz1jdCh0KSx1PTA9PT1pP2h0OnB0LGY9dC5zdGFydCxoPTA7aDx0Lmxlbmd0aC0zO2grPTMpe3ZhciBwPXRbaF0sZD10W2grMV0sbT10W2grMl0sZz10W2grM10sdj10W2grNF0seT0wPT09aT9wOmQseD0wPT09aT9nOnYsYj0hMTtvJiYocz1NYXRoLnNxcnQoTWF0aC5wb3cocC1nLDIpK01hdGgucG93KGQtdiwyKSkpLHk8cj94PnImJihsPXUoYyxwLGQsZyx2LHIpLG8mJihjLnN0YXJ0PWYrcypsKSk6eT5uP3g8biYmKGw9dShjLHAsZCxnLHYsbiksbyYmKGMuc3RhcnQ9ZitzKmwpKTpmdChjLHAsZCxtKSx4PHImJnk+PXImJihsPXUoYyxwLGQsZyx2LHIpLGI9ITApLHg+biYmeTw9biYmKGw9dShjLHAsZCxnLHYsbiksYj0hMCksIWEmJmImJihvJiYoYy5lbmQ9ZitzKmwpLGUucHVzaChjKSxjPWN0KHQpKSxvJiYoZis9cyl9dmFyIF89dC5sZW5ndGgtMztwPXRbX10sZD10W18rMV0sbT10W18rMl0sKHk9MD09PWk/cDpkKT49ciYmeTw9biYmZnQoYyxwLGQsbSksXz1jLmxlbmd0aC0zLGEmJl8+PTMmJihjW19dIT09Y1swXXx8Y1tfKzFdIT09Y1sxXSkmJmZ0KGMsY1swXSxjWzFdLGNbMl0pLGMubGVuZ3RoJiZlLnB1c2goYyl9ZnVuY3Rpb24gY3QodCl7dmFyIGU9W107cmV0dXJuIGUuc2l6ZT10LnNpemUsZS5zdGFydD10LnN0YXJ0LGUuZW5kPXQuZW5kLGV9ZnVuY3Rpb24gdXQodCxlLHIsbixpLGEpe2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKWx0KHRbb10sZSxyLG4saSxhLCExKX1mdW5jdGlvbiBmdCh0LGUscixuKXt0LnB1c2goZSksdC5wdXNoKHIpLHQucHVzaChuKX1mdW5jdGlvbiBodCh0LGUscixuLGksYSl7dmFyIG89KGEtZSkvKG4tZSk7cmV0dXJuIHQucHVzaChhKSx0LnB1c2gocisoaS1yKSpvKSx0LnB1c2goMSksb31mdW5jdGlvbiBwdCh0LGUscixuLGksYSl7dmFyIG89KGEtcikvKGktcik7cmV0dXJuIHQucHVzaChlKyhuLWUpKm8pLHQucHVzaChhKSx0LnB1c2goMSksb31mdW5jdGlvbiBkdCh0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpLGE9dFtuXSxvPWEudHlwZTtpZigiUG9pbnQiPT09b3x8Ik11bHRpUG9pbnQiPT09b3x8IkxpbmVTdHJpbmciPT09bylpPW10KGEuZ2VvbWV0cnksZSk7ZWxzZSBpZigiTXVsdGlMaW5lU3RyaW5nIj09PW98fCJQb2x5Z29uIj09PW8pe2k9W107Zm9yKHZhciBzPTA7czxhLmdlb21ldHJ5Lmxlbmd0aDtzKyspaS5wdXNoKG10KGEuZ2VvbWV0cnlbc10sZSkpfWVsc2UgaWYoIk11bHRpUG9seWdvbiI9PT1vKWZvcihpPVtdLHM9MDtzPGEuZ2VvbWV0cnkubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPVtdLGM9MDtjPGEuZ2VvbWV0cnlbc10ubGVuZ3RoO2MrKylsLnB1c2gobXQoYS5nZW9tZXRyeVtzXVtjXSxlKSk7aS5wdXNoKGwpfXIucHVzaChRKGEuaWQsbyxpLGEudGFncykpfXJldHVybiByfWZ1bmN0aW9uIG10KHQsZSl7dmFyIHI9W107ci5zaXplPXQuc2l6ZSx2b2lkIDAhPT10LnN0YXJ0JiYoci5zdGFydD10LnN0YXJ0LHIuZW5kPXQuZW5kKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rPTMpci5wdXNoKHRbbl0rZSx0W24rMV0sdFtuKzJdKTtyZXR1cm4gcn1mdW5jdGlvbiBndCh0LGUpe2lmKHQudHJhbnNmb3JtZWQpcmV0dXJuIHQ7dmFyIHIsbixpLGE9MTw8dC56LG89dC54LHM9dC55O2ZvcihyPTA7cjx0LmZlYXR1cmVzLmxlbmd0aDtyKyspe3ZhciBsPXQuZmVhdHVyZXNbcl0sYz1sLmdlb21ldHJ5LHU9bC50eXBlO2lmKGwuZ2VvbWV0cnk9W10sMT09PXUpZm9yKG49MDtuPGMubGVuZ3RoO24rPTIpbC5nZW9tZXRyeS5wdXNoKHZ0KGNbbl0sY1tuKzFdLGUsYSxvLHMpKTtlbHNlIGZvcihuPTA7bjxjLmxlbmd0aDtuKyspe3ZhciBmPVtdO2ZvcihpPTA7aTxjW25dLmxlbmd0aDtpKz0yKWYucHVzaCh2dChjW25dW2ldLGNbbl1baSsxXSxlLGEsbyxzKSk7bC5nZW9tZXRyeS5wdXNoKGYpfX1yZXR1cm4gdC50cmFuc2Zvcm1lZD0hMCx0fWZ1bmN0aW9uIHZ0KHQsZSxyLG4saSxhKXtyZXR1cm5bTWF0aC5yb3VuZChyKih0Km4taSkpLE1hdGgucm91bmQociooZSpuLWEpKV19ZnVuY3Rpb24geXQodCxlLHIsbixpKXtmb3IodmFyIGE9ZT09PWkubWF4Wm9vbT8wOmkudG9sZXJhbmNlLygoMTw8ZSkqaS5leHRlbnQpLG89e2ZlYXR1cmVzOltdLG51bVBvaW50czowLG51bVNpbXBsaWZpZWQ6MCxudW1GZWF0dXJlczowLHNvdXJjZTpudWxsLHg6cix5Om4sejplLHRyYW5zZm9ybWVkOiExLG1pblg6MixtaW5ZOjEsbWF4WDotMSxtYXhZOjB9LHM9MDtzPHQubGVuZ3RoO3MrKyl7by5udW1GZWF0dXJlcysrLHh0KG8sdFtzXSxhLGkpO3ZhciBsPXRbc10ubWluWCxjPXRbc10ubWluWSx1PXRbc10ubWF4WCxmPXRbc10ubWF4WTtsPG8ubWluWCYmKG8ubWluWD1sKSxjPG8ubWluWSYmKG8ubWluWT1jKSx1Pm8ubWF4WCYmKG8ubWF4WD11KSxmPm8ubWF4WSYmKG8ubWF4WT1mKX1yZXR1cm4gb31mdW5jdGlvbiB4dCh0LGUscixuKXt2YXIgaT1lLmdlb21ldHJ5LGE9ZS50eXBlLG89W107aWYoIlBvaW50Ij09PWF8fCJNdWx0aVBvaW50Ij09PWEpZm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKz0zKW8ucHVzaChpW3NdKSxvLnB1c2goaVtzKzFdKSx0Lm51bVBvaW50cysrLHQubnVtU2ltcGxpZmllZCsrO2Vsc2UgaWYoIkxpbmVTdHJpbmciPT09YSlidChvLGksdCxyLCExLCExKTtlbHNlIGlmKCJNdWx0aUxpbmVTdHJpbmciPT09YXx8IlBvbHlnb24iPT09YSlmb3Iocz0wO3M8aS5sZW5ndGg7cysrKWJ0KG8saVtzXSx0LHIsIlBvbHlnb24iPT09YSwwPT09cyk7ZWxzZSBpZigiTXVsdGlQb2x5Z29uIj09PWEpZm9yKHZhciBsPTA7bDxpLmxlbmd0aDtsKyspe3ZhciBjPWlbbF07Zm9yKHM9MDtzPGMubGVuZ3RoO3MrKylidChvLGNbc10sdCxyLCEwLDA9PT1zKX1pZihvLmxlbmd0aCl7dmFyIHU9ZS50YWdzfHxudWxsO2lmKCJMaW5lU3RyaW5nIj09PWEmJm4ubGluZU1ldHJpY3Mpe2Zvcih2YXIgZiBpbiB1PXt9LGUudGFncyl1W2ZdPWUudGFnc1tmXTt1Lm1hcGJveF9jbGlwX3N0YXJ0PWkuc3RhcnQvaS5zaXplLHUubWFwYm94X2NsaXBfZW5kPWkuZW5kL2kuc2l6ZX12YXIgaD17Z2VvbWV0cnk6byx0eXBlOiJQb2x5Z29uIj09PWF8fCJNdWx0aVBvbHlnb24iPT09YT8zOiJMaW5lU3RyaW5nIj09PWF8fCJNdWx0aUxpbmVTdHJpbmciPT09YT8yOjEsdGFnczp1fTtudWxsIT09ZS5pZCYmKGguaWQ9ZS5pZCksdC5mZWF0dXJlcy5wdXNoKGgpfX1mdW5jdGlvbiBidCh0LGUscixuLGksYSl7dmFyIG89bipuO2lmKG4+MCYmZS5zaXplPChpP286bikpci5udW1Qb2ludHMrPWUubGVuZ3RoLzM7ZWxzZXtmb3IodmFyIHM9W10sbD0wO2w8ZS5sZW5ndGg7bCs9MykoMD09PW58fGVbbCsyXT5vKSYmKHIubnVtU2ltcGxpZmllZCsrLHMucHVzaChlW2xdKSxzLnB1c2goZVtsKzFdKSksci5udW1Qb2ludHMrKztpJiZmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MCxpPXQubGVuZ3RoLGE9aS0yO248aTthPW4sbis9MilyKz0odFtuXS10W2FdKSoodFtuKzFdK3RbYSsxXSk7aWYocj4wPT09ZSlmb3Iobj0wLGk9dC5sZW5ndGg7bjxpLzI7bis9Mil7dmFyIG89dFtuXSxzPXRbbisxXTt0W25dPXRbaS0yLW5dLHRbbisxXT10W2ktMS1uXSx0W2ktMi1uXT1vLHRbaS0xLW5dPXN9fShzLGEpLHQucHVzaChzKX19ZnVuY3Rpb24gX3QodCxlKXt2YXIgcj0oZT10aGlzLm9wdGlvbnM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl07cmV0dXJuIHR9KE9iamVjdC5jcmVhdGUodGhpcy5vcHRpb25zKSxlKSkuZGVidWc7aWYociYmY29uc29sZS50aW1lKCJwcmVwcm9jZXNzIGRhdGEiKSxlLm1heFpvb208MHx8ZS5tYXhab29tPjI0KXRocm93IG5ldyBFcnJvcigibWF4Wm9vbSBzaG91bGQgYmUgaW4gdGhlIDAtMjQgcmFuZ2UiKTtpZihlLnByb21vdGVJZCYmZS5nZW5lcmF0ZUlkKXRocm93IG5ldyBFcnJvcigicHJvbW90ZUlkIGFuZCBnZW5lcmF0ZUlkIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIpO3ZhciBuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107aWYoIkZlYXR1cmVDb2xsZWN0aW9uIj09PXQudHlwZSlmb3IodmFyIG49MDtuPHQuZmVhdHVyZXMubGVuZ3RoO24rKyl0dChyLHQuZmVhdHVyZXNbbl0sZSxuKTtlbHNlIkZlYXR1cmUiPT09dC50eXBlP3R0KHIsdCxlKTp0dChyLHtnZW9tZXRyeTp0fSxlKTtyZXR1cm4gcn0odCxlKTt0aGlzLnRpbGVzPXt9LHRoaXMudGlsZUNvb3Jkcz1bXSxyJiYoY29uc29sZS50aW1lRW5kKCJwcmVwcm9jZXNzIGRhdGEiKSxjb25zb2xlLmxvZygiaW5kZXg6IG1heFpvb206ICVkLCBtYXhQb2ludHM6ICVkIixlLmluZGV4TWF4Wm9vbSxlLmluZGV4TWF4UG9pbnRzKSxjb25zb2xlLnRpbWUoImdlbmVyYXRlIHRpbGVzIiksdGhpcy5zdGF0cz17fSx0aGlzLnRvdGFsPTApLChuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5idWZmZXIvZS5leHRlbnQsbj10LGk9b3QodCwxLC0xLXIsciwwLC0xLDIsZSksYT1vdCh0LDEsMS1yLDIrciwwLC0xLDIsZSk7cmV0dXJuKGl8fGEpJiYobj1vdCh0LDEsLXIsMStyLDAsLTEsMixlKXx8W10saSYmKG49ZHQoaSwxKS5jb25jYXQobikpLGEmJihuPW4uY29uY2F0KGR0KGEsLTEpKSkpLG59KG4sZSkpLmxlbmd0aCYmdGhpcy5zcGxpdFRpbGUobiwwLDAsMCksciYmKG4ubGVuZ3RoJiZjb25zb2xlLmxvZygiZmVhdHVyZXM6ICVkLCBwb2ludHM6ICVkIix0aGlzLnRpbGVzWzBdLm51bUZlYXR1cmVzLHRoaXMudGlsZXNbMF0ubnVtUG9pbnRzKSxjb25zb2xlLnRpbWVFbmQoImdlbmVyYXRlIHRpbGVzIiksY29uc29sZS5sb2coInRpbGVzIGdlbmVyYXRlZDoiLHRoaXMudG90YWwsSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0cykpKX1mdW5jdGlvbiB3dCh0LGUscil7cmV0dXJuIDMyKigoMTw8dCkqcitlKSt0fWZ1bmN0aW9uIFR0KHQsZSl7dmFyIHI9dC50aWxlSUQuY2Fub25pY2FsO2lmKCF0aGlzLl9nZW9KU09OSW5kZXgpcmV0dXJuIGUobnVsbCxudWxsKTt2YXIgbj10aGlzLl9nZW9KU09OSW5kZXguZ2V0VGlsZShyLnosci54LHIueSk7aWYoIW4pcmV0dXJuIGUobnVsbCxudWxsKTt2YXIgaT1uZXcgZyhuLmZlYXR1cmVzKSxhPV8oaSk7MD09PWEuYnl0ZU9mZnNldCYmYS5ieXRlTGVuZ3RoPT09YS5idWZmZXIuYnl0ZUxlbmd0aHx8KGE9bmV3IFVpbnQ4QXJyYXkoYSkpLGUobnVsbCx7dmVjdG9yVGlsZTppLHJhd0RhdGE6YS5idWZmZXJ9KX1VLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3B0aW9ucyxyPWUubG9nLG49ZS5taW5ab29tLGk9ZS5tYXhab29tLGE9ZS5ub2RlU2l6ZTtyJiZjb25zb2xlLnRpbWUoInRvdGFsIHRpbWUiKTt2YXIgbz0icHJlcGFyZSAiK3QubGVuZ3RoKyIgcG9pbnRzIjtyJiZjb25zb2xlLnRpbWUobyksdGhpcy5wb2ludHM9dDtmb3IodmFyIHM9W10sbD0wO2w8dC5sZW5ndGg7bCsrKXRbbF0uZ2VvbWV0cnkmJnMucHVzaChIKHRbbF0sbCkpO3RoaXMudHJlZXNbaSsxXT1uZXcgTihzLFosSixhLEZsb2F0MzJBcnJheSksciYmY29uc29sZS50aW1lRW5kKG8pO2Zvcih2YXIgYz1pO2M+PW47Yy0tKXt2YXIgdT0rRGF0ZS5ub3coKTtzPXRoaXMuX2NsdXN0ZXIocyxjKSx0aGlzLnRyZWVzW2NdPW5ldyBOKHMsWixKLGEsRmxvYXQzMkFycmF5KSxyJiZjb25zb2xlLmxvZygieiVkOiAlZCBjbHVzdGVycyBpbiAlZG1zIixjLHMubGVuZ3RoLCtEYXRlLm5vdygpLXUpfXJldHVybiByJiZjb25zb2xlLnRpbWVFbmQoInRvdGFsIHRpbWUiKSx0aGlzfSxVLnByb3RvdHlwZS5nZXRDbHVzdGVycz1mdW5jdGlvbih0LGUpe3ZhciByPSgodFswXSsxODApJTM2MCszNjApJTM2MC0xODAsbj1NYXRoLm1heCgtOTAsTWF0aC5taW4oOTAsdFsxXSkpLGk9MTgwPT09dFsyXT8xODA6KCh0WzJdKzE4MCklMzYwKzM2MCklMzYwLTE4MCxhPU1hdGgubWF4KC05MCxNYXRoLm1pbig5MCx0WzNdKSk7aWYodFsyXS10WzBdPj0zNjApcj0tMTgwLGk9MTgwO2Vsc2UgaWYocj5pKXt2YXIgbz10aGlzLmdldENsdXN0ZXJzKFtyLG4sMTgwLGFdLGUpLHM9dGhpcy5nZXRDbHVzdGVycyhbLTE4MCxuLGksYV0sZSk7cmV0dXJuIG8uY29uY2F0KHMpfWZvcih2YXIgbD10aGlzLnRyZWVzW3RoaXMuX2xpbWl0Wm9vbShlKV0sYz1bXSx1PTAsZj1sLnJhbmdlKFkociksVyhhKSxZKGkpLFcobikpO3U8Zi5sZW5ndGg7dSs9MSl7dmFyIGg9Zlt1XSxwPWwucG9pbnRzW2hdO2MucHVzaChwLm51bVBvaW50cz9xKHApOnRoaXMucG9pbnRzW3AuaW5kZXhdKX1yZXR1cm4gY30sVS5wcm90b3R5cGUuZ2V0Q2hpbGRyZW49ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0T3JpZ2luSWQodCkscj10aGlzLl9nZXRPcmlnaW5ab29tKHQpLG49Ik5vIGNsdXN0ZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGlkLiIsaT10aGlzLnRyZWVzW3JdO2lmKCFpKXRocm93IG5ldyBFcnJvcihuKTt2YXIgYT1pLnBvaW50c1tlXTtpZighYSl0aHJvdyBuZXcgRXJyb3Iobik7Zm9yKHZhciBvPXRoaXMub3B0aW9ucy5yYWRpdXMvKHRoaXMub3B0aW9ucy5leHRlbnQqTWF0aC5wb3coMixyLTEpKSxzPVtdLGw9MCxjPWkud2l0aGluKGEueCxhLnksbyk7bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdLGY9aS5wb2ludHNbdV07Zi5wYXJlbnRJZD09PXQmJnMucHVzaChmLm51bVBvaW50cz9xKGYpOnRoaXMucG9pbnRzW2YuaW5kZXhdKX1pZigwPT09cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKG4pO3JldHVybiBzfSxVLnByb3RvdHlwZS5nZXRMZWF2ZXM9ZnVuY3Rpb24odCxlLHIpe2U9ZXx8MTAscj1yfHwwO3ZhciBuPVtdO3JldHVybiB0aGlzLl9hcHBlbmRMZWF2ZXMobix0LGUsciwwKSxufSxVLnByb3RvdHlwZS5nZXRUaWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnRyZWVzW3RoaXMuX2xpbWl0Wm9vbSh0KV0saT1NYXRoLnBvdygyLHQpLGE9dGhpcy5vcHRpb25zLG89YS5leHRlbnQscz1hLnJhZGl1cy9vLGw9KHItcykvaSxjPShyKzErcykvaSx1PXtmZWF0dXJlczpbXX07cmV0dXJuIHRoaXMuX2FkZFRpbGVGZWF0dXJlcyhuLnJhbmdlKChlLXMpL2ksbCwoZSsxK3MpL2ksYyksbi5wb2ludHMsZSxyLGksdSksMD09PWUmJnRoaXMuX2FkZFRpbGVGZWF0dXJlcyhuLnJhbmdlKDEtcy9pLGwsMSxjKSxuLnBvaW50cyxpLHIsaSx1KSxlPT09aS0xJiZ0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgwLGwscy9pLGMpLG4ucG9pbnRzLC0xLHIsaSx1KSx1LmZlYXR1cmVzLmxlbmd0aD91Om51bGx9LFUucHJvdG90eXBlLmdldENsdXN0ZXJFeHBhbnNpb25ab29tPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9nZXRPcmlnaW5ab29tKHQpLTE7ZTw9dGhpcy5vcHRpb25zLm1heFpvb207KXt2YXIgcj10aGlzLmdldENoaWxkcmVuKHQpO2lmKGUrKywxIT09ci5sZW5ndGgpYnJlYWs7dD1yWzBdLnByb3BlcnRpZXMuY2x1c3Rlcl9pZH1yZXR1cm4gZX0sVS5wcm90b3R5cGUuX2FwcGVuZExlYXZlcz1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT0wLG89dGhpcy5nZXRDaGlsZHJlbihlKTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD1zLnByb3BlcnRpZXM7aWYobCYmbC5jbHVzdGVyP2krbC5wb2ludF9jb3VudDw9bj9pKz1sLnBvaW50X2NvdW50Omk9dGhpcy5fYXBwZW5kTGVhdmVzKHQsbC5jbHVzdGVyX2lkLHIsbixpKTppPG4/aSsrOnQucHVzaChzKSx0Lmxlbmd0aD09PXIpYnJlYWt9cmV0dXJuIGl9LFUucHJvdG90eXBlLl9hZGRUaWxlRmVhdHVyZXM9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0wLHM9dDtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPWVbc1tvXV0sYz1sLm51bVBvaW50cyx1PXt0eXBlOjEsZ2VvbWV0cnk6W1tNYXRoLnJvdW5kKHRoaXMub3B0aW9ucy5leHRlbnQqKGwueCppLXIpKSxNYXRoLnJvdW5kKHRoaXMub3B0aW9ucy5leHRlbnQqKGwueSppLW4pKV1dLHRhZ3M6Yz9HKGwpOnRoaXMucG9pbnRzW2wuaW5kZXhdLnByb3BlcnRpZXN9LGY9dm9pZCAwO2M/Zj1sLmlkOnRoaXMub3B0aW9ucy5nZW5lcmF0ZUlkP2Y9bC5pbmRleDp0aGlzLnBvaW50c1tsLmluZGV4XS5pZCYmKGY9dGhpcy5wb2ludHNbbC5pbmRleF0uaWQpLHZvaWQgMCE9PWYmJih1LmlkPWYpLGEuZmVhdHVyZXMucHVzaCh1KX19LFUucHJvdG90eXBlLl9saW1pdFpvb209ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KHRoaXMub3B0aW9ucy5taW5ab29tLE1hdGgubWluKHQsdGhpcy5vcHRpb25zLm1heFpvb20rMSkpfSxVLnByb3RvdHlwZS5fY2x1c3Rlcj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXRoaXMub3B0aW9ucyxpPW4ucmFkaXVzLGE9bi5leHRlbnQsbz1uLnJlZHVjZSxzPWkvKGEqTWF0aC5wb3coMixlKSksbD0wO2w8dC5sZW5ndGg7bCsrKXt2YXIgYz10W2xdO2lmKCEoYy56b29tPD1lKSl7Yy56b29tPWU7Zm9yKHZhciB1PXRoaXMudHJlZXNbZSsxXSxmPXUud2l0aGluKGMueCxjLnkscyksaD1jLm51bVBvaW50c3x8MSxwPWMueCpoLGQ9Yy55KmgsbT1vJiZoPjE/dGhpcy5fbWFwKGMsITApOm51bGwsZz0obDw8NSkrKGUrMSkrdGhpcy5wb2ludHMubGVuZ3RoLHY9MCx5PWY7djx5Lmxlbmd0aDt2Kz0xKXt2YXIgeD15W3ZdLGI9dS5wb2ludHNbeF07aWYoIShiLnpvb208PWUpKXtiLnpvb209ZTt2YXIgXz1iLm51bVBvaW50c3x8MTtwKz1iLngqXyxkKz1iLnkqXyxoKz1fLGIucGFyZW50SWQ9ZyxvJiYobXx8KG09dGhpcy5fbWFwKGMsITApKSxvKG0sdGhpcy5fbWFwKGIpKSl9fTE9PT1oP3IucHVzaChjKTooYy5wYXJlbnRJZD1nLHIucHVzaChWKHAvaCxkL2gsZyxoLG0pKSl9fXJldHVybiByfSxVLnByb3RvdHlwZS5fZ2V0T3JpZ2luSWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQtdGhpcy5wb2ludHMubGVuZ3RoPj41fSxVLnByb3RvdHlwZS5fZ2V0T3JpZ2luWm9vbT1mdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLnBvaW50cy5sZW5ndGgpJTMyfSxVLnByb3RvdHlwZS5fbWFwPWZ1bmN0aW9uKHQsZSl7aWYodC5udW1Qb2ludHMpcmV0dXJuIGU/WCh7fSx0LnByb3BlcnRpZXMpOnQucHJvcGVydGllczt2YXIgcj10aGlzLnBvaW50c1t0LmluZGV4XS5wcm9wZXJ0aWVzLG49dGhpcy5vcHRpb25zLm1hcChyKTtyZXR1cm4gZSYmbj09PXI/WCh7fSxuKTpufSxfdC5wcm90b3R5cGUub3B0aW9ucz17bWF4Wm9vbToxNCxpbmRleE1heFpvb206NSxpbmRleE1heFBvaW50czoxZTUsdG9sZXJhbmNlOjMsZXh0ZW50OjQwOTYsYnVmZmVyOjY0LGxpbmVNZXRyaWNzOiExLHByb21vdGVJZDpudWxsLGdlbmVyYXRlSWQ6ITEsZGVidWc6MH0sX3QucHJvdG90eXBlLnNwbGl0VGlsZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9W3QsZSxyLG5dLGw9dGhpcy5vcHRpb25zLGM9bC5kZWJ1ZztzLmxlbmd0aDspe249cy5wb3AoKSxyPXMucG9wKCksZT1zLnBvcCgpLHQ9cy5wb3AoKTt2YXIgdT0xPDxlLGY9d3QoZSxyLG4pLGg9dGhpcy50aWxlc1tmXTtpZighaCYmKGM+MSYmY29uc29sZS50aW1lKCJjcmVhdGlvbiIpLGg9dGhpcy50aWxlc1tmXT15dCh0LGUscixuLGwpLHRoaXMudGlsZUNvb3Jkcy5wdXNoKHt6OmUseDpyLHk6bn0pLGMpKXtjPjEmJihjb25zb2xlLmxvZygidGlsZSB6JWQtJWQtJWQgKGZlYXR1cmVzOiAlZCwgcG9pbnRzOiAlZCwgc2ltcGxpZmllZDogJWQpIixlLHIsbixoLm51bUZlYXR1cmVzLGgubnVtUG9pbnRzLGgubnVtU2ltcGxpZmllZCksY29uc29sZS50aW1lRW5kKCJjcmVhdGlvbiIpKTt2YXIgcD0ieiIrZTt0aGlzLnN0YXRzW3BdPSh0aGlzLnN0YXRzW3BdfHwwKSsxLHRoaXMudG90YWwrK31pZihoLnNvdXJjZT10LGkpe2lmKGU9PT1sLm1heFpvb218fGU9PT1pKWNvbnRpbnVlO3ZhciBkPTE8PGktZTtpZihyIT09TWF0aC5mbG9vcihhL2QpfHxuIT09TWF0aC5mbG9vcihvL2QpKWNvbnRpbnVlfWVsc2UgaWYoZT09PWwuaW5kZXhNYXhab29tfHxoLm51bVBvaW50czw9bC5pbmRleE1heFBvaW50cyljb250aW51ZTtpZihoLnNvdXJjZT1udWxsLDAhPT10Lmxlbmd0aCl7Yz4xJiZjb25zb2xlLnRpbWUoImNsaXBwaW5nIik7dmFyIG0sZyx2LHkseCxiLF89LjUqbC5idWZmZXIvbC5leHRlbnQsdz0uNS1fLFQ9LjUrXyxrPTErXzttPWc9dj15PW51bGwseD1vdCh0LHUsci1fLHIrVCwwLGgubWluWCxoLm1heFgsbCksYj1vdCh0LHUscit3LHIraywwLGgubWluWCxoLm1heFgsbCksdD1udWxsLHgmJihtPW90KHgsdSxuLV8sbitULDEsaC5taW5ZLGgubWF4WSxsKSxnPW90KHgsdSxuK3csbitrLDEsaC5taW5ZLGgubWF4WSxsKSx4PW51bGwpLGImJih2PW90KGIsdSxuLV8sbitULDEsaC5taW5ZLGgubWF4WSxsKSx5PW90KGIsdSxuK3csbitrLDEsaC5taW5ZLGgubWF4WSxsKSxiPW51bGwpLGM+MSYmY29uc29sZS50aW1lRW5kKCJjbGlwcGluZyIpLHMucHVzaChtfHxbXSxlKzEsMipyLDIqbikscy5wdXNoKGd8fFtdLGUrMSwyKnIsMipuKzEpLHMucHVzaCh2fHxbXSxlKzEsMipyKzEsMipuKSxzLnB1c2goeXx8W10sZSsxLDIqcisxLDIqbisxKX19fSxfdC5wcm90b3R5cGUuZ2V0VGlsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5vcHRpb25zLGk9bi5leHRlbnQsYT1uLmRlYnVnO2lmKHQ8MHx8dD4yNClyZXR1cm4gbnVsbDt2YXIgbz0xPDx0LHM9d3QodCxlPShlJW8rbyklbyxyKTtpZih0aGlzLnRpbGVzW3NdKXJldHVybiBndCh0aGlzLnRpbGVzW3NdLGkpO2E+MSYmY29uc29sZS5sb2coImRyaWxsaW5nIGRvd24gdG8geiVkLSVkLSVkIix0LGUscik7Zm9yKHZhciBsLGM9dCx1PWUsZj1yOyFsJiZjPjA7KWMtLSx1PU1hdGguZmxvb3IodS8yKSxmPU1hdGguZmxvb3IoZi8yKSxsPXRoaXMudGlsZXNbd3QoYyx1LGYpXTtyZXR1cm4gbCYmbC5zb3VyY2U/KGE+MSYmY29uc29sZS5sb2coImZvdW5kIHBhcmVudCB0aWxlIHolZC0lZC0lZCIsYyx1LGYpLGE+MSYmY29uc29sZS50aW1lKCJkcmlsbGluZyBkb3duIiksdGhpcy5zcGxpdFRpbGUobC5zb3VyY2UsYyx1LGYsdCxlLHIpLGE+MSYmY29uc29sZS50aW1lRW5kKCJkcmlsbGluZyBkb3duIiksdGhpcy50aWxlc1tzXT9ndCh0aGlzLnRpbGVzW3NdLGkpOm51bGwpOm51bGx9O3ZhciBrdD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHQscixuLGkpe2UuY2FsbCh0aGlzLHQscixuLFR0KSxpJiYodGhpcy5sb2FkR2VvSlNPTj1pKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZERhdGE9ZnVuY3Rpb24odCxlKXt0aGlzLl9wZW5kaW5nQ2FsbGJhY2smJnRoaXMuX3BlbmRpbmdDYWxsYmFjayhudWxsLHthYmFuZG9uZWQ6ITB9KSx0aGlzLl9wZW5kaW5nQ2FsbGJhY2s9ZSx0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXM9dCx0aGlzLl9zdGF0ZSYmIklkbGUiIT09dGhpcy5fc3RhdGU/dGhpcy5fc3RhdGU9Ik5lZWRzTG9hZERhdGEiOih0aGlzLl9zdGF0ZT0iQ29hbGVzY2luZyIsdGhpcy5fbG9hZERhdGEoKSl9LHIucHJvdG90eXBlLl9sb2FkRGF0YT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5fcGVuZGluZ0NhbGxiYWNrJiZ0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXMpe3ZhciByPXRoaXMuX3BlbmRpbmdDYWxsYmFjayxuPXRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcztkZWxldGUgdGhpcy5fcGVuZGluZ0NhbGxiYWNrLGRlbGV0ZSB0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXM7dmFyIGk9ISEobiYmbi5yZXF1ZXN0JiZuLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nKSYmbmV3IHQuUmVxdWVzdFBlcmZvcm1hbmNlKG4ucmVxdWVzdCk7dGhpcy5sb2FkR2VvSlNPTihuLChmdW5jdGlvbihhLG8pe2lmKGF8fCFvKXJldHVybiByKGEpO2lmKCJvYmplY3QiIT10eXBlb2YgbylyZXR1cm4gcihuZXcgRXJyb3IoIklucHV0IGRhdGEgZ2l2ZW4gdG8gJyIrbi5zb3VyY2UrIicgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuIikpO2YobywhMCk7dHJ5e2UuX2dlb0pTT05JbmRleD1uLmNsdXN0ZXI/bmV3IFUoZnVuY3Rpb24oZSl7dmFyIHI9ZS5zdXBlcmNsdXN0ZXJPcHRpb25zLG49ZS5jbHVzdGVyUHJvcGVydGllcztpZighbnx8IXIpcmV0dXJuIHI7Zm9yKHZhciBpPXt9LGE9e30sbz17YWNjdW11bGF0ZWQ6bnVsbCx6b29tOjB9LHM9e3Byb3BlcnRpZXM6bnVsbH0sbD1PYmplY3Qua2V5cyhuKSxjPTAsdT1sO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGY9dVtjXSxoPW5bZl0scD1oWzBdLGQ9aFsxXSxtPXQuY3JlYXRlRXhwcmVzc2lvbihkKSxnPXQuY3JlYXRlRXhwcmVzc2lvbigic3RyaW5nIj09dHlwZW9mIHA/W3AsWyJhY2N1bXVsYXRlZCJdLFsiZ2V0IixmXV06cCk7aVtmXT1tLnZhbHVlLGFbZl09Zy52YWx1ZX1yZXR1cm4gci5tYXA9ZnVuY3Rpb24odCl7cy5wcm9wZXJ0aWVzPXQ7Zm9yKHZhciBlPXt9LHI9MCxuPWw7cjxuLmxlbmd0aDtyKz0xKXt2YXIgYT1uW3JdO2VbYV09aVthXS5ldmFsdWF0ZShvLHMpfXJldHVybiBlfSxyLnJlZHVjZT1mdW5jdGlvbih0LGUpe3MucHJvcGVydGllcz1lO2Zvcih2YXIgcj0wLG49bDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl07by5hY2N1bXVsYXRlZD10W2ldLHRbaV09YVtpXS5ldmFsdWF0ZShvLHMpfX0scn0obikpLmxvYWQoby5mZWF0dXJlcyk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IF90KHQsZSl9KG8sbi5nZW9qc29uVnRPcHRpb25zKX1jYXRjaChhKXtyZXR1cm4gcihhKX1lLmxvYWRlZD17fTt2YXIgcz17fTtpZihpKXt2YXIgbD1pLmZpbmlzaCgpO2wmJihzLnJlc291cmNlVGltaW5nPXt9LHMucmVzb3VyY2VUaW1pbmdbbi5zb3VyY2VdPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobCkpKX1yKG51bGwscyl9KSl9fSxyLnByb3RvdHlwZS5jb2FsZXNjZT1mdW5jdGlvbigpeyJDb2FsZXNjaW5nIj09PXRoaXMuX3N0YXRlP3RoaXMuX3N0YXRlPSJJZGxlIjoiTmVlZHNMb2FkRGF0YSI9PT10aGlzLl9zdGF0ZSYmKHRoaXMuX3N0YXRlPSJDb2FsZXNjaW5nIix0aGlzLl9sb2FkRGF0YSgpKX0sci5wcm90b3R5cGUucmVsb2FkVGlsZT1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMubG9hZGVkLGk9dC51aWQ7cmV0dXJuIG4mJm5baV0/ZS5wcm90b3R5cGUucmVsb2FkVGlsZS5jYWxsKHRoaXMsdCxyKTp0aGlzLmxvYWRUaWxlKHQscil9LHIucHJvdG90eXBlLmxvYWRHZW9KU09OPWZ1bmN0aW9uKGUscil7aWYoZS5yZXF1ZXN0KXQuZ2V0SlNPTihlLnJlcXVlc3Qscik7ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIGUuZGF0YSlyZXR1cm4gcihuZXcgRXJyb3IoIklucHV0IGRhdGEgZ2l2ZW4gdG8gJyIrZS5zb3VyY2UrIicgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuIikpO3RyeXtyZXR1cm4gcihudWxsLEpTT04ucGFyc2UoZS5kYXRhKSl9Y2F0Y2godCl7cmV0dXJuIHIobmV3IEVycm9yKCJJbnB1dCBkYXRhIGdpdmVuIHRvICciK2Uuc291cmNlKyInIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpKX19fSxyLnByb3RvdHlwZS5yZW1vdmVTb3VyY2U9ZnVuY3Rpb24odCxlKXt0aGlzLl9wZW5kaW5nQ2FsbGJhY2smJnRoaXMuX3BlbmRpbmdDYWxsYmFjayhudWxsLHthYmFuZG9uZWQ6ITB9KSxlKCl9LHIucHJvdG90eXBlLmdldENsdXN0ZXJFeHBhbnNpb25ab29tPWZ1bmN0aW9uKHQsZSl7dHJ5e2UobnVsbCx0aGlzLl9nZW9KU09OSW5kZXguZ2V0Q2x1c3RlckV4cGFuc2lvblpvb20odC5jbHVzdGVySWQpKX1jYXRjaCh0KXtlKHQpfX0sci5wcm90b3R5cGUuZ2V0Q2x1c3RlckNoaWxkcmVuPWZ1bmN0aW9uKHQsZSl7dHJ5e2UobnVsbCx0aGlzLl9nZW9KU09OSW5kZXguZ2V0Q2hpbGRyZW4odC5jbHVzdGVySWQpKX1jYXRjaCh0KXtlKHQpfX0sci5wcm90b3R5cGUuZ2V0Q2x1c3RlckxlYXZlcz1mdW5jdGlvbih0LGUpe3RyeXtlKG51bGwsdGhpcy5fZ2VvSlNPTkluZGV4LmdldExlYXZlcyh0LmNsdXN0ZXJJZCx0LmxpbWl0LHQub2Zmc2V0KSl9Y2F0Y2godCl7ZSh0KX19LHJ9KGwpO3ZhciBBdD1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3RoaXMuc2VsZj1lLHRoaXMuYWN0b3I9bmV3IHQuQWN0b3IoZSx0aGlzKSx0aGlzLmxheWVySW5kZXhlcz17fSx0aGlzLmF2YWlsYWJsZUltYWdlcz17fSx0aGlzLndvcmtlclNvdXJjZVR5cGVzPXt2ZWN0b3I6bCxnZW9qc29uOmt0fSx0aGlzLndvcmtlclNvdXJjZXM9e30sdGhpcy5kZW1Xb3JrZXJTb3VyY2VzPXt9LHRoaXMuc2VsZi5yZWdpc3RlcldvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUpe2lmKHIud29ya2VyU291cmNlVHlwZXNbdF0pdGhyb3cgbmV3IEVycm9yKCdXb3JrZXIgc291cmNlIHdpdGggbmFtZSAiJyt0KyciIGFscmVhZHkgcmVnaXN0ZXJlZC4nKTtyLndvcmtlclNvdXJjZVR5cGVzW3RdPWV9LHRoaXMuc2VsZi5yZWdpc3RlclJUTFRleHRQbHVnaW49ZnVuY3Rpb24oZSl7aWYodC5wbHVnaW4uaXNQYXJzZWQoKSl0aHJvdyBuZXcgRXJyb3IoIlJUTCB0ZXh0IHBsdWdpbiBhbHJlYWR5IHJlZ2lzdGVyZWQuIik7dC5wbHVnaW4uYXBwbHlBcmFiaWNTaGFwaW5nPWUuYXBwbHlBcmFiaWNTaGFwaW5nLHQucGx1Z2luLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dD1lLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dCx0LnBsdWdpbi5wcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQ9ZS5wcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHR9fTtyZXR1cm4gQXQucHJvdG90eXBlLnNldFJlZmVycmVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWZlcnJlcj1lfSxBdC5wcm90b3R5cGUuc2V0SW1hZ2VzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4gaW4gdGhpcy5hdmFpbGFibGVJbWFnZXNbdF09ZSx0aGlzLndvcmtlclNvdXJjZXNbdF0pe3ZhciBpPXRoaXMud29ya2VyU291cmNlc1t0XVtuXTtmb3IodmFyIGEgaW4gaSlpW2FdLmF2YWlsYWJsZUltYWdlcz1lfXIoKX0sQXQucHJvdG90eXBlLnNldExheWVycz1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRMYXllckluZGV4KHQpLnJlcGxhY2UoZSkscigpfSxBdC5wcm90b3R5cGUudXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldExheWVySW5kZXgodCkudXBkYXRlKGUubGF5ZXJzLGUucmVtb3ZlZElkcykscigpfSxBdC5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5sb2FkVGlsZShlLHIpfSxBdC5wcm90b3R5cGUubG9hZERFTVRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0REVNV29ya2VyU291cmNlKHQsZS5zb3VyY2UpLmxvYWRUaWxlKGUscil9LEF0LnByb3RvdHlwZS5yZWxvYWRUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkucmVsb2FkVGlsZShlLHIpfSxBdC5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkuYWJvcnRUaWxlKGUscil9LEF0LnByb3RvdHlwZS5yZW1vdmVUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkucmVtb3ZlVGlsZShlLHIpfSxBdC5wcm90b3R5cGUucmVtb3ZlREVNVGlsZT1mdW5jdGlvbih0LGUpe3RoaXMuZ2V0REVNV29ya2VyU291cmNlKHQsZS5zb3VyY2UpLnJlbW92ZVRpbGUoZSl9LEF0LnByb3RvdHlwZS5yZW1vdmVTb3VyY2U9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMud29ya2VyU291cmNlc1t0XSYmdGhpcy53b3JrZXJTb3VyY2VzW3RdW2UudHlwZV0mJnRoaXMud29ya2VyU291cmNlc1t0XVtlLnR5cGVdW2Uuc291cmNlXSl7dmFyIG49dGhpcy53b3JrZXJTb3VyY2VzW3RdW2UudHlwZV1bZS5zb3VyY2VdO2RlbGV0ZSB0aGlzLndvcmtlclNvdXJjZXNbdF1bZS50eXBlXVtlLnNvdXJjZV0sdm9pZCAwIT09bi5yZW1vdmVTb3VyY2U/bi5yZW1vdmVTb3VyY2UoZSxyKTpyKCl9fSxBdC5wcm90b3R5cGUubG9hZFdvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUscil7dHJ5e3RoaXMuc2VsZi5pbXBvcnRTY3JpcHRzKGUudXJsKSxyKCl9Y2F0Y2godCl7cih0LnRvU3RyaW5nKCkpfX0sQXQucHJvdG90eXBlLnN5bmNSVExQbHVnaW5TdGF0ZT1mdW5jdGlvbihlLHIsbil7dHJ5e3QucGx1Z2luLnNldFN0YXRlKHIpO3ZhciBpPXQucGx1Z2luLmdldFBsdWdpblVSTCgpO2lmKHQucGx1Z2luLmlzTG9hZGVkKCkmJiF0LnBsdWdpbi5pc1BhcnNlZCgpJiZudWxsIT1pKXt0aGlzLnNlbGYuaW1wb3J0U2NyaXB0cyhpKTt2YXIgYT10LnBsdWdpbi5pc1BhcnNlZCgpO24oYT92b2lkIDA6bmV3IEVycm9yKCJSVEwgVGV4dCBQbHVnaW4gZmFpbGVkIHRvIGltcG9ydCBzY3JpcHRzIGZyb20gIitpKSxhKX19Y2F0Y2godCl7bih0LnRvU3RyaW5nKCkpfX0sQXQucHJvdG90eXBlLmdldEF2YWlsYWJsZUltYWdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmF2YWlsYWJsZUltYWdlc1t0XTtyZXR1cm4gZXx8KGU9W10pLGV9LEF0LnByb3RvdHlwZS5nZXRMYXllckluZGV4PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGF5ZXJJbmRleGVzW3RdO3JldHVybiBlfHwoZT10aGlzLmxheWVySW5kZXhlc1t0XT1uZXcgbiksZX0sQXQucHJvdG90eXBlLmdldFdvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcztpZih0aGlzLndvcmtlclNvdXJjZXNbdF18fCh0aGlzLndvcmtlclNvdXJjZXNbdF09e30pLHRoaXMud29ya2VyU291cmNlc1t0XVtlXXx8KHRoaXMud29ya2VyU291cmNlc1t0XVtlXT17fSksIXRoaXMud29ya2VyU291cmNlc1t0XVtlXVtyXSl7dmFyIGk9e3NlbmQ6ZnVuY3Rpb24oZSxyLGkpe24uYWN0b3Iuc2VuZChlLHIsaSx0KX19O3RoaXMud29ya2VyU291cmNlc1t0XVtlXVtyXT1uZXcgdGhpcy53b3JrZXJTb3VyY2VUeXBlc1tlXShpLHRoaXMuZ2V0TGF5ZXJJbmRleCh0KSx0aGlzLmdldEF2YWlsYWJsZUltYWdlcyh0KSl9cmV0dXJuIHRoaXMud29ya2VyU291cmNlc1t0XVtlXVtyXX0sQXQucHJvdG90eXBlLmdldERFTVdvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF18fCh0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF09e30pLHRoaXMuZGVtV29ya2VyU291cmNlc1t0XVtlXXx8KHRoaXMuZGVtV29ya2VyU291cmNlc1t0XVtlXT1uZXcgdSksdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdW2VdfSxBdC5wcm90b3R5cGUuZW5mb3JjZUNhY2hlU2l6ZUxpbWl0PWZ1bmN0aW9uKGUscil7dC5lbmZvcmNlQ2FjaGVTaXplTGltaXQocil9LCJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnZvaWQgMCE9PXQud2luZG93JiZ0LndpbmRvdyBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiYodC53aW5kb3cud29ya2VyPW5ldyBBdCh0LndpbmRvdykpLEF0fSkpLG4oMCwoZnVuY3Rpb24odCl7dmFyIGU9dC5jcmVhdGVDb21tb25qc01vZHVsZSgoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4hcih0KX1mdW5jdGlvbiByKHQpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93fHwidW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50PyJub3QgYSBicm93c2VyIjpBcnJheS5wcm90b3R5cGUmJkFycmF5LnByb3RvdHlwZS5ldmVyeSYmQXJyYXkucHJvdG90eXBlLmZpbHRlciYmQXJyYXkucHJvdG90eXBlLmZvckVhY2gmJkFycmF5LnByb3RvdHlwZS5pbmRleE9mJiZBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YmJkFycmF5LnByb3RvdHlwZS5tYXAmJkFycmF5LnByb3RvdHlwZS5zb21lJiZBcnJheS5wcm90b3R5cGUucmVkdWNlJiZBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQmJkFycmF5LmlzQXJyYXk/RnVuY3Rpb24ucHJvdG90eXBlJiZGdW5jdGlvbi5wcm90b3R5cGUuYmluZD9PYmplY3Qua2V5cyYmT2JqZWN0LmNyZWF0ZSYmT2JqZWN0LmdldFByb3RvdHlwZU9mJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyYmT2JqZWN0LmlzU2VhbGVkJiZPYmplY3QuaXNGcm96ZW4mJk9iamVjdC5pc0V4dGVuc2libGUmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmRlZmluZVByb3BlcnRpZXMmJk9iamVjdC5zZWFsJiZPYmplY3QuZnJlZXplJiZPYmplY3QucHJldmVudEV4dGVuc2lvbnM/IkpTT04iaW4gd2luZG93JiYicGFyc2UiaW4gSlNPTiYmInN0cmluZ2lmeSJpbiBKU09OP2Z1bmN0aW9uKCl7aWYoISgiV29ya2VyImluIHdpbmRvdyYmIkJsb2IiaW4gd2luZG93JiYiVVJMImluIHdpbmRvdykpcmV0dXJuITE7dmFyIHQsZSxyPW5ldyBCbG9iKFsiIl0se3R5cGU6InRleHQvamF2YXNjcmlwdCJ9KSxuPVVSTC5jcmVhdGVPYmplY3RVUkwocik7dHJ5e2U9bmV3IFdvcmtlcihuKSx0PSEwfWNhdGNoKGUpe3Q9ITF9ZSYmZS50ZXJtaW5hdGUoKTtyZXR1cm4gVVJMLnJldm9rZU9iamVjdFVSTChuKSx0fSgpPyJVaW50OENsYW1wZWRBcnJheSJpbiB3aW5kb3c/QXJyYXlCdWZmZXIuaXNWaWV3P2Z1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7dC53aWR0aD10LmhlaWdodD0xO3ZhciBlPXQuZ2V0Q29udGV4dCgiMmQiKTtpZighZSlyZXR1cm4hMTt2YXIgcj1lLmdldEltYWdlRGF0YSgwLDAsMSwxKTtyZXR1cm4gciYmci53aWR0aD09PXQud2lkdGh9KCk/ZnVuY3Rpb24odCl7dm9pZCAwPT09blt0XSYmKG5bdF09ZnVuY3Rpb24odCl7dmFyIHI9ZnVuY3Rpb24odCl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksbj1PYmplY3QuY3JlYXRlKGUud2ViR0xDb250ZXh0QXR0cmlidXRlcyk7cmV0dXJuIG4uZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdD10LHIucHJvYmFibHlTdXBwb3J0c0NvbnRleHQ/ci5wcm9iYWJseVN1cHBvcnRzQ29udGV4dCgid2ViZ2wiLG4pfHxyLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLG4pOnIuc3VwcG9ydHNDb250ZXh0P3Iuc3VwcG9ydHNDb250ZXh0KCJ3ZWJnbCIsbil8fHIuc3VwcG9ydHNDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLG4pOnIuZ2V0Q29udGV4dCgid2ViZ2wiLG4pfHxyLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIsbil9KHQpO2lmKCFyKXJldHVybiExO3ZhciBuPXIuY3JlYXRlU2hhZGVyKHIuVkVSVEVYX1NIQURFUik7aWYoIW58fHIuaXNDb250ZXh0TG9zdCgpKXJldHVybiExO3JldHVybiByLnNoYWRlclNvdXJjZShuLCJ2b2lkIG1haW4oKSB7fSIpLHIuY29tcGlsZVNoYWRlcihuKSwhMD09PXIuZ2V0U2hhZGVyUGFyYW1ldGVyKG4sci5DT01QSUxFX1NUQVRVUyl9KHQpKTtyZXR1cm4gblt0XX0odCYmdC5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KT92b2lkIDA6Imluc3VmZmljaWVudCBXZWJHTCBzdXBwb3J0IjoiaW5zdWZmaWNpZW50IENhbnZhcy9nZXRJbWFnZURhdGEgc3VwcG9ydCI6Imluc3VmZmljaWVudCBBcnJheUJ1ZmZlciBzdXBwb3J0IjoiaW5zdWZmaWNpZW50IFVpbnQ4Q2xhbXBlZEFycmF5IHN1cHBvcnQiOiJpbnN1ZmZpY2llbnQgd29ya2VyIHN1cHBvcnQiOiJpbnN1ZmZpY2llbnQgSlNPTiBzdXBwb3J0IjoiaW5zdWZmaWNpZW50IE9iamVjdCBzdXBwb3J0IjoiaW5zdWZmaWNpZW50IEZ1bmN0aW9uIHN1cHBvcnQiOiJpbnN1ZmZpY2VudCBBcnJheSBzdXBwb3J0In10LmV4cG9ydHM/dC5leHBvcnRzPWU6d2luZG93JiYod2luZG93Lm1hcGJveGdsPXdpbmRvdy5tYXBib3hnbHx8e30sd2luZG93Lm1hcGJveGdsLnN1cHBvcnRlZD1lLHdpbmRvdy5tYXBib3hnbC5ub3RTdXBwb3J0ZWRSZWFzb249cik7dmFyIG49e307ZS53ZWJHTENvbnRleHRBdHRyaWJ1dGVzPXthbnRpYWxpYXM6ITEsYWxwaGE6ITAsc3RlbmNpbDohMCxkZXB0aDohMH19KSkscj17Y3JlYXRlOmZ1bmN0aW9uKGUscixuKXt2YXIgaT10LndpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO3JldHVybiB2b2lkIDAhPT1yJiYoaS5jbGFzc05hbWU9ciksbiYmbi5hcHBlbmRDaGlsZChpKSxpfSxjcmVhdGVOUzpmdW5jdGlvbihlLHIpe3JldHVybiB0LndpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZSxyKX19LG49dC53aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlO2Z1bmN0aW9uIGkodCl7aWYoIW4pcmV0dXJuIHRbMF07Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodFtlXWluIG4pcmV0dXJuIHRbZV07cmV0dXJuIHRbMF19dmFyIGEsbz1pKFsidXNlclNlbGVjdCIsIk1velVzZXJTZWxlY3QiLCJXZWJraXRVc2VyU2VsZWN0IiwibXNVc2VyU2VsZWN0Il0pO3IuZGlzYWJsZURyYWc9ZnVuY3Rpb24oKXtuJiZvJiYoYT1uW29dLG5bb109Im5vbmUiKX0sci5lbmFibGVEcmFnPWZ1bmN0aW9uKCl7biYmbyYmKG5bb109YSl9O3ZhciBzPWkoWyJ0cmFuc2Zvcm0iLCJXZWJraXRUcmFuc2Zvcm0iXSk7ci5zZXRUcmFuc2Zvcm09ZnVuY3Rpb24odCxlKXt0LnN0eWxlW3NdPWV9O3ZhciBsPSExO3RyeXt2YXIgYz1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtsPSEwfX0pO3Qud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLGMsYyksdC53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsYyxjKX1jYXRjaCh0KXtsPSExfXIuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUscixuKXt2b2lkIDA9PT1uJiYobj17fSksInBhc3NpdmUiaW4gbiYmbD90LmFkZEV2ZW50TGlzdGVuZXIoZSxyLG4pOnQuYWRkRXZlbnRMaXN0ZW5lcihlLHIsbi5jYXB0dXJlKX0sci5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KSwicGFzc2l2ZSJpbiBuJiZsP3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHIsbik6dC5yZW1vdmVFdmVudExpc3RlbmVyKGUscixuLmNhcHR1cmUpfTt2YXIgdT1mdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSx0LndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdSwhMCl9O2Z1bmN0aW9uIGYodCl7dmFyIGU9dC51c2VySW1hZ2U7aWYoZSYmZS5yZW5kZXImJmUucmVuZGVyKCkpcmV0dXJuIHQuZGF0YS5yZXBsYWNlKG5ldyBVaW50OEFycmF5KGUuZGF0YS5idWZmZXIpKSwhMDtyZXR1cm4hMX1yLnN1cHByZXNzQ2xpY2s9ZnVuY3Rpb24oKXt0LndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdSwhMCksdC53aW5kb3cuc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0LndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdSwhMCl9KSwwKX0sci5tb3VzZVBvcz1mdW5jdGlvbihlLHIpe3ZhciBuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIG5ldyB0LlBvaW50KHIuY2xpZW50WC1uLmxlZnQtZS5jbGllbnRMZWZ0LHIuY2xpZW50WS1uLnRvcC1lLmNsaWVudFRvcCl9LHIudG91Y2hQb3M9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPVtdLGE9MDthPHIubGVuZ3RoO2ErKylpLnB1c2gobmV3IHQuUG9pbnQoclthXS5jbGllbnRYLW4ubGVmdC1lLmNsaWVudExlZnQsclthXS5jbGllbnRZLW4udG9wLWUuY2xpZW50VG9wKSk7cmV0dXJuIGl9LHIubW91c2VCdXR0b249ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXQud2luZG93Lkluc3RhbGxUcmlnZ2VyJiYyPT09ZS5idXR0b24mJmUuY3RybEtleSYmdC53aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiTUFDIik+PTA/MDplLmJ1dHRvbn0sci5yZW1vdmU9ZnVuY3Rpb24odCl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9O3ZhciBoPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoKXtlLmNhbGwodGhpcyksdGhpcy5pbWFnZXM9e30sdGhpcy51cGRhdGVkSW1hZ2VzPXt9LHRoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lPXt9LHRoaXMubG9hZGVkPSExLHRoaXMucmVxdWVzdG9ycz1bXSx0aGlzLnBhdHRlcm5zPXt9LHRoaXMuYXRsYXNJbWFnZT1uZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLmRpcnR5PSEwfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5pc0xvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvYWRlZH0sci5wcm90b3R5cGUuc2V0TG9hZGVkPWZ1bmN0aW9uKHQpe2lmKHRoaXMubG9hZGVkIT09dCYmKHRoaXMubG9hZGVkPXQsdCkpe2Zvcih2YXIgZT0wLHI9dGhpcy5yZXF1ZXN0b3JzO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxpPW4uaWRzLGE9bi5jYWxsYmFjazt0aGlzLl9ub3RpZnkoaSxhKX10aGlzLnJlcXVlc3RvcnM9W119fSxyLnByb3RvdHlwZS5nZXRJbWFnZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbWFnZXNbdF19LHIucHJvdG90eXBlLmFkZEltYWdlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmFsaWRhdGUodCxlKSYmKHRoaXMuaW1hZ2VzW3RdPWUpfSxyLnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj0hMDtyZXR1cm4gdGhpcy5fdmFsaWRhdGVTdHJldGNoKHIuc3RyZXRjaFgsci5kYXRhJiZyLmRhdGEud2lkdGgpfHwodGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdJbWFnZSAiJytlKyciIGhhcyBpbnZhbGlkICJzdHJldGNoWCIgdmFsdWUnKSkpLG49ITEpLHRoaXMuX3ZhbGlkYXRlU3RyZXRjaChyLnN0cmV0Y2hZLHIuZGF0YSYmci5kYXRhLmhlaWdodCl8fCh0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ0ltYWdlICInK2UrJyIgaGFzIGludmFsaWQgInN0cmV0Y2hZIiB2YWx1ZScpKSksbj0hMSksdGhpcy5fdmFsaWRhdGVDb250ZW50KHIuY29udGVudCxyKXx8KHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignSW1hZ2UgIicrZSsnIiBoYXMgaW52YWxpZCAiY29udGVudCIgdmFsdWUnKSkpLG49ITEpLG59LHIucHJvdG90eXBlLl92YWxpZGF0ZVN0cmV0Y2g9ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4hMDtmb3IodmFyIHI9MCxuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtpZihhWzBdPHJ8fGFbMV08YVswXXx8ZTxhWzFdKXJldHVybiExO3I9YVsxXX1yZXR1cm4hMH0sci5wcm90b3R5cGUuX3ZhbGlkYXRlQ29udGVudD1mdW5jdGlvbih0LGUpe3JldHVybiF0fHw0PT09dC5sZW5ndGgmJighKHRbMF08MHx8ZS5kYXRhLndpZHRoPHRbMF0pJiYoISh0WzFdPDB8fGUuZGF0YS5oZWlnaHQ8dFsxXSkmJighKHRbMl08MHx8ZS5kYXRhLndpZHRoPHRbMl0pJiYoISh0WzNdPDB8fGUuZGF0YS5oZWlnaHQ8dFszXSkmJighKHRbMl08dFswXSkmJiEodFszXTx0WzFdKSkpKSkpfSxyLnByb3RvdHlwZS51cGRhdGVJbWFnZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuaW1hZ2VzW3RdO2UudmVyc2lvbj1yLnZlcnNpb24rMSx0aGlzLmltYWdlc1t0XT1lLHRoaXMudXBkYXRlZEltYWdlc1t0XT0hMH0sci5wcm90b3R5cGUucmVtb3ZlSW1hZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbWFnZXNbdF07ZGVsZXRlIHRoaXMuaW1hZ2VzW3RdLGRlbGV0ZSB0aGlzLnBhdHRlcm5zW3RdLGUudXNlckltYWdlJiZlLnVzZXJJbWFnZS5vblJlbW92ZSYmZS51c2VySW1hZ2Uub25SZW1vdmUoKX0sci5wcm90b3R5cGUubGlzdEltYWdlcz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmltYWdlcyl9LHIucHJvdG90eXBlLmdldEltYWdlcz1mdW5jdGlvbih0LGUpe3ZhciByPSEwO2lmKCF0aGlzLmlzTG9hZGVkKCkpZm9yKHZhciBuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTt0aGlzLmltYWdlc1thXXx8KHI9ITEpfXRoaXMuaXNMb2FkZWQoKXx8cj90aGlzLl9ub3RpZnkodCxlKTp0aGlzLnJlcXVlc3RvcnMucHVzaCh7aWRzOnQsY2FsbGJhY2s6ZX0pfSxyLnByb3RvdHlwZS5fbm90aWZ5PWZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPXt9LGk9MCxhPWU7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO3RoaXMuaW1hZ2VzW29dfHx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInN0eWxlaW1hZ2VtaXNzaW5nIix7aWQ6b30pKTt2YXIgcz10aGlzLmltYWdlc1tvXTtzP25bb109e2RhdGE6cy5kYXRhLmNsb25lKCkscGl4ZWxSYXRpbzpzLnBpeGVsUmF0aW8sc2RmOnMuc2RmLHZlcnNpb246cy52ZXJzaW9uLHN0cmV0Y2hYOnMuc3RyZXRjaFgsc3RyZXRjaFk6cy5zdHJldGNoWSxjb250ZW50OnMuY29udGVudCxoYXNSZW5kZXJDYWxsYmFjazpCb29sZWFuKHMudXNlckltYWdlJiZzLnVzZXJJbWFnZS5yZW5kZXIpfTp0Lndhcm5PbmNlKCdJbWFnZSAiJytvKyciIGNvdWxkIG5vdCBiZSBsb2FkZWQuIFBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgYWRkZWQgdGhlIGltYWdlIHdpdGggbWFwLmFkZEltYWdlKCkgb3IgYSAic3ByaXRlIiBwcm9wZXJ0eSBpbiB5b3VyIHN0eWxlLiBZb3UgY2FuIHByb3ZpZGUgbWlzc2luZyBpbWFnZXMgYnkgbGlzdGVuaW5nIGZvciB0aGUgInN0eWxlaW1hZ2VtaXNzaW5nIiBtYXAgZXZlbnQuJyl9cihudWxsLG4pfSxyLnByb3RvdHlwZS5nZXRQaXhlbFNpemU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmF0bGFzSW1hZ2U7cmV0dXJue3dpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fX0sci5wcm90b3R5cGUuZ2V0UGF0dGVybj1mdW5jdGlvbihlKXt2YXIgcj10aGlzLnBhdHRlcm5zW2VdLG49dGhpcy5nZXRJbWFnZShlKTtpZighbilyZXR1cm4gbnVsbDtpZihyJiZyLnBvc2l0aW9uLnZlcnNpb249PT1uLnZlcnNpb24pcmV0dXJuIHIucG9zaXRpb247aWYocilyLnBvc2l0aW9uLnZlcnNpb249bi52ZXJzaW9uO2Vsc2V7dmFyIGk9e3c6bi5kYXRhLndpZHRoKzIsaDpuLmRhdGEuaGVpZ2h0KzIseDowLHk6MH0sYT1uZXcgdC5JbWFnZVBvc2l0aW9uKGksbik7dGhpcy5wYXR0ZXJuc1tlXT17YmluOmkscG9zaXRpb246YX19cmV0dXJuIHRoaXMuX3VwZGF0ZVBhdHRlcm5BdGxhcygpLHRoaXMucGF0dGVybnNbZV0ucG9zaXRpb259LHIucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSl7dmFyIHI9ZS5nbDt0aGlzLmF0bGFzVGV4dHVyZT90aGlzLmRpcnR5JiYodGhpcy5hdGxhc1RleHR1cmUudXBkYXRlKHRoaXMuYXRsYXNJbWFnZSksdGhpcy5kaXJ0eT0hMSk6dGhpcy5hdGxhc1RleHR1cmU9bmV3IHQuVGV4dHVyZShlLHRoaXMuYXRsYXNJbWFnZSxyLlJHQkEpLHRoaXMuYXRsYXNUZXh0dXJlLmJpbmQoci5MSU5FQVIsci5DTEFNUF9UT19FREdFKX0sci5wcm90b3R5cGUuX3VwZGF0ZVBhdHRlcm5BdGxhcz1mdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0aGlzLnBhdHRlcm5zKWUucHVzaCh0aGlzLnBhdHRlcm5zW3JdLmJpbik7dmFyIG49dC5wb3RwYWNrKGUpLGk9bi53LGE9bi5oLG89dGhpcy5hdGxhc0ltYWdlO2Zvcih2YXIgcyBpbiBvLnJlc2l6ZSh7d2lkdGg6aXx8MSxoZWlnaHQ6YXx8MX0pLHRoaXMucGF0dGVybnMpe3ZhciBsPXRoaXMucGF0dGVybnNbc10uYmluLGM9bC54KzEsdT1sLnkrMSxmPXRoaXMuaW1hZ2VzW3NdLmRhdGEsaD1mLndpZHRoLHA9Zi5oZWlnaHQ7dC5SR0JBSW1hZ2UuY29weShmLG8se3g6MCx5OjB9LHt4OmMseTp1fSx7d2lkdGg6aCxoZWlnaHQ6cH0pLHQuUkdCQUltYWdlLmNvcHkoZixvLHt4OjAseTpwLTF9LHt4OmMseTp1LTF9LHt3aWR0aDpoLGhlaWdodDoxfSksdC5SR0JBSW1hZ2UuY29weShmLG8se3g6MCx5OjB9LHt4OmMseTp1K3B9LHt3aWR0aDpoLGhlaWdodDoxfSksdC5SR0JBSW1hZ2UuY29weShmLG8se3g6aC0xLHk6MH0se3g6Yy0xLHk6dX0se3dpZHRoOjEsaGVpZ2h0OnB9KSx0LlJHQkFJbWFnZS5jb3B5KGYsbyx7eDowLHk6MH0se3g6YytoLHk6dX0se3dpZHRoOjEsaGVpZ2h0OnB9KX10aGlzLmRpcnR5PSEwfSxyLnByb3RvdHlwZS5iZWdpbkZyYW1lPWZ1bmN0aW9uKCl7dGhpcy5jYWxsYmFja0Rpc3BhdGNoZWRUaGlzRnJhbWU9e319LHIucHJvdG90eXBlLmRpc3BhdGNoUmVuZGVyQ2FsbGJhY2tzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07aWYoIXRoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lW25dKXt0aGlzLmNhbGxiYWNrRGlzcGF0Y2hlZFRoaXNGcmFtZVtuXT0hMDt2YXIgaT10aGlzLmltYWdlc1tuXTtmKGkpJiZ0aGlzLnVwZGF0ZUltYWdlKG4saSl9fX0scn0odC5FdmVudGVkKTt2YXIgcD1nLGQ9ZyxtPTFlMjA7ZnVuY3Rpb24gZyh0LGUscixuLGksYSl7dGhpcy5mb250U2l6ZT10fHwyNCx0aGlzLmJ1ZmZlcj12b2lkIDA9PT1lPzM6ZSx0aGlzLmN1dG9mZj1ufHwuMjUsdGhpcy5mb250RmFtaWx5PWl8fCJzYW5zLXNlcmlmIix0aGlzLmZvbnRXZWlnaHQ9YXx8Im5vcm1hbCIsdGhpcy5yYWRpdXM9cnx8ODt2YXIgbz10aGlzLnNpemU9dGhpcy5mb250U2l6ZSsyKnRoaXMuYnVmZmVyO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHRoaXMuY2FudmFzLndpZHRoPXRoaXMuY2FudmFzLmhlaWdodD1vLHRoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIiksdGhpcy5jdHguZm9udD10aGlzLmZvbnRXZWlnaHQrIiAiK3RoaXMuZm9udFNpemUrInB4ICIrdGhpcy5mb250RmFtaWx5LHRoaXMuY3R4LnRleHRCYXNlbGluZT0ibWlkZGxlIix0aGlzLmN0eC5maWxsU3R5bGU9ImJsYWNrIix0aGlzLmdyaWRPdXRlcj1uZXcgRmxvYXQ2NEFycmF5KG8qbyksdGhpcy5ncmlkSW5uZXI9bmV3IEZsb2F0NjRBcnJheShvKm8pLHRoaXMuZj1uZXcgRmxvYXQ2NEFycmF5KG8pLHRoaXMuZD1uZXcgRmxvYXQ2NEFycmF5KG8pLHRoaXMuej1uZXcgRmxvYXQ2NEFycmF5KG8rMSksdGhpcy52PW5ldyBJbnQxNkFycmF5KG8pLHRoaXMubWlkZGxlPU1hdGgucm91bmQoby8yKihuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkdlY2tvLyIpPj0wPzEuMjoxKSl9ZnVuY3Rpb24gdih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9MDtzPGU7cysrKXtmb3IodmFyIGw9MDtsPHI7bCsrKW5bbF09dFtsKmUrc107Zm9yKHkobixpLGEsbyxyKSxsPTA7bDxyO2wrKyl0W2wqZStzXT1pW2xdfWZvcihsPTA7bDxyO2wrKyl7Zm9yKHM9MDtzPGU7cysrKW5bc109dFtsKmUrc107Zm9yKHkobixpLGEsbyxlKSxzPTA7czxlO3MrKyl0W2wqZStzXT1NYXRoLnNxcnQoaVtzXSl9fWZ1bmN0aW9uIHkodCxlLHIsbixpKXtyWzBdPTAsblswXT0tbSxuWzFdPSttO2Zvcih2YXIgYT0xLG89MDthPGk7YSsrKXtmb3IodmFyIHM9KHRbYV0rYSphLSh0W3Jbb11dK3Jbb10qcltvXSkpLygyKmEtMipyW29dKTtzPD1uW29dOylvLS0scz0odFthXSthKmEtKHRbcltvXV0rcltvXSpyW29dKSkvKDIqYS0yKnJbb10pO3JbKytvXT1hLG5bb109cyxuW28rMV09K219Zm9yKGE9MCxvPTA7YTxpO2ErKyl7Zm9yKDtuW28rMV08YTspbysrO2VbYV09KGEtcltvXSkqKGEtcltvXSkrdFtyW29dXX19Zy5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0KXt0aGlzLmN0eC5jbGVhclJlY3QoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHRoaXMuY3R4LmZpbGxUZXh0KHQsdGhpcy5idWZmZXIsdGhpcy5taWRkbGUpO2Zvcih2YXIgZT10aGlzLmN0eC5nZXRJbWFnZURhdGEoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHRoaXMuc2l6ZSp0aGlzLnNpemUpLG49MDtuPHRoaXMuc2l6ZSp0aGlzLnNpemU7bisrKXt2YXIgaT1lLmRhdGFbNCpuKzNdLzI1NTt0aGlzLmdyaWRPdXRlcltuXT0xPT09aT8wOjA9PT1pP206TWF0aC5wb3coTWF0aC5tYXgoMCwuNS1pKSwyKSx0aGlzLmdyaWRJbm5lcltuXT0xPT09aT9tOjA9PT1pPzA6TWF0aC5wb3coTWF0aC5tYXgoMCxpLS41KSwyKX1mb3Iodih0aGlzLmdyaWRPdXRlcix0aGlzLnNpemUsdGhpcy5zaXplLHRoaXMuZix0aGlzLmQsdGhpcy52LHRoaXMueiksdih0aGlzLmdyaWRJbm5lcix0aGlzLnNpemUsdGhpcy5zaXplLHRoaXMuZix0aGlzLmQsdGhpcy52LHRoaXMueiksbj0wO248dGhpcy5zaXplKnRoaXMuc2l6ZTtuKyspe3ZhciBhPXRoaXMuZ3JpZE91dGVyW25dLXRoaXMuZ3JpZElubmVyW25dO3Jbbl09TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyNTUtMjU1KihhL3RoaXMucmFkaXVzK3RoaXMuY3V0b2ZmKSkpKX1yZXR1cm4gcn0scC5kZWZhdWx0PWQ7dmFyIHg9ZnVuY3Rpb24odCxlKXt0aGlzLnJlcXVlc3RNYW5hZ2VyPXQsdGhpcy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk9ZSx0aGlzLmVudHJpZXM9e319O3gucHJvdG90eXBlLnNldFVSTD1mdW5jdGlvbih0KXt0aGlzLnVybD10fSx4LnByb3RvdHlwZS5nZXRHbHlwaHM9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLGk9W107Zm9yKHZhciBhIGluIGUpZm9yKHZhciBvPTAscz1lW2FdO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTtpLnB1c2goe3N0YWNrOmEsaWQ6bH0pfXQuYXN5bmNBbGwoaSwoZnVuY3Rpb24odCxlKXt2YXIgcj10LnN0YWNrLGk9dC5pZCxhPW4uZW50cmllc1tyXTthfHwoYT1uLmVudHJpZXNbcl09e2dseXBoczp7fSxyZXF1ZXN0czp7fSxyYW5nZXM6e319KTt2YXIgbz1hLmdseXBoc1tpXTtpZih2b2lkIDA9PT1vKXtpZihvPW4uX3RpbnlTREYoYSxyLGkpKXJldHVybiBhLmdseXBoc1tpXT1vLHZvaWQgZShudWxsLHtzdGFjazpyLGlkOmksZ2x5cGg6b30pO3ZhciBzPU1hdGguZmxvb3IoaS8yNTYpO2lmKDI1NipzPjY1NTM1KWUobmV3IEVycm9yKCJnbHlwaHMgPiA2NTUzNSBub3Qgc3VwcG9ydGVkIikpO2Vsc2UgaWYoYS5yYW5nZXNbc10pZShudWxsLHtzdGFjazpyLGlkOmksZ2x5cGg6b30pO2Vsc2V7dmFyIGw9YS5yZXF1ZXN0c1tzXTtsfHwobD1hLnJlcXVlc3RzW3NdPVtdLHgubG9hZEdseXBoUmFuZ2UocixzLG4udXJsLG4ucmVxdWVzdE1hbmFnZXIsKGZ1bmN0aW9uKHQsZSl7aWYoZSl7Zm9yKHZhciByIGluIGUpbi5fZG9lc0NoYXJTdXBwb3J0TG9jYWxHbHlwaCgrcil8fChhLmdseXBoc1srcl09ZVsrcl0pO2EucmFuZ2VzW3NdPSEwfWZvcih2YXIgaT0wLG89bDtpPG8ubGVuZ3RoO2krPTEpeygwLG9baV0pKHQsZSl9ZGVsZXRlIGEucmVxdWVzdHNbc119KSkpLGwucHVzaCgoZnVuY3Rpb24odCxuKXt0P2UodCk6biYmZShudWxsLHtzdGFjazpyLGlkOmksZ2x5cGg6bltpXXx8bnVsbH0pfSkpfX1lbHNlIGUobnVsbCx7c3RhY2s6cixpZDppLGdseXBoOm99KX0pLChmdW5jdGlvbih0LGUpe2lmKHQpcih0KTtlbHNlIGlmKGUpe2Zvcih2YXIgbj17fSxpPTAsYT1lO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXSxzPW8uc3RhY2ssbD1vLmlkLGM9by5nbHlwaDsobltzXXx8KG5bc109e30pKVtsXT1jJiZ7aWQ6Yy5pZCxiaXRtYXA6Yy5iaXRtYXAuY2xvbmUoKSxtZXRyaWNzOmMubWV0cmljc319cihudWxsLG4pfX0pKX0seC5wcm90b3R5cGUuX2RvZXNDaGFyU3VwcG9ydExvY2FsR2x5cGg9ZnVuY3Rpb24oZSl7cmV0dXJuISF0aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSYmKHQuaXNDaGFyWyJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIl0oZSl8fHQuaXNDaGFyWyJIYW5ndWwgU3lsbGFibGVzIl0oZSl8fHQuaXNDaGFyLkhpcmFnYW5hKGUpfHx0LmlzQ2hhci5LYXRha2FuYShlKSl9LHgucHJvdG90eXBlLl90aW55U0RGPWZ1bmN0aW9uKGUscixuKXt2YXIgaT10aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseTtpZihpJiZ0aGlzLl9kb2VzQ2hhclN1cHBvcnRMb2NhbEdseXBoKG4pKXt2YXIgYT1lLnRpbnlTREY7aWYoIWEpe3ZhciBvPSI0MDAiOy9ib2xkL2kudGVzdChyKT9vPSI5MDAiOi9tZWRpdW0vaS50ZXN0KHIpP289IjUwMCI6L2xpZ2h0L2kudGVzdChyKSYmKG89IjIwMCIpLGE9ZS50aW55U0RGPW5ldyB4LlRpbnlTREYoMjQsMyw4LC4yNSxpLG8pfXJldHVybntpZDpuLGJpdG1hcDpuZXcgdC5BbHBoYUltYWdlKHt3aWR0aDozMCxoZWlnaHQ6MzB9LGEuZHJhdyhTdHJpbmcuZnJvbUNoYXJDb2RlKG4pKSksbWV0cmljczp7d2lkdGg6MjQsaGVpZ2h0OjI0LGxlZnQ6MCx0b3A6LTgsYWR2YW5jZToyNH19fX0seC5sb2FkR2x5cGhSYW5nZT1mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvPTI1NipyLHM9bysyNTUsbD1pLnRyYW5zZm9ybVJlcXVlc3QoaS5ub3JtYWxpemVHbHlwaHNVUkwobikucmVwbGFjZSgie2ZvbnRzdGFja30iLGUpLnJlcGxhY2UoIntyYW5nZX0iLG8rIi0iK3MpLHQuUmVzb3VyY2VUeXBlLkdseXBocyk7dC5nZXRBcnJheUJ1ZmZlcihsLChmdW5jdGlvbihlLHIpe2lmKGUpYShlKTtlbHNlIGlmKHIpe2Zvcih2YXIgbj17fSxpPTAsbz10LnBhcnNlR2x5cGhQQkYocik7aTxvLmxlbmd0aDtpKz0xKXt2YXIgcz1vW2ldO25bcy5pZF09c31hKG51bGwsbil9fSkpfSx4LlRpbnlTREY9cDt2YXIgYj1mdW5jdGlvbigpe3RoaXMuc3BlY2lmaWNhdGlvbj10LnN0eWxlU3BlYy5saWdodC5wb3NpdGlvbn07Yi5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbihlLHIpe3JldHVybiB0LnNwaGVyaWNhbFRvQ2FydGVzaWFuKGUuZXhwcmVzc2lvbi5ldmFsdWF0ZShyKSl9LGIucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKGUscixuKXtyZXR1cm57eDp0Lm51bWJlcihlLngsci54LG4pLHk6dC5udW1iZXIoZS55LHIueSxuKSx6OnQubnVtYmVyKGUueixyLnosbil9fTt2YXIgXz1uZXcgdC5Qcm9wZXJ0aWVzKHthbmNob3I6bmV3IHQuRGF0YUNvbnN0YW50UHJvcGVydHkodC5zdHlsZVNwZWMubGlnaHQuYW5jaG9yKSxwb3NpdGlvbjpuZXcgYixjb2xvcjpuZXcgdC5EYXRhQ29uc3RhbnRQcm9wZXJ0eSh0LnN0eWxlU3BlYy5saWdodC5jb2xvciksaW50ZW5zaXR5Om5ldyB0LkRhdGFDb25zdGFudFByb3BlcnR5KHQuc3R5bGVTcGVjLmxpZ2h0LmludGVuc2l0eSl9KSx3PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocil7ZS5jYWxsKHRoaXMpLHRoaXMuX3RyYW5zaXRpb25hYmxlPW5ldyB0LlRyYW5zaXRpb25hYmxlKF8pLHRoaXMuc2V0TGlnaHQociksdGhpcy5fdHJhbnNpdGlvbmluZz10aGlzLl90cmFuc2l0aW9uYWJsZS51bnRyYW5zaXRpb25lZCgpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXRMaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uYWJsZS5zZXJpYWxpemUoKX0sci5wcm90b3R5cGUuc2V0TGlnaHQ9ZnVuY3Rpb24oZSxyKXtpZih2b2lkIDA9PT1yJiYocj17fSksIXRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVMaWdodCxlLHIpKWZvcih2YXIgbiBpbiBlKXt2YXIgaT1lW25dO3QuZW5kc1dpdGgobiwiLXRyYW5zaXRpb24iKT90aGlzLl90cmFuc2l0aW9uYWJsZS5zZXRUcmFuc2l0aW9uKG4uc2xpY2UoMCwtIi10cmFuc2l0aW9uIi5sZW5ndGgpLGkpOnRoaXMuX3RyYW5zaXRpb25hYmxlLnNldFZhbHVlKG4saSl9fSxyLnByb3RvdHlwZS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbih0KXt0aGlzLl90cmFuc2l0aW9uaW5nPXRoaXMuX3RyYW5zaXRpb25hYmxlLnRyYW5zaXRpb25lZCh0LHRoaXMuX3RyYW5zaXRpb25pbmcpfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25pbmcuaGFzVHJhbnNpdGlvbigpfSxyLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbih0KXt0aGlzLnByb3BlcnRpZXM9dGhpcy5fdHJhbnNpdGlvbmluZy5wb3NzaWJseUV2YWx1YXRlKHQpfSxyLnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybighbnx8ITEhPT1uLnZhbGlkYXRlKSYmdC5lbWl0VmFsaWRhdGlvbkVycm9ycyh0aGlzLGUuY2FsbCh0LnZhbGlkYXRlU3R5bGUsdC5leHRlbmQoe3ZhbHVlOnIsc3R5bGU6e2dseXBoczohMCxzcHJpdGU6ITB9LHN0eWxlU3BlYzp0LnN0eWxlU3BlY30pKSl9LHJ9KHQuRXZlbnRlZCksVD1mdW5jdGlvbih0LGUpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMubmV4dFJvdz0wLHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLndpZHRoKnRoaXMuaGVpZ2h0KSx0aGlzLmRhc2hFbnRyeT17fX07VC5wcm90b3R5cGUuZ2V0RGFzaD1mdW5jdGlvbih0LGUpe3ZhciByPXQuam9pbigiLCIpK1N0cmluZyhlKTtyZXR1cm4gdGhpcy5kYXNoRW50cnlbcl18fCh0aGlzLmRhc2hFbnRyeVtyXT10aGlzLmFkZERhc2godCxlKSksdGhpcy5kYXNoRW50cnlbcl19LFQucHJvdG90eXBlLmdldERhc2hSYW5nZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtdLGk9dC5sZW5ndGglMj09MT8tdFt0Lmxlbmd0aC0xXSpyOjAsYT10WzBdKnIsbz0hMDtuLnB1c2goe2xlZnQ6aSxyaWdodDphLGlzRGFzaDpvLHplcm9MZW5ndGg6MD09PXRbMF19KTtmb3IodmFyIHM9dFswXSxsPTE7bDx0Lmxlbmd0aDtsKyspe289IW87dmFyIGM9dFtsXTtpPXMqcixhPShzKz1jKSpyLG4ucHVzaCh7bGVmdDppLHJpZ2h0OmEsaXNEYXNoOm8semVyb0xlbmd0aDowPT09Y30pfXJldHVybiBufSxULnByb3RvdHlwZS5hZGRSb3VuZERhc2g9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1lLzIsaT0tcjtpPD1yO2krKylmb3IodmFyIGE9dGhpcy5uZXh0Um93K3IraSxvPXRoaXMud2lkdGgqYSxzPTAsbD10W3NdLGM9MDtjPHRoaXMud2lkdGg7YysrKXtjL2wucmlnaHQ+MSYmKGw9dFsrK3NdKTt2YXIgdT1NYXRoLmFicyhjLWwubGVmdCksZj1NYXRoLmFicyhjLWwucmlnaHQpLGg9TWF0aC5taW4odSxmKSxwPXZvaWQgMCxkPWkvcioobisxKTtpZihsLmlzRGFzaCl7dmFyIG09bi1NYXRoLmFicyhkKTtwPU1hdGguc3FydChoKmgrbSptKX1lbHNlIHA9bi1NYXRoLnNxcnQoaCpoK2QqZCk7dGhpcy5kYXRhW28rY109TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUscCsxMjgpKX19LFQucHJvdG90eXBlLmFkZFJlZ3VsYXJEYXNoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10W2VdLG49dFtlKzFdO3IuemVyb0xlbmd0aD90LnNwbGljZShlLDEpOm4mJm4uaXNEYXNoPT09ci5pc0Rhc2gmJihuLmxlZnQ9ci5sZWZ0LHQuc3BsaWNlKGUsMSkpfXZhciBpPXRbMF0sYT10W3QubGVuZ3RoLTFdO2kuaXNEYXNoPT09YS5pc0Rhc2gmJihpLmxlZnQ9YS5sZWZ0LXRoaXMud2lkdGgsYS5yaWdodD1pLnJpZ2h0K3RoaXMud2lkdGgpO2Zvcih2YXIgbz10aGlzLndpZHRoKnRoaXMubmV4dFJvdyxzPTAsbD10W3NdLGM9MDtjPHRoaXMud2lkdGg7YysrKXtjL2wucmlnaHQ+MSYmKGw9dFsrK3NdKTt2YXIgdT1NYXRoLmFicyhjLWwubGVmdCksZj1NYXRoLmFicyhjLWwucmlnaHQpLGg9TWF0aC5taW4odSxmKSxwPWwuaXNEYXNoP2g6LWg7dGhpcy5kYXRhW28rY109TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUscCsxMjgpKX19LFQucHJvdG90eXBlLmFkZERhc2g9ZnVuY3Rpb24oZSxyKXt2YXIgbj1yPzc6MCxpPTIqbisxO2lmKHRoaXMubmV4dFJvdytpPnRoaXMuaGVpZ2h0KXJldHVybiB0Lndhcm5PbmNlKCJMaW5lQXRsYXMgb3V0IG9mIHNwYWNlIiksbnVsbDtmb3IodmFyIGE9MCxvPTA7bzxlLmxlbmd0aDtvKyspYSs9ZVtvXTtpZigwIT09YSl7dmFyIHM9dGhpcy53aWR0aC9hLGw9dGhpcy5nZXREYXNoUmFuZ2VzKGUsdGhpcy53aWR0aCxzKTtyP3RoaXMuYWRkUm91bmREYXNoKGwscyxuKTp0aGlzLmFkZFJlZ3VsYXJEYXNoKGwpfXZhciBjPXt5Oih0aGlzLm5leHRSb3crbisuNSkvdGhpcy5oZWlnaHQsaGVpZ2h0OjIqbi90aGlzLmhlaWdodCx3aWR0aDphfTtyZXR1cm4gdGhpcy5uZXh0Um93Kz1pLHRoaXMuZGlydHk9ITAsY30sVC5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXt2YXIgZT10LmdsO3RoaXMudGV4dHVyZT8oZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSx0aGlzLmRpcnR5JiYodGhpcy5kaXJ0eT0hMSxlLnRleFN1YkltYWdlMkQoZS5URVhUVVJFXzJELDAsMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsZS5BTFBIQSxlLlVOU0lHTkVEX0JZVEUsdGhpcy5kYXRhKSkpOih0aGlzLnRleHR1cmU9ZS5jcmVhdGVUZXh0dXJlKCksZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9XUkFQX1MsZS5SRVBFQVQpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX1dSQVBfVCxlLlJFUEVBVCksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUlOX0ZJTFRFUixlLkxJTkVBUiksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUFHX0ZJTFRFUixlLkxJTkVBUiksZS50ZXhJbWFnZTJEKGUuVEVYVFVSRV8yRCwwLGUuQUxQSEEsdGhpcy53aWR0aCx0aGlzLmhlaWdodCwwLGUuQUxQSEEsZS5VTlNJR05FRF9CWVRFLHRoaXMuZGF0YSkpfTt2YXIgaz1mdW5jdGlvbiBlKHIsbil7dGhpcy53b3JrZXJQb29sPXIsdGhpcy5hY3RvcnM9W10sdGhpcy5jdXJyZW50QWN0b3I9MCx0aGlzLmlkPXQudW5pcXVlSWQoKTtmb3IodmFyIGk9dGhpcy53b3JrZXJQb29sLmFjcXVpcmUodGhpcy5pZCksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9bmV3IGUuQWN0b3IobyxuLHRoaXMuaWQpO3MubmFtZT0iV29ya2VyICIrYSx0aGlzLmFjdG9ycy5wdXNoKHMpfX07ZnVuY3Rpb24gQShlLHIsbil7dmFyIGk9ZnVuY3Rpb24oaSxhKXtpZihpKXJldHVybiBuKGkpO2lmKGEpe3ZhciBvPXQucGljayh0LmV4dGVuZChhLGUpLFsidGlsZXMiLCJtaW56b29tIiwibWF4em9vbSIsImF0dHJpYnV0aW9uIiwibWFwYm94X2xvZ28iLCJib3VuZHMiLCJzY2hlbWUiLCJ0aWxlU2l6ZSIsImVuY29kaW5nIl0pO2EudmVjdG9yX2xheWVycyYmKG8udmVjdG9yTGF5ZXJzPWEudmVjdG9yX2xheWVycyxvLnZlY3RvckxheWVySWRzPW8udmVjdG9yTGF5ZXJzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSkpLG8udGlsZXM9ci5jYW5vbmljYWxpemVUaWxlc2V0KG8sZS51cmwpLG4obnVsbCxvKX19O3JldHVybiBlLnVybD90LmdldEpTT04oci50cmFuc2Zvcm1SZXF1ZXN0KHIubm9ybWFsaXplU291cmNlVVJMKGUudXJsKSx0LlJlc291cmNlVHlwZS5Tb3VyY2UpLGkpOnQuYnJvd3Nlci5mcmFtZSgoZnVuY3Rpb24oKXtyZXR1cm4gaShudWxsLGUpfSkpfWsucHJvdG90eXBlLmJyb2FkY2FzdD1mdW5jdGlvbihlLHIsbil7bj1ufHxmdW5jdGlvbigpe30sdC5hc3luY0FsbCh0aGlzLmFjdG9ycywoZnVuY3Rpb24odCxuKXt0LnNlbmQoZSxyLG4pfSksbil9LGsucHJvdG90eXBlLmdldEFjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudEFjdG9yPSh0aGlzLmN1cnJlbnRBY3RvcisxKSV0aGlzLmFjdG9ycy5sZW5ndGgsdGhpcy5hY3RvcnNbdGhpcy5jdXJyZW50QWN0b3JdfSxrLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLmFjdG9ycy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnJlbW92ZSgpfSkpLHRoaXMuYWN0b3JzPVtdLHRoaXMud29ya2VyUG9vbC5yZWxlYXNlKHRoaXMuaWQpfSxrLkFjdG9yPXQuQWN0b3I7dmFyIE09ZnVuY3Rpb24oZSxyLG4pe3RoaXMuYm91bmRzPXQuTG5nTGF0Qm91bmRzLmNvbnZlcnQodGhpcy52YWxpZGF0ZUJvdW5kcyhlKSksdGhpcy5taW56b29tPXJ8fDAsdGhpcy5tYXh6b29tPW58fDI0fTtNLnByb3RvdHlwZS52YWxpZGF0ZUJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmND09PXQubGVuZ3RoP1tNYXRoLm1heCgtMTgwLHRbMF0pLE1hdGgubWF4KC05MCx0WzFdKSxNYXRoLm1pbigxODAsdFsyXSksTWF0aC5taW4oOTAsdFszXSldOlstMTgwLC05MCwxODAsOTBdfSxNLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihlKXt2YXIgcj1NYXRoLnBvdygyLGUueiksbj1NYXRoLmZsb29yKHQubWVyY2F0b3JYZnJvbUxuZyh0aGlzLmJvdW5kcy5nZXRXZXN0KCkpKnIpLGk9TWF0aC5mbG9vcih0Lm1lcmNhdG9yWWZyb21MYXQodGhpcy5ib3VuZHMuZ2V0Tm9ydGgoKSkqciksYT1NYXRoLmNlaWwodC5tZXJjYXRvclhmcm9tTG5nKHRoaXMuYm91bmRzLmdldEVhc3QoKSkqciksbz1NYXRoLmNlaWwodC5tZXJjYXRvcllmcm9tTGF0KHRoaXMuYm91bmRzLmdldFNvdXRoKCkpKnIpO3JldHVybiBlLng+PW4mJmUueDxhJiZlLnk+PWkmJmUueTxvfTt2YXIgUz1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2lmKGUuY2FsbCh0aGlzKSx0aGlzLmlkPXIsdGhpcy5kaXNwYXRjaGVyPWksdGhpcy50eXBlPSJ2ZWN0b3IiLHRoaXMubWluem9vbT0wLHRoaXMubWF4em9vbT0yMix0aGlzLnNjaGVtZT0ieHl6Iix0aGlzLnRpbGVTaXplPTUxMix0aGlzLnJlcGFyc2VPdmVyc2NhbGVkPSEwLHRoaXMuaXNUaWxlQ2xpcHBlZD0hMCx0aGlzLl9sb2FkZWQ9ITEsdC5leHRlbmQodGhpcyx0LnBpY2sobixbInVybCIsInNjaGVtZSIsInRpbGVTaXplIiwicHJvbW90ZUlkIl0pKSx0aGlzLl9vcHRpb25zPXQuZXh0ZW5kKHt0eXBlOiJ2ZWN0b3IifSxuKSx0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmc9bi5jb2xsZWN0UmVzb3VyY2VUaW1pbmcsNTEyIT09dGhpcy50aWxlU2l6ZSl0aHJvdyBuZXcgRXJyb3IoInZlY3RvciB0aWxlIHNvdXJjZXMgbXVzdCBoYXZlIGEgdGlsZVNpemUgb2YgNTEyIik7dGhpcy5zZXRFdmVudGVkUGFyZW50KGEpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9sb2FkZWQ9ITEsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzb3VyY2UifSkpLHRoaXMuX3RpbGVKU09OUmVxdWVzdD1BKHRoaXMuX29wdGlvbnMsdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLChmdW5jdGlvbihyLG4pe2UuX3RpbGVKU09OUmVxdWVzdD1udWxsLGUuX2xvYWRlZD0hMCxyP2UuZmlyZShuZXcgdC5FcnJvckV2ZW50KHIpKTpuJiYodC5leHRlbmQoZSxuKSxuLmJvdW5kcyYmKGUudGlsZUJvdW5kcz1uZXcgTShuLmJvdW5kcyxlLm1pbnpvb20sZS5tYXh6b29tKSksdC5wb3N0VHVybnN0aWxlRXZlbnQobi50aWxlcyxlLm1hcC5fcmVxdWVzdE1hbmFnZXIuX2N1c3RvbUFjY2Vzc1Rva2VuKSx0LnBvc3RNYXBMb2FkRXZlbnQobi50aWxlcyxlLm1hcC5fZ2V0TWFwSWQoKSxlLm1hcC5fcmVxdWVzdE1hbmFnZXIuX3NrdVRva2VuLGUubWFwLl9yZXF1ZXN0TWFuYWdlci5fY3VzdG9tQWNjZXNzVG9rZW4pLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJtZXRhZGF0YSJ9KSksZS5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InNvdXJjZSIsc291cmNlRGF0YVR5cGU6ImNvbnRlbnQifSkpKX0pKX0sci5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvYWRlZH0sci5wcm90b3R5cGUuaGFzVGlsZT1mdW5jdGlvbih0KXtyZXR1cm4hdGhpcy50aWxlQm91bmRzfHx0aGlzLnRpbGVCb3VuZHMuY29udGFpbnModC5jYW5vbmljYWwpfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3RpbGVKU09OUmVxdWVzdCYmKHRoaXMuX3RpbGVKU09OUmVxdWVzdC5jYW5jZWwoKSx0aGlzLl90aWxlSlNPTlJlcXVlc3Q9bnVsbCl9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0LmV4dGVuZCh7fSx0aGlzLl9vcHRpb25zKX0sci5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplVGlsZVVSTChlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsdGhpcy5zY2hlbWUpKSxpPXtyZXF1ZXN0OnRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KG4sdC5SZXNvdXJjZVR5cGUuVGlsZSksdWlkOmUudWlkLHRpbGVJRDplLnRpbGVJRCx6b29tOmUudGlsZUlELm92ZXJzY2FsZWRaLHRpbGVTaXplOnRoaXMudGlsZVNpemUqZS50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCksdHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuaWQscGl4ZWxSYXRpbzp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyxzaG93Q29sbGlzaW9uQm94ZXM6dGhpcy5tYXAuc2hvd0NvbGxpc2lvbkJveGVzLHByb21vdGVJZDp0aGlzLnByb21vdGVJZH07ZnVuY3Rpb24gYShuLGkpe3JldHVybiBkZWxldGUgZS5yZXF1ZXN0LGUuYWJvcnRlZD9yKG51bGwpOm4mJjQwNCE9PW4uc3RhdHVzP3Iobik6KGkmJmkucmVzb3VyY2VUaW1pbmcmJihlLnJlc291cmNlVGltaW5nPWkucmVzb3VyY2VUaW1pbmcpLHRoaXMubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzJiZpJiZlLnNldEV4cGlyeURhdGEoaSksZS5sb2FkVmVjdG9yRGF0YShpLHRoaXMubWFwLnBhaW50ZXIpLHQuY2FjaGVFbnRyeVBvc3NpYmx5QWRkZWQodGhpcy5kaXNwYXRjaGVyKSxyKG51bGwpLHZvaWQoZS5yZWxvYWRDYWxsYmFjayYmKHRoaXMubG9hZFRpbGUoZSxlLnJlbG9hZENhbGxiYWNrKSxlLnJlbG9hZENhbGxiYWNrPW51bGwpKSl9aS5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZz10aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcsZS5hY3RvciYmImV4cGlyZWQiIT09ZS5zdGF0ZT8ibG9hZGluZyI9PT1lLnN0YXRlP2UucmVsb2FkQ2FsbGJhY2s9cjplLnJlcXVlc3Q9ZS5hY3Rvci5zZW5kKCJyZWxvYWRUaWxlIixpLGEuYmluZCh0aGlzKSk6KGUuYWN0b3I9dGhpcy5kaXNwYXRjaGVyLmdldEFjdG9yKCksZS5yZXF1ZXN0PWUuYWN0b3Iuc2VuZCgibG9hZFRpbGUiLGksYS5iaW5kKHRoaXMpKSl9LHIucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0KXt0LnJlcXVlc3QmJih0LnJlcXVlc3QuY2FuY2VsKCksZGVsZXRlIHQucmVxdWVzdCksdC5hY3RvciYmdC5hY3Rvci5zZW5kKCJhYm9ydFRpbGUiLHt1aWQ6dC51aWQsdHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuaWR9LHZvaWQgMCl9LHIucHJvdG90eXBlLnVubG9hZFRpbGU9ZnVuY3Rpb24odCl7dC51bmxvYWRWZWN0b3JEYXRhKCksdC5hY3RvciYmdC5hY3Rvci5zZW5kKCJyZW1vdmVUaWxlIix7dWlkOnQudWlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSx2b2lkIDApfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHJ9KHQuRXZlbnRlZCksRT1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2UuY2FsbCh0aGlzKSx0aGlzLmlkPXIsdGhpcy5kaXNwYXRjaGVyPWksdGhpcy5zZXRFdmVudGVkUGFyZW50KGEpLHRoaXMudHlwZT0icmFzdGVyIix0aGlzLm1pbnpvb209MCx0aGlzLm1heHpvb209MjIsdGhpcy5yb3VuZFpvb209ITAsdGhpcy5zY2hlbWU9Inh5eiIsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy5fbG9hZGVkPSExLHRoaXMuX29wdGlvbnM9dC5leHRlbmQoe3R5cGU6InJhc3RlciJ9LG4pLHQuZXh0ZW5kKHRoaXMsdC5waWNrKG4sWyJ1cmwiLCJzY2hlbWUiLCJ0aWxlU2l6ZSJdKSl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2xvYWRlZD0hMSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InNvdXJjZSJ9KSksdGhpcy5fdGlsZUpTT05SZXF1ZXN0PUEodGhpcy5fb3B0aW9ucyx0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIsKGZ1bmN0aW9uKHIsbil7ZS5fdGlsZUpTT05SZXF1ZXN0PW51bGwsZS5fbG9hZGVkPSEwLHI/ZS5maXJlKG5ldyB0LkVycm9yRXZlbnQocikpOm4mJih0LmV4dGVuZChlLG4pLG4uYm91bmRzJiYoZS50aWxlQm91bmRzPW5ldyBNKG4uYm91bmRzLGUubWluem9vbSxlLm1heHpvb20pKSx0LnBvc3RUdXJuc3RpbGVFdmVudChuLnRpbGVzKSx0LnBvc3RNYXBMb2FkRXZlbnQobi50aWxlcyxlLm1hcC5fZ2V0TWFwSWQoKSxlLm1hcC5fcmVxdWVzdE1hbmFnZXIuX3NrdVRva2VuKSxlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEifSkpLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In0pKSl9KSl9LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2FkZWR9LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5sb2FkKCl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5fdGlsZUpTT05SZXF1ZXN0JiYodGhpcy5fdGlsZUpTT05SZXF1ZXN0LmNhbmNlbCgpLHRoaXMuX3RpbGVKU09OUmVxdWVzdD1udWxsKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZXh0ZW5kKHt9LHRoaXMuX29wdGlvbnMpfSxyLnByb3RvdHlwZS5oYXNUaWxlPWZ1bmN0aW9uKHQpe3JldHVybiF0aGlzLnRpbGVCb3VuZHN8fHRoaXMudGlsZUJvdW5kcy5jb250YWlucyh0LmNhbm9uaWNhbCl9LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPXRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVUaWxlVVJMKGUudGlsZUlELmNhbm9uaWNhbC51cmwodGhpcy50aWxlcyx0aGlzLnNjaGVtZSksdGhpcy50aWxlU2l6ZSk7ZS5yZXF1ZXN0PXQuZ2V0SW1hZ2UodGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QoaSx0LlJlc291cmNlVHlwZS5UaWxlKSwoZnVuY3Rpb24oaSxhKXtpZihkZWxldGUgZS5yZXF1ZXN0LGUuYWJvcnRlZCllLnN0YXRlPSJ1bmxvYWRlZCIscihudWxsKTtlbHNlIGlmKGkpZS5zdGF0ZT0iZXJyb3JlZCIscihpKTtlbHNlIGlmKGEpe24ubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzJiZlLnNldEV4cGlyeURhdGEoYSksZGVsZXRlIGEuY2FjaGVDb250cm9sLGRlbGV0ZSBhLmV4cGlyZXM7dmFyIG89bi5tYXAucGFpbnRlci5jb250ZXh0LHM9by5nbDtlLnRleHR1cmU9bi5tYXAucGFpbnRlci5nZXRUaWxlVGV4dHVyZShhLndpZHRoKSxlLnRleHR1cmU/ZS50ZXh0dXJlLnVwZGF0ZShhLHt1c2VNaXBtYXA6ITB9KTooZS50ZXh0dXJlPW5ldyB0LlRleHR1cmUobyxhLHMuUkdCQSx7dXNlTWlwbWFwOiEwfSksZS50ZXh0dXJlLmJpbmQocy5MSU5FQVIscy5DTEFNUF9UT19FREdFLHMuTElORUFSX01JUE1BUF9ORUFSRVNUKSxvLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyYmcy50ZXhQYXJhbWV0ZXJmKHMuVEVYVFVSRV8yRCxvLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxvLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY01heCkpLGUuc3RhdGU9ImxvYWRlZCIsdC5jYWNoZUVudHJ5UG9zc2libHlBZGRlZChuLmRpc3BhdGNoZXIpLHIobnVsbCl9fSkpfSxyLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCxlKXt0LnJlcXVlc3QmJih0LnJlcXVlc3QuY2FuY2VsKCksZGVsZXRlIHQucmVxdWVzdCksZSgpfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dC50ZXh0dXJlJiZ0aGlzLm1hcC5wYWludGVyLnNhdmVUaWxlVGV4dHVyZSh0LnRleHR1cmUpLGUoKX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpLEw9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4saSxhKXtlLmNhbGwodGhpcyxyLG4saSxhKSx0aGlzLnR5cGU9InJhc3Rlci1kZW0iLHRoaXMubWF4em9vbT0yMix0aGlzLl9vcHRpb25zPXQuZXh0ZW5kKHt0eXBlOiJyYXN0ZXItZGVtIn0sbiksdGhpcy5lbmNvZGluZz1uLmVuY29kaW5nfHwibWFwYm94In1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6InJhc3Rlci1kZW0iLHVybDp0aGlzLnVybCx0aWxlU2l6ZTp0aGlzLnRpbGVTaXplLHRpbGVzOnRoaXMudGlsZXMsYm91bmRzOnRoaXMuYm91bmRzLGVuY29kaW5nOnRoaXMuZW5jb2Rpbmd9fSxyLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVUaWxlVVJMKGUudGlsZUlELmNhbm9uaWNhbC51cmwodGhpcy50aWxlcyx0aGlzLnNjaGVtZSksdGhpcy50aWxlU2l6ZSk7ZnVuY3Rpb24gaSh0LG4pe3QmJihlLnN0YXRlPSJlcnJvcmVkIixyKHQpKSxuJiYoZS5kZW09bixlLm5lZWRzSGlsbHNoYWRlUHJlcGFyZT0hMCxlLnN0YXRlPSJsb2FkZWQiLHIobnVsbCkpfWUucmVxdWVzdD10LmdldEltYWdlKHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KG4sdC5SZXNvdXJjZVR5cGUuVGlsZSksZnVuY3Rpb24obixhKXtpZihkZWxldGUgZS5yZXF1ZXN0LGUuYWJvcnRlZCllLnN0YXRlPSJ1bmxvYWRlZCIscihudWxsKTtlbHNlIGlmKG4pZS5zdGF0ZT0iZXJyb3JlZCIscihuKTtlbHNlIGlmKGEpe3RoaXMubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzJiZlLnNldEV4cGlyeURhdGEoYSksZGVsZXRlIGEuY2FjaGVDb250cm9sLGRlbGV0ZSBhLmV4cGlyZXM7dmFyIG89dC53aW5kb3cuSW1hZ2VCaXRtYXAmJmEgaW5zdGFuY2VvZiB0LndpbmRvdy5JbWFnZUJpdG1hcCYmdC5vZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQoKT9hOnQuYnJvd3Nlci5nZXRJbWFnZURhdGEoYSwxKSxzPXt1aWQ6ZS51aWQsY29vcmQ6ZS50aWxlSUQsc291cmNlOnRoaXMuaWQscmF3SW1hZ2VEYXRhOm8sZW5jb2Rpbmc6dGhpcy5lbmNvZGluZ307ZS5hY3RvciYmImV4cGlyZWQiIT09ZS5zdGF0ZXx8KGUuYWN0b3I9dGhpcy5kaXNwYXRjaGVyLmdldEFjdG9yKCksZS5hY3Rvci5zZW5kKCJsb2FkREVNVGlsZSIscyxpLmJpbmQodGhpcykpKX19LmJpbmQodGhpcykpLGUubmVpZ2hib3JpbmdUaWxlcz10aGlzLl9nZXROZWlnaGJvcmluZ1RpbGVzKGUudGlsZUlEKX0sci5wcm90b3R5cGUuX2dldE5laWdoYm9yaW5nVGlsZXM9ZnVuY3Rpb24oZSl7dmFyIHI9ZS5jYW5vbmljYWwsbj1NYXRoLnBvdygyLHIueiksaT0oci54LTErbiklbixhPTA9PT1yLng/ZS53cmFwLTE6ZS53cmFwLG89KHIueCsxK24pJW4scz1yLngrMT09PW4/ZS53cmFwKzE6ZS53cmFwLGw9e307cmV0dXJuIGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGEsci56LGksci55KS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixzLHIueixvLHIueSkua2V5XT17YmFja2ZpbGxlZDohMX0sci55PjAmJihsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixhLHIueixpLHIueS0xKS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixlLndyYXAsci56LHIueCxyLnktMSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFoscyxyLnosbyxyLnktMSkua2V5XT17YmFja2ZpbGxlZDohMX0pLHIueSsxPG4mJihsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixhLHIueixpLHIueSsxKS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixlLndyYXAsci56LHIueCxyLnkrMSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFoscyxyLnosbyxyLnkrMSkua2V5XT17YmFja2ZpbGxlZDohMX0pLGx9LHIucHJvdG90eXBlLnVubG9hZFRpbGU9ZnVuY3Rpb24odCl7dC5kZW1UZXh0dXJlJiZ0aGlzLm1hcC5wYWludGVyLnNhdmVUaWxlVGV4dHVyZSh0LmRlbVRleHR1cmUpLHQuZmJvJiYodC5mYm8uZGVzdHJveSgpLGRlbGV0ZSB0LmZibyksdC5kZW0mJmRlbGV0ZSB0LmRlbSxkZWxldGUgdC5uZWlnaGJvcmluZ1RpbGVzLHQuc3RhdGU9InVubG9hZGVkIix0LmFjdG9yJiZ0LmFjdG9yLnNlbmQoInJlbW92ZURFTVRpbGUiLHt1aWQ6dC51aWQsc291cmNlOnRoaXMuaWR9KX0scn0oRSksQz1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2UuY2FsbCh0aGlzKSx0aGlzLmlkPXIsdGhpcy50eXBlPSJnZW9qc29uIix0aGlzLm1pbnpvb209MCx0aGlzLm1heHpvb209MTgsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy5pc1RpbGVDbGlwcGVkPSEwLHRoaXMucmVwYXJzZU92ZXJzY2FsZWQ9ITAsdGhpcy5fcmVtb3ZlZD0hMSx0aGlzLl9sb2FkZWQ9ITEsdGhpcy5hY3Rvcj1pLmdldEFjdG9yKCksdGhpcy5zZXRFdmVudGVkUGFyZW50KGEpLHRoaXMuX2RhdGE9bi5kYXRhLHRoaXMuX29wdGlvbnM9dC5leHRlbmQoe30sbiksdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nPW4uY29sbGVjdFJlc291cmNlVGltaW5nLHRoaXMuX3Jlc291cmNlVGltaW5nPVtdLHZvaWQgMCE9PW4ubWF4em9vbSYmKHRoaXMubWF4em9vbT1uLm1heHpvb20pLG4udHlwZSYmKHRoaXMudHlwZT1uLnR5cGUpLG4uYXR0cmlidXRpb24mJih0aGlzLmF0dHJpYnV0aW9uPW4uYXR0cmlidXRpb24pLHRoaXMucHJvbW90ZUlkPW4ucHJvbW90ZUlkO3ZhciBvPXQuRVhURU5UL3RoaXMudGlsZVNpemU7dGhpcy53b3JrZXJPcHRpb25zPXQuZXh0ZW5kKHtzb3VyY2U6dGhpcy5pZCxjbHVzdGVyOm4uY2x1c3Rlcnx8ITEsZ2VvanNvblZ0T3B0aW9uczp7YnVmZmVyOih2b2lkIDAhPT1uLmJ1ZmZlcj9uLmJ1ZmZlcjoxMjgpKm8sdG9sZXJhbmNlOih2b2lkIDAhPT1uLnRvbGVyYW5jZT9uLnRvbGVyYW5jZTouMzc1KSpvLGV4dGVudDp0LkVYVEVOVCxtYXhab29tOnRoaXMubWF4em9vbSxsaW5lTWV0cmljczpuLmxpbmVNZXRyaWNzfHwhMSxnZW5lcmF0ZUlkOm4uZ2VuZXJhdGVJZHx8ITF9LHN1cGVyY2x1c3Rlck9wdGlvbnM6e21heFpvb206dm9pZCAwIT09bi5jbHVzdGVyTWF4Wm9vbT9NYXRoLm1pbihuLmNsdXN0ZXJNYXhab29tLHRoaXMubWF4em9vbS0xKTp0aGlzLm1heHpvb20tMSxleHRlbnQ6dC5FWFRFTlQscmFkaXVzOihuLmNsdXN0ZXJSYWRpdXN8fDUwKSpvLGxvZzohMSxnZW5lcmF0ZUlkOm4uZ2VuZXJhdGVJZHx8ITF9LGNsdXN0ZXJQcm9wZXJ0aWVzOm4uY2x1c3RlclByb3BlcnRpZXN9LG4ud29ya2VyT3B0aW9ucyl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic291cmNlIn0pKSx0aGlzLl91cGRhdGVXb3JrZXJEYXRhKChmdW5jdGlvbihyKXtpZihyKWUuZmlyZShuZXcgdC5FcnJvckV2ZW50KHIpKTtlbHNle3ZhciBuPXtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEifTtlLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcmJmUuX3Jlc291cmNlVGltaW5nJiZlLl9yZXNvdXJjZVRpbWluZy5sZW5ndGg+MCYmKG4ucmVzb3VyY2VUaW1pbmc9ZS5fcmVzb3VyY2VUaW1pbmcsZS5fcmVzb3VyY2VUaW1pbmc9W10pLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIsbikpfX0pKX0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUuc2V0RGF0YT1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3JldHVybiB0aGlzLl9kYXRhPWUsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzb3VyY2UifSkpLHRoaXMuX3VwZGF0ZVdvcmtlckRhdGEoKGZ1bmN0aW9uKGUpe2lmKGUpci5maXJlKG5ldyB0LkVycm9yRXZlbnQoZSkpO2Vsc2V7dmFyIG49e2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In07ci5fY29sbGVjdFJlc291cmNlVGltaW5nJiZyLl9yZXNvdXJjZVRpbWluZyYmci5fcmVzb3VyY2VUaW1pbmcubGVuZ3RoPjAmJihuLnJlc291cmNlVGltaW5nPXIuX3Jlc291cmNlVGltaW5nLHIuX3Jlc291cmNlVGltaW5nPVtdKSxyLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLG4pKX19KSksdGhpc30sci5wcm90b3R5cGUuZ2V0Q2x1c3RlckV4cGFuc2lvblpvb209ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hY3Rvci5zZW5kKCJnZW9qc29uLmdldENsdXN0ZXJFeHBhbnNpb25ab29tIix7Y2x1c3RlcklkOnQsc291cmNlOnRoaXMuaWR9LGUpLHRoaXN9LHIucHJvdG90eXBlLmdldENsdXN0ZXJDaGlsZHJlbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFjdG9yLnNlbmQoImdlb2pzb24uZ2V0Q2x1c3RlckNoaWxkcmVuIix7Y2x1c3RlcklkOnQsc291cmNlOnRoaXMuaWR9LGUpLHRoaXN9LHIucHJvdG90eXBlLmdldENsdXN0ZXJMZWF2ZXM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMuYWN0b3Iuc2VuZCgiZ2VvanNvbi5nZXRDbHVzdGVyTGVhdmVzIix7c291cmNlOnRoaXMuaWQsY2x1c3RlcklkOnQsbGltaXQ6ZSxvZmZzZXQ6cn0sbiksdGhpc30sci5wcm90b3R5cGUuX3VwZGF0ZVdvcmtlckRhdGE9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpczt0aGlzLl9sb2FkZWQ9ITE7dmFyIG49dC5leHRlbmQoe30sdGhpcy53b3JrZXJPcHRpb25zKSxpPXRoaXMuX2RhdGE7InN0cmluZyI9PXR5cGVvZiBpPyhuLnJlcXVlc3Q9dGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodC5icm93c2VyLnJlc29sdmVVUkwoaSksdC5SZXNvdXJjZVR5cGUuU291cmNlKSxuLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nPXRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyk6bi5kYXRhPUpTT04uc3RyaW5naWZ5KGkpLHRoaXMuYWN0b3Iuc2VuZCh0aGlzLnR5cGUrIi5sb2FkRGF0YSIsbiwoZnVuY3Rpb24odCxpKXtyLl9yZW1vdmVkfHxpJiZpLmFiYW5kb25lZHx8KHIuX2xvYWRlZD0hMCxpJiZpLnJlc291cmNlVGltaW5nJiZpLnJlc291cmNlVGltaW5nW3IuaWRdJiYoci5fcmVzb3VyY2VUaW1pbmc9aS5yZXNvdXJjZVRpbWluZ1tyLmlkXS5zbGljZSgwKSksci5hY3Rvci5zZW5kKHIudHlwZSsiLmNvYWxlc2NlIix7c291cmNlOm4uc291cmNlfSxudWxsKSxlKHQpKX0pKX0sci5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvYWRlZH0sci5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLGk9ZS5hY3Rvcj8icmVsb2FkVGlsZSI6ImxvYWRUaWxlIjtlLmFjdG9yPXRoaXMuYWN0b3I7dmFyIGE9e3R5cGU6dGhpcy50eXBlLHVpZDplLnVpZCx0aWxlSUQ6ZS50aWxlSUQsem9vbTplLnRpbGVJRC5vdmVyc2NhbGVkWixtYXhab29tOnRoaXMubWF4em9vbSx0aWxlU2l6ZTp0aGlzLnRpbGVTaXplLHNvdXJjZTp0aGlzLmlkLHBpeGVsUmF0aW86dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sc2hvd0NvbGxpc2lvbkJveGVzOnRoaXMubWFwLnNob3dDb2xsaXNpb25Cb3hlcyxwcm9tb3RlSWQ6dGhpcy5wcm9tb3RlSWR9O2UucmVxdWVzdD10aGlzLmFjdG9yLnNlbmQoaSxhLChmdW5jdGlvbih0LGEpe3JldHVybiBkZWxldGUgZS5yZXF1ZXN0LGUudW5sb2FkVmVjdG9yRGF0YSgpLGUuYWJvcnRlZD9yKG51bGwpOnQ/cih0KTooZS5sb2FkVmVjdG9yRGF0YShhLG4ubWFwLnBhaW50ZXIsInJlbG9hZFRpbGUiPT09aSkscihudWxsKSl9KSl9LHIucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0KXt0LnJlcXVlc3QmJih0LnJlcXVlc3QuY2FuY2VsKCksZGVsZXRlIHQucmVxdWVzdCksdC5hYm9ydGVkPSEwfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQpe3QudW5sb2FkVmVjdG9yRGF0YSgpLHRoaXMuYWN0b3Iuc2VuZCgicmVtb3ZlVGlsZSIse3VpZDp0LnVpZCx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5pZH0pfSxyLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3JlbW92ZWQ9ITAsdGhpcy5hY3Rvci5zZW5kKCJyZW1vdmVTb3VyY2UiLHt0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5pZH0pfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyx7dHlwZTp0aGlzLnR5cGUsZGF0YTp0aGlzLl9kYXRhfSl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hMX0scn0odC5FdmVudGVkKSxQPXQuY3JlYXRlTGF5b3V0KFt7bmFtZToiYV9wb3MiLHR5cGU6IkludDE2Iixjb21wb25lbnRzOjJ9LHtuYW1lOiJhX3RleHR1cmVfcG9zIix0eXBlOiJJbnQxNiIsY29tcG9uZW50czoyfV0pLEk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbixpKXtlLmNhbGwodGhpcyksdGhpcy5pZD10LHRoaXMuZGlzcGF0Y2hlcj1uLHRoaXMuY29vcmRpbmF0ZXM9ci5jb29yZGluYXRlcyx0aGlzLnR5cGU9ImltYWdlIix0aGlzLm1pbnpvb209MCx0aGlzLm1heHpvb209MjIsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy50aWxlcz17fSx0aGlzLl9sb2FkZWQ9ITEsdGhpcy5zZXRFdmVudGVkUGFyZW50KGkpLHRoaXMub3B0aW9ucz1yfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpczt0aGlzLl9sb2FkZWQ9ITEsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzb3VyY2UifSkpLHRoaXMudXJsPXRoaXMub3B0aW9ucy51cmwsdC5nZXRJbWFnZSh0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdCh0aGlzLnVybCx0LlJlc291cmNlVHlwZS5JbWFnZSksKGZ1bmN0aW9uKGksYSl7bi5fbG9hZGVkPSEwLGk/bi5maXJlKG5ldyB0LkVycm9yRXZlbnQoaSkpOmEmJihuLmltYWdlPWEsZSYmKG4uY29vcmRpbmF0ZXM9ZSksciYmcigpLG4uX2ZpbmlzaExvYWRpbmcoKSl9KSl9LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2FkZWR9LHIucHJvdG90eXBlLnVwZGF0ZUltYWdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuaW1hZ2UmJnQudXJsPyh0aGlzLm9wdGlvbnMudXJsPXQudXJsLHRoaXMubG9hZCh0LmNvb3JkaW5hdGVzLChmdW5jdGlvbigpe2UudGV4dHVyZT1udWxsfSkpLHRoaXMpOnRoaXN9LHIucHJvdG90eXBlLl9maW5pc2hMb2FkaW5nPWZ1bmN0aW9uKCl7dGhpcy5tYXAmJih0aGlzLnNldENvb3JkaW5hdGVzKHRoaXMuY29vcmRpbmF0ZXMpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJtZXRhZGF0YSJ9KSkpfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5zZXRDb29yZGluYXRlcz1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3RoaXMuY29vcmRpbmF0ZXM9ZTt2YXIgbj1lLm1hcCh0Lk1lcmNhdG9yQ29vcmRpbmF0ZS5mcm9tTG5nTGF0KTt0aGlzLnRpbGVJRD1mdW5jdGlvbihlKXtmb3IodmFyIHI9MS8wLG49MS8wLGk9LTEvMCxhPS0xLzAsbz0wLHM9ZTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb107cj1NYXRoLm1pbihyLGwueCksbj1NYXRoLm1pbihuLGwueSksaT1NYXRoLm1heChpLGwueCksYT1NYXRoLm1heChhLGwueSl9dmFyIGM9aS1yLHU9YS1uLGY9TWF0aC5tYXgoYyx1KSxoPU1hdGgubWF4KDAsTWF0aC5mbG9vcigtTWF0aC5sb2coZikvTWF0aC5MTjIpKSxwPU1hdGgucG93KDIsaCk7cmV0dXJuIG5ldyB0LkNhbm9uaWNhbFRpbGVJRChoLE1hdGguZmxvb3IoKHIraSkvMipwKSxNYXRoLmZsb29yKChuK2EpLzIqcCkpfShuKSx0aGlzLm1pbnpvb209dGhpcy5tYXh6b29tPXRoaXMudGlsZUlELno7dmFyIGk9bi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiByLnRpbGVJRC5nZXRUaWxlUG9pbnQodCkuX3JvdW5kKCl9KSk7cmV0dXJuIHRoaXMuX2JvdW5kc0FycmF5PW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0NGk4LHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGlbMF0ueCxpWzBdLnksMCwwKSx0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayhpWzFdLngsaVsxXS55LHQuRVhURU5ULDApLHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGlbM10ueCxpWzNdLnksMCx0LkVYVEVOVCksdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2soaVsyXS54LGlbMl0ueSx0LkVYVEVOVCx0LkVYVEVOVCksdGhpcy5ib3VuZHNCdWZmZXImJih0aGlzLmJvdW5kc0J1ZmZlci5kZXN0cm95KCksZGVsZXRlIHRoaXMuYm91bmRzQnVmZmVyKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToiY29udGVudCJ9KSksdGhpc30sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2lmKDAhPT1PYmplY3Qua2V5cyh0aGlzLnRpbGVzKS5sZW5ndGgmJnRoaXMuaW1hZ2Upe3ZhciBlPXRoaXMubWFwLnBhaW50ZXIuY29udGV4dCxyPWUuZ2w7Zm9yKHZhciBuIGluIHRoaXMuYm91bmRzQnVmZmVyfHwodGhpcy5ib3VuZHNCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5fYm91bmRzQXJyYXksUC5tZW1iZXJzKSksdGhpcy5ib3VuZHNTZWdtZW50c3x8KHRoaXMuYm91bmRzU2VnbWVudHM9dC5TZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwwLDQsMikpLHRoaXMudGV4dHVyZXx8KHRoaXMudGV4dHVyZT1uZXcgdC5UZXh0dXJlKGUsdGhpcy5pbWFnZSxyLlJHQkEpLHRoaXMudGV4dHVyZS5iaW5kKHIuTElORUFSLHIuQ0xBTVBfVE9fRURHRSkpLHRoaXMudGlsZXMpe3ZhciBpPXRoaXMudGlsZXNbbl07ImxvYWRlZCIhPT1pLnN0YXRlJiYoaS5zdGF0ZT0ibG9hZGVkIixpLnRleHR1cmU9dGhpcy50ZXh0dXJlKX19fSxyLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbih0LGUpe3RoaXMudGlsZUlEJiZ0aGlzLnRpbGVJRC5lcXVhbHModC50aWxlSUQuY2Fub25pY2FsKT8odGhpcy50aWxlc1tTdHJpbmcodC50aWxlSUQud3JhcCldPXQsdC5idWNrZXRzPXt9LGUobnVsbCkpOih0LnN0YXRlPSJlcnJvcmVkIixlKG51bGwpKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6ImltYWdlIix1cmw6dGhpcy5vcHRpb25zLnVybCxjb29yZGluYXRlczp0aGlzLmNvb3JkaW5hdGVzfX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpO3ZhciBPPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyLG4saSl7ZS5jYWxsKHRoaXMsdCxyLG4saSksdGhpcy5yb3VuZFpvb209ITAsdGhpcy50eXBlPSJ2aWRlbyIsdGhpcy5vcHRpb25zPXJ9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2xvYWRlZD0hMTt2YXIgcj10aGlzLm9wdGlvbnM7dGhpcy51cmxzPVtdO2Zvcih2YXIgbj0wLGk9ci51cmxzO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTt0aGlzLnVybHMucHVzaCh0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChhLHQuUmVzb3VyY2VUeXBlLlNvdXJjZSkudXJsKX10LmdldFZpZGVvKHRoaXMudXJscywoZnVuY3Rpb24ocixuKXtlLl9sb2FkZWQ9ITAscj9lLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk6biYmKGUudmlkZW89bixlLnZpZGVvLmxvb3A9ITAsZS52aWRlby5hZGRFdmVudExpc3RlbmVyKCJwbGF5aW5nIiwoZnVuY3Rpb24oKXtlLm1hcC50cmlnZ2VyUmVwYWludCgpfSkpLGUubWFwJiZlLnZpZGVvLnBsYXkoKSxlLl9maW5pc2hMb2FkaW5nKCkpfSkpfSxyLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMudmlkZW8mJnRoaXMudmlkZW8ucGF1c2UoKX0sci5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpe3RoaXMudmlkZW8mJnRoaXMudmlkZW8ucGxheSgpfSxyLnByb3RvdHlwZS5zZWVrPWZ1bmN0aW9uKGUpe2lmKHRoaXMudmlkZW8pe3ZhciByPXRoaXMudmlkZW8uc2Vla2FibGU7ZTxyLnN0YXJ0KDApfHxlPnIuZW5kKDApP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LlZhbGlkYXRpb25FcnJvcigic291cmNlcy4iK3RoaXMuaWQsbnVsbCwiUGxheWJhY2sgZm9yIHRoaXMgdmlkZW8gY2FuIGJlIHNldCBvbmx5IGJldHdlZW4gdGhlICIrci5zdGFydCgwKSsiIGFuZCAiK3IuZW5kKDApKyItc2Vjb25kIG1hcmsuIikpKTp0aGlzLnZpZGVvLmN1cnJlbnRUaW1lPWV9fSxyLnByb3RvdHlwZS5nZXRWaWRlbz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZGVvfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcHx8KHRoaXMubWFwPXQsdGhpcy5sb2FkKCksdGhpcy52aWRlbyYmKHRoaXMudmlkZW8ucGxheSgpLHRoaXMuc2V0Q29vcmRpbmF0ZXModGhpcy5jb29yZGluYXRlcykpKX0sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2lmKCEoMD09PU9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aHx8dGhpcy52aWRlby5yZWFkeVN0YXRlPDIpKXt2YXIgZT10aGlzLm1hcC5wYWludGVyLmNvbnRleHQscj1lLmdsO2Zvcih2YXIgbiBpbiB0aGlzLmJvdW5kc0J1ZmZlcnx8KHRoaXMuYm91bmRzQnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LFAubWVtYmVycykpLHRoaXMuYm91bmRzU2VnbWVudHN8fCh0aGlzLmJvdW5kc1NlZ21lbnRzPXQuU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsMCw0LDIpKSx0aGlzLnRleHR1cmU/dGhpcy52aWRlby5wYXVzZWR8fCh0aGlzLnRleHR1cmUuYmluZChyLkxJTkVBUixyLkNMQU1QX1RPX0VER0UpLHIudGV4U3ViSW1hZ2UyRChyLlRFWFRVUkVfMkQsMCwwLDAsci5SR0JBLHIuVU5TSUdORURfQllURSx0aGlzLnZpZGVvKSk6KHRoaXMudGV4dHVyZT1uZXcgdC5UZXh0dXJlKGUsdGhpcy52aWRlbyxyLlJHQkEpLHRoaXMudGV4dHVyZS5iaW5kKHIuTElORUFSLHIuQ0xBTVBfVE9fRURHRSkpLHRoaXMudGlsZXMpe3ZhciBpPXRoaXMudGlsZXNbbl07ImxvYWRlZCIhPT1pLnN0YXRlJiYoaS5zdGF0ZT0ibG9hZGVkIixpLnRleHR1cmU9dGhpcy50ZXh0dXJlKX19fSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToidmlkZW8iLHVybHM6dGhpcy51cmxzLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW8mJiF0aGlzLnZpZGVvLnBhdXNlZH0scn0oSSksej1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2UuY2FsbCh0aGlzLHIsbixpLGEpLG4uY29vcmRpbmF0ZXM/QXJyYXkuaXNBcnJheShuLmNvb3JkaW5hdGVzKSYmND09PW4uY29vcmRpbmF0ZXMubGVuZ3RoJiYhbi5jb29yZGluYXRlcy5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4hQXJyYXkuaXNBcnJheSh0KXx8MiE9PXQubGVuZ3RofHx0LnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdH0pKX0pKXx8dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuVmFsaWRhdGlvbkVycm9yKCJzb3VyY2VzLiIrcixudWxsLCciY29vcmRpbmF0ZXMiIHByb3BlcnR5IG11c3QgYmUgYW4gYXJyYXkgb2YgNCBsb25naXR1ZGUvbGF0aXR1ZGUgYXJyYXkgcGFpcnMnKSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LlZhbGlkYXRpb25FcnJvcigic291cmNlcy4iK3IsbnVsbCwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAiY29vcmRpbmF0ZXMiJykpKSxuLmFuaW1hdGUmJiJib29sZWFuIiE9dHlwZW9mIG4uYW5pbWF0ZSYmdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuVmFsaWRhdGlvbkVycm9yKCJzb3VyY2VzLiIrcixudWxsLCdvcHRpb25hbCAiYW5pbWF0ZSIgcHJvcGVydHkgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUnKSkpLG4uY2FudmFzPyJzdHJpbmciPT10eXBlb2Ygbi5jYW52YXN8fG4uY2FudmFzIGluc3RhbmNlb2YgdC53aW5kb3cuSFRNTENhbnZhc0VsZW1lbnR8fHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LlZhbGlkYXRpb25FcnJvcigic291cmNlcy4iK3IsbnVsbCwnImNhbnZhcyIgbXVzdCBiZSBlaXRoZXIgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBJRCBvZiB0aGUgY2FudmFzIGVsZW1lbnQgZnJvbSB3aGljaCB0byByZWFkLCBvciBhbiBIVE1MQ2FudmFzRWxlbWVudCBpbnN0YW5jZScpKSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuVmFsaWRhdGlvbkVycm9yKCJzb3VyY2VzLiIrcixudWxsLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJjYW52YXMiJykpKSx0aGlzLm9wdGlvbnM9bix0aGlzLmFuaW1hdGU9dm9pZCAwPT09bi5hbmltYXRlfHxuLmFuaW1hdGV9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt0aGlzLl9sb2FkZWQ9ITAsdGhpcy5jYW52YXN8fCh0aGlzLmNhbnZhcz10aGlzLm9wdGlvbnMuY2FudmFzIGluc3RhbmNlb2YgdC53aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQ/dGhpcy5vcHRpb25zLmNhbnZhczp0LndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm9wdGlvbnMuY2FudmFzKSksdGhpcy53aWR0aD10aGlzLmNhbnZhcy53aWR0aCx0aGlzLmhlaWdodD10aGlzLmNhbnZhcy5oZWlnaHQsdGhpcy5faGFzSW52YWxpZERpbWVuc2lvbnMoKT90aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkNhbnZhcyBkaW1lbnNpb25zIGNhbm5vdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVyby4iKSkpOih0aGlzLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLl9wbGF5aW5nPSEwLHRoaXMubWFwLnRyaWdnZXJSZXBhaW50KCl9LHRoaXMucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLl9wbGF5aW5nJiYodGhpcy5wcmVwYXJlKCksdGhpcy5fcGxheWluZz0hMSl9LHRoaXMuX2ZpbmlzaExvYWRpbmcoKSl9LHIucHJvdG90eXBlLmdldENhbnZhcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbnZhc30sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKSx0aGlzLmNhbnZhcyYmdGhpcy5hbmltYXRlJiZ0aGlzLnBsYXkoKX0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLnBhdXNlKCl9LHIucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24oKXt2YXIgZT0hMTtpZih0aGlzLmNhbnZhcy53aWR0aCE9PXRoaXMud2lkdGgmJih0aGlzLndpZHRoPXRoaXMuY2FudmFzLndpZHRoLGU9ITApLHRoaXMuY2FudmFzLmhlaWdodCE9PXRoaXMuaGVpZ2h0JiYodGhpcy5oZWlnaHQ9dGhpcy5jYW52YXMuaGVpZ2h0LGU9ITApLCF0aGlzLl9oYXNJbnZhbGlkRGltZW5zaW9ucygpJiYwIT09T2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RoKXt2YXIgcj10aGlzLm1hcC5wYWludGVyLmNvbnRleHQsbj1yLmdsO2Zvcih2YXIgaSBpbiB0aGlzLmJvdW5kc0J1ZmZlcnx8KHRoaXMuYm91bmRzQnVmZmVyPXIuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LFAubWVtYmVycykpLHRoaXMuYm91bmRzU2VnbWVudHN8fCh0aGlzLmJvdW5kc1NlZ21lbnRzPXQuU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsMCw0LDIpKSx0aGlzLnRleHR1cmU/KGV8fHRoaXMuX3BsYXlpbmcpJiZ0aGlzLnRleHR1cmUudXBkYXRlKHRoaXMuY2FudmFzLHtwcmVtdWx0aXBseTohMH0pOnRoaXMudGV4dHVyZT1uZXcgdC5UZXh0dXJlKHIsdGhpcy5jYW52YXMsbi5SR0JBLHtwcmVtdWx0aXBseTohMH0pLHRoaXMudGlsZXMpe3ZhciBhPXRoaXMudGlsZXNbaV07ImxvYWRlZCIhPT1hLnN0YXRlJiYoYS5zdGF0ZT0ibG9hZGVkIixhLnRleHR1cmU9dGhpcy50ZXh0dXJlKX19fSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiY2FudmFzIixjb29yZGluYXRlczp0aGlzLmNvb3JkaW5hdGVzfX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wbGF5aW5nfSxyLnByb3RvdHlwZS5faGFzSW52YWxpZERpbWVuc2lvbnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPVt0aGlzLmNhbnZhcy53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHRdO3Q8ZS5sZW5ndGg7dCs9MSl7dmFyIHI9ZVt0XTtpZihpc05hTihyKXx8cjw9MClyZXR1cm4hMH1yZXR1cm4hMX0scn0oSSksRD17dmVjdG9yOlMscmFzdGVyOkUsInJhc3Rlci1kZW0iOkwsZ2VvanNvbjpDLHZpZGVvOk8saW1hZ2U6SSxjYW52YXM6en07ZnVuY3Rpb24gUihlLHIpe3ZhciBuPXQuaWRlbnRpdHkoW10pO3JldHVybiB0LnRyYW5zbGF0ZShuLG4sWzEsMSwwXSksdC5zY2FsZShuLG4sWy41KmUud2lkdGgsLjUqZS5oZWlnaHQsMV0pLHQubXVsdGlwbHkobixuLGUuY2FsY3VsYXRlUG9zTWF0cml4KHIudG9VbndyYXBwZWQoKSkpfWZ1bmN0aW9uIEYodCxlLHIsbixpLGEpe3ZhciBvPWZ1bmN0aW9uKHQsZSxyKXtpZih0KWZvcih2YXIgbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWVbaVtuXV07aWYoYSYmYS5zb3VyY2U9PT1yJiYiZmlsbC1leHRydXNpb24iPT09YS50eXBlKXJldHVybiEwfWVsc2UgZm9yKHZhciBvIGluIGUpe3ZhciBzPWVbb107aWYocy5zb3VyY2U9PT1yJiYiZmlsbC1leHRydXNpb24iPT09cy50eXBlKXJldHVybiEwfXJldHVybiExfShpJiZpLmxheWVycyxlLHQuaWQpLHM9YS5tYXhQaXRjaFNjYWxlRmFjdG9yKCksbD10LnRpbGVzSW4obixzLG8pO2wuc29ydChCKTtmb3IodmFyIGM9W10sdT0wLGY9bDt1PGYubGVuZ3RoO3UrPTEpe3ZhciBoPWZbdV07Yy5wdXNoKHt3cmFwcGVkVGlsZUlEOmgudGlsZUlELndyYXBwZWQoKS5rZXkscXVlcnlSZXN1bHRzOmgudGlsZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoZSxyLHQuX3N0YXRlLGgucXVlcnlHZW9tZXRyeSxoLmNhbWVyYVF1ZXJ5R2VvbWV0cnksaC5zY2FsZSxpLGEscyxSKHQudHJhbnNmb3JtLGgudGlsZUlEKSl9KX12YXIgcD1mdW5jdGlvbih0KXtmb3IodmFyIGU9e30scj17fSxuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWEucXVlcnlSZXN1bHRzLHM9YS53cmFwcGVkVGlsZUlELGw9cltzXT1yW3NdfHx7fTtmb3IodmFyIGMgaW4gbylmb3IodmFyIHU9b1tjXSxmPWxbY109bFtjXXx8e30saD1lW2NdPWVbY118fFtdLHA9MCxkPXU7cDxkLmxlbmd0aDtwKz0xKXt2YXIgbT1kW3BdO2ZbbS5mZWF0dXJlSW5kZXhdfHwoZlttLmZlYXR1cmVJbmRleF09ITAsaC5wdXNoKG0pKX19cmV0dXJuIGV9KGMpO2Zvcih2YXIgZCBpbiBwKXBbZF0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZS5mZWF0dXJlLG49dC5nZXRGZWF0dXJlU3RhdGUoci5sYXllclsic291cmNlLWxheWVyIl0sci5pZCk7ci5zb3VyY2U9ci5sYXllci5zb3VyY2Usci5sYXllclsic291cmNlLWxheWVyIl0mJihyLnNvdXJjZUxheWVyPXIubGF5ZXJbInNvdXJjZS1sYXllciJdKSxyLnN0YXRlPW59KSk7cmV0dXJuIHB9ZnVuY3Rpb24gQih0LGUpe3ZhciByPXQudGlsZUlELG49ZS50aWxlSUQ7cmV0dXJuIHIub3ZlcnNjYWxlZFotbi5vdmVyc2NhbGVkWnx8ci5jYW5vbmljYWwueS1uLmNhbm9uaWNhbC55fHxyLndyYXAtbi53cmFwfHxyLmNhbm9uaWNhbC54LW4uY2Fub25pY2FsLnh9dmFyIE49ZnVuY3Rpb24odCxlKXt0aGlzLm1heD10LHRoaXMub25SZW1vdmU9ZSx0aGlzLnJlc2V0KCl9O04ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuZGF0YSlmb3IodmFyIGU9MCxyPXRoaXMuZGF0YVt0XTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07bi50aW1lb3V0JiZjbGVhclRpbWVvdXQobi50aW1lb3V0KSx0aGlzLm9uUmVtb3ZlKG4udmFsdWUpfXJldHVybiB0aGlzLmRhdGE9e30sdGhpcy5vcmRlcj1bXSx0aGlzfSxOLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMsaT10LndyYXBwZWQoKS5rZXk7dm9pZCAwPT09dGhpcy5kYXRhW2ldJiYodGhpcy5kYXRhW2ldPVtdKTt2YXIgYT17dmFsdWU6ZSx0aW1lb3V0OnZvaWQgMH07aWYodm9pZCAwIT09ciYmKGEudGltZW91dD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe24ucmVtb3ZlKHQsYSl9KSxyKSksdGhpcy5kYXRhW2ldLnB1c2goYSksdGhpcy5vcmRlci5wdXNoKGkpLHRoaXMub3JkZXIubGVuZ3RoPnRoaXMubWF4KXt2YXIgbz10aGlzLl9nZXRBbmRSZW1vdmVCeUtleSh0aGlzLm9yZGVyWzBdKTtvJiZ0aGlzLm9uUmVtb3ZlKG8pfXJldHVybiB0aGlzfSxOLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQud3JhcHBlZCgpLmtleSBpbiB0aGlzLmRhdGF9LE4ucHJvdG90eXBlLmdldEFuZFJlbW92ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXModCk/dGhpcy5fZ2V0QW5kUmVtb3ZlQnlLZXkodC53cmFwcGVkKCkua2V5KTpudWxsfSxOLnByb3RvdHlwZS5fZ2V0QW5kUmVtb3ZlQnlLZXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXRhW3RdLnNoaWZ0KCk7cmV0dXJuIGUudGltZW91dCYmY2xlYXJUaW1lb3V0KGUudGltZW91dCksMD09PXRoaXMuZGF0YVt0XS5sZW5ndGgmJmRlbGV0ZSB0aGlzLmRhdGFbdF0sdGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKHQpLDEpLGUudmFsdWV9LE4ucHJvdG90eXBlLmdldEJ5S2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF0YVt0XTtyZXR1cm4gZT9lWzBdLnZhbHVlOm51bGx9LE4ucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXModCk/dGhpcy5kYXRhW3Qud3JhcHBlZCgpLmtleV1bMF0udmFsdWU6bnVsbH0sTi5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuaGFzKHQpKXJldHVybiB0aGlzO3ZhciByPXQud3JhcHBlZCgpLmtleSxuPXZvaWQgMD09PWU/MDp0aGlzLmRhdGFbcl0uaW5kZXhPZihlKSxpPXRoaXMuZGF0YVtyXVtuXTtyZXR1cm4gdGhpcy5kYXRhW3JdLnNwbGljZShuLDEpLGkudGltZW91dCYmY2xlYXJUaW1lb3V0KGkudGltZW91dCksMD09PXRoaXMuZGF0YVtyXS5sZW5ndGgmJmRlbGV0ZSB0aGlzLmRhdGFbcl0sdGhpcy5vblJlbW92ZShpLnZhbHVlKSx0aGlzLm9yZGVyLnNwbGljZSh0aGlzLm9yZGVyLmluZGV4T2YociksMSksdGhpc30sTi5wcm90b3R5cGUuc2V0TWF4U2l6ZT1mdW5jdGlvbih0KXtmb3IodGhpcy5tYXg9dDt0aGlzLm9yZGVyLmxlbmd0aD50aGlzLm1heDspe3ZhciBlPXRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO2UmJnRoaXMub25SZW1vdmUoZSl9cmV0dXJuIHRoaXN9LE4ucHJvdG90eXBlLmZpbHRlcj1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdGhpcy5kYXRhKWZvcih2YXIgbj0wLGk9dGhpcy5kYXRhW3JdO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTt0KGEudmFsdWUpfHxlLnB1c2goYSl9Zm9yKHZhciBvPTAscz1lO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTt0aGlzLnJlbW92ZShsLnZhbHVlLnRpbGVJRCxsKX19O3ZhciBqPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmNvbnRleHQ9dDt2YXIgbj10LmdsO3RoaXMuYnVmZmVyPW4uY3JlYXRlQnVmZmVyKCksdGhpcy5keW5hbWljRHJhdz1Cb29sZWFuKHIpLHRoaXMuY29udGV4dC51bmJpbmRWQU8oKSx0LmJpbmRFbGVtZW50QnVmZmVyLnNldCh0aGlzLmJ1ZmZlciksbi5idWZmZXJEYXRhKG4uRUxFTUVOVF9BUlJBWV9CVUZGRVIsZS5hcnJheUJ1ZmZlcix0aGlzLmR5bmFtaWNEcmF3P24uRFlOQU1JQ19EUkFXOm4uU1RBVElDX0RSQVcpLHRoaXMuZHluYW1pY0RyYXd8fGRlbGV0ZSBlLmFycmF5QnVmZmVyfTtqLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LmJpbmRFbGVtZW50QnVmZmVyLnNldCh0aGlzLmJ1ZmZlcil9LGoucHJvdG90eXBlLnVwZGF0ZURhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3RoaXMuY29udGV4dC51bmJpbmRWQU8oKSx0aGlzLmJpbmQoKSxlLmJ1ZmZlclN1YkRhdGEoZS5FTEVNRU5UX0FSUkFZX0JVRkZFUiwwLHQuYXJyYXlCdWZmZXIpfSxqLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZXh0LmdsO3RoaXMuYnVmZmVyJiYodC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpLGRlbGV0ZSB0aGlzLmJ1ZmZlcil9O3ZhciBVPXtJbnQ4OiJCWVRFIixVaW50ODoiVU5TSUdORURfQllURSIsSW50MTY6IlNIT1JUIixVaW50MTY6IlVOU0lHTkVEX1NIT1JUIixJbnQzMjoiSU5UIixVaW50MzI6IlVOU0lHTkVEX0lOVCIsRmxvYXQzMjoiRkxPQVQifSxWPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuYXR0cmlidXRlcz1yLHRoaXMuaXRlbVNpemU9ZS5ieXRlc1BlckVsZW1lbnQsdGhpcy5keW5hbWljRHJhdz1uLHRoaXMuY29udGV4dD10O3ZhciBpPXQuZ2w7dGhpcy5idWZmZXI9aS5jcmVhdGVCdWZmZXIoKSx0LmJpbmRWZXJ0ZXhCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKSxpLmJ1ZmZlckRhdGEoaS5BUlJBWV9CVUZGRVIsZS5hcnJheUJ1ZmZlcix0aGlzLmR5bmFtaWNEcmF3P2kuRFlOQU1JQ19EUkFXOmkuU1RBVElDX0RSQVcpLHRoaXMuZHluYW1pY0RyYXd8fGRlbGV0ZSBlLmFycmF5QnVmZmVyfTtWLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LmJpbmRWZXJ0ZXhCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKX0sVi5wcm90b3R5cGUudXBkYXRlRGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5iaW5kKCksZS5idWZmZXJTdWJEYXRhKGUuQVJSQVlfQlVGRkVSLDAsdC5hcnJheUJ1ZmZlcil9LFYucHJvdG90eXBlLmVuYWJsZUF0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7cisrKXt2YXIgbj10aGlzLmF0dHJpYnV0ZXNbcl0saT1lLmF0dHJpYnV0ZXNbbi5uYW1lXTt2b2lkIDAhPT1pJiZ0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpfX0sVi5wcm90b3R5cGUuc2V0VmVydGV4QXR0cmliUG9pbnRlcnM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248dGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDtuKyspe3ZhciBpPXRoaXMuYXR0cmlidXRlc1tuXSxhPWUuYXR0cmlidXRlc1tpLm5hbWVdO3ZvaWQgMCE9PWEmJnQudmVydGV4QXR0cmliUG9pbnRlcihhLGkuY29tcG9uZW50cyx0W1VbaS50eXBlXV0sITEsdGhpcy5pdGVtU2l6ZSxpLm9mZnNldCt0aGlzLml0ZW1TaXplKihyfHwwKSl9fSxWLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZXh0LmdsO3RoaXMuYnVmZmVyJiYodC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpLGRlbGV0ZSB0aGlzLmJ1ZmZlcil9O3ZhciBIPWZ1bmN0aW9uKHQpe3RoaXMuZ2w9dC5nbCx0aGlzLmRlZmF1bHQ9dGhpcy5nZXREZWZhdWx0KCksdGhpcy5jdXJyZW50PXRoaXMuZGVmYXVsdCx0aGlzLmRpcnR5PSExfTtILnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxILnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7fSxILnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdH0sSC5wcm90b3R5cGUuc2V0RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuc2V0KHRoaXMuZGVmYXVsdCl9O3ZhciBxPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0LkNvbG9yLnRyYW5zcGFyZW50fSxyLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50Oyh0LnIhPT1lLnJ8fHQuZyE9PWUuZ3x8dC5iIT09ZS5ifHx0LmEhPT1lLmF8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5jbGVhckNvbG9yKHQucix0LmcsdC5iLHQuYSksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LHJ9KEgpLEc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIDF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmNsZWFyRGVwdGgodCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLFk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmNsZWFyU3RlbmNpbCh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksVz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm5bITAsITAsITAsITBdfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50Oyh0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV18fHRbMl0hPT1lWzJdfHx0WzNdIT09ZVszXXx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmNvbG9yTWFzayh0WzBdLHRbMV0sdFsyXSx0WzNdKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksWD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuZGVwdGhNYXNrKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSxaPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiAyNTV9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLnN0ZW5jaWxNYXNrKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSxKPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybntmdW5jOnRoaXMuZ2wuQUxXQVlTLHJlZjowLG1hc2s6MjU1fX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDsodC5mdW5jIT09ZS5mdW5jfHx0LnJlZiE9PWUucmVmfHx0Lm1hc2shPT1lLm1hc2t8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5zdGVuY2lsRnVuYyh0LmZ1bmMsdC5yZWYsdC5tYXNrKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksSz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3JldHVyblt0LktFRVAsdC5LRUVQLHQuS0VFUF19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXXx8dFsyXSE9PWVbMl18fHRoaXMuZGlydHkpJiYodGhpcy5nbC5zdGVuY2lsT3AodFswXSx0WzFdLHRbMl0pLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSxRPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDt0P2UuZW5hYmxlKGUuU1RFTkNJTF9URVNUKTplLmRpc2FibGUoZS5TVEVOQ0lMX1RFU1QpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShIKSwkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVyblswLDFdfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50Oyh0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV18fHRoaXMuZGlydHkpJiYodGhpcy5nbC5kZXB0aFJhbmdlKHRbMF0sdFsxXSksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLHR0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDt0P2UuZW5hYmxlKGUuREVQVEhfVEVTVCk6ZS5kaXNhYmxlKGUuREVQVEhfVEVTVCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KEgpLGV0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdsLkxFU1N9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmRlcHRoRnVuYyh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCkscnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO3Q/ZS5lbmFibGUoZS5CTEVORCk6ZS5kaXNhYmxlKGUuQkxFTkQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShIKSxudD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3JldHVyblt0Lk9ORSx0LlpFUk9dfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50Oyh0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV18fHRoaXMuZGlydHkpJiYodGhpcy5nbC5ibGVuZEZ1bmModFswXSx0WzFdKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksaXQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcigpe2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuQ29sb3IudHJhbnNwYXJlbnR9LHIucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHQuciE9PWUucnx8dC5nIT09ZS5nfHx0LmIhPT1lLmJ8fHQuYSE9PWUuYXx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmJsZW5kQ29sb3IodC5yLHQuZyx0LmIsdC5hKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0scn0oSCksYXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2wuRlVOQ19BRER9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmJsZW5kRXF1YXRpb24odCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLG90PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDt0P2UuZW5hYmxlKGUuQ1VMTF9GQUNFKTplLmRpc2FibGUoZS5DVUxMX0ZBQ0UpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShIKSxzdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbC5CQUNLfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7KHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5jdWxsRmFjZSh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksbHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2wuQ0NXfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7KHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5mcm9udEZhY2UodCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLGN0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7KHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpJiYodGhpcy5nbC51c2VQcm9ncmFtKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSx1dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbC5URVhUVVJFMH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuYWN0aXZlVGV4dHVyZSh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksZnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDtyZXR1cm5bMCwwLHQuZHJhd2luZ0J1ZmZlcldpZHRoLHQuZHJhd2luZ0J1ZmZlckhlaWdodF19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXXx8dFsyXSE9PWVbMl18fHRbM10hPT1lWzNdfHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wudmlld3BvcnQodFswXSx0WzFdLHRbMl0sdFszXSksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLGh0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDtlLmJpbmRGcmFtZWJ1ZmZlcihlLkZSQU1FQlVGRkVSLHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShIKSxwdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7ZS5iaW5kUmVuZGVyYnVmZmVyKGUuUkVOREVSQlVGRkVSLHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShIKSxkdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7ZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KEgpLG10PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDtlLmJpbmRCdWZmZXIoZS5BUlJBWV9CVUZGRVIsdCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KEgpLGd0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbDtlLmJpbmRCdWZmZXIoZS5FTEVNRU5UX0FSUkFZX0JVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfSxlfShIKSx2dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUpLHRoaXMudmFvPWUuZXh0VmVydGV4QXJyYXlPYmplY3R9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMudmFvJiYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLnZhby5iaW5kVmVydGV4QXJyYXlPRVModCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLHl0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiA0fSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDtlLnBpeGVsU3RvcmVpKGUuVU5QQUNLX0FMSUdOTUVOVCx0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oSCkseHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO2UucGl4ZWxTdG9yZWkoZS5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsdCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KEgpLGJ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDtlLnBpeGVsU3RvcmVpKGUuVU5QQUNLX0ZMSVBfWV9XRUJHTCx0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oSCksX3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUpLHRoaXMuY29udGV4dD1lLHRoaXMucGFyZW50PXJ9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZX0oSCksd3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXREaXJ0eT1mdW5jdGlvbigpe3RoaXMuZGlydHk9ITB9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldCh0aGlzLnBhcmVudCk7dmFyIGU9dGhpcy5nbDtlLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGUuRlJBTUVCVUZGRVIsZS5DT0xPUl9BVFRBQ0hNRU5UMCxlLlRFWFRVUkVfMkQsdCwwKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oX3QpLFR0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3RoaXMuY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KHRoaXMucGFyZW50KTt2YXIgZT10aGlzLmdsO2UuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoZS5GUkFNRUJVRkZFUixlLkRFUFRIX0FUVEFDSE1FTlQsZS5SRU5ERVJCVUZGRVIsdCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KF90KSxrdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLmNvbnRleHQ9dCx0aGlzLndpZHRoPWUsdGhpcy5oZWlnaHQ9cjt2YXIgaT10LmdsLGE9dGhpcy5mcmFtZWJ1ZmZlcj1pLmNyZWF0ZUZyYW1lYnVmZmVyKCk7dGhpcy5jb2xvckF0dGFjaG1lbnQ9bmV3IHd0KHQsYSksbiYmKHRoaXMuZGVwdGhBdHRhY2htZW50PW5ldyBUdCh0LGEpKX07a3QucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQuZ2wsZT10aGlzLmNvbG9yQXR0YWNobWVudC5nZXQoKTtpZihlJiZ0LmRlbGV0ZVRleHR1cmUoZSksdGhpcy5kZXB0aEF0dGFjaG1lbnQpe3ZhciByPXRoaXMuZGVwdGhBdHRhY2htZW50LmdldCgpO3ImJnQuZGVsZXRlUmVuZGVyYnVmZmVyKHIpfXQuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcil9O3ZhciBBdD1mdW5jdGlvbih0LGUscil7dGhpcy5mdW5jPXQsdGhpcy5tYXNrPWUsdGhpcy5yYW5nZT1yfTtBdC5SZWFkT25seT0hMSxBdC5SZWFkV3JpdGU9ITAsQXQuZGlzYWJsZWQ9bmV3IEF0KDUxOSxBdC5SZWFkT25seSxbMCwxXSk7dmFyIE10PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLnRlc3Q9dCx0aGlzLnJlZj1lLHRoaXMubWFzaz1yLHRoaXMuZmFpbD1uLHRoaXMuZGVwdGhGYWlsPWksdGhpcy5wYXNzPWF9O010LmRpc2FibGVkPW5ldyBNdCh7ZnVuYzo1MTksbWFzazowfSwwLDAsNzY4MCw3NjgwLDc2ODApO3ZhciBTdD1mdW5jdGlvbih0LGUscil7dGhpcy5ibGVuZEZ1bmN0aW9uPXQsdGhpcy5ibGVuZENvbG9yPWUsdGhpcy5tYXNrPXJ9O1N0LmRpc2FibGVkPW5ldyBTdChTdC5SZXBsYWNlPVsxLDBdLHQuQ29sb3IudHJhbnNwYXJlbnQsWyExLCExLCExLCExXSksU3QudW5ibGVuZGVkPW5ldyBTdChTdC5SZXBsYWNlLHQuQ29sb3IudHJhbnNwYXJlbnQsWyEwLCEwLCEwLCEwXSksU3QuYWxwaGFCbGVuZGVkPW5ldyBTdChbMSw3NzFdLHQuQ29sb3IudHJhbnNwYXJlbnQsWyEwLCEwLCEwLCEwXSk7dmFyIEV0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmVuYWJsZT10LHRoaXMubW9kZT1lLHRoaXMuZnJvbnRGYWNlPXJ9O0V0LmRpc2FibGVkPW5ldyBFdCghMSwxMDI5LDIzMDUpLEV0LmJhY2tDQ1c9bmV3IEV0KCEwLDEwMjksMjMwNSk7dmFyIEx0PWZ1bmN0aW9uKHQpe3RoaXMuZ2w9dCx0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0PXRoaXMuZ2wuZ2V0RXh0ZW5zaW9uKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLHRoaXMuY2xlYXJDb2xvcj1uZXcgcSh0aGlzKSx0aGlzLmNsZWFyRGVwdGg9bmV3IEcodGhpcyksdGhpcy5jbGVhclN0ZW5jaWw9bmV3IFkodGhpcyksdGhpcy5jb2xvck1hc2s9bmV3IFcodGhpcyksdGhpcy5kZXB0aE1hc2s9bmV3IFgodGhpcyksdGhpcy5zdGVuY2lsTWFzaz1uZXcgWih0aGlzKSx0aGlzLnN0ZW5jaWxGdW5jPW5ldyBKKHRoaXMpLHRoaXMuc3RlbmNpbE9wPW5ldyBLKHRoaXMpLHRoaXMuc3RlbmNpbFRlc3Q9bmV3IFEodGhpcyksdGhpcy5kZXB0aFJhbmdlPW5ldyAkKHRoaXMpLHRoaXMuZGVwdGhUZXN0PW5ldyB0dCh0aGlzKSx0aGlzLmRlcHRoRnVuYz1uZXcgZXQodGhpcyksdGhpcy5ibGVuZD1uZXcgcnQodGhpcyksdGhpcy5ibGVuZEZ1bmM9bmV3IG50KHRoaXMpLHRoaXMuYmxlbmRDb2xvcj1uZXcgaXQodGhpcyksdGhpcy5ibGVuZEVxdWF0aW9uPW5ldyBhdCh0aGlzKSx0aGlzLmN1bGxGYWNlPW5ldyBvdCh0aGlzKSx0aGlzLmN1bGxGYWNlU2lkZT1uZXcgc3QodGhpcyksdGhpcy5mcm9udEZhY2U9bmV3IGx0KHRoaXMpLHRoaXMucHJvZ3JhbT1uZXcgY3QodGhpcyksdGhpcy5hY3RpdmVUZXh0dXJlPW5ldyB1dCh0aGlzKSx0aGlzLnZpZXdwb3J0PW5ldyBmdCh0aGlzKSx0aGlzLmJpbmRGcmFtZWJ1ZmZlcj1uZXcgaHQodGhpcyksdGhpcy5iaW5kUmVuZGVyYnVmZmVyPW5ldyBwdCh0aGlzKSx0aGlzLmJpbmRUZXh0dXJlPW5ldyBkdCh0aGlzKSx0aGlzLmJpbmRWZXJ0ZXhCdWZmZXI9bmV3IG10KHRoaXMpLHRoaXMuYmluZEVsZW1lbnRCdWZmZXI9bmV3IGd0KHRoaXMpLHRoaXMuYmluZFZlcnRleEFycmF5T0VTPXRoaXMuZXh0VmVydGV4QXJyYXlPYmplY3QmJm5ldyB2dCh0aGlzKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2s9bmV3IHl0KHRoaXMpLHRoaXMucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGE9bmV3IHh0KHRoaXMpLHRoaXMucGl4ZWxTdG9yZVVucGFja0ZsaXBZPW5ldyBidCh0aGlzKSx0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYz10LmdldEV4dGVuc2lvbigiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fHQuZ2V0RXh0ZW5zaW9uKCJNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fHQuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIiksdGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMmJih0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY01heD10LmdldFBhcmFtZXRlcih0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpKSx0aGlzLmV4dFRleHR1cmVIYWxmRmxvYXQ9dC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSx0aGlzLmV4dFRleHR1cmVIYWxmRmxvYXQmJih0LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSx0aGlzLmV4dFJlbmRlclRvVGV4dHVyZUhhbGZGbG9hdD10LmdldEV4dGVuc2lvbigiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IikpLHRoaXMuZXh0VGltZXJRdWVyeT10LmdldEV4dGVuc2lvbigiRVhUX2Rpc2pvaW50X3RpbWVyX3F1ZXJ5Iil9O0x0LnByb3RvdHlwZS5zZXREZWZhdWx0PWZ1bmN0aW9uKCl7dGhpcy51bmJpbmRWQU8oKSx0aGlzLmNsZWFyQ29sb3Iuc2V0RGVmYXVsdCgpLHRoaXMuY2xlYXJEZXB0aC5zZXREZWZhdWx0KCksdGhpcy5jbGVhclN0ZW5jaWwuc2V0RGVmYXVsdCgpLHRoaXMuY29sb3JNYXNrLnNldERlZmF1bHQoKSx0aGlzLmRlcHRoTWFzay5zZXREZWZhdWx0KCksdGhpcy5zdGVuY2lsTWFzay5zZXREZWZhdWx0KCksdGhpcy5zdGVuY2lsRnVuYy5zZXREZWZhdWx0KCksdGhpcy5zdGVuY2lsT3Auc2V0RGVmYXVsdCgpLHRoaXMuc3RlbmNpbFRlc3Quc2V0RGVmYXVsdCgpLHRoaXMuZGVwdGhSYW5nZS5zZXREZWZhdWx0KCksdGhpcy5kZXB0aFRlc3Quc2V0RGVmYXVsdCgpLHRoaXMuZGVwdGhGdW5jLnNldERlZmF1bHQoKSx0aGlzLmJsZW5kLnNldERlZmF1bHQoKSx0aGlzLmJsZW5kRnVuYy5zZXREZWZhdWx0KCksdGhpcy5ibGVuZENvbG9yLnNldERlZmF1bHQoKSx0aGlzLmJsZW5kRXF1YXRpb24uc2V0RGVmYXVsdCgpLHRoaXMuY3VsbEZhY2Uuc2V0RGVmYXVsdCgpLHRoaXMuY3VsbEZhY2VTaWRlLnNldERlZmF1bHQoKSx0aGlzLmZyb250RmFjZS5zZXREZWZhdWx0KCksdGhpcy5wcm9ncmFtLnNldERlZmF1bHQoKSx0aGlzLmFjdGl2ZVRleHR1cmUuc2V0RGVmYXVsdCgpLHRoaXMuYmluZEZyYW1lYnVmZmVyLnNldERlZmF1bHQoKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2suc2V0RGVmYXVsdCgpLHRoaXMucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0RGVmYXVsdCgpLHRoaXMucGl4ZWxTdG9yZVVucGFja0ZsaXBZLnNldERlZmF1bHQoKX0sTHQucHJvdG90eXBlLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5jbGVhckNvbG9yLmRpcnR5PSEwLHRoaXMuY2xlYXJEZXB0aC5kaXJ0eT0hMCx0aGlzLmNsZWFyU3RlbmNpbC5kaXJ0eT0hMCx0aGlzLmNvbG9yTWFzay5kaXJ0eT0hMCx0aGlzLmRlcHRoTWFzay5kaXJ0eT0hMCx0aGlzLnN0ZW5jaWxNYXNrLmRpcnR5PSEwLHRoaXMuc3RlbmNpbEZ1bmMuZGlydHk9ITAsdGhpcy5zdGVuY2lsT3AuZGlydHk9ITAsdGhpcy5zdGVuY2lsVGVzdC5kaXJ0eT0hMCx0aGlzLmRlcHRoUmFuZ2UuZGlydHk9ITAsdGhpcy5kZXB0aFRlc3QuZGlydHk9ITAsdGhpcy5kZXB0aEZ1bmMuZGlydHk9ITAsdGhpcy5ibGVuZC5kaXJ0eT0hMCx0aGlzLmJsZW5kRnVuYy5kaXJ0eT0hMCx0aGlzLmJsZW5kQ29sb3IuZGlydHk9ITAsdGhpcy5ibGVuZEVxdWF0aW9uLmRpcnR5PSEwLHRoaXMuY3VsbEZhY2UuZGlydHk9ITAsdGhpcy5jdWxsRmFjZVNpZGUuZGlydHk9ITAsdGhpcy5mcm9udEZhY2UuZGlydHk9ITAsdGhpcy5wcm9ncmFtLmRpcnR5PSEwLHRoaXMuYWN0aXZlVGV4dHVyZS5kaXJ0eT0hMCx0aGlzLnZpZXdwb3J0LmRpcnR5PSEwLHRoaXMuYmluZEZyYW1lYnVmZmVyLmRpcnR5PSEwLHRoaXMuYmluZFJlbmRlcmJ1ZmZlci5kaXJ0eT0hMCx0aGlzLmJpbmRUZXh0dXJlLmRpcnR5PSEwLHRoaXMuYmluZFZlcnRleEJ1ZmZlci5kaXJ0eT0hMCx0aGlzLmJpbmRFbGVtZW50QnVmZmVyLmRpcnR5PSEwLHRoaXMuZXh0VmVydGV4QXJyYXlPYmplY3QmJih0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUy5kaXJ0eT0hMCksdGhpcy5waXhlbFN0b3JlVW5wYWNrLmRpcnR5PSEwLHRoaXMucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuZGlydHk9ITAsdGhpcy5waXhlbFN0b3JlVW5wYWNrRmxpcFkuZGlydHk9ITB9LEx0LnByb3RvdHlwZS5jcmVhdGVJbmRleEJ1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgaih0aGlzLHQsZSl9LEx0LnByb3RvdHlwZS5jcmVhdGVWZXJ0ZXhCdWZmZXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgVih0aGlzLHQsZSxyKX0sTHQucHJvdG90eXBlLmNyZWF0ZVJlbmRlcmJ1ZmZlcj1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5nbCxpPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCk7cmV0dXJuIHRoaXMuYmluZFJlbmRlcmJ1ZmZlci5zZXQoaSksbi5yZW5kZXJidWZmZXJTdG9yYWdlKG4uUkVOREVSQlVGRkVSLHQsZSxyKSx0aGlzLmJpbmRSZW5kZXJidWZmZXIuc2V0KG51bGwpLGl9LEx0LnByb3RvdHlwZS5jcmVhdGVGcmFtZWJ1ZmZlcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIG5ldyBrdCh0aGlzLHQsZSxyKX0sTHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY29sb3Iscj10LmRlcHRoLG49dGhpcy5nbCxpPTA7ZSYmKGl8PW4uQ09MT1JfQlVGRkVSX0JJVCx0aGlzLmNsZWFyQ29sb3Iuc2V0KGUpLHRoaXMuY29sb3JNYXNrLnNldChbITAsITAsITAsITBdKSksdm9pZCAwIT09ciYmKGl8PW4uREVQVEhfQlVGRkVSX0JJVCx0aGlzLmRlcHRoUmFuZ2Uuc2V0KFswLDFdKSx0aGlzLmNsZWFyRGVwdGguc2V0KHIpLHRoaXMuZGVwdGhNYXNrLnNldCghMCkpLG4uY2xlYXIoaSl9LEx0LnByb3RvdHlwZS5zZXRDdWxsRmFjZT1mdW5jdGlvbih0KXshMT09PXQuZW5hYmxlP3RoaXMuY3VsbEZhY2Uuc2V0KCExKToodGhpcy5jdWxsRmFjZS5zZXQoITApLHRoaXMuY3VsbEZhY2VTaWRlLnNldCh0Lm1vZGUpLHRoaXMuZnJvbnRGYWNlLnNldCh0LmZyb250RmFjZSkpfSxMdC5wcm90b3R5cGUuc2V0RGVwdGhNb2RlPWZ1bmN0aW9uKHQpe3QuZnVuYyE9PXRoaXMuZ2wuQUxXQVlTfHx0Lm1hc2s/KHRoaXMuZGVwdGhUZXN0LnNldCghMCksdGhpcy5kZXB0aEZ1bmMuc2V0KHQuZnVuYyksdGhpcy5kZXB0aE1hc2suc2V0KHQubWFzayksdGhpcy5kZXB0aFJhbmdlLnNldCh0LnJhbmdlKSk6dGhpcy5kZXB0aFRlc3Quc2V0KCExKX0sTHQucHJvdG90eXBlLnNldFN0ZW5jaWxNb2RlPWZ1bmN0aW9uKHQpe3QudGVzdC5mdW5jIT09dGhpcy5nbC5BTFdBWVN8fHQubWFzaz8odGhpcy5zdGVuY2lsVGVzdC5zZXQoITApLHRoaXMuc3RlbmNpbE1hc2suc2V0KHQubWFzayksdGhpcy5zdGVuY2lsT3Auc2V0KFt0LmZhaWwsdC5kZXB0aEZhaWwsdC5wYXNzXSksdGhpcy5zdGVuY2lsRnVuYy5zZXQoe2Z1bmM6dC50ZXN0LmZ1bmMscmVmOnQucmVmLG1hc2s6dC50ZXN0Lm1hc2t9KSk6dGhpcy5zdGVuY2lsVGVzdC5zZXQoITEpfSxMdC5wcm90b3R5cGUuc2V0Q29sb3JNb2RlPWZ1bmN0aW9uKGUpe3QuZGVlcEVxdWFsKGUuYmxlbmRGdW5jdGlvbixTdC5SZXBsYWNlKT90aGlzLmJsZW5kLnNldCghMSk6KHRoaXMuYmxlbmQuc2V0KCEwKSx0aGlzLmJsZW5kRnVuYy5zZXQoZS5ibGVuZEZ1bmN0aW9uKSx0aGlzLmJsZW5kQ29sb3Iuc2V0KGUuYmxlbmRDb2xvcikpLHRoaXMuY29sb3JNYXNrLnNldChlLm1hc2spfSxMdC5wcm90b3R5cGUudW5iaW5kVkFPPWZ1bmN0aW9uKCl7dGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdCYmdGhpcy5iaW5kVmVydGV4QXJyYXlPRVMuc2V0KG51bGwpfTt2YXIgQ3Q9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4saSl7dmFyIGE9dGhpcztlLmNhbGwodGhpcyksdGhpcy5pZD1yLHRoaXMuZGlzcGF0Y2hlcj1pLHRoaXMub24oImRhdGEiLChmdW5jdGlvbih0KXsic291cmNlIj09PXQuZGF0YVR5cGUmJiJtZXRhZGF0YSI9PT10LnNvdXJjZURhdGFUeXBlJiYoYS5fc291cmNlTG9hZGVkPSEwKSxhLl9zb3VyY2VMb2FkZWQmJiFhLl9wYXVzZWQmJiJzb3VyY2UiPT09dC5kYXRhVHlwZSYmImNvbnRlbnQiPT09dC5zb3VyY2VEYXRhVHlwZSYmKGEucmVsb2FkKCksYS50cmFuc2Zvcm0mJmEudXBkYXRlKGEudHJhbnNmb3JtKSl9KSksdGhpcy5vbigiZXJyb3IiLChmdW5jdGlvbigpe2EuX3NvdXJjZUVycm9yZWQ9ITB9KSksdGhpcy5fc291cmNlPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW5ldyBEW3IudHlwZV0oZSxyLG4saSk7aWYoYS5pZCE9PWUpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBTb3VyY2UgaWQgdG8gYmUgIitlKyIgaW5zdGVhZCBvZiAiK2EuaWQpO3JldHVybiB0LmJpbmRBbGwoWyJsb2FkIiwiYWJvcnQiLCJ1bmxvYWQiLCJzZXJpYWxpemUiLCJwcmVwYXJlIl0sYSksYX0ocixuLGksdGhpcyksdGhpcy5fdGlsZXM9e30sdGhpcy5fY2FjaGU9bmV3IE4oMCx0aGlzLl91bmxvYWRUaWxlLmJpbmQodGhpcykpLHRoaXMuX3RpbWVycz17fSx0aGlzLl9jYWNoZVRpbWVycz17fSx0aGlzLl9tYXhUaWxlQ2FjaGVTaXplPW51bGwsdGhpcy5fbG9hZGVkUGFyZW50VGlsZXM9e30sdGhpcy5fY292ZXJlZFRpbGVzPXt9LHRoaXMuX3N0YXRlPW5ldyB0LlNvdXJjZUZlYXR1cmVTdGF0ZX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLl9tYXhUaWxlQ2FjaGVTaXplPXQ/dC5fbWF4VGlsZUNhY2hlU2l6ZTpudWxsLHRoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLm9uQWRkJiZ0aGlzLl9zb3VyY2Uub25BZGQodCl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKHQpe3RoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLm9uUmVtb3ZlJiZ0aGlzLl9zb3VyY2Uub25SZW1vdmUodCl9LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe2lmKHRoaXMuX3NvdXJjZUVycm9yZWQpcmV0dXJuITA7aWYoIXRoaXMuX3NvdXJjZUxvYWRlZClyZXR1cm4hMTtpZighdGhpcy5fc291cmNlLmxvYWRlZCgpKXJldHVybiExO2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl7dmFyIGU9dGhpcy5fdGlsZXNbdF07aWYoImxvYWRlZCIhPT1lLnN0YXRlJiYiZXJyb3JlZCIhPT1lLnN0YXRlKXJldHVybiExfXJldHVybiEwfSxyLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc291cmNlfSxyLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMuX3BhdXNlZD0hMH0sci5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7aWYodGhpcy5fcGF1c2VkKXt2YXIgdD10aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZTt0aGlzLl9wYXVzZWQ9ITEsdGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU9ITEsdCYmdGhpcy5yZWxvYWQoKSx0aGlzLnRyYW5zZm9ybSYmdGhpcy51cGRhdGUodGhpcy50cmFuc2Zvcm0pfX0sci5wcm90b3R5cGUuX2xvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3NvdXJjZS5sb2FkVGlsZSh0LGUpfSxyLnByb3RvdHlwZS5fdW5sb2FkVGlsZT1mdW5jdGlvbih0KXtpZih0aGlzLl9zb3VyY2UudW5sb2FkVGlsZSlyZXR1cm4gdGhpcy5fc291cmNlLnVubG9hZFRpbGUodCwoZnVuY3Rpb24oKXt9KSl9LHIucHJvdG90eXBlLl9hYm9ydFRpbGU9ZnVuY3Rpb24odCl7aWYodGhpcy5fc291cmNlLmFib3J0VGlsZSlyZXR1cm4gdGhpcy5fc291cmNlLmFib3J0VGlsZSh0LChmdW5jdGlvbigpe30pKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXJjZS5zZXJpYWxpemUoKX0sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fc291cmNlLnByZXBhcmUmJnRoaXMuX3NvdXJjZS5wcmVwYXJlKCksdGhpcy5fc3RhdGUuY29hbGVzY2VDaGFuZ2VzKHRoaXMuX3RpbGVzLHRoaXMubWFwP3RoaXMubWFwLnBhaW50ZXI6bnVsbCksdGhpcy5fdGlsZXMpe3ZhciByPXRoaXMuX3RpbGVzW2VdO3IudXBsb2FkKHQpLHIucHJlcGFyZSh0aGlzLm1hcC5zdHlsZS5pbWFnZU1hbmFnZXIpfX0sci5wcm90b3R5cGUuZ2V0SWRzPWZ1bmN0aW9uKCl7cmV0dXJuIHQudmFsdWVzKHRoaXMuX3RpbGVzKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbGVJRH0pKS5zb3J0KFB0KS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pKX0sci5wcm90b3R5cGUuZ2V0UmVuZGVyYWJsZUlkcz1mdW5jdGlvbihlKXt2YXIgcj10aGlzLG49W107Zm9yKHZhciBpIGluIHRoaXMuX3RpbGVzKXRoaXMuX2lzSWRSZW5kZXJhYmxlKGksZSkmJm4ucHVzaCh0aGlzLl90aWxlc1tpXSk7cmV0dXJuIGU/bi5zb3J0KChmdW5jdGlvbihlLG4pe3ZhciBpPWUudGlsZUlELGE9bi50aWxlSUQsbz1uZXcgdC5Qb2ludChpLmNhbm9uaWNhbC54LGkuY2Fub25pY2FsLnkpLl9yb3RhdGUoci50cmFuc2Zvcm0uYW5nbGUpLHM9bmV3IHQuUG9pbnQoYS5jYW5vbmljYWwueCxhLmNhbm9uaWNhbC55KS5fcm90YXRlKHIudHJhbnNmb3JtLmFuZ2xlKTtyZXR1cm4gaS5vdmVyc2NhbGVkWi1hLm92ZXJzY2FsZWRafHxzLnktby55fHxzLngtby54fSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlsZUlELmtleX0pKTpuLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlsZUlEfSkpLnNvcnQoUHQpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSkpfSxyLnByb3RvdHlwZS5oYXNSZW5kZXJhYmxlUGFyZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZmluZExvYWRlZFBhcmVudCh0LDApO3JldHVybiEhZSYmdGhpcy5faXNJZFJlbmRlcmFibGUoZS50aWxlSUQua2V5KX0sci5wcm90b3R5cGUuX2lzSWRSZW5kZXJhYmxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3RpbGVzW3RdJiZ0aGlzLl90aWxlc1t0XS5oYXNEYXRhKCkmJiF0aGlzLl9jb3ZlcmVkVGlsZXNbdF0mJihlfHwhdGhpcy5fdGlsZXNbdF0uaG9sZGluZ0ZvckZhZGUoKSl9LHIucHJvdG90eXBlLnJlbG9hZD1mdW5jdGlvbigpe2lmKHRoaXMuX3BhdXNlZCl0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZT0hMDtlbHNlIGZvcih2YXIgdCBpbiB0aGlzLl9jYWNoZS5yZXNldCgpLHRoaXMuX3RpbGVzKSJlcnJvcmVkIiE9PXRoaXMuX3RpbGVzW3RdLnN0YXRlJiZ0aGlzLl9yZWxvYWRUaWxlKHQsInJlbG9hZGluZyIpfSxyLnByb3RvdHlwZS5fcmVsb2FkVGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3RpbGVzW3RdO3ImJigibG9hZGluZyIhPT1yLnN0YXRlJiYoci5zdGF0ZT1lKSx0aGlzLl9sb2FkVGlsZShyLHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLHIsdCxlKSkpfSxyLnByb3RvdHlwZS5fdGlsZUxvYWRlZD1mdW5jdGlvbihlLHIsbixpKXtpZihpKXJldHVybiBlLnN0YXRlPSJlcnJvcmVkIix2b2lkKDQwNCE9PWkuc3RhdHVzP3RoaXMuX3NvdXJjZS5maXJlKG5ldyB0LkVycm9yRXZlbnQoaSx7dGlsZTplfSkpOnRoaXMudXBkYXRlKHRoaXMudHJhbnNmb3JtKSk7ZS50aW1lQWRkZWQ9dC5icm93c2VyLm5vdygpLCJleHBpcmVkIj09PW4mJihlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uPSEwKSx0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIocixlKSwicmFzdGVyLWRlbSI9PT10aGlzLmdldFNvdXJjZSgpLnR5cGUmJmUuZGVtJiZ0aGlzLl9iYWNrZmlsbERFTShlKSx0aGlzLl9zdGF0ZS5pbml0aWFsaXplVGlsZVN0YXRlKGUsdGhpcy5tYXA/dGhpcy5tYXAucGFpbnRlcjpudWxsKSx0aGlzLl9zb3VyY2UuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHRpbGU6ZSxjb29yZDplLnRpbGVJRH0pKX0sci5wcm90b3R5cGUuX2JhY2tmaWxsREVNPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmdldFJlbmRlcmFibGVJZHMoKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07aWYodC5uZWlnaGJvcmluZ1RpbGVzJiZ0Lm5laWdoYm9yaW5nVGlsZXNbbl0pe3ZhciBpPXRoaXMuZ2V0VGlsZUJ5SUQobik7YSh0LGkpLGEoaSx0KX19ZnVuY3Rpb24gYSh0LGUpe3QubmVlZHNIaWxsc2hhZGVQcmVwYXJlPSEwO3ZhciByPWUudGlsZUlELmNhbm9uaWNhbC54LXQudGlsZUlELmNhbm9uaWNhbC54LG49ZS50aWxlSUQuY2Fub25pY2FsLnktdC50aWxlSUQuY2Fub25pY2FsLnksaT1NYXRoLnBvdygyLHQudGlsZUlELmNhbm9uaWNhbC56KSxhPWUudGlsZUlELmtleTswPT09ciYmMD09PW58fE1hdGguYWJzKG4pPjF8fChNYXRoLmFicyhyKT4xJiYoMT09PU1hdGguYWJzKHIraSk/cis9aToxPT09TWF0aC5hYnMoci1pKSYmKHItPWkpKSxlLmRlbSYmdC5kZW0mJih0LmRlbS5iYWNrZmlsbEJvcmRlcihlLmRlbSxyLG4pLHQubmVpZ2hib3JpbmdUaWxlcyYmdC5uZWlnaGJvcmluZ1RpbGVzW2FdJiYodC5uZWlnaGJvcmluZ1RpbGVzW2FdLmJhY2tmaWxsZWQ9ITApKSl9fSxyLnByb3RvdHlwZS5nZXRUaWxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFRpbGVCeUlEKHQua2V5KX0sci5wcm90b3R5cGUuZ2V0VGlsZUJ5SUQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3RpbGVzW3RdfSxyLnByb3RvdHlwZS5fcmV0YWluTG9hZGVkQ2hpbGRyZW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpIGluIHRoaXMuX3RpbGVzKXt2YXIgYT10aGlzLl90aWxlc1tpXTtpZighKG5baV18fCFhLmhhc0RhdGEoKXx8YS50aWxlSUQub3ZlcnNjYWxlZFo8PWV8fGEudGlsZUlELm92ZXJzY2FsZWRaPnIpKXtmb3IodmFyIG89YS50aWxlSUQ7YSYmYS50aWxlSUQub3ZlcnNjYWxlZFo+ZSsxOyl7dmFyIHM9YS50aWxlSUQuc2NhbGVkVG8oYS50aWxlSUQub3ZlcnNjYWxlZFotMSk7KGE9dGhpcy5fdGlsZXNbcy5rZXldKSYmYS5oYXNEYXRhKCkmJihvPXMpfWZvcih2YXIgbD1vO2wub3ZlcnNjYWxlZFo+ZTspaWYodFsobD1sLnNjYWxlZFRvKGwub3ZlcnNjYWxlZFotMSkpLmtleV0pe25bby5rZXldPW87YnJlYWt9fX19LHIucHJvdG90eXBlLmZpbmRMb2FkZWRQYXJlbnQ9ZnVuY3Rpb24odCxlKXtpZih0LmtleSBpbiB0aGlzLl9sb2FkZWRQYXJlbnRUaWxlcyl7dmFyIHI9dGhpcy5fbG9hZGVkUGFyZW50VGlsZXNbdC5rZXldO3JldHVybiByJiZyLnRpbGVJRC5vdmVyc2NhbGVkWj49ZT9yOm51bGx9Zm9yKHZhciBuPXQub3ZlcnNjYWxlZFotMTtuPj1lO24tLSl7dmFyIGk9dC5zY2FsZWRUbyhuKSxhPXRoaXMuX2dldExvYWRlZFRpbGUoaSk7aWYoYSlyZXR1cm4gYX19LHIucHJvdG90eXBlLl9nZXRMb2FkZWRUaWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVzW3Qua2V5XTtyZXR1cm4gZSYmZS5oYXNEYXRhKCk/ZTp0aGlzLl9jYWNoZS5nZXRCeUtleSh0LndyYXBwZWQoKS5rZXkpfSxyLnByb3RvdHlwZS51cGRhdGVDYWNoZVNpemU9ZnVuY3Rpb24odCl7dmFyIGU9KE1hdGguY2VpbCh0LndpZHRoL3RoaXMuX3NvdXJjZS50aWxlU2l6ZSkrMSkqKE1hdGguY2VpbCh0LmhlaWdodC90aGlzLl9zb3VyY2UudGlsZVNpemUpKzEpLHI9TWF0aC5mbG9vcig1KmUpLG49Im51bWJlciI9PXR5cGVvZiB0aGlzLl9tYXhUaWxlQ2FjaGVTaXplP01hdGgubWluKHRoaXMuX21heFRpbGVDYWNoZVNpemUscik6cjt0aGlzLl9jYWNoZS5zZXRNYXhTaXplKG4pfSxyLnByb3RvdHlwZS5oYW5kbGVXcmFwSnVtcD1mdW5jdGlvbih0KXt2YXIgZT0odC0odm9pZCAwPT09dGhpcy5fcHJldkxuZz90OnRoaXMuX3ByZXZMbmcpKS8zNjAscj1NYXRoLnJvdW5kKGUpO2lmKHRoaXMuX3ByZXZMbmc9dCxyKXt2YXIgbj17fTtmb3IodmFyIGkgaW4gdGhpcy5fdGlsZXMpe3ZhciBhPXRoaXMuX3RpbGVzW2ldO2EudGlsZUlEPWEudGlsZUlELnVud3JhcFRvKGEudGlsZUlELndyYXArciksblthLnRpbGVJRC5rZXldPWF9Zm9yKHZhciBvIGluIHRoaXMuX3RpbGVzPW4sdGhpcy5fdGltZXJzKWNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbb10pLGRlbGV0ZSB0aGlzLl90aW1lcnNbb107Zm9yKHZhciBzIGluIHRoaXMuX3RpbGVzKXt2YXIgbD10aGlzLl90aWxlc1tzXTt0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIocyxsKX19fSxyLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcztpZih0aGlzLnRyYW5zZm9ybT1lLHRoaXMuX3NvdXJjZUxvYWRlZCYmIXRoaXMuX3BhdXNlZCl7dmFyIGk7dGhpcy51cGRhdGVDYWNoZVNpemUoZSksdGhpcy5oYW5kbGVXcmFwSnVtcCh0aGlzLnRyYW5zZm9ybS5jZW50ZXIubG5nKSx0aGlzLl9jb3ZlcmVkVGlsZXM9e30sdGhpcy51c2VkP3RoaXMuX3NvdXJjZS50aWxlSUQ/aT1lLmdldFZpc2libGVVbndyYXBwZWRDb29yZGluYXRlcyh0aGlzLl9zb3VyY2UudGlsZUlEKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUuY2Fub25pY2FsLnosZS53cmFwLGUuY2Fub25pY2FsLnosZS5jYW5vbmljYWwueCxlLmNhbm9uaWNhbC55KX0pKTooaT1lLmNvdmVyaW5nVGlsZXMoe3RpbGVTaXplOnRoaXMuX3NvdXJjZS50aWxlU2l6ZSxtaW56b29tOnRoaXMuX3NvdXJjZS5taW56b29tLG1heHpvb206dGhpcy5fc291cmNlLm1heHpvb20scm91bmRab29tOnRoaXMuX3NvdXJjZS5yb3VuZFpvb20scmVwYXJzZU92ZXJzY2FsZWQ6dGhpcy5fc291cmNlLnJlcGFyc2VPdmVyc2NhbGVkfSksdGhpcy5fc291cmNlLmhhc1RpbGUmJihpPWkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gbi5fc291cmNlLmhhc1RpbGUodCl9KSkpKTppPVtdO3ZhciBhPWUuY292ZXJpbmdab29tTGV2ZWwodGhpcy5fc291cmNlKSxvPU1hdGgubWF4KGEtci5tYXhPdmVyem9vbWluZyx0aGlzLl9zb3VyY2UubWluem9vbSkscz1NYXRoLm1heChhK3IubWF4VW5kZXJ6b29taW5nLHRoaXMuX3NvdXJjZS5taW56b29tKSxsPXRoaXMuX3VwZGF0ZVJldGFpbmVkVGlsZXMoaSxhKTtpZihJdCh0aGlzLl9zb3VyY2UudHlwZSkpe2Zvcih2YXIgYz17fSx1PXt9LGY9MCxoPU9iamVjdC5rZXlzKGwpO2Y8aC5sZW5ndGg7Zis9MSl7dmFyIHA9aFtmXSxkPWxbcF0sbT10aGlzLl90aWxlc1twXTtpZihtJiYhKG0uZmFkZUVuZFRpbWUmJm0uZmFkZUVuZFRpbWU8PXQuYnJvd3Nlci5ub3coKSkpe3ZhciBnPXRoaXMuZmluZExvYWRlZFBhcmVudChkLG8pO2cmJih0aGlzLl9hZGRUaWxlKGcudGlsZUlEKSxjW2cudGlsZUlELmtleV09Zy50aWxlSUQpLHVbcF09ZH19Zm9yKHZhciB2IGluIHRoaXMuX3JldGFpbkxvYWRlZENoaWxkcmVuKHUsYSxzLGwpLGMpbFt2XXx8KHRoaXMuX2NvdmVyZWRUaWxlc1t2XT0hMCxsW3ZdPWNbdl0pfWZvcih2YXIgeSBpbiBsKXRoaXMuX3RpbGVzW3ldLmNsZWFyRmFkZUhvbGQoKTtmb3IodmFyIHg9MCxiPXQua2V5c0RpZmZlcmVuY2UodGhpcy5fdGlsZXMsbCk7eDxiLmxlbmd0aDt4Kz0xKXt2YXIgXz1iW3hdLHc9dGhpcy5fdGlsZXNbX107dy5oYXNTeW1ib2xCdWNrZXRzJiYhdy5ob2xkaW5nRm9yRmFkZSgpP3cuc2V0SG9sZER1cmF0aW9uKHRoaXMubWFwLl9mYWRlRHVyYXRpb24pOncuaGFzU3ltYm9sQnVja2V0cyYmIXcuc3ltYm9sRmFkZUZpbmlzaGVkKCl8fHRoaXMuX3JlbW92ZVRpbGUoXyl9dGhpcy5fdXBkYXRlTG9hZGVkUGFyZW50VGlsZUNhY2hlKCl9fSxyLnByb3RvdHlwZS5yZWxlYXNlU3ltYm9sRmFkZVRpbGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX3RpbGVzKXRoaXMuX3RpbGVzW3RdLmhvbGRpbmdGb3JGYWRlKCkmJnRoaXMuX3JlbW92ZVRpbGUodCl9LHIucHJvdG90eXBlLl91cGRhdGVSZXRhaW5lZFRpbGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXt9LGk9e30sYT1NYXRoLm1heChlLXIubWF4T3Zlcnpvb21pbmcsdGhpcy5fc291cmNlLm1pbnpvb20pLG89TWF0aC5tYXgoZStyLm1heFVuZGVyem9vbWluZyx0aGlzLl9zb3VyY2UubWluem9vbSkscz17fSxsPTAsYz10O2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXSxmPXRoaXMuX2FkZFRpbGUodSk7blt1LmtleV09dSxmLmhhc0RhdGEoKXx8ZTx0aGlzLl9zb3VyY2UubWF4em9vbSYmKHNbdS5rZXldPXUpfXRoaXMuX3JldGFpbkxvYWRlZENoaWxkcmVuKHMsZSxvLG4pO2Zvcih2YXIgaD0wLHA9dDtoPHAubGVuZ3RoO2grPTEpe3ZhciBkPXBbaF0sbT10aGlzLl90aWxlc1tkLmtleV07aWYoIW0uaGFzRGF0YSgpKXtpZihlKzE+dGhpcy5fc291cmNlLm1heHpvb20pe3ZhciBnPWQuY2hpbGRyZW4odGhpcy5fc291cmNlLm1heHpvb20pWzBdLHY9dGhpcy5nZXRUaWxlKGcpO2lmKHYmJnYuaGFzRGF0YSgpKXtuW2cua2V5XT1nO2NvbnRpbnVlfX1lbHNle3ZhciB5PWQuY2hpbGRyZW4odGhpcy5fc291cmNlLm1heHpvb20pO2lmKG5beVswXS5rZXldJiZuW3lbMV0ua2V5XSYmblt5WzJdLmtleV0mJm5beVszXS5rZXldKWNvbnRpbnVlfWZvcih2YXIgeD1tLndhc1JlcXVlc3RlZCgpLGI9ZC5vdmVyc2NhbGVkWi0xO2I+PWE7LS1iKXt2YXIgXz1kLnNjYWxlZFRvKGIpO2lmKGlbXy5rZXldKWJyZWFrO2lmKGlbXy5rZXldPSEwLCEobT10aGlzLmdldFRpbGUoXykpJiZ4JiYobT10aGlzLl9hZGRUaWxlKF8pKSxtJiYobltfLmtleV09Xyx4PW0ud2FzUmVxdWVzdGVkKCksbS5oYXNEYXRhKCkpKWJyZWFrfX19cmV0dXJuIG59LHIucHJvdG90eXBlLl91cGRhdGVMb2FkZWRQYXJlbnRUaWxlQ2FjaGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fbG9hZGVkUGFyZW50VGlsZXM9e30sdGhpcy5fdGlsZXMpe2Zvcih2YXIgZT1bXSxyPXZvaWQgMCxuPXRoaXMuX3RpbGVzW3RdLnRpbGVJRDtuLm92ZXJzY2FsZWRaPjA7KXtpZihuLmtleSBpbiB0aGlzLl9sb2FkZWRQYXJlbnRUaWxlcyl7cj10aGlzLl9sb2FkZWRQYXJlbnRUaWxlc1tuLmtleV07YnJlYWt9ZS5wdXNoKG4ua2V5KTt2YXIgaT1uLnNjYWxlZFRvKG4ub3ZlcnNjYWxlZFotMSk7aWYocj10aGlzLl9nZXRMb2FkZWRUaWxlKGkpKWJyZWFrO249aX1mb3IodmFyIGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdO3RoaXMuX2xvYWRlZFBhcmVudFRpbGVzW3NdPXJ9fX0sci5wcm90b3R5cGUuX2FkZFRpbGU9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fdGlsZXNbZS5rZXldO2lmKHIpcmV0dXJuIHI7KHI9dGhpcy5fY2FjaGUuZ2V0QW5kUmVtb3ZlKGUpKSYmKHRoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihlLmtleSxyKSxyLnRpbGVJRD1lLHRoaXMuX3N0YXRlLmluaXRpYWxpemVUaWxlU3RhdGUocix0aGlzLm1hcD90aGlzLm1hcC5wYWludGVyOm51bGwpLHRoaXMuX2NhY2hlVGltZXJzW2Uua2V5XSYmKGNsZWFyVGltZW91dCh0aGlzLl9jYWNoZVRpbWVyc1tlLmtleV0pLGRlbGV0ZSB0aGlzLl9jYWNoZVRpbWVyc1tlLmtleV0sdGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKGUua2V5LHIpKSk7dmFyIG49Qm9vbGVhbihyKTtyZXR1cm4gbnx8KHI9bmV3IHQuVGlsZShlLHRoaXMuX3NvdXJjZS50aWxlU2l6ZSplLm92ZXJzY2FsZUZhY3RvcigpKSx0aGlzLl9sb2FkVGlsZShyLHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLHIsZS5rZXksci5zdGF0ZSkpKSxyPyhyLnVzZXMrKyx0aGlzLl90aWxlc1tlLmtleV09cixufHx0aGlzLl9zb3VyY2UuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHt0aWxlOnIsY29vcmQ6ci50aWxlSUQsZGF0YVR5cGU6InNvdXJjZSJ9KSkscik6bnVsbH0sci5wcm90b3R5cGUuX3NldFRpbGVSZWxvYWRUaW1lcj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dCBpbiB0aGlzLl90aW1lcnMmJihjbGVhclRpbWVvdXQodGhpcy5fdGltZXJzW3RdKSxkZWxldGUgdGhpcy5fdGltZXJzW3RdKTt2YXIgbj1lLmdldEV4cGlyeVRpbWVvdXQoKTtuJiYodGhpcy5fdGltZXJzW3RdPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ci5fcmVsb2FkVGlsZSh0LCJleHBpcmVkIiksZGVsZXRlIHIuX3RpbWVyc1t0XX0pLG4pKX0sci5wcm90b3R5cGUuX3JlbW92ZVRpbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZXNbdF07ZSYmKGUudXNlcy0tLGRlbGV0ZSB0aGlzLl90aWxlc1t0XSx0aGlzLl90aW1lcnNbdF0mJihjbGVhclRpbWVvdXQodGhpcy5fdGltZXJzW3RdKSxkZWxldGUgdGhpcy5fdGltZXJzW3RdKSxlLnVzZXM+MHx8KGUuaGFzRGF0YSgpJiYicmVsb2FkaW5nIiE9PWUuc3RhdGU/dGhpcy5fY2FjaGUuYWRkKGUudGlsZUlELGUsZS5nZXRFeHBpcnlUaW1lb3V0KCkpOihlLmFib3J0ZWQ9ITAsdGhpcy5fYWJvcnRUaWxlKGUpLHRoaXMuX3VubG9hZFRpbGUoZSkpKSl9LHIucHJvdG90eXBlLmNsZWFyVGlsZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU9ITEsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3RpbGVzKXRoaXMuX3JlbW92ZVRpbGUodCk7dGhpcy5fY2FjaGUucmVzZXQoKX0sci5wcm90b3R5cGUudGlsZXNJbj1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcyxhPVtdLG89dGhpcy50cmFuc2Zvcm07aWYoIW8pcmV0dXJuIGE7Zm9yKHZhciBzPW4/by5nZXRDYW1lcmFRdWVyeUdlb21ldHJ5KGUpOmUsbD1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG8ucG9pbnRDb29yZGluYXRlKHQpfSkpLGM9cy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBvLnBvaW50Q29vcmRpbmF0ZSh0KX0pKSx1PXRoaXMuZ2V0SWRzKCksZj0xLzAsaD0xLzAscD0tMS8wLGQ9LTEvMCxtPTAsZz1jO208Zy5sZW5ndGg7bSs9MSl7dmFyIHY9Z1ttXTtmPU1hdGgubWluKGYsdi54KSxoPU1hdGgubWluKGgsdi55KSxwPU1hdGgubWF4KHAsdi54KSxkPU1hdGgubWF4KGQsdi55KX1mb3IodmFyIHk9ZnVuY3Rpb24oZSl7dmFyIG49aS5fdGlsZXNbdVtlXV07aWYoIW4uaG9sZGluZ0ZvckZhZGUoKSl7dmFyIHM9bi50aWxlSUQsbT1NYXRoLnBvdygyLG8uem9vbS1uLnRpbGVJRC5vdmVyc2NhbGVkWiksZz1yKm4ucXVlcnlQYWRkaW5nKnQuRVhURU5UL24udGlsZVNpemUvbSx2PVtzLmdldFRpbGVQb2ludChuZXcgdC5NZXJjYXRvckNvb3JkaW5hdGUoZixoKSkscy5nZXRUaWxlUG9pbnQobmV3IHQuTWVyY2F0b3JDb29yZGluYXRlKHAsZCkpXTtpZih2WzBdLngtZzx0LkVYVEVOVCYmdlswXS55LWc8dC5FWFRFTlQmJnZbMV0ueCtnPj0wJiZ2WzFdLnkrZz49MCl7dmFyIHk9bC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBzLmdldFRpbGVQb2ludCh0KX0pKSx4PWMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcy5nZXRUaWxlUG9pbnQodCl9KSk7YS5wdXNoKHt0aWxlOm4sdGlsZUlEOnMscXVlcnlHZW9tZXRyeTp5LGNhbWVyYVF1ZXJ5R2VvbWV0cnk6eCxzY2FsZTptfSl9fX0seD0wO3g8dS5sZW5ndGg7eCsrKXkoeCk7cmV0dXJuIGF9LHIucHJvdG90eXBlLmdldFZpc2libGVDb29yZGluYXRlcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPXRoaXMuZ2V0UmVuZGVyYWJsZUlkcyh0KS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90aWxlc1t0XS50aWxlSUR9KSksbj0wLGk9cjtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07YS5wb3NNYXRyaXg9dGhpcy50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KGEudG9VbndyYXBwZWQoKSl9cmV0dXJuIHJ9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtpZih0aGlzLl9zb3VyY2UuaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO2lmKEl0KHRoaXMuX3NvdXJjZS50eXBlKSlmb3IodmFyIGUgaW4gdGhpcy5fdGlsZXMpe3ZhciByPXRoaXMuX3RpbGVzW2VdO2lmKHZvaWQgMCE9PXIuZmFkZUVuZFRpbWUmJnIuZmFkZUVuZFRpbWU+PXQuYnJvd3Nlci5ub3coKSlyZXR1cm4hMH1yZXR1cm4hMX0sci5wcm90b3R5cGUuc2V0RmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQsZSxyKXt0PXR8fCJfZ2VvanNvblRpbGVMYXllciIsdGhpcy5fc3RhdGUudXBkYXRlU3RhdGUodCxlLHIpfSxyLnByb3RvdHlwZS5yZW1vdmVGZWF0dXJlU3RhdGU9ZnVuY3Rpb24odCxlLHIpe3Q9dHx8Il9nZW9qc29uVGlsZUxheWVyIix0aGlzLl9zdGF0ZS5yZW1vdmVGZWF0dXJlU3RhdGUodCxlLHIpfSxyLnByb3RvdHlwZS5nZXRGZWF0dXJlU3RhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD10fHwiX2dlb2pzb25UaWxlTGF5ZXIiLHRoaXMuX3N0YXRlLmdldFN0YXRlKHQsZSl9LHIucHJvdG90eXBlLnNldERlcGVuZGVuY2llcz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdGlsZXNbdF07biYmbi5zZXREZXBlbmRlbmNpZXMoZSxyKX0sci5wcm90b3R5cGUucmVsb2FkVGlsZXNGb3JEZXBlbmRlbmNpZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdGhpcy5fdGlsZXMpe3RoaXMuX3RpbGVzW3JdLmhhc0RlcGVuZGVuY3kodCxlKSYmdGhpcy5fcmVsb2FkVGlsZShyLCJyZWxvYWRpbmciKX10aGlzLl9jYWNoZS5maWx0ZXIoKGZ1bmN0aW9uKHIpe3JldHVybiFyLmhhc0RlcGVuZGVuY3kodCxlKX0pKX0scn0odC5FdmVudGVkKTtmdW5jdGlvbiBQdCh0LGUpe3ZhciByPU1hdGguYWJzKDIqdC53cmFwKS0rKHQud3JhcDwwKSxuPU1hdGguYWJzKDIqZS53cmFwKS0rKGUud3JhcDwwKTtyZXR1cm4gdC5vdmVyc2NhbGVkWi1lLm92ZXJzY2FsZWRafHxuLXJ8fGUuY2Fub25pY2FsLnktdC5jYW5vbmljYWwueXx8ZS5jYW5vbmljYWwueC10LmNhbm9uaWNhbC54fWZ1bmN0aW9uIEl0KHQpe3JldHVybiJyYXN0ZXIiPT09dHx8ImltYWdlIj09PXR8fCJ2aWRlbyI9PT10fWZ1bmN0aW9uIE90KCl7cmV0dXJuIG5ldyB0LndpbmRvdy5Xb3JrZXIoWmkud29ya2VyVXJsKX1DdC5tYXhPdmVyem9vbWluZz0xMCxDdC5tYXhVbmRlcnpvb21pbmc9Mzt2YXIgenQ9Im1hcGJveGdsX3ByZWxvYWRlZF93b3JrZXJfcG9vbCIsRHQ9ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZT17fX07RHQucHJvdG90eXBlLmFjcXVpcmU9ZnVuY3Rpb24odCl7aWYoIXRoaXMud29ya2Vycylmb3IodGhpcy53b3JrZXJzPVtdO3RoaXMud29ya2Vycy5sZW5ndGg8RHQud29ya2VyQ291bnQ7KXRoaXMud29ya2Vycy5wdXNoKG5ldyBPdCk7cmV0dXJuIHRoaXMuYWN0aXZlW3RdPSEwLHRoaXMud29ya2Vycy5zbGljZSgpfSxEdC5wcm90b3R5cGUucmVsZWFzZT1mdW5jdGlvbih0KXtkZWxldGUgdGhpcy5hY3RpdmVbdF0sMD09PXRoaXMubnVtQWN0aXZlKCkmJih0aGlzLndvcmtlcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC50ZXJtaW5hdGUoKX0pKSx0aGlzLndvcmtlcnM9bnVsbCl9LER0LnByb3RvdHlwZS5pc1ByZWxvYWRlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5hY3RpdmVbenRdfSxEdC5wcm90b3R5cGUubnVtQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYWN0aXZlKS5sZW5ndGh9O3ZhciBSdCxGdD1NYXRoLmZsb29yKHQuYnJvd3Nlci5oYXJkd2FyZUNvbmN1cnJlbmN5LzIpO2Z1bmN0aW9uIEJ0KCl7cmV0dXJuIFJ0fHwoUnQ9bmV3IER0KSxSdH1mdW5jdGlvbiBOdChlLHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiBlKSJyZWYiIT09aSYmKG5baV09ZVtpXSk7cmV0dXJuIHQucmVmUHJvcGVydGllcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0IGluIHImJihuW3RdPXJbdF0pfSkpLG59ZnVuY3Rpb24ganQodCl7dD10LnNsaWNlKCk7Zm9yKHZhciBlPU9iamVjdC5jcmVhdGUobnVsbCkscj0wO3I8dC5sZW5ndGg7cisrKWVbdFtyXS5pZF09dFtyXTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKykicmVmImluIHRbbl0mJih0W25dPU50KHRbbl0sZVt0W25dLnJlZl0pKTtyZXR1cm4gdH1EdC53b3JrZXJDb3VudD1NYXRoLm1heChNYXRoLm1pbihGdCw2KSwxKTt2YXIgVXQ9e3NldFN0eWxlOiJzZXRTdHlsZSIsYWRkTGF5ZXI6ImFkZExheWVyIixyZW1vdmVMYXllcjoicmVtb3ZlTGF5ZXIiLHNldFBhaW50UHJvcGVydHk6InNldFBhaW50UHJvcGVydHkiLHNldExheW91dFByb3BlcnR5OiJzZXRMYXlvdXRQcm9wZXJ0eSIsc2V0RmlsdGVyOiJzZXRGaWx0ZXIiLGFkZFNvdXJjZToiYWRkU291cmNlIixyZW1vdmVTb3VyY2U6InJlbW92ZVNvdXJjZSIsc2V0R2VvSlNPTlNvdXJjZURhdGE6InNldEdlb0pTT05Tb3VyY2VEYXRhIixzZXRMYXllclpvb21SYW5nZToic2V0TGF5ZXJab29tUmFuZ2UiLHNldExheWVyUHJvcGVydHk6InNldExheWVyUHJvcGVydHkiLHNldENlbnRlcjoic2V0Q2VudGVyIixzZXRab29tOiJzZXRab29tIixzZXRCZWFyaW5nOiJzZXRCZWFyaW5nIixzZXRQaXRjaDoic2V0UGl0Y2giLHNldFNwcml0ZToic2V0U3ByaXRlIixzZXRHbHlwaHM6InNldEdseXBocyIsc2V0VHJhbnNpdGlvbjoic2V0VHJhbnNpdGlvbiIsc2V0TGlnaHQ6InNldExpZ2h0In07ZnVuY3Rpb24gVnQodCxlLHIpe3IucHVzaCh7Y29tbWFuZDpVdC5hZGRTb3VyY2UsYXJnczpbdCxlW3RdXX0pfWZ1bmN0aW9uIEh0KHQsZSxyKXtlLnB1c2goe2NvbW1hbmQ6VXQucmVtb3ZlU291cmNlLGFyZ3M6W3RdfSksclt0XT0hMH1mdW5jdGlvbiBxdCh0LGUscixuKXtIdCh0LHIsbiksVnQodCxlLHIpfWZ1bmN0aW9uIEd0KGUscixuKXt2YXIgaTtmb3IoaSBpbiBlW25dKWlmKGVbbl0uaGFzT3duUHJvcGVydHkoaSkmJiJkYXRhIiE9PWkmJiF0LmRlZXBFcXVhbChlW25dW2ldLHJbbl1baV0pKXJldHVybiExO2ZvcihpIGluIHJbbl0paWYocltuXS5oYXNPd25Qcm9wZXJ0eShpKSYmImRhdGEiIT09aSYmIXQuZGVlcEVxdWFsKGVbbl1baV0scltuXVtpXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gWXQoZSxyLG4saSxhLG8pe3ZhciBzO2ZvcihzIGluIHI9cnx8e30sZT1lfHx7fSllLmhhc093blByb3BlcnR5KHMpJiYodC5kZWVwRXF1YWwoZVtzXSxyW3NdKXx8bi5wdXNoKHtjb21tYW5kOm8sYXJnczpbaSxzLHJbc10sYV19KSk7Zm9yKHMgaW4gcilyLmhhc093blByb3BlcnR5KHMpJiYhZS5oYXNPd25Qcm9wZXJ0eShzKSYmKHQuZGVlcEVxdWFsKGVbc10scltzXSl8fG4ucHVzaCh7Y29tbWFuZDpvLGFyZ3M6W2kscyxyW3NdLGFdfSkpfWZ1bmN0aW9uIFd0KHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIFh0KHQsZSl7cmV0dXJuIHRbZS5pZF09ZSx0fWZ1bmN0aW9uIFp0KGUscil7aWYoIWUpcmV0dXJuW3tjb21tYW5kOlV0LnNldFN0eWxlLGFyZ3M6W3JdfV07dmFyIG49W107dHJ5e2lmKCF0LmRlZXBFcXVhbChlLnZlcnNpb24sci52ZXJzaW9uKSlyZXR1cm5be2NvbW1hbmQ6VXQuc2V0U3R5bGUsYXJnczpbcl19XTt0LmRlZXBFcXVhbChlLmNlbnRlcixyLmNlbnRlcil8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRDZW50ZXIsYXJnczpbci5jZW50ZXJdfSksdC5kZWVwRXF1YWwoZS56b29tLHIuem9vbSl8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRab29tLGFyZ3M6W3Iuem9vbV19KSx0LmRlZXBFcXVhbChlLmJlYXJpbmcsci5iZWFyaW5nKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldEJlYXJpbmcsYXJnczpbci5iZWFyaW5nXX0pLHQuZGVlcEVxdWFsKGUucGl0Y2gsci5waXRjaCl8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRQaXRjaCxhcmdzOltyLnBpdGNoXX0pLHQuZGVlcEVxdWFsKGUuc3ByaXRlLHIuc3ByaXRlKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldFNwcml0ZSxhcmdzOltyLnNwcml0ZV19KSx0LmRlZXBFcXVhbChlLmdseXBocyxyLmdseXBocyl8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRHbHlwaHMsYXJnczpbci5nbHlwaHNdfSksdC5kZWVwRXF1YWwoZS50cmFuc2l0aW9uLHIudHJhbnNpdGlvbil8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRUcmFuc2l0aW9uLGFyZ3M6W3IudHJhbnNpdGlvbl19KSx0LmRlZXBFcXVhbChlLmxpZ2h0LHIubGlnaHQpfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0TGlnaHQsYXJnczpbci5saWdodF19KTt2YXIgaT17fSxhPVtdOyFmdW5jdGlvbihlLHIsbixpKXt2YXIgYTtmb3IoYSBpbiByPXJ8fHt9LGU9ZXx8e30pZS5oYXNPd25Qcm9wZXJ0eShhKSYmKHIuaGFzT3duUHJvcGVydHkoYSl8fEh0KGEsbixpKSk7Zm9yKGEgaW4gcilyLmhhc093blByb3BlcnR5KGEpJiYoZS5oYXNPd25Qcm9wZXJ0eShhKT90LmRlZXBFcXVhbChlW2FdLHJbYV0pfHwoImdlb2pzb24iPT09ZVthXS50eXBlJiYiZ2VvanNvbiI9PT1yW2FdLnR5cGUmJkd0KGUscixhKT9uLnB1c2goe2NvbW1hbmQ6VXQuc2V0R2VvSlNPTlNvdXJjZURhdGEsYXJnczpbYSxyW2FdLmRhdGFdfSk6cXQoYSxyLG4saSkpOlZ0KGEscixuKSl9KGUuc291cmNlcyxyLnNvdXJjZXMsYSxpKTt2YXIgbz1bXTtlLmxheWVycyYmZS5sYXllcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7aVt0LnNvdXJjZV0/bi5wdXNoKHtjb21tYW5kOlV0LnJlbW92ZUxheWVyLGFyZ3M6W3QuaWRdfSk6by5wdXNoKHQpfSkpLG49bi5jb25jYXQoYSksZnVuY3Rpb24oZSxyLG4pe3I9cnx8W107dmFyIGksYSxvLHMsbCxjLHUsZj0oZT1lfHxbXSkubWFwKFd0KSxoPXIubWFwKFd0KSxwPWUucmVkdWNlKFh0LHt9KSxkPXIucmVkdWNlKFh0LHt9KSxtPWYuc2xpY2UoKSxnPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGk9MCxhPTA7aTxmLmxlbmd0aDtpKyspbz1mW2ldLGQuaGFzT3duUHJvcGVydHkobyk/YSsrOihuLnB1c2goe2NvbW1hbmQ6VXQucmVtb3ZlTGF5ZXIsYXJnczpbb119KSxtLnNwbGljZShtLmluZGV4T2YobyxhKSwxKSk7Zm9yKGk9MCxhPTA7aTxoLmxlbmd0aDtpKyspbz1oW2gubGVuZ3RoLTEtaV0sbVttLmxlbmd0aC0xLWldIT09byYmKHAuaGFzT3duUHJvcGVydHkobyk/KG4ucHVzaCh7Y29tbWFuZDpVdC5yZW1vdmVMYXllcixhcmdzOltvXX0pLG0uc3BsaWNlKG0ubGFzdEluZGV4T2YobyxtLmxlbmd0aC1hKSwxKSk6YSsrLGM9bVttLmxlbmd0aC1pXSxuLnB1c2goe2NvbW1hbmQ6VXQuYWRkTGF5ZXIsYXJnczpbZFtvXSxjXX0pLG0uc3BsaWNlKG0ubGVuZ3RoLWksMCxvKSxnW29dPSEwKTtmb3IoaT0wO2k8aC5sZW5ndGg7aSsrKWlmKHM9cFtvPWhbaV1dLGw9ZFtvXSwhZ1tvXSYmIXQuZGVlcEVxdWFsKHMsbCkpaWYodC5kZWVwRXF1YWwocy5zb3VyY2UsbC5zb3VyY2UpJiZ0LmRlZXBFcXVhbChzWyJzb3VyY2UtbGF5ZXIiXSxsWyJzb3VyY2UtbGF5ZXIiXSkmJnQuZGVlcEVxdWFsKHMudHlwZSxsLnR5cGUpKXtmb3IodSBpbiBZdChzLmxheW91dCxsLmxheW91dCxuLG8sbnVsbCxVdC5zZXRMYXlvdXRQcm9wZXJ0eSksWXQocy5wYWludCxsLnBhaW50LG4sbyxudWxsLFV0LnNldFBhaW50UHJvcGVydHkpLHQuZGVlcEVxdWFsKHMuZmlsdGVyLGwuZmlsdGVyKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldEZpbHRlcixhcmdzOltvLGwuZmlsdGVyXX0pLHQuZGVlcEVxdWFsKHMubWluem9vbSxsLm1pbnpvb20pJiZ0LmRlZXBFcXVhbChzLm1heHpvb20sbC5tYXh6b29tKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldExheWVyWm9vbVJhbmdlLGFyZ3M6W28sbC5taW56b29tLGwubWF4em9vbV19KSxzKXMuaGFzT3duUHJvcGVydHkodSkmJiJsYXlvdXQiIT09dSYmInBhaW50IiE9PXUmJiJmaWx0ZXIiIT09dSYmIm1ldGFkYXRhIiE9PXUmJiJtaW56b29tIiE9PXUmJiJtYXh6b29tIiE9PXUmJigwPT09dS5pbmRleE9mKCJwYWludC4iKT9ZdChzW3VdLGxbdV0sbixvLHUuc2xpY2UoNiksVXQuc2V0UGFpbnRQcm9wZXJ0eSk6dC5kZWVwRXF1YWwoc1t1XSxsW3VdKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldExheWVyUHJvcGVydHksYXJnczpbbyx1LGxbdV1dfSkpO2Zvcih1IGluIGwpbC5oYXNPd25Qcm9wZXJ0eSh1KSYmIXMuaGFzT3duUHJvcGVydHkodSkmJiJsYXlvdXQiIT09dSYmInBhaW50IiE9PXUmJiJmaWx0ZXIiIT09dSYmIm1ldGFkYXRhIiE9PXUmJiJtaW56b29tIiE9PXUmJiJtYXh6b29tIiE9PXUmJigwPT09dS5pbmRleE9mKCJwYWludC4iKT9ZdChzW3VdLGxbdV0sbixvLHUuc2xpY2UoNiksVXQuc2V0UGFpbnRQcm9wZXJ0eSk6dC5kZWVwRXF1YWwoc1t1XSxsW3VdKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldExheWVyUHJvcGVydHksYXJnczpbbyx1LGxbdV1dfSkpfWVsc2Ugbi5wdXNoKHtjb21tYW5kOlV0LnJlbW92ZUxheWVyLGFyZ3M6W29dfSksYz1tW20ubGFzdEluZGV4T2YobykrMV0sbi5wdXNoKHtjb21tYW5kOlV0LmFkZExheWVyLGFyZ3M6W2wsY119KX0obyxyLmxheWVycyxuKX1jYXRjaCh0KXtjb25zb2xlLndhcm4oIlVuYWJsZSB0byBjb21wdXRlIHN0eWxlIGRpZmY6Iix0KSxuPVt7Y29tbWFuZDpVdC5zZXRTdHlsZSxhcmdzOltyXX1dfXJldHVybiBufXZhciBKdD1mdW5jdGlvbih0LGUpe3RoaXMucmVzZXQodCxlKX07SnQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKHQsZSl7dGhpcy5wb2ludHM9dHx8W10sdGhpcy5fZGlzdGFuY2VzPVswXTtmb3IodmFyIHI9MTtyPHRoaXMucG9pbnRzLmxlbmd0aDtyKyspdGhpcy5fZGlzdGFuY2VzW3JdPXRoaXMuX2Rpc3RhbmNlc1tyLTFdK3RoaXMucG9pbnRzW3JdLmRpc3QodGhpcy5wb2ludHNbci0xXSk7dGhpcy5sZW5ndGg9dGhpcy5fZGlzdGFuY2VzW3RoaXMuX2Rpc3RhbmNlcy5sZW5ndGgtMV0sdGhpcy5wYWRkaW5nPU1hdGgubWluKGV8fDAsLjUqdGhpcy5sZW5ndGgpLHRoaXMucGFkZGVkTGVuZ3RoPXRoaXMubGVuZ3RoLTIqdGhpcy5wYWRkaW5nfSxKdC5wcm90b3R5cGUubGVycD1mdW5jdGlvbihlKXtpZigxPT09dGhpcy5wb2ludHMubGVuZ3RoKXJldHVybiB0aGlzLnBvaW50c1swXTtlPXQuY2xhbXAoZSwwLDEpO2Zvcih2YXIgcj0xLG49dGhpcy5fZGlzdGFuY2VzW3JdLGk9ZSp0aGlzLnBhZGRlZExlbmd0aCt0aGlzLnBhZGRpbmc7bjxpJiZyPHRoaXMuX2Rpc3RhbmNlcy5sZW5ndGg7KW49dGhpcy5fZGlzdGFuY2VzWysrcl07dmFyIGE9ci0xLG89dGhpcy5fZGlzdGFuY2VzW2FdLHM9bi1vLGw9cz4wPyhpLW8pL3M6MDtyZXR1cm4gdGhpcy5wb2ludHNbYV0ubXVsdCgxLWwpLmFkZCh0aGlzLnBvaW50c1tyXS5tdWx0KGwpKX07dmFyIEt0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmJveENlbGxzPVtdLGk9dGhpcy5jaXJjbGVDZWxscz1bXTt0aGlzLnhDZWxsQ291bnQ9TWF0aC5jZWlsKHQvciksdGhpcy55Q2VsbENvdW50PU1hdGguY2VpbChlL3IpO2Zvcih2YXIgYT0wO2E8dGhpcy54Q2VsbENvdW50KnRoaXMueUNlbGxDb3VudDthKyspbi5wdXNoKFtdKSxpLnB1c2goW10pO3RoaXMuY2lyY2xlS2V5cz1bXSx0aGlzLmJveEtleXM9W10sdGhpcy5iYm94ZXM9W10sdGhpcy5jaXJjbGVzPVtdLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMueFNjYWxlPXRoaXMueENlbGxDb3VudC90LHRoaXMueVNjYWxlPXRoaXMueUNlbGxDb3VudC9lLHRoaXMuYm94VWlkPTAsdGhpcy5jaXJjbGVVaWQ9MH07ZnVuY3Rpb24gUXQoZSxyLG4saSxhKXt2YXIgbz10LmNyZWF0ZSgpO3JldHVybiByPyh0LnNjYWxlKG8sbyxbMS9hLDEvYSwxXSksbnx8dC5yb3RhdGVaKG8sbyxpLmFuZ2xlKSk6dC5tdWx0aXBseShvLGkubGFiZWxQbGFuZU1hdHJpeCxlKSxvfWZ1bmN0aW9uICR0KGUscixuLGksYSl7aWYocil7dmFyIG89dC5jbG9uZShlKTtyZXR1cm4gdC5zY2FsZShvLG8sW2EsYSwxXSksbnx8dC5yb3RhdGVaKG8sbywtaS5hbmdsZSksb31yZXR1cm4gaS5nbENvb3JkTWF0cml4fWZ1bmN0aW9uIHRlKGUscil7dmFyIG49W2UueCxlLnksMCwxXTtmZShuLG4scik7dmFyIGk9blszXTtyZXR1cm57cG9pbnQ6bmV3IHQuUG9pbnQoblswXS9pLG5bMV0vaSksc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhOml9fWZ1bmN0aW9uIGVlKHQsZSl7cmV0dXJuLjUrdC9lKi41fWZ1bmN0aW9uIHJlKHQsZSl7dmFyIHI9dFswXS90WzNdLG49dFsxXS90WzNdO3JldHVybiByPj0tZVswXSYmcjw9ZVswXSYmbj49LWVbMV0mJm48PWVbMV19ZnVuY3Rpb24gbmUoZSxyLG4saSxhLG8scyxsKXt2YXIgYz1pP2UudGV4dFNpemVEYXRhOmUuaWNvblNpemVEYXRhLHU9dC5ldmFsdWF0ZVNpemVGb3Jab29tKGMsbi50cmFuc2Zvcm0uem9vbSksZj1bMjU2L24ud2lkdGgqMisxLDI1Ni9uLmhlaWdodCoyKzFdLGg9aT9lLnRleHQuZHluYW1pY0xheW91dFZlcnRleEFycmF5OmUuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk7aC5jbGVhcigpO2Zvcih2YXIgcD1lLmxpbmVWZXJ0ZXhBcnJheSxkPWk/ZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5OmUuaWNvbi5wbGFjZWRTeW1ib2xBcnJheSxtPW4udHJhbnNmb3JtLndpZHRoL24udHJhbnNmb3JtLmhlaWdodCxnPSExLHY9MDt2PGQubGVuZ3RoO3YrKyl7dmFyIHk9ZC5nZXQodik7aWYoeS5oaWRkZW58fHkud3JpdGluZ01vZGU9PT10LldyaXRpbmdNb2RlLnZlcnRpY2FsJiYhZyl1ZSh5Lm51bUdseXBocyxoKTtlbHNle2c9ITE7dmFyIHg9W3kuYW5jaG9yWCx5LmFuY2hvclksMCwxXTtpZih0LnRyYW5zZm9ybU1hdDQoeCx4LHIpLHJlKHgsZikpe3ZhciBiPXhbM10sXz1lZShuLnRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLGIpLHc9dC5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlKGMsdSx5KSxUPXM/dy9fOncqXyxrPW5ldyB0LlBvaW50KHkuYW5jaG9yWCx5LmFuY2hvclkpLEE9dGUoayxhKS5wb2ludCxNPXt9LFM9b2UoeSxULCExLGwscixhLG8sZS5nbHlwaE9mZnNldEFycmF5LHAsaCxBLGssTSxtKTtnPVMudXNlVmVydGljYWwsKFMubm90RW5vdWdoUm9vbXx8Z3x8Uy5uZWVkc0ZsaXBwaW5nJiZvZSh5LFQsITAsbCxyLGEsbyxlLmdseXBoT2Zmc2V0QXJyYXkscCxoLEEsayxNLG0pLm5vdEVub3VnaFJvb20pJiZ1ZSh5Lm51bUdseXBocyxoKX1lbHNlIHVlKHkubnVtR2x5cGhzLGgpfX1pP2UudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoaCk6ZS5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShoKX1mdW5jdGlvbiBpZSh0LGUscixuLGksYSxvLHMsbCxjLHUpe3ZhciBmPXMuZ2x5cGhTdGFydEluZGV4K3MubnVtR2x5cGhzLGg9cy5saW5lU3RhcnRJbmRleCxwPXMubGluZVN0YXJ0SW5kZXgrcy5saW5lTGVuZ3RoLGQ9ZS5nZXRvZmZzZXRYKHMuZ2x5cGhTdGFydEluZGV4KSxtPWUuZ2V0b2Zmc2V0WChmLTEpLGc9bGUodCpkLHIsbixpLGEsbyxzLnNlZ21lbnQsaCxwLGwsYyx1KTtpZighZylyZXR1cm4gbnVsbDt2YXIgdj1sZSh0Km0scixuLGksYSxvLHMuc2VnbWVudCxoLHAsbCxjLHUpO3JldHVybiB2P3tmaXJzdDpnLGxhc3Q6dn06bnVsbH1mdW5jdGlvbiBhZShlLHIsbixpKXtpZihlPT09dC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsJiZNYXRoLmFicyhuLnktci55KT5NYXRoLmFicyhuLngtci54KSppKXJldHVybnt1c2VWZXJ0aWNhbDohMH07cmV0dXJuKGU9PT10LldyaXRpbmdNb2RlLnZlcnRpY2FsP3IueTxuLnk6ci54Pm4ueCk/e25lZWRzRmxpcHBpbmc6ITB9Om51bGx9ZnVuY3Rpb24gb2UoZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkKXt2YXIgbSxnPXIvMjQsdj1lLmxpbmVPZmZzZXRYKmcseT1lLmxpbmVPZmZzZXRZKmc7aWYoZS5udW1HbHlwaHM+MSl7dmFyIHg9ZS5nbHlwaFN0YXJ0SW5kZXgrZS5udW1HbHlwaHMsYj1lLmxpbmVTdGFydEluZGV4LF89ZS5saW5lU3RhcnRJbmRleCtlLmxpbmVMZW5ndGgsdz1pZShnLGwsdix5LG4sZixoLGUsYyxvLHApO2lmKCF3KXJldHVybntub3RFbm91Z2hSb29tOiEwfTt2YXIgVD10ZSh3LmZpcnN0LnBvaW50LHMpLnBvaW50LGs9dGUody5sYXN0LnBvaW50LHMpLnBvaW50O2lmKGkmJiFuKXt2YXIgQT1hZShlLndyaXRpbmdNb2RlLFQsayxkKTtpZihBKXJldHVybiBBfW09W3cuZmlyc3RdO2Zvcih2YXIgTT1lLmdseXBoU3RhcnRJbmRleCsxO008eC0xO00rKyltLnB1c2gobGUoZypsLmdldG9mZnNldFgoTSksdix5LG4sZixoLGUuc2VnbWVudCxiLF8sYyxvLHApKTttLnB1c2gody5sYXN0KX1lbHNle2lmKGkmJiFuKXt2YXIgUz10ZShoLGEpLnBvaW50LEU9ZS5saW5lU3RhcnRJbmRleCtlLnNlZ21lbnQrMSxMPW5ldyB0LlBvaW50KGMuZ2V0eChFKSxjLmdldHkoRSkpLEM9dGUoTCxhKSxQPUMuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhPjA/Qy5wb2ludDpzZShoLEwsUywxLGEpLEk9YWUoZS53cml0aW5nTW9kZSxTLFAsZCk7aWYoSSlyZXR1cm4gSX12YXIgTz1sZShnKmwuZ2V0b2Zmc2V0WChlLmdseXBoU3RhcnRJbmRleCksdix5LG4sZixoLGUuc2VnbWVudCxlLmxpbmVTdGFydEluZGV4LGUubGluZVN0YXJ0SW5kZXgrZS5saW5lTGVuZ3RoLGMsbyxwKTtpZighTylyZXR1cm57bm90RW5vdWdoUm9vbTohMH07bT1bT119Zm9yKHZhciB6PTAsRD1tO3o8RC5sZW5ndGg7eis9MSl7dmFyIFI9RFt6XTt0LmFkZER5bmFtaWNBdHRyaWJ1dGVzKHUsUi5wb2ludCxSLmFuZ2xlKX1yZXR1cm57fX1mdW5jdGlvbiBzZSh0LGUscixuLGkpe3ZhciBhPXRlKHQuYWRkKHQuc3ViKGUpLl91bml0KCkpLGkpLnBvaW50LG89ci5zdWIoYSk7cmV0dXJuIHIuYWRkKG8uX211bHQobi9vLm1hZygpKSl9ZnVuY3Rpb24gbGUoZSxyLG4saSxhLG8scyxsLGMsdSxmLGgpe3ZhciBwPWk/ZS1yOmUrcixkPXA+MD8xOi0xLG09MDtpJiYoZCo9LTEsbT1NYXRoLlBJKSxkPDAmJihtKz1NYXRoLlBJKTtmb3IodmFyIGc9ZD4wP2wrczpsK3MrMSx2PWEseT1hLHg9MCxiPTAsXz1NYXRoLmFicyhwKSx3PVtdO3grYjw9Xzspe2lmKChnKz1kKTxsfHxnPj1jKXJldHVybiBudWxsO2lmKHk9dix3LnB1c2godiksdm9pZCAwPT09KHY9aFtnXSkpe3ZhciBUPW5ldyB0LlBvaW50KHUuZ2V0eChnKSx1LmdldHkoZykpLGs9dGUoVCxmKTtpZihrLnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYT4wKXY9aFtnXT1rLnBvaW50O2Vsc2V7dmFyIEE9Zy1kO3Y9c2UoMD09PXg/bzpuZXcgdC5Qb2ludCh1LmdldHgoQSksdS5nZXR5KEEpKSxULHksXy14KzEsZil9fXgrPWIsYj15LmRpc3Qodil9dmFyIE09KF8teCkvYixTPXYuc3ViKHkpLEU9Uy5tdWx0KE0pLl9hZGQoeSk7RS5fYWRkKFMuX3VuaXQoKS5fcGVycCgpLl9tdWx0KG4qZCkpO3ZhciBMPW0rTWF0aC5hdGFuMih2LnkteS55LHYueC15LngpO3JldHVybiB3LnB1c2goRSkse3BvaW50OkUsYW5nbGU6TCxwYXRoOnd9fUt0LnByb3RvdHlwZS5rZXlzTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm94S2V5cy5sZW5ndGgrdGhpcy5jaXJjbGVLZXlzLmxlbmd0aH0sS3QucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMuX2ZvckVhY2hDZWxsKGUscixuLGksdGhpcy5faW5zZXJ0Qm94Q2VsbCx0aGlzLmJveFVpZCsrKSx0aGlzLmJveEtleXMucHVzaCh0KSx0aGlzLmJib3hlcy5wdXNoKGUpLHRoaXMuYmJveGVzLnB1c2gociksdGhpcy5iYm94ZXMucHVzaChuKSx0aGlzLmJib3hlcy5wdXNoKGkpfSxLdC5wcm90b3R5cGUuaW5zZXJ0Q2lyY2xlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuX2ZvckVhY2hDZWxsKGUtbixyLW4sZStuLHIrbix0aGlzLl9pbnNlcnRDaXJjbGVDZWxsLHRoaXMuY2lyY2xlVWlkKyspLHRoaXMuY2lyY2xlS2V5cy5wdXNoKHQpLHRoaXMuY2lyY2xlcy5wdXNoKGUpLHRoaXMuY2lyY2xlcy5wdXNoKHIpLHRoaXMuY2lyY2xlcy5wdXNoKG4pfSxLdC5wcm90b3R5cGUuX2luc2VydEJveENlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuYm94Q2VsbHNbaV0ucHVzaChhKX0sS3QucHJvdG90eXBlLl9pbnNlcnRDaXJjbGVDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLmNpcmNsZUNlbGxzW2ldLnB1c2goYSl9LEt0LnByb3RvdHlwZS5fcXVlcnk9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKHI8MHx8dD50aGlzLndpZHRofHxuPDB8fGU+dGhpcy5oZWlnaHQpcmV0dXJuIWkmJltdO3ZhciBvPVtdO2lmKHQ8PTAmJmU8PTAmJnRoaXMud2lkdGg8PXImJnRoaXMuaGVpZ2h0PD1uKXtpZihpKXJldHVybiEwO2Zvcih2YXIgcz0wO3M8dGhpcy5ib3hLZXlzLmxlbmd0aDtzKyspby5wdXNoKHtrZXk6dGhpcy5ib3hLZXlzW3NdLHgxOnRoaXMuYmJveGVzWzQqc10seTE6dGhpcy5iYm94ZXNbNCpzKzFdLHgyOnRoaXMuYmJveGVzWzQqcysyXSx5Mjp0aGlzLmJib3hlc1s0KnMrM119KTtmb3IodmFyIGw9MDtsPHRoaXMuY2lyY2xlS2V5cy5sZW5ndGg7bCsrKXt2YXIgYz10aGlzLmNpcmNsZXNbMypsXSx1PXRoaXMuY2lyY2xlc1szKmwrMV0sZj10aGlzLmNpcmNsZXNbMypsKzJdO28ucHVzaCh7a2V5OnRoaXMuY2lyY2xlS2V5c1tsXSx4MTpjLWYseTE6dS1mLHgyOmMrZix5Mjp1K2Z9KX1yZXR1cm4gYT9vLmZpbHRlcihhKTpvfXZhciBoPXtoaXRUZXN0Omksc2VlblVpZHM6e2JveDp7fSxjaXJjbGU6e319fTtyZXR1cm4gdGhpcy5fZm9yRWFjaENlbGwodCxlLHIsbix0aGlzLl9xdWVyeUNlbGwsbyxoLGEpLGk/by5sZW5ndGg+MDpvfSxLdC5wcm90b3R5cGUuX3F1ZXJ5Q2lyY2xlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dC1yLG89dCtyLHM9ZS1yLGw9ZStyO2lmKG88MHx8YT50aGlzLndpZHRofHxsPDB8fHM+dGhpcy5oZWlnaHQpcmV0dXJuIW4mJltdO3ZhciBjPVtdLHU9e2hpdFRlc3Q6bixjaXJjbGU6e3g6dCx5OmUscmFkaXVzOnJ9LHNlZW5VaWRzOntib3g6e30sY2lyY2xlOnt9fX07cmV0dXJuIHRoaXMuX2ZvckVhY2hDZWxsKGEscyxvLGwsdGhpcy5fcXVlcnlDZWxsQ2lyY2xlLGMsdSxpKSxuP2MubGVuZ3RoPjA6Y30sS3QucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHRoaXMuX3F1ZXJ5KHQsZSxyLG4sITEsaSl9LEt0LnByb3RvdHlwZS5oaXRUZXN0PWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHRoaXMuX3F1ZXJ5KHQsZSxyLG4sITAsaSl9LEt0LnByb3RvdHlwZS5oaXRUZXN0Q2lyY2xlPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9xdWVyeUNpcmNsZSh0LGUsciwhMCxuKX0sS3QucHJvdG90eXBlLl9xdWVyeUNlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD1vLnNlZW5VaWRzLGM9dGhpcy5ib3hDZWxsc1tpXTtpZihudWxsIT09Yylmb3IodmFyIHU9dGhpcy5iYm94ZXMsZj0wLGg9YztmPGgubGVuZ3RoO2YrPTEpe3ZhciBwPWhbZl07aWYoIWwuYm94W3BdKXtsLmJveFtwXT0hMDt2YXIgZD00KnA7aWYodDw9dVtkKzJdJiZlPD11W2QrM10mJnI+PXVbZCswXSYmbj49dVtkKzFdJiYoIXN8fHModGhpcy5ib3hLZXlzW3BdKSkpe2lmKG8uaGl0VGVzdClyZXR1cm4gYS5wdXNoKCEwKSwhMDthLnB1c2goe2tleTp0aGlzLmJveEtleXNbcF0seDE6dVtkXSx5MTp1W2QrMV0seDI6dVtkKzJdLHkyOnVbZCszXX0pfX19dmFyIG09dGhpcy5jaXJjbGVDZWxsc1tpXTtpZihudWxsIT09bSlmb3IodmFyIGc9dGhpcy5jaXJjbGVzLHY9MCx5PW07djx5Lmxlbmd0aDt2Kz0xKXt2YXIgeD15W3ZdO2lmKCFsLmNpcmNsZVt4XSl7bC5jaXJjbGVbeF09ITA7dmFyIGI9Myp4O2lmKHRoaXMuX2NpcmNsZUFuZFJlY3RDb2xsaWRlKGdbYl0sZ1tiKzFdLGdbYisyXSx0LGUscixuKSYmKCFzfHxzKHRoaXMuY2lyY2xlS2V5c1t4XSkpKXtpZihvLmhpdFRlc3QpcmV0dXJuIGEucHVzaCghMCksITA7dmFyIF89Z1tiXSx3PWdbYisxXSxUPWdbYisyXTthLnB1c2goe2tleTp0aGlzLmNpcmNsZUtleXNbeF0seDE6Xy1ULHkxOnctVCx4MjpfK1QseTI6dytUfSl9fX19LEt0LnByb3RvdHlwZS5fcXVlcnlDZWxsQ2lyY2xlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9by5jaXJjbGUsYz1vLnNlZW5VaWRzLHU9dGhpcy5ib3hDZWxsc1tpXTtpZihudWxsIT09dSlmb3IodmFyIGY9dGhpcy5iYm94ZXMsaD0wLHA9dTtoPHAubGVuZ3RoO2grPTEpe3ZhciBkPXBbaF07aWYoIWMuYm94W2RdKXtjLmJveFtkXT0hMDt2YXIgbT00KmQ7aWYodGhpcy5fY2lyY2xlQW5kUmVjdENvbGxpZGUobC54LGwueSxsLnJhZGl1cyxmW20rMF0sZlttKzFdLGZbbSsyXSxmW20rM10pJiYoIXN8fHModGhpcy5ib3hLZXlzW2RdKSkpcmV0dXJuIGEucHVzaCghMCksITB9fXZhciBnPXRoaXMuY2lyY2xlQ2VsbHNbaV07aWYobnVsbCE9PWcpZm9yKHZhciB2PXRoaXMuY2lyY2xlcyx5PTAseD1nO3k8eC5sZW5ndGg7eSs9MSl7dmFyIGI9eFt5XTtpZighYy5jaXJjbGVbYl0pe2MuY2lyY2xlW2JdPSEwO3ZhciBfPTMqYjtpZih0aGlzLl9jaXJjbGVzQ29sbGlkZSh2W19dLHZbXysxXSx2W18rMl0sbC54LGwueSxsLnJhZGl1cykmJighc3x8cyh0aGlzLmNpcmNsZUtleXNbYl0pKSlyZXR1cm4gYS5wdXNoKCEwKSwhMH19fSxLdC5wcm90b3R5cGUuX2ZvckVhY2hDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7Zm9yKHZhciBsPXRoaXMuX2NvbnZlcnRUb1hDZWxsQ29vcmQodCksYz10aGlzLl9jb252ZXJ0VG9ZQ2VsbENvb3JkKGUpLHU9dGhpcy5fY29udmVydFRvWENlbGxDb29yZChyKSxmPXRoaXMuX2NvbnZlcnRUb1lDZWxsQ29vcmQobiksaD1sO2g8PXU7aCsrKWZvcih2YXIgcD1jO3A8PWY7cCsrKXt2YXIgZD10aGlzLnhDZWxsQ291bnQqcCtoO2lmKGkuY2FsbCh0aGlzLHQsZSxyLG4sZCxhLG8scykpcmV0dXJufX0sS3QucHJvdG90eXBlLl9jb252ZXJ0VG9YQ2VsbENvb3JkPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKHRoaXMueENlbGxDb3VudC0xLE1hdGguZmxvb3IodCp0aGlzLnhTY2FsZSkpKX0sS3QucHJvdG90eXBlLl9jb252ZXJ0VG9ZQ2VsbENvb3JkPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKHRoaXMueUNlbGxDb3VudC0xLE1hdGguZmxvb3IodCp0aGlzLnlTY2FsZSkpKX0sS3QucHJvdG90eXBlLl9jaXJjbGVzQ29sbGlkZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89bi10LHM9aS1lLGw9cithO3JldHVybiBsKmw+bypvK3Mqc30sS3QucHJvdG90eXBlLl9jaXJjbGVBbmRSZWN0Q29sbGlkZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz0oYS1uKS8yLGw9TWF0aC5hYnModC0obitzKSk7aWYobD5zK3IpcmV0dXJuITE7dmFyIGM9KG8taSkvMix1PU1hdGguYWJzKGUtKGkrYykpO2lmKHU+YytyKXJldHVybiExO2lmKGw8PXN8fHU8PWMpcmV0dXJuITA7dmFyIGY9bC1zLGg9dS1jO3JldHVybiBmKmYraCpoPD1yKnJ9O3ZhciBjZT1uZXcgRmxvYXQzMkFycmF5KFstMS8wLC0xLzAsMCwtMS8wLC0xLzAsMCwtMS8wLC0xLzAsMCwtMS8wLC0xLzAsMF0pO2Z1bmN0aW9uIHVlKHQsZSl7Zm9yKHZhciByPTA7cjx0O3IrKyl7dmFyIG49ZS5sZW5ndGg7ZS5yZXNpemUobis0KSxlLmZsb2F0MzIuc2V0KGNlLDMqbil9fWZ1bmN0aW9uIGZlKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbMTJdLHRbMV09clsxXSpuK3JbNV0qaStyWzEzXSx0WzNdPXJbM10qbityWzddKmkrclsxNV0sdH12YXIgaGU9ZnVuY3Rpb24odCxlLHIpe3ZvaWQgMD09PWUmJihlPW5ldyBLdCh0LndpZHRoKzIwMCx0LmhlaWdodCsyMDAsMjUpKSx2b2lkIDA9PT1yJiYocj1uZXcgS3QodC53aWR0aCsyMDAsdC5oZWlnaHQrMjAwLDI1KSksdGhpcy50cmFuc2Zvcm09dCx0aGlzLmdyaWQ9ZSx0aGlzLmlnbm9yZWRHcmlkPXIsdGhpcy5waXRjaGZhY3Rvcj1NYXRoLmNvcyh0Ll9waXRjaCkqdC5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLHRoaXMuc2NyZWVuUmlnaHRCb3VuZGFyeT10LndpZHRoKzEwMCx0aGlzLnNjcmVlbkJvdHRvbUJvdW5kYXJ5PXQuaGVpZ2h0KzEwMCx0aGlzLmdyaWRSaWdodEJvdW5kYXJ5PXQud2lkdGgrMjAwLHRoaXMuZ3JpZEJvdHRvbUJvdW5kYXJ5PXQuaGVpZ2h0KzIwMH07ZnVuY3Rpb24gcGUoZSxyLG4pe3JldHVybiByKih0LkVYVEVOVC8oZS50aWxlU2l6ZSpNYXRoLnBvdygyLG4tZS50aWxlSUQub3ZlcnNjYWxlZFopKSl9aGUucHJvdG90eXBlLnBsYWNlQ29sbGlzaW9uQm94PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5wcm9qZWN0QW5kR2V0UGVyc3BlY3RpdmVSYXRpbyhuLHQuYW5jaG9yUG9pbnRYLHQuYW5jaG9yUG9pbnRZKSxvPXIqYS5wZXJzcGVjdGl2ZVJhdGlvLHM9dC54MSpvK2EucG9pbnQueCxsPXQueTEqbythLnBvaW50LnksYz10LngyKm8rYS5wb2ludC54LHU9dC55MipvK2EucG9pbnQueTtyZXR1cm4hdGhpcy5pc0luc2lkZUdyaWQocyxsLGMsdSl8fCFlJiZ0aGlzLmdyaWQuaGl0VGVzdChzLGwsYyx1LGkpP3tib3g6W10sb2Zmc2NyZWVuOiExfTp7Ym94OltzLGwsYyx1XSxvZmZzY3JlZW46dGhpcy5pc09mZnNjcmVlbihzLGwsYyx1KX19LGhlLnByb3RvdHlwZS5wbGFjZUNvbGxpc2lvbkNpcmNsZXM9ZnVuY3Rpb24oZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCl7dmFyIGQ9W10sbT1uZXcgdC5Qb2ludChyLmFuY2hvclgsci5hbmNob3JZKSxnPXRlKG0sbyksdj1lZSh0aGlzLnRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLGcuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhKSx5PSh1P2EvdjphKnYpL3QuT05FX0VNLHg9dGUobSxzKS5wb2ludCxiPWllKHksaSxyLmxpbmVPZmZzZXRYKnksci5saW5lT2Zmc2V0WSp5LCExLHgsbSxyLG4scyx7fSksXz0hMSx3PSExLFQ9ITA7aWYoYil7Zm9yKHZhciBrPS41KmgqditwLEE9bmV3IHQuUG9pbnQoLTEwMCwtMTAwKSxNPW5ldyB0LlBvaW50KHRoaXMuc2NyZWVuUmlnaHRCb3VuZGFyeSx0aGlzLnNjcmVlbkJvdHRvbUJvdW5kYXJ5KSxTPW5ldyBKdCxFPWIuZmlyc3QsTD1iLmxhc3QsQz1bXSxQPUUucGF0aC5sZW5ndGgtMTtQPj0xO1AtLSlDLnB1c2goRS5wYXRoW1BdKTtmb3IodmFyIEk9MTtJPEwucGF0aC5sZW5ndGg7SSsrKUMucHVzaChMLnBhdGhbSV0pO3ZhciBPPTIuNSprO2lmKGwpe3ZhciB6PUMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdGUodCxsKX0pKTtDPXouc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhPD0wfSkpP1tdOnoubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb2ludH0pKX12YXIgRD1bXTtpZihDLmxlbmd0aD4wKXtmb3IodmFyIFI9Q1swXS5jbG9uZSgpLEY9Q1swXS5jbG9uZSgpLEI9MTtCPEMubGVuZ3RoO0IrKylSLng9TWF0aC5taW4oUi54LENbQl0ueCksUi55PU1hdGgubWluKFIueSxDW0JdLnkpLEYueD1NYXRoLm1heChGLngsQ1tCXS54KSxGLnk9TWF0aC5tYXgoRi55LENbQl0ueSk7RD1SLng+PUEueCYmRi54PD1NLngmJlIueT49QS55JiZGLnk8PU0ueT9bQ106Ri54PEEueHx8Ui54Pk0ueHx8Ri55PEEueXx8Ui55Pk0ueT9bXTp0LmNsaXBMaW5lKFtDXSxBLngsQS55LE0ueCxNLnkpfWZvcih2YXIgTj0wLGo9RDtOPGoubGVuZ3RoO04rPTEpe3ZhciBVPWpbTl07Uy5yZXNldChVLC4yNSprKTt2YXIgVj0wO1Y9Uy5sZW5ndGg8PS41Kms/MTpNYXRoLmNlaWwoUy5wYWRkZWRMZW5ndGgvTykrMTtmb3IodmFyIEg9MDtIPFY7SCsrKXt2YXIgcT1IL01hdGgubWF4KFYtMSwxKSxHPVMubGVycChxKSxZPUcueCsxMDAsVz1HLnkrMTAwO2QucHVzaChZLFcsaywwKTt2YXIgWD1ZLWssWj1XLWssSj1ZK2ssSz1XK2s7aWYoVD1UJiZ0aGlzLmlzT2Zmc2NyZWVuKFgsWixKLEspLHc9d3x8dGhpcy5pc0luc2lkZUdyaWQoWCxaLEosSyksIWUmJnRoaXMuZ3JpZC5oaXRUZXN0Q2lyY2xlKFksVyxrLGYpJiYoXz0hMCwhYykpcmV0dXJue2NpcmNsZXM6W10sb2Zmc2NyZWVuOiExLGNvbGxpc2lvbkRldGVjdGVkOl99fX19cmV0dXJue2NpcmNsZXM6IWMmJl98fCF3P1tdOmQsb2Zmc2NyZWVuOlQsY29sbGlzaW9uRGV0ZWN0ZWQ6X319LGhlLnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkU3ltYm9scz1mdW5jdGlvbihlKXtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmdyaWQua2V5c0xlbmd0aCgpJiYwPT09dGhpcy5pZ25vcmVkR3JpZC5rZXlzTGVuZ3RoKCkpcmV0dXJue307Zm9yKHZhciByPVtdLG49MS8wLGk9MS8wLGE9LTEvMCxvPS0xLzAscz0wLGw9ZTtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc10sdT1uZXcgdC5Qb2ludChjLngrMTAwLGMueSsxMDApO249TWF0aC5taW4obix1LngpLGk9TWF0aC5taW4oaSx1LnkpLGE9TWF0aC5tYXgoYSx1LngpLG89TWF0aC5tYXgobyx1LnkpLHIucHVzaCh1KX1mb3IodmFyIGY9e30saD17fSxwPTAsZD10aGlzLmdyaWQucXVlcnkobixpLGEsbykuY29uY2F0KHRoaXMuaWdub3JlZEdyaWQucXVlcnkobixpLGEsbykpO3A8ZC5sZW5ndGg7cCs9MSl7dmFyIG09ZFtwXSxnPW0ua2V5O2lmKHZvaWQgMD09PWZbZy5idWNrZXRJbnN0YW5jZUlkXSYmKGZbZy5idWNrZXRJbnN0YW5jZUlkXT17fSksIWZbZy5idWNrZXRJbnN0YW5jZUlkXVtnLmZlYXR1cmVJbmRleF0pe3ZhciB2PVtuZXcgdC5Qb2ludChtLngxLG0ueTEpLG5ldyB0LlBvaW50KG0ueDIsbS55MSksbmV3IHQuUG9pbnQobS54MixtLnkyKSxuZXcgdC5Qb2ludChtLngxLG0ueTIpXTt0LnBvbHlnb25JbnRlcnNlY3RzUG9seWdvbihyLHYpJiYoZltnLmJ1Y2tldEluc3RhbmNlSWRdW2cuZmVhdHVyZUluZGV4XT0hMCx2b2lkIDA9PT1oW2cuYnVja2V0SW5zdGFuY2VJZF0mJihoW2cuYnVja2V0SW5zdGFuY2VJZF09W10pLGhbZy5idWNrZXRJbnN0YW5jZUlkXS5wdXNoKGcuZmVhdHVyZUluZGV4KSl9fXJldHVybiBofSxoZS5wcm90b3R5cGUuaW5zZXJ0Q29sbGlzaW9uQm94PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9e2J1Y2tldEluc3RhbmNlSWQ6cixmZWF0dXJlSW5kZXg6bixjb2xsaXNpb25Hcm91cElEOml9OyhlP3RoaXMuaWdub3JlZEdyaWQ6dGhpcy5ncmlkKS5pbnNlcnQoYSx0WzBdLHRbMV0sdFsyXSx0WzNdKX0saGUucHJvdG90eXBlLmluc2VydENvbGxpc2lvbkNpcmNsZXM9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9ZT90aGlzLmlnbm9yZWRHcmlkOnRoaXMuZ3JpZCxvPXtidWNrZXRJbnN0YW5jZUlkOnIsZmVhdHVyZUluZGV4Om4sY29sbGlzaW9uR3JvdXBJRDppfSxzPTA7czx0Lmxlbmd0aDtzKz00KWEuaW5zZXJ0Q2lyY2xlKG8sdFtzXSx0W3MrMV0sdFtzKzJdKX0saGUucHJvdG90eXBlLnByb2plY3RBbmRHZXRQZXJzcGVjdGl2ZVJhdGlvPWZ1bmN0aW9uKGUscixuKXt2YXIgaT1bcixuLDAsMV07cmV0dXJuIGZlKGksaSxlKSx7cG9pbnQ6bmV3IHQuUG9pbnQoKGlbMF0vaVszXSsxKS8yKnRoaXMudHJhbnNmb3JtLndpZHRoKzEwMCwoLWlbMV0vaVszXSsxKS8yKnRoaXMudHJhbnNmb3JtLmhlaWdodCsxMDApLHBlcnNwZWN0aXZlUmF0aW86LjUrdGhpcy50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZS9pWzNdKi41fX0saGUucHJvdG90eXBlLmlzT2Zmc2NyZWVuPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiByPDEwMHx8dD49dGhpcy5zY3JlZW5SaWdodEJvdW5kYXJ5fHxuPDEwMHx8ZT50aGlzLnNjcmVlbkJvdHRvbUJvdW5kYXJ5fSxoZS5wcm90b3R5cGUuaXNJbnNpZGVHcmlkPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiByPj0wJiZ0PHRoaXMuZ3JpZFJpZ2h0Qm91bmRhcnkmJm4+PTAmJmU8dGhpcy5ncmlkQm90dG9tQm91bmRhcnl9LGhlLnByb3RvdHlwZS5nZXRWaWV3cG9ydE1hdHJpeD1mdW5jdGlvbigpe3ZhciBlPXQuaWRlbnRpdHkoW10pO3JldHVybiB0LnRyYW5zbGF0ZShlLGUsWy0xMDAsLTEwMCwwXSksZX07dmFyIGRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMub3BhY2l0eT10P01hdGgubWF4KDAsTWF0aC5taW4oMSx0Lm9wYWNpdHkrKHQucGxhY2VkP2U6LWUpKSk6biYmcj8xOjAsdGhpcy5wbGFjZWQ9cn07ZGUucHJvdG90eXBlLmlzSGlkZGVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLm9wYWNpdHkmJiF0aGlzLnBsYWNlZH07dmFyIG1lPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy50ZXh0PW5ldyBkZSh0P3QudGV4dDpudWxsLGUscixpKSx0aGlzLmljb249bmV3IGRlKHQ/dC5pY29uOm51bGwsZSxuLGkpfTttZS5wcm90b3R5cGUuaXNIaWRkZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0LmlzSGlkZGVuKCkmJnRoaXMuaWNvbi5pc0hpZGRlbigpfTt2YXIgZ2U9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGV4dD10LHRoaXMuaWNvbj1lLHRoaXMuc2tpcEZhZGU9cn0sdmU9ZnVuY3Rpb24oKXt0aGlzLmludlByb2pNYXRyaXg9dC5jcmVhdGUoKSx0aGlzLnZpZXdwb3J0TWF0cml4PXQuY3JlYXRlKCksdGhpcy5jaXJjbGVzPVtdfSx5ZT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMuYnVja2V0SW5zdGFuY2VJZD10LHRoaXMuZmVhdHVyZUluZGV4PWUsdGhpcy5zb3VyY2VMYXllckluZGV4PXIsdGhpcy5idWNrZXRJbmRleD1uLHRoaXMudGlsZUlEPWl9LHhlPWZ1bmN0aW9uKHQpe3RoaXMuY3Jvc3NTb3VyY2VDb2xsaXNpb25zPXQsdGhpcy5tYXhHcm91cElEPTAsdGhpcy5jb2xsaXNpb25Hcm91cHM9e319O2Z1bmN0aW9uIGJlKGUscixuLGksYSl7dmFyIG89dC5nZXRBbmNob3JBbGlnbm1lbnQoZSkscz0tKG8uaG9yaXpvbnRhbEFsaWduLS41KSpyLGw9LShvLnZlcnRpY2FsQWxpZ24tLjUpKm4sYz10LmV2YWx1YXRlVmFyaWFibGVPZmZzZXQoZSxpKTtyZXR1cm4gbmV3IHQuUG9pbnQocytjWzBdKmEsbCtjWzFdKmEpfWZ1bmN0aW9uIF9lKGUscixuLGksYSxvKXt2YXIgcz1lLngxLGw9ZS54MixjPWUueTEsdT1lLnkyLGY9ZS5hbmNob3JQb2ludFgsaD1lLmFuY2hvclBvaW50WSxwPW5ldyB0LlBvaW50KHIsbik7cmV0dXJuIGkmJnAuX3JvdGF0ZShhP286LW8pLHt4MTpzK3AueCx5MTpjK3AueSx4MjpsK3AueCx5Mjp1K3AueSxhbmNob3JQb2ludFg6ZixhbmNob3JQb2ludFk6aH19eGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtpZih0aGlzLmNyb3NzU291cmNlQ29sbGlzaW9ucylyZXR1cm57SUQ6MCxwcmVkaWNhdGU6bnVsbH07aWYoIXRoaXMuY29sbGlzaW9uR3JvdXBzW3RdKXt2YXIgZT0rK3RoaXMubWF4R3JvdXBJRDt0aGlzLmNvbGxpc2lvbkdyb3Vwc1t0XT17SUQ6ZSxwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sbGlzaW9uR3JvdXBJRD09PWV9fX1yZXR1cm4gdGhpcy5jb2xsaXNpb25Hcm91cHNbdF19O3ZhciB3ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLnRyYW5zZm9ybT10LmNsb25lKCksdGhpcy5jb2xsaXNpb25JbmRleD1uZXcgaGUodGhpcy50cmFuc2Zvcm0pLHRoaXMucGxhY2VtZW50cz17fSx0aGlzLm9wYWNpdGllcz17fSx0aGlzLnZhcmlhYmxlT2Zmc2V0cz17fSx0aGlzLnN0YWxlPSExLHRoaXMuY29tbWl0VGltZT0wLHRoaXMuZmFkZUR1cmF0aW9uPWUsdGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YT17fSx0aGlzLmNvbGxpc2lvbkdyb3Vwcz1uZXcgeGUociksdGhpcy5jb2xsaXNpb25DaXJjbGVBcnJheXM9e30sdGhpcy5wcmV2UGxhY2VtZW50PW4sbiYmKG4ucHJldlBsYWNlbWVudD12b2lkIDApLHRoaXMucGxhY2VkT3JpZW50YXRpb25zPXt9fTtmdW5jdGlvbiBUZSh0LGUscixuLGkpe3QuZW1wbGFjZUJhY2soZT8xOjAscj8xOjAsbnx8MCxpfHwwKSx0LmVtcGxhY2VCYWNrKGU/MTowLHI/MTowLG58fDAsaXx8MCksdC5lbXBsYWNlQmFjayhlPzE6MCxyPzE6MCxufHwwLGl8fDApLHQuZW1wbGFjZUJhY2soZT8xOjAscj8xOjAsbnx8MCxpfHwwKX13ZS5wcm90b3R5cGUuZ2V0QnVja2V0UGFydHM9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9bi5nZXRCdWNrZXQociksbz1uLmxhdGVzdEZlYXR1cmVJbmRleDtpZihhJiZvJiZyLmlkPT09YS5sYXllcklkc1swXSl7dmFyIHM9bi5jb2xsaXNpb25Cb3hBcnJheSxsPWEubGF5ZXJzWzBdLmxheW91dCxjPU1hdGgucG93KDIsdGhpcy50cmFuc2Zvcm0uem9vbS1uLnRpbGVJRC5vdmVyc2NhbGVkWiksdT1uLnRpbGVTaXplL3QuRVhURU5ULGY9dGhpcy50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KG4udGlsZUlELnRvVW53cmFwcGVkKCkpLGg9Im1hcCI9PT1sLmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSxwPSJtYXAiPT09bC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IiksZD1wZShuLDEsdGhpcy50cmFuc2Zvcm0uem9vbSksbT1RdChmLGgscCx0aGlzLnRyYW5zZm9ybSxkKSxnPW51bGw7aWYoaCl7dmFyIHY9JHQoZixoLHAsdGhpcy50cmFuc2Zvcm0sZCk7Zz10Lm11bHRpcGx5KFtdLHRoaXMudHJhbnNmb3JtLmxhYmVsUGxhbmVNYXRyaXgsdil9dGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVthLmJ1Y2tldEluc3RhbmNlSWRdPW5ldyB5ZShhLmJ1Y2tldEluc3RhbmNlSWQsbyxhLnNvdXJjZUxheWVySW5kZXgsYS5pbmRleCxuLnRpbGVJRCk7dmFyIHk9e2J1Y2tldDphLGxheW91dDpsLHBvc01hdHJpeDpmLHRleHRMYWJlbFBsYW5lTWF0cml4Om0sbGFiZWxUb1NjcmVlbk1hdHJpeDpnLHNjYWxlOmMsdGV4dFBpeGVsUmF0aW86dSxob2xkaW5nRm9yRmFkZTpuLmhvbGRpbmdGb3JGYWRlKCksY29sbGlzaW9uQm94QXJyYXk6cyxwYXJ0aWFsbHlFdmFsdWF0ZWRUZXh0U2l6ZTp0LmV2YWx1YXRlU2l6ZUZvclpvb20oYS50ZXh0U2l6ZURhdGEsdGhpcy50cmFuc2Zvcm0uem9vbSksY29sbGlzaW9uR3JvdXA6dGhpcy5jb2xsaXNpb25Hcm91cHMuZ2V0KGEuc291cmNlSUQpfTtpZihpKWZvcih2YXIgeD0wLGI9YS5zb3J0S2V5UmFuZ2VzO3g8Yi5sZW5ndGg7eCs9MSl7dmFyIF89Ylt4XSx3PV8uc29ydEtleSxUPV8uc3ltYm9sSW5zdGFuY2VTdGFydCxrPV8uc3ltYm9sSW5zdGFuY2VFbmQ7ZS5wdXNoKHtzb3J0S2V5Oncsc3ltYm9sSW5zdGFuY2VTdGFydDpULHN5bWJvbEluc3RhbmNlRW5kOmsscGFyYW1ldGVyczp5fSl9ZWxzZSBlLnB1c2goe3N5bWJvbEluc3RhbmNlU3RhcnQ6MCxzeW1ib2xJbnN0YW5jZUVuZDphLnN5bWJvbEluc3RhbmNlcy5sZW5ndGgscGFyYW1ldGVyczp5fSl9fSx3ZS5wcm90b3R5cGUuYXR0ZW1wdEFuY2hvclBsYWNlbWVudD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCl7dmFyIG0sZz1bZi50ZXh0T2Zmc2V0MCxmLnRleHRPZmZzZXQxXSx2PWJlKHQscixuLGcsaSkseT10aGlzLmNvbGxpc2lvbkluZGV4LnBsYWNlQ29sbGlzaW9uQm94KF9lKGUsdi54LHYueSxhLG8sdGhpcy50cmFuc2Zvcm0uYW5nbGUpLHUscyxsLGMucHJlZGljYXRlKTtpZihkJiYwPT09dGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveChfZShkLHYueCx2LnksYSxvLHRoaXMudHJhbnNmb3JtLmFuZ2xlKSx1LHMsbCxjLnByZWRpY2F0ZSkuYm94Lmxlbmd0aClyZXR1cm47aWYoeS5ib3gubGVuZ3RoPjApcmV0dXJuIHRoaXMucHJldlBsYWNlbWVudCYmdGhpcy5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tmLmNyb3NzVGlsZUlEXSYmdGhpcy5wcmV2UGxhY2VtZW50LnBsYWNlbWVudHNbZi5jcm9zc1RpbGVJRF0mJnRoaXMucHJldlBsYWNlbWVudC5wbGFjZW1lbnRzW2YuY3Jvc3NUaWxlSURdLnRleHQmJihtPXRoaXMucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbZi5jcm9zc1RpbGVJRF0uYW5jaG9yKSx0aGlzLnZhcmlhYmxlT2Zmc2V0c1tmLmNyb3NzVGlsZUlEXT17dGV4dE9mZnNldDpnLHdpZHRoOnIsaGVpZ2h0Om4sYW5jaG9yOnQsdGV4dEJveFNjYWxlOmkscHJldkFuY2hvcjptfSx0aGlzLm1hcmtVc2VkSnVzdGlmaWNhdGlvbihoLHQsZixwKSxoLmFsbG93VmVydGljYWxQbGFjZW1lbnQmJih0aGlzLm1hcmtVc2VkT3JpZW50YXRpb24oaCxwLGYpLHRoaXMucGxhY2VkT3JpZW50YXRpb25zW2YuY3Jvc3NUaWxlSURdPXApLHtzaGlmdDp2LHBsYWNlZEdseXBoQm94ZXM6eX19LHdlLnByb3RvdHlwZS5wbGFjZUxheWVyQnVja2V0UGFydD1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcyxhPWUucGFyYW1ldGVycyxvPWEuYnVja2V0LHM9YS5sYXlvdXQsbD1hLnBvc01hdHJpeCxjPWEudGV4dExhYmVsUGxhbmVNYXRyaXgsdT1hLmxhYmVsVG9TY3JlZW5NYXRyaXgsZj1hLnRleHRQaXhlbFJhdGlvLGg9YS5ob2xkaW5nRm9yRmFkZSxwPWEuY29sbGlzaW9uQm94QXJyYXksZD1hLnBhcnRpYWxseUV2YWx1YXRlZFRleHRTaXplLG09YS5jb2xsaXNpb25Hcm91cCxnPXMuZ2V0KCJ0ZXh0LW9wdGlvbmFsIiksdj1zLmdldCgiaWNvbi1vcHRpb25hbCIpLHk9cy5nZXQoInRleHQtYWxsb3ctb3ZlcmxhcCIpLHg9cy5nZXQoImljb24tYWxsb3ctb3ZlcmxhcCIpLGI9Im1hcCI9PT1zLmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSxfPSJtYXAiPT09cy5nZXQoInRleHQtcGl0Y2gtYWxpZ25tZW50Iiksdz0ibm9uZSIhPT1zLmdldCgiaWNvbi10ZXh0LWZpdCIpLFQ9InZpZXdwb3J0LXkiPT09cy5nZXQoInN5bWJvbC16LW9yZGVyIiksaz15JiYoeHx8IW8uaGFzSWNvbkRhdGEoKXx8diksQT14JiYoeXx8IW8uaGFzVGV4dERhdGEoKXx8Zyk7IW8uY29sbGlzaW9uQXJyYXlzJiZwJiZvLmRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXMocCk7dmFyIE09ZnVuY3Rpb24oZSxhKXtpZighcltlLmNyb3NzVGlsZUlEXSlpZihoKWkucGxhY2VtZW50c1tlLmNyb3NzVGlsZUlEXT1uZXcgZ2UoITEsITEsITEpO2Vsc2V7dmFyIHAsVD0hMSxNPSExLFM9ITAsRT1udWxsLEw9e2JveDpudWxsLG9mZnNjcmVlbjpudWxsfSxDPXtib3g6bnVsbCxvZmZzY3JlZW46bnVsbH0sUD1udWxsLEk9bnVsbCxPPTAsej0wLEQ9MDthLnRleHRGZWF0dXJlSW5kZXg/Tz1hLnRleHRGZWF0dXJlSW5kZXg6ZS51c2VSdW50aW1lQ29sbGlzaW9uQ2lyY2xlcyYmKE89ZS5mZWF0dXJlSW5kZXgpLGEudmVydGljYWxUZXh0RmVhdHVyZUluZGV4JiYoej1hLnZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleCk7dmFyIFI9YS50ZXh0Qm94O2lmKFIpe3ZhciBGPWZ1bmN0aW9uKHIpe3ZhciBuPXQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbDtpZihvLmFsbG93VmVydGljYWxQbGFjZW1lbnQmJiFyJiZpLnByZXZQbGFjZW1lbnQpe3ZhciBhPWkucHJldlBsYWNlbWVudC5wbGFjZWRPcmllbnRhdGlvbnNbZS5jcm9zc1RpbGVJRF07YSYmKGkucGxhY2VkT3JpZW50YXRpb25zW2UuY3Jvc3NUaWxlSURdPWEsbj1hLGkubWFya1VzZWRPcmllbnRhdGlvbihvLG4sZSkpfXJldHVybiBufSxCPWZ1bmN0aW9uKHIsbil7aWYoby5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiZlLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcz4wJiZhLnZlcnRpY2FsVGV4dEJveClmb3IodmFyIGk9MCxzPW8ud3JpdGluZ01vZGVzO2k8cy5sZW5ndGg7aSs9MSl7aWYoc1tpXT09PXQuV3JpdGluZ01vZGUudmVydGljYWw/KEw9bigpLEM9TCk6TD1yKCksTCYmTC5ib3gmJkwuYm94Lmxlbmd0aClicmVha31lbHNlIEw9cigpfTtpZihzLmdldCgidGV4dC12YXJpYWJsZS1hbmNob3IiKSl7dmFyIE49cy5nZXQoInRleHQtdmFyaWFibGUtYW5jaG9yIik7aWYoaS5wcmV2UGxhY2VtZW50JiZpLnByZXZQbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzW2UuY3Jvc3NUaWxlSURdKXt2YXIgaj1pLnByZXZQbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzW2UuY3Jvc3NUaWxlSURdO04uaW5kZXhPZihqLmFuY2hvcik+MCYmKE49Ti5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09ai5hbmNob3J9KSkpLnVuc2hpZnQoai5hbmNob3IpfXZhciBVPWZ1bmN0aW9uKHQscixuKXtmb3IodmFyIGE9dC54Mi10LngxLHM9dC55Mi10LnkxLGM9ZS50ZXh0Qm94U2NhbGUsdT13JiYheD9yOm51bGwsaD17Ym94OltdLG9mZnNjcmVlbjohMX0scD15PzIqTi5sZW5ndGg6Ti5sZW5ndGgsZD0wO2Q8cDsrK2Qpe3ZhciBnPU5bZCVOLmxlbmd0aF0sdj1kPj1OLmxlbmd0aCxrPWkuYXR0ZW1wdEFuY2hvclBsYWNlbWVudChnLHQsYSxzLGMsYixfLGYsbCxtLHYsZSxvLG4sdSk7aWYoayYmKGg9ay5wbGFjZWRHbHlwaEJveGVzKSYmaC5ib3gmJmguYm94Lmxlbmd0aCl7VD0hMCxFPWsuc2hpZnQ7YnJlYWt9fXJldHVybiBofTtCKChmdW5jdGlvbigpe3JldHVybiBVKFIsYS5pY29uQm94LHQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbCl9KSwoZnVuY3Rpb24oKXt2YXIgcj1hLnZlcnRpY2FsVGV4dEJveCxuPUwmJkwuYm94JiZMLmJveC5sZW5ndGg7cmV0dXJuIG8uYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmIW4mJmUubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzPjAmJnI/VShyLGEudmVydGljYWxJY29uQm94LHQuV3JpdGluZ01vZGUudmVydGljYWwpOntib3g6bnVsbCxvZmZzY3JlZW46bnVsbH19KSksTCYmKFQ9TC5ib3gsUz1MLm9mZnNjcmVlbik7dmFyIFY9RihMJiZMLmJveCk7aWYoIVQmJmkucHJldlBsYWNlbWVudCl7dmFyIEg9aS5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tlLmNyb3NzVGlsZUlEXTtIJiYoaS52YXJpYWJsZU9mZnNldHNbZS5jcm9zc1RpbGVJRF09SCxpLm1hcmtVc2VkSnVzdGlmaWNhdGlvbihvLEguYW5jaG9yLGUsVikpfX1lbHNle3ZhciBxPWZ1bmN0aW9uKHQscil7dmFyIG49aS5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveCh0LHksZixsLG0ucHJlZGljYXRlKTtyZXR1cm4gbiYmbi5ib3gmJm4uYm94Lmxlbmd0aCYmKGkubWFya1VzZWRPcmllbnRhdGlvbihvLHIsZSksaS5wbGFjZWRPcmllbnRhdGlvbnNbZS5jcm9zc1RpbGVJRF09ciksbn07QigoZnVuY3Rpb24oKXtyZXR1cm4gcShSLHQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbCl9KSwoZnVuY3Rpb24oKXt2YXIgcj1hLnZlcnRpY2FsVGV4dEJveDtyZXR1cm4gby5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiZlLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcz4wJiZyP3Eocix0LldyaXRpbmdNb2RlLnZlcnRpY2FsKTp7Ym94Om51bGwsb2Zmc2NyZWVuOm51bGx9fSkpLEYoTCYmTC5ib3gmJkwuYm94Lmxlbmd0aCl9fWlmKFQ9KHA9TCkmJnAuYm94JiZwLmJveC5sZW5ndGg+MCxTPXAmJnAub2Zmc2NyZWVuLGUudXNlUnVudGltZUNvbGxpc2lvbkNpcmNsZXMpe3ZhciBHPW8udGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoZS5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgpLFk9dC5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlKG8udGV4dFNpemVEYXRhLGQsRyksVz1zLmdldCgidGV4dC1wYWRkaW5nIiksWD1lLmNvbGxpc2lvbkNpcmNsZURpYW1ldGVyO1A9aS5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkNpcmNsZXMoeSxHLG8ubGluZVZlcnRleEFycmF5LG8uZ2x5cGhPZmZzZXRBcnJheSxZLGwsYyx1LG4sXyxtLnByZWRpY2F0ZSxYLFcpLFQ9eXx8UC5jaXJjbGVzLmxlbmd0aD4wJiYhUC5jb2xsaXNpb25EZXRlY3RlZCxTPVMmJlAub2Zmc2NyZWVufWlmKGEuaWNvbkZlYXR1cmVJbmRleCYmKEQ9YS5pY29uRmVhdHVyZUluZGV4KSxhLmljb25Cb3gpe3ZhciBaPWZ1bmN0aW9uKHQpe3ZhciBlPXcmJkU/X2UodCxFLngsRS55LGIsXyxpLnRyYW5zZm9ybS5hbmdsZSk6dDtyZXR1cm4gaS5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveChlLHgsZixsLG0ucHJlZGljYXRlKX07TT1DJiZDLmJveCYmQy5ib3gubGVuZ3RoJiZhLnZlcnRpY2FsSWNvbkJveD8oST1aKGEudmVydGljYWxJY29uQm94KSkuYm94Lmxlbmd0aD4wOihJPVooYS5pY29uQm94KSkuYm94Lmxlbmd0aD4wLFM9UyYmSS5vZmZzY3JlZW59dmFyIEo9Z3x8MD09PWUubnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMmJjA9PT1lLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyxLPXZ8fDA9PT1lLm51bUljb25WZXJ0aWNlcztpZihKfHxLP0s/Snx8KE09TSYmVCk6VD1NJiZUOk09VD1NJiZULFQmJnAmJnAuYm94JiYoQyYmQy5ib3gmJno/aS5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25Cb3gocC5ib3gscy5nZXQoInRleHQtaWdub3JlLXBsYWNlbWVudCIpLG8uYnVja2V0SW5zdGFuY2VJZCx6LG0uSUQpOmkuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQm94KHAuYm94LHMuZ2V0KCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiKSxvLmJ1Y2tldEluc3RhbmNlSWQsTyxtLklEKSksTSYmSSYmaS5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25Cb3goSS5ib3gscy5nZXQoImljb24taWdub3JlLXBsYWNlbWVudCIpLG8uYnVja2V0SW5zdGFuY2VJZCxELG0uSUQpLFAmJihUJiZpLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkNpcmNsZXMoUC5jaXJjbGVzLHMuZ2V0KCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiKSxvLmJ1Y2tldEluc3RhbmNlSWQsTyxtLklEKSxuKSl7dmFyIFE9by5idWNrZXRJbnN0YW5jZUlkLCQ9aS5jb2xsaXNpb25DaXJjbGVBcnJheXNbUV07dm9pZCAwPT09JCYmKCQ9aS5jb2xsaXNpb25DaXJjbGVBcnJheXNbUV09bmV3IHZlKTtmb3IodmFyIHR0PTA7dHQ8UC5jaXJjbGVzLmxlbmd0aDt0dCs9NCkkLmNpcmNsZXMucHVzaChQLmNpcmNsZXNbdHQrMF0pLCQuY2lyY2xlcy5wdXNoKFAuY2lyY2xlc1t0dCsxXSksJC5jaXJjbGVzLnB1c2goUC5jaXJjbGVzW3R0KzJdKSwkLmNpcmNsZXMucHVzaChQLmNvbGxpc2lvbkRldGVjdGVkPzE6MCl9aS5wbGFjZW1lbnRzW2UuY3Jvc3NUaWxlSURdPW5ldyBnZShUfHxrLE18fEEsU3x8by5qdXN0UmVsb2FkZWQpLHJbZS5jcm9zc1RpbGVJRF09ITB9fTtpZihUKWZvcih2YXIgUz1vLmdldFNvcnRlZFN5bWJvbEluZGV4ZXModGhpcy50cmFuc2Zvcm0uYW5nbGUpLEU9Uy5sZW5ndGgtMTtFPj0wOy0tRSl7dmFyIEw9U1tFXTtNKG8uc3ltYm9sSW5zdGFuY2VzLmdldChMKSxvLmNvbGxpc2lvbkFycmF5c1tMXSl9ZWxzZSBmb3IodmFyIEM9ZS5zeW1ib2xJbnN0YW5jZVN0YXJ0O0M8ZS5zeW1ib2xJbnN0YW5jZUVuZDtDKyspTShvLnN5bWJvbEluc3RhbmNlcy5nZXQoQyksby5jb2xsaXNpb25BcnJheXNbQ10pO2lmKG4mJm8uYnVja2V0SW5zdGFuY2VJZCBpbiB0aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5cyl7dmFyIFA9dGhpcy5jb2xsaXNpb25DaXJjbGVBcnJheXNbby5idWNrZXRJbnN0YW5jZUlkXTt0LmludmVydChQLmludlByb2pNYXRyaXgsbCksUC52aWV3cG9ydE1hdHJpeD10aGlzLmNvbGxpc2lvbkluZGV4LmdldFZpZXdwb3J0TWF0cml4KCl9by5qdXN0UmVsb2FkZWQ9ITF9LHdlLnByb3RvdHlwZS5tYXJrVXNlZEp1c3RpZmljYXRpb249ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGEsbz17bGVmdDpuLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsY2VudGVyOm4uY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LHJpZ2h0Om4ucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXh9O2E9aT09PXQuV3JpdGluZ01vZGUudmVydGljYWw/bi52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleDpvW3QuZ2V0QW5jaG9ySnVzdGlmaWNhdGlvbihyKV07Zm9yKHZhciBzPTAsbD1bbi5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LG4uY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LG4ucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsbi52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleF07czxsLmxlbmd0aDtzKz0xKXt2YXIgYz1sW3NdO2M+PTAmJihlLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGMpLmNyb3NzVGlsZUlEPWE+PTAmJmMhPT1hPzA6bi5jcm9zc1RpbGVJRCl9fSx3ZS5wcm90b3R5cGUubWFya1VzZWRPcmllbnRhdGlvbj1mdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPXI9PT10LldyaXRpbmdNb2RlLmhvcml6b250YWx8fHI9PT10LldyaXRpbmdNb2RlLmhvcml6b250YWxPbmx5P3I6MCxhPXI9PT10LldyaXRpbmdNb2RlLnZlcnRpY2FsP3I6MCxvPTAscz1bbi5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LG4uY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LG4ucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXhdO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTtlLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGwpLnBsYWNlZE9yaWVudGF0aW9uPWl9bi52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCYmKGUudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQobi52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCkucGxhY2VkT3JpZW50YXRpb249YSl9LHdlLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24odCl7dGhpcy5jb21taXRUaW1lPXQsdGhpcy56b29tQXRMYXN0UmVjZW5jeUNoZWNrPXRoaXMudHJhbnNmb3JtLnpvb207dmFyIGU9dGhpcy5wcmV2UGxhY2VtZW50LHI9ITE7dGhpcy5wcmV2Wm9vbUFkanVzdG1lbnQ9ZT9lLnpvb21BZGp1c3RtZW50KHRoaXMudHJhbnNmb3JtLnpvb20pOjA7dmFyIG49ZT9lLnN5bWJvbEZhZGVDaGFuZ2UodCk6MSxpPWU/ZS5vcGFjaXRpZXM6e30sYT1lP2UudmFyaWFibGVPZmZzZXRzOnt9LG89ZT9lLnBsYWNlZE9yaWVudGF0aW9uczp7fTtmb3IodmFyIHMgaW4gdGhpcy5wbGFjZW1lbnRzKXt2YXIgbD10aGlzLnBsYWNlbWVudHNbc10sYz1pW3NdO2M/KHRoaXMub3BhY2l0aWVzW3NdPW5ldyBtZShjLG4sbC50ZXh0LGwuaWNvbikscj1yfHxsLnRleHQhPT1jLnRleHQucGxhY2VkfHxsLmljb24hPT1jLmljb24ucGxhY2VkKToodGhpcy5vcGFjaXRpZXNbc109bmV3IG1lKG51bGwsbixsLnRleHQsbC5pY29uLGwuc2tpcEZhZGUpLHI9cnx8bC50ZXh0fHxsLmljb24pfWZvcih2YXIgdSBpbiBpKXt2YXIgZj1pW3VdO2lmKCF0aGlzLm9wYWNpdGllc1t1XSl7dmFyIGg9bmV3IG1lKGYsbiwhMSwhMSk7aC5pc0hpZGRlbigpfHwodGhpcy5vcGFjaXRpZXNbdV09aCxyPXJ8fGYudGV4dC5wbGFjZWR8fGYuaWNvbi5wbGFjZWQpfX1mb3IodmFyIHAgaW4gYSl0aGlzLnZhcmlhYmxlT2Zmc2V0c1twXXx8IXRoaXMub3BhY2l0aWVzW3BdfHx0aGlzLm9wYWNpdGllc1twXS5pc0hpZGRlbigpfHwodGhpcy52YXJpYWJsZU9mZnNldHNbcF09YVtwXSk7Zm9yKHZhciBkIGluIG8pdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbZF18fCF0aGlzLm9wYWNpdGllc1tkXXx8dGhpcy5vcGFjaXRpZXNbZF0uaXNIaWRkZW4oKXx8KHRoaXMucGxhY2VkT3JpZW50YXRpb25zW2RdPW9bZF0pO3I/dGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZT10OiJudW1iZXIiIT10eXBlb2YgdGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZSYmKHRoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWU9ZT9lLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lOnQpfSx3ZS5wcm90b3R5cGUudXBkYXRlTGF5ZXJPcGFjaXRpZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz1hLmdldEJ1Y2tldCh0KTtvJiZhLmxhdGVzdEZlYXR1cmVJbmRleCYmdC5pZD09PW8ubGF5ZXJJZHNbMF0mJnRoaXMudXBkYXRlQnVja2V0T3BhY2l0aWVzKG8scixhLmNvbGxpc2lvbkJveEFycmF5KX19LHdlLnByb3RvdHlwZS51cGRhdGVCdWNrZXRPcGFjaXRpZXM9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXRoaXM7ZS5oYXNUZXh0RGF0YSgpJiZlLnRleHQub3BhY2l0eVZlcnRleEFycmF5LmNsZWFyKCksZS5oYXNJY29uRGF0YSgpJiZlLmljb24ub3BhY2l0eVZlcnRleEFycmF5LmNsZWFyKCksZS5oYXNJY29uQ29sbGlzaW9uQm94RGF0YSgpJiZlLmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXkuY2xlYXIoKSxlLmhhc1RleHRDb2xsaXNpb25Cb3hEYXRhKCkmJmUudGV4dENvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheS5jbGVhcigpO3ZhciBhPWUubGF5ZXJzWzBdLmxheW91dCxvPW5ldyBtZShudWxsLDAsITEsITEsITApLHM9YS5nZXQoInRleHQtYWxsb3ctb3ZlcmxhcCIpLGw9YS5nZXQoImljb24tYWxsb3ctb3ZlcmxhcCIpLGM9YS5nZXQoInRleHQtdmFyaWFibGUtYW5jaG9yIiksdT0ibWFwIj09PWEuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpLGY9Im1hcCI9PT1hLmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSxoPSJub25lIiE9PWEuZ2V0KCJpY29uLXRleHQtZml0IikscD1uZXcgbWUobnVsbCwwLHMmJihsfHwhZS5oYXNJY29uRGF0YSgpfHxhLmdldCgiaWNvbi1vcHRpb25hbCIpKSxsJiYoc3x8IWUuaGFzVGV4dERhdGEoKXx8YS5nZXQoInRleHQtb3B0aW9uYWwiKSksITApOyFlLmNvbGxpc2lvbkFycmF5cyYmbiYmKGUuaGFzSWNvbkNvbGxpc2lvbkJveERhdGEoKXx8ZS5oYXNUZXh0Q29sbGlzaW9uQm94RGF0YSgpKSYmZS5kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzKG4pO2Zvcih2YXIgZD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjxlLzQ7bisrKXQub3BhY2l0eVZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHIpfSxtPWZ1bmN0aW9uKG4pe3ZhciBhPWUuc3ltYm9sSW5zdGFuY2VzLmdldChuKSxzPWEubnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMsbD1hLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyxtPWEuY3Jvc3NUaWxlSUQsZz1yW21dLHY9aS5vcGFjaXRpZXNbbV07Zz92PW86dnx8KHY9cCxpLm9wYWNpdGllc1ttXT12KSxyW21dPSEwO3ZhciB5PXM+MHx8bD4wLHg9YS5udW1JY29uVmVydGljZXM+MCxiPWkucGxhY2VkT3JpZW50YXRpb25zW2EuY3Jvc3NUaWxlSURdLF89Yj09PXQuV3JpdGluZ01vZGUudmVydGljYWwsdz1iPT09dC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsfHxiPT09dC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsT25seTtpZih5KXt2YXIgVD1QZSh2LnRleHQpLGs9Xz9JZTpUO2QoZS50ZXh0LHMsayk7dmFyIEE9dz9JZTpUO2QoZS50ZXh0LGwsQSk7dmFyIE09di50ZXh0LmlzSGlkZGVuKCk7W2EucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsYS5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsYS5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4XS5mb3JFYWNoKChmdW5jdGlvbih0KXt0Pj0wJiYoZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldCh0KS5oaWRkZW49TXx8Xz8xOjApfSkpLGEudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXg+PTAmJihlLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGEudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgpLmhpZGRlbj1NfHx3PzE6MCk7dmFyIFM9aS52YXJpYWJsZU9mZnNldHNbYS5jcm9zc1RpbGVJRF07UyYmaS5tYXJrVXNlZEp1c3RpZmljYXRpb24oZSxTLmFuY2hvcixhLGIpO3ZhciBFPWkucGxhY2VkT3JpZW50YXRpb25zW2EuY3Jvc3NUaWxlSURdO0UmJihpLm1hcmtVc2VkSnVzdGlmaWNhdGlvbihlLCJsZWZ0IixhLEUpLGkubWFya1VzZWRPcmllbnRhdGlvbihlLEUsYSkpfWlmKHgpe3ZhciBMPVBlKHYuaWNvbiksQz0hKGgmJmEudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXgmJl8pO2lmKGEucGxhY2VkSWNvblN5bWJvbEluZGV4Pj0wKXt2YXIgUD1DP0w6SWU7ZChlLmljb24sYS5udW1JY29uVmVydGljZXMsUCksZS5pY29uLnBsYWNlZFN5bWJvbEFycmF5LmdldChhLnBsYWNlZEljb25TeW1ib2xJbmRleCkuaGlkZGVuPXYuaWNvbi5pc0hpZGRlbigpfWlmKGEudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXg+PTApe3ZhciBJPUM/SWU6TDtkKGUuaWNvbixhLm51bVZlcnRpY2FsSWNvblZlcnRpY2VzLEkpLGUuaWNvbi5wbGFjZWRTeW1ib2xBcnJheS5nZXQoYS52ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCkuaGlkZGVuPXYuaWNvbi5pc0hpZGRlbigpfX1pZihlLmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCl8fGUuaGFzVGV4dENvbGxpc2lvbkJveERhdGEoKSl7dmFyIE89ZS5jb2xsaXNpb25BcnJheXNbbl07aWYoTyl7dmFyIHo9bmV3IHQuUG9pbnQoMCwwKTtpZihPLnRleHRCb3h8fE8udmVydGljYWxUZXh0Qm94KXt2YXIgRD0hMDtpZihjKXt2YXIgUj1pLnZhcmlhYmxlT2Zmc2V0c1ttXTtSPyh6PWJlKFIuYW5jaG9yLFIud2lkdGgsUi5oZWlnaHQsUi50ZXh0T2Zmc2V0LFIudGV4dEJveFNjYWxlKSx1JiZ6Ll9yb3RhdGUoZj9pLnRyYW5zZm9ybS5hbmdsZTotaS50cmFuc2Zvcm0uYW5nbGUpKTpEPSExfU8udGV4dEJveCYmVGUoZS50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LHYudGV4dC5wbGFjZWQsIUR8fF8sei54LHoueSksTy52ZXJ0aWNhbFRleHRCb3gmJlRlKGUudGV4dENvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSx2LnRleHQucGxhY2VkLCFEfHx3LHoueCx6LnkpfXZhciBGPUJvb2xlYW4oIXcmJk8udmVydGljYWxJY29uQm94KTtPLmljb25Cb3gmJlRlKGUuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSx2Lmljb24ucGxhY2VkLEYsaD96Lng6MCxoP3oueTowKSxPLnZlcnRpY2FsSWNvbkJveCYmVGUoZS5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LHYuaWNvbi5wbGFjZWQsIUYsaD96Lng6MCxoP3oueTowKX19fSxnPTA7ZzxlLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7ZysrKW0oZyk7aWYoZS5zb3J0RmVhdHVyZXModGhpcy50cmFuc2Zvcm0uYW5nbGUpLHRoaXMucmV0YWluZWRRdWVyeURhdGFbZS5idWNrZXRJbnN0YW5jZUlkXSYmKHRoaXMucmV0YWluZWRRdWVyeURhdGFbZS5idWNrZXRJbnN0YW5jZUlkXS5mZWF0dXJlU29ydE9yZGVyPWUuZmVhdHVyZVNvcnRPcmRlciksZS5oYXNUZXh0RGF0YSgpJiZlLnRleHQub3BhY2l0eVZlcnRleEJ1ZmZlciYmZS50ZXh0Lm9wYWNpdHlWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShlLnRleHQub3BhY2l0eVZlcnRleEFycmF5KSxlLmhhc0ljb25EYXRhKCkmJmUuaWNvbi5vcGFjaXR5VmVydGV4QnVmZmVyJiZlLmljb24ub3BhY2l0eVZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGUuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkpLGUuaGFzSWNvbkNvbGxpc2lvbkJveERhdGEoKSYmZS5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEJ1ZmZlciYmZS5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGUuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSksZS5oYXNUZXh0Q29sbGlzaW9uQm94RGF0YSgpJiZlLnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyJiZlLnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZS50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5KSxlLmJ1Y2tldEluc3RhbmNlSWQgaW4gdGhpcy5jb2xsaXNpb25DaXJjbGVBcnJheXMpe3ZhciB2PXRoaXMuY29sbGlzaW9uQ2lyY2xlQXJyYXlzW2UuYnVja2V0SW5zdGFuY2VJZF07ZS5wbGFjZW1lbnRJbnZQcm9qTWF0cml4PXYuaW52UHJvak1hdHJpeCxlLnBsYWNlbWVudFZpZXdwb3J0TWF0cml4PXYudmlld3BvcnRNYXRyaXgsZS5jb2xsaXNpb25DaXJjbGVBcnJheT12LmNpcmNsZXMsZGVsZXRlIHRoaXMuY29sbGlzaW9uQ2lyY2xlQXJyYXlzW2UuYnVja2V0SW5zdGFuY2VJZF19fSx3ZS5wcm90b3R5cGUuc3ltYm9sRmFkZUNoYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuZmFkZUR1cmF0aW9uPzE6KHQtdGhpcy5jb21taXRUaW1lKS90aGlzLmZhZGVEdXJhdGlvbit0aGlzLnByZXZab29tQWRqdXN0bWVudH0sd2UucHJvdG90eXBlLnpvb21BZGp1c3RtZW50PWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLCh0aGlzLnRyYW5zZm9ybS56b29tLXQpLzEuNSl9LHdlLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdGFsZXx8dC10aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lPHRoaXMuZmFkZUR1cmF0aW9ufSx3ZS5wcm90b3R5cGUuc3RpbGxSZWNlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnpvb21BdExhc3RSZWNlbmN5Q2hlY2s9PT1lPzEtdGhpcy56b29tQWRqdXN0bWVudChlKToxO3JldHVybiB0aGlzLnpvb21BdExhc3RSZWNlbmN5Q2hlY2s9ZSx0aGlzLmNvbW1pdFRpbWUrdGhpcy5mYWRlRHVyYXRpb24qcj50fSx3ZS5wcm90b3R5cGUuc2V0U3RhbGU9ZnVuY3Rpb24oKXt0aGlzLnN0YWxlPSEwfTt2YXIga2U9TWF0aC5wb3coMiwyNSksQWU9TWF0aC5wb3coMiwyNCksTWU9TWF0aC5wb3coMiwxNyksU2U9TWF0aC5wb3coMiwxNiksRWU9TWF0aC5wb3coMiw5KSxMZT1NYXRoLnBvdygyLDgpLENlPU1hdGgucG93KDIsMSk7ZnVuY3Rpb24gUGUodCl7aWYoMD09PXQub3BhY2l0eSYmIXQucGxhY2VkKXJldHVybiAwO2lmKDE9PT10Lm9wYWNpdHkmJnQucGxhY2VkKXJldHVybiA0Mjk0OTY3Mjk1O3ZhciBlPXQucGxhY2VkPzE6MCxyPU1hdGguZmxvb3IoMTI3KnQub3BhY2l0eSk7cmV0dXJuIHIqa2UrZSpBZStyKk1lK2UqU2UrcipFZStlKkxlK3IqQ2UrZX12YXIgSWU9MCxPZT1mdW5jdGlvbih0KXt0aGlzLl9zb3J0QWNyb3NzVGlsZXM9InZpZXdwb3J0LXkiIT09dC5sYXlvdXQuZ2V0KCJzeW1ib2wtei1vcmRlciIpJiZ2b2lkIDAhPT10LmxheW91dC5nZXQoInN5bWJvbC1zb3J0LWtleSIpLmNvbnN0YW50T3IoMSksdGhpcy5fY3VycmVudFRpbGVJbmRleD0wLHRoaXMuX2N1cnJlbnRQYXJ0SW5kZXg9MCx0aGlzLl9zZWVuQ3Jvc3NUaWxlSURzPXt9LHRoaXMuX2J1Y2tldFBhcnRzPVtdfTtPZS5wcm90b3R5cGUuY29udGludWVQbGFjZW1lbnQ9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9dGhpcy5fYnVja2V0UGFydHM7dGhpcy5fY3VycmVudFRpbGVJbmRleDx0Lmxlbmd0aDspe3ZhciBvPXRbdGhpcy5fY3VycmVudFRpbGVJbmRleF07aWYoZS5nZXRCdWNrZXRQYXJ0cyhhLG4sbyx0aGlzLl9zb3J0QWNyb3NzVGlsZXMpLHRoaXMuX2N1cnJlbnRUaWxlSW5kZXgrKyxpKCkpcmV0dXJuITB9Zm9yKHRoaXMuX3NvcnRBY3Jvc3NUaWxlcyYmKHRoaXMuX3NvcnRBY3Jvc3NUaWxlcz0hMSxhLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc29ydEtleS1lLnNvcnRLZXl9KSkpO3RoaXMuX2N1cnJlbnRQYXJ0SW5kZXg8YS5sZW5ndGg7KXt2YXIgcz1hW3RoaXMuX2N1cnJlbnRQYXJ0SW5kZXhdO2lmKGUucGxhY2VMYXllckJ1Y2tldFBhcnQocyx0aGlzLl9zZWVuQ3Jvc3NUaWxlSURzLHIpLHRoaXMuX2N1cnJlbnRQYXJ0SW5kZXgrKyxpKCkpcmV0dXJuITB9cmV0dXJuITF9O3ZhciB6ZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt0aGlzLnBsYWNlbWVudD1uZXcgd2UodCxpLGEsbyksdGhpcy5fY3VycmVudFBsYWNlbWVudEluZGV4PWUubGVuZ3RoLTEsdGhpcy5fZm9yY2VGdWxsUGxhY2VtZW50PXIsdGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzPW4sdGhpcy5fZG9uZT0hMX07emUucHJvdG90eXBlLmlzRG9uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb25lfSx6ZS5wcm90b3R5cGUuY29udGludWVQbGFjZW1lbnQ9ZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT10aGlzLGE9dC5icm93c2VyLm5vdygpLG89ZnVuY3Rpb24oKXt2YXIgZT10LmJyb3dzZXIubm93KCktYTtyZXR1cm4haS5fZm9yY2VGdWxsUGxhY2VtZW50JiZlPjJ9O3RoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleD49MDspe3ZhciBzPXJbZVt0aGlzLl9jdXJyZW50UGxhY2VtZW50SW5kZXhdXSxsPXRoaXMucGxhY2VtZW50LmNvbGxpc2lvbkluZGV4LnRyYW5zZm9ybS56b29tO2lmKCJzeW1ib2wiPT09cy50eXBlJiYoIXMubWluem9vbXx8cy5taW56b29tPD1sKSYmKCFzLm1heHpvb218fHMubWF4em9vbT5sKSl7aWYodGhpcy5faW5Qcm9ncmVzc0xheWVyfHwodGhpcy5faW5Qcm9ncmVzc0xheWVyPW5ldyBPZShzKSksdGhpcy5faW5Qcm9ncmVzc0xheWVyLmNvbnRpbnVlUGxhY2VtZW50KG5bcy5zb3VyY2VdLHRoaXMucGxhY2VtZW50LHRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcyxzLG8pKXJldHVybjtkZWxldGUgdGhpcy5faW5Qcm9ncmVzc0xheWVyfXRoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleC0tfXRoaXMuX2RvbmU9ITB9LHplLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucGxhY2VtZW50LmNvbW1pdCh0KSx0aGlzLnBsYWNlbWVudH07dmFyIERlPTUxMi90LkVYVEVOVC8yLFJlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRpbGVJRD10LHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlcz17fSx0aGlzLmJ1Y2tldEluc3RhbmNlSWQ9cjtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZS5nZXQobiksYT1pLmtleTt0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbYV18fCh0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbYV09W10pLHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1thXS5wdXNoKHtjcm9zc1RpbGVJRDppLmNyb3NzVGlsZUlELGNvb3JkOnRoaXMuZ2V0U2NhbGVkQ29vcmRpbmF0ZXMoaSx0KX0pfX07UmUucHJvdG90eXBlLmdldFNjYWxlZENvb3JkaW5hdGVzPWZ1bmN0aW9uKGUscil7dmFyIG49ci5jYW5vbmljYWwuei10aGlzLnRpbGVJRC5jYW5vbmljYWwueixpPURlL01hdGgucG93KDIsbik7cmV0dXJue3g6TWF0aC5mbG9vcigoci5jYW5vbmljYWwueCp0LkVYVEVOVCtlLmFuY2hvclgpKmkpLHk6TWF0aC5mbG9vcigoci5jYW5vbmljYWwueSp0LkVYVEVOVCtlLmFuY2hvclkpKmkpfX0sUmUucHJvdG90eXBlLmZpbmRNYXRjaGVzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dGhpcy50aWxlSUQuY2Fub25pY2FsLno8ZS5jYW5vbmljYWwuej8xOk1hdGgucG93KDIsdGhpcy50aWxlSUQuY2Fub25pY2FsLnotZS5jYW5vbmljYWwueiksaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10LmdldChpKTtpZighYS5jcm9zc1RpbGVJRCl7dmFyIG89dGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW2Eua2V5XTtpZihvKWZvcih2YXIgcz10aGlzLmdldFNjYWxlZENvb3JkaW5hdGVzKGEsZSksbD0wLGM9bztsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF07aWYoTWF0aC5hYnModS5jb29yZC54LXMueCk8PW4mJk1hdGguYWJzKHUuY29vcmQueS1zLnkpPD1uJiYhclt1LmNyb3NzVGlsZUlEXSl7clt1LmNyb3NzVGlsZUlEXT0hMCxhLmNyb3NzVGlsZUlEPXUuY3Jvc3NUaWxlSUQ7YnJlYWt9fX19fTt2YXIgRmU9ZnVuY3Rpb24oKXt0aGlzLm1heENyb3NzVGlsZUlEPTB9O0ZlLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbigpe3JldHVybisrdGhpcy5tYXhDcm9zc1RpbGVJRH07dmFyIEJlPWZ1bmN0aW9uKCl7dGhpcy5pbmRleGVzPXt9LHRoaXMudXNlZENyb3NzVGlsZUlEcz17fSx0aGlzLmxuZz0wfTtCZS5wcm90b3R5cGUuaGFuZGxlV3JhcEp1bXA9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5yb3VuZCgodC10aGlzLmxuZykvMzYwKTtpZigwIT09ZSlmb3IodmFyIHIgaW4gdGhpcy5pbmRleGVzKXt2YXIgbj10aGlzLmluZGV4ZXNbcl0saT17fTtmb3IodmFyIGEgaW4gbil7dmFyIG89blthXTtvLnRpbGVJRD1vLnRpbGVJRC51bndyYXBUbyhvLnRpbGVJRC53cmFwK2UpLGlbby50aWxlSUQua2V5XT1vfXRoaXMuaW5kZXhlc1tyXT1pfXRoaXMubG5nPXR9LEJlLnByb3RvdHlwZS5hZGRCdWNrZXQ9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXSYmdGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdW3Qua2V5XSl7aWYodGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdW3Qua2V5XS5idWNrZXRJbnN0YW5jZUlkPT09ZS5idWNrZXRJbnN0YW5jZUlkKXJldHVybiExO3RoaXMucmVtb3ZlQnVja2V0Q3Jvc3NUaWxlSURzKHQub3ZlcnNjYWxlZFosdGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdW3Qua2V5XSl9Zm9yKHZhciBuPTA7bjxlLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7bisrKXtlLnN5bWJvbEluc3RhbmNlcy5nZXQobikuY3Jvc3NUaWxlSUQ9MH10aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl18fCh0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl09e30pO3ZhciBpPXRoaXMudXNlZENyb3NzVGlsZUlEc1t0Lm92ZXJzY2FsZWRaXTtmb3IodmFyIGEgaW4gdGhpcy5pbmRleGVzKXt2YXIgbz10aGlzLmluZGV4ZXNbYV07aWYoTnVtYmVyKGEpPnQub3ZlcnNjYWxlZFopZm9yKHZhciBzIGluIG8pe3ZhciBsPW9bc107bC50aWxlSUQuaXNDaGlsZE9mKHQpJiZsLmZpbmRNYXRjaGVzKGUuc3ltYm9sSW5zdGFuY2VzLHQsaSl9ZWxzZXt2YXIgYz1vW3Quc2NhbGVkVG8oTnVtYmVyKGEpKS5rZXldO2MmJmMuZmluZE1hdGNoZXMoZS5zeW1ib2xJbnN0YW5jZXMsdCxpKX19Zm9yKHZhciB1PTA7dTxlLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7dSsrKXt2YXIgZj1lLnN5bWJvbEluc3RhbmNlcy5nZXQodSk7Zi5jcm9zc1RpbGVJRHx8KGYuY3Jvc3NUaWxlSUQ9ci5nZW5lcmF0ZSgpLGlbZi5jcm9zc1RpbGVJRF09ITApfXJldHVybiB2b2lkIDA9PT10aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl0mJih0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl09e30pLHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV09bmV3IFJlKHQsZS5zeW1ib2xJbnN0YW5jZXMsZS5idWNrZXRJbnN0YW5jZUlkKSwhMH0sQmUucHJvdG90eXBlLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBlLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXMpZm9yKHZhciBuPTAsaT1lLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbcl07bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2RlbGV0ZSB0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdF1bYS5jcm9zc1RpbGVJRF19fSxCZS5wcm90b3R5cGUucmVtb3ZlU3RhbGVCdWNrZXRzPWZ1bmN0aW9uKHQpe3ZhciBlPSExO2Zvcih2YXIgciBpbiB0aGlzLmluZGV4ZXMpe3ZhciBuPXRoaXMuaW5kZXhlc1tyXTtmb3IodmFyIGkgaW4gbil0W25baV0uYnVja2V0SW5zdGFuY2VJZF18fCh0aGlzLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcyhyLG5baV0pLGRlbGV0ZSBuW2ldLGU9ITApfXJldHVybiBlfTt2YXIgTmU9ZnVuY3Rpb24oKXt0aGlzLmxheWVySW5kZXhlcz17fSx0aGlzLmNyb3NzVGlsZUlEcz1uZXcgRmUsdGhpcy5tYXhCdWNrZXRJbnN0YW5jZUlkPTAsdGhpcy5idWNrZXRzSW5DdXJyZW50UGxhY2VtZW50PXt9fTtOZS5wcm90b3R5cGUuYWRkTGF5ZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGF5ZXJJbmRleGVzW3QuaWRdO3ZvaWQgMD09PW4mJihuPXRoaXMubGF5ZXJJbmRleGVzW3QuaWRdPW5ldyBCZSk7dmFyIGk9ITEsYT17fTtuLmhhbmRsZVdyYXBKdW1wKHIpO2Zvcih2YXIgbz0wLHM9ZTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1sLmdldEJ1Y2tldCh0KTtjJiZ0LmlkPT09Yy5sYXllcklkc1swXSYmKGMuYnVja2V0SW5zdGFuY2VJZHx8KGMuYnVja2V0SW5zdGFuY2VJZD0rK3RoaXMubWF4QnVja2V0SW5zdGFuY2VJZCksbi5hZGRCdWNrZXQobC50aWxlSUQsYyx0aGlzLmNyb3NzVGlsZUlEcykmJihpPSEwKSxhW2MuYnVja2V0SW5zdGFuY2VJZF09ITApfXJldHVybiBuLnJlbW92ZVN0YWxlQnVja2V0cyhhKSYmKGk9ITApLGl9LE5lLnByb3RvdHlwZS5wcnVuZVVudXNlZExheWVycz1mdW5jdGlvbih0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtlW3RdPSEwfSkpLHRoaXMubGF5ZXJJbmRleGVzKWVbcl18fGRlbGV0ZSB0aGlzLmxheWVySW5kZXhlc1tyXX07dmFyIGplPWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZW1pdFZhbGlkYXRpb25FcnJvcnMoZSxyJiZyLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuInNvdXJjZS5jYW52YXMiIT09dC5pZGVudGlmaWVyfSkpKX0sVWU9dC5waWNrKFV0LFsiYWRkTGF5ZXIiLCJyZW1vdmVMYXllciIsInNldFBhaW50UHJvcGVydHkiLCJzZXRMYXlvdXRQcm9wZXJ0eSIsInNldEZpbHRlciIsImFkZFNvdXJjZSIsInJlbW92ZVNvdXJjZSIsInNldExheWVyWm9vbVJhbmdlIiwic2V0TGlnaHQiLCJzZXRUcmFuc2l0aW9uIiwic2V0R2VvSlNPTlNvdXJjZURhdGEiXSksVmU9dC5waWNrKFV0LFsic2V0Q2VudGVyIiwic2V0Wm9vbSIsInNldEJlYXJpbmciLCJzZXRQaXRjaCJdKSxIZT1mdW5jdGlvbigpe3ZhciBlPXt9LHI9dC5zdHlsZVNwZWMuJHZlcnNpb247Zm9yKHZhciBuIGluIHQuc3R5bGVTcGVjLiRyb290KXt2YXIgaT10LnN0eWxlU3BlYy4kcm9vdFtuXTtpZihpLnJlcXVpcmVkKXt2YXIgYT1udWxsO251bGwhPShhPSJ2ZXJzaW9uIj09PW4/cjoiYXJyYXkiPT09aS50eXBlP1tdOnt9KSYmKGVbbl09YSl9fXJldHVybiBlfSgpLHFlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIobixpKXt2YXIgYT10aGlzO3ZvaWQgMD09PWkmJihpPXt9KSxlLmNhbGwodGhpcyksdGhpcy5tYXA9bix0aGlzLmRpc3BhdGNoZXI9bmV3IGsoQnQoKSx0aGlzKSx0aGlzLmltYWdlTWFuYWdlcj1uZXcgaCx0aGlzLmltYWdlTWFuYWdlci5zZXRFdmVudGVkUGFyZW50KHRoaXMpLHRoaXMuZ2x5cGhNYW5hZ2VyPW5ldyB4KG4uX3JlcXVlc3RNYW5hZ2VyLGkubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5KSx0aGlzLmxpbmVBdGxhcz1uZXcgVCgyNTYsNTEyKSx0aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4PW5ldyBOZSx0aGlzLl9sYXllcnM9e30sdGhpcy5fc2VyaWFsaXplZExheWVycz17fSx0aGlzLl9vcmRlcj1bXSx0aGlzLnNvdXJjZUNhY2hlcz17fSx0aGlzLnpvb21IaXN0b3J5PW5ldyB0Llpvb21IaXN0b3J5LHRoaXMuX2xvYWRlZD0hMSx0aGlzLl9hdmFpbGFibGVJbWFnZXM9W10sdGhpcy5fcmVzZXRVcGRhdGVzKCksdGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgic2V0UmVmZXJyZXIiLHQuZ2V0UmVmZXJyZXIoKSk7dmFyIG89dGhpczt0aGlzLl9ydGxUZXh0UGx1Z2luQ2FsbGJhY2s9ci5yZWdpc3RlckZvclBsdWdpblN0YXRlQ2hhbmdlKChmdW5jdGlvbihlKXt2YXIgcj17cGx1Z2luU3RhdHVzOmUucGx1Z2luU3RhdHVzLHBsdWdpblVSTDplLnBsdWdpblVSTH07by5kaXNwYXRjaGVyLmJyb2FkY2FzdCgic3luY1JUTFBsdWdpblN0YXRlIixyLChmdW5jdGlvbihlLHIpe2lmKCh0LnRyaWdnZXJQbHVnaW5Db21wbGV0aW9uRXZlbnQoZSkscikmJnIuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpKWZvcih2YXIgbiBpbiBvLnNvdXJjZUNhY2hlcylvLnNvdXJjZUNhY2hlc1tuXS5yZWxvYWQoKX0pKX0pKSx0aGlzLm9uKCJkYXRhIiwoZnVuY3Rpb24odCl7aWYoInNvdXJjZSI9PT10LmRhdGFUeXBlJiYibWV0YWRhdGEiPT09dC5zb3VyY2VEYXRhVHlwZSl7dmFyIGU9YS5zb3VyY2VDYWNoZXNbdC5zb3VyY2VJZF07aWYoZSl7dmFyIHI9ZS5nZXRTb3VyY2UoKTtpZihyJiZyLnZlY3RvckxheWVySWRzKWZvcih2YXIgbiBpbiBhLl9sYXllcnMpe3ZhciBpPWEuX2xheWVyc1tuXTtpLnNvdXJjZT09PXIuaWQmJmEuX3ZhbGlkYXRlTGF5ZXIoaSl9fX19KSl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWRVUkw9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3ZvaWQgMD09PXImJihyPXt9KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InN0eWxlIn0pKTt2YXIgaT0iYm9vbGVhbiI9PXR5cGVvZiByLnZhbGlkYXRlP3IudmFsaWRhdGU6IXQuaXNNYXBib3hVUkwoZSk7ZT10aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplU3R5bGVVUkwoZSxyLmFjY2Vzc1Rva2VuKTt2YXIgYT10aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChlLHQuUmVzb3VyY2VUeXBlLlN0eWxlKTt0aGlzLl9yZXF1ZXN0PXQuZ2V0SlNPTihhLChmdW5jdGlvbihlLHIpe24uX3JlcXVlc3Q9bnVsbCxlP24uZmlyZShuZXcgdC5FcnJvckV2ZW50KGUpKTpyJiZuLl9sb2FkKHIsaSl9KSl9LHIucHJvdG90eXBlLmxvYWRKU09OPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpczt2b2lkIDA9PT1yJiYocj17fSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzdHlsZSJ9KSksdGhpcy5fcmVxdWVzdD10LmJyb3dzZXIuZnJhbWUoKGZ1bmN0aW9uKCl7bi5fcmVxdWVzdD1udWxsLG4uX2xvYWQoZSwhMSE9PXIudmFsaWRhdGUpfSkpfSxyLnByb3RvdHlwZS5sb2FkRW1wdHk9ZnVuY3Rpb24oKXt0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InN0eWxlIn0pKSx0aGlzLl9sb2FkKEhlLCExKX0sci5wcm90b3R5cGUuX2xvYWQ9ZnVuY3Rpb24oZSxyKXtpZighcnx8IWplKHRoaXMsdC52YWxpZGF0ZVN0eWxlKGUpKSl7Zm9yKHZhciBuIGluIHRoaXMuX2xvYWRlZD0hMCx0aGlzLnN0eWxlc2hlZXQ9ZSxlLnNvdXJjZXMpdGhpcy5hZGRTb3VyY2UobixlLnNvdXJjZXNbbl0se3ZhbGlkYXRlOiExfSk7ZS5zcHJpdGU/dGhpcy5fbG9hZFNwcml0ZShlLnNwcml0ZSk6dGhpcy5pbWFnZU1hbmFnZXIuc2V0TG9hZGVkKCEwKSx0aGlzLmdseXBoTWFuYWdlci5zZXRVUkwoZS5nbHlwaHMpO3ZhciBpPWp0KHRoaXMuc3R5bGVzaGVldC5sYXllcnMpO3RoaXMuX29yZGVyPWkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSx0aGlzLl9sYXllcnM9e30sdGhpcy5fc2VyaWFsaXplZExheWVycz17fTtmb3IodmFyIGE9MCxvPWk7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdOyhzPXQuY3JlYXRlU3R5bGVMYXllcihzKSkuc2V0RXZlbnRlZFBhcmVudCh0aGlzLHtsYXllcjp7aWQ6cy5pZH19KSx0aGlzLl9sYXllcnNbcy5pZF09cyx0aGlzLl9zZXJpYWxpemVkTGF5ZXJzW3MuaWRdPXMuc2VyaWFsaXplKCl9dGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgic2V0TGF5ZXJzIix0aGlzLl9zZXJpYWxpemVMYXllcnModGhpcy5fb3JkZXIpKSx0aGlzLmxpZ2h0PW5ldyB3KHRoaXMuc3R5bGVzaGVldC5saWdodCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InN0eWxlIn0pKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInN0eWxlLmxvYWQiKSl9fSxyLnByb3RvdHlwZS5fbG9hZFNwcml0ZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3RoaXMuX3Nwcml0ZVJlcXVlc3Q9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpLGEsbyxzPXQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvPjE/IkAyeCI6IiIsbD10LmdldEpTT04oci50cmFuc2Zvcm1SZXF1ZXN0KHIubm9ybWFsaXplU3ByaXRlVVJMKGUscywiLmpzb24iKSx0LlJlc291cmNlVHlwZS5TcHJpdGVKU09OKSwoZnVuY3Rpb24odCxlKXtsPW51bGwsb3x8KG89dCxpPWUsdSgpKX0pKSxjPXQuZ2V0SW1hZ2Uoci50cmFuc2Zvcm1SZXF1ZXN0KHIubm9ybWFsaXplU3ByaXRlVVJMKGUscywiLnBuZyIpLHQuUmVzb3VyY2VUeXBlLlNwcml0ZUltYWdlKSwoZnVuY3Rpb24odCxlKXtjPW51bGwsb3x8KG89dCxhPWUsdSgpKX0pKTtmdW5jdGlvbiB1KCl7aWYobyluKG8pO2Vsc2UgaWYoaSYmYSl7dmFyIGU9dC5icm93c2VyLmdldEltYWdlRGF0YShhKSxyPXt9O2Zvcih2YXIgcyBpbiBpKXt2YXIgbD1pW3NdLGM9bC53aWR0aCx1PWwuaGVpZ2h0LGY9bC54LGg9bC55LHA9bC5zZGYsZD1sLnBpeGVsUmF0aW8sbT1sLnN0cmV0Y2hYLGc9bC5zdHJldGNoWSx2PWwuY29udGVudCx5PW5ldyB0LlJHQkFJbWFnZSh7d2lkdGg6YyxoZWlnaHQ6dX0pO3QuUkdCQUltYWdlLmNvcHkoZSx5LHt4OmYseTpofSx7eDowLHk6MH0se3dpZHRoOmMsaGVpZ2h0OnV9KSxyW3NdPXtkYXRhOnkscGl4ZWxSYXRpbzpkLHNkZjpwLHN0cmV0Y2hYOm0sc3RyZXRjaFk6Zyxjb250ZW50OnZ9fW4obnVsbCxyKX19cmV0dXJue2NhbmNlbDpmdW5jdGlvbigpe2wmJihsLmNhbmNlbCgpLGw9bnVsbCksYyYmKGMuY2FuY2VsKCksYz1udWxsKX19fShlLHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlciwoZnVuY3Rpb24oZSxuKXtpZihyLl9zcHJpdGVSZXF1ZXN0PW51bGwsZSlyLmZpcmUobmV3IHQuRXJyb3JFdmVudChlKSk7ZWxzZSBpZihuKWZvcih2YXIgaSBpbiBuKXIuaW1hZ2VNYW5hZ2VyLmFkZEltYWdlKGksbltpXSk7ci5pbWFnZU1hbmFnZXIuc2V0TG9hZGVkKCEwKSxyLl9hdmFpbGFibGVJbWFnZXM9ci5pbWFnZU1hbmFnZXIubGlzdEltYWdlcygpLHIuZGlzcGF0Y2hlci5icm9hZGNhc3QoInNldEltYWdlcyIsci5fYXZhaWxhYmxlSW1hZ2VzKSxyLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic3R5bGUifSkpfSkpfSxyLnByb3RvdHlwZS5fdmFsaWRhdGVMYXllcj1mdW5jdGlvbihlKXt2YXIgcj10aGlzLnNvdXJjZUNhY2hlc1tlLnNvdXJjZV07aWYocil7dmFyIG49ZS5zb3VyY2VMYXllcjtpZihuKXt2YXIgaT1yLmdldFNvdXJjZSgpOygiZ2VvanNvbiI9PT1pLnR5cGV8fGkudmVjdG9yTGF5ZXJJZHMmJi0xPT09aS52ZWN0b3JMYXllcklkcy5pbmRleE9mKG4pKSYmdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdTb3VyY2UgbGF5ZXIgIicrbisnIiBkb2VzIG5vdCBleGlzdCBvbiBzb3VyY2UgIicraS5pZCsnIiBhcyBzcGVjaWZpZWQgYnkgc3R5bGUgbGF5ZXIgIicrZS5pZCsnIicpKSl9fX0sci5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZClyZXR1cm4hMTtpZihPYmplY3Qua2V5cyh0aGlzLl91cGRhdGVkU291cmNlcykubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZUNhY2hlcylpZighdGhpcy5zb3VyY2VDYWNoZXNbdF0ubG9hZGVkKCkpcmV0dXJuITE7cmV0dXJuISF0aGlzLmltYWdlTWFuYWdlci5pc0xvYWRlZCgpfSxyLnByb3RvdHlwZS5fc2VyaWFsaXplTGF5ZXJzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj10O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXSxhPXRoaXMuX2xheWVyc1tpXTsiY3VzdG9tIiE9PWEudHlwZSYmZS5wdXNoKGEuc2VyaWFsaXplKCkpfXJldHVybiBlfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9ucz1mdW5jdGlvbigpe2lmKHRoaXMubGlnaHQmJnRoaXMubGlnaHQuaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZUNhY2hlcylpZih0aGlzLnNvdXJjZUNhY2hlc1t0XS5oYXNUcmFuc2l0aW9uKCkpcmV0dXJuITA7Zm9yKHZhciBlIGluIHRoaXMuX2xheWVycylpZih0aGlzLl9sYXllcnNbZV0uaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO3JldHVybiExfSxyLnByb3RvdHlwZS5fY2hlY2tMb2FkZWQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXRocm93IG5ldyBFcnJvcigiU3R5bGUgaXMgbm90IGRvbmUgbG9hZGluZyIpfSxyLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7aWYodGhpcy5fbG9hZGVkKXt2YXIgcj10aGlzLl9jaGFuZ2VkO2lmKHRoaXMuX2NoYW5nZWQpe3ZhciBuPU9iamVjdC5rZXlzKHRoaXMuX3VwZGF0ZWRMYXllcnMpLGk9T2JqZWN0LmtleXModGhpcy5fcmVtb3ZlZExheWVycyk7Zm9yKHZhciBhIGluKG4ubGVuZ3RofHxpLmxlbmd0aCkmJnRoaXMuX3VwZGF0ZVdvcmtlckxheWVycyhuLGkpLHRoaXMuX3VwZGF0ZWRTb3VyY2VzKXt2YXIgbz10aGlzLl91cGRhdGVkU291cmNlc1thXTsicmVsb2FkIj09PW8/dGhpcy5fcmVsb2FkU291cmNlKGEpOiJjbGVhciI9PT1vJiZ0aGlzLl9jbGVhclNvdXJjZShhKX1mb3IodmFyIHMgaW4gdGhpcy5fdXBkYXRlVGlsZXNGb3JDaGFuZ2VkSW1hZ2VzKCksdGhpcy5fdXBkYXRlZFBhaW50UHJvcHMpdGhpcy5fbGF5ZXJzW3NdLnVwZGF0ZVRyYW5zaXRpb25zKGUpO3RoaXMubGlnaHQudXBkYXRlVHJhbnNpdGlvbnMoZSksdGhpcy5fcmVzZXRVcGRhdGVzKCl9Zm9yKHZhciBsIGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuc291cmNlQ2FjaGVzW2xdLnVzZWQ9ITE7Zm9yKHZhciBjPTAsdT10aGlzLl9vcmRlcjtjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY10saD10aGlzLl9sYXllcnNbZl07aC5yZWNhbGN1bGF0ZShlLHRoaXMuX2F2YWlsYWJsZUltYWdlcyksIWguaXNIaWRkZW4oZS56b29tKSYmaC5zb3VyY2UmJih0aGlzLnNvdXJjZUNhY2hlc1toLnNvdXJjZV0udXNlZD0hMCl9dGhpcy5saWdodC5yZWNhbGN1bGF0ZShlKSx0aGlzLno9ZS56b29tLHImJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzdHlsZSJ9KSl9fSxyLnByb3RvdHlwZS5fdXBkYXRlVGlsZXNGb3JDaGFuZ2VkSW1hZ2VzPWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmtleXModGhpcy5fY2hhbmdlZEltYWdlcyk7aWYodC5sZW5ndGgpe2Zvcih2YXIgZSBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLnNvdXJjZUNhY2hlc1tlXS5yZWxvYWRUaWxlc0ZvckRlcGVuZGVuY2llcyhbImljb25zIiwicGF0dGVybnMiXSx0KTt0aGlzLl9jaGFuZ2VkSW1hZ2VzPXt9fX0sci5wcm90b3R5cGUuX3VwZGF0ZVdvcmtlckxheWVycz1mdW5jdGlvbih0LGUpe3RoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoInVwZGF0ZUxheWVycyIse2xheWVyczp0aGlzLl9zZXJpYWxpemVMYXllcnModCkscmVtb3ZlZElkczplfSl9LHIucHJvdG90eXBlLl9yZXNldFVwZGF0ZXM9ZnVuY3Rpb24oKXt0aGlzLl9jaGFuZ2VkPSExLHRoaXMuX3VwZGF0ZWRMYXllcnM9e30sdGhpcy5fcmVtb3ZlZExheWVycz17fSx0aGlzLl91cGRhdGVkU291cmNlcz17fSx0aGlzLl91cGRhdGVkUGFpbnRQcm9wcz17fSx0aGlzLl9jaGFuZ2VkSW1hZ2VzPXt9fSxyLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKHRoaXMuX2NoZWNrTG9hZGVkKCksamUodGhpcyx0LnZhbGlkYXRlU3R5bGUoZSkpKXJldHVybiExOyhlPXQuY2xvbmUkMShlKSkubGF5ZXJzPWp0KGUubGF5ZXJzKTt2YXIgbj1adCh0aGlzLnNlcmlhbGl6ZSgpLGUpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuISh0LmNvbW1hbmQgaW4gVmUpfSkpO2lmKDA9PT1uLmxlbmd0aClyZXR1cm4hMTt2YXIgaT1uLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuISh0LmNvbW1hbmQgaW4gVWUpfSkpO2lmKGkubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCJVbmltcGxlbWVudGVkOiAiK2kubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21tYW5kfSkpLmpvaW4oIiwgIikrIi4iKTtyZXR1cm4gbi5mb3JFYWNoKChmdW5jdGlvbih0KXsic2V0VHJhbnNpdGlvbiIhPT10LmNvbW1hbmQmJnJbdC5jb21tYW5kXS5hcHBseShyLHQuYXJncyl9KSksdGhpcy5zdHlsZXNoZWV0PWUsITB9LHIucHJvdG90eXBlLmFkZEltYWdlPWZ1bmN0aW9uKGUscil7aWYodGhpcy5nZXRJbWFnZShlKSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJBbiBpbWFnZSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cy4iKSkpO3RoaXMuaW1hZ2VNYW5hZ2VyLmFkZEltYWdlKGUsciksdGhpcy5fYXZhaWxhYmxlSW1hZ2VzPXRoaXMuaW1hZ2VNYW5hZ2VyLmxpc3RJbWFnZXMoKSx0aGlzLl9jaGFuZ2VkSW1hZ2VzW2VdPSEwLHRoaXMuX2NoYW5nZWQ9ITAsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InN0eWxlIn0pKX0sci5wcm90b3R5cGUudXBkYXRlSW1hZ2U9ZnVuY3Rpb24odCxlKXt0aGlzLmltYWdlTWFuYWdlci51cGRhdGVJbWFnZSh0LGUpfSxyLnByb3RvdHlwZS5nZXRJbWFnZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2UodCl9LHIucHJvdG90eXBlLnJlbW92ZUltYWdlPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmdldEltYWdlKGUpKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIk5vIGltYWdlIHdpdGggdGhpcyBuYW1lIGV4aXN0cy4iKSkpO3RoaXMuaW1hZ2VNYW5hZ2VyLnJlbW92ZUltYWdlKGUpLHRoaXMuX2F2YWlsYWJsZUltYWdlcz10aGlzLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCksdGhpcy5fY2hhbmdlZEltYWdlc1tlXT0hMCx0aGlzLl9jaGFuZ2VkPSEwLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzdHlsZSJ9KSl9LHIucHJvdG90eXBlLmxpc3RJbWFnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tMb2FkZWQoKSx0aGlzLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCl9LHIucHJvdG90eXBlLmFkZFNvdXJjZT1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcztpZih2b2lkIDA9PT1uJiYobj17fSksdGhpcy5fY2hlY2tMb2FkZWQoKSx2b2lkIDAhPT10aGlzLnNvdXJjZUNhY2hlc1tlXSl0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlzIGFscmVhZHkgYSBzb3VyY2Ugd2l0aCB0aGlzIElEIik7aWYoIXIudHlwZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSB0eXBlIHByb3BlcnR5IG11c3QgYmUgZGVmaW5lZCwgYnV0IHRoZSBvbmx5IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyB3ZXJlIGdpdmVuOiAiK09iamVjdC5rZXlzKHIpLmpvaW4oIiwgIikrIi4iKTtpZighKFsidmVjdG9yIiwicmFzdGVyIiwiZ2VvanNvbiIsInZpZGVvIiwiaW1hZ2UiXS5pbmRleE9mKHIudHlwZSk+PTApfHwhdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLnNvdXJjZSwic291cmNlcy4iK2UscixudWxsLG4pKXt0aGlzLm1hcCYmdGhpcy5tYXAuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyYmKHIuY29sbGVjdFJlc291cmNlVGltaW5nPSEwKTt2YXIgYT10aGlzLnNvdXJjZUNhY2hlc1tlXT1uZXcgQ3QoZSxyLHRoaXMuZGlzcGF0Y2hlcik7YS5zdHlsZT10aGlzLGEuc2V0RXZlbnRlZFBhcmVudCh0aGlzLChmdW5jdGlvbigpe3JldHVybntpc1NvdXJjZUxvYWRlZDppLmxvYWRlZCgpLHNvdXJjZTphLnNlcmlhbGl6ZSgpLHNvdXJjZUlkOmV9fSkpLGEub25BZGQodGhpcy5tYXApLHRoaXMuX2NoYW5nZWQ9ITB9fSxyLnByb3RvdHlwZS5yZW1vdmVTb3VyY2U9ZnVuY3Rpb24oZSl7aWYodGhpcy5fY2hlY2tMb2FkZWQoKSx2b2lkIDA9PT10aGlzLnNvdXJjZUNhY2hlc1tlXSl0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlzIG5vIHNvdXJjZSB3aXRoIHRoaXMgSUQiKTtmb3IodmFyIHIgaW4gdGhpcy5fbGF5ZXJzKWlmKHRoaXMuX2xheWVyc1tyXS5zb3VyY2U9PT1lKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ1NvdXJjZSAiJytlKyciIGNhbm5vdCBiZSByZW1vdmVkIHdoaWxlIGxheWVyICInK3IrJyIgaXMgdXNpbmcgaXQuJykpKTt2YXIgbj10aGlzLnNvdXJjZUNhY2hlc1tlXTtkZWxldGUgdGhpcy5zb3VyY2VDYWNoZXNbZV0sZGVsZXRlIHRoaXMuX3VwZGF0ZWRTb3VyY2VzW2VdLG4uZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse3NvdXJjZURhdGFUeXBlOiJtZXRhZGF0YSIsZGF0YVR5cGU6InNvdXJjZSIsc291cmNlSWQ6ZX0pKSxuLnNldEV2ZW50ZWRQYXJlbnQobnVsbCksbi5jbGVhclRpbGVzKCksbi5vblJlbW92ZSYmbi5vblJlbW92ZSh0aGlzLm1hcCksdGhpcy5fY2hhbmdlZD0hMH0sci5wcm90b3R5cGUuc2V0R2VvSlNPTlNvdXJjZURhdGE9ZnVuY3Rpb24odCxlKXt0aGlzLl9jaGVja0xvYWRlZCgpLHRoaXMuc291cmNlQ2FjaGVzW3RdLmdldFNvdXJjZSgpLnNldERhdGEoZSksdGhpcy5fY2hhbmdlZD0hMH0sci5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNvdXJjZUNhY2hlc1t0XSYmdGhpcy5zb3VyY2VDYWNoZXNbdF0uZ2V0U291cmNlKCl9LHIucHJvdG90eXBlLmFkZExheWVyPWZ1bmN0aW9uKGUscixuKXt2b2lkIDA9PT1uJiYobj17fSksdGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgaT1lLmlkO2lmKHRoaXMuZ2V0TGF5ZXIoaSkpdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdMYXllciB3aXRoIGlkICInK2krJyIgYWxyZWFkeSBleGlzdHMgb24gdGhpcyBtYXAnKSkpO2Vsc2V7dmFyIGE7aWYoImN1c3RvbSI9PT1lLnR5cGUpe2lmKGplKHRoaXMsdC52YWxpZGF0ZUN1c3RvbVN0eWxlTGF5ZXIoZSkpKXJldHVybjthPXQuY3JlYXRlU3R5bGVMYXllcihlKX1lbHNle2lmKCJvYmplY3QiPT10eXBlb2YgZS5zb3VyY2UmJih0aGlzLmFkZFNvdXJjZShpLGUuc291cmNlKSxlPXQuY2xvbmUkMShlKSxlPXQuZXh0ZW5kKGUse3NvdXJjZTppfSkpLHRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5sYXllciwibGF5ZXJzLiIraSxlLHthcnJheUluZGV4Oi0xfSxuKSlyZXR1cm47YT10LmNyZWF0ZVN0eWxlTGF5ZXIoZSksdGhpcy5fdmFsaWRhdGVMYXllcihhKSxhLnNldEV2ZW50ZWRQYXJlbnQodGhpcyx7bGF5ZXI6e2lkOml9fSksdGhpcy5fc2VyaWFsaXplZExheWVyc1thLmlkXT1hLnNlcmlhbGl6ZSgpfXZhciBvPXI/dGhpcy5fb3JkZXIuaW5kZXhPZihyKTp0aGlzLl9vcmRlci5sZW5ndGg7aWYociYmLTE9PT1vKXRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignTGF5ZXIgd2l0aCBpZCAiJytyKyciIGRvZXMgbm90IGV4aXN0IG9uIHRoaXMgbWFwLicpKSk7ZWxzZXtpZih0aGlzLl9vcmRlci5zcGxpY2UobywwLGkpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSEwLHRoaXMuX2xheWVyc1tpXT1hLHRoaXMuX3JlbW92ZWRMYXllcnNbaV0mJmEuc291cmNlJiYiY3VzdG9tIiE9PWEudHlwZSl7dmFyIHM9dGhpcy5fcmVtb3ZlZExheWVyc1tpXTtkZWxldGUgdGhpcy5fcmVtb3ZlZExheWVyc1tpXSxzLnR5cGUhPT1hLnR5cGU/dGhpcy5fdXBkYXRlZFNvdXJjZXNbYS5zb3VyY2VdPSJjbGVhciI6KHRoaXMuX3VwZGF0ZWRTb3VyY2VzW2Euc291cmNlXT0icmVsb2FkIix0aGlzLnNvdXJjZUNhY2hlc1thLnNvdXJjZV0ucGF1c2UoKSl9dGhpcy5fdXBkYXRlTGF5ZXIoYSksYS5vbkFkZCYmYS5vbkFkZCh0aGlzLm1hcCl9fX0sci5wcm90b3R5cGUubW92ZUxheWVyPWZ1bmN0aW9uKGUscil7aWYodGhpcy5fY2hlY2tMb2FkZWQoKSx0aGlzLl9jaGFuZ2VkPSEwLHRoaXMuX2xheWVyc1tlXSl7aWYoZSE9PXIpe3ZhciBuPXRoaXMuX29yZGVyLmluZGV4T2YoZSk7dGhpcy5fb3JkZXIuc3BsaWNlKG4sMSk7dmFyIGk9cj90aGlzLl9vcmRlci5pbmRleE9mKHIpOnRoaXMuX29yZGVyLmxlbmd0aDtyJiYtMT09PWk/dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdMYXllciB3aXRoIGlkICInK3IrJyIgZG9lcyBub3QgZXhpc3Qgb24gdGhpcyBtYXAuJykpKToodGhpcy5fb3JkZXIuc3BsaWNlKGksMCxlKSx0aGlzLl9sYXllck9yZGVyQ2hhbmdlZD0hMCl9fWVsc2UgdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrZSsiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBtb3ZlZC4iKSkpfSxyLnByb3RvdHlwZS5yZW1vdmVMYXllcj1mdW5jdGlvbihlKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciByPXRoaXMuX2xheWVyc1tlXTtpZihyKXtyLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7dmFyIG49dGhpcy5fb3JkZXIuaW5kZXhPZihlKTt0aGlzLl9vcmRlci5zcGxpY2UobiwxKSx0aGlzLl9sYXllck9yZGVyQ2hhbmdlZD0hMCx0aGlzLl9jaGFuZ2VkPSEwLHRoaXMuX3JlbW92ZWRMYXllcnNbZV09cixkZWxldGUgdGhpcy5fbGF5ZXJzW2VdLGRlbGV0ZSB0aGlzLl9zZXJpYWxpemVkTGF5ZXJzW2VdLGRlbGV0ZSB0aGlzLl91cGRhdGVkTGF5ZXJzW2VdLGRlbGV0ZSB0aGlzLl91cGRhdGVkUGFpbnRQcm9wc1tlXSxyLm9uUmVtb3ZlJiZyLm9uUmVtb3ZlKHRoaXMubWFwKX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgcmVtb3ZlZC4iKSkpfSxyLnByb3RvdHlwZS5nZXRMYXllcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF5ZXJzW3RdfSxyLnByb3RvdHlwZS5oYXNMYXllcj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbiB0aGlzLl9sYXllcnN9LHIucHJvdG90eXBlLnNldExheWVyWm9vbVJhbmdlPWZ1bmN0aW9uKGUscixuKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBpPXRoaXMuZ2V0TGF5ZXIoZSk7aT9pLm1pbnpvb209PT1yJiZpLm1heHpvb209PT1ufHwobnVsbCE9ciYmKGkubWluem9vbT1yKSxudWxsIT1uJiYoaS5tYXh6b29tPW4pLHRoaXMuX3VwZGF0ZUxheWVyKGkpKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGhhdmUgem9vbSBleHRlbnQuIikpKX0sci5wcm90b3R5cGUuc2V0RmlsdGVyPWZ1bmN0aW9uKGUscixuKXt2b2lkIDA9PT1uJiYobj17fSksdGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgaT10aGlzLmdldExheWVyKGUpO2lmKGkpe2lmKCF0LmRlZXBFcXVhbChpLmZpbHRlcixyKSlyZXR1cm4gbnVsbD09cj8oaS5maWx0ZXI9dm9pZCAwLHZvaWQgdGhpcy5fdXBkYXRlTGF5ZXIoaSkpOnZvaWQodGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLmZpbHRlciwibGF5ZXJzLiIraS5pZCsiLmZpbHRlciIscixudWxsLG4pfHwoaS5maWx0ZXI9dC5jbG9uZSQxKHIpLHRoaXMuX3VwZGF0ZUxheWVyKGkpKSl9ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIGZpbHRlcmVkLiIpKSl9LHIucHJvdG90eXBlLmdldEZpbHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gdC5jbG9uZSQxKHRoaXMuZ2V0TGF5ZXIoZSkuZmlsdGVyKX0sci5wcm90b3R5cGUuc2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24oZSxyLG4saSl7dm9pZCAwPT09aSYmKGk9e30pLHRoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGE9dGhpcy5nZXRMYXllcihlKTthP3QuZGVlcEVxdWFsKGEuZ2V0TGF5b3V0UHJvcGVydHkociksbil8fChhLnNldExheW91dFByb3BlcnR5KHIsbixpKSx0aGlzLl91cGRhdGVMYXllcihhKSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrZSsiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBzdHlsZWQuIikpKX0sci5wcm90b3R5cGUuZ2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLmdldExheWVyKGUpO2lmKG4pcmV0dXJuIG4uZ2V0TGF5b3V0UHJvcGVydHkocik7dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrZSsiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUuIikpKX0sci5wcm90b3R5cGUuc2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbihlLHIsbixpKXt2b2lkIDA9PT1pJiYoaT17fSksdGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgYT10aGlzLmdldExheWVyKGUpO2E/dC5kZWVwRXF1YWwoYS5nZXRQYWludFByb3BlcnR5KHIpLG4pfHwoYS5zZXRQYWludFByb3BlcnR5KHIsbixpKSYmdGhpcy5fdXBkYXRlTGF5ZXIoYSksdGhpcy5fY2hhbmdlZD0hMCx0aGlzLl91cGRhdGVkUGFpbnRQcm9wc1tlXT0hMCk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrZSsiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBzdHlsZWQuIikpKX0sci5wcm90b3R5cGUuZ2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldExheWVyKHQpLmdldFBhaW50UHJvcGVydHkoZSl9LHIucHJvdG90eXBlLnNldEZlYXR1cmVTdGF0ZT1mdW5jdGlvbihlLHIpe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIG49ZS5zb3VyY2UsaT1lLnNvdXJjZUxheWVyLGE9dGhpcy5zb3VyY2VDYWNoZXNbbl07aWYodm9pZCAwIT09YSl7dmFyIG89YS5nZXRTb3VyY2UoKS50eXBlOyJnZW9qc29uIj09PW8mJmk/dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJHZW9KU09OIHNvdXJjZXMgY2Fubm90IGhhdmUgYSBzb3VyY2VMYXllciBwYXJhbWV0ZXIuIikpKToidmVjdG9yIiE9PW98fGk/KHZvaWQgMD09PWUuaWQmJnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGZlYXR1cmUgaWQgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQuIikpKSxhLnNldEZlYXR1cmVTdGF0ZShpLGUuaWQscikpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHNvdXJjZUxheWVyIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIGZvciB2ZWN0b3Igc291cmNlIHR5cGVzLiIpKSl9ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBzb3VyY2UgJyIrbisiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUuIikpKX0sci5wcm90b3R5cGUucmVtb3ZlRmVhdHVyZVN0YXRlPWZ1bmN0aW9uKGUscil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgbj1lLnNvdXJjZSxpPXRoaXMuc291cmNlQ2FjaGVzW25dO2lmKHZvaWQgMCE9PWkpe3ZhciBhPWkuZ2V0U291cmNlKCkudHlwZSxvPSJ2ZWN0b3IiPT09YT9lLnNvdXJjZUxheWVyOnZvaWQgMDsidmVjdG9yIiE9PWF8fG8/ciYmInN0cmluZyIhPXR5cGVvZiBlLmlkJiYibnVtYmVyIiE9dHlwZW9mIGUuaWQ/dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJBIGZlYXR1cmUgaWQgaXMgcmVxdXJlZCB0byByZW1vdmUgaXRzIHNwZWNpZmljIHN0YXRlIHByb3BlcnR5LiIpKSk6aS5yZW1vdmVGZWF0dXJlU3RhdGUobyxlLmlkLHIpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHNvdXJjZUxheWVyIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIGZvciB2ZWN0b3Igc291cmNlIHR5cGVzLiIpKSl9ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBzb3VyY2UgJyIrbisiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUuIikpKX0sci5wcm90b3R5cGUuZ2V0RmVhdHVyZVN0YXRlPWZ1bmN0aW9uKGUpe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIHI9ZS5zb3VyY2Usbj1lLnNvdXJjZUxheWVyLGk9dGhpcy5zb3VyY2VDYWNoZXNbcl07aWYodm9pZCAwIT09aSl7aWYoInZlY3RvciIhPT1pLmdldFNvdXJjZSgpLnR5cGV8fG4pcmV0dXJuIHZvaWQgMD09PWUuaWQmJnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGZlYXR1cmUgaWQgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQuIikpKSxpLmdldEZlYXR1cmVTdGF0ZShuLGUuaWQpO3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHNvdXJjZUxheWVyIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIGZvciB2ZWN0b3Igc291cmNlIHR5cGVzLiIpKSl9ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBzb3VyY2UgJyIrcisiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUuIikpKX0sci5wcm90b3R5cGUuZ2V0VHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0LmV4dGVuZCh7ZHVyYXRpb246MzAwLGRlbGF5OjB9LHRoaXMuc3R5bGVzaGVldCYmdGhpcy5zdHlsZXNoZWV0LnRyYW5zaXRpb24pfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5maWx0ZXJPYmplY3Qoe3ZlcnNpb246dGhpcy5zdHlsZXNoZWV0LnZlcnNpb24sbmFtZTp0aGlzLnN0eWxlc2hlZXQubmFtZSxtZXRhZGF0YTp0aGlzLnN0eWxlc2hlZXQubWV0YWRhdGEsbGlnaHQ6dGhpcy5zdHlsZXNoZWV0LmxpZ2h0LGNlbnRlcjp0aGlzLnN0eWxlc2hlZXQuY2VudGVyLHpvb206dGhpcy5zdHlsZXNoZWV0Lnpvb20sYmVhcmluZzp0aGlzLnN0eWxlc2hlZXQuYmVhcmluZyxwaXRjaDp0aGlzLnN0eWxlc2hlZXQucGl0Y2gsc3ByaXRlOnRoaXMuc3R5bGVzaGVldC5zcHJpdGUsZ2x5cGhzOnRoaXMuc3R5bGVzaGVldC5nbHlwaHMsdHJhbnNpdGlvbjp0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbixzb3VyY2VzOnQubWFwT2JqZWN0KHRoaXMuc291cmNlQ2FjaGVzLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZXJpYWxpemUoKX0pKSxsYXllcnM6dGhpcy5fc2VyaWFsaXplTGF5ZXJzKHRoaXMuX29yZGVyKX0sKGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10fSkpfSxyLnByb3RvdHlwZS5fdXBkYXRlTGF5ZXI9ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlZExheWVyc1t0LmlkXT0hMCx0LnNvdXJjZSYmIXRoaXMuX3VwZGF0ZWRTb3VyY2VzW3Quc291cmNlXSYmInJhc3RlciIhPT10aGlzLnNvdXJjZUNhY2hlc1t0LnNvdXJjZV0uZ2V0U291cmNlKCkudHlwZSYmKHRoaXMuX3VwZGF0ZWRTb3VyY2VzW3Quc291cmNlXT0icmVsb2FkIix0aGlzLnNvdXJjZUNhY2hlc1t0LnNvdXJjZV0ucGF1c2UoKSksdGhpcy5fY2hhbmdlZD0hMH0sci5wcm90b3R5cGUuX2ZsYXR0ZW5BbmRTb3J0UmVuZGVyZWRGZWF0dXJlcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPWZ1bmN0aW9uKHQpe3JldHVybiJmaWxsLWV4dHJ1c2lvbiI9PT1lLl9sYXllcnNbdF0udHlwZX0sbj17fSxpPVtdLGE9dGhpcy5fb3JkZXIubGVuZ3RoLTE7YT49MDthLS0pe3ZhciBvPXRoaXMuX29yZGVyW2FdO2lmKHIobykpe25bb109YTtmb3IodmFyIHM9MCxsPXQ7czxsLmxlbmd0aDtzKz0xKXt2YXIgYz1sW3NdW29dO2lmKGMpZm9yKHZhciB1PTAsZj1jO3U8Zi5sZW5ndGg7dSs9MSl7dmFyIGg9Zlt1XTtpLnB1c2goaCl9fX19aS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLmludGVyc2VjdGlvblotdC5pbnRlcnNlY3Rpb25afSkpO2Zvcih2YXIgcD1bXSxkPXRoaXMuX29yZGVyLmxlbmd0aC0xO2Q+PTA7ZC0tKXt2YXIgbT10aGlzLl9vcmRlcltkXTtpZihyKG0pKWZvcih2YXIgZz1pLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgdj1pW2ddLmZlYXR1cmU7aWYoblt2LmxheWVyLmlkXTxkKWJyZWFrO3AucHVzaCh2KSxpLnBvcCgpfWVsc2UgZm9yKHZhciB5PTAseD10O3k8eC5sZW5ndGg7eSs9MSl7dmFyIGI9eFt5XVttXTtpZihiKWZvcih2YXIgXz0wLHc9YjtfPHcubGVuZ3RoO18rPTEpe3ZhciBUPXdbX107cC5wdXNoKFQuZmVhdHVyZSl9fX1yZXR1cm4gcH0sci5wcm90b3R5cGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKGUscixuKXtyJiZyLmZpbHRlciYmdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLmZpbHRlciwicXVlcnlSZW5kZXJlZEZlYXR1cmVzLmZpbHRlciIsci5maWx0ZXIsbnVsbCxyKTt2YXIgaT17fTtpZihyJiZyLmxheWVycyl7aWYoIUFycmF5LmlzQXJyYXkoci5sYXllcnMpKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoInBhcmFtZXRlcnMubGF5ZXJzIG11c3QgYmUgYW4gQXJyYXkuIikpKSxbXTtmb3IodmFyIGE9MCxvPXIubGF5ZXJzO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXSxsPXRoaXMuX2xheWVyc1tzXTtpZighbClyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrcysiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBxdWVyaWVkIGZvciBmZWF0dXJlcy4iKSkpLFtdO2lbbC5zb3VyY2VdPSEwfX12YXIgYz1bXTtmb3IodmFyIHUgaW4gci5hdmFpbGFibGVJbWFnZXM9dGhpcy5fYXZhaWxhYmxlSW1hZ2VzLHRoaXMuc291cmNlQ2FjaGVzKXIubGF5ZXJzJiYhaVt1XXx8Yy5wdXNoKEYodGhpcy5zb3VyY2VDYWNoZXNbdV0sdGhpcy5fbGF5ZXJzLHRoaXMuX3NlcmlhbGl6ZWRMYXllcnMsZSxyLG4pKTtyZXR1cm4gdGhpcy5wbGFjZW1lbnQmJmMucHVzaChmdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9e30sbD1hLnF1ZXJ5UmVuZGVyZWRTeW1ib2xzKG4pLGM9W10sdT0wLGY9T2JqZWN0LmtleXMobCkubWFwKE51bWJlcik7dTxmLmxlbmd0aDt1Kz0xKXt2YXIgaD1mW3VdO2MucHVzaChvW2hdKX1jLnNvcnQoQik7Zm9yKHZhciBwPWZ1bmN0aW9uKCl7dmFyIHI9bVtkXSxuPXIuZmVhdHVyZUluZGV4Lmxvb2t1cFN5bWJvbEZlYXR1cmVzKGxbci5idWNrZXRJbnN0YW5jZUlkXSxlLHIuYnVja2V0SW5kZXgsci5zb3VyY2VMYXllckluZGV4LGkuZmlsdGVyLGkubGF5ZXJzLGkuYXZhaWxhYmxlSW1hZ2VzLHQpO2Zvcih2YXIgYSBpbiBuKXt2YXIgbz1zW2FdPXNbYV18fFtdLGM9blthXTtjLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIG49ci5mZWF0dXJlU29ydE9yZGVyO2lmKG4pe3ZhciBpPW4uaW5kZXhPZih0LmZlYXR1cmVJbmRleCk7cmV0dXJuIG4uaW5kZXhPZihlLmZlYXR1cmVJbmRleCktaX1yZXR1cm4gZS5mZWF0dXJlSW5kZXgtdC5mZWF0dXJlSW5kZXh9KSk7Zm9yKHZhciB1PTAsZj1jO3U8Zi5sZW5ndGg7dSs9MSl7dmFyIGg9Zlt1XTtvLnB1c2goaCl9fX0sZD0wLG09YztkPG0ubGVuZ3RoO2QrPTEpcCgpO3ZhciBnPWZ1bmN0aW9uKGUpe3NbZV0uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9bi5mZWF0dXJlLGE9dFtlXSxvPXJbYS5zb3VyY2VdLmdldEZlYXR1cmVTdGF0ZShpLmxheWVyWyJzb3VyY2UtbGF5ZXIiXSxpLmlkKTtpLnNvdXJjZT1pLmxheWVyLnNvdXJjZSxpLmxheWVyWyJzb3VyY2UtbGF5ZXIiXSYmKGkuc291cmNlTGF5ZXI9aS5sYXllclsic291cmNlLWxheWVyIl0pLGkuc3RhdGU9b30pKX07Zm9yKHZhciB2IGluIHMpZyh2KTtyZXR1cm4gc30odGhpcy5fbGF5ZXJzLHRoaXMuX3NlcmlhbGl6ZWRMYXllcnMsdGhpcy5zb3VyY2VDYWNoZXMsZSxyLHRoaXMucGxhY2VtZW50LmNvbGxpc2lvbkluZGV4LHRoaXMucGxhY2VtZW50LnJldGFpbmVkUXVlcnlEYXRhKSksdGhpcy5fZmxhdHRlbkFuZFNvcnRSZW5kZXJlZEZlYXR1cmVzKGMpfSxyLnByb3RvdHlwZS5xdWVyeVNvdXJjZUZlYXR1cmVzPWZ1bmN0aW9uKGUscil7ciYmci5maWx0ZXImJnRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5maWx0ZXIsInF1ZXJ5U291cmNlRmVhdHVyZXMuZmlsdGVyIixyLmZpbHRlcixudWxsLHIpO3ZhciBuPXRoaXMuc291cmNlQ2FjaGVzW2VdO3JldHVybiBuP2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZ2V0UmVuZGVyYWJsZUlkcygpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0VGlsZUJ5SUQoZSl9KSksbj1bXSxpPXt9LGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89clthXSxzPW8udGlsZUlELmNhbm9uaWNhbC5rZXk7aVtzXXx8KGlbc109ITAsby5xdWVyeVNvdXJjZUZlYXR1cmVzKG4sZSkpfXJldHVybiBufShuLHIpOltdfSxyLnByb3RvdHlwZS5hZGRTb3VyY2VUeXBlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5nZXRTb3VyY2VUeXBlKHQpP24obmV3IEVycm9yKCdBIHNvdXJjZSB0eXBlIGNhbGxlZCAiJyt0KyciIGFscmVhZHkgZXhpc3RzLicpKTooci5zZXRTb3VyY2VUeXBlKHQsZSksZS53b3JrZXJTb3VyY2VVUkw/dm9pZCB0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCJsb2FkV29ya2VyU291cmNlIix7bmFtZTp0LHVybDplLndvcmtlclNvdXJjZVVSTH0sbik6bihudWxsLG51bGwpKX0sci5wcm90b3R5cGUuZ2V0TGlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saWdodC5nZXRMaWdodCgpfSxyLnByb3RvdHlwZS5zZXRMaWdodD1mdW5jdGlvbihlLHIpe3ZvaWQgMD09PXImJihyPXt9KSx0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBuPXRoaXMubGlnaHQuZ2V0TGlnaHQoKSxpPSExO2Zvcih2YXIgYSBpbiBlKWlmKCF0LmRlZXBFcXVhbChlW2FdLG5bYV0pKXtpPSEwO2JyZWFrfWlmKGkpe3ZhciBvPXtub3c6dC5icm93c2VyLm5vdygpLHRyYW5zaXRpb246dC5leHRlbmQoe2R1cmF0aW9uOjMwMCxkZWxheTowfSx0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbil9O3RoaXMubGlnaHQuc2V0TGlnaHQoZSxyKSx0aGlzLmxpZ2h0LnVwZGF0ZVRyYW5zaXRpb25zKG8pfX0sci5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGUscixuLGksYSl7cmV0dXJuIHZvaWQgMD09PWEmJihhPXt9KSwoIWF8fCExIT09YS52YWxpZGF0ZSkmJmplKHRoaXMsZS5jYWxsKHQudmFsaWRhdGVTdHlsZSx0LmV4dGVuZCh7a2V5OnIsc3R5bGU6dGhpcy5zZXJpYWxpemUoKSx2YWx1ZTpuLHN0eWxlU3BlYzp0LnN0eWxlU3BlY30saSkpKX0sci5wcm90b3R5cGUuX3JlbW92ZT1mdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLl9yZXF1ZXN0JiYodGhpcy5fcmVxdWVzdC5jYW5jZWwoKSx0aGlzLl9yZXF1ZXN0PW51bGwpLHRoaXMuX3Nwcml0ZVJlcXVlc3QmJih0aGlzLl9zcHJpdGVSZXF1ZXN0LmNhbmNlbCgpLHRoaXMuX3Nwcml0ZVJlcXVlc3Q9bnVsbCksdC5ldmVudGVkLm9mZigicGx1Z2luU3RhdGVDaGFuZ2UiLHRoaXMuX3J0bFRleHRQbHVnaW5DYWxsYmFjayksdGhpcy5fbGF5ZXJzKXt0aGlzLl9sYXllcnNbZV0uc2V0RXZlbnRlZFBhcmVudChudWxsKX1mb3IodmFyIHIgaW4gdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5zb3VyY2VDYWNoZXNbcl0uY2xlYXJUaWxlcygpLHRoaXMuc291cmNlQ2FjaGVzW3JdLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7dGhpcy5pbWFnZU1hbmFnZXIuc2V0RXZlbnRlZFBhcmVudChudWxsKSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQobnVsbCksdGhpcy5kaXNwYXRjaGVyLnJlbW92ZSgpfSxyLnByb3RvdHlwZS5fY2xlYXJTb3VyY2U9ZnVuY3Rpb24odCl7dGhpcy5zb3VyY2VDYWNoZXNbdF0uY2xlYXJUaWxlcygpfSxyLnByb3RvdHlwZS5fcmVsb2FkU291cmNlPWZ1bmN0aW9uKHQpe3RoaXMuc291cmNlQ2FjaGVzW3RdLnJlc3VtZSgpLHRoaXMuc291cmNlQ2FjaGVzW3RdLnJlbG9hZCgpfSxyLnByb3RvdHlwZS5fdXBkYXRlU291cmNlcz1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5zb3VyY2VDYWNoZXNbZV0udXBkYXRlKHQpfSxyLnByb3RvdHlwZS5fZ2VuZXJhdGVDb2xsaXNpb25Cb3hlcz1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLl9yZWxvYWRTb3VyY2UodCl9LHIucHJvdG90eXBlLl91cGRhdGVQbGFjZW1lbnQ9ZnVuY3Rpb24oZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT0hMSk7Zm9yKHZhciBvPSExLHM9ITEsbD17fSxjPTAsdT10aGlzLl9vcmRlcjtjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY10saD10aGlzLl9sYXllcnNbZl07aWYoInN5bWJvbCI9PT1oLnR5cGUpe2lmKCFsW2guc291cmNlXSl7dmFyIHA9dGhpcy5zb3VyY2VDYWNoZXNbaC5zb3VyY2VdO2xbaC5zb3VyY2VdPXAuZ2V0UmVuZGVyYWJsZUlkcyghMCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcC5nZXRUaWxlQnlJRCh0KX0pKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLnRpbGVJRC5vdmVyc2NhbGVkWi10LnRpbGVJRC5vdmVyc2NhbGVkWnx8KHQudGlsZUlELmlzTGVzc1RoYW4oZS50aWxlSUQpPy0xOjEpfSkpfXZhciBkPXRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXguYWRkTGF5ZXIoaCxsW2guc291cmNlXSxlLmNlbnRlci5sbmcpO289b3x8ZH19aWYodGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleC5wcnVuZVVudXNlZExheWVycyh0aGlzLl9vcmRlciksKChhPWF8fHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkfHwwPT09bil8fCF0aGlzLnBhdXNlYWJsZVBsYWNlbWVudHx8dGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCkmJiF0aGlzLnBsYWNlbWVudC5zdGlsbFJlY2VudCh0LmJyb3dzZXIubm93KCksZS56b29tKSkmJih0aGlzLnBhdXNlYWJsZVBsYWNlbWVudD1uZXcgemUoZSx0aGlzLl9vcmRlcixhLHIsbixpLHRoaXMucGxhY2VtZW50KSx0aGlzLl9sYXllck9yZGVyQ2hhbmdlZD0hMSksdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCk/dGhpcy5wbGFjZW1lbnQuc2V0U3RhbGUoKToodGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuY29udGludWVQbGFjZW1lbnQodGhpcy5fb3JkZXIsdGhpcy5fbGF5ZXJzLGwpLHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmlzRG9uZSgpJiYodGhpcy5wbGFjZW1lbnQ9dGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuY29tbWl0KHQuYnJvd3Nlci5ub3coKSkscz0hMCksbyYmdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQucGxhY2VtZW50LnNldFN0YWxlKCkpLHN8fG8pZm9yKHZhciBtPTAsZz10aGlzLl9vcmRlcjttPGcubGVuZ3RoO20rPTEpe3ZhciB2PWdbbV0seT10aGlzLl9sYXllcnNbdl07InN5bWJvbCI9PT15LnR5cGUmJnRoaXMucGxhY2VtZW50LnVwZGF0ZUxheWVyT3BhY2l0aWVzKHksbFt5LnNvdXJjZV0pfXJldHVybiF0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKXx8dGhpcy5wbGFjZW1lbnQuaGFzVHJhbnNpdGlvbnModC5icm93c2VyLm5vdygpKX0sci5wcm90b3R5cGUuX3JlbGVhc2VTeW1ib2xGYWRlVGlsZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5zb3VyY2VDYWNoZXNbdF0ucmVsZWFzZVN5bWJvbEZhZGVUaWxlcygpfSxyLnByb3RvdHlwZS5nZXRJbWFnZXM9ZnVuY3Rpb24odCxlLHIpe3RoaXMuaW1hZ2VNYW5hZ2VyLmdldEltYWdlcyhlLmljb25zLHIpLHRoaXMuX3VwZGF0ZVRpbGVzRm9yQ2hhbmdlZEltYWdlcygpO3ZhciBuPXRoaXMuc291cmNlQ2FjaGVzW2Uuc291cmNlXTtuJiZuLnNldERlcGVuZGVuY2llcyhlLnRpbGVJRC5rZXksZS50eXBlLGUuaWNvbnMpfSxyLnByb3RvdHlwZS5nZXRHbHlwaHM9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2x5cGhNYW5hZ2VyLmdldEdseXBocyhlLnN0YWNrcyxyKX0sci5wcm90b3R5cGUuZ2V0UmVzb3VyY2U9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0Lm1ha2VSZXF1ZXN0KHIsbil9LHJ9KHQuRXZlbnRlZCk7cWUuZ2V0U291cmNlVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gRFt0XX0scWUuc2V0U291cmNlVHlwZT1mdW5jdGlvbih0LGUpe0RbdF09ZX0scWUucmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZT10LnJlZ2lzdGVyRm9yUGx1Z2luU3RhdGVDaGFuZ2U7dmFyIEdlPXQuY3JlYXRlTGF5b3V0KFt7bmFtZToiYV9wb3MiLHR5cGU6IkludDE2Iixjb21wb25lbnRzOjJ9XSksWWU9eXIoIiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZWxzZVxuI2lmICFkZWZpbmVkKGxvd3ApXG4jZGVmaW5lIGxvd3BcbiNlbmRpZlxuI2lmICFkZWZpbmVkKG1lZGl1bXApXG4jZGVmaW5lIG1lZGl1bXBcbiNlbmRpZlxuI2lmICFkZWZpbmVkKGhpZ2hwKVxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG4jZW5kaWYiLCIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNlbHNlXG4jaWYgIWRlZmluZWQobG93cClcbiNkZWZpbmUgbG93cFxuI2VuZGlmXG4jaWYgIWRlZmluZWQobWVkaXVtcClcbiNkZWZpbmUgbWVkaXVtcFxuI2VuZGlmXG4jaWYgIWRlZmluZWQoaGlnaHApXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcbiNlbmRpZlxudmVjMiB1bnBhY2tfZmxvYXQoY29uc3QgZmxvYXQgcGFja2VkVmFsdWUpIHtpbnQgcGFja2VkSW50VmFsdWU9aW50KHBhY2tlZFZhbHVlKTtpbnQgdjA9cGFja2VkSW50VmFsdWUvMjU2O3JldHVybiB2ZWMyKHYwLHBhY2tlZEludFZhbHVlLXYwKjI1Nik7fXZlYzIgdW5wYWNrX29wYWNpdHkoY29uc3QgZmxvYXQgcGFja2VkT3BhY2l0eSkge2ludCBpbnRPcGFjaXR5PWludChwYWNrZWRPcGFjaXR5KS8yO3JldHVybiB2ZWMyKGZsb2F0KGludE9wYWNpdHkpLzEyNy4wLG1vZChwYWNrZWRPcGFjaXR5LDIuMCkpO312ZWM0IGRlY29kZV9jb2xvcihjb25zdCB2ZWMyIGVuY29kZWRDb2xvcikge3JldHVybiB2ZWM0KHVucGFja19mbG9hdChlbmNvZGVkQ29sb3JbMF0pLzI1NS4wLHVucGFja19mbG9hdChlbmNvZGVkQ29sb3JbMV0pLzI1NS4wXG4pO31mbG9hdCB1bnBhY2tfbWl4X3ZlYzIoY29uc3QgdmVjMiBwYWNrZWRWYWx1ZSxjb25zdCBmbG9hdCB0KSB7cmV0dXJuIG1peChwYWNrZWRWYWx1ZVswXSxwYWNrZWRWYWx1ZVsxXSx0KTt9dmVjNCB1bnBhY2tfbWl4X2NvbG9yKGNvbnN0IHZlYzQgcGFja2VkQ29sb3JzLGNvbnN0IGZsb2F0IHQpIHt2ZWM0IG1pbkNvbG9yPWRlY29kZV9jb2xvcih2ZWMyKHBhY2tlZENvbG9yc1swXSxwYWNrZWRDb2xvcnNbMV0pKTt2ZWM0IG1heENvbG9yPWRlY29kZV9jb2xvcih2ZWMyKHBhY2tlZENvbG9yc1syXSxwYWNrZWRDb2xvcnNbM10pKTtyZXR1cm4gbWl4KG1pbkNvbG9yLG1heENvbG9yLHQpO312ZWMyIGdldF9wYXR0ZXJuX3Bvcyhjb25zdCB2ZWMyIHBpeGVsX2Nvb3JkX3VwcGVyLGNvbnN0IHZlYzIgcGl4ZWxfY29vcmRfbG93ZXIsY29uc3QgdmVjMiBwYXR0ZXJuX3NpemUsY29uc3QgZmxvYXQgdGlsZV91bml0c190b19waXhlbHMsY29uc3QgdmVjMiBwb3MpIHt2ZWMyIG9mZnNldD1tb2QobW9kKG1vZChwaXhlbF9jb29yZF91cHBlcixwYXR0ZXJuX3NpemUpKjI1Ni4wLHBhdHRlcm5fc2l6ZSkqMjU2LjArcGl4ZWxfY29vcmRfbG93ZXIscGF0dGVybl9zaXplKTtyZXR1cm4gKHRpbGVfdW5pdHNfdG9fcGl4ZWxzKnBvcytvZmZzZXQpL3BhdHRlcm5fc2l6ZTt9IiksV2U9eXIoInVuaWZvcm0gdmVjNCB1X2NvbG9yO3VuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O3ZvaWQgbWFpbigpIHtnbF9GcmFnQ29sb3I9dV9jb2xvcip1X29wYWNpdHk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiYXR0cmlidXRlIHZlYzIgYV9wb3M7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3ZvaWQgbWFpbigpIHtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7fSIpLFhlPXlyKCJ1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2E7dW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9hO3VuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjt1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2I7dW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTt1bmlmb3JtIGZsb2F0IHVfbWl4O3VuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O3VuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dmFyeWluZyB2ZWMyIHZfcG9zX2E7dmFyeWluZyB2ZWMyIHZfcG9zX2I7dm9pZCBtYWluKCkge3ZlYzIgaW1hZ2Vjb29yZD1tb2Qodl9wb3NfYSwxLjApO3ZlYzIgcG9zPW1peCh1X3BhdHRlcm5fdGxfYS91X3RleHNpemUsdV9wYXR0ZXJuX2JyX2EvdV90ZXhzaXplLGltYWdlY29vcmQpO3ZlYzQgY29sb3IxPXRleHR1cmUyRCh1X2ltYWdlLHBvcyk7dmVjMiBpbWFnZWNvb3JkX2I9bW9kKHZfcG9zX2IsMS4wKTt2ZWMyIHBvczI9bWl4KHVfcGF0dGVybl90bF9iL3VfdGV4c2l6ZSx1X3BhdHRlcm5fYnJfYi91X3RleHNpemUsaW1hZ2Vjb29yZF9iKTt2ZWM0IGNvbG9yMj10ZXh0dXJlMkQodV9pbWFnZSxwb3MyKTtnbF9GcmFnQ29sb3I9bWl4KGNvbG9yMSxjb2xvcjIsdV9taXgpKnVfb3BhY2l0eTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2E7dW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2I7dW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7dW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7dW5pZm9ybSBmbG9hdCB1X3NjYWxlX2E7dW5pZm9ybSBmbG9hdCB1X3NjYWxlX2I7dW5pZm9ybSBmbG9hdCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzO2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO3ZhcnlpbmcgdmVjMiB2X3Bvc19hO3ZhcnlpbmcgdmVjMiB2X3Bvc19iO3ZvaWQgbWFpbigpIHtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7dl9wb3NfYT1nZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlcix1X3BpeGVsX2Nvb3JkX2xvd2VyLHVfc2NhbGVfYSp1X3BhdHRlcm5fc2l6ZV9hLHVfdGlsZV91bml0c190b19waXhlbHMsYV9wb3MpO3ZfcG9zX2I9Z2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsdV9waXhlbF9jb29yZF9sb3dlcix1X3NjYWxlX2IqdV9wYXR0ZXJuX3NpemVfYix1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLGFfcG9zKTt9IiksWmU9eXIoInZhcnlpbmcgdmVjMyB2X2RhdGE7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IHN0cm9rZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHN0cm9rZV93aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHN0cm9rZV9vcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHN0cm9rZV93aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxudmVjMiBleHRydWRlPXZfZGF0YS54eTtmbG9hdCBleHRydWRlX2xlbmd0aD1sZW5ndGgoZXh0cnVkZSk7bG93cCBmbG9hdCBhbnRpYWxpYXNibHVyPXZfZGF0YS56O2Zsb2F0IGFudGlhbGlhc2VkX2JsdXI9LW1heChibHVyLGFudGlhbGlhc2JsdXIpO2Zsb2F0IG9wYWNpdHlfdD1zbW9vdGhzdGVwKDAuMCxhbnRpYWxpYXNlZF9ibHVyLGV4dHJ1ZGVfbGVuZ3RoLTEuMCk7ZmxvYXQgY29sb3JfdD1zdHJva2Vfd2lkdGggPCAwLjAxID8gMC4wIDogc21vb3Roc3RlcChhbnRpYWxpYXNlZF9ibHVyLDAuMCxleHRydWRlX2xlbmd0aC1yYWRpdXMvKHJhZGl1cytzdHJva2Vfd2lkdGgpKTtnbF9GcmFnQ29sb3I9b3BhY2l0eV90Km1peChjb2xvcipvcGFjaXR5LHN0cm9rZV9jb2xvcipzdHJva2Vfb3BhY2l0eSxjb2xvcl90KTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSBib29sIHVfc2NhbGVfd2l0aF9tYXA7dW5pZm9ybSBib29sIHVfcGl0Y2hfd2l0aF9tYXA7dW5pZm9ybSB2ZWMyIHVfZXh0cnVkZV9zY2FsZTt1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSBoaWdocCBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7YXR0cmlidXRlIHZlYzIgYV9wb3M7dmFyeWluZyB2ZWMzIHZfZGF0YTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgc3Ryb2tlX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgc3Ryb2tlX29wYWNpdHlcbnZvaWQgbWFpbih2b2lkKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHN0cm9rZV93aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxudmVjMiBleHRydWRlPXZlYzIobW9kKGFfcG9zLDIuMCkqMi4wLTEuMCk7dmVjMiBjaXJjbGVfY2VudGVyPWZsb29yKGFfcG9zKjAuNSk7aWYgKHVfcGl0Y2hfd2l0aF9tYXApIHt2ZWMyIGNvcm5lcl9wb3NpdGlvbj1jaXJjbGVfY2VudGVyO2lmICh1X3NjYWxlX3dpdGhfbWFwKSB7Y29ybmVyX3Bvc2l0aW9uKz1leHRydWRlKihyYWRpdXMrc3Ryb2tlX3dpZHRoKSp1X2V4dHJ1ZGVfc2NhbGU7fSBlbHNlIHt2ZWM0IHByb2plY3RlZF9jZW50ZXI9dV9tYXRyaXgqdmVjNChjaXJjbGVfY2VudGVyLDAsMSk7Y29ybmVyX3Bvc2l0aW9uKz1leHRydWRlKihyYWRpdXMrc3Ryb2tlX3dpZHRoKSp1X2V4dHJ1ZGVfc2NhbGUqKHByb2plY3RlZF9jZW50ZXIudy91X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpO31nbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGNvcm5lcl9wb3NpdGlvbiwwLDEpO30gZWxzZSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChjaXJjbGVfY2VudGVyLDAsMSk7aWYgKHVfc2NhbGVfd2l0aF9tYXApIHtnbF9Qb3NpdGlvbi54eSs9ZXh0cnVkZSoocmFkaXVzK3N0cm9rZV93aWR0aCkqdV9leHRydWRlX3NjYWxlKnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTt9IGVsc2Uge2dsX1Bvc2l0aW9uLnh5Kz1leHRydWRlKihyYWRpdXMrc3Ryb2tlX3dpZHRoKSp1X2V4dHJ1ZGVfc2NhbGUqZ2xfUG9zaXRpb24udzt9fWxvd3AgZmxvYXQgYW50aWFsaWFzYmx1cj0xLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8vKHJhZGl1cytzdHJva2Vfd2lkdGgpO3ZfZGF0YT12ZWMzKGV4dHJ1ZGUueCxleHRydWRlLnksYW50aWFsaWFzYmx1cik7fSIpLEplPXlyKCJ2b2lkIG1haW4oKSB7Z2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTt9IiwiYXR0cmlidXRlIHZlYzIgYV9wb3M7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3ZvaWQgbWFpbigpIHtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7fSIpLEtlPXlyKCJ1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfaW50ZW5zaXR5O3ZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGU7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIGZsb2F0IHdlaWdodFxuI2RlZmluZSBHQVVTU19DT0VGIDAuMzk4OTQyMjgwNDAxNDMyN1xudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgZmxvYXQgd2VpZ2h0XG5mbG9hdCBkPS0wLjUqMy4wKjMuMCpkb3Qodl9leHRydWRlLHZfZXh0cnVkZSk7ZmxvYXQgdmFsPXdlaWdodCp1X2ludGVuc2l0eSpHQVVTU19DT0VGKmV4cChkKTtnbF9GcmFnQ29sb3I9dmVjNCh2YWwsMS4wLDEuMCwxLjApO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIGZsb2F0IHVfZXh0cnVkZV9zY2FsZTt1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTt1bmlmb3JtIGZsb2F0IHVfaW50ZW5zaXR5O2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO3ZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGU7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIGZsb2F0IHdlaWdodFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuY29uc3QgaGlnaHAgZmxvYXQgWkVSTz0xLjAvMjU1LjAvMTYuMDtcbiNkZWZpbmUgR0FVU1NfQ09FRiAwLjM5ODk0MjI4MDQwMTQzMjdcbnZvaWQgbWFpbih2b2lkKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCBmbG9hdCB3ZWlnaHRcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgcmFkaXVzXG52ZWMyIHVuc2NhbGVkX2V4dHJ1ZGU9dmVjMihtb2QoYV9wb3MsMi4wKSoyLjAtMS4wKTtmbG9hdCBTPXNxcnQoLTIuMCpsb2coWkVSTy93ZWlnaHQvdV9pbnRlbnNpdHkvR0FVU1NfQ09FRikpLzMuMDt2X2V4dHJ1ZGU9Uyp1bnNjYWxlZF9leHRydWRlO3ZlYzIgZXh0cnVkZT12X2V4dHJ1ZGUqcmFkaXVzKnVfZXh0cnVkZV9zY2FsZTt2ZWM0IHBvcz12ZWM0KGZsb29yKGFfcG9zKjAuNSkrZXh0cnVkZSwwLDEpO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnBvczt9IiksUWU9eXIoInVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dW5pZm9ybSBzYW1wbGVyMkQgdV9jb2xvcl9yYW1wO3VuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O3ZhcnlpbmcgdmVjMiB2X3Bvczt2b2lkIG1haW4oKSB7ZmxvYXQgdD10ZXh0dXJlMkQodV9pbWFnZSx2X3Bvcykucjt2ZWM0IGNvbG9yPXRleHR1cmUyRCh1X2NvbG9yX3JhbXAsdmVjMih0LDAuNSkpO2dsX0ZyYWdDb2xvcj1jb2xvcip1X29wYWNpdHk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgwLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X3dvcmxkO2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO3ZhcnlpbmcgdmVjMiB2X3Bvczt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3Bvcyp1X3dvcmxkLDAsMSk7dl9wb3MueD1hX3Bvcy54O3ZfcG9zLnk9MS4wLWFfcG9zLnk7fSIpLCRlPXlyKCJ2YXJ5aW5nIGZsb2F0IHZfcGxhY2VkO3ZhcnlpbmcgZmxvYXQgdl9ub3RVc2VkO3ZvaWQgbWFpbigpIHtmbG9hdCBhbHBoYT0wLjU7Z2xfRnJhZ0NvbG9yPXZlYzQoMS4wLDAuMCwwLjAsMS4wKSphbHBoYTtpZiAodl9wbGFjZWQgPiAwLjUpIHtnbF9GcmFnQ29sb3I9dmVjNCgwLjAsMC4wLDEuMCwwLjUpKmFscGhhO31pZiAodl9ub3RVc2VkID4gMC41KSB7Z2xfRnJhZ0NvbG9yKj0uMTt9fSIsImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO2F0dHJpYnV0ZSB2ZWMyIGFfYW5jaG9yX3BvczthdHRyaWJ1dGUgdmVjMiBhX2V4dHJ1ZGU7YXR0cmlidXRlIHZlYzIgYV9wbGFjZWQ7YXR0cmlidXRlIHZlYzIgYV9zaGlmdDt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfZXh0cnVkZV9zY2FsZTt1bmlmb3JtIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTt2YXJ5aW5nIGZsb2F0IHZfcGxhY2VkO3ZhcnlpbmcgZmxvYXQgdl9ub3RVc2VkO3ZvaWQgbWFpbigpIHt2ZWM0IHByb2plY3RlZFBvaW50PXVfbWF0cml4KnZlYzQoYV9hbmNob3JfcG9zLDAsMSk7aGlnaHAgZmxvYXQgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZT1wcm9qZWN0ZWRQb2ludC53O2hpZ2hwIGZsb2F0IGNvbGxpc2lvbl9wZXJzcGVjdGl2ZV9yYXRpbz1jbGFtcCgwLjUrMC41Kih1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UvY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSksMC4wLDQuMCk7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLjAsMS4wKTtnbF9Qb3NpdGlvbi54eSs9KGFfZXh0cnVkZSthX3NoaWZ0KSp1X2V4dHJ1ZGVfc2NhbGUqZ2xfUG9zaXRpb24udypjb2xsaXNpb25fcGVyc3BlY3RpdmVfcmF0aW87dl9wbGFjZWQ9YV9wbGFjZWQueDt2X25vdFVzZWQ9YV9wbGFjZWQueTt9IiksdHI9eXIoInZhcnlpbmcgZmxvYXQgdl9yYWRpdXM7dmFyeWluZyB2ZWMyIHZfZXh0cnVkZTt2YXJ5aW5nIGZsb2F0IHZfcGVyc3BlY3RpdmVfcmF0aW87dmFyeWluZyBmbG9hdCB2X2NvbGxpc2lvbjt2b2lkIG1haW4oKSB7ZmxvYXQgYWxwaGE9MC41Km1pbih2X3BlcnNwZWN0aXZlX3JhdGlvLDEuMCk7ZmxvYXQgc3Ryb2tlX3JhZGl1cz0wLjkqbWF4KHZfcGVyc3BlY3RpdmVfcmF0aW8sMS4wKTtmbG9hdCBkaXN0YW5jZV90b19jZW50ZXI9bGVuZ3RoKHZfZXh0cnVkZSk7ZmxvYXQgZGlzdGFuY2VfdG9fZWRnZT1hYnMoZGlzdGFuY2VfdG9fY2VudGVyLXZfcmFkaXVzKTtmbG9hdCBvcGFjaXR5X3Q9c21vb3Roc3RlcCgtc3Ryb2tlX3JhZGl1cywwLjAsLWRpc3RhbmNlX3RvX2VkZ2UpO3ZlYzQgY29sb3I9bWl4KHZlYzQoMC4wLDAuMCwxLjAsMC41KSx2ZWM0KDEuMCwwLjAsMC4wLDEuMCksdl9jb2xsaXNpb24pO2dsX0ZyYWdDb2xvcj1jb2xvciphbHBoYSpvcGFjaXR5X3Q7fSIsImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO2F0dHJpYnV0ZSBmbG9hdCBhX3JhZGl1czthdHRyaWJ1dGUgdmVjMiBhX2ZsYWdzO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIG1hdDQgdV9pbnZfbWF0cml4O3VuaWZvcm0gdmVjMiB1X3ZpZXdwb3J0X3NpemU7dW5pZm9ybSBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7dmFyeWluZyBmbG9hdCB2X3JhZGl1czt2YXJ5aW5nIHZlYzIgdl9leHRydWRlO3ZhcnlpbmcgZmxvYXQgdl9wZXJzcGVjdGl2ZV9yYXRpbzt2YXJ5aW5nIGZsb2F0IHZfY29sbGlzaW9uO3ZlYzMgdG9UaWxlUG9zaXRpb24odmVjMiBzY3JlZW5Qb3MpIHt2ZWM0IHJheVN0YXJ0PXVfaW52X21hdHJpeCp2ZWM0KHNjcmVlblBvcywtMS4wLDEuMCk7dmVjNCByYXlFbmQgID11X2ludl9tYXRyaXgqdmVjNChzY3JlZW5Qb3MsIDEuMCwxLjApO3JheVN0YXJ0Lnh5ei89cmF5U3RhcnQudztyYXlFbmQueHl6ICAvPXJheUVuZC53O2hpZ2hwIGZsb2F0IHQ9KDAuMC1yYXlTdGFydC56KS8ocmF5RW5kLnotcmF5U3RhcnQueik7cmV0dXJuIG1peChyYXlTdGFydC54eXoscmF5RW5kLnh5eix0KTt9dm9pZCBtYWluKCkge3ZlYzIgcXVhZENlbnRlclBvcz1hX3BvcztmbG9hdCByYWRpdXM9YV9yYWRpdXM7ZmxvYXQgY29sbGlzaW9uPWFfZmxhZ3MueDtmbG9hdCB2ZXJ0ZXhJZHg9YV9mbGFncy55O3ZlYzIgcXVhZFZlcnRleE9mZnNldD12ZWMyKG1peCgtMS4wLDEuMCxmbG9hdCh2ZXJ0ZXhJZHggPj0yLjApKSxtaXgoLTEuMCwxLjAsZmxvYXQodmVydGV4SWR4ID49MS4wICYmIHZlcnRleElkeCA8PTIuMCkpKTt2ZWMyIHF1YWRWZXJ0ZXhFeHRlbnQ9cXVhZFZlcnRleE9mZnNldCpyYWRpdXM7dmVjMyB0aWxlUG9zPXRvVGlsZVBvc2l0aW9uKHF1YWRDZW50ZXJQb3MpO3ZlYzQgY2xpcFBvcz11X21hdHJpeCp2ZWM0KHRpbGVQb3MsMS4wKTtoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlPWNsaXBQb3MudztoaWdocCBmbG9hdCBjb2xsaXNpb25fcGVyc3BlY3RpdmVfcmF0aW89Y2xhbXAoMC41KzAuNSoodV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlL2NhbWVyYV90b19hbmNob3JfZGlzdGFuY2UpLDAuMCw0LjApO2Zsb2F0IHBhZGRpbmdfZmFjdG9yPTEuMjt2X3JhZGl1cz1yYWRpdXM7dl9leHRydWRlPXF1YWRWZXJ0ZXhFeHRlbnQqcGFkZGluZ19mYWN0b3I7dl9wZXJzcGVjdGl2ZV9yYXRpbz1jb2xsaXNpb25fcGVyc3BlY3RpdmVfcmF0aW87dl9jb2xsaXNpb249Y29sbGlzaW9uO2dsX1Bvc2l0aW9uPXZlYzQoY2xpcFBvcy54eXovY2xpcFBvcy53LDEuMCkrdmVjNChxdWFkVmVydGV4RXh0ZW50KnBhZGRpbmdfZmFjdG9yL3Vfdmlld3BvcnRfc2l6ZSoyLjAsMC4wLDAuMCk7fSIpLGVyPXlyKCJ1bmlmb3JtIGhpZ2hwIHZlYzQgdV9jb2xvcjt1bmlmb3JtIHNhbXBsZXIyRCB1X292ZXJsYXk7dmFyeWluZyB2ZWMyIHZfdXY7dm9pZCBtYWluKCkge3ZlYzQgb3ZlcmxheV9jb2xvcj10ZXh0dXJlMkQodV9vdmVybGF5LHZfdXYpO2dsX0ZyYWdDb2xvcj1taXgodV9jb2xvcixvdmVybGF5X2NvbG9yLG92ZXJsYXlfY29sb3IuYSk7fSIsImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO3ZhcnlpbmcgdmVjMiB2X3V2O3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIGZsb2F0IHVfb3ZlcmxheV9zY2FsZTt2b2lkIG1haW4oKSB7dl91dj1hX3Bvcy84MTkyLjA7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3Bvcyp1X292ZXJsYXlfc2NhbGUsMCwxKTt9IikscnI9eXIoIiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuZ2xfRnJhZ0NvbG9yPWNvbG9yKm9wYWNpdHk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiYXR0cmlidXRlIHZlYzIgYV9wb3M7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5nbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7fSIpLG5yPXlyKCJ2YXJ5aW5nIHZlYzIgdl9wb3M7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5mbG9hdCBkaXN0PWxlbmd0aCh2X3Bvcy1nbF9GcmFnQ29vcmQueHkpO2Zsb2F0IGFscGhhPTEuMC1zbW9vdGhzdGVwKDAuMCwxLjAsZGlzdCk7Z2xfRnJhZ0NvbG9yPW91dGxpbmVfY29sb3IqKGFscGhhKm9wYWNpdHkpO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV93b3JsZDt2YXJ5aW5nIHZlYzIgdl9wb3M7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5nbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7dl9wb3M9KGdsX1Bvc2l0aW9uLnh5L2dsX1Bvc2l0aW9uLncrMS4wKS8yLjAqdV93b3JsZDt9IiksaXI9eXIoInVuaWZvcm0gdmVjMiB1X3RleHNpemU7dW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt1bmlmb3JtIGZsb2F0IHVfZmFkZTt2YXJ5aW5nIHZlYzIgdl9wb3NfYTt2YXJ5aW5nIHZlYzIgdl9wb3NfYjt2YXJ5aW5nIHZlYzIgdl9wb3M7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX3RvXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX3RvXG52ZWMyIHBhdHRlcm5fdGxfYT1wYXR0ZXJuX2Zyb20ueHk7dmVjMiBwYXR0ZXJuX2JyX2E9cGF0dGVybl9mcm9tLnp3O3ZlYzIgcGF0dGVybl90bF9iPXBhdHRlcm5fdG8ueHk7dmVjMiBwYXR0ZXJuX2JyX2I9cGF0dGVybl90by56dzt2ZWMyIGltYWdlY29vcmQ9bW9kKHZfcG9zX2EsMS4wKTt2ZWMyIHBvcz1taXgocGF0dGVybl90bF9hL3VfdGV4c2l6ZSxwYXR0ZXJuX2JyX2EvdV90ZXhzaXplLGltYWdlY29vcmQpO3ZlYzQgY29sb3IxPXRleHR1cmUyRCh1X2ltYWdlLHBvcyk7dmVjMiBpbWFnZWNvb3JkX2I9bW9kKHZfcG9zX2IsMS4wKTt2ZWMyIHBvczI9bWl4KHBhdHRlcm5fdGxfYi91X3RleHNpemUscGF0dGVybl9icl9iL3VfdGV4c2l6ZSxpbWFnZWNvb3JkX2IpO3ZlYzQgY29sb3IyPXRleHR1cmUyRCh1X2ltYWdlLHBvczIpO2Zsb2F0IGRpc3Q9bGVuZ3RoKHZfcG9zLWdsX0ZyYWdDb29yZC54eSk7ZmxvYXQgYWxwaGE9MS4wLXNtb290aHN0ZXAoMC4wLDEuMCxkaXN0KTtnbF9GcmFnQ29sb3I9bWl4KGNvbG9yMSxjb2xvcjIsdV9mYWRlKSphbHBoYSpvcGFjaXR5O1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV93b3JsZDt1bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF91cHBlcjt1bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF9sb3dlcjt1bmlmb3JtIHZlYzMgdV9zY2FsZTthdHRyaWJ1dGUgdmVjMiBhX3Bvczt2YXJ5aW5nIHZlYzIgdl9wb3NfYTt2YXJ5aW5nIHZlYzIgdl9wb3NfYjt2YXJ5aW5nIHZlYzIgdl9wb3M7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbnZlYzIgcGF0dGVybl90bF9hPXBhdHRlcm5fZnJvbS54eTt2ZWMyIHBhdHRlcm5fYnJfYT1wYXR0ZXJuX2Zyb20uenc7dmVjMiBwYXR0ZXJuX3RsX2I9cGF0dGVybl90by54eTt2ZWMyIHBhdHRlcm5fYnJfYj1wYXR0ZXJuX3RvLnp3O2Zsb2F0IHRpbGVSYXRpbz11X3NjYWxlLng7ZmxvYXQgZnJvbVNjYWxlPXVfc2NhbGUueTtmbG9hdCB0b1NjYWxlPXVfc2NhbGUuejtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7dmVjMiBkaXNwbGF5X3NpemVfYT0ocGF0dGVybl9icl9hLXBhdHRlcm5fdGxfYSkvcGl4ZWxfcmF0aW9fZnJvbTt2ZWMyIGRpc3BsYXlfc2l6ZV9iPShwYXR0ZXJuX2JyX2ItcGF0dGVybl90bF9iKS9waXhlbF9yYXRpb190bzt2X3Bvc19hPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsZnJvbVNjYWxlKmRpc3BsYXlfc2l6ZV9hLHRpbGVSYXRpbyxhX3Bvcyk7dl9wb3NfYj1nZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlcix1X3BpeGVsX2Nvb3JkX2xvd2VyLHRvU2NhbGUqZGlzcGxheV9zaXplX2IsdGlsZVJhdGlvLGFfcG9zKTt2X3Bvcz0oZ2xfUG9zaXRpb24ueHkvZ2xfUG9zaXRpb24udysxLjApLzIuMCp1X3dvcmxkO30iKSxhcj15cigidW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTt1bmlmb3JtIGZsb2F0IHVfZmFkZTt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3ZhcnlpbmcgdmVjMiB2X3Bvc19hO3ZhcnlpbmcgdmVjMiB2X3Bvc19iO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl90b1xudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl90b1xudmVjMiBwYXR0ZXJuX3RsX2E9cGF0dGVybl9mcm9tLnh5O3ZlYzIgcGF0dGVybl9icl9hPXBhdHRlcm5fZnJvbS56dzt2ZWMyIHBhdHRlcm5fdGxfYj1wYXR0ZXJuX3RvLnh5O3ZlYzIgcGF0dGVybl9icl9iPXBhdHRlcm5fdG8uenc7dmVjMiBpbWFnZWNvb3JkPW1vZCh2X3Bvc19hLDEuMCk7dmVjMiBwb3M9bWl4KHBhdHRlcm5fdGxfYS91X3RleHNpemUscGF0dGVybl9icl9hL3VfdGV4c2l6ZSxpbWFnZWNvb3JkKTt2ZWM0IGNvbG9yMT10ZXh0dXJlMkQodV9pbWFnZSxwb3MpO3ZlYzIgaW1hZ2Vjb29yZF9iPW1vZCh2X3Bvc19iLDEuMCk7dmVjMiBwb3MyPW1peChwYXR0ZXJuX3RsX2IvdV90ZXhzaXplLHBhdHRlcm5fYnJfYi91X3RleHNpemUsaW1hZ2Vjb29yZF9iKTt2ZWM0IGNvbG9yMj10ZXh0dXJlMkQodV9pbWFnZSxwb3MyKTtnbF9GcmFnQ29sb3I9bWl4KGNvbG9yMSxjb2xvcjIsdV9mYWRlKSpvcGFjaXR5O1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF91cHBlcjt1bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF9sb3dlcjt1bmlmb3JtIHZlYzMgdV9zY2FsZTthdHRyaWJ1dGUgdmVjMiBhX3Bvczt2YXJ5aW5nIHZlYzIgdl9wb3NfYTt2YXJ5aW5nIHZlYzIgdl9wb3NfYjtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xudmVjMiBwYXR0ZXJuX3RsX2E9cGF0dGVybl9mcm9tLnh5O3ZlYzIgcGF0dGVybl9icl9hPXBhdHRlcm5fZnJvbS56dzt2ZWMyIHBhdHRlcm5fdGxfYj1wYXR0ZXJuX3RvLnh5O3ZlYzIgcGF0dGVybl9icl9iPXBhdHRlcm5fdG8uenc7ZmxvYXQgdGlsZVpvb21SYXRpbz11X3NjYWxlLng7ZmxvYXQgZnJvbVNjYWxlPXVfc2NhbGUueTtmbG9hdCB0b1NjYWxlPXVfc2NhbGUuejt2ZWMyIGRpc3BsYXlfc2l6ZV9hPShwYXR0ZXJuX2JyX2EtcGF0dGVybl90bF9hKS9waXhlbF9yYXRpb19mcm9tO3ZlYzIgZGlzcGxheV9zaXplX2I9KHBhdHRlcm5fYnJfYi1wYXR0ZXJuX3RsX2IpL3BpeGVsX3JhdGlvX3RvO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTt2X3Bvc19hPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsZnJvbVNjYWxlKmRpc3BsYXlfc2l6ZV9hLHRpbGVab29tUmF0aW8sYV9wb3MpO3ZfcG9zX2I9Z2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsdV9waXhlbF9jb29yZF9sb3dlcix0b1NjYWxlKmRpc3BsYXlfc2l6ZV9iLHRpbGVab29tUmF0aW8sYV9wb3MpO30iKSxvcj15cigidmFyeWluZyB2ZWM0IHZfY29sb3I7dm9pZCBtYWluKCkge2dsX0ZyYWdDb2xvcj12X2NvbG9yO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzMgdV9saWdodGNvbG9yO3VuaWZvcm0gbG93cCB2ZWMzIHVfbGlnaHRwb3M7dW5pZm9ybSBsb3dwIGZsb2F0IHVfbGlnaHRpbnRlbnNpdHk7dW5pZm9ybSBmbG9hdCB1X3ZlcnRpY2FsX2dyYWRpZW50O3VuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7YXR0cmlidXRlIHZlYzIgYV9wb3M7YXR0cmlidXRlIHZlYzQgYV9ub3JtYWxfZWQ7dmFyeWluZyB2ZWM0IHZfY29sb3I7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIGZsb2F0IGJhc2VcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgZmxvYXQgaGVpZ2h0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIGZsb2F0IGJhc2VcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIGZsb2F0IGhlaWdodFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxudmVjMyBub3JtYWw9YV9ub3JtYWxfZWQueHl6O2Jhc2U9bWF4KDAuMCxiYXNlKTtoZWlnaHQ9bWF4KDAuMCxoZWlnaHQpO2Zsb2F0IHQ9bW9kKG5vcm1hbC54LDIuMCk7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3Bvcyx0ID4gMC4wID8gaGVpZ2h0IDogYmFzZSwxKTtmbG9hdCBjb2xvcnZhbHVlPWNvbG9yLnIqMC4yMTI2K2NvbG9yLmcqMC43MTUyK2NvbG9yLmIqMC4wNzIyO3ZfY29sb3I9dmVjNCgwLjAsMC4wLDAuMCwxLjApO3ZlYzQgYW1iaWVudGxpZ2h0PXZlYzQoMC4wMywwLjAzLDAuMDMsMS4wKTtjb2xvcis9YW1iaWVudGxpZ2h0O2Zsb2F0IGRpcmVjdGlvbmFsPWNsYW1wKGRvdChub3JtYWwvMTYzODQuMCx1X2xpZ2h0cG9zKSwwLjAsMS4wKTtkaXJlY3Rpb25hbD1taXgoKDEuMC11X2xpZ2h0aW50ZW5zaXR5KSxtYXgoKDEuMC1jb2xvcnZhbHVlK3VfbGlnaHRpbnRlbnNpdHkpLDEuMCksZGlyZWN0aW9uYWwpO2lmIChub3JtYWwueSAhPTAuMCkge2RpcmVjdGlvbmFsKj0oKDEuMC11X3ZlcnRpY2FsX2dyYWRpZW50KSsodV92ZXJ0aWNhbF9ncmFkaWVudCpjbGFtcCgodCtiYXNlKSpwb3coaGVpZ2h0LzE1MC4wLDAuNSksbWl4KDAuNywwLjk4LDEuMC11X2xpZ2h0aW50ZW5zaXR5KSwxLjApKSk7fXZfY29sb3Iucis9Y2xhbXAoY29sb3IucipkaXJlY3Rpb25hbCp1X2xpZ2h0Y29sb3IucixtaXgoMC4wLDAuMywxLjAtdV9saWdodGNvbG9yLnIpLDEuMCk7dl9jb2xvci5nKz1jbGFtcChjb2xvci5nKmRpcmVjdGlvbmFsKnVfbGlnaHRjb2xvci5nLG1peCgwLjAsMC4zLDEuMC11X2xpZ2h0Y29sb3IuZyksMS4wKTt2X2NvbG9yLmIrPWNsYW1wKGNvbG9yLmIqZGlyZWN0aW9uYWwqdV9saWdodGNvbG9yLmIsbWl4KDAuMCwwLjMsMS4wLXVfbGlnaHRjb2xvci5iKSwxLjApO3ZfY29sb3IqPXVfb3BhY2l0eTt9Iiksc3I9eXIoInVuaWZvcm0gdmVjMiB1X3RleHNpemU7dW5pZm9ybSBmbG9hdCB1X2ZhZGU7dW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt2YXJ5aW5nIHZlYzIgdl9wb3NfYTt2YXJ5aW5nIHZlYzIgdl9wb3NfYjt2YXJ5aW5nIHZlYzQgdl9saWdodGluZztcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGVpZ2h0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmFzZVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoZWlnaHRcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbnZlYzIgcGF0dGVybl90bF9hPXBhdHRlcm5fZnJvbS54eTt2ZWMyIHBhdHRlcm5fYnJfYT1wYXR0ZXJuX2Zyb20uenc7dmVjMiBwYXR0ZXJuX3RsX2I9cGF0dGVybl90by54eTt2ZWMyIHBhdHRlcm5fYnJfYj1wYXR0ZXJuX3RvLnp3O3ZlYzIgaW1hZ2Vjb29yZD1tb2Qodl9wb3NfYSwxLjApO3ZlYzIgcG9zPW1peChwYXR0ZXJuX3RsX2EvdV90ZXhzaXplLHBhdHRlcm5fYnJfYS91X3RleHNpemUsaW1hZ2Vjb29yZCk7dmVjNCBjb2xvcjE9dGV4dHVyZTJEKHVfaW1hZ2UscG9zKTt2ZWMyIGltYWdlY29vcmRfYj1tb2Qodl9wb3NfYiwxLjApO3ZlYzIgcG9zMj1taXgocGF0dGVybl90bF9iL3VfdGV4c2l6ZSxwYXR0ZXJuX2JyX2IvdV90ZXhzaXplLGltYWdlY29vcmRfYik7dmVjNCBjb2xvcjI9dGV4dHVyZTJEKHVfaW1hZ2UscG9zMik7dmVjNCBtaXhlZENvbG9yPW1peChjb2xvcjEsY29sb3IyLHVfZmFkZSk7Z2xfRnJhZ0NvbG9yPW1peGVkQ29sb3Iqdl9saWdodGluZztcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7dW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7dW5pZm9ybSBmbG9hdCB1X2hlaWdodF9mYWN0b3I7dW5pZm9ybSB2ZWMzIHVfc2NhbGU7dW5pZm9ybSBmbG9hdCB1X3ZlcnRpY2FsX2dyYWRpZW50O3VuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7dW5pZm9ybSB2ZWMzIHVfbGlnaHRjb2xvcjt1bmlmb3JtIGxvd3AgdmVjMyB1X2xpZ2h0cG9zO3VuaWZvcm0gbG93cCBmbG9hdCB1X2xpZ2h0aW50ZW5zaXR5O2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO2F0dHJpYnV0ZSB2ZWM0IGFfbm9ybWFsX2VkO3ZhcnlpbmcgdmVjMiB2X3Bvc19hO3ZhcnlpbmcgdmVjMiB2X3Bvc19iO3ZhcnlpbmcgdmVjNCB2X2xpZ2h0aW5nO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJhc2VcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoZWlnaHRcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhlaWdodFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xudmVjMiBwYXR0ZXJuX3RsX2E9cGF0dGVybl9mcm9tLnh5O3ZlYzIgcGF0dGVybl9icl9hPXBhdHRlcm5fZnJvbS56dzt2ZWMyIHBhdHRlcm5fdGxfYj1wYXR0ZXJuX3RvLnh5O3ZlYzIgcGF0dGVybl9icl9iPXBhdHRlcm5fdG8uenc7ZmxvYXQgdGlsZVJhdGlvPXVfc2NhbGUueDtmbG9hdCBmcm9tU2NhbGU9dV9zY2FsZS55O2Zsb2F0IHRvU2NhbGU9dV9zY2FsZS56O3ZlYzMgbm9ybWFsPWFfbm9ybWFsX2VkLnh5ejtmbG9hdCBlZGdlZGlzdGFuY2U9YV9ub3JtYWxfZWQudzt2ZWMyIGRpc3BsYXlfc2l6ZV9hPShwYXR0ZXJuX2JyX2EtcGF0dGVybl90bF9hKS9waXhlbF9yYXRpb19mcm9tO3ZlYzIgZGlzcGxheV9zaXplX2I9KHBhdHRlcm5fYnJfYi1wYXR0ZXJuX3RsX2IpL3BpeGVsX3JhdGlvX3RvO2Jhc2U9bWF4KDAuMCxiYXNlKTtoZWlnaHQ9bWF4KDAuMCxoZWlnaHQpO2Zsb2F0IHQ9bW9kKG5vcm1hbC54LDIuMCk7ZmxvYXQgej10ID4gMC4wID8gaGVpZ2h0IDogYmFzZTtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLHosMSk7dmVjMiBwb3M9bm9ybWFsLng9PTEuMCAmJiBub3JtYWwueT09MC4wICYmIG5vcm1hbC56PT0xNjM4NC4wXG4/IGFfcG9zXG46IHZlYzIoZWRnZWRpc3RhbmNlLHoqdV9oZWlnaHRfZmFjdG9yKTt2X3Bvc19hPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsZnJvbVNjYWxlKmRpc3BsYXlfc2l6ZV9hLHRpbGVSYXRpbyxwb3MpO3ZfcG9zX2I9Z2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsdV9waXhlbF9jb29yZF9sb3dlcix0b1NjYWxlKmRpc3BsYXlfc2l6ZV9iLHRpbGVSYXRpbyxwb3MpO3ZfbGlnaHRpbmc9dmVjNCgwLjAsMC4wLDAuMCwxLjApO2Zsb2F0IGRpcmVjdGlvbmFsPWNsYW1wKGRvdChub3JtYWwvMTYzODMuMCx1X2xpZ2h0cG9zKSwwLjAsMS4wKTtkaXJlY3Rpb25hbD1taXgoKDEuMC11X2xpZ2h0aW50ZW5zaXR5KSxtYXgoKDAuNSt1X2xpZ2h0aW50ZW5zaXR5KSwxLjApLGRpcmVjdGlvbmFsKTtpZiAobm9ybWFsLnkgIT0wLjApIHtkaXJlY3Rpb25hbCo9KCgxLjAtdV92ZXJ0aWNhbF9ncmFkaWVudCkrKHVfdmVydGljYWxfZ3JhZGllbnQqY2xhbXAoKHQrYmFzZSkqcG93KGhlaWdodC8xNTAuMCwwLjUpLG1peCgwLjcsMC45OCwxLjAtdV9saWdodGludGVuc2l0eSksMS4wKSkpO312X2xpZ2h0aW5nLnJnYis9Y2xhbXAoZGlyZWN0aW9uYWwqdV9saWdodGNvbG9yLG1peCh2ZWMzKDAuMCksdmVjMygwLjMpLDEuMC11X2xpZ2h0Y29sb3IpLHZlYzMoMS4wKSk7dl9saWdodGluZyo9dV9vcGFjaXR5O30iKSxscj15cigiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZW5kaWZcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dmFyeWluZyB2ZWMyIHZfcG9zO3VuaWZvcm0gdmVjMiB1X2RpbWVuc2lvbjt1bmlmb3JtIGZsb2F0IHVfem9vbTt1bmlmb3JtIGZsb2F0IHVfbWF4em9vbTt1bmlmb3JtIHZlYzQgdV91bnBhY2s7ZmxvYXQgZ2V0RWxldmF0aW9uKHZlYzIgY29vcmQsZmxvYXQgYmlhcykge3ZlYzQgZGF0YT10ZXh0dXJlMkQodV9pbWFnZSxjb29yZCkqMjU1LjA7ZGF0YS5hPS0xLjA7cmV0dXJuIGRvdChkYXRhLHVfdW5wYWNrKS80LjA7fXZvaWQgbWFpbigpIHt2ZWMyIGVwc2lsb249MS4wL3VfZGltZW5zaW9uO2Zsb2F0IGE9Z2V0RWxldmF0aW9uKHZfcG9zK3ZlYzIoLWVwc2lsb24ueCwtZXBzaWxvbi55KSwwLjApO2Zsb2F0IGI9Z2V0RWxldmF0aW9uKHZfcG9zK3ZlYzIoMCwtZXBzaWxvbi55KSwwLjApO2Zsb2F0IGM9Z2V0RWxldmF0aW9uKHZfcG9zK3ZlYzIoZXBzaWxvbi54LC1lcHNpbG9uLnkpLDAuMCk7ZmxvYXQgZD1nZXRFbGV2YXRpb24odl9wb3MrdmVjMigtZXBzaWxvbi54LDApLDAuMCk7ZmxvYXQgZT1nZXRFbGV2YXRpb24odl9wb3MsMC4wKTtmbG9hdCBmPWdldEVsZXZhdGlvbih2X3Bvcyt2ZWMyKGVwc2lsb24ueCwwKSwwLjApO2Zsb2F0IGc9Z2V0RWxldmF0aW9uKHZfcG9zK3ZlYzIoLWVwc2lsb24ueCxlcHNpbG9uLnkpLDAuMCk7ZmxvYXQgaD1nZXRFbGV2YXRpb24odl9wb3MrdmVjMigwLGVwc2lsb24ueSksMC4wKTtmbG9hdCBpPWdldEVsZXZhdGlvbih2X3Bvcyt2ZWMyKGVwc2lsb24ueCxlcHNpbG9uLnkpLDAuMCk7ZmxvYXQgZXhhZ2dlcmF0aW9uPXVfem9vbSA8IDIuMCA/IDAuNCA6IHVfem9vbSA8IDQuNSA/IDAuMzUgOiAwLjM7dmVjMiBkZXJpdj12ZWMyKChjK2YrZitpKS0oYStkK2QrZyksKGcraCtoK2kpLShhK2IrYitjKSkvIHBvdygyLjAsKHVfem9vbS11X21heHpvb20pKmV4YWdnZXJhdGlvbisxOS4yNTYyLXVfem9vbSk7Z2xfRnJhZ0NvbG9yPWNsYW1wKHZlYzQoZGVyaXYueC8yLjArMC41LGRlcml2LnkvMi4wKzAuNSwxLjAsMS4wKSwwLjAsMS4wKTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfZGltZW5zaW9uO2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO2F0dHJpYnV0ZSB2ZWMyIGFfdGV4dHVyZV9wb3M7dmFyeWluZyB2ZWMyIHZfcG9zO3ZvaWQgbWFpbigpIHtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7aGlnaHAgdmVjMiBlcHNpbG9uPTEuMC91X2RpbWVuc2lvbjtmbG9hdCBzY2FsZT0odV9kaW1lbnNpb24ueC0yLjApL3VfZGltZW5zaW9uLng7dl9wb3M9KGFfdGV4dHVyZV9wb3MvODE5Mi4wKSpzY2FsZStlcHNpbG9uO30iKSxjcj15cigidW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt2YXJ5aW5nIHZlYzIgdl9wb3M7dW5pZm9ybSB2ZWMyIHVfbGF0cmFuZ2U7dW5pZm9ybSB2ZWMyIHVfbGlnaHQ7dW5pZm9ybSB2ZWM0IHVfc2hhZG93O3VuaWZvcm0gdmVjNCB1X2hpZ2hsaWdodDt1bmlmb3JtIHZlYzQgdV9hY2NlbnQ7XG4jZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzXG52b2lkIG1haW4oKSB7dmVjNCBwaXhlbD10ZXh0dXJlMkQodV9pbWFnZSx2X3Bvcyk7dmVjMiBkZXJpdj0oKHBpeGVsLnJnKjIuMCktMS4wKTtmbG9hdCBzY2FsZUZhY3Rvcj1jb3MocmFkaWFucygodV9sYXRyYW5nZVswXS11X2xhdHJhbmdlWzFdKSooMS4wLXZfcG9zLnkpK3VfbGF0cmFuZ2VbMV0pKTtmbG9hdCBzbG9wZT1hdGFuKDEuMjUqbGVuZ3RoKGRlcml2KS9zY2FsZUZhY3Rvcik7ZmxvYXQgYXNwZWN0PWRlcml2LnggIT0wLjAgPyBhdGFuKGRlcml2LnksLWRlcml2LngpIDogUEkvMi4wKihkZXJpdi55ID4gMC4wID8gMS4wIDotMS4wKTtmbG9hdCBpbnRlbnNpdHk9dV9saWdodC54O2Zsb2F0IGF6aW11dGg9dV9saWdodC55K1BJO2Zsb2F0IGJhc2U9MS44NzUtaW50ZW5zaXR5KjEuNzU7ZmxvYXQgbWF4VmFsdWU9MC41KlBJO2Zsb2F0IHNjYWxlZFNsb3BlPWludGVuc2l0eSAhPTAuNSA/ICgocG93KGJhc2Usc2xvcGUpLTEuMCkvKHBvdyhiYXNlLG1heFZhbHVlKS0xLjApKSptYXhWYWx1ZSA6IHNsb3BlO2Zsb2F0IGFjY2VudD1jb3Moc2NhbGVkU2xvcGUpO3ZlYzQgYWNjZW50X2NvbG9yPSgxLjAtYWNjZW50KSp1X2FjY2VudCpjbGFtcChpbnRlbnNpdHkqMi4wLDAuMCwxLjApO2Zsb2F0IHNoYWRlPWFicyhtb2QoKGFzcGVjdCthemltdXRoKS9QSSswLjUsMi4wKS0xLjApO3ZlYzQgc2hhZGVfY29sb3I9bWl4KHVfc2hhZG93LHVfaGlnaGxpZ2h0LHNoYWRlKSpzaW4oc2NhbGVkU2xvcGUpKmNsYW1wKGludGVuc2l0eSoyLjAsMC4wLDEuMCk7Z2xfRnJhZ0NvbG9yPWFjY2VudF9jb2xvciooMS4wLXNoYWRlX2NvbG9yLmEpK3NoYWRlX2NvbG9yO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDthdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO3ZhcnlpbmcgdmVjMiB2X3Bvczt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO3ZfcG9zPWFfdGV4dHVyZV9wb3MvODE5Mi4wO30iKSx1cj15cigidW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3ZhcnlpbmcgdmVjMiB2X3dpZHRoMjt2YXJ5aW5nIHZlYzIgdl9ub3JtYWw7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5mbG9hdCBkaXN0PWxlbmd0aCh2X25vcm1hbCkqdl93aWR0aDIucztmbG9hdCBibHVyMj0oYmx1cisxLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8pKnZfZ2FtbWFfc2NhbGU7ZmxvYXQgYWxwaGE9Y2xhbXAobWluKGRpc3QtKHZfd2lkdGgyLnQtYmx1cjIpLHZfd2lkdGgyLnMtZGlzdCkvYmx1cjIsMC4wLDEuMCk7Z2xfRnJhZ0NvbG9yPWNvbG9yKihhbHBoYSpvcGFjaXR5KTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zX25vcm1hbDthdHRyaWJ1dGUgdmVjNCBhX2RhdGE7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X3JhdGlvO3VuaWZvcm0gdmVjMiB1X3VuaXRzX3RvX3BpeGVsczt1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dmFyeWluZyB2ZWMyIHZfbm9ybWFsO3ZhcnlpbmcgdmVjMiB2X3dpZHRoMjt2YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7dmFyeWluZyBoaWdocCBmbG9hdCB2X2xpbmVzb2ZhcjtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvZmZzZXRcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCB3aWR0aFxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG5mbG9hdCBBTlRJQUxJQVNJTkc9MS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvLzIuMDt2ZWMyIGFfZXh0cnVkZT1hX2RhdGEueHktMTI4LjA7ZmxvYXQgYV9kaXJlY3Rpb249bW9kKGFfZGF0YS56LDQuMCktMS4wO3ZfbGluZXNvZmFyPShmbG9vcihhX2RhdGEuei80LjApK2FfZGF0YS53KjY0LjApKjIuMDt2ZWMyIHBvcz1mbG9vcihhX3Bvc19ub3JtYWwqMC41KTttZWRpdW1wIHZlYzIgbm9ybWFsPWFfcG9zX25vcm1hbC0yLjAqcG9zO25vcm1hbC55PW5vcm1hbC55KjIuMC0xLjA7dl9ub3JtYWw9bm9ybWFsO2dhcHdpZHRoPWdhcHdpZHRoLzIuMDtmbG9hdCBoYWxmd2lkdGg9d2lkdGgvMi4wO29mZnNldD0tMS4wKm9mZnNldDtmbG9hdCBpbnNldD1nYXB3aWR0aCsoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO2Zsb2F0IG91dHNldD1nYXB3aWR0aCtoYWxmd2lkdGgqKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSsoaGFsZndpZHRoPT0wLjAgPyAwLjAgOiBBTlRJQUxJQVNJTkcpO21lZGl1bXAgdmVjMiBkaXN0PW91dHNldCphX2V4dHJ1ZGUqc2NhbGU7bWVkaXVtcCBmbG9hdCB1PTAuNSphX2RpcmVjdGlvbjttZWRpdW1wIGZsb2F0IHQ9MS4wLWFicyh1KTttZWRpdW1wIHZlYzIgb2Zmc2V0Mj1vZmZzZXQqYV9leHRydWRlKnNjYWxlKm5vcm1hbC55Km1hdDIodCwtdSx1LHQpO3ZlYzQgcHJvamVjdGVkX2V4dHJ1ZGU9dV9tYXRyaXgqdmVjNChkaXN0L3VfcmF0aW8sMC4wLDAuMCk7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChwb3Mrb2Zmc2V0Mi91X3JhdGlvLDAuMCwxLjApK3Byb2plY3RlZF9leHRydWRlO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmU9bGVuZ3RoKGRpc3QpO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU9bGVuZ3RoKHByb2plY3RlZF9leHRydWRlLnh5L2dsX1Bvc2l0aW9uLncqdV91bml0c190b19waXhlbHMpO3ZfZ2FtbWFfc2NhbGU9ZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZS9leHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlO3Zfd2lkdGgyPXZlYzIob3V0c2V0LGluc2V0KTt9IiksZnI9eXIoInVuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3ZhcnlpbmcgdmVjMiB2X3dpZHRoMjt2YXJ5aW5nIHZlYzIgdl9ub3JtYWw7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO3ZhcnlpbmcgaGlnaHAgZmxvYXQgdl9saW5lcHJvZ3Jlc3M7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5mbG9hdCBkaXN0PWxlbmd0aCh2X25vcm1hbCkqdl93aWR0aDIucztmbG9hdCBibHVyMj0oYmx1cisxLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8pKnZfZ2FtbWFfc2NhbGU7ZmxvYXQgYWxwaGE9Y2xhbXAobWluKGRpc3QtKHZfd2lkdGgyLnQtYmx1cjIpLHZfd2lkdGgyLnMtZGlzdCkvYmx1cjIsMC4wLDEuMCk7dmVjNCBjb2xvcj10ZXh0dXJlMkQodV9pbWFnZSx2ZWMyKHZfbGluZXByb2dyZXNzLDAuNSkpO2dsX0ZyYWdDb2xvcj1jb2xvciooYWxwaGEqb3BhY2l0eSk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiXG4jZGVmaW5lIE1BWF9MSU5FX0RJU1RBTkNFIDMyNzY3LjBcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zX25vcm1hbDthdHRyaWJ1dGUgdmVjNCBhX2RhdGE7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X3JhdGlvO3VuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt1bmlmb3JtIHZlYzIgdV91bml0c190b19waXhlbHM7dmFyeWluZyB2ZWMyIHZfbm9ybWFsO3ZhcnlpbmcgdmVjMiB2X3dpZHRoMjt2YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7dmFyeWluZyBoaWdocCBmbG9hdCB2X2xpbmVwcm9ncmVzcztcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuZmxvYXQgQU5USUFMSUFTSU5HPTEuMC91X2RldmljZV9waXhlbF9yYXRpby8yLjA7dmVjMiBhX2V4dHJ1ZGU9YV9kYXRhLnh5LTEyOC4wO2Zsb2F0IGFfZGlyZWN0aW9uPW1vZChhX2RhdGEueiw0LjApLTEuMDt2X2xpbmVwcm9ncmVzcz0oZmxvb3IoYV9kYXRhLnovNC4wKSthX2RhdGEudyo2NC4wKSoyLjAvTUFYX0xJTkVfRElTVEFOQ0U7dmVjMiBwb3M9Zmxvb3IoYV9wb3Nfbm9ybWFsKjAuNSk7bWVkaXVtcCB2ZWMyIG5vcm1hbD1hX3Bvc19ub3JtYWwtMi4wKnBvcztub3JtYWwueT1ub3JtYWwueSoyLjAtMS4wO3Zfbm9ybWFsPW5vcm1hbDtnYXB3aWR0aD1nYXB3aWR0aC8yLjA7ZmxvYXQgaGFsZndpZHRoPXdpZHRoLzIuMDtvZmZzZXQ9LTEuMCpvZmZzZXQ7ZmxvYXQgaW5zZXQ9Z2Fwd2lkdGgrKGdhcHdpZHRoID4gMC4wID8gQU5USUFMSUFTSU5HIDogMC4wKTtmbG9hdCBvdXRzZXQ9Z2Fwd2lkdGgraGFsZndpZHRoKihnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkrKGhhbGZ3aWR0aD09MC4wID8gMC4wIDogQU5USUFMSUFTSU5HKTttZWRpdW1wIHZlYzIgZGlzdD1vdXRzZXQqYV9leHRydWRlKnNjYWxlO21lZGl1bXAgZmxvYXQgdT0wLjUqYV9kaXJlY3Rpb247bWVkaXVtcCBmbG9hdCB0PTEuMC1hYnModSk7bWVkaXVtcCB2ZWMyIG9mZnNldDI9b2Zmc2V0KmFfZXh0cnVkZSpzY2FsZSpub3JtYWwueSptYXQyKHQsLXUsdSx0KTt2ZWM0IHByb2plY3RlZF9leHRydWRlPXVfbWF0cml4KnZlYzQoZGlzdC91X3JhdGlvLDAuMCwwLjApO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQocG9zK29mZnNldDIvdV9yYXRpbywwLjAsMS4wKStwcm9qZWN0ZWRfZXh0cnVkZTtmbG9hdCBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlPWxlbmd0aChkaXN0KTtmbG9hdCBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlPWxlbmd0aChwcm9qZWN0ZWRfZXh0cnVkZS54eS9nbF9Qb3NpdGlvbi53KnVfdW5pdHNfdG9fcGl4ZWxzKTt2X2dhbW1hX3NjYWxlPWV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUvZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZTt2X3dpZHRoMj12ZWMyKG91dHNldCxpbnNldCk7fSIpLGhyPXlyKCJ1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTt1bmlmb3JtIGZsb2F0IHVfZmFkZTt1bmlmb3JtIG1lZGl1bXAgdmVjMyB1X3NjYWxlO3VuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dmFyeWluZyB2ZWMyIHZfbm9ybWFsO3ZhcnlpbmcgdmVjMiB2X3dpZHRoMjt2YXJ5aW5nIGZsb2F0IHZfbGluZXNvZmFyO3ZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTt2YXJ5aW5nIGZsb2F0IHZfd2lkdGg7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZlYzIgcGF0dGVybl90bF9hPXBhdHRlcm5fZnJvbS54eTt2ZWMyIHBhdHRlcm5fYnJfYT1wYXR0ZXJuX2Zyb20uenc7dmVjMiBwYXR0ZXJuX3RsX2I9cGF0dGVybl90by54eTt2ZWMyIHBhdHRlcm5fYnJfYj1wYXR0ZXJuX3RvLnp3O2Zsb2F0IHRpbGVab29tUmF0aW89dV9zY2FsZS54O2Zsb2F0IGZyb21TY2FsZT11X3NjYWxlLnk7ZmxvYXQgdG9TY2FsZT11X3NjYWxlLno7dmVjMiBkaXNwbGF5X3NpemVfYT0ocGF0dGVybl9icl9hLXBhdHRlcm5fdGxfYSkvcGl4ZWxfcmF0aW9fZnJvbTt2ZWMyIGRpc3BsYXlfc2l6ZV9iPShwYXR0ZXJuX2JyX2ItcGF0dGVybl90bF9iKS9waXhlbF9yYXRpb190bzt2ZWMyIHBhdHRlcm5fc2l6ZV9hPXZlYzIoZGlzcGxheV9zaXplX2EueCpmcm9tU2NhbGUvdGlsZVpvb21SYXRpbyxkaXNwbGF5X3NpemVfYS55KTt2ZWMyIHBhdHRlcm5fc2l6ZV9iPXZlYzIoZGlzcGxheV9zaXplX2IueCp0b1NjYWxlL3RpbGVab29tUmF0aW8sZGlzcGxheV9zaXplX2IueSk7ZmxvYXQgYXNwZWN0X2E9ZGlzcGxheV9zaXplX2EueS92X3dpZHRoO2Zsb2F0IGFzcGVjdF9iPWRpc3BsYXlfc2l6ZV9iLnkvdl93aWR0aDtmbG9hdCBkaXN0PWxlbmd0aCh2X25vcm1hbCkqdl93aWR0aDIucztmbG9hdCBibHVyMj0oYmx1cisxLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8pKnZfZ2FtbWFfc2NhbGU7ZmxvYXQgYWxwaGE9Y2xhbXAobWluKGRpc3QtKHZfd2lkdGgyLnQtYmx1cjIpLHZfd2lkdGgyLnMtZGlzdCkvYmx1cjIsMC4wLDEuMCk7ZmxvYXQgeF9hPW1vZCh2X2xpbmVzb2Zhci9wYXR0ZXJuX3NpemVfYS54KmFzcGVjdF9hLDEuMCk7ZmxvYXQgeF9iPW1vZCh2X2xpbmVzb2Zhci9wYXR0ZXJuX3NpemVfYi54KmFzcGVjdF9iLDEuMCk7ZmxvYXQgeT0wLjUqdl9ub3JtYWwueSswLjU7dmVjMiB0ZXhlbF9zaXplPTEuMC91X3RleHNpemU7dmVjMiBwb3NfYT1taXgocGF0dGVybl90bF9hKnRleGVsX3NpemUtdGV4ZWxfc2l6ZSxwYXR0ZXJuX2JyX2EqdGV4ZWxfc2l6ZSt0ZXhlbF9zaXplLHZlYzIoeF9hLHkpKTt2ZWMyIHBvc19iPW1peChwYXR0ZXJuX3RsX2IqdGV4ZWxfc2l6ZS10ZXhlbF9zaXplLHBhdHRlcm5fYnJfYip0ZXhlbF9zaXplK3RleGVsX3NpemUsdmVjMih4X2IseSkpO3ZlYzQgY29sb3I9bWl4KHRleHR1cmUyRCh1X2ltYWdlLHBvc19hKSx0ZXh0dXJlMkQodV9pbWFnZSxwb3NfYiksdV9mYWRlKTtnbF9GcmFnQ29sb3I9Y29sb3IqYWxwaGEqb3BhY2l0eTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcbiNkZWZpbmUgTElORV9ESVNUQU5DRV9TQ0FMRSAyLjBcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zX25vcm1hbDthdHRyaWJ1dGUgdmVjNCBhX2RhdGE7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X3VuaXRzX3RvX3BpeGVsczt1bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbzt1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dmFyeWluZyB2ZWMyIHZfbm9ybWFsO3ZhcnlpbmcgdmVjMiB2X3dpZHRoMjt2YXJ5aW5nIGZsb2F0IHZfbGluZXNvZmFyO3ZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTt2YXJ5aW5nIGZsb2F0IHZfd2lkdGg7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvZmZzZXRcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvZmZzZXRcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xuZmxvYXQgQU5USUFMSUFTSU5HPTEuMC91X2RldmljZV9waXhlbF9yYXRpby8yLjA7dmVjMiBhX2V4dHJ1ZGU9YV9kYXRhLnh5LTEyOC4wO2Zsb2F0IGFfZGlyZWN0aW9uPW1vZChhX2RhdGEueiw0LjApLTEuMDtmbG9hdCBhX2xpbmVzb2Zhcj0oZmxvb3IoYV9kYXRhLnovNC4wKSthX2RhdGEudyo2NC4wKSpMSU5FX0RJU1RBTkNFX1NDQUxFO3ZlYzIgcG9zPWZsb29yKGFfcG9zX25vcm1hbCowLjUpO21lZGl1bXAgdmVjMiBub3JtYWw9YV9wb3Nfbm9ybWFsLTIuMCpwb3M7bm9ybWFsLnk9bm9ybWFsLnkqMi4wLTEuMDt2X25vcm1hbD1ub3JtYWw7Z2Fwd2lkdGg9Z2Fwd2lkdGgvMi4wO2Zsb2F0IGhhbGZ3aWR0aD13aWR0aC8yLjA7b2Zmc2V0PS0xLjAqb2Zmc2V0O2Zsb2F0IGluc2V0PWdhcHdpZHRoKyhnYXB3aWR0aCA+IDAuMCA/IEFOVElBTElBU0lORyA6IDAuMCk7ZmxvYXQgb3V0c2V0PWdhcHdpZHRoK2hhbGZ3aWR0aCooZ2Fwd2lkdGggPiAwLjAgPyAyLjAgOiAxLjApKyhoYWxmd2lkdGg9PTAuMCA/IDAuMCA6IEFOVElBTElBU0lORyk7bWVkaXVtcCB2ZWMyIGRpc3Q9b3V0c2V0KmFfZXh0cnVkZSpzY2FsZTttZWRpdW1wIGZsb2F0IHU9MC41KmFfZGlyZWN0aW9uO21lZGl1bXAgZmxvYXQgdD0xLjAtYWJzKHUpO21lZGl1bXAgdmVjMiBvZmZzZXQyPW9mZnNldCphX2V4dHJ1ZGUqc2NhbGUqbm9ybWFsLnkqbWF0Mih0LC11LHUsdCk7dmVjNCBwcm9qZWN0ZWRfZXh0cnVkZT11X21hdHJpeCp2ZWM0KGRpc3QvdV9yYXRpbywwLjAsMC4wKTtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KHBvcytvZmZzZXQyL3VfcmF0aW8sMC4wLDEuMCkrcHJvamVjdGVkX2V4dHJ1ZGU7ZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZT1sZW5ndGgoZGlzdCk7ZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZT1sZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkvZ2xfUG9zaXRpb24udyp1X3VuaXRzX3RvX3BpeGVscyk7dl9nYW1tYV9zY2FsZT1leHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlL2V4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU7dl9saW5lc29mYXI9YV9saW5lc29mYXI7dl93aWR0aDI9dmVjMihvdXRzZXQsaW5zZXQpO3Zfd2lkdGg9Zmxvb3J3aWR0aDt9IikscHI9eXIoInVuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3VuaWZvcm0gZmxvYXQgdV9zZGZnYW1tYTt1bmlmb3JtIGZsb2F0IHVfbWl4O3ZhcnlpbmcgdmVjMiB2X25vcm1hbDt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyB2ZWMyIHZfdGV4X2E7dmFyeWluZyB2ZWMyIHZfdGV4X2I7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcbmZsb2F0IGRpc3Q9bGVuZ3RoKHZfbm9ybWFsKSp2X3dpZHRoMi5zO2Zsb2F0IGJsdXIyPShibHVyKzEuMC91X2RldmljZV9waXhlbF9yYXRpbykqdl9nYW1tYV9zY2FsZTtmbG9hdCBhbHBoYT1jbGFtcChtaW4oZGlzdC0odl93aWR0aDIudC1ibHVyMiksdl93aWR0aDIucy1kaXN0KS9ibHVyMiwwLjAsMS4wKTtmbG9hdCBzZGZkaXN0X2E9dGV4dHVyZTJEKHVfaW1hZ2Usdl90ZXhfYSkuYTtmbG9hdCBzZGZkaXN0X2I9dGV4dHVyZTJEKHVfaW1hZ2Usdl90ZXhfYikuYTtmbG9hdCBzZGZkaXN0PW1peChzZGZkaXN0X2Esc2RmZGlzdF9iLHVfbWl4KTthbHBoYSo9c21vb3Roc3RlcCgwLjUtdV9zZGZnYW1tYS9mbG9vcndpZHRoLDAuNSt1X3NkZmdhbW1hL2Zsb29yd2lkdGgsc2RmZGlzdCk7Z2xfRnJhZ0NvbG9yPWNvbG9yKihhbHBoYSpvcGFjaXR5KTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcbiNkZWZpbmUgTElORV9ESVNUQU5DRV9TQ0FMRSAyLjBcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zX25vcm1hbDthdHRyaWJ1dGUgdmVjNCBhX2RhdGE7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X3JhdGlvO3VuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuc2NhbGVfYTt1bmlmb3JtIGZsb2F0IHVfdGV4X3lfYTt1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuc2NhbGVfYjt1bmlmb3JtIGZsb2F0IHVfdGV4X3lfYjt1bmlmb3JtIHZlYzIgdV91bml0c190b19waXhlbHM7dmFyeWluZyB2ZWMyIHZfbm9ybWFsO3ZhcnlpbmcgdmVjMiB2X3dpZHRoMjt2YXJ5aW5nIHZlYzIgdl90ZXhfYTt2YXJ5aW5nIHZlYzIgdl90ZXhfYjt2YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBmbG9vcndpZHRoXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvZmZzZXRcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxuZmxvYXQgQU5USUFMSUFTSU5HPTEuMC91X2RldmljZV9waXhlbF9yYXRpby8yLjA7dmVjMiBhX2V4dHJ1ZGU9YV9kYXRhLnh5LTEyOC4wO2Zsb2F0IGFfZGlyZWN0aW9uPW1vZChhX2RhdGEueiw0LjApLTEuMDtmbG9hdCBhX2xpbmVzb2Zhcj0oZmxvb3IoYV9kYXRhLnovNC4wKSthX2RhdGEudyo2NC4wKSpMSU5FX0RJU1RBTkNFX1NDQUxFO3ZlYzIgcG9zPWZsb29yKGFfcG9zX25vcm1hbCowLjUpO21lZGl1bXAgdmVjMiBub3JtYWw9YV9wb3Nfbm9ybWFsLTIuMCpwb3M7bm9ybWFsLnk9bm9ybWFsLnkqMi4wLTEuMDt2X25vcm1hbD1ub3JtYWw7Z2Fwd2lkdGg9Z2Fwd2lkdGgvMi4wO2Zsb2F0IGhhbGZ3aWR0aD13aWR0aC8yLjA7b2Zmc2V0PS0xLjAqb2Zmc2V0O2Zsb2F0IGluc2V0PWdhcHdpZHRoKyhnYXB3aWR0aCA+IDAuMCA/IEFOVElBTElBU0lORyA6IDAuMCk7ZmxvYXQgb3V0c2V0PWdhcHdpZHRoK2hhbGZ3aWR0aCooZ2Fwd2lkdGggPiAwLjAgPyAyLjAgOiAxLjApKyhoYWxmd2lkdGg9PTAuMCA/IDAuMCA6IEFOVElBTElBU0lORyk7bWVkaXVtcCB2ZWMyIGRpc3Q9b3V0c2V0KmFfZXh0cnVkZSpzY2FsZTttZWRpdW1wIGZsb2F0IHU9MC41KmFfZGlyZWN0aW9uO21lZGl1bXAgZmxvYXQgdD0xLjAtYWJzKHUpO21lZGl1bXAgdmVjMiBvZmZzZXQyPW9mZnNldCphX2V4dHJ1ZGUqc2NhbGUqbm9ybWFsLnkqbWF0Mih0LC11LHUsdCk7dmVjNCBwcm9qZWN0ZWRfZXh0cnVkZT11X21hdHJpeCp2ZWM0KGRpc3QvdV9yYXRpbywwLjAsMC4wKTtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KHBvcytvZmZzZXQyL3VfcmF0aW8sMC4wLDEuMCkrcHJvamVjdGVkX2V4dHJ1ZGU7ZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZT1sZW5ndGgoZGlzdCk7ZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZT1sZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkvZ2xfUG9zaXRpb24udyp1X3VuaXRzX3RvX3BpeGVscyk7dl9nYW1tYV9zY2FsZT1leHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlL2V4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU7dl90ZXhfYT12ZWMyKGFfbGluZXNvZmFyKnVfcGF0dGVybnNjYWxlX2EueC9mbG9vcndpZHRoLG5vcm1hbC55KnVfcGF0dGVybnNjYWxlX2EueSt1X3RleF95X2EpO3ZfdGV4X2I9dmVjMihhX2xpbmVzb2Zhcip1X3BhdHRlcm5zY2FsZV9iLngvZmxvb3J3aWR0aCxub3JtYWwueSp1X3BhdHRlcm5zY2FsZV9iLnkrdV90ZXhfeV9iKTt2X3dpZHRoMj12ZWMyKG91dHNldCxpbnNldCk7fSIpLGRyPXlyKCJ1bmlmb3JtIGZsb2F0IHVfZmFkZV90O3VuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O3VuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2UwO3VuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2UxO3ZhcnlpbmcgdmVjMiB2X3BvczA7dmFyeWluZyB2ZWMyIHZfcG9zMTt1bmlmb3JtIGZsb2F0IHVfYnJpZ2h0bmVzc19sb3c7dW5pZm9ybSBmbG9hdCB1X2JyaWdodG5lc3NfaGlnaDt1bmlmb3JtIGZsb2F0IHVfc2F0dXJhdGlvbl9mYWN0b3I7dW5pZm9ybSBmbG9hdCB1X2NvbnRyYXN0X2ZhY3Rvcjt1bmlmb3JtIHZlYzMgdV9zcGluX3dlaWdodHM7dm9pZCBtYWluKCkge3ZlYzQgY29sb3IwPXRleHR1cmUyRCh1X2ltYWdlMCx2X3BvczApO3ZlYzQgY29sb3IxPXRleHR1cmUyRCh1X2ltYWdlMSx2X3BvczEpO2lmIChjb2xvcjAuYSA+IDAuMCkge2NvbG9yMC5yZ2I9Y29sb3IwLnJnYi9jb2xvcjAuYTt9aWYgKGNvbG9yMS5hID4gMC4wKSB7Y29sb3IxLnJnYj1jb2xvcjEucmdiL2NvbG9yMS5hO312ZWM0IGNvbG9yPW1peChjb2xvcjAsY29sb3IxLHVfZmFkZV90KTtjb2xvci5hKj11X29wYWNpdHk7dmVjMyByZ2I9Y29sb3IucmdiO3JnYj12ZWMzKGRvdChyZ2IsdV9zcGluX3dlaWdodHMueHl6KSxkb3QocmdiLHVfc3Bpbl93ZWlnaHRzLnp4eSksZG90KHJnYix1X3NwaW5fd2VpZ2h0cy55engpKTtmbG9hdCBhdmVyYWdlPShjb2xvci5yK2NvbG9yLmcrY29sb3IuYikvMy4wO3JnYis9KGF2ZXJhZ2UtcmdiKSp1X3NhdHVyYXRpb25fZmFjdG9yO3JnYj0ocmdiLTAuNSkqdV9jb250cmFzdF9mYWN0b3IrMC41O3ZlYzMgdV9oaWdoX3ZlYz12ZWMzKHVfYnJpZ2h0bmVzc19sb3csdV9icmlnaHRuZXNzX2xvdyx1X2JyaWdodG5lc3NfbG93KTt2ZWMzIHVfbG93X3ZlYz12ZWMzKHVfYnJpZ2h0bmVzc19oaWdoLHVfYnJpZ2h0bmVzc19oaWdoLHVfYnJpZ2h0bmVzc19oaWdoKTtnbF9GcmFnQ29sb3I9dmVjNChtaXgodV9oaWdoX3ZlYyx1X2xvd192ZWMscmdiKSpjb2xvci5hLGNvbG9yLmEpO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV90bF9wYXJlbnQ7dW5pZm9ybSBmbG9hdCB1X3NjYWxlX3BhcmVudDt1bmlmb3JtIGZsb2F0IHVfYnVmZmVyX3NjYWxlO2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO2F0dHJpYnV0ZSB2ZWMyIGFfdGV4dHVyZV9wb3M7dmFyeWluZyB2ZWMyIHZfcG9zMDt2YXJ5aW5nIHZlYzIgdl9wb3MxO3ZvaWQgbWFpbigpIHtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7dl9wb3MwPSgoKGFfdGV4dHVyZV9wb3MvODE5Mi4wKS0wLjUpL3VfYnVmZmVyX3NjYWxlICkrMC41O3ZfcG9zMT0odl9wb3MwKnVfc2NhbGVfcGFyZW50KSt1X3RsX3BhcmVudDt9IiksbXI9eXIoInVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTt2YXJ5aW5nIHZlYzIgdl90ZXg7dmFyeWluZyBmbG9hdCB2X2ZhZGVfb3BhY2l0eTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbmxvd3AgZmxvYXQgYWxwaGE9b3BhY2l0eSp2X2ZhZGVfb3BhY2l0eTtnbF9GcmFnQ29sb3I9dGV4dHVyZTJEKHVfdGV4dHVyZSx2X3RleCkqYWxwaGE7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiY29uc3QgZmxvYXQgUEk9My4xNDE1OTI2NTM1ODk3OTM7YXR0cmlidXRlIHZlYzQgYV9wb3Nfb2Zmc2V0O2F0dHJpYnV0ZSB2ZWM0IGFfZGF0YTthdHRyaWJ1dGUgdmVjNCBhX3BpeGVsb2Zmc2V0O2F0dHJpYnV0ZSB2ZWMzIGFfcHJvamVjdGVkX3BvczthdHRyaWJ1dGUgZmxvYXQgYV9mYWRlX29wYWNpdHk7dW5pZm9ybSBib29sIHVfaXNfc2l6ZV96b29tX2NvbnN0YW50O3VuaWZvcm0gYm9vbCB1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfc2l6ZV90O3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9waXRjaDt1bmlmb3JtIGJvb2wgdV9yb3RhdGVfc3ltYm9sO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9hc3BlY3RfcmF0aW87dW5pZm9ybSBmbG9hdCB1X2ZhZGVfY2hhbmdlO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIG1hdDQgdV9sYWJlbF9wbGFuZV9tYXRyaXg7dW5pZm9ybSBtYXQ0IHVfY29vcmRfbWF0cml4O3VuaWZvcm0gYm9vbCB1X2lzX3RleHQ7dW5pZm9ybSBib29sIHVfcGl0Y2hfd2l0aF9tYXA7dW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTt2YXJ5aW5nIHZlYzIgdl90ZXg7dmFyeWluZyBmbG9hdCB2X2ZhZGVfb3BhY2l0eTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZlYzIgYV9wb3M9YV9wb3Nfb2Zmc2V0Lnh5O3ZlYzIgYV9vZmZzZXQ9YV9wb3Nfb2Zmc2V0Lnp3O3ZlYzIgYV90ZXg9YV9kYXRhLnh5O3ZlYzIgYV9zaXplPWFfZGF0YS56dztmbG9hdCBhX3NpemVfbWluPWZsb29yKGFfc2l6ZVswXSowLjUpO3ZlYzIgYV9weG9mZnNldD1hX3BpeGVsb2Zmc2V0Lnh5O3ZlYzIgYV9taW5Gb250U2NhbGU9YV9waXhlbG9mZnNldC56dy8yNTYuMDtoaWdocCBmbG9hdCBzZWdtZW50X2FuZ2xlPS1hX3Byb2plY3RlZF9wb3NbMl07ZmxvYXQgc2l6ZTtpZiAoIXVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge3NpemU9bWl4KGFfc2l6ZV9taW4sYV9zaXplWzFdLHVfc2l6ZV90KS8xMjguMDt9IGVsc2UgaWYgKHVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge3NpemU9YV9zaXplX21pbi8xMjguMDt9IGVsc2Uge3NpemU9dV9zaXplO312ZWM0IHByb2plY3RlZFBvaW50PXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTtoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlPXByb2plY3RlZFBvaW50Lnc7aGlnaHAgZmxvYXQgZGlzdGFuY2VfcmF0aW89dV9waXRjaF93aXRoX21hcCA/XG5jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlL3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSA6XG51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UvY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZTtoaWdocCBmbG9hdCBwZXJzcGVjdGl2ZV9yYXRpbz1jbGFtcCgwLjUrMC41KmRpc3RhbmNlX3JhdGlvLDAuMCw0LjApO3NpemUqPXBlcnNwZWN0aXZlX3JhdGlvO2Zsb2F0IGZvbnRTY2FsZT11X2lzX3RleHQgPyBzaXplLzI0LjAgOiBzaXplO2hpZ2hwIGZsb2F0IHN5bWJvbF9yb3RhdGlvbj0wLjA7aWYgKHVfcm90YXRlX3N5bWJvbCkge3ZlYzQgb2Zmc2V0UHJvamVjdGVkUG9pbnQ9dV9tYXRyaXgqdmVjNChhX3Bvcyt2ZWMyKDEsMCksMCwxKTt2ZWMyIGE9cHJvamVjdGVkUG9pbnQueHkvcHJvamVjdGVkUG9pbnQudzt2ZWMyIGI9b2Zmc2V0UHJvamVjdGVkUG9pbnQueHkvb2Zmc2V0UHJvamVjdGVkUG9pbnQudztzeW1ib2xfcm90YXRpb249YXRhbigoYi55LWEueSkvdV9hc3BlY3RfcmF0aW8sYi54LWEueCk7fWhpZ2hwIGZsb2F0IGFuZ2xlX3Npbj1zaW4oc2VnbWVudF9hbmdsZStzeW1ib2xfcm90YXRpb24pO2hpZ2hwIGZsb2F0IGFuZ2xlX2Nvcz1jb3Moc2VnbWVudF9hbmdsZStzeW1ib2xfcm90YXRpb24pO21hdDIgcm90YXRpb25fbWF0cml4PW1hdDIoYW5nbGVfY29zLC0xLjAqYW5nbGVfc2luLGFuZ2xlX3NpbixhbmdsZV9jb3MpO3ZlYzQgcHJvamVjdGVkX3Bvcz11X2xhYmVsX3BsYW5lX21hdHJpeCp2ZWM0KGFfcHJvamVjdGVkX3Bvcy54eSwwLjAsMS4wKTtnbF9Qb3NpdGlvbj11X2Nvb3JkX21hdHJpeCp2ZWM0KHByb2plY3RlZF9wb3MueHkvcHJvamVjdGVkX3Bvcy53K3JvdGF0aW9uX21hdHJpeCooYV9vZmZzZXQvMzIuMCptYXgoYV9taW5Gb250U2NhbGUsZm9udFNjYWxlKSthX3B4b2Zmc2V0LzE2LjApLDAuMCwxLjApO3ZfdGV4PWFfdGV4L3VfdGV4c2l6ZTt2ZWMyIGZhZGVfb3BhY2l0eT11bnBhY2tfb3BhY2l0eShhX2ZhZGVfb3BhY2l0eSk7ZmxvYXQgZmFkZV9jaGFuZ2U9ZmFkZV9vcGFjaXR5WzFdID4gMC41ID8gdV9mYWRlX2NoYW5nZSA6LXVfZmFkZV9jaGFuZ2U7dl9mYWRlX29wYWNpdHk9bWF4KDAuMCxtaW4oMS4wLGZhZGVfb3BhY2l0eVswXStmYWRlX2NoYW5nZSkpO30iKSxncj15cigiI2RlZmluZSBTREZfUFggOC4wXG51bmlmb3JtIGJvb2wgdV9pc19oYWxvO3VuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfZ2FtbWFfc2NhbGU7dW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3VuaWZvcm0gYm9vbCB1X2lzX3RleHQ7dmFyeWluZyB2ZWMyIHZfZGF0YTA7dmFyeWluZyB2ZWMzIHZfZGF0YTE7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGhhbG9fY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fYmx1clxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGhhbG9fY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fYmx1clxuZmxvYXQgRURHRV9HQU1NQT0wLjEwNS91X2RldmljZV9waXhlbF9yYXRpbzt2ZWMyIHRleD12X2RhdGEwLnh5O2Zsb2F0IGdhbW1hX3NjYWxlPXZfZGF0YTEueDtmbG9hdCBzaXplPXZfZGF0YTEueTtmbG9hdCBmYWRlX29wYWNpdHk9dl9kYXRhMVsyXTtmbG9hdCBmb250U2NhbGU9dV9pc190ZXh0ID8gc2l6ZS8yNC4wIDogc2l6ZTtsb3dwIHZlYzQgY29sb3I9ZmlsbF9jb2xvcjtoaWdocCBmbG9hdCBnYW1tYT1FREdFX0dBTU1BLyhmb250U2NhbGUqdV9nYW1tYV9zY2FsZSk7bG93cCBmbG9hdCBidWZmPSgyNTYuMC02NC4wKS8yNTYuMDtpZiAodV9pc19oYWxvKSB7Y29sb3I9aGFsb19jb2xvcjtnYW1tYT0oaGFsb19ibHVyKjEuMTkvU0RGX1BYK0VER0VfR0FNTUEpLyhmb250U2NhbGUqdV9nYW1tYV9zY2FsZSk7YnVmZj0oNi4wLWhhbG9fd2lkdGgvZm9udFNjYWxlKS9TREZfUFg7fWxvd3AgZmxvYXQgZGlzdD10ZXh0dXJlMkQodV90ZXh0dXJlLHRleCkuYTtoaWdocCBmbG9hdCBnYW1tYV9zY2FsZWQ9Z2FtbWEqZ2FtbWFfc2NhbGU7aGlnaHAgZmxvYXQgYWxwaGE9c21vb3Roc3RlcChidWZmLWdhbW1hX3NjYWxlZCxidWZmK2dhbW1hX3NjYWxlZCxkaXN0KTtnbF9GcmFnQ29sb3I9Y29sb3IqKGFscGhhKm9wYWNpdHkqZmFkZV9vcGFjaXR5KTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJjb25zdCBmbG9hdCBQST0zLjE0MTU5MjY1MzU4OTc5MzthdHRyaWJ1dGUgdmVjNCBhX3Bvc19vZmZzZXQ7YXR0cmlidXRlIHZlYzQgYV9kYXRhO2F0dHJpYnV0ZSB2ZWM0IGFfcGl4ZWxvZmZzZXQ7YXR0cmlidXRlIHZlYzMgYV9wcm9qZWN0ZWRfcG9zO2F0dHJpYnV0ZSBmbG9hdCBhX2ZhZGVfb3BhY2l0eTt1bmlmb3JtIGJvb2wgdV9pc19zaXplX3pvb21fY29uc3RhbnQ7dW5pZm9ybSBib29sIHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50O3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplX3Q7dW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemU7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gbWF0NCB1X2xhYmVsX3BsYW5lX21hdHJpeDt1bmlmb3JtIG1hdDQgdV9jb29yZF9tYXRyaXg7dW5pZm9ybSBib29sIHVfaXNfdGV4dDt1bmlmb3JtIGJvb2wgdV9waXRjaF93aXRoX21hcDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfcGl0Y2g7dW5pZm9ybSBib29sIHVfcm90YXRlX3N5bWJvbDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYXNwZWN0X3JhdGlvO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO3VuaWZvcm0gZmxvYXQgdV9mYWRlX2NoYW5nZTt1bmlmb3JtIHZlYzIgdV90ZXhzaXplO3ZhcnlpbmcgdmVjMiB2X2RhdGEwO3ZhcnlpbmcgdmVjMyB2X2RhdGExO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX2JsdXJcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX2JsdXJcbnZlYzIgYV9wb3M9YV9wb3Nfb2Zmc2V0Lnh5O3ZlYzIgYV9vZmZzZXQ9YV9wb3Nfb2Zmc2V0Lnp3O3ZlYzIgYV90ZXg9YV9kYXRhLnh5O3ZlYzIgYV9zaXplPWFfZGF0YS56dztmbG9hdCBhX3NpemVfbWluPWZsb29yKGFfc2l6ZVswXSowLjUpO3ZlYzIgYV9weG9mZnNldD1hX3BpeGVsb2Zmc2V0Lnh5O2hpZ2hwIGZsb2F0IHNlZ21lbnRfYW5nbGU9LWFfcHJvamVjdGVkX3Bvc1syXTtmbG9hdCBzaXplO2lmICghdV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7c2l6ZT1taXgoYV9zaXplX21pbixhX3NpemVbMV0sdV9zaXplX3QpLzEyOC4wO30gZWxzZSBpZiAodV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7c2l6ZT1hX3NpemVfbWluLzEyOC4wO30gZWxzZSB7c2l6ZT11X3NpemU7fXZlYzQgcHJvamVjdGVkUG9pbnQ9dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO2hpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2U9cHJvamVjdGVkUG9pbnQudztoaWdocCBmbG9hdCBkaXN0YW5jZV9yYXRpbz11X3BpdGNoX3dpdGhfbWFwID9cbmNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UvdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlIDpcbnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZS9jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlO2hpZ2hwIGZsb2F0IHBlcnNwZWN0aXZlX3JhdGlvPWNsYW1wKDAuNSswLjUqZGlzdGFuY2VfcmF0aW8sMC4wLDQuMCk7c2l6ZSo9cGVyc3BlY3RpdmVfcmF0aW87ZmxvYXQgZm9udFNjYWxlPXVfaXNfdGV4dCA/IHNpemUvMjQuMCA6IHNpemU7aGlnaHAgZmxvYXQgc3ltYm9sX3JvdGF0aW9uPTAuMDtpZiAodV9yb3RhdGVfc3ltYm9sKSB7dmVjNCBvZmZzZXRQcm9qZWN0ZWRQb2ludD11X21hdHJpeCp2ZWM0KGFfcG9zK3ZlYzIoMSwwKSwwLDEpO3ZlYzIgYT1wcm9qZWN0ZWRQb2ludC54eS9wcm9qZWN0ZWRQb2ludC53O3ZlYzIgYj1vZmZzZXRQcm9qZWN0ZWRQb2ludC54eS9vZmZzZXRQcm9qZWN0ZWRQb2ludC53O3N5bWJvbF9yb3RhdGlvbj1hdGFuKChiLnktYS55KS91X2FzcGVjdF9yYXRpbyxiLngtYS54KTt9aGlnaHAgZmxvYXQgYW5nbGVfc2luPXNpbihzZWdtZW50X2FuZ2xlK3N5bWJvbF9yb3RhdGlvbik7aGlnaHAgZmxvYXQgYW5nbGVfY29zPWNvcyhzZWdtZW50X2FuZ2xlK3N5bWJvbF9yb3RhdGlvbik7bWF0MiByb3RhdGlvbl9tYXRyaXg9bWF0MihhbmdsZV9jb3MsLTEuMCphbmdsZV9zaW4sYW5nbGVfc2luLGFuZ2xlX2Nvcyk7dmVjNCBwcm9qZWN0ZWRfcG9zPXVfbGFiZWxfcGxhbmVfbWF0cml4KnZlYzQoYV9wcm9qZWN0ZWRfcG9zLnh5LDAuMCwxLjApO2dsX1Bvc2l0aW9uPXVfY29vcmRfbWF0cml4KnZlYzQocHJvamVjdGVkX3Bvcy54eS9wcm9qZWN0ZWRfcG9zLncrcm90YXRpb25fbWF0cml4KihhX29mZnNldC8zMi4wKmZvbnRTY2FsZSthX3B4b2Zmc2V0KSwwLjAsMS4wKTtmbG9hdCBnYW1tYV9zY2FsZT1nbF9Qb3NpdGlvbi53O3ZlYzIgZmFkZV9vcGFjaXR5PXVucGFja19vcGFjaXR5KGFfZmFkZV9vcGFjaXR5KTtmbG9hdCBmYWRlX2NoYW5nZT1mYWRlX29wYWNpdHlbMV0gPiAwLjUgPyB1X2ZhZGVfY2hhbmdlIDotdV9mYWRlX2NoYW5nZTtmbG9hdCBpbnRlcnBvbGF0ZWRfZmFkZV9vcGFjaXR5PW1heCgwLjAsbWluKDEuMCxmYWRlX29wYWNpdHlbMF0rZmFkZV9jaGFuZ2UpKTt2X2RhdGEwPWFfdGV4L3VfdGV4c2l6ZTt2X2RhdGExPXZlYzMoZ2FtbWFfc2NhbGUsc2l6ZSxpbnRlcnBvbGF0ZWRfZmFkZV9vcGFjaXR5KTt9IiksdnI9eXIoIiNkZWZpbmUgU0RGX1BYIDguMFxuI2RlZmluZSBTREYgMS4wXG4jZGVmaW5lIElDT04gMC4wXG51bmlmb3JtIGJvb2wgdV9pc19oYWxvO3VuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTt1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmVfaWNvbjt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfZ2FtbWFfc2NhbGU7dW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3ZhcnlpbmcgdmVjNCB2X2RhdGEwO3ZhcnlpbmcgdmVjNCB2X2RhdGExO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX2JsdXJcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX2JsdXJcbmZsb2F0IGZhZGVfb3BhY2l0eT12X2RhdGExWzJdO2lmICh2X2RhdGExLnc9PUlDT04pIHt2ZWMyIHRleF9pY29uPXZfZGF0YTAuenc7bG93cCBmbG9hdCBhbHBoYT1vcGFjaXR5KmZhZGVfb3BhY2l0eTtnbF9GcmFnQ29sb3I9dGV4dHVyZTJEKHVfdGV4dHVyZV9pY29uLHRleF9pY29uKSphbHBoYTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbnJldHVybjt9dmVjMiB0ZXg9dl9kYXRhMC54eTtmbG9hdCBFREdFX0dBTU1BPTAuMTA1L3VfZGV2aWNlX3BpeGVsX3JhdGlvO2Zsb2F0IGdhbW1hX3NjYWxlPXZfZGF0YTEueDtmbG9hdCBzaXplPXZfZGF0YTEueTtmbG9hdCBmb250U2NhbGU9c2l6ZS8yNC4wO2xvd3AgdmVjNCBjb2xvcj1maWxsX2NvbG9yO2hpZ2hwIGZsb2F0IGdhbW1hPUVER0VfR0FNTUEvKGZvbnRTY2FsZSp1X2dhbW1hX3NjYWxlKTtsb3dwIGZsb2F0IGJ1ZmY9KDI1Ni4wLTY0LjApLzI1Ni4wO2lmICh1X2lzX2hhbG8pIHtjb2xvcj1oYWxvX2NvbG9yO2dhbW1hPShoYWxvX2JsdXIqMS4xOS9TREZfUFgrRURHRV9HQU1NQSkvKGZvbnRTY2FsZSp1X2dhbW1hX3NjYWxlKTtidWZmPSg2LjAtaGFsb193aWR0aC9mb250U2NhbGUpL1NERl9QWDt9bG93cCBmbG9hdCBkaXN0PXRleHR1cmUyRCh1X3RleHR1cmUsdGV4KS5hO2hpZ2hwIGZsb2F0IGdhbW1hX3NjYWxlZD1nYW1tYSpnYW1tYV9zY2FsZTtoaWdocCBmbG9hdCBhbHBoYT1zbW9vdGhzdGVwKGJ1ZmYtZ2FtbWFfc2NhbGVkLGJ1ZmYrZ2FtbWFfc2NhbGVkLGRpc3QpO2dsX0ZyYWdDb2xvcj1jb2xvciooYWxwaGEqb3BhY2l0eSpmYWRlX29wYWNpdHkpO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsImNvbnN0IGZsb2F0IFBJPTMuMTQxNTkyNjUzNTg5NzkzO2F0dHJpYnV0ZSB2ZWM0IGFfcG9zX29mZnNldDthdHRyaWJ1dGUgdmVjNCBhX2RhdGE7YXR0cmlidXRlIHZlYzMgYV9wcm9qZWN0ZWRfcG9zO2F0dHJpYnV0ZSBmbG9hdCBhX2ZhZGVfb3BhY2l0eTt1bmlmb3JtIGJvb2wgdV9pc19zaXplX3pvb21fY29uc3RhbnQ7dW5pZm9ybSBib29sIHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50O3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplX3Q7dW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemU7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gbWF0NCB1X2xhYmVsX3BsYW5lX21hdHJpeDt1bmlmb3JtIG1hdDQgdV9jb29yZF9tYXRyaXg7dW5pZm9ybSBib29sIHVfaXNfdGV4dDt1bmlmb3JtIGJvb2wgdV9waXRjaF93aXRoX21hcDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfcGl0Y2g7dW5pZm9ybSBib29sIHVfcm90YXRlX3N5bWJvbDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYXNwZWN0X3JhdGlvO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO3VuaWZvcm0gZmxvYXQgdV9mYWRlX2NoYW5nZTt1bmlmb3JtIHZlYzIgdV90ZXhzaXplO3VuaWZvcm0gdmVjMiB1X3RleHNpemVfaWNvbjt2YXJ5aW5nIHZlYzQgdl9kYXRhMDt2YXJ5aW5nIHZlYzQgdl9kYXRhMTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb19ibHVyXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb19ibHVyXG52ZWMyIGFfcG9zPWFfcG9zX29mZnNldC54eTt2ZWMyIGFfb2Zmc2V0PWFfcG9zX29mZnNldC56dzt2ZWMyIGFfdGV4PWFfZGF0YS54eTt2ZWMyIGFfc2l6ZT1hX2RhdGEuenc7ZmxvYXQgYV9zaXplX21pbj1mbG9vcihhX3NpemVbMF0qMC41KTtmbG9hdCBpc19zZGY9YV9zaXplWzBdLTIuMCphX3NpemVfbWluO2hpZ2hwIGZsb2F0IHNlZ21lbnRfYW5nbGU9LWFfcHJvamVjdGVkX3Bvc1syXTtmbG9hdCBzaXplO2lmICghdV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7c2l6ZT1taXgoYV9zaXplX21pbixhX3NpemVbMV0sdV9zaXplX3QpLzEyOC4wO30gZWxzZSBpZiAodV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7c2l6ZT1hX3NpemVfbWluLzEyOC4wO30gZWxzZSB7c2l6ZT11X3NpemU7fXZlYzQgcHJvamVjdGVkUG9pbnQ9dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO2hpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2U9cHJvamVjdGVkUG9pbnQudztoaWdocCBmbG9hdCBkaXN0YW5jZV9yYXRpbz11X3BpdGNoX3dpdGhfbWFwID9cbmNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UvdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlIDpcbnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZS9jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlO2hpZ2hwIGZsb2F0IHBlcnNwZWN0aXZlX3JhdGlvPWNsYW1wKDAuNSswLjUqZGlzdGFuY2VfcmF0aW8sMC4wLDQuMCk7c2l6ZSo9cGVyc3BlY3RpdmVfcmF0aW87ZmxvYXQgZm9udFNjYWxlPXNpemUvMjQuMDtoaWdocCBmbG9hdCBzeW1ib2xfcm90YXRpb249MC4wO2lmICh1X3JvdGF0ZV9zeW1ib2wpIHt2ZWM0IG9mZnNldFByb2plY3RlZFBvaW50PXVfbWF0cml4KnZlYzQoYV9wb3MrdmVjMigxLDApLDAsMSk7dmVjMiBhPXByb2plY3RlZFBvaW50Lnh5L3Byb2plY3RlZFBvaW50Lnc7dmVjMiBiPW9mZnNldFByb2plY3RlZFBvaW50Lnh5L29mZnNldFByb2plY3RlZFBvaW50Lnc7c3ltYm9sX3JvdGF0aW9uPWF0YW4oKGIueS1hLnkpL3VfYXNwZWN0X3JhdGlvLGIueC1hLngpO31oaWdocCBmbG9hdCBhbmdsZV9zaW49c2luKHNlZ21lbnRfYW5nbGUrc3ltYm9sX3JvdGF0aW9uKTtoaWdocCBmbG9hdCBhbmdsZV9jb3M9Y29zKHNlZ21lbnRfYW5nbGUrc3ltYm9sX3JvdGF0aW9uKTttYXQyIHJvdGF0aW9uX21hdHJpeD1tYXQyKGFuZ2xlX2NvcywtMS4wKmFuZ2xlX3NpbixhbmdsZV9zaW4sYW5nbGVfY29zKTt2ZWM0IHByb2plY3RlZF9wb3M9dV9sYWJlbF9wbGFuZV9tYXRyaXgqdmVjNChhX3Byb2plY3RlZF9wb3MueHksMC4wLDEuMCk7Z2xfUG9zaXRpb249dV9jb29yZF9tYXRyaXgqdmVjNChwcm9qZWN0ZWRfcG9zLnh5L3Byb2plY3RlZF9wb3Mudytyb3RhdGlvbl9tYXRyaXgqKGFfb2Zmc2V0LzMyLjAqZm9udFNjYWxlKSwwLjAsMS4wKTtmbG9hdCBnYW1tYV9zY2FsZT1nbF9Qb3NpdGlvbi53O3ZlYzIgZmFkZV9vcGFjaXR5PXVucGFja19vcGFjaXR5KGFfZmFkZV9vcGFjaXR5KTtmbG9hdCBmYWRlX2NoYW5nZT1mYWRlX29wYWNpdHlbMV0gPiAwLjUgPyB1X2ZhZGVfY2hhbmdlIDotdV9mYWRlX2NoYW5nZTtmbG9hdCBpbnRlcnBvbGF0ZWRfZmFkZV9vcGFjaXR5PW1heCgwLjAsbWluKDEuMCxmYWRlX29wYWNpdHlbMF0rZmFkZV9jaGFuZ2UpKTt2X2RhdGEwLnh5PWFfdGV4L3VfdGV4c2l6ZTt2X2RhdGEwLnp3PWFfdGV4L3VfdGV4c2l6ZV9pY29uO3ZfZGF0YTE9dmVjNChnYW1tYV9zY2FsZSxzaXplLGludGVycG9sYXRlZF9mYWRlX29wYWNpdHksaXNfc2RmKTt9Iik7ZnVuY3Rpb24geXIodCxlKXt2YXIgcj0vI3ByYWdtYSBtYXBib3g6IChbXHddKykgKFtcd10rKSAoW1x3XSspIChbXHddKykvZyxuPXt9O3JldHVybntmcmFnbWVudFNvdXJjZTp0PXQucmVwbGFjZShyLChmdW5jdGlvbih0LGUscixpLGEpe3JldHVybiBuW2FdPSEwLCJkZWZpbmUiPT09ZT8iXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbnZhcnlpbmcgIityKyIgIitpKyIgIithKyI7XG4jZWxzZVxudW5pZm9ybSAiK3IrIiAiK2krIiB1XyIrYSsiO1xuI2VuZGlmXG4iOiJcbiNpZmRlZiBIQVNfVU5JRk9STV91XyIrYSsiXG4gICAgIityKyIgIitpKyIgIithKyIgPSB1XyIrYSsiO1xuI2VuZGlmXG4ifSkpLHZlcnRleFNvdXJjZTplPWUucmVwbGFjZShyLChmdW5jdGlvbih0LGUscixpLGEpe3ZhciBvPSJmbG9hdCI9PT1pPyJ2ZWMyIjoidmVjNCIscz1hLm1hdGNoKC9jb2xvci8pPyJjb2xvciI6bztyZXR1cm4gblthXT8iZGVmaW5lIj09PWU/IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIrYSsiXG51bmlmb3JtIGxvd3AgZmxvYXQgdV8iK2ErIl90O1xuYXR0cmlidXRlICIrcisiICIrbysiIGFfIithKyI7XG52YXJ5aW5nICIrcisiICIraSsiICIrYSsiO1xuI2Vsc2VcbnVuaWZvcm0gIityKyIgIitpKyIgdV8iK2ErIjtcbiNlbmRpZlxuIjoidmVjNCI9PT1zPyJcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxuICAgICIrYSsiID0gYV8iK2ErIjtcbiNlbHNlXG4gICAgIityKyIgIitpKyIgIithKyIgPSB1XyIrYSsiO1xuI2VuZGlmXG4iOiJcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxuICAgICIrYSsiID0gdW5wYWNrX21peF8iK3MrIihhXyIrYSsiLCB1XyIrYSsiX3QpO1xuI2Vsc2VcbiAgICAiK3IrIiAiK2krIiAiK2ErIiA9IHVfIithKyI7XG4jZW5kaWZcbiI6ImRlZmluZSI9PT1lPyJcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxudW5pZm9ybSBsb3dwIGZsb2F0IHVfIithKyJfdDtcbmF0dHJpYnV0ZSAiK3IrIiAiK28rIiBhXyIrYSsiO1xuI2Vsc2VcbnVuaWZvcm0gIityKyIgIitpKyIgdV8iK2ErIjtcbiNlbmRpZlxuIjoidmVjNCI9PT1zPyJcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxuICAgICIrcisiICIraSsiICIrYSsiID0gYV8iK2ErIjtcbiNlbHNlXG4gICAgIityKyIgIitpKyIgIithKyIgPSB1XyIrYSsiO1xuI2VuZGlmXG4iOiJcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxuICAgICIrcisiICIraSsiICIrYSsiID0gdW5wYWNrX21peF8iK3MrIihhXyIrYSsiLCB1XyIrYSsiX3QpO1xuI2Vsc2VcbiAgICAiK3IrIiAiK2krIiAiK2ErIiA9IHVfIithKyI7XG4jZW5kaWZcbiJ9KSl9fXZhciB4cj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxwcmVsdWRlOlllLGJhY2tncm91bmQ6V2UsYmFja2dyb3VuZFBhdHRlcm46WGUsY2lyY2xlOlplLGNsaXBwaW5nTWFzazpKZSxoZWF0bWFwOktlLGhlYXRtYXBUZXh0dXJlOlFlLGNvbGxpc2lvbkJveDokZSxjb2xsaXNpb25DaXJjbGU6dHIsZGVidWc6ZXIsZmlsbDpycixmaWxsT3V0bGluZTpucixmaWxsT3V0bGluZVBhdHRlcm46aXIsZmlsbFBhdHRlcm46YXIsZmlsbEV4dHJ1c2lvbjpvcixmaWxsRXh0cnVzaW9uUGF0dGVybjpzcixoaWxsc2hhZGVQcmVwYXJlOmxyLGhpbGxzaGFkZTpjcixsaW5lOnVyLGxpbmVHcmFkaWVudDpmcixsaW5lUGF0dGVybjpocixsaW5lU0RGOnByLHJhc3RlcjpkcixzeW1ib2xJY29uOm1yLHN5bWJvbFNERjpncixzeW1ib2xUZXh0QW5kSWNvbjp2cn0pLGJyPWZ1bmN0aW9uKCl7dGhpcy5ib3VuZFByb2dyYW09bnVsbCx0aGlzLmJvdW5kTGF5b3V0VmVydGV4QnVmZmVyPW51bGwsdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycz1bXSx0aGlzLmJvdW5kSW5kZXhCdWZmZXI9bnVsbCx0aGlzLmJvdW5kVmVydGV4T2Zmc2V0PW51bGwsdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXI9bnVsbCx0aGlzLnZhbz1udWxsfTtici5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3RoaXMuY29udGV4dD10O2Zvcih2YXIgbD10aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzLmxlbmd0aCE9PW4ubGVuZ3RoLGM9MDshbCYmYzxuLmxlbmd0aDtjKyspdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVyc1tjXSE9PW5bY10mJihsPSEwKTt2YXIgdT0hdGhpcy52YW98fHRoaXMuYm91bmRQcm9ncmFtIT09ZXx8dGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlciE9PXJ8fGx8fHRoaXMuYm91bmRJbmRleEJ1ZmZlciE9PWl8fHRoaXMuYm91bmRWZXJ0ZXhPZmZzZXQhPT1hfHx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlciE9PW98fHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyMiE9PXM7IXQuZXh0VmVydGV4QXJyYXlPYmplY3R8fHU/dGhpcy5mcmVzaEJpbmQoZSxyLG4saSxhLG8scyk6KHQuYmluZFZlcnRleEFycmF5T0VTLnNldCh0aGlzLnZhbyksbyYmby5iaW5kKCksaSYmaS5keW5hbWljRHJhdyYmaS5iaW5kKCkscyYmcy5iaW5kKCkpfSxici5wcm90b3R5cGUuZnJlc2hCaW5kPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzLGw9dC5udW1BdHRyaWJ1dGVzLGM9dGhpcy5jb250ZXh0LHU9Yy5nbDtpZihjLmV4dFZlcnRleEFycmF5T2JqZWN0KXRoaXMudmFvJiZ0aGlzLmRlc3Ryb3koKSx0aGlzLnZhbz1jLmV4dFZlcnRleEFycmF5T2JqZWN0LmNyZWF0ZVZlcnRleEFycmF5T0VTKCksYy5iaW5kVmVydGV4QXJyYXlPRVMuc2V0KHRoaXMudmFvKSxzPTAsdGhpcy5ib3VuZFByb2dyYW09dCx0aGlzLmJvdW5kTGF5b3V0VmVydGV4QnVmZmVyPWUsdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycz1yLHRoaXMuYm91bmRJbmRleEJ1ZmZlcj1uLHRoaXMuYm91bmRWZXJ0ZXhPZmZzZXQ9aSx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcj1hLHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyMj1vO2Vsc2V7cz1jLmN1cnJlbnROdW1BdHRyaWJ1dGVzfHwwO2Zvcih2YXIgZj1sO2Y8cztmKyspdS5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZil9ZS5lbmFibGVBdHRyaWJ1dGVzKHUsdCk7Zm9yKHZhciBoPTAscD1yO2g8cC5sZW5ndGg7aCs9MSl7cFtoXS5lbmFibGVBdHRyaWJ1dGVzKHUsdCl9YSYmYS5lbmFibGVBdHRyaWJ1dGVzKHUsdCksbyYmby5lbmFibGVBdHRyaWJ1dGVzKHUsdCksZS5iaW5kKCksZS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsaSk7Zm9yKHZhciBkPTAsbT1yO2Q8bS5sZW5ndGg7ZCs9MSl7dmFyIGc9bVtkXTtnLmJpbmQoKSxnLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxpKX1hJiYoYS5iaW5kKCksYS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsaSkpLG4mJm4uYmluZCgpLG8mJihvLmJpbmQoKSxvLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxpKSksYy5jdXJyZW50TnVtQXR0cmlidXRlcz1sfSxici5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMudmFvJiYodGhpcy5jb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHRoaXMudmFvKSx0aGlzLnZhbz1udWxsKX07dmFyIF9yPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dC5nbDt0aGlzLnByb2dyYW09YS5jcmVhdGVQcm9ncmFtKCk7dmFyIG89cj9yLmRlZmluZXMoKTpbXTtpJiZvLnB1c2goIiNkZWZpbmUgT1ZFUkRSQVdfSU5TUEVDVE9SOyIpO3ZhciBzPW8uY29uY2F0KFllLmZyYWdtZW50U291cmNlLGUuZnJhZ21lbnRTb3VyY2UpLmpvaW4oIlxuIiksbD1vLmNvbmNhdChZZS52ZXJ0ZXhTb3VyY2UsZS52ZXJ0ZXhTb3VyY2UpLmpvaW4oIlxuIiksYz1hLmNyZWF0ZVNoYWRlcihhLkZSQUdNRU5UX1NIQURFUik7aWYoYS5pc0NvbnRleHRMb3N0KCkpdGhpcy5mYWlsZWRUb0NyZWF0ZT0hMDtlbHNle2Euc2hhZGVyU291cmNlKGMscyksYS5jb21waWxlU2hhZGVyKGMpLGEuYXR0YWNoU2hhZGVyKHRoaXMucHJvZ3JhbSxjKTt2YXIgdT1hLmNyZWF0ZVNoYWRlcihhLlZFUlRFWF9TSEFERVIpO2lmKGEuaXNDb250ZXh0TG9zdCgpKXRoaXMuZmFpbGVkVG9DcmVhdGU9ITA7ZWxzZXthLnNoYWRlclNvdXJjZSh1LGwpLGEuY29tcGlsZVNoYWRlcih1KSxhLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sdSk7Zm9yKHZhciBmPXI/ci5sYXlvdXRBdHRyaWJ1dGVzOltdLGg9MDtoPGYubGVuZ3RoO2grKylhLmJpbmRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0saCxmW2hdLm5hbWUpO2EubGlua1Byb2dyYW0odGhpcy5wcm9ncmFtKSxhLmRlbGV0ZVNoYWRlcih1KSxhLmRlbGV0ZVNoYWRlcihjKSx0aGlzLm51bUF0dHJpYnV0ZXM9YS5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMucHJvZ3JhbSxhLkFDVElWRV9BVFRSSUJVVEVTKSx0aGlzLmF0dHJpYnV0ZXM9e307Zm9yKHZhciBwPXt9LGQ9MDtkPHRoaXMubnVtQXR0cmlidXRlcztkKyspe3ZhciBtPWEuZ2V0QWN0aXZlQXR0cmliKHRoaXMucHJvZ3JhbSxkKTttJiYodGhpcy5hdHRyaWJ1dGVzW20ubmFtZV09YS5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sbS5uYW1lKSl9Zm9yKHZhciBnPWEuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0sYS5BQ1RJVkVfVU5JRk9STVMpLHY9MDt2PGc7disrKXt2YXIgeT1hLmdldEFjdGl2ZVVuaWZvcm0odGhpcy5wcm9ncmFtLHYpO3kmJihwW3kubmFtZV09YS5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLHkubmFtZSkpfXRoaXMuZml4ZWRVbmlmb3Jtcz1uKHQscCksdGhpcy5iaW5kZXJVbmlmb3Jtcz1yP3IuZ2V0VW5pZm9ybXModCxwKTpbXX19fTtmdW5jdGlvbiB3cih0LGUscil7dmFyIG49MS9wZShyLDEsZS50cmFuc2Zvcm0udGlsZVpvb20pLGk9TWF0aC5wb3coMixyLnRpbGVJRC5vdmVyc2NhbGVkWiksYT1yLnRpbGVTaXplKk1hdGgucG93KDIsZS50cmFuc2Zvcm0udGlsZVpvb20pL2ksbz1hKihyLnRpbGVJRC5jYW5vbmljYWwueCtyLnRpbGVJRC53cmFwKmkpLHM9YSpyLnRpbGVJRC5jYW5vbmljYWwueTtyZXR1cm57dV9pbWFnZTowLHVfdGV4c2l6ZTpyLmltYWdlQXRsYXNUZXh0dXJlLnNpemUsdV9zY2FsZTpbbix0LmZyb21TY2FsZSx0LnRvU2NhbGVdLHVfZmFkZTp0LnQsdV9waXhlbF9jb29yZF91cHBlcjpbbz4+MTYscz4+MTZdLHVfcGl4ZWxfY29vcmRfbG93ZXI6WzY1NTM1Jm8sNjU1MzUmc119fV9yLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG0pe3ZhciBnLHY9dC5nbDtpZighdGhpcy5mYWlsZWRUb0NyZWF0ZSl7Zm9yKHZhciB5IGluIHQucHJvZ3JhbS5zZXQodGhpcy5wcm9ncmFtKSx0LnNldERlcHRoTW9kZShyKSx0LnNldFN0ZW5jaWxNb2RlKG4pLHQuc2V0Q29sb3JNb2RlKGkpLHQuc2V0Q3VsbEZhY2UoYSksdGhpcy5maXhlZFVuaWZvcm1zKXRoaXMuZml4ZWRVbmlmb3Jtc1t5XS5zZXQob1t5XSk7cCYmcC5zZXRVbmlmb3Jtcyh0LHRoaXMuYmluZGVyVW5pZm9ybXMsZix7em9vbTpofSk7Zm9yKHZhciB4PShnPXt9LGdbdi5MSU5FU109MixnW3YuVFJJQU5HTEVTXT0zLGdbdi5MSU5FX1NUUklQXT0xLGcpW2VdLGI9MCxfPXUuZ2V0KCk7YjxfLmxlbmd0aDtiKz0xKXt2YXIgdz1fW2JdLFQ9dy52YW9zfHwody52YW9zPXt9KTsoVFtzXXx8KFRbc109bmV3IGJyKSkuYmluZCh0LHRoaXMsbCxwP3AuZ2V0UGFpbnRWZXJ0ZXhCdWZmZXJzKCk6W10sYyx3LnZlcnRleE9mZnNldCxkLG0pLHYuZHJhd0VsZW1lbnRzKGUsdy5wcmltaXRpdmVMZW5ndGgqeCx2LlVOU0lHTkVEX1NIT1JULHcucHJpbWl0aXZlT2Zmc2V0KngqMil9fX07dmFyIFRyPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXIuc3R5bGUubGlnaHQsbz1hLnByb3BlcnRpZXMuZ2V0KCJwb3NpdGlvbiIpLHM9W28ueCxvLnksby56XSxsPXQuY3JlYXRlJDEoKTsidmlld3BvcnQiPT09YS5wcm9wZXJ0aWVzLmdldCgiYW5jaG9yIikmJnQuZnJvbVJvdGF0aW9uKGwsLXIudHJhbnNmb3JtLmFuZ2xlKSx0LnRyYW5zZm9ybU1hdDMocyxzLGwpO3ZhciBjPWEucHJvcGVydGllcy5nZXQoImNvbG9yIik7cmV0dXJue3VfbWF0cml4OmUsdV9saWdodHBvczpzLHVfbGlnaHRpbnRlbnNpdHk6YS5wcm9wZXJ0aWVzLmdldCgiaW50ZW5zaXR5IiksdV9saWdodGNvbG9yOltjLnIsYy5nLGMuYl0sdV92ZXJ0aWNhbF9ncmFkaWVudDorbix1X29wYWNpdHk6aX19LGtyPWZ1bmN0aW9uKGUscixuLGksYSxvLHMpe3JldHVybiB0LmV4dGVuZChUcihlLHIsbixpKSx3cihvLHIscykse3VfaGVpZ2h0X2ZhY3RvcjotTWF0aC5wb3coMixhLm92ZXJzY2FsZWRaKS9zLnRpbGVTaXplLzh9KX0sQXI9ZnVuY3Rpb24odCl7cmV0dXJue3VfbWF0cml4OnR9fSxNcj1mdW5jdGlvbihlLHIsbixpKXtyZXR1cm4gdC5leHRlbmQoQXIoZSksd3IobixyLGkpKX0sU3I9ZnVuY3Rpb24odCxlKXtyZXR1cm57dV9tYXRyaXg6dCx1X3dvcmxkOmV9fSxFcj1mdW5jdGlvbihlLHIsbixpLGEpe3JldHVybiB0LmV4dGVuZChNcihlLHIsbixpKSx7dV93b3JsZDphfSl9LExyPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhLG8scz1lLnRyYW5zZm9ybTtpZigibWFwIj09PWkucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50Iikpe3ZhciBsPXBlKG4sMSxzLnpvb20pO2E9ITAsbz1bbCxsXX1lbHNlIGE9ITEsbz1zLnBpeGVsc1RvR0xVbml0cztyZXR1cm57dV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlOnMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSx1X3NjYWxlX3dpdGhfbWFwOisoIm1hcCI9PT1pLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLXNjYWxlIikpLHVfbWF0cml4OmUudHJhbnNsYXRlUG9zTWF0cml4KHIucG9zTWF0cml4LG4saS5wYWludC5nZXQoImNpcmNsZS10cmFuc2xhdGUiKSxpLnBhaW50LmdldCgiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiKSksdV9waXRjaF93aXRoX21hcDorYSx1X2RldmljZV9waXhlbF9yYXRpbzp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyx1X2V4dHJ1ZGVfc2NhbGU6b319LENyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1wZShyLDEsZS56b29tKSxpPU1hdGgucG93KDIsZS56b29tLXIudGlsZUlELm92ZXJzY2FsZWRaKSxhPXIudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpO3JldHVybnt1X21hdHJpeDp0LHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTplLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsdV9waXhlbHNfdG9fdGlsZV91bml0czpuLHVfZXh0cnVkZV9zY2FsZTpbZS5waXhlbHNUb0dMVW5pdHNbMF0vKG4qaSksZS5waXhlbHNUb0dMVW5pdHNbMV0vKG4qaSldLHVfb3ZlcnNjYWxlX2ZhY3RvcjphfX0sUHI9ZnVuY3Rpb24odCxlLHIpe3JldHVybnt1X21hdHJpeDp0LHVfaW52X21hdHJpeDplLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpyLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsdV92aWV3cG9ydF9zaXplOltyLndpZHRoLHIuaGVpZ2h0XX19LElyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9MSkse3VfbWF0cml4OnQsdV9jb2xvcjplLHVfb3ZlcmxheTowLHVfb3ZlcmxheV9zY2FsZTpyfX0sT3I9ZnVuY3Rpb24odCl7cmV0dXJue3VfbWF0cml4OnR9fSx6cj1mdW5jdGlvbih0LGUscixuKXtyZXR1cm57dV9tYXRyaXg6dCx1X2V4dHJ1ZGVfc2NhbGU6cGUoZSwxLHIpLHVfaW50ZW5zaXR5Om59fTtmdW5jdGlvbiBEcihlLHIpe3ZhciBuPU1hdGgucG93KDIsci5jYW5vbmljYWwueiksaT1yLmNhbm9uaWNhbC55O3JldHVybltuZXcgdC5NZXJjYXRvckNvb3JkaW5hdGUoMCxpL24pLnRvTG5nTGF0KCkubGF0LG5ldyB0Lk1lcmNhdG9yQ29vcmRpbmF0ZSgwLChpKzEpL24pLnRvTG5nTGF0KCkubGF0XX12YXIgUnI9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWUudHJhbnNmb3JtO3JldHVybnt1X21hdHJpeDpVcihlLHIsbiksdV9yYXRpbzoxL3BlKHIsMSxpLnpvb20pLHVfZGV2aWNlX3BpeGVsX3JhdGlvOnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLHVfdW5pdHNfdG9fcGl4ZWxzOlsxL2kucGl4ZWxzVG9HTFVuaXRzWzBdLDEvaS5waXhlbHNUb0dMVW5pdHNbMV1dfX0sRnI9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmV4dGVuZChScihlLHIsbikse3VfaW1hZ2U6MH0pfSxCcj1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT1lLnRyYW5zZm9ybSxvPWpyKHIsYSk7cmV0dXJue3VfbWF0cml4OlVyKGUscixuKSx1X3RleHNpemU6ci5pbWFnZUF0bGFzVGV4dHVyZS5zaXplLHVfcmF0aW86MS9wZShyLDEsYS56b29tKSx1X2RldmljZV9waXhlbF9yYXRpbzp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyx1X2ltYWdlOjAsdV9zY2FsZTpbbyxpLmZyb21TY2FsZSxpLnRvU2NhbGVdLHVfZmFkZTppLnQsdV91bml0c190b19waXhlbHM6WzEvYS5waXhlbHNUb0dMVW5pdHNbMF0sMS9hLnBpeGVsc1RvR0xVbml0c1sxXV19fSxOcj1mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvPWUudHJhbnNmb3JtLHM9ZS5saW5lQXRsYXMsbD1qcihyLG8pLGM9InJvdW5kIj09PW4ubGF5b3V0LmdldCgibGluZS1jYXAiKSx1PXMuZ2V0RGFzaChpLmZyb20sYyksZj1zLmdldERhc2goaS50byxjKSxoPXUud2lkdGgqYS5mcm9tU2NhbGUscD1mLndpZHRoKmEudG9TY2FsZTtyZXR1cm4gdC5leHRlbmQoUnIoZSxyLG4pLHt1X3BhdHRlcm5zY2FsZV9hOltsL2gsLXUuaGVpZ2h0LzJdLHVfcGF0dGVybnNjYWxlX2I6W2wvcCwtZi5oZWlnaHQvMl0sdV9zZGZnYW1tYTpzLndpZHRoLygyNTYqTWF0aC5taW4oaCxwKSp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbykvMix1X2ltYWdlOjAsdV90ZXhfeV9hOnUueSx1X3RleF95X2I6Zi55LHVfbWl4OmEudH0pfTtmdW5jdGlvbiBqcih0LGUpe3JldHVybiAxL3BlKHQsMSxlLnRpbGVab29tKX1mdW5jdGlvbiBVcih0LGUscil7cmV0dXJuIHQudHJhbnNsYXRlUG9zTWF0cml4KGUudGlsZUlELnBvc01hdHJpeCxlLHIucGFpbnQuZ2V0KCJsaW5lLXRyYW5zbGF0ZSIpLHIucGFpbnQuZ2V0KCJsaW5lLXRyYW5zbGF0ZS1hbmNob3IiKSl9dmFyIFZyPWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJue3VfbWF0cml4OnQsdV90bF9wYXJlbnQ6ZSx1X3NjYWxlX3BhcmVudDpyLHVfYnVmZmVyX3NjYWxlOjEsdV9mYWRlX3Q6bi5taXgsdV9vcGFjaXR5Om4ub3BhY2l0eSppLnBhaW50LmdldCgicmFzdGVyLW9wYWNpdHkiKSx1X2ltYWdlMDowLHVfaW1hZ2UxOjEsdV9icmlnaHRuZXNzX2xvdzppLnBhaW50LmdldCgicmFzdGVyLWJyaWdodG5lc3MtbWluIiksdV9icmlnaHRuZXNzX2hpZ2g6aS5wYWludC5nZXQoInJhc3Rlci1icmlnaHRuZXNzLW1heCIpLHVfc2F0dXJhdGlvbl9mYWN0b3I6KG89aS5wYWludC5nZXQoInJhc3Rlci1zYXR1cmF0aW9uIiksbz4wPzEtMS8oMS4wMDEtbyk6LW8pLHVfY29udHJhc3RfZmFjdG9yOihhPWkucGFpbnQuZ2V0KCJyYXN0ZXItY29udHJhc3QiKSxhPjA/MS8oMS1hKToxK2EpLHVfc3Bpbl93ZWlnaHRzOkhyKGkucGFpbnQuZ2V0KCJyYXN0ZXItaHVlLXJvdGF0ZSIpKX07dmFyIGEsb307ZnVuY3Rpb24gSHIodCl7dCo9TWF0aC5QSS8xODA7dmFyIGU9TWF0aC5zaW4odCkscj1NYXRoLmNvcyh0KTtyZXR1cm5bKDIqcisxKS8zLCgtTWF0aC5zcXJ0KDMpKmUtcisxKS8zLChNYXRoLnNxcnQoMykqZS1yKzEpLzNdfXZhciBxcixHcj1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT1pLnRyYW5zZm9ybTtyZXR1cm57dV9pc19zaXplX3pvb21fY29uc3RhbnQ6KygiY29uc3RhbnQiPT09dHx8InNvdXJjZSI9PT10KSx1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDorKCJjb25zdGFudCI9PT10fHwiY2FtZXJhIj09PXQpLHVfc2l6ZV90OmU/ZS51U2l6ZVQ6MCx1X3NpemU6ZT9lLnVTaXplOjAsdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlOnUuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSx1X3BpdGNoOnUucGl0Y2gvMzYwKjIqTWF0aC5QSSx1X3JvdGF0ZV9zeW1ib2w6K3IsdV9hc3BlY3RfcmF0aW86dS53aWR0aC91LmhlaWdodCx1X2ZhZGVfY2hhbmdlOmkub3B0aW9ucy5mYWRlRHVyYXRpb24/aS5zeW1ib2xGYWRlQ2hhbmdlOjEsdV9tYXRyaXg6YSx1X2xhYmVsX3BsYW5lX21hdHJpeDpvLHVfY29vcmRfbWF0cml4OnMsdV9pc190ZXh0OitsLHVfcGl0Y2hfd2l0aF9tYXA6K24sdV90ZXhzaXplOmMsdV90ZXh0dXJlOjB9fSxZcj1mdW5jdGlvbihlLHIsbixpLGEsbyxzLGwsYyx1LGYpe3ZhciBoPWEudHJhbnNmb3JtO3JldHVybiB0LmV4dGVuZChHcihlLHIsbixpLGEsbyxzLGwsYyx1KSx7dV9nYW1tYV9zY2FsZTppP01hdGguY29zKGguX3BpdGNoKSpoLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2U6MSx1X2RldmljZV9waXhlbF9yYXRpbzp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyx1X2lzX2hhbG86K2Z9KX0sV3I9ZnVuY3Rpb24oZSxyLG4saSxhLG8scyxsLGMsdSl7cmV0dXJuIHQuZXh0ZW5kKFlyKGUscixuLGksYSxvLHMsbCwhMCxjLCEwKSx7dV90ZXhzaXplX2ljb246dSx1X3RleHR1cmVfaWNvbjoxfSl9LFhyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm57dV9tYXRyaXg6dCx1X29wYWNpdHk6ZSx1X2NvbG9yOnJ9fSxacj1mdW5jdGlvbihlLHIsbixpLGEsbyl7cmV0dXJuIHQuZXh0ZW5kKGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXIuaW1hZ2VNYW5hZ2VyLmdldFBhdHRlcm4odC5mcm9tLnRvU3RyaW5nKCkpLGE9ci5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LnRvLnRvU3RyaW5nKCkpLG89ci5pbWFnZU1hbmFnZXIuZ2V0UGl4ZWxTaXplKCkscz1vLndpZHRoLGw9by5oZWlnaHQsYz1NYXRoLnBvdygyLG4udGlsZUlELm92ZXJzY2FsZWRaKSx1PW4udGlsZVNpemUqTWF0aC5wb3coMixyLnRyYW5zZm9ybS50aWxlWm9vbSkvYyxmPXUqKG4udGlsZUlELmNhbm9uaWNhbC54K24udGlsZUlELndyYXAqYyksaD11Km4udGlsZUlELmNhbm9uaWNhbC55O3JldHVybnt1X2ltYWdlOjAsdV9wYXR0ZXJuX3RsX2E6aS50bCx1X3BhdHRlcm5fYnJfYTppLmJyLHVfcGF0dGVybl90bF9iOmEudGwsdV9wYXR0ZXJuX2JyX2I6YS5icix1X3RleHNpemU6W3MsbF0sdV9taXg6ZS50LHVfcGF0dGVybl9zaXplX2E6aS5kaXNwbGF5U2l6ZSx1X3BhdHRlcm5fc2l6ZV9iOmEuZGlzcGxheVNpemUsdV9zY2FsZV9hOmUuZnJvbVNjYWxlLHVfc2NhbGVfYjplLnRvU2NhbGUsdV90aWxlX3VuaXRzX3RvX3BpeGVsczoxL3BlKG4sMSxyLnRyYW5zZm9ybS50aWxlWm9vbSksdV9waXhlbF9jb29yZF91cHBlcjpbZj4+MTYsaD4+MTZdLHVfcGl4ZWxfY29vcmRfbG93ZXI6WzY1NTM1JmYsNjU1MzUmaF19fShpLG8sbixhKSx7dV9tYXRyaXg6ZSx1X29wYWNpdHk6cn0pfSxKcj17ZmlsbEV4dHJ1c2lvbjpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2xpZ2h0cG9zOm5ldyB0LlVuaWZvcm0zZihlLHIudV9saWdodHBvcyksdV9saWdodGludGVuc2l0eTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfbGlnaHRpbnRlbnNpdHkpLHVfbGlnaHRjb2xvcjpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfbGlnaHRjb2xvciksdV92ZXJ0aWNhbF9ncmFkaWVudDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfdmVydGljYWxfZ3JhZGllbnQpLHVfb3BhY2l0eTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfb3BhY2l0eSl9fSxmaWxsRXh0cnVzaW9uUGF0dGVybjpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2xpZ2h0cG9zOm5ldyB0LlVuaWZvcm0zZihlLHIudV9saWdodHBvcyksdV9saWdodGludGVuc2l0eTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfbGlnaHRpbnRlbnNpdHkpLHVfbGlnaHRjb2xvcjpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfbGlnaHRjb2xvciksdV92ZXJ0aWNhbF9ncmFkaWVudDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfdmVydGljYWxfZ3JhZGllbnQpLHVfaGVpZ2h0X2ZhY3RvcjpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfaGVpZ2h0X2ZhY3RvciksdV9pbWFnZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UpLHVfdGV4c2l6ZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZSksdV9waXhlbF9jb29yZF91cHBlcjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGl4ZWxfY29vcmRfdXBwZXIpLHVfcGl4ZWxfY29vcmRfbG93ZXI6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BpeGVsX2Nvb3JkX2xvd2VyKSx1X3NjYWxlOm5ldyB0LlVuaWZvcm0zZihlLHIudV9zY2FsZSksdV9mYWRlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9mYWRlKSx1X29wYWNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X29wYWNpdHkpfX0sZmlsbDpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KX19LGZpbGxQYXR0ZXJuOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfcGl4ZWxfY29vcmRfdXBwZXI6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BpeGVsX2Nvb3JkX3VwcGVyKSx1X3BpeGVsX2Nvb3JkX2xvd2VyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF9sb3dlciksdV9zY2FsZTpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfc2NhbGUpLHVfZmFkZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZSl9fSxmaWxsT3V0bGluZTpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X3dvcmxkOm5ldyB0LlVuaWZvcm0yZihlLHIudV93b3JsZCl9fSxmaWxsT3V0bGluZVBhdHRlcm46ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV93b3JsZDpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfd29ybGQpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfcGl4ZWxfY29vcmRfdXBwZXI6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BpeGVsX2Nvb3JkX3VwcGVyKSx1X3BpeGVsX2Nvb3JkX2xvd2VyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF9sb3dlciksdV9zY2FsZTpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfc2NhbGUpLHVfZmFkZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZSl9fSxjaXJjbGU6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSx1X3NjYWxlX3dpdGhfbWFwOm5ldyB0LlVuaWZvcm0xaShlLHIudV9zY2FsZV93aXRoX21hcCksdV9waXRjaF93aXRoX21hcDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcGl0Y2hfd2l0aF9tYXApLHVfZXh0cnVkZV9zY2FsZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfZXh0cnVkZV9zY2FsZSksdV9kZXZpY2VfcGl4ZWxfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2RldmljZV9waXhlbF9yYXRpbyksdV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCl9fSxjb2xsaXNpb25Cb3g6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSx1X3BpeGVsc190b190aWxlX3VuaXRzOm5ldyB0LlVuaWZvcm0xZihlLHIudV9waXhlbHNfdG9fdGlsZV91bml0cyksdV9leHRydWRlX3NjYWxlOm5ldyB0LlVuaWZvcm0yZihlLHIudV9leHRydWRlX3NjYWxlKSx1X292ZXJzY2FsZV9mYWN0b3I6bmV3IHQuVW5pZm9ybTFmKGUsci51X292ZXJzY2FsZV9mYWN0b3IpfX0sY29sbGlzaW9uQ2lyY2xlOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfaW52X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfaW52X21hdHJpeCksdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSx1X3ZpZXdwb3J0X3NpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3ZpZXdwb3J0X3NpemUpfX0sZGVidWc6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9jb2xvcjpuZXcgdC5Vbmlmb3JtQ29sb3IoZSxyLnVfY29sb3IpLHVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfb3ZlcmxheTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfb3ZlcmxheSksdV9vdmVybGF5X3NjYWxlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9vdmVybGF5X3NjYWxlKX19LGNsaXBwaW5nTWFzazpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KX19LGhlYXRtYXA6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9leHRydWRlX3NjYWxlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9leHRydWRlX3NjYWxlKSx1X2ludGVuc2l0eTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfaW50ZW5zaXR5KSx1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KX19LGhlYXRtYXBUZXh0dXJlOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfd29ybGQ6bmV3IHQuVW5pZm9ybTJmKGUsci51X3dvcmxkKSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV9jb2xvcl9yYW1wOm5ldyB0LlVuaWZvcm0xaShlLHIudV9jb2xvcl9yYW1wKSx1X29wYWNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X29wYWNpdHkpfX0saGlsbHNoYWRlOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X2xhdHJhbmdlOm5ldyB0LlVuaWZvcm0yZihlLHIudV9sYXRyYW5nZSksdV9saWdodDpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfbGlnaHQpLHVfc2hhZG93Om5ldyB0LlVuaWZvcm1Db2xvcihlLHIudV9zaGFkb3cpLHVfaGlnaGxpZ2h0Om5ldyB0LlVuaWZvcm1Db2xvcihlLHIudV9oaWdobGlnaHQpLHVfYWNjZW50Om5ldyB0LlVuaWZvcm1Db2xvcihlLHIudV9hY2NlbnQpfX0saGlsbHNoYWRlUHJlcGFyZTpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV9kaW1lbnNpb246bmV3IHQuVW5pZm9ybTJmKGUsci51X2RpbWVuc2lvbiksdV96b29tOm5ldyB0LlVuaWZvcm0xZihlLHIudV96b29tKSx1X21heHpvb206bmV3IHQuVW5pZm9ybTFmKGUsci51X21heHpvb20pLHVfdW5wYWNrOm5ldyB0LlVuaWZvcm00ZihlLHIudV91bnBhY2spfX0sbGluZTpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9yYXRpbyksdV9kZXZpY2VfcGl4ZWxfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2RldmljZV9waXhlbF9yYXRpbyksdV91bml0c190b19waXhlbHM6bmV3IHQuVW5pZm9ybTJmKGUsci51X3VuaXRzX3RvX3BpeGVscyl9fSxsaW5lR3JhZGllbnQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcmF0aW8pLHVfZGV2aWNlX3BpeGVsX3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLHVfdW5pdHNfdG9fcGl4ZWxzOm5ldyB0LlVuaWZvcm0yZihlLHIudV91bml0c190b19waXhlbHMpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKX19LGxpbmVQYXR0ZXJuOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfdGV4c2l6ZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZSksdV9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcmF0aW8pLHVfZGV2aWNlX3BpeGVsX3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X3VuaXRzX3RvX3BpeGVsczpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdW5pdHNfdG9fcGl4ZWxzKSx1X3NjYWxlOm5ldyB0LlVuaWZvcm0zZihlLHIudV9zY2FsZSksdV9mYWRlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9mYWRlKX19LGxpbmVTREY6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcmF0aW8pLHVfZGV2aWNlX3BpeGVsX3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLHVfdW5pdHNfdG9fcGl4ZWxzOm5ldyB0LlVuaWZvcm0yZihlLHIudV91bml0c190b19waXhlbHMpLHVfcGF0dGVybnNjYWxlX2E6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BhdHRlcm5zY2FsZV9hKSx1X3BhdHRlcm5zY2FsZV9iOm5ldyB0LlVuaWZvcm0yZihlLHIudV9wYXR0ZXJuc2NhbGVfYiksdV9zZGZnYW1tYTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2RmZ2FtbWEpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X3RleF95X2E6bmV3IHQuVW5pZm9ybTFmKGUsci51X3RleF95X2EpLHVfdGV4X3lfYjpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfdGV4X3lfYiksdV9taXg6bmV3IHQuVW5pZm9ybTFmKGUsci51X21peCl9fSxyYXN0ZXI6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV90bF9wYXJlbnQ6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RsX3BhcmVudCksdV9zY2FsZV9wYXJlbnQ6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NjYWxlX3BhcmVudCksdV9idWZmZXJfc2NhbGU6bmV3IHQuVW5pZm9ybTFmKGUsci51X2J1ZmZlcl9zY2FsZSksdV9mYWRlX3Q6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ZhZGVfdCksdV9vcGFjaXR5Om5ldyB0LlVuaWZvcm0xZihlLHIudV9vcGFjaXR5KSx1X2ltYWdlMDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UwKSx1X2ltYWdlMTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UxKSx1X2JyaWdodG5lc3NfbG93Om5ldyB0LlVuaWZvcm0xZihlLHIudV9icmlnaHRuZXNzX2xvdyksdV9icmlnaHRuZXNzX2hpZ2g6bmV3IHQuVW5pZm9ybTFmKGUsci51X2JyaWdodG5lc3NfaGlnaCksdV9zYXR1cmF0aW9uX2ZhY3RvcjpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2F0dXJhdGlvbl9mYWN0b3IpLHVfY29udHJhc3RfZmFjdG9yOm5ldyB0LlVuaWZvcm0xZihlLHIudV9jb250cmFzdF9mYWN0b3IpLHVfc3Bpbl93ZWlnaHRzOm5ldyB0LlVuaWZvcm0zZihlLHIudV9zcGluX3dlaWdodHMpfX0sc3ltYm9sSWNvbjpmdW5jdGlvbihlLHIpe3JldHVybnt1X2lzX3NpemVfem9vbV9jb25zdGFudDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50KSx1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSx1X3NpemVfdDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2l6ZV90KSx1X3NpemU6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NpemUpLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksdV9waXRjaDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcGl0Y2gpLHVfcm90YXRlX3N5bWJvbDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcm90YXRlX3N5bWJvbCksdV9hc3BlY3RfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2FzcGVjdF9yYXRpbyksdV9mYWRlX2NoYW5nZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZV9jaGFuZ2UpLHVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfbGFiZWxfcGxhbmVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9sYWJlbF9wbGFuZV9tYXRyaXgpLHVfY29vcmRfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9jb29yZF9tYXRyaXgpLHVfaXNfdGV4dDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfdGV4dCksdV9waXRjaF93aXRoX21hcDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcGl0Y2hfd2l0aF9tYXApLHVfdGV4c2l6ZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZSksdV90ZXh0dXJlOm5ldyB0LlVuaWZvcm0xaShlLHIudV90ZXh0dXJlKX19LHN5bWJvbFNERjpmdW5jdGlvbihlLHIpe3JldHVybnt1X2lzX3NpemVfem9vbV9jb25zdGFudDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50KSx1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSx1X3NpemVfdDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2l6ZV90KSx1X3NpemU6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NpemUpLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksdV9waXRjaDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcGl0Y2gpLHVfcm90YXRlX3N5bWJvbDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcm90YXRlX3N5bWJvbCksdV9hc3BlY3RfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2FzcGVjdF9yYXRpbyksdV9mYWRlX2NoYW5nZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZV9jaGFuZ2UpLHVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfbGFiZWxfcGxhbmVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9sYWJlbF9wbGFuZV9tYXRyaXgpLHVfY29vcmRfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9jb29yZF9tYXRyaXgpLHVfaXNfdGV4dDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfdGV4dCksdV9waXRjaF93aXRoX21hcDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcGl0Y2hfd2l0aF9tYXApLHVfdGV4c2l6ZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZSksdV90ZXh0dXJlOm5ldyB0LlVuaWZvcm0xaShlLHIudV90ZXh0dXJlKSx1X2dhbW1hX3NjYWxlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9nYW1tYV9zY2FsZSksdV9kZXZpY2VfcGl4ZWxfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2RldmljZV9waXhlbF9yYXRpbyksdV9pc19oYWxvOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pc19oYWxvKX19LHN5bWJvbFRleHRBbmRJY29uOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfaXNfc2l6ZV96b29tX2NvbnN0YW50Om5ldyB0LlVuaWZvcm0xaShlLHIudV9pc19zaXplX3pvb21fY29uc3RhbnQpLHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50Om5ldyB0LlVuaWZvcm0xaShlLHIudV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpLHVfc2l6ZV90Om5ldyB0LlVuaWZvcm0xZihlLHIudV9zaXplX3QpLHVfc2l6ZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2l6ZSksdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSx1X3BpdGNoOm5ldyB0LlVuaWZvcm0xZihlLHIudV9waXRjaCksdV9yb3RhdGVfc3ltYm9sOm5ldyB0LlVuaWZvcm0xaShlLHIudV9yb3RhdGVfc3ltYm9sKSx1X2FzcGVjdF9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfYXNwZWN0X3JhdGlvKSx1X2ZhZGVfY2hhbmdlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9mYWRlX2NoYW5nZSksdV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9sYWJlbF9wbGFuZV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X2xhYmVsX3BsYW5lX21hdHJpeCksdV9jb29yZF9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X2Nvb3JkX21hdHJpeCksdV9pc190ZXh0Om5ldyB0LlVuaWZvcm0xaShlLHIudV9pc190ZXh0KSx1X3BpdGNoX3dpdGhfbWFwOm5ldyB0LlVuaWZvcm0xaShlLHIudV9waXRjaF93aXRoX21hcCksdV90ZXhzaXplOm5ldyB0LlVuaWZvcm0yZihlLHIudV90ZXhzaXplKSx1X3RleHNpemVfaWNvbjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZV9pY29uKSx1X3RleHR1cmU6bmV3IHQuVW5pZm9ybTFpKGUsci51X3RleHR1cmUpLHVfdGV4dHVyZV9pY29uOm5ldyB0LlVuaWZvcm0xaShlLHIudV90ZXh0dXJlX2ljb24pLHVfZ2FtbWFfc2NhbGU6bmV3IHQuVW5pZm9ybTFmKGUsci51X2dhbW1hX3NjYWxlKSx1X2RldmljZV9waXhlbF9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSx1X2lzX2hhbG86bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX2hhbG8pfX0sYmFja2dyb3VuZDpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X29wYWNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X29wYWNpdHkpLHVfY29sb3I6bmV3IHQuVW5pZm9ybUNvbG9yKGUsci51X2NvbG9yKX19LGJhY2tncm91bmRQYXR0ZXJuOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfb3BhY2l0eTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfb3BhY2l0eSksdV9pbWFnZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UpLHVfcGF0dGVybl90bF9hOm5ldyB0LlVuaWZvcm0yZihlLHIudV9wYXR0ZXJuX3RsX2EpLHVfcGF0dGVybl9icl9hOm5ldyB0LlVuaWZvcm0yZihlLHIudV9wYXR0ZXJuX2JyX2EpLHVfcGF0dGVybl90bF9iOm5ldyB0LlVuaWZvcm0yZihlLHIudV9wYXR0ZXJuX3RsX2IpLHVfcGF0dGVybl9icl9iOm5ldyB0LlVuaWZvcm0yZihlLHIudV9wYXR0ZXJuX2JyX2IpLHVfdGV4c2l6ZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZSksdV9taXg6bmV3IHQuVW5pZm9ybTFmKGUsci51X21peCksdV9wYXR0ZXJuX3NpemVfYTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybl9zaXplX2EpLHVfcGF0dGVybl9zaXplX2I6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BhdHRlcm5fc2l6ZV9iKSx1X3NjYWxlX2E6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NjYWxlX2EpLHVfc2NhbGVfYjpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2NhbGVfYiksdV9waXhlbF9jb29yZF91cHBlcjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGl4ZWxfY29vcmRfdXBwZXIpLHVfcGl4ZWxfY29vcmRfbG93ZXI6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BpeGVsX2Nvb3JkX2xvd2VyKSx1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzOm5ldyB0LlVuaWZvcm0xZihlLHIudV90aWxlX3VuaXRzX3RvX3BpeGVscyl9fX07ZnVuY3Rpb24gS3IoZSxyLG4saSxhLG8scyl7Zm9yKHZhciBsPWUuY29udGV4dCxjPWwuZ2wsdT1lLnVzZVByb2dyYW0oImNvbGxpc2lvbkJveCIpLGY9W10saD0wLHA9MCxkPTA7ZDxpLmxlbmd0aDtkKyspe3ZhciBtPWlbZF0sZz1yLmdldFRpbGUobSksdj1nLmdldEJ1Y2tldChuKTtpZih2KXt2YXIgeT1tLnBvc01hdHJpeDswPT09YVswXSYmMD09PWFbMV18fCh5PWUudHJhbnNsYXRlUG9zTWF0cml4KG0ucG9zTWF0cml4LGcsYSxvKSk7dmFyIHg9cz92LnRleHRDb2xsaXNpb25Cb3g6di5pY29uQ29sbGlzaW9uQm94LGI9di5jb2xsaXNpb25DaXJjbGVBcnJheTtpZihiLmxlbmd0aD4wKXt2YXIgXz10LmNyZWF0ZSgpLHc9eTt0Lm11bChfLHYucGxhY2VtZW50SW52UHJvak1hdHJpeCxlLnRyYW5zZm9ybS5nbENvb3JkTWF0cml4KSx0Lm11bChfLF8sdi5wbGFjZW1lbnRWaWV3cG9ydE1hdHJpeCksZi5wdXNoKHtjaXJjbGVBcnJheTpiLGNpcmNsZU9mZnNldDpwLHRyYW5zZm9ybTp3LGludlRyYW5zZm9ybTpffSkscD1oKz1iLmxlbmd0aC80fXgmJnUuZHJhdyhsLGMuTElORVMsQXQuZGlzYWJsZWQsTXQuZGlzYWJsZWQsZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksRXQuZGlzYWJsZWQsQ3IoeSxlLnRyYW5zZm9ybSxnKSxuLmlkLHgubGF5b3V0VmVydGV4QnVmZmVyLHguaW5kZXhCdWZmZXIseC5zZWdtZW50cyxudWxsLGUudHJhbnNmb3JtLnpvb20sbnVsbCxudWxsLHguY29sbGlzaW9uVmVydGV4QnVmZmVyKX19aWYocyYmZi5sZW5ndGgpe3ZhciBUPWUudXNlUHJvZ3JhbSgiY29sbGlzaW9uQ2lyY2xlIiksaz1uZXcgdC5TdHJ1Y3RBcnJheUxheW91dDJmMWYyaTE2O2sucmVzaXplKDQqaCksay5fdHJpbSgpO2Zvcih2YXIgQT0wLE09MCxTPWY7TTxTLmxlbmd0aDtNKz0xKWZvcih2YXIgRT1TW01dLEw9MDtMPEUuY2lyY2xlQXJyYXkubGVuZ3RoLzQ7TCsrKXt2YXIgQz00KkwsUD1FLmNpcmNsZUFycmF5W0MrMF0sST1FLmNpcmNsZUFycmF5W0MrMV0sTz1FLmNpcmNsZUFycmF5W0MrMl0sej1FLmNpcmNsZUFycmF5W0MrM107ay5lbXBsYWNlKEErKyxQLEksTyx6LDApLGsuZW1wbGFjZShBKyssUCxJLE8seiwxKSxrLmVtcGxhY2UoQSsrLFAsSSxPLHosMiksay5lbXBsYWNlKEErKyxQLEksTyx6LDMpfSghcXJ8fHFyLmxlbmd0aDwyKmgpJiYocXI9ZnVuY3Rpb24oZSl7dmFyIHI9MiplLG49bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQzdWk2O24ucmVzaXplKHIpLG4uX3RyaW0oKTtmb3IodmFyIGk9MDtpPHI7aSsrKXt2YXIgYT02Kmk7bi51aW50MTZbYSswXT00KmkrMCxuLnVpbnQxNlthKzFdPTQqaSsxLG4udWludDE2W2ErMl09NCppKzIsbi51aW50MTZbYSszXT00KmkrMixuLnVpbnQxNlthKzRdPTQqaSszLG4udWludDE2W2ErNV09NCppKzB9cmV0dXJuIG59KGgpKTtmb3IodmFyIEQ9bC5jcmVhdGVJbmRleEJ1ZmZlcihxciwhMCksUj1sLmNyZWF0ZVZlcnRleEJ1ZmZlcihrLHQuY29sbGlzaW9uQ2lyY2xlTGF5b3V0Lm1lbWJlcnMsITApLEY9MCxCPWY7RjxCLmxlbmd0aDtGKz0xKXt2YXIgTj1CW0ZdLGo9UHIoTi50cmFuc2Zvcm0sTi5pbnZUcmFuc2Zvcm0sZS50cmFuc2Zvcm0pO1QuZHJhdyhsLGMuVFJJQU5HTEVTLEF0LmRpc2FibGVkLE10LmRpc2FibGVkLGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLEV0LmRpc2FibGVkLGosbi5pZCxSLEQsdC5TZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwyKk4uY2lyY2xlT2Zmc2V0LE4uY2lyY2xlQXJyYXkubGVuZ3RoLE4uY2lyY2xlQXJyYXkubGVuZ3RoLzIpLG51bGwsZS50cmFuc2Zvcm0uem9vbSxudWxsLG51bGwsbnVsbCl9Ui5kZXN0cm95KCksRC5kZXN0cm95KCl9fXZhciBRcj10LmlkZW50aXR5KG5ldyBGbG9hdDMyQXJyYXkoMTYpKTtmdW5jdGlvbiAkcihlLHIsbixpLGEsbyl7dmFyIHM9dC5nZXRBbmNob3JBbGlnbm1lbnQoZSksbD0tKHMuaG9yaXpvbnRhbEFsaWduLS41KSpyLGM9LShzLnZlcnRpY2FsQWxpZ24tLjUpKm4sdT10LmV2YWx1YXRlVmFyaWFibGVPZmZzZXQoZSxpKTtyZXR1cm4gbmV3IHQuUG9pbnQoKGwvYSt1WzBdKSpvLChjL2ErdVsxXSkqbyl9ZnVuY3Rpb24gdG4oZSxyLG4saSxhLG8scyxsLGMsdSxmKXt2YXIgaD1lLnRleHQucGxhY2VkU3ltYm9sQXJyYXkscD1lLnRleHQuZHluYW1pY0xheW91dFZlcnRleEFycmF5LGQ9ZS5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSxtPXt9O3AuY2xlYXIoKTtmb3IodmFyIGc9MDtnPGgubGVuZ3RoO2crKyl7dmFyIHY9aC5nZXQoZykseT1lLmFsbG93VmVydGljYWxQbGFjZW1lbnQmJiF2LnBsYWNlZE9yaWVudGF0aW9uLHg9di5oaWRkZW58fCF2LmNyb3NzVGlsZUlEfHx5P251bGw6aVt2LmNyb3NzVGlsZUlEXTtpZih4KXt2YXIgYj1uZXcgdC5Qb2ludCh2LmFuY2hvclgsdi5hbmNob3JZKSxfPXRlKGIsbj9sOnMpLHc9ZWUoby5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLF8uc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhKSxUPWEuZXZhbHVhdGVTaXplRm9yRmVhdHVyZShlLnRleHRTaXplRGF0YSx1LHYpKncvdC5PTkVfRU07biYmKFQqPWUudGlsZVBpeGVsUmF0aW8vYyk7Zm9yKHZhciBrPXgud2lkdGgsQT14LmhlaWdodCxNPSRyKHguYW5jaG9yLGssQSx4LnRleHRPZmZzZXQseC50ZXh0Qm94U2NhbGUsVCksUz1uP3RlKGIuYWRkKE0pLHMpLnBvaW50Ol8ucG9pbnQuYWRkKHI/TS5yb3RhdGUoLW8uYW5nbGUpOk0pLEU9ZS5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiZ2LnBsYWNlZE9yaWVudGF0aW9uPT09dC5Xcml0aW5nTW9kZS52ZXJ0aWNhbD9NYXRoLlBJLzI6MCxMPTA7TDx2Lm51bUdseXBocztMKyspdC5hZGREeW5hbWljQXR0cmlidXRlcyhwLFMsRSk7ZiYmdi5hc3NvY2lhdGVkSWNvbkluZGV4Pj0wJiYobVt2LmFzc29jaWF0ZWRJY29uSW5kZXhdPXtzaGlmdGVkQW5jaG9yOlMsYW5nbGU6RX0pfWVsc2UgdWUodi5udW1HbHlwaHMscCl9aWYoZil7ZC5jbGVhcigpO2Zvcih2YXIgQz1lLmljb24ucGxhY2VkU3ltYm9sQXJyYXksUD0wO1A8Qy5sZW5ndGg7UCsrKXt2YXIgST1DLmdldChQKTtpZihJLmhpZGRlbil1ZShJLm51bUdseXBocyxkKTtlbHNle3ZhciBPPW1bUF07aWYoTylmb3IodmFyIHo9MDt6PEkubnVtR2x5cGhzO3orKyl0LmFkZER5bmFtaWNBdHRyaWJ1dGVzKGQsTy5zaGlmdGVkQW5jaG9yLE8uYW5nbGUpO2Vsc2UgdWUoSS5udW1HbHlwaHMsZCl9fWUuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZCl9ZS50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShwKX1mdW5jdGlvbiBlbih0LGUscil7cmV0dXJuIHIuaWNvbnNJblRleHQmJmU/InN5bWJvbFRleHRBbmRJY29uIjp0PyJzeW1ib2xTREYiOiJzeW1ib2xJY29uIn1mdW5jdGlvbiBybihlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCl7Zm9yKHZhciBwPWUuY29udGV4dCxkPXAuZ2wsbT1lLnRyYW5zZm9ybSxnPSJtYXAiPT09bCx2PSJtYXAiPT09Yyx5PWcmJiJwb2ludCIhPT1uLmxheW91dC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSx4PWcmJiF2JiYheSxiPXZvaWQgMCE9PW4ubGF5b3V0LmdldCgic3ltYm9sLXNvcnQta2V5IikuY29uc3RhbnRPcigxKSxfPWUuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxBdC5SZWFkT25seSksdz1uLmxheW91dC5nZXQoInRleHQtdmFyaWFibGUtYW5jaG9yIiksVD1bXSxrPTAsQT1pO2s8QS5sZW5ndGg7ays9MSl7dmFyIE09QVtrXSxTPXIuZ2V0VGlsZShNKSxFPVMuZ2V0QnVja2V0KG4pO2lmKEUpe3ZhciBMPWE/RS50ZXh0OkUuaWNvbjtpZihMJiZMLnNlZ21lbnRzLmdldCgpLmxlbmd0aCl7dmFyIEM9TC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KG4uaWQpLFA9YXx8RS5zZGZJY29ucyxJPWE/RS50ZXh0U2l6ZURhdGE6RS5pY29uU2l6ZURhdGEsTz12fHwwIT09bS5waXRjaCx6PWUudXNlUHJvZ3JhbShlbihQLGEsRSksQyksRD10LmV2YWx1YXRlU2l6ZUZvclpvb20oSSxtLnpvb20pLFI9dm9pZCAwLEY9WzAsMF0sQj12b2lkIDAsTj12b2lkIDAsaj1udWxsLFU9dm9pZCAwO2lmKGEpe2lmKEI9Uy5nbHlwaEF0bGFzVGV4dHVyZSxOPWQuTElORUFSLFI9Uy5nbHlwaEF0bGFzVGV4dHVyZS5zaXplLEUuaWNvbnNJblRleHQpe0Y9Uy5pbWFnZUF0bGFzVGV4dHVyZS5zaXplLGo9Uy5pbWFnZUF0bGFzVGV4dHVyZTt2YXIgVj0iY29tcG9zaXRlIj09PUkua2luZHx8ImNhbWVyYSI9PT1JLmtpbmQ7VT1PfHxlLm9wdGlvbnMucm90YXRpbmd8fGUub3B0aW9ucy56b29taW5nfHxWP2QuTElORUFSOmQuTkVBUkVTVH19ZWxzZXt2YXIgSD0xIT09bi5sYXlvdXQuZ2V0KCJpY29uLXNpemUiKS5jb25zdGFudE9yKDApfHxFLmljb25zTmVlZExpbmVhcjtCPVMuaW1hZ2VBdGxhc1RleHR1cmUsTj1QfHxlLm9wdGlvbnMucm90YXRpbmd8fGUub3B0aW9ucy56b29taW5nfHxIfHxPP2QuTElORUFSOmQuTkVBUkVTVCxSPVMuaW1hZ2VBdGxhc1RleHR1cmUuc2l6ZX12YXIgcT1wZShTLDEsZS50cmFuc2Zvcm0uem9vbSksRz1RdChNLnBvc01hdHJpeCx2LGcsZS50cmFuc2Zvcm0scSksWT0kdChNLnBvc01hdHJpeCx2LGcsZS50cmFuc2Zvcm0scSksVz13JiZFLmhhc1RleHREYXRhKCksWD0ibm9uZSIhPT1uLmxheW91dC5nZXQoImljb24tdGV4dC1maXQiKSYmVyYmRS5oYXNJY29uRGF0YSgpO3kmJm5lKEUsTS5wb3NNYXRyaXgsZSxhLEcsWSx2LHUpO3ZhciBaPWUudHJhbnNsYXRlUG9zTWF0cml4KE0ucG9zTWF0cml4LFMsbyxzKSxKPXl8fGEmJnd8fFg/UXI6RyxLPWUudHJhbnNsYXRlUG9zTWF0cml4KFksUyxvLHMsITApLFE9UCYmMCE9PW4ucGFpbnQuZ2V0KGE/InRleHQtaGFsby13aWR0aCI6Imljb24taGFsby13aWR0aCIpLmNvbnN0YW50T3IoMSksJD17cHJvZ3JhbTp6LGJ1ZmZlcnM6TCx1bmlmb3JtVmFsdWVzOlA/RS5pY29uc0luVGV4dD9XcihJLmtpbmQsRCx4LHYsZSxaLEosSyxSLEYpOllyKEkua2luZCxELHgsdixlLFosSixLLGEsUiwhMCk6R3IoSS5raW5kLEQseCx2LGUsWixKLEssYSxSKSxhdGxhc1RleHR1cmU6QixhdGxhc1RleHR1cmVJY29uOmosYXRsYXNJbnRlcnBvbGF0aW9uOk4sYXRsYXNJbnRlcnBvbGF0aW9uSWNvbjpVLGlzU0RGOlAsaGFzSGFsbzpRfTtpZihiKWZvcih2YXIgdHQ9MCxldD1MLnNlZ21lbnRzLmdldCgpO3R0PGV0Lmxlbmd0aDt0dCs9MSl7dmFyIHJ0PWV0W3R0XTtULnB1c2goe3NlZ21lbnRzOm5ldyB0LlNlZ21lbnRWZWN0b3IoW3J0XSksc29ydEtleTpydC5zb3J0S2V5LHN0YXRlOiR9KX1lbHNlIFQucHVzaCh7c2VnbWVudHM6TC5zZWdtZW50cyxzb3J0S2V5OjAsc3RhdGU6JH0pfX19YiYmVC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNvcnRLZXktZS5zb3J0S2V5fSkpO2Zvcih2YXIgbnQ9MCxpdD1UO250PGl0Lmxlbmd0aDtudCs9MSl7dmFyIGF0PWl0W250XSxvdD1hdC5zdGF0ZTtpZihwLmFjdGl2ZVRleHR1cmUuc2V0KGQuVEVYVFVSRTApLG90LmF0bGFzVGV4dHVyZS5iaW5kKG90LmF0bGFzSW50ZXJwb2xhdGlvbixkLkNMQU1QX1RPX0VER0UpLG90LmF0bGFzVGV4dHVyZUljb24mJihwLmFjdGl2ZVRleHR1cmUuc2V0KGQuVEVYVFVSRTEpLG90LmF0bGFzVGV4dHVyZUljb24mJm90LmF0bGFzVGV4dHVyZUljb24uYmluZChvdC5hdGxhc0ludGVycG9sYXRpb25JY29uLGQuQ0xBTVBfVE9fRURHRSkpLG90LmlzU0RGKXt2YXIgc3Q9b3QudW5pZm9ybVZhbHVlcztvdC5oYXNIYWxvJiYoc3QudV9pc19oYWxvPTEsbm4ob3QuYnVmZmVycyxhdC5zZWdtZW50cyxuLGUsb3QucHJvZ3JhbSxfLGYsaCxzdCkpLHN0LnVfaXNfaGFsbz0wfW5uKG90LmJ1ZmZlcnMsYXQuc2VnbWVudHMsbixlLG90LnByb2dyYW0sXyxmLGgsb3QudW5pZm9ybVZhbHVlcyl9fWZ1bmN0aW9uIG5uKHQsZSxyLG4saSxhLG8scyxsKXt2YXIgYz1uLmNvbnRleHQsdT1jLmdsO2kuZHJhdyhjLHUuVFJJQU5HTEVTLGEsbyxzLEV0LmRpc2FibGVkLGwsci5pZCx0LmxheW91dFZlcnRleEJ1ZmZlcix0LmluZGV4QnVmZmVyLGUsci5wYWludCxuLnRyYW5zZm9ybS56b29tLHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSx0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIsdC5vcGFjaXR5VmVydGV4QnVmZmVyKX1mdW5jdGlvbiBhbih0LGUscixuLGksYSxvKXt2YXIgcyxsLGMsdSxmLGg9dC5jb250ZXh0LmdsLHA9ci5wYWludC5nZXQoImZpbGwtcGF0dGVybiIpLGQ9cCYmcC5jb25zdGFudE9yKDEpLG09ci5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCk7bz8obD1kJiYhci5nZXRQYWludFByb3BlcnR5KCJmaWxsLW91dGxpbmUtY29sb3IiKT8iZmlsbE91dGxpbmVQYXR0ZXJuIjoiZmlsbE91dGxpbmUiLHM9aC5MSU5FUyk6KGw9ZD8iZmlsbFBhdHRlcm4iOiJmaWxsIixzPWguVFJJQU5HTEVTKTtmb3IodmFyIGc9MCx2PW47Zzx2Lmxlbmd0aDtnKz0xKXt2YXIgeT12W2ddLHg9ZS5nZXRUaWxlKHkpO2lmKCFkfHx4LnBhdHRlcm5zTG9hZGVkKCkpe3ZhciBiPXguZ2V0QnVja2V0KHIpO2lmKGIpe3ZhciBfPWIucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSx3PXQudXNlUHJvZ3JhbShsLF8pO2QmJih0LmNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoaC5URVhUVVJFMCkseC5pbWFnZUF0bGFzVGV4dHVyZS5iaW5kKGguTElORUFSLGguQ0xBTVBfVE9fRURHRSksXy51cGRhdGVQYWludEJ1ZmZlcnMobSkpO3ZhciBUPXAuY29uc3RhbnRPcihudWxsKTtpZihUJiZ4LmltYWdlQXRsYXMpe3ZhciBrPXguaW1hZ2VBdGxhcyxBPWsucGF0dGVyblBvc2l0aW9uc1tULnRvLnRvU3RyaW5nKCldLE09ay5wYXR0ZXJuUG9zaXRpb25zW1QuZnJvbS50b1N0cmluZygpXTtBJiZNJiZfLnNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucyhBLE0pfXZhciBTPXQudHJhbnNsYXRlUG9zTWF0cml4KHkucG9zTWF0cml4LHgsci5wYWludC5nZXQoImZpbGwtdHJhbnNsYXRlIiksci5wYWludC5nZXQoImZpbGwtdHJhbnNsYXRlLWFuY2hvciIpKTtpZihvKXt1PWIuaW5kZXhCdWZmZXIyLGY9Yi5zZWdtZW50czI7dmFyIEU9W2guZHJhd2luZ0J1ZmZlcldpZHRoLGguZHJhd2luZ0J1ZmZlckhlaWdodF07Yz0iZmlsbE91dGxpbmVQYXR0ZXJuIj09PWwmJmQ/RXIoUyx0LG0seCxFKTpTcihTLEUpfWVsc2UgdT1iLmluZGV4QnVmZmVyLGY9Yi5zZWdtZW50cyxjPWQ/TXIoUyx0LG0seCk6QXIoUyk7dy5kcmF3KHQuY29udGV4dCxzLGksdC5zdGVuY2lsTW9kZUZvckNsaXBwaW5nKHkpLGEsRXQuZGlzYWJsZWQsYyxyLmlkLGIubGF5b3V0VmVydGV4QnVmZmVyLHUsZixyLnBhaW50LHQudHJhbnNmb3JtLnpvb20sXyl9fX19ZnVuY3Rpb24gb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPXQuY29udGV4dCxsPXMuZ2wsYz1yLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tcGF0dGVybiIpLHU9Yy5jb25zdGFudE9yKDEpLGY9ci5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCksaD1yLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tb3BhY2l0eSIpLHA9MCxkPW47cDxkLmxlbmd0aDtwKz0xKXt2YXIgbT1kW3BdLGc9ZS5nZXRUaWxlKG0pLHY9Zy5nZXRCdWNrZXQocik7aWYodil7dmFyIHk9di5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLHg9dC51c2VQcm9ncmFtKHU/ImZpbGxFeHRydXNpb25QYXR0ZXJuIjoiZmlsbEV4dHJ1c2lvbiIseSk7dSYmKHQuY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChsLlRFWFRVUkUwKSxnLmltYWdlQXRsYXNUZXh0dXJlLmJpbmQobC5MSU5FQVIsbC5DTEFNUF9UT19FREdFKSx5LnVwZGF0ZVBhaW50QnVmZmVycyhmKSk7dmFyIGI9Yy5jb25zdGFudE9yKG51bGwpO2lmKGImJmcuaW1hZ2VBdGxhcyl7dmFyIF89Zy5pbWFnZUF0bGFzLHc9Xy5wYXR0ZXJuUG9zaXRpb25zW2IudG8udG9TdHJpbmcoKV0sVD1fLnBhdHRlcm5Qb3NpdGlvbnNbYi5mcm9tLnRvU3RyaW5nKCldO3cmJlQmJnkuc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKHcsVCl9dmFyIGs9dC50cmFuc2xhdGVQb3NNYXRyaXgobS5wb3NNYXRyaXgsZyxyLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIiksci5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3IiKSksQT1yLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnQiKSxNPXU/a3Ioayx0LEEsaCxtLGYsZyk6VHIoayx0LEEsaCk7eC5kcmF3KHMscy5nbC5UUklBTkdMRVMsaSxhLG8sRXQuYmFja0NDVyxNLHIuaWQsdi5sYXlvdXRWZXJ0ZXhCdWZmZXIsdi5pbmRleEJ1ZmZlcix2LnNlZ21lbnRzLHIucGFpbnQsdC50cmFuc2Zvcm0uem9vbSx5KX19fWZ1bmN0aW9uIHNuKHQsZSxyLG4saSxhKXt2YXIgbz10LmNvbnRleHQscz1vLmdsLGw9ZS5mYm87aWYobCl7dmFyIGM9dC51c2VQcm9ncmFtKCJoaWxsc2hhZGUiKTtvLmFjdGl2ZVRleHR1cmUuc2V0KHMuVEVYVFVSRTApLHMuYmluZFRleHR1cmUocy5URVhUVVJFXzJELGwuY29sb3JBdHRhY2htZW50LmdldCgpKTt2YXIgdT1mdW5jdGlvbih0LGUscil7dmFyIG49ci5wYWludC5nZXQoImhpbGxzaGFkZS1zaGFkb3ctY29sb3IiKSxpPXIucGFpbnQuZ2V0KCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yIiksYT1yLnBhaW50LmdldCgiaGlsbHNoYWRlLWFjY2VudC1jb2xvciIpLG89ci5wYWludC5nZXQoImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uIikqKE1hdGguUEkvMTgwKTsidmlld3BvcnQiPT09ci5wYWludC5nZXQoImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yIikmJihvLT10LnRyYW5zZm9ybS5hbmdsZSk7dmFyIHM9IXQub3B0aW9ucy5tb3Zpbmc7cmV0dXJue3VfbWF0cml4OnQudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChlLnRpbGVJRC50b1Vud3JhcHBlZCgpLHMpLHVfaW1hZ2U6MCx1X2xhdHJhbmdlOkRyKHQsZS50aWxlSUQpLHVfbGlnaHQ6W3IucGFpbnQuZ2V0KCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uIiksb10sdV9zaGFkb3c6bix1X2hpZ2hsaWdodDppLHVfYWNjZW50OmF9fSh0LGUscik7Yy5kcmF3KG8scy5UUklBTkdMRVMsbixpLGEsRXQuZGlzYWJsZWQsdSxyLmlkLHQucmFzdGVyQm91bmRzQnVmZmVyLHQucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsdC5yYXN0ZXJCb3VuZHNTZWdtZW50cyl9fWZ1bmN0aW9uIGxuKGUscixuLGksYSxvLHMpe3ZhciBsPWUuY29udGV4dCxjPWwuZ2wsdT1yLmRlbTtpZih1JiZ1LmRhdGEpe3ZhciBmPXUuZGltLGg9dS5zdHJpZGUscD11LmdldFBpeGVscygpO2lmKGwuYWN0aXZlVGV4dHVyZS5zZXQoYy5URVhUVVJFMSksbC5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXQoITEpLHIuZGVtVGV4dHVyZT1yLmRlbVRleHR1cmV8fGUuZ2V0VGlsZVRleHR1cmUoaCksci5kZW1UZXh0dXJlKXt2YXIgZD1yLmRlbVRleHR1cmU7ZC51cGRhdGUocCx7cHJlbXVsdGlwbHk6ITF9KSxkLmJpbmQoYy5ORUFSRVNULGMuQ0xBTVBfVE9fRURHRSl9ZWxzZSByLmRlbVRleHR1cmU9bmV3IHQuVGV4dHVyZShsLHAsYy5SR0JBLHtwcmVtdWx0aXBseTohMX0pLHIuZGVtVGV4dHVyZS5iaW5kKGMuTkVBUkVTVCxjLkNMQU1QX1RPX0VER0UpO2wuYWN0aXZlVGV4dHVyZS5zZXQoYy5URVhUVVJFMCk7dmFyIG09ci5mYm87aWYoIW0pe3ZhciBnPW5ldyB0LlRleHR1cmUobCx7d2lkdGg6ZixoZWlnaHQ6ZixkYXRhOm51bGx9LGMuUkdCQSk7Zy5iaW5kKGMuTElORUFSLGMuQ0xBTVBfVE9fRURHRSksKG09ci5mYm89bC5jcmVhdGVGcmFtZWJ1ZmZlcihmLGYsITApKS5jb2xvckF0dGFjaG1lbnQuc2V0KGcudGV4dHVyZSl9bC5iaW5kRnJhbWVidWZmZXIuc2V0KG0uZnJhbWVidWZmZXIpLGwudmlld3BvcnQuc2V0KFswLDAsZixmXSksZS51c2VQcm9ncmFtKCJoaWxsc2hhZGVQcmVwYXJlIikuZHJhdyhsLGMuVFJJQU5HTEVTLGEsbyxzLEV0LmRpc2FibGVkLGZ1bmN0aW9uKGUscixuKXt2YXIgaT1yLnN0cmlkZSxhPXQuY3JlYXRlKCk7cmV0dXJuIHQub3J0aG8oYSwwLHQuRVhURU5ULC10LkVYVEVOVCwwLDAsMSksdC50cmFuc2xhdGUoYSxhLFswLC10LkVYVEVOVCwwXSkse3VfbWF0cml4OmEsdV9pbWFnZToxLHVfZGltZW5zaW9uOltpLGldLHVfem9vbTplLm92ZXJzY2FsZWRaLHVfbWF4em9vbTpuLHVfdW5wYWNrOnIuZ2V0VW5wYWNrVmVjdG9yKCl9fShyLnRpbGVJRCx1LGkpLG4uaWQsZS5yYXN0ZXJCb3VuZHNCdWZmZXIsZS5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcixlLnJhc3RlckJvdW5kc1NlZ21lbnRzKSxyLm5lZWRzSGlsbHNoYWRlUHJlcGFyZT0hMX19ZnVuY3Rpb24gY24oZSxyLG4saSxhKXt2YXIgbz1pLnBhaW50LmdldCgicmFzdGVyLWZhZGUtZHVyYXRpb24iKTtpZihvPjApe3ZhciBzPXQuYnJvd3Nlci5ub3coKSxsPShzLWUudGltZUFkZGVkKS9vLGM9cj8ocy1yLnRpbWVBZGRlZCkvbzotMSx1PW4uZ2V0U291cmNlKCksZj1hLmNvdmVyaW5nWm9vbUxldmVsKHt0aWxlU2l6ZTp1LnRpbGVTaXplLHJvdW5kWm9vbTp1LnJvdW5kWm9vbX0pLGg9IXJ8fE1hdGguYWJzKHIudGlsZUlELm92ZXJzY2FsZWRaLWYpPk1hdGguYWJzKGUudGlsZUlELm92ZXJzY2FsZWRaLWYpLHA9aCYmZS5yZWZyZXNoZWRVcG9uRXhwaXJhdGlvbj8xOnQuY2xhbXAoaD9sOjEtYywwLDEpO3JldHVybiBlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uJiZsPj0xJiYoZS5yZWZyZXNoZWRVcG9uRXhwaXJhdGlvbj0hMSkscj97b3BhY2l0eToxLG1peDoxLXB9OntvcGFjaXR5OnAsbWl4OjB9fXJldHVybntvcGFjaXR5OjEsbWl4OjB9fXZhciB1bj1uZXcgdC5Db2xvcigxLDAsMCwxKSxmbj1uZXcgdC5Db2xvcigwLDEsMCwxKSxobj1uZXcgdC5Db2xvcigwLDAsMSwxKSxwbj1uZXcgdC5Db2xvcigxLDAsMSwxKSxkbj1uZXcgdC5Db2xvcigwLDEsMSwxKTtmdW5jdGlvbiBtbih0KXt2YXIgZT10LnRyYW5zZm9ybS5wYWRkaW5nO2duKHQsdC50cmFuc2Zvcm0uaGVpZ2h0LShlLnRvcHx8MCksMyx1biksZ24odCxlLmJvdHRvbXx8MCwzLGZuKSx2bih0LGUubGVmdHx8MCwzLGhuKSx2bih0LHQudHJhbnNmb3JtLndpZHRoLShlLnJpZ2h0fHwwKSwzLHBuKTt2YXIgcj10LnRyYW5zZm9ybS5jZW50ZXJQb2ludDshZnVuY3Rpb24odCxlLHIsbil7eW4odCxlLTEsci0xMCwyLDIwLG4pLHluKHQsZS0xMCxyLTEsMjAsMixuKX0odCxyLngsdC50cmFuc2Zvcm0uaGVpZ2h0LXIueSxkbil9ZnVuY3Rpb24gZ24odCxlLHIsbil7eW4odCwwLGUrci8yLHQudHJhbnNmb3JtLndpZHRoLHIsbil9ZnVuY3Rpb24gdm4odCxlLHIsbil7eW4odCxlLXIvMiwwLHIsdC50cmFuc2Zvcm0uaGVpZ2h0LG4pfWZ1bmN0aW9uIHluKGUscixuLGksYSxvKXt2YXIgcz1lLmNvbnRleHQsbD1zLmdsO2wuZW5hYmxlKGwuU0NJU1NPUl9URVNUKSxsLnNjaXNzb3Iocip0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyxuKnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLGkqdC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sYSp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbykscy5jbGVhcih7Y29sb3I6b30pLGwuZGlzYWJsZShsLlNDSVNTT1JfVEVTVCl9ZnVuY3Rpb24geG4oZSxyLG4pe3ZhciBpPWUuY29udGV4dCxhPWkuZ2wsbz1uLnBvc01hdHJpeCxzPWUudXNlUHJvZ3JhbSgiZGVidWciKSxsPUF0LmRpc2FibGVkLGM9TXQuZGlzYWJsZWQsdT1lLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtpLmFjdGl2ZVRleHR1cmUuc2V0KGEuVEVYVFVSRTApLGUuZW1wdHlUZXh0dXJlLmJpbmQoYS5MSU5FQVIsYS5DTEFNUF9UT19FREdFKSxzLmRyYXcoaSxhLkxJTkVfU1RSSVAsbCxjLHUsRXQuZGlzYWJsZWQsSXIobyx0LkNvbG9yLnJlZCksIiRkZWJ1ZyIsZS5kZWJ1Z0J1ZmZlcixlLnRpbGVCb3JkZXJJbmRleEJ1ZmZlcixlLmRlYnVnU2VnbWVudHMpO3ZhciBmPXIuZ2V0VGlsZUJ5SUQobi5rZXkpLmxhdGVzdFJhd1RpbGVEYXRhLGg9ZiYmZi5ieXRlTGVuZ3RofHwwLHA9TWF0aC5mbG9vcihoLzEwMjQpLGQ9ci5nZXRUaWxlKG4pLnRpbGVTaXplLG09NTEyL01hdGgubWluKGQsNTEyKSoobi5vdmVyc2NhbGVkWi9lLnRyYW5zZm9ybS56b29tKSouNSxnPW4uY2Fub25pY2FsLnRvU3RyaW5nKCk7bi5vdmVyc2NhbGVkWiE9PW4uY2Fub25pY2FsLnomJihnKz0iID0+ICIrbi5vdmVyc2NhbGVkWiksZnVuY3Rpb24odCxlKXt0LmluaXREZWJ1Z092ZXJsYXlDYW52YXMoKTt2YXIgcj10LmRlYnVnT3ZlcmxheUNhbnZhcyxuPXQuY29udGV4dC5nbCxpPXQuZGVidWdPdmVybGF5Q2FudmFzLmdldENvbnRleHQoIjJkIik7aS5jbGVhclJlY3QoMCwwLHIud2lkdGgsci5oZWlnaHQpLGkuc2hhZG93Q29sb3I9IndoaXRlIixpLnNoYWRvd0JsdXI9MixpLmxpbmVXaWR0aD0xLjUsaS5zdHJva2VTdHlsZT0id2hpdGUiLGkudGV4dEJhc2VsaW5lPSJ0b3AiLGkuZm9udD0iYm9sZCAzNnB4IE9wZW4gU2Fucywgc2Fucy1zZXJpZiIsaS5maWxsVGV4dChlLDUsNSksaS5zdHJva2VUZXh0KGUsNSw1KSx0LmRlYnVnT3ZlcmxheVRleHR1cmUudXBkYXRlKHIpLHQuZGVidWdPdmVybGF5VGV4dHVyZS5iaW5kKG4uTElORUFSLG4uQ0xBTVBfVE9fRURHRSl9KGUsZysiICIrcCsia2IiKSxzLmRyYXcoaSxhLlRSSUFOR0xFUyxsLGMsU3QuYWxwaGFCbGVuZGVkLEV0LmRpc2FibGVkLElyKG8sdC5Db2xvci50cmFuc3BhcmVudCxtKSwiJGRlYnVnIixlLmRlYnVnQnVmZmVyLGUucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsZS5kZWJ1Z1NlZ21lbnRzKX12YXIgYm49e3N5bWJvbDpmdW5jdGlvbihlLHIsbixpLGEpe2lmKCJ0cmFuc2x1Y2VudCI9PT1lLnJlbmRlclBhc3Mpe3ZhciBvPU10LmRpc2FibGVkLHM9ZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk7bi5sYXlvdXQuZ2V0KCJ0ZXh0LXZhcmlhYmxlLWFuY2hvciIpJiZmdW5jdGlvbihlLHIsbixpLGEsbyxzKXtmb3IodmFyIGw9ci50cmFuc2Zvcm0sYz0ibWFwIj09PWEsdT0ibWFwIj09PW8sZj0wLGg9ZTtmPGgubGVuZ3RoO2YrPTEpe3ZhciBwPWhbZl0sZD1pLmdldFRpbGUocCksbT1kLmdldEJ1Y2tldChuKTtpZihtJiZtLnRleHQmJm0udGV4dC5zZWdtZW50cy5nZXQoKS5sZW5ndGgpe3ZhciBnPW0udGV4dFNpemVEYXRhLHY9dC5ldmFsdWF0ZVNpemVGb3Jab29tKGcsbC56b29tKSx5PXBlKGQsMSxyLnRyYW5zZm9ybS56b29tKSx4PVF0KHAucG9zTWF0cml4LHUsYyxyLnRyYW5zZm9ybSx5KSxiPSJub25lIiE9PW4ubGF5b3V0LmdldCgiaWNvbi10ZXh0LWZpdCIpJiZtLmhhc0ljb25EYXRhKCk7aWYodil7dmFyIF89TWF0aC5wb3coMixsLnpvb20tZC50aWxlSUQub3ZlcnNjYWxlZFopO3RuKG0sYyx1LHMsdC5zeW1ib2xTaXplLGwseCxwLnBvc01hdHJpeCxfLHYsYil9fX19KGksZSxuLHIsbi5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpLG4ubGF5b3V0LmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSxhKSwwIT09bi5wYWludC5nZXQoImljb24tb3BhY2l0eSIpLmNvbnN0YW50T3IoMSkmJnJuKGUscixuLGksITEsbi5wYWludC5nZXQoImljb24tdHJhbnNsYXRlIiksbi5wYWludC5nZXQoImljb24tdHJhbnNsYXRlLWFuY2hvciIpLG4ubGF5b3V0LmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSxuLmxheW91dC5nZXQoImljb24tcGl0Y2gtYWxpZ25tZW50Iiksbi5sYXlvdXQuZ2V0KCJpY29uLWtlZXAtdXByaWdodCIpLG8scyksMCE9PW4ucGFpbnQuZ2V0KCJ0ZXh0LW9wYWNpdHkiKS5jb25zdGFudE9yKDEpJiZybihlLHIsbixpLCEwLG4ucGFpbnQuZ2V0KCJ0ZXh0LXRyYW5zbGF0ZSIpLG4ucGFpbnQuZ2V0KCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3IiKSxuLmxheW91dC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50Iiksbi5sYXlvdXQuZ2V0KCJ0ZXh0LXBpdGNoLWFsaWdubWVudCIpLG4ubGF5b3V0LmdldCgidGV4dC1rZWVwLXVwcmlnaHQiKSxvLHMpLHIubWFwLnNob3dDb2xsaXNpb25Cb3hlcyYmKEtyKGUscixuLGksbi5wYWludC5nZXQoInRleHQtdHJhbnNsYXRlIiksbi5wYWludC5nZXQoInRleHQtdHJhbnNsYXRlLWFuY2hvciIpLCEwKSxLcihlLHIsbixpLG4ucGFpbnQuZ2V0KCJpY29uLXRyYW5zbGF0ZSIpLG4ucGFpbnQuZ2V0KCJpY29uLXRyYW5zbGF0ZS1hbmNob3IiKSwhMSkpfX0sY2lyY2xlOmZ1bmN0aW9uKGUscixuLGkpe2lmKCJ0cmFuc2x1Y2VudCI9PT1lLnJlbmRlclBhc3Mpe3ZhciBhPW4ucGFpbnQuZ2V0KCJjaXJjbGUtb3BhY2l0eSIpLG89bi5wYWludC5nZXQoImNpcmNsZS1zdHJva2Utd2lkdGgiKSxzPW4ucGFpbnQuZ2V0KCJjaXJjbGUtc3Ryb2tlLW9wYWNpdHkiKSxsPXZvaWQgMCE9PW4ubGF5b3V0LmdldCgiY2lyY2xlLXNvcnQta2V5IikuY29uc3RhbnRPcigxKTtpZigwIT09YS5jb25zdGFudE9yKDEpfHwwIT09by5jb25zdGFudE9yKDEpJiYwIT09cy5jb25zdGFudE9yKDEpKXtmb3IodmFyIGM9ZS5jb250ZXh0LHU9Yy5nbCxmPWUuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxBdC5SZWFkT25seSksaD1NdC5kaXNhYmxlZCxwPWUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLGQ9W10sbT0wO208aS5sZW5ndGg7bSsrKXt2YXIgZz1pW21dLHY9ci5nZXRUaWxlKGcpLHk9di5nZXRCdWNrZXQobik7aWYoeSl7dmFyIHg9eS5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KG4uaWQpLGI9e3Byb2dyYW1Db25maWd1cmF0aW9uOngscHJvZ3JhbTplLnVzZVByb2dyYW0oImNpcmNsZSIseCksbGF5b3V0VmVydGV4QnVmZmVyOnkubGF5b3V0VmVydGV4QnVmZmVyLGluZGV4QnVmZmVyOnkuaW5kZXhCdWZmZXIsdW5pZm9ybVZhbHVlczpMcihlLGcsdixuKX07aWYobClmb3IodmFyIF89MCx3PXkuc2VnbWVudHMuZ2V0KCk7Xzx3Lmxlbmd0aDtfKz0xKXt2YXIgVD13W19dO2QucHVzaCh7c2VnbWVudHM6bmV3IHQuU2VnbWVudFZlY3RvcihbVF0pLHNvcnRLZXk6VC5zb3J0S2V5LHN0YXRlOmJ9KX1lbHNlIGQucHVzaCh7c2VnbWVudHM6eS5zZWdtZW50cyxzb3J0S2V5OjAsc3RhdGU6Yn0pfX1sJiZkLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc29ydEtleS1lLnNvcnRLZXl9KSk7Zm9yKHZhciBrPTAsQT1kO2s8QS5sZW5ndGg7ays9MSl7dmFyIE09QVtrXSxTPU0uc3RhdGUsRT1TLnByb2dyYW1Db25maWd1cmF0aW9uLEw9Uy5wcm9ncmFtLEM9Uy5sYXlvdXRWZXJ0ZXhCdWZmZXIsUD1TLmluZGV4QnVmZmVyLEk9Uy51bmlmb3JtVmFsdWVzLE89TS5zZWdtZW50cztMLmRyYXcoYyx1LlRSSUFOR0xFUyxmLGgscCxFdC5kaXNhYmxlZCxJLG4uaWQsQyxQLE8sbi5wYWludCxlLnRyYW5zZm9ybS56b29tLEUpfX19fSxoZWF0bWFwOmZ1bmN0aW9uKGUscixuLGkpe2lmKDAhPT1uLnBhaW50LmdldCgiaGVhdG1hcC1vcGFjaXR5IikpaWYoIm9mZnNjcmVlbiI9PT1lLnJlbmRlclBhc3Mpe3ZhciBhPWUuY29udGV4dCxvPWEuZ2wscz1NdC5kaXNhYmxlZCxsPW5ldyBTdChbby5PTkUsby5PTkVdLHQuQ29sb3IudHJhbnNwYXJlbnQsWyEwLCEwLCEwLCEwXSk7IWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmdsO3QuYWN0aXZlVGV4dHVyZS5zZXQobi5URVhUVVJFMSksdC52aWV3cG9ydC5zZXQoWzAsMCxlLndpZHRoLzQsZS5oZWlnaHQvNF0pO3ZhciBpPXIuaGVhdG1hcEZibztpZihpKW4uYmluZFRleHR1cmUobi5URVhUVVJFXzJELGkuY29sb3JBdHRhY2htZW50LmdldCgpKSx0LmJpbmRGcmFtZWJ1ZmZlci5zZXQoaS5mcmFtZWJ1ZmZlcik7ZWxzZXt2YXIgYT1uLmNyZWF0ZVRleHR1cmUoKTtuLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCxhKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Msbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Qsbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLG4uTElORUFSKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NQUdfRklMVEVSLG4uTElORUFSKSxpPXIuaGVhdG1hcEZibz10LmNyZWF0ZUZyYW1lYnVmZmVyKGUud2lkdGgvNCxlLmhlaWdodC80LCExKSxmdW5jdGlvbih0LGUscixuKXt2YXIgaT10LmdsLGE9dC5leHRSZW5kZXJUb1RleHR1cmVIYWxmRmxvYXQ/dC5leHRUZXh0dXJlSGFsZkZsb2F0LkhBTEZfRkxPQVRfT0VTOmkuVU5TSUdORURfQllURTtpLnRleEltYWdlMkQoaS5URVhUVVJFXzJELDAsaS5SR0JBLGUud2lkdGgvNCxlLmhlaWdodC80LDAsaS5SR0JBLGEsbnVsbCksbi5jb2xvckF0dGFjaG1lbnQuc2V0KHIpfSh0LGUsYSxpKX19KGEsZSxuKSxhLmNsZWFyKHtjb2xvcjp0LkNvbG9yLnRyYW5zcGFyZW50fSk7Zm9yKHZhciBjPTA7YzxpLmxlbmd0aDtjKyspe3ZhciB1PWlbY107aWYoIXIuaGFzUmVuZGVyYWJsZVBhcmVudCh1KSl7dmFyIGY9ci5nZXRUaWxlKHUpLGg9Zi5nZXRCdWNrZXQobik7aWYoaCl7dmFyIHA9aC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KG4uaWQpLGQ9ZS51c2VQcm9ncmFtKCJoZWF0bWFwIixwKSxtPWUudHJhbnNmb3JtLnpvb207ZC5kcmF3KGEsby5UUklBTkdMRVMsQXQuZGlzYWJsZWQscyxsLEV0LmRpc2FibGVkLHpyKHUucG9zTWF0cml4LGYsbSxuLnBhaW50LmdldCgiaGVhdG1hcC1pbnRlbnNpdHkiKSksbi5pZCxoLmxheW91dFZlcnRleEJ1ZmZlcixoLmluZGV4QnVmZmVyLGguc2VnbWVudHMsbi5wYWludCxlLnRyYW5zZm9ybS56b29tLHApfX19YS52aWV3cG9ydC5zZXQoWzAsMCxlLndpZHRoLGUuaGVpZ2h0XSl9ZWxzZSJ0cmFuc2x1Y2VudCI9PT1lLnJlbmRlclBhc3MmJihlLmNvbnRleHQuc2V0Q29sb3JNb2RlKGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxmdW5jdGlvbihlLHIpe3ZhciBuPWUuY29udGV4dCxpPW4uZ2wsYT1yLmhlYXRtYXBGYm87aWYoIWEpcmV0dXJuO24uYWN0aXZlVGV4dHVyZS5zZXQoaS5URVhUVVJFMCksaS5iaW5kVGV4dHVyZShpLlRFWFRVUkVfMkQsYS5jb2xvckF0dGFjaG1lbnQuZ2V0KCkpLG4uYWN0aXZlVGV4dHVyZS5zZXQoaS5URVhUVVJFMSk7dmFyIG89ci5jb2xvclJhbXBUZXh0dXJlO298fChvPXIuY29sb3JSYW1wVGV4dHVyZT1uZXcgdC5UZXh0dXJlKG4sci5jb2xvclJhbXAsaS5SR0JBKSk7by5iaW5kKGkuTElORUFSLGkuQ0xBTVBfVE9fRURHRSksZS51c2VQcm9ncmFtKCJoZWF0bWFwVGV4dHVyZSIpLmRyYXcobixpLlRSSUFOR0xFUyxBdC5kaXNhYmxlZCxNdC5kaXNhYmxlZCxlLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSxFdC5kaXNhYmxlZCxmdW5jdGlvbihlLHIsbixpKXt2YXIgYT10LmNyZWF0ZSgpO3Qub3J0aG8oYSwwLGUud2lkdGgsZS5oZWlnaHQsMCwwLDEpO3ZhciBvPWUuY29udGV4dC5nbDtyZXR1cm57dV9tYXRyaXg6YSx1X3dvcmxkOltvLmRyYXdpbmdCdWZmZXJXaWR0aCxvLmRyYXdpbmdCdWZmZXJIZWlnaHRdLHVfaW1hZ2U6bix1X2NvbG9yX3JhbXA6aSx1X29wYWNpdHk6ci5wYWludC5nZXQoImhlYXRtYXAtb3BhY2l0eSIpfX0oZSxyLDAsMSksci5pZCxlLnZpZXdwb3J0QnVmZmVyLGUucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsZS52aWV3cG9ydFNlZ21lbnRzLHIucGFpbnQsZS50cmFuc2Zvcm0uem9vbSl9KGUsbikpfSxsaW5lOmZ1bmN0aW9uKGUscixuLGkpe2lmKCJ0cmFuc2x1Y2VudCI9PT1lLnJlbmRlclBhc3Mpe3ZhciBhPW4ucGFpbnQuZ2V0KCJsaW5lLW9wYWNpdHkiKSxvPW4ucGFpbnQuZ2V0KCJsaW5lLXdpZHRoIik7aWYoMCE9PWEuY29uc3RhbnRPcigxKSYmMCE9PW8uY29uc3RhbnRPcigxKSl7dmFyIHM9ZS5kZXB0aE1vZGVGb3JTdWJsYXllcigwLEF0LlJlYWRPbmx5KSxsPWUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLGM9bi5wYWludC5nZXQoImxpbmUtZGFzaGFycmF5IiksdT1uLnBhaW50LmdldCgibGluZS1wYXR0ZXJuIiksZj11LmNvbnN0YW50T3IoMSksaD1uLnBhaW50LmdldCgibGluZS1ncmFkaWVudCIpLHA9bi5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCksZD1mPyJsaW5lUGF0dGVybiI6Yz8ibGluZVNERiI6aD8ibGluZUdyYWRpZW50IjoibGluZSIsbT1lLmNvbnRleHQsZz1tLmdsLHY9ITA7aWYoaCl7bS5hY3RpdmVUZXh0dXJlLnNldChnLlRFWFRVUkUwKTt2YXIgeT1uLmdyYWRpZW50VGV4dHVyZTtpZighbi5ncmFkaWVudClyZXR1cm47eXx8KHk9bi5ncmFkaWVudFRleHR1cmU9bmV3IHQuVGV4dHVyZShtLG4uZ3JhZGllbnQsZy5SR0JBKSkseS5iaW5kKGcuTElORUFSLGcuQ0xBTVBfVE9fRURHRSl9Zm9yKHZhciB4PTAsYj1pO3g8Yi5sZW5ndGg7eCs9MSl7dmFyIF89Ylt4XSx3PXIuZ2V0VGlsZShfKTtpZighZnx8dy5wYXR0ZXJuc0xvYWRlZCgpKXt2YXIgVD13LmdldEJ1Y2tldChuKTtpZihUKXt2YXIgaz1ULnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobi5pZCksQT1lLmNvbnRleHQucHJvZ3JhbS5nZXQoKSxNPWUudXNlUHJvZ3JhbShkLGspLFM9dnx8TS5wcm9ncmFtIT09QSxFPXUuY29uc3RhbnRPcihudWxsKTtpZihFJiZ3LmltYWdlQXRsYXMpe3ZhciBMPXcuaW1hZ2VBdGxhcyxDPUwucGF0dGVyblBvc2l0aW9uc1tFLnRvLnRvU3RyaW5nKCldLFA9TC5wYXR0ZXJuUG9zaXRpb25zW0UuZnJvbS50b1N0cmluZygpXTtDJiZQJiZrLnNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucyhDLFApfXZhciBJPWY/QnIoZSx3LG4scCk6Yz9OcihlLHcsbixjLHApOmg/RnIoZSx3LG4pOlJyKGUsdyxuKTtmPyhtLmFjdGl2ZVRleHR1cmUuc2V0KGcuVEVYVFVSRTApLHcuaW1hZ2VBdGxhc1RleHR1cmUuYmluZChnLkxJTkVBUixnLkNMQU1QX1RPX0VER0UpLGsudXBkYXRlUGFpbnRCdWZmZXJzKHApKTpjJiYoU3x8ZS5saW5lQXRsYXMuZGlydHkpJiYobS5hY3RpdmVUZXh0dXJlLnNldChnLlRFWFRVUkUwKSxlLmxpbmVBdGxhcy5iaW5kKG0pKSxNLmRyYXcobSxnLlRSSUFOR0xFUyxzLGUuc3RlbmNpbE1vZGVGb3JDbGlwcGluZyhfKSxsLEV0LmRpc2FibGVkLEksbi5pZCxULmxheW91dFZlcnRleEJ1ZmZlcixULmluZGV4QnVmZmVyLFQuc2VnbWVudHMsbi5wYWludCxlLnRyYW5zZm9ybS56b29tLGspLHY9ITF9fX19fX0sZmlsbDpmdW5jdGlvbihlLHIsbixpKXt2YXIgYT1uLnBhaW50LmdldCgiZmlsbC1jb2xvciIpLG89bi5wYWludC5nZXQoImZpbGwtb3BhY2l0eSIpO2lmKDAhPT1vLmNvbnN0YW50T3IoMSkpe3ZhciBzPWUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLGw9bi5wYWludC5nZXQoImZpbGwtcGF0dGVybiIpLGM9ZS5vcGFxdWVQYXNzRW5hYmxlZEZvckxheWVyKCkmJiFsLmNvbnN0YW50T3IoMSkmJjE9PT1hLmNvbnN0YW50T3IodC5Db2xvci50cmFuc3BhcmVudCkuYSYmMT09PW8uY29uc3RhbnRPcigwKT8ib3BhcXVlIjoidHJhbnNsdWNlbnQiO2lmKGUucmVuZGVyUGFzcz09PWMpe3ZhciB1PWUuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMSwib3BhcXVlIj09PWUucmVuZGVyUGFzcz9BdC5SZWFkV3JpdGU6QXQuUmVhZE9ubHkpO2FuKGUscixuLGksdSxzLCExKX1pZigidHJhbnNsdWNlbnQiPT09ZS5yZW5kZXJQYXNzJiZuLnBhaW50LmdldCgiZmlsbC1hbnRpYWxpYXMiKSl7dmFyIGY9ZS5kZXB0aE1vZGVGb3JTdWJsYXllcihuLmdldFBhaW50UHJvcGVydHkoImZpbGwtb3V0bGluZS1jb2xvciIpPzI6MCxBdC5SZWFkT25seSk7YW4oZSxyLG4saSxmLHMsITApfX19LCJmaWxsLWV4dHJ1c2lvbiI6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ci5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiKTtpZigwIT09aSYmInRyYW5zbHVjZW50Ij09PXQucmVuZGVyUGFzcyl7dmFyIGE9bmV3IEF0KHQuY29udGV4dC5nbC5MRVFVQUwsQXQuUmVhZFdyaXRlLHQuZGVwdGhSYW5nZUZvcjNEKTtpZigxIT09aXx8ci5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4iKS5jb25zdGFudE9yKDEpKW9uKHQsZSxyLG4sYSxNdC5kaXNhYmxlZCxTdC5kaXNhYmxlZCksb24odCxlLHIsbixhLHQuc3RlbmNpbE1vZGVGb3IzRCgpLHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTtlbHNle3ZhciBvPXQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO29uKHQsZSxyLG4sYSxNdC5kaXNhYmxlZCxvKX19fSxoaWxsc2hhZGU6ZnVuY3Rpb24odCxlLHIsbil7aWYoIm9mZnNjcmVlbiI9PT10LnJlbmRlclBhc3N8fCJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3Mpe2Zvcih2YXIgaT10LmNvbnRleHQsYT1lLmdldFNvdXJjZSgpLm1heHpvb20sbz10LmRlcHRoTW9kZUZvclN1YmxheWVyKDAsQXQuUmVhZE9ubHkpLHM9dC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksbD0idHJhbnNsdWNlbnQiPT09dC5yZW5kZXJQYXNzP3Quc3RlbmNpbENvbmZpZ0Zvck92ZXJsYXAobik6W3t9LG5dLGM9bFswXSx1PTAsZj1sWzFdO3U8Zi5sZW5ndGg7dSs9MSl7dmFyIGg9Zlt1XSxwPWUuZ2V0VGlsZShoKTtwLm5lZWRzSGlsbHNoYWRlUHJlcGFyZSYmIm9mZnNjcmVlbiI9PT10LnJlbmRlclBhc3M/bG4odCxwLHIsYSxvLE10LmRpc2FibGVkLHMpOiJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3MmJnNuKHQscCxyLG8sY1toLm92ZXJzY2FsZWRaXSxzKX1pLnZpZXdwb3J0LnNldChbMCwwLHQud2lkdGgsdC5oZWlnaHRdKX19LHJhc3RlcjpmdW5jdGlvbih0LGUscixuKXtpZigidHJhbnNsdWNlbnQiPT09dC5yZW5kZXJQYXNzJiYwIT09ci5wYWludC5nZXQoInJhc3Rlci1vcGFjaXR5IikmJm4ubGVuZ3RoKWZvcih2YXIgaT10LmNvbnRleHQsYT1pLmdsLG89ZS5nZXRTb3VyY2UoKSxzPXQudXNlUHJvZ3JhbSgicmFzdGVyIiksbD10LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSxjPW8gaW5zdGFuY2VvZiBJP1t7fSxuXTp0LnN0ZW5jaWxDb25maWdGb3JPdmVybGFwKG4pLHU9Y1swXSxmPWNbMV0saD1mW2YubGVuZ3RoLTFdLm92ZXJzY2FsZWRaLHA9IXQub3B0aW9ucy5tb3ZpbmcsZD0wLG09ZjtkPG0ubGVuZ3RoO2QrPTEpe3ZhciBnPW1bZF0sdj10LmRlcHRoTW9kZUZvclN1YmxheWVyKGcub3ZlcnNjYWxlZFotaCwxPT09ci5wYWludC5nZXQoInJhc3Rlci1vcGFjaXR5Iik/QXQuUmVhZFdyaXRlOkF0LlJlYWRPbmx5LGEuTEVTUykseT1lLmdldFRpbGUoZykseD10LnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoZy50b1Vud3JhcHBlZCgpLHApO3kucmVnaXN0ZXJGYWRlRHVyYXRpb24oci5wYWludC5nZXQoInJhc3Rlci1mYWRlLWR1cmF0aW9uIikpO3ZhciBiPWUuZmluZExvYWRlZFBhcmVudChnLDApLF89Y24oeSxiLGUscix0LnRyYW5zZm9ybSksdz12b2lkIDAsVD12b2lkIDAsaz0ibmVhcmVzdCI9PT1yLnBhaW50LmdldCgicmFzdGVyLXJlc2FtcGxpbmciKT9hLk5FQVJFU1Q6YS5MSU5FQVI7aS5hY3RpdmVUZXh0dXJlLnNldChhLlRFWFRVUkUwKSx5LnRleHR1cmUuYmluZChrLGEuQ0xBTVBfVE9fRURHRSxhLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCksaS5hY3RpdmVUZXh0dXJlLnNldChhLlRFWFRVUkUxKSxiPyhiLnRleHR1cmUuYmluZChrLGEuQ0xBTVBfVE9fRURHRSxhLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCksdz1NYXRoLnBvdygyLGIudGlsZUlELm92ZXJzY2FsZWRaLXkudGlsZUlELm92ZXJzY2FsZWRaKSxUPVt5LnRpbGVJRC5jYW5vbmljYWwueCp3JTEseS50aWxlSUQuY2Fub25pY2FsLnkqdyUxXSk6eS50ZXh0dXJlLmJpbmQoayxhLkNMQU1QX1RPX0VER0UsYS5MSU5FQVJfTUlQTUFQX05FQVJFU1QpO3ZhciBBPVZyKHgsVHx8WzAsMF0sd3x8MSxfLHIpO28gaW5zdGFuY2VvZiBJP3MuZHJhdyhpLGEuVFJJQU5HTEVTLHYsTXQuZGlzYWJsZWQsbCxFdC5kaXNhYmxlZCxBLHIuaWQsby5ib3VuZHNCdWZmZXIsdC5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcixvLmJvdW5kc1NlZ21lbnRzKTpzLmRyYXcoaSxhLlRSSUFOR0xFUyx2LHVbZy5vdmVyc2NhbGVkWl0sbCxFdC5kaXNhYmxlZCxBLHIuaWQsdC5yYXN0ZXJCb3VuZHNCdWZmZXIsdC5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcix0LnJhc3RlckJvdW5kc1NlZ21lbnRzKX19LGJhY2tncm91bmQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIucGFpbnQuZ2V0KCJiYWNrZ3JvdW5kLWNvbG9yIiksaT1yLnBhaW50LmdldCgiYmFja2dyb3VuZC1vcGFjaXR5Iik7aWYoMCE9PWkpe3ZhciBhPXQuY29udGV4dCxvPWEuZ2wscz10LnRyYW5zZm9ybSxsPXMudGlsZVNpemUsYz1yLnBhaW50LmdldCgiYmFja2dyb3VuZC1wYXR0ZXJuIik7aWYoIXQuaXNQYXR0ZXJuTWlzc2luZyhjKSl7dmFyIHU9IWMmJjE9PT1uLmEmJjE9PT1pJiZ0Lm9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKT8ib3BhcXVlIjoidHJhbnNsdWNlbnQiO2lmKHQucmVuZGVyUGFzcz09PXUpe3ZhciBmPU10LmRpc2FibGVkLGg9dC5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCJvcGFxdWUiPT09dT9BdC5SZWFkV3JpdGU6QXQuUmVhZE9ubHkpLHA9dC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksZD10LnVzZVByb2dyYW0oYz8iYmFja2dyb3VuZFBhdHRlcm4iOiJiYWNrZ3JvdW5kIiksbT1zLmNvdmVyaW5nVGlsZXMoe3RpbGVTaXplOmx9KTtjJiYoYS5hY3RpdmVUZXh0dXJlLnNldChvLlRFWFRVUkUwKSx0LmltYWdlTWFuYWdlci5iaW5kKHQuY29udGV4dCkpO2Zvcih2YXIgZz1yLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKSx2PTAseT1tO3Y8eS5sZW5ndGg7dis9MSl7dmFyIHg9eVt2XSxiPXQudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeCh4LnRvVW53cmFwcGVkKCkpLF89Yz9acihiLGksdCxjLHt0aWxlSUQ6eCx0aWxlU2l6ZTpsfSxnKTpYcihiLGksbik7ZC5kcmF3KGEsby5UUklBTkdMRVMsaCxmLHAsRXQuZGlzYWJsZWQsXyxyLmlkLHQudGlsZUV4dGVudEJ1ZmZlcix0LnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLHQudGlsZUV4dGVudFNlZ21lbnRzKX19fX19LGRlYnVnOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl4bih0LGUscltuXSl9LGN1c3RvbTpmdW5jdGlvbih0LGUscil7dmFyIG49dC5jb250ZXh0LGk9ci5pbXBsZW1lbnRhdGlvbjtpZigib2Zmc2NyZWVuIj09PXQucmVuZGVyUGFzcyl7dmFyIGE9aS5wcmVyZW5kZXI7YSYmKHQuc2V0Q3VzdG9tTGF5ZXJEZWZhdWx0cygpLG4uc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxhLmNhbGwoaSxuLmdsLHQudHJhbnNmb3JtLmN1c3RvbUxheWVyTWF0cml4KCkpLG4uc2V0RGlydHkoKSx0LnNldEJhc2VTdGF0ZSgpKX1lbHNlIGlmKCJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3Mpe3Quc2V0Q3VzdG9tTGF5ZXJEZWZhdWx0cygpLG4uc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxuLnNldFN0ZW5jaWxNb2RlKE10LmRpc2FibGVkKTt2YXIgbz0iM2QiPT09aS5yZW5kZXJpbmdNb2RlP25ldyBBdCh0LmNvbnRleHQuZ2wuTEVRVUFMLEF0LlJlYWRXcml0ZSx0LmRlcHRoUmFuZ2VGb3IzRCk6dC5kZXB0aE1vZGVGb3JTdWJsYXllcigwLEF0LlJlYWRPbmx5KTtuLnNldERlcHRoTW9kZShvKSxpLnJlbmRlcihuLmdsLHQudHJhbnNmb3JtLmN1c3RvbUxheWVyTWF0cml4KCkpLG4uc2V0RGlydHkoKSx0LnNldEJhc2VTdGF0ZSgpLG4uYmluZEZyYW1lYnVmZmVyLnNldChudWxsKX19fSxfbj1mdW5jdGlvbih0LGUpe3RoaXMuY29udGV4dD1uZXcgTHQodCksdGhpcy50cmFuc2Zvcm09ZSx0aGlzLl90aWxlVGV4dHVyZXM9e30sdGhpcy5zZXR1cCgpLHRoaXMubnVtU3VibGF5ZXJzPUN0Lm1heFVuZGVyem9vbWluZytDdC5tYXhPdmVyem9vbWluZysxLHRoaXMuZGVwdGhFcHNpbG9uPTEvTWF0aC5wb3coMiwxNiksdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleD1uZXcgTmUsdGhpcy5ncHVUaW1lcnM9e319O19uLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oZSxyKXtpZih0aGlzLndpZHRoPWUqdC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sdGhpcy5oZWlnaHQ9cip0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmNvbnRleHQudmlld3BvcnQuc2V0KFswLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodF0pLHRoaXMuc3R5bGUpZm9yKHZhciBuPTAsaT10aGlzLnN0eWxlLl9vcmRlcjtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07dGhpcy5zdHlsZS5fbGF5ZXJzW2FdLnJlc2l6ZSgpfX0sX24ucHJvdG90eXBlLnNldHVwPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LHI9bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQyaTQ7ci5lbXBsYWNlQmFjaygwLDApLHIuZW1wbGFjZUJhY2sodC5FWFRFTlQsMCksci5lbXBsYWNlQmFjaygwLHQuRVhURU5UKSxyLmVtcGxhY2VCYWNrKHQuRVhURU5ULHQuRVhURU5UKSx0aGlzLnRpbGVFeHRlbnRCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIocixHZS5tZW1iZXJzKSx0aGlzLnRpbGVFeHRlbnRTZWdtZW50cz10LlNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLDAsNCwyKTt2YXIgbj1uZXcgdC5TdHJ1Y3RBcnJheUxheW91dDJpNDtuLmVtcGxhY2VCYWNrKDAsMCksbi5lbXBsYWNlQmFjayh0LkVYVEVOVCwwKSxuLmVtcGxhY2VCYWNrKDAsdC5FWFRFTlQpLG4uZW1wbGFjZUJhY2sodC5FWFRFTlQsdC5FWFRFTlQpLHRoaXMuZGVidWdCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIobixHZS5tZW1iZXJzKSx0aGlzLmRlYnVnU2VnbWVudHM9dC5TZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwwLDQsNSk7dmFyIGk9bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQ0aTg7aS5lbXBsYWNlQmFjaygwLDAsMCwwKSxpLmVtcGxhY2VCYWNrKHQuRVhURU5ULDAsdC5FWFRFTlQsMCksaS5lbXBsYWNlQmFjaygwLHQuRVhURU5ULDAsdC5FWFRFTlQpLGkuZW1wbGFjZUJhY2sodC5FWFRFTlQsdC5FWFRFTlQsdC5FWFRFTlQsdC5FWFRFTlQpLHRoaXMucmFzdGVyQm91bmRzQnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKGksUC5tZW1iZXJzKSx0aGlzLnJhc3RlckJvdW5kc1NlZ21lbnRzPXQuU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsMCw0LDIpO3ZhciBhPW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0Mmk0O2EuZW1wbGFjZUJhY2soMCwwKSxhLmVtcGxhY2VCYWNrKDEsMCksYS5lbXBsYWNlQmFjaygwLDEpLGEuZW1wbGFjZUJhY2soMSwxKSx0aGlzLnZpZXdwb3J0QnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKGEsR2UubWVtYmVycyksdGhpcy52aWV3cG9ydFNlZ21lbnRzPXQuU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsMCw0LDIpO3ZhciBvPW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0MXVpMjtvLmVtcGxhY2VCYWNrKDApLG8uZW1wbGFjZUJhY2soMSksby5lbXBsYWNlQmFjaygzKSxvLmVtcGxhY2VCYWNrKDIpLG8uZW1wbGFjZUJhY2soMCksdGhpcy50aWxlQm9yZGVySW5kZXhCdWZmZXI9ZS5jcmVhdGVJbmRleEJ1ZmZlcihvKTt2YXIgcz1uZXcgdC5TdHJ1Y3RBcnJheUxheW91dDN1aTY7cy5lbXBsYWNlQmFjaygwLDEsMikscy5lbXBsYWNlQmFjaygyLDEsMyksdGhpcy5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcj1lLmNyZWF0ZUluZGV4QnVmZmVyKHMpLHRoaXMuZW1wdHlUZXh0dXJlPW5ldyB0LlRleHR1cmUoZSx7d2lkdGg6MSxoZWlnaHQ6MSxkYXRhOm5ldyBVaW50OEFycmF5KFswLDAsMCwwXSl9LGUuZ2wuUkdCQSk7dmFyIGw9dGhpcy5jb250ZXh0LmdsO3RoaXMuc3RlbmNpbENsZWFyTW9kZT1uZXcgTXQoe2Z1bmM6bC5BTFdBWVMsbWFzazowfSwwLDI1NSxsLlpFUk8sbC5aRVJPLGwuWkVSTyl9LF9uLnByb3RvdHlwZS5jbGVhclN0ZW5jaWw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQscj1lLmdsO3RoaXMubmV4dFN0ZW5jaWxJRD0xLHRoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2U9dm9pZCAwO3ZhciBuPXQuY3JlYXRlKCk7dC5vcnRobyhuLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCwwLDAsMSksdC5zY2FsZShuLG4sW3IuZHJhd2luZ0J1ZmZlcldpZHRoLHIuZHJhd2luZ0J1ZmZlckhlaWdodCwwXSksdGhpcy51c2VQcm9ncmFtKCJjbGlwcGluZ01hc2siKS5kcmF3KGUsci5UUklBTkdMRVMsQXQuZGlzYWJsZWQsdGhpcy5zdGVuY2lsQ2xlYXJNb2RlLFN0LmRpc2FibGVkLEV0LmRpc2FibGVkLE9yKG4pLCIkY2xpcHBpbmciLHRoaXMudmlld3BvcnRCdWZmZXIsdGhpcy5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcix0aGlzLnZpZXdwb3J0U2VnbWVudHMpfSxfbi5wcm90b3R5cGUuX3JlbmRlclRpbGVDbGlwcGluZ01hc2tzPWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZSE9PXQuc291cmNlJiZ0LmlzVGlsZUNsaXBwZWQoKSYmZSYmZS5sZW5ndGgpe3RoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2U9dC5zb3VyY2U7dmFyIHI9dGhpcy5jb250ZXh0LG49ci5nbDt0aGlzLm5leHRTdGVuY2lsSUQrZS5sZW5ndGg+MjU2JiZ0aGlzLmNsZWFyU3RlbmNpbCgpLHIuc2V0Q29sb3JNb2RlKFN0LmRpc2FibGVkKSxyLnNldERlcHRoTW9kZShBdC5kaXNhYmxlZCk7dmFyIGk9dGhpcy51c2VQcm9ncmFtKCJjbGlwcGluZ01hc2siKTt0aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzPXt9O2Zvcih2YXIgYT0wLG89ZTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD10aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzW3Mua2V5XT10aGlzLm5leHRTdGVuY2lsSUQrKztpLmRyYXcocixuLlRSSUFOR0xFUyxBdC5kaXNhYmxlZCxuZXcgTXQoe2Z1bmM6bi5BTFdBWVMsbWFzazowfSxsLDI1NSxuLktFRVAsbi5LRUVQLG4uUkVQTEFDRSksU3QuZGlzYWJsZWQsRXQuZGlzYWJsZWQsT3Iocy5wb3NNYXRyaXgpLCIkY2xpcHBpbmciLHRoaXMudGlsZUV4dGVudEJ1ZmZlcix0aGlzLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLHRoaXMudGlsZUV4dGVudFNlZ21lbnRzKX19fSxfbi5wcm90b3R5cGUuc3RlbmNpbE1vZGVGb3IzRD1mdW5jdGlvbigpe3RoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2U9dm9pZCAwLHRoaXMubmV4dFN0ZW5jaWxJRCsxPjI1NiYmdGhpcy5jbGVhclN0ZW5jaWwoKTt2YXIgdD10aGlzLm5leHRTdGVuY2lsSUQrKyxlPXRoaXMuY29udGV4dC5nbDtyZXR1cm4gbmV3IE10KHtmdW5jOmUuTk9URVFVQUwsbWFzazoyNTV9LHQsMjU1LGUuS0VFUCxlLktFRVAsZS5SRVBMQUNFKX0sX24ucHJvdG90eXBlLnN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3JldHVybiBuZXcgTXQoe2Z1bmM6ZS5FUVVBTCxtYXNrOjI1NX0sdGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEc1t0LmtleV0sMCxlLktFRVAsZS5LRUVQLGUuUkVQTEFDRSl9LF9uLnByb3RvdHlwZS5zdGVuY2lsQ29uZmlnRm9yT3ZlcmxhcD1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuY29udGV4dC5nbCxuPXQuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5vdmVyc2NhbGVkWi10Lm92ZXJzY2FsZWRafSkpLGk9bltuLmxlbmd0aC0xXS5vdmVyc2NhbGVkWixhPW5bMF0ub3ZlcnNjYWxlZFotaSsxO2lmKGE+MSl7dGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZT12b2lkIDAsdGhpcy5uZXh0U3RlbmNpbElEK2E+MjU2JiZ0aGlzLmNsZWFyU3RlbmNpbCgpO2Zvcih2YXIgbz17fSxzPTA7czxhO3MrKylvW3MraV09bmV3IE10KHtmdW5jOnIuR0VRVUFMLG1hc2s6MjU1fSxzK3RoaXMubmV4dFN0ZW5jaWxJRCwyNTUsci5LRUVQLHIuS0VFUCxyLlJFUExBQ0UpO3JldHVybiB0aGlzLm5leHRTdGVuY2lsSUQrPWEsW28sbl19cmV0dXJuWyhlPXt9LGVbaV09TXQuZGlzYWJsZWQsZSksbl19LF9uLnByb3RvdHlwZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO2lmKHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcil7cmV0dXJuIG5ldyBTdChbZS5DT05TVEFOVF9DT0xPUixlLk9ORV0sbmV3IHQuQ29sb3IoMS84LDEvOCwxLzgsMCksWyEwLCEwLCEwLCEwXSl9cmV0dXJuIm9wYXF1ZSI9PT10aGlzLnJlbmRlclBhc3M/U3QudW5ibGVuZGVkOlN0LmFscGhhQmxlbmRlZH0sX24ucHJvdG90eXBlLmRlcHRoTW9kZUZvclN1YmxheWVyPWZ1bmN0aW9uKHQsZSxyKXtpZighdGhpcy5vcGFxdWVQYXNzRW5hYmxlZEZvckxheWVyKCkpcmV0dXJuIEF0LmRpc2FibGVkO3ZhciBuPTEtKCgxK3RoaXMuY3VycmVudExheWVyKSp0aGlzLm51bVN1YmxheWVycyt0KSp0aGlzLmRlcHRoRXBzaWxvbjtyZXR1cm4gbmV3IEF0KHJ8fHRoaXMuY29udGV4dC5nbC5MRVFVQUwsZSxbbixuXSl9LF9uLnByb3RvdHlwZS5vcGFxdWVQYXNzRW5hYmxlZEZvckxheWVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudExheWVyPHRoaXMub3BhcXVlUGFzc0N1dG9mZn0sX24ucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dGhpcy5zdHlsZT1lLHRoaXMub3B0aW9ucz1yLHRoaXMubGluZUF0bGFzPWUubGluZUF0bGFzLHRoaXMuaW1hZ2VNYW5hZ2VyPWUuaW1hZ2VNYW5hZ2VyLHRoaXMuZ2x5cGhNYW5hZ2VyPWUuZ2x5cGhNYW5hZ2VyLHRoaXMuc3ltYm9sRmFkZUNoYW5nZT1lLnBsYWNlbWVudC5zeW1ib2xGYWRlQ2hhbmdlKHQuYnJvd3Nlci5ub3coKSksdGhpcy5pbWFnZU1hbmFnZXIuYmVnaW5GcmFtZSgpO3ZhciBpPXRoaXMuc3R5bGUuX29yZGVyLGE9dGhpcy5zdHlsZS5zb3VyY2VDYWNoZXM7Zm9yKHZhciBvIGluIGEpe3ZhciBzPWFbb107cy51c2VkJiZzLnByZXBhcmUodGhpcy5jb250ZXh0KX12YXIgbCxjLHU9e30sZj17fSxoPXt9O2Zvcih2YXIgcCBpbiBhKXt2YXIgZD1hW3BdO3VbcF09ZC5nZXRWaXNpYmxlQ29vcmRpbmF0ZXMoKSxmW3BdPXVbcF0uc2xpY2UoKS5yZXZlcnNlKCksaFtwXT1kLmdldFZpc2libGVDb29yZGluYXRlcyghMCkucmV2ZXJzZSgpfXRoaXMub3BhcXVlUGFzc0N1dG9mZj0xLzA7Zm9yKHZhciBtPTA7bTxpLmxlbmd0aDttKyspe3ZhciBnPWlbbV07aWYodGhpcy5zdHlsZS5fbGF5ZXJzW2ddLmlzM0QoKSl7dGhpcy5vcGFxdWVQYXNzQ3V0b2ZmPW07YnJlYWt9fXRoaXMucmVuZGVyUGFzcz0ib2Zmc2NyZWVuIjtmb3IodmFyIHY9MCx5PWk7djx5Lmxlbmd0aDt2Kz0xKXt2YXIgeD15W3ZdLGI9dGhpcy5zdHlsZS5fbGF5ZXJzW3hdO2lmKGIuaGFzT2Zmc2NyZWVuUGFzcygpJiYhYi5pc0hpZGRlbih0aGlzLnRyYW5zZm9ybS56b29tKSl7dmFyIF89ZltiLnNvdXJjZV07KCJjdXN0b20iPT09Yi50eXBlfHxfLmxlbmd0aCkmJnRoaXMucmVuZGVyTGF5ZXIodGhpcyxhW2Iuc291cmNlXSxiLF8pfX1mb3IodGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQobnVsbCksdGhpcy5jb250ZXh0LmNsZWFyKHtjb2xvcjpyLnNob3dPdmVyZHJhd0luc3BlY3Rvcj90LkNvbG9yLmJsYWNrOnQuQ29sb3IudHJhbnNwYXJlbnQsZGVwdGg6MX0pLHRoaXMuY2xlYXJTdGVuY2lsKCksdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yPXIuc2hvd092ZXJkcmF3SW5zcGVjdG9yLHRoaXMuZGVwdGhSYW5nZUZvcjNEPVswLDEtKGUuX29yZGVyLmxlbmd0aCsyKSp0aGlzLm51bVN1YmxheWVycyp0aGlzLmRlcHRoRXBzaWxvbl0sdGhpcy5yZW5kZXJQYXNzPSJvcGFxdWUiLHRoaXMuY3VycmVudExheWVyPWkubGVuZ3RoLTE7dGhpcy5jdXJyZW50TGF5ZXI+PTA7dGhpcy5jdXJyZW50TGF5ZXItLSl7dmFyIHc9dGhpcy5zdHlsZS5fbGF5ZXJzW2lbdGhpcy5jdXJyZW50TGF5ZXJdXSxUPWFbdy5zb3VyY2VdLGs9dVt3LnNvdXJjZV07dGhpcy5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3ModyxrKSx0aGlzLnJlbmRlckxheWVyKHRoaXMsVCx3LGspfWZvcih0aGlzLnJlbmRlclBhc3M9InRyYW5zbHVjZW50Iix0aGlzLmN1cnJlbnRMYXllcj0wO3RoaXMuY3VycmVudExheWVyPGkubGVuZ3RoO3RoaXMuY3VycmVudExheWVyKyspe3ZhciBBPXRoaXMuc3R5bGUuX2xheWVyc1tpW3RoaXMuY3VycmVudExheWVyXV0sTT1hW0Euc291cmNlXSxTPSgic3ltYm9sIj09PUEudHlwZT9oOmYpW0Euc291cmNlXTt0aGlzLl9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcyhBLHVbQS5zb3VyY2VdKSx0aGlzLnJlbmRlckxheWVyKHRoaXMsTSxBLFMpfXRoaXMub3B0aW9ucy5zaG93VGlsZUJvdW5kYXJpZXMmJih0LnZhbHVlcyh0aGlzLnN0eWxlLl9sYXllcnMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Quc291cmNlJiYhdC5pc0hpZGRlbihuLnRyYW5zZm9ybS56b29tKSYmKHQuc291cmNlIT09KGMmJmMuaWQpJiYoYz1uLnN0eWxlLnNvdXJjZUNhY2hlc1t0LnNvdXJjZV0pLCghbHx8bC5nZXRTb3VyY2UoKS5tYXh6b29tPGMuZ2V0U291cmNlKCkubWF4em9vbSkmJihsPWMpKX0pKSxsJiZibi5kZWJ1Zyh0aGlzLGwsbC5nZXRWaXNpYmxlQ29vcmRpbmF0ZXMoKSkpO3RoaXMub3B0aW9ucy5zaG93UGFkZGluZyYmbW4odGhpcyksdGhpcy5jb250ZXh0LnNldERlZmF1bHQoKX0sX24ucHJvdG90eXBlLnJlbmRlckxheWVyPWZ1bmN0aW9uKHQsZSxyLG4pe3IuaXNIaWRkZW4odGhpcy50cmFuc2Zvcm0uem9vbSl8fCgiYmFja2dyb3VuZCI9PT1yLnR5cGV8fCJjdXN0b20iPT09ci50eXBlfHxuLmxlbmd0aCkmJih0aGlzLmlkPXIuaWQsdGhpcy5ncHVUaW1pbmdTdGFydChyKSxibltyLnR5cGVdKHQsZSxyLG4sdGhpcy5zdHlsZS5wbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzKSx0aGlzLmdwdVRpbWluZ0VuZCgpKX0sX24ucHJvdG90eXBlLmdwdVRpbWluZ1N0YXJ0PWZ1bmN0aW9uKHQpe2lmKHRoaXMub3B0aW9ucy5ncHVUaW1pbmcpe3ZhciBlPXRoaXMuY29udGV4dC5leHRUaW1lclF1ZXJ5LHI9dGhpcy5ncHVUaW1lcnNbdC5pZF07cnx8KHI9dGhpcy5ncHVUaW1lcnNbdC5pZF09e2NhbGxzOjAsY3B1VGltZTowLHF1ZXJ5OmUuY3JlYXRlUXVlcnlFWFQoKX0pLHIuY2FsbHMrKyxlLmJlZ2luUXVlcnlFWFQoZS5USU1FX0VMQVBTRURfRVhULHIucXVlcnkpfX0sX24ucHJvdG90eXBlLmdwdVRpbWluZ0VuZD1mdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5ncHVUaW1pbmcpe3ZhciB0PXRoaXMuY29udGV4dC5leHRUaW1lclF1ZXJ5O3QuZW5kUXVlcnlFWFQodC5USU1FX0VMQVBTRURfRVhUKX19LF9uLnByb3RvdHlwZS5jb2xsZWN0R3B1VGltZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncHVUaW1lcnM7cmV0dXJuIHRoaXMuZ3B1VGltZXJzPXt9LHR9LF9uLnByb3RvdHlwZS5xdWVyeUdwdVRpbWVycz1mdW5jdGlvbih0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdCl7dmFyIG49dFtyXSxpPXRoaXMuY29udGV4dC5leHRUaW1lclF1ZXJ5LGE9aS5nZXRRdWVyeU9iamVjdEVYVChuLnF1ZXJ5LGkuUVVFUllfUkVTVUxUX0VYVCkvMWU2O2kuZGVsZXRlUXVlcnlFWFQobi5xdWVyeSksZVtyXT1hfXJldHVybiBlfSxfbi5wcm90b3R5cGUudHJhbnNsYXRlUG9zTWF0cml4PWZ1bmN0aW9uKGUscixuLGksYSl7aWYoIW5bMF0mJiFuWzFdKXJldHVybiBlO3ZhciBvPWE/Im1hcCI9PT1pP3RoaXMudHJhbnNmb3JtLmFuZ2xlOjA6InZpZXdwb3J0Ij09PWk/LXRoaXMudHJhbnNmb3JtLmFuZ2xlOjA7aWYobyl7dmFyIHM9TWF0aC5zaW4obyksbD1NYXRoLmNvcyhvKTtuPVtuWzBdKmwtblsxXSpzLG5bMF0qcytuWzFdKmxdfXZhciBjPVthP25bMF06cGUocixuWzBdLHRoaXMudHJhbnNmb3JtLnpvb20pLGE/blsxXTpwZShyLG5bMV0sdGhpcy50cmFuc2Zvcm0uem9vbSksMF0sdT1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gdC50cmFuc2xhdGUodSxlLGMpLHV9LF9uLnByb3RvdHlwZS5zYXZlVGlsZVRleHR1cmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZVRleHR1cmVzW3Quc2l6ZVswXV07ZT9lLnB1c2godCk6dGhpcy5fdGlsZVRleHR1cmVzW3Quc2l6ZVswXV09W3RdfSxfbi5wcm90b3R5cGUuZ2V0VGlsZVRleHR1cmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZVRleHR1cmVzW3RdO3JldHVybiBlJiZlLmxlbmd0aD4wP2UucG9wKCk6bnVsbH0sX24ucHJvdG90eXBlLmlzUGF0dGVybk1pc3Npbmc9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuITE7aWYoIXQuZnJvbXx8IXQudG8pcmV0dXJuITA7dmFyIGU9dGhpcy5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LmZyb20udG9TdHJpbmcoKSkscj10aGlzLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQudG8udG9TdHJpbmcoKSk7cmV0dXJuIWV8fCFyfSxfbi5wcm90b3R5cGUudXNlUHJvZ3JhbT1mdW5jdGlvbih0LGUpe3RoaXMuY2FjaGU9dGhpcy5jYWNoZXx8e307dmFyIHI9IiIrdCsoZT9lLmNhY2hlS2V5OiIiKSsodGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yPyIvb3ZlcmRyYXciOiIiKTtyZXR1cm4gdGhpcy5jYWNoZVtyXXx8KHRoaXMuY2FjaGVbcl09bmV3IF9yKHRoaXMuY29udGV4dCx4clt0XSxlLEpyW3RdLHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvcikpLHRoaXMuY2FjaGVbcl19LF9uLnByb3RvdHlwZS5zZXRDdXN0b21MYXllckRlZmF1bHRzPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LnVuYmluZFZBTygpLHRoaXMuY29udGV4dC5jdWxsRmFjZS5zZXREZWZhdWx0KCksdGhpcy5jb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0RGVmYXVsdCgpLHRoaXMuY29udGV4dC5waXhlbFN0b3JlVW5wYWNrLnNldERlZmF1bHQoKSx0aGlzLmNvbnRleHQucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0RGVmYXVsdCgpLHRoaXMuY29udGV4dC5waXhlbFN0b3JlVW5wYWNrRmxpcFkuc2V0RGVmYXVsdCgpfSxfbi5wcm90b3R5cGUuc2V0QmFzZVN0YXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZXh0LmdsO3RoaXMuY29udGV4dC5jdWxsRmFjZS5zZXQoITEpLHRoaXMuY29udGV4dC52aWV3cG9ydC5zZXQoWzAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0XSksdGhpcy5jb250ZXh0LmJsZW5kRXF1YXRpb24uc2V0KHQuRlVOQ19BREQpfSxfbi5wcm90b3R5cGUuaW5pdERlYnVnT3ZlcmxheUNhbnZhcz1mdW5jdGlvbigpe2lmKG51bGw9PXRoaXMuZGVidWdPdmVybGF5Q2FudmFzKXt0aGlzLmRlYnVnT3ZlcmxheUNhbnZhcz10LndpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0aGlzLmRlYnVnT3ZlcmxheUNhbnZhcy53aWR0aD01MTIsdGhpcy5kZWJ1Z092ZXJsYXlDYW52YXMuaGVpZ2h0PTUxMjt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5kZWJ1Z092ZXJsYXlUZXh0dXJlPW5ldyB0LlRleHR1cmUodGhpcy5jb250ZXh0LHRoaXMuZGVidWdPdmVybGF5Q2FudmFzLGUuUkdCQSl9fSxfbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZW1wdHlUZXh0dXJlLmRlc3Ryb3koKSx0aGlzLmRlYnVnT3ZlcmxheVRleHR1cmUmJnRoaXMuZGVidWdPdmVybGF5VGV4dHVyZS5kZXN0cm95KCl9O3ZhciB3bj1mdW5jdGlvbih0LGUpe3RoaXMucG9pbnRzPXQsdGhpcy5wbGFuZXM9ZX07d24uZnJvbUludlByb2plY3Rpb25NYXRyaXg9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPU1hdGgucG93KDIsbiksYT1bWy0xLDEsLTEsMV0sWzEsMSwtMSwxXSxbMSwtMSwtMSwxXSxbLTEsLTEsLTEsMV0sWy0xLDEsMSwxXSxbMSwxLDEsMV0sWzEsLTEsMSwxXSxbLTEsLTEsMSwxXV0ubWFwKChmdW5jdGlvbihyKXtyZXR1cm4gdC50cmFuc2Zvcm1NYXQ0KFtdLHIsZSl9KSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdC5zY2FsZSQxKFtdLGUsMS9lWzNdL3IqaSl9KSksbz1bWzAsMSwyXSxbNiw1LDRdLFswLDMsN10sWzIsMSw1XSxbMywyLDZdLFswLDQsNV1dLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHI9dC5zdWIoW10sYVtlWzBdXSxhW2VbMV1dKSxuPXQuc3ViKFtdLGFbZVsyXV0sYVtlWzFdXSksaT10Lm5vcm1hbGl6ZShbXSx0LmNyb3NzKFtdLHIsbikpLG89LXQuZG90KGksYVtlWzFdXSk7cmV0dXJuIGkuY29uY2F0KG8pfSkpO3JldHVybiBuZXcgd24oYSxvKX07dmFyIFRuPWZ1bmN0aW9uKGUscil7dGhpcy5taW49ZSx0aGlzLm1heD1yLHRoaXMuY2VudGVyPXQuc2NhbGUkMihbXSx0LmFkZChbXSx0aGlzLm1pbix0aGlzLm1heCksLjUpfTtUbi5wcm90b3R5cGUucXVhZHJhbnQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciByPVtlJTI9PTAsZTwyXSxuPXQuY2xvbmUkMih0aGlzLm1pbiksaT10LmNsb25lJDIodGhpcy5tYXgpLGE9MDthPHIubGVuZ3RoO2ErKyluW2FdPXJbYV0/dGhpcy5taW5bYV06dGhpcy5jZW50ZXJbYV0saVthXT1yW2FdP3RoaXMuY2VudGVyW2FdOnRoaXMubWF4W2FdO3JldHVybiBpWzJdPXRoaXMubWF4WzJdLG5ldyBUbihuLGkpfSxUbi5wcm90b3R5cGUuZGlzdGFuY2VYPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChNYXRoLm1pbih0aGlzLm1heFswXSx0WzBdKSx0aGlzLm1pblswXSktdFswXX0sVG4ucHJvdG90eXBlLmRpc3RhbmNlWT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4odGhpcy5tYXhbMV0sdFsxXSksdGhpcy5taW5bMV0pLXRbMV19LFRuLnByb3RvdHlwZS5pbnRlcnNlY3RzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1bW3RoaXMubWluWzBdLHRoaXMubWluWzFdLDAsMV0sW3RoaXMubWF4WzBdLHRoaXMubWluWzFdLDAsMV0sW3RoaXMubWF4WzBdLHRoaXMubWF4WzFdLDAsMV0sW3RoaXMubWluWzBdLHRoaXMubWF4WzFdLDAsMV1dLG49ITAsaT0wO2k8ZS5wbGFuZXMubGVuZ3RoO2krKyl7Zm9yKHZhciBhPWUucGxhbmVzW2ldLG89MCxzPTA7czxyLmxlbmd0aDtzKyspbys9dC5kb3QkMShhLHJbc10pPj0wO2lmKDA9PT1vKXJldHVybiAwO28hPT1yLmxlbmd0aCYmKG49ITEpfWlmKG4pcmV0dXJuIDI7Zm9yKHZhciBsPTA7bDwzO2wrKyl7Zm9yKHZhciBjPU51bWJlci5NQVhfVkFMVUUsdT0tTnVtYmVyLk1BWF9WQUxVRSxmPTA7ZjxlLnBvaW50cy5sZW5ndGg7ZisrKXt2YXIgaD1lLnBvaW50c1tmXVtsXS10aGlzLm1pbltsXTtjPU1hdGgubWluKGMsaCksdT1NYXRoLm1heCh1LGgpfWlmKHU8MHx8Yz50aGlzLm1heFtsXS10aGlzLm1pbltsXSlyZXR1cm4gMH1yZXR1cm4gMX07dmFyIGtuPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PWUmJihlPTApLHZvaWQgMD09PXImJihyPTApLHZvaWQgMD09PW4mJihuPTApLGlzTmFOKHQpfHx0PDB8fGlzTmFOKGUpfHxlPDB8fGlzTmFOKHIpfHxyPDB8fGlzTmFOKG4pfHxuPDApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVlIGZvciBlZGdlLWluc2V0cywgdG9wLCBib3R0b20sIGxlZnQgYW5kIHJpZ2h0IG11c3QgYWxsIGJlIG51bWJlcnMiKTt0aGlzLnRvcD10LHRoaXMuYm90dG9tPWUsdGhpcy5sZWZ0PXIsdGhpcy5yaWdodD1ufTtrbi5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBudWxsIT1yLnRvcCYmbnVsbCE9ZS50b3AmJih0aGlzLnRvcD10Lm51bWJlcihlLnRvcCxyLnRvcCxuKSksbnVsbCE9ci5ib3R0b20mJm51bGwhPWUuYm90dG9tJiYodGhpcy5ib3R0b209dC5udW1iZXIoZS5ib3R0b20sci5ib3R0b20sbikpLG51bGwhPXIubGVmdCYmbnVsbCE9ZS5sZWZ0JiYodGhpcy5sZWZ0PXQubnVtYmVyKGUubGVmdCxyLmxlZnQsbikpLG51bGwhPXIucmlnaHQmJm51bGwhPWUucmlnaHQmJih0aGlzLnJpZ2h0PXQubnVtYmVyKGUucmlnaHQsci5yaWdodCxuKSksdGhpc30sa24ucHJvdG90eXBlLmdldENlbnRlcj1mdW5jdGlvbihlLHIpe3ZhciBuPXQuY2xhbXAoKHRoaXMubGVmdCtlLXRoaXMucmlnaHQpLzIsMCxlKSxpPXQuY2xhbXAoKHRoaXMudG9wK3ItdGhpcy5ib3R0b20pLzIsMCxyKTtyZXR1cm4gbmV3IHQuUG9pbnQobixpKX0sa24ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50b3A9PT10LnRvcCYmdGhpcy5ib3R0b209PT10LmJvdHRvbSYmdGhpcy5sZWZ0PT09dC5sZWZ0JiZ0aGlzLnJpZ2h0PT09dC5yaWdodH0sa24ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrbih0aGlzLnRvcCx0aGlzLmJvdHRvbSx0aGlzLmxlZnQsdGhpcy5yaWdodCl9LGtuLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dG9wOnRoaXMudG9wLGJvdHRvbTp0aGlzLmJvdHRvbSxsZWZ0OnRoaXMubGVmdCxyaWdodDp0aGlzLnJpZ2h0fX07dmFyIEFuPWZ1bmN0aW9uKGUscixuLGksYSl7dGhpcy50aWxlU2l6ZT01MTIsdGhpcy5tYXhWYWxpZExhdGl0dWRlPTg1LjA1MTEyOSx0aGlzLl9yZW5kZXJXb3JsZENvcGllcz12b2lkIDA9PT1hfHxhLHRoaXMuX21pblpvb209ZXx8MCx0aGlzLl9tYXhab29tPXJ8fDIyLHRoaXMuX21pblBpdGNoPW51bGw9PW4/MDpuLHRoaXMuX21heFBpdGNoPW51bGw9PWk/NjA6aSx0aGlzLnNldE1heEJvdW5kcygpLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuX2NlbnRlcj1uZXcgdC5MbmdMYXQoMCwwKSx0aGlzLnpvb209MCx0aGlzLmFuZ2xlPTAsdGhpcy5fZm92PS42NDM1MDExMDg3OTMyODQ0LHRoaXMuX3BpdGNoPTAsdGhpcy5fdW5tb2RpZmllZD0hMCx0aGlzLl9lZGdlSW5zZXRzPW5ldyBrbix0aGlzLl9wb3NNYXRyaXhDYWNoZT17fSx0aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGU9e319LE1uPXttaW5ab29tOntjb25maWd1cmFibGU6ITB9LG1heFpvb206e2NvbmZpZ3VyYWJsZTohMH0sbWluUGl0Y2g6e2NvbmZpZ3VyYWJsZTohMH0sbWF4UGl0Y2g6e2NvbmZpZ3VyYWJsZTohMH0scmVuZGVyV29ybGRDb3BpZXM6e2NvbmZpZ3VyYWJsZTohMH0sd29ybGRTaXplOntjb25maWd1cmFibGU6ITB9LGNlbnRlck9mZnNldDp7Y29uZmlndXJhYmxlOiEwfSxzaXplOntjb25maWd1cmFibGU6ITB9LGJlYXJpbmc6e2NvbmZpZ3VyYWJsZTohMH0scGl0Y2g6e2NvbmZpZ3VyYWJsZTohMH0sZm92Ontjb25maWd1cmFibGU6ITB9LHpvb206e2NvbmZpZ3VyYWJsZTohMH0sY2VudGVyOntjb25maWd1cmFibGU6ITB9LHBhZGRpbmc6e2NvbmZpZ3VyYWJsZTohMH0sY2VudGVyUG9pbnQ6e2NvbmZpZ3VyYWJsZTohMH0sdW5tb2RpZmllZDp7Y29uZmlndXJhYmxlOiEwfSxwb2ludDp7Y29uZmlndXJhYmxlOiEwfX07QW4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEFuKHRoaXMuX21pblpvb20sdGhpcy5fbWF4Wm9vbSx0aGlzLl9taW5QaXRjaCx0aGlzLm1heFBpdGNoLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKTtyZXR1cm4gdC50aWxlU2l6ZT10aGlzLnRpbGVTaXplLHQubGF0UmFuZ2U9dGhpcy5sYXRSYW5nZSx0LndpZHRoPXRoaXMud2lkdGgsdC5oZWlnaHQ9dGhpcy5oZWlnaHQsdC5fY2VudGVyPXRoaXMuX2NlbnRlcix0Lnpvb209dGhpcy56b29tLHQuYW5nbGU9dGhpcy5hbmdsZSx0Ll9mb3Y9dGhpcy5fZm92LHQuX3BpdGNoPXRoaXMuX3BpdGNoLHQuX3VubW9kaWZpZWQ9dGhpcy5fdW5tb2RpZmllZCx0Ll9lZGdlSW5zZXRzPXRoaXMuX2VkZ2VJbnNldHMuY2xvbmUoKSx0Ll9jYWxjTWF0cmljZXMoKSx0fSxNbi5taW5ab29tLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9taW5ab29tfSxNbi5taW5ab29tLnNldD1mdW5jdGlvbih0KXt0aGlzLl9taW5ab29tIT09dCYmKHRoaXMuX21pblpvb209dCx0aGlzLnpvb209TWF0aC5tYXgodGhpcy56b29tLHQpKX0sTW4ubWF4Wm9vbS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4Wm9vbX0sTW4ubWF4Wm9vbS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fbWF4Wm9vbSE9PXQmJih0aGlzLl9tYXhab29tPXQsdGhpcy56b29tPU1hdGgubWluKHRoaXMuem9vbSx0KSl9LE1uLm1pblBpdGNoLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9taW5QaXRjaH0sTW4ubWluUGl0Y2guc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX21pblBpdGNoIT09dCYmKHRoaXMuX21pblBpdGNoPXQsdGhpcy5waXRjaD1NYXRoLm1heCh0aGlzLnBpdGNoLHQpKX0sTW4ubWF4UGl0Y2guZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21heFBpdGNofSxNbi5tYXhQaXRjaC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fbWF4UGl0Y2ghPT10JiYodGhpcy5fbWF4UGl0Y2g9dCx0aGlzLnBpdGNoPU1hdGgubWluKHRoaXMucGl0Y2gsdCkpfSxNbi5yZW5kZXJXb3JsZENvcGllcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyV29ybGRDb3BpZXN9LE1uLnJlbmRlcldvcmxkQ29waWVzLnNldD1mdW5jdGlvbih0KXt2b2lkIDA9PT10P3Q9ITA6bnVsbD09PXQmJih0PSExKSx0aGlzLl9yZW5kZXJXb3JsZENvcGllcz10fSxNbi53b3JsZFNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGlsZVNpemUqdGhpcy5zY2FsZX0sTW4uY2VudGVyT2Zmc2V0LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNlbnRlclBvaW50Ll9zdWIodGhpcy5zaXplLl9kaXYoMikpfSxNbi5zaXplLmdldD1mdW5jdGlvbigpe3JldHVybiBuZXcgdC5Qb2ludCh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KX0sTW4uYmVhcmluZy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4tdGhpcy5hbmdsZS9NYXRoLlBJKjE4MH0sTW4uYmVhcmluZy5zZXQ9ZnVuY3Rpb24oZSl7dmFyIHI9LXQud3JhcChlLC0xODAsMTgwKSpNYXRoLlBJLzE4MDt0aGlzLmFuZ2xlIT09ciYmKHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5hbmdsZT1yLHRoaXMuX2NhbGNNYXRyaWNlcygpLHRoaXMucm90YXRpb25NYXRyaXg9dC5jcmVhdGUkMigpLHQucm90YXRlKHRoaXMucm90YXRpb25NYXRyaXgsdGhpcy5yb3RhdGlvbk1hdHJpeCx0aGlzLmFuZ2xlKSl9LE1uLnBpdGNoLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9waXRjaC9NYXRoLlBJKjE4MH0sTW4ucGl0Y2guc2V0PWZ1bmN0aW9uKGUpe3ZhciByPXQuY2xhbXAoZSx0aGlzLm1pblBpdGNoLHRoaXMubWF4UGl0Y2gpLzE4MCpNYXRoLlBJO3RoaXMuX3BpdGNoIT09ciYmKHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fcGl0Y2g9cix0aGlzLl9jYWxjTWF0cmljZXMoKSl9LE1uLmZvdi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm92L01hdGguUEkqMTgwfSxNbi5mb3Yuc2V0PWZ1bmN0aW9uKHQpe3Q9TWF0aC5tYXgoLjAxLE1hdGgubWluKDYwLHQpKSx0aGlzLl9mb3YhPT10JiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl9mb3Y9dC8xODAqTWF0aC5QSSx0aGlzLl9jYWxjTWF0cmljZXMoKSl9LE1uLnpvb20uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvb219LE1uLnpvb20uc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWluKE1hdGgubWF4KHQsdGhpcy5taW5ab29tKSx0aGlzLm1heFpvb20pO3RoaXMuX3pvb20hPT1lJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl96b29tPWUsdGhpcy5zY2FsZT10aGlzLnpvb21TY2FsZShlKSx0aGlzLnRpbGVab29tPU1hdGguZmxvb3IoZSksdGhpcy56b29tRnJhY3Rpb249ZS10aGlzLnRpbGVab29tLHRoaXMuX2NvbnN0cmFpbigpLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sTW4uY2VudGVyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jZW50ZXJ9LE1uLmNlbnRlci5zZXQ9ZnVuY3Rpb24odCl7dC5sYXQ9PT10aGlzLl9jZW50ZXIubGF0JiZ0LmxuZz09PXRoaXMuX2NlbnRlci5sbmd8fCh0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX2NlbnRlcj10LHRoaXMuX2NvbnN0cmFpbigpLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sTW4ucGFkZGluZy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWRnZUluc2V0cy50b0pTT04oKX0sTW4ucGFkZGluZy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fZWRnZUluc2V0cy5lcXVhbHModCl8fCh0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX2VkZ2VJbnNldHMuaW50ZXJwb2xhdGUodGhpcy5fZWRnZUluc2V0cyx0LDEpLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sTW4uY2VudGVyUG9pbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VkZ2VJbnNldHMuZ2V0Q2VudGVyKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpfSxBbi5wcm90b3R5cGUuaXNQYWRkaW5nRXF1YWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2VkZ2VJbnNldHMuZXF1YWxzKHQpfSxBbi5wcm90b3R5cGUuaW50ZXJwb2xhdGVQYWRkaW5nPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX2VkZ2VJbnNldHMuaW50ZXJwb2xhdGUodCxlLHIpLHRoaXMuX2NvbnN0cmFpbigpLHRoaXMuX2NhbGNNYXRyaWNlcygpfSxBbi5wcm90b3R5cGUuY292ZXJpbmdab29tTGV2ZWw9ZnVuY3Rpb24odCl7dmFyIGU9KHQucm91bmRab29tP01hdGgucm91bmQ6TWF0aC5mbG9vcikodGhpcy56b29tK3RoaXMuc2NhbGVab29tKHRoaXMudGlsZVNpemUvdC50aWxlU2l6ZSkpO3JldHVybiBNYXRoLm1heCgwLGUpfSxBbi5wcm90b3R5cGUuZ2V0VmlzaWJsZVVud3JhcHBlZENvb3JkaW5hdGVzPWZ1bmN0aW9uKGUpe3ZhciByPVtuZXcgdC5VbndyYXBwZWRUaWxlSUQoMCxlKV07aWYodGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpZm9yKHZhciBuPXRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LlBvaW50KDAsMCkpLGk9dGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuUG9pbnQodGhpcy53aWR0aCwwKSksYT10aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5Qb2ludCh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSksbz10aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5Qb2ludCgwLHRoaXMuaGVpZ2h0KSkscz1NYXRoLmZsb29yKE1hdGgubWluKG4ueCxpLngsYS54LG8ueCkpLGw9TWF0aC5mbG9vcihNYXRoLm1heChuLngsaS54LGEueCxvLngpKSxjPXMtMTtjPD1sKzE7YysrKTAhPT1jJiZyLnB1c2gobmV3IHQuVW53cmFwcGVkVGlsZUlEKGMsZSkpO3JldHVybiByfSxBbi5wcm90b3R5cGUuY292ZXJpbmdUaWxlcz1mdW5jdGlvbihlKXt2YXIgcj10aGlzLmNvdmVyaW5nWm9vbUxldmVsKGUpLG49cjtpZih2b2lkIDAhPT1lLm1pbnpvb20mJnI8ZS5taW56b29tKXJldHVybltdO3ZvaWQgMCE9PWUubWF4em9vbSYmcj5lLm1heHpvb20mJihyPWUubWF4em9vbSk7dmFyIGk9dC5NZXJjYXRvckNvb3JkaW5hdGUuZnJvbUxuZ0xhdCh0aGlzLmNlbnRlciksYT1NYXRoLnBvdygyLHIpLG89W2EqaS54LGEqaS55LDBdLHM9d24uZnJvbUludlByb2plY3Rpb25NYXRyaXgodGhpcy5pbnZQcm9qTWF0cml4LHRoaXMud29ybGRTaXplLHIpLGw9ZS5taW56b29tfHwwO3RoaXMucGl0Y2g8PTYwJiZ0aGlzLl9lZGdlSW5zZXRzLnRvcDwuMSYmKGw9cik7dmFyIGM9ZnVuY3Rpb24odCl7cmV0dXJue2FhYmI6bmV3IFRuKFt0KmEsMCwwXSxbKHQrMSkqYSxhLDBdKSx6b29tOjAseDowLHk6MCx3cmFwOnQsZnVsbHlWaXNpYmxlOiExfX0sdT1bXSxmPVtdLGg9cixwPWUucmVwYXJzZU92ZXJzY2FsZWQ/bjpyO2lmKHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKWZvcih2YXIgZD0xO2Q8PTM7ZCsrKXUucHVzaChjKC1kKSksdS5wdXNoKGMoZCkpO2Zvcih1LnB1c2goYygwKSk7dS5sZW5ndGg+MDspe3ZhciBtPXUucG9wKCksZz1tLngsdj1tLnkseT1tLmZ1bGx5VmlzaWJsZTtpZigheSl7dmFyIHg9bS5hYWJiLmludGVyc2VjdHMocyk7aWYoMD09PXgpY29udGludWU7eT0yPT09eH12YXIgYj1tLmFhYmIuZGlzdGFuY2VYKG8pLF89bS5hYWJiLmRpc3RhbmNlWShvKSx3PU1hdGgubWF4KE1hdGguYWJzKGIpLE1hdGguYWJzKF8pKSxUPTMrKDE8PGgtbS56b29tKS0yO2lmKG0uem9vbT09PWh8fHc+VCYmbS56b29tPj1sKWYucHVzaCh7dGlsZUlEOm5ldyB0Lk92ZXJzY2FsZWRUaWxlSUQobS56b29tPT09aD9wOm0uem9vbSxtLndyYXAsbS56b29tLGcsdiksZGlzdGFuY2VTcTp0LnNxckxlbihbb1swXS0uNS1nLG9bMV0tLjUtdl0pfSk7ZWxzZSBmb3IodmFyIGs9MDtrPDQ7aysrKXt2YXIgQT0oZzw8MSkrayUyLE09KHY8PDEpKyhrPj4xKTt1LnB1c2goe2FhYmI6bS5hYWJiLnF1YWRyYW50KGspLHpvb206bS56b29tKzEseDpBLHk6TSx3cmFwOm0ud3JhcCxmdWxseVZpc2libGU6eX0pfX1yZXR1cm4gZi5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3RhbmNlU3EtZS5kaXN0YW5jZVNxfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlsZUlEfSkpfSxBbi5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQsZSl7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5waXhlbHNUb0dMVW5pdHM9WzIvdCwtMi9lXSx0aGlzLl9jb25zdHJhaW4oKSx0aGlzLl9jYWxjTWF0cmljZXMoKX0sTW4udW5tb2RpZmllZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdW5tb2RpZmllZH0sQW4ucHJvdG90eXBlLnpvb21TY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3coMix0KX0sQW4ucHJvdG90eXBlLnNjYWxlWm9vbT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjJ9LEFuLnByb3RvdHlwZS5wcm9qZWN0PWZ1bmN0aW9uKGUpe3ZhciByPXQuY2xhbXAoZS5sYXQsLXRoaXMubWF4VmFsaWRMYXRpdHVkZSx0aGlzLm1heFZhbGlkTGF0aXR1ZGUpO3JldHVybiBuZXcgdC5Qb2ludCh0Lm1lcmNhdG9yWGZyb21MbmcoZS5sbmcpKnRoaXMud29ybGRTaXplLHQubWVyY2F0b3JZZnJvbUxhdChyKSp0aGlzLndvcmxkU2l6ZSl9LEFuLnByb3RvdHlwZS51bnByb2plY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0Lk1lcmNhdG9yQ29vcmRpbmF0ZShlLngvdGhpcy53b3JsZFNpemUsZS55L3RoaXMud29ybGRTaXplKS50b0xuZ0xhdCgpfSxNbi5wb2ludC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9qZWN0KHRoaXMuY2VudGVyKX0sQW4ucHJvdG90eXBlLnNldExvY2F0aW9uQXRQb2ludD1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMucG9pbnRDb29yZGluYXRlKHIpLGk9dGhpcy5wb2ludENvb3JkaW5hdGUodGhpcy5jZW50ZXJQb2ludCksYT10aGlzLmxvY2F0aW9uQ29vcmRpbmF0ZShlKSxvPW5ldyB0Lk1lcmNhdG9yQ29vcmRpbmF0ZShhLngtKG4ueC1pLngpLGEueS0obi55LWkueSkpO3RoaXMuY2VudGVyPXRoaXMuY29vcmRpbmF0ZUxvY2F0aW9uKG8pLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzJiYodGhpcy5jZW50ZXI9dGhpcy5jZW50ZXIud3JhcCgpKX0sQW4ucHJvdG90eXBlLmxvY2F0aW9uUG9pbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29vcmRpbmF0ZVBvaW50KHRoaXMubG9jYXRpb25Db29yZGluYXRlKHQpKX0sQW4ucHJvdG90eXBlLnBvaW50TG9jYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29vcmRpbmF0ZUxvY2F0aW9uKHRoaXMucG9pbnRDb29yZGluYXRlKHQpKX0sQW4ucHJvdG90eXBlLmxvY2F0aW9uQ29vcmRpbmF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdC5NZXJjYXRvckNvb3JkaW5hdGUuZnJvbUxuZ0xhdChlKX0sQW4ucHJvdG90eXBlLmNvb3JkaW5hdGVMb2NhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdC50b0xuZ0xhdCgpfSxBbi5wcm90b3R5cGUucG9pbnRDb29yZGluYXRlPWZ1bmN0aW9uKGUpe3ZhciByPVtlLngsZS55LDAsMV0sbj1bZS54LGUueSwxLDFdO3QudHJhbnNmb3JtTWF0NChyLHIsdGhpcy5waXhlbE1hdHJpeEludmVyc2UpLHQudHJhbnNmb3JtTWF0NChuLG4sdGhpcy5waXhlbE1hdHJpeEludmVyc2UpO3ZhciBpPXJbM10sYT1uWzNdLG89clswXS9pLHM9blswXS9hLGw9clsxXS9pLGM9blsxXS9hLHU9clsyXS9pLGY9blsyXS9hLGg9dT09PWY/MDooMC11KS8oZi11KTtyZXR1cm4gbmV3IHQuTWVyY2F0b3JDb29yZGluYXRlKHQubnVtYmVyKG8scyxoKS90aGlzLndvcmxkU2l6ZSx0Lm51bWJlcihsLGMsaCkvdGhpcy53b3JsZFNpemUpfSxBbi5wcm90b3R5cGUuY29vcmRpbmF0ZVBvaW50PWZ1bmN0aW9uKGUpe3ZhciByPVtlLngqdGhpcy53b3JsZFNpemUsZS55KnRoaXMud29ybGRTaXplLDAsMV07cmV0dXJuIHQudHJhbnNmb3JtTWF0NChyLHIsdGhpcy5waXhlbE1hdHJpeCksbmV3IHQuUG9pbnQoclswXS9yWzNdLHJbMV0vclszXSl9LEFuLnByb3RvdHlwZS5nZXRCb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHQuTG5nTGF0Qm91bmRzKS5leHRlbmQodGhpcy5wb2ludExvY2F0aW9uKG5ldyB0LlBvaW50KDAsMCkpKS5leHRlbmQodGhpcy5wb2ludExvY2F0aW9uKG5ldyB0LlBvaW50KHRoaXMud2lkdGgsMCkpKS5leHRlbmQodGhpcy5wb2ludExvY2F0aW9uKG5ldyB0LlBvaW50KHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpKSkuZXh0ZW5kKHRoaXMucG9pbnRMb2NhdGlvbihuZXcgdC5Qb2ludCgwLHRoaXMuaGVpZ2h0KSkpfSxBbi5wcm90b3R5cGUuZ2V0TWF4Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF0UmFuZ2UmJjI9PT10aGlzLmxhdFJhbmdlLmxlbmd0aCYmdGhpcy5sbmdSYW5nZSYmMj09PXRoaXMubG5nUmFuZ2UubGVuZ3RoP25ldyB0LkxuZ0xhdEJvdW5kcyhbdGhpcy5sbmdSYW5nZVswXSx0aGlzLmxhdFJhbmdlWzBdXSxbdGhpcy5sbmdSYW5nZVsxXSx0aGlzLmxhdFJhbmdlWzFdXSk6bnVsbH0sQW4ucHJvdG90eXBlLnNldE1heEJvdW5kcz1mdW5jdGlvbih0KXt0Pyh0aGlzLmxuZ1JhbmdlPVt0LmdldFdlc3QoKSx0LmdldEVhc3QoKV0sdGhpcy5sYXRSYW5nZT1bdC5nZXRTb3V0aCgpLHQuZ2V0Tm9ydGgoKV0sdGhpcy5fY29uc3RyYWluKCkpOih0aGlzLmxuZ1JhbmdlPW51bGwsdGhpcy5sYXRSYW5nZT1bLXRoaXMubWF4VmFsaWRMYXRpdHVkZSx0aGlzLm1heFZhbGlkTGF0aXR1ZGVdKX0sQW4ucHJvdG90eXBlLmNhbGN1bGF0ZVBvc01hdHJpeD1mdW5jdGlvbihlLHIpe3ZvaWQgMD09PXImJihyPSExKTt2YXIgbj1lLmtleSxpPXI/dGhpcy5fYWxpZ25lZFBvc01hdHJpeENhY2hlOnRoaXMuX3Bvc01hdHJpeENhY2hlO2lmKGlbbl0pcmV0dXJuIGlbbl07dmFyIGE9ZS5jYW5vbmljYWwsbz10aGlzLndvcmxkU2l6ZS90aGlzLnpvb21TY2FsZShhLnopLHM9YS54K01hdGgucG93KDIsYS56KSplLndyYXAsbD10LmlkZW50aXR5KG5ldyBGbG9hdDY0QXJyYXkoMTYpKTtyZXR1cm4gdC50cmFuc2xhdGUobCxsLFtzKm8sYS55Km8sMF0pLHQuc2NhbGUobCxsLFtvL3QuRVhURU5ULG8vdC5FWFRFTlQsMV0pLHQubXVsdGlwbHkobCxyP3RoaXMuYWxpZ25lZFByb2pNYXRyaXg6dGhpcy5wcm9qTWF0cml4LGwpLGlbbl09bmV3IEZsb2F0MzJBcnJheShsKSxpW25dfSxBbi5wcm90b3R5cGUuY3VzdG9tTGF5ZXJNYXRyaXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXJjYXRvck1hdHJpeC5zbGljZSgpfSxBbi5wcm90b3R5cGUuX2NvbnN0cmFpbj1mdW5jdGlvbigpe2lmKHRoaXMuY2VudGVyJiZ0aGlzLndpZHRoJiZ0aGlzLmhlaWdodCYmIXRoaXMuX2NvbnN0cmFpbmluZyl7dGhpcy5fY29uc3RyYWluaW5nPSEwO3ZhciBlLHIsbixpLGE9LTkwLG89OTAscz0tMTgwLGw9MTgwLGM9dGhpcy5zaXplLHU9dGhpcy5fdW5tb2RpZmllZDtpZih0aGlzLmxhdFJhbmdlKXt2YXIgZj10aGlzLmxhdFJhbmdlO2E9dC5tZXJjYXRvcllmcm9tTGF0KGZbMV0pKnRoaXMud29ybGRTaXplLGU9KG89dC5tZXJjYXRvcllmcm9tTGF0KGZbMF0pKnRoaXMud29ybGRTaXplKS1hPGMueT9jLnkvKG8tYSk6MH1pZih0aGlzLmxuZ1JhbmdlKXt2YXIgaD10aGlzLmxuZ1JhbmdlO3M9dC5tZXJjYXRvclhmcm9tTG5nKGhbMF0pKnRoaXMud29ybGRTaXplLHI9KGw9dC5tZXJjYXRvclhmcm9tTG5nKGhbMV0pKnRoaXMud29ybGRTaXplKS1zPGMueD9jLngvKGwtcyk6MH12YXIgcD10aGlzLnBvaW50LGQ9TWF0aC5tYXgocnx8MCxlfHwwKTtpZihkKXJldHVybiB0aGlzLmNlbnRlcj10aGlzLnVucHJvamVjdChuZXcgdC5Qb2ludChyPyhsK3MpLzI6cC54LGU/KG8rYSkvMjpwLnkpKSx0aGlzLnpvb20rPXRoaXMuc2NhbGVab29tKGQpLHRoaXMuX3VubW9kaWZpZWQ9dSx2b2lkKHRoaXMuX2NvbnN0cmFpbmluZz0hMSk7aWYodGhpcy5sYXRSYW5nZSl7dmFyIG09cC55LGc9Yy55LzI7bS1nPGEmJihpPWErZyksbStnPm8mJihpPW8tZyl9aWYodGhpcy5sbmdSYW5nZSl7dmFyIHY9cC54LHk9Yy54LzI7di15PHMmJihuPXMreSksdit5PmwmJihuPWwteSl9dm9pZCAwPT09biYmdm9pZCAwPT09aXx8KHRoaXMuY2VudGVyPXRoaXMudW5wcm9qZWN0KG5ldyB0LlBvaW50KHZvaWQgMCE9PW4/bjpwLngsdm9pZCAwIT09aT9pOnAueSkpKSx0aGlzLl91bm1vZGlmaWVkPXUsdGhpcy5fY29uc3RyYWluaW5nPSExfX0sQW4ucHJvdG90eXBlLl9jYWxjTWF0cmljZXM9ZnVuY3Rpb24oKXtpZih0aGlzLmhlaWdodCl7dmFyIGU9dGhpcy5fZm92LzIscj10aGlzLmNlbnRlck9mZnNldDt0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2U9LjUvTWF0aC50YW4oZSkqdGhpcy5oZWlnaHQ7dmFyIG49TWF0aC5QSS8yK3RoaXMuX3BpdGNoLGk9dGhpcy5fZm92KiguNStyLnkvdGhpcy5oZWlnaHQpLGE9TWF0aC5zaW4oaSkqdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlL01hdGguc2luKHQuY2xhbXAoTWF0aC5QSS1uLWksLjAxLE1hdGguUEktLjAxKSksbz10aGlzLnBvaW50LHM9by54LGw9by55LGM9MS4wMSooTWF0aC5jb3MoTWF0aC5QSS8yLXRoaXMuX3BpdGNoKSphK3RoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSksdT10aGlzLmhlaWdodC81MCxmPW5ldyBGbG9hdDY0QXJyYXkoMTYpO3QucGVyc3BlY3RpdmUoZix0aGlzLl9mb3YsdGhpcy53aWR0aC90aGlzLmhlaWdodCx1LGMpLGZbOF09Miotci54L3RoaXMud2lkdGgsZls5XT0yKnIueS90aGlzLmhlaWdodCx0LnNjYWxlKGYsZixbMSwtMSwxXSksdC50cmFuc2xhdGUoZixmLFswLDAsLXRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZV0pLHQucm90YXRlWChmLGYsdGhpcy5fcGl0Y2gpLHQucm90YXRlWihmLGYsdGhpcy5hbmdsZSksdC50cmFuc2xhdGUoZixmLFstcywtbCwwXSksdGhpcy5tZXJjYXRvck1hdHJpeD10LnNjYWxlKFtdLGYsW3RoaXMud29ybGRTaXplLHRoaXMud29ybGRTaXplLHRoaXMud29ybGRTaXplXSksdC5zY2FsZShmLGYsWzEsMSx0Lm1lcmNhdG9yWmZyb21BbHRpdHVkZSgxLHRoaXMuY2VudGVyLmxhdCkqdGhpcy53b3JsZFNpemUsMV0pLHRoaXMucHJvak1hdHJpeD1mLHRoaXMuaW52UHJvak1hdHJpeD10LmludmVydChbXSx0aGlzLnByb2pNYXRyaXgpO3ZhciBoPXRoaXMud2lkdGglMi8yLHA9dGhpcy5oZWlnaHQlMi8yLGQ9TWF0aC5jb3ModGhpcy5hbmdsZSksbT1NYXRoLnNpbih0aGlzLmFuZ2xlKSxnPXMtTWF0aC5yb3VuZChzKStkKmgrbSpwLHY9bC1NYXRoLnJvdW5kKGwpK2QqcCttKmgseT1uZXcgRmxvYXQ2NEFycmF5KGYpO2lmKHQudHJhbnNsYXRlKHkseSxbZz4uNT9nLTE6Zyx2Pi41P3YtMTp2LDBdKSx0aGlzLmFsaWduZWRQcm9qTWF0cml4PXksZj10LmNyZWF0ZSgpLHQuc2NhbGUoZixmLFt0aGlzLndpZHRoLzIsLXRoaXMuaGVpZ2h0LzIsMV0pLHQudHJhbnNsYXRlKGYsZixbMSwtMSwwXSksdGhpcy5sYWJlbFBsYW5lTWF0cml4PWYsZj10LmNyZWF0ZSgpLHQuc2NhbGUoZixmLFsxLC0xLDFdKSx0LnRyYW5zbGF0ZShmLGYsWy0xLC0xLDBdKSx0LnNjYWxlKGYsZixbMi90aGlzLndpZHRoLDIvdGhpcy5oZWlnaHQsMV0pLHRoaXMuZ2xDb29yZE1hdHJpeD1mLHRoaXMucGl4ZWxNYXRyaXg9dC5tdWx0aXBseShuZXcgRmxvYXQ2NEFycmF5KDE2KSx0aGlzLmxhYmVsUGxhbmVNYXRyaXgsdGhpcy5wcm9qTWF0cml4KSwhKGY9dC5pbnZlcnQobmV3IEZsb2F0NjRBcnJheSgxNiksdGhpcy5waXhlbE1hdHJpeCkpKXRocm93IG5ldyBFcnJvcigiZmFpbGVkIHRvIGludmVydCBtYXRyaXgiKTt0aGlzLnBpeGVsTWF0cml4SW52ZXJzZT1mLHRoaXMuX3Bvc01hdHJpeENhY2hlPXt9LHRoaXMuX2FsaWduZWRQb3NNYXRyaXhDYWNoZT17fX19LEFuLnByb3RvdHlwZS5tYXhQaXRjaFNjYWxlRmFjdG9yPWZ1bmN0aW9uKCl7aWYoIXRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlKXJldHVybiAxO3ZhciBlPXRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LlBvaW50KDAsMCkpLHI9W2UueCp0aGlzLndvcmxkU2l6ZSxlLnkqdGhpcy53b3JsZFNpemUsMCwxXTtyZXR1cm4gdC50cmFuc2Zvcm1NYXQ0KHIscix0aGlzLnBpeGVsTWF0cml4KVszXS90aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2V9LEFuLnByb3RvdHlwZS5nZXRDYW1lcmFQb2ludD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX3BpdGNoLHI9TWF0aC50YW4oZSkqKHRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZXx8MSk7cmV0dXJuIHRoaXMuY2VudGVyUG9pbnQuYWRkKG5ldyB0LlBvaW50KDAscikpfSxBbi5wcm90b3R5cGUuZ2V0Q2FtZXJhUXVlcnlHZW9tZXRyeT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLmdldENhbWVyYVBvaW50KCk7aWYoMT09PWUubGVuZ3RoKXJldHVybltlWzBdLHJdO2Zvcih2YXIgbj1yLngsaT1yLnksYT1yLngsbz1yLnkscz0wLGw9ZTtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc107bj1NYXRoLm1pbihuLGMueCksaT1NYXRoLm1pbihpLGMueSksYT1NYXRoLm1heChhLGMueCksbz1NYXRoLm1heChvLGMueSl9cmV0dXJuW25ldyB0LlBvaW50KG4saSksbmV3IHQuUG9pbnQoYSxpKSxuZXcgdC5Qb2ludChhLG8pLG5ldyB0LlBvaW50KG4sbyksbmV3IHQuUG9pbnQobixpKV19LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFuLnByb3RvdHlwZSxNbik7dmFyIFNuPWZ1bmN0aW9uKGUpe3ZhciByLG4saSxhLG87dGhpcy5faGFzaE5hbWU9ZSYmZW5jb2RlVVJJQ29tcG9uZW50KGUpLHQuYmluZEFsbChbIl9nZXRDdXJyZW50SGFzaCIsIl9vbkhhc2hDaGFuZ2UiLCJfdXBkYXRlSGFzaCJdLHRoaXMpLHRoaXMuX3VwZGF0ZUhhc2g9KHI9dGhpcy5fdXBkYXRlSGFzaFVudGhyb3R0bGVkLmJpbmQodGhpcyksbj0zMDAsaT0hMSxhPW51bGwsbz1mdW5jdGlvbigpe2E9bnVsbCxpJiYocigpLGE9c2V0VGltZW91dChvLG4pLGk9ITEpfSxmdW5jdGlvbigpe3JldHVybiBpPSEwLGF8fG8oKSxhfSl9O1NuLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwPWUsdC53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsdGhpcy5fb25IYXNoQ2hhbmdlLCExKSx0aGlzLl9tYXAub24oIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZUhhc2gpLHRoaXN9LFNuLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdC53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsdGhpcy5fb25IYXNoQ2hhbmdlLCExKSx0aGlzLl9tYXAub2ZmKCJtb3ZlZW5kIix0aGlzLl91cGRhdGVIYXNoKSxjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlSGFzaCgpKSxkZWxldGUgdGhpcy5fbWFwLHRoaXN9LFNuLnByb3RvdHlwZS5nZXRIYXNoU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX21hcC5nZXRDZW50ZXIoKSxuPU1hdGgucm91bmQoMTAwKnRoaXMuX21hcC5nZXRab29tKCkpLzEwMCxpPU1hdGguY2VpbCgobipNYXRoLkxOMitNYXRoLmxvZyg1MTIvMzYwLy41KSkvTWF0aC5MTjEwKSxhPU1hdGgucG93KDEwLGkpLG89TWF0aC5yb3VuZChyLmxuZyphKS9hLHM9TWF0aC5yb3VuZChyLmxhdCphKS9hLGw9dGhpcy5fbWFwLmdldEJlYXJpbmcoKSxjPXRoaXMuX21hcC5nZXRQaXRjaCgpLHU9IiI7aWYodSs9ZT8iLyIrbysiLyIrcysiLyIrbjpuKyIvIitzKyIvIitvLChsfHxjKSYmKHUrPSIvIitNYXRoLnJvdW5kKDEwKmwpLzEwKSxjJiYodSs9Ii8iK01hdGgucm91bmQoYykpLHRoaXMuX2hhc2hOYW1lKXt2YXIgZj10aGlzLl9oYXNoTmFtZSxoPSExLHA9dC53aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKS5zcGxpdCgiJiIpLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9dC5zcGxpdCgiPSIpWzBdO3JldHVybiBlPT09Zj8oaD0hMCxlKyI9Iit1KTp0fSkpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSk7cmV0dXJuIGh8fHAucHVzaChmKyI9Iit1KSwiIyIrcC5qb2luKCImIil9cmV0dXJuIiMiK3V9LFNuLnByb3RvdHlwZS5fZ2V0Q3VycmVudEhhc2g9ZnVuY3Rpb24oKXt2YXIgZSxyPXRoaXMsbj10LndpbmRvdy5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoIiMiLCIiKTtyZXR1cm4gdGhpcy5faGFzaE5hbWU/KG4uc3BsaXQoIiYiKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNwbGl0KCI9Iil9KSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dFswXT09PXIuX2hhc2hOYW1lJiYoZT10KX0pKSwoZSYmZVsxXXx8IiIpLnNwbGl0KCIvIikpOm4uc3BsaXQoIi8iKX0sU24ucHJvdG90eXBlLl9vbkhhc2hDaGFuZ2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRDdXJyZW50SGFzaCgpO2lmKHQubGVuZ3RoPj0zJiYhdC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odCl9KSkpe3ZhciBlPXRoaXMuX21hcC5kcmFnUm90YXRlLmlzRW5hYmxlZCgpJiZ0aGlzLl9tYXAudG91Y2hab29tUm90YXRlLmlzRW5hYmxlZCgpPysodFszXXx8MCk6dGhpcy5fbWFwLmdldEJlYXJpbmcoKTtyZXR1cm4gdGhpcy5fbWFwLmp1bXBUbyh7Y2VudGVyOlsrdFsyXSwrdFsxXV0sem9vbTordFswXSxiZWFyaW5nOmUscGl0Y2g6Kyh0WzRdfHwwKX0pLCEwfXJldHVybiExfSxTbi5wcm90b3R5cGUuX3VwZGF0ZUhhc2hVbnRocm90dGxlZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0SGFzaFN0cmluZygpO3RyeXt0LndpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh0LndpbmRvdy5oaXN0b3J5LnN0YXRlLCIiLGUpfWNhdGNoKHQpe319O3ZhciBFbj17bGluZWFyaXR5Oi4zLGVhc2luZzp0LmJlemllcigwLDAsLjMsMSl9LExuPXQuZXh0ZW5kKHtkZWNlbGVyYXRpb246MjUwMCxtYXhTcGVlZDoxNDAwfSxFbiksQ249dC5leHRlbmQoe2RlY2VsZXJhdGlvbjoyMCxtYXhTcGVlZDoxNDAwfSxFbiksUG49dC5leHRlbmQoe2RlY2VsZXJhdGlvbjoxZTMsbWF4U3BlZWQ6MzYwfSxFbiksSW49dC5leHRlbmQoe2RlY2VsZXJhdGlvbjoxZTMsbWF4U3BlZWQ6OTB9LEVuKSxPbj1mdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLmNsZWFyKCl9O2Z1bmN0aW9uIHpuKHQsZSl7KCF0LmR1cmF0aW9ufHx0LmR1cmF0aW9uPGUuZHVyYXRpb24pJiYodC5kdXJhdGlvbj1lLmR1cmF0aW9uLHQuZWFzaW5nPWUuZWFzaW5nKX1mdW5jdGlvbiBEbihlLHIsbil7dmFyIGk9bi5tYXhTcGVlZCxhPW4ubGluZWFyaXR5LG89bi5kZWNlbGVyYXRpb24scz10LmNsYW1wKGUqYS8oci8xZTMpLC1pLGkpLGw9TWF0aC5hYnMocykvKG8qYSk7cmV0dXJue2Vhc2luZzpuLmVhc2luZyxkdXJhdGlvbjoxZTMqbCxhbW91bnQ6cyoobC8yKX19T24ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5faW5lcnRpYUJ1ZmZlcj1bXX0sT24ucHJvdG90eXBlLnJlY29yZD1mdW5jdGlvbihlKXt0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKSx0aGlzLl9pbmVydGlhQnVmZmVyLnB1c2goe3RpbWU6dC5icm93c2VyLm5vdygpLHNldHRpbmdzOmV9KX0sT24ucHJvdG90eXBlLl9kcmFpbkluZXJ0aWFCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5faW5lcnRpYUJ1ZmZlcixyPXQuYnJvd3Nlci5ub3coKTtlLmxlbmd0aD4wJiZyLWVbMF0udGltZT4xNjA7KWUuc2hpZnQoKX0sT24ucHJvdG90eXBlLl9vbk1vdmVFbmQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCksISh0aGlzLl9pbmVydGlhQnVmZmVyLmxlbmd0aDwyKSl7Zm9yKHZhciByPXt6b29tOjAsYmVhcmluZzowLHBpdGNoOjAscGFuOm5ldyB0LlBvaW50KDAsMCkscGluY2hBcm91bmQ6dm9pZCAwLGFyb3VuZDp2b2lkIDB9LG49MCxpPXRoaXMuX2luZXJ0aWFCdWZmZXI7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLnNldHRpbmdzO3Iuem9vbSs9YS56b29tRGVsdGF8fDAsci5iZWFyaW5nKz1hLmJlYXJpbmdEZWx0YXx8MCxyLnBpdGNoKz1hLnBpdGNoRGVsdGF8fDAsYS5wYW5EZWx0YSYmci5wYW4uX2FkZChhLnBhbkRlbHRhKSxhLmFyb3VuZCYmKHIuYXJvdW5kPWEuYXJvdW5kKSxhLnBpbmNoQXJvdW5kJiYoci5waW5jaEFyb3VuZD1hLnBpbmNoQXJvdW5kKX12YXIgbz10aGlzLl9pbmVydGlhQnVmZmVyW3RoaXMuX2luZXJ0aWFCdWZmZXIubGVuZ3RoLTFdLnRpbWUtdGhpcy5faW5lcnRpYUJ1ZmZlclswXS50aW1lLHM9e307aWYoci5wYW4ubWFnKCkpe3ZhciBsPURuKHIucGFuLm1hZygpLG8sdC5leHRlbmQoe30sTG4sZXx8e30pKTtzLm9mZnNldD1yLnBhbi5tdWx0KGwuYW1vdW50L3IucGFuLm1hZygpKSxzLmNlbnRlcj10aGlzLl9tYXAudHJhbnNmb3JtLmNlbnRlcix6bihzLGwpfWlmKHIuem9vbSl7dmFyIGM9RG4oci56b29tLG8sQ24pO3Muem9vbT10aGlzLl9tYXAudHJhbnNmb3JtLnpvb20rYy5hbW91bnQsem4ocyxjKX1pZihyLmJlYXJpbmcpe3ZhciB1PURuKHIuYmVhcmluZyxvLFBuKTtzLmJlYXJpbmc9dGhpcy5fbWFwLnRyYW5zZm9ybS5iZWFyaW5nK3QuY2xhbXAodS5hbW91bnQsLTE3OSwxNzkpLHpuKHMsdSl9aWYoci5waXRjaCl7dmFyIGY9RG4oci5waXRjaCxvLEluKTtzLnBpdGNoPXRoaXMuX21hcC50cmFuc2Zvcm0ucGl0Y2grZi5hbW91bnQsem4ocyxmKX1pZihzLnpvb218fHMuYmVhcmluZyl7dmFyIGg9dm9pZCAwPT09ci5waW5jaEFyb3VuZD9yLmFyb3VuZDpyLnBpbmNoQXJvdW5kO3MuYXJvdW5kPWg/dGhpcy5fbWFwLnVucHJvamVjdChoKTp0aGlzLl9tYXAuZ2V0Q2VudGVyKCl9cmV0dXJuIHRoaXMuY2xlYXIoKSx0LmV4dGVuZChzLHtub01vdmVTdGFydDohMH0pfX07dmFyIFJuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixpLGEsbyl7dm9pZCAwPT09byYmKG89e30pO3ZhciBzPXIubW91c2VQb3MoaS5nZXRDYW52YXNDb250YWluZXIoKSxhKSxsPWkudW5wcm9qZWN0KHMpO2UuY2FsbCh0aGlzLG4sdC5leHRlbmQoe3BvaW50OnMsbG5nTGF0Omwsb3JpZ2luYWxFdmVudDphfSxvKSksdGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMSx0aGlzLnRhcmdldD1pfWUmJihuLl9fcHJvdG9fXz1lKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uO3ZhciBpPXtkZWZhdWx0UHJldmVudGVkOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gbi5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLl9kZWZhdWx0UHJldmVudGVkPSEwfSxpLmRlZmF1bHRQcmV2ZW50ZWQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4ucHJvdG90eXBlLGkpLG59KHQuRXZlbnQpLEZuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixpLGEpe3ZhciBvPSJ0b3VjaGVuZCI9PT1uP2EuY2hhbmdlZFRvdWNoZXM6YS50b3VjaGVzLHM9ci50b3VjaFBvcyhpLmdldENhbnZhc0NvbnRhaW5lcigpLG8pLGw9cy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBpLnVucHJvamVjdCh0KX0pKSxjPXMucmVkdWNlKChmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdC5hZGQoZS5kaXYobi5sZW5ndGgpKX0pLG5ldyB0LlBvaW50KDAsMCkpLHU9aS51bnByb2plY3QoYyk7ZS5jYWxsKHRoaXMsbix7cG9pbnRzOnMscG9pbnQ6YyxsbmdMYXRzOmwsbG5nTGF0OnUsb3JpZ2luYWxFdmVudDphfSksdGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMX1lJiYobi5fX3Byb3RvX189ZSksbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bjt2YXIgaT17ZGVmYXVsdFByZXZlbnRlZDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIG4ucHJvdG90eXBlLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMH0saS5kZWZhdWx0UHJldmVudGVkLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0UHJldmVudGVkfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLnByb3RvdHlwZSxpKSxufSh0LkV2ZW50KSxCbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixuKXt0LmNhbGwodGhpcyxlLHtvcmlnaW5hbEV2ZW50Om59KSx0aGlzLl9kZWZhdWx0UHJldmVudGVkPSExfXQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXtkZWZhdWx0UHJldmVudGVkOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gZS5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLl9kZWZhdWx0UHJldmVudGVkPSEwfSxyLmRlZmF1bHRQcmV2ZW50ZWQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KHQuRXZlbnQpLE5uPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbWFwPXQsdGhpcy5fY2xpY2tUb2xlcmFuY2U9ZS5jbGlja1RvbGVyYW5jZX07Tm4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuX21vdXNlZG93blBvc30sTm4ucHJvdG90eXBlLndoZWVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9maXJlUHJldmVudGFibGUobmV3IEJuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxObi5wcm90b3R5cGUubW91c2Vkb3duPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX21vdXNlZG93blBvcz1lLHRoaXMuX2ZpcmVQcmV2ZW50YWJsZShuZXcgUm4odC50eXBlLHRoaXMuX21hcCx0KSl9LE5uLnByb3RvdHlwZS5tb3VzZXVwPWZ1bmN0aW9uKHQpe3RoaXMuX21hcC5maXJlKG5ldyBSbih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sTm4ucHJvdG90eXBlLmNsaWNrPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbW91c2Vkb3duUG9zJiZ0aGlzLl9tb3VzZWRvd25Qb3MuZGlzdChlKT49dGhpcy5fY2xpY2tUb2xlcmFuY2V8fHRoaXMuX21hcC5maXJlKG5ldyBSbih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sTm4ucHJvdG90eXBlLmRibGNsaWNrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9maXJlUHJldmVudGFibGUobmV3IFJuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxObi5wcm90b3R5cGUubW91c2VvdmVyPWZ1bmN0aW9uKHQpe3RoaXMuX21hcC5maXJlKG5ldyBSbih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sTm4ucHJvdG90eXBlLm1vdXNlb3V0PWZ1bmN0aW9uKHQpe3RoaXMuX21hcC5maXJlKG5ldyBSbih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sTm4ucHJvdG90eXBlLnRvdWNoc3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ZpcmVQcmV2ZW50YWJsZShuZXcgRm4odC50eXBlLHRoaXMuX21hcCx0KSl9LE5uLnByb3RvdHlwZS50b3VjaG1vdmU9ZnVuY3Rpb24odCl7dGhpcy5fbWFwLmZpcmUobmV3IEZuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxObi5wcm90b3R5cGUudG91Y2hlbmQ9ZnVuY3Rpb24odCl7dGhpcy5fbWFwLmZpcmUobmV3IEZuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxObi5wcm90b3R5cGUudG91Y2hjYW5jZWw9ZnVuY3Rpb24odCl7dGhpcy5fbWFwLmZpcmUobmV3IEZuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxObi5wcm90b3R5cGUuX2ZpcmVQcmV2ZW50YWJsZT1mdW5jdGlvbih0KXtpZih0aGlzLl9tYXAuZmlyZSh0KSx0LmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJue319LE5uLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sTm4ucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuITF9LE5uLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt9LE5uLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7fTt2YXIgam49ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXR9O2puLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2RlbGF5Q29udGV4dE1lbnU9ITEsZGVsZXRlIHRoaXMuX2NvbnRleHRNZW51RXZlbnR9LGpuLnByb3RvdHlwZS5tb3VzZW1vdmU9ZnVuY3Rpb24odCl7dGhpcy5fbWFwLmZpcmUobmV3IFJuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxqbi5wcm90b3R5cGUubW91c2Vkb3duPWZ1bmN0aW9uKCl7dGhpcy5fZGVsYXlDb250ZXh0TWVudT0hMH0sam4ucHJvdG90eXBlLm1vdXNldXA9ZnVuY3Rpb24oKXt0aGlzLl9kZWxheUNvbnRleHRNZW51PSExLHRoaXMuX2NvbnRleHRNZW51RXZlbnQmJih0aGlzLl9tYXAuZmlyZShuZXcgUm4oImNvbnRleHRtZW51Iix0aGlzLl9tYXAsdGhpcy5fY29udGV4dE1lbnVFdmVudCkpLGRlbGV0ZSB0aGlzLl9jb250ZXh0TWVudUV2ZW50KX0sam4ucHJvdG90eXBlLmNvbnRleHRtZW51PWZ1bmN0aW9uKHQpe3RoaXMuX2RlbGF5Q29udGV4dE1lbnU/dGhpcy5fY29udGV4dE1lbnVFdmVudD10OnRoaXMuX21hcC5maXJlKG5ldyBSbih0LnR5cGUsdGhpcy5fbWFwLHQpKSx0aGlzLl9tYXAubGlzdGVucygiY29udGV4dG1lbnUiKSYmdC5wcmV2ZW50RGVmYXVsdCgpfSxqbi5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGpuLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiExfSxqbi5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7fSxqbi5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe307dmFyIFVuPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbWFwPXQsdGhpcy5fZWw9dC5nZXRDYW52YXNDb250YWluZXIoKSx0aGlzLl9jb250YWluZXI9dC5nZXRDb250YWluZXIoKSx0aGlzLl9jbGlja1RvbGVyYW5jZT1lLmNsaWNrVG9sZXJhbmNlfHwxfTtmdW5jdGlvbiBWbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDtuKyspclt0W25dLmlkZW50aWZpZXJdPWVbbl07cmV0dXJuIHJ9VW4ucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH0sVW4ucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9hY3RpdmV9LFVuLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZW5hYmxlZD0hMCl9LFVuLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VuYWJsZWQ9ITEpfSxVbi5wcm90b3R5cGUubW91c2Vkb3duPWZ1bmN0aW9uKHQsZSl7dGhpcy5pc0VuYWJsZWQoKSYmdC5zaGlmdEtleSYmMD09PXQuYnV0dG9uJiYoci5kaXNhYmxlRHJhZygpLHRoaXMuX3N0YXJ0UG9zPXRoaXMuX2xhc3RQb3M9ZSx0aGlzLl9hY3RpdmU9ITApfSxVbi5wcm90b3R5cGUubW91c2Vtb3ZlV2luZG93PWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5fYWN0aXZlKXt2YXIgbj1lO2lmKCEodGhpcy5fbGFzdFBvcy5lcXVhbHMobil8fCF0aGlzLl9ib3gmJm4uZGlzdCh0aGlzLl9zdGFydFBvcyk8dGhpcy5fY2xpY2tUb2xlcmFuY2UpKXt2YXIgaT10aGlzLl9zdGFydFBvczt0aGlzLl9sYXN0UG9zPW4sdGhpcy5fYm94fHwodGhpcy5fYm94PXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1ib3h6b29tIix0aGlzLl9jb250YWluZXIpLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jcm9zc2hhaXIiKSx0aGlzLl9maXJlRXZlbnQoImJveHpvb21zdGFydCIsdCkpO3ZhciBhPU1hdGgubWluKGkueCxuLngpLG89TWF0aC5tYXgoaS54LG4ueCkscz1NYXRoLm1pbihpLnksbi55KSxsPU1hdGgubWF4KGkueSxuLnkpO3Iuc2V0VHJhbnNmb3JtKHRoaXMuX2JveCwidHJhbnNsYXRlKCIrYSsicHgsIitzKyJweCkiKSx0aGlzLl9ib3guc3R5bGUud2lkdGg9by1hKyJweCIsdGhpcy5fYm94LnN0eWxlLmhlaWdodD1sLXMrInB4In19fSxVbi5wcm90b3R5cGUubW91c2V1cFdpbmRvdz1mdW5jdGlvbihlLG4pe3ZhciBpPXRoaXM7aWYodGhpcy5fYWN0aXZlJiYwPT09ZS5idXR0b24pe3ZhciBhPXRoaXMuX3N0YXJ0UG9zLG89bjtpZih0aGlzLnJlc2V0KCksci5zdXBwcmVzc0NsaWNrKCksYS54IT09by54fHxhLnkhPT1vLnkpcmV0dXJuIHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KCJib3h6b29tZW5kIix7b3JpZ2luYWxFdmVudDplfSkpLHtjYW1lcmFBbmltYXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHQuZml0U2NyZWVuQ29vcmRpbmF0ZXMoYSxvLGkuX21hcC5nZXRCZWFyaW5nKCkse2xpbmVhcjohMH0pfX07dGhpcy5fZmlyZUV2ZW50KCJib3h6b29tY2FuY2VsIixlKX19LFVuLnByb3RvdHlwZS5rZXlkb3duPWZ1bmN0aW9uKHQpe3RoaXMuX2FjdGl2ZSYmMjc9PT10LmtleUNvZGUmJih0aGlzLnJlc2V0KCksdGhpcy5fZmlyZUV2ZW50KCJib3h6b29tY2FuY2VsIix0KSl9LFVuLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3Jvc3NoYWlyIiksdGhpcy5fYm94JiYoci5yZW1vdmUodGhpcy5fYm94KSx0aGlzLl9ib3g9bnVsbCksci5lbmFibGVEcmFnKCksZGVsZXRlIHRoaXMuX3N0YXJ0UG9zLGRlbGV0ZSB0aGlzLl9sYXN0UG9zfSxVbi5wcm90b3R5cGUuX2ZpcmVFdmVudD1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChlLHtvcmlnaW5hbEV2ZW50OnJ9KSl9O3ZhciBIbj1mdW5jdGlvbih0KXt0aGlzLnJlc2V0KCksdGhpcy5udW1Ub3VjaGVzPXQubnVtVG91Y2hlc307SG4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuY2VudHJvaWQsZGVsZXRlIHRoaXMuc3RhcnRUaW1lLGRlbGV0ZSB0aGlzLnRvdWNoZXMsdGhpcy5hYm9ydGVkPSExfSxIbi5wcm90b3R5cGUudG91Y2hzdGFydD1mdW5jdGlvbihlLHIsbil7KHRoaXMuY2VudHJvaWR8fG4ubGVuZ3RoPnRoaXMubnVtVG91Y2hlcykmJih0aGlzLmFib3J0ZWQ9ITApLHRoaXMuYWJvcnRlZHx8KHZvaWQgMD09PXRoaXMuc3RhcnRUaW1lJiYodGhpcy5zdGFydFRpbWU9ZS50aW1lU3RhbXApLG4ubGVuZ3RoPT09dGhpcy5udW1Ub3VjaGVzJiYodGhpcy5jZW50cm9pZD1mdW5jdGlvbihlKXtmb3IodmFyIHI9bmV3IHQuUG9pbnQoMCwwKSxuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtyLl9hZGQoYSl9cmV0dXJuIHIuZGl2KGUubGVuZ3RoKX0ociksdGhpcy50b3VjaGVzPVZuKG4scikpKX0sSG4ucHJvdG90eXBlLnRvdWNobW92ZT1mdW5jdGlvbih0LGUscil7aWYoIXRoaXMuYWJvcnRlZCYmdGhpcy5jZW50cm9pZCl7dmFyIG49Vm4ocixlKTtmb3IodmFyIGkgaW4gdGhpcy50b3VjaGVzKXt2YXIgYT10aGlzLnRvdWNoZXNbaV0sbz1uW2ldOyghb3x8by5kaXN0KGEpPjMwKSYmKHRoaXMuYWJvcnRlZD0hMCl9fX0sSG4ucHJvdG90eXBlLnRvdWNoZW5kPWZ1bmN0aW9uKHQsZSxyKXtpZigoIXRoaXMuY2VudHJvaWR8fHQudGltZVN0YW1wLXRoaXMuc3RhcnRUaW1lPjUwMCkmJih0aGlzLmFib3J0ZWQ9ITApLDA9PT1yLmxlbmd0aCl7dmFyIG49IXRoaXMuYWJvcnRlZCYmdGhpcy5jZW50cm9pZDtpZih0aGlzLnJlc2V0KCksbilyZXR1cm4gbn19O3ZhciBxbj1mdW5jdGlvbih0KXt0aGlzLnNpbmdsZVRhcD1uZXcgSG4odCksdGhpcy5udW1UYXBzPXQubnVtVGFwcyx0aGlzLnJlc2V0KCl9O3FuLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMubGFzdFRpbWU9MS8wLGRlbGV0ZSB0aGlzLmxhc3RUYXAsdGhpcy5jb3VudD0wLHRoaXMuc2luZ2xlVGFwLnJlc2V0KCl9LHFuLnByb3RvdHlwZS50b3VjaHN0YXJ0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNpbmdsZVRhcC50b3VjaHN0YXJ0KHQsZSxyKX0scW4ucHJvdG90eXBlLnRvdWNobW92ZT1mdW5jdGlvbih0LGUscil7dGhpcy5zaW5nbGVUYXAudG91Y2htb3ZlKHQsZSxyKX0scW4ucHJvdG90eXBlLnRvdWNoZW5kPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnNpbmdsZVRhcC50b3VjaGVuZCh0LGUscik7aWYobil7dmFyIGk9dC50aW1lU3RhbXAtdGhpcy5sYXN0VGltZTw1MDAsYT0hdGhpcy5sYXN0VGFwfHx0aGlzLmxhc3RUYXAuZGlzdChuKTwzMDtpZihpJiZhfHx0aGlzLnJlc2V0KCksdGhpcy5jb3VudCsrLHRoaXMubGFzdFRpbWU9dC50aW1lU3RhbXAsdGhpcy5sYXN0VGFwPW4sdGhpcy5jb3VudD09PXRoaXMubnVtVGFwcylyZXR1cm4gdGhpcy5yZXNldCgpLG59fTt2YXIgR249ZnVuY3Rpb24oKXt0aGlzLl96b29tSW49bmV3IHFuKHtudW1Ub3VjaGVzOjEsbnVtVGFwczoyfSksdGhpcy5fem9vbU91dD1uZXcgcW4oe251bVRvdWNoZXM6MixudW1UYXBzOjF9KSx0aGlzLnJlc2V0KCl9O0duLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMSx0aGlzLl96b29tSW4ucmVzZXQoKSx0aGlzLl96b29tT3V0LnJlc2V0KCl9LEduLnByb3RvdHlwZS50b3VjaHN0YXJ0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl96b29tSW4udG91Y2hzdGFydCh0LGUsciksdGhpcy5fem9vbU91dC50b3VjaHN0YXJ0KHQsZSxyKX0sR24ucHJvdG90eXBlLnRvdWNobW92ZT1mdW5jdGlvbih0LGUscil7dGhpcy5fem9vbUluLnRvdWNobW92ZSh0LGUsciksdGhpcy5fem9vbU91dC50b3VjaG1vdmUodCxlLHIpfSxHbi5wcm90b3R5cGUudG91Y2hlbmQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMsaT10aGlzLl96b29tSW4udG91Y2hlbmQodCxlLHIpLGE9dGhpcy5fem9vbU91dC50b3VjaGVuZCh0LGUscik7cmV0dXJuIGk/KHRoaXMuX2FjdGl2ZT0hMCx0LnByZXZlbnREZWZhdWx0KCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gbi5yZXNldCgpfSksMCkse2NhbWVyYUFuaW1hdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gZS5lYXNlVG8oe2R1cmF0aW9uOjMwMCx6b29tOmUuZ2V0Wm9vbSgpKzEsYXJvdW5kOmUudW5wcm9qZWN0KGkpfSx7b3JpZ2luYWxFdmVudDp0fSl9fSk6YT8odGhpcy5fYWN0aXZlPSEwLHQucHJldmVudERlZmF1bHQoKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBuLnJlc2V0KCl9KSwwKSx7Y2FtZXJhQW5pbWF0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBlLmVhc2VUbyh7ZHVyYXRpb246MzAwLHpvb206ZS5nZXRab29tKCktMSxhcm91bmQ6ZS51bnByb2plY3QoYSl9LHtvcmlnaW5hbEV2ZW50OnR9KX19KTp2b2lkIDB9LEduLnByb3RvdHlwZS50b3VjaGNhbmNlbD1mdW5jdGlvbigpe3RoaXMucmVzZXQoKX0sR24ucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITB9LEduLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlc2V0KCl9LEduLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sR24ucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX07dmFyIFluPWZ1bmN0aW9uKHQpe3RoaXMucmVzZXQoKSx0aGlzLl9jbGlja1RvbGVyYW5jZT10LmNsaWNrVG9sZXJhbmNlfHwxfTtZbi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITEsdGhpcy5fbW92ZWQ9ITEsZGVsZXRlIHRoaXMuX2xhc3RQb2ludCxkZWxldGUgdGhpcy5fZXZlbnRCdXR0b259LFluLnByb3RvdHlwZS5fY29ycmVjdEJ1dHRvbj1mdW5jdGlvbih0LGUpe3JldHVybiExfSxZbi5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24odCxlKXtyZXR1cm57fX0sWW4ucHJvdG90eXBlLm1vdXNlZG93bj1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLl9sYXN0UG9pbnQpe3ZhciBuPXIubW91c2VCdXR0b24odCk7dGhpcy5fY29ycmVjdEJ1dHRvbih0LG4pJiYodGhpcy5fbGFzdFBvaW50PWUsdGhpcy5fZXZlbnRCdXR0b249bil9fSxZbi5wcm90b3R5cGUubW91c2Vtb3ZlV2luZG93PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fbGFzdFBvaW50O2lmKHImJih0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fbW92ZWR8fCEoZS5kaXN0KHIpPHRoaXMuX2NsaWNrVG9sZXJhbmNlKSkpcmV0dXJuIHRoaXMuX21vdmVkPSEwLHRoaXMuX2xhc3RQb2ludD1lLHRoaXMuX21vdmUocixlKX0sWW4ucHJvdG90eXBlLm1vdXNldXBXaW5kb3c9ZnVuY3Rpb24odCl7ci5tb3VzZUJ1dHRvbih0KT09PXRoaXMuX2V2ZW50QnV0dG9uJiYodGhpcy5fbW92ZWQmJnIuc3VwcHJlc3NDbGljaygpLHRoaXMucmVzZXQoKSl9LFluLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSEwfSxZbi5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZXNldCgpfSxZbi5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LFluLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9O3ZhciBXbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLm1vdXNlZG93bj1mdW5jdGlvbihlLHIpe3QucHJvdG90eXBlLm1vdXNlZG93bi5jYWxsKHRoaXMsZSxyKSx0aGlzLl9sYXN0UG9pbnQmJih0aGlzLl9hY3RpdmU9ITApfSxlLnByb3RvdHlwZS5fY29ycmVjdEJ1dHRvbj1mdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZSYmIXQuY3RybEtleX0sZS5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24odCxlKXtyZXR1cm57YXJvdW5kOmUscGFuRGVsdGE6ZS5zdWIodCl9fSxlfShZbiksWG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fY29ycmVjdEJ1dHRvbj1mdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZSYmdC5jdHJsS2V5fHwyPT09ZX0sZS5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24odCxlKXt2YXIgcj0uOCooZS54LXQueCk7aWYocilyZXR1cm4gdGhpcy5fYWN0aXZlPSEwLHtiZWFyaW5nRGVsdGE6cn19LGUucHJvdG90eXBlLmNvbnRleHRtZW51PWZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0sZX0oWW4pLFpuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX2NvcnJlY3RCdXR0b249ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PWUmJnQuY3RybEtleXx8Mj09PWV9LGUucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9LS41KihlLnktdC55KTtpZihyKXJldHVybiB0aGlzLl9hY3RpdmU9ITAse3BpdGNoRGVsdGE6cn19LGUucHJvdG90eXBlLmNvbnRleHRtZW51PWZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0sZX0oWW4pLEpuPWZ1bmN0aW9uKHQpe3RoaXMuX21pblRvdWNoZXM9MSx0aGlzLl9jbGlja1RvbGVyYW5jZT10LmNsaWNrVG9sZXJhbmNlfHwxLHRoaXMucmVzZXQoKX07Sm4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExLHRoaXMuX3RvdWNoZXM9e30sdGhpcy5fc3VtPW5ldyB0LlBvaW50KDAsMCl9LEpuLnByb3RvdHlwZS50b3VjaHN0YXJ0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fY2FsY3VsYXRlVHJhbnNmb3JtKHQsZSxyKX0sSm4ucHJvdG90eXBlLnRvdWNobW92ZT1mdW5jdGlvbih0LGUscil7aWYodGhpcy5fYWN0aXZlKXJldHVybiB0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fY2FsY3VsYXRlVHJhbnNmb3JtKHQsZSxyKX0sSm4ucHJvdG90eXBlLnRvdWNoZW5kPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9jYWxjdWxhdGVUcmFuc2Zvcm0odCxlLHIpLHRoaXMuX2FjdGl2ZSYmci5sZW5ndGg8dGhpcy5fbWluVG91Y2hlcyYmdGhpcy5yZXNldCgpfSxKbi5wcm90b3R5cGUudG91Y2hjYW5jZWw9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCl9LEpuLnByb3RvdHlwZS5fY2FsY3VsYXRlVHJhbnNmb3JtPWZ1bmN0aW9uKGUscixuKXtuLmxlbmd0aD4wJiYodGhpcy5fYWN0aXZlPSEwKTt2YXIgaT1WbihuLHIpLGE9bmV3IHQuUG9pbnQoMCwwKSxvPW5ldyB0LlBvaW50KDAsMCkscz0wO2Zvcih2YXIgbCBpbiBpKXt2YXIgYz1pW2xdLHU9dGhpcy5fdG91Y2hlc1tsXTt1JiYoYS5fYWRkKGMpLG8uX2FkZChjLnN1Yih1KSkscysrLGlbbF09Yyl9aWYodGhpcy5fdG91Y2hlcz1pLCEoczx0aGlzLl9taW5Ub3VjaGVzKSYmby5tYWcoKSl7dmFyIGY9by5kaXYocyk7aWYodGhpcy5fc3VtLl9hZGQoZiksISh0aGlzLl9zdW0ubWFnKCk8dGhpcy5fY2xpY2tUb2xlcmFuY2UpKXJldHVybnthcm91bmQ6YS5kaXYocykscGFuRGVsdGE6Zn19fSxKbi5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMH0sSm4ucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSExLHRoaXMucmVzZXQoKX0sSm4ucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSxKbi5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlfTt2YXIgS249ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCl9O2Z1bmN0aW9uIFFuKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dLmlkZW50aWZpZXI9PT1yKXJldHVybiBlW25dfUtuLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMSxkZWxldGUgdGhpcy5fZmlyc3RUd29Ub3VjaGVzfSxLbi5wcm90b3R5cGUuX3N0YXJ0PWZ1bmN0aW9uKHQpe30sS24ucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm57fX0sS24ucHJvdG90eXBlLnRvdWNoc3RhcnQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX2ZpcnN0VHdvVG91Y2hlc3x8ci5sZW5ndGg8Mnx8KHRoaXMuX2ZpcnN0VHdvVG91Y2hlcz1bclswXS5pZGVudGlmaWVyLHJbMV0uaWRlbnRpZmllcl0sdGhpcy5fc3RhcnQoW2VbMF0sZVsxXV0pKX0sS24ucHJvdG90eXBlLnRvdWNobW92ZT1mdW5jdGlvbih0LGUscil7aWYodGhpcy5fZmlyc3RUd29Ub3VjaGVzKXt0LnByZXZlbnREZWZhdWx0KCk7dmFyIG49dGhpcy5fZmlyc3RUd29Ub3VjaGVzLGk9blswXSxhPW5bMV0sbz1RbihyLGUsaSkscz1RbihyLGUsYSk7aWYobyYmcyl7dmFyIGw9dGhpcy5fYXJvdW5kQ2VudGVyP251bGw6by5hZGQocykuZGl2KDIpO3JldHVybiB0aGlzLl9tb3ZlKFtvLHNdLGwsdCl9fX0sS24ucHJvdG90eXBlLnRvdWNoZW5kPWZ1bmN0aW9uKHQsZSxuKXtpZih0aGlzLl9maXJzdFR3b1RvdWNoZXMpe3ZhciBpPXRoaXMuX2ZpcnN0VHdvVG91Y2hlcyxhPWlbMF0sbz1pWzFdLHM9UW4obixlLGEpLGw9UW4obixlLG8pO3MmJmx8fCh0aGlzLl9hY3RpdmUmJnIuc3VwcHJlc3NDbGljaygpLHRoaXMucmVzZXQoKSl9fSxLbi5wcm90b3R5cGUudG91Y2hjYW5jZWw9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCl9LEtuLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24odCl7dGhpcy5fZW5hYmxlZD0hMCx0aGlzLl9hcm91bmRDZW50ZXI9ISF0JiYiY2VudGVyIj09PXQuYXJvdW5kfSxLbi5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZXNldCgpfSxLbi5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LEtuLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9O2Z1bmN0aW9uICRuKHQsZSl7cmV0dXJuIE1hdGgubG9nKHQvZSkvTWF0aC5MTjJ9dmFyIHRpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpLGRlbGV0ZSB0aGlzLl9kaXN0YW5jZSxkZWxldGUgdGhpcy5fc3RhcnREaXN0YW5jZX0sZS5wcm90b3R5cGUuX3N0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0YXJ0RGlzdGFuY2U9dGhpcy5fZGlzdGFuY2U9dFswXS5kaXN0KHRbMV0pfSxlLnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2Rpc3RhbmNlO2lmKHRoaXMuX2Rpc3RhbmNlPXRbMF0uZGlzdCh0WzFdKSx0aGlzLl9hY3RpdmV8fCEoTWF0aC5hYnMoJG4odGhpcy5fZGlzdGFuY2UsdGhpcy5fc3RhcnREaXN0YW5jZSkpPC4xKSlyZXR1cm4gdGhpcy5fYWN0aXZlPSEwLHt6b29tRGVsdGE6JG4odGhpcy5fZGlzdGFuY2UscikscGluY2hBcm91bmQ6ZX19LGV9KEtuKTtmdW5jdGlvbiBlaSh0LGUpe3JldHVybiAxODAqdC5hbmdsZVdpdGgoZSkvTWF0aC5QSX12YXIgcmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3QucHJvdG90eXBlLnJlc2V0LmNhbGwodGhpcyksZGVsZXRlIHRoaXMuX21pbkRpYW1ldGVyLGRlbGV0ZSB0aGlzLl9zdGFydFZlY3RvcixkZWxldGUgdGhpcy5fdmVjdG9yfSxlLnByb3RvdHlwZS5fc3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RhcnRWZWN0b3I9dGhpcy5fdmVjdG9yPXRbMF0uc3ViKHRbMV0pLHRoaXMuX21pbkRpYW1ldGVyPXRbMF0uZGlzdCh0WzFdKX0sZS5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92ZWN0b3I7aWYodGhpcy5fdmVjdG9yPXRbMF0uc3ViKHRbMV0pLHRoaXMuX2FjdGl2ZXx8IXRoaXMuX2lzQmVsb3dUaHJlc2hvbGQodGhpcy5fdmVjdG9yKSlyZXR1cm4gdGhpcy5fYWN0aXZlPSEwLHtiZWFyaW5nRGVsdGE6ZWkodGhpcy5fdmVjdG9yLHIpLHBpbmNoQXJvdW5kOmV9fSxlLnByb3RvdHlwZS5faXNCZWxvd1RocmVzaG9sZD1mdW5jdGlvbih0KXt0aGlzLl9taW5EaWFtZXRlcj1NYXRoLm1pbih0aGlzLl9taW5EaWFtZXRlcix0Lm1hZygpKTt2YXIgZT0yNS8oTWF0aC5QSSp0aGlzLl9taW5EaWFtZXRlcikqMzYwLHI9ZWkodCx0aGlzLl9zdGFydFZlY3Rvcik7cmV0dXJuIE1hdGguYWJzKHIpPGV9LGV9KEtuKTtmdW5jdGlvbiBuaSh0KXtyZXR1cm4gTWF0aC5hYnModC55KT5NYXRoLmFicyh0LngpfXZhciBpaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUucmVzZXQuY2FsbCh0aGlzKSx0aGlzLl92YWxpZD12b2lkIDAsZGVsZXRlIHRoaXMuX2ZpcnN0TW92ZSxkZWxldGUgdGhpcy5fbGFzdFBvaW50c30sZS5wcm90b3R5cGUuX3N0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX2xhc3RQb2ludHM9dCxuaSh0WzBdLnN1Yih0WzFdKSkmJih0aGlzLl92YWxpZD0hMSl9LGUucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10WzBdLnN1Yih0aGlzLl9sYXN0UG9pbnRzWzBdKSxpPXRbMV0uc3ViKHRoaXMuX2xhc3RQb2ludHNbMV0pO2lmKHRoaXMuX3ZhbGlkPXRoaXMuZ2VzdHVyZUJlZ2luc1ZlcnRpY2FsbHkobixpLHIudGltZVN0YW1wKSx0aGlzLl92YWxpZCl7dGhpcy5fbGFzdFBvaW50cz10LHRoaXMuX2FjdGl2ZT0hMDtyZXR1cm57cGl0Y2hEZWx0YTotLjUqKChuLnkraS55KS8yKX19fSxlLnByb3RvdHlwZS5nZXN0dXJlQmVnaW5zVmVydGljYWxseT1mdW5jdGlvbih0LGUscil7aWYodm9pZCAwIT09dGhpcy5fdmFsaWQpcmV0dXJuIHRoaXMuX3ZhbGlkO3ZhciBuPXQubWFnKCk+PTIsaT1lLm1hZygpPj0yO2lmKG58fGkpe2lmKCFufHwhaSlyZXR1cm4gdm9pZCAwPT09dGhpcy5fZmlyc3RNb3ZlJiYodGhpcy5fZmlyc3RNb3ZlPXIpLHItdGhpcy5fZmlyc3RNb3ZlPDEwMCYmdm9pZCAwO3ZhciBhPXQueT4wPT1lLnk+MDtyZXR1cm4gbmkodCkmJm5pKGUpJiZhfX0sZX0oS24pLGFpPXtwYW5TdGVwOjEwMCxiZWFyaW5nU3RlcDoxNSxwaXRjaFN0ZXA6MTB9LG9pPWZ1bmN0aW9uKCl7dmFyIHQ9YWk7dGhpcy5fcGFuU3RlcD10LnBhblN0ZXAsdGhpcy5fYmVhcmluZ1N0ZXA9dC5iZWFyaW5nU3RlcCx0aGlzLl9waXRjaFN0ZXA9dC5waXRjaFN0ZXB9O2Z1bmN0aW9uIHNpKHQpe3JldHVybiB0KigyLXQpfW9pLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMX0sb2kucHJvdG90eXBlLmtleWRvd249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighKHQuYWx0S2V5fHx0LmN0cmxLZXl8fHQubWV0YUtleSkpe3ZhciByPTAsbj0wLGk9MCxhPTAsbz0wO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgNjE6Y2FzZSAxMDc6Y2FzZSAxNzE6Y2FzZSAxODc6cj0xO2JyZWFrO2Nhc2UgMTg5OmNhc2UgMTA5OmNhc2UgMTczOnI9LTE7YnJlYWs7Y2FzZSAzNzp0LnNoaWZ0S2V5P249LTE6KHQucHJldmVudERlZmF1bHQoKSxhPS0xKTticmVhaztjYXNlIDM5OnQuc2hpZnRLZXk/bj0xOih0LnByZXZlbnREZWZhdWx0KCksYT0xKTticmVhaztjYXNlIDM4OnQuc2hpZnRLZXk/aT0xOih0LnByZXZlbnREZWZhdWx0KCksbz0tMSk7YnJlYWs7Y2FzZSA0MDp0LnNoaWZ0S2V5P2k9LTE6KHQucHJldmVudERlZmF1bHQoKSxvPTEpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXJldHVybntjYW1lcmFBbmltYXRpb246ZnVuY3Rpb24ocyl7dmFyIGw9cy5nZXRab29tKCk7cy5lYXNlVG8oe2R1cmF0aW9uOjMwMCxlYXNlSWQ6ImtleWJvYXJkSGFuZGxlciIsZWFzaW5nOnNpLHpvb206cj9NYXRoLnJvdW5kKGwpK3IqKHQuc2hpZnRLZXk/MjoxKTpsLGJlYXJpbmc6cy5nZXRCZWFyaW5nKCkrbiplLl9iZWFyaW5nU3RlcCxwaXRjaDpzLmdldFBpdGNoKCkraSplLl9waXRjaFN0ZXAsb2Zmc2V0OlstYSplLl9wYW5TdGVwLC1vKmUuX3BhblN0ZXBdLGNlbnRlcjpzLmdldENlbnRlcigpfSx7b3JpZ2luYWxFdmVudDp0fSl9fX19LG9pLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSEwfSxvaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZXNldCgpfSxvaS5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LG9pLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9O3ZhciBsaT1mdW5jdGlvbihlLHIpe3RoaXMuX21hcD1lLHRoaXMuX2VsPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5faGFuZGxlcj1yLHRoaXMuX2RlbHRhPTAsdGhpcy5fZGVmYXVsdFpvb21SYXRlPS4wMSx0aGlzLl93aGVlbFpvb21SYXRlPTEvNDUwLHQuYmluZEFsbChbIl9vbldoZWVsIiwiX29uVGltZW91dCIsIl9vblNjcm9sbEZyYW1lIiwiX29uU2Nyb2xsRmluaXNoZWQiXSx0aGlzKX07bGkucHJvdG90eXBlLnNldFpvb21SYXRlPWZ1bmN0aW9uKHQpe3RoaXMuX2RlZmF1bHRab29tUmF0ZT10fSxsaS5wcm90b3R5cGUuc2V0V2hlZWxab29tUmF0ZT1mdW5jdGlvbih0KXt0aGlzLl93aGVlbFpvb21SYXRlPXR9LGxpLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2VuYWJsZWR9LGxpLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fYWN0aXZlfHx2b2lkIDAhPT10aGlzLl9maW5pc2hUaW1lb3V0fSxsaS5wcm90b3R5cGUuaXNab29taW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl96b29taW5nfSxsaS5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbmFibGVkPSEwLHRoaXMuX2Fyb3VuZENlbnRlcj10JiYiY2VudGVyIj09PXQuYXJvdW5kKX0sbGkucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZW5hYmxlZD0hMSl9LGxpLnByb3RvdHlwZS53aGVlbD1mdW5jdGlvbihlKXtpZih0aGlzLmlzRW5hYmxlZCgpKXt2YXIgcj1lLmRlbHRhTW9kZT09PXQud2luZG93LldoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU/NDAqZS5kZWx0YVk6ZS5kZWx0YVksbj10LmJyb3dzZXIubm93KCksaT1uLSh0aGlzLl9sYXN0V2hlZWxFdmVudFRpbWV8fDApO3RoaXMuX2xhc3RXaGVlbEV2ZW50VGltZT1uLDAhPT1yJiZyJTQuMDAwMjQ0MTQwNjI1PT0wP3RoaXMuX3R5cGU9IndoZWVsIjowIT09ciYmTWF0aC5hYnMocik8ND90aGlzLl90eXBlPSJ0cmFja3BhZCI6aT40MDA/KHRoaXMuX3R5cGU9bnVsbCx0aGlzLl9sYXN0VmFsdWU9cix0aGlzLl90aW1lb3V0PXNldFRpbWVvdXQodGhpcy5fb25UaW1lb3V0LDQwLGUpKTp0aGlzLl90eXBlfHwodGhpcy5fdHlwZT1NYXRoLmFicyhpKnIpPDIwMD8idHJhY2twYWQiOiJ3aGVlbCIsdGhpcy5fdGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KSx0aGlzLl90aW1lb3V0PW51bGwscis9dGhpcy5fbGFzdFZhbHVlKSksZS5zaGlmdEtleSYmciYmKHIvPTQpLHRoaXMuX3R5cGUmJih0aGlzLl9sYXN0V2hlZWxFdmVudD1lLHRoaXMuX2RlbHRhLT1yLHRoaXMuX2FjdGl2ZXx8dGhpcy5fc3RhcnQoZSkpLGUucHJldmVudERlZmF1bHQoKX19LGxpLnByb3RvdHlwZS5fb25UaW1lb3V0PWZ1bmN0aW9uKHQpe3RoaXMuX3R5cGU9IndoZWVsIix0aGlzLl9kZWx0YS09dGhpcy5fbGFzdFZhbHVlLHRoaXMuX2FjdGl2ZXx8dGhpcy5fc3RhcnQodCl9LGxpLnByb3RvdHlwZS5fc3RhcnQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5fZGVsdGEpe3RoaXMuX2ZyYW1lSWQmJih0aGlzLl9mcmFtZUlkPW51bGwpLHRoaXMuX2FjdGl2ZT0hMCx0aGlzLmlzWm9vbWluZygpfHwodGhpcy5fem9vbWluZz0hMCksdGhpcy5fZmluaXNoVGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLl9maW5pc2hUaW1lb3V0KSxkZWxldGUgdGhpcy5fZmluaXNoVGltZW91dCk7dmFyIG49ci5tb3VzZVBvcyh0aGlzLl9lbCxlKTt0aGlzLl9hcm91bmQ9dC5MbmdMYXQuY29udmVydCh0aGlzLl9hcm91bmRDZW50ZXI/dGhpcy5fbWFwLmdldENlbnRlcigpOnRoaXMuX21hcC51bnByb2plY3QobikpLHRoaXMuX2Fyb3VuZFBvaW50PXRoaXMuX21hcC50cmFuc2Zvcm0ubG9jYXRpb25Qb2ludCh0aGlzLl9hcm91bmQpLHRoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPSEwLHRoaXMuX2hhbmRsZXIuX3RyaWdnZXJSZW5kZXJGcmFtZSgpKX19LGxpLnByb3RvdHlwZS5yZW5kZXJGcmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vblNjcm9sbEZyYW1lKCl9LGxpLnByb3RvdHlwZS5fb25TY3JvbGxGcmFtZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5fZnJhbWVJZCYmKHRoaXMuX2ZyYW1lSWQ9bnVsbCx0aGlzLmlzQWN0aXZlKCkpKXt2YXIgcj10aGlzLl9tYXAudHJhbnNmb3JtO2lmKDAhPT10aGlzLl9kZWx0YSl7dmFyIG49IndoZWVsIj09PXRoaXMuX3R5cGUmJk1hdGguYWJzKHRoaXMuX2RlbHRhKT40LjAwMDI0NDE0MDYyNT90aGlzLl93aGVlbFpvb21SYXRlOnRoaXMuX2RlZmF1bHRab29tUmF0ZSxpPTIvKDErTWF0aC5leHAoLU1hdGguYWJzKHRoaXMuX2RlbHRhKm4pKSk7dGhpcy5fZGVsdGE8MCYmMCE9PWkmJihpPTEvaSk7dmFyIGE9Im51bWJlciI9PXR5cGVvZiB0aGlzLl90YXJnZXRab29tP3Iuem9vbVNjYWxlKHRoaXMuX3RhcmdldFpvb20pOnIuc2NhbGU7dGhpcy5fdGFyZ2V0Wm9vbT1NYXRoLm1pbihyLm1heFpvb20sTWF0aC5tYXgoci5taW5ab29tLHIuc2NhbGVab29tKGEqaSkpKSwid2hlZWwiPT09dGhpcy5fdHlwZSYmKHRoaXMuX3N0YXJ0Wm9vbT1yLnpvb20sdGhpcy5fZWFzaW5nPXRoaXMuX3Ntb290aE91dEVhc2luZygyMDApKSx0aGlzLl9kZWx0YT0wfXZhciBvLHM9Im51bWJlciI9PXR5cGVvZiB0aGlzLl90YXJnZXRab29tP3RoaXMuX3RhcmdldFpvb206ci56b29tLGw9dGhpcy5fc3RhcnRab29tLGM9dGhpcy5fZWFzaW5nLHU9ITE7aWYoIndoZWVsIj09PXRoaXMuX3R5cGUmJmwmJmMpe3ZhciBmPU1hdGgubWluKCh0LmJyb3dzZXIubm93KCktdGhpcy5fbGFzdFdoZWVsRXZlbnRUaW1lKS8yMDAsMSksaD1jKGYpO289dC5udW1iZXIobCxzLGgpLGY8MT90aGlzLl9mcmFtZUlkfHwodGhpcy5fZnJhbWVJZD0hMCk6dT0hMH1lbHNlIG89cyx1PSEwO3JldHVybiB0aGlzLl9hY3RpdmU9ITAsdSYmKHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9maW5pc2hUaW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5fem9vbWluZz0hMSxlLl9oYW5kbGVyLl90cmlnZ2VyUmVuZGVyRnJhbWUoKSxkZWxldGUgZS5fdGFyZ2V0Wm9vbSxkZWxldGUgZS5fZmluaXNoVGltZW91dH0pLDIwMCkpLHtub0luZXJ0aWE6ITAsbmVlZHNSZW5kZXJGcmFtZTohdSx6b29tRGVsdGE6by1yLnpvb20sYXJvdW5kOnRoaXMuX2Fyb3VuZFBvaW50LG9yaWdpbmFsRXZlbnQ6dGhpcy5fbGFzdFdoZWVsRXZlbnR9fX0sbGkucHJvdG90eXBlLl9zbW9vdGhPdXRFYXNpbmc9ZnVuY3Rpb24oZSl7dmFyIHI9dC5lYXNlO2lmKHRoaXMuX3ByZXZFYXNlKXt2YXIgbj10aGlzLl9wcmV2RWFzZSxpPSh0LmJyb3dzZXIubm93KCktbi5zdGFydCkvbi5kdXJhdGlvbixhPW4uZWFzaW5nKGkrLjAxKS1uLmVhc2luZyhpKSxvPS4yNy9NYXRoLnNxcnQoYSphKzFlLTQpKi4wMSxzPU1hdGguc3FydCguMDcyOS1vKm8pO3I9dC5iZXppZXIobyxzLC4yNSwxKX1yZXR1cm4gdGhpcy5fcHJldkVhc2U9e3N0YXJ0OnQuYnJvd3Nlci5ub3coKSxkdXJhdGlvbjplLGVhc2luZzpyfSxyfSxsaS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITF9O3ZhciBjaT1mdW5jdGlvbih0LGUpe3RoaXMuX2NsaWNrWm9vbT10LHRoaXMuX3RhcFpvb209ZX07Y2kucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2NsaWNrWm9vbS5lbmFibGUoKSx0aGlzLl90YXBab29tLmVuYWJsZSgpfSxjaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX2NsaWNrWm9vbS5kaXNhYmxlKCksdGhpcy5fdGFwWm9vbS5kaXNhYmxlKCl9LGNpLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2xpY2tab29tLmlzRW5hYmxlZCgpJiZ0aGlzLl90YXBab29tLmlzRW5hYmxlZCgpfSxjaS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2xpY2tab29tLmlzQWN0aXZlKCl8fHRoaXMuX3RhcFpvb20uaXNBY3RpdmUoKX07dmFyIHVpPWZ1bmN0aW9uKCl7dGhpcy5yZXNldCgpfTt1aS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITF9LHVpLnByb3RvdHlwZS5kYmxjbGljaz1mdW5jdGlvbih0LGUpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCkse2NhbWVyYUFuaW1hdGlvbjpmdW5jdGlvbihyKXtyLmVhc2VUbyh7ZHVyYXRpb246MzAwLHpvb206ci5nZXRab29tKCkrKHQuc2hpZnRLZXk/LTE6MSksYXJvdW5kOnIudW5wcm9qZWN0KGUpfSx7b3JpZ2luYWxFdmVudDp0fSl9fX0sdWkucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITB9LHVpLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlc2V0KCl9LHVpLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sdWkucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX07dmFyIGZpPWZ1bmN0aW9uKCl7dGhpcy5fdGFwPW5ldyBxbih7bnVtVG91Y2hlczoxLG51bVRhcHM6MX0pLHRoaXMucmVzZXQoKX07ZmkucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExLGRlbGV0ZSB0aGlzLl9zd2lwZVBvaW50LGRlbGV0ZSB0aGlzLl9zd2lwZVRvdWNoLGRlbGV0ZSB0aGlzLl90YXBUaW1lLHRoaXMuX3RhcC5yZXNldCgpfSxmaS5wcm90b3R5cGUudG91Y2hzdGFydD1mdW5jdGlvbih0LGUscil7dGhpcy5fc3dpcGVQb2ludHx8KHRoaXMuX3RhcFRpbWUmJnQudGltZVN0YW1wLXRoaXMuX3RhcFRpbWU+NTAwJiZ0aGlzLnJlc2V0KCksdGhpcy5fdGFwVGltZT9yLmxlbmd0aD4wJiYodGhpcy5fc3dpcGVQb2ludD1lWzBdLHRoaXMuX3N3aXBlVG91Y2g9clswXS5pZGVudGlmaWVyKTp0aGlzLl90YXAudG91Y2hzdGFydCh0LGUscikpfSxmaS5wcm90b3R5cGUudG91Y2htb3ZlPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl90YXBUaW1lKXtpZih0aGlzLl9zd2lwZVBvaW50KXtpZihyWzBdLmlkZW50aWZpZXIhPT10aGlzLl9zd2lwZVRvdWNoKXJldHVybjt2YXIgbj1lWzBdLGk9bi55LXRoaXMuX3N3aXBlUG9pbnQueTtyZXR1cm4gdGhpcy5fc3dpcGVQb2ludD1uLHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9hY3RpdmU9ITAse3pvb21EZWx0YTppLzEyOH19fWVsc2UgdGhpcy5fdGFwLnRvdWNobW92ZSh0LGUscil9LGZpLnByb3RvdHlwZS50b3VjaGVuZD1mdW5jdGlvbih0LGUscil7dGhpcy5fdGFwVGltZT90aGlzLl9zd2lwZVBvaW50JiYwPT09ci5sZW5ndGgmJnRoaXMucmVzZXQoKTp0aGlzLl90YXAudG91Y2hlbmQodCxlLHIpJiYodGhpcy5fdGFwVGltZT10LnRpbWVTdGFtcCl9LGZpLnByb3RvdHlwZS50b3VjaGNhbmNlbD1mdW5jdGlvbigpe3RoaXMucmVzZXQoKX0sZmkucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITB9LGZpLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlc2V0KCl9LGZpLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sZmkucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX07dmFyIGhpPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9lbD10LHRoaXMuX21vdXNlUGFuPWUsdGhpcy5fdG91Y2hQYW49cn07aGkucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt0aGlzLl9pbmVydGlhT3B0aW9ucz10fHx7fSx0aGlzLl9tb3VzZVBhbi5lbmFibGUoKSx0aGlzLl90b3VjaFBhbi5lbmFibGUoKSx0aGlzLl9lbC5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC10b3VjaC1kcmFnLXBhbiIpfSxoaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX21vdXNlUGFuLmRpc2FibGUoKSx0aGlzLl90b3VjaFBhbi5kaXNhYmxlKCksdGhpcy5fZWwuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtdG91Y2gtZHJhZy1wYW4iKX0saGkucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3VzZVBhbi5pc0VuYWJsZWQoKSYmdGhpcy5fdG91Y2hQYW4uaXNFbmFibGVkKCl9LGhpLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3VzZVBhbi5pc0FjdGl2ZSgpfHx0aGlzLl90b3VjaFBhbi5pc0FjdGl2ZSgpfTt2YXIgcGk9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3BpdGNoV2l0aFJvdGF0ZT10LnBpdGNoV2l0aFJvdGF0ZSx0aGlzLl9tb3VzZVJvdGF0ZT1lLHRoaXMuX21vdXNlUGl0Y2g9cn07cGkucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX21vdXNlUm90YXRlLmVuYWJsZSgpLHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSYmdGhpcy5fbW91c2VQaXRjaC5lbmFibGUoKX0scGkucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9tb3VzZVJvdGF0ZS5kaXNhYmxlKCksdGhpcy5fbW91c2VQaXRjaC5kaXNhYmxlKCl9LHBpLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW91c2VSb3RhdGUuaXNFbmFibGVkKCkmJighdGhpcy5fcGl0Y2hXaXRoUm90YXRlfHx0aGlzLl9tb3VzZVBpdGNoLmlzRW5hYmxlZCgpKX0scGkucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vdXNlUm90YXRlLmlzQWN0aXZlKCl8fHRoaXMuX21vdXNlUGl0Y2guaXNBY3RpdmUoKX07dmFyIGRpPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuX2VsPXQsdGhpcy5fdG91Y2hab29tPWUsdGhpcy5fdG91Y2hSb3RhdGU9cix0aGlzLl90YXBEcmFnWm9vbT1uLHRoaXMuX3JvdGF0aW9uRGlzYWJsZWQ9ITEsdGhpcy5fZW5hYmxlZD0hMH07ZGkucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt0aGlzLl90b3VjaFpvb20uZW5hYmxlKHQpLHRoaXMuX3JvdGF0aW9uRGlzYWJsZWR8fHRoaXMuX3RvdWNoUm90YXRlLmVuYWJsZSh0KSx0aGlzLl90YXBEcmFnWm9vbS5lbmFibGUoKSx0aGlzLl9lbC5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC10b3VjaC16b29tLXJvdGF0ZSIpfSxkaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX3RvdWNoWm9vbS5kaXNhYmxlKCksdGhpcy5fdG91Y2hSb3RhdGUuZGlzYWJsZSgpLHRoaXMuX3RhcERyYWdab29tLmRpc2FibGUoKSx0aGlzLl9lbC5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC10b3VjaC16b29tLXJvdGF0ZSIpfSxkaS5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RvdWNoWm9vbS5pc0VuYWJsZWQoKSYmKHRoaXMuX3JvdGF0aW9uRGlzYWJsZWR8fHRoaXMuX3RvdWNoUm90YXRlLmlzRW5hYmxlZCgpKSYmdGhpcy5fdGFwRHJhZ1pvb20uaXNFbmFibGVkKCl9LGRpLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90b3VjaFpvb20uaXNBY3RpdmUoKXx8dGhpcy5fdG91Y2hSb3RhdGUuaXNBY3RpdmUoKXx8dGhpcy5fdGFwRHJhZ1pvb20uaXNBY3RpdmUoKX0sZGkucHJvdG90eXBlLmRpc2FibGVSb3RhdGlvbj1mdW5jdGlvbigpe3RoaXMuX3JvdGF0aW9uRGlzYWJsZWQ9ITAsdGhpcy5fdG91Y2hSb3RhdGUuZGlzYWJsZSgpfSxkaS5wcm90b3R5cGUuZW5hYmxlUm90YXRpb249ZnVuY3Rpb24oKXt0aGlzLl9yb3RhdGlvbkRpc2FibGVkPSExLHRoaXMuX3RvdWNoWm9vbS5pc0VuYWJsZWQoKSYmdGhpcy5fdG91Y2hSb3RhdGUuZW5hYmxlKCl9O3ZhciBtaT1mdW5jdGlvbih0KXtyZXR1cm4gdC56b29tfHx0LmRyYWd8fHQucGl0Y2h8fHQucm90YXRlfSxnaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9KHQuRXZlbnQpO2Z1bmN0aW9uIHZpKHQpe3JldHVybiB0LnBhbkRlbHRhJiZ0LnBhbkRlbHRhLm1hZygpfHx0Lnpvb21EZWx0YXx8dC5iZWFyaW5nRGVsdGF8fHQucGl0Y2hEZWx0YX12YXIgeWk9ZnVuY3Rpb24oZSxuKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD10aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5faGFuZGxlcnM9W10sdGhpcy5faGFuZGxlcnNCeUlkPXt9LHRoaXMuX2NoYW5nZXM9W10sdGhpcy5faW5lcnRpYT1uZXcgT24oZSksdGhpcy5fYmVhcmluZ1NuYXA9bi5iZWFyaW5nU25hcCx0aGlzLl9wcmV2aW91c0FjdGl2ZUhhbmRsZXJzPXt9LHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3M9e30sdGhpcy5fYWRkRGVmYXVsdEhhbmRsZXJzKG4pLHQuYmluZEFsbChbImhhbmRsZUV2ZW50IiwiaGFuZGxlV2luZG93RXZlbnQiXSx0aGlzKTt2YXIgaT10aGlzLl9lbDt0aGlzLl9saXN0ZW5lcnM9W1tpLCJ0b3VjaHN0YXJ0Iix7cGFzc2l2ZTohMX1dLFtpLCJ0b3VjaG1vdmUiLHtwYXNzaXZlOiExfV0sW2ksInRvdWNoZW5kIix2b2lkIDBdLFtpLCJ0b3VjaGNhbmNlbCIsdm9pZCAwXSxbaSwibW91c2Vkb3duIix2b2lkIDBdLFtpLCJtb3VzZW1vdmUiLHZvaWQgMF0sW2ksIm1vdXNldXAiLHZvaWQgMF0sW3Qud2luZG93LmRvY3VtZW50LCJtb3VzZW1vdmUiLHtjYXB0dXJlOiEwfV0sW3Qud2luZG93LmRvY3VtZW50LCJtb3VzZXVwIix2b2lkIDBdLFtpLCJtb3VzZW92ZXIiLHZvaWQgMF0sW2ksIm1vdXNlb3V0Iix2b2lkIDBdLFtpLCJkYmxjbGljayIsdm9pZCAwXSxbaSwiY2xpY2siLHZvaWQgMF0sW2ksImtleWRvd24iLHtjYXB0dXJlOiExfV0sW2ksImtleXVwIix2b2lkIDBdLFtpLCJ3aGVlbCIse3Bhc3NpdmU6ITF9XSxbaSwiY29udGV4dG1lbnUiLHZvaWQgMF0sW3Qud2luZG93LCJibHVyIix2b2lkIDBdXTtmb3IodmFyIGE9MCxvPXRoaXMuX2xpc3RlbmVyczthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD1zWzBdLGM9c1sxXSx1PXNbMl07ci5hZGRFdmVudExpc3RlbmVyKGwsYyxsPT09dC53aW5kb3cuZG9jdW1lbnQ/dGhpcy5oYW5kbGVXaW5kb3dFdmVudDp0aGlzLmhhbmRsZUV2ZW50LHUpfX07eWkucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCxuPXRoaXMuX2xpc3RlbmVycztlPG4ubGVuZ3RoO2UrPTEpe3ZhciBpPW5bZV0sYT1pWzBdLG89aVsxXSxzPWlbMl07ci5yZW1vdmVFdmVudExpc3RlbmVyKGEsbyxhPT09dC53aW5kb3cuZG9jdW1lbnQ/dGhpcy5oYW5kbGVXaW5kb3dFdmVudDp0aGlzLmhhbmRsZUV2ZW50LHMpfX0seWkucHJvdG90eXBlLl9hZGREZWZhdWx0SGFuZGxlcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLHI9ZS5nZXRDYW52YXNDb250YWluZXIoKTt0aGlzLl9hZGQoIm1hcEV2ZW50IixuZXcgTm4oZSx0KSk7dmFyIG49ZS5ib3hab29tPW5ldyBVbihlLHQpO3RoaXMuX2FkZCgiYm94Wm9vbSIsbik7dmFyIGk9bmV3IEduLGE9bmV3IHVpO2UuZG91YmxlQ2xpY2tab29tPW5ldyBjaShhLGkpLHRoaXMuX2FkZCgidGFwWm9vbSIsaSksdGhpcy5fYWRkKCJjbGlja1pvb20iLGEpO3ZhciBvPW5ldyBmaTt0aGlzLl9hZGQoInRhcERyYWdab29tIixvKTt2YXIgcz1lLnRvdWNoUGl0Y2g9bmV3IGlpO3RoaXMuX2FkZCgidG91Y2hQaXRjaCIscyk7dmFyIGw9bmV3IFhuKHQpLGM9bmV3IFpuKHQpO2UuZHJhZ1JvdGF0ZT1uZXcgcGkodCxsLGMpLHRoaXMuX2FkZCgibW91c2VSb3RhdGUiLGwsWyJtb3VzZVBpdGNoIl0pLHRoaXMuX2FkZCgibW91c2VQaXRjaCIsYyxbIm1vdXNlUm90YXRlIl0pO3ZhciB1PW5ldyBXbih0KSxmPW5ldyBKbih0KTtlLmRyYWdQYW49bmV3IGhpKHIsdSxmKSx0aGlzLl9hZGQoIm1vdXNlUGFuIix1KSx0aGlzLl9hZGQoInRvdWNoUGFuIixmLFsidG91Y2hab29tIiwidG91Y2hSb3RhdGUiXSk7dmFyIGg9bmV3IHJpLHA9bmV3IHRpO2UudG91Y2hab29tUm90YXRlPW5ldyBkaShyLHAsaCxvKSx0aGlzLl9hZGQoInRvdWNoUm90YXRlIixoLFsidG91Y2hQYW4iLCJ0b3VjaFpvb20iXSksdGhpcy5fYWRkKCJ0b3VjaFpvb20iLHAsWyJ0b3VjaFBhbiIsInRvdWNoUm90YXRlIl0pO3ZhciBkPWUuc2Nyb2xsWm9vbT1uZXcgbGkoZSx0aGlzKTt0aGlzLl9hZGQoInNjcm9sbFpvb20iLGQsWyJtb3VzZVBhbiJdKTt2YXIgbT1lLmtleWJvYXJkPW5ldyBvaTt0aGlzLl9hZGQoImtleWJvYXJkIixtKSx0aGlzLl9hZGQoImJsb2NrYWJsZU1hcEV2ZW50IixuZXcgam4oZSkpO2Zvcih2YXIgZz0wLHY9WyJib3hab29tIiwiZG91YmxlQ2xpY2tab29tIiwidGFwRHJhZ1pvb20iLCJ0b3VjaFBpdGNoIiwiZHJhZ1JvdGF0ZSIsImRyYWdQYW4iLCJ0b3VjaFpvb21Sb3RhdGUiLCJzY3JvbGxab29tIiwia2V5Ym9hcmQiXTtnPHYubGVuZ3RoO2crPTEpe3ZhciB5PXZbZ107dC5pbnRlcmFjdGl2ZSYmdFt5XSYmZVt5XS5lbmFibGUodFt5XSl9fSx5aS5wcm90b3R5cGUuX2FkZD1mdW5jdGlvbih0LGUscil7dGhpcy5faGFuZGxlcnMucHVzaCh7aGFuZGxlck5hbWU6dCxoYW5kbGVyOmUsYWxsb3dlZDpyfSksdGhpcy5faGFuZGxlcnNCeUlkW3RdPWV9LHlpLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3VwZGF0aW5nQ2FtZXJhKXtmb3IodmFyIHQ9MCxlPXRoaXMuX2hhbmRsZXJzO3Q8ZS5sZW5ndGg7dCs9MSl7ZVt0XS5oYW5kbGVyLnJlc2V0KCl9dGhpcy5faW5lcnRpYS5jbGVhcigpLHRoaXMuX2ZpcmVFdmVudHMoe30se30pLHRoaXMuX2NoYW5nZXM9W119fSx5aS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXRoaXMuX2hhbmRsZXJzO3Q8ZS5sZW5ndGg7dCs9MSl7aWYoZVt0XS5oYW5kbGVyLmlzQWN0aXZlKCkpcmV0dXJuITB9cmV0dXJuITF9LHlpLnByb3RvdHlwZS5pc1pvb21pbmc9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2V2ZW50c0luUHJvZ3Jlc3Muem9vbXx8dGhpcy5fbWFwLnNjcm9sbFpvb20uaXNab29taW5nKCl9LHlpLnByb3RvdHlwZS5pc1JvdGF0aW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9ldmVudHNJblByb2dyZXNzLnJvdGF0ZX0seWkucHJvdG90eXBlLmlzTW92aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4obWkodGhpcy5fZXZlbnRzSW5Qcm9ncmVzcykpfHx0aGlzLmlzWm9vbWluZygpfSx5aS5wcm90b3R5cGUuX2Jsb2NrZWRCeUFjdGl2ZT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuIGluIHQpaWYobiE9PXImJighZXx8ZS5pbmRleE9mKG4pPDApKXJldHVybiEwO3JldHVybiExfSx5aS5wcm90b3R5cGUuaGFuZGxlV2luZG93RXZlbnQ9ZnVuY3Rpb24odCl7dGhpcy5oYW5kbGVFdmVudCh0LHQudHlwZSsiV2luZG93Iil9LHlpLnByb3RvdHlwZS5fZ2V0TWFwVG91Y2hlcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT1pLnRhcmdldDt0aGlzLl9lbC5jb250YWlucyhhKSYmZS5wdXNoKGkpfXJldHVybiBlfSx5aS5wcm90b3R5cGUuaGFuZGxlRXZlbnQ9ZnVuY3Rpb24odCxlKXtpZigiYmx1ciIhPT10LnR5cGUpe3RoaXMuX3VwZGF0aW5nQ2FtZXJhPSEwO2Zvcih2YXIgbj0icmVuZGVyRnJhbWUiPT09dC50eXBlP3ZvaWQgMDp0LGk9e25lZWRzUmVuZGVyRnJhbWU6ITF9LGE9e30sbz17fSxzPXQudG91Y2hlcz90aGlzLl9nZXRNYXBUb3VjaGVzKHQudG91Y2hlcyk6dm9pZCAwLGw9cz9yLnRvdWNoUG9zKHRoaXMuX2VsLHMpOnIubW91c2VQb3ModGhpcy5fZWwsdCksYz0wLHU9dGhpcy5faGFuZGxlcnM7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgZj11W2NdLGg9Zi5oYW5kbGVyTmFtZSxwPWYuaGFuZGxlcixkPWYuYWxsb3dlZDtpZihwLmlzRW5hYmxlZCgpKXt2YXIgbT12b2lkIDA7dGhpcy5fYmxvY2tlZEJ5QWN0aXZlKG8sZCxoKT9wLnJlc2V0KCk6cFtlfHx0LnR5cGVdJiYobT1wW2V8fHQudHlwZV0odCxsLHMpLHRoaXMubWVyZ2VIYW5kbGVyUmVzdWx0KGksYSxtLGgsbiksbSYmbS5uZWVkc1JlbmRlckZyYW1lJiZ0aGlzLl90cmlnZ2VyUmVuZGVyRnJhbWUoKSksKG18fHAuaXNBY3RpdmUoKSkmJihvW2hdPXApfX12YXIgZz17fTtmb3IodmFyIHYgaW4gdGhpcy5fcHJldmlvdXNBY3RpdmVIYW5kbGVycylvW3ZdfHwoZ1t2XT1uKTt0aGlzLl9wcmV2aW91c0FjdGl2ZUhhbmRsZXJzPW8sKE9iamVjdC5rZXlzKGcpLmxlbmd0aHx8dmkoaSkpJiYodGhpcy5fY2hhbmdlcy5wdXNoKFtpLGEsZ10pLHRoaXMuX3RyaWdnZXJSZW5kZXJGcmFtZSgpKSwoT2JqZWN0LmtleXMobykubGVuZ3RofHx2aShpKSkmJnRoaXMuX21hcC5fc3RvcCghMCksdGhpcy5fdXBkYXRpbmdDYW1lcmE9ITE7dmFyIHk9aS5jYW1lcmFBbmltYXRpb247eSYmKHRoaXMuX2luZXJ0aWEuY2xlYXIoKSx0aGlzLl9maXJlRXZlbnRzKHt9LHt9KSx0aGlzLl9jaGFuZ2VzPVtdLHkodGhpcy5fbWFwKSl9ZWxzZSB0aGlzLnN0b3AoKX0seWkucHJvdG90eXBlLm1lcmdlSGFuZGxlclJlc3VsdD1mdW5jdGlvbihlLHIsbixpLGEpe2lmKG4pe3QuZXh0ZW5kKGUsbik7dmFyIG89e2hhbmRsZXJOYW1lOmksb3JpZ2luYWxFdmVudDpuLm9yaWdpbmFsRXZlbnR8fGF9O3ZvaWQgMCE9PW4uem9vbURlbHRhJiYoci56b29tPW8pLHZvaWQgMCE9PW4ucGFuRGVsdGEmJihyLmRyYWc9byksdm9pZCAwIT09bi5waXRjaERlbHRhJiYoci5waXRjaD1vKSx2b2lkIDAhPT1uLmJlYXJpbmdEZWx0YSYmKHIucm90YXRlPW8pfX0seWkucHJvdG90eXBlLl9hcHBseUNoYW5nZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9e30scj17fSxuPXt9LGk9MCxhPXRoaXMuX2NoYW5nZXM7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldLHM9b1swXSxsPW9bMV0sYz1vWzJdO3MucGFuRGVsdGEmJihlLnBhbkRlbHRhPShlLnBhbkRlbHRhfHxuZXcgdC5Qb2ludCgwLDApKS5fYWRkKHMucGFuRGVsdGEpKSxzLnpvb21EZWx0YSYmKGUuem9vbURlbHRhPShlLnpvb21EZWx0YXx8MCkrcy56b29tRGVsdGEpLHMuYmVhcmluZ0RlbHRhJiYoZS5iZWFyaW5nRGVsdGE9KGUuYmVhcmluZ0RlbHRhfHwwKStzLmJlYXJpbmdEZWx0YSkscy5waXRjaERlbHRhJiYoZS5waXRjaERlbHRhPShlLnBpdGNoRGVsdGF8fDApK3MucGl0Y2hEZWx0YSksdm9pZCAwIT09cy5hcm91bmQmJihlLmFyb3VuZD1zLmFyb3VuZCksdm9pZCAwIT09cy5waW5jaEFyb3VuZCYmKGUucGluY2hBcm91bmQ9cy5waW5jaEFyb3VuZCkscy5ub0luZXJ0aWEmJihlLm5vSW5lcnRpYT1zLm5vSW5lcnRpYSksdC5leHRlbmQocixsKSx0LmV4dGVuZChuLGMpfXRoaXMuX3VwZGF0ZU1hcFRyYW5zZm9ybShlLHIsbiksdGhpcy5fY2hhbmdlcz1bXX0seWkucHJvdG90eXBlLl91cGRhdGVNYXBUcmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX21hcCxpPW4udHJhbnNmb3JtO2lmKCF2aSh0KSlyZXR1cm4gdGhpcy5fZmlyZUV2ZW50cyhlLHIpO3ZhciBhPXQucGFuRGVsdGEsbz10Lnpvb21EZWx0YSxzPXQuYmVhcmluZ0RlbHRhLGw9dC5waXRjaERlbHRhLGM9dC5hcm91bmQsdT10LnBpbmNoQXJvdW5kO3ZvaWQgMCE9PXUmJihjPXUpLG4uX3N0b3AoITApLGM9Y3x8bi50cmFuc2Zvcm0uY2VudGVyUG9pbnQ7dmFyIGY9aS5wb2ludExvY2F0aW9uKGE/Yy5zdWIoYSk6Yyk7cyYmKGkuYmVhcmluZys9cyksbCYmKGkucGl0Y2grPWwpLG8mJihpLnpvb20rPW8pLGkuc2V0TG9jYXRpb25BdFBvaW50KGYsYyksdGhpcy5fbWFwLl91cGRhdGUoKSx0Lm5vSW5lcnRpYXx8dGhpcy5faW5lcnRpYS5yZWNvcmQodCksdGhpcy5fZmlyZUV2ZW50cyhlLHIpfSx5aS5wcm90b3R5cGUuX2ZpcmVFdmVudHM9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLGk9bWkodGhpcy5fZXZlbnRzSW5Qcm9ncmVzcyksYT1taShlKSxvPXt9O2Zvcih2YXIgcyBpbiBlKXt2YXIgbD1lW3NdLm9yaWdpbmFsRXZlbnQ7dGhpcy5fZXZlbnRzSW5Qcm9ncmVzc1tzXXx8KG9bcysic3RhcnQiXT1sKSx0aGlzLl9ldmVudHNJblByb2dyZXNzW3NdPWVbc119Zm9yKHZhciBjIGluIWkmJmEmJnRoaXMuX2ZpcmVFdmVudCgibW92ZXN0YXJ0IixhLm9yaWdpbmFsRXZlbnQpLG8pdGhpcy5fZmlyZUV2ZW50KGMsb1tjXSk7Zm9yKHZhciB1IGluIGUucm90YXRlJiYodGhpcy5fYmVhcmluZ0NoYW5nZWQ9ITApLGEmJnRoaXMuX2ZpcmVFdmVudCgibW92ZSIsYS5vcmlnaW5hbEV2ZW50KSxlKXt2YXIgZj1lW3VdLm9yaWdpbmFsRXZlbnQ7dGhpcy5fZmlyZUV2ZW50KHUsZil9dmFyIGgscD17fTtmb3IodmFyIGQgaW4gdGhpcy5fZXZlbnRzSW5Qcm9ncmVzcyl7dmFyIG09dGhpcy5fZXZlbnRzSW5Qcm9ncmVzc1tkXSxnPW0uaGFuZGxlck5hbWUsdj1tLm9yaWdpbmFsRXZlbnQ7dGhpcy5faGFuZGxlcnNCeUlkW2ddLmlzQWN0aXZlKCl8fChkZWxldGUgdGhpcy5fZXZlbnRzSW5Qcm9ncmVzc1tkXSxoPXJbZ118fHYscFtkKyJlbmQiXT1oKX1mb3IodmFyIHkgaW4gcCl0aGlzLl9maXJlRXZlbnQoeSxwW3ldKTt2YXIgeD1taSh0aGlzLl9ldmVudHNJblByb2dyZXNzKTtpZigoaXx8YSkmJiF4KXt0aGlzLl91cGRhdGluZ0NhbWVyYT0hMDt2YXIgYj10aGlzLl9pbmVydGlhLl9vbk1vdmVFbmQodGhpcy5fbWFwLmRyYWdQYW4uX2luZXJ0aWFPcHRpb25zKSxfPWZ1bmN0aW9uKHQpe3JldHVybiAwIT09dCYmLW4uX2JlYXJpbmdTbmFwPHQmJnQ8bi5fYmVhcmluZ1NuYXB9O2I/KF8oYi5iZWFyaW5nfHx0aGlzLl9tYXAuZ2V0QmVhcmluZygpKSYmKGIuYmVhcmluZz0wKSx0aGlzLl9tYXAuZWFzZVRvKGIse29yaWdpbmFsRXZlbnQ6aH0pKToodGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVlbmQiLHtvcmlnaW5hbEV2ZW50Omh9KSksXyh0aGlzLl9tYXAuZ2V0QmVhcmluZygpKSYmdGhpcy5fbWFwLnJlc2V0Tm9ydGgoKSksdGhpcy5fYmVhcmluZ0NoYW5nZWQ9ITEsdGhpcy5fdXBkYXRpbmdDYW1lcmE9ITF9fSx5aS5wcm90b3R5cGUuX2ZpcmVFdmVudD1mdW5jdGlvbihlLHIpe3RoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KGUscj97b3JpZ2luYWxFdmVudDpyfTp7fSkpfSx5aS5wcm90b3R5cGUuX3RyaWdnZXJSZW5kZXJGcmFtZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dm9pZCAwPT09dGhpcy5fZnJhbWVJZCYmKHRoaXMuX2ZyYW1lSWQ9dGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUoKGZ1bmN0aW9uKGUpe2RlbGV0ZSB0Ll9mcmFtZUlkLHQuaGFuZGxlRXZlbnQobmV3IGdpKCJyZW5kZXJGcmFtZSIse3RpbWVTdGFtcDplfSkpLHQuX2FwcGx5Q2hhbmdlcygpfSkpKX07dmFyIHhpPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuKXtlLmNhbGwodGhpcyksdGhpcy5fbW92aW5nPSExLHRoaXMuX3pvb21pbmc9ITEsdGhpcy50cmFuc2Zvcm09cix0aGlzLl9iZWFyaW5nU25hcD1uLmJlYXJpbmdTbmFwLHQuYmluZEFsbChbIl9yZW5kZXJGcmFtZUNhbGxiYWNrIl0sdGhpcyl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmdldENlbnRlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgdC5MbmdMYXQodGhpcy50cmFuc2Zvcm0uY2VudGVyLmxuZyx0aGlzLnRyYW5zZm9ybS5jZW50ZXIubGF0KX0sci5wcm90b3R5cGUuc2V0Q2VudGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHtjZW50ZXI6dH0sZSl9LHIucHJvdG90eXBlLnBhbkJ5PWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT10LlBvaW50LmNvbnZlcnQoZSkubXVsdCgtMSksdGhpcy5wYW5Ubyh0aGlzLnRyYW5zZm9ybS5jZW50ZXIsdC5leHRlbmQoe29mZnNldDplfSxyKSxuKX0sci5wcm90b3R5cGUucGFuVG89ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVhc2VUbyh0LmV4dGVuZCh7Y2VudGVyOmV9LHIpLG4pfSxyLnByb3RvdHlwZS5nZXRab29tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnpvb219LHIucHJvdG90eXBlLnNldFpvb209ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5qdW1wVG8oe3pvb206dH0sZSksdGhpc30sci5wcm90b3R5cGUuem9vbVRvPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lYXNlVG8odC5leHRlbmQoe3pvb206ZX0sciksbil9LHIucHJvdG90eXBlLnpvb21Jbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnpvb21Ubyh0aGlzLmdldFpvb20oKSsxLHQsZSksdGhpc30sci5wcm90b3R5cGUuem9vbU91dD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnpvb21Ubyh0aGlzLmdldFpvb20oKS0xLHQsZSksdGhpc30sci5wcm90b3R5cGUuZ2V0QmVhcmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5iZWFyaW5nfSxyLnByb3RvdHlwZS5zZXRCZWFyaW5nPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHtiZWFyaW5nOnR9LGUpLHRoaXN9LHIucHJvdG90eXBlLmdldFBhZGRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucGFkZGluZ30sci5wcm90b3R5cGUuc2V0UGFkZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7cGFkZGluZzp0fSxlKSx0aGlzfSxyLnByb3RvdHlwZS5yb3RhdGVUbz1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZWFzZVRvKHQuZXh0ZW5kKHtiZWFyaW5nOmV9LHIpLG4pfSxyLnByb3RvdHlwZS5yZXNldE5vcnRoPWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMucm90YXRlVG8oMCx0LmV4dGVuZCh7ZHVyYXRpb246MWUzfSxlKSxyKSx0aGlzfSxyLnByb3RvdHlwZS5yZXNldE5vcnRoUGl0Y2g9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5lYXNlVG8odC5leHRlbmQoe2JlYXJpbmc6MCxwaXRjaDowLGR1cmF0aW9uOjFlM30sZSksciksdGhpc30sci5wcm90b3R5cGUuc25hcFRvTm9ydGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnModGhpcy5nZXRCZWFyaW5nKCkpPHRoaXMuX2JlYXJpbmdTbmFwP3RoaXMucmVzZXROb3J0aCh0LGUpOnRoaXN9LHIucHJvdG90eXBlLmdldFBpdGNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnBpdGNofSxyLnByb3RvdHlwZS5zZXRQaXRjaD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7cGl0Y2g6dH0sZSksdGhpc30sci5wcm90b3R5cGUuY2FtZXJhRm9yQm91bmRzPWZ1bmN0aW9uKGUscil7cmV0dXJuIGU9dC5MbmdMYXRCb3VuZHMuY29udmVydChlKSx0aGlzLl9jYW1lcmFGb3JCb3hBbmRCZWFyaW5nKGUuZ2V0Tm9ydGhXZXN0KCksZS5nZXRTb3V0aEVhc3QoKSwwLHIpfSxyLnByb3RvdHlwZS5fY2FtZXJhRm9yQm94QW5kQmVhcmluZz1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT17dG9wOjAsYm90dG9tOjAscmlnaHQ6MCxsZWZ0OjB9O2lmKCJudW1iZXIiPT10eXBlb2YoaT10LmV4dGVuZCh7cGFkZGluZzphLG9mZnNldDpbMCwwXSxtYXhab29tOnRoaXMudHJhbnNmb3JtLm1heFpvb219LGkpKS5wYWRkaW5nKXt2YXIgbz1pLnBhZGRpbmc7aS5wYWRkaW5nPXt0b3A6byxib3R0b206byxyaWdodDpvLGxlZnQ6b319aS5wYWRkaW5nPXQuZXh0ZW5kKGEsaS5wYWRkaW5nKTt2YXIgcz10aGlzLnRyYW5zZm9ybSxsPXMucGFkZGluZyxjPXMucHJvamVjdCh0LkxuZ0xhdC5jb252ZXJ0KGUpKSx1PXMucHJvamVjdCh0LkxuZ0xhdC5jb252ZXJ0KHIpKSxmPWMucm90YXRlKC1uKk1hdGguUEkvMTgwKSxoPXUucm90YXRlKC1uKk1hdGguUEkvMTgwKSxwPW5ldyB0LlBvaW50KE1hdGgubWF4KGYueCxoLngpLE1hdGgubWF4KGYueSxoLnkpKSxkPW5ldyB0LlBvaW50KE1hdGgubWluKGYueCxoLngpLE1hdGgubWluKGYueSxoLnkpKSxtPXAuc3ViKGQpLGc9KHMud2lkdGgtKGwubGVmdCtsLnJpZ2h0K2kucGFkZGluZy5sZWZ0K2kucGFkZGluZy5yaWdodCkpL20ueCx2PShzLmhlaWdodC0obC50b3ArbC5ib3R0b20raS5wYWRkaW5nLnRvcCtpLnBhZGRpbmcuYm90dG9tKSkvbS55O2lmKCEodjwwfHxnPDApKXt2YXIgeT1NYXRoLm1pbihzLnNjYWxlWm9vbShzLnNjYWxlKk1hdGgubWluKGcsdikpLGkubWF4Wm9vbSkseD10LlBvaW50LmNvbnZlcnQoaS5vZmZzZXQpLGI9KGkucGFkZGluZy5sZWZ0LWkucGFkZGluZy5yaWdodCkvMixfPShpLnBhZGRpbmcudG9wLWkucGFkZGluZy5ib3R0b20pLzIsdz1uZXcgdC5Qb2ludCh4LngrYix4LnkrXykubXVsdChzLnNjYWxlL3Muem9vbVNjYWxlKHkpKTtyZXR1cm57Y2VudGVyOnMudW5wcm9qZWN0KGMuYWRkKHUpLmRpdigyKS5zdWIodykpLHpvb206eSxiZWFyaW5nOm59fXQud2Fybk9uY2UoIk1hcCBjYW5ub3QgZml0IHdpdGhpbiBjYW52YXMgd2l0aCB0aGUgZ2l2ZW4gYm91bmRzLCBwYWRkaW5nLCBhbmQvb3Igb2Zmc2V0LiIpfSxyLnByb3RvdHlwZS5maXRCb3VuZHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9maXRJbnRlcm5hbCh0aGlzLmNhbWVyYUZvckJvdW5kcyh0LGUpLGUscil9LHIucHJvdG90eXBlLmZpdFNjcmVlbkNvb3JkaW5hdGVzPWZ1bmN0aW9uKGUscixuLGksYSl7cmV0dXJuIHRoaXMuX2ZpdEludGVybmFsKHRoaXMuX2NhbWVyYUZvckJveEFuZEJlYXJpbmcodGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbih0LlBvaW50LmNvbnZlcnQoZSkpLHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24odC5Qb2ludC5jb252ZXJ0KHIpKSxuLGkpLGksYSl9LHIucHJvdG90eXBlLl9maXRJbnRlcm5hbD1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU/KGRlbGV0ZShyPXQuZXh0ZW5kKGUscikpLnBhZGRpbmcsci5saW5lYXI/dGhpcy5lYXNlVG8ocixuKTp0aGlzLmZseVRvKHIsbikpOnRoaXN9LHIucHJvdG90eXBlLmp1bXBUbz1mdW5jdGlvbihlLHIpe3RoaXMuc3RvcCgpO3ZhciBuPXRoaXMudHJhbnNmb3JtLGk9ITEsYT0hMSxvPSExO3JldHVybiJ6b29tImluIGUmJm4uem9vbSE9PStlLnpvb20mJihpPSEwLG4uem9vbT0rZS56b29tKSx2b2lkIDAhPT1lLmNlbnRlciYmKG4uY2VudGVyPXQuTG5nTGF0LmNvbnZlcnQoZS5jZW50ZXIpKSwiYmVhcmluZyJpbiBlJiZuLmJlYXJpbmchPT0rZS5iZWFyaW5nJiYoYT0hMCxuLmJlYXJpbmc9K2UuYmVhcmluZyksInBpdGNoImluIGUmJm4ucGl0Y2ghPT0rZS5waXRjaCYmKG89ITAsbi5waXRjaD0rZS5waXRjaCksbnVsbD09ZS5wYWRkaW5nfHxuLmlzUGFkZGluZ0VxdWFsKGUucGFkZGluZyl8fChuLnBhZGRpbmc9ZS5wYWRkaW5nKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVzdGFydCIscikpLmZpcmUobmV3IHQuRXZlbnQoIm1vdmUiLHIpKSxpJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInpvb21zdGFydCIscikpLmZpcmUobmV3IHQuRXZlbnQoInpvb20iLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJ6b29tZW5kIixyKSksYSYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJyb3RhdGVzdGFydCIscikpLmZpcmUobmV3IHQuRXZlbnQoInJvdGF0ZSIscikpLmZpcmUobmV3IHQuRXZlbnQoInJvdGF0ZWVuZCIscikpLG8mJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicGl0Y2hzdGFydCIscikpLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoIixyKSkuZmlyZShuZXcgdC5FdmVudCgicGl0Y2hlbmQiLHIpKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVlbmQiLHIpKX0sci5wcm90b3R5cGUuZWFzZVRvPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpczt0aGlzLl9zdG9wKCExLGUuZWFzZUlkKSwoITE9PT0oZT10LmV4dGVuZCh7b2Zmc2V0OlswLDBdLGR1cmF0aW9uOjUwMCxlYXNpbmc6dC5lYXNlfSxlKSkuYW5pbWF0ZXx8IWUuZXNzZW50aWFsJiZ0LmJyb3dzZXIucHJlZmVyc1JlZHVjZWRNb3Rpb24pJiYoZS5kdXJhdGlvbj0wKTt2YXIgaT10aGlzLnRyYW5zZm9ybSxhPXRoaXMuZ2V0Wm9vbSgpLG89dGhpcy5nZXRCZWFyaW5nKCkscz10aGlzLmdldFBpdGNoKCksbD10aGlzLmdldFBhZGRpbmcoKSxjPSJ6b29tImluIGU/K2Uuem9vbTphLHU9ImJlYXJpbmciaW4gZT90aGlzLl9ub3JtYWxpemVCZWFyaW5nKGUuYmVhcmluZyxvKTpvLGY9InBpdGNoImluIGU/K2UucGl0Y2g6cyxoPSJwYWRkaW5nImluIGU/ZS5wYWRkaW5nOmkucGFkZGluZyxwPXQuUG9pbnQuY29udmVydChlLm9mZnNldCksZD1pLmNlbnRlclBvaW50LmFkZChwKSxtPWkucG9pbnRMb2NhdGlvbihkKSxnPXQuTG5nTGF0LmNvbnZlcnQoZS5jZW50ZXJ8fG0pO3RoaXMuX25vcm1hbGl6ZUNlbnRlcihnKTt2YXIgdix5LHg9aS5wcm9qZWN0KG0pLGI9aS5wcm9qZWN0KGcpLnN1Yih4KSxfPWkuem9vbVNjYWxlKGMtYSk7ZS5hcm91bmQmJih2PXQuTG5nTGF0LmNvbnZlcnQoZS5hcm91bmQpLHk9aS5sb2NhdGlvblBvaW50KHYpKTt2YXIgdz17bW92aW5nOnRoaXMuX21vdmluZyx6b29taW5nOnRoaXMuX3pvb21pbmcscm90YXRpbmc6dGhpcy5fcm90YXRpbmcscGl0Y2hpbmc6dGhpcy5fcGl0Y2hpbmd9O3JldHVybiB0aGlzLl96b29taW5nPXRoaXMuX3pvb21pbmd8fGMhPT1hLHRoaXMuX3JvdGF0aW5nPXRoaXMuX3JvdGF0aW5nfHxvIT09dSx0aGlzLl9waXRjaGluZz10aGlzLl9waXRjaGluZ3x8ZiE9PXMsdGhpcy5fcGFkZGluZz0haS5pc1BhZGRpbmdFcXVhbChoKSx0aGlzLl9lYXNlSWQ9ZS5lYXNlSWQsdGhpcy5fcHJlcGFyZUVhc2UocixlLm5vTW92ZVN0YXJ0LHcpLGNsZWFyVGltZW91dCh0aGlzLl9lYXNlRW5kVGltZW91dElEKSx0aGlzLl9lYXNlKChmdW5jdGlvbihlKXtpZihuLl96b29taW5nJiYoaS56b29tPXQubnVtYmVyKGEsYyxlKSksbi5fcm90YXRpbmcmJihpLmJlYXJpbmc9dC5udW1iZXIobyx1LGUpKSxuLl9waXRjaGluZyYmKGkucGl0Y2g9dC5udW1iZXIocyxmLGUpKSxuLl9wYWRkaW5nJiYoaS5pbnRlcnBvbGF0ZVBhZGRpbmcobCxoLGUpLGQ9aS5jZW50ZXJQb2ludC5hZGQocCkpLHYpaS5zZXRMb2NhdGlvbkF0UG9pbnQodix5KTtlbHNle3ZhciBtPWkuem9vbVNjYWxlKGkuem9vbS1hKSxnPWM+YT9NYXRoLm1pbigyLF8pOk1hdGgubWF4KC41LF8pLHc9TWF0aC5wb3coZywxLWUpLFQ9aS51bnByb2plY3QoeC5hZGQoYi5tdWx0KGUqdykpLm11bHQobSkpO2kuc2V0TG9jYXRpb25BdFBvaW50KGkucmVuZGVyV29ybGRDb3BpZXM/VC53cmFwKCk6VCxkKX1uLl9maXJlTW92ZUV2ZW50cyhyKX0pLChmdW5jdGlvbih0KXtuLl9hZnRlckVhc2Uocix0KX0pLGUpLHRoaXN9LHIucHJvdG90eXBlLl9wcmVwYXJlRWFzZT1mdW5jdGlvbihlLHIsbil7dm9pZCAwPT09biYmKG49e30pLHRoaXMuX21vdmluZz0hMCxyfHxuLm1vdmluZ3x8dGhpcy5maXJlKG5ldyB0LkV2ZW50KCJtb3Zlc3RhcnQiLGUpKSx0aGlzLl96b29taW5nJiYhbi56b29taW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInpvb21zdGFydCIsZSkpLHRoaXMuX3JvdGF0aW5nJiYhbi5yb3RhdGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJyb3RhdGVzdGFydCIsZSkpLHRoaXMuX3BpdGNoaW5nJiYhbi5waXRjaGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaHN0YXJ0IixlKSl9LHIucHJvdG90eXBlLl9maXJlTW92ZUV2ZW50cz1mdW5jdGlvbihlKXt0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm1vdmUiLGUpKSx0aGlzLl96b29taW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInpvb20iLGUpKSx0aGlzLl9yb3RhdGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJyb3RhdGUiLGUpKSx0aGlzLl9waXRjaGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaCIsZSkpfSxyLnByb3RvdHlwZS5fYWZ0ZXJFYXNlPWZ1bmN0aW9uKGUscil7aWYoIXRoaXMuX2Vhc2VJZHx8IXJ8fHRoaXMuX2Vhc2VJZCE9PXIpe2RlbGV0ZSB0aGlzLl9lYXNlSWQ7dmFyIG49dGhpcy5fem9vbWluZyxpPXRoaXMuX3JvdGF0aW5nLGE9dGhpcy5fcGl0Y2hpbmc7dGhpcy5fbW92aW5nPSExLHRoaXMuX3pvb21pbmc9ITEsdGhpcy5fcm90YXRpbmc9ITEsdGhpcy5fcGl0Y2hpbmc9ITEsdGhpcy5fcGFkZGluZz0hMSxuJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInpvb21lbmQiLGUpKSxpJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJvdGF0ZWVuZCIsZSkpLGEmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicGl0Y2hlbmQiLGUpKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVlbmQiLGUpKX19LHIucHJvdG90eXBlLmZseVRvPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcztpZighZS5lc3NlbnRpYWwmJnQuYnJvd3Nlci5wcmVmZXJzUmVkdWNlZE1vdGlvbil7dmFyIGk9dC5waWNrKGUsWyJjZW50ZXIiLCJ6b29tIiwiYmVhcmluZyIsInBpdGNoIiwiYXJvdW5kIl0pO3JldHVybiB0aGlzLmp1bXBUbyhpLHIpfXRoaXMuc3RvcCgpLGU9dC5leHRlbmQoe29mZnNldDpbMCwwXSxzcGVlZDoxLjIsY3VydmU6MS40MixlYXNpbmc6dC5lYXNlfSxlKTt2YXIgYT10aGlzLnRyYW5zZm9ybSxvPXRoaXMuZ2V0Wm9vbSgpLHM9dGhpcy5nZXRCZWFyaW5nKCksbD10aGlzLmdldFBpdGNoKCksYz10aGlzLmdldFBhZGRpbmcoKSx1PSJ6b29tImluIGU/dC5jbGFtcCgrZS56b29tLGEubWluWm9vbSxhLm1heFpvb20pOm8sZj0iYmVhcmluZyJpbiBlP3RoaXMuX25vcm1hbGl6ZUJlYXJpbmcoZS5iZWFyaW5nLHMpOnMsaD0icGl0Y2giaW4gZT8rZS5waXRjaDpsLHA9InBhZGRpbmciaW4gZT9lLnBhZGRpbmc6YS5wYWRkaW5nLGQ9YS56b29tU2NhbGUodS1vKSxtPXQuUG9pbnQuY29udmVydChlLm9mZnNldCksZz1hLmNlbnRlclBvaW50LmFkZChtKSx2PWEucG9pbnRMb2NhdGlvbihnKSx5PXQuTG5nTGF0LmNvbnZlcnQoZS5jZW50ZXJ8fHYpO3RoaXMuX25vcm1hbGl6ZUNlbnRlcih5KTt2YXIgeD1hLnByb2plY3QodiksYj1hLnByb2plY3QoeSkuc3ViKHgpLF89ZS5jdXJ2ZSx3PU1hdGgubWF4KGEud2lkdGgsYS5oZWlnaHQpLFQ9dy9kLGs9Yi5tYWcoKTtpZigibWluWm9vbSJpbiBlKXt2YXIgQT10LmNsYW1wKE1hdGgubWluKGUubWluWm9vbSxvLHUpLGEubWluWm9vbSxhLm1heFpvb20pLE09dy9hLnpvb21TY2FsZShBLW8pO189TWF0aC5zcXJ0KE0vayoyKX12YXIgUz1fKl87ZnVuY3Rpb24gRSh0KXt2YXIgZT0oVCpULXcqdysodD8tMToxKSpTKlMqayprKS8oMioodD9UOncpKlMqayk7cmV0dXJuIE1hdGgubG9nKE1hdGguc3FydChlKmUrMSktZSl9ZnVuY3Rpb24gTCh0KXtyZXR1cm4oTWF0aC5leHAodCktTWF0aC5leHAoLXQpKS8yfWZ1bmN0aW9uIEModCl7cmV0dXJuKE1hdGguZXhwKHQpK01hdGguZXhwKC10KSkvMn12YXIgUD1FKDApLEk9ZnVuY3Rpb24odCl7cmV0dXJuIEMoUCkvQyhQK18qdCl9LE89ZnVuY3Rpb24odCl7cmV0dXJuIHcqKChDKFApKihMKGU9UCtfKnQpL0MoZSkpLUwoUCkpL1MpL2s7dmFyIGV9LHo9KEUoMSktUCkvXztpZihNYXRoLmFicyhrKTwxZS02fHwhaXNGaW5pdGUoeikpe2lmKE1hdGguYWJzKHctVCk8MWUtNilyZXR1cm4gdGhpcy5lYXNlVG8oZSxyKTt2YXIgRD1UPHc/LTE6MTt6PU1hdGguYWJzKE1hdGgubG9nKFQvdykpL18sTz1mdW5jdGlvbigpe3JldHVybiAwfSxJPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmV4cChEKl8qdCl9fWlmKCJkdXJhdGlvbiJpbiBlKWUuZHVyYXRpb249K2UuZHVyYXRpb247ZWxzZXt2YXIgUj0ic2NyZWVuU3BlZWQiaW4gZT8rZS5zY3JlZW5TcGVlZC9fOitlLnNwZWVkO2UuZHVyYXRpb249MWUzKnovUn1yZXR1cm4gZS5tYXhEdXJhdGlvbiYmZS5kdXJhdGlvbj5lLm1heER1cmF0aW9uJiYoZS5kdXJhdGlvbj0wKSx0aGlzLl96b29taW5nPSEwLHRoaXMuX3JvdGF0aW5nPXMhPT1mLHRoaXMuX3BpdGNoaW5nPWghPT1sLHRoaXMuX3BhZGRpbmc9IWEuaXNQYWRkaW5nRXF1YWwocCksdGhpcy5fcHJlcGFyZUVhc2UociwhMSksdGhpcy5fZWFzZSgoZnVuY3Rpb24oZSl7dmFyIGk9ZSp6LGQ9MS9JKGkpO2Euem9vbT0xPT09ZT91Om8rYS5zY2FsZVpvb20oZCksbi5fcm90YXRpbmcmJihhLmJlYXJpbmc9dC5udW1iZXIocyxmLGUpKSxuLl9waXRjaGluZyYmKGEucGl0Y2g9dC5udW1iZXIobCxoLGUpKSxuLl9wYWRkaW5nJiYoYS5pbnRlcnBvbGF0ZVBhZGRpbmcoYyxwLGUpLGc9YS5jZW50ZXJQb2ludC5hZGQobSkpO3ZhciB2PTE9PT1lP3k6YS51bnByb2plY3QoeC5hZGQoYi5tdWx0KE8oaSkpKS5tdWx0KGQpKTthLnNldExvY2F0aW9uQXRQb2ludChhLnJlbmRlcldvcmxkQ29waWVzP3Yud3JhcCgpOnYsZyksbi5fZmlyZU1vdmVFdmVudHMocil9KSwoZnVuY3Rpb24oKXtyZXR1cm4gbi5fYWZ0ZXJFYXNlKHIpfSksZSksdGhpc30sci5wcm90b3R5cGUuaXNFYXNpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2Vhc2VGcmFtZUlkfSxyLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0b3AoKX0sci5wcm90b3R5cGUuX3N0b3A9ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9lYXNlRnJhbWVJZCYmKHRoaXMuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2Vhc2VGcmFtZUlkKSxkZWxldGUgdGhpcy5fZWFzZUZyYW1lSWQsZGVsZXRlIHRoaXMuX29uRWFzZUZyYW1lKSx0aGlzLl9vbkVhc2VFbmQpe3ZhciByPXRoaXMuX29uRWFzZUVuZDtkZWxldGUgdGhpcy5fb25FYXNlRW5kLHIuY2FsbCh0aGlzLGUpfWlmKCF0KXt2YXIgbj10aGlzLmhhbmRsZXJzO24mJm4uc3RvcCgpfXJldHVybiB0aGlzfSxyLnByb3RvdHlwZS5fZWFzZT1mdW5jdGlvbihlLHIsbil7ITE9PT1uLmFuaW1hdGV8fDA9PT1uLmR1cmF0aW9uPyhlKDEpLHIoKSk6KHRoaXMuX2Vhc2VTdGFydD10LmJyb3dzZXIubm93KCksdGhpcy5fZWFzZU9wdGlvbnM9bix0aGlzLl9vbkVhc2VGcmFtZT1lLHRoaXMuX29uRWFzZUVuZD1yLHRoaXMuX2Vhc2VGcmFtZUlkPXRoaXMuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9yZW5kZXJGcmFtZUNhbGxiYWNrKSl9LHIucHJvdG90eXBlLl9yZW5kZXJGcmFtZUNhbGxiYWNrPWZ1bmN0aW9uKCl7dmFyIGU9TWF0aC5taW4oKHQuYnJvd3Nlci5ub3coKS10aGlzLl9lYXNlU3RhcnQpL3RoaXMuX2Vhc2VPcHRpb25zLmR1cmF0aW9uLDEpO3RoaXMuX29uRWFzZUZyYW1lKHRoaXMuX2Vhc2VPcHRpb25zLmVhc2luZyhlKSksZTwxP3RoaXMuX2Vhc2VGcmFtZUlkPXRoaXMuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9yZW5kZXJGcmFtZUNhbGxiYWNrKTp0aGlzLnN0b3AoKX0sci5wcm90b3R5cGUuX25vcm1hbGl6ZUJlYXJpbmc9ZnVuY3Rpb24oZSxyKXtlPXQud3JhcChlLC0xODAsMTgwKTt2YXIgbj1NYXRoLmFicyhlLXIpO3JldHVybiBNYXRoLmFicyhlLTM2MC1yKTxuJiYoZS09MzYwKSxNYXRoLmFicyhlKzM2MC1yKTxuJiYoZSs9MzYwKSxlfSxyLnByb3RvdHlwZS5fbm9ybWFsaXplQ2VudGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudHJhbnNmb3JtO2lmKGUucmVuZGVyV29ybGRDb3BpZXMmJiFlLmxuZ1JhbmdlKXt2YXIgcj10LmxuZy1lLmNlbnRlci5sbmc7dC5sbmcrPXI+MTgwPy0zNjA6cjwtMTgwPzM2MDowfX0scn0odC5FdmVudGVkKSxiaT1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5vcHRpb25zPWUsdC5iaW5kQWxsKFsiX3VwZGF0ZUVkaXRMaW5rIiwiX3VwZGF0ZURhdGEiLCJfdXBkYXRlQ29tcGFjdCJdLHRoaXMpfTtiaS5wcm90b3R5cGUuZ2V0RGVmYXVsdFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuImJvdHRvbS1yaWdodCJ9LGJpLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5jb21wYWN0O3JldHVybiB0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXI9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1hdHRyaWIiKSx0aGlzLl9pbm5lckNvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybC1hdHRyaWItaW5uZXIiLHRoaXMuX2NvbnRhaW5lciksZSYmdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWNvbXBhY3QiKSx0aGlzLl91cGRhdGVBdHRyaWJ1dGlvbnMoKSx0aGlzLl91cGRhdGVFZGl0TGluaygpLHRoaXMuX21hcC5vbigic3R5bGVkYXRhIix0aGlzLl91cGRhdGVEYXRhKSx0aGlzLl9tYXAub24oInNvdXJjZWRhdGEiLHRoaXMuX3VwZGF0ZURhdGEpLHRoaXMuX21hcC5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlRWRpdExpbmspLHZvaWQgMD09PWUmJih0aGlzLl9tYXAub24oInJlc2l6ZSIsdGhpcy5fdXBkYXRlQ29tcGFjdCksdGhpcy5fdXBkYXRlQ29tcGFjdCgpKSx0aGlzLl9jb250YWluZXJ9LGJpLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3IucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwLm9mZigic3R5bGVkYXRhIix0aGlzLl91cGRhdGVEYXRhKSx0aGlzLl9tYXAub2ZmKCJzb3VyY2VkYXRhIix0aGlzLl91cGRhdGVEYXRhKSx0aGlzLl9tYXAub2ZmKCJtb3ZlZW5kIix0aGlzLl91cGRhdGVFZGl0TGluayksdGhpcy5fbWFwLm9mZigicmVzaXplIix0aGlzLl91cGRhdGVDb21wYWN0KSx0aGlzLl9tYXA9dm9pZCAwLHRoaXMuX2F0dHJpYkhUTUw9dm9pZCAwfSxiaS5wcm90b3R5cGUuX3VwZGF0ZUVkaXRMaW5rPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZWRpdExpbms7ZXx8KGU9dGhpcy5fZWRpdExpbms9dGhpcy5fY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5tYXBib3gtaW1wcm92ZS1tYXAiKSk7dmFyIHI9W3trZXk6Im93bmVyIix2YWx1ZTp0aGlzLnN0eWxlT3duZXJ9LHtrZXk6ImlkIix2YWx1ZTp0aGlzLnN0eWxlSWR9LHtrZXk6ImFjY2Vzc190b2tlbiIsdmFsdWU6dGhpcy5fbWFwLl9yZXF1ZXN0TWFuYWdlci5fY3VzdG9tQWNjZXNzVG9rZW58fHQuY29uZmlnLkFDQ0VTU19UT0tFTn1dO2lmKGUpe3ZhciBuPXIucmVkdWNlKChmdW5jdGlvbih0LGUsbil7cmV0dXJuIGUudmFsdWUmJih0Kz1lLmtleSsiPSIrZS52YWx1ZSsobjxyLmxlbmd0aC0xPyImIjoiIikpLHR9KSwiPyIpO2UuaHJlZj10LmNvbmZpZy5GRUVEQkFDS19VUkwrIi8iK24rKHRoaXMuX21hcC5faGFzaD90aGlzLl9tYXAuX2hhc2guZ2V0SGFzaFN0cmluZyghMCk6IiIpLGUucmVsPSJub29wZW5lciBub2ZvbGxvdyJ9fSxiaS5wcm90b3R5cGUuX3VwZGF0ZURhdGE9ZnVuY3Rpb24odCl7IXR8fCJtZXRhZGF0YSIhPT10LnNvdXJjZURhdGFUeXBlJiYic3R5bGUiIT09dC5kYXRhVHlwZXx8KHRoaXMuX3VwZGF0ZUF0dHJpYnV0aW9ucygpLHRoaXMuX3VwZGF0ZUVkaXRMaW5rKCkpfSxiaS5wcm90b3R5cGUuX3VwZGF0ZUF0dHJpYnV0aW9ucz1mdW5jdGlvbigpe2lmKHRoaXMuX21hcC5zdHlsZSl7dmFyIHQ9W107aWYodGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uJiYoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb24pP3Q9dC5jb25jYXQodGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0PyIiOnR9KSkpOiJzdHJpbmciPT10eXBlb2YgdGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uJiZ0LnB1c2godGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uKSksdGhpcy5fbWFwLnN0eWxlLnN0eWxlc2hlZXQpe3ZhciBlPXRoaXMuX21hcC5zdHlsZS5zdHlsZXNoZWV0O3RoaXMuc3R5bGVPd25lcj1lLm93bmVyLHRoaXMuc3R5bGVJZD1lLmlkfXZhciByPXRoaXMuX21hcC5zdHlsZS5zb3VyY2VDYWNoZXM7Zm9yKHZhciBuIGluIHIpe3ZhciBpPXJbbl07aWYoaS51c2VkKXt2YXIgYT1pLmdldFNvdXJjZSgpO2EuYXR0cmlidXRpb24mJnQuaW5kZXhPZihhLmF0dHJpYnV0aW9uKTwwJiZ0LnB1c2goYS5hdHRyaWJ1dGlvbil9fXQuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGgtZS5sZW5ndGh9KSk7dmFyIG89KHQ9dC5maWx0ZXIoKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPXIrMTtuPHQubGVuZ3RoO24rKylpZih0W25dLmluZGV4T2YoZSk+PTApcmV0dXJuITE7cmV0dXJuITB9KSkpLmpvaW4oIiB8ICIpO28hPT10aGlzLl9hdHRyaWJIVE1MJiYodGhpcy5fYXR0cmliSFRNTD1vLHQubGVuZ3RoPyh0aGlzLl9pbm5lckNvbnRhaW5lci5pbm5lckhUTUw9byx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtYXR0cmliLWVtcHR5IikpOnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1hdHRyaWItZW1wdHkiKSx0aGlzLl9lZGl0TGluaz1udWxsKX19LGJpLnByb3RvdHlwZS5fdXBkYXRlQ29tcGFjdD1mdW5jdGlvbigpe3RoaXMuX21hcC5nZXRDYW52YXNDb250YWluZXIoKS5vZmZzZXRXaWR0aDw9NjQwP3RoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jb21wYWN0Iik6dGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWNvbXBhY3QiKX07dmFyIF9pPWZ1bmN0aW9uKCl7dC5iaW5kQWxsKFsiX3VwZGF0ZUxvZ28iXSx0aGlzKSx0LmJpbmRBbGwoWyJfdXBkYXRlQ29tcGFjdCJdLHRoaXMpfTtfaS5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fY29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIik7dmFyIGU9ci5jcmVhdGUoImEiLCJtYXBib3hnbC1jdHJsLWxvZ28iKTtyZXR1cm4gZS50YXJnZXQ9Il9ibGFuayIsZS5yZWw9Im5vb3BlbmVyIG5vZm9sbG93IixlLmhyZWY9Imh0dHBzOi8vd3d3Lm1hcGJveC5jb20vIixlLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsdGhpcy5fbWFwLl9nZXRVSVN0cmluZygiTG9nb0NvbnRyb2wuVGl0bGUiKSksZS5zZXRBdHRyaWJ1dGUoInJlbCIsIm5vb3BlbmVyIG5vZm9sbG93IiksdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGUpLHRoaXMuX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLl9tYXAub24oInNvdXJjZWRhdGEiLHRoaXMuX3VwZGF0ZUxvZ28pLHRoaXMuX3VwZGF0ZUxvZ28oKSx0aGlzLl9tYXAub24oInJlc2l6ZSIsdGhpcy5fdXBkYXRlQ29tcGFjdCksdGhpcy5fdXBkYXRlQ29tcGFjdCgpLHRoaXMuX2NvbnRhaW5lcn0sX2kucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7ci5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXAub2ZmKCJzb3VyY2VkYXRhIix0aGlzLl91cGRhdGVMb2dvKSx0aGlzLl9tYXAub2ZmKCJyZXNpemUiLHRoaXMuX3VwZGF0ZUNvbXBhY3QpfSxfaS5wcm90b3R5cGUuZ2V0RGVmYXVsdFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuImJvdHRvbS1sZWZ0In0sX2kucHJvdG90eXBlLl91cGRhdGVMb2dvPWZ1bmN0aW9uKHQpe3QmJiJtZXRhZGF0YSIhPT10LnNvdXJjZURhdGFUeXBlfHwodGhpcy5fY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9dGhpcy5fbG9nb1JlcXVpcmVkKCk/ImJsb2NrIjoibm9uZSIpfSxfaS5wcm90b3R5cGUuX2xvZ29SZXF1aXJlZD1mdW5jdGlvbigpe2lmKHRoaXMuX21hcC5zdHlsZSl7dmFyIHQ9dGhpcy5fbWFwLnN0eWxlLnNvdXJjZUNhY2hlcztmb3IodmFyIGUgaW4gdCl7aWYodFtlXS5nZXRTb3VyY2UoKS5tYXBib3hfbG9nbylyZXR1cm4hMH1yZXR1cm4hMX19LF9pLnByb3RvdHlwZS5fdXBkYXRlQ29tcGFjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lci5jaGlsZHJlbjtpZih0Lmxlbmd0aCl7dmFyIGU9dFswXTt0aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCkub2Zmc2V0V2lkdGg8MjUwP2UuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY29tcGFjdCIpOmUuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY29tcGFjdCIpfX07dmFyIHdpPWZ1bmN0aW9uKCl7dGhpcy5fcXVldWU9W10sdGhpcy5faWQ9MCx0aGlzLl9jbGVhcmVkPSExLHRoaXMuX2N1cnJlbnRseVJ1bm5pbmc9ITF9O3dpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU9Kyt0aGlzLl9pZDtyZXR1cm4gdGhpcy5fcXVldWUucHVzaCh7Y2FsbGJhY2s6dCxpZDplLGNhbmNlbGxlZDohMX0pLGV9LHdpLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2N1cnJlbnRseVJ1bm5pbmcscj0wLG49ZT90aGlzLl9xdWV1ZS5jb25jYXQoZSk6dGhpcy5fcXVldWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2lmKGkuaWQ9PT10KXJldHVybiB2b2lkKGkuY2FuY2VsbGVkPSEwKX19LHdpLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9MCk7dmFyIGU9dGhpcy5fY3VycmVudGx5UnVubmluZz10aGlzLl9xdWV1ZTt0aGlzLl9xdWV1ZT1bXTtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2lmKCFpLmNhbmNlbGxlZCYmKGkuY2FsbGJhY2sodCksdGhpcy5fY2xlYXJlZCkpYnJlYWt9dGhpcy5fY2xlYXJlZD0hMSx0aGlzLl9jdXJyZW50bHlSdW5uaW5nPSExfSx3aS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50bHlSdW5uaW5nJiYodGhpcy5fY2xlYXJlZD0hMCksdGhpcy5fcXVldWU9W119O3ZhciBUaT17IkZ1bGxzY3JlZW5Db250cm9sLkVudGVyIjoiRW50ZXIgZnVsbHNjcmVlbiIsIkZ1bGxzY3JlZW5Db250cm9sLkV4aXQiOiJFeGl0IGZ1bGxzY3JlZW4iLCJHZW9sb2NhdGVDb250cm9sLkZpbmRNeUxvY2F0aW9uIjoiRmluZCBteSBsb2NhdGlvbiIsIkdlb2xvY2F0ZUNvbnRyb2wuTG9jYXRpb25Ob3RBdmFpbGFibGUiOiJMb2NhdGlvbiBub3QgYXZhaWxhYmxlIiwiTG9nb0NvbnRyb2wuVGl0bGUiOiJNYXBib3ggbG9nbyIsIk5hdmlnYXRpb25Db250cm9sLlJlc2V0QmVhcmluZyI6IlJlc2V0IGJlYXJpbmcgdG8gbm9ydGgiLCJOYXZpZ2F0aW9uQ29udHJvbC5ab29tSW4iOiJab29tIGluIiwiTmF2aWdhdGlvbkNvbnRyb2wuWm9vbU91dCI6Ilpvb20gb3V0IiwiU2NhbGVDb250cm9sLkZlZXQiOiJmdCIsIlNjYWxlQ29udHJvbC5NZXRlcnMiOiJtIiwiU2NhbGVDb250cm9sLktpbG9tZXRlcnMiOiJrbSIsIlNjYWxlQ29udHJvbC5NaWxlcyI6Im1pIiwiU2NhbGVDb250cm9sLk5hdXRpY2FsTWlsZXMiOiJubSJ9LGtpPXQud2luZG93LkhUTUxJbWFnZUVsZW1lbnQsQWk9dC53aW5kb3cuSFRNTEVsZW1lbnQsTWk9dC53aW5kb3cuSW1hZ2VCaXRtYXAsU2k9e2NlbnRlcjpbMCwwXSx6b29tOjAsYmVhcmluZzowLHBpdGNoOjAsbWluWm9vbTotMixtYXhab29tOjIyLG1pblBpdGNoOjAsbWF4UGl0Y2g6NjAsaW50ZXJhY3RpdmU6ITAsc2Nyb2xsWm9vbTohMCxib3hab29tOiEwLGRyYWdSb3RhdGU6ITAsZHJhZ1BhbjohMCxrZXlib2FyZDohMCxkb3VibGVDbGlja1pvb206ITAsdG91Y2hab29tUm90YXRlOiEwLHRvdWNoUGl0Y2g6ITAsYmVhcmluZ1NuYXA6NyxjbGlja1RvbGVyYW5jZTozLHBpdGNoV2l0aFJvdGF0ZTohMCxoYXNoOiExLGF0dHJpYnV0aW9uQ29udHJvbDohMCxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiExLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMSx0cmFja1Jlc2l6ZTohMCxyZW5kZXJXb3JsZENvcGllczohMCxyZWZyZXNoRXhwaXJlZFRpbGVzOiEwLG1heFRpbGVDYWNoZVNpemU6bnVsbCxsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk6InNhbnMtc2VyaWYiLHRyYW5zZm9ybVJlcXVlc3Q6bnVsbCxhY2Nlc3NUb2tlbjpudWxsLGZhZGVEdXJhdGlvbjozMDAsY3Jvc3NTb3VyY2VDb2xsaXNpb25zOiEwfSxFaT1mdW5jdGlvbihuKXtmdW5jdGlvbiBpKGUpe3ZhciByPXRoaXM7aWYobnVsbCE9KGU9dC5leHRlbmQoe30sU2ksZSkpLm1pblpvb20mJm51bGwhPWUubWF4Wm9vbSYmZS5taW5ab29tPmUubWF4Wm9vbSl0aHJvdyBuZXcgRXJyb3IoIm1heFpvb20gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbWluWm9vbSIpO2lmKG51bGwhPWUubWluUGl0Y2gmJm51bGwhPWUubWF4UGl0Y2gmJmUubWluUGl0Y2g+ZS5tYXhQaXRjaCl0aHJvdyBuZXcgRXJyb3IoIm1heFBpdGNoIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG1pblBpdGNoIik7aWYobnVsbCE9ZS5taW5QaXRjaCYmZS5taW5QaXRjaDwwKXRocm93IG5ldyBFcnJvcigibWluUGl0Y2ggbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCIpO2lmKG51bGwhPWUubWF4UGl0Y2gmJmUubWF4UGl0Y2g+NjApdGhyb3cgbmV3IEVycm9yKCJtYXhQaXRjaCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA2MCIpO3ZhciBpPW5ldyBBbihlLm1pblpvb20sZS5tYXhab29tLGUubWluUGl0Y2gsZS5tYXhQaXRjaCxlLnJlbmRlcldvcmxkQ29waWVzKTtpZihuLmNhbGwodGhpcyxpLGUpLHRoaXMuX2ludGVyYWN0aXZlPWUuaW50ZXJhY3RpdmUsdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZT1lLm1heFRpbGVDYWNoZVNpemUsdGhpcy5fZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdD1lLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQsdGhpcy5fcHJlc2VydmVEcmF3aW5nQnVmZmVyPWUucHJlc2VydmVEcmF3aW5nQnVmZmVyLHRoaXMuX2FudGlhbGlhcz1lLmFudGlhbGlhcyx0aGlzLl90cmFja1Jlc2l6ZT1lLnRyYWNrUmVzaXplLHRoaXMuX2JlYXJpbmdTbmFwPWUuYmVhcmluZ1NuYXAsdGhpcy5fcmVmcmVzaEV4cGlyZWRUaWxlcz1lLnJlZnJlc2hFeHBpcmVkVGlsZXMsdGhpcy5fZmFkZUR1cmF0aW9uPWUuZmFkZUR1cmF0aW9uLHRoaXMuX2Nyb3NzU291cmNlQ29sbGlzaW9ucz1lLmNyb3NzU291cmNlQ29sbGlzaW9ucyx0aGlzLl9jcm9zc0ZhZGluZ0ZhY3Rvcj0xLHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZz1lLmNvbGxlY3RSZXNvdXJjZVRpbWluZyx0aGlzLl9yZW5kZXJUYXNrUXVldWU9bmV3IHdpLHRoaXMuX2NvbnRyb2xzPVtdLHRoaXMuX21hcElkPXQudW5pcXVlSWQoKSx0aGlzLl9sb2NhbGU9dC5leHRlbmQoe30sVGksZS5sb2NhbGUpLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyB0LlJlcXVlc3RNYW5hZ2VyKGUudHJhbnNmb3JtUmVxdWVzdCxlLmFjY2Vzc1Rva2VuKSwic3RyaW5nIj09dHlwZW9mIGUuY29udGFpbmVyKXtpZih0aGlzLl9jb250YWluZXI9dC53aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZS5jb250YWluZXIpLCF0aGlzLl9jb250YWluZXIpdGhyb3cgbmV3IEVycm9yKCJDb250YWluZXIgJyIrZS5jb250YWluZXIrIicgbm90IGZvdW5kLiIpfWVsc2V7aWYoIShlLmNvbnRhaW5lciBpbnN0YW5jZW9mIEFpKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdHlwZTogJ2NvbnRhaW5lcicgbXVzdCBiZSBhIFN0cmluZyBvciBIVE1MRWxlbWVudC4iKTt0aGlzLl9jb250YWluZXI9ZS5jb250YWluZXJ9aWYoZS5tYXhCb3VuZHMmJnRoaXMuc2V0TWF4Qm91bmRzKGUubWF4Qm91bmRzKSx0LmJpbmRBbGwoWyJfb25XaW5kb3dPbmxpbmUiLCJfb25XaW5kb3dSZXNpemUiLCJfY29udGV4dExvc3QiLCJfY29udGV4dFJlc3RvcmVkIl0sdGhpcyksdGhpcy5fc2V0dXBDb250YWluZXIoKSx0aGlzLl9zZXR1cFBhaW50ZXIoKSx2b2lkIDA9PT10aGlzLnBhaW50ZXIpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBXZWJHTC4iKTt0aGlzLm9uKCJtb3ZlIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5fdXBkYXRlKCExKX0pKSx0aGlzLm9uKCJtb3ZlZW5kIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5fdXBkYXRlKCExKX0pKSx0aGlzLm9uKCJ6b29tIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5fdXBkYXRlKCEwKX0pKSx2b2lkIDAhPT10LndpbmRvdyYmKHQud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm9ubGluZSIsdGhpcy5fb25XaW5kb3dPbmxpbmUsITEpLHQud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fb25XaW5kb3dSZXNpemUsITEpKSx0aGlzLmhhbmRsZXJzPW5ldyB5aSh0aGlzLGUpO3ZhciBhPSJzdHJpbmciPT10eXBlb2YgZS5oYXNoJiZlLmhhc2h8fHZvaWQgMDt0aGlzLl9oYXNoPWUuaGFzaCYmbmV3IFNuKGEpLmFkZFRvKHRoaXMpLHRoaXMuX2hhc2gmJnRoaXMuX2hhc2guX29uSGFzaENoYW5nZSgpfHwodGhpcy5qdW1wVG8oe2NlbnRlcjplLmNlbnRlcix6b29tOmUuem9vbSxiZWFyaW5nOmUuYmVhcmluZyxwaXRjaDplLnBpdGNofSksZS5ib3VuZHMmJih0aGlzLnJlc2l6ZSgpLHRoaXMuZml0Qm91bmRzKGUuYm91bmRzLHQuZXh0ZW5kKHt9LGUuZml0Qm91bmRzT3B0aW9ucyx7ZHVyYXRpb246MH0pKSkpLHRoaXMucmVzaXplKCksdGhpcy5fbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5PWUubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5LGUuc3R5bGUmJnRoaXMuc2V0U3R5bGUoZS5zdHlsZSx7bG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5OmUubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5fSksZS5hdHRyaWJ1dGlvbkNvbnRyb2wmJnRoaXMuYWRkQ29udHJvbChuZXcgYmkoe2N1c3RvbUF0dHJpYnV0aW9uOmUuY3VzdG9tQXR0cmlidXRpb259KSksdGhpcy5hZGRDb250cm9sKG5ldyBfaSxlLmxvZ29Qb3NpdGlvbiksdGhpcy5vbigic3R5bGUubG9hZCIsKGZ1bmN0aW9uKCl7ci50cmFuc2Zvcm0udW5tb2RpZmllZCYmci5qdW1wVG8oci5zdHlsZS5zdHlsZXNoZWV0KX0pKSx0aGlzLm9uKCJkYXRhIiwoZnVuY3Rpb24oZSl7ci5fdXBkYXRlKCJzdHlsZSI9PT1lLmRhdGFUeXBlKSxyLmZpcmUobmV3IHQuRXZlbnQoZS5kYXRhVHlwZSsiZGF0YSIsZSkpfSkpLHRoaXMub24oImRhdGFsb2FkaW5nIiwoZnVuY3Rpb24oZSl7ci5maXJlKG5ldyB0LkV2ZW50KGUuZGF0YVR5cGUrImRhdGFsb2FkaW5nIixlKSl9KSl9biYmKGkuX19wcm90b19fPW4pLGkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobiYmbi5wcm90b3R5cGUpLGkucHJvdG90eXBlLmNvbnN0cnVjdG9yPWk7dmFyIGE9e3Nob3dUaWxlQm91bmRhcmllczp7Y29uZmlndXJhYmxlOiEwfSxzaG93UGFkZGluZzp7Y29uZmlndXJhYmxlOiEwfSxzaG93Q29sbGlzaW9uQm94ZXM6e2NvbmZpZ3VyYWJsZTohMH0sc2hvd092ZXJkcmF3SW5zcGVjdG9yOntjb25maWd1cmFibGU6ITB9LHJlcGFpbnQ6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGljZXM6e2NvbmZpZ3VyYWJsZTohMH0sdmVyc2lvbjp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIGkucHJvdG90eXBlLl9nZXRNYXBJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXBJZH0saS5wcm90b3R5cGUuYWRkQ29udHJvbD1mdW5jdGlvbihlLHIpe2lmKHZvaWQgMD09PXImJmUuZ2V0RGVmYXVsdFBvc2l0aW9uJiYocj1lLmdldERlZmF1bHRQb3NpdGlvbigpKSx2b2lkIDA9PT1yJiYocj0idG9wLXJpZ2h0IiksIWV8fCFlLm9uQWRkKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkludmFsaWQgYXJndW1lbnQgdG8gbWFwLmFkZENvbnRyb2woKS4gQXJndW1lbnQgbXVzdCBiZSBhIGNvbnRyb2wgd2l0aCBvbkFkZCBhbmQgb25SZW1vdmUgbWV0aG9kcy4iKSkpO3ZhciBuPWUub25BZGQodGhpcyk7dGhpcy5fY29udHJvbHMucHVzaChlKTt2YXIgaT10aGlzLl9jb250cm9sUG9zaXRpb25zW3JdO3JldHVybi0xIT09ci5pbmRleE9mKCJib3R0b20iKT9pLmluc2VydEJlZm9yZShuLGkuZmlyc3RDaGlsZCk6aS5hcHBlbmRDaGlsZChuKSx0aGlzfSxpLnByb3RvdHlwZS5yZW1vdmVDb250cm9sPWZ1bmN0aW9uKGUpe2lmKCFlfHwhZS5vblJlbW92ZSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJJbnZhbGlkIGFyZ3VtZW50IHRvIG1hcC5yZW1vdmVDb250cm9sKCkuIEFyZ3VtZW50IG11c3QgYmUgYSBjb250cm9sIHdpdGggb25BZGQgYW5kIG9uUmVtb3ZlIG1ldGhvZHMuIikpKTt2YXIgcj10aGlzLl9jb250cm9scy5pbmRleE9mKGUpO3JldHVybiByPi0xJiZ0aGlzLl9jb250cm9scy5zcGxpY2UociwxKSxlLm9uUmVtb3ZlKHRoaXMpLHRoaXN9LGkucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLl9jb250YWluZXJEaW1lbnNpb25zKCksbj1yWzBdLGk9clsxXTt0aGlzLl9yZXNpemVDYW52YXMobixpKSx0aGlzLnRyYW5zZm9ybS5yZXNpemUobixpKSx0aGlzLnBhaW50ZXIucmVzaXplKG4saSk7dmFyIGE9IXRoaXMuX21vdmluZztyZXR1cm4gYSYmKHRoaXMuc3RvcCgpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZXN0YXJ0IixlKSkuZmlyZShuZXcgdC5FdmVudCgibW92ZSIsZSkpKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJlc2l6ZSIsZSkpLGEmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZWVuZCIsZSkpLHRoaXN9LGkucHJvdG90eXBlLmdldEJvdW5kcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5nZXRCb3VuZHMoKX0saS5wcm90b3R5cGUuZ2V0TWF4Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmdldE1heEJvdW5kcygpfSxpLnByb3RvdHlwZS5zZXRNYXhCb3VuZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnNldE1heEJvdW5kcyh0LkxuZ0xhdEJvdW5kcy5jb252ZXJ0KGUpKSx0aGlzLl91cGRhdGUoKX0saS5wcm90b3R5cGUuc2V0TWluWm9vbT1mdW5jdGlvbih0KXtpZigodD1udWxsPT10Py0yOnQpPj0tMiYmdDw9dGhpcy50cmFuc2Zvcm0ubWF4Wm9vbSlyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWluWm9vbT10LHRoaXMuX3VwZGF0ZSgpLHRoaXMuZ2V0Wm9vbSgpPHQmJnRoaXMuc2V0Wm9vbSh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcigibWluWm9vbSBtdXN0IGJlIGJldHdlZW4gLTIgYW5kIHRoZSBjdXJyZW50IG1heFpvb20sIGluY2x1c2l2ZSIpfSxpLnByb3RvdHlwZS5nZXRNaW5ab29tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblpvb219LGkucHJvdG90eXBlLnNldE1heFpvb209ZnVuY3Rpb24odCl7aWYoKHQ9bnVsbD09dD8yMjp0KT49dGhpcy50cmFuc2Zvcm0ubWluWm9vbSlyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbT10LHRoaXMuX3VwZGF0ZSgpLHRoaXMuZ2V0Wm9vbSgpPnQmJnRoaXMuc2V0Wm9vbSh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcigibWF4Wm9vbSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBtaW5ab29tIil9LGkucHJvdG90eXBlLmdldE1heFpvb209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbX0saS5wcm90b3R5cGUuc2V0TWluUGl0Y2g9ZnVuY3Rpb24odCl7aWYoKHQ9bnVsbD09dD8wOnQpPDApdGhyb3cgbmV3IEVycm9yKCJtaW5QaXRjaCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwIik7aWYodD49MCYmdDw9dGhpcy50cmFuc2Zvcm0ubWF4UGl0Y2gpcmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblBpdGNoPXQsdGhpcy5fdXBkYXRlKCksdGhpcy5nZXRQaXRjaCgpPHQmJnRoaXMuc2V0UGl0Y2godCksdGhpczt0aHJvdyBuZXcgRXJyb3IoIm1pblBpdGNoIG11c3QgYmUgYmV0d2VlbiAwIGFuZCB0aGUgY3VycmVudCBtYXhQaXRjaCwgaW5jbHVzaXZlIil9LGkucHJvdG90eXBlLmdldE1pblBpdGNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblBpdGNofSxpLnByb3RvdHlwZS5zZXRNYXhQaXRjaD1mdW5jdGlvbih0KXtpZigodD1udWxsPT10PzYwOnQpPjYwKXRocm93IG5ldyBFcnJvcigibWF4UGl0Y2ggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNjAiKTtpZih0Pj10aGlzLnRyYW5zZm9ybS5taW5QaXRjaClyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4UGl0Y2g9dCx0aGlzLl91cGRhdGUoKSx0aGlzLmdldFBpdGNoKCk+dCYmdGhpcy5zZXRQaXRjaCh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcigibWF4UGl0Y2ggbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgbWluUGl0Y2giKX0saS5wcm90b3R5cGUuZ2V0TWF4UGl0Y2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4UGl0Y2h9LGkucHJvdG90eXBlLmdldFJlbmRlcldvcmxkQ29waWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzfSxpLnByb3RvdHlwZS5zZXRSZW5kZXJXb3JsZENvcGllcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXM9dCx0aGlzLl91cGRhdGUoKX0saS5wcm90b3R5cGUucHJvamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubG9jYXRpb25Qb2ludCh0LkxuZ0xhdC5jb252ZXJ0KGUpKX0saS5wcm90b3R5cGUudW5wcm9qZWN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKHQuUG9pbnQuY29udmVydChlKSl9LGkucHJvdG90eXBlLmlzTW92aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vdmluZ3x8dGhpcy5oYW5kbGVycy5pc01vdmluZygpfSxpLnByb3RvdHlwZS5pc1pvb21pbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9vbWluZ3x8dGhpcy5oYW5kbGVycy5pc1pvb21pbmcoKX0saS5wcm90b3R5cGUuaXNSb3RhdGluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3RhdGluZ3x8dGhpcy5oYW5kbGVycy5pc1JvdGF0aW5nKCl9LGkucHJvdG90eXBlLl9jcmVhdGVEZWxlZ2F0ZWRMaXN0ZW5lcj1mdW5jdGlvbih0LGUscil7dmFyIG4saT10aGlzO2lmKCJtb3VzZWVudGVyIj09PXR8fCJtb3VzZW92ZXIiPT09dCl7dmFyIGE9ITE7cmV0dXJue2xheWVyOmUsbGlzdGVuZXI6cixkZWxlZ2F0ZXM6e21vdXNlbW92ZTpmdW5jdGlvbihuKXt2YXIgbz1pLmdldExheWVyKGUpP2kucXVlcnlSZW5kZXJlZEZlYXR1cmVzKG4ucG9pbnQse2xheWVyczpbZV19KTpbXTtvLmxlbmd0aD9hfHwoYT0hMCxyLmNhbGwoaSxuZXcgUm4odCxpLG4ub3JpZ2luYWxFdmVudCx7ZmVhdHVyZXM6b30pKSk6YT0hMX0sbW91c2VvdXQ6ZnVuY3Rpb24oKXthPSExfX19fWlmKCJtb3VzZWxlYXZlIj09PXR8fCJtb3VzZW91dCI9PT10KXt2YXIgbz0hMTtyZXR1cm57bGF5ZXI6ZSxsaXN0ZW5lcjpyLGRlbGVnYXRlczp7bW91c2Vtb3ZlOmZ1bmN0aW9uKG4peyhpLmdldExheWVyKGUpP2kucXVlcnlSZW5kZXJlZEZlYXR1cmVzKG4ucG9pbnQse2xheWVyczpbZV19KTpbXSkubGVuZ3RoP289ITA6byYmKG89ITEsci5jYWxsKGksbmV3IFJuKHQsaSxuLm9yaWdpbmFsRXZlbnQpKSl9LG1vdXNlb3V0OmZ1bmN0aW9uKGUpe28mJihvPSExLHIuY2FsbChpLG5ldyBSbih0LGksZS5vcmlnaW5hbEV2ZW50KSkpfX19fXJldHVybntsYXllcjplLGxpc3RlbmVyOnIsZGVsZWdhdGVzOihuPXt9LG5bdF09ZnVuY3Rpb24odCl7dmFyIG49aS5nZXRMYXllcihlKT9pLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyh0LnBvaW50LHtsYXllcnM6W2VdfSk6W107bi5sZW5ndGgmJih0LmZlYXR1cmVzPW4sci5jYWxsKGksdCksZGVsZXRlIHQuZmVhdHVyZXMpfSxuKX19LGkucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSxyKXtpZih2b2lkIDA9PT1yKXJldHVybiBuLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsdCxlKTt2YXIgaT10aGlzLl9jcmVhdGVEZWxlZ2F0ZWRMaXN0ZW5lcih0LGUscik7Zm9yKHZhciBhIGluIHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycz10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnN8fHt9LHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XT10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF18fFtdLHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XS5wdXNoKGkpLGkuZGVsZWdhdGVzKXRoaXMub24oYSxpLmRlbGVnYXRlc1thXSk7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24odCxlLHIpe2lmKHZvaWQgMD09PXIpcmV0dXJuIG4ucHJvdG90eXBlLm9uY2UuY2FsbCh0aGlzLHQsZSk7dmFyIGk9dGhpcy5fY3JlYXRlRGVsZWdhdGVkTGlzdGVuZXIodCxlLHIpO2Zvcih2YXIgYSBpbiBpLmRlbGVnYXRlcyl0aGlzLm9uY2UoYSxpLmRlbGVnYXRlc1thXSk7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcztpZih2b2lkIDA9PT1yKXJldHVybiBuLnByb3RvdHlwZS5vZmYuY2FsbCh0aGlzLHQsZSk7cmV0dXJuIHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycyYmdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3RdJiZmdW5jdGlvbihuKXtmb3IodmFyIGE9blt0XSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107aWYocy5sYXllcj09PWUmJnMubGlzdGVuZXI9PT1yKXtmb3IodmFyIGwgaW4gcy5kZWxlZ2F0ZXMpaS5vZmYobCxzLmRlbGVnYXRlc1tsXSk7cmV0dXJuIGEuc3BsaWNlKG8sMSksaX19fSh0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnMpLHRoaXN9LGkucHJvdG90eXBlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcz1mdW5jdGlvbihlLHIpe2lmKCF0aGlzLnN0eWxlKXJldHVybltdO3ZhciBuO2lmKHZvaWQgMCE9PXJ8fHZvaWQgMD09PWV8fGUgaW5zdGFuY2VvZiB0LlBvaW50fHxBcnJheS5pc0FycmF5KGUpfHwocj1lLGU9dm9pZCAwKSxyPXJ8fHt9LChlPWV8fFtbMCwwXSxbdGhpcy50cmFuc2Zvcm0ud2lkdGgsdGhpcy50cmFuc2Zvcm0uaGVpZ2h0XV0paW5zdGFuY2VvZiB0LlBvaW50fHwibnVtYmVyIj09dHlwZW9mIGVbMF0pbj1bdC5Qb2ludC5jb252ZXJ0KGUpXTtlbHNle3ZhciBpPXQuUG9pbnQuY29udmVydChlWzBdKSxhPXQuUG9pbnQuY29udmVydChlWzFdKTtuPVtpLG5ldyB0LlBvaW50KGEueCxpLnkpLGEsbmV3IHQuUG9pbnQoaS54LGEueSksaV19cmV0dXJuIHRoaXMuc3R5bGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzKG4scix0aGlzLnRyYW5zZm9ybSl9LGkucHJvdG90eXBlLnF1ZXJ5U291cmNlRmVhdHVyZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5xdWVyeVNvdXJjZUZlYXR1cmVzKHQsZSl9LGkucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKGUscil7cmV0dXJuITEhPT0ocj10LmV4dGVuZCh7fSx7bG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5OnRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseX0scikpLmRpZmYmJnIubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5PT09dGhpcy5fbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5JiZ0aGlzLnN0eWxlJiZlPyh0aGlzLl9kaWZmU3R5bGUoZSxyKSx0aGlzKToodGhpcy5fbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5PXIubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5LHRoaXMuX3VwZGF0ZVN0eWxlKGUscikpfSxpLnByb3RvdHlwZS5fZ2V0VUlTdHJpbmc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbG9jYWxlW3RdO2lmKG51bGw9PWUpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIFVJIHN0cmluZyAnIit0KyInIik7cmV0dXJuIGV9LGkucHJvdG90eXBlLl91cGRhdGVTdHlsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlJiYodGhpcy5zdHlsZS5zZXRFdmVudGVkUGFyZW50KG51bGwpLHRoaXMuc3R5bGUuX3JlbW92ZSgpKSx0Pyh0aGlzLnN0eWxlPW5ldyBxZSh0aGlzLGV8fHt9KSx0aGlzLnN0eWxlLnNldEV2ZW50ZWRQYXJlbnQodGhpcyx7c3R5bGU6dGhpcy5zdHlsZX0pLCJzdHJpbmciPT10eXBlb2YgdD90aGlzLnN0eWxlLmxvYWRVUkwodCk6dGhpcy5zdHlsZS5sb2FkSlNPTih0KSx0aGlzKTooZGVsZXRlIHRoaXMuc3R5bGUsdGhpcyl9LGkucHJvdG90eXBlLl9sYXp5SW5pdEVtcHR5U3R5bGU9ZnVuY3Rpb24oKXt0aGlzLnN0eWxlfHwodGhpcy5zdHlsZT1uZXcgcWUodGhpcyx7fSksdGhpcy5zdHlsZS5zZXRFdmVudGVkUGFyZW50KHRoaXMse3N0eWxlOnRoaXMuc3R5bGV9KSx0aGlzLnN0eWxlLmxvYWRFbXB0eSgpKX0saS5wcm90b3R5cGUuX2RpZmZTdHlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgaT10aGlzLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTdHlsZVVSTChlKSxhPXRoaXMuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QoaSx0LlJlc291cmNlVHlwZS5TdHlsZSk7dC5nZXRKU09OKGEsKGZ1bmN0aW9uKGUsaSl7ZT9uLmZpcmUobmV3IHQuRXJyb3JFdmVudChlKSk6aSYmbi5fdXBkYXRlRGlmZihpLHIpfSkpfWVsc2Uib2JqZWN0Ij09dHlwZW9mIGUmJnRoaXMuX3VwZGF0ZURpZmYoZSxyKX0saS5wcm90b3R5cGUuX3VwZGF0ZURpZmY9ZnVuY3Rpb24oZSxyKXt0cnl7dGhpcy5zdHlsZS5zZXRTdGF0ZShlKSYmdGhpcy5fdXBkYXRlKCEwKX1jYXRjaChuKXt0Lndhcm5PbmNlKCJVbmFibGUgdG8gcGVyZm9ybSBzdHlsZSBkaWZmOiAiKyhuLm1lc3NhZ2V8fG4uZXJyb3J8fG4pKyIuICBSZWJ1aWxkaW5nIHRoZSBzdHlsZSBmcm9tIHNjcmF0Y2guIiksdGhpcy5fdXBkYXRlU3R5bGUoZSxyKX19LGkucHJvdG90eXBlLmdldFN0eWxlPWZ1bmN0aW9uKCl7aWYodGhpcy5zdHlsZSlyZXR1cm4gdGhpcy5zdHlsZS5zZXJpYWxpemUoKX0saS5wcm90b3R5cGUuaXNTdHlsZUxvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0eWxlP3RoaXMuc3R5bGUubG9hZGVkKCk6dC53YXJuT25jZSgiVGhlcmUgaXMgbm8gc3R5bGUgYWRkZWQgdG8gdGhlIG1hcC4iKX0saS5wcm90b3R5cGUuYWRkU291cmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2xhenlJbml0RW1wdHlTdHlsZSgpLHRoaXMuc3R5bGUuYWRkU291cmNlKHQsZSksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUuaXNTb3VyY2VMb2FkZWQ9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5zdHlsZSYmdGhpcy5zdHlsZS5zb3VyY2VDYWNoZXNbZV07aWYodm9pZCAwIT09cilyZXR1cm4gci5sb2FkZWQoKTt0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZXJlIGlzIG5vIHNvdXJjZSB3aXRoIElEICciK2UrIiciKSkpfSxpLnByb3RvdHlwZS5hcmVUaWxlc0xvYWRlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc3R5bGUmJnRoaXMuc3R5bGUuc291cmNlQ2FjaGVzO2Zvcih2YXIgZSBpbiB0KXt2YXIgcj10W2VdLl90aWxlcztmb3IodmFyIG4gaW4gcil7dmFyIGk9cltuXTtpZigibG9hZGVkIiE9PWkuc3RhdGUmJiJlcnJvcmVkIiE9PWkuc3RhdGUpcmV0dXJuITF9fXJldHVybiEwfSxpLnByb3RvdHlwZS5hZGRTb3VyY2VUeXBlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fbGF6eUluaXRFbXB0eVN0eWxlKCksdGhpcy5zdHlsZS5hZGRTb3VyY2VUeXBlKHQsZSxyKX0saS5wcm90b3R5cGUucmVtb3ZlU291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLnJlbW92ZVNvdXJjZSh0KSx0aGlzLl91cGRhdGUoITApfSxpLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0U291cmNlKHQpfSxpLnByb3RvdHlwZS5hZGRJbWFnZT1mdW5jdGlvbihlLHIsbil7dm9pZCAwPT09biYmKG49e30pO3ZhciBpPW4ucGl4ZWxSYXRpbzt2b2lkIDA9PT1pJiYoaT0xKTt2YXIgYT1uLnNkZjt2b2lkIDA9PT1hJiYoYT0hMSk7dmFyIG89bi5zdHJldGNoWCxzPW4uc3RyZXRjaFksbD1uLmNvbnRlbnQ7dGhpcy5fbGF6eUluaXRFbXB0eVN0eWxlKCk7aWYociBpbnN0YW5jZW9mIGtpfHxNaSYmciBpbnN0YW5jZW9mIE1pKXt2YXIgYz10LmJyb3dzZXIuZ2V0SW1hZ2VEYXRhKHIpLHU9Yy53aWR0aCxmPWMuaGVpZ2h0LGg9Yy5kYXRhO3RoaXMuc3R5bGUuYWRkSW1hZ2UoZSx7ZGF0YTpuZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOnUsaGVpZ2h0OmZ9LGgpLHBpeGVsUmF0aW86aSxzdHJldGNoWDpvLHN0cmV0Y2hZOnMsY29udGVudDpsLHNkZjphLHZlcnNpb246MH0pfWVsc2V7aWYodm9pZCAwPT09ci53aWR0aHx8dm9pZCAwPT09ci5oZWlnaHQpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiSW52YWxpZCBhcmd1bWVudHMgdG8gbWFwLmFkZEltYWdlKCkuIFRoZSBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhbiBgSFRNTEltYWdlRWxlbWVudGAsIGBJbWFnZURhdGFgLCBgSW1hZ2VCaXRtYXBgLCBvciBvYmplY3Qgd2l0aCBgd2lkdGhgLCBgaGVpZ2h0YCwgYW5kIGBkYXRhYCBwcm9wZXJ0aWVzIHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzIGBJbWFnZURhdGFgIikpKTt2YXIgcD1yLndpZHRoLGQ9ci5oZWlnaHQsbT1yLmRhdGEsZz1yO3RoaXMuc3R5bGUuYWRkSW1hZ2UoZSx7ZGF0YTpuZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOnAsaGVpZ2h0OmR9LG5ldyBVaW50OEFycmF5KG0pKSxwaXhlbFJhdGlvOmksc3RyZXRjaFg6byxzdHJldGNoWTpzLGNvbnRlbnQ6bCxzZGY6YSx2ZXJzaW9uOjAsdXNlckltYWdlOmd9KSxnLm9uQWRkJiZnLm9uQWRkKHRoaXMsZSl9fSxpLnByb3RvdHlwZS51cGRhdGVJbWFnZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMuc3R5bGUuZ2V0SW1hZ2UoZSk7aWYoIW4pcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIG1hcCBoYXMgbm8gaW1hZ2Ugd2l0aCB0aGF0IGlkLiBJZiB5b3UgYXJlIGFkZGluZyBhIG5ldyBpbWFnZSB1c2UgYG1hcC5hZGRJbWFnZSguLi4pYCBpbnN0ZWFkLiIpKSk7dmFyIGk9ciBpbnN0YW5jZW9mIGtpfHxNaSYmciBpbnN0YW5jZW9mIE1pP3QuYnJvd3Nlci5nZXRJbWFnZURhdGEocik6cixhPWkud2lkdGgsbz1pLmhlaWdodCxzPWkuZGF0YTtpZih2b2lkIDA9PT1hfHx2b2lkIDA9PT1vKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkludmFsaWQgYXJndW1lbnRzIHRvIG1hcC51cGRhdGVJbWFnZSgpLiBUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYW4gYEhUTUxJbWFnZUVsZW1lbnRgLCBgSW1hZ2VEYXRhYCwgYEltYWdlQml0bWFwYCwgb3Igb2JqZWN0IHdpdGggYHdpZHRoYCwgYGhlaWdodGAsIGFuZCBgZGF0YWAgcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBgSW1hZ2VEYXRhYCIpKSk7aWYoYSE9PW4uZGF0YS53aWR0aHx8byE9PW4uZGF0YS5oZWlnaHQpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHVwZGF0ZWQgaW1hZ2UgbXVzdCBiZSB0aGF0IHNhbWUgYXMgdGhlIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIGltYWdlIikpKTt2YXIgbD0hKHIgaW5zdGFuY2VvZiBraXx8TWkmJnIgaW5zdGFuY2VvZiBNaSk7bi5kYXRhLnJlcGxhY2UocyxsKSx0aGlzLnN0eWxlLnVwZGF0ZUltYWdlKGUsbil9LGkucHJvdG90eXBlLmhhc0ltYWdlPWZ1bmN0aW9uKGUpe3JldHVybiBlPyEhdGhpcy5zdHlsZS5nZXRJbWFnZShlKToodGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVpcmVkIGltYWdlIGlkIikpKSwhMSl9LGkucHJvdG90eXBlLnJlbW92ZUltYWdlPWZ1bmN0aW9uKHQpe3RoaXMuc3R5bGUucmVtb3ZlSW1hZ2UodCl9LGkucHJvdG90eXBlLmxvYWRJbWFnZT1mdW5jdGlvbihlLHIpe3QuZ2V0SW1hZ2UodGhpcy5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChlLHQuUmVzb3VyY2VUeXBlLkltYWdlKSxyKX0saS5wcm90b3R5cGUubGlzdEltYWdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0eWxlLmxpc3RJbWFnZXMoKX0saS5wcm90b3R5cGUuYWRkTGF5ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fbGF6eUluaXRFbXB0eVN0eWxlKCksdGhpcy5zdHlsZS5hZGRMYXllcih0LGUpLHRoaXMuX3VwZGF0ZSghMCl9LGkucHJvdG90eXBlLm1vdmVMYXllcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLm1vdmVMYXllcih0LGUpLHRoaXMuX3VwZGF0ZSghMCl9LGkucHJvdG90eXBlLnJlbW92ZUxheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLnJlbW92ZUxheWVyKHQpLHRoaXMuX3VwZGF0ZSghMCl9LGkucHJvdG90eXBlLmdldExheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLmdldExheWVyKHQpfSxpLnByb3RvdHlwZS5zZXRMYXllclpvb21SYW5nZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuc3R5bGUuc2V0TGF5ZXJab29tUmFuZ2UodCxlLHIpLHRoaXMuX3VwZGF0ZSghMCl9LGkucHJvdG90eXBlLnNldEZpbHRlcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSx0aGlzLnN0eWxlLnNldEZpbHRlcih0LGUsciksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUuZ2V0RmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLmdldEZpbHRlcih0KX0saS5wcm90b3R5cGUuc2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLHRoaXMuc3R5bGUuc2V0UGFpbnRQcm9wZXJ0eSh0LGUscixuKSx0aGlzLl91cGRhdGUoITApfSxpLnByb3RvdHlwZS5nZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0UGFpbnRQcm9wZXJ0eSh0LGUpfSxpLnByb3RvdHlwZS5zZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLHRoaXMuc3R5bGUuc2V0TGF5b3V0UHJvcGVydHkodCxlLHIsbiksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUuZ2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRMYXlvdXRQcm9wZXJ0eSh0LGUpfSxpLnByb3RvdHlwZS5zZXRMaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5fbGF6eUluaXRFbXB0eVN0eWxlKCksdGhpcy5zdHlsZS5zZXRMaWdodCh0LGUpLHRoaXMuX3VwZGF0ZSghMCl9LGkucHJvdG90eXBlLmdldExpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGlnaHQoKX0saS5wcm90b3R5cGUuc2V0RmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuc2V0RmVhdHVyZVN0YXRlKHQsZSksdGhpcy5fdXBkYXRlKCl9LGkucHJvdG90eXBlLnJlbW92ZUZlYXR1cmVTdGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLnJlbW92ZUZlYXR1cmVTdGF0ZSh0LGUpLHRoaXMuX3VwZGF0ZSgpfSxpLnByb3RvdHlwZS5nZXRGZWF0dXJlU3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0RmVhdHVyZVN0YXRlKHQpfSxpLnByb3RvdHlwZS5nZXRDb250YWluZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxpLnByb3RvdHlwZS5nZXRDYW52YXNDb250YWluZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FudmFzQ29udGFpbmVyfSxpLnByb3RvdHlwZS5nZXRDYW52YXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FudmFzfSxpLnByb3RvdHlwZS5fY29udGFpbmVyRGltZW5zaW9ucz1mdW5jdGlvbigpe3ZhciB0PTAsZT0wO3JldHVybiB0aGlzLl9jb250YWluZXImJih0PXRoaXMuX2NvbnRhaW5lci5jbGllbnRXaWR0aHx8NDAwLGU9dGhpcy5fY29udGFpbmVyLmNsaWVudEhlaWdodHx8MzAwKSxbdCxlXX0saS5wcm90b3R5cGUuX2RldGVjdE1pc3NpbmdDU1M9ZnVuY3Rpb24oKXsicmdiKDI1MCwgMTI4LCAxMTQpIiE9PXQud2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5fbWlzc2luZ0NTU0NhbmFyeSkuZ2V0UHJvcGVydHlWYWx1ZSgiYmFja2dyb3VuZC1jb2xvciIpJiZ0Lndhcm5PbmNlKCJUaGlzIHBhZ2UgYXBwZWFycyB0byBiZSBtaXNzaW5nIENTUyBkZWNsYXJhdGlvbnMgZm9yIE1hcGJveCBHTCBKUywgd2hpY2ggbWF5IGNhdXNlIHRoZSBtYXAgdG8gZGlzcGxheSBpbmNvcnJlY3RseS4gUGxlYXNlIGVuc3VyZSB5b3VyIHBhZ2UgaW5jbHVkZXMgbWFwYm94LWdsLmNzcywgYXMgZGVzY3JpYmVkIGluIGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2FwaS8uIil9LGkucHJvdG90eXBlLl9zZXR1cENvbnRhaW5lcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcjt0LmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLW1hcCIpLCh0aGlzLl9taXNzaW5nQ1NTQ2FuYXJ5PXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jYW5hcnkiLHQpKS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLHRoaXMuX2RldGVjdE1pc3NpbmdDU1MoKTt2YXIgZT10aGlzLl9jYW52YXNDb250YWluZXI9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWNhbnZhcy1jb250YWluZXIiLHQpO3RoaXMuX2ludGVyYWN0aXZlJiZlLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWludGVyYWN0aXZlIiksdGhpcy5fY2FudmFzPXIuY3JlYXRlKCJjYW52YXMiLCJtYXBib3hnbC1jYW52YXMiLGUpLHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0Iix0aGlzLl9jb250ZXh0TG9zdCwhMSksdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIix0aGlzLl9jb250ZXh0UmVzdG9yZWQsITEpLHRoaXMuX2NhbnZhcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLHRoaXMuX2NhbnZhcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJNYXAiKTt2YXIgbj10aGlzLl9jb250YWluZXJEaW1lbnNpb25zKCk7dGhpcy5fcmVzaXplQ2FudmFzKG5bMF0sblsxXSk7dmFyIGk9dGhpcy5fY29udHJvbENvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY29udHJvbC1jb250YWluZXIiLHQpLGE9dGhpcy5fY29udHJvbFBvc2l0aW9ucz17fTtbInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwiYm90dG9tLWxlZnQiLCJib3R0b20tcmlnaHQiXS5mb3JFYWNoKChmdW5jdGlvbih0KXthW3RdPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsLSIrdCxpKX0pKX0saS5wcm90b3R5cGUuX3Jlc2l6ZUNhbnZhcz1mdW5jdGlvbihlLHIpe3ZhciBuPXQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvfHwxO3RoaXMuX2NhbnZhcy53aWR0aD1uKmUsdGhpcy5fY2FudmFzLmhlaWdodD1uKnIsdGhpcy5fY2FudmFzLnN0eWxlLndpZHRoPWUrInB4Iix0aGlzLl9jYW52YXMuc3R5bGUuaGVpZ2h0PXIrInB4In0saS5wcm90b3R5cGUuX3NldHVwUGFpbnRlcj1mdW5jdGlvbigpe3ZhciByPXQuZXh0ZW5kKHt9LGUud2ViR0xDb250ZXh0QXR0cmlidXRlcyx7ZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDp0aGlzLl9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0LHByZXNlcnZlRHJhd2luZ0J1ZmZlcjp0aGlzLl9wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsYW50aWFsaWFzOnRoaXMuX2FudGlhbGlhc3x8ITF9KSxuPXRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KCJ3ZWJnbCIscil8fHRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLHIpO24/KHRoaXMucGFpbnRlcj1uZXcgX24obix0aGlzLnRyYW5zZm9ybSksdC53ZWJwU3VwcG9ydGVkLnRlc3RTdXBwb3J0KG4pKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplIFdlYkdMIikpKX0saS5wcm90b3R5cGUuX2NvbnRleHRMb3N0PWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSx0aGlzLl9mcmFtZSYmKHRoaXMuX2ZyYW1lLmNhbmNlbCgpLHRoaXMuX2ZyYW1lPW51bGwpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgid2ViZ2xjb250ZXh0bG9zdCIse29yaWdpbmFsRXZlbnQ6ZX0pKX0saS5wcm90b3R5cGUuX2NvbnRleHRSZXN0b3JlZD1mdW5jdGlvbihlKXt0aGlzLl9zZXR1cFBhaW50ZXIoKSx0aGlzLnJlc2l6ZSgpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgid2ViZ2xjb250ZXh0cmVzdG9yZWQiLHtvcmlnaW5hbEV2ZW50OmV9KSl9LGkucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3JldHVybiF0aGlzLl9zdHlsZURpcnR5JiYhdGhpcy5fc291cmNlc0RpcnR5JiYhIXRoaXMuc3R5bGUmJnRoaXMuc3R5bGUubG9hZGVkKCl9LGkucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGU/KHRoaXMuX3N0eWxlRGlydHk9dGhpcy5fc3R5bGVEaXJ0eXx8dCx0aGlzLl9zb3VyY2VzRGlydHk9ITAsdGhpcy50cmlnZ2VyUmVwYWludCgpLHRoaXMpOnRoaXN9LGkucHJvdG90eXBlLl9yZXF1ZXN0UmVuZGVyRnJhbWU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3VwZGF0ZSgpLHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5hZGQodCl9LGkucHJvdG90eXBlLl9jYW5jZWxSZW5kZXJGcmFtZT1mdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJUYXNrUXVldWUucmVtb3ZlKHQpfSxpLnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKGUpe3ZhciByLG49dGhpcyxpPTAsYT10aGlzLnBhaW50ZXIuY29udGV4dC5leHRUaW1lclF1ZXJ5O2lmKHRoaXMubGlzdGVucygiZ3B1LXRpbWluZy1mcmFtZSIpJiYocj1hLmNyZWF0ZVF1ZXJ5RVhUKCksYS5iZWdpblF1ZXJ5RVhUKGEuVElNRV9FTEFQU0VEX0VYVCxyKSxpPXQuYnJvd3Nlci5ub3coKSksdGhpcy5wYWludGVyLmNvbnRleHQuc2V0RGlydHkoKSx0aGlzLnBhaW50ZXIuc2V0QmFzZVN0YXRlKCksdGhpcy5fcmVuZGVyVGFza1F1ZXVlLnJ1bihlKSwhdGhpcy5fcmVtb3ZlZCl7dmFyIG89ITE7aWYodGhpcy5zdHlsZSYmdGhpcy5fc3R5bGVEaXJ0eSl7dGhpcy5fc3R5bGVEaXJ0eT0hMTt2YXIgcz10aGlzLnRyYW5zZm9ybS56b29tLGw9dC5icm93c2VyLm5vdygpO3RoaXMuc3R5bGUuem9vbUhpc3RvcnkudXBkYXRlKHMsbCk7dmFyIGM9bmV3IHQuRXZhbHVhdGlvblBhcmFtZXRlcnMocyx7bm93OmwsZmFkZUR1cmF0aW9uOnRoaXMuX2ZhZGVEdXJhdGlvbix6b29tSGlzdG9yeTp0aGlzLnN0eWxlLnpvb21IaXN0b3J5LHRyYW5zaXRpb246dGhpcy5zdHlsZS5nZXRUcmFuc2l0aW9uKCl9KSx1PWMuY3Jvc3NGYWRpbmdGYWN0b3IoKTsxPT09dSYmdT09PXRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yfHwobz0hMCx0aGlzLl9jcm9zc0ZhZGluZ0ZhY3Rvcj11KSx0aGlzLnN0eWxlLnVwZGF0ZShjKX1pZih0aGlzLnN0eWxlJiZ0aGlzLl9zb3VyY2VzRGlydHkmJih0aGlzLl9zb3VyY2VzRGlydHk9ITEsdGhpcy5zdHlsZS5fdXBkYXRlU291cmNlcyh0aGlzLnRyYW5zZm9ybSkpLHRoaXMuX3BsYWNlbWVudERpcnR5PXRoaXMuc3R5bGUmJnRoaXMuc3R5bGUuX3VwZGF0ZVBsYWNlbWVudCh0aGlzLnBhaW50ZXIudHJhbnNmb3JtLHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzLHRoaXMuX2ZhZGVEdXJhdGlvbix0aGlzLl9jcm9zc1NvdXJjZUNvbGxpc2lvbnMpLHRoaXMucGFpbnRlci5yZW5kZXIodGhpcy5zdHlsZSx7c2hvd1RpbGVCb3VuZGFyaWVzOnRoaXMuc2hvd1RpbGVCb3VuZGFyaWVzLHNob3dPdmVyZHJhd0luc3BlY3Rvcjp0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3Iscm90YXRpbmc6dGhpcy5pc1JvdGF0aW5nKCksem9vbWluZzp0aGlzLmlzWm9vbWluZygpLG1vdmluZzp0aGlzLmlzTW92aW5nKCksZmFkZUR1cmF0aW9uOnRoaXMuX2ZhZGVEdXJhdGlvbixzaG93UGFkZGluZzp0aGlzLnNob3dQYWRkaW5nLGdwdVRpbWluZzohIXRoaXMubGlzdGVucygiZ3B1LXRpbWluZy1sYXllciIpfSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJyZW5kZXIiKSksdGhpcy5sb2FkZWQoKSYmIXRoaXMuX2xvYWRlZCYmKHRoaXMuX2xvYWRlZD0hMCx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImxvYWQiKSkpLHRoaXMuc3R5bGUmJih0aGlzLnN0eWxlLmhhc1RyYW5zaXRpb25zKCl8fG8pJiYodGhpcy5fc3R5bGVEaXJ0eT0hMCksdGhpcy5zdHlsZSYmIXRoaXMuX3BsYWNlbWVudERpcnR5JiZ0aGlzLnN0eWxlLl9yZWxlYXNlU3ltYm9sRmFkZVRpbGVzKCksdGhpcy5saXN0ZW5zKCJncHUtdGltaW5nLWZyYW1lIikpe3ZhciBmPXQuYnJvd3Nlci5ub3coKS1pO2EuZW5kUXVlcnlFWFQoYS5USU1FX0VMQVBTRURfRVhULHIpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIGU9YS5nZXRRdWVyeU9iamVjdEVYVChyLGEuUVVFUllfUkVTVUxUX0VYVCkvMWU2O2EuZGVsZXRlUXVlcnlFWFQociksbi5maXJlKG5ldyB0LkV2ZW50KCJncHUtdGltaW5nLWZyYW1lIix7Y3B1VGltZTpmLGdwdVRpbWU6ZX0pKX0pLDUwKX1pZih0aGlzLmxpc3RlbnMoImdwdS10aW1pbmctbGF5ZXIiKSl7dmFyIGg9dGhpcy5wYWludGVyLmNvbGxlY3RHcHVUaW1lcnMoKTtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3ZhciBlPW4ucGFpbnRlci5xdWVyeUdwdVRpbWVycyhoKTtuLmZpcmUobmV3IHQuRXZlbnQoImdwdS10aW1pbmctbGF5ZXIiLHtsYXllclRpbWVzOmV9KSl9KSw1MCl9cmV0dXJuIHRoaXMuX3NvdXJjZXNEaXJ0eXx8dGhpcy5fc3R5bGVEaXJ0eXx8dGhpcy5fcGxhY2VtZW50RGlydHl8fHRoaXMuX3JlcGFpbnQ/dGhpcy50cmlnZ2VyUmVwYWludCgpOiF0aGlzLmlzTW92aW5nKCkmJnRoaXMubG9hZGVkKCkmJih0aGlzLl9mdWxseUxvYWRlZHx8KHRoaXMuX2Z1bGx5TG9hZGVkPSEwKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImlkbGUiKSkpLHRoaXN9fSxpLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9oYXNoJiZ0aGlzLl9oYXNoLnJlbW92ZSgpO2Zvcih2YXIgZT0wLHI9dGhpcy5fY29udHJvbHM7ZTxyLmxlbmd0aDtlKz0xKXtyW2VdLm9uUmVtb3ZlKHRoaXMpfXRoaXMuX2NvbnRyb2xzPVtdLHRoaXMuX2ZyYW1lJiYodGhpcy5fZnJhbWUuY2FuY2VsKCksdGhpcy5fZnJhbWU9bnVsbCksdGhpcy5fcmVuZGVyVGFza1F1ZXVlLmNsZWFyKCksdGhpcy5wYWludGVyLmRlc3Ryb3koKSx0aGlzLmhhbmRsZXJzLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5oYW5kbGVycyx0aGlzLnNldFN0eWxlKG51bGwpLHZvaWQgMCE9PXQud2luZG93JiYodC53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9vbldpbmRvd1Jlc2l6ZSwhMSksdC53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigib25saW5lIix0aGlzLl9vbldpbmRvd09ubGluZSwhMSkpO3ZhciBuPXRoaXMucGFpbnRlci5jb250ZXh0LmdsLmdldEV4dGVuc2lvbigiV0VCR0xfbG9zZV9jb250ZXh0Iik7biYmbi5sb3NlQ29udGV4dCgpLExpKHRoaXMuX2NhbnZhc0NvbnRhaW5lciksTGkodGhpcy5fY29udHJvbENvbnRhaW5lciksTGkodGhpcy5fbWlzc2luZ0NTU0NhbmFyeSksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLW1hcCIpLHRoaXMuX3JlbW92ZWQ9ITAsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJyZW1vdmUiKSl9LGkucHJvdG90eXBlLnRyaWdnZXJSZXBhaW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnN0eWxlJiYhdGhpcy5fZnJhbWUmJih0aGlzLl9mcmFtZT10LmJyb3dzZXIuZnJhbWUoKGZ1bmN0aW9uKHQpe2UuX2ZyYW1lPW51bGwsZS5fcmVuZGVyKHQpfSkpKX0saS5wcm90b3R5cGUuX29uV2luZG93T25saW5lPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlKCl9LGkucHJvdG90eXBlLl9vbldpbmRvd1Jlc2l6ZT1mdW5jdGlvbih0KXt0aGlzLl90cmFja1Jlc2l6ZSYmdGhpcy5yZXNpemUoe29yaWdpbmFsRXZlbnQ6dH0pLl91cGRhdGUoKX0sYS5zaG93VGlsZUJvdW5kYXJpZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXN9LGEuc2hvd1RpbGVCb3VuZGFyaWVzLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXMhPT10JiYodGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzPXQsdGhpcy5fdXBkYXRlKCkpfSxhLnNob3dQYWRkaW5nLmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fc2hvd1BhZGRpbmd9LGEuc2hvd1BhZGRpbmcuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3Nob3dQYWRkaW5nIT09dCYmKHRoaXMuX3Nob3dQYWRkaW5nPXQsdGhpcy5fdXBkYXRlKCkpfSxhLnNob3dDb2xsaXNpb25Cb3hlcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlc30sYS5zaG93Q29sbGlzaW9uQm94ZXMuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcyE9PXQmJih0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXM9dCx0P3RoaXMuc3R5bGUuX2dlbmVyYXRlQ29sbGlzaW9uQm94ZXMoKTp0aGlzLl91cGRhdGUoKSl9LGEuc2hvd092ZXJkcmF3SW5zcGVjdG9yLmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yfSxhLnNob3dPdmVyZHJhd0luc3BlY3Rvci5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yIT09dCYmKHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj10LHRoaXMuX3VwZGF0ZSgpKX0sYS5yZXBhaW50LmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fcmVwYWludH0sYS5yZXBhaW50LnNldD1mdW5jdGlvbih0KXt0aGlzLl9yZXBhaW50IT09dCYmKHRoaXMuX3JlcGFpbnQ9dCx0aGlzLnRyaWdnZXJSZXBhaW50KCkpfSxhLnZlcnRpY2VzLmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fdmVydGljZXN9LGEudmVydGljZXMuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3ZlcnRpY2VzPXQsdGhpcy5fdXBkYXRlKCl9LGkucHJvdG90eXBlLl9zZXRDYWNoZUxpbWl0cz1mdW5jdGlvbihlLHIpe3Quc2V0Q2FjaGVMaW1pdHMoZSxyKX0sYS52ZXJzaW9uLmdldD1mdW5jdGlvbigpe3JldHVybiB0LnZlcnNpb259LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGkucHJvdG90eXBlLGEpLGl9KHhpKTtmdW5jdGlvbiBMaSh0KXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX12YXIgQ2k9e3Nob3dDb21wYXNzOiEwLHNob3dab29tOiEwLHZpc3VhbGl6ZVBpdGNoOiExfSxQaT1mdW5jdGlvbihlKXt2YXIgbj10aGlzO3RoaXMub3B0aW9ucz10LmV4dGVuZCh7fSxDaSxlKSx0aGlzLl9jb250YWluZXI9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1ncm91cCIpLHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCl9KSksdGhpcy5vcHRpb25zLnNob3dab29tJiYodC5iaW5kQWxsKFsiX3NldEJ1dHRvblRpdGxlIiwiX3VwZGF0ZVpvb21CdXR0b25zIl0sdGhpcyksdGhpcy5fem9vbUluQnV0dG9uPXRoaXMuX2NyZWF0ZUJ1dHRvbigibWFwYm94Z2wtY3RybC16b29tLWluIiwoZnVuY3Rpb24odCl7cmV0dXJuIG4uX21hcC56b29tSW4oe30se29yaWdpbmFsRXZlbnQ6dH0pfSkpLHIuY3JlYXRlKCJzcGFuIiwibWFwYm94Z2wtY3RybC1pY29uIix0aGlzLl96b29tSW5CdXR0b24pLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCEwKSx0aGlzLl96b29tT3V0QnV0dG9uPXRoaXMuX2NyZWF0ZUJ1dHRvbigibWFwYm94Z2wtY3RybC16b29tLW91dCIsKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9tYXAuem9vbU91dCh7fSx7b3JpZ2luYWxFdmVudDp0fSl9KSksci5jcmVhdGUoInNwYW4iLCJtYXBib3hnbC1jdHJsLWljb24iLHRoaXMuX3pvb21PdXRCdXR0b24pLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCEwKSksdGhpcy5vcHRpb25zLnNob3dDb21wYXNzJiYodC5iaW5kQWxsKFsiX3JvdGF0ZUNvbXBhc3NBcnJvdyJdLHRoaXMpLHRoaXMuX2NvbXBhc3M9dGhpcy5fY3JlYXRlQnV0dG9uKCJtYXBib3hnbC1jdHJsLWNvbXBhc3MiLChmdW5jdGlvbih0KXtuLm9wdGlvbnMudmlzdWFsaXplUGl0Y2g/bi5fbWFwLnJlc2V0Tm9ydGhQaXRjaCh7fSx7b3JpZ2luYWxFdmVudDp0fSk6bi5fbWFwLnJlc2V0Tm9ydGgoe30se29yaWdpbmFsRXZlbnQ6dH0pfSkpLHRoaXMuX2NvbXBhc3NJY29uPXIuY3JlYXRlKCJzcGFuIiwibWFwYm94Z2wtY3RybC1pY29uIix0aGlzLl9jb21wYXNzKSx0aGlzLl9jb21wYXNzSWNvbi5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwhMCkpfTtQaS5wcm90b3R5cGUuX3VwZGF0ZVpvb21CdXR0b25zPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLmdldFpvb20oKTt0aGlzLl96b29tSW5CdXR0b24uZGlzYWJsZWQ9dD09PXRoaXMuX21hcC5nZXRNYXhab29tKCksdGhpcy5fem9vbU91dEJ1dHRvbi5kaXNhYmxlZD10PT09dGhpcy5fbWFwLmdldE1pblpvb20oKX0sUGkucHJvdG90eXBlLl9yb3RhdGVDb21wYXNzQXJyb3c9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMudmlzdWFsaXplUGl0Y2g/InNjYWxlKCIrMS9NYXRoLnBvdyhNYXRoLmNvcyh0aGlzLl9tYXAudHJhbnNmb3JtLnBpdGNoKihNYXRoLlBJLzE4MCkpLC41KSsiKSByb3RhdGVYKCIrdGhpcy5fbWFwLnRyYW5zZm9ybS5waXRjaCsiZGVnKSByb3RhdGVaKCIrdGhpcy5fbWFwLnRyYW5zZm9ybS5hbmdsZSooMTgwL01hdGguUEkpKyJkZWcpIjoicm90YXRlKCIrdGhpcy5fbWFwLnRyYW5zZm9ybS5hbmdsZSooMTgwL01hdGguUEkpKyJkZWcpIjt0aGlzLl9jb21wYXNzSWNvbi5zdHlsZS50cmFuc2Zvcm09dH0sUGkucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXA9dCx0aGlzLm9wdGlvbnMuc2hvd1pvb20mJih0aGlzLl9zZXRCdXR0b25UaXRsZSh0aGlzLl96b29tSW5CdXR0b24sIlpvb21JbiIpLHRoaXMuX3NldEJ1dHRvblRpdGxlKHRoaXMuX3pvb21PdXRCdXR0b24sIlpvb21PdXQiKSx0aGlzLl9tYXAub24oInpvb20iLHRoaXMuX3VwZGF0ZVpvb21CdXR0b25zKSx0aGlzLl91cGRhdGVab29tQnV0dG9ucygpKSx0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MmJih0aGlzLl9zZXRCdXR0b25UaXRsZSh0aGlzLl9jb21wYXNzLCJSZXNldEJlYXJpbmciKSx0aGlzLm9wdGlvbnMudmlzdWFsaXplUGl0Y2gmJnRoaXMuX21hcC5vbigicGl0Y2giLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyksdGhpcy5fbWFwLm9uKCJyb3RhdGUiLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyksdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KCksdGhpcy5faGFuZGxlcj1uZXcgSWkodGhpcy5fbWFwLHRoaXMuX2NvbXBhc3MsdGhpcy5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoKSksdGhpcy5fY29udGFpbmVyfSxQaS5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtyLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMub3B0aW9ucy5zaG93Wm9vbSYmdGhpcy5fbWFwLm9mZigiem9vbSIsdGhpcy5fdXBkYXRlWm9vbUJ1dHRvbnMpLHRoaXMub3B0aW9ucy5zaG93Q29tcGFzcyYmKHRoaXMub3B0aW9ucy52aXN1YWxpemVQaXRjaCYmdGhpcy5fbWFwLm9mZigicGl0Y2giLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyksdGhpcy5fbWFwLm9mZigicm90YXRlIix0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpLHRoaXMuX2hhbmRsZXIub2ZmKCksZGVsZXRlIHRoaXMuX2hhbmRsZXIpLGRlbGV0ZSB0aGlzLl9tYXB9LFBpLnByb3RvdHlwZS5fY3JlYXRlQnV0dG9uPWZ1bmN0aW9uKHQsZSl7dmFyIG49ci5jcmVhdGUoImJ1dHRvbiIsdCx0aGlzLl9jb250YWluZXIpO3JldHVybiBuLnR5cGU9ImJ1dHRvbiIsbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZSksbn0sUGkucHJvdG90eXBlLl9zZXRCdXR0b25UaXRsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX21hcC5fZ2V0VUlTdHJpbmcoIk5hdmlnYXRpb25Db250cm9sLiIrZSk7dC50aXRsZT1yLHQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixyKX07dmFyIElpPWZ1bmN0aW9uKGUsbixpKXt2b2lkIDA9PT1pJiYoaT0hMSksdGhpcy5fY2xpY2tUb2xlcmFuY2U9MTAsdGhpcy5lbGVtZW50PW4sdGhpcy5tb3VzZVJvdGF0ZT1uZXcgWG4oe2NsaWNrVG9sZXJhbmNlOmUuZHJhZ1JvdGF0ZS5fbW91c2VSb3RhdGUuX2NsaWNrVG9sZXJhbmNlfSksdGhpcy5tYXA9ZSxpJiYodGhpcy5tb3VzZVBpdGNoPW5ldyBabih7Y2xpY2tUb2xlcmFuY2U6ZS5kcmFnUm90YXRlLl9tb3VzZVBpdGNoLl9jbGlja1RvbGVyYW5jZX0pKSx0LmJpbmRBbGwoWyJtb3VzZWRvd24iLCJtb3VzZW1vdmUiLCJtb3VzZXVwIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIiwicmVzZXQiXSx0aGlzKSxyLmFkZEV2ZW50TGlzdGVuZXIobiwibW91c2Vkb3duIix0aGlzLm1vdXNlZG93biksci5hZGRFdmVudExpc3RlbmVyKG4sInRvdWNoc3RhcnQiLHRoaXMudG91Y2hzdGFydCx7cGFzc2l2ZTohMX0pLHIuYWRkRXZlbnRMaXN0ZW5lcihuLCJ0b3VjaG1vdmUiLHRoaXMudG91Y2htb3ZlKSxyLmFkZEV2ZW50TGlzdGVuZXIobiwidG91Y2hlbmQiLHRoaXMudG91Y2hlbmQpLHIuYWRkRXZlbnRMaXN0ZW5lcihuLCJ0b3VjaGNhbmNlbCIsdGhpcy5yZXNldCl9O2Z1bmN0aW9uIE9pKGUscixuKXtpZihlPW5ldyB0LkxuZ0xhdChlLmxuZyxlLmxhdCkscil7dmFyIGk9bmV3IHQuTG5nTGF0KGUubG5nLTM2MCxlLmxhdCksYT1uZXcgdC5MbmdMYXQoZS5sbmcrMzYwLGUubGF0KSxvPW4ubG9jYXRpb25Qb2ludChlKS5kaXN0U3FyKHIpO24ubG9jYXRpb25Qb2ludChpKS5kaXN0U3FyKHIpPG8/ZT1pOm4ubG9jYXRpb25Qb2ludChhKS5kaXN0U3FyKHIpPG8mJihlPWEpfWZvcig7TWF0aC5hYnMoZS5sbmctbi5jZW50ZXIubG5nKT4xODA7KXt2YXIgcz1uLmxvY2F0aW9uUG9pbnQoZSk7aWYocy54Pj0wJiZzLnk+PTAmJnMueDw9bi53aWR0aCYmcy55PD1uLmhlaWdodClicmVhaztlLmxuZz5uLmNlbnRlci5sbmc/ZS5sbmctPTM2MDplLmxuZys9MzYwfXJldHVybiBlfUlpLnByb3RvdHlwZS5kb3duPWZ1bmN0aW9uKHQsZSl7dGhpcy5tb3VzZVJvdGF0ZS5tb3VzZWRvd24odCxlKSx0aGlzLm1vdXNlUGl0Y2gmJnRoaXMubW91c2VQaXRjaC5tb3VzZWRvd24odCxlKSxyLmRpc2FibGVEcmFnKCl9LElpLnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5tYXAsbj10aGlzLm1vdXNlUm90YXRlLm1vdXNlbW92ZVdpbmRvdyh0LGUpO2lmKG4mJm4uYmVhcmluZ0RlbHRhJiZyLnNldEJlYXJpbmcoci5nZXRCZWFyaW5nKCkrbi5iZWFyaW5nRGVsdGEpLHRoaXMubW91c2VQaXRjaCl7dmFyIGk9dGhpcy5tb3VzZVBpdGNoLm1vdXNlbW92ZVdpbmRvdyh0LGUpO2kmJmkucGl0Y2hEZWx0YSYmci5zZXRQaXRjaChyLmdldFBpdGNoKCkraS5waXRjaERlbHRhKX19LElpLnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQ7ci5yZW1vdmVFdmVudExpc3RlbmVyKHQsIm1vdXNlZG93biIsdGhpcy5tb3VzZWRvd24pLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LCJ0b3VjaHN0YXJ0Iix0aGlzLnRvdWNoc3RhcnQse3Bhc3NpdmU6ITF9KSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIodCwidG91Y2htb3ZlIix0aGlzLnRvdWNobW92ZSksci5yZW1vdmVFdmVudExpc3RlbmVyKHQsInRvdWNoZW5kIix0aGlzLnRvdWNoZW5kKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIodCwidG91Y2hjYW5jZWwiLHRoaXMucmVzZXQpLHRoaXMub2ZmVGVtcCgpfSxJaS5wcm90b3R5cGUub2ZmVGVtcD1mdW5jdGlvbigpe3IuZW5hYmxlRHJhZygpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LndpbmRvdywibW91c2Vtb3ZlIix0aGlzLm1vdXNlbW92ZSksci5yZW1vdmVFdmVudExpc3RlbmVyKHQud2luZG93LCJtb3VzZXVwIix0aGlzLm1vdXNldXApfSxJaS5wcm90b3R5cGUubW91c2Vkb3duPWZ1bmN0aW9uKGUpe3RoaXMuZG93bih0LmV4dGVuZCh7fSxlLHtjdHJsS2V5OiEwLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuIGUucHJldmVudERlZmF1bHQoKX19KSxyLm1vdXNlUG9zKHRoaXMuZWxlbWVudCxlKSksci5hZGRFdmVudExpc3RlbmVyKHQud2luZG93LCJtb3VzZW1vdmUiLHRoaXMubW91c2Vtb3ZlKSxyLmFkZEV2ZW50TGlzdGVuZXIodC53aW5kb3csIm1vdXNldXAiLHRoaXMubW91c2V1cCl9LElpLnByb3RvdHlwZS5tb3VzZW1vdmU9ZnVuY3Rpb24odCl7dGhpcy5tb3ZlKHQsci5tb3VzZVBvcyh0aGlzLmVsZW1lbnQsdCkpfSxJaS5wcm90b3R5cGUubW91c2V1cD1mdW5jdGlvbih0KXt0aGlzLm1vdXNlUm90YXRlLm1vdXNldXBXaW5kb3codCksdGhpcy5tb3VzZVBpdGNoJiZ0aGlzLm1vdXNlUGl0Y2gubW91c2V1cFdpbmRvdyh0KSx0aGlzLm9mZlRlbXAoKX0sSWkucHJvdG90eXBlLnRvdWNoc3RhcnQ9ZnVuY3Rpb24odCl7MSE9PXQudGFyZ2V0VG91Y2hlcy5sZW5ndGg/dGhpcy5yZXNldCgpOih0aGlzLl9zdGFydFBvcz10aGlzLl9sYXN0UG9zPXIudG91Y2hQb3ModGhpcy5lbGVtZW50LHQudGFyZ2V0VG91Y2hlcylbMF0sdGhpcy5kb3duKHt0eXBlOiJtb3VzZWRvd24iLGJ1dHRvbjowLGN0cmxLZXk6ITAscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpfX0sdGhpcy5fc3RhcnRQb3MpKX0sSWkucHJvdG90eXBlLnRvdWNobW92ZT1mdW5jdGlvbih0KXsxIT09dC50YXJnZXRUb3VjaGVzLmxlbmd0aD90aGlzLnJlc2V0KCk6KHRoaXMuX2xhc3RQb3M9ci50b3VjaFBvcyh0aGlzLmVsZW1lbnQsdC50YXJnZXRUb3VjaGVzKVswXSx0aGlzLm1vdmUoe3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKX19LHRoaXMuX2xhc3RQb3MpKX0sSWkucHJvdG90eXBlLnRvdWNoZW5kPWZ1bmN0aW9uKHQpezA9PT10LnRhcmdldFRvdWNoZXMubGVuZ3RoJiZ0aGlzLl9zdGFydFBvcyYmdGhpcy5fbGFzdFBvcyYmdGhpcy5fc3RhcnRQb3MuZGlzdCh0aGlzLl9sYXN0UG9zKTx0aGlzLl9jbGlja1RvbGVyYW5jZSYmdGhpcy5lbGVtZW50LmNsaWNrKCksdGhpcy5yZXNldCgpfSxJaS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLm1vdXNlUm90YXRlLnJlc2V0KCksdGhpcy5tb3VzZVBpdGNoJiZ0aGlzLm1vdXNlUGl0Y2gucmVzZXQoKSxkZWxldGUgdGhpcy5fc3RhcnRQb3MsZGVsZXRlIHRoaXMuX2xhc3RQb3MsdGhpcy5vZmZUZW1wKCl9O3ZhciB6aT17Y2VudGVyOiJ0cmFuc2xhdGUoLTUwJSwtNTAlKSIsdG9wOiJ0cmFuc2xhdGUoLTUwJSwwKSIsInRvcC1sZWZ0IjoidHJhbnNsYXRlKDAsMCkiLCJ0b3AtcmlnaHQiOiJ0cmFuc2xhdGUoLTEwMCUsMCkiLGJvdHRvbToidHJhbnNsYXRlKC01MCUsLTEwMCUpIiwiYm90dG9tLWxlZnQiOiJ0cmFuc2xhdGUoMCwtMTAwJSkiLCJib3R0b20tcmlnaHQiOiJ0cmFuc2xhdGUoLTEwMCUsLTEwMCUpIixsZWZ0OiJ0cmFuc2xhdGUoMCwtNTAlKSIscmlnaHQ6InRyYW5zbGF0ZSgtMTAwJSwtNTAlKSJ9O2Z1bmN0aW9uIERpKHQsZSxyKXt2YXIgbj10LmNsYXNzTGlzdDtmb3IodmFyIGkgaW4gemkpbi5yZW1vdmUoIm1hcGJveGdsLSIrcisiLWFuY2hvci0iK2kpO24uYWRkKCJtYXBib3hnbC0iK3IrIi1hbmNob3ItIitlKX12YXIgUmksRmk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuLGkpe3ZhciBhPXRoaXM7aWYoZS5jYWxsKHRoaXMpLChuIGluc3RhbmNlb2YgdC53aW5kb3cuSFRNTEVsZW1lbnR8fGkpJiYobj10LmV4dGVuZCh7ZWxlbWVudDpufSxpKSksdC5iaW5kQWxsKFsiX3VwZGF0ZSIsIl9vbk1vdmUiLCJfb25VcCIsIl9hZGREcmFnSGFuZGxlciIsIl9vbk1hcENsaWNrIiwiX29uS2V5UHJlc3MiXSx0aGlzKSx0aGlzLl9hbmNob3I9biYmbi5hbmNob3J8fCJjZW50ZXIiLHRoaXMuX2NvbG9yPW4mJm4uY29sb3J8fCIjM0ZCMUNFIix0aGlzLl9kcmFnZ2FibGU9biYmbi5kcmFnZ2FibGV8fCExLHRoaXMuX3N0YXRlPSJpbmFjdGl2ZSIsdGhpcy5fcm90YXRpb249biYmbi5yb3RhdGlvbnx8MCx0aGlzLl9yb3RhdGlvbkFsaWdubWVudD1uJiZuLnJvdGF0aW9uQWxpZ25tZW50fHwiYXV0byIsdGhpcy5fcGl0Y2hBbGlnbm1lbnQ9biYmbi5waXRjaEFsaWdubWVudCYmImF1dG8iIT09bi5waXRjaEFsaWdubWVudD9uLnBpdGNoQWxpZ25tZW50OnRoaXMuX3JvdGF0aW9uQWxpZ25tZW50LG4mJm4uZWxlbWVudCl0aGlzLl9lbGVtZW50PW4uZWxlbWVudCx0aGlzLl9vZmZzZXQ9dC5Qb2ludC5jb252ZXJ0KG4mJm4ub2Zmc2V0fHxbMCwwXSk7ZWxzZXt0aGlzLl9kZWZhdWx0TWFya2VyPSEwLHRoaXMuX2VsZW1lbnQ9ci5jcmVhdGUoImRpdiIpLHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiTWFwIG1hcmtlciIpO3ZhciBvPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwic3ZnIik7by5zZXRBdHRyaWJ1dGVOUyhudWxsLCJkaXNwbGF5IiwiYmxvY2siKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsIjQxcHgiKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIiwiMjdweCIpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwidmlld0JveCIsIjAgMCAyNyA0MSIpO3ZhciBzPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO3Muc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlIiwibm9uZSIpLHMuc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLXdpZHRoIiwiMSIpLHMuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIm5vbmUiKSxzLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtcnVsZSIsImV2ZW5vZGQiKTt2YXIgbD1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTtsLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtcnVsZSIsIm5vbnplcm8iKTt2YXIgYz1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTtjLnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgzLjAsIDI5LjApIiksYy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwiIzAwMDAwMCIpO2Zvcih2YXIgdT0wLGY9W3tyeDoiMTAuNSIscnk6IjUuMjUwMDIyNzMifSx7cng6IjEwLjUiLHJ5OiI1LjI1MDAyMjczIn0se3J4OiI5LjUiLHJ5OiI0Ljc3Mjc1MDA3In0se3J4OiI4LjUiLHJ5OiI0LjI5NTQ5OTM2In0se3J4OiI3LjUiLHJ5OiIzLjgxODIyMzA4In0se3J4OiI2LjUiLHJ5OiIzLjM0MDk0Njc5In0se3J4OiI1LjUiLHJ5OiIyLjg2MzY3MDUxIn0se3J4OiI0LjUiLHJ5OiIyLjM4NjM2ODY0In1dO3U8Zi5sZW5ndGg7dSs9MSl7dmFyIGg9Zlt1XSxwPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZWxsaXBzZSIpO3Auc2V0QXR0cmlidXRlTlMobnVsbCwib3BhY2l0eSIsIjAuMDQiKSxwLnNldEF0dHJpYnV0ZU5TKG51bGwsImN4IiwiMTAuNSIpLHAuc2V0QXR0cmlidXRlTlMobnVsbCwiY3kiLCI1LjgwMDI5MDA4IikscC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJyeCIsaC5yeCkscC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJyeSIsaC5yeSksYy5hcHBlbmRDaGlsZChwKX12YXIgZD1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTtkLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLHRoaXMuX2NvbG9yKTt2YXIgbT1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTttLnNldEF0dHJpYnV0ZU5TKG51bGwsImQiLCJNMjcsMTMuNSBDMjcsMTkuMDc0NjQ0IDIwLjI1MDAwMSwyNy4wMDAwMDIgMTQuNzUsMzQuNTAwMDAyIEMxNC4wMTY2NjUsMzUuNTAwMDA0IDEyLjk4MzMzNSwzNS41MDAwMDQgMTIuMjUsMzQuNTAwMDAyIEM2Ljc0OTk5OTMsMjcuMDAwMDAyIDAsMTkuMjIyNTYyIDAsMTMuNSBDMCw2LjA0NDE1NTkgNi4wNDQxNTU5LDAgMTMuNSwwIEMyMC45NTU4NDQsMCAyNyw2LjA0NDE1NTkgMjcsMTMuNSBaIiksZC5hcHBlbmRDaGlsZChtKTt2YXIgZz1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTtnLnNldEF0dHJpYnV0ZU5TKG51bGwsIm9wYWNpdHkiLCIwLjI1IiksZy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwiIzAwMDAwMCIpO3ZhciB2PXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO3Yuc2V0QXR0cmlidXRlTlMobnVsbCwiZCIsIk0xMy41LDAgQzYuMDQ0MTU1OSwwIDAsNi4wNDQxNTU5IDAsMTMuNSBDMCwxOS4yMjI1NjIgNi43NDk5OTkzLDI3IDEyLjI1LDM0LjUgQzEzLDM1LjUyMjcyNyAxNC4wMTY2NjQsMzUuNTAwMDA0IDE0Ljc1LDM0LjUgQzIwLjI1MDAwMSwyNyAyNywxOS4wNzQ2NDQgMjcsMTMuNSBDMjcsNi4wNDQxNTU5IDIwLjk1NTg0NCwwIDEzLjUsMCBaIE0xMy41LDEgQzIwLjQxNTQwNCwxIDI2LDYuNTg0NTk2IDI2LDEzLjUgQzI2LDE1Ljg5ODY1NyAyNC40OTU1ODQsMTkuMTgxNDMxIDIyLjIyMDcwMywyMi43MzgyODEgQzE5Ljk0NTgyMywyNi4yOTUxMzIgMTYuNzA1MTE5LDMwLjE0MjE2NyAxMy45NDMzNTksMzMuOTA4MjAzIEMxMy43NDM0NDUsMzQuMTgwODE0IDEzLjYxMjcxNSwzNC4zMjI3MzggMTMuNSwzNC40NDE0MDYgQzEzLjM4NzI4NSwzNC4zMjI3MzggMTMuMjU2NTU1LDM0LjE4MDgxNCAxMy4wNTY2NDEsMzMuOTA4MjAzIEMxMC4yODQ0ODEsMzAuMTI3OTg1IDcuNDE0ODY4NCwyNi4zMTQxNTkgNS4wMTU2MjUsMjIuNzczNDM4IEMyLjYxNjM4MTYsMTkuMjMyNzE1IDEsMTUuOTUzNTM4IDEsMTMuNSBDMSw2LjU4NDU5NiA2LjU4NDU5NiwxIDEzLjUsMSBaIiksZy5hcHBlbmRDaGlsZCh2KTt2YXIgeT1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTt5LnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg2LjAsIDcuMCkiKSx5LnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCIjRkZGRkZGIik7dmFyIHg9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7eC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoOC4wLCA4LjApIik7dmFyIGI9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjaXJjbGUiKTtiLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCIjMDAwMDAwIiksYi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJvcGFjaXR5IiwiMC4yNSIpLGIuc2V0QXR0cmlidXRlTlMobnVsbCwiY3giLCI1LjUiKSxiLnNldEF0dHJpYnV0ZU5TKG51bGwsImN5IiwiNS41IiksYi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJyIiwiNS40OTk5OTYyIik7dmFyIF89ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjaXJjbGUiKTtfLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCIjRkZGRkZGIiksXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeCIsIjUuNSIpLF8uc2V0QXR0cmlidXRlTlMobnVsbCwiY3kiLCI1LjUiKSxfLnNldEF0dHJpYnV0ZU5TKG51bGwsInIiLCI1LjQ5OTk5NjIiKSx4LmFwcGVuZENoaWxkKGIpLHguYXBwZW5kQ2hpbGQoXyksbC5hcHBlbmRDaGlsZChjKSxsLmFwcGVuZENoaWxkKGQpLGwuYXBwZW5kQ2hpbGQoZyksbC5hcHBlbmRDaGlsZCh5KSxsLmFwcGVuZENoaWxkKHgpLG8uYXBwZW5kQ2hpbGQobCksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChvKSx0aGlzLl9vZmZzZXQ9dC5Qb2ludC5jb252ZXJ0KG4mJm4ub2Zmc2V0fHxbMCwtMTRdKX10aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLW1hcmtlciIpLHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0IiwoZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpfSkpLHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpfSkpLHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLChmdW5jdGlvbigpe3ZhciB0PWEuX21hcC5nZXRDb250YWluZXIoKTt0LnNjcm9sbFRvcD0wLHQuc2Nyb2xsTGVmdD0wfSkpLERpKHRoaXMuX2VsZW1lbnQsdGhpcy5fYW5jaG9yLCJtYXJrZXIiKSx0aGlzLl9wb3B1cD1udWxsfXJldHVybiBlJiYobi5fX3Byb3RvX189ZSksbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZW1vdmUoKSx0aGlzLl9tYXA9dCx0LmdldENhbnZhc0NvbnRhaW5lcigpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHQub24oIm1vdmUiLHRoaXMuX3VwZGF0ZSksdC5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlKSx0aGlzLnNldERyYWdnYWJsZSh0aGlzLl9kcmFnZ2FibGUpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX21hcC5vbigiY2xpY2siLHRoaXMuX29uTWFwQ2xpY2spLHRoaXN9LG4ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKCJjbGljayIsdGhpcy5fb25NYXBDbGljayksdGhpcy5fbWFwLm9mZigibW92ZSIsdGhpcy5fdXBkYXRlKSx0aGlzLl9tYXAub2ZmKCJtb3ZlZW5kIix0aGlzLl91cGRhdGUpLHRoaXMuX21hcC5vZmYoIm1vdXNlZG93biIsdGhpcy5fYWRkRHJhZ0hhbmRsZXIpLHRoaXMuX21hcC5vZmYoInRvdWNoc3RhcnQiLHRoaXMuX2FkZERyYWdIYW5kbGVyKSx0aGlzLl9tYXAub2ZmKCJtb3VzZXVwIix0aGlzLl9vblVwKSx0aGlzLl9tYXAub2ZmKCJ0b3VjaGVuZCIsdGhpcy5fb25VcCksdGhpcy5fbWFwLm9mZigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUpLHRoaXMuX21hcC5vZmYoInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlKSxkZWxldGUgdGhpcy5fbWFwKSxyLnJlbW92ZSh0aGlzLl9lbGVtZW50KSx0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAucmVtb3ZlKCksdGhpc30sbi5wcm90b3R5cGUuZ2V0TG5nTGF0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xuZ0xhdH0sbi5wcm90b3R5cGUuc2V0TG5nTGF0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9sbmdMYXQ9dC5MbmdMYXQuY29udmVydChlKSx0aGlzLl9wb3M9bnVsbCx0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCksdGhpcy5fdXBkYXRlKCksdGhpc30sbi5wcm90b3R5cGUuZ2V0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50fSxuLnByb3RvdHlwZS5zZXRQb3B1cD1mdW5jdGlvbih0KXtpZih0aGlzLl9wb3B1cCYmKHRoaXMuX3BvcHVwLnJlbW92ZSgpLHRoaXMuX3BvcHVwPW51bGwsdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsdGhpcy5fb25LZXlQcmVzcyksdGhpcy5fb3JpZ2luYWxUYWJJbmRleHx8dGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4IikpLHQpe2lmKCEoIm9mZnNldCJpbiB0Lm9wdGlvbnMpKXt2YXIgZT1NYXRoLnNxcnQoTWF0aC5wb3coMTMuNSwyKS8yKTt0Lm9wdGlvbnMub2Zmc2V0PXRoaXMuX2RlZmF1bHRNYXJrZXI/e3RvcDpbMCwwXSwidG9wLWxlZnQiOlswLDBdLCJ0b3AtcmlnaHQiOlswLDBdLGJvdHRvbTpbMCwtMzguMV0sImJvdHRvbS1sZWZ0IjpbZSwtMSooMjQuNitlKV0sImJvdHRvbS1yaWdodCI6Wy1lLC0xKigyNC42K2UpXSxsZWZ0OlsxMy41LC0yNC42XSxyaWdodDpbLTEzLjUsLTI0LjZdfTp0aGlzLl9vZmZzZXR9dGhpcy5fcG9wdXA9dCx0aGlzLl9sbmdMYXQmJnRoaXMuX3BvcHVwLnNldExuZ0xhdCh0aGlzLl9sbmdMYXQpLHRoaXMuX29yaWdpbmFsVGFiSW5kZXg9dGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IiksdGhpcy5fb3JpZ2luYWxUYWJJbmRleHx8dGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLHRoaXMuX29uS2V5UHJlc3MpfXJldHVybiB0aGlzfSxuLnByb3RvdHlwZS5fb25LZXlQcmVzcz1mdW5jdGlvbih0KXt2YXIgZT10LmNvZGUscj10LmNoYXJDb2RlfHx0LmtleUNvZGU7IlNwYWNlIiE9PWUmJiJFbnRlciIhPT1lJiYzMiE9PXImJjEzIT09cnx8dGhpcy50b2dnbGVQb3B1cCgpfSxuLnByb3RvdHlwZS5fb25NYXBDbGljaz1mdW5jdGlvbih0KXt2YXIgZT10Lm9yaWdpbmFsRXZlbnQudGFyZ2V0LHI9dGhpcy5fZWxlbWVudDt0aGlzLl9wb3B1cCYmKGU9PT1yfHxyLmNvbnRhaW5zKGUpKSYmdGhpcy50b2dnbGVQb3B1cCgpfSxuLnByb3RvdHlwZS5nZXRQb3B1cD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cH0sbi5wcm90b3R5cGUudG9nZ2xlUG9wdXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wb3B1cDtyZXR1cm4gdD8odC5pc09wZW4oKT90LnJlbW92ZSgpOnQuYWRkVG8odGhpcy5fbWFwKSx0aGlzKTp0aGlzfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX21hcCl7dGhpcy5fbWFwLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcyYmKHRoaXMuX2xuZ0xhdD1PaSh0aGlzLl9sbmdMYXQsdGhpcy5fcG9zLHRoaXMuX21hcC50cmFuc2Zvcm0pKSx0aGlzLl9wb3M9dGhpcy5fbWFwLnByb2plY3QodGhpcy5fbG5nTGF0KS5fYWRkKHRoaXMuX29mZnNldCk7dmFyIGU9IiI7InZpZXdwb3J0Ij09PXRoaXMuX3JvdGF0aW9uQWxpZ25tZW50fHwiYXV0byI9PT10aGlzLl9yb3RhdGlvbkFsaWdubWVudD9lPSJyb3RhdGVaKCIrdGhpcy5fcm90YXRpb24rImRlZykiOiJtYXAiPT09dGhpcy5fcm90YXRpb25BbGlnbm1lbnQmJihlPSJyb3RhdGVaKCIrKHRoaXMuX3JvdGF0aW9uLXRoaXMuX21hcC5nZXRCZWFyaW5nKCkpKyJkZWcpIik7dmFyIG49IiI7InZpZXdwb3J0Ij09PXRoaXMuX3BpdGNoQWxpZ25tZW50fHwiYXV0byI9PT10aGlzLl9waXRjaEFsaWdubWVudD9uPSJyb3RhdGVYKDBkZWcpIjoibWFwIj09PXRoaXMuX3BpdGNoQWxpZ25tZW50JiYobj0icm90YXRlWCgiK3RoaXMuX21hcC5nZXRQaXRjaCgpKyJkZWcpIiksdCYmIm1vdmVlbmQiIT09dC50eXBlfHwodGhpcy5fcG9zPXRoaXMuX3Bvcy5yb3VuZCgpKSxyLnNldFRyYW5zZm9ybSh0aGlzLl9lbGVtZW50LHppW3RoaXMuX2FuY2hvcl0rIiB0cmFuc2xhdGUoIit0aGlzLl9wb3MueCsicHgsICIrdGhpcy5fcG9zLnkrInB4KSAiK24rIiAiK2UpfX0sbi5wcm90b3R5cGUuZ2V0T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29mZnNldH0sbi5wcm90b3R5cGUuc2V0T2Zmc2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9vZmZzZXQ9dC5Qb2ludC5jb252ZXJ0KGUpLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLl9vbk1vdmU9ZnVuY3Rpb24oZSl7dGhpcy5fcG9zPWUucG9pbnQuc3ViKHRoaXMuX3Bvc2l0aW9uRGVsdGEpLHRoaXMuX2xuZ0xhdD10aGlzLl9tYXAudW5wcm9qZWN0KHRoaXMuX3BvcyksdGhpcy5zZXRMbmdMYXQodGhpcy5fbG5nTGF0KSx0aGlzLl9lbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLCJwZW5kaW5nIj09PXRoaXMuX3N0YXRlJiYodGhpcy5fc3RhdGU9ImFjdGl2ZSIsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkcmFnc3RhcnQiKSkpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZHJhZyIpKX0sbi5wcm90b3R5cGUuX29uVXA9ZnVuY3Rpb24oKXt0aGlzLl9lbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHM9ImF1dG8iLHRoaXMuX3Bvc2l0aW9uRGVsdGE9bnVsbCx0aGlzLl9tYXAub2ZmKCJtb3VzZW1vdmUiLHRoaXMuX29uTW92ZSksdGhpcy5fbWFwLm9mZigidG91Y2htb3ZlIix0aGlzLl9vbk1vdmUpLCJhY3RpdmUiPT09dGhpcy5fc3RhdGUmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiZHJhZ2VuZCIpKSx0aGlzLl9zdGF0ZT0iaW5hY3RpdmUifSxuLnByb3RvdHlwZS5fYWRkRHJhZ0hhbmRsZXI9ZnVuY3Rpb24odCl7dGhpcy5fZWxlbWVudC5jb250YWlucyh0Lm9yaWdpbmFsRXZlbnQudGFyZ2V0KSYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9wb3NpdGlvbkRlbHRhPXQucG9pbnQuc3ViKHRoaXMuX3BvcykuYWRkKHRoaXMuX29mZnNldCksdGhpcy5fc3RhdGU9InBlbmRpbmciLHRoaXMuX21hcC5vbigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUpLHRoaXMuX21hcC5vbigidG91Y2htb3ZlIix0aGlzLl9vbk1vdmUpLHRoaXMuX21hcC5vbmNlKCJtb3VzZXVwIix0aGlzLl9vblVwKSx0aGlzLl9tYXAub25jZSgidG91Y2hlbmQiLHRoaXMuX29uVXApKX0sbi5wcm90b3R5cGUuc2V0RHJhZ2dhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnZ2FibGU9ISF0LHRoaXMuX21hcCYmKHQ/KHRoaXMuX21hcC5vbigibW91c2Vkb3duIix0aGlzLl9hZGREcmFnSGFuZGxlciksdGhpcy5fbWFwLm9uKCJ0b3VjaHN0YXJ0Iix0aGlzLl9hZGREcmFnSGFuZGxlcikpOih0aGlzLl9tYXAub2ZmKCJtb3VzZWRvd24iLHRoaXMuX2FkZERyYWdIYW5kbGVyKSx0aGlzLl9tYXAub2ZmKCJ0b3VjaHN0YXJ0Iix0aGlzLl9hZGREcmFnSGFuZGxlcikpKSx0aGlzfSxuLnByb3RvdHlwZS5pc0RyYWdnYWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnZ2FibGV9LG4ucHJvdG90eXBlLnNldFJvdGF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yb3RhdGlvbj10fHwwLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLmdldFJvdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdGF0aW9ufSxuLnByb3RvdHlwZS5zZXRSb3RhdGlvbkFsaWdubWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcm90YXRpb25BbGlnbm1lbnQ9dHx8ImF1dG8iLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLmdldFJvdGF0aW9uQWxpZ25tZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdGF0aW9uQWxpZ25tZW50fSxuLnByb3RvdHlwZS5zZXRQaXRjaEFsaWdubWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGl0Y2hBbGlnbm1lbnQ9dCYmImF1dG8iIT09dD90OnRoaXMuX3JvdGF0aW9uQWxpZ25tZW50LHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLmdldFBpdGNoQWxpZ25tZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BpdGNoQWxpZ25tZW50fSxufSh0LkV2ZW50ZWQpLEJpPXtwb3NpdGlvbk9wdGlvbnM6e2VuYWJsZUhpZ2hBY2N1cmFjeTohMSxtYXhpbXVtQWdlOjAsdGltZW91dDo2ZTN9LGZpdEJvdW5kc09wdGlvbnM6e21heFpvb206MTV9LHRyYWNrVXNlckxvY2F0aW9uOiExLHNob3dBY2N1cmFjeUNpcmNsZTohMCxzaG93VXNlckxvY2F0aW9uOiEwfTt2YXIgTmk9MCxqaT0hMSxVaT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKHIpe2UuY2FsbCh0aGlzKSx0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30sQmksciksdC5iaW5kQWxsKFsiX29uU3VjY2VzcyIsIl9vbkVycm9yIiwiX29uWm9vbSIsIl9maW5pc2giLCJfc2V0dXBVSSIsIl91cGRhdGVDYW1lcmEiLCJfdXBkYXRlTWFya2VyIl0sdGhpcyl9cmV0dXJuIGUmJihuLl9fcHJvdG9fXz1lKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLG4ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiB0aGlzLl9tYXA9ZSx0aGlzLl9jb250YWluZXI9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1ncm91cCIpLG49dGhpcy5fc2V0dXBVSSx2b2lkIDAhPT1SaT9uKFJpKTp2b2lkIDAhPT10LndpbmRvdy5uYXZpZ2F0b3IucGVybWlzc2lvbnM/dC53aW5kb3cubmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHtuYW1lOiJnZW9sb2NhdGlvbiJ9KS50aGVuKChmdW5jdGlvbih0KXtSaT0iZGVuaWVkIiE9PXQuc3RhdGUsbihSaSl9KSk6KFJpPSEhdC53aW5kb3cubmF2aWdhdG9yLmdlb2xvY2F0aW9uLG4oUmkpKSx0aGlzLl9jb250YWluZXJ9LG4ucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEJiYodC53aW5kb3cubmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2godGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEKSx0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQ9dm9pZCAwKSx0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyJiZ0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIucmVtb3ZlKCksdGhpcy5vcHRpb25zLnNob3dBY2N1cmFjeUNpcmNsZSYmdGhpcy5fYWNjdXJhY3lDaXJjbGVNYXJrZXImJnRoaXMuX2FjY3VyYWN5Q2lyY2xlTWFya2VyLnJlbW92ZSgpLHIucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwLm9mZigiem9vbSIsdGhpcy5fb25ab29tKSx0aGlzLl9tYXA9dm9pZCAwLE5pPTAsamk9ITF9LG4ucHJvdG90eXBlLl9pc091dE9mTWFwTWF4Qm91bmRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcC5nZXRNYXhCb3VuZHMoKSxyPXQuY29vcmRzO3JldHVybiBlJiYoci5sb25naXR1ZGU8ZS5nZXRXZXN0KCl8fHIubG9uZ2l0dWRlPmUuZ2V0RWFzdCgpfHxyLmxhdGl0dWRlPGUuZ2V0U291dGgoKXx8ci5sYXRpdHVkZT5lLmdldE5vcnRoKCkpfSxuLnByb3RvdHlwZS5fc2V0RXJyb3JTdGF0ZT1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLl93YXRjaFN0YXRlKXtjYXNlIldBSVRJTkdfQUNUSVZFIjp0aGlzLl93YXRjaFN0YXRlPSJBQ1RJVkVfRVJST1IiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIik7YnJlYWs7Y2FzZSJBQ1RJVkVfTE9DSyI6dGhpcy5fd2F0Y2hTdGF0ZT0iQUNUSVZFX0VSUk9SIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIik7YnJlYWs7Y2FzZSJCQUNLR1JPVU5EIjp0aGlzLl93YXRjaFN0YXRlPSJCQUNLR1JPVU5EX0VSUk9SIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKX19LG4ucHJvdG90eXBlLl9vblN1Y2Nlc3M9ZnVuY3Rpb24oZSl7aWYodGhpcy5fbWFwKXtpZih0aGlzLl9pc091dE9mTWFwTWF4Qm91bmRzKGUpKXJldHVybiB0aGlzLl9zZXRFcnJvclN0YXRlKCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJvdXRvZm1heGJvdW5kcyIsZSkpLHRoaXMuX3VwZGF0ZU1hcmtlcigpLHZvaWQgdGhpcy5fZmluaXNoKCk7aWYodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKXN3aXRjaCh0aGlzLl9sYXN0S25vd25Qb3NpdGlvbj1lLHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2UiV0FJVElOR19BQ1RJVkUiOmNhc2UiQUNUSVZFX0xPQ0siOmNhc2UiQUNUSVZFX0VSUk9SIjp0aGlzLl93YXRjaFN0YXRlPSJBQ1RJVkVfTE9DSyIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZSIpO2JyZWFrO2Nhc2UiQkFDS0dST1VORCI6Y2FzZSJCQUNLR1JPVU5EX0VSUk9SIjp0aGlzLl93YXRjaFN0YXRlPSJCQUNLR1JPVU5EIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKX10aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmIk9GRiIhPT10aGlzLl93YXRjaFN0YXRlJiZ0aGlzLl91cGRhdGVNYXJrZXIoZSksdGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uJiYiQUNUSVZFX0xPQ0siIT09dGhpcy5fd2F0Y2hTdGF0ZXx8dGhpcy5fdXBkYXRlQ2FtZXJhKGUpLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLl9kb3RFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLXVzZXItbG9jYXRpb24tZG90LXN0YWxlIiksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJnZW9sb2NhdGUiLGUpKSx0aGlzLl9maW5pc2goKX19LG4ucHJvdG90eXBlLl91cGRhdGVDYW1lcmE9ZnVuY3Rpb24oZSl7dmFyIHI9bmV3IHQuTG5nTGF0KGUuY29vcmRzLmxvbmdpdHVkZSxlLmNvb3Jkcy5sYXRpdHVkZSksbj1lLmNvb3Jkcy5hY2N1cmFjeSxpPXRoaXMuX21hcC5nZXRCZWFyaW5nKCksYT10LmV4dGVuZCh7YmVhcmluZzppfSx0aGlzLm9wdGlvbnMuZml0Qm91bmRzT3B0aW9ucyk7dGhpcy5fbWFwLmZpdEJvdW5kcyhyLnRvQm91bmRzKG4pLGEse2dlb2xvY2F0ZVNvdXJjZTohMH0pfSxuLnByb3RvdHlwZS5fdXBkYXRlTWFya2VyPWZ1bmN0aW9uKGUpe2lmKGUpe3ZhciByPW5ldyB0LkxuZ0xhdChlLmNvb3Jkcy5sb25naXR1ZGUsZS5jb29yZHMubGF0aXR1ZGUpO3RoaXMuX2FjY3VyYWN5Q2lyY2xlTWFya2VyLnNldExuZ0xhdChyKS5hZGRUbyh0aGlzLl9tYXApLHRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5zZXRMbmdMYXQocikuYWRkVG8odGhpcy5fbWFwKSx0aGlzLl9hY2N1cmFjeT1lLmNvb3Jkcy5hY2N1cmFjeSx0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmdGhpcy5vcHRpb25zLnNob3dBY2N1cmFjeUNpcmNsZSYmdGhpcy5fdXBkYXRlQ2lyY2xlUmFkaXVzKCl9ZWxzZSB0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIucmVtb3ZlKCksdGhpcy5fYWNjdXJhY3lDaXJjbGVNYXJrZXIucmVtb3ZlKCl9LG4ucHJvdG90eXBlLl91cGRhdGVDaXJjbGVSYWRpdXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQvMixlPXRoaXMuX21hcC51bnByb2plY3QoWzAsdF0pLHI9dGhpcy5fbWFwLnVucHJvamVjdChbMSx0XSksbj1lLmRpc3RhbmNlVG8ociksaT1NYXRoLmNlaWwoMip0aGlzLl9hY2N1cmFjeS9uKTt0aGlzLl9jaXJjbGVFbGVtZW50LnN0eWxlLndpZHRoPWkrInB4Iix0aGlzLl9jaXJjbGVFbGVtZW50LnN0eWxlLmhlaWdodD1pKyJweCJ9LG4ucHJvdG90eXBlLl9vblpvb209ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmdGhpcy5vcHRpb25zLnNob3dBY2N1cmFjeUNpcmNsZSYmdGhpcy5fdXBkYXRlQ2lyY2xlUmFkaXVzKCl9LG4ucHJvdG90eXBlLl9vbkVycm9yPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX21hcCl7aWYodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKWlmKDE9PT1lLmNvZGUpe3RoaXMuX3dhdGNoU3RhdGU9Ik9GRiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uZGlzYWJsZWQ9ITA7dmFyIHI9dGhpcy5fbWFwLl9nZXRVSVN0cmluZygiR2VvbG9jYXRlQ29udHJvbC5Mb2NhdGlvbk5vdEF2YWlsYWJsZSIpO3RoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50aXRsZT1yLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHIpLHZvaWQgMCE9PXRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCYmdGhpcy5fY2xlYXJXYXRjaCgpfWVsc2V7aWYoMz09PWUuY29kZSYmamkpcmV0dXJuO3RoaXMuX3NldEVycm9yU3RhdGUoKX0iT0ZGIiE9PXRoaXMuX3dhdGNoU3RhdGUmJnRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLl9kb3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLXVzZXItbG9jYXRpb24tZG90LXN0YWxlIiksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJlcnJvciIsZSkpLHRoaXMuX2ZpbmlzaCgpfX0sbi5wcm90b3R5cGUuX2ZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX3RpbWVvdXRJZCYmY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJZCksdGhpcy5fdGltZW91dElkPXZvaWQgMH0sbi5wcm90b3R5cGUuX3NldHVwVUk9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcztpZih0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpfSkpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbj1yLmNyZWF0ZSgiYnV0dG9uIiwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUiLHRoaXMuX2NvbnRhaW5lciksci5jcmVhdGUoInNwYW4iLCJtYXBib3hnbC1jdHJsLWljb24iLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbikuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsITApLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50eXBlPSJidXR0b24iLCExPT09ZSl7dC53YXJuT25jZSgiR2VvbG9jYXRpb24gc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlIHNvIHRoZSBHZW9sb2NhdGVDb250cm9sIHdpbGwgYmUgZGlzYWJsZWQuIik7dmFyIGk9dGhpcy5fbWFwLl9nZXRVSVN0cmluZygiR2VvbG9jYXRlQ29udHJvbC5Mb2NhdGlvbk5vdEF2YWlsYWJsZSIpO3RoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5kaXNhYmxlZD0hMCx0aGlzLl9nZW9sb2NhdGVCdXR0b24udGl0bGU9aSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixpKX1lbHNle3ZhciBhPXRoaXMuX21hcC5fZ2V0VUlTdHJpbmcoIkdlb2xvY2F0ZUNvbnRyb2wuRmluZE15TG9jYXRpb24iKTt0aGlzLl9nZW9sb2NhdGVCdXR0b24udGl0bGU9YSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixhKX10aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24mJih0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpLHRoaXMuX3dhdGNoU3RhdGU9Ik9GRiIpLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiYodGhpcy5fZG90RWxlbWVudD1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3QiKSx0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXI9bmV3IEZpKHRoaXMuX2RvdEVsZW1lbnQpLHRoaXMuX2NpcmNsZUVsZW1lbnQ9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLXVzZXItbG9jYXRpb24tYWNjdXJhY3ktY2lyY2xlIiksdGhpcy5fYWNjdXJhY3lDaXJjbGVNYXJrZXI9bmV3IEZpKHtlbGVtZW50OnRoaXMuX2NpcmNsZUVsZW1lbnQscGl0Y2hBbGlnbm1lbnQ6Im1hcCJ9KSx0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24mJih0aGlzLl93YXRjaFN0YXRlPSJPRkYiKSx0aGlzLl9tYXAub24oInpvb20iLHRoaXMuX29uWm9vbSkpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy50cmlnZ2VyLmJpbmQodGhpcykpLHRoaXMuX3NldHVwPSEwLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmdGhpcy5fbWFwLm9uKCJtb3Zlc3RhcnQiLChmdW5jdGlvbihlKXt2YXIgcj1lLm9yaWdpbmFsRXZlbnQmJiJyZXNpemUiPT09ZS5vcmlnaW5hbEV2ZW50LnR5cGU7ZS5nZW9sb2NhdGVTb3VyY2V8fCJBQ1RJVkVfTE9DSyIhPT1uLl93YXRjaFN0YXRlfHxyfHwobi5fd2F0Y2hTdGF0ZT0iQkFDS0dST1VORCIsbi5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKSxuLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIiksbi5maXJlKG5ldyB0LkV2ZW50KCJ0cmFja3VzZXJsb2NhdGlvbmVuZCIpKSl9KSl9LG4ucHJvdG90eXBlLnRyaWdnZXI9ZnVuY3Rpb24oKXtpZighdGhpcy5fc2V0dXApcmV0dXJuIHQud2Fybk9uY2UoIkdlb2xvY2F0ZSBjb250cm9sIHRyaWdnZXJlZCBiZWZvcmUgYWRkZWQgdG8gYSBtYXAiKSwhMTtpZih0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24pe3N3aXRjaCh0aGlzLl93YXRjaFN0YXRlKXtjYXNlIk9GRiI6dGhpcy5fd2F0Y2hTdGF0ZT0iV0FJVElOR19BQ1RJVkUiLHRoaXMuZmlyZShuZXcgdC5FdmVudCgidHJhY2t1c2VybG9jYXRpb25zdGFydCIpKTticmVhaztjYXNlIldBSVRJTkdfQUNUSVZFIjpjYXNlIkFDVElWRV9MT0NLIjpjYXNlIkFDVElWRV9FUlJPUiI6Y2FzZSJCQUNLR1JPVU5EX0VSUk9SIjpOaS0tLGppPSExLHRoaXMuX3dhdGNoU3RhdGU9Ik9GRiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInRyYWNrdXNlcmxvY2F0aW9uZW5kIikpO2JyZWFrO2Nhc2UiQkFDS0dST1VORCI6dGhpcy5fd2F0Y2hTdGF0ZT0iQUNUSVZFX0xPQ0siLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksdGhpcy5fbGFzdEtub3duUG9zaXRpb24mJnRoaXMuX3VwZGF0ZUNhbWVyYSh0aGlzLl9sYXN0S25vd25Qb3NpdGlvbiksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ0cmFja3VzZXJsb2NhdGlvbnN0YXJ0IikpfXN3aXRjaCh0aGlzLl93YXRjaFN0YXRlKXtjYXNlIldBSVRJTkdfQUNUSVZFIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKTticmVhaztjYXNlIkFDVElWRV9MT0NLIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIik7YnJlYWs7Y2FzZSJBQ1RJVkVfRVJST1IiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvciIpO2JyZWFrO2Nhc2UiQkFDS0dST1VORCI6dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKTticmVhaztjYXNlIkJBQ0tHUk9VTkRfRVJST1IiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKX1pZigiT0ZGIj09PXRoaXMuX3dhdGNoU3RhdGUmJnZvaWQgMCE9PXRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCl0aGlzLl9jbGVhcldhdGNoKCk7ZWxzZSBpZih2b2lkIDA9PT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpe3ZhciBlO3RoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIiwidHJ1ZSIpLCsrTmk+MT8oZT17bWF4aW11bUFnZTo2ZTUsdGltZW91dDowfSxqaT0hMCk6KGU9dGhpcy5vcHRpb25zLnBvc2l0aW9uT3B0aW9ucyxqaT0hMSksdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEPXQud2luZG93Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKHRoaXMuX29uU3VjY2Vzcyx0aGlzLl9vbkVycm9yLGUpfX1lbHNlIHQud2luZG93Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24odGhpcy5fb25TdWNjZXNzLHRoaXMuX29uRXJyb3IsdGhpcy5vcHRpb25zLnBvc2l0aW9uT3B0aW9ucyksdGhpcy5fdGltZW91dElkPXNldFRpbWVvdXQodGhpcy5fZmluaXNoLDFlNCk7cmV0dXJuITB9LG4ucHJvdG90eXBlLl9jbGVhcldhdGNoPWZ1bmN0aW9uKCl7dC53aW5kb3cubmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2godGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEKSx0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQ9dm9pZCAwLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKSx0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmdGhpcy5fdXBkYXRlTWFya2VyKG51bGwpfSxufSh0LkV2ZW50ZWQpLFZpPXttYXhXaWR0aDoxMDAsdW5pdDoibWV0cmljIn0sSGk9ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LFZpLGUpLHQuYmluZEFsbChbIl9vbk1vdmUiLCJzZXRVbml0Il0sdGhpcyl9O2Z1bmN0aW9uIHFpKHQsZSxyKXt2YXIgbj1yJiZyLm1heFdpZHRofHwxMDAsaT10Ll9jb250YWluZXIuY2xpZW50SGVpZ2h0LzIsYT10LnVucHJvamVjdChbMCxpXSksbz10LnVucHJvamVjdChbbixpXSkscz1hLmRpc3RhbmNlVG8obyk7aWYociYmImltcGVyaWFsIj09PXIudW5pdCl7dmFyIGw9My4yODA4KnM7aWYobD41MjgwKUdpKGUsbixsLzUyODAsdC5fZ2V0VUlTdHJpbmcoIlNjYWxlQ29udHJvbC5NaWxlcyIpKTtlbHNlIEdpKGUsbixsLHQuX2dldFVJU3RyaW5nKCJTY2FsZUNvbnRyb2wuRmVldCIpKX1lbHNlIGlmKHImJiJuYXV0aWNhbCI9PT1yLnVuaXQpe0dpKGUsbixzLzE4NTIsdC5fZ2V0VUlTdHJpbmcoIlNjYWxlQ29udHJvbC5OYXV0aWNhbE1pbGVzIikpfWVsc2Ugcz49MWUzP0dpKGUsbixzLzFlMyx0Ll9nZXRVSVN0cmluZygiU2NhbGVDb250cm9sLktpbG9tZXRlcnMiKSk6R2koZSxuLHMsdC5fZ2V0VUlTdHJpbmcoIlNjYWxlQ29udHJvbC5NZXRlcnMiKSl9ZnVuY3Rpb24gR2kodCxlLHIsbil7dmFyIGksYSxvLHM9KGk9cixhPU1hdGgucG93KDEwLCgiIitNYXRoLmZsb29yKGkpKS5sZW5ndGgtMSksbz0obz1pL2EpPj0xMD8xMDpvPj01PzU6bz49Mz8zOm8+PTI/MjpvPj0xPzE6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5wb3coMTAsTWF0aC5jZWlsKC1NYXRoLmxvZyh0KS9NYXRoLkxOMTApKTtyZXR1cm4gTWF0aC5yb3VuZCh0KmUpL2V9KG8pLGEqbyksbD1zL3I7dC5zdHlsZS53aWR0aD1lKmwrInB4Iix0LmlubmVySFRNTD1zKyImbmJzcDsiK259SGkucHJvdG90eXBlLmdldERlZmF1bHRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiJib3R0b20tbGVmdCJ9LEhpLnByb3RvdHlwZS5fb25Nb3ZlPWZ1bmN0aW9uKCl7cWkodGhpcy5fbWFwLHRoaXMuX2NvbnRhaW5lcix0aGlzLm9wdGlvbnMpfSxIaS5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLXNjYWxlIix0LmdldENvbnRhaW5lcigpKSx0aGlzLl9tYXAub24oIm1vdmUiLHRoaXMuX29uTW92ZSksdGhpcy5fb25Nb3ZlKCksdGhpcy5fY29udGFpbmVyfSxIaS5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtyLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcC5vZmYoIm1vdmUiLHRoaXMuX29uTW92ZSksdGhpcy5fbWFwPXZvaWQgMH0sSGkucHJvdG90eXBlLnNldFVuaXQ9ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zLnVuaXQ9dCxxaSh0aGlzLl9tYXAsdGhpcy5fY29udGFpbmVyLHRoaXMub3B0aW9ucyl9O3ZhciBZaT1mdW5jdGlvbihlKXt0aGlzLl9mdWxsc2NyZWVuPSExLGUmJmUuY29udGFpbmVyJiYoZS5jb250YWluZXIgaW5zdGFuY2VvZiB0LndpbmRvdy5IVE1MRWxlbWVudD90aGlzLl9jb250YWluZXI9ZS5jb250YWluZXI6dC53YXJuT25jZSgiRnVsbCBzY3JlZW4gY29udHJvbCAnY29udGFpbmVyJyBtdXN0IGJlIGEgRE9NIGVsZW1lbnQuIikpLHQuYmluZEFsbChbIl9vbkNsaWNrRnVsbHNjcmVlbiIsIl9jaGFuZ2VJY29uIl0sdGhpcyksIm9uZnVsbHNjcmVlbmNoYW5nZSJpbiB0LndpbmRvdy5kb2N1bWVudD90aGlzLl9mdWxsc2NyZWVuY2hhbmdlPSJmdWxsc2NyZWVuY2hhbmdlIjoib25tb3pmdWxsc2NyZWVuY2hhbmdlImluIHQud2luZG93LmRvY3VtZW50P3RoaXMuX2Z1bGxzY3JlZW5jaGFuZ2U9Im1vemZ1bGxzY3JlZW5jaGFuZ2UiOiJvbndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiaW4gdC53aW5kb3cuZG9jdW1lbnQ/dGhpcy5fZnVsbHNjcmVlbmNoYW5nZT0id2Via2l0ZnVsbHNjcmVlbmNoYW5nZSI6Im9ubXNmdWxsc2NyZWVuY2hhbmdlImluIHQud2luZG93LmRvY3VtZW50JiYodGhpcy5fZnVsbHNjcmVlbmNoYW5nZT0iTVNGdWxsc2NyZWVuQ2hhbmdlIil9O1lpLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwPWUsdGhpcy5fY29udGFpbmVyfHwodGhpcy5fY29udGFpbmVyPXRoaXMuX21hcC5nZXRDb250YWluZXIoKSksdGhpcy5fY29udHJvbENvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLWdyb3VwIiksdGhpcy5fY2hlY2tGdWxsc2NyZWVuU3VwcG9ydCgpP3RoaXMuX3NldHVwVUkoKToodGhpcy5fY29udHJvbENvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSJub25lIix0Lndhcm5PbmNlKCJUaGlzIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IGZ1bGxzY3JlZW4gbW9kZS4iKSksdGhpcy5fY29udHJvbENvbnRhaW5lcn0sWWkucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7ci5yZW1vdmUodGhpcy5fY29udHJvbENvbnRhaW5lciksdGhpcy5fbWFwPW51bGwsdC53aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLl9mdWxsc2NyZWVuY2hhbmdlLHRoaXMuX2NoYW5nZUljb24pfSxZaS5wcm90b3R5cGUuX2NoZWNrRnVsbHNjcmVlblN1cHBvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4hISh0LndpbmRvdy5kb2N1bWVudC5mdWxsc2NyZWVuRW5hYmxlZHx8dC53aW5kb3cuZG9jdW1lbnQubW96RnVsbFNjcmVlbkVuYWJsZWR8fHQud2luZG93LmRvY3VtZW50Lm1zRnVsbHNjcmVlbkVuYWJsZWR8fHQud2luZG93LmRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkKX0sWWkucHJvdG90eXBlLl9zZXR1cFVJPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZnVsbHNjcmVlbkJ1dHRvbj1yLmNyZWF0ZSgiYnV0dG9uIiwibWFwYm94Z2wtY3RybC1mdWxsc2NyZWVuIix0aGlzLl9jb250cm9sQ29udGFpbmVyKTtyLmNyZWF0ZSgic3BhbiIsIm1hcGJveGdsLWN0cmwtaWNvbiIsZSkuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsITApLGUudHlwZT0iYnV0dG9uIix0aGlzLl91cGRhdGVUaXRsZSgpLHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX29uQ2xpY2tGdWxsc2NyZWVuKSx0LndpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UsdGhpcy5fY2hhbmdlSWNvbil9LFlpLnByb3RvdHlwZS5fdXBkYXRlVGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRUaXRsZSgpO3RoaXMuX2Z1bGxzY3JlZW5CdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIix0KSx0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLnRpdGxlPXR9LFlpLnByb3RvdHlwZS5fZ2V0VGl0bGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLl9nZXRVSVN0cmluZyh0aGlzLl9pc0Z1bGxzY3JlZW4oKT8iRnVsbHNjcmVlbkNvbnRyb2wuRXhpdCI6IkZ1bGxzY3JlZW5Db250cm9sLkVudGVyIil9LFlpLnByb3RvdHlwZS5faXNGdWxsc2NyZWVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Z1bGxzY3JlZW59LFlpLnByb3RvdHlwZS5fY2hhbmdlSWNvbj1mdW5jdGlvbigpeyh0LndpbmRvdy5kb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudHx8dC53aW5kb3cuZG9jdW1lbnQubW96RnVsbFNjcmVlbkVsZW1lbnR8fHQud2luZG93LmRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHx0LndpbmRvdy5kb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50KT09PXRoaXMuX2NvbnRhaW5lciE9PXRoaXMuX2Z1bGxzY3JlZW4mJih0aGlzLl9mdWxsc2NyZWVuPSF0aGlzLl9mdWxsc2NyZWVuLHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uY2xhc3NMaXN0LnRvZ2dsZSgibWFwYm94Z2wtY3RybC1zaHJpbmsiKSx0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLmNsYXNzTGlzdC50b2dnbGUoIm1hcGJveGdsLWN0cmwtZnVsbHNjcmVlbiIpLHRoaXMuX3VwZGF0ZVRpdGxlKCkpfSxZaS5wcm90b3R5cGUuX29uQ2xpY2tGdWxsc2NyZWVuPWZ1bmN0aW9uKCl7dGhpcy5faXNGdWxsc2NyZWVuKCk/dC53aW5kb3cuZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4/dC53aW5kb3cuZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTp0LndpbmRvdy5kb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuP3Qud2luZG93LmRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4oKTp0LndpbmRvdy5kb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuP3Qud2luZG93LmRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4oKTp0LndpbmRvdy5kb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuJiZ0LndpbmRvdy5kb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk6dGhpcy5fY29udGFpbmVyLnJlcXVlc3RGdWxsc2NyZWVuP3RoaXMuX2NvbnRhaW5lci5yZXF1ZXN0RnVsbHNjcmVlbigpOnRoaXMuX2NvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbj90aGlzLl9jb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTp0aGlzLl9jb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbj90aGlzLl9jb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbigpOnRoaXMuX2NvbnRhaW5lci53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbiYmdGhpcy5fY29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKCl9O3ZhciBXaT17Y2xvc2VCdXR0b246ITAsY2xvc2VPbkNsaWNrOiEwLGNsYXNzTmFtZToiIixtYXhXaWR0aDoiMjQwcHgifSxYaT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKHIpe2UuY2FsbCh0aGlzKSx0aGlzLm9wdGlvbnM9dC5leHRlbmQoT2JqZWN0LmNyZWF0ZShXaSksciksdC5iaW5kQWxsKFsiX3VwZGF0ZSIsIl9vbkNsb3NlIiwicmVtb3ZlIiwiX29uTW91c2VNb3ZlIiwiX29uTW91c2VVcCIsIl9vbkRyYWciXSx0aGlzKX1yZXR1cm4gZSYmKG4uX19wcm90b19fPWUpLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW4sbi5wcm90b3R5cGUuYWRkVG89ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX21hcCYmdGhpcy5yZW1vdmUoKSx0aGlzLl9tYXA9ZSx0aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrJiZ0aGlzLl9tYXAub24oImNsaWNrIix0aGlzLl9vbkNsb3NlKSx0aGlzLm9wdGlvbnMuY2xvc2VPbk1vdmUmJnRoaXMuX21hcC5vbigibW92ZSIsdGhpcy5fb25DbG9zZSksdGhpcy5fbWFwLm9uKCJyZW1vdmUiLHRoaXMucmVtb3ZlKSx0aGlzLl91cGRhdGUoKSx0aGlzLl90cmFja1BvaW50ZXI/KHRoaXMuX21hcC5vbigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSksdGhpcy5fbWFwLm9uKCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXApLHRoaXMuX2NvbnRhaW5lciYmdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLXBvcHVwLXRyYWNrLXBvaW50ZXIiKSx0aGlzLl9tYXAuX2NhbnZhc0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC10cmFjay1wb2ludGVyIikpOnRoaXMuX21hcC5vbigibW92ZSIsdGhpcy5fdXBkYXRlKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm9wZW4iKSksdGhpc30sbi5wcm90b3R5cGUuaXNPcGVuPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9tYXB9LG4ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50JiZyLnJlbW92ZSh0aGlzLl9jb250ZW50KSx0aGlzLl9jb250YWluZXImJihyLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLGRlbGV0ZSB0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcCYmKHRoaXMuX21hcC5vZmYoIm1vdmUiLHRoaXMuX3VwZGF0ZSksdGhpcy5fbWFwLm9mZigibW92ZSIsdGhpcy5fb25DbG9zZSksdGhpcy5fbWFwLm9mZigiY2xpY2siLHRoaXMuX29uQ2xvc2UpLHRoaXMuX21hcC5vZmYoInJlbW92ZSIsdGhpcy5yZW1vdmUpLHRoaXMuX21hcC5vZmYoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUpLHRoaXMuX21hcC5vZmYoIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcCksdGhpcy5fbWFwLm9mZigiZHJhZyIsdGhpcy5fb25EcmFnKSxkZWxldGUgdGhpcy5fbWFwKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImNsb3NlIikpLHRoaXN9LG4ucHJvdG90eXBlLmdldExuZ0xhdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sbmdMYXR9LG4ucHJvdG90eXBlLnNldExuZ0xhdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbG5nTGF0PXQuTG5nTGF0LmNvbnZlcnQoZSksdGhpcy5fcG9zPW51bGwsdGhpcy5fdHJhY2tQb2ludGVyPSExLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX21hcCYmKHRoaXMuX21hcC5vbigibW92ZSIsdGhpcy5fdXBkYXRlKSx0aGlzLl9tYXAub2ZmKCJtb3VzZW1vdmUiLHRoaXMuX29uTW91c2VNb3ZlKSx0aGlzLl9jb250YWluZXImJnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyIiksdGhpcy5fbWFwLl9jYW52YXNDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtdHJhY2stcG9pbnRlciIpKSx0aGlzfSxuLnByb3RvdHlwZS50cmFja1BvaW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhY2tQb2ludGVyPSEwLHRoaXMuX3Bvcz1udWxsLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX21hcCYmKHRoaXMuX21hcC5vZmYoIm1vdmUiLHRoaXMuX3VwZGF0ZSksdGhpcy5fbWFwLm9uKCJtb3VzZW1vdmUiLHRoaXMuX29uTW91c2VNb3ZlKSx0aGlzLl9tYXAub24oImRyYWciLHRoaXMuX29uRHJhZyksdGhpcy5fY29udGFpbmVyJiZ0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtcG9wdXAtdHJhY2stcG9pbnRlciIpLHRoaXMuX21hcC5fY2FudmFzQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLXRyYWNrLXBvaW50ZXIiKSksdGhpc30sbi5wcm90b3R5cGUuZ2V0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LG4ucHJvdG90eXBlLnNldFRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2V0RE9NQ29udGVudCh0LndpbmRvdy5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSl9LG4ucHJvdG90eXBlLnNldEhUTUw9ZnVuY3Rpb24oZSl7dmFyIHIsbj10LndpbmRvdy5kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaT10LndpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7Zm9yKGkuaW5uZXJIVE1MPWU7cj1pLmZpcnN0Q2hpbGQ7KW4uYXBwZW5kQ2hpbGQocik7cmV0dXJuIHRoaXMuc2V0RE9NQ29udGVudChuKX0sbi5wcm90b3R5cGUuZ2V0TWF4V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyJiZ0aGlzLl9jb250YWluZXIuc3R5bGUubWF4V2lkdGh9LG4ucHJvdG90eXBlLnNldE1heFdpZHRoPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMubWF4V2lkdGg9dCx0aGlzLl91cGRhdGUoKSx0aGlzfSxuLnByb3RvdHlwZS5zZXRET01Db250ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jcmVhdGVDb250ZW50KCksdGhpcy5fY29udGVudC5hcHBlbmRDaGlsZCh0KSx0aGlzLl91cGRhdGUoKSx0aGlzfSxuLnByb3RvdHlwZS5hZGRDbGFzc05hbWU9ZnVuY3Rpb24odCl7dGhpcy5fY29udGFpbmVyJiZ0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCh0KX0sbi5wcm90b3R5cGUucmVtb3ZlQ2xhc3NOYW1lPWZ1bmN0aW9uKHQpe3RoaXMuX2NvbnRhaW5lciYmdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUodCl9LG4ucHJvdG90eXBlLnRvZ2dsZUNsYXNzTmFtZT1mdW5jdGlvbih0KXtpZih0aGlzLl9jb250YWluZXIpcmV0dXJuIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKHQpfSxuLnByb3RvdHlwZS5fY3JlYXRlQ29udGVudD1mdW5jdGlvbigpe3RoaXMuX2NvbnRlbnQmJnIucmVtb3ZlKHRoaXMuX2NvbnRlbnQpLHRoaXMuX2NvbnRlbnQ9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLXBvcHVwLWNvbnRlbnQiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5vcHRpb25zLmNsb3NlQnV0dG9uJiYodGhpcy5fY2xvc2VCdXR0b249ci5jcmVhdGUoImJ1dHRvbiIsIm1hcGJveGdsLXBvcHVwLWNsb3NlLWJ1dHRvbiIsdGhpcy5fY29udGVudCksdGhpcy5fY2xvc2VCdXR0b24udHlwZT0iYnV0dG9uIix0aGlzLl9jbG9zZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJDbG9zZSBwb3B1cCIpLHRoaXMuX2Nsb3NlQnV0dG9uLmlubmVySFRNTD0iJiMyMTU7Iix0aGlzLl9jbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fb25DbG9zZSkpfSxuLnByb3RvdHlwZS5fb25Nb3VzZVVwPWZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZSh0LnBvaW50KX0sbi5wcm90b3R5cGUuX29uTW91c2VNb3ZlPWZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZSh0LnBvaW50KX0sbi5wcm90b3R5cGUuX29uRHJhZz1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGUodC5wb2ludCl9LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcyxpPXRoaXMuX2xuZ0xhdHx8dGhpcy5fdHJhY2tQb2ludGVyO2lmKHRoaXMuX21hcCYmaSYmdGhpcy5fY29udGVudCYmKHRoaXMuX2NvbnRhaW5lcnx8KHRoaXMuX2NvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtcG9wdXAiLHRoaXMuX21hcC5nZXRDb250YWluZXIoKSksdGhpcy5fdGlwPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1wb3B1cC10aXAiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRlbnQpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUmJnRoaXMub3B0aW9ucy5jbGFzc05hbWUuc3BsaXQoIiAiKS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gbi5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQodCl9KSksdGhpcy5fdHJhY2tQb2ludGVyJiZ0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtcG9wdXAtdHJhY2stcG9pbnRlciIpKSx0aGlzLm9wdGlvbnMubWF4V2lkdGgmJnRoaXMuX2NvbnRhaW5lci5zdHlsZS5tYXhXaWR0aCE9PXRoaXMub3B0aW9ucy5tYXhXaWR0aCYmKHRoaXMuX2NvbnRhaW5lci5zdHlsZS5tYXhXaWR0aD10aGlzLm9wdGlvbnMubWF4V2lkdGgpLHRoaXMuX21hcC50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXMmJiF0aGlzLl90cmFja1BvaW50ZXImJih0aGlzLl9sbmdMYXQ9T2kodGhpcy5fbG5nTGF0LHRoaXMuX3Bvcyx0aGlzLl9tYXAudHJhbnNmb3JtKSksIXRoaXMuX3RyYWNrUG9pbnRlcnx8ZSkpe3ZhciBhPXRoaXMuX3Bvcz10aGlzLl90cmFja1BvaW50ZXImJmU/ZTp0aGlzLl9tYXAucHJvamVjdCh0aGlzLl9sbmdMYXQpLG89dGhpcy5vcHRpb25zLmFuY2hvcixzPWZ1bmN0aW9uIGUocil7aWYocil7aWYoIm51bWJlciI9PXR5cGVvZiByKXt2YXIgbj1NYXRoLnJvdW5kKE1hdGguc3FydCguNSpNYXRoLnBvdyhyLDIpKSk7cmV0dXJue2NlbnRlcjpuZXcgdC5Qb2ludCgwLDApLHRvcDpuZXcgdC5Qb2ludCgwLHIpLCJ0b3AtbGVmdCI6bmV3IHQuUG9pbnQobixuKSwidG9wLXJpZ2h0IjpuZXcgdC5Qb2ludCgtbixuKSxib3R0b206bmV3IHQuUG9pbnQoMCwtciksImJvdHRvbS1sZWZ0IjpuZXcgdC5Qb2ludChuLC1uKSwiYm90dG9tLXJpZ2h0IjpuZXcgdC5Qb2ludCgtbiwtbiksbGVmdDpuZXcgdC5Qb2ludChyLDApLHJpZ2h0Om5ldyB0LlBvaW50KC1yLDApfX1pZihyIGluc3RhbmNlb2YgdC5Qb2ludHx8QXJyYXkuaXNBcnJheShyKSl7dmFyIGk9dC5Qb2ludC5jb252ZXJ0KHIpO3JldHVybntjZW50ZXI6aSx0b3A6aSwidG9wLWxlZnQiOmksInRvcC1yaWdodCI6aSxib3R0b206aSwiYm90dG9tLWxlZnQiOmksImJvdHRvbS1yaWdodCI6aSxsZWZ0OmkscmlnaHQ6aX19cmV0dXJue2NlbnRlcjp0LlBvaW50LmNvbnZlcnQoci5jZW50ZXJ8fFswLDBdKSx0b3A6dC5Qb2ludC5jb252ZXJ0KHIudG9wfHxbMCwwXSksInRvcC1sZWZ0Ijp0LlBvaW50LmNvbnZlcnQoclsidG9wLWxlZnQiXXx8WzAsMF0pLCJ0b3AtcmlnaHQiOnQuUG9pbnQuY29udmVydChyWyJ0b3AtcmlnaHQiXXx8WzAsMF0pLGJvdHRvbTp0LlBvaW50LmNvbnZlcnQoci5ib3R0b218fFswLDBdKSwiYm90dG9tLWxlZnQiOnQuUG9pbnQuY29udmVydChyWyJib3R0b20tbGVmdCJdfHxbMCwwXSksImJvdHRvbS1yaWdodCI6dC5Qb2ludC5jb252ZXJ0KHJbImJvdHRvbS1yaWdodCJdfHxbMCwwXSksbGVmdDp0LlBvaW50LmNvbnZlcnQoci5sZWZ0fHxbMCwwXSkscmlnaHQ6dC5Qb2ludC5jb252ZXJ0KHIucmlnaHR8fFswLDBdKX19cmV0dXJuIGUobmV3IHQuUG9pbnQoMCwwKSl9KHRoaXMub3B0aW9ucy5vZmZzZXQpO2lmKCFvKXt2YXIgbCxjPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aCx1PXRoaXMuX2NvbnRhaW5lci5vZmZzZXRIZWlnaHQ7bD1hLnkrcy5ib3R0b20ueTx1P1sidG9wIl06YS55PnRoaXMuX21hcC50cmFuc2Zvcm0uaGVpZ2h0LXU/WyJib3R0b20iXTpbXSxhLng8Yy8yP2wucHVzaCgibGVmdCIpOmEueD50aGlzLl9tYXAudHJhbnNmb3JtLndpZHRoLWMvMiYmbC5wdXNoKCJyaWdodCIpLG89MD09PWwubGVuZ3RoPyJib3R0b20iOmwuam9pbigiLSIpfXZhciBmPWEuYWRkKHNbb10pLnJvdW5kKCk7ci5zZXRUcmFuc2Zvcm0odGhpcy5fY29udGFpbmVyLHppW29dKyIgdHJhbnNsYXRlKCIrZi54KyJweCwiK2YueSsicHgpIiksRGkodGhpcy5fY29udGFpbmVyLG8sInBvcHVwIil9fSxuLnByb3RvdHlwZS5fb25DbG9zZT1mdW5jdGlvbigpe3RoaXMucmVtb3ZlKCl9LG59KHQuRXZlbnRlZCk7dmFyIFppPXt2ZXJzaW9uOnQudmVyc2lvbixzdXBwb3J0ZWQ6ZSxzZXRSVExUZXh0UGx1Z2luOnQuc2V0UlRMVGV4dFBsdWdpbixnZXRSVExUZXh0UGx1Z2luU3RhdHVzOnQuZ2V0UlRMVGV4dFBsdWdpblN0YXR1cyxNYXA6RWksTmF2aWdhdGlvbkNvbnRyb2w6UGksR2VvbG9jYXRlQ29udHJvbDpVaSxBdHRyaWJ1dGlvbkNvbnRyb2w6YmksU2NhbGVDb250cm9sOkhpLEZ1bGxzY3JlZW5Db250cm9sOllpLFBvcHVwOlhpLE1hcmtlcjpGaSxTdHlsZTpxZSxMbmdMYXQ6dC5MbmdMYXQsTG5nTGF0Qm91bmRzOnQuTG5nTGF0Qm91bmRzLFBvaW50OnQuUG9pbnQsTWVyY2F0b3JDb29yZGluYXRlOnQuTWVyY2F0b3JDb29yZGluYXRlLEV2ZW50ZWQ6dC5FdmVudGVkLGNvbmZpZzp0LmNvbmZpZyxwcmV3YXJtOmZ1bmN0aW9uKCl7QnQoKS5hY3F1aXJlKHp0KX0sY2xlYXJQcmV3YXJtZWRSZXNvdXJjZXM6ZnVuY3Rpb24oKXt2YXIgdD1SdDt0JiYodC5pc1ByZWxvYWRlZCgpJiYxPT09dC5udW1BY3RpdmUoKT8odC5yZWxlYXNlKHp0KSxSdD1udWxsKTpjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBjbGVhciBXZWJXb3JrZXJzIHNpbmNlIHRoZXJlIGFyZSBhY3RpdmUgTWFwIGluc3RhbmNlcyB0aGF0IHN0aWxsIHJlZmVyZW5jZSBpdC4gVGhlIHByZS13YXJtZWQgV2ViV29ya2VyIHBvb2wgY2FuIG9ubHkgYmUgY2xlYXJlZCB3aGVuIGFsbCBtYXAgaW5zdGFuY2VzIGhhdmUgYmVlbiByZW1vdmVkIHdpdGggbWFwLnJlbW92ZSgpIikpfSxnZXQgYWNjZXNzVG9rZW4oKXtyZXR1cm4gdC5jb25maWcuQUNDRVNTX1RPS0VOfSxzZXQgYWNjZXNzVG9rZW4oZSl7dC5jb25maWcuQUNDRVNTX1RPS0VOPWV9LGdldCBiYXNlQXBpVXJsKCl7cmV0dXJuIHQuY29uZmlnLkFQSV9VUkx9LHNldCBiYXNlQXBpVXJsKGUpe3QuY29uZmlnLkFQSV9VUkw9ZX0sZ2V0IHdvcmtlckNvdW50KCl7cmV0dXJuIER0LndvcmtlckNvdW50fSxzZXQgd29ya2VyQ291bnQodCl7RHQud29ya2VyQ291bnQ9dH0sZ2V0IG1heFBhcmFsbGVsSW1hZ2VSZXF1ZXN0cygpe3JldHVybiB0LmNvbmZpZy5NQVhfUEFSQUxMRUxfSU1BR0VfUkVRVUVTVFN9LHNldCBtYXhQYXJhbGxlbEltYWdlUmVxdWVzdHMoZSl7dC5jb25maWcuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTPWV9LGNsZWFyU3RvcmFnZTpmdW5jdGlvbihlKXt0LmNsZWFyVGlsZUNhY2hlKGUpfSx3b3JrZXJVcmw6IiJ9O3JldHVybiBaaX0pKSxyfSkpfSx7fV0sNDQyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9ub3JtYWxpemUiKSxpPXQoImdsLW1hdDQvY3JlYXRlIiksYT10KCJnbC1tYXQ0L2Nsb25lIiksbz10KCJnbC1tYXQ0L2RldGVybWluYW50Iikscz10KCJnbC1tYXQ0L2ludmVydCIpLGw9dCgiZ2wtbWF0NC90cmFuc3Bvc2UiKSxjPXtsZW5ndGg6dCgiZ2wtdmVjMy9sZW5ndGgiKSxub3JtYWxpemU6dCgiZ2wtdmVjMy9ub3JtYWxpemUiKSxkb3Q6dCgiZ2wtdmVjMy9kb3QiKSxjcm9zczp0KCJnbC12ZWMzL2Nyb3NzIil9LHU9aSgpLGY9aSgpLGg9WzAsMCwwLDBdLHA9W1swLDAsMF0sWzAsMCwwXSxbMCwwLDBdXSxkPVswLDAsMF07ZnVuY3Rpb24gbSh0LGUscixuLGkpe3RbMF09ZVswXSpuK3JbMF0qaSx0WzFdPWVbMV0qbityWzFdKmksdFsyXT1lWzJdKm4rclsyXSppfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGcsdil7aWYoZXx8KGU9WzAsMCwwXSkscnx8KHI9WzAsMCwwXSksaXx8KGk9WzAsMCwwXSksZ3x8KGc9WzAsMCwwLDFdKSx2fHwodj1bMCwwLDAsMV0pLCFuKHUsdCkpcmV0dXJuITE7aWYoYShmLHUpLGZbM109MCxmWzddPTAsZlsxMV09MCxmWzE1XT0xLE1hdGguYWJzKG8oZik8MWUtOCkpcmV0dXJuITE7dmFyIHkseCxiLF8sdyxULGssQT11WzNdLE09dVs3XSxTPXVbMTFdLEU9dVsxMl0sTD11WzEzXSxDPXVbMTRdLFA9dVsxNV07aWYoMCE9PUF8fDAhPT1NfHwwIT09Uyl7aWYoaFswXT1BLGhbMV09TSxoWzJdPVMsaFszXT1QLCFzKGYsZikpcmV0dXJuITE7bChmLGYpLHk9ZyxiPWYsXz0oeD1oKVswXSx3PXhbMV0sVD14WzJdLGs9eFszXSx5WzBdPWJbMF0qXytiWzRdKncrYls4XSpUK2JbMTJdKmsseVsxXT1iWzFdKl8rYls1XSp3K2JbOV0qVCtiWzEzXSprLHlbMl09YlsyXSpfK2JbNl0qdytiWzEwXSpUK2JbMTRdKmsseVszXT1iWzNdKl8rYls3XSp3K2JbMTFdKlQrYlsxNV0qa31lbHNlIGdbMF09Z1sxXT1nWzJdPTAsZ1szXT0xO2lmKGVbMF09RSxlWzFdPUwsZVsyXT1DLGZ1bmN0aW9uKHQsZSl7dFswXVswXT1lWzBdLHRbMF1bMV09ZVsxXSx0WzBdWzJdPWVbMl0sdFsxXVswXT1lWzRdLHRbMV1bMV09ZVs1XSx0WzFdWzJdPWVbNl0sdFsyXVswXT1lWzhdLHRbMl1bMV09ZVs5XSx0WzJdWzJdPWVbMTBdfShwLHUpLHJbMF09Yy5sZW5ndGgocFswXSksYy5ub3JtYWxpemUocFswXSxwWzBdKSxpWzBdPWMuZG90KHBbMF0scFsxXSksbShwWzFdLHBbMV0scFswXSwxLC1pWzBdKSxyWzFdPWMubGVuZ3RoKHBbMV0pLGMubm9ybWFsaXplKHBbMV0scFsxXSksaVswXS89clsxXSxpWzFdPWMuZG90KHBbMF0scFsyXSksbShwWzJdLHBbMl0scFswXSwxLC1pWzFdKSxpWzJdPWMuZG90KHBbMV0scFsyXSksbShwWzJdLHBbMl0scFsxXSwxLC1pWzJdKSxyWzJdPWMubGVuZ3RoKHBbMl0pLGMubm9ybWFsaXplKHBbMl0scFsyXSksaVsxXS89clsyXSxpWzJdLz1yWzJdLGMuY3Jvc3MoZCxwWzFdLHBbMl0pLGMuZG90KHBbMF0sZCk8MClmb3IodmFyIEk9MDtJPDM7SSsrKXJbSV0qPS0xLHBbSV1bMF0qPS0xLHBbSV1bMV0qPS0xLHBbSV1bMl0qPS0xO3JldHVybiB2WzBdPS41Kk1hdGguc3FydChNYXRoLm1heCgxK3BbMF1bMF0tcFsxXVsxXS1wWzJdWzJdLDApKSx2WzFdPS41Kk1hdGguc3FydChNYXRoLm1heCgxLXBbMF1bMF0rcFsxXVsxXS1wWzJdWzJdLDApKSx2WzJdPS41Kk1hdGguc3FydChNYXRoLm1heCgxLXBbMF1bMF0tcFsxXVsxXStwWzJdWzJdLDApKSx2WzNdPS41Kk1hdGguc3FydChNYXRoLm1heCgxK3BbMF1bMF0rcFsxXVsxXStwWzJdWzJdLDApKSxwWzJdWzFdPnBbMV1bMl0mJih2WzBdPS12WzBdKSxwWzBdWzJdPnBbMl1bMF0mJih2WzFdPS12WzFdKSxwWzFdWzBdPnBbMF1bMV0mJih2WzJdPS12WzJdKSwhMH19LHsiLi9ub3JtYWxpemUiOjQ0MywiZ2wtbWF0NC9jbG9uZSI6MjcyLCJnbC1tYXQ0L2NyZWF0ZSI6Mjc0LCJnbC1tYXQ0L2RldGVybWluYW50IjoyNzUsImdsLW1hdDQvaW52ZXJ0IjoyODcsImdsLW1hdDQvdHJhbnNwb3NlIjozMDAsImdsLXZlYzMvY3Jvc3MiOjM1MCwiZ2wtdmVjMy9kb3QiOjM1NSwiZ2wtdmVjMy9sZW5ndGgiOjM2NSwiZ2wtdmVjMy9ub3JtYWxpemUiOjM3Mn1dLDQ0MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMTVdO2lmKDA9PT1yKXJldHVybiExO2Zvcih2YXIgbj0xL3IsaT0wO2k8MTY7aSsrKXRbaV09ZVtpXSpuO3JldHVybiEwfX0se31dLDQ0NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsLXZlYzMvbGVycCIpLGk9dCgibWF0NC1yZWNvbXBvc2UiKSxhPXQoIm1hdDQtZGVjb21wb3NlIiksbz10KCJnbC1tYXQ0L2RldGVybWluYW50Iikscz10KCJxdWF0LXNsZXJwIiksbD1mKCksYz1mKCksdT1mKCk7ZnVuY3Rpb24gZigpe3JldHVybnt0cmFuc2xhdGU6aCgpLHNjYWxlOmgoMSksc2tldzpoKCkscGVyc3BlY3RpdmU6WzAsMCwwLDFdLHF1YXRlcm5pb246WzAsMCwwLDFdfX1mdW5jdGlvbiBoKHQpe3JldHVyblt0fHwwLHR8fDAsdHx8MF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2lmKDA9PT1vKGUpfHwwPT09byhyKSlyZXR1cm4hMTt2YXIgaD1hKGUsbC50cmFuc2xhdGUsbC5zY2FsZSxsLnNrZXcsbC5wZXJzcGVjdGl2ZSxsLnF1YXRlcm5pb24pLHA9YShyLGMudHJhbnNsYXRlLGMuc2NhbGUsYy5za2V3LGMucGVyc3BlY3RpdmUsYy5xdWF0ZXJuaW9uKTtyZXR1cm4hKCFofHwhcCkmJihuKHUudHJhbnNsYXRlLGwudHJhbnNsYXRlLGMudHJhbnNsYXRlLGYpLG4odS5za2V3LGwuc2tldyxjLnNrZXcsZiksbih1LnNjYWxlLGwuc2NhbGUsYy5zY2FsZSxmKSxuKHUucGVyc3BlY3RpdmUsbC5wZXJzcGVjdGl2ZSxjLnBlcnNwZWN0aXZlLGYpLHModS5xdWF0ZXJuaW9uLGwucXVhdGVybmlvbixjLnF1YXRlcm5pb24sZiksaSh0LHUudHJhbnNsYXRlLHUuc2NhbGUsdS5za2V3LHUucGVyc3BlY3RpdmUsdS5xdWF0ZXJuaW9uKSwhMCl9fSx7ImdsLW1hdDQvZGV0ZXJtaW5hbnQiOjI3NSwiZ2wtdmVjMy9sZXJwIjozNjYsIm1hdDQtZGVjb21wb3NlIjo0NDIsIm1hdDQtcmVjb21wb3NlIjo0NDUsInF1YXQtc2xlcnAiOjUwNX1dLDQ0NTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXtpZGVudGl0eTp0KCJnbC1tYXQ0L2lkZW50aXR5IiksdHJhbnNsYXRlOnQoImdsLW1hdDQvdHJhbnNsYXRlIiksbXVsdGlwbHk6dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGNyZWF0ZTp0KCJnbC1tYXQ0L2NyZWF0ZSIpLHNjYWxlOnQoImdsLW1hdDQvc2NhbGUiKSxmcm9tUm90YXRpb25UcmFuc2xhdGlvbjp0KCJnbC1tYXQ0L2Zyb21Sb3RhdGlvblRyYW5zbGF0aW9uIil9LGk9KG4uY3JlYXRlKCksbi5jcmVhdGUoKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXtyZXR1cm4gbi5pZGVudGl0eSh0KSxuLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKHQscyxlKSx0WzNdPW9bMF0sdFs3XT1vWzFdLHRbMTFdPW9bMl0sdFsxNV09b1szXSxuLmlkZW50aXR5KGkpLDAhPT1hWzJdJiYoaVs5XT1hWzJdLG4ubXVsdGlwbHkodCx0LGkpKSwwIT09YVsxXSYmKGlbOV09MCxpWzhdPWFbMV0sbi5tdWx0aXBseSh0LHQsaSkpLDAhPT1hWzBdJiYoaVs4XT0wLGlbNF09YVswXSxuLm11bHRpcGx5KHQsdCxpKSksbi5zY2FsZSh0LHQsciksdH19LHsiZ2wtbWF0NC9jcmVhdGUiOjI3NCwiZ2wtbWF0NC9mcm9tUm90YXRpb25UcmFuc2xhdGlvbiI6Mjc4LCJnbC1tYXQ0L2lkZW50aXR5IjoyODUsImdsLW1hdDQvbXVsdGlwbHkiOjI4OSwiZ2wtbWF0NC9zY2FsZSI6Mjk3LCJnbC1tYXQ0L3RyYW5zbGF0ZSI6Mjk5fV0sNDQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1NYXRoLmxvZzJ8fGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KSpNYXRoLkxPRzJFfX0se31dLDQ0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGk9dCgibWF0NC1pbnRlcnBvbGF0ZSIpLGE9dCgiZ2wtbWF0NC9pbnZlcnQiKSxvPXQoImdsLW1hdDQvcm90YXRlWCIpLHM9dCgiZ2wtbWF0NC9yb3RhdGVZIiksbD10KCJnbC1tYXQ0L3JvdGF0ZVoiKSxjPXQoImdsLW1hdDQvbG9va0F0IiksdT10KCJnbC1tYXQ0L3RyYW5zbGF0ZSIpLGY9KHQoImdsLW1hdDQvc2NhbGUiKSx0KCJnbC12ZWMzL25vcm1hbGl6ZSIpKSxoPVswLDAsMF07ZnVuY3Rpb24gcCh0KXt0aGlzLl9jb21wb25lbnRzPXQuc2xpY2UoKSx0aGlzLl90aW1lPVswXSx0aGlzLnByZXZNYXRyaXg9dC5zbGljZSgpLHRoaXMubmV4dE1hdHJpeD10LnNsaWNlKCksdGhpcy5jb21wdXRlZE1hdHJpeD10LnNsaWNlKCksdGhpcy5jb21wdXRlZEludmVyc2U9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRFeWU9WzAsMCwwXSx0aGlzLmNvbXB1dGVkVXA9WzAsMCwwXSx0aGlzLmNvbXB1dGVkQ2VudGVyPVswLDAsMF0sdGhpcy5jb21wdXRlZFJhZGl1cz1bMF0sdGhpcy5fbGltaXRzPVstMS8wLDEvMF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcCgodD10fHx7fSkubWF0cml4fHxbMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0pfTt2YXIgZD1wLnByb3RvdHlwZTtkLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aW1lLHI9bi5sZShlLHQpLG89dGhpcy5jb21wdXRlZE1hdHJpeDtpZighKHI8MCkpe3ZhciBzPXRoaXMuX2NvbXBvbmVudHM7aWYocj09PWUubGVuZ3RoLTEpZm9yKHZhciBsPTE2KnIsYz0wO2M8MTY7KytjKW9bY109c1tsKytdO2Vsc2V7dmFyIHU9ZVtyKzFdLWVbcl0saD0obD0xNipyLHRoaXMucHJldk1hdHJpeCkscD0hMDtmb3IoYz0wO2M8MTY7KytjKWhbY109c1tsKytdO3ZhciBkPXRoaXMubmV4dE1hdHJpeDtmb3IoYz0wO2M8MTY7KytjKWRbY109c1tsKytdLHA9cCYmaFtjXT09PWRbY107aWYodTwxZS02fHxwKWZvcihjPTA7YzwxNjsrK2Mpb1tjXT1oW2NdO2Vsc2UgaShvLGgsZCwodC1lW3JdKS91KX12YXIgbT10aGlzLmNvbXB1dGVkVXA7bVswXT1vWzFdLG1bMV09b1s1XSxtWzJdPW9bOV0sZihtLG0pO3ZhciBnPXRoaXMuY29tcHV0ZWRJbnZlcnNlO2EoZyxvKTt2YXIgdj10aGlzLmNvbXB1dGVkRXllLHk9Z1sxNV07dlswXT1nWzEyXS95LHZbMV09Z1sxM10veSx2WzJdPWdbMTRdL3k7dmFyIHg9dGhpcy5jb21wdXRlZENlbnRlcixiPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO2ZvcihjPTA7YzwzOysrYyl4W2NdPXZbY10tb1syKzQqY10qYn19LGQuaWRsZT1mdW5jdGlvbih0KXtpZighKHQ8dGhpcy5sYXN0VCgpKSl7Zm9yKHZhciBlPXRoaXMuX2NvbXBvbmVudHMscj1lLmxlbmd0aC0xNixuPTA7bjwxNjsrK24pZS5wdXNoKGVbcisrXSk7dGhpcy5fdGltZS5wdXNoKHQpfX0sZC5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT1uLmd0KHRoaXMuX3RpbWUsdCktMjtlPDB8fCh0aGlzLl90aW1lLnNwbGljZSgwLGUpLHRoaXMuX2NvbXBvbmVudHMuc3BsaWNlKDAsMTYqZSkpfSxkLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpbWVbdGhpcy5fdGltZS5sZW5ndGgtMV19LGQubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLGU9ZXx8dGhpcy5jb21wdXRlZEV5ZSxyPXJ8fGgsbj1ufHx0aGlzLmNvbXB1dGVkVXAsdGhpcy5zZXRNYXRyaXgodCxjKHRoaXMuY29tcHV0ZWRNYXRyaXgsZSxyLG4pKTtmb3IodmFyIGk9MCxhPTA7YTwzOysrYSlpKz1NYXRoLnBvdyhyW2FdLWVbYV0sMik7aT1NYXRoLmxvZyhNYXRoLnNxcnQoaSkpLHRoaXMuY29tcHV0ZWRSYWRpdXNbMF09aX0sZC5yb3RhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZEludmVyc2U7ZSYmcyhpLGksZSksciYmbyhpLGksciksbiYmbChpLGksbiksdGhpcy5zZXRNYXRyaXgodCxhKHRoaXMuY29tcHV0ZWRNYXRyaXgsaSkpfTt2YXIgbT1bMCwwLDBdO2QucGFuPWZ1bmN0aW9uKHQsZSxyLG4pe21bMF09LShlfHwwKSxtWzFdPS0ocnx8MCksbVsyXT0tKG58fDApLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRJbnZlcnNlO3UoaSxpLG0pLHRoaXMuc2V0TWF0cml4KHQsYShpLGkpKX0sZC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7bVswXT1lfHwwLG1bMV09cnx8MCxtWzJdPW58fDAsdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeDt1KGksaSxtKSx0aGlzLnNldE1hdHJpeCh0LGkpfSxkLnNldE1hdHJpeD1mdW5jdGlvbih0LGUpe2lmKCEodDx0aGlzLmxhc3RUKCkpKXt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciByPTA7cjwxNjsrK3IpdGhpcy5fY29tcG9uZW50cy5wdXNoKGVbcl0pfX0sZC5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe3RoaXMuY29tcHV0ZWRSYWRpdXNbMF09ZX0sZC5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2xpbWl0cztyWzBdPXQsclsxXT1lfSxkLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xpbWl0cztyZXR1cm4gdD8odFswXT1lWzBdLHRbMV09ZVsxXSx0KTplfX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTAwLCJnbC1tYXQ0L2ludmVydCI6Mjg3LCJnbC1tYXQ0L2xvb2tBdCI6Mjg4LCJnbC1tYXQ0L3JvdGF0ZVgiOjI5NCwiZ2wtbWF0NC9yb3RhdGVZIjoyOTUsImdsLW1hdDQvcm90YXRlWiI6Mjk2LCJnbC1tYXQ0L3NjYWxlIjoyOTcsImdsLW1hdDQvdHJhbnNsYXRlIjoyOTksImdsLXZlYzMvbm9ybWFsaXplIjozNzIsIm1hdDQtaW50ZXJwb2xhdGUiOjQ0NH1dLDQ0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTwzKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKXJbaV09aTtyZXR1cm4gMj09PWUmJnRbMF1bMF09PT10WzFdWzBdJiZ0WzBdWzFdPT09dFsxXVsxXT9bMF06cn12YXIgYT1uZXcgQXJyYXkoZSk7Zm9yKGk9MDtpPGU7KytpKWFbaV09aTthLnNvcnQoKGZ1bmN0aW9uKGUscil7dmFyIG49dFtlXVswXS10W3JdWzBdO3JldHVybiBufHx0W2VdWzFdLXRbcl1bMV19KSk7dmFyIG89W2FbMF0sYVsxXV0scz1bYVswXSxhWzFdXTtmb3IoaT0yO2k8ZTsrK2kpe2Zvcih2YXIgbD1hW2ldLGM9dFtsXSx1PW8ubGVuZ3RoO3U+MSYmbih0W29bdS0yXV0sdFtvW3UtMV1dLGMpPD0wOyl1LT0xLG8ucG9wKCk7Zm9yKG8ucHVzaChsKSx1PXMubGVuZ3RoO3U+MSYmbih0W3NbdS0yXV0sdFtzW3UtMV1dLGMpPj0wOyl1LT0xLHMucG9wKCk7cy5wdXNoKGwpfXI9bmV3IEFycmF5KHMubGVuZ3RoK28ubGVuZ3RoLTIpO2Zvcih2YXIgZj0wLGg9KGk9MCxvLmxlbmd0aCk7aTxoOysraSlyW2YrK109b1tpXTtmb3IodmFyIHA9cy5sZW5ndGgtMjtwPjA7LS1wKXJbZisrXT1zW3BdO3JldHVybiByfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjUyNH1dLDQ0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT10LHQ9d2luZG93KTt2YXIgcj0wLGk9MCxhPTAsbz17c2hpZnQ6ITEsYWx0OiExLGNvbnRyb2w6ITEsbWV0YTohMX0scz0hMTtmdW5jdGlvbiBsKHQpe3ZhciBlPSExO3JldHVybiJhbHRLZXkiaW4gdCYmKGU9ZXx8dC5hbHRLZXkhPT1vLmFsdCxvLmFsdD0hIXQuYWx0S2V5KSwic2hpZnRLZXkiaW4gdCYmKGU9ZXx8dC5zaGlmdEtleSE9PW8uc2hpZnQsby5zaGlmdD0hIXQuc2hpZnRLZXkpLCJjdHJsS2V5ImluIHQmJihlPWV8fHQuY3RybEtleSE9PW8uY29udHJvbCxvLmNvbnRyb2w9ISF0LmN0cmxLZXkpLCJtZXRhS2V5ImluIHQmJihlPWV8fHQubWV0YUtleSE9PW8ubWV0YSxvLm1ldGE9ISF0Lm1ldGFLZXkpLGV9ZnVuY3Rpb24gYyh0LHMpe3ZhciBjPW4ueChzKSx1PW4ueShzKTsiYnV0dG9ucyJpbiBzJiYodD0wfHMuYnV0dG9ucyksKHQhPT1yfHxjIT09aXx8dSE9PWF8fGwocykpJiYocj0wfHQsaT1jfHwwLGE9dXx8MCxlJiZlKHIsaSxhLG8pKX1mdW5jdGlvbiB1KHQpe2MoMCx0KX1mdW5jdGlvbiBmKCl7KHJ8fGl8fGF8fG8uc2hpZnR8fG8uYWx0fHxvLm1ldGF8fG8uY29udHJvbCkmJihpPWE9MCxyPTAsby5zaGlmdD1vLmFsdD1vLmNvbnRyb2w9by5tZXRhPSExLGUmJmUoMCwwLDAsbykpfWZ1bmN0aW9uIGgodCl7bCh0KSYmZSYmZShyLGksYSxvKX1mdW5jdGlvbiBwKHQpezA9PT1uLmJ1dHRvbnModCk/YygwLHQpOmMocix0KX1mdW5jdGlvbiBkKHQpe2MocnxuLmJ1dHRvbnModCksdCl9ZnVuY3Rpb24gbSh0KXtjKHImfm4uYnV0dG9ucyh0KSx0KX1mdW5jdGlvbiBnKCl7c3x8KHM9ITAsdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHApLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixkKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLG0pLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsdSksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0Iix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsdSksdC5hZGRFdmVudExpc3RlbmVyKCJibHVyIixmKSx0LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixoKSx0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGgpLHQuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLGgpLHQhPT13aW5kb3cmJih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsZiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixoKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsaCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXByZXNzIixoKSkpfWcoKTt2YXIgdj17ZWxlbWVudDp0fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModix7ZW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlKXtlP2coKTpmdW5jdGlvbigpe2lmKCFzKXJldHVybjtzPSExLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixwKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsZCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixtKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsdSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsdSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsZiksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsaCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixoKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXByZXNzIixoKSx0IT09d2luZG93JiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLGYpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsaCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGgpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsaCkpfSgpfSxlbnVtZXJhYmxlOiEwfSxidXR0b25zOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcn0sZW51bWVyYWJsZTohMH0seDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGl9LGVudW1lcmFibGU6ITB9LHk6e2dldDpmdW5jdGlvbigpe3JldHVybiBhfSxlbnVtZXJhYmxlOiEwfSxtb2RzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb30sZW51bWVyYWJsZTohMH19KSx2fTt2YXIgbj10KCJtb3VzZS1ldmVudCIpfSx7Im1vdXNlLWV2ZW50Ijo0NTF9XSw0NTA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj17bGVmdDowLHRvcDowfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2U9ZXx8dC5jdXJyZW50VGFyZ2V0fHx0LnNyY0VsZW1lbnQsQXJyYXkuaXNBcnJheShyKXx8KHI9WzAsMF0pO3ZhciBpPXQuY2xpZW50WHx8MCxhPXQuY2xpZW50WXx8MCxvPShzPWUscz09PXdpbmRvd3x8cz09PWRvY3VtZW50fHxzPT09ZG9jdW1lbnQuYm9keT9uOnMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO3ZhciBzO3JldHVybiByWzBdPWktby5sZWZ0LHJbMV09YS1vLnRvcCxyfX0se31dLDQ1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiB0LnRhcmdldHx8dC5zcmNFbGVtZW50fHx3aW5kb3d9ci5idXR0b25zPWZ1bmN0aW9uKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7aWYoImJ1dHRvbnMiaW4gdClyZXR1cm4gdC5idXR0b25zO2lmKCJ3aGljaCJpbiB0KXtpZigyPT09KGU9dC53aGljaCkpcmV0dXJuIDQ7aWYoMz09PWUpcmV0dXJuIDI7aWYoZT4wKXJldHVybiAxPDxlLTF9ZWxzZSBpZigiYnV0dG9uImluIHQpe3ZhciBlO2lmKDE9PT0oZT10LmJ1dHRvbikpcmV0dXJuIDQ7aWYoMj09PWUpcmV0dXJuIDI7aWYoZT49MClyZXR1cm4gMTw8ZX19cmV0dXJuIDB9LHIuZWxlbWVudD1uLHIueD1mdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQpe2lmKCJvZmZzZXRYImluIHQpcmV0dXJuIHQub2Zmc2V0WDt2YXIgZT1uKHQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiB0LmNsaWVudFgtZS5sZWZ0fXJldHVybiAwfSxyLnk9ZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtpZigib2Zmc2V0WSJpbiB0KXJldHVybiB0Lm9mZnNldFk7dmFyIGU9bih0KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gdC5jbGllbnRZLWUudG9wfXJldHVybiAwfX0se31dLDQ1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0by1weCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ImZ1bmN0aW9uIj09dHlwZW9mIHQmJihyPSEhZSxlPXQsdD13aW5kb3cpO3ZhciBpPW4oImV4Iix0KSxhPWZ1bmN0aW9uKHQpe3ImJnQucHJldmVudERlZmF1bHQoKTt2YXIgbj10LmRlbHRhWHx8MCxhPXQuZGVsdGFZfHwwLG89dC5kZWx0YVp8fDAscz0xO3N3aXRjaCh0LmRlbHRhTW9kZSl7Y2FzZSAxOnM9aTticmVhaztjYXNlIDI6cz13aW5kb3cuaW5uZXJIZWlnaHR9aWYoYSo9cyxvKj1zLChuKj1zKXx8YXx8bylyZXR1cm4gZShuLGEsbyx0KX07cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGEpLGF9fSx7InRvLXB4Ijo1NzR9XSw0NTM6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCxyKXsoZnVuY3Rpb24oKXsKLyohIE5hdGl2ZSBQcm9taXNlIE9ubHkKICAgIHYwLjguMSAoYykgS3lsZSBTaW1wc29uCiAgICBNSVQgTGljZW5zZTogaHR0cDovL2dldGlmeS5taXQtbGljZW5zZS5vcmcKKi8KIWZ1bmN0aW9uKHQscixuKXtyW3RdPXJbdF18fG4oKSx2b2lkIDAhPT1lJiZlLmV4cG9ydHMmJihlLmV4cG9ydHM9clt0XSl9KCJQcm9taXNlIix2b2lkIDAhPT10P3Q6dGhpcywoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQsZSxuLGk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxhPXZvaWQgMCE9PXI/ZnVuY3Rpb24odCl7cmV0dXJuIHIodCl9OnNldFRpbWVvdXQ7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwieCIse30pLHQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExIT09bn0pfX1jYXRjaChlKXt0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yLHR9fWZ1bmN0aW9uIG8odCxyKXtuLmFkZCh0LHIpLGV8fChlPWEobi5kcmFpbikpfWZ1bmN0aW9uIHModCl7dmFyIGUscj10eXBlb2YgdDtyZXR1cm4gbnVsbD09dHx8Im9iamVjdCIhPXImJiJmdW5jdGlvbiIhPXJ8fChlPXQudGhlbiksImZ1bmN0aW9uIj09dHlwZW9mIGUmJmV9ZnVuY3Rpb24gbCgpe2Zvcih2YXIgdD0wO3Q8dGhpcy5jaGFpbi5sZW5ndGg7dCsrKWModGhpcywxPT09dGhpcy5zdGF0ZT90aGlzLmNoYWluW3RdLnN1Y2Nlc3M6dGhpcy5jaGFpblt0XS5mYWlsdXJlLHRoaXMuY2hhaW5bdF0pO3RoaXMuY2hhaW4ubGVuZ3RoPTB9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG4saTt0cnl7ITE9PT1lP3IucmVqZWN0KHQubXNnKToobj0hMD09PWU/dC5tc2c6ZS5jYWxsKHZvaWQgMCx0Lm1zZykpPT09ci5wcm9taXNlP3IucmVqZWN0KFR5cGVFcnJvcigiUHJvbWlzZS1jaGFpbiBjeWNsZSIpKTooaT1zKG4pKT9pLmNhbGwobixyLnJlc29sdmUsci5yZWplY3QpOnIucmVzb2x2ZShuKX1jYXRjaCh0KXtyLnJlamVjdCh0KX19ZnVuY3Rpb24gdSh0KXt2YXIgZSxyPXRoaXM7aWYoIXIudHJpZ2dlcmVkKXtyLnRyaWdnZXJlZD0hMCxyLmRlZiYmKHI9ci5kZWYpO3RyeXsoZT1zKHQpKT9vKChmdW5jdGlvbigpe3ZhciBuPW5ldyBwKHIpO3RyeXtlLmNhbGwodCwoZnVuY3Rpb24oKXt1LmFwcGx5KG4sYXJndW1lbnRzKX0pLChmdW5jdGlvbigpe2YuYXBwbHkobixhcmd1bWVudHMpfSkpfWNhdGNoKHQpe2YuY2FsbChuLHQpfX0pKTooci5tc2c9dCxyLnN0YXRlPTEsci5jaGFpbi5sZW5ndGg+MCYmbyhsLHIpKX1jYXRjaCh0KXtmLmNhbGwobmV3IHAociksdCl9fX1mdW5jdGlvbiBmKHQpe3ZhciBlPXRoaXM7ZS50cmlnZ2VyZWR8fChlLnRyaWdnZXJlZD0hMCxlLmRlZiYmKGU9ZS5kZWYpLGUubXNnPXQsZS5zdGF0ZT0yLGUuY2hhaW4ubGVuZ3RoPjAmJm8obCxlKSl9ZnVuY3Rpb24gaCh0LGUscixuKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKykhZnVuY3Rpb24oaSl7dC5yZXNvbHZlKGVbaV0pLnRoZW4oKGZ1bmN0aW9uKHQpe3IoaSx0KX0pLG4pfShpKX1mdW5jdGlvbiBwKHQpe3RoaXMuZGVmPXQsdGhpcy50cmlnZ2VyZWQ9ITF9ZnVuY3Rpb24gZCh0KXt0aGlzLnByb21pc2U9dCx0aGlzLnN0YXRlPTAsdGhpcy50cmlnZ2VyZWQ9ITEsdGhpcy5jaGFpbj1bXSx0aGlzLm1zZz12b2lkIDB9ZnVuY3Rpb24gbSh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IoIk5vdCBhIGZ1bmN0aW9uIik7aWYoMCE9PXRoaXMuX19OUE9fXyl0aHJvdyBUeXBlRXJyb3IoIk5vdCBhIHByb21pc2UiKTt0aGlzLl9fTlBPX189MTt2YXIgZT1uZXcgZCh0aGlzKTt0aGlzLnRoZW49ZnVuY3Rpb24odCxyKXt2YXIgbj17c3VjY2VzczoiZnVuY3Rpb24iIT10eXBlb2YgdHx8dCxmYWlsdXJlOiJmdW5jdGlvbiI9PXR5cGVvZiByJiZyfTtyZXR1cm4gbi5wcm9taXNlPW5ldyB0aGlzLmNvbnN0cnVjdG9yKChmdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0fHwiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBUeXBlRXJyb3IoIk5vdCBhIGZ1bmN0aW9uIik7bi5yZXNvbHZlPXQsbi5yZWplY3Q9ZX0pKSxlLmNoYWluLnB1c2gobiksMCE9PWUuc3RhdGUmJm8obCxlKSxuLnByb21pc2V9LHRoaXMuY2F0Y2g9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsdCl9O3RyeXt0LmNhbGwodm9pZCAwLChmdW5jdGlvbih0KXt1LmNhbGwoZSx0KX0pLChmdW5jdGlvbih0KXtmLmNhbGwoZSx0KX0pKX1jYXRjaCh0KXtmLmNhbGwoZSx0KX19bj1mdW5jdGlvbigpe3ZhciB0LHIsbjtmdW5jdGlvbiBpKHQsZSl7dGhpcy5mbj10LHRoaXMuc2VsZj1lLHRoaXMubmV4dD12b2lkIDB9cmV0dXJue2FkZDpmdW5jdGlvbihlLGEpe249bmV3IGkoZSxhKSxyP3IubmV4dD1uOnQ9bixyPW4sbj12b2lkIDB9LGRyYWluOmZ1bmN0aW9uKCl7dmFyIG49dDtmb3IodD1yPWU9dm9pZCAwO247KW4uZm4uY2FsbChuLnNlbGYpLG49bi5uZXh0fX19KCk7dmFyIGc9dCh7fSwiY29uc3RydWN0b3IiLG0sITEpO3JldHVybiBtLnByb3RvdHlwZT1nLHQoZywiX19OUE9fXyIsMCwhMSksdChtLCJyZXNvbHZlIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJvYmplY3QiPT10eXBlb2YgdCYmMT09PXQuX19OUE9fXz90Om5ldyB0aGlzKChmdW5jdGlvbihlLHIpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlfHwiZnVuY3Rpb24iIT10eXBlb2Ygcil0aHJvdyBUeXBlRXJyb3IoIk5vdCBhIGZ1bmN0aW9uIik7ZSh0KX0pKX0pKSx0KG0sInJlamVjdCIsKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdGhpcygoZnVuY3Rpb24oZSxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHIpdGhyb3cgVHlwZUVycm9yKCJOb3QgYSBmdW5jdGlvbiIpO3IodCl9KSl9KSksdChtLCJhbGwiLChmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiJbb2JqZWN0IEFycmF5XSIhPWkuY2FsbCh0KT9lLnJlamVjdChUeXBlRXJyb3IoIk5vdCBhbiBhcnJheSIpKTowPT09dC5sZW5ndGg/ZS5yZXNvbHZlKFtdKTpuZXcgZSgoZnVuY3Rpb24ocixuKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygcnx8ImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgVHlwZUVycm9yKCJOb3QgYSBmdW5jdGlvbiIpO3ZhciBpPXQubGVuZ3RoLGE9QXJyYXkoaSksbz0wO2goZSx0LChmdW5jdGlvbih0LGUpe2FbdF09ZSwrK289PT1pJiZyKGEpfSksbil9KSl9KSksdChtLCJyYWNlIiwoZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4iW29iamVjdCBBcnJheV0iIT1pLmNhbGwodCk/ZS5yZWplY3QoVHlwZUVycm9yKCJOb3QgYW4gYXJyYXkiKSk6bmV3IGUoKGZ1bmN0aW9uKHIsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHJ8fCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IFR5cGVFcnJvcigiTm90IGEgZnVuY3Rpb24iKTtoKGUsdCwoZnVuY3Rpb24odCxlKXtyKGUpfSksbil9KSl9KSksbX0pKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSx0KCJ0aW1lcnMiKS5zZXRJbW1lZGlhdGUpfSx7dGltZXJzOjU3MX1dLDQ1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZXh0cmFjdC1jb250b3VyOiAiK3QpfSJvYmplY3QiIT10eXBlb2YgdCYmZSgiTXVzdCBzcGVjaWZ5IGFyZ3VtZW50cyIpO3ZhciByPXQub3JkZXI7QXJyYXkuaXNBcnJheShyKXx8ZSgiTXVzdCBzcGVjaWZ5IG9yZGVyIik7dmFyIGE9dC5hcnJheUFyZ3VtZW50c3x8MTthPDEmJmUoIk11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgYXJyYXkgYXJndW1lbnQiKTt2YXIgbz10LnNjYWxhckFyZ3VtZW50c3x8MDtvPDAmJmUoIlNjYWxhciBhcmcgY291bnQgbXVzdCBiZSA+IDAiKTsiZnVuY3Rpb24iIT10eXBlb2YgdC52ZXJ0ZXgmJmUoIk11c3Qgc3BlY2lmeSB2ZXJ0ZXggY3JlYXRpb24gZnVuY3Rpb24iKTsiZnVuY3Rpb24iIT10eXBlb2YgdC5jZWxsJiZlKCJNdXN0IHNwZWNpZnkgY2VsbCBjcmVhdGlvbiBmdW5jdGlvbiIpOyJmdW5jdGlvbiIhPXR5cGVvZiB0LnBoYXNlJiZlKCJNdXN0IHNwZWNpZnkgcGhhc2UgZnVuY3Rpb24iKTtmb3IodmFyIHM9dC5nZXR0ZXJzfHxbXSxsPW5ldyBBcnJheShhKSxjPTA7YzxhOysrYylzLmluZGV4T2YoYyk+PTA/bFtjXT0hMDpsW2NdPSExO3JldHVybiBmdW5jdGlvbih0LGUscixhLG8scyl7dmFyIGw9W3Msb10uam9pbigiLCIpO3JldHVybigwLGlbbF0pKHQsZSxyLG4ubWFsbG9jVWludDMyLG4uZnJlZVVpbnQzMil9KHQudmVydGV4LHQuY2VsbCx0LnBoYXNlLDAscixsKX07dmFyIGk9eyJmYWxzZSwwLDEiOmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGZ1bmN0aW9uKGEsbyxzLGwpe3ZhciBjLHU9MHxhLnNoYXBlWzBdLGY9MHxhLnNoYXBlWzFdLGg9YS5kYXRhLHA9MHxhLm9mZnNldCxkPTB8YS5zdHJpZGVbMF0sbT0wfGEuc3RyaWRlWzFdLGc9cCx2PTB8LWQseT0wLHg9MHwtbSxiPTAsXz0tZC1tfDAsdz0wLFQ9MHxkLGs9bS1kKnV8MCxBPTAsTT0wLFM9MCxFPTIqdXwwLEw9bihFKSxDPW4oRSksUD0wLEk9MCxPPS0xLHo9LTEsRD0wLFI9MHwtdSxGPTB8dSxCPTAsTj0tdS0xfDAsaj11LTF8MCxVPTAsVj0wLEg9MDtmb3IoQT0wO0E8dTsrK0EpTFtQKytdPXIoaFtnXSxvLHMsbCksZys9VDtpZihnKz1rLGY+MCl7aWYoTT0xLExbUCsrXT1yKGhbZ10sbyxzLGwpLGcrPVQsdT4wKWZvcihBPTEsYz1oW2ddLEk9TFtQXT1yKGMsbyxzLGwpLEQ9TFtQK09dLEI9TFtQK1JdLFU9TFtQK05dLEk9PT1EJiZJPT09QiYmST09PVV8fCh5PWhbZyt2XSxiPWhbZyt4XSx3PWhbZytfXSx0KEEsTSxjLHksYix3LEksRCxCLFUsbyxzLGwpLFY9Q1tQXT1TKyspLFArPTEsZys9VCxBPTI7QTx1OysrQSljPWhbZ10sST1MW1BdPXIoYyxvLHMsbCksRD1MW1ArT10sQj1MW1ArUl0sVT1MW1ArTl0sST09PUQmJkk9PT1CJiZJPT09VXx8KHk9aFtnK3ZdLGI9aFtnK3hdLHc9aFtnK19dLHQoQSxNLGMseSxiLHcsSSxELEIsVSxvLHMsbCksVj1DW1BdPVMrKyxVIT09RCYmZShDW1ArT10sVix3LHksVSxELG8scyxsKSksUCs9MSxnKz1UO2ZvcihnKz1rLFA9MCxIPU8sTz16LHo9SCxIPVIsUj1GLEY9SCxIPU4sTj1qLGo9SCxNPTI7TTxmOysrTSl7aWYoTFtQKytdPXIoaFtnXSxvLHMsbCksZys9VCx1PjApZm9yKEE9MSxjPWhbZ10sST1MW1BdPXIoYyxvLHMsbCksRD1MW1ArT10sQj1MW1ArUl0sVT1MW1ArTl0sST09PUQmJkk9PT1CJiZJPT09VXx8KHk9aFtnK3ZdLGI9aFtnK3hdLHc9aFtnK19dLHQoQSxNLGMseSxiLHcsSSxELEIsVSxvLHMsbCksVj1DW1BdPVMrKyxVIT09QiYmZShDW1ArUl0sVixiLHcsQixVLG8scyxsKSksUCs9MSxnKz1ULEE9MjtBPHU7KytBKWM9aFtnXSxJPUxbUF09cihjLG8scyxsKSxEPUxbUCtPXSxCPUxbUCtSXSxVPUxbUCtOXSxJPT09RCYmST09PUImJkk9PT1VfHwoeT1oW2crdl0sYj1oW2creF0sdz1oW2crX10sdChBLE0sYyx5LGIsdyxJLEQsQixVLG8scyxsKSxWPUNbUF09UysrLFUhPT1CJiZlKENbUCtSXSxWLGIsdyxCLFUsbyxzLGwpLFUhPT1EJiZlKENbUCtPXSxWLHcseSxVLEQsbyxzLGwpKSxQKz0xLGcrPVQ7MSZNJiYoUD0wKSxIPU8sTz16LHo9SCxIPVIsUj1GLEY9SCxIPU4sTj1qLGo9SCxnKz1rfX1pKEMpLGkoTCl9fSwiZmFsc2UsMSwwIjpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBmdW5jdGlvbihhLG8scyxsKXt2YXIgYyx1PTB8YS5zaGFwZVswXSxmPTB8YS5zaGFwZVsxXSxoPWEuZGF0YSxwPTB8YS5vZmZzZXQsZD0wfGEuc3RyaWRlWzBdLG09MHxhLnN0cmlkZVsxXSxnPXAsdj0wfC1kLHk9MCx4PTB8LW0sYj0wLF89LWQtbXwwLHc9MCxUPTB8bSxrPWQtbSpmfDAsQT0wLE09MCxTPTAsRT0yKmZ8MCxMPW4oRSksQz1uKEUpLFA9MCxJPTAsTz0tMSx6PS0xLEQ9MCxSPTB8LWYsRj0wfGYsQj0wLE49LWYtMXwwLGo9Zi0xfDAsVT0wLFY9MCxIPTA7Zm9yKE09MDtNPGY7KytNKUxbUCsrXT1yKGhbZ10sbyxzLGwpLGcrPVQ7aWYoZys9ayx1PjApe2lmKEE9MSxMW1ArK109cihoW2ddLG8scyxsKSxnKz1ULGY+MClmb3IoTT0xLGM9aFtnXSxJPUxbUF09cihjLG8scyxsKSxCPUxbUCtSXSxEPUxbUCtPXSxVPUxbUCtOXSxJPT09QiYmST09PUQmJkk9PT1VfHwoeT1oW2crdl0sYj1oW2creF0sdz1oW2crX10sdChBLE0sYyx5LGIsdyxJLEIsRCxVLG8scyxsKSxWPUNbUF09UysrKSxQKz0xLGcrPVQsTT0yO008ZjsrK00pYz1oW2ddLEk9TFtQXT1yKGMsbyxzLGwpLEI9TFtQK1JdLEQ9TFtQK09dLFU9TFtQK05dLEk9PT1CJiZJPT09RCYmST09PVV8fCh5PWhbZyt2XSxiPWhbZyt4XSx3PWhbZytfXSx0KEEsTSxjLHksYix3LEksQixELFUsbyxzLGwpLFY9Q1tQXT1TKyssVSE9PUQmJmUoQ1tQK09dLFYsYix3LEQsVSxvLHMsbCkpLFArPTEsZys9VDtmb3IoZys9ayxQPTAsSD1SLFI9RixGPUgsSD1PLE89eix6PUgsSD1OLE49aixqPUgsQT0yO0E8dTsrK0Epe2lmKExbUCsrXT1yKGhbZ10sbyxzLGwpLGcrPVQsZj4wKWZvcihNPTEsYz1oW2ddLEk9TFtQXT1yKGMsbyxzLGwpLEI9TFtQK1JdLEQ9TFtQK09dLFU9TFtQK05dLEk9PT1CJiZJPT09RCYmST09PVV8fCh5PWhbZyt2XSxiPWhbZyt4XSx3PWhbZytfXSx0KEEsTSxjLHksYix3LEksQixELFUsbyxzLGwpLFY9Q1tQXT1TKyssVSE9PUImJmUoQ1tQK1JdLFYsdyx5LFUsQixvLHMsbCkpLFArPTEsZys9VCxNPTI7TTxmOysrTSljPWhbZ10sST1MW1BdPXIoYyxvLHMsbCksQj1MW1ArUl0sRD1MW1ArT10sVT1MW1ArTl0sST09PUImJkk9PT1EJiZJPT09VXx8KHk9aFtnK3ZdLGI9aFtnK3hdLHc9aFtnK19dLHQoQSxNLGMseSxiLHcsSSxCLEQsVSxvLHMsbCksVj1DW1BdPVMrKyxVIT09RCYmZShDW1ArT10sVixiLHcsRCxVLG8scyxsKSxVIT09QiYmZShDW1ArUl0sVix3LHksVSxCLG8scyxsKSksUCs9MSxnKz1UOzEmQSYmKFA9MCksSD1SLFI9RixGPUgsSD1PLE89eix6PUgsSD1OLE49aixqPUgsZys9a319aShDKSxpKEwpfX19fSx7InR5cGVkYXJyYXktcG9vbCI6NTkwfV0sNDU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImR1cCIpLGk9e3plcm86ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFswXTtufD0wO3ZhciBhPTAsbz1yWzBdO2ZvcihhPTA7YTxpOysrYSllW25dPTAsbis9b30sZmRUZW1wbGF0ZTE6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9dFswXSxsPXJbMF0sYz0tMSpsLHU9bDtufD0wLG98PTA7dmFyIGY9MCxoPWwscD1hWzBdO2ZvcihmPTA7ZjxzOysrZilpW29dPS41KihlW24rY10tZVtuK3VdKSxuKz1oLG8rPXB9LGZkVGVtcGxhdGUyOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMpe3ZhciB1PXRbMF0sZj10WzFdLGg9clswXSxwPXJbMV0sZD1hWzBdLG09YVsxXSxnPWxbMF0sdj1sWzFdLHk9LTEqaCx4PWgsYj0tMSpwLF89cDtufD0wLG98PTAsY3w9MDt2YXIgdz0wLFQ9MCxrPXAsQT1oLWYqcCxNPW0sUz1kLWYqbSxFPXYsTD1nLWYqdjtmb3IoVD0wO1Q8dTsrK1Qpe2Zvcih3PTA7dzxmOysrdylpW29dPS41KihlW24reV0tZVtuK3hdKSxzW2NdPS41KihlW24rYl0tZVtuK19dKSxuKz1rLG8rPU0sYys9RTtuKz1BLG8rPVMsYys9TH19fSxhPXtjZGlmZjpmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocixuLGkpe3ZhciBhPXIuZHR5cGUsbz1yLm9yZGVyLHM9bi5kdHlwZSxsPW4ub3JkZXIsYz1pLmR0eXBlLHU9aS5vcmRlcixmPVthLG8uam9pbigpLHMsbC5qb2luKCksYyx1LmpvaW4oKV0uam9pbigpLGg9ZVtmXTtyZXR1cm4gaHx8KGVbZl09aD10KFthLG8scyxsLGMsdV0pKSxoKHIuc2hhcGUuc2xpY2UoMCksci5kYXRhLHIuc3RyaWRlLDB8ci5vZmZzZXQsbi5kYXRhLG4uc3RyaWRlLDB8bi5vZmZzZXQsaS5kYXRhLGkuc3RyaWRlLDB8aS5vZmZzZXQpfX0semVybzpmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49ci5kdHlwZSxpPXIub3JkZXIsYT1bbixpLmpvaW4oKV0uam9pbigpLG89ZVthXTtyZXR1cm4gb3x8KGVbYV09bz10KFtuLGldKSksbyhyLnNoYXBlLnNsaWNlKDApLHIuZGF0YSxyLnN0cmlkZSwwfHIub2Zmc2V0KX19LGZkVGVtcGxhdGUxOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPXIuZHR5cGUsYT1yLm9yZGVyLG89bi5kdHlwZSxzPW4ub3JkZXIsbD1baSxhLmpvaW4oKSxvLHMuam9pbigpXS5qb2luKCksYz1lW2xdO3JldHVybiBjfHwoZVtsXT1jPXQoW2ksYSxvLHNdKSksYyhyLnNoYXBlLnNsaWNlKDApLHIuZGF0YSxyLnN0cmlkZSwwfHIub2Zmc2V0LG4uZGF0YSxuLnN0cmlkZSwwfG4ub2Zmc2V0KX19LGZkVGVtcGxhdGUyOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4saSl7dmFyIGE9ci5kdHlwZSxvPXIub3JkZXIscz1uLmR0eXBlLGw9bi5vcmRlcixjPWkuZHR5cGUsdT1pLm9yZGVyLGY9W2Esby5qb2luKCkscyxsLmpvaW4oKSxjLHUuam9pbigpXS5qb2luKCksaD1lW2ZdO3JldHVybiBofHwoZVtmXT1oPXQoW2EsbyxzLGwsYyx1XSkpLGgoci5zaGFwZS5zbGljZSgwKSxyLmRhdGEsci5zdHJpZGUsMHxyLm9mZnNldCxuLmRhdGEsbi5zdHJpZGUsMHxuLm9mZnNldCxpLmRhdGEsaS5zdHJpZGUsMHxpLm9mZnNldCl9fX07ZnVuY3Rpb24gbyh0KXtyZXR1cm4oMCxhW3QuZnVuY05hbWVdKShzLmJpbmQodm9pZCAwLHQpKX1mdW5jdGlvbiBzKHQpe3JldHVybiBpW3QuZnVuY05hbWVdfWZ1bmN0aW9uIGwodCl7cmV0dXJuIG8oe2Z1bmNOYW1lOnQuZnVuY05hbWV9KX12YXIgYz17fSx1PXt9LGY9bCh7ZnVuY05hbWU6ImNkaWZmIn0pLGg9bCh7ZnVuY05hbWU6Inplcm8ifSk7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdCBpbiBjP2NbdF06Y1t0XT1sKHtmdW5jTmFtZToiZmRUZW1wbGF0ZSIrdH0pfWZ1bmN0aW9uIGQodCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKHQsaSl7dmFyIGE9aS5zaGFwZS5zbGljZSgpO3JldHVybiBhWzBdPjImJmFbMV0+MiYmbihpLnBpY2soLTEsLTEpLmxvKDEsMSkuaGkoYVswXS0yLGFbMV0tMiksdC5waWNrKC0xLC0xLDApLmxvKDEsMSkuaGkoYVswXS0yLGFbMV0tMiksdC5waWNrKC0xLC0xLDEpLmxvKDEsMSkuaGkoYVswXS0yLGFbMV0tMikpLGFbMV0+MiYmKHIoaS5waWNrKDAsLTEpLmxvKDEpLmhpKGFbMV0tMiksdC5waWNrKDAsLTEsMSkubG8oMSkuaGkoYVsxXS0yKSksZSh0LnBpY2soMCwtMSwwKS5sbygxKS5oaShhWzFdLTIpKSksYVsxXT4yJiYocihpLnBpY2soYVswXS0xLC0xKS5sbygxKS5oaShhWzFdLTIpLHQucGljayhhWzBdLTEsLTEsMSkubG8oMSkuaGkoYVsxXS0yKSksZSh0LnBpY2soYVswXS0xLC0xLDApLmxvKDEpLmhpKGFbMV0tMikpKSxhWzBdPjImJihyKGkucGljaygtMSwwKS5sbygxKS5oaShhWzBdLTIpLHQucGljaygtMSwwLDApLmxvKDEpLmhpKGFbMF0tMikpLGUodC5waWNrKC0xLDAsMSkubG8oMSkuaGkoYVswXS0yKSkpLGFbMF0+MiYmKHIoaS5waWNrKC0xLGFbMV0tMSkubG8oMSkuaGkoYVswXS0yKSx0LnBpY2soLTEsYVsxXS0xLDApLmxvKDEpLmhpKGFbMF0tMikpLGUodC5waWNrKC0xLGFbMV0tMSwxKS5sbygxKS5oaShhWzBdLTIpKSksdC5zZXQoMCwwLDAsMCksdC5zZXQoMCwwLDEsMCksdC5zZXQoYVswXS0xLDAsMCwwKSx0LnNldChhWzBdLTEsMCwxLDApLHQuc2V0KDAsYVsxXS0xLDAsMCksdC5zZXQoMCxhWzFdLTEsMSwwKSx0LnNldChhWzBdLTEsYVsxXS0xLDAsMCksdC5zZXQoYVswXS0xLGFbMV0tMSwxLDApLHR9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIEFycmF5LmlzQXJyYXkocil8fChyPW4oZS5kaW1lbnNpb24sInN0cmluZyI9PXR5cGVvZiByP3I6ImNsYW1wIikpLDA9PT1lLnNpemU/dDowPT09ZS5kaW1lbnNpb24/KHQuc2V0KDApLHQpOmZ1bmN0aW9uKHQpe3ZhciBlPXQuam9pbigpO2lmKGE9dVtlXSlyZXR1cm4gYTtmb3IodmFyIHI9dC5sZW5ndGgsbj1bZixoXSxpPTE7aTw9cjsrK2kpbi5wdXNoKHAoaSkpO3ZhciBhPWQuYXBwbHkodm9pZCAwLG4pO3JldHVybiB1W2VdPWEsYX0ocikodCxlKX19LHtkdXA6MTc3fV0sNDU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1NYXRoLmZsb29yKGUpLG49ZS1yLGk9MDw9ciYmcjx0LnNoYXBlWzBdLGE9MDw9cisxJiZyKzE8dC5zaGFwZVswXTtyZXR1cm4oMS1uKSooaT8rdC5nZXQocik6MCkrbiooYT8rdC5nZXQocisxKTowKX1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgbj1NYXRoLmZsb29yKGUpLGk9ZS1uLGE9MDw9biYmbjx0LnNoYXBlWzBdLG89MDw9bisxJiZuKzE8dC5zaGFwZVswXSxzPU1hdGguZmxvb3IociksbD1yLXMsYz0wPD1zJiZzPHQuc2hhcGVbMV0sdT0wPD1zKzEmJnMrMTx0LnNoYXBlWzFdLGY9YSYmYz90LmdldChuLHMpOjAsaD1hJiZ1P3QuZ2V0KG4scysxKTowO3JldHVybigxLWwpKigoMS1pKSpmK2kqKG8mJmM/dC5nZXQobisxLHMpOjApKStsKigoMS1pKSpoK2kqKG8mJnU/dC5nZXQobisxLHMrMSk6MCkpfWZ1bmN0aW9uIGEodCxlLHIsbil7dmFyIGk9TWF0aC5mbG9vcihlKSxhPWUtaSxvPTA8PWkmJmk8dC5zaGFwZVswXSxzPTA8PWkrMSYmaSsxPHQuc2hhcGVbMF0sbD1NYXRoLmZsb29yKHIpLGM9ci1sLHU9MDw9bCYmbDx0LnNoYXBlWzFdLGY9MDw9bCsxJiZsKzE8dC5zaGFwZVsxXSxoPU1hdGguZmxvb3IobikscD1uLWgsZD0wPD1oJiZoPHQuc2hhcGVbMl0sbT0wPD1oKzEmJmgrMTx0LnNoYXBlWzJdLGc9byYmdSYmZD90LmdldChpLGwsaCk6MCx2PW8mJmYmJmQ/dC5nZXQoaSxsKzEsaCk6MCx5PXMmJnUmJmQ/dC5nZXQoaSsxLGwsaCk6MCx4PXMmJmYmJmQ/dC5nZXQoaSsxLGwrMSxoKTowLGI9byYmdSYmbT90LmdldChpLGwsaCsxKTowLF89byYmZiYmbT90LmdldChpLGwrMSxoKzEpOjA7cmV0dXJuKDEtcCkqKCgxLWMpKigoMS1hKSpnK2EqeSkrYyooKDEtYSkqdithKngpKStwKigoMS1jKSooKDEtYSkqYithKihzJiZ1JiZtP3QuZ2V0KGkrMSxsLGgrMSk6MCkpK2MqKCgxLWEpKl8rYSoocyYmZiYmbT90LmdldChpKzEsbCsxLGgrMSk6MCkpKX1mdW5jdGlvbiBvKHQpe3ZhciBlLHIsbj0wfHQuc2hhcGUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pO2ZvcihlPTA7ZTxuOysrZSlyPSthcmd1bWVudHNbZSsxXSxpW2VdPU1hdGguZmxvb3IociksYVtlXT1yLWlbZV0sb1tlXT0wPD1pW2VdJiZpW2VdPHQuc2hhcGVbZV0sc1tlXT0wPD1pW2VdKzEmJmlbZV0rMTx0LnNoYXBlW2VdO3ZhciBsLGMsdSxmPTA7dDpmb3IoZT0wO2U8MTw8bjsrK2Upe2ZvcihjPTEsdT10Lm9mZnNldCxsPTA7bDxuOysrbClpZihlJjE8PGwpe2lmKCFzW2xdKWNvbnRpbnVlIHQ7Yyo9YVtsXSx1Kz10LnN0cmlkZVtsXSooaVtsXSsxKX1lbHNle2lmKCFvW2xdKWNvbnRpbnVlIHQ7Yyo9MS1hW2xdLHUrPXQuc3RyaWRlW2xdKmlbbF19Zis9Yyp0LmRhdGFbdV19cmV0dXJuIGZ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3N3aXRjaCh0LnNoYXBlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiAwO2Nhc2UgMTpyZXR1cm4gbih0LGUpO2Nhc2UgMjpyZXR1cm4gaSh0LGUscik7Y2FzZSAzOnJldHVybiBhKHQsZSxyLHMpO2RlZmF1bHQ6cmV0dXJuIG8uYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fSxlLmV4cG9ydHMuZDE9bixlLmV4cG9ydHMuZDI9aSxlLmV4cG9ydHMuZDM9YX0se31dLDQ1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17ImZsb2F0NjQsMiwxLDAiOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dFswXSxvPXRbMV0scz10WzJdLGw9clswXSxjPXJbMV0sdT1yWzJdO258PTA7dmFyIGY9MCxoPTAscD0wLGQ9dSxtPWMtcyp1LGc9bC1vKmM7Zm9yKHA9MDtwPGE7KytwKXtmb3IoaD0wO2g8bzsrK2gpe2ZvcihmPTA7ZjxzOysrZillW25dLz1pLG4rPWQ7bis9bX1uKz1nfX19LCJ1aW50OCwyLDAsMSxmbG9hdDY0LDIsMSwwIjpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSxvLHMpe2Zvcih2YXIgbD10WzBdLGM9dFsxXSx1PXRbMl0sZj1yWzBdLGg9clsxXSxwPXJbMl0sZD1hWzBdLG09YVsxXSxnPWFbMl0sdj1ufD0wLHk9b3w9MCx4PTB8dFswXTt4PjA7KXt4PDY0PyhsPXgseD0wKToobD02NCx4LT02NCk7Zm9yKHZhciBiPTB8dFsxXTtiPjA7KXtiPDY0PyhjPWIsYj0wKTooYz02NCxiLT02NCksbj12K3gqZitiKmgsbz15K3gqZCtiKm07dmFyIF89MCx3PTAsVD0wLGs9cCxBPWYtdSpwLE09aC1sKmYsUz1nLEU9ZC11KmcsTD1tLWwqZDtmb3IoVD0wO1Q8YzsrK1Qpe2Zvcih3PTA7dzxsOysrdyl7Zm9yKF89MDtfPHU7KytfKWVbbl09aVtvXSpzLG4rPWssbys9UztuKz1BLG8rPUV9bis9TSxvKz1MfX19fX0sImZsb2F0MzIsMSwwLGZsb2F0MzIsMSwwIjpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz10WzBdLGw9dFsxXSxjPXJbMF0sdT1yWzFdLGY9YVswXSxoPWFbMV07bnw9MCxvfD0wO3ZhciBwPTAsZD0wLG09dSxnPWMtbCp1LHY9aCx5PWYtbCpoO2ZvcihkPTA7ZDxzOysrZCl7Zm9yKHA9MDtwPGw7KytwKWVbbl09aVtvXSxuKz1tLG8rPXY7bis9ZyxvKz15fX19LCJmbG9hdDMyLDEsMCxmbG9hdDMyLDAsMSI6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPXRbMF0sbD10WzFdLGM9clswXSx1PXJbMV0sZj1hWzBdLGg9YVsxXSxwPW58PTAsZD1vfD0wLG09MHx0WzFdO20+MDspe208NjQ/KGw9bSxtPTApOihsPTY0LG0tPTY0KTtmb3IodmFyIGc9MHx0WzBdO2c+MDspe2c8NjQ/KHM9ZyxnPTApOihzPTY0LGctPTY0KSxuPXArbSp1K2cqYyxvPWQrbSpoK2cqZjt2YXIgdj0wLHk9MCx4PXUsYj1jLWwqdSxfPWgsdz1mLWwqaDtmb3IoeT0wO3k8czsrK3kpe2Zvcih2PTA7djxsOysrdillW25dPWlbb10sbis9eCxvKz1fO24rPWIsbys9d319fX19LCJ1aW50OCwyLDAsMSx1aW50OCwxLDIsMCI6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPXRbMF0sbD10WzFdLGM9dFsyXSx1PXJbMF0sZj1yWzFdLGg9clsyXSxwPWFbMF0sZD1hWzFdLG09YVsyXSxnPW58PTAsdj1vfD0wLHk9MHx0WzJdO3k+MDspe3k8NjQ/KGM9eSx5PTApOihjPTY0LHktPTY0KTtmb3IodmFyIHg9MHx0WzBdO3g+MDspe3g8NjQ/KHM9eCx4PTApOihzPTY0LHgtPTY0KTtmb3IodmFyIGI9MHx0WzFdO2I+MDspe2I8NjQ/KGw9YixiPTApOihsPTY0LGItPTY0KSxuPWcreSpoK3gqdStiKmYsbz12K3kqbSt4KnArYipkO3ZhciBfPTAsdz0wLFQ9MCxrPWgsQT11LWMqaCxNPWYtcyp1LFM9bSxFPXAtYyptLEw9ZC1zKnA7Zm9yKFQ9MDtUPGw7KytUKXtmb3Iodz0wO3c8czsrK3cpe2ZvcihfPTA7XzxjOysrXyllW25dPWlbb10sbis9ayxvKz1TO24rPUEsbys9RX1uKz1NLG8rPUx9fX19fX0sInVpbnQ4LDIsMCwxLGFycmF5LDIsMCwxIjpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz10WzBdLGw9dFsxXSxjPXRbMl0sdT1yWzBdLGY9clsxXSxoPXJbMl0scD1hWzBdLGQ9YVsxXSxtPWFbMl07bnw9MCxvfD0wO3ZhciBnPTAsdj0wLHk9MCx4PWgsYj11LWMqaCxfPWYtcyp1LHc9bSxUPXAtYyptLGs9ZC1zKnA7Zm9yKHk9MDt5PGw7Kyt5KXtmb3Iodj0wO3Y8czsrK3Ype2ZvcihnPTA7ZzxjOysrZyllW25dPWlbb10sbis9eCxvKz13O24rPWIsbys9VH1uKz1fLG8rPWt9fX19O3ZhciBpPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5qb2luKCIsIik7cmV0dXJuKDAsbltyXSkoKX0sYT17bXVsOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4saSl7dmFyIGE9ci5kdHlwZSxvPXIub3JkZXIscz1uLmR0eXBlLGw9bi5vcmRlcixjPWkuZHR5cGUsdT1pLm9yZGVyLGY9W2Esby5qb2luKCkscyxsLmpvaW4oKSxjLHUuam9pbigpXS5qb2luKCksaD1lW2ZdO3JldHVybiBofHwoZVtmXT1oPXQoW2EsbyxzLGwsYyx1XSkpLGgoci5zaGFwZS5zbGljZSgwKSxyLmRhdGEsci5zdHJpZGUsMHxyLm9mZnNldCxuLmRhdGEsbi5zdHJpZGUsMHxuLm9mZnNldCxpLmRhdGEsaS5zdHJpZGUsMHxpLm9mZnNldCl9fSxtdWxzOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4saSl7dmFyIGE9ci5kdHlwZSxvPXIub3JkZXIscz1uLmR0eXBlLGw9bi5vcmRlcixjPVthLG8uam9pbigpLHMsbC5qb2luKCldLmpvaW4oKSx1PWVbY107cmV0dXJuIHV8fChlW2NdPXU9dChbYSxvLHMsbF0pKSx1KHIuc2hhcGUuc2xpY2UoMCksci5kYXRhLHIuc3RyaWRlLDB8ci5vZmZzZXQsbi5kYXRhLG4uc3RyaWRlLDB8bi5vZmZzZXQsaSl9fSxtdWxzZXE6ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9ci5kdHlwZSxhPXIub3JkZXIsbz1baSxhLmpvaW4oKV0uam9pbigpLHM9ZVtvXTtyZXR1cm4gc3x8KGVbb109cz10KFtpLGFdKSkscyhyLnNoYXBlLnNsaWNlKDApLHIuZGF0YSxyLnN0cmlkZSwwfHIub2Zmc2V0LG4pfX0sZGl2OmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4saSl7dmFyIGE9ci5kdHlwZSxvPXIub3JkZXIscz1uLmR0eXBlLGw9bi5vcmRlcixjPWkuZHR5cGUsdT1pLm9yZGVyLGY9W2Esby5qb2luKCkscyxsLmpvaW4oKSxjLHUuam9pbigpXS5qb2luKCksaD1lW2ZdO3JldHVybiBofHwoZVtmXT1oPXQoW2EsbyxzLGwsYyx1XSkpLGgoci5zaGFwZS5zbGljZSgwKSxyLmRhdGEsci5zdHJpZGUsMHxyLm9mZnNldCxuLmRhdGEsbi5zdHJpZGUsMHxuLm9mZnNldCxpLmRhdGEsaS5zdHJpZGUsMHxpLm9mZnNldCl9fSxkaXZzOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4saSl7dmFyIGE9ci5kdHlwZSxvPXIub3JkZXIscz1uLmR0eXBlLGw9bi5vcmRlcixjPVthLG8uam9pbigpLHMsbC5qb2luKCldLmpvaW4oKSx1PWVbY107cmV0dXJuIHV8fChlW2NdPXU9dChbYSxvLHMsbF0pKSx1KHIuc2hhcGUuc2xpY2UoMCksci5kYXRhLHIuc3RyaWRlLDB8ci5vZmZzZXQsbi5kYXRhLG4uc3RyaWRlLDB8bi5vZmZzZXQsaSl9fSxkaXZzZXE6ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9ci5kdHlwZSxhPXIub3JkZXIsbz1baSxhLmpvaW4oKV0uam9pbigpLHM9ZVtvXTtyZXR1cm4gc3x8KGVbb109cz10KFtpLGFdKSkscyhyLnNoYXBlLnNsaWNlKDApLHIuZGF0YSxyLnN0cmlkZSwwfHIub2Zmc2V0LG4pfX0sYXNzaWduOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPXIuZHR5cGUsYT1yLm9yZGVyLG89bi5kdHlwZSxzPW4ub3JkZXIsbD1baSxhLmpvaW4oKSxvLHMuam9pbigpXS5qb2luKCksYz1lW2xdO3JldHVybiBjfHwoZVtsXT1jPXQoW2ksYSxvLHNdKSksYyhyLnNoYXBlLnNsaWNlKDApLHIuZGF0YSxyLnN0cmlkZSwwfHIub2Zmc2V0LG4uZGF0YSxuLnN0cmlkZSwwfG4ub2Zmc2V0KX19fTtmdW5jdGlvbiBvKHQpe3JldHVybiBlPXtmdW5jTmFtZTp0LmZ1bmNOYW1lfSwoMCxhW2UuZnVuY05hbWVdKShpLmJpbmQodm9pZCAwLGUpKTt2YXIgZX12YXIgcz17bXVsOiIqIixkaXY6Ii8ifTshZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gcylyW3RdPW8oe2Z1bmNOYW1lOnR9KSxyW3QrInMiXT1vKHtmdW5jTmFtZTp0KyJzIn0pLHJbdCsic2VxIl09byh7ZnVuY05hbWU6dCsic2VxIn0pfSgpLHIuYXNzaWduPW8oe2Z1bmNOYW1lOiJhc3NpZ24ifSl9LHt9XSw0NTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibmRhcnJheSIpLGk9dCgiLi9kb0NvbnZlcnQuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sYT10LG89MTtBcnJheS5pc0FycmF5KGEpOylyLnB1c2goYS5sZW5ndGgpLG8qPWEubGVuZ3RoLGE9YVswXTtyZXR1cm4gMD09PXIubGVuZ3RoP24oKTooZXx8KGU9bihuZXcgRmxvYXQ2NEFycmF5KG8pLHIpKSxpKGUsdCksZSl9fSx7Ii4vZG9Db252ZXJ0LmpzIjo0NTksbmRhcnJheTo0NjJ9XSw0NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXRbMF0sbz10WzFdLHM9dFsyXSxsPXJbMF0sYz1yWzFdLHU9clsyXSxmPVswLDAsMF07bnw9MDt2YXIgaD0wLHA9MCxkPTAsbT11LGc9Yy1zKnUsdj1sLW8qYztmb3IoZD0wO2Q8YTsrK2Qpe2ZvcihwPTA7cDxvOysrcCl7Zm9yKGg9MDtoPHM7KytoKXt2YXIgeSx4PWk7Zm9yKHk9MDt5PGYubGVuZ3RoLTE7Kyt5KXg9eFtmW3ldXTtlW25dPXhbZltmLmxlbmd0aC0xXV0sbis9bSwrK2ZbMl19bis9ZyxmWzJdLT1zLCsrZlsxXX1uKz12LGZbMV0tPW8sKytmWzBdfX19O2UuZXhwb3J0cz0obj17ZnVuY05hbWU6e2Z1bmNOYW1lOiJjb252ZXJ0In0uZnVuY05hbWV9LGZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPXIuZHR5cGUsYT1yLm9yZGVyLG89W2ksYS5qb2luKCldLmpvaW4oKSxzPWVbb107cmV0dXJuIHN8fChlW29dPXM9dChbaSxhXSkpLHMoci5zaGFwZS5zbGljZSgwKSxyLmRhdGEsci5zdHJpZGUsMHxyLm9mZnNldCxuKX19KGkuYmluZCh2b2lkIDAsbikpKX0se31dLDQ2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKTtmdW5jdGlvbiBpKHQpe3N3aXRjaCh0KXtjYXNlInVpbnQzMiI6cmV0dXJuW24ubWFsbG9jVWludDMyLG4uZnJlZVVpbnQzMl07ZGVmYXVsdDpyZXR1cm4gbnVsbH19dmFyIGE9eyJ1aW50MzIsMSwwIjpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyLG4saSxhLG8scyxsLGMsdSxmLGgpe3ZhciBwLGQsbSxnLHYseSx4LGIsXz1yKm8rYSx3PXQoYyk7Zm9yKHA9cisxO3A8PW47KytwKXtmb3IoZD1wLG09Xys9byx2PTAseT1fLGc9MDtnPGM7KytnKXdbdisrXT1pW3ldLHkrPXU7dDpmb3IoO2QtLSA+cjspe3Y9MCx5PW0tbztlOmZvcihnPTA7ZzxjOysrZyl7aWYoKHg9aVt5XSk8KGI9d1t2XSkpYnJlYWsgdDtpZih4PmIpYnJlYWsgZTt5Kz1mLHYrPWh9Zm9yKHY9bSx5PW0tbyxnPTA7ZzxjOysrZylpW3ZdPWlbeV0sdis9dSx5Kz11O20tPW99Zm9yKHY9bSx5PTAsZz0wO2c8YzsrK2cpaVt2XT13W3krK10sdis9dX1lKHcpfX19O3ZhciBvPXsidWludDMyLDEsMCI6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmdW5jdGlvbiBuKGksYSxvLHMsbCxjLHUsZixoLHAsZCl7dmFyIG0sZyx2LHkseCxiLF8sdyxULGssQSxNLFMsRSxMLEMsUCxJLE8seixELFIsRixCLE4saj0oYS1pKzEpLzZ8MCxVPWkraixWPWEtaixIPWkrYT4+MSxxPUgtaixHPUgraixZPVUsVz1xLFg9SCxaPUcsSj1WLEs9aSsxLFE9YS0xLCQ9ITAsdHQ9MCxldD0wLHJ0PTAsbnQ9ZixpdD1lKG50KSxhdD1lKG50KTtBPWwqWSxNPWwqVyxOPXM7dDpmb3Ioaz0wO2s8ZjsrK2spe2lmKHc9TStOLChydD1vW189QStOXS1vW3ddKT4wKXtnPVksWT1XLFc9ZzticmVhayB0fWlmKHJ0PDApYnJlYWsgdDtOKz1wfUE9bCpaLE09bCpKLE49czt0OmZvcihrPTA7azxmOysrayl7aWYodz1NK04sKHJ0PW9bXz1BK05dLW9bd10pPjApe2c9WixaPUosSj1nO2JyZWFrIHR9aWYocnQ8MClicmVhayB0O04rPXB9QT1sKlksTT1sKlgsTj1zO3Q6Zm9yKGs9MDtrPGY7KytrKXtpZih3PU0rTiwocnQ9b1tfPUErTl0tb1t3XSk+MCl7Zz1ZLFk9WCxYPWc7YnJlYWsgdH1pZihydDwwKWJyZWFrIHQ7Tis9cH1BPWwqVyxNPWwqWCxOPXM7dDpmb3Ioaz0wO2s8ZjsrK2spe2lmKHc9TStOLChydD1vW189QStOXS1vW3ddKT4wKXtnPVcsVz1YLFg9ZzticmVhayB0fWlmKHJ0PDApYnJlYWsgdDtOKz1wfUE9bCpZLE09bCpaLE49czt0OmZvcihrPTA7azxmOysrayl7aWYodz1NK04sKHJ0PW9bXz1BK05dLW9bd10pPjApe2c9WSxZPVosWj1nO2JyZWFrIHR9aWYocnQ8MClicmVhayB0O04rPXB9QT1sKlgsTT1sKlosTj1zO3Q6Zm9yKGs9MDtrPGY7KytrKXtpZih3PU0rTiwocnQ9b1tfPUErTl0tb1t3XSk+MCl7Zz1YLFg9WixaPWc7YnJlYWsgdH1pZihydDwwKWJyZWFrIHQ7Tis9cH1BPWwqVyxNPWwqSixOPXM7dDpmb3Ioaz0wO2s8ZjsrK2spe2lmKHc9TStOLChydD1vW189QStOXS1vW3ddKT4wKXtnPVcsVz1KLEo9ZzticmVhayB0fWlmKHJ0PDApYnJlYWsgdDtOKz1wfUE9bCpXLE09bCpYLE49czt0OmZvcihrPTA7azxmOysrayl7aWYodz1NK04sKHJ0PW9bXz1BK05dLW9bd10pPjApe2c9VyxXPVgsWD1nO2JyZWFrIHR9aWYocnQ8MClicmVhayB0O04rPXB9QT1sKlosTT1sKkosTj1zO3Q6Zm9yKGs9MDtrPGY7KytrKXtpZih3PU0rTiwocnQ9b1tfPUErTl0tb1t3XSk+MCl7Zz1aLFo9SixKPWc7YnJlYWsgdH1pZihydDwwKWJyZWFrIHQ7Tis9cH1mb3IoQT1sKlksTT1sKlcsUz1sKlgsRT1sKlosTD1sKkosQz1sKlUsUD1sKkgsST1sKlYsQj0wLE49cyxrPTA7azxmOysraylfPUErTix3PU0rTixUPVMrTixPPUUrTix6PUwrTixEPUMrTixSPVArTixGPUkrTixpdFtCXT1vW3ddLGF0W0JdPW9bT10sJD0kJiZpdFtCXT09PWF0W0JdLHY9b1tfXSx5PW9bVF0seD1vW3pdLG9bRF09dixvW1JdPXksb1tGXT14LCsrQixOKz1oO2ZvcihBPWwqcSxNPWwqaSxOPXMsaz0wO2s8ZjsrK2spdz1NK04sb1tfPUErTl09b1t3XSxOKz1oO2ZvcihBPWwqRyxNPWwqYSxOPXMsaz0wO2s8ZjsrK2spdz1NK04sb1tfPUErTl09b1t3XSxOKz1oO2lmKCQpZm9yKGI9SztiPD1ROysrYil7Xz1zK2IqbCxCPTA7dDpmb3Ioaz0wO2s8ZiYmMD09PShydD1vW19dLWl0W0JdKTsrK2spQis9ZCxfKz1wO2lmKDAhPT1ydClpZihydDwwKXtpZihiIT09Sylmb3IoQT1sKmIsTT1sKkssTj1zLGs9MDtrPGY7KytrKXc9TStOLG09b1tfPUErTl0sb1tfXT1vW3ddLG9bd109bSxOKz1oOysrS31lbHNlIGZvcig7Oyl7Xz1zK1EqbCxCPTA7dDpmb3Ioaz0wO2s8ZiYmMD09PShydD1vW19dLWl0W0JdKTsrK2spQis9ZCxfKz1wO2lmKCEocnQ+MCkpe2lmKHJ0PDApe2ZvcihBPWwqYixNPWwqSyxTPWwqUSxOPXMsaz0wO2s8ZjsrK2spdz1NK04sVD1TK04sbT1vW189QStOXSxvW19dPW9bd10sb1t3XT1vW1RdLG9bVF09bSxOKz1oOysrSywtLVE7YnJlYWt9Zm9yKEE9bCpiLE09bCpRLE49cyxrPTA7azxmOysrayl3PU0rTixtPW9bXz1BK05dLG9bX109b1t3XSxvW3ddPW0sTis9aDstLVE7YnJlYWt9US0tfX1lbHNlIGZvcihiPUs7Yjw9UTsrK2Ipe189cytiKmwsQj0wO3Q6Zm9yKGs9MDtrPGYmJjA9PT0odHQ9b1tfXS1pdFtCXSk7KytrKUIrPWQsXys9cDtpZih0dDwwKXtpZihiIT09Sylmb3IoQT1sKmIsTT1sKkssTj1zLGs9MDtrPGY7KytrKXc9TStOLG09b1tfPUErTl0sb1tfXT1vW3ddLG9bd109bSxOKz1oOysrS31lbHNle189cytiKmwsQj0wO3Q6Zm9yKGs9MDtrPGYmJjA9PT0oZXQ9b1tfXS1hdFtCXSk7KytrKUIrPWQsXys9cDtpZihldD4wKWZvcig7Oyl7Xz1zK1EqbCxCPTA7dDpmb3Ioaz0wO2s8ZiYmMD09PShydD1vW19dLWF0W0JdKTsrK2spQis9ZCxfKz1wO2lmKCEocnQ+MCkpe189cytRKmwsQj0wO3Q6Zm9yKGs9MDtrPGYmJjA9PT0ocnQ9b1tfXS1pdFtCXSk7KytrKUIrPWQsXys9cDtpZihydDwwKXtmb3IoQT1sKmIsTT1sKkssUz1sKlEsTj1zLGs9MDtrPGY7KytrKXc9TStOLFQ9UytOLG09b1tfPUErTl0sb1tfXT1vW3ddLG9bd109b1tUXSxvW1RdPW0sTis9aDsrK0ssLS1RfWVsc2V7Zm9yKEE9bCpiLE09bCpRLE49cyxrPTA7azxmOysrayl3PU0rTixtPW9bXz1BK05dLG9bX109b1t3XSxvW3ddPW0sTis9aDstLVF9YnJlYWt9aWYoLS1RPGIpYnJlYWt9fX1mb3IoQT1sKmksTT1sKihLLTEpLEI9MCxOPXMsaz0wO2s8ZjsrK2spdz1NK04sb1tfPUErTl09b1t3XSxvW3ddPWl0W0JdLCsrQixOKz1oO2ZvcihBPWwqYSxNPWwqKFErMSksQj0wLE49cyxrPTA7azxmOysrayl3PU0rTixvW189QStOXT1vW3ddLG9bd109YXRbQl0sKytCLE4rPWg7aWYoSy0yLWk8PTMyP3QoaSxLLTIsbyxzLGwsYyx1LGYsaCxwLGQpOm4oaSxLLTIsbyxzLGwsYyx1LGYsaCxwLGQpLGEtKFErMik8PTMyP3QoUSsyLGEsbyxzLGwsYyx1LGYsaCxwLGQpOm4oUSsyLGEsbyxzLGwsYyx1LGYsaCxwLGQpLCQpcmV0dXJuIHIoaXQpLHZvaWQgcihhdCk7aWYoSzxVJiZRPlYpe3Q6Zm9yKDs7KXtmb3IoXz1zK0sqbCxCPTAsTj1zLGs9MDtrPGY7KytrKXtpZihvW19dIT09aXRbQl0pYnJlYWsgdDsrK0IsXys9aH0rK0t9dDpmb3IoOzspe2ZvcihfPXMrUSpsLEI9MCxOPXMsaz0wO2s8ZjsrK2spe2lmKG9bX10hPT1hdFtCXSlicmVhayB0OysrQixfKz1ofS0tUX1mb3IoYj1LO2I8PVE7KytiKXtfPXMrYipsLEI9MDt0OmZvcihrPTA7azxmJiYwPT09KHR0PW9bX10taXRbQl0pOysraylCKz1kLF8rPXA7aWYoMD09PXR0KXtpZihiIT09Sylmb3IoQT1sKmIsTT1sKkssTj1zLGs9MDtrPGY7KytrKXc9TStOLG09b1tfPUErTl0sb1tfXT1vW3ddLG9bd109bSxOKz1oOysrS31lbHNle189cytiKmwsQj0wO3Q6Zm9yKGs9MDtrPGYmJjA9PT0oZXQ9b1tfXS1hdFtCXSk7KytrKUIrPWQsXys9cDtpZigwPT09ZXQpZm9yKDs7KXtfPXMrUSpsLEI9MDt0OmZvcihrPTA7azxmJiYwPT09KHJ0PW9bX10tYXRbQl0pOysraylCKz1kLF8rPXA7aWYoMCE9PXJ0KXtfPXMrUSpsLEI9MDt0OmZvcihrPTA7azxmJiYwPT09KHJ0PW9bX10taXRbQl0pOysraylCKz1kLF8rPXA7aWYocnQ8MCl7Zm9yKEE9bCpiLE09bCpLLFM9bCpRLE49cyxrPTA7azxmOysrayl3PU0rTixUPVMrTixtPW9bXz1BK05dLG9bX109b1t3XSxvW3ddPW9bVF0sb1tUXT1tLE4rPWg7KytLLC0tUX1lbHNle2ZvcihBPWwqYixNPWwqUSxOPXMsaz0wO2s8ZjsrK2spdz1NK04sbT1vW189QStOXSxvW19dPW9bd10sb1t3XT1tLE4rPWg7LS1RfWJyZWFrfWlmKC0tUTxiKWJyZWFrfX19fXIoaXQpLHIoYXQpLFEtSzw9MzI/dChLLFEsbyxzLGwsYyx1LGYsaCxwLGQpOm4oSyxRLG8scyxsLGMsdSxmLGgscCxkKX19fTt2YXIgcz17InVpbnQzMiwxLDAiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXIuZGF0YSxpPTB8ci5vZmZzZXQsYT1yLnNoYXBlLG89ci5zdHJpZGUscz0wfG9bMF0sbD0wfGFbMF0sYz0wfG9bMV0sdT0wfGFbMV0sZj1jLGg9YztsPD0zMj90KDAsbC0xLG4saSxzLGMsbCx1LGYsaCwxKTplKDAsbC0xLG4saSxzLGMsbCx1LGYsaCwxKX19fTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bZSx0XS5qb2luKCIsIiksbj1zW3JdLGw9ZnVuY3Rpb24odCxlKXt2YXIgcj1pKGUpLG49W2UsdF0uam9pbigiLCIpLG89YVtuXTtyZXR1cm4gcj9vKHJbMF0sclsxXSk6bygpfSh0LGUpLGM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWkoZSksYT1bZSx0XS5qb2luKCIsIikscz1vW2FdO3JldHVybiB0Lmxlbmd0aD4xJiZuP3MocixuWzBdLG5bMV0pOnMocil9KHQsZSxsKTtyZXR1cm4gbihsLGMpfX0seyJ0eXBlZGFycmF5LXBvb2wiOjU5MH1dLDQ2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9jb21waWxlX3NvcnQuanMiKSxpPXt9O2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lm9yZGVyLHI9dC5kdHlwZSxhPVtlLHJdLmpvaW4oIjoiKSxvPWlbYV07cmV0dXJuIG98fChpW2FdPW89bihlLHIpKSxvKHQpLHR9fSx7Ii4vbGliL2NvbXBpbGVfc29ydC5qcyI6NDYwfV0sNDYyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiaXMtYnVmZmVyIiksaT0idW5kZWZpbmVkIiE9dHlwZW9mIEZsb2F0NjRBcnJheTtmdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBvKCl7dmFyIHQsZT10aGlzLnN0cmlkZSxyPW5ldyBBcnJheShlLmxlbmd0aCk7Zm9yKHQ9MDt0PHIubGVuZ3RoOysrdClyW3RdPVtNYXRoLmFicyhlW3RdKSx0XTtyLnNvcnQoYSk7dmFyIG49bmV3IEFycmF5KHIubGVuZ3RoKTtmb3IodD0wO3Q8bi5sZW5ndGg7Kyt0KW5bdF09clt0XVsxXTtyZXR1cm4gbn12YXIgcz17VDpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3RoaXMuZGF0YT10fXZhciByPWUucHJvdG90eXBlO3JldHVybiByLmR0eXBlPXQsci5pbmRleD1mdW5jdGlvbigpe3JldHVybi0xfSxyLnNpemU9MCxyLmRpbWVuc2lvbj0tMSxyLnNoYXBlPXIuc3RyaWRlPXIub3JkZXI9W10sci5sbz1yLmhpPXIudHJhbnNwb3NlPXIuc3RlcD1mdW5jdGlvbigpe3JldHVybiBuZXcgZSh0aGlzLmRhdGEpfSxyLmdldD1yLnNldD1mdW5jdGlvbigpe30sci5waWNrPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSh0KX19LDA6ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSl7dGhpcy5kYXRhPXQsdGhpcy5vZmZzZXQ9ZX12YXIgbj1yLnByb3RvdHlwZTtyZXR1cm4gbi5kdHlwZT10LG4uaW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXR9LG4uZGltZW5zaW9uPTAsbi5zaXplPTEsbi5zaGFwZT1uLnN0cmlkZT1uLm9yZGVyPVtdLG4ubG89bi5oaT1uLnRyYW5zcG9zZT1uLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcy5kYXRhLHRoaXMub2Zmc2V0KX0sbi5waWNrPWZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcy5kYXRhKX0sbi52YWx1ZU9mPW4uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuImdlbmVyaWMiPT09dD90aGlzLmRhdGEuZ2V0KHRoaXMub2Zmc2V0KTp0aGlzLmRhdGFbdGhpcy5vZmZzZXRdfSxuLnNldD1mdW5jdGlvbihlKXtyZXR1cm4iZ2VuZXJpYyI9PT10P3RoaXMuZGF0YS5zZXQodGhpcy5vZmZzZXQsZSk6dGhpcy5kYXRhW3RoaXMub2Zmc2V0XT1lfSxmdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gbmV3IHIodCxpKX19LDE6ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbil7dGhpcy5kYXRhPXQsdGhpcy5zaGFwZT1bZV0sdGhpcy5zdHJpZGU9W3JdLHRoaXMub2Zmc2V0PTB8bn12YXIgaT1uLnByb3RvdHlwZTtyZXR1cm4gaS5kdHlwZT10LGkuZGltZW5zaW9uPTEsT2JqZWN0LmRlZmluZVByb3BlcnR5KGksInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFwZVswXX19KSxpLm9yZGVyPVswXSxpLnNldD1mdW5jdGlvbihlLHIpe3JldHVybiJnZW5lcmljIj09PXQ/dGhpcy5kYXRhLnNldCh0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplLHIpOnRoaXMuZGF0YVt0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplXT1yfSxpLmdldD1mdW5jdGlvbihlKXtyZXR1cm4iZ2VuZXJpYyI9PT10P3RoaXMuZGF0YS5nZXQodGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSk6dGhpcy5kYXRhW3RoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmVdfSxpLmluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSp0fSxpLmhpPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbih0aGlzLmRhdGEsIm51bWJlciIhPXR5cGVvZiB0fHx0PDA/dGhpcy5zaGFwZVswXTowfHQsdGhpcy5zdHJpZGVbMF0sdGhpcy5vZmZzZXQpfSxpLmxvPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub2Zmc2V0LHI9MCxpPXRoaXMuc2hhcGVbMF0sYT10aGlzLnN0cmlkZVswXTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTAmJihlKz1hKihyPTB8dCksaS09ciksbmV3IG4odGhpcy5kYXRhLGksYSxlKX0saS5zdGVwPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2hhcGVbMF0scj10aGlzLnN0cmlkZVswXSxpPXRoaXMub2Zmc2V0LGE9MCxvPU1hdGguY2VpbDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJigoYT0wfHQpPDA/KGkrPXIqKGUtMSksZT1vKC1lL2EpKTplPW8oZS9hKSxyKj1hKSxuZXcgbih0aGlzLmRhdGEsZSxyLGkpfSxpLnRyYW5zcG9zZT1mdW5jdGlvbih0KXt0PXZvaWQgMD09PXQ/MDowfHQ7dmFyIGU9dGhpcy5zaGFwZSxyPXRoaXMuc3RyaWRlO3JldHVybiBuZXcgbih0aGlzLmRhdGEsZVt0XSxyW3RdLHRoaXMub2Zmc2V0KX0saS5waWNrPWZ1bmN0aW9uKHQpe3ZhciByPVtdLG49W10saT10aGlzLm9mZnNldDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTA/aT1pK3RoaXMuc3RyaWRlWzBdKnR8MDooci5wdXNoKHRoaXMuc2hhcGVbMF0pLG4ucHVzaCh0aGlzLnN0cmlkZVswXSkpLCgwLGVbci5sZW5ndGgrMV0pKHRoaXMuZGF0YSxyLG4saSl9LGZ1bmN0aW9uKHQsZSxyLGkpe3JldHVybiBuZXcgbih0LGVbMF0sclswXSxpKX19LDI6ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbixpLGEpe3RoaXMuZGF0YT10LHRoaXMuc2hhcGU9W2Uscl0sdGhpcy5zdHJpZGU9W24saV0sdGhpcy5vZmZzZXQ9MHxhfXZhciBpPW4ucHJvdG90eXBlO3JldHVybiBpLmR0eXBlPXQsaS5kaW1lbnNpb249MixPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYXBlWzBdKnRoaXMuc2hhcGVbMV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIm9yZGVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMuc3RyaWRlWzBdKT5NYXRoLmFicyh0aGlzLnN0cmlkZVsxXSk/WzEsMF06WzAsMV19fSksaS5zZXQ9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiJnZW5lcmljIj09PXQ/dGhpcy5kYXRhLnNldCh0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIsbik6dGhpcy5kYXRhW3RoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUrdGhpcy5zdHJpZGVbMV0qcl09bn0saS5nZXQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4iZ2VuZXJpYyI9PT10P3RoaXMuZGF0YS5nZXQodGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyKTp0aGlzLmRhdGFbdGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyXX0saS5pbmRleD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSp0K3RoaXMuc3RyaWRlWzFdKmV9LGkuaGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG4odGhpcy5kYXRhLCJudW1iZXIiIT10eXBlb2YgdHx8dDwwP3RoaXMuc2hhcGVbMF06MHx0LCJudW1iZXIiIT10eXBlb2YgZXx8ZTwwP3RoaXMuc2hhcGVbMV06MHxlLHRoaXMuc3RyaWRlWzBdLHRoaXMuc3RyaWRlWzFdLHRoaXMub2Zmc2V0KX0saS5sbz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMub2Zmc2V0LGk9MCxhPXRoaXMuc2hhcGVbMF0sbz10aGlzLnNoYXBlWzFdLHM9dGhpcy5zdHJpZGVbMF0sbD10aGlzLnN0cmlkZVsxXTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTAmJihyKz1zKihpPTB8dCksYS09aSksIm51bWJlciI9PXR5cGVvZiBlJiZlPj0wJiYocis9bCooaT0wfGUpLG8tPWkpLG5ldyBuKHRoaXMuZGF0YSxhLG8scyxsLHIpfSxpLnN0ZXA9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnNoYXBlWzBdLGk9dGhpcy5zaGFwZVsxXSxhPXRoaXMuc3RyaWRlWzBdLG89dGhpcy5zdHJpZGVbMV0scz10aGlzLm9mZnNldCxsPTAsYz1NYXRoLmNlaWw7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiYoKGw9MHx0KTwwPyhzKz1hKihyLTEpLHI9Yygtci9sKSk6cj1jKHIvbCksYSo9bCksIm51bWJlciI9PXR5cGVvZiBlJiYoKGw9MHxlKTwwPyhzKz1vKihpLTEpLGk9YygtaS9sKSk6aT1jKGkvbCksbyo9bCksbmV3IG4odGhpcy5kYXRhLHIsaSxhLG8scyl9LGkudHJhbnNwb3NlPWZ1bmN0aW9uKHQsZSl7dD12b2lkIDA9PT10PzA6MHx0LGU9dm9pZCAwPT09ZT8xOjB8ZTt2YXIgcj10aGlzLnNoYXBlLGk9dGhpcy5zdHJpZGU7cmV0dXJuIG5ldyBuKHRoaXMuZGF0YSxyW3RdLHJbZV0saVt0XSxpW2VdLHRoaXMub2Zmc2V0KX0saS5waWNrPWZ1bmN0aW9uKHQscil7dmFyIG49W10saT1bXSxhPXRoaXMub2Zmc2V0O3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD49MD9hPWErdGhpcy5zdHJpZGVbMF0qdHwwOihuLnB1c2godGhpcy5zaGFwZVswXSksaS5wdXNoKHRoaXMuc3RyaWRlWzBdKSksIm51bWJlciI9PXR5cGVvZiByJiZyPj0wP2E9YSt0aGlzLnN0cmlkZVsxXSpyfDA6KG4ucHVzaCh0aGlzLnNoYXBlWzFdKSxpLnB1c2godGhpcy5zdHJpZGVbMV0pKSwoMCxlW24ubGVuZ3RoKzFdKSh0aGlzLmRhdGEsbixpLGEpfSxmdW5jdGlvbih0LGUscixpKXtyZXR1cm4gbmV3IG4odCxlWzBdLGVbMV0sclswXSxyWzFdLGkpfX0sMzpmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscixuLGksYSxvLHMpe3RoaXMuZGF0YT10LHRoaXMuc2hhcGU9W2UscixuXSx0aGlzLnN0cmlkZT1baSxhLG9dLHRoaXMub2Zmc2V0PTB8c312YXIgaT1uLnByb3RvdHlwZTtyZXR1cm4gaS5kdHlwZT10LGkuZGltZW5zaW9uPTMsT2JqZWN0LmRlZmluZVByb3BlcnR5KGksInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFwZVswXSp0aGlzLnNoYXBlWzFdKnRoaXMuc2hhcGVbMl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIm9yZGVyIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9TWF0aC5hYnModGhpcy5zdHJpZGVbMF0pLGU9TWF0aC5hYnModGhpcy5zdHJpZGVbMV0pLHI9TWF0aC5hYnModGhpcy5zdHJpZGVbMl0pO3JldHVybiB0PmU/ZT5yP1syLDEsMF06dD5yP1sxLDIsMF06WzEsMCwyXTp0PnI/WzIsMCwxXTpyPmU/WzAsMSwyXTpbMCwyLDFdfX0pLGkuc2V0PWZ1bmN0aW9uKGUscixuLGkpe3JldHVybiJnZW5lcmljIj09PXQ/dGhpcy5kYXRhLnNldCh0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIrdGhpcy5zdHJpZGVbMl0qbixpKTp0aGlzLmRhdGFbdGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyK3RoaXMuc3RyaWRlWzJdKm5dPWl9LGkuZ2V0PWZ1bmN0aW9uKGUscixuKXtyZXR1cm4iZ2VuZXJpYyI9PT10P3RoaXMuZGF0YS5nZXQodGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyK3RoaXMuc3RyaWRlWzJdKm4pOnRoaXMuZGF0YVt0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIrdGhpcy5zdHJpZGVbMl0qbl19LGkuaW5kZXg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSp0K3RoaXMuc3RyaWRlWzFdKmUrdGhpcy5zdHJpZGVbMl0qcn0saS5oaT1mdW5jdGlvbih0LGUscil7cmV0dXJuIG5ldyBuKHRoaXMuZGF0YSwibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MD90aGlzLnNoYXBlWzBdOjB8dCwibnVtYmVyIiE9dHlwZW9mIGV8fGU8MD90aGlzLnNoYXBlWzFdOjB8ZSwibnVtYmVyIiE9dHlwZW9mIHJ8fHI8MD90aGlzLnNoYXBlWzJdOjB8cix0aGlzLnN0cmlkZVswXSx0aGlzLnN0cmlkZVsxXSx0aGlzLnN0cmlkZVsyXSx0aGlzLm9mZnNldCl9LGkubG89ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMub2Zmc2V0LGE9MCxvPXRoaXMuc2hhcGVbMF0scz10aGlzLnNoYXBlWzFdLGw9dGhpcy5zaGFwZVsyXSxjPXRoaXMuc3RyaWRlWzBdLHU9dGhpcy5zdHJpZGVbMV0sZj10aGlzLnN0cmlkZVsyXTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTAmJihpKz1jKihhPTB8dCksby09YSksIm51bWJlciI9PXR5cGVvZiBlJiZlPj0wJiYoaSs9dSooYT0wfGUpLHMtPWEpLCJudW1iZXIiPT10eXBlb2YgciYmcj49MCYmKGkrPWYqKGE9MHxyKSxsLT1hKSxuZXcgbih0aGlzLmRhdGEsbyxzLGwsYyx1LGYsaSl9LGkuc3RlcD1mdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5zaGFwZVswXSxhPXRoaXMuc2hhcGVbMV0sbz10aGlzLnNoYXBlWzJdLHM9dGhpcy5zdHJpZGVbMF0sbD10aGlzLnN0cmlkZVsxXSxjPXRoaXMuc3RyaWRlWzJdLHU9dGhpcy5vZmZzZXQsZj0wLGg9TWF0aC5jZWlsO3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmKChmPTB8dCk8MD8odSs9cyooaS0xKSxpPWgoLWkvZikpOmk9aChpL2YpLHMqPWYpLCJudW1iZXIiPT10eXBlb2YgZSYmKChmPTB8ZSk8MD8odSs9bCooYS0xKSxhPWgoLWEvZikpOmE9aChhL2YpLGwqPWYpLCJudW1iZXIiPT10eXBlb2YgciYmKChmPTB8cik8MD8odSs9Yyooby0xKSxvPWgoLW8vZikpOm89aChvL2YpLGMqPWYpLG5ldyBuKHRoaXMuZGF0YSxpLGEsbyxzLGwsYyx1KX0saS50cmFuc3Bvc2U9ZnVuY3Rpb24odCxlLHIpe3Q9dm9pZCAwPT09dD8wOjB8dCxlPXZvaWQgMD09PWU/MTowfGUscj12b2lkIDA9PT1yPzI6MHxyO3ZhciBpPXRoaXMuc2hhcGUsYT10aGlzLnN0cmlkZTtyZXR1cm4gbmV3IG4odGhpcy5kYXRhLGlbdF0saVtlXSxpW3JdLGFbdF0sYVtlXSxhW3JdLHRoaXMub2Zmc2V0KX0saS5waWNrPWZ1bmN0aW9uKHQscixuKXt2YXIgaT1bXSxhPVtdLG89dGhpcy5vZmZzZXQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wP289byt0aGlzLnN0cmlkZVswXSp0fDA6KGkucHVzaCh0aGlzLnNoYXBlWzBdKSxhLnB1c2godGhpcy5zdHJpZGVbMF0pKSwibnVtYmVyIj09dHlwZW9mIHImJnI+PTA/bz1vK3RoaXMuc3RyaWRlWzFdKnJ8MDooaS5wdXNoKHRoaXMuc2hhcGVbMV0pLGEucHVzaCh0aGlzLnN0cmlkZVsxXSkpLCJudW1iZXIiPT10eXBlb2YgbiYmbj49MD9vPW8rdGhpcy5zdHJpZGVbMl0qbnwwOihpLnB1c2godGhpcy5zaGFwZVsyXSksYS5wdXNoKHRoaXMuc3RyaWRlWzJdKSksKDAsZVtpLmxlbmd0aCsxXSkodGhpcy5kYXRhLGksYSxvKX0sZnVuY3Rpb24odCxlLHIsaSl7cmV0dXJuIG5ldyBuKHQsZVswXSxlWzFdLGVbMl0sclswXSxyWzFdLHJbMl0saSl9fSw0OmZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyLG4saSxhLG8scyxsLGMpe3RoaXMuZGF0YT10LHRoaXMuc2hhcGU9W2UscixuLGldLHRoaXMuc3RyaWRlPVthLG8scyxsXSx0aGlzLm9mZnNldD0wfGN9dmFyIGk9bi5wcm90b3R5cGU7cmV0dXJuIGkuZHR5cGU9dCxpLmRpbWVuc2lvbj00LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJzaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhcGVbMF0qdGhpcy5zaGFwZVsxXSp0aGlzLnNoYXBlWzJdKnRoaXMuc2hhcGVbM119fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIm9yZGVyIix7Z2V0OnJ9KSxpLnNldD1mdW5jdGlvbihlLHIsbixpLGEpe3JldHVybiJnZW5lcmljIj09PXQ/dGhpcy5kYXRhLnNldCh0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIrdGhpcy5zdHJpZGVbMl0qbit0aGlzLnN0cmlkZVszXSppLGEpOnRoaXMuZGF0YVt0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIrdGhpcy5zdHJpZGVbMl0qbit0aGlzLnN0cmlkZVszXSppXT1hfSxpLmdldD1mdW5jdGlvbihlLHIsbixpKXtyZXR1cm4iZ2VuZXJpYyI9PT10P3RoaXMuZGF0YS5nZXQodGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyK3RoaXMuc3RyaWRlWzJdKm4rdGhpcy5zdHJpZGVbM10qaSk6dGhpcy5kYXRhW3RoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUrdGhpcy5zdHJpZGVbMV0qcit0aGlzLnN0cmlkZVsyXSpuK3RoaXMuc3RyaWRlWzNdKmldfSxpLmluZGV4PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSp0K3RoaXMuc3RyaWRlWzFdKmUrdGhpcy5zdHJpZGVbMl0qcit0aGlzLnN0cmlkZVszXSpufSxpLmhpPWZ1bmN0aW9uKHQsZSxyLGkpe3JldHVybiBuZXcgbih0aGlzLmRhdGEsIm51bWJlciIhPXR5cGVvZiB0fHx0PDA/dGhpcy5zaGFwZVswXTowfHQsIm51bWJlciIhPXR5cGVvZiBlfHxlPDA/dGhpcy5zaGFwZVsxXTowfGUsIm51bWJlciIhPXR5cGVvZiByfHxyPDA/dGhpcy5zaGFwZVsyXTowfHIsIm51bWJlciIhPXR5cGVvZiBpfHxpPDA/dGhpcy5zaGFwZVszXTowfGksdGhpcy5zdHJpZGVbMF0sdGhpcy5zdHJpZGVbMV0sdGhpcy5zdHJpZGVbMl0sdGhpcy5zdHJpZGVbM10sdGhpcy5vZmZzZXQpfSxpLmxvPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXRoaXMub2Zmc2V0LG89MCxzPXRoaXMuc2hhcGVbMF0sbD10aGlzLnNoYXBlWzFdLGM9dGhpcy5zaGFwZVsyXSx1PXRoaXMuc2hhcGVbM10sZj10aGlzLnN0cmlkZVswXSxoPXRoaXMuc3RyaWRlWzFdLHA9dGhpcy5zdHJpZGVbMl0sZD10aGlzLnN0cmlkZVszXTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTAmJihhKz1mKihvPTB8dCkscy09byksIm51bWJlciI9PXR5cGVvZiBlJiZlPj0wJiYoYSs9aCoobz0wfGUpLGwtPW8pLCJudW1iZXIiPT10eXBlb2YgciYmcj49MCYmKGErPXAqKG89MHxyKSxjLT1vKSwibnVtYmVyIj09dHlwZW9mIGkmJmk+PTAmJihhKz1kKihvPTB8aSksdS09byksbmV3IG4odGhpcy5kYXRhLHMsbCxjLHUsZixoLHAsZCxhKX0saS5zdGVwPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXRoaXMuc2hhcGVbMF0sbz10aGlzLnNoYXBlWzFdLHM9dGhpcy5zaGFwZVsyXSxsPXRoaXMuc2hhcGVbM10sYz10aGlzLnN0cmlkZVswXSx1PXRoaXMuc3RyaWRlWzFdLGY9dGhpcy5zdHJpZGVbMl0saD10aGlzLnN0cmlkZVszXSxwPXRoaXMub2Zmc2V0LGQ9MCxtPU1hdGguY2VpbDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJigoZD0wfHQpPDA/KHArPWMqKGEtMSksYT1tKC1hL2QpKTphPW0oYS9kKSxjKj1kKSwibnVtYmVyIj09dHlwZW9mIGUmJigoZD0wfGUpPDA/KHArPXUqKG8tMSksbz1tKC1vL2QpKTpvPW0oby9kKSx1Kj1kKSwibnVtYmVyIj09dHlwZW9mIHImJigoZD0wfHIpPDA/KHArPWYqKHMtMSkscz1tKC1zL2QpKTpzPW0ocy9kKSxmKj1kKSwibnVtYmVyIj09dHlwZW9mIGkmJigoZD0wfGkpPDA/KHArPWgqKGwtMSksbD1tKC1sL2QpKTpsPW0obC9kKSxoKj1kKSxuZXcgbih0aGlzLmRhdGEsYSxvLHMsbCxjLHUsZixoLHApfSxpLnRyYW5zcG9zZT1mdW5jdGlvbih0LGUscixpKXt0PXZvaWQgMD09PXQ/MDowfHQsZT12b2lkIDA9PT1lPzE6MHxlLHI9dm9pZCAwPT09cj8yOjB8cixpPXZvaWQgMD09PWk/MzowfGk7dmFyIGE9dGhpcy5zaGFwZSxvPXRoaXMuc3RyaWRlO3JldHVybiBuZXcgbih0aGlzLmRhdGEsYVt0XSxhW2VdLGFbcl0sYVtpXSxvW3RdLG9bZV0sb1tyXSxvW2ldLHRoaXMub2Zmc2V0KX0saS5waWNrPWZ1bmN0aW9uKHQscixuLGkpe3ZhciBhPVtdLG89W10scz10aGlzLm9mZnNldDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTA/cz1zK3RoaXMuc3RyaWRlWzBdKnR8MDooYS5wdXNoKHRoaXMuc2hhcGVbMF0pLG8ucHVzaCh0aGlzLnN0cmlkZVswXSkpLCJudW1iZXIiPT10eXBlb2YgciYmcj49MD9zPXMrdGhpcy5zdHJpZGVbMV0qcnwwOihhLnB1c2godGhpcy5zaGFwZVsxXSksby5wdXNoKHRoaXMuc3RyaWRlWzFdKSksIm51bWJlciI9PXR5cGVvZiBuJiZuPj0wP3M9cyt0aGlzLnN0cmlkZVsyXSpufDA6KGEucHVzaCh0aGlzLnNoYXBlWzJdKSxvLnB1c2godGhpcy5zdHJpZGVbMl0pKSwibnVtYmVyIj09dHlwZW9mIGkmJmk+PTA/cz1zK3RoaXMuc3RyaWRlWzNdKml8MDooYS5wdXNoKHRoaXMuc2hhcGVbM10pLG8ucHVzaCh0aGlzLnN0cmlkZVszXSkpLCgwLGVbYS5sZW5ndGgrMV0pKHRoaXMuZGF0YSxhLG8scyl9LGZ1bmN0aW9uKHQsZSxyLGkpe3JldHVybiBuZXcgbih0LGVbMF0sZVsxXSxlWzJdLGVbM10sclswXSxyWzFdLHJbMl0sclszXSxpKX19LDU6ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYpe3RoaXMuZGF0YT10LHRoaXMuc2hhcGU9W2UscixuLGksYV0sdGhpcy5zdHJpZGU9W28scyxsLGMsdV0sdGhpcy5vZmZzZXQ9MHxmfXZhciBpPW4ucHJvdG90eXBlO3JldHVybiBpLmR0eXBlPXQsaS5kaW1lbnNpb249NSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYXBlWzBdKnRoaXMuc2hhcGVbMV0qdGhpcy5zaGFwZVsyXSp0aGlzLnNoYXBlWzNdKnRoaXMuc2hhcGVbNF19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIm9yZGVyIix7Z2V0OnJ9KSxpLnNldD1mdW5jdGlvbihlLHIsbixpLGEsbyl7cmV0dXJuImdlbmVyaWMiPT09dD90aGlzLmRhdGEuc2V0KHRoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUrdGhpcy5zdHJpZGVbMV0qcit0aGlzLnN0cmlkZVsyXSpuK3RoaXMuc3RyaWRlWzNdKmkrdGhpcy5zdHJpZGVbNF0qYSxvKTp0aGlzLmRhdGFbdGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyK3RoaXMuc3RyaWRlWzJdKm4rdGhpcy5zdHJpZGVbM10qaSt0aGlzLnN0cmlkZVs0XSphXT1vfSxpLmdldD1mdW5jdGlvbihlLHIsbixpLGEpe3JldHVybiJnZW5lcmljIj09PXQ/dGhpcy5kYXRhLmdldCh0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIrdGhpcy5zdHJpZGVbMl0qbit0aGlzLnN0cmlkZVszXSppK3RoaXMuc3RyaWRlWzRdKmEpOnRoaXMuZGF0YVt0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIrdGhpcy5zdHJpZGVbMl0qbit0aGlzLnN0cmlkZVszXSppK3RoaXMuc3RyaWRlWzRdKmFdfSxpLmluZGV4PWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHRoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKnQrdGhpcy5zdHJpZGVbMV0qZSt0aGlzLnN0cmlkZVsyXSpyK3RoaXMuc3RyaWRlWzNdKm4rdGhpcy5zdHJpZGVbNF0qaX0saS5oaT1mdW5jdGlvbih0LGUscixpLGEpe3JldHVybiBuZXcgbih0aGlzLmRhdGEsIm51bWJlciIhPXR5cGVvZiB0fHx0PDA/dGhpcy5zaGFwZVswXTowfHQsIm51bWJlciIhPXR5cGVvZiBlfHxlPDA/dGhpcy5zaGFwZVsxXTowfGUsIm51bWJlciIhPXR5cGVvZiByfHxyPDA/dGhpcy5zaGFwZVsyXTowfHIsIm51bWJlciIhPXR5cGVvZiBpfHxpPDA/dGhpcy5zaGFwZVszXTowfGksIm51bWJlciIhPXR5cGVvZiBhfHxhPDA/dGhpcy5zaGFwZVs0XTowfGEsdGhpcy5zdHJpZGVbMF0sdGhpcy5zdHJpZGVbMV0sdGhpcy5zdHJpZGVbMl0sdGhpcy5zdHJpZGVbM10sdGhpcy5zdHJpZGVbNF0sdGhpcy5vZmZzZXQpfSxpLmxvPWZ1bmN0aW9uKHQsZSxyLGksYSl7dmFyIG89dGhpcy5vZmZzZXQscz0wLGw9dGhpcy5zaGFwZVswXSxjPXRoaXMuc2hhcGVbMV0sdT10aGlzLnNoYXBlWzJdLGY9dGhpcy5zaGFwZVszXSxoPXRoaXMuc2hhcGVbNF0scD10aGlzLnN0cmlkZVswXSxkPXRoaXMuc3RyaWRlWzFdLG09dGhpcy5zdHJpZGVbMl0sZz10aGlzLnN0cmlkZVszXSx2PXRoaXMuc3RyaWRlWzRdO3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD49MCYmKG8rPXAqKHM9MHx0KSxsLT1zKSwibnVtYmVyIj09dHlwZW9mIGUmJmU+PTAmJihvKz1kKihzPTB8ZSksYy09cyksIm51bWJlciI9PXR5cGVvZiByJiZyPj0wJiYobys9bSoocz0wfHIpLHUtPXMpLCJudW1iZXIiPT10eXBlb2YgaSYmaT49MCYmKG8rPWcqKHM9MHxpKSxmLT1zKSwibnVtYmVyIj09dHlwZW9mIGEmJmE+PTAmJihvKz12KihzPTB8YSksaC09cyksbmV3IG4odGhpcy5kYXRhLGwsYyx1LGYsaCxwLGQsbSxnLHYsbyl9LGkuc3RlcD1mdW5jdGlvbih0LGUscixpLGEpe3ZhciBvPXRoaXMuc2hhcGVbMF0scz10aGlzLnNoYXBlWzFdLGw9dGhpcy5zaGFwZVsyXSxjPXRoaXMuc2hhcGVbM10sdT10aGlzLnNoYXBlWzRdLGY9dGhpcy5zdHJpZGVbMF0saD10aGlzLnN0cmlkZVsxXSxwPXRoaXMuc3RyaWRlWzJdLGQ9dGhpcy5zdHJpZGVbM10sbT10aGlzLnN0cmlkZVs0XSxnPXRoaXMub2Zmc2V0LHY9MCx5PU1hdGguY2VpbDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJigodj0wfHQpPDA/KGcrPWYqKG8tMSksbz15KC1vL3YpKTpvPXkoby92KSxmKj12KSwibnVtYmVyIj09dHlwZW9mIGUmJigodj0wfGUpPDA/KGcrPWgqKHMtMSkscz15KC1zL3YpKTpzPXkocy92KSxoKj12KSwibnVtYmVyIj09dHlwZW9mIHImJigodj0wfHIpPDA/KGcrPXAqKGwtMSksbD15KC1sL3YpKTpsPXkobC92KSxwKj12KSwibnVtYmVyIj09dHlwZW9mIGkmJigodj0wfGkpPDA/KGcrPWQqKGMtMSksYz15KC1jL3YpKTpjPXkoYy92KSxkKj12KSwibnVtYmVyIj09dHlwZW9mIGEmJigodj0wfGEpPDA/KGcrPW0qKHUtMSksdT15KC11L3YpKTp1PXkodS92KSxtKj12KSxuZXcgbih0aGlzLmRhdGEsbyxzLGwsYyx1LGYsaCxwLGQsbSxnKX0saS50cmFuc3Bvc2U9ZnVuY3Rpb24odCxlLHIsaSxhKXt0PXZvaWQgMD09PXQ/MDowfHQsZT12b2lkIDA9PT1lPzE6MHxlLHI9dm9pZCAwPT09cj8yOjB8cixpPXZvaWQgMD09PWk/MzowfGksYT12b2lkIDA9PT1hPzQ6MHxhO3ZhciBvPXRoaXMuc2hhcGUscz10aGlzLnN0cmlkZTtyZXR1cm4gbmV3IG4odGhpcy5kYXRhLG9bdF0sb1tlXSxvW3JdLG9baV0sb1thXSxzW3RdLHNbZV0sc1tyXSxzW2ldLHNbYV0sdGhpcy5vZmZzZXQpfSxpLnBpY2s9ZnVuY3Rpb24odCxyLG4saSxhKXt2YXIgbz1bXSxzPVtdLGw9dGhpcy5vZmZzZXQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wP2w9bCt0aGlzLnN0cmlkZVswXSp0fDA6KG8ucHVzaCh0aGlzLnNoYXBlWzBdKSxzLnB1c2godGhpcy5zdHJpZGVbMF0pKSwibnVtYmVyIj09dHlwZW9mIHImJnI+PTA/bD1sK3RoaXMuc3RyaWRlWzFdKnJ8MDooby5wdXNoKHRoaXMuc2hhcGVbMV0pLHMucHVzaCh0aGlzLnN0cmlkZVsxXSkpLCJudW1iZXIiPT10eXBlb2YgbiYmbj49MD9sPWwrdGhpcy5zdHJpZGVbMl0qbnwwOihvLnB1c2godGhpcy5zaGFwZVsyXSkscy5wdXNoKHRoaXMuc3RyaWRlWzJdKSksIm51bWJlciI9PXR5cGVvZiBpJiZpPj0wP2w9bCt0aGlzLnN0cmlkZVszXSppfDA6KG8ucHVzaCh0aGlzLnNoYXBlWzNdKSxzLnB1c2godGhpcy5zdHJpZGVbM10pKSwibnVtYmVyIj09dHlwZW9mIGEmJmE+PTA/bD1sK3RoaXMuc3RyaWRlWzRdKmF8MDooby5wdXNoKHRoaXMuc2hhcGVbNF0pLHMucHVzaCh0aGlzLnN0cmlkZVs0XSkpLCgwLGVbby5sZW5ndGgrMV0pKHRoaXMuZGF0YSxvLHMsbCl9LGZ1bmN0aW9uKHQsZSxyLGkpe3JldHVybiBuZXcgbih0LGVbMF0sZVsxXSxlWzJdLGVbM10sZVs0XSxyWzBdLHJbMV0sclsyXSxyWzNdLHJbNF0saSl9fX07ZnVuY3Rpb24gbCh0LGUpe3ZhciByPS0xPT09ZT8iVCI6U3RyaW5nKGUpLG49c1tyXTtyZXR1cm4tMT09PWU/bih0KTowPT09ZT9uKHQsY1t0XVswXSk6bih0LGNbdF0sbyl9dmFyIGM9e2dlbmVyaWM6W10sYnVmZmVyOltdLGFycmF5OltdLGZsb2F0MzI6W10sZmxvYXQ2NDpbXSxpbnQ4OltdLGludDE2OltdLGludDMyOltdLHVpbnQ4X2NsYW1wZWQ6W10sdWludDg6W10sdWludDE2OltdLHVpbnQzMjpbXSxiaWdpbnQ2NDpbXSxiaWd1aW50NjQ6W119O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtpZih2b2lkIDA9PT10KXJldHVybigwLGMuYXJyYXlbMF0pKFtdKTsibnVtYmVyIj09dHlwZW9mIHQmJih0PVt0XSksdm9pZCAwPT09ZSYmKGU9W3QubGVuZ3RoXSk7dmFyIG89ZS5sZW5ndGg7aWYodm9pZCAwPT09cil7cj1uZXcgQXJyYXkobyk7Zm9yKHZhciBzPW8tMSx1PTE7cz49MDstLXMpcltzXT11LHUqPWVbc119aWYodm9pZCAwPT09YSl7YT0wO2ZvcihzPTA7czxvOysrcylyW3NdPDAmJihhLT0oZVtzXS0xKSpyW3NdKX1mb3IodmFyIGY9ZnVuY3Rpb24odCl7aWYobih0KSlyZXR1cm4iYnVmZmVyIjtpZihpKXN3aXRjaChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpe2Nhc2UiW29iamVjdCBGbG9hdDY0QXJyYXldIjpyZXR1cm4iZmxvYXQ2NCI7Y2FzZSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iOnJldHVybiJmbG9hdDMyIjtjYXNlIltvYmplY3QgSW50OEFycmF5XSI6cmV0dXJuImludDgiO2Nhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6cmV0dXJuImludDE2IjtjYXNlIltvYmplY3QgSW50MzJBcnJheV0iOnJldHVybiJpbnQzMiI7Y2FzZSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI6cmV0dXJuInVpbnQ4X2NsYW1wZWQiO2Nhc2UiW29iamVjdCBVaW50OEFycmF5XSI6cmV0dXJuInVpbnQ4IjtjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpyZXR1cm4idWludDE2IjtjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4idWludDMyIjtjYXNlIltvYmplY3QgQmlnSW50NjRBcnJheV0iOnJldHVybiJiaWdpbnQ2NCI7Y2FzZSJbb2JqZWN0IEJpZ1VpbnQ2NEFycmF5XSI6cmV0dXJuImJpZ3VpbnQ2NCJ9cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/ImFycmF5IjoiZ2VuZXJpYyJ9KHQpLGg9Y1tmXTtoLmxlbmd0aDw9bysxOyloLnB1c2gobChmLGgubGVuZ3RoLTEpKTtyZXR1cm4oMCxoW28rMV0pKHQsZSxyLGEpfX0seyJpcy1idWZmZXIiOjQzM31dLDQ2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkb3VibGUtYml0cyIpLGk9TWF0aC5wb3coMiwtMTA3NCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXJldHVybiBOYU47aWYodD09PWUpcmV0dXJuIHQ7aWYoMD09PXQpcmV0dXJuIGU8MD8taTppO3ZhciByPW4uaGkodCksYT1uLmxvKHQpO2U+dD09dD4wP2E9PT0tMT4+PjA/KHIrPTEsYT0wKTphKz0xOjA9PT1hPyhhPS0xPj4+MCxyLT0xKTphLT0xO3JldHVybiBuLnBhY2soYSxyKX19LHsiZG91YmxlLWJpdHMiOjE3NH1dLDQ2NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguUEksaT1jKDEyMCk7ZnVuY3Rpb24gYSh0LGUscixuKXtyZXR1cm5bIkMiLHQsZSxyLG4scixuXX1mdW5jdGlvbiBvKHQsZSxyLG4saSxhKXtyZXR1cm5bIkMiLHQvMysyLzMqcixlLzMrMi8zKm4saS8zKzIvMypyLGEvMysyLzMqbixpLGFdfWZ1bmN0aW9uIHModCxlLHIsYSxvLGMsdSxmLGgscCl7aWYocClUPXBbMF0saz1wWzFdLF89cFsyXSx3PXBbM107ZWxzZXt2YXIgZD1sKHQsZSwtbyk7dD1kLngsZT1kLnk7dmFyIG09KHQtKGY9KGQ9bChmLGgsLW8pKS54KSkvMixnPShlLShoPWQueSkpLzIsdj1tKm0vKHIqcikrZypnLyhhKmEpO3Y+MSYmKHIqPXY9TWF0aC5zcXJ0KHYpLGEqPXYpO3ZhciB5PXIqcix4PWEqYSxiPShjPT11Py0xOjEpKk1hdGguc3FydChNYXRoLmFicygoeSp4LXkqZypnLXgqbSptKS8oeSpnKmcreCptKm0pKSk7Yj09MS8wJiYoYj0xKTt2YXIgXz1iKnIqZy9hKyh0K2YpLzIsdz1iKi1hKm0vcisoZStoKS8yLFQ9TWF0aC5hc2luKCgoZS13KS9hKS50b0ZpeGVkKDkpKSxrPU1hdGguYXNpbigoKGgtdykvYSkudG9GaXhlZCg5KSk7KFQ9dDxfP24tVDpUKTwwJiYoVD0yKm4rVCksKGs9ZjxfP24tazprKTwwJiYoaz0yKm4rayksdSYmVD5rJiYoVC09MipuKSwhdSYmaz5UJiYoay09MipuKX1pZihNYXRoLmFicyhrLVQpPmkpe3ZhciBBPWssTT1mLFM9aDtrPVQraSoodSYmaz5UPzE6LTEpO3ZhciBFPXMoZj1fK3IqTWF0aC5jb3MoayksaD13K2EqTWF0aC5zaW4oaykscixhLG8sMCx1LE0sUyxbayxBLF8sd10pfXZhciBMPU1hdGgudGFuKChrLVQpLzQpLEM9NC8zKnIqTCxQPTQvMyphKkwsST1bMip0LSh0K0MqTWF0aC5zaW4oVCkpLDIqZS0oZS1QKk1hdGguY29zKFQpKSxmK0MqTWF0aC5zaW4oayksaC1QKk1hdGguY29zKGspLGYsaF07aWYocClyZXR1cm4gSTtFJiYoST1JLmNvbmNhdChFKSk7Zm9yKHZhciBPPTA7TzxJLmxlbmd0aDspe3ZhciB6PWwoSVtPXSxJW08rMV0sbyk7SVtPKytdPXoueCxJW08rK109ei55fXJldHVybiBJfWZ1bmN0aW9uIGwodCxlLHIpe3JldHVybnt4OnQqTWF0aC5jb3MociktZSpNYXRoLnNpbihyKSx5OnQqTWF0aC5zaW4ocikrZSpNYXRoLmNvcyhyKX19ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdCoobi8xODApfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj1bXSxuPTAsaT0wLGw9MCx1PTAsZj1udWxsLGg9bnVsbCxwPTAsZD0wLG09MCxnPXQubGVuZ3RoO208ZzttKyspe3ZhciB2PXRbbV0seT12WzBdO3N3aXRjaCh5KXtjYXNlIk0iOmw9dlsxXSx1PXZbMl07YnJlYWs7Y2FzZSJBIjoodj1zKHAsZCx2WzFdLHZbMl0sYyh2WzNdKSx2WzRdLHZbNV0sdls2XSx2WzddKSkudW5zaGlmdCgiQyIpLHYubGVuZ3RoPjcmJihyLnB1c2godi5zcGxpY2UoMCw3KSksdi51bnNoaWZ0KCJDIikpO2JyZWFrO2Nhc2UiUyI6dmFyIHg9cCxiPWQ7IkMiIT1lJiYiUyIhPWV8fCh4Kz14LW4sYis9Yi1pKSx2PVsiQyIseCxiLHZbMV0sdlsyXSx2WzNdLHZbNF1dO2JyZWFrO2Nhc2UiVCI6IlEiPT1lfHwiVCI9PWU/KGY9MipwLWYsaD0yKmQtaCk6KGY9cCxoPWQpLHY9byhwLGQsZixoLHZbMV0sdlsyXSk7YnJlYWs7Y2FzZSJRIjpmPXZbMV0saD12WzJdLHY9byhwLGQsdlsxXSx2WzJdLHZbM10sdls0XSk7YnJlYWs7Y2FzZSJMIjp2PWEocCxkLHZbMV0sdlsyXSk7YnJlYWs7Y2FzZSJIIjp2PWEocCxkLHZbMV0sZCk7YnJlYWs7Y2FzZSJWIjp2PWEocCxkLHAsdlsxXSk7YnJlYWs7Y2FzZSJaIjp2PWEocCxkLGwsdSl9ZT15LHA9dlt2Lmxlbmd0aC0yXSxkPXZbdi5sZW5ndGgtMV0sdi5sZW5ndGg+ND8obj12W3YubGVuZ3RoLTRdLGk9dlt2Lmxlbmd0aC0zXSk6KG49cCxpPWQpLHIucHVzaCh2KX1yZXR1cm4gcn19LHt9XSw0NjU6W2Z1bmN0aW9uKHQsZSxyKXtyLnZlcnRleE5vcm1hbHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPXZvaWQgMD09PXI/MWUtNjpyLG89MDtvPG47KytvKWlbb109WzAsMCwwXTtmb3Iobz0wO288dC5sZW5ndGg7KytvKWZvcih2YXIgcz10W29dLGw9MCxjPXNbcy5sZW5ndGgtMV0sdT1zWzBdLGY9MDtmPHMubGVuZ3RoOysrZil7bD1jLGM9dSx1PXNbKGYrMSklcy5sZW5ndGhdO2Zvcih2YXIgaD1lW2xdLHA9ZVtjXSxkPWVbdV0sbT1uZXcgQXJyYXkoMyksZz0wLHY9bmV3IEFycmF5KDMpLHk9MCx4PTA7eDwzOysreCltW3hdPWhbeF0tcFt4XSxnKz1tW3hdKm1beF0sdlt4XT1kW3hdLXBbeF0seSs9dlt4XSp2W3hdO2lmKGcqeT5hKXt2YXIgYj1pW2NdLF89MS9NYXRoLnNxcnQoZyp5KTtmb3IoeD0wO3g8MzsrK3gpe3ZhciB3PSh4KzEpJTMsVD0oeCsyKSUzO2JbeF0rPV8qKHZbd10qbVtUXS12W1RdKm1bd10pfX19Zm9yKG89MDtvPG47KytvKXtiPWlbb107dmFyIGs9MDtmb3IoeD0wO3g8MzsrK3gpays9Ylt4XSpiW3hdO2lmKGs+YSlmb3IoXz0xL01hdGguc3FydChrKSx4PTA7eDwzOysreCliW3hdKj1fO2Vsc2UgZm9yKHg9MDt4PDM7Kyt4KWJbeF09MH1yZXR1cm4gaX0sci5mYWNlTm9ybWFscz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9dm9pZCAwPT09cj8xZS02OnIsbz0wO288bjsrK28pe2Zvcih2YXIgcz10W29dLGw9bmV3IEFycmF5KDMpLGM9MDtjPDM7KytjKWxbY109ZVtzW2NdXTt2YXIgdT1uZXcgQXJyYXkoMyksZj1uZXcgQXJyYXkoMyk7Zm9yKGM9MDtjPDM7KytjKXVbY109bFsxXVtjXS1sWzBdW2NdLGZbY109bFsyXVtjXS1sWzBdW2NdO3ZhciBoPW5ldyBBcnJheSgzKSxwPTA7Zm9yKGM9MDtjPDM7KytjKXt2YXIgZD0oYysxKSUzLG09KGMrMiklMztoW2NdPXVbZF0qZlttXS11W21dKmZbZF0scCs9aFtjXSpoW2NdfXA9cD5hPzEvTWF0aC5zcXJ0KHApOjA7Zm9yKGM9MDtjPDM7KytjKWhbY10qPXA7aVtvXT1ofXJldHVybiBpfX0se31dLDQ2NjpbZnVuY3Rpb24odCxlLHIpewovKgpvYmplY3QtYXNzaWduCihjKSBTaW5kcmUgU29yaHVzCkBsaWNlbnNlIE1JVAoqLwoidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2Z1bmN0aW9uIG8odCl7aWYobnVsbD09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiBPYmplY3QodCl9ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciB0PW5ldyBTdHJpbmcoImFiYyIpO2lmKHRbNV09ImRlIiwiNSI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KVswXSlyZXR1cm4hMTtmb3IodmFyIGU9e30scj0wO3I8MTA7cisrKWVbIl8iK1N0cmluZy5mcm9tQ2hhckNvZGUocildPXI7aWYoIjAxMjM0NTY3ODkiIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKS5qb2luKCIiKSlyZXR1cm4hMTt2YXIgbj17fTtyZXR1cm4iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNwbGl0KCIiKS5mb3JFYWNoKChmdW5jdGlvbih0KXtuW3RdPXR9KSksImFiY2RlZmdoaWprbG1ub3BxcnN0Ij09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sbikpLmpvaW4oIiIpfWNhdGNoKHQpe3JldHVybiExfX0oKT9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLHMsbD1vKHQpLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXtmb3IodmFyIHUgaW4gcj1PYmplY3QoYXJndW1lbnRzW2NdKSlpLmNhbGwocix1KSYmKGxbdV09clt1XSk7aWYobil7cz1uKHIpO2Zvcih2YXIgZj0wO2Y8cy5sZW5ndGg7ZisrKWEuY2FsbChyLHNbZl0pJiYobFtzW2ZdXT1yW3NbZl1dKX19cmV0dXJuIGx9fSx7fV0sNDY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT1lK2ErYztpZihmPjApe3ZhciBmPU1hdGguc3FydCh1KzEpO3RbMF09LjUqKG8tbCkvZix0WzFdPS41KihzLW4pL2YsdFsyXT0uNSooci1hKS9mLHRbM109LjUqZn1lbHNle3ZhciBoPU1hdGgubWF4KGUsYSxjKTtmPU1hdGguc3FydCgyKmgtdSsxKTtlPj1oPyh0WzBdPS41KmYsdFsxXT0uNSooaStyKS9mLHRbMl09LjUqKHMrbikvZix0WzNdPS41KihvLWwpL2YpOmE+PWg/KHRbMF09LjUqKHIraSkvZix0WzFdPS41KmYsdFsyXT0uNSoobCtvKS9mLHRbM109LjUqKHMtbikvZik6KHRbMF09LjUqKG4rcykvZix0WzFdPS41KihvK2wpL2YsdFsyXT0uNSpmLHRbM109LjUqKHItaSkvZil9cmV0dXJuIHR9fSx7fV0sNDY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuY2VudGVyfHxbMCwwLDBdLHI9dC5yb3RhdGlvbnx8WzAsMCwwLDFdLG49dC5yYWRpdXN8fDE7ZT1bXS5zbGljZS5jYWxsKGUsMCwzKSx1KHI9W10uc2xpY2UuY2FsbChyLDAsNCkscik7dmFyIGk9bmV3IGYocixlLE1hdGgubG9nKG4pKTtpLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpLCgiZXllImluIHR8fCJ1cCJpbiB0KSYmaS5sb29rQXQoMCx0LmV5ZSx0LmNlbnRlcix0LnVwKTtyZXR1cm4gaX07dmFyIG49dCgiZmlsdGVyZWQtdmVjdG9yIiksaT10KCJnbC1tYXQ0L2xvb2tBdCIpLGE9dCgiZ2wtbWF0NC9mcm9tUXVhdCIpLG89dCgiZ2wtbWF0NC9pbnZlcnQiKSxzPXQoIi4vbGliL3F1YXRGcm9tRnJhbWUiKTtmdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiBjKHQsZSxyLG4pe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikrTWF0aC5wb3cobiwyKSl9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1jKHIsbixpLGEpO28+MWUtNj8odFswXT1yL28sdFsxXT1uL28sdFsyXT1pL28sdFszXT1hL28pOih0WzBdPXRbMV09dFsyXT0wLHRbM109MSl9ZnVuY3Rpb24gZih0LGUscil7dGhpcy5yYWRpdXM9bihbcl0pLHRoaXMuY2VudGVyPW4oZSksdGhpcy5yb3RhdGlvbj1uKHQpLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5yYWRpdXMuY3VydmUoMCksdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLmNlbnRlci5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUm90YXRpb249dGhpcy5yb3RhdGlvbi5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVXA9Wy4xLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bLjEsMCwwXSx0aGlzLmNvbXB1dGVkTWF0cml4PVsuMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sdGhpcy5yZWNhbGNNYXRyaXgoMCl9dmFyIGg9Zi5wcm90b3R5cGU7aC5sYXN0VD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heCh0aGlzLnJhZGl1cy5sYXN0VCgpLHRoaXMuY2VudGVyLmxhc3RUKCksdGhpcy5yb3RhdGlvbi5sYXN0VCgpKX0saC5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5yYWRpdXMuY3VydmUodCksdGhpcy5jZW50ZXIuY3VydmUodCksdGhpcy5yb3RhdGlvbi5jdXJ2ZSh0KTt2YXIgZT10aGlzLmNvbXB1dGVkUm90YXRpb247dShlLGUpO3ZhciByPXRoaXMuY29tcHV0ZWRNYXRyaXg7YShyLGUpO3ZhciBuPXRoaXMuY29tcHV0ZWRDZW50ZXIsaT10aGlzLmNvbXB1dGVkRXllLG89dGhpcy5jb21wdXRlZFVwLHM9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7aVswXT1uWzBdK3MqclsyXSxpWzFdPW5bMV0rcypyWzZdLGlbMl09blsyXStzKnJbMTBdLG9bMF09clsxXSxvWzFdPXJbNV0sb1syXT1yWzldO2Zvcih2YXIgbD0wO2w8MzsrK2wpe2Zvcih2YXIgYz0wLGY9MDtmPDM7KytmKWMrPXJbbCs0KmZdKmlbZl07clsxMitsXT0tY319LGguZ2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIHI9dGhpcy5jb21wdXRlZE1hdHJpeDtpZihlKXtmb3IodmFyIG49MDtuPDE2OysrbillW25dPXJbbl07cmV0dXJuIGV9cmV0dXJuIHJ9LGguaWRsZT1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMucmFkaXVzLmlkbGUodCksdGhpcy5yb3RhdGlvbi5pZGxlKHQpfSxoLmZsdXNoPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmZsdXNoKHQpLHRoaXMucmFkaXVzLmZsdXNoKHQpLHRoaXMucm90YXRpb24uZmx1c2godCl9LGgucGFuPWZ1bmN0aW9uKHQsZSxyLG4pe2U9ZXx8MCxyPXJ8fDAsbj1ufHwwLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT1pWzFdLG89aVs1XSxzPWlbOV0sYz1sKGEsbyxzKTthLz1jLG8vPWMscy89Yzt2YXIgdT1pWzBdLGY9aVs0XSxoPWlbOF0scD11KmErZipvK2gqcyxkPWwodS09YSpwLGYtPW8qcCxoLT1zKnApO3UvPWQsZi89ZCxoLz1kO3ZhciBtPWlbMl0sZz1pWzZdLHY9aVsxMF0seT1tKmErZypvK3Yqcyx4PW0qdStnKmYrdipoLGI9bChtLT15KmEreCp1LGctPXkqbyt4KmYsdi09eSpzK3gqaCk7bS89YixnLz1iLHYvPWI7dmFyIF89dSplK2Eqcix3PWYqZStvKnIsVD1oKmUrcypyO3RoaXMuY2VudGVyLm1vdmUodCxfLHcsVCk7dmFyIGs9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7az1NYXRoLm1heCgxZS00LGsrbiksdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coaykpfSxoLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fDAscj1yfHwwO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT1pWzBdLG89aVs0XSxzPWlbOF0sdT1pWzFdLGY9aVs1XSxoPWlbOV0scD1pWzJdLGQ9aVs2XSxtPWlbMTBdLGc9ZSphK3IqdSx2PWUqbytyKmYseT1lKnMrcipoLHg9LShkKnktbSp2KSxiPS0obSpnLXAqeSksXz0tKHAqdi1kKmcpLHc9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMS1NYXRoLnBvdyh4LDIpLU1hdGgucG93KGIsMiktTWF0aC5wb3coXywyKSkpLFQ9Yyh4LGIsXyx3KTtUPjFlLTY/KHgvPVQsYi89VCxfLz1ULHcvPVQpOih4PWI9Xz0wLHc9MSk7dmFyIGs9dGhpcy5jb21wdXRlZFJvdGF0aW9uLEE9a1swXSxNPWtbMV0sUz1rWzJdLEU9a1szXSxMPUEqdytFKngrTSpfLVMqYixDPU0qdytFKmIrUyp4LUEqXyxQPVMqdytFKl8rQSpiLU0qeCxJPUUqdy1BKngtTSpiLVMqXztpZihuKXt4PXAsYj1kLF89bTt2YXIgTz1NYXRoLnNpbihuKS9sKHgsYixfKTt4Kj1PLGIqPU8sXyo9TyxJPUkqKHc9TWF0aC5jb3MoZSkpLShMPUwqdytJKngrQypfLVAqYikqeC0oQz1DKncrSSpiK1AqeC1MKl8pKmItKFA9UCp3K0kqXytMKmItQyp4KSpffXZhciB6PWMoTCxDLFAsSSk7ej4xZS02PyhMLz16LEMvPXosUC89eixJLz16KTooTD1DPVA9MCxJPTEpLHRoaXMucm90YXRpb24uc2V0KHQsTCxDLFAsSSl9LGgubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLHI9cnx8dGhpcy5jb21wdXRlZENlbnRlcixlPWV8fHRoaXMuY29tcHV0ZWRFeWUsbj1ufHx0aGlzLmNvbXB1dGVkVXA7dmFyIGE9dGhpcy5jb21wdXRlZE1hdHJpeDtpKGEsZSxyLG4pO3ZhciBvPXRoaXMuY29tcHV0ZWRSb3RhdGlvbjtzKG8sYVswXSxhWzFdLGFbMl0sYVs0XSxhWzVdLGFbNl0sYVs4XSxhWzldLGFbMTBdKSx1KG8sbyksdGhpcy5yb3RhdGlvbi5zZXQodCxvWzBdLG9bMV0sb1syXSxvWzNdKTtmb3IodmFyIGw9MCxjPTA7YzwzOysrYylsKz1NYXRoLnBvdyhyW2NdLWVbY10sMik7dGhpcy5yYWRpdXMuc2V0KHQsLjUqTWF0aC5sb2coTWF0aC5tYXgobCwxZS02KSkpLHRoaXMuY2VudGVyLnNldCh0LHJbMF0sclsxXSxyWzJdKX0saC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jZW50ZXIubW92ZSh0LGV8fDAscnx8MCxufHwwKX0saC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmNvbXB1dGVkUm90YXRpb247cyhyLGVbMF0sZVsxXSxlWzJdLGVbNF0sZVs1XSxlWzZdLGVbOF0sZVs5XSxlWzEwXSksdShyLHIpLHRoaXMucm90YXRpb24uc2V0KHQsclswXSxyWzFdLHJbMl0sclszXSk7dmFyIG49dGhpcy5jb21wdXRlZE1hdHJpeDtvKG4sZSk7dmFyIGk9blsxNV07aWYoTWF0aC5hYnMoaSk+MWUtNil7dmFyIGE9blsxMl0vaSxsPW5bMTNdL2ksYz1uWzE0XS9pO3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBmPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3RoaXMuY2VudGVyLnNldCh0LGEtblsyXSpmLGwtbls2XSpmLGMtblsxMF0qZiksdGhpcy5yYWRpdXMuaWRsZSh0KX1lbHNlIHRoaXMuY2VudGVyLmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KX0saC5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe2U+MCYmdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coZSkpfSxoLnNldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQsZSl7dD10PjA/TWF0aC5sb2codCk6LTEvMCxlPWU+MD9NYXRoLmxvZyhlKToxLzAsZT1NYXRoLm1heChlLHQpLHRoaXMucmFkaXVzLmJvdW5kc1swXVswXT10LHRoaXMucmFkaXVzLmJvdW5kc1sxXVswXT1lfSxoLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucmFkaXVzLmJvdW5kcztyZXR1cm4gdD8odFswXT1NYXRoLmV4cChlWzBdWzBdKSx0WzFdPU1hdGguZXhwKGVbMV1bMF0pLHQpOltNYXRoLmV4cChlWzBdWzBdKSxNYXRoLmV4cChlWzFdWzBdKV19LGgudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjYWxjTWF0cml4KHRoaXMubGFzdFQoKSkse2NlbnRlcjp0aGlzLmNvbXB1dGVkQ2VudGVyLnNsaWNlKCkscm90YXRpb246dGhpcy5jb21wdXRlZFJvdGF0aW9uLnNsaWNlKCksZGlzdGFuY2U6TWF0aC5sb2codGhpcy5jb21wdXRlZFJhZGl1c1swXSksem9vbU1pbjp0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF0sem9vbU1heDp0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF19fSxoLmZyb21KU09OPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXQuY2VudGVyO3ImJnRoaXMuY2VudGVyLnNldChlLHJbMF0sclsxXSxyWzJdKTt2YXIgbj10LnJvdGF0aW9uO24mJnRoaXMucm90YXRpb24uc2V0KGUsblswXSxuWzFdLG5bMl0sblszXSk7dmFyIGk9dC5kaXN0YW5jZTtpJiZpPjAmJnRoaXMucmFkaXVzLnNldChlLE1hdGgubG9nKGkpKSx0aGlzLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpfX0seyIuL2xpYi9xdWF0RnJvbUZyYW1lIjo0NjcsImZpbHRlcmVkLXZlY3RvciI6MjQzLCJnbC1tYXQ0L2Zyb21RdWF0IjoyNzYsImdsLW1hdDQvaW52ZXJ0IjoyODcsImdsLW1hdDQvbG9va0F0IjoyODh9XSw0Njk6W2Z1bmN0aW9uKHQsZSxyKXsKLyohCiAqIHBhZC1sZWZ0IDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9wYWQtbGVmdD4KICoKICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEpvbiBTY2hsaW5rZXJ0LgogKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCiAqLwoidXNlIHN0cmljdCI7dmFyIG49dCgicmVwZWF0LXN0cmluZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4ocj12b2lkIDAhPT1yP3IrIiI6IiAiLGUpK3R9fSx7InJlcGVhdC1zdHJpbmciOjUxN31dLDQ3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVyblt0XTt2YXIgcj1bdF07InN0cmluZyI9PXR5cGVvZiBlfHxBcnJheS5pc0FycmF5KGUpP2U9e2JyYWNrZXRzOmV9OmV8fChlPXt9KTt2YXIgbj1lLmJyYWNrZXRzP0FycmF5LmlzQXJyYXkoZS5icmFja2V0cyk/ZS5icmFja2V0czpbZS5icmFja2V0c106WyJ7fSIsIltdIiwiKCkiXSxpPWUuZXNjYXBlfHwiX19fIixhPSEhZS5mbGF0O24uZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bmV3IFJlZ0V4cChbIlxcIix0WzBdLCJbXlxcIix0WzBdLCJcXCIsdFsxXSwiXSpcXCIsdFsxXV0uam9pbigiIikpLG49W107ZnVuY3Rpb24gYShlLGEsbyl7dmFyIHM9ci5wdXNoKGUuc2xpY2UodFswXS5sZW5ndGgsLXRbMV0ubGVuZ3RoKSktMTtyZXR1cm4gbi5wdXNoKHMpLGkrcytpfXIuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXtmb3IodmFyIGksbz0wO3QhPWk7KWlmKGk9dCx0PXQucmVwbGFjZShlLGEpLG8rKz4xZTQpdGhyb3cgRXJyb3IoIlJlZmVyZW5jZXMgaGF2ZSBjaXJjdWxhciBkZXBlbmRlbmN5LiBQbGVhc2UsIGNoZWNrIHRoZW0uIik7cltuXT10fSkpLG49bi5yZXZlcnNlKCkscj1yLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24ocil7ZT1lLnJlcGxhY2UobmV3IFJlZ0V4cCgiKFxcIitpK3IrIlxcIitpKyIpIiwiZyIpLHRbMF0rIiQxIit0WzFdKX0pKSxlfSkpfSkpO3ZhciBvPW5ldyBSZWdFeHAoIlxcIitpKyIoWzAtOV0rKVxcIitpKTtyZXR1cm4gYT9yOmZ1bmN0aW9uIHQoZSxyLG4pe2Zvcih2YXIgaSxhPVtdLHM9MDtpPW8uZXhlYyhlKTspe2lmKHMrKz4xZTQpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gcGFyZW50aGVzaXMiKTthLnB1c2goZS5zbGljZSgwLGkuaW5kZXgpKSxhLnB1c2godChyW2lbMV1dLHIpKSxlPWUuc2xpY2UoaS5pbmRleCtpWzBdLmxlbmd0aCl9cmV0dXJuIGEucHVzaChlKSxhfShyWzBdLHIpfWZ1bmN0aW9uIGkodCxlKXtpZihlJiZlLmZsYXQpe3ZhciByLG49ZSYmZS5lc2NhcGV8fCJfX18iLGk9dFswXTtpZighaSlyZXR1cm4iIjtmb3IodmFyIGE9bmV3IFJlZ0V4cCgiXFwiK24rIihbMC05XSspXFwiK24pLG89MDtpIT1yOyl7aWYobysrPjFlNCl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlcyBpbiAiK3QpO3I9aSxpPWkucmVwbGFjZShhLHMpfXJldHVybiBpfXJldHVybiB0LnJlZHVjZSgoZnVuY3Rpb24gdChlLHIpe3JldHVybiBBcnJheS5pc0FycmF5KHIpJiYocj1yLnJlZHVjZSh0LCIiKSksZStyfSksIiIpO2Z1bmN0aW9uIHMoZSxyKXtpZihudWxsPT10W3JdKXRocm93IEVycm9yKCJSZWZlcmVuY2UgIityKyJpcyB1bmRlZmluZWQiKTtyZXR1cm4gdFtyXX19ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP2kodCxlKTpuKHQsZSl9YS5wYXJzZT1uLGEuc3RyaW5naWZ5PWksZS5leHBvcnRzPWF9LHt9XSw0NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGljay1ieS1hbGlhcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTthcmd1bWVudHMubGVuZ3RoPjEmJih0PWFyZ3VtZW50cyk7InN0cmluZyI9PXR5cGVvZiB0P3Q9dC5zcGxpdCgvXHMvKS5tYXAocGFyc2VGbG9hdCk6Im51bWJlciI9PXR5cGVvZiB0JiYodD1bdF0pO3QubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIHRbMF0/ZT0xPT09dC5sZW5ndGg/e3dpZHRoOnRbMF0saGVpZ2h0OnRbMF0seDowLHk6MH06Mj09PXQubGVuZ3RoP3t3aWR0aDp0WzBdLGhlaWdodDp0WzFdLHg6MCx5OjB9Ont4OnRbMF0seTp0WzFdLHdpZHRoOnRbMl0tdFswXXx8MCxoZWlnaHQ6dFszXS10WzFdfHwwfTp0JiYodD1uKHQse2xlZnQ6InggbCBsZWZ0IExlZnQiLHRvcDoieSB0IHRvcCBUb3AiLHdpZHRoOiJ3IHdpZHRoIFcgV2lkdGgiLGhlaWdodDoiaCBoZWlnaHQgVyBXaWR0aCIsYm90dG9tOiJiIGJvdHRvbSBCb3R0b20iLHJpZ2h0OiJyIHJpZ2h0IFJpZ2h0In0pLGU9e3g6dC5sZWZ0fHwwLHk6dC50b3B8fDB9LG51bGw9PXQud2lkdGg/dC5yaWdodD9lLndpZHRoPXQucmlnaHQtZS54OmUud2lkdGg9MDplLndpZHRoPXQud2lkdGgsbnVsbD09dC5oZWlnaHQ/dC5ib3R0b20/ZS5oZWlnaHQ9dC5ib3R0b20tZS55OmUuaGVpZ2h0PTA6ZS5oZWlnaHQ9dC5oZWlnaHQpO3JldHVybiBlfX0seyJwaWNrLWJ5LWFsaWFzIjo0NzV9XSw0NzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIHQucmVwbGFjZShpLChmdW5jdGlvbih0LHIsaSl7dmFyIG89ci50b0xvd2VyQ2FzZSgpO2ZvcihpPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2goYSk7cmV0dXJuIGU/ZS5tYXAoTnVtYmVyKTpbXX0oaSksIm0iPT1vJiZpLmxlbmd0aD4yJiYoZS5wdXNoKFtyXS5jb25jYXQoaS5zcGxpY2UoMCwyKSkpLG89ImwiLHI9Im0iPT1yPyJsIjoiTCIpOzspe2lmKGkubGVuZ3RoPT1uW29dKXJldHVybiBpLnVuc2hpZnQociksZS5wdXNoKGkpO2lmKGkubGVuZ3RoPG5bb10pdGhyb3cgbmV3IEVycm9yKCJtYWxmb3JtZWQgcGF0aCBkYXRhIik7ZS5wdXNoKFtyXS5jb25jYXQoaS5zcGxpY2UoMCxuW29dKSkpfX0pKSxlfTt2YXIgbj17YTo3LGM6NixoOjEsbDoyLG06MixxOjQsczo0LHQ6Mix2OjEsejowfSxpPS8oW2FzdHZ6cW1obGNdKShbXmFzdHZ6cW1obGNdKikvZ2k7dmFyIGE9Ly0/WzAtOV0qXC4/WzAtOV0rKD86ZVstK10/XGQrKT8vZ2l9LHt9XSw0NzM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT1bMCwiIl0pLHQ9U3RyaW5nKHQpO3ZhciByPXBhcnNlRmxvYXQodCwxMCk7cmV0dXJuIGVbMF09cixlWzFdPXQubWF0Y2goL1tcZC5cLVwrXSpccyooLiopLylbMV18fCIiLGV9fSx7fV0sNDc0OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyhmdW5jdGlvbigpeyhmdW5jdGlvbigpe3ZhciByLG4saSxhLG8sczsidW5kZWZpbmVkIiE9dHlwZW9mIHBlcmZvcm1hbmNlJiZudWxsIT09cGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9lLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9Om51bGwhPXQmJnQuaHJ0aW1lPyhlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4ocigpLW8pLzFlNn0sbj10LmhydGltZSxhPShyPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIDFlOSoodD1uKCkpWzBdK3RbMV19KSgpLHM9MWU5KnQudXB0aW1lKCksbz1hLXMpOkRhdGUubm93PyhlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKS1pfSxpPURhdGUubm93KCkpOihlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKS1pfSxpPShuZXcgRGF0ZSkuZ2V0VGltZSgpKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7X3Byb2Nlc3M6NTA0fV0sNDc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG4sYSxvPXt9O2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9aShlKSksQXJyYXkuaXNBcnJheShlKSl7dmFyIHM9e307Zm9yKGE9MDthPGUubGVuZ3RoO2ErKylzW2VbYV1dPSEwO2U9c31mb3IobiBpbiBlKWVbbl09aShlW25dKTt2YXIgbD17fTtmb3IobiBpbiBlKXt2YXIgYz1lW25dO2lmKEFycmF5LmlzQXJyYXkoYykpZm9yKGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIHU9Y1thXTtpZihyJiYobFt1XT0hMCksdSBpbiB0KXtpZihvW25dPXRbdV0scilmb3IodmFyIGY9YTtmPGMubGVuZ3RoO2YrKylsW2NbZl1dPSEwO2JyZWFrfX1lbHNlIG4gaW4gdCYmKGVbbl0mJihvW25dPXRbbl0pLHImJihsW25dPSEwKSl9aWYocilmb3IobiBpbiB0KWxbbl18fChvW25dPXRbbl0pO3JldHVybiBvfTt2YXIgbj17fTtmdW5jdGlvbiBpKHQpe3JldHVybiBuW3RdP25bdF06KCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9blt0XT10LnNwbGl0KC9ccyosXHMqfFxzKy8pKSx0KX19LHt9XSw0NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTB8ZS5sZW5ndGgsaT10Lmxlbmd0aCxhPVtuZXcgQXJyYXkociksbmV3IEFycmF5KHIpXSxvPTA7bzxyOysrbylhWzBdW29dPVtdLGFbMV1bb109W107Zm9yKG89MDtvPGk7KytvKXt2YXIgcz10W29dO2FbMF1bc1swXV0ucHVzaChzKSxhWzFdW3NbMV1dLnB1c2gocyl9dmFyIGw9W107Zm9yKG89MDtvPHI7KytvKWFbMF1bb10ubGVuZ3RoK2FbMV1bb10ubGVuZ3RoPT09MCYmbC5wdXNoKFtvXSk7ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWFbZV1bdFtlXV07ci5zcGxpY2Uoci5pbmRleE9mKHQpLDEpfWZ1bmN0aW9uIHUodCxyLGkpe2Zvcih2YXIgbyxzLGwsdT0wO3U8MjsrK3UpaWYoYVt1XVtyXS5sZW5ndGg+MCl7bz1hW3VdW3JdWzBdLGw9dTticmVha31zPW9bMV5sXTtmb3IodmFyIGY9MDtmPDI7KytmKWZvcih2YXIgaD1hW2ZdW3JdLHA9MDtwPGgubGVuZ3RoOysrcCl7dmFyIGQ9aFtwXSxtPWRbMV5mXTtuKGVbdF0sZVtyXSxlW3NdLGVbbV0pPjAmJihvPWQscz1tLGw9Zil9cmV0dXJuIGl8fG8mJmMobyxsKSxzfWZ1bmN0aW9uIGYodCxyKXt2YXIgaT1hW3JdW3RdWzBdLG89W3RdO2MoaSxyKTtmb3IodmFyIHM9aVsxXnJdOzspe2Zvcig7cyE9PXQ7KW8ucHVzaChzKSxzPXUob1tvLmxlbmd0aC0yXSxzLCExKTtpZihhWzBdW3RdLmxlbmd0aCthWzFdW3RdLmxlbmd0aD09PTApYnJlYWs7dmFyIGw9b1tvLmxlbmd0aC0xXSxmPXQsaD1vWzFdLHA9dShsLGYsITApO2lmKG4oZVtsXSxlW2ZdLGVbaF0sZVtwXSk8MClicmVhaztvLnB1c2godCkscz11KGwsZil9cmV0dXJuIG99ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBlWzFdPT09ZVtlLmxlbmd0aC0xXX1mb3Iobz0wO288cjsrK28pZm9yKHZhciBwPTA7cDwyOysrcCl7Zm9yKHZhciBkPVtdO2FbcF1bb10ubGVuZ3RoPjA7KXthWzBdW29dLmxlbmd0aDt2YXIgbT1mKG8scCk7aCgwLG0pP2QucHVzaC5hcHBseShkLG0pOihkLmxlbmd0aD4wJiZsLnB1c2goZCksZD1tKX1kLmxlbmd0aD4wJiZsLnB1c2goZCl9cmV0dXJuIGx9O3ZhciBuPXQoImNvbXBhcmUtYW5nbGUiKX0seyJjb21wYXJlLWFuZ2xlIjoxMzN9XSw0Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW4odCxlLmxlbmd0aCksaT1uZXcgQXJyYXkoZS5sZW5ndGgpLGE9bmV3IEFycmF5KGUubGVuZ3RoKSxvPVtdLHM9MDtzPGUubGVuZ3RoOysrcyl7dmFyIGw9cltzXS5sZW5ndGg7YVtzXT1sLGlbc109ITAsbDw9MSYmby5wdXNoKHMpfWZvcig7by5sZW5ndGg+MDspe3ZhciBjPW8ucG9wKCk7aVtjXT0hMTt2YXIgdT1yW2NdO2ZvcihzPTA7czx1Lmxlbmd0aDsrK3Mpe3ZhciBmPXVbc107MD09LS1hW2ZdJiZvLnB1c2goZil9fXZhciBoPW5ldyBBcnJheShlLmxlbmd0aCkscD1bXTtmb3Iocz0wO3M8ZS5sZW5ndGg7KytzKWlmKGlbc10pe2M9cC5sZW5ndGg7aFtzXT1jLHAucHVzaChlW3NdKX1lbHNlIGhbc109LTE7dmFyIGQ9W107Zm9yKHM9MDtzPHQubGVuZ3RoOysrcyl7dmFyIG09dFtzXTtpW21bMF1dJiZpW21bMV1dJiZkLnB1c2goW2hbbVswXV0saFttWzFdXV0pfXJldHVybltkLHBdfTt2YXIgbj10KCJlZGdlcy10by1hZGphY2VuY3ktbGlzdCIpfSx7ImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0IjoxNzl9XSw0Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Yyh0LGUpO3Q9clswXTtmb3IodmFyIGY9KGU9clsxXSkubGVuZ3RoLGg9KHQubGVuZ3RoLG4odCxlLmxlbmd0aCkpLHA9MDtwPGY7KytwKWlmKGhbcF0ubGVuZ3RoJTI9PTEpdGhyb3cgbmV3IEVycm9yKCJwbGFuYXItZ3JhcGgtdG8tcG9seWxpbmU6IGdyYXBoIG11c3QgYmUgbWFuaWZvbGQiKTt2YXIgZD1pKHQsZSk7dmFyIG09KGQ9ZC5maWx0ZXIoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPVswXSxpPTA7aTxyOysraSl7dmFyIGE9ZVt0W2ldXSxsPWVbdFsoaSsxKSVyXV0sYz1vKC1hWzBdLGFbMV0pLHU9bygtYVswXSxsWzFdKSxmPW8obFswXSxhWzFdKSxoPW8obFswXSxsWzFdKTtuPXMobixzKHMoYyx1KSxzKGYsaCkpKX1yZXR1cm4gbltuLmxlbmd0aC0xXT4wfSkpKS5sZW5ndGgsZz1uZXcgQXJyYXkobSksdj1uZXcgQXJyYXkobSk7Zm9yKHA9MDtwPG07KytwKXtnW3BdPXA7dmFyIHk9bmV3IEFycmF5KG0pLHg9ZFtwXS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSkpLGI9YShbeF0pLF89MDt0OmZvcih2YXIgdz0wO3c8bTsrK3cpaWYoeVt3XT0wLHAhPT13KXtmb3IodmFyIFQ9KEg9ZFt3XSkubGVuZ3RoLGs9MDtrPFQ7KytrKXt2YXIgQT1iKGVbSFtrXV0pO2lmKDAhPT1BKXtBPDAmJih5W3ddPTEsXys9MSk7Y29udGludWUgdH19eVt3XT0xLF8rPTF9dltwXT1bXyxwLHldfXYuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS10WzBdfSkpO2ZvcihwPTA7cDxtOysrcCl7dmFyIE09KHk9dltwXSlbMV0sUz15WzJdO2Zvcih3PTA7dzxtOysrdylTW3ddJiYoZ1t3XT1NKX12YXIgRT1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09W107cmV0dXJuIGV9KG0pO2ZvcihwPTA7cDxtOysrcClFW3BdLnB1c2goZ1twXSksRVtnW3BdXS5wdXNoKHApO3ZhciBMPXt9LEM9dShmLCExKTtmb3IocD0wO3A8bTsrK3ApZm9yKFQ9KEg9ZFtwXSkubGVuZ3RoLHc9MDt3PFQ7Kyt3KXt2YXIgUD1IW3ddLEk9SFsodysxKSVUXSxPPU1hdGgubWluKFAsSSkrIjoiK01hdGgubWF4KFAsSSk7aWYoTyBpbiBMKXt2YXIgej1MW09dO0Vbel0ucHVzaChwKSxFW3BdLnB1c2goeiksQ1tQXT1DW0ldPSEwfWVsc2UgTFtPXT1wfWZ1bmN0aW9uIEQodCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MDtyPGU7KytyKWlmKCFDW3Rbcl1dKXJldHVybiExO3JldHVybiEwfXZhciBSPVtdLEY9dShtLC0xKTtmb3IocD0wO3A8bTsrK3ApZ1twXSE9PXB8fEQoZFtwXSk/RltwXT0tMTooUi5wdXNoKHApLEZbcF09MCk7cj1bXTtmb3IoO1IubGVuZ3RoPjA7KXt2YXIgQj1SLnBvcCgpLE49RVtCXTtsKE4sKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKTt2YXIgaixVPU4ubGVuZ3RoLFY9RltCXTtpZigwPT09Vil7dmFyIEg9ZFtCXTtqPVtIXX1mb3IocD0wO3A8VTsrK3Ape3ZhciBxPU5bcF07aWYoIShGW3FdPj0wKSlpZihGW3FdPTFeVixSLnB1c2gocSksMD09PVYpRChIPWRbcV0pfHwoSC5yZXZlcnNlKCksai5wdXNoKEgpKX0wPT09ViYmci5wdXNoKGopfXJldHVybiByfTt2YXIgbj10KCJlZGdlcy10by1hZGphY2VuY3ktbGlzdCIpLGk9dCgicGxhbmFyLWR1YWwiKSxhPXQoInBvaW50LWluLWJpZy1wb2x5Z29uIiksbz10KCJ0d28tcHJvZHVjdCIpLHM9dCgicm9idXN0LXN1bSIpLGw9dCgidW5pcSIpLGM9dCgiLi9saWIvdHJpbS1sZWF2ZXMiKTtmdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWU7cmV0dXJuIHJ9fSx7Ii4vbGliL3RyaW0tbGVhdmVzIjo0NzcsImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0IjoxNzksInBsYW5hci1kdWFsIjo0NzYsInBvaW50LWluLWJpZy1wb2x5Z29uIjo0NzksInJvYnVzdC1zdW0iOjUyOSwidHdvLXByb2R1Y3QiOjU3Nyx1bmlxOjU5Mn1dLDQ3OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1bXSxhPVtdLHM9MDtzPGU7KytzKWZvcih2YXIgdT10W3NdLGY9dS5sZW5ndGgsaD1mLTEscD0wO3A8ZjtoPXArKyl7dmFyIGQ9dVtoXSxtPXVbcF07ZFswXT09PW1bMF0/YS5wdXNoKFtkLG1dKTpyLnB1c2goW2QsbV0pfWlmKDA9PT1yLmxlbmd0aClyZXR1cm4gMD09PWEubGVuZ3RoP2M6KGc9bChhKSxmdW5jdGlvbih0KXtyZXR1cm4gZyh0WzBdLHRbMV0pPzA6MX0pO3ZhciBnO3ZhciB2PWkocikseT1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgaT1vLmxlKGUsclswXSk7aWYoaTwwKXJldHVybiAxO3ZhciBhPXRbaV07aWYoIWEpe2lmKCEoaT4wJiZlW2ldPT09clswXSkpcmV0dXJuIDE7YT10W2ktMV19Zm9yKHZhciBzPTE7YTspe3ZhciBsPWEua2V5LGM9bihyLGxbMF0sbFsxXSk7aWYobFswXVswXTxsWzFdWzBdKWlmKGM8MClhPWEubGVmdDtlbHNle2lmKCEoYz4wKSlyZXR1cm4gMDtzPS0xLGE9YS5yaWdodH1lbHNlIGlmKGM+MClhPWEubGVmdDtlbHNle2lmKCEoYzwwKSlyZXR1cm4gMDtzPTEsYT1hLnJpZ2h0fX1yZXR1cm4gc319KHYuc2xhYnMsdi5jb29yZGluYXRlcyk7cmV0dXJuIDA9PT1hLmxlbmd0aD95OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0KHJbMF0sclsxXSk/MDplKHIpfX0obChhKSx5KX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIilbM10saT10KCJzbGFiLWRlY29tcG9zaXRpb24iKSxhPXQoImludGVydmFsLXRyZWUtMWQiKSxvPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZnVuY3Rpb24gcygpe3JldHVybiEwfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXSxpPW5bMF1bMF0sbz1uWzBdWzFdLGw9blsxXVsxXSxjPVtNYXRoLm1pbihvLGwpLE1hdGgubWF4KG8sbCldO2kgaW4gZT9lW2ldLnB1c2goYyk6ZVtpXT1bY119dmFyIHU9e30sZj1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8Zi5sZW5ndGg7KytyKXt2YXIgaD1lW2Zbcl1dO3VbZltyXV09YShoKX1yZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG49dFtlXTtyZXR1cm4hIW4mJiEhbi5xdWVyeVBvaW50KHIscyl9fSh1KX1mdW5jdGlvbiBjKHQpe3JldHVybiAxfX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTAwLCJpbnRlcnZhbC10cmVlLTFkIjo0MzAsInJvYnVzdC1vcmllbnRhdGlvbiI6NTI0LCJzbGFiLWRlY29tcG9zaXRpb24iOjU0MH1dLDQ4MDpbZnVuY3Rpb24odCxlLHIpewovKgogKiBAY29weXJpZ2h0IDIwMTYgU2VhbiBDb25uZWxseSAoQHZvaWRxayksIGh0dHA6Ly9zeW50aGV0aS5jYwogKiBAbGljZW5zZSBNSVQKICogQHByZXNlcnZlIFByb2plY3QgSG9tZTogaHR0cHM6Ly9naXRodWIuY29tL3ZvaWRxay9wb2x5Ym9vbGpzCiAqLwp2YXIgbixpPXQoIi4vbGliL2J1aWxkLWxvZyIpLGE9dCgiLi9saWIvZXBzaWxvbiIpLG89dCgiLi9saWIvaW50ZXJzZWN0ZXIiKSxzPXQoIi4vbGliL3NlZ21lbnQtY2hhaW5lciIpLGw9dCgiLi9saWIvc2VnbWVudC1zZWxlY3RvciIpLGM9dCgiLi9saWIvZ2VvanNvbiIpLHU9ITEsZj1hKCk7ZnVuY3Rpb24gaCh0LGUscil7dmFyIGk9bi5zZWdtZW50cyh0KSxhPW4uc2VnbWVudHMoZSksbz1yKG4uY29tYmluZShpLGEpKTtyZXR1cm4gbi5wb2x5Z29uKG8pfW49e2J1aWxkTG9nOmZ1bmN0aW9uKHQpe3JldHVybiEwPT09dD91PWkoKTohMT09PXQmJih1PSExKSwhMSE9PXUmJnUubGlzdH0sZXBzaWxvbjpmdW5jdGlvbih0KXtyZXR1cm4gZi5lcHNpbG9uKHQpfSxzZWdtZW50czpmdW5jdGlvbih0KXt2YXIgZT1vKCEwLGYsdSk7cmV0dXJuIHQucmVnaW9ucy5mb3JFYWNoKGUuYWRkUmVnaW9uKSx7c2VnbWVudHM6ZS5jYWxjdWxhdGUodC5pbnZlcnRlZCksaW52ZXJ0ZWQ6dC5pbnZlcnRlZH19LGNvbWJpbmU6ZnVuY3Rpb24odCxlKXtyZXR1cm57Y29tYmluZWQ6byghMSxmLHUpLmNhbGN1bGF0ZSh0LnNlZ21lbnRzLHQuaW52ZXJ0ZWQsZS5zZWdtZW50cyxlLmludmVydGVkKSxpbnZlcnRlZDE6dC5pbnZlcnRlZCxpbnZlcnRlZDI6ZS5pbnZlcnRlZH19LHNlbGVjdFVuaW9uOmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLnVuaW9uKHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDF8fHQuaW52ZXJ0ZWQyfX0sc2VsZWN0SW50ZXJzZWN0OmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLmludGVyc2VjdCh0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxJiZ0LmludmVydGVkMn19LHNlbGVjdERpZmZlcmVuY2U6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwuZGlmZmVyZW5jZSh0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxJiYhdC5pbnZlcnRlZDJ9fSxzZWxlY3REaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLmRpZmZlcmVuY2VSZXYodC5jb21iaW5lZCx1KSxpbnZlcnRlZDohdC5pbnZlcnRlZDEmJnQuaW52ZXJ0ZWQyfX0sc2VsZWN0WG9yOmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLnhvcih0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxIT09dC5pbnZlcnRlZDJ9fSxwb2x5Z29uOmZ1bmN0aW9uKHQpe3JldHVybntyZWdpb25zOnModC5zZWdtZW50cyxmLHUpLGludmVydGVkOnQuaW52ZXJ0ZWR9fSxwb2x5Z29uRnJvbUdlb0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIGMudG9Qb2x5Z29uKG4sdCl9LHBvbHlnb25Ub0dlb0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIGMuZnJvbVBvbHlnb24obixmLHQpfSx1bmlvbjpmdW5jdGlvbih0LGUpe3JldHVybiBoKHQsZSxuLnNlbGVjdFVuaW9uKX0saW50ZXJzZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodCxlLG4uc2VsZWN0SW50ZXJzZWN0KX0sZGlmZmVyZW5jZTpmdW5jdGlvbih0LGUpe3JldHVybiBoKHQsZSxuLnNlbGVjdERpZmZlcmVuY2UpfSxkaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodCxlLG4uc2VsZWN0RGlmZmVyZW5jZVJldil9LHhvcjpmdW5jdGlvbih0LGUpe3JldHVybiBoKHQsZSxuLnNlbGVjdFhvcil9fSwib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5Qb2x5Qm9vbD1uKSxlLmV4cG9ydHM9bn0seyIuL2xpYi9idWlsZC1sb2ciOjQ4MSwiLi9saWIvZXBzaWxvbiI6NDgyLCIuL2xpYi9nZW9qc29uIjo0ODMsIi4vbGliL2ludGVyc2VjdGVyIjo0ODQsIi4vbGliL3NlZ21lbnQtY2hhaW5lciI6NDg2LCIuL2xpYi9zZWdtZW50LXNlbGVjdG9yIjo0ODd9XSw0ODE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlPTAscj0hMTtmdW5jdGlvbiBuKGUscil7cmV0dXJuIHQubGlzdC5wdXNoKHt0eXBlOmUsZGF0YTpyP0pTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocikpOnZvaWQgMH0pLHR9cmV0dXJuIHQ9e2xpc3Q6W10sc2VnbWVudElkOmZ1bmN0aW9uKCl7cmV0dXJuIGUrK30sY2hlY2tJbnRlcnNlY3Rpb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hlY2siLHtzZWcxOnQsc2VnMjplfSl9LHNlZ21lbnRDaG9wOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImRpdl9zZWciLHtzZWc6dCxwdDplfSksbigiY2hvcCIse3NlZzp0LHB0OmV9KX0sc3RhdHVzUmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJwb3Bfc2VnIix7c2VnOnR9KX0sc2VnbWVudFVwZGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gbigic2VnX3VwZGF0ZSIse3NlZzp0fSl9LHNlZ21lbnROZXc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigibmV3X3NlZyIse3NlZzp0LHByaW1hcnk6ZX0pfSxzZWdtZW50UmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJyZW1fc2VnIix7c2VnOnR9KX0sdGVtcFN0YXR1czpmdW5jdGlvbih0LGUscil7cmV0dXJuIG4oInRlbXBfc3RhdHVzIix7c2VnOnQsYWJvdmU6ZSxiZWxvdzpyfSl9LHJld2luZDpmdW5jdGlvbih0KXtyZXR1cm4gbigicmV3aW5kIix7c2VnOnR9KX0sc3RhdHVzOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigic3RhdHVzIix7c2VnOnQsYWJvdmU6ZSxiZWxvdzpyfSl9LHZlcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1yP3Q6KHI9ZSxuKCJ2ZXJ0Iix7eDplfSkpfSxsb2c6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0JiYodD1KU09OLnN0cmluZ2lmeSh0LCExLCIgICIpKSxuKCJsb2ciLHt0eHQ6dH0pfSxyZXNldDpmdW5jdGlvbigpe3JldHVybiBuKCJyZXNldCIpfSxzZWxlY3RlZDpmdW5jdGlvbih0KXtyZXR1cm4gbigic2VsZWN0ZWQiLHtzZWdzOnR9KX0sY2hhaW5TdGFydDpmdW5jdGlvbih0KXtyZXR1cm4gbigiY2hhaW5fc3RhcnQiLHtzZWc6dH0pfSxjaGFpblJlbW92ZUhlYWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fcmVtX2hlYWQiLHtpbmRleDp0LHB0OmV9KX0sY2hhaW5SZW1vdmVUYWlsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX3JlbV90YWlsIix7aW5kZXg6dCxwdDplfSl9LGNoYWluTmV3OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX25ldyIse3B0MTp0LHB0MjplfSl9LGNoYWluTWF0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIG4oImNoYWluX21hdGNoIix7aW5kZXg6dH0pfSxjaGFpbkNsb3NlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJjaGFpbl9jbG9zZSIse2luZGV4OnR9KX0sY2hhaW5BZGRIZWFkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX2FkZF9oZWFkIix7aW5kZXg6dCxwdDplfSl9LGNoYWluQWRkVGFpbDpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGFpbl9hZGRfdGFpbCIse2luZGV4OnQscHQ6ZX0pfSxjaGFpbkNvbm5lY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fY29uIix7aW5kZXgxOnQsaW5kZXgyOmV9KX0sY2hhaW5SZXZlcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJjaGFpbl9yZXYiLHtpbmRleDp0fSl9LGNoYWluSm9pbjpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGFpbl9qb2luIix7aW5kZXgxOnQsaW5kZXgyOmV9KX0sZG9uZTpmdW5jdGlvbigpe3JldHVybiBuKCJkb25lIil9fX19LHt9XSw0ODI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Im51bWJlciIhPXR5cGVvZiB0JiYodD0xZS0xMCk7dmFyIGU9e2Vwc2lsb246ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiYodD1lKSx0fSxwb2ludEFib3ZlT3JPbkxpbmU6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzFdLG89blswXSxzPW5bMV0sbD1lWzBdO3JldHVybihvLWkpKihlWzFdLWEpLShzLWEpKihsLWkpPj0tdH0scG9pbnRCZXR3ZWVuOmZ1bmN0aW9uKGUscixuKXt2YXIgaT1lWzFdLXJbMV0sYT1uWzBdLXJbMF0sbz1lWzBdLXJbMF0scz1uWzFdLXJbMV0sbD1vKmEraSpzO3JldHVybiEobDx0KSYmIShsLShhKmErcypzKT4tdCl9LHBvaW50c1NhbWVYOmZ1bmN0aW9uKGUscil7cmV0dXJuIE1hdGguYWJzKGVbMF0tclswXSk8dH0scG9pbnRzU2FtZVk6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5hYnMoZVsxXS1yWzFdKTx0fSxwb2ludHNTYW1lOmZ1bmN0aW9uKHQscil7cmV0dXJuIGUucG9pbnRzU2FtZVgodCxyKSYmZS5wb2ludHNTYW1lWSh0LHIpfSxwb2ludHNDb21wYXJlOmZ1bmN0aW9uKHQscil7cmV0dXJuIGUucG9pbnRzU2FtZVgodCxyKT9lLnBvaW50c1NhbWVZKHQscik/MDp0WzFdPHJbMV0/LTE6MTp0WzBdPHJbMF0/LTE6MX0scG9pbnRzQ29sbGluZWFyOmZ1bmN0aW9uKGUscixuKXt2YXIgaT1lWzBdLXJbMF0sYT1lWzFdLXJbMV0sbz1yWzBdLW5bMF0scz1yWzFdLW5bMV07cmV0dXJuIE1hdGguYWJzKGkqcy1vKmEpPHR9LGxpbmVzSW50ZXJzZWN0OmZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXJbMF0tZVswXSxvPXJbMV0tZVsxXSxzPWlbMF0tblswXSxsPWlbMV0tblsxXSxjPWEqbC1vKnM7aWYoTWF0aC5hYnMoYyk8dClyZXR1cm4hMTt2YXIgdT1lWzBdLW5bMF0sZj1lWzFdLW5bMV0saD0ocypmLWwqdSkvYyxwPShhKmYtbyp1KS9jLGQ9e2Fsb25nQTowLGFsb25nQjowLHB0OltlWzBdK2gqYSxlWzFdK2gqb119O3JldHVybiBkLmFsb25nQT1oPD0tdD8tMjpoPHQ/LTE6aC0xPD0tdD8wOmgtMTx0PzE6MixkLmFsb25nQj1wPD0tdD8tMjpwPHQ/LTE6cC0xPD0tdD8wOnAtMTx0PzE6MixkfSxwb2ludEluc2lkZVJlZ2lvbjpmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1lWzBdLGk9ZVsxXSxhPXJbci5sZW5ndGgtMV1bMF0sbz1yW3IubGVuZ3RoLTFdWzFdLHM9ITEsbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgYz1yW2xdWzBdLHU9cltsXVsxXTt1LWk+dCE9by1pPnQmJihhLWMpKihpLXUpLyhvLXUpK2Mtbj50JiYocz0hcyksYT1jLG89dX1yZXR1cm4gc319O3JldHVybiBlfX0se31dLDQ4MzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt0b1BvbHlnb246ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGUpe2lmKGUubGVuZ3RoPD0wKXJldHVybiB0LnNlZ21lbnRzKHtpbnZlcnRlZDohMSxyZWdpb25zOltdfSk7ZnVuY3Rpb24gcihlKXt2YXIgcj1lLnNsaWNlKDAsZS5sZW5ndGgtMSk7cmV0dXJuIHQuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W3JdfSl9Zm9yKHZhciBuPXIoZVswXSksaT0xO2k8ZS5sZW5ndGg7aSsrKW49dC5zZWxlY3REaWZmZXJlbmNlKHQuY29tYmluZShuLHIoZVtpXSkpKTtyZXR1cm4gbn1pZigiUG9seWdvbiI9PT1lLnR5cGUpcmV0dXJuIHQucG9seWdvbihyKGUuY29vcmRpbmF0ZXMpKTtpZigiTXVsdGlQb2x5Z29uIj09PWUudHlwZSl7Zm9yKHZhciBuPXQuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W119KSxpPTA7aTxlLmNvb3JkaW5hdGVzLmxlbmd0aDtpKyspbj10LnNlbGVjdFVuaW9uKHQuY29tYmluZShuLHIoZS5jb29yZGluYXRlc1tpXSkpKTtyZXR1cm4gdC5wb2x5Z29uKG4pfXRocm93IG5ldyBFcnJvcigiUG9seUJvb2w6IENhbm5vdCBjb252ZXJ0IEdlb0pTT04gb2JqZWN0IHRvIFBvbHlCb29sIHBvbHlnb24iKX0sZnJvbVBvbHlnb246ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxyKXtyZXR1cm4gZS5wb2ludEluc2lkZVJlZ2lvbihbLjUqKHRbMF1bMF0rdFsxXVswXSksLjUqKHRbMF1bMV0rdFsxXVsxXSldLHIpfWZ1bmN0aW9uIGkodCl7cmV0dXJue3JlZ2lvbjp0LGNoaWxkcmVuOltdfX1yPXQucG9seWdvbih0LnNlZ21lbnRzKHIpKTt2YXIgYT1pKG51bGwpO2Z1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9MDtyPHQuY2hpbGRyZW4ubGVuZ3RoO3IrKyl7aWYobihlLChzPXQuY2hpbGRyZW5bcl0pLnJlZ2lvbikpcmV0dXJuIHZvaWQgbyhzLGUpfXZhciBhPWkoZSk7Zm9yKHI9MDtyPHQuY2hpbGRyZW4ubGVuZ3RoO3IrKyl7dmFyIHM7bigocz10LmNoaWxkcmVuW3JdKS5yZWdpb24sZSkmJihhLmNoaWxkcmVuLnB1c2gocyksdC5jaGlsZHJlbi5zcGxpY2UociwxKSxyLS0pfXQuY2hpbGRyZW4ucHVzaChhKX1mb3IodmFyIHM9MDtzPHIucmVnaW9ucy5sZW5ndGg7cysrKXt2YXIgbD1yLnJlZ2lvbnNbc107bC5sZW5ndGg8M3x8byhhLGwpfWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9MCxuPXRbdC5sZW5ndGgtMV1bMF0saT10W3QubGVuZ3RoLTFdWzFdLGE9W10sbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dWzBdLGw9dFtvXVsxXTthLnB1c2goW3MsbF0pLHIrPWwqbi1zKmksbj1zLGk9bH1yZXR1cm4gcjwwIT09ZSYmYS5yZXZlcnNlKCksYS5wdXNoKFthWzBdWzBdLGFbMF1bMV1dKSxhfXZhciB1PVtdO2Z1bmN0aW9uIGYodCl7dmFyIGU9W2ModC5yZWdpb24sITEpXTt1LnB1c2goZSk7Zm9yKHZhciByPTA7cjx0LmNoaWxkcmVuLmxlbmd0aDtyKyspZS5wdXNoKGgodC5jaGlsZHJlbltyXSkpfWZ1bmN0aW9uIGgodCl7Zm9yKHZhciBlPTA7ZTx0LmNoaWxkcmVuLmxlbmd0aDtlKyspZih0LmNoaWxkcmVuW2VdKTtyZXR1cm4gYyh0LnJlZ2lvbiwhMCl9Zm9yKHM9MDtzPGEuY2hpbGRyZW4ubGVuZ3RoO3MrKylmKGEuY2hpbGRyZW5bc10pO3JldHVybiB1Lmxlbmd0aDw9MD97dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W119OjE9PXUubGVuZ3RoP3t0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczp1WzBdfTp7dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczp1fX19O2UuZXhwb3J0cz1ufSx7fV0sNDg0OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9saW5rZWQtbGlzdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gaSh0LGUsbil7cmV0dXJue2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDp0LGVuZDplLG15RmlsbDp7YWJvdmU6bi5teUZpbGwuYWJvdmUsYmVsb3c6bi5teUZpbGwuYmVsb3d9LG90aGVyRmlsbDpudWxsfX12YXIgYT1uLmNyZWF0ZSgpO2Z1bmN0aW9uIG8odCxyKXthLmluc2VydEJlZm9yZSh0LChmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24odCxyLG4saSxhLG8pe3ZhciBzPWUucG9pbnRzQ29tcGFyZShyLGEpO3JldHVybiAwIT09cz9zOmUucG9pbnRzU2FtZShuLG8pPzA6dCE9PWk/dD8xOi0xOmUucG9pbnRBYm92ZU9yT25MaW5lKG4saT9hOm8saT9vOmEpPzE6LTF9KHQuaXNTdGFydCx0LnB0LHIsbi5pc1N0YXJ0LG4ucHQsbi5vdGhlci5wdCk8MH0pKX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLm5vZGUoe2lzU3RhcnQ6ITAscHQ6dC5zdGFydCxzZWc6dCxwcmltYXJ5OmUsb3RoZXI6bnVsbCxzdGF0dXM6bnVsbH0pO3JldHVybiBvKHIsdC5lbmQpLHJ9KHQsZSk7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1uLm5vZGUoe2lzU3RhcnQ6ITEscHQ6ZS5lbmQsc2VnOmUscHJpbWFyeTpyLG90aGVyOnQsc3RhdHVzOm51bGx9KTt0Lm90aGVyPWksbyhpLHQucHQpfShyLHQsZSkscn1mdW5jdGlvbiBsKHQsZSl7dmFyIG49aShlLHQuc2VnLmVuZCx0LnNlZyk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7ciYmci5zZWdtZW50Q2hvcCh0LnNlZyxlKSx0Lm90aGVyLnJlbW92ZSgpLHQuc2VnLmVuZD1lLHQub3RoZXIucHQ9ZSxvKHQub3RoZXIsdC5wdCl9KHQsZSkscyhuLHQucHJpbWFyeSl9ZnVuY3Rpb24gYyhpLG8pe3ZhciBzPW4uY3JlYXRlKCk7ZnVuY3Rpb24gYyh0KXtyZXR1cm4gcy5maW5kVHJhbnNpdGlvbigoZnVuY3Rpb24ocil7dmFyIG4saSxhLG8scyxsO3JldHVybihuPXQsaT1yLmV2LGE9bi5zZWcuc3RhcnQsbz1uLnNlZy5lbmQscz1pLnNlZy5zdGFydCxsPWkuc2VnLmVuZCxlLnBvaW50c0NvbGxpbmVhcihhLHMsbCk/ZS5wb2ludHNDb2xsaW5lYXIobyxzLGwpfHxlLnBvaW50QWJvdmVPck9uTGluZShvLHMsbCk/MTotMTplLnBvaW50QWJvdmVPck9uTGluZShhLHMsbCk/MTotMSk+MH0pKX1mdW5jdGlvbiB1KHQsbil7dmFyIGk9dC5zZWcsYT1uLnNlZyxvPWkuc3RhcnQscz1pLmVuZCxjPWEuc3RhcnQsdT1hLmVuZDtyJiZyLmNoZWNrSW50ZXJzZWN0aW9uKGksYSk7dmFyIGY9ZS5saW5lc0ludGVyc2VjdChvLHMsYyx1KTtpZighMT09PWYpe2lmKCFlLnBvaW50c0NvbGxpbmVhcihvLHMsYykpcmV0dXJuITE7aWYoZS5wb2ludHNTYW1lKG8sdSl8fGUucG9pbnRzU2FtZShzLGMpKXJldHVybiExO3ZhciBoPWUucG9pbnRzU2FtZShvLGMpLHA9ZS5wb2ludHNTYW1lKHMsdSk7aWYoaCYmcClyZXR1cm4gbjt2YXIgZD0haCYmZS5wb2ludEJldHdlZW4obyxjLHUpLG09IXAmJmUucG9pbnRCZXR3ZWVuKHMsYyx1KTtpZihoKXJldHVybiBtP2wobixzKTpsKHQsdSksbjtkJiYocHx8KG0/bChuLHMpOmwodCx1KSksbChuLG8pKX1lbHNlIDA9PT1mLmFsb25nQSYmKC0xPT09Zi5hbG9uZ0I/bCh0LGMpOjA9PT1mLmFsb25nQj9sKHQsZi5wdCk6MT09PWYuYWxvbmdCJiZsKHQsdSkpLDA9PT1mLmFsb25nQiYmKC0xPT09Zi5hbG9uZ0E/bChuLG8pOjA9PT1mLmFsb25nQT9sKG4sZi5wdCk6MT09PWYuYWxvbmdBJiZsKG4scykpO3JldHVybiExfWZvcih2YXIgZj1bXTshYS5pc0VtcHR5KCk7KXt2YXIgaD1hLmdldEhlYWQoKTtpZihyJiZyLnZlcnQoaC5wdFswXSksaC5pc1N0YXJ0KXtyJiZyLnNlZ21lbnROZXcoaC5zZWcsaC5wcmltYXJ5KTt2YXIgcD1jKGgpLGQ9cC5iZWZvcmU/cC5iZWZvcmUuZXY6bnVsbCxtPXAuYWZ0ZXI/cC5hZnRlci5ldjpudWxsO2Z1bmN0aW9uIGcoKXtpZihkKXt2YXIgdD11KGgsZCk7aWYodClyZXR1cm4gdH1yZXR1cm4hIW0mJnUoaCxtKX1yJiZyLnRlbXBTdGF0dXMoaC5zZWcsISFkJiZkLnNlZywhIW0mJm0uc2VnKTt2YXIgdix5PWcoKTtpZih5KXt2YXIgeDtpZih0KSh4PW51bGw9PT1oLnNlZy5teUZpbGwuYmVsb3d8fGguc2VnLm15RmlsbC5hYm92ZSE9PWguc2VnLm15RmlsbC5iZWxvdykmJih5LnNlZy5teUZpbGwuYWJvdmU9IXkuc2VnLm15RmlsbC5hYm92ZSk7ZWxzZSB5LnNlZy5vdGhlckZpbGw9aC5zZWcubXlGaWxsO3ImJnIuc2VnbWVudFVwZGF0ZSh5LnNlZyksaC5vdGhlci5yZW1vdmUoKSxoLnJlbW92ZSgpfWlmKGEuZ2V0SGVhZCgpIT09aCl7ciYmci5yZXdpbmQoaC5zZWcpO2NvbnRpbnVlfWlmKHQpeD1udWxsPT09aC5zZWcubXlGaWxsLmJlbG93fHxoLnNlZy5teUZpbGwuYWJvdmUhPT1oLnNlZy5teUZpbGwuYmVsb3csaC5zZWcubXlGaWxsLmJlbG93PW0/bS5zZWcubXlGaWxsLmFib3ZlOmksaC5zZWcubXlGaWxsLmFib3ZlPXg/IWguc2VnLm15RmlsbC5iZWxvdzpoLnNlZy5teUZpbGwuYmVsb3c7ZWxzZSBpZihudWxsPT09aC5zZWcub3RoZXJGaWxsKXY9bT9oLnByaW1hcnk9PT1tLnByaW1hcnk/bS5zZWcub3RoZXJGaWxsLmFib3ZlOm0uc2VnLm15RmlsbC5hYm92ZTpoLnByaW1hcnk/bzppLGguc2VnLm90aGVyRmlsbD17YWJvdmU6dixiZWxvdzp2fTtyJiZyLnN0YXR1cyhoLnNlZywhIWQmJmQuc2VnLCEhbSYmbS5zZWcpLGgub3RoZXIuc3RhdHVzPXAuaW5zZXJ0KG4ubm9kZSh7ZXY6aH0pKX1lbHNle3ZhciBiPWguc3RhdHVzO2lmKG51bGw9PT1iKXRocm93IG5ldyBFcnJvcigiUG9seUJvb2w6IFplcm8tbGVuZ3RoIHNlZ21lbnQgZGV0ZWN0ZWQ7IHlvdXIgZXBzaWxvbiBpcyBwcm9iYWJseSB0b28gc21hbGwgb3IgdG9vIGxhcmdlIik7aWYocy5leGlzdHMoYi5wcmV2KSYmcy5leGlzdHMoYi5uZXh0KSYmdShiLnByZXYuZXYsYi5uZXh0LmV2KSxyJiZyLnN0YXR1c1JlbW92ZShiLmV2LnNlZyksYi5yZW1vdmUoKSwhaC5wcmltYXJ5KXt2YXIgXz1oLnNlZy5teUZpbGw7aC5zZWcubXlGaWxsPWguc2VnLm90aGVyRmlsbCxoLnNlZy5vdGhlckZpbGw9X31mLnB1c2goaC5zZWcpfWEuZ2V0SGVhZCgpLnJlbW92ZSgpfXJldHVybiByJiZyLmRvbmUoKSxmfXJldHVybiB0P3thZGRSZWdpb246ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGksYSxvPXRbdC5sZW5ndGgtMV0sbD0wO2w8dC5sZW5ndGg7bCsrKXtuPW8sbz10W2xdO3ZhciBjPWUucG9pbnRzQ29tcGFyZShuLG8pOzAhPT1jJiZzKChpPWM8MD9uOm8sYT1jPDA/bzpuLHtpZDpyP3Iuc2VnbWVudElkKCk6LTEsc3RhcnQ6aSxlbmQ6YSxteUZpbGw6e2Fib3ZlOm51bGwsYmVsb3c6bnVsbH0sb3RoZXJGaWxsOm51bGx9KSwhMCl9fSxjYWxjdWxhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwhMSl9fTp7Y2FsY3VsYXRlOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3MoaSh0LnN0YXJ0LHQuZW5kLHQpLCEwKX0pKSxyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3MoaSh0LnN0YXJ0LHQuZW5kLHQpLCExKX0pKSxjKGUsbil9fX19LHsiLi9saW5rZWQtbGlzdCI6NDg1fV0sNDg1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXtjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD17cm9vdDp7cm9vdDohMCxuZXh0Om51bGx9LGV4aXN0czpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJmUhPT10LnJvb3R9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXQucm9vdC5uZXh0fSxnZXRIZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHQucm9vdC5uZXh0fSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49dC5yb290LGk9dC5yb290Lm5leHQ7bnVsbCE9PWk7KXtpZihyKGkpKXJldHVybiBlLnByZXY9aS5wcmV2LGUubmV4dD1pLGkucHJldi5uZXh0PWUsdm9pZChpLnByZXY9ZSk7bj1pLGk9aS5uZXh0fW4ubmV4dD1lLGUucHJldj1uLGUubmV4dD1udWxsfSxmaW5kVHJhbnNpdGlvbjpmdW5jdGlvbihlKXtmb3IodmFyIHI9dC5yb290LG49dC5yb290Lm5leHQ7bnVsbCE9PW4mJiFlKG4pOylyPW4sbj1uLm5leHQ7cmV0dXJue2JlZm9yZTpyPT09dC5yb290P251bGw6cixhZnRlcjpuLGluc2VydDpmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2PXIsdC5uZXh0PW4sci5uZXh0PXQsbnVsbCE9PW4mJihuLnByZXY9dCksdH19fX07cmV0dXJuIHR9LG5vZGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldj1udWxsLHQubmV4dD1udWxsLHQucmVtb3ZlPWZ1bmN0aW9uKCl7dC5wcmV2Lm5leHQ9dC5uZXh0LHQubmV4dCYmKHQubmV4dC5wcmV2PXQucHJldiksdC5wcmV2PW51bGwsdC5uZXh0PW51bGx9LHR9fX0se31dLDQ4NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49W10saT1bXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgYT10LnN0YXJ0LG89dC5lbmQ7aWYoZS5wb2ludHNTYW1lKGEsbykpY29uc29sZS53YXJuKCJQb2x5Qm9vbDogV2FybmluZzogWmVyby1sZW5ndGggc2VnbWVudCBkZXRlY3RlZDsgeW91ciBlcHNpbG9uIGlzIHByb2JhYmx5IHRvbyBzbWFsbCBvciB0b28gbGFyZ2UiKTtlbHNle3ImJnIuY2hhaW5TdGFydCh0KTtmb3IodmFyIHM9e2luZGV4OjAsbWF0Y2hlc19oZWFkOiExLG1hdGNoZXNfcHQxOiExfSxsPXtpbmRleDowLG1hdGNoZXNfaGVhZDohMSxtYXRjaGVzX3B0MTohMX0sYz1zLHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGY9KGc9blt1XSlbMF0saD0oZ1sxXSxnW2cubGVuZ3RoLTFdKTtnW2cubGVuZ3RoLTJdO2lmKGUucG9pbnRzU2FtZShmLGEpKXtpZihrKHUsITAsITApKWJyZWFrfWVsc2UgaWYoZS5wb2ludHNTYW1lKGYsbykpe2lmKGsodSwhMCwhMSkpYnJlYWt9ZWxzZSBpZihlLnBvaW50c1NhbWUoaCxhKSl7aWYoayh1LCExLCEwKSlicmVha31lbHNlIGlmKGUucG9pbnRzU2FtZShoLG8pJiZrKHUsITEsITEpKWJyZWFrfWlmKGM9PT1zKXJldHVybiBuLnB1c2goW2Esb10pLHZvaWQociYmci5jaGFpbk5ldyhhLG8pKTtpZihjPT09bCl7ciYmci5jaGFpbk1hdGNoKHMuaW5kZXgpO3ZhciBwPXMuaW5kZXgsZD1zLm1hdGNoZXNfcHQxP286YSxtPXMubWF0Y2hlc19oZWFkLGc9bltwXSx2PW0/Z1swXTpnW2cubGVuZ3RoLTFdLHk9bT9nWzFdOmdbZy5sZW5ndGgtMl0seD1tP2dbZy5sZW5ndGgtMV06Z1swXSxiPW0/Z1tnLmxlbmd0aC0yXTpnWzFdO3JldHVybiBlLnBvaW50c0NvbGxpbmVhcih5LHYsZCkmJihtPyhyJiZyLmNoYWluUmVtb3ZlSGVhZChzLmluZGV4LGQpLGcuc2hpZnQoKSk6KHImJnIuY2hhaW5SZW1vdmVUYWlsKHMuaW5kZXgsZCksZy5wb3AoKSksdj15KSxlLnBvaW50c1NhbWUoeCxkKT8obi5zcGxpY2UocCwxKSxlLnBvaW50c0NvbGxpbmVhcihiLHgsdikmJihtPyhyJiZyLmNoYWluUmVtb3ZlVGFpbChzLmluZGV4LHYpLGcucG9wKCkpOihyJiZyLmNoYWluUmVtb3ZlSGVhZChzLmluZGV4LHYpLGcuc2hpZnQoKSkpLHImJnIuY2hhaW5DbG9zZShzLmluZGV4KSx2b2lkIGkucHVzaChnKSk6dm9pZChtPyhyJiZyLmNoYWluQWRkSGVhZChzLmluZGV4LGQpLGcudW5zaGlmdChkKSk6KHImJnIuY2hhaW5BZGRUYWlsKHMuaW5kZXgsZCksZy5wdXNoKGQpKSl9dmFyIF89cy5pbmRleCx3PWwuaW5kZXg7ciYmci5jaGFpbkNvbm5lY3QoXyx3KTt2YXIgVD1uW19dLmxlbmd0aDxuW3ddLmxlbmd0aDtzLm1hdGNoZXNfaGVhZD9sLm1hdGNoZXNfaGVhZD9UPyhBKF8pLE0oXyx3KSk6KEEodyksTSh3LF8pKTpNKHcsXyk6bC5tYXRjaGVzX2hlYWQ/TShfLHcpOlQ/KEEoXyksTSh3LF8pKTooQSh3KSxNKF8sdykpfWZ1bmN0aW9uIGsodCxlLHIpe3JldHVybiBjLmluZGV4PXQsYy5tYXRjaGVzX2hlYWQ9ZSxjLm1hdGNoZXNfcHQxPXIsYz09PXM/KGM9bCwhMSk6KGM9bnVsbCwhMCl9ZnVuY3Rpb24gQSh0KXtyJiZyLmNoYWluUmV2ZXJzZSh0KSxuW3RdLnJldmVyc2UoKX1mdW5jdGlvbiBNKHQsaSl7dmFyIGE9blt0XSxvPW5baV0scz1hW2EubGVuZ3RoLTFdLGw9YVthLmxlbmd0aC0yXSxjPW9bMF0sdT1vWzFdO2UucG9pbnRzQ29sbGluZWFyKGwscyxjKSYmKHImJnIuY2hhaW5SZW1vdmVUYWlsKHQscyksYS5wb3AoKSxzPWwpLGUucG9pbnRzQ29sbGluZWFyKHMsYyx1KSYmKHImJnIuY2hhaW5SZW1vdmVIZWFkKGksYyksby5zaGlmdCgpKSxyJiZyLmNoYWluSm9pbih0LGkpLG5bdF09YS5jb25jYXQobyksbi5zcGxpY2UoaSwxKX19KSksaX19LHt9XSw0ODc6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1bXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT0odC5teUZpbGwuYWJvdmU/ODowKSsodC5teUZpbGwuYmVsb3c/NDowKSsodC5vdGhlckZpbGwmJnQub3RoZXJGaWxsLmFib3ZlPzI6MCkrKHQub3RoZXJGaWxsJiZ0Lm90aGVyRmlsbC5iZWxvdz8xOjApOzAhPT1lW2ldJiZuLnB1c2goe2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDp0LnN0YXJ0LGVuZDp0LmVuZCxteUZpbGw6e2Fib3ZlOjE9PT1lW2ldLGJlbG93OjI9PT1lW2ldfSxvdGhlckZpbGw6bnVsbH0pfSkpLHImJnIuc2VsZWN0ZWQobiksbn12YXIgaT17dW5pb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDIsMSwwLDIsMiwwLDAsMSwwLDEsMCwwLDAsMCwwXSxlKX0saW50ZXJzZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwwLDAsMCwwLDIsMCwyLDAsMCwxLDEsMCwyLDEsMF0sZSl9LGRpZmZlcmVuY2U6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDAsMCwwLDIsMCwyLDAsMSwxLDAsMCwwLDEsMiwwXSxlKX0sZGlmZmVyZW5jZVJldjpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMiwxLDAsMCwwLDEsMSwwLDIsMCwyLDAsMCwwLDBdLGUpfSx4b3I6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDIsMSwwLDIsMCwwLDEsMSwwLDAsMiwwLDEsMiwwXSxlKX19O2UuZXhwb3J0cz1pfSx7fV0sNDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPW5ldyBGbG9hdDY0QXJyYXkoNCksaT1uZXcgRmxvYXQ2NEFycmF5KDQpLGE9bmV3IEZsb2F0NjRBcnJheSg0KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzKXtuLmxlbmd0aDxvLmxlbmd0aCYmKG49bmV3IEZsb2F0NjRBcnJheShvLmxlbmd0aCksaT1uZXcgRmxvYXQ2NEFycmF5KG8ubGVuZ3RoKSxhPW5ldyBGbG9hdDY0QXJyYXkoby5sZW5ndGgpKTtmb3IodmFyIGw9MDtsPG8ubGVuZ3RoOysrbCluW2xdPXRbbF0tb1tsXSxpW2xdPWVbbF0tdFtsXSxhW2xdPXJbbF0tdFtsXTt2YXIgYz0wLHU9MCxmPTAsaD0wLHA9MCxkPTA7Zm9yKGw9MDtsPG8ubGVuZ3RoOysrbCl7dmFyIG09aVtsXSxnPWFbbF0sdj1uW2xdO2MrPW0qbSx1Kz1tKmcsZis9ZypnLGgrPXYqbSxwKz12KmcsZCs9dip2fXZhciB5LHgsYixfLHcsVD1NYXRoLmFicyhjKmYtdSp1KSxrPXUqcC1mKmgsQT11KmgtYypwO2lmKGsrQTw9VClpZihrPDApQTwwJiZoPDA/KEE9MCwtaD49Yz8oaz0xLHk9YysyKmgrZCk6eT1oKihrPS1oL2MpK2QpOihrPTAscD49MD8oQT0wLHk9ZCk6LXA+PWY/KEE9MSx5PWYrMipwK2QpOnk9cCooQT0tcC9mKStkKTtlbHNlIGlmKEE8MClBPTAsaD49MD8oaz0wLHk9ZCk6LWg+PWM/KGs9MSx5PWMrMipoK2QpOnk9aCooaz0taC9jKStkO2Vsc2V7dmFyIE09MS9UO3k9KGsqPU0pKihjKmsrdSooQSo9TSkrMipoKStBKih1KmsrZipBKzIqcCkrZH1lbHNlIGs8MD8oYj1mK3ApPih4PXUraCk/KF89Yi14KT49KHc9Yy0yKnUrZik/KGs9MSxBPTAseT1jKzIqaCtkKTp5PShrPV8vdykqKGMqayt1KihBPTEtaykrMipoKStBKih1KmsrZipBKzIqcCkrZDooaz0wLGI8PTA/KEE9MSx5PWYrMipwK2QpOnA+PTA/KEE9MCx5PWQpOnk9cCooQT0tcC9mKStkKTpBPDA/KGI9YytoKT4oeD11K3ApPyhfPWIteCk+PSh3PWMtMip1K2YpPyhBPTEsaz0wLHk9ZisyKnArZCk6eT0oaz0xLShBPV8vdykpKihjKmsrdSpBKzIqaCkrQSoodSprK2YqQSsyKnApK2Q6KEE9MCxiPD0wPyhrPTEseT1jKzIqaCtkKTpoPj0wPyhrPTAseT1kKTp5PWgqKGs9LWgvYykrZCk6KF89ZitwLXUtaCk8PTA/KGs9MCxBPTEseT1mKzIqcCtkKTpfPj0odz1jLTIqdStmKT8oaz0xLEE9MCx5PWMrMipoK2QpOnk9KGs9Xy93KSooYyprK3UqKEE9MS1rKSsyKmgpK0EqKHUqaytmKkErMipwKStkO3ZhciBTPTEtay1BO2ZvcihsPTA7bDxvLmxlbmd0aDsrK2wpc1tsXT1TKnRbbF0rayplW2xdK0EqcltsXTtyZXR1cm4geTwwPzA6eX19LHt9XSw0ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgic3RyZWFtIikuVHJhbnNmb3JtLGk9dCgic3RyZWFtLXBhcnNlciIpO2Z1bmN0aW9uIGEoKXtuLmNhbGwodGhpcyx7cmVhZGFibGVPYmplY3RNb2RlOiEwfSl9ZnVuY3Rpb24gbyh0LGUscil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsdGhpcy5tZXNzYWdlPXQsZSYmKHRoaXMuY29kZT1lKSxyJiYodGhpcy5zdGF0dXNDb2RlPXIpfWEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpLGEucHJvdG90eXBlLmNvbnN0cnVjdG9yPWEsaShhLnByb3RvdHlwZSksci5QYXJzZXJTdHJlYW09YSxyLnNsaWNlRXE9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1lLGk9MDtpPHIubGVuZ3RoOylpZih0W24rK10hPT1yW2krK10pcmV0dXJuITE7cmV0dXJuITB9LHIuc3RyMmFycj1mdW5jdGlvbih0LGUpe3ZhciByPVtdLG49MDtpZihlJiYiaGV4Ij09PWUpZm9yKDtuPHQubGVuZ3RoOylyLnB1c2gocGFyc2VJbnQodC5zbGljZShuLG4rMiksMTYpKSxuKz0yO2Vsc2UgZm9yKDtuPHQubGVuZ3RoO24rKylyLnB1c2goMjU1JnQuY2hhckNvZGVBdChuKSk7cmV0dXJuIHJ9LHIucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZV18dFtlKzFdPDw4fSxyLnJlYWRVSW50MTZCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0W2UrMV18dFtlXTw8OH0sci5yZWFkVUludDMyTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlXXx0W2UrMV08PDh8dFtlKzJdPDwxNnwxNjc3NzIxNip0W2UrM119LHIucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZSszXXx0W2UrMl08PDh8dFtlKzFdPDwxNnwxNjc3NzIxNip0W2VdfSxvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksby5wcm90b3R5cGUuY29uc3RydWN0b3I9byxyLlByb2JlRXJyb3I9b30se3N0cmVhbTo1NDMsInN0cmVhbS1wYXJzZXIiOjU1OH1dLDQ5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9bmV3IEVycm9yKHQpO3JldHVybiByLmNvZGU9ZSxyfWZ1bmN0aW9uIGkodCl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHQpKX1jYXRjaChlKXtyZXR1cm4gdH19ZnVuY3Rpb24gYSh0LGUscil7dGhpcy5pbnB1dD10LnN1YmFycmF5KGUsciksdGhpcy5zdGFydD1lO3ZhciBpPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0aGlzLmlucHV0LnN1YmFycmF5KDAsNCkpO2lmKCJJSSpcMCIhPT1pJiYiTU1cMCoiIT09aSl0aHJvdyBuKCJpbnZhbGlkIFRJRkYgc2lnbmF0dXJlIiwiRUJBRERBVEEiKTt0aGlzLmJpZ19lbmRpYW49Ik0iPT09aVswXX1hLnByb3RvdHlwZS5lYWNoPWZ1bmN0aW9uKHQpe3RoaXMuYWJvcnRlZD0hMTt2YXIgZT10aGlzLnJlYWRfdWludDMyKDQpO2Zvcih0aGlzLmlmZHNfdG9fcmVhZD1be2lkOjAsb2Zmc2V0OmV9XTt0aGlzLmlmZHNfdG9fcmVhZC5sZW5ndGg+MCYmIXRoaXMuYWJvcnRlZDspe3ZhciByPXRoaXMuaWZkc190b19yZWFkLnNoaWZ0KCk7ci5vZmZzZXQmJnRoaXMuc2Nhbl9pZmQoci5pZCxyLm9mZnNldCx0KX19LGEucHJvdG90eXBlLnJlYWRfdWludDE2PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQ7aWYodCsyPmUubGVuZ3RoKXRocm93IG4oInVuZXhwZWN0ZWQgRU9GIiwiRUJBRERBVEEiKTtyZXR1cm4gdGhpcy5iaWdfZW5kaWFuPzI1NiplW3RdK2VbdCsxXTplW3RdKzI1NiplW3QrMV19LGEucHJvdG90eXBlLnJlYWRfdWludDMyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQ7aWYodCs0PmUubGVuZ3RoKXRocm93IG4oInVuZXhwZWN0ZWQgRU9GIiwiRUJBRERBVEEiKTtyZXR1cm4gdGhpcy5iaWdfZW5kaWFuPzE2Nzc3MjE2KmVbdF0rNjU1MzYqZVt0KzFdKzI1NiplW3QrMl0rZVt0KzNdOmVbdF0rMjU2KmVbdCsxXSs2NTUzNiplW3QrMl0rMTY3NzcyMTYqZVt0KzNdfSxhLnByb3RvdHlwZS5pc19zdWJpZmRfbGluaz1mdW5jdGlvbih0LGUpe3JldHVybiAwPT09dCYmMzQ2NjU9PT1lfHwwPT09dCYmMzQ4NTM9PT1lfHwzNDY2NT09PXQmJjQwOTY1PT09ZX0sYS5wcm90b3R5cGUuZXhpZl9mb3JtYXRfbGVuZ3RoPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDE6Y2FzZSAyOmNhc2UgNjpjYXNlIDc6cmV0dXJuIDE7Y2FzZSAzOmNhc2UgODpyZXR1cm4gMjtjYXNlIDQ6Y2FzZSA5OmNhc2UgMTE6cmV0dXJuIDQ7Y2FzZSA1OmNhc2UgMTA6Y2FzZSAxMjpyZXR1cm4gODtkZWZhdWx0OnJldHVybiAwfX0sYS5wcm90b3R5cGUuZXhpZl9mb3JtYXRfcmVhZD1mdW5jdGlvbih0LGUpe3ZhciByO3N3aXRjaCh0KXtjYXNlIDE6Y2FzZSAyOnJldHVybiByPXRoaXMuaW5wdXRbZV07Y2FzZSA2OnJldHVybihyPXRoaXMuaW5wdXRbZV0pfDMzNTU0NDMwKigxMjgmcik7Y2FzZSAzOnJldHVybiByPXRoaXMucmVhZF91aW50MTYoZSk7Y2FzZSA4OnJldHVybihyPXRoaXMucmVhZF91aW50MTYoZSkpfDEzMTA3MCooMzI3Njgmcik7Y2FzZSA0OnJldHVybiByPXRoaXMucmVhZF91aW50MzIoZSk7Y2FzZSA5OnJldHVybiAwfChyPXRoaXMucmVhZF91aW50MzIoZSkpO2Nhc2UgNTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMjpjYXNlIDc6ZGVmYXVsdDpyZXR1cm4gbnVsbH19LGEucHJvdG90eXBlLnNjYW5faWZkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10aGlzLnJlYWRfdWludDE2KGUpO2UrPTI7Zm9yKHZhciBvPTA7bzxhO28rKyl7dmFyIHM9dGhpcy5yZWFkX3VpbnQxNihlKSxsPXRoaXMucmVhZF91aW50MTYoZSsyKSxjPXRoaXMucmVhZF91aW50MzIoZSs0KSx1PXRoaXMuZXhpZl9mb3JtYXRfbGVuZ3RoKGwpLGY9Yyp1LGg9Zjw9ND9lKzg6dGhpcy5yZWFkX3VpbnQzMihlKzgpLHA9ITE7aWYoaCtmPnRoaXMuaW5wdXQubGVuZ3RoKXRocm93IG4oInVuZXhwZWN0ZWQgRU9GIiwiRUJBRERBVEEiKTtmb3IodmFyIGQ9W10sbT1oLGc9MDtnPGM7ZysrLG0rPXUpe3ZhciB2PXRoaXMuZXhpZl9mb3JtYXRfcmVhZChsLG0pO2lmKG51bGw9PT12KXtkPW51bGw7YnJlYWt9ZC5wdXNoKHYpfWlmKEFycmF5LmlzQXJyYXkoZCkmJjI9PT1sJiYoZD1pKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxkKSkpJiYiXDAiPT09ZFtkLmxlbmd0aC0xXSYmKGQ9ZC5zbGljZSgwLC0xKSksdGhpcy5pc19zdWJpZmRfbGluayh0LHMpJiZBcnJheS5pc0FycmF5KGQpJiZOdW1iZXIuaXNJbnRlZ2VyKGRbMF0pJiZkWzBdPjAmJih0aGlzLmlmZHNfdG9fcmVhZC5wdXNoKHtpZDpzLG9mZnNldDpkWzBdfSkscD0hMCksITE9PT1yKHtpc19iaWdfZW5kaWFuOnRoaXMuYmlnX2VuZGlhbixpZmQ6dCx0YWc6cyxmb3JtYXQ6bCxjb3VudDpjLGVudHJ5X29mZnNldDplK3RoaXMuc3RhcnQsZGF0YV9sZW5ndGg6ZixkYXRhX29mZnNldDpoK3RoaXMuc3RhcnQsdmFsdWU6ZCxpc19zdWJpZmRfbGluazpwfSkpcmV0dXJuIHZvaWQodGhpcy5hYm9ydGVkPSEwKTtlKz0xMn0wPT09dCYmdGhpcy5pZmRzX3RvX3JlYWQucHVzaCh7aWQ6MSxvZmZzZXQ6dGhpcy5yZWFkX3VpbnQzMihlKX0pfSxlLmV4cG9ydHMuRXhpZlBhcnNlcj1hLGUuZXhwb3J0cy5nZXRfb3JpZW50YXRpb249ZnVuY3Rpb24odCl7dmFyIGU9MDt0cnl7cmV0dXJuIG5ldyBhKHQsMCx0Lmxlbmd0aCkuZWFjaCgoZnVuY3Rpb24odCl7aWYoMD09PXQuaWZkJiYyNzQ9PT10LnRhZyYmQXJyYXkuaXNBcnJheSh0LnZhbHVlKSlyZXR1cm4gZT10LnZhbHVlWzBdLCExfSkpLGV9Y2F0Y2godCl7cmV0dXJuLTF9fX0se31dLDQ5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbW1vbiIpLnJlYWRVSW50MTZCRSxpPXQoIi4vY29tbW9uIikucmVhZFVJbnQzMkJFO2Z1bmN0aW9uIGEodCxlKXtpZih0Lmxlbmd0aDw0K2UpcmV0dXJuIG51bGw7dmFyIHI9aSh0LGUpO3JldHVybiB0Lmxlbmd0aDxyK2V8fHI8OD9udWxsOntib3h0eXBlOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0LnNsaWNlKGUrNCxlKzgpKSxkYXRhOnQuc2xpY2UoZSs4LGUrciksZW5kOmUrcn19ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj0wOzspe3ZhciBuPWEodCxyKTtpZighbilicmVhaztzd2l0Y2gobi5ib3h0eXBlKXtjYXNlImlzcGUiOmUuc2l6ZXMucHVzaCh7d2lkdGg6aShuLmRhdGEsNCksaGVpZ2h0Omkobi5kYXRhLDgpfSk7YnJlYWs7Y2FzZSJpcm90IjplLnRyYW5zZm9ybXMucHVzaCh7dHlwZToiaXJvdCIsdmFsdWU6MyZuLmRhdGFbMF19KTticmVhaztjYXNlImltaXIiOmUudHJhbnNmb3Jtcy5wdXNoKHt0eXBlOiJpbWlyIix2YWx1ZToxJm4uZGF0YVswXX0pfXI9bi5lbmR9fWZ1bmN0aW9uIHModCxlLHIpe2Zvcih2YXIgbj0wLGk9MDtpPHI7aSsrKW49MjU2Km4rKHRbZStpXXx8MCk7cmV0dXJuIG59ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgcj10WzRdPj40JjE1LGk9MTUmdFs0XSxhPXRbNV0+PjQmMTUsbz1uKHQsNiksbD04LGM9MDtjPG87YysrKXt2YXIgdT1uKHQsbCksZj1uKHQsbCs9MiksaD1zKHQsbCs9MixhKSxwPW4odCxsKz1hKTtpZihsKz0yLDA9PT1mJiYxPT09cCl7dmFyIGQ9cyh0LGwsciksbT1zKHQsbCtyLGkpO2UuaXRlbV9sb2NbdV09e2xlbmd0aDptLG9mZnNldDpkK2h9fWwrPXAqKHIraSl9fWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9bih0LDQpLGk9NixvPTA7bzxyO28rKyl7dmFyIHM9YSh0LGkpO2lmKCFzKWJyZWFrO2lmKCJpbmZlIj09PXMuYm94dHlwZSl7Zm9yKHZhciBsPW4ocy5kYXRhLDQpLGM9IiIsdT04O3U8cy5kYXRhLmxlbmd0aCYmcy5kYXRhW3VdO3UrKyljKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHMuZGF0YVt1XSk7ZS5pdGVtX2luZltjXT1sfWk9cy5lbmR9fWZ1bmN0aW9uIHUodCxlKXtmb3IodmFyIHI9MDs7KXt2YXIgbj1hKHQscik7aWYoIW4pYnJlYWs7ImlwY28iPT09bi5ib3h0eXBlJiZvKG4uZGF0YSxlKSxyPW4uZW5kfX1lLmV4cG9ydHMudW5ib3g9YSxlLmV4cG9ydHMucmVhZFNpemVGcm9tTWV0YT1mdW5jdGlvbih0KXt2YXIgZT17c2l6ZXM6W10sdHJhbnNmb3JtczpbXSxpdGVtX2luZjp7fSxpdGVtX2xvYzp7fX07aWYoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9NDs7KXt2YXIgbj1hKHQscik7aWYoIW4pYnJlYWs7ImlwcnAiPT09bi5ib3h0eXBlJiZ1KG4uZGF0YSxlKSwiaWxvYyI9PT1uLmJveHR5cGUmJmwobi5kYXRhLGUpLCJpaW5mIj09PW4uYm94dHlwZSYmYyhuLmRhdGEsZSkscj1uLmVuZH19KHQsZSksZS5zaXplcy5sZW5ndGgpe3ZhciByLG4saSxvPShyPWUuc2l6ZXMsbj1yLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC53aWR0aD5lLndpZHRofHx0LndpZHRoPT09ZS53aWR0aCYmdC5oZWlnaHQ+ZS5oZWlnaHQ/dDplfSkpLGk9ci5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaGVpZ2h0PmUuaGVpZ2h0fHx0LmhlaWdodD09PWUuaGVpZ2h0JiZ0LndpZHRoPmUud2lkdGg/dDplfSkpLG4ud2lkdGg+aS5oZWlnaHR8fG4ud2lkdGg9PT1pLmhlaWdodCYmbi5oZWlnaHQ+aS53aWR0aD9uOmkpLHM9MTtlLnRyYW5zZm9ybXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9ezE6NiwyOjUsMzo4LDQ6Nyw1OjQsNjozLDc6Miw4OjF9LHI9ezE6NCwyOjMsMzoyLDQ6MSw1OjYsNjo1LDc6OCw4Ojd9O2lmKCJpbWlyIj09PXQudHlwZSYmKHM9MD09PXQudmFsdWU/cltzXTplW3M9ZVtzPXJbc11dXSksImlyb3QiPT09dC50eXBlKWZvcih2YXIgbj0wO248dC52YWx1ZTtuKyspcz1lW3NdfSkpO3ZhciBmPW51bGw7cmV0dXJuIGUuaXRlbV9pbmYuRXhpZiYmKGY9ZS5pdGVtX2xvY1tlLml0ZW1faW5mLkV4aWZdKSx7d2lkdGg6by53aWR0aCxoZWlnaHQ6by5oZWlnaHQsb3JpZW50YXRpb246ZS50cmFuc2Zvcm1zLmxlbmd0aD9zOm51bGwsdmFyaWFudHM6ZS5zaXplcyxleGlmX2xvY2F0aW9uOmZ9fX0sZS5leHBvcnRzLmdldE1pbWVUeXBlPWZ1bmN0aW9uKHQpe3ZhciBlPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0LnNsaWNlKDAsNCkpLHI9e307cltlXT0hMDtmb3IodmFyIG49ODtuPHQubGVuZ3RoO24rPTQpcltTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdC5zbGljZShuLG4rNCkpXT0hMDtpZihyLm1pZjF8fHIubXNmMXx8ci5taWFmKXJldHVybiJhdmlmIj09PWV8fCJhdmlzIj09PWV8fCJhdmlvIj09PWU/e3R5cGU6ImF2aWYiLG1pbWU6ImltYWdlL2F2aWYifToiaGVpYyI9PT1lfHwiaGVpeCI9PT1lP3t0eXBlOiJoZWljIixtaW1lOiJpbWFnZS9oZWljIn06ImhldmMiPT09ZXx8ImhldngiPT09ZT97dHlwZToiaGVpYyIsbWltZToiaW1hZ2UvaGVpYy1zZXF1ZW5jZSJ9OnIuYXZpZnx8ci5hdmlzP3t0eXBlOiJhdmlmIixtaW1lOiJpbWFnZS9hdmlmIn06ci5oZWljfHxyLmhlaXh8fHIuaGV2Y3x8ci5oZXZ4fHxyLmhlaXM/ci5tc2YxP3t0eXBlOiJoZWlmIixtaW1lOiJpbWFnZS9oZWlmLXNlcXVlbmNlIn06e3R5cGU6ImhlaWYiLG1pbWU6ImltYWdlL2hlaWYifTp7dHlwZToiYXZpZiIsbWltZToiaW1hZ2UvYXZpZiJ9fX0seyIuL2NvbW1vbiI6NDg5fV0sNDkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbW1vbiIpLnN0cjJhcnIsaT10KCIuLi9jb21tb24iKS5zbGljZUVxLGE9dCgiLi4vY29tbW9uIikucmVhZFVJbnQzMkJFLG89dCgiLi4vbWlhZl91dGlscyIpLHM9dCgiLi4vZXhpZl91dGlscyIpLGw9bigiZnR5cCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihpKHQsNCxsKSl7dmFyIGU9by51bmJveCh0LDApO2lmKGUpe3ZhciByPW8uZ2V0TWltZVR5cGUoZS5kYXRhKTtpZihyKXtmb3IodmFyIG4sYz1lLmVuZDs7KXt2YXIgdT1vLnVuYm94KHQsYyk7aWYoIXUpYnJlYWs7aWYoYz11LmVuZCwibWRhdCI9PT11LmJveHR5cGUpcmV0dXJuO2lmKCJtZXRhIj09PXUuYm94dHlwZSl7bj11LmRhdGE7YnJlYWt9fWlmKG4pe3ZhciBmPW8ucmVhZFNpemVGcm9tTWV0YShuKTtpZihmKXt2YXIgaD17d2lkdGg6Zi53aWR0aCxoZWlnaHQ6Zi5oZWlnaHQsdHlwZTpyLnR5cGUsbWltZTpyLm1pbWUsd1VuaXRzOiJweCIsaFVuaXRzOiJweCJ9O2lmKGYudmFyaWFudHMubGVuZ3RoPjEmJihoLnZhcmlhbnRzPWYudmFyaWFudHMpLGYub3JpZW50YXRpb24mJihoLm9yaWVudGF0aW9uPWYub3JpZW50YXRpb24pLGYuZXhpZl9sb2NhdGlvbiYmZi5leGlmX2xvY2F0aW9uLm9mZnNldCtmLmV4aWZfbG9jYXRpb24ubGVuZ3RoPD10Lmxlbmd0aCl7dmFyIHA9YSh0LGYuZXhpZl9sb2NhdGlvbi5vZmZzZXQpLGQ9dC5zbGljZShmLmV4aWZfbG9jYXRpb24ub2Zmc2V0K3ArNCxmLmV4aWZfbG9jYXRpb24ub2Zmc2V0K2YuZXhpZl9sb2NhdGlvbi5sZW5ndGgpLG09cy5nZXRfb3JpZW50YXRpb24oZCk7bT4wJiYoaC5vcmllbnRhdGlvbj1tKX1yZXR1cm4gaH19fX19fX0seyIuLi9jb21tb24iOjQ4OSwiLi4vZXhpZl91dGlscyI6NDkwLCIuLi9taWFmX3V0aWxzIjo0OTF9XSw0OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tbW9uIikuc3RyMmFycixpPXQoIi4uL2NvbW1vbiIpLnNsaWNlRXEsYT10KCIuLi9jb21tb24iKS5yZWFkVUludDE2TEUsbz1uKCJCTSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighKHQubGVuZ3RoPDI2KSYmaSh0LDAsbykpcmV0dXJue3dpZHRoOmEodCwxOCksaGVpZ2h0OmEodCwyMiksdHlwZToiYm1wIixtaW1lOiJpbWFnZS9ibXAiLHdVbml0czoicHgiLGhVbml0czoicHgifX19LHsiLi4vY29tbW9uIjo0ODl9XSw0OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tbW9uIikuc3RyMmFycixpPXQoIi4uL2NvbW1vbiIpLnNsaWNlRXEsYT10KCIuLi9jb21tb24iKS5yZWFkVUludDE2TEUsbz1uKCJHSUY4N2EiKSxzPW4oIkdJRjg5YSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighKHQubGVuZ3RoPDEwKSYmKGkodCwwLG8pfHxpKHQsMCxzKSkpcmV0dXJue3dpZHRoOmEodCw2KSxoZWlnaHQ6YSh0LDgpLHR5cGU6ImdpZiIsbWltZToiaW1hZ2UvZ2lmIix3VW5pdHM6InB4IixoVW5pdHM6InB4In19fSx7Ii4uL2NvbW1vbiI6NDg5fV0sNDk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbW1vbiIpLnJlYWRVSW50MTZMRTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bih0LDApLHI9bih0LDIpLGk9bih0LDQpO2lmKDA9PT1lJiYxPT09ciYmaSl7Zm9yKHZhciBhPVtdLG89e3dpZHRoOjAsaGVpZ2h0OjB9LHM9MDtzPGk7cysrKXt2YXIgbD10WzYrMTYqc118fDI1NixjPXRbNisxNipzKzFdfHwyNTYsdT17d2lkdGg6bCxoZWlnaHQ6Y307YS5wdXNoKHUpLChsPm8ud2lkdGh8fGM+by5oZWlnaHQpJiYobz11KX1yZXR1cm57d2lkdGg6by53aWR0aCxoZWlnaHQ6by5oZWlnaHQsdmFyaWFudHM6YSx0eXBlOiJpY28iLG1pbWU6ImltYWdlL3gtaWNvbiIsd1VuaXRzOiJweCIsaFVuaXRzOiJweCJ9fX19LHsiLi4vY29tbW9uIjo0ODl9XSw0OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tbW9uIikucmVhZFVJbnQxNkJFLGk9dCgiLi4vY29tbW9uIikuc3RyMmFycixhPXQoIi4uL2NvbW1vbiIpLnNsaWNlRXEsbz10KCIuLi9leGlmX3V0aWxzIikscz1pKCJFeGlmXDBcMCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighKHQubGVuZ3RoPDIpJiYyNTU9PT10WzBdJiYyMTY9PT10WzFdKWZvcih2YXIgZT0yOzspe2lmKHQubGVuZ3RoLWU8MilyZXR1cm47aWYoMjU1IT09dFtlKytdKXJldHVybjtmb3IodmFyIHIsaSxsPXRbZSsrXTsyNTU9PT1sOylsPXRbZSsrXTtpZigyMDg8PWwmJmw8PTIxN3x8MT09PWwpcj0wO2Vsc2V7aWYoISgxOTI8PWwmJmw8PTI1NCkpcmV0dXJuO2lmKHQubGVuZ3RoLWU8MilyZXR1cm47cj1uKHQsZSktMixlKz0yfWlmKDIxNz09PWx8fDIxOD09PWwpcmV0dXJuO2lmKDIyNT09PWwmJnI+PTEwJiZhKHQsZSxzKSYmKGk9by5nZXRfb3JpZW50YXRpb24odC5zbGljZShlKzYsZStyKSkpLHI+PTUmJjE5Mjw9bCYmbDw9MjA3JiYxOTYhPT1sJiYyMDAhPT1sJiYyMDQhPT1sKXtpZih0Lmxlbmd0aC1lPHIpcmV0dXJuO3ZhciBjPXt3aWR0aDpuKHQsZSszKSxoZWlnaHQ6bih0LGUrMSksdHlwZToianBnIixtaW1lOiJpbWFnZS9qcGVnIix3VW5pdHM6InB4IixoVW5pdHM6InB4In07cmV0dXJuIGk+MCYmKGMub3JpZW50YXRpb249aSksY31lKz1yfX19LHsiLi4vY29tbW9uIjo0ODksIi4uL2V4aWZfdXRpbHMiOjQ5MH1dLDQ5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb21tb24iKS5zdHIyYXJyLGk9dCgiLi4vY29tbW9uIikuc2xpY2VFcSxhPXQoIi4uL2NvbW1vbiIpLnJlYWRVSW50MzJCRSxvPW4oIlx4ODlQTkdcclxuXHgxYVxuIikscz1uKCJJSERSIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCEodC5sZW5ndGg8MjQpJiZpKHQsMCxvKSYmaSh0LDEyLHMpKXJldHVybnt3aWR0aDphKHQsMTYpLGhlaWdodDphKHQsMjApLHR5cGU6InBuZyIsbWltZToiaW1hZ2UvcG5nIix3VW5pdHM6InB4IixoVW5pdHM6InB4In19fSx7Ii4uL2NvbW1vbiI6NDg5fV0sNDk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbW1vbiIpLnN0cjJhcnIsaT10KCIuLi9jb21tb24iKS5zbGljZUVxLGE9dCgiLi4vY29tbW9uIikucmVhZFVJbnQzMkJFLG89bigiOEJQU1wwXHgwMSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighKHQubGVuZ3RoPDIyKSYmaSh0LDAsbykpcmV0dXJue3dpZHRoOmEodCwxOCksaGVpZ2h0OmEodCwxNCksdHlwZToicHNkIixtaW1lOiJpbWFnZS92bmQuYWRvYmUucGhvdG9zaG9wIix3VW5pdHM6InB4IixoVW5pdHM6InB4In19fSx7Ii4uL2NvbW1vbiI6NDg5fV0sNDk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZpc0Zpbml0ZSh0KSYmdD4wfXZhciBpPS88Wy1fLjphLXpBLVowLTldW14+XSo+LyxhPS9ePChbLV8uOmEtekEtWjAtOV0rOik/c3ZnXHMvLG89L1teLV1cYndpZHRoPSIoW14lXSs/KSJ8W14tXVxid2lkdGg9JyhbXiVdKz8pJy8scz0vXGJoZWlnaHQ9IihbXiVdKz8pInxcYmhlaWdodD0nKFteJV0rPyknLyxsPS9cYnZpZXdbYkJdb3g9IiguKz8pInxcYnZpZXdbYkJdb3g9JyguKz8pJy8sYz0vaW4kfG1tJHxjbSR8cHQkfHBjJHxweCR8ZW0kfGV4JC87ZnVuY3Rpb24gdSh0KXtyZXR1cm4gYy50ZXN0KHQpP3QubWF0Y2goYylbMF06InB4In1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoZnVuY3Rpb24odCl7dmFyIGUscj0wLG49dC5sZW5ndGg7Zm9yKDIzOT09PXRbMF0mJjE4Nz09PXRbMV0mJjE5MT09PXRbMl0mJihyPTMpO3I8biYmKDMyPT09KGU9dFtyXSl8fDk9PT1lfHwxMz09PWV8fDEwPT09ZSk7KXIrKztyZXR1cm4gciE9PW4mJjYwPT09dFtyXX0odCkpe2Zvcih2YXIgZT0iIixyPTA7cjx0Lmxlbmd0aDtyKyspZSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0W3JdKTt2YXIgYz0oZS5tYXRjaChpKXx8WyIiXSlbMF07aWYoYS50ZXN0KGMpKXt2YXIgZj1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKG8pLHI9dC5tYXRjaChzKSxuPXQubWF0Y2gobCk7cmV0dXJue3dpZHRoOmUmJihlWzFdfHxlWzJdKSxoZWlnaHQ6ciYmKHJbMV18fHJbMl0pLHZpZXdib3g6biYmKG5bMV18fG5bMl0pfX0oYyksaD1wYXJzZUZsb2F0KGYud2lkdGgpLHA9cGFyc2VGbG9hdChmLmhlaWdodCk7aWYoZi53aWR0aCYmZi5oZWlnaHQpe2lmKCFuKGgpfHwhbihwKSlyZXR1cm47cmV0dXJue3dpZHRoOmgsaGVpZ2h0OnAsdHlwZToic3ZnIixtaW1lOiJpbWFnZS9zdmcreG1sIix3VW5pdHM6dShmLndpZHRoKSxoVW5pdHM6dShmLmhlaWdodCl9fXZhciBkPShmLnZpZXdib3h8fCIiKS5zcGxpdCgiICIpLG09e3dpZHRoOmRbMl0saGVpZ2h0OmRbM119LGc9cGFyc2VGbG9hdChtLndpZHRoKSx2PXBhcnNlRmxvYXQobS5oZWlnaHQpO2lmKG4oZykmJm4odikmJnUobS53aWR0aCk9PT11KG0uaGVpZ2h0KSl7dmFyIHk9Zy92O2lmKGYud2lkdGgpe2lmKCFuKGgpKXJldHVybjtyZXR1cm57d2lkdGg6aCxoZWlnaHQ6aC95LHR5cGU6InN2ZyIsbWltZToiaW1hZ2Uvc3ZnK3htbCIsd1VuaXRzOnUoZi53aWR0aCksaFVuaXRzOnUoZi53aWR0aCl9fWlmKGYuaGVpZ2h0KXtpZighbihwKSlyZXR1cm47cmV0dXJue3dpZHRoOnAqeSxoZWlnaHQ6cCx0eXBlOiJzdmciLG1pbWU6ImltYWdlL3N2Zyt4bWwiLHdVbml0czp1KGYuaGVpZ2h0KSxoVW5pdHM6dShmLmhlaWdodCl9fXJldHVybnt3aWR0aDpnLGhlaWdodDp2LHR5cGU6InN2ZyIsbWltZToiaW1hZ2Uvc3ZnK3htbCIsd1VuaXRzOnUobS53aWR0aCksaFVuaXRzOnUobS5oZWlnaHQpfX19fX19LHt9XSw1MDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tbW9uIikuc3RyMmFycixpPXQoIi4uL2NvbW1vbiIpLnNsaWNlRXEsYT10KCIuLi9jb21tb24iKS5yZWFkVUludDE2TEUsbz10KCIuLi9jb21tb24iKS5yZWFkVUludDE2QkUscz10KCIuLi9jb21tb24iKS5yZWFkVUludDMyTEUsbD10KCIuLi9jb21tb24iKS5yZWFkVUludDMyQkUsYz1uKCJJSSpcMCIpLHU9bigiTU1cMCoiKTtmdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4gcj9vKHQsZSk6YSh0LGUpfWZ1bmN0aW9uIGgodCxlLHIpe3JldHVybiByP2wodCxlKTpzKHQsZSl9ZnVuY3Rpb24gcCh0LGUscil7dmFyIG49Zih0LGUrMixyKTtyZXR1cm4gMSE9PWgodCxlKzQscil8fDMhPT1uJiY0IT09bj9udWxsOjM9PT1uP2YodCxlKzgscik6aCh0LGUrOCxyKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoISh0Lmxlbmd0aDw4KSYmKGkodCwwLGMpfHxpKHQsMCx1KSkpe3ZhciBlPTc3PT09dFswXSxyPWgodCw0LGUpLTg7aWYoIShyPDApKXt2YXIgbj1yKzg7aWYoISh0Lmxlbmd0aC1uPDIpKXt2YXIgYT0xMipmKHQsbiswLGUpO2lmKCEoYTw9MHx8KG4rPTIsdC5sZW5ndGgtbjxhKSkpe3ZhciBvLHMsbCxkO2ZvcihvPTA7bzxhO28rPTEyKTI1Nj09PShkPWYodCxuK28sZSkpP3M9cCh0LG4rbyxlKToyNTc9PT1kJiYobD1wKHQsbitvLGUpKTtyZXR1cm4gcyYmbD97d2lkdGg6cyxoZWlnaHQ6bCx0eXBlOiJ0aWZmIixtaW1lOiJpbWFnZS90aWZmIix3VW5pdHM6InB4IixoVW5pdHM6InB4In06dm9pZCAwfX19fX19LHsiLi4vY29tbW9uIjo0ODl9XSw1MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tbW9uIikuc3RyMmFycixpPXQoIi4uL2NvbW1vbiIpLnNsaWNlRXEsYT10KCIuLi9jb21tb24iKS5yZWFkVUludDE2TEUsbz10KCIuLi9jb21tb24iKS5yZWFkVUludDMyTEUscz10KCIuLi9leGlmX3V0aWxzIiksbD1uKCJSSUZGIiksYz1uKCJXRUJQIik7ZnVuY3Rpb24gdSh0LGUpe2lmKDE1Nz09PXRbZSszXSYmMT09PXRbZSs0XSYmNDI9PT10W2UrNV0pcmV0dXJue3dpZHRoOjE2MzgzJmEodCxlKzYpLGhlaWdodDoxNjM4MyZhKHQsZSs4KSx0eXBlOiJ3ZWJwIixtaW1lOiJpbWFnZS93ZWJwIix3VW5pdHM6InB4IixoVW5pdHM6InB4In19ZnVuY3Rpb24gZih0LGUpe2lmKDQ3PT09dFtlXSl7dmFyIHI9byh0LGUrMSk7cmV0dXJue3dpZHRoOjErKDE2MzgzJnIpLGhlaWdodDoxKyhyPj4xNCYxNjM4MyksdHlwZToid2VicCIsbWltZToiaW1hZ2Uvd2VicCIsd1VuaXRzOiJweCIsaFVuaXRzOiJweCJ9fX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJue3dpZHRoOjErKHRbZSs2XTw8MTZ8dFtlKzVdPDw4fHRbZSs0XSksaGVpZ2h0OjErKHRbZSs5XTw8ZXx0W2UrOF08PDh8dFtlKzddKSx0eXBlOiJ3ZWJwIixtaW1lOiJpbWFnZS93ZWJwIix3VW5pdHM6InB4IixoVW5pdHM6InB4In19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCEodC5sZW5ndGg8MTYpJiYoaSh0LDAsbCl8fGkodCw4LGMpKSl7dmFyIGU9MTIscj1udWxsLG49MCxhPW8odCw0KSs4O2lmKCEoYT50Lmxlbmd0aCkpe2Zvcig7ZSs4PGE7KWlmKDAhPT10W2VdKXt2YXIgcD1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdC5zbGljZShlLGUrNCkpLGQ9byh0LGUrNCk7IlZQOCAiPT09cCYmZD49MTA/cj1yfHx1KHQsZSs4KToiVlA4TCI9PT1wJiZkPj05P3I9cnx8Zih0LGUrOCk6IlZQOFgiPT09cCYmZD49MTA/cj1yfHxoKHQsZSs4KToiRVhJRiI9PT1wJiYobj1zLmdldF9vcmllbnRhdGlvbih0LnNsaWNlKGUrOCxlKzgrZCkpLGU9MS8wKSxlKz04K2R9ZWxzZSBlKys7aWYocilyZXR1cm4gbj4wJiYoci5vcmllbnRhdGlvbj1uKSxyfX19fSx7Ii4uL2NvbW1vbiI6NDg5LCIuLi9leGlmX3V0aWxzIjo0OTB9XSw1MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdmlmOnQoIi4vcGFyc2Vfc3luYy9hdmlmIiksYm1wOnQoIi4vcGFyc2Vfc3luYy9ibXAiKSxnaWY6dCgiLi9wYXJzZV9zeW5jL2dpZiIpLGljbzp0KCIuL3BhcnNlX3N5bmMvaWNvIiksanBlZzp0KCIuL3BhcnNlX3N5bmMvanBlZyIpLHBuZzp0KCIuL3BhcnNlX3N5bmMvcG5nIikscHNkOnQoIi4vcGFyc2Vfc3luYy9wc2QiKSxzdmc6dCgiLi9wYXJzZV9zeW5jL3N2ZyIpLHRpZmY6dCgiLi9wYXJzZV9zeW5jL3RpZmYiKSx3ZWJwOnQoIi4vcGFyc2Vfc3luYy93ZWJwIil9fSx7Ii4vcGFyc2Vfc3luYy9hdmlmIjo0OTIsIi4vcGFyc2Vfc3luYy9ibXAiOjQ5MywiLi9wYXJzZV9zeW5jL2dpZiI6NDk0LCIuL3BhcnNlX3N5bmMvaWNvIjo0OTUsIi4vcGFyc2Vfc3luYy9qcGVnIjo0OTYsIi4vcGFyc2Vfc3luYy9wbmciOjQ5NywiLi9wYXJzZV9zeW5jL3BzZCI6NDk4LCIuL3BhcnNlX3N5bmMvc3ZnIjo0OTksIi4vcGFyc2Vfc3luYy90aWZmIjo1MDAsIi4vcGFyc2Vfc3luYy93ZWJwIjo1MDF9XSw1MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvcGFyc2Vyc19zeW5jIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXMobikscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1uW2Vbcl1dKHQpO2lmKGkpcmV0dXJuIGl9cmV0dXJuIG51bGx9KHQpfSxlLmV4cG9ydHMucGFyc2Vycz1ufSx7Ii4vbGliL3BhcnNlcnNfc3luYyI6NTAyfV0sNTA0OltmdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWUuZXhwb3J0cz17fTtmdW5jdGlvbiBvKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gcygpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gbCh0KXtpZihuPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChuPT09b3x8IW4pJiZzZXRUaW1lb3V0KXJldHVybiBuPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gbih0LDApfWNhdGNoKGUpe3RyeXtyZXR1cm4gbi5jYWxsKG51bGwsdCwwKX1jYXRjaChlKXtyZXR1cm4gbi5jYWxsKHRoaXMsdCwwKX19fSFmdW5jdGlvbigpe3RyeXtuPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6b31jYXRjaCh0KXtuPW99dHJ5e2k9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6c31jYXRjaCh0KXtpPXN9fSgpO3ZhciBjLHU9W10sZj0hMSxoPS0xO2Z1bmN0aW9uIHAoKXtmJiZjJiYoZj0hMSxjLmxlbmd0aD91PWMuY29uY2F0KHUpOmg9LTEsdS5sZW5ndGgmJmQoKSl9ZnVuY3Rpb24gZCgpe2lmKCFmKXt2YXIgdD1sKHApO2Y9ITA7Zm9yKHZhciBlPXUubGVuZ3RoO2U7KXtmb3IoYz11LHU9W107KytoPGU7KWMmJmNbaF0ucnVuKCk7aD0tMSxlPXUubGVuZ3RofWM9bnVsbCxmPSExLGZ1bmN0aW9uKHQpe2lmKGk9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dCh0KTtpZigoaT09PXN8fCFpKSYmY2xlYXJUaW1lb3V0KXJldHVybiBpPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQodCk7dHJ5e2kodCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBpLmNhbGwobnVsbCx0KX1jYXRjaChlKXtyZXR1cm4gaS5jYWxsKHRoaXMsdCl9fX0odCl9fWZ1bmN0aW9uIG0odCxlKXt0aGlzLmZ1bj10LHRoaXMuYXJyYXk9ZX1mdW5jdGlvbiBnKCl7fWEubmV4dFRpY2s9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgcj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZVtyLTFdPWFyZ3VtZW50c1tyXTt1LnB1c2gobmV3IG0odCxlKSksMSE9PXUubGVuZ3RofHxmfHxsKGQpfSxtLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxhLnRpdGxlPSJicm93c2VyIixhLmJyb3dzZXI9ITAsYS5lbnY9e30sYS5hcmd2PVtdLGEudmVyc2lvbj0iIixhLnZlcnNpb25zPXt9LGEub249ZyxhLmFkZExpc3RlbmVyPWcsYS5vbmNlPWcsYS5vZmY9ZyxhLnJlbW92ZUxpc3RlbmVyPWcsYS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZyxhLmVtaXQ9ZyxhLnByZXBlbmRMaXN0ZW5lcj1nLGEucHJlcGVuZE9uY2VMaXN0ZW5lcj1nLGEubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybltdfSxhLmJpbmRpbmc9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxhLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0sYS5jaGRpcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxhLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSx7fV0sNTA1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoImdsLXF1YXQvc2xlcnAiKX0seyJnbC1xdWF0L3NsZXJwIjozMTV9XSw1MDY6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7Zm9yKHZhciBuPXQoInBlcmZvcm1hbmNlLW5vdyIpLGk9InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/cjp3aW5kb3csYT1bIm1veiIsIndlYmtpdCJdLG89IkFuaW1hdGlvbkZyYW1lIixzPWlbInJlcXVlc3QiK29dLGw9aVsiY2FuY2VsIitvXXx8aVsiY2FuY2VsUmVxdWVzdCIrb10sYz0wOyFzJiZjPGEubGVuZ3RoO2MrKylzPWlbYVtjXSsiUmVxdWVzdCIrb10sbD1pW2FbY10rIkNhbmNlbCIrb118fGlbYVtjXSsiQ2FuY2VsUmVxdWVzdCIrb107aWYoIXN8fCFsKXt2YXIgdT0wLGY9MCxoPVtdO3M9ZnVuY3Rpb24odCl7aWYoMD09PWgubGVuZ3RoKXt2YXIgZT1uKCkscj1NYXRoLm1heCgwLDFlMy82MC0oZS11KSk7dT1yK2Usc2V0VGltZW91dCgoZnVuY3Rpb24oKXt2YXIgdD1oLnNsaWNlKDApO2gubGVuZ3RoPTA7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYoIXRbZV0uY2FuY2VsbGVkKXRyeXt0W2VdLmNhbGxiYWNrKHUpfWNhdGNoKHQpe3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dGhyb3cgdH0pLDApfX0pLE1hdGgucm91bmQocikpfXJldHVybiBoLnB1c2goe2hhbmRsZTorK2YsY2FsbGJhY2s6dCxjYW5jZWxsZWQ6ITF9KSxmfSxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8aC5sZW5ndGg7ZSsrKWhbZV0uaGFuZGxlPT09dCYmKGhbZV0uY2FuY2VsbGVkPSEwKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBzLmNhbGwoaSx0KX0sZS5leHBvcnRzLmNhbmNlbD1mdW5jdGlvbigpe2wuYXBwbHkoaSxhcmd1bWVudHMpfSxlLmV4cG9ydHMucG9seWZpbGw9ZnVuY3Rpb24odCl7dHx8KHQ9aSksdC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9cyx0LmNhbmNlbEFuaW1hdGlvbkZyYW1lPWx9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJwZXJmb3JtYW5jZS1ub3ciOjQ3NH1dLDUwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaWctcmF0L2FkZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSlpW2FdPW4odFthXSxlW2FdKTtyZXR1cm4gaX19LHsiYmlnLXJhdC9hZGQiOjgzfV0sNTA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3IpZVtyXT1uKHRbcl0pO3JldHVybiBlfTt2YXIgbj10KCJiaWctcmF0Iil9LHsiYmlnLXJhdCI6ODZ9XSw1MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmlnLXJhdCIpLGk9dCgiYmlnLXJhdC9tdWwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bihlKSxhPXQubGVuZ3RoLG89bmV3IEFycmF5KGEpLHM9MDtzPGE7KytzKW9bc109aSh0W3NdLHIpO3JldHVybiBvfX0seyJiaWctcmF0Ijo4NiwiYmlnLXJhdC9tdWwiOjk1fV0sNTEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpZy1yYXQvc3ViIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWlbYV09bih0W2FdLGVbYV0pO3JldHVybiBpfX0seyJiaWctcmF0L3N1YiI6OTh9XSw1MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29tcGFyZS1jZWxsIiksaT10KCJjb21wYXJlLW9yaWVudGVkLWNlbGwiKSxhPXQoImNlbGwtb3JpZW50YXRpb24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5zb3J0KGkpO2Zvcih2YXIgZT10Lmxlbmd0aCxyPTAsbz0wO288ZTsrK28pe3ZhciBzPXRbb10sbD1hKHMpO2lmKDAhPT1sKXtpZihyPjApe3ZhciBjPXRbci0xXTtpZigwPT09bihzLGMpJiZhKGMpIT09bCl7ci09MTtjb250aW51ZX19dFtyKytdPXN9fXJldHVybiB0Lmxlbmd0aD1yLHR9fSx7ImNlbGwtb3JpZW50YXRpb24iOjExOCwiY29tcGFyZS1jZWxsIjoxMzUsImNvbXBhcmUtb3JpZW50ZWQtY2VsbCI6MTM2fV0sNTEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImFycmF5LWJvdW5kcyIpLGk9dCgiY29sb3Itbm9ybWFsaXplIiksYT10KCJ1cGRhdGUtZGlmZiIpLG89dCgicGljay1ieS1hbGlhcyIpLHM9dCgib2JqZWN0LWFzc2lnbiIpLGw9dCgiZmxhdHRlbi12ZXJ0ZXgtZGF0YSIpLGM9dCgidG8tZmxvYXQzMiIpLHU9Yy5mbG9hdDMyLGY9Yy5mcmFjdDMyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpeyJmdW5jdGlvbiI9PXR5cGVvZiB0PyhlfHwoZT17fSksZS5yZWdsPXQpOmU9dDtlLmxlbmd0aCYmKGUucG9zaXRpb25zPWUpO2lmKCEodD1lLnJlZ2wpLmhhc0V4dGVuc2lvbigiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKXRocm93IEVycm9yKCJyZWdsLWVycm9yMmQ6IGBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzYCBleHRlbnNpb24gc2hvdWxkIGJlIGVuYWJsZWQiKTt2YXIgcixjLHAsZCxtLGcsdj10Ll9nbCx5PXtjb2xvcjoiYmxhY2siLGNhcFNpemU6NSxsaW5lV2lkdGg6MSxvcGFjaXR5OjEsdmlld3BvcnQ6bnVsbCxyYW5nZTpudWxsLG9mZnNldDowLGNvdW50OjAsYm91bmRzOm51bGwscG9zaXRpb25zOltdLGVycm9yczpbXX0seD1bXTtyZXR1cm4gZD10LmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6InVpbnQ4IixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksYz10LmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5KDApfSkscD10LmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksbT10LmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksZz10LmJ1ZmZlcih7dXNhZ2U6InN0YXRpYyIsdHlwZToiZmxvYXQiLGRhdGE6aH0pLFQoZSkscj10KHt2ZXJ0OiJcblx0XHRwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbiwgcG9zaXRpb25GcmFjdDtcblx0XHRhdHRyaWJ1dGUgdmVjNCBlcnJvcjtcblx0XHRhdHRyaWJ1dGUgdmVjNCBjb2xvcjtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMyIGRpcmVjdGlvbiwgbGluZU9mZnNldCwgY2FwT2Zmc2V0O1xuXG5cdFx0dW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xuXHRcdHVuaWZvcm0gZmxvYXQgbGluZVdpZHRoLCBjYXBTaXplO1xuXHRcdHVuaWZvcm0gdmVjMiBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdDtcblxuXHRcdHZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cdFx0XHRmcmFnQ29sb3IgPSBjb2xvciAvIDI1NS47XG5cblx0XHRcdHZlYzIgcGl4ZWxPZmZzZXQgPSBsaW5lV2lkdGggKiBsaW5lT2Zmc2V0ICsgKGNhcFNpemUgKyBsaW5lV2lkdGgpICogY2FwT2Zmc2V0O1xuXG5cdFx0XHR2ZWMyIGR4eSA9IC1zdGVwKC41LCBkaXJlY3Rpb24ueHkpICogZXJyb3IueHogKyBzdGVwKGRpcmVjdGlvbi54eSwgdmVjMigtLjUpKSAqIGVycm9yLnl3O1xuXG5cdFx0XHR2ZWMyIHBvc2l0aW9uID0gcG9zaXRpb24gKyBkeHk7XG5cblx0XHRcdHZlYzIgcG9zID0gKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlXG5cdFx0XHRcdCsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZVxuXHRcdFx0XHQrIChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZUZyYWN0XG5cdFx0XHRcdCsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZUZyYWN0O1xuXG5cdFx0XHRwb3MgKz0gcGl4ZWxPZmZzZXQgLyB2aWV3cG9ydC56dztcblxuXHRcdFx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvcyAqIDIuIC0gMS4sIDAsIDEpO1xuXHRcdH1cblx0XHQiLGZyYWc6IlxuXHRcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcblxuXHRcdHZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cblx0XHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cdFx0XHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG5cdFx0XHRnbF9GcmFnQ29sb3IuYSAqPSBvcGFjaXR5O1xuXHRcdH1cblx0XHQiLHVuaWZvcm1zOntyYW5nZTp0LnByb3AoInJhbmdlIiksbGluZVdpZHRoOnQucHJvcCgibGluZVdpZHRoIiksY2FwU2l6ZTp0LnByb3AoImNhcFNpemUiKSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLHNjYWxlOnQucHJvcCgic2NhbGUiKSx0cmFuc2xhdGU6dC5wcm9wKCJ0cmFuc2xhdGUiKSxzY2FsZUZyYWN0OnQucHJvcCgic2NhbGVGcmFjdCIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcCgidHJhbnNsYXRlRnJhY3QiKSx2aWV3cG9ydDpmdW5jdGlvbih0LGUpe3JldHVybltlLnZpZXdwb3J0LngsZS52aWV3cG9ydC55LHQudmlld3BvcnRXaWR0aCx0LnZpZXdwb3J0SGVpZ2h0XX19LGF0dHJpYnV0ZXM6e2NvbG9yOntidWZmZXI6ZCxvZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gNCplLm9mZnNldH0sZGl2aXNvcjoxfSxwb3NpdGlvbjp7YnVmZmVyOmMsb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDgqZS5vZmZzZXR9LGRpdmlzb3I6MX0scG9zaXRpb25GcmFjdDp7YnVmZmVyOnAsb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDgqZS5vZmZzZXR9LGRpdmlzb3I6MX0sZXJyb3I6e2J1ZmZlcjptLG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiAxNiplLm9mZnNldH0sZGl2aXNvcjoxfSxkaXJlY3Rpb246e2J1ZmZlcjpnLHN0cmlkZToyNCxvZmZzZXQ6MH0sbGluZU9mZnNldDp7YnVmZmVyOmcsc3RyaWRlOjI0LG9mZnNldDo4fSxjYXBPZmZzZXQ6e2J1ZmZlcjpnLHN0cmlkZToyNCxvZmZzZXQ6MTZ9fSxwcmltaXRpdmU6InRyaWFuZ2xlcyIsYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMF0sZXF1YXRpb246e3JnYjoiYWRkIixhbHBoYToiYWRkIn0sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6Im9uZSBtaW51cyBkc3QgYWxwaGEiLGRzdEFscGhhOiJvbmUifX0sZGVwdGg6e2VuYWJsZTohMX0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp0LnByb3AoInZpZXdwb3J0Iil9LHZpZXdwb3J0OnQucHJvcCgidmlld3BvcnQiKSxzdGVuY2lsOiExLGluc3RhbmNlczp0LnByb3AoImNvdW50IiksY291bnQ6aC5sZW5ndGh9KSxzKGIse3VwZGF0ZTpULGRyYXc6XyxkZXN0cm95OmsscmVnbDp0LGdsOnYsY2FudmFzOnYuY2FudmFzLGdyb3Vwczp4fSksYjtmdW5jdGlvbiBiKHQpe3Q/VCh0KTpudWxsPT09dCYmaygpLF8oKX1mdW5jdGlvbiBfKGUpe2lmKCJudW1iZXIiPT10eXBlb2YgZSlyZXR1cm4gdyhlKTtlJiYhQXJyYXkuaXNBcnJheShlKSYmKGU9W2VdKSx0Ll9yZWZyZXNoKCkseC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe3QmJihlJiYoZVtyXT90LmRyYXc9ITA6dC5kcmF3PSExKSx0LmRyYXc/dyhyKTp0LmRyYXc9ITApfSkpfWZ1bmN0aW9uIHcodCl7Im51bWJlciI9PXR5cGVvZiB0JiYodD14W3RdKSxudWxsIT10JiZ0JiZ0LmNvdW50JiZ0LmNvbG9yJiZ0Lm9wYWNpdHkmJnQucG9zaXRpb25zJiZ0LnBvc2l0aW9ucy5sZW5ndGg+MSYmKHQuc2NhbGVSYXRpbz1bdC5zY2FsZVswXSp0LnZpZXdwb3J0LndpZHRoLHQuc2NhbGVbMV0qdC52aWV3cG9ydC5oZWlnaHRdLHIodCksdC5hZnRlciYmdC5hZnRlcih0KSl9ZnVuY3Rpb24gVCh0KXtpZih0KXtudWxsIT10Lmxlbmd0aD8ibnVtYmVyIj09dHlwZW9mIHRbMF0mJih0PVt7cG9zaXRpb25zOnR9XSk6QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTt2YXIgZT0wLHI9MDtpZihiLmdyb3Vwcz14PXQubWFwKChmdW5jdGlvbih0LGMpe3ZhciB1PXhbY107cmV0dXJuIHQ/KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q9e2FmdGVyOnR9OiJudW1iZXIiPT10eXBlb2YgdFswXSYmKHQ9e3Bvc2l0aW9uczp0fSksdD1vKHQse2NvbG9yOiJjb2xvciBjb2xvcnMgZmlsbCIsY2FwU2l6ZToiY2FwU2l6ZSBjYXAgY2Fwc2l6ZSBjYXAtc2l6ZSIsbGluZVdpZHRoOiJsaW5lV2lkdGggbGluZS13aWR0aCB3aWR0aCBsaW5lIHRoaWNrbmVzcyIsb3BhY2l0eToib3BhY2l0eSBhbHBoYSIscmFuZ2U6InJhbmdlIGRhdGFCb3giLHZpZXdwb3J0OiJ2aWV3cG9ydCB2aWV3Qm94IixlcnJvcnM6ImVycm9ycyBlcnJvciIscG9zaXRpb25zOiJwb3NpdGlvbnMgcG9zaXRpb24gZGF0YSBwb2ludHMifSksdXx8KHhbY109dT17aWQ6YyxzY2FsZTpudWxsLHRyYW5zbGF0ZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGRyYXc6ITB9LHQ9cyh7fSx5LHQpKSxhKHUsdCxbe2xpbmVXaWR0aDpmdW5jdGlvbih0KXtyZXR1cm4uNSordH0sY2FwU2l6ZTpmdW5jdGlvbih0KXtyZXR1cm4uNSordH0sb3BhY2l0eTpwYXJzZUZsb2F0LGVycm9yczpmdW5jdGlvbih0KXtyZXR1cm4gdD1sKHQpLHIrPXQubGVuZ3RoLHR9LHBvc2l0aW9uczpmdW5jdGlvbih0LHIpe3JldHVybiB0PWwodCwiZmxvYXQ2NCIpLHIuY291bnQ9TWF0aC5mbG9vcih0Lmxlbmd0aC8yKSxyLmJvdW5kcz1uKHQsMiksci5vZmZzZXQ9ZSxlKz1yLmNvdW50LHR9fSx7Y29sb3I6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmNvdW50O2lmKHR8fCh0PSJ0cmFuc3BhcmVudCIpLCFBcnJheS5pc0FycmF5KHQpfHwibnVtYmVyIj09dHlwZW9mIHRbMF0pe3ZhciBuPXQ7dD1BcnJheShyKTtmb3IodmFyIGE9MDthPHI7YSsrKXRbYV09bn1pZih0Lmxlbmd0aDxyKXRocm93IEVycm9yKCJOb3QgZW5vdWdoIGNvbG9ycyIpO2Zvcih2YXIgbz1uZXcgVWludDhBcnJheSg0KnIpLHM9MDtzPHI7cysrKXt2YXIgbD1pKHRbc10sInVpbnQ4Iik7by5zZXQobCw0KnMpfXJldHVybiBvfSxyYW5nZTpmdW5jdGlvbih0LGUscil7dmFyIG49ZS5ib3VuZHM7cmV0dXJuIHR8fCh0PW4pLGUuc2NhbGU9WzEvKHRbMl0tdFswXSksMS8odFszXS10WzFdKV0sZS50cmFuc2xhdGU9Wy10WzBdLC10WzFdXSxlLnNjYWxlRnJhY3Q9ZihlLnNjYWxlKSxlLnRyYW5zbGF0ZUZyYWN0PWYoZS50cmFuc2xhdGUpLHR9LHZpZXdwb3J0OmZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBBcnJheS5pc0FycmF5KHQpP2U9e3g6dFswXSx5OnRbMV0sd2lkdGg6dFsyXS10WzBdLGhlaWdodDp0WzNdLXRbMV19OnQ/KGU9e3g6dC54fHx0LmxlZnR8fDAseTp0Lnl8fHQudG9wfHwwfSx0LnJpZ2h0P2Uud2lkdGg9dC5yaWdodC1lLng6ZS53aWR0aD10Lnd8fHQud2lkdGh8fDAsdC5ib3R0b20/ZS5oZWlnaHQ9dC5ib3R0b20tZS55OmUuaGVpZ2h0PXQuaHx8dC5oZWlnaHR8fDApOmU9e3g6MCx5OjAsd2lkdGg6di5kcmF3aW5nQnVmZmVyV2lkdGgsaGVpZ2h0OnYuZHJhd2luZ0J1ZmZlckhlaWdodH0sZX19XSksdSk6dX0pKSxlfHxyKXt2YXIgaD14LnJlZHVjZSgoZnVuY3Rpb24odCxlLHIpe3JldHVybiB0KyhlP2UuY291bnQ6MCl9KSwwKSxnPW5ldyBGbG9hdDY0QXJyYXkoMipoKSxfPW5ldyBVaW50OEFycmF5KDQqaCksdz1uZXcgRmxvYXQzMkFycmF5KDQqaCk7eC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2lmKHQpe3ZhciByPXQucG9zaXRpb25zLG49dC5jb3VudCxpPXQub2Zmc2V0LGE9dC5jb2xvcixvPXQuZXJyb3JzO24mJihfLnNldChhLDQqaSksdy5zZXQobyw0KmkpLGcuc2V0KHIsMippKSl9fSkpO3ZhciBUPXUoZyk7YyhUKTt2YXIgaz1mKGcsVCk7cChrKSxkKF8pLG0odyl9fX1mdW5jdGlvbiBrKCl7Yy5kZXN0cm95KCkscC5kZXN0cm95KCksZC5kZXN0cm95KCksbS5kZXN0cm95KCksZy5kZXN0cm95KCl9fTt2YXIgaD1bWzEsMCwwLDEsMCwwXSxbMSwwLDAsLTEsMCwwXSxbLTEsMCwwLC0xLDAsMF0sWy0xLDAsMCwtMSwwLDBdLFstMSwwLDAsMSwwLDBdLFsxLDAsMCwxLDAsMF0sWzEsMCwtMSwwLDAsMV0sWzEsMCwtMSwwLDAsLTFdLFsxLDAsMSwwLDAsLTFdLFsxLDAsMSwwLDAsLTFdLFsxLDAsMSwwLDAsMV0sWzEsMCwtMSwwLDAsMV0sWy0xLDAsLTEsMCwwLDFdLFstMSwwLC0xLDAsMCwtMV0sWy0xLDAsMSwwLDAsLTFdLFstMSwwLDEsMCwwLC0xXSxbLTEsMCwxLDAsMCwxXSxbLTEsMCwtMSwwLDAsMV0sWzAsMSwxLDAsMCwwXSxbMCwxLC0xLDAsMCwwXSxbMCwtMSwtMSwwLDAsMF0sWzAsLTEsLTEsMCwwLDBdLFswLDEsMSwwLDAsMF0sWzAsLTEsMSwwLDAsMF0sWzAsMSwwLC0xLDEsMF0sWzAsMSwwLC0xLC0xLDBdLFswLDEsMCwxLC0xLDBdLFswLDEsMCwxLDEsMF0sWzAsMSwwLC0xLDEsMF0sWzAsMSwwLDEsLTEsMF0sWzAsLTEsMCwtMSwxLDBdLFswLC0xLDAsLTEsLTEsMF0sWzAsLTEsMCwxLC0xLDBdLFswLC0xLDAsMSwxLDBdLFswLC0xLDAsLTEsMSwwXSxbMCwtMSwwLDEsLTEsMF1dfSx7ImFycmF5LWJvdW5kcyI6NzIsImNvbG9yLW5vcm1hbGl6ZSI6MTI2LCJmbGF0dGVuLXZlcnRleC1kYXRhIjoyNDQsIm9iamVjdC1hc3NpZ24iOjQ2NiwicGljay1ieS1hbGlhcyI6NDc1LCJ0by1mbG9hdDMyIjo1NzMsInVwZGF0ZS1kaWZmIjo1OTR9XSw1MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29sb3Itbm9ybWFsaXplIiksaT10KCJhcnJheS1ib3VuZHMiKSxhPXQoIm9iamVjdC1hc3NpZ24iKSxvPXQoImdsc2xpZnkiKSxzPXQoInBpY2stYnktYWxpYXMiKSxsPXQoImZsYXR0ZW4tdmVydGV4LWRhdGEiKSxjPXQoImVhcmN1dCIpLHU9dCgiYXJyYXktbm9ybWFsaXplIiksZj10KCJ0by1mbG9hdDMyIiksaD1mLmZsb2F0MzIscD1mLmZyYWN0MzIsZD10KCJlczYtd2Vhay1tYXAiKSxtPXQoInBhcnNlLXJlY3QiKSxnPXQoImFycmF5LWZpbmQtaW5kZXgiKTtmdW5jdGlvbiB2KHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgdikpcmV0dXJuIG5ldyB2KHQsZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQ/KGV8fChlPXt9KSxlLnJlZ2w9dCk6ZT10LGUubGVuZ3RoJiYoZS5wb3NpdGlvbnM9ZSksISh0PWUucmVnbCkuaGFzRXh0ZW5zaW9uKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpdGhyb3cgRXJyb3IoInJlZ2wtZXJyb3IyZDogYEFOR0xFX2luc3RhbmNlZF9hcnJheXNgIGV4dGVuc2lvbiBzaG91bGQgYmUgZW5hYmxlZCIpO3RoaXMuZ2w9dC5fZ2wsdGhpcy5yZWdsPXQsdGhpcy5wYXNzZXM9W10sdGhpcy5zaGFkZXJzPXYuc2hhZGVycy5oYXModCk/di5zaGFkZXJzLmdldCh0KTp2LnNoYWRlcnMuc2V0KHQsdi5jcmVhdGVTaGFkZXJzKHQpKS5nZXQodCksdGhpcy51cGRhdGUoZSl9ZS5leHBvcnRzPXYsdi5kYXNoTXVsdD0yLHYubWF4UGF0dGVybkxlbmd0aD0yNTYsdi5wcmVjaXNpb25UaHJlc2hvbGQ9M2U2LHYubWF4UG9pbnRzPTFlNCx2Lm1heExpbmVzPTIwNDgsdi5zaGFkZXJzPW5ldyBkLHYuY3JlYXRlU2hhZGVycz1mdW5jdGlvbih0KXt2YXIgZSxyPXQuYnVmZmVyKHt1c2FnZToic3RhdGljIix0eXBlOiJmbG9hdCIsZGF0YTpbMCwxLDAsMCwxLDEsMSwwXX0pLG49e3ByaW1pdGl2ZToidHJpYW5nbGUgc3RyaXAiLGluc3RhbmNlczp0LnByb3AoImNvdW50IiksY291bnQ6NCxvZmZzZXQ6MCx1bmlmb3Jtczp7bWl0ZXJNb2RlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuInJvdW5kIj09PWUuam9pbj8yOjF9LG1pdGVyTGltaXQ6dC5wcm9wKCJtaXRlckxpbWl0Iiksc2NhbGU6dC5wcm9wKCJzY2FsZSIpLHNjYWxlRnJhY3Q6dC5wcm9wKCJzY2FsZUZyYWN0IiksdHJhbnNsYXRlRnJhY3Q6dC5wcm9wKCJ0cmFuc2xhdGVGcmFjdCIpLHRyYW5zbGF0ZTp0LnByb3AoInRyYW5zbGF0ZSIpLHRoaWNrbmVzczp0LnByb3AoInRoaWNrbmVzcyIpLGRhc2hUZXh0dXJlOnQucHJvcCgiZGFzaFRleHR1cmUiKSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLHBpeGVsUmF0aW86dC5jb250ZXh0KCJwaXhlbFJhdGlvIiksaWQ6dC5wcm9wKCJpZCIpLGRhc2hMZW5ndGg6dC5wcm9wKCJkYXNoTGVuZ3RoIiksdmlld3BvcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS52aWV3cG9ydC54LGUudmlld3BvcnQueSx0LnZpZXdwb3J0V2lkdGgsdC52aWV3cG9ydEhlaWdodF19LGRlcHRoOnQucHJvcCgiZGVwdGgiKX0sYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMF0sZXF1YXRpb246e3JnYjoiYWRkIixhbHBoYToiYWRkIn0sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6Im9uZSBtaW51cyBkc3QgYWxwaGEiLGRzdEFscGhhOiJvbmUifX0sZGVwdGg6e2VuYWJsZTpmdW5jdGlvbih0LGUpe3JldHVybiFlLm92ZXJsYXl9fSxzdGVuY2lsOntlbmFibGU6ITF9LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6dC5wcm9wKCJ2aWV3cG9ydCIpfSx2aWV3cG9ydDp0LnByb3AoInZpZXdwb3J0Iil9LGk9dChhKHt2ZXJ0Om8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBhQ29vcmQsIGJDb29yZCwgYUNvb3JkRnJhY3QsIGJDb29yZEZyYWN0O1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZUVuZCwgbGluZVRvcDtcblxudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xudW5pZm9ybSBmbG9hdCB0aGlja25lc3MsIHBpeGVsUmF0aW8sIGlkLCBkZXB0aDtcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xuXG52ZWMyIHByb2plY3QodmVjMiBwb3NpdGlvbiwgdmVjMiBwb3NpdGlvbkZyYWN0LCB2ZWMyIHNjYWxlLCB2ZWMyIHNjYWxlRnJhY3QsIHZlYzIgdHJhbnNsYXRlLCB2ZWMyIHRyYW5zbGF0ZUZyYWN0KSB7XG5cdC8vIHRoZSBvcmRlciBpcyBpbXBvcnRhbnRcblx0cmV0dXJuIHBvc2l0aW9uICogc2NhbGUgKyB0cmFuc2xhdGVcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZSArIHRyYW5zbGF0ZUZyYWN0XG4gICAgICAgKyBwb3NpdGlvbiAqIHNjYWxlRnJhY3RcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZUZyYWN0O1xufVxuXG52b2lkIG1haW4oKSB7XG5cdGZsb2F0IGxpbmVTdGFydCA9IDEuIC0gbGluZUVuZDtcblx0ZmxvYXQgbGluZU9mZnNldCA9IGxpbmVUb3AgKiAyLiAtIDEuO1xuXG5cdHZlYzIgZGlmZiA9IChiQ29vcmQgKyBiQ29vcmRGcmFjdCAtIGFDb29yZCAtIGFDb29yZEZyYWN0KTtcblx0dGFuZ2VudCA9IG5vcm1hbGl6ZShkaWZmICogc2NhbGUgKiB2aWV3cG9ydC56dyk7XG5cdHZlYzIgbm9ybWFsID0gdmVjMigtdGFuZ2VudC55LCB0YW5nZW50LngpO1xuXG5cdHZlYzIgcG9zaXRpb24gPSBwcm9qZWN0KGFDb29yZCwgYUNvb3JkRnJhY3QsIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0KSAqIGxpbmVTdGFydFxuXHRcdCsgcHJvamVjdChiQ29vcmQsIGJDb29yZEZyYWN0LCBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdCkgKiBsaW5lRW5kXG5cblx0XHQrIHRoaWNrbmVzcyAqIG5vcm1hbCAqIC41ICogbGluZU9mZnNldCAvIHZpZXdwb3J0Lnp3O1xuXG5cdGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xuXG5cdGZyYWdDb2xvciA9IGNvbG9yIC8gMjU1Ljtcbn1cbiJdKSxmcmFnOm8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIGZsb2F0IGRhc2hMZW5ndGgsIHBpeGVsUmF0aW8sIHRoaWNrbmVzcywgb3BhY2l0eSwgaWQ7XG51bmlmb3JtIHNhbXBsZXIyRCBkYXNoVGV4dHVyZTtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xuXG52b2lkIG1haW4oKSB7XG5cdGZsb2F0IGFscGhhID0gMS47XG5cblx0ZmxvYXQgdCA9IGZyYWN0KGRvdCh0YW5nZW50LCBnbF9GcmFnQ29vcmQueHkpIC8gZGFzaExlbmd0aCkgKiAuNSArIC4yNTtcblx0ZmxvYXQgZGFzaCA9IHRleHR1cmUyRChkYXNoVGV4dHVyZSwgdmVjMih0LCAuNSkpLnI7XG5cblx0Z2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xuXHRnbF9GcmFnQ29sb3IuYSAqPSBhbHBoYSAqIG9wYWNpdHkgKiBkYXNoO1xufVxuIl0pLGF0dHJpYnV0ZXM6e2xpbmVFbmQ6e2J1ZmZlcjpyLGRpdmlzb3I6MCxzdHJpZGU6OCxvZmZzZXQ6MH0sbGluZVRvcDp7YnVmZmVyOnIsZGl2aXNvcjowLHN0cmlkZTo4LG9mZnNldDo0fSxhQ29vcmQ6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjgsZGl2aXNvcjoxfSxiQ29vcmQ6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjE2LGRpdmlzb3I6MX0sYUNvb3JkRnJhY3Q6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uRnJhY3RCdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OCxkaXZpc29yOjF9LGJDb29yZEZyYWN0OntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkZyYWN0QnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjE2LGRpdmlzb3I6MX0sY29sb3I6e2J1ZmZlcjp0LnByb3AoImNvbG9yQnVmZmVyIiksc3RyaWRlOjQsb2Zmc2V0OjAsZGl2aXNvcjoxfX19LG4pKTt0cnl7ZT10KGEoe2N1bGw6e2VuYWJsZTohMCxmYWNlOiJiYWNrIn0sdmVydDpvKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgYUNvb3JkLCBiQ29vcmQsIG5leHRDb29yZCwgcHJldkNvb3JkO1xuYXR0cmlidXRlIHZlYzQgYUNvbG9yLCBiQ29sb3I7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZUVuZCwgbGluZVRvcDtcblxudW5pZm9ybSB2ZWMyIHNjYWxlLCB0cmFuc2xhdGU7XG51bmlmb3JtIGZsb2F0IHRoaWNrbmVzcywgcGl4ZWxSYXRpbywgaWQsIGRlcHRoO1xudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xudW5pZm9ybSBmbG9hdCBtaXRlckxpbWl0LCBtaXRlck1vZGU7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52YXJ5aW5nIHZlYzQgc3RhcnRDdXRvZmYsIGVuZEN1dG9mZjtcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xudmFyeWluZyB2ZWMyIHN0YXJ0Q29vcmQsIGVuZENvb3JkO1xudmFyeWluZyBmbG9hdCBlbmFibGVTdGFydE1pdGVyLCBlbmFibGVFbmRNaXRlcjtcblxuY29uc3QgZmxvYXQgUkVWRVJTRV9USFJFU0hPTEQgPSAtLjg3NTtcbmNvbnN0IGZsb2F0IE1JTl9ESUZGID0gMWUtNjtcblxuLy8gVE9ETzogcG9zc2libGUgb3B0aW1pemF0aW9uczogYXZvaWQgb3ZlcmNhbGN1bGF0aW5nIGFsbCBmb3IgdmVydGljZXMgYW5kIGNhbGMganVzdCBvbmUgaW5zdGVhZFxuLy8gVE9ETzogcHJlY2FsY3VsYXRlIGRvdCBwcm9kdWN0cywgbm9ybWFsaXplIHRoaW5ncyBiZWZvcmVoZWFkIGV0Yy5cbi8vIFRPRE86IHJlZmFjdG9yIHRvIHJlY3Rhbmd1bGFyIGFsZ29yaXRobVxuXG5mbG9hdCBkaXN0VG9MaW5lKHZlYzIgcCwgdmVjMiBhLCB2ZWMyIGIpIHtcblx0dmVjMiBkaWZmID0gYiAtIGE7XG5cdHZlYzIgcGVycCA9IG5vcm1hbGl6ZSh2ZWMyKC1kaWZmLnksIGRpZmYueCkpO1xuXHRyZXR1cm4gZG90KHAgLSBhLCBwZXJwKTtcbn1cblxuYm9vbCBpc05hTiggZmxvYXQgdmFsICl7XG4gIHJldHVybiAoIHZhbCA8IDAuMCB8fCAwLjAgPCB2YWwgfHwgdmFsID09IDAuMCApID8gZmFsc2UgOiB0cnVlO1xufVxuXG52b2lkIG1haW4oKSB7XG5cdHZlYzIgYUNvb3JkID0gYUNvb3JkLCBiQ29vcmQgPSBiQ29vcmQsIHByZXZDb29yZCA9IHByZXZDb29yZCwgbmV4dENvb3JkID0gbmV4dENvb3JkO1xuXG4gIHZlYzIgYWRqdXN0ZWRTY2FsZTtcbiAgYWRqdXN0ZWRTY2FsZS54ID0gKGFicyhzY2FsZS54KSA8IE1JTl9ESUZGKSA/IE1JTl9ESUZGIDogc2NhbGUueDtcbiAgYWRqdXN0ZWRTY2FsZS55ID0gKGFicyhzY2FsZS55KSA8IE1JTl9ESUZGKSA/IE1JTl9ESUZGIDogc2NhbGUueTtcblxuICB2ZWMyIHNjYWxlUmF0aW8gPSBhZGp1c3RlZFNjYWxlICogdmlld3BvcnQuenc7XG5cdHZlYzIgbm9ybWFsV2lkdGggPSB0aGlja25lc3MgLyBzY2FsZVJhdGlvO1xuXG5cdGZsb2F0IGxpbmVTdGFydCA9IDEuIC0gbGluZUVuZDtcblx0ZmxvYXQgbGluZUJvdCA9IDEuIC0gbGluZVRvcDtcblxuXHRmcmFnQ29sb3IgPSAobGluZVN0YXJ0ICogYUNvbG9yICsgbGluZUVuZCAqIGJDb2xvcikgLyAyNTUuO1xuXG5cdGlmIChpc05hTihhQ29vcmQueCkgfHwgaXNOYU4oYUNvb3JkLnkpIHx8IGlzTmFOKGJDb29yZC54KSB8fCBpc05hTihiQ29vcmQueSkpIHJldHVybjtcblxuXHRpZiAoYUNvb3JkID09IHByZXZDb29yZCkgcHJldkNvb3JkID0gYUNvb3JkICsgbm9ybWFsaXplKGJDb29yZCAtIGFDb29yZCk7XG5cdGlmIChiQ29vcmQgPT0gbmV4dENvb3JkKSBuZXh0Q29vcmQgPSBiQ29vcmQgLSBub3JtYWxpemUoYkNvb3JkIC0gYUNvb3JkKTtcblxuXHR2ZWMyIHByZXZEaWZmID0gYUNvb3JkIC0gcHJldkNvb3JkO1xuXHR2ZWMyIGN1cnJEaWZmID0gYkNvb3JkIC0gYUNvb3JkO1xuXHR2ZWMyIG5leHREaWZmID0gbmV4dENvb3JkIC0gYkNvb3JkO1xuXG5cdHZlYzIgcHJldlRhbmdlbnQgPSBub3JtYWxpemUocHJldkRpZmYgKiBzY2FsZVJhdGlvKTtcblx0dmVjMiBjdXJyVGFuZ2VudCA9IG5vcm1hbGl6ZShjdXJyRGlmZiAqIHNjYWxlUmF0aW8pO1xuXHR2ZWMyIG5leHRUYW5nZW50ID0gbm9ybWFsaXplKG5leHREaWZmICogc2NhbGVSYXRpbyk7XG5cblx0dmVjMiBwcmV2Tm9ybWFsID0gdmVjMigtcHJldlRhbmdlbnQueSwgcHJldlRhbmdlbnQueCk7XG5cdHZlYzIgY3Vyck5vcm1hbCA9IHZlYzIoLWN1cnJUYW5nZW50LnksIGN1cnJUYW5nZW50LngpO1xuXHR2ZWMyIG5leHROb3JtYWwgPSB2ZWMyKC1uZXh0VGFuZ2VudC55LCBuZXh0VGFuZ2VudC54KTtcblxuXHR2ZWMyIHN0YXJ0Sm9pbkRpcmVjdGlvbiA9IG5vcm1hbGl6ZShwcmV2VGFuZ2VudCAtIGN1cnJUYW5nZW50KTtcblx0dmVjMiBlbmRKb2luRGlyZWN0aW9uID0gbm9ybWFsaXplKGN1cnJUYW5nZW50IC0gbmV4dFRhbmdlbnQpO1xuXG5cdC8vIGNvbGxhcHNlZC91bmlkaXJlY3Rpb25hbCBzZWdtZW50IGNhc2VzXG5cdC8vIEZJWE1FOiB0aGVyZSBzaG91bGQgYmUgbW9yZSBlbGVnYW50IHNvbHV0aW9uXG5cdHZlYzIgcHJldlRhbkRpZmYgPSBhYnMocHJldlRhbmdlbnQgLSBjdXJyVGFuZ2VudCk7XG5cdHZlYzIgbmV4dFRhbkRpZmYgPSBhYnMobmV4dFRhbmdlbnQgLSBjdXJyVGFuZ2VudCk7XG5cdGlmIChtYXgocHJldlRhbkRpZmYueCwgcHJldlRhbkRpZmYueSkgPCBNSU5fRElGRikge1xuXHRcdHN0YXJ0Sm9pbkRpcmVjdGlvbiA9IGN1cnJOb3JtYWw7XG5cdH1cblx0aWYgKG1heChuZXh0VGFuRGlmZi54LCBuZXh0VGFuRGlmZi55KSA8IE1JTl9ESUZGKSB7XG5cdFx0ZW5kSm9pbkRpcmVjdGlvbiA9IGN1cnJOb3JtYWw7XG5cdH1cblx0aWYgKGFDb29yZCA9PSBiQ29vcmQpIHtcblx0XHRlbmRKb2luRGlyZWN0aW9uID0gc3RhcnRKb2luRGlyZWN0aW9uO1xuXHRcdGN1cnJOb3JtYWwgPSBwcmV2Tm9ybWFsO1xuXHRcdGN1cnJUYW5nZW50ID0gcHJldlRhbmdlbnQ7XG5cdH1cblxuXHR0YW5nZW50ID0gY3VyclRhbmdlbnQ7XG5cblx0Ly9jYWxjdWxhdGUgam9pbiBzaGlmdHMgcmVsYXRpdmUgdG8gbm9ybWFsc1xuXHRmbG9hdCBzdGFydEpvaW5TaGlmdCA9IGRvdChjdXJyTm9ybWFsLCBzdGFydEpvaW5EaXJlY3Rpb24pO1xuXHRmbG9hdCBlbmRKb2luU2hpZnQgPSBkb3QoY3Vyck5vcm1hbCwgZW5kSm9pbkRpcmVjdGlvbik7XG5cblx0ZmxvYXQgc3RhcnRNaXRlclJhdGlvID0gYWJzKDEuIC8gc3RhcnRKb2luU2hpZnQpO1xuXHRmbG9hdCBlbmRNaXRlclJhdGlvID0gYWJzKDEuIC8gZW5kSm9pblNoaWZ0KTtcblxuXHR2ZWMyIHN0YXJ0Sm9pbiA9IHN0YXJ0Sm9pbkRpcmVjdGlvbiAqIHN0YXJ0TWl0ZXJSYXRpbztcblx0dmVjMiBlbmRKb2luID0gZW5kSm9pbkRpcmVjdGlvbiAqIGVuZE1pdGVyUmF0aW87XG5cblx0dmVjMiBzdGFydFRvcEpvaW4sIHN0YXJ0Qm90Sm9pbiwgZW5kVG9wSm9pbiwgZW5kQm90Sm9pbjtcblx0c3RhcnRUb3BKb2luID0gc2lnbihzdGFydEpvaW5TaGlmdCkgKiBzdGFydEpvaW4gKiAuNTtcblx0c3RhcnRCb3RKb2luID0gLXN0YXJ0VG9wSm9pbjtcblxuXHRlbmRUb3BKb2luID0gc2lnbihlbmRKb2luU2hpZnQpICogZW5kSm9pbiAqIC41O1xuXHRlbmRCb3RKb2luID0gLWVuZFRvcEpvaW47XG5cblx0dmVjMiBhVG9wQ29vcmQgPSBhQ29vcmQgKyBub3JtYWxXaWR0aCAqIHN0YXJ0VG9wSm9pbjtcblx0dmVjMiBiVG9wQ29vcmQgPSBiQ29vcmQgKyBub3JtYWxXaWR0aCAqIGVuZFRvcEpvaW47XG5cdHZlYzIgYUJvdENvb3JkID0gYUNvb3JkICsgbm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW47XG5cdHZlYzIgYkJvdENvb3JkID0gYkNvb3JkICsgbm9ybWFsV2lkdGggKiBlbmRCb3RKb2luO1xuXG5cdC8vbWl0ZXIgYW50aS1jbGlwcGluZ1xuXHRmbG9hdCBiYUNsaXBwaW5nID0gZGlzdFRvTGluZShiQ29vcmQsIGFDb29yZCwgYUJvdENvb3JkKSAvIGRvdChub3JtYWxpemUobm9ybWFsV2lkdGggKiBlbmRCb3RKb2luKSwgbm9ybWFsaXplKG5vcm1hbFdpZHRoLnl4ICogdmVjMigtc3RhcnRCb3RKb2luLnksIHN0YXJ0Qm90Sm9pbi54KSkpO1xuXHRmbG9hdCBhYkNsaXBwaW5nID0gZGlzdFRvTGluZShhQ29vcmQsIGJDb29yZCwgYlRvcENvb3JkKSAvIGRvdChub3JtYWxpemUobm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW4pLCBub3JtYWxpemUobm9ybWFsV2lkdGgueXggKiB2ZWMyKC1lbmRCb3RKb2luLnksIGVuZEJvdEpvaW4ueCkpKTtcblxuXHQvL3ByZXZlbnQgY2xvc2UgdG8gcmV2ZXJzZSBkaXJlY3Rpb24gc3dpdGNoXG5cdGJvb2wgcHJldlJldmVyc2UgPSBkb3QoY3VyclRhbmdlbnQsIHByZXZUYW5nZW50KSA8PSBSRVZFUlNFX1RIUkVTSE9MRCAmJiBhYnMoZG90KGN1cnJUYW5nZW50LCBwcmV2Tm9ybWFsKSkgKiBtaW4obGVuZ3RoKHByZXZEaWZmKSwgbGVuZ3RoKGN1cnJEaWZmKSkgPCAgbGVuZ3RoKG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCk7XG5cdGJvb2wgbmV4dFJldmVyc2UgPSBkb3QoY3VyclRhbmdlbnQsIG5leHRUYW5nZW50KSA8PSBSRVZFUlNFX1RIUkVTSE9MRCAmJiBhYnMoZG90KGN1cnJUYW5nZW50LCBuZXh0Tm9ybWFsKSkgKiBtaW4obGVuZ3RoKG5leHREaWZmKSwgbGVuZ3RoKGN1cnJEaWZmKSkgPCAgbGVuZ3RoKG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCk7XG5cblx0aWYgKHByZXZSZXZlcnNlKSB7XG5cdFx0Ly9tYWtlIGpvaW4gcmVjdGFuZ3VsYXJcblx0XHR2ZWMyIG1pdGVyU2hpZnQgPSBub3JtYWxXaWR0aCAqIHN0YXJ0Sm9pbkRpcmVjdGlvbiAqIG1pdGVyTGltaXQgKiAuNTtcblx0XHRmbG9hdCBub3JtYWxBZGp1c3QgPSAxLiAtIG1pbihtaXRlckxpbWl0IC8gc3RhcnRNaXRlclJhdGlvLCAxLik7XG5cdFx0YUJvdENvb3JkID0gYUNvb3JkICsgbWl0ZXJTaGlmdCAtIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xuXHRcdGFUb3BDb29yZCA9IGFDb29yZCArIG1pdGVyU2hpZnQgKyBub3JtYWxBZGp1c3QgKiBub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwgKiAuNTtcblx0fVxuXHRlbHNlIGlmICghbmV4dFJldmVyc2UgJiYgYmFDbGlwcGluZyA+IDAuICYmIGJhQ2xpcHBpbmcgPCBsZW5ndGgobm9ybWFsV2lkdGggKiBlbmRCb3RKb2luKSkge1xuXHRcdC8vaGFuZGxlIG1pdGVyIGNsaXBwaW5nXG5cdFx0YlRvcENvb3JkIC09IG5vcm1hbFdpZHRoICogZW5kVG9wSm9pbjtcblx0XHRiVG9wQ29vcmQgKz0gbm9ybWFsaXplKGVuZFRvcEpvaW4gKiBub3JtYWxXaWR0aCkgKiBiYUNsaXBwaW5nO1xuXHR9XG5cblx0aWYgKG5leHRSZXZlcnNlKSB7XG5cdFx0Ly9tYWtlIGpvaW4gcmVjdGFuZ3VsYXJcblx0XHR2ZWMyIG1pdGVyU2hpZnQgPSBub3JtYWxXaWR0aCAqIGVuZEpvaW5EaXJlY3Rpb24gKiBtaXRlckxpbWl0ICogLjU7XG5cdFx0ZmxvYXQgbm9ybWFsQWRqdXN0ID0gMS4gLSBtaW4obWl0ZXJMaW1pdCAvIGVuZE1pdGVyUmF0aW8sIDEuKTtcblx0XHRiQm90Q29vcmQgPSBiQ29vcmQgKyBtaXRlclNoaWZ0IC0gbm9ybWFsQWRqdXN0ICogbm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsICogLjU7XG5cdFx0YlRvcENvb3JkID0gYkNvb3JkICsgbWl0ZXJTaGlmdCArIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xuXHR9XG5cdGVsc2UgaWYgKCFwcmV2UmV2ZXJzZSAmJiBhYkNsaXBwaW5nID4gMC4gJiYgYWJDbGlwcGluZyA8IGxlbmd0aChub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbikpIHtcblx0XHQvL2hhbmRsZSBtaXRlciBjbGlwcGluZ1xuXHRcdGFCb3RDb29yZCAtPSBub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbjtcblx0XHRhQm90Q29vcmQgKz0gbm9ybWFsaXplKHN0YXJ0Qm90Sm9pbiAqIG5vcm1hbFdpZHRoKSAqIGFiQ2xpcHBpbmc7XG5cdH1cblxuXHR2ZWMyIGFUb3BQb3NpdGlvbiA9IChhVG9wQ29vcmQpICogYWRqdXN0ZWRTY2FsZSArIHRyYW5zbGF0ZTtcblx0dmVjMiBhQm90UG9zaXRpb24gPSAoYUJvdENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XG5cblx0dmVjMiBiVG9wUG9zaXRpb24gPSAoYlRvcENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XG5cdHZlYzIgYkJvdFBvc2l0aW9uID0gKGJCb3RDb29yZCkgKiBhZGp1c3RlZFNjYWxlICsgdHJhbnNsYXRlO1xuXG5cdC8vcG9zaXRpb24gaXMgbm9ybWFsaXplZCAwLi4xIGNvb3JkIG9uIHRoZSBzY3JlZW5cblx0dmVjMiBwb3NpdGlvbiA9IChhVG9wUG9zaXRpb24gKiBsaW5lVG9wICsgYUJvdFBvc2l0aW9uICogbGluZUJvdCkgKiBsaW5lU3RhcnQgKyAoYlRvcFBvc2l0aW9uICogbGluZVRvcCArIGJCb3RQb3NpdGlvbiAqIGxpbmVCb3QpICogbGluZUVuZDtcblxuXHRzdGFydENvb3JkID0gYUNvb3JkICogc2NhbGVSYXRpbyArIHRyYW5zbGF0ZSAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XG5cdGVuZENvb3JkID0gYkNvb3JkICogc2NhbGVSYXRpbyArIHRyYW5zbGF0ZSAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XG5cblx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xuXG5cdGVuYWJsZVN0YXJ0TWl0ZXIgPSBzdGVwKGRvdChjdXJyVGFuZ2VudCwgcHJldlRhbmdlbnQpLCAuNSk7XG5cdGVuYWJsZUVuZE1pdGVyID0gc3RlcChkb3QoY3VyclRhbmdlbnQsIG5leHRUYW5nZW50KSwgLjUpO1xuXG5cdC8vYmV2ZWwgbWl0ZXIgY3V0b2Zmc1xuXHRpZiAobWl0ZXJNb2RlID09IDEuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgc3RhcnRNaXRlcldpZHRoID0gdmVjMihzdGFydEpvaW5EaXJlY3Rpb24pICogdGhpY2tuZXNzICogbWl0ZXJMaW1pdCAqIC41O1xuXHRcdFx0c3RhcnRDdXRvZmYgPSB2ZWM0KGFDb29yZCwgYUNvb3JkKTtcblx0XHRcdHN0YXJ0Q3V0b2ZmLnp3ICs9IHZlYzIoLXN0YXJ0Sm9pbkRpcmVjdGlvbi55LCBzdGFydEpvaW5EaXJlY3Rpb24ueCkgLyBzY2FsZVJhdGlvO1xuXHRcdFx0c3RhcnRDdXRvZmYgPSBzdGFydEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdHN0YXJ0Q3V0b2ZmICs9IHZpZXdwb3J0Lnh5eHk7XG5cdFx0XHRzdGFydEN1dG9mZiArPSBzdGFydE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgZW5kTWl0ZXJXaWR0aCA9IHZlYzIoZW5kSm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBtaXRlckxpbWl0ICogLjU7XG5cdFx0XHRlbmRDdXRvZmYgPSB2ZWM0KGJDb29yZCwgYkNvb3JkKTtcblx0XHRcdGVuZEN1dG9mZi56dyArPSB2ZWMyKC1lbmRKb2luRGlyZWN0aW9uLnksIGVuZEpvaW5EaXJlY3Rpb24ueCkgIC8gc2NhbGVSYXRpbztcblx0XHRcdGVuZEN1dG9mZiA9IGVuZEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdGVuZEN1dG9mZiArPSB2aWV3cG9ydC54eXh5O1xuXHRcdFx0ZW5kQ3V0b2ZmICs9IGVuZE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cdH1cblxuXHQvL3JvdW5kIG1pdGVyIGN1dG9mZnNcblx0ZWxzZSBpZiAobWl0ZXJNb2RlID09IDIuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgc3RhcnRNaXRlcldpZHRoID0gdmVjMihzdGFydEpvaW5EaXJlY3Rpb24pICogdGhpY2tuZXNzICogYWJzKGRvdChzdGFydEpvaW5EaXJlY3Rpb24sIGN1cnJOb3JtYWwpKSAqIC41O1xuXHRcdFx0c3RhcnRDdXRvZmYgPSB2ZWM0KGFDb29yZCwgYUNvb3JkKTtcblx0XHRcdHN0YXJ0Q3V0b2ZmLnp3ICs9IHZlYzIoLXN0YXJ0Sm9pbkRpcmVjdGlvbi55LCBzdGFydEpvaW5EaXJlY3Rpb24ueCkgLyBzY2FsZVJhdGlvO1xuXHRcdFx0c3RhcnRDdXRvZmYgPSBzdGFydEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdHN0YXJ0Q3V0b2ZmICs9IHZpZXdwb3J0Lnh5eHk7XG5cdFx0XHRzdGFydEN1dG9mZiArPSBzdGFydE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgZW5kTWl0ZXJXaWR0aCA9IHZlYzIoZW5kSm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBhYnMoZG90KGVuZEpvaW5EaXJlY3Rpb24sIGN1cnJOb3JtYWwpKSAqIC41O1xuXHRcdFx0ZW5kQ3V0b2ZmID0gdmVjNChiQ29vcmQsIGJDb29yZCk7XG5cdFx0XHRlbmRDdXRvZmYuencgKz0gdmVjMigtZW5kSm9pbkRpcmVjdGlvbi55LCBlbmRKb2luRGlyZWN0aW9uLngpICAvIHNjYWxlUmF0aW87XG5cdFx0XHRlbmRDdXRvZmYgPSBlbmRDdXRvZmYgKiBzY2FsZVJhdGlvLnh5eHkgKyB0cmFuc2xhdGUueHl4eSAqIHZpZXdwb3J0Lnp3enc7XG5cdFx0XHRlbmRDdXRvZmYgKz0gdmlld3BvcnQueHl4eTtcblx0XHRcdGVuZEN1dG9mZiArPSBlbmRNaXRlcldpZHRoLnh5eHk7XG5cdFx0fVxuXHR9XG59XG4iXSksZnJhZzpvKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBmbG9hdCBkYXNoTGVuZ3RoLCBwaXhlbFJhdGlvLCB0aGlja25lc3MsIG9wYWNpdHksIGlkLCBtaXRlck1vZGU7XG51bmlmb3JtIHNhbXBsZXIyRCBkYXNoVGV4dHVyZTtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xudmFyeWluZyB2ZWM0IHN0YXJ0Q3V0b2ZmLCBlbmRDdXRvZmY7XG52YXJ5aW5nIHZlYzIgc3RhcnRDb29yZCwgZW5kQ29vcmQ7XG52YXJ5aW5nIGZsb2F0IGVuYWJsZVN0YXJ0TWl0ZXIsIGVuYWJsZUVuZE1pdGVyO1xuXG5mbG9hdCBkaXN0VG9MaW5lKHZlYzIgcCwgdmVjMiBhLCB2ZWMyIGIpIHtcblx0dmVjMiBkaWZmID0gYiAtIGE7XG5cdHZlYzIgcGVycCA9IG5vcm1hbGl6ZSh2ZWMyKC1kaWZmLnksIGRpZmYueCkpO1xuXHRyZXR1cm4gZG90KHAgLSBhLCBwZXJwKTtcbn1cblxudm9pZCBtYWluKCkge1xuXHRmbG9hdCBhbHBoYSA9IDEuLCBkaXN0VG9TdGFydCwgZGlzdFRvRW5kO1xuXHRmbG9hdCBjdXRvZmYgPSB0aGlja25lc3MgKiAuNTtcblxuXHQvL2JldmVsIG1pdGVyXG5cdGlmIChtaXRlck1vZGUgPT0gMS4pIHtcblx0XHRpZiAoZW5hYmxlU3RhcnRNaXRlciA9PSAxLikge1xuXHRcdFx0ZGlzdFRvU3RhcnQgPSBkaXN0VG9MaW5lKGdsX0ZyYWdDb29yZC54eSwgc3RhcnRDdXRvZmYueHksIHN0YXJ0Q3V0b2ZmLnp3KTtcblx0XHRcdGlmIChkaXN0VG9TdGFydCA8IC0xLikge1xuXHRcdFx0XHRkaXNjYXJkO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRhbHBoYSAqPSBtaW4obWF4KGRpc3RUb1N0YXJ0ICsgMS4sIDAuKSwgMS4pO1xuXHRcdH1cblxuXHRcdGlmIChlbmFibGVFbmRNaXRlciA9PSAxLikge1xuXHRcdFx0ZGlzdFRvRW5kID0gZGlzdFRvTGluZShnbF9GcmFnQ29vcmQueHksIGVuZEN1dG9mZi54eSwgZW5kQ3V0b2ZmLnp3KTtcblx0XHRcdGlmIChkaXN0VG9FbmQgPCAtMS4pIHtcblx0XHRcdFx0ZGlzY2FyZDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0YWxwaGEgKj0gbWluKG1heChkaXN0VG9FbmQgKyAxLiwgMC4pLCAxLik7XG5cdFx0fVxuXHR9XG5cblx0Ly8gcm91bmQgbWl0ZXJcblx0ZWxzZSBpZiAobWl0ZXJNb2RlID09IDIuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdGRpc3RUb1N0YXJ0ID0gZGlzdFRvTGluZShnbF9GcmFnQ29vcmQueHksIHN0YXJ0Q3V0b2ZmLnh5LCBzdGFydEN1dG9mZi56dyk7XG5cdFx0XHRpZiAoZGlzdFRvU3RhcnQgPCAwLikge1xuXHRcdFx0XHRmbG9hdCByYWRpdXMgPSBsZW5ndGgoZ2xfRnJhZ0Nvb3JkLnh5IC0gc3RhcnRDb29yZCk7XG5cblx0XHRcdFx0aWYocmFkaXVzID4gY3V0b2ZmICsgLjUpIHtcblx0XHRcdFx0XHRkaXNjYXJkO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGFscGhhIC09IHNtb290aHN0ZXAoY3V0b2ZmIC0gLjUsIGN1dG9mZiArIC41LCByYWRpdXMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChlbmFibGVFbmRNaXRlciA9PSAxLikge1xuXHRcdFx0ZGlzdFRvRW5kID0gZGlzdFRvTGluZShnbF9GcmFnQ29vcmQueHksIGVuZEN1dG9mZi54eSwgZW5kQ3V0b2ZmLnp3KTtcblx0XHRcdGlmIChkaXN0VG9FbmQgPCAwLikge1xuXHRcdFx0XHRmbG9hdCByYWRpdXMgPSBsZW5ndGgoZ2xfRnJhZ0Nvb3JkLnh5IC0gZW5kQ29vcmQpO1xuXG5cdFx0XHRcdGlmKHJhZGl1cyA+IGN1dG9mZiArIC41KSB7XG5cdFx0XHRcdFx0ZGlzY2FyZDtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhbHBoYSAtPSBzbW9vdGhzdGVwKGN1dG9mZiAtIC41LCBjdXRvZmYgKyAuNSwgcmFkaXVzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmbG9hdCB0ID0gZnJhY3QoZG90KHRhbmdlbnQsIGdsX0ZyYWdDb29yZC54eSkgLyBkYXNoTGVuZ3RoKSAqIC41ICsgLjI1O1xuXHRmbG9hdCBkYXNoID0gdGV4dHVyZTJEKGRhc2hUZXh0dXJlLCB2ZWMyKHQsIC41KSkucjtcblxuXHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG5cdGdsX0ZyYWdDb2xvci5hICo9IGFscGhhICogb3BhY2l0eSAqIGRhc2g7XG59XG4iXSksYXR0cmlidXRlczp7bGluZUVuZDp7YnVmZmVyOnIsZGl2aXNvcjowLHN0cmlkZTo4LG9mZnNldDowfSxsaW5lVG9wOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjR9LGFDb2xvcjp7YnVmZmVyOnQucHJvcCgiY29sb3JCdWZmZXIiKSxzdHJpZGU6NCxvZmZzZXQ6MCxkaXZpc29yOjF9LGJDb2xvcjp7YnVmZmVyOnQucHJvcCgiY29sb3JCdWZmZXIiKSxzdHJpZGU6NCxvZmZzZXQ6NCxkaXZpc29yOjF9LHByZXZDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6MCxkaXZpc29yOjF9LGFDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OCxkaXZpc29yOjF9LGJDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6MTYsZGl2aXNvcjoxfSxuZXh0Q29vcmQ6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjI0LGRpdmlzb3I6MX19fSxuKSl9Y2F0Y2godCl7ZT1pfXJldHVybntmaWxsOnQoe3ByaW1pdGl2ZToidHJpYW5nbGUiLGVsZW1lbnRzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUudHJpYW5nbGVzfSxvZmZzZXQ6MCx2ZXJ0Om8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbiwgcG9zaXRpb25GcmFjdDtcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvLCBpZDtcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxuY29uc3QgZmxvYXQgTUFYX0xJTkVTID0gMjU2Ljtcblxudm9pZCBtYWluKCkge1xuXHRmbG9hdCBkZXB0aCA9IChNQVhfTElORVMgLSA0LiAtIGlkKSAvIChNQVhfTElORVMpO1xuXG5cdHZlYzIgcG9zaXRpb24gPSBwb3NpdGlvbiAqIHNjYWxlICsgdHJhbnNsYXRlXG4gICAgICAgKyBwb3NpdGlvbkZyYWN0ICogc2NhbGUgKyB0cmFuc2xhdGVGcmFjdFxuICAgICAgICsgcG9zaXRpb24gKiBzY2FsZUZyYWN0XG4gICAgICAgKyBwb3NpdGlvbkZyYWN0ICogc2NhbGVGcmFjdDtcblxuXHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24gKiAyLjAgLSAxLjAsIGRlcHRoLCAxKTtcblxuXHRmcmFnQ29sb3IgPSBjb2xvciAvIDI1NS47XG5cdGZyYWdDb2xvci5hICo9IG9wYWNpdHk7XG59XG4iXSksZnJhZzpvKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG59XG4iXSksdW5pZm9ybXM6e3NjYWxlOnQucHJvcCgic2NhbGUiKSxjb2xvcjp0LnByb3AoImZpbGwiKSxzY2FsZUZyYWN0OnQucHJvcCgic2NhbGVGcmFjdCIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcCgidHJhbnNsYXRlRnJhY3QiKSx0cmFuc2xhdGU6dC5wcm9wKCJ0cmFuc2xhdGUiKSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLHBpeGVsUmF0aW86dC5jb250ZXh0KCJwaXhlbFJhdGlvIiksaWQ6dC5wcm9wKCJpZCIpLHZpZXdwb3J0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuW2Uudmlld3BvcnQueCxlLnZpZXdwb3J0LnksdC52aWV3cG9ydFdpZHRoLHQudmlld3BvcnRIZWlnaHRdfX0sYXR0cmlidXRlczp7cG9zaXRpb246e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0Ojh9LHBvc2l0aW9uRnJhY3Q6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uRnJhY3RCdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OH19LGJsZW5kOm4uYmxlbmQsZGVwdGg6e2VuYWJsZTohMX0sc2Npc3NvcjpuLnNjaXNzb3Isc3RlbmNpbDpuLnN0ZW5jaWwsdmlld3BvcnQ6bi52aWV3cG9ydH0pLHJlY3Q6aSxtaXRlcjplfX0sdi5kZWZhdWx0cz17ZGFzaGVzOm51bGwsam9pbjoibWl0ZXIiLG1pdGVyTGltaXQ6MSx0aGlja25lc3M6MTAsY2FwOiJzcXVhcmUiLGNvbG9yOiJibGFjayIsb3BhY2l0eToxLG92ZXJsYXk6ITEsdmlld3BvcnQ6bnVsbCxyYW5nZTpudWxsLGNsb3NlOiExLGZpbGw6bnVsbH0sdi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZVtyXT1hcmd1bWVudHNbcl07ZS5sZW5ndGgmJih0PXRoaXMpLnVwZGF0ZS5hcHBseSh0LGUpLHRoaXMuZHJhdygpfSx2LnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4oZS5sZW5ndGg/ZTp0aGlzLnBhc3NlcykuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXt2YXIgbjtpZihlJiZBcnJheS5pc0FycmF5KGUpKXJldHVybihuPXQpLmRyYXcuYXBwbHkobixlKTsibnVtYmVyIj09dHlwZW9mIGUmJihlPXQucGFzc2VzW2VdKSxlJiZlLmNvdW50PjEmJmUub3BhY2l0eSYmKHQucmVnbC5fcmVmcmVzaCgpLGUuZmlsbCYmZS50cmlhbmdsZXMmJmUudHJpYW5nbGVzLmxlbmd0aD4yJiZ0LnNoYWRlcnMuZmlsbChlKSxlLnRoaWNrbmVzcyYmKGUuc2NhbGVbMF0qZS52aWV3cG9ydC53aWR0aD52LnByZWNpc2lvblRocmVzaG9sZHx8ZS5zY2FsZVsxXSplLnZpZXdwb3J0LmhlaWdodD52LnByZWNpc2lvblRocmVzaG9sZHx8InJlY3QiPT09ZS5qb2lufHwhZS5qb2luJiYoZS50aGlja25lc3M8PTJ8fGUuY291bnQ+PXYubWF4UG9pbnRzKT90LnNoYWRlcnMucmVjdChlKTp0LnNoYWRlcnMubWl0ZXIoZSkpKX0pKSx0aGlzfSx2LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0KXtudWxsIT10Lmxlbmd0aD8ibnVtYmVyIj09dHlwZW9mIHRbMF0mJih0PVt7cG9zaXRpb25zOnR9XSk6QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTt2YXIgcj10aGlzLnJlZ2wsbz10aGlzLmdsO2lmKHQuZm9yRWFjaCgoZnVuY3Rpb24odCxmKXt2YXIgZD1lLnBhc3Nlc1tmXTtpZih2b2lkIDAhPT10KWlmKG51bGwhPT10KXtpZigibnVtYmVyIj09dHlwZW9mIHRbMF0mJih0PXtwb3NpdGlvbnM6dH0pLHQ9cyh0LHtwb3NpdGlvbnM6InBvc2l0aW9ucyBwb2ludHMgZGF0YSBjb29yZHMiLHRoaWNrbmVzczoidGhpY2tuZXNzIGxpbmVXaWR0aCBsaW5lV2lkdGhzIGxpbmUtd2lkdGggbGluZXdpZHRoIHdpZHRoIHN0cm9rZS13aWR0aCBzdHJva2V3aWR0aCBzdHJva2VXaWR0aCIsam9pbjoibGluZUpvaW4gbGluZWpvaW4gam9pbiB0eXBlIG1vZGUiLG1pdGVyTGltaXQ6Im1pdGVybGltaXQgbWl0ZXJMaW1pdCIsZGFzaGVzOiJkYXNoIGRhc2hlcyBkYXNoYXJyYXkgZGFzaC1hcnJheSBkYXNoQXJyYXkiLGNvbG9yOiJjb2xvciBjb2xvdXIgc3Ryb2tlIGNvbG9ycyBjb2xvdXJzIHN0cm9rZS1jb2xvciBzdHJva2VDb2xvciIsZmlsbDoiZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvciIsb3BhY2l0eToiYWxwaGEgb3BhY2l0eSIsb3ZlcmxheToib3ZlcmxheSBjcmVhc2Ugb3ZlcmxhcCBpbnRlcnNlY3QiLGNsb3NlOiJjbG9zZWQgY2xvc2UgY2xvc2VkLXBhdGggY2xvc2VQYXRoIixyYW5nZToicmFuZ2UgZGF0YUJveCIsdmlld3BvcnQ6InZpZXdwb3J0IHZpZXdCb3giLGhvbGU6ImhvbGVzIGhvbGUgaG9sbG93IixzcGxpdE51bGw6InNwbGl0TnVsbCJ9KSxkfHwoZS5wYXNzZXNbZl09ZD17aWQ6ZixzY2FsZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGU6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGNvdW50OjAsaG9sZTpbXSxkZXB0aDowLGRhc2hMZW5ndGg6MSxkYXNoVGV4dHVyZTpyLnRleHR1cmUoe2NoYW5uZWxzOjEsZGF0YTpuZXcgVWludDhBcnJheShbMjU1XSksd2lkdGg6MSxoZWlnaHQ6MSxtYWc6ImxpbmVhciIsbWluOiJsaW5lYXIifSksY29sb3JCdWZmZXI6ci5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCIsZGF0YTpuZXcgVWludDhBcnJheX0pLHBvc2l0aW9uQnVmZmVyOnIuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KSxwb3NpdGlvbkZyYWN0QnVmZmVyOnIuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KX0sdD1hKHt9LHYuZGVmYXVsdHMsdCkpLG51bGwhPXQudGhpY2tuZXNzJiYoZC50aGlja25lc3M9cGFyc2VGbG9hdCh0LnRoaWNrbmVzcykpLG51bGwhPXQub3BhY2l0eSYmKGQub3BhY2l0eT1wYXJzZUZsb2F0KHQub3BhY2l0eSkpLG51bGwhPXQubWl0ZXJMaW1pdCYmKGQubWl0ZXJMaW1pdD1wYXJzZUZsb2F0KHQubWl0ZXJMaW1pdCkpLG51bGwhPXQub3ZlcmxheSYmKGQub3ZlcmxheT0hIXQub3ZlcmxheSxmPHYubWF4TGluZXMmJihkLmRlcHRoPTIqKHYubWF4TGluZXMtMS1mJXYubWF4TGluZXMpL3YubWF4TGluZXMtMSkpLG51bGwhPXQuam9pbiYmKGQuam9pbj10LmpvaW4pLG51bGwhPXQuaG9sZSYmKGQuaG9sZT10LmhvbGUpLG51bGwhPXQuZmlsbCYmKGQuZmlsbD10LmZpbGw/bih0LmZpbGwsInVpbnQ4Iik6bnVsbCksbnVsbCE9dC52aWV3cG9ydCYmKGQudmlld3BvcnQ9bSh0LnZpZXdwb3J0KSksZC52aWV3cG9ydHx8KGQudmlld3BvcnQ9bShbby5kcmF3aW5nQnVmZmVyV2lkdGgsby5kcmF3aW5nQnVmZmVySGVpZ2h0XSkpLG51bGwhPXQuY2xvc2UmJihkLmNsb3NlPXQuY2xvc2UpLG51bGw9PT10LnBvc2l0aW9ucyYmKHQucG9zaXRpb25zPVtdKSx0LnBvc2l0aW9ucyl7dmFyIHkseDtpZih0LnBvc2l0aW9ucy54JiZ0LnBvc2l0aW9ucy55KXt2YXIgYj10LnBvc2l0aW9ucy54LF89dC5wb3NpdGlvbnMueTt4PWQuY291bnQ9TWF0aC5tYXgoYi5sZW5ndGgsXy5sZW5ndGgpLHk9bmV3IEZsb2F0NjRBcnJheSgyKngpO2Zvcih2YXIgdz0wO3c8eDt3KyspeVsyKnddPWJbd10seVsyKncrMV09X1t3XX1lbHNlIHk9bCh0LnBvc2l0aW9ucywiZmxvYXQ2NCIpLHg9ZC5jb3VudD1NYXRoLmZsb29yKHkubGVuZ3RoLzIpO3ZhciBUPWQuYm91bmRzPWkoeSwyKTtpZihkLmZpbGwpe2Zvcih2YXIgaz1bXSxBPXt9LE09MCxTPTAsRT0wLEw9ZC5jb3VudDtTPEw7UysrKXt2YXIgQz15WzIqU10sUD15WzIqUysxXTtpc05hTihDKXx8aXNOYU4oUCl8fG51bGw9PUN8fG51bGw9PVA/KEM9eVsyKk1dLFA9eVsyKk0rMV0sQVtTXT1NKTpNPVMsa1tFKytdPUMsa1tFKytdPVB9aWYodC5zcGxpdE51bGwpe2QuY291bnQtMSBpbiBBfHwoQVtkLmNvdW50XT1kLmNvdW50LTEpO3ZhciBJPU9iamVjdC5rZXlzKEEpLm1hcChOdW1iZXIpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKSxPPVtdLHo9MCxEPW51bGwhPWQuaG9sZT9kLmhvbGVbMF06bnVsbDtpZihudWxsIT1EKXt2YXIgUj1nKEksKGZ1bmN0aW9uKHQpe3JldHVybiB0Pj1EfSkpOyhJPUkuc2xpY2UoMCxSKSkucHVzaChEKX1mb3IodmFyIEY9ZnVuY3Rpb24odCl7dmFyIGU9ay5zbGljZSgyKnosMipJW3RdKS5jb25jYXQoRD9rLnNsaWNlKDIqRCk6W10pLHI9KGQuaG9sZXx8W10pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUtRCsoSVt0XS16KX0pKSxuPWMoZSxyKTtuPW4ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZSt6KyhlK3o8SVt0XT8wOkQtSVt0XSl9KSksTy5wdXNoLmFwcGx5KE8sbiksej1JW3RdKzF9LEI9MDtCPEkubGVuZ3RoO0IrKylGKEIpO2Zvcih2YXIgTj0wLGo9Ty5sZW5ndGg7TjxqO04rKyludWxsIT1BW09bTl1dJiYoT1tOXT1BW09bTl1dKTtkLnRyaWFuZ2xlcz1PfWVsc2V7Zm9yKHZhciBVPWMoayxkLmhvbGV8fFtdKSxWPTAsSD1VLmxlbmd0aDtWPEg7VisrKW51bGwhPUFbVVtWXV0mJihVW1ZdPUFbVVtWXV0pO2QudHJpYW5nbGVzPVV9fXZhciBxPW5ldyBGbG9hdDY0QXJyYXkoeSk7dShxLDIsVCk7dmFyIEc9bmV3IEZsb2F0NjRBcnJheSgyKngrNik7ZC5jbG9zZT95WzBdPT09eVsyKngtMl0mJnlbMV09PT15WzIqeC0xXT8oR1swXT1xWzIqeC00XSxHWzFdPXFbMip4LTNdKTooR1swXT1xWzIqeC0yXSxHWzFdPXFbMip4LTFdKTooR1swXT1xWzBdLEdbMV09cVsxXSksRy5zZXQocSwyKSxkLmNsb3NlP3lbMF09PT15WzIqeC0yXSYmeVsxXT09PXlbMip4LTFdPyhHWzIqeCsyXT1xWzJdLEdbMip4KzNdPXFbM10sZC5jb3VudC09MSk6KEdbMip4KzJdPXFbMF0sR1syKngrM109cVsxXSxHWzIqeCs0XT1xWzJdLEdbMip4KzVdPXFbM10pOihHWzIqeCsyXT1xWzIqeC0yXSxHWzIqeCszXT1xWzIqeC0xXSxHWzIqeCs0XT1xWzIqeC0yXSxHWzIqeCs1XT1xWzIqeC0xXSk7dmFyIFk9aChHKTtkLnBvc2l0aW9uQnVmZmVyKFkpO3ZhciBXPXAoRyxZKTtkLnBvc2l0aW9uRnJhY3RCdWZmZXIoVyl9aWYodC5yYW5nZT9kLnJhbmdlPXQucmFuZ2U6ZC5yYW5nZXx8KGQucmFuZ2U9ZC5ib3VuZHMpLCh0LnJhbmdlfHx0LnBvc2l0aW9ucykmJmQuY291bnQpe3ZhciBYPWQuYm91bmRzLFo9WFsyXS1YWzBdLEo9WFszXS1YWzFdLEs9ZC5yYW5nZVsyXS1kLnJhbmdlWzBdLFE9ZC5yYW5nZVszXS1kLnJhbmdlWzFdO2Quc2NhbGU9W1ovSyxKL1FdLGQudHJhbnNsYXRlPVstZC5yYW5nZVswXS9LK1hbMF0vS3x8MCwtZC5yYW5nZVsxXS9RK1hbMV0vUXx8MF0sZC5zY2FsZUZyYWN0PXAoZC5zY2FsZSksZC50cmFuc2xhdGVGcmFjdD1wKGQudHJhbnNsYXRlKX1pZih0LmRhc2hlcyl7dmFyICQsdHQ9MDtpZighdC5kYXNoZXN8fHQuZGFzaGVzLmxlbmd0aDwyKXR0PTEsJD1uZXcgVWludDhBcnJheShbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0pO2Vsc2V7dHQ9MDtmb3IodmFyIGV0PTA7ZXQ8dC5kYXNoZXMubGVuZ3RoOysrZXQpdHQrPXQuZGFzaGVzW2V0XTskPW5ldyBVaW50OEFycmF5KHR0KnYuZGFzaE11bHQpO2Zvcih2YXIgcnQ9MCxudD0yNTUsaXQ9MDtpdDwyO2l0KyspZm9yKHZhciBhdD0wO2F0PHQuZGFzaGVzLmxlbmd0aDsrK2F0KXtmb3IodmFyIG90PTAsc3Q9dC5kYXNoZXNbYXRdKnYuZGFzaE11bHQqLjU7b3Q8c3Q7KytvdCkkW3J0KytdPW50O250Xj0yNTV9fWQuZGFzaExlbmd0aD10dCxkLmRhc2hUZXh0dXJlKHtjaGFubmVsczoxLGRhdGE6JCx3aWR0aDokLmxlbmd0aCxoZWlnaHQ6MSxtYWc6ImxpbmVhciIsbWluOiJsaW5lYXIifSwwLDApfWlmKHQuY29sb3Ipe3ZhciBsdD1kLmNvdW50LGN0PXQuY29sb3I7Y3R8fChjdD0idHJhbnNwYXJlbnQiKTt2YXIgdXQ9bmV3IFVpbnQ4QXJyYXkoNCpsdCs0KTtpZihBcnJheS5pc0FycmF5KGN0KSYmIm51bWJlciIhPXR5cGVvZiBjdFswXSl7Zm9yKHZhciBmdD0wO2Z0PGx0O2Z0Kyspe3ZhciBodD1uKGN0W2Z0XSwidWludDgiKTt1dC5zZXQoaHQsNCpmdCl9dXQuc2V0KG4oY3RbMF0sInVpbnQ4IiksNCpsdCl9ZWxzZSBmb3IodmFyIHB0PW4oY3QsInVpbnQ4IiksZHQ9MDtkdDxsdCsxO2R0KyspdXQuc2V0KHB0LDQqZHQpO2QuY29sb3JCdWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCIsZGF0YTp1dH0pfX1lbHNlIGUucGFzc2VzW2ZdPW51bGx9KSksdC5sZW5ndGg8dGhpcy5wYXNzZXMubGVuZ3RoKXtmb3IodmFyIGY9dC5sZW5ndGg7Zjx0aGlzLnBhc3Nlcy5sZW5ndGg7ZisrKXt2YXIgZD10aGlzLnBhc3Nlc1tmXTtkJiYoZC5jb2xvckJ1ZmZlci5kZXN0cm95KCksZC5wb3NpdGlvbkJ1ZmZlci5kZXN0cm95KCksZC5kYXNoVGV4dHVyZS5kZXN0cm95KCkpfXRoaXMucGFzc2VzLmxlbmd0aD10Lmxlbmd0aH1mb3IodmFyIHk9W10seD0wO3g8dGhpcy5wYXNzZXMubGVuZ3RoO3grKyludWxsIT09dGhpcy5wYXNzZXNbeF0mJnkucHVzaCh0aGlzLnBhc3Nlc1t4XSk7cmV0dXJuIHRoaXMucGFzc2VzPXksdGhpc319LHYucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXNzZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jb2xvckJ1ZmZlci5kZXN0cm95KCksdC5wb3NpdGlvbkJ1ZmZlci5kZXN0cm95KCksdC5kYXNoVGV4dHVyZS5kZXN0cm95KCl9KSksdGhpcy5wYXNzZXMubGVuZ3RoPTAsdGhpc319LHsiYXJyYXktYm91bmRzIjo3MiwiYXJyYXktZmluZC1pbmRleCI6NzMsImFycmF5LW5vcm1hbGl6ZSI6NzQsImNvbG9yLW5vcm1hbGl6ZSI6MTI2LGVhcmN1dDoxNzgsImVzNi13ZWFrLW1hcCI6MjMzLCJmbGF0dGVuLXZlcnRleC1kYXRhIjoyNDQsZ2xzbGlmeTo0MjQsIm9iamVjdC1hc3NpZ24iOjQ2NiwicGFyc2UtcmVjdCI6NDcxLCJwaWNrLWJ5LWFsaWFzIjo0NzUsInRvLWZsb2F0MzIiOjU3M31dLDUxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbD09cilyZXR1cm47dmFyIG4saSxhPVtdLG89ITAscz0hMTt0cnl7Zm9yKHI9ci5jYWxsKHQpOyEobz0obj1yLm5leHQoKSkuZG9uZSkmJihhLnB1c2gobi52YWx1ZSksIWV8fGEubGVuZ3RoIT09ZSk7bz0hMCk7fWNhdGNoKHQpe3M9ITAsaT10fWZpbmFsbHl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX1yZXR1cm4gYX0odCxlKXx8YSh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gbyh0KX0odCl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGEodCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gYSh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gbyh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP28odCxlKTp2b2lkIDB9fWZ1bmN0aW9uIG8odCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn12YXIgcz10KCJjb2xvci1ub3JtYWxpemUiKSxsPXQoImFycmF5LWJvdW5kcyIpLGM9dCgiY29sb3ItaWQiKSx1PXQoIkBwbG90bHkvcG9pbnQtY2x1c3RlciIpLGY9dCgib2JqZWN0LWFzc2lnbiIpLGg9dCgiZ2xzbGlmeSIpLHA9dCgicGljay1ieS1hbGlhcyIpLGQ9dCgidXBkYXRlLWRpZmYiKSxtPXQoImZsYXR0ZW4tdmVydGV4LWRhdGEiKSxnPXQoImlzLWlleHBsb3JlciIpLHY9dCgidG8tZmxvYXQzMiIpLHk9dCgicGFyc2UtcmVjdCIpLHg9YjtmdW5jdGlvbiBiKHQsZSl7dmFyIHI9dGhpcztpZighKHRoaXMgaW5zdGFuY2VvZiBiKSlyZXR1cm4gbmV3IGIodCxlKTsiZnVuY3Rpb24iPT10eXBlb2YgdD8oZXx8KGU9e30pLGUucmVnbD10KTooZT10LHQ9bnVsbCksZSYmZS5sZW5ndGgmJihlLnBvc2l0aW9ucz1lKTt2YXIgbixpPSh0PWUucmVnbCkuX2dsLGE9W107dGhpcy50b29NYW55Q29sb3JzPWcsbj10LnRleHR1cmUoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMTAyMCksd2lkdGg6MjU1LGhlaWdodDoxLHR5cGU6InVpbnQ4Iixmb3JtYXQ6InJnYmEiLHdyYXBTOiJjbGFtcCIsd3JhcFQ6ImNsYW1wIixtYWc6Im5lYXJlc3QiLG1pbjoibmVhcmVzdCJ9KSxmKHRoaXMse3JlZ2w6dCxnbDppLGdyb3VwczpbXSxtYXJrZXJDYWNoZTpbbnVsbF0sbWFya2VyVGV4dHVyZXM6W251bGxdLHBhbGV0dGU6YSxwYWxldHRlSWRzOnt9LHBhbGV0dGVUZXh0dXJlOm4sbWF4Q29sb3JzOjI1NSxtYXhTaXplOjEwMCxjYW52YXM6aS5jYW52YXN9KSx0aGlzLnVwZGF0ZShlKTt2YXIgbz17dW5pZm9ybXM6e2NvbnN0UG9pbnRTaXplOiEhZS5jb25zdFBvaW50U2l6ZSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLHBhbGV0dGVTaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuW3IudG9vTWFueUNvbG9ycz8wOjI1NSxuLmhlaWdodF19LHBpeGVsUmF0aW86dC5jb250ZXh0KCJwaXhlbFJhdGlvIiksc2NhbGU6dC5wcm9wKCJzY2FsZSIpLHNjYWxlRnJhY3Q6dC5wcm9wKCJzY2FsZUZyYWN0IiksdHJhbnNsYXRlOnQucHJvcCgidHJhbnNsYXRlIiksdHJhbnNsYXRlRnJhY3Q6dC5wcm9wKCJ0cmFuc2xhdGVGcmFjdCIpLG1hcmtlclRleHR1cmU6dC5wcm9wKCJtYXJrZXJUZXh0dXJlIikscGFsZXR0ZVRleHR1cmU6bn0sYXR0cmlidXRlczp7eDpmdW5jdGlvbih0LGUpe3JldHVybiBlLnhBdHRyfHx7YnVmZmVyOmUucG9zaXRpb25CdWZmZXIsc3RyaWRlOjgsb2Zmc2V0OjB9fSx5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueUF0dHJ8fHtidWZmZXI6ZS5wb3NpdGlvbkJ1ZmZlcixzdHJpZGU6OCxvZmZzZXQ6NH19LHhGcmFjdDpmdW5jdGlvbih0LGUpe3JldHVybiBlLnhBdHRyP3tjb25zdGFudDpbMCwwXX06e2J1ZmZlcjplLnBvc2l0aW9uRnJhY3RCdWZmZXIsc3RyaWRlOjgsb2Zmc2V0OjB9fSx5RnJhY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS55QXR0cj97Y29uc3RhbnQ6WzAsMF19OntidWZmZXI6ZS5wb3NpdGlvbkZyYWN0QnVmZmVyLHN0cmlkZTo4LG9mZnNldDo0fX0sc2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBlLnNpemUubGVuZ3RoP3tidWZmZXI6ZS5zaXplQnVmZmVyLHN0cmlkZToyLG9mZnNldDowfTp7Y29uc3RhbnQ6W01hdGgucm91bmQoMjU1KmUuc2l6ZS9yLm1heFNpemUpXX19LGJvcmRlclNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5ib3JkZXJTaXplLmxlbmd0aD97YnVmZmVyOmUuc2l6ZUJ1ZmZlcixzdHJpZGU6MixvZmZzZXQ6MX06e2NvbnN0YW50OltNYXRoLnJvdW5kKDI1NSplLmJvcmRlclNpemUvci5tYXhTaXplKV19fSxjb2xvcklkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuY29sb3IubGVuZ3RoP3tidWZmZXI6ZS5jb2xvckJ1ZmZlcixzdHJpZGU6ci50b29NYW55Q29sb3JzPzg6NCxvZmZzZXQ6MH06e2NvbnN0YW50OnIudG9vTWFueUNvbG9ycz9hLnNsaWNlKDQqZS5jb2xvciw0KmUuY29sb3IrNCk6W2UuY29sb3JdfX0sYm9yZGVyQ29sb3JJZDpmdW5jdGlvbih0LGUpe3JldHVybiBlLmJvcmRlckNvbG9yLmxlbmd0aD97YnVmZmVyOmUuY29sb3JCdWZmZXIsc3RyaWRlOnIudG9vTWFueUNvbG9ycz84OjQsb2Zmc2V0OnIudG9vTWFueUNvbG9ycz80OjJ9Ontjb25zdGFudDpyLnRvb01hbnlDb2xvcnM/YS5zbGljZSg0KmUuYm9yZGVyQ29sb3IsNCplLmJvcmRlckNvbG9yKzQpOltlLmJvcmRlckNvbG9yXX19LGlzQWN0aXZlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuITA9PT1lLmFjdGl2YXRpb24/e2NvbnN0YW50OlsxXX06ZS5hY3RpdmF0aW9uP2UuYWN0aXZhdGlvbjp7Y29uc3RhbnQ6WzBdfX19LGJsZW5kOntlbmFibGU6ITAsY29sb3I6WzAsMCwwLDFdLGZ1bmM6e3NyY1JHQjoic3JjIGFscGhhIixkc3RSR0I6Im9uZSBtaW51cyBzcmMgYWxwaGEiLHNyY0FscGhhOiJvbmUgbWludXMgZHN0IGFscGhhIixkc3RBbHBoYToib25lIn19LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6dC5wcm9wKCJ2aWV3cG9ydCIpfSx2aWV3cG9ydDp0LnByb3AoInZpZXdwb3J0Iiksc3RlbmNpbDp7ZW5hYmxlOiExfSxkZXB0aDp7ZW5hYmxlOiExfSxlbGVtZW50czp0LnByb3AoImVsZW1lbnRzIiksY291bnQ6dC5wcm9wKCJjb3VudCIpLG9mZnNldDp0LnByb3AoIm9mZnNldCIpLHByaW1pdGl2ZToicG9pbnRzIn0scz1mKHt9LG8pO3MuZnJhZz1oKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgbWFya2VyVGV4dHVyZTtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yO1xudmFyeWluZyBmbG9hdCBmcmFnV2lkdGgsIGZyYWdCb3JkZXJDb2xvckxldmVsLCBmcmFnQ29sb3JMZXZlbDtcblxuZmxvYXQgc21vb3RoU3RlcChmbG9hdCB4LCBmbG9hdCB5KSB7XG4gIHJldHVybiAxLjAgLyAoMS4wICsgZXhwKDUwLjAqKHggLSB5KSkpO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IGRpc3QgPSB0ZXh0dXJlMkQobWFya2VyVGV4dHVyZSwgZ2xfUG9pbnRDb29yZCkuciwgZGVsdGEgPSBmcmFnV2lkdGg7XG5cbiAgLy8gbWF4LWRpc3RhbmNlIGFscGhhXG4gIGlmIChkaXN0IDwgMC4wMDMpIGRpc2NhcmQ7XG5cbiAgLy8gbnVsbC1ib3JkZXIgY2FzZVxuICBpZiAoZnJhZ0JvcmRlckNvbG9yTGV2ZWwgPT0gZnJhZ0NvbG9yTGV2ZWwgfHwgZnJhZ0JvcmRlckNvbG9yLmEgPT0gMC4pIHtcbiAgICBmbG9hdCBjb2xvckFtdCA9IHNtb290aHN0ZXAoLjUgLSBkZWx0YSwgLjUgKyBkZWx0YSwgZGlzdCk7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmcmFnQ29sb3IucmdiLCBjb2xvckFtdCAqIGZyYWdDb2xvci5hICogb3BhY2l0eSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgZmxvYXQgYm9yZGVyQ29sb3JBbXQgPSBzbW9vdGhzdGVwKGZyYWdCb3JkZXJDb2xvckxldmVsIC0gZGVsdGEsIGZyYWdCb3JkZXJDb2xvckxldmVsICsgZGVsdGEsIGRpc3QpO1xuICAgIGZsb2F0IGNvbG9yQW10ID0gc21vb3Roc3RlcChmcmFnQ29sb3JMZXZlbCAtIGRlbHRhLCBmcmFnQ29sb3JMZXZlbCArIGRlbHRhLCBkaXN0KTtcblxuICAgIHZlYzQgY29sb3IgPSBmcmFnQm9yZGVyQ29sb3I7XG4gICAgY29sb3IuYSAqPSBib3JkZXJDb2xvckFtdDtcbiAgICBjb2xvciA9IG1peChjb2xvciwgZnJhZ0NvbG9yLCBjb2xvckFtdCk7XG4gICAgY29sb3IuYSAqPSBvcGFjaXR5O1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG4gIH1cblxufVxuIl0pLHMudmVydD1oKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIGZsb2F0IHgsIHksIHhGcmFjdCwgeUZyYWN0O1xuYXR0cmlidXRlIGZsb2F0IHNpemUsIGJvcmRlclNpemU7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcklkLCBib3JkZXJDb2xvcklkO1xuYXR0cmlidXRlIGZsb2F0IGlzQWN0aXZlO1xuXG51bmlmb3JtIGJvb2wgY29uc3RQb2ludFNpemU7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3QsIHBhbGV0dGVTaXplO1xudW5pZm9ybSBzYW1wbGVyMkQgcGFsZXR0ZVRleHR1cmU7XG5cbmNvbnN0IGZsb2F0IG1heFNpemUgPSAxMDAuO1xuY29uc3QgZmxvYXQgYm9yZGVyTGV2ZWwgPSAuNTtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yO1xudmFyeWluZyBmbG9hdCBmcmFnUG9pbnRTaXplLCBmcmFnQm9yZGVyUmFkaXVzLCBmcmFnV2lkdGgsIGZyYWdCb3JkZXJDb2xvckxldmVsLCBmcmFnQ29sb3JMZXZlbDtcblxuZmxvYXQgcG9pbnRTaXplU2NhbGUgPSAoY29uc3RQb2ludFNpemUpID8gMi4gOiBwaXhlbFJhdGlvO1xuXG5ib29sIGlzRGlyZWN0ID0gKHBhbGV0dGVTaXplLnggPCAxLik7XG5cbnZlYzQgZ2V0Q29sb3IodmVjNCBpZCkge1xuICByZXR1cm4gaXNEaXJlY3QgPyBpZCAvIDI1NS4gOiB0ZXh0dXJlMkQocGFsZXR0ZVRleHR1cmUsXG4gICAgdmVjMihcbiAgICAgIChpZC54ICsgLjUpIC8gcGFsZXR0ZVNpemUueCxcbiAgICAgIChpZC55ICsgLjUpIC8gcGFsZXR0ZVNpemUueVxuICAgIClcbiAgKTtcbn1cblxudm9pZCBtYWluKCkge1xuICAvLyBpZ25vcmUgaW5hY3RpdmUgcG9pbnRzXG4gIGlmIChpc0FjdGl2ZSA9PSAwLikgcmV0dXJuO1xuXG4gIHZlYzIgcG9zaXRpb24gPSB2ZWMyKHgsIHkpO1xuICB2ZWMyIHBvc2l0aW9uRnJhY3QgPSB2ZWMyKHhGcmFjdCwgeUZyYWN0KTtcblxuICB2ZWM0IGNvbG9yID0gZ2V0Q29sb3IoY29sb3JJZCk7XG4gIHZlYzQgYm9yZGVyQ29sb3IgPSBnZXRDb2xvcihib3JkZXJDb2xvcklkKTtcblxuICBmbG9hdCBzaXplID0gc2l6ZSAqIG1heFNpemUgLyAyNTUuO1xuICBmbG9hdCBib3JkZXJTaXplID0gYm9yZGVyU2l6ZSAqIG1heFNpemUgLyAyNTUuO1xuXG4gIGdsX1BvaW50U2l6ZSA9IDIuICogc2l6ZSAqIHBvaW50U2l6ZVNjYWxlO1xuICBmcmFnUG9pbnRTaXplID0gc2l6ZSAqIHBpeGVsUmF0aW87XG5cbiAgdmVjMiBwb3MgPSAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVcbiAgICAgICsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZVxuICAgICAgKyAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVGcmFjdFxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlRnJhY3Q7XG5cbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcyAqIDIuIC0gMS4sIDAuLCAxLik7XG5cbiAgZnJhZ0NvbG9yID0gY29sb3I7XG4gIGZyYWdCb3JkZXJDb2xvciA9IGJvcmRlckNvbG9yO1xuICBmcmFnV2lkdGggPSAxLiAvIGdsX1BvaW50U2l6ZTtcblxuICBmcmFnQm9yZGVyQ29sb3JMZXZlbCA9IGNsYW1wKGJvcmRlckxldmVsIC0gYm9yZGVyTGV2ZWwgKiBib3JkZXJTaXplIC8gc2l6ZSwgMC4sIDEuKTtcbiAgZnJhZ0NvbG9yTGV2ZWwgPSBjbGFtcChib3JkZXJMZXZlbCArICgxLiAtIGJvcmRlckxldmVsKSAqIGJvcmRlclNpemUgLyBzaXplLCAwLiwgMS4pO1xufSJdKSx0aGlzLmRyYXdNYXJrZXI9dChzKTt2YXIgbD1mKHt9LG8pO2wuZnJhZz1oKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yO1xudmFyeWluZyBmbG9hdCBmcmFnQm9yZGVyUmFkaXVzLCBmcmFnV2lkdGg7XG5cbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxuZmxvYXQgc21vb3RoU3RlcChmbG9hdCBlZGdlMCwgZmxvYXQgZWRnZTEsIGZsb2F0IHgpIHtcblx0ZmxvYXQgdDtcblx0dCA9IGNsYW1wKCh4IC0gZWRnZTApIC8gKGVkZ2UxIC0gZWRnZTApLCAwLjAsIDEuMCk7XG5cdHJldHVybiB0ICogdCAqICgzLjAgLSAyLjAgKiB0KTtcbn1cblxudm9pZCBtYWluKCkge1xuXHRmbG9hdCByYWRpdXMsIGFscGhhID0gMS4wLCBkZWx0YSA9IGZyYWdXaWR0aDtcblxuXHRyYWRpdXMgPSBsZW5ndGgoMi4wICogZ2xfUG9pbnRDb29yZC54eSAtIDEuMCk7XG5cblx0aWYgKHJhZGl1cyA+IDEuMCArIGRlbHRhKSB7XG5cdFx0ZGlzY2FyZDtcblx0fVxuXG5cdGFscGhhIC09IHNtb290aHN0ZXAoMS4wIC0gZGVsdGEsIDEuMCArIGRlbHRhLCByYWRpdXMpO1xuXG5cdGZsb2F0IGJvcmRlclJhZGl1cyA9IGZyYWdCb3JkZXJSYWRpdXM7XG5cdGZsb2F0IHJhdGlvID0gc21vb3Roc3RlcChib3JkZXJSYWRpdXMgLSBkZWx0YSwgYm9yZGVyUmFkaXVzICsgZGVsdGEsIHJhZGl1cyk7XG5cdHZlYzQgY29sb3IgPSBtaXgoZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3IsIHJhdGlvKTtcblx0Y29sb3IuYSAqPSBhbHBoYSAqIG9wYWNpdHk7XG5cdGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufVxuIl0pLGwudmVydD1oKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIGZsb2F0IHgsIHksIHhGcmFjdCwgeUZyYWN0O1xuYXR0cmlidXRlIGZsb2F0IHNpemUsIGJvcmRlclNpemU7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcklkLCBib3JkZXJDb2xvcklkO1xuYXR0cmlidXRlIGZsb2F0IGlzQWN0aXZlO1xuXG51bmlmb3JtIGJvb2wgY29uc3RQb2ludFNpemU7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XG51bmlmb3JtIHZlYzIgcGFsZXR0ZVNpemUsIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xudW5pZm9ybSBzYW1wbGVyMkQgcGFsZXR0ZVRleHR1cmU7XG5cbmNvbnN0IGZsb2F0IG1heFNpemUgPSAxMDAuO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3I7XG52YXJ5aW5nIGZsb2F0IGZyYWdCb3JkZXJSYWRpdXMsIGZyYWdXaWR0aDtcblxuZmxvYXQgcG9pbnRTaXplU2NhbGUgPSAoY29uc3RQb2ludFNpemUpID8gMi4gOiBwaXhlbFJhdGlvO1xuXG5ib29sIGlzRGlyZWN0ID0gKHBhbGV0dGVTaXplLnggPCAxLik7XG5cbnZlYzQgZ2V0Q29sb3IodmVjNCBpZCkge1xuICByZXR1cm4gaXNEaXJlY3QgPyBpZCAvIDI1NS4gOiB0ZXh0dXJlMkQocGFsZXR0ZVRleHR1cmUsXG4gICAgdmVjMihcbiAgICAgIChpZC54ICsgLjUpIC8gcGFsZXR0ZVNpemUueCxcbiAgICAgIChpZC55ICsgLjUpIC8gcGFsZXR0ZVNpemUueVxuICAgIClcbiAgKTtcbn1cblxudm9pZCBtYWluKCkge1xuICAvLyBpZ25vcmUgaW5hY3RpdmUgcG9pbnRzXG4gIGlmIChpc0FjdGl2ZSA9PSAwLikgcmV0dXJuO1xuXG4gIHZlYzIgcG9zaXRpb24gPSB2ZWMyKHgsIHkpO1xuICB2ZWMyIHBvc2l0aW9uRnJhY3QgPSB2ZWMyKHhGcmFjdCwgeUZyYWN0KTtcblxuICB2ZWM0IGNvbG9yID0gZ2V0Q29sb3IoY29sb3JJZCk7XG4gIHZlYzQgYm9yZGVyQ29sb3IgPSBnZXRDb2xvcihib3JkZXJDb2xvcklkKTtcblxuICBmbG9hdCBzaXplID0gc2l6ZSAqIG1heFNpemUgLyAyNTUuO1xuICBmbG9hdCBib3JkZXJTaXplID0gYm9yZGVyU2l6ZSAqIG1heFNpemUgLyAyNTUuO1xuXG4gIGdsX1BvaW50U2l6ZSA9IChzaXplICsgYm9yZGVyU2l6ZSkgKiBwb2ludFNpemVTY2FsZTtcblxuICB2ZWMyIHBvcyA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZVxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlXG4gICAgICArIChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZUZyYWN0XG4gICAgICArIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVGcmFjdDtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zICogMi4gLSAxLiwgMC4sIDEuKTtcblxuICBmcmFnQm9yZGVyUmFkaXVzID0gMS4gLSAyLiAqIGJvcmRlclNpemUgLyAoc2l6ZSArIGJvcmRlclNpemUpO1xuICBmcmFnQ29sb3IgPSBjb2xvcjtcbiAgZnJhZ0JvcmRlckNvbG9yID0gYm9yZGVyQ29sb3IuYSA9PSAwLiB8fCBib3JkZXJTaXplID09IDAuID8gdmVjNChjb2xvci5yZ2IsIDAuKSA6IGJvcmRlckNvbG9yO1xuICBmcmFnV2lkdGggPSAxLiAvIGdsX1BvaW50U2l6ZTtcbn1cbiJdKSxnJiYobC5mcmFnPWwuZnJhZy5yZXBsYWNlKCJzbW9vdGhzdGVwIiwic21vb3RoU3RlcCIpLHMuZnJhZz1zLmZyYWcucmVwbGFjZSgic21vb3Roc3RlcCIsInNtb290aFN0ZXAiKSksdGhpcy5kcmF3Q2lyY2xlPXQobCl9Yi5kZWZhdWx0cz17Y29sb3I6ImJsYWNrIixib3JkZXJDb2xvcjoidHJhbnNwYXJlbnQiLGJvcmRlclNpemU6MCxzaXplOjEyLG9wYWNpdHk6MSxtYXJrZXI6dm9pZCAwLHZpZXdwb3J0Om51bGwscmFuZ2U6bnVsbCxwaXhlbFNpemU6bnVsbCxjb3VudDowLG9mZnNldDowLGJvdW5kczpudWxsLHBvc2l0aW9uczpbXSxzbmFwOjFlNH0sYi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJnRoaXMudXBkYXRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLmRyYXcoKSx0aGlzfSxiLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09YXJndW1lbnRzW25dO3ZhciBpPXRoaXMuZ3JvdXBzO2lmKDE9PT1yLmxlbmd0aCYmQXJyYXkuaXNBcnJheShyWzBdKSYmKG51bGw9PT1yWzBdWzBdfHxBcnJheS5pc0FycmF5KHJbMF1bMF0pKSYmKHI9clswXSksdGhpcy5yZWdsLl9yZWZyZXNoKCksci5sZW5ndGgpZm9yKHZhciBhPTA7YTxyLmxlbmd0aDthKyspdGhpcy5kcmF3SXRlbShhLHJbYV0pO2Vsc2UgaS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3QuZHJhd0l0ZW0ocil9KSk7cmV0dXJuIHRoaXN9LGIucHJvdG90eXBlLmRyYXdJdGVtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5ncm91cHMsbj1yW3RdO2lmKCJudW1iZXIiPT10eXBlb2YgZSYmKHQ9ZSxuPXJbZV0sZT1udWxsKSxuJiZuLmNvdW50JiZuLm9wYWNpdHkpe24uYWN0aXZhdGlvblswXSYmdGhpcy5kcmF3Q2lyY2xlKHRoaXMuZ2V0TWFya2VyRHJhd09wdGlvbnMoMCxuLGUpKTtmb3IodmFyIGE9W10sbz0xO288bi5hY3RpdmF0aW9uLmxlbmd0aDtvKyspbi5hY3RpdmF0aW9uW29dJiYoITA9PT1uLmFjdGl2YXRpb25bb118fG4uYWN0aXZhdGlvbltvXS5kYXRhLmxlbmd0aCkmJmEucHVzaC5hcHBseShhLGkodGhpcy5nZXRNYXJrZXJEcmF3T3B0aW9ucyhvLG4sZSkpKTthLmxlbmd0aCYmdGhpcy5kcmF3TWFya2VyKGEpfX0sYi5wcm90b3R5cGUuZ2V0TWFya2VyRHJhd09wdGlvbnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUucmFuZ2UsYT1lLnRyZWUsbz1lLnZpZXdwb3J0LHM9ZS5hY3RpdmF0aW9uLGw9ZS5zZWxlY3Rpb25CdWZmZXIsYz1lLmNvdW50O3RoaXMucmVnbDtpZighYSlyZXR1cm4gcj9bZih7fSxlLHttYXJrZXJUZXh0dXJlOnRoaXMubWFya2VyVGV4dHVyZXNbdF0sYWN0aXZhdGlvbjpzW3RdLGNvdW50OnIubGVuZ3RoLGVsZW1lbnRzOnIsb2Zmc2V0OjB9KV06W2Yoe30sZSx7bWFya2VyVGV4dHVyZTp0aGlzLm1hcmtlclRleHR1cmVzW3RdLGFjdGl2YXRpb246c1t0XSxvZmZzZXQ6MH0pXTt2YXIgdT1bXSxoPWEucmFuZ2UoaSx7bG9kOiEwLHB4OlsoaVsyXS1pWzBdKS9vLndpZHRoLChpWzNdLWlbMV0pL28uaGVpZ2h0XX0pO2lmKHIpe2Zvcih2YXIgcD1zW3RdLmRhdGEsZD1uZXcgVWludDhBcnJheShjKSxtPTA7bTxyLmxlbmd0aDttKyspe3ZhciBnPXJbbV07ZFtnXT1wP3BbZ106MX1sLnN1YmRhdGEoZCl9Zm9yKHZhciB2PWgubGVuZ3RoO3YtLTspe3ZhciB5PW4oaFt2XSwyKSx4PXlbMF0sYj15WzFdO3UucHVzaChmKHt9LGUse21hcmtlclRleHR1cmU6dGhpcy5tYXJrZXJUZXh0dXJlc1t0XSxhY3RpdmF0aW9uOnI/bDpzW3RdLG9mZnNldDp4LGNvdW50OmIteH0pKX1yZXR1cm4gdX0sYi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09YXJndW1lbnRzW25dO2lmKHIubGVuZ3RoKXsxPT09ci5sZW5ndGgmJkFycmF5LmlzQXJyYXkoclswXSkmJihyPXJbMF0pO3ZhciBpPXRoaXMuZ3JvdXBzLGE9dGhpcy5nbCxvPXRoaXMucmVnbCxzPXRoaXMubWF4U2l6ZSxjPXRoaXMubWF4Q29sb3JzLGg9dGhpcy5wYWxldHRlO3RoaXMuZ3JvdXBzPWk9ci5tYXAoKGZ1bmN0aW9uKGUscil7dmFyIG49aVtyXTtpZih2b2lkIDA9PT1lKXJldHVybiBuO251bGw9PT1lP2U9e3Bvc2l0aW9uczpudWxsfToiZnVuY3Rpb24iPT10eXBlb2YgZT9lPXtvbmRyYXc6ZX06Im51bWJlciI9PXR5cGVvZiBlWzBdJiYoZT17cG9zaXRpb25zOmV9KSxudWxsPT09KGU9cChlLHtwb3NpdGlvbnM6InBvc2l0aW9ucyBkYXRhIHBvaW50cyIsc25hcDoic25hcCBjbHVzdGVyIGxvZCB0cmVlIixzaXplOiJzaXplcyBzaXplIHJhZGl1cyIsYm9yZGVyU2l6ZToiYm9yZGVyU2l6ZXMgYm9yZGVyU2l6ZSBib3JkZXItc2l6ZSBib3JkZXJzaXplIGJvcmRlcldpZHRoIGJvcmRlcldpZHRocyBib3JkZXItd2lkdGggYm9yZGVyd2lkdGggc3Ryb2tlLXdpZHRoIHN0cm9rZVdpZHRoIHN0cm9rZXdpZHRoIG91dGxpbmUiLGNvbG9yOiJjb2xvcnMgY29sb3IgZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvciIsYm9yZGVyQ29sb3I6ImJvcmRlckNvbG9ycyBib3JkZXJDb2xvciBzdHJva2Ugc3Ryb2tlLWNvbG9yIHN0cm9rZUNvbG9yIixtYXJrZXI6Im1hcmtlcnMgbWFya2VyIHNoYXBlIixyYW5nZToicmFuZ2UgZGF0YUJveCBkYXRhYm94Iix2aWV3cG9ydDoidmlld3BvcnQgdmlld1BvcnQgdmlld0JveCB2aWV3Ym94IixvcGFjaXR5OiJvcGFjaXR5IGFscGhhIHRyYW5zcGFyZW5jeSIsYm91bmRzOiJib3VuZCBib3VuZHMgYm91bmRhcmllcyBsaW1pdHMiLHRvb01hbnlDb2xvcnM6InRvb01hbnlDb2xvcnMgcGFsZXR0ZSBwYWxldHRlTW9kZSBvcHRpbWl6ZVBhbGV0dGUgZW5hYmxlUGFsZXR0ZSJ9KSkucG9zaXRpb25zJiYoZS5wb3NpdGlvbnM9W10pLG51bGwhPWUudG9vTWFueUNvbG9ycyYmKHQudG9vTWFueUNvbG9ycz1lLnRvb01hbnlDb2xvcnMpLG58fChpW3JdPW49e2lkOnIsc2NhbGU6bnVsbCx0cmFuc2xhdGU6bnVsbCxzY2FsZUZyYWN0Om51bGwsdHJhbnNsYXRlRnJhY3Q6bnVsbCxhY3RpdmF0aW9uOltdLHNlbGVjdGlvbkJ1ZmZlcjpvLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZToic3RyZWFtIix0eXBlOiJ1aW50OCJ9KSxzaXplQnVmZmVyOm8uYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCJ9KSxjb2xvckJ1ZmZlcjpvLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZToiZHluYW1pYyIsdHlwZToidWludDgifSkscG9zaXRpb25CdWZmZXI6by5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0In0pLHBvc2l0aW9uRnJhY3RCdWZmZXI6by5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0In0pfSxlPWYoe30sYi5kZWZhdWx0cyxlKSksZS5wb3NpdGlvbnMmJiEoIm1hcmtlciJpbiBlKSYmKGUubWFya2VyPW4ubWFya2VyLGRlbGV0ZSBuLm1hcmtlciksZS5tYXJrZXImJiEoInBvc2l0aW9ucyJpbiBlKSYmKGUucG9zaXRpb25zPW4ucG9zaXRpb25zLGRlbGV0ZSBuLnBvc2l0aW9ucyk7dmFyIGc9MCx4PTA7aWYoZChuLGUsW3tzbmFwOiEwLHNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dCYmKHQ9Yi5kZWZhdWx0cy5zaXplKSxnKz10JiZ0Lmxlbmd0aD8xOjAsdH0sYm9yZGVyU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10JiYodD1iLmRlZmF1bHRzLmJvcmRlclNpemUpLGcrPXQmJnQubGVuZ3RoPzE6MCx0fSxvcGFjaXR5OnBhcnNlRmxvYXQsY29sb3I6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbnVsbD09ZSYmKGU9Yi5kZWZhdWx0cy5jb2xvciksZT10LnVwZGF0ZUNvbG9yKGUpLHgrKyxlfSxib3JkZXJDb2xvcjpmdW5jdGlvbihlLHIpe3JldHVybiBudWxsPT1lJiYoZT1iLmRlZmF1bHRzLmJvcmRlckNvbG9yKSxlPXQudXBkYXRlQ29sb3IoZSkseCsrLGV9LGJvdW5kczpmdW5jdGlvbih0LGUscil7cmV0dXJuInJhbmdlImluIHJ8fChyLnJhbmdlPW51bGwpLHR9LHBvc2l0aW9uczpmdW5jdGlvbih0LGUscil7dmFyIG49ZS5zbmFwLGk9ZS5wb3NpdGlvbkJ1ZmZlcixhPWUucG9zaXRpb25GcmFjdEJ1ZmZlcixzPWUuc2VsZWN0aW9uQnVmZmVyO2lmKHQueHx8dC55KXJldHVybiB0LngubGVuZ3RoP2UueEF0dHI9e2J1ZmZlcjpvLmJ1ZmZlcih0LngpLG9mZnNldDowLHN0cmlkZTo0LGNvdW50OnQueC5sZW5ndGh9OmUueEF0dHI9e2J1ZmZlcjp0LnguYnVmZmVyLG9mZnNldDo0KnQueC5vZmZzZXR8fDAsc3RyaWRlOjQqKHQueC5zdHJpZGV8fDEpLGNvdW50OnQueC5jb3VudH0sdC55Lmxlbmd0aD9lLnlBdHRyPXtidWZmZXI6by5idWZmZXIodC55KSxvZmZzZXQ6MCxzdHJpZGU6NCxjb3VudDp0LnkubGVuZ3RofTplLnlBdHRyPXtidWZmZXI6dC55LmJ1ZmZlcixvZmZzZXQ6NCp0Lnkub2Zmc2V0fHwwLHN0cmlkZTo0Kih0Lnkuc3RyaWRlfHwxKSxjb3VudDp0LnkuY291bnR9LGUuY291bnQ9TWF0aC5tYXgoZS54QXR0ci5jb3VudCxlLnlBdHRyLmNvdW50KSx0O3Q9bSh0LCJmbG9hdDY0Iik7dmFyIGM9ZS5jb3VudD1NYXRoLmZsb29yKHQubGVuZ3RoLzIpLGY9ZS5ib3VuZHM9Yz9sKHQsMik6bnVsbDtpZihyLnJhbmdlfHxlLnJhbmdlfHwoZGVsZXRlIGUucmFuZ2Usci5yYW5nZT1mKSxyLm1hcmtlcnx8ZS5tYXJrZXJ8fChkZWxldGUgZS5tYXJrZXIsci5tYXJrZXI9bnVsbCksbiYmKCEwPT09bnx8Yz5uKT9lLnRyZWU9dSh0LHtib3VuZHM6Zn0pOm4mJm4ubGVuZ3RoJiYoZS50cmVlPW4pLGUudHJlZSl7dmFyIGg9e3ByaW1pdGl2ZToicG9pbnRzIix1c2FnZToic3RhdGljIixkYXRhOmUudHJlZSx0eXBlOiJ1aW50MzIifTtlLmVsZW1lbnRzP2UuZWxlbWVudHMoaCk6ZS5lbGVtZW50cz1vLmVsZW1lbnRzKGgpfXZhciBwPXYuZmxvYXQzMih0KTtyZXR1cm4gaSh7ZGF0YTpwLHVzYWdlOiJkeW5hbWljIn0pLGEoe2RhdGE6di5mcmFjdDMyKHQscCksdXNhZ2U6ImR5bmFtaWMifSkscyh7ZGF0YTpuZXcgVWludDhBcnJheShjKSx0eXBlOiJ1aW50OCIsdXNhZ2U6InN0cmVhbSJ9KSx0fX0se21hcmtlcjpmdW5jdGlvbihlLHIsbil7dmFyIGk9ci5hY3RpdmF0aW9uO2lmKGkuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuZGVzdHJveSYmdC5kZXN0cm95KCl9KSksaS5sZW5ndGg9MCxlJiYibnVtYmVyIiE9dHlwZW9mIGVbMF0pe2Zvcih2YXIgYT1bXSxzPTAsbD1NYXRoLm1pbihlLmxlbmd0aCxyLmNvdW50KTtzPGw7cysrKXt2YXIgYz10LmFkZE1hcmtlcihlW3NdKTthW2NdfHwoYVtjXT1uZXcgVWludDhBcnJheShyLmNvdW50KSksYVtjXVtzXT0xfWZvcih2YXIgdT0wO3U8YS5sZW5ndGg7dSsrKWlmKGFbdV0pe3ZhciBmPXtkYXRhOmFbdV0sdHlwZToidWludDgiLHVzYWdlOiJzdGF0aWMifTtpW3VdP2lbdV0oZik6aVt1XT1vLmJ1ZmZlcihmKSxpW3VdLmRhdGE9YVt1XX19ZWxzZXtpW3QuYWRkTWFya2VyKGUpXT0hMH1yZXR1cm4gZX0scmFuZ2U6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuYm91bmRzO2lmKG4pcmV0dXJuIHR8fCh0PW4pLGUuc2NhbGU9WzEvKHRbMl0tdFswXSksMS8odFszXS10WzFdKV0sZS50cmFuc2xhdGU9Wy10WzBdLC10WzFdXSxlLnNjYWxlRnJhY3Q9di5mcmFjdChlLnNjYWxlKSxlLnRyYW5zbGF0ZUZyYWN0PXYuZnJhY3QoZS50cmFuc2xhdGUpLHR9LHZpZXdwb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB5KHR8fFthLmRyYXdpbmdCdWZmZXJXaWR0aCxhLmRyYXdpbmdCdWZmZXJIZWlnaHRdKX19XSksZyl7dmFyIF89bix3PV8uY291bnQsVD1fLnNpemUsaz1fLmJvcmRlclNpemUsQT1fLnNpemVCdWZmZXIsTT1uZXcgVWludDhBcnJheSgyKncpO2lmKFQubGVuZ3RofHxrLmxlbmd0aClmb3IodmFyIFM9MDtTPHc7UysrKU1bMipTXT1NYXRoLnJvdW5kKDI1NSoobnVsbD09VFtTXT9UOlRbU10pL3MpLE1bMipTKzFdPU1hdGgucm91bmQoMjU1KihudWxsPT1rW1NdP2s6a1tTXSkvcyk7QSh7ZGF0YTpNLHVzYWdlOiJkeW5hbWljIn0pfWlmKHgpe3ZhciBFLEw9bixDPUwuY291bnQsUD1MLmNvbG9yLEk9TC5ib3JkZXJDb2xvcixPPUwuY29sb3JCdWZmZXI7aWYodC50b29NYW55Q29sb3JzKXtpZihQLmxlbmd0aHx8SS5sZW5ndGgpe0U9bmV3IFVpbnQ4QXJyYXkoOCpDKTtmb3IodmFyIHo9MDt6PEM7eisrKXt2YXIgRD1QW3pdO0VbOCp6XT1oWzQqRF0sRVs4KnorMV09aFs0KkQrMV0sRVs4KnorMl09aFs0KkQrMl0sRVs4KnorM109aFs0KkQrM107dmFyIFI9SVt6XTtFWzgqeis0XT1oWzQqUl0sRVs4KnorNV09aFs0KlIrMV0sRVs4KnorNl09aFs0KlIrMl0sRVs4KnorN109aFs0KlIrM119fX1lbHNlIGlmKFAubGVuZ3RofHxJLmxlbmd0aCl7RT1uZXcgVWludDhBcnJheSg0KkMrMik7Zm9yKHZhciBGPTA7RjxDO0YrKyludWxsIT1QW0ZdJiYoRVs0KkZdPVBbRl0lYyxFWzQqRisxXT1NYXRoLmZsb29yKFBbRl0vYykpLG51bGwhPUlbRl0mJihFWzQqRisyXT1JW0ZdJWMsRVs0KkYrM109TWF0aC5mbG9vcihJW0ZdL2MpKX1PKHtkYXRhOkV8fG5ldyBVaW50OEFycmF5KDApLHR5cGU6InVpbnQ4Iix1c2FnZToiZHluYW1pYyJ9KX1yZXR1cm4gbn0pKX19LGIucHJvdG90eXBlLmFkZE1hcmtlcj1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMubWFya2VyVGV4dHVyZXMsbj10aGlzLnJlZ2wsaT10aGlzLm1hcmtlckNhY2hlLGE9bnVsbD09dD8wOmkuaW5kZXhPZih0KTtpZihhPj0wKXJldHVybiBhO2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpZT10O2Vsc2V7ZT1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCk7Zm9yKHZhciBvPTAscz10Lmxlbmd0aDtvPHM7bysrKWVbb109MjU1KnRbb119dmFyIGw9TWF0aC5mbG9vcihNYXRoLnNxcnQoZS5sZW5ndGgpKTtyZXR1cm4gYT1yLmxlbmd0aCxpLnB1c2godCksci5wdXNoKG4udGV4dHVyZSh7Y2hhbm5lbHM6MSxkYXRhOmUscmFkaXVzOmwsbWFnOiJsaW5lYXIiLG1pbjoibGluZWFyIn0pKSxhfSxiLnByb3RvdHlwZS51cGRhdGVDb2xvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBhbGV0dGVJZHMscj10aGlzLnBhbGV0dGUsbj10aGlzLm1heENvbG9ycztBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciBpPVtdO2lmKCJudW1iZXIiPT10eXBlb2YgdFswXSl7dmFyIGE9W107aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rPTQpYS5wdXNoKHQuc2xpY2UobyxvKzQpKTtlbHNlIGZvcih2YXIgbD0wO2w8dC5sZW5ndGg7bCs9NClhLnB1c2godC5zdWJhcnJheShsLGwrNCkpO3Q9YX1mb3IodmFyIHU9MDt1PHQubGVuZ3RoO3UrKyl7dmFyIGY9dFt1XTtmPXMoZiwidWludDgiKTt2YXIgaD1jKGYsITEpO2lmKG51bGw9PWVbaF0pe3ZhciBwPXIubGVuZ3RoO2VbaF09TWF0aC5mbG9vcihwLzQpLHJbcF09ZlswXSxyW3ArMV09ZlsxXSxyW3ArMl09ZlsyXSxyW3ArM109ZlszXX1pW3VdPWVbaF19cmV0dXJuIXRoaXMudG9vTWFueUNvbG9ycyYmci5sZW5ndGg+NCpuJiYodGhpcy50b29NYW55Q29sb3JzPSEwKSx0aGlzLnVwZGF0ZVBhbGV0dGUociksMT09PWkubGVuZ3RoP2lbMF06aX0sYi5wcm90b3R5cGUudXBkYXRlUGFsZXR0ZT1mdW5jdGlvbih0KXtpZighdGhpcy50b29NYW55Q29sb3JzKXt2YXIgZT10aGlzLm1heENvbG9ycyxyPXRoaXMucGFsZXR0ZVRleHR1cmUsbj1NYXRoLmNlaWwoLjI1KnQubGVuZ3RoL2UpO2lmKG4+MSlmb3IodmFyIGk9LjI1Kih0PXQuc2xpY2UoKSkubGVuZ3RoJWU7aTxuKmU7aSsrKXQucHVzaCgwLDAsMCwwKTtyLmhlaWdodDxuJiZyLnJlc2l6ZShlLG4pLHIuc3ViaW1hZ2Uoe3dpZHRoOk1hdGgubWluKC4yNSp0Lmxlbmd0aCxlKSxoZWlnaHQ6bixkYXRhOnR9LDAsMCl9fSxiLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JvdXBzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Quc2l6ZUJ1ZmZlci5kZXN0cm95KCksdC5wb3NpdGlvbkJ1ZmZlci5kZXN0cm95KCksdC5wb3NpdGlvbkZyYWN0QnVmZmVyLmRlc3Ryb3koKSx0LmNvbG9yQnVmZmVyLmRlc3Ryb3koKSx0LmFjdGl2YXRpb24uZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuZGVzdHJveSYmdC5kZXN0cm95KCl9KSksdC5zZWxlY3Rpb25CdWZmZXIuZGVzdHJveSgpLHQuZWxlbWVudHMmJnQuZWxlbWVudHMuZGVzdHJveSgpfSkpLHRoaXMuZ3JvdXBzLmxlbmd0aD0wLHRoaXMucGFsZXR0ZVRleHR1cmUuZGVzdHJveSgpLHRoaXMubWFya2VyVGV4dHVyZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuZGVzdHJveSYmdC5kZXN0cm95KCl9KSksdGhpc307dmFyIF89dCgib2JqZWN0LWFzc2lnbiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyB4KHQsZSksbj1yLnJlbmRlci5iaW5kKHIpO3JldHVybiBfKG4se3JlbmRlcjpuLHVwZGF0ZTpyLnVwZGF0ZS5iaW5kKHIpLGRyYXc6ci5kcmF3LmJpbmQociksZGVzdHJveTpyLmRlc3Ryb3kuYmluZChyKSxyZWdsOnIucmVnbCxnbDpyLmdsLGNhbnZhczpyLmdsLmNhbnZhcyxncm91cHM6ci5ncm91cHMsbWFya2VyczpyLm1hcmtlckNhY2hlLHBhbGV0dGU6ci5wYWxldHRlfSksbn19LHsiQHBsb3RseS9wb2ludC1jbHVzdGVyIjo1OSwiYXJyYXktYm91bmRzIjo3MiwiY29sb3ItaWQiOjEyNCwiY29sb3Itbm9ybWFsaXplIjoxMjYsImZsYXR0ZW4tdmVydGV4LWRhdGEiOjI0NCxnbHNsaWZ5OjQyNCwiaXMtaWV4cGxvcmVyIjo0MzQsIm9iamVjdC1hc3NpZ24iOjQ2NiwicGFyc2UtcmVjdCI6NDcxLCJwaWNrLWJ5LWFsaWFzIjo0NzUsInRvLWZsb2F0MzIiOjU3MywidXBkYXRlLWRpZmYiOjU5NH1dLDUxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyZWdsLXNjYXR0ZXIyZCIpLGk9dCgicGljay1ieS1hbGlhcyIpLGE9dCgiYXJyYXktYm91bmRzIiksbz10KCJyYWYiKSxzPXQoImFycmF5LXJhbmdlIiksbD10KCJwYXJzZS1yZWN0IiksYz10KCJmbGF0dGVuLXZlcnRleC1kYXRhIik7ZnVuY3Rpb24gdSh0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHUpKXJldHVybiBuZXcgdSh0LGUpO3RoaXMudHJhY2VzPVtdLHRoaXMucGFzc2VzPXt9LHRoaXMucmVnbD10LHRoaXMuc2NhdHRlcj1uKHQpLHRoaXMuY2FudmFzPXRoaXMuc2NhdHRlci5jYW52YXN9ZnVuY3Rpb24gZih0LGUscil7cmV0dXJuKG51bGwhPXQuaWQ/dC5pZDp0KTw8MTZ8KDI1NSZlKTw8OHwyNTUmcn1mdW5jdGlvbiBoKHQsZSxyKXt2YXIgbixpLGEsbyxzPXRbZV0sbD10W3JdO3JldHVybiBzLmxlbmd0aD4yPyhzWzBdLHNbMl0sbj1zWzFdLGk9c1szXSk6cy5sZW5ndGg/KG49c1swXSxpPXNbMV0pOihzLngsbj1zLnkscy54K3Mud2lkdGgsaT1zLnkrcy5oZWlnaHQpLGwubGVuZ3RoPjI/KGE9bFswXSxvPWxbMl0sbFsxXSxsWzNdKTpsLmxlbmd0aD8oYT1sWzBdLG89bFsxXSk6KGE9bC54LGwueSxvPWwueCtsLndpZHRoLGwueStsLmhlaWdodCksW2EsbixvLGldfWZ1bmN0aW9uIHAodCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVyblt0LHQsdCx0XTtpZigyPT09dC5sZW5ndGgpcmV0dXJuW3RbMF0sdFsxXSx0WzBdLHRbMV1dO3ZhciBlPWwodCk7cmV0dXJuW2UueCxlLnksZS54K2Uud2lkdGgsZS55K2UuaGVpZ2h0XX1lLmV4cG9ydHM9dSx1LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT10aGlzLHI9W10sbj1hcmd1bWVudHMubGVuZ3RoO24tLTspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIHIubGVuZ3RoJiYodD10aGlzKS51cGRhdGUuYXBwbHkodCxyKSx0aGlzLnJlZ2wuYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI/dGhpcy5kcmF3KCk6KHRoaXMuZGlydHk/bnVsbD09dGhpcy5wbGFubmVkJiYodGhpcy5wbGFubmVkPW8oKGZ1bmN0aW9uKCl7ZS5kcmF3KCksZS5kaXJ0eT0hMCxlLnBsYW5uZWQ9bnVsbH0pKSk6KHRoaXMuZHJhdygpLHRoaXMuZGlydHk9ITAsbygoZnVuY3Rpb24oKXtlLmRpcnR5PSExfSkpKSx0aGlzKX0sdS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZVtyXT1hcmd1bWVudHNbcl07aWYoZS5sZW5ndGgpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRoaXMudXBkYXRlSXRlbShuLGVbbl0pO3RoaXMudHJhY2VzPXRoaXMudHJhY2VzLmZpbHRlcihCb29sZWFuKTtmb3IodmFyIGk9W10sYT0wLG89MDtvPHRoaXMudHJhY2VzLmxlbmd0aDtvKyspe2Zvcih2YXIgcz10aGlzLnRyYWNlc1tvXSxsPXRoaXMudHJhY2VzW29dLnBhc3NlcyxjPTA7YzxsLmxlbmd0aDtjKyspaS5wdXNoKHRoaXMucGFzc2VzW2xbY11dKTtzLnBhc3NPZmZzZXQ9YSxhKz1zLnBhc3Nlcy5sZW5ndGh9cmV0dXJuKHQ9dGhpcy5zY2F0dGVyKS51cGRhdGUuYXBwbHkodCxpKSx0aGlzfX0sdS5wcm90b3R5cGUudXBkYXRlSXRlbT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucmVnbDtpZihudWxsPT09ZSlyZXR1cm4gdGhpcy50cmFjZXNbdF09bnVsbCx0aGlzO2lmKCFlKXJldHVybiB0aGlzO3ZhciBuLG89aShlLHtkYXRhOiJkYXRhIGl0ZW1zIGNvbHVtbnMgcm93cyB2YWx1ZXMgZGltZW5zaW9ucyBzYW1wbGVzIHgiLHNuYXA6InNuYXAgY2x1c3RlciIsc2l6ZToic2l6ZXMgc2l6ZSByYWRpdXMiLGNvbG9yOiJjb2xvcnMgY29sb3IgZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvciIsb3BhY2l0eToib3BhY2l0eSBhbHBoYSB0cmFuc3BhcmVuY3kgb3BhcXVlIixib3JkZXJTaXplOiJib3JkZXJTaXplcyBib3JkZXJTaXplIGJvcmRlci1zaXplIGJvcmRlcnNpemUgYm9yZGVyV2lkdGggYm9yZGVyV2lkdGhzIGJvcmRlci13aWR0aCBib3JkZXJ3aWR0aCBzdHJva2Utd2lkdGggc3Ryb2tlV2lkdGggc3Ryb2tld2lkdGggb3V0bGluZSIsYm9yZGVyQ29sb3I6ImJvcmRlckNvbG9ycyBib3JkZXJDb2xvciBib3JkZXJjb2xvciBzdHJva2Ugc3Ryb2tlLWNvbG9yIHN0cm9rZUNvbG9yIixtYXJrZXI6Im1hcmtlcnMgbWFya2VyIHNoYXBlIixyYW5nZToicmFuZ2UgcmFuZ2VzIGRhdGFib3ggZGF0YUJveCIsdmlld3BvcnQ6InZpZXdwb3J0IHZpZXdCb3ggdmlld2JveCIsZG9tYWluOiJkb21haW4gZG9tYWlucyBhcmVhIGFyZWFzIixwYWRkaW5nOiJwYWQgcGFkZGluZyBwYWRkaW5ncyBwYWRzIG1hcmdpbiBtYXJnaW5zIix0cmFuc3Bvc2U6InRyYW5zcG9zZSB0cmFuc3Bvc2VkIixkaWFnb25hbDoiZGlhZ29uYWwgZGlhZyBzaG93RGlhZ29uYWwiLHVwcGVyOiJ1cHBlciB1cCB0b3AgdXBwZXJoYWxmIHVwcGVySGFsZiBzaG93dXBwZXJoYWxmIHNob3dVcHBlciBzaG93VXBwZXJIYWxmIixsb3dlcjoibG93ZXIgbG93IGJvdHRvbSBsb3dlcmhhbGYgbG93ZXJIYWxmIHNob3dsb3dlcmhhbGYgc2hvd0xvd2VySGFsZiBzaG93TG93ZXIifSkscz10aGlzLnRyYWNlc1t0XXx8KHRoaXMudHJhY2VzW3RdPXtpZDp0LGJ1ZmZlcjpyLmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5fSksY29sb3I6ImJsYWNrIixtYXJrZXI6bnVsbCxzaXplOjEyLGJvcmRlckNvbG9yOiJ0cmFuc3BhcmVudCIsYm9yZGVyU2l6ZToxLHZpZXdwb3J0OmwoW3IuX2dsLmRyYXdpbmdCdWZmZXJXaWR0aCxyLl9nbC5kcmF3aW5nQnVmZmVySGVpZ2h0XSkscGFkZGluZzpbMCwwLDAsMF0sb3BhY2l0eToxLGRpYWdvbmFsOiEwLHVwcGVyOiEwLGxvd2VyOiEwfSk7aWYobnVsbCE9by5jb2xvciYmKHMuY29sb3I9by5jb2xvciksbnVsbCE9by5zaXplJiYocy5zaXplPW8uc2l6ZSksbnVsbCE9by5tYXJrZXImJihzLm1hcmtlcj1vLm1hcmtlciksbnVsbCE9by5ib3JkZXJDb2xvciYmKHMuYm9yZGVyQ29sb3I9by5ib3JkZXJDb2xvciksbnVsbCE9by5ib3JkZXJTaXplJiYocy5ib3JkZXJTaXplPW8uYm9yZGVyU2l6ZSksbnVsbCE9by5vcGFjaXR5JiYocy5vcGFjaXR5PW8ub3BhY2l0eSksby52aWV3cG9ydCYmKHMudmlld3BvcnQ9bChvLnZpZXdwb3J0KSksbnVsbCE9by5kaWFnb25hbCYmKHMuZGlhZ29uYWw9by5kaWFnb25hbCksbnVsbCE9by51cHBlciYmKHMudXBwZXI9by51cHBlciksbnVsbCE9by5sb3dlciYmKHMubG93ZXI9by5sb3dlciksby5kYXRhKXtzLmJ1ZmZlcihjKG8uZGF0YSkpLHMuY29sdW1ucz1vLmRhdGEubGVuZ3RoLHMuY291bnQ9by5kYXRhWzBdLmxlbmd0aCxzLmJvdW5kcz1bXTtmb3IodmFyIHU9MDt1PHMuY29sdW1uczt1Kyspcy5ib3VuZHNbdV09YShvLmRhdGFbdV0sMSl9by5yYW5nZSYmKHMucmFuZ2U9by5yYW5nZSxuPXMucmFuZ2UmJiJudW1iZXIiIT10eXBlb2Ygcy5yYW5nZVswXSksby5kb21haW4mJihzLmRvbWFpbj1vLmRvbWFpbik7dmFyIGQ9ITE7bnVsbCE9by5wYWRkaW5nJiYoQXJyYXkuaXNBcnJheShvLnBhZGRpbmcpJiZvLnBhZGRpbmcubGVuZ3RoPT09cy5jb2x1bW5zJiYibnVtYmVyIj09dHlwZW9mIG8ucGFkZGluZ1tvLnBhZGRpbmcubGVuZ3RoLTFdPyhzLnBhZGRpbmc9by5wYWRkaW5nLm1hcChwKSxkPSEwKTpzLnBhZGRpbmc9cChvLnBhZGRpbmcpKTt2YXIgbT1zLmNvbHVtbnMsZz1zLmNvdW50LHY9cy52aWV3cG9ydC53aWR0aCx5PXMudmlld3BvcnQuaGVpZ2h0LHg9cy52aWV3cG9ydC54LGI9cy52aWV3cG9ydC55LF89di9tLHc9eS9tO3MucGFzc2VzPVtdO2Zvcih2YXIgVD0wO1Q8bTtUKyspZm9yKHZhciBrPTA7azxtO2srKylpZigocy5kaWFnb25hbHx8ayE9PVQpJiYocy51cHBlcnx8IShUPmspKSYmKHMubG93ZXJ8fCEoVDxrKSkpe3ZhciBBPWYocy5pZCxULGspLE09dGhpcy5wYXNzZXNbQV18fCh0aGlzLnBhc3Nlc1tBXT17fSk7aWYoby5kYXRhJiYoby50cmFuc3Bvc2U/TS5wb3NpdGlvbnM9e3g6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6ayxjb3VudDpnLHN0cmlkZTptfSx5OntidWZmZXI6cy5idWZmZXIsb2Zmc2V0OlQsY291bnQ6ZyxzdHJpZGU6bX19Ok0ucG9zaXRpb25zPXt4OntidWZmZXI6cy5idWZmZXIsb2Zmc2V0OmsqZyxjb3VudDpnfSx5OntidWZmZXI6cy5idWZmZXIsb2Zmc2V0OlQqZyxjb3VudDpnfX0sTS5ib3VuZHM9aChzLmJvdW5kcyxULGspKSxvLmRvbWFpbnx8by52aWV3cG9ydHx8by5kYXRhKXt2YXIgUz1kP2gocy5wYWRkaW5nLFQsayk6cy5wYWRkaW5nO2lmKHMuZG9tYWluKXt2YXIgRT1oKHMuZG9tYWluLFQsayksTD1FWzBdLEM9RVsxXSxQPUVbMl0sST1FWzNdO00udmlld3BvcnQ9W3grTCp2K1NbMF0sYitDKnkrU1sxXSx4K1Aqdi1TWzJdLGIrSSp5LVNbM11dfWVsc2UgTS52aWV3cG9ydD1beCtrKl8rXypTWzBdLGIrVCp3K3cqU1sxXSx4KyhrKzEpKl8tXypTWzJdLGIrKFQrMSkqdy13KlNbM11dfW8uY29sb3ImJihNLmNvbG9yPXMuY29sb3IpLG8uc2l6ZSYmKE0uc2l6ZT1zLnNpemUpLG8ubWFya2VyJiYoTS5tYXJrZXI9cy5tYXJrZXIpLG8uYm9yZGVyU2l6ZSYmKE0uYm9yZGVyU2l6ZT1zLmJvcmRlclNpemUpLG8uYm9yZGVyQ29sb3ImJihNLmJvcmRlckNvbG9yPXMuYm9yZGVyQ29sb3IpLG8ub3BhY2l0eSYmKE0ub3BhY2l0eT1zLm9wYWNpdHkpLG8ucmFuZ2UmJihNLnJhbmdlPW4/aChzLnJhbmdlLFQsayk6cy5yYW5nZXx8TS5ib3VuZHMpLHMucGFzc2VzLnB1c2goQSl9cmV0dXJuIHRoaXN9LHUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtpZihlLmxlbmd0aCl7Zm9yKHZhciBuPVtdLGk9MDtpPGUubGVuZ3RoO2krKylpZigibnVtYmVyIj09dHlwZW9mIGVbaV0pe3ZhciBhPXRoaXMudHJhY2VzW2VbaV1dLG89YS5wYXNzZXMsbD1hLnBhc3NPZmZzZXQ7bi5wdXNoLmFwcGx5KG4scyhsLGwrby5sZW5ndGgpKX1lbHNlIGlmKGVbaV0ubGVuZ3RoKXt2YXIgYz1lW2ldLHU9dGhpcy50cmFjZXNbaV0sZj11LnBhc3NlcyxoPXUucGFzc09mZnNldDtmPWYubWFwKChmdW5jdGlvbih0LGUpe25baCtlXT1jfSkpfSh0PXRoaXMuc2NhdHRlcikuZHJhdy5hcHBseSh0LG4pfWVsc2UgdGhpcy5zY2F0dGVyLmRyYXcoKTtyZXR1cm4gdGhpc30sdS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYWNlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmJ1ZmZlciYmdC5idWZmZXIuZGVzdHJveSYmdC5idWZmZXIuZGVzdHJveSgpfSkpLHRoaXMudHJhY2VzPW51bGwsdGhpcy5wYXNzZXM9bnVsbCx0aGlzLnNjYXR0ZXIuZGVzdHJveSgpLHRoaXN9fSx7ImFycmF5LWJvdW5kcyI6NzIsImFycmF5LXJhbmdlIjo3NSwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MjQ0LCJwYXJzZS1yZWN0Ijo0NzEsInBpY2stYnktYWxpYXMiOjQ3NSxyYWY6NTA2LCJyZWdsLXNjYXR0ZXIyZCI6NTE0fV0sNTE2OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP2UuZXhwb3J0cz1uKCk6dC5jcmVhdGVSRUdMPW4oKX0odGhpcywoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5pZD1VKyssdGhpcy50eXBlPXQsdGhpcy5kYXRhPWV9ZnVuY3Rpb24gZSh0KXtyZXR1cm4iWyIrZnVuY3Rpb24gdChlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuW107dmFyIHI9ZS5jaGFyQXQoMCksbj1lLmNoYXJBdChlLmxlbmd0aC0xKTtpZigxPGUubGVuZ3RoJiZyPT09biYmKCciJz09PXJ8fCInIj09PXIpKXJldHVyblsnIicrZS5zdWJzdHIoMSxlLmxlbmd0aC0yKS5yZXBsYWNlKC9cXC9nLCJcXFxcIikucmVwbGFjZSgvIi9nLCdcXCInKSsnIiddO2lmKHI9L1xbKGZhbHNlfHRydWV8bnVsbHxcZCt8J1teJ10qJ3wiW14iXSoiKVxdLy5leGVjKGUpKXJldHVybiB0KGUuc3Vic3RyKDAsci5pbmRleCkpLmNvbmNhdCh0KHJbMV0pKS5jb25jYXQodChlLnN1YnN0cihyLmluZGV4K3JbMF0ubGVuZ3RoKSkpO2lmKDE9PT0ocj1lLnNwbGl0KCIuIikpLmxlbmd0aClyZXR1cm5bJyInK2UucmVwbGFjZSgvXFwvZywiXFxcXCIpLnJlcGxhY2UoLyIvZywnXFwiJykrJyInXTtmb3IoZT1bXSxuPTA7bjxyLmxlbmd0aDsrK24pZT1lLmNvbmNhdCh0KHJbbl0pKTtyZXR1cm4gZX0odCkuam9pbigiXVsiKSsiXSJ9ZnVuY3Rpb24gcih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dC5zcGxpdCgpOnR9ZnVuY3Rpb24gbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTp0fWZ1bmN0aW9uIGkodCl7dmFyIGUsaSxhLG8scz10fHx7fTt0PXt9O3ZhciBsPVtdLGM9W10sdT0idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdz8xOndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLGY9ITEsaD1mdW5jdGlvbih0KXt9LHA9ZnVuY3Rpb24oKXt9O2lmKCJzdHJpbmciPT10eXBlb2Ygcz9lPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iocyk6Im9iamVjdCI9PXR5cGVvZiBzJiYoInN0cmluZyI9PXR5cGVvZiBzLm5vZGVOYW1lJiYiZnVuY3Rpb24iPT10eXBlb2Ygcy5hcHBlbmRDaGlsZCYmImZ1bmN0aW9uIj09dHlwZW9mIHMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0P2U9czoiZnVuY3Rpb24iPT10eXBlb2Ygcy5kcmF3QXJyYXlzfHwiZnVuY3Rpb24iPT10eXBlb2Ygcy5kcmF3RWxlbWVudHM/YT0obz1zKS5jYW52YXM6KCJnbCJpbiBzP289cy5nbDoiY2FudmFzImluIHM/YT1uKHMuY2FudmFzKToiY29udGFpbmVyImluIHMmJihpPW4ocy5jb250YWluZXIpKSwiYXR0cmlidXRlcyJpbiBzJiYodD1zLmF0dHJpYnV0ZXMpLCJleHRlbnNpb25zImluIHMmJihsPXIocy5leHRlbnNpb25zKSksIm9wdGlvbmFsRXh0ZW5zaW9ucyJpbiBzJiYoYz1yKHMub3B0aW9uYWxFeHRlbnNpb25zKSksIm9uRG9uZSJpbiBzJiYoaD1zLm9uRG9uZSksInByb2ZpbGUiaW4gcyYmKGY9ISFzLnByb2ZpbGUpLCJwaXhlbFJhdGlvImluIHMmJih1PStzLnBpeGVsUmF0aW8pKSksZSYmKCJjYW52YXMiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP2E9ZTppPWUpLCFvKXtpZighYSl7aWYoIShlPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7dmFyIGU9d2luZG93LmlubmVyV2lkdGgsbj13aW5kb3cuaW5uZXJIZWlnaHQ7dCE9PWRvY3VtZW50LmJvZHkmJihlPShuPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLnJpZ2h0LW4ubGVmdCxuPW4uYm90dG9tLW4udG9wKSxhLndpZHRoPXIqZSxhLmhlaWdodD1yKm59dmFyIGksYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4gaihhLnN0eWxlLHtib3JkZXI6MCxtYXJnaW46MCxwYWRkaW5nOjAsdG9wOjAsbGVmdDowLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSksdC5hcHBlbmRDaGlsZChhKSx0PT09ZG9jdW1lbnQuYm9keSYmKGEuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixqKHQuc3R5bGUse21hcmdpbjowLHBhZGRpbmc6MH0pKSx0IT09ZG9jdW1lbnQuYm9keSYmImZ1bmN0aW9uIj09dHlwZW9mIFJlc2l6ZU9ic2VydmVyPyhpPW5ldyBSZXNpemVPYnNlcnZlcigoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KG4pfSkpKS5vYnNlcnZlKHQpOndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLG4sITEpLG4oKSx7Y2FudmFzOmEsb25EZXN0cm95OmZ1bmN0aW9uKCl7aT9pLmRpc2Nvbm5lY3QoKTp3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixuKSx0LnJlbW92ZUNoaWxkKGEpfX19KGl8fGRvY3VtZW50LmJvZHksMCx1KSkpcmV0dXJuIG51bGw7YT1lLmNhbnZhcyxwPWUub25EZXN0cm95fXZvaWQgMD09PXQucHJlbXVsdGlwbGllZEFscGhhJiYodC5wcmVtdWx0aXBsaWVkQWxwaGE9ITApLG89ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIpe3RyeXtyZXR1cm4gdC5nZXRDb250ZXh0KHIsZSl9Y2F0Y2godCl7cmV0dXJuIG51bGx9fXJldHVybiByKCJ3ZWJnbCIpfHxyKCJleHBlcmltZW50YWwtd2ViZ2wiKXx8cigid2ViZ2wtZXhwZXJpbWVudGFsIil9KGEsdCl9cmV0dXJuIG8/e2dsOm8sY2FudmFzOmEsY29udGFpbmVyOmksZXh0ZW5zaW9uczpsLG9wdGlvbmFsRXh0ZW5zaW9uczpjLHBpeGVsUmF0aW86dSxwcm9maWxlOmYsb25Eb25lOmgsb25EZXN0cm95OnB9OihwKCksaCgid2ViZ2wgbm90IHN1cHBvcnRlZCwgdHJ5IHVwZ3JhZGluZyB5b3VyIGJyb3dzZXIgb3IgZ3JhcGhpY3MgZHJpdmVycyBodHRwOi8vZ2V0LndlYmdsLm9yZyIpLG51bGwpfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9QXJyYXkodCksbj0wO248dDsrK24pcltuXT1lKG4pO3JldHVybiByfWZ1bmN0aW9uIG8odCl7dmFyIGUscjtyZXR1cm4gZT0oNjU1MzU8dCk8PDQsZXw9cj0oMjU1PCh0Pj4+PWUpKTw8MywoZXw9cj0oMTU8KHQ+Pj49cikpPDwyKXwocj0oMzwodD4+Pj1yKSk8PDEpfHQ+Pj5yPj4xfWZ1bmN0aW9uIHMoKXtmdW5jdGlvbiB0KHQpe3Q6e2Zvcih2YXIgZT0xNjsyNjg0MzU0NTY+PWU7ZSo9MTYpaWYodDw9ZSl7dD1lO2JyZWFrIHR9dD0wfXJldHVybiAwPChlPXJbbyh0KT4+Ml0pLmxlbmd0aD9lLnBvcCgpOm5ldyBBcnJheUJ1ZmZlcih0KX1mdW5jdGlvbiBlKHQpe3Jbbyh0LmJ5dGVMZW5ndGgpPj4yXS5wdXNoKHQpfXZhciByPWEoOCwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pKTtyZXR1cm57YWxsb2M6dCxmcmVlOmUsYWxsb2NUeXBlOmZ1bmN0aW9uKGUscil7dmFyIG49bnVsbDtzd2l0Y2goZSl7Y2FzZSA1MTIwOm49bmV3IEludDhBcnJheSh0KHIpLDAscik7YnJlYWs7Y2FzZSA1MTIxOm49bmV3IFVpbnQ4QXJyYXkodChyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyMjpuPW5ldyBJbnQxNkFycmF5KHQoMipyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyMzpuPW5ldyBVaW50MTZBcnJheSh0KDIqciksMCxyKTticmVhaztjYXNlIDUxMjQ6bj1uZXcgSW50MzJBcnJheSh0KDQqciksMCxyKTticmVhaztjYXNlIDUxMjU6bj1uZXcgVWludDMyQXJyYXkodCg0KnIpLDAscik7YnJlYWs7Y2FzZSA1MTI2Om49bmV3IEZsb2F0MzJBcnJheSh0KDQqciksMCxyKTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBuLmxlbmd0aCE9PXI/bi5zdWJhcnJheSgwLHIpOm59LGZyZWVUeXBlOmZ1bmN0aW9uKHQpe2UodC5idWZmZXIpfX19ZnVuY3Rpb24gbCh0KXtyZXR1cm4hIXQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0LnNoYXBlKSYmQXJyYXkuaXNBcnJheSh0LnN0cmlkZSkmJiJudW1iZXIiPT10eXBlb2YgdC5vZmZzZXQmJnQuc2hhcGUubGVuZ3RoPT09dC5zdHJpZGUubGVuZ3RoJiYoQXJyYXkuaXNBcnJheSh0LmRhdGEpfHxXKHQuZGF0YSkpfWZ1bmN0aW9uIGModCxlLHIsbixpLGEpe2Zvcih2YXIgbz0wO288ZTsrK28pZm9yKHZhciBzPXRbb10sbD0wO2w8cjsrK2wpZm9yKHZhciBjPXNbbF0sdT0wO3U8bjsrK3UpaVthKytdPWNbdV19ZnVuY3Rpb24gdSh0KXtyZXR1cm4gMHxKW09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KV19ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKXRbcl09ZVtyXX1mdW5jdGlvbiBoKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz0wLGw9MDtsPHI7KytsKWZvcih2YXIgYz0wO2M8bjsrK2MpdFtzKytdPWVbaSpsK2EqYytvXX1mdW5jdGlvbiBwKHQsZSxyLG4pe2Z1bmN0aW9uIGkoZSl7dGhpcy5pZD1jKyssdGhpcy5idWZmZXI9dC5jcmVhdGVCdWZmZXIoKSx0aGlzLnR5cGU9ZSx0aGlzLnVzYWdlPTM1MDQ0LHRoaXMuYnl0ZUxlbmd0aD0wLHRoaXMuZGltZW5zaW9uPTEsdGhpcy5kdHlwZT01MTIxLHRoaXMucGVyc2lzdGVudERhdGE9bnVsbCxyLnByb2ZpbGUmJih0aGlzLnN0YXRzPXtzaXplOjB9KX1mdW5jdGlvbiBhKGUscixuKXtlLmJ5dGVMZW5ndGg9ci5ieXRlTGVuZ3RoLHQuYnVmZmVyRGF0YShlLnR5cGUscixuKX1mdW5jdGlvbiBvKHQsZSxyLG4saSxvKXtpZih0LnVzYWdlPXIsQXJyYXkuaXNBcnJheShlKSl7aWYodC5kdHlwZT1ufHw1MTI2LDA8ZS5sZW5ndGgpaWYoQXJyYXkuaXNBcnJheShlWzBdKSl7aT10dChlKTtmb3IodmFyIHM9bj0xO3M8aS5sZW5ndGg7KytzKW4qPWlbc107dC5kaW1lbnNpb249bixhKHQsZT0kKGUsaSx0LmR0eXBlKSxyKSxvP3QucGVyc2lzdGVudERhdGE9ZTpHLmZyZWVUeXBlKGUpfWVsc2UibnVtYmVyIj09dHlwZW9mIGVbMF0/KHQuZGltZW5zaW9uPWksZihpPUcuYWxsb2NUeXBlKHQuZHR5cGUsZS5sZW5ndGgpLGUpLGEodCxpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1pOkcuZnJlZVR5cGUoaSkpOlcoZVswXSkmJih0LmRpbWVuc2lvbj1lWzBdLmxlbmd0aCx0LmR0eXBlPW58fHUoZVswXSl8fDUxMjYsYSh0LGU9JChlLFtlLmxlbmd0aCxlWzBdLmxlbmd0aF0sdC5kdHlwZSksciksbz90LnBlcnNpc3RlbnREYXRhPWU6Ry5mcmVlVHlwZShlKSl9ZWxzZSBpZihXKGUpKXQuZHR5cGU9bnx8dShlKSx0LmRpbWVuc2lvbj1pLGEodCxlLHIpLG8mJih0LnBlcnNpc3RlbnREYXRhPW5ldyBVaW50OEFycmF5KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSkpO2Vsc2UgaWYobChlKSl7aT1lLnNoYXBlO3ZhciBjPWUuc3RyaWRlLHA9KHM9ZS5vZmZzZXQsMCksZD0wLG09MCxnPTA7MT09PWkubGVuZ3RoPyhwPWlbMF0sZD0xLG09Y1swXSxnPTApOjI9PT1pLmxlbmd0aCYmKHA9aVswXSxkPWlbMV0sbT1jWzBdLGc9Y1sxXSksdC5kdHlwZT1ufHx1KGUuZGF0YSl8fDUxMjYsdC5kaW1lbnNpb249ZCxoKGk9Ry5hbGxvY1R5cGUodC5kdHlwZSxwKmQpLGUuZGF0YSxwLGQsbSxnLHMpLGEodCxpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1pOkcuZnJlZVR5cGUoaSl9ZWxzZSBlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXImJih0LmR0eXBlPTUxMjEsdC5kaW1lbnNpb249aSxhKHQsZSxyKSxvJiYodC5wZXJzaXN0ZW50RGF0YT1uZXcgVWludDhBcnJheShuZXcgVWludDhBcnJheShlKSkpKX1mdW5jdGlvbiBzKHIpe2UuYnVmZmVyQ291bnQtLSxuKHIpLHQuZGVsZXRlQnVmZmVyKHIuYnVmZmVyKSxyLmJ1ZmZlcj1udWxsLGRlbGV0ZSBwW3IuaWRdfXZhciBjPTAscD17fTtpLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dC5iaW5kQnVmZmVyKHRoaXMudHlwZSx0aGlzLmJ1ZmZlcil9LGkucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtzKHRoaXMpfTt2YXIgZD1bXTtyZXR1cm4gci5wcm9maWxlJiYoZS5nZXRUb3RhbEJ1ZmZlclNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBPYmplY3Qua2V5cyhwKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0Kz1wW2VdLnN0YXRzLnNpemV9KSksdH0pLHtjcmVhdGU6ZnVuY3Rpb24obixhLGMsZCl7ZnVuY3Rpb24gbShlKXt2YXIgbj0zNTA0NCxpPW51bGwsYT0wLHM9MCxjPTE7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl8fFcoZSl8fGwoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9pPWU6Im51bWJlciI9PXR5cGVvZiBlP2E9MHxlOmUmJigiZGF0YSJpbiBlJiYoaT1lLmRhdGEpLCJ1c2FnZSJpbiBlJiYobj1RW2UudXNhZ2VdKSwidHlwZSJpbiBlJiYocz1LW2UudHlwZV0pLCJkaW1lbnNpb24iaW4gZSYmKGM9MHxlLmRpbWVuc2lvbiksImxlbmd0aCJpbiBlJiYoYT0wfGUubGVuZ3RoKSksZy5iaW5kKCksaT9vKGcsaSxuLHMsYyxkKTooYSYmdC5idWZmZXJEYXRhKGcudHlwZSxhLG4pLGcuZHR5cGU9c3x8NTEyMSxnLnVzYWdlPW4sZy5kaW1lbnNpb249YyxnLmJ5dGVMZW5ndGg9YSksci5wcm9maWxlJiYoZy5zdGF0cy5zaXplPWcuYnl0ZUxlbmd0aCpldFtnLmR0eXBlXSksbX1lLmJ1ZmZlckNvdW50Kys7dmFyIGc9bmV3IGkoYSk7cmV0dXJuIHBbZy5pZF09ZyxjfHxtKG4pLG0uX3JlZ2xUeXBlPSJidWZmZXIiLG0uX2J1ZmZlcj1nLG0uc3ViZGF0YT1mdW5jdGlvbihlLHIpe3ZhciBuLGk9MHwocnx8MCk7aWYoZy5iaW5kKCksVyhlKXx8ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXQuYnVmZmVyU3ViRGF0YShnLnR5cGUsaSxlKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe2lmKDA8ZS5sZW5ndGgpaWYoIm51bWJlciI9PXR5cGVvZiBlWzBdKXt2YXIgYT1HLmFsbG9jVHlwZShnLmR0eXBlLGUubGVuZ3RoKTtmKGEsZSksdC5idWZmZXJTdWJEYXRhKGcudHlwZSxpLGEpLEcuZnJlZVR5cGUoYSl9ZWxzZShBcnJheS5pc0FycmF5KGVbMF0pfHxXKGVbMF0pKSYmKG49dHQoZSksYT0kKGUsbixnLmR0eXBlKSx0LmJ1ZmZlclN1YkRhdGEoZy50eXBlLGksYSksRy5mcmVlVHlwZShhKSl9ZWxzZSBpZihsKGUpKXtuPWUuc2hhcGU7dmFyIG89ZS5zdHJpZGUscz1hPTAsYz0wLHA9MDsxPT09bi5sZW5ndGg/KGE9blswXSxzPTEsYz1vWzBdLHA9MCk6Mj09PW4ubGVuZ3RoJiYoYT1uWzBdLHM9blsxXSxjPW9bMF0scD1vWzFdKSxuPUFycmF5LmlzQXJyYXkoZS5kYXRhKT9nLmR0eXBlOnUoZS5kYXRhKSxoKG49Ry5hbGxvY1R5cGUobixhKnMpLGUuZGF0YSxhLHMsYyxwLGUub2Zmc2V0KSx0LmJ1ZmZlclN1YkRhdGEoZy50eXBlLGksbiksRy5mcmVlVHlwZShuKX1yZXR1cm4gbX0sci5wcm9maWxlJiYobS5zdGF0cz1nLnN0YXRzKSxtLmRlc3Ryb3k9ZnVuY3Rpb24oKXtzKGcpfSxtfSxjcmVhdGVTdHJlYW06ZnVuY3Rpb24odCxlKXt2YXIgcj1kLnBvcCgpO3JldHVybiByfHwocj1uZXcgaSh0KSksci5iaW5kKCksbyhyLGUsMzUwNDAsMCwxLCExKSxyfSxkZXN0cm95U3RyZWFtOmZ1bmN0aW9uKHQpe2QucHVzaCh0KX0sY2xlYXI6ZnVuY3Rpb24oKXtYKHApLmZvckVhY2gocyksZC5mb3JFYWNoKHMpfSxnZXRCdWZmZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuX2J1ZmZlciBpbnN0YW5jZW9mIGk/dC5fYnVmZmVyOm51bGx9LHJlc3RvcmU6ZnVuY3Rpb24oKXtYKHApLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuYnVmZmVyPXQuY3JlYXRlQnVmZmVyKCksdC5iaW5kQnVmZmVyKGUudHlwZSxlLmJ1ZmZlciksdC5idWZmZXJEYXRhKGUudHlwZSxlLnBlcnNpc3RlbnREYXRhfHxlLmJ5dGVMZW5ndGgsZS51c2FnZSl9KSl9LF9pbml0QnVmZmVyOm99fWZ1bmN0aW9uIGQodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXt0aGlzLmlkPWMrKyxzW3RoaXMuaWRdPXRoaXMsdGhpcy5idWZmZXI9dCx0aGlzLnByaW1UeXBlPTQsdGhpcy50eXBlPXRoaXMudmVydENvdW50PTB9ZnVuY3Rpb24gYShuLGksYSxvLHMsYyx1KXt2YXIgZjtpZihuLmJ1ZmZlci5iaW5kKCksaT8oKGY9dSl8fFcoaSkmJighbChpKXx8VyhpLmRhdGEpKXx8KGY9ZS5vZXNfZWxlbWVudF9pbmRleF91aW50PzUxMjU6NTEyMyksci5faW5pdEJ1ZmZlcihuLmJ1ZmZlcixpLGEsZiwzKSk6KHQuYnVmZmVyRGF0YSgzNDk2MyxjLGEpLG4uYnVmZmVyLmR0eXBlPWZ8fDUxMjEsbi5idWZmZXIudXNhZ2U9YSxuLmJ1ZmZlci5kaW1lbnNpb249MyxuLmJ1ZmZlci5ieXRlTGVuZ3RoPWMpLGY9dSwhdSl7c3dpdGNoKG4uYnVmZmVyLmR0eXBlKXtjYXNlIDUxMjE6Y2FzZSA1MTIwOmY9NTEyMTticmVhaztjYXNlIDUxMjM6Y2FzZSA1MTIyOmY9NTEyMzticmVhaztjYXNlIDUxMjU6Y2FzZSA1MTI0OmY9NTEyNX1uLmJ1ZmZlci5kdHlwZT1mfW4udHlwZT1mLDA+KGk9cykmJihpPW4uYnVmZmVyLmJ5dGVMZW5ndGgsNTEyMz09PWY/aT4+PTE6NTEyNT09PWYmJihpPj49MikpLG4udmVydENvdW50PWksaT1vLDA+byYmKGk9NCwxPT09KG89bi5idWZmZXIuZGltZW5zaW9uKSYmKGk9MCksMj09PW8mJihpPTEpLDM9PT1vJiYoaT00KSksbi5wcmltVHlwZT1pfWZ1bmN0aW9uIG8odCl7bi5lbGVtZW50c0NvdW50LS0sZGVsZXRlIHNbdC5pZF0sdC5idWZmZXIuZGVzdHJveSgpLHQuYnVmZmVyPW51bGx9dmFyIHM9e30sYz0wLHU9e3VpbnQ4OjUxMjEsdWludDE2OjUxMjN9O2Uub2VzX2VsZW1lbnRfaW5kZXhfdWludCYmKHUudWludDMyPTUxMjUpLGkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmJ1ZmZlci5iaW5kKCl9O3ZhciBmPVtdO3JldHVybntjcmVhdGU6ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBzKHQpe2lmKHQpaWYoIm51bWJlciI9PXR5cGVvZiB0KWModCksZi5wcmltVHlwZT00LGYudmVydENvdW50PTB8dCxmLnR5cGU9NTEyMTtlbHNle3ZhciBlPW51bGwscj0zNTA0NCxuPS0xLGk9LTEsbz0wLGg9MDtBcnJheS5pc0FycmF5KHQpfHxXKHQpfHxsKHQpP2U9dDooImRhdGEiaW4gdCYmKGU9dC5kYXRhKSwidXNhZ2UiaW4gdCYmKHI9UVt0LnVzYWdlXSksInByaW1pdGl2ZSJpbiB0JiYobj1ydFt0LnByaW1pdGl2ZV0pLCJjb3VudCJpbiB0JiYoaT0wfHQuY291bnQpLCJ0eXBlImluIHQmJihoPXVbdC50eXBlXSksImxlbmd0aCJpbiB0P289MHx0Lmxlbmd0aDoobz1pLDUxMjM9PT1ofHw1MTIyPT09aD9vKj0yOjUxMjUhPT1oJiY1MTI0IT09aHx8KG8qPTQpKSksYShmLGUscixuLGksbyxoKX1lbHNlIGMoKSxmLnByaW1UeXBlPTQsZi52ZXJ0Q291bnQ9MCxmLnR5cGU9NTEyMTtyZXR1cm4gc312YXIgYz1yLmNyZWF0ZShudWxsLDM0OTYzLCEwKSxmPW5ldyBpKGMuX2J1ZmZlcik7cmV0dXJuIG4uZWxlbWVudHNDb3VudCsrLHModCkscy5fcmVnbFR5cGU9ImVsZW1lbnRzIixzLl9lbGVtZW50cz1mLHMuc3ViZGF0YT1mdW5jdGlvbih0LGUpe3JldHVybiBjLnN1YmRhdGEodCxlKSxzfSxzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtvKGYpfSxzfSxjcmVhdGVTdHJlYW06ZnVuY3Rpb24odCl7dmFyIGU9Zi5wb3AoKTtyZXR1cm4gZXx8KGU9bmV3IGkoci5jcmVhdGUobnVsbCwzNDk2MywhMCwhMSkuX2J1ZmZlcikpLGEoZSx0LDM1MDQwLC0xLC0xLDAsMCksZX0sZGVzdHJveVN0cmVhbTpmdW5jdGlvbih0KXtmLnB1c2godCl9LGdldEVsZW1lbnRzOmZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0Ll9lbGVtZW50cyBpbnN0YW5jZW9mIGk/dC5fZWxlbWVudHM6bnVsbH0sY2xlYXI6ZnVuY3Rpb24oKXtYKHMpLmZvckVhY2gobyl9fX1mdW5jdGlvbiBtKHQpe2Zvcih2YXIgZT1HLmFsbG9jVHlwZSg1MTIzLHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3IpaWYoaXNOYU4odFtyXSkpZVtyXT02NTUzNTtlbHNlIGlmKDEvMD09PXRbcl0pZVtyXT0zMTc0NDtlbHNlIGlmKC0xLzA9PT10W3JdKWVbcl09NjQ1MTI7ZWxzZXtudFswXT10W3JdO3ZhciBuPShhPWl0WzBdKT4+PjMxPDwxNSxpPShhPDwxPj4+MjQpLTEyNyxhPWE+PjEzJjEwMjM7ZVtyXT0tMjQ+aT9uOi0xND5pP24rKGErMTAyND4+LTE0LWkpOjE1PGk/biszMTc0NDpuKyhpKzE1PDwxMCkrYX1yZXR1cm4gZX1mdW5jdGlvbiBnKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHxXKHQpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIltvYmplY3QgIit0KyJdIn1mdW5jdGlvbiB5KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiYoMD09PXQubGVuZ3RofHwibnVtYmVyIj09dHlwZW9mIHRbMF0pfWZ1bmN0aW9uIHgodCl7cmV0dXJuISghQXJyYXkuaXNBcnJheSh0KXx8MD09PXQubGVuZ3RofHwhZyh0WzBdKSl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIF8odCl7aWYoIXQpcmV0dXJuITE7dmFyIGU9Yih0KTtyZXR1cm4gMDw9ZHQuaW5kZXhPZihlKXx8KHkodCl8fHgodCl8fGwodCkpfWZ1bmN0aW9uIHcodCxlKXszNjE5Mz09PXQudHlwZT8odC5kYXRhPW0oZSksRy5mcmVlVHlwZShlKSk6dC5kYXRhPWV9ZnVuY3Rpb24gVCh0LGUscixuLGksYSl7aWYodD12b2lkIDAhPT1ndFt0XT9ndFt0XTpzdFt0XSptdFtlXSxhJiYodCo9NiksaSl7Zm9yKG49MDsxPD1yOyluKz10KnIqcixyLz0yO3JldHVybiBufXJldHVybiB0KnIqbn1mdW5jdGlvbiBrKHQsZSxyLG4saSxhLG8pe2Z1bmN0aW9uIHMoKXt0aGlzLmZvcm1hdD10aGlzLmludGVybmFsZm9ybWF0PTY0MDgsdGhpcy50eXBlPTUxMjEsdGhpcy5mbGlwWT10aGlzLnByZW11bHRpcGx5QWxwaGE9dGhpcy5jb21wcmVzc2VkPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTEsdGhpcy5jb2xvclNwYWNlPTM3NDQ0LHRoaXMuY2hhbm5lbHM9dGhpcy5oZWlnaHQ9dGhpcy53aWR0aD0wfWZ1bmN0aW9uIGModCxlKXt0LmludGVybmFsZm9ybWF0PWUuaW50ZXJuYWxmb3JtYXQsdC5mb3JtYXQ9ZS5mb3JtYXQsdC50eXBlPWUudHlwZSx0LmNvbXByZXNzZWQ9ZS5jb21wcmVzc2VkLHQucHJlbXVsdGlwbHlBbHBoYT1lLnByZW11bHRpcGx5QWxwaGEsdC5mbGlwWT1lLmZsaXBZLHQudW5wYWNrQWxpZ25tZW50PWUudW5wYWNrQWxpZ25tZW50LHQuY29sb3JTcGFjZT1lLmNvbG9yU3BhY2UsdC53aWR0aD1lLndpZHRoLHQuaGVpZ2h0PWUuaGVpZ2h0LHQuY2hhbm5lbHM9ZS5jaGFubmVsc31mdW5jdGlvbiB1KHQsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlJiZlKXsicHJlbXVsdGlwbHlBbHBoYSJpbiBlJiYodC5wcmVtdWx0aXBseUFscGhhPWUucHJlbXVsdGlwbHlBbHBoYSksImZsaXBZImluIGUmJih0LmZsaXBZPWUuZmxpcFkpLCJhbGlnbm1lbnQiaW4gZSYmKHQudW5wYWNrQWxpZ25tZW50PWUuYWxpZ25tZW50KSwiY29sb3JTcGFjZSJpbiBlJiYodC5jb2xvclNwYWNlPUhbZS5jb2xvclNwYWNlXSksInR5cGUiaW4gZSYmKHQudHlwZT1xW2UudHlwZV0pO3ZhciByPXQud2lkdGgsbj10LmhlaWdodCxpPXQuY2hhbm5lbHMsYT0hMTsic2hhcGUiaW4gZT8ocj1lLnNoYXBlWzBdLG49ZS5zaGFwZVsxXSwzPT09ZS5zaGFwZS5sZW5ndGgmJihpPWUuc2hhcGVbMl0sYT0hMCkpOigicmFkaXVzImluIGUmJihyPW49ZS5yYWRpdXMpLCJ3aWR0aCJpbiBlJiYocj1lLndpZHRoKSwiaGVpZ2h0ImluIGUmJihuPWUuaGVpZ2h0KSwiY2hhbm5lbHMiaW4gZSYmKGk9ZS5jaGFubmVscyxhPSEwKSksdC53aWR0aD0wfHIsdC5oZWlnaHQ9MHxuLHQuY2hhbm5lbHM9MHxpLHI9ITEsImZvcm1hdCJpbiBlJiYocj1lLmZvcm1hdCxuPXQuaW50ZXJuYWxmb3JtYXQ9WVtyXSx0LmZvcm1hdD1kdFtuXSxyIGluIHEmJiEoInR5cGUiaW4gZSkmJih0LnR5cGU9cVtyXSksciBpbiBLJiYodC5jb21wcmVzc2VkPSEwKSxyPSEwKSwhYSYmcj90LmNoYW5uZWxzPXN0W3QuZm9ybWF0XTphJiYhciYmdC5jaGFubmVscyE9PW90W3QuZm9ybWF0XSYmKHQuZm9ybWF0PXQuaW50ZXJuYWxmb3JtYXQ9b3RbdC5jaGFubmVsc10pfX1mdW5jdGlvbiBmKGUpe3QucGl4ZWxTdG9yZWkoMzc0NDAsZS5mbGlwWSksdC5waXhlbFN0b3JlaSgzNzQ0MSxlLnByZW11bHRpcGx5QWxwaGEpLHQucGl4ZWxTdG9yZWkoMzc0NDMsZS5jb2xvclNwYWNlKSx0LnBpeGVsU3RvcmVpKDMzMTcsZS51bnBhY2tBbGlnbm1lbnQpfWZ1bmN0aW9uIGgoKXtzLmNhbGwodGhpcyksdGhpcy55T2Zmc2V0PXRoaXMueE9mZnNldD0wLHRoaXMuZGF0YT1udWxsLHRoaXMubmVlZHNGcmVlPSExLHRoaXMuZWxlbWVudD1udWxsLHRoaXMubmVlZHNDb3B5PSExfWZ1bmN0aW9uIHAodCxlKXt2YXIgcj1udWxsO2lmKF8oZSk/cj1lOmUmJih1KHQsZSksIngiaW4gZSYmKHQueE9mZnNldD0wfGUueCksInkiaW4gZSYmKHQueU9mZnNldD0wfGUueSksXyhlLmRhdGEpJiYocj1lLmRhdGEpKSxlLmNvcHkpe3ZhciBuPWkudmlld3BvcnRXaWR0aCxhPWkudmlld3BvcnRIZWlnaHQ7dC53aWR0aD10LndpZHRofHxuLXQueE9mZnNldCx0LmhlaWdodD10LmhlaWdodHx8YS10LnlPZmZzZXQsdC5uZWVkc0NvcHk9ITB9ZWxzZSBpZihyKXtpZihXKHIpKXQuY2hhbm5lbHM9dC5jaGFubmVsc3x8NCx0LmRhdGE9ciwidHlwZSJpbiBlfHw1MTIxIT09dC50eXBlfHwodC50eXBlPTB8SltPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocildKTtlbHNlIGlmKHkocikpe3N3aXRjaCh0LmNoYW5uZWxzPXQuY2hhbm5lbHN8fDQsYT0obj1yKS5sZW5ndGgsdC50eXBlKXtjYXNlIDUxMjE6Y2FzZSA1MTIzOmNhc2UgNTEyNTpjYXNlIDUxMjY6KGE9Ry5hbGxvY1R5cGUodC50eXBlLGEpKS5zZXQobiksdC5kYXRhPWE7YnJlYWs7Y2FzZSAzNjE5Mzp0LmRhdGE9bShuKX10LmFsaWdubWVudD0xLHQubmVlZHNGcmVlPSEwfWVsc2UgaWYobChyKSl7bj1yLmRhdGEsQXJyYXkuaXNBcnJheShuKXx8NTEyMSE9PXQudHlwZXx8KHQudHlwZT0wfEpbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pXSk7YT1yLnNoYXBlO3ZhciBvLHMsYyxmLGg9ci5zdHJpZGU7Mz09PWEubGVuZ3RoPyhjPWFbMl0sZj1oWzJdKTpmPWM9MSxvPWFbMF0scz1hWzFdLGE9aFswXSxoPWhbMV0sdC5hbGlnbm1lbnQ9MSx0LndpZHRoPW8sdC5oZWlnaHQ9cyx0LmNoYW5uZWxzPWMsdC5mb3JtYXQ9dC5pbnRlcm5hbGZvcm1hdD1vdFtjXSx0Lm5lZWRzRnJlZT0hMCxvPWYscj1yLm9mZnNldCxjPXQud2lkdGgsZj10LmhlaWdodCxzPXQuY2hhbm5lbHM7Zm9yKHZhciBwPUcuYWxsb2NUeXBlKDM2MTkzPT09dC50eXBlPzUxMjY6dC50eXBlLGMqZipzKSxkPTAsdj0wO3Y8ZjsrK3YpZm9yKHZhciBUPTA7VDxjOysrVClmb3IodmFyIGs9MDtrPHM7KytrKXBbZCsrXT1uW2EqVCtoKnYrbyprK3JdO3codCxwKX1lbHNlIGlmKGIocik9PT1sdHx8YihyKT09PWN0fHxiKHIpPT09dXQpYihyKT09PWx0fHxiKHIpPT09Y3Q/dC5lbGVtZW50PXI6dC5lbGVtZW50PXIuY2FudmFzLHQud2lkdGg9dC5lbGVtZW50LndpZHRoLHQuaGVpZ2h0PXQuZWxlbWVudC5oZWlnaHQsdC5jaGFubmVscz00O2Vsc2UgaWYoYihyKT09PWZ0KXQuZWxlbWVudD1yLHQud2lkdGg9ci53aWR0aCx0LmhlaWdodD1yLmhlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZihiKHIpPT09aHQpdC5lbGVtZW50PXIsdC53aWR0aD1yLm5hdHVyYWxXaWR0aCx0LmhlaWdodD1yLm5hdHVyYWxIZWlnaHQsdC5jaGFubmVscz00O2Vsc2UgaWYoYihyKT09PXB0KXQuZWxlbWVudD1yLHQud2lkdGg9ci52aWRlb1dpZHRoLHQuaGVpZ2h0PXIudmlkZW9IZWlnaHQsdC5jaGFubmVscz00O2Vsc2UgaWYoeChyKSl7Zm9yKG49dC53aWR0aHx8clswXS5sZW5ndGgsYT10LmhlaWdodHx8ci5sZW5ndGgsaD10LmNoYW5uZWxzLGg9ZyhyWzBdWzBdKT9ofHxyWzBdWzBdLmxlbmd0aDpofHwxLG89Wi5zaGFwZShyKSxjPTEsZj0wO2Y8by5sZW5ndGg7KytmKWMqPW9bZl07Yz1HLmFsbG9jVHlwZSgzNjE5Mz09PXQudHlwZT81MTI2OnQudHlwZSxjKSxaLmZsYXR0ZW4ocixvLCIiLGMpLHcodCxjKSx0LmFsaWdubWVudD0xLHQud2lkdGg9bix0LmhlaWdodD1hLHQuY2hhbm5lbHM9aCx0LmZvcm1hdD10LmludGVybmFsZm9ybWF0PW90W2hdLHQubmVlZHNGcmVlPSEwfX1lbHNlIHQud2lkdGg9dC53aWR0aHx8MSx0LmhlaWdodD10LmhlaWdodHx8MSx0LmNoYW5uZWxzPXQuY2hhbm5lbHN8fDR9ZnVuY3Rpb24gZChlLHIsaSxhLG8pe3ZhciBzPWUuZWxlbWVudCxsPWUuZGF0YSxjPWUuaW50ZXJuYWxmb3JtYXQsdT1lLmZvcm1hdCxoPWUudHlwZSxwPWUud2lkdGgsZD1lLmhlaWdodDtmKGUpLHM/dC50ZXhTdWJJbWFnZTJEKHIsbyxpLGEsdSxoLHMpOmUuY29tcHJlc3NlZD90LmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHIsbyxpLGEsYyxwLGQsbCk6ZS5uZWVkc0NvcHk/KG4oKSx0LmNvcHlUZXhTdWJJbWFnZTJEKHIsbyxpLGEsZS54T2Zmc2V0LGUueU9mZnNldCxwLGQpKTp0LnRleFN1YkltYWdlMkQocixvLGksYSxwLGQsdSxoLGwpfWZ1bmN0aW9uIHYoKXtyZXR1cm4gbXQucG9wKCl8fG5ldyBofWZ1bmN0aW9uIGsodCl7dC5uZWVkc0ZyZWUmJkcuZnJlZVR5cGUodC5kYXRhKSxoLmNhbGwodCksbXQucHVzaCh0KX1mdW5jdGlvbiBBKCl7cy5jYWxsKHRoaXMpLHRoaXMuZ2VuTWlwbWFwcz0hMSx0aGlzLm1pcG1hcEhpbnQ9NDM1Mix0aGlzLm1pcG1hc2s9MCx0aGlzLmltYWdlcz1BcnJheSgxNil9ZnVuY3Rpb24gTSh0LGUscil7dmFyIG49dC5pbWFnZXNbMF09digpO3QubWlwbWFzaz0xLG4ud2lkdGg9dC53aWR0aD1lLG4uaGVpZ2h0PXQuaGVpZ2h0PXIsbi5jaGFubmVscz10LmNoYW5uZWxzPTR9ZnVuY3Rpb24gUyh0LGUpe3ZhciByPW51bGw7aWYoXyhlKSljKHI9dC5pbWFnZXNbMF09digpLHQpLHAocixlKSx0Lm1pcG1hc2s9MTtlbHNlIGlmKHUodCxlKSxBcnJheS5pc0FycmF5KGUubWlwbWFwKSlmb3IodmFyIG49ZS5taXBtYXAsaT0wO2k8bi5sZW5ndGg7KytpKWMocj10LmltYWdlc1tpXT12KCksdCksci53aWR0aD4+PWksci5oZWlnaHQ+Pj1pLHAocixuW2ldKSx0Lm1pcG1hc2t8PTE8PGk7ZWxzZSBjKHI9dC5pbWFnZXNbMF09digpLHQpLHAocixlKSx0Lm1pcG1hc2s9MTtjKHQsdC5pbWFnZXNbMF0pfWZ1bmN0aW9uIEUoZSxyKXtmb3IodmFyIGk9ZS5pbWFnZXMsYT0wO2E8aS5sZW5ndGgmJmlbYV07KythKXt2YXIgbz1pW2FdLHM9cixsPWEsYz1vLmVsZW1lbnQsdT1vLmRhdGEsaD1vLmludGVybmFsZm9ybWF0LHA9by5mb3JtYXQsZD1vLnR5cGUsbT1vLndpZHRoLGc9by5oZWlnaHQ7ZihvKSxjP3QudGV4SW1hZ2UyRChzLGwscCxwLGQsYyk6by5jb21wcmVzc2VkP3QuY29tcHJlc3NlZFRleEltYWdlMkQocyxsLGgsbSxnLDAsdSk6by5uZWVkc0NvcHk/KG4oKSx0LmNvcHlUZXhJbWFnZTJEKHMsbCxwLG8ueE9mZnNldCxvLnlPZmZzZXQsbSxnLDApKTp0LnRleEltYWdlMkQocyxsLHAsbSxnLDAscCxkLHV8fG51bGwpfX1mdW5jdGlvbiBMKCl7dmFyIHQ9Z3QucG9wKCl8fG5ldyBBO3MuY2FsbCh0KTtmb3IodmFyIGU9dC5taXBtYXNrPTA7MTY+ZTsrK2UpdC5pbWFnZXNbZV09bnVsbDtyZXR1cm4gdH1mdW5jdGlvbiBDKHQpe2Zvcih2YXIgZT10LmltYWdlcyxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXSYmayhlW3JdKSxlW3JdPW51bGw7Z3QucHVzaCh0KX1mdW5jdGlvbiBQKCl7dGhpcy5tYWdGaWx0ZXI9dGhpcy5taW5GaWx0ZXI9OTcyOCx0aGlzLndyYXBUPXRoaXMud3JhcFM9MzMwNzEsdGhpcy5hbmlzb3Ryb3BpYz0xLHRoaXMuZ2VuTWlwbWFwcz0hMSx0aGlzLm1pcG1hcEhpbnQ9NDM1Mn1mdW5jdGlvbiBJKHQsZSl7Im1pbiJpbiBlJiYodC5taW5GaWx0ZXI9VltlLm1pbl0sMDw9YXQuaW5kZXhPZih0Lm1pbkZpbHRlcikmJiEoImZhY2VzImluIGUpJiYodC5nZW5NaXBtYXBzPSEwKSksIm1hZyJpbiBlJiYodC5tYWdGaWx0ZXI9VVtlLm1hZ10pO3ZhciByPXQud3JhcFMsbj10LndyYXBUO2lmKCJ3cmFwImluIGUpe3ZhciBpPWUud3JhcDsic3RyaW5nIj09dHlwZW9mIGk/cj1uPU5baV06QXJyYXkuaXNBcnJheShpKSYmKHI9TltpWzBdXSxuPU5baVsxXV0pfWVsc2Uid3JhcFMiaW4gZSYmKHI9TltlLndyYXBTXSksIndyYXBUImluIGUmJihuPU5bZS53cmFwVF0pO2lmKHQud3JhcFM9cix0LndyYXBUPW4sImFuaXNvdHJvcGljImluIGUmJih0LmFuaXNvdHJvcGljPWUuYW5pc290cm9waWMpLCJtaXBtYXAiaW4gZSl7c3dpdGNoKHI9ITEsdHlwZW9mIGUubWlwbWFwKXtjYXNlInN0cmluZyI6dC5taXBtYXBIaW50PUJbZS5taXBtYXBdLHI9dC5nZW5NaXBtYXBzPSEwO2JyZWFrO2Nhc2UiYm9vbGVhbiI6cj10Lmdlbk1pcG1hcHM9ZS5taXBtYXA7YnJlYWs7Y2FzZSJvYmplY3QiOnQuZ2VuTWlwbWFwcz0hMSxyPSEwfSFyfHwibWluImluIGV8fCh0Lm1pbkZpbHRlcj05OTg0KX19ZnVuY3Rpb24gTyhyLG4pe3QudGV4UGFyYW1ldGVyaShuLDEwMjQxLHIubWluRmlsdGVyKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MCxyLm1hZ0ZpbHRlciksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDIsci53cmFwUyksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDMsci53cmFwVCksZS5leHRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMmJnQudGV4UGFyYW1ldGVyaShuLDM0MDQ2LHIuYW5pc290cm9waWMpLHIuZ2VuTWlwbWFwcyYmKHQuaGludCgzMzE3MCxyLm1pcG1hcEhpbnQpLHQuZ2VuZXJhdGVNaXBtYXAobikpfWZ1bmN0aW9uIHooZSl7cy5jYWxsKHRoaXMpLHRoaXMubWlwbWFzaz0wLHRoaXMuaW50ZXJuYWxmb3JtYXQ9NjQwOCx0aGlzLmlkPXZ0KyssdGhpcy5yZWZDb3VudD0xLHRoaXMudGFyZ2V0PWUsdGhpcy50ZXh0dXJlPXQuY3JlYXRlVGV4dHVyZSgpLHRoaXMudW5pdD0tMSx0aGlzLmJpbmRDb3VudD0wLHRoaXMudGV4SW5mbz1uZXcgUCxvLnByb2ZpbGUmJih0aGlzLnN0YXRzPXtzaXplOjB9KX1mdW5jdGlvbiBEKGUpe3QuYWN0aXZlVGV4dHVyZSgzMzk4NCksdC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpfWZ1bmN0aW9uIFIoKXt2YXIgZT1idFswXTtlP3QuYmluZFRleHR1cmUoZS50YXJnZXQsZS50ZXh0dXJlKTp0LmJpbmRUZXh0dXJlKDM1NTMsbnVsbCl9ZnVuY3Rpb24gRihlKXt2YXIgcj1lLnRleHR1cmUsbj1lLnVuaXQsaT1lLnRhcmdldDswPD1uJiYodC5hY3RpdmVUZXh0dXJlKDMzOTg0K24pLHQuYmluZFRleHR1cmUoaSxudWxsKSxidFtuXT1udWxsKSx0LmRlbGV0ZVRleHR1cmUociksZS50ZXh0dXJlPW51bGwsZS5wYXJhbXM9bnVsbCxlLnBpeGVscz1udWxsLGUucmVmQ291bnQ9MCxkZWxldGUgeXRbZS5pZF0sYS50ZXh0dXJlQ291bnQtLX12YXIgQj17ImRvbid0IGNhcmUiOjQzNTIsImRvbnQgY2FyZSI6NDM1MixuaWNlOjQzNTQsZmFzdDo0MzUzfSxOPXtyZXBlYXQ6MTA0OTcsY2xhbXA6MzMwNzEsbWlycm9yOjMzNjQ4fSxVPXtuZWFyZXN0Ojk3MjgsbGluZWFyOjk3Mjl9LFY9aih7bWlwbWFwOjk5ODcsIm5lYXJlc3QgbWlwbWFwIG5lYXJlc3QiOjk5ODQsImxpbmVhciBtaXBtYXAgbmVhcmVzdCI6OTk4NSwibmVhcmVzdCBtaXBtYXAgbGluZWFyIjo5OTg2LCJsaW5lYXIgbWlwbWFwIGxpbmVhciI6OTk4N30sVSksSD17bm9uZTowLGJyb3dzZXI6Mzc0NDR9LHE9e3VpbnQ4OjUxMjEscmdiYTQ6MzI4MTkscmdiNTY1OjMzNjM1LCJyZ2I1IGExIjozMjgyMH0sWT17YWxwaGE6NjQwNixsdW1pbmFuY2U6NjQwOSwibHVtaW5hbmNlIGFscGhhIjo2NDEwLHJnYjo2NDA3LHJnYmE6NjQwOCxyZ2JhNDozMjg1NCwicmdiNSBhMSI6MzI4NTUscmdiNTY1OjM2MTk0fSxLPXt9O2UuZXh0X3NyZ2ImJihZLnNyZ2I9MzU5MDQsWS5zcmdiYT0zNTkwNiksZS5vZXNfdGV4dHVyZV9mbG9hdCYmKHEuZmxvYXQzMj1xLmZsb2F0PTUxMjYpLGUub2VzX3RleHR1cmVfaGFsZl9mbG9hdCYmKHEuZmxvYXQxNj1xWyJoYWxmIGZsb2F0Il09MzYxOTMpLGUud2ViZ2xfZGVwdGhfdGV4dHVyZSYmKGooWSx7ZGVwdGg6NjQwMiwiZGVwdGggc3RlbmNpbCI6MzQwNDF9KSxqKHEse3VpbnQxNjo1MTIzLHVpbnQzMjo1MTI1LCJkZXB0aCBzdGVuY2lsIjozNDA0Mn0pKSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJiZqKEsseyJyZ2IgczN0YyBkeHQxIjozMzc3NiwicmdiYSBzM3RjIGR4dDEiOjMzNzc3LCJyZ2JhIHMzdGMgZHh0MyI6MzM3NzgsInJnYmEgczN0YyBkeHQ1IjozMzc3OX0pLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyYmaihLLHsicmdiIGF0YyI6MzU5ODYsInJnYmEgYXRjIGV4cGxpY2l0IGFscGhhIjozNTk4NywicmdiYSBhdGMgaW50ZXJwb2xhdGVkIGFscGhhIjozNDc5OH0pLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJiZqKEsseyJyZ2IgcHZydGMgNGJwcHYxIjozNTg0MCwicmdiIHB2cnRjIDJicHB2MSI6MzU4NDEsInJnYmEgcHZydGMgNGJwcHYxIjozNTg0MiwicmdiYSBwdnJ0YyAyYnBwdjEiOjM1ODQzfSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSYmKEtbInJnYiBldGMxIl09MzYxOTYpO3ZhciBRPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQuZ2V0UGFyYW1ldGVyKDM0NDY3KSk7T2JqZWN0LmtleXMoSykuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9S1t0XTswPD1RLmluZGV4T2YoZSkmJihZW3RdPWUpfSkpO3ZhciAkPU9iamVjdC5rZXlzKFkpO3IudGV4dHVyZUZvcm1hdHM9JDt2YXIgdHQ9W107T2JqZWN0LmtleXMoWSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dHRbWVt0XV09dH0pKTt2YXIgZXQ9W107T2JqZWN0LmtleXMocSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZXRbcVt0XV09dH0pKTt2YXIgcnQ9W107T2JqZWN0LmtleXMoVSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7cnRbVVt0XV09dH0pKTt2YXIgbnQ9W107T2JqZWN0LmtleXMoVikuZm9yRWFjaCgoZnVuY3Rpb24odCl7bnRbVlt0XV09dH0pKTt2YXIgaXQ9W107T2JqZWN0LmtleXMoTikuZm9yRWFjaCgoZnVuY3Rpb24odCl7aXRbTlt0XV09dH0pKTt2YXIgZHQ9JC5yZWR1Y2UoKGZ1bmN0aW9uKHQscil7dmFyIG49WVtyXTtyZXR1cm4gNjQwOT09PW58fDY0MDY9PT1ufHw2NDA5PT09bnx8NjQxMD09PW58fDY0MDI9PT1ufHwzNDA0MT09PW58fGUuZXh0X3NyZ2ImJigzNTkwND09PW58fDM1OTA2PT09bik/dFtuXT1uOjMyODU1PT09bnx8MDw9ci5pbmRleE9mKCJyZ2JhIik/dFtuXT02NDA4OnRbbl09NjQwNyx0fSkse30pLG10PVtdLGd0PVtdLHZ0PTAseXQ9e30seHQ9ci5tYXhUZXh0dXJlVW5pdHMsYnQ9QXJyYXkoeHQpLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0pKTtyZXR1cm4gaih6LnByb3RvdHlwZSx7YmluZDpmdW5jdGlvbigpe3RoaXMuYmluZENvdW50Kz0xO3ZhciBlPXRoaXMudW5pdDtpZigwPmUpe2Zvcih2YXIgcj0wO3I8eHQ7KytyKXt2YXIgbj1idFtyXTtpZihuKXtpZigwPG4uYmluZENvdW50KWNvbnRpbnVlO24udW5pdD0tMX1idFtyXT10aGlzLGU9cjticmVha31vLnByb2ZpbGUmJmEubWF4VGV4dHVyZVVuaXRzPGUrMSYmKGEubWF4VGV4dHVyZVVuaXRzPWUrMSksdGhpcy51bml0PWUsdC5hY3RpdmVUZXh0dXJlKDMzOTg0K2UpLHQuYmluZFRleHR1cmUodGhpcy50YXJnZXQsdGhpcy50ZXh0dXJlKX1yZXR1cm4gZX0sdW5iaW5kOmZ1bmN0aW9uKCl7LS10aGlzLmJpbmRDb3VudH0sZGVjUmVmOmZ1bmN0aW9uKCl7MD49LS10aGlzLnJlZkNvdW50JiZGKHRoaXMpfX0pLG8ucHJvZmlsZSYmKGEuZ2V0VG90YWxUZXh0dXJlU2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIE9iamVjdC5rZXlzKHl0KS5mb3JFYWNoKChmdW5jdGlvbihlKXt0Kz15dFtlXS5zdGF0cy5zaXplfSkpLHR9KSx7Y3JlYXRlMkQ6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9aS50ZXhJbmZvO1AuY2FsbChyKTt2YXIgYT1MKCk7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0P00oYSwwfHQsIm51bWJlciI9PXR5cGVvZiBlPzB8ZTowfHQpOnQ/KEkocix0KSxTKGEsdCkpOk0oYSwxLDEpLHIuZ2VuTWlwbWFwcyYmKGEubWlwbWFzaz0oYS53aWR0aDw8MSktMSksaS5taXBtYXNrPWEubWlwbWFzayxjKGksYSksaS5pbnRlcm5hbGZvcm1hdD1hLmludGVybmFsZm9ybWF0LG4ud2lkdGg9YS53aWR0aCxuLmhlaWdodD1hLmhlaWdodCxEKGkpLEUoYSwzNTUzKSxPKHIsMzU1MyksUigpLEMoYSksby5wcm9maWxlJiYoaS5zdGF0cy5zaXplPVQoaS5pbnRlcm5hbGZvcm1hdCxpLnR5cGUsYS53aWR0aCxhLmhlaWdodCxyLmdlbk1pcG1hcHMsITEpKSxuLmZvcm1hdD10dFtpLmludGVybmFsZm9ybWF0XSxuLnR5cGU9ZXRbaS50eXBlXSxuLm1hZz1ydFtyLm1hZ0ZpbHRlcl0sbi5taW49bnRbci5taW5GaWx0ZXJdLG4ud3JhcFM9aXRbci53cmFwU10sbi53cmFwVD1pdFtyLndyYXBUXSxufXZhciBpPW5ldyB6KDM1NTMpO3JldHVybiB5dFtpLmlkXT1pLGEudGV4dHVyZUNvdW50KyssbihlLHIpLG4uc3ViaW1hZ2U9ZnVuY3Rpb24odCxlLHIsYSl7ZXw9MCxyfD0wLGF8PTA7dmFyIG89digpO3JldHVybiBjKG8saSksby53aWR0aD0wLG8uaGVpZ2h0PTAscChvLHQpLG8ud2lkdGg9by53aWR0aHx8KGkud2lkdGg+PmEpLWUsby5oZWlnaHQ9by5oZWlnaHR8fChpLmhlaWdodD4+YSktcixEKGkpLGQobywzNTUzLGUscixhKSxSKCksayhvKSxufSxuLnJlc2l6ZT1mdW5jdGlvbihlLHIpe3ZhciBhPTB8ZSxzPTB8cnx8YTtpZihhPT09aS53aWR0aCYmcz09PWkuaGVpZ2h0KXJldHVybiBuO24ud2lkdGg9aS53aWR0aD1hLG4uaGVpZ2h0PWkuaGVpZ2h0PXMsRChpKTtmb3IodmFyIGw9MDtpLm1pcG1hc2s+Pmw7KytsKXt2YXIgYz1hPj5sLHU9cz4+bDtpZighY3x8IXUpYnJlYWs7dC50ZXhJbWFnZTJEKDM1NTMsbCxpLmZvcm1hdCxjLHUsMCxpLmZvcm1hdCxpLnR5cGUsbnVsbCl9cmV0dXJuIFIoKSxvLnByb2ZpbGUmJihpLnN0YXRzLnNpemU9VChpLmludGVybmFsZm9ybWF0LGkudHlwZSxhLHMsITEsITEpKSxufSxuLl9yZWdsVHlwZT0idGV4dHVyZTJkIixuLl90ZXh0dXJlPWksby5wcm9maWxlJiYobi5zdGF0cz1pLnN0YXRzKSxuLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpLmRlY1JlZigpfSxufSxjcmVhdGVDdWJlOmZ1bmN0aW9uKGUscixuLGkscyxsKXtmdW5jdGlvbiBmKHQsZSxyLG4saSxhKXt2YXIgcyxsPWgudGV4SW5mbztmb3IoUC5jYWxsKGwpLHM9MDs2PnM7KytzKW1bc109TCgpO2lmKCJudW1iZXIiIT10eXBlb2YgdCYmdCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KWlmKGUpUyhtWzBdLHQpLFMobVsxXSxlKSxTKG1bMl0sciksUyhtWzNdLG4pLFMobVs0XSxpKSxTKG1bNV0sYSk7ZWxzZSBpZihJKGwsdCksdShoLHQpLCJmYWNlcyJpbiB0KWZvcih0PXQuZmFjZXMscz0wOzY+czsrK3MpYyhtW3NdLGgpLFMobVtzXSx0W3NdKTtlbHNlIGZvcihzPTA7Nj5zOysrcylTKG1bc10sdCl9ZWxzZSBmb3IodD0wfHR8fDEscz0wOzY+czsrK3MpTShtW3NdLHQsdCk7Zm9yKGMoaCxtWzBdKSxoLm1pcG1hc2s9bC5nZW5NaXBtYXBzPyhtWzBdLndpZHRoPDwxKS0xOm1bMF0ubWlwbWFzayxoLmludGVybmFsZm9ybWF0PW1bMF0uaW50ZXJuYWxmb3JtYXQsZi53aWR0aD1tWzBdLndpZHRoLGYuaGVpZ2h0PW1bMF0uaGVpZ2h0LEQoaCkscz0wOzY+czsrK3MpRShtW3NdLDM0MDY5K3MpO2ZvcihPKGwsMzQwNjcpLFIoKSxvLnByb2ZpbGUmJihoLnN0YXRzLnNpemU9VChoLmludGVybmFsZm9ybWF0LGgudHlwZSxmLndpZHRoLGYuaGVpZ2h0LGwuZ2VuTWlwbWFwcywhMCkpLGYuZm9ybWF0PXR0W2guaW50ZXJuYWxmb3JtYXRdLGYudHlwZT1ldFtoLnR5cGVdLGYubWFnPXJ0W2wubWFnRmlsdGVyXSxmLm1pbj1udFtsLm1pbkZpbHRlcl0sZi53cmFwUz1pdFtsLndyYXBTXSxmLndyYXBUPWl0W2wud3JhcFRdLHM9MDs2PnM7KytzKUMobVtzXSk7cmV0dXJuIGZ9dmFyIGg9bmV3IHooMzQwNjcpO3l0W2guaWRdPWgsYS5jdWJlQ291bnQrKzt2YXIgbT1BcnJheSg2KTtyZXR1cm4gZihlLHIsbixpLHMsbCksZi5zdWJpbWFnZT1mdW5jdGlvbih0LGUscixuLGkpe3J8PTAsbnw9MCxpfD0wO3ZhciBhPXYoKTtyZXR1cm4gYyhhLGgpLGEud2lkdGg9MCxhLmhlaWdodD0wLHAoYSxlKSxhLndpZHRoPWEud2lkdGh8fChoLndpZHRoPj5pKS1yLGEuaGVpZ2h0PWEuaGVpZ2h0fHwoaC5oZWlnaHQ+PmkpLW4sRChoKSxkKGEsMzQwNjkrdCxyLG4saSksUigpLGsoYSksZn0sZi5yZXNpemU9ZnVuY3Rpb24oZSl7aWYoKGV8PTApIT09aC53aWR0aCl7Zi53aWR0aD1oLndpZHRoPWUsZi5oZWlnaHQ9aC5oZWlnaHQ9ZSxEKGgpO2Zvcih2YXIgcj0wOzY+cjsrK3IpZm9yKHZhciBuPTA7aC5taXBtYXNrPj5uOysrbil0LnRleEltYWdlMkQoMzQwNjkrcixuLGguZm9ybWF0LGU+Pm4sZT4+biwwLGguZm9ybWF0LGgudHlwZSxudWxsKTtyZXR1cm4gUigpLG8ucHJvZmlsZSYmKGguc3RhdHMuc2l6ZT1UKGguaW50ZXJuYWxmb3JtYXQsaC50eXBlLGYud2lkdGgsZi5oZWlnaHQsITEsITApKSxmfX0sZi5fcmVnbFR5cGU9InRleHR1cmVDdWJlIixmLl90ZXh0dXJlPWgsby5wcm9maWxlJiYoZi5zdGF0cz1oLnN0YXRzKSxmLmRlc3Ryb3k9ZnVuY3Rpb24oKXtoLmRlY1JlZigpfSxmfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8eHQ7KytlKXQuYWN0aXZlVGV4dHVyZSgzMzk4NCtlKSx0LmJpbmRUZXh0dXJlKDM1NTMsbnVsbCksYnRbZV09bnVsbDtYKHl0KS5mb3JFYWNoKEYpLGEuY3ViZUNvdW50PTAsYS50ZXh0dXJlQ291bnQ9MH0sZ2V0VGV4dHVyZTpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0scmVzdG9yZTpmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8eHQ7KytlKXt2YXIgcj1idFtlXTtyJiYoci5iaW5kQ291bnQ9MCxyLnVuaXQ9LTEsYnRbZV09bnVsbCl9WCh5dCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS50ZXh0dXJlPXQuY3JlYXRlVGV4dHVyZSgpLHQuYmluZFRleHR1cmUoZS50YXJnZXQsZS50ZXh0dXJlKTtmb3IodmFyIHI9MDszMj5yOysrcilpZigwIT0oZS5taXBtYXNrJjE8PHIpKWlmKDM1NTM9PT1lLnRhcmdldCl0LnRleEltYWdlMkQoMzU1MyxyLGUuaW50ZXJuYWxmb3JtYXQsZS53aWR0aD4+cixlLmhlaWdodD4+ciwwLGUuaW50ZXJuYWxmb3JtYXQsZS50eXBlLG51bGwpO2Vsc2UgZm9yKHZhciBuPTA7Nj5uOysrbil0LnRleEltYWdlMkQoMzQwNjkrbixyLGUuaW50ZXJuYWxmb3JtYXQsZS53aWR0aD4+cixlLmhlaWdodD4+ciwwLGUuaW50ZXJuYWxmb3JtYXQsZS50eXBlLG51bGwpO08oZS50ZXhJbmZvLGUudGFyZ2V0KX0pKX0scmVmcmVzaDpmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8eHQ7KytlKXt2YXIgcj1idFtlXTtyJiYoci5iaW5kQ291bnQ9MCxyLnVuaXQ9LTEsYnRbZV09bnVsbCksdC5hY3RpdmVUZXh0dXJlKDMzOTg0K2UpLHQuYmluZFRleHR1cmUoMzU1MyxudWxsKSx0LmJpbmRUZXh0dXJlKDM0MDY3LG51bGwpfX19fWZ1bmN0aW9uIEEodCxlLHIsbixpLGEpe2Z1bmN0aW9uIG8odCxlLHIpe3RoaXMudGFyZ2V0PXQsdGhpcy50ZXh0dXJlPWUsdGhpcy5yZW5kZXJidWZmZXI9cjt2YXIgbj10PTA7ZT8odD1lLndpZHRoLG49ZS5oZWlnaHQpOnImJih0PXIud2lkdGgsbj1yLmhlaWdodCksdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PW59ZnVuY3Rpb24gcyh0KXt0JiYodC50ZXh0dXJlJiZ0LnRleHR1cmUuX3RleHR1cmUuZGVjUmVmKCksdC5yZW5kZXJidWZmZXImJnQucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIuZGVjUmVmKCkpfWZ1bmN0aW9uIGwodCxlLHIpe3QmJih0LnRleHR1cmU/dC50ZXh0dXJlLl90ZXh0dXJlLnJlZkNvdW50Kz0xOnQucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIucmVmQ291bnQrPTEpfWZ1bmN0aW9uIGMoZSxyKXtyJiYoci50ZXh0dXJlP3QuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsZSxyLnRhcmdldCxyLnRleHR1cmUuX3RleHR1cmUudGV4dHVyZSwwKTp0LmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLGUsMzYxNjEsci5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5yZW5kZXJidWZmZXIpKX1mdW5jdGlvbiB1KHQpe3ZhciBlPTM1NTMscj1udWxsLG49bnVsbCxpPXQ7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYoaT10LmRhdGEsInRhcmdldCJpbiB0JiYoZT0wfHQudGFyZ2V0KSksInRleHR1cmUyZCI9PT0odD1pLl9yZWdsVHlwZSl8fCJ0ZXh0dXJlQ3ViZSI9PT10P3I9aToicmVuZGVyYnVmZmVyIj09PXQmJihuPWksZT0zNjE2MSksbmV3IG8oZSxyLG4pfWZ1bmN0aW9uIGYodCxlLHIsYSxzKXtyZXR1cm4gcj8oKHQ9bi5jcmVhdGUyRCh7d2lkdGg6dCxoZWlnaHQ6ZSxmb3JtYXQ6YSx0eXBlOnN9KSkuX3RleHR1cmUucmVmQ291bnQ9MCxuZXcgbygzNTUzLHQsbnVsbCkpOigodD1pLmNyZWF0ZSh7d2lkdGg6dCxoZWlnaHQ6ZSxmb3JtYXQ6YX0pKS5fcmVuZGVyYnVmZmVyLnJlZkNvdW50PTAsbmV3IG8oMzYxNjEsbnVsbCx0KSl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdCYmKHQudGV4dHVyZXx8dC5yZW5kZXJidWZmZXIpfWZ1bmN0aW9uIHAodCxlLHIpe3QmJih0LnRleHR1cmU/dC50ZXh0dXJlLnJlc2l6ZShlLHIpOnQucmVuZGVyYnVmZmVyJiZ0LnJlbmRlcmJ1ZmZlci5yZXNpemUoZSxyKSx0LndpZHRoPWUsdC5oZWlnaHQ9cil9ZnVuY3Rpb24gZCgpe3RoaXMuaWQ9VCsrLGtbdGhpcy5pZF09dGhpcyx0aGlzLmZyYW1lYnVmZmVyPXQuY3JlYXRlRnJhbWVidWZmZXIoKSx0aGlzLmhlaWdodD10aGlzLndpZHRoPTAsdGhpcy5jb2xvckF0dGFjaG1lbnRzPVtdLHRoaXMuZGVwdGhTdGVuY2lsQXR0YWNobWVudD10aGlzLnN0ZW5jaWxBdHRhY2htZW50PXRoaXMuZGVwdGhBdHRhY2htZW50PW51bGx9ZnVuY3Rpb24gbSh0KXt0LmNvbG9yQXR0YWNobWVudHMuZm9yRWFjaChzKSxzKHQuZGVwdGhBdHRhY2htZW50KSxzKHQuc3RlbmNpbEF0dGFjaG1lbnQpLHModC5kZXB0aFN0ZW5jaWxBdHRhY2htZW50KX1mdW5jdGlvbiBnKGUpe3QuZGVsZXRlRnJhbWVidWZmZXIoZS5mcmFtZWJ1ZmZlciksZS5mcmFtZWJ1ZmZlcj1udWxsLGEuZnJhbWVidWZmZXJDb3VudC0tLGRlbGV0ZSBrW2UuaWRdfWZ1bmN0aW9uIHYoZSl7dmFyIG47dC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsZS5mcmFtZWJ1ZmZlcik7dmFyIGk9ZS5jb2xvckF0dGFjaG1lbnRzO2ZvcihuPTA7bjxpLmxlbmd0aDsrK24pYygzNjA2NCtuLGlbbl0pO2ZvcihuPWkubGVuZ3RoO248ci5tYXhDb2xvckF0dGFjaG1lbnRzOysrbil0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDY0K24sMzU1MyxudWxsLDApO3QuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzMzMDYsMzU1MyxudWxsLDApLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwOTYsMzU1MyxudWxsLDApLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYxMjgsMzU1MyxudWxsLDApLGMoMzYwOTYsZS5kZXB0aEF0dGFjaG1lbnQpLGMoMzYxMjgsZS5zdGVuY2lsQXR0YWNobWVudCksYygzMzMwNixlLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQpLHQuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cygzNjE2MCksdC5pc0NvbnRleHRMb3N0KCksdC5iaW5kRnJhbWVidWZmZXIoMzYxNjAseC5uZXh0P3gubmV4dC5mcmFtZWJ1ZmZlcjpudWxsKSx4LmN1cj14Lm5leHQsdC5nZXRFcnJvcigpfWZ1bmN0aW9uIHkodCxlKXtmdW5jdGlvbiByKHQsZSl7dmFyIGksYT0wLG89MCxzPSEwLGM9ITA7aT1udWxsO3ZhciBwPSEwLGQ9InJnYmEiLGc9InVpbnQ4Iix5PTEseD1udWxsLHc9bnVsbCxUPW51bGwsaz0hMTsibnVtYmVyIj09dHlwZW9mIHQ/KGE9MHx0LG89MHxlfHxhKTp0Pygic2hhcGUiaW4gdD8oYT0obz10LnNoYXBlKVswXSxvPW9bMV0pOigicmFkaXVzImluIHQmJihhPW89dC5yYWRpdXMpLCJ3aWR0aCJpbiB0JiYoYT10LndpZHRoKSwiaGVpZ2h0ImluIHQmJihvPXQuaGVpZ2h0KSksKCJjb2xvciJpbiB0fHwiY29sb3JzImluIHQpJiYoaT10LmNvbG9yfHx0LmNvbG9ycyxBcnJheS5pc0FycmF5KGkpKSxpfHwoImNvbG9yQ291bnQiaW4gdCYmKHk9MHx0LmNvbG9yQ291bnQpLCJjb2xvclRleHR1cmUiaW4gdCYmKHA9ISF0LmNvbG9yVGV4dHVyZSxkPSJyZ2JhNCIpLCJjb2xvclR5cGUiaW4gdCYmKGc9dC5jb2xvclR5cGUsIXApJiYoImhhbGYgZmxvYXQiPT09Z3x8ImZsb2F0MTYiPT09Zz9kPSJyZ2JhMTZmIjoiZmxvYXQiIT09ZyYmImZsb2F0MzIiIT09Z3x8KGQ9InJnYmEzMmYiKSksImNvbG9yRm9ybWF0ImluIHQmJihkPXQuY29sb3JGb3JtYXQsMDw9Yi5pbmRleE9mKGQpP3A9ITA6MDw9Xy5pbmRleE9mKGQpJiYocD0hMSkpKSwoImRlcHRoVGV4dHVyZSJpbiB0fHwiZGVwdGhTdGVuY2lsVGV4dHVyZSJpbiB0KSYmKGs9ISghdC5kZXB0aFRleHR1cmUmJiF0LmRlcHRoU3RlbmNpbFRleHR1cmUpKSwiZGVwdGgiaW4gdCYmKCJib29sZWFuIj09dHlwZW9mIHQuZGVwdGg/cz10LmRlcHRoOih4PXQuZGVwdGgsYz0hMSkpLCJzdGVuY2lsImluIHQmJigiYm9vbGVhbiI9PXR5cGVvZiB0LnN0ZW5jaWw/Yz10LnN0ZW5jaWw6KHc9dC5zdGVuY2lsLHM9ITEpKSwiZGVwdGhTdGVuY2lsImluIHQmJigiYm9vbGVhbiI9PXR5cGVvZiB0LmRlcHRoU3RlbmNpbD9zPWM9dC5kZXB0aFN0ZW5jaWw6KFQ9dC5kZXB0aFN0ZW5jaWwsYz1zPSExKSkpOmE9bz0xO3ZhciBBPW51bGwsTT1udWxsLFM9bnVsbCxFPW51bGw7aWYoQXJyYXkuaXNBcnJheShpKSlBPWkubWFwKHUpO2Vsc2UgaWYoaSlBPVt1KGkpXTtlbHNlIGZvcihBPUFycmF5KHkpLGk9MDtpPHk7KytpKUFbaV09ZihhLG8scCxkLGcpO2ZvcihhPWF8fEFbMF0ud2lkdGgsbz1vfHxBWzBdLmhlaWdodCx4P009dSh4KTpzJiYhYyYmKE09ZihhLG8saywiZGVwdGgiLCJ1aW50MzIiKSksdz9TPXUodyk6YyYmIXMmJihTPWYoYSxvLCExLCJzdGVuY2lsIiwidWludDgiKSksVD9FPXUoVCk6IXgmJiF3JiZjJiZzJiYoRT1mKGEsbyxrLCJkZXB0aCBzdGVuY2lsIiwiZGVwdGggc3RlbmNpbCIpKSxzPW51bGwsaT0wO2k8QS5sZW5ndGg7KytpKWwoQVtpXSksQVtpXSYmQVtpXS50ZXh0dXJlJiYoYz14dFtBW2ldLnRleHR1cmUuX3RleHR1cmUuZm9ybWF0XSpidFtBW2ldLnRleHR1cmUuX3RleHR1cmUudHlwZV0sbnVsbD09PXMmJihzPWMpKTtyZXR1cm4gbChNKSxsKFMpLGwoRSksbShuKSxuLndpZHRoPWEsbi5oZWlnaHQ9byxuLmNvbG9yQXR0YWNobWVudHM9QSxuLmRlcHRoQXR0YWNobWVudD1NLG4uc3RlbmNpbEF0dGFjaG1lbnQ9UyxuLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQ9RSxyLmNvbG9yPUEubWFwKGgpLHIuZGVwdGg9aChNKSxyLnN0ZW5jaWw9aChTKSxyLmRlcHRoU3RlbmNpbD1oKEUpLHIud2lkdGg9bi53aWR0aCxyLmhlaWdodD1uLmhlaWdodCx2KG4pLHJ9dmFyIG49bmV3IGQ7cmV0dXJuIGEuZnJhbWVidWZmZXJDb3VudCsrLHIodCxlKSxqKHIse3Jlc2l6ZTpmdW5jdGlvbih0LGUpe3ZhciBpPU1hdGgubWF4KDB8dCwxKSxhPU1hdGgubWF4KDB8ZXx8aSwxKTtpZihpPT09bi53aWR0aCYmYT09PW4uaGVpZ2h0KXJldHVybiByO2Zvcih2YXIgbz1uLmNvbG9yQXR0YWNobWVudHMscz0wO3M8by5sZW5ndGg7KytzKXAob1tzXSxpLGEpO3JldHVybiBwKG4uZGVwdGhBdHRhY2htZW50LGksYSkscChuLnN0ZW5jaWxBdHRhY2htZW50LGksYSkscChuLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQsaSxhKSxuLndpZHRoPXIud2lkdGg9aSxuLmhlaWdodD1yLmhlaWdodD1hLHYobikscn0sX3JlZ2xUeXBlOiJmcmFtZWJ1ZmZlciIsX2ZyYW1lYnVmZmVyOm4sZGVzdHJveTpmdW5jdGlvbigpe2cobiksbShuKX0sdXNlOmZ1bmN0aW9uKHQpe3guc2V0RkJPKHtmcmFtZWJ1ZmZlcjpyfSx0KX19KX12YXIgeD17Y3VyOm51bGwsbmV4dDpudWxsLGRpcnR5OiExLHNldEZCTzpudWxsfSxiPVsicmdiYSJdLF89WyJyZ2JhNCIsInJnYjU2NSIsInJnYjUgYTEiXTtlLmV4dF9zcmdiJiZfLnB1c2goInNyZ2JhIiksZS5leHRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQmJl8ucHVzaCgicmdiYTE2ZiIsInJnYjE2ZiIpLGUud2ViZ2xfY29sb3JfYnVmZmVyX2Zsb2F0JiZfLnB1c2goInJnYmEzMmYiKTt2YXIgdz1bInVpbnQ4Il07ZS5vZXNfdGV4dHVyZV9oYWxmX2Zsb2F0JiZ3LnB1c2goImhhbGYgZmxvYXQiLCJmbG9hdDE2IiksZS5vZXNfdGV4dHVyZV9mbG9hdCYmdy5wdXNoKCJmbG9hdCIsImZsb2F0MzIiKTt2YXIgVD0wLGs9e307cmV0dXJuIGooeCx7Z2V0RnJhbWVidWZmZXI6ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJiJmcmFtZWJ1ZmZlciI9PT10Ll9yZWdsVHlwZSYmKHQ9dC5fZnJhbWVidWZmZXIpaW5zdGFuY2VvZiBkP3Q6bnVsbH0sY3JlYXRlOnksY3JlYXRlQ3ViZTpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3ZhciBpLGE9e2NvbG9yOm51bGx9LG89MCxzPW51bGw7aT0icmdiYSI7dmFyIGw9InVpbnQ4IixjPTE7aWYoIm51bWJlciI9PXR5cGVvZiB0P289MHx0OnQ/KCJzaGFwZSJpbiB0P289dC5zaGFwZVswXTooInJhZGl1cyJpbiB0JiYobz0wfHQucmFkaXVzKSwid2lkdGgiaW4gdD9vPTB8dC53aWR0aDoiaGVpZ2h0ImluIHQmJihvPTB8dC5oZWlnaHQpKSwoImNvbG9yImluIHR8fCJjb2xvcnMiaW4gdCkmJihzPXQuY29sb3J8fHQuY29sb3JzLEFycmF5LmlzQXJyYXkocykpLHN8fCgiY29sb3JDb3VudCJpbiB0JiYoYz0wfHQuY29sb3JDb3VudCksImNvbG9yVHlwZSJpbiB0JiYobD10LmNvbG9yVHlwZSksImNvbG9yRm9ybWF0ImluIHQmJihpPXQuY29sb3JGb3JtYXQpKSwiZGVwdGgiaW4gdCYmKGEuZGVwdGg9dC5kZXB0aCksInN0ZW5jaWwiaW4gdCYmKGEuc3RlbmNpbD10LnN0ZW5jaWwpLCJkZXB0aFN0ZW5jaWwiaW4gdCYmKGEuZGVwdGhTdGVuY2lsPXQuZGVwdGhTdGVuY2lsKSk6bz0xLHMpaWYoQXJyYXkuaXNBcnJheShzKSlmb3IodD1bXSxpPTA7aTxzLmxlbmd0aDsrK2kpdFtpXT1zW2ldO2Vsc2UgdD1bc107ZWxzZSBmb3IodD1BcnJheShjKSxzPXtyYWRpdXM6byxmb3JtYXQ6aSx0eXBlOmx9LGk9MDtpPGM7KytpKXRbaV09bi5jcmVhdGVDdWJlKHMpO2ZvcihhLmNvbG9yPUFycmF5KHQubGVuZ3RoKSxpPTA7aTx0Lmxlbmd0aDsrK2kpYz10W2ldLG89b3x8Yy53aWR0aCxhLmNvbG9yW2ldPXt0YXJnZXQ6MzQwNjksZGF0YTp0W2ldfTtmb3IoaT0wOzY+aTsrK2kpe2ZvcihjPTA7Yzx0Lmxlbmd0aDsrK2MpYS5jb2xvcltjXS50YXJnZXQ9MzQwNjkraTswPGkmJihhLmRlcHRoPXJbMF0uZGVwdGgsYS5zdGVuY2lsPXJbMF0uc3RlbmNpbCxhLmRlcHRoU3RlbmNpbD1yWzBdLmRlcHRoU3RlbmNpbCkscltpXT9yW2ldKGEpOnJbaV09eShhKX1yZXR1cm4gaihlLHt3aWR0aDpvLGhlaWdodDpvLGNvbG9yOnR9KX12YXIgcj1BcnJheSg2KTtyZXR1cm4gZSh0KSxqKGUse2ZhY2VzOnIscmVzaXplOmZ1bmN0aW9uKHQpe3ZhciBuPTB8dDtpZihuPT09ZS53aWR0aClyZXR1cm4gZTt2YXIgaT1lLmNvbG9yO2Zvcih0PTA7dDxpLmxlbmd0aDsrK3QpaVt0XS5yZXNpemUobik7Zm9yKHQ9MDs2PnQ7Kyt0KXJbdF0ucmVzaXplKG4pO3JldHVybiBlLndpZHRoPWUuaGVpZ2h0PW4sZX0sX3JlZ2xUeXBlOiJmcmFtZWJ1ZmZlckN1YmUiLGRlc3Ryb3k6ZnVuY3Rpb24oKXtyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSgpfSkpfX0pfSxjbGVhcjpmdW5jdGlvbigpe1goaykuZm9yRWFjaChnKX0scmVzdG9yZTpmdW5jdGlvbigpe3guY3VyPW51bGwseC5uZXh0PW51bGwseC5kaXJ0eT0hMCxYKGspLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuZnJhbWVidWZmZXI9dC5jcmVhdGVGcmFtZWJ1ZmZlcigpLHYoZSl9KSl9fSl9ZnVuY3Rpb24gTSgpe3RoaXMudz10aGlzLno9dGhpcy55PXRoaXMueD10aGlzLnN0YXRlPTAsdGhpcy5idWZmZXI9bnVsbCx0aGlzLnNpemU9MCx0aGlzLm5vcm1hbGl6ZWQ9ITEsdGhpcy50eXBlPTUxMjYsdGhpcy5kaXZpc29yPXRoaXMuc3RyaWRlPXRoaXMub2Zmc2V0PTB9ZnVuY3Rpb24gUyh0LGUscixuLGksYSxvKXtmdW5jdGlvbiBzKCl7dGhpcy5pZD0rK2YsdGhpcy5hdHRyaWJ1dGVzPVtdLHRoaXMuZWxlbWVudHM9bnVsbCx0aGlzLm93bnNFbGVtZW50cz0hMSx0aGlzLm9mZnNldD10aGlzLmNvdW50PTAsdGhpcy5pbnN0YW5jZXM9LTEsdGhpcy5wcmltaXRpdmU9NDt2YXIgdD1lLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0O3RoaXMudmFvPXQ/dC5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOm51bGwsaFt0aGlzLmlkXT10aGlzLHRoaXMuYnVmZmVycz1bXX12YXIgYz1yLm1heEF0dHJpYnV0ZXMsdT1BcnJheShjKTtmb3Iocj0wO3I8YzsrK3IpdVtyXT1uZXcgTTt2YXIgZj0wLGg9e30scD17UmVjb3JkOk0sc2NvcGU6e30sc3RhdGU6dSxjdXJyZW50VkFPOm51bGwsdGFyZ2V0VkFPOm51bGwscmVzdG9yZTplLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0P2Z1bmN0aW9uKCl7ZS5vZXNfdmVydGV4X2FycmF5X29iamVjdCYmWChoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnJlZnJlc2goKX0pKX06ZnVuY3Rpb24oKXt9LGNyZWF0ZVZBTzpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3ZhciBuO0FycmF5LmlzQXJyYXkodCk/KG49dCxyLmVsZW1lbnRzJiZyLm93bnNFbGVtZW50cyYmci5lbGVtZW50cy5kZXN0cm95KCksci5lbGVtZW50cz1udWxsLHIub3duc0VsZW1lbnRzPSExLHIub2Zmc2V0PTAsci5jb3VudD0wLHIuaW5zdGFuY2VzPS0xLHIucHJpbWl0aXZlPTQpOih0LmVsZW1lbnRzPyhuPXQuZWxlbWVudHMsci5vd25zRWxlbWVudHM/KCJmdW5jdGlvbiI9PXR5cGVvZiBuJiYiZWxlbWVudHMiPT09bi5fcmVnbFR5cGU/ci5lbGVtZW50cy5kZXN0cm95KCk6ci5lbGVtZW50cyhuKSxyLm93bnNFbGVtZW50cz0hMSk6YS5nZXRFbGVtZW50cyh0LmVsZW1lbnRzKT8oci5lbGVtZW50cz10LmVsZW1lbnRzLHIub3duc0VsZW1lbnRzPSExKTooci5lbGVtZW50cz1hLmNyZWF0ZSh0LmVsZW1lbnRzKSxyLm93bnNFbGVtZW50cz0hMCkpOihyLmVsZW1lbnRzPW51bGwsci5vd25zRWxlbWVudHM9ITEpLG49dC5hdHRyaWJ1dGVzLHIub2Zmc2V0PTAsci5jb3VudD0tMSxyLmluc3RhbmNlcz0tMSxyLnByaW1pdGl2ZT00LHIuZWxlbWVudHMmJihyLmNvdW50PXIuZWxlbWVudHMuX2VsZW1lbnRzLnZlcnRDb3VudCxyLnByaW1pdGl2ZT1yLmVsZW1lbnRzLl9lbGVtZW50cy5wcmltVHlwZSksIm9mZnNldCJpbiB0JiYoci5vZmZzZXQ9MHx0Lm9mZnNldCksImNvdW50ImluIHQmJihyLmNvdW50PTB8dC5jb3VudCksImluc3RhbmNlcyJpbiB0JiYoci5pbnN0YW5jZXM9MHx0Lmluc3RhbmNlcyksInByaW1pdGl2ZSJpbiB0JiYoci5wcmltaXRpdmU9cnRbdC5wcmltaXRpdmVdKSksdD17fTt2YXIgbz1yLmF0dHJpYnV0ZXM7by5sZW5ndGg9bi5sZW5ndGg7Zm9yKHZhciBzPTA7czxuLmxlbmd0aDsrK3Mpe3ZhciBjLHU9bltzXSxmPW9bc109bmV3IE0saD11LmRhdGF8fHU7aWYoQXJyYXkuaXNBcnJheShoKXx8VyhoKXx8bChoKSlyLmJ1ZmZlcnNbc10mJihjPXIuYnVmZmVyc1tzXSxXKGgpJiZjLl9idWZmZXIuYnl0ZUxlbmd0aD49aC5ieXRlTGVuZ3RoP2Muc3ViZGF0YShoKTooYy5kZXN0cm95KCksci5idWZmZXJzW3NdPW51bGwpKSxyLmJ1ZmZlcnNbc118fChjPXIuYnVmZmVyc1tzXT1pLmNyZWF0ZSh1LDM0OTYyLCExLCEwKSksZi5idWZmZXI9aS5nZXRCdWZmZXIoYyksZi5zaXplPTB8Zi5idWZmZXIuZGltZW5zaW9uLGYubm9ybWFsaXplZD0hMSxmLnR5cGU9Zi5idWZmZXIuZHR5cGUsZi5vZmZzZXQ9MCxmLnN0cmlkZT0wLGYuZGl2aXNvcj0wLGYuc3RhdGU9MSx0W3NdPTE7ZWxzZSBpLmdldEJ1ZmZlcih1KT8oZi5idWZmZXI9aS5nZXRCdWZmZXIodSksZi5zaXplPTB8Zi5idWZmZXIuZGltZW5zaW9uLGYubm9ybWFsaXplZD0hMSxmLnR5cGU9Zi5idWZmZXIuZHR5cGUsZi5vZmZzZXQ9MCxmLnN0cmlkZT0wLGYuZGl2aXNvcj0wLGYuc3RhdGU9MSk6aS5nZXRCdWZmZXIodS5idWZmZXIpPyhmLmJ1ZmZlcj1pLmdldEJ1ZmZlcih1LmJ1ZmZlciksZi5zaXplPTB8KCt1LnNpemV8fGYuYnVmZmVyLmRpbWVuc2lvbiksZi5ub3JtYWxpemVkPSEhdS5ub3JtYWxpemVkfHwhMSxmLnR5cGU9InR5cGUiaW4gdT9LW3UudHlwZV06Zi5idWZmZXIuZHR5cGUsZi5vZmZzZXQ9MHwodS5vZmZzZXR8fDApLGYuc3RyaWRlPTB8KHUuc3RyaWRlfHwwKSxmLmRpdmlzb3I9MHwodS5kaXZpc29yfHwwKSxmLnN0YXRlPTEpOiJ4ImluIHUmJihmLng9K3UueHx8MCxmLnk9K3UueXx8MCxmLno9K3Uuenx8MCxmLnc9K3Uud3x8MCxmLnN0YXRlPTIpfWZvcihjPTA7YzxyLmJ1ZmZlcnMubGVuZ3RoOysrYykhdFtjXSYmci5idWZmZXJzW2NdJiYoci5idWZmZXJzW2NdLmRlc3Ryb3koKSxyLmJ1ZmZlcnNbY109bnVsbCk7cmV0dXJuIHIucmVmcmVzaCgpLGV9dmFyIHI9bmV3IHM7cmV0dXJuIG4udmFvQ291bnQrPTEsZS5kZXN0cm95PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxyLmJ1ZmZlcnMubGVuZ3RoOysrdClyLmJ1ZmZlcnNbdF0mJnIuYnVmZmVyc1t0XS5kZXN0cm95KCk7ci5idWZmZXJzLmxlbmd0aD0wLHIub3duc0VsZW1lbnRzJiYoci5lbGVtZW50cy5kZXN0cm95KCksci5lbGVtZW50cz1udWxsLHIub3duc0VsZW1lbnRzPSExKSxyLmRlc3Ryb3koKX0sZS5fdmFvPXIsZS5fcmVnbFR5cGU9InZhbyIsZSh0KX0sZ2V0VkFPOmZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0Ll92YW8/dC5fdmFvOm51bGx9LGRlc3Ryb3lCdWZmZXI6ZnVuY3Rpb24oZSl7Zm9yKHZhciByPTA7cjx1Lmxlbmd0aDsrK3Ipe3ZhciBuPXVbcl07bi5idWZmZXI9PT1lJiYodC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkociksbi5idWZmZXI9bnVsbCl9fSxzZXRWQU86ZS5vZXNfdmVydGV4X2FycmF5X29iamVjdD9mdW5jdGlvbih0KXtpZih0IT09cC5jdXJyZW50VkFPKXt2YXIgcj1lLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0O3Q/ci5iaW5kVmVydGV4QXJyYXlPRVModC52YW8pOnIuYmluZFZlcnRleEFycmF5T0VTKG51bGwpLHAuY3VycmVudFZBTz10fX06ZnVuY3Rpb24ocil7aWYociE9PXAuY3VycmVudFZBTyl7aWYocilyLmJpbmRBdHRycygpO2Vsc2V7Zm9yKHZhciBuPWUuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyxpPTA7aTx1Lmxlbmd0aDsrK2kpe3ZhciBhPXVbaV07YS5idWZmZXI/KHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSksYS5idWZmZXIuYmluZCgpLHQudmVydGV4QXR0cmliUG9pbnRlcihpLGEuc2l6ZSxhLnR5cGUsYS5ub3JtYWxpemVkLGEuc3RyaWRlLGEub2ZmZnNldCksbiYmYS5kaXZpc29yJiZuLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShpLGEuZGl2aXNvcikpOih0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKSx0LnZlcnRleEF0dHJpYjRmKGksYS54LGEueSxhLnosYS53KSl9by5lbGVtZW50cz90LmJpbmRCdWZmZXIoMzQ5NjMsby5lbGVtZW50cy5idWZmZXIuYnVmZmVyKTp0LmJpbmRCdWZmZXIoMzQ5NjMsbnVsbCl9cC5jdXJyZW50VkFPPXJ9fSxjbGVhcjplLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0P2Z1bmN0aW9uKCl7WChoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmRlc3Ryb3koKX0pKX06ZnVuY3Rpb24oKXt9fTtyZXR1cm4gcy5wcm90b3R5cGUuYmluZEF0dHJzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPWUuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyxuPXRoaXMuYXR0cmlidXRlcyxpPTA7aTxuLmxlbmd0aDsrK2kpe3ZhciBvPW5baV07by5idWZmZXI/KHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSksdC5iaW5kQnVmZmVyKDM0OTYyLG8uYnVmZmVyLmJ1ZmZlciksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGksby5zaXplLG8udHlwZSxvLm5vcm1hbGl6ZWQsby5zdHJpZGUsby5vZmZzZXQpLHImJm8uZGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaSxvLmRpdmlzb3IpKToodC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSksdC52ZXJ0ZXhBdHRyaWI0ZihpLG8ueCxvLnksby56LG8udykpfWZvcihyPW4ubGVuZ3RoO3I8YzsrK3IpdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocik7KHI9YS5nZXRFbGVtZW50cyh0aGlzLmVsZW1lbnRzKSk/dC5iaW5kQnVmZmVyKDM0OTYzLHIuYnVmZmVyLmJ1ZmZlcik6dC5iaW5kQnVmZmVyKDM0OTYzLG51bGwpfSxzLnByb3RvdHlwZS5yZWZyZXNoPWZ1bmN0aW9uKCl7dmFyIHQ9ZS5vZXNfdmVydGV4X2FycmF5X29iamVjdDt0JiYodC5iaW5kVmVydGV4QXJyYXlPRVModGhpcy52YW8pLHRoaXMuYmluZEF0dHJzKCkscC5jdXJyZW50VkFPPW51bGwsdC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCkpfSxzLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7aWYodGhpcy52YW8pe3ZhciB0PWUub2VzX3ZlcnRleF9hcnJheV9vYmplY3Q7dGhpcz09PXAuY3VycmVudFZBTyYmKHAuY3VycmVudFZBTz1udWxsLHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpKSx0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHRoaXMudmFvKSx0aGlzLnZhbz1udWxsfXRoaXMub3duc0VsZW1lbnRzJiYodGhpcy5lbGVtZW50cy5kZXN0cm95KCksdGhpcy5lbGVtZW50cz1udWxsLHRoaXMub3duc0VsZW1lbnRzPSExKSxoW3RoaXMuaWRdJiYoZGVsZXRlIGhbdGhpcy5pZF0sLS1uLnZhb0NvdW50KX0scH1mdW5jdGlvbiBFKHQsZSxyLG4pe2Z1bmN0aW9uIGkodCxlLHIsbil7dGhpcy5uYW1lPXQsdGhpcy5pZD1lLHRoaXMubG9jYXRpb249cix0aGlzLmluZm89bn1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYodFtyXS5pZD09PWUuaWQpcmV0dXJuIHZvaWQodFtyXS5sb2NhdGlvbj1lLmxvY2F0aW9uKTt0LnB1c2goZSl9ZnVuY3Rpb24gbyhyLG4saSl7aWYoIShvPShpPTM1NjMyPT09cj9jOnUpW25dKSl7dmFyIGE9ZS5zdHIobiksbz10LmNyZWF0ZVNoYWRlcihyKTt0LnNoYWRlclNvdXJjZShvLGEpLHQuY29tcGlsZVNoYWRlcihvKSxpW25dPW99cmV0dXJuIG99ZnVuY3Rpb24gcyh0LGUpe3RoaXMuaWQ9cCsrLHRoaXMuZnJhZ0lkPXQsdGhpcy52ZXJ0SWQ9ZSx0aGlzLnByb2dyYW09bnVsbCx0aGlzLnVuaWZvcm1zPVtdLHRoaXMuYXR0cmlidXRlcz1bXSx0aGlzLnJlZkNvdW50PTEsbi5wcm9maWxlJiYodGhpcy5zdGF0cz17dW5pZm9ybXNDb3VudDowLGF0dHJpYnV0ZXNDb3VudDowfSl9ZnVuY3Rpb24gbChyLHMsbCl7dmFyIGM7Yz1vKDM1NjMyLHIuZnJhZ0lkKTt2YXIgdT1vKDM1NjMzLHIudmVydElkKTtpZihzPXIucHJvZ3JhbT10LmNyZWF0ZVByb2dyYW0oKSx0LmF0dGFjaFNoYWRlcihzLGMpLHQuYXR0YWNoU2hhZGVyKHMsdSksbClmb3IoYz0wO2M8bC5sZW5ndGg7KytjKXU9bFtjXSx0LmJpbmRBdHRyaWJMb2NhdGlvbihzLHVbMF0sdVsxXSk7dC5saW5rUHJvZ3JhbShzKSx1PXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihzLDM1NzE4KSxuLnByb2ZpbGUmJihyLnN0YXRzLnVuaWZvcm1zQ291bnQ9dSk7dmFyIGY9ci51bmlmb3Jtcztmb3IoYz0wO2M8dTsrK2MpaWYobD10LmdldEFjdGl2ZVVuaWZvcm0ocyxjKSl7aWYoMTxsLnNpemUpZm9yKHZhciBoPTA7aDxsLnNpemU7KytoKXt2YXIgcD1sLm5hbWUucmVwbGFjZSgiWzBdIiwiWyIraCsiXSIpO2EoZixuZXcgaShwLGUuaWQocCksdC5nZXRVbmlmb3JtTG9jYXRpb24ocyxwKSxsKSl9aD1sLm5hbWUsMTxsLnNpemUmJihoPWgucmVwbGFjZSgiWzBdIiwiIikpLGEoZixuZXcgaShoLGUuaWQoaCksdC5nZXRVbmlmb3JtTG9jYXRpb24ocyxoKSxsKSl9Zm9yKHU9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHMsMzU3MjEpLG4ucHJvZmlsZSYmKHIuc3RhdHMuYXR0cmlidXRlc0NvdW50PXUpLHI9ci5hdHRyaWJ1dGVzLGM9MDtjPHU7KytjKShsPXQuZ2V0QWN0aXZlQXR0cmliKHMsYykpJiZhKHIsbmV3IGkobC5uYW1lLGUuaWQobC5uYW1lKSx0LmdldEF0dHJpYkxvY2F0aW9uKHMsbC5uYW1lKSxsKSl9dmFyIGM9e30sdT17fSxmPXt9LGg9W10scD0wO3JldHVybiBuLnByb2ZpbGUmJihyLmdldE1heFVuaWZvcm1zQ291bnQ9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBoLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Uuc3RhdHMudW5pZm9ybXNDb3VudD50JiYodD1lLnN0YXRzLnVuaWZvcm1zQ291bnQpfSkpLHR9LHIuZ2V0TWF4QXR0cmlidXRlc0NvdW50PWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gaC5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnN0YXRzLmF0dHJpYnV0ZXNDb3VudD50JiYodD1lLnN0YXRzLmF0dHJpYnV0ZXNDb3VudCl9KSksdH0pLHtjbGVhcjpmdW5jdGlvbigpe3ZhciBlPXQuZGVsZXRlU2hhZGVyLmJpbmQodCk7WChjKS5mb3JFYWNoKGUpLGM9e30sWCh1KS5mb3JFYWNoKGUpLHU9e30saC5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmRlbGV0ZVByb2dyYW0oZS5wcm9ncmFtKX0pKSxoLmxlbmd0aD0wLGY9e30sci5zaGFkZXJDb3VudD0wfSxwcm9ncmFtOmZ1bmN0aW9uKGUsbixpLGEpe3ZhciBvPWZbbl07b3x8KG89ZltuXT17fSk7dmFyIHA9b1tlXTtpZihwJiYocC5yZWZDb3VudCsrLCFhKSlyZXR1cm4gcDt2YXIgZD1uZXcgcyhuLGUpO3JldHVybiByLnNoYWRlckNvdW50KyssbChkLGksYSkscHx8KG9bZV09ZCksaC5wdXNoKGQpLGooZCx7ZGVzdHJveTpmdW5jdGlvbigpe2lmKGQucmVmQ291bnQtLSwwPj1kLnJlZkNvdW50KXt0LmRlbGV0ZVByb2dyYW0oZC5wcm9ncmFtKTt2YXIgZT1oLmluZGV4T2YoZCk7aC5zcGxpY2UoZSwxKSxyLnNoYWRlckNvdW50LS19MD49b1tkLnZlcnRJZF0ucmVmQ291bnQmJih0LmRlbGV0ZVNoYWRlcih1W2QudmVydElkXSksZGVsZXRlIHVbZC52ZXJ0SWRdLGRlbGV0ZSBmW2QuZnJhZ0lkXVtkLnZlcnRJZF0pLE9iamVjdC5rZXlzKGZbZC5mcmFnSWRdKS5sZW5ndGh8fCh0LmRlbGV0ZVNoYWRlcihjW2QuZnJhZ0lkXSksZGVsZXRlIGNbZC5mcmFnSWRdLGRlbGV0ZSBmW2QuZnJhZ0lkXSl9fSl9LHJlc3RvcmU6ZnVuY3Rpb24oKXtjPXt9LHU9e307Zm9yKHZhciB0PTA7dDxoLmxlbmd0aDsrK3QpbChoW3RdLG51bGwsaFt0XS5hdHRyaWJ1dGVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW3QubG9jYXRpb24sdC5uYW1lXX0pKSl9LHNoYWRlcjpvLGZyYWc6LTEsdmVydDotMX19ZnVuY3Rpb24gTCh0LGUscixuLGksYSxvKXtmdW5jdGlvbiBzKGkpe3ZhciBhO2E9bnVsbD09PWUubmV4dD81MTIxOmUubmV4dC5jb2xvckF0dGFjaG1lbnRzWzBdLnRleHR1cmUuX3RleHR1cmUudHlwZTt2YXIgbz0wLHM9MCxsPW4uZnJhbWVidWZmZXJXaWR0aCxjPW4uZnJhbWVidWZmZXJIZWlnaHQsdT1udWxsO3JldHVybiBXKGkpP3U9aTppJiYobz0wfGkueCxzPTB8aS55LGw9MHwoaS53aWR0aHx8bi5mcmFtZWJ1ZmZlcldpZHRoLW8pLGM9MHwoaS5oZWlnaHR8fG4uZnJhbWVidWZmZXJIZWlnaHQtcyksdT1pLmRhdGF8fG51bGwpLHIoKSxpPWwqYyo0LHV8fCg1MTIxPT09YT91PW5ldyBVaW50OEFycmF5KGkpOjUxMjY9PT1hJiYodT11fHxuZXcgRmxvYXQzMkFycmF5KGkpKSksdC5waXhlbFN0b3JlaSgzMzMzLDQpLHQucmVhZFBpeGVscyhvLHMsbCxjLDY0MDgsYSx1KSx1fXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZyYW1lYnVmZmVyImluIHQ/ZnVuY3Rpb24odCl7dmFyIHI7cmV0dXJuIGUuc2V0RkJPKHtmcmFtZWJ1ZmZlcjp0LmZyYW1lYnVmZmVyfSwoZnVuY3Rpb24oKXtyPXModCl9KSkscn0odCk6cyh0KX19ZnVuY3Rpb24gQyh0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCl9ZnVuY3Rpb24gUCh0KXtyZXR1cm4gQyh0KS5qb2luKCIiKX1mdW5jdGlvbiBJKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHxXKHQpfHxsKHQpfWZ1bmN0aW9uIE8odCl7cmV0dXJuIHQuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4idmlld3BvcnQiPT09dD8tMToidmlld3BvcnQiPT09ZT8xOnQ8ZT8tMToxfSkpfWZ1bmN0aW9uIHoodCxlLHIsbil7dGhpcy50aGlzRGVwPXQsdGhpcy5jb250ZXh0RGVwPWUsdGhpcy5wcm9wRGVwPXIsdGhpcy5hcHBlbmQ9bn1mdW5jdGlvbiBEKHQpe3JldHVybiB0JiYhKHQudGhpc0RlcHx8dC5jb250ZXh0RGVwfHx0LnByb3BEZXApfWZ1bmN0aW9uIFIodCl7cmV0dXJuIG5ldyB6KCExLCExLCExLHQpfWZ1bmN0aW9uIEYodCxlKXt2YXIgcj10LnR5cGU7aWYoMD09PXIpcmV0dXJuIG5ldyB6KCEwLDE8PShyPXQuZGF0YS5sZW5ndGgpLDI8PXIsZSk7aWYoND09PXIpcmV0dXJuIG5ldyB6KChyPXQuZGF0YSkudGhpc0RlcCxyLmNvbnRleHREZXAsci5wcm9wRGVwLGUpO2lmKDU9PT1yKXJldHVybiBuZXcgeighMSwhMSwhMSxlKTtpZig2PT09cil7Zm9yKHZhciBuPXI9ITEsaT0hMSxhPTA7YTx0LmRhdGEubGVuZ3RoOysrYSl7dmFyIG89dC5kYXRhW2FdOzE9PT1vLnR5cGU/aT0hMDoyPT09by50eXBlP249ITA6Mz09PW8udHlwZT9yPSEwOjA9PT1vLnR5cGU/KHI9ITAsMTw9KG89by5kYXRhKSYmKG49ITApLDI8PW8mJihpPSEwKSk6ND09PW8udHlwZSYmKHI9cnx8by5kYXRhLnRoaXNEZXAsbj1ufHxvLmRhdGEuY29udGV4dERlcCxpPWl8fG8uZGF0YS5wcm9wRGVwKX1yZXR1cm4gbmV3IHoocixuLGksZSl9cmV0dXJuIG5ldyB6KDM9PT1yLDI9PT1yLDE9PT1yLGUpfWZ1bmN0aW9uIEIodCxlLHIsbixpLG8scyxsLGMsdSxmLGgscCxkLG0pe2Z1bmN0aW9uIHYodCl7cmV0dXJuIHQucmVwbGFjZSgiLiIsIl8iKX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj12KHQpO290LnB1c2godCksYXRbbl09aXRbbl09ISFyLHN0W25dPWV9ZnVuY3Rpb24geCh0LGUscil7dmFyIG49dih0KTtvdC5wdXNoKHQpLEFycmF5LmlzQXJyYXkocik/KGl0W25dPXIuc2xpY2UoKSxhdFtuXT1yLnNsaWNlKCkpOml0W25dPWF0W25dPXIsbHRbbl09ZX1mdW5jdGlvbiBiKCl7dmFyIHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIHQ9W10sZT1bXTtyZXR1cm4gaigoZnVuY3Rpb24oKXt0LnB1c2guYXBwbHkodCxDKGFyZ3VtZW50cykpfSkse2RlZjpmdW5jdGlvbigpe3ZhciBuPSJ2IityKys7cmV0dXJuIGUucHVzaChuKSwwPGFyZ3VtZW50cy5sZW5ndGgmJih0LnB1c2gobiwiPSIpLHQucHVzaC5hcHBseSh0LEMoYXJndW1lbnRzKSksdC5wdXNoKCI7IikpLG59LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIFAoWzA8ZS5sZW5ndGg/InZhciAiK2Uuam9pbigiLCIpKyI7IjoiIixQKHQpXSl9fSl9ZnVuY3Rpb24gZSgpe2Z1bmN0aW9uIGUodCxlKXtuKHQsZSwiPSIsci5kZWYodCxlKSwiOyIpfXZhciByPXQoKSxuPXQoKSxpPXIudG9TdHJpbmcsYT1uLnRvU3RyaW5nO3JldHVybiBqKChmdW5jdGlvbigpe3IuYXBwbHkocixDKGFyZ3VtZW50cykpfSkse2RlZjpyLmRlZixlbnRyeTpyLGV4aXQ6bixzYXZlOmUsc2V0OmZ1bmN0aW9uKHQsbixpKXtlKHQsbikscih0LG4sIj0iLGksIjsiKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gaSgpK2EoKX19KX12YXIgcj0wLG49W10saT1bXSxhPXQoKSxvPXt9O3JldHVybntnbG9iYWw6YSxsaW5rOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8aS5sZW5ndGg7KytlKWlmKGlbZV09PT10KXJldHVybiBuW2VdO3JldHVybiBlPSJnIityKyssbi5wdXNoKGUpLGkucHVzaCh0KSxlfSxibG9jazp0LHByb2M6ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKCl7dmFyIHQ9ImEiK2kubGVuZ3RoO3JldHVybiBpLnB1c2godCksdH12YXIgaT1bXTtyPXJ8fDA7Zm9yKHZhciBhPTA7YTxyOysrYSluKCk7dmFyIHM9KGE9ZSgpKS50b1N0cmluZztyZXR1cm4gb1t0XT1qKGEse2FyZzpuLHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIFAoWyJmdW5jdGlvbigiLGkuam9pbigpLCIpeyIscygpLCJ9Il0pfX0pfSxzY29wZTplLGNvbmQ6ZnVuY3Rpb24oKXt2YXIgdD1QKGFyZ3VtZW50cykscj1lKCksbj1lKCksaT1yLnRvU3RyaW5nLGE9bi50b1N0cmluZztyZXR1cm4gaihyLHt0aGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkocixDKGFyZ3VtZW50cykpLHRoaXN9LGVsc2U6ZnVuY3Rpb24oKXtyZXR1cm4gbi5hcHBseShuLEMoYXJndW1lbnRzKSksdGhpc30sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT1hKCk7cmV0dXJuIGUmJihlPSJlbHNleyIrZSsifSIpLFAoWyJpZigiLHQsIil7IixpKCksIn0iLGVdKX19KX0sY29tcGlsZTpmdW5jdGlvbigpe3ZhciB0PVsnInVzZSBzdHJpY3QiOycsYSwicmV0dXJuIHsiXTtPYmplY3Qua2V5cyhvKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnB1c2goJyInLGUsJyI6JyxvW2VdLnRvU3RyaW5nKCksIiwiKX0pKSx0LnB1c2goIn0iKTt2YXIgZT1QKHQpLnJlcGxhY2UoLzsvZywiO1xuIikucmVwbGFjZSgvfS9nLCJ9XG4iKS5yZXBsYWNlKC97L2csIntcbiIpO3JldHVybiBGdW5jdGlvbi5hcHBseShudWxsLG4uY29uY2F0KGUpKS5hcHBseShudWxsLGkpfX19KCkscj10Lmxpbmssbj10Lmdsb2JhbDt0LmlkPWZ0KyssdC5iYXRjaElkPSIwIjt2YXIgaT1yKGN0KSxhPXQuc2hhcmVkPXtwcm9wczoiYTAifTtPYmplY3Qua2V5cyhjdCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7YVt0XT1uLmRlZihpLCIuIix0KX0pKTt2YXIgbz10Lm5leHQ9e30scz10LmN1cnJlbnQ9e307T2JqZWN0LmtleXMobHQpLmZvckVhY2goKGZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkoaXRbdF0pJiYob1t0XT1uLmRlZihhLm5leHQsIi4iLHQpLHNbdF09bi5kZWYoYS5jdXJyZW50LCIuIix0KSl9KSk7dmFyIGw9dC5jb25zdGFudHM9e307T2JqZWN0LmtleXModXQpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2xbdF09bi5kZWYoSlNPTi5zdHJpbmdpZnkodXRbdF0pKX0pKSx0Lmludm9rZT1mdW5jdGlvbihlLG4pe3N3aXRjaChuLnR5cGUpe2Nhc2UgMDp2YXIgaT1bInRoaXMiLGEuY29udGV4dCxhLnByb3BzLHQuYmF0Y2hJZF07cmV0dXJuIGUuZGVmKHIobi5kYXRhKSwiLmNhbGwoIixpLnNsaWNlKDAsTWF0aC5tYXgobi5kYXRhLmxlbmd0aCsxLDQpKSwiKSIpO2Nhc2UgMTpyZXR1cm4gZS5kZWYoYS5wcm9wcyxuLmRhdGEpO2Nhc2UgMjpyZXR1cm4gZS5kZWYoYS5jb250ZXh0LG4uZGF0YSk7Y2FzZSAzOnJldHVybiBlLmRlZigidGhpcyIsbi5kYXRhKTtjYXNlIDQ6cmV0dXJuIG4uZGF0YS5hcHBlbmQodCxlKSxuLmRhdGEucmVmO2Nhc2UgNTpyZXR1cm4gbi5kYXRhLnRvU3RyaW5nKCk7Y2FzZSA2OnJldHVybiBuLmRhdGEubWFwKChmdW5jdGlvbihyKXtyZXR1cm4gdC5pbnZva2UoZSxyKX0pKX19LHQuYXR0cmliQ2FjaGU9e307dmFyIGM9e307cmV0dXJuIHQuc2NvcGVBdHRyaWI9ZnVuY3Rpb24odCl7aWYoKHQ9ZS5pZCh0KSlpbiBjKXJldHVybiBjW3RdO3ZhciBuPXUuc2NvcGVbdF07cmV0dXJuIG58fChuPXUuc2NvcGVbdF09bmV3IFEpLGNbdF09cihuKX0sdH1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9dC5zdGF0aWMsbj10LmR5bmFtaWM7aWYoImZyYW1lYnVmZmVyImluIHIpe3ZhciBpPXIuZnJhbWVidWZmZXI7cmV0dXJuIGk/KGk9bC5nZXRGcmFtZWJ1ZmZlcihpKSxSKChmdW5jdGlvbih0LGUpe3ZhciByPXQubGluayhpKSxuPXQuc2hhcmVkO3JldHVybiBlLnNldChuLmZyYW1lYnVmZmVyLCIubmV4dCIsciksbj1uLmNvbnRleHQsZS5zZXQobiwiLmZyYW1lYnVmZmVyV2lkdGgiLHIrIi53aWR0aCIpLGUuc2V0KG4sIi5mcmFtZWJ1ZmZlckhlaWdodCIscisiLmhlaWdodCIpLHJ9KSkpOlIoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zaGFyZWQ7cmV0dXJuIGUuc2V0KHIuZnJhbWVidWZmZXIsIi5uZXh0IiwibnVsbCIpLHI9ci5jb250ZXh0LGUuc2V0KHIsIi5mcmFtZWJ1ZmZlcldpZHRoIixyKyIuZHJhd2luZ0J1ZmZlcldpZHRoIiksZS5zZXQociwiLmZyYW1lYnVmZmVySGVpZ2h0IixyKyIuZHJhd2luZ0J1ZmZlckhlaWdodCIpLCJudWxsIn0pKX1pZigiZnJhbWVidWZmZXIiaW4gbil7dmFyIGE9bi5mcmFtZWJ1ZmZlcjtyZXR1cm4gRihhLChmdW5jdGlvbih0LGUpe3ZhciByPXQuaW52b2tlKGUsYSksbj10LnNoYXJlZCxpPW4uZnJhbWVidWZmZXI7cj1lLmRlZihpLCIuZ2V0RnJhbWVidWZmZXIoIixyLCIpIik7cmV0dXJuIGUuc2V0KGksIi5uZXh0IixyKSxuPW4uY29udGV4dCxlLnNldChuLCIuZnJhbWVidWZmZXJXaWR0aCIscisiPyIrcisiLndpZHRoOiIrbisiLmRyYXdpbmdCdWZmZXJXaWR0aCIpLGUuc2V0KG4sIi5mcmFtZWJ1ZmZlckhlaWdodCIscisiPyIrcisiLmhlaWdodDoiK24rIi5kcmF3aW5nQnVmZmVySGVpZ2h0Iikscn0pKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB3KHQscixuKXtmdW5jdGlvbiBpKHQpe2lmKHQgaW4gYSl7dmFyIHI9ZS5pZChhW3RdKTtyZXR1cm4odD1SKChmdW5jdGlvbigpe3JldHVybiByfSkpKS5pZD1yLHR9aWYodCBpbiBvKXt2YXIgbj1vW3RdO3JldHVybiBGKG4sKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbnZva2UoZSxuKTtyZXR1cm4gZS5kZWYodC5zaGFyZWQuc3RyaW5ncywiLmlkKCIsciwiKSIpfSkpfXJldHVybiBudWxsfXZhciBhPXQuc3RhdGljLG89dC5keW5hbWljLHM9aSgiZnJhZyIpLGw9aSgidmVydCIpLGM9bnVsbDtyZXR1cm4gRChzKSYmRChsKT8oYz1mLnByb2dyYW0obC5pZCxzLmlkLG51bGwsbiksdD1SKChmdW5jdGlvbih0LGUpe3JldHVybiB0LmxpbmsoYyl9KSkpOnQ9bmV3IHoocyYmcy50aGlzRGVwfHxsJiZsLnRoaXNEZXAscyYmcy5jb250ZXh0RGVwfHxsJiZsLmNvbnRleHREZXAscyYmcy5wcm9wRGVwfHxsJiZsLnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQuc2hhcmVkLnNoYWRlcjtyZXR1cm4gcj1zP3MuYXBwZW5kKHQsZSk6ZS5kZWYoaSwiLiIsImZyYWciKSxuPWw/bC5hcHBlbmQodCxlKTplLmRlZihpLCIuIiwidmVydCIpLGUuZGVmKGkrIi5wcm9ncmFtKCIrbisiLCIrcisiKSIpfSkpLHtmcmFnOnMsdmVydDpsLHByb2dWYXI6dCxwcm9ncmFtOmN9fWZ1bmN0aW9uIFQodCxlKXtmdW5jdGlvbiByKHQsZSl7aWYodCBpbiBuKXt2YXIgcj0wfG5bdF07cmV0dXJuIGU/YS5vZmZzZXQ9cjphLmluc3RhbmNlcz1yLFIoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUmJih0Lk9GRlNFVD1yKSxyfSkpfWlmKHQgaW4gaSl7dmFyIG89aVt0XTtyZXR1cm4gRihvLChmdW5jdGlvbih0LHIpe3ZhciBuPXQuaW52b2tlKHIsbyk7cmV0dXJuIGUmJih0Lk9GRlNFVD1uKSxufSkpfWlmKGUpe2lmKGMpcmV0dXJuIFIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuT0ZGU0VUPTB9KSk7aWYocylyZXR1cm4gbmV3IHoobC50aGlzRGVwLGwuY29udGV4dERlcCxsLnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuc2hhcmVkLnZhbysiLmN1cnJlbnRWQU8/Iit0LnNoYXJlZC52YW8rIi5jdXJyZW50VkFPLm9mZnNldDowIil9KSl9ZWxzZSBpZihzKXJldHVybiBuZXcgeihsLnRoaXNEZXAsbC5jb250ZXh0RGVwLGwucHJvcERlcCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5zaGFyZWQudmFvKyIuY3VycmVudFZBTz8iK3Quc2hhcmVkLnZhbysiLmN1cnJlbnRWQU8uaW5zdGFuY2VzOi0xIil9KSk7cmV0dXJuIG51bGx9dmFyIG49dC5zdGF0aWMsaT10LmR5bmFtaWMsYT17fSxzPSExLGw9ZnVuY3Rpb24oKXtpZigidmFvImluIG4pe3ZhciB0PW4udmFvO3JldHVybiBudWxsIT09dCYmbnVsbD09PXUuZ2V0VkFPKHQpJiYodD11LmNyZWF0ZVZBTyh0KSkscz0hMCxhLnZhbz10LFIoKGZ1bmN0aW9uKGUpe3ZhciByPXUuZ2V0VkFPKHQpO3JldHVybiByP2UubGluayhyKToibnVsbCJ9KSl9aWYoInZhbyJpbiBpKXtzPSEwO3ZhciBlPWkudmFvO3JldHVybiBGKGUsKGZ1bmN0aW9uKHQscil7dmFyIG49dC5pbnZva2UocixlKTtyZXR1cm4gci5kZWYodC5zaGFyZWQudmFvKyIuZ2V0VkFPKCIrbisiKSIpfSkpfXJldHVybiBudWxsfSgpLGM9ITEsZj1mdW5jdGlvbigpe2lmKCJlbGVtZW50cyJpbiBuKXt2YXIgdD1uLmVsZW1lbnRzO2lmKGEuZWxlbWVudHM9dCxJKHQpKXt2YXIgZT1hLmVsZW1lbnRzPW8uY3JlYXRlKHQsITApO3Q9by5nZXRFbGVtZW50cyhlKTtjPSEwfWVsc2UgdCYmKHQ9by5nZXRFbGVtZW50cyh0KSxjPSEwKTtyZXR1cm4oZT1SKChmdW5jdGlvbihlLHIpe2lmKHQpe3ZhciBuPWUubGluayh0KTtyZXR1cm4gZS5FTEVNRU5UUz1ufXJldHVybiBlLkVMRU1FTlRTPW51bGx9KSkpLnZhbHVlPXQsZX1pZigiZWxlbWVudHMiaW4gaSl7Yz0hMDt2YXIgcj1pLmVsZW1lbnRzO3JldHVybiBGKHIsKGZ1bmN0aW9uKHQsZSl7dmFyIG49KGk9dC5zaGFyZWQpLmlzQnVmZmVyQXJncyxpPWkuZWxlbWVudHMsYT10Lmludm9rZShlLHIpLG89ZS5kZWYoIm51bGwiKTtuPWUuZGVmKG4sIigiLGEsIikiKSxhPXQuY29uZChuKS50aGVuKG8sIj0iLGksIi5jcmVhdGVTdHJlYW0oIixhLCIpOyIpLmVsc2UobywiPSIsaSwiLmdldEVsZW1lbnRzKCIsYSwiKTsiKTtyZXR1cm4gZS5lbnRyeShhKSxlLmV4aXQodC5jb25kKG4pLnRoZW4oaSwiLmRlc3Ryb3lTdHJlYW0oIixvLCIpOyIpKSx0LkVMRU1FTlRTPW99KSl9cmV0dXJuIHM/bmV3IHoobC50aGlzRGVwLGwuY29udGV4dERlcCxsLnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuc2hhcmVkLnZhbysiLmN1cnJlbnRWQU8/Iit0LnNoYXJlZC5lbGVtZW50cysiLmdldEVsZW1lbnRzKCIrdC5zaGFyZWQudmFvKyIuY3VycmVudFZBTy5lbGVtZW50cyk6bnVsbCIpfSkpOm51bGx9KCksaD1yKCJvZmZzZXQiLCEwKSxwPWZ1bmN0aW9uKCl7aWYoInByaW1pdGl2ZSJpbiBuKXt2YXIgdD1uLnByaW1pdGl2ZTtyZXR1cm4gYS5wcmltaXRpdmU9dCxSKChmdW5jdGlvbihlLHIpe3JldHVybiBydFt0XX0pKX1pZigicHJpbWl0aXZlImluIGkpe3ZhciBlPWkucHJpbWl0aXZlO3JldHVybiBGKGUsKGZ1bmN0aW9uKHQscil7dmFyIG49dC5jb25zdGFudHMucHJpbVR5cGVzLGk9dC5pbnZva2UocixlKTtyZXR1cm4gci5kZWYobiwiWyIsaSwiXSIpfSkpfXJldHVybiBjP0QoZik/Zi52YWx1ZT9SKChmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LkVMRU1FTlRTLCIucHJpbVR5cGUiKX0pKTpSKChmdW5jdGlvbigpe3JldHVybiA0fSkpOm5ldyB6KGYudGhpc0RlcCxmLmNvbnRleHREZXAsZi5wcm9wRGVwLChmdW5jdGlvbih0LGUpe3ZhciByPXQuRUxFTUVOVFM7cmV0dXJuIGUuZGVmKHIsIj8iLHIsIi5wcmltVHlwZToiLDQpfSkpOnM/bmV3IHoobC50aGlzRGVwLGwuY29udGV4dERlcCxsLnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuc2hhcmVkLnZhbysiLmN1cnJlbnRWQU8/Iit0LnNoYXJlZC52YW8rIi5jdXJyZW50VkFPLnByaW1pdGl2ZTo0Iil9KSk6bnVsbH0oKSxkPWZ1bmN0aW9uKCl7aWYoImNvdW50ImluIG4pe3ZhciB0PTB8bi5jb3VudDtyZXR1cm4gYS5jb3VudD10LFIoKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSl9aWYoImNvdW50ImluIGkpe3ZhciBlPWkuY291bnQ7cmV0dXJuIEYoZSwoZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5pbnZva2UocixlKX0pKX1yZXR1cm4gYz9EKGYpP2Y/aD9uZXcgeihoLnRoaXNEZXAsaC5jb250ZXh0RGVwLGgucHJvcERlcCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5FTEVNRU5UUywiLnZlcnRDb3VudC0iLHQuT0ZGU0VUKX0pKTpSKChmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LkVMRU1FTlRTLCIudmVydENvdW50Iil9KSk6UigoZnVuY3Rpb24oKXtyZXR1cm4tMX0pKTpuZXcgeihmLnRoaXNEZXB8fGgudGhpc0RlcCxmLmNvbnRleHREZXB8fGguY29udGV4dERlcCxmLnByb3BEZXB8fGgucHJvcERlcCwoZnVuY3Rpb24odCxlKXt2YXIgcj10LkVMRU1FTlRTO3JldHVybiB0Lk9GRlNFVD9lLmRlZihyLCI/IixyLCIudmVydENvdW50LSIsdC5PRkZTRVQsIjotMSIpOmUuZGVmKHIsIj8iLHIsIi52ZXJ0Q291bnQ6LTEiKX0pKTpzP25ldyB6KGwudGhpc0RlcCxsLmNvbnRleHREZXAsbC5wcm9wRGVwLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LnNoYXJlZC52YW8sIi5jdXJyZW50VkFPPyIsdC5zaGFyZWQudmFvLCIuY3VycmVudFZBTy5jb3VudDotMSIpfSkpOm51bGx9KCksbT1yKCJpbnN0YW5jZXMiLCExKTtyZXR1cm57ZWxlbWVudHM6ZixwcmltaXRpdmU6cCxjb3VudDpkLGluc3RhbmNlczptLG9mZnNldDpoLHZhbzpsLHZhb0FjdGl2ZTpzLGVsZW1lbnRzQWN0aXZlOmMsc3RhdGljOmF9fWZ1bmN0aW9uIGsodCxyKXt2YXIgbj10LnN0YXRpYyxhPXQuZHluYW1pYyxvPXt9O3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgcj1uW3RdLGE9ZS5pZCh0KSxzPW5ldyBRO2lmKEkocikpcy5zdGF0ZT0xLHMuYnVmZmVyPWkuZ2V0QnVmZmVyKGkuY3JlYXRlKHIsMzQ5NjIsITEsITApKSxzLnR5cGU9MDtlbHNlIGlmKGM9aS5nZXRCdWZmZXIocikpcy5zdGF0ZT0xLHMuYnVmZmVyPWMscy50eXBlPTA7ZWxzZSBpZigiY29uc3RhbnQiaW4gcil7dmFyIGw9ci5jb25zdGFudDtzLmJ1ZmZlcj0ibnVsbCIscy5zdGF0ZT0yLCJudW1iZXIiPT10eXBlb2YgbD9zLng9bDpfdC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2U8bC5sZW5ndGgmJihzW3RdPWxbZV0pfSkpfWVsc2V7dmFyIGM9SShyLmJ1ZmZlcik/aS5nZXRCdWZmZXIoaS5jcmVhdGUoci5idWZmZXIsMzQ5NjIsITEsITApKTppLmdldEJ1ZmZlcihyLmJ1ZmZlciksdT0wfHIub2Zmc2V0LGY9MHxyLnN0cmlkZSxoPTB8ci5zaXplLHA9ISFyLm5vcm1hbGl6ZWQsZD0wOyJ0eXBlImluIHImJihkPUtbci50eXBlXSkscj0wfHIuZGl2aXNvcixzLmJ1ZmZlcj1jLHMuc3RhdGU9MSxzLnNpemU9aCxzLm5vcm1hbGl6ZWQ9cCxzLnR5cGU9ZHx8Yy5kdHlwZSxzLm9mZnNldD11LHMuc3RyaWRlPWYscy5kaXZpc29yPXJ9b1t0XT1SKChmdW5jdGlvbih0LGUpe3ZhciByPXQuYXR0cmliQ2FjaGU7aWYoYSBpbiByKXJldHVybiByW2FdO3ZhciBuPXtpc1N0cmVhbTohMX07cmV0dXJuIE9iamVjdC5rZXlzKHMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe25bdF09c1t0XX0pKSxzLmJ1ZmZlciYmKG4uYnVmZmVyPXQubGluayhzLmJ1ZmZlciksbi50eXBlPW4udHlwZXx8bi5idWZmZXIrIi5kdHlwZSIpLHJbYV09bn0pKX0pKSxPYmplY3Qua2V5cyhhKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1hW3RdO29bdF09RihlLChmdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4odCl7cihsW3RdLCI9IixpLCIuIix0LCJ8MDsiKX12YXIgaT10Lmludm9rZShyLGUpLGE9dC5zaGFyZWQsbz10LmNvbnN0YW50cyxzPWEuaXNCdWZmZXJBcmdzLGw9KGE9YS5idWZmZXIse2lzU3RyZWFtOnIuZGVmKCExKX0pLGM9bmV3IFE7Yy5zdGF0ZT0xLE9iamVjdC5rZXlzKGMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2xbdF09ci5kZWYoIiIrY1t0XSl9KSk7dmFyIHU9bC5idWZmZXIsZj1sLnR5cGU7cmV0dXJuIHIoImlmKCIscywiKCIsaSwiKSl7IixsLmlzU3RyZWFtLCI9dHJ1ZTsiLHUsIj0iLGEsIi5jcmVhdGVTdHJlYW0oIiwzNDk2MiwiLCIsaSwiKTsiLGYsIj0iLHUsIi5kdHlwZTsiLCJ9ZWxzZXsiLHUsIj0iLGEsIi5nZXRCdWZmZXIoIixpLCIpOyIsImlmKCIsdSwiKXsiLGYsIj0iLHUsIi5kdHlwZTsiLCd9ZWxzZSBpZigiY29uc3RhbnQiIGluICcsaSwiKXsiLGwuc3RhdGUsIj0iLDIsIjsiLCJpZih0eXBlb2YgIitpKycuY29uc3RhbnQgPT09ICJudW1iZXIiKXsnLGxbX3RbMF1dLCI9IixpLCIuY29uc3RhbnQ7IixfdC5zbGljZSgxKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBsW3RdfSkpLmpvaW4oIj0iKSwiPTA7IiwifWVsc2V7IixfdC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxbdF0rIj0iK2krIi5jb25zdGFudC5sZW5ndGg+IitlKyI/IitpKyIuY29uc3RhbnRbIitlKyJdOjA7In0pKS5qb2luKCIiKSwifX1lbHNleyIsImlmKCIscywiKCIsaSwiLmJ1ZmZlcikpeyIsdSwiPSIsYSwiLmNyZWF0ZVN0cmVhbSgiLDM0OTYyLCIsIixpLCIuYnVmZmVyKTsiLCJ9ZWxzZXsiLHUsIj0iLGEsIi5nZXRCdWZmZXIoIixpLCIuYnVmZmVyKTsiLCJ9IixmLCc9InR5cGUiIGluICcsaSwiPyIsby5nbFR5cGVzLCJbIixpLCIudHlwZV06Iix1LCIuZHR5cGU7IixsLm5vcm1hbGl6ZWQsIj0hISIsaSwiLm5vcm1hbGl6ZWQ7Iiksbigic2l6ZSIpLG4oIm9mZnNldCIpLG4oInN0cmlkZSIpLG4oImRpdmlzb3IiKSxyKCJ9fSIpLHIuZXhpdCgiaWYoIixsLmlzU3RyZWFtLCIpeyIsYSwiLmRlc3Ryb3lTdHJlYW0oIix1LCIpOyIsIn0iKSxsfSkpfSkpLG99ZnVuY3Rpb24gQSh0LGUsbixpLG8pe2Z1bmN0aW9uIHModCl7dmFyIGU9Y1t0XTtlJiYoaFt0XT1lKX12YXIgbD1mdW5jdGlvbih0LGUpe2lmKCJzdHJpbmciPT10eXBlb2Yocj10LnN0YXRpYykuZnJhZyYmInN0cmluZyI9PXR5cGVvZiByLnZlcnQpe2lmKDA8T2JqZWN0LmtleXMoZS5keW5hbWljKS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIHI9ZS5zdGF0aWMsbj1PYmplY3Qua2V5cyhyKTtpZigwPG4ubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIHJbblswXV0pe2Zvcih2YXIgaT1bXSxhPTA7YTxuLmxlbmd0aDsrK2EpaS5wdXNoKFswfHJbblthXV0sblthXV0pO3JldHVybiBpfX1yZXR1cm4gbnVsbH0odCxlKSxjPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2lmKHQgaW4gaSl7dmFyIHI9aVt0XTt0PSEwO3ZhciBuLG8scz0wfHIueCxsPTB8ci55O3JldHVybiJ3aWR0aCJpbiByP249MHxyLndpZHRoOnQ9ITEsImhlaWdodCJpbiByP289MHxyLmhlaWdodDp0PSExLG5ldyB6KCF0JiZlJiZlLnRoaXNEZXAsIXQmJmUmJmUuY29udGV4dERlcCwhdCYmZSYmZS5wcm9wRGVwLChmdW5jdGlvbih0LGUpe3ZhciBpPXQuc2hhcmVkLmNvbnRleHQsYT1uOyJ3aWR0aCJpbiByfHwoYT1lLmRlZihpLCIuIiwiZnJhbWVidWZmZXJXaWR0aCIsIi0iLHMpKTt2YXIgYz1vO3JldHVybiJoZWlnaHQiaW4gcnx8KGM9ZS5kZWYoaSwiLiIsImZyYW1lYnVmZmVySGVpZ2h0IiwiLSIsbCkpLFtzLGwsYSxjXX0pKX1pZih0IGluIGEpe3ZhciBjPWFbdF07cmV0dXJuIHQ9RihjLChmdW5jdGlvbih0LGUpe3ZhciByPXQuaW52b2tlKGUsYyksbj10LnNoYXJlZC5jb250ZXh0LGk9ZS5kZWYociwiLnh8MCIpLGE9ZS5kZWYociwiLnl8MCIpO3JldHVybltpLGEsZS5kZWYoJyJ3aWR0aCIgaW4gJyxyLCI/IixyLCIud2lkdGh8MDoiLCIoIixuLCIuIiwiZnJhbWVidWZmZXJXaWR0aCIsIi0iLGksIikiKSxyPWUuZGVmKCciaGVpZ2h0IiBpbiAnLHIsIj8iLHIsIi5oZWlnaHR8MDoiLCIoIixuLCIuIiwiZnJhbWVidWZmZXJIZWlnaHQiLCItIixhLCIpIildfSkpLGUmJih0LnRoaXNEZXA9dC50aGlzRGVwfHxlLnRoaXNEZXAsdC5jb250ZXh0RGVwPXQuY29udGV4dERlcHx8ZS5jb250ZXh0RGVwLHQucHJvcERlcD10LnByb3BEZXB8fGUucHJvcERlcCksdH1yZXR1cm4gZT9uZXcgeihlLnRoaXNEZXAsZS5jb250ZXh0RGVwLGUucHJvcERlcCwoZnVuY3Rpb24odCxlKXt2YXIgcj10LnNoYXJlZC5jb250ZXh0O3JldHVyblswLDAsZS5kZWYociwiLiIsImZyYW1lYnVmZmVyV2lkdGgiKSxlLmRlZihyLCIuIiwiZnJhbWVidWZmZXJIZWlnaHQiKV19KSk6bnVsbH12YXIgaT10LnN0YXRpYyxhPXQuZHluYW1pYztpZih0PW4oInZpZXdwb3J0Iikpe3ZhciBvPXQ7dD1uZXcgeih0LnRoaXNEZXAsdC5jb250ZXh0RGVwLHQucHJvcERlcCwoZnVuY3Rpb24odCxlKXt2YXIgcj1vLmFwcGVuZCh0LGUpLG49dC5zaGFyZWQuY29udGV4dDtyZXR1cm4gZS5zZXQobiwiLnZpZXdwb3J0V2lkdGgiLHJbMl0pLGUuc2V0KG4sIi52aWV3cG9ydEhlaWdodCIsclszXSkscn0pKX1yZXR1cm57dmlld3BvcnQ6dCxzY2lzc29yX2JveDpuKCJzY2lzc29yLmJveCIpfX0odCxkPV8odCkpLGY9VCh0KSxoPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGF0aWMsbj10LmR5bmFtaWMsaT17fTtyZXR1cm4gb3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLGEpe2lmKHQgaW4gcil7dmFyIHM9ZShyW3RdKTtpW29dPVIoKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSl9ZWxzZSBpZih0IGluIG4pe3ZhciBsPW5bdF07aVtvXT1GKGwsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEodCxlLHQuaW52b2tlKGUsbCkpfSkpfX12YXIgbz12KHQpO3N3aXRjaCh0KXtjYXNlImN1bGwuZW5hYmxlIjpjYXNlImJsZW5kLmVuYWJsZSI6Y2FzZSJkaXRoZXIiOmNhc2Uic3RlbmNpbC5lbmFibGUiOmNhc2UiZGVwdGguZW5hYmxlIjpjYXNlInNjaXNzb3IuZW5hYmxlIjpjYXNlInBvbHlnb25PZmZzZXQuZW5hYmxlIjpjYXNlInNhbXBsZS5hbHBoYSI6Y2FzZSJzYW1wbGUuZW5hYmxlIjpjYXNlImRlcHRoLm1hc2siOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuIHJ9KSk7Y2FzZSJkZXB0aC5mdW5jIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuIGt0W3RdfSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYodC5jb25zdGFudHMuY29tcGFyZUZ1bmNzLCJbIixyLCJdIil9KSk7Y2FzZSJkZXB0aC5yYW5nZSI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5kZWYoIisiLHIsIlswXSIpLGU9ZS5kZWYoIisiLHIsIlsxXSIpXX0pKTtjYXNlImJsZW5kLmZ1bmMiOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm5bVHRbInNyY1JHQiJpbiB0P3Quc3JjUkdCOnQuc3JjXSxUdFsiZHN0UkdCImluIHQ/dC5kc3RSR0I6dC5kc3RdLFR0WyJzcmNBbHBoYSJpbiB0P3Quc3JjQWxwaGE6dC5zcmNdLFR0WyJkc3RBbHBoYSJpbiB0P3QuZHN0QWxwaGE6dC5kc3RdXX0pLChmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LG4pe3JldHVybiBlLmRlZignIicsdCxuLCciIGluICcsciwiPyIsciwiLiIsdCxuLCI6IixyLCIuIix0KX10PXQuY29uc3RhbnRzLmJsZW5kRnVuY3M7dmFyIGk9bigic3JjIiwiUkdCIiksYT1uKCJkc3QiLCJSR0IiKSxvPShpPWUuZGVmKHQsIlsiLGksIl0iKSxlLmRlZih0LCJbIixuKCJzcmMiLCJBbHBoYSIpLCJdIikpO3JldHVybltpLGE9ZS5kZWYodCwiWyIsYSwiXSIpLG8sdD1lLmRlZih0LCJbIixuKCJkc3QiLCJBbHBoYSIpLCJdIildfSkpO2Nhc2UiYmxlbmQuZXF1YXRpb24iOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/WyRbdF0sJFt0XV06Im9iamVjdCI9PXR5cGVvZiB0P1skW3QucmdiXSwkW3QuYWxwaGFdXTp2b2lkIDB9KSwoZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuY29uc3RhbnRzLmJsZW5kRXF1YXRpb25zLGk9ZS5kZWYoKSxhPWUuZGVmKCk7cmV0dXJuKHQ9dC5jb25kKCJ0eXBlb2YgIixyLCc9PT0ic3RyaW5nIicpKS50aGVuKGksIj0iLGEsIj0iLG4sIlsiLHIsIl07IiksdC5lbHNlKGksIj0iLG4sIlsiLHIsIi5yZ2JdOyIsYSwiPSIsbiwiWyIsciwiLmFscGhhXTsiKSxlKHQpLFtpLGFdfSkpO2Nhc2UiYmxlbmQuY29sb3IiOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm4gYSg0LChmdW5jdGlvbihlKXtyZXR1cm4rdFtlXX0pKX0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGEoNCwoZnVuY3Rpb24odCl7cmV0dXJuIGUuZGVmKCIrIixyLCJbIix0LCJdIil9KSl9KSk7Y2FzZSJzdGVuY2lsLm1hc2siOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm4gMHx0fSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYociwifDAiKX0pKTtjYXNlInN0ZW5jaWwuZnVuYyI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3JldHVybltrdFt0LmNtcHx8ImtlZXAiXSx0LnJlZnx8MCwibWFzayJpbiB0P3QubWFzazotMV19KSwoZnVuY3Rpb24odCxlLHIpe3JldHVyblt0PWUuZGVmKCciY21wIiBpbiAnLHIsIj8iLHQuY29uc3RhbnRzLmNvbXBhcmVGdW5jcywiWyIsciwiLmNtcF0iLCI6Iiw3NjgwKSxlLmRlZihyLCIucmVmfDAiKSxlPWUuZGVmKCcibWFzayIgaW4gJyxyLCI/IixyLCIubWFza3wwOi0xIildfSkpO2Nhc2Uic3RlbmNpbC5vcEZyb250IjpjYXNlInN0ZW5jaWwub3BCYWNrIjpyZXR1cm4gZSgoZnVuY3Rpb24oZSl7cmV0dXJuWyJzdGVuY2lsLm9wQmFjayI9PT10PzEwMjk6MTAyOCxBdFtlLmZhaWx8fCJrZWVwIl0sQXRbZS56ZmFpbHx8ImtlZXAiXSxBdFtlLnpwYXNzfHwia2VlcCJdXX0pLChmdW5jdGlvbihlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gci5kZWYoJyInLHQsJyIgaW4gJyxuLCI/IixhLCJbIixuLCIuIix0LCJdOiIsNzY4MCl9dmFyIGE9ZS5jb25zdGFudHMuc3RlbmNpbE9wcztyZXR1cm5bInN0ZW5jaWwub3BCYWNrIj09PXQ/MTAyOToxMDI4LGkoImZhaWwiKSxpKCJ6ZmFpbCIpLGkoInpwYXNzIildfSkpO2Nhc2UicG9seWdvbk9mZnNldC5vZmZzZXQiOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm5bMHx0LmZhY3RvciwwfHQudW5pdHNdfSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5kZWYociwiLmZhY3RvcnwwIiksZT1lLmRlZihyLCIudW5pdHN8MCIpXX0pKTtjYXNlImN1bGwuZmFjZSI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3ZhciBlPTA7cmV0dXJuImZyb250Ij09PXQ/ZT0xMDI4OiJiYWNrIj09PXQmJihlPTEwMjkpLGV9KSwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBlLmRlZihyLCc9PT0iZnJvbnQiPycsMTAyOCwiOiIsMTAyOSl9KSk7Y2FzZSJsaW5lV2lkdGgiOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuIHJ9KSk7Y2FzZSJmcm9udEZhY2UiOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm4gTXRbdF19KSwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBlLmRlZihyKyc9PT0iY3ciPzIzMDQ6MjMwNScpfSkpO2Nhc2UiY29sb3JNYXNrIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4hIXR9KSl9KSwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBhKDQsKGZ1bmN0aW9uKHQpe3JldHVybiIhISIrcisiWyIrdCsiXSJ9KSl9KSk7Y2FzZSJzYW1wbGUuY292ZXJhZ2UiOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm5bInZhbHVlImluIHQ/dC52YWx1ZToxLCEhdC5pbnZlcnRdfSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5kZWYoJyJ2YWx1ZSIgaW4gJyxyLCI/KyIsciwiLnZhbHVlOjEiKSxlPWUuZGVmKCIhISIsciwiLmludmVydCIpXX0pKX19KSksaX0odCkscD13KHQsMCxsKTtzKCJ2aWV3cG9ydCIpLHModigic2Npc3Nvci5ib3giKSk7dmFyIGQsbT0wPE9iamVjdC5rZXlzKGgpLmxlbmd0aDtpZigoZD17ZnJhbWVidWZmZXI6ZCxkcmF3OmYsc2hhZGVyOnAsc3RhdGU6aCxkaXJ0eTptLHNjb3BlVkFPOm51bGwsZHJhd1ZBTzpudWxsLHVzZVZBTzohMSxhdHRyaWJ1dGVzOnt9fSkucHJvZmlsZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQuc3RhdGljO2lmKHQ9dC5keW5hbWljLCJwcm9maWxlImluIHIpe3ZhciBuPSEhci5wcm9maWxlOyhlPVIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG59KSkpLmVuYWJsZT1ufWVsc2UgaWYoInByb2ZpbGUiaW4gdCl7dmFyIGk9dC5wcm9maWxlO2U9RihpLChmdW5jdGlvbih0LGUpe3JldHVybiB0Lmludm9rZShlLGkpfSkpfXJldHVybiBlfSh0KSxkLnVuaWZvcm1zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGF0aWMsbj10LmR5bmFtaWMsaT17fTtyZXR1cm4gT2JqZWN0LmtleXMocikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGUsbj1yW3RdO2lmKCJudW1iZXIiPT10eXBlb2Ygbnx8ImJvb2xlYW4iPT10eXBlb2YgbillPVIoKGZ1bmN0aW9uKCl7cmV0dXJuIG59KSk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2Ygbil7dmFyIG89bi5fcmVnbFR5cGU7InRleHR1cmUyZCI9PT1vfHwidGV4dHVyZUN1YmUiPT09bz9lPVIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxpbmsobil9KSk6ImZyYW1lYnVmZmVyIiE9PW8mJiJmcmFtZWJ1ZmZlckN1YmUiIT09b3x8KGU9UigoZnVuY3Rpb24odCl7cmV0dXJuIHQubGluayhuLmNvbG9yWzBdKX0pKSl9ZWxzZSBnKG4pJiYoZT1SKChmdW5jdGlvbih0KXtyZXR1cm4gdC5nbG9iYWwuZGVmKCJbIixhKG4ubGVuZ3RoLChmdW5jdGlvbih0KXtyZXR1cm4gblt0XX0pKSwiXSIpfSkpKTtlLnZhbHVlPW4saVt0XT1lfSkpLE9iamVjdC5rZXlzKG4pLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW5bdF07aVt0XT1GKGUsKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuaW52b2tlKHIsZSl9KSl9KSksaX0obiksZC5kcmF3VkFPPWQuc2NvcGVWQU89Zi52YW8sIWQuZHJhd1ZBTyYmcC5wcm9ncmFtJiYhbCYmci5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzJiZmLnN0YXRpYy5lbGVtZW50cyl7dmFyIHk9ITA7aWYodD1wLnByb2dyYW0uYXR0cmlidXRlcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0PWUuc3RhdGljW3RdLHk9eSYmISF0LHR9KSkseSYmMDx0Lmxlbmd0aCl7dmFyIHg9dS5nZXRWQU8odS5jcmVhdGVWQU8oe2F0dHJpYnV0ZXM6dCxlbGVtZW50czpmLnN0YXRpYy5lbGVtZW50c30pKTtkLmRyYXdWQU89bmV3IHoobnVsbCxudWxsLG51bGwsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGluayh4KX0pKSxkLnVzZVZBTz0hMH19cmV0dXJuIGw/ZC51c2VWQU89ITA6ZC5hdHRyaWJ1dGVzPWsoZSksZC5jb250ZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXQuc3RhdGljLHI9dC5keW5hbWljLG49e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPWVbdF07blt0XT1SKChmdW5jdGlvbih0LGUpe3JldHVybiJudW1iZXIiPT10eXBlb2Ygcnx8ImJvb2xlYW4iPT10eXBlb2Ygcj8iIityOnQubGluayhyKX0pKX0pKSxPYmplY3Qua2V5cyhyKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1yW3RdO25bdF09RihlLChmdW5jdGlvbih0LHIpe3JldHVybiB0Lmludm9rZShyLGUpfSkpfSkpLG59KGkpLGR9ZnVuY3Rpb24gTSh0LGUscil7dmFyIG49dC5zaGFyZWQuY29udGV4dCxpPXQuc2NvcGUoKTtPYmplY3Qua2V5cyhyKS5mb3JFYWNoKChmdW5jdGlvbihhKXtlLnNhdmUobiwiLiIrYSk7dmFyIG89clthXS5hcHBlbmQodCxlKTtBcnJheS5pc0FycmF5KG8pP2kobiwiLiIsYSwiPVsiLG8uam9pbigpLCJdOyIpOmkobiwiLiIsYSwiPSIsbywiOyIpfSkpLGUoaSl9ZnVuY3Rpb24gUyh0LGUscixuKXt2YXIgaSxhPShzPXQuc2hhcmVkKS5nbCxvPXMuZnJhbWVidWZmZXI7ZXQmJihpPWUuZGVmKHMuZXh0ZW5zaW9ucywiLndlYmdsX2RyYXdfYnVmZmVycyIpKTt2YXIgcz0obD10LmNvbnN0YW50cykuZHJhd0J1ZmZlcixsPWwuYmFja0J1ZmZlcjt0PXI/ci5hcHBlbmQodCxlKTplLmRlZihvLCIubmV4dCIpLG58fGUoImlmKCIsdCwiIT09IixvLCIuY3VyKXsiKSxlKCJpZigiLHQsIil7IixhLCIuYmluZEZyYW1lYnVmZmVyKCIsMzYxNjAsIiwiLHQsIi5mcmFtZWJ1ZmZlcik7IiksZXQmJmUoaSwiLmRyYXdCdWZmZXJzV0VCR0woIixzLCJbIix0LCIuY29sb3JBdHRhY2htZW50cy5sZW5ndGhdKTsiKSxlKCJ9ZWxzZXsiLGEsIi5iaW5kRnJhbWVidWZmZXIoIiwzNjE2MCwiLG51bGwpOyIpLGV0JiZlKGksIi5kcmF3QnVmZmVyc1dFQkdMKCIsbCwiKTsiKSxlKCJ9IixvLCIuY3VyPSIsdCwiOyIpLG58fGUoIn0iKX1mdW5jdGlvbiBFKHQsZSxyKXt2YXIgbj10LnNoYXJlZCxpPW4uZ2wsbz10LmN1cnJlbnQscz10Lm5leHQsbD1uLmN1cnJlbnQsYz1uLm5leHQsdT10LmNvbmQobCwiLmRpcnR5Iik7b3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG4sZjtpZighKChlPXYoZSkpaW4gci5zdGF0ZSkpaWYoZSBpbiBzKXtuPXNbZV0sZj1vW2VdO3ZhciBoPWEoaXRbZV0ubGVuZ3RoLChmdW5jdGlvbih0KXtyZXR1cm4gdS5kZWYobiwiWyIsdCwiXSIpfSkpO3UodC5jb25kKGgubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiB0KyIhPT0iK2YrIlsiK2UrIl0ifSkpLmpvaW4oInx8IikpLnRoZW4oaSwiLiIsbHRbZV0sIigiLGgsIik7IixoLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZisiWyIrZSsiXT0iK3R9KSkuam9pbigiOyIpLCI7IikpfWVsc2Ugbj11LmRlZihjLCIuIixlKSxoPXQuY29uZChuLCIhPT0iLGwsIi4iLGUpLHUoaCksZSBpbiBzdD9oKHQuY29uZChuKS50aGVuKGksIi5lbmFibGUoIixzdFtlXSwiKTsiKS5lbHNlKGksIi5kaXNhYmxlKCIsc3RbZV0sIik7IiksbCwiLiIsZSwiPSIsbiwiOyIpOmgoaSwiLiIsbHRbZV0sIigiLG4sIik7IixsLCIuIixlLCI9IixuLCI7Iil9KSksMD09PU9iamVjdC5rZXlzKHIuc3RhdGUpLmxlbmd0aCYmdShsLCIuZGlydHk9ZmFsc2U7IiksZSh1KX1mdW5jdGlvbiBMKHQsZSxyLG4pe3ZhciBpPXQuc2hhcmVkLGE9dC5jdXJyZW50LG89aS5jdXJyZW50LHM9aS5nbDtPKE9iamVjdC5rZXlzKHIpKS5mb3JFYWNoKChmdW5jdGlvbihpKXt2YXIgbD1yW2ldO2lmKCFufHxuKGwpKXt2YXIgYz1sLmFwcGVuZCh0LGUpO2lmKHN0W2ldKXt2YXIgdT1zdFtpXTtEKGwpP2UocyxjPyIuZW5hYmxlKCI6Ii5kaXNhYmxlKCIsdSwiKTsiKTplKHQuY29uZChjKS50aGVuKHMsIi5lbmFibGUoIix1LCIpOyIpLmVsc2UocywiLmRpc2FibGUoIix1LCIpOyIpKSxlKG8sIi4iLGksIj0iLGMsIjsiKX1lbHNlIGlmKGcoYykpe3ZhciBmPWFbaV07ZShzLCIuIixsdFtpXSwiKCIsYywiKTsiLGMubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBmKyJbIitlKyJdPSIrdH0pKS5qb2luKCI7IiksIjsiKX1lbHNlIGUocywiLiIsbHRbaV0sIigiLGMsIik7IixvLCIuIixpLCI9IixjLCI7Iil9fSkpfWZ1bmN0aW9uIEIodCxlKXt0dCYmKHQuaW5zdGFuY2luZz1lLmRlZih0LnNoYXJlZC5leHRlbnNpb25zLCIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyIpKX1mdW5jdGlvbiBOKHQsZSxyLG4saSl7ZnVuY3Rpb24gYSgpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgcGVyZm9ybWFuY2U/IkRhdGUubm93KCkiOiJwZXJmb3JtYW5jZS5ub3coKSJ9ZnVuY3Rpb24gbyh0KXt0KGM9ZS5kZWYoKSwiPSIsYSgpLCI7IiksInN0cmluZyI9PXR5cGVvZiBpP3QoaCwiLmNvdW50Kz0iLGksIjsiKTp0KGgsIi5jb3VudCsrOyIpLGQmJihuP3QodT1lLmRlZigpLCI9IixtLCIuZ2V0TnVtUGVuZGluZ1F1ZXJpZXMoKTsiKTp0KG0sIi5iZWdpblF1ZXJ5KCIsaCwiKTsiKSl9ZnVuY3Rpb24gcyh0KXt0KGgsIi5jcHVUaW1lKz0iLGEoKSwiLSIsYywiOyIpLGQmJihuP3QobSwiLnB1c2hTY29wZVN0YXRzKCIsdSwiLCIsbSwiLmdldE51bVBlbmRpbmdRdWVyaWVzKCksIixoLCIpOyIpOnQobSwiLmVuZFF1ZXJ5KCk7IikpfWZ1bmN0aW9uIGwodCl7dmFyIHI9ZS5kZWYocCwiLnByb2ZpbGUiKTtlKHAsIi5wcm9maWxlPSIsdCwiOyIpLGUuZXhpdChwLCIucHJvZmlsZT0iLHIsIjsiKX12YXIgYyx1LGY9dC5zaGFyZWQsaD10LnN0YXRzLHA9Zi5jdXJyZW50LG09Zi50aW1lcjtpZihyPXIucHJvZmlsZSl7aWYoRChyKSlyZXR1cm4gdm9pZChyLmVuYWJsZT8obyhlKSxzKGUuZXhpdCksbCgidHJ1ZSIpKTpsKCJmYWxzZSIpKTtsKHI9ci5hcHBlbmQodCxlKSl9ZWxzZSByPWUuZGVmKHAsIi5wcm9maWxlIik7byhmPXQuYmxvY2soKSksZSgiaWYoIixyLCIpeyIsZiwifSIpLHModD10LmJsb2NrKCkpLGUuZXhpdCgiaWYoIixyLCIpeyIsdCwifSIpfWZ1bmN0aW9uIFUodCxlLHIsbixpKXtmdW5jdGlvbiBhKHIsbixpKXtmdW5jdGlvbiBhKCl7ZSgiaWYoISIsdSwiLmJ1ZmZlcil7IixsLCIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoIixjLCIpO30iKTt2YXIgcixhPWkudHlwZTtyPWkuc2l6ZT9lLmRlZihpLnNpemUsInx8IixuKTpuLGUoImlmKCIsdSwiLnR5cGUhPT0iLGEsInx8Iix1LCIuc2l6ZSE9PSIsciwifHwiLHAubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdSsiLiIrdCsiIT09IitpW3RdfSkpLmpvaW4oInx8IiksIil7IixsLCIuYmluZEJ1ZmZlcigiLDM0OTYyLCIsIixmLCIuYnVmZmVyKTsiLGwsIi52ZXJ0ZXhBdHRyaWJQb2ludGVyKCIsW2MscixhLGkubm9ybWFsaXplZCxpLnN0cmlkZSxpLm9mZnNldF0sIik7Iix1LCIudHlwZT0iLGEsIjsiLHUsIi5zaXplPSIsciwiOyIscC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB1KyIuIit0KyI9IitpW3RdKyI7In0pKS5qb2luKCIiKSwifSIpLHR0JiYoYT1pLmRpdmlzb3IsZSgiaWYoIix1LCIuZGl2aXNvciE9PSIsYSwiKXsiLHQuaW5zdGFuY2luZywiLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSgiLFtjLGFdLCIpOyIsdSwiLmRpdmlzb3I9IixhLCI7fSIpKX1mdW5jdGlvbiBzKCl7ZSgiaWYoIix1LCIuYnVmZmVyKXsiLGwsIi5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoIixjLCIpOyIsdSwiLmJ1ZmZlcj1udWxsOyIsIn1pZigiLF90Lm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdSsiLiIrdCsiIT09IitoW2VdfSkpLmpvaW4oInx8IiksIil7IixsLCIudmVydGV4QXR0cmliNGYoIixjLCIsIixoLCIpOyIsX3QubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiB1KyIuIit0KyI9IitoW2VdKyI7In0pKS5qb2luKCIiKSwifSIpfXZhciBsPW8uZ2wsYz1lLmRlZihyLCIubG9jYXRpb24iKSx1PWUuZGVmKG8uYXR0cmlidXRlcywiWyIsYywiXSIpO3I9aS5zdGF0ZTt2YXIgZj1pLmJ1ZmZlcixoPVtpLngsaS55LGkueixpLnddLHA9WyJidWZmZXIiLCJub3JtYWxpemVkIiwib2Zmc2V0Iiwic3RyaWRlIl07MT09PXI/YSgpOjI9PT1yP3MoKTooZSgiaWYoIixyLCI9PT0iLDEsIil7IiksYSgpLGUoIn1lbHNleyIpLHMoKSxlKCJ9IikpfXZhciBvPXQuc2hhcmVkO24uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIG8scz1uLm5hbWUsbD1yLmF0dHJpYnV0ZXNbc107aWYobCl7aWYoIWkobCkpcmV0dXJuO289bC5hcHBlbmQodCxlKX1lbHNle2lmKCFpKFN0KSlyZXR1cm47dmFyIGM9dC5zY29wZUF0dHJpYihzKTtvPXt9LE9iamVjdC5rZXlzKG5ldyBRKS5mb3JFYWNoKChmdW5jdGlvbih0KXtvW3RdPWUuZGVmKGMsIi4iLHQpfSkpfWEodC5saW5rKG4pLGZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDM1NjY0OmNhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gMjtjYXNlIDM1NjY1OmNhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gMztjYXNlIDM1NjY2OmNhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gNDtkZWZhdWx0OnJldHVybiAxfX0obi5pbmZvLnR5cGUpLG8pfSkpfWZ1bmN0aW9uIEgodCxyLG4saSxvLHMpe2Zvcih2YXIgbCxjPXQuc2hhcmVkLHU9Yy5nbCxmPXt9LGg9MDtoPGkubGVuZ3RoOysraCl7dmFyIHA9KGI9aVtoXSkubmFtZSxkPWIuaW5mby50eXBlLG09Yi5pbmZvLnNpemUsdj1uLnVuaWZvcm1zW3BdO2lmKDE8bSl7aWYoIXYpY29udGludWU7dmFyIHk9cC5yZXBsYWNlKCJbMF0iLCIiKTtpZihmW3ldKWNvbnRpbnVlO2ZbeV09MX12YXIgeCxiPXQubGluayhiKSsiLmxvY2F0aW9uIjtpZih2KXtpZighbyh2KSljb250aW51ZTtpZihEKHYpKXtpZihwPXYudmFsdWUsMzU2Nzg9PT1kfHwzNTY4MD09PWQpcih1LCIudW5pZm9ybTFpKCIsYiwiLCIsKGQ9dC5saW5rKHAuX3RleHR1cmV8fHAuY29sb3JbMF0uX3RleHR1cmUpKSsiLmJpbmQoKSk7Iiksci5leGl0KGQsIi51bmJpbmQoKTsiKTtlbHNlIGlmKDM1Njc0PT09ZHx8MzU2NzU9PT1kfHwzNTY3Nj09PWQpbT10Lmdsb2JhbC5kZWYoIm5ldyBGbG9hdDMyQXJyYXkoWyIrQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocCkrIl0pIikscD0yLDM1Njc1PT09ZD9wPTM6MzU2NzY9PT1kJiYocD00KSxyKHUsIi51bmlmb3JtTWF0cml4IixwLCJmdigiLGIsIixmYWxzZSwiLG0sIik7Iik7ZWxzZXtzd2l0Y2goZCl7Y2FzZSA1MTI2Omw9IjFmIjticmVhaztjYXNlIDM1NjY0Omw9IjJmIjticmVhaztjYXNlIDM1NjY1Omw9IjNmIjticmVhaztjYXNlIDM1NjY2Omw9IjRmIjticmVhaztjYXNlIDM1NjcwOmNhc2UgNTEyNDpsPSIxaSI7YnJlYWs7Y2FzZSAzNTY3MTpjYXNlIDM1NjY3Omw9IjJpIjticmVhaztjYXNlIDM1NjcyOmNhc2UgMzU2Njg6bD0iM2kiO2JyZWFrO2Nhc2UgMzU2NzM6bD0iNGkiO2JyZWFrO2Nhc2UgMzU2Njk6bD0iNGkifTE8bT8obCs9InYiLHA9dC5nbG9iYWwuZGVmKCJbIitBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChwKSsiXSIpKTpwPWcocCk/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocCk6cCxyKHUsIi51bmlmb3JtIixsLCIoIixiLCIsIixwLCIpOyIpfWNvbnRpbnVlfXg9di5hcHBlbmQodCxyKX1lbHNle2lmKCFvKFN0KSljb250aW51ZTt4PXIuZGVmKGMudW5pZm9ybXMsIlsiLGUuaWQocCksIl0iKX1zd2l0Y2goMzU2Nzg9PT1kP3IoImlmKCIseCwiJiYiLHgsJy5fcmVnbFR5cGU9PT0iZnJhbWVidWZmZXIiKXsnLHgsIj0iLHgsIi5jb2xvclswXTsiLCJ9Iik6MzU2ODA9PT1kJiZyKCJpZigiLHgsIiYmIix4LCcuX3JlZ2xUeXBlPT09ImZyYW1lYnVmZmVyQ3ViZSIpeycseCwiPSIseCwiLmNvbG9yWzBdOyIsIn0iKSxwPTEsZCl7Y2FzZSAzNTY3ODpjYXNlIDM1NjgwOmQ9ci5kZWYoeCwiLl90ZXh0dXJlIikscih1LCIudW5pZm9ybTFpKCIsYiwiLCIsZCwiLmJpbmQoKSk7Iiksci5leGl0KGQsIi51bmJpbmQoKTsiKTtjb250aW51ZTtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpsPSIxaSI7YnJlYWs7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOmw9IjJpIixwPTI7YnJlYWs7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOmw9IjNpIixwPTM7YnJlYWs7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOmw9IjRpIixwPTQ7YnJlYWs7Y2FzZSA1MTI2Omw9IjFmIjticmVhaztjYXNlIDM1NjY0Omw9IjJmIixwPTI7YnJlYWs7Y2FzZSAzNTY2NTpsPSIzZiIscD0zO2JyZWFrO2Nhc2UgMzU2NjY6bD0iNGYiLHA9NDticmVhaztjYXNlIDM1Njc0Omw9Ik1hdHJpeDJmdiI7YnJlYWs7Y2FzZSAzNTY3NTpsPSJNYXRyaXgzZnYiO2JyZWFrO2Nhc2UgMzU2NzY6bD0iTWF0cml4NGZ2In1pZigtMT09PWwuaW5kZXhPZigiTWF0cml4IikmJjE8bSYmKGwrPSJ2IixwPTEpLCJNIj09PWwuY2hhckF0KDApKXtyKHUsIi51bmlmb3JtIixsLCIoIixiLCIsIik7Yj1NYXRoLnBvdyhkLTM1Njc0KzIsMik7dmFyIF89dC5nbG9iYWwuZGVmKCJuZXcgRmxvYXQzMkFycmF5KCIsYiwiKSIpO0FycmF5LmlzQXJyYXkoeCk/cigiZmFsc2UsKCIsYShiLChmdW5jdGlvbih0KXtyZXR1cm4gXysiWyIrdCsiXT0iK3hbdF19KSksIiwiLF8sIikiKTpyKCJmYWxzZSwoQXJyYXkuaXNBcnJheSgiLHgsIil8fCIseCwiIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KT8iLHgsIjooIixhKGIsKGZ1bmN0aW9uKHQpe3JldHVybiBfKyJbIit0KyJdPSIreCsiWyIrdCsiXSJ9KSksIiwiLF8sIikiKSxyKCIpOyIpfWVsc2V7aWYoMTxwKXtkPVtdO3ZhciB3PVtdO2ZvcihtPTA7bTxwOysrbSlBcnJheS5pc0FycmF5KHgpP3cucHVzaCh4W21dKTp3LnB1c2goci5kZWYoeCsiWyIrbSsiXSIpKSxzJiZkLnB1c2goci5kZWYoKSk7cyYmcigiaWYoISIsdC5iYXRjaElkLCJ8fCIsZC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrIiE9PSIrd1tlXX0pKS5qb2luKCJ8fCIpLCIpeyIsZC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrIj0iK3dbZV0rIjsifSkpLmpvaW4oIiIpKSxyKHUsIi51bmlmb3JtIixsLCIoIixiLCIsIix3LmpvaW4oIiwiKSwiKTsiKX1lbHNlIHMmJihkPXIuZGVmKCkscigiaWYoISIsdC5iYXRjaElkLCJ8fCIsZCwiIT09Iix4LCIpeyIsZCwiPSIseCwiOyIpKSxyKHUsIi51bmlmb3JtIixsLCIoIixiLCIsIix4LCIpOyIpO3MmJnIoIn0iKX19fWZ1bmN0aW9uIHEodCxlLHIsbil7ZnVuY3Rpb24gaShpKXt2YXIgYT1oW2ldO3JldHVybiBhP2EuY29udGV4dERlcCYmbi5jb250ZXh0RHluYW1pY3x8YS5wcm9wRGVwP2EuYXBwZW5kKHQscik6YS5hcHBlbmQodCxlKTplLmRlZihmLCIuIixpKX1mdW5jdGlvbiBhKCl7ZnVuY3Rpb24gdCgpe3IobCwiLmRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKCIsW2QsZyx2LG0rIjw8KCgiK3YrIi01MTIxKT4+MSkiLHNdLCIpOyIpfWZ1bmN0aW9uIGUoKXtyKGwsIi5kcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoIixbZCxtLGcsc10sIik7Iil9cCYmIm51bGwiIT09cD95P3QoKToocigiaWYoIixwLCIpeyIpLHQoKSxyKCJ9ZWxzZXsiKSxlKCkscigifSIpKTplKCl9ZnVuY3Rpb24gbygpe2Z1bmN0aW9uIHQoKXtyKHUrIi5kcmF3RWxlbWVudHMoIitbZCxnLHYsbSsiPDwoKCIrdisiLTUxMjEpPj4xKSJdKyIpOyIpfWZ1bmN0aW9uIGUoKXtyKHUrIi5kcmF3QXJyYXlzKCIrW2QsbSxnXSsiKTsiKX1wJiYibnVsbCIhPT1wP3k/dCgpOihyKCJpZigiLHAsIil7IiksdCgpLHIoIn1lbHNleyIpLGUoKSxyKCJ9IikpOmUoKX12YXIgcyxsLGM9dC5zaGFyZWQsdT1jLmdsLGY9Yy5kcmF3LGg9bi5kcmF3LHA9ZnVuY3Rpb24oKXt2YXIgaT1oLmVsZW1lbnRzLGE9ZTtyZXR1cm4gaT8oKGkuY29udGV4dERlcCYmbi5jb250ZXh0RHluYW1pY3x8aS5wcm9wRGVwKSYmKGE9ciksaT1pLmFwcGVuZCh0LGEpLGguZWxlbWVudHNBY3RpdmUmJmEoImlmKCIraSsiKSIrdSsiLmJpbmRCdWZmZXIoMzQ5NjMsIitpKyIuYnVmZmVyLmJ1ZmZlcik7IikpOihpPWEuZGVmKCksYShpLCI9IixmLCIuIiwiZWxlbWVudHMiLCI7IiwiaWYoIixpLCIpeyIsdSwiLmJpbmRCdWZmZXIoIiwzNDk2MywiLCIsaSwiLmJ1ZmZlci5idWZmZXIpO30iLCJlbHNlIGlmKCIsYy52YW8sIi5jdXJyZW50VkFPKXsiLGksIj0iLHQuc2hhcmVkLmVsZW1lbnRzKyIuZ2V0RWxlbWVudHMoIitjLnZhbywiLmN1cnJlbnRWQU8uZWxlbWVudHMpOyIsbnQ/IiI6ImlmKCIraSsiKSIrdSsiLmJpbmRCdWZmZXIoMzQ5NjMsIitpKyIuYnVmZmVyLmJ1ZmZlcik7IiwifSIpKSxpfSgpLGQ9aSgicHJpbWl0aXZlIiksbT1pKCJvZmZzZXQiKSxnPWZ1bmN0aW9uKCl7dmFyIGk9aC5jb3VudCxhPWU7cmV0dXJuIGk/KChpLmNvbnRleHREZXAmJm4uY29udGV4dER5bmFtaWN8fGkucHJvcERlcCkmJihhPXIpLGk9aS5hcHBlbmQodCxhKSk6aT1hLmRlZihmLCIuIiwiY291bnQiKSxpfSgpO2lmKCJudW1iZXIiPT10eXBlb2YgZyl7aWYoMD09PWcpcmV0dXJufWVsc2UgcigiaWYoIixnLCIpeyIpLHIuZXhpdCgifSIpO3R0JiYocz1pKCJpbnN0YW5jZXMiKSxsPXQuaW5zdGFuY2luZyk7dmFyIHY9cCsiLnR5cGUiLHk9aC5lbGVtZW50cyYmRChoLmVsZW1lbnRzKSYmIWgudmFvQWN0aXZlO3R0JiYoIm51bWJlciIhPXR5cGVvZiBzfHwwPD1zKT8ic3RyaW5nIj09dHlwZW9mIHM/KHIoImlmKCIscywiPjApeyIpLGEoKSxyKCJ9ZWxzZSBpZigiLHMsIjwwKXsiKSxvKCkscigifSIpKTphKCk6bygpfWZ1bmN0aW9uIEcodCxlLHIsbixpKXtyZXR1cm4gaT0oZT1iKCkpLnByb2MoImJvZHkiLGkpLHR0JiYoZS5pbnN0YW5jaW5nPWkuZGVmKGUuc2hhcmVkLmV4dGVuc2lvbnMsIi5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzIikpLHQoZSxpLHIsbiksZS5jb21waWxlKCkuYm9keX1mdW5jdGlvbiBZKHQsZSxyLG4pe0IodCxlKSxyLnVzZVZBTz9yLmRyYXdWQU8/ZSh0LnNoYXJlZC52YW8sIi5zZXRWQU8oIixyLmRyYXdWQU8uYXBwZW5kKHQsZSksIik7Iik6ZSh0LnNoYXJlZC52YW8sIi5zZXRWQU8oIix0LnNoYXJlZC52YW8sIi50YXJnZXRWQU8pOyIpOihlKHQuc2hhcmVkLnZhbywiLnNldFZBTyhudWxsKTsiKSxVKHQsZSxyLG4uYXR0cmlidXRlcywoZnVuY3Rpb24oKXtyZXR1cm4hMH0pKSksSCh0LGUscixuLnVuaWZvcm1zLChmdW5jdGlvbigpe3JldHVybiEwfSksITEpLHEodCxlLGUscil9ZnVuY3Rpb24gVyh0LGUscixuKXtmdW5jdGlvbiBpKCl7cmV0dXJuITB9dC5iYXRjaElkPSJhMSIsQih0LGUpLFUodCxlLHIsbi5hdHRyaWJ1dGVzLGkpLEgodCxlLHIsbi51bmlmb3JtcyxpLCExKSxxKHQsZSxlLHIpfWZ1bmN0aW9uIFgodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5jb250ZXh0RGVwJiZvfHx0LnByb3BEZXB9ZnVuY3Rpb24gYSh0KXtyZXR1cm4haSh0KX1CKHQsZSk7dmFyIG89ci5jb250ZXh0RGVwLHM9ZS5kZWYoKSxsPWUuZGVmKCk7dC5zaGFyZWQucHJvcHM9bCx0LmJhdGNoSWQ9czt2YXIgYz10LnNjb3BlKCksdT10LnNjb3BlKCk7ZShjLmVudHJ5LCJmb3IoIixzLCI9MDsiLHMsIjwiLCJhMSIsIjsrKyIscywiKXsiLGwsIj0iLCJhMCIsIlsiLHMsIl07Iix1LCJ9IixjLmV4aXQpLHIubmVlZHNDb250ZXh0JiZNKHQsdSxyLmNvbnRleHQpLHIubmVlZHNGcmFtZWJ1ZmZlciYmUyh0LHUsci5mcmFtZWJ1ZmZlciksTCh0LHUsci5zdGF0ZSxpKSxyLnByb2ZpbGUmJmkoci5wcm9maWxlKSYmTih0LHUsciwhMSwhMCksbj8oci51c2VWQU8/ci5kcmF3VkFPP2koci5kcmF3VkFPKT91KHQuc2hhcmVkLnZhbywiLnNldFZBTygiLHIuZHJhd1ZBTy5hcHBlbmQodCx1KSwiKTsiKTpjKHQuc2hhcmVkLnZhbywiLnNldFZBTygiLHIuZHJhd1ZBTy5hcHBlbmQodCxjKSwiKTsiKTpjKHQuc2hhcmVkLnZhbywiLnNldFZBTygiLHQuc2hhcmVkLnZhbywiLnRhcmdldFZBTyk7Iik6KGModC5zaGFyZWQudmFvLCIuc2V0VkFPKG51bGwpOyIpLFUodCxjLHIsbi5hdHRyaWJ1dGVzLGEpLFUodCx1LHIsbi5hdHRyaWJ1dGVzLGkpKSxIKHQsYyxyLG4udW5pZm9ybXMsYSwhMSksSCh0LHUscixuLnVuaWZvcm1zLGksITApLHEodCxjLHUscikpOihlPXQuZ2xvYmFsLmRlZigie30iKSxuPXIuc2hhZGVyLnByb2dWYXIuYXBwZW5kKHQsdSksbD11LmRlZihuLCIuaWQiKSxjPXUuZGVmKGUsIlsiLGwsIl0iKSx1KHQuc2hhcmVkLmdsLCIudXNlUHJvZ3JhbSgiLG4sIi5wcm9ncmFtKTsiLCJpZighIixjLCIpeyIsYywiPSIsZSwiWyIsbCwiXT0iLHQubGluaygoZnVuY3Rpb24oZSl7cmV0dXJuIEcoVyx0LHIsZSwyKX0pKSwiKCIsbiwiKTt9IixjLCIuY2FsbCh0aGlzLGEwWyIscywiXSwiLHMsIik7IikpfWZ1bmN0aW9uIFoodCxyKXtmdW5jdGlvbiBuKGUpe3ZhciBuPXIuc2hhZGVyW2VdO24mJmkuc2V0KGEuc2hhZGVyLCIuIitlLG4uYXBwZW5kKHQsaSkpfXZhciBpPXQucHJvYygic2NvcGUiLDMpO3QuYmF0Y2hJZD0iYTIiO3ZhciBhPXQuc2hhcmVkLG89YS5jdXJyZW50O00odCxpLHIuY29udGV4dCksci5mcmFtZWJ1ZmZlciYmci5mcmFtZWJ1ZmZlci5hcHBlbmQodCxpKSxPKE9iamVjdC5rZXlzKHIuc3RhdGUpKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1yLnN0YXRlW2VdLmFwcGVuZCh0LGkpO2cobik/bi5mb3JFYWNoKChmdW5jdGlvbihyLG4pe2kuc2V0KHQubmV4dFtlXSwiWyIrbisiXSIscil9KSk6aS5zZXQoYS5uZXh0LCIuIitlLG4pfSkpLE4odCxpLHIsITAsITApLFsiZWxlbWVudHMiLCJvZmZzZXQiLCJjb3VudCIsImluc3RhbmNlcyIsInByaW1pdGl2ZSJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXIuZHJhd1tlXTtuJiZpLnNldChhLmRyYXcsIi4iK2UsIiIrbi5hcHBlbmQodCxpKSl9KSksT2JqZWN0LmtleXMoci51bmlmb3JtcykuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIG89ci51bmlmb3Jtc1tuXS5hcHBlbmQodCxpKTtBcnJheS5pc0FycmF5KG8pJiYobz0iWyIrby5qb2luKCkrIl0iKSxpLnNldChhLnVuaWZvcm1zLCJbIitlLmlkKG4pKyJdIixvKX0pKSxPYmplY3Qua2V5cyhyLmF0dHJpYnV0ZXMpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXIuYXR0cmlidXRlc1tlXS5hcHBlbmQodCxpKSxhPXQuc2NvcGVBdHRyaWIoZSk7T2JqZWN0LmtleXMobmV3IFEpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2kuc2V0KGEsIi4iK3Qsblt0XSl9KSl9KSksci5zY29wZVZBTyYmaS5zZXQoYS52YW8sIi50YXJnZXRWQU8iLHIuc2NvcGVWQU8uYXBwZW5kKHQsaSkpLG4oInZlcnQiKSxuKCJmcmFnIiksMDxPYmplY3Qua2V5cyhyLnN0YXRlKS5sZW5ndGgmJihpKG8sIi5kaXJ0eT10cnVlOyIpLGkuZXhpdChvLCIuZGlydHk9dHJ1ZTsiKSksaSgiYTEoIix0LnNoYXJlZC5jb250ZXh0LCIsYTAsIix0LmJhdGNoSWQsIik7Iil9ZnVuY3Rpb24gSih0LGUscil7dmFyIG49ZS5zdGF0aWNbcl07aWYobiYmZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYhZyh0KSl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLHI9MDtyPGUubGVuZ3RoOysrcilpZihWLmlzRHluYW1pYyh0W2Vbcl1dKSlyZXR1cm4hMDtyZXR1cm4hMX19KG4pKXt2YXIgaT10Lmdsb2JhbCxhPU9iamVjdC5rZXlzKG4pLG89ITEscz0hMSxsPSExLGM9dC5nbG9iYWwuZGVmKCJ7fSIpO2EuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bltlXTtpZihWLmlzRHluYW1pYyhyKSkiZnVuY3Rpb24iPT10eXBlb2YgciYmKHI9bltlXT1WLnVuYm94KHIpKSxlPUYocixudWxsKSxvPW98fGUudGhpc0RlcCxsPWx8fGUucHJvcERlcCxzPXN8fGUuY29udGV4dERlcDtlbHNle3N3aXRjaChpKGMsIi4iLGUsIj0iKSx0eXBlb2Ygcil7Y2FzZSJudW1iZXIiOmkocik7YnJlYWs7Y2FzZSJzdHJpbmciOmkoJyInLHIsJyInKTticmVhaztjYXNlIm9iamVjdCI6QXJyYXkuaXNBcnJheShyKSYmaSgiWyIsci5qb2luKCksIl0iKTticmVhaztkZWZhdWx0OmkodC5saW5rKHIpKX1pKCI7Iil9fSkpLGUuZHluYW1pY1tyXT1uZXcgVi5EeW5hbWljVmFyaWFibGUoNCx7dGhpc0RlcDpvLGNvbnRleHREZXA6cyxwcm9wRGVwOmwscmVmOmMsYXBwZW5kOmZ1bmN0aW9uKHQsZSl7YS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgaT1uW3JdO1YuaXNEeW5hbWljKGkpJiYoaT10Lmludm9rZShlLGkpLGUoYywiLiIsciwiPSIsaSwiOyIpKX0pKX19KSxkZWxldGUgZS5zdGF0aWNbcl19fXZhciBRPXUuUmVjb3JkLCQ9e2FkZDozMjc3NCxzdWJ0cmFjdDozMjc3OCwicmV2ZXJzZSBzdWJ0cmFjdCI6MzI3Nzl9O3IuZXh0X2JsZW5kX21pbm1heCYmKCQubWluPTMyNzc1LCQubWF4PTMyNzc2KTt2YXIgdHQ9ci5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzLGV0PXIud2ViZ2xfZHJhd19idWZmZXJzLG50PXIub2VzX3ZlcnRleF9hcnJheV9vYmplY3QsaXQ9e2RpcnR5OiEwLHByb2ZpbGU6bS5wcm9maWxlfSxhdD17fSxvdD1bXSxzdD17fSxsdD17fTt5KCJkaXRoZXIiLDMwMjQpLHkoImJsZW5kLmVuYWJsZSIsMzA0MikseCgiYmxlbmQuY29sb3IiLCJibGVuZENvbG9yIixbMCwwLDAsMF0pLHgoImJsZW5kLmVxdWF0aW9uIiwiYmxlbmRFcXVhdGlvblNlcGFyYXRlIixbMzI3NzQsMzI3NzRdKSx4KCJibGVuZC5mdW5jIiwiYmxlbmRGdW5jU2VwYXJhdGUiLFsxLDAsMSwwXSkseSgiZGVwdGguZW5hYmxlIiwyOTI5LCEwKSx4KCJkZXB0aC5mdW5jIiwiZGVwdGhGdW5jIiw1MTMpLHgoImRlcHRoLnJhbmdlIiwiZGVwdGhSYW5nZSIsWzAsMV0pLHgoImRlcHRoLm1hc2siLCJkZXB0aE1hc2siLCEwKSx4KCJjb2xvck1hc2siLCJjb2xvck1hc2siLFshMCwhMCwhMCwhMF0pLHkoImN1bGwuZW5hYmxlIiwyODg0KSx4KCJjdWxsLmZhY2UiLCJjdWxsRmFjZSIsMTAyOSkseCgiZnJvbnRGYWNlIiwiZnJvbnRGYWNlIiwyMzA1KSx4KCJsaW5lV2lkdGgiLCJsaW5lV2lkdGgiLDEpLHkoInBvbHlnb25PZmZzZXQuZW5hYmxlIiwzMjgyMykseCgicG9seWdvbk9mZnNldC5vZmZzZXQiLCJwb2x5Z29uT2Zmc2V0IixbMCwwXSkseSgic2FtcGxlLmFscGhhIiwzMjkyNikseSgic2FtcGxlLmVuYWJsZSIsMzI5MjgpLHgoInNhbXBsZS5jb3ZlcmFnZSIsInNhbXBsZUNvdmVyYWdlIixbMSwhMV0pLHkoInN0ZW5jaWwuZW5hYmxlIiwyOTYwKSx4KCJzdGVuY2lsLm1hc2siLCJzdGVuY2lsTWFzayIsLTEpLHgoInN0ZW5jaWwuZnVuYyIsInN0ZW5jaWxGdW5jIixbNTE5LDAsLTFdKSx4KCJzdGVuY2lsLm9wRnJvbnQiLCJzdGVuY2lsT3BTZXBhcmF0ZSIsWzEwMjgsNzY4MCw3NjgwLDc2ODBdKSx4KCJzdGVuY2lsLm9wQmFjayIsInN0ZW5jaWxPcFNlcGFyYXRlIixbMTAyOSw3NjgwLDc2ODAsNzY4MF0pLHkoInNjaXNzb3IuZW5hYmxlIiwzMDg5KSx4KCJzY2lzc29yLmJveCIsInNjaXNzb3IiLFswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSkseCgidmlld3BvcnQiLCJ2aWV3cG9ydCIsWzAsMCx0LmRyYXdpbmdCdWZmZXJXaWR0aCx0LmRyYXdpbmdCdWZmZXJIZWlnaHRdKTt2YXIgY3Q9e2dsOnQsY29udGV4dDpwLHN0cmluZ3M6ZSxuZXh0OmF0LGN1cnJlbnQ6aXQsZHJhdzpoLGVsZW1lbnRzOm8sYnVmZmVyOmksc2hhZGVyOmYsYXR0cmlidXRlczp1LnN0YXRlLHZhbzp1LHVuaWZvcm1zOmMsZnJhbWVidWZmZXI6bCxleHRlbnNpb25zOnIsdGltZXI6ZCxpc0J1ZmZlckFyZ3M6SX0sdXQ9e3ByaW1UeXBlczpydCxjb21wYXJlRnVuY3M6a3QsYmxlbmRGdW5jczpUdCxibGVuZEVxdWF0aW9uczokLHN0ZW5jaWxPcHM6QXQsZ2xUeXBlczpLLG9yaWVudGF0aW9uVHlwZTpNdH07ZXQmJih1dC5iYWNrQnVmZmVyPVsxMDI5XSx1dC5kcmF3QnVmZmVyPWEobi5tYXhEcmF3YnVmZmVycywoZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10P1swXTphKHQsKGZ1bmN0aW9uKHQpe3JldHVybiAzNjA2NCt0fSkpfSkpKTt2YXIgZnQ9MDtyZXR1cm57bmV4dDphdCxjdXJyZW50Oml0LHByb2NzOmZ1bmN0aW9uKCl7dmFyIHQ9YigpLGU9dC5wcm9jKCJwb2xsIiksaT10LnByb2MoInJlZnJlc2giKSxvPXQuYmxvY2soKTtlKG8pLGkobyk7dmFyIHMsbD10LnNoYXJlZCxjPWwuZ2wsdT1sLm5leHQsZj1sLmN1cnJlbnQ7byhmLCIuZGlydHk9ZmFsc2U7IiksUyh0LGUpLFModCxpLG51bGwsITApLHR0JiYocz10LmxpbmsodHQpKSxyLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0JiZpKHQubGluayhyLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0KSwiLmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTsiKTtmb3IodmFyIGg9MDtoPG4ubWF4QXR0cmlidXRlczsrK2gpe3ZhciBwPWkuZGVmKGwuYXR0cmlidXRlcywiWyIsaCwiXSIpLGQ9dC5jb25kKHAsIi5idWZmZXIiKTtkLnRoZW4oYywiLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KCIsaCwiKTsiLGMsIi5iaW5kQnVmZmVyKCIsMzQ5NjIsIiwiLHAsIi5idWZmZXIuYnVmZmVyKTsiLGMsIi52ZXJ0ZXhBdHRyaWJQb2ludGVyKCIsaCwiLCIscCwiLnNpemUsIixwLCIudHlwZSwiLHAsIi5ub3JtYWxpemVkLCIscCwiLnN0cmlkZSwiLHAsIi5vZmZzZXQpOyIpLmVsc2UoYywiLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSgiLGgsIik7IixjLCIudmVydGV4QXR0cmliNGYoIixoLCIsIixwLCIueCwiLHAsIi55LCIscCwiLnosIixwLCIudyk7IixwLCIuYnVmZmVyPW51bGw7IiksaShkKSx0dCYmaShzLCIudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKCIsaCwiLCIscCwiLmRpdmlzb3IpOyIpfXJldHVybiBpKHQuc2hhcmVkLnZhbywiLmN1cnJlbnRWQU89bnVsbDsiLHQuc2hhcmVkLnZhbywiLnNldFZBTygiLHQuc2hhcmVkLnZhbywiLnRhcmdldFZBTyk7IiksT2JqZWN0LmtleXMoc3QpLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBuPXN0W3JdLGE9by5kZWYodSwiLiIscikscz10LmJsb2NrKCk7cygiaWYoIixhLCIpeyIsYywiLmVuYWJsZSgiLG4sIil9ZWxzZXsiLGMsIi5kaXNhYmxlKCIsbiwiKX0iLGYsIi4iLHIsIj0iLGEsIjsiKSxpKHMpLGUoImlmKCIsYSwiIT09IixmLCIuIixyLCIpeyIscywifSIpfSkpLE9iamVjdC5rZXlzKGx0KS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbixzLGw9bHRbcl0saD1pdFtyXSxwPXQuYmxvY2soKTtwKGMsIi4iLGwsIigiKSxnKGgpPyhsPWgubGVuZ3RoLG49dC5nbG9iYWwuZGVmKHUsIi4iLHIpLHM9dC5nbG9iYWwuZGVmKGYsIi4iLHIpLHAoYShsLChmdW5jdGlvbih0KXtyZXR1cm4gbisiWyIrdCsiXSJ9KSksIik7IixhKGwsKGZ1bmN0aW9uKHQpe3JldHVybiBzKyJbIit0KyJdPSIrbisiWyIrdCsiXTsifSkpLmpvaW4oIiIpKSxlKCJpZigiLGEobCwoZnVuY3Rpb24odCl7cmV0dXJuIG4rIlsiK3QrIl0hPT0iK3MrIlsiK3QrIl0ifSkpLmpvaW4oInx8IiksIil7IixwLCJ9IikpOihuPW8uZGVmKHUsIi4iLHIpLHM9by5kZWYoZiwiLiIscikscChuLCIpOyIsZiwiLiIsciwiPSIsbiwiOyIpLGUoImlmKCIsbiwiIT09IixzLCIpeyIscCwifSIpKSxpKHApfSkpLHQuY29tcGlsZSgpfSgpLGNvbXBpbGU6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1iKCk7YS5zdGF0cz1hLmxpbmsoaSksT2JqZWN0LmtleXMoZS5zdGF0aWMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe0ooYSxlLHQpfSkpLHd0LmZvckVhY2goKGZ1bmN0aW9uKGUpe0ooYSx0LGUpfSkpO3ZhciBvPUEodCxlLHIsbik7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5wcm9jKCJkcmF3IiwxKTtCKHQsciksTSh0LHIsZS5jb250ZXh0KSxTKHQscixlLmZyYW1lYnVmZmVyKSxFKHQscixlKSxMKHQscixlLnN0YXRlKSxOKHQscixlLCExLCEwKTt2YXIgbj1lLnNoYWRlci5wcm9nVmFyLmFwcGVuZCh0LHIpO2lmKHIodC5zaGFyZWQuZ2wsIi51c2VQcm9ncmFtKCIsbiwiLnByb2dyYW0pOyIpLGUuc2hhZGVyLnByb2dyYW0pWSh0LHIsZSxlLnNoYWRlci5wcm9ncmFtKTtlbHNle3IodC5zaGFyZWQudmFvLCIuc2V0VkFPKG51bGwpOyIpO3ZhciBpPXQuZ2xvYmFsLmRlZigie30iKSxhPXIuZGVmKG4sIi5pZCIpLG89ci5kZWYoaSwiWyIsYSwiXSIpO3IodC5jb25kKG8pLnRoZW4obywiLmNhbGwodGhpcyxhMCk7IikuZWxzZShvLCI9IixpLCJbIixhLCJdPSIsdC5saW5rKChmdW5jdGlvbihyKXtyZXR1cm4gRyhZLHQsZSxyLDEpfSkpLCIoIixuLCIpOyIsbywiLmNhbGwodGhpcyxhMCk7IikpfTA8T2JqZWN0LmtleXMoZS5zdGF0ZSkubGVuZ3RoJiZyKHQuc2hhcmVkLmN1cnJlbnQsIi5kaXJ0eT10cnVlOyIpLHQuc2hhcmVkLnZhbyYmcih0LnNoYXJlZC52YW8sIi5zZXRWQU8obnVsbCk7Iil9KGEsbyksWihhLG8pLGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5jb250ZXh0RGVwJiZpfHx0LnByb3BEZXB9dmFyIG49dC5wcm9jKCJiYXRjaCIsMik7dC5iYXRjaElkPSIwIixCKHQsbik7dmFyIGk9ITEsYT0hMDtPYmplY3Qua2V5cyhlLmNvbnRleHQpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2k9aXx8ZS5jb250ZXh0W3RdLnByb3BEZXB9KSksaXx8KE0odCxuLGUuY29udGV4dCksYT0hMSk7dmFyIG89ITE7aWYoKHM9ZS5mcmFtZWJ1ZmZlcik/KHMucHJvcERlcD9pPW89ITA6cy5jb250ZXh0RGVwJiZpJiYobz0hMCksb3x8Uyh0LG4scykpOlModCxuLG51bGwpLGUuc3RhdGUudmlld3BvcnQmJmUuc3RhdGUudmlld3BvcnQucHJvcERlcCYmKGk9ITApLEUodCxuLGUpLEwodCxuLGUuc3RhdGUsKGZ1bmN0aW9uKHQpe3JldHVybiFyKHQpfSkpLGUucHJvZmlsZSYmcihlLnByb2ZpbGUpfHxOKHQsbixlLCExLCJhMSIpLGUuY29udGV4dERlcD1pLGUubmVlZHNDb250ZXh0PWEsZS5uZWVkc0ZyYW1lYnVmZmVyPW8sKGE9ZS5zaGFkZXIucHJvZ1ZhcikuY29udGV4dERlcCYmaXx8YS5wcm9wRGVwKVgodCxuLGUsbnVsbCk7ZWxzZSBpZihhPWEuYXBwZW5kKHQsbiksbih0LnNoYXJlZC5nbCwiLnVzZVByb2dyYW0oIixhLCIucHJvZ3JhbSk7IiksZS5zaGFkZXIucHJvZ3JhbSlYKHQsbixlLGUuc2hhZGVyLnByb2dyYW0pO2Vsc2V7bih0LnNoYXJlZC52YW8sIi5zZXRWQU8obnVsbCk7Iik7dmFyIHM9dC5nbG9iYWwuZGVmKCJ7fSIpLGw9KG89bi5kZWYoYSwiLmlkIiksbi5kZWYocywiWyIsbywiXSIpKTtuKHQuY29uZChsKS50aGVuKGwsIi5jYWxsKHRoaXMsYTAsYTEpOyIpLmVsc2UobCwiPSIscywiWyIsbywiXT0iLHQubGluaygoZnVuY3Rpb24ocil7cmV0dXJuIEcoWCx0LGUsciwyKX0pKSwiKCIsYSwiKTsiLGwsIi5jYWxsKHRoaXMsYTAsYTEpOyIpKX0wPE9iamVjdC5rZXlzKGUuc3RhdGUpLmxlbmd0aCYmbih0LnNoYXJlZC5jdXJyZW50LCIuZGlydHk9dHJ1ZTsiKSx0LnNoYXJlZC52YW8mJm4odC5zaGFyZWQudmFvLCIuc2V0VkFPKG51bGwpOyIpfShhLG8pLGooYS5jb21waWxlKCkse2Rlc3Ryb3k6ZnVuY3Rpb24oKXtvLnNoYWRlci5wcm9ncmFtLmRlc3Ryb3koKX19KX19fWZ1bmN0aW9uIE4odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZih0W3JdPT09ZSlyZXR1cm4gcjtyZXR1cm4tMX12YXIgaj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1PYmplY3Qua2V5cyhlKSxuPTA7bjxyLmxlbmd0aDsrK24pdFtyW25dXT1lW3Jbbl1dO3JldHVybiB0fSxVPTAsVj17RHluYW1pY1ZhcmlhYmxlOnQsZGVmaW5lOmZ1bmN0aW9uKHIsbil7cmV0dXJuIG5ldyB0KHIsZShuKyIiKSl9LGlzRHluYW1pYzpmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmIWUuX3JlZ2xUeXBlfHxlIGluc3RhbmNlb2YgdH0sdW5ib3g6ZnVuY3Rpb24gZShyLG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByP25ldyB0KDAscik6Im51bWJlciI9PXR5cGVvZiByfHwiYm9vbGVhbiI9PXR5cGVvZiByP25ldyB0KDUscik6QXJyYXkuaXNBcnJheShyKT9uZXcgdCg2LHIubWFwKChmdW5jdGlvbih0LHIpe3JldHVybiBlKHQsbisiWyIrcisiXSIpfSkpKTpyIGluc3RhbmNlb2YgdD9yOnZvaWQgMH0sYWNjZXNzb3I6ZX0sSD17bmV4dDoiZnVuY3Rpb24iPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP2Z1bmN0aW9uKHQpe3JldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9OmZ1bmN0aW9uKHQpe3JldHVybiBzZXRUaW1lb3V0KHQsMTYpfSxjYW5jZWw6ImZ1bmN0aW9uIj09dHlwZW9mIGNhbmNlbEFuaW1hdGlvbkZyYW1lP2Z1bmN0aW9uKHQpe3JldHVybiBjYW5jZWxBbmltYXRpb25GcmFtZSh0KX06Y2xlYXJUaW1lb3V0fSxxPSJ1bmRlZmluZWQiIT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX06ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9LEc9cygpO0cuemVybz1zKCk7dmFyIFk9ZnVuY3Rpb24odCxlKXt2YXIgcj0xO2UuZXh0X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJiYocj10LmdldFBhcmFtZXRlcigzNDA0NykpO3ZhciBuPTEsaT0xO2Uud2ViZ2xfZHJhd19idWZmZXJzJiYobj10LmdldFBhcmFtZXRlcigzNDg1MiksaT10LmdldFBhcmFtZXRlcigzNjA2MykpO3ZhciBhPSEhZS5vZXNfdGV4dHVyZV9mbG9hdDtpZihhKXthPXQuY3JlYXRlVGV4dHVyZSgpLHQuYmluZFRleHR1cmUoMzU1MyxhKSx0LnRleEltYWdlMkQoMzU1MywwLDY0MDgsMSwxLDAsNjQwOCw1MTI2LG51bGwpO3ZhciBvPXQuY3JlYXRlRnJhbWVidWZmZXIoKTtpZih0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxvKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDY0LDM1NTMsYSwwKSx0LmJpbmRUZXh0dXJlKDM1NTMsbnVsbCksMzYwNTMhPT10LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApKWE9ITE7ZWxzZXt0LnZpZXdwb3J0KDAsMCwxLDEpLHQuY2xlYXJDb2xvcigxLDAsMCwxKSx0LmNsZWFyKDE2Mzg0KTt2YXIgcz1HLmFsbG9jVHlwZSg1MTI2LDQpO3QucmVhZFBpeGVscygwLDAsMSwxLDY0MDgsNTEyNixzKSx0LmdldEVycm9yKCk/YT0hMToodC5kZWxldGVGcmFtZWJ1ZmZlcihvKSx0LmRlbGV0ZVRleHR1cmUoYSksYT0xPT09c1swXSksRy5mcmVlVHlwZShzKX19cmV0dXJuIHM9ITAsInVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJigvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KXx8L1RyaWRlbnRcLy8udGVzdChuYXZpZ2F0b3IuYXBwVmVyc2lvbil8fC9FZGdlLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKXx8KHM9dC5jcmVhdGVUZXh0dXJlKCksbz1HLmFsbG9jVHlwZSg1MTIxLDM2KSx0LmFjdGl2ZVRleHR1cmUoMzM5ODQpLHQuYmluZFRleHR1cmUoMzQwNjcscyksdC50ZXhJbWFnZTJEKDM0MDY5LDAsNjQwOCwzLDMsMCw2NDA4LDUxMjEsbyksRy5mcmVlVHlwZShvKSx0LmJpbmRUZXh0dXJlKDM0MDY3LG51bGwpLHQuZGVsZXRlVGV4dHVyZShzKSxzPSF0LmdldEVycm9yKCkpLHtjb2xvckJpdHM6W3QuZ2V0UGFyYW1ldGVyKDM0MTApLHQuZ2V0UGFyYW1ldGVyKDM0MTEpLHQuZ2V0UGFyYW1ldGVyKDM0MTIpLHQuZ2V0UGFyYW1ldGVyKDM0MTMpXSxkZXB0aEJpdHM6dC5nZXRQYXJhbWV0ZXIoMzQxNCksc3RlbmNpbEJpdHM6dC5nZXRQYXJhbWV0ZXIoMzQxNSksc3VicGl4ZWxCaXRzOnQuZ2V0UGFyYW1ldGVyKDM0MDgpLGV4dGVuc2lvbnM6T2JqZWN0LmtleXMoZSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hIWVbdF19KSksbWF4QW5pc290cm9waWM6cixtYXhEcmF3YnVmZmVyczpuLG1heENvbG9yQXR0YWNobWVudHM6aSxwb2ludFNpemVEaW1zOnQuZ2V0UGFyYW1ldGVyKDMzOTAxKSxsaW5lV2lkdGhEaW1zOnQuZ2V0UGFyYW1ldGVyKDMzOTAyKSxtYXhWaWV3cG9ydERpbXM6dC5nZXRQYXJhbWV0ZXIoMzM4NiksbWF4Q29tYmluZWRUZXh0dXJlVW5pdHM6dC5nZXRQYXJhbWV0ZXIoMzU2NjEpLG1heEN1YmVNYXBTaXplOnQuZ2V0UGFyYW1ldGVyKDM0MDc2KSxtYXhSZW5kZXJidWZmZXJTaXplOnQuZ2V0UGFyYW1ldGVyKDM0MDI0KSxtYXhUZXh0dXJlVW5pdHM6dC5nZXRQYXJhbWV0ZXIoMzQ5MzApLG1heFRleHR1cmVTaXplOnQuZ2V0UGFyYW1ldGVyKDMzNzkpLG1heEF0dHJpYnV0ZXM6dC5nZXRQYXJhbWV0ZXIoMzQ5MjEpLG1heFZlcnRleFVuaWZvcm1zOnQuZ2V0UGFyYW1ldGVyKDM2MzQ3KSxtYXhWZXJ0ZXhUZXh0dXJlVW5pdHM6dC5nZXRQYXJhbWV0ZXIoMzU2NjApLG1heFZhcnlpbmdWZWN0b3JzOnQuZ2V0UGFyYW1ldGVyKDM2MzQ4KSxtYXhGcmFnbWVudFVuaWZvcm1zOnQuZ2V0UGFyYW1ldGVyKDM2MzQ5KSxnbHNsOnQuZ2V0UGFyYW1ldGVyKDM1NzI0KSxyZW5kZXJlcjp0LmdldFBhcmFtZXRlcig3OTM3KSx2ZW5kb3I6dC5nZXRQYXJhbWV0ZXIoNzkzNiksdmVyc2lvbjp0LmdldFBhcmFtZXRlcig3OTM4KSxyZWFkRmxvYXQ6YSxucG90VGV4dHVyZUN1YmU6c319LFc9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0IGluc3RhbmNlb2YgVWludDE2QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50MzJBcnJheXx8dCBpbnN0YW5jZW9mIEludDhBcnJheXx8dCBpbnN0YW5jZW9mIEludDE2QXJyYXl8fHQgaW5zdGFuY2VvZiBJbnQzMkFycmF5fHx0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5fHx0IGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5fHx0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXl9LFg9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSl9LFo9e3NoYXBlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXTt0Lmxlbmd0aDt0PXRbMF0pZS5wdXNoKHQubGVuZ3RoKTtyZXR1cm4gZX0sZmxhdHRlbjpmdW5jdGlvbih0LGUscixuKXt2YXIgaT0xO2lmKGUubGVuZ3RoKWZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7KythKWkqPWVbYV07ZWxzZSBpPTA7c3dpdGNoKHI9bnx8Ry5hbGxvY1R5cGUocixpKSxlLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpmb3Iobj1lWzBdLGU9MDtlPG47KytlKXJbZV09dFtlXTticmVhaztjYXNlIDI6Zm9yKG49ZVswXSxlPWVbMV0sYT1pPTA7YTxuOysrYSlmb3IodmFyIG89dFthXSxzPTA7czxlOysrcylyW2krK109b1tzXTticmVhaztjYXNlIDM6Yyh0LGVbMF0sZVsxXSxlWzJdLHIsMCk7YnJlYWs7ZGVmYXVsdDohZnVuY3Rpb24gdChlLHIsbixpLGEpe2Zvcih2YXIgbz0xLHM9bisxO3M8ci5sZW5ndGg7KytzKW8qPXJbc107dmFyIGw9cltuXTtpZig0PT1yLmxlbmd0aC1uKXt2YXIgdT1yW24rMV0sZj1yW24rMl07Zm9yKHI9cltuKzNdLHM9MDtzPGw7KytzKWMoZVtzXSx1LGYscixpLGEpLGErPW99ZWxzZSBmb3Iocz0wO3M8bDsrK3MpdChlW3NdLHIsbisxLGksYSksYSs9b30odCxlLDAsciwwKX1yZXR1cm4gcn19LEo9eyJbb2JqZWN0IEludDhBcnJheV0iOjUxMjAsIltvYmplY3QgSW50MTZBcnJheV0iOjUxMjIsIltvYmplY3QgSW50MzJBcnJheV0iOjUxMjQsIltvYmplY3QgVWludDhBcnJheV0iOjUxMjEsIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjo1MTIxLCJbb2JqZWN0IFVpbnQxNkFycmF5XSI6NTEyMywiW29iamVjdCBVaW50MzJBcnJheV0iOjUxMjUsIltvYmplY3QgRmxvYXQzMkFycmF5XSI6NTEyNiwiW29iamVjdCBGbG9hdDY0QXJyYXldIjo1MTIxLCJbb2JqZWN0IEFycmF5QnVmZmVyXSI6NTEyMX0sSz17aW50ODo1MTIwLGludDE2OjUxMjIsaW50MzI6NTEyNCx1aW50ODo1MTIxLHVpbnQxNjo1MTIzLHVpbnQzMjo1MTI1LGZsb2F0OjUxMjYsZmxvYXQzMjo1MTI2fSxRPXtkeW5hbWljOjM1MDQ4LHN0cmVhbTozNTA0MCxzdGF0aWM6MzUwNDR9LCQ9Wi5mbGF0dGVuLHR0PVouc2hhcGUsZXQ9W107ZXRbNTEyMF09MSxldFs1MTIyXT0yLGV0WzUxMjRdPTQsZXRbNTEyMV09MSxldFs1MTIzXT0yLGV0WzUxMjVdPTQsZXRbNTEyNl09NDt2YXIgcnQ9e3BvaW50czowLHBvaW50OjAsbGluZXM6MSxsaW5lOjEsdHJpYW5nbGVzOjQsdHJpYW5nbGU6NCwibGluZSBsb29wIjoyLCJsaW5lIHN0cmlwIjozLCJ0cmlhbmdsZSBzdHJpcCI6NSwidHJpYW5nbGUgZmFuIjo2fSxudD1uZXcgRmxvYXQzMkFycmF5KDEpLGl0PW5ldyBVaW50MzJBcnJheShudC5idWZmZXIpLGF0PVs5OTg0LDk5ODYsOTk4NSw5OTg3XSxvdD1bMCw2NDA5LDY0MTAsNjQwNyw2NDA4XSxzdD17fTtzdFs2NDA5XT1zdFs2NDA2XT1zdFs2NDAyXT0xLHN0WzM0MDQxXT1zdFs2NDEwXT0yLHN0WzY0MDddPXN0WzM1OTA0XT0zLHN0WzY0MDhdPXN0WzM1OTA2XT00O3ZhciBsdD12KCJIVE1MQ2FudmFzRWxlbWVudCIpLGN0PXYoIk9mZnNjcmVlbkNhbnZhcyIpLHV0PXYoIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCIpLGZ0PXYoIkltYWdlQml0bWFwIiksaHQ9digiSFRNTEltYWdlRWxlbWVudCIpLHB0PXYoIkhUTUxWaWRlb0VsZW1lbnQiKSxkdD1PYmplY3Qua2V5cyhKKS5jb25jYXQoW2x0LGN0LHV0LGZ0LGh0LHB0XSksbXQ9W107bXRbNTEyMV09MSxtdFs1MTI2XT00LG10WzM2MTkzXT0yLG10WzUxMjNdPTIsbXRbNTEyNV09NDt2YXIgZ3Q9W107Z3RbMzI4NTRdPTIsZ3RbMzI4NTVdPTIsZ3RbMzYxOTRdPTIsZ3RbMzQwNDFdPTQsZ3RbMzM3NzZdPS41LGd0WzMzNzc3XT0uNSxndFszMzc3OF09MSxndFszMzc3OV09MSxndFszNTk4Nl09LjUsZ3RbMzU5ODddPTEsZ3RbMzQ3OThdPTEsZ3RbMzU4NDBdPS41LGd0WzM1ODQxXT0uMjUsZ3RbMzU4NDJdPS41LGd0WzM1ODQzXT0uMjUsZ3RbMzYxOTZdPS41O3ZhciB2dD1bXTt2dFszMjg1NF09Mix2dFszMjg1NV09Mix2dFszNjE5NF09Mix2dFszMzE4OV09Mix2dFszNjE2OF09MSx2dFszNDA0MV09NCx2dFszNTkwN109NCx2dFszNDgzNl09MTYsdnRbMzQ4NDJdPTgsdnRbMzQ4NDNdPTY7dmFyIHl0PWZ1bmN0aW9uKHQsZSxyLG4saSl7ZnVuY3Rpb24gYSh0KXt0aGlzLmlkPWMrKyx0aGlzLnJlZkNvdW50PTEsdGhpcy5yZW5kZXJidWZmZXI9dCx0aGlzLmZvcm1hdD0zMjg1NCx0aGlzLmhlaWdodD10aGlzLndpZHRoPTAsaS5wcm9maWxlJiYodGhpcy5zdGF0cz17c2l6ZTowfSl9ZnVuY3Rpb24gbyhlKXt2YXIgcj1lLnJlbmRlcmJ1ZmZlcjt0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCksdC5kZWxldGVSZW5kZXJidWZmZXIociksZS5yZW5kZXJidWZmZXI9bnVsbCxlLnJlZkNvdW50PTAsZGVsZXRlIHVbZS5pZF0sbi5yZW5kZXJidWZmZXJDb3VudC0tfXZhciBzPXtyZ2JhNDozMjg1NCxyZ2I1NjU6MzYxOTQsInJnYjUgYTEiOjMyODU1LGRlcHRoOjMzMTg5LHN0ZW5jaWw6MzYxNjgsImRlcHRoIHN0ZW5jaWwiOjM0MDQxfTtlLmV4dF9zcmdiJiYocy5zcmdiYT0zNTkwNyksZS5leHRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQmJihzLnJnYmExNmY9MzQ4NDIscy5yZ2IxNmY9MzQ4NDMpLGUud2ViZ2xfY29sb3JfYnVmZmVyX2Zsb2F0JiYocy5yZ2JhMzJmPTM0ODM2KTt2YXIgbD1bXTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKChmdW5jdGlvbih0KXtsW3NbdF1dPXR9KSk7dmFyIGM9MCx1PXt9O3JldHVybiBhLnByb3RvdHlwZS5kZWNSZWY9ZnVuY3Rpb24oKXswPj0tLXRoaXMucmVmQ291bnQmJm8odGhpcyl9LGkucHJvZmlsZSYmKG4uZ2V0VG90YWxSZW5kZXJidWZmZXJTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gT2JqZWN0LmtleXModSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dCs9dVtlXS5zdGF0cy5zaXplfSkpLHR9KSx7Y3JlYXRlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbyhlLHIpe3ZhciBuPTAsYT0wLHU9MzI4NTQ7aWYoIm9iamVjdCI9PXR5cGVvZiBlJiZlPygic2hhcGUiaW4gZT8obj0wfChhPWUuc2hhcGUpWzBdLGE9MHxhWzFdKTooInJhZGl1cyJpbiBlJiYobj1hPTB8ZS5yYWRpdXMpLCJ3aWR0aCJpbiBlJiYobj0wfGUud2lkdGgpLCJoZWlnaHQiaW4gZSYmKGE9MHxlLmhlaWdodCkpLCJmb3JtYXQiaW4gZSYmKHU9c1tlLmZvcm1hdF0pKToibnVtYmVyIj09dHlwZW9mIGU/KG49MHxlLGE9Im51bWJlciI9PXR5cGVvZiByPzB8cjpuKTplfHwobj1hPTEpLG4hPT1jLndpZHRofHxhIT09Yy5oZWlnaHR8fHUhPT1jLmZvcm1hdClyZXR1cm4gby53aWR0aD1jLndpZHRoPW4sby5oZWlnaHQ9Yy5oZWlnaHQ9YSxjLmZvcm1hdD11LHQuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxjLnJlbmRlcmJ1ZmZlciksdC5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLHUsbixhKSxpLnByb2ZpbGUmJihjLnN0YXRzLnNpemU9dnRbYy5mb3JtYXRdKmMud2lkdGgqYy5oZWlnaHQpLG8uZm9ybWF0PWxbYy5mb3JtYXRdLG99dmFyIGM9bmV3IGEodC5jcmVhdGVSZW5kZXJidWZmZXIoKSk7cmV0dXJuIHVbYy5pZF09YyxuLnJlbmRlcmJ1ZmZlckNvdW50KyssbyhlLHIpLG8ucmVzaXplPWZ1bmN0aW9uKGUscil7dmFyIG49MHxlLGE9MHxyfHxuO3JldHVybiBuPT09Yy53aWR0aCYmYT09PWMuaGVpZ2h0fHwoby53aWR0aD1jLndpZHRoPW4sby5oZWlnaHQ9Yy5oZWlnaHQ9YSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsYy5yZW5kZXJidWZmZXIpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxjLmZvcm1hdCxuLGEpLGkucHJvZmlsZSYmKGMuc3RhdHMuc2l6ZT12dFtjLmZvcm1hdF0qYy53aWR0aCpjLmhlaWdodCkpLG99LG8uX3JlZ2xUeXBlPSJyZW5kZXJidWZmZXIiLG8uX3JlbmRlcmJ1ZmZlcj1jLGkucHJvZmlsZSYmKG8uc3RhdHM9Yy5zdGF0cyksby5kZXN0cm95PWZ1bmN0aW9uKCl7Yy5kZWNSZWYoKX0sb30sY2xlYXI6ZnVuY3Rpb24oKXtYKHUpLmZvckVhY2gobyl9LHJlc3RvcmU6ZnVuY3Rpb24oKXtYKHUpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UucmVuZGVyYnVmZmVyPXQuY3JlYXRlUmVuZGVyYnVmZmVyKCksdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGUucmVuZGVyYnVmZmVyKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsZS5mb3JtYXQsZS53aWR0aCxlLmhlaWdodCl9KSksdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfX19LHh0PVtdO3h0WzY0MDhdPTQseHRbNjQwN109Mzt2YXIgYnQ9W107YnRbNTEyMV09MSxidFs1MTI2XT00LGJ0WzM2MTkzXT0yO3ZhciBfdD1bIngiLCJ5IiwieiIsInciXSx3dD0iYmxlbmQuZnVuYyBibGVuZC5lcXVhdGlvbiBzdGVuY2lsLmZ1bmMgc3RlbmNpbC5vcEZyb250IHN0ZW5jaWwub3BCYWNrIHNhbXBsZS5jb3ZlcmFnZSB2aWV3cG9ydCBzY2lzc29yLmJveCBwb2x5Z29uT2Zmc2V0Lm9mZnNldCIuc3BsaXQoIiAiKSxUdD17MDowLDE6MSx6ZXJvOjAsb25lOjEsInNyYyBjb2xvciI6NzY4LCJvbmUgbWludXMgc3JjIGNvbG9yIjo3NjksInNyYyBhbHBoYSI6NzcwLCJvbmUgbWludXMgc3JjIGFscGhhIjo3NzEsImRzdCBjb2xvciI6Nzc0LCJvbmUgbWludXMgZHN0IGNvbG9yIjo3NzUsImRzdCBhbHBoYSI6NzcyLCJvbmUgbWludXMgZHN0IGFscGhhIjo3NzMsImNvbnN0YW50IGNvbG9yIjozMjc2OSwib25lIG1pbnVzIGNvbnN0YW50IGNvbG9yIjozMjc3MCwiY29uc3RhbnQgYWxwaGEiOjMyNzcxLCJvbmUgbWludXMgY29uc3RhbnQgYWxwaGEiOjMyNzcyLCJzcmMgYWxwaGEgc2F0dXJhdGUiOjc3Nn0sa3Q9e25ldmVyOjUxMixsZXNzOjUxMywiPCI6NTEzLGVxdWFsOjUxNCwiPSI6NTE0LCI9PSI6NTE0LCI9PT0iOjUxNCxsZXF1YWw6NTE1LCI8PSI6NTE1LGdyZWF0ZXI6NTE2LCI+Ijo1MTYsbm90ZXF1YWw6NTE3LCIhPSI6NTE3LCIhPT0iOjUxNyxnZXF1YWw6NTE4LCI+PSI6NTE4LGFsd2F5czo1MTl9LEF0PXswOjAsemVybzowLGtlZXA6NzY4MCxyZXBsYWNlOjc2ODEsaW5jcmVtZW50Ojc2ODIsZGVjcmVtZW50Ojc2ODMsImluY3JlbWVudCB3cmFwIjozNDA1NSwiZGVjcmVtZW50IHdyYXAiOjM0MDU2LGludmVydDo1Mzg2fSxNdD17Y3c6MjMwNCxjY3c6MjMwNX0sU3Q9bmV3IHooITEsITEsITEsKGZ1bmN0aW9uKCl7fSkpO3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7aWYoMD09PUoubGVuZ3RoKXcmJncudXBkYXRlKCksdHQ9bnVsbDtlbHNle3R0PUgubmV4dChlKSxmKCk7Zm9yKHZhciB0PUoubGVuZ3RoLTE7MDw9dDstLXQpe3ZhciByPUpbdF07ciYmcihQLG51bGwsMCl9Zy5mbHVzaCgpLHcmJncudXBkYXRlKCl9fWZ1bmN0aW9uIHIoKXshdHQmJjA8Si5sZW5ndGgmJih0dD1ILm5leHQoZSkpfWZ1bmN0aW9uIG4oKXt0dCYmKEguY2FuY2VsKGUpLHR0PW51bGwpfWZ1bmN0aW9uIGEodCl7dC5wcmV2ZW50RGVmYXVsdCgpLG4oKSxLLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QoKX0pKX1mdW5jdGlvbiBvKHQpe2cuZ2V0RXJyb3IoKSx5LnJlc3RvcmUoKSxSLnJlc3RvcmUoKSxPLnJlc3RvcmUoKSxGLnJlc3RvcmUoKSxVLnJlc3RvcmUoKSxHLnJlc3RvcmUoKSxELnJlc3RvcmUoKSx3JiZ3LnJlc3RvcmUoKSxXLnByb2NzLnJlZnJlc2goKSxyKCksUS5mb3JFYWNoKChmdW5jdGlvbih0KXt0KCl9KSl9ZnVuY3Rpb24gcyh0KXtmdW5jdGlvbiBlKHQsZSl7dmFyIHI9e30sbj17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oaSl7dmFyIGE9dFtpXTtpZihWLmlzRHluYW1pYyhhKSluW2ldPVYudW5ib3goYSxpKTtlbHNle2lmKGUmJkFycmF5LmlzQXJyYXkoYSkpZm9yKHZhciBvPTA7bzxhLmxlbmd0aDsrK28paWYoVi5pc0R5bmFtaWMoYVtvXSkpcmV0dXJuIHZvaWQobltpXT1WLnVuYm94KGEsaSkpO3JbaV09YX19KSkse2R5bmFtaWM6bixzdGF0aWM6cn19dmFyIHI9ZSh0LmNvbnRleHR8fHt9LCEwKSxuPWUodC51bmlmb3Jtc3x8e30sITApLGk9ZSh0LmF0dHJpYnV0ZXN8fHt9LCExKTt0PWUoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtpZih0IGluIHIpe3ZhciBlPXJbdF07ZGVsZXRlIHJbdF0sT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7clt0KyIuIituXT1lW25dfSkpfX12YXIgcj1qKHt9LHQpO3JldHVybiBkZWxldGUgci51bmlmb3JtcyxkZWxldGUgci5hdHRyaWJ1dGVzLGRlbGV0ZSByLmNvbnRleHQsZGVsZXRlIHIudmFvLCJzdGVuY2lsImluIHImJnIuc3RlbmNpbC5vcCYmKHIuc3RlbmNpbC5vcEJhY2s9ci5zdGVuY2lsLm9wRnJvbnQ9ci5zdGVuY2lsLm9wLGRlbGV0ZSByLnN0ZW5jaWwub3ApLGUoImJsZW5kIiksZSgiZGVwdGgiKSxlKCJjdWxsIiksZSgic3RlbmNpbCIpLGUoInBvbHlnb25PZmZzZXQiKSxlKCJzY2lzc29yIiksZSgic2FtcGxlIiksInZhbyJpbiB0JiYoci52YW89dC52YW8pLHJ9KHQpLCExKTt2YXIgYT17Z3B1VGltZTowLGNwdVRpbWU6MCxjb3VudDowfSxvPVcuY29tcGlsZSh0LGksbixyLGEpLHM9by5kcmF3LGw9by5iYXRjaCxjPW8uc2NvcGUsdT1bXTtyZXR1cm4gaigoZnVuY3Rpb24odCxlKXt2YXIgcjtpZigiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gYy5jYWxsKHRoaXMsbnVsbCx0LDApO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKWlmKCJudW1iZXIiPT10eXBlb2YgdClmb3Iocj0wO3I8dDsrK3IpYy5jYWxsKHRoaXMsbnVsbCxlLHIpO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGMuY2FsbCh0aGlzLHQsZSwwKTtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKWMuY2FsbCh0aGlzLHRbcl0sZSxyKX1lbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgdCl7aWYoMDx0KXJldHVybiBsLmNhbGwodGhpcyxmdW5jdGlvbih0KXtmb3IoO3UubGVuZ3RoPHQ7KXUucHVzaChudWxsKTtyZXR1cm4gdX0oMHx0KSwwfHQpfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHMuY2FsbCh0aGlzLHQpO2lmKHQubGVuZ3RoKXJldHVybiBsLmNhbGwodGhpcyx0LHQubGVuZ3RoKX19KSx7c3RhdHM6YSxkZXN0cm95OmZ1bmN0aW9uKCl7by5kZXN0cm95KCl9fSl9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPTA7Vy5wcm9jcy5wb2xsKCk7dmFyIG49ZS5jb2xvcjtuJiYoZy5jbGVhckNvbG9yKCtuWzBdfHwwLCtuWzFdfHwwLCtuWzJdfHwwLCtuWzNdfHwwKSxyfD0xNjM4NCksImRlcHRoImluIGUmJihnLmNsZWFyRGVwdGgoK2UuZGVwdGgpLHJ8PTI1NiksInN0ZW5jaWwiaW4gZSYmKGcuY2xlYXJTdGVuY2lsKDB8ZS5zdGVuY2lsKSxyfD0xMDI0KSxnLmNsZWFyKHIpfWZ1bmN0aW9uIGModCl7cmV0dXJuIEoucHVzaCh0KSxyKCkse2NhbmNlbDpmdW5jdGlvbigpe3ZhciBlPU4oSix0KTtKW2VdPWZ1bmN0aW9uIHQoKXt2YXIgZT1OKEosdCk7SltlXT1KW0oubGVuZ3RoLTFdLC0tSi5sZW5ndGgsMD49Si5sZW5ndGgmJm4oKX19fX1mdW5jdGlvbiB1KCl7dmFyIHQ9WC52aWV3cG9ydCxlPVguc2Npc3Nvcl9ib3g7dFswXT10WzFdPWVbMF09ZVsxXT0wLFAudmlld3BvcnRXaWR0aD1QLmZyYW1lYnVmZmVyV2lkdGg9UC5kcmF3aW5nQnVmZmVyV2lkdGg9dFsyXT1lWzJdPWcuZHJhd2luZ0J1ZmZlcldpZHRoLFAudmlld3BvcnRIZWlnaHQ9UC5mcmFtZWJ1ZmZlckhlaWdodD1QLmRyYXdpbmdCdWZmZXJIZWlnaHQ9dFszXT1lWzNdPWcuZHJhd2luZ0J1ZmZlckhlaWdodH1mdW5jdGlvbiBmKCl7UC50aWNrKz0xLFAudGltZT1tKCksdSgpLFcucHJvY3MucG9sbCgpfWZ1bmN0aW9uIGgoKXtGLnJlZnJlc2goKSx1KCksVy5wcm9jcy5yZWZyZXNoKCksdyYmdy51cGRhdGUoKX1mdW5jdGlvbiBtKCl7cmV0dXJuKHEoKS1UKS8xZTN9aWYoISh0PWkodCkpKXJldHVybiBudWxsO3ZhciBnPXQuZ2wsdj1nLmdldENvbnRleHRBdHRyaWJ1dGVzKCk7Zy5pc0NvbnRleHRMb3N0KCk7dmFyIHk9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGUpe3ZhciByO2U9ZS50b0xvd2VyQ2FzZSgpO3RyeXtyPW5bZV09dC5nZXRFeHRlbnNpb24oZSl9Y2F0Y2godCl7fXJldHVybiEhcn1mb3IodmFyIG49e30saT0wO2k8ZS5leHRlbnNpb25zLmxlbmd0aDsrK2kpe3ZhciBhPWUuZXh0ZW5zaW9uc1tpXTtpZighcihhKSlyZXR1cm4gZS5vbkRlc3Ryb3koKSxlLm9uRG9uZSgnIicrYSsnIiBleHRlbnNpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBXZWJHTCBjb250ZXh0LCB0cnkgdXBncmFkaW5nIHlvdXIgc3lzdGVtIG9yIGEgZGlmZmVyZW50IGJyb3dzZXInKSxudWxsfXJldHVybiBlLm9wdGlvbmFsRXh0ZW5zaW9ucy5mb3JFYWNoKHIpLHtleHRlbnNpb25zOm4scmVzdG9yZTpmdW5jdGlvbigpe09iamVjdC5rZXlzKG4pLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKG5bdF0mJiFyKHQpKXRocm93IEVycm9yKCIocmVnbCk6IGVycm9yIHJlc3RvcmluZyBleHRlbnNpb24gIit0KX0pKX19fShnLHQpO2lmKCF5KXJldHVybiBudWxsO3ZhciB4PWZ1bmN0aW9uKCl7dmFyIHQ9eyIiOjB9LGU9WyIiXTtyZXR1cm57aWQ6ZnVuY3Rpb24ocil7dmFyIG49dFtyXTtyZXR1cm4gbnx8KG49dFtyXT1lLmxlbmd0aCxlLnB1c2gociksbil9LHN0cjpmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX19fSgpLGI9e3Zhb0NvdW50OjAsYnVmZmVyQ291bnQ6MCxlbGVtZW50c0NvdW50OjAsZnJhbWVidWZmZXJDb3VudDowLHNoYWRlckNvdW50OjAsdGV4dHVyZUNvdW50OjAsY3ViZUNvdW50OjAscmVuZGVyYnVmZmVyQ291bnQ6MCxtYXhUZXh0dXJlVW5pdHM6MH0sXz15LmV4dGVuc2lvbnMsdz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoKXt0aGlzLmVuZFF1ZXJ5SW5kZXg9dGhpcy5zdGFydFF1ZXJ5SW5kZXg9LTEsdGhpcy5zdW09MCx0aGlzLnN0YXRzPW51bGx9ZnVuY3Rpb24gbih0LGUsbil7dmFyIGk9by5wb3AoKXx8bmV3IHI7aS5zdGFydFF1ZXJ5SW5kZXg9dCxpLmVuZFF1ZXJ5SW5kZXg9ZSxpLnN1bT0wLGkuc3RhdHM9bixzLnB1c2goaSl9aWYoIWUuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5KXJldHVybiBudWxsO3ZhciBpPVtdLGE9W10sbz1bXSxzPVtdLGw9W10sYz1bXTtyZXR1cm57YmVnaW5RdWVyeTpmdW5jdGlvbih0KXt2YXIgcj1pLnBvcCgpfHxlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5jcmVhdGVRdWVyeUVYVCgpO2UuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmJlZ2luUXVlcnlFWFQoMzUwMDcsciksYS5wdXNoKHIpLG4oYS5sZW5ndGgtMSxhLmxlbmd0aCx0KX0sZW5kUXVlcnk6ZnVuY3Rpb24oKXtlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5lbmRRdWVyeUVYVCgzNTAwNyl9LHB1c2hTY29wZVN0YXRzOm4sdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHQscjtpZigwIT09KHQ9YS5sZW5ndGgpKXtjLmxlbmd0aD1NYXRoLm1heChjLmxlbmd0aCx0KzEpLGwubGVuZ3RoPU1hdGgubWF4KGwubGVuZ3RoLHQrMSksbFswXT0wO3ZhciBuPWNbMF09MDtmb3Iocj10PTA7cjxhLmxlbmd0aDsrK3Ipe3ZhciB1PWFbcl07ZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZ2V0UXVlcnlPYmplY3RFWFQodSwzNDkxOSk/KG4rPWUuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmdldFF1ZXJ5T2JqZWN0RVhUKHUsMzQ5MTgpLGkucHVzaCh1KSk6YVt0KytdPXUsbFtyKzFdPW4sY1tyKzFdPXR9Zm9yKGEubGVuZ3RoPXQscj10PTA7cjxzLmxlbmd0aDsrK3Ipe3ZhciBmPShuPXNbcl0pLnN0YXJ0UXVlcnlJbmRleDt1PW4uZW5kUXVlcnlJbmRleDtuLnN1bSs9bFt1XS1sW2ZdLGY9Y1tmXSwodT1jW3VdKT09PWY/KG4uc3RhdHMuZ3B1VGltZSs9bi5zdW0vMWU2LG8ucHVzaChuKSk6KG4uc3RhcnRRdWVyeUluZGV4PWYsbi5lbmRRdWVyeUluZGV4PXUsc1t0KytdPW4pfXMubGVuZ3RoPXR9fSxnZXROdW1QZW5kaW5nUXVlcmllczpmdW5jdGlvbigpe3JldHVybiBhLmxlbmd0aH0sY2xlYXI6ZnVuY3Rpb24oKXtpLnB1c2guYXBwbHkoaSxhKTtmb3IodmFyIHQ9MDt0PGkubGVuZ3RoO3QrKyllLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5kZWxldGVRdWVyeUVYVChpW3RdKTthLmxlbmd0aD0wLGkubGVuZ3RoPTB9LHJlc3RvcmU6ZnVuY3Rpb24oKXthLmxlbmd0aD0wLGkubGVuZ3RoPTB9fX0oMCxfKSxUPXEoKSxNPWcuZHJhd2luZ0J1ZmZlcldpZHRoLEM9Zy5kcmF3aW5nQnVmZmVySGVpZ2h0LFA9e3RpY2s6MCx0aW1lOjAsdmlld3BvcnRXaWR0aDpNLHZpZXdwb3J0SGVpZ2h0OkMsZnJhbWVidWZmZXJXaWR0aDpNLGZyYW1lYnVmZmVySGVpZ2h0OkMsZHJhd2luZ0J1ZmZlcldpZHRoOk0sZHJhd2luZ0J1ZmZlckhlaWdodDpDLHBpeGVsUmF0aW86dC5waXhlbFJhdGlvfSxJPShNPXtlbGVtZW50czpudWxsLHByaW1pdGl2ZTo0LGNvdW50Oi0xLG9mZnNldDowLGluc3RhbmNlczotMX0sWShnLF8pKSxPPXAoZyxiLHQsKGZ1bmN0aW9uKHQpe3JldHVybiBELmRlc3Ryb3lCdWZmZXIodCl9KSksej1kKGcsXyxPLGIpLEQ9UyhnLF8sSSxiLE8seixNKSxSPUUoZyx4LGIsdCksRj1rKGcsXyxJLChmdW5jdGlvbigpe1cucHJvY3MucG9sbCgpfSksUCxiLHQpLFU9eXQoZyxfLDAsYix0KSxHPUEoZyxfLEksRixVLGIpLFc9QihnLHgsXyxJLE8seiwwLEcse30sRCxSLE0sUCx3LHQpLFg9KHg9TChnLEcsVy5wcm9jcy5wb2xsLFApLFcubmV4dCksWj1nLmNhbnZhcyxKPVtdLEs9W10sUT1bXSwkPVt0Lm9uRGVzdHJveV0sdHQ9bnVsbDtaJiYoWi5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixhLCExKSxaLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixvLCExKSk7dmFyIGV0PUcuc2V0RkJPPXMoe2ZyYW1lYnVmZmVyOlYuZGVmaW5lLmNhbGwobnVsbCwxLCJmcmFtZWJ1ZmZlciIpfSk7cmV0dXJuIGgoKSx2PWoocyx7Y2xlYXI6ZnVuY3Rpb24odCl7aWYoImZyYW1lYnVmZmVyImluIHQpaWYodC5mcmFtZWJ1ZmZlciYmImZyYW1lYnVmZmVyQ3ViZSI9PT10LmZyYW1lYnVmZmVyX3JlZ2xUeXBlKWZvcih2YXIgZT0wOzY+ZTsrK2UpZXQoaih7ZnJhbWVidWZmZXI6dC5mcmFtZWJ1ZmZlci5mYWNlc1tlXX0sdCksbCk7ZWxzZSBldCh0LGwpO2Vsc2UgbCgwLHQpfSxwcm9wOlYuZGVmaW5lLmJpbmQobnVsbCwxKSxjb250ZXh0OlYuZGVmaW5lLmJpbmQobnVsbCwyKSx0aGlzOlYuZGVmaW5lLmJpbmQobnVsbCwzKSxkcmF3OnMoe30pLGJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm4gTy5jcmVhdGUodCwzNDk2MiwhMSwhMSl9LGVsZW1lbnRzOmZ1bmN0aW9uKHQpe3JldHVybiB6LmNyZWF0ZSh0LCExKX0sdGV4dHVyZTpGLmNyZWF0ZTJELGN1YmU6Ri5jcmVhdGVDdWJlLHJlbmRlcmJ1ZmZlcjpVLmNyZWF0ZSxmcmFtZWJ1ZmZlcjpHLmNyZWF0ZSxmcmFtZWJ1ZmZlckN1YmU6Ry5jcmVhdGVDdWJlLHZhbzpELmNyZWF0ZVZBTyxhdHRyaWJ1dGVzOnYsZnJhbWU6YyxvbjpmdW5jdGlvbih0LGUpe3ZhciByO3N3aXRjaCh0KXtjYXNlImZyYW1lIjpyZXR1cm4gYyhlKTtjYXNlImxvc3QiOnI9SzticmVhaztjYXNlInJlc3RvcmUiOnI9UTticmVhaztjYXNlImRlc3Ryb3kiOnI9JH1yZXR1cm4gci5wdXNoKGUpLHtjYW5jZWw6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHIubGVuZ3RoOysrdClpZihyW3RdPT09ZSl7clt0XT1yW3IubGVuZ3RoLTFdLHIucG9wKCk7YnJlYWt9fX19LGxpbWl0czpJLGhhc0V4dGVuc2lvbjpmdW5jdGlvbih0KXtyZXR1cm4gMDw9SS5leHRlbnNpb25zLmluZGV4T2YodC50b0xvd2VyQ2FzZSgpKX0scmVhZDp4LGRlc3Ryb3k6ZnVuY3Rpb24oKXtKLmxlbmd0aD0wLG4oKSxaJiYoWi5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixhKSxaLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixvKSksUi5jbGVhcigpLEcuY2xlYXIoKSxVLmNsZWFyKCksRC5jbGVhcigpLEYuY2xlYXIoKSx6LmNsZWFyKCksTy5jbGVhcigpLHcmJncuY2xlYXIoKSwkLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QoKX0pKX0sX2dsOmcsX3JlZnJlc2g6aCxwb2xsOmZ1bmN0aW9uKCl7ZigpLHcmJncudXBkYXRlKCl9LG5vdzptLHN0YXRzOmJ9KSx0Lm9uRG9uZShudWxsLHYpLHZ9fSkpfSx7fV0sNTE3OltmdW5jdGlvbih0LGUscil7Ci8qIQogKiByZXBlYXQtc3RyaW5nIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9yZXBlYXQtc3RyaW5nPgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgSm9uIFNjaGxpbmtlcnQuCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KICovCiJ1c2Ugc3RyaWN0Ijt2YXIgbixpPSIiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJleHBlY3RlZCBhIHN0cmluZyIpO2lmKDE9PT1lKXJldHVybiB0O2lmKDI9PT1lKXJldHVybiB0K3Q7dmFyIHI9dC5sZW5ndGgqZTtpZihuIT09dHx8dm9pZCAwPT09biluPXQsaT0iIjtlbHNlIGlmKGkubGVuZ3RoPj1yKXJldHVybiBpLnN1YnN0cigwLHIpO2Zvcig7cj5pLmxlbmd0aCYmZT4xOykxJmUmJihpKz10KSxlPj49MSx0Kz10O3JldHVybiBpPShpKz10KS5zdWJzdHIoMCxyKX19LHt9XSw1MTg6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7KGZ1bmN0aW9uKCl7ZS5leHBvcnRzPXQucGVyZm9ybWFuY2UmJnQucGVyZm9ybWFuY2Uubm93P2Z1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpEYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDUxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9dFt0Lmxlbmd0aC0xXSxuPWUsaT1lLTI7aT49MDstLWkpe3ZhciBhPXIsbz10W2ldOyhsPW8tKChyPWErbyktYSkpJiYodFstLW5dPXIscj1sKX12YXIgcz0wO2ZvcihpPW47aTxlOysraSl7dmFyIGw7YT10W2ldOyhsPShvPXIpLSgocj1hK28pLWEpKSYmKHRbcysrXT1sKX1yZXR1cm4gdFtzKytdPXIsdC5sZW5ndGg9cyx0fX0se31dLDUyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0d28tcHJvZHVjdCIpLGk9dCgicm9idXN0LXN1bSIpLGE9dCgicm9idXN0LXNjYWxlIiksbz10KCJyb2J1c3QtY29tcHJlc3MiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbih0KHIoZVswXVswXSxlWzFdWzFdKSxyKC1lWzBdWzFdLGVbMV1bMF0pKSl9fWZ1bmN0aW9uIGwodCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBuKHQoZSh0KHIoaVsxXVsxXSxpWzJdWzJdKSxyKC1pWzFdWzJdLGlbMl1bMV0pKSxpWzBdWzBdKSx0KGUodChyKGlbMV1bMF0saVsyXVsyXSkscigtaVsxXVsyXSxpWzJdWzBdKSksLWlbMF1bMV0pLGUodChyKGlbMV1bMF0saVsyXVsxXSkscigtaVsxXVsxXSxpWzJdWzBdKSksaVswXVsyXSkpKSl9fWZ1bmN0aW9uIGModCl7cmV0dXJuKDI9PT10P3M6Mz09PXQ/bDp2b2lkIDApKGksYSxuLG8pfXZhciB1PVtmdW5jdGlvbigpe3JldHVyblswXX0sZnVuY3Rpb24odCl7cmV0dXJuW3RbMF1bMF1dfV07ZnVuY3Rpb24gZih0LGUscixuLGksYSl7cmV0dXJuIGZ1bmN0aW9uKG8pe3N3aXRjaChvLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB0KG8pO2Nhc2UgMTpyZXR1cm4gZShvKTtjYXNlIDI6cmV0dXJuIHIobyk7Y2FzZSAzOnJldHVybiBuKG8pfXZhciBzPWlbby5sZW5ndGhdO3JldHVybiBzfHwocz1pW28ubGVuZ3RoXT1hKG8ubGVuZ3RoKSkscyhvKX19IWZ1bmN0aW9uKCl7Zm9yKDt1Lmxlbmd0aDw0Oyl1LnB1c2goYyh1Lmxlbmd0aCkpO2UuZXhwb3J0cz1mLmFwcGx5KHZvaWQgMCx1LmNvbmNhdChbdSxjXSkpO2Zvcih2YXIgdD0wO3Q8dS5sZW5ndGg7Kyt0KWUuZXhwb3J0c1t0XT11W3RdfSgpfSx7InJvYnVzdC1jb21wcmVzcyI6NTE5LCJyb2J1c3Qtc2NhbGUiOjUyNiwicm9idXN0LXN1bSI6NTI5LCJ0d28tcHJvZHVjdCI6NTc3fV0sNTIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR3by1wcm9kdWN0IiksaT10KCJyb2J1c3Qtc3VtIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW4odFswXSxlWzBdKSxhPTE7YTx0Lmxlbmd0aDsrK2Epcj1pKHIsbih0W2FdLGVbYV0pKTtyZXR1cm4gcn19LHsicm9idXN0LXN1bSI6NTI5LCJ0d28tcHJvZHVjdCI6NTc3fV0sNTIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR3by1wcm9kdWN0IiksaT10KCJyb2J1c3Qtc3VtIiksYT10KCJyb2J1c3Qtc3VidHJhY3QiKSxvPXQoInJvYnVzdC1zY2FsZSIpO2Z1bmN0aW9uIHModCl7cmV0dXJuKDM9PT10P2w6ND09PXQ/Yzo1PT09dD91OmYpKGksYSxuLG8pfWZ1bmN0aW9uIGwodCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksYSxvKXt2YXIgcz1yKGlbMF0saVswXSksbD1uKHMsYVswXSksYz1uKHMsb1swXSksdT1yKGFbMF0sYVswXSksZj1uKHUsaVswXSksaD1uKHUsb1swXSkscD1yKG9bMF0sb1swXSksZD1uKHAsaVswXSksbT1uKHAsYVswXSksZz10KGUobSxoKSxlKGYsbCkpLHY9ZShkLGMpLHk9ZShnLHYpO3JldHVybiB5W3kubGVuZ3RoLTFdfX1mdW5jdGlvbiBjKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbihpLGEsbyxzKXt2YXIgbD10KHIoaVswXSxpWzBdKSxyKGlbMV0saVsxXSkpLGM9bihsLGFbMF0pLHU9bihsLG9bMF0pLGY9bihsLHNbMF0pLGg9dChyKGFbMF0sYVswXSkscihhWzFdLGFbMV0pKSxwPW4oaCxpWzBdKSxkPW4oaCxvWzBdKSxtPW4oaCxzWzBdKSxnPXQocihvWzBdLG9bMF0pLHIob1sxXSxvWzFdKSksdj1uKGcsaVswXSkseT1uKGcsYVswXSkseD1uKGcsc1swXSksYj10KHIoc1swXSxzWzBdKSxyKHNbMV0sc1sxXSkpLF89bihiLGlbMF0pLHc9bihiLGFbMF0pLFQ9bihiLG9bMF0pLGs9dCh0KG4oZShULHgpLGFbMV0pLHQobihlKHcsbSksLW9bMV0pLG4oZSh5LGQpLHNbMV0pKSksdChuKGUodyxtKSxpWzFdKSx0KG4oZShfLGYpLC1hWzFdKSxuKGUocCxjKSxzWzFdKSkpKSxBPXQodChuKGUoVCx4KSxpWzFdKSx0KG4oZShfLGYpLC1vWzFdKSxuKGUodix1KSxzWzFdKSkpLHQobihlKHksZCksaVsxXSksdChuKGUodix1KSwtYVsxXSksbihlKHAsYyksb1sxXSkpKSksTT1lKGssQSk7cmV0dXJuIE1bTS5sZW5ndGgtMV19fWZ1bmN0aW9uIHUodCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksYSxvLHMsbCl7dmFyIGM9dChyKGlbMF0saVswXSksdChyKGlbMV0saVsxXSkscihpWzJdLGlbMl0pKSksdT1uKGMsYVswXSksZj1uKGMsb1swXSksaD1uKGMsc1swXSkscD1uKGMsbFswXSksZD10KHIoYVswXSxhWzBdKSx0KHIoYVsxXSxhWzFdKSxyKGFbMl0sYVsyXSkpKSxtPW4oZCxpWzBdKSxnPW4oZCxvWzBdKSx2PW4oZCxzWzBdKSx5PW4oZCxsWzBdKSx4PXQocihvWzBdLG9bMF0pLHQocihvWzFdLG9bMV0pLHIob1syXSxvWzJdKSkpLGI9bih4LGlbMF0pLF89bih4LGFbMF0pLHc9bih4LHNbMF0pLFQ9bih4LGxbMF0pLGs9dChyKHNbMF0sc1swXSksdChyKHNbMV0sc1sxXSkscihzWzJdLHNbMl0pKSksQT1uKGssaVswXSksTT1uKGssYVswXSksUz1uKGssb1swXSksRT1uKGssbFswXSksTD10KHIobFswXSxsWzBdKSx0KHIobFsxXSxsWzFdKSxyKGxbMl0sbFsyXSkpKSxDPW4oTCxpWzBdKSxQPW4oTCxhWzBdKSxJPW4oTCxvWzBdKSxPPW4oTCxzWzBdKSx6PXQodCh0KG4odChuKGUoTyxFKSxvWzFdKSx0KG4oZShJLFQpLC1zWzFdKSxuKGUoUyx3KSxsWzFdKSkpLGFbMl0pLHQobih0KG4oZShPLEUpLGFbMV0pLHQobihlKFAseSksLXNbMV0pLG4oZShNLHYpLGxbMV0pKSksLW9bMl0pLG4odChuKGUoSSxUKSxhWzFdKSx0KG4oZShQLHkpLC1vWzFdKSxuKGUoXyxnKSxsWzFdKSkpLHNbMl0pKSksdChuKHQobihlKFMsdyksYVsxXSksdChuKGUoTSx2KSwtb1sxXSksbihlKF8sZyksc1sxXSkpKSwtbFsyXSksdChuKHQobihlKE8sRSksYVsxXSksdChuKGUoUCx5KSwtc1sxXSksbihlKE0sdiksbFsxXSkpKSxpWzJdKSxuKHQobihlKE8sRSksaVsxXSksdChuKGUoQyxwKSwtc1sxXSksbihlKEEsaCksbFsxXSkpKSwtYVsyXSkpKSksdCh0KG4odChuKGUoUCx5KSxpWzFdKSx0KG4oZShDLHApLC1hWzFdKSxuKGUobSx1KSxsWzFdKSkpLHNbMl0pLHQobih0KG4oZShNLHYpLGlbMV0pLHQobihlKEEsaCksLWFbMV0pLG4oZShtLHUpLHNbMV0pKSksLWxbMl0pLG4odChuKGUoUyx3KSxhWzFdKSx0KG4oZShNLHYpLC1vWzFdKSxuKGUoXyxnKSxzWzFdKSkpLGlbMl0pKSksdChuKHQobihlKFMsdyksaVsxXSksdChuKGUoQSxoKSwtb1sxXSksbihlKGIsZiksc1sxXSkpKSwtYVsyXSksdChuKHQobihlKE0sdiksaVsxXSksdChuKGUoQSxoKSwtYVsxXSksbihlKG0sdSksc1sxXSkpKSxvWzJdKSxuKHQobihlKF8sZyksaVsxXSksdChuKGUoYixmKSwtYVsxXSksbihlKG0sdSksb1sxXSkpKSwtc1syXSkpKSkpLEQ9dCh0KHQobih0KG4oZShPLEUpLG9bMV0pLHQobihlKEksVCksLXNbMV0pLG4oZShTLHcpLGxbMV0pKSksaVsyXSksbih0KG4oZShPLEUpLGlbMV0pLHQobihlKEMscCksLXNbMV0pLG4oZShBLGgpLGxbMV0pKSksLW9bMl0pKSx0KG4odChuKGUoSSxUKSxpWzFdKSx0KG4oZShDLHApLC1vWzFdKSxuKGUoYixmKSxsWzFdKSkpLHNbMl0pLG4odChuKGUoUyx3KSxpWzFdKSx0KG4oZShBLGgpLC1vWzFdKSxuKGUoYixmKSxzWzFdKSkpLC1sWzJdKSkpLHQodChuKHQobihlKEksVCksYVsxXSksdChuKGUoUCx5KSwtb1sxXSksbihlKF8sZyksbFsxXSkpKSxpWzJdKSxuKHQobihlKEksVCksaVsxXSksdChuKGUoQyxwKSwtb1sxXSksbihlKGIsZiksbFsxXSkpKSwtYVsyXSkpLHQobih0KG4oZShQLHkpLGlbMV0pLHQobihlKEMscCksLWFbMV0pLG4oZShtLHUpLGxbMV0pKSksb1syXSksbih0KG4oZShfLGcpLGlbMV0pLHQobihlKGIsZiksLWFbMV0pLG4oZShtLHUpLG9bMV0pKSksLWxbMl0pKSkpLFI9ZSh6LEQpO3JldHVybiBSW1IubGVuZ3RoLTFdfX1mdW5jdGlvbiBmKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbihpLGEsbyxzLGwsYyl7dmFyIHU9dCh0KHIoaVswXSxpWzBdKSxyKGlbMV0saVsxXSkpLHQocihpWzJdLGlbMl0pLHIoaVszXSxpWzNdKSkpLGY9bih1LGFbMF0pLGg9bih1LG9bMF0pLHA9bih1LHNbMF0pLGQ9bih1LGxbMF0pLG09bih1LGNbMF0pLGc9dCh0KHIoYVswXSxhWzBdKSxyKGFbMV0sYVsxXSkpLHQocihhWzJdLGFbMl0pLHIoYVszXSxhWzNdKSkpLHY9bihnLGlbMF0pLHk9bihnLG9bMF0pLHg9bihnLHNbMF0pLGI9bihnLGxbMF0pLF89bihnLGNbMF0pLHc9dCh0KHIob1swXSxvWzBdKSxyKG9bMV0sb1sxXSkpLHQocihvWzJdLG9bMl0pLHIob1szXSxvWzNdKSkpLFQ9bih3LGlbMF0pLGs9bih3LGFbMF0pLEE9bih3LHNbMF0pLE09bih3LGxbMF0pLFM9bih3LGNbMF0pLEU9dCh0KHIoc1swXSxzWzBdKSxyKHNbMV0sc1sxXSkpLHQocihzWzJdLHNbMl0pLHIoc1szXSxzWzNdKSkpLEw9bihFLGlbMF0pLEM9bihFLGFbMF0pLFA9bihFLG9bMF0pLEk9bihFLGxbMF0pLE89bihFLGNbMF0pLHo9dCh0KHIobFswXSxsWzBdKSxyKGxbMV0sbFsxXSkpLHQocihsWzJdLGxbMl0pLHIobFszXSxsWzNdKSkpLEQ9bih6LGlbMF0pLFI9bih6LGFbMF0pLEY9bih6LG9bMF0pLEI9bih6LHNbMF0pLE49bih6LGNbMF0pLGo9dCh0KHIoY1swXSxjWzBdKSxyKGNbMV0sY1sxXSkpLHQocihjWzJdLGNbMl0pLHIoY1szXSxjWzNdKSkpLFU9bihqLGlbMF0pLFY9bihqLGFbMF0pLEg9bihqLG9bMF0pLHE9bihqLHNbMF0pLEc9bihqLGxbMF0pLFk9dCh0KHQobih0KHQobih0KG4oZShHLE4pLHNbMV0pLHQobihlKHEsTyksLWxbMV0pLG4oZShCLEkpLGNbMV0pKSksb1syXSksbih0KG4oZShHLE4pLG9bMV0pLHQobihlKEgsUyksLWxbMV0pLG4oZShGLE0pLGNbMV0pKSksLXNbMl0pKSx0KG4odChuKGUocSxPKSxvWzFdKSx0KG4oZShILFMpLC1zWzFdKSxuKGUoUCxBKSxjWzFdKSkpLGxbMl0pLG4odChuKGUoQixJKSxvWzFdKSx0KG4oZShGLE0pLC1zWzFdKSxuKGUoUCxBKSxsWzFdKSkpLC1jWzJdKSkpLGFbM10pLHQobih0KHQobih0KG4oZShHLE4pLHNbMV0pLHQobihlKHEsTyksLWxbMV0pLG4oZShCLEkpLGNbMV0pKSksYVsyXSksbih0KG4oZShHLE4pLGFbMV0pLHQobihlKFYsXyksLWxbMV0pLG4oZShSLGIpLGNbMV0pKSksLXNbMl0pKSx0KG4odChuKGUocSxPKSxhWzFdKSx0KG4oZShWLF8pLC1zWzFdKSxuKGUoQyx4KSxjWzFdKSkpLGxbMl0pLG4odChuKGUoQixJKSxhWzFdKSx0KG4oZShSLGIpLC1zWzFdKSxuKGUoQyx4KSxsWzFdKSkpLC1jWzJdKSkpLC1vWzNdKSxuKHQodChuKHQobihlKEcsTiksb1sxXSksdChuKGUoSCxTKSwtbFsxXSksbihlKEYsTSksY1sxXSkpKSxhWzJdKSxuKHQobihlKEcsTiksYVsxXSksdChuKGUoVixfKSwtbFsxXSksbihlKFIsYiksY1sxXSkpKSwtb1syXSkpLHQobih0KG4oZShILFMpLGFbMV0pLHQobihlKFYsXyksLW9bMV0pLG4oZShrLHkpLGNbMV0pKSksbFsyXSksbih0KG4oZShGLE0pLGFbMV0pLHQobihlKFIsYiksLW9bMV0pLG4oZShrLHkpLGxbMV0pKSksLWNbMl0pKSksc1szXSkpKSx0KHQobih0KHQobih0KG4oZShxLE8pLG9bMV0pLHQobihlKEgsUyksLXNbMV0pLG4oZShQLEEpLGNbMV0pKSksYVsyXSksbih0KG4oZShxLE8pLGFbMV0pLHQobihlKFYsXyksLXNbMV0pLG4oZShDLHgpLGNbMV0pKSksLW9bMl0pKSx0KG4odChuKGUoSCxTKSxhWzFdKSx0KG4oZShWLF8pLC1vWzFdKSxuKGUoayx5KSxjWzFdKSkpLHNbMl0pLG4odChuKGUoUCxBKSxhWzFdKSx0KG4oZShDLHgpLC1vWzFdKSxuKGUoayx5KSxzWzFdKSkpLC1jWzJdKSkpLC1sWzNdKSxuKHQodChuKHQobihlKEIsSSksb1sxXSksdChuKGUoRixNKSwtc1sxXSksbihlKFAsQSksbFsxXSkpKSxhWzJdKSxuKHQobihlKEIsSSksYVsxXSksdChuKGUoUixiKSwtc1sxXSksbihlKEMseCksbFsxXSkpKSwtb1syXSkpLHQobih0KG4oZShGLE0pLGFbMV0pLHQobihlKFIsYiksLW9bMV0pLG4oZShrLHkpLGxbMV0pKSksc1syXSksbih0KG4oZShQLEEpLGFbMV0pLHQobihlKEMseCksLW9bMV0pLG4oZShrLHkpLHNbMV0pKSksLWxbMl0pKSksY1szXSkpLHQobih0KHQobih0KG4oZShHLE4pLHNbMV0pLHQobihlKHEsTyksLWxbMV0pLG4oZShCLEkpLGNbMV0pKSksYVsyXSksbih0KG4oZShHLE4pLGFbMV0pLHQobihlKFYsXyksLWxbMV0pLG4oZShSLGIpLGNbMV0pKSksLXNbMl0pKSx0KG4odChuKGUocSxPKSxhWzFdKSx0KG4oZShWLF8pLC1zWzFdKSxuKGUoQyx4KSxjWzFdKSkpLGxbMl0pLG4odChuKGUoQixJKSxhWzFdKSx0KG4oZShSLGIpLC1zWzFdKSxuKGUoQyx4KSxsWzFdKSkpLC1jWzJdKSkpLGlbM10pLG4odCh0KG4odChuKGUoRyxOKSxzWzFdKSx0KG4oZShxLE8pLC1sWzFdKSxuKGUoQixJKSxjWzFdKSkpLGlbMl0pLG4odChuKGUoRyxOKSxpWzFdKSx0KG4oZShVLG0pLC1sWzFdKSxuKGUoRCxkKSxjWzFdKSkpLC1zWzJdKSksdChuKHQobihlKHEsTyksaVsxXSksdChuKGUoVSxtKSwtc1sxXSksbihlKEwscCksY1sxXSkpKSxsWzJdKSxuKHQobihlKEIsSSksaVsxXSksdChuKGUoRCxkKSwtc1sxXSksbihlKEwscCksbFsxXSkpKSwtY1syXSkpKSwtYVszXSkpKSksdCh0KHQobih0KHQobih0KG4oZShHLE4pLGFbMV0pLHQobihlKFYsXyksLWxbMV0pLG4oZShSLGIpLGNbMV0pKSksaVsyXSksbih0KG4oZShHLE4pLGlbMV0pLHQobihlKFUsbSksLWxbMV0pLG4oZShELGQpLGNbMV0pKSksLWFbMl0pKSx0KG4odChuKGUoVixfKSxpWzFdKSx0KG4oZShVLG0pLC1hWzFdKSxuKGUodixmKSxjWzFdKSkpLGxbMl0pLG4odChuKGUoUixiKSxpWzFdKSx0KG4oZShELGQpLC1hWzFdKSxuKGUodixmKSxsWzFdKSkpLC1jWzJdKSkpLHNbM10pLG4odCh0KG4odChuKGUocSxPKSxhWzFdKSx0KG4oZShWLF8pLC1zWzFdKSxuKGUoQyx4KSxjWzFdKSkpLGlbMl0pLG4odChuKGUocSxPKSxpWzFdKSx0KG4oZShVLG0pLC1zWzFdKSxuKGUoTCxwKSxjWzFdKSkpLC1hWzJdKSksdChuKHQobihlKFYsXyksaVsxXSksdChuKGUoVSxtKSwtYVsxXSksbihlKHYsZiksY1sxXSkpKSxzWzJdKSxuKHQobihlKEMseCksaVsxXSksdChuKGUoTCxwKSwtYVsxXSksbihlKHYsZiksc1sxXSkpKSwtY1syXSkpKSwtbFszXSkpLHQobih0KHQobih0KG4oZShCLEkpLGFbMV0pLHQobihlKFIsYiksLXNbMV0pLG4oZShDLHgpLGxbMV0pKSksaVsyXSksbih0KG4oZShCLEkpLGlbMV0pLHQobihlKEQsZCksLXNbMV0pLG4oZShMLHApLGxbMV0pKSksLWFbMl0pKSx0KG4odChuKGUoUixiKSxpWzFdKSx0KG4oZShELGQpLC1hWzFdKSxuKGUodixmKSxsWzFdKSkpLHNbMl0pLG4odChuKGUoQyx4KSxpWzFdKSx0KG4oZShMLHApLC1hWzFdKSxuKGUodixmKSxzWzFdKSkpLC1sWzJdKSkpLGNbM10pLG4odCh0KG4odChuKGUocSxPKSxvWzFdKSx0KG4oZShILFMpLC1zWzFdKSxuKGUoUCxBKSxjWzFdKSkpLGFbMl0pLG4odChuKGUocSxPKSxhWzFdKSx0KG4oZShWLF8pLC1zWzFdKSxuKGUoQyx4KSxjWzFdKSkpLC1vWzJdKSksdChuKHQobihlKEgsUyksYVsxXSksdChuKGUoVixfKSwtb1sxXSksbihlKGsseSksY1sxXSkpKSxzWzJdKSxuKHQobihlKFAsQSksYVsxXSksdChuKGUoQyx4KSwtb1sxXSksbihlKGsseSksc1sxXSkpKSwtY1syXSkpKSxpWzNdKSkpLHQodChuKHQodChuKHQobihlKHEsTyksb1sxXSksdChuKGUoSCxTKSwtc1sxXSksbihlKFAsQSksY1sxXSkpKSxpWzJdKSxuKHQobihlKHEsTyksaVsxXSksdChuKGUoVSxtKSwtc1sxXSksbihlKEwscCksY1sxXSkpKSwtb1syXSkpLHQobih0KG4oZShILFMpLGlbMV0pLHQobihlKFUsbSksLW9bMV0pLG4oZShULGgpLGNbMV0pKSksc1syXSksbih0KG4oZShQLEEpLGlbMV0pLHQobihlKEwscCksLW9bMV0pLG4oZShULGgpLHNbMV0pKSksLWNbMl0pKSksLWFbM10pLG4odCh0KG4odChuKGUocSxPKSxhWzFdKSx0KG4oZShWLF8pLC1zWzFdKSxuKGUoQyx4KSxjWzFdKSkpLGlbMl0pLG4odChuKGUocSxPKSxpWzFdKSx0KG4oZShVLG0pLC1zWzFdKSxuKGUoTCxwKSxjWzFdKSkpLC1hWzJdKSksdChuKHQobihlKFYsXyksaVsxXSksdChuKGUoVSxtKSwtYVsxXSksbihlKHYsZiksY1sxXSkpKSxzWzJdKSxuKHQobihlKEMseCksaVsxXSksdChuKGUoTCxwKSwtYVsxXSksbihlKHYsZiksc1sxXSkpKSwtY1syXSkpKSxvWzNdKSksdChuKHQodChuKHQobihlKEgsUyksYVsxXSksdChuKGUoVixfKSwtb1sxXSksbihlKGsseSksY1sxXSkpKSxpWzJdKSxuKHQobihlKEgsUyksaVsxXSksdChuKGUoVSxtKSwtb1sxXSksbihlKFQsaCksY1sxXSkpKSwtYVsyXSkpLHQobih0KG4oZShWLF8pLGlbMV0pLHQobihlKFUsbSksLWFbMV0pLG4oZSh2LGYpLGNbMV0pKSksb1syXSksbih0KG4oZShrLHkpLGlbMV0pLHQobihlKFQsaCksLWFbMV0pLG4oZSh2LGYpLG9bMV0pKSksLWNbMl0pKSksLXNbM10pLG4odCh0KG4odChuKGUoUCxBKSxhWzFdKSx0KG4oZShDLHgpLC1vWzFdKSxuKGUoayx5KSxzWzFdKSkpLGlbMl0pLG4odChuKGUoUCxBKSxpWzFdKSx0KG4oZShMLHApLC1vWzFdKSxuKGUoVCxoKSxzWzFdKSkpLC1hWzJdKSksdChuKHQobihlKEMseCksaVsxXSksdChuKGUoTCxwKSwtYVsxXSksbihlKHYsZiksc1sxXSkpKSxvWzJdKSxuKHQobihlKGsseSksaVsxXSksdChuKGUoVCxoKSwtYVsxXSksbihlKHYsZiksb1sxXSkpKSwtc1syXSkpKSxjWzNdKSkpKSksVz10KHQodChuKHQodChuKHQobihlKEcsTiksc1sxXSksdChuKGUocSxPKSwtbFsxXSksbihlKEIsSSksY1sxXSkpKSxvWzJdKSxuKHQobihlKEcsTiksb1sxXSksdChuKGUoSCxTKSwtbFsxXSksbihlKEYsTSksY1sxXSkpKSwtc1syXSkpLHQobih0KG4oZShxLE8pLG9bMV0pLHQobihlKEgsUyksLXNbMV0pLG4oZShQLEEpLGNbMV0pKSksbFsyXSksbih0KG4oZShCLEkpLG9bMV0pLHQobihlKEYsTSksLXNbMV0pLG4oZShQLEEpLGxbMV0pKSksLWNbMl0pKSksaVszXSksdChuKHQodChuKHQobihlKEcsTiksc1sxXSksdChuKGUocSxPKSwtbFsxXSksbihlKEIsSSksY1sxXSkpKSxpWzJdKSxuKHQobihlKEcsTiksaVsxXSksdChuKGUoVSxtKSwtbFsxXSksbihlKEQsZCksY1sxXSkpKSwtc1syXSkpLHQobih0KG4oZShxLE8pLGlbMV0pLHQobihlKFUsbSksLXNbMV0pLG4oZShMLHApLGNbMV0pKSksbFsyXSksbih0KG4oZShCLEkpLGlbMV0pLHQobihlKEQsZCksLXNbMV0pLG4oZShMLHApLGxbMV0pKSksLWNbMl0pKSksLW9bM10pLG4odCh0KG4odChuKGUoRyxOKSxvWzFdKSx0KG4oZShILFMpLC1sWzFdKSxuKGUoRixNKSxjWzFdKSkpLGlbMl0pLG4odChuKGUoRyxOKSxpWzFdKSx0KG4oZShVLG0pLC1sWzFdKSxuKGUoRCxkKSxjWzFdKSkpLC1vWzJdKSksdChuKHQobihlKEgsUyksaVsxXSksdChuKGUoVSxtKSwtb1sxXSksbihlKFQsaCksY1sxXSkpKSxsWzJdKSxuKHQobihlKEYsTSksaVsxXSksdChuKGUoRCxkKSwtb1sxXSksbihlKFQsaCksbFsxXSkpKSwtY1syXSkpKSxzWzNdKSkpLHQodChuKHQodChuKHQobihlKHEsTyksb1sxXSksdChuKGUoSCxTKSwtc1sxXSksbihlKFAsQSksY1sxXSkpKSxpWzJdKSxuKHQobihlKHEsTyksaVsxXSksdChuKGUoVSxtKSwtc1sxXSksbihlKEwscCksY1sxXSkpKSwtb1syXSkpLHQobih0KG4oZShILFMpLGlbMV0pLHQobihlKFUsbSksLW9bMV0pLG4oZShULGgpLGNbMV0pKSksc1syXSksbih0KG4oZShQLEEpLGlbMV0pLHQobihlKEwscCksLW9bMV0pLG4oZShULGgpLHNbMV0pKSksLWNbMl0pKSksLWxbM10pLG4odCh0KG4odChuKGUoQixJKSxvWzFdKSx0KG4oZShGLE0pLC1zWzFdKSxuKGUoUCxBKSxsWzFdKSkpLGlbMl0pLG4odChuKGUoQixJKSxpWzFdKSx0KG4oZShELGQpLC1zWzFdKSxuKGUoTCxwKSxsWzFdKSkpLC1vWzJdKSksdChuKHQobihlKEYsTSksaVsxXSksdChuKGUoRCxkKSwtb1sxXSksbihlKFQsaCksbFsxXSkpKSxzWzJdKSxuKHQobihlKFAsQSksaVsxXSksdChuKGUoTCxwKSwtb1sxXSksbihlKFQsaCksc1sxXSkpKSwtbFsyXSkpKSxjWzNdKSksdChuKHQodChuKHQobihlKEcsTiksb1sxXSksdChuKGUoSCxTKSwtbFsxXSksbihlKEYsTSksY1sxXSkpKSxhWzJdKSxuKHQobihlKEcsTiksYVsxXSksdChuKGUoVixfKSwtbFsxXSksbihlKFIsYiksY1sxXSkpKSwtb1syXSkpLHQobih0KG4oZShILFMpLGFbMV0pLHQobihlKFYsXyksLW9bMV0pLG4oZShrLHkpLGNbMV0pKSksbFsyXSksbih0KG4oZShGLE0pLGFbMV0pLHQobihlKFIsYiksLW9bMV0pLG4oZShrLHkpLGxbMV0pKSksLWNbMl0pKSksaVszXSksbih0KHQobih0KG4oZShHLE4pLG9bMV0pLHQobihlKEgsUyksLWxbMV0pLG4oZShGLE0pLGNbMV0pKSksaVsyXSksbih0KG4oZShHLE4pLGlbMV0pLHQobihlKFUsbSksLWxbMV0pLG4oZShELGQpLGNbMV0pKSksLW9bMl0pKSx0KG4odChuKGUoSCxTKSxpWzFdKSx0KG4oZShVLG0pLC1vWzFdKSxuKGUoVCxoKSxjWzFdKSkpLGxbMl0pLG4odChuKGUoRixNKSxpWzFdKSx0KG4oZShELGQpLC1vWzFdKSxuKGUoVCxoKSxsWzFdKSkpLC1jWzJdKSkpLC1hWzNdKSkpKSx0KHQodChuKHQodChuKHQobihlKEcsTiksYVsxXSksdChuKGUoVixfKSwtbFsxXSksbihlKFIsYiksY1sxXSkpKSxpWzJdKSxuKHQobihlKEcsTiksaVsxXSksdChuKGUoVSxtKSwtbFsxXSksbihlKEQsZCksY1sxXSkpKSwtYVsyXSkpLHQobih0KG4oZShWLF8pLGlbMV0pLHQobihlKFUsbSksLWFbMV0pLG4oZSh2LGYpLGNbMV0pKSksbFsyXSksbih0KG4oZShSLGIpLGlbMV0pLHQobihlKEQsZCksLWFbMV0pLG4oZSh2LGYpLGxbMV0pKSksLWNbMl0pKSksb1szXSksbih0KHQobih0KG4oZShILFMpLGFbMV0pLHQobihlKFYsXyksLW9bMV0pLG4oZShrLHkpLGNbMV0pKSksaVsyXSksbih0KG4oZShILFMpLGlbMV0pLHQobihlKFUsbSksLW9bMV0pLG4oZShULGgpLGNbMV0pKSksLWFbMl0pKSx0KG4odChuKGUoVixfKSxpWzFdKSx0KG4oZShVLG0pLC1hWzFdKSxuKGUodixmKSxjWzFdKSkpLG9bMl0pLG4odChuKGUoayx5KSxpWzFdKSx0KG4oZShULGgpLC1hWzFdKSxuKGUodixmKSxvWzFdKSkpLC1jWzJdKSkpLC1sWzNdKSksdChuKHQodChuKHQobihlKEYsTSksYVsxXSksdChuKGUoUixiKSwtb1sxXSksbihlKGsseSksbFsxXSkpKSxpWzJdKSxuKHQobihlKEYsTSksaVsxXSksdChuKGUoRCxkKSwtb1sxXSksbihlKFQsaCksbFsxXSkpKSwtYVsyXSkpLHQobih0KG4oZShSLGIpLGlbMV0pLHQobihlKEQsZCksLWFbMV0pLG4oZSh2LGYpLGxbMV0pKSksb1syXSksbih0KG4oZShrLHkpLGlbMV0pLHQobihlKFQsaCksLWFbMV0pLG4oZSh2LGYpLG9bMV0pKSksLWxbMl0pKSksY1szXSksbih0KHQobih0KG4oZShCLEkpLG9bMV0pLHQobihlKEYsTSksLXNbMV0pLG4oZShQLEEpLGxbMV0pKSksYVsyXSksbih0KG4oZShCLEkpLGFbMV0pLHQobihlKFIsYiksLXNbMV0pLG4oZShDLHgpLGxbMV0pKSksLW9bMl0pKSx0KG4odChuKGUoRixNKSxhWzFdKSx0KG4oZShSLGIpLC1vWzFdKSxuKGUoayx5KSxsWzFdKSkpLHNbMl0pLG4odChuKGUoUCxBKSxhWzFdKSx0KG4oZShDLHgpLC1vWzFdKSxuKGUoayx5KSxzWzFdKSkpLC1sWzJdKSkpLGlbM10pKSksdCh0KG4odCh0KG4odChuKGUoQixJKSxvWzFdKSx0KG4oZShGLE0pLC1zWzFdKSxuKGUoUCxBKSxsWzFdKSkpLGlbMl0pLG4odChuKGUoQixJKSxpWzFdKSx0KG4oZShELGQpLC1zWzFdKSxuKGUoTCxwKSxsWzFdKSkpLC1vWzJdKSksdChuKHQobihlKEYsTSksaVsxXSksdChuKGUoRCxkKSwtb1sxXSksbihlKFQsaCksbFsxXSkpKSxzWzJdKSxuKHQobihlKFAsQSksaVsxXSksdChuKGUoTCxwKSwtb1sxXSksbihlKFQsaCksc1sxXSkpKSwtbFsyXSkpKSwtYVszXSksbih0KHQobih0KG4oZShCLEkpLGFbMV0pLHQobihlKFIsYiksLXNbMV0pLG4oZShDLHgpLGxbMV0pKSksaVsyXSksbih0KG4oZShCLEkpLGlbMV0pLHQobihlKEQsZCksLXNbMV0pLG4oZShMLHApLGxbMV0pKSksLWFbMl0pKSx0KG4odChuKGUoUixiKSxpWzFdKSx0KG4oZShELGQpLC1hWzFdKSxuKGUodixmKSxsWzFdKSkpLHNbMl0pLG4odChuKGUoQyx4KSxpWzFdKSx0KG4oZShMLHApLC1hWzFdKSxuKGUodixmKSxzWzFdKSkpLC1sWzJdKSkpLG9bM10pKSx0KG4odCh0KG4odChuKGUoRixNKSxhWzFdKSx0KG4oZShSLGIpLC1vWzFdKSxuKGUoayx5KSxsWzFdKSkpLGlbMl0pLG4odChuKGUoRixNKSxpWzFdKSx0KG4oZShELGQpLC1vWzFdKSxuKGUoVCxoKSxsWzFdKSkpLC1hWzJdKSksdChuKHQobihlKFIsYiksaVsxXSksdChuKGUoRCxkKSwtYVsxXSksbihlKHYsZiksbFsxXSkpKSxvWzJdKSxuKHQobihlKGsseSksaVsxXSksdChuKGUoVCxoKSwtYVsxXSksbihlKHYsZiksb1sxXSkpKSwtbFsyXSkpKSwtc1szXSksbih0KHQobih0KG4oZShQLEEpLGFbMV0pLHQobihlKEMseCksLW9bMV0pLG4oZShrLHkpLHNbMV0pKSksaVsyXSksbih0KG4oZShQLEEpLGlbMV0pLHQobihlKEwscCksLW9bMV0pLG4oZShULGgpLHNbMV0pKSksLWFbMl0pKSx0KG4odChuKGUoQyx4KSxpWzFdKSx0KG4oZShMLHApLC1hWzFdKSxuKGUodixmKSxzWzFdKSkpLG9bMl0pLG4odChuKGUoayx5KSxpWzFdKSx0KG4oZShULGgpLC1hWzFdKSxuKGUodixmKSxvWzFdKSkpLC1zWzJdKSkpLGxbM10pKSkpKSxYPWUoWSxXKTtyZXR1cm4gWFtYLmxlbmd0aC0xXX19dmFyIGg9W2Z1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKCl7cmV0dXJuIDB9XTtmdW5jdGlvbiBwKHQpe3ZhciBlPWhbdC5sZW5ndGhdO3JldHVybiBlfHwoZT1oW3QubGVuZ3RoXT1zKHQubGVuZ3RoKSksZS5hcHBseSh2b2lkIDAsdCl9ZnVuY3Rpb24gZCh0LGUscixuLGksYSxvLHMpe3JldHVybiBmdW5jdGlvbihlLHIsbCxjLHUsZil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIDA7Y2FzZSAyOnJldHVybiBuKGUscik7Y2FzZSAzOnJldHVybiBpKGUscixsKTtjYXNlIDQ6cmV0dXJuIGEoZSxyLGwsYyk7Y2FzZSA1OnJldHVybiBvKGUscixsLGMsdSk7Y2FzZSA2OnJldHVybiBzKGUscixsLGMsdSxmKX1mb3IodmFyIGg9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLHA9MDtwPGFyZ3VtZW50cy5sZW5ndGg7KytwKWhbcF09YXJndW1lbnRzW3BdO3JldHVybiB0KGgpfX0hZnVuY3Rpb24oKXtmb3IoO2gubGVuZ3RoPD02OyloLnB1c2gocyhoLmxlbmd0aCkpO2UuZXhwb3J0cz1kLmFwcGx5KHZvaWQgMCxbcF0uY29uY2F0KGgpKTtmb3IodmFyIHQ9MDt0PD02OysrdCllLmV4cG9ydHNbdF09aFt0XX0oKX0seyJyb2J1c3Qtc2NhbGUiOjUyNiwicm9idXN0LXN1YnRyYWN0Ijo1MjgsInJvYnVzdC1zdW0iOjUyOSwidHdvLXByb2R1Y3QiOjU3N31dLDUyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyb2J1c3QtZGV0ZXJtaW5hbnQiKTtmdW5jdGlvbiBpKHQpe3ZhciBlPTI9PT10P2E6bztyZXR1cm4gZSh0PDM/blt0XTpuKX1mdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVyblt0KFtbK3JbMF0sK2VbMF1bMV1dLFsrclsxXSwrZVsxXVsxXV1dKSx0KFtbK2VbMF1bMF0sK3JbMF1dLFsrZVsxXVswXSwrclsxXV1dKSx0KGUpXX19ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm5bdChbWytyWzBdLCtlWzBdWzFdLCtlWzBdWzJdXSxbK3JbMV0sK2VbMV1bMV0sK2VbMV1bMl1dLFsrclsyXSwrZVsyXVsxXSwrZVsyXVsyXV1dKSx0KFtbK2VbMF1bMF0sK3JbMF0sK2VbMF1bMl1dLFsrZVsxXVswXSwrclsxXSwrZVsxXVsyXV0sWytlWzJdWzBdLCtyWzJdLCtlWzJdWzJdXV0pLHQoW1srZVswXVswXSwrZVswXVsxXSwrclswXV0sWytlWzFdWzBdLCtlWzFdWzFdLCtyWzFdXSxbK2VbMl1bMF0sK2VbMl1bMV0sK3JbMl1dXSksdChlKV19fXZhciBzPVtmdW5jdGlvbigpe3JldHVybltbMF1dfSxmdW5jdGlvbih0LGUpe3JldHVybltbZVswXV0sW3RbMF1bMF1dXX1dO2Z1bmN0aW9uIGwodCxlLHIsbixpLGEpe3JldHVybiBmdW5jdGlvbihvLHMpe3N3aXRjaChvLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB0KG8scyk7Y2FzZSAxOnJldHVybiBlKG8scyk7Y2FzZSAyOnJldHVybiByKG8scyk7Y2FzZSAzOnJldHVybiBuKG8scyl9dmFyIGw9aVtvLmxlbmd0aF07cmV0dXJuIGx8fChsPWlbby5sZW5ndGhdPWEoby5sZW5ndGgpKSxsKG8scyl9fSFmdW5jdGlvbigpe2Zvcig7cy5sZW5ndGg8PTM7KXMucHVzaChpKHMubGVuZ3RoKSk7ZS5leHBvcnRzPWwuYXBwbHkodm9pZCAwLHMuY29uY2F0KFtzLGldKSk7Zm9yKHZhciB0PTA7dDwzOysrdCllLmV4cG9ydHNbdF09c1t0XX0oKX0seyJyb2J1c3QtZGV0ZXJtaW5hbnQiOjUyMH1dLDUyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0d28tcHJvZHVjdCIpLGk9dCgicm9idXN0LXN1bSIpLGE9dCgicm9idXN0LXNjYWxlIiksbz10KCJyb2J1c3Qtc3VidHJhY3QiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbihyLGksYSl7dmFyIG89dCh0KGUoaVsxXSxhWzBdKSxlKC1hWzFdLGlbMF0pKSx0KGUoclsxXSxpWzBdKSxlKC1pWzFdLHJbMF0pKSkscz10KGUoclsxXSxhWzBdKSxlKC1hWzFdLHJbMF0pKSxsPW4obyxzKTtyZXR1cm4gbFtsLmxlbmd0aC0xXX19ZnVuY3Rpb24gbCh0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24oaSxhLG8scyl7dmFyIGw9dCh0KHIodChlKG9bMV0sc1swXSksZSgtc1sxXSxvWzBdKSksYVsyXSksdChyKHQoZShhWzFdLHNbMF0pLGUoLXNbMV0sYVswXSkpLC1vWzJdKSxyKHQoZShhWzFdLG9bMF0pLGUoLW9bMV0sYVswXSkpLHNbMl0pKSksdChyKHQoZShhWzFdLHNbMF0pLGUoLXNbMV0sYVswXSkpLGlbMl0pLHQocih0KGUoaVsxXSxzWzBdKSxlKC1zWzFdLGlbMF0pKSwtYVsyXSkscih0KGUoaVsxXSxhWzBdKSxlKC1hWzFdLGlbMF0pKSxzWzJdKSkpKSxjPXQodChyKHQoZShvWzFdLHNbMF0pLGUoLXNbMV0sb1swXSkpLGlbMl0pLHQocih0KGUoaVsxXSxzWzBdKSxlKC1zWzFdLGlbMF0pKSwtb1syXSkscih0KGUoaVsxXSxvWzBdKSxlKC1vWzFdLGlbMF0pKSxzWzJdKSkpLHQocih0KGUoYVsxXSxvWzBdKSxlKC1vWzFdLGFbMF0pKSxpWzJdKSx0KHIodChlKGlbMV0sb1swXSksZSgtb1sxXSxpWzBdKSksLWFbMl0pLHIodChlKGlbMV0sYVswXSksZSgtYVsxXSxpWzBdKSksb1syXSkpKSksdT1uKGwsYyk7cmV0dXJuIHVbdS5sZW5ndGgtMV19fWZ1bmN0aW9uIGModCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksYSxvLHMsbCl7dmFyIGM9dCh0KHQocih0KHIodChlKHNbMV0sbFswXSksZSgtbFsxXSxzWzBdKSksb1syXSksdChyKHQoZShvWzFdLGxbMF0pLGUoLWxbMV0sb1swXSkpLC1zWzJdKSxyKHQoZShvWzFdLHNbMF0pLGUoLXNbMV0sb1swXSkpLGxbMl0pKSksYVszXSksdChyKHQocih0KGUoc1sxXSxsWzBdKSxlKC1sWzFdLHNbMF0pKSxhWzJdKSx0KHIodChlKGFbMV0sbFswXSksZSgtbFsxXSxhWzBdKSksLXNbMl0pLHIodChlKGFbMV0sc1swXSksZSgtc1sxXSxhWzBdKSksbFsyXSkpKSwtb1szXSkscih0KHIodChlKG9bMV0sbFswXSksZSgtbFsxXSxvWzBdKSksYVsyXSksdChyKHQoZShhWzFdLGxbMF0pLGUoLWxbMV0sYVswXSkpLC1vWzJdKSxyKHQoZShhWzFdLG9bMF0pLGUoLW9bMV0sYVswXSkpLGxbMl0pKSksc1szXSkpKSx0KHIodChyKHQoZShvWzFdLHNbMF0pLGUoLXNbMV0sb1swXSkpLGFbMl0pLHQocih0KGUoYVsxXSxzWzBdKSxlKC1zWzFdLGFbMF0pKSwtb1syXSkscih0KGUoYVsxXSxvWzBdKSxlKC1vWzFdLGFbMF0pKSxzWzJdKSkpLC1sWzNdKSx0KHIodChyKHQoZShzWzFdLGxbMF0pLGUoLWxbMV0sc1swXSkpLGFbMl0pLHQocih0KGUoYVsxXSxsWzBdKSxlKC1sWzFdLGFbMF0pKSwtc1syXSkscih0KGUoYVsxXSxzWzBdKSxlKC1zWzFdLGFbMF0pKSxsWzJdKSkpLGlbM10pLHIodChyKHQoZShzWzFdLGxbMF0pLGUoLWxbMV0sc1swXSkpLGlbMl0pLHQocih0KGUoaVsxXSxsWzBdKSxlKC1sWzFdLGlbMF0pKSwtc1syXSkscih0KGUoaVsxXSxzWzBdKSxlKC1zWzFdLGlbMF0pKSxsWzJdKSkpLC1hWzNdKSkpKSx0KHQocih0KHIodChlKGFbMV0sbFswXSksZSgtbFsxXSxhWzBdKSksaVsyXSksdChyKHQoZShpWzFdLGxbMF0pLGUoLWxbMV0saVswXSkpLC1hWzJdKSxyKHQoZShpWzFdLGFbMF0pLGUoLWFbMV0saVswXSkpLGxbMl0pKSksc1szXSksdChyKHQocih0KGUoYVsxXSxzWzBdKSxlKC1zWzFdLGFbMF0pKSxpWzJdKSx0KHIodChlKGlbMV0sc1swXSksZSgtc1sxXSxpWzBdKSksLWFbMl0pLHIodChlKGlbMV0sYVswXSksZSgtYVsxXSxpWzBdKSksc1syXSkpKSwtbFszXSkscih0KHIodChlKG9bMV0sc1swXSksZSgtc1sxXSxvWzBdKSksYVsyXSksdChyKHQoZShhWzFdLHNbMF0pLGUoLXNbMV0sYVswXSkpLC1vWzJdKSxyKHQoZShhWzFdLG9bMF0pLGUoLW9bMV0sYVswXSkpLHNbMl0pKSksaVszXSkpKSx0KHIodChyKHQoZShvWzFdLHNbMF0pLGUoLXNbMV0sb1swXSkpLGlbMl0pLHQocih0KGUoaVsxXSxzWzBdKSxlKC1zWzFdLGlbMF0pKSwtb1syXSkscih0KGUoaVsxXSxvWzBdKSxlKC1vWzFdLGlbMF0pKSxzWzJdKSkpLC1hWzNdKSx0KHIodChyKHQoZShhWzFdLHNbMF0pLGUoLXNbMV0sYVswXSkpLGlbMl0pLHQocih0KGUoaVsxXSxzWzBdKSxlKC1zWzFdLGlbMF0pKSwtYVsyXSkscih0KGUoaVsxXSxhWzBdKSxlKC1hWzFdLGlbMF0pKSxzWzJdKSkpLG9bM10pLHIodChyKHQoZShhWzFdLG9bMF0pLGUoLW9bMV0sYVswXSkpLGlbMl0pLHQocih0KGUoaVsxXSxvWzBdKSxlKC1vWzFdLGlbMF0pKSwtYVsyXSkscih0KGUoaVsxXSxhWzBdKSxlKC1hWzFdLGlbMF0pKSxvWzJdKSkpLC1zWzNdKSkpKSksdT10KHQodChyKHQocih0KGUoc1sxXSxsWzBdKSxlKC1sWzFdLHNbMF0pKSxvWzJdKSx0KHIodChlKG9bMV0sbFswXSksZSgtbFsxXSxvWzBdKSksLXNbMl0pLHIodChlKG9bMV0sc1swXSksZSgtc1sxXSxvWzBdKSksbFsyXSkpKSxpWzNdKSxyKHQocih0KGUoc1sxXSxsWzBdKSxlKC1sWzFdLHNbMF0pKSxpWzJdKSx0KHIodChlKGlbMV0sbFswXSksZSgtbFsxXSxpWzBdKSksLXNbMl0pLHIodChlKGlbMV0sc1swXSksZSgtc1sxXSxpWzBdKSksbFsyXSkpKSwtb1szXSkpLHQocih0KHIodChlKG9bMV0sbFswXSksZSgtbFsxXSxvWzBdKSksaVsyXSksdChyKHQoZShpWzFdLGxbMF0pLGUoLWxbMV0saVswXSkpLC1vWzJdKSxyKHQoZShpWzFdLG9bMF0pLGUoLW9bMV0saVswXSkpLGxbMl0pKSksc1szXSkscih0KHIodChlKG9bMV0sc1swXSksZSgtc1sxXSxvWzBdKSksaVsyXSksdChyKHQoZShpWzFdLHNbMF0pLGUoLXNbMV0saVswXSkpLC1vWzJdKSxyKHQoZShpWzFdLG9bMF0pLGUoLW9bMV0saVswXSkpLHNbMl0pKSksLWxbM10pKSksdCh0KHIodChyKHQoZShvWzFdLGxbMF0pLGUoLWxbMV0sb1swXSkpLGFbMl0pLHQocih0KGUoYVsxXSxsWzBdKSxlKC1sWzFdLGFbMF0pKSwtb1syXSkscih0KGUoYVsxXSxvWzBdKSxlKC1vWzFdLGFbMF0pKSxsWzJdKSkpLGlbM10pLHIodChyKHQoZShvWzFdLGxbMF0pLGUoLWxbMV0sb1swXSkpLGlbMl0pLHQocih0KGUoaVsxXSxsWzBdKSxlKC1sWzFdLGlbMF0pKSwtb1syXSkscih0KGUoaVsxXSxvWzBdKSxlKC1vWzFdLGlbMF0pKSxsWzJdKSkpLC1hWzNdKSksdChyKHQocih0KGUoYVsxXSxsWzBdKSxlKC1sWzFdLGFbMF0pKSxpWzJdKSx0KHIodChlKGlbMV0sbFswXSksZSgtbFsxXSxpWzBdKSksLWFbMl0pLHIodChlKGlbMV0sYVswXSksZSgtYVsxXSxpWzBdKSksbFsyXSkpKSxvWzNdKSxyKHQocih0KGUoYVsxXSxvWzBdKSxlKC1vWzFdLGFbMF0pKSxpWzJdKSx0KHIodChlKGlbMV0sb1swXSksZSgtb1sxXSxpWzBdKSksLWFbMl0pLHIodChlKGlbMV0sYVswXSksZSgtYVsxXSxpWzBdKSksb1syXSkpKSwtbFszXSkpKSksZj1uKGMsdSk7cmV0dXJuIGZbZi5sZW5ndGgtMV19fWZ1bmN0aW9uIHUodCl7cmV0dXJuKDM9PT10P3M6ND09PXQ/bDpjKShpLG4sYSxvKX12YXIgZj11KDMpLGg9dSg0KSxwPVtmdW5jdGlvbigpe3JldHVybiAwfSxmdW5jdGlvbigpe3JldHVybiAwfSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLXRbMF19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPSh0WzFdLXJbMV0pKihlWzBdLXJbMF0pLGE9KHRbMF0tclswXSkqKGVbMV0tclsxXSksbz1pLWE7aWYoaT4wKXtpZihhPD0wKXJldHVybiBvO249aSthfWVsc2V7aWYoIShpPDApKXJldHVybiBvO2lmKGE+PTApcmV0dXJuIG87bj0tKGkrYSl9dmFyIHM9MzMzMDY2OTA3Mzg3NTQ3MTZlLTMyKm47cmV0dXJuIG8+PXN8fG88PS1zP286Zih0LGUscil9LGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbMF0tblswXSxhPWVbMF0tblswXSxvPXJbMF0tblswXSxzPXRbMV0tblsxXSxsPWVbMV0tblsxXSxjPXJbMV0tblsxXSx1PXRbMl0tblsyXSxmPWVbMl0tblsyXSxwPXJbMl0tblsyXSxkPWEqYyxtPW8qbCxnPW8qcyx2PWkqYyx5PWkqbCx4PWEqcyxiPXUqKGQtbSkrZiooZy12KStwKih5LXgpLF89Nzc3MTU2MTE3MjM3NjEwM2UtMzEqKChNYXRoLmFicyhkKStNYXRoLmFicyhtKSkqTWF0aC5hYnModSkrKE1hdGguYWJzKGcpK01hdGguYWJzKHYpKSpNYXRoLmFicyhmKSsoTWF0aC5hYnMoeSkrTWF0aC5hYnMoeCkpKk1hdGguYWJzKHApKTtyZXR1cm4gYj5ffHwtYj5fP2I6aCh0LGUscixuKX1dO2Z1bmN0aW9uIGQodCl7dmFyIGU9cFt0Lmxlbmd0aF07cmV0dXJuIGV8fChlPXBbdC5sZW5ndGhdPXUodC5sZW5ndGgpKSxlLmFwcGx5KHZvaWQgMCx0KX1mdW5jdGlvbiBtKHQsZSxyLG4saSxhLG8pe3JldHVybiBmdW5jdGlvbihlLHIscyxsLGMpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6Y2FzZSAxOnJldHVybiAwO2Nhc2UgMjpyZXR1cm4gbihlLHIpO2Nhc2UgMzpyZXR1cm4gaShlLHIscyk7Y2FzZSA0OnJldHVybiBhKGUscixzLGwpO2Nhc2UgNTpyZXR1cm4gbyhlLHIscyxsLGMpfWZvcih2YXIgdT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksZj0wO2Y8YXJndW1lbnRzLmxlbmd0aDsrK2YpdVtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHQodSl9fSFmdW5jdGlvbigpe2Zvcig7cC5sZW5ndGg8PTU7KXAucHVzaCh1KHAubGVuZ3RoKSk7ZS5leHBvcnRzPW0uYXBwbHkodm9pZCAwLFtkXS5jb25jYXQocCkpO2Zvcih2YXIgdD0wO3Q8PTU7Kyt0KWUuZXhwb3J0c1t0XT1wW3RdfSgpfSx7InJvYnVzdC1zY2FsZSI6NTI2LCJyb2J1c3Qtc3VidHJhY3QiOjUyOCwicm9idXN0LXN1bSI6NTI5LCJ0d28tcHJvZHVjdCI6NTc3fV0sNTI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJvYnVzdC1zdW0iKSxpPXQoInJvYnVzdC1zY2FsZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gaShlLHRbMF0pO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gaSh0LGVbMF0pO2lmKDA9PT10Lmxlbmd0aHx8MD09PWUubGVuZ3RoKXJldHVyblswXTt2YXIgcj1bMF07aWYodC5sZW5ndGg8ZS5sZW5ndGgpZm9yKHZhciBhPTA7YTx0Lmxlbmd0aDsrK2Epcj1uKHIsaShlLHRbYV0pKTtlbHNlIGZvcihhPTA7YTxlLmxlbmd0aDsrK2Epcj1uKHIsaSh0LGVbYV0pKTtyZXR1cm4gcn19LHsicm9idXN0LXNjYWxlIjo1MjYsInJvYnVzdC1zdW0iOjUyOX1dLDUyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0d28tcHJvZHVjdCIpLGk9dCgidHdvLXN1bSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKDE9PT1yKXt2YXIgYT1uKHRbMF0sZSk7cmV0dXJuIGFbMF0/YTpbYVsxXV19dmFyIG89bmV3IEFycmF5KDIqcikscz1bLjEsLjFdLGw9Wy4xLC4xXSxjPTA7bih0WzBdLGUscyksc1swXSYmKG9bYysrXT1zWzBdKTtmb3IodmFyIHU9MTt1PHI7Kyt1KXtuKHRbdV0sZSxsKTt2YXIgZj1zWzFdO2koZixsWzBdLHMpLHNbMF0mJihvW2MrK109c1swXSk7dmFyIGg9bFsxXSxwPXNbMV0sZD1oK3AsbT1wLShkLWgpO3NbMV09ZCxtJiYob1tjKytdPW0pfXNbMV0mJihvW2MrK109c1sxXSk7MD09PWMmJihvW2MrK109MCk7cmV0dXJuIG8ubGVuZ3RoPWMsb319LHsidHdvLXByb2R1Y3QiOjU3NywidHdvLXN1bSI6NTc4fV0sNTI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1uKHQscixpKSxvPW4oZSxyLGkpO2lmKGE+MCYmbz4wfHxhPDAmJm88MClyZXR1cm4hMTt2YXIgcz1uKHIsdCxlKSxsPW4oaSx0LGUpO2lmKHM+MCYmbD4wfHxzPDAmJmw8MClyZXR1cm4hMTtpZigwPT09YSYmMD09PW8mJjA9PT1zJiYwPT09bClyZXR1cm4gZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTA7aTwyOysraSl7dmFyIGE9dFtpXSxvPWVbaV0scz1NYXRoLm1pbihhLG8pLGw9TWF0aC5tYXgoYSxvKSxjPXJbaV0sdT1uW2ldLGY9TWF0aC5taW4oYyx1KTtpZihNYXRoLm1heChjLHUpPHN8fGw8ZilyZXR1cm4hMX1yZXR1cm4hMH0odCxlLHIsaSk7cmV0dXJuITB9O3ZhciBuPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpWzNdfSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NTI0fV0sNTI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPTB8dC5sZW5ndGgsbj0wfGUubGVuZ3RoO2lmKDE9PT1yJiYxPT09bilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj10K2Usbj1yLXQsaT10LShyLW4pKyhlLW4pO2lmKGkpcmV0dXJuW2kscl07cmV0dXJuW3JdfSh0WzBdLC1lWzBdKTt2YXIgaSxhLG89bmV3IEFycmF5KHIrbikscz0wLGw9MCxjPTAsdT1NYXRoLmFicyxmPXRbbF0saD11KGYpLHA9LWVbY10sZD11KHApO2g8ZD8oYT1mLChsKz0xKTxyJiYoZj10W2xdLGg9dShmKSkpOihhPXAsKGMrPTEpPG4mJihwPS1lW2NdLGQ9dShwKSkpO2w8ciYmaDxkfHxjPj1uPyhpPWYsKGwrPTEpPHImJihmPXRbbF0saD11KGYpKSk6KGk9cCwoYys9MSk8biYmKHA9LWVbY10sZD11KHApKSk7dmFyIG0sZyx2PWkrYSx5PXYtaSx4PWEteSxiPXgsXz12O2Zvcig7bDxyJiZjPG47KWg8ZD8oaT1mLChsKz0xKTxyJiYoZj10W2xdLGg9dShmKSkpOihpPXAsKGMrPTEpPG4mJihwPS1lW2NdLGQ9dShwKSkpLCh4PShhPWIpLSh5PSh2PWkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKG09Xyt2KS0oZz1tLV8pKSsodi1nKSxfPW07Zm9yKDtsPHI7KSh4PShhPWIpLSh5PSh2PShpPWYpK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChtPV8rdiktKGc9bS1fKSkrKHYtZyksXz1tLChsKz0xKTxyJiYoZj10W2xdKTtmb3IoO2M8bjspKHg9KGE9YiktKHk9KHY9KGk9cCkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKG09Xyt2KS0oZz1tLV8pKSsodi1nKSxfPW0sKGMrPTEpPG4mJihwPS1lW2NdKTtiJiYob1tzKytdPWIpO18mJihvW3MrK109Xyk7c3x8KG9bcysrXT0wKTtyZXR1cm4gby5sZW5ndGg9cyxvfX0se31dLDUyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0wfHQubGVuZ3RoLG49MHxlLmxlbmd0aDtpZigxPT09ciYmMT09PW4pcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9dCtlLG49ci10LGk9dC0oci1uKSsoZS1uKTtpZihpKXJldHVybltpLHJdO3JldHVybltyXX0odFswXSxlWzBdKTt2YXIgaSxhLG89bmV3IEFycmF5KHIrbikscz0wLGw9MCxjPTAsdT1NYXRoLmFicyxmPXRbbF0saD11KGYpLHA9ZVtjXSxkPXUocCk7aDxkPyhhPWYsKGwrPTEpPHImJihmPXRbbF0saD11KGYpKSk6KGE9cCwoYys9MSk8biYmKHA9ZVtjXSxkPXUocCkpKTtsPHImJmg8ZHx8Yz49bj8oaT1mLChsKz0xKTxyJiYoZj10W2xdLGg9dShmKSkpOihpPXAsKGMrPTEpPG4mJihwPWVbY10sZD11KHApKSk7dmFyIG0sZyx2PWkrYSx5PXYtaSx4PWEteSxiPXgsXz12O2Zvcig7bDxyJiZjPG47KWg8ZD8oaT1mLChsKz0xKTxyJiYoZj10W2xdLGg9dShmKSkpOihpPXAsKGMrPTEpPG4mJihwPWVbY10sZD11KHApKSksKHg9KGE9YiktKHk9KHY9aSthKS1pKSkmJihvW3MrK109eCksYj1fLSgobT1fK3YpLShnPW0tXykpKyh2LWcpLF89bTtmb3IoO2w8cjspKHg9KGE9YiktKHk9KHY9KGk9ZikrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKG09Xyt2KS0oZz1tLV8pKSsodi1nKSxfPW0sKGwrPTEpPHImJihmPXRbbF0pO2Zvcig7YzxuOykoeD0oYT1iKS0oeT0odj0oaT1wKSthKS1pKSkmJihvW3MrK109eCksYj1fLSgobT1fK3YpLShnPW0tXykpKyh2LWcpLF89bSwoYys9MSk8biYmKHA9ZVtjXSk7YiYmKG9bcysrXT1iKTtfJiYob1tzKytdPV8pO3N8fChvW3MrK109MCk7cmV0dXJuIG8ubGVuZ3RoPXMsb319LHt9XSw1MzA6W2Z1bmN0aW9uKHQsZSxyKXsKLyohIHNhZmUtYnVmZmVyLiBNSVQgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovCnZhciBuPXQoImJ1ZmZlciIpLGk9bi5CdWZmZXI7ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX1mdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gaSh0LGUscil9aS5mcm9tJiZpLmFsbG9jJiZpLmFsbG9jVW5zYWZlJiZpLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9bjooYShuLHIpLHIuQnVmZmVyPW8pLG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLGEoaSxvKSxvLmZyb209ZnVuY3Rpb24odCxlLHIpe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBpKHQsZSxyKX0sby5hbGxvYz1mdW5jdGlvbih0LGUscil7aWYoIm51bWJlciIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgbj1pKHQpO3JldHVybiB2b2lkIDAhPT1lPyJzdHJpbmciPT10eXBlb2Ygcj9uLmZpbGwoZSxyKTpuLmZpbGwoZSk6bi5maWxsKDApLG59LG8uYWxsb2NVbnNhZmU9ZnVuY3Rpb24odCl7aWYoIm51bWJlciIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gaSh0KX0sby5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odCl7aWYoIm51bWJlciIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gbi5TbG93QnVmZmVyKHQpfX0se2J1ZmZlcjoxMTJ9XSw1MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCkpfTt2YXIgbj10KCJib3VuZGFyeS1jZWxscyIpLGk9dCgicmVkdWNlLXNpbXBsaWNpYWwtY29tcGxleCIpfSx7ImJvdW5kYXJ5LWNlbGxzIjoxMDMsInJlZHVjZS1zaW1wbGljaWFsLWNvbXBsZXgiOjUxMX1dLDUzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7cj1yfHwwLHZvaWQgMD09PXMmJihzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPTAsbj0wO248ZTsrK24pcj0wfE1hdGgubWF4KHIsdFtuXS5sZW5ndGgpO3JldHVybiByLTF9KHQpKTtpZigwPT09dC5sZW5ndGh8fHM8MSlyZXR1cm57Y2VsbHM6W10sdmVydGV4SWRzOltdLHZlcnRleFdlaWdodHM6W119O3ZhciBsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49aS5tYWxsb2NVaW50OChyKSxhPTA7YTxyOysrYSluW2FdPXRbYV08ZXwwO3JldHVybiBufShlLCtyKSxjPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG89ZSooZSsxKS8yKnJ8MCxzPWkubWFsbG9jVWludDMyKDIqbyksbD0wLGM9MDtjPHI7KytjKWZvcih2YXIgdT10W2NdLGY9KGU9dS5sZW5ndGgsMCk7ZjxlOysrZilmb3IodmFyIGg9MDtoPGY7KytoKXt2YXIgcD11W2hdLGQ9dVtmXTtzW2wrK109MHxNYXRoLm1pbihwLGQpLHNbbCsrXT0wfE1hdGgubWF4KHAsZCl9YShuKHMsW2wvMnwwLDJdKSk7dmFyIG09Mjtmb3IoYz0yO2M8bDtjKz0yKXNbYy0yXT09PXNbY10mJnNbYy0xXT09PXNbYysxXXx8KHNbbSsrXT1zW2NdLHNbbSsrXT1zW2MrMV0pO3JldHVybiBuKHMsW20vMnwwLDJdKX0odCxzKSx1PWZ1bmN0aW9uKHQsZSxyLGEpe2Zvcih2YXIgbz10LmRhdGEscz10LnNoYXBlWzBdLGw9aS5tYWxsb2NEb3VibGUocyksYz0wLHU9MDt1PHM7Kyt1KXt2YXIgZj1vWzIqdV0saD1vWzIqdSsxXTtpZihyW2ZdIT09cltoXSl7dmFyIHA9ZVtmXSxkPWVbaF07b1syKmNdPWYsb1syKmMrMV09aCxsW2MrK109KGQtYSkvKGQtcCl9fXJldHVybiB0LnNoYXBlWzBdPWMsbihsLFtjXSl9KGMsZSxsLCtyKSxmPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aS5tYWxsb2NJbnQzMigyKmUpLG49dC5zaGFwZVswXSxhPXQuZGF0YTtyWzBdPTA7Zm9yKHZhciBvPTAscz0wO3M8bjsrK3Mpe3ZhciBsPWFbMipzXTtpZihsIT09byl7Zm9yKHJbMipvKzFdPXM7KytvPGw7KXJbMipvXT1zLHJbMipvKzFdPXM7clsyKm9dPXN9fXJbMipvKzFdPW47Zm9yKDsrK288ZTspclsyKm9dPXJbMipvKzFdPW47cmV0dXJuIHJ9KGMsMHxlLmxlbmd0aCksaD1vKHMpKHQsYy5kYXRhLGYsbCkscD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MHx0LnNoYXBlWzBdLHI9dC5kYXRhLG49bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW5baV09W3JbMippXSxyWzIqaSsxXV07cmV0dXJuIG59KGMpLGQ9W10uc2xpY2UuY2FsbCh1LmRhdGEsMCx1LnNoYXBlWzBdKTtyZXR1cm4gaS5mcmVlKGwpLGkuZnJlZShjLmRhdGEpLGkuZnJlZSh1LmRhdGEpLGkuZnJlZShmKSx7Y2VsbHM6aCx2ZXJ0ZXhJZHM6cCx2ZXJ0ZXhXZWlnaHRzOmR9fTt2YXIgbj10KCJuZGFycmF5IiksaT10KCJ0eXBlZGFycmF5LXBvb2wiKSxhPXQoIm5kYXJyYXktc29ydCIpLG89dCgiLi9saWIvY29kZWdlbiIpfSx7Ii4vbGliL2NvZGVnZW4iOjUzMyxuZGFycmF5OjQ2MiwibmRhcnJheS1zb3J0Ijo0NjEsInR5cGVkYXJyYXktcG9vbCI6NTkwfV0sNTMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblt0XSgpfTt2YXIgbj1bZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPXQubGVuZ3RoLGE9MDthPGk7KythKXRbYV0ubGVuZ3RoO3JldHVybltdfX0sZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxyLG4pe2Zvcih2YXIgaT0wfE1hdGgubWluKHIsbiksYT0wfE1hdGgubWF4KHIsbiksbz10WzIqaV0scz10WzIqaSsxXTtvPHM7KXt2YXIgbD1vK3M+PjEsYz1lWzIqbCsxXTtpZihjPT09YSlyZXR1cm4gbDthPGM/cz1sOm89bCsxfXJldHVybiBvfXJldHVybiBmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9ZS5sZW5ndGgsbz1bXSxzPTA7czxhOysrcyl7dmFyIGw9ZVtzXTtpZigyPT09bC5sZW5ndGgpe3ZhciBjPShpW2xbMF1dPDwwKSsoaVtsWzFdXTw8MSk7aWYoMD09PWN8fDM9PT1jKWNvbnRpbnVlO3N3aXRjaChjKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOm8ucHVzaChbdChuLHIsbFswXSxsWzFdKV0pO2JyZWFrO2Nhc2UgMjpvLnB1c2goW3QobixyLGxbMV0sbFswXSldKX19fXJldHVybiBvfX0sZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxyLG4pe2Zvcih2YXIgaT0wfE1hdGgubWluKHIsbiksYT0wfE1hdGgubWF4KHIsbiksbz10WzIqaV0scz10WzIqaSsxXTtvPHM7KXt2YXIgbD1vK3M+PjEsYz1lWzIqbCsxXTtpZihjPT09YSlyZXR1cm4gbDthPGM/cz1sOm89bCsxfXJldHVybiBvfXJldHVybiBmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9ZS5sZW5ndGgsbz1bXSxzPTA7czxhOysrcyl7dmFyIGw9ZVtzXSxjPWwubGVuZ3RoO2lmKDM9PT1jKXtpZigwPT09KHU9KGlbbFswXV08PDApKyhpW2xbMV1dPDwxKSsoaVtsWzJdXTw8MikpfHw3PT09dSljb250aW51ZTtzd2l0Y2godSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpvLnB1c2goW3QobixyLGxbMF0sbFsyXSksdChuLHIsbFswXSxsWzFdKV0pO2JyZWFrO2Nhc2UgMjpvLnB1c2goW3QobixyLGxbMV0sbFswXSksdChuLHIsbFsxXSxsWzJdKV0pO2JyZWFrO2Nhc2UgMzpvLnB1c2goW3QobixyLGxbMF0sbFsyXSksdChuLHIsbFsxXSxsWzJdKV0pO2JyZWFrO2Nhc2UgNDpvLnB1c2goW3QobixyLGxbMl0sbFsxXSksdChuLHIsbFsyXSxsWzBdKV0pO2JyZWFrO2Nhc2UgNTpvLnB1c2goW3QobixyLGxbMl0sbFsxXSksdChuLHIsbFswXSxsWzFdKV0pO2JyZWFrO2Nhc2UgNjpvLnB1c2goW3QobixyLGxbMV0sbFswXSksdChuLHIsbFsyXSxsWzBdKV0pfX1lbHNlIGlmKDI9PT1jKXt2YXIgdTtpZigwPT09KHU9KGlbbFswXV08PDApKyhpW2xbMV1dPDwxKSl8fDM9PT11KWNvbnRpbnVlO3N3aXRjaCh1KXtjYXNlIDA6YnJlYWs7Y2FzZSAxOm8ucHVzaChbdChuLHIsbFswXSxsWzFdKV0pO2JyZWFrO2Nhc2UgMjpvLnB1c2goW3QobixyLGxbMV0sbFswXSldKX19fXJldHVybiBvfX0sZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxyLG4pe2Zvcih2YXIgaT0wfE1hdGgubWluKHIsbiksYT0wfE1hdGgubWF4KHIsbiksbz10WzIqaV0scz10WzIqaSsxXTtvPHM7KXt2YXIgbD1vK3M+PjEsYz1lWzIqbCsxXTtpZihjPT09YSlyZXR1cm4gbDthPGM/cz1sOm89bCsxfXJldHVybiBvfXJldHVybiBmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9ZS5sZW5ndGgsbz1bXSxzPTA7czxhOysrcyl7dmFyIGw9ZVtzXSxjPWwubGVuZ3RoO2lmKDQ9PT1jKXtpZigwPT09KHU9KGlbbFswXV08PDApKyhpW2xbMV1dPDwxKSsoaVtsWzJdXTw8MikrKGlbbFszXV08PDMpKXx8MTU9PT11KWNvbnRpbnVlO3N3aXRjaCh1KXtjYXNlIDA6YnJlYWs7Y2FzZSAxOm8ucHVzaChbdChuLHIsbFswXSxsWzFdKSx0KG4scixsWzBdLGxbMl0pLHQobixyLGxbMF0sbFszXSldKTticmVhaztjYXNlIDI6by5wdXNoKFt0KG4scixsWzFdLGxbMl0pLHQobixyLGxbMV0sbFswXSksdChuLHIsbFsxXSxsWzNdKV0pO2JyZWFrO2Nhc2UgMzpvLnB1c2goW3QobixyLGxbMV0sbFsyXSksdChuLHIsbFswXSxsWzJdKSx0KG4scixsWzBdLGxbM10pXSxbdChuLHIsbFsxXSxsWzNdKSx0KG4scixsWzFdLGxbMl0pLHQobixyLGxbMF0sbFszXSldKTticmVhaztjYXNlIDQ6by5wdXNoKFt0KG4scixsWzJdLGxbMF0pLHQobixyLGxbMl0sbFsxXSksdChuLHIsbFsyXSxsWzNdKV0pO2JyZWFrO2Nhc2UgNTpvLnB1c2goW3QobixyLGxbMF0sbFsxXSksdChuLHIsbFsyXSxsWzFdKSx0KG4scixsWzBdLGxbM10pXSxbdChuLHIsbFsyXSxsWzFdKSx0KG4scixsWzJdLGxbM10pLHQobixyLGxbMF0sbFszXSldKTticmVhaztjYXNlIDY6by5wdXNoKFt0KG4scixsWzJdLGxbMF0pLHQobixyLGxbMV0sbFswXSksdChuLHIsbFsxXSxsWzNdKV0sW3QobixyLGxbMl0sbFszXSksdChuLHIsbFsyXSxsWzBdKSx0KG4scixsWzFdLGxbM10pXSk7YnJlYWs7Y2FzZSA3Om8ucHVzaChbdChuLHIsbFswXSxsWzNdKSx0KG4scixsWzFdLGxbM10pLHQobixyLGxbMl0sbFszXSldKTticmVhaztjYXNlIDg6by5wdXNoKFt0KG4scixsWzNdLGxbMV0pLHQobixyLGxbM10sbFswXSksdChuLHIsbFszXSxsWzJdKV0pO2JyZWFrO2Nhc2UgOTpvLnB1c2goW3QobixyLGxbM10sbFsxXSksdChuLHIsbFswXSxsWzFdKSx0KG4scixsWzBdLGxbMl0pXSxbdChuLHIsbFszXSxsWzJdKSx0KG4scixsWzNdLGxbMV0pLHQobixyLGxbMF0sbFsyXSldKTticmVhaztjYXNlIDEwOm8ucHVzaChbdChuLHIsbFsxXSxsWzBdKSx0KG4scixsWzNdLGxbMF0pLHQobixyLGxbMV0sbFsyXSldLFt0KG4scixsWzNdLGxbMF0pLHQobixyLGxbM10sbFsyXSksdChuLHIsbFsxXSxsWzJdKV0pO2JyZWFrO2Nhc2UgMTE6by5wdXNoKFt0KG4scixsWzFdLGxbMl0pLHQobixyLGxbMF0sbFsyXSksdChuLHIsbFszXSxsWzJdKV0pO2JyZWFrO2Nhc2UgMTI6by5wdXNoKFt0KG4scixsWzNdLGxbMF0pLHQobixyLGxbMl0sbFswXSksdChuLHIsbFsyXSxsWzFdKV0sW3QobixyLGxbM10sbFsxXSksdChuLHIsbFszXSxsWzBdKSx0KG4scixsWzJdLGxbMV0pXSk7YnJlYWs7Y2FzZSAxMzpvLnB1c2goW3QobixyLGxbMF0sbFsxXSksdChuLHIsbFsyXSxsWzFdKSx0KG4scixsWzNdLGxbMV0pXSk7YnJlYWs7Y2FzZSAxNDpvLnB1c2goW3QobixyLGxbMl0sbFswXSksdChuLHIsbFsxXSxsWzBdKSx0KG4scixsWzNdLGxbMF0pXSl9fWVsc2UgaWYoMz09PWMpe2lmKDA9PT0odT0oaVtsWzBdXTw8MCkrKGlbbFsxXV08PDEpKyhpW2xbMl1dPDwyKSl8fDc9PT11KWNvbnRpbnVlO3N3aXRjaCh1KXtjYXNlIDA6YnJlYWs7Y2FzZSAxOm8ucHVzaChbdChuLHIsbFswXSxsWzJdKSx0KG4scixsWzBdLGxbMV0pXSk7YnJlYWs7Y2FzZSAyOm8ucHVzaChbdChuLHIsbFsxXSxsWzBdKSx0KG4scixsWzFdLGxbMl0pXSk7YnJlYWs7Y2FzZSAzOm8ucHVzaChbdChuLHIsbFswXSxsWzJdKSx0KG4scixsWzFdLGxbMl0pXSk7YnJlYWs7Y2FzZSA0Om8ucHVzaChbdChuLHIsbFsyXSxsWzFdKSx0KG4scixsWzJdLGxbMF0pXSk7YnJlYWs7Y2FzZSA1Om8ucHVzaChbdChuLHIsbFsyXSxsWzFdKSx0KG4scixsWzBdLGxbMV0pXSk7YnJlYWs7Y2FzZSA2Om8ucHVzaChbdChuLHIsbFsxXSxsWzBdKSx0KG4scixsWzJdLGxbMF0pXSl9fWVsc2UgaWYoMj09PWMpe3ZhciB1O2lmKDA9PT0odT0oaVtsWzBdXTw8MCkrKGlbbFsxXV08PDEpKXx8Mz09PXUpY29udGludWU7c3dpdGNoKHUpe2Nhc2UgMDpicmVhaztjYXNlIDE6by5wdXNoKFt0KG4scixsWzBdLGxbMV0pXSk7YnJlYWs7Y2FzZSAyOm8ucHVzaChbdChuLHIsbFsxXSxsWzBdKV0pfX19cmV0dXJuIG99fV19LHt9XSw1MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYml0LXR3aWRkbGUiKSxpPXQoInVuaW9uLWZpbmQiKTtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9dC5sZW5ndGgsbj10Lmxlbmd0aC1lLmxlbmd0aCxpPU1hdGgubWluO2lmKG4pcmV0dXJuIG47c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIHRbMF0tZVswXTtjYXNlIDI6cmV0dXJuKHM9dFswXSt0WzFdLWVbMF0tZVsxXSl8fGkodFswXSx0WzFdKS1pKGVbMF0sZVsxXSk7Y2FzZSAzOnZhciBhPXRbMF0rdFsxXSxvPWVbMF0rZVsxXTtpZihzPWErdFsyXS0obytlWzJdKSlyZXR1cm4gczt2YXIgcyxsPWkodFswXSx0WzFdKSxjPWkoZVswXSxlWzFdKTtyZXR1cm4ocz1pKGwsdFsyXSktaShjLGVbMl0pKXx8aShsK3RbMl0sYSktaShjK2VbMl0sbyk7ZGVmYXVsdDp2YXIgdT10LnNsaWNlKDApO3Uuc29ydCgpO3ZhciBmPWUuc2xpY2UoMCk7Zi5zb3J0KCk7Zm9yKHZhciBoPTA7aDxyOysraClpZihuPXVbaF0tZltoXSlyZXR1cm4gbjtyZXR1cm4gMH19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBhKHRbMF0sZVswXSl9ZnVuY3Rpb24gcyh0LGUpe2lmKGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSluW2ldPVt0W2ldLGVbaV1dO24uc29ydChvKTtmb3IoaT0wO2k8cjsrK2kpdFtpXT1uW2ldWzBdLGVbaV09bltpXVsxXTtyZXR1cm4gdH1yZXR1cm4gdC5zb3J0KGEpLHR9ZnVuY3Rpb24gbCh0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuW107Zm9yKHZhciBlPTEscj10Lmxlbmd0aCxuPTE7bjxyOysrbil7dmFyIGk9dFtuXTtpZihhKGksdFtuLTFdKSl7aWYobj09PWUpe2UrKztjb250aW51ZX10W2UrK109aX19cmV0dXJuIHQubGVuZ3RoPWUsdH1mdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aC0xLGk9LTE7cjw9bjspe3ZhciBvPXIrbj4+MSxzPWEodFtvXSxlKTtzPD0wPygwPT09cyYmKGk9bykscj1vKzEpOnM+MCYmKG49by0xKX1yZXR1cm4gaX1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wLG89ci5sZW5ndGg7aTxvOysraSlyW2ldPVtdO2Zvcih2YXIgcz1bXSxsPShpPTAsZS5sZW5ndGgpO2k8bDsrK2kpZm9yKHZhciB1PWVbaV0sZj11Lmxlbmd0aCxoPTEscD0xPDxmO2g8cDsrK2gpe3MubGVuZ3RoPW4ucG9wQ291bnQoaCk7Zm9yKHZhciBkPTAsbT0wO208ZjsrK20paCYxPDxtJiYoc1tkKytdPXVbbV0pO3ZhciBnPWModCxzKTtpZighKGc8MCkpZm9yKDtyW2crK10ucHVzaChpKSwhKGc+PXQubGVuZ3RofHwwIT09YSh0W2ddLHMpKTspO31yZXR1cm4gcn1mdW5jdGlvbiBmKHQsZSl7aWYoZTwwKXJldHVybltdO2Zvcih2YXIgcj1bXSxpPSgxPDxlKzEpLTEsYT0wO2E8dC5sZW5ndGg7KythKWZvcih2YXIgbz10W2FdLGw9aTtsPDE8PG8ubGVuZ3RoO2w9bi5uZXh0Q29tYmluYXRpb24obCkpe2Zvcih2YXIgYz1uZXcgQXJyYXkoZSsxKSx1PTAsZj0wO2Y8by5sZW5ndGg7KytmKWwmMTw8ZiYmKGNbdSsrXT1vW2ZdKTtyLnB1c2goYyl9cmV0dXJuIHMocil9ci5kaW1lbnNpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj1NYXRoLm1heCxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWU9cihlLHRbbl0ubGVuZ3RoKTtyZXR1cm4gZS0xfSxyLmNvdW50VmVydGljZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPS0xLHI9TWF0aC5tYXgsbj0wLGk9dC5sZW5ndGg7bjxpOysrbilmb3IodmFyIGE9dFtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKWU9cihlLGFbb10pO3JldHVybiBlKzF9LHIuY2xvbmVDZWxscz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWVbcl09dFtyXS5zbGljZSgwKTtyZXR1cm4gZX0sci5jb21wYXJlQ2VsbHM9YSxyLm5vcm1hbGl6ZT1zLHIudW5pcXVlPWwsci5maW5kQ2VsbD1jLHIuaW5jaWRlbmNlPXUsci5kdWFsPWZ1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuIHUobChmKHQsMCkpLHQpO2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT1bXTtuPTA7Zm9yKHZhciBpPXQubGVuZ3RoO248aTsrK24pZm9yKHZhciBhPXRbbl0sbz0wLHM9YS5sZW5ndGg7bzxzOysrbylyW2Fbb11dLnB1c2gobik7cmV0dXJuIHJ9LHIuZXhwbG9kZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTB8aS5sZW5ndGgsbz0xLGw9MTw8YTtvPGw7KytvKXtmb3IodmFyIGM9W10sdT0wO3U8YTsrK3Upbz4+PnUmMSYmYy5wdXNoKGlbdV0pO2UucHVzaChjKX1yZXR1cm4gcyhlKX0sci5za2VsZXRvbj1mLHIuYm91bmRhcnk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wLG89aS5sZW5ndGg7YTxvOysrYSl7Zm9yKHZhciBsPW5ldyBBcnJheShpLmxlbmd0aC0xKSxjPTAsdT0wO2M8bzsrK2MpYyE9PWEmJihsW3UrK109aVtjXSk7ZS5wdXNoKGwpfXJldHVybiBzKGUpfSxyLmNvbm5lY3RlZENvbXBvbmVudHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgaShlKSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBhPXRbbl0sbz0wO288YS5sZW5ndGg7KytvKWZvcih2YXIgcz1vKzE7czxhLmxlbmd0aDsrK3Mpci5saW5rKGFbb10sYVtzXSk7dmFyIGw9W10sYz1yLnJhbmtzO2ZvcihuPTA7bjxjLmxlbmd0aDsrK24pY1tuXT0tMTtmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgdT1yLmZpbmQodFtuXVswXSk7Y1t1XTwwPyhjW3VdPWwubGVuZ3RoLGwucHVzaChbdFtuXS5zbGljZSgwKV0pKTpsW2NbdV1dLnB1c2godFtuXS5zbGljZSgwKSl9cmV0dXJuIGx9KHQsZSk6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWwocyhmKHQsMCkpKSxyPW5ldyBpKGUubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBhPXRbbl0sbz0wO288YS5sZW5ndGg7KytvKWZvcih2YXIgdT1jKGUsW2Fbb11dKSxoPW8rMTtoPGEubGVuZ3RoOysraClyLmxpbmsodSxjKGUsW2FbaF1dKSk7dmFyIHA9W10sZD1yLnJhbmtzO2ZvcihuPTA7bjxkLmxlbmd0aDsrK24pZFtuXT0tMTtmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgbT1yLmZpbmQoYyhlLFt0W25dWzBdXSkpO2RbbV08MD8oZFttXT1wLmxlbmd0aCxwLnB1c2goW3Rbbl0uc2xpY2UoMCldKSk6cFtkW21dXS5wdXNoKHRbbl0uc2xpY2UoMCkpfXJldHVybiBwfSh0KX19LHsiYml0LXR3aWRkbGUiOjEwMSwidW5pb24tZmluZCI6NTkxfV0sNTM1OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzEwMV1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjEwMX1dLDUzNjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs1MzRdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyJiaXQtdHdpZGRsZSI6NTM1LGR1cDo1MzQsInVuaW9uLWZpbmQiOjUzN31dLDUzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMucm9vdHM9bmV3IEFycmF5KHQpLHRoaXMucmFua3M9bmV3IEFycmF5KHQpO2Zvcih2YXIgZT0wO2U8dDsrK2UpdGhpcy5yb290c1tlXT1lLHRoaXMucmFua3NbZV09MH1lLmV4cG9ydHM9bixuLnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290cy5sZW5ndGh9LG4ucHJvdG90eXBlLm1ha2VTZXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJvb3RzLmxlbmd0aDtyZXR1cm4gdGhpcy5yb290cy5wdXNoKHQpLHRoaXMucmFua3MucHVzaCgwKSx0fSxuLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnJvb3RzO2VbdF0hPT10Oyl7dmFyIHI9ZVt0XTtlW3RdPWVbcl0sdD1yfXJldHVybiB0fSxuLnByb3RvdHlwZS5saW5rPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5maW5kKHQpLG49dGhpcy5maW5kKGUpO2lmKHIhPT1uKXt2YXIgaT10aGlzLnJhbmtzLGE9dGhpcy5yb290cyxvPWlbcl0scz1pW25dO288cz9hW3JdPW46czxvP2Fbbl09cjooYVtuXT1yLCsraVtyXSl9fX0se31dLDUzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYT1lLmxlbmd0aCxvPXQubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9bmV3IEFycmF5KGEpLGM9bmV3IEFycmF5KGEpLHU9bmV3IEFycmF5KGEpLGY9MDtmPGE7KytmKXNbZl09bFtmXT0tMSxjW2ZdPTEvMCx1W2ZdPSExO2ZvcihmPTA7ZjxvOysrZil7dmFyIGg9dFtmXTtpZigyIT09aC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJbnB1dCBtdXN0IGJlIGEgZ3JhcGgiKTt2YXIgcD1oWzFdLGQ9aFswXTstMSE9PWxbZF0/bFtkXT0tMjpsW2RdPXAsLTEhPT1zW3BdP3NbcF09LTI6c1twXT1kfWZ1bmN0aW9uIG0odCl7aWYodVt0XSlyZXR1cm4gMS8wO3ZhciByLGksYSxvLGMsZj1zW3RdLGg9bFt0XTtyZXR1cm4gZjwwfHxoPDA/MS8wOihyPWVbdF0saT1lW2ZdLGE9ZVtoXSxvPU1hdGguYWJzKG4ocixpLGEpKSxjPU1hdGguc3FydChNYXRoLnBvdyhpWzBdLWFbMF0sMikrTWF0aC5wb3coaVsxXS1hWzFdLDIpKSxvL2MpfWZ1bmN0aW9uIGcodCxlKXt2YXIgcj1rW3RdLG49a1tlXTtrW3RdPW4sa1tlXT1yLEFbcl09ZSxBW25dPXR9ZnVuY3Rpb24gdih0KXtyZXR1cm4gY1trW3RdXX1mdW5jdGlvbiB5KHQpe3JldHVybiAxJnQ/dC0xPj4xOih0Pj4xKS0xfWZ1bmN0aW9uIHgodCl7Zm9yKHZhciBlPXYodCk7Oyl7dmFyIHI9ZSxuPTIqdCsxLGk9MioodCsxKSxhPXQ7aWYobjxNKXt2YXIgbz12KG4pO288ciYmKGE9bixyPW8pfWlmKGk8TSl2KGkpPHImJihhPWkpO2lmKGE9PT10KXJldHVybiB0O2codCxhKSx0PWF9fWZ1bmN0aW9uIGIodCl7Zm9yKHZhciBlPXYodCk7dD4wOyl7dmFyIHI9eSh0KTtpZihyPj0wKWlmKGU8dihyKSl7Zyh0LHIpLHQ9cjtjb250aW51ZX1yZXR1cm4gdH19ZnVuY3Rpb24gXygpe2lmKE0+MCl7dmFyIHQ9a1swXTtyZXR1cm4gZygwLE0tMSksTS09MSx4KDApLHR9cmV0dXJuLTF9ZnVuY3Rpb24gdyh0LGUpe3ZhciByPWtbdF07cmV0dXJuIGNbcl09PT1lP3Q6KGNbcl09LTEvMCxiKHQpLF8oKSxjW3JdPWUsYigoTSs9MSktMSkpfWZ1bmN0aW9uIFQodCl7aWYoIXVbdF0pe3VbdF09ITA7dmFyIGU9c1t0XSxyPWxbdF07c1tyXT49MCYmKHNbcl09ZSksbFtlXT49MCYmKGxbZV09ciksQVtlXT49MCYmdyhBW2VdLG0oZSkpLEFbcl0+PTAmJncoQVtyXSxtKHIpKX19dmFyIGs9W10sQT1uZXcgQXJyYXkoYSk7Zm9yKGY9MDtmPGE7KytmKXsoY1tmXT1tKGYpKTwxLzA/KEFbZl09ay5sZW5ndGgsay5wdXNoKGYpKTpBW2ZdPS0xfXZhciBNPWsubGVuZ3RoO2ZvcihmPU0+PjE7Zj49MDstLWYpeChmKTtmb3IoOzspe3ZhciBTPV8oKTtpZihTPDB8fGNbU10+cilicmVhaztUKFMpfXZhciBFPVtdO2ZvcihmPTA7ZjxhOysrZil1W2ZdfHwoQVtmXT1FLmxlbmd0aCxFLnB1c2goZVtmXS5zbGljZSgpKSk7RS5sZW5ndGg7ZnVuY3Rpb24gTCh0LGUpe2lmKHRbZV08MClyZXR1cm4gZTt2YXIgcj1lLG49ZTtkb3t2YXIgaT10W25dO2lmKCF1W25dfHxpPDB8fGk9PT1uKWJyZWFrO2lmKGk9dFtuPWldLCF1W25dfHxpPDB8fGk9PT1uKWJyZWFrO249aSxyPXRbcl19d2hpbGUociE9PW4pO2Zvcih2YXIgYT1lO2EhPT1uO2E9dFthXSl0W2FdPW47cmV0dXJuIG59dmFyIEM9W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9TChzLHRbMF0pLHI9TChsLHRbMV0pO2lmKGU+PTAmJnI+PTAmJmUhPT1yKXt2YXIgbj1BW2VdLGk9QVtyXTtuIT09aSYmQy5wdXNoKFtuLGldKX19KSksaS51bmlxdWUoaS5ub3JtYWxpemUoQykpLHtwb3NpdGlvbnM6RSxlZGdlczpDfX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIiksaT10KCJzaW1wbGljaWFsLWNvbXBsZXgiKX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjUyNCwic2ltcGxpY2lhbC1jb21wbGV4Ijo1MzZ9XSw1Mzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM7aWYoZVswXVswXTxlWzFdWzBdKXI9ZVswXSxhPWVbMV07ZWxzZXtpZighKGVbMF1bMF0+ZVsxXVswXSkpcmV0dXJuIGkoZSx0KTtyPWVbMV0sYT1lWzBdfWlmKHRbMF1bMF08dFsxXVswXSlvPXRbMF0scz10WzFdO2Vsc2V7aWYoISh0WzBdWzBdPnRbMV1bMF0pKXJldHVybi1pKHQsZSk7bz10WzFdLHM9dFswXX12YXIgbD1uKHIsYSxzKSxjPW4ocixhLG8pO2lmKGw8MCl7aWYoYzw9MClyZXR1cm4gbH1lbHNlIGlmKGw+MCl7aWYoYz49MClyZXR1cm4gbH1lbHNlIGlmKGMpcmV0dXJuIGM7aWYobD1uKHMsbyxhKSxjPW4ocyxvLHIpLGw8MCl7aWYoYzw9MClyZXR1cm4gbH1lbHNlIGlmKGw+MCl7aWYoYz49MClyZXR1cm4gbH1lbHNlIGlmKGMpcmV0dXJuIGM7cmV0dXJuIGFbMF0tc1swXX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIik7ZnVuY3Rpb24gaSh0LGUpe3ZhciByLGksYSxvO2lmKGVbMF1bMF08ZVsxXVswXSlyPWVbMF0saT1lWzFdO2Vsc2V7aWYoIShlWzBdWzBdPmVbMV1bMF0pKXt2YXIgcz1NYXRoLm1pbih0WzBdWzFdLHRbMV1bMV0pLGw9TWF0aC5tYXgodFswXVsxXSx0WzFdWzFdKSxjPU1hdGgubWluKGVbMF1bMV0sZVsxXVsxXSksdT1NYXRoLm1heChlWzBdWzFdLGVbMV1bMV0pO3JldHVybiBsPGM/bC1jOnM+dT9zLXU6bC11fXI9ZVsxXSxpPWVbMF19dFswXVsxXTx0WzFdWzFdPyhhPXRbMF0sbz10WzFdKTooYT10WzFdLG89dFswXSk7dmFyIGY9bihpLHIsYSk7cmV0dXJuIGZ8fCgoZj1uKGkscixvKSl8fG8taSl9fSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NTI0fV0sNTQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0yKmUsbj1uZXcgQXJyYXkociksYT0wO2E8ZTsrK2Epe3ZhciBsPXRbYV0sYz1sWzBdWzBdPGxbMV1bMF07blsyKmFdPW5ldyBmKGxbMF1bMF0sbCxjLGEpLG5bMiphKzFdPW5ldyBmKGxbMV1bMF0sbCwhYyxhKX1uLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54LWUueDtyZXR1cm4gcnx8KChyPXQuY3JlYXRlLWUuY3JlYXRlKXx8TWF0aC5taW4odC5zZWdtZW50WzBdWzFdLHQuc2VnbWVudFsxXVsxXSktTWF0aC5taW4oZS5zZWdtZW50WzBdWzFdLGUuc2VnbWVudFsxXVsxXSkpfSkpO3ZhciBoPWkobykscD1bXSxkPVtdLG09W107Zm9yKGE9MDthPHI7KXtmb3IodmFyIGc9blthXS54LHY9W107YTxyOyl7dmFyIHk9blthXTtpZih5LnghPT1nKWJyZWFrO2ErPTEseS5zZWdtZW50WzBdWzBdPT09eS54JiZ5LnNlZ21lbnRbMV1bMF09PT15Lng/eS5jcmVhdGUmJih5LnNlZ21lbnRbMF1bMV08eS5zZWdtZW50WzFdWzFdPyh2LnB1c2gobmV3IHUoeS5zZWdtZW50WzBdWzFdLHkuaW5kZXgsITAsITApKSx2LnB1c2gobmV3IHUoeS5zZWdtZW50WzFdWzFdLHkuaW5kZXgsITEsITEpKSk6KHYucHVzaChuZXcgdSh5LnNlZ21lbnRbMV1bMV0seS5pbmRleCwhMCwhMSkpLHYucHVzaChuZXcgdSh5LnNlZ21lbnRbMF1bMV0seS5pbmRleCwhMSwhMCkpKSk6aD15LmNyZWF0ZT9oLmluc2VydCh5LnNlZ21lbnQseS5pbmRleCk6aC5yZW1vdmUoeS5zZWdtZW50KX1wLnB1c2goaC5yb290KSxkLnB1c2goZyksbS5wdXNoKHYpfXJldHVybiBuZXcgcyhwLGQsbSl9O3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksaT10KCJmdW5jdGlvbmFsLXJlZC1ibGFjay10cmVlIiksYT10KCJyb2J1c3Qtb3JpZW50YXRpb24iKSxvPXQoIi4vbGliL29yZGVyLXNlZ21lbnRzIik7ZnVuY3Rpb24gcyh0LGUscil7dGhpcy5zbGFicz10LHRoaXMuY29vcmRpbmF0ZXM9ZSx0aGlzLmhvcml6b250YWw9cn1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQueS1lfWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9bnVsbDt0Oyl7dmFyIG4saSxvPXQua2V5O29bMF1bMF08b1sxXVswXT8obj1vWzBdLGk9b1sxXSk6KG49b1sxXSxpPW9bMF0pO3ZhciBzPWEobixpLGUpO2lmKHM8MCl0PXQubGVmdDtlbHNlIGlmKHM+MClpZihlWzBdIT09b1sxXVswXSlyPXQsdD10LnJpZ2h0O2Vsc2V7aWYobD1jKHQucmlnaHQsZSkpcmV0dXJuIGw7dD10LmxlZnR9ZWxzZXtpZihlWzBdIT09b1sxXVswXSlyZXR1cm4gdDt2YXIgbDtpZihsPWModC5yaWdodCxlKSlyZXR1cm4gbDt0PXQubGVmdH19cmV0dXJuIHJ9ZnVuY3Rpb24gdSh0LGUscixuKXt0aGlzLnk9dCx0aGlzLmluZGV4PWUsdGhpcy5zdGFydD1yLHRoaXMuY2xvc2VkPW59ZnVuY3Rpb24gZih0LGUscixuKXt0aGlzLng9dCx0aGlzLnNlZ21lbnQ9ZSx0aGlzLmNyZWF0ZT1yLHRoaXMuaW5kZXg9bn1zLnByb3RvdHlwZS5jYXN0VXA9ZnVuY3Rpb24odCl7dmFyIGU9bi5sZSh0aGlzLmNvb3JkaW5hdGVzLHRbMF0pO2lmKGU8MClyZXR1cm4tMTt0aGlzLnNsYWJzW2VdO3ZhciByPWModGhpcy5zbGFic1tlXSx0KSxpPS0xO2lmKHImJihpPXIudmFsdWUpLHRoaXMuY29vcmRpbmF0ZXNbZV09PT10WzBdKXt2YXIgcz1udWxsO2lmKHImJihzPXIua2V5KSxlPjApe3ZhciB1PWModGhpcy5zbGFic1tlLTFdLHQpO3UmJihzP28odS5rZXkscyk+MCYmKHM9dS5rZXksaT11LnZhbHVlKTooaT11LnZhbHVlLHM9dS5rZXkpKX12YXIgZj10aGlzLmhvcml6b250YWxbZV07aWYoZi5sZW5ndGg+MCl7dmFyIGg9bi5nZShmLHRbMV0sbCk7aWYoaDxmLmxlbmd0aCl7dmFyIHA9ZltoXTtpZih0WzFdPT09cC55KXtpZihwLmNsb3NlZClyZXR1cm4gcC5pbmRleDtmb3IoO2g8Zi5sZW5ndGgtMSYmZltoKzFdLnk9PT10WzFdOylpZigocD1mW2grPTFdKS5jbG9zZWQpcmV0dXJuIHAuaW5kZXg7aWYocC55PT09dFsxXSYmIXAuc3RhcnQpe2lmKChoKz0xKT49Zi5sZW5ndGgpcmV0dXJuIGk7cD1mW2hdfX1pZihwLnN0YXJ0KWlmKHMpe3ZhciBkPWEoc1swXSxzWzFdLFt0WzBdLHAueV0pO3NbMF1bMF0+c1sxXVswXSYmKGQ9LWQpLGQ+MCYmKGk9cC5pbmRleCl9ZWxzZSBpPXAuaW5kZXg7ZWxzZSBwLnkhPT10WzFdJiYoaT1wLmluZGV4KX19fXJldHVybiBpfX0seyIuL2xpYi9vcmRlci1zZWdtZW50cyI6NTM5LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTAwLCJmdW5jdGlvbmFsLXJlZC1ibGFjay10cmVlIjoyNDcsInJvYnVzdC1vcmllbnRhdGlvbiI6NTI0fV0sNTQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJvYnVzdC1kb3QtcHJvZHVjdCIpLGk9dCgicm9idXN0LXN1bSIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1pKG4odCxlKSxbZVtlLmxlbmd0aC0xXV0pO3JldHVybiByW3IubGVuZ3RoLTFdfWZ1bmN0aW9uIG8odCxlLHIsbil7dmFyIGk9LWUvKG4tZSk7aTwwP2k9MDppPjEmJihpPTEpO2Zvcih2YXIgYT0xLWksbz10Lmxlbmd0aCxzPW5ldyBBcnJheShvKSxsPTA7bDxvOysrbClzW2xdPWkqdFtsXSthKnJbbF07cmV0dXJuIHN9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49W10saT1hKHRbdC5sZW5ndGgtMV0sZSkscz10W3QubGVuZ3RoLTFdLGw9dFswXSxjPTA7Yzx0Lmxlbmd0aDsrK2Mscz1sKXt2YXIgdT1hKGw9dFtjXSxlKTtpZihpPDAmJnU+MHx8aT4wJiZ1PDApe3ZhciBmPW8ocyx1LGwsaSk7ci5wdXNoKGYpLG4ucHVzaChmLnNsaWNlKCkpfXU8MD9uLnB1c2gobC5zbGljZSgpKTp1PjA/ci5wdXNoKGwuc2xpY2UoKSk6KHIucHVzaChsLnNsaWNlKCkpLG4ucHVzaChsLnNsaWNlKCkpKSxpPXV9cmV0dXJue3Bvc2l0aXZlOnIsbmVnYXRpdmU6bn19LGUuZXhwb3J0cy5wb3NpdGl2ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPWEodFt0Lmxlbmd0aC0xXSxlKSxpPXRbdC5sZW5ndGgtMV0scz10WzBdLGw9MDtsPHQubGVuZ3RoOysrbCxpPXMpe3ZhciBjPWEocz10W2xdLGUpOyhuPDAmJmM+MHx8bj4wJiZjPDApJiZyLnB1c2gobyhpLGMscyxuKSksYz49MCYmci5wdXNoKHMuc2xpY2UoKSksbj1jfXJldHVybiByfSxlLmV4cG9ydHMubmVnYXRpdmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj1hKHRbdC5sZW5ndGgtMV0sZSksaT10W3QubGVuZ3RoLTFdLHM9dFswXSxsPTA7bDx0Lmxlbmd0aDsrK2wsaT1zKXt2YXIgYz1hKHM9dFtsXSxlKTsobjwwJiZjPjB8fG4+MCYmYzwwKSYmci5wdXNoKG8oaSxjLHMsbikpLGM8PTAmJnIucHVzaChzLnNsaWNlKCkpLG49Y31yZXR1cm4gcn19LHsicm9idXN0LWRvdC1wcm9kdWN0Ijo1MjEsInJvYnVzdC1zdW0iOjUyOX1dLDU0MjpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17bm90X3N0cmluZzovW15zXS8sbm90X2Jvb2w6L1tedF0vLG5vdF90eXBlOi9bXlRdLyxub3RfcHJpbWl0aXZlOi9bXnZdLyxudW1iZXI6L1tkaWVmZ10vLG51bWVyaWNfYXJnOi9bYmNkaWVmZ3V4WF0vLGpzb246L1tqXS8sbm90X2pzb246L1teal0vLHRleHQ6L15bXlx4MjVdKy8sbW9kdWxvOi9eXHgyNXsyfS8scGxhY2Vob2xkZXI6L15ceDI1KD86KFsxLTldXGQqKVwkfFwoKFteKV0rKVwpKT8oXCspPygwfCdbXiRdKT8oLSk/KFxkKyk/KD86XC4oXGQrKSk/KFtiLWdpam9zdFR1dnhYXSkvLGtleTovXihbYS16X11bYS16X1xkXSopL2ksa2V5X2FjY2VzczovXlwuKFthLXpfXVthLXpfXGRdKikvaSxpbmRleF9hY2Nlc3M6L15cWyhcZCspXF0vLHNpZ246L15bKy1dL307ZnVuY3Rpb24gZSh0KXtyZXR1cm4gaShvKHQpLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbih0LHIpe3JldHVybiBlLmFwcGx5KG51bGwsW3RdLmNvbmNhdChyfHxbXSkpfWZ1bmN0aW9uIGkocixuKXt2YXIgaSxhLG8scyxsLGMsdSxmLGgscD0xLGQ9ci5sZW5ndGgsbT0iIjtmb3IoYT0wO2E8ZDthKyspaWYoInN0cmluZyI9PXR5cGVvZiByW2FdKW0rPXJbYV07ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHJbYV0pe2lmKChzPXJbYV0pLmtleXMpZm9yKGk9bltwXSxvPTA7bzxzLmtleXMubGVuZ3RoO28rKyl7aWYobnVsbD09aSl0aHJvdyBuZXcgRXJyb3IoZSgnW3NwcmludGZdIENhbm5vdCBhY2Nlc3MgcHJvcGVydHkgIiVzIiBvZiB1bmRlZmluZWQgdmFsdWUgIiVzIicscy5rZXlzW29dLHMua2V5c1tvLTFdKSk7aT1pW3Mua2V5c1tvXV19ZWxzZSBpPXMucGFyYW1fbm8/bltzLnBhcmFtX25vXTpuW3ArK107aWYodC5ub3RfdHlwZS50ZXN0KHMudHlwZSkmJnQubm90X3ByaW1pdGl2ZS50ZXN0KHMudHlwZSkmJmkgaW5zdGFuY2VvZiBGdW5jdGlvbiYmKGk9aSgpKSx0Lm51bWVyaWNfYXJnLnRlc3Qocy50eXBlKSYmIm51bWJlciIhPXR5cGVvZiBpJiZpc05hTihpKSl0aHJvdyBuZXcgVHlwZUVycm9yKGUoIltzcHJpbnRmXSBleHBlY3RpbmcgbnVtYmVyIGJ1dCBmb3VuZCAlVCIsaSkpO3N3aXRjaCh0Lm51bWJlci50ZXN0KHMudHlwZSkmJihmPWk+PTApLHMudHlwZSl7Y2FzZSJiIjppPXBhcnNlSW50KGksMTApLnRvU3RyaW5nKDIpO2JyZWFrO2Nhc2UiYyI6aT1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGksMTApKTticmVhaztjYXNlImQiOmNhc2UiaSI6aT1wYXJzZUludChpLDEwKTticmVhaztjYXNlImoiOmk9SlNPTi5zdHJpbmdpZnkoaSxudWxsLHMud2lkdGg/cGFyc2VJbnQocy53aWR0aCk6MCk7YnJlYWs7Y2FzZSJlIjppPXMucHJlY2lzaW9uP3BhcnNlRmxvYXQoaSkudG9FeHBvbmVudGlhbChzLnByZWNpc2lvbik6cGFyc2VGbG9hdChpKS50b0V4cG9uZW50aWFsKCk7YnJlYWs7Y2FzZSJmIjppPXMucHJlY2lzaW9uP3BhcnNlRmxvYXQoaSkudG9GaXhlZChzLnByZWNpc2lvbik6cGFyc2VGbG9hdChpKTticmVhaztjYXNlImciOmk9cy5wcmVjaXNpb24/U3RyaW5nKE51bWJlcihpLnRvUHJlY2lzaW9uKHMucHJlY2lzaW9uKSkpOnBhcnNlRmxvYXQoaSk7YnJlYWs7Y2FzZSJvIjppPShwYXJzZUludChpLDEwKT4+PjApLnRvU3RyaW5nKDgpO2JyZWFrO2Nhc2UicyI6aT1TdHJpbmcoaSksaT1zLnByZWNpc2lvbj9pLnN1YnN0cmluZygwLHMucHJlY2lzaW9uKTppO2JyZWFrO2Nhc2UidCI6aT1TdHJpbmcoISFpKSxpPXMucHJlY2lzaW9uP2kuc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmk7YnJlYWs7Y2FzZSJUIjppPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpLGk9cy5wcmVjaXNpb24/aS5zdWJzdHJpbmcoMCxzLnByZWNpc2lvbik6aTticmVhaztjYXNlInUiOmk9cGFyc2VJbnQoaSwxMCk+Pj4wO2JyZWFrO2Nhc2UidiI6aT1pLnZhbHVlT2YoKSxpPXMucHJlY2lzaW9uP2kuc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmk7YnJlYWs7Y2FzZSJ4IjppPShwYXJzZUludChpLDEwKT4+PjApLnRvU3RyaW5nKDE2KTticmVhaztjYXNlIlgiOmk9KHBhcnNlSW50KGksMTApPj4+MCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9dC5qc29uLnRlc3Qocy50eXBlKT9tKz1pOighdC5udW1iZXIudGVzdChzLnR5cGUpfHxmJiYhcy5zaWduP2g9IiI6KGg9Zj8iKyI6Ii0iLGk9aS50b1N0cmluZygpLnJlcGxhY2UodC5zaWduLCIiKSksYz1zLnBhZF9jaGFyPyIwIj09PXMucGFkX2NoYXI/IjAiOnMucGFkX2NoYXIuY2hhckF0KDEpOiIgIix1PXMud2lkdGgtKGgraSkubGVuZ3RoLGw9cy53aWR0aCYmdT4wP2MucmVwZWF0KHUpOiIiLG0rPXMuYWxpZ24/aCtpK2w6IjAiPT09Yz9oK2wraTpsK2graSl9cmV0dXJuIG19dmFyIGE9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBvKGUpe2lmKGFbZV0pcmV0dXJuIGFbZV07Zm9yKHZhciByLG49ZSxpPVtdLG89MDtuOyl7aWYobnVsbCE9PShyPXQudGV4dC5leGVjKG4pKSlpLnB1c2goclswXSk7ZWxzZSBpZihudWxsIT09KHI9dC5tb2R1bG8uZXhlYyhuKSkpaS5wdXNoKCIlIik7ZWxzZXtpZihudWxsPT09KHI9dC5wbGFjZWhvbGRlci5leGVjKG4pKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIltzcHJpbnRmXSB1bmV4cGVjdGVkIHBsYWNlaG9sZGVyIik7aWYoclsyXSl7b3w9MTt2YXIgcz1bXSxsPXJbMl0sYz1bXTtpZihudWxsPT09KGM9dC5rZXkuZXhlYyhsKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleSIpO2ZvcihzLnB1c2goY1sxXSk7IiIhPT0obD1sLnN1YnN0cmluZyhjWzBdLmxlbmd0aCkpOylpZihudWxsIT09KGM9dC5rZXlfYWNjZXNzLmV4ZWMobCkpKXMucHVzaChjWzFdKTtlbHNle2lmKG51bGw9PT0oYz10LmluZGV4X2FjY2Vzcy5leGVjKGwpKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIltzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5Iik7cy5wdXNoKGNbMV0pfXJbMl09c31lbHNlIG98PTI7aWYoMz09PW8pdGhyb3cgbmV3IEVycm9yKCJbc3ByaW50Zl0gbWl4aW5nIHBvc2l0aW9uYWwgYW5kIG5hbWVkIHBsYWNlaG9sZGVycyBpcyBub3QgKHlldCkgc3VwcG9ydGVkIik7aS5wdXNoKHtwbGFjZWhvbGRlcjpyWzBdLHBhcmFtX25vOnJbMV0sa2V5czpyWzJdLHNpZ246clszXSxwYWRfY2hhcjpyWzRdLGFsaWduOnJbNV0sd2lkdGg6cls2XSxwcmVjaXNpb246cls3XSx0eXBlOnJbOF19KX1uPW4uc3Vic3RyaW5nKHJbMF0ubGVuZ3RoKX1yZXR1cm4gYVtlXT1pfXZvaWQgMCE9PXImJihyLnNwcmludGY9ZSxyLnZzcHJpbnRmPW4pLCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYod2luZG93LnNwcmludGY9ZSx3aW5kb3cudnNwcmludGY9bil9KCl9LHt9XSw1NDM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9aTt2YXIgbj10KCJldmVudHMiKS5FdmVudEVtaXR0ZXI7ZnVuY3Rpb24gaSgpe24uY2FsbCh0aGlzKX10KCJpbmhlcml0cyIpKGksbiksaS5SZWFkYWJsZT10KCJyZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcmVhZGFibGUuanMiKSxpLldyaXRhYmxlPXQoInJlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIpLGkuRHVwbGV4PXQoInJlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiKSxpLlRyYW5zZm9ybT10KCJyZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzIiksaS5QYXNzVGhyb3VnaD10KCJyZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMiKSxpLmZpbmlzaGVkPXQoInJlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtLmpzIiksaS5waXBlbGluZT10KCJyZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvcGlwZWxpbmUuanMiKSxpLlN0cmVhbT1pLGkucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO2Z1bmN0aW9uIGkoZSl7dC53cml0YWJsZSYmITE9PT10LndyaXRlKGUpJiZyLnBhdXNlJiZyLnBhdXNlKCl9ZnVuY3Rpb24gYSgpe3IucmVhZGFibGUmJnIucmVzdW1lJiZyLnJlc3VtZSgpfXIub24oImRhdGEiLGkpLHQub24oImRyYWluIixhKSx0Ll9pc1N0ZGlvfHxlJiYhMT09PWUuZW5kfHwoci5vbigiZW5kIixzKSxyLm9uKCJjbG9zZSIsbCkpO3ZhciBvPSExO2Z1bmN0aW9uIHMoKXtvfHwobz0hMCx0LmVuZCgpKX1mdW5jdGlvbiBsKCl7b3x8KG89ITAsImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVzdHJveSYmdC5kZXN0cm95KCkpfWZ1bmN0aW9uIGModCl7aWYodSgpLDA9PT1uLmxpc3RlbmVyQ291bnQodGhpcywiZXJyb3IiKSl0aHJvdyB0fWZ1bmN0aW9uIHUoKXtyLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixpKSx0LnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsYSksci5yZW1vdmVMaXN0ZW5lcigiZW5kIixzKSxyLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsbCksci5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLGMpLHQucmVtb3ZlTGlzdGVuZXIoImVycm9yIixjKSxyLnJlbW92ZUxpc3RlbmVyKCJlbmQiLHUpLHIucmVtb3ZlTGlzdGVuZXIoImNsb3NlIix1KSx0LnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsdSl9cmV0dXJuIHIub24oImVycm9yIixjKSx0Lm9uKCJlcnJvciIsYyksci5vbigiZW5kIix1KSxyLm9uKCJjbG9zZSIsdSksdC5vbigiY2xvc2UiLHUpLHQuZW1pdCgicGlwZSIsciksdH19LHtldmVudHM6MjM3LGluaGVyaXRzOjQyOSwicmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyI6NTQ1LCJyZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMiOjU0NiwicmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIjo1NDcsInJlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiOjU0OCwicmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIjo1NDksInJlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtLmpzIjo1NTMsInJlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZS5qcyI6NTU1fV0sNTQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O2Z1bmN0aW9uIGkodCxlLHIpe3J8fChyPUVycm9yKTt2YXIgaT1mdW5jdGlvbih0KXt2YXIgcixuO2Z1bmN0aW9uIGkocixuLGkpe3JldHVybiB0LmNhbGwodGhpcyxmdW5jdGlvbih0LHIsbil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP2U6ZSh0LHIsbil9KHIsbixpKSl8fHRoaXN9cmV0dXJuIG49dCwocj1pKS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLl9fcHJvdG9fXz1uLGl9KHIpO2kucHJvdG90eXBlLm5hbWU9ci5uYW1lLGkucHJvdG90eXBlLmNvZGU9dCxuW3RdPWl9ZnVuY3Rpb24gYSh0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciByPXQubGVuZ3RoO3JldHVybiB0PXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHQpfSkpLHI+Mj8ib25lIG9mICIuY29uY2F0KGUsIiAiKS5jb25jYXQodC5zbGljZSgwLHItMSkuam9pbigiLCAiKSwiLCBvciAiKSt0W3ItMV06Mj09PXI/Im9uZSBvZiAiLmNvbmNhdChlLCIgIikuY29uY2F0KHRbMF0sIiBvciAiKS5jb25jYXQodFsxXSk6Im9mICIuY29uY2F0KGUsIiAiKS5jb25jYXQodFswXSl9cmV0dXJuIm9mICIuY29uY2F0KGUsIiAiKS5jb25jYXQoU3RyaW5nKHQpKX1pKCJFUlJfSU5WQUxJRF9PUFRfVkFMVUUiLChmdW5jdGlvbih0LGUpe3JldHVybidUaGUgdmFsdWUgIicrZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gIicrdCsnIid9KSxUeXBlRXJyb3IpLGkoIkVSUl9JTlZBTElEX0FSR19UWVBFIiwoZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbyxzO2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGk9Im5vdCAiLGUuc3Vic3RyKCFvfHxvPDA/MDorbyxpLmxlbmd0aCk9PT1pKT8obj0ibXVzdCBub3QgYmUiLGU9ZS5yZXBsYWNlKC9ebm90IC8sIiIpKTpuPSJtdXN0IGJlIixmdW5jdGlvbih0LGUscil7cmV0dXJuKHZvaWQgMD09PXJ8fHI+dC5sZW5ndGgpJiYocj10Lmxlbmd0aCksdC5zdWJzdHJpbmcoci1lLmxlbmd0aCxyKT09PWV9KHQsIiBhcmd1bWVudCIpKXM9IlRoZSAiLmNvbmNhdCh0LCIgIikuY29uY2F0KG4sIiAiKS5jb25jYXQoYShlLCJ0eXBlIikpO2Vsc2V7dmFyIGw9ZnVuY3Rpb24odCxlLHIpe3JldHVybiJudW1iZXIiIT10eXBlb2YgciYmKHI9MCksIShyK2UubGVuZ3RoPnQubGVuZ3RoKSYmLTEhPT10LmluZGV4T2YoZSxyKX0odCwiLiIpPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtzPSdUaGUgIicuY29uY2F0KHQsJyIgJykuY29uY2F0KGwsIiAiKS5jb25jYXQobiwiICIpLmNvbmNhdChhKGUsInR5cGUiKSl9cmV0dXJuIHMrPSIuIFJlY2VpdmVkIHR5cGUgIi5jb25jYXQodHlwZW9mIHIpfSksVHlwZUVycm9yKSxpKCJFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GIiwic3RyZWFtLnB1c2goKSBhZnRlciBFT0YiKSxpKCJFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCIsKGZ1bmN0aW9uKHQpe3JldHVybiJUaGUgIit0KyIgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCJ9KSksaSgiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiLCJQcmVtYXR1cmUgY2xvc2UiKSxpKCJFUlJfU1RSRUFNX0RFU1RST1lFRCIsKGZ1bmN0aW9uKHQpe3JldHVybiJDYW5ub3QgY2FsbCAiK3QrIiBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkIn0pKSxpKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSxpKCJFUlJfU1RSRUFNX0NBTk5PVF9QSVBFIiwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpLGkoIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EIiwid3JpdGUgYWZ0ZXIgZW5kIiksaSgiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyIsIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIixUeXBlRXJyb3IpLGkoIkVSUl9VTktOT1dOX0VOQ09ESU5HIiwoZnVuY3Rpb24odCl7cmV0dXJuIlVua25vd24gZW5jb2Rpbmc6ICIrdH0pLFR5cGVFcnJvciksaSgiRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCIsInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IiksZS5leHBvcnRzLmNvZGVzPW59LHt9XSw1NDU6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2gocik7cmV0dXJuIGV9O2UuZXhwb3J0cz1jO3ZhciBpPXQoIi4vX3N0cmVhbV9yZWFkYWJsZSIpLGE9dCgiLi9fc3RyZWFtX3dyaXRhYmxlIik7dCgiaW5oZXJpdHMiKShjLGkpO2Zvcih2YXIgbz1uKGEucHJvdG90eXBlKSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107Yy5wcm90b3R5cGVbbF18fChjLnByb3RvdHlwZVtsXT1hLnByb3RvdHlwZVtsXSl9ZnVuY3Rpb24gYyh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBjKSlyZXR1cm4gbmV3IGModCk7aS5jYWxsKHRoaXMsdCksYS5jYWxsKHRoaXMsdCksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLHQmJighMT09PXQucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSwhMT09PXQud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSwhMT09PXQuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSx0aGlzLm9uY2UoImVuZCIsdSkpKX1mdW5jdGlvbiB1KCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8ci5uZXh0VGljayhmLHRoaXMpfWZ1bmN0aW9uIGYodCl7dC5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYy5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGMucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkKX0sc2V0OmZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD10LHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPXQpfX0pfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpKX0seyIuL19zdHJlYW1fcmVhZGFibGUiOjU0NywiLi9fc3RyZWFtX3dyaXRhYmxlIjo1NDksX3Byb2Nlc3M6NTA0LGluaGVyaXRzOjQyOX1dLDU0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9aTt2YXIgbj10KCIuL19zdHJlYW1fdHJhbnNmb3JtIik7ZnVuY3Rpb24gaSh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBpKSlyZXR1cm4gbmV3IGkodCk7bi5jYWxsKHRoaXMsdCl9dCgiaW5oZXJpdHMiKShpLG4pLGkucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3IobnVsbCx0KX19LHsiLi9fc3RyZWFtX3RyYW5zZm9ybSI6NTQ4LGluaGVyaXRzOjQyOX1dLDU0NzpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyLG4peyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgaTtlLmV4cG9ydHM9QSxBLlJlYWRhYmxlU3RhdGU9azt0KCJldmVudHMiKS5FdmVudEVtaXR0ZXI7dmFyIGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5saXN0ZW5lcnMoZSkubGVuZ3RofSxvPXQoIi4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0iKSxzPXQoImJ1ZmZlciIpLkJ1ZmZlcixsPW4uVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9O3ZhciBjLHU9dCgidXRpbCIpO2M9dSYmdS5kZWJ1Z2xvZz91LmRlYnVnbG9nKCJzdHJlYW0iKTpmdW5jdGlvbigpe307dmFyIGYsaCxwLGQ9dCgiLi9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0IiksbT10KCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSIpLGc9dCgiLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlIikuZ2V0SGlnaFdhdGVyTWFyayx2PXQoIi4uL2Vycm9ycyIpLmNvZGVzLHk9di5FUlJfSU5WQUxJRF9BUkdfVFlQRSx4PXYuRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixiPXYuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsXz12LkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ7dCgiaW5oZXJpdHMiKShBLG8pO3ZhciB3PW0uZXJyb3JPckRlc3Ryb3ksVD1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiBrKGUscixuKXtpPWl8fHQoIi4vX3N0cmVhbV9kdXBsZXgiKSxlPWV8fHt9LCJib29sZWFuIiE9dHlwZW9mIG4mJihuPXIgaW5zdGFuY2VvZiBpKSx0aGlzLm9iamVjdE1vZGU9ISFlLm9iamVjdE1vZGUsbiYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhZS5yZWFkYWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1nKHRoaXMsZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIixuKSx0aGlzLmJ1ZmZlcj1uZXcgZCx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0Q2xvc2U9ITEhPT1lLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhZS5hdXRvRGVzdHJveSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz1lLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLGUuZW5jb2RpbmcmJihmfHwoZj10KCJzdHJpbmdfZGVjb2Rlci8iKS5TdHJpbmdEZWNvZGVyKSx0aGlzLmRlY29kZXI9bmV3IGYoZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1lLmVuY29kaW5nKX1mdW5jdGlvbiBBKGUpe2lmKGk9aXx8dCgiLi9fc3RyZWFtX2R1cGxleCIpLCEodGhpcyBpbnN0YW5jZW9mIEEpKXJldHVybiBuZXcgQShlKTt2YXIgcj10aGlzIGluc3RhbmNlb2YgaTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBrKGUsdGhpcyxyKSx0aGlzLnJlYWRhYmxlPSEwLGUmJigiZnVuY3Rpb24iPT10eXBlb2YgZS5yZWFkJiYodGhpcy5fcmVhZD1lLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PWUuZGVzdHJveSkpLG8uY2FsbCh0aGlzKX1mdW5jdGlvbiBNKHQsZSxyLG4saSl7YygicmVhZGFibGVBZGRDaHVuayIsZSk7dmFyIGEsbz10Ll9yZWFkYWJsZVN0YXRlO2lmKG51bGw9PT1lKW8ucmVhZGluZz0hMSxmdW5jdGlvbih0LGUpe2lmKGMoIm9uRW9mQ2h1bmsiKSxlLmVuZGVkKXJldHVybjtpZihlLmRlY29kZXIpe3ZhciByPWUuZGVjb2Rlci5lbmQoKTtyJiZyLmxlbmd0aCYmKGUuYnVmZmVyLnB1c2gociksZS5sZW5ndGgrPWUub2JqZWN0TW9kZT8xOnIubGVuZ3RoKX1lLmVuZGVkPSEwLGUuc3luYz9MKHQpOihlLm5lZWRSZWFkYWJsZT0hMSxlLmVtaXR0ZWRSZWFkYWJsZXx8KGUuZW1pdHRlZFJlYWRhYmxlPSEwLEModCkpKX0odCxvKTtlbHNlIGlmKGl8fChhPWZ1bmN0aW9uKHQsZSl7dmFyIHI7bj1lLHMuaXNCdWZmZXIobil8fG4gaW5zdGFuY2VvZiBsfHwic3RyaW5nIj09dHlwZW9mIGV8fHZvaWQgMD09PWV8fHQub2JqZWN0TW9kZXx8KHI9bmV3IHkoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciIsIlVpbnQ4QXJyYXkiXSxlKSk7dmFyIG47cmV0dXJuIHJ9KG8sZSkpLGEpdyh0LGEpO2Vsc2UgaWYoby5vYmplY3RNb2RlfHxlJiZlLmxlbmd0aD4wKWlmKCJzdHJpbmciPT10eXBlb2YgZXx8by5vYmplY3RNb2RlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1zLnByb3RvdHlwZXx8KGU9ZnVuY3Rpb24odCl7cmV0dXJuIHMuZnJvbSh0KX0oZSkpLG4pby5lbmRFbWl0dGVkP3codCxuZXcgXyk6Uyh0LG8sZSwhMCk7ZWxzZSBpZihvLmVuZGVkKXcodCxuZXcgeCk7ZWxzZXtpZihvLmRlc3Ryb3llZClyZXR1cm4hMTtvLnJlYWRpbmc9ITEsby5kZWNvZGVyJiYhcj8oZT1vLmRlY29kZXIud3JpdGUoZSksby5vYmplY3RNb2RlfHwwIT09ZS5sZW5ndGg/Uyh0LG8sZSwhMSk6UCh0LG8pKTpTKHQsbyxlLCExKX1lbHNlIG58fChvLnJlYWRpbmc9ITEsUCh0LG8pKTtyZXR1cm4hby5lbmRlZCYmKG8ubGVuZ3RoPG8uaGlnaFdhdGVyTWFya3x8MD09PW8ubGVuZ3RoKX1mdW5jdGlvbiBTKHQsZSxyLG4pe2UuZmxvd2luZyYmMD09PWUubGVuZ3RoJiYhZS5zeW5jPyhlLmF3YWl0RHJhaW49MCx0LmVtaXQoImRhdGEiLHIpKTooZS5sZW5ndGgrPWUub2JqZWN0TW9kZT8xOnIubGVuZ3RoLG4/ZS5idWZmZXIudW5zaGlmdChyKTplLmJ1ZmZlci5wdXNoKHIpLGUubmVlZFJlYWRhYmxlJiZMKHQpKSxQKHQsZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD10KX19KSxBLnByb3RvdHlwZS5kZXN0cm95PW0uZGVzdHJveSxBLnByb3RvdHlwZS5fdW5kZXN0cm95PW0udW5kZXN0cm95LEEucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKHQsZSl7ZSh0KX0sQS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gbi5vYmplY3RNb2RlP3I9ITA6InN0cmluZyI9PXR5cGVvZiB0JiYoKGU9ZXx8bi5kZWZhdWx0RW5jb2RpbmcpIT09bi5lbmNvZGluZyYmKHQ9cy5mcm9tKHQsZSksZT0iIikscj0hMCksTSh0aGlzLHQsZSwhMSxyKX0sQS5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbih0KXtyZXR1cm4gTSh0aGlzLHQsbnVsbCwhMCwhMSl9LEEucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LEEucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKGUpe2Z8fChmPXQoInN0cmluZ19kZWNvZGVyLyIpLlN0cmluZ0RlY29kZXIpO3ZhciByPW5ldyBmKGUpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1yLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2Zvcih2YXIgbj10aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5oZWFkLGk9IiI7bnVsbCE9PW47KWkrPXIud3JpdGUobi5kYXRhKSxuPW4ubmV4dDtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKSwiIiE9PWkmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goaSksdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg9aS5sZW5ndGgsdGhpc307ZnVuY3Rpb24gRSh0LGUpe3JldHVybiB0PD0wfHwwPT09ZS5sZW5ndGgmJmUuZW5kZWQ/MDplLm9iamVjdE1vZGU/MTp0IT10P2UuZmxvd2luZyYmZS5sZW5ndGg/ZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDplLmxlbmd0aDoodD5lLmhpZ2hXYXRlck1hcmsmJihlLmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEwNzM3NDE4MjQ/dD0xMDczNzQxODI0Oih0LS0sdHw9dD4+PjEsdHw9dD4+PjIsdHw9dD4+PjQsdHw9dD4+PjgsdHw9dD4+PjE2LHQrKyksdH0odCkpLHQ8PWUubGVuZ3RoP3Q6ZS5lbmRlZD9lLmxlbmd0aDooZS5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIEwodCl7dmFyIGU9dC5fcmVhZGFibGVTdGF0ZTtjKCJlbWl0UmVhZGFibGUiLGUubmVlZFJlYWRhYmxlLGUuZW1pdHRlZFJlYWRhYmxlKSxlLm5lZWRSZWFkYWJsZT0hMSxlLmVtaXR0ZWRSZWFkYWJsZXx8KGMoImVtaXRSZWFkYWJsZSIsZS5mbG93aW5nKSxlLmVtaXR0ZWRSZWFkYWJsZT0hMCxyLm5leHRUaWNrKEMsdCkpfWZ1bmN0aW9uIEModCl7dmFyIGU9dC5fcmVhZGFibGVTdGF0ZTtjKCJlbWl0UmVhZGFibGVfIixlLmRlc3Ryb3llZCxlLmxlbmd0aCxlLmVuZGVkKSxlLmRlc3Ryb3llZHx8IWUubGVuZ3RoJiYhZS5lbmRlZHx8KHQuZW1pdCgicmVhZGFibGUiKSxlLmVtaXR0ZWRSZWFkYWJsZT0hMSksZS5uZWVkUmVhZGFibGU9IWUuZmxvd2luZyYmIWUuZW5kZWQmJmUubGVuZ3RoPD1lLmhpZ2hXYXRlck1hcmssUih0KX1mdW5jdGlvbiBQKHQsZSl7ZS5yZWFkaW5nTW9yZXx8KGUucmVhZGluZ01vcmU9ITAsci5uZXh0VGljayhJLHQsZSkpfWZ1bmN0aW9uIEkodCxlKXtmb3IoOyFlLnJlYWRpbmcmJiFlLmVuZGVkJiYoZS5sZW5ndGg8ZS5oaWdoV2F0ZXJNYXJrfHxlLmZsb3dpbmcmJjA9PT1lLmxlbmd0aCk7KXt2YXIgcj1lLmxlbmd0aDtpZihjKCJtYXliZVJlYWRNb3JlIHJlYWQgMCIpLHQucmVhZCgwKSxyPT09ZS5sZW5ndGgpYnJlYWt9ZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiBPKHQpe3ZhciBlPXQuX3JlYWRhYmxlU3RhdGU7ZS5yZWFkYWJsZUxpc3RlbmluZz10Lmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCxlLnJlc3VtZVNjaGVkdWxlZCYmIWUucGF1c2VkP2UuZmxvd2luZz0hMDp0Lmxpc3RlbmVyQ291bnQoImRhdGEiKT4wJiZ0LnJlc3VtZSgpfWZ1bmN0aW9uIHoodCl7YygicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksdC5yZWFkKDApfWZ1bmN0aW9uIEQodCxlKXtjKCJyZXN1bWUiLGUucmVhZGluZyksZS5yZWFkaW5nfHx0LnJlYWQoMCksZS5yZXN1bWVTY2hlZHVsZWQ9ITEsdC5lbWl0KCJyZXN1bWUiKSxSKHQpLGUuZmxvd2luZyYmIWUucmVhZGluZyYmdC5yZWFkKDApfWZ1bmN0aW9uIFIodCl7dmFyIGU9dC5fcmVhZGFibGVTdGF0ZTtmb3IoYygiZmxvdyIsZS5mbG93aW5nKTtlLmZsb3dpbmcmJm51bGwhPT10LnJlYWQoKTspO31mdW5jdGlvbiBGKHQsZSl7cmV0dXJuIDA9PT1lLmxlbmd0aD9udWxsOihlLm9iamVjdE1vZGU/cj1lLmJ1ZmZlci5zaGlmdCgpOiF0fHx0Pj1lLmxlbmd0aD8ocj1lLmRlY29kZXI/ZS5idWZmZXIuam9pbigiIik6MT09PWUuYnVmZmVyLmxlbmd0aD9lLmJ1ZmZlci5maXJzdCgpOmUuYnVmZmVyLmNvbmNhdChlLmxlbmd0aCksZS5idWZmZXIuY2xlYXIoKSk6cj1lLmJ1ZmZlci5jb25zdW1lKHQsZS5kZWNvZGVyKSxyKTt2YXIgcn1mdW5jdGlvbiBCKHQpe3ZhciBlPXQuX3JlYWRhYmxlU3RhdGU7YygiZW5kUmVhZGFibGUiLGUuZW5kRW1pdHRlZCksZS5lbmRFbWl0dGVkfHwoZS5lbmRlZD0hMCxyLm5leHRUaWNrKE4sZSx0KSl9ZnVuY3Rpb24gTih0LGUpe2lmKGMoImVuZFJlYWRhYmxlTlQiLHQuZW5kRW1pdHRlZCx0Lmxlbmd0aCksIXQuZW5kRW1pdHRlZCYmMD09PXQubGVuZ3RoJiYodC5lbmRFbWl0dGVkPSEwLGUucmVhZGFibGU9ITEsZS5lbWl0KCJlbmQiKSx0LmF1dG9EZXN0cm95KSl7dmFyIHI9ZS5fd3JpdGFibGVTdGF0ZTsoIXJ8fHIuYXV0b0Rlc3Ryb3kmJnIuZmluaXNoZWQpJiZlLmRlc3Ryb3koKX19ZnVuY3Rpb24gaih0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuO3IrKylpZih0W3JdPT09ZSlyZXR1cm4gcjtyZXR1cm4tMX1BLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKHQpe2MoInJlYWQiLHQpLHQ9cGFyc2VJbnQodCwxMCk7dmFyIGU9dGhpcy5fcmVhZGFibGVTdGF0ZSxyPXQ7aWYoMCE9PXQmJihlLmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PXQmJmUubmVlZFJlYWRhYmxlJiYoKDAhPT1lLmhpZ2hXYXRlck1hcms/ZS5sZW5ndGg+PWUuaGlnaFdhdGVyTWFyazplLmxlbmd0aD4wKXx8ZS5lbmRlZCkpcmV0dXJuIGMoInJlYWQ6IGVtaXRSZWFkYWJsZSIsZS5sZW5ndGgsZS5lbmRlZCksMD09PWUubGVuZ3RoJiZlLmVuZGVkP0IodGhpcyk6TCh0aGlzKSxudWxsO2lmKDA9PT0odD1FKHQsZSkpJiZlLmVuZGVkKXJldHVybiAwPT09ZS5sZW5ndGgmJkIodGhpcyksbnVsbDt2YXIgbixpPWUubmVlZFJlYWRhYmxlO3JldHVybiBjKCJuZWVkIHJlYWRhYmxlIixpKSwoMD09PWUubGVuZ3RofHxlLmxlbmd0aC10PGUuaGlnaFdhdGVyTWFyaykmJmMoImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrIixpPSEwKSxlLmVuZGVkfHxlLnJlYWRpbmc/YygicmVhZGluZyBvciBlbmRlZCIsaT0hMSk6aSYmKGMoImRvIHJlYWQiKSxlLnJlYWRpbmc9ITAsZS5zeW5jPSEwLDA9PT1lLmxlbmd0aCYmKGUubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKGUuaGlnaFdhdGVyTWFyayksZS5zeW5jPSExLGUucmVhZGluZ3x8KHQ9RShyLGUpKSksbnVsbD09PShuPXQ+MD9GKHQsZSk6bnVsbCk/KGUubmVlZFJlYWRhYmxlPWUubGVuZ3RoPD1lLmhpZ2hXYXRlck1hcmssdD0wKTooZS5sZW5ndGgtPXQsZS5hd2FpdERyYWluPTApLDA9PT1lLmxlbmd0aCYmKGUuZW5kZWR8fChlLm5lZWRSZWFkYWJsZT0hMCksciE9PXQmJmUuZW5kZWQmJkIodGhpcykpLG51bGwhPT1uJiZ0aGlzLmVtaXQoImRhdGEiLG4pLG59LEEucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKHQpe3codGhpcyxuZXcgYigiX3JlYWQoKSIpKX0sQS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChpLnBpcGVzQ291bnQpe2Nhc2UgMDppLnBpcGVzPXQ7YnJlYWs7Y2FzZSAxOmkucGlwZXM9W2kucGlwZXMsdF07YnJlYWs7ZGVmYXVsdDppLnBpcGVzLnB1c2godCl9aS5waXBlc0NvdW50Kz0xLGMoInBpcGUgY291bnQ9JWQgb3B0cz0laiIsaS5waXBlc0NvdW50LGUpO3ZhciBvPSghZXx8ITEhPT1lLmVuZCkmJnQhPT1yLnN0ZG91dCYmdCE9PXIuc3RkZXJyP2w6ZztmdW5jdGlvbiBzKGUscil7Yygib251bnBpcGUiKSxlPT09biYmciYmITE9PT1yLmhhc1VucGlwZWQmJihyLmhhc1VucGlwZWQ9ITAsYygiY2xlYW51cCIpLHQucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixkKSx0LnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLG0pLHQucmVtb3ZlTGlzdGVuZXIoImRyYWluIix1KSx0LnJlbW92ZUxpc3RlbmVyKCJlcnJvciIscCksdC5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixzKSxuLnJlbW92ZUxpc3RlbmVyKCJlbmQiLGwpLG4ucmVtb3ZlTGlzdGVuZXIoImVuZCIsZyksbi5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsaCksZj0hMCwhaS5hd2FpdERyYWlufHx0Ll93cml0YWJsZVN0YXRlJiYhdC5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW58fHUoKSl9ZnVuY3Rpb24gbCgpe2MoIm9uZW5kIiksdC5lbmQoKX1pLmVuZEVtaXR0ZWQ/ci5uZXh0VGljayhvKTpuLm9uY2UoImVuZCIsbyksdC5vbigidW5waXBlIixzKTt2YXIgdT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10Ll9yZWFkYWJsZVN0YXRlO2MoInBpcGVPbkRyYWluIixlLmF3YWl0RHJhaW4pLGUuYXdhaXREcmFpbiYmZS5hd2FpdERyYWluLS0sMD09PWUuYXdhaXREcmFpbiYmYSh0LCJkYXRhIikmJihlLmZsb3dpbmc9ITAsUih0KSl9fShuKTt0Lm9uKCJkcmFpbiIsdSk7dmFyIGY9ITE7ZnVuY3Rpb24gaChlKXtjKCJvbmRhdGEiKTt2YXIgcj10LndyaXRlKGUpO2MoImRlc3Qud3JpdGUiLHIpLCExPT09ciYmKCgxPT09aS5waXBlc0NvdW50JiZpLnBpcGVzPT09dHx8aS5waXBlc0NvdW50PjEmJi0xIT09aihpLnBpcGVzLHQpKSYmIWYmJihjKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLGkuYXdhaXREcmFpbiksaS5hd2FpdERyYWluKyspLG4ucGF1c2UoKSl9ZnVuY3Rpb24gcChlKXtjKCJvbmVycm9yIixlKSxnKCksdC5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLHApLDA9PT1hKHQsImVycm9yIikmJncodCxlKX1mdW5jdGlvbiBkKCl7dC5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixtKSxnKCl9ZnVuY3Rpb24gbSgpe2MoIm9uZmluaXNoIiksdC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGQpLGcoKX1mdW5jdGlvbiBnKCl7YygidW5waXBlIiksbi51bnBpcGUodCl9cmV0dXJuIG4ub24oImRhdGEiLGgpLGZ1bmN0aW9uKHQsZSxyKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIHQucHJlcGVuZExpc3RlbmVyKGUscik7dC5fZXZlbnRzJiZ0Ll9ldmVudHNbZV0/QXJyYXkuaXNBcnJheSh0Ll9ldmVudHNbZV0pP3QuX2V2ZW50c1tlXS51bnNoaWZ0KHIpOnQuX2V2ZW50c1tlXT1bcix0Ll9ldmVudHNbZV1dOnQub24oZSxyKX0odCwiZXJyb3IiLHApLHQub25jZSgiY2xvc2UiLGQpLHQub25jZSgiZmluaXNoIixtKSx0LmVtaXQoInBpcGUiLG4pLGkuZmxvd2luZ3x8KGMoInBpcGUgcmVzdW1lIiksbi5yZXN1bWUoKSksdH0sQS5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlYWRhYmxlU3RhdGUscj17aGFzVW5waXBlZDohMX07aWYoMD09PWUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09ZS5waXBlc0NvdW50KXJldHVybiB0JiZ0IT09ZS5waXBlc3x8KHR8fCh0PWUucGlwZXMpLGUucGlwZXM9bnVsbCxlLnBpcGVzQ291bnQ9MCxlLmZsb3dpbmc9ITEsdCYmdC5lbWl0KCJ1bnBpcGUiLHRoaXMscikpLHRoaXM7aWYoIXQpe3ZhciBuPWUucGlwZXMsaT1lLnBpcGVzQ291bnQ7ZS5waXBlcz1udWxsLGUucGlwZXNDb3VudD0wLGUuZmxvd2luZz0hMTtmb3IodmFyIGE9MDthPGk7YSsrKW5bYV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIG89aihlLnBpcGVzLHQpO3JldHVybi0xPT09b3x8KGUucGlwZXMuc3BsaWNlKG8sMSksZS5waXBlc0NvdW50LT0xLDE9PT1lLnBpcGVzQ291bnQmJihlLnBpcGVzPWUucGlwZXNbMF0pLHQuZW1pdCgidW5waXBlIix0aGlzLHIpKSx0aGlzfSxBLnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUpe3ZhciBuPW8ucHJvdG90eXBlLm9uLmNhbGwodGhpcyx0LGUpLGk9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4iZGF0YSI9PT10PyhpLnJlYWRhYmxlTGlzdGVuaW5nPXRoaXMubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLCExIT09aS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpKToicmVhZGFibGUiPT09dCYmKGkuZW5kRW1pdHRlZHx8aS5yZWFkYWJsZUxpc3RlbmluZ3x8KGkucmVhZGFibGVMaXN0ZW5pbmc9aS5uZWVkUmVhZGFibGU9ITAsaS5mbG93aW5nPSExLGkuZW1pdHRlZFJlYWRhYmxlPSExLGMoIm9uIHJlYWRhYmxlIixpLmxlbmd0aCxpLnJlYWRpbmcpLGkubGVuZ3RoP0wodGhpcyk6aS5yZWFkaW5nfHxyLm5leHRUaWNrKHosdGhpcykpKSxufSxBLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1BLnByb3RvdHlwZS5vbixBLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3ZhciBuPW8ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcyx0LGUpO3JldHVybiJyZWFkYWJsZSI9PT10JiZyLm5leHRUaWNrKE8sdGhpcyksbn0sQS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPW8ucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuInJlYWRhYmxlIiE9PXQmJnZvaWQgMCE9PXR8fHIubmV4dFRpY2soTyx0aGlzKSxlfSxBLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiB0LmZsb3dpbmd8fChjKCJyZXN1bWUiKSx0LmZsb3dpbmc9IXQucmVhZGFibGVMaXN0ZW5pbmcsZnVuY3Rpb24odCxlKXtlLnJlc3VtZVNjaGVkdWxlZHx8KGUucmVzdW1lU2NoZWR1bGVkPSEwLHIubmV4dFRpY2soRCx0LGUpKX0odGhpcyx0KSksdC5wYXVzZWQ9ITEsdGhpc30sQS5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gYygiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoYygicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzLl9yZWFkYWJsZVN0YXRlLnBhdXNlZD0hMCx0aGlzfSxBLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj10aGlzLl9yZWFkYWJsZVN0YXRlLG49ITE7Zm9yKHZhciBpIGluIHQub24oImVuZCIsKGZ1bmN0aW9uKCl7aWYoYygid3JhcHBlZCBlbmQiKSxyLmRlY29kZXImJiFyLmVuZGVkKXt2YXIgdD1yLmRlY29kZXIuZW5kKCk7dCYmdC5sZW5ndGgmJmUucHVzaCh0KX1lLnB1c2gobnVsbCl9KSksdC5vbigiZGF0YSIsKGZ1bmN0aW9uKGkpeyhjKCJ3cmFwcGVkIGRhdGEiKSxyLmRlY29kZXImJihpPXIuZGVjb2Rlci53cml0ZShpKSksci5vYmplY3RNb2RlJiZudWxsPT1pKXx8KHIub2JqZWN0TW9kZXx8aSYmaS5sZW5ndGgpJiYoZS5wdXNoKGkpfHwobj0hMCx0LnBhdXNlKCkpKX0pKSx0KXZvaWQgMD09PXRoaXNbaV0mJiJmdW5jdGlvbiI9PXR5cGVvZiB0W2ldJiYodGhpc1tpXT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdFtlXS5hcHBseSh0LGFyZ3VtZW50cyl9fShpKSk7Zm9yKHZhciBhPTA7YTxULmxlbmd0aDthKyspdC5vbihUW2FdLHRoaXMuZW1pdC5iaW5kKHRoaXMsVFthXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKGUpe2MoIndyYXBwZWQgX3JlYWQiLGUpLG4mJihuPSExLHQucmVzdW1lKCkpfSx0aGlzfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoQS5wcm90b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PWgmJihoPXQoIi4vaW50ZXJuYWwvc3RyZWFtcy9hc3luY19pdGVyYXRvciIpKSxoKHRoaXMpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEucHJvdG90eXBlLCJyZWFkYWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSwicmVhZGFibGVGbG93aW5nIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz10KX19KSxBLl9mcm9tTGlzdD1GLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSwicmVhZGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aH19KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoQS5mcm9tPWZ1bmN0aW9uKGUscil7cmV0dXJuIHZvaWQgMD09PXAmJihwPXQoIi4vaW50ZXJuYWwvc3RyZWFtcy9mcm9tIikpLHAoQSxlLHIpfSl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIiksInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi4vZXJyb3JzIjo1NDQsIi4vX3N0cmVhbV9kdXBsZXgiOjU0NSwiLi9pbnRlcm5hbC9zdHJlYW1zL2FzeW5jX2l0ZXJhdG9yIjo1NTAsIi4vaW50ZXJuYWwvc3RyZWFtcy9idWZmZXJfbGlzdCI6NTUxLCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSI6NTUyLCIuL2ludGVybmFsL3N0cmVhbXMvZnJvbSI6NTU0LCIuL2ludGVybmFsL3N0cmVhbXMvc3RhdGUiOjU1NiwiLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbSI6NTU3LF9wcm9jZXNzOjUwNCxidWZmZXI6MTEyLGV2ZW50czoyMzcsaW5oZXJpdHM6NDI5LCJzdHJpbmdfZGVjb2Rlci8iOjU2Myx1dGlsOjExMX1dLDU0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dTt2YXIgbj10KCIuLi9lcnJvcnMiKS5jb2RlcyxpPW4uRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsYT1uLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxvPW4uRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORyxzPW4uRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wLGw9dCgiLi9fc3RyZWFtX2R1cGxleCIpO2Z1bmN0aW9uIGModCxlKXt2YXIgcj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtyLnRyYW5zZm9ybWluZz0hMTt2YXIgbj1yLndyaXRlY2I7aWYobnVsbD09PW4pcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLG5ldyBhKTtyLndyaXRlY2h1bms9bnVsbCxyLndyaXRlY2I9bnVsbCxudWxsIT1lJiZ0aGlzLnB1c2goZSksbih0KTt2YXIgaT10aGlzLl9yZWFkYWJsZVN0YXRlO2kucmVhZGluZz0hMSwoaS5uZWVkUmVhZGFibGV8fGkubGVuZ3RoPGkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoaS5oaWdoV2F0ZXJNYXJrKX1mdW5jdGlvbiB1KHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHUpKXJldHVybiBuZXcgdSh0KTtsLmNhbGwodGhpcyx0KSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06Yy5iaW5kKHRoaXMpLG5lZWRUcmFuc2Zvcm06ITEsdHJhbnNmb3JtaW5nOiExLHdyaXRlY2I6bnVsbCx3cml0ZWNodW5rOm51bGwsd3JpdGVlbmNvZGluZzpudWxsfSx0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZT0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT10LnRyYW5zZm9ybSksImZ1bmN0aW9uIj09dHlwZW9mIHQuZmx1c2gmJih0aGlzLl9mbHVzaD10LmZsdXNoKSksdGhpcy5vbigicHJlZmluaXNoIixmKX1mdW5jdGlvbiBmKCl7dmFyIHQ9dGhpczsiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5fZmx1c2h8fHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkP2godGhpcyxudWxsLG51bGwpOnRoaXMuX2ZsdXNoKChmdW5jdGlvbihlLHIpe2godCxlLHIpfSkpfWZ1bmN0aW9uIGgodCxlLHIpe2lmKGUpcmV0dXJuIHQuZW1pdCgiZXJyb3IiLGUpO2lmKG51bGwhPXImJnQucHVzaChyKSx0Ll93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgcztpZih0Ll90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IG87cmV0dXJuIHQucHVzaChudWxsKX10KCJpbmhlcml0cyIpKHUsbCksdS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLGwucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLHQsZSl9LHUucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3IobmV3IGkoIl90cmFuc2Zvcm0oKSIpKX0sdS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihuLndyaXRlY2I9cixuLndyaXRlY2h1bms9dCxuLndyaXRlZW5jb2Rpbmc9ZSwhbi50cmFuc2Zvcm1pbmcpe3ZhciBpPXRoaXMuX3JlYWRhYmxlU3RhdGU7KG4ubmVlZFRyYW5zZm9ybXx8aS5uZWVkUmVhZGFibGV8fGkubGVuZ3RoPGkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoaS5oaWdoV2F0ZXJNYXJrKX19LHUucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGw9PT1lLndyaXRlY2h1bmt8fGUudHJhbnNmb3JtaW5nP2UubmVlZFRyYW5zZm9ybT0hMDooZS50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKGUud3JpdGVjaHVuayxlLndyaXRlZW5jb2RpbmcsZS5hZnRlclRyYW5zZm9ybSkpfSx1LnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbih0LGUpe2wucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyx0LChmdW5jdGlvbih0KXtlKHQpfSkpfX0seyIuLi9lcnJvcnMiOjU0NCwiLi9fc3RyZWFtX2R1cGxleCI6NTQ1LGluaGVyaXRzOjQyOX1dLDU0OTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyLG4peyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKHQpe3ZhciBlPXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmVudHJ5O3QuZW50cnk9bnVsbDtmb3IoO247KXt2YXIgaT1uLmNhbGxiYWNrO2UucGVuZGluZ2NiLS0saShyKSxuPW4ubmV4dH1lLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PXR9KGUsdCl9fXZhciBhO2UuZXhwb3J0cz1BLEEuV3JpdGFibGVTdGF0ZT1rO3ZhciBvPXtkZXByZWNhdGU6dCgidXRpbC1kZXByZWNhdGUiKX0scz10KCIuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtIiksbD10KCJidWZmZXIiKS5CdWZmZXIsYz1uLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fTt2YXIgdSxmPXQoIi4vaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95IiksaD10KCIuL2ludGVybmFsL3N0cmVhbXMvc3RhdGUiKS5nZXRIaWdoV2F0ZXJNYXJrLHA9dCgiLi4vZXJyb3JzIikuY29kZXMsZD1wLkVSUl9JTlZBTElEX0FSR19UWVBFLG09cC5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxnPXAuRVJSX01VTFRJUExFX0NBTExCQUNLLHY9cC5FUlJfU1RSRUFNX0NBTk5PVF9QSVBFLHk9cC5FUlJfU1RSRUFNX0RFU1RST1lFRCx4PXAuRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyxiPXAuRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQsXz1wLkVSUl9VTktOT1dOX0VOQ09ESU5HLHc9Zi5lcnJvck9yRGVzdHJveTtmdW5jdGlvbiBUKCl7fWZ1bmN0aW9uIGsoZSxuLG8pe2E9YXx8dCgiLi9fc3RyZWFtX2R1cGxleCIpLGU9ZXx8e30sImJvb2xlYW4iIT10eXBlb2YgbyYmKG89biBpbnN0YW5jZW9mIGEpLHRoaXMub2JqZWN0TW9kZT0hIWUub2JqZWN0TW9kZSxvJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFlLndyaXRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPWgodGhpcyxlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLG8pLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExO3ZhciBzPSExPT09ZS5kZWNvZGVTdHJpbmdzO3RoaXMuZGVjb2RlU3RyaW5ncz0hcyx0aGlzLmRlZmF1bHRFbmNvZGluZz1lLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5fd3JpdGFibGVTdGF0ZSxpPW4uc3luYyxhPW4ud3JpdGVjYjtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgZztpZihmdW5jdGlvbih0KXt0LndyaXRpbmc9ITEsdC53cml0ZWNiPW51bGwsdC5sZW5ndGgtPXQud3JpdGVsZW4sdC53cml0ZWxlbj0wfShuKSxlKSFmdW5jdGlvbih0LGUsbixpLGEpey0tZS5wZW5kaW5nY2Isbj8oci5uZXh0VGljayhhLGkpLHIubmV4dFRpY2soUCx0LGUpLHQuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHcodCxpKSk6KGEoaSksdC5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsdyh0LGkpLFAodCxlKSl9KHQsbixpLGUsYSk7ZWxzZXt2YXIgbz1MKG4pfHx0LmRlc3Ryb3llZDtvfHxuLmNvcmtlZHx8bi5idWZmZXJQcm9jZXNzaW5nfHwhbi5idWZmZXJlZFJlcXVlc3R8fEUodCxuKSxpP3IubmV4dFRpY2soUyx0LG4sbyxhKTpTKHQsbixvLGEpfX0obix0KX0sdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuZW1pdENsb3NlPSExIT09ZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIWUuYXV0b0Rlc3Ryb3ksdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBpKHRoaXMpfWZ1bmN0aW9uIEEoZSl7dmFyIHI9dGhpcyBpbnN0YW5jZW9mKGE9YXx8dCgiLi9fc3RyZWFtX2R1cGxleCIpKTtpZighciYmIXUuY2FsbChBLHRoaXMpKXJldHVybiBuZXcgQShlKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBrKGUsdGhpcyxyKSx0aGlzLndyaXRhYmxlPSEwLGUmJigiZnVuY3Rpb24iPT10eXBlb2YgZS53cml0ZSYmKHRoaXMuX3dyaXRlPWUud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLndyaXRldiYmKHRoaXMuX3dyaXRldj1lLndyaXRldiksImZ1bmN0aW9uIj09dHlwZW9mIGUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9ZS5kZXN0cm95KSwiZnVuY3Rpb24iPT10eXBlb2YgZS5maW5hbCYmKHRoaXMuX2ZpbmFsPWUuZmluYWwpKSxzLmNhbGwodGhpcyl9ZnVuY3Rpb24gTSh0LGUscixuLGksYSxvKXtlLndyaXRlbGVuPW4sZS53cml0ZWNiPW8sZS53cml0aW5nPSEwLGUuc3luYz0hMCxlLmRlc3Ryb3llZD9lLm9ud3JpdGUobmV3IHkoIndyaXRlIikpOnI/dC5fd3JpdGV2KGksZS5vbndyaXRlKTp0Ll93cml0ZShpLGEsZS5vbndyaXRlKSxlLnN5bmM9ITF9ZnVuY3Rpb24gUyh0LGUscixuKXtyfHxmdW5jdGlvbih0LGUpezA9PT1lLmxlbmd0aCYmZS5uZWVkRHJhaW4mJihlLm5lZWREcmFpbj0hMSx0LmVtaXQoImRyYWluIikpfSh0LGUpLGUucGVuZGluZ2NiLS0sbigpLFAodCxlKX1mdW5jdGlvbiBFKHQsZSl7ZS5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciByPWUuYnVmZmVyZWRSZXF1ZXN0O2lmKHQuX3dyaXRldiYmciYmci5uZXh0KXt2YXIgbj1lLmJ1ZmZlcmVkUmVxdWVzdENvdW50LGE9bmV3IEFycmF5KG4pLG89ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7by5lbnRyeT1yO2Zvcih2YXIgcz0wLGw9ITA7cjspYVtzXT1yLHIuaXNCdWZ8fChsPSExKSxyPXIubmV4dCxzKz0xO2EuYWxsQnVmZmVycz1sLE0odCxlLCEwLGUubGVuZ3RoLGEsIiIsby5maW5pc2gpLGUucGVuZGluZ2NiKyssZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsby5uZXh0PyhlLmNvcmtlZFJlcXVlc3RzRnJlZT1vLm5leHQsby5uZXh0PW51bGwpOmUuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBpKGUpLGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MH1lbHNle2Zvcig7cjspe3ZhciBjPXIuY2h1bmssdT1yLmVuY29kaW5nLGY9ci5jYWxsYmFjaztpZihNKHQsZSwhMSxlLm9iamVjdE1vZGU/MTpjLmxlbmd0aCxjLHUsZikscj1yLm5leHQsZS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLGUud3JpdGluZylicmVha31udWxsPT09ciYmKGUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1lLmJ1ZmZlcmVkUmVxdWVzdD1yLGUuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiBMKHQpe3JldHVybiB0LmVuZGluZyYmMD09PXQubGVuZ3RoJiZudWxsPT09dC5idWZmZXJlZFJlcXVlc3QmJiF0LmZpbmlzaGVkJiYhdC53cml0aW5nfWZ1bmN0aW9uIEModCxlKXt0Ll9maW5hbCgoZnVuY3Rpb24ocil7ZS5wZW5kaW5nY2ItLSxyJiZ3KHQsciksZS5wcmVmaW5pc2hlZD0hMCx0LmVtaXQoInByZWZpbmlzaCIpLFAodCxlKX0pKX1mdW5jdGlvbiBQKHQsZSl7dmFyIG49TChlKTtpZihuJiYoZnVuY3Rpb24odCxlKXtlLnByZWZpbmlzaGVkfHxlLmZpbmFsQ2FsbGVkfHwoImZ1bmN0aW9uIiE9dHlwZW9mIHQuX2ZpbmFsfHxlLmRlc3Ryb3llZD8oZS5wcmVmaW5pc2hlZD0hMCx0LmVtaXQoInByZWZpbmlzaCIpKTooZS5wZW5kaW5nY2IrKyxlLmZpbmFsQ2FsbGVkPSEwLHIubmV4dFRpY2soQyx0LGUpKSl9KHQsZSksMD09PWUucGVuZGluZ2NiJiYoZS5maW5pc2hlZD0hMCx0LmVtaXQoImZpbmlzaCIpLGUuYXV0b0Rlc3Ryb3kpKSl7dmFyIGk9dC5fcmVhZGFibGVTdGF0ZTsoIWl8fGkuYXV0b0Rlc3Ryb3kmJmkuZW5kRW1pdHRlZCkmJnQuZGVzdHJveSgpfXJldHVybiBufXQoImluaGVyaXRzIikoQSxzKSxrLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5idWZmZXJlZFJlcXVlc3QsZT1bXTt0OyllLnB1c2godCksdD10Lm5leHQ7cmV0dXJuIGV9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0Om8uZGVwcmVjYXRlKChmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSksIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyIGluc3RlYWQuIiwiREVQMDAwMyIpfSl9Y2F0Y2godCl7fX0oKSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaGFzSW5zdGFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXT8odT1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiEhdS5jYWxsKHRoaXMsdCl8fHRoaXM9PT1BJiYodCYmdC5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIGspfX0pKTp1PWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpc30sQS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe3codGhpcyxuZXcgdil9LEEucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhPXRoaXMuX3dyaXRhYmxlU3RhdGUsbz0hMSxzPSFhLm9iamVjdE1vZGUmJihpPXQsbC5pc0J1ZmZlcihpKXx8aSBpbnN0YW5jZW9mIGMpO3JldHVybiBzJiYhbC5pc0J1ZmZlcih0KSYmKHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwuZnJvbSh0KX0odCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBlJiYobj1lLGU9bnVsbCkscz9lPSJidWZmZXIiOmV8fChlPWEuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49VCksYS5lbmRpbmc/ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgYjt3KHQsbiksci5uZXh0VGljayhlLG4pfSh0aGlzLG4pOihzfHxmdW5jdGlvbih0LGUsbixpKXt2YXIgYTtyZXR1cm4gbnVsbD09PW4/YT1uZXcgeDoic3RyaW5nIj09dHlwZW9mIG58fGUub2JqZWN0TW9kZXx8KGE9bmV3IGQoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciJdLG4pKSwhYXx8KHcodCxhKSxyLm5leHRUaWNrKGksYSksITEpfSh0aGlzLGEsdCxuKSkmJihhLnBlbmRpbmdjYisrLG89ZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKCFyKXt2YXIgbz1mdW5jdGlvbih0LGUscil7dC5vYmplY3RNb2RlfHwhMT09PXQuZGVjb2RlU3RyaW5nc3x8InN0cmluZyIhPXR5cGVvZiBlfHwoZT1sLmZyb20oZSxyKSk7cmV0dXJuIGV9KGUsbixpKTtuIT09byYmKHI9ITAsaT0iYnVmZmVyIixuPW8pfXZhciBzPWUub2JqZWN0TW9kZT8xOm4ubGVuZ3RoO2UubGVuZ3RoKz1zO3ZhciBjPWUubGVuZ3RoPGUuaGlnaFdhdGVyTWFyaztjfHwoZS5uZWVkRHJhaW49ITApO2lmKGUud3JpdGluZ3x8ZS5jb3JrZWQpe3ZhciB1PWUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOm4sZW5jb2Rpbmc6aSxpc0J1ZjpyLGNhbGxiYWNrOmEsbmV4dDpudWxsfSx1P3UubmV4dD1lLmxhc3RCdWZmZXJlZFJlcXVlc3Q6ZS5idWZmZXJlZFJlcXVlc3Q9ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0LGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBNKHQsZSwhMSxzLG4saSxhKTtyZXR1cm4gY30odGhpcyxhLHMsdCxlLG4pKSxvfSxBLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sQS5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fd3JpdGFibGVTdGF0ZTt0LmNvcmtlZCYmKHQuY29ya2VkLS0sdC53cml0aW5nfHx0LmNvcmtlZHx8dC5idWZmZXJQcm9jZXNzaW5nfHwhdC5idWZmZXJlZFJlcXVlc3R8fEUodGhpcyx0KSl9LEEucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQmJih0PXQudG9Mb3dlckNhc2UoKSksIShbImhleCIsInV0ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFzZTY0IiwidWNzMiIsInVjcy0yIiwidXRmMTZsZSIsInV0Zi0xNmxlIiwicmF3Il0uaW5kZXhPZigodCsiIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyBfKHQpO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz10LHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLEEucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbih0LGUscil7cihuZXcgbSgiX3dyaXRlKCkiKSl9LEEucHJvdG90eXBlLl93cml0ZXY9bnVsbCxBLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/KG49dCx0PW51bGwsZT1udWxsKToiZnVuY3Rpb24iPT10eXBlb2YgZSYmKG49ZSxlPW51bGwpLG51bGwhPXQmJnRoaXMud3JpdGUodCxlKSxpLmNvcmtlZCYmKGkuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksaS5lbmRpbmd8fGZ1bmN0aW9uKHQsZSxuKXtlLmVuZGluZz0hMCxQKHQsZSksbiYmKGUuZmluaXNoZWQ/ci5uZXh0VGljayhuKTp0Lm9uY2UoImZpbmlzaCIsbikpO2UuZW5kZWQ9ITAsdC53cml0YWJsZT0hMX0odGhpcyxpLG4pLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQS5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPXQpfX0pLEEucHJvdG90eXBlLmRlc3Ryb3k9Zi5kZXN0cm95LEEucHJvdG90eXBlLl91bmRlc3Ryb3k9Zi51bmRlc3Ryb3ksQS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24odCxlKXtlKHQpfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuLi9lcnJvcnMiOjU0NCwiLi9fc3RyZWFtX2R1cGxleCI6NTQ1LCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSI6NTUyLCIuL2ludGVybmFsL3N0cmVhbXMvc3RhdGUiOjU1NiwiLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbSI6NTU3LF9wcm9jZXNzOjUwNCxidWZmZXI6MTEyLGluaGVyaXRzOjQyOSwidXRpbC1kZXByZWNhdGUiOjU5NX1dLDU1MDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIG47ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJuIGUgaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9dmFyIGE9dCgiLi9lbmQtb2Ytc3RyZWFtIiksbz1TeW1ib2woImxhc3RSZXNvbHZlIikscz1TeW1ib2woImxhc3RSZWplY3QiKSxsPVN5bWJvbCgiZXJyb3IiKSxjPVN5bWJvbCgiZW5kZWQiKSx1PVN5bWJvbCgibGFzdFByb21pc2UiKSxmPVN5bWJvbCgiaGFuZGxlUHJvbWlzZSIpLGg9U3ltYm9sKCJzdHJlYW0iKTtmdW5jdGlvbiBwKHQsZSl7cmV0dXJue3ZhbHVlOnQsZG9uZTplfX1mdW5jdGlvbiBkKHQpe3ZhciBlPXRbb107aWYobnVsbCE9PWUpe3ZhciByPXRbaF0ucmVhZCgpO251bGwhPT1yJiYodFt1XT1udWxsLHRbb109bnVsbCx0W3NdPW51bGwsZShwKHIsITEpKSl9fWZ1bmN0aW9uIG0odCl7ci5uZXh0VGljayhkLHQpfXZhciBnPU9iamVjdC5nZXRQcm90b3R5cGVPZigoZnVuY3Rpb24oKXt9KSksdj1PYmplY3Quc2V0UHJvdG90eXBlT2YoKGkobj17Z2V0IHN0cmVhbSgpe3JldHVybiB0aGlzW2hdfSxuZXh0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXNbbF07aWYobnVsbCE9PWUpcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO2lmKHRoaXNbY10pcmV0dXJuIFByb21pc2UucmVzb2x2ZShwKHZvaWQgMCwhMCkpO2lmKHRoaXNbaF0uZGVzdHJveWVkKXJldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxuKXtyLm5leHRUaWNrKChmdW5jdGlvbigpe3RbbF0/bih0W2xdKTplKHAodm9pZCAwLCEwKSl9KSl9KSk7dmFyIG4saT10aGlzW3VdO2lmKGkpbj1uZXcgUHJvbWlzZShmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyLG4pe3QudGhlbigoZnVuY3Rpb24oKXtlW2NdP3IocCh2b2lkIDAsITApKTplW2ZdKHIsbil9KSxuKX19KGksdGhpcykpO2Vsc2V7dmFyIGE9dGhpc1toXS5yZWFkKCk7aWYobnVsbCE9PWEpcmV0dXJuIFByb21pc2UucmVzb2x2ZShwKGEsITEpKTtuPW5ldyBQcm9taXNlKHRoaXNbZl0pfXJldHVybiB0aGlzW3VdPW4sbn19LFN5bWJvbC5hc3luY0l0ZXJhdG9yLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGkobiwicmV0dXJuIiwoZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxyKXt0W2hdLmRlc3Ryb3kobnVsbCwoZnVuY3Rpb24odCl7dD9yKHQpOmUocCh2b2lkIDAsITApKX0pKX0pKX0pKSxuKSxnKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscj1PYmplY3QuY3JlYXRlKHYsKGkoZT17fSxoLHt2YWx1ZTp0LHdyaXRhYmxlOiEwfSksaShlLG8se3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxpKGUscyx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLGkoZSxsLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksaShlLGMse3ZhbHVlOnQuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCx3cml0YWJsZTohMH0pLGkoZSxmLHt2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBuPXJbaF0ucmVhZCgpO24/KHJbdV09bnVsbCxyW29dPW51bGwscltzXT1udWxsLHQocChuLCExKSkpOihyW29dPXQscltzXT1lKX0sd3JpdGFibGU6ITB9KSxlKSk7cmV0dXJuIHJbdV09bnVsbCxhKHQsKGZ1bmN0aW9uKHQpe2lmKHQmJiJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIhPT10LmNvZGUpe3ZhciBlPXJbc107cmV0dXJuIG51bGwhPT1lJiYoclt1XT1udWxsLHJbb109bnVsbCxyW3NdPW51bGwsZSh0KSksdm9pZChyW2xdPXQpfXZhciBuPXJbb107bnVsbCE9PW4mJihyW3VdPW51bGwscltvXT1udWxsLHJbc109bnVsbCxuKHAodm9pZCAwLCEwKSkpLHJbY109ITB9KSksdC5vbigicmVhZGFibGUiLG0uYmluZChudWxsLHIpKSxyfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHsiLi9lbmQtb2Ytc3RyZWFtIjo1NTMsX3Byb2Nlc3M6NTA0fV0sNTUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihuPW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLG4pfXJldHVybiByfWZ1bmN0aW9uIGkodCxlLHIpe3JldHVybiBlIGluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09cix0fWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX12YXIgbz10KCJidWZmZXIiKS5CdWZmZXIscz10KCJ1dGlsIikuaW5zcGVjdCxsPXMmJnMuY3VzdG9tfHwiaW5zcGVjdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9dmFyIGUscixjO3JldHVybiBlPXQsKHI9W3trZXk6InB1c2giLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXtkYXRhOnQsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PWU6dGhpcy5oZWFkPWUsdGhpcy50YWlsPWUsKyt0aGlzLmxlbmd0aH19LHtrZXk6InVuc2hpZnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXtkYXRhOnQsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1lKSx0aGlzLmhlYWQ9ZSwrK3RoaXMubGVuZ3RofX0se2tleToic2hpZnQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgdD10aGlzLmhlYWQuZGF0YTtyZXR1cm4gMT09PXRoaXMubGVuZ3RoP3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQ9dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCx0fX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfX0se2tleToiam9pbiIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgZT10aGlzLmhlYWQscj0iIitlLmRhdGE7ZT1lLm5leHQ7KXIrPXQrZS5kYXRhO3JldHVybiByfX0se2tleToiY29uY2F0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIG8uYWxsb2MoMCk7Zm9yKHZhciBlLHIsbixpPW8uYWxsb2NVbnNhZmUodD4+PjApLGE9dGhpcy5oZWFkLHM9MDthOyllPWEuZGF0YSxyPWksbj1zLG8ucHJvdG90eXBlLmNvcHkuY2FsbChlLHIsbikscys9YS5kYXRhLmxlbmd0aCxhPWEubmV4dDtyZXR1cm4gaX19LHtrZXk6ImNvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIHQ8dGhpcy5oZWFkLmRhdGEubGVuZ3RoPyhyPXRoaXMuaGVhZC5kYXRhLnNsaWNlKDAsdCksdGhpcy5oZWFkLmRhdGE9dGhpcy5oZWFkLmRhdGEuc2xpY2UodCkpOnI9dD09PXRoaXMuaGVhZC5kYXRhLmxlbmd0aD90aGlzLnNoaWZ0KCk6ZT90aGlzLl9nZXRTdHJpbmcodCk6dGhpcy5fZ2V0QnVmZmVyKHQpLHJ9fSx7a2V5OiJmaXJzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWFkLmRhdGF9fSx7a2V5OiJfZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmhlYWQscj0xLG49ZS5kYXRhO2Zvcih0LT1uLmxlbmd0aDtlPWUubmV4dDspe3ZhciBpPWUuZGF0YSxhPXQ+aS5sZW5ndGg/aS5sZW5ndGg6dDtpZihhPT09aS5sZW5ndGg/bis9aTpuKz1pLnNsaWNlKDAsdCksMD09KHQtPWEpKXthPT09aS5sZW5ndGg/KCsrcixlLm5leHQ/dGhpcy5oZWFkPWUubmV4dDp0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9ZSxlLmRhdGE9aS5zbGljZShhKSk7YnJlYWt9KytyfXJldHVybiB0aGlzLmxlbmd0aC09cixufX0se2tleToiX2dldEJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9by5hbGxvY1Vuc2FmZSh0KSxyPXRoaXMuaGVhZCxuPTE7Zm9yKHIuZGF0YS5jb3B5KGUpLHQtPXIuZGF0YS5sZW5ndGg7cj1yLm5leHQ7KXt2YXIgaT1yLmRhdGEsYT10PmkubGVuZ3RoP2kubGVuZ3RoOnQ7aWYoaS5jb3B5KGUsZS5sZW5ndGgtdCwwLGEpLDA9PSh0LT1hKSl7YT09PWkubGVuZ3RoPygrK24sci5uZXh0P3RoaXMuaGVhZD1yLm5leHQ6dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPXIsci5kYXRhPWkuc2xpY2UoYSkpO2JyZWFrfSsrbn1yZXR1cm4gdGhpcy5sZW5ndGgtPW4sZX19LHtrZXk6bCx2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiBzKHRoaXMsZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/bihPYmplY3QociksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe2kodCxlLHJbZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocikpOm4oT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSl9cmV0dXJuIHR9KHt9LGUse2RlcHRoOjAsY3VzdG9tSW5zcGVjdDohMX0pKX19XSkmJmEoZS5wcm90b3R5cGUsciksYyYmYShlLGMpLHR9KCl9LHtidWZmZXI6MTEyLHV0aWw6MTExfV0sNTUyOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQsZSl7aSh0LGUpLG4odCl9ZnVuY3Rpb24gbih0KXt0Ll93cml0YWJsZVN0YXRlJiYhdC5fd3JpdGFibGVTdGF0ZS5lbWl0Q2xvc2V8fHQuX3JlYWRhYmxlU3RhdGUmJiF0Ll9yZWFkYWJsZVN0YXRlLmVtaXRDbG9zZXx8dC5lbWl0KCJjbG9zZSIpfWZ1bmN0aW9uIGkodCxlKXt0LmVtaXQoImVycm9yIixlKX1lLmV4cG9ydHM9e2Rlc3Ryb3k6ZnVuY3Rpb24oZSxhKXt2YXIgbz10aGlzLHM9dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQsbD10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtyZXR1cm4gc3x8bD8oYT9hKGUpOmUmJih0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsdC5uZXh0VGljayhpLHRoaXMsZSkpOnQubmV4dFRpY2soaSx0aGlzLGUpKSx0aGlzKToodGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX2Rlc3Ryb3koZXx8bnVsbCwoZnVuY3Rpb24oZSl7IWEmJmU/by5fd3JpdGFibGVTdGF0ZT9vLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD90Lm5leHRUaWNrKG4sbyk6KG8uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHQubmV4dFRpY2socixvLGUpKTp0Lm5leHRUaWNrKHIsbyxlKTphPyh0Lm5leHRUaWNrKG4sbyksYShlKSk6dC5uZXh0VGljayhuLG8pfSkpLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSExKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUucHJlZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMSl9LGVycm9yT3JEZXN0cm95OmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fcmVhZGFibGVTdGF0ZSxuPXQuX3dyaXRhYmxlU3RhdGU7ciYmci5hdXRvRGVzdHJveXx8biYmbi5hdXRvRGVzdHJveT90LmRlc3Ryb3koZSk6dC5lbWl0KCJlcnJvciIsZSl9fX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHtfcHJvY2Vzczo1MDR9XSw1NTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vZXJyb3JzIikuY29kZXMuRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U7ZnVuY3Rpb24gaSgpe31lLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpcmV0dXJuIHQoZSxudWxsLHIpO3J8fChyPXt9KSxhPWZ1bmN0aW9uKHQpe3ZhciBlPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFlKXtlPSEwO2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7aSsrKW5baV09YXJndW1lbnRzW2ldO3QuYXBwbHkodGhpcyxuKX19fShhfHxpKTt2YXIgbz1yLnJlYWRhYmxlfHwhMSE9PXIucmVhZGFibGUmJmUucmVhZGFibGUscz1yLndyaXRhYmxlfHwhMSE9PXIud3JpdGFibGUmJmUud3JpdGFibGUsbD1mdW5jdGlvbigpe2Uud3JpdGFibGV8fHUoKX0sYz1lLl93cml0YWJsZVN0YXRlJiZlLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkLHU9ZnVuY3Rpb24oKXtzPSExLGM9ITAsb3x8YS5jYWxsKGUpfSxmPWUuX3JlYWRhYmxlU3RhdGUmJmUuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxoPWZ1bmN0aW9uKCl7bz0hMSxmPSEwLHN8fGEuY2FsbChlKX0scD1mdW5jdGlvbih0KXthLmNhbGwoZSx0KX0sZD1mdW5jdGlvbigpe3ZhciB0O3JldHVybiBvJiYhZj8oZS5fcmVhZGFibGVTdGF0ZSYmZS5fcmVhZGFibGVTdGF0ZS5lbmRlZHx8KHQ9bmV3IG4pLGEuY2FsbChlLHQpKTpzJiYhYz8oZS5fd3JpdGFibGVTdGF0ZSYmZS5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8KHQ9bmV3IG4pLGEuY2FsbChlLHQpKTp2b2lkIDB9LG09ZnVuY3Rpb24oKXtlLnJlcS5vbigiZmluaXNoIix1KX07cmV0dXJuIWZ1bmN0aW9uKHQpe3JldHVybiB0LnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIHQuYWJvcnR9KGUpP3MmJiFlLl93cml0YWJsZVN0YXRlJiYoZS5vbigiZW5kIixsKSxlLm9uKCJjbG9zZSIsbCkpOihlLm9uKCJjb21wbGV0ZSIsdSksZS5vbigiYWJvcnQiLGQpLGUucmVxP20oKTplLm9uKCJyZXF1ZXN0IixtKSksZS5vbigiZW5kIixoKSxlLm9uKCJmaW5pc2giLHUpLCExIT09ci5lcnJvciYmZS5vbigiZXJyb3IiLHApLGUub24oImNsb3NlIixkKSxmdW5jdGlvbigpe2UucmVtb3ZlTGlzdGVuZXIoImNvbXBsZXRlIix1KSxlLnJlbW92ZUxpc3RlbmVyKCJhYm9ydCIsZCksZS5yZW1vdmVMaXN0ZW5lcigicmVxdWVzdCIsbSksZS5yZXEmJmUucmVxLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLHUpLGUucmVtb3ZlTGlzdGVuZXIoImVuZCIsbCksZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGwpLGUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsdSksZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixoKSxlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIscCksZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGQpfX19LHsiLi4vLi4vLi4vZXJyb3JzIjo1NDR9XSw1NTQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlYWRhYmxlLmZyb20gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnJvd3NlciIpfX0se31dLDU1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbjt2YXIgaT10KCIuLi8uLi8uLi9lcnJvcnMiKS5jb2RlcyxhPWkuRVJSX01JU1NJTkdfQVJHUyxvPWkuRVJSX1NUUkVBTV9ERVNUUk9ZRUQ7ZnVuY3Rpb24gcyh0KXtpZih0KXRocm93IHR9ZnVuY3Rpb24gbChlLHIsaSxhKXthPWZ1bmN0aW9uKHQpe3ZhciBlPSExO3JldHVybiBmdW5jdGlvbigpe2V8fChlPSEwLHQuYXBwbHkodm9pZCAwLGFyZ3VtZW50cykpfX0oYSk7dmFyIHM9ITE7ZS5vbigiY2xvc2UiLChmdW5jdGlvbigpe3M9ITB9KSksdm9pZCAwPT09biYmKG49dCgiLi9lbmQtb2Ytc3RyZWFtIikpLG4oZSx7cmVhZGFibGU6cix3cml0YWJsZTppfSwoZnVuY3Rpb24odCl7aWYodClyZXR1cm4gYSh0KTtzPSEwLGEoKX0pKTt2YXIgbD0hMTtyZXR1cm4gZnVuY3Rpb24odCl7aWYoIXMmJiFsKXJldHVybiBsPSEwLGZ1bmN0aW9uKHQpe3JldHVybiB0LnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIHQuYWJvcnR9KGUpP2UuYWJvcnQoKToiZnVuY3Rpb24iPT10eXBlb2YgZS5kZXN0cm95P2UuZGVzdHJveSgpOnZvaWQgYSh0fHxuZXcgbygicGlwZSIpKX19ZnVuY3Rpb24gYyh0KXt0KCl9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiB0LnBpcGUoZSl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gdC5sZW5ndGg/ImZ1bmN0aW9uIiE9dHlwZW9mIHRbdC5sZW5ndGgtMV0/czp0LnBvcCgpOnN9ZS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT1hcmd1bWVudHNbcl07dmFyIG4saT1mKGUpO2lmKEFycmF5LmlzQXJyYXkoZVswXSkmJihlPWVbMF0pLGUubGVuZ3RoPDIpdGhyb3cgbmV3IGEoInN0cmVhbXMiKTt2YXIgbz1lLm1hcCgoZnVuY3Rpb24odCxyKXt2YXIgYT1yPGUubGVuZ3RoLTE7cmV0dXJuIGwodCxhLHI+MCwoZnVuY3Rpb24odCl7bnx8KG49dCksdCYmby5mb3JFYWNoKGMpLGF8fChvLmZvckVhY2goYyksaShuKSl9KSl9KSk7cmV0dXJuIGUucmVkdWNlKHUpfX0seyIuLi8uLi8uLi9lcnJvcnMiOjU0NCwiLi9lbmQtb2Ytc3RyZWFtIjo1NTN9XSw1NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vZXJyb3JzIikuY29kZXMuRVJSX0lOVkFMSURfT1BUX1ZBTFVFO2UuZXhwb3J0cz17Z2V0SGlnaFdhdGVyTWFyazpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1mdW5jdGlvbih0LGUscil7cmV0dXJuIG51bGwhPXQuaGlnaFdhdGVyTWFyaz90LmhpZ2hXYXRlck1hcms6ZT90W3JdOm51bGx9KGUsaSxyKTtpZihudWxsIT1hKXtpZighaXNGaW5pdGUoYSl8fE1hdGguZmxvb3IoYSkhPT1hfHxhPDApdGhyb3cgbmV3IG4oaT9yOiJoaWdoV2F0ZXJNYXJrIixhKTtyZXR1cm4gTWF0aC5mbG9vcihhKX1yZXR1cm4gdC5vYmplY3RNb2RlPzE2OjE2Mzg0fX19LHsiLi4vLi4vLi4vZXJyb3JzIjo1NDR9XSw1NTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiZXZlbnRzIikuRXZlbnRFbWl0dGVyfSx7ZXZlbnRzOjIzN31dLDU1ODpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyLG4peyhmdW5jdGlvbigpe3ZhciByPXQoImFzc2VydCIpLGk9dCgiZGVidWciKSgic3RyZWFtLXBhcnNlciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5fdHJhbnNmb3JtLHI9dCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuX3dyaXRlO2lmKCFlJiYhcil0aHJvdyBuZXcgRXJyb3IoIm11c3QgcGFzcyBhIFdyaXRhYmxlIG9yIFRyYW5zZm9ybSBzdHJlYW0gaW4iKTtpKCJleHRlbmRpbmcgUGFyc2VyIGludG8gc3RyZWFtIiksdC5fYnl0ZXM9byx0Ll9za2lwQnl0ZXM9cyxlJiYodC5fcGFzc3Rocm91Z2g9bCk7ZT90Ll90cmFuc2Zvcm09dTp0Ll93cml0ZT1jfTtmdW5jdGlvbiBhKHQpe2koImluaXRpYWxpemluZyBwYXJzZXIgc3RyZWFtIiksdC5fcGFyc2VyQnl0ZXNMZWZ0PTAsdC5fcGFyc2VyQnVmZmVycz1bXSx0Ll9wYXJzZXJCdWZmZXJlZD0wLHQuX3BhcnNlclN0YXRlPS0xLHQuX3BhcnNlckNhbGxiYWNrPW51bGwsImZ1bmN0aW9uIj09dHlwZW9mIHQucHVzaCYmKHQuX3BhcnNlck91dHB1dD10LnB1c2guYmluZCh0KSksdC5fcGFyc2VySW5pdD0hMH1mdW5jdGlvbiBvKHQsZSl7cighdGhpcy5fcGFyc2VyQ2FsbGJhY2ssJ3RoZXJlIGlzIGFscmVhZHkgYSAiY2FsbGJhY2siIHNldCEnKSxyKGlzRmluaXRlKHQpJiZ0PjAsJ2NhbiBvbmx5IGJ1ZmZlciBhIGZpbml0ZSBudW1iZXIgb2YgYnl0ZXMgPiAwLCBnb3QgIicrdCsnIicpLHRoaXMuX3BhcnNlckluaXR8fGEodGhpcyksaSgiYnVmZmVyaW5nICVvIGJ5dGVzIix0KSx0aGlzLl9wYXJzZXJCeXRlc0xlZnQ9dCx0aGlzLl9wYXJzZXJDYWxsYmFjaz1lLHRoaXMuX3BhcnNlclN0YXRlPTB9ZnVuY3Rpb24gcyh0LGUpe3IoIXRoaXMuX3BhcnNlckNhbGxiYWNrLCd0aGVyZSBpcyBhbHJlYWR5IGEgImNhbGxiYWNrIiBzZXQhJykscih0PjAsJ2NhbiBvbmx5IHNraXAgPiAwIGJ5dGVzLCBnb3QgIicrdCsnIicpLHRoaXMuX3BhcnNlckluaXR8fGEodGhpcyksaSgic2tpcHBpbmcgJW8gYnl0ZXMiLHQpLHRoaXMuX3BhcnNlckJ5dGVzTGVmdD10LHRoaXMuX3BhcnNlckNhbGxiYWNrPWUsdGhpcy5fcGFyc2VyU3RhdGU9MX1mdW5jdGlvbiBsKHQsZSl7cighdGhpcy5fcGFyc2VyQ2FsbGJhY2ssJ1RoZXJlIGlzIGFscmVhZHkgYSAiY2FsbGJhY2siIHNldCEnKSxyKHQ+MCwnY2FuIG9ubHkgcGFzcyB0aHJvdWdoID4gMCBieXRlcywgZ290ICInK3QrJyInKSx0aGlzLl9wYXJzZXJJbml0fHxhKHRoaXMpLGkoInBhc3NpbmcgdGhyb3VnaCAlbyBieXRlcyIsdCksdGhpcy5fcGFyc2VyQnl0ZXNMZWZ0PXQsdGhpcy5fcGFyc2VyQ2FsbGJhY2s9ZSx0aGlzLl9wYXJzZXJTdGF0ZT0yfWZ1bmN0aW9uIGModCxlLHIpe3RoaXMuX3BhcnNlckluaXR8fGEodGhpcyksaSgid3JpdGUoJW8gYnl0ZXMpIix0Lmxlbmd0aCksImZ1bmN0aW9uIj09dHlwZW9mIGUmJihyPWUpLGgodGhpcyx0LG51bGwscil9ZnVuY3Rpb24gdSh0LGUscil7dGhpcy5fcGFyc2VySW5pdHx8YSh0aGlzKSxpKCJ0cmFuc2Zvcm0oJW8gYnl0ZXMpIix0Lmxlbmd0aCksImZ1bmN0aW9uIiE9dHlwZW9mIGUmJihlPXRoaXMuX3BhcnNlck91dHB1dCksaCh0aGlzLHQsZSxyKX1mdW5jdGlvbiBmKHQsZSxyLGEpe2lmKHQuX3BhcnNlckJ5dGVzTGVmdC09ZS5sZW5ndGgsaSgiJW8gYnl0ZXMgbGVmdCBmb3Igc3RyZWFtIHBpZWNlIix0Ll9wYXJzZXJCeXRlc0xlZnQpLDA9PT10Ll9wYXJzZXJTdGF0ZT8odC5fcGFyc2VyQnVmZmVycy5wdXNoKGUpLHQuX3BhcnNlckJ1ZmZlcmVkKz1lLmxlbmd0aCk6Mj09PXQuX3BhcnNlclN0YXRlJiZyKGUpLDAhPT10Ll9wYXJzZXJCeXRlc0xlZnQpcmV0dXJuIGE7dmFyIG89dC5fcGFyc2VyQ2FsbGJhY2s7aWYobyYmMD09PXQuX3BhcnNlclN0YXRlJiZ0Ll9wYXJzZXJCdWZmZXJzLmxlbmd0aD4xJiYoZT1uLmNvbmNhdCh0Ll9wYXJzZXJCdWZmZXJzLHQuX3BhcnNlckJ1ZmZlcmVkKSksMCE9PXQuX3BhcnNlclN0YXRlJiYoZT1udWxsKSx0Ll9wYXJzZXJDYWxsYmFjaz1udWxsLHQuX3BhcnNlckJ1ZmZlcmVkPTAsdC5fcGFyc2VyU3RhdGU9LTEsdC5fcGFyc2VyQnVmZmVycy5zcGxpY2UoMCksbyl7dmFyIHM9W107ZSYmcy5wdXNoKGUpLHImJnMucHVzaChyKTt2YXIgbD1vLmxlbmd0aD5zLmxlbmd0aDtsJiZzLnB1c2gocChhKSk7dmFyIGM9by5hcHBseSh0LHMpO2lmKCFsfHxhPT09YylyZXR1cm4gYX19dmFyIGg9cCgoZnVuY3Rpb24gdChlLHIsbixpKXtyZXR1cm4gZS5fcGFyc2VyQnl0ZXNMZWZ0PD0wP2kobmV3IEVycm9yKCJnb3QgZGF0YSBidXQgbm90IGN1cnJlbnRseSBwYXJzaW5nIGFueXRoaW5nIikpOnIubGVuZ3RoPD1lLl9wYXJzZXJCeXRlc0xlZnQ/ZnVuY3Rpb24oKXtyZXR1cm4gZihlLHIsbixpKX06ZnVuY3Rpb24oKXt2YXIgYT1yLnNsaWNlKDAsZS5fcGFyc2VyQnl0ZXNMZWZ0KTtyZXR1cm4gZihlLGEsbiwoZnVuY3Rpb24obyl7cmV0dXJuIG8/aShvKTpyLmxlbmd0aD5hLmxlbmd0aD9mdW5jdGlvbigpe3JldHVybiB0KGUsci5zbGljZShhLmxlbmd0aCksbixpKX06dm9pZCAwfSkpfX0pKTtmdW5jdGlvbiBwKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTsiZnVuY3Rpb24iPT10eXBlb2YgZTspZT1lKCk7cmV0dXJuIGV9fX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSx0KCJidWZmZXIiKS5CdWZmZXIpfSx7X3Byb2Nlc3M6NTA0LGFzc2VydDo3NixidWZmZXI6MTEyLGRlYnVnOjU1OX1dLDU1OTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihuKXsoZnVuY3Rpb24oKXtmdW5jdGlvbiBpKCl7dmFyIHQ7dHJ5e3Q9ci5zdG9yYWdlLmRlYnVnfWNhdGNoKHQpe31yZXR1cm4hdCYmdm9pZCAwIT09biYmImVudiJpbiBuJiYodD1uLmVudi5ERUJVRyksdH0ocj1lLmV4cG9ydHM9dCgiLi9kZWJ1ZyIpKS5sb2c9ZnVuY3Rpb24oKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUubG9nJiZGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlLmxvZyxjb25zb2xlLGFyZ3VtZW50cyl9LHIuZm9ybWF0QXJncz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnVzZUNvbG9ycztpZih0WzBdPShlPyIlYyI6IiIpK3RoaXMubmFtZXNwYWNlKyhlPyIgJWMiOiIgIikrdFswXSsoZT8iJWMgIjoiICIpKyIrIityLmh1bWFuaXplKHRoaXMuZGlmZiksIWUpcmV0dXJuO3ZhciBuPSJjb2xvcjogIit0aGlzLmNvbG9yO3Quc3BsaWNlKDEsMCxuLCJjb2xvcjogaW5oZXJpdCIpO3ZhciBpPTAsYT0wO3RbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLChmdW5jdGlvbih0KXsiJSUiIT09dCYmKGkrKywiJWMiPT09dCYmKGE9aSkpfSkpLHQuc3BsaWNlKGEsMCxuKX0sci5zYXZlPWZ1bmN0aW9uKHQpe3RyeXtudWxsPT10P3Iuc3RvcmFnZS5yZW1vdmVJdGVtKCJkZWJ1ZyIpOnIuc3RvcmFnZS5kZWJ1Zz10fWNhdGNoKHQpe319LHIubG9hZD1pLHIudXNlQ29sb3JzPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5wcm9jZXNzJiYicmVuZGVyZXIiPT09d2luZG93LnByb2Nlc3MudHlwZSlyZXR1cm4hMDtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2V8fCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuY29uc29sZSYmKHdpbmRvdy5jb25zb2xlLmZpcmVidWd8fHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiYmd2luZG93LmNvbnNvbGUudGFibGUpfHwidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLnVzZXJBZ2VudCYmbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XC8oXGQrKS8pJiZwYXJzZUludChSZWdFeHAuJDEsMTApPj0zMXx8InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci51c2VyQWdlbnQmJm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcLyhcZCspLyl9LHIuc3RvcmFnZT0idW5kZWZpbmVkIiE9dHlwZW9mIGNocm9tZSYmdm9pZCAwIT09Y2hyb21lLnN0b3JhZ2U/Y2hyb21lLnN0b3JhZ2UubG9jYWw6ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2V9Y2F0Y2godCl7fX0oKSxyLmNvbG9ycz1bImxpZ2h0c2VhZ3JlZW4iLCJmb3Jlc3RncmVlbiIsImdvbGRlbnJvZCIsImRvZGdlcmJsdWUiLCJkYXJrb3JjaGlkIiwiY3JpbXNvbiJdLHIuZm9ybWF0dGVycy5qPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCl9Y2F0Y2godCl7cmV0dXJuIltVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAiK3QubWVzc2FnZX19LHIuZW5hYmxlKGkoKSl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7Ii4vZGVidWciOjU2MCxfcHJvY2Vzczo1MDR9XSw1NjA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtmdW5jdGlvbiBpKHQpe2Z1bmN0aW9uIGUoKXtpZihlLmVuYWJsZWQpe3ZhciB0PWUsaT0rbmV3IERhdGUsYT1pLShufHxpKTt0LmRpZmY9YSx0LnByZXY9bix0LmN1cnI9aSxuPWk7Zm9yKHZhciBvPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxzPTA7czxvLmxlbmd0aDtzKyspb1tzXT1hcmd1bWVudHNbc107b1swXT1yLmNvZXJjZShvWzBdKSwic3RyaW5nIiE9dHlwZW9mIG9bMF0mJm8udW5zaGlmdCgiJU8iKTt2YXIgbD0wO29bMF09b1swXS5yZXBsYWNlKC8lKFthLXpBLVolXSkvZywoZnVuY3Rpb24oZSxuKXtpZigiJSUiPT09ZSlyZXR1cm4gZTtsKys7dmFyIGk9ci5mb3JtYXR0ZXJzW25dO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBpKXt2YXIgYT1vW2xdO2U9aS5jYWxsKHQsYSksby5zcGxpY2UobCwxKSxsLS19cmV0dXJuIGV9KSksci5mb3JtYXRBcmdzLmNhbGwodCxvKTt2YXIgYz1lLmxvZ3x8ci5sb2d8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSk7Yy5hcHBseSh0LG8pfX1yZXR1cm4gZS5uYW1lc3BhY2U9dCxlLmVuYWJsZWQ9ci5lbmFibGVkKHQpLGUudXNlQ29sb3JzPXIudXNlQ29sb3JzKCksZS5jb2xvcj1mdW5jdGlvbih0KXt2YXIgZSxuPTA7Zm9yKGUgaW4gdCluPShuPDw1KS1uK3QuY2hhckNvZGVBdChlKSxufD0wO3JldHVybiByLmNvbG9yc1tNYXRoLmFicyhuKSVyLmNvbG9ycy5sZW5ndGhdfSh0KSwiZnVuY3Rpb24iPT10eXBlb2Ygci5pbml0JiZyLmluaXQoZSksZX0ocj1lLmV4cG9ydHM9aS5kZWJ1Zz1pLmRlZmF1bHQ9aSkuY29lcmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRXJyb3I/dC5zdGFja3x8dC5tZXNzYWdlOnR9LHIuZGlzYWJsZT1mdW5jdGlvbigpe3IuZW5hYmxlKCIiKX0sci5lbmFibGU9ZnVuY3Rpb24odCl7ci5zYXZlKHQpLHIubmFtZXM9W10sci5za2lwcz1bXTtmb3IodmFyIGU9KCJzdHJpbmciPT10eXBlb2YgdD90OiIiKS5zcGxpdCgvW1xzLF0rLyksbj1lLmxlbmd0aCxpPTA7aTxuO2krKyllW2ldJiYoIi0iPT09KHQ9ZVtpXS5yZXBsYWNlKC9cKi9nLCIuKj8iKSlbMF0/ci5za2lwcy5wdXNoKG5ldyBSZWdFeHAoIl4iK3Quc3Vic3RyKDEpKyIkIikpOnIubmFtZXMucHVzaChuZXcgUmVnRXhwKCJeIit0KyIkIikpKX0sci5lbmFibGVkPWZ1bmN0aW9uKHQpe3ZhciBlLG47Zm9yKGU9MCxuPXIuc2tpcHMubGVuZ3RoO2U8bjtlKyspaWYoci5za2lwc1tlXS50ZXN0KHQpKXJldHVybiExO2ZvcihlPTAsbj1yLm5hbWVzLmxlbmd0aDtlPG47ZSsrKWlmKHIubmFtZXNbZV0udGVzdCh0KSlyZXR1cm4hMDtyZXR1cm4hMX0sci5odW1hbml6ZT10KCJtcyIpLHIubmFtZXM9W10sci5za2lwcz1bXSxyLmZvcm1hdHRlcnM9e319LHttczo1NjF9XSw1NjE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj0xZTMsaT02ZTQsYT02MCppLG89MjQqYTtmdW5jdGlvbiBzKHQsZSxyKXtpZighKHQ8ZSkpcmV0dXJuIHQ8MS41KmU/TWF0aC5mbG9vcih0L2UpKyIgIityOk1hdGguY2VpbCh0L2UpKyIgIityKyJzIn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByLGw9dHlwZW9mIHQ7aWYoInN0cmluZyI9PT1sJiZ0Lmxlbmd0aD4wKXJldHVybiBmdW5jdGlvbih0KXtpZigodD1TdHJpbmcodCkpLmxlbmd0aD4xMDApcmV0dXJuO3ZhciBlPS9eKCg/OlxkKyk/XC4/XGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWModCk7aWYoIWUpcmV0dXJuO3ZhciByPXBhcnNlRmxvYXQoZVsxXSk7c3dpdGNoKChlWzJdfHwibXMiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInllYXJzIjpjYXNlInllYXIiOmNhc2UieXJzIjpjYXNlInlyIjpjYXNlInkiOnJldHVybiAzMTU1NzZlNSpyO2Nhc2UiZGF5cyI6Y2FzZSJkYXkiOmNhc2UiZCI6cmV0dXJuIHIqbztjYXNlImhvdXJzIjpjYXNlImhvdXIiOmNhc2UiaHJzIjpjYXNlImhyIjpjYXNlImgiOnJldHVybiByKmE7Y2FzZSJtaW51dGVzIjpjYXNlIm1pbnV0ZSI6Y2FzZSJtaW5zIjpjYXNlIm1pbiI6Y2FzZSJtIjpyZXR1cm4gcippO2Nhc2Uic2Vjb25kcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2VjcyI6Y2FzZSJzZWMiOmNhc2UicyI6cmV0dXJuIHIqbjtjYXNlIm1pbGxpc2Vjb25kcyI6Y2FzZSJtaWxsaXNlY29uZCI6Y2FzZSJtc2VjcyI6Y2FzZSJtc2VjIjpjYXNlIm1zIjpyZXR1cm4gcjtkZWZhdWx0OnJldHVybn19KHQpO2lmKCJudW1iZXIiPT09bCYmITE9PT1pc05hTih0KSlyZXR1cm4gZS5sb25nP3Mocj10LG8sImRheSIpfHxzKHIsYSwiaG91ciIpfHxzKHIsaSwibWludXRlIil8fHMocixuLCJzZWNvbmQiKXx8cisiIG1zIjpmdW5jdGlvbih0KXtpZih0Pj1vKXJldHVybiBNYXRoLnJvdW5kKHQvbykrImQiO2lmKHQ+PWEpcmV0dXJuIE1hdGgucm91bmQodC9hKSsiaCI7aWYodD49aSlyZXR1cm4gTWF0aC5yb3VuZCh0L2kpKyJtIjtpZih0Pj1uKXJldHVybiBNYXRoLnJvdW5kKHQvbikrInMiO3JldHVybiB0KyJtcyJ9KHQpO3Rocm93IG5ldyBFcnJvcigidmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0iK0pTT04uc3RyaW5naWZ5KHQpKX19LHt9XSw1NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGFyZW50aGVzaXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKG51bGw9PXQpdGhyb3cgRXJyb3IoIkZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhIHN0cmluZyIpO2lmKG51bGw9PWUpdGhyb3cgRXJyb3IoIlNlcGFyYXRvciBzaG91bGQgYmUgYSBzdHJpbmcgb3IgYSBSZWdFeHAiKTtyPygic3RyaW5nIj09dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocikpJiYocj17aWdub3JlOnJ9KTpyPXt9LG51bGw9PXIuZXNjYXBlJiYoci5lc2NhcGU9ITApLG51bGw9PXIuaWdub3JlP3IuaWdub3JlPVsiW10iLCIoKSIsInt9IiwiPD4iLCciIicsIicnIiwiYGAiLCJcdTIwMWNcdTIwMWQiLCJceGFiXHhiYiJdOigic3RyaW5nIj09dHlwZW9mIHIuaWdub3JlJiYoci5pZ25vcmU9W3IuaWdub3JlXSksci5pZ25vcmU9ci5pZ25vcmUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RoJiYodCs9dCksdH0pKSk7dmFyIGk9bi5wYXJzZSh0LHtmbGF0OiEwLGJyYWNrZXRzOnIuaWdub3JlfSksYT1pWzBdLnNwbGl0KGUpO2lmKHIuZXNjYXBlKXtmb3IodmFyIG89W10scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLGM9YVtzKzFdOyJcXCI9PT1sW2wubGVuZ3RoLTFdJiYiXFwiIT09bFtsLmxlbmd0aC0yXT8oby5wdXNoKGwrZStjKSxzKyspOm8ucHVzaChsKX1hPW99Zm9yKHM9MDtzPGEubGVuZ3RoO3MrKylpWzBdPWFbc10sYVtzXT1uLnN0cmluZ2lmeShpLHtmbGF0OiEwfSk7cmV0dXJuIGF9fSx7cGFyZW50aGVzaXM6NDcwfV0sNTYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInNhZmUtYnVmZmVyIikuQnVmZmVyLGk9bi5pc0VuY29kaW5nfHxmdW5jdGlvbih0KXtzd2l0Y2goKHQ9IiIrdCkmJnQudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5jdGlvbiBhKHQpe3ZhciBlO3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiJ1dGY4Ijtmb3IodmFyIGU7Oylzd2l0Y2godCl7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIHQ7ZGVmYXVsdDppZihlKXJldHVybjt0PSgiIit0KS50b0xvd2VyQ2FzZSgpLGU9ITB9fSh0KTtpZigic3RyaW5nIiE9dHlwZW9mIGUmJihuLmlzRW5jb2Rpbmc9PT1pfHwhaSh0KSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3QpO3JldHVybiBlfHx0fSh0KSx0aGlzLmVuY29kaW5nKXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD1sLHRoaXMuZW5kPWMsZT00O2JyZWFrO2Nhc2UidXRmOCI6dGhpcy5maWxsTGFzdD1zLGU9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PXUsdGhpcy5lbmQ9ZixlPTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT1oLHZvaWQodGhpcy5lbmQ9cCl9dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj1uLmFsbG9jVW5zYWZlKGUpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ8PTEyNz8wOnQ+PjU9PTY/Mjp0Pj40PT0xND8zOnQ+PjM9PTMwPzQ6dD4+Nj09Mj8tMTotMn1mdW5jdGlvbiBzKHQpe3ZhciBlPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQscj1mdW5jdGlvbih0LGUscil7aWYoMTI4IT0oMTkyJmVbMF0pKXJldHVybiB0Lmxhc3ROZWVkPTAsIlx1ZmZmZCI7aWYodC5sYXN0TmVlZD4xJiZlLmxlbmd0aD4xKXtpZigxMjghPSgxOTImZVsxXSkpcmV0dXJuIHQubGFzdE5lZWQ9MSwiXHVmZmZkIjtpZih0Lmxhc3ROZWVkPjImJmUubGVuZ3RoPjImJjEyOCE9KDE5MiZlWzJdKSlyZXR1cm4gdC5sYXN0TmVlZD0yLCJcdWZmZmQifX0odGhpcyx0KTtyZXR1cm4gdm9pZCAwIT09cj9yOnRoaXMubGFzdE5lZWQ8PXQubGVuZ3RoPyh0LmNvcHkodGhpcy5sYXN0Q2hhcixlLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKToodC5jb3B5KHRoaXMubGFzdENoYXIsZSwwLHQubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPXQubGVuZ3RoKSl9ZnVuY3Rpb24gbCh0LGUpe2lmKCh0Lmxlbmd0aC1lKSUyPT0wKXt2YXIgcj10LnRvU3RyaW5nKCJ1dGYxNmxlIixlKTtpZihyKXt2YXIgbj1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSk7aWYobj49NTUyOTYmJm48PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPXRbdC5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT10W3QubGVuZ3RoLTFdLHIuc2xpY2UoMCwtMSl9cmV0dXJuIHJ9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09dFt0Lmxlbmd0aC0xXSx0LnRvU3RyaW5nKCJ1dGYxNmxlIixlLHQubGVuZ3RoLTEpfWZ1bmN0aW9uIGModCl7dmFyIGU9dCYmdC5sZW5ndGg/dGhpcy53cml0ZSh0KToiIjtpZih0aGlzLmxhc3ROZWVkKXt2YXIgcj10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkO3JldHVybiBlK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUiLDAscil9cmV0dXJuIGV9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPSh0Lmxlbmd0aC1lKSUzO3JldHVybiAwPT09cj90LnRvU3RyaW5nKCJiYXNlNjQiLGUpOih0aGlzLmxhc3ROZWVkPTMtcix0aGlzLmxhc3RUb3RhbD0zLDE9PT1yP3RoaXMubGFzdENoYXJbMF09dFt0Lmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT10W3QubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09dFt0Lmxlbmd0aC0xXSksdC50b1N0cmluZygiYmFzZTY0IixlLHQubGVuZ3RoLXIpKX1mdW5jdGlvbiBmKHQpe3ZhciBlPXQmJnQubGVuZ3RoP3RoaXMud3JpdGUodCk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/ZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTplfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/dGhpcy53cml0ZSh0KToiIn1yLlN0cmluZ0RlY29kZXI9YSxhLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIiI7dmFyIGUscjtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0oZT10aGlzLmZpbGxMYXN0KHQpKSlyZXR1cm4iIjtyPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2Ugcj0wO3JldHVybiByPHQubGVuZ3RoP2U/ZSt0aGlzLnRleHQodCxyKTp0aGlzLnRleHQodCxyKTplfHwiIn0sYS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXQmJnQubGVuZ3RoP3RoaXMud3JpdGUodCk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/ZSsiXHVmZmZkIjplfSxhLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUubGVuZ3RoLTE7aWYobjxyKXJldHVybiAwO3ZhciBpPW8oZVtuXSk7aWYoaT49MClyZXR1cm4gaT4wJiYodC5sYXN0TmVlZD1pLTEpLGk7aWYoLS1uPHJ8fC0yPT09aSlyZXR1cm4gMDtpZigoaT1vKGVbbl0pKT49MClyZXR1cm4gaT4wJiYodC5sYXN0TmVlZD1pLTIpLGk7aWYoLS1uPHJ8fC0yPT09aSlyZXR1cm4gMDtpZigoaT1vKGVbbl0pKT49MClyZXR1cm4gaT4wJiYoMj09PWk/aT0wOnQubGFzdE5lZWQ9aS0zKSxpO3JldHVybiAwfSh0aGlzLHQsZSk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIHQudG9TdHJpbmcoInV0ZjgiLGUpO3RoaXMubGFzdFRvdGFsPXI7dmFyIG49dC5sZW5ndGgtKHItdGhpcy5sYXN0TmVlZCk7cmV0dXJuIHQuY29weSh0aGlzLmxhc3RDaGFyLDAsbiksdC50b1N0cmluZygidXRmOCIsZSxuKX0sYS5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24odCl7aWYodGhpcy5sYXN0TmVlZDw9dC5sZW5ndGgpcmV0dXJuIHQuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7dC5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHQubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT10Lmxlbmd0aH19LHsic2FmZS1idWZmZXIiOjUzMH1dLDU2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49bmV3IEFycmF5KGUpLGk9bmV3IEFycmF5KGUpLGE9bmV3IEFycmF5KGUpLG89bmV3IEFycmF5KGUpLHM9bmV3IEFycmF5KGUpLGw9MDtsPGU7KytsKXJbbF09LTEsbltsXT0wLGlbbF09ITEsYVtsXT0wLG9bbF09LTEsc1tsXT1bXTt2YXIgYyx1PTAsZj1bXSxoPVtdO2Z1bmN0aW9uIHAoZSl7dmFyIGw9W2VdLGM9W2VdO2ZvcihyW2VdPW5bZV09dSxpW2VdPSEwLHUrPTE7Yy5sZW5ndGg+MDspe2U9Y1tjLmxlbmd0aC0xXTt2YXIgcD10W2VdO2lmKGFbZV08cC5sZW5ndGgpe2Zvcih2YXIgZD1hW2VdO2Q8cC5sZW5ndGg7KytkKXt2YXIgbT1wW2RdO2lmKHJbbV08MCl7clttXT1uW21dPXUsaVttXT0hMCx1Kz0xLGwucHVzaChtKSxjLnB1c2gobSk7YnJlYWt9aVttXSYmKG5bZV09MHxNYXRoLm1pbihuW2VdLG5bbV0pKSxvW21dPj0wJiZzW2VdLnB1c2gob1ttXSl9YVtlXT1kfWVsc2V7aWYobltlXT09PXJbZV0pe3ZhciBnPVtdLHY9W10seT0wO2ZvcihkPWwubGVuZ3RoLTE7ZD49MDstLWQpe3ZhciB4PWxbZF07aWYoaVt4XT0hMSxnLnB1c2goeCksdi5wdXNoKHNbeF0pLHkrPXNbeF0ubGVuZ3RoLG9beF09Zi5sZW5ndGgseD09PWUpe2wubGVuZ3RoPWQ7YnJlYWt9fWYucHVzaChnKTt2YXIgYj1uZXcgQXJyYXkoeSk7Zm9yKGQ9MDtkPHYubGVuZ3RoO2QrKylmb3IodmFyIF89MDtfPHZbZF0ubGVuZ3RoO18rKyliWy0teV09dltkXVtfXTtoLnB1c2goYil9Yy5wb3AoKX19fWZvcihsPTA7bDxlOysrbClyW2xdPDAmJnAobCk7Zm9yKGw9MDtsPGgubGVuZ3RoO2wrKyl7dmFyIGQ9aFtsXTtpZigwIT09ZC5sZW5ndGgpe2Quc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpLGM9W2RbMF1dO2Zvcih2YXIgbT0xO208ZC5sZW5ndGg7bSsrKWRbbV0hPT1kW20tMV0mJmMucHVzaChkW21dKTtoW2xdPWN9fXJldHVybntjb21wb25lbnRzOmYsYWRqYWNlbmN5TGlzdDpofX19LHt9XSw1NjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodC5kaW1lbnNpb248PTApcmV0dXJue3Bvc2l0aW9uczpbXSxjZWxsczpbXX07aWYoMT09PXQuZGltZW5zaW9uKXJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1pKHQsZSksbj1yLmxlbmd0aCxhPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxzPTA7czxuOysrcylhW3NdPVtyW3NdXSxvW3NdPVtzXTtyZXR1cm57cG9zaXRpb25zOmEsY2VsbHM6b319KHQsZSk7dmFyIHI9dC5vcmRlci5qb2luKCkrIi0iK3QuZHR5cGUscz1vW3JdO2U9K2V8fDA7c3x8KHM9b1tyXT1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoKyJkIixpPWFbcl07aWYoaSlyZXR1cm4gaShuLHQsZSl9KHQub3JkZXIsdC5kdHlwZSkpO3JldHVybiBzKHQsZSl9O3ZhciBuPXQoIm5kYXJyYXktZXh0cmFjdC1jb250b3VyIiksaT10KCJ6ZXJvLWNyb3NzaW5ncyIpLGE9eyIyZCI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoe29yZGVyOmUsc2NhbGFyQXJndW1lbnRzOjMsZ2V0dGVyczoiZ2VuZXJpYyI9PT1yP1swXTp2b2lkIDAscGhhc2U6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHQ+bnwwfSx2ZXJ0ZXg6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCl7dmFyIHA9KG88PDApKyhzPDwxKSsobDw8MikrKGM8PDMpfDA7aWYoMCE9PXAmJjE1IT09cClzd2l0Y2gocCl7Y2FzZSAwOnUucHVzaChbdC0uNSxlLS41XSk7YnJlYWs7Y2FzZSAxOnUucHVzaChbdC0uMjUtLjI1KihuK3ItMipoKS8oci1uKSxlLS4yNS0uMjUqKGkrci0yKmgpLyhyLWkpXSk7YnJlYWs7Y2FzZSAyOnUucHVzaChbdC0uNzUtLjI1Kigtbi1yKzIqaCkvKG4tciksZS0uMjUtLjI1KihhK24tMipoKS8obi1hKV0pO2JyZWFrO2Nhc2UgMzp1LnB1c2goW3QtLjUsZS0uNS0uNSooaStyK2Erbi00KmgpLyhyLWkrbi1hKV0pO2JyZWFrO2Nhc2UgNDp1LnB1c2goW3QtLjI1LS4yNSooYStpLTIqaCkvKGktYSksZS0uNzUtLjI1KigtaS1yKzIqaCkvKGktcildKTticmVhaztjYXNlIDU6dS5wdXNoKFt0LS41LS41KihuK3IrYStpLTQqaCkvKHItbitpLWEpLGUtLjVdKTticmVhaztjYXNlIDY6dS5wdXNoKFt0LS41LS4yNSooLW4tcithK2kpLyhuLXIraS1hKSxlLS41LS4yNSooLWktcithK24pLyhpLXIrbi1hKV0pO2JyZWFrO2Nhc2UgNzp1LnB1c2goW3QtLjc1LS4yNSooYStpLTIqaCkvKGktYSksZS0uNzUtLjI1KihhK24tMipoKS8obi1hKV0pO2JyZWFrO2Nhc2UgODp1LnB1c2goW3QtLjc1LS4yNSooLWEtaSsyKmgpLyhhLWkpLGUtLjc1LS4yNSooLWEtbisyKmgpLyhhLW4pXSk7YnJlYWs7Y2FzZSA5OnUucHVzaChbdC0uNS0uMjUqKG4rcistYS1pKS8oci1uK2EtaSksZS0uNS0uMjUqKGkrcistYS1uKS8oci1pK2EtbildKTticmVhaztjYXNlIDEwOnUucHVzaChbdC0uNS0uNSooLW4tci1hLWkrNCpoKS8obi1yK2EtaSksZS0uNV0pO2JyZWFrO2Nhc2UgMTE6dS5wdXNoKFt0LS4yNS0uMjUqKC1hLWkrMipoKS8oYS1pKSxlLS43NS0uMjUqKGkrci0yKmgpLyhyLWkpXSk7YnJlYWs7Y2FzZSAxMjp1LnB1c2goW3QtLjUsZS0uNS0uNSooLWktci1hLW4rNCpoKS8oaS1yK2EtbildKTticmVhaztjYXNlIDEzOnUucHVzaChbdC0uNzUtLjI1KihuK3ItMipoKS8oci1uKSxlLS4yNS0uMjUqKC1hLW4rMipoKS8oYS1uKV0pO2JyZWFrO2Nhc2UgMTQ6dS5wdXNoKFt0LS4yNS0uMjUqKC1uLXIrMipoKS8obi1yKSxlLS4yNS0uMjUqKC1pLXIrMipoKS8oaS1yKV0pO2JyZWFrO2Nhc2UgMTU6dS5wdXNoKFt0LS41LGUtLjVdKX19LGNlbGw6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwpe2k/cy5wdXNoKFt0LGVdKTpzLnB1c2goW2UsdF0pfX0pO3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPVtdLGk9W107cmV0dXJuIG4odCxyLGksZSkse3Bvc2l0aW9uczpyLGNlbGxzOml9fX19O3ZhciBvPXt9fSx7Im5kYXJyYXktZXh0cmFjdC1jb250b3VyIjo0NTQsInplcm8tY3Jvc3NpbmdzIjo2MjB9XSw1NjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdDtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPVtdLG49ITAsaT0hMSxhPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHM9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChvLnZhbHVlKSwhZXx8ci5sZW5ndGghPT1lKTtuPSEwKTt9Y2F0Y2godCl7aT0hMCxhPXR9ZmluYWxseXt0cnl7IW4mJnMucmV0dXJuJiZzLnJldHVybigpfWZpbmFsbHl7aWYoaSl0aHJvdyBhfX1yZXR1cm4gcn0odCxlKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9LGk9MipNYXRoLlBJLGE9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9dC54LGw9dC55O3JldHVybnt4Om4qKHMqPWUpLWkqKGwqPXIpK2EseTppKnMrbipsK299fSxvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MS41NzA3OTYzMjY3OTQ4OTY2PT09ZT8uNTUxOTE1MDI0NDk0Oi0xLjU3MDc5NjMyNjc5NDg5NjY9PT1lPy0uNTUxOTE1MDI0NDk0OjQvMypNYXRoLnRhbihlLzQpLG49TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KSxhPU1hdGguY29zKHQrZSksbz1NYXRoLnNpbih0K2UpO3JldHVyblt7eDpuLWkqcix5OmkrbipyfSx7eDphK28qcix5Om8tYSpyfSx7eDphLHk6b31dfSxzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQqcitlKm47cmV0dXJuIGk+MSYmKGk9MSksaTwtMSYmKGk9LTEpLCh0Km4tZSpyPDA/LTE6MSkqTWF0aC5hY29zKGkpfTtyLmRlZmF1bHQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5weCxyPXQucHksbD10LmN4LGM9dC5jeSx1PXQucngsZj10LnJ5LGg9dC54QXhpc1JvdGF0aW9uLHA9dm9pZCAwPT09aD8wOmgsZD10LmxhcmdlQXJjRmxhZyxtPXZvaWQgMD09PWQ/MDpkLGc9dC5zd2VlcEZsYWcsdj12b2lkIDA9PT1nPzA6Zyx5PVtdO2lmKDA9PT11fHwwPT09ZilyZXR1cm5bXTt2YXIgeD1NYXRoLnNpbihwKmkvMzYwKSxiPU1hdGguY29zKHAqaS8zNjApLF89YiooZS1sKS8yK3gqKHItYykvMix3PS14KihlLWwpLzIrYiooci1jKS8yO2lmKDA9PT1fJiYwPT09dylyZXR1cm5bXTt1PU1hdGguYWJzKHUpLGY9TWF0aC5hYnMoZik7dmFyIFQ9TWF0aC5wb3coXywyKS9NYXRoLnBvdyh1LDIpK01hdGgucG93KHcsMikvTWF0aC5wb3coZiwyKTtUPjEmJih1Kj1NYXRoLnNxcnQoVCksZio9TWF0aC5zcXJ0KFQpKTt2YXIgaz1mdW5jdGlvbih0LGUscixuLGEsbyxsLGMsdSxmLGgscCl7dmFyIGQ9TWF0aC5wb3coYSwyKSxtPU1hdGgucG93KG8sMiksZz1NYXRoLnBvdyhoLDIpLHY9TWF0aC5wb3cocCwyKSx5PWQqbS1kKnYtbSpnO3k8MCYmKHk9MCkseS89ZCp2K20qZzt2YXIgeD0oeT1NYXRoLnNxcnQoeSkqKGw9PT1jPy0xOjEpKSphL28qcCxiPXkqLW8vYSpoLF89Zip4LXUqYisodCtyKS8yLHc9dSp4K2YqYisoZStuKS8yLFQ9KGgteCkvYSxrPShwLWIpL28sQT0oLWgteCkvYSxNPSgtcC1iKS9vLFM9cygxLDAsVCxrKSxFPXMoVCxrLEEsTSk7cmV0dXJuIDA9PT1jJiZFPjAmJihFLT1pKSwxPT09YyYmRTwwJiYoRSs9aSksW18sdyxTLEVdfShlLHIsbCxjLHUsZixtLHYseCxiLF8sdyksQT1uKGssNCksTT1BWzBdLFM9QVsxXSxFPUFbMl0sTD1BWzNdLEM9TWF0aC5hYnMoTCkvKGkvNCk7TWF0aC5hYnMoMS1DKTwxZS03JiYoQz0xKTt2YXIgUD1NYXRoLm1heChNYXRoLmNlaWwoQyksMSk7TC89UDtmb3IodmFyIEk9MDtJPFA7SSsrKXkucHVzaChvKEUsTCkpLEUrPUw7cmV0dXJuIHkubWFwKChmdW5jdGlvbih0KXt2YXIgZT1hKHRbMF0sdSxmLGIseCxNLFMpLHI9ZS54LG49ZS55LGk9YSh0WzFdLHUsZixiLHgsTSxTKSxvPWkueCxzPWkueSxsPWEodFsyXSx1LGYsYix4LE0sUyk7cmV0dXJue3gxOnIseTE6bix4MjpvLHkyOnMseDpsLngseTpsLnl9fSkpfSxlLmV4cG9ydHM9ci5kZWZhdWx0fSx7fV0sNTY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBhcnNlLXN2Zy1wYXRoIiksaT10KCJhYnMtc3ZnLXBhdGgiKSxhPXQoIm5vcm1hbGl6ZS1zdmctcGF0aCIpLG89dCgiaXMtc3ZnLXBhdGgiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7QXJyYXkuaXNBcnJheSh0KSYmMT09PXQubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mIHRbMF0mJih0PXRbMF0pO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYoIW8odCkpdGhyb3cgRXJyb3IoIlN0cmluZyBpcyBub3QgYW4gU1ZHIHBhdGguIik7dD1uKHQpfWlmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IEVycm9yKCJBcmd1bWVudCBzaG91bGQgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4iKTtpZih0PWkodCksISh0PWEodCkpLmxlbmd0aClyZXR1cm5bMCwwLDAsMF07Zm9yKHZhciBlPVsxLzAsMS8wLC0xLzAsLTEvMF0scj0wLHM9dC5sZW5ndGg7cjxzO3IrKylmb3IodmFyIGw9dFtyXS5zbGljZSgxKSxjPTA7YzxsLmxlbmd0aDtjKz0yKWxbYyswXTxlWzBdJiYoZVswXT1sW2MrMF0pLGxbYysxXTxlWzFdJiYoZVsxXT1sW2MrMV0pLGxbYyswXT5lWzJdJiYoZVsyXT1sW2MrMF0pLGxbYysxXT5lWzNdJiYoZVszXT1sW2MrMV0pO3JldHVybiBlfX0seyJhYnMtc3ZnLXBhdGgiOjY3LCJpcy1zdmctcGF0aCI6NDM5LCJub3JtYWxpemUtc3ZnLXBhdGgiOjU2OCwicGFyc2Utc3ZnLXBhdGgiOjQ3Mn1dLDU2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9W10sbz0wLHM9MCxsPTAsYz0wLHU9bnVsbCxmPW51bGwsaD0wLHA9MCxkPTAsbT10Lmxlbmd0aDtkPG07ZCsrKXt2YXIgZz10W2RdLHY9Z1swXTtzd2l0Y2godil7Y2FzZSJNIjpsPWdbMV0sYz1nWzJdO2JyZWFrO2Nhc2UiQSI6dmFyIHk9bih7cHg6aCxweTpwLGN4OmdbNl0sY3k6Z1s3XSxyeDpnWzFdLHJ5OmdbMl0seEF4aXNSb3RhdGlvbjpnWzNdLGxhcmdlQXJjRmxhZzpnWzRdLHN3ZWVwRmxhZzpnWzVdfSk7aWYoIXkubGVuZ3RoKWNvbnRpbnVlO2Zvcih2YXIgeCxiPTA7Yjx5Lmxlbmd0aDtiKyspeD15W2JdLGc9WyJDIix4LngxLHgueTEseC54Mix4LnkyLHgueCx4LnldLGI8eS5sZW5ndGgtMSYmci5wdXNoKGcpO2JyZWFrO2Nhc2UiUyI6dmFyIF89aCx3PXA7IkMiIT1lJiYiUyIhPWV8fChfKz1fLW8sdys9dy1zKSxnPVsiQyIsXyx3LGdbMV0sZ1syXSxnWzNdLGdbNF1dO2JyZWFrO2Nhc2UiVCI6IlEiPT1lfHwiVCI9PWU/KHU9MipoLXUsZj0yKnAtZik6KHU9aCxmPXApLGc9YShoLHAsdSxmLGdbMV0sZ1syXSk7YnJlYWs7Y2FzZSJRIjp1PWdbMV0sZj1nWzJdLGc9YShoLHAsZ1sxXSxnWzJdLGdbM10sZ1s0XSk7YnJlYWs7Y2FzZSJMIjpnPWkoaCxwLGdbMV0sZ1syXSk7YnJlYWs7Y2FzZSJIIjpnPWkoaCxwLGdbMV0scCk7YnJlYWs7Y2FzZSJWIjpnPWkoaCxwLGgsZ1sxXSk7YnJlYWs7Y2FzZSJaIjpnPWkoaCxwLGwsYyl9ZT12LGg9Z1tnLmxlbmd0aC0yXSxwPWdbZy5sZW5ndGgtMV0sZy5sZW5ndGg+ND8obz1nW2cubGVuZ3RoLTRdLHM9Z1tnLmxlbmd0aC0zXSk6KG89aCxzPXApLHIucHVzaChnKX1yZXR1cm4gcn07dmFyIG49dCgic3ZnLWFyYy10by1jdWJpYy1iZXppZXIiKTtmdW5jdGlvbiBpKHQsZSxyLG4pe3JldHVyblsiQyIsdCxlLHIsbixyLG5dfWZ1bmN0aW9uIGEodCxlLHIsbixpLGEpe3JldHVyblsiQyIsdC8zKzIvMypyLGUvMysyLzMqbixpLzMrMi8zKnIsYS8zKzIvMypuLGksYV19fSx7InN2Zy1hcmMtdG8tY3ViaWMtYmV6aWVyIjo1NjZ9XSw1Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJzdmctcGF0aC1ib3VuZHMiKSxhPXQoInBhcnNlLXN2Zy1wYXRoIiksbz10KCJkcmF3LXN2Zy1wYXRoIikscz10KCJpcy1zdmctcGF0aCIpLGw9dCgiYml0bWFwLXNkZiIpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdT1jLmdldENvbnRleHQoIjJkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIXModCkpdGhyb3cgRXJyb3IoIkFyZ3VtZW50IHNob3VsZCBiZSB2YWxpZCBzdmcgcGF0aCBzdHJpbmciKTtlfHwoZT17fSk7dmFyIHIsZjtlLnNoYXBlPyhyPWUuc2hhcGVbMF0sZj1lLnNoYXBlWzFdKToocj1jLndpZHRoPWUud3x8ZS53aWR0aHx8MjAwLGY9Yy5oZWlnaHQ9ZS5ofHxlLmhlaWdodHx8MjAwKTt2YXIgaD1NYXRoLm1pbihyLGYpLHA9ZS5zdHJva2V8fDAsZD1lLnZpZXdib3h8fGUudmlld0JveHx8aSh0KSxtPVtyLyhkWzJdLWRbMF0pLGYvKGRbM10tZFsxXSldLGc9TWF0aC5taW4obVswXXx8MCxtWzFdfHwwKS8yO3UuZmlsbFN0eWxlPSJibGFjayIsdS5maWxsUmVjdCgwLDAscixmKSx1LmZpbGxTdHlsZT0id2hpdGUiLHAmJigibnVtYmVyIiE9dHlwZW9mIHAmJihwPTEpLHUuc3Ryb2tlU3R5bGU9cD4wPyJ3aGl0ZSI6ImJsYWNrIix1LmxpbmVXaWR0aD1NYXRoLmFicyhwKSk7aWYodS50cmFuc2xhdGUoLjUqciwuNSpmKSx1LnNjYWxlKGcsZyksZnVuY3Rpb24oKXtpZihudWxsIT1uKXJldHVybiBuO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJkIik7aWYodC5jYW52YXMud2lkdGg9dC5jYW52YXMuaGVpZ2h0PTEsIXdpbmRvdy5QYXRoMkQpcmV0dXJuIG49ITE7dmFyIGU9bmV3IFBhdGgyRCgiTTAsMGgxdjFoLTF2LTFaIik7dC5maWxsU3R5bGU9ImJsYWNrIix0LmZpbGwoZSk7dmFyIHI9dC5nZXRJbWFnZURhdGEoMCwwLDEsMSk7cmV0dXJuIG49ciYmci5kYXRhJiYyNTU9PT1yLmRhdGFbM119KCkpe3ZhciB2PW5ldyBQYXRoMkQodCk7dS5maWxsKHYpLHAmJnUuc3Ryb2tlKHYpfWVsc2V7dmFyIHk9YSh0KTtvKHUseSksdS5maWxsKCkscCYmdS5zdHJva2UoKX1yZXR1cm4gdS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGwodSx7Y3V0b2ZmOm51bGwhPWUuY3V0b2ZmP2UuY3V0b2ZmOi41LHJhZGl1czpudWxsIT1lLnJhZGl1cz9lLnJhZGl1czouNSpofSl9fSx7ImJpdG1hcC1zZGYiOjEwMiwiZHJhdy1zdmctcGF0aCI6MTc1LCJpcy1zdmctcGF0aCI6NDM5LCJwYXJzZS1zdmctcGF0aCI6NDcyLCJzdmctcGF0aC1ib3VuZHMiOjU2N31dLDU3MDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyLGkpe2k9aXx8e307dmFyIG89YVtlXTtvfHwobz1hW2VdPXsiICI6e2RhdGE6bmV3IEZsb2F0MzJBcnJheSgwKSxzaGFwZTouMn19KTt2YXIgcz1vW3JdO2lmKCFzKWlmKHIubGVuZ3RoPD0xfHwhL1xkLy50ZXN0KHIpKXM9b1tyXT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jZWxscyxyPXQucG9zaXRpb25zLG49bmV3IEZsb2F0MzJBcnJheSg2KmUubGVuZ3RoKSxpPTAsYT0wLG89MDtvPGUubGVuZ3RoOysrbylmb3IodmFyIHM9ZVtvXSxsPTA7bDwzOysrbCl7dmFyIGM9cltzW2xdXTtuW2krK109Y1swXSxuW2krK109Y1sxXSsxLjQsYT1NYXRoLm1heChjWzBdLGEpfXJldHVybntkYXRhOm4sc2hhcGU6YX19KG4ocix7dHJpYW5nbGVzOiEwLGZvbnQ6ZSx0ZXh0QWxpZ246aS50ZXh0QWxpZ258fCJsZWZ0Iix0ZXh0QmFzZWxpbmU6ImFscGhhYmV0aWMiLHN0eWxldGFnczp7YnJlYWtsaW5lczohMCxib2xkczohMCxpdGFsaWNzOiEwLHN1YnNjcmlwdHM6ITAsc3VwZXJzY3JpcHRzOiEwfX0pKTtlbHNle2Zvcih2YXIgbD1yLnNwbGl0KC8oXGR8XHMpLyksYz1uZXcgQXJyYXkobC5sZW5ndGgpLHU9MCxmPTAsaD0wO2g8bC5sZW5ndGg7KytoKWNbaF09dChlLGxbaF0pLHUrPWNbaF0uZGF0YS5sZW5ndGgsZis9Y1toXS5zaGFwZSxoPjAmJihmKz0uMDIpO3ZhciBwPW5ldyBGbG9hdDMyQXJyYXkodSksZD0wLG09LS41KmY7Zm9yKGg9MDtoPGMubGVuZ3RoOysraCl7Zm9yKHZhciBnPWNbaF0uZGF0YSx2PTA7djxnLmxlbmd0aDt2Kz0yKXBbZCsrXT1nW3ZdK20scFtkKytdPWdbdisxXTttKz1jW2hdLnNoYXBlKy4wMn1zPW9bcl09e2RhdGE6cCxzaGFwZTpmfX1yZXR1cm4gc307dmFyIG49dCgidmVjdG9yaXplLXRleHQiKSxpPXdpbmRvd3x8ci5nbG9iYWx8fHt9LGE9aS5fX1RFWFRfQ0FDSEV8fHt9O2kuX19URVhUX0NBQ0hFPXt9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpKX0se19wcm9jZXNzOjUwNCwidmVjdG9yaXplLXRleHQiOjU5Nn1dLDU3MTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlLG4peyhmdW5jdGlvbigpe3ZhciBpPXQoInByb2Nlc3MvYnJvd3Nlci5qcyIpLm5leHRUaWNrLGE9RnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LG89QXJyYXkucHJvdG90eXBlLnNsaWNlLHM9e30sbD0wO2Z1bmN0aW9uIGModCxlKXt0aGlzLl9pZD10LHRoaXMuX2NsZWFyRm49ZX1yLnNldFRpbWVvdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGMoYS5jYWxsKHNldFRpbWVvdXQsd2luZG93LGFyZ3VtZW50cyksY2xlYXJUaW1lb3V0KX0sci5zZXRJbnRlcnZhbD1mdW5jdGlvbigpe3JldHVybiBuZXcgYyhhLmNhbGwoc2V0SW50ZXJ2YWwsd2luZG93LGFyZ3VtZW50cyksY2xlYXJJbnRlcnZhbCl9LHIuY2xlYXJUaW1lb3V0PXIuY2xlYXJJbnRlcnZhbD1mdW5jdGlvbih0KXt0LmNsb3NlKCl9LGMucHJvdG90eXBlLnVucmVmPWMucHJvdG90eXBlLnJlZj1mdW5jdGlvbigpe30sYy5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXt0aGlzLl9jbGVhckZuLmNhbGwod2luZG93LHRoaXMuX2lkKX0sci5lbnJvbGw9ZnVuY3Rpb24odCxlKXtjbGVhclRpbWVvdXQodC5faWRsZVRpbWVvdXRJZCksdC5faWRsZVRpbWVvdXQ9ZX0sci51bmVucm9sbD1mdW5jdGlvbih0KXtjbGVhclRpbWVvdXQodC5faWRsZVRpbWVvdXRJZCksdC5faWRsZVRpbWVvdXQ9LTF9LHIuX3VucmVmQWN0aXZlPXIuYWN0aXZlPWZ1bmN0aW9uKHQpe2NsZWFyVGltZW91dCh0Ll9pZGxlVGltZW91dElkKTt2YXIgZT10Ll9pZGxlVGltZW91dDtlPj0wJiYodC5faWRsZVRpbWVvdXRJZD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3QuX29uVGltZW91dCYmdC5fb25UaW1lb3V0KCl9KSxlKSl9LHIuc2V0SW1tZWRpYXRlPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZnVuY3Rpb24odCl7dmFyIGU9bCsrLG49IShhcmd1bWVudHMubGVuZ3RoPDIpJiZvLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBzW2VdPSEwLGkoKGZ1bmN0aW9uKCl7c1tlXSYmKG4/dC5hcHBseShudWxsLG4pOnQuY2FsbChudWxsKSxyLmNsZWFySW1tZWRpYXRlKGUpKX0pKSxlfSxyLmNsZWFySW1tZWRpYXRlPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZnVuY3Rpb24odCl7ZGVsZXRlIHNbdF19fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJ0aW1lcnMiKS5zZXRJbW1lZGlhdGUsdCgidGltZXJzIikuY2xlYXJJbW1lZGlhdGUpfSx7InByb2Nlc3MvYnJvd3Nlci5qcyI6NTA0LHRpbWVyczo1NzF9XSw1NzI6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCl7dmFyIHI9L15ccysvLG49L1xzKyQvLGk9MCxhPXQucm91bmQsbz10Lm1pbixzPXQubWF4LGw9dC5yYW5kb207ZnVuY3Rpb24gYyhlLGwpe2lmKGw9bHx8e30sKGU9ZXx8IiIpaW5zdGFuY2VvZiBjKXJldHVybiBlO2lmKCEodGhpcyBpbnN0YW5jZW9mIGMpKXJldHVybiBuZXcgYyhlLGwpO3ZhciB1PWZ1bmN0aW9uKGUpe3ZhciBpPXtyOjAsZzowLGI6MH0sYT0xLGw9bnVsbCxjPW51bGwsdT1udWxsLGY9ITEsaD0hMTsic3RyaW5nIj09dHlwZW9mIGUmJihlPWZ1bmN0aW9uKHQpe3Q9dC5yZXBsYWNlKHIsIiIpLnJlcGxhY2UobiwiIikudG9Mb3dlckNhc2UoKTt2YXIgZSxpPSExO2lmKFNbdF0pdD1TW3RdLGk9ITA7ZWxzZSBpZigidHJhbnNwYXJlbnQiPT10KXJldHVybntyOjAsZzowLGI6MCxhOjAsZm9ybWF0OiJuYW1lIn07aWYoZT1qLnJnYi5leGVjKHQpKXJldHVybntyOmVbMV0sZzplWzJdLGI6ZVszXX07aWYoZT1qLnJnYmEuZXhlYyh0KSlyZXR1cm57cjplWzFdLGc6ZVsyXSxiOmVbM10sYTplWzRdfTtpZihlPWouaHNsLmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sbDplWzNdfTtpZihlPWouaHNsYS5leGVjKHQpKXJldHVybntoOmVbMV0sczplWzJdLGw6ZVszXSxhOmVbNF19O2lmKGU9ai5oc3YuZXhlYyh0KSlyZXR1cm57aDplWzFdLHM6ZVsyXSx2OmVbM119O2lmKGU9ai5oc3ZhLmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sdjplWzNdLGE6ZVs0XX07aWYoZT1qLmhleDguZXhlYyh0KSlyZXR1cm57cjpJKGVbMV0pLGc6SShlWzJdKSxiOkkoZVszXSksYTpSKGVbNF0pLGZvcm1hdDppPyJuYW1lIjoiaGV4OCJ9O2lmKGU9ai5oZXg2LmV4ZWModCkpcmV0dXJue3I6SShlWzFdKSxnOkkoZVsyXSksYjpJKGVbM10pLGZvcm1hdDppPyJuYW1lIjoiaGV4In07aWYoZT1qLmhleDQuZXhlYyh0KSlyZXR1cm57cjpJKGVbMV0rIiIrZVsxXSksZzpJKGVbMl0rIiIrZVsyXSksYjpJKGVbM10rIiIrZVszXSksYTpSKGVbNF0rIiIrZVs0XSksZm9ybWF0Omk/Im5hbWUiOiJoZXg4In07aWYoZT1qLmhleDMuZXhlYyh0KSlyZXR1cm57cjpJKGVbMV0rIiIrZVsxXSksZzpJKGVbMl0rIiIrZVsyXSksYjpJKGVbM10rIiIrZVszXSksZm9ybWF0Omk/Im5hbWUiOiJoZXgifTtyZXR1cm4hMX0oZSkpOyJvYmplY3QiPT10eXBlb2YgZSYmKFUoZS5yKSYmVShlLmcpJiZVKGUuYik/KHA9ZS5yLGQ9ZS5nLG09ZS5iLGk9e3I6MjU1KkMocCwyNTUpLGc6MjU1KkMoZCwyNTUpLGI6MjU1KkMobSwyNTUpfSxmPSEwLGg9IiUiPT09U3RyaW5nKGUucikuc3Vic3RyKC0xKT8icHJnYiI6InJnYiIpOlUoZS5oKSYmVShlLnMpJiZVKGUudik/KGw9eihlLnMpLGM9eihlLnYpLGk9ZnVuY3Rpb24oZSxyLG4pe2U9NipDKGUsMzYwKSxyPUMociwxMDApLG49QyhuLDEwMCk7dmFyIGk9dC5mbG9vcihlKSxhPWUtaSxvPW4qKDEtcikscz1uKigxLWEqciksbD1uKigxLSgxLWEpKnIpLGM9aSU2O3JldHVybntyOjI1NSpbbixzLG8sbyxsLG5dW2NdLGc6MjU1KltsLG4sbixzLG8sb11bY10sYjoyNTUqW28sbyxsLG4sbixzXVtjXX19KGUuaCxsLGMpLGY9ITAsaD0iaHN2Iik6VShlLmgpJiZVKGUucykmJlUoZS5sKSYmKGw9eihlLnMpLHU9eihlLmwpLGk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYTtmdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gcjwwJiYocis9MSkscj4xJiYoci09MSkscjwxLzY/dCs2KihlLXQpKnI6cjwuNT9lOnI8Mi8zP3QrKGUtdCkqKDIvMy1yKSo2OnR9aWYodD1DKHQsMzYwKSxlPUMoZSwxMDApLHI9QyhyLDEwMCksMD09PWUpbj1pPWE9cjtlbHNle3ZhciBzPXI8LjU/ciooMStlKTpyK2UtciplLGw9MipyLXM7bj1vKGwscyx0KzEvMyksaT1vKGwscyx0KSxhPW8obCxzLHQtMS8zKX1yZXR1cm57cjoyNTUqbixnOjI1NSppLGI6MjU1KmF9fShlLmgsbCx1KSxmPSEwLGg9ImhzbCIpLGUuaGFzT3duUHJvcGVydHkoImEiKSYmKGE9ZS5hKSk7dmFyIHAsZCxtO3JldHVybiBhPUwoYSkse29rOmYsZm9ybWF0OmUuZm9ybWF0fHxoLHI6bygyNTUscyhpLnIsMCkpLGc6bygyNTUscyhpLmcsMCkpLGI6bygyNTUscyhpLmIsMCkpLGE6YX19KGUpO3RoaXMuX29yaWdpbmFsSW5wdXQ9ZSx0aGlzLl9yPXUucix0aGlzLl9nPXUuZyx0aGlzLl9iPXUuYix0aGlzLl9hPXUuYSx0aGlzLl9yb3VuZEE9YSgxMDAqdGhpcy5fYSkvMTAwLHRoaXMuX2Zvcm1hdD1sLmZvcm1hdHx8dS5mb3JtYXQsdGhpcy5fZ3JhZGllbnRUeXBlPWwuZ3JhZGllbnRUeXBlLHRoaXMuX3I8MSYmKHRoaXMuX3I9YSh0aGlzLl9yKSksdGhpcy5fZzwxJiYodGhpcy5fZz1hKHRoaXMuX2cpKSx0aGlzLl9iPDEmJih0aGlzLl9iPWEodGhpcy5fYikpLHRoaXMuX29rPXUub2ssdGhpcy5fdGNfaWQ9aSsrfWZ1bmN0aW9uIHUodCxlLHIpe3Q9Qyh0LDI1NSksZT1DKGUsMjU1KSxyPUMociwyNTUpO3ZhciBuLGksYT1zKHQsZSxyKSxsPW8odCxlLHIpLGM9KGErbCkvMjtpZihhPT1sKW49aT0wO2Vsc2V7dmFyIHU9YS1sO3N3aXRjaChpPWM+LjU/dS8oMi1hLWwpOnUvKGErbCksYSl7Y2FzZSB0Om49KGUtcikvdSsoZTxyPzY6MCk7YnJlYWs7Y2FzZSBlOm49KHItdCkvdSsyO2JyZWFrO2Nhc2UgcjpuPSh0LWUpL3UrNH1uLz02fXJldHVybntoOm4sczppLGw6Y319ZnVuY3Rpb24gZih0LGUscil7dD1DKHQsMjU1KSxlPUMoZSwyNTUpLHI9QyhyLDI1NSk7dmFyIG4saSxhPXModCxlLHIpLGw9byh0LGUsciksYz1hLHU9YS1sO2lmKGk9MD09PWE/MDp1L2EsYT09bCluPTA7ZWxzZXtzd2l0Y2goYSl7Y2FzZSB0Om49KGUtcikvdSsoZTxyPzY6MCk7YnJlYWs7Y2FzZSBlOm49KHItdCkvdSsyO2JyZWFrO2Nhc2UgcjpuPSh0LWUpL3UrNH1uLz02fXJldHVybntoOm4sczppLHY6Y319ZnVuY3Rpb24gaCh0LGUscixuKXt2YXIgaT1bTyhhKHQpLnRvU3RyaW5nKDE2KSksTyhhKGUpLnRvU3RyaW5nKDE2KSksTyhhKHIpLnRvU3RyaW5nKDE2KSldO3JldHVybiBuJiZpWzBdLmNoYXJBdCgwKT09aVswXS5jaGFyQXQoMSkmJmlbMV0uY2hhckF0KDApPT1pWzFdLmNoYXJBdCgxKSYmaVsyXS5jaGFyQXQoMCk9PWlbMl0uY2hhckF0KDEpP2lbMF0uY2hhckF0KDApK2lbMV0uY2hhckF0KDApK2lbMl0uY2hhckF0KDApOmkuam9pbigiIil9ZnVuY3Rpb24gcCh0LGUscixuKXtyZXR1cm5bTyhEKG4pKSxPKGEodCkudG9TdHJpbmcoMTYpKSxPKGEoZSkudG9TdHJpbmcoMTYpKSxPKGEocikudG9TdHJpbmcoMTYpKV0uam9pbigiIil9ZnVuY3Rpb24gZCh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIucy09ZS8xMDAsci5zPVAoci5zKSxjKHIpfWZ1bmN0aW9uIG0odCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9Yyh0KS50b0hzbCgpO3JldHVybiByLnMrPWUvMTAwLHIucz1QKHIucyksYyhyKX1mdW5jdGlvbiBnKHQpe3JldHVybiBjKHQpLmRlc2F0dXJhdGUoMTAwKX1mdW5jdGlvbiB2KHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9Ic2woKTtyZXR1cm4gci5sKz1lLzEwMCxyLmw9UChyLmwpLGMocil9ZnVuY3Rpb24geSh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvUmdiKCk7cmV0dXJuIHIucj1zKDAsbygyNTUsci5yLWEoLWUvMTAwKjI1NSkpKSxyLmc9cygwLG8oMjU1LHIuZy1hKC1lLzEwMCoyNTUpKSksci5iPXMoMCxvKDI1NSxyLmItYSgtZS8xMDAqMjU1KSkpLGMocil9ZnVuY3Rpb24geCh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIubC09ZS8xMDAsci5sPVAoci5sKSxjKHIpfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1jKHQpLnRvSHNsKCksbj0oci5oK2UpJTM2MDtyZXR1cm4gci5oPW48MD8zNjArbjpuLGMocil9ZnVuY3Rpb24gXyh0KXt2YXIgZT1jKHQpLnRvSHNsKCk7cmV0dXJuIGUuaD0oZS5oKzE4MCklMzYwLGMoZSl9ZnVuY3Rpb24gdyh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocisxMjApJTM2MCxzOmUucyxsOmUubH0pLGMoe2g6KHIrMjQwKSUzNjAsczplLnMsbDplLmx9KV19ZnVuY3Rpb24gVCh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocis5MCklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisxODApJTM2MCxzOmUucyxsOmUubH0pLGMoe2g6KHIrMjcwKSUzNjAsczplLnMsbDplLmx9KV19ZnVuY3Rpb24gayh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocis3MiklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisyMTYpJTM2MCxzOmUucyxsOmUubH0pXX1mdW5jdGlvbiBBKHQsZSxyKXtlPWV8fDYscj1yfHwzMDt2YXIgbj1jKHQpLnRvSHNsKCksaT0zNjAvcixhPVtjKHQpXTtmb3Iobi5oPShuLmgtKGkqZT4+MSkrNzIwKSUzNjA7LS1lOyluLmg9KG4uaCtpKSUzNjAsYS5wdXNoKGMobikpO3JldHVybiBhfWZ1bmN0aW9uIE0odCxlKXtlPWV8fDY7Zm9yKHZhciByPWModCkudG9Ic3YoKSxuPXIuaCxpPXIucyxhPXIudixvPVtdLHM9MS9lO2UtLTspby5wdXNoKGMoe2g6bixzOmksdjphfSkpLGE9KGErcyklMTtyZXR1cm4gb31jLnByb3RvdHlwZT17aXNEYXJrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnJpZ2h0bmVzcygpPDEyOH0saXNMaWdodDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmlzRGFyaygpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29rfSxnZXRPcmlnaW5hbElucHV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsSW5wdXR9LGdldEZvcm1hdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb3JtYXR9LGdldEFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F9LGdldEJyaWdodG5lc3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRvUmdiKCk7cmV0dXJuKDI5OSp0LnIrNTg3KnQuZysxMTQqdC5iKS8xZTN9LGdldEx1bWluYW5jZTpmdW5jdGlvbigpe3ZhciBlLHIsbixpPXRoaXMudG9SZ2IoKTtyZXR1cm4gZT1pLnIvMjU1LHI9aS5nLzI1NSxuPWkuYi8yNTUsLjIxMjYqKGU8PS4wMzkyOD9lLzEyLjkyOnQucG93KChlKy4wNTUpLzEuMDU1LDIuNCkpKy43MTUyKihyPD0uMDM5Mjg/ci8xMi45Mjp0LnBvdygocisuMDU1KS8xLjA1NSwyLjQpKSsuMDcyMioobjw9LjAzOTI4P24vMTIuOTI6dC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KSl9LHNldEFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hPUwodCksdGhpcy5fcm91bmRBPWEoMTAwKnRoaXMuX2EpLzEwMCx0aGlzfSx0b0hzdjpmdW5jdGlvbigpe3ZhciB0PWYodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCp0Lmgsczp0LnMsdjp0LnYsYTp0aGlzLl9hfX0sdG9Ic3ZTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD1mKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSxlPWEoMzYwKnQuaCkscj1hKDEwMCp0LnMpLG49YSgxMDAqdC52KTtyZXR1cm4gMT09dGhpcy5fYT8iaHN2KCIrZSsiLCAiK3IrIiUsICIrbisiJSkiOiJoc3ZhKCIrZSsiLCAiK3IrIiUsICIrbisiJSwgIit0aGlzLl9yb3VuZEErIikifSx0b0hzbDpmdW5jdGlvbigpe3ZhciB0PXUodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCp0Lmgsczp0LnMsbDp0LmwsYTp0aGlzLl9hfX0sdG9Ic2xTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD11KHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSxlPWEoMzYwKnQuaCkscj1hKDEwMCp0LnMpLG49YSgxMDAqdC5sKTtyZXR1cm4gMT09dGhpcy5fYT8iaHNsKCIrZSsiLCAiK3IrIiUsICIrbisiJSkiOiJoc2xhKCIrZSsiLCAiK3IrIiUsICIrbisiJSwgIit0aGlzLl9yb3VuZEErIikifSx0b0hleDpmdW5jdGlvbih0KXtyZXR1cm4gaCh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0KX0sdG9IZXhTdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuIiMiK3RoaXMudG9IZXgodCl9LHRvSGV4ODpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz1bTyhhKHQpLnRvU3RyaW5nKDE2KSksTyhhKGUpLnRvU3RyaW5nKDE2KSksTyhhKHIpLnRvU3RyaW5nKDE2KSksTyhEKG4pKV07aWYoaSYmb1swXS5jaGFyQXQoMCk9PW9bMF0uY2hhckF0KDEpJiZvWzFdLmNoYXJBdCgwKT09b1sxXS5jaGFyQXQoMSkmJm9bMl0uY2hhckF0KDApPT1vWzJdLmNoYXJBdCgxKSYmb1szXS5jaGFyQXQoMCk9PW9bM10uY2hhckF0KDEpKXJldHVybiBvWzBdLmNoYXJBdCgwKStvWzFdLmNoYXJBdCgwKStvWzJdLmNoYXJBdCgwKStvWzNdLmNoYXJBdCgwKTtyZXR1cm4gby5qb2luKCIiKX0odGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdGhpcy5fYSx0KX0sdG9IZXg4U3RyaW5nOmZ1bmN0aW9uKHQpe3JldHVybiIjIit0aGlzLnRvSGV4OCh0KX0sdG9SZ2I6ZnVuY3Rpb24oKXtyZXR1cm57cjphKHRoaXMuX3IpLGc6YSh0aGlzLl9nKSxiOmEodGhpcy5fYiksYTp0aGlzLl9hfX0sdG9SZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT8icmdiKCIrYSh0aGlzLl9yKSsiLCAiK2EodGhpcy5fZykrIiwgIithKHRoaXMuX2IpKyIpIjoicmdiYSgiK2EodGhpcy5fcikrIiwgIithKHRoaXMuX2cpKyIsICIrYSh0aGlzLl9iKSsiLCAiK3RoaXMuX3JvdW5kQSsiKSJ9LHRvUGVyY2VudGFnZVJnYjpmdW5jdGlvbigpe3JldHVybntyOmEoMTAwKkModGhpcy5fciwyNTUpKSsiJSIsZzphKDEwMCpDKHRoaXMuX2csMjU1KSkrIiUiLGI6YSgxMDAqQyh0aGlzLl9iLDI1NSkpKyIlIixhOnRoaXMuX2F9fSx0b1BlcmNlbnRhZ2VSZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT8icmdiKCIrYSgxMDAqQyh0aGlzLl9yLDI1NSkpKyIlLCAiK2EoMTAwKkModGhpcy5fZywyNTUpKSsiJSwgIithKDEwMCpDKHRoaXMuX2IsMjU1KSkrIiUpIjoicmdiYSgiK2EoMTAwKkModGhpcy5fciwyNTUpKSsiJSwgIithKDEwMCpDKHRoaXMuX2csMjU1KSkrIiUsICIrYSgxMDAqQyh0aGlzLl9iLDI1NSkpKyIlLCAiK3RoaXMuX3JvdW5kQSsiKSJ9LHRvTmFtZTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5fYT8idHJhbnNwYXJlbnQiOiEodGhpcy5fYTwxKSYmKEVbaCh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiwhMCldfHwhMSl9LHRvRmlsdGVyOmZ1bmN0aW9uKHQpe3ZhciBlPSIjIitwKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHRoaXMuX2EpLHI9ZSxuPXRoaXMuX2dyYWRpZW50VHlwZT8iR3JhZGllbnRUeXBlID0gMSwgIjoiIjtpZih0KXt2YXIgaT1jKHQpO3I9IiMiK3AoaS5fcixpLl9nLGkuX2IsaS5fYSl9cmV0dXJuInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudCgiK24rInN0YXJ0Q29sb3JzdHI9IitlKyIsZW5kQ29sb3JzdHI9IityKyIpIn0sdG9TdHJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9ISF0O3Q9dHx8dGhpcy5fZm9ybWF0O3ZhciByPSExLG49dGhpcy5fYTwxJiZ0aGlzLl9hPj0wO3JldHVybiBlfHwhbnx8ImhleCIhPT10JiYiaGV4NiIhPT10JiYiaGV4MyIhPT10JiYiaGV4NCIhPT10JiYiaGV4OCIhPT10JiYibmFtZSIhPT10PygicmdiIj09PXQmJihyPXRoaXMudG9SZ2JTdHJpbmcoKSksInByZ2IiPT09dCYmKHI9dGhpcy50b1BlcmNlbnRhZ2VSZ2JTdHJpbmcoKSksImhleCIhPT10JiYiaGV4NiIhPT10fHwocj10aGlzLnRvSGV4U3RyaW5nKCkpLCJoZXgzIj09PXQmJihyPXRoaXMudG9IZXhTdHJpbmcoITApKSwiaGV4NCI9PT10JiYocj10aGlzLnRvSGV4OFN0cmluZyghMCkpLCJoZXg4Ij09PXQmJihyPXRoaXMudG9IZXg4U3RyaW5nKCkpLCJuYW1lIj09PXQmJihyPXRoaXMudG9OYW1lKCkpLCJoc2wiPT09dCYmKHI9dGhpcy50b0hzbFN0cmluZygpKSwiaHN2Ij09PXQmJihyPXRoaXMudG9Ic3ZTdHJpbmcoKSkscnx8dGhpcy50b0hleFN0cmluZygpKToibmFtZSI9PT10JiYwPT09dGhpcy5fYT90aGlzLnRvTmFtZSgpOnRoaXMudG9SZ2JTdHJpbmcoKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzLnRvU3RyaW5nKCkpfSxfYXBwbHlNb2RpZmljYXRpb246ZnVuY3Rpb24odCxlKXt2YXIgcj10LmFwcGx5KG51bGwsW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKGUpKSk7cmV0dXJuIHRoaXMuX3I9ci5fcix0aGlzLl9nPXIuX2csdGhpcy5fYj1yLl9iLHRoaXMuc2V0QWxwaGEoci5fYSksdGhpc30sbGlnaHRlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih2LGFyZ3VtZW50cyl9LGJyaWdodGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHksYXJndW1lbnRzKX0sZGFya2VuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHgsYXJndW1lbnRzKX0sZGVzYXR1cmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihkLGFyZ3VtZW50cyl9LHNhdHVyYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKG0sYXJndW1lbnRzKX0sZ3JleXNjYWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGcsYXJndW1lbnRzKX0sc3BpbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihiLGFyZ3VtZW50cyl9LF9hcHBseUNvbWJpbmF0aW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuYXBwbHkobnVsbCxbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwoZSkpKX0sYW5hbG9nb3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oQSxhcmd1bWVudHMpfSxjb21wbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oXyxhcmd1bWVudHMpfSxtb25vY2hyb21hdGljOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oTSxhcmd1bWVudHMpfSxzcGxpdGNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihrLGFyZ3VtZW50cyl9LHRyaWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24odyxhcmd1bWVudHMpfSx0ZXRyYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihULGFyZ3VtZW50cyl9fSxjLmZyb21SYXRpbz1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7dmFyIHI9e307Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKHJbbl09ImEiPT09bj90W25dOnoodFtuXSkpO3Q9cn1yZXR1cm4gYyh0LGUpfSxjLmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiEoIXR8fCFlKSYmYyh0KS50b1JnYlN0cmluZygpPT1jKGUpLnRvUmdiU3RyaW5nKCl9LGMucmFuZG9tPWZ1bmN0aW9uKCl7cmV0dXJuIGMuZnJvbVJhdGlvKHtyOmwoKSxnOmwoKSxiOmwoKX0pfSxjLm1peD1mdW5jdGlvbih0LGUscil7cj0wPT09cj8wOnJ8fDUwO3ZhciBuPWModCkudG9SZ2IoKSxpPWMoZSkudG9SZ2IoKSxhPXIvMTAwO3JldHVybiBjKHtyOihpLnItbi5yKSphK24ucixnOihpLmctbi5nKSphK24uZyxiOihpLmItbi5iKSphK24uYixhOihpLmEtbi5hKSphK24uYX0pfSxjLnJlYWRhYmlsaXR5PWZ1bmN0aW9uKGUscil7dmFyIG49YyhlKSxpPWMocik7cmV0dXJuKHQubWF4KG4uZ2V0THVtaW5hbmNlKCksaS5nZXRMdW1pbmFuY2UoKSkrLjA1KS8odC5taW4obi5nZXRMdW1pbmFuY2UoKSxpLmdldEx1bWluYW5jZSgpKSsuMDUpfSxjLmlzUmVhZGFibGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1jLnJlYWRhYmlsaXR5KHQsZSk7c3dpdGNoKGk9ITEsKG49ZnVuY3Rpb24odCl7dmFyIGUscjtlPSgodD10fHx7bGV2ZWw6IkFBIixzaXplOiJzbWFsbCJ9KS5sZXZlbHx8IkFBIikudG9VcHBlckNhc2UoKSxyPSh0LnNpemV8fCJzbWFsbCIpLnRvTG93ZXJDYXNlKCksIkFBIiE9PWUmJiJBQUEiIT09ZSYmKGU9IkFBIik7InNtYWxsIiE9PXImJiJsYXJnZSIhPT1yJiYocj0ic21hbGwiKTtyZXR1cm57bGV2ZWw6ZSxzaXplOnJ9fShyKSkubGV2ZWwrbi5zaXplKXtjYXNlIkFBc21hbGwiOmNhc2UiQUFBbGFyZ2UiOmk9YT49NC41O2JyZWFrO2Nhc2UiQUFsYXJnZSI6aT1hPj0zO2JyZWFrO2Nhc2UiQUFBc21hbGwiOmk9YT49N31yZXR1cm4gaX0sYy5tb3N0UmVhZGFibGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHM9bnVsbCxsPTA7aT0ocj1yfHx7fSkuaW5jbHVkZUZhbGxiYWNrQ29sb3JzLGE9ci5sZXZlbCxvPXIuc2l6ZTtmb3IodmFyIHU9MDt1PGUubGVuZ3RoO3UrKykobj1jLnJlYWRhYmlsaXR5KHQsZVt1XSkpPmwmJihsPW4scz1jKGVbdV0pKTtyZXR1cm4gYy5pc1JlYWRhYmxlKHQscyx7bGV2ZWw6YSxzaXplOm99KXx8IWk/czooci5pbmNsdWRlRmFsbGJhY2tDb2xvcnM9ITEsYy5tb3N0UmVhZGFibGUodCxbIiNmZmYiLCIjMDAwIl0scikpfTt2YXIgUz1jLm5hbWVzPXthbGljZWJsdWU6ImYwZjhmZiIsYW50aXF1ZXdoaXRlOiJmYWViZDciLGFxdWE6IjBmZiIsYXF1YW1hcmluZToiN2ZmZmQ0IixhenVyZToiZjBmZmZmIixiZWlnZToiZjVmNWRjIixiaXNxdWU6ImZmZTRjNCIsYmxhY2s6IjAwMCIsYmxhbmNoZWRhbG1vbmQ6ImZmZWJjZCIsYmx1ZToiMDBmIixibHVldmlvbGV0OiI4YTJiZTIiLGJyb3duOiJhNTJhMmEiLGJ1cmx5d29vZDoiZGViODg3IixidXJudHNpZW5uYToiZWE3ZTVkIixjYWRldGJsdWU6IjVmOWVhMCIsY2hhcnRyZXVzZToiN2ZmZjAwIixjaG9jb2xhdGU6ImQyNjkxZSIsY29yYWw6ImZmN2Y1MCIsY29ybmZsb3dlcmJsdWU6IjY0OTVlZCIsY29ybnNpbGs6ImZmZjhkYyIsY3JpbXNvbjoiZGMxNDNjIixjeWFuOiIwZmYiLGRhcmtibHVlOiIwMDAwOGIiLGRhcmtjeWFuOiIwMDhiOGIiLGRhcmtnb2xkZW5yb2Q6ImI4ODYwYiIsZGFya2dyYXk6ImE5YTlhOSIsZGFya2dyZWVuOiIwMDY0MDAiLGRhcmtncmV5OiJhOWE5YTkiLGRhcmtraGFraToiYmRiNzZiIixkYXJrbWFnZW50YToiOGIwMDhiIixkYXJrb2xpdmVncmVlbjoiNTU2YjJmIixkYXJrb3JhbmdlOiJmZjhjMDAiLGRhcmtvcmNoaWQ6Ijk5MzJjYyIsZGFya3JlZDoiOGIwMDAwIixkYXJrc2FsbW9uOiJlOTk2N2EiLGRhcmtzZWFncmVlbjoiOGZiYzhmIixkYXJrc2xhdGVibHVlOiI0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IjJmNGY0ZiIsZGFya3NsYXRlZ3JleToiMmY0ZjRmIixkYXJrdHVycXVvaXNlOiIwMGNlZDEiLGRhcmt2aW9sZXQ6Ijk0MDBkMyIsZGVlcHBpbms6ImZmMTQ5MyIsZGVlcHNreWJsdWU6IjAwYmZmZiIsZGltZ3JheToiNjk2OTY5IixkaW1ncmV5OiI2OTY5NjkiLGRvZGdlcmJsdWU6IjFlOTBmZiIsZmlyZWJyaWNrOiJiMjIyMjIiLGZsb3JhbHdoaXRlOiJmZmZhZjAiLGZvcmVzdGdyZWVuOiIyMjhiMjIiLGZ1Y2hzaWE6ImYwZiIsZ2FpbnNib3JvOiJkY2RjZGMiLGdob3N0d2hpdGU6ImY4ZjhmZiIsZ29sZDoiZmZkNzAwIixnb2xkZW5yb2Q6ImRhYTUyMCIsZ3JheToiODA4MDgwIixncmVlbjoiMDA4MDAwIixncmVlbnllbGxvdzoiYWRmZjJmIixncmV5OiI4MDgwODAiLGhvbmV5ZGV3OiJmMGZmZjAiLGhvdHBpbms6ImZmNjliNCIsaW5kaWFucmVkOiJjZDVjNWMiLGluZGlnbzoiNGIwMDgyIixpdm9yeToiZmZmZmYwIixraGFraToiZjBlNjhjIixsYXZlbmRlcjoiZTZlNmZhIixsYXZlbmRlcmJsdXNoOiJmZmYwZjUiLGxhd25ncmVlbjoiN2NmYzAwIixsZW1vbmNoaWZmb246ImZmZmFjZCIsbGlnaHRibHVlOiJhZGQ4ZTYiLGxpZ2h0Y29yYWw6ImYwODA4MCIsbGlnaHRjeWFuOiJlMGZmZmYiLGxpZ2h0Z29sZGVucm9keWVsbG93OiJmYWZhZDIiLGxpZ2h0Z3JheToiZDNkM2QzIixsaWdodGdyZWVuOiI5MGVlOTAiLGxpZ2h0Z3JleToiZDNkM2QzIixsaWdodHBpbms6ImZmYjZjMSIsbGlnaHRzYWxtb246ImZmYTA3YSIsbGlnaHRzZWFncmVlbjoiMjBiMmFhIixsaWdodHNreWJsdWU6Ijg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6Ijc4OSIsbGlnaHRzbGF0ZWdyZXk6Ijc4OSIsbGlnaHRzdGVlbGJsdWU6ImIwYzRkZSIsbGlnaHR5ZWxsb3c6ImZmZmZlMCIsbGltZToiMGYwIixsaW1lZ3JlZW46IjMyY2QzMiIsbGluZW46ImZhZjBlNiIsbWFnZW50YToiZjBmIixtYXJvb246IjgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiNjZjZGFhIixtZWRpdW1ibHVlOiIwMDAwY2QiLG1lZGl1bW9yY2hpZDoiYmE1NWQzIixtZWRpdW1wdXJwbGU6IjkzNzBkYiIsbWVkaXVtc2VhZ3JlZW46IjNjYjM3MSIsbWVkaXVtc2xhdGVibHVlOiI3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIwMGZhOWEiLG1lZGl1bXR1cnF1b2lzZToiNDhkMWNjIixtZWRpdW12aW9sZXRyZWQ6ImM3MTU4NSIsbWlkbmlnaHRibHVlOiIxOTE5NzAiLG1pbnRjcmVhbToiZjVmZmZhIixtaXN0eXJvc2U6ImZmZTRlMSIsbW9jY2FzaW46ImZmZTRiNSIsbmF2YWpvd2hpdGU6ImZmZGVhZCIsbmF2eToiMDAwMDgwIixvbGRsYWNlOiJmZGY1ZTYiLG9saXZlOiI4MDgwMDAiLG9saXZlZHJhYjoiNmI4ZTIzIixvcmFuZ2U6ImZmYTUwMCIsb3JhbmdlcmVkOiJmZjQ1MDAiLG9yY2hpZDoiZGE3MGQ2IixwYWxlZ29sZGVucm9kOiJlZWU4YWEiLHBhbGVncmVlbjoiOThmYjk4IixwYWxldHVycXVvaXNlOiJhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6ImRiNzA5MyIscGFwYXlhd2hpcDoiZmZlZmQ1IixwZWFjaHB1ZmY6ImZmZGFiOSIscGVydToiY2Q4NTNmIixwaW5rOiJmZmMwY2IiLHBsdW06ImRkYTBkZCIscG93ZGVyYmx1ZToiYjBlMGU2IixwdXJwbGU6IjgwMDA4MCIscmViZWNjYXB1cnBsZToiNjYzMzk5IixyZWQ6ImYwMCIscm9zeWJyb3duOiJiYzhmOGYiLHJveWFsYmx1ZToiNDE2OWUxIixzYWRkbGVicm93bjoiOGI0NTEzIixzYWxtb246ImZhODA3MiIsc2FuZHlicm93bjoiZjRhNDYwIixzZWFncmVlbjoiMmU4YjU3IixzZWFzaGVsbDoiZmZmNWVlIixzaWVubmE6ImEwNTIyZCIsc2lsdmVyOiJjMGMwYzAiLHNreWJsdWU6Ijg3Y2VlYiIsc2xhdGVibHVlOiI2YTVhY2QiLHNsYXRlZ3JheToiNzA4MDkwIixzbGF0ZWdyZXk6IjcwODA5MCIsc25vdzoiZmZmYWZhIixzcHJpbmdncmVlbjoiMDBmZjdmIixzdGVlbGJsdWU6IjQ2ODJiNCIsdGFuOiJkMmI0OGMiLHRlYWw6IjAwODA4MCIsdGhpc3RsZToiZDhiZmQ4Iix0b21hdG86ImZmNjM0NyIsdHVycXVvaXNlOiI0MGUwZDAiLHZpb2xldDoiZWU4MmVlIix3aGVhdDoiZjVkZWIzIix3aGl0ZToiZmZmIix3aGl0ZXNtb2tlOiJmNWY1ZjUiLHllbGxvdzoiZmYwIix5ZWxsb3dncmVlbjoiOWFjZDMyIn0sRT1jLmhleE5hbWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Zvcih2YXIgciBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJihlW3Rbcl1dPXIpO3JldHVybiBlfShTKTtmdW5jdGlvbiBMKHQpe3JldHVybiB0PXBhcnNlRmxvYXQodCksKGlzTmFOKHQpfHx0PDB8fHQ+MSkmJih0PTEpLHR9ZnVuY3Rpb24gQyhlLHIpeyhmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJi0xIT10LmluZGV4T2YoIi4iKSYmMT09PXBhcnNlRmxvYXQodCl9KShlKSYmKGU9IjEwMCUiKTt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJi0xIT10LmluZGV4T2YoIiUiKX0oZSk7cmV0dXJuIGU9byhyLHMoMCxwYXJzZUZsb2F0KGUpKSksbiYmKGU9cGFyc2VJbnQoZSpyLDEwKS8xMDApLHQuYWJzKGUtcik8MWUtNj8xOmUlci9wYXJzZUZsb2F0KHIpfWZ1bmN0aW9uIFAodCl7cmV0dXJuIG8oMSxzKDAsdCkpfWZ1bmN0aW9uIEkodCl7cmV0dXJuIHBhcnNlSW50KHQsMTYpfWZ1bmN0aW9uIE8odCl7cmV0dXJuIDE9PXQubGVuZ3RoPyIwIit0OiIiK3R9ZnVuY3Rpb24geih0KXtyZXR1cm4gdDw9MSYmKHQ9MTAwKnQrIiUiKSx0fWZ1bmN0aW9uIEQoZSl7cmV0dXJuIHQucm91bmQoMjU1KnBhcnNlRmxvYXQoZSkpLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBSKHQpe3JldHVybiBJKHQpLzI1NX12YXIgRixCLE4saj0oQj0iW1xcc3xcXChdKygiKyhGPSIoPzpbLVxcK10/XFxkKlxcLlxcZCslPyl8KD86Wy1cXCtdP1xcZCslPykiKSsiKVssfFxcc10rKCIrRisiKVssfFxcc10rKCIrRisiKVxccypcXCk/IixOPSJbXFxzfFxcKF0rKCIrRisiKVssfFxcc10rKCIrRisiKVssfFxcc10rKCIrRisiKVssfFxcc10rKCIrRisiKVxccypcXCk/Iix7Q1NTX1VOSVQ6bmV3IFJlZ0V4cChGKSxyZ2I6bmV3IFJlZ0V4cCgicmdiIitCKSxyZ2JhOm5ldyBSZWdFeHAoInJnYmEiK04pLGhzbDpuZXcgUmVnRXhwKCJoc2wiK0IpLGhzbGE6bmV3IFJlZ0V4cCgiaHNsYSIrTiksaHN2Om5ldyBSZWdFeHAoImhzdiIrQiksaHN2YTpuZXcgUmVnRXhwKCJoc3ZhIitOKSxoZXgzOi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxoZXg2Oi9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkLyxoZXg0Oi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8saGV4ODovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvfSk7ZnVuY3Rpb24gVSh0KXtyZXR1cm4hIWouQ1NTX1VOSVQuZXhlYyh0KX12b2lkIDAhPT1lJiZlLmV4cG9ydHM/ZS5leHBvcnRzPWM6d2luZG93LnRpbnljb2xvcj1jfShNYXRoKX0se31dLDU3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9aSxlLmV4cG9ydHMuZmxvYXQzMj1lLmV4cG9ydHMuZmxvYXQ9aSxlLmV4cG9ydHMuZnJhY3QzMj1lLmV4cG9ydHMuZnJhY3Q9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aCl7aWYodCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gbmV3IEZsb2F0MzJBcnJheSh0Lmxlbmd0aCk7ZSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8KGU9aSh0KSk7Zm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKWVbcl09dFtyXS1lW3JdO3JldHVybiBlfXJldHVybiBpKHQtaSh0KSl9O3ZhciBuPW5ldyBGbG9hdDMyQXJyYXkoMSk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5sZW5ndGg/dCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheT90Om5ldyBGbG9hdDMyQXJyYXkodCk6KG5bMF09dCxuWzBdKX19LHt9XSw1NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGFyc2UtdW5pdCIpO2UuZXhwb3J0cz1hO2Z1bmN0aW9uIGkodCxlKXt2YXIgcj1uKGdldENvbXB1dGVkU3R5bGUodCkuZ2V0UHJvcGVydHlWYWx1ZShlKSk7cmV0dXJuIHJbMF0qYShyWzFdLHQpfWZ1bmN0aW9uIGEodCxlKXtzd2l0Y2goZT1lfHxkb2N1bWVudC5ib2R5LHQ9KHR8fCJweCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGUhPT13aW5kb3cmJmUhPT1kb2N1bWVudHx8KGU9ZG9jdW1lbnQuYm9keSksdCl7Y2FzZSIlIjpyZXR1cm4gZS5jbGllbnRIZWlnaHQvMTAwO2Nhc2UiY2giOmNhc2UiZXgiOnJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGVbImZvbnQtc2l6ZSJdPSIxMjgiK3QsZS5hcHBlbmRDaGlsZChyKTt2YXIgbj1pKHIsImZvbnQtc2l6ZSIpLzEyODtyZXR1cm4gZS5yZW1vdmVDaGlsZChyKSxufSh0LGUpO2Nhc2UiZW0iOnJldHVybiBpKGUsImZvbnQtc2l6ZSIpO2Nhc2UicmVtIjpyZXR1cm4gaShkb2N1bWVudC5ib2R5LCJmb250LXNpemUiKTtjYXNlInZ3IjpyZXR1cm4gd2luZG93LmlubmVyV2lkdGgvMTAwO2Nhc2UidmgiOnJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQvMTAwO2Nhc2Uidm1pbiI6cmV0dXJuIE1hdGgubWluKHdpbmRvdy5pbm5lcldpZHRoLHdpbmRvdy5pbm5lckhlaWdodCkvMTAwO2Nhc2Uidm1heCI6cmV0dXJuIE1hdGgubWF4KHdpbmRvdy5pbm5lcldpZHRoLHdpbmRvdy5pbm5lckhlaWdodCkvMTAwO2Nhc2UiaW4iOnJldHVybiA5NjtjYXNlImNtIjpyZXR1cm4gOTYvMi41NDtjYXNlIm1tIjpyZXR1cm4gOTYvMjUuNDtjYXNlInB0IjpyZXR1cm4gOTYvNzI7Y2FzZSJwYyI6cmV0dXJuIDE2fXJldHVybiAxfX0seyJwYXJzZS11bml0Ijo0NzN9XSw1NzU6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/bihyKTpuKCh0PXR8fHNlbGYpLnRvcG9qc29uPXQudG9wb2pzb258fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCl7cmV0dXJuIHR9ZnVuY3Rpb24gcih0KXtpZihudWxsPT10KXJldHVybiBlO3ZhciByLG4saT10LnNjYWxlWzBdLGE9dC5zY2FsZVsxXSxvPXQudHJhbnNsYXRlWzBdLHM9dC50cmFuc2xhdGVbMV07cmV0dXJuIGZ1bmN0aW9uKHQsZSl7ZXx8KHI9bj0wKTt2YXIgbD0yLGM9dC5sZW5ndGgsdT1uZXcgQXJyYXkoYyk7Zm9yKHVbMF09KHIrPXRbMF0pKmkrbyx1WzFdPShuKz10WzFdKSphK3M7bDxjOyl1W2xdPXRbbF0sKytsO3JldHVybiB1fX1mdW5jdGlvbiBuKHQpe3ZhciBlLG49cih0LnRyYW5zZm9ybSksaT0xLzAsYT1pLG89LWkscz0taTtmdW5jdGlvbiBsKHQpeyh0PW4odCkpWzBdPGkmJihpPXRbMF0pLHRbMF0+byYmKG89dFswXSksdFsxXTxhJiYoYT10WzFdKSx0WzFdPnMmJihzPXRbMV0pfWZ1bmN0aW9uIGModCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOnQuZ2VvbWV0cmllcy5mb3JFYWNoKGMpO2JyZWFrO2Nhc2UiUG9pbnQiOmwodC5jb29yZGluYXRlcyk7YnJlYWs7Y2FzZSJNdWx0aVBvaW50Ijp0LmNvb3JkaW5hdGVzLmZvckVhY2gobCl9fWZvcihlIGluIHQuYXJjcy5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxsPXQubGVuZ3RoOysrcjxsOykoZT1uKHRbcl0scikpWzBdPGkmJihpPWVbMF0pLGVbMF0+byYmKG89ZVswXSksZVsxXTxhJiYoYT1lWzFdKSxlWzFdPnMmJihzPWVbMV0pfSkpLHQub2JqZWN0cyljKHQub2JqZWN0c1tlXSk7cmV0dXJuW2ksYSxvLHNdfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj1lLmlkLG49ZS5iYm94LGk9bnVsbD09ZS5wcm9wZXJ0aWVzP3t9OmUucHJvcGVydGllcyxvPWEodCxlKTtyZXR1cm4gbnVsbD09ciYmbnVsbD09bj97dHlwZToiRmVhdHVyZSIscHJvcGVydGllczppLGdlb21ldHJ5Om99Om51bGw9PW4/e3R5cGU6IkZlYXR1cmUiLGlkOnIscHJvcGVydGllczppLGdlb21ldHJ5Om99Ont0eXBlOiJGZWF0dXJlIixpZDpyLGJib3g6bixwcm9wZXJ0aWVzOmksZ2VvbWV0cnk6b319ZnVuY3Rpb24gYSh0LGUpe3ZhciBuPXIodC50cmFuc2Zvcm0pLGk9dC5hcmNzO2Z1bmN0aW9uIGEodCxlKXtlLmxlbmd0aCYmZS5wb3AoKTtmb3IodmFyIHI9aVt0PDA/fnQ6dF0sYT0wLG89ci5sZW5ndGg7YTxvOysrYSllLnB1c2gobihyW2FdLGEpKTt0PDAmJmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5sZW5ndGgsaT1uLWU7aTwtLW47KXI9dFtpXSx0W2krK109dFtuXSx0W25dPXJ9KGUsbyl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbih0KX1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWEodFtyXSxlKTtyZXR1cm4gZS5sZW5ndGg8MiYmZS5wdXNoKGVbMF0pLGV9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9cyh0KTtlLmxlbmd0aDw0OyllLnB1c2goZVswXSk7cmV0dXJuIGV9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC5tYXAobCl9cmV0dXJuIGZ1bmN0aW9uIHQoZSl7dmFyIHIsbj1lLnR5cGU7c3dpdGNoKG4pe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjpyZXR1cm57dHlwZTpuLGdlb21ldHJpZXM6ZS5nZW9tZXRyaWVzLm1hcCh0KX07Y2FzZSJQb2ludCI6cj1vKGUuY29vcmRpbmF0ZXMpO2JyZWFrO2Nhc2UiTXVsdGlQb2ludCI6cj1lLmNvb3JkaW5hdGVzLm1hcChvKTticmVhaztjYXNlIkxpbmVTdHJpbmciOnI9cyhlLmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyPWUuYXJjcy5tYXAocyk7YnJlYWs7Y2FzZSJQb2x5Z29uIjpyPWMoZS5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6cj1lLmFyY3MubWFwKGMpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJue3R5cGU6bixjb29yZGluYXRlczpyfX0oZSl9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPXt9LG49e30saT17fSxhPVtdLG89LTE7ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgbiBpbiB0KXt2YXIgaT10W25dO2RlbGV0ZSBlW2kuc3RhcnRdLGRlbGV0ZSBpLnN0YXJ0LGRlbGV0ZSBpLmVuZCxpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JbdDwwP350OnRdPTF9KSksYS5wdXNoKGkpfX1yZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihyLG4pe3ZhciBpLGE9dC5hcmNzW3I8MD9+cjpyXTthLmxlbmd0aDwzJiYhYVsxXVswXSYmIWFbMV1bMV0mJihpPWVbKytvXSxlW29dPXIsZVtuXT1pKX0pKSxlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByLGEsbz1mdW5jdGlvbihlKXt2YXIgcixuPXQuYXJjc1tlPDA/fmU6ZV0saT1uWzBdO3QudHJhbnNmb3JtPyhyPVswLDBdLG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7clswXSs9dFswXSxyWzFdKz10WzFdfSkpKTpyPW5bbi5sZW5ndGgtMV07cmV0dXJuIGU8MD9bcixpXTpbaSxyXX0oZSkscz1vWzBdLGw9b1sxXTtpZihyPWlbc10paWYoZGVsZXRlIGlbci5lbmRdLHIucHVzaChlKSxyLmVuZD1sLGE9bltsXSl7ZGVsZXRlIG5bYS5zdGFydF07dmFyIGM9YT09PXI/cjpyLmNvbmNhdChhKTtuW2Muc3RhcnQ9ci5zdGFydF09aVtjLmVuZD1hLmVuZF09Y31lbHNlIG5bci5zdGFydF09aVtyLmVuZF09cjtlbHNlIGlmKHI9bltsXSlpZihkZWxldGUgbltyLnN0YXJ0XSxyLnVuc2hpZnQoZSksci5zdGFydD1zLGE9aVtzXSl7ZGVsZXRlIGlbYS5lbmRdO3ZhciB1PWE9PT1yP3I6YS5jb25jYXQocik7blt1LnN0YXJ0PWEuc3RhcnRdPWlbdS5lbmQ9ci5lbmRdPXV9ZWxzZSBuW3Iuc3RhcnRdPWlbci5lbmRdPXI7ZWxzZSBuWyhyPVtlXSkuc3RhcnQ9c109aVtyLmVuZD1sXT1yfSkpLHMoaSxuKSxzKG4saSksZS5mb3JFYWNoKChmdW5jdGlvbih0KXtyW3Q8MD9+dDp0XXx8YS5wdXNoKFt0XSl9KSksYX1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbixpLGE7aWYoYXJndW1lbnRzLmxlbmd0aD4xKW49bCh0LGUscik7ZWxzZSBmb3IoaT0wLG49bmV3IEFycmF5KGE9dC5hcmNzLmxlbmd0aCk7aTxhOysraSluW2ldPWk7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsYXJjczpvKHQsbil9fWZ1bmN0aW9uIGwodCxlLHIpe3ZhciBuLGk9W10sYT1bXTtmdW5jdGlvbiBvKHQpe3ZhciBlPXQ8MD9+dDp0OyhhW2VdfHwoYVtlXT1bXSkpLnB1c2goe2k6dCxnOm59KX1mdW5jdGlvbiBzKHQpe3QuZm9yRWFjaChvKX1mdW5jdGlvbiBsKHQpe3QuZm9yRWFjaChzKX1yZXR1cm4gZnVuY3Rpb24gdChlKXtzd2l0Y2gobj1lLGUudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmUuZ2VvbWV0cmllcy5mb3JFYWNoKHQpO2JyZWFrO2Nhc2UiTGluZVN0cmluZyI6cyhlLmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpjYXNlIlBvbHlnb24iOmwoZS5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6IWZ1bmN0aW9uKHQpe3QuZm9yRWFjaChsKX0oZS5hcmNzKX19KGUpLGEuZm9yRWFjaChudWxsPT1yP2Z1bmN0aW9uKHQpe2kucHVzaCh0WzBdLmkpfTpmdW5jdGlvbih0KXtyKHRbMF0uZyx0W3QubGVuZ3RoLTFdLmcpJiZpLnB1c2godFswXS5pKX0pLGl9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPXt9LG49W10saT1bXTtmdW5jdGlvbiBzKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKChmdW5jdGlvbihlKXsocltlPWU8MD9+ZTplXXx8KHJbZV09W10pKS5wdXNoKHQpfSkpfSkpLG4ucHVzaCh0KX1mdW5jdGlvbiBsKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxuPXQubGVuZ3RoLGk9dFtuLTFdLGE9MDsrK3I8bjspZT1pLGk9dFtyXSxhKz1lWzBdKmlbMV0tZVsxXSppWzBdO3JldHVybiBNYXRoLmFicyhhKX0oYSh0LHt0eXBlOiJQb2x5Z29uIixhcmNzOltlXX0pLmNvb3JkaW5hdGVzWzBdKX1yZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbiB0KGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjplLmdlb21ldHJpZXMuZm9yRWFjaCh0KTticmVhaztjYXNlIlBvbHlnb24iOnMoZS5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6ZS5hcmNzLmZvckVhY2gocyl9fSkpLG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoIXQuXyl7dmFyIGU9W10sbj1bdF07Zm9yKHQuXz0xLGkucHVzaChlKTt0PW4ucG9wKCk7KWUucHVzaCh0KSx0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7clt0PDA/fnQ6dF0uZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5ffHwodC5fPTEsbi5wdXNoKHQpKX0pKX0pKX0pKX19KSksbi5mb3JFYWNoKChmdW5jdGlvbih0KXtkZWxldGUgdC5ffSkpLHt0eXBlOiJNdWx0aVBvbHlnb24iLGFyY3M6aS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciBuLGk9W107aWYoZS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7clt0PDA/fnQ6dF0ubGVuZ3RoPDImJmkucHVzaCh0KX0pKX0pKX0pKSwobj0oaT1vKHQsaSkpLmxlbmd0aCk+MSlmb3IodmFyIGEscyxjPTEsdT1sKGlbMF0pO2M8bjsrK2MpKGE9bChpW2NdKSk+dSYmKHM9aVswXSxpWzBdPWlbY10saVtjXT1zLHU9YSk7cmV0dXJuIGl9KSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg+MH0pKX19ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuOyl7dmFyIGk9cituPj4+MTt0W2ldPGU/cj1pKzE6bj1pfXJldHVybiByfWZ1bmN0aW9uIGYodCl7aWYobnVsbD09dClyZXR1cm4gZTt2YXIgcixuLGk9dC5zY2FsZVswXSxhPXQuc2NhbGVbMV0sbz10LnRyYW5zbGF0ZVswXSxzPXQudHJhbnNsYXRlWzFdO3JldHVybiBmdW5jdGlvbih0LGUpe2V8fChyPW49MCk7dmFyIGw9MixjPXQubGVuZ3RoLHU9bmV3IEFycmF5KGMpLGY9TWF0aC5yb3VuZCgodFswXS1vKS9pKSxoPU1hdGgucm91bmQoKHRbMV0tcykvYSk7Zm9yKHVbMF09Zi1yLHI9Zix1WzFdPWgtbixuPWg7bDxjOyl1W2xdPXRbbF0sKytsO3JldHVybiB1fX10LmJib3g9bix0LmZlYXR1cmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJihlPXQub2JqZWN0c1tlXSksIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1lLnR5cGU/e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczplLmdlb21ldHJpZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gaSh0LGUpfSkpfTppKHQsZSl9LHQubWVyZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCxjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LHQubWVyZ2VBcmNzPWMsdC5tZXNoPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQscy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSx0Lm1lc2hBcmNzPXMsdC5uZWlnaGJvcnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10Lm1hcCgoZnVuY3Rpb24oKXtyZXR1cm5bXX0pKTtmdW5jdGlvbiBuKHQscil7dC5mb3JFYWNoKChmdW5jdGlvbih0KXt0PDAmJih0PX50KTt2YXIgbj1lW3RdO24/bi5wdXNoKHIpOmVbdF09W3JdfSkpfWZ1bmN0aW9uIGkodCxlKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe24odCxlKX0pKX12YXIgYT17TGluZVN0cmluZzpuLE11bHRpTGluZVN0cmluZzppLFBvbHlnb246aSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2kodCxlKX0pKX19O2Zvcih2YXIgbyBpbiB0LmZvckVhY2goKGZ1bmN0aW9uIHQoZSxyKXsiR2VvbWV0cnlDb2xsZWN0aW9uIj09PWUudHlwZT9lLmdlb21ldHJpZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dChlLHIpfSkpOmUudHlwZSBpbiBhJiZhW2UudHlwZV0oZS5hcmNzLHIpfSkpLGUpZm9yKHZhciBzPWVbb10sbD1zLmxlbmd0aCxjPTA7YzxsOysrYylmb3IodmFyIGY9YysxO2Y8bDsrK2Ype3ZhciBoLHA9c1tjXSxkPXNbZl07KGg9cltwXSlbbz11KGgsZCldIT09ZCYmaC5zcGxpY2UobywwLGQpLChoPXJbZF0pW289dShoLHApXSE9PXAmJmguc3BsaWNlKG8sMCxwKX1yZXR1cm4gcn0sdC5xdWFudGl6ZT1mdW5jdGlvbih0LGUpe2lmKHQudHJhbnNmb3JtKXRocm93IG5ldyBFcnJvcigiYWxyZWFkeSBxdWFudGl6ZWQiKTtpZihlJiZlLnNjYWxlKWw9dC5iYm94O2Vsc2V7aWYoISgocj1NYXRoLmZsb29yKGUpKT49MikpdGhyb3cgbmV3IEVycm9yKCJuIG11c3QgYmUgXHUyMjY1MiIpO3ZhciByLGk9KGw9dC5iYm94fHxuKHQpKVswXSxhPWxbMV0sbz1sWzJdLHM9bFszXTtlPXtzY2FsZTpbby1pPyhvLWkpLyhyLTEpOjEscy1hPyhzLWEpLyhyLTEpOjFdLHRyYW5zbGF0ZTpbaSxhXX19dmFyIGwsYyx1PWYoZSksaD10Lm9iamVjdHMscD17fTtmdW5jdGlvbiBkKHQpe3JldHVybiB1KHQpfWZ1bmN0aW9uIG0odCl7dmFyIGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmU9e3R5cGU6Ikdlb21ldHJ5Q29sbGVjdGlvbiIsZ2VvbWV0cmllczp0Lmdlb21ldHJpZXMubWFwKG0pfTticmVhaztjYXNlIlBvaW50IjplPXt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6ZCh0LmNvb3JkaW5hdGVzKX07YnJlYWs7Y2FzZSJNdWx0aVBvaW50IjplPXt0eXBlOiJNdWx0aVBvaW50Iixjb29yZGluYXRlczp0LmNvb3JkaW5hdGVzLm1hcChkKX07YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdH1yZXR1cm4gbnVsbCE9dC5pZCYmKGUuaWQ9dC5pZCksbnVsbCE9dC5iYm94JiYoZS5iYm94PXQuYmJveCksbnVsbCE9dC5wcm9wZXJ0aWVzJiYoZS5wcm9wZXJ0aWVzPXQucHJvcGVydGllcyksZX1mb3IoYyBpbiBoKXBbY109bShoW2NdKTtyZXR1cm57dHlwZToiVG9wb2xvZ3kiLGJib3g6bCx0cmFuc2Zvcm06ZSxvYmplY3RzOnAsYXJjczp0LmFyY3MubWFwKChmdW5jdGlvbih0KXt2YXIgZSxyPTAsbj0xLGk9dC5sZW5ndGgsYT1uZXcgQXJyYXkoaSk7Zm9yKGFbMF09dSh0WzBdLDApOysrcjxpOykoKGU9dSh0W3JdLHIpKVswXXx8ZVsxXSkmJihhW24rK109ZSk7cmV0dXJuIDE9PT1uJiYoYVtuKytdPVswLDBdKSxhLmxlbmd0aD1uLGF9KSl9fSx0LnRyYW5zZm9ybT1yLHQudW50cmFuc2Zvcm09ZixPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSw1NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5jZW50ZXJ8fFswLDAsMF0scj10LnVwfHxbMCwxLDBdLG49dC5yaWdodHx8ZihyKSxpPXQucmFkaXVzfHwxLGE9dC50aGV0YXx8MCx1PXQucGhpfHwwO2lmKGU9W10uc2xpY2UuY2FsbChlLDAsMykscj1bXS5zbGljZS5jYWxsKHIsMCwzKSxzKHIsciksbj1bXS5zbGljZS5jYWxsKG4sMCwzKSxzKG4sbiksImV5ZSJpbiB0KXt2YXIgcD10LmV5ZSxkPVtwWzBdLWVbMF0scFsxXS1lWzFdLHBbMl0tZVsyXV07byhuLGQsciksYyhuWzBdLG5bMV0sblsyXSk8MWUtNj9uPWYocik6cyhuLG4pLGk9YyhkWzBdLGRbMV0sZFsyXSk7dmFyIG09bChyLGQpL2ksZz1sKG4sZCkvaTt1PU1hdGguYWNvcyhtKSxhPU1hdGguYWNvcyhnKX1yZXR1cm4gaT1NYXRoLmxvZyhpKSxuZXcgaCh0Lnpvb21NaW4sdC56b29tTWF4LGUscixuLGksYSx1KX07dmFyIG49dCgiZmlsdGVyZWQtdmVjdG9yIiksaT10KCJnbC1tYXQ0L2ludmVydCIpLGE9dCgiZ2wtbWF0NC9yb3RhdGUiKSxvPXQoImdsLXZlYzMvY3Jvc3MiKSxzPXQoImdsLXZlYzMvbm9ybWFsaXplIiksbD10KCJnbC12ZWMzL2RvdCIpO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIE1hdGgubWluKDEsTWF0aC5tYXgoLTEsdCkpfWZ1bmN0aW9uIGYodCl7dmFyIGU9TWF0aC5hYnModFswXSkscj1NYXRoLmFicyh0WzFdKSxuPU1hdGguYWJzKHRbMl0pLGk9WzAsMCwwXTtlPk1hdGgubWF4KHIsbik/aVsyXT0xOnI+TWF0aC5tYXgoZSxuKT9pWzBdPTE6aVsxXT0xO2Zvcih2YXIgYT0wLG89MCxsPTA7bDwzOysrbClhKz10W2xdKnRbbF0sbys9aVtsXSp0W2xdO2ZvcihsPTA7bDwzOysrbClpW2xdLT1vL2EqdFtsXTtyZXR1cm4gcyhpLGkpLGl9ZnVuY3Rpb24gaCh0LGUscixpLGEsbyxzLGwpe3RoaXMuY2VudGVyPW4ociksdGhpcy51cD1uKGkpLHRoaXMucmlnaHQ9bihhKSx0aGlzLnJhZGl1cz1uKFtvXSksdGhpcy5hbmdsZT1uKFtzLGxdKSx0aGlzLmFuZ2xlLmJvdW5kcz1bWy0xLzAsLU1hdGguUEkvMl0sWzEvMCxNYXRoLlBJLzJdXSx0aGlzLnNldERpc3RhbmNlTGltaXRzKHQsZSksdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLmNlbnRlci5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVXA9dGhpcy51cC5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUmlnaHQ9dGhpcy5yaWdodC5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMucmFkaXVzLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRBbmdsZT10aGlzLmFuZ2xlLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRUb3dhcmQ9WzAsMCwwXSx0aGlzLmNvbXB1dGVkRXllPVswLDAsMF0sdGhpcy5jb21wdXRlZE1hdHJpeD1uZXcgQXJyYXkoMTYpO2Zvcih2YXIgYz0wO2M8MTY7KytjKXRoaXMuY29tcHV0ZWRNYXRyaXhbY109LjU7dGhpcy5yZWNhbGNNYXRyaXgoMCl9dmFyIHA9aC5wcm90b3R5cGU7cC5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3Q9dD4wP01hdGgubG9nKHQpOi0xLzAsZT1lPjA/TWF0aC5sb2coZSk6MS8wLGU9TWF0aC5tYXgoZSx0KSx0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF09dCx0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF09ZX0scC5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJhZGl1cy5ib3VuZHNbMF07cmV0dXJuIHQ/KHRbMF09TWF0aC5leHAoZVswXVswXSksdFsxXT1NYXRoLmV4cChlWzFdWzBdKSx0KTpbTWF0aC5leHAoZVswXVswXSksTWF0aC5leHAoZVsxXVswXSldfSxwLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5jdXJ2ZSh0KSx0aGlzLnVwLmN1cnZlKHQpLHRoaXMucmlnaHQuY3VydmUodCksdGhpcy5yYWRpdXMuY3VydmUodCksdGhpcy5hbmdsZS5jdXJ2ZSh0KTtmb3IodmFyIGU9dGhpcy5jb21wdXRlZFVwLHI9dGhpcy5jb21wdXRlZFJpZ2h0LG49MCxpPTAsYT0wO2E8MzsrK2EpaSs9ZVthXSpyW2FdLG4rPWVbYV0qZVthXTt2YXIgbD1NYXRoLnNxcnQobiksdT0wO2ZvcihhPTA7YTwzOysrYSlyW2FdLT1lW2FdKmkvbix1Kz1yW2FdKnJbYV0sZVthXS89bDt2YXIgZj1NYXRoLnNxcnQodSk7Zm9yKGE9MDthPDM7KythKXJbYV0vPWY7dmFyIGg9dGhpcy5jb21wdXRlZFRvd2FyZDtvKGgsZSxyKSxzKGgsaCk7dmFyIHA9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSksZD10aGlzLmNvbXB1dGVkQW5nbGVbMF0sbT10aGlzLmNvbXB1dGVkQW5nbGVbMV0sZz1NYXRoLmNvcyhkKSx2PU1hdGguc2luKGQpLHk9TWF0aC5jb3MobSkseD1NYXRoLnNpbihtKSxiPXRoaXMuY29tcHV0ZWRDZW50ZXIsXz1nKnksdz12KnksVD14LGs9LWcqeCxBPS12KngsTT15LFM9dGhpcy5jb21wdXRlZEV5ZSxFPXRoaXMuY29tcHV0ZWRNYXRyaXg7Zm9yKGE9MDthPDM7KythKXt2YXIgTD1fKnJbYV0rdypoW2FdK1QqZVthXTtFWzQqYSsxXT1rKnJbYV0rQSpoW2FdK00qZVthXSxFWzQqYSsyXT1MLEVbNCphKzNdPTB9dmFyIEM9RVsxXSxQPUVbNV0sST1FWzldLE89RVsyXSx6PUVbNl0sRD1FWzEwXSxSPVAqRC1JKnosRj1JKk8tQypELEI9Qyp6LVAqTyxOPWMoUixGLEIpO1IvPU4sRi89TixCLz1OLEVbMF09UixFWzRdPUYsRVs4XT1CO2ZvcihhPTA7YTwzOysrYSlTW2FdPWJbYV0rRVsyKzQqYV0qcDtmb3IoYT0wO2E8MzsrK2Epe3U9MDtmb3IodmFyIGo9MDtqPDM7KytqKXUrPUVbYSs0KmpdKlNbal07RVsxMithXT0tdX1FWzE1XT0xfSxwLmdldE1hdHJpeD1mdW5jdGlvbih0LGUpe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciByPXRoaXMuY29tcHV0ZWRNYXRyaXg7aWYoZSl7Zm9yKHZhciBuPTA7bjwxNjsrK24pZVtuXT1yW25dO3JldHVybiBlfXJldHVybiByfTt2YXIgZD1bMCwwLDBdO3Aucm90YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHRoaXMuYW5nbGUubW92ZSh0LGUsciksbil7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeDtkWzBdPWlbMl0sZFsxXT1pWzZdLGRbMl09aVsxMF07Zm9yKHZhciBvPXRoaXMuY29tcHV0ZWRVcCxzPXRoaXMuY29tcHV0ZWRSaWdodCxsPXRoaXMuY29tcHV0ZWRUb3dhcmQsYz0wO2M8MzsrK2MpaVs0KmNdPW9bY10saVs0KmMrMV09c1tjXSxpWzQqYysyXT1sW2NdO2EoaSxpLG4sZCk7Zm9yKGM9MDtjPDM7KytjKW9bY109aVs0KmNdLHNbY109aVs0KmMrMV07dGhpcy51cC5zZXQodCxvWzBdLG9bMV0sb1syXSksdGhpcy5yaWdodC5zZXQodCxzWzBdLHNbMV0sc1syXSl9fSxwLnBhbj1mdW5jdGlvbih0LGUscixuKXtlPWV8fDAscj1yfHwwLG49bnx8MCx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkTWF0cml4LGE9KE1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLGlbMV0pLG89aVs1XSxzPWlbOV0sbD1jKGEsbyxzKTthLz1sLG8vPWwscy89bDt2YXIgdT1pWzBdLGY9aVs0XSxoPWlbOF0scD11KmErZipvK2gqcyxkPWModS09YSpwLGYtPW8qcCxoLT1zKnApLG09KHUvPWQpKmUrYSpyLGc9KGYvPWQpKmUrbypyLHY9KGgvPWQpKmUrcypyO3RoaXMuY2VudGVyLm1vdmUodCxtLGcsdik7dmFyIHk9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7eT1NYXRoLm1heCgxZS00LHkrbiksdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coeSkpfSxwLnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLmNlbnRlci5tb3ZlKHQsZXx8MCxyfHwwLG58fDApfSxwLnNldE1hdHJpeD1mdW5jdGlvbih0LGUscixuKXt2YXIgYT0xOyJudW1iZXIiPT10eXBlb2YgciYmKGE9MHxyKSwoYTwwfHxhPjMpJiYoYT0xKTt2YXIgbz0oYSsyKSUzO2V8fCh0aGlzLnJlY2FsY01hdHJpeCh0KSxlPXRoaXMuY29tcHV0ZWRNYXRyaXgpO3ZhciBzPWVbYV0sbD1lW2ErNF0sZj1lW2ErOF07aWYobil7dmFyIGg9TWF0aC5hYnMocykscD1NYXRoLmFicyhsKSxkPU1hdGguYWJzKGYpLG09TWF0aC5tYXgoaCxwLGQpO2g9PT1tPyhzPXM8MD8tMToxLGw9Zj0wKTpkPT09bT8oZj1mPDA/LTE6MSxzPWw9MCk6KGw9bDwwPy0xOjEscz1mPTApfWVsc2V7dmFyIGc9YyhzLGwsZik7cy89ZyxsLz1nLGYvPWd9dmFyIHYseSx4PWVbb10sYj1lW28rNF0sXz1lW28rOF0sdz14KnMrYipsK18qZixUPWMoeC09cyp3LGItPWwqdyxfLT1mKncpLGs9bCooXy89VCktZiooYi89VCksQT1mKih4Lz1UKS1zKl8sTT1zKmItbCp4LFM9YyhrLEEsTSk7aWYoay89UyxBLz1TLE0vPVMsdGhpcy5jZW50ZXIuanVtcCh0LHEsRyxZKSx0aGlzLnJhZGl1cy5pZGxlKHQpLHRoaXMudXAuanVtcCh0LHMsbCxmKSx0aGlzLnJpZ2h0Lmp1bXAodCx4LGIsXyksMj09PWEpe3ZhciBFPWVbMV0sTD1lWzVdLEM9ZVs5XSxQPUUqeCtMKmIrQypfLEk9RSprK0wqQStDKk07dj1SPDA/LU1hdGguUEkvMjpNYXRoLlBJLzIseT1NYXRoLmF0YW4yKEksUCl9ZWxzZXt2YXIgTz1lWzJdLHo9ZVs2XSxEPWVbMTBdLFI9TypzK3oqbCtEKmYsRj1PKngreipiK0QqXyxCPU8qayt6KkErRCpNO3Y9TWF0aC5hc2luKHUoUikpLHk9TWF0aC5hdGFuMihCLEYpfXRoaXMuYW5nbGUuanVtcCh0LHksdiksdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIE49ZVsyXSxqPWVbNl0sVT1lWzEwXSxWPXRoaXMuY29tcHV0ZWRNYXRyaXg7aShWLGUpO3ZhciBIPVZbMTVdLHE9VlsxMl0vSCxHPVZbMTNdL0gsWT1WWzE0XS9ILFc9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7dGhpcy5jZW50ZXIuanVtcCh0LHEtTipXLEctaipXLFktVSpXKX0scC5sYXN0VD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heCh0aGlzLmNlbnRlci5sYXN0VCgpLHRoaXMudXAubGFzdFQoKSx0aGlzLnJpZ2h0Lmxhc3RUKCksdGhpcy5yYWRpdXMubGFzdFQoKSx0aGlzLmFuZ2xlLmxhc3RUKCkpfSxwLmlkbGU9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuaWRsZSh0KSx0aGlzLnVwLmlkbGUodCksdGhpcy5yaWdodC5pZGxlKHQpLHRoaXMucmFkaXVzLmlkbGUodCksdGhpcy5hbmdsZS5pZGxlKHQpfSxwLmZsdXNoPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmZsdXNoKHQpLHRoaXMudXAuZmx1c2godCksdGhpcy5yaWdodC5mbHVzaCh0KSx0aGlzLnJhZGl1cy5mbHVzaCh0KSx0aGlzLmFuZ2xlLmZsdXNoKHQpfSxwLnNldERpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7ZT4wJiZ0aGlzLnJhZGl1cy5zZXQodCxNYXRoLmxvZyhlKSl9LHAubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLGU9ZXx8dGhpcy5jb21wdXRlZEV5ZSxyPXJ8fHRoaXMuY29tcHV0ZWRDZW50ZXI7dmFyIGk9KG49bnx8dGhpcy5jb21wdXRlZFVwKVswXSxhPW5bMV0sbz1uWzJdLHM9YyhpLGEsbyk7aWYoIShzPDFlLTYpKXtpLz1zLGEvPXMsby89czt2YXIgbD1lWzBdLXJbMF0sZj1lWzFdLXJbMV0saD1lWzJdLXJbMl0scD1jKGwsZixoKTtpZighKHA8MWUtNikpe2wvPXAsZi89cCxoLz1wO3ZhciBkPXRoaXMuY29tcHV0ZWRSaWdodCxtPWRbMF0sZz1kWzFdLHY9ZFsyXSx5PWkqbSthKmcrbyp2LHg9YyhtLT15KmksZy09eSphLHYtPXkqbyk7aWYoISh4PC4wMSYmKHg9YyhtPWEqaC1vKmYsZz1vKmwtaSpoLHY9aSpmLWEqbCkpPDFlLTYpKXttLz14LGcvPXgsdi89eCx0aGlzLnVwLnNldCh0LGksYSxvKSx0aGlzLnJpZ2h0LnNldCh0LG0sZyx2KSx0aGlzLmNlbnRlci5zZXQodCxyWzBdLHJbMV0sclsyXSksdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2cocCkpO3ZhciBiPWEqdi1vKmcsXz1vKm0taSp2LHc9aSpnLWEqbSxUPWMoYixfLHcpLGs9aSpsK2EqZitvKmgsQT1tKmwrZypmK3YqaCxNPShiLz1UKSpsKyhfLz1UKSpmKyh3Lz1UKSpoLFM9TWF0aC5hc2luKHUoaykpLEU9TWF0aC5hdGFuMihNLEEpLEw9dGhpcy5hbmdsZS5fc3RhdGUsQz1MW0wubGVuZ3RoLTFdLFA9TFtMLmxlbmd0aC0yXTtDJT0yKk1hdGguUEk7dmFyIEk9TWF0aC5hYnMoQysyKk1hdGguUEktRSksTz1NYXRoLmFicyhDLUUpLHo9TWF0aC5hYnMoQy0yKk1hdGguUEktRSk7STxPJiYoQys9MipNYXRoLlBJKSx6PE8mJihDLT0yKk1hdGguUEkpLHRoaXMuYW5nbGUuanVtcCh0aGlzLmFuZ2xlLmxhc3RUKCksQyxQKSx0aGlzLmFuZ2xlLnNldCh0LEUsUyl9fX19fSx7ImZpbHRlcmVkLXZlY3RvciI6MjQzLCJnbC1tYXQ0L2ludmVydCI6Mjg3LCJnbC1tYXQ0L3JvdGF0ZSI6MjkzLCJnbC12ZWMzL2Nyb3NzIjozNTAsImdsLXZlYzMvZG90IjozNTUsImdsLXZlYzMvbm9ybWFsaXplIjozNzJ9XSw1Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10KmUsYT1uKnQsbz1hLShhLXQpLHM9dC1vLGw9biplLGM9bC0obC1lKSx1PWUtYyxmPXMqdS0oaS1vKmMtcypjLW8qdSk7aWYocilyZXR1cm4gclswXT1mLHJbMV09aSxyO3JldHVybltmLGldfTt2YXIgbj0rKE1hdGgucG93KDIsMjcpKzEpfSx7fV0sNTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49dCtlLGk9bi10LGE9ZS1pLG89dC0obi1pKTtpZihyKXJldHVybiByWzBdPW8rYSxyWzFdPW4scjtyZXR1cm5bbythLG5dfX0se31dLDU3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9wcm90b3R5cGUvaXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpcmV0dXJuITE7aWYoIWhhc093blByb3BlcnR5LmNhbGwodCwibGVuZ3RoIikpcmV0dXJuITE7dHJ5e2lmKCJudW1iZXIiIT10eXBlb2YgdC5sZW5ndGgpcmV0dXJuITE7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQuY2FsbClyZXR1cm4hMTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdC5hcHBseSlyZXR1cm4hMX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4hbih0KX19LHsiLi4vcHJvdG90eXBlL2lzIjo1ODZ9XSw1ODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vdmFsdWUvaXMiKSxpPXQoIi4uL29iamVjdC9pcyIpLGE9dCgiLi4vc3RyaW5nL2NvZXJjZSIpLG89dCgiLi90by1zaG9ydC1zdHJpbmciKSxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucmVwbGFjZSgiJXYiLG8oZSkpfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKCFpKHIpKXRocm93IG5ldyBUeXBlRXJyb3IocyhlLHQpKTtpZighbih0KSl7aWYoImRlZmF1bHQiaW4gcilyZXR1cm4gci5kZWZhdWx0O2lmKHIuaXNPcHRpb25hbClyZXR1cm4gbnVsbH12YXIgbz1hKHIuZXJyb3JNZXNzYWdlKTt0aHJvdyBuKG8pfHwobz1lKSxuZXcgVHlwZUVycm9yKHMobyx0KSl9fSx7Ii4uL29iamVjdC9pcyI6NTgzLCIuLi9zdHJpbmcvY29lcmNlIjo1ODcsIi4uL3ZhbHVlL2lzIjo1ODksIi4vdG8tc2hvcnQtc3RyaW5nIjo1ODJ9XSw1ODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gdC50b1N0cmluZygpfWNhdGNoKGUpe3RyeXtyZXR1cm4gU3RyaW5nKHQpfWNhdGNoKHQpe3JldHVybiBudWxsfX19fSx7fV0sNTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2FmZS10by1zdHJpbmciKSxpPS9bXG5cclx1MjAyOFx1MjAyOV0vZztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bih0KTtyZXR1cm4gbnVsbD09PWU/IjxOb24tY29lcmNpYmxlIHRvIHN0cmluZyB2YWx1ZT4iOihlLmxlbmd0aD4xMDAmJihlPWUuc2xpY2UoMCw5OSkrIlx1MjAyNiIpLGU9ZS5yZXBsYWNlKGksKGZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIlxuIjpyZXR1cm4iXFxuIjtjYXNlIlxyIjpyZXR1cm4iXFxyIjtjYXNlIlx1MjAyOCI6cmV0dXJuIlxcdTIwMjgiO2Nhc2UiXHUyMDI5IjpyZXR1cm4iXFx1MjAyOSI7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgY2hhcmFjdGVyIil9fSkpKX19LHsiLi9zYWZlLXRvLXN0cmluZyI6NTgxfV0sNTgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3ZhbHVlL2lzIiksaT17b2JqZWN0OiEwLGZ1bmN0aW9uOiEwLHVuZGVmaW5lZDohMH07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhbih0KSYmaGFzT3duUHJvcGVydHkuY2FsbChpLHR5cGVvZiB0KX19LHsiLi4vdmFsdWUvaXMiOjU4OX1dLDU4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIvcmVzb2x2ZS1leGNlcHRpb24iKSxpPXQoIi4vaXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCk/dDpuKHQsIiV2IGlzIG5vdCBhIHBsYWluIGZ1bmN0aW9uIixhcmd1bWVudHNbMV0pfX0seyIuLi9saWIvcmVzb2x2ZS1leGNlcHRpb24iOjU4MCwiLi9pcyI6NTg1fV0sNTg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Z1bmN0aW9uL2lzIiksaT0vXlxzKmNsYXNzW1xzey99XS8sYT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhbih0KSYmIWkudGVzdChhLmNhbGwodCkpfX0seyIuLi9mdW5jdGlvbi9pcyI6NTc5fV0sNTg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL29iamVjdC9pcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSlyZXR1cm4hMTt0cnl7cmV0dXJuISF0LmNvbnN0cnVjdG9yJiZ0LmNvbnN0cnVjdG9yLnByb3RvdHlwZT09PXR9Y2F0Y2godCl7cmV0dXJuITF9fX0seyIuLi9vYmplY3QvaXMiOjU4M31dLDU4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi92YWx1ZS9pcyIpLGk9dCgiLi4vb2JqZWN0L2lzIiksYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSlyZXR1cm4gbnVsbDtpZihpKHQpKXt2YXIgZT10LnRvU3RyaW5nO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXJldHVybiBudWxsO2lmKGU9PT1hKXJldHVybiBudWxsfXRyeXtyZXR1cm4iIit0fWNhdGNoKHQpe3JldHVybiBudWxsfX19LHsiLi4vb2JqZWN0L2lzIjo1ODMsIi4uL3ZhbHVlL2lzIjo1ODl9XSw1ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliL3Jlc29sdmUtZXhjZXB0aW9uIiksaT10KCIuL2lzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpP3Q6bih0LCJDYW5ub3QgdXNlICV2Iixhcmd1bWVudHNbMV0pfX0seyIuLi9saWIvcmVzb2x2ZS1leGNlcHRpb24iOjU4MCwiLi9pcyI6NTg5fV0sNTg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dH19LHt9XSw1OTA6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpdC10d2lkZGxlIiksaT10KCJkdXAiKSxhPXQoImJ1ZmZlciIpLkJ1ZmZlcjtlLl9fVFlQRURBUlJBWV9QT09MfHwoZS5fX1RZUEVEQVJSQVlfUE9PTD17VUlOVDg6aShbMzIsMF0pLFVJTlQxNjppKFszMiwwXSksVUlOVDMyOmkoWzMyLDBdKSxCSUdVSU5UNjQ6aShbMzIsMF0pLElOVDg6aShbMzIsMF0pLElOVDE2OmkoWzMyLDBdKSxJTlQzMjppKFszMiwwXSksQklHSU5UNjQ6aShbMzIsMF0pLEZMT0FUOmkoWzMyLDBdKSxET1VCTEU6aShbMzIsMF0pLERBVEE6aShbMzIsMF0pLFVJTlQ4QzppKFszMiwwXSksQlVGRkVSOmkoWzMyLDBdKX0pO3ZhciBvPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXkscz0idW5kZWZpbmVkIiE9dHlwZW9mIEJpZ1VpbnQ2NEFycmF5LGw9InVuZGVmaW5lZCIhPXR5cGVvZiBCaWdJbnQ2NEFycmF5LGM9ZS5fX1RZUEVEQVJSQVlfUE9PTDtjLlVJTlQ4Q3x8KGMuVUlOVDhDPWkoWzMyLDBdKSksYy5CSUdVSU5UNjR8fChjLkJJR1VJTlQ2ND1pKFszMiwwXSkpLGMuQklHSU5UNjR8fChjLkJJR0lOVDY0PWkoWzMyLDBdKSksYy5CVUZGRVJ8fChjLkJVRkZFUj1pKFszMiwwXSkpO3ZhciB1PWMuREFUQSxmPWMuQlVGRkVSO2Z1bmN0aW9uIGgodCl7aWYodCl7dmFyIGU9dC5sZW5ndGh8fHQuYnl0ZUxlbmd0aCxyPW4ubG9nMihlKTt1W3JdLnB1c2godCl9fWZ1bmN0aW9uIHAodCl7dD1uLm5leHRQb3cyKHQpO3ZhciBlPW4ubG9nMih0KSxyPXVbZV07cmV0dXJuIHIubGVuZ3RoPjA/ci5wb3AoKTpuZXcgQXJyYXlCdWZmZXIodCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkocCh0KSwwLHQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIG5ldyBVaW50MTZBcnJheShwKDIqdCksMCx0KX1mdW5jdGlvbiBnKHQpe3JldHVybiBuZXcgVWludDMyQXJyYXkocCg0KnQpLDAsdCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4gbmV3IEludDhBcnJheShwKHQpLDAsdCl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gbmV3IEludDE2QXJyYXkocCgyKnQpLDAsdCl9ZnVuY3Rpb24geCh0KXtyZXR1cm4gbmV3IEludDMyQXJyYXkocCg0KnQpLDAsdCl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gbmV3IEZsb2F0MzJBcnJheShwKDQqdCksMCx0KX1mdW5jdGlvbiBfKHQpe3JldHVybiBuZXcgRmxvYXQ2NEFycmF5KHAoOCp0KSwwLHQpfWZ1bmN0aW9uIHcodCl7cmV0dXJuIG8/bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHAodCksMCx0KTpkKHQpfWZ1bmN0aW9uIFQodCl7cmV0dXJuIHM/bmV3IEJpZ1VpbnQ2NEFycmF5KHAoOCp0KSwwLHQpOm51bGx9ZnVuY3Rpb24gayh0KXtyZXR1cm4gbD9uZXcgQmlnSW50NjRBcnJheShwKDgqdCksMCx0KTpudWxsfWZ1bmN0aW9uIEEodCl7cmV0dXJuIG5ldyBEYXRhVmlldyhwKHQpLDAsdCl9ZnVuY3Rpb24gTSh0KXt0PW4ubmV4dFBvdzIodCk7dmFyIGU9bi5sb2cyKHQpLHI9ZltlXTtyZXR1cm4gci5sZW5ndGg+MD9yLnBvcCgpOm5ldyBhKHQpfXIuZnJlZT1mdW5jdGlvbih0KXtpZihhLmlzQnVmZmVyKHQpKWZbbi5sb2cyKHQubGVuZ3RoKV0ucHVzaCh0KTtlbHNle2lmKCJbb2JqZWN0IEFycmF5QnVmZmVyXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkmJih0PXQuYnVmZmVyKSwhdClyZXR1cm47dmFyIGU9dC5sZW5ndGh8fHQuYnl0ZUxlbmd0aCxyPTB8bi5sb2cyKGUpO3Vbcl0ucHVzaCh0KX19LHIuZnJlZVVpbnQ4PXIuZnJlZVVpbnQxNj1yLmZyZWVVaW50MzI9ci5mcmVlQmlnVWludDY0PXIuZnJlZUludDg9ci5mcmVlSW50MTY9ci5mcmVlSW50MzI9ci5mcmVlQmlnSW50NjQ9ci5mcmVlRmxvYXQzMj1yLmZyZWVGbG9hdD1yLmZyZWVGbG9hdDY0PXIuZnJlZURvdWJsZT1yLmZyZWVVaW50OENsYW1wZWQ9ci5mcmVlRGF0YVZpZXc9ZnVuY3Rpb24odCl7aCh0LmJ1ZmZlcil9LHIuZnJlZUFycmF5QnVmZmVyPWgsci5mcmVlQnVmZmVyPWZ1bmN0aW9uKHQpe2Zbbi5sb2cyKHQubGVuZ3RoKV0ucHVzaCh0KX0sci5tYWxsb2M9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lfHwiYXJyYXlidWZmZXIiPT09ZSlyZXR1cm4gcCh0KTtzd2l0Y2goZSl7Y2FzZSJ1aW50OCI6cmV0dXJuIGQodCk7Y2FzZSJ1aW50MTYiOnJldHVybiBtKHQpO2Nhc2UidWludDMyIjpyZXR1cm4gZyh0KTtjYXNlImludDgiOnJldHVybiB2KHQpO2Nhc2UiaW50MTYiOnJldHVybiB5KHQpO2Nhc2UiaW50MzIiOnJldHVybiB4KHQpO2Nhc2UiZmxvYXQiOmNhc2UiZmxvYXQzMiI6cmV0dXJuIGIodCk7Y2FzZSJkb3VibGUiOmNhc2UiZmxvYXQ2NCI6cmV0dXJuIF8odCk7Y2FzZSJ1aW50OF9jbGFtcGVkIjpyZXR1cm4gdyh0KTtjYXNlImJpZ2ludDY0IjpyZXR1cm4gayh0KTtjYXNlImJpZ3VpbnQ2NCI6cmV0dXJuIFQodCk7Y2FzZSJidWZmZXIiOnJldHVybiBNKHQpO2Nhc2UiZGF0YSI6Y2FzZSJkYXRhdmlldyI6cmV0dXJuIEEodCk7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH0sci5tYWxsb2NBcnJheUJ1ZmZlcj1wLHIubWFsbG9jVWludDg9ZCxyLm1hbGxvY1VpbnQxNj1tLHIubWFsbG9jVWludDMyPWcsci5tYWxsb2NJbnQ4PXYsci5tYWxsb2NJbnQxNj15LHIubWFsbG9jSW50MzI9eCxyLm1hbGxvY0Zsb2F0MzI9ci5tYWxsb2NGbG9hdD1iLHIubWFsbG9jRmxvYXQ2ND1yLm1hbGxvY0RvdWJsZT1fLHIubWFsbG9jVWludDhDbGFtcGVkPXcsci5tYWxsb2NCaWdVaW50NjQ9VCxyLm1hbGxvY0JpZ0ludDY0PWssci5tYWxsb2NEYXRhVmlldz1BLHIubWFsbG9jQnVmZmVyPU0sci5jbGVhckNhY2hlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDwzMjsrK3QpYy5VSU5UOFt0XS5sZW5ndGg9MCxjLlVJTlQxNlt0XS5sZW5ndGg9MCxjLlVJTlQzMlt0XS5sZW5ndGg9MCxjLklOVDhbdF0ubGVuZ3RoPTAsYy5JTlQxNlt0XS5sZW5ndGg9MCxjLklOVDMyW3RdLmxlbmd0aD0wLGMuRkxPQVRbdF0ubGVuZ3RoPTAsYy5ET1VCTEVbdF0ubGVuZ3RoPTAsYy5CSUdVSU5UNjRbdF0ubGVuZ3RoPTAsYy5CSUdJTlQ2NFt0XS5sZW5ndGg9MCxjLlVJTlQ4Q1t0XS5sZW5ndGg9MCx1W3RdLmxlbmd0aD0wLGZbdF0ubGVuZ3RoPTB9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJiaXQtdHdpZGRsZSI6MTAxLGJ1ZmZlcjoxMTIsZHVwOjE3N31dLDU5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMucm9vdHM9bmV3IEFycmF5KHQpLHRoaXMucmFua3M9bmV3IEFycmF5KHQpO2Zvcih2YXIgZT0wO2U8dDsrK2UpdGhpcy5yb290c1tlXT1lLHRoaXMucmFua3NbZV09MH1lLmV4cG9ydHM9bjt2YXIgaT1uLnByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwibGVuZ3RoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdHMubGVuZ3RofX0pLGkubWFrZVNldD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucm9vdHMubGVuZ3RoO3JldHVybiB0aGlzLnJvb3RzLnB1c2godCksdGhpcy5yYW5rcy5wdXNoKDApLHR9LGkuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dCxyPXRoaXMucm9vdHM7clt0XSE9PXQ7KXQ9clt0XTtmb3IoO3JbZV0hPT10Oyl7dmFyIG49cltlXTtyW2VdPXQsZT1ufXJldHVybiB0fSxpLmxpbms9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmZpbmQodCksbj10aGlzLmZpbmQoZSk7aWYociE9PW4pe3ZhciBpPXRoaXMucmFua3MsYT10aGlzLnJvb3RzLG89aVtyXSxzPWlbbl07bzxzP2Fbcl09bjpzPG8/YVtuXT1yOihhW25dPXIsKytpW3JdKX19fSx7fV0sNTkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIDA9PT10Lmxlbmd0aD90OmU/KHJ8fHQuc29ydChlKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLG49dC5sZW5ndGgsaT10WzBdLGE9dFswXSxvPTE7bzxuOysrbylpZihhPWksZShpPXRbb10sYSkpe2lmKG89PT1yKXtyKys7Y29udGludWV9dFtyKytdPWl9cmV0dXJuIHQubGVuZ3RoPXIsdH0odCxlKSk6KHJ8fHQuc29ydCgpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLHI9dC5sZW5ndGgsbj10WzBdLGk9dFswXSxhPTE7YTxyOysrYSxpPW4paWYoaT1uLChuPXRbYV0pIT09aSl7aWYoYT09PWUpe2UrKztjb250aW51ZX10W2UrK109bn1yZXR1cm4gdC5sZW5ndGg9ZSx0fSh0KSl9fSx7fV0sNTkzOltmdW5jdGlvbih0LGUscil7dmFyIG49L1tcJ1wiXS87ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PyhuLnRlc3QodC5jaGFyQXQoMCkpJiYodD10LnN1YnN0cigxKSksbi50ZXN0KHQuY2hhckF0KHQubGVuZ3RoLTEpKSYmKHQ9dC5zdWJzdHIoMCx0Lmxlbmd0aC0xKSksdCk6IiJ9fSx7fV0sNTk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7QXJyYXkuaXNBcnJheShyKXx8KHI9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMikpO2Zvcih2YXIgbj0wLGk9ci5sZW5ndGg7bjxpO24rKyl7dmFyIGE9cltuXTtmb3IodmFyIG8gaW4gYSlpZigodm9pZCAwPT09ZVtvXXx8QXJyYXkuaXNBcnJheShlW29dKXx8dFtvXSE9PWVbb10pJiZvIGluIGUpe3ZhciBzO2lmKCEwPT09YVtvXSlzPWVbb107ZWxzZXtpZighMT09PWFbb10pY29udGludWU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGFbb10mJnZvaWQgMD09PShzPWFbb10oZVtvXSx0LGUpKSljb250aW51ZX10W29dPXN9fXJldHVybiB0fX0se31dLDU5NTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXsoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUpe3RyeXtpZighdC5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2godCl7cmV0dXJuITF9dmFyIHI9dC5sb2NhbFN0b3JhZ2VbZV07cmV0dXJuIG51bGwhPXImJiJ0cnVlIj09PVN0cmluZyhyKS50b0xvd2VyQ2FzZSgpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHIoIm5vRGVwcmVjYXRpb24iKSlyZXR1cm4gdDt2YXIgbj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighbil7aWYocigidGhyb3dEZXByZWNhdGlvbiIpKXRocm93IG5ldyBFcnJvcihlKTtyKCJ0cmFjZURlcHJlY2F0aW9uIik/Y29uc29sZS50cmFjZShlKTpjb25zb2xlLndhcm4oZSksbj0hMH1yZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSw1OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZXx8KGU9e30pO3JldHVybiBuKHQsZS5jYW52YXN8fGksZS5jb250ZXh0fHxhLGUpfTt2YXIgbj10KCIuL2xpYi92dGV4dCIpLGk9bnVsbCxhPW51bGw7InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKChpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKS53aWR0aD04MTkyLGkuaGVpZ2h0PTEwMjQsYT1pLmdldENvbnRleHQoIjJkIikpfSx7Ii4vbGliL3Z0ZXh0Ijo1OTd9XSw1OTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9NjQsbz0xLjI1LHM9e2JyZWFrbGluZXM6ITEsYm9sZHM6ITEsaXRhbGljczohMSxzdWJzY3JpcHRzOiExLHN1cGVyc2NyaXB0czohMX07biYmKG4uc2l6ZSYmbi5zaXplPjAmJihhPW4uc2l6ZSksbi5saW5lU3BhY2luZyYmbi5saW5lU3BhY2luZz4wJiYobz1uLmxpbmVTcGFjaW5nKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3MuYnJlYWtsaW5lcyYmKHMuYnJlYWtsaW5lcz0hIW4uc3R5bGV0YWdzLmJyZWFrbGluZXMpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5ib2xkcyYmKHMuYm9sZHM9ISFuLnN0eWxldGFncy5ib2xkcyksbi5zdHlsZXRhZ3MmJm4uc3R5bGV0YWdzLml0YWxpY3MmJihzLml0YWxpY3M9ISFuLnN0eWxldGFncy5pdGFsaWNzKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3Muc3Vic2NyaXB0cyYmKHMuc3Vic2NyaXB0cz0hIW4uc3R5bGV0YWdzLnN1YnNjcmlwdHMpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5zdXBlcnNjcmlwdHMmJihzLnN1cGVyc2NyaXB0cz0hIW4uc3R5bGV0YWdzLnN1cGVyc2NyaXB0cykpO3JldHVybiByLmZvbnQ9W24uZm9udFN0eWxlLG4uZm9udFZhcmlhbnQsbi5mb250V2VpZ2h0LGErInB4IixuLmZvbnRdLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkuam9pbigiICIpLHIudGV4dEFsaWduPSJzdGFydCIsci50ZXh0QmFzZWxpbmU9ImFscGhhYmV0aWMiLHIuZGlyZWN0aW9uPSJsdHIiLGgoZnVuY3Rpb24odCxlLHIsbixhLG8pe3I9ci5yZXBsYWNlKC9cbi9nLCIiKSxyPSEwPT09by5icmVha2xpbmVzP3IucmVwbGFjZSgvXDxiclw+L2csIlxuIik6ci5yZXBsYWNlKC9cPGJyXD4vZywiICIpO3ZhciBzPSIiLGw9W107Zm9yKHA9MDtwPHIubGVuZ3RoOysrcClsW3BdPXM7ITA9PT1vLmJvbGRzJiYobD1jKCJiIiwiYnwiLHIsbCkpOyEwPT09by5pdGFsaWNzJiYobD1jKCJpIiwiaXwiLHIsbCkpOyEwPT09by5zdXBlcnNjcmlwdHMmJihsPWMoInN1cCIsIisxIixyLGwpKTshMD09PW8uc3Vic2NyaXB0cyYmKGw9Yygic3ViIiwiLTEiLHIsbCkpO3ZhciB1PVtdLGY9IiI7Zm9yKHA9MDtwPHIubGVuZ3RoOysrcCludWxsIT09bFtwXSYmKGYrPXJbcF0sdS5wdXNoKGxbcF0pKTt2YXIgaCxwLGQsbSxnLHY9Zi5zcGxpdCgiXG4iKSx5PXYubGVuZ3RoLHg9TWF0aC5yb3VuZChhKm4pLGI9bixfPTIqbix3PTAsVD15KngrXzt0LmhlaWdodDxUJiYodC5oZWlnaHQ9VCk7ZS5maWxsU3R5bGU9IiMwMDAiLGUuZmlsbFJlY3QoMCwwLHQud2lkdGgsdC5oZWlnaHQpLGUuZmlsbFN0eWxlPSIjZmZmIjt2YXIgaz0wLEE9IiI7ZnVuY3Rpb24gTSgpe2lmKCIiIT09QSl7dmFyIHQ9ZS5tZWFzdXJlVGV4dChBKS53aWR0aDtlLmZpbGxUZXh0KEEsYitkLF8rbSksZCs9dH19ZnVuY3Rpb24gUygpe3JldHVybiBNYXRoLnJvdW5kKGcpKyJweCAifWZ1bmN0aW9uIEUodCxyKXt2YXIgbj0iIitlLmZvbnQ7aWYoITA9PT1vLnN1YnNjcmlwdHMpe3ZhciBpPXQuaW5kZXhPZigiLSIpLGE9ci5pbmRleE9mKCItIikscz1pPi0xP3BhcnNlSW50KHRbMStpXSk6MCxsPWE+LTE/cGFyc2VJbnQoclsxK2FdKTowO3MhPT1sJiYobj1uLnJlcGxhY2UoUygpLCI/cHggIiksZyo9TWF0aC5wb3coLjc1LGwtcyksbj1uLnJlcGxhY2UoIj9weCAiLFMoKSkpLG0rPS4yNSp4KihsLXMpfWlmKCEwPT09by5zdXBlcnNjcmlwdHMpe3ZhciBjPXQuaW5kZXhPZigiKyIpLHU9ci5pbmRleE9mKCIrIiksZj1jPi0xP3BhcnNlSW50KHRbMStjXSk6MCxoPXU+LTE/cGFyc2VJbnQoclsxK3VdKTowO2YhPT1oJiYobj1uLnJlcGxhY2UoUygpLCI/cHggIiksZyo9TWF0aC5wb3coLjc1LGgtZiksbj1uLnJlcGxhY2UoIj9weCAiLFMoKSkpLG0tPS4yNSp4KihoLWYpfWlmKCEwPT09by5ib2xkcyl7dmFyIHA9dC5pbmRleE9mKCJifCIpPi0xLGQ9ci5pbmRleE9mKCJifCIpPi0xOyFwJiZkJiYobj12P24ucmVwbGFjZSgiaXRhbGljICIsIml0YWxpYyBib2xkICIpOiJib2xkICIrbikscCYmIWQmJihuPW4ucmVwbGFjZSgiYm9sZCAiLCIiKSl9aWYoITA9PT1vLml0YWxpY3Mpe3ZhciB2PXQuaW5kZXhPZigiaXwiKT4tMSx5PXIuaW5kZXhPZigiaXwiKT4tMTshdiYmeSYmKG49Iml0YWxpYyAiK24pLHYmJiF5JiYobj1uLnJlcGxhY2UoIml0YWxpYyAiLCIiKSl9ZS5mb250PW59Zm9yKGg9MDtoPHk7KytoKXt2YXIgTD12W2hdKyJcbiI7Zm9yKGQ9MCxtPWgqeCxnPW4sQT0iIixwPTA7cDxMLmxlbmd0aDsrK3Ape3ZhciBDPXArazx1Lmxlbmd0aD91W3Ara106dVt1Lmxlbmd0aC0xXTtzPT09Qz9BKz1MW3BdOihNKCksQT1MW3BdLHZvaWQgMCE9PUMmJihFKHMsQykscz1DKSl9TSgpLGsrPUwubGVuZ3RoO3ZhciBQPTB8TWF0aC5yb3VuZChkKzIqYik7dzxQJiYodz1QKX12YXIgST13LE89Xyt4Knk7cmV0dXJuIGkoZS5nZXRJbWFnZURhdGEoMCwwLEksTykuZGF0YSxbTyxJLDRdKS5waWNrKC0xLC0xLDApLnRyYW5zcG9zZSgxLDApfShlLHIsdCxhLG8scyksbixhKX0sZS5leHBvcnRzLnByb2Nlc3NQaXhlbHM9aDt2YXIgbj10KCJzdXJmYWNlLW5ldHMiKSxpPXQoIm5kYXJyYXkiKSxhPXQoInNpbXBsaWZ5LXBsYW5hci1ncmFwaCIpLG89dCgiY2xlYW4tcHNsZyIpLHM9dCgiY2R0MmQiKSxsPXQoInBsYW5hci1ncmFwaC10by1wb2x5bGluZSIpO2Z1bmN0aW9uIGModCxlLHIsbil7Zm9yKHZhciBpPSI8Iit0KyI+IixhPSI8LyIrdCsiPiIsbz1pLmxlbmd0aCxzPWEubGVuZ3RoLGw9IisiPT09ZVswXXx8Ii0iPT09ZVswXSxjPTAsdT0tcztjPi0xJiYtMSE9PShjPXIuaW5kZXhPZihpLGMpKSYmLTEhPT0odT1yLmluZGV4T2YoYSxjK28pKSYmISh1PD1jKTspe2Zvcih2YXIgZj1jO2Y8dStzOysrZilpZihmPGMrb3x8Zj49dSluW2ZdPW51bGwscj1yLnN1YnN0cigwLGYpKyIgIityLnN1YnN0cihmKzEpO2Vsc2UgaWYobnVsbCE9PW5bZl0pe3ZhciBoPW5bZl0uaW5kZXhPZihlWzBdKTstMT09PWg/bltmXSs9ZTpsJiYobltmXT1uW2ZdLnN1YnN0cigwLGgrMSkrKDErcGFyc2VJbnQobltmXVtoKzFdKSkrbltmXS5zdWJzdHIoaCsyKSl9dmFyIHA9YytvLGQ9ci5zdWJzdHIocCx1LXApLmluZGV4T2YoaSk7Yz0tMSE9PWQ/ZDp1K3N9cmV0dXJuIG59ZnVuY3Rpb24gdSh0LGUpe3ZhciByPW4odCwxMjgpO3JldHVybiBlP2Eoci5jZWxscyxyLnBvc2l0aW9ucywuMjUpOntlZGdlczpyLmNlbGxzLHBvc2l0aW9uczpyLnBvc2l0aW9uc319ZnVuY3Rpb24gZih0LGUscixuKXt2YXIgaT11KHQsbiksYT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPWUudGV4dEFsaWdufHwic3RhcnQiLGk9ZS50ZXh0QmFzZWxpbmV8fCJhbHBoYWJldGljIixhPVsxPDwzMCwxPDwzMF0sbz1bMCwwXSxzPXQubGVuZ3RoLGw9MDtsPHM7KytsKWZvcih2YXIgYz10W2xdLHU9MDt1PDI7Kyt1KWFbdV09MHxNYXRoLm1pbihhW3VdLGNbdV0pLG9bdV09MHxNYXRoLm1heChvW3VdLGNbdV0pO3ZhciBmPTA7c3dpdGNoKG4pe2Nhc2UiY2VudGVyIjpmPS0uNSooYVswXStvWzBdKTticmVhaztjYXNlInJpZ2h0IjpjYXNlImVuZCI6Zj0tb1swXTticmVhaztjYXNlImxlZnQiOmNhc2Uic3RhcnQiOmY9LWFbMF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInZlY3Rvcml6ZS10ZXh0OiBVbnJlY29nbml6ZWQgdGV4dEFsaWduOiAnIituKyInIil9dmFyIGg9MDtzd2l0Y2goaSl7Y2FzZSJoYW5naW5nIjpjYXNlInRvcCI6aD0tYVsxXTticmVhaztjYXNlIm1pZGRsZSI6aD0tLjUqKGFbMV0rb1sxXSk7YnJlYWs7Y2FzZSJhbHBoYWJldGljIjpjYXNlImlkZW9ncmFwaGljIjpoPS0zKnI7YnJlYWs7Y2FzZSJib3R0b20iOmg9LW9bMV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInZlY3Rvcml6ZS10ZXh0OiBVbnJlY29naW5pemVkIHRleHRCYXNlbGluZTogJyIraSsiJyIpfXZhciBwPTEvcjtyZXR1cm4ibGluZUhlaWdodCJpbiBlP3AqPStlLmxpbmVIZWlnaHQ6IndpZHRoImluIGU/cD1lLndpZHRoLyhvWzBdLWFbMF0pOiJoZWlnaHQiaW4gZSYmKHA9ZS5oZWlnaHQvKG9bMV0tYVsxXSkpLHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm5bcCoodFswXStmKSxwKih0WzFdK2gpXX0pKX0oaS5wb3NpdGlvbnMsZSxyKSxjPWkuZWRnZXMsZj0iY2N3Ij09PWUub3JpZW50YXRpb247aWYobyhhLGMpLGUucG9seWdvbnN8fGUucG9seWdvbnx8ZS5wb2x5bGluZSl7Zm9yKHZhciBoPWwoYyxhKSxwPW5ldyBBcnJheShoLmxlbmd0aCksZD0wO2Q8aC5sZW5ndGg7KytkKXtmb3IodmFyIG09aFtkXSxnPW5ldyBBcnJheShtLmxlbmd0aCksdj0wO3Y8bS5sZW5ndGg7Kyt2KXtmb3IodmFyIHk9bVt2XSx4PW5ldyBBcnJheSh5Lmxlbmd0aCksYj0wO2I8eS5sZW5ndGg7KytiKXhbYl09YVt5W2JdXS5zbGljZSgpO2YmJngucmV2ZXJzZSgpLGdbdl09eH1wW2RdPWd9cmV0dXJuIHB9cmV0dXJuIGUudHJpYW5nbGVzfHxlLnRyaWFuZ3VsYXRlfHxlLnRyaWFuZ2xlP3tjZWxsczpzKGEsYyx7ZGVsYXVuYXk6ITEsZXh0ZXJpb3I6ITEsaW50ZXJpb3I6ITB9KSxwb3NpdGlvbnM6YX06e2VkZ2VzOmMscG9zaXRpb25zOmF9fWZ1bmN0aW9uIGgodCxlLHIpe3RyeXtyZXR1cm4gZih0LGUsciwhMCl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gZih0LGUsciwhMSl9Y2F0Y2godCl7fXJldHVybiBlLnBvbHlnb25zfHxlLnBvbHlsaW5lfHxlLnBvbHlnb24/W106ZS50cmlhbmdsZXN8fGUudHJpYW5ndWxhdGV8fGUudHJpYW5nbGU/e2NlbGxzOltdLHBvc2l0aW9uczpbXX06e2VkZ2VzOltdLHBvc2l0aW9uczpbXX19fSx7Y2R0MmQ6MTEzLCJjbGVhbi1wc2xnIjoxMjIsbmRhcnJheTo0NjIsInBsYW5hci1ncmFwaC10by1wb2x5bGluZSI6NDc4LCJzaW1wbGlmeS1wbGFuYXItZ3JhcGgiOjUzOCwic3VyZmFjZS1uZXRzIjo1NjV9XSw1OTg6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBzZXN8fCFzZXMub2t8fHNlcy5vaygpKXsidW5kZWZpbmVkIiE9dHlwZW9mIHNlcyYmKHNlcy53ZWFrTWFwUGVybWl0SG9zdE9iamVjdHM9bSk7dmFyIHQ9ITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFdlYWtNYXApe3ZhciByPVdlYWtNYXA7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9GaXJlZm94Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKTtlbHNle3ZhciBuPW5ldyByLGk9T2JqZWN0LmZyZWV6ZSh7fSk7aWYobi5zZXQoaSwxKSwxPT09bi5nZXQoaSkpcmV0dXJuIHZvaWQoZS5leHBvcnRzPVdlYWtNYXApO3Q9ITB9fU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsbz1PYmplY3QuZGVmaW5lUHJvcGVydHkscz1PYmplY3QuaXNFeHRlbnNpYmxlLGw9IndlYWttYXA6aWRlbnQ6IitNYXRoLnJhbmRvbSgpKyJfX18iO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgY3J5cHRvJiYiZnVuY3Rpb24iPT10eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheSl7dmFyIGM9bmV3IEFycmF5QnVmZmVyKDI1KSx1PW5ldyBVaW50OEFycmF5KGMpO2NyeXB0by5nZXRSYW5kb21WYWx1ZXModSksbD0id2Vha21hcDpyYW5kOiIrQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKHUsKGZ1bmN0aW9uKHQpe3JldHVybih0JTM2KS50b1N0cmluZygzNil9KSkuam9pbigiIikrIl9fXyJ9aWYobyhPYmplY3QsImdldE93blByb3BlcnR5TmFtZXMiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gYSh0KS5maWx0ZXIoZyl9fSksImdldFByb3BlcnR5TmFtZXMiaW4gT2JqZWN0KXt2YXIgZj1PYmplY3QuZ2V0UHJvcGVydHlOYW1lcztvKE9iamVjdCwiZ2V0UHJvcGVydHlOYW1lcyIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBmKHQpLmZpbHRlcihnKX19KX0hZnVuY3Rpb24oKXt2YXIgdD1PYmplY3QuZnJlZXplO28oT2JqZWN0LCJmcmVlemUiLHt2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdihlKSx0KGUpfX0pO3ZhciBlPU9iamVjdC5zZWFsO28oT2JqZWN0LCJzZWFsIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHYodCksZSh0KX19KTt2YXIgcj1PYmplY3QucHJldmVudEV4dGVuc2lvbnM7byhPYmplY3QsInByZXZlbnRFeHRlbnNpb25zIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHYodCkscih0KX19KX0oKTt2YXIgaD0hMSxwPTAsZD1mdW5jdGlvbigpe3RoaXMgaW5zdGFuY2VvZiBkfHx4KCk7dmFyIHQ9W10sZT1bXSxyPXArKztyZXR1cm4gT2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSx7Z2V0X19fOnt2YWx1ZTp5KChmdW5jdGlvbihuLGkpe3ZhciBhLG89dihuKTtyZXR1cm4gbz9yIGluIG8/b1tyXTppOihhPXQuaW5kZXhPZihuKSk+PTA/ZVthXTppfSkpfSxoYXNfX186e3ZhbHVlOnkoKGZ1bmN0aW9uKGUpe3ZhciBuPXYoZSk7cmV0dXJuIG4/ciBpbiBuOnQuaW5kZXhPZihlKT49MH0pKX0sc2V0X19fOnt2YWx1ZTp5KChmdW5jdGlvbihuLGkpe3ZhciBhLG89dihuKTtyZXR1cm4gbz9vW3JdPWk6KGE9dC5pbmRleE9mKG4pKT49MD9lW2FdPWk6KGE9dC5sZW5ndGgsZVthXT1pLHRbYV09biksdGhpc30pKX0sZGVsZXRlX19fOnt2YWx1ZTp5KChmdW5jdGlvbihuKXt2YXIgaSxhLG89dihuKTtyZXR1cm4gbz9yIGluIG8mJmRlbGV0ZSBvW3JdOiEoKGk9dC5pbmRleE9mKG4pKTwwKSYmKGE9dC5sZW5ndGgtMSx0W2ldPXZvaWQgMCxlW2ldPWVbYV0sdFtpXT10W2FdLHQubGVuZ3RoPWEsZS5sZW5ndGg9YSwhMCl9KSl9fSl9O2QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoT2JqZWN0LnByb3RvdHlwZSx7Z2V0Ont2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldF9fXyh0LGUpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LGhhczp7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzX19fKHQpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LHNldDp7dmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zZXRfX18odCxlKX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxkZWxldGU6e3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGV0ZV9fXyh0KX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLCJmdW5jdGlvbiI9PXR5cGVvZiByP2Z1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3RoaXMgaW5zdGFuY2VvZiBkfHx4KCk7dmFyIGUsbj1uZXcgcixpPXZvaWQgMCxhPSExO3JldHVybiBlPXQ/ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zZXQodCxlKSxuLmhhcyh0KXx8KGl8fChpPW5ldyBkKSxpLnNldCh0LGUpKSx0aGlzfTpmdW5jdGlvbih0LGUpe2lmKGEpdHJ5e24uc2V0KHQsZSl9Y2F0Y2gocil7aXx8KGk9bmV3IGQpLGkuc2V0X19fKHQsZSl9ZWxzZSBuLnNldCh0LGUpO3JldHVybiB0aGlzfSxPYmplY3QuY3JlYXRlKGQucHJvdG90eXBlLHtnZXRfX186e3ZhbHVlOnkoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGk/bi5oYXModCk/bi5nZXQodCk6aS5nZXRfX18odCxlKTpuLmdldCh0LGUpfSkpfSxoYXNfX186e3ZhbHVlOnkoKGZ1bmN0aW9uKHQpe3JldHVybiBuLmhhcyh0KXx8ISFpJiZpLmhhc19fXyh0KX0pKX0sc2V0X19fOnt2YWx1ZTp5KGUpfSxkZWxldGVfX186e3ZhbHVlOnkoKGZ1bmN0aW9uKHQpe3ZhciBlPSEhbi5kZWxldGUodCk7cmV0dXJuIGkmJmkuZGVsZXRlX19fKHQpfHxlfSkpfSxwZXJtaXRIb3N0T2JqZWN0c19fXzp7dmFsdWU6eSgoZnVuY3Rpb24odCl7aWYodCE9PW0pdGhyb3cgbmV3IEVycm9yKCJib2d1cyBjYWxsIHRvIHBlcm1pdEhvc3RPYmplY3RzX19fIik7YT0hMH0pKX19KX10JiYidW5kZWZpbmVkIiE9dHlwZW9mIFByb3h5JiYoUHJveHk9dm9pZCAwKSxuLnByb3RvdHlwZT1kLnByb3RvdHlwZSxlLmV4cG9ydHM9bixPYmplY3QuZGVmaW5lUHJvcGVydHkoV2Vha01hcC5wcm90b3R5cGUsImNvbnN0cnVjdG9yIix7dmFsdWU6V2Vha01hcCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfSgpOigidW5kZWZpbmVkIiE9dHlwZW9mIFByb3h5JiYoUHJveHk9dm9pZCAwKSxlLmV4cG9ydHM9ZCl9ZnVuY3Rpb24gbSh0KXt0LnBlcm1pdEhvc3RPYmplY3RzX19fJiZ0LnBlcm1pdEhvc3RPYmplY3RzX19fKG0pfWZ1bmN0aW9uIGcodCl7cmV0dXJuISgid2Vha21hcDoiPT10LnN1YnN0cigwLCJ3ZWFrbWFwOiIubGVuZ3RoKSYmIl9fXyI9PT10LnN1YnN0cih0Lmxlbmd0aC0zKSl9ZnVuY3Rpb24gdih0KXtpZih0IT09T2JqZWN0KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIk5vdCBhbiBvYmplY3Q6ICIrdCk7dmFyIGU9dFtsXTtpZihlJiZlLmtleT09PXQpcmV0dXJuIGU7aWYocyh0KSl7ZT17a2V5OnR9O3RyeXtyZXR1cm4gbyh0LGwse3ZhbHVlOmUsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITF9KSxlfWNhdGNoKHQpe3JldHVybn19fWZ1bmN0aW9uIHkodCl7cmV0dXJuIHQucHJvdG90eXBlPW51bGwsT2JqZWN0LmZyZWV6ZSh0KX1mdW5jdGlvbiB4KCl7aHx8InVuZGVmaW5lZCI9PXR5cGVvZiBjb25zb2xlfHwoaD0hMCxjb25zb2xlLndhcm4oIldlYWtNYXAgc2hvdWxkIGJlIGludm9rZWQgYXMgbmV3IFdlYWtNYXAoKSwgbm90IFdlYWtNYXAoKS4gVGhpcyB3aWxsIGJlIGFuIGVycm9yIGluIHRoZSBmdXR1cmUuIikpfX0oKX0se31dLDU5OTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vaGlkZGVuLXN0b3JlLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCgib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJXZWFrbWFwLXNoaW06IEtleSBtdXN0IGJlIG9iamVjdCIpO3ZhciByPWUudmFsdWVPZih0KTtyZXR1cm4gciYmci5pZGVudGl0eT09PXQ/cjpuKGUsdCl9fX0seyIuL2hpZGRlbi1zdG9yZS5qcyI6NjAwfV0sNjAwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e2lkZW50aXR5OmV9LG49dC52YWx1ZU9mO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidmFsdWVPZiIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0IT09ZT9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyfSx3cml0YWJsZTohMH0pLHJ9fSx7fV0sNjAxOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9jcmVhdGUtc3RvcmUuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uKCk7cmV0dXJue2dldDpmdW5jdGlvbihlLHIpe3ZhciBuPXQoZSk7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkoInZhbHVlIik/bi52YWx1ZTpyfSxzZXQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdChlKS52YWx1ZT1yLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4idmFsdWUiaW4gdChlKX0sZGVsZXRlOmZ1bmN0aW9uKGUpe3JldHVybiBkZWxldGUgdChlKS52YWx1ZX19fX0seyIuL2NyZWF0ZS1zdG9yZS5qcyI6NTk5fV0sNjAyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2V0LWNhbnZhcy1jb250ZXh0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKCJ3ZWJnbCIsdCl9fSx7ImdldC1jYW52YXMtY29udGV4dCI6MjQ4fV0sNjAzOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpLGE9bi5pbnN0YW5jZSgpO2Z1bmN0aW9uIG8odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1vLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShvLnByb3RvdHlwZSx7bmFtZToiQ2hpbmVzZSIsamRFcG9jaDoxNzIxNDI1LjUsaGFzWWVhclplcm86ITEsbWluTW9udGg6MCxmaXJzdE1vbnRoOjAsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiQ2hpbmVzZSIsZXBvY2hzOlsiQkVDIiwiRUMiXSxtb250aE51bWJlcnM6ZnVuY3Rpb24odCxlKXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciByPXQubWF0Y2gobCk7cmV0dXJuIHI/clswXToiIn12YXIgbj10aGlzLl92YWxpZGF0ZVllYXIodCksaT10Lm1vbnRoKCksYT0iIit0aGlzLnRvQ2hpbmVzZU1vbnRoKG4saSk7cmV0dXJuIGUmJmEubGVuZ3RoPDImJihhPSIwIithKSx0aGlzLmlzSW50ZXJjYWxhcnlNb250aChuLGkpJiYoYSs9ImkiKSxhfSxtb250aE5hbWVzOmZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9dC5tYXRjaChjKTtyZXR1cm4gZT9lWzBdOiIifXZhciByPXRoaXMuX3ZhbGlkYXRlWWVhcih0KSxuPXQubW9udGgoKSxpPVsiXHU0ZTAwXHU2NzA4IiwiXHU0ZThjXHU2NzA4IiwiXHU0ZTA5XHU2NzA4IiwiXHU1NmRiXHU2NzA4IiwiXHU0ZTk0XHU2NzA4IiwiXHU1MTZkXHU2NzA4IiwiXHU0ZTAzXHU2NzA4IiwiXHU1MTZiXHU2NzA4IiwiXHU0ZTVkXHU2NzA4IiwiXHU1MzQxXHU2NzA4IiwiXHU1MzQxXHU0ZTAwXHU2NzA4IiwiXHU1MzQxXHU0ZThjXHU2NzA4Il1bdGhpcy50b0NoaW5lc2VNb250aChyLG4pLTFdO3JldHVybiB0aGlzLmlzSW50ZXJjYWxhcnlNb250aChyLG4pJiYoaT0iXHU5NWYwIitpKSxpfSxtb250aE5hbWVzU2hvcnQ6ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgZT10Lm1hdGNoKHUpO3JldHVybiBlP2VbMF06IiJ9dmFyIHI9dGhpcy5fdmFsaWRhdGVZZWFyKHQpLG49dC5tb250aCgpLGk9WyJcdTRlMDAiLCJcdTRlOGMiLCJcdTRlMDkiLCJcdTU2ZGIiLCJcdTRlOTQiLCJcdTUxNmQiLCJcdTRlMDMiLCJcdTUxNmIiLCJcdTRlNWQiLCJcdTUzNDEiLCJcdTUzNDFcdTRlMDAiLCJcdTUzNDFcdTRlOGMiXVt0aGlzLnRvQ2hpbmVzZU1vbnRoKHIsbiktMV07cmV0dXJuIHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHIsbikmJihpPSJcdTk1ZjAiK2kpLGl9LHBhcnNlTW9udGg6ZnVuY3Rpb24odCxlKXt0PXRoaXMuX3ZhbGlkYXRlWWVhcih0KTt2YXIgcixuPXBhcnNlSW50KGUpO2lmKGlzTmFOKG4pKSJcdTk1ZjAiPT09ZVswXSYmKHI9ITAsZT1lLnN1YnN0cmluZygxKSksIlx1NjcwOCI9PT1lW2UubGVuZ3RoLTFdJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTEpKSxuPTErWyJcdTRlMDAiLCJcdTRlOGMiLCJcdTRlMDkiLCJcdTU2ZGIiLCJcdTRlOTQiLCJcdTUxNmQiLCJcdTRlMDMiLCJcdTUxNmIiLCJcdTRlNWQiLCJcdTUzNDEiLCJcdTUzNDFcdTRlMDAiLCJcdTUzNDFcdTRlOGMiXS5pbmRleE9mKGUpO2Vsc2V7dmFyIGk9ZVtlLmxlbmd0aC0xXTtyPSJpIj09PWl8fCJJIj09PWl9cmV0dXJuIHRoaXMudG9Nb250aEluZGV4KHQsbixyKX0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6MSxpc1JUTDohMX19LF92YWxpZGF0ZVllYXI6ZnVuY3Rpb24odCxlKXtpZih0LnllYXImJih0PXQueWVhcigpKSwibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MTg4OHx8dD4yMTExKXRocm93IGUucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIHR9LHRvTW9udGhJbmRleDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO2lmKHImJmUhPT1pfHxlPDF8fGU+MTIpdGhyb3cgbi5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIGk/IXImJmU8PWk/ZS0xOmU6ZS0xfSx0b0NoaW5lc2VNb250aDpmdW5jdGlvbih0LGUpe3QueWVhciYmKGU9KHQ9dC55ZWFyKCkpLm1vbnRoKCkpO3ZhciByPXRoaXMuaW50ZXJjYWxhcnlNb250aCh0KTtpZihlPDB8fGU+KHI/MTI6MTEpKXRocm93IG4ubG9jYWwuaW52YWxpZE1vbnRoLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiByP2U8cj9lKzE6ZTplKzF9LGludGVyY2FsYXJ5TW9udGg6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dGhpcy5fdmFsaWRhdGVZZWFyKHQpLGZbdC1mWzBdXT4+MTN9LGlzSW50ZXJjYWxhcnlNb250aDpmdW5jdGlvbih0LGUpe3QueWVhciYmKGU9KHQ9dC55ZWFyKCkpLm1vbnRoKCkpO3ZhciByPXRoaXMuaW50ZXJjYWxhcnlNb250aCh0KTtyZXR1cm4hIXImJnI9PT1lfSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gMCE9PXRoaXMuaW50ZXJjYWxhcnlNb250aCh0KX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIGksbz10aGlzLl92YWxpZGF0ZVllYXIodCxuLmxvY2FsLmludmFsaWR5ZWFyKSxzPWhbby1oWzBdXSxsPXM+PjkmNDA5NSxjPXM+PjUmMTUsdT0zMSZzOyhpPWEubmV3RGF0ZShsLGMsdSkpLmFkZCg0LShpLmRheU9mV2VlaygpfHw3KSwiZCIpO3ZhciBmPXRoaXMudG9KRCh0LGUsciktaS50b0pEKCk7cmV0dXJuIDErTWF0aC5mbG9vcihmLzcpfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVhcFllYXIodCk/MTM6MTJ9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYoZT10Lm1vbnRoKCksdD10LnllYXIoKSksdD10aGlzLl92YWxpZGF0ZVllYXIodCk7dmFyIHI9Zlt0LWZbMF1dO2lmKGU+KHI+PjEzPzEyOjExKSl0aHJvdyBuLmxvY2FsLmludmFsaWRNb250aC5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gciYxPDwxMi1lPzMwOjI5fSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LHMscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3ZhbGlkYXRlWWVhcihpLnllYXIoKSksZT1pLm1vbnRoKCkscj1pLmRheSgpO3ZhciBvPXRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHQsZSkscz10aGlzLnRvQ2hpbmVzZU1vbnRoKHQsZSksbD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scztpZigib2JqZWN0Ij09dHlwZW9mIHQpbz10LGE9ZXx8e307ZWxzZXt2YXIgbDtpZighKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MTg4OCYmdDw9MjExMSkpdGhyb3cgbmV3IEVycm9yKCJMdW5hciB5ZWFyIG91dHNpZGUgcmFuZ2UgMTg4OC0yMTExIik7aWYoISgibnVtYmVyIj09dHlwZW9mIGUmJmU+PTEmJmU8PTEyKSl0aHJvdyBuZXcgRXJyb3IoIkx1bmFyIG1vbnRoIG91dHNpZGUgcmFuZ2UgMSAtIDEyIik7aWYoISgibnVtYmVyIj09dHlwZW9mIHImJnI+PTEmJnI8PTMwKSl0aHJvdyBuZXcgRXJyb3IoIkx1bmFyIGRheSBvdXRzaWRlIHJhbmdlIDEgLSAzMCIpOyJvYmplY3QiPT10eXBlb2Ygbj8obD0hMSxhPW4pOihsPSEhbixhPWl8fHt9KSxvPXt5ZWFyOnQsbW9udGg6ZSxkYXk6cixpc0ludGVyY2FsYXJ5Omx9fXM9by5kYXktMTt2YXIgYyx1PWZbby55ZWFyLWZbMF1dLHA9dT4+MTM7Yz1wJiYoby5tb250aD5wfHxvLmlzSW50ZXJjYWxhcnkpP28ubW9udGg6by5tb250aC0xO2Zvcih2YXIgZD0wO2Q8YztkKyspe3MrPXUmMTw8MTItZD8zMDoyOX12YXIgbT1oW28ueWVhci1oWzBdXSxnPW5ldyBEYXRlKG0+PjkmNDA5NSwobT4+NSYxNSktMSwoMzEmbSkrcyk7cmV0dXJuIGEueWVhcj1nLmdldEZ1bGxZZWFyKCksYS5tb250aD0xK2cuZ2V0TW9udGgoKSxhLmRheT1nLmdldERhdGUoKSxhfSh0LHMscixvKTtyZXR1cm4gYS50b0pEKGwueWVhcixsLm1vbnRoLGwuZGF5KX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPWEuZnJvbUpEKHQpLHI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYTtpZigib2JqZWN0Ij09dHlwZW9mIHQpaT10LGE9ZXx8e307ZWxzZXtpZighKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MTg4OCYmdDw9MjExMSkpdGhyb3cgbmV3IEVycm9yKCJTb2xhciB5ZWFyIG91dHNpZGUgcmFuZ2UgMTg4OC0yMTExIik7aWYoISgibnVtYmVyIj09dHlwZW9mIGUmJmU+PTEmJmU8PTEyKSl0aHJvdyBuZXcgRXJyb3IoIlNvbGFyIG1vbnRoIG91dHNpZGUgcmFuZ2UgMSAtIDEyIik7aWYoISgibnVtYmVyIj09dHlwZW9mIHImJnI+PTEmJnI8PTMxKSl0aHJvdyBuZXcgRXJyb3IoIlNvbGFyIGRheSBvdXRzaWRlIHJhbmdlIDEgLSAzMSIpO2k9e3llYXI6dCxtb250aDplLGRheTpyfSxhPW58fHt9fXZhciBvPWhbaS55ZWFyLWhbMF1dLHM9aS55ZWFyPDw5fGkubW9udGg8PDV8aS5kYXk7YS55ZWFyPXM+PW8/aS55ZWFyOmkueWVhci0xLG89aFthLnllYXItaFswXV07dmFyIGwsYz1uZXcgRGF0ZShvPj45JjQwOTUsKG8+PjUmMTUpLTEsMzEmbyksdT1uZXcgRGF0ZShpLnllYXIsaS5tb250aC0xLGkuZGF5KTtsPU1hdGgucm91bmQoKHUtYykvODY0ZTUpO3ZhciBwLGQ9ZlthLnllYXItZlswXV07Zm9yKHA9MDtwPDEzO3ArKyl7dmFyIG09ZCYxPDwxMi1wPzMwOjI5O2lmKGw8bSlicmVhaztsLT1tfXZhciBnPWQ+PjEzOyFnfHxwPGc/KGEuaXNJbnRlcmNhbGFyeT0hMSxhLm1vbnRoPTErcCk6cD09PWc/KGEuaXNJbnRlcmNhbGFyeT0hMCxhLm1vbnRoPXApOihhLmlzSW50ZXJjYWxhcnk9ITEsYS5tb250aD1wKTtyZXR1cm4gYS5kYXk9MStsLGF9KGUueWVhcigpLGUubW9udGgoKSxlLmRheSgpKSxuPXRoaXMudG9Nb250aEluZGV4KHIueWVhcixyLm1vbnRoLHIuaXNJbnRlcmNhbGFyeSk7cmV0dXJuIHRoaXMubmV3RGF0ZShyLnllYXIsbixyLmRheSl9LGZyb21TdHJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChzKSxyPXRoaXMuX3ZhbGlkYXRlWWVhcigrZVsxXSksbj0rZVsyXSxpPSEhZVszXSxhPXRoaXMudG9Nb250aEluZGV4KHIsbixpKSxvPStlWzRdO3JldHVybiB0aGlzLm5ld0RhdGUocixhLG8pfSxhZGQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQueWVhcigpLGk9dC5tb250aCgpLGE9dGhpcy5pc0ludGVyY2FsYXJ5TW9udGgobixpKSxzPXRoaXMudG9DaGluZXNlTW9udGgobixpKSxsPU9iamVjdC5nZXRQcm90b3R5cGVPZihvLnByb3RvdHlwZSkuYWRkLmNhbGwodGhpcyx0LGUscik7aWYoInkiPT09cil7dmFyIGM9bC55ZWFyKCksdT1sLm1vbnRoKCksZj10aGlzLmlzSW50ZXJjYWxhcnlNb250aChjLHMpLGg9YSYmZj90aGlzLnRvTW9udGhJbmRleChjLHMsITApOnRoaXMudG9Nb250aEluZGV4KGMscywhMSk7aCE9PXUmJmwubW9udGgoaCl9cmV0dXJuIGx9fSk7dmFyIHM9L15ccyooLT9cZFxkXGRcZHxcZFxkKVstL10oXGQ/XGQpKFtpSV0/KVstL10oXGQ/XGQpL20sbD0vXlxkP1xkW2lJXT8vbSxjPS9eXHU5NWYwP1x1NTM0MT9bXHU0ZTAwXHU0ZThjXHU0ZTA5XHU1NmRiXHU0ZTk0XHU1MTZkXHU0ZTAzXHU1MTZiXHU0ZTVkXT9cdTY3MDgvbSx1PS9eXHU5NWYwP1x1NTM0MT9bXHU0ZTAwXHU0ZThjXHU0ZTA5XHU1NmRiXHU0ZTk0XHU1MTZkXHU0ZTAzXHU1MTZiXHU0ZTVkXT8vbTtuLmNhbGVuZGFycy5jaGluZXNlPW87dmFyIGY9WzE4ODcsNTc4MCw1ODAyLDE5MTU3LDI3NDIsNTAzNTksMTE5OCwyNjQ2LDQ2Mzc4LDc0NjYsMzQxMiwzMDEyMiw1NDgyLDY3OTQ5LDIzOTYsNTI5NCw0MzU5Nyw2NzMyLDY5NTQsMzYxODEsMjc3Miw0OTU0LDE4NzgxLDIzOTYsNTQ0MjcsNTI3NCw2NzMwLDQ3NzgxLDU4MDAsNjg2OCwyMTIxMCw0NzkwLDU5NzAzLDIzNTAsNTI3MCw0NjY2NywzNDAyLDM0OTYsMzgzMjUsMTM4OCw0NzgyLDE4NzM1LDIzNTAsNTIzNzQsNjgwNCw3NDk4LDQ0NDU3LDI5MDYsMTM4OCwyOTI5NCw0NzAwLDYzNzg5LDY0NDIsNjgwNCw1NjEzOCw1ODAyLDI3NzIsMzgyMzUsMTIxMCw0Njk4LDIyODI3LDU0MTgsNjMxMjUsMzQ3Niw1ODAyLDQzNzAxLDI0ODQsNTMwMiwyNzIyMywyNjQ2LDcwOTU0LDc0NjYsMzQxMiw1NDY5OCw1NDgyLDI0MTIsMzgwNjIsNTI5NCwyNjM2LDMyMDM4LDY5NTQsNjAyNDUsMjc3Miw0ODI2LDQzMzU3LDIzOTQsNTI3NCwzOTUwMSw2NzMwLDcyMzU3LDU4MDAsNTg0NCw1Mzk3OCw0NzkwLDIzNTgsMzgwMzksNTI3MCw4NzYyNywzNDAyLDM0OTYsNTQ3MDgsNTQ4NCw0NzgyLDQzMzExLDIzNTAsMzIyMiwyNzk3OCw3NDk4LDY4OTY1LDI5MDQsNTQ4NCw0NTY3Nyw0NzAwLDY0NDQsMzk1NzMsNjgwNCw2OTg2LDE5Mjg1LDI3NzIsNjI4MTEsMTIxMCw0Njk4LDQ3NDAzLDU0MTgsNTc4MCwzODU3MCw1NTQ2LDc2NDY5LDI0MjAsNTMwMiw1MTc5OSwyNjQ2LDU0MTQsMzY1MDEsMzQxMiw1NTQ2LDE4ODY5LDI0MTIsNTQ0NDYsNTI3Niw2NzMyLDQ4NDIyLDY4MjIsMjkwMCwyODAxMCw0ODI2LDkyNTA5LDIzOTQsNTI3NCw1NTg4Myw2NzMwLDY4MjAsNDc5NTYsNTgxMiwyNzc4LDE4Nzc5LDIzNTgsNjI2MTUsNTI3MCw1NDUwLDQ2NzU3LDM0OTIsNTU1NiwyNzMxOCw0NzE4LDY3ODg3LDIzNTAsMzIyMiw1MjU1NCw3NDk4LDM0MjgsMzgyNTIsNTQ2OCw0NzAwLDMxMDIyLDY0NDQsNjQxNDksNjgwNCw2OTg2LDQzODYxLDI3NzIsNTMzOCwzNTQyMSwyNjUwLDcwOTU1LDU0MTgsNTc4MCw1NDk1NCw1NTQ2LDI3NDAsMzgwNzQsNTMwMiwyNjQ2LDI5OTkxLDMzNjYsNjEwMTEsMzQxMiw1NTQ2LDQzNDQ1LDI0MTIsNTI5NCwzNTQwNiw2NzMyLDcyOTk4LDY4MjAsNjk5Niw1MjU4NiwyNzc4LDIzOTYsMzgwNDUsNTI3NCw2Njk4LDIzMzMzLDY4MjAsNjQzMzgsNTgxMiwyNzQ2LDQzMzU1LDIzNTgsNTI3MCwzOTQ5OSw1NDUwLDc5NTI1LDM0OTIsNTU0OF0saD1bMTg4Nyw5NjY3MzIsOTY3MjMxLDk2NzczMyw5NjgyNjUsOTY4NzY2LDk2OTI5Nyw5Njk3OTgsOTcwMjk4LDk3MDgyOSw5NzEzMzAsOTcxODMwLDk3MjM2Miw5NzI4NjMsOTczMzk1LDk3Mzg5Niw5NzQzOTcsOTc0OTI4LDk3NTQyOCw5NzU5MjksOTc2NDYxLDk3Njk2Miw5Nzc0NjIsOTc3OTk0LDk3ODQ5NCw5NzkwMjYsOTc5NTI2LDk4MDAyNiw5ODA1NTgsOTgxMDU5LDk4MTU1OSw5ODIwOTEsOTgyNTkzLDk4MzEyNCw5ODM2MjQsOTg0MTI0LDk4NDY1Niw5ODUxNTcsOTg1NjU2LDk4NjE4OSw5ODY2OTAsOTg3MTkxLDk4NzcyMiw5ODgyMjIsOTg4NzUzLDk4OTI1NCw5ODk3NTQsOTkwMjg2LDk5MDc4OCw5OTEyODgsOTkxODE5LDk5MjMxOSw5OTI4NTEsOTkzMzUyLDk5Mzg1MSw5OTQzODMsOTk0ODg1LDk5NTM4NSw5OTU5MTcsOTk2NDE4LDk5NjkxOCw5OTc0NTAsOTk3OTQ5LDk5ODQ4MSw5OTg5ODIsOTk5NDgzLDEwMDAwMTQsMTAwMDUxNSwxMDAxMDE2LDEwMDE1NDgsMTAwMjA0NywxMDAyNTc4LDEwMDMwODAsMTAwMzU4MCwxMDA0MTExLDEwMDQ2MTMsMTAwNTExMywxMDA1NjQ1LDEwMDYxNDYsMTAwNjY0NSwxMDA3MTc3LDEwMDc2NzgsMTAwODIwOSwxMDA4NzEwLDEwMDkyMTEsMTAwOTc0MywxMDEwMjQzLDEwMTA3NDMsMTAxMTI3NSwxMDExNzc1LDEwMTIzMDYsMTAxMjgwNywxMDEzMzA4LDEwMTM4NDAsMTAxNDM0MSwxMDE0ODQxLDEwMTUzNzMsMTAxNTg3NCwxMDE2NDA0LDEwMTY5MDUsMTAxNzQwNSwxMDE3OTM3LDEwMTg0MzgsMTAxODkzOSwxMDE5NDcxLDEwMTk5NzIsMTAyMDQ3MSwxMDIxMDAyLDEwMjE1MDMsMTAyMjAzNSwxMDIyNTM1LDEwMjMwMzYsMTAyMzU2OCwxMDI0MDY5LDEwMjQ1NjgsMTAyNTEwMCwxMDI1NjAxLDEwMjYxMDIsMTAyNjYzMywxMDI3MTMzLDEwMjc2NjYsMTAyODE2NywxMDI4NjY2LDEwMjkxOTgsMTAyOTY5OSwxMDMwMTk5LDEwMzA3MzAsMTAzMTIzMSwxMDMxNzYzLDEwMzIyNjQsMTAzMjc2NCwxMDMzMjk2LDEwMzM3OTcsMTAzNDI5NywxMDM0ODI4LDEwMzUzMjksMTAzNTgzMCwxMDM2MzYyLDEwMzY4NjEsMTAzNzM5MywxMDM3ODk0LDEwMzgzOTQsMTAzODkyNSwxMDM5NDI3LDEwMzk5MjcsMTA0MDQ1OSwxMDQwOTU5LDEwNDE0OTEsMTA0MTk5MiwxMDQyNDkyLDEwNDMwMjMsMTA0MzUyNCwxMDQ0MDI0LDEwNDQ1NTYsMTA0NTA1NywxMDQ1NTU4LDEwNDYwOTAsMTA0NjU5MCwxMDQ3MTIxLDEwNDc2MjIsMTA0ODEyMiwxMDQ4NjU0LDEwNDkxNTQsMTA0OTY1NSwxMDUwMTg3LDEwNTA2ODksMTA1MTIxOSwxMDUxNzIwLDEwNTIyMjAsMTA1Mjc1MSwxMDUzMjUyLDEwNTM3NTIsMTA1NDI4NCwxMDU0Nzg2LDEwNTUyODUsMTA1NTgxNywxMDU2MzE3LDEwNTY4NDksMTA1NzM0OSwxMDU3ODUwLDEwNTgzODIsMTA1ODg4MywxMDU5MzgzLDEwNTk5MTUsMTA2MDQxNSwxMDYwOTQ3LDEwNjE0NDcsMTA2MTk0NywxMDYyNDc5LDEwNjI5ODEsMTA2MzQ4MCwxMDY0MDEyLDEwNjQ1MTQsMTA2NTAxNCwxMDY1NTQ1LDEwNjYwNDUsMTA2NjU3NywxMDY3MDc4LDEwNjc1NzgsMTA2ODExMCwxMDY4NjExLDEwNjkxMTIsMTA2OTY0MiwxMDcwMTQyLDEwNzA2NzQsMTA3MTE3NSwxMDcxNjc1LDEwNzIyMDcsMTA3MjcwOSwxMDczMjA5LDEwNzM3NDAsMTA3NDI0MSwxMDc0NzQxLDEwNzUyNzMsMTA3NTc3MywxMDc2MzA1LDEwNzY4MDcsMTA3NzMwOCwxMDc3ODM5LDEwNzgzNDAsMTA3ODg0MCwxMDc5MzcyLDEwNzk4NzEsMTA4MDQwMywxMDgwOTA0XX0seyIuLi9tYWluIjo2MTcsIm9iamVjdC1hc3NpZ24iOjQ2Nn1dLDYwNDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6IkNvcHRpYyIsamRFcG9jaDoxODI1MDI5LjUsZGF5c1Blck1vbnRoOlszMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCw1XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJDb3B0aWMiLGVwb2NoczpbIkJBTSIsIkFNIl0sbW9udGhOYW1lczpbIlRob3V0IiwiUGFvcGkiLCJIYXRob3IiLCJLb2lhayIsIlRvYmkiLCJNZXNoaXIiLCJQYXJlbWhhdCIsIlBhcmVtb3VkZSIsIlBhc2hvbnMiLCJQYW9uaSIsIkVwaXAiLCJNZXNvcmkiLCJQaSBLb2dpIEVuYXZvdCJdLG1vbnRoTmFtZXNTaG9ydDpbIlRobyIsIlBhbyIsIkhhdGgiLCJLb2kiLCJUb2IiLCJNZXNoIiwiUGF0IiwiUGFkIiwiUGFzaCIsIlBhbyIsIkVwaSIsIk1lc28iLCJQaUsiXSxkYXlOYW1lczpbIlRreXJpYWthIiwiUGVzbmF1IiwiUHNob21lbnQiLCJQZWZ0b291IiwiUHRpb3UiLCJQc29vdSIsIlBzYWJiYXRvbiJdLGRheU5hbWVzU2hvcnQ6WyJUa3kiLCJQZXMiLCJQc2giLCJQZWYiLCJQdGkiLCJQc28iLCJQc2EiXSxkYXlOYW1lc01pbjpbIlRrIiwiUGVzIiwiUHNoIiwiUGVmIiwiUHQiLCJQc28iLCJQc2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCkpJTQ9PTN8fHQlND09LTF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhciksMTN9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTM9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybih0PWkueWVhcigpKTwwJiZ0KyssaS5kYXkoKSszMCooaS5tb250aCgpLTEpKzM2NSoodC0xKStNYXRoLmZsb29yKHQvNCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQpKy41LXRoaXMuamRFcG9jaCxyPU1hdGguZmxvb3IoKGUtTWF0aC5mbG9vcigoZSszNjYpLzE0NjEpKS8zNjUpKzE7cjw9MCYmci0tLGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLm5ld0RhdGUociwxLDEpLnRvSkQoKTt2YXIgbj1NYXRoLmZsb29yKGUvMzApKzEsaT1lLTMwKihuLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShyLG4saSl9fSksbi5jYWxlbmRhcnMuY29wdGljPWF9LHsiLi4vbWFpbiI6NjE3LCJvYmplY3QtYXNzaWduIjo0NjZ9XSw2MDU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJEaXNjd29ybGQiLGpkRXBvY2g6MTcyMTQyNS41LGRheXNQZXJNb250aDpbMTYsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzJdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkRpc2N3b3JsZCIsZXBvY2hzOlsiQlVDIiwiVUMiXSxtb250aE5hbWVzOlsiSWNrIiwiT2ZmbGUiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiR3J1bmUiLCJBdWd1c3QiLCJTcHVuZSIsIlNla3RvYmVyIiwiRW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkljayIsIk9mZiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkdydSIsIkF1ZyIsIlNwdSIsIlNlayIsIkVtYiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiT2N0ZWRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk9jdCIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJPYyIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Inl5eXkvbW0vZGQiLGZpcnN0RGF5OjIsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLCExfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwxM30sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDQwMH0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzgpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdfSxkYXlzSW5XZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDh9LGRheU9mV2VlazpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLmRheSgpKzEpJTh9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZGF5T2ZXZWVrKHQsZSxyKTtyZXR1cm4gbj49MiYmbjw9Nn0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm57Y2VudHVyeTpvW01hdGguZmxvb3IoKGkueWVhcigpLTEpLzEwMCkrMV18fCIifX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIHQ9aS55ZWFyKCkrKGkueWVhcigpPDA/MTowKSxlPWkubW9udGgoKSwocj1pLmRheSgpKSsoZT4xPzE2OjApKyhlPjI/MzIqKGUtMik6MCkrNDAwKih0LTEpK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQrLjUpLU1hdGguZmxvb3IodGhpcy5qZEVwb2NoKS0xO3ZhciBlPU1hdGguZmxvb3IodC80MDApKzE7dC09NDAwKihlLTEpLHQrPXQ+MTU/MTY6MDt2YXIgcj1NYXRoLmZsb29yKHQvMzIpKzEsbj10LTMyKihyLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShlPD0wP2UtMTplLHIsbil9fSk7dmFyIG89ezIwOiJGcnVpdGJhdCIsMjE6IkFuY2hvdnkifTtuLmNhbGVuZGFycy5kaXNjd29ybGQ9YX0seyIuLi9tYWluIjo2MTcsIm9iamVjdC1hc3NpZ24iOjQ2Nn1dLDYwNjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6IkV0aGlvcGlhbiIsamRFcG9jaDoxNzI0MjIwLjUsZGF5c1Blck1vbnRoOlszMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCw1XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJFdGhpb3BpYW4iLGVwb2NoczpbIkJFRSIsIkVFIl0sbW9udGhOYW1lczpbIk1lc2tlcmVtIiwiVGlrZW1ldCIsIkhpZGFyIiwiVGFoZXNhcyIsIlRpciIsIllla2F0aXQiLCJNZWdhYml0IiwiTWlhemlhIiwiR2VuYm90IiwiU2VuZSIsIkhhbWxlIiwiTmVoYXNlIiwiUGFndW1lIl0sbW9udGhOYW1lc1Nob3J0OlsiTWVzIiwiVGlrIiwiSGlkIiwiVGFoIiwiVGlyIiwiWWVrIiwiTWVnIiwiTWlhIiwiR2VuIiwiU2VuIiwiSGFtIiwiTmVoIiwiUGFnIl0sZGF5TmFtZXM6WyJFaHVkIiwiU2Vnbm8iLCJNYWtzZWdubyIsIklyb2IiLCJIYW11cyIsIkFyYiIsIktpZGFtZSJdLGRheU5hbWVzU2hvcnQ6WyJFaHUiLCJTZWciLCJNYWsiLCJJcm8iLCJIYW0iLCJBcmIiLCJLaWQiXSxkYXlOYW1lc01pbjpbIkVoIiwiU2UiLCJNYSIsIklyIiwiSGEiLCJBciIsIktpIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4odD1lLnllYXIoKSsoZS55ZWFyKCk8MD8xOjApKSU0PT0zfHx0JTQ9PS0xfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyfHxuLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpLDEzfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEzPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4odD1pLnllYXIoKSk8MCYmdCsrLGkuZGF5KCkrMzAqKGkubW9udGgoKS0xKSszNjUqKHQtMSkrTWF0aC5mbG9vcih0LzQpK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLmpkRXBvY2gscj1NYXRoLmZsb29yKChlLU1hdGguZmxvb3IoKGUrMzY2KS8xNDYxKSkvMzY1KSsxO3I8PTAmJnItLSxlPU1hdGguZmxvb3IodCkrLjUtdGhpcy5uZXdEYXRlKHIsMSwxKS50b0pEKCk7dmFyIG49TWF0aC5mbG9vcihlLzMwKSsxLGk9ZS0zMCoobi0xKSsxO3JldHVybiB0aGlzLm5ld0RhdGUocixuLGkpfX0pLG4uY2FsZW5kYXJzLmV0aGlvcGlhbj1hfSx7Ii4uL21haW4iOjYxNywib2JqZWN0LWFzc2lnbiI6NDY2fV0sNjA3OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQtZSpNYXRoLmZsb29yKHQvZSl9YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6IkhlYnJldyIsamRFcG9jaDozNDc5OTUuNSxkYXlzUGVyTW9udGg6WzMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDI5XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6NyxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJIZWJyZXciLGVwb2NoczpbIkJBTSIsIkFNIl0sbW9udGhOYW1lczpbIk5pc2FuIiwiSXlhciIsIlNpdmFuIiwiVGFtbXV6IiwiQXYiLCJFbHVsIiwiVGlzaHJlaSIsIkNoZXNodmFuIiwiS2lzbGV2IiwiVGV2ZXQiLCJTaGV2YXQiLCJBZGFyIiwiQWRhciBJSSJdLG1vbnRoTmFtZXNTaG9ydDpbIk5pcyIsIkl5YSIsIlNpdiIsIlRhbSIsIkF2IiwiRWx1IiwiVGlzIiwiQ2hlIiwiS2lzIiwiVGV2IiwiU2hlIiwiQWRhIiwiQWQyIl0sZGF5TmFtZXM6WyJZb20gUmlzaG9uIiwiWW9tIFNoZW5pIiwiWW9tIFNobGlzaGkiLCJZb20gUmV2aSdpIiwiWW9tIENoYW1pc2hpIiwiWW9tIFNoaXNoaSIsIllvbSBTaGFiYmF0Il0sZGF5TmFtZXNTaG9ydDpbIlJpcyIsIlNoZSIsIlNobCIsIlJldiIsIkNoYSIsIlNoaSIsIlNoYSJdLGRheU5hbWVzTWluOlsiUmkiLCJTaGUiLCJTaGwiLCJSZSIsIkNoIiwiU2hpIiwiU2hhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4gdGhpcy5fbGVhcFllYXIoZS55ZWFyKCkpfSxfbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIG8oNyoodD10PDA/dCsxOnQpKzEsMTkpPDd9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLHRoaXMuX2xlYXBZZWFyKHQueWVhcj90LnllYXIoKTp0KT8xMzoxMn0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLnllYXIoKSx0aGlzLnRvSkQoLTE9PT10PzE6dCsxLDcsMSktdGhpcy50b0pEKHQsNywxKX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC55ZWFyJiYoZT10Lm1vbnRoKCksdD10LnllYXIoKSksdGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKSwxMj09PWUmJnRoaXMubGVhcFllYXIodCl8fDg9PT1lJiY1PT09byh0aGlzLmRheXNJblllYXIodCksMTApPzMwOjk9PT1lJiYzPT09byh0aGlzLmRheXNJblllYXIodCksMTApPzI5OnRoaXMuZGF5c1Blck1vbnRoW2UtMV19LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA2IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybnt5ZWFyVHlwZToodGhpcy5sZWFwWWVhcihpKT8iZW1ib2xpc21pYyI6ImNvbW1vbiIpKyIgIitbImRlZmljaWVudCIsInJlZ3VsYXIiLCJjb21wbGV0ZSJdW3RoaXMuZGF5c0luWWVhcihpKSUxMC0zXX19LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9aS55ZWFyKCksZT1pLm1vbnRoKCkscj1pLmRheSgpO3ZhciBhPXQ8PTA/dCsxOnQsbz10aGlzLmpkRXBvY2grdGhpcy5fZGVsYXkxKGEpK3RoaXMuX2RlbGF5MihhKStyKzE7aWYoZTw3KXtmb3IodmFyIHM9NztzPD10aGlzLm1vbnRoc0luWWVhcih0KTtzKyspbys9dGhpcy5kYXlzSW5Nb250aCh0LHMpO2ZvcihzPTE7czxlO3MrKylvKz10aGlzLmRheXNJbk1vbnRoKHQscyl9ZWxzZSBmb3Iocz03O3M8ZTtzKyspbys9dGhpcy5kYXlzSW5Nb250aCh0LHMpO3JldHVybiBvfSxfZGVsYXkxOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IoKDIzNSp0LTIzNCkvMTkpLHI9MTIwODQrMTM3NTMqZSxuPTI5KmUrTWF0aC5mbG9vcihyLzI1OTIwKTtyZXR1cm4gbygzKihuKzEpLDcpPDMmJm4rKyxufSxfZGVsYXkyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2RlbGF5MSh0LTEpLHI9dGhpcy5fZGVsYXkxKHQpO3JldHVybiB0aGlzLl9kZWxheTEodCsxKS1yPT0zNTY/MjpyLWU9PTM4Mj8xOjB9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjU7Zm9yKHZhciBlPU1hdGguZmxvb3IoOTg0OTYqKHQtdGhpcy5qZEVwb2NoKS8zNTk3NTM1MSktMTt0Pj10aGlzLnRvSkQoLTE9PT1lPzE6ZSsxLDcsMSk7KWUrKztmb3IodmFyIHI9dDx0aGlzLnRvSkQoZSwxLDEpPzc6MTt0PnRoaXMudG9KRChlLHIsdGhpcy5kYXlzSW5Nb250aChlLHIpKTspcisrO3ZhciBuPXQtdGhpcy50b0pEKGUsciwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUoZSxyLG4pfX0pLG4uY2FsZW5kYXJzLmhlYnJldz1hfSx7Ii4uL21haW4iOjYxNywib2JqZWN0LWFzc2lnbiI6NDY2fV0sNjA4OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiSXNsYW1pYyIsamRFcG9jaDoxOTQ4NDM5LjUsZGF5c1Blck1vbnRoOlszMCwyOSwzMCwyOSwzMCwyOSwzMCwyOSwzMCwyOSwzMCwyOV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiSXNsYW1pYyIsZXBvY2hzOlsiQkgiLCJBSCJdLG1vbnRoTmFtZXM6WyJNdWhhcnJhbSIsIlNhZmFyIiwiUmFiaScgYWwtYXd3YWwiLCJSYWJpJyBhbC10aGFuaSIsIkp1bWFkYSBhbC1hd3dhbCIsIkp1bWFkYSBhbC10aGFuaSIsIlJhamFiIiwiU2hhJ2FiYW4iLCJSYW1hZGFuIiwiU2hhd3dhbCIsIkRodSBhbC1RaSdkYWgiLCJEaHUgYWwtSGlqamFoIl0sbW9udGhOYW1lc1Nob3J0OlsiTXVoIiwiU2FmIiwiUmFiMSIsIlJhYjIiLCJKdW0xIiwiSnVtMiIsIlJhaiIsIlNoYSciLCJSYW0iLCJTaGF3IiwiRGh1USIsIkRodUgiXSxkYXlOYW1lczpbIllhd20gYWwtYWhhZCIsIllhd20gYWwtaXRobmF5biIsIllhd20gYXRoLXRodWxhYXRoYWEnIiwiWWF3bSBhbC1hcmJpJ2FhJyIsIllhd20gYWwta2hhbVx1MDEyYnMiLCJZYXdtIGFsLWp1bSdhIiwiWWF3bSBhcy1zYWJ0Il0sZGF5TmFtZXNTaG9ydDpbIkFoYSIsIkl0aCIsIlRodSIsIkFyYiIsIktoYSIsIkp1bSIsIlNhYiJdLGRheU5hbWVzTWluOlsiQWgiLCJJdCIsIlRoIiwiQXIiLCJLaCIsIkp1IiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheTo2LGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuKDExKnRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCkrMTQpJTMwPDExfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZWFwWWVhcih0KT8zNTU6MzU0fSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA1IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gdD1pLnllYXIoKSxlPWkubW9udGgoKSx0PXQ8PTA/dCsxOnQsKHI9aS5kYXkoKSkrTWF0aC5jZWlsKDI5LjUqKGUtMSkpKzM1NCoodC0xKStNYXRoLmZsb29yKCgzKzExKnQpLzMwKSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0KSsuNTt2YXIgZT1NYXRoLmZsb29yKCgzMCoodC10aGlzLmpkRXBvY2gpKzEwNjQ2KS8xMDYzMSk7ZT1lPD0wP2UtMTplO3ZhciByPU1hdGgubWluKDEyLE1hdGguY2VpbCgodC0yOS10aGlzLnRvSkQoZSwxLDEpKS8yOS41KSsxKSxuPXQtdGhpcy50b0pEKGUsciwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUoZSxyLG4pfX0pLG4uY2FsZW5kYXJzLmlzbGFtaWM9YX0seyIuLi9tYWluIjo2MTcsIm9iamVjdC1hc3NpZ24iOjQ2Nn1dLDYwOTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6Ikp1bGlhbiIsamRFcG9jaDoxNzIxNDIzLjUsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiSnVsaWFuIixlcG9jaHM6WyJCQyIsIkFEIl0sbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoibW0vZGQveXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4odD1lLnllYXIoKTwwP2UueWVhcigpKzE6ZS55ZWFyKCkpJTQ9PTB9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKDQtKG4uZGF5T2ZXZWVrKCl8fDcpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIHQ9aS55ZWFyKCksZT1pLm1vbnRoKCkscj1pLmRheSgpLHQ8MCYmdCsrLGU8PTImJih0LS0sZSs9MTIpLE1hdGguZmxvb3IoMzY1LjI1Kih0KzQ3MTYpKStNYXRoLmZsb29yKDMwLjYwMDEqKGUrMSkpK3ItMTUyNC41fSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih0Ky41KSsxNTI0LHI9TWF0aC5mbG9vcigoZS0xMjIuMSkvMzY1LjI1KSxuPU1hdGguZmxvb3IoMzY1LjI1KnIpLGk9TWF0aC5mbG9vcigoZS1uKS8zMC42MDAxKSxhPWktTWF0aC5mbG9vcihpPDE0PzE6MTMpLG89ci1NYXRoLmZsb29yKGE+Mj80NzE2OjQ3MTUpLHM9ZS1uLU1hdGguZmxvb3IoMzAuNjAwMSppKTtyZXR1cm4gbzw9MCYmby0tLHRoaXMubmV3RGF0ZShvLGEscyl9fSksbi5jYWxlbmRhcnMuanVsaWFuPWF9LHsiLi4vbWFpbiI6NjE3LCJvYmplY3QtYXNzaWduIjo0NjZ9XSw2MTA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdC1lKk1hdGguZmxvb3IodC9lKX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIG8odC0xLGUpKzF9YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6Ik1heWFuIixqZEVwb2NoOjU4NDI4Mi41LGhhc1llYXJaZXJvOiEwLG1pbk1vbnRoOjAsZmlyc3RNb250aDowLG1pbkRheTowLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ik1heWFuIixlcG9jaHM6WyIiLCIiXSxtb250aE5hbWVzOlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciXSxtb250aE5hbWVzU2hvcnQ6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyJdLGRheU5hbWVzOlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5Il0sZGF5TmFtZXNTaG9ydDpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSJdLGRheU5hbWVzTWluOlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5Il0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiWVlZWS5tLmQiLGZpcnN0RGF5OjAsaXNSVEw6ITEsaGFhYk1vbnRoczpbIlBvcCIsIlVvIiwiWmlwIiwiWm90eiIsIlR6ZWMiLCJYdWwiLCJZYXhraW4iLCJNb2wiLCJDaGVuIiwiWWF4IiwiWmFjIiwiQ2VoIiwiTWFjIiwiS2Fua2luIiwiTXVhbiIsIlBheCIsIktheWFiIiwiQ3Vta3UiLCJVYXllYiJdLHR6b2xraW5Nb250aHM6WyJJbWl4IiwiSWsiLCJBa2JhbCIsIkthbiIsIkNoaWNjaGFuIiwiQ2ltaSIsIk1hbmlrIiwiTGFtYXQiLCJNdWx1YyIsIk9jIiwiQ2h1ZW4iLCJFYiIsIkJlbiIsIkl4IiwiTWVuIiwiQ2liIiwiQ2FiYW4iLCJFdHpuYWIiLCJDYXVhYyIsIkFoYXUiXX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksITF9LGZvcm1hdFllYXI6ZnVuY3Rpb24odCl7dD10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpO3ZhciBlPU1hdGguZmxvb3IodC80MDApO3JldHVybiB0JT00MDAsdCs9dDwwPzQwMDowLGUrIi4iK01hdGguZmxvb3IodC8yMCkrIi4iK3QlMjB9LGZvclllYXI6ZnVuY3Rpb24odCl7aWYoKHQ9dC5zcGxpdCgiLiIpKS5sZW5ndGg8Myl0aHJvdyJJbnZhbGlkIE1heWFuIHllYXIiO2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49cGFyc2VJbnQodFtyXSwxMCk7aWYoTWF0aC5hYnMobik+MTl8fHI+MCYmbjwwKXRocm93IkludmFsaWQgTWF5YW4geWVhciI7ZT0yMCplK259cmV0dXJuIGV9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDE4fSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSksMH0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDM2MH0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKSwyMH0sZGF5c0luV2VlazpmdW5jdGlvbigpe3JldHVybiA1fSxkYXlPZldlZWs6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKS5kYXkoKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLCEwfSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLnRvSkQoKSxhPXRoaXMuX3RvSGFhYihpKSxvPXRoaXMuX3RvVHpvbGtpbihpKTtyZXR1cm57aGFhYk1vbnRoTmFtZTp0aGlzLmxvY2FsLmhhYWJNb250aHNbYVswXS0xXSxoYWFiTW9udGg6YVswXSxoYWFiRGF5OmFbMV0sdHpvbGtpbkRheU5hbWU6dGhpcy5sb2NhbC50em9sa2luTW9udGhzW29bMF0tMV0sdHpvbGtpbkRheTpvWzBdLHR6b2xraW5UcmVjZW5hOm9bMV19fSxfdG9IYWFiOmZ1bmN0aW9uKHQpe3ZhciBlPW8oKHQtPXRoaXMuamRFcG9jaCkrOCszNDAsMzY1KTtyZXR1cm5bTWF0aC5mbG9vcihlLzIwKSsxLG8oZSwyMCldfSxfdG9Uem9sa2luOmZ1bmN0aW9uKHQpe3JldHVybltzKCh0LT10aGlzLmpkRXBvY2gpKzIwLDIwKSxzKHQrNCwxMyldfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gaS5kYXkoKSsyMCppLm1vbnRoKCkrMzYwKmkueWVhcigpK3RoaXMuamRFcG9jaH0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0KSsuNS10aGlzLmpkRXBvY2g7dmFyIGU9TWF0aC5mbG9vcih0LzM2MCk7dCU9MzYwLHQrPXQ8MD8zNjA6MDt2YXIgcj1NYXRoLmZsb29yKHQvMjApLG49dCUyMDtyZXR1cm4gdGhpcy5uZXdEYXRlKGUscixuKX19KSxuLmNhbGVuZGFycy5tYXlhbj1hfSx7Ii4uL21haW4iOjYxNywib2JqZWN0LWFzc2lnbiI6NDY2fV0sNjExOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXI7dmFyIG89bi5pbnN0YW5jZSgiZ3JlZ29yaWFuIik7aShhLnByb3RvdHlwZSx7bmFtZToiTmFuYWtzaGFoaSIsamRFcG9jaDoyMjU3NjczLjUsZGF5c1Blck1vbnRoOlszMSwzMSwzMSwzMSwzMSwzMCwzMCwzMCwzMCwzMCwzMCwzMF0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiTmFuYWtzaGFoaSIsZXBvY2hzOlsiQk4iLCJBTiJdLG1vbnRoTmFtZXM6WyJDaGV0IiwiVmFpc2FraCIsIkpldGgiLCJIYXJoIiwiU2F3YW4iLCJCaGFkb24iLCJBc3N1IiwiS2F0YWsiLCJNYWdoYXIiLCJQb2giLCJNYWdoIiwiUGhhZ3VuIl0sbW9udGhOYW1lc1Nob3J0OlsiQ2hlIiwiVmFpIiwiSmV0IiwiSGFyIiwiU2F3IiwiQmhhIiwiQXNzIiwiS2F0IiwiTWdyIiwiUG9oIiwiTWdoIiwiUGhhIl0sZGF5TmFtZXM6WyJTb212YWFyIiwiTWFuZ2FsdmFyIiwiQnVkaHZhYXIiLCJWZWVydmFhciIsIlNodWthcnZhYXIiLCJTYW5pY2hhcnZhYXIiLCJFdHZhYXIiXSxkYXlOYW1lc1Nob3J0OlsiU29tIiwiTWFuZ2FsIiwiQnVkaCIsIlZlZXIiLCJTaHVrYXIiLCJTYW5pY2hhciIsIkV0Il0sZGF5TmFtZXNNaW46WyJTbyIsIk1hIiwiQnUiLCJWZSIsIlNoIiwiU2EiLCJFdCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6ImRkLW1tLXl5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcnx8bi5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKTtyZXR1cm4gby5sZWFwWWVhcihlLnllYXIoKSsoZS55ZWFyKCk8MT8xOjApKzE0NjkpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgxLShuLmRheU9mV2VlaygpfHw3KSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWRNb250aCk7KHQ9aS55ZWFyKCkpPDAmJnQrKztmb3IodmFyIGE9aS5kYXkoKSxzPTE7czxpLm1vbnRoKCk7cysrKWErPXRoaXMuZGF5c1Blck1vbnRoW3MtMV07cmV0dXJuIGErby50b0pEKHQrMTQ2OCwzLDEzKX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0Ky41KTtmb3IodmFyIGU9TWF0aC5mbG9vcigodC0odGhpcy5qZEVwb2NoLTEpKS8zNjYpO3Q+PXRoaXMudG9KRChlKzEsMSwxKTspZSsrO2Zvcih2YXIgcj10LU1hdGguZmxvb3IodGhpcy50b0pEKGUsMSwxKSsuNSkrMSxuPTE7cj50aGlzLmRheXNJbk1vbnRoKGUsbik7KXItPXRoaXMuZGF5c0luTW9udGgoZSxuKSxuKys7cmV0dXJuIHRoaXMubmV3RGF0ZShlLG4scil9fSksbi5jYWxlbmRhcnMubmFuYWtzaGFoaT1hfSx7Ii4uL21haW4iOjYxNywib2JqZWN0LWFzc2lnbiI6NDY2fV0sNjEyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiTmVwYWxpIixqZEVwb2NoOjE3MDA3MDkuNSxkYXlzUGVyTW9udGg6WzMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxkYXlzUGVyWWVhcjozNjUscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiTmVwYWxpIixlcG9jaHM6WyJCQlMiLCJBQlMiXSxtb250aE5hbWVzOlsiQmFpc2FraCIsIkplc3RoYSIsIkFzaGFkaCIsIlNocmF3YW4iLCJCaGFkcmEiLCJBc2h3aW4iLCJLYXJ0aWsiLCJNYW5nc2lyIiwiUGF1c2giLCJNYW5naCIsIkZhbGd1biIsIkNoYWl0cmEiXSxtb250aE5hbWVzU2hvcnQ6WyJCYWkiLCJKZSIsIkFzIiwiU2hyYSIsIkJoYSIsIkFzaCIsIkthciIsIk1hbmciLCJQYXUiLCJNYSIsIkZhbCIsIkNoYWkiXSxkYXlOYW1lczpbIkFhaXRhYmFhciIsIlNvbWJhYXIiLCJNYW5nbGJhYXIiLCJCdWRoYWJhYXIiLCJCaWhpYmFhciIsIlNodWtyYWJhYXIiLCJTaGFuaWJhYXIiXSxkYXlOYW1lc1Nob3J0OlsiQWFpdGEiLCJTb20iLCJNYW5nbCIsIkJ1ZGhhIiwiQmloaSIsIlNodWtyYSIsIlNoYW5pIl0sZGF5TmFtZXNNaW46WyJBYWkiLCJTbyIsIk1hbiIsIkJ1IiwiQmkiLCJTaHUiLCJTaGEiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheToxLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGF5c0luWWVhcih0KSE9PXRoaXMuZGF5c1BlclllYXJ9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLnllYXIoKSx2b2lkIDA9PT10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdKXJldHVybiB0aGlzLmRheXNQZXJZZWFyO2Zvcih2YXIgZT0wLHI9dGhpcy5taW5Nb250aDtyPD0xMjtyKyspZSs9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XVtyXTtyZXR1cm4gZX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC55ZWFyJiYoZT10Lm1vbnRoKCksdD10LnllYXIoKSksdGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKSx2b2lkIDA9PT10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdP3RoaXMuZGF5c1Blck1vbnRoW2UtMV06dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XVtlXX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDYhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9aS55ZWFyKCksZT1pLm1vbnRoKCkscj1pLmRheSgpO3ZhciBhPW4uaW5zdGFuY2UoKSxvPTAscz1lLGw9dDt0aGlzLl9jcmVhdGVNaXNzaW5nQ2FsZW5kYXJEYXRhKHQpO3ZhciBjPXQtKHM+OXx8OT09PXMmJnI+PXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bMF0/NTY6NTcpO2Zvcig5IT09ZSYmKG89cixzLS0pOzkhPT1zOylzPD0wJiYocz0xMixsLS0pLG8rPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bc10scy0tO3JldHVybiA5PT09ZT8obys9ci10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzBdKTwwJiYobys9YS5kYXlzSW5ZZWFyKGMpKTpvKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzldLXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bMF0sYS5uZXdEYXRlKGMsMSwxKS5hZGQobywiZCIpLnRvSkQoKX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPW4uaW5zdGFuY2UoKS5mcm9tSkQodCkscj1lLnllYXIoKSxpPWUuZGF5T2ZZZWFyKCksYT1yKzU2O3RoaXMuX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGEoYSk7Zm9yKHZhciBvPTkscz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2FdWzBdLGw9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVthXVtvXS1zKzE7aT5sOykrK28+MTImJihvPTEsYSsrKSxsKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2FdW29dO3ZhciBjPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbYV1bb10tKGwtaSk7cmV0dXJuIHRoaXMubmV3RGF0ZShhLG8sYyl9LF9jcmVhdGVNaXNzaW5nQ2FsZW5kYXJEYXRhOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF5c1Blck1vbnRoLnNsaWNlKDApO2UudW5zaGlmdCgxNyk7Zm9yKHZhciByPXQtMTtyPHQrMjtyKyspdm9pZCAwPT09dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtyXSYmKHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbcl09ZSl9LE5FUEFMSV9DQUxFTkRBUl9EQVRBOnsxOTcwOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3MTpbMTgsMzEsMzEsMzIsMzEsMzIsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5NzI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwxOTczOlsxOSwzMCwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMTk3NDpbMTksMzEsMzEsMzIsMzAsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5NzU6WzE4LDMxLDMxLDMyLDMyLDMwLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTc2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk3NzpbMTgsMzEsMzIsMzEsMzIsMzEsMzEsMjksMzAsMjksMzAsMjksMzFdLDE5Nzg6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTc5OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4MDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5ODE6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwxOTgyOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4MzpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5ODQ6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTg1OlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMTk4NjpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5ODc6WzE4LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg4OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk4OTpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTA6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTkxOlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDE5OTM6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk0OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5NTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDE5OTY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwxOTk3OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5ODpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyZTM6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDAxOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwMjpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMDM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDA0OlsxNywzMCwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAwNTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMDY6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDA3OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAwODpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMjksMzFdLDIwMDk6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDEwOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxMTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMTI6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDEzOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxNDpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMTU6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDE2OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMjAxNzpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMTg6WzE4LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAyMDpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjE6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDIyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjAyMzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMjQ6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI1OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyNjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMjc6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDI4OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyOTpbMTgsMzEsMzEsMzIsMzEsMzIsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMzA6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDMwLDMwLDMwLDMxXSwyMDMxOlsxNywzMSwzMiwzMSwzMiwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMV0sMjAzMjpbMTcsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzJdLDIwMzM6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDM0OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAzNTpbMTcsMzAsMzIsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMjksMzFdLDIwMzY6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDM3OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzODpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMzk6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDQwOlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0MTpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNDI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDQzOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMjA0NDpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNDU6WzE4LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQ2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA0NzpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNDg6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQ5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA1MDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwNTE6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDUyOlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA1MzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDIwNTQ6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDU1OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwzMCwyOSwzMF0sMjA1NjpbMTcsMzEsMzEsMzIsMzEsMzIsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNTc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDU4OlsxNywzMCwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA1OTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNjA6WzE3LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDYxOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA2MjpbMTcsMzAsMzIsMzEsMzIsMzEsMzEsMjksMzAsMjksMzAsMjksMzFdLDIwNjM6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY0OlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2NTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNjY6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDI5LDMxXSwyMDY3OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2ODpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNjk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDcwOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMjA3MTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDczOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA3NDpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzU6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDc2OlsxNiwzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA3NzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwNzg6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDc5OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA4MDpbMTYsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDIwODE6WzE3LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDgyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4MzpbMTcsMzEsMzEsMzIsMzEsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODQ6WzE3LDMxLDMxLDMyLDMxLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg1OlsxNywzMSwzMiwzMSwzMiwzMSwzMSwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODc6WzE2LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg4OlsxNiwzMCwzMSwzMiwzMiwzMCwzMSwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTA6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkxOlsxNiwzMSwzMSwzMiwzMSwzMSwzMSwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MjpbMTYsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk0OlsxNywzMSwzMSwzMiwzMSwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5NTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMzAsMzAsMzBdLDIwOTY6WzE3LDMwLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDk3OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5ODpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMjksMzAsMjksMzAsMzAsMzFdLDIwOTk6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDI5LDMwLDMwLDMwXSwyMTAwOlsxNywzMSwzMiwzMSwzMiwzMCwzMSwzMCwyOSwzMCwyOSwzMCwzMF19fSksbi5jYWxlbmRhcnMubmVwYWxpPWF9LHsiLi4vbWFpbiI6NjE3LCJvYmplY3QtYXNzaWduIjo0NjZ9XSw2MTM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdC1lKk1hdGguZmxvb3IodC9lKX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiUGVyc2lhbiIsamRFcG9jaDoxOTQ4MzIwLjUsZGF5c1Blck1vbnRoOlszMSwzMSwzMSwzMSwzMSwzMSwzMCwzMCwzMCwzMCwzMCwyOV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiUGVyc2lhbiIsZXBvY2hzOlsiQlAiLCJBUCJdLG1vbnRoTmFtZXM6WyJGYXJ2YXJkaW4iLCJPcmRpYmVoZXNodCIsIktob3JkYWQiLCJUaXIiLCJNb3JkYWQiLCJTaGFocml2YXIiLCJNZWhyIiwiQWJhbiIsIkF6YXIiLCJEYXkiLCJCYWhtYW4iLCJFc2ZhbmQiXSxtb250aE5hbWVzU2hvcnQ6WyJGYXIiLCJPcmQiLCJLaG8iLCJUaXIiLCJNb3IiLCJTaGEiLCJNZWgiLCJBYmEiLCJBemEiLCJEYXkiLCJCYWgiLCJFc2YiXSxkYXlOYW1lczpbIllla3NoYW1iZSIsIkRvc2hhbWJlIiwiU2VzaGFtYmUiLCJDaFx4ZTZoYXJzaGFtYmUiLCJQYW5qc2hhbWJlIiwiSm9tJ2UiLCJTaGFtYmUiXSxkYXlOYW1lc1Nob3J0OlsiWWVrIiwiRG8iLCJTZSIsIkNoXHhlNiIsIlBhbmoiLCJKb20iLCJTaGEiXSxkYXlOYW1lc01pbjpbIlllIiwiRG8iLCJTZSIsIkNoIiwiUGEiLCJKbyIsIlNoIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Nixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4gNjgyKigoZS55ZWFyKCktKGUueWVhcigpPjA/NDc0OjQ3MykpJTI4MjArNDc0KzM4KSUyODE2PDY4Mn0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLShuLmRheU9mV2VlaygpKzEpJTcsImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDUhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9aS55ZWFyKCksZT1pLm1vbnRoKCkscj1pLmRheSgpO3ZhciBhPXQtKHQ+PTA/NDc0OjQ3Mykscz00NzQrbyhhLDI4MjApO3JldHVybiByKyhlPD03PzMxKihlLTEpOjMwKihlLTEpKzYpK01hdGguZmxvb3IoKDY4MipzLTExMCkvMjgxNikrMzY1KihzLTEpKzEwMjk5ODMqTWF0aC5mbG9vcihhLzI4MjApK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9KHQ9TWF0aC5mbG9vcih0KSsuNSktdGhpcy50b0pEKDQ3NSwxLDEpLHI9TWF0aC5mbG9vcihlLzEwMjk5ODMpLG49byhlLDEwMjk5ODMpLGk9MjgyMDtpZigxMDI5OTgyIT09bil7dmFyIGE9TWF0aC5mbG9vcihuLzM2Nikscz1vKG4sMzY2KTtpPU1hdGguZmxvb3IoKDIxMzQqYSsyODE2KnMrMjgxNSkvMTAyODUyMikrYSsxfXZhciBsPWkrMjgyMCpyKzQ3NDtsPWw8PTA/bC0xOmw7dmFyIGM9dC10aGlzLnRvSkQobCwxLDEpKzEsdT1jPD0xODY/TWF0aC5jZWlsKGMvMzEpOk1hdGguY2VpbCgoYy02KS8zMCksZj10LXRoaXMudG9KRChsLHUsMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGwsdSxmKX19KSxuLmNhbGVuZGFycy5wZXJzaWFuPWEsbi5jYWxlbmRhcnMuamFsYWxpPWF9LHsiLi4vbWFpbiI6NjE3LCJvYmplY3QtYXNzaWduIjo0NjZ9XSw2MTQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIiksYT1uLmluc3RhbmNlKCk7ZnVuY3Rpb24gbyh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKG8ucHJvdG90eXBlLHtuYW1lOiJUYWl3YW4iLGpkRXBvY2g6MjQxOTQwMi41LHllYXJzT2Zmc2V0OjE5MTEsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiVGFpd2FuIixlcG9jaHM6WyJCUk9DIiwiUk9DIl0sbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6MSxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoZS55ZWFyKCkpO3JldHVybiBhLmxlYXBZZWFyKHQpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7dD10aGlzLl90MmdZZWFyKGkueWVhcigpKTtyZXR1cm4gYS53ZWVrT2ZZZWFyKHQsaS5tb250aCgpLGkuZGF5KCkpfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD10aGlzLl90MmdZZWFyKGkueWVhcigpKTtyZXR1cm4gYS50b0pEKHQsaS5tb250aCgpLGkuZGF5KCkpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9YS5mcm9tSkQodCkscj10aGlzLl9nMnRZZWFyKGUueWVhcigpKTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsZS5tb250aCgpLGUuZGF5KCkpfSxfdDJnWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdCt0aGlzLnllYXJzT2Zmc2V0Kyh0Pj0tdGhpcy55ZWFyc09mZnNldCYmdDw9LTE/MTowKX0sX2cydFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQtdGhpcy55ZWFyc09mZnNldC0odD49MSYmdDw9dGhpcy55ZWFyc09mZnNldD8xOjApfX0pLG4uY2FsZW5kYXJzLnRhaXdhbj1vfSx7Ii4uL21haW4iOjYxNywib2JqZWN0LWFzc2lnbiI6NDY2fV0sNjE1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpLGE9bi5pbnN0YW5jZSgpO2Z1bmN0aW9uIG8odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1vLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShvLnByb3RvdHlwZSx7bmFtZToiVGhhaSIsamRFcG9jaDoxNTIzMDk4LjUseWVhcnNPZmZzZXQ6NTQzLGRheXNQZXJNb250aDpbMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IlRoYWkiLGVwb2NoczpbIkJCRSIsIkJFIl0sbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoZS55ZWFyKCkpO3JldHVybiBhLmxlYXBZZWFyKHQpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7dD10aGlzLl90MmdZZWFyKGkueWVhcigpKTtyZXR1cm4gYS53ZWVrT2ZZZWFyKHQsaS5tb250aCgpLGkuZGF5KCkpfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD10aGlzLl90MmdZZWFyKGkueWVhcigpKTtyZXR1cm4gYS50b0pEKHQsaS5tb250aCgpLGkuZGF5KCkpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9YS5mcm9tSkQodCkscj10aGlzLl9nMnRZZWFyKGUueWVhcigpKTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsZS5tb250aCgpLGUuZGF5KCkpfSxfdDJnWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdC10aGlzLnllYXJzT2Zmc2V0LSh0Pj0xJiZ0PD10aGlzLnllYXJzT2Zmc2V0PzE6MCl9LF9nMnRZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0K3RoaXMueWVhcnNPZmZzZXQrKHQ+PS10aGlzLnllYXJzT2Zmc2V0JiZ0PD0tMT8xOjApfX0pLG4uY2FsZW5kYXJzLnRoYWk9b30seyIuLi9tYWluIjo2MTcsIm9iamVjdC1hc3NpZ24iOjQ2Nn1dLDYxNjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6IlVtbUFsUXVyYSIsaGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiVW1tIGFsLVF1cmEiLGVwb2NoczpbIkJIIiwiQUgiXSxtb250aE5hbWVzOlsiQWwtTXVoYXJyYW0iLCJTYWZhciIsIlJhYmknIGFsLWF3d2FsIiwiUmFiaScgQWwtVGhhbmkiLCJKdW1hZGEgQWwtQXd3YWwiLCJKdW1hZGEgQWwtVGhhbmkiLCJSYWphYiIsIlNoYSdhYmFuIiwiUmFtYWRhbiIsIlNoYXd3YWwiLCJEaHUgYWwtUWknZGFoIiwiRGh1IGFsLUhpamphaCJdLG1vbnRoTmFtZXNTaG9ydDpbIk11aCIsIlNhZiIsIlJhYjEiLCJSYWIyIiwiSnVtMSIsIkp1bTIiLCJSYWoiLCJTaGEnIiwiUmFtIiwiU2hhdyIsIkRodVEiLCJEaHVIIl0sZGF5TmFtZXM6WyJZYXdtIGFsLUFoYWQiLCJZYXdtIGFsLUl0aG5haW4iLCJZYXdtIGFsLVRoYWxcdTAxMDF0aFx1MDEwMVx1MjAxOSIsIllhd20gYWwtQXJiYVx1MjAxOFx1MDEwMVx1MjAxOSIsIllhd20gYWwtS2hhbVx1MDEyYnMiLCJZYXdtIGFsLUp1bVx1MjAxOGEiLCJZYXdtIGFsLVNhYnQiXSxkYXlOYW1lc01pbjpbIkFoIiwiSXRoIiwiVGgiLCJBciIsIktoIiwiSnUiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Inl5eXkvbW0vZGQiLGZpcnN0RGF5OjYsaXNSVEw6ITB9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuIDM1NT09PXRoaXMuZGF5c0luWWVhcihlLnllYXIoKSl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MTtyPD0xMjtyKyspZSs9dGhpcy5kYXlzSW5Nb250aCh0LHIpO3JldHVybiBlfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpLnRvSkQoKS0yNGU1Ky41LGk9MCxhPTA7YTxvLmxlbmd0aDthKyspe2lmKG9bYV0+cilyZXR1cm4gb1tpXS1vW2ktMV07aSsrfXJldHVybiAzMH0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDUhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLGE9MTIqKGkueWVhcigpLTEpK2kubW9udGgoKS0xNTI5MjtyZXR1cm4gaS5kYXkoKStvW2EtMV0tMSsyNGU1LS41fSxmcm9tSkQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQtMjRlNSsuNSxyPTAsbj0wO248by5sZW5ndGgmJiEob1tuXT5lKTtuKyspcisrO3ZhciBpPXIrMTUyOTIsYT1NYXRoLmZsb29yKChpLTEpLzEyKSxzPWErMSxsPWktMTIqYSxjPWUtb1tyLTFdKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShzLGwsYyl9LGlzVmFsaWQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4uYmFzZUNhbGVuZGFyLnByb3RvdHlwZS5pc1ZhbGlkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSYmKGk9KHQ9bnVsbCE9dC55ZWFyP3QueWVhcjp0KT49MTI3NiYmdDw9MTUwMCksaX0sX3ZhbGlkYXRlOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPW4uYmFzZUNhbGVuZGFyLnByb3RvdHlwZS5fdmFsaWRhdGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKGEueWVhcjwxMjc2fHxhLnllYXI+MTUwMCl0aHJvdyBpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiBhfX0pLG4uY2FsZW5kYXJzLnVtbWFscXVyYT1hO3ZhciBvPVsyMCw1MCw3OSwxMDksMTM4LDE2OCwxOTcsMjI3LDI1NiwyODYsMzE1LDM0NSwzNzQsNDA0LDQzMyw0NjMsNDkyLDUyMiw1NTEsNTgxLDYxMSw2NDEsNjcwLDcwMCw3MjksNzU5LDc4OCw4MTgsODQ3LDg3Nyw5MDYsOTM2LDk2NSw5OTUsMTAyNCwxMDU0LDEwODMsMTExMywxMTQyLDExNzIsMTIwMSwxMjMxLDEyNjAsMTI5MCwxMzIwLDEzNTAsMTM3OSwxNDA5LDE0MzgsMTQ2OCwxNDk3LDE1MjcsMTU1NiwxNTg2LDE2MTUsMTY0NSwxNjc0LDE3MDQsMTczMywxNzYzLDE3OTIsMTgyMiwxODUxLDE4ODEsMTkxMCwxOTQwLDE5NjksMTk5OSwyMDI4LDIwNTgsMjA4NywyMTE3LDIxNDYsMjE3NiwyMjA1LDIyMzUsMjI2NCwyMjk0LDIzMjMsMjM1MywyMzgzLDI0MTMsMjQ0MiwyNDcyLDI1MDEsMjUzMSwyNTYwLDI1OTAsMjYxOSwyNjQ5LDI2NzgsMjcwOCwyNzM3LDI3NjcsMjc5NiwyODI2LDI4NTUsMjg4NSwyOTE0LDI5NDQsMjk3MywzMDAzLDMwMzIsMzA2MiwzMDkxLDMxMjEsMzE1MCwzMTgwLDMyMDksMzIzOSwzMjY4LDMyOTgsMzMyNywzMzU3LDMzODYsMzQxNiwzNDQ2LDM0NzYsMzUwNSwzNTM1LDM1NjQsMzU5NCwzNjIzLDM2NTMsMzY4MiwzNzEyLDM3NDEsMzc3MSwzODAwLDM4MzAsMzg1OSwzODg5LDM5MTgsMzk0OCwzOTc3LDQwMDcsNDAzNiw0MDY2LDQwOTUsNDEyNSw0MTU1LDQxODUsNDIxNCw0MjQ0LDQyNzMsNDMwMyw0MzMyLDQzNjIsNDM5MSw0NDIxLDQ0NTAsNDQ4MCw0NTA5LDQ1MzksNDU2OCw0NTk4LDQ2MjcsNDY1Nyw0Njg2LDQ3MTYsNDc0NSw0Nzc1LDQ4MDQsNDgzNCw0ODYzLDQ4OTMsNDkyMiw0OTUyLDQ5ODEsNTAxMSw1MDQwLDUwNzAsNTA5OSw1MTI5LDUxNTgsNTE4OCw1MjE4LDUyNDgsNTI3Nyw1MzA3LDUzMzYsNTM2Niw1Mzk1LDU0MjUsNTQ1NCw1NDg0LDU1MTMsNTU0Myw1NTcyLDU2MDIsNTYzMSw1NjYxLDU2OTAsNTcyMCw1NzQ5LDU3NzksNTgwOCw1ODM4LDU4NjcsNTg5Nyw1OTI2LDU5NTYsNTk4NSw2MDE1LDYwNDQsNjA3NCw2MTAzLDYxMzMsNjE2Miw2MTkyLDYyMjEsNjI1MSw2MjgxLDYzMTEsNjM0MCw2MzcwLDYzOTksNjQyOSw2NDU4LDY0ODgsNjUxNyw2NTQ3LDY1NzYsNjYwNiw2NjM1LDY2NjUsNjY5NCw2NzI0LDY3NTMsNjc4Myw2ODEyLDY4NDIsNjg3MSw2OTAxLDY5MzAsNjk2MCw2OTg5LDcwMTksNzA0OCw3MDc4LDcxMDcsNzEzNyw3MTY2LDcxOTYsNzIyNSw3MjU1LDcyODQsNzMxNCw3MzQ0LDczNzQsNzQwMyw3NDMzLDc0NjIsNzQ5Miw3NTIxLDc1NTEsNzU4MCw3NjEwLDc2MzksNzY2OSw3Njk4LDc3MjgsNzc1Nyw3Nzg3LDc4MTYsNzg0Niw3ODc1LDc5MDUsNzkzNCw3OTY0LDc5OTMsODAyMyw4MDUzLDgwODMsODExMiw4MTQyLDgxNzEsODIwMSw4MjMwLDgyNjAsODI4OSw4MzE5LDgzNDgsODM3OCw4NDA3LDg0MzcsODQ2Niw4NDk2LDg1MjUsODU1NSw4NTg0LDg2MTQsODY0Myw4NjczLDg3MDIsODczMiw4NzYxLDg3OTEsODgyMSw4ODUwLDg4ODAsODkwOSw4OTM4LDg5NjgsODk5Nyw5MDI3LDkwNTYsOTA4Niw5MTE1LDkxNDUsOTE3NSw5MjA1LDkyMzQsOTI2NCw5MjkzLDkzMjIsOTM1Miw5MzgxLDk0MTAsOTQ0MCw5NDcwLDk0OTksOTUyOSw5NTU5LDk1ODksOTYxOCw5NjQ4LDk2NzcsOTcwNiw5NzM2LDk3NjUsOTc5NCw5ODI0LDk4NTMsOTg4Myw5OTEzLDk5NDMsOTk3MiwxMDAwMiwxMDAzMiwxMDA2MSwxMDA5MCwxMDEyMCwxMDE0OSwxMDE3OCwxMDIwOCwxMDIzNywxMDI2NywxMDI5NywxMDMyNiwxMDM1NiwxMDM4NiwxMDQxNSwxMDQ0NSwxMDQ3NCwxMDUwNCwxMDUzMywxMDU2MiwxMDU5MiwxMDYyMSwxMDY1MSwxMDY4MCwxMDcxMCwxMDc0MCwxMDc3MCwxMDc5OSwxMDgyOSwxMDg1OCwxMDg4OCwxMDkxNywxMDk0NywxMDk3NiwxMTAwNSwxMTAzNSwxMTA2NCwxMTA5NCwxMTEyNCwxMTE1MywxMTE4MywxMTIxMywxMTI0MiwxMTI3MiwxMTMwMSwxMTMzMSwxMTM2MCwxMTM4OSwxMTQxOSwxMTQ0OCwxMTQ3OCwxMTUwNywxMTUzNywxMTU2NywxMTU5NiwxMTYyNiwxMTY1NSwxMTY4NSwxMTcxNSwxMTc0NCwxMTc3NCwxMTgwMywxMTgzMiwxMTg2MiwxMTg5MSwxMTkyMSwxMTk1MCwxMTk4MCwxMjAxMCwxMjAzOSwxMjA2OSwxMjA5OSwxMjEyOCwxMjE1OCwxMjE4NywxMjIxNiwxMjI0NiwxMjI3NSwxMjMwNCwxMjMzNCwxMjM2NCwxMjM5MywxMjQyMywxMjQ1MywxMjQ4MywxMjUxMiwxMjU0MiwxMjU3MSwxMjYwMCwxMjYzMCwxMjY1OSwxMjY4OCwxMjcxOCwxMjc0NywxMjc3NywxMjgwNywxMjgzNywxMjg2NiwxMjg5NiwxMjkyNiwxMjk1NSwxMjk4NCwxMzAxNCwxMzA0MywxMzA3MiwxMzEwMiwxMzEzMSwxMzE2MSwxMzE5MSwxMzIyMCwxMzI1MCwxMzI4MCwxMzMxMCwxMzMzOSwxMzM2OCwxMzM5OCwxMzQyNywxMzQ1NiwxMzQ4NiwxMzUxNSwxMzU0NSwxMzU3NCwxMzYwNCwxMzYzNCwxMzY2NCwxMzY5MywxMzcyMywxMzc1MiwxMzc4MiwxMzgxMSwxMzg0MCwxMzg3MCwxMzg5OSwxMzkyOSwxMzk1OCwxMzk4OCwxNDAxOCwxNDA0NywxNDA3NywxNDEwNywxNDEzNiwxNDE2NiwxNDE5NSwxNDIyNCwxNDI1NCwxNDI4MywxNDMxMywxNDM0MiwxNDM3MiwxNDQwMSwxNDQzMSwxNDQ2MSwxNDQ5MCwxNDUyMCwxNDU1MCwxNDU3OSwxNDYwOSwxNDYzOCwxNDY2NywxNDY5NywxNDcyNiwxNDc1NiwxNDc4NSwxNDgxNSwxNDg0NCwxNDg3NCwxNDkwNCwxNDkzMywxNDk2MywxNDk5MywxNTAyMSwxNTA1MSwxNTA4MSwxNTExMCwxNTE0MCwxNTE2OSwxNTE5OSwxNTIyOCwxNTI1OCwxNTI4NywxNTMxNywxNTM0NywxNTM3NywxNTQwNiwxNTQzNiwxNTQ2NSwxNTQ5NCwxNTUyNCwxNTU1MywxNTU4MiwxNTYxMiwxNTY0MSwxNTY3MSwxNTcwMSwxNTczMSwxNTc2MCwxNTc5MCwxNTgyMCwxNTg0OSwxNTg3OCwxNTkwOCwxNTkzNywxNTk2NiwxNTk5NiwxNjAyNSwxNjA1NSwxNjA4NSwxNjExNCwxNjE0NCwxNjE3NCwxNjIwNCwxNjIzMywxNjI2MiwxNjI5MiwxNjMyMSwxNjM1MCwxNjM4MCwxNjQwOSwxNjQzOSwxNjQ2OCwxNjQ5OCwxNjUyOCwxNjU1OCwxNjU4NywxNjYxNywxNjY0NiwxNjY3NiwxNjcwNSwxNjczNCwxNjc2NCwxNjc5MywxNjgyMywxNjg1MiwxNjg4MiwxNjkxMiwxNjk0MSwxNjk3MSwxNzAwMSwxNzAzMCwxNzA2MCwxNzA4OSwxNzExOCwxNzE0OCwxNzE3NywxNzIwNywxNzIzNiwxNzI2NiwxNzI5NSwxNzMyNSwxNzM1NSwxNzM4NCwxNzQxNCwxNzQ0NCwxNzQ3MywxNzUwMiwxNzUzMiwxNzU2MSwxNzU5MSwxNzYyMCwxNzY1MCwxNzY3OSwxNzcwOSwxNzczOCwxNzc2OCwxNzc5OCwxNzgyNywxNzg1NywxNzg4NiwxNzkxNiwxNzk0NSwxNzk3NSwxODAwNCwxODAzNCwxODA2MywxODA5MywxODEyMiwxODE1MiwxODE4MSwxODIxMSwxODI0MSwxODI3MCwxODMwMCwxODMzMCwxODM1OSwxODM4OCwxODQxOCwxODQ0NywxODQ3NiwxODUwNiwxODUzNSwxODU2NSwxODU5NSwxODYyNSwxODY1NCwxODY4NCwxODcxNCwxODc0MywxODc3MiwxODgwMiwxODgzMSwxODg2MCwxODg5MCwxODkxOSwxODk0OSwxODk3OSwxOTAwOCwxOTAzOCwxOTA2OCwxOTA5OCwxOTEyNywxOTE1NiwxOTE4NiwxOTIxNSwxOTI0NCwxOTI3NCwxOTMwMywxOTMzMywxOTM2MiwxOTM5MiwxOTQyMiwxOTQ1MiwxOTQ4MSwxOTUxMSwxOTU0MCwxOTU3MCwxOTU5OSwxOTYyOCwxOTY1OCwxOTY4NywxOTcxNywxOTc0NiwxOTc3NiwxOTgwNiwxOTgzNiwxOTg2NSwxOTg5NSwxOTkyNCwxOTk1NCwxOTk4MywyMDAxMiwyMDA0MiwyMDA3MSwyMDEwMSwyMDEzMCwyMDE2MCwyMDE5MCwyMDIxOSwyMDI0OSwyMDI3OSwyMDMwOCwyMDMzOCwyMDM2NywyMDM5NiwyMDQyNiwyMDQ1NSwyMDQ4NSwyMDUxNCwyMDU0NCwyMDU3MywyMDYwMywyMDYzMywyMDY2MiwyMDY5MiwyMDcyMSwyMDc1MSwyMDc4MCwyMDgxMCwyMDgzOSwyMDg2OSwyMDg5OCwyMDkyOCwyMDk1NywyMDk4NywyMTAxNiwyMTA0NiwyMTA3NiwyMTEwNSwyMTEzNSwyMTE2NCwyMTE5NCwyMTIyMywyMTI1MywyMTI4MiwyMTMxMiwyMTM0MSwyMTM3MSwyMTQwMCwyMTQzMCwyMTQ1OSwyMTQ4OSwyMTUxOSwyMTU0OCwyMTU3OCwyMTYwNywyMTYzNywyMTY2NiwyMTY5NiwyMTcyNSwyMTc1NCwyMTc4NCwyMTgxMywyMTg0MywyMTg3MywyMTkwMiwyMTkzMiwyMTk2MiwyMTk5MSwyMjAyMSwyMjA1MCwyMjA4MCwyMjEwOSwyMjEzOCwyMjE2OCwyMjE5NywyMjIyNywyMjI1NiwyMjI4NiwyMjMxNiwyMjM0NiwyMjM3NSwyMjQwNSwyMjQzNCwyMjQ2NCwyMjQ5MywyMjUyMiwyMjU1MiwyMjU4MSwyMjYxMSwyMjY0MCwyMjY3MCwyMjcwMCwyMjczMCwyMjc1OSwyMjc4OSwyMjgxOCwyMjg0OCwyMjg3NywyMjkwNiwyMjkzNiwyMjk2NSwyMjk5NCwyMzAyNCwyMzA1NCwyMzA4MywyMzExMywyMzE0MywyMzE3MywyMzIwMiwyMzIzMiwyMzI2MSwyMzI5MCwyMzMyMCwyMzM0OSwyMzM3OSwyMzQwOCwyMzQzOCwyMzQ2NywyMzQ5NywyMzUyNywyMzU1NiwyMzU4NiwyMzYxNiwyMzY0NSwyMzY3NCwyMzcwNCwyMzczMywyMzc2MywyMzc5MiwyMzgyMiwyMzg1MSwyMzg4MSwyMzkxMCwyMzk0MCwyMzk3MCwyMzk5OSwyNDAyOSwyNDA1OCwyNDA4OCwyNDExNywyNDE0NywyNDE3NiwyNDIwNiwyNDIzNSwyNDI2NSwyNDI5NCwyNDMyNCwyNDM1MywyNDM4MywyNDQxMywyNDQ0MiwyNDQ3MiwyNDUwMSwyNDUzMSwyNDU2MCwyNDU5MCwyNDYxOSwyNDY0OCwyNDY3OCwyNDcwNywyNDczNywyNDc2NywyNDc5NiwyNDgyNiwyNDg1NiwyNDg4NSwyNDkxNSwyNDk0NCwyNDk3NCwyNTAwMywyNTAzMiwyNTA2MiwyNTA5MSwyNTEyMSwyNTE1MCwyNTE4MCwyNTIxMCwyNTI0MCwyNTI2OSwyNTI5OSwyNTMyOCwyNTM1OCwyNTM4NywyNTQxNiwyNTQ0NiwyNTQ3NSwyNTUwNSwyNTUzNCwyNTU2NCwyNTU5NCwyNTYyNCwyNTY1MywyNTY4MywyNTcxMiwyNTc0MiwyNTc3MSwyNTgwMCwyNTgzMCwyNTg1OSwyNTg4OCwyNTkxOCwyNTk0OCwyNTk3NywyNjAwNywyNjAzNywyNjA2NywyNjA5NiwyNjEyNiwyNjE1NSwyNjE4NCwyNjIxNCwyNjI0MywyNjI3MiwyNjMwMiwyNjMzMiwyNjM2MSwyNjM5MSwyNjQyMSwyNjQ1MSwyNjQ4MCwyNjUxMCwyNjUzOSwyNjU2OCwyNjU5OCwyNjYyNywyNjY1NiwyNjY4NiwyNjcxNSwyNjc0NSwyNjc3NSwyNjgwNSwyNjgzNCwyNjg2NCwyNjg5MywyNjkyMywyNjk1MiwyNjk4MiwyNzAxMSwyNzA0MSwyNzA3MCwyNzA5OSwyNzEyOSwyNzE1OSwyNzE4OCwyNzIxOCwyNzI0OCwyNzI3NywyNzMwNywyNzMzNiwyNzM2NiwyNzM5NSwyNzQyNSwyNzQ1NCwyNzQ4NCwyNzUxMywyNzU0MiwyNzU3MiwyNzYwMiwyNzYzMSwyNzY2MSwyNzY5MSwyNzcyMCwyNzc1MCwyNzc3OSwyNzgwOSwyNzgzOCwyNzg2OCwyNzg5NywyNzkyNiwyNzk1NiwyNzk4NSwyODAxNSwyODA0NSwyODA3NCwyODEwNCwyODEzNCwyODE2MywyODE5MywyODIyMiwyODI1MiwyODI4MSwyODMxMCwyODM0MCwyODM2OSwyODM5OSwyODQyOCwyODQ1OCwyODQ4OCwyODUxNywyODU0NywyODU3NywyODYwNywyODYzNiwyODY2NSwyODY5NSwyODcyNCwyODc1NCwyODc4MywyODgxMywyODg0MywyODg3MiwyODkwMSwyODkzMSwyODk2MCwyODk5MCwyOTAxOSwyOTA0OSwyOTA3OCwyOTEwOCwyOTEzNywyOTE2NywyOTE5NiwyOTIyNiwyOTI1NSwyOTI4NSwyOTMxNSwyOTM0NSwyOTM3NSwyOTQwNCwyOTQzNCwyOTQ2MywyOTQ5MiwyOTUyMiwyOTU1MSwyOTU4MCwyOTYxMCwyOTY0MCwyOTY2OSwyOTY5OSwyOTcyOSwyOTc1OSwyOTc4OCwyOTgxOCwyOTg0NywyOTg3NiwyOTkwNiwyOTkzNSwyOTk2NCwyOTk5NCwzMDAyMywzMDA1MywzMDA4MiwzMDExMiwzMDE0MSwzMDE3MSwzMDIwMCwzMDIzMCwzMDI1OSwzMDI4OSwzMDMxOCwzMDM0OCwzMDM3OCwzMDQwOCwzMDQzNywzMDQ2NywzMDQ5NiwzMDUyNiwzMDU1NSwzMDU4NSwzMDYxNCwzMDY0NCwzMDY3MywzMDcwMywzMDczMiwzMDc2MiwzMDc5MSwzMDgyMSwzMDg1MCwzMDg4MCwzMDkwOSwzMDkzOSwzMDk2OCwzMDk5OCwzMTAyNywzMTA1NywzMTA4NiwzMTExNiwzMTE0NSwzMTE3NSwzMTIwNCwzMTIzNCwzMTI2MywzMTI5MywzMTMyMiwzMTM1MiwzMTM4MSwzMTQxMSwzMTQ0MSwzMTQ3MSwzMTUwMCwzMTUzMCwzMTU1OSwzMTU4OSwzMTYxOCwzMTY0OCwzMTY3NiwzMTcwNiwzMTczNiwzMTc2NiwzMTc5NSwzMTgyNSwzMTg1NCwzMTg4NCwzMTkxMywzMTk0MywzMTk3MiwzMjAwMiwzMjAzMSwzMjA2MSwzMjA5MCwzMjEyMCwzMjE1MCwzMjE4MCwzMjIwOSwzMjIzOSwzMjI2OCwzMjI5OCwzMjMyNywzMjM1NywzMjM4NiwzMjQxNiwzMjQ0NSwzMjQ3NSwzMjUwNCwzMjUzNCwzMjU2MywzMjU5MywzMjYyMiwzMjY1MiwzMjY4MSwzMjcxMSwzMjc0MCwzMjc3MCwzMjc5OSwzMjgyOSwzMjg1OCwzMjg4OCwzMjkxNywzMjk0NywzMjk3NiwzMzAwNiwzMzAzNSwzMzA2NSwzMzA5NCwzMzEyNCwzMzE1MywzMzE4MywzMzIxMywzMzI0MywzMzI3MiwzMzMwMiwzMzMzMSwzMzM2MSwzMzM5MCwzMzQyMCwzMzQ1MCwzMzQ3OSwzMzUwOSwzMzUzOSwzMzU2OCwzMzU5OCwzMzYyNywzMzY1NywzMzY4NiwzMzcxNiwzMzc0NSwzMzc3NSwzMzgwNCwzMzgzNCwzMzg2MywzMzg5MywzMzkyMiwzMzk1MiwzMzk4MSwzNDAxMSwzNDA0MCwzNDA2OSwzNDA5OSwzNDEyOCwzNDE1OCwzNDE4NywzNDIxNywzNDI0NywzNDI3NywzNDMwNiwzNDMzNiwzNDM2NSwzNDM5NSwzNDQyNCwzNDQ1NCwzNDQ4MywzNDUxMiwzNDU0MiwzNDU3MSwzNDYwMSwzNDYzMSwzNDY2MCwzNDY5MCwzNDcxOSwzNDc0OSwzNDc3OCwzNDgwOCwzNDgzNywzNDg2NywzNDg5NiwzNDkyNiwzNDk1NSwzNDk4NSwzNTAxNSwzNTA0NCwzNTA3NCwzNTEwMywzNTEzMywzNTE2MiwzNTE5MiwzNTIyMiwzNTI1MSwzNTI4MCwzNTMxMCwzNTM0MCwzNTM3MCwzNTM5OSwzNTQyOSwzNTQ1OCwzNTQ4OCwzNTUxNywzNTU0NywzNTU3NiwzNTYwNSwzNTYzNSwzNTY2NSwzNTY5NCwzNTcyMywzNTc1MywzNTc4MiwzNTgxMSwzNTg0MSwzNTg3MSwzNTkwMSwzNTkzMCwzNTk2MCwzNTk4OSwzNjAxOSwzNjA0OCwzNjA3OCwzNjEwNywzNjEzNiwzNjE2NiwzNjE5NSwzNjIyNSwzNjI1NCwzNjI4NCwzNjMxNCwzNjM0MywzNjM3MywzNjQwMywzNjQzMywzNjQ2MiwzNjQ5MiwzNjUyMSwzNjU1MSwzNjU4MCwzNjYxMCwzNjYzOSwzNjY2OSwzNjY5OCwzNjcyOCwzNjc1NywzNjc4NiwzNjgxNiwzNjg0NSwzNjg3NSwzNjkwNCwzNjkzNCwzNjk2MywzNjk5MywzNzAyMiwzNzA1MiwzNzA4MSwzNzExMSwzNzE0MSwzNzE3MCwzNzIwMCwzNzIyOSwzNzI1OSwzNzI4OCwzNzMxOCwzNzM0NywzNzM3NywzNzQwNiwzNzQzNiwzNzQ2NSwzNzQ5NSwzNzUyNCwzNzU1NCwzNzU4NCwzNzYxMywzNzY0MywzNzY3MiwzNzcwMSwzNzczMSwzNzc2MCwzNzc5MCwzNzgxOSwzNzg0OSwzNzg3OCwzNzkwOCwzNzkzOCwzNzk2NywzNzk5NywzODAyNywzODA1NiwzODA4NSwzODExNSwzODE0NCwzODE3NCwzODIwMywzODIzMywzODI2MiwzODI5MiwzODMyMiwzODM1MSwzODM4MSwzODQxMCwzODQ0MCwzODQ2OSwzODQ5OSwzODUyOCwzODU1OCwzODU4NywzODYxNywzODY0NiwzODY3NiwzODcwNSwzODczNSwzODc2NCwzODc5NCwzODgyMywzODg1MywzODg4MiwzODkxMiwzODk0MSwzODk3MSwzOTAwMSwzOTAzMCwzOTA1OSwzOTA4OSwzOTExOCwzOTE0OCwzOTE3OCwzOTIwOCwzOTIzNywzOTI2NywzOTI5NywzOTMyNiwzOTM1NSwzOTM4NSwzOTQxNCwzOTQ0NCwzOTQ3MywzOTUwMywzOTUzMiwzOTU2MiwzOTU5MiwzOTYyMSwzOTY1MCwzOTY4MCwzOTcwOSwzOTczOSwzOTc2OCwzOTc5OCwzOTgyNywzOTg1NywzOTg4NiwzOTkxNiwzOTk0NiwzOTk3NSw0MDAwNSw0MDAzNSw0MDA2NCw0MDA5NCw0MDEyMyw0MDE1Myw0MDE4Miw0MDIxMiw0MDI0MSw0MDI3MSw0MDMwMCw0MDMzMCw0MDM1OSw0MDM4OSw0MDQxOCw0MDQ0OCw0MDQ3Nyw0MDUwNyw0MDUzNiw0MDU2Niw0MDU5NSw0MDYyNSw0MDY1NSw0MDY4NSw0MDcxNCw0MDc0NCw0MDc3Myw0MDgwMyw0MDgzMiw0MDg2Miw0MDg5Miw0MDkyMSw0MDk1MSw0MDk4MCw0MTAwOSw0MTAzOSw0MTA2OCw0MTA5OCw0MTEyNyw0MTE1Nyw0MTE4Niw0MTIxNiw0MTI0NSw0MTI3NSw0MTMwNCw0MTMzNCw0MTM2NCw0MTM5Myw0MTQyMiw0MTQ1Miw0MTQ4MSw0MTUxMSw0MTU0MCw0MTU3MCw0MTU5OSw0MTYyOSw0MTY1OCw0MTY4OCw0MTcxOCw0MTc0OCw0MTc3Nyw0MTgwNyw0MTgzNiw0MTg2NSw0MTg5NCw0MTkyNCw0MTk1Myw0MTk4Myw0MjAxMiw0MjA0Miw0MjA3Miw0MjEwMiw0MjEzMSw0MjE2MSw0MjE5MCw0MjIyMCw0MjI0OSw0MjI3OSw0MjMwOCw0MjMzNyw0MjM2Nyw0MjM5Nyw0MjQyNiw0MjQ1Niw0MjQ4NSw0MjUxNSw0MjU0NSw0MjU3NCw0MjYwNCw0MjYzMyw0MjY2Miw0MjY5Miw0MjcyMSw0Mjc1MSw0Mjc4MCw0MjgxMCw0MjgzOSw0Mjg2OSw0Mjg5OSw0MjkyOSw0Mjk1OCw0Mjk4OCw0MzAxNyw0MzA0Niw0MzA3Niw0MzEwNSw0MzEzNSw0MzE2NCw0MzE5NCw0MzIyMyw0MzI1Myw0MzI4Myw0MzMxMiw0MzM0Miw0MzM3MSw0MzQwMSw0MzQzMCw0MzQ2MCw0MzQ4OSw0MzUxOSw0MzU0OCw0MzU3OCw0MzYwNyw0MzYzNyw0MzY2Niw0MzY5Niw0MzcyNiw0Mzc1NSw0Mzc4NSw0MzgxNCw0Mzg0NCw0Mzg3Myw0MzkwMyw0MzkzMiw0Mzk2Miw0Mzk5MSw0NDAyMSw0NDA1MCw0NDA4MCw0NDEwOSw0NDEzOSw0NDE2OSw0NDE5OCw0NDIyOCw0NDI1OCw0NDI4Nyw0NDMxNyw0NDM0Niw0NDM3NSw0NDQwNSw0NDQzNCw0NDQ2NCw0NDQ5Myw0NDUyMyw0NDU1Myw0NDU4Miw0NDYxMiw0NDY0MSw0NDY3MSw0NDcwMCw0NDczMCw0NDc1OSw0NDc4OCw0NDgxOCw0NDg0Nyw0NDg3Nyw0NDkwNiw0NDkzNiw0NDk2Niw0NDk5Niw0NTAyNSw0NTA1NSw0NTA4NCw0NTExNCw0NTE0Myw0NTE3Miw0NTIwMiw0NTIzMSw0NTI2MSw0NTI5MCw0NTMyMCw0NTM1MCw0NTM4MCw0NTQwOSw0NTQzOSw0NTQ2OCw0NTQ5OCw0NTUyNyw0NTU1Niw0NTU4Niw0NTYxNSw0NTY0NCw0NTY3NCw0NTcwNCw0NTczMyw0NTc2Myw0NTc5Myw0NTgyMyw0NTg1Miw0NTg4Miw0NTkxMSw0NTk0MCw0NTk3MCw0NTk5OSw0NjAyOCw0NjA1OCw0NjA4OCw0NjExNyw0NjE0Nyw0NjE3Nyw0NjIwNiw0NjIzNiw0NjI2NSw0NjI5NSw0NjMyNCw0NjM1NCw0NjM4Myw0NjQxMyw0NjQ0Miw0NjQ3Miw0NjUwMSw0NjUzMSw0NjU2MCw0NjU5MCw0NjYyMCw0NjY0OSw0NjY3OSw0NjcwOCw0NjczOCw0Njc2Nyw0Njc5Nyw0NjgyNiw0Njg1Niw0Njg4NSw0NjkxNSw0Njk0NCw0Njk3NCw0NzAwMyw0NzAzMyw0NzA2Myw0NzA5Miw0NzEyMiw0NzE1MSw0NzE4MSw0NzIxMCw0NzI0MCw0NzI2OSw0NzI5OCw0NzMyOCw0NzM1Nyw0NzM4Nyw0NzQxNyw0NzQ0Niw0NzQ3Niw0NzUwNiw0NzUzNSw0NzU2NSw0NzU5NCw0NzYyNCw0NzY1Myw0NzY4Miw0NzcxMiw0Nzc0MSw0Nzc3MSw0NzgwMCw0NzgzMCw0Nzg2MCw0Nzg5MCw0NzkxOSw0Nzk0OSw0Nzk3OCw0ODAwOCw0ODAzNyw0ODA2Niw0ODA5Niw0ODEyNSw0ODE1NSw0ODE4NCw0ODIxNCw0ODI0NCw0ODI3Myw0ODMwMyw0ODMzMyw0ODM2Miw0ODM5Miw0ODQyMSw0ODQ1MCw0ODQ4MCw0ODUwOSw0ODUzOCw0ODU2OCw0ODU5OCw0ODYyNyw0ODY1Nyw0ODY4Nyw0ODcxNyw0ODc0Niw0ODc3Niw0ODgwNSw0ODgzNCw0ODg2NCw0ODg5Myw0ODkyMiw0ODk1Miw0ODk4Miw0OTAxMSw0OTA0MSw0OTA3MSw0OTEwMCw0OTEzMCw0OTE2MCw0OTE4OSw0OTIxOCw0OTI0OCw0OTI3Nyw0OTMwNiw0OTMzNiw0OTM2NSw0OTM5NSw0OTQyNSw0OTQ1NSw0OTQ4NCw0OTUxNCw0OTU0Myw0OTU3Myw0OTYwMiw0OTYzMiw0OTY2MSw0OTY5MCw0OTcyMCw0OTc0OSw0OTc3OSw0OTgwOSw0OTgzOCw0OTg2OCw0OTg5OCw0OTkyNyw0OTk1Nyw0OTk4Niw1MDAxNiw1MDA0NSw1MDA3NSw1MDEwNCw1MDEzMyw1MDE2Myw1MDE5Miw1MDIyMiw1MDI1Miw1MDI4MSw1MDMxMSw1MDM0MCw1MDM3MCw1MDQwMCw1MDQyOSw1MDQ1OSw1MDQ4OCw1MDUxOCw1MDU0Nyw1MDU3Niw1MDYwNiw1MDYzNSw1MDY2NSw1MDY5NCw1MDcyNCw1MDc1NCw1MDc4NCw1MDgxMyw1MDg0Myw1MDg3Miw1MDkwMiw1MDkzMSw1MDk2MCw1MDk5MCw1MTAxOSw1MTA0OSw1MTA3OCw1MTEwOCw1MTEzOCw1MTE2Nyw1MTE5Nyw1MTIyNyw1MTI1Niw1MTI4Niw1MTMxNSw1MTM0NSw1MTM3NCw1MTQwMyw1MTQzMyw1MTQ2Miw1MTQ5Miw1MTUyMiw1MTU1Miw1MTU4Miw1MTYxMSw1MTY0MSw1MTY3MCw1MTY5OSw1MTcyOSw1MTc1OCw1MTc4Nyw1MTgxNiw1MTg0Niw1MTg3Niw1MTkwNiw1MTkzNiw1MTk2NSw1MTk5NSw1MjAyNSw1MjA1NCw1MjA4Myw1MjExMyw1MjE0Miw1MjE3MSw1MjIwMCw1MjIzMCw1MjI2MCw1MjI5MCw1MjMxOSw1MjM0OSw1MjM3OSw1MjQwOCw1MjQzOCw1MjQ2Nyw1MjQ5Nyw1MjUyNiw1MjU1NSw1MjU4NSw1MjYxNCw1MjY0NCw1MjY3Myw1MjcwMyw1MjczMyw1Mjc2Miw1Mjc5Miw1MjgyMiw1Mjg1MSw1Mjg4MSw1MjkxMCw1MjkzOSw1Mjk2OSw1Mjk5OCw1MzAyOCw1MzA1Nyw1MzA4Nyw1MzExNiw1MzE0Niw1MzE3Niw1MzIwNSw1MzIzNSw1MzI2NCw1MzI5NCw1MzMyNCw1MzM1Myw1MzM4Myw1MzQxMiw1MzQ0MSw1MzQ3MSw1MzUwMCw1MzUzMCw1MzU1OSw1MzU4OSw1MzYxOSw1MzY0OCw1MzY3OCw1MzcwOCw1MzczNyw1Mzc2Nyw1Mzc5Niw1MzgyNSw1Mzg1NSw1Mzg4NCw1MzkxMyw1Mzk0Myw1Mzk3Myw1NDAwMyw1NDAzMiw1NDA2Miw1NDA5Miw1NDEyMSw1NDE1MSw1NDE4MCw1NDIwOSw1NDIzOSw1NDI2OCw1NDI5Nyw1NDMyNyw1NDM1Nyw1NDM4Nyw1NDQxNiw1NDQ0Niw1NDQ3Niw1NDUwNSw1NDUzNSw1NDU2NCw1NDU5Myw1NDYyMyw1NDY1Miw1NDY4MSw1NDcxMSw1NDc0MSw1NDc3MCw1NDgwMCw1NDgzMCw1NDg1OSw1NDg4OSw1NDkxOSw1NDk0OCw1NDk3Nyw1NTAwNyw1NTAzNiw1NTA2Niw1NTA5NSw1NTEyNSw1NTE1NCw1NTE4NCw1NTIxMyw1NTI0Myw1NTI3Myw1NTMwMiw1NTMzMiw1NTM2MSw1NTM5MSw1NTQyMCw1NTQ1MCw1NTQ3OSw1NTUwOCw1NTUzOCw1NTU2Nyw1NTU5Nyw1NTYyNyw1NTY1Nyw1NTY4Niw1NTcxNiw1NTc0NSw1NTc3NSw1NTgwNCw1NTgzNCw1NTg2Myw1NTg5Miw1NTkyMiw1NTk1MSw1NTk4MSw1NjAxMSw1NjA0MCw1NjA3MCw1NjEwMCw1NjEyOSw1NjE1OSw1NjE4OCw1NjIxOCw1NjI0Nyw1NjI3Niw1NjMwNiw1NjMzNSw1NjM2NSw1NjM5NCw1NjQyNCw1NjQ1NCw1NjQ4Myw1NjUxMyw1NjU0Myw1NjU3Miw1NjYwMSw1NjYzMSw1NjY2MCw1NjY5MCw1NjcxOSw1Njc0OSw1Njc3OCw1NjgwOCw1NjgzNyw1Njg2Nyw1Njg5Nyw1NjkyNiw1Njk1Niw1Njk4NSw1NzAxNSw1NzA0NCw1NzA3NCw1NzEwMyw1NzEzMyw1NzE2Miw1NzE5Miw1NzIyMSw1NzI1MSw1NzI4MCw1NzMxMCw1NzM0MCw1NzM2OSw1NzM5OSw1NzQyOSw1NzQ1OCw1NzQ4Nyw1NzUxNyw1NzU0Niw1NzU3Niw1NzYwNSw1NzYzNCw1NzY2NCw1NzY5NCw1NzcyMyw1Nzc1Myw1Nzc4Myw1NzgxMyw1Nzg0Miw1Nzg3MSw1NzkwMSw1NzkzMCw1Nzk1OSw1Nzk4OSw1ODAxOCw1ODA0OCw1ODA3Nyw1ODEwNyw1ODEzNyw1ODE2Nyw1ODE5Niw1ODIyNiw1ODI1NSw1ODI4NSw1ODMxNCw1ODM0Myw1ODM3Myw1ODQwMiw1ODQzMiw1ODQ2MSw1ODQ5MSw1ODUyMSw1ODU1MSw1ODU4MCw1ODYxMCw1ODYzOSw1ODY2OSw1ODY5OCw1ODcyNyw1ODc1Nyw1ODc4Niw1ODgxNiw1ODg0NSw1ODg3NSw1ODkwNSw1ODkzNCw1ODk2NCw1ODk5NCw1OTAyMyw1OTA1Myw1OTA4Miw1OTExMSw1OTE0MSw1OTE3MCw1OTIwMCw1OTIyOSw1OTI1OSw1OTI4OCw1OTMxOCw1OTM0OCw1OTM3Nyw1OTQwNyw1OTQzNiw1OTQ2Niw1OTQ5NSw1OTUyNSw1OTU1NCw1OTU4NCw1OTYxMyw1OTY0Myw1OTY3Miw1OTcwMiw1OTczMSw1OTc2MSw1OTc5MSw1OTgyMCw1OTg1MCw1OTg3OSw1OTkwOSw1OTkzOSw1OTk2OCw1OTk5Nyw2MDAyNyw2MDA1Niw2MDA4Niw2MDExNSw2MDE0NSw2MDE3NCw2MDIwNCw2MDIzNCw2MDI2NCw2MDI5Myw2MDMyMyw2MDM1Miw2MDM4MSw2MDQxMSw2MDQ0MCw2MDQ2OSw2MDQ5OSw2MDUyOCw2MDU1OCw2MDU4OCw2MDYxOCw2MDY0OCw2MDY3Nyw2MDcwNyw2MDczNiw2MDc2NSw2MDc5NSw2MDgyNCw2MDg1Myw2MDg4Myw2MDkxMiw2MDk0Miw2MDk3Miw2MTAwMiw2MTAzMSw2MTA2MSw2MTA5MCw2MTEyMCw2MTE0OSw2MTE3OSw2MTIwOCw2MTIzNyw2MTI2Nyw2MTI5Niw2MTMyNiw2MTM1Niw2MTM4NSw2MTQxNSw2MTQ0NSw2MTQ3NCw2MTUwNCw2MTUzMyw2MTU2Myw2MTU5Miw2MTYyMSw2MTY1MSw2MTY4MCw2MTcxMCw2MTczOSw2MTc2OSw2MTc5OSw2MTgyOCw2MTg1OCw2MTg4OCw2MTkxNyw2MTk0Nyw2MTk3Niw2MjAwNiw2MjAzNSw2MjA2NCw2MjA5NCw2MjEyMyw2MjE1Myw2MjE4Miw2MjIxMiw2MjI0Miw2MjI3MSw2MjMwMSw2MjMzMSw2MjM2MCw2MjM5MCw2MjQxOSw2MjQ0OCw2MjQ3OCw2MjUwNyw2MjUzNyw2MjU2Niw2MjU5Niw2MjYyNSw2MjY1NSw2MjY4NSw2MjcxNSw2Mjc0NCw2Mjc3NCw2MjgwMyw2MjgzMiw2Mjg2Miw2Mjg5MSw2MjkyMSw2Mjk1MCw2Mjk4MCw2MzAwOSw2MzAzOSw2MzA2OSw2MzA5OSw2MzEyOCw2MzE1Nyw2MzE4Nyw2MzIxNiw2MzI0Niw2MzI3NSw2MzMwNSw2MzMzNCw2MzM2Myw2MzM5Myw2MzQyMyw2MzQ1Myw2MzQ4Miw2MzUxMiw2MzU0MSw2MzU3MSw2MzYwMCw2MzYzMCw2MzY1OSw2MzY4OSw2MzcxOCw2Mzc0Nyw2Mzc3Nyw2MzgwNyw2MzgzNiw2Mzg2Niw2Mzg5NSw2MzkyNSw2Mzk1NSw2Mzk4NCw2NDAxNCw2NDA0Myw2NDA3Myw2NDEwMiw2NDEzMSw2NDE2MSw2NDE5MCw2NDIyMCw2NDI0OSw2NDI3OSw2NDMwOSw2NDMzOSw2NDM2OCw2NDM5OCw2NDQyNyw2NDQ1Nyw2NDQ4Niw2NDUxNSw2NDU0NSw2NDU3NCw2NDYwMyw2NDYzMyw2NDY2Myw2NDY5Miw2NDcyMiw2NDc1Miw2NDc4Miw2NDgxMSw2NDg0MSw2NDg3MCw2NDg5OSw2NDkyOSw2NDk1OCw2NDk4Nyw2NTAxNyw2NTA0Nyw2NTA3Niw2NTEwNiw2NTEzNiw2NTE2Niw2NTE5NSw2NTIyNSw2NTI1NCw2NTI4Myw2NTMxMyw2NTM0Miw2NTM3MSw2NTQwMSw2NTQzMSw2NTQ2MCw2NTQ5MCw2NTUyMCw2NTU0OSw2NTU3OSw2NTYwOCw2NTYzOCw2NTY2Nyw2NTY5Nyw2NTcyNiw2NTc1NSw2NTc4NSw2NTgxNSw2NTg0NCw2NTg3NCw2NTkwMyw2NTkzMyw2NTk2Myw2NTk5Miw2NjAyMiw2NjA1MSw2NjA4MSw2NjExMCw2NjE0MCw2NjE2OSw2NjE5OSw2NjIyOCw2NjI1OCw2NjI4Nyw2NjMxNyw2NjM0Niw2NjM3Niw2NjQwNSw2NjQzNSw2NjQ2NSw2NjQ5NCw2NjUyNCw2NjU1Myw2NjU4Myw2NjYxMiw2NjY0MSw2NjY3MSw2NjcwMCw2NjczMCw2Njc2MCw2Njc4OSw2NjgxOSw2Njg0OSw2Njg3OCw2NjkwOCw2NjkzNyw2Njk2Nyw2Njk5Niw2NzAyNSw2NzA1NSw2NzA4NCw2NzExNCw2NzE0Myw2NzE3Myw2NzIwMyw2NzIzMyw2NzI2Miw2NzI5Miw2NzMyMSw2NzM1MSw2NzM4MCw2NzQwOSw2NzQzOSw2NzQ2OCw2NzQ5Nyw2NzUyNyw2NzU1Nyw2NzU4Nyw2NzYxNyw2NzY0Niw2NzY3Niw2NzcwNSw2NzczNSw2Nzc2NCw2Nzc5Myw2NzgyMyw2Nzg1Miw2Nzg4Miw2NzkxMSw2Nzk0MSw2Nzk3MSw2OGUzLDY4MDMwLDY4MDYwLDY4MDg5LDY4MTE5LDY4MTQ4LDY4MTc3LDY4MjA3LDY4MjM2LDY4MjY2LDY4Mjk1LDY4MzI1LDY4MzU0LDY4Mzg0LDY4NDE0LDY4NDQzLDY4NDczLDY4NTAyLDY4NTMyLDY4NTYxLDY4NTkxLDY4NjIwLDY4NjUwLDY4Njc5LDY4NzA4LDY4NzM4LDY4NzY4LDY4Nzk3LDY4ODI3LDY4ODU3LDY4ODg2LDY4OTE2LDY4OTQ2LDY4OTc1LDY5MDA0LDY5MDM0LDY5MDYzLDY5MDkyLDY5MTIyLDY5MTUyLDY5MTgxLDY5MjExLDY5MjQwLDY5MjcwLDY5MzAwLDY5MzMwLDY5MzU5LDY5Mzg4LDY5NDE4LDY5NDQ3LDY5NDc2LDY5NTA2LDY5NTM1LDY5NTY1LDY5NTk1LDY5NjI0LDY5NjU0LDY5Njg0LDY5NzEzLDY5NzQzLDY5NzcyLDY5ODAyLDY5ODMxLDY5ODYxLDY5ODkwLDY5OTE5LDY5OTQ5LDY5OTc4LDcwMDA4LDcwMDM4LDcwMDY3LDcwMDk3LDcwMTI2LDcwMTU2LDcwMTg2LDcwMjE1LDcwMjQ1LDcwMjc0LDcwMzAzLDcwMzMzLDcwMzYyLDcwMzkyLDcwNDIxLDcwNDUxLDcwNDgxLDcwNTEwLDcwNTQwLDcwNTcwLDcwNTk5LDcwNjI5LDcwNjU4LDcwNjg3LDcwNzE3LDcwNzQ2LDcwNzc2LDcwODA1LDcwODM1LDcwODY0LDcwODk0LDcwOTI0LDcwOTU0LDcwOTgzLDcxMDEzLDcxMDQyLDcxMDcxLDcxMTAxLDcxMTMwLDcxMTU5LDcxMTg5LDcxMjE4LDcxMjQ4LDcxMjc4LDcxMzA4LDcxMzM3LDcxMzY3LDcxMzk3LDcxNDI2LDcxNDU1LDcxNDg1LDcxNTE0LDcxNTQzLDcxNTczLDcxNjAyLDcxNjMyLDcxNjYyLDcxNjkxLDcxNzIxLDcxNzUxLDcxNzgxLDcxODEwLDcxODM5LDcxODY5LDcxODk4LDcxOTI3LDcxOTU3LDcxOTg2LDcyMDE2LDcyMDQ2LDcyMDc1LDcyMTA1LDcyMTM1LDcyMTY0LDcyMTk0LDcyMjIzLDcyMjUzLDcyMjgyLDcyMzExLDcyMzQxLDcyMzcwLDcyNDAwLDcyNDI5LDcyNDU5LDcyNDg5LDcyNTE4LDcyNTQ4LDcyNTc3LDcyNjA3LDcyNjM3LDcyNjY2LDcyNjk1LDcyNzI1LDcyNzU0LDcyNzg0LDcyODEzLDcyODQzLDcyODcyLDcyOTAyLDcyOTMxLDcyOTYxLDcyOTkxLDczMDIwLDczMDUwLDczMDgwLDczMTA5LDczMTM5LDczMTY4LDczMTk3LDczMjI3LDczMjU2LDczMjg2LDczMzE1LDczMzQ1LDczMzc1LDczNDA0LDczNDM0LDczNDY0LDczNDkzLDczNTIzLDczNTUyLDczNTgxLDczNjExLDczNjQwLDczNjY5LDczNjk5LDczNzI5LDczNzU4LDczNzg4LDczODE4LDczODQ4LDczODc3LDczOTA3LDczOTM2LDczOTY1LDczOTk1LDc0MDI0LDc0MDUzLDc0MDgzLDc0MTEzLDc0MTQyLDc0MTcyLDc0MjAyLDc0MjMxLDc0MjYxLDc0MjkxLDc0MzIwLDc0MzQ5LDc0Mzc5LDc0NDA4LDc0NDM3LDc0NDY3LDc0NDk3LDc0NTI2LDc0NTU2LDc0NTg2LDc0NjE1LDc0NjQ1LDc0Njc1LDc0NzA0LDc0NzMzLDc0NzYzLDc0NzkyLDc0ODIyLDc0ODUxLDc0ODgxLDc0OTEwLDc0OTQwLDc0OTY5LDc0OTk5LDc1MDI5LDc1MDU4LDc1MDg4LDc1MTE3LDc1MTQ3LDc1MTc2LDc1MjA2LDc1MjM1LDc1MjY0LDc1Mjk0LDc1MzIzLDc1MzUzLDc1MzgzLDc1NDEyLDc1NDQyLDc1NDcyLDc1NTAxLDc1NTMxLDc1NTYwLDc1NTkwLDc1NjE5LDc1NjQ4LDc1Njc4LDc1NzA3LDc1NzM3LDc1NzY2LDc1Nzk2LDc1ODI2LDc1ODU2LDc1ODg1LDc1OTE1LDc1OTQ0LDc1OTc0LDc2MDAzLDc2MDMyLDc2MDYyLDc2MDkxLDc2MTIxLDc2MTUwLDc2MTgwLDc2MjEwLDc2MjM5LDc2MjY5LDc2Mjk5LDc2MzI4LDc2MzU4LDc2Mzg3LDc2NDE2LDc2NDQ2LDc2NDc1LDc2NTA1LDc2NTM0LDc2NTY0LDc2NTkzLDc2NjIzLDc2NjUzLDc2NjgyLDc2NzEyLDc2NzQxLDc2NzcxLDc2ODAxLDc2ODMwLDc2ODU5LDc2ODg5LDc2OTE4LDc2OTQ4LDc2OTc3LDc3MDA3LDc3MDM2LDc3MDY2LDc3MDk2LDc3MTI1LDc3MTU1LDc3MTg1LDc3MjE0LDc3MjQzLDc3MjczLDc3MzAyLDc3MzMyLDc3MzYxLDc3MzkwLDc3NDIwLDc3NDUwLDc3NDc5LDc3NTA5LDc3NTM5LDc3NTY5LDc3NTk4LDc3NjI3LDc3NjU3LDc3Njg2LDc3NzE1LDc3NzQ1LDc3Nzc0LDc3ODA0LDc3ODMzLDc3ODYzLDc3ODkzLDc3OTIzLDc3OTUyLDc3OTgyLDc4MDExLDc4MDQxLDc4MDcwLDc4MDk5LDc4MTI5LDc4MTU4LDc4MTg4LDc4MjE3LDc4MjQ3LDc4Mjc3LDc4MzA3LDc4MzM2LDc4MzY2LDc4Mzk1LDc4NDI1LDc4NDU0LDc4NDgzLDc4NTEzLDc4NTQyLDc4NTcyLDc4NjAxLDc4NjMxLDc4NjYxLDc4NjkwLDc4NzIwLDc4NzUwLDc4Nzc5LDc4ODA4LDc4ODM4LDc4ODY3LDc4ODk3LDc4OTI2LDc4OTU2LDc4OTg1LDc5MDE1LDc5MDQ0LDc5MDc0LDc5MTA0LDc5MTMzLDc5MTYzLDc5MTkyLDc5MjIyLDc5MjUxLDc5MjgxLDc5MzEwLDc5MzQwLDc5MzY5LDc5Mzk5LDc5NDI4LDc5NDU4LDc5NDg3LDc5NTE3LDc5NTQ2LDc5NTc2LDc5NjA2LDc5NjM1LDc5NjY1LDc5Njk1LDc5NzI0LDc5NzUzLDc5NzgzLDc5ODEyLDc5ODQxLDc5ODcxLDc5OTAwLDc5OTMwLDc5OTYwLDc5OTkwXX0seyIuLi9tYWluIjo2MTcsIm9iamVjdC1hc3NpZ24iOjQ2Nn1dLDYxNzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBpKCl7dGhpcy5yZWdpb25hbE9wdGlvbnM9W10sdGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdPXtpbnZhbGlkQ2FsZW5kYXI6IkNhbGVuZGFyIHswfSBub3QgZm91bmQiLGludmFsaWREYXRlOiJJbnZhbGlkIHswfSBkYXRlIixpbnZhbGlkTW9udGg6IkludmFsaWQgezB9IG1vbnRoIixpbnZhbGlkWWVhcjoiSW52YWxpZCB7MH0geWVhciIsZGlmZmVyZW50Q2FsZW5kYXJzOiJDYW5ub3QgbWl4IHswfSBhbmQgezF9IGRhdGVzIn0sdGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl0sdGhpcy5jYWxlbmRhcnM9e30sdGhpcy5fbG9jYWxDYWxzPXt9fWZ1bmN0aW9uIGEodCxlLHIsbil7aWYodGhpcy5fY2FsZW5kYXI9dCx0aGlzLl95ZWFyPWUsdGhpcy5fbW9udGg9cix0aGlzLl9kYXk9biwwPT09dGhpcy5fY2FsZW5kYXIuX3ZhbGlkYXRlTGV2ZWwmJiF0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKHRoaXMuX3llYXIsdGhpcy5fbW9udGgsdGhpcy5fZGF5KSl0aHJvdyhjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIjAwMDAwMCIuc3Vic3RyaW5nKDAsZS0odD0iIit0KS5sZW5ndGgpK3R9ZnVuY3Rpb24gcygpe3RoaXMuc2hvcnRZZWFyQ3V0b2ZmPSIrMTAifWZ1bmN0aW9uIGwodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0XXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfW4oaS5wcm90b3R5cGUse2luc3RhbmNlOmZ1bmN0aW9uKHQsZSl7dD0odHx8ImdyZWdvcmlhbiIpLnRvTG93ZXJDYXNlKCksZT1lfHwiIjt2YXIgcj10aGlzLl9sb2NhbENhbHNbdCsiLSIrZV07aWYoIXImJnRoaXMuY2FsZW5kYXJzW3RdJiYocj1uZXcgdGhpcy5jYWxlbmRhcnNbdF0oZSksdGhpcy5fbG9jYWxDYWxzW3QrIi0iK2VdPXIpLCFyKXRocm93KHRoaXMubG9jYWwuaW52YWxpZENhbGVuZGFyfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZENhbGVuZGFyKS5yZXBsYWNlKC9cezBcfS8sdCk7cmV0dXJuIHJ9LG5ld0RhdGU6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4obj0obnVsbCE9dCYmdC55ZWFyP3QuY2FsZW5kYXIoKToic3RyaW5nIj09dHlwZW9mIG4/dGhpcy5pbnN0YW5jZShuLGkpOm4pfHx0aGlzLmluc3RhbmNlKCkpLm5ld0RhdGUodCxlLHIpfSxzdWJzdGl0dXRlRGlnaXRzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4oZSsiIikucmVwbGFjZSgvWzAtOV0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSl9fSxzdWJzdGl0dXRlQ2hpbmVzZURpZ2l0czpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIG49IiIsaT0wO3I+MDspe3ZhciBhPXIlMTA7bj0oMD09PWE/IiI6dFthXStlW2ldKStuLGkrKyxyPU1hdGguZmxvb3Ioci8xMCl9cmV0dXJuIDA9PT1uLmluZGV4T2YodFsxXStlWzFdKSYmKG49bi5zdWJzdHIoMSkpLG58fHRbMF19fX0pLG4oYS5wcm90b3R5cGUse25ld0RhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9jYWxlbmRhci5uZXdEYXRlKG51bGw9PXQ/dGhpczp0LGUscil9LHllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX3llYXI6dGhpcy5zZXQodCwieSIpfSxtb250aDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fbW9udGg6dGhpcy5zZXQodCwibSIpfSxkYXk6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX2RheTp0aGlzLnNldCh0LCJkIil9LGRhdGU6ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKHQsZSxyKSl0aHJvdyhjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKTtyZXR1cm4gdGhpcy5feWVhcj10LHRoaXMuX21vbnRoPWUsdGhpcy5fZGF5PXIsdGhpc30sbGVhcFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIubGVhcFllYXIodGhpcyl9LGVwb2NoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmVwb2NoKHRoaXMpfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZvcm1hdFllYXIodGhpcyl9LG1vbnRoT2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLndlZWtPZlllYXIodGhpcyl9LGRheXNJblllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luWWVhcih0aGlzKX0sZGF5T2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mWWVhcih0aGlzKX0sZGF5c0luTW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luTW9udGgodGhpcyl9LGRheU9mV2VlazpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZldlZWsodGhpcyl9LHdlZWtEYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla0RheSh0aGlzKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmV4dHJhSW5mbyh0aGlzKX0sYWRkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmFkZCh0aGlzLHQsZSl9LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9jYWxlbmRhci5zZXQodGhpcyx0LGUpfSxjb21wYXJlVG86ZnVuY3Rpb24odCl7aWYodGhpcy5fY2FsZW5kYXIubmFtZSE9PXQuX2NhbGVuZGFyLm5hbWUpdGhyb3coYy5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnN8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5kaWZmZXJlbnRDYWxlbmRhcnMpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKS5yZXBsYWNlKC9cezFcfS8sdC5fY2FsZW5kYXIubG9jYWwubmFtZSk7dmFyIGU9dGhpcy5feWVhciE9PXQuX3llYXI/dGhpcy5feWVhci10Ll95ZWFyOnRoaXMuX21vbnRoIT09dC5fbW9udGg/dGhpcy5tb250aE9mWWVhcigpLXQubW9udGhPZlllYXIoKTp0aGlzLl9kYXktdC5fZGF5O3JldHVybiAwPT09ZT8wOmU8MD8tMToxfSxjYWxlbmRhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhcn0sdG9KRDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci50b0pEKHRoaXMpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZyb21KRCh0KX0sdG9KU0RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIudG9KU0RhdGUodGhpcyl9LGZyb21KU0RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZyb21KU0RhdGUodCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMueWVhcigpPDA/Ii0iOiIiKStvKE1hdGguYWJzKHRoaXMueWVhcigpKSw0KSsiLSIrbyh0aGlzLm1vbnRoKCksMikrIi0iK28odGhpcy5kYXkoKSwyKX19KSxuKHMucHJvdG90eXBlLHtfdmFsaWRhdGVMZXZlbDowLG5ld0RhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBudWxsPT10P3RoaXMudG9kYXkoKToodC55ZWFyJiYodGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKSxyPXQuZGF5KCksZT10Lm1vbnRoKCksdD10LnllYXIoKSksbmV3IGEodGhpcyx0LGUscikpfSx0b2RheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZyb21KU0RhdGUobmV3IERhdGUpfSxlcG9jaDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcikueWVhcigpPDA/dGhpcy5sb2NhbC5lcG9jaHNbMF06dGhpcy5sb2NhbC5lcG9jaHNbMV19LGZvcm1hdFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuKGUueWVhcigpPDA/Ii0iOiIiKStvKE1hdGguYWJzKGUueWVhcigpKSw0KX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxMn0sbW9udGhPZlllYXI6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkTW9udGh8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkTW9udGgpO3JldHVybihyLm1vbnRoKCkrdGhpcy5tb250aHNJblllYXIociktdGhpcy5maXJzdE1vbnRoKSV0aGlzLm1vbnRoc0luWWVhcihyKSt0aGlzLm1pbk1vbnRofSxmcm9tTW9udGhPZlllYXI6ZnVuY3Rpb24odCxlKXt2YXIgcj0oZSt0aGlzLmZpcnN0TW9udGgtMip0aGlzLm1pbk1vbnRoKSV0aGlzLm1vbnRoc0luWWVhcih0KSt0aGlzLm1pbk1vbnRoO3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHIsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkTW9udGh8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkTW9udGgpLHJ9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuIHRoaXMubGVhcFllYXIoZSk/MzY2OjM2NX0sZGF5T2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3JldHVybiBuLnRvSkQoKS10aGlzLm5ld0RhdGUobi55ZWFyKCksdGhpcy5mcm9tTW9udGhPZlllYXIobi55ZWFyKCksdGhpcy5taW5Nb250aCksdGhpcy5taW5EYXkpLnRvSkQoKSsxfSxkYXlzSW5XZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDd9LGRheU9mV2VlazpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKTtyZXR1cm4oTWF0aC5mbG9vcih0aGlzLnRvSkQobikpKzIpJXRoaXMuZGF5c0luV2VlaygpfSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLHt9fSxhZGQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKSx0aGlzLl9jb3JyZWN0QWRkKHQsdGhpcy5fYWRkKHQsZSxyKSxlLHIpfSxfYWRkOmZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl92YWxpZGF0ZUxldmVsKyssImQiPT09cnx8InciPT09cil7dmFyIG49dC50b0pEKCkrZSooInciPT09cj90aGlzLmRheXNJbldlZWsoKToxKSxpPXQuY2FsZW5kYXIoKS5mcm9tSkQobik7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSxbaS55ZWFyKCksaS5tb250aCgpLGkuZGF5KCldfXRyeXt2YXIgYT10LnllYXIoKSsoInkiPT09cj9lOjApLG89dC5tb250aE9mWWVhcigpKygibSI9PT1yP2U6MCk7aT10LmRheSgpOyJ5Ij09PXI/KHQubW9udGgoKSE9PXRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbykmJihvPXRoaXMubmV3RGF0ZShhLHQubW9udGgoKSx0aGlzLm1pbkRheSkubW9udGhPZlllYXIoKSksbz1NYXRoLm1pbihvLHRoaXMubW9udGhzSW5ZZWFyKGEpKSxpPU1hdGgubWluKGksdGhpcy5kYXlzSW5Nb250aChhLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbykpKSk6Im0iPT09ciYmKCFmdW5jdGlvbih0KXtmb3IoO288dC5taW5Nb250aDspYS0tLG8rPXQubW9udGhzSW5ZZWFyKGEpO2Zvcih2YXIgZT10Lm1vbnRoc0luWWVhcihhKTtvPmUtMSt0Lm1pbk1vbnRoOylhKyssby09ZSxlPXQubW9udGhzSW5ZZWFyKGEpfSh0aGlzKSxpPU1hdGgubWluKGksdGhpcy5kYXlzSW5Nb250aChhLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbykpKSk7dmFyIHM9W2EsdGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSxpXTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHN9Y2F0Y2godCl7dGhyb3cgdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHR9fSxfY29ycmVjdEFkZDpmdW5jdGlvbih0LGUscixuKXtpZighKHRoaXMuaGFzWWVhclplcm98fCJ5IiE9PW4mJiJtIiE9PW58fDAhPT1lWzBdJiZ0LnllYXIoKT4wPT1lWzBdPjApKXt2YXIgaT17eTpbMSwxLCJ5Il0sbTpbMSx0aGlzLm1vbnRoc0luWWVhcigtMSksIm0iXSx3Olt0aGlzLmRheXNJbldlZWsoKSx0aGlzLmRheXNJblllYXIoLTEpLCJkIl0sZDpbMSx0aGlzLmRheXNJblllYXIoLTEpLCJkIl19W25dLGE9cjwwPy0xOjE7ZT10aGlzLl9hZGQodCxyKmlbMF0rYSppWzFdLGlbMl0pfXJldHVybiB0LmRhdGUoZVswXSxlWzFdLGVbMl0pfSxzZXQ6ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3ZhciBuPSJ5Ij09PXI/ZTp0LnllYXIoKSxpPSJtIj09PXI/ZTp0Lm1vbnRoKCksYT0iZCI9PT1yP2U6dC5kYXkoKTtyZXR1cm4ieSIhPT1yJiYibSIhPT1yfHwoYT1NYXRoLm1pbihhLHRoaXMuZGF5c0luTW9udGgobixpKSkpLHQuZGF0ZShuLGksYSl9LGlzVmFsaWQ6ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3ZhbGlkYXRlTGV2ZWwrKzt2YXIgbj10aGlzLmhhc1llYXJaZXJvfHwwIT09dDtpZihuKXt2YXIgaT10aGlzLm5ld0RhdGUodCxlLHRoaXMubWluRGF5KTtuPWU+PXRoaXMubWluTW9udGgmJmUtdGhpcy5taW5Nb250aDx0aGlzLm1vbnRoc0luWWVhcihpKSYmcj49dGhpcy5taW5EYXkmJnItdGhpcy5taW5EYXk8dGhpcy5kYXlzSW5Nb250aChpKX1yZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLG59LHRvSlNEYXRlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3JldHVybiBjLmluc3RhbmNlKCkuZnJvbUpEKHRoaXMudG9KRChuKSkudG9KU0RhdGUoKX0sZnJvbUpTRGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcm9tSkQoYy5pbnN0YW5jZSgpLmZyb21KU0RhdGUodCkudG9KRCgpKX0sX3ZhbGlkYXRlOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQueWVhcil7aWYoMD09PXRoaXMuX3ZhbGlkYXRlTGV2ZWwmJnRoaXMubmFtZSE9PXQuY2FsZW5kYXIoKS5uYW1lKXRocm93KGMubG9jYWwuZGlmZmVyZW50Q2FsZW5kYXJzfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uZGlmZmVyZW50Q2FsZW5kYXJzKS5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKS5yZXBsYWNlKC9cezFcfS8sdC5jYWxlbmRhcigpLmxvY2FsLm5hbWUpO3JldHVybiB0fXRyeXtpZih0aGlzLl92YWxpZGF0ZUxldmVsKyssMT09PXRoaXMuX3ZhbGlkYXRlTGV2ZWwmJiF0aGlzLmlzVmFsaWQodCxlLHIpKXRocm93IG4ucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7dmFyIGk9dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLGl9Y2F0Y2godCl7dGhyb3cgdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHR9fX0pLGwucHJvdG90eXBlPW5ldyBzLG4obC5wcm90b3R5cGUse25hbWU6IkdyZWdvcmlhbiIsamRFcG9jaDoxNzIxNDI1LjUsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiR3JlZ29yaWFuIixlcG9jaHM6WyJCQ0UiLCJDRSJdLG1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Im1tL2RkL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKTtyZXR1cm4odD1lLnllYXIoKSsoZS55ZWFyKCk8MD8xOjApKSU0PT0wJiYodCUxMDAhPTB8fHQlNDAwPT0wKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoNC0obi5kYXlPZldlZWsoKXx8NyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZE1vbnRofHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3Q9bi55ZWFyKCksZT1uLm1vbnRoKCkscj1uLmRheSgpLHQ8MCYmdCsrLGU8MyYmKGUrPTEyLHQtLSk7dmFyIGk9TWF0aC5mbG9vcih0LzEwMCksYT0yLWkrTWF0aC5mbG9vcihpLzQpO3JldHVybiBNYXRoLmZsb29yKDM2NS4yNSoodCs0NzE2KSkrTWF0aC5mbG9vcigzMC42MDAxKihlKzEpKStyK2EtMTUyNC41fSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih0Ky41KSxyPU1hdGguZmxvb3IoKGUtMTg2NzIxNi4yNSkvMzY1MjQuMjUpLG49KHI9ZSsxK3ItTWF0aC5mbG9vcihyLzQpKSsxNTI0LGk9TWF0aC5mbG9vcigobi0xMjIuMSkvMzY1LjI1KSxhPU1hdGguZmxvb3IoMzY1LjI1KmkpLG89TWF0aC5mbG9vcigobi1hKS8zMC42MDAxKSxzPW4tYS1NYXRoLmZsb29yKDMwLjYwMDEqbyksbD1vLShvPjEzLjU/MTM6MSksYz1pLShsPjIuNT80NzE2OjQ3MTUpO3JldHVybiBjPD0wJiZjLS0sdGhpcy5uZXdEYXRlKGMsbCxzKX0sdG9KU0RhdGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSksaT1uZXcgRGF0ZShuLnllYXIoKSxuLm1vbnRoKCktMSxuLmRheSgpKTtyZXR1cm4gaS5zZXRIb3VycygwKSxpLnNldE1pbnV0ZXMoMCksaS5zZXRTZWNvbmRzKDApLGkuc2V0TWlsbGlzZWNvbmRzKDApLGkuc2V0SG91cnMoaS5nZXRIb3VycygpPjEyP2kuZ2V0SG91cnMoKSsyOjApLGl9LGZyb21KU0RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubmV3RGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpKzEsdC5nZXREYXRlKCkpfX0pO3ZhciBjPWUuZXhwb3J0cz1uZXcgaTtjLmNkYXRlPWEsYy5iYXNlQ2FsZW5kYXI9cyxjLmNhbGVuZGFycy5ncmVnb3JpYW49bH0seyJvYmplY3QtYXNzaWduIjo0NjZ9XSw2MTg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJvYmplY3QtYXNzaWduIiksaT10KCIuL21haW4iKTtuKGkucmVnaW9uYWxPcHRpb25zWyIiXSx7aW52YWxpZEFyZ3VtZW50czoiSW52YWxpZCBhcmd1bWVudHMiLGludmFsaWRGb3JtYXQ6IkNhbm5vdCBmb3JtYXQgYSBkYXRlIGZyb20gYW5vdGhlciBjYWxlbmRhciIsbWlzc2luZ051bWJlckF0OiJNaXNzaW5nIG51bWJlciBhdCBwb3NpdGlvbiB7MH0iLHVua25vd25OYW1lQXQ6IlVua25vd24gbmFtZSBhdCBwb3NpdGlvbiB7MH0iLHVuZXhwZWN0ZWRMaXRlcmFsQXQ6IlVuZXhwZWN0ZWQgbGl0ZXJhbCBhdCBwb3NpdGlvbiB7MH0iLHVuZXhwZWN0ZWRUZXh0OiJBZGRpdGlvbmFsIHRleHQgZm91bmQgYXQgZW5kIn0pLGkubG9jYWw9aS5yZWdpb25hbE9wdGlvbnNbIiJdLG4oaS5jZGF0ZS5wcm90b3R5cGUse2Zvcm1hdERhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJihlPXQsdD0iIiksdGhpcy5fY2FsZW5kYXIuZm9ybWF0RGF0ZSh0fHwiIix0aGlzLGUpfX0pLG4oaS5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLHtVTklYX0VQT0NIOmkuaW5zdGFuY2UoKS5uZXdEYXRlKDE5NzAsMSwxKS50b0pEKCksU0VDU19QRVJfREFZOjg2NDAwLFRJQ0tTX0VQT0NIOmkuaW5zdGFuY2UoKS5qZEVwb2NoLFRJQ0tTX1BFUl9EQVk6ODY0ZTksQVRPTToieXl5eS1tbS1kZCIsQ09PS0lFOiJELCBkZCBNIHl5eXkiLEZVTEw6IkRELCBNTSBkLCB5eXl5IixJU09fODYwMToieXl5eS1tbS1kZCIsSlVMSUFOOiJKIixSRkNfODIyOiJELCBkIE0geXkiLFJGQ184NTA6IkRELCBkZC1NLXl5IixSRkNfMTAzNjoiRCwgZCBNIHl5IixSRkNfMTEyMzoiRCwgZCBNIHl5eXkiLFJGQ18yODIyOiJELCBkIE0geXl5eSIsUlNTOiJELCBkIE0geXkiLFRJQ0tTOiIhIixUSU1FU1RBTVA6IkAiLFczQzoieXl5eS1tbS1kZCIsZm9ybWF0RGF0ZTpmdW5jdGlvbih0LGUscil7aWYoInN0cmluZyIhPXR5cGVvZiB0JiYocj1lLGU9dCx0PSIiKSwhZSlyZXR1cm4iIjtpZihlLmNhbGVuZGFyKCkhPT10aGlzKXRocm93IGkubG9jYWwuaW52YWxpZEZvcm1hdHx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRGb3JtYXQ7dD10fHx0aGlzLmxvY2FsLmRhdGVGb3JtYXQ7Zm9yKHZhciBuLGEsbyxzLGw9KHI9cnx8e30pLmRheU5hbWVzU2hvcnR8fHRoaXMubG9jYWwuZGF5TmFtZXNTaG9ydCxjPXIuZGF5TmFtZXN8fHRoaXMubG9jYWwuZGF5TmFtZXMsdT1yLm1vbnRoTnVtYmVyc3x8dGhpcy5sb2NhbC5tb250aE51bWJlcnMsZj1yLm1vbnRoTmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5tb250aE5hbWVzU2hvcnQsaD1yLm1vbnRoTmFtZXN8fHRoaXMubG9jYWwubW9udGhOYW1lcyxwPShyLmNhbGN1bGF0ZVdlZWt8fHRoaXMubG9jYWwuY2FsY3VsYXRlV2VlayxmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0xO3crbjx0Lmxlbmd0aCYmdC5jaGFyQXQodytuKT09PWU7KW4rKztyZXR1cm4gdys9bi0xLE1hdGguZmxvb3Iobi8ocnx8MSkpPjF9KSxkPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPSIiK2U7aWYocCh0LG4pKWZvcig7aS5sZW5ndGg8cjspaT0iMCIraTtyZXR1cm4gaX0sbT10aGlzLGc9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHU/dS5jYWxsKG0sdCxwKCJtIikpOngoZCgibSIsdC5tb250aCgpLDIpKX0sdj1mdW5jdGlvbih0LGUpe3JldHVybiBlPyJmdW5jdGlvbiI9PXR5cGVvZiBoP2guY2FsbChtLHQpOmhbdC5tb250aCgpLW0ubWluTW9udGhdOiJmdW5jdGlvbiI9PXR5cGVvZiBmP2YuY2FsbChtLHQpOmZbdC5tb250aCgpLW0ubWluTW9udGhdfSx5PXRoaXMubG9jYWwuZGlnaXRzLHg9ZnVuY3Rpb24odCl7cmV0dXJuIHIubG9jYWxOdW1iZXJzJiZ5P3kodCk6dH0sYj0iIixfPSExLHc9MDt3PHQubGVuZ3RoO3crKylpZihfKSInIiE9PXQuY2hhckF0KHcpfHxwKCInIik/Yis9dC5jaGFyQXQodyk6Xz0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdCh3KSl7Y2FzZSJkIjpiKz14KGQoImQiLGUuZGF5KCksMikpO2JyZWFrO2Nhc2UiRCI6Yis9KG49IkQiLGE9ZS5kYXlPZldlZWsoKSxvPWwscz1jLHAobik/c1thXTpvW2FdKTticmVhaztjYXNlIm8iOmIrPWQoIm8iLGUuZGF5T2ZZZWFyKCksMyk7YnJlYWs7Y2FzZSJ3IjpiKz1kKCJ3IixlLndlZWtPZlllYXIoKSwyKTticmVhaztjYXNlIm0iOmIrPWcoZSk7YnJlYWs7Y2FzZSJNIjpiKz12KGUscCgiTSIpKTticmVhaztjYXNlInkiOmIrPXAoInkiLDIpP2UueWVhcigpOihlLnllYXIoKSUxMDA8MTA/IjAiOiIiKStlLnllYXIoKSUxMDA7YnJlYWs7Y2FzZSJZIjpwKCJZIiwyKSxiKz1lLmZvcm1hdFllYXIoKTticmVhaztjYXNlIkoiOmIrPWUudG9KRCgpO2JyZWFrO2Nhc2UiQCI6Yis9KGUudG9KRCgpLXRoaXMuVU5JWF9FUE9DSCkqdGhpcy5TRUNTX1BFUl9EQVk7YnJlYWs7Y2FzZSIhIjpiKz0oZS50b0pEKCktdGhpcy5USUNLU19FUE9DSCkqdGhpcy5USUNLU19QRVJfREFZO2JyZWFrO2Nhc2UiJyI6cCgiJyIpP2IrPSInIjpfPSEwO2JyZWFrO2RlZmF1bHQ6Yis9dC5jaGFyQXQodyl9cmV0dXJuIGJ9LHBhcnNlRGF0ZTpmdW5jdGlvbih0LGUscil7aWYobnVsbD09ZSl0aHJvdyBpLmxvY2FsLmludmFsaWRBcmd1bWVudHN8fGkucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkQXJndW1lbnRzO2lmKCIiPT09KGU9Im9iamVjdCI9PXR5cGVvZiBlP2UudG9TdHJpbmcoKTplKyIiKSlyZXR1cm4gbnVsbDt0PXR8fHRoaXMubG9jYWwuZGF0ZUZvcm1hdDt2YXIgbj0ocj1yfHx7fSkuc2hvcnRZZWFyQ3V0b2ZmfHx0aGlzLnNob3J0WWVhckN1dG9mZjtuPSJzdHJpbmciIT10eXBlb2Ygbj9uOnRoaXMudG9kYXkoKS55ZWFyKCklMTAwK3BhcnNlSW50KG4sMTApO2Zvcih2YXIgYT1yLmRheU5hbWVzU2hvcnR8fHRoaXMubG9jYWwuZGF5TmFtZXNTaG9ydCxvPXIuZGF5TmFtZXN8fHRoaXMubG9jYWwuZGF5TmFtZXMscz1yLnBhcnNlTW9udGh8fHRoaXMubG9jYWwucGFyc2VNb250aCxsPXIubW9udGhOdW1iZXJzfHx0aGlzLmxvY2FsLm1vbnRoTnVtYmVycyxjPXIubW9udGhOYW1lc1Nob3J0fHx0aGlzLmxvY2FsLm1vbnRoTmFtZXNTaG9ydCx1PXIubW9udGhOYW1lc3x8dGhpcy5sb2NhbC5tb250aE5hbWVzLGY9LTEsaD0tMSxwPS0xLGQ9LTEsbT0tMSxnPSExLHY9ITEseT1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0xO00rbjx0Lmxlbmd0aCYmdC5jaGFyQXQoTStuKT09PWU7KW4rKztyZXR1cm4gTSs9bi0xLE1hdGguZmxvb3Iobi8ocnx8MSkpPjF9LHg9ZnVuY3Rpb24odCxyKXt2YXIgbj15KHQsciksYT1bMiwzLG4/NDoyLG4/NDoyLDEwLDExLDIwXVsib3lZSkAhIi5pbmRleE9mKHQpKzFdLG89bmV3IFJlZ0V4cCgiXi0/XFxkezEsIithKyJ9Iikscz1lLnN1YnN0cmluZyhBKS5tYXRjaChvKTtpZighcyl0aHJvdyhpLmxvY2FsLm1pc3NpbmdOdW1iZXJBdHx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLm1pc3NpbmdOdW1iZXJBdCkucmVwbGFjZSgvXHswXH0vLEEpO3JldHVybiBBKz1zWzBdLmxlbmd0aCxwYXJzZUludChzWzBdLDEwKX0sYj10aGlzLF89ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgbCl7eSgibSIpO3ZhciB0PWwuY2FsbChiLGUuc3Vic3RyaW5nKEEpKTtyZXR1cm4gQSs9dC5sZW5ndGgsdH1yZXR1cm4geCgibSIpfSx3PWZ1bmN0aW9uKHQscixuLGEpe2Zvcih2YXIgbz15KHQsYSk/bjpyLHM9MDtzPG8ubGVuZ3RoO3MrKylpZihlLnN1YnN0cihBLG9bc10ubGVuZ3RoKS50b0xvd2VyQ2FzZSgpPT09b1tzXS50b0xvd2VyQ2FzZSgpKXJldHVybiBBKz1vW3NdLmxlbmd0aCxzK2IubWluTW9udGg7dGhyb3coaS5sb2NhbC51bmtub3duTmFtZUF0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0udW5rbm93bk5hbWVBdCkucmVwbGFjZSgvXHswXH0vLEEpfSxUPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHUpe3ZhciB0PXkoIk0iKT91LmNhbGwoYixlLnN1YnN0cmluZyhBKSk6Yy5jYWxsKGIsZS5zdWJzdHJpbmcoQSkpO3JldHVybiBBKz10Lmxlbmd0aCx0fXJldHVybiB3KCJNIixjLHUpfSxrPWZ1bmN0aW9uKCl7aWYoZS5jaGFyQXQoQSkhPT10LmNoYXJBdChNKSl0aHJvdyhpLmxvY2FsLnVuZXhwZWN0ZWRMaXRlcmFsQXR8fGkucmVnaW9uYWxPcHRpb25zWyIiXS51bmV4cGVjdGVkTGl0ZXJhbEF0KS5yZXBsYWNlKC9cezBcfS8sQSk7QSsrfSxBPTAsTT0wO008dC5sZW5ndGg7TSsrKWlmKHYpIiciIT09dC5jaGFyQXQoTSl8fHkoIiciKT9rKCk6dj0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdChNKSl7Y2FzZSJkIjpkPXgoImQiKTticmVhaztjYXNlIkQiOncoIkQiLGEsbyk7YnJlYWs7Y2FzZSJvIjptPXgoIm8iKTticmVhaztjYXNlInciOngoInciKTticmVhaztjYXNlIm0iOnA9XygpO2JyZWFrO2Nhc2UiTSI6cD1UKCk7YnJlYWs7Y2FzZSJ5Ijp2YXIgUz1NO2c9IXkoInkiLDIpLE09UyxoPXgoInkiLDIpO2JyZWFrO2Nhc2UiWSI6aD14KCJZIiwyKTticmVhaztjYXNlIkoiOmY9eCgiSiIpKy41LCIuIj09PWUuY2hhckF0KEEpJiYoQSsrLHgoIkoiKSk7YnJlYWs7Y2FzZSJAIjpmPXgoIkAiKS90aGlzLlNFQ1NfUEVSX0RBWSt0aGlzLlVOSVhfRVBPQ0g7YnJlYWs7Y2FzZSIhIjpmPXgoIiEiKS90aGlzLlRJQ0tTX1BFUl9EQVkrdGhpcy5USUNLU19FUE9DSDticmVhaztjYXNlIioiOkE9ZS5sZW5ndGg7YnJlYWs7Y2FzZSInIjp5KCInIik/aygpOnY9ITA7YnJlYWs7ZGVmYXVsdDprKCl9aWYoQTxlLmxlbmd0aCl0aHJvdyBpLmxvY2FsLnVuZXhwZWN0ZWRUZXh0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0udW5leHBlY3RlZFRleHQ7aWYoLTE9PT1oP2g9dGhpcy50b2RheSgpLnllYXIoKTpoPDEwMCYmZyYmKGgrPS0xPT09bj8xOTAwOnRoaXMudG9kYXkoKS55ZWFyKCktdGhpcy50b2RheSgpLnllYXIoKSUxMDAtKGg8PW4/MDoxMDApKSwic3RyaW5nIj09dHlwZW9mIHAmJihwPXMuY2FsbCh0aGlzLGgscCkpLG0+LTEpe3A9MSxkPW07Zm9yKHZhciBFPXRoaXMuZGF5c0luTW9udGgoaCxwKTtkPkU7RT10aGlzLmRheXNJbk1vbnRoKGgscCkpcCsrLGQtPUV9cmV0dXJuIGY+LTE/dGhpcy5mcm9tSkQoZik6dGhpcy5uZXdEYXRlKGgscCxkKX0sZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbih0LGUscixuLGkpe3ImJiJvYmplY3QiIT10eXBlb2YgciYmKGk9bixuPXIscj1udWxsKSwic3RyaW5nIiE9dHlwZW9mIG4mJihpPW4sbj0iIik7dmFyIGE9dGhpcztyZXR1cm4gZT1lP2UubmV3RGF0ZSgpOm51bGwsdD1udWxsPT10P2U6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3RyeXtyZXR1cm4gYS5wYXJzZURhdGUobix0LGkpfWNhdGNoKHQpe31mb3IodmFyIGU9KCh0PXQudG9Mb3dlckNhc2UoKSkubWF0Y2goL15jLykmJnI/ci5uZXdEYXRlKCk6bnVsbCl8fGEudG9kYXkoKSxvPS8oWystXT9bMC05XSspXHMqKGR8d3xtfHkpPy9nLHM9by5leGVjKHQpO3M7KWUuYWRkKHBhcnNlSW50KHNbMV0sMTApLHNbMl18fCJkIikscz1vLmV4ZWModCk7cmV0dXJuIGV9KHQpOiJudW1iZXIiPT10eXBlb2YgdD9pc05hTih0KXx8dD09PTEvMHx8dD09PS0xLzA/ZTphLnRvZGF5KCkuYWRkKHQsImQiKTphLm5ld0RhdGUodCl9fSl9LHsiLi9tYWluIjo2MTcsIm9iamVjdC1hc3NpZ24iOjQ2Nn1dLDYxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10WzBdLHM9clswXSxsPVswXSxjPXM7bnw9MDt2YXIgdT0wLGY9cztmb3IodT0wO3U8bzsrK3Upe3ZhciBoPWVbbl0tYSxwPWVbbitjXS1hO2g+PTAhPXA+PTAmJmkucHVzaChsWzBdKy41Ky41KihoK3ApLyhoLXApKSxuKz1mLCsrbFswXX19fTtlLmV4cG9ydHM9KG49e2Z1bmNOYW1lOntmdW5jTmFtZToiemVyb0Nyb3NzaW5ncyJ9LmZ1bmNOYW1lfSxmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocixuLGkpe3ZhciBhPXIuZHR5cGUsbz1yLm9yZGVyLHM9W2Esby5qb2luKCldLmpvaW4oKSxsPWVbc107cmV0dXJuIGx8fChlW3NdPWw9dChbYSxvXSkpLGwoci5zaGFwZS5zbGljZSgwKSxyLmRhdGEsci5zdHJpZGUsMHxyLm9mZnNldCxuLGkpfX0oaS5iaW5kKHZvaWQgMCxuKSkpfSx7fV0sNjIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO3JldHVybiBlPStlfHwwLG4odC5oaSh0LnNoYXBlWzBdLTEpLHIsZSkscn07dmFyIG49dCgiLi9saWIvemMtY29yZSIpfSx7Ii4vbGliL3pjLWNvcmUiOjYxOX1dLDYyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9W3twYXRoOiIiLGJhY2tvZmY6MH0se3BhdGg6Ik0tMi40LC0zVjNMMC42LDBaIixiYWNrb2ZmOi42fSx7cGF0aDoiTS0zLjcsLTIuNVYyLjVMMS4zLDBaIixiYWNrb2ZmOjEuM30se3BhdGg6Ik0tNC40NSwtM0wtMS42NSwtMC4yVjAuMkwtNC40NSwzTDEuNTUsMFoiLGJhY2tvZmY6MS41NX0se3BhdGg6Ik0tMi4yLC0yLjJMLTAuMiwtMC4yVjAuMkwtMi4yLDIuMkwtMS40LDNMMS42LDBMLTEuNCwtM1oiLGJhY2tvZmY6MS42fSx7cGF0aDoiTS00LjQsLTIuMUwtMC42LC0wLjJWMC4yTC00LjQsMi4xTC00LDNMMiwwTC00LC0zWiIsYmFja29mZjoyfSx7cGF0aDoiTTIsMEEyLDIgMCAxLDEgMCwtMkEyLDIgMCAwLDEgMiwwWiIsYmFja29mZjowLG5vUm90YXRlOiEwfSx7cGF0aDoiTTIsMlYtMkgtMlYyWiIsYmFja29mZjowLG5vUm90YXRlOiEwfV19LHt9XSw2MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9hcnJvd19wYXRocyIpLGk9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIiksbz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7dCgiLi4vLi4vY29uc3RhbnRzL2F4aXNfcGxhY2VhYmxlX29iamVjdHMiKTtlLmV4cG9ydHM9bygiYW5ub3RhdGlvbiIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx0ZXh0YW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sZm9udDppKHtlZGl0VHlwZToiY2FsYythcnJheWRyYXciLGNvbG9yRWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0saGVpZ2h0Ont2YWxUeXBlOiJudW1iZXIiLG1pbjoxLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0sYWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImNlbnRlciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHZhbGlnbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoibWlkZGxlIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxib3JkZXJwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxzaG93YXJyb3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYXJyb3djb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxhcnJvd2hlYWQ6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLG1heDpuLmxlbmd0aCxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHN0YXJ0YXJyb3doZWFkOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxtYXg6bi5sZW5ndGgsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifSxhcnJvd3NpZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImVuZCIsInN0YXJ0Il0sZXh0cmFzOlsibm9uZSJdLGRmbHQ6ImVuZCIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGFycm93c2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46LjMsZGZsdDoxLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHN0YXJ0YXJyb3dzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMyxkZmx0OjEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYXJyb3d3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46LjEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sc3RhbmRvZmY6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHN0YXJ0c3RhbmRvZmY6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGF4Ont2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGF5Ont2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGF4cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJwaXhlbCIsdmFsdWVzOlsicGl4ZWwiLGEuaWRSZWdleC54LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0sYXlyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6InBpeGVsIix2YWx1ZXM6WyJwaXhlbCIsYS5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6ImNhbGMifSx4cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwYXBlciIsYS5pZFJlZ2V4LngudG9TdHJpbmcoKV0sZWRpdFR5cGU6ImNhbGMifSx4Ont2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJhdXRvIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx4c2hpZnQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHlyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixhLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LHk6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHlzaGlmdDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sY2xpY2t0b3Nob3c6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITEsIm9ub2ZmIiwib25vdXQiXSxkZmx0OiExLGVkaXRUeXBlOiJhcnJheWRyYXcifSx4Y2xpY2s6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHljbGljazp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiYXJyYXlkcmF3In0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJhcnJheWRyYXcifSxob3ZlcmxhYmVsOntiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGZvbnQ6aSh7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSxlZGl0VHlwZToiYXJyYXlkcmF3In0sY2FwdHVyZWV2ZW50czp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGVkaXRUeXBlOiJjYWxjIixfZGVwcmVjYXRlZDp7cmVmOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn19fSl9LHsiLi4vLi4vY29uc3RhbnRzL2F4aXNfcGxhY2VhYmxlX29iamVjdHMiOjc0NSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo4MzQsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuL2Fycm93X3BhdGhzIjo2MjF9XSw2MjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi9kcmF3IikuZHJhdztmdW5jdGlvbiBvKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7bi5maWx0ZXJWaXNpYmxlKGUuYW5ub3RhdGlvbnMpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPWkuZ2V0RnJvbUlkKHQsZS54cmVmKSxuPWkuZ2V0RnJvbUlkKHQsZS55cmVmKSxhPWkuZ2V0UmVmVHlwZShlLnhyZWYpLG89aS5nZXRSZWZUeXBlKGUueXJlZik7ZS5fZXh0cmVtZXM9e30sInJhbmdlIj09PWEmJnMoZSxyKSwicmFuZ2UiPT09byYmcyhlLG4pfSkpfWZ1bmN0aW9uIHModCxlKXt2YXIgcixuPWUuX2lkLGE9bi5jaGFyQXQoMCksbz10W2FdLHM9dFsiYSIrYV0sbD10W2ErInJlZiJdLGM9dFsiYSIrYSsicmVmIl0sdT10WyJfIithKyJwYWRwbHVzIl0sZj10WyJfIithKyJwYWRtaW51cyJdLGg9e3g6MSx5Oi0xfVthXSp0W2ErInNoaWZ0Il0scD0zKnQuYXJyb3dzaXplKnQuYXJyb3d3aWR0aHx8MCxkPXAraCxtPXAtaCxnPTMqdC5zdGFydGFycm93c2l6ZSp0LmFycm93d2lkdGh8fDAsdj1nK2gseT1nLWg7aWYoYz09PWwpe3ZhciB4PWkuZmluZEV4dHJlbWVzKGUsW2UucjJjKG8pXSx7cHBhZHBsdXM6ZCxwcGFkbWludXM6bX0pLGI9aS5maW5kRXh0cmVtZXMoZSxbZS5yMmMocyldLHtwcGFkcGx1czpNYXRoLm1heCh1LHYpLHBwYWRtaW51czpNYXRoLm1heChmLHkpfSk7cj17bWluOlt4Lm1pblswXSxiLm1pblswXV0sbWF4Olt4Lm1heFswXSxiLm1heFswXV19fWVsc2Ugdj1zP3Yrczp2LHk9cz95LXM6eSxyPWkuZmluZEV4dHJlbWVzKGUsW2UucjJjKG8pXSx7cHBhZHBsdXM6TWF0aC5tYXgodSxkLHYpLHBwYWRtaW51czpNYXRoLm1heChmLG0seSl9KTt0Ll9leHRyZW1lc1tuXT1yfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2lmKG4uZmlsdGVyVmlzaWJsZShlLmFubm90YXRpb25zKS5sZW5ndGgmJnQuX2Z1bGxEYXRhLmxlbmd0aClyZXR1cm4gbi5zeW5jT3JBc3luYyhbYSxvXSx0KX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4vZHJhdyI6NjI4fV0sNjI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcjtmdW5jdGlvbiBvKHQsZSl7dmFyIHIsbixpLGEsbyxsLGMsdT10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLGY9W10saD1bXSxwPVtdLGQ9KGV8fFtdKS5sZW5ndGg7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKylpZihhPShpPXVbcl0pLmNsaWNrdG9zaG93KXtmb3Iobj0wO248ZDtuKyspaWYobD0obz1lW25dKS54YXhpcyxjPW8ueWF4aXMsbC5faWQ9PT1pLnhyZWYmJmMuX2lkPT09aS55cmVmJiZsLmQycihvLngpPT09cyhpLl94Y2xpY2ssbCkmJmMuZDJyKG8ueSk9PT1zKGkuX3ljbGljayxjKSl7KGkudmlzaWJsZT8ib25vdXQiPT09YT9oOnA6ZikucHVzaChyKTticmVha31uPT09ZCYmaS52aXNpYmxlJiYib25vdXQiPT09YSYmaC5wdXNoKHIpfXJldHVybntvbjpmLG9mZjpoLGV4cGxpY2l0T2ZmOnB9fWZ1bmN0aW9uIHModCxlKXtyZXR1cm4ibG9nIj09PWUudHlwZT9lLmwycih0KTplLmQycih0KX1lLmV4cG9ydHM9e2hhc0NsaWNrVG9TaG93OmZ1bmN0aW9uKHQsZSl7dmFyIHI9byh0LGUpO3JldHVybiByLm9uLmxlbmd0aD4wfHxyLmV4cGxpY2l0T2ZmLmxlbmd0aD4wfSxvbkNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIHIscyxsPW8odCxlKSxjPWwub24sdT1sLm9mZi5jb25jYXQobC5leHBsaWNpdE9mZiksZj17fSxoPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnM7aWYoIWMubGVuZ3RoJiYhdS5sZW5ndGgpcmV0dXJuO2ZvcihyPTA7cjxjLmxlbmd0aDtyKyspKHM9YSh0LmxheW91dCwiYW5ub3RhdGlvbnMiLGhbY1tyXV0pKS5tb2RpZnlJdGVtKCJ2aXNpYmxlIiwhMCksbi5leHRlbmRGbGF0KGYscy5nZXRVcGRhdGVPYmooKSk7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKykocz1hKHQubGF5b3V0LCJhbm5vdGF0aW9ucyIsaFt1W3JdXSkpLm1vZGlmeUl0ZW0oInZpc2libGUiLCExKSxuLmV4dGVuZEZsYXQoZixzLmdldFVwZGF0ZU9iaigpKTtyZXR1cm4gaS5jYWxsKCJ1cGRhdGUiLHQse30sZil9fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuLi8uLi9yZWdpc3RyeSI6OTA0fV0sNjI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vY29sb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7YSgib3BhY2l0eSIpO3ZhciBvPWEoImJnY29sb3IiKSxzPWEoImJvcmRlcmNvbG9yIiksbD1pLm9wYWNpdHkocyk7YSgiYm9yZGVycGFkIik7dmFyIGM9YSgiYm9yZGVyd2lkdGgiKSx1PWEoInNob3dhcnJvdyIpO2lmKGEoInRleHQiLHU/IiAiOnIuX2RmbHRUaXRsZS5hbm5vdGF0aW9uKSxhKCJ0ZXh0YW5nbGUiKSxuLmNvZXJjZUZvbnQoYSwiZm9udCIsci5mb250KSxhKCJ3aWR0aCIpLGEoImFsaWduIiksYSgiaGVpZ2h0IikmJmEoInZhbGlnbiIpLHUpe3ZhciBmLGgscD1hKCJhcnJvd3NpZGUiKTstMSE9PXAuaW5kZXhPZigiZW5kIikmJihmPWEoImFycm93aGVhZCIpLGg9YSgiYXJyb3dzaXplIikpLC0xIT09cC5pbmRleE9mKCJzdGFydCIpJiYoYSgic3RhcnRhcnJvd2hlYWQiLGYpLGEoInN0YXJ0YXJyb3dzaXplIixoKSksYSgiYXJyb3djb2xvciIsbD9lLmJvcmRlcmNvbG9yOmkuZGVmYXVsdExpbmUpLGEoImFycm93d2lkdGgiLDIqKGwmJmN8fDEpKSxhKCJzdGFuZG9mZiIpLGEoInN0YXJ0c3RhbmRvZmYiKX12YXIgZD1hKCJob3ZlcnRleHQiKSxtPXIuaG92ZXJsYWJlbHx8e307aWYoZCl7dmFyIGc9YSgiaG92ZXJsYWJlbC5iZ2NvbG9yIixtLmJnY29sb3J8fChpLm9wYWNpdHkobyk/aS5yZ2Iobyk6aS5kZWZhdWx0TGluZSkpLHY9YSgiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIsbS5ib3JkZXJjb2xvcnx8aS5jb250cmFzdChnKSk7bi5jb2VyY2VGb250KGEsImhvdmVybGFiZWwuZm9udCIse2ZhbWlseTptLmZvbnQuZmFtaWx5LHNpemU6bS5mb250LnNpemUsY29sb3I6bS5mb250LmNvbG9yfHx2fSl9YSgiY2FwdHVyZWV2ZW50cyIsISFkKX19LHsiLi4vLi4vbGliIjo3NzYsIi4uL2NvbG9yIjo2Mzl9XSw2MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYi90b19sb2dfcmFuZ2UiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZT1lfHx7fTt2YXIgbz0ibG9nIj09PXImJiJsaW5lYXIiPT09ZS50eXBlLHM9ImxpbmVhciI9PT1yJiYibG9nIj09PWUudHlwZTtpZihvfHxzKWZvcih2YXIgbCxjLHU9dC5fZnVsbExheW91dC5hbm5vdGF0aW9ucyxmPWUuX2lkLmNoYXJBdCgwKSxoPTA7aDx1Lmxlbmd0aDtoKyspbD11W2hdLGM9ImFubm90YXRpb25zWyIraCsiXS4iLGxbZisicmVmIl09PT1lLl9pZCYmcChmKSxsWyJhIitmKyJyZWYiXT09PWUuX2lkJiZwKCJhIitmKTtmdW5jdGlvbiBwKHQpe3ZhciByPWxbdF0scz1udWxsO3M9bz9pKHIsZS5yYW5nZSk6TWF0aC5wb3coMTAsciksbihzKXx8KHM9bnVsbCksYShjK3Qscyl9fX0seyIuLi8uLi9saWIvdG9fbG9nX3JhbmdlIjo4MDQsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw2Mjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz10KCIuL2NvbW1vbl9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gbCh0LGUscil7ZnVuY3Rpb24gYShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfXZhciBsPWEoInZpc2libGUiKSxjPWEoImNsaWNrdG9zaG93Iik7aWYobHx8Yyl7byh0LGUscixhKTtmb3IodmFyIHU9ZS5zaG93YXJyb3csZj1bIngiLCJ5Il0saD1bLTEwLC0zMF0scD17X2Z1bGxMYXlvdXQ6cn0sZD0wO2Q8MjtkKyspe3ZhciBtPWZbZF0sZz1pLmNvZXJjZVJlZih0LGUscCxtLCIiLCJwYXBlciIpO2lmKCJwYXBlciIhPT1nKWkuZ2V0RnJvbUlkKHAsZykuX2FubkluZGljZXMucHVzaChlLl9pbmRleCk7aWYoaS5jb2VyY2VQb3NpdGlvbihlLHAsYSxnLG0sLjUpLHUpe3ZhciB2PSJhIittLHk9aS5jb2VyY2VSZWYodCxlLHAsdiwicGl4ZWwiLFsicGl4ZWwiLCJwYXBlciJdKTsicGl4ZWwiIT09eSYmeSE9PWcmJih5PWVbdl09InBpeGVsIik7dmFyIHg9InBpeGVsIj09PXk/aFtkXTouNDtpLmNvZXJjZVBvc2l0aW9uKGUscCxhLHksdix4KX1hKG0rImFuY2hvciIpLGEobSsic2hpZnQiKX1pZihuLm5vbmVPckFsbCh0LGUsWyJ4IiwieSJdKSx1JiZuLm5vbmVPckFsbCh0LGUsWyJheCIsImF5Il0pLGMpe3ZhciBiPWEoInhjbGljayIpLF89YSgieWNsaWNrIik7ZS5feGNsaWNrPXZvaWQgMD09PWI/ZS54OmkuY2xlYW5Qb3NpdGlvbihiLHAsZS54cmVmKSxlLl95Y2xpY2s9dm9pZCAwPT09Xz9lLnk6aS5jbGVhblBvc2l0aW9uKF8scCxlLnlyZWYpfX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7YSh0LGUse25hbWU6ImFubm90YXRpb25zIixoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo4MjIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4vYXR0cmlidXRlcyI6NjIyLCIuL2NvbW1vbl9kZWZhdWx0cyI6NjI1fV0sNjI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vbGliIikscz1vLnN0clRyYW5zbGF0ZSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYz10KCIuLi9jb2xvciIpLHU9dCgiLi4vZHJhd2luZyIpLGY9dCgiLi4vZngiKSxoPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHA9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGQ9dCgiLi4vZHJhZ2VsZW1lbnQiKSxtPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcixnPXQoIi4vZHJhd19hcnJvd19oZWFkIik7ZnVuY3Rpb24gdih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnNbZV18fHt9LG49bC5nZXRGcm9tSWQodCxyLnhyZWYpLGk9bC5nZXRGcm9tSWQodCxyLnlyZWYpO24mJm4uc2V0U2NhbGUoKSxpJiZpLnNldFNjYWxlKCkseCh0LHIsZSwhMSxuLGkpfWZ1bmN0aW9uIHkodCxlLHIsbixpKXt2YXIgYT1pW3JdLG89aVtyKyJyZWYiXSxzPS0xIT09ci5pbmRleE9mKCJ5IiksYz0iZG9tYWluIj09PWwuZ2V0UmVmVHlwZShvKSx1PXM/bi5oOm4udztyZXR1cm4gdD9jP2ErKHM/LWU6ZSkvdC5fbGVuZ3RoOnQucDJyKHQucjJwKGEpK2UpOmErKHM/LWU6ZSkvdX1mdW5jdGlvbiB4KHQsZSxyLGEsdix4KXt2YXIgYixfLHc9dC5fZnVsbExheW91dCxUPXQuX2Z1bGxMYXlvdXQuX3NpemUsaz10Ll9jb250ZXh0LmVkaXRzO2E/KGI9ImFubm90YXRpb24tIithLF89YSsiLmFubm90YXRpb25zIik6KGI9ImFubm90YXRpb24iLF89ImFubm90YXRpb25zIik7dmFyIEE9bSh0LmxheW91dCxfLGUpLE09QS5tb2RpZnlCYXNlLFM9QS5tb2RpZnlJdGVtLEU9QS5nZXRVcGRhdGVPYmo7dy5faW5mb2xheWVyLnNlbGVjdEFsbCgiLiIrYisnW2RhdGEtaW5kZXg9IicrcisnIl0nKS5yZW1vdmUoKTt2YXIgTD0iY2xpcCIrdy5fdWlkKyJfYW5uIityO2lmKGUuX2lucHV0JiYhMSE9PWUudmlzaWJsZSl7dmFyIEM9e3g6e30seTp7fX0sUD0rZS50ZXh0YW5nbGV8fDAsST13Ll9pbmZvbGF5ZXIuYXBwZW5kKCJnIikuY2xhc3NlZChiLCEwKS5hdHRyKCJkYXRhLWluZGV4IixTdHJpbmcocikpLnN0eWxlKCJvcGFjaXR5IixlLm9wYWNpdHkpLE89SS5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXRleHQtZyIsITApLHo9a1tlLnNob3dhcnJvdz8iYW5ub3RhdGlvblRhaWwiOiJhbm5vdGF0aW9uUG9zaXRpb24iXSxEPWUuY2FwdHVyZWV2ZW50c3x8ay5hbm5vdGF0aW9uVGV4dHx8eixSPU8uYXBwZW5kKCJnIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIixEPyJhbGwiOm51bGwpLmNhbGwocCwicG9pbnRlciIpLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7dC5fZHJhZ2dpbmc9ITEsdC5lbWl0KCJwbG90bHlfY2xpY2thbm5vdGF0aW9uIixZKG4uZXZlbnQpKX0pKTtlLmhvdmVydGV4dCYmUi5vbigibW91c2VvdmVyIiwoZnVuY3Rpb24oKXt2YXIgcj1lLmhvdmVybGFiZWwsbj1yLmZvbnQsaT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmLmxvbmVIb3Zlcih7eDA6aS5sZWZ0LWEubGVmdCx4MTppLnJpZ2h0LWEubGVmdCx5OihpLnRvcCtpLmJvdHRvbSkvMi1hLnRvcCx0ZXh0OmUuaG92ZXJ0ZXh0LGNvbG9yOnIuYmdjb2xvcixib3JkZXJDb2xvcjpyLmJvcmRlcmNvbG9yLGZvbnRGYW1pbHk6bi5mYW1pbHksZm9udFNpemU6bi5zaXplLGZvbnRDb2xvcjpuLmNvbG9yfSx7Y29udGFpbmVyOncuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOncuX3BhcGVyLm5vZGUoKSxnZDp0fSl9KSkub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtmLmxvbmVVbmhvdmVyKHcuX2hvdmVybGF5ZXIubm9kZSgpKX0pKTt2YXIgRj1lLmJvcmRlcndpZHRoLEI9ZS5ib3JkZXJwYWQsTj1GK0Isaj1SLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmciKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixGKyJweCIpLmNhbGwoYy5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChjLmZpbGwsZS5iZ2NvbG9yKSxVPWUud2lkdGh8fGUuaGVpZ2h0LFY9dy5fdG9wY2xpcHMuc2VsZWN0QWxsKCIjIitMKS5kYXRhKFU/WzBdOltdKTtWLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImFubmNsaXAiLCEwKS5hdHRyKCJpZCIsTCkuYXBwZW5kKCJyZWN0IiksVi5leGl0KCkucmVtb3ZlKCk7dmFyIEg9ZS5mb250LHE9dy5fbWV0YT9vLnRlbXBsYXRlU3RyaW5nKGUudGV4dCx3Ll9tZXRhKTplLnRleHQsRz1SLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImFubm90YXRpb24tdGV4dCIsITApLnRleHQocSk7ay5hbm5vdGF0aW9uVGV4dD9HLmNhbGwoaC5tYWtlRWRpdGFibGUse2RlbGVnYXRlOlIsZ2Q6dH0pLmNhbGwoVykub24oImVkaXQiLChmdW5jdGlvbihyKXtlLnRleHQ9cix0aGlzLmNhbGwoVyksUygidGV4dCIsciksdiYmdi5hdXRvcmFuZ2UmJk0odi5fbmFtZSsiLmF1dG9yYW5nZSIsITApLHgmJnguYXV0b3JhbmdlJiZNKHguX25hbWUrIi5hdXRvcmFuZ2UiLCEwKSxpLmNhbGwoIl9ndWlSZWxheW91dCIsdCxFKCkpfSkpOkcuY2FsbChXKX1lbHNlIG4uc2VsZWN0QWxsKCIjIitMKS5yZW1vdmUoKTtmdW5jdGlvbiBZKHQpe3ZhciBuPXtpbmRleDpyLGFubm90YXRpb246ZS5faW5wdXQsZnVsbEFubm90YXRpb246ZSxldmVudDp0fTtyZXR1cm4gYSYmKG4uc3VicGxvdElkPWEpLG59ZnVuY3Rpb24gVyhyKXtyZXR1cm4gci5jYWxsKHUuZm9udCxIKS5hdHRyKHsidGV4dC1hbmNob3IiOntsZWZ0OiJzdGFydCIscmlnaHQ6ImVuZCJ9W2UuYWxpZ25dfHwibWlkZGxlIn0pLGguY29udmVydFRvVHNwYW5zKHIsdCxYKSxyfWZ1bmN0aW9uIFgoKXt2YXIgcj1HLnNlbGVjdEFsbCgiYSIpOzE9PT1yLnNpemUoKSYmci50ZXh0KCk9PT1HLnRleHQoKSYmUi5pbnNlcnQoImEiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHsieGxpbms6eGxpbms6aHJlZiI6ci5hdHRyKCJ4bGluazpocmVmIiksInhsaW5rOnhsaW5rOnNob3ciOnIuYXR0cigieGxpbms6c2hvdyIpfSkuc3R5bGUoe2N1cnNvcjoicG9pbnRlciJ9KS5ub2RlKCkuYXBwZW5kQ2hpbGQoai5ub2RlKCkpO3ZhciBuPVIuc2VsZWN0KCIuYW5ub3RhdGlvbi10ZXh0LW1hdGgtZ3JvdXAiKSxmPSFuLmVtcHR5KCksbT11LmJCb3goKGY/bjpHKS5ub2RlKCkpLGI9bS53aWR0aCxfPW0uaGVpZ2h0LEE9ZS53aWR0aHx8YixEPWUuaGVpZ2h0fHxfLEI9TWF0aC5yb3VuZChBKzIqTiksSD1NYXRoLnJvdW5kKEQrMipOKTtmdW5jdGlvbiBxKHQsZSl7cmV0dXJuImF1dG8iPT09ZSYmKGU9dDwxLzM/ImxlZnQiOnQ+Mi8zPyJyaWdodCI6ImNlbnRlciIpLHtjZW50ZXI6MCxtaWRkbGU6MCxsZWZ0Oi41LGJvdHRvbTotLjUscmlnaHQ6LS41LHRvcDouNX1bZV19Zm9yKHZhciBXPSExLFg9WyJ4IiwieSJdLFo9MDtaPFgubGVuZ3RoO1orKyl7dmFyIEosSyxRLCQsdHQsZXQ9WFtaXSxydD1lW2V0KyJyZWYiXXx8ZXQsbnQ9ZVsiYSIrZXQrInJlZiJdLGl0PXt4OnYseTp4fVtldF0sYXQ9KFArKCJ4Ij09PWV0PzA6LTkwKSkqTWF0aC5QSS8xODAsb3Q9QipNYXRoLmNvcyhhdCksc3Q9SCpNYXRoLnNpbihhdCksbHQ9TWF0aC5hYnMob3QpK01hdGguYWJzKHN0KSxjdD1lW2V0KyJhbmNob3IiXSx1dD1lW2V0KyJzaGlmdCJdKigieCI9PT1ldD8xOi0xKSxmdD1DW2V0XSxodD1sLmdldFJlZlR5cGUocnQpO2lmKGl0JiYiZG9tYWluIiE9PWh0KXt2YXIgcHQ9aXQucjJmcmFjdGlvbihlW2V0XSk7KHB0PDB8fHB0PjEpJiYobnQ9PT1ydD8oKHB0PWl0LnIyZnJhY3Rpb24oZVsiYSIrZXRdKSk8MHx8cHQ+MSkmJihXPSEwKTpXPSEwKSxKPWl0Ll9vZmZzZXQraXQucjJwKGVbZXRdKSwkPS41fWVsc2V7dmFyIGR0PSJkb21haW4iPT09aHQ7IngiPT09ZXQ/KFE9ZVtldF0sSj1kdD9pdC5fb2Zmc2V0K2l0Ll9sZW5ndGgqUTpKPVQubCtULncqUSk6KFE9MS1lW2V0XSxKPWR0P2l0Ll9vZmZzZXQraXQuX2xlbmd0aCpROko9VC50K1QuaCpRKSwkPWUuc2hvd2Fycm93Py41OlF9aWYoZS5zaG93YXJyb3cpe2Z0LmhlYWQ9Sjt2YXIgbXQ9ZVsiYSIrZXRdO2lmKHR0PW90KnEoLjUsZS54YW5jaG9yKS1zdCpxKC41LGUueWFuY2hvciksbnQ9PT1ydCl7dmFyIGd0PWwuZ2V0UmVmVHlwZShudCk7ImRvbWFpbiI9PT1ndD8oInkiPT09ZXQmJihtdD0xLW10KSxmdC50YWlsPWl0Ll9vZmZzZXQraXQuX2xlbmd0aCptdCk6InBhcGVyIj09PWd0PyJ5Ij09PWV0PyhtdD0xLW10LGZ0LnRhaWw9VC50K1QuaCptdCk6ZnQudGFpbD1ULmwrVC53Km10OmZ0LnRhaWw9aXQuX29mZnNldCtpdC5yMnAobXQpLEs9dHR9ZWxzZSBmdC50YWlsPUorbXQsSz10dCttdDtmdC50ZXh0PWZ0LnRhaWwrdHQ7dmFyIHZ0PXdbIngiPT09ZXQ/IndpZHRoIjoiaGVpZ2h0Il07aWYoInBhcGVyIj09PXJ0JiYoZnQuaGVhZD1vLmNvbnN0cmFpbihmdC5oZWFkLDEsdnQtMSkpLCJwaXhlbCI9PT1udCl7dmFyIHl0PS1NYXRoLm1heChmdC50YWlsLTMsZnQudGV4dCkseHQ9TWF0aC5taW4oZnQudGFpbCszLGZ0LnRleHQpLXZ0O3l0PjA/KGZ0LnRhaWwrPXl0LGZ0LnRleHQrPXl0KTp4dD4wJiYoZnQudGFpbC09eHQsZnQudGV4dC09eHQpfWZ0LnRhaWwrPXV0LGZ0LmhlYWQrPXV0fWVsc2UgSz10dD1sdCpxKCQsY3QpLGZ0LnRleHQ9Sit0dDtmdC50ZXh0Kz11dCx0dCs9dXQsSys9dXQsZVsiXyIrZXQrInBhZHBsdXMiXT1sdC8yK0ssZVsiXyIrZXQrInBhZG1pbnVzIl09bHQvMi1LLGVbIl8iK2V0KyJzaXplIl09bHQsZVsiXyIrZXQrInNoaWZ0Il09dHR9aWYoVylSLnJlbW92ZSgpO2Vsc2V7dmFyIGJ0PTAsX3Q9MDtpZigibGVmdCIhPT1lLmFsaWduJiYoYnQ9KEEtYikqKCJjZW50ZXIiPT09ZS5hbGlnbj8uNToxKSksInRvcCIhPT1lLnZhbGlnbiYmKF90PShELV8pKigibWlkZGxlIj09PWUudmFsaWduPy41OjEpKSxmKW4uc2VsZWN0KCJzdmciKS5hdHRyKHt4Ok4rYnQtMSx5Ok4rX3R9KS5jYWxsKHUuc2V0Q2xpcFVybCxVP0w6bnVsbCx0KTtlbHNle3ZhciB3dD1OK190LW0udG9wLFR0PU4rYnQtbS5sZWZ0O0cuY2FsbChoLnBvc2l0aW9uVGV4dCxUdCx3dCkuY2FsbCh1LnNldENsaXBVcmwsVT9MOm51bGwsdCl9Vi5zZWxlY3QoInJlY3QiKS5jYWxsKHUuc2V0UmVjdCxOLE4sQSxEKSxqLmNhbGwodS5zZXRSZWN0LEYvMixGLzIsQi1GLEgtRiksUi5jYWxsKHUuc2V0VHJhbnNsYXRlLE1hdGgucm91bmQoQy54LnRleHQtQi8yKSxNYXRoLnJvdW5kKEMueS50ZXh0LUgvMikpLE8uYXR0cih7dHJhbnNmb3JtOiJyb3RhdGUoIitQKyIsIitDLngudGV4dCsiLCIrQy55LnRleHQrIikifSk7dmFyIGt0LEF0PWZ1bmN0aW9uKHIsbil7SS5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWFycm93LWciKS5yZW1vdmUoKTt2YXIgbD1DLnguaGVhZCxmPUMueS5oZWFkLGg9Qy54LnRhaWwrcixwPUMueS50YWlsK24sbT1DLngudGV4dCtyLGI9Qy55LnRleHQrbixfPW8ucm90YXRpb25YWU1hdHJpeChQLG0sYiksdz1vLmFwcGx5MkRUcmFuc2Zvcm0oXyksQT1vLmFwcGx5MkRUcmFuc2Zvcm0yKF8pLEw9K2ouYXR0cigid2lkdGgiKSx6PStqLmF0dHIoImhlaWdodCIpLEQ9bS0uNSpMLEY9RCtMLEI9Yi0uNSp6LE49Qit6LFU9W1tELEIsRCxOXSxbRCxOLEYsTl0sW0YsTixGLEJdLFtGLEIsRCxCXV0ubWFwKEEpO2lmKCFVLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdF4hIW8uc2VnbWVudHNJbnRlcnNlY3QobCxmLGwrMWU2LGYrMWU2LGVbMF0sZVsxXSxlWzJdLGVbM10pfSksITEpKXtVLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW8uc2VnbWVudHNJbnRlcnNlY3QoaCxwLGwsZix0WzBdLHRbMV0sdFsyXSx0WzNdKTtlJiYoaD1lLngscD1lLnkpfSkpO3ZhciBWPWUuYXJyb3d3aWR0aCxIPWUuYXJyb3djb2xvcixxPWUuYXJyb3dzaWRlLEc9SS5hcHBlbmQoImciKS5zdHlsZSh7b3BhY2l0eTpjLm9wYWNpdHkoSCl9KS5jbGFzc2VkKCJhbm5vdGF0aW9uLWFycm93LWciLCEwKSxZPUcuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0iK2grIiwiK3ArIkwiK2wrIiwiK2YpLnN0eWxlKCJzdHJva2Utd2lkdGgiLFYrInB4IikuY2FsbChjLnN0cm9rZSxjLnJnYihIKSk7aWYoZyhZLHEsZSksay5hbm5vdGF0aW9uUG9zaXRpb24mJlkubm9kZSgpLnBhcmVudE5vZGUmJiFhKXt2YXIgVz1sLFg9ZjtpZihlLnN0YW5kb2ZmKXt2YXIgWj1NYXRoLnNxcnQoTWF0aC5wb3cobC1oLDIpK01hdGgucG93KGYtcCwyKSk7Vys9ZS5zdGFuZG9mZiooaC1sKS9aLFgrPWUuc3RhbmRvZmYqKHAtZikvWn12YXIgSixLLFE9Ry5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWFycm93IiwhMCkuY2xhc3NlZCgiYW5uZHJhZyIsITApLmNsYXNzZWQoImN1cnNvci1tb3ZlIiwhMCkuYXR0cih7ZDoiTTMsM0gtM1YtM0gzWk0wLDBMIisoaC1XKSsiLCIrKHAtWCksdHJhbnNmb3JtOnMoVyxYKX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLFYrNisicHgiKS5jYWxsKGMuc3Ryb2tlLCJyZ2JhKDAsMCwwLDApIikuY2FsbChjLmZpbGwsInJnYmEoMCwwLDAsMCkiKTtkLmluaXQoe2VsZW1lbnQ6US5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXt2YXIgdD11LmdldFRyYW5zbGF0ZShSKTtKPXQueCxLPXQueSx2JiZ2LmF1dG9yYW5nZSYmTSh2Ll9uYW1lKyIuYXV0b3JhbmdlIiwhMCkseCYmeC5hdXRvcmFuZ2UmJk0oeC5fbmFtZSsiLmF1dG9yYW5nZSIsITApfSxtb3ZlRm46ZnVuY3Rpb24odCxyKXt2YXIgbj13KEosSyksaT1uWzBdK3QsYT1uWzFdK3I7Ui5jYWxsKHUuc2V0VHJhbnNsYXRlLGksYSksUygieCIseSh2LHQsIngiLFQsZSkpLFMoInkiLHkoeCxyLCJ5IixULGUpKSxlLmF4cmVmPT09ZS54cmVmJiZTKCJheCIseSh2LHQsImF4IixULGUpKSxlLmF5cmVmPT09ZS55cmVmJiZTKCJheSIseSh4LHIsImF5IixULGUpKSxHLmF0dHIoInRyYW5zZm9ybSIscyh0LHIpKSxPLmF0dHIoe3RyYW5zZm9ybToicm90YXRlKCIrUCsiLCIraSsiLCIrYSsiKSJ9KX0sZG9uZUZuOmZ1bmN0aW9uKCl7aS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsRSgpKTt2YXIgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuanMtbm90ZXMtYm94LXBhbmVsIik7ZSYmZS5yZWRyYXcoZS5zZWxlY3RlZE9iail9fSl9fX07aWYoZS5zaG93YXJyb3cmJkF0KDAsMCkseilkLmluaXQoe2VsZW1lbnQ6Ui5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXtrdD1PLmF0dHIoInRyYW5zZm9ybSIpfSxtb3ZlRm46ZnVuY3Rpb24odCxyKXt2YXIgbj0icG9pbnRlciI7aWYoZS5zaG93YXJyb3cpZS5heHJlZj09PWUueHJlZj9TKCJheCIseSh2LHQsImF4IixULGUpKTpTKCJheCIsZS5heCt0KSxlLmF5cmVmPT09ZS55cmVmP1MoImF5Iix5KHgsciwiYXkiLFQudyxlKSk6UygiYXkiLGUuYXkrciksQXQodCxyKTtlbHNle2lmKGEpcmV0dXJuO3ZhciBpLG87aWYodilpPXkodix0LCJ4IixULGUpO2Vsc2V7dmFyIGw9ZS5feHNpemUvVC53LGM9ZS54KyhlLl94c2hpZnQtZS54c2hpZnQpL1Qudy1sLzI7aT1kLmFsaWduKGMrdC9ULncsbCwwLDEsZS54YW5jaG9yKX1pZih4KW89eSh4LHIsInkiLFQsZSk7ZWxzZXt2YXIgdT1lLl95c2l6ZS9ULmgsZj1lLnktKGUuX3lzaGlmdCtlLnlzaGlmdCkvVC5oLXUvMjtvPWQuYWxpZ24oZi1yL1QuaCx1LDAsMSxlLnlhbmNob3IpfVMoIngiLGkpLFMoInkiLG8pLHYmJnh8fChuPWQuZ2V0Q3Vyc29yKHY/LjU6aSx4Py41Om8sZS54YW5jaG9yLGUueWFuY2hvcikpfU8uYXR0cih7dHJhbnNmb3JtOnModCxyKStrdH0pLHAoUixuKX0sY2xpY2tGbjpmdW5jdGlvbihyLG4pe2UuY2FwdHVyZWV2ZW50cyYmdC5lbWl0KCJwbG90bHlfY2xpY2thbm5vdGF0aW9uIixZKG4pKX0sZG9uZUZuOmZ1bmN0aW9uKCl7cChSKSxpLmNhbGwoIl9ndWlSZWxheW91dCIsdCxFKCkpO3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5qcy1ub3Rlcy1ib3gtcGFuZWwiKTtlJiZlLnJlZHJhdyhlLnNlbGVjdGVkT2JqKX19KX19fWUuZXhwb3J0cz17ZHJhdzpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX2luZm9sYXllci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uIikucmVtb3ZlKCk7Zm9yKHZhciByPTA7cjxlLmFubm90YXRpb25zLmxlbmd0aDtyKyspZS5hbm5vdGF0aW9uc1tyXS52aXNpYmxlJiZ2KHQscik7cmV0dXJuIGEucHJldmlvdXNQcm9taXNlcyh0KX0sZHJhd09uZTp2LGRyYXdSYXc6eH19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjc5NywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDIsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vLi4vcGxvdHMvcGxvdHMiOjg5MCwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vY29sb3IiOjYzOSwiLi4vZHJhZ2VsZW1lbnQiOjY1OCwiLi4vZHJhd2luZyI6NjYxLCIuLi9meCI6Njc5LCIuL2RyYXdfYXJyb3dfaGVhZCI6NjI5LCJAcGxvdGx5L2QzIjo1OH1dLDYyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi9jb2xvciIpLGE9dCgiLi9hcnJvd19wYXRocyIpLG89dCgiLi4vLi4vbGliIikscz1vLnN0clNjYWxlLGw9by5zdHJSb3RhdGUsYz1vLnN0clRyYW5zbGF0ZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHUsZixoLHA9dC5ub2RlKCksZD1hW3IuYXJyb3doZWFkfHwwXSxtPWFbci5zdGFydGFycm93aGVhZHx8MF0sZz0oci5hcnJvd3dpZHRofHwxKSooci5hcnJvd3NpemV8fDEpLHY9KHIuYXJyb3d3aWR0aHx8MSkqKHIuc3RhcnRhcnJvd3NpemV8fDEpLHk9ZS5pbmRleE9mKCJzdGFydCIpPj0wLHg9ZS5pbmRleE9mKCJlbmQiKT49MCxiPWQuYmFja29mZipnK3Iuc3RhbmRvZmYsXz1tLmJhY2tvZmYqdityLnN0YXJ0c3RhbmRvZmY7aWYoImxpbmUiPT09cC5ub2RlTmFtZSl7bz17eDordC5hdHRyKCJ4MSIpLHk6K3QuYXR0cigieTEiKX0sdT17eDordC5hdHRyKCJ4MiIpLHk6K3QuYXR0cigieTIiKX07dmFyIHc9by54LXUueCxUPW8ueS11Lnk7aWYoaD0oZj1NYXRoLmF0YW4yKFQsdykpK01hdGguUEksYiYmXyYmYitfPk1hdGguc3FydCh3KncrVCpUKSlyZXR1cm4gdm9pZCB6KCk7aWYoYil7aWYoYipiPncqdytUKlQpcmV0dXJuIHZvaWQgeigpO3ZhciBrPWIqTWF0aC5jb3MoZiksQT1iKk1hdGguc2luKGYpO3UueCs9ayx1LnkrPUEsdC5hdHRyKHt4Mjp1LngseTI6dS55fSl9aWYoXyl7aWYoXypfPncqdytUKlQpcmV0dXJuIHZvaWQgeigpO3ZhciBNPV8qTWF0aC5jb3MoZiksUz1fKk1hdGguc2luKGYpO28ueC09TSxvLnktPVMsdC5hdHRyKHt4MTpvLngseTE6by55fSl9fWVsc2UgaWYoInBhdGgiPT09cC5ub2RlTmFtZSl7dmFyIEU9cC5nZXRUb3RhbExlbmd0aCgpLEw9IiI7aWYoRTxiK18pcmV0dXJuIHZvaWQgeigpO3ZhciBDPXAuZ2V0UG9pbnRBdExlbmd0aCgwKSxQPXAuZ2V0UG9pbnRBdExlbmd0aCguMSk7Zj1NYXRoLmF0YW4yKEMueS1QLnksQy54LVAueCksbz1wLmdldFBvaW50QXRMZW5ndGgoTWF0aC5taW4oXyxFKSksTD0iMHB4LCIrXysicHgsIjt2YXIgST1wLmdldFBvaW50QXRMZW5ndGgoRSksTz1wLmdldFBvaW50QXRMZW5ndGgoRS0uMSk7aD1NYXRoLmF0YW4yKEkueS1PLnksSS54LU8ueCksdT1wLmdldFBvaW50QXRMZW5ndGgoTWF0aC5tYXgoMCxFLWIpKSxMKz1FLShMP18rYjpiKSsicHgsIitFKyJweCIsdC5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsTCl9ZnVuY3Rpb24geigpe3Quc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwcHgsMTAwcHgiKX1mdW5jdGlvbiBEKGUsYSxvLHUpe2UucGF0aCYmKGUubm9Sb3RhdGUmJihvPTApLG4uc2VsZWN0KHAucGFyZW50Tm9kZSkuYXBwZW5kKCJwYXRoIikuYXR0cih7Y2xhc3M6dC5hdHRyKCJjbGFzcyIpLGQ6ZS5wYXRoLHRyYW5zZm9ybTpjKGEueCxhLnkpK2woMTgwKm8vTWF0aC5QSSkrcyh1KX0pLnN0eWxlKHtmaWxsOmkucmdiKHIuYXJyb3djb2xvciksInN0cm9rZS13aWR0aCI6MH0pKX15JiZEKG0sbyxmLHYpLHgmJkQoZCx1LGgsZyl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9jb2xvciI6NjM5LCIuL2Fycm93X3BhdGhzIjo2MjEsIkBwbG90bHkvZDMiOjU4fV0sNjMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZHJhdyIpLGk9dCgiLi9jbGljayIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJhbm5vdGF0aW9ucyIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksaW5jbHVkZUJhc2VQbG90OnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiKSgiYW5ub3RhdGlvbnMiKSxjYWxjQXV0b3JhbmdlOnQoIi4vY2FsY19hdXRvcmFuZ2UiKSxkcmF3Om4uZHJhdyxkcmF3T25lOm4uZHJhd09uZSxkcmF3UmF3Om4uZHJhd1JhdyxoYXNDbGlja1RvU2hvdzppLmhhc0NsaWNrVG9TaG93LG9uQ2xpY2s6aS5vbkNsaWNrLGNvbnZlcnRDb29yZHM6dCgiLi9jb252ZXJ0X2Nvb3JkcyIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIjo4NDAsIi4vYXR0cmlidXRlcyI6NjIyLCIuL2NhbGNfYXV0b3JhbmdlIjo2MjMsIi4vY2xpY2siOjYyNCwiLi9jb252ZXJ0X2Nvb3JkcyI6NjI2LCIuL2RlZmF1bHRzIjo2MjcsIi4vZHJhdyI6NjI4fV0sNjMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTtlLmV4cG9ydHM9aShhKCJhbm5vdGF0aW9uIix7dmlzaWJsZTpuLnZpc2libGUseDp7dmFsVHlwZToiYW55In0seTp7dmFsVHlwZToiYW55In0sejp7dmFsVHlwZToiYW55In0sYXg6e3ZhbFR5cGU6Im51bWJlciJ9LGF5Ont2YWxUeXBlOiJudW1iZXIifSx4YW5jaG9yOm4ueGFuY2hvcix4c2hpZnQ6bi54c2hpZnQseWFuY2hvcjpuLnlhbmNob3IseXNoaWZ0Om4ueXNoaWZ0LHRleHQ6bi50ZXh0LHRleHRhbmdsZTpuLnRleHRhbmdsZSxmb250Om4uZm9udCx3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxvcGFjaXR5Om4ub3BhY2l0eSxhbGlnbjpuLmFsaWduLHZhbGlnbjpuLnZhbGlnbixiZ2NvbG9yOm4uYmdjb2xvcixib3JkZXJjb2xvcjpuLmJvcmRlcmNvbG9yLGJvcmRlcnBhZDpuLmJvcmRlcnBhZCxib3JkZXJ3aWR0aDpuLmJvcmRlcndpZHRoLHNob3dhcnJvdzpuLnNob3dhcnJvdyxhcnJvd2NvbG9yOm4uYXJyb3djb2xvcixhcnJvd2hlYWQ6bi5hcnJvd2hlYWQsc3RhcnRhcnJvd2hlYWQ6bi5zdGFydGFycm93aGVhZCxhcnJvd3NpZGU6bi5hcnJvd3NpZGUsYXJyb3dzaXplOm4uYXJyb3dzaXplLHN0YXJ0YXJyb3dzaXplOm4uc3RhcnRhcnJvd3NpemUsYXJyb3d3aWR0aDpuLmFycm93d2lkdGgsc3RhbmRvZmY6bi5zdGFuZG9mZixzdGFydHN0YW5kb2ZmOm4uc3RhcnRzdGFuZG9mZixob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJsYWJlbDpuLmhvdmVybGFiZWwsY2FwdHVyZWV2ZW50czpuLmNhcHR1cmVldmVudHN9KSwiY2FsYyIsImZyb20tcm9vdCIpfSx7Ii4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgwOSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIjo2MjJ9XSw2MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1lLmZ1bGxTY2VuZUxheW91dC5kb21haW4sYT1lLmZ1bGxMYXlvdXQuX3NpemUsbz17cGRhdGE6bnVsbCx0eXBlOiJsaW5lYXIiLGF1dG9yYW5nZTohMSxyYW5nZTpbLTEvMCwxLzBdfTt0Ll94YT17fSxuLmV4dGVuZEZsYXQodC5feGEsbyksaS5zZXRDb252ZXJ0KHQuX3hhKSx0Ll94YS5fb2Zmc2V0PWEubCtyLnhbMF0qYS53LHQuX3hhLmwycD1mdW5jdGlvbigpe3JldHVybi41KigxK3QuX3BkYXRhWzBdL3QuX3BkYXRhWzNdKSphLncqKHIueFsxXS1yLnhbMF0pfSx0Ll95YT17fSxuLmV4dGVuZEZsYXQodC5feWEsbyksaS5zZXRDb252ZXJ0KHQuX3lhKSx0Ll95YS5fb2Zmc2V0PWEudCsoMS1yLnlbMV0pKmEuaCx0Ll95YS5sMnA9ZnVuY3Rpb24oKXtyZXR1cm4uNSooMS10Ll9wZGF0YVsxXS90Ll9wZGF0YVszXSkqYS5oKihyLnlbMV0tci55WzBdKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmZ1bGxTY2VuZUxheW91dC5hbm5vdGF0aW9ucyxyPTA7cjxlLmxlbmd0aDtyKyspYShlW3JdLHQpO3QuZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tIit0LmlkKS5yZW1vdmUoKX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4Mjd9XSw2MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz10KCIuLi9hbm5vdGF0aW9ucy9jb21tb25fZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIGwodCxlLHIsYSl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWZ1bmN0aW9uIGModCl7dmFyIG49dCsiYXhpcyIsYT17X2Z1bGxMYXlvdXQ6e319O3JldHVybiBhLl9mdWxsTGF5b3V0W25dPXJbbl0saS5jb2VyY2VQb3NpdGlvbihlLGEsbCx0LHQsLjUpfWwoInZpc2libGUiKSYmKG8odCxlLGEuZnVsbExheW91dCxsKSxjKCJ4IiksYygieSIpLGMoInoiKSxuLm5vbmVPckFsbCh0LGUsWyJ4IiwieSIsInoiXSksZS54cmVmPSJ4IixlLnlyZWY9InkiLGUuenJlZj0ieiIsbCgieGFuY2hvciIpLGwoInlhbmNob3IiKSxsKCJ4c2hpZnQiKSxsKCJ5c2hpZnQiKSxlLnNob3dhcnJvdyYmKGUuYXhyZWY9InBpeGVsIixlLmF5cmVmPSJwaXhlbCIsbCgiYXgiLC0xMCksbCgiYXkiLC0zMCksbi5ub25lT3JBbGwodCxlLFsiYXgiLCJheSJdKSkpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7YSh0LGUse25hbWU6ImFubm90YXRpb25zIixoYW5kbGVJdGVtRGVmYXVsdHM6bCxmdWxsTGF5b3V0OnIuZnVsbExheW91dH0pfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo4MjIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uL2Fubm90YXRpb25zL2NvbW1vbl9kZWZhdWx0cyI6NjI1LCIuL2F0dHJpYnV0ZXMiOjYzMX1dLDYzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9hbm5vdGF0aW9ucy9kcmF3IikuZHJhd1JhdyxpPXQoIi4uLy4uL3Bsb3RzL2dsM2QvcHJvamVjdCIpLGE9WyJ4IiwieSIsInoiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuZnVsbFNjZW5lTGF5b3V0LHI9dC5kYXRhU2NhbGUsbz1lLmFubm90YXRpb25zLHM9MDtzPG8ubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPW9bc10sYz0hMSx1PTA7dTwzO3UrKyl7dmFyIGY9YVt1XSxoPWxbZl0scD1lW2YrImF4aXMiXS5yMmZyYWN0aW9uKGgpO2lmKHA8MHx8cD4xKXtjPSEwO2JyZWFrfX1jP3QuZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdCgiLmFubm90YXRpb24tIit0LmlkKydbZGF0YS1pbmRleD0iJytzKyciXScpLnJlbW92ZSgpOihsLl9wZGF0YT1pKHQuZ2xwbG90LmNhbWVyYVBhcmFtcyxbZS54YXhpcy5yMmwobC54KSpyWzBdLGUueWF4aXMucjJsKGwueSkqclsxXSxlLnpheGlzLnIybChsLnopKnJbMl1dKSxuKHQuZ3JhcGhEaXYsbCxzLHQuaWQsbC5feGEsbC5feWEpKX19fSx7Ii4uLy4uL3Bsb3RzL2dsM2QvcHJvamVjdCI6ODc4LCIuLi9hbm5vdGF0aW9ucy9kcmF3Ijo2Mjh9XSw2MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJhbm5vdGF0aW9uczNkIixzY2hlbWE6e3N1YnBsb3RzOntzY2VuZTp7YW5ub3RhdGlvbnM6dCgiLi9hdHRyaWJ1dGVzIil9fX0sbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxoYW5kbGVEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksaW5jbHVkZUJhc2VQbG90OmZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5zdWJwbG90c1JlZ2lzdHJ5LmdsM2Q7aWYoIXIpcmV0dXJuO2Zvcih2YXIgYT1yLmF0dHJSZWdleCxvPU9iamVjdC5rZXlzKHQpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTthLnRlc3QobCkmJih0W2xdLmFubm90YXRpb25zfHxbXSkubGVuZ3RoJiYoaS5wdXNoVW5pcXVlKGUuX2Jhc2VQbG90TW9kdWxlcyxyKSxpLnB1c2hVbmlxdWUoZS5fc3VicGxvdHMuZ2wzZCxsKSl9fSxjb252ZXJ0OnQoIi4vY29udmVydCIpLGRyYXc6dCgiLi9kcmF3Iil9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2F0dHJpYnV0ZXMiOjYzMSwiLi9jb252ZXJ0Ijo2MzIsIi4vZGVmYXVsdHMiOjYzMywiLi9kcmF3Ijo2MzR9XSw2MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIndvcmxkLWNhbGVuZGFycy9kaXN0L21haW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9wbHVzIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NoaW5lc2UiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY29wdGljIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2Rpc2N3b3JsZCIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9ldGhpb3BpYW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaGVicmV3IiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2lzbGFtaWMiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvanVsaWFuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL21heWFuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25hbmFrc2hhaGkiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmVwYWxpIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3BlcnNpYW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGFpd2FuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RoYWkiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdW1tYWxxdXJhIil9LHsid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NoaW5lc2UiOjYwMywid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NvcHRpYyI6NjA0LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZGlzY3dvcmxkIjo2MDUsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9ldGhpb3BpYW4iOjYwNiwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2hlYnJldyI6NjA3LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaXNsYW1pYyI6NjA4LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvanVsaWFuIjo2MDksIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9tYXlhbiI6NjEwLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmFuYWtzaGFoaSI6NjExLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmVwYWxpIjo2MTIsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9wZXJzaWFuIjo2MTMsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90YWl3YW4iOjYxNCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RoYWkiOjYxNSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3VtbWFscXVyYSI6NjE2LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9tYWluIjo2MTcsIndvcmxkLWNhbGVuZGFycy9kaXN0L3BsdXMiOjYxOH1dLDYzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NhbGVuZGFycyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksbz1hLkVQT0NISkQscz1hLk9ORURBWSxsPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6aS5zb3J0T2JqZWN0S2V5cyhuLmNhbGVuZGFycyksZWRpdFR5cGU6ImNhbGMiLGRmbHQ6ImdyZWdvcmlhbiJ9LGM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9e307cmV0dXJuIGFbcl09bCxpLmNvZXJjZSh0LGUsYSxyLG4pfSx1PXtkOnswOiJkZCIsIi0iOiJkIn0sZTp7MDoiZCIsIi0iOiJkIn0sYTp7MDoiRCIsIi0iOiJEIn0sQTp7MDoiREQiLCItIjoiREQifSxqOnswOiJvbyIsIi0iOiJvIn0sVzp7MDoid3ciLCItIjoidyJ9LG06ezA6Im1tIiwiLSI6Im0ifSxiOnswOiJNIiwiLSI6Ik0ifSxCOnswOiJNTSIsIi0iOiJNTSJ9LHk6ezA6Inl5IiwiLSI6Inl5In0sWTp7MDoieXl5eSIsIi0iOiJ5eXl5In0sVToiIyMiLHc6IiMjIixjOnswOiJEIE0gZCAlWCB5eXl5IiwiLSI6IkQgTSBkICVYIHl5eXkifSx4OnswOiJtbS9kZC95eXl5IiwiLSI6Im1tL2RkL3l5eXkifX07dmFyIGY9e307ZnVuY3Rpb24gaCh0KXt2YXIgZT1mW3RdO3JldHVybiBlfHwoZT1mW3RdPW4uaW5zdGFuY2UodCkpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIGkuZXh0ZW5kRmxhdCh7fSxsLHtkZXNjcmlwdGlvbjp0fSl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4iU2V0cyB0aGUgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSB3aXRoIGAiK3QrImAgZGF0ZSBkYXRhLiJ9dmFyIG09e3hjYWxlbmRhcjpwKGQoIngiKSl9LGc9aS5leHRlbmRGbGF0KHt9LG0se3ljYWxlbmRhcjpwKGQoInkiKSl9KSx2PWkuZXh0ZW5kRmxhdCh7fSxnLHt6Y2FsZW5kYXI6cChkKCJ6IikpfSkseT1wKFsiU2V0cyB0aGUgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSBmb3IgYHJhbmdlYCBhbmQgYHRpY2swYCIsImlmIHRoaXMgaXMgYSBkYXRlIGF4aXMuIFRoaXMgZG9lcyBub3Qgc2V0IHRoZSBjYWxlbmRhciBmb3IiLCJpbnRlcnByZXRpbmcgZGF0YSBvbiB0aGlzIGF4aXMsIHRoYXQncyBzcGVjaWZpZWQgaW4gdGhlIHRyYWNlIiwib3IgdmlhIHRoZSBnbG9iYWwgYGxheW91dC5jYWxlbmRhcmAiXS5qb2luKCIgIikpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJjYWxlbmRhcnMiLHNjaGVtYTp7dHJhY2VzOntzY2F0dGVyOmcsYmFyOmcsYm94OmcsaGVhdG1hcDpnLGNvbnRvdXI6ZyxoaXN0b2dyYW06ZyxoaXN0b2dyYW0yZDpnLGhpc3RvZ3JhbTJkY29udG91cjpnLHNjYXR0ZXIzZDp2LHN1cmZhY2U6dixtZXNoM2Q6dixzY2F0dGVyZ2w6ZyxvaGxjOm0sY2FuZGxlc3RpY2s6bX0sbGF5b3V0OntjYWxlbmRhcjpwKFsiU2V0cyB0aGUgZGVmYXVsdCBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBpbnRlcnByZXRpbmcgYW5kIiwiZGlzcGxheWluZyBkYXRlcyB0aHJvdWdob3V0IHRoZSBwbG90LiJdLmpvaW4oIiAiKSl9LHN1YnBsb3RzOnt4YXhpczp7Y2FsZW5kYXI6eX0seWF4aXM6e2NhbGVuZGFyOnl9LHNjZW5lOnt4YXhpczp7Y2FsZW5kYXI6eX0seWF4aXM6e2NhbGVuZGFyOnl9LHpheGlzOntjYWxlbmRhcjp5fX0scG9sYXI6e3JhZGlhbGF4aXM6e2NhbGVuZGFyOnl9fX0sdHJhbnNmb3Jtczp7ZmlsdGVyOnt2YWx1ZWNhbGVuZGFyOnAoWyJXQVJOSU5HOiBBbGwgdHJhbnNmb3JtcyBhcmUgZGVwcmVjYXRlZCBhbmQgbWF5IGJlIHJlbW92ZWQgZnJvbSB0aGUgQVBJIGluIG5leHQgbWFqb3IgdmVyc2lvbi4iLCJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgdmFsdWVgLCBpZiBpdCBpcyBhIGRhdGUuIl0uam9pbigiICIpKSx0YXJnZXRjYWxlbmRhcjpwKFsiV0FSTklORzogQWxsIHRyYW5zZm9ybXMgYXJlIGRlcHJlY2F0ZWQgYW5kIG1heSBiZSByZW1vdmVkIGZyb20gdGhlIEFQSSBpbiBuZXh0IG1ham9yIHZlcnNpb24uIiwiU2V0cyB0aGUgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSBmb3IgYHRhcmdldGAsIGlmIGl0IGlzIGFuIiwiYXJyYXkgb2YgZGF0ZXMuIElmIGB0YXJnZXRgIGlzIGEgc3RyaW5nIChlZyAqeCopIHdlIHVzZSB0aGUiLCJjb3JyZXNwb25kaW5nIHRyYWNlIGF0dHJpYnV0ZSAoZWcgYHhjYWxlbmRhcmApIGlmIGl0IGV4aXN0cywiLCJldmVuIGlmIGB0YXJnZXRjYWxlbmRhcmAgaXMgcHJvdmlkZWQuIl0uam9pbigiICIpKX19fSxsYXlvdXRBdHRyaWJ1dGVzOmwsaGFuZGxlRGVmYXVsdHM6YyxoYW5kbGVUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKWModCxlLHJbaV0rImNhbGVuZGFyIixuLmNhbGVuZGFyKX0sQ0FOT05JQ0FMX1NVTkRBWTp7Y2hpbmVzZToiMjAwMC0wMS0wMiIsY29wdGljOiIyMDAwLTAxLTAzIixkaXNjd29ybGQ6IjIwMDAtMDEtMDMiLGV0aGlvcGlhbjoiMjAwMC0wMS0wNSIsaGVicmV3OiI1MDAwLTAxLTAxIixpc2xhbWljOiIxMDAwLTAxLTAyIixqdWxpYW46IjIwMDAtMDEtMDMiLG1heWFuOiI1MDAwLTAxLTAxIixuYW5ha3NoYWhpOiIxMDAwLTAxLTA1IixuZXBhbGk6IjIwMDAtMDEtMDUiLHBlcnNpYW46IjEwMDAtMDEtMDEiLGphbGFsaToiMTAwMC0wMS0wMSIsdGFpd2FuOiIxMDAwLTAxLTA0Iix0aGFpOiIyMDAwLTAxLTA0Iix1bW1hbHF1cmE6IjE0MDAtMDEtMDYifSxDQU5PTklDQUxfVElDSzp7Y2hpbmVzZToiMjAwMC0wMS0wMSIsY29wdGljOiIyMDAwLTAxLTAxIixkaXNjd29ybGQ6IjIwMDAtMDEtMDEiLGV0aGlvcGlhbjoiMjAwMC0wMS0wMSIsaGVicmV3OiI1MDAwLTAxLTAxIixpc2xhbWljOiIxMDAwLTAxLTAxIixqdWxpYW46IjIwMDAtMDEtMDEiLG1heWFuOiI1MDAwLTAxLTAxIixuYW5ha3NoYWhpOiIxMDAwLTAxLTAxIixuZXBhbGk6IjIwMDAtMDEtMDEiLHBlcnNpYW46IjEwMDAtMDEtMDEiLGphbGFsaToiMTAwMC0wMS0wMSIsdGFpd2FuOiIxMDAwLTAxLTAxIix0aGFpOiIyMDAwLTAxLTAxIix1bW1hbHF1cmE6IjE0MDAtMDEtMDEifSxERkxUUkFOR0U6e2NoaW5lc2U6WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdLGNvcHRpYzpbIjE3MDAtMDEtMDEiLCIxNzAxLTAxLTAxIl0sZGlzY3dvcmxkOlsiMTgwMC0wMS0wMSIsIjE4MDEtMDEtMDEiXSxldGhpb3BpYW46WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdLGhlYnJldzpbIjU3MDAtMDEtMDEiLCI1NzAxLTAxLTAxIl0saXNsYW1pYzpbIjE0MDAtMDEtMDEiLCIxNDAxLTAxLTAxIl0sanVsaWFuOlsiMjAwMC0wMS0wMSIsIjIwMDEtMDEtMDEiXSxtYXlhbjpbIjUyMDAtMDEtMDEiLCI1MjAxLTAxLTAxIl0sbmFuYWtzaGFoaTpbIjA1MDAtMDEtMDEiLCIwNTAxLTAxLTAxIl0sbmVwYWxpOlsiMjAwMC0wMS0wMSIsIjIwMDEtMDEtMDEiXSxwZXJzaWFuOlsiMTQwMC0wMS0wMSIsIjE0MDEtMDEtMDEiXSxqYWxhbGk6WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdLHRhaXdhbjpbIjAxMDAtMDEtMDEiLCIwMTAxLTAxLTAxIl0sdGhhaTpbIjI1MDAtMDEtMDEiLCIyNTAxLTAxLTAxIl0sdW1tYWxxdXJhOlsiMTQwMC0wMS0wMSIsIjE0MDEtMDEtMDEiXX0sZ2V0Q2FsOmgsd29ybGRDYWxGbXQ6ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpLGEsbCxjLGY9TWF0aC5mbG9vcigoZSsuMDUpL3MpK28scD1oKHIpLmZyb21KRChmKSxkPTA7LTEhPT0oZD10LmluZGV4T2YoIiUiLGQpKTspIjAiPT09KG49dC5jaGFyQXQoZCsxKSl8fCItIj09PW58fCJfIj09PW4/KGE9MyxpPXQuY2hhckF0KGQrMiksIl8iPT09biYmKG49Ii0iKSk6KGk9bixuPSIwIixhPTIpLChsPXVbaV0pPyhjPSIjIyI9PT1sPyIjIyI6cC5mb3JtYXREYXRlKGxbbl0pLHQ9dC5zdWJzdHIoMCxkKStjK3Quc3Vic3RyKGQrYSksZCs9Yy5sZW5ndGgpOmQrPWE7cmV0dXJuIHR9fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuL2NhbGVuZGFycyI6NjM2fV0sNjM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZGVmYXVsdHM9WyIjMWY3N2I0IiwiI2ZmN2YwZSIsIiMyY2EwMmMiLCIjZDYyNzI4IiwiIzk0NjdiZCIsIiM4YzU2NGIiLCIjZTM3N2MyIiwiIzdmN2Y3ZiIsIiNiY2JkMjIiLCIjMTdiZWNmIl0sci5kZWZhdWx0TGluZT0iIzQ0NCIsci5saWdodExpbmU9IiNlZWUiLHIuYmFja2dyb3VuZD0iI2ZmZiIsci5ib3JkZXJMaW5lPSIjQkVDOEQ5IixyLmxpZ2h0RnJhY3Rpb249MWUzLzExfSx7fV0sNjM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInRpbnljb2xvcjIiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9saWIvYXJyYXkiKS5pc1R5cGVkQXJyYXksbz1lLmV4cG9ydHM9e30scz10KCIuL2F0dHJpYnV0ZXMiKTtvLmRlZmF1bHRzPXMuZGVmYXVsdHM7dmFyIGw9by5kZWZhdWx0TGluZT1zLmRlZmF1bHRMaW5lO28ubGlnaHRMaW5lPXMubGlnaHRMaW5lO3ZhciBjPW8uYmFja2dyb3VuZD1zLmJhY2tncm91bmQ7ZnVuY3Rpb24gdSh0KXtpZihpKHQpfHwic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIHQ7dmFyIGU9dC50cmltKCk7aWYoInJnYiIhPT1lLnN1YnN0cigwLDMpKXJldHVybiB0O3ZhciByPWUubWF0Y2goL15yZ2JhP1xzKlwoKFteKCldKilcKSQvKTtpZighcilyZXR1cm4gdDt2YXIgbj1yWzFdLnRyaW0oKS5zcGxpdCgvXHMqW1xzLF1ccyovKSxhPSJhIj09PWUuY2hhckF0KDMpJiY0PT09bi5sZW5ndGg7aWYoIWEmJjMhPT1uLmxlbmd0aClyZXR1cm4gdDtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl7aWYoIW5bb10ubGVuZ3RoKXJldHVybiB0O2lmKG5bb109TnVtYmVyKG5bb10pLCEobltvXT49MCkpcmV0dXJuIHQ7aWYoMz09PW8pbltvXT4xJiYobltvXT0xKTtlbHNlIGlmKG5bb10+PTEpcmV0dXJuIHR9dmFyIHM9TWF0aC5yb3VuZCgyNTUqblswXSkrIiwgIitNYXRoLnJvdW5kKDI1NSpuWzFdKSsiLCAiK01hdGgucm91bmQoMjU1Km5bMl0pO3JldHVybiBhPyJyZ2JhKCIrcysiLCAiK25bM10rIikiOiJyZ2IoIitzKyIpIn1vLnRpbnlSR0I9ZnVuY3Rpb24odCl7dmFyIGU9dC50b1JnYigpO3JldHVybiJyZ2IoIitNYXRoLnJvdW5kKGUucikrIiwgIitNYXRoLnJvdW5kKGUuZykrIiwgIitNYXRoLnJvdW5kKGUuYikrIikifSxvLnJnYj1mdW5jdGlvbih0KXtyZXR1cm4gby50aW55UkdCKG4odCkpfSxvLm9wYWNpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/bih0KS5nZXRBbHBoYSgpOjB9LG8uYWRkT3BhY2l0eT1mdW5jdGlvbih0LGUpe3ZhciByPW4odCkudG9SZ2IoKTtyZXR1cm4icmdiYSgiK01hdGgucm91bmQoci5yKSsiLCAiK01hdGgucm91bmQoci5nKSsiLCAiK01hdGgucm91bmQoci5iKSsiLCAiK2UrIikifSxvLmNvbWJpbmU9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHQpLnRvUmdiKCk7aWYoMT09PXIuYSlyZXR1cm4gbih0KS50b1JnYlN0cmluZygpO3ZhciBpPW4oZXx8YykudG9SZ2IoKSxhPTE9PT1pLmE/aTp7cjoyNTUqKDEtaS5hKStpLnIqaS5hLGc6MjU1KigxLWkuYSkraS5nKmkuYSxiOjI1NSooMS1pLmEpK2kuYippLmF9LG89e3I6YS5yKigxLXIuYSkrci5yKnIuYSxnOmEuZyooMS1yLmEpK3IuZypyLmEsYjphLmIqKDEtci5hKStyLmIqci5hfTtyZXR1cm4gbihvKS50b1JnYlN0cmluZygpfSxvLmNvbnRyYXN0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1uKHQpO3JldHVybiAxIT09aS5nZXRBbHBoYSgpJiYoaT1uKG8uY29tYmluZSh0LGMpKSksKGkuaXNEYXJrKCk/ZT9pLmxpZ2h0ZW4oZSk6YzpyP2kuZGFya2VuKHIpOmwpLnRvU3RyaW5nKCl9LG8uc3Ryb2tlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlKTt0LnN0eWxlKHtzdHJva2U6by50aW55UkdCKHIpLCJzdHJva2Utb3BhY2l0eSI6ci5nZXRBbHBoYSgpfSl9LG8uZmlsbD1mdW5jdGlvbih0LGUpe3ZhciByPW4oZSk7dC5zdHlsZSh7ZmlsbDpvLnRpbnlSR0IociksImZpbGwtb3BhY2l0eSI6ci5nZXRBbHBoYSgpfSl9LG8uY2xlYW49ZnVuY3Rpb24odCl7aWYodCYmIm9iamVjdCI9PXR5cGVvZiB0KXt2YXIgZSxyLG4saSxzPU9iamVjdC5rZXlzKHQpO2ZvcihlPTA7ZTxzLmxlbmd0aDtlKyspaWYoaT10W249c1tlXV0sImNvbG9yIj09PW4uc3Vic3RyKG4ubGVuZ3RoLTUpKWlmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdPXUoaVtyXSk7ZWxzZSB0W25dPXUoaSk7ZWxzZSBpZigiY29sb3JzY2FsZSI9PT1uLnN1YnN0cihuLmxlbmd0aC0xMCkmJkFycmF5LmlzQXJyYXkoaSkpZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylBcnJheS5pc0FycmF5KGlbcl0pJiYoaVtyXVsxXT11KGlbcl1bMV0pKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoaSkpe3ZhciBsPWlbMF07aWYoIUFycmF5LmlzQXJyYXkobCkmJmwmJiJvYmplY3QiPT10eXBlb2YgbClmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW8uY2xlYW4oaVtyXSl9ZWxzZSBpJiYib2JqZWN0Ij09dHlwZW9mIGkmJiFhKGkpJiZvLmNsZWFuKGkpfX19LHsiLi4vLi4vbGliL2FycmF5Ijo3NTgsIi4vYXR0cmlidXRlcyI6NjM4LCJmYXN0LWlzbnVtZXJpYyI6MjQyLHRpbnljb2xvcjI6NTcyfV0sNjQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9byh7dGhpY2tuZXNzbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJwaXhlbHMifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDozMH0sbGVubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJmcmFjdGlvbiJ9LGxlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLjAyLG1pbjotMixtYXg6M30seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LHhwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMH0seTp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi41LG1pbjotMixtYXg6M30seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoibWlkZGxlIn0seXBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwfSxvdXRsaW5lY29sb3I6bi5saW5lY29sb3Isb3V0bGluZXdpZHRoOm4ubGluZXdpZHRoLGJvcmRlcmNvbG9yOm4ubGluZWNvbG9yLGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MH0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkifSx0aWNrbW9kZTpuLnRpY2ttb2RlLG50aWNrczpuLm50aWNrcyx0aWNrMDpuLnRpY2swLGR0aWNrOm4uZHRpY2ssdGlja3ZhbHM6bi50aWNrdmFscyx0aWNrdGV4dDpuLnRpY2t0ZXh0LHRpY2tzOmEoe30sbi50aWNrcyx7ZGZsdDoiIn0pLHRpY2tsYWJlbG92ZXJmbG93OmEoe30sbi50aWNrbGFiZWxvdmVyZmxvdyx7fSksdGlja2xhYmVscG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm91dHNpZGUiLCJpbnNpZGUiLCJvdXRzaWRlIHRvcCIsImluc2lkZSB0b3AiLCJvdXRzaWRlIGJvdHRvbSIsImluc2lkZSBib3R0b20iXSxkZmx0OiJvdXRzaWRlIn0sdGlja2xlbjpuLnRpY2tsZW4sdGlja3dpZHRoOm4udGlja3dpZHRoLHRpY2tjb2xvcjpuLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczpuLnNob3d0aWNrbGFiZWxzLHRpY2tmb250Omkoe30pLHRpY2thbmdsZTpuLnRpY2thbmdsZSx0aWNrZm9ybWF0Om4udGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6bi50aWNrZm9ybWF0c3RvcHMsdGlja3ByZWZpeDpuLnRpY2twcmVmaXgsc2hvd3RpY2twcmVmaXg6bi5zaG93dGlja3ByZWZpeCx0aWNrc3VmZml4Om4udGlja3N1ZmZpeCxzaG93dGlja3N1ZmZpeDpuLnNob3d0aWNrc3VmZml4LHNlcGFyYXRldGhvdXNhbmRzOm4uc2VwYXJhdGV0aG91c2FuZHMsZXhwb25lbnRmb3JtYXQ6bi5leHBvbmVudGZvcm1hdCxtaW5leHBvbmVudDpuLm1pbmV4cG9uZW50LHNob3dleHBvbmVudDpuLnNob3dleHBvbmVudCx0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIn0sZm9udDppKHt9KSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyaWdodCIsInRvcCIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9fSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6InN0cmluZyJ9LHRpdGxlZm9udDppKHt9KSx0aXRsZXNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJpZ2h0IiwidG9wIiwiYm90dG9tIl0sZGZsdDoidG9wIn19fSwiY29sb3JiYXJzIiwiZnJvbS1yb290Iil9LHsiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MDksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6ODQyLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjg1Nn1dLDY0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2NuOntjb2xvcmJhcjoiY29sb3JiYXIiLGNiYmc6ImNiYmciLGNiZmlsbDoiY2JmaWxsIixjYmZpbGxzOiJjYmZpbGxzIixjYmxpbmU6ImNibGluZSIsY2JsaW5lczoiY2JsaW5lcyIsY2JheGlzOiJjYmF4aXMiLGNidGl0bGV1bnNoaWZ0OiJjYnRpdGxldW5zaGlmdCIsY2J0aXRsZToiY2J0aXRsZSIsY2JvdXRsaW5lOiJjYm91dGxpbmUiLGNyaXNwOiJjcmlzcCIsanNQbGFjZWhvbGRlcjoianMtcGxhY2Vob2xkZXIifX19LHt9XSw2NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxsPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGM9aS5uZXdDb250YWluZXIoZSwiY29sb3JiYXIiKSx1PXQuY29sb3JiYXJ8fHt9O2Z1bmN0aW9uIGYodCxlKXtyZXR1cm4gbi5jb2VyY2UodSxjLGwsdCxlKX12YXIgaD1mKCJ0aGlja25lc3Ntb2RlIik7ZigidGhpY2tuZXNzIiwiZnJhY3Rpb24iPT09aD8zMC8oci53aWR0aC1yLm1hcmdpbi5sLXIubWFyZ2luLnIpOjMwKTt2YXIgcD1mKCJsZW5tb2RlIik7ZigibGVuIiwiZnJhY3Rpb24iPT09cD8xOnIuaGVpZ2h0LXIubWFyZ2luLnQtci5tYXJnaW4uYiksZigieCIpLGYoInhhbmNob3IiKSxmKCJ4cGFkIiksZigieSIpLGYoInlhbmNob3IiKSxmKCJ5cGFkIiksbi5ub25lT3JBbGwodSxjLFsieCIsInkiXSksZigib3V0bGluZWNvbG9yIiksZigib3V0bGluZXdpZHRoIiksZigiYm9yZGVyY29sb3IiKSxmKCJib3JkZXJ3aWR0aCIpLGYoImJnY29sb3IiKTt2YXIgZD1mKCJ0aWNrbGFiZWxwb3NpdGlvbiIpO2YoInRpY2tsYWJlbG92ZXJmbG93IiwtMSE9PWQuaW5kZXhPZigiaW5zaWRlIik/ImhpZGUgcGFzdCBkb21haW4iOiJoaWRlIHBhc3QgZGl2IiksYSh1LGMsZiwibGluZWFyIik7dmFyIG09ci5mb250LGc9e291dGVyVGlja3M6ITEsZm9udDptfTstMSE9PWQuaW5kZXhPZigiaW5zaWRlIikmJihnLmJnQ29sb3I9ImJsYWNrIikscyh1LGMsZiwibGluZWFyIixnKSxvKHUsYyxmLCJsaW5lYXIiLGcpLGYoInRpdGxlLnRleHQiLHIuX2RmbHRUaXRsZS5jb2xvcmJhcik7dmFyIHY9Yy50aWNrZm9udCx5PW4uZXh0ZW5kRmxhdCh7fSx2LHtjb2xvcjptLmNvbG9yLHNpemU6bi5iaWdGb250KHYuc2l6ZSl9KTtuLmNvZXJjZUZvbnQoZiwidGl0bGUuZm9udCIseSksZigidGl0bGUuc2lkZSIpfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyI6ODQ5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIjo4NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo4NTEsIi4vYXR0cmlidXRlcyI6NjQwfV0sNjQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoInRpbnljb2xvcjIiKSxhPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxsPXQoIi4uL2RyYWdlbGVtZW50IiksYz10KCIuLi8uLi9saWIiKSx1PWMuc3RyVHJhbnNsYXRlLGY9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaD10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIikscD10KCIuLi9kcmF3aW5nIiksZD10KCIuLi9jb2xvciIpLG09dCgiLi4vdGl0bGVzIiksZz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSx2PXQoIi4uL2NvbG9yc2NhbGUvaGVscGVycyIpLmZsaXBTY2FsZSx5PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIikseD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcG9zaXRpb25fZGVmYXVsdHMiKSxiPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLF89dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLHc9Xy5MSU5FX1NQQUNJTkcsVD1fLkZST01fVEwsaz1fLkZST01fQlIsQT10KCIuL2NvbnN0YW50cyIpLmNuO2UuZXhwb3J0cz17ZHJhdzpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCJnLiIrQS5jb2xvcmJhcikuZGF0YShmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPXQuX2Z1bGxMYXlvdXQsbz10LmNhbGNkYXRhLHM9W107ZnVuY3Rpb24gbCh0KXtyZXR1cm4gZih0LHtfZmlsbGNvbG9yOm51bGwsX2xpbmU6e2NvbG9yOm51bGwsd2lkdGg6bnVsbCxkYXNoOm51bGx9LF9sZXZlbHM6e3N0YXJ0Om51bGwsZW5kOm51bGwsc2l6ZTpudWxsfSxfZmlsbGxldmVsczpudWxsLF9maWxsZ3JhZGllbnQ6bnVsbCxfenJhbmdlOm51bGx9KX1mdW5jdGlvbiBjKCl7ImZ1bmN0aW9uIj09dHlwZW9mIGkuY2FsYz9pLmNhbGModCxuLGUpOihlLl9maWxsZ3JhZGllbnQ9ci5yZXZlcnNlc2NhbGU/dihyLmNvbG9yc2NhbGUpOnIuY29sb3JzY2FsZSxlLl96cmFuZ2U9W3JbaS5taW5dLHJbaS5tYXhdXSl9Zm9yKHZhciB1PTA7dTxvLmxlbmd0aDt1Kyspe3ZhciBoPW9bdV0scD0obj1oWzBdLnRyYWNlKS5fbW9kdWxlLmNvbG9yYmFyO2lmKCEwPT09bi52aXNpYmxlJiZwKWZvcih2YXIgZD1BcnJheS5pc0FycmF5KHApLG09ZD9wOltwXSxnPTA7ZzxtLmxlbmd0aDtnKyspe3ZhciB5PShpPW1bZ10pLmNvbnRhaW5lcjsocj15P25beV06bikmJnIuc2hvd3NjYWxlJiYoKGU9bChyLmNvbG9yYmFyKSkuX2lkPSJjYiIrbi51aWQrKGQmJnk/Ii0iK3k6IiIpLGUuX3RyYWNlSW5kZXg9bi5pbmRleCxlLl9wcm9wUHJlZml4PSh5P3krIi4iOiIiKSsiY29sb3JiYXIuIixlLl9tZXRhPW4uX21ldGEsYygpLHMucHVzaChlKSl9fWZvcih2YXIgeCBpbiBhLl9jb2xvckF4ZXMpaWYoKHI9YVt4XSkuc2hvd3NjYWxlKXt2YXIgYj1hLl9jb2xvckF4ZXNbeF07KGU9bChyLmNvbG9yYmFyKSkuX2lkPSJjYiIreCxlLl9wcm9wUHJlZml4PXgrIi5jb2xvcmJhci4iLGUuX21ldGE9YS5fbWV0YSxpPXttaW46ImNtaW4iLG1heDoiY21heCJ9LCJoZWF0bWFwIiE9PWJbMF0mJihuPWJbMV0saS5jYWxjPW4uX21vZHVsZS5jb2xvcmJhci5jYWxjKSxjKCkscy5wdXNoKGUpfXJldHVybiBzfSh0KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2lkfSkpO2UuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9pZH0pKS5jbGFzc2VkKEEuY29sb3JiYXIsITApLGUuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyk7Yy5lbnN1cmVTaW5nbGUociwicmVjdCIsQS5jYmJnKSxjLmVuc3VyZVNpbmdsZShyLCJnIixBLmNiZmlsbHMpLGMuZW5zdXJlU2luZ2xlKHIsImciLEEuY2JsaW5lcyksYy5lbnN1cmVTaW5nbGUociwiZyIsQS5jYmF4aXMsKGZ1bmN0aW9uKHQpe3QuY2xhc3NlZChBLmNyaXNwLCEwKX0pKSxjLmVuc3VyZVNpbmdsZShyLCJnIixBLmNidGl0bGV1bnNoaWZ0LChmdW5jdGlvbih0KXt0LmFwcGVuZCgiZyIpLmNsYXNzZWQoQS5jYnRpdGxlLCEwKX0pKSxjLmVuc3VyZVNpbmdsZShyLCJyZWN0IixBLmNib3V0bGluZSk7dmFyIHY9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPXIuX2Z1bGxMYXlvdXQsbD1vLl9zaXplLGg9ZS5fZmlsbGNvbG9yLHY9ZS5fbGluZSxfPWUudGl0bGUsTT1fLnNpZGUsUz1lLl96cmFuZ2V8fG4uZXh0ZW50KCgiZnVuY3Rpb24iPT10eXBlb2YgaD9oOnYuY29sb3IpLmRvbWFpbigpKSxFPSJmdW5jdGlvbiI9PXR5cGVvZiB2LmNvbG9yP3YuY29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdi5jb2xvcn0sTD0iZnVuY3Rpb24iPT10eXBlb2YgaD9oOmZ1bmN0aW9uKCl7cmV0dXJuIGh9LEM9ZS5fbGV2ZWxzLFA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1lLl9sZXZlbHMsbz1bXSxzPVtdLGw9YS5lbmQrYS5zaXplLzEwMCxjPWEuc2l6ZSx1PTEuMDAxKnJbMF0tLjAwMSpyWzFdLGY9MS4wMDEqclsxXS0uMDAxKnJbMF07Zm9yKGk9MDtpPDFlNSYmKG49YS5zdGFydCtpKmMsIShjPjA/bj49bDpuPD1sKSk7aSsrKW4+dSYmbjxmJiZvLnB1c2gobik7aWYoZS5fZmlsbGdyYWRpZW50KXM9WzBdO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGUuX2ZpbGxjb2xvcil7dmFyIGg9ZS5fZmlsbGxldmVscztpZihoKWZvcihsPWguZW5kK2guc2l6ZS8xMDAsYz1oLnNpemUsaT0wO2k8MWU1JiYobj1oLnN0YXJ0K2kqYywhKGM+MD9uPj1sOm48PWwpKTtpKyspbj5yWzBdJiZuPHJbMV0mJnMucHVzaChuKTtlbHNlKHM9by5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LWEuc2l6ZS8yfSkpKS5wdXNoKHNbcy5sZW5ndGgtMV0rYS5zaXplKX1lbHNlIGUuX2ZpbGxjb2xvciYmInN0cmluZyI9PXR5cGVvZiBlLl9maWxsY29sb3ImJihzPVswXSk7YS5zaXplPDAmJihvLnJldmVyc2UoKSxzLnJldmVyc2UoKSk7cmV0dXJue2xpbmU6byxmaWxsOnN9fSgwLGUsUyksST1QLmZpbGwsTz1QLmxpbmUsej1NYXRoLnJvdW5kKGUudGhpY2tuZXNzKigiZnJhY3Rpb24iPT09ZS50aGlja25lc3Ntb2RlP2wudzoxKSksRD16L2wudyxSPU1hdGgucm91bmQoZS5sZW4qKCJmcmFjdGlvbiI9PT1lLmxlbm1vZGU/bC5oOjEpKSxGPVIvbC5oLEI9ZS54cGFkL2wudyxOPShlLmJvcmRlcndpZHRoK2Uub3V0bGluZXdpZHRoKS8yLGo9ZS55cGFkL2wuaCxVPU1hdGgucm91bmQoZS54KmwudytlLnhwYWQpLFY9ZS54LUQqKHttaWRkbGU6LjUscmlnaHQ6MX1bZS54YW5jaG9yXXx8MCksSD1lLnkrRiooKHt0b3A6LS41LGJvdHRvbTouNX1bZS55YW5jaG9yXXx8MCktLjUpLHE9TWF0aC5yb3VuZChsLmgqKDEtSCkpLEc9cS1SO2UuX2xlbkZyYWM9RixlLl90aGlja0ZyYWM9RCxlLl94TGVmdEZyYWM9VixlLl95Qm90dG9tRnJhYz1IO3ZhciBZPWUuX2F4aXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQsaT17dHlwZToibGluZWFyIixyYW5nZTpyLHRpY2ttb2RlOmUudGlja21vZGUsbnRpY2tzOmUubnRpY2tzLHRpY2swOmUudGljazAsZHRpY2s6ZS5kdGljayx0aWNrdmFsczplLnRpY2t2YWxzLHRpY2t0ZXh0OmUudGlja3RleHQsdGlja3M6ZS50aWNrcyx0aWNrbGVuOmUudGlja2xlbix0aWNrd2lkdGg6ZS50aWNrd2lkdGgsdGlja2NvbG9yOmUudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmUuc2hvd3RpY2tsYWJlbHMsdGlja2xhYmVscG9zaXRpb246ZS50aWNrbGFiZWxwb3NpdGlvbix0aWNrbGFiZWxvdmVyZmxvdzplLnRpY2tsYWJlbG92ZXJmbG93LHRpY2tmb250OmUudGlja2ZvbnQsdGlja2FuZ2xlOmUudGlja2FuZ2xlLHRpY2tmb3JtYXQ6ZS50aWNrZm9ybWF0LGV4cG9uZW50Zm9ybWF0OmUuZXhwb25lbnRmb3JtYXQsbWluZXhwb25lbnQ6ZS5taW5leHBvbmVudCxzZXBhcmF0ZXRob3VzYW5kczplLnNlcGFyYXRldGhvdXNhbmRzLHNob3dleHBvbmVudDplLnNob3dleHBvbmVudCxzaG93dGlja3ByZWZpeDplLnNob3d0aWNrcHJlZml4LHRpY2twcmVmaXg6ZS50aWNrcHJlZml4LHNob3d0aWNrc3VmZml4OmUuc2hvd3RpY2tzdWZmaXgsdGlja3N1ZmZpeDplLnRpY2tzdWZmaXgsdGl0bGU6ZS50aXRsZSxzaG93bGluZTohMCxhbmNob3I6ImZyZWUiLHNpZGU6InJpZ2h0Iixwb3NpdGlvbjoxfSxhPXt0eXBlOiJsaW5lYXIiLF9pZDoieSIrZS5faWR9LG89e2xldHRlcjoieSIsZm9udDpuLmZvbnQsbm9Ib3ZlcjohMCxub1RpY2tzb246ITAsbm9UaWNrbGFiZWxtb2RlOiEwLGNhbGVuZGFyOm4uY2FsZW5kYXJ9O2Z1bmN0aW9uIHModCxlKXtyZXR1cm4gYy5jb2VyY2UoaSxhLGIsdCxlKX1yZXR1cm4geShpLGEscyxvLG4pLHgoaSxhLHMsbyksYX0ocixlLFMpO1kucG9zaXRpb249ZS54K0IrRCwtMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihNKSYmKFkudGl0bGUuc2lkZT1NLFkudGl0bGV4PWUueCtCLFkudGl0bGV5PUgrKCJ0b3AiPT09Xy5zaWRlP0YtajpqKSk7aWYodi5jb2xvciYmImF1dG8iPT09ZS50aWNrbW9kZSl7WS50aWNrbW9kZT0ibGluZWFyIixZLnRpY2swPUMuc3RhcnQ7dmFyIFc9Qy5zaXplLFg9Yy5jb25zdHJhaW4oKHEtRykvNTAsNCwxNSkrMSxaPShTWzFdLVNbMF0pLygoZS5udGlja3N8fFgpKlcpO2lmKFo+MSl7dmFyIEo9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhaKS9NYXRoLkxOMTApKTtXKj1KKmMucm91bmRVcChaL0osWzIsNSwxMF0pLChNYXRoLmFicyhDLnN0YXJ0KS9DLnNpemUrMWUtNiklMTwyZS02JiYoWS50aWNrMD0wKX1ZLmR0aWNrPVd9WS5kb21haW49W0graixIK0Ytal0sWS5zZXRTY2FsZSgpLHQuYXR0cigidHJhbnNmb3JtIix1KE1hdGgucm91bmQobC5sKSxNYXRoLnJvdW5kKGwudCkpKTt2YXIgSyxRPXQuc2VsZWN0KCIuIitBLmNidGl0bGV1bnNoaWZ0KS5hdHRyKCJ0cmFuc2Zvcm0iLHUoLU1hdGgucm91bmQobC5sKSwtTWF0aC5yb3VuZChsLnQpKSksJD10LnNlbGVjdCgiLiIrQS5jYmF4aXMpLHR0PTA7ZnVuY3Rpb24gZXQobixpKXt2YXIgYT17cHJvcENvbnRhaW5lcjpZLHByb3BOYW1lOmUuX3Byb3BQcmVmaXgrInRpdGxlIix0cmFjZUluZGV4OmUuX3RyYWNlSW5kZXgsX21ldGE6ZS5fbWV0YSxwbGFjZWhvbGRlcjpvLl9kZmx0VGl0bGUuY29sb3JiYXIsY29udGFpbmVyR3JvdXA6dC5zZWxlY3QoIi4iK0EuY2J0aXRsZSl9LHM9ImgiPT09bi5jaGFyQXQoMCk/bi5zdWJzdHIoMSk6ImgiK247dC5zZWxlY3RBbGwoIi4iK3MrIiwuIitzKyItbWF0aC1ncm91cCIpLnJlbW92ZSgpLG0uZHJhdyhyLG4sZihhLGl8fHt9KSl9cmV0dXJuIGMuc3luY09yQXN5bmMoW2EucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe2lmKC0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKE0pKXt2YXIgdCxyPWwubCsoZS54K0IpKmwudyxuPVkudGl0bGUuZm9udC5zaXplO3Q9InRvcCI9PT1NPygxLShIK0YtaikpKmwuaCtsLnQrMysuNzUqbjooMS0oSCtqKSkqbC5oK2wudC0zLS4yNSpuLGV0KFkuX2lkKyJ0aXRsZSIse2F0dHJpYnV0ZXM6e3g6cix5OnQsInRleHQtYW5jaG9yIjoic3RhcnQifX0pfX0sZnVuY3Rpb24oKXtpZigtMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihNKSl7dmFyIGE9dC5zZWxlY3QoIi4iK0EuY2J0aXRsZSksbz1hLnNlbGVjdCgidGV4dCIpLGY9Wy1lLm91dGxpbmV3aWR0aC8yLGUub3V0bGluZXdpZHRoLzJdLGg9YS5zZWxlY3QoIi5oIitZLl9pZCsidGl0bGUtbWF0aC1ncm91cCIpLm5vZGUoKSxkPTE1LjY7aWYoby5ub2RlKCkmJihkPXBhcnNlSW50KG8ubm9kZSgpLnN0eWxlLmZvbnRTaXplLDEwKSp3KSxoPyh0dD1wLmJCb3goaCkuaGVpZ2h0KT5kJiYoZlsxXS09KHR0LWQpLzIpOm8ubm9kZSgpJiYhby5jbGFzc2VkKEEuanNQbGFjZWhvbGRlcikmJih0dD1wLmJCb3goby5ub2RlKCkpLmhlaWdodCksdHQpe2lmKHR0Kz01LCJ0b3AiPT09TSlZLmRvbWFpblsxXS09dHQvbC5oLGZbMV0qPS0xO2Vsc2V7WS5kb21haW5bMF0rPXR0L2wuaDt2YXIgbT1nLmxpbmVDb3VudChvKTtmWzFdKz0oMS1tKSpkfWEuYXR0cigidHJhbnNmb3JtIix1KGZbMF0sZlsxXSkpLFkuc2V0U2NhbGUoKX19dC5zZWxlY3RBbGwoIi4iK0EuY2JmaWxscysiLC4iK0EuY2JsaW5lcykuYXR0cigidHJhbnNmb3JtIix1KDAsTWF0aC5yb3VuZChsLmgqKDEtWS5kb21haW5bMV0pKSkpLCQuYXR0cigidHJhbnNmb3JtIix1KDAsTWF0aC5yb3VuZCgtbC50KSkpO3ZhciB5PXQuc2VsZWN0KCIuIitBLmNiZmlsbHMpLnNlbGVjdEFsbCgicmVjdC4iK0EuY2JmaWxsKS5hdHRyKCJzdHlsZSIsIiIpLmRhdGEoSSk7eS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoQS5jYmZpbGwsITApLnN0eWxlKCJzdHJva2UiLCJub25lIikseS5leGl0KCkucmVtb3ZlKCk7dmFyIHg9Uy5tYXAoWS5jMnApLm1hcChNYXRoLnJvdW5kKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSk7eS5lYWNoKChmdW5jdGlvbih0LGEpe3ZhciBvPVswPT09YT9TWzBdOihJW2FdK0lbYS0xXSkvMixhPT09SS5sZW5ndGgtMT9TWzFdOihJW2FdK0lbYSsxXSkvMl0ubWFwKFkuYzJwKS5tYXAoTWF0aC5yb3VuZCk7b1sxXT1jLmNvbnN0cmFpbihvWzFdKyhvWzFdPm9bMF0pPzE6LTEseFswXSx4WzFdKTt2YXIgcz1uLnNlbGVjdCh0aGlzKS5hdHRyKHt4OlUsd2lkdGg6TWF0aC5tYXgoeiwyKSx5Om4ubWluKG8pLGhlaWdodDpNYXRoLm1heChuLm1heChvKS1uLm1pbihvKSwyKX0pO2lmKGUuX2ZpbGxncmFkaWVudClwLmdyYWRpZW50KHMscixlLl9pZCwidmVydGljYWwiLGUuX2ZpbGxncmFkaWVudCwiZmlsbCIpO2Vsc2V7dmFyIGw9TCh0KS5yZXBsYWNlKCJlLSIsIiIpO3MuYXR0cigiZmlsbCIsaShsKS50b0hleFN0cmluZygpKX19KSk7dmFyIGI9dC5zZWxlY3QoIi4iK0EuY2JsaW5lcykuc2VsZWN0QWxsKCJwYXRoLiIrQS5jYmxpbmUpLmRhdGEodi5jb2xvciYmdi53aWR0aD9POltdKTtiLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChBLmNibGluZSwhMCksYi5leGl0KCkucmVtb3ZlKCksYi5lYWNoKChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIrVSsiLCIrKE1hdGgucm91bmQoWS5jMnAodCkpK3Yud2lkdGgvMiUxKSsiaCIreikuY2FsbChwLmxpbmVHcm91cFN0eWxlLHYud2lkdGgsRSh0KSx2LmRhc2gpfSkpLCQuc2VsZWN0QWxsKCJnLiIrWS5faWQrInRpY2sscGF0aCIpLnJlbW92ZSgpO3ZhciBfPVUreisoZS5vdXRsaW5ld2lkdGh8fDApLzItKCJvdXRzaWRlIj09PWUudGlja3M/MTowKSxUPXMuY2FsY1RpY2tzKFkpLGs9cy5nZXRUaWNrU2lnbnMoWSlbMl07cmV0dXJuIHMuZHJhd1RpY2tzKHIsWSx7dmFsczoiaW5zaWRlIj09PVkudGlja3M/cy5jbGlwRW5kcyhZLFQpOlQsbGF5ZXI6JCxwYXRoOnMubWFrZVRpY2tQYXRoKFksXyxrKSx0cmFuc0ZuOnMubWFrZVRyYW5zVGlja0ZuKFkpfSkscy5kcmF3TGFiZWxzKHIsWSx7dmFsczpULGxheWVyOiQsdHJhbnNGbjpzLm1ha2VUcmFuc1RpY2tMYWJlbEZuKFkpLGxhYmVsRm5zOnMubWFrZUxhYmVsRm5zKFksXyl9KX0sZnVuY3Rpb24oKXtpZigtMT09PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihNKSl7dmFyIHQ9WS50aXRsZS5mb250LnNpemUsZT1ZLl9vZmZzZXQrWS5fbGVuZ3RoLzIsaT1sLmwrKFkucG9zaXRpb258fDApKmwudysoInJpZ2h0Ij09PVkuc2lkZT8xMCt0KihZLnNob3d0aWNrbGFiZWxzPzE6LjUpOi0xMC10KihZLnNob3d0aWNrbGFiZWxzPy41OjApKTtldCgiaCIrWS5faWQrInRpdGxlIix7YXZvaWQ6e3NlbGVjdGlvbjpuLnNlbGVjdChyKS5zZWxlY3RBbGwoImcuIitZLl9pZCsidGljayIpLHNpZGU6TSxvZmZzZXRMZWZ0OmwubCxvZmZzZXRUb3A6MCxtYXhTaGlmdDpvLndpZHRofSxhdHRyaWJ1dGVzOnt4OmkseTplLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9LHRyYW5zZm9ybTp7cm90YXRlOiItOTAiLG9mZnNldDowfX0pfX0sYS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7dmFyIG49eitlLm91dGxpbmV3aWR0aC8yO2lmKC0xPT09WS50aWNrbGFiZWxwb3NpdGlvbi5pbmRleE9mKCJpbnNpZGUiKSYmKG4rPXAuYkJveCgkLm5vZGUoKSkud2lkdGgpLChLPVEuc2VsZWN0KCJ0ZXh0IikpLm5vZGUoKSYmIUsuY2xhc3NlZChBLmpzUGxhY2Vob2xkZXIpKXt2YXIgaSxvPVEuc2VsZWN0KCIuaCIrWS5faWQrInRpdGxlLW1hdGgtZ3JvdXAiKS5ub2RlKCk7aT1vJiYtMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihNKT9wLmJCb3gobykud2lkdGg6cC5iQm94KFEubm9kZSgpKS5yaWdodC1VLWwubCxuPU1hdGgubWF4KG4saSl9dmFyIHM9MiplLnhwYWQrbitlLmJvcmRlcndpZHRoK2Uub3V0bGluZXdpZHRoLzIsYz1xLUc7dC5zZWxlY3QoIi4iK0EuY2JiZykuYXR0cih7eDpVLWUueHBhZC0oZS5ib3JkZXJ3aWR0aCtlLm91dGxpbmV3aWR0aCkvMix5OkctTix3aWR0aDpNYXRoLm1heChzLDIpLGhlaWdodDpNYXRoLm1heChjKzIqTiwyKX0pLmNhbGwoZC5maWxsLGUuYmdjb2xvcikuY2FsbChkLnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKSx0LnNlbGVjdEFsbCgiLiIrQS5jYm91dGxpbmUpLmF0dHIoe3g6VSx5OkcrZS55cGFkKygidG9wIj09PU0/dHQ6MCksd2lkdGg6TWF0aC5tYXgoeiwyKSxoZWlnaHQ6TWF0aC5tYXgoYy0yKmUueXBhZC10dCwyKX0pLmNhbGwoZC5zdHJva2UsZS5vdXRsaW5lY29sb3IpLnN0eWxlKHtmaWxsOiJub25lIiwic3Ryb2tlLXdpZHRoIjplLm91dGxpbmV3aWR0aH0pO3ZhciBmPSh7Y2VudGVyOi41LHJpZ2h0OjF9W2UueGFuY2hvcl18fDApKnM7dC5hdHRyKCJ0cmFuc2Zvcm0iLHUobC5sLWYsbC50KSk7dmFyIGg9e30sbT1UW2UueWFuY2hvcl0sZz1rW2UueWFuY2hvcl07InBpeGVscyI9PT1lLmxlbm1vZGU/KGgueT1lLnksaC50PWMqbSxoLmI9YypnKTooaC50PWguYj0wLGgueXQ9ZS55K2UubGVuKm0saC55Yj1lLnktZS5sZW4qZyk7dmFyIHY9VFtlLnhhbmNob3JdLHk9a1tlLnhhbmNob3JdO2lmKCJwaXhlbHMiPT09ZS50aGlja25lc3Ntb2RlKWgueD1lLngsaC5sPXMqdixoLnI9cyp5O2Vsc2V7dmFyIHg9cy16O2gubD14KnYsaC5yPXgqeSxoLnhsPWUueC1lLnRoaWNrbmVzcyp2LGgueHI9ZS54K2UudGhpY2tuZXNzKnl9YS5hdXRvTWFyZ2luKHIsZS5faWQsaCl9XSxyKX0ocixlLHQpO3YmJnYudGhlbiYmKHQuX3Byb21pc2VzfHxbXSkucHVzaCh2KSx0Ll9jb250ZXh0LmVkaXRzLmNvbG9yYmFyUG9zaXRpb24mJmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEscz1yLl9mdWxsTGF5b3V0Ll9zaXplO2wuaW5pdCh7ZWxlbWVudDp0Lm5vZGUoKSxnZDpyLHByZXBGbjpmdW5jdGlvbigpe249dC5hdHRyKCJ0cmFuc2Zvcm0iKSxoKHQpfSxtb3ZlRm46ZnVuY3Rpb24ocixvKXt0LmF0dHIoInRyYW5zZm9ybSIsbit1KHIsbykpLGk9bC5hbGlnbihlLl94TGVmdEZyYWMrci9zLncsZS5fdGhpY2tGcmFjLDAsMSxlLnhhbmNob3IpLGE9bC5hbGlnbihlLl95Qm90dG9tRnJhYy1vL3MuaCxlLl9sZW5GcmFjLDAsMSxlLnlhbmNob3IpO3ZhciBjPWwuZ2V0Q3Vyc29yKGksYSxlLnhhbmNob3IsZS55YW5jaG9yKTtoKHQsYyl9LGRvbmVGbjpmdW5jdGlvbigpe2lmKGgodCksdm9pZCAwIT09aSYmdm9pZCAwIT09YSl7dmFyIG49e307bltlLl9wcm9wUHJlZml4KyJ4Il09aSxuW2UuX3Byb3BQcmVmaXgrInkiXT1hLHZvaWQgMCE9PWUuX3RyYWNlSW5kZXg/by5jYWxsKCJfZ3VpUmVzdHlsZSIscixuLGUuX3RyYWNlSW5kZXgpOm8uY2FsbCgiX2d1aVJlbGF5b3V0IixyLG4pfX19KX0ocixlLHQpfSkpLGUuZXhpdCgpLmVhY2goKGZ1bmN0aW9uKGUpe2EuYXV0b01hcmdpbih0LGUuX2lkKX0pKS5yZW1vdmUoKSxlLm9yZGVyKCl9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3NDQsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjc5NywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIjo4MjksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6ODQyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcG9zaXRpb25fZGVmYXVsdHMiOjg0NSwiLi4vLi4vcGxvdHMvcGxvdHMiOjg5MCwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vY29sb3IiOjYzOSwiLi4vY29sb3JzY2FsZS9oZWxwZXJzIjo2NTAsIi4uL2RyYWdlbGVtZW50Ijo2NTgsIi4uL2RyYXdpbmciOjY2MSwiLi4vdGl0bGVzIjo3MzcsIi4vY29uc3RhbnRzIjo2NDEsIkBwbG90bHkvZDMiOjU4LHRpbnljb2xvcjI6NTcyfV0sNjQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5pc1BsYWluT2JqZWN0KHQuY29sb3JiYXIpfX0seyIuLi8uLi9saWIiOjc3Nn1dLDY0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiY29sb3JiYXIiLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGRyYXc6dCgiLi9kcmF3IikuZHJhdyxoYXNDb2xvcmJhcjp0KCIuL2hhc19jb2xvcmJhciIpfX0seyIuL2F0dHJpYnV0ZXMiOjY0MCwiLi9kZWZhdWx0cyI6NjQyLCIuL2RyYXciOjY0MywiLi9oYXNfY29sb3JiYXIiOjY0NH1dLDY0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb2xvcmJhci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9saWIvcmVnZXgiKS5jb3VudGVyLGE9dCgiLi4vLi4vbGliL3NvcnRfb2JqZWN0X2tleXMiKSxvPXQoIi4vc2NhbGVzLmpzIikuc2NhbGVzO2Eobyk7ZnVuY3Rpb24gcyh0KXtyZXR1cm4iYCIrdCsiYCJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dD10fHwiIjt2YXIgcixhPShlPWV8fHt9KS5jTGV0dGVyfHwiYyIsbD0oIm9ubHlJZk51bWVyaWNhbCJpbiBlP2Uub25seUlmTnVtZXJpY2FsOkJvb2xlYW4odCksIm5vU2NhbGUiaW4gZT9lLm5vU2NhbGU6Im1hcmtlci5saW5lIj09PXQpLGM9InNob3dTY2FsZURmbHQiaW4gZT9lLnNob3dTY2FsZURmbHQ6InoiPT09YSx1PSJzdHJpbmciPT10eXBlb2YgZS5jb2xvcnNjYWxlRGZsdD9vW2UuY29sb3JzY2FsZURmbHRdOm51bGwsZj1lLmVkaXRUeXBlT3ZlcnJpZGV8fCIiLGg9dD90KyIuIjoiIjsiY29sb3JBdHRyImluIGU/KHI9ZS5jb2xvckF0dHIsZS5jb2xvckF0dHIpOnMoaCsocj17ejoieiIsYzoiY29sb3IifVthXSkpO3ZhciBwPWErImF1dG8iLGQ9YSsibWluIixtPWErIm1heCIsZz1hKyJtaWQiLHY9KHMoaCtwKSxzKGgrZCkscyhoK20pLHt9KTt2W2RdPXZbbV09dm9pZCAwO3ZhciB5PXt9O3lbcF09ITE7dmFyIHg9e307cmV0dXJuImNvbG9yIj09PXImJih4LmNvbG9yPXt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxlZGl0VHlwZTpmfHwic3R5bGUifSxlLmFuaW0mJih4LmNvbG9yLmFuaW09ITApKSx4W3BdPXt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6dn0seFtkXT17dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6Znx8InBsb3QiLGltcGxpZWRFZGl0czp5fSx4W21dPXt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZTpmfHwicGxvdCIsaW1wbGllZEVkaXRzOnl9LHhbZ109e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6dn0seC5jb2xvcnNjYWxlPXt2YWxUeXBlOiJjb2xvcnNjYWxlIixlZGl0VHlwZToiY2FsYyIsZGZsdDp1LGltcGxpZWRFZGl0czp7YXV0b2NvbG9yc2NhbGU6ITF9fSx4LmF1dG9jb2xvcnNjYWxlPXt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExIT09ZS5hdXRvQ29sb3JEZmx0LGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6e2NvbG9yc2NhbGU6dm9pZCAwfX0seC5yZXZlcnNlc2NhbGU9e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSxsfHwoeC5zaG93c2NhbGU9e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6YyxlZGl0VHlwZToiY2FsYyJ9LHguY29sb3JiYXI9biksZS5ub0NvbG9yQXhpc3x8KHguY29sb3JheGlzPXt2YWxUeXBlOiJzdWJwbG90aWQiLHJlZ2V4OmkoImNvbG9yYXhpcyIpLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyJ9KSx4fX0seyIuLi8uLi9saWIvcmVnZXgiOjc5MywiLi4vLi4vbGliL3NvcnRfb2JqZWN0X2tleXMiOjc5OSwiLi4vY29sb3JiYXIvYXR0cmlidXRlcyI6NjQwLCIuL3NjYWxlcy5qcyI6NjU0fV0sNjQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4vaGVscGVycyIpLmV4dHJhY3RPcHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG8scz10Ll9mdWxsTGF5b3V0LGw9ci52YWxzLGM9ci5jb250YWluZXJTdHIsdT1jP2kubmVzdGVkUHJvcGVydHkoZSxjKS5nZXQoKTplLGY9YSh1KSxoPSExIT09Zi5hdXRvLHA9Zi5taW4sZD1mLm1heCxtPWYubWlkLGc9ZnVuY3Rpb24oKXtyZXR1cm4gaS5hZ2dOdW1zKE1hdGgubWluLG51bGwsbCl9LHY9ZnVuY3Rpb24oKXtyZXR1cm4gaS5hZ2dOdW1zKE1hdGgubWF4LG51bGwsbCl9Oyh2b2lkIDA9PT1wP3A9ZygpOmgmJihwPXUuX2NvbG9yQXgmJm4ocCk/TWF0aC5taW4ocCxnKCkpOmcoKSksdm9pZCAwPT09ZD9kPXYoKTpoJiYoZD11Ll9jb2xvckF4JiZuKGQpP01hdGgubWF4KGQsdigpKTp2KCkpLGgmJnZvaWQgMCE9PW0mJihkLW0+bS1wP3A9bS0oZC1tKTpkLW08bS1wJiYoZD1tKyhtLXApKSkscD09PWQmJihwLT0uNSxkKz0uNSksZi5fc3luYygibWluIixwKSxmLl9zeW5jKCJtYXgiLGQpLGYuYXV0b2NvbG9yc2NhbGUpJiYobz1wKmQ8MD9zLmNvbG9yc2NhbGUuZGl2ZXJnaW5nOnA+PTA/cy5jb2xvcnNjYWxlLnNlcXVlbnRpYWw6cy5jb2xvcnNjYWxlLnNlcXVlbnRpYWxtaW51cyxmLl9zeW5jKCJjb2xvcnNjYWxlIixvKSl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2hlbHBlcnMiOjY1MCwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDY0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuL2hlbHBlcnMiKS5leHRyYWN0T3B0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSl7dmFyIHI9dFsiXyIrZV07dm9pZCAwIT09ciYmKHRbZV09cil9ZnVuY3Rpb24gbyh0LGkpe3ZhciBvPWkuY29udGFpbmVyP24ubmVzdGVkUHJvcGVydHkodCxpLmNvbnRhaW5lcikuZ2V0KCk6dDtpZihvKWlmKG8uY29sb3JheGlzKW8uX2NvbG9yQXg9ZVtvLmNvbG9yYXhpc107ZWxzZXt2YXIgcz1hKG8pLGw9cy5hdXRvOyhsfHx2b2lkIDA9PT1zLm1pbikmJnIobyxpLm1pbiksKGx8fHZvaWQgMD09PXMubWF4KSYmcihvLGkubWF4KSxzLmF1dG9jb2xvcnNjYWxlJiZyKG8sImNvbG9yc2NhbGUiKX19Zm9yKHZhciBzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc10sYz1sLl9tb2R1bGUuY29sb3JiYXI7aWYoYylpZihBcnJheS5pc0FycmF5KGMpKWZvcih2YXIgdT0wO3U8Yy5sZW5ndGg7dSsrKW8obCxjW3VdKTtlbHNlIG8obCxjKTtpKGwsIm1hcmtlci5saW5lIikmJm8obCx7Y29udGFpbmVyOiJtYXJrZXIubGluZSIsbWluOiJjbWluIixtYXg6ImNtYXgifSl9Zm9yKHZhciBmIGluIGUuX2NvbG9yQXhlcylvKGVbZl0se21pbjoiY21pbiIsbWF4OiJjbWF4In0pfX0seyIuLi8uLi9saWIiOjc3NiwiLi9oZWxwZXJzIjo2NTB9XSw2NDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vY29sb3JiYXIvaGFzX2NvbG9yYmFyIiksbz10KCIuLi9jb2xvcmJhci9kZWZhdWx0cyIpLHM9dCgiLi9zY2FsZXMiKS5pc1ZhbGlkLGw9dCgiLi4vLi4vcmVnaXN0cnkiKS50cmFjZUlzO2Z1bmN0aW9uIGModCxlKXt2YXIgcj1lLnNsaWNlKDAsZS5sZW5ndGgtMSk7cmV0dXJuIGU/aS5uZXN0ZWRQcm9wZXJ0eSh0LHIpLmdldCgpfHx7fTp0fWUuZXhwb3J0cz1mdW5jdGlvbiB0KGUscix1LGYsaCl7dmFyIHA9aC5wcmVmaXgsZD1oLmNMZXR0ZXIsbT0iX21vZHVsZSJpbiByLGc9YyhlLHApLHY9YyhyLHApLHk9YyhyLl90ZW1wbGF0ZXx8e30scCl8fHt9LHg9ZnVuY3Rpb24oKXtyZXR1cm4gZGVsZXRlIGUuY29sb3JheGlzLGRlbGV0ZSByLmNvbG9yYXhpcyx0KGUscix1LGYsaCl9O2lmKG0pe3ZhciBiPXUuX2NvbG9yQXhlc3x8e30sXz1mKHArImNvbG9yYXhpcyIpO2lmKF8pe3ZhciB3PWwociwiY29udG91ciIpJiZpLm5lc3RlZFByb3BlcnR5KHIsImNvbnRvdXJzLmNvbG9yaW5nIikuZ2V0KCl8fCJoZWF0bWFwIixUPWJbX107cmV0dXJuIHZvaWQoVD8oVFsyXS5wdXNoKHgpLFRbMF0hPT13JiYoVFswXT0hMSxpLndhcm4oWyJJZ25vcmluZyBjb2xvcmF4aXM6IixfLCJzZXR0aW5nIiwiYXMgaXQgaXMgbGlua2VkIHRvIGluY29tcGF0aWJsZSBjb2xvcnNjYWxlcy4iXS5qb2luKCIgIikpKSk6YltfXT1bdyxyLFt4XV0pfX12YXIgaz1nW2QrIm1pbiJdLEE9Z1tkKyJtYXgiXSxNPW4oaykmJm4oQSkmJms8QTtmKHArZCsiYXV0byIsIU0pP2YocCtkKyJtaWQiKTooZihwK2QrIm1pbiIpLGYocCtkKyJtYXgiKSk7dmFyIFMsRSxMPWcuY29sb3JzY2FsZSxDPXkuY29sb3JzY2FsZTsodm9pZCAwIT09TCYmKFM9IXMoTCkpLHZvaWQgMCE9PUMmJihTPSFzKEMpKSxmKHArImF1dG9jb2xvcnNjYWxlIixTKSxmKHArImNvbG9yc2NhbGUiKSxmKHArInJldmVyc2VzY2FsZSIpLCJtYXJrZXIubGluZS4iIT09cCkmJihwJiZtJiYoRT1hKGcpKSxmKHArInNob3dzY2FsZSIsRSkmJihwJiZ5JiYodi5fdGVtcGxhdGU9eSksbyhnLHYsdSkpKX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL2NvbG9yYmFyL2RlZmF1bHRzIjo2NDIsIi4uL2NvbG9yYmFyL2hhc19jb2xvcmJhciI6NjQ0LCIuL3NjYWxlcyI6NjU0LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sNjUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoInRpbnljb2xvcjIiKSxhPXQoImZhc3QtaXNudW1lcmljIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uL2NvbG9yIiksbD10KCIuL3NjYWxlcyIpLmlzVmFsaWQ7dmFyIGM9WyJzaG93c2NhbGUiLCJhdXRvY29sb3JzY2FsZSIsImNvbG9yc2NhbGUiLCJyZXZlcnNlc2NhbGUiLCJjb2xvcmJhciJdLHU9WyJtaW4iLCJtYXgiLCJtaWQiLCJhdXRvIl07ZnVuY3Rpb24gZih0KXt2YXIgZSxyLG4saT10Ll9jb2xvckF4LGE9aXx8dCxvPXt9O2ZvcihyPTA7cjxjLmxlbmd0aDtyKyspb1tuPWNbcl1dPWFbbl07aWYoaSlmb3IoZT0iYyIscj0wO3I8dS5sZW5ndGg7cisrKW9bbj11W3JdXT1hWyJjIituXTtlbHNle3ZhciBzO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspKChzPSJjIisobj11W3JdKSlpbiBhfHwocz0ieiIrbilpbiBhKSYmKG9bbl09YVtzXSk7ZT1zLmNoYXJBdCgwKX1yZXR1cm4gby5fc3luYz1mdW5jdGlvbih0LHIpe3ZhciBuPS0xIT09dS5pbmRleE9mKHQpP2UrdDp0O2Fbbl09YVsiXyIrbl09cn0sb31mdW5jdGlvbiBoKHQpe2Zvcih2YXIgZT1mKHQpLHI9ZS5taW4sbj1lLm1heCxpPWUucmV2ZXJzZXNjYWxlP3AoZS5jb2xvcnNjYWxlKTplLmNvbG9yc2NhbGUsYT1pLmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPW5ldyBBcnJheShhKSxsPTA7bDxhO2wrKyl7dmFyIGM9aVtsXTtvW2xdPXIrY1swXSoobi1yKSxzW2xdPWNbMV19cmV0dXJue2RvbWFpbjpvLHJhbmdlOnN9fWZ1bmN0aW9uIHAodCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49ZS0xLGk9MDtuPj0wO24tLSxpKyspe3ZhciBhPXRbbl07cltpXT1bMS1hWzBdLGFbMV1dfXJldHVybiByfWZ1bmN0aW9uIGQodCxlKXtlPWV8fHt9O2Zvcih2YXIgcj10LmRvbWFpbixvPXQucmFuZ2UsbD1vLmxlbmd0aCxjPW5ldyBBcnJheShsKSx1PTA7dTxsO3UrKyl7dmFyIGY9aShvW3VdKS50b1JnYigpO2NbdV09W2YucixmLmcsZi5iLGYuYV19dmFyIGgscD1uLnNjYWxlLmxpbmVhcigpLmRvbWFpbihyKS5yYW5nZShjKS5jbGFtcCghMCksZD1lLm5vTnVtZXJpY0NoZWNrLGc9ZS5yZXR1cm5BcnJheTtyZXR1cm4oaD1kJiZnP3A6ZD9mdW5jdGlvbih0KXtyZXR1cm4gbShwKHQpKX06Zz9mdW5jdGlvbih0KXtyZXR1cm4gYSh0KT9wKHQpOmkodCkuaXNWYWxpZCgpP3Q6cy5kZWZhdWx0TGluZX06ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/bShwKHQpKTppKHQpLmlzVmFsaWQoKT90OnMuZGVmYXVsdExpbmV9KS5kb21haW49cC5kb21haW4saC5yYW5nZT1mdW5jdGlvbigpe3JldHVybiBvfSxofWZ1bmN0aW9uIG0odCl7dmFyIGU9e3I6dFswXSxnOnRbMV0sYjp0WzJdLGE6dFszXX07cmV0dXJuIGkoZSkudG9SZ2JTdHJpbmcoKX1lLmV4cG9ydHM9e2hhc0NvbG9yc2NhbGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU/by5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpfHx7fTp0LGk9bltyfHwiY29sb3IiXSxzPSExO2lmKG8uaXNBcnJheU9yVHlwZWRBcnJheShpKSlmb3IodmFyIGM9MDtjPGkubGVuZ3RoO2MrKylpZihhKGlbY10pKXtzPSEwO2JyZWFrfXJldHVybiBvLmlzUGxhaW5PYmplY3QobikmJihzfHwhMD09PW4uc2hvd3NjYWxlfHxhKG4uY21pbikmJmEobi5jbWF4KXx8bChuLmNvbG9yc2NhbGUpfHxvLmlzUGxhaW5PYmplY3Qobi5jb2xvcmJhcikpfSxleHRyYWN0T3B0czpmLGV4dHJhY3RTY2FsZTpoLGZsaXBTY2FsZTpwLG1ha2VDb2xvclNjYWxlRnVuYzpkLG1ha2VDb2xvclNjYWxlRnVuY0Zyb21UcmFjZTpmdW5jdGlvbih0LGUpe3JldHVybiBkKGgodCksZSl9fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vY29sb3IiOjYzOSwiLi9zY2FsZXMiOjY1NCwiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoyNDIsdGlueWNvbG9yMjo1NzJ9XSw2NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zY2FsZXMiKSxpPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJjb2xvcnNjYWxlIixhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksaGFuZGxlRGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxzY2FsZXM6bi5zY2FsZXMsZGVmYXVsdFNjYWxlOm4uZGVmYXVsdFNjYWxlLGdldFNjYWxlOm4uZ2V0LGlzVmFsaWRTY2FsZTpuLmlzVmFsaWQsaGFzQ29sb3JzY2FsZTppLmhhc0NvbG9yc2NhbGUsZXh0cmFjdE9wdHM6aS5leHRyYWN0T3B0cyxleHRyYWN0U2NhbGU6aS5leHRyYWN0U2NhbGUsZmxpcFNjYWxlOmkuZmxpcFNjYWxlLG1ha2VDb2xvclNjYWxlRnVuYzppLm1ha2VDb2xvclNjYWxlRnVuYyxtYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2U6aS5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2V9fSx7Ii4vYXR0cmlidXRlcyI6NjQ2LCIuL2NhbGMiOjY0NywiLi9jcm9zc190cmFjZV9kZWZhdWx0cyI6NjQ4LCIuL2RlZmF1bHRzIjo2NDksIi4vaGVscGVycyI6NjUwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2NTIsIi4vbGF5b3V0X2RlZmF1bHRzIjo2NTMsIi4vc2NhbGVzIjo2NTR9XSw2NTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4vc2NhbGVzIikuc2NhbGVzO2UuZXhwb3J0cz17ZWRpdFR5cGU6ImNhbGMiLGNvbG9yc2NhbGU6e2VkaXRUeXBlOiJjYWxjIixzZXF1ZW50aWFsOnt2YWxUeXBlOiJjb2xvcnNjYWxlIixkZmx0OmEuUmVkcyxlZGl0VHlwZToiY2FsYyJ9LHNlcXVlbnRpYWxtaW51czp7dmFsVHlwZToiY29sb3JzY2FsZSIsZGZsdDphLkJsdWVzLGVkaXRUeXBlOiJjYWxjIn0sZGl2ZXJnaW5nOnt2YWxUeXBlOiJjb2xvcnNjYWxlIixkZmx0OmEuUmRCdSxlZGl0VHlwZToiY2FsYyJ9fSxjb2xvcmF4aXM6bih7X2lzU3VicGxvdE9iajohMCxlZGl0VHlwZToiY2FsYyJ9LGkoIiIse2NvbG9yQXR0cjoiY29ycmVzcG9uZGluZyB0cmFjZSBjb2xvciBhcnJheShzKSIsbm9Db2xvckF4aXM6ITAsc2hvd1NjYWxlRGZsdDohMH0pKX19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuL2F0dHJpYnV0ZXMiOjY0NiwiLi9zY2FsZXMiOjY1NH1dLDY1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxhPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxvPXQoIi4vZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9cigiY29sb3JzY2FsZS5zZXF1ZW50aWFsIikscigiY29sb3JzY2FsZS5zZXF1ZW50aWFsbWludXMiKSxyKCJjb2xvcnNjYWxlLmRpdmVyZ2luZyIpO3ZhciBzLGwsYz1lLl9jb2xvckF4ZXM7ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBuLmNvZXJjZShzLGwsYS5jb2xvcmF4aXMsdCxlKX1mb3IodmFyIGYgaW4gYyl7dmFyIGg9Y1tmXTtpZihoWzBdKXM9dFtmXXx8e30sKGw9aS5uZXdDb250YWluZXIoZSxmLCJjb2xvcmF4aXMiKSkuX25hbWU9ZixvKHMsbCxlLHUse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pO2Vsc2V7Zm9yKHZhciBwPTA7cDxoWzJdLmxlbmd0aDtwKyspaFsyXVtwXSgpO2RlbGV0ZSBlLl9jb2xvckF4ZXNbZl19fX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi9kZWZhdWx0cyI6NjQ5LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2NTJ9XSw2NTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidGlueWNvbG9yMiIpLGk9e0dyZXlzOltbMCwicmdiKDAsMCwwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyNTUpIl1dLFlsR25CdTpbWzAsInJnYig4LDI5LDg4KSJdLFsuMTI1LCJyZ2IoMzcsNTIsMTQ4KSJdLFsuMjUsInJnYigzNCw5NCwxNjgpIl0sWy4zNzUsInJnYigyOSwxNDUsMTkyKSJdLFsuNSwicmdiKDY1LDE4MiwxOTYpIl0sWy42MjUsInJnYigxMjcsMjA1LDE4NykiXSxbLjc1LCJyZ2IoMTk5LDIzMywxODApIl0sWy44NzUsInJnYigyMzcsMjQ4LDIxNykiXSxbMSwicmdiKDI1NSwyNTUsMjE3KSJdXSxHcmVlbnM6W1swLCJyZ2IoMCw2OCwyNykiXSxbLjEyNSwicmdiKDAsMTA5LDQ0KSJdLFsuMjUsInJnYigzNSwxMzksNjkpIl0sWy4zNzUsInJnYig2NSwxNzEsOTMpIl0sWy41LCJyZ2IoMTE2LDE5NiwxMTgpIl0sWy42MjUsInJnYigxNjEsMjE3LDE1NSkiXSxbLjc1LCJyZ2IoMTk5LDIzMywxOTIpIl0sWy44NzUsInJnYigyMjksMjQ1LDIyNCkiXSxbMSwicmdiKDI0NywyNTIsMjQ1KSJdXSxZbE9yUmQ6W1swLCJyZ2IoMTI4LDAsMzgpIl0sWy4xMjUsInJnYigxODksMCwzOCkiXSxbLjI1LCJyZ2IoMjI3LDI2LDI4KSJdLFsuMzc1LCJyZ2IoMjUyLDc4LDQyKSJdLFsuNSwicmdiKDI1MywxNDEsNjApIl0sWy42MjUsInJnYigyNTQsMTc4LDc2KSJdLFsuNzUsInJnYigyNTQsMjE3LDExOCkiXSxbLjg3NSwicmdiKDI1NSwyMzcsMTYwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyMDQpIl1dLEJsdWVyZWQ6W1swLCJyZ2IoMCwwLDI1NSkiXSxbMSwicmdiKDI1NSwwLDApIl1dLFJkQnU6W1swLCJyZ2IoNSwxMCwxNzIpIl0sWy4zNSwicmdiKDEwNiwxMzcsMjQ3KSJdLFsuNSwicmdiKDE5MCwxOTAsMTkwKSJdLFsuNiwicmdiKDIyMCwxNzAsMTMyKSJdLFsuNywicmdiKDIzMCwxNDUsOTApIl0sWzEsInJnYigxNzgsMTAsMjgpIl1dLFJlZHM6W1swLCJyZ2IoMjIwLDIyMCwyMjApIl0sWy4yLCJyZ2IoMjQ1LDE5NSwxNTcpIl0sWy40LCJyZ2IoMjQ1LDE2MCwxMDUpIl0sWzEsInJnYigxNzgsMTAsMjgpIl1dLEJsdWVzOltbMCwicmdiKDUsMTAsMTcyKSJdLFsuMzUsInJnYig0MCw2MCwxOTApIl0sWy41LCJyZ2IoNzAsMTAwLDI0NSkiXSxbLjYsInJnYig5MCwxMjAsMjQ1KSJdLFsuNywicmdiKDEwNiwxMzcsMjQ3KSJdLFsxLCJyZ2IoMjIwLDIyMCwyMjApIl1dLFBpY25pYzpbWzAsInJnYigwLDAsMjU1KSJdLFsuMSwicmdiKDUxLDE1MywyNTUpIl0sWy4yLCJyZ2IoMTAyLDIwNCwyNTUpIl0sWy4zLCJyZ2IoMTUzLDIwNCwyNTUpIl0sWy40LCJyZ2IoMjA0LDIwNCwyNTUpIl0sWy41LCJyZ2IoMjU1LDI1NSwyNTUpIl0sWy42LCJyZ2IoMjU1LDIwNCwyNTUpIl0sWy43LCJyZ2IoMjU1LDE1MywyNTUpIl0sWy44LCJyZ2IoMjU1LDEwMiwyMDQpIl0sWy45LCJyZ2IoMjU1LDEwMiwxMDIpIl0sWzEsInJnYigyNTUsMCwwKSJdXSxSYWluYm93OltbMCwicmdiKDE1MCwwLDkwKSJdLFsuMTI1LCJyZ2IoMCwwLDIwMCkiXSxbLjI1LCJyZ2IoMCwyNSwyNTUpIl0sWy4zNzUsInJnYigwLDE1MiwyNTUpIl0sWy41LCJyZ2IoNDQsMjU1LDE1MCkiXSxbLjYyNSwicmdiKDE1MSwyNTUsMCkiXSxbLjc1LCJyZ2IoMjU1LDIzNCwwKSJdLFsuODc1LCJyZ2IoMjU1LDExMSwwKSJdLFsxLCJyZ2IoMjU1LDAsMCkiXV0sUG9ydGxhbmQ6W1swLCJyZ2IoMTIsNTEsMTMxKSJdLFsuMjUsInJnYigxMCwxMzYsMTg2KSJdLFsuNSwicmdiKDI0MiwyMTEsNTYpIl0sWy43NSwicmdiKDI0MiwxNDMsNTYpIl0sWzEsInJnYigyMTcsMzAsMzApIl1dLEpldDpbWzAsInJnYigwLDAsMTMxKSJdLFsuMTI1LCJyZ2IoMCw2MCwxNzApIl0sWy4zNzUsInJnYig1LDI1NSwyNTUpIl0sWy42MjUsInJnYigyNTUsMjU1LDApIl0sWy44NzUsInJnYigyNTAsMCwwKSJdLFsxLCJyZ2IoMTI4LDAsMCkiXV0sSG90OltbMCwicmdiKDAsMCwwKSJdLFsuMywicmdiKDIzMCwwLDApIl0sWy42LCJyZ2IoMjU1LDIxMCwwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyNTUpIl1dLEJsYWNrYm9keTpbWzAsInJnYigwLDAsMCkiXSxbLjIsInJnYigyMzAsMCwwKSJdLFsuNCwicmdiKDIzMCwyMTAsMCkiXSxbLjcsInJnYigyNTUsMjU1LDI1NSkiXSxbMSwicmdiKDE2MCwyMDAsMjU1KSJdXSxFYXJ0aDpbWzAsInJnYigwLDAsMTMwKSJdLFsuMSwicmdiKDAsMTgwLDE4MCkiXSxbLjIsInJnYig0MCwyMTAsNDApIl0sWy40LCJyZ2IoMjMwLDIzMCw1MCkiXSxbLjYsInJnYigxMjAsNzAsMjApIl0sWzEsInJnYigyNTUsMjU1LDI1NSkiXV0sRWxlY3RyaWM6W1swLCJyZ2IoMCwwLDApIl0sWy4xNSwicmdiKDMwLDAsMTAwKSJdLFsuNCwicmdiKDEyMCwwLDEwMCkiXSxbLjYsInJnYigxNjAsOTAsMCkiXSxbLjgsInJnYigyMzAsMjAwLDApIl0sWzEsInJnYigyNTUsMjUwLDIyMCkiXV0sVmlyaWRpczpbWzAsIiM0NDAxNTQiXSxbLjA2Mjc0NTA5ODAzOTIxNTY5LCIjNDgxODZhIl0sWy4xMjU0OTAxOTYwNzg0MzEzNywiIzQ3MmQ3YiJdLFsuMTg4MjM1Mjk0MTE3NjQ3MDYsIiM0MjQwODYiXSxbLjI1MDk4MDM5MjE1Njg2Mjc0LCIjM2I1MjhiIl0sWy4zMTM3MjU0OTAxOTYwNzg0LCIjMzM2MzhkIl0sWy4zNzY0NzA1ODgyMzUyOTQxLCIjMmM3MjhlIl0sWy40MzkyMTU2ODYyNzQ1MDk4LCIjMjY4MjhlIl0sWy41MDE5NjA3ODQzMTM3MjU1LCIjMjE5MThjIl0sWy41NjQ3MDU4ODIzNTI5NDEyLCIjMWZhMDg4Il0sWy42Mjc0NTA5ODAzOTIxNTY5LCIjMjhhZTgwIl0sWy42OTAxOTYwNzg0MzEzNzI1LCIjM2ZiYzczIl0sWy43NTI5NDExNzY0NzA1ODgyLCIjNWVjOTYyIl0sWy44MTU2ODYyNzQ1MDk4MDM5LCIjODRkNDRiIl0sWy44Nzg0MzEzNzI1NDkwMTk2LCIjYWRkYzMwIl0sWy45NDExNzY0NzA1ODgyMzUzLCIjZDhlMjE5Il0sWzEsIiNmZGU3MjUiXV0sQ2l2aWRpczpbWzAsInJnYigwLDMyLDc2KSJdLFsuMDU4ODI0LCJyZ2IoMCw0MiwxMDIpIl0sWy4xMTc2NDcsInJnYigwLDUyLDExMCkiXSxbLjE3NjQ3MSwicmdiKDM5LDYzLDEwOCkiXSxbLjIzNTI5NCwicmdiKDYwLDc0LDEwNykiXSxbLjI5NDExOCwicmdiKDc2LDg1LDEwNykiXSxbLjM1Mjk0MSwicmdiKDkxLDk1LDEwOSkiXSxbLjQxMTc2NSwicmdiKDEwNCwxMDYsMTEyKSJdLFsuNDcwNTg4LCJyZ2IoMTE3LDExNywxMTcpIl0sWy41Mjk0MTIsInJnYigxMzEsMTI5LDEyMCkiXSxbLjU4ODIzNSwicmdiKDE0NiwxNDAsMTIwKSJdLFsuNjQ3MDU5LCJyZ2IoMTYxLDE1MiwxMTgpIl0sWy43MDU4ODIsInJnYigxNzYsMTY1LDExNCkiXSxbLjc2NDcwNiwicmdiKDE5MiwxNzcsMTA5KSJdLFsuODIzNTI5LCJyZ2IoMjA5LDE5MSwxMDIpIl0sWy44ODIzNTMsInJnYigyMjUsMjA0LDkyKSJdLFsuOTQxMTc2LCJyZ2IoMjQzLDIxOSw3OSkiXSxbMSwicmdiKDI1NSwyMzMsNjkpIl1dfSxhPWkuUmRCdTtmdW5jdGlvbiBvKHQpe3ZhciBlPTA7aWYoIUFycmF5LmlzQXJyYXkodCl8fHQubGVuZ3RoPDIpcmV0dXJuITE7aWYoIXRbMF18fCF0W3QubGVuZ3RoLTFdKXJldHVybiExO2lmKDAhPSt0WzBdWzBdfHwxIT0rdFt0Lmxlbmd0aC0xXVswXSlyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGk9dFtyXTtpZigyIT09aS5sZW5ndGh8fCtpWzBdPGV8fCFuKGlbMV0pLmlzVmFsaWQoKSlyZXR1cm4hMTtlPStpWzBdfXJldHVybiEwfWUuZXhwb3J0cz17c2NhbGVzOmksZGVmYXVsdFNjYWxlOmEsZ2V0OmZ1bmN0aW9uKHQsZSl7aWYoZXx8KGU9YSksIXQpcmV0dXJuIGU7ZnVuY3Rpb24gcigpe3RyeXt0PWlbdF18fEpTT04ucGFyc2UodCl9Y2F0Y2gocil7dD1lfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJihyKCksInN0cmluZyI9PXR5cGVvZiB0JiZyKCkpLG8odCk/dDplfSxpc1ZhbGlkOmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT1pW3RdfHxvKHQpfX19LHt0aW55Y29sb3IyOjU3Mn1dLDY1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT0odC1yKS8obi1yKSxvPWErZS8obi1yKSxzPShhK28pLzI7cmV0dXJuImxlZnQiPT09aXx8ImJvdHRvbSI9PT1pP2E6ImNlbnRlciI9PT1pfHwibWlkZGxlIj09PWk/czoicmlnaHQiPT09aXx8InRvcCI9PT1pP286YTwyLzMtcz9hOm8+NC8zLXM/bzpzfX0se31dLDY1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPVtbInN3LXJlc2l6ZSIsInMtcmVzaXplIiwic2UtcmVzaXplIl0sWyJ3LXJlc2l6ZSIsIm1vdmUiLCJlLXJlc2l6ZSJdLFsibnctcmVzaXplIiwibi1yZXNpemUiLCJuZS1yZXNpemUiXV07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3JldHVybiB0PSJsZWZ0Ij09PXI/MDoiY2VudGVyIj09PXI/MToicmlnaHQiPT09cj8yOm4uY29uc3RyYWluKE1hdGguZmxvb3IoMyp0KSwwLDIpLGU9ImJvdHRvbSI9PT1hPzA6Im1pZGRsZSI9PT1hPzE6InRvcCI9PT1hPzI6bi5jb25zdHJhaW4oTWF0aC5mbG9vcigzKmUpLDAsMiksaVtlXVt0XX19LHsiLi4vLi4vbGliIjo3NzZ9XSw2NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5zZWxlY3RNb2RlPWZ1bmN0aW9uKHQpe3JldHVybiJsYXNzbyI9PT10fHwic2VsZWN0Ij09PXR9LHIuZHJhd01vZGU9ZnVuY3Rpb24odCl7cmV0dXJuImRyYXdjbG9zZWRwYXRoIj09PXR8fCJkcmF3b3BlbnBhdGgiPT09dHx8ImRyYXdsaW5lIj09PXR8fCJkcmF3cmVjdCI9PT10fHwiZHJhd2NpcmNsZSI9PT10fSxyLm9wZW5Nb2RlPWZ1bmN0aW9uKHQpe3JldHVybiJkcmF3bGluZSI9PT10fHwiZHJhd29wZW5wYXRoIj09PXR9LHIucmVjdE1vZGU9ZnVuY3Rpb24odCl7cmV0dXJuInNlbGVjdCI9PT10fHwiZHJhd2xpbmUiPT09dHx8ImRyYXdyZWN0Ij09PXR8fCJkcmF3Y2lyY2xlIj09PXR9LHIuZnJlZU1vZGU9ZnVuY3Rpb24odCl7cmV0dXJuImxhc3NvIj09PXR8fCJkcmF3Y2xvc2VkcGF0aCI9PT10fHwiZHJhd29wZW5wYXRoIj09PXR9LHIuc2VsZWN0aW5nT3JEcmF3aW5nPWZ1bmN0aW9uKHQpe3JldHVybiByLmZyZWVNb2RlKHQpfHxyLnJlY3RNb2RlKHQpfX0se31dLDY1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJtb3VzZS1ldmVudC1vZmZzZXQiKSxpPXQoImhhcy1ob3ZlciIpLGE9dCgiaGFzLXBhc3NpdmUtZXZlbnRzIiksbz10KCIuLi8uLi9saWIiKS5yZW1vdmVFbGVtZW50LHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLGw9ZS5leHBvcnRzPXt9O2wuYWxpZ249dCgiLi9hbGlnbiIpLGwuZ2V0Q3Vyc29yPXQoIi4vY3Vyc29yIik7dmFyIGM9dCgiLi91bmhvdmVyIik7ZnVuY3Rpb24gdSgpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NOYW1lPSJkcmFnY292ZXIiO3ZhciBlPXQuc3R5bGU7cmV0dXJuIGUucG9zaXRpb249ImZpeGVkIixlLmxlZnQ9MCxlLnJpZ2h0PTAsZS50b3A9MCxlLmJvdHRvbT0wLGUuekluZGV4PTk5OTk5OTk5OSxlLmJhY2tncm91bmQ9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCksdH1mdW5jdGlvbiBmKHQpe3JldHVybiBuKHQuY2hhbmdlZFRvdWNoZXM/dC5jaGFuZ2VkVG91Y2hlc1swXTp0LGRvY3VtZW50LmJvZHkpfWwudW5ob3Zlcj1jLndyYXBwZWQsbC51bmhvdmVyUmF3PWMucmF3LGwuaW5pdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYyxoLHAsZCxtLGc9dC5nZCx2PTEseT1nLl9jb250ZXh0LmRvdWJsZUNsaWNrRGVsYXkseD10LmVsZW1lbnQ7Zy5fbW91c2VEb3duVGltZXx8KGcuX21vdXNlRG93blRpbWU9MCkseC5zdHlsZS5wb2ludGVyRXZlbnRzPSJhbGwiLHgub25tb3VzZWRvd249XyxhPyh4Ll9vbnRvdWNoc3RhcnQmJngucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIseC5fb250b3VjaHN0YXJ0KSx4Ll9vbnRvdWNoc3RhcnQ9Xyx4LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLF8se3Bhc3NpdmU6ITF9KSk6eC5vbnRvdWNoc3RhcnQ9Xzt2YXIgYj10LmNsYW1wRm58fGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gTWF0aC5hYnModCk8ciYmKHQ9MCksTWF0aC5hYnMoZSk8ciYmKGU9MCksW3QsZV19O2Z1bmN0aW9uIF8oYSl7Zy5fZHJhZ2dlZD0hMSxnLl9kcmFnZ2luZz0hMDt2YXIgbz1mKGEpO2U9b1swXSxyPW9bMV0sZD1hLnRhcmdldCxwPWEsbT0yPT09YS5idXR0b25zfHxhLmN0cmxLZXksdm9pZCAwPT09YS5jbGllbnRYJiZ2b2lkIDA9PT1hLmNsaWVudFkmJihhLmNsaWVudFg9ZSxhLmNsaWVudFk9ciksKG49KG5ldyBEYXRlKS5nZXRUaW1lKCkpLWcuX21vdXNlRG93blRpbWU8eT92Kz0xOih2PTEsZy5fbW91c2VEb3duVGltZT1uKSx0LnByZXBGbiYmdC5wcmVwRm4oYSxlLHIpLGkmJiFtPyhoPXUoKSkuc3R5bGUuY3Vyc29yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHgpLmN1cnNvcjppfHwoaD1kb2N1bWVudCxjPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuY3Vyc29yLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUoeCkuY3Vyc29yKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixUKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsVCksITEhPT10LmRyYWdtb2RlJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix3LHtwYXNzaXZlOiExfSkpfWZ1bmN0aW9uIHcobil7bi5wcmV2ZW50RGVmYXVsdCgpO3ZhciBpPWYobiksYT10Lm1pbkRyYWd8fHMuTUlORFJBRyxvPWIoaVswXS1lLGlbMV0tcixhKSxjPW9bMF0sdT1vWzFdOyhjfHx1KSYmKGcuX2RyYWdnZWQ9ITAsbC51bmhvdmVyKGcsbikpLGcuX2RyYWdnZWQmJnQubW92ZUZuJiYhbSYmKGcuX2RyYWdkYXRhPXtlbGVtZW50OngsZHg6YyxkeTp1fSx0Lm1vdmVGbihjLHUpKX1mdW5jdGlvbiBUKGUpe2lmKGRlbGV0ZSBnLl9kcmFnZGF0YSwhMSE9PXQuZHJhZ21vZGUmJihlLnByZXZlbnREZWZhdWx0KCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix3KSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHcpKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixUKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsVCksaT9vKGgpOmMmJihoLmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3I9YyxjPW51bGwpLGcuX2RyYWdnaW5nKXtpZihnLl9kcmFnZ2luZz0hMSwobmV3IERhdGUpLmdldFRpbWUoKS1nLl9tb3VzZURvd25UaW1lPnkmJih2PU1hdGgubWF4KHYtMSwxKSksZy5fZHJhZ2dlZCl0LmRvbmVGbiYmdC5kb25lRm4oKTtlbHNlIGlmKHQuY2xpY2tGbiYmdC5jbGlja0ZuKHYscCksIW0pe3ZhciByO3RyeXtyPW5ldyBNb3VzZUV2ZW50KCJjbGljayIsZSl9Y2F0Y2godCl7dmFyIG49ZihlKTsocj1kb2N1bWVudC5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKSkuaW5pdE1vdXNlRXZlbnQoImNsaWNrIixlLmJ1YmJsZXMsZS5jYW5jZWxhYmxlLGUudmlldyxlLmRldGFpbCxlLnNjcmVlblgsZS5zY3JlZW5ZLG5bMF0sblsxXSxlLmN0cmxLZXksZS5hbHRLZXksZS5zaGlmdEtleSxlLm1ldGFLZXksZS5idXR0b24sZS5yZWxhdGVkVGFyZ2V0KX1kLmRpc3BhdGNoRXZlbnQocil9Zy5fZHJhZ2dpbmc9ITEsZy5fZHJhZ2dlZD0hMX1lbHNlIGcuX2RyYWdnZWQ9ITF9fSxsLmNvdmVyU2xpcD11fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo4MzQsIi4vYWxpZ24iOjY1NSwiLi9jdXJzb3IiOjY1NiwiLi91bmhvdmVyIjo2NTksImhhcy1ob3ZlciI6NDI1LCJoYXMtcGFzc2l2ZS1ldmVudHMiOjQyNiwibW91c2UtZXZlbnQtb2Zmc2V0Ijo0NTB9XSw2NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2V2ZW50cyIpLGk9dCgiLi4vLi4vbGliL3Rocm90dGxlIiksYT10KCIuLi8uLi9saWIvZG9tIikuZ2V0R3JhcGhEaXYsbz10KCIuLi9meC9jb25zdGFudHMiKSxzPWUuZXhwb3J0cz17fTtzLndyYXBwZWQ9ZnVuY3Rpb24odCxlLHIpeyh0PWEodCkpLl9mdWxsTGF5b3V0JiZpLmNsZWFyKHQuX2Z1bGxMYXlvdXQuX3VpZCtvLkhPVkVSSUQpLHMucmF3KHQsZSxyKX0scy5yYXc9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGk9dC5faG92ZXJkYXRhO2V8fChlPXt9KSxlLnRhcmdldCYmIXQuX2RyYWdnZWQmJiExPT09bi50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfYmVmb3JlaG92ZXIiLGUpfHwoci5faG92ZXJsYXllci5zZWxlY3RBbGwoImciKS5yZW1vdmUoKSxyLl9ob3ZlcmxheWVyLnNlbGVjdEFsbCgibGluZSIpLnJlbW92ZSgpLHIuX2hvdmVybGF5ZXIuc2VsZWN0QWxsKCJjaXJjbGUiKS5yZW1vdmUoKSx0Ll9ob3ZlcmRhdGE9dm9pZCAwLGUudGFyZ2V0JiZpJiZ0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6ZSxwb2ludHM6aX0pKX19LHsiLi4vLi4vbGliL2RvbSI6NzY0LCIuLi8uLi9saWIvZXZlbnRzIjo3NjUsIi4uLy4uL2xpYi90aHJvdHRsZSI6ODAzLCIuLi9meC9jb25zdGFudHMiOjY3M31dLDY2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmRhc2g9e3ZhbFR5cGU6InN0cmluZyIsdmFsdWVzOlsic29saWQiLCJkb3QiLCJkYXNoIiwibG9uZ2Rhc2giLCJkYXNoZG90IiwibG9uZ2Rhc2hkb3QiXSxkZmx0OiJzb2xpZCIsZWRpdFR5cGU6InN0eWxlIn0sci5wYXR0ZXJuPXtzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiIiwiLyIsIlxcIiwieCIsIi0iLCJ8IiwiKyIsIi4iXSxkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sZmlsbG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJlcGxhY2UiLCJvdmVybGF5Il0sZGZsdDoicmVwbGFjZSIsZWRpdFR5cGU6InN0eWxlIn0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sZmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sZmdvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJzdHlsZSIsbWluOjAsbWF4OjF9LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo4LGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sc29saWRpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMyxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9fSx7fV0sNjYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9aS5udW1iZXJGb3JtYXQsbz10KCJmYXN0LWlzbnVtZXJpYyIpLHM9dCgidGlueWNvbG9yMiIpLGw9dCgiLi4vLi4vcmVnaXN0cnkiKSxjPXQoIi4uL2NvbG9yIiksdT10KCIuLi9jb2xvcnNjYWxlIiksZj1pLnN0clRyYW5zbGF0ZSxoPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHA9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxkPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkcsbT10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikuREVTRUxFQ1RESU0sZz10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyIpLHY9dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIikseT10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheVBvaW50VmFsdWUseD1lLmV4cG9ydHM9e307eC5mb250PWZ1bmN0aW9uKHQsZSxyLG4pe2kuaXNQbGFpbk9iamVjdChlKSYmKG49ZS5jb2xvcixyPWUuc2l6ZSxlPWUuZmFtaWx5KSxlJiZ0LnN0eWxlKCJmb250LWZhbWlseSIsZSkscisxJiZ0LnN0eWxlKCJmb250LXNpemUiLHIrInB4IiksbiYmdC5jYWxsKGMuZmlsbCxuKX0seC5zZXRQb3NpdGlvbj1mdW5jdGlvbih0LGUscil7dC5hdHRyKCJ4IixlKS5hdHRyKCJ5IixyKX0seC5zZXRTaXplPWZ1bmN0aW9uKHQsZSxyKXt0LmF0dHIoIndpZHRoIixlKS5hdHRyKCJoZWlnaHQiLHIpfSx4LnNldFJlY3Q9ZnVuY3Rpb24odCxlLHIsbixpKXt0LmNhbGwoeC5zZXRQb3NpdGlvbixlLHIpLmNhbGwoeC5zZXRTaXplLG4saSl9LHgudHJhbnNsYXRlUG9pbnQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ci5jMnAodC54KSxhPW4uYzJwKHQueSk7cmV0dXJuISEobyhpKSYmbyhhKSYmZS5ub2RlKCkpJiYoInRleHQiPT09ZS5ub2RlKCkubm9kZU5hbWU/ZS5hdHRyKCJ4IixpKS5hdHRyKCJ5IixhKTplLmF0dHIoInRyYW5zZm9ybSIsZihpLGEpKSwhMCl9LHgudHJhbnNsYXRlUG9pbnRzPWZ1bmN0aW9uKHQsZSxyKXt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPW4uc2VsZWN0KHRoaXMpO3gudHJhbnNsYXRlUG9pbnQodCxpLGUscil9KSl9LHguaGlkZU91dHNpZGVSYW5nZVBvaW50PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtlLmF0dHIoImRpc3BsYXkiLHIuaXNQdFdpdGhpblJhbmdlKHQsaSkmJm4uaXNQdFdpdGhpblJhbmdlKHQsYSk/bnVsbDoibm9uZSIpfSx4LmhpZGVPdXRzaWRlUmFuZ2VQb2ludHM9ZnVuY3Rpb24odCxlKXtpZihlLl9oYXNDbGlwT25BeGlzRmFsc2Upe3ZhciByPWUueGF4aXMsaT1lLnlheGlzO3QuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIGE9ZVswXS50cmFjZSxvPWEueGNhbGVuZGFyLHM9YS55Y2FsZW5kYXIsYz1sLnRyYWNlSXMoYSwiYmFyLWxpa2UiKT8iLmJhcnRleHQiOiIucG9pbnQsLnRleHRwb2ludCI7dC5zZWxlY3RBbGwoYykuZWFjaCgoZnVuY3Rpb24odCl7eC5oaWRlT3V0c2lkZVJhbmdlUG9pbnQodCxuLnNlbGVjdCh0aGlzKSxyLGksbyxzKX0pKX0pKX19LHguY3Jpc3BSb3VuZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUmJm8oZSk/dC5fY29udGV4dC5zdGF0aWNQbG90P2U6ZTwxPzE6TWF0aC5yb3VuZChlKTpyfHwwfSx4LnNpbmdsZUxpbmVTdHlsZT1mdW5jdGlvbih0LGUscixuLGkpe2Uuc3R5bGUoImZpbGwiLCJub25lIik7dmFyIGE9KCgodHx8W10pWzBdfHx7fSkudHJhY2V8fHt9KS5saW5lfHx7fSxvPXJ8fGEud2lkdGh8fDAscz1pfHxhLmRhc2h8fCIiO2Muc3Ryb2tlKGUsbnx8YS5jb2xvcikseC5kYXNoTGluZShlLHMsbyl9LHgubGluZUdyb3VwU3R5bGU9ZnVuY3Rpb24odCxlLHIsaSl7dC5zdHlsZSgiZmlsbCIsIm5vbmUiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgYT0oKCh0fHxbXSlbMF18fHt9KS50cmFjZXx8e30pLmxpbmV8fHt9LG89ZXx8YS53aWR0aHx8MCxzPWl8fGEuZGFzaHx8IiI7bi5zZWxlY3QodGhpcykuY2FsbChjLnN0cm9rZSxyfHxhLmNvbG9yKS5jYWxsKHguZGFzaExpbmUscyxvKX0pKX0seC5kYXNoTGluZT1mdW5jdGlvbih0LGUscil7cj0rcnx8MCxlPXguZGFzaFN0eWxlKGUsciksdC5zdHlsZSh7InN0cm9rZS1kYXNoYXJyYXkiOmUsInN0cm9rZS13aWR0aCI6cisicHgifSl9LHguZGFzaFN0eWxlPWZ1bmN0aW9uKHQsZSl7ZT0rZXx8MTt2YXIgcj1NYXRoLm1heChlLDMpO3JldHVybiJzb2xpZCI9PT10P3Q9IiI6ImRvdCI9PT10P3Q9cisicHgsIityKyJweCI6ImRhc2giPT09dD90PTMqcisicHgsIiszKnIrInB4IjoibG9uZ2Rhc2giPT09dD90PTUqcisicHgsIis1KnIrInB4IjoiZGFzaGRvdCI9PT10P3Q9MypyKyJweCwiK3IrInB4LCIrcisicHgsIityKyJweCI6ImxvbmdkYXNoZG90Ij09PXQmJih0PTUqcisicHgsIisyKnIrInB4LCIrcisicHgsIisyKnIrInB4IiksdH0seC5zaW5nbGVGaWxsU3R5bGU9ZnVuY3Rpb24odCl7dmFyIGU9KCgobi5zZWxlY3QodC5ub2RlKCkpLmRhdGEoKVswXXx8W10pWzBdfHx7fSkudHJhY2V8fHt9KS5maWxsY29sb3I7ZSYmdC5jYWxsKGMuZmlsbCxlKX0seC5maWxsR3JvdXBTdHlsZT1mdW5jdGlvbih0KXt0LnN0eWxlKCJzdHJva2Utd2lkdGgiLDApLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO3RbMF0udHJhY2UmJmUuY2FsbChjLmZpbGwsdFswXS50cmFjZS5maWxsY29sb3IpfSkpfTt2YXIgYj10KCIuL3N5bWJvbF9kZWZzIik7eC5zeW1ib2xOYW1lcz1bXSx4LnN5bWJvbEZ1bmNzPVtdLHguc3ltYm9sTmVlZExpbmVzPXt9LHguc3ltYm9sTm9Eb3Q9e30seC5zeW1ib2xOb0ZpbGw9e30seC5zeW1ib2xMaXN0PVtdLE9iamVjdC5rZXlzKGIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPWJbdF0scj1lLm47eC5zeW1ib2xMaXN0LnB1c2gocixTdHJpbmcociksdCxyKzEwMCxTdHJpbmcocisxMDApLHQrIi1vcGVuIikseC5zeW1ib2xOYW1lc1tyXT10LHguc3ltYm9sRnVuY3Nbcl09ZS5mLGUubmVlZExpbmUmJih4LnN5bWJvbE5lZWRMaW5lc1tyXT0hMCksZS5ub0RvdD94LnN5bWJvbE5vRG90W3JdPSEwOnguc3ltYm9sTGlzdC5wdXNoKHIrMjAwLFN0cmluZyhyKzIwMCksdCsiLWRvdCIsciszMDAsU3RyaW5nKHIrMzAwKSx0KyItb3Blbi1kb3QiKSxlLm5vRmlsbCYmKHguc3ltYm9sTm9GaWxsW3JdPSEwKX0pKTt2YXIgXz14LnN5bWJvbE5hbWVzLmxlbmd0aDtmdW5jdGlvbiB3KHQsZSl7dmFyIHI9dCUxMDA7cmV0dXJuIHguc3ltYm9sRnVuY3Nbcl0oZSkrKHQ+PTIwMD8iTTAsMC41TDAuNSwwTDAsLTAuNUwtMC41LDBaIjoiIil9eC5zeW1ib2xOdW1iZXI9ZnVuY3Rpb24odCl7aWYobyh0KSl0PSt0O2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgZT0wO3QuaW5kZXhPZigiLW9wZW4iKT4wJiYoZT0xMDAsdD10LnJlcGxhY2UoIi1vcGVuIiwiIikpLHQuaW5kZXhPZigiLWRvdCIpPjAmJihlKz0yMDAsdD10LnJlcGxhY2UoIi1kb3QiLCIiKSksKHQ9eC5zeW1ib2xOYW1lcy5pbmRleE9mKHQpKT49MCYmKHQrPWUpfXJldHVybiB0JTEwMD49X3x8dD49NDAwPzA6TWF0aC5mbG9vcihNYXRoLm1heCh0LDApKX07dmFyIFQ9e3gxOjEseDI6MCx5MTowLHkyOjB9LGs9e3gxOjAseDI6MCx5MToxLHkyOjB9LEE9YSgifmYiKSxNPXtyYWRpYWw6e25vZGU6InJhZGlhbEdyYWRpZW50In0scmFkaWFscmV2ZXJzZWQ6e25vZGU6InJhZGlhbEdyYWRpZW50IixyZXZlcnNlZDohMH0saG9yaXpvbnRhbDp7bm9kZToibGluZWFyR3JhZGllbnQiLGF0dHJzOlR9LGhvcml6b250YWxyZXZlcnNlZDp7bm9kZToibGluZWFyR3JhZGllbnQiLGF0dHJzOlQscmV2ZXJzZWQ6ITB9LHZlcnRpY2FsOntub2RlOiJsaW5lYXJHcmFkaWVudCIsYXR0cnM6a30sdmVydGljYWxyZXZlcnNlZDp7bm9kZToibGluZWFyR3JhZGllbnQiLGF0dHJzOmsscmV2ZXJzZWQ6ITB9fTt4LmdyYWRpZW50PWZ1bmN0aW9uKHQsZSxyLGEsbyxsKXtmb3IodmFyIHU9by5sZW5ndGgsZj1NW2FdLGg9bmV3IEFycmF5KHUpLHA9MDtwPHU7cCsrKWYucmV2ZXJzZWQ/aFt1LTEtcF09W0EoMTAwKigxLW9bcF1bMF0pKSxvW3BdWzFdXTpoW3BdPVtBKDEwMCpvW3BdWzBdKSxvW3BdWzFdXTt2YXIgZD1lLl9mdWxsTGF5b3V0LG09ImciK2QuX3VpZCsiLSIrcixnPWQuX2RlZnMuc2VsZWN0KCIuZ3JhZGllbnRzIikuc2VsZWN0QWxsKCIjIittKS5kYXRhKFthK2guam9pbigiOyIpXSxpLmlkZW50aXR5KTtnLmV4aXQoKS5yZW1vdmUoKSxnLmVudGVyKCkuYXBwZW5kKGYubm9kZSkuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTtmLmF0dHJzJiZ0LmF0dHIoZi5hdHRycyksdC5hdHRyKCJpZCIsbSk7dmFyIGU9dC5zZWxlY3RBbGwoInN0b3AiKS5kYXRhKGgpO2UuZXhpdCgpLnJlbW92ZSgpLGUuZW50ZXIoKS5hcHBlbmQoInN0b3AiKSxlLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXModFsxXSk7bi5zZWxlY3QodGhpcykuYXR0cih7b2Zmc2V0OnRbMF0rIiUiLCJzdG9wLWNvbG9yIjpjLnRpbnlSR0IoZSksInN0b3Atb3BhY2l0eSI6ZS5nZXRBbHBoYSgpfSl9KSl9KSksdC5zdHlsZShsLEQobSxlKSkuc3R5bGUobCsiLW9wYWNpdHkiLG51bGwpO3ZhciB2PWZ1bmN0aW9uKHQpe3JldHVybiIuIit0LmF0dHIoImNsYXNzIikucmVwbGFjZSgvXHMvZywiLiIpfSx5PXYobi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSkpKyI+Iit2KHQpO2QuX2dyYWRpZW50VXJsUXVlcnlQYXJ0c1t5XT0xfSx4LnBhdHRlcm49ZnVuY3Rpb24odCxlLHIsYSxvLHMsbCx1LGYsaCxwLGQpe3ZhciBtPSJsZWdlbmQiPT09ZTt1JiYoIm92ZXJsYXkiPT09Zj8oaD11LHA9Yy5jb250cmFzdChoKSk6KGg9dm9pZCAwLHA9dSkpO3ZhciBnLHYseSx4LGIsXyx3LFQsayxBLE0sUz1yLl9mdWxsTGF5b3V0LEU9InAiK1MuX3VpZCsiLSIrYSxMPXt9O3N3aXRjaChvKXtjYXNlIi8iOmc9cypNYXRoLnNxcnQoMiksdj1zKk1hdGguc3FydCgyKSxfPSJwYXRoIixMPXtkOnk9Ik0tIitnLzQrIiwiK3YvNCsibCIrZy8yKyIsLSIrdi8yKyJNMCwiK3YrIkwiK2crIiwwTSIrZy80KjMrIiwiK3YvNCo1KyJsIitnLzIrIiwtIit2LzIsb3BhY2l0eTpkLHN0cm9rZTpwLCJzdHJva2Utd2lkdGgiOih4PWwqcykrInB4In07YnJlYWs7Y2FzZSJcXCI6Zz1zKk1hdGguc3FydCgyKSx2PXMqTWF0aC5zcXJ0KDIpLF89InBhdGgiLEw9e2Q6eT0iTSIrZy80KjMrIiwtIit2LzQrImwiK2cvMisiLCIrdi8yKyJNMCwwTCIrZysiLCIrdisiTS0iK2cvNCsiLCIrdi80KjMrImwiK2cvMisiLCIrdi8yLG9wYWNpdHk6ZCxzdHJva2U6cCwic3Ryb2tlLXdpZHRoIjooeD1sKnMpKyJweCJ9O2JyZWFrO2Nhc2UieCI6Zz1zKk1hdGguc3FydCgyKSx2PXMqTWF0aC5zcXJ0KDIpLHk9Ik0tIitnLzQrIiwiK3YvNCsibCIrZy8yKyIsLSIrdi8yKyJNMCwiK3YrIkwiK2crIiwwTSIrZy80KjMrIiwiK3YvNCo1KyJsIitnLzIrIiwtIit2LzIrIk0iK2cvNCozKyIsLSIrdi80KyJsIitnLzIrIiwiK3YvMisiTTAsMEwiK2crIiwiK3YrIk0tIitnLzQrIiwiK3YvNCozKyJsIitnLzIrIiwiK3YvMix4PXMtcypNYXRoLnNxcnQoMS1sKSxfPSJwYXRoIixMPXtkOnksb3BhY2l0eTpkLHN0cm9rZTpwLCJzdHJva2Utd2lkdGgiOngrInB4In07YnJlYWs7Y2FzZSJ8IjpfPSJwYXRoIixfPSJwYXRoIixMPXtkOnk9Ik0iKyhnPXMpLzIrIiwwTCIrZy8yKyIsIisodj1zKSxvcGFjaXR5OmQsc3Ryb2tlOnAsInN0cm9rZS13aWR0aCI6KHg9bCpzKSsicHgifTticmVhaztjYXNlIi0iOl89InBhdGgiLF89InBhdGgiLEw9e2Q6eT0iTTAsIisodj1zKS8yKyJMIisoZz1zKSsiLCIrdi8yLG9wYWNpdHk6ZCxzdHJva2U6cCwic3Ryb2tlLXdpZHRoIjooeD1sKnMpKyJweCJ9O2JyZWFrO2Nhc2UiKyI6Xz0icGF0aCIseT0iTSIrKGc9cykvMisiLDBMIitnLzIrIiwiKyh2PXMpKyJNMCwiK3YvMisiTCIrZysiLCIrdi8yLHg9cy1zKk1hdGguc3FydCgxLWwpLF89InBhdGgiLEw9e2Q6eSxvcGFjaXR5OmQsc3Ryb2tlOnAsInN0cm9rZS13aWR0aCI6eCsicHgifTticmVhaztjYXNlIi4iOmc9cyx2PXMsbDxNYXRoLlBJLzQ/Yj1NYXRoLnNxcnQobCpzKnMvTWF0aC5QSSk6KHc9bCxUPU1hdGguUEkvNCxrPTEsQT1zLzIsTT1zL01hdGguc3FydCgyKSxiPUErKE0tQSkqKHctVCkvKGstVCkpLF89ImNpcmNsZSIsTD17Y3g6Zy8yLGN5OnYvMixyOmIsb3BhY2l0eTpkLGZpbGw6cH19dmFyIEM9W298fCJub1NoIixofHwibm9CZyIscHx8Im5vRmciLHMsbF0uam9pbigiOyIpLFA9Uy5fZGVmcy5zZWxlY3QoIi5wYXR0ZXJucyIpLnNlbGVjdEFsbCgiIyIrRSkuZGF0YShbQ10saS5pZGVudGl0eSk7UC5leGl0KCkucmVtb3ZlKCksUC5lbnRlcigpLmFwcGVuZCgicGF0dGVybiIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7aWYodC5hdHRyKHtpZDpFLHdpZHRoOmcrInB4IixoZWlnaHQ6disicHgiLHBhdHRlcm5Vbml0czoidXNlclNwYWNlT25Vc2UiLHBhdHRlcm5UcmFuc2Zvcm06bT8ic2NhbGUoMC44KSI6IiJ9KSxoKXt2YXIgZT10LnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoWzBdKTtlLmV4aXQoKS5yZW1vdmUoKSxlLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cih7d2lkdGg6ZysicHgiLGhlaWdodDp2KyJweCIsZmlsbDpofSl9dmFyIHI9dC5zZWxlY3RBbGwoXykuZGF0YShbMF0pO3IuZXhpdCgpLnJlbW92ZSgpLHIuZW50ZXIoKS5hcHBlbmQoXykuYXR0cihMKX0pKSx0LnN0eWxlKCJmaWxsIixEKEUscikpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLG51bGwpLHQuY2xhc3NlZCgicGF0dGVybl9maWxsZWQiLCEwKTt2YXIgST0iLiIrbi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSkuYXR0cigiY2xhc3MiKS5yZXBsYWNlKC9ccy9nLCIuIikrIj4ucGF0dGVybl9maWxsZWQiO1MuX3BhdHRlcm5VcmxRdWVyeVBhcnRzW0ldPTF9LHguaW5pdEdyYWRpZW50cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2kuZW5zdXJlU2luZ2xlKGUuX2RlZnMsImciLCJncmFkaWVudHMiKS5zZWxlY3RBbGwoImxpbmVhckdyYWRpZW50LHJhZGlhbEdyYWRpZW50IikucmVtb3ZlKCksZS5fZ3JhZGllbnRVcmxRdWVyeVBhcnRzPXt9fSx4LmluaXRQYXR0ZXJucz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2kuZW5zdXJlU2luZ2xlKGUuX2RlZnMsImciLCJwYXR0ZXJucyIpLnNlbGVjdEFsbCgicGF0dGVybiIpLnJlbW92ZSgpLGUuX3BhdHRlcm5VcmxRdWVyeVBhcnRzPXt9fSx4LmdldFBhdHRlcm5BdHRyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCYmaS5pc0FycmF5T3JUeXBlZEFycmF5KHQpP2U8dC5sZW5ndGg/dFtlXTpyOnR9LHgucG9pbnRTdHlsZT1mdW5jdGlvbih0LGUscil7aWYodC5zaXplKCkpe3ZhciBpPXgubWFrZVBvaW50U3R5bGVGbnMoZSk7dC5lYWNoKChmdW5jdGlvbih0KXt4LnNpbmdsZVBvaW50U3R5bGUodCxuLnNlbGVjdCh0aGlzKSxlLGkscil9KSl9fSx4LnNpbmdsZVBvaW50U3R5bGU9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbz1yLm1hcmtlcixzPW8ubGluZTtpZihlLnN0eWxlKCJvcGFjaXR5IixuLnNlbGVjdGVkT3BhY2l0eUZuP24uc2VsZWN0ZWRPcGFjaXR5Rm4odCk6dm9pZCAwPT09dC5tbz9vLm9wYWNpdHk6dC5tbyksbi5tczJtcmMpe3ZhciBsO2w9InZhcmlvdXMiPT09dC5tc3x8InZhcmlvdXMiPT09by5zaXplPzM6bi5tczJtcmModC5tcyksdC5tcmM9bCxuLnNlbGVjdGVkU2l6ZUZuJiYobD10Lm1yYz1uLnNlbGVjdGVkU2l6ZUZuKHQpKTt2YXIgdT14LnN5bWJvbE51bWJlcih0Lm14fHxvLnN5bWJvbCl8fDA7dC5vbT11JTIwMD49MTAwLGUuYXR0cigiZCIsdyh1LGwpKX12YXIgZixoLHAsZD0hMTtpZih0LnNvKXA9cy5vdXRsaWVyd2lkdGgsaD1zLm91dGxpZXJjb2xvcixmPW8ub3V0bGllcmNvbG9yO2Vsc2V7dmFyIG09KHN8fHt9KS53aWR0aDtwPSh0Lm1sdysxfHxtKzF8fCh0LnRyYWNlPyh0LnRyYWNlLm1hcmtlci5saW5lfHx7fSkud2lkdGg6MCkrMSktMXx8MCxoPSJtbGMiaW4gdD90Lm1sY2M9bi5saW5lU2NhbGUodC5tbGMpOmkuaXNBcnJheU9yVHlwZWRBcnJheShzLmNvbG9yKT9jLmRlZmF1bHRMaW5lOnMuY29sb3IsaS5pc0FycmF5T3JUeXBlZEFycmF5KG8uY29sb3IpJiYoZj1jLmRlZmF1bHRMaW5lLGQ9ITApLGY9Im1jImluIHQ/dC5tY2M9bi5tYXJrZXJTY2FsZSh0Lm1jKTpvLmNvbG9yfHwicmdiYSgwLDAsMCwwKSIsbi5zZWxlY3RlZENvbG9yRm4mJihmPW4uc2VsZWN0ZWRDb2xvckZuKHQpKX1pZih0Lm9tKWUuY2FsbChjLnN0cm9rZSxmKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6KHB8fDEpKyJweCIsZmlsbDoibm9uZSJ9KTtlbHNle2Uuc3R5bGUoInN0cm9rZS13aWR0aCIsKHQuaXNCbGFuaz8wOnApKyJweCIpO3ZhciBnPW8uZ3JhZGllbnQsdj10Lm1ndDt2P2Q9ITA6dj1nJiZnLnR5cGUsaS5pc0FycmF5T3JUeXBlZEFycmF5KHYpJiYodj12WzBdLE1bdl18fCh2PTApKTt2YXIgeT1vLnBhdHRlcm4sYj15JiZ4LmdldFBhdHRlcm5BdHRyKHkuc2hhcGUsdC5pLCIiKTtpZih2JiYibm9uZSIhPT12KXt2YXIgXz10Lm1nYztfP2Q9ITA6Xz1nLmNvbG9yO3ZhciBUPXIudWlkO2QmJihUKz0iLSIrdC5pKSx4LmdyYWRpZW50KGUsYSxULHYsW1swLF9dLFsxLGZdXSwiZmlsbCIpfWVsc2UgaWYoYil7dmFyIGs9eC5nZXRQYXR0ZXJuQXR0cih5LmJnY29sb3IsdC5pLG51bGwpLEE9eC5nZXRQYXR0ZXJuQXR0cih5LmZnY29sb3IsdC5pLG51bGwpLFM9eS5mZ29wYWNpdHksRT14LmdldFBhdHRlcm5BdHRyKHkuc2l6ZSx0LmksOCksTD14LmdldFBhdHRlcm5BdHRyKHkuc29saWRpdHksdC5pLC4zKSxDPXQubWNjfHxpLmlzQXJyYXlPclR5cGVkQXJyYXkoeS5zaGFwZSl8fGkuaXNBcnJheU9yVHlwZWRBcnJheSh5LmJnY29sb3IpfHxpLmlzQXJyYXlPclR5cGVkQXJyYXkoeS5zaXplKXx8aS5pc0FycmF5T3JUeXBlZEFycmF5KHkuc29saWRpdHkpLFA9ci51aWQ7QyYmKFArPSItIit0LmkpLHgucGF0dGVybihlLCJwb2ludCIsYSxQLGIsRSxMLHQubWNjLHkuZmlsbG1vZGUsayxBLFMpfWVsc2UgYy5maWxsKGUsZik7cCYmYy5zdHJva2UoZSxoKX19LHgubWFrZVBvaW50U3R5bGVGbnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10Lm1hcmtlcjtyZXR1cm4gZS5tYXJrZXJTY2FsZT14LnRyeUNvbG9yc2NhbGUociwiIiksZS5saW5lU2NhbGU9eC50cnlDb2xvcnNjYWxlKHIsImxpbmUiKSxsLnRyYWNlSXModCwic3ltYm9scyIpJiYoZS5tczJtcmM9Zy5pc0J1YmJsZSh0KT92KHQpOmZ1bmN0aW9uKCl7cmV0dXJuKHIuc2l6ZXx8NikvMn0pLHQuc2VsZWN0ZWRwb2ludHMmJmkuZXh0ZW5kRmxhdChlLHgubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucyh0KSksZX0seC5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5zZWxlY3RlZHx8e30sbj10LnVuc2VsZWN0ZWR8fHt9LGE9dC5tYXJrZXJ8fHt9LG89ci5tYXJrZXJ8fHt9LHM9bi5tYXJrZXJ8fHt9LGM9YS5vcGFjaXR5LHU9by5vcGFjaXR5LGY9cy5vcGFjaXR5LGg9dm9pZCAwIT09dSxwPXZvaWQgMCE9PWY7KGkuaXNBcnJheU9yVHlwZWRBcnJheShjKXx8aHx8cCkmJihlLnNlbGVjdGVkT3BhY2l0eUZuPWZ1bmN0aW9uKHQpe3ZhciBlPXZvaWQgMD09PXQubW8/YS5vcGFjaXR5OnQubW87cmV0dXJuIHQuc2VsZWN0ZWQ/aD91OmU6cD9mOm0qZX0pO3ZhciBkPWEuY29sb3IsZz1vLmNvbG9yLHY9cy5jb2xvcjsoZ3x8dikmJihlLnNlbGVjdGVkQ29sb3JGbj1mdW5jdGlvbih0KXt2YXIgZT10Lm1jY3x8ZDtyZXR1cm4gdC5zZWxlY3RlZD9nfHxlOnZ8fGV9KTt2YXIgeT1hLnNpemUseD1vLnNpemUsYj1zLnNpemUsXz12b2lkIDAhPT14LHc9dm9pZCAwIT09YjtyZXR1cm4gbC50cmFjZUlzKHQsInN5bWJvbHMiKSYmKF98fHcpJiYoZS5zZWxlY3RlZFNpemVGbj1mdW5jdGlvbih0KXt2YXIgZT10Lm1yY3x8eS8yO3JldHVybiB0LnNlbGVjdGVkP18/eC8yOmU6dz9iLzI6ZX0pLGV9LHgubWFrZVNlbGVjdGVkVGV4dFN0eWxlRm5zPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5zZWxlY3RlZHx8e30sbj10LnVuc2VsZWN0ZWR8fHt9LGk9dC50ZXh0Zm9udHx8e30sYT1yLnRleHRmb250fHx7fSxvPW4udGV4dGZvbnR8fHt9LHM9aS5jb2xvcixsPWEuY29sb3IsdT1vLmNvbG9yO3JldHVybiBlLnNlbGVjdGVkVGV4dENvbG9yRm49ZnVuY3Rpb24odCl7dmFyIGU9dC50Y3x8cztyZXR1cm4gdC5zZWxlY3RlZD9sfHxlOnV8fChsP2U6Yy5hZGRPcGFjaXR5KGUsbSkpfSxlfSx4LnNlbGVjdGVkUG9pbnRTdHlsZT1mdW5jdGlvbih0LGUpe2lmKHQuc2l6ZSgpJiZlLnNlbGVjdGVkcG9pbnRzKXt2YXIgcj14Lm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnMoZSksaT1lLm1hcmtlcnx8e30sYT1bXTtyLnNlbGVjdGVkT3BhY2l0eUZuJiZhLnB1c2goKGZ1bmN0aW9uKHQsZSl7dC5zdHlsZSgib3BhY2l0eSIsci5zZWxlY3RlZE9wYWNpdHlGbihlKSl9KSksci5zZWxlY3RlZENvbG9yRm4mJmEucHVzaCgoZnVuY3Rpb24odCxlKXtjLmZpbGwodCxyLnNlbGVjdGVkQ29sb3JGbihlKSl9KSksci5zZWxlY3RlZFNpemVGbiYmYS5wdXNoKChmdW5jdGlvbih0LGUpe3ZhciBuPWUubXh8fGkuc3ltYm9sfHwwLGE9ci5zZWxlY3RlZFNpemVGbihlKTt0LmF0dHIoImQiLHcoeC5zeW1ib2xOdW1iZXIobiksYSkpLGUubXJjMj1hfSkpLGEubGVuZ3RoJiZ0LmVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPTA7cjxhLmxlbmd0aDtyKyspYVtyXShlLHQpfSkpfX0seC50cnlDb2xvcnNjYWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZT9pLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCk6dDtpZihyKXt2YXIgbj1yLmNvbG9yO2lmKChyLmNvbG9yc2NhbGV8fHIuX2NvbG9yQXgpJiZpLmlzQXJyYXlPclR5cGVkQXJyYXkobikpcmV0dXJuIHUubWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlKHIpfXJldHVybiBpLmlkZW50aXR5fTt2YXIgUz17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjAsYm90dG9tOjEsdG9wOi0xfTtmdW5jdGlvbiBFKHQsZSxyLGkpe3ZhciBhPW4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLG89LTEhPT1lLmluZGV4T2YoInRvcCIpPyJ0b3AiOi0xIT09ZS5pbmRleE9mKCJib3R0b20iKT8iYm90dG9tIjoibWlkZGxlIixzPS0xIT09ZS5pbmRleE9mKCJsZWZ0Iik/ImVuZCI6LTEhPT1lLmluZGV4T2YoInJpZ2h0Iik/InN0YXJ0IjoibWlkZGxlIixsPWk/aS8uOCsxOjAsYz0oaC5saW5lQ291bnQodCktMSkqZCsxLHU9U1tzXSpsLHA9Ljc1KnIrU1tvXSpsKyhTW29dLTEpKmMqci8yO3QuYXR0cigidGV4dC1hbmNob3IiLHMpLGEuYXR0cigidHJhbnNmb3JtIixmKHUscCkpfWZ1bmN0aW9uIEwodCxlKXt2YXIgcj10LnRzfHxlLnRleHRmb250LnNpemU7cmV0dXJuIG8ocikmJnI+MD9yOjB9eC50ZXh0UG9pbnRTdHlsZT1mdW5jdGlvbih0LGUscil7aWYodC5zaXplKCkpe3ZhciBhO2lmKGUuc2VsZWN0ZWRwb2ludHMpe3ZhciBvPXgubWFrZVNlbGVjdGVkVGV4dFN0eWxlRm5zKGUpO2E9by5zZWxlY3RlZFRleHRDb2xvckZufXZhciBzPWUudGV4dHRlbXBsYXRlLGw9ci5fZnVsbExheW91dDt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBvPW4uc2VsZWN0KHRoaXMpLGM9cz9pLmV4dHJhY3RPcHRpb24odCxlLCJ0eHQiLCJ0ZXh0dGVtcGxhdGUiKTppLmV4dHJhY3RPcHRpb24odCxlLCJ0eCIsInRleHQiKTtpZihjfHwwPT09Yyl7aWYocyl7dmFyIHU9ZS5fbW9kdWxlLmZvcm1hdExhYmVscyxmPXU/dSh0LGUsbCk6e30scD17fTt5KHAsZSx0LmkpO3ZhciBkPWUuX21ldGF8fHt9O2M9aS50ZXh0dGVtcGxhdGVTdHJpbmcoYyxmLGwuX2QzbG9jYWxlLHAsdCxkKX12YXIgbT10LnRwfHxlLnRleHRwb3NpdGlvbixnPUwodCxlKSx2PWE/YSh0KTp0LnRjfHxlLnRleHRmb250LmNvbG9yO28uY2FsbCh4LmZvbnQsdC50Znx8ZS50ZXh0Zm9udC5mYW1pbHksZyx2KS50ZXh0KGMpLmNhbGwoaC5jb252ZXJ0VG9Uc3BhbnMscikuY2FsbChFLG0sZyx0Lm1yYyl9ZWxzZSBvLnJlbW92ZSgpfSkpfX0seC5zZWxlY3RlZFRleHRTdHlsZT1mdW5jdGlvbih0LGUpe2lmKHQuc2l6ZSgpJiZlLnNlbGVjdGVkcG9pbnRzKXt2YXIgcj14Lm1ha2VTZWxlY3RlZFRleHRTdHlsZUZucyhlKTt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9ci5zZWxlY3RlZFRleHRDb2xvckZuKHQpLG89dC50cHx8ZS50ZXh0cG9zaXRpb24scz1MKHQsZSk7Yy5maWxsKGksYSksRShpLG8scyx0Lm1yYzJ8fHQubXJjKX0pKX19O2Z1bmN0aW9uIEModCxlLHIsaSl7dmFyIGE9dFswXS1lWzBdLG89dFsxXS1lWzFdLHM9clswXS1lWzBdLGw9clsxXS1lWzFdLGM9TWF0aC5wb3coYSphK28qbywuMjUpLHU9TWF0aC5wb3cocypzK2wqbCwuMjUpLGY9KHUqdSphLWMqYypzKSppLGg9KHUqdSpvLWMqYypsKSppLHA9Myp1KihjK3UpLGQ9MypjKihjK3UpO3JldHVybltbbi5yb3VuZChlWzBdKyhwJiZmL3ApLDIpLG4ucm91bmQoZVsxXSsocCYmaC9wKSwyKV0sW24ucm91bmQoZVswXS0oZCYmZi9kKSwyKSxuLnJvdW5kKGVbMV0tKGQmJmgvZCksMildXX14LnNtb290aG9wZW49ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwzKXJldHVybiJNIit0LmpvaW4oIkwiKTt2YXIgcixuPSJNIit0WzBdLGk9W107Zm9yKHI9MTtyPHQubGVuZ3RoLTE7cisrKWkucHVzaChDKHRbci0xXSx0W3JdLHRbcisxXSxlKSk7Zm9yKG4rPSJRIitpWzBdWzBdKyIgIit0WzFdLHI9MjtyPHQubGVuZ3RoLTE7cisrKW4rPSJDIitpW3ItMl1bMV0rIiAiK2lbci0xXVswXSsiICIrdFtyXTtyZXR1cm4gbis9IlEiK2lbdC5sZW5ndGgtM11bMV0rIiAiK3RbdC5sZW5ndGgtMV19LHguc21vb3RoY2xvc2VkPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MylyZXR1cm4iTSIrdC5qb2luKCJMIikrIloiO3ZhciByLG49Ik0iK3RbMF0saT10Lmxlbmd0aC0xLGE9W0ModFtpXSx0WzBdLHRbMV0sZSldO2ZvcihyPTE7cjxpO3IrKylhLnB1c2goQyh0W3ItMV0sdFtyXSx0W3IrMV0sZSkpO2ZvcihhLnB1c2goQyh0W2ktMV0sdFtpXSx0WzBdLGUpKSxyPTE7cjw9aTtyKyspbis9IkMiK2Fbci0xXVsxXSsiICIrYVtyXVswXSsiICIrdFtyXTtyZXR1cm4gbis9IkMiK2FbaV1bMV0rIiAiK2FbMF1bMF0rIiAiK3RbMF0rIloifTt2YXIgUD17aHY6ZnVuY3Rpb24odCxlKXtyZXR1cm4iSCIrbi5yb3VuZChlWzBdLDIpKyJWIituLnJvdW5kKGVbMV0sMil9LHZoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIlYiK24ucm91bmQoZVsxXSwyKSsiSCIrbi5yb3VuZChlWzBdLDIpfSxodmg6ZnVuY3Rpb24odCxlKXtyZXR1cm4iSCIrbi5yb3VuZCgodFswXStlWzBdKS8yLDIpKyJWIituLnJvdW5kKGVbMV0sMikrIkgiK24ucm91bmQoZVswXSwyKX0sdmh2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIlYiK24ucm91bmQoKHRbMV0rZVsxXSkvMiwyKSsiSCIrbi5yb3VuZChlWzBdLDIpKyJWIituLnJvdW5kKGVbMV0sMil9fSxJPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIkwiK24ucm91bmQoZVswXSwyKSsiLCIrbi5yb3VuZChlWzFdLDIpfTt4LnN0ZXBzPWZ1bmN0aW9uKHQpe3ZhciBlPVBbdF18fEk7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0iTSIrbi5yb3VuZCh0WzBdWzBdLDIpKyIsIituLnJvdW5kKHRbMF1bMV0sMiksaT0xO2k8dC5sZW5ndGg7aSsrKXIrPWUodFtpLTFdLHRbaV0pO3JldHVybiByfX0seC5tYWtlVGVzdGVyPWZ1bmN0aW9uKCl7dmFyIHQ9aS5lbnN1cmVTaW5nbGVCeUlkKG4uc2VsZWN0KCJib2R5IiksInN2ZyIsImpzLXBsb3RseS10ZXN0ZXIiLChmdW5jdGlvbih0KXt0LmF0dHIocC5zdmdBdHRycykuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiLTEwMDAwcHgiLHRvcDoiLTEwMDAwcHgiLHdpZHRoOiI5MDAwcHgiLGhlaWdodDoiOTAwMHB4Iiwiei1pbmRleCI6IjEifSl9KSksZT1pLmVuc3VyZVNpbmdsZSh0LCJwYXRoIiwianMtcmVmZXJlbmNlLXBvaW50IiwoZnVuY3Rpb24odCl7dC5hdHRyKCJkIiwiTTAsMEgxVjFIMFoiKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6MCxmaWxsOiJibGFjayJ9KX0pKTt4LnRlc3Rlcj10LHgudGVzdHJlZj1lfSx4LnNhdmVkQkJveGVzPXt9O3ZhciBPPTA7ZnVuY3Rpb24geih0KXt2YXIgZT10LmdldEF0dHJpYnV0ZSgiZGF0YS11bmZvcm1hdHRlZCIpO2lmKG51bGwhPT1lKXJldHVybiBlK3QuZ2V0QXR0cmlidXRlKCJkYXRhLW1hdGgiKSt0LmdldEF0dHJpYnV0ZSgidGV4dC1hbmNob3IiKSt0LmdldEF0dHJpYnV0ZSgic3R5bGUiKX1mdW5jdGlvbiBEKHQsZSl7aWYoIXQpcmV0dXJuIG51bGw7dmFyIHI9ZS5fY29udGV4dCxuPXIuX2V4cG9ydGVkUGxvdD8iIjpyLl9iYXNlVXJsfHwiIjtyZXR1cm4gbj8idXJsKCciK24rIiMiK3QrIicpIjoidXJsKCMiK3QrIikifXguYkJveD1mdW5jdGlvbih0LGUscil7dmFyIGEsbyxzO2lmKHJ8fChyPXoodCkpLHIpe2lmKGE9eC5zYXZlZEJCb3hlc1tyXSlyZXR1cm4gaS5leHRlbmRGbGF0KHt9LGEpfWVsc2UgaWYoMT09PXQuY2hpbGROb2Rlcy5sZW5ndGgpe3ZhciBsPXQuY2hpbGROb2Rlc1swXTtpZihyPXoobCkpe3ZhciBjPStsLmdldEF0dHJpYnV0ZSgieCIpfHwwLHU9K2wuZ2V0QXR0cmlidXRlKCJ5Iil8fDAsZj1sLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIik7aWYoIWYpe3ZhciBwPXguYkJveChsLCExLHIpO3JldHVybiBjJiYocC5sZWZ0Kz1jLHAucmlnaHQrPWMpLHUmJihwLnRvcCs9dSxwLmJvdHRvbSs9dSkscH1pZihyKz0ifiIrYysifiIrdSsifiIrZixhPXguc2F2ZWRCQm94ZXNbcl0pcmV0dXJuIGkuZXh0ZW5kRmxhdCh7fSxhKX19ZT9vPXQ6KHM9eC50ZXN0ZXIubm9kZSgpLG89dC5jbG9uZU5vZGUoITApLHMuYXBwZW5kQ2hpbGQobykpLG4uc2VsZWN0KG8pLmF0dHIoInRyYW5zZm9ybSIsbnVsbCkuY2FsbChoLnBvc2l0aW9uVGV4dCwwLDApO3ZhciBkPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbT14LnRlc3RyZWYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2V8fHMucmVtb3ZlQ2hpbGQobyk7dmFyIGc9e2hlaWdodDpkLmhlaWdodCx3aWR0aDpkLndpZHRoLGxlZnQ6ZC5sZWZ0LW0ubGVmdCx0b3A6ZC50b3AtbS50b3AscmlnaHQ6ZC5yaWdodC1tLmxlZnQsYm90dG9tOmQuYm90dG9tLW0udG9wfTtyZXR1cm4gTz49MWU0JiYoeC5zYXZlZEJCb3hlcz17fSxPPTApLHImJih4LnNhdmVkQkJveGVzW3JdPWcpLE8rKyxpLmV4dGVuZEZsYXQoe30sZyl9LHguc2V0Q2xpcFVybD1mdW5jdGlvbih0LGUscil7dC5hdHRyKCJjbGlwLXBhdGgiLEQoZSxyKSl9LHguZ2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0W3QuYXR0cj8iYXR0ciI6ImdldEF0dHJpYnV0ZSJdKCJ0cmFuc2Zvcm0iKXx8IiIpLnJlcGxhY2UoLy4qXGJ0cmFuc2xhdGVcKCgtP1xkKlwuP1xkKilbXi1cZF0qKC0/XGQqXC4/XGQqKVteXGRdLiovLChmdW5jdGlvbih0LGUscil7cmV0dXJuW2Uscl0uam9pbigiICIpfSkpLnNwbGl0KCIgIik7cmV0dXJue3g6K2VbMF18fDAseTorZVsxXXx8MH19LHguc2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiLGk9dC5hdHRyPyJhdHRyIjoic2V0QXR0cmlidXRlIixhPXRbbl0oInRyYW5zZm9ybSIpfHwiIjtyZXR1cm4gZT1lfHwwLHI9cnx8MCxhPWEucmVwbGFjZSgvKFxidHJhbnNsYXRlXCguKj9cKTs/KS8sIiIpLnRyaW0oKSxhPShhKz1mKGUscikpLnRyaW0oKSx0W2ldKCJ0cmFuc2Zvcm0iLGEpLGF9LHguZ2V0U2NhbGU9ZnVuY3Rpb24odCl7dmFyIGU9KHRbdC5hdHRyPyJhdHRyIjoiZ2V0QXR0cmlidXRlIl0oInRyYW5zZm9ybSIpfHwiIikucmVwbGFjZSgvLipcYnNjYWxlXCgoXGQqXC4/XGQqKVteXGRdKihcZCpcLj9cZCopW15cZF0uKi8sKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZSxyXS5qb2luKCIgIil9KSkuc3BsaXQoIiAiKTtyZXR1cm57eDorZVswXXx8MSx5OitlWzFdfHwxfX0seC5zZXRTY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5hdHRyPyJhdHRyIjoiZ2V0QXR0cmlidXRlIixpPXQuYXR0cj8iYXR0ciI6InNldEF0dHJpYnV0ZSIsYT10W25dKCJ0cmFuc2Zvcm0iKXx8IiI7cmV0dXJuIGU9ZXx8MSxyPXJ8fDEsYT1hLnJlcGxhY2UoLyhcYnNjYWxlXCguKj9cKTs/KS8sIiIpLnRyaW0oKSxhPShhKz0ic2NhbGUoIitlKyIsIityKyIpIikudHJpbSgpLHRbaV0oInRyYW5zZm9ybSIsYSksYX07dmFyIFI9L1xzKnNjLiovO3guc2V0UG9pbnRHcm91cFNjYWxlPWZ1bmN0aW9uKHQsZSxyKXtpZihlPWV8fDEscj1yfHwxLHQpe3ZhciBuPTE9PT1lJiYxPT09cj8iIjoic2NhbGUoIitlKyIsIityKyIpIjt0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKXx8IiIpLnJlcGxhY2UoUiwiIik7dD0odCs9bikudHJpbSgpLHRoaXMuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpfSkpfX07dmFyIEY9L3RyYW5zbGF0ZVwoW14pXSpcKVxzKiQvO3guc2V0VGV4dFBvaW50c1NjYWxlPWZ1bmN0aW9uKHQsZSxyKXt0JiZ0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQsaT1uLnNlbGVjdCh0aGlzKSxhPWkuc2VsZWN0KCJ0ZXh0Iik7aWYoYS5ub2RlKCkpe3ZhciBvPXBhcnNlRmxvYXQoYS5hdHRyKCJ4Iil8fDApLHM9cGFyc2VGbG9hdChhLmF0dHIoInkiKXx8MCksbD0oaS5hdHRyKCJ0cmFuc2Zvcm0iKXx8IiIpLm1hdGNoKEYpO3Q9MT09PWUmJjE9PT1yP1tdOltmKG8scyksInNjYWxlKCIrZSsiLCIrcisiKSIsZigtbywtcyldLGwmJnQucHVzaChsKSxpLmF0dHIoInRyYW5zZm9ybSIsdC5qb2luKCIiKSl9fSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjY3NSwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzQ0LCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo3NTEsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3NTMsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMiwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIjoxMjA4LCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyI6MTIxNiwiLi4vY29sb3IiOjYzOSwiLi4vY29sb3JzY2FsZSI6NjUxLCIuL3N5bWJvbF9kZWZzIjo2NjIsIkBwbG90bHkvZDMiOjU4LCJmYXN0LWlzbnVtZXJpYyI6MjQyLHRpbnljb2xvcjI6NTcyfV0sNjYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKTtlLmV4cG9ydHM9e2NpcmNsZTp7bjowLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsMEEiK2UrIiwiK2UrIiAwIDEsMSAwLC0iK2UrIkEiK2UrIiwiK2UrIiAwIDAsMSAiK2UrIiwwWiJ9fSxzcXVhcmU6e246MSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiSC0iK2UrIlYtIitlKyJIIitlKyJaIn19LGRpYW1vbmQ6e246MixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4zKnQsMik7cmV0dXJuIk0iK2UrIiwwTDAsIitlKyJMLSIrZSsiLDBMMCwtIitlKyJaIn19LGNyb3NzOntuOjMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC40KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNIityKyIsIitlKyJIIitlKyJWIityKyJILSIrZSsiViIrZSsiSC0iK3IrIlYtIitlKyJILSIrZSsiVi0iK3IrIkgiK2UrIlYtIitlKyJIIityKyJaIn19LHg6e246NCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjgqdC9NYXRoLnNxcnQoMiksMikscj0ibCIrZSsiLCIrZSxpPSJsIitlKyIsLSIrZSxhPSJsLSIrZSsiLC0iK2Usbz0ibC0iK2UrIiwiK2U7cmV0dXJuIk0wLCIrZStyK2krYStpK2ErbythK28rcitvK3IrIloifX0sInRyaWFuZ2xlLXVwIjp7bjo1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNLSIrZSsiLCIrbi5yb3VuZCh0LzIsMikrIkgiK2UrIkwwLC0iK24ucm91bmQodCwyKSsiWiJ9fSwidHJpYW5nbGUtZG93biI6e246NixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm4iTS0iK2UrIiwtIituLnJvdW5kKHQvMiwyKSsiSCIrZSsiTDAsIituLnJvdW5kKHQsMikrIloifX0sInRyaWFuZ2xlLWxlZnQiOntuOjcsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuIk0iK24ucm91bmQodC8yLDIpKyIsLSIrZSsiViIrZSsiTC0iK24ucm91bmQodCwyKSsiLDBaIn19LCJ0cmlhbmdsZS1yaWdodCI6e246OCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm4iTS0iK24ucm91bmQodC8yLDIpKyIsLSIrZSsiViIrZSsiTCIrbi5yb3VuZCh0LDIpKyIsMFoifX0sInRyaWFuZ2xlLW5lIjp7bjo5LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTS0iK3IrIiwtIitlKyJIIitlKyJWIityKyJaIn19LCJ0cmlhbmdsZS1zZSI6e246MTAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNIitlKyIsLSIrcisiViIrZSsiSC0iK3IrIloifX0sInRyaWFuZ2xlLXN3Ijp7bjoxMSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0iK3IrIiwiK2UrIkgtIitlKyJWLSIrcisiWiJ9fSwidHJpYW5nbGUtbnciOntuOjEyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTS0iK2UrIiwiK3IrIlYtIitlKyJIIityKyJaIn19LHBlbnRhZ29uOntuOjEzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguOTUxKnQsMikscj1uLnJvdW5kKC41ODgqdCwyKSxpPW4ucm91bmQoLXQsMiksYT1uLnJvdW5kKC0uMzA5KnQsMik7cmV0dXJuIk0iK2UrIiwiK2ErIkwiK3IrIiwiK24ucm91bmQoLjgwOSp0LDIpKyJILSIrcisiTC0iK2UrIiwiK2ErIkwwLCIraSsiWiJ9fSxoZXhhZ29uOntuOjE0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpLHI9bi5yb3VuZCh0LzIsMiksaT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpLzIsMik7cmV0dXJuIk0iK2krIiwtIityKyJWIityKyJMMCwiK2UrIkwtIitpKyIsIityKyJWLSIrcisiTDAsLSIrZSsiWiJ9fSxoZXhhZ29uMjp7bjoxNSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKSxyPW4ucm91bmQodC8yLDIpLGk9bi5yb3VuZCh0Kk1hdGguc3FydCgzKS8yLDIpO3JldHVybiJNLSIrcisiLCIraSsiSCIrcisiTCIrZSsiLDBMIityKyIsLSIraSsiSC0iK3IrIkwtIitlKyIsMFoifX0sb2N0YWdvbjp7bjoxNixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjkyNCp0LDIpLHI9bi5yb3VuZCguMzgzKnQsMik7cmV0dXJuIk0tIityKyIsLSIrZSsiSCIrcisiTCIrZSsiLC0iK3IrIlYiK3IrIkwiK3IrIiwiK2UrIkgtIityKyJMLSIrZSsiLCIrcisiVi0iK3IrIloifX0sc3Rhcjp7bjoxNyxmOmZ1bmN0aW9uKHQpe3ZhciBlPTEuNCp0LHI9bi5yb3VuZCguMjI1KmUsMiksaT1uLnJvdW5kKC45NTEqZSwyKSxhPW4ucm91bmQoLjM2MyplLDIpLG89bi5yb3VuZCguNTg4KmUsMikscz1uLnJvdW5kKC1lLDIpLGw9bi5yb3VuZCgtLjMwOSplLDIpLGM9bi5yb3VuZCguMTE4KmUsMiksdT1uLnJvdW5kKC44MDkqZSwyKTtyZXR1cm4iTSIrcisiLCIrbCsiSCIraSsiTCIrYSsiLCIrYysiTCIrbysiLCIrdSsiTDAsIituLnJvdW5kKC4zODIqZSwyKSsiTC0iK28rIiwiK3UrIkwtIithKyIsIitjKyJMLSIraSsiLCIrbCsiSC0iK3IrIkwwLCIrcysiWiJ9fSxoZXhhZ3JhbTp7bjoxOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjY2KnQsMikscj1uLnJvdW5kKC4zOCp0LDIpLGk9bi5yb3VuZCguNzYqdCwyKTtyZXR1cm4iTS0iK2krIiwwbC0iK3IrIiwtIitlKyJoIitpKyJsIityKyIsLSIrZSsibCIrcisiLCIrZSsiaCIraSsibC0iK3IrIiwiK2UrImwiK3IrIiwiK2UrImgtIitpKyJsLSIrcisiLCIrZSsibC0iK3IrIiwtIitlKyJoLSIraSsiWiJ9fSwic3Rhci10cmlhbmdsZS11cCI6e246MTksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpKi44LDIpLHI9bi5yb3VuZCguOCp0LDIpLGk9bi5yb3VuZCgxLjYqdCwyKSxhPW4ucm91bmQoNCp0LDIpLG89IkEgIithKyIsIithKyIgMCAwIDEgIjtyZXR1cm4iTS0iK2UrIiwiK3IrbytlKyIsIityK28rIjAsLSIraStvKyItIitlKyIsIityKyJaIn19LCJzdGFyLXRyaWFuZ2xlLWRvd24iOntuOjIwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0Kk1hdGguc3FydCgzKSouOCwyKSxyPW4ucm91bmQoLjgqdCwyKSxpPW4ucm91bmQoMS42KnQsMiksYT1uLnJvdW5kKDQqdCwyKSxvPSJBICIrYSsiLCIrYSsiIDAgMCAxICI7cmV0dXJuIk0iK2UrIiwtIityK28rIi0iK2UrIiwtIityK28rIjAsIitpK28rZSsiLC0iK3IrIloifX0sInN0YXItc3F1YXJlIjp7bjoyMSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4xKnQsMikscj1uLnJvdW5kKDIqdCwyKSxpPSJBICIrcisiLCIrcisiIDAgMCAxICI7cmV0dXJuIk0tIitlKyIsLSIrZStpKyItIitlKyIsIitlK2krZSsiLCIrZStpK2UrIiwtIitlK2krIi0iK2UrIiwtIitlKyJaIn19LCJzdGFyLWRpYW1vbmQiOntuOjIyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKSxyPW4ucm91bmQoMS45KnQsMiksaT0iQSAiK3IrIiwiK3IrIiAwIDAgMSAiO3JldHVybiJNLSIrZSsiLDAiK2krIjAsIitlK2krZSsiLDAiK2krIjAsLSIrZStpKyItIitlKyIsMFoifX0sImRpYW1vbmQtdGFsbCI6e246MjMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC43KnQsMikscj1uLnJvdW5kKDEuNCp0LDIpO3JldHVybiJNMCwiK3IrIkwiK2UrIiwwTDAsLSIrcisiTC0iK2UrIiwwWiJ9fSwiZGlhbW9uZC13aWRlIjp7bjoyNCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMikscj1uLnJvdW5kKC43KnQsMik7cmV0dXJuIk0wLCIrcisiTCIrZSsiLDBMMCwtIityKyJMLSIrZSsiLDBaIn19LGhvdXJnbGFzczp7bjoyNSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiSC0iK2UrIkwiK2UrIiwtIitlKyJILSIrZSsiWiJ9LG5vRG90OiEwfSxib3d0aWU6e246MjYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIlYtIitlKyJMLSIrZSsiLCIrZSsiVi0iK2UrIloifSxub0RvdDohMH0sImNpcmNsZS1jcm9zcyI6e246MjcsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2UrIk0iK2UrIiwwSC0iK2UrIk0iK2UrIiwwQSIrZSsiLCIrZSsiIDAgMSwxIDAsLSIrZSsiQSIrZSsiLCIrZSsiIDAgMCwxICIrZSsiLDBaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJjaXJjbGUteCI6e246MjgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMikscj1uLnJvdW5kKHQvTWF0aC5zcXJ0KDIpLDIpO3JldHVybiJNIityKyIsIityKyJMLSIrcisiLC0iK3IrIk0iK3IrIiwtIityKyJMLSIrcisiLCIrcisiTSIrZSsiLDBBIitlKyIsIitlKyIgMCAxLDEgMCwtIitlKyJBIitlKyIsIitlKyIgMCAwLDEgIitlKyIsMFoifSxuZWVkTGluZTohMCxub0RvdDohMH0sInNxdWFyZS1jcm9zcyI6e246MjksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2UrIk0iK2UrIiwwSC0iK2UrIk0iK2UrIiwiK2UrIkgtIitlKyJWLSIrZSsiSCIrZSsiWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwic3F1YXJlLXgiOntuOjMwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJMLSIrZSsiLC0iK2UrIk0iK2UrIiwtIitlKyJMLSIrZSsiLCIrZSsiTSIrZSsiLCIrZSsiSC0iK2UrIlYtIitlKyJIIitlKyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJkaWFtb25kLWNyb3NzIjp7bjozMSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4zKnQsMik7cmV0dXJuIk0iK2UrIiwwTDAsIitlKyJMLSIrZSsiLDBMMCwtIitlKyJaTTAsLSIrZSsiViIrZSsiTS0iK2UrIiwwSCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJkaWFtb25kLXgiOntuOjMyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjMqdCwyKSxyPW4ucm91bmQoLjY1KnQsMik7cmV0dXJuIk0iK2UrIiwwTDAsIitlKyJMLSIrZSsiLDBMMCwtIitlKyJaTS0iK3IrIiwtIityKyJMIityKyIsIityKyJNLSIrcisiLCIrcisiTCIrcisiLC0iK3J9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiY3Jvc3MtdGhpbiI6e246MzMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlKyJNIitlKyIsMEgtIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJ4LXRoaW4iOntuOjM0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJMLSIrZSsiLC0iK2UrIk0iK2UrIiwtIitlKyJMLSIrZSsiLCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxhc3Rlcmlzazp7bjozNSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKC44NSp0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlKyJNIitlKyIsMEgtIitlKyJNIityKyIsIityKyJMLSIrcisiLC0iK3IrIk0iK3IrIiwtIityKyJMLSIrcisiLCIrcn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxoYXNoOntuOjM2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LzIsMikscj1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK3IrIlYtIityKyJtLSIrcisiLDBWIityKyJNIityKyIsIitlKyJILSIrcisibTAsLSIrcisiSCIrcn0sbmVlZExpbmU6ITAsbm9GaWxsOiEwfSwieS11cCI6e246MzcsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxpPW4ucm91bmQoLjgqdCwyKTtyZXR1cm4iTS0iK2UrIiwiK2krIkwwLDBNIitlKyIsIitpKyJMMCwwTTAsLSIrcisiTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sInktZG93biI6e246MzgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxpPW4ucm91bmQoLjgqdCwyKTtyZXR1cm4iTS0iK2UrIiwtIitpKyJMMCwwTSIrZSsiLC0iK2krIkwwLDBNMCwiK3IrIkwwLDAifSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJ5LWxlZnQiOntuOjM5LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoMS42KnQsMiksaT1uLnJvdW5kKC44KnQsMik7cmV0dXJuIk0iK2krIiwiK2UrIkwwLDBNIitpKyIsLSIrZSsiTDAsME0tIityKyIsMEwwLDAifSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJ5LXJpZ2h0Ijp7bjo0MCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVybiJNLSIraSsiLCIrZSsiTDAsME0tIitpKyIsLSIrZSsiTDAsME0iK3IrIiwwTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImxpbmUtZXciOntuOjQxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm4iTSIrZSsiLDBILSIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwibGluZS1ucyI6e246NDIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJsaW5lLW5lIjp7bjo0MyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLC0iK2UrIkwtIitlKyIsIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJsaW5lLW53Ijp7bjo0NCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiTC0iK2UrIiwtIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJhcnJvdy11cCI6e246NDUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0wLDBMLSIrZSsiLCIrbi5yb3VuZCgyKnQsMikrIkgiK2UrIloifSxub0RvdDohMH0sImFycm93LWRvd24iOntuOjQ2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNMCwwTC0iK2UrIiwtIituLnJvdW5kKDIqdCwyKSsiSCIrZSsiWiJ9LG5vRG90OiEwfSwiYXJyb3ctbGVmdCI6e246NDcsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdCwyKSxyPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsMEwiK2UrIiwtIityKyJWIityKyJaIn0sbm9Eb3Q6ITB9LCJhcnJvdy1yaWdodCI6e246NDgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdCwyKSxyPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsMEwtIitlKyIsLSIrcisiViIrcisiWiJ9LG5vRG90OiEwfSwiYXJyb3ctYmFyLXVwIjp7bjo0OSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTS0iK2UrIiwwSCIrZSsiTTAsMEwtIitlKyIsIituLnJvdW5kKDIqdCwyKSsiSCIrZSsiWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiYXJyb3ctYmFyLWRvd24iOntuOjUwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNLSIrZSsiLDBIIitlKyJNMCwwTC0iK2UrIiwtIituLnJvdW5kKDIqdCwyKSsiSCIrZSsiWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiYXJyb3ctYmFyLWxlZnQiOntuOjUxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQsMikscj1uLnJvdW5kKHQsMik7cmV0dXJuIk0wLC0iK3IrIlYiK3IrIk0wLDBMIitlKyIsLSIrcisiViIrcisiWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiYXJyb3ctYmFyLXJpZ2h0Ijp7bjo1MixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0LDIpLHI9bi5yb3VuZCh0LDIpO3JldHVybiJNMCwtIityKyJWIityKyJNMCwwTC0iK2UrIiwtIityKyJWIityKyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9fX0seyJAcGxvdGx5L2QzIjo1OH1dLDY2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJjYWxjIn0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGVyY2VudCIsImNvbnN0YW50Iiwic3FydCIsImRhdGEiXSxlZGl0VHlwZToiY2FsYyJ9LHN5bW1ldHJpYzp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxhcnJheTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxhcnJheW1pbnVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTAsZWRpdFR5cGU6ImNhbGMifSx2YWx1ZW1pbnVzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTAsZWRpdFR5cGU6ImNhbGMifSx0cmFjZXJlZjp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJzdHlsZSJ9LHRyYWNlcmVmbWludXM6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToic3R5bGUifSxjb3B5X3lzdHlsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InBsb3QifSxjb3B5X3pzdHlsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InN0eWxlIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6ImNhbGMiLF9kZXByZWNhdGVkOntvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJzdHlsZSJ9fX19LHt9XSw2NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vbGliIikscz10KCIuL2NvbXB1dGVfZXJyb3IiKTtmdW5jdGlvbiBsKHQsZSxyLGkpe3ZhciBsPWVbImVycm9yXyIraV18fHt9LGM9W107aWYobC52aXNpYmxlJiYtMSE9PVsibGluZWFyIiwibG9nIl0uaW5kZXhPZihyLnR5cGUpKXtmb3IodmFyIHU9cyhsKSxmPTA7Zjx0Lmxlbmd0aDtmKyspe3ZhciBoPXRbZl0scD1oLmk7aWYodm9pZCAwPT09cClwPWY7ZWxzZSBpZihudWxsPT09cCljb250aW51ZTt2YXIgZD1oW2ldO2lmKG4oci5jMmwoZCkpKXt2YXIgbT11KGQscCk7aWYobihtWzBdKSYmbihtWzFdKSl7dmFyIGc9aFtpKyJzIl09ZC1tWzBdLHY9aFtpKyJoIl09ZCttWzFdO2MucHVzaChnLHYpfX19dmFyIHk9ci5faWQseD1lLl9leHRyZW1lc1t5XSxiPWEuZmluZEV4dHJlbWVzKHIsYyxvLmV4dGVuZEZsYXQoe3RvemVybzp4Lm9wdHMudG96ZXJvfSx7cGFkZGVkOiEwfSkpO3gubWluPXgubWluLmNvbmNhdChiLm1pbikseC5tYXg9eC5tYXguY29uY2F0KGIubWF4KX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNhbGNkYXRhLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxvPW5bMF0udHJhY2U7aWYoITA9PT1vLnZpc2libGUmJmkudHJhY2VJcyhvLCJlcnJvckJhcnNPSyIpKXt2YXIgcz1hLmdldEZyb21JZCh0LG8ueGF4aXMpLGM9YS5nZXRGcm9tSWQodCxvLnlheGlzKTtsKG4sbyxzLCJ4IiksbChuLG8sYywieSIpfX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2NvbXB1dGVfZXJyb3IiOjY2NSwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDY2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuInBlcmNlbnQiPT09dD9mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hYnModCplLzEwMCl9OiJjb25zdGFudCI9PT10P2Z1bmN0aW9uKCl7cmV0dXJuIE1hdGguYWJzKGUpfToic3FydCI9PT10P2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5hYnModCkpfTp2b2lkIDB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQudHlwZSxyPXQuc3ltbWV0cmljO2lmKCJkYXRhIj09PWUpe3ZhciBpPXQuYXJyYXl8fFtdO2lmKHIpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9K2lbZV07cmV0dXJuW3Iscl19O3ZhciBhPXQuYXJyYXltaW51c3x8W107cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9K2lbZV0sbj0rYVtlXTtyZXR1cm4gaXNOYU4ocikmJmlzTmFOKG4pP1tOYU4sTmFOXTpbbnx8MCxyfHwwXX19dmFyIG89bihlLHQudmFsdWUpLHM9bihlLHQudmFsdWVtaW51cyk7cmV0dXJuIHJ8fHZvaWQgMD09PXQudmFsdWVtaW51cz9mdW5jdGlvbih0KXt2YXIgZT1vKHQpO3JldHVybltlLGVdfTpmdW5jdGlvbih0KXtyZXR1cm5bcyh0KSxvKHQpXX19fSx7fV0sNjY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikscz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7dmFyIGM9ImVycm9yXyIrbC5heGlzLHU9by5uZXdDb250YWluZXIoZSxjKSxmPXRbY118fHt9O2Z1bmN0aW9uIGgodCxlKXtyZXR1cm4gYS5jb2VyY2UoZix1LHMsdCxlKX1pZighMSE9PWgoInZpc2libGUiLHZvaWQgMCE9PWYuYXJyYXl8fHZvaWQgMCE9PWYudmFsdWV8fCJzcXJ0Ij09PWYudHlwZSkpe3ZhciBwPWgoInR5cGUiLCJhcnJheSJpbiBmPyJkYXRhIjoicGVyY2VudCIpLGQ9ITA7InNxcnQiIT09cCYmKGQ9aCgic3ltbWV0cmljIiwhKCgiZGF0YSI9PT1wPyJhcnJheW1pbnVzIjoidmFsdWVtaW51cyIpaW4gZikpKSwiZGF0YSI9PT1wPyhoKCJhcnJheSIpLGgoInRyYWNlcmVmIiksZHx8KGgoImFycmF5bWludXMiKSxoKCJ0cmFjZXJlZm1pbnVzIikpKToicGVyY2VudCIhPT1wJiYiY29uc3RhbnQiIT09cHx8KGgoInZhbHVlIiksZHx8aCgidmFsdWVtaW51cyIpKTt2YXIgbT0iY29weV8iK2wuaW5oZXJpdCsic3R5bGUiO2lmKGwuaW5oZXJpdCkoZVsiZXJyb3JfIitsLmluaGVyaXRdfHx7fSkudmlzaWJsZSYmaChtLCEoZi5jb2xvcnx8bihmLnRoaWNrbmVzcyl8fG4oZi53aWR0aCkpKTtsLmluaGVyaXQmJnVbbV18fChoKCJjb2xvciIsciksaCgidGhpY2tuZXNzIiksaCgid2lkdGgiLGkudHJhY2VJcyhlLCJnbDNkIik/MDo0KSl9fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2F0dHJpYnV0ZXMiOjY2MywiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDY2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxhPXQoIi4vYXR0cmlidXRlcyIpLG89e2Vycm9yX3g6bi5leHRlbmRGbGF0KHt9LGEpLGVycm9yX3k6bi5leHRlbmRGbGF0KHt9LGEpfTtkZWxldGUgby5lcnJvcl94LmNvcHlfenN0eWxlLGRlbGV0ZSBvLmVycm9yX3kuY29weV96c3R5bGUsZGVsZXRlIG8uZXJyb3JfeS5jb3B5X3lzdHlsZTt2YXIgcz17ZXJyb3JfeDpuLmV4dGVuZEZsYXQoe30sYSksZXJyb3JfeTpuLmV4dGVuZEZsYXQoe30sYSksZXJyb3JfejpuLmV4dGVuZEZsYXQoe30sYSl9O2RlbGV0ZSBzLmVycm9yX3guY29weV95c3R5bGUsZGVsZXRlIHMuZXJyb3JfeS5jb3B5X3lzdHlsZSxkZWxldGUgcy5lcnJvcl96LmNvcHlfeXN0eWxlLGRlbGV0ZSBzLmVycm9yX3ouY29weV96c3R5bGUsZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImVycm9yYmFycyIsc2NoZW1hOnt0cmFjZXM6e3NjYXR0ZXI6byxiYXI6byxoaXN0b2dyYW06byxzY2F0dGVyM2Q6aShzLCJjYWxjIiwibmVzdGVkIiksc2NhdHRlcmdsOmkobywiY2FsYyIsIm5lc3RlZCIpfX0sc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksbWFrZUNvbXB1dGVFcnJvcjp0KCIuL2NvbXB1dGVfZXJyb3IiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKSxob3ZlckluZm86ZnVuY3Rpb24odCxlLHIpeyhlLmVycm9yX3l8fHt9KS52aXNpYmxlJiYoci55ZXJyPXQueWgtdC55LGUuZXJyb3JfeS5zeW1tZXRyaWN8fChyLnllcnJuZWc9dC55LXQueXMpKTsoZS5lcnJvcl94fHx7fSkudmlzaWJsZSYmKHIueGVycj10LnhoLXQueCxlLmVycm9yX3guc3ltbWV0cmljfHwoci54ZXJybmVnPXQueC10LnhzKSl9fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODA5LCIuL2F0dHJpYnV0ZXMiOjY2MywiLi9jYWxjIjo2NjQsIi4vY29tcHV0ZV9lcnJvciI6NjY1LCIuL2RlZmF1bHRzIjo2NjYsIi4vcGxvdCI6NjY4LCIuL3N0eWxlIjo2Njl9XSw2Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uL2RyYXdpbmciKSxvPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3ZhciBsPXIueGF4aXMsYz1yLnlheGlzLHU9cyYmcy5kdXJhdGlvbj4wO2UuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIGYsaD1lWzBdLnRyYWNlLHA9aC5lcnJvcl94fHx7fSxkPWguZXJyb3JfeXx8e307aC5pZHMmJihmPWZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSk7dmFyIG09by5oYXNNYXJrZXJzKGgpJiZoLm1hcmtlci5tYXhkaXNwbGF5ZWQ+MDtkLnZpc2libGV8fHAudmlzaWJsZXx8KGU9W10pO3ZhciBnPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5lcnJvcmJhciIpLmRhdGEoZSxmKTtpZihnLmV4aXQoKS5yZW1vdmUoKSxlLmxlbmd0aCl7cC52aXNpYmxlfHxnLnNlbGVjdEFsbCgicGF0aC54ZXJyb3IiKS5yZW1vdmUoKSxkLnZpc2libGV8fGcuc2VsZWN0QWxsKCJwYXRoLnllcnJvciIpLnJlbW92ZSgpLGcuc3R5bGUoIm9wYWNpdHkiLDEpO3ZhciB2PWcuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJlcnJvcmJhciIsITApO3UmJnYuc3R5bGUoIm9wYWNpdHkiLDApLnRyYW5zaXRpb24oKS5kdXJhdGlvbihzLmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMSksYS5zZXRDbGlwVXJsKGcsci5sYXllckNsaXBJZCx0KSxnLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt4OmUuYzJwKHQueCkseTpyLmMycCh0LnkpfTt2b2lkIDAhPT10LnloJiYobi55aD1yLmMycCh0LnloKSxuLnlzPXIuYzJwKHQueXMpLGkobi55cyl8fChuLm5vWVM9ITAsbi55cz1yLmMycCh0LnlzLCEwKSkpO3ZvaWQgMCE9PXQueGgmJihuLnhoPWUuYzJwKHQueGgpLG4ueHM9ZS5jMnAodC54cyksaShuLnhzKXx8KG4ubm9YUz0hMCxuLnhzPWUuYzJwKHQueHMsITApKSk7cmV0dXJuIG59KHQsbCxjKTtpZighbXx8dC52aXMpe3ZhciBhLG89ZS5zZWxlY3QoInBhdGgueWVycm9yIik7aWYoZC52aXNpYmxlJiZpKHIueCkmJmkoci55aCkmJmkoci55cykpe3ZhciBmPWQud2lkdGg7YT0iTSIrKHIueC1mKSsiLCIrci55aCsiaCIrMipmKyJtLSIrZisiLDBWIityLnlzLHIubm9ZU3x8KGErPSJtLSIrZisiLDBoIisyKmYpLCFvLnNpemUoKT9vPWUuYXBwZW5kKCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5jbGFzc2VkKCJ5ZXJyb3IiLCEwKTp1JiYobz1vLnRyYW5zaXRpb24oKS5kdXJhdGlvbihzLmR1cmF0aW9uKS5lYXNlKHMuZWFzaW5nKSksby5hdHRyKCJkIixhKX1lbHNlIG8ucmVtb3ZlKCk7dmFyIGg9ZS5zZWxlY3QoInBhdGgueGVycm9yIik7aWYocC52aXNpYmxlJiZpKHIueSkmJmkoci54aCkmJmkoci54cykpe3ZhciBnPShwLmNvcHlfeXN0eWxlP2Q6cCkud2lkdGg7YT0iTSIrci54aCsiLCIrKHIueS1nKSsidiIrMipnKyJtMCwtIitnKyJIIityLnhzLHIubm9YU3x8KGErPSJtMCwtIitnKyJ2IisyKmcpLCFoLnNpemUoKT9oPWUuYXBwZW5kKCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5jbGFzc2VkKCJ4ZXJyb3IiLCEwKTp1JiYoaD1oLnRyYW5zaXRpb24oKS5kdXJhdGlvbihzLmR1cmF0aW9uKS5lYXNlKHMuZWFzaW5nKSksaC5hdHRyKCJkIixhKX1lbHNlIGgucmVtb3ZlKCl9fSkpfX0pKX19LHsiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTYsIi4uL2RyYXdpbmciOjY2MSwiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw2Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vY29sb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ZS5lcnJvcl95fHx7fSxhPWUuZXJyb3JfeHx8e30sbz1uLnNlbGVjdCh0aGlzKTtvLnNlbGVjdEFsbCgicGF0aC55ZXJyb3IiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixyLnRoaWNrbmVzcysicHgiKS5jYWxsKGkuc3Ryb2tlLHIuY29sb3IpLGEuY29weV95c3R5bGUmJihhPXIpLG8uc2VsZWN0QWxsKCJwYXRoLnhlcnJvciIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGEudGhpY2tuZXNzKyJweCIpLmNhbGwoaS5zdHJva2UsYS5jb2xvcil9KSl9fSx7Ii4uL2NvbG9yIjo2MzksIkBwbG90bHkvZDMiOjU4fV0sNjcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLmhvdmVybGFiZWwsYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2hvdmVybGFiZWw6e2JnY29sb3I6YSh7fSxpLmJnY29sb3Ise2FycmF5T2s6ITB9KSxib3JkZXJjb2xvcjphKHt9LGkuYm9yZGVyY29sb3Ise2FycmF5T2s6ITB9KSxmb250Om4oe2FycmF5T2s6ITAsZWRpdFR5cGU6Im5vbmUifSksYWxpZ246YSh7fSxpLmFsaWduLHthcnJheU9rOiEwfSksbmFtZWxlbmd0aDphKHt9LGkubmFtZWxlbmd0aCx7YXJyYXlPazohMH0pLGVkaXRUeXBlOiJub25lIn19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4NTYsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjY4MH1dLDY3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ZnVuY3Rpb24gYSh0LGUscixpKXtpPWl8fG4uaWRlbnRpdHksQXJyYXkuaXNBcnJheSh0KSYmKGVbMF1bcl09aSh0KSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2FsY2RhdGEscj10Ll9mdWxsTGF5b3V0O2Z1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuLmNvZXJjZUhvdmVyaW5mbyh7aG92ZXJpbmZvOmV9LHtfbW9kdWxlOnQuX21vZHVsZX0scil9fWZvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1lW3NdLGM9bFswXS50cmFjZTtpZighaS50cmFjZUlzKGMsInBpZS1saWtlIikpe3ZhciB1PWkudHJhY2VJcyhjLCIyZE1hcCIpP2E6bi5maWxsQXJyYXk7dShjLmhvdmVyaW5mbyxsLCJoaSIsbyhjKSksYy5ob3ZlcnRlbXBsYXRlJiZ1KGMuaG92ZXJ0ZW1wbGF0ZSxsLCJodCIpLGMuaG92ZXJsYWJlbCYmKHUoYy5ob3ZlcmxhYmVsLmJnY29sb3IsbCwiaGJnIiksdShjLmhvdmVybGFiZWwuYm9yZGVyY29sb3IsbCwiaGJjIiksdShjLmhvdmVybGFiZWwuZm9udC5zaXplLGwsImh0cyIpLHUoYy5ob3ZlcmxhYmVsLmZvbnQuY29sb3IsbCwiaHRjIiksdShjLmhvdmVybGFiZWwuZm9udC5mYW1pbHksbCwiaHRmIiksdShjLmhvdmVybGFiZWwubmFtZWxlbmd0aCxsLCJobmwiKSx1KGMuaG92ZXJsYWJlbC5hbGlnbixsLCJodGEiKSl9fX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDR9XSw2NzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4vaG92ZXIiKS5ob3ZlcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPW4uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsIm9uQ2xpY2siKSh0LHQuX2hvdmVyZGF0YSk7ZnVuY3Rpb24gbygpe3QuZW1pdCgicGxvdGx5X2NsaWNrIix7cG9pbnRzOnQuX2hvdmVyZGF0YSxldmVudDplfSl9dm9pZCAwIT09ciYmaSh0LGUsciwhMCksdC5faG92ZXJkYXRhJiZlJiZlLnRhcmdldCYmKGEmJmEudGhlbj9hLnRoZW4obyk6bygpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uJiZlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19LHsiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi9ob3ZlciI6Njc2fV0sNjczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17WUFOR0xFOjYwLEhPVkVSQVJST1dTSVpFOjYsSE9WRVJURVhUUEFEOjMsSE9WRVJGT05UU0laRToxMyxIT1ZFUkZPTlQ6IkFyaWFsLCBzYW5zLXNlcmlmIixIT1ZFUk1JTlRJTUU6NTAsSE9WRVJJRDoiLWhvdmVyIn19LHt9XSw2NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcz1uLmV4dGVuZEZsYXQoe30sby5ob3ZlcmxhYmVsKTtlLmhvdmVydGVtcGxhdGUmJihzLm5hbWVsZW5ndGg9LTEpLGEodCxlLChmdW5jdGlvbihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfSkscyl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2F0dHJpYnV0ZXMiOjY3MCwiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIjo2Nzd9XSw2NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ci5nZXRTdWJwbG90PWZ1bmN0aW9uKHQpe3JldHVybiB0LnN1YnBsb3R8fHQueGF4aXMrdC55YXhpc3x8dC5nZW99LHIuaXNUcmFjZUluU3VicGxvdHM9ZnVuY3Rpb24odCxlKXtpZigic3Bsb20iPT09dC50eXBlKXtmb3IodmFyIG49dC54YXhlc3x8W10saT10LnlheGVzfHxbXSxhPTA7YTxuLmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspaWYoLTEhPT1lLmluZGV4T2YoblthXStpW29dKSlyZXR1cm4hMDtyZXR1cm4hMX1yZXR1cm4tMSE9PWUuaW5kZXhPZihyLmdldFN1YnBsb3QodCkpfSxyLmZsYXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT1lO3JldHVybiByfSxyLnAyYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgpLG49MDtuPHQubGVuZ3RoO24rKylyW25dPXRbbl0ucDJjKGUpO3JldHVybiByfSxyLmdldERpc3RhbmNlRnVuY3Rpb249ZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuImNsb3Nlc3QiPT09dD9pfHxyLnF1YWRyYXR1cmUoZSxuKToieCI9PT10LmNoYXJBdCgwKT9lOm59LHIuZ2V0Q2xvc2VzdD1mdW5jdGlvbih0LGUscil7aWYoITEhPT1yLmluZGV4KXIuaW5kZXg+PTAmJnIuaW5kZXg8dC5sZW5ndGg/ci5kaXN0YW5jZT0wOnIuaW5kZXg9ITE7ZWxzZSBmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9ZSh0W25dKTtpPD1yLmRpc3RhbmNlJiYoci5pbmRleD1uLHIuZGlzdGFuY2U9aSl9cmV0dXJuIHJ9LHIuaW5ib3g9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0KmU8MHx8MD09PXQ/cjoxLzB9LHIucXVhZHJhdHVyZT1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj10KHIpLGk9ZShyKTtyZXR1cm4gTWF0aC5zcXJ0KG4qbitpKmkpfX0sci5tYWtlRXZlbnREYXRhPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0iaW5kZXgiaW4gdD90LmluZGV4OnQucG9pbnROdW1iZXIsYT17ZGF0YTplLl9pbnB1dCxmdWxsRGF0YTplLGN1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXI6aX07aWYoZS5faW5kZXhUb1BvaW50cyl7dmFyIG89ZS5faW5kZXhUb1BvaW50c1tpXTsxPT09by5sZW5ndGg/YS5wb2ludEluZGV4PW9bMF06YS5wb2ludEluZGljZXM9b31lbHNlIGEucG9pbnRJbmRleD1pO3JldHVybiBlLl9tb2R1bGUuZXZlbnREYXRhP2E9ZS5fbW9kdWxlLmV2ZW50RGF0YShhLHQsZSxuLGkpOigieFZhbCJpbiB0P2EueD10LnhWYWw6IngiaW4gdCYmKGEueD10LngpLCJ5VmFsImluIHQ/YS55PXQueVZhbDoieSJpbiB0JiYoYS55PXQueSksdC54YSYmKGEueGF4aXM9dC54YSksdC55YSYmKGEueWF4aXM9dC55YSksdm9pZCAwIT09dC56TGFiZWxWYWwmJihhLno9dC56TGFiZWxWYWwpKSxyLmFwcGVuZEFycmF5UG9pbnRWYWx1ZShhLGUsaSksYX0sci5hcHBlbmRBcnJheVBvaW50VmFsdWU9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUuX2FycmF5QXR0cnM7aWYoaSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXSxjPWEobCk7aWYodm9pZCAwPT09dFtjXSl7dmFyIHU9byhuLm5lc3RlZFByb3BlcnR5KGUsbCkuZ2V0KCkscik7dm9pZCAwIT09dSYmKHRbY109dSl9fX0sci5hcHBlbmRBcnJheU11bHRpUG9pbnRWYWx1ZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUuX2FycmF5QXR0cnM7aWYoaSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXSxjPWEobCk7aWYodm9pZCAwPT09dFtjXSl7Zm9yKHZhciB1PW4ubmVzdGVkUHJvcGVydHkoZSxsKS5nZXQoKSxmPW5ldyBBcnJheShyLmxlbmd0aCksaD0wO2g8ci5sZW5ndGg7aCsrKWZbaF09byh1LHJbaF0pO3RbY109Zn19fTt2YXIgaT17aWRzOiJpZCIsbG9jYXRpb25zOiJsb2NhdGlvbiIsbGFiZWxzOiJsYWJlbCIsdmFsdWVzOiJ2YWx1ZSIsIm1hcmtlci5jb2xvcnMiOiJjb2xvciIscGFyZW50czoicGFyZW50In07ZnVuY3Rpb24gYSh0KXtyZXR1cm4gaVt0XXx8dH1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/QXJyYXkuaXNBcnJheSh0KSYmQXJyYXkuaXNBcnJheSh0W2VbMF1dKT90W2VbMF1dW2VbMV1dOnZvaWQgMDp0W2VdfXZhciBzPXt4OiEwLHk6ITB9LGw9eyJ4IHVuaWZpZWQiOiEwLCJ5IHVuaWZpZWQiOiEwfTtyLmlzVW5pZmllZEhvdmVyPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmISFsW3RdfSxyLmlzWFlob3Zlcj1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJiEhc1t0XX19LHsiLi4vLi4vbGliIjo3NzZ9XSw2NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoInRpbnljb2xvcjIiKSxvPXQoIi4uLy4uL2xpYiIpLHM9by5zdHJUcmFuc2xhdGUsbD1vLnN0clJvdGF0ZSxjPXQoIi4uLy4uL2xpYi9ldmVudHMiKSx1PXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGY9dCgiLi4vLi4vbGliL292ZXJyaWRlX2N1cnNvciIpLGg9dCgiLi4vZHJhd2luZyIpLHA9dCgiLi4vY29sb3IiKSxkPXQoIi4uL2RyYWdlbGVtZW50IiksbT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGc9dCgiLi4vLi4vcmVnaXN0cnkiKSx2PXQoIi4vaGVscGVycyIpLHk9dCgiLi9jb25zdGFudHMiKSx4PXQoIi4uL2xlZ2VuZC9kZWZhdWx0cyIpLGI9dCgiLi4vbGVnZW5kL2RyYXciKSxfPXkuWUFOR0xFLHc9TWF0aC5QSSpfLzE4MCxUPTEvTWF0aC5zaW4odyksaz1NYXRoLmNvcyh3KSxBPU1hdGguc2luKHcpLE09eS5IT1ZFUkFSUk9XU0laRSxTPXkuSE9WRVJURVhUUEFELEU9e2JveDohMCxvaGxjOiEwLHZpb2xpbjohMCxjYW5kbGVzdGljazohMH0sTD17c2NhdHRlcjohMCxzY2F0dGVyZ2w6ITAsc3Bsb206ITB9O2Z1bmN0aW9uIEModCl7cmV0dXJuW3QudHJhY2UuaW5kZXgsdC5pbmRleCx0LngwLHQueTAsdC5uYW1lLHQuYXR0cix0LnhhP3QueGEuX2lkOiIiLHQueWE/dC55YS5faWQ6IiJdLmpvaW4oIiwiKX1yLmhvdmVyPWZ1bmN0aW9uKHQsZSxyLGEpe3Q9by5nZXRHcmFwaERpdih0KSxvLnRocm90dGxlKHQuX2Z1bGxMYXlvdXQuX3VpZCt5LkhPVkVSSUQseS5IT1ZFUk1JTlRJTUUsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQsZSxyLGEpe3J8fChyPSJ4eSIpO3ZhciBzPUFycmF5LmlzQXJyYXkocik/cjpbcl0sbD10Ll9mdWxsTGF5b3V0LHU9bC5fcGxvdHN8fFtdLGg9dVtyXSxtPWwuX2hhcygiY2FydGVzaWFuIik7aWYoaCl7dmFyIHk9aC5vdmVybGF5cy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpO3M9cy5jb25jYXQoeSl9Zm9yKHZhciB4PXMubGVuZ3RoLGI9bmV3IEFycmF5KHgpLF89bmV3IEFycmF5KHgpLHc9ITEsaz0wO2s8eDtrKyspe3ZhciBBPXNba107aWYodVtBXSl3PSEwLGJba109dVtBXS54YXhpcyxfW2tdPXVbQV0ueWF4aXM7ZWxzZXtpZighbFtBXXx8IWxbQV0uX3N1YnBsb3QpcmV0dXJuIHZvaWQgby53YXJuKCJVbnJlY29nbml6ZWQgc3VicGxvdDogIitBKTt2YXIgTT1sW0FdLl9zdWJwbG90O2Jba109TS54YXhpcyxfW2tdPU0ueWF4aXN9fXZhciBTPWUuaG92ZXJtb2RlfHxsLmhvdmVybW9kZTtTJiYhdyYmKFM9ImNsb3Nlc3QiKTtpZigtMT09PVsieCIsInkiLCJjbG9zZXN0IiwieCB1bmlmaWVkIiwieSB1bmlmaWVkIl0uaW5kZXhPZihTKXx8IXQuY2FsY2RhdGF8fHQucXVlcnlTZWxlY3RvcigiLnpvb21ib3giKXx8dC5fZHJhZ2dpbmcpcmV0dXJuIGQudW5ob3ZlclJhdyh0LGUpO3ZhciBQPWwuaG92ZXJkaXN0YW5jZTstMT09PVAmJihQPTEvMCk7dmFyIE89bC5zcGlrZWRpc3RhbmNlOy0xPT09TyYmKE89MS8wKTt2YXIgQixWLEgscSxHLFksVyxYLFosSixLLFEsJCx0dD1bXSxldD1bXSxydD17aExpbmVQb2ludDpudWxsLHZMaW5lUG9pbnQ6bnVsbH0sbnQ9ITE7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoUz0iYXJyYXkiLEg9MDtIPGUubGVuZ3RoO0grKykoRz10LmNhbGNkYXRhW2VbSF0uY3VydmVOdW1iZXJ8fDBdKSYmKFk9R1swXS50cmFjZSwic2tpcCIhPT1HWzBdLnRyYWNlLmhvdmVyaW5mbyYmKGV0LnB1c2goRyksImgiPT09WS5vcmllbnRhdGlvbiYmKG50PSEwKSkpO2Vsc2V7Zm9yKHE9MDtxPHQuY2FsY2RhdGEubGVuZ3RoO3ErKylHPXQuY2FsY2RhdGFbcV0sInNraXAiIT09KFk9R1swXS50cmFjZSkuaG92ZXJpbmZvJiZ2LmlzVHJhY2VJblN1YnBsb3RzKFkscykmJihldC5wdXNoKEcpLCJoIj09PVkub3JpZW50YXRpb24mJihudD0hMCkpO3ZhciBpdCxhdDtpZighZS50YXJnZXQpaXQ9InhweCJpbiBlP2UueHB4OmJbMF0uX2xlbmd0aC8yLGF0PSJ5cHgiaW4gZT9lLnlweDpfWzBdLl9sZW5ndGgvMjtlbHNle2lmKCExPT09Yy50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfYmVmb3JlaG92ZXIiLGUpKXJldHVybjt2YXIgb3Q9ZS5jb21wb3NlZFBhdGgmJmUuY29tcG9zZWRQYXRoKClbMF07b3R8fChvdD1lLnRhcmdldCk7dmFyIHN0PW90LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2l0PWUuY2xpZW50WC1zdC5sZWZ0LGF0PWUuY2xpZW50WS1zdC50b3AsbC5fY2FsY0ludmVyc2VUcmFuc2Zvcm0odCk7dmFyIGx0PW8uYXBwbHkzRFRyYW5zZm9ybShsLl9pbnZUcmFuc2Zvcm0pKGl0LGF0KTtpZihpdD1sdFswXSxhdD1sdFsxXSxpdDwwfHxpdD5iWzBdLl9sZW5ndGh8fGF0PDB8fGF0Pl9bMF0uX2xlbmd0aClyZXR1cm4gZC51bmhvdmVyUmF3KHQsZSl9aWYoZS5wb2ludGVyWD1pdCtiWzBdLl9vZmZzZXQsZS5wb2ludGVyWT1hdCtfWzBdLl9vZmZzZXQsQj0ieHZhbCJpbiBlP3YuZmxhdChzLGUueHZhbCk6di5wMmMoYixpdCksVj0ieXZhbCJpbiBlP3YuZmxhdChzLGUueXZhbCk6di5wMmMoXyxhdCksIWkoQlswXSl8fCFpKFZbMF0pKXJldHVybiBvLndhcm4oIkZ4LmhvdmVyIGZhaWxlZCIsZSx0KSxkLnVuaG92ZXJSYXcodCxlKX12YXIgY3Q9MS8wO2Z1bmN0aW9uIHV0KHQscil7Zm9yKHE9MDtxPGV0Lmxlbmd0aDtxKyspaWYoKEc9ZXRbcV0pJiZHWzBdJiZHWzBdLnRyYWNlJiYhMD09PShZPUdbMF0udHJhY2UpLnZpc2libGUmJjAhPT1ZLl9sZW5ndGgmJi0xPT09WyJjYXJwZXQiLCJjb250b3VyY2FycGV0Il0uaW5kZXhPZihZLl9tb2R1bGUubmFtZSkpe2lmKCJzcGxvbSI9PT1ZLnR5cGU/Vz1zW1g9MF06KFc9di5nZXRTdWJwbG90KFkpLFg9cy5pbmRleE9mKFcpKSxaPVMsdi5pc1VuaWZpZWRIb3ZlcihaKSYmKFo9Wi5jaGFyQXQoMCkpLFE9e2NkOkcsdHJhY2U6WSx4YTpiW1hdLHlhOl9bWF0sbWF4SG92ZXJEaXN0YW5jZTpQLG1heFNwaWtlRGlzdGFuY2U6TyxpbmRleDohMSxkaXN0YW5jZTpNYXRoLm1pbihjdCxQKSxzcGlrZURpc3RhbmNlOjEvMCx4U3Bpa2U6dm9pZCAwLHlTcGlrZTp2b2lkIDAsY29sb3I6cC5kZWZhdWx0TGluZSxuYW1lOlkubmFtZSx4MDp2b2lkIDAseDE6dm9pZCAwLHkwOnZvaWQgMCx5MTp2b2lkIDAseExhYmVsVmFsOnZvaWQgMCx5TGFiZWxWYWw6dm9pZCAwLHpMYWJlbFZhbDp2b2lkIDAsdGV4dDp2b2lkIDB9LGxbV10mJihRLnN1YnBsb3Q9bFtXXS5fc3VicGxvdCksbC5fc3Bsb21TY2VuZXMmJmwuX3NwbG9tU2NlbmVzW1kudWlkXSYmKFEuc2NlbmU9bC5fc3Bsb21TY2VuZXNbWS51aWRdKSwkPXR0Lmxlbmd0aCwiYXJyYXkiPT09Wil7dmFyIG49ZVtxXTsicG9pbnROdW1iZXIiaW4gbj8oUS5pbmRleD1uLnBvaW50TnVtYmVyLFo9ImNsb3Nlc3QiKTooWj0iIiwieHZhbCJpbiBuJiYoSj1uLnh2YWwsWj0ieCIpLCJ5dmFsImluIG4mJihLPW4ueXZhbCxaPVo/ImNsb3Nlc3QiOiJ5IikpfWVsc2Ugdm9pZCAwIT09dCYmdm9pZCAwIT09cj8oSj10LEs9cik6KEo9QltYXSxLPVZbWF0pO2lmKDAhPT1QKWlmKFkuX21vZHVsZSYmWS5fbW9kdWxlLmhvdmVyUG9pbnRzKXt2YXIgYT1ZLl9tb2R1bGUuaG92ZXJQb2ludHMoUSxKLEssWix7ZmluaXRlUmFuZ2U6ITAsaG92ZXJMYXllcjpsLl9ob3ZlcmxheWVyfSk7aWYoYSlmb3IodmFyIGMsdT0wO3U8YS5sZW5ndGg7dSsrKWM9YVt1XSxpKGMueDApJiZpKGMueTApJiZ0dC5wdXNoKEQoYyxTKSl9ZWxzZSBvLmxvZygiVW5yZWNvZ25pemVkIHRyYWNlIHR5cGUgaW4gaG92ZXI6IixZKTtpZigiY2xvc2VzdCI9PT1TJiZ0dC5sZW5ndGg+JCYmKHR0LnNwbGljZSgwLCQpLGN0PXR0WzBdLmRpc3RhbmNlKSxtJiYwIT09TyYmMD09PXR0Lmxlbmd0aCl7US5kaXN0YW5jZT1PLFEuaW5kZXg9ITE7dmFyIGY9WS5fbW9kdWxlLmhvdmVyUG9pbnRzKFEsSixLLCJjbG9zZXN0Iix7aG92ZXJMYXllcjpsLl9ob3ZlcmxheWVyfSk7aWYoZiYmKGY9Zi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNwaWtlRGlzdGFuY2U8PU99KSkpLGYmJmYubGVuZ3RoKXt2YXIgaCxkPWYuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC54YS5zaG93c3Bpa2VzJiYiaG92ZXJlZCBkYXRhIiE9PXQueGEuc3Bpa2VzbmFwfSkpO2lmKGQubGVuZ3RoKXt2YXIgZz1kWzBdO2koZy54MCkmJmkoZy55MCkmJihoPWh0KGcpLCghcnQudkxpbmVQb2ludHx8cnQudkxpbmVQb2ludC5zcGlrZURpc3RhbmNlPmguc3Bpa2VEaXN0YW5jZSkmJihydC52TGluZVBvaW50PWgpKX12YXIgeT1mLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQueWEuc2hvd3NwaWtlcyYmImhvdmVyZWQgZGF0YSIhPT10LnlhLnNwaWtlc25hcH0pKTtpZih5Lmxlbmd0aCl7dmFyIHg9eVswXTtpKHgueDApJiZpKHgueTApJiYoaD1odCh4KSwoIXJ0LmhMaW5lUG9pbnR8fHJ0LmhMaW5lUG9pbnQuc3Bpa2VEaXN0YW5jZT5oLnNwaWtlRGlzdGFuY2UpJiYocnQuaExpbmVQb2ludD1oKSl9fX19fWZ1bmN0aW9uIGZ0KHQsZSxyKXtmb3IodmFyIG4saT1udWxsLGE9MS8wLG89MDtvPHQubGVuZ3RoO28rKyluPXRbb10uc3Bpa2VEaXN0YW5jZSxyJiYwPT09byYmKG49LTEvMCksbjw9YSYmbjw9ZSYmKGk9dFtvXSxhPW4pO3JldHVybiBpfWZ1bmN0aW9uIGh0KHQpe3JldHVybiB0P3t4YTp0LnhhLHlhOnQueWEseDp2b2lkIDAhPT10LnhTcGlrZT90LnhTcGlrZToodC54MCt0LngxKS8yLHk6dm9pZCAwIT09dC55U3Bpa2U/dC55U3Bpa2U6KHQueTArdC55MSkvMixkaXN0YW5jZTp0LmRpc3RhbmNlLHNwaWtlRGlzdGFuY2U6dC5zcGlrZURpc3RhbmNlLGN1cnZlTnVtYmVyOnQudHJhY2UuaW5kZXgsY29sb3I6dC5jb2xvcixwb2ludE51bWJlcjp0LmluZGV4fTpudWxsfXV0KCk7dmFyIHB0PXtmdWxsTGF5b3V0OmwsY29udGFpbmVyOmwuX2hvdmVybGF5ZXIsZXZlbnQ6ZX0sZHQ9dC5fc3Bpa2Vwb2ludHMsbXQ9e3ZMaW5lUG9pbnQ6cnQudkxpbmVQb2ludCxoTGluZVBvaW50OnJ0LmhMaW5lUG9pbnR9O3QuX3NwaWtlcG9pbnRzPW10O3ZhciBndD1mdW5jdGlvbigpe3R0LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGlzdGFuY2UtZS5kaXN0YW5jZX0pKSx0dD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmNoYXJBdCgwKSxuPVtdLGk9W10sYT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb107Zy50cmFjZUlzKHMudHJhY2UsImJhci1saWtlIil8fGcudHJhY2VJcyhzLnRyYWNlLCJib3gtdmlvbGluIik/YS5wdXNoKHMpOnMudHJhY2VbcisicGVyaW9kIl0/aS5wdXNoKHMpOm4ucHVzaChzKX1yZXR1cm4gbi5jb25jYXQoaSkuY29uY2F0KGEpfSh0dCxTKX07Z3QoKTt2YXIgdnQ9Uy5jaGFyQXQoMCkseXQ9KCJ4Ij09PXZ0fHwieSI9PT12dCkmJnR0WzBdJiZMW3R0WzBdLnRyYWNlLnR5cGVdO2lmKG0mJjAhPT1PJiYwIT09dHQubGVuZ3RoKXt2YXIgeHQ9ZnQodHQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC55YS5zaG93c3Bpa2VzfSkpLE8seXQpO3J0LmhMaW5lUG9pbnQ9aHQoeHQpO3ZhciBidD1mdCh0dC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnhhLnNob3dzcGlrZXN9KSksTyx5dCk7cnQudkxpbmVQb2ludD1odChidCl9aWYoMD09PXR0Lmxlbmd0aCl7dmFyIF90PWQudW5ob3ZlclJhdyh0LGUpO3JldHVybiFtfHxudWxsPT09cnQuaExpbmVQb2ludCYmbnVsbD09PXJ0LnZMaW5lUG9pbnR8fEYoZHQpJiZSKHQscnQscHQpLF90fW0mJkYoZHQpJiZSKHQscnQscHQpO2lmKHYuaXNYWWhvdmVyKFopJiYwIT09dHRbMF0ubGVuZ3RoJiYic3Bsb20iIT09dHRbMF0udHJhY2UudHlwZSl7dmFyIHd0PXR0WzBdLFR0PSh0dD1FW3d0LnRyYWNlLnR5cGVdP3R0LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJhY2UuaW5kZXg9PT13dC50cmFjZS5pbmRleH0pKTpbd3RdKS5sZW5ndGgsa3Q9TigieCIsd3QsbCksQXQ9TigieSIsd3QsbCk7dXQoa3QsQXQpO3ZhciBNdCxTdD1bXSxFdD17fSxMdD0wLEN0PWZ1bmN0aW9uKHQpe3ZhciBlPUVbdC50cmFjZS50eXBlXT9DKHQpOnQudHJhY2UuaW5kZXg7aWYoRXRbZV0pe3ZhciByPUV0W2VdLTEsbj1TdFtyXTtyPjAmJk1hdGguYWJzKHQuZGlzdGFuY2UpPE1hdGguYWJzKG4uZGlzdGFuY2UpJiYoU3Rbcl09dCl9ZWxzZSBMdCsrLEV0W2VdPUx0LFN0LnB1c2godCl9O2ZvcihNdD0wO010PFR0O010KyspQ3QodHRbTXRdKTtmb3IoTXQ9dHQubGVuZ3RoLTE7TXQ+VHQtMTtNdC0tKUN0KHR0W010XSk7dHQ9U3QsZ3QoKX12YXIgUHQ9dC5faG92ZXJkYXRhLEl0PVtdLE90PWoodCksenQ9VSh0KTtmb3IoSD0wO0g8dHQubGVuZ3RoO0grKyl7dmFyIER0PXR0W0hdLFJ0PXYubWFrZUV2ZW50RGF0YShEdCxEdC50cmFjZSxEdC5jZCk7aWYoITEhPT1EdC5ob3ZlcnRlbXBsYXRlKXt2YXIgRnQ9ITE7RHQuY2RbRHQuaW5kZXhdJiZEdC5jZFtEdC5pbmRleF0uaHQmJihGdD1EdC5jZFtEdC5pbmRleF0uaHQpLER0LmhvdmVydGVtcGxhdGU9RnR8fER0LnRyYWNlLmhvdmVydGVtcGxhdGV8fCExfWlmKER0LnhhJiZEdC55YSl7dmFyIEJ0PUR0LngwK0R0LnhhLl9vZmZzZXQsTnQ9RHQueDErRHQueGEuX29mZnNldCxqdD1EdC55MCtEdC55YS5fb2Zmc2V0LFV0PUR0LnkxK0R0LnlhLl9vZmZzZXQsVnQ9TWF0aC5taW4oQnQsTnQpLEh0PU1hdGgubWF4KEJ0LE50KSxxdD1NYXRoLm1pbihqdCxVdCksR3Q9TWF0aC5tYXgoanQsVXQpO1J0LmJib3g9e3gwOlZ0K3p0LHgxOkh0K3p0LHkwOnF0K090LHkxOkd0K090fX1EdC5ldmVudERhdGE9W1J0XSxJdC5wdXNoKFJ0KX10Ll9ob3ZlcmRhdGE9SXQ7dmFyIFl0PSJ5Ij09PVMmJihldC5sZW5ndGg+MXx8dHQubGVuZ3RoPjEpfHwiY2xvc2VzdCI9PT1TJiZudCYmdHQubGVuZ3RoPjEsV3Q9cC5jb21iaW5lKGwucGxvdF9iZ2NvbG9yfHxwLmJhY2tncm91bmQsbC5wYXBlcl9iZ2NvbG9yKSxYdD1JKHR0LHtnZDp0LGhvdmVybW9kZTpTLHJvdGF0ZUxhYmVsczpZdCxiZ0NvbG9yOld0LGNvbnRhaW5lcjpsLl9ob3ZlcmxheWVyLG91dGVyQ29udGFpbmVyOmwuX3BhcGVyLm5vZGUoKSxjb21tb25MYWJlbE9wdHM6bC5ob3ZlcmxhYmVsLGhvdmVyZGlzdGFuY2U6bC5ob3ZlcmRpc3RhbmNlfSk7di5pc1VuaWZpZWRIb3ZlcihTKXx8KCFmdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLGMsdT0wLGY9MSxoPXQuc2l6ZSgpLHA9bmV3IEFycmF5KGgpLGQ9MDtmdW5jdGlvbiBtKHQpe3ZhciBlPXRbMF0scj10W3QubGVuZ3RoLTFdO2lmKGk9ZS5wbWluLWUucG9zLWUuZHArZS5zaXplLGE9ci5wb3Mrci5kcCtyLnNpemUtZS5wbWF4LGk+LjAxKXtmb3Iocz10Lmxlbmd0aC0xO3M+PTA7cy0tKXRbc10uZHArPWk7bj0hMX1pZighKGE8LjAxKSl7aWYoaTwtLjAxKXtmb3Iocz10Lmxlbmd0aC0xO3M+PTA7cy0tKXRbc10uZHAtPWE7bj0hMX1pZihuKXt2YXIgYz0wO2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspKGw9dFtvXSkucG9zK2wuZHArbC5zaXplPmUucG1heCYmYysrO2ZvcihvPXQubGVuZ3RoLTE7bz49MCYmIShjPD0wKTtvLS0pKGw9dFtvXSkucG9zPmUucG1heC0xJiYobC5kZWw9ITAsYy0tKTtmb3Iobz0wO288dC5sZW5ndGgmJiEoYzw9MCk7bysrKWlmKChsPXRbb10pLnBvczxlLnBtaW4rMSlmb3IobC5kZWw9ITAsYy0tLGE9MipsLnNpemUscz10Lmxlbmd0aC0xO3M+PTA7cy0tKXRbc10uZHAtPWE7Zm9yKG89dC5sZW5ndGgtMTtvPj0wJiYhKGM8PTApO28tLSkobD10W29dKS5wb3MrbC5kcCtsLnNpemU+ZS5wbWF4JiYobC5kZWw9ITAsYy0tKX19fXQuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dFtlXSxpPSJ4Ij09PW4uX2lkLmNoYXJBdCgwKSxhPW4ucmFuZ2U7MD09PWQmJmEmJmFbMF0+YVsxXSE9PWkmJihmPS0xKSxwW2QrK109W3tkYXR1bTp0LHRyYWNlSW5kZXg6dC50cmFjZS5pbmRleCxkcDowLHBvczp0LnBvcyxwb3NyZWY6dC5wb3NyZWYsc2l6ZTp0LmJ5KihpP1Q6MSkvMixwbWluOjAscG1heDppP3Iud2lkdGg6ci5oZWlnaHR9XX0pKSxwLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0ucG9zcmVmLWVbMF0ucG9zcmVmfHxmKihlWzBdLnRyYWNlSW5kZXgtdFswXS50cmFjZUluZGV4KX0pKTtmb3IoOyFuJiZ1PD1oOyl7Zm9yKHUrKyxuPSEwLG89MDtvPHAubGVuZ3RoLTE7KXt2YXIgZz1wW29dLHY9cFtvKzFdLHk9Z1tnLmxlbmd0aC0xXSx4PXZbMF07aWYoKGk9eS5wb3MreS5kcCt5LnNpemUteC5wb3MteC5kcCt4LnNpemUpPi4wMSYmeS5wbWluPT09eC5wbWluJiZ5LnBtYXg9PT14LnBtYXgpe2ZvcihzPXYubGVuZ3RoLTE7cz49MDtzLS0pdltzXS5kcCs9aTtmb3IoZy5wdXNoLmFwcGx5KGcsdikscC5zcGxpY2UobysxLDEpLGM9MCxzPWcubGVuZ3RoLTE7cz49MDtzLS0pYys9Z1tzXS5kcDtmb3IoYT1jL2cubGVuZ3RoLHM9Zy5sZW5ndGgtMTtzPj0wO3MtLSlnW3NdLmRwLT1hO249ITF9ZWxzZSBvKyt9cC5mb3JFYWNoKG0pfWZvcihvPXAubGVuZ3RoLTE7bz49MDtvLS0pe3ZhciBiPXBbb107Zm9yKHM9Yi5sZW5ndGgtMTtzPj0wO3MtLSl7dmFyIF89YltzXSx3PV8uZGF0dW07dy5vZmZzZXQ9Xy5kcCx3LmRlbD1fLmRlbH19fShYdCxZdD8ieGEiOiJ5YSIsbCkseihYdCxZdCxsLl9pbnZTY2FsZVgsbC5faW52U2NhbGVZKSk7aWYoZS50YXJnZXQmJmUudGFyZ2V0LnRhZ05hbWUpe3ZhciBadD1nLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJoYXNDbGlja1RvU2hvdyIpKHQsSXQpO2Yobi5zZWxlY3QoZS50YXJnZXQpLFp0PyJwb2ludGVyIjoiIil9aWYoIWUudGFyZ2V0fHxhfHwhZnVuY3Rpb24odCxlLHIpe2lmKCFyfHxyLmxlbmd0aCE9PXQuX2hvdmVyZGF0YS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBuPXIubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciBpPXJbbl0sYT10Ll9ob3ZlcmRhdGFbbl07aWYoaS5jdXJ2ZU51bWJlciE9PWEuY3VydmVOdW1iZXJ8fFN0cmluZyhpLnBvaW50TnVtYmVyKSE9PVN0cmluZyhhLnBvaW50TnVtYmVyKXx8U3RyaW5nKGkucG9pbnROdW1iZXJzKSE9PVN0cmluZyhhLnBvaW50TnVtYmVycykpcmV0dXJuITB9cmV0dXJuITF9KHQsMCxQdCkpcmV0dXJuO1B0JiZ0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6ZSxwb2ludHM6UHR9KTt0LmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50OmUscG9pbnRzOnQuX2hvdmVyZGF0YSx4YXhlczpiLHlheGVzOl8seHZhbHM6Qix5dmFsczpWfSl9KHQsZSxyLGEpfSkpfSxyLmxvbmVIb3Zlcj1mdW5jdGlvbih0LGUpe3ZhciByPSEwO0FycmF5LmlzQXJyYXkodCl8fChyPSExLHQ9W3RdKTt2YXIgaT1lLmdkLGE9aihpKSxvPVUoaSkscz1JKHQubWFwKChmdW5jdGlvbih0KXt2YXIgcj10Ll94MHx8dC54MHx8dC54fHwwLG49dC5feDF8fHQueDF8fHQueHx8MCxzPXQuX3kwfHx0LnkwfHx0Lnl8fDAsbD10Ll95MXx8dC55MXx8dC55fHwwLGM9dC5ldmVudERhdGE7aWYoYyl7dmFyIHU9TWF0aC5taW4ocixuKSxmPU1hdGgubWF4KHIsbiksaD1NYXRoLm1pbihzLGwpLGQ9TWF0aC5tYXgocyxsKSxtPXQudHJhY2U7aWYoZy50cmFjZUlzKG0sImdsM2QiKSl7dmFyIHY9aS5fZnVsbExheW91dFttLnNjZW5lXS5fc2NlbmUuY29udGFpbmVyLHk9di5vZmZzZXRMZWZ0LHg9di5vZmZzZXRUb3A7dSs9eSxmKz15LGgrPXgsZCs9eH1jLmJib3g9e3gwOnUrbyx4MTpmK28seTA6aCthLHkxOmQrYX0sZS5pbk91dF9iYm94JiZlLmluT3V0X2Jib3gucHVzaChjLmJib3gpfWVsc2UgYz0hMTtyZXR1cm57Y29sb3I6dC5jb2xvcnx8cC5kZWZhdWx0TGluZSx4MDp0LngwfHx0Lnh8fDAseDE6dC54MXx8dC54fHwwLHkwOnQueTB8fHQueXx8MCx5MTp0LnkxfHx0Lnl8fDAseExhYmVsOnQueExhYmVsLHlMYWJlbDp0LnlMYWJlbCx6TGFiZWw6dC56TGFiZWwsdGV4dDp0LnRleHQsbmFtZTp0Lm5hbWUsaWRlYWxBbGlnbjp0LmlkZWFsQWxpZ24sYm9yZGVyQ29sb3I6dC5ib3JkZXJDb2xvcixmb250RmFtaWx5OnQuZm9udEZhbWlseSxmb250U2l6ZTp0LmZvbnRTaXplLGZvbnRDb2xvcjp0LmZvbnRDb2xvcixuYW1lTGVuZ3RoOnQubmFtZUxlbmd0aCx0ZXh0QWxpZ246dC50ZXh0QWxpZ24sdHJhY2U6dC50cmFjZXx8e2luZGV4OjAsaG92ZXJpbmZvOiIifSx4YTp7X29mZnNldDowfSx5YTp7X29mZnNldDowfSxpbmRleDowLGhvdmVydGVtcGxhdGU6dC5ob3ZlcnRlbXBsYXRlfHwhMSxob3ZlcnRlbXBsYXRlTGFiZWxzOnQuaG92ZXJ0ZW1wbGF0ZUxhYmVsc3x8ITEsZXZlbnREYXRhOmN9fSkpLHtnZDppLGhvdmVybW9kZToiY2xvc2VzdCIscm90YXRlTGFiZWxzOiExLGJnQ29sb3I6ZS5iZ0NvbG9yfHxwLmJhY2tncm91bmQsY29udGFpbmVyOm4uc2VsZWN0KGUuY29udGFpbmVyKSxvdXRlckNvbnRhaW5lcjplLm91dGVyQ29udGFpbmVyfHxlLmNvbnRhaW5lcn0pLGw9MCxjPTA7cmV0dXJuIHMuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC55MC1lLnkwfSkpLmVhY2goKGZ1bmN0aW9uKHQscil7dmFyIG49dC55MC10LmJ5LzI7dC5vZmZzZXQ9bi01PGw/bC1uKzU6MCxsPW4rdC5ieSt0Lm9mZnNldCxyPT09ZS5hbmNob3JJbmRleCYmKGM9dC5vZmZzZXQpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe3Qub2Zmc2V0LT1jfSkpLHoocywhMSxpLl9mdWxsTGF5b3V0Ll9pbnZTY2FsZVgsaS5fZnVsbExheW91dC5faW52U2NhbGVZKSxyP3M6cy5ub2RlKCl9O3ZhciBQPS88ZXh0cmE+KFtcc1xTXSopPFwvZXh0cmE+LztmdW5jdGlvbiBJKHQsZSl7dmFyIHI9ZS5nZCxpPXIuX2Z1bGxMYXlvdXQsYT1lLmhvdmVybW9kZSxjPWUucm90YXRlTGFiZWxzLGY9ZS5iZ0NvbG9yLGQ9ZS5jb250YWluZXIsbT1lLm91dGVyQ29udGFpbmVyLHc9ZS5jb21tb25MYWJlbE9wdHN8fHt9LFQ9ZS5mb250RmFtaWx5fHx5LkhPVkVSRk9OVCxrPWUuZm9udFNpemV8fHkuSE9WRVJGT05UU0laRSxBPXRbMF0sRT1BLnhhLEw9QS55YSxQPWEuY2hhckF0KDApLEk9QVtQKyJMYWJlbCJdLHo9VihyLG0pLEQ9ei50b3AsUj16LndpZHRoLEY9ei5oZWlnaHQsQj12b2lkIDAhPT1JJiZBLmRpc3RhbmNlPD1lLmhvdmVyZGlzdGFuY2UmJigieCI9PT1hfHwieSI9PT1hKTtpZihCKXt2YXIgTixqLFU9ITA7Zm9yKE49MDtOPHQubGVuZ3RoO04rKylpZihVJiZ2b2lkIDA9PT10W05dLnpMYWJlbCYmKFU9ITEpLGo9dFtOXS5ob3ZlcmluZm98fHRbTl0udHJhY2UuaG92ZXJpbmZvKXt2YXIgSD1BcnJheS5pc0FycmF5KGopP2o6ai5zcGxpdCgiKyIpO2lmKC0xPT09SC5pbmRleE9mKCJhbGwiKSYmLTE9PT1ILmluZGV4T2YoYSkpe0I9ITE7YnJlYWt9fVUmJihCPSExKX12YXIgcT1kLnNlbGVjdEFsbCgiZy5heGlzdGV4dCIpLmRhdGEoQj9bMF06W10pO2lmKHEuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJheGlzdGV4dCIsITApLHEuZXhpdCgpLnJlbW92ZSgpLHEuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPW8uZW5zdXJlU2luZ2xlKHQsInBhdGgiLCIiLChmdW5jdGlvbih0KXt0LnN0eWxlKHsic3Ryb2tlLXdpZHRoIjoiMXB4In0pfSkpLGw9by5lbnN1cmVTaW5nbGUodCwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksYz13LmJnY29sb3J8fHAuZGVmYXVsdExpbmUsZj13LmJvcmRlcmNvbG9yfHxwLmNvbnRyYXN0KGMpLGQ9cC5jb250cmFzdChjKSxtPXtmYW1pbHk6dy5mb250LmZhbWlseXx8VCxzaXplOncuZm9udC5zaXplfHxrLGNvbG9yOncuZm9udC5jb2xvcnx8ZH07ZS5zdHlsZSh7ZmlsbDpjLHN0cm9rZTpmfSksbC50ZXh0KEkpLmNhbGwoaC5mb250LG0pLmNhbGwodS5wb3NpdGlvblRleHQsMCwwKS5jYWxsKHUuY29udmVydFRvVHNwYW5zLHIpLHQuYXR0cigidHJhbnNmb3JtIiwiIik7dmFyIGcsdix5PVYocixsLm5vZGUoKSk7aWYoIngiPT09YSl7dmFyIHg9InRvcCI9PT1FLnNpZGU/Ii0iOiIiO2wuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKHUucG9zaXRpb25UZXh0LDAsInRvcCI9PT1FLnNpZGU/RC15LmJvdHRvbS1NLVM6RC15LnRvcCtNK1MpLGc9RS5fb2Zmc2V0KyhBLngwK0EueDEpLzIsdj1MLl9vZmZzZXQrKCJ0b3AiPT09RS5zaWRlPzA6TC5fbGVuZ3RoKTt2YXIgYj15LndpZHRoLzIrUztnPGI/KGc9YixlLmF0dHIoImQiLCJNLSIrKGItTSkrIiwwTC0iKyhiLTIqTSkrIiwiK3grTSsiSCIrKFMreS53aWR0aC8yKSsidiIreCsoMipTK3kuaGVpZ2h0KSsiSC0iK2IrIlYiK3grTSsiWiIpKTpnPmkud2lkdGgtYj8oZz1pLndpZHRoLWIsZS5hdHRyKCJkIiwiTSIrKGItTSkrIiwwTCIrYisiLCIreCtNKyJ2Iit4KygyKlMreS5oZWlnaHQpKyJILSIrYisiViIreCtNKyJIIisoYi0yKk0pKyJaIikpOmUuYXR0cigiZCIsIk0wLDBMIitNKyIsIit4K00rIkgiKyhTK3kud2lkdGgvMikrInYiK3grKDIqUyt5LmhlaWdodCkrIkgtIisoUyt5LndpZHRoLzIpKyJWIit4K00rIkgtIitNKyJaIil9ZWxzZXt2YXIgXyxDLFA7InJpZ2h0Ij09PUwuc2lkZT8oXz0ic3RhcnQiLEM9MSxQPSIiLGc9RS5fb2Zmc2V0K0UuX2xlbmd0aCk6KF89ImVuZCIsQz0tMSxQPSItIixnPUUuX29mZnNldCksdj1MLl9vZmZzZXQrKEEueTArQS55MSkvMixsLmF0dHIoInRleHQtYW5jaG9yIixfKSxlLmF0dHIoImQiLCJNMCwwTCIrUCtNKyIsIitNKyJWIisoUyt5LmhlaWdodC8yKSsiaCIrUCsoMipTK3kud2lkdGgpKyJWLSIrKFMreS5oZWlnaHQvMikrIkgiK1ArTSsiVi0iK00rIloiKTt2YXIgTyx6PXkuaGVpZ2h0LzIsUj1ELXkudG9wLXosRj0iY2xpcCIraS5fdWlkKyJjb21tb25sYWJlbCIrTC5faWQ7aWYoZzx5LndpZHRoKzIqUytNKXtPPSJNLSIrKE0rUykrIi0iK3orImgtIisoeS53aWR0aC1TKSsiViIreisiaCIrKHkud2lkdGgtUykrIloiO3ZhciBCPXkud2lkdGgtZytTO3UucG9zaXRpb25UZXh0KGwsQixSKSwiZW5kIj09PV8mJmwuc2VsZWN0QWxsKCJ0c3BhbiIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT1oLnRlc3Rlci5hcHBlbmQoInRleHQiKS50ZXh0KHQudGV4dCgpKS5jYWxsKGguZm9udCxtKSxpPVYocixlLm5vZGUoKSk7TWF0aC5yb3VuZChpLndpZHRoKTxNYXRoLnJvdW5kKHkud2lkdGgpJiZ0LmF0dHIoIngiLEItaS53aWR0aCksZS5yZW1vdmUoKX0pKX1lbHNlIHUucG9zaXRpb25UZXh0KGwsQyooUytNKSxSKSxPPW51bGw7dmFyIE49aS5fdG9wY2xpcHMuc2VsZWN0QWxsKCIjIitGKS5kYXRhKE8/WzBdOltdKTtOLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixGKS5hcHBlbmQoInBhdGgiKSxOLmV4aXQoKS5yZW1vdmUoKSxOLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLE8pLGguc2V0Q2xpcFVybChsLE8/RjpudWxsLHIpfXQuYXR0cigidHJhbnNmb3JtIixzKGcsdikpfSkpLHYuaXNVbmlmaWVkSG92ZXIoYSkpe2lmKGQuc2VsZWN0QWxsKCJnLmhvdmVydGV4dCIpLnJlbW92ZSgpLDA9PT10Lmxlbmd0aClyZXR1cm47dmFyIEc9aS5ob3ZlcmxhYmVsLFk9Ry5mb250LFc9e3Nob3dsZWdlbmQ6ITAsbGVnZW5kOnt0aXRsZTp7dGV4dDpJLGZvbnQ6WX0sZm9udDpZLGJnY29sb3I6Ry5iZ2NvbG9yLGJvcmRlcmNvbG9yOkcuYm9yZGVyY29sb3IsYm9yZGVyd2lkdGg6MSx0cmFjZWdyb3VwZ2FwOjcsdHJhY2VvcmRlcjppLmxlZ2VuZD9pLmxlZ2VuZC50cmFjZW9yZGVyOnZvaWQgMCxvcmllbnRhdGlvbjoidiJ9fSxYPXt9O3goVyxYLHIuX2Z1bGxEYXRhKTt2YXIgWj1YLmxlZ2VuZDtaLmVudHJpZXM9W107Zm9yKHZhciBKPTA7Sjx0Lmxlbmd0aDtKKyspe3ZhciBLPU8odFtKXSwhMCxhLGksSSksUT1LWzBdLCQ9S1sxXSx0dD10W0pdO3R0Lm5hbWU9JCx0dC50ZXh0PSIiIT09JD8kKyIgOiAiK1E6UTt2YXIgZXQ9dHQuY2RbdHQuaW5kZXhdO2V0JiYoZXQubWMmJih0dC5tYz1ldC5tYyksZXQubWNjJiYodHQubWM9ZXQubWNjKSxldC5tbGMmJih0dC5tbGM9ZXQubWxjKSxldC5tbGNjJiYodHQubWxjPWV0Lm1sY2MpLGV0Lm1sdyYmKHR0Lm1sdz1ldC5tbHcpLGV0Lm1yYyYmKHR0Lm1yYz1ldC5tcmMpLGV0LmRpciYmKHR0LmRpcj1ldC5kaXIpKSx0dC5fZGlzdGluY3Q9ITAsWi5lbnRyaWVzLnB1c2goW3R0XSl9Wi5lbnRyaWVzLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0udHJhY2UuaW5kZXgtZVswXS50cmFjZS5pbmRleH0pKSxaLmxheWVyPWQsWi5faW5Ib3Zlcj0hMCxaLl9ncm91cFRpdGxlRm9udD1ZLGIocixaKTt2YXIgcnQsbnQsaXQsYXQsb3Q9ZC5zZWxlY3QoImcubGVnZW5kIiksc3Q9VihyLG90Lm5vZGUoKSksbHQ9c3Qud2lkdGgrMipTLGN0PXN0LmhlaWdodCsyKlMsdXQ9dFswXSxmdD0odXQueDArdXQueDEpLzIsaHQ9KHV0LnkwK3V0LnkxKS8yLHB0PSEoZy50cmFjZUlzKHV0LnRyYWNlLCJiYXItbGlrZSIpfHxnLnRyYWNlSXModXQudHJhY2UsImJveC12aW9saW4iKSk7InkiPT09UD9wdD8obnQ9aHQtUyxydD1odCtTKToobnQ9TWF0aC5taW4uYXBwbHkobnVsbCx0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWluKHQueTAsdC55MSl9KSkpLHJ0PU1hdGgubWF4LmFwcGx5KG51bGwsdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCh0LnkwLHQueTEpfSkpKSk6bnQ9cnQ9by5tZWFuKHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4odC55MCt0LnkxKS8yfSkpKS1jdC8yLCJ4Ij09PVA/cHQ/KGl0PWZ0K1MsYXQ9ZnQtUyk6KGl0PU1hdGgubWF4LmFwcGx5KG51bGwsdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCh0LngwLHQueDEpfSkpKSxhdD1NYXRoLm1pbi5hcHBseShudWxsLHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5taW4odC54MCx0LngxKX0pKSkpOml0PWF0PW8ubWVhbih0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQueDArdC54MSkvMn0pKSktbHQvMjt2YXIgZHQsbXQsZ3Q9RS5fb2Zmc2V0LHZ0PUwuX29mZnNldDtyZXR1cm4gYXQrPWd0LWx0LG50Kz12dC1jdCxkdD0oaXQrPWd0KStsdDxSJiZpdD49MD9pdDphdCtsdDxSJiZhdD49MD9hdDpndCtsdDxSP2d0Oml0LWZ0PGZ0LWF0K2x0P1ItbHQ6MCxkdCs9UyxtdD0ocnQrPXZ0KStjdDxGJiZydD49MD9ydDpudCtjdDxGJiZudD49MD9udDp2dCtjdDxGP3Z0OnJ0LWh0PGh0LW50K2N0P0YtY3Q6MCxtdCs9UyxvdC5hdHRyKCJ0cmFuc2Zvcm0iLHMoZHQtMSxtdC0xKSksb3R9dmFyIHl0PWQuc2VsZWN0QWxsKCJnLmhvdmVydGV4dCIpLmRhdGEodCwoZnVuY3Rpb24odCl7cmV0dXJuIEModCl9KSk7cmV0dXJuIHl0LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiaG92ZXJ0ZXh0IiwhMCkuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LmFwcGVuZCgicmVjdCIpLmNhbGwocC5maWxsLHAuYWRkT3BhY2l0eShmLC44KSksdC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJuYW1lIiwhMCksdC5hcHBlbmQoInBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwiMXB4IiksdC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJudW1zIiwhMCkuY2FsbChoLmZvbnQsVCxrKX0pKSx5dC5leGl0KCkucmVtb3ZlKCkseXQuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykuYXR0cigidHJhbnNmb3JtIiwiIiksbz10LmNvbG9yO0FycmF5LmlzQXJyYXkobykmJihvPW9bdC5ldmVudERhdGFbMF0ucG9pbnROdW1iZXJdKTt2YXIgZD10LmJnY29sb3J8fG8sbT1wLmNvbWJpbmUocC5vcGFjaXR5KGQpP2Q6cC5kZWZhdWx0TGluZSxmKSxnPXAuY29tYmluZShwLm9wYWNpdHkobyk/bzpwLmRlZmF1bHRMaW5lLGYpLHY9dC5ib3JkZXJDb2xvcnx8cC5jb250cmFzdChtKSx5PU8odCxCLGEsaSxJLGUpLHg9eVswXSxiPXlbMV0sdz1lLnNlbGVjdCgidGV4dC5udW1zIikuY2FsbChoLmZvbnQsdC5mb250RmFtaWx5fHxULHQuZm9udFNpemV8fGssdC5mb250Q29sb3J8fHYpLnRleHQoeCkuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbCh1LnBvc2l0aW9uVGV4dCwwLDApLmNhbGwodS5jb252ZXJ0VG9Uc3BhbnMsciksQT1lLnNlbGVjdCgidGV4dC5uYW1lIiksRT0wLEw9MDtpZihiJiZiIT09eCl7QS5jYWxsKGguZm9udCx0LmZvbnRGYW1pbHl8fFQsdC5mb250U2l6ZXx8ayxnKS50ZXh0KGIpLmF0dHIoImRhdGEtbm90ZXgiLDEpLmNhbGwodS5wb3NpdGlvblRleHQsMCwwKS5jYWxsKHUuY29udmVydFRvVHNwYW5zLHIpO3ZhciBDPVYocixBLm5vZGUoKSk7RT1DLndpZHRoKzIqUyxMPUMuaGVpZ2h0KzIqU31lbHNlIEEucmVtb3ZlKCksZS5zZWxlY3QoInJlY3QiKS5yZW1vdmUoKTtlLnNlbGVjdCgicGF0aCIpLnN0eWxlKHtmaWxsOm0sc3Ryb2tlOnZ9KTt2YXIgUD10LnhhLl9vZmZzZXQrKHQueDArdC54MSkvMix6PXQueWEuX29mZnNldCsodC55MCt0LnkxKS8yLE49TWF0aC5hYnModC54MS10LngwKSxqPU1hdGguYWJzKHQueTEtdC55MCksVT1WKHIsdy5ub2RlKCkpLEg9VS53aWR0aC9pLl9pbnZTY2FsZVgscT1VLmhlaWdodC9pLl9pbnZTY2FsZVk7dC50eTA9KEQtVS50b3ApL2kuX2ludlNjYWxlWSx0LmJ4PUgrMipTLHQuYnk9TWF0aC5tYXgocSsyKlMsTCksdC5hbmNob3I9InN0YXJ0Iix0LnR4d2lkdGg9SCx0LnR4MndpZHRoPUUsdC5vZmZzZXQ9MDt2YXIgRyxZLFc9KEgrTStTK0UpKmkuX2ludlNjYWxlWDtpZihjKXQucG9zPVAsRz16K2ovMitXPD1GLFk9ei1qLzItVz49MCwidG9wIiE9PXQuaWRlYWxBbGlnbiYmR3x8IVk/Rz8oeis9ai8yLHQuYW5jaG9yPSJzdGFydCIpOnQuYW5jaG9yPSJtaWRkbGUiOih6LT1qLzIsdC5hbmNob3I9ImVuZCIpO2Vsc2UgaWYodC5wb3M9eixHPVArTi8yK1c8PVIsWT1QLU4vMi1XPj0wLCJsZWZ0IiE9PXQuaWRlYWxBbGlnbiYmR3x8IVkpaWYoRylQKz1OLzIsdC5hbmNob3I9InN0YXJ0IjtlbHNle3QuYW5jaG9yPSJtaWRkbGUiO3ZhciBYPVcvMixaPVArWC1SLEo9UC1YO1o+MCYmKFAtPVopLEo8MCYmKFArPS1KKX1lbHNlIFAtPU4vMix0LmFuY2hvcj0iZW5kIjt3LmF0dHIoInRleHQtYW5jaG9yIix0LmFuY2hvciksRSYmQS5hdHRyKCJ0ZXh0LWFuY2hvciIsdC5hbmNob3IpLGUuYXR0cigidHJhbnNmb3JtIixzKFAseikrKGM/bChfKToiIikpfSkpLHl0fWZ1bmN0aW9uIE8odCxlLHIsbixpLGEpe3ZhciBzPSIiLGw9IiI7dm9pZCAwIT09dC5uYW1lT3ZlcnJpZGUmJih0Lm5hbWU9dC5uYW1lT3ZlcnJpZGUpLHQubmFtZSYmKHQudHJhY2UuX21ldGEmJih0Lm5hbWU9by50ZW1wbGF0ZVN0cmluZyh0Lm5hbWUsdC50cmFjZS5fbWV0YSkpLHM9Qih0Lm5hbWUsdC5uYW1lTGVuZ3RoKSk7dmFyIGM9ci5jaGFyQXQoMCksdT0ieCI9PT1jPyJ5IjoieCI7dm9pZCAwIT09dC56TGFiZWw/KHZvaWQgMCE9PXQueExhYmVsJiYobCs9Ing6ICIrdC54TGFiZWwrIjxicj4iKSx2b2lkIDAhPT10LnlMYWJlbCYmKGwrPSJ5OiAiK3QueUxhYmVsKyI8YnI+IiksImNob3JvcGxldGgiIT09dC50cmFjZS50eXBlJiYiY2hvcm9wbGV0aG1hcGJveCIhPT10LnRyYWNlLnR5cGUmJihsKz0obD8iejogIjoiIikrdC56TGFiZWwpKTplJiZ0W2MrIkxhYmVsIl09PT1pP2w9dFt1KyJMYWJlbCJdfHwiIjp2b2lkIDA9PT10LnhMYWJlbD92b2lkIDAhPT10LnlMYWJlbCYmInNjYXR0ZXJjYXJwZXQiIT09dC50cmFjZS50eXBlJiYobD10LnlMYWJlbCk6bD12b2lkIDA9PT10LnlMYWJlbD90LnhMYWJlbDoiKCIrdC54TGFiZWwrIiwgIit0LnlMYWJlbCsiKSIsIXQudGV4dCYmMCE9PXQudGV4dHx8QXJyYXkuaXNBcnJheSh0LnRleHQpfHwobCs9KGw/Ijxicj4iOiIiKSt0LnRleHQpLHZvaWQgMCE9PXQuZXh0cmFUZXh0JiYobCs9KGw/Ijxicj4iOiIiKSt0LmV4dHJhVGV4dCksYSYmIiI9PT1sJiYhdC5ob3ZlcnRlbXBsYXRlJiYoIiI9PT1zJiZhLnJlbW92ZSgpLGw9cyk7dmFyIGY9dC5ob3ZlcnRlbXBsYXRlfHwhMTtpZihmKXt2YXIgaD10LmhvdmVydGVtcGxhdGVMYWJlbHN8fHQ7dFtjKyJMYWJlbCJdIT09aSYmKGhbYysib3RoZXIiXT1oW2MrIlZhbCJdLGhbYysib3RoZXJMYWJlbCJdPWhbYysiTGFiZWwiXSksbD0obD1vLmhvdmVydGVtcGxhdGVTdHJpbmcoZixoLG4uX2QzbG9jYWxlLHQuZXZlbnREYXRhWzBdfHx7fSx0LnRyYWNlLl9tZXRhKSkucmVwbGFjZShQLChmdW5jdGlvbihlLHIpe3JldHVybiBzPUIocix0Lm5hbWVMZW5ndGgpLCIifSkpfXJldHVybltsLHNdfWZ1bmN0aW9uIHoodCxlLHIsaSl7dmFyIGE9ZnVuY3Rpb24odCl7cmV0dXJuIHQqcn0sbz1mdW5jdGlvbih0KXtyZXR1cm4gdCppfTt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHQuZGVsKXJldHVybiByLnJlbW92ZSgpO3ZhciBpPXIuc2VsZWN0KCJ0ZXh0Lm51bXMiKSxzPXQuYW5jaG9yLGw9ImVuZCI9PT1zPy0xOjEsYz17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjB9W3NdLGY9YyooTStTKSxwPWYrYyoodC50eHdpZHRoK1MpLGQ9MCxtPXQub2Zmc2V0LGc9Im1pZGRsZSI9PT1zO2cmJihmLT10LnR4MndpZHRoLzIscCs9dC50eHdpZHRoLzIrUyksZSYmKG0qPS1BLGQ9dC5vZmZzZXQqayksci5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixnPyJNLSIrYSh0LmJ4LzIrdC50eDJ3aWR0aC8yKSsiLCIrbyhtLXQuYnkvMikrImgiK2EodC5ieCkrInYiK28odC5ieSkrImgtIithKHQuYngpKyJaIjoiTTAsMEwiK2EobCpNK2QpKyIsIitvKE0rbSkrInYiK28odC5ieS8yLU0pKyJoIithKGwqdC5ieCkrInYtIitvKHQuYnkpKyJIIithKGwqTStkKSsiViIrbyhtLU0pKyJaIik7dmFyIHY9ZCtmLHk9bSt0LnR5MC10LmJ5LzIrUyx4PXQudGV4dEFsaWdufHwiYXV0byI7ImF1dG8iIT09eCYmKCJsZWZ0Ij09PXgmJiJzdGFydCIhPT1zPyhpLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKSx2PWc/LXQuYngvMi10LnR4MndpZHRoLzIrUzotdC5ieC1TKToicmlnaHQiPT09eCYmImVuZCIhPT1zJiYoaS5hdHRyKCJ0ZXh0LWFuY2hvciIsImVuZCIpLHY9Zz90LmJ4LzItdC50eDJ3aWR0aC8yLVM6dC5ieCtTKSksaS5jYWxsKHUucG9zaXRpb25UZXh0LGEodiksbyh5KSksdC50eDJ3aWR0aCYmKHIuc2VsZWN0KCJ0ZXh0Lm5hbWUiKS5jYWxsKHUucG9zaXRpb25UZXh0LGEocCtjKlMrZCksbyhtK3QudHkwLXQuYnkvMitTKSksci5zZWxlY3QoInJlY3QiKS5jYWxsKGguc2V0UmVjdCxhKHArKGMtMSkqdC50eDJ3aWR0aC8yK2QpLG8obS10LmJ5LzItMSksYSh0LnR4MndpZHRoKSxvKHQuYnkrMikpKX0pKX1mdW5jdGlvbiBEKHQsZSl7dmFyIHI9dC5pbmRleCxuPXQudHJhY2V8fHt9LGE9dC5jZFswXSxzPXQuY2Rbcl18fHt9O2Z1bmN0aW9uIGwodCl7cmV0dXJuIHR8fGkodCkmJjA9PT10fXZhciBjPUFycmF5LmlzQXJyYXkocik/ZnVuY3Rpb24odCxlKXt2YXIgaT1vLmNhc3RPcHRpb24oYSxyLHQpO3JldHVybiBsKGkpP2k6by5leHRyYWN0T3B0aW9uKHt9LG4sIiIsZSl9OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uZXh0cmFjdE9wdGlvbihzLG4sdCxlKX07ZnVuY3Rpb24gdShlLHIsbil7dmFyIGk9YyhyLG4pO2woaSkmJih0W2VdPWkpfWlmKHUoImhvdmVyaW5mbyIsImhpIiwiaG92ZXJpbmZvIiksdSgiYmdjb2xvciIsImhiZyIsImhvdmVybGFiZWwuYmdjb2xvciIpLHUoImJvcmRlckNvbG9yIiwiaGJjIiwiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIpLHUoImZvbnRGYW1pbHkiLCJodGYiLCJob3ZlcmxhYmVsLmZvbnQuZmFtaWx5IiksdSgiZm9udFNpemUiLCJodHMiLCJob3ZlcmxhYmVsLmZvbnQuc2l6ZSIpLHUoImZvbnRDb2xvciIsImh0YyIsImhvdmVybGFiZWwuZm9udC5jb2xvciIpLHUoIm5hbWVMZW5ndGgiLCJobmwiLCJob3ZlcmxhYmVsLm5hbWVsZW5ndGgiKSx1KCJ0ZXh0QWxpZ24iLCJodGEiLCJob3ZlcmxhYmVsLmFsaWduIiksdC5wb3NyZWY9InkiPT09ZXx8ImNsb3Nlc3QiPT09ZSYmImgiPT09bi5vcmllbnRhdGlvbj90LnhhLl9vZmZzZXQrKHQueDArdC54MSkvMjp0LnlhLl9vZmZzZXQrKHQueTArdC55MSkvMix0LngwPW8uY29uc3RyYWluKHQueDAsMCx0LnhhLl9sZW5ndGgpLHQueDE9by5jb25zdHJhaW4odC54MSwwLHQueGEuX2xlbmd0aCksdC55MD1vLmNvbnN0cmFpbih0LnkwLDAsdC55YS5fbGVuZ3RoKSx0LnkxPW8uY29uc3RyYWluKHQueTEsMCx0LnlhLl9sZW5ndGgpLHZvaWQgMCE9PXQueExhYmVsVmFsJiYodC54TGFiZWw9InhMYWJlbCJpbiB0P3QueExhYmVsOm0uaG92ZXJMYWJlbFRleHQodC54YSx0LnhMYWJlbFZhbCxuLnhob3ZlcmZvcm1hdCksdC54VmFsPXQueGEuYzJkKHQueExhYmVsVmFsKSksdm9pZCAwIT09dC55TGFiZWxWYWwmJih0LnlMYWJlbD0ieUxhYmVsImluIHQ/dC55TGFiZWw6bS5ob3ZlckxhYmVsVGV4dCh0LnlhLHQueUxhYmVsVmFsLG4ueWhvdmVyZm9ybWF0KSx0LnlWYWw9dC55YS5jMmQodC55TGFiZWxWYWwpKSx2b2lkIDAhPT10LnpMYWJlbFZhbCYmdm9pZCAwPT09dC56TGFiZWwmJih0LnpMYWJlbD1TdHJpbmcodC56TGFiZWxWYWwpKSwhKGlzTmFOKHQueGVycil8fCJsb2ciPT09dC54YS50eXBlJiZ0LnhlcnI8PTApKXt2YXIgZj1tLnRpY2tUZXh0KHQueGEsdC54YS5jMmwodC54ZXJyKSwiaG92ZXIiKS50ZXh0O3ZvaWQgMCE9PXQueGVycm5lZz90LnhMYWJlbCs9IiArIitmKyIgLyAtIittLnRpY2tUZXh0KHQueGEsdC54YS5jMmwodC54ZXJybmVnKSwiaG92ZXIiKS50ZXh0OnQueExhYmVsKz0iIFx4YjEgIitmLCJ4Ij09PWUmJih0LmRpc3RhbmNlKz0xKX1pZighKGlzTmFOKHQueWVycil8fCJsb2ciPT09dC55YS50eXBlJiZ0LnllcnI8PTApKXt2YXIgaD1tLnRpY2tUZXh0KHQueWEsdC55YS5jMmwodC55ZXJyKSwiaG92ZXIiKS50ZXh0O3ZvaWQgMCE9PXQueWVycm5lZz90LnlMYWJlbCs9IiArIitoKyIgLyAtIittLnRpY2tUZXh0KHQueWEsdC55YS5jMmwodC55ZXJybmVnKSwiaG92ZXIiKS50ZXh0OnQueUxhYmVsKz0iIFx4YjEgIitoLCJ5Ij09PWUmJih0LmRpc3RhbmNlKz0xKX12YXIgcD10LmhvdmVyaW5mb3x8dC50cmFjZS5ob3ZlcmluZm87cmV0dXJuIHAmJiJhbGwiIT09cCYmKC0xPT09KHA9QXJyYXkuaXNBcnJheShwKT9wOnAuc3BsaXQoIisiKSkuaW5kZXhPZigieCIpJiYodC54TGFiZWw9dm9pZCAwKSwtMT09PXAuaW5kZXhPZigieSIpJiYodC55TGFiZWw9dm9pZCAwKSwtMT09PXAuaW5kZXhPZigieiIpJiYodC56TGFiZWw9dm9pZCAwKSwtMT09PXAuaW5kZXhPZigidGV4dCIpJiYodC50ZXh0PXZvaWQgMCksLTE9PT1wLmluZGV4T2YoIm5hbWUiKSYmKHQubmFtZT12b2lkIDApKSx0fWZ1bmN0aW9uIFIodCxlLHIpe3ZhciBuLGksbz1yLmNvbnRhaW5lcixzPXIuZnVsbExheW91dCxsPXMuX3NpemUsYz1yLmV2ZW50LHU9ISFlLmhMaW5lUG9pbnQsZj0hIWUudkxpbmVQb2ludDtpZihvLnNlbGVjdEFsbCgiLnNwaWtlbGluZSIpLnJlbW92ZSgpLGZ8fHUpe3ZhciBkPXAuY29tYmluZShzLnBsb3RfYmdjb2xvcixzLnBhcGVyX2JnY29sb3IpO2lmKHUpe3ZhciBnLHYseT1lLmhMaW5lUG9pbnQ7bj15JiZ5LnhhLCJjdXJzb3IiPT09KGk9eSYmeS55YSkuc3Bpa2VzbmFwPyhnPWMucG9pbnRlclgsdj1jLnBvaW50ZXJZKTooZz1uLl9vZmZzZXQreS54LHY9aS5fb2Zmc2V0K3kueSk7dmFyIHgsYixfPWEucmVhZGFiaWxpdHkoeS5jb2xvcixkKTwxLjU/cC5jb250cmFzdChkKTp5LmNvbG9yLHc9aS5zcGlrZW1vZGUsVD1pLnNwaWtldGhpY2tuZXNzLGs9aS5zcGlrZWNvbG9yfHxfLEE9bS5nZXRQeFBvc2l0aW9uKHQsaSk7aWYoLTEhPT13LmluZGV4T2YoInRvYXhpcyIpfHwtMSE9PXcuaW5kZXhPZigiYWNyb3NzIikpe2lmKC0xIT09dy5pbmRleE9mKCJ0b2F4aXMiKSYmKHg9QSxiPWcpLC0xIT09dy5pbmRleE9mKCJhY3Jvc3MiKSl7dmFyIE09aS5fY291bnRlckRvbWFpbk1pbixTPWkuX2NvdW50ZXJEb21haW5NYXg7ImZyZWUiPT09aS5hbmNob3ImJihNPU1hdGgubWluKE0saS5wb3NpdGlvbiksUz1NYXRoLm1heChTLGkucG9zaXRpb24pKSx4PWwubCtNKmwudyxiPWwubCtTKmwud31vLmluc2VydCgibGluZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe3gxOngseDI6Yix5MTp2LHkyOnYsInN0cm9rZS13aWR0aCI6VCxzdHJva2U6aywic3Ryb2tlLWRhc2hhcnJheSI6aC5kYXNoU3R5bGUoaS5zcGlrZWRhc2gsVCl9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApLG8uaW5zZXJ0KCJsaW5lIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7eDE6eCx4MjpiLHkxOnYseTI6diwic3Ryb2tlLXdpZHRoIjpUKzIsc3Ryb2tlOmR9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApfS0xIT09dy5pbmRleE9mKCJtYXJrZXIiKSYmby5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe2N4OkErKCJyaWdodCIhPT1pLnNpZGU/VDotVCksY3k6dixyOlQsZmlsbDprfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCl9aWYoZil7dmFyIEUsTCxDPWUudkxpbmVQb2ludDtuPUMmJkMueGEsaT1DJiZDLnlhLCJjdXJzb3IiPT09bi5zcGlrZXNuYXA/KEU9Yy5wb2ludGVyWCxMPWMucG9pbnRlclkpOihFPW4uX29mZnNldCtDLngsTD1pLl9vZmZzZXQrQy55KTt2YXIgUCxJLE89YS5yZWFkYWJpbGl0eShDLmNvbG9yLGQpPDEuNT9wLmNvbnRyYXN0KGQpOkMuY29sb3Isej1uLnNwaWtlbW9kZSxEPW4uc3Bpa2V0aGlja25lc3MsUj1uLnNwaWtlY29sb3J8fE8sRj1tLmdldFB4UG9zaXRpb24odCxuKTtpZigtMSE9PXouaW5kZXhPZigidG9heGlzIil8fC0xIT09ei5pbmRleE9mKCJhY3Jvc3MiKSl7aWYoLTEhPT16LmluZGV4T2YoInRvYXhpcyIpJiYoUD1GLEk9TCksLTEhPT16LmluZGV4T2YoImFjcm9zcyIpKXt2YXIgQj1uLl9jb3VudGVyRG9tYWluTWluLE49bi5fY291bnRlckRvbWFpbk1heDsiZnJlZSI9PT1uLmFuY2hvciYmKEI9TWF0aC5taW4oQixuLnBvc2l0aW9uKSxOPU1hdGgubWF4KE4sbi5wb3NpdGlvbikpLFA9bC50KygxLU4pKmwuaCxJPWwudCsoMS1CKSpsLmh9by5pbnNlcnQoImxpbmUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHt4MTpFLHgyOkUseTE6UCx5MjpJLCJzdHJva2Utd2lkdGgiOkQsc3Ryb2tlOlIsInN0cm9rZS1kYXNoYXJyYXkiOmguZGFzaFN0eWxlKG4uc3Bpa2VkYXNoLEQpfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxvLmluc2VydCgibGluZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe3gxOkUseDI6RSx5MTpQLHkyOkksInN0cm9rZS13aWR0aCI6RCsyLHN0cm9rZTpkfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKX0tMSE9PXouaW5kZXhPZigibWFya2VyIikmJm8uaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHtjeDpFLGN5OkYtKCJ0b3AiIT09bi5zaWRlP0Q6LUQpLHI6RCxmaWxsOlJ9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKX19fWZ1bmN0aW9uIEYodCxlKXtyZXR1cm4hZXx8KGUudkxpbmVQb2ludCE9PXQuX3NwaWtlcG9pbnRzLnZMaW5lUG9pbnR8fGUuaExpbmVQb2ludCE9PXQuX3NwaWtlcG9pbnRzLmhMaW5lUG9pbnQpfWZ1bmN0aW9uIEIodCxlKXtyZXR1cm4gdS5wbGFpblRleHQodHx8IiIse2xlbjplLGFsbG93ZWRUYWdzOlsiYnIiLCJzdWIiLCJzdXAiLCJiIiwiaSIsImVtIl19KX1mdW5jdGlvbiBOKHQsZSxyKXt2YXIgbj1lW3QrImEiXSxpPWVbdCsiVmFsIl0sYT1lLmNkWzBdO2lmKCJjYXRlZ29yeSI9PT1uLnR5cGUpaT1uLl9jYXRlZ29yaWVzTWFwW2ldO2Vsc2UgaWYoImRhdGUiPT09bi50eXBlKXt2YXIgbz1lLnRyYWNlW3QrInBlcmlvZGFsaWdubWVudCJdO2lmKG8pe3ZhciBzPWUuY2RbZS5pbmRleF0sbD1zW3QrIlN0YXJ0Il07dm9pZCAwPT09bCYmKGw9c1t0XSk7dmFyIGM9c1t0KyJFbmQiXTt2b2lkIDA9PT1jJiYoYz1zW3RdKTt2YXIgdT1jLWw7ImVuZCI9PT1vP2krPXU6Im1pZGRsZSI9PT1vJiYoaSs9dS8yKX1pPW4uZDJjKGkpfXJldHVybiBhJiZhLnQmJmEudC5wb3NMZXR0ZXI9PT1uLl9pZCYmKCJncm91cCIhPT1yLmJveG1vZGUmJiJncm91cCIhPT1yLnZpb2xpbm1vZGV8fChpKz1hLnQuZFBvcykpLGl9ZnVuY3Rpb24gaih0KXtyZXR1cm4gdC5vZmZzZXRUb3ArdC5jbGllbnRUb3B9ZnVuY3Rpb24gVSh0KXtyZXR1cm4gdC5vZmZzZXRMZWZ0K3QuY2xpZW50TGVmdH1mdW5jdGlvbiBWKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1uLngsYT1uLnkscz1pK24ud2lkdGgsbD1hK24uaGVpZ2h0LGM9by5hcHBseTNEVHJhbnNmb3JtKHIuX2ludlRyYW5zZm9ybSkoaSxhKSx1PW8uYXBwbHkzRFRyYW5zZm9ybShyLl9pbnZUcmFuc2Zvcm0pKHMsbCksZj1jWzBdLGg9Y1sxXSxwPXVbMF0sZD11WzFdO3JldHVybnt4OmYseTpoLHdpZHRoOnAtZixoZWlnaHQ6ZC1oLHRvcDpNYXRoLm1pbihoLGQpLGxlZnQ6TWF0aC5taW4oZixwKSxyaWdodDpNYXRoLm1heChmLHApLGJvdHRvbTpNYXRoLm1heChoLGQpfX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9ldmVudHMiOjc2NSwiLi4vLi4vbGliL292ZXJyaWRlX2N1cnNvciI6Nzg3LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vY29sb3IiOjYzOSwiLi4vZHJhZ2VsZW1lbnQiOjY1OCwiLi4vZHJhd2luZyI6NjYxLCIuLi9sZWdlbmQvZGVmYXVsdHMiOjY5MSwiLi4vbGVnZW5kL2RyYXciOjY5MiwiLi9jb25zdGFudHMiOjY3MywiLi9oZWxwZXJzIjo2NzUsIkBwbG90bHkvZDMiOjU4LCJmYXN0LWlzbnVtZXJpYyI6MjQyLHRpbnljb2xvcjI6NTcyfV0sNjc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vY29sb3IiKSxhPXQoIi4vaGVscGVycyIpLmlzVW5pZmllZEhvdmVyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHQpe28uZm9udFt0XXx8KG8uZm9udFt0XT1lLmxlZ2VuZD9lLmxlZ2VuZC5mb250W3RdOmUuZm9udFt0XSl9bz1vfHx7fSxlJiZhKGUuaG92ZXJtb2RlKSYmKG8uZm9udHx8KG8uZm9udD17fSkscygic2l6ZSIpLHMoImZhbWlseSIpLHMoImNvbG9yIiksZS5sZWdlbmQ/KG8uYmdjb2xvcnx8KG8uYmdjb2xvcj1pLmNvbWJpbmUoZS5sZWdlbmQuYmdjb2xvcixlLnBhcGVyX2JnY29sb3IpKSxvLmJvcmRlcmNvbG9yfHwoby5ib3JkZXJjb2xvcj1lLmxlZ2VuZC5ib3JkZXJjb2xvcikpOm8uYmdjb2xvcnx8KG8uYmdjb2xvcj1lLnBhcGVyX2JnY29sb3IpKSxyKCJob3ZlcmxhYmVsLmJnY29sb3IiLG8uYmdjb2xvcikscigiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIsby5ib3JkZXJjb2xvcikscigiaG92ZXJsYWJlbC5uYW1lbGVuZ3RoIixvLm5hbWVsZW5ndGgpLG4uY29lcmNlRm9udChyLCJob3ZlcmxhYmVsLmZvbnQiLG8uZm9udCkscigiaG92ZXJsYWJlbC5hbGlnbiIsby5hbGlnbil9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9jb2xvciI6NjM5LCIuL2hlbHBlcnMiOjY3NX1dLDY3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIHZvaWQgMCE9PWVbcl0/ZVtyXTpuLmNvZXJjZSh0LGUsaSxyLGEpfXJldHVybiByKCJjbGlja21vZGUiKSxyKCJob3Zlcm1vZGUiKX19LHsiLi4vLi4vbGliIjo3NzYsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjY4MH1dLDY3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL2RyYWdlbGVtZW50Iiksbz10KCIuL2hlbHBlcnMiKSxzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxsPXQoIi4vaG92ZXIiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiZngiLGNvbnN0YW50czp0KCIuL2NvbnN0YW50cyIpLHNjaGVtYTp7bGF5b3V0OnN9LGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczpzLHN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzOnQoIi4vbGF5b3V0X2dsb2JhbF9kZWZhdWx0cyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksZ2V0RGlzdGFuY2VGdW5jdGlvbjpvLmdldERpc3RhbmNlRnVuY3Rpb24sZ2V0Q2xvc2VzdDpvLmdldENsb3Nlc3QsaW5ib3g6by5pbmJveCxxdWFkcmF0dXJlOm8ucXVhZHJhdHVyZSxhcHBlbmRBcnJheVBvaW50VmFsdWU6by5hcHBlbmRBcnJheVBvaW50VmFsdWUsY2FzdEhvdmVyT3B0aW9uOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaS5jYXN0T3B0aW9uKHQsZSwiaG92ZXJsYWJlbC4iK3IpfSxjYXN0SG92ZXJpbmZvOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaS5jYXN0T3B0aW9uKHQsciwiaG92ZXJpbmZvIiwoZnVuY3Rpb24ocil7cmV0dXJuIGkuY29lcmNlSG92ZXJpbmZvKHtob3ZlcmluZm86cn0se19tb2R1bGU6dC5fbW9kdWxlfSxlKX0pKX0saG92ZXI6bC5ob3Zlcix1bmhvdmVyOmEudW5ob3Zlcixsb25lSG92ZXI6bC5sb25lSG92ZXIsbG9uZVVuaG92ZXI6ZnVuY3Rpb24odCl7dmFyIGU9aS5pc0QzU2VsZWN0aW9uKHQpP3Q6bi5zZWxlY3QodCk7ZS5zZWxlY3RBbGwoImcuaG92ZXJ0ZXh0IikucmVtb3ZlKCksZS5zZWxlY3RBbGwoIi5zcGlrZWxpbmUiKS5yZW1vdmUoKX0sY2xpY2s6dCgiLi9jbGljayIpfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vZHJhZ2VsZW1lbnQiOjY1OCwiLi9hdHRyaWJ1dGVzIjo2NzAsIi4vY2FsYyI6NjcxLCIuL2NsaWNrIjo2NzIsIi4vY29uc3RhbnRzIjo2NzMsIi4vZGVmYXVsdHMiOjY3NCwiLi9oZWxwZXJzIjo2NzUsIi4vaG92ZXIiOjY3NiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjgwLCIuL2xheW91dF9kZWZhdWx0cyI6NjgxLCIuL2xheW91dF9nbG9iYWxfZGVmYXVsdHMiOjY4MiwiQHBsb3RseS9kMyI6NTh9XSw2ODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxpPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpKHtlZGl0VHlwZToibm9uZSJ9KTtpLmZhbWlseS5kZmx0PW4uSE9WRVJGT05ULGkuc2l6ZS5kZmx0PW4uSE9WRVJGT05UU0laRSxlLmV4cG9ydHM9e2NsaWNrbW9kZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiZXZlbnQiLCJzZWxlY3QiXSxkZmx0OiJldmVudCIsZWRpdFR5cGU6InBsb3QiLGV4dHJhczpbIm5vbmUiXX0sZHJhZ21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInpvb20iLCJwYW4iLCJzZWxlY3QiLCJsYXNzbyIsImRyYXdjbG9zZWRwYXRoIiwiZHJhd29wZW5wYXRoIiwiZHJhd2xpbmUiLCJkcmF3cmVjdCIsImRyYXdjaXJjbGUiLCJvcmJpdCIsInR1cm50YWJsZSIsITFdLGRmbHQ6Inpvb20iLGVkaXRUeXBlOiJtb2RlYmFyIn0saG92ZXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ4IiwieSIsImNsb3Nlc3QiLCExLCJ4IHVuaWZpZWQiLCJ5IHVuaWZpZWQiXSxkZmx0OiJjbG9zZXN0IixlZGl0VHlwZToibW9kZWJhciJ9LGhvdmVyZGlzdGFuY2U6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjotMSxkZmx0OjIwLGVkaXRUeXBlOiJub25lIn0sc3Bpa2VkaXN0YW5jZTp7dmFsVHlwZToiaW50ZWdlciIsbWluOi0xLGRmbHQ6LTEsZWRpdFR5cGU6Im5vbmUifSxob3ZlcmxhYmVsOntiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im5vbmUifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJub25lIn0sZm9udDppLGFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwicmlnaHQiLCJhdXRvIl0sZGZsdDoiYXV0byIsZWRpdFR5cGU6Im5vbmUifSxuYW1lbGVuZ3RoOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsZGZsdDoxNSxlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJub25lIn0sc2VsZWN0ZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJoIiwidiIsImQiLCJhbnkiXSxkZmx0OiJhbnkiLGVkaXRUeXBlOiJub25lIn19fSx7Ii4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuL2NvbnN0YW50cyI6NjczfV0sNjgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi9ob3Zlcm1vZGVfZGVmYXVsdHMiKSxvPXQoIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKHQsZSkmJihyKCJob3ZlcmRpc3RhbmNlIikscigic3Bpa2VkaXN0YW5jZSIpKSwic2VsZWN0Ij09PXIoImRyYWdtb2RlIikmJnIoInNlbGVjdGRpcmVjdGlvbiIpO3ZhciBzPWUuX2hhcygibWFwYm94IiksbD1lLl9oYXMoImdlbyIpLGM9ZS5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aDsiem9vbSI9PT1lLmRyYWdtb2RlJiYoKHN8fGwpJiYxPT09Y3x8cyYmbCYmMj09PWMpJiYoZS5kcmFnbW9kZT0icGFuIiksbyh0LGUscil9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiOjY3NywiLi9ob3Zlcm1vZGVfZGVmYXVsdHMiOjY3OCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjgwfV0sNjgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIiksYT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aSh0LGUsKGZ1bmN0aW9uKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9KSl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiOjY3NywiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjgwfV0sNjgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vbGliL3JlZ2V4IikuY291bnRlcixhPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuaWRSZWdleCxzPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxsPXtyb3dzOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MSxlZGl0VHlwZToicGxvdCJ9LHJvd29yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgdG8gYm90dG9tIiwiYm90dG9tIHRvIHRvcCJdLGRmbHQ6InRvcCB0byBib3R0b20iLGVkaXRUeXBlOiJwbG90In0sY29sdW1uczp7dmFsVHlwZToiaW50ZWdlciIsbWluOjEsZWRpdFR5cGU6InBsb3QifSxzdWJwbG90czp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxkaW1lbnNpb25zOjIsaXRlbXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbaSgieHkiKS50b1N0cmluZygpLCIiXSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0seGF4ZXM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbby54LnRvU3RyaW5nKCksIiJdLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSx5YXhlczp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxpdGVtczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltvLnkudG9TdHJpbmcoKSwiIl0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LHBhdHRlcm46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluZGVwZW5kZW50IiwiY291cGxlZCJdLGRmbHQ6ImNvdXBsZWQiLGVkaXRUeXBlOiJwbG90In0seGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToicGxvdCJ9LHlnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifSxkb21haW46YSh7bmFtZToiZ3JpZCIsZWRpdFR5cGU6InBsb3QiLG5vR3JpZENlbGw6ITB9LHt9KSx4c2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYm90dG9tIiwiYm90dG9tIHBsb3QiLCJ0b3AgcGxvdCIsInRvcCJdLGRmbHQ6ImJvdHRvbSBwbG90IixlZGl0VHlwZToicGxvdCJ9LHlzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwibGVmdCBwbG90IiwicmlnaHQgcGxvdCIsInJpZ2h0Il0sZGZsdDoibGVmdCBwbG90IixlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In07ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49ZVtyKyJheGVzIl0saT1PYmplY3Qua2V5cygodC5fc3Bsb21BeGVzfHx7fSlbcl18fHt9KTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOmkubGVuZ3RoP2k6dm9pZCAwfWZ1bmN0aW9uIHUodCxlLHIsbixpLGEpe3ZhciBvPWUodCsiZ2FwIixyKSxzPWUoImRvbWFpbi4iK3QpO2UodCsic2lkZSIsbik7Zm9yKHZhciBsPW5ldyBBcnJheShpKSxjPXNbMF0sdT0oc1sxXS1jKS8oaS1vKSxmPXUqKDEtbyksaD0wO2g8aTtoKyspe3ZhciBwPWMrdSpoO2xbYT9pLTEtaDpoXT1bcCxwK2ZdfXJldHVybiBsfWZ1bmN0aW9uIGYodCxlLHIsbixpKXt2YXIgYSxvPW5ldyBBcnJheShyKTtmdW5jdGlvbiBzKHQscil7LTEhPT1lLmluZGV4T2YocikmJnZvaWQgMD09PW5bcl0/KG9bdF09cixuW3JdPXQpOm9bdF09IiJ9aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IoYT0wO2E8cjthKyspcyhhLHRbYV0pO2Vsc2UgZm9yKHMoMCxpKSxhPTE7YTxyO2ErKylzKGEsaSsoYSsxKSk7cmV0dXJuIG99ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImdyaWQiLHNjaGVtYTp7bGF5b3V0OntncmlkOmx9fSxsYXlvdXRBdHRyaWJ1dGVzOmwsc2l6ZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5ncmlkfHx7fSxpPWMoZSxyLCJ4IiksYT1jKGUsciwieSIpO2lmKHQuZ3JpZHx8aXx8YSl7dmFyIG8sZixoPUFycmF5LmlzQXJyYXkoci5zdWJwbG90cykmJkFycmF5LmlzQXJyYXkoci5zdWJwbG90c1swXSkscD1BcnJheS5pc0FycmF5KGkpLGQ9QXJyYXkuaXNBcnJheShhKSxtPXAmJmkhPT1yLnhheGVzJiZkJiZhIT09ci55YXhlcztoPyhvPXIuc3VicGxvdHMubGVuZ3RoLGY9ci5zdWJwbG90c1swXS5sZW5ndGgpOihkJiYobz1hLmxlbmd0aCkscCYmKGY9aS5sZW5ndGgpKTt2YXIgZz1zLm5ld0NvbnRhaW5lcihlLCJncmlkIiksdj1rKCJyb3dzIixvKSx5PWsoImNvbHVtbnMiLGYpO2lmKHYqeT4xKXtpZighaCYmIXAmJiFkKSJpbmRlcGVuZGVudCI9PT1rKCJwYXR0ZXJuIikmJihoPSEwKTtnLl9oYXNTdWJwbG90R3JpZD1oO3ZhciB4LGIsXz0idG9wIHRvIGJvdHRvbSI9PT1rKCJyb3dvcmRlciIpLHc9aD8uMjouMSxUPWg/LjM6LjE7bSYmZS5fc3Bsb21HcmlkRGZsdCYmKHg9ZS5fc3Bsb21HcmlkRGZsdC54c2lkZSxiPWUuX3NwbG9tR3JpZERmbHQueXNpZGUpLGcuX2RvbWFpbnM9e3g6dSgieCIsayx3LHgseSkseTp1KCJ5IixrLFQsYix2LF8pfX1lbHNlIGRlbGV0ZSBlLmdyaWR9ZnVuY3Rpb24gayh0LGUpe3JldHVybiBuLmNvZXJjZShyLGcsbCx0LGUpfX0sY29udGVudERlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5ncmlkO2lmKHImJnIuX2RvbWFpbnMpe3ZhciBuLGksYSxvLHMsbCx1LGg9dC5ncmlkfHx7fSxwPWUuX3N1YnBsb3RzLGQ9ci5faGFzU3VicGxvdEdyaWQsbT1yLnJvd3MsZz1yLmNvbHVtbnMsdj0iaW5kZXBlbmRlbnQiPT09ci5wYXR0ZXJuLHk9ci5fYXhpc01hcD17fTtpZihkKXt2YXIgeD1oLnN1YnBsb3RzfHxbXTtsPXIuc3VicGxvdHM9bmV3IEFycmF5KG0pO3ZhciBiPTE7Zm9yKG49MDtuPG07bisrKXt2YXIgXz1sW25dPW5ldyBBcnJheShnKSx3PXhbbl18fFtdO2ZvcihpPTA7aTxnO2krKylpZih2PyhzPTE9PT1iPyJ4eSI6IngiK2IrInkiK2IsYisrKTpzPXdbaV0sX1tpXT0iIiwtMSE9PXAuY2FydGVzaWFuLmluZGV4T2Yocykpe2lmKHU9cy5pbmRleE9mKCJ5IiksYT1zLnNsaWNlKDAsdSksbz1zLnNsaWNlKHUpLHZvaWQgMCE9PXlbYV0mJnlbYV0hPT1pfHx2b2lkIDAhPT15W29dJiZ5W29dIT09biljb250aW51ZTtfW2ldPXMseVthXT1pLHlbb109bn19fWVsc2V7dmFyIFQ9YyhlLGgsIngiKSxrPWMoZSxoLCJ5Iik7ci54YXhlcz1mKFQscC54YXhpcyxnLHksIngiKSxyLnlheGVzPWYoayxwLnlheGlzLG0seSwieSIpfXZhciBBPXIuX2FuY2hvcnM9e30sTT0idG9wIHRvIGJvdHRvbSI9PT1yLnJvd29yZGVyO2Zvcih2YXIgUyBpbiB5KXt2YXIgRSxMLEMsUD1TLmNoYXJBdCgwKSxJPXJbUCsic2lkZSJdO2lmKEkubGVuZ3RoPDgpQVtTXT0iZnJlZSI7ZWxzZSBpZigieCI9PT1QKXtpZigidCI9PT1JLmNoYXJBdCgwKT09PU0/KEU9MCxMPTEsQz1tKTooRT1tLTEsTD0tMSxDPS0xKSxkKXt2YXIgTz15W1NdO2ZvcihuPUU7biE9PUM7bis9TClpZigocz1sW25dW09dKSYmKHU9cy5pbmRleE9mKCJ5Iikscy5zbGljZSgwLHUpPT09Uykpe0FbU109cy5zbGljZSh1KTticmVha319ZWxzZSBmb3Iobj1FO24hPT1DO24rPUwpaWYobz1yLnlheGVzW25dLC0xIT09cC5jYXJ0ZXNpYW4uaW5kZXhPZihTK28pKXtBW1NdPW87YnJlYWt9fWVsc2UgaWYoImwiPT09SS5jaGFyQXQoMCk/KEU9MCxMPTEsQz1nKTooRT1nLTEsTD0tMSxDPS0xKSxkKXt2YXIgej15W1NdO2ZvcihuPUU7biE9PUM7bis9TClpZigocz1sW3pdW25dKSYmKHU9cy5pbmRleE9mKCJ5Iikscy5zbGljZSh1KT09PVMpKXtBW1NdPXMuc2xpY2UoMCx1KTticmVha319ZWxzZSBmb3Iobj1FO24hPT1DO24rPUwpaWYoYT1yLnhheGVzW25dLC0xIT09cC5jYXJ0ZXNpYW4uaW5kZXhPZihhK1MpKXtBW1NdPWE7YnJlYWt9fX19fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL3JlZ2V4Ijo3OTMsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6ODM0LCIuLi8uLi9wbG90cy9kb21haW4iOjg1NX1dLDY4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIiksaT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7dCgiLi4vLi4vY29uc3RhbnRzL2F4aXNfcGxhY2VhYmxlX29iamVjdHMiKTtlLmV4cG9ydHM9aSgiaW1hZ2UiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzb3VyY2U6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGxheWVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiZWxvdyIsImFib3ZlIl0sZGZsdDoiYWJvdmUiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzaXpleDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHNpemV5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0sc2l6aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmaWxsIiwiY29udGFpbiIsInN0cmV0Y2giXSxkZmx0OiJjb250YWluIixlZGl0VHlwZToiYXJyYXlkcmF3In0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHg6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJhcnJheWRyYXcifSx5Ont2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6InRvcCIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixuLmlkUmVnZXgueC50b1N0cmluZygpXSxkZmx0OiJwYXBlciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHlyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixuLmlkUmVnZXgueS50b1N0cmluZygpXSxkZmx0OiJwYXBlciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGVkaXRUeXBlOiJhcnJheWRyYXcifSl9LHsiLi4vLi4vY29uc3RhbnRzL2F4aXNfcGxhY2VhYmxlX29iamVjdHMiOjc0NSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo4MzR9XSw2ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYi90b19sb2dfcmFuZ2UiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZT1lfHx7fTt2YXIgbz0ibG9nIj09PXImJiJsaW5lYXIiPT09ZS50eXBlLHM9ImxpbmVhciI9PT1yJiYibG9nIj09PWUudHlwZTtpZihvfHxzKWZvcih2YXIgbCxjLHU9dC5fZnVsbExheW91dC5pbWFnZXMsZj1lLl9pZC5jaGFyQXQoMCksaD0wO2g8dS5sZW5ndGg7aCsrKWlmKGM9ImltYWdlc1siK2grIl0uIiwobD11W2hdKVtmKyJyZWYiXT09PWUuX2lkKXt2YXIgcD1sW2ZdLGQ9bFsic2l6ZSIrZl0sbT1udWxsLGc9bnVsbDtpZihvKXttPWkocCxlLnJhbmdlKTt2YXIgdj1kL01hdGgucG93KDEwLG0pLzI7Zz0yKk1hdGgubG9nKHYrTWF0aC5zcXJ0KDErdip2KSkvTWF0aC5MTjEwfWVsc2UgZz0obT1NYXRoLnBvdygxMCxwKSkqKE1hdGgucG93KDEwLGQvMiktTWF0aC5wb3coMTAsLWQvMikpO24obSk/bihnKXx8KGc9bnVsbCk6KG09bnVsbCxnPW51bGwpLGEoYytmLG0pLGEoYysic2l6ZSIrZixnKX19fSx7Ii4uLy4uL2xpYi90b19sb2dfcmFuZ2UiOjgwNCwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDY4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIHModCxlLHIpe2Z1bmN0aW9uIGEocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX12YXIgcz1hKCJzb3VyY2UiKTtpZighYSgidmlzaWJsZSIsISFzKSlyZXR1cm4gZTthKCJsYXllciIpLGEoInhhbmNob3IiKSxhKCJ5YW5jaG9yIiksYSgic2l6ZXgiKSxhKCJzaXpleSIpLGEoInNpemluZyIpLGEoIm9wYWNpdHkiKTtmb3IodmFyIGw9e19mdWxsTGF5b3V0OnJ9LGM9WyJ4IiwieSJdLHU9MDt1PDI7dSsrKXt2YXIgZj1jW3VdLGg9aS5jb2VyY2VSZWYodCxlLGwsZiwicGFwZXIiLHZvaWQgMCk7aWYoInBhcGVyIiE9PWgpaS5nZXRGcm9tSWQobCxoKS5faW1nSW5kaWNlcy5wdXNoKGUuX2luZGV4KTtpLmNvZXJjZVBvc2l0aW9uKGUsbCxhLGgsZiwwKX1yZXR1cm4gZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXthKHQsZSx7bmFtZToiaW1hZ2VzIixoYW5kbGVJdGVtRGVmYXVsdHM6c30pfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo4MjIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4vYXR0cmlidXRlcyI6Njg0fV0sNjg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uL2RyYXdpbmciKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbD10Ll9mdWxsTGF5b3V0LGM9W10sdT17fSxmPVtdO2ZvcihyPTA7cjxsLmltYWdlcy5sZW5ndGg7cisrKXt2YXIgaD1sLmltYWdlc1tyXTtpZihoLnZpc2libGUpaWYoImJlbG93Ij09PWgubGF5ZXImJiJwYXBlciIhPT1oLnhyZWYmJiJwYXBlciIhPT1oLnlyZWYpe2U9by5yZWYyaWQoaC54cmVmKStvLnJlZjJpZChoLnlyZWYpO3ZhciBwPWwuX3Bsb3RzW2VdO2lmKCFwKXtmLnB1c2goaCk7Y29udGludWV9cC5tYWlucGxvdCYmKGU9cC5tYWlucGxvdC5pZCksdVtlXXx8KHVbZV09W10pLHVbZV0ucHVzaChoKX1lbHNlImFib3ZlIj09PWgubGF5ZXI/Yy5wdXNoKGgpOmYucHVzaChoKX12YXIgZD17bGVmdDp7c2l6aW5nOiJ4TWluIixvZmZzZXQ6MH0sY2VudGVyOntzaXppbmc6InhNaWQiLG9mZnNldDotLjV9LHJpZ2h0OntzaXppbmc6InhNYXgiLG9mZnNldDotMX19LG09e3RvcDp7c2l6aW5nOiJZTWluIixvZmZzZXQ6MH0sbWlkZGxlOntzaXppbmc6IllNaWQiLG9mZnNldDotLjV9LGJvdHRvbTp7c2l6aW5nOiJZTWF4IixvZmZzZXQ6LTF9fTtmdW5jdGlvbiBnKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHRoaXMuX2ltZ1NyYyE9PWUuc291cmNlKWlmKHIuYXR0cigieG1sbnMiLHMuc3ZnKSxlLnNvdXJjZSYmImRhdGE6Ij09PWUuc291cmNlLnNsaWNlKDAsNSkpci5hdHRyKCJ4bGluazpocmVmIixlLnNvdXJjZSksdGhpcy5faW1nU3JjPWUuc291cmNlO2Vsc2V7dmFyIGk9bmV3IFByb21pc2UoZnVuY3Rpb24odCl7dmFyIG49bmV3IEltYWdlO2Z1bmN0aW9uIGkoKXtyLnJlbW92ZSgpLHQoKX10aGlzLmltZz1uLG4uc2V0QXR0cmlidXRlKCJjcm9zc09yaWdpbiIsImFub255bW91cyIpLG4ub25lcnJvcj1pLG4ub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ZS53aWR0aD10aGlzLndpZHRoLGUuaGVpZ2h0PXRoaXMuaGVpZ2h0LGUuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UodGhpcywwLDApO3ZhciBuPWUudG9EYXRhVVJMKCJpbWFnZS9wbmciKTtyLmF0dHIoInhsaW5rOmhyZWYiLG4pLHQoKX0sci5vbigiZXJyb3IiLGkpLG4uc3JjPWUuc291cmNlLHRoaXMuX2ltZ1NyYz1lLnNvdXJjZX0uYmluZCh0aGlzKSk7dC5fcHJvbWlzZXMucHVzaChpKX19ZnVuY3Rpb24gdihlKXt2YXIgcixvLHM9bi5zZWxlY3QodGhpcyksYz1hLmdldEZyb21JZCh0LGUueHJlZiksdT1hLmdldEZyb21JZCh0LGUueXJlZiksZj0iZG9tYWluIj09PWEuZ2V0UmVmVHlwZShlLnhyZWYpLGg9ImRvbWFpbiI9PT1hLmdldFJlZlR5cGUoZS55cmVmKSxwPWwuX3NpemU7cj12b2lkIDAhPT1jPyJzdHJpbmciPT10eXBlb2YgZS54cmVmJiZmP2MuX2xlbmd0aCplLnNpemV4Ok1hdGguYWJzKGMubDJwKGUuc2l6ZXgpLWMubDJwKDApKTplLnNpemV4KnAudyxvPXZvaWQgMCE9PXU/InN0cmluZyI9PXR5cGVvZiBlLnlyZWYmJmg/dS5fbGVuZ3RoKmUuc2l6ZXk6TWF0aC5hYnModS5sMnAoZS5zaXpleSktdS5sMnAoMCkpOmUuc2l6ZXkqcC5oO3ZhciBnLHYseT1yKmRbZS54YW5jaG9yXS5vZmZzZXQseD1vKm1bZS55YW5jaG9yXS5vZmZzZXQsYj1kW2UueGFuY2hvcl0uc2l6aW5nK21bZS55YW5jaG9yXS5zaXppbmc7c3dpdGNoKGc9dm9pZCAwIT09Yz8ic3RyaW5nIj09dHlwZW9mIGUueHJlZiYmZj9jLl9sZW5ndGgqZS54K2MuX29mZnNldDpjLnIycChlLngpK2MuX29mZnNldDplLngqcC53K3AubCxnKz15LHY9dm9pZCAwIT09dT8ic3RyaW5nIj09dHlwZW9mIGUueXJlZiYmaD91Ll9sZW5ndGgqKDEtZS55KSt1Ll9vZmZzZXQ6dS5yMnAoZS55KSt1Ll9vZmZzZXQ6cC5oLWUueSpwLmgrcC50LHYrPXgsZS5zaXppbmcpe2Nhc2UiZmlsbCI6Yis9IiBzbGljZSI7YnJlYWs7Y2FzZSJzdHJldGNoIjpiPSJub25lIn1zLmF0dHIoe3g6Zyx5OnYsd2lkdGg6cixoZWlnaHQ6byxwcmVzZXJ2ZUFzcGVjdFJhdGlvOmIsb3BhY2l0eTplLm9wYWNpdHl9KTt2YXIgXz0oYyYmImRvbWFpbiIhPT1hLmdldFJlZlR5cGUoZS54cmVmKT9jLl9pZDoiIikrKHUmJiJkb21haW4iIT09YS5nZXRSZWZUeXBlKGUueXJlZik/dS5faWQ6IiIpO2kuc2V0Q2xpcFVybChzLF8/ImNsaXAiK2wuX3VpZCtfOm51bGwsdCl9dmFyIHk9bC5faW1hZ2VMb3dlckxheWVyLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKGYpLHg9bC5faW1hZ2VVcHBlckxheWVyLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKGMpO3kuZW50ZXIoKS5hcHBlbmQoImltYWdlIikseC5lbnRlcigpLmFwcGVuZCgiaW1hZ2UiKSx5LmV4aXQoKS5yZW1vdmUoKSx4LmV4aXQoKS5yZW1vdmUoKSx5LmVhY2goKGZ1bmN0aW9uKHQpe2cuYmluZCh0aGlzKSh0KSx2LmJpbmQodGhpcykodCl9KSkseC5lYWNoKChmdW5jdGlvbih0KXtnLmJpbmQodGhpcykodCksdi5iaW5kKHRoaXMpKHQpfSkpO3ZhciBiPU9iamVjdC5rZXlzKGwuX3Bsb3RzKTtmb3Iocj0wO3I8Yi5sZW5ndGg7cisrKXtlPWJbcl07dmFyIF89bC5fcGxvdHNbZV07aWYoXy5pbWFnZWxheWVyKXt2YXIgdz1fLmltYWdlbGF5ZXIuc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEodVtlXXx8W10pO3cuZW50ZXIoKS5hcHBlbmQoImltYWdlIiksdy5leGl0KCkucmVtb3ZlKCksdy5lYWNoKChmdW5jdGlvbih0KXtnLmJpbmQodGhpcykodCksdi5iaW5kKHRoaXMpKHQpfSkpfX19fSx7Ii4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3NTMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6ODMxLCIuLi9kcmF3aW5nIjo2NjEsIkBwbG90bHkvZDMiOjU4fV0sNjg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJpbWFnZXMiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGluY2x1ZGVCYXNlUGxvdDp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIikoImltYWdlcyIpLGRyYXc6dCgiLi9kcmF3IiksY29udmVydENvb3Jkczp0KCIuL2NvbnZlcnRfY29vcmRzIil9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiOjg0MCwiLi9hdHRyaWJ1dGVzIjo2ODQsIi4vY29udmVydF9jb29yZHMiOjY4NSwiLi9kZWZhdWx0cyI6Njg2LCIuL2RyYXciOjY4N31dLDY4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbG9yL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibGVnZW5kIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6ImxlZ2VuZCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToibGVnZW5kIn0sZm9udDpuKHtlZGl0VHlwZToibGVnZW5kIn0pLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGRmbHQ6InYiLGVkaXRUeXBlOiJsZWdlbmQifSx0cmFjZW9yZGVyOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJyZXZlcnNlZCIsImdyb3VwZWQiXSxleHRyYXM6WyJub3JtYWwiXSxlZGl0VHlwZToibGVnZW5kIn0sdHJhY2Vncm91cGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwLGVkaXRUeXBlOiJsZWdlbmQifSxpdGVtc2l6aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0cmFjZSIsImNvbnN0YW50Il0sZGZsdDoidHJhY2UiLGVkaXRUeXBlOiJsZWdlbmQifSxpdGVtd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjMwLGRmbHQ6MzAsZWRpdFR5cGU6ImxlZ2VuZCJ9LGl0ZW1jbGljazp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9nZ2xlIiwidG9nZ2xlb3RoZXJzIiwhMV0sZGZsdDoidG9nZ2xlIixlZGl0VHlwZToibGVnZW5kIn0saXRlbWRvdWJsZWNsaWNrOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b2dnbGUiLCJ0b2dnbGVvdGhlcnMiLCExXSxkZmx0OiJ0b2dnbGVvdGhlcnMiLGVkaXRUeXBlOiJsZWdlbmQifSxncm91cGNsaWNrOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b2dnbGVpdGVtIiwidG9nZ2xlZ3JvdXAiXSxkZmx0OiJ0b2dnbGVncm91cCIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGVkaXRUeXBlOiJsZWdlbmQifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGVkaXRUeXBlOiJsZWdlbmQifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZWRpdFR5cGU6ImxlZ2VuZCJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSx2YWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGZvbnQ6bih7ZWRpdFR5cGU6ImxlZ2VuZCJ9KSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJsZWZ0IiwidG9wIGxlZnQiXSxlZGl0VHlwZToibGVnZW5kIn0sZWRpdFR5cGU6ImxlZ2VuZCJ9LGVkaXRUeXBlOiJsZWdlbmQifX0seyIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjg1NiwiLi4vY29sb3IvYXR0cmlidXRlcyI6NjM4fV0sNjkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c2Nyb2xsQmFyV2lkdGg6NixzY3JvbGxCYXJNaW5IZWlnaHQ6MjAsc2Nyb2xsQmFyQ29sb3I6IiM4MDhCQTQiLHNjcm9sbEJhck1hcmdpbjo0LHNjcm9sbEJhckVudGVyQXR0cnM6e3J4OjIwLHJ5OjMsd2lkdGg6MCxoZWlnaHQ6MH0sdGl0bGVQYWQ6MixpdGVtR2FwOjV9fSx7fV0sNjkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxvPXQoIi4vYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiKSxsPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBjPXQubGVnZW5kfHx7fSx1PTAsZj0hMSxoPSJub3JtYWwiLHA9MDtwPHIubGVuZ3RoO3ArKyl7dmFyIGQ9cltwXTtkLnZpc2libGUmJigoZC5zaG93bGVnZW5kfHxkLl9kZmx0U2hvd0xlZ2VuZCYmIShkLl9tb2R1bGUmJmQuX21vZHVsZS5hdHRyaWJ1dGVzJiZkLl9tb2R1bGUuYXR0cmlidXRlcy5zaG93bGVnZW5kJiYhMT09PWQuX21vZHVsZS5hdHRyaWJ1dGVzLnNob3dsZWdlbmQuZGZsdCkpJiYodSsrLGQuc2hvd2xlZ2VuZCYmKGY9ITAsKG4udHJhY2VJcyhkLCJwaWUtbGlrZSIpfHwhMD09PWQuX2lucHV0LnNob3dsZWdlbmQpJiZ1KyspKSwobi50cmFjZUlzKGQsImJhciIpJiYic3RhY2siPT09ZS5iYXJtb2RlfHwtMSE9PVsidG9uZXh0eCIsInRvbmV4dHkiXS5pbmRleE9mKGQuZmlsbCkpJiYoaD1sLmlzR3JvdXBlZCh7dHJhY2VvcmRlcjpofSk/Imdyb3VwZWQrcmV2ZXJzZWQiOiJyZXZlcnNlZCIpLHZvaWQgMCE9PWQubGVnZW5kZ3JvdXAmJiIiIT09ZC5sZWdlbmRncm91cCYmKGg9bC5pc1JldmVyc2VkKHt0cmFjZW9yZGVyOmh9KT8icmV2ZXJzZWQrZ3JvdXBlZCI6Imdyb3VwZWQiKSl9dmFyIG09aS5jb2VyY2UodCxlLHMsInNob3dsZWdlbmQiLGYmJnU+MSk7aWYoITEhPT1tfHxjLnVpcmV2aXNpb24pe3ZhciBnPWEubmV3Q29udGFpbmVyKGUsImxlZ2VuZCIpO2lmKFQoInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbiksITEhPT1tKXtUKCJiZ2NvbG9yIixlLnBhcGVyX2JnY29sb3IpLFQoImJvcmRlcmNvbG9yIiksVCgiYm9yZGVyd2lkdGgiKTt2YXIgdix5LHgsYj1pLmNvZXJjZUZvbnQoVCwiZm9udCIsZS5mb250KSxfPSJoIj09PVQoIm9yaWVudGF0aW9uIik7aWYoXz8odj0wLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImlzVmlzaWJsZSIpKHQueGF4aXMpPyh5PTEuMSx4PSJib3R0b20iKTooeT0tLjEseD0idG9wIikpOih2PTEuMDIseT0xLHg9ImF1dG8iKSxUKCJ0cmFjZW9yZGVyIixoKSxsLmlzR3JvdXBlZChlLmxlZ2VuZCkmJlQoInRyYWNlZ3JvdXBnYXAiKSxUKCJpdGVtc2l6aW5nIiksVCgiaXRlbXdpZHRoIiksVCgiaXRlbWNsaWNrIiksVCgiaXRlbWRvdWJsZWNsaWNrIiksVCgiZ3JvdXBjbGljayIpLFQoIngiLHYpLFQoInhhbmNob3IiKSxUKCJ5Iix5KSxUKCJ5YW5jaG9yIix4KSxUKCJ2YWxpZ24iKSxpLm5vbmVPckFsbChjLGcsWyJ4IiwieSJdKSxUKCJ0aXRsZS50ZXh0Iikpe1QoInRpdGxlLnNpZGUiLF8/ImxlZnQiOiJ0b3AiKTt2YXIgdz1pLmV4dGVuZEZsYXQoe30sYix7c2l6ZTppLmJpZ0ZvbnQoYi5zaXplKX0pO2kuY29lcmNlRm9udChULCJ0aXRsZS5mb250Iix3KX19fWZ1bmN0aW9uIFQodCxlKXtyZXR1cm4gaS5jb2VyY2UoYyxnLG8sdCxlKX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTYsIi4uLy4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIjo4ODEsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4vYXR0cmlidXRlcyI6Njg5LCIuL2hlbHBlcnMiOjY5NX1dLDY5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vbGliL2V2ZW50cyIpLGw9dCgiLi4vZHJhZ2VsZW1lbnQiKSxjPXQoIi4uL2RyYXdpbmciKSx1PXQoIi4uL2NvbG9yIiksZj10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxoPXQoIi4vaGFuZGxlX2NsaWNrIikscD10KCIuL2NvbnN0YW50cyIpLGQ9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLG09ZC5MSU5FX1NQQUNJTkcsZz1kLkZST01fVEwsdj1kLkZST01fQlIseT10KCIuL2dldF9sZWdlbmRfZGF0YSIpLHg9dCgiLi9zdHlsZSIpLGI9dCgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gXyh0LGUscixuLGkpe3ZhciBhPXIuZGF0YSgpWzBdWzBdLnRyYWNlLGw9e2V2ZW50Omksbm9kZTpyLm5vZGUoKSxjdXJ2ZU51bWJlcjphLmluZGV4LGV4cGFuZGVkSW5kZXg6YS5fZXhwYW5kZWRJbmRleCxkYXRhOnQuZGF0YSxsYXlvdXQ6dC5sYXlvdXQsZnJhbWVzOnQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsY29uZmlnOnQuX2NvbnRleHQsZnVsbERhdGE6dC5fZnVsbERhdGEsZnVsbExheW91dDp0Ll9mdWxsTGF5b3V0fTtpZihhLl9ncm91cCYmKGwuZ3JvdXA9YS5fZ3JvdXApLG8udHJhY2VJcyhhLCJwaWUtbGlrZSIpJiYobC5sYWJlbD1yLmRhdHVtKClbMF0ubGFiZWwpLCExIT09cy50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfbGVnZW5kY2xpY2siLGwpKWlmKDE9PT1uKWUuX2NsaWNrVGltZW91dD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3QuX2Z1bGxMYXlvdXQmJmgocix0LG4pfSksdC5fY29udGV4dC5kb3VibGVDbGlja0RlbGF5KTtlbHNlIGlmKDI9PT1uKXtlLl9jbGlja1RpbWVvdXQmJmNsZWFyVGltZW91dChlLl9jbGlja1RpbWVvdXQpLHQuX2xlZ2VuZE1vdXNlRG93blRpbWU9MCwhMSE9PXMudHJpZ2dlckhhbmRsZXIodCwicGxvdGx5X2xlZ2VuZGRvdWJsZWNsaWNrIixsKSYmaChyLHQsbil9fWZ1bmN0aW9uIHcodCxlLHIpe3ZhciBuLGEscz10LmRhdGEoKVswXVswXSxsPXMudHJhY2UsdT1vLnRyYWNlSXMobCwicGllLWxpa2UiKSxoPSFyLl9pbkhvdmVyJiZlLl9jb250ZXh0LmVkaXRzLmxlZ2VuZFRleHQmJiF1LGQ9ci5fbWF4TmFtZUxlbmd0aDtzLmdyb3VwVGl0bGU/KG49cy5ncm91cFRpdGxlLnRleHQsYT1zLmdyb3VwVGl0bGUuZm9udCk6KGE9ci5mb250LHIuZW50cmllcz9uPXMudGV4dDoobj11P3MubGFiZWw6bC5uYW1lLGwuX21ldGEmJihuPWkudGVtcGxhdGVTdHJpbmcobixsLl9tZXRhKSkpKTt2YXIgbT1pLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0IiwibGVnZW5kdGV4dCIpO20uYXR0cigidGV4dC1hbmNob3IiLCJzdGFydCIpLmNhbGwoYy5mb250LGEpLnRleHQoaD9UKG4sZCk6bik7dmFyIGc9ci5pdGVtd2lkdGgrMipwLml0ZW1HYXA7Zi5wb3NpdGlvblRleHQobSxnLDApLGg/bS5jYWxsKGYubWFrZUVkaXRhYmxlLHtnZDplLHRleHQ6bn0pLmNhbGwoQSx0LGUscikub24oImVkaXQiLChmdW5jdGlvbihuKXt0aGlzLnRleHQoVChuLGQpKS5jYWxsKEEsdCxlLHIpO3ZhciBhPXMudHJhY2UuX2Z1bGxJbnB1dHx8e30sYz17fTtpZihvLmhhc1RyYW5zZm9ybShhLCJncm91cGJ5Iikpe3ZhciB1PW8uZ2V0VHJhbnNmb3JtSW5kaWNlcyhhLCJncm91cGJ5IiksZj11W3UubGVuZ3RoLTFdLGg9aS5rZXllZENvbnRhaW5lcihhLCJ0cmFuc2Zvcm1zWyIrZisiXS5zdHlsZXMiLCJ0YXJnZXQiLCJ2YWx1ZS5uYW1lIik7aC5zZXQocy50cmFjZS5fZ3JvdXAsbiksYz1oLmNvbnN0cnVjdFVwZGF0ZSgpfWVsc2UgYy5uYW1lPW47cmV0dXJuIG8uY2FsbCgiX2d1aVJlc3R5bGUiLGUsYyxsLmluZGV4KX0pKTpBKG0sdCxlLHIpfWZ1bmN0aW9uIFQodCxlKXt2YXIgcj1NYXRoLm1heCg0LGUpO2lmKHQmJnQudHJpbSgpLmxlbmd0aD49ci8yKXJldHVybiB0O2Zvcih2YXIgbj1yLSh0PXR8fCIiKS5sZW5ndGg7bj4wO24tLSl0Kz0iICI7cmV0dXJuIHR9ZnVuY3Rpb24gayh0LGUpe3ZhciByLGE9ZS5fY29udGV4dC5kb3VibGVDbGlja0RlbGF5LG89MSxzPWkuZW5zdXJlU2luZ2xlKHQsInJlY3QiLCJsZWdlbmR0b2dnbGUiLChmdW5jdGlvbih0KXtlLl9jb250ZXh0LnN0YXRpY1Bsb3R8fHQuc3R5bGUoImN1cnNvciIsInBvaW50ZXIiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLHQuY2FsbCh1LmZpbGwsInJnYmEoMCwwLDAsMCkiKX0pKTtlLl9jb250ZXh0LnN0YXRpY1Bsb3R8fChzLm9uKCJtb3VzZWRvd24iLChmdW5jdGlvbigpeyhyPShuZXcgRGF0ZSkuZ2V0VGltZSgpKS1lLl9sZWdlbmRNb3VzZURvd25UaW1lPGE/bys9MToobz0xLGUuX2xlZ2VuZE1vdXNlRG93blRpbWU9cil9KSkscy5vbigibW91c2V1cCIsKGZ1bmN0aW9uKCl7aWYoIWUuX2RyYWdnZWQmJiFlLl9lZGl0aW5nKXt2YXIgcj1lLl9mdWxsTGF5b3V0LmxlZ2VuZDsobmV3IERhdGUpLmdldFRpbWUoKS1lLl9sZWdlbmRNb3VzZURvd25UaW1lPmEmJihvPU1hdGgubWF4KG8tMSwxKSksXyhlLHIsdCxvLG4uZXZlbnQpfX0pKSl9ZnVuY3Rpb24gQSh0LGUscixuLGkpe24uX2luSG92ZXImJnQuYXR0cigiZGF0YS1ub3RleCIsITApLGYuY29udmVydFRvVHNwYW5zKHQsciwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5kYXRhKClbMF1bMF07aWYoIXIuX2luSG92ZXImJmkmJiFpLnRyYWNlLnNob3dsZWdlbmQpcmV0dXJuIHZvaWQgdC5yZW1vdmUoKTt2YXIgYT10LnNlbGVjdCgiZ1tjbGFzcyo9bWF0aC1ncm91cF0iKSxvPWEubm9kZSgpO3J8fChyPWUuX2Z1bGxMYXlvdXQubGVnZW5kKTt2YXIgcyxsPXIuYm9yZGVyd2lkdGg7cz0xPT09bj9yLnRpdGxlLmZvbnQ6aS5ncm91cFRpdGxlP2kuZ3JvdXBUaXRsZS5mb250OnIuZm9udDt2YXIgdSxoLGQ9cy5zaXplKm07aWYobyl7dmFyIGc9Yy5iQm94KG8pO3U9Zy5oZWlnaHQsaD1nLndpZHRoLDE9PT1uP2Muc2V0VHJhbnNsYXRlKGEsbCxsKy43NSp1KTpjLnNldFRyYW5zbGF0ZShhLDAsLjI1KnUpfWVsc2V7dmFyIHY9dC5zZWxlY3QoMT09PW4/Ii5sZWdlbmR0aXRsZXRleHQiOiIubGVnZW5kdGV4dCIpLHk9Zi5saW5lQ291bnQodikseD12Lm5vZGUoKTtpZih1PWQqeSxoPXg/Yy5iQm94KHgpLndpZHRoOjAsMT09PW4pImxlZnQiPT09ci50aXRsZS5zaWRlJiYoaCs9MipwLml0ZW1HYXApLGYucG9zaXRpb25UZXh0KHYsbCtwLnRpdGxlUGFkLGwrZCk7ZWxzZXt2YXIgYj0yKnAuaXRlbUdhcCtyLml0ZW13aWR0aDtpLmdyb3VwVGl0bGUmJihiPXAuaXRlbUdhcCxoLT1yLml0ZW13aWR0aCksZi5wb3NpdGlvblRleHQodixiLC1kKigoeS0xKS8yLS4zKSl9fTE9PT1uPyhyLl90aXRsZVdpZHRoPWgsci5fdGl0bGVIZWlnaHQ9dSk6KGkubGluZUhlaWdodD1kLGkuaGVpZ2h0PU1hdGgubWF4KHUsMTYpKzMsaS53aWR0aD1oKX0oZSxyLG4saSl9KSl9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gaS5pc1JpZ2h0QW5jaG9yKHQpPyJyaWdodCI6aS5pc0NlbnRlckFuY2hvcih0KT8iY2VudGVyIjoibGVmdCJ9ZnVuY3Rpb24gUyh0KXtyZXR1cm4gaS5pc0JvdHRvbUFuY2hvcih0KT8iYm90dG9tIjppLmlzTWlkZGxlQW5jaG9yKHQpPyJtaWRkbGUiOiJ0b3AifWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBlfHwoZT10Ll9mdWxsTGF5b3V0LmxlZ2VuZHx8e30pLGZ1bmN0aW9uKHQsZSl7dmFyIHIscyxmPXQuX2Z1bGxMYXlvdXQsaD0ibGVnZW5kIitmLl91aWQsZD1lLl9pbkhvdmVyO2Q/KHI9ZS5sYXllcixoKz0iLWhvdmVyIik6cj1mLl9pbmZvbGF5ZXI7aWYoIXIpcmV0dXJuO3QuX2xlZ2VuZE1vdXNlRG93blRpbWV8fCh0Ll9sZWdlbmRNb3VzZURvd25UaW1lPTApO2lmKGQpe2lmKCFlLmVudHJpZXMpcmV0dXJuO3M9eShlLmVudHJpZXMsZSl9ZWxzZXtpZighdC5jYWxjZGF0YSlyZXR1cm47cz1mLnNob3dsZWdlbmQmJnkodC5jYWxjZGF0YSxlKX12YXIgbT1mLmhpZGRlbmxhYmVsc3x8W107aWYoIShkfHxmLnNob3dsZWdlbmQmJnMubGVuZ3RoKSlyZXR1cm4gci5zZWxlY3RBbGwoIi5sZWdlbmQiKS5yZW1vdmUoKSxmLl90b3BkZWZzLnNlbGVjdCgiIyIraCkucmVtb3ZlKCksYS5hdXRvTWFyZ2luKHQsImxlZ2VuZCIpO3ZhciBUPWkuZW5zdXJlU2luZ2xlKHIsImciLCJsZWdlbmQiLChmdW5jdGlvbih0KXtkfHx0LmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSksRT1pLmVuc3VyZVNpbmdsZUJ5SWQoZi5fdG9wZGVmcywiY2xpcFBhdGgiLGgsKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJyZWN0Iil9KSksTD1pLmVuc3VyZVNpbmdsZShULCJyZWN0IiwiYmciLChmdW5jdGlvbih0KXt0LmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKX0pKTtMLmNhbGwodS5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbCh1LmZpbGwsZS5iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKyJweCIpO3ZhciBDPWkuZW5zdXJlU2luZ2xlKFQsImciLCJzY3JvbGxib3giKSxQPWUudGl0bGU7aWYoZS5fdGl0bGVXaWR0aD0wLGUuX3RpdGxlSGVpZ2h0PTAsUC50ZXh0KXt2YXIgST1pLmVuc3VyZVNpbmdsZShDLCJ0ZXh0IiwibGVnZW5kdGl0bGV0ZXh0Iik7SS5hdHRyKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IikuY2FsbChjLmZvbnQsUC5mb250KS50ZXh0KFAudGV4dCksQShJLEMsdCxlLDEpfWVsc2UgQy5zZWxlY3RBbGwoIi5sZWdlbmR0aXRsZXRleHQiKS5yZW1vdmUoKTt2YXIgTz1pLmVuc3VyZVNpbmdsZShULCJyZWN0Iiwic2Nyb2xsYmFyIiwoZnVuY3Rpb24odCl7dC5hdHRyKHAuc2Nyb2xsQmFyRW50ZXJBdHRycykuY2FsbCh1LmZpbGwscC5zY3JvbGxCYXJDb2xvcil9KSksej1DLnNlbGVjdEFsbCgiZy5ncm91cHMiKS5kYXRhKHMpO3ouZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyb3VwcyIpLHouZXhpdCgpLnJlbW92ZSgpO3ZhciBEPXouc2VsZWN0QWxsKCJnLnRyYWNlcyIpLmRhdGEoaS5pZGVudGl0eSk7RC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2VzIiksRC5leGl0KCkucmVtb3ZlKCksRC5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2U7cmV0dXJuIG8udHJhY2VJcyhlLCJwaWUtbGlrZSIpPy0xIT09bS5pbmRleE9mKHRbMF0ubGFiZWwpPy41OjE6ImxlZ2VuZG9ubHkiPT09ZS52aXNpYmxlPy41OjF9KSkuZWFjaCgoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5jYWxsKHcsdCxlKX0pKS5jYWxsKHgsdCxlKS5lYWNoKChmdW5jdGlvbigpe2R8fG4uc2VsZWN0KHRoaXMpLmNhbGwoayx0KX0pKSxpLnN5bmNPckFzeW5jKFthLnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9dC5fZnVsbExheW91dDtpfHwoaT1hLmxlZ2VuZCk7dmFyIG89YS5fc2l6ZSxzPWIuaXNWZXJ0aWNhbChpKSxsPWIuaXNHcm91cGVkKGkpLHU9aS5ib3JkZXJ3aWR0aCxmPTIqdSxoPXAuaXRlbUdhcCxkPWkuaXRlbXdpZHRoKzIqaCxtPTIqKHUraCksZz1TKGkpLHY9aS55PDB8fDA9PT1pLnkmJiJ0b3AiPT09Zyx5PWkueT4xfHwxPT09aS55JiYiYm90dG9tIj09PWcseD1pLnRyYWNlZ3JvdXBnYXA7aS5fbWF4SGVpZ2h0PU1hdGgubWF4KHZ8fHk/YS5oZWlnaHQvMjpvLmgsMzApO3ZhciBfPTA7aS5fd2lkdGg9MCxpLl9oZWlnaHQ9MDt2YXIgdz1mdW5jdGlvbih0KXt2YXIgZT0wLHI9MCxuPXQudGl0bGUuc2lkZTtuJiYoLTEhPT1uLmluZGV4T2YoImxlZnQiKSYmKGU9dC5fdGl0bGVXaWR0aCksLTEhPT1uLmluZGV4T2YoInRvcCIpJiYocj10Ll90aXRsZUhlaWdodCkpO3JldHVybltlLHJdfShpKTtpZihzKXIuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXS5oZWlnaHQ7Yy5zZXRUcmFuc2xhdGUodGhpcyx1K3dbMF0sdSt3WzFdK2kuX2hlaWdodCtlLzIraCksaS5faGVpZ2h0Kz1lLGkuX3dpZHRoPU1hdGgubWF4KGkuX3dpZHRoLHRbMF0ud2lkdGgpfSkpLF89ZCtpLl93aWR0aCxpLl93aWR0aCs9aCtkK2YsaS5faGVpZ2h0Kz1tLGwmJihlLmVhY2goKGZ1bmN0aW9uKHQsZSl7Yy5zZXRUcmFuc2xhdGUodGhpcywwLGUqaS50cmFjZWdyb3VwZ2FwKX0pKSxpLl9oZWlnaHQrPShpLl9sZ3JvdXBzTGVuZ3RoLTEpKmkudHJhY2Vncm91cGdhcCk7ZWxzZXt2YXIgVD1NKGkpLGs9aS54PDB8fDA9PT1pLngmJiJyaWdodCI9PT1ULEE9aS54PjF8fDE9PT1pLngmJiJsZWZ0Ij09PVQsRT15fHx2LEw9YS53aWR0aC8yO2kuX21heFdpZHRoPU1hdGgubWF4KGs/RSYmImxlZnQiPT09VD9vLmwrby53Okw6QT9FJiYicmlnaHQiPT09VD9vLnIrby53Okw6by53LDIqZCk7dmFyIEM9MCxQPTA7ci5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLndpZHRoK2Q7Qz1NYXRoLm1heChDLGUpLFArPWV9KSksXz1udWxsO3ZhciBJPTA7aWYobCl7dmFyIE89MCx6PTAsRD0wO2UuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD0wLGU9MDtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcudHJhY2VzIikuZWFjaCgoZnVuY3Rpb24ocil7dmFyIG49clswXS5oZWlnaHQ7Yy5zZXRUcmFuc2xhdGUodGhpcyx3WzBdLHdbMV0rdStoK24vMitlKSxlKz1uLHQ9TWF0aC5tYXgodCxkK3JbMF0ud2lkdGgpfSkpLE89TWF0aC5tYXgoTyxlKTt2YXIgcj10K2g7cit1K3o+aS5fbWF4V2lkdGgmJihJPU1hdGgubWF4KEkseiksej0wLEQrPU8reCxPPWUpLGMuc2V0VHJhbnNsYXRlKHRoaXMseixEKSx6Kz1yfSkpLGkuX3dpZHRoPU1hdGgubWF4KEkseikrdSxpLl9oZWlnaHQ9RCtPK219ZWxzZXt2YXIgUj1yLnNpemUoKSxGPVArZisoUi0xKSpoPGkuX21heFdpZHRoLEI9MCxOPTAsaj0wLFU9MDtyLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uaGVpZ2h0LHI9ZCt0WzBdLndpZHRoLG49KEY/cjpDKStoO24rdStOLWg+PWkuX21heFdpZHRoJiYoST1NYXRoLm1heChJLFUpLE49MCxqKz1CLGkuX2hlaWdodCs9QixCPTApLGMuc2V0VHJhbnNsYXRlKHRoaXMsd1swXSt1K04sd1sxXSt1K2orZS8yK2gpLFU9TityK2gsTis9bixCPU1hdGgubWF4KEIsZSl9KSksRj8oaS5fd2lkdGg9TitmLGkuX2hlaWdodD1CK20pOihpLl93aWR0aD1NYXRoLm1heChJLFUpK2YsaS5faGVpZ2h0Kz1CK20pfX1pLl93aWR0aD1NYXRoLmNlaWwoTWF0aC5tYXgoaS5fd2lkdGgrd1swXSxpLl90aXRsZVdpZHRoKzIqKHUrcC50aXRsZVBhZCkpKSxpLl9oZWlnaHQ9TWF0aC5jZWlsKE1hdGgubWF4KGkuX2hlaWdodCt3WzFdLGkuX3RpdGxlSGVpZ2h0KzIqKHUrcC5pdGVtR2FwKSkpLGkuX2VmZkhlaWdodD1NYXRoLm1pbihpLl9oZWlnaHQsaS5fbWF4SGVpZ2h0KTt2YXIgVj10Ll9jb250ZXh0LmVkaXRzLEg9Vi5sZWdlbmRUZXh0fHxWLmxlZ2VuZFBvc2l0aW9uO3IuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykuc2VsZWN0KCIubGVnZW5kdG9nZ2xlIikscj10WzBdLmhlaWdodCxpPUg/ZDpffHxkK3RbMF0ud2lkdGg7c3x8KGkrPWgvMiksYy5zZXRSZWN0KGUsMCwtci8yLGkscil9KSl9KHQseixELGUpfSxmdW5jdGlvbigpe2lmKGR8fCFmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LmxlZ2VuZCxyPU0oZSksbj1TKGUpO3JldHVybiBhLmF1dG9NYXJnaW4odCwibGVnZW5kIix7eDplLngseTplLnksbDplLl93aWR0aCpnW3JdLHI6ZS5fd2lkdGgqdltyXSxiOmUuX2VmZkhlaWdodCp2W25dLHQ6ZS5fZWZmSGVpZ2h0Kmdbbl19KX0odCkpe3ZhciBzLHUsbSx5LHg9Zi5fc2l6ZSxiPWUuYm9yZGVyd2lkdGgsdz14LmwreC53KmUueC1nW00oZSldKmUuX3dpZHRoLGs9eC50K3guaCooMS1lLnkpLWdbUyhlKV0qZS5fZWZmSGVpZ2h0O2lmKCFkJiZmLm1hcmdpbi5hdXRvZXhwYW5kKXt2YXIgQT13LFA9azt3PWkuY29uc3RyYWluKHcsMCxmLndpZHRoLWUuX3dpZHRoKSxrPWkuY29uc3RyYWluKGssMCxmLmhlaWdodC1lLl9lZmZIZWlnaHQpLHchPT1BJiZpLmxvZygiQ29uc3RyYWluIGxlZ2VuZC54IHRvIG1ha2UgbGVnZW5kIGZpdCBpbnNpZGUgZ3JhcGgiKSxrIT09UCYmaS5sb2coIkNvbnN0cmFpbiBsZWdlbmQueSB0byBtYWtlIGxlZ2VuZCBmaXQgaW5zaWRlIGdyYXBoIil9aWYoZHx8Yy5zZXRUcmFuc2xhdGUoVCx3LGspLE8ub24oIi5kcmFnIixudWxsKSxULm9uKCJ3aGVlbCIsbnVsbCksZHx8ZS5faGVpZ2h0PD1lLl9tYXhIZWlnaHR8fHQuX2NvbnRleHQuc3RhdGljUGxvdCl7dmFyIEk9ZS5fZWZmSGVpZ2h0O2QmJihJPWUuX2hlaWdodCksTC5hdHRyKHt3aWR0aDplLl93aWR0aC1iLGhlaWdodDpJLWIseDpiLzIseTpiLzJ9KSxjLnNldFRyYW5zbGF0ZShDLDAsMCksRS5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDplLl93aWR0aC0yKmIsaGVpZ2h0OkktMipiLHg6Yix5OmJ9KSxjLnNldENsaXBVcmwoQyxoLHQpLGMuc2V0UmVjdChPLDAsMCwwLDApLGRlbGV0ZSBlLl9zY3JvbGxZfWVsc2V7dmFyIHosRCxSLEY9TWF0aC5tYXgocC5zY3JvbGxCYXJNaW5IZWlnaHQsZS5fZWZmSGVpZ2h0KmUuX2VmZkhlaWdodC9lLl9oZWlnaHQpLEI9ZS5fZWZmSGVpZ2h0LUYtMipwLnNjcm9sbEJhck1hcmdpbixOPWUuX2hlaWdodC1lLl9lZmZIZWlnaHQsaj1CL04sVT1NYXRoLm1pbihlLl9zY3JvbGxZfHwwLE4pO0wuYXR0cih7d2lkdGg6ZS5fd2lkdGgtMipiK3Auc2Nyb2xsQmFyV2lkdGgrcC5zY3JvbGxCYXJNYXJnaW4saGVpZ2h0OmUuX2VmZkhlaWdodC1iLHg6Yi8yLHk6Yi8yfSksRS5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDplLl93aWR0aC0yKmIrcC5zY3JvbGxCYXJXaWR0aCtwLnNjcm9sbEJhck1hcmdpbixoZWlnaHQ6ZS5fZWZmSGVpZ2h0LTIqYix4OmIseTpiK1V9KSxjLnNldENsaXBVcmwoQyxoLHQpLHEoVSxGLGopLFQub24oIndoZWVsIiwoZnVuY3Rpb24oKXtxKFU9aS5jb25zdHJhaW4oZS5fc2Nyb2xsWStuLmV2ZW50LmRlbHRhWS9CKk4sMCxOKSxGLGopLDAhPT1VJiZVIT09TiYmbi5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfSkpO3ZhciBWPW4uYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnc3RhcnQiLChmdW5jdGlvbigpe3ZhciB0PW4uZXZlbnQuc291cmNlRXZlbnQ7ej0idG91Y2hzdGFydCI9PT10LnR5cGU/dC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZOnQuY2xpZW50WSxSPVV9KSkub24oImRyYWciLChmdW5jdGlvbigpe3ZhciB0PW4uZXZlbnQuc291cmNlRXZlbnQ7Mj09PXQuYnV0dG9uc3x8dC5jdHJsS2V5fHwoRD0idG91Y2htb3ZlIj09PXQudHlwZT90LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk6dC5jbGllbnRZLHEoVT1mdW5jdGlvbih0LGUscil7dmFyIG49KHItZSkvait0O3JldHVybiBpLmNvbnN0cmFpbihuLDAsTil9KFIseixEKSxGLGopKX0pKTtPLmNhbGwoVik7dmFyIEg9bi5iZWhhdmlvci5kcmFnKCkub24oImRyYWdzdGFydCIsKGZ1bmN0aW9uKCl7dmFyIHQ9bi5ldmVudC5zb3VyY2VFdmVudDsidG91Y2hzdGFydCI9PT10LnR5cGUmJih6PXQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WSxSPVUpfSkpLm9uKCJkcmFnIiwoZnVuY3Rpb24oKXt2YXIgdD1uLmV2ZW50LnNvdXJjZUV2ZW50OyJ0b3VjaG1vdmUiPT09dC50eXBlJiYoRD10LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFkscShVPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0oZS1yKS9qK3Q7cmV0dXJuIGkuY29uc3RyYWluKG4sMCxOKX0oUix6LEQpLEYsaikpfSkpO0MuY2FsbChIKX1pZih0Ll9jb250ZXh0LmVkaXRzLmxlZ2VuZFBvc2l0aW9uKVQuY2xhc3NlZCgiY3Vyc29yLW1vdmUiLCEwKSxsLmluaXQoe2VsZW1lbnQ6VC5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXt2YXIgdD1jLmdldFRyYW5zbGF0ZShUKTttPXQueCx5PXQueX0sbW92ZUZuOmZ1bmN0aW9uKHQscil7dmFyIG49bSt0LGk9eStyO2Muc2V0VHJhbnNsYXRlKFQsbixpKSxzPWwuYWxpZ24obiwwLHgubCx4LmwreC53LGUueGFuY2hvciksdT1sLmFsaWduKGksMCx4LnQreC5oLHgudCxlLnlhbmNob3IpfSxkb25lRm46ZnVuY3Rpb24oKXt2b2lkIDAhPT1zJiZ2b2lkIDAhPT11JiZvLmNhbGwoIl9ndWlSZWxheW91dCIsdCx7ImxlZ2VuZC54IjpzLCJsZWdlbmQueSI6dX0pfSxjbGlja0ZuOmZ1bmN0aW9uKGUsbil7dmFyIGk9ci5zZWxlY3RBbGwoImcudHJhY2VzIikuZmlsdGVyKChmdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIG4uY2xpZW50WD49dC5sZWZ0JiZuLmNsaWVudFg8PXQucmlnaHQmJm4uY2xpZW50WT49dC50b3AmJm4uY2xpZW50WTw9dC5ib3R0b219KSk7aS5zaXplKCk+MCYmXyh0LFQsaSxlLG4pfX0pfWZ1bmN0aW9uIHEocixuLGkpe2UuX3Njcm9sbFk9dC5fZnVsbExheW91dC5sZWdlbmQuX3Njcm9sbFk9cixjLnNldFRyYW5zbGF0ZShDLDAsLXIpLGMuc2V0UmVjdChPLGUuX3dpZHRoLHAuc2Nyb2xsQmFyTWFyZ2luK3IqaSxwLnNjcm9sbEJhcldpZHRoLG4pLEUuc2VsZWN0KCJyZWN0IikuYXR0cigieSIsYityKX19XSx0KX0odCxlKX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzQ0LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL2V2ZW50cyI6NzY1LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMiwiLi4vLi4vcGxvdHMvcGxvdHMiOjg5MCwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vY29sb3IiOjYzOSwiLi4vZHJhZ2VsZW1lbnQiOjY1OCwiLi4vZHJhd2luZyI6NjYxLCIuL2NvbnN0YW50cyI6NjkwLCIuL2dldF9sZWdlbmRfZGF0YSI6NjkzLCIuL2hhbmRsZV9jbGljayI6Njk0LCIuL2hlbHBlcnMiOjY5NSwiLi9zdHlsZSI6Njk3LCJAcGxvdGx5L2QzIjo1OH1dLDY5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvPWUuX2luSG92ZXIscz1pLmlzR3JvdXBlZChlKSxsPWkuaXNSZXZlcnNlZChlKSxjPXt9LHU9W10sZj0hMSxoPXt9LHA9MCxkPTA7ZnVuY3Rpb24gbSh0LHIpe2lmKCIiIT09dCYmaS5pc0dyb3VwZWQoZSkpLTE9PT11LmluZGV4T2YodCk/KHUucHVzaCh0KSxmPSEwLGNbdF09W3JdKTpjW3RdLnB1c2gocik7ZWxzZXt2YXIgbj0ifn5pIitwO3UucHVzaChuKSxjW25dPVtyXSxwKyt9fWZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBnPXRbcl0sdj1nWzBdLHk9di50cmFjZSx4PXkubGVnZW5kZ3JvdXA7aWYob3x8eS52aXNpYmxlJiZ5LnNob3dsZWdlbmQpaWYobi50cmFjZUlzKHksInBpZS1saWtlIikpZm9yKGhbeF18fChoW3hdPXt9KSxhPTA7YTxnLmxlbmd0aDthKyspe3ZhciBiPWdbYV0ubGFiZWw7aFt4XVtiXXx8KG0oeCx7bGFiZWw6Yixjb2xvcjpnW2FdLmNvbG9yLGk6Z1thXS5pLHRyYWNlOnkscHRzOmdbYV0ucHRzfSksaFt4XVtiXT0hMCxkPU1hdGgubWF4KGQsKGJ8fCIiKS5sZW5ndGgpKX1lbHNlIG0oeCx2KSxkPU1hdGgubWF4KGQsKHkubmFtZXx8IiIpLmxlbmd0aCl9aWYoIXUubGVuZ3RoKXJldHVybltdO3ZhciBfPSFmfHwhcyx3PVtdO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspe3ZhciBUPWNbdVtyXV07Xz93LnB1c2goVFswXSk6dy5wdXNoKFQpfWZvcihfJiYodz1bd10pLHI9MDtyPHcubGVuZ3RoO3IrKyl7dmFyIGs9MS8wO2ZvcihhPTA7YTx3W3JdLmxlbmd0aDthKyspe3ZhciBBPXdbcl1bYV0udHJhY2UubGVnZW5kcmFuaztrPkEmJihrPUEpfXdbcl1bMF0uX2dyb3VwTWluUmFuaz1rLHdbcl1bMF0uX3ByZUdyb3VwU29ydD1yfXZhciBNPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudHJhY2UubGVnZW5kcmFuay1lLnRyYWNlLmxlZ2VuZHJhbmt8fHQuX3ByZVNvcnQtZS5fcHJlU29ydH07Zm9yKHcuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0WzBdLl9wcmVHcm91cFNvcnQ9ZX0pKSx3LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0uX2dyb3VwTWluUmFuay1lWzBdLl9ncm91cE1pblJhbmt8fHRbMF0uX3ByZUdyb3VwU29ydC1lWzBdLl9wcmVHcm91cFNvcnR9KSkscj0wO3I8dy5sZW5ndGg7cisrKXt3W3JdLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC5fcHJlU29ydD1lfSkpLHdbcl0uc29ydChNKTt2YXIgUz13W3JdWzBdLnRyYWNlLEU9bnVsbDtmb3IoYT0wO2E8d1tyXS5sZW5ndGg7YSsrKXt2YXIgTD13W3JdW2FdLnRyYWNlLmxlZ2VuZGdyb3VwdGl0bGU7aWYoTCYmTC50ZXh0KXtFPUwsbyYmKEwuZm9udD1lLl9ncm91cFRpdGxlRm9udCk7YnJlYWt9fWlmKGwmJndbcl0ucmV2ZXJzZSgpLEUpe3ZhciBDPSExO2ZvcihhPTA7YTx3W3JdLmxlbmd0aDthKyspaWYobi50cmFjZUlzKHdbcl1bYV0udHJhY2UsInBpZS1saWtlIikpe0M9ITA7YnJlYWt9d1tyXS51bnNoaWZ0KHtpOi0xLGdyb3VwVGl0bGU6RSxub0NsaWNrOkMsdHJhY2U6e3Nob3dsZWdlbmQ6Uy5zaG93bGVnZW5kLGxlZ2VuZGdyb3VwOlMubGVnZW5kZ3JvdXAsdmlzaWJsZToidG9nZ2xlaXRlbSI9PT1lLmdyb3VwY2xpY2t8fFMudmlzaWJsZX19KX1mb3IoYT0wO2E8d1tyXS5sZW5ndGg7YSsrKXdbcl1bYV09W3dbcl1bYV1dfXJldHVybiBlLl9sZ3JvdXBzTGVuZ3RoPXcubGVuZ3RoLGUuX21heE5hbWVMZW5ndGg9ZCx3fX0seyIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2hlbHBlcnMiOjY5NX1dLDY5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT0hMDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPWUuX2Z1bGxMYXlvdXQ7aWYoIWUuX2RyYWdnZWQmJiFlLl9lZGl0aW5nKXt2YXIgcyxsPW8ubGVnZW5kLml0ZW1jbGljayxjPW8ubGVnZW5kLml0ZW1kb3VibGVjbGljayx1PW8ubGVnZW5kLmdyb3VwY2xpY2s7aWYoMT09PXImJiJ0b2dnbGUiPT09bCYmInRvZ2dsZW90aGVycyI9PT1jJiZhJiZlLmRhdGEmJmUuX2NvbnRleHQuc2hvd1RpcHM/KG4ubm90aWZpZXIobi5fKGUsIkRvdWJsZS1jbGljayBvbiBsZWdlbmQgdG8gaXNvbGF0ZSBvbmUgdHJhY2UiKSwibG9uZyIpLGE9ITEpOmE9ITEsMT09PXI/cz1sOjI9PT1yJiYocz1jKSxzKXt2YXIgZj0idG9nZ2xlZ3JvdXAiPT09dSxoPW8uaGlkZGVubGFiZWxzP28uaGlkZGVubGFiZWxzLnNsaWNlKCk6W10scD10LmRhdGEoKVswXVswXTtpZighcC5ncm91cFRpdGxlfHwhcC5ub0NsaWNrKXt2YXIgZCxtLGcsdix5LHg9ZS5fZnVsbERhdGEsYj1wLnRyYWNlLF89Yi5sZWdlbmRncm91cCx3PXt9LFQ9W10saz1bXSxBPVtdO2lmKGkudHJhY2VJcyhiLCJwaWUtbGlrZSIpKXt2YXIgTT1wLmxhYmVsLFM9aC5pbmRleE9mKE0pOyJ0b2dnbGUiPT09cz8tMT09PVM/aC5wdXNoKE0pOmguc3BsaWNlKFMsMSk6InRvZ2dsZW90aGVycyI9PT1zJiYoaD1bXSxlLmNhbGNkYXRhWzBdLmZvckVhY2goKGZ1bmN0aW9uKHQpe00hPT10LmxhYmVsJiZoLnB1c2godC5sYWJlbCl9KSksZS5fZnVsbExheW91dC5oaWRkZW5sYWJlbHMmJmUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzLmxlbmd0aD09PWgubGVuZ3RoJiYtMT09PVMmJihoPVtdKSksaS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsImhpZGRlbmxhYmVscyIsaCl9ZWxzZXt2YXIgRSxMPV8mJl8ubGVuZ3RoLEM9W107aWYoTClmb3IoZD0wO2Q8eC5sZW5ndGg7ZCsrKShFPXhbZF0pLnZpc2libGUmJkUubGVnZW5kZ3JvdXA9PT1fJiZDLnB1c2goZCk7aWYoInRvZ2dsZSI9PT1zKXt2YXIgUDtzd2l0Y2goYi52aXNpYmxlKXtjYXNlITA6UD0ibGVnZW5kb25seSI7YnJlYWs7Y2FzZSExOlA9ITE7YnJlYWs7Y2FzZSJsZWdlbmRvbmx5IjpQPSEwfWlmKEwpaWYoZilmb3IoZD0wO2Q8eC5sZW5ndGg7ZCsrKSExIT09eFtkXS52aXNpYmxlJiZ4W2RdLmxlZ2VuZGdyb3VwPT09XyYmaih4W2RdLFApO2Vsc2UgaihiLFApO2Vsc2UgaihiLFApfWVsc2UgaWYoInRvZ2dsZW90aGVycyI9PT1zKXt2YXIgSSxPLHosRCxSPSEwO2ZvcihkPTA7ZDx4Lmxlbmd0aDtkKyspaWYoST14W2RdPT09Yix6PSEwIT09eFtkXS5zaG93bGVnZW5kLCEoSXx8enx8KE89TCYmeFtkXS5sZWdlbmRncm91cD09PV8pfHwhMCE9PXhbZF0udmlzaWJsZXx8aS50cmFjZUlzKHhbZF0sIm5vdExlZ2VuZElzb2xhdGFibGUiKSkpe1I9ITE7YnJlYWt9Zm9yKGQ9MDtkPHgubGVuZ3RoO2QrKylpZighMSE9PXhbZF0udmlzaWJsZSYmIWkudHJhY2VJcyh4W2RdLCJub3RMZWdlbmRJc29sYXRhYmxlIikpc3dpdGNoKGIudmlzaWJsZSl7Y2FzZSJsZWdlbmRvbmx5IjpqKHhbZF0sITApO2JyZWFrO2Nhc2UhMDpEPSEhUnx8ImxlZ2VuZG9ubHkiLEk9eFtkXT09PWIsej0hMCE9PXhbZF0uc2hvd2xlZ2VuZCYmIXhbZF0ubGVnZW5kZ3JvdXAsTz1JfHxMJiZ4W2RdLmxlZ2VuZGdyb3VwPT09XyxqKHhbZF0sISghTyYmIXopfHxEKX19Zm9yKGQ9MDtkPGsubGVuZ3RoO2QrKylpZihnPWtbZF0pe3ZhciBGPWcuY29uc3RydWN0VXBkYXRlKCksQj1PYmplY3Qua2V5cyhGKTtmb3IobT0wO208Qi5sZW5ndGg7bSsrKXY9QlttXSwod1t2XT13W3ZdfHxbXSlbQVtkXV09Rlt2XX1mb3IoeT1PYmplY3Qua2V5cyh3KSxkPTA7ZDx5Lmxlbmd0aDtkKyspZm9yKHY9eVtkXSxtPTA7bTxULmxlbmd0aDttKyspd1t2XS5oYXNPd25Qcm9wZXJ0eShtKXx8KHdbdl1bbV09dm9pZCAwKTtpLmNhbGwoIl9ndWlSZXN0eWxlIixlLHcsVCl9fX19ZnVuY3Rpb24gTih0LGUscil7dmFyIG49VC5pbmRleE9mKHQpLGk9d1tlXTtyZXR1cm4gaXx8KGk9d1tlXT1bXSksLTE9PT1ULmluZGV4T2YodCkmJihULnB1c2godCksbj1ULmxlbmd0aC0xKSxpW25dPXIsbn1mdW5jdGlvbiBqKHQsZSl7aWYoIXAuZ3JvdXBUaXRsZXx8Zil7dmFyIHI9dC5fZnVsbElucHV0O2lmKGkuaGFzVHJhbnNmb3JtKHIsImdyb3VwYnkiKSl7dmFyIGE9a1tyLmluZGV4XTtpZighYSl7dmFyIG89aS5nZXRUcmFuc2Zvcm1JbmRpY2VzKHIsImdyb3VwYnkiKSxzPW9bby5sZW5ndGgtMV07YT1uLmtleWVkQ29udGFpbmVyKHIsInRyYW5zZm9ybXNbIitzKyJdLnN0eWxlcyIsInRhcmdldCIsInZhbHVlLnZpc2libGUiKSxrW3IuaW5kZXhdPWF9dmFyIGw9YS5nZXQodC5fZ3JvdXApO3ZvaWQgMD09PWwmJihsPSEwKSwhMSE9PWwmJmEuc2V0KHQuX2dyb3VwLGUpLEFbci5pbmRleF09TihyLmluZGV4LCJ2aXNpYmxlIiwhMSE9PXIudmlzaWJsZSl9ZWxzZXt2YXIgYz0hMSE9PXIudmlzaWJsZSYmZTtOKHIuaW5kZXgsInZpc2libGUiLGMpfX19fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcmVnaXN0cnkiOjkwNH1dLDY5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmlzR3JvdXBlZD1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PSh0LnRyYWNlb3JkZXJ8fCIiKS5pbmRleE9mKCJncm91cGVkIil9LHIuaXNWZXJ0aWNhbD1mdW5jdGlvbih0KXtyZXR1cm4iaCIhPT10Lm9yaWVudGF0aW9ufSxyLmlzUmV2ZXJzZWQ9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT0odC50cmFjZW9yZGVyfHwiIikuaW5kZXhPZigicmV2ZXJzZWQiKX19LHt9XSw2OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImxlZ2VuZCIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksZHJhdzp0KCIuL2RyYXciKSxzdHlsZTp0KCIuL3N0eWxlIil9fSx7Ii4vYXR0cmlidXRlcyI6Njg5LCIuL2RlZmF1bHRzIjo2OTEsIi4vZHJhdyI6NjkyLCIuL3N0eWxlIjo2OTd9XSw2OTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89YS5zdHJUcmFuc2xhdGUscz10KCIuLi9kcmF3aW5nIiksbD10KCIuLi9jb2xvciIpLGM9dCgiLi4vY29sb3JzY2FsZS9oZWxwZXJzIikuZXh0cmFjdE9wdHMsdT10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyIpLGY9dCgiLi4vLi4vdHJhY2VzL3BpZS9zdHlsZV9vbmUiKSxoPXQoIi4uLy4uL3RyYWNlcy9waWUvaGVscGVycyIpLmNhc3RPcHRpb24scD10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGQodCxlKXtyZXR1cm4oZT8icmFkaWFsIjoiaG9yaXpvbnRhbCIpKyh0PyIiOiJyZXZlcnNlZCIpfWZ1bmN0aW9uIG0odCl7dmFyIGU9dFswXS50cmFjZSxyPWUuY29udG91cnMsbj11Lmhhc0xpbmVzKGUpLGk9dS5oYXNNYXJrZXJzKGUpLGE9ZS52aXNpYmxlJiZlLmZpbGwmJiJub25lIiE9PWUuZmlsbCxvPSExLHM9ITE7aWYocil7dmFyIGw9ci5jb2xvcmluZzsibGluZXMiPT09bD9vPSEwOm49Im5vbmUiPT09bHx8ImhlYXRtYXAiPT09bHx8ci5zaG93bGluZXMsImNvbnN0cmFpbnQiPT09ci50eXBlP2E9Ij0iIT09ci5fb3BlcmF0aW9uOiJmaWxsIiE9PWwmJiJoZWF0bWFwIiE9PWx8fChzPSEwKX1yZXR1cm57c2hvd01hcmtlcjppLHNob3dMaW5lOm4sc2hvd0ZpbGw6YSxzaG93R3JhZGllbnRMaW5lOm8sc2hvd0dyYWRpZW50RmlsbDpzLGFueUxpbmU6bnx8byxhbnlGaWxsOmF8fHN9fWZ1bmN0aW9uIGcodCxlLHIpe3JldHVybiB0JiZhLmlzQXJyYXlPclR5cGVkQXJyYXkodCk/ZTp0PnI/cjp0fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHY9ZS5fZnVsbExheW91dDtyfHwocj12LmxlZ2VuZCk7dmFyIHk9ImNvbnN0YW50Ij09PXIuaXRlbXNpemluZyx4PXIuaXRlbXdpZHRoLGI9KHgrMipwLml0ZW1HYXApLzIsXz1vKGIsMCksdz1mdW5jdGlvbih0LGUscixuKXt2YXIgaTtpZih0KzEpaT10O2Vsc2V7aWYoIShlJiZlLndpZHRoPjApKXJldHVybiAwO2k9ZS53aWR0aH1yZXR1cm4geT9uOk1hdGgubWluKGkscil9O2Z1bmN0aW9uIFQodCxhLG8pe3ZhciB1PXRbMF0udHJhY2UsZj11Lm1hcmtlcnx8e30saD1mLmxpbmV8fHt9LHA9bz91LnZpc2libGUmJnUudHlwZT09PW86aS50cmFjZUlzKHUsImJhciIpLGQ9bi5zZWxlY3QoYSkuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmQiK28pLmRhdGEocD9bdF06W10pO2QuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmQiK28sITApLmF0dHIoImQiLCJNNiw2SC02Vi02SDZaIikuYXR0cigidHJhbnNmb3JtIixfKSxkLmV4aXQoKS5yZW1vdmUoKSxkLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9dFswXSxvPXcoYS5tbHcsZi5saW5lLDUsMik7aS5zdHlsZSgic3Ryb2tlLXdpZHRoIixvKyJweCIpO3ZhciBwPWEubWNjO2lmKCFyLl9pbkhvdmVyJiYibWMiaW4gYSl7dmFyIGQ9YyhmKSxtPWQubWlkO3ZvaWQgMD09PW0mJihtPShkLm1heCtkLm1pbikvMikscD1zLnRyeUNvbG9yc2NhbGUoZiwiIikobSl9dmFyIHY9cHx8YS5tY3x8Zi5jb2xvcix5PWYucGF0dGVybix4PXkmJnMuZ2V0UGF0dGVybkF0dHIoeS5zaGFwZSwwLCIiKTtpZih4KXt2YXIgYj1zLmdldFBhdHRlcm5BdHRyKHkuYmdjb2xvciwwLG51bGwpLF89cy5nZXRQYXR0ZXJuQXR0cih5LmZnY29sb3IsMCxudWxsKSxUPXkuZmdvcGFjaXR5LGs9Zyh5LnNpemUsOCwxMCksQT1nKHkuc29saWRpdHksLjUsMSksTT0ibGVnZW5kLSIrdS51aWQ7aS5jYWxsKHMucGF0dGVybiwibGVnZW5kIixlLE0seCxrLEEscCx5LmZpbGxtb2RlLGIsXyxUKX1lbHNlIGkuY2FsbChsLmZpbGwsdik7byYmbC5zdHJva2UoaSxhLm1sY3x8aC5jb2xvcil9KSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG89dFswXSxzPW8udHJhY2UsbD1yP3MudmlzaWJsZSYmcy50eXBlPT09cjppLnRyYWNlSXMocyxyKSxjPW4uc2VsZWN0KGUpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kIityKS5kYXRhKGw/W3RdOltdKTtpZihjLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kIityLCEwKS5hdHRyKCJkIiwiTTYsNkgtNlYtNkg2WiIpLmF0dHIoInRyYW5zZm9ybSIsXyksYy5leGl0KCkucmVtb3ZlKCksYy5zaXplKCkpe3ZhciB1PShzLm1hcmtlcnx8e30pLmxpbmUscD13KGgodS53aWR0aCxvLnB0cyksdSw1LDIpLGQ9YS5taW5FeHRlbmQocyx7bWFya2VyOntsaW5lOnt3aWR0aDpwfX19KTtkLm1hcmtlci5saW5lLmNvbG9yPXUuY29sb3I7dmFyIG09YS5taW5FeHRlbmQobyx7dHJhY2U6ZH0pO2YoYyxtLGQpfX10LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGk9YS5lbnN1cmVTaW5nbGUoZSwiZyIsImxheWVycyIpO2kuc3R5bGUoIm9wYWNpdHkiLHRbMF0udHJhY2Uub3BhY2l0eSk7dmFyIHM9ci52YWxpZ24sbD10WzBdLmxpbmVIZWlnaHQsYz10WzBdLmhlaWdodDtpZigibWlkZGxlIiE9PXMmJmwmJmMpe3ZhciB1PXt0b3A6MSxib3R0b206LTF9W3NdKiguNSoobC1jKzMpKTtpLmF0dHIoInRyYW5zZm9ybSIsbygwLHUpKX1lbHNlIGkuYXR0cigidHJhbnNmb3JtIixudWxsKTtpLnNlbGVjdEFsbCgiZy5sZWdlbmRmaWxsIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kZmlsbCIsITApLGkuc2VsZWN0QWxsKCJnLmxlZ2VuZGxpbmVzIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kbGluZXMiLCEwKTt2YXIgZj1pLnNlbGVjdEFsbCgiZy5sZWdlbmRzeW1ib2xzIikuZGF0YShbdF0pO2YuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJsZWdlbmRzeW1ib2xzIiwhMCksZi5zZWxlY3RBbGwoImcubGVnZW5kcG9pbnRzIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kcG9pbnRzIiwhMCl9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHIsaT10WzBdLnRyYWNlLG89W107aWYoaS52aXNpYmxlKXN3aXRjaChpLnR5cGUpe2Nhc2UiaGlzdG9ncmFtMmQiOmNhc2UiaGVhdG1hcCI6bz1bWyJNLTE1LC0yVjRIMTVWLTJaIl1dLHI9ITA7YnJlYWs7Y2FzZSJjaG9yb3BsZXRoIjpjYXNlImNob3JvcGxldGhtYXBib3giOm89W1siTS02LC02VjZINlYtNloiXV0scj0hMDticmVhaztjYXNlImRlbnNpdHltYXBib3giOm89W1siTS02LDAgYTYsNiAwIDEsMCAxMiwwIGEgNiw2IDAgMSwwIC0xMiwwIl1dLHI9InJhZGlhbCI7YnJlYWs7Y2FzZSJjb25lIjpvPVtbIk0tNiwyIEEyLDIgMCAwLDAgLTYsNiBWNkw2LDRaIl0sWyJNLTYsLTYgQTIsMiAwIDAsMCAtNiwtMiBMNiwtNFoiXSxbIk0tNiwtMiBBMiwyIDAgMCwwIC02LDIgTDYsMFoiXV0scj0hMTticmVhaztjYXNlInN0cmVhbXR1YmUiOm89W1siTS02LDIgQTIsMiAwIDAsMCAtNiw2IEg2IEEyLDIgMCAwLDEgNiwyIFoiXSxbIk0tNiwtNiBBMiwyIDAgMCwwIC02LC0yIEg2IEEyLDIgMCAwLDEgNiwtNiBaIl0sWyJNLTYsLTIgQTIsMiAwIDAsMCAtNiwyIEg2IEEyLDIgMCAwLDEgNiwtMiBaIl1dLHI9ITE7YnJlYWs7Y2FzZSJzdXJmYWNlIjpvPVtbIk0tNiwtNiBBMiwzIDAgMCwwIC02LDAgSDYgQTIsMyAwIDAsMSA2LC02IFoiXSxbIk0tNiwxIEEyLDMgMCAwLDEgLTYsNiBINiBBMiwzIDAgMCwwIDYsMCBaIl1dLHI9ITA7YnJlYWs7Y2FzZSJtZXNoM2QiOm89W1siTS02LDZIMEwtNiwtNloiXSxbIk02LDZIMEw2LC02WiJdLFsiTS02LC02SDZMMCw2WiJdXSxyPSExO2JyZWFrO2Nhc2Uidm9sdW1lIjpvPVtbIk0tNiw2SDBMLTYsLTZaIl0sWyJNNiw2SDBMNiwtNloiXSxbIk0tNiwtNkg2TDAsNloiXV0scj0hMDticmVhaztjYXNlImlzb3N1cmZhY2UiOm89W1siTS02LDZIMEwtNiwtNloiXSxbIk02LDZIMEw2LC02WiJdLFsiTS02LC02IEExMiwyNCAwIDAsMCA2LC02IEwwLDZaIl1dLHI9ITF9dmFyIHU9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmQzZGFuZGZyaWVuZHMiKS5kYXRhKG8pO3UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmQzZGFuZGZyaWVuZHMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLF8pLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMSksdS5leGl0KCkucmVtb3ZlKCksdS5lYWNoKChmdW5jdGlvbih0LG8pe3ZhciB1LGY9bi5zZWxlY3QodGhpcyksaD1jKGkpLHA9aC5jb2xvcnNjYWxlLG09aC5yZXZlcnNlc2NhbGU7aWYocCl7aWYoIXIpe3ZhciBnPXAubGVuZ3RoO3U9MD09PW8/cFttP2ctMTowXVsxXToxPT09bz9wW20/MDpnLTFdWzFdOnBbTWF0aC5mbG9vcigoZy0xKS8yKV1bMV19fWVsc2V7dmFyIHY9aS52ZXJ0ZXhjb2xvcnx8aS5mYWNlY29sb3J8fGkuY29sb3I7dT1hLmlzQXJyYXlPclR5cGVkQXJyYXkodik/dltvXXx8dlswXTp2fWYuYXR0cigiZCIsdFswXSksdT9mLmNhbGwobC5maWxsLHUpOmYuY2FsbCgoZnVuY3Rpb24odCl7aWYodC5zaXplKCkpe3ZhciBuPSJsZWdlbmRmaWxsLSIraS51aWQ7cy5ncmFkaWVudCh0LGUsbixkKG0sInJhZGlhbCI9PT1yKSxwLCJmaWxsIil9fSkpfSkpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj0id2F0ZXJmYWxsIj09PWUudHlwZTtpZih0WzBdLl9kaXN0aW5jdCYmcil7dmFyIGk9dFswXS50cmFjZVt0WzBdLmRpcl0ubWFya2VyO3JldHVybiB0WzBdLm1jPWkuY29sb3IsdFswXS5tbHc9aS5saW5lLndpZHRoLHRbMF0ubWxjPWkubGluZS5jb2xvcixUKHQsdGhpcywid2F0ZXJmYWxsIil9dmFyIGE9W107ZS52aXNpYmxlJiZyJiYoYT10WzBdLmhhc1RvdGFscz9bWyJpbmNyZWFzaW5nIiwiTS02LC02VjZIMFoiXSxbInRvdGFscyIsIk02LDZIMEwtNiwtNkgtMFoiXSxbImRlY3JlYXNpbmciLCJNNiw2Vi02SDBaIl1dOltbImluY3JlYXNpbmciLCJNLTYsLTZWNkg2WiJdLFsiZGVjcmVhc2luZyIsIk02LDZWLTZILTZaIl1dKTt2YXIgbz1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZHdhdGVyZmFsbCIpLmRhdGEoYSk7by5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZHdhdGVyZmFsbCIsITApLmF0dHIoInRyYW5zZm9ybSIsXykuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKSxvLmV4aXQoKS5yZW1vdmUoKSxvLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9ZVt0WzBdXS5tYXJrZXIsYT13KHZvaWQgMCxpLmxpbmUsNSwyKTtyLmF0dHIoImQiLHRbMV0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLGErInB4IikuY2FsbChsLmZpbGwsaS5jb2xvciksYSYmci5jYWxsKGwuc3Ryb2tlLGkubGluZS5jb2xvcil9KSl9KSkuZWFjaCgoZnVuY3Rpb24odCl7VCh0LHRoaXMsImZ1bm5lbCIpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe1QodCx0aGlzKX0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj10WzBdLnRyYWNlLG89bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRib3giKS5kYXRhKHIudmlzaWJsZSYmaS50cmFjZUlzKHIsImJveC12aW9saW4iKT9bdF06W10pO28uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRib3giLCEwKS5hdHRyKCJkIiwiTTYsNkgtNlYtNkg2WiIpLmF0dHIoInRyYW5zZm9ybSIsXyksby5leGl0KCkucmVtb3ZlKCksby5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2lmKCJhbGwiIT09ci5ib3hwb2ludHMmJiJhbGwiIT09ci5wb2ludHN8fDAhPT1sLm9wYWNpdHkoci5maWxsY29sb3IpfHwwIT09bC5vcGFjaXR5KChyLmxpbmV8fHt9KS5jb2xvcikpe3ZhciBpPXcodm9pZCAwLHIubGluZSw1LDIpO3Quc3R5bGUoInN0cm9rZS13aWR0aCIsaSsicHgiKS5jYWxsKGwuZmlsbCxyLmZpbGxjb2xvciksaSYmbC5zdHJva2UodCxyLmxpbmUuY29sb3IpfWVsc2V7dmFyIGM9YS5taW5FeHRlbmQocix7bWFya2VyOntzaXplOnk/MTI6YS5jb25zdHJhaW4oci5tYXJrZXIuc2l6ZSwyLDE2KSxzaXplcmVmOjEsc2l6ZW1pbjoxLHNpemVtb2RlOiJkaWFtZXRlciJ9fSk7by5jYWxsKHMucG9pbnRTdHlsZSxjLGUpfX0pKX0pKS5lYWNoKChmdW5jdGlvbih0KXtrKHQsdGhpcywiZnVubmVsYXJlYSIpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe2sodCx0aGlzLCJwaWUiKX0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcixpLG89bSh0KSxsPW8uc2hvd0ZpbGwsZj1vLnNob3dMaW5lLGg9by5zaG93R3JhZGllbnRMaW5lLHA9by5zaG93R3JhZGllbnRGaWxsLGc9by5hbnlGaWxsLHY9by5hbnlMaW5lLHk9dFswXSxiPXkudHJhY2UsXz1jKGIpLFQ9Xy5jb2xvcnNjYWxlLGs9Xy5yZXZlcnNlc2NhbGUsQT11Lmhhc01hcmtlcnMoYil8fCFnPyJNNSwwIjp2PyJNNSwtMiI6Ik01LC0zIixNPW4uc2VsZWN0KHRoaXMpLFM9TS5zZWxlY3QoIi5sZWdlbmRmaWxsIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShsfHxwP1t0XTpbXSk7aWYoUy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWZpbGwiLCEwKSxTLmV4aXQoKS5yZW1vdmUoKSxTLmF0dHIoImQiLEErImgiK3grInY2aC0iK3grInoiKS5jYWxsKGw/cy5maWxsR3JvdXBTdHlsZTpmdW5jdGlvbih0KXtpZih0LnNpemUoKSl7dmFyIHI9ImxlZ2VuZGZpbGwtIitiLnVpZDtzLmdyYWRpZW50KHQsZSxyLGQoayksVCwiZmlsbCIpfX0pLGZ8fGgpe3ZhciBFPXcodm9pZCAwLGIubGluZSwxMCw1KTtpPWEubWluRXh0ZW5kKGIse2xpbmU6e3dpZHRoOkV9fSkscj1bYS5taW5FeHRlbmQoeSx7dHJhY2U6aX0pXX12YXIgTD1NLnNlbGVjdCgiLmxlZ2VuZGxpbmVzIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShmfHxoP1tyXTpbXSk7TC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWxpbmUiLCEwKSxMLmV4aXQoKS5yZW1vdmUoKSxMLmF0dHIoImQiLEErKGg/ImwiK3grIiwwLjAwMDEiOiJoIit4KSkuY2FsbChmP3MubGluZUdyb3VwU3R5bGU6ZnVuY3Rpb24odCl7aWYodC5zaXplKCkpe3ZhciByPSJsZWdlbmRsaW5lLSIrYi51aWQ7cy5saW5lR3JvdXBTdHlsZSh0KSxzLmdyYWRpZW50KHQsZSxyLGQoayksVCwic3Ryb2tlIil9fSl9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHIsaSxvPW0odCksbD1vLmFueUZpbGwsYz1vLmFueUxpbmUsZj1vLnNob3dMaW5lLGg9by5zaG93TWFya2VyLHA9dFswXSxkPXAudHJhY2UsZz0haCYmIWMmJiFsJiZ1Lmhhc1RleHQoZCk7ZnVuY3Rpb24gdih0LGUscixuKXt2YXIgaT1hLm5lc3RlZFByb3BlcnR5KGQsdCkuZ2V0KCksbz1hLmlzQXJyYXlPclR5cGVkQXJyYXkoaSkmJmU/ZShpKTppO2lmKHkmJm8mJnZvaWQgMCE9PW4mJihvPW4pLHIpe2lmKG88clswXSlyZXR1cm4gclswXTtpZihvPnJbMV0pcmV0dXJuIHJbMV19cmV0dXJuIG99ZnVuY3Rpb24geCh0KXtyZXR1cm4gcC5fZGlzdGluY3QmJnAuaW5kZXgmJnRbcC5pbmRleF0/dFtwLmluZGV4XTp0WzBdfWlmKGh8fGd8fGYpe3ZhciBiPXt9LHc9e307aWYoaCl7Yi5tYz12KCJtYXJrZXIuY29sb3IiLHgpLGIubXg9digibWFya2VyLnN5bWJvbCIseCksYi5tbz12KCJtYXJrZXIub3BhY2l0eSIsYS5tZWFuLFsuMiwxXSksYi5tbGM9digibWFya2VyLmxpbmUuY29sb3IiLHgpLGIubWx3PXYoIm1hcmtlci5saW5lLndpZHRoIixhLm1lYW4sWzAsNV0sMiksdy5tYXJrZXI9e3NpemVyZWY6MSxzaXplbWluOjEsc2l6ZW1vZGU6ImRpYW1ldGVyIn07dmFyIFQ9digibWFya2VyLnNpemUiLGEubWVhbixbMiwxNl0sMTIpO2IubXM9VCx3Lm1hcmtlci5zaXplPVR9ZiYmKHcubGluZT17d2lkdGg6digibGluZS53aWR0aCIseCxbMCwxMF0sNSl9KSxnJiYoYi50eD0iQWEiLGIudHA9digidGV4dHBvc2l0aW9uIix4KSxiLnRzPTEwLGIudGM9digidGV4dGZvbnQuY29sb3IiLHgpLGIudGY9digidGV4dGZvbnQuZmFtaWx5Iix4KSkscj1bYS5taW5FeHRlbmQocCxiKV0sKGk9YS5taW5FeHRlbmQoZCx3KSkuc2VsZWN0ZWRwb2ludHM9bnVsbCxpLnRleHR0ZW1wbGF0ZT1udWxsfXZhciBrPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKSxBPWsuc2VsZWN0QWxsKCJwYXRoLnNjYXR0ZXJwdHMiKS5kYXRhKGg/cjpbXSk7QS5lbnRlcigpLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQoInNjYXR0ZXJwdHMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLF8pLEEuZXhpdCgpLnJlbW92ZSgpLEEuY2FsbChzLnBvaW50U3R5bGUsaSxlKSxoJiYoclswXS5tcmM9Myk7dmFyIE09ay5zZWxlY3RBbGwoImcucG9pbnR0ZXh0IikuZGF0YShnP3I6W10pO00uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2ludHRleHQiLCEwKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLF8pLE0uZXhpdCgpLnJlbW92ZSgpLE0uc2VsZWN0QWxsKCJ0ZXh0IikuY2FsbChzLnRleHRQb2ludFN0eWxlLGksZSl9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kY2FuZGxlIikuZGF0YShlLnZpc2libGUmJiJjYW5kbGVzdGljayI9PT1lLnR5cGU/W3QsdF06W10pO3IuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRjYW5kbGUiLCEwKS5hdHRyKCJkIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZT8iTS0xNSwwSC04TS04LDZWLTZIOFoiOiJNMTUsMEg4TTgsLTZWNkgtOFoifSkpLmF0dHIoInRyYW5zZm9ybSIsXykuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goKGZ1bmN0aW9uKHQscil7dmFyIGk9bi5zZWxlY3QodGhpcyksYT1lW3I/ImluY3JlYXNpbmciOiJkZWNyZWFzaW5nIl0sbz13KHZvaWQgMCxhLmxpbmUsNSwyKTtpLnN0eWxlKCJzdHJva2Utd2lkdGgiLG8rInB4IikuY2FsbChsLmZpbGwsYS5maWxsY29sb3IpLG8mJmwuc3Ryb2tlKGksYS5saW5lLmNvbG9yKX0pKX0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRvaGxjIikuZGF0YShlLnZpc2libGUmJiJvaGxjIj09PWUudHlwZT9bdCx0XTpbXSk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZG9obGMiLCEwKS5hdHRyKCJkIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZT8iTS0xNSwwSDBNLTgsLTZWMCI6Ik0xNSwwSDBNOCw2VjAifSkpLmF0dHIoInRyYW5zZm9ybSIsXykuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goKGZ1bmN0aW9uKHQscil7dmFyIGk9bi5zZWxlY3QodGhpcyksYT1lW3I/ImluY3JlYXNpbmciOiJkZWNyZWFzaW5nIl0sbz13KHZvaWQgMCxhLmxpbmUsNSwyKTtpLnN0eWxlKCJmaWxsIiwibm9uZSIpLmNhbGwocy5kYXNoTGluZSxhLmxpbmUuZGFzaCxvKSxvJiZsLnN0cm9rZShpLGEubGluZS5jb2xvcil9KSl9KSl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi8uLi90cmFjZXMvcGllL2hlbHBlcnMiOjExNzAsIi4uLy4uL3RyYWNlcy9waWUvc3R5bGVfb25lIjoxMTc2LCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyI6MTIxNiwiLi4vY29sb3IiOjYzOSwiLi4vY29sb3JzY2FsZS9oZWxwZXJzIjo2NTAsIi4uL2RyYXdpbmciOjY2MSwiLi9jb25zdGFudHMiOjY5MCwiQHBsb3RseS9kMyI6NTh9XSw2OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dCgiLi9jb25zdGFudHMiKTtlLmV4cG9ydHM9e2VkaXRUeXBlOiJtb2RlYmFyIixvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXSxkZmx0OiJoIixlZGl0VHlwZToibW9kZWJhciJ9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibW9kZWJhciJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im1vZGViYXIifSxhY3RpdmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJtb2RlYmFyIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGFkZDp7dmFsVHlwZToic3RyaW5nIixhcnJheU9rOiEwLGRmbHQ6IiIsZWRpdFR5cGU6Im1vZGViYXIifSxyZW1vdmU6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0OiIiLGVkaXRUeXBlOiJtb2RlYmFyIn19fSx7Ii4vY29uc3RhbnRzIjo3MDB9XSw2OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxvPXQoIi4uLy4uL2ZvbnRzL3Bsb3RpY29uIikscz10KCIuLi9zaGFwZXMvZHJhdyIpLmVyYXNlQWN0aXZlU2hhcGUsbD10KCIuLi8uLi9saWIiKSxjPWwuXyx1PWUuZXhwb3J0cz17fTtmdW5jdGlvbiBmKHQsZSl7dmFyIHIsaSxvPWUuY3VycmVudFRhcmdldCxzPW8uZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxsPW8uZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxjPXQuX2Z1bGxMYXlvdXQsdT17fSxmPWEubGlzdCh0LG51bGwsITApLGg9Yy5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZDtpZigiem9vbSI9PT1zKXt2YXIgcCxkPSJpbiI9PT1sPy41OjIsbT0oMStkKS8yLGc9KDEtZCkvMjtmb3IoaT0wO2k8Zi5sZW5ndGg7aSsrKWlmKCEocj1mW2ldKS5maXhlZHJhbmdlKWlmKHA9ci5fbmFtZSwiYXV0byI9PT1sKXVbcCsiLmF1dG9yYW5nZSJdPSEwO2Vsc2UgaWYoInJlc2V0Ij09PWwpe2lmKHZvaWQgMD09PXIuX3JhbmdlSW5pdGlhbCl1W3ArIi5hdXRvcmFuZ2UiXT0hMDtlbHNle3ZhciB2PXIuX3JhbmdlSW5pdGlhbC5zbGljZSgpO3VbcCsiLnJhbmdlWzBdIl09dlswXSx1W3ArIi5yYW5nZVsxXSJdPXZbMV19dm9pZCAwIT09ci5fc2hvd1NwaWtlSW5pdGlhbCYmKHVbcCsiLnNob3dzcGlrZXMiXT1yLl9zaG93U3Bpa2VJbml0aWFsLCJvbiIhPT1ofHxyLl9zaG93U3Bpa2VJbml0aWFsfHwoaD0ib2ZmIikpfWVsc2V7dmFyIHk9W3IucjJsKHIucmFuZ2VbMF0pLHIucjJsKHIucmFuZ2VbMV0pXSx4PVttKnlbMF0rZyp5WzFdLG0qeVsxXStnKnlbMF1dO3VbcCsiLnJhbmdlWzBdIl09ci5sMnIoeFswXSksdVtwKyIucmFuZ2VbMV0iXT1yLmwycih4WzFdKX19ZWxzZSJob3Zlcm1vZGUiIT09c3x8IngiIT09bCYmInkiIT09bHx8KGw9Yy5faXNIb3Jpej8ieSI6IngiLG8uc2V0QXR0cmlidXRlKCJkYXRhLXZhbCIsbCkpLHVbc109bDtjLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPWgsbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsdSl9ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsaT1yLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksYT1yLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsbz10Ll9mdWxsTGF5b3V0Ll9zdWJwbG90cy5nbDNkfHxbXSxzPXt9LGw9aS5zcGxpdCgiLiIpLGM9MDtjPG8ubGVuZ3RoO2MrKylzW29bY10rIi4iK2xbMV1dPWE7dmFyIHU9InBhbiI9PT1hP2E6Inpvb20iO3MuZHJhZ21vZGU9dSxuLmNhbGwoIl9ndWlSZWxheW91dCIsdCxzKX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPWUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpLGk9InJlc2V0TGFzdFNhdmUiPT09cixhPSJyZXNldERlZmF1bHQiPT09cixvPXQuX2Z1bGxMYXlvdXQscz1vLl9zdWJwbG90cy5nbDNkfHxbXSxsPXt9LGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHUsZj1zW2NdLGg9ZisiLmNhbWVyYSIscD1mKyIuYXNwZWN0cmF0aW8iLGQ9ZisiLmFzcGVjdG1vZGUiLG09b1tmXS5fc2NlbmU7aT8obFtoKyIudXAiXT1tLnZpZXdJbml0aWFsLnVwLGxbaCsiLmV5ZSJdPW0udmlld0luaXRpYWwuZXllLGxbaCsiLmNlbnRlciJdPW0udmlld0luaXRpYWwuY2VudGVyLHU9ITApOmEmJihsW2grIi51cCJdPW51bGwsbFtoKyIuZXllIl09bnVsbCxsW2grIi5jZW50ZXIiXT1udWxsLHU9ITApLHUmJihsW3ArIi54Il09bS52aWV3SW5pdGlhbC5hc3BlY3RyYXRpby54LGxbcCsiLnkiXT1tLnZpZXdJbml0aWFsLmFzcGVjdHJhdGlvLnksbFtwKyIueiJdPW0udmlld0luaXRpYWwuYXNwZWN0cmF0aW8ueixsW2RdPW0udmlld0luaXRpYWwuYXNwZWN0bW9kZSl9bi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsbCl9ZnVuY3Rpb24gZCh0LGUpe3ZhciByPWUuY3VycmVudFRhcmdldCxuPXIuX3ByZXZpb3VzVmFsLGk9dC5fZnVsbExheW91dCxhPWkuX3N1YnBsb3RzLmdsM2R8fFtdLG89WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXSxzPXt9LGw9e307aWYobilsPW4sci5fcHJldmlvdXNWYWw9bnVsbDtlbHNle2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgdT1hW2NdLGY9aVt1XSxoPXUrIi5ob3Zlcm1vZGUiO3NbaF09Zi5ob3Zlcm1vZGUsbFtoXT0hMTtmb3IodmFyIHA9MDtwPDM7cCsrKXt2YXIgZD1vW3BdLG09dSsiLiIrZCsiLnNob3dzcGlrZXMiO2xbbV09ITEsc1ttXT1mW2RdLnNob3dzcGlrZXN9fXIuX3ByZXZpb3VzVmFsPXN9cmV0dXJuIGx9ZnVuY3Rpb24gbSh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsaT1yLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksYT1yLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsbz10Ll9mdWxsTGF5b3V0LHM9by5fc3VicGxvdHMuZ2VvfHxbXSxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciBjPXNbbF0sdT1vW2NdO2lmKCJ6b29tIj09PWkpe3ZhciBmPXUucHJvamVjdGlvbi5zY2FsZSxoPSJpbiI9PT1hPzIqZjouNSpmO24uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LGMrIi5wcm9qZWN0aW9uLnNjYWxlIixoKX19InJlc2V0Ij09PWkmJngodCwiZ2VvIil9ZnVuY3Rpb24gZyh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O3JldHVybiFlLmhvdmVybW9kZSYmKGUuX2hhcygiY2FydGVzaWFuIik/ZS5faXNIb3Jpej8ieSI6IngiOiJjbG9zZXN0Iil9ZnVuY3Rpb24gdih0KXt2YXIgZT1nKHQpO24uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LCJob3Zlcm1vZGUiLGUpfWZ1bmN0aW9uIHkodCxlKXtmb3IodmFyIHI9ZS5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKSxpPXQuX2Z1bGxMYXlvdXQsYT1pLl9zdWJwbG90cy5tYXBib3h8fFtdLG89e30scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLGM9aVtsXS56b29tLHU9ImluIj09PXI/MS4wNSpjOmMvMS4wNTtvW2wrIi56b29tIl09dX1uLmNhbGwoIl9ndWlSZWxheW91dCIsdCxvKX1mdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxMYXlvdXQsaT1yLl9zdWJwbG90c1tlXXx8W10sYT17fSxvPTA7bzxpLmxlbmd0aDtvKyspZm9yKHZhciBzPWlbb10sbD1yW3NdLl9zdWJwbG90LnZpZXdJbml0aWFsLGM9T2JqZWN0LmtleXMobCksdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgZj1jW3VdO2FbcysiLiIrZl09bFtmXX1uLmNhbGwoIl9ndWlSZWxheW91dCIsdCxhKX11LnRvSW1hZ2U9e25hbWU6InRvSW1hZ2UiLHRpdGxlOmZ1bmN0aW9uKHQpe3ZhciBlPSh0Ll9jb250ZXh0LnRvSW1hZ2VCdXR0b25PcHRpb25zfHx7fSkuZm9ybWF0fHwicG5nIjtyZXR1cm4gYyh0LCJwbmciPT09ZT8iRG93bmxvYWQgcGxvdCBhcyBhIHBuZyI6IkRvd25sb2FkIHBsb3QiKX0saWNvbjpvLmNhbWVyYSxjbGljazpmdW5jdGlvbih0KXt2YXIgZT10Ll9jb250ZXh0LnRvSW1hZ2VCdXR0b25PcHRpb25zLHI9e2Zvcm1hdDplLmZvcm1hdHx8InBuZyJ9O2wubm90aWZpZXIoYyh0LCJUYWtpbmcgc25hcHNob3QgLSB0aGlzIG1heSB0YWtlIGEgZmV3IHNlY29uZHMiKSwibG9uZyIpLCJzdmciIT09ci5mb3JtYXQmJmwuaXNJRSgpJiYobC5ub3RpZmllcihjKHQsIklFIG9ubHkgc3VwcG9ydHMgc3ZnLiAgQ2hhbmdpbmcgZm9ybWF0IHRvIHN2Zy4iKSwibG9uZyIpLHIuZm9ybWF0PSJzdmciKSxbImZpbGVuYW1lIiwid2lkdGgiLCJoZWlnaHQiLCJzY2FsZSJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QgaW4gZSYmKHJbdF09ZVt0XSl9KSksbi5jYWxsKCJkb3dubG9hZEltYWdlIix0LHIpLnRoZW4oKGZ1bmN0aW9uKGUpe2wubm90aWZpZXIoYyh0LCJTbmFwc2hvdCBzdWNjZWVkZWQiKSsiIC0gIitlLCJsb25nIil9KSkuY2F0Y2goKGZ1bmN0aW9uKCl7bC5ub3RpZmllcihjKHQsIlNvcnJ5LCB0aGVyZSB3YXMgYSBwcm9ibGVtIGRvd25sb2FkaW5nIHlvdXIgc25hcHNob3QhIiksImxvbmciKX0pKX19LHUuc2VuZERhdGFUb0Nsb3VkPXtuYW1lOiJzZW5kRGF0YVRvQ2xvdWQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkVkaXQgaW4gQ2hhcnQgU3R1ZGlvIil9LGljb246by5kaXNrLGNsaWNrOmZ1bmN0aW9uKHQpe2kuc2VuZERhdGFUb0Nsb3VkKHQpfX0sdS5lZGl0SW5DaGFydFN0dWRpbz17bmFtZToiZWRpdEluQ2hhcnRTdHVkaW8iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkVkaXQgaW4gQ2hhcnQgU3R1ZGlvIil9LGljb246by5wZW5jaWwsY2xpY2s6ZnVuY3Rpb24odCl7aS5zZW5kRGF0YVRvQ2xvdWQodCl9fSx1Lnpvb20yZD17bmFtZToiem9vbTJkIixfY2F0OiJ6b29tIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6Inpvb20iLGljb246by56b29tYm94LGNsaWNrOmZ9LHUucGFuMmQ9e25hbWU6InBhbjJkIixfY2F0OiJwYW4iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlBhbiIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJwYW4iLGljb246by5wYW4sY2xpY2s6Zn0sdS5zZWxlY3QyZD17bmFtZToic2VsZWN0MmQiLF9jYXQ6InNlbGVjdCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiQm94IFNlbGVjdCIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJzZWxlY3QiLGljb246by5zZWxlY3Rib3gsY2xpY2s6Zn0sdS5sYXNzbzJkPXtuYW1lOiJsYXNzbzJkIixfY2F0OiJsYXNzbyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiTGFzc28gU2VsZWN0Iil9LGF0dHI6ImRyYWdtb2RlIix2YWw6Imxhc3NvIixpY29uOm8ubGFzc28sY2xpY2s6Zn0sdS5kcmF3Y2xvc2VkcGF0aD17bmFtZToiZHJhd2Nsb3NlZHBhdGgiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkRyYXcgY2xvc2VkIGZyZWVmb3JtIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6ImRyYXdjbG9zZWRwYXRoIixpY29uOm8uZHJhd2Nsb3NlZHBhdGgsY2xpY2s6Zn0sdS5kcmF3b3BlbnBhdGg9e25hbWU6ImRyYXdvcGVucGF0aCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiRHJhdyBvcGVuIGZyZWVmb3JtIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6ImRyYXdvcGVucGF0aCIsaWNvbjpvLmRyYXdvcGVucGF0aCxjbGljazpmfSx1LmRyYXdsaW5lPXtuYW1lOiJkcmF3bGluZSIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiRHJhdyBsaW5lIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6ImRyYXdsaW5lIixpY29uOm8uZHJhd2xpbmUsY2xpY2s6Zn0sdS5kcmF3cmVjdD17bmFtZToiZHJhd3JlY3QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkRyYXcgcmVjdGFuZ2xlIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6ImRyYXdyZWN0IixpY29uOm8uZHJhd3JlY3QsY2xpY2s6Zn0sdS5kcmF3Y2lyY2xlPXtuYW1lOiJkcmF3Y2lyY2xlIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJEcmF3IGNpcmNsZSIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJkcmF3Y2lyY2xlIixpY29uOm8uZHJhd2NpcmNsZSxjbGljazpmfSx1LmVyYXNlc2hhcGU9e25hbWU6ImVyYXNlc2hhcGUiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkVyYXNlIGFjdGl2ZSBzaGFwZSIpfSxpY29uOm8uZXJhc2VzaGFwZSxjbGljazpzfSx1Lnpvb21JbjJkPXtuYW1lOiJ6b29tSW4yZCIsX2NhdDoiem9vbWluIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIGluIil9LGF0dHI6Inpvb20iLHZhbDoiaW4iLGljb246by56b29tX3BsdXMsY2xpY2s6Zn0sdS56b29tT3V0MmQ9e25hbWU6Inpvb21PdXQyZCIsX2NhdDoiem9vbW91dCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiWm9vbSBvdXQiKX0sYXR0cjoiem9vbSIsdmFsOiJvdXQiLGljb246by56b29tX21pbnVzLGNsaWNrOmZ9LHUuYXV0b1NjYWxlMmQ9e25hbWU6ImF1dG9TY2FsZTJkIixfY2F0OiJhdXRvc2NhbGUiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkF1dG9zY2FsZSIpfSxhdHRyOiJ6b29tIix2YWw6ImF1dG8iLGljb246by5hdXRvc2NhbGUsY2xpY2s6Zn0sdS5yZXNldFNjYWxlMmQ9e25hbWU6InJlc2V0U2NhbGUyZCIsX2NhdDoicmVzZXRzY2FsZSIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiUmVzZXQgYXhlcyIpfSxhdHRyOiJ6b29tIix2YWw6InJlc2V0IixpY29uOm8uaG9tZSxjbGljazpmfSx1LmhvdmVyQ2xvc2VzdENhcnRlc2lhbj17bmFtZToiaG92ZXJDbG9zZXN0Q2FydGVzaWFuIixfY2F0OiJob3ZlcmNsb3Nlc3QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOiJjbG9zZXN0IixpY29uOm8udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6Zn0sdS5ob3ZlckNvbXBhcmVDYXJ0ZXNpYW49e25hbWU6ImhvdmVyQ29tcGFyZUNhcnRlc2lhbiIsX2NhdDoiaG92ZXJDb21wYXJlIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJDb21wYXJlIGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX2Z1bGxMYXlvdXQuX2lzSG9yaXo/InkiOiJ4In0saWNvbjpvLnRvb2x0aXBfY29tcGFyZSxncmF2aXR5OiJuZSIsY2xpY2s6Zn0sdS56b29tM2Q9e25hbWU6Inpvb20zZCIsX2NhdDoiem9vbSIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiWm9vbSIpfSxhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJ6b29tIixpY29uOm8uem9vbWJveCxjbGljazpofSx1LnBhbjNkPXtuYW1lOiJwYW4zZCIsX2NhdDoicGFuIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJQYW4iKX0sYXR0cjoic2NlbmUuZHJhZ21vZGUiLHZhbDoicGFuIixpY29uOm8ucGFuLGNsaWNrOmh9LHUub3JiaXRSb3RhdGlvbj17bmFtZToib3JiaXRSb3RhdGlvbiIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiT3JiaXRhbCByb3RhdGlvbiIpfSxhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJvcmJpdCIsaWNvbjpvWyIzZF9yb3RhdGUiXSxjbGljazpofSx1LnRhYmxlUm90YXRpb249e25hbWU6InRhYmxlUm90YXRpb24iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlR1cm50YWJsZSByb3RhdGlvbiIpfSxhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJ0dXJudGFibGUiLGljb246b1siei1heGlzIl0sY2xpY2s6aH0sdS5yZXNldENhbWVyYURlZmF1bHQzZD17bmFtZToicmVzZXRDYW1lcmFEZWZhdWx0M2QiLF9jYXQ6InJlc2V0Q2FtZXJhRGVmYXVsdCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiUmVzZXQgY2FtZXJhIHRvIGRlZmF1bHQiKX0sYXR0cjoicmVzZXREZWZhdWx0IixpY29uOm8uaG9tZSxjbGljazpwfSx1LnJlc2V0Q2FtZXJhTGFzdFNhdmUzZD17bmFtZToicmVzZXRDYW1lcmFMYXN0U2F2ZTNkIixfY2F0OiJyZXNldENhbWVyYUxhc3RTYXZlIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJSZXNldCBjYW1lcmEgdG8gbGFzdCBzYXZlIil9LGF0dHI6InJlc2V0TGFzdFNhdmUiLGljb246by5tb3ZpZSxjbGljazpwfSx1LmhvdmVyQ2xvc2VzdDNkPXtuYW1lOiJob3ZlckNsb3Nlc3QzZCIsX2NhdDoiaG92ZXJjbG9zZXN0Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjpvLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZCh0LGUpO24uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHIpfX0sdS56b29tSW5HZW89e25hbWU6Inpvb21JbkdlbyIsX2NhdDoiem9vbWluIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIGluIil9LGF0dHI6Inpvb20iLHZhbDoiaW4iLGljb246by56b29tX3BsdXMsY2xpY2s6bX0sdS56b29tT3V0R2VvPXtuYW1lOiJ6b29tT3V0R2VvIixfY2F0OiJ6b29tb3V0Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIG91dCIpfSxhdHRyOiJ6b29tIix2YWw6Im91dCIsaWNvbjpvLnpvb21fbWludXMsY2xpY2s6bX0sdS5yZXNldEdlbz17bmFtZToicmVzZXRHZW8iLF9jYXQ6InJlc2V0Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJSZXNldCIpfSxhdHRyOiJyZXNldCIsdmFsOm51bGwsaWNvbjpvLmF1dG9zY2FsZSxjbGljazptfSx1LmhvdmVyQ2xvc2VzdEdlbz17bmFtZToiaG92ZXJDbG9zZXN0R2VvIixfY2F0OiJob3ZlcmNsb3Nlc3QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm8udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6dn0sdS5ob3ZlckNsb3Nlc3RHbDJkPXtuYW1lOiJob3ZlckNsb3Nlc3RHbDJkIixfY2F0OiJob3ZlcmNsb3Nlc3QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm8udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6dn0sdS5ob3ZlckNsb3Nlc3RQaWU9e25hbWU6ImhvdmVyQ2xvc2VzdFBpZSIsX2NhdDoiaG92ZXJjbG9zZXN0Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6ImNsb3Nlc3QiLGljb246by50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazp2fSx1LnJlc2V0Vmlld1NhbmtleT17bmFtZToicmVzZXRTYW5rZXlHcm91cCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiUmVzZXQgdmlldyIpfSxpY29uOm8uaG9tZSxjbGljazpmdW5jdGlvbih0KXtmb3IodmFyIGU9eyJub2RlLmdyb3VwcyI6W10sIm5vZGUueCI6W10sIm5vZGUueSI6W119LHI9MDtyPHQuX2Z1bGxEYXRhLmxlbmd0aDtyKyspe3ZhciBpPXQuX2Z1bGxEYXRhW3JdLl92aWV3SW5pdGlhbDtlWyJub2RlLmdyb3VwcyJdLnB1c2goaS5ub2RlLmdyb3Vwcy5zbGljZSgpKSxlWyJub2RlLngiXS5wdXNoKGkubm9kZS54LnNsaWNlKCkpLGVbIm5vZGUueSJdLnB1c2goaS5ub2RlLnkuc2xpY2UoKSl9bi5jYWxsKCJyZXN0eWxlIix0LGUpfX0sdS50b2dnbGVIb3Zlcj17bmFtZToidG9nZ2xlSG92ZXIiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm8udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6ZnVuY3Rpb24odCxlKXt2YXIgcj1kKHQsZSk7ci5ob3Zlcm1vZGU9Zyh0KSxuLmNhbGwoIl9ndWlSZWxheW91dCIsdCxyKX19LHUucmVzZXRWaWV3cz17bmFtZToicmVzZXRWaWV3cyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiUmVzZXQgdmlld3MiKX0saWNvbjpvLmhvbWUsY2xpY2s6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmN1cnJlbnRUYXJnZXQ7ci5zZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIsInpvb20iKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS12YWwiLCJyZXNldCIpLGYodCxlKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiwicmVzZXRMYXN0U2F2ZSIpLHAodCxlKSx4KHQsImdlbyIpLHgodCwibWFwYm94Iil9fSx1LnRvZ2dsZVNwaWtlbGluZXM9e25hbWU6InRvZ2dsZVNwaWtlbGluZXMiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlRvZ2dsZSBTcGlrZSBMaW5lcyIpfSxpY29uOm8uc3Bpa2VsaW5lLGF0dHI6Il9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkIix2YWw6Im9uIixjbGljazpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZDtlLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPSJvbiI9PT1yPyJvZmYiOiJvbiIsbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsZnVuY3Rpb24odCl7Zm9yKHZhciBlPSJvbiI9PT10Ll9mdWxsTGF5b3V0Ll9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkLHI9YS5saXN0KHQsbnVsbCwhMCksbj17fSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBvPXJbaV07bltvLl9uYW1lKyIuc2hvd3NwaWtlcyJdPSEhZXx8by5fc2hvd1NwaWtlSW5pdGlhbH1yZXR1cm4gbn0odCkpfX0sdS5yZXNldFZpZXdNYXBib3g9e25hbWU6InJlc2V0Vmlld01hcGJveCIsX2NhdDoicmVzZXRWaWV3Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJSZXNldCB2aWV3Iil9LGF0dHI6InJlc2V0IixpY29uOm8uaG9tZSxjbGljazpmdW5jdGlvbih0KXt4KHQsIm1hcGJveCIpfX0sdS56b29tSW5NYXBib3g9e25hbWU6Inpvb21Jbk1hcGJveCIsX2NhdDoiem9vbWluIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIGluIil9LGF0dHI6Inpvb20iLHZhbDoiaW4iLGljb246by56b29tX3BsdXMsY2xpY2s6eX0sdS56b29tT3V0TWFwYm94PXtuYW1lOiJ6b29tT3V0TWFwYm94IixfY2F0OiJ6b29tb3V0Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIG91dCIpfSxhdHRyOiJ6b29tIix2YWw6Im91dCIsaWNvbjpvLnpvb21fbWludXMsY2xpY2s6eX19LHsiLi4vLi4vZm9udHMvcGxvdGljb24iOjc1NSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6ODMxLCIuLi8uLi9wbG90cy9wbG90cyI6ODkwLCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi9zaGFwZXMvZHJhdyI6NzIzfV0sNzAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYnV0dG9ucyIpLGk9T2JqZWN0LmtleXMobiksYT1bImRyYXdsaW5lIiwiZHJhd29wZW5wYXRoIiwiZHJhd2Nsb3NlZHBhdGgiLCJkcmF3Y2lyY2xlIiwiZHJhd3JlY3QiLCJlcmFzZXNoYXBlIl0sbz1bInYxaG92ZXJtb2RlIiwiaG92ZXJjbG9zZXN0IiwiaG92ZXJjb21wYXJlIiwidG9nZ2xlaG92ZXIiLCJ0b2dnbGVzcGlrZWxpbmVzIl0uY29uY2F0KGEpLHM9W107aS5mb3JFYWNoKChmdW5jdGlvbih0KXshZnVuY3Rpb24odCl7aWYoLTE9PT1vLmluZGV4T2YodC5fY2F0fHx0Lm5hbWUpKXt2YXIgZT10Lm5hbWUscj0odC5fY2F0fHx0Lm5hbWUpLnRvTG93ZXJDYXNlKCk7LTE9PT1zLmluZGV4T2YoZSkmJnMucHVzaChlKSwtMT09PXMuaW5kZXhPZihyKSYmcy5wdXNoKHIpfX0oblt0XSl9KSkscy5zb3J0KCksZS5leHBvcnRzPXtEUkFXX01PREVTOmEsYmFja0J1dHRvbnM6byxmb3JlQnV0dG9uczpzfX0seyIuL2J1dHRvbnMiOjY5OX1dLDcwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2NvbG9yIiksYT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lm1vZGViYXJ8fHt9LHM9YS5uZXdDb250YWluZXIoZSwibW9kZWJhciIpO2Z1bmN0aW9uIGwodCxlKXtyZXR1cm4gbi5jb2VyY2UocixzLG8sdCxlKX1sKCJvcmllbnRhdGlvbiIpLGwoImJnY29sb3IiLGkuYWRkT3BhY2l0eShlLnBhcGVyX2JnY29sb3IsLjUpKTt2YXIgYz1pLmNvbnRyYXN0KGkucmdiKGUubW9kZWJhci5iZ2NvbG9yKSk7bCgiY29sb3IiLGkuYWRkT3BhY2l0eShjLC4zKSksbCgiYWN0aXZlY29sb3IiLGkuYWRkT3BhY2l0eShjLC43KSksbCgidWlyZXZpc2lvbiIsZS51aXJldmlzaW9uKSxsKCJhZGQiKSxsKCJyZW1vdmUiKX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vY29sb3IiOjYzOSwiLi9hdHRyaWJ1dGVzIjo2OTh9XSw3MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6Im1vZGViYXIiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLG1hbmFnZTp0KCIuL21hbmFnZSIpfX0seyIuL2F0dHJpYnV0ZXMiOjY5OCwiLi9kZWZhdWx0cyI6NzAxLCIuL21hbmFnZSI6NzAzfV0sNzAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLGk9dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi9meC9oZWxwZXJzIikuaXNVbmlmaWVkSG92ZXIscz10KCIuL21vZGViYXIiKSxsPXQoIi4vYnV0dG9ucyIpLGM9dCgiLi9jb25zdGFudHMiKS5EUkFXX01PREVTO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fY29udGV4dCx1PWUuX21vZGVCYXI7aWYoci5kaXNwbGF5TW9kZUJhcnx8ci53YXRlcm1hcmspe2lmKCFBcnJheS5pc0FycmF5KHIubW9kZUJhckJ1dHRvbnNUb1JlbW92ZSkpdGhyb3cgbmV3IEVycm9yKFsiKm1vZGVCYXJCdXR0b25zVG9SZW1vdmUqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIsIm11c3QgYmUgYW4gYXJyYXkuIl0uam9pbigiICIpKTtpZighQXJyYXkuaXNBcnJheShyLm1vZGVCYXJCdXR0b25zVG9BZGQpKXRocm93IG5ldyBFcnJvcihbIiptb2RlQmFyQnV0dG9uc1RvQWRkKiBjb25maWd1cmF0aW9uIG9wdGlvbnMiLCJtdXN0IGJlIGFuIGFycmF5LiJdLmpvaW4oIiAiKSk7dmFyIGYsaD1yLm1vZGVCYXJCdXR0b25zO2Y9QXJyYXkuaXNBcnJheShoKSYmaC5sZW5ndGg/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspZm9yKHZhciByPXRbZV0sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2lmKCJzdHJpbmciPT10eXBlb2YgaSl7aWYodm9pZCAwPT09bFtpXSl0aHJvdyBuZXcgRXJyb3IoWyIqbW9kZUJhckJ1dHRvbnMqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIsImludmFsaWQgYnV0dG9uIG5hbWUiXS5qb2luKCIgIikpO3RbZV1bbl09bFtpXX19cmV0dXJuIHR9KGgpOiFyLmRpc3BsYXlNb2RlQmFyJiZyLndhdGVybWFyaz9bXTpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEscz10Ll9jb250ZXh0O2Z1bmN0aW9uIHUodCxlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKGUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKSlyZXR1cm4hMH1lbHNle3ZhciByPWUubmFtZSxuPWUuX2NhdHx8ZS5uYW1lO2lmKHI9PT10fHxuPT09dC50b0xvd2VyQ2FzZSgpKXJldHVybiEwfXJldHVybiExfXZhciBmPWUubW9kZWJhci5hZGQ7InN0cmluZyI9PXR5cGVvZiBmJiYoZj1bZl0pO3ZhciBoPWUubW9kZWJhci5yZW1vdmU7InN0cmluZyI9PXR5cGVvZiBoJiYoaD1baF0pO3ZhciBwPXMubW9kZUJhckJ1dHRvbnNUb0FkZC5jb25jYXQoZi5maWx0ZXIoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8cy5tb2RlQmFyQnV0dG9uc1RvUmVtb3ZlLmxlbmd0aDtlKyspaWYodSh0LHMubW9kZUJhckJ1dHRvbnNUb1JlbW92ZVtlXSkpcmV0dXJuITE7cmV0dXJuITB9KSkpLGQ9cy5tb2RlQmFyQnV0dG9uc1RvUmVtb3ZlLmNvbmNhdChoLmZpbHRlcigoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxzLm1vZGVCYXJCdXR0b25zVG9BZGQubGVuZ3RoO2UrKylpZih1KHQscy5tb2RlQmFyQnV0dG9uc1RvQWRkW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH0pKSksbT1lLl9oYXMoImNhcnRlc2lhbiIpLGc9ZS5faGFzKCJnbDNkIiksdj1lLl9oYXMoImdlbyIpLHk9ZS5faGFzKCJwaWUiKSx4PWUuX2hhcygiZnVubmVsYXJlYSIpLGI9ZS5faGFzKCJnbDJkIiksXz1lLl9oYXMoInRlcm5hcnkiKSx3PWUuX2hhcygibWFwYm94IiksVD1lLl9oYXMoInBvbGFyIiksaz1lLl9oYXMoInNhbmtleSIpLEE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4ubGlzdCh7X2Z1bGxMYXlvdXQ6dH0sbnVsbCwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKWlmKCFlW3JdLmZpeGVkcmFuZ2UpcmV0dXJuITE7cmV0dXJuITB9KGUpLE09byhlLmhvdmVybW9kZSksUz1bXTtmdW5jdGlvbiBFKHQpe2lmKHQubGVuZ3RoKXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7cisrKXtmb3IodmFyIG49dFtyXSxpPWxbbl0sYT1pLm5hbWUudG9Mb3dlckNhc2UoKSxvPShpLl9jYXR8fGkubmFtZSkudG9Mb3dlckNhc2UoKSxzPSExLGM9MDtjPGQubGVuZ3RoO2MrKyl7dmFyIHU9ZFtjXS50b0xvd2VyQ2FzZSgpO2lmKHU9PT1hfHx1PT09byl7cz0hMDticmVha319c3x8ZS5wdXNoKGxbbl0pfVMucHVzaChlKX19dmFyIEw9WyJ0b0ltYWdlIl07cy5zaG93RWRpdEluQ2hhcnRTdHVkaW8/TC5wdXNoKCJlZGl0SW5DaGFydFN0dWRpbyIpOnMuc2hvd1NlbmRUb0Nsb3VkJiZMLnB1c2goInNlbmREYXRhVG9DbG91ZCIpO0UoTCk7dmFyIEM9W10sUD1bXSxJPVtdLE89W107KG18fGJ8fHl8fHh8fF8pK3YrZyt3K1Q+MT8oUD1bInRvZ2dsZUhvdmVyIl0sST1bInJlc2V0Vmlld3MiXSk6dj8oQz1bInpvb21JbkdlbyIsInpvb21PdXRHZW8iXSxQPVsiaG92ZXJDbG9zZXN0R2VvIl0sST1bInJlc2V0R2VvIl0pOmc/KFA9WyJob3ZlckNsb3Nlc3QzZCJdLEk9WyJyZXNldENhbWVyYURlZmF1bHQzZCIsInJlc2V0Q2FtZXJhTGFzdFNhdmUzZCJdKTp3PyhDPVsiem9vbUluTWFwYm94Iiwiem9vbU91dE1hcGJveCJdLFA9WyJ0b2dnbGVIb3ZlciJdLEk9WyJyZXNldFZpZXdNYXBib3giXSk6Yj9QPVsiaG92ZXJDbG9zZXN0R2wyZCJdOnk/UD1bImhvdmVyQ2xvc2VzdFBpZSJdOms/KFA9WyJob3ZlckNsb3Nlc3RDYXJ0ZXNpYW4iLCJob3ZlckNvbXBhcmVDYXJ0ZXNpYW4iXSxJPVsicmVzZXRWaWV3U2Fua2V5Il0pOlA9WyJ0b2dnbGVIb3ZlciJdO20mJihQPVsidG9nZ2xlU3Bpa2VsaW5lcyIsImhvdmVyQ2xvc2VzdENhcnRlc2lhbiIsImhvdmVyQ29tcGFyZUNhcnRlc2lhbiJdKTsoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYoIWEudHJhY2VJcyh0W2VdLCJub0hvdmVyIikpcmV0dXJuITE7cmV0dXJuITB9KHIpfHxNKSYmKFA9W10pOyFtJiYhYnx8QXx8KEM9WyJ6b29tSW4yZCIsInpvb21PdXQyZCIsImF1dG9TY2FsZTJkIl0sInJlc2V0Vmlld3MiIT09SVswXSYmKEk9WyJyZXNldFNjYWxlMmQiXSkpO2c/Tz1bInpvb20zZCIsInBhbjNkIiwib3JiaXRSb3RhdGlvbiIsInRhYmxlUm90YXRpb24iXToobXx8YikmJiFBfHxfP089WyJ6b29tMmQiLCJwYW4yZCJdOnd8fHY/Tz1bInBhbjJkIl06VCYmKE89WyJ6b29tMmQiXSk7KGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0hMSxyPTA7cjx0Lmxlbmd0aCYmIWU7cisrKXt2YXIgbj10W3JdO24uX21vZHVsZSYmbi5fbW9kdWxlLnNlbGVjdFBvaW50cyYmKGEudHJhY2VJcyhuLCJzY2F0dGVyLWxpa2UiKT8oaS5oYXNNYXJrZXJzKG4pfHxpLmhhc1RleHQobikpJiYoZT0hMCk6YS50cmFjZUlzKG4sImJveC12aW9saW4iKSYmImFsbCIhPT1uLmJveHBvaW50cyYmImFsbCIhPT1uLnBvaW50c3x8KGU9ITApKX1yZXR1cm4gZX0pKHIpJiZPLnB1c2goInNlbGVjdDJkIiwibGFzc28yZCIpO3ZhciB6PVtdLEQ9ZnVuY3Rpb24odCl7LTE9PT16LmluZGV4T2YodCkmJi0xIT09UC5pbmRleE9mKHQpJiZ6LnB1c2godCl9O2lmKEFycmF5LmlzQXJyYXkocCkpe2Zvcih2YXIgUj1bXSxGPTA7RjxwLmxlbmd0aDtGKyspe3ZhciBCPXBbRl07InN0cmluZyI9PXR5cGVvZiBCPyhCPUIudG9Mb3dlckNhc2UoKSwtMSE9PWMuaW5kZXhPZihCKT8oZS5faGFzKCJtYXBib3giKXx8ZS5faGFzKCJjYXJ0ZXNpYW4iKSkmJk8ucHVzaChCKToidG9nZ2xlc3Bpa2VsaW5lcyI9PT1CP0QoInRvZ2dsZVNwaWtlbGluZXMiKToidG9nZ2xlaG92ZXIiPT09Qj9EKCJ0b2dnbGVIb3ZlciIpOiJob3ZlcmNvbXBhcmUiPT09Qj9EKCJob3ZlckNvbXBhcmVDYXJ0ZXNpYW4iKToiaG92ZXJjbG9zZXN0Ij09PUI/KEQoImhvdmVyQ2xvc2VzdENhcnRlc2lhbiIpLEQoImhvdmVyQ2xvc2VzdEdlbyIpLEQoImhvdmVyQ2xvc2VzdDNkIiksRCgiaG92ZXJDbG9zZXN0R2wyZCIpLEQoImhvdmVyQ2xvc2VzdFBpZSIpKToidjFob3Zlcm1vZGUiPT09QiYmKEQoInRvZ2dsZUhvdmVyIiksRCgiaG92ZXJDbG9zZXN0Q2FydGVzaWFuIiksRCgiaG92ZXJDb21wYXJlQ2FydGVzaWFuIiksRCgiaG92ZXJDbG9zZXN0R2VvIiksRCgiaG92ZXJDbG9zZXN0M2QiKSxEKCJob3ZlckNsb3Nlc3RHbDJkIiksRCgiaG92ZXJDbG9zZXN0UGllIikpKTpSLnB1c2goQil9cD1SfXJldHVybiBFKE8pLEUoQy5jb25jYXQoSSkpLEUoeiksZnVuY3Rpb24odCxlKXtpZihlLmxlbmd0aClpZihBcnJheS5pc0FycmF5KGVbMF0pKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXQucHVzaChlW3JdKTtlbHNlIHQucHVzaChlKTtyZXR1cm4gdH0oUyxwKX0odCksdT91LnVwZGF0ZSh0LGYpOmUuX21vZGVCYXI9cyh0LGYpfWVsc2UgdSYmKHUuZGVzdHJveSgpLGRlbGV0ZSBlLl9tb2RlQmFyKX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MzEsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIjoxMjE2LCIuLi9meC9oZWxwZXJzIjo2NzUsIi4vYnV0dG9ucyI6Njk5LCIuL2NvbnN0YW50cyI6NzAwLCIuL21vZGViYXIiOjcwNH1dLDcwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9mb250cy9wbG90aWNvbiIpLHM9bmV3IERPTVBhcnNlcjtmdW5jdGlvbiBsKHQpe3RoaXMuY29udGFpbmVyPXQuY29udGFpbmVyLHRoaXMuZWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnVwZGF0ZSh0LmdyYXBoSW5mbyx0LmJ1dHRvbnMpLHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCl9dmFyIGM9bC5wcm90b3R5cGU7Yy51cGRhdGU9ZnVuY3Rpb24odCxlKXt0aGlzLmdyYXBoSW5mbz10O3ZhciByPXRoaXMuZ3JhcGhJbmZvLl9jb250ZXh0LG49dGhpcy5ncmFwaEluZm8uX2Z1bGxMYXlvdXQsaT0ibW9kZWJhci0iK24uX3VpZDt0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCJpZCIsaSksdGhpcy5fdWlkPWksdGhpcy5lbGVtZW50LmNsYXNzTmFtZT0ibW9kZWJhciIsImhvdmVyIj09PXIuZGlzcGxheU1vZGVCYXImJih0aGlzLmVsZW1lbnQuY2xhc3NOYW1lKz0iIG1vZGViYXItLWhvdmVyIGVhc2UtYmciKSwidiI9PT1uLm1vZGViYXIub3JpZW50YXRpb24mJih0aGlzLmVsZW1lbnQuY2xhc3NOYW1lKz0iIHZlcnRpY2FsIixlPWUucmV2ZXJzZSgpKTt2YXIgbz1uLm1vZGViYXIscz0iaG92ZXIiPT09ci5kaXNwbGF5TW9kZUJhcj8iLmpzLXBsb3RseS1wbG90IC5wbG90bHk6aG92ZXIgIjoiIjthLmRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGUoaSksYS5hZGRSZWxhdGVkU3R5bGVSdWxlKGkscysiIyIraSsiIC5tb2RlYmFyLWdyb3VwIiwiYmFja2dyb3VuZC1jb2xvcjogIitvLmJnY29sb3IpLGEuYWRkUmVsYXRlZFN0eWxlUnVsZShpLCIjIitpKyIgLm1vZGViYXItYnRuIC5pY29uIHBhdGgiLCJmaWxsOiAiK28uY29sb3IpLGEuYWRkUmVsYXRlZFN0eWxlUnVsZShpLCIjIitpKyIgLm1vZGViYXItYnRuOmhvdmVyIC5pY29uIHBhdGgiLCJmaWxsOiAiK28uYWN0aXZlY29sb3IpLGEuYWRkUmVsYXRlZFN0eWxlUnVsZShpLCIjIitpKyIgLm1vZGViYXItYnRuLmFjdGl2ZSAuaWNvbiBwYXRoIiwiZmlsbDogIitvLmFjdGl2ZWNvbG9yKTt2YXIgbD0hdGhpcy5oYXNCdXR0b25zKGUpLGM9dGhpcy5oYXNMb2dvIT09ci5kaXNwbGF5bG9nbyx1PXRoaXMubG9jYWxlIT09ci5sb2NhbGU7aWYodGhpcy5sb2NhbGU9ci5sb2NhbGUsKGx8fGN8fHUpJiYodGhpcy5yZW1vdmVBbGxCdXR0b25zKCksdGhpcy51cGRhdGVCdXR0b25zKGUpLHIud2F0ZXJtYXJrfHxyLmRpc3BsYXlsb2dvKSl7dmFyIGY9dGhpcy5nZXRMb2dvKCk7ci53YXRlcm1hcmsmJihmLmNsYXNzTmFtZT1mLmNsYXNzTmFtZSsiIHdhdGVybWFyayIpLCJ2Ij09PW4ubW9kZWJhci5vcmllbnRhdGlvbj90aGlzLmVsZW1lbnQuaW5zZXJ0QmVmb3JlKGYsdGhpcy5lbGVtZW50LmNoaWxkTm9kZXNbMF0pOnRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChmKSx0aGlzLmhhc0xvZ289ITB9dGhpcy51cGRhdGVBY3RpdmVCdXR0b24oKX0sYy51cGRhdGVCdXR0b25zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5idXR0b25zPXQsdGhpcy5idXR0b25FbGVtZW50cz1bXSx0aGlzLmJ1dHRvbnNOYW1lcz1bXSx0aGlzLmJ1dHRvbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9ZS5jcmVhdGVHcm91cCgpO3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dC5uYW1lO2lmKCFuKXRocm93IG5ldyBFcnJvcigibXVzdCBwcm92aWRlIGJ1dHRvbiAnbmFtZScgaW4gYnV0dG9uIGNvbmZpZyIpO2lmKC0xIT09ZS5idXR0b25zTmFtZXMuaW5kZXhPZihuKSl0aHJvdyBuZXcgRXJyb3IoImJ1dHRvbiBuYW1lICciK24rIicgaXMgdGFrZW4iKTtlLmJ1dHRvbnNOYW1lcy5wdXNoKG4pO3ZhciBpPWUuY3JlYXRlQnV0dG9uKHQpO2UuYnV0dG9uRWxlbWVudHMucHVzaChpKSxyLmFwcGVuZENoaWxkKGkpfSkpLGUuZWxlbWVudC5hcHBlbmRDaGlsZChyKX0pKX0sYy5jcmVhdGVHcm91cD1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LmNsYXNzTmFtZT0ibW9kZWJhci1ncm91cCIsdH0sYy5jcmVhdGVCdXR0b249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyLnNldEF0dHJpYnV0ZSgicmVsIiwidG9vbHRpcCIpLHIuY2xhc3NOYW1lPSJtb2RlYmFyLWJ0biI7dmFyIGk9dC50aXRsZTt2b2lkIDA9PT1pP2k9dC5uYW1lOiJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoaT1pKHRoaXMuZ3JhcGhJbmZvKSksKGl8fDA9PT1pKSYmci5zZXRBdHRyaWJ1dGUoImRhdGEtdGl0bGUiLGkpLHZvaWQgMCE9PXQuYXR0ciYmci5zZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIsdC5hdHRyKTt2YXIgYT10LnZhbDtpZih2b2lkIDAhPT1hJiYoImZ1bmN0aW9uIj09dHlwZW9mIGEmJihhPWEodGhpcy5ncmFwaEluZm8pKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS12YWwiLGEpKSwiZnVuY3Rpb24iIT10eXBlb2YgdC5jbGljayl0aHJvdyBuZXcgRXJyb3IoIm11c3QgcHJvdmlkZSBidXR0b24gJ2NsaWNrJyBmdW5jdGlvbiBpbiBidXR0b24gY29uZmlnIik7ci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKHIpe3QuY2xpY2soZS5ncmFwaEluZm8sciksZS51cGRhdGVBY3RpdmVCdXR0b24oci5jdXJyZW50VGFyZ2V0KX0pKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS10b2dnbGUiLHQudG9nZ2xlfHwhMSksdC50b2dnbGUmJm4uc2VsZWN0KHIpLmNsYXNzZWQoImFjdGl2ZSIsITApO3ZhciBzPXQuaWNvbjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygcz9yLmFwcGVuZENoaWxkKHMoKSk6ci5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUljb24oc3x8by5xdWVzdGlvbikpLHIuc2V0QXR0cmlidXRlKCJkYXRhLWdyYXZpdHkiLHQuZ3Jhdml0eXx8Im4iKSxyfSxjLmNyZWF0ZUljb249ZnVuY3Rpb24odCl7dmFyIGUscj1pKHQuaGVpZ2h0KT9OdW1iZXIodC5oZWlnaHQpOnQuYXNjZW50LXQuZGVzY2VudCxuPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI7aWYodC5wYXRoKXsoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobiwic3ZnIikpLnNldEF0dHJpYnV0ZSgidmlld0JveCIsWzAsMCx0LndpZHRoLHJdLmpvaW4oIiAiKSksZS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwiaWNvbiIpO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuLCJwYXRoIik7YS5zZXRBdHRyaWJ1dGUoImQiLHQucGF0aCksdC50cmFuc2Zvcm0/YS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdC50cmFuc2Zvcm0pOnZvaWQgMCE9PXQuYXNjZW50JiZhLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwibWF0cml4KDEgMCAwIC0xIDAgIit0LmFzY2VudCsiKSIpLGUuYXBwZW5kQ2hpbGQoYSl9dC5zdmcmJihlPXMucGFyc2VGcm9tU3RyaW5nKHQuc3ZnLCJhcHBsaWNhdGlvbi94bWwiKS5jaGlsZE5vZGVzWzBdKTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjFlbSIpLGUuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjFlbSIpLGV9LGMudXBkYXRlQWN0aXZlQnV0dG9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ3JhcGhJbmZvLl9mdWxsTGF5b3V0LHI9dm9pZCAwIT09dD90LmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIik6bnVsbDt0aGlzLmJ1dHRvbkVsZW1lbnRzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxvPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxzPSJ0cnVlIj09PXQuZ2V0QXR0cmlidXRlKCJkYXRhLXRvZ2dsZSIpLGw9bi5zZWxlY3QodCk7aWYocylvPT09ciYmbC5jbGFzc2VkKCJhY3RpdmUiLCFsLmNsYXNzZWQoImFjdGl2ZSIpKTtlbHNle3ZhciBjPW51bGw9PT1vP286YS5uZXN0ZWRQcm9wZXJ0eShlLG8pLmdldCgpO2wuY2xhc3NlZCgiYWN0aXZlIixjPT09aSl9fSkpfSxjLmhhc0J1dHRvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5idXR0b25zO2lmKCFlKXJldHVybiExO2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3Ipe2lmKHRbcl0ubGVuZ3RoIT09ZVtyXS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0W3JdLmxlbmd0aDtuKyspaWYodFtyXVtuXS5uYW1lIT09ZVtyXVtuXS5uYW1lKXJldHVybiExfXJldHVybiEwfSxjLmdldExvZ289ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNyZWF0ZUdyb3VwKCksZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuIGUuaHJlZj0iaHR0cHM6Ly9wbG90bHkuY29tLyIsZS50YXJnZXQ9Il9ibGFuayIsZS5zZXRBdHRyaWJ1dGUoImRhdGEtdGl0bGUiLGEuXyh0aGlzLmdyYXBoSW5mbywiUHJvZHVjZWQgd2l0aCBQbG90bHkiKSksZS5jbGFzc05hbWU9Im1vZGViYXItYnRuIHBsb3RseWpzaWNvbiBtb2RlYmFyLWJ0bi0tbG9nbyIsZS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUljb24oby5uZXdwbG90bHlsb2dvKSksdC5hcHBlbmRDaGlsZChlKSx0fSxjLnJlbW92ZUFsbEJ1dHRvbnM9ZnVuY3Rpb24oKXtmb3IoO3RoaXMuZWxlbWVudC5maXJzdENoaWxkOyl0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQpO3RoaXMuaGFzTG9nbz0hMX0sYy5kZXN0cm95PWZ1bmN0aW9uKCl7YS5yZW1vdmVFbGVtZW50KHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5tb2RlYmFyIikpLGEuZGVsZXRlUmVsYXRlZFN0eWxlUnVsZSh0aGlzLl91aWQpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGk9bmV3IGwoe2dyYXBoSW5mbzp0LGNvbnRhaW5lcjpyLl9tb2RlYmFyZGl2Lm5vZGUoKSxidXR0b25zOmV9KTtyZXR1cm4gci5fcHJpdmF0ZXBsb3QmJm4uc2VsZWN0KGkuZWxlbWVudCkuYXBwZW5kKCJzcGFuIikuY2xhc3NlZCgiYmFkZ2UtcHJpdmF0ZSBmbG9hdC0tbGVmdCIsITApLnRleHQoIlBSSVZBVEUiKSxpfX0seyIuLi8uLi9mb250cy9wbG90aWNvbiI6NzU1LCIuLi8uLi9saWIiOjc3NiwiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw3MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIiksYT0oMCx0KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXkpKCJidXR0b24iLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sc3RlcDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibW9udGgiLCJ5ZWFyIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsImFsbCJdLGRmbHQ6Im1vbnRoIixlZGl0VHlwZToicGxvdCJ9LHN0ZXBtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiYWNrd2FyZCIsInRvZGF0ZSJdLGRmbHQ6ImJhY2t3YXJkIixlZGl0VHlwZToicGxvdCJ9LGNvdW50Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGxhYmVsOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSk7ZS5leHBvcnRzPXt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToicGxvdCJ9LGJ1dHRvbnM6YSx4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxlZGl0VHlwZToicGxvdCJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0IixlZGl0VHlwZToicGxvdCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGVkaXRUeXBlOiJwbG90In0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6ImJvdHRvbSIsZWRpdFR5cGU6InBsb3QifSxmb250Om4oe2VkaXRUeXBlOiJwbG90In0pLGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkubGlnaHRMaW5lLGVkaXRUeXBlOiJwbG90In0sYWN0aXZlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToicGxvdCJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJwbG90In0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifX0seyIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTYsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuLi9jb2xvci9hdHRyaWJ1dGVzIjo2Mzh9XSw3MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt5UGFkOi4wMixtaW5CdXR0b25XaWR0aDozMCxyeDozLHJ5OjMsbGlnaHRBbW91bnQ6MjUsZGFya0Ftb3VudDoxMH19LHt9XSw3MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9jb2xvciIpLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLG89dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKSxsPXQoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gYyh0LGUscixpKXt2YXIgYT1pLmNhbGVuZGFyO2Z1bmN0aW9uIG8ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMuYnV0dG9ucyxyLGkpfWlmKG8oInZpc2libGUiKSl7dmFyIGw9bygic3RlcCIpOyJhbGwiIT09bCYmKCFhfHwiZ3JlZ29yaWFuIj09PWF8fCJtb250aCIhPT1sJiYieWVhciIhPT1sP28oInN0ZXBtb2RlIik6ZS5zdGVwbW9kZT0iYmFja3dhcmQiLG8oImNvdW50IikpLG8oImxhYmVsIil9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1LGYpe3ZhciBoPXQucmFuZ2VzZWxlY3Rvcnx8e30scD1hLm5ld0NvbnRhaW5lcihlLCJyYW5nZXNlbGVjdG9yIik7ZnVuY3Rpb24gZCh0LGUpe3JldHVybiBuLmNvZXJjZShoLHAscyx0LGUpfWlmKGQoInZpc2libGUiLG8oaCxwLHtuYW1lOiJidXR0b25zIixoYW5kbGVJdGVtRGVmYXVsdHM6YyxjYWxlbmRhcjpmfSkubGVuZ3RoPjApKXt2YXIgbT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXIuZmlsdGVyKChmdW5jdGlvbihyKXtyZXR1cm4gZVtyXS5hbmNob3I9PT10Ll9pZH0pKSxpPTAsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1lW25bYV1dLmRvbWFpbjtvJiYoaT1NYXRoLm1heChvWzFdLGkpKX1yZXR1cm5bdC5kb21haW5bMF0saStsLnlQYWRdfShlLHIsdSk7ZCgieCIsbVswXSksZCgieSIsbVsxXSksbi5ub25lT3JBbGwodCxlLFsieCIsInkiXSksZCgieGFuY2hvciIpLGQoInlhbmNob3IiKSxuLmNvZXJjZUZvbnQoZCwiZm9udCIsci5mb250KTt2YXIgZz1kKCJiZ2NvbG9yIik7ZCgiYWN0aXZlY29sb3IiLGkuY29udHJhc3QoZyxsLmxpZ2h0QW1vdW50LGwuZGFya0Ftb3VudCkpLGQoImJvcmRlcmNvbG9yIiksZCgiYm9yZGVyd2lkdGgiKX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTYsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6ODIyLCIuLi9jb2xvciI6NjM5LCIuL2F0dHJpYnV0ZXMiOjcwNSwiLi9jb25zdGFudHMiOjcwNn1dLDcwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uL2NvbG9yIikscz10KCIuLi9kcmF3aW5nIiksbD10KCIuLi8uLi9saWIiKSxjPWwuc3RyVHJhbnNsYXRlLHU9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksZj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxoPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSxwPWguTElORV9TUEFDSU5HLGQ9aC5GUk9NX1RMLG09aC5GUk9NX0JSLGc9dCgiLi9jb25zdGFudHMiKSx2PXQoIi4vZ2V0X3VwZGF0ZV9vYmplY3QiKTtmdW5jdGlvbiB5KHQpe3JldHVybiB0Ll9pZH1mdW5jdGlvbiB4KHQsZSxyKXt2YXIgbj1sLmVuc3VyZVNpbmdsZSh0LCJyZWN0Iiwic2VsZWN0b3ItcmVjdCIsKGZ1bmN0aW9uKHQpe3QuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpfSkpO24uYXR0cih7cng6Zy5yeCxyeTpnLnJ5fSksbi5jYWxsKG8uc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoby5maWxsLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuX2lzQWN0aXZlfHxlLl9pc0hvdmVyZWQ/dC5hY3RpdmVjb2xvcjp0LmJnY29sb3J9KGUscikpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyd2lkdGgrInB4Iil9ZnVuY3Rpb24gYih0LGUscixuKXtsLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0Iiwic2VsZWN0b3ItdGV4dCIsKGZ1bmN0aW9uKHQpe3QuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKX0pKS5jYWxsKHMuZm9udCxlLmZvbnQpLnRleHQoZnVuY3Rpb24odCxlKXtpZih0LmxhYmVsKXJldHVybiBlP2wudGVtcGxhdGVTdHJpbmcodC5sYWJlbCxlKTp0LmxhYmVsO3JldHVybiJhbGwiPT09dC5zdGVwPyJhbGwiOnQuY291bnQrdC5zdGVwLmNoYXJBdCgwKX0ocixuLl9mdWxsTGF5b3V0Ll9tZXRhKSkuY2FsbCgoZnVuY3Rpb24odCl7dS5jb252ZXJ0VG9Uc3BhbnModCxuKX0pKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLnJhbmdlc2VsZWN0b3IiKS5kYXRhKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1mLmxpc3QodCwieCIsITApLHI9W10sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2kucmFuZ2VzZWxlY3RvciYmaS5yYW5nZXNlbGVjdG9yLnZpc2libGUmJnIucHVzaChpKX1yZXR1cm4gcn0odCkseSk7ZS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInJhbmdlc2VsZWN0b3IiLCEwKSxlLmV4aXQoKS5yZW1vdmUoKSxlLnN0eWxlKHtjdXJzb3I6InBvaW50ZXIiLCJwb2ludGVyLWV2ZW50cyI6ImFsbCJ9KSxlLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLG89ZSxmPW8ucmFuZ2VzZWxlY3RvcixoPXIuc2VsZWN0QWxsKCJnLmJ1dHRvbiIpLmRhdGEobC5maWx0ZXJWaXNpYmxlKGYuYnV0dG9ucykpO2guZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJidXR0b24iLCEwKSxoLmV4aXQoKS5yZW1vdmUoKSxoLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9dihvLGUpO2UuX2lzQWN0aXZlPWZ1bmN0aW9uKHQsZSxyKXtpZigiYWxsIj09PWUuc3RlcClyZXR1cm4hMD09PXQuYXV0b3JhbmdlO3ZhciBuPU9iamVjdC5rZXlzKHIpO3JldHVybiB0LnJhbmdlWzBdPT09cltuWzBdXSYmdC5yYW5nZVsxXT09PXJbblsxXV19KG8sZSxhKSxyLmNhbGwoeCxmLGUpLHIuY2FsbChiLGYsZSx0KSxyLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7dC5fZHJhZ2dlZHx8aS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsYSl9KSksci5vbigibW91c2VvdmVyIiwoZnVuY3Rpb24oKXtlLl9pc0hvdmVyZWQ9ITAsci5jYWxsKHgsZixlKX0pKSxyLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7ZS5faXNIb3ZlcmVkPSExLHIuY2FsbCh4LGYsZSl9KSl9KSksZnVuY3Rpb24odCxlLHIsaSxvKXt2YXIgZj0wLGg9MCx2PXIuYm9yZGVyd2lkdGg7ZS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiLnNlbGVjdG9yLXRleHQiKSxlPXIuZm9udC5zaXplKnAsaT1NYXRoLm1heChlKnUubGluZUNvdW50KHQpLDE2KSszO2g9TWF0aC5tYXgoaCxpKX0pKSxlLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10LnNlbGVjdCgiLnNlbGVjdG9yLXJlY3QiKSxpPXQuc2VsZWN0KCIuc2VsZWN0b3ItdGV4dCIpLGE9aS5ub2RlKCkmJnMuYkJveChpLm5vZGUoKSkud2lkdGgsbz1yLmZvbnQuc2l6ZSpwLGw9dS5saW5lQ291bnQoaSksZD1NYXRoLm1heChhKzEwLGcubWluQnV0dG9uV2lkdGgpO3QuYXR0cigidHJhbnNmb3JtIixjKHYrZix2KSksZS5hdHRyKHt4OjAseTowLHdpZHRoOmQsaGVpZ2h0Omh9KSx1LnBvc2l0aW9uVGV4dChpLGQvMixoLzItKGwtMSkqby8yKzMpLGYrPWQrNX0pKTt2YXIgeT10Ll9mdWxsTGF5b3V0Ll9zaXplLHg9eS5sK3kudypyLngsYj15LnQreS5oKigxLXIueSksXz0ibGVmdCI7bC5pc1JpZ2h0QW5jaG9yKHIpJiYoeC09ZixfPSJyaWdodCIpO2wuaXNDZW50ZXJBbmNob3IocikmJih4LT1mLzIsXz0iY2VudGVyIik7dmFyIHc9InRvcCI7bC5pc0JvdHRvbUFuY2hvcihyKSYmKGItPWgsdz0iYm90dG9tIik7bC5pc01pZGRsZUFuY2hvcihyKSYmKGItPWgvMix3PSJtaWRkbGUiKTtmPU1hdGguY2VpbChmKSxoPU1hdGguY2VpbChoKSx4PU1hdGgucm91bmQoeCksYj1NYXRoLnJvdW5kKGIpLGEuYXV0b01hcmdpbih0LGkrIi1yYW5nZS1zZWxlY3RvciIse3g6ci54LHk6ci55LGw6ZipkW19dLHI6ZiptW19dLGI6aCptW3ddLHQ6aCpkW3ddfSksby5hdHRyKCJ0cmFuc2Zvcm0iLGMoeCxiKSl9KHQsaCxmLG8uX25hbWUscil9KSl9fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjc0NCwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwiLi4vLi4vcGxvdHMvcGxvdHMiOjg5MCwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vY29sb3IiOjYzOSwiLi4vZHJhd2luZyI6NjYxLCIuL2NvbnN0YW50cyI6NzA2LCIuL2dldF91cGRhdGVfb2JqZWN0Ijo3MDksIkBwbG90bHkvZDMiOjU4fV0sNzA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzLXRpbWUiKSxpPXQoIi4uLy4uL2xpYiIpLnRpdGxlQ2FzZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9uYW1lLGE9e307aWYoImFsbCI9PT1lLnN0ZXApYVtyKyIuYXV0b3JhbmdlIl09ITA7ZWxzZXt2YXIgbz1mdW5jdGlvbih0LGUpe3ZhciByLGE9dC5yYW5nZSxvPW5ldyBEYXRlKHQucjJsKGFbMV0pKSxzPWUuc3RlcCxsPW5bInV0YyIraShzKV0sYz1lLmNvdW50O3N3aXRjaChlLnN0ZXBtb2RlKXtjYXNlImJhY2t3YXJkIjpyPXQubDJyKCtsLm9mZnNldChvLC1jKSk7YnJlYWs7Y2FzZSJ0b2RhdGUiOnZhciB1PWwub2Zmc2V0KG8sLWMpO3I9dC5sMnIoK2wuY2VpbCh1KSl9dmFyIGY9YVsxXTtyZXR1cm5bcixmXX0odCxlKTthW3IrIi5yYW5nZVswXSJdPW9bMF0sYVtyKyIucmFuZ2VbMV0iXT1vWzFdfXJldHVybiBhfX0seyIuLi8uLi9saWIiOjc3NiwiZDMtdGltZSI6MTY5fV0sNzEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJyYW5nZXNlbGVjdG9yIixzY2hlbWE6e3N1YnBsb3RzOnt4YXhpczp7cmFuZ2VzZWxlY3Rvcjp0KCIuL2F0dHJpYnV0ZXMiKX19fSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpfX0seyIuL2F0dHJpYnV0ZXMiOjcwNSwiLi9kZWZhdWx0cyI6NzA3LCIuL2RyYXciOjcwOH1dLDcxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXtiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmJhY2tncm91bmQsZWRpdFR5cGU6InBsb3QifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJpbnRlZ2VyIixkZmx0OjAsbWluOjAsZWRpdFR5cGU6InBsb3QifSxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7InJhbmdlWzBdIjp2b2lkIDAsInJhbmdlWzFdIjp2b2lkIDB9fSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19XSxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnthdXRvcmFuZ2U6ITF9fSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDouMTUsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifX0seyIuLi9jb2xvci9hdHRyaWJ1dGVzIjo2Mzh9XSw3MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikubGlzdCxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5nZXRBdXRvUmFuZ2UsYT10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bih0LCJ4IiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbz1lW3JdLHM9b1thLm5hbWVdO3MmJnMudmlzaWJsZSYmcy5hdXRvcmFuZ2UmJihzLl9pbnB1dC5hdXRvcmFuZ2U9ITAscy5faW5wdXQucmFuZ2U9cy5yYW5nZT1pKHQsbykpfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6ODI2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwiLi9jb25zdGFudHMiOjcxM31dLDcxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InJhbmdlc2xpZGVyIixjb250YWluZXJDbGFzc05hbWU6InJhbmdlc2xpZGVyLWNvbnRhaW5lciIsYmdDbGFzc05hbWU6InJhbmdlc2xpZGVyLWJnIixyYW5nZVBsb3RDbGFzc05hbWU6InJhbmdlc2xpZGVyLXJhbmdlcGxvdCIsbWFza01pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItbWFzay1taW4iLG1hc2tNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWF4IixzbGlkZUJveENsYXNzTmFtZToicmFuZ2VzbGlkZXItc2xpZGVib3giLGdyYWJiZXJNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJiZXItbWluIixncmFiQXJlYU1pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmFyZWEtbWluIixoYW5kbGVNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLWhhbmRsZS1taW4iLGdyYWJiZXJNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJiZXItbWF4IixncmFiQXJlYU1heENsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmFyZWEtbWF4IixoYW5kbGVNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLWhhbmRsZS1tYXgiLG1hc2tNaW5PcHBBeGlzQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1tYXNrLW1pbi1vcHAtYXhpcyIsbWFza01heE9wcEF4aXNDbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWF4LW9wcC1heGlzIixtYXNrQ29sb3I6InJnYmEoMCwwLDAsMC40KSIsbWFza09wcEF4aXNDb2xvcjoicmdiYSgwLDAsMCwwLjIpIixzbGlkZUJveEZpbGw6InRyYW5zcGFyZW50IixzbGlkZUJveEN1cnNvcjoiZXctcmVzaXplIixncmFiQXJlYUZpbGw6InRyYW5zcGFyZW50IixncmFiQXJlYUN1cnNvcjoiY29sLXJlc2l6ZSIsZ3JhYkFyZWFXaWR0aDoxMCxoYW5kbGVXaWR0aDo0LGhhbmRsZVJhZGl1czoxLGhhbmRsZVN0cm9rZVdpZHRoOjEsZXh0cmFQYWQ6MTV9fSx7fV0sNzE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKSxzPXQoIi4vb3BwYXhpc19hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbD10W3JdLGM9ZVtyXTtpZihsLnJhbmdlc2xpZGVyfHxlLl9yZXF1ZXN0UmFuZ2VzbGlkZXJbYy5faWRdKXtuLmlzUGxhaW5PYmplY3QobC5yYW5nZXNsaWRlcil8fChsLnJhbmdlc2xpZGVyPXt9KTt2YXIgdSxmLGg9bC5yYW5nZXNsaWRlcixwPWkubmV3Q29udGFpbmVyKGMsInJhbmdlc2xpZGVyIik7aWYoXygidmlzaWJsZSIpKXtfKCJiZ2NvbG9yIixlLnBsb3RfYmdjb2xvciksXygiYm9yZGVyY29sb3IiKSxfKCJib3JkZXJ3aWR0aCIpLF8oInRoaWNrbmVzcyIpLF8oImF1dG9yYW5nZSIsIWMuaXNWYWxpZFJhbmdlKGgucmFuZ2UpKSxfKCJyYW5nZSIpO3ZhciBkPWUuX3N1YnBsb3RzO2lmKGQpZm9yKHZhciBtPWQuY2FydGVzaWFuLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyKDAsdC5pbmRleE9mKCJ5IikpPT09YS5uYW1lMmlkKHIpfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyKHQuaW5kZXhPZigieSIpLHQubGVuZ3RoKX0pKSxnPW4uc2ltcGxlTWFwKG0sYS5pZDJuYW1lKSx2PTA7djxnLmxlbmd0aDt2Kyspe3ZhciB5PWdbdl07dT1oW3ldfHx7fSxmPWkubmV3Q29udGFpbmVyKHAseSwieWF4aXMiKTt2YXIgeCxiPWVbeV07dS5yYW5nZSYmYi5pc1ZhbGlkUmFuZ2UodS5yYW5nZSkmJih4PSJmaXhlZCIpLCJtYXRjaCIhPT13KCJyYW5nZW1vZGUiLHgpJiZ3KCJyYW5nZSIsYi5yYW5nZS5zbGljZSgpKX1wLl9pbnB1dD1ofX1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuIG4uY29lcmNlKGgscCxvLHQsZSl9ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBuLmNvZXJjZSh1LGYscyx0LGUpfX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MzEsIi4vYXR0cmlidXRlcyI6NzExLCIuL29wcGF4aXNfYXR0cmlidXRlcyI6NzE4fV0sNzE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vbGliIikscz1vLnN0clRyYW5zbGF0ZSxsPXQoIi4uL2RyYXdpbmciKSxjPXQoIi4uL2NvbG9yIiksdT10KCIuLi90aXRsZXMiKSxmPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGg9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikscD10KCIuLi9kcmFnZWxlbWVudCIpLGQ9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLG09dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBnKHQsZSxyLG4pe3ZhciBpPW8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLG0uYmdDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih7eDowLHk6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pKSxhPW4uYm9yZGVyd2lkdGglMj09MD9uLmJvcmRlcndpZHRoOm4uYm9yZGVyd2lkdGgtMSxjPS1uLl9vZmZzZXRTaGlmdCx1PWwuY3Jpc3BSb3VuZChlLG4uYm9yZGVyd2lkdGgpO2kuYXR0cih7d2lkdGg6bi5fd2lkdGgrYSxoZWlnaHQ6bi5faGVpZ2h0K2EsdHJhbnNmb3JtOnMoYyxjKSxmaWxsOm4uYmdjb2xvcixzdHJva2U6bi5ib3JkZXJjb2xvciwic3Ryb2tlLXdpZHRoIjp1fSl9ZnVuY3Rpb24gdih0LGUscixuKXt2YXIgaT1lLl9mdWxsTGF5b3V0O28uZW5zdXJlU2luZ2xlQnlJZChpLl90b3BkZWZzLCJjbGlwUGF0aCIsbi5fY2xpcElkLChmdW5jdGlvbih0KXt0LmFwcGVuZCgicmVjdCIpLmF0dHIoe3g6MCx5OjB9KX0pKS5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDpuLl93aWR0aCxoZWlnaHQ6bi5faGVpZ2h0fSl9ZnVuY3Rpb24geSh0LGUscixpKXt2YXIgcyxjPWUuY2FsY2RhdGEsdT10LnNlbGVjdEFsbCgiZy4iK20ucmFuZ2VQbG90Q2xhc3NOYW1lKS5kYXRhKHIuX3N1YnBsb3RzV2l0aCxvLmlkZW50aXR5KTt1LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtyZXR1cm4gbS5yYW5nZVBsb3RDbGFzc05hbWUrIiAiK3R9KSkuY2FsbChsLnNldENsaXBVcmwsaS5fY2xpcElkLGUpLHUub3JkZXIoKSx1LmV4aXQoKS5yZW1vdmUoKSx1LmVhY2goKGZ1bmN0aW9uKHQsbyl7dmFyIGw9bi5zZWxlY3QodGhpcyksdT0wPT09byxwPWguZ2V0RnJvbUlkKGUsdCwieSIpLGQ9cC5fbmFtZSxtPWlbZF0sZz17ZGF0YTpbXSxsYXlvdXQ6e3hheGlzOnt0eXBlOnIudHlwZSxkb21haW46WzAsMV0scmFuZ2U6aS5yYW5nZS5zbGljZSgpLGNhbGVuZGFyOnIuY2FsZW5kYXJ9LHdpZHRoOmkuX3dpZHRoLGhlaWdodDppLl9oZWlnaHQsbWFyZ2luOnt0OjAsYjowLGw6MCxyOjB9fSxfY29udGV4dDplLl9jb250ZXh0fTtyLnJhbmdlYnJlYWtzJiYoZy5sYXlvdXQueGF4aXMucmFuZ2VicmVha3M9ci5yYW5nZWJyZWFrcyksZy5sYXlvdXRbZF09e3R5cGU6cC50eXBlLGRvbWFpbjpbMCwxXSxyYW5nZToibWF0Y2giIT09bS5yYW5nZW1vZGU/bS5yYW5nZS5zbGljZSgpOnAucmFuZ2Uuc2xpY2UoKSxjYWxlbmRhcjpwLmNhbGVuZGFyfSxwLnJhbmdlYnJlYWtzJiYoZy5sYXlvdXRbZF0ucmFuZ2VicmVha3M9cC5yYW5nZWJyZWFrcyksYS5zdXBwbHlEZWZhdWx0cyhnKTt2YXIgdj1nLl9mdWxsTGF5b3V0LnhheGlzLHk9Zy5fZnVsbExheW91dFtkXTt2LmNsZWFyQ2FsYygpLHYuc2V0U2NhbGUoKSx5LmNsZWFyQ2FsYygpLHkuc2V0U2NhbGUoKTt2YXIgeD17aWQ6dCxwbG90Z3JvdXA6bCx4YXhpczp2LHlheGlzOnksaXNSYW5nZVBsb3Q6ITB9O3U/cz14Oih4Lm1haW5wbG90PSJ4eSIseC5tYWlucGxvdGluZm89cyksZi5yYW5nZVBsb3QoZSx4LGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxhPWlbMF0udHJhY2U7YS54YXhpcythLnlheGlzPT09ZSYmci5wdXNoKGkpfXJldHVybiByfShjLHQpKX0pKX1mdW5jdGlvbiB4KHQsZSxyLG4saSl7KG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLG0ubWFza01pbkNsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHt4OjAseTowLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkpLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KS5jYWxsKGMuZmlsbCxtLm1hc2tDb2xvciksby5lbnN1cmVTaW5nbGUodCwicmVjdCIsbS5tYXNrTWF4Q2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIoe3k6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pKS5hdHRyKCJoZWlnaHQiLG4uX2hlaWdodCkuY2FsbChjLmZpbGwsbS5tYXNrQ29sb3IpLCJtYXRjaCIhPT1pLnJhbmdlbW9kZSkmJihvLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixtLm1hc2tNaW5PcHBBeGlzQ2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIoe3k6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pKS5hdHRyKCJ3aWR0aCIsbi5fd2lkdGgpLmNhbGwoYy5maWxsLG0ubWFza09wcEF4aXNDb2xvciksby5lbnN1cmVTaW5nbGUodCwicmVjdCIsbS5tYXNrTWF4T3BwQXhpc0NsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KSkuYXR0cigid2lkdGgiLG4uX3dpZHRoKS5zdHlsZSgiYm9yZGVyLXRvcCIsbS5tYXNrT3BwQm9yZGVyKS5jYWxsKGMuZmlsbCxtLm1hc2tPcHBBeGlzQ29sb3IpKX1mdW5jdGlvbiBiKHQsZSxyLG4pe2UuX2NvbnRleHQuc3RhdGljUGxvdHx8by5lbnN1cmVTaW5nbGUodCwicmVjdCIsbS5zbGlkZUJveENsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsY3Vyc29yOm0uc2xpZGVCb3hDdXJzb3IsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KSkuYXR0cih7aGVpZ2h0Om4uX2hlaWdodCxmaWxsOm0uc2xpZGVCb3hGaWxsfSl9ZnVuY3Rpb24gXyh0LGUscixuKXt2YXIgaT1vLmVuc3VyZVNpbmdsZSh0LCJnIixtLmdyYWJiZXJNaW5DbGFzc05hbWUpLGE9by5lbnN1cmVTaW5nbGUodCwiZyIsbS5ncmFiYmVyTWF4Q2xhc3NOYW1lKSxzPXt4OjAsd2lkdGg6bS5oYW5kbGVXaWR0aCxyeDptLmhhbmRsZVJhZGl1cyxmaWxsOmMuYmFja2dyb3VuZCxzdHJva2U6Yy5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjptLmhhbmRsZVN0cm9rZVdpZHRoLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0sbD17eTpNYXRoLnJvdW5kKG4uX2hlaWdodC80KSxoZWlnaHQ6TWF0aC5yb3VuZChuLl9oZWlnaHQvMil9O28uZW5zdXJlU2luZ2xlKGksInJlY3QiLG0uaGFuZGxlTWluQ2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIocyl9KSkuYXR0cihsKSxvLmVuc3VyZVNpbmdsZShhLCJyZWN0IixtLmhhbmRsZU1heENsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHMpfSkpLmF0dHIobCk7dmFyIHU9e3dpZHRoOm0uZ3JhYkFyZWFXaWR0aCx4OjAseTowLGZpbGw6bS5ncmFiQXJlYUZpbGwsY3Vyc29yOmUuX2NvbnRleHQuc3RhdGljUGxvdD92b2lkIDA6bS5ncmFiQXJlYUN1cnNvcn07by5lbnN1cmVTaW5nbGUoaSwicmVjdCIsbS5ncmFiQXJlYU1pbkNsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHUpfSkpLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KSxvLmVuc3VyZVNpbmdsZShhLCJyZWN0IixtLmdyYWJBcmVhTWF4Q2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIodSl9KSkuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3JhbmdlU2xpZGVyRGF0YSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBsPXJbYV1bbS5uYW1lXTtsLl9jbGlwSWQ9bC5faWQrIi0iK2UuX3VpZH12YXIgYz1lLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCJnLiIrbS5jb250YWluZXJDbGFzc05hbWUpLmRhdGEociwoZnVuY3Rpb24odCl7cmV0dXJuIHQuX25hbWV9KSk7Yy5leGl0KCkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9dFttLm5hbWVdO2UuX3RvcGRlZnMuc2VsZWN0KCIjIityLl9jbGlwSWQpLnJlbW92ZSgpfSkpLnJlbW92ZSgpLDAhPT1yLmxlbmd0aCYmKGMuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG0uY29udGFpbmVyQ2xhc3NOYW1lLCEwKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLGMuZWFjaCgoZnVuY3Rpb24ocil7dmFyIGE9bi5zZWxlY3QodGhpcyksbD1yW20ubmFtZV0sYz1lW2guaWQybmFtZShyLmFuY2hvcildLGY9bFtoLmlkMm5hbWUoci5hbmNob3IpXTtpZihsLnJhbmdlKXt2YXIgdyxUPW8uc2ltcGxlTWFwKGwucmFuZ2Usci5yMmwpLGs9by5zaW1wbGVNYXAoci5yYW5nZSxyLnIybCk7dz1rWzBdPGtbMV0/W01hdGgubWluKFRbMF0sa1swXSksTWF0aC5tYXgoVFsxXSxrWzFdKV06W01hdGgubWF4KFRbMF0sa1swXSksTWF0aC5taW4oVFsxXSxrWzFdKV0sbC5yYW5nZT1sLl9pbnB1dC5yYW5nZT1vLnNpbXBsZU1hcCh3LHIubDJyKX1yLmNsZWFuUmFuZ2UoInJhbmdlc2xpZGVyLnJhbmdlIik7dmFyIEE9ZS5fc2l6ZSxNPXIuZG9tYWluO2wuX3dpZHRoPUEudyooTVsxXS1NWzBdKTt2YXIgUz1NYXRoLnJvdW5kKEEubCtBLncqTVswXSksRT1NYXRoLnJvdW5kKEEudCtBLmgqKDEtci5fY291bnRlckRvbWFpbk1pbikrKCJib3R0b20iPT09ci5zaWRlP3IuX2RlcHRoOjApK2wuX29mZnNldFNoaWZ0K20uZXh0cmFQYWQpO2EuYXR0cigidHJhbnNmb3JtIixzKFMsRSkpLGwuX3JsPW8uc2ltcGxlTWFwKGwucmFuZ2Usci5yMmwpO3ZhciBMPWwuX3JsWzBdLEM9bC5fcmxbMV0sUD1DLUw7aWYobC5wMmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQvbC5fd2lkdGgqUCtMfSxsLmQycD1mdW5jdGlvbih0KXtyZXR1cm4odC1MKS9QKmwuX3dpZHRofSxyLnJhbmdlYnJlYWtzKXt2YXIgST1yLmxvY2F0ZUJyZWFrcyhMLEMpO2lmKEkubGVuZ3RoKXt2YXIgTyx6LEQ9MDtmb3IoTz0wO088SS5sZW5ndGg7TysrKUQrPSh6PUlbT10pLm1heC16Lm1pbjt2YXIgUj1sLl93aWR0aC8oQy1MLUQpLEY9Wy1SKkxdO2ZvcihPPTA7TzxJLmxlbmd0aDtPKyspej1JW09dLEYucHVzaChGW0YubGVuZ3RoLTFdLVIqKHoubWF4LXoubWluKSk7Zm9yKGwuZDJwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1GWzBdLHI9MDtyPEkubGVuZ3RoO3IrKyl7dmFyIG49SVtyXTtpZih0Pj1uLm1heCllPUZbcisxXTtlbHNlIGlmKHQ8bi5taW4pYnJlYWt9cmV0dXJuIGUrUip0fSxPPTA7TzxJLmxlbmd0aDtPKyspKHo9SVtPXSkucG1pbj1sLmQycCh6Lm1pbiksei5wbWF4PWwuZDJwKHoubWF4KTtsLnAyZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9RlswXSxyPTA7cjxJLmxlbmd0aDtyKyspe3ZhciBuPUlbcl07aWYodD49bi5wbWF4KWU9RltyKzFdO2Vsc2UgaWYodDxuLnBtaW4pYnJlYWt9cmV0dXJuKHQtZSkvUn19fWlmKCJtYXRjaCIhPT1mLnJhbmdlbW9kZSl7dmFyIEI9Yy5yMmwoZi5yYW5nZVswXSksTj1jLnIybChmLnJhbmdlWzFdKS1CO2wuZDJwT3BwQXhpcz1mdW5jdGlvbih0KXtyZXR1cm4odC1CKS9OKmwuX2hlaWdodH19YS5jYWxsKGcsdCxyLGwpLmNhbGwodix0LHIsbCkuY2FsbCh5LHQscixsKS5jYWxsKHgsdCxyLGwsZikuY2FsbChiLHQscixsKS5jYWxsKF8sdCxyLGwpLGZ1bmN0aW9uKHQsZSxyLGEpe2lmKGUuX2NvbnRleHQuc3RhdGljUGxvdClyZXR1cm47dmFyIHM9dC5zZWxlY3QoInJlY3QuIittLnNsaWRlQm94Q2xhc3NOYW1lKS5ub2RlKCksbD10LnNlbGVjdCgicmVjdC4iK20uZ3JhYkFyZWFNaW5DbGFzc05hbWUpLm5vZGUoKSxjPXQuc2VsZWN0KCJyZWN0LiIrbS5ncmFiQXJlYU1heENsYXNzTmFtZSkubm9kZSgpO2Z1bmN0aW9uIHUoKXt2YXIgdT1uLmV2ZW50LGY9dS50YXJnZXQsaD11LmNsaWVudFh8fHUudG91Y2hlc1swXS5jbGllbnRYLG09aC10Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LGc9YS5kMnAoci5fcmxbMF0pLHY9YS5kMnAoci5fcmxbMV0pLHk9cC5jb3ZlclNsaXAoKTtmdW5jdGlvbiB4KHQpe3ZhciB1LHAseCxiPSsodC5jbGllbnRYfHx0LnRvdWNoZXNbMF0uY2xpZW50WCktaDtzd2l0Y2goZil7Y2FzZSBzOng9ImV3LXJlc2l6ZSIsdT1nK2IscD12K2I7YnJlYWs7Y2FzZSBsOng9ImNvbC1yZXNpemUiLHU9ZytiLHA9djticmVhaztjYXNlIGM6eD0iY29sLXJlc2l6ZSIsdT1nLHA9ditiO2JyZWFrO2RlZmF1bHQ6eD0iZXctcmVzaXplIix1PW0scD1tK2J9aWYocDx1KXt2YXIgXz1wO3A9dSx1PV99YS5fcGl4ZWxNaW49dSxhLl9waXhlbE1heD1wLGQobi5zZWxlY3QoeSkseCksZnVuY3Rpb24odCxlLHIsbil7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gci5sMnIoby5jb25zdHJhaW4odCxuLl9ybFswXSxuLl9ybFsxXSkpfXZhciBzPWEobi5wMmQobi5fcGl4ZWxNaW4pKSxsPWEobi5wMmQobi5fcGl4ZWxNYXgpKTt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe2kuY2FsbCgiX2d1aVJlbGF5b3V0IixlLHIuX25hbWUrIi5yYW5nZSIsW3MsbF0pfSkpfSgwLGUscixhKX1mdW5jdGlvbiBiKCl7eS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHgpLHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsYiksdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHgpLHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLGIpLG8ucmVtb3ZlRWxlbWVudCh5KX10aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIseCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsYikseS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHgpLHkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsYil9dC5vbigibW91c2Vkb3duIix1KSx0Lm9uKCJ0b3VjaHN0YXJ0Iix1KX0oYSx0LHIsbCksZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBsPW0uaGFuZGxlV2lkdGgvMjtmdW5jdGlvbiBjKHQpe3JldHVybiBvLmNvbnN0cmFpbih0LDAsbi5fd2lkdGgpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIG8uY29uc3RyYWluKHQsMCxuLl9oZWlnaHQpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIG8uY29uc3RyYWluKHQsLWwsbi5fd2lkdGgrbCl9dmFyIGg9YyhuLmQycChyLl9ybFswXSkpLHA9YyhuLmQycChyLl9ybFsxXSkpO2lmKHQuc2VsZWN0KCJyZWN0LiIrbS5zbGlkZUJveENsYXNzTmFtZSkuYXR0cigieCIsaCkuYXR0cigid2lkdGgiLHAtaCksdC5zZWxlY3QoInJlY3QuIittLm1hc2tNaW5DbGFzc05hbWUpLmF0dHIoIndpZHRoIixoKSx0LnNlbGVjdCgicmVjdC4iK20ubWFza01heENsYXNzTmFtZSkuYXR0cigieCIscCkuYXR0cigid2lkdGgiLG4uX3dpZHRoLXApLCJtYXRjaCIhPT1hLnJhbmdlbW9kZSl7dmFyIGQ9bi5faGVpZ2h0LXUobi5kMnBPcHBBeGlzKGkuX3JsWzFdKSksZz1uLl9oZWlnaHQtdShuLmQycE9wcEF4aXMoaS5fcmxbMF0pKTt0LnNlbGVjdCgicmVjdC4iK20ubWFza01pbk9wcEF4aXNDbGFzc05hbWUpLmF0dHIoIngiLGgpLmF0dHIoImhlaWdodCIsZCkuYXR0cigid2lkdGgiLHAtaCksdC5zZWxlY3QoInJlY3QuIittLm1hc2tNYXhPcHBBeGlzQ2xhc3NOYW1lKS5hdHRyKCJ4IixoKS5hdHRyKCJ5IixnKS5hdHRyKCJoZWlnaHQiLG4uX2hlaWdodC1nKS5hdHRyKCJ3aWR0aCIscC1oKSx0LnNlbGVjdCgicmVjdC4iK20uc2xpZGVCb3hDbGFzc05hbWUpLmF0dHIoInkiLGQpLmF0dHIoImhlaWdodCIsZy1kKX12YXIgdj1NYXRoLnJvdW5kKGYoaC1sKSktLjUseT1NYXRoLnJvdW5kKGYocC1sKSkrLjU7dC5zZWxlY3QoImcuIittLmdyYWJiZXJNaW5DbGFzc05hbWUpLmF0dHIoInRyYW5zZm9ybSIscyh2LC41KSksdC5zZWxlY3QoImcuIittLmdyYWJiZXJNYXhDbGFzc05hbWUpLmF0dHIoInRyYW5zZm9ybSIscyh5LC41KSl9KGEsMCxyLGwsYyxmKSwiYm90dG9tIj09PXIuc2lkZSYmdS5kcmF3KHQsci5faWQrInRpdGxlIix7cHJvcENvbnRhaW5lcjpyLHByb3BOYW1lOnIuX25hbWUrIi50aXRsZSIscGxhY2Vob2xkZXI6ZS5fZGZsdFRpdGxlLngsYXR0cmlidXRlczp7eDpyLl9vZmZzZXQrci5fbGVuZ3RoLzIseTpFK2wuX2hlaWdodCtsLl9vZmZzZXRTaGlmdCsxMCsxLjUqci50aXRsZS5mb250LnNpemUsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KX0pKSl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3OTcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODQxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwiLi4vLi4vcGxvdHMvcGxvdHMiOjg5MCwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vY29sb3IiOjYzOSwiLi4vZHJhZ2VsZW1lbnQiOjY1OCwiLi4vZHJhd2luZyI6NjYxLCIuLi90aXRsZXMiOjczNywiLi9jb25zdGFudHMiOjcxMywiQHBsb3RseS9kMyI6NTh9XSw3MTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksaT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxhPXQoIi4vY29uc3RhbnRzIiksbz10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTElORV9TUEFDSU5HLHM9YS5uYW1lO2Z1bmN0aW9uIGwodCl7dmFyIGU9dCYmdFtzXTtyZXR1cm4gZSYmZS52aXNpYmxlfXIuaXNWaXNpYmxlPWwsci5tYWtlRGF0YT1mdW5jdGlvbih0KXt2YXIgZT1uLmxpc3Qoe19mdWxsTGF5b3V0OnR9LCJ4IiwhMCkscj10Lm1hcmdpbixpPVtdO2lmKCF0Ll9oYXMoImdsMmQiKSlmb3IodmFyIGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89ZVthXTtpZihsKG8pKXtpLnB1c2gobyk7dmFyIGM9b1tzXTtjLl9pZD1zK28uX2lkLGMuX2hlaWdodD0odC5oZWlnaHQtci5iLXIudCkqYy50aGlja25lc3MsYy5fb2Zmc2V0U2hpZnQ9TWF0aC5mbG9vcihjLmJvcmRlcndpZHRoLzIpfX10Ll9yYW5nZVNsaWRlckRhdGE9aX0sci5hdXRvTWFyZ2luT3B0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsbj1lW3NdLGw9ZS5faWQuY2hhckF0KDApLGM9MCx1PTA7ImJvdHRvbSI9PT1lLnNpZGUmJihjPWUuX2RlcHRoLGUudGl0bGUudGV4dCE9PXIuX2RmbHRUaXRsZVtsXSYmKHU9MS41KmUudGl0bGUuZm9udC5zaXplKzEwK24uX29mZnNldFNoaWZ0LHUrPShlLnRpdGxlLnRleHQubWF0Y2goaS5CUl9UQUdfQUxMKXx8W10pLmxlbmd0aCplLnRpdGxlLmZvbnQuc2l6ZSpvKSk7cmV0dXJue3g6MCx5OmUuX2NvdW50ZXJEb21haW5NaW4sbDowLHI6MCx0OjAsYjpuLl9oZWlnaHQrYytNYXRoLm1heChyLm1hcmdpbi5iLHUpLHBhZDphLmV4dHJhUGFkKzIqbi5fb2Zmc2V0U2hpZnR9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3NDQsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwiLi9jb25zdGFudHMiOjcxM31dLDcxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi9vcHBheGlzX2F0dHJpYnV0ZXMiKSxvPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJyYW5nZXNsaWRlciIsc2NoZW1hOntzdWJwbG90czp7eGF4aXM6e3Jhbmdlc2xpZGVyOm4uZXh0ZW5kRmxhdCh7fSxpLHt5YXhpczphfSl9fX0sbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxoYW5kbGVEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsY0F1dG9yYW5nZTp0KCIuL2NhbGNfYXV0b3JhbmdlIiksZHJhdzp0KCIuL2RyYXciKSxpc1Zpc2libGU6by5pc1Zpc2libGUsbWFrZURhdGE6by5tYWtlRGF0YSxhdXRvTWFyZ2luT3B0czpvLmF1dG9NYXJnaW5PcHRzfX0seyIuLi8uLi9saWIiOjc3NiwiLi9hdHRyaWJ1dGVzIjo3MTEsIi4vY2FsY19hdXRvcmFuZ2UiOjcxMiwiLi9kZWZhdWx0cyI6NzE0LCIuL2RyYXciOjcxNSwiLi9oZWxwZXJzIjo3MTYsIi4vb3BwYXhpc19hdHRyaWJ1dGVzIjo3MTh9XSw3MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtfaXNTdWJwbG90T2JqOiEwLHJhbmdlbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImZpeGVkIiwibWF0Y2giXSxkZmx0OiJtYXRjaCIsZWRpdFR5cGU6ImNhbGMifSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QifV0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyJ9fSx7fV0sNzE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiKS5saW5lLGE9dCgiLi4vZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5O3QoIi4uLy4uL2NvbnN0YW50cy9heGlzX3BsYWNlYWJsZV9vYmplY3RzIik7ZS5leHBvcnRzPXMoInNoYXBlIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjaXJjbGUiLCJyZWN0IiwicGF0aCIsImxpbmUiXSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxsYXllcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYmVsb3ciLCJhYm92ZSJdLGRmbHQ6ImFib3ZlIixlZGl0VHlwZToiYXJyYXlkcmF3In0seHJlZjpvKHt9LG4ueHJlZix7fSkseHNpemVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzY2FsZWQiLCJwaXhlbCJdLGRmbHQ6InNjYWxlZCIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seGFuY2hvcjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx4MDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx4MTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5cmVmOm8oe30sbi55cmVmLHt9KSx5c2l6ZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNjYWxlZCIsInBpeGVsIl0sZGZsdDoic2NhbGVkIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5YW5jaG9yOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHkwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHkxOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHBhdGg6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGxpbmU6e2NvbG9yOm8oe30saS5jb2xvcix7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSx3aWR0aDpvKHt9LGkud2lkdGgse2VkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9KSxkYXNoOm8oe30sYSx7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIixlZGl0VHlwZToiYXJyYXlkcmF3In0sZmlsbHJ1bGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImV2ZW5vZGQiLCJub256ZXJvIl0sZGZsdDoiZXZlbm9kZCIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGVkaXRhYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGVkaXRUeXBlOiJhcnJheWRyYXcifSl9LHsiLi4vLi4vY29uc3RhbnRzL2F4aXNfcGxhY2VhYmxlX29iamVjdHMiOjc0NSwiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTYsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExOTEsIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiOjYyMiwiLi4vZHJhd2luZy9hdHRyaWJ1dGVzIjo2NjB9XSw3MjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi9jb25zdGFudHMiKSxvPXQoIi4vaGVscGVycyIpO2Z1bmN0aW9uIHModCl7cmV0dXJuIGModC5saW5lLndpZHRoLHQueHNpemVtb2RlLHQueDAsdC54MSx0LnBhdGgsITEpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIGModC5saW5lLndpZHRoLHQueXNpemVtb2RlLHQueTAsdC55MSx0LnBhdGgsITApfWZ1bmN0aW9uIGModCxlLHIsaSxzLGwpe3ZhciBjPXQvMix1PWw7aWYoInBpeGVsIj09PWUpe3ZhciBmPXM/by5leHRyYWN0UGF0aENvb3JkcyhzLGw/YS5wYXJhbUlzWTphLnBhcmFtSXNYKTpbcixpXSxoPW4uYWdnTnVtcyhNYXRoLm1heCxudWxsLGYpLHA9bi5hZ2dOdW1zKE1hdGgubWluLG51bGwsZiksZD1wPDA/TWF0aC5hYnMocCkrYzpjLG09aD4wP2grYzpjO3JldHVybntwcGFkOmMscHBhZHBsdXM6dT9kOm0scHBhZG1pbnVzOnU/bTpkfX1yZXR1cm57cHBhZDpjfX1mdW5jdGlvbiB1KHQsZSxyLG4saSl7dmFyIHM9ImNhdGVnb3J5Ij09PXQudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09dC50eXBlP3QucjJjOnQuZDJjO2lmKHZvaWQgMCE9PWUpcmV0dXJuW3MoZSkscyhyKV07aWYobil7dmFyIGwsYyx1LGYsaD0xLzAscD0tMS8wLGQ9bi5tYXRjaChhLnNlZ21lbnRSRSk7Zm9yKCJkYXRlIj09PXQudHlwZSYmKHM9by5kZWNvZGVEYXRlKHMpKSxsPTA7bDxkLmxlbmd0aDtsKyspdm9pZCAwIT09KGM9aVtkW2xdLmNoYXJBdCgwKV0uZHJhd24pJiYoISh1PWRbbF0uc3Vic3RyKDEpLm1hdGNoKGEucGFyYW1SRSkpfHx1Lmxlbmd0aDxjfHwoKGY9cyh1W2NdKSk8aCYmKGg9ZiksZj5wJiYocD1mKSkpO3JldHVybiBwPj1oP1toLHBdOnZvaWQgMH19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1uLmZpbHRlclZpc2libGUoZS5zaGFwZXMpO2lmKHIubGVuZ3RoJiZ0Ll9mdWxsRGF0YS5sZW5ndGgpZm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBjLGYsaD1yW29dO2guX2V4dHJlbWVzPXt9O3ZhciBwPWkuZ2V0UmVmVHlwZShoLnhyZWYpLGQ9aS5nZXRSZWZUeXBlKGgueXJlZik7aWYoInBhcGVyIiE9PWgueHJlZiYmImRvbWFpbiIhPT1wKXt2YXIgbT0icGl4ZWwiPT09aC54c2l6ZW1vZGU/aC54YW5jaG9yOmgueDAsZz0icGl4ZWwiPT09aC54c2l6ZW1vZGU/aC54YW5jaG9yOmgueDE7KGY9dShjPWkuZ2V0RnJvbUlkKHQsaC54cmVmKSxtLGcsaC5wYXRoLGEucGFyYW1Jc1gpKSYmKGguX2V4dHJlbWVzW2MuX2lkXT1pLmZpbmRFeHRyZW1lcyhjLGYscyhoKSkpfWlmKCJwYXBlciIhPT1oLnlyZWYmJiJkb21haW4iIT09ZCl7dmFyIHY9InBpeGVsIj09PWgueXNpemVtb2RlP2gueWFuY2hvcjpoLnkwLHk9InBpeGVsIj09PWgueXNpemVtb2RlP2gueWFuY2hvcjpoLnkxOyhmPXUoYz1pLmdldEZyb21JZCh0LGgueXJlZiksdix5LGgucGF0aCxhLnBhcmFtSXNZKSkmJihoLl9leHRyZW1lc1tjLl9pZF09aS5maW5kRXh0cmVtZXMoYyxmLGwoaCkpKX19fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi9jb25zdGFudHMiOjcyMSwiLi9oZWxwZXJzIjo3MzB9XSw3MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzZWdtZW50UkU6L1tNTEhWUUNUU1pdW15NTEhWUUNUU1pdKi9nLHBhcmFtUkU6L1teXHMsXSsvZyxwYXJhbUlzWDp7TTp7MDohMCxkcmF3bjowfSxMOnswOiEwLGRyYXduOjB9LEg6ezA6ITAsZHJhd246MH0sVjp7fSxROnswOiEwLDI6ITAsZHJhd246Mn0sQzp7MDohMCwyOiEwLDQ6ITAsZHJhd246NH0sVDp7MDohMCxkcmF3bjowfSxTOnswOiEwLDI6ITAsZHJhd246Mn0sWjp7fX0scGFyYW1Jc1k6e006ezE6ITAsZHJhd246MX0sTDp7MTohMCxkcmF3bjoxfSxIOnt9LFY6ezA6ITAsZHJhd246MH0sUTp7MTohMCwzOiEwLGRyYXduOjN9LEM6ezE6ITAsMzohMCw1OiEwLGRyYXduOjV9LFQ6ezE6ITAsZHJhd246MX0sUzp7MTohMCwzOiEwLGRyYXduOjV9LFo6e319LG51bVBhcmFtczp7TToyLEw6MixIOjEsVjoxLFE6NCxDOjYsVDoyLFM6NCxaOjB9fX0se31dLDcyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpLHM9dCgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gbCh0LGUscil7ZnVuY3Rpb24gYShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWlmKGEoInZpc2libGUiKSl7dmFyIGw9YSgicGF0aCIpLGM9YSgidHlwZSIsbD8icGF0aCI6InJlY3QiKTsicGF0aCIhPT1lLnR5cGUmJmRlbGV0ZSBlLnBhdGgsYSgiZWRpdGFibGUiKSxhKCJsYXllciIpLGEoIm9wYWNpdHkiKSxhKCJmaWxsY29sb3IiKSxhKCJmaWxscnVsZSIpLGEoImxpbmUud2lkdGgiKSYmKGEoImxpbmUuY29sb3IiKSxhKCJsaW5lLmRhc2giKSk7Zm9yKHZhciB1PWEoInhzaXplbW9kZSIpLGY9YSgieXNpemVtb2RlIiksaD1bIngiLCJ5Il0scD0wO3A8MjtwKyspe3ZhciBkLG0sZyx2PWhbcF0seT12KyJhbmNob3IiLHg9IngiPT09dj91OmYsYj17X2Z1bGxMYXlvdXQ6cn0sXz1pLmNvZXJjZVJlZih0LGUsYix2LHZvaWQgMCwicGFwZXIiKTtpZigicmFuZ2UiPT09aS5nZXRSZWZUeXBlKF8pPygoZD1pLmdldEZyb21JZChiLF8pKS5fc2hhcGVJbmRpY2VzLnB1c2goZS5faW5kZXgpLGc9cy5yYW5nZVRvU2hhcGVQb3NpdGlvbihkKSxtPXMuc2hhcGVQb3NpdGlvblRvUmFuZ2UoZCkpOm09Zz1uLmlkZW50aXR5LCJwYXRoIiE9PWMpe3ZhciB3PXYrIjAiLFQ9disiMSIsaz10W3ddLEE9dFtUXTt0W3ddPW0odFt3XSwhMCksdFtUXT1tKHRbVF0sITApLCJwaXhlbCI9PT14PyhhKHcsMCksYShULDEwKSk6KGkuY29lcmNlUG9zaXRpb24oZSxiLGEsXyx3LC4yNSksaS5jb2VyY2VQb3NpdGlvbihlLGIsYSxfLFQsLjc1KSksZVt3XT1nKGVbd10pLGVbVF09ZyhlW1RdKSx0W3ddPWssdFtUXT1BfWlmKCJwaXhlbCI9PT14KXt2YXIgTT10W3ldO3RbeV09bSh0W3ldLCEwKSxpLmNvZXJjZVBvc2l0aW9uKGUsYixhLF8seSwuMjUpLGVbeV09ZyhlW3ldKSx0W3ldPU19fSJwYXRoIj09PWM/YSgicGF0aCIpOm4ubm9uZU9yQWxsKHQsZSxbIngwIiwieDEiLCJ5MCIsInkxIl0pfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXthKHQsZSx7bmFtZToic2hhcGVzIixoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo4MjIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4vYXR0cmlidXRlcyI6NzE5LCIuL2hlbHBlcnMiOjczMH1dLDcyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi9kcmF3X25ld3NoYXBlL2hlbHBlcnMiKS5yZWFkUGF0aHMscz10KCIuL2RyYXdfbmV3c2hhcGUvZGlzcGxheV9vdXRsaW5lcyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIikuY2xlYXJPdXRsaW5lQ29udHJvbGxlcnMsYz10KCIuLi9jb2xvciIpLHU9dCgiLi4vZHJhd2luZyIpLGY9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yLGg9dCgiLi4vZHJhZ2VsZW1lbnQiKSxwPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxkPXQoIi4vY29uc3RhbnRzIiksbT10KCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBnKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7Zm9yKHZhciByIGluIGUuX3NoYXBlVXBwZXJMYXllci5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKSxlLl9zaGFwZUxvd2VyTGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCksZS5fcGxvdHMpe3ZhciBuPWUuX3Bsb3RzW3JdLnNoYXBlbGF5ZXI7biYmbi5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKX1mb3IodmFyIGk9MDtpPGUuc2hhcGVzLmxlbmd0aDtpKyspZS5zaGFwZXNbaV0udmlzaWJsZSYmeCh0LGkpfWZ1bmN0aW9uIHYodCl7cmV0dXJuISF0Ll9mdWxsTGF5b3V0Ll9kcmF3aW5nfWZ1bmN0aW9uIHkodCl7cmV0dXJuIXQuX2NvbnRleHQuZWRpdHMuc2hhcGVQb3NpdGlvbn1mdW5jdGlvbiB4KHQsZSl7dC5fZnVsbExheW91dC5fcGFwZXJkaXYuc2VsZWN0QWxsKCcuc2hhcGVsYXllciBbZGF0YS1pbmRleD0iJytlKyciXScpLnJlbW92ZSgpO3ZhciByPW0ubWFrZU9wdGlvbnNBbmRQbG90aW5mbyh0LGUpLGw9ci5vcHRpb25zLHg9ci5wbG90aW5mbztpZihsLl9pbnB1dCYmITEhPT1sLnZpc2libGUpaWYoImJlbG93IiE9PWwubGF5ZXIpayh0Ll9mdWxsTGF5b3V0Ll9zaGFwZVVwcGVyTGF5ZXIpO2Vsc2UgaWYoInBhcGVyIj09PWwueHJlZnx8InBhcGVyIj09PWwueXJlZilrKHQuX2Z1bGxMYXlvdXQuX3NoYXBlTG93ZXJMYXllcik7ZWxzZXtpZih4Ll9oYWRQbG90aW5mbylrKCh4Lm1haW5wbG90aW5mb3x8eCkuc2hhcGVsYXllcik7ZWxzZSBrKHQuX2Z1bGxMYXlvdXQuX3NoYXBlTG93ZXJMYXllcil9ZnVuY3Rpb24gayhyKXt2YXIgaz1fKHQsbCksQT17ImRhdGEtaW5kZXgiOmUsImZpbGwtcnVsZSI6bC5maWxscnVsZSxkOmt9LE09bC5vcGFjaXR5LFM9bC5maWxsY29sb3IsRT1sLmxpbmUud2lkdGg/bC5saW5lLmNvbG9yOiJyZ2JhKDAsMCwwLDApIixMPWwubGluZS53aWR0aCxDPWwubGluZS5kYXNoO0x8fCEwIT09bC5lZGl0YWJsZXx8KEw9NSxDPSJzb2xpZCIpO3ZhciBQPSJaIiE9PWtbay5sZW5ndGgtMV0sST15KHQpJiZsLmVkaXRhYmxlJiZ0Ll9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4PT09ZTtJJiYoUz1QPyJyZ2JhKDAsMCwwLDApIjp0Ll9mdWxsTGF5b3V0LmFjdGl2ZXNoYXBlLmZpbGxjb2xvcixNPXQuX2Z1bGxMYXlvdXQuYWN0aXZlc2hhcGUub3BhY2l0eSk7dmFyIE8sej1yLmFwcGVuZCgicGF0aCIpLmF0dHIoQSkuc3R5bGUoIm9wYWNpdHkiLE0pLmNhbGwoYy5zdHJva2UsRSkuY2FsbChjLmZpbGwsUykuY2FsbCh1LmRhc2hMaW5lLEMsTCk7aWYoYih6LHQsbCksKEl8fHQuX2NvbnRleHQuZWRpdHMuc2hhcGVQb3NpdGlvbikmJihPPWYodC5sYXlvdXQsInNoYXBlcyIsbCkpLEkpe3ouc3R5bGUoe2N1cnNvcjoibW92ZSJ9KTt2YXIgRD17ZWxlbWVudDp6Lm5vZGUoKSxwbG90aW5mbzp4LGdkOnQsZWRpdEhlbHBlcnM6Tyxpc0FjdGl2ZVNoYXBlOiEwfSxSPW8oayx0KTtzKFIseixEKX1lbHNlIHQuX2NvbnRleHQuZWRpdHMuc2hhcGVQb3NpdGlvbj9mdW5jdGlvbih0LGUscixvLHMsbCl7dmFyIGMsZixnLHkseCxULGssQSxNLFMsRSxMLEMsUCxJLE8sej0icGl4ZWwiPT09ci54c2l6ZW1vZGUsRD0icGl4ZWwiPT09ci55c2l6ZW1vZGUsUj0ibGluZSI9PT1yLnR5cGUsRj0icGF0aCI9PT1yLnR5cGUsQj1sLm1vZGlmeUl0ZW0sTj1hLmdldEZyb21JZCh0LHIueHJlZiksaj1hLmdldFJlZlR5cGUoci54cmVmKSxVPWEuZ2V0RnJvbUlkKHQsci55cmVmKSxWPWEuZ2V0UmVmVHlwZShyLnlyZWYpLEg9bS5nZXREYXRhVG9QaXhlbCh0LE4sITEsaikscT1tLmdldERhdGFUb1BpeGVsKHQsVSwhMCxWKSxHPW0uZ2V0UGl4ZWxUb0RhdGEodCxOLCExLGopLFk9bS5nZXRQaXhlbFRvRGF0YSh0LFUsITAsViksVz1SP2Z1bmN0aW9uKCl7dmFyIHQ9TWF0aC5tYXgoci5saW5lLndpZHRoLDEwKSxuPXMuYXBwZW5kKCJnIikuYXR0cigiZGF0YS1pbmRleCIsbyk7bi5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixlLmF0dHIoImQiKSkuc3R5bGUoe2N1cnNvcjoibW92ZSIsInN0cm9rZS13aWR0aCI6dCwic3Ryb2tlLW9wYWNpdHkiOiIwIn0pO3ZhciBpPXsiZmlsbC1vcGFjaXR5IjoiMCJ9LGE9TWF0aC5tYXgodC8yLDEwKTtyZXR1cm4gbi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoeyJkYXRhLWxpbmUtcG9pbnQiOiJzdGFydC1wb2ludCIsY3g6ej9IKHIueGFuY2hvcikrci54MDpIKHIueDApLGN5OkQ/cShyLnlhbmNob3IpLXIueTA6cShyLnkwKSxyOmF9KS5zdHlsZShpKS5jbGFzc2VkKCJjdXJzb3ItZ3JhYiIsITApLG4uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKHsiZGF0YS1saW5lLXBvaW50IjoiZW5kLXBvaW50IixjeDp6P0goci54YW5jaG9yKStyLngxOkgoci54MSksY3k6RD9xKHIueWFuY2hvciktci55MTpxKHIueTEpLHI6YX0pLnN0eWxlKGkpLmNsYXNzZWQoImN1cnNvci1ncmFiIiwhMCksbn0oKTplLFg9e2VsZW1lbnQ6Vy5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24obil7aWYodih0KSlyZXR1cm47eiYmKHg9SChyLnhhbmNob3IpKTtEJiYoVD1xKHIueWFuY2hvcikpOyJwYXRoIj09PXIudHlwZT9JPXIucGF0aDooYz16P3IueDA6SChyLngwKSxmPUQ/ci55MDpxKHIueTApLGc9ej9yLngxOkgoci54MSkseT1EP3IueTE6cShyLnkxKSk7YzxnPyhNPWMsQz0ieDAiLFM9ZyxQPSJ4MSIpOihNPWcsQz0ieDEiLFM9YyxQPSJ4MCIpOyFEJiZmPHl8fEQmJmY+eT8oaz1mLEU9InkwIixBPXksTD0ieTEiKTooaz15LEU9InkxIixBPWYsTD0ieTAiKTtaKG4pLFEocyxyKSxmdW5jdGlvbih0LGUscil7dmFyIG49ZS54cmVmLGk9ZS55cmVmLG89YS5nZXRGcm9tSWQocixuKSxzPWEuZ2V0RnJvbUlkKHIsaSksbD0iIjsicGFwZXIiPT09bnx8by5hdXRvcmFuZ2V8fChsKz1uKTsicGFwZXIiPT09aXx8cy5hdXRvcmFuZ2V8fChsKz1pKTt1LnNldENsaXBVcmwodCxsPyJjbGlwIityLl9mdWxsTGF5b3V0Ll91aWQrbDpudWxsLHIpfShlLHIsdCksWC5tb3ZlRm49Im1vdmUiPT09Tz9KOkssWC5hbHRLZXk9bi5hbHRLZXl9LGRvbmVGbjpmdW5jdGlvbigpe2lmKHYodCkpcmV0dXJuO3AoZSksJChzKSxiKGUsdCxyKSxuLmNhbGwoIl9ndWlSZWxheW91dCIsdCxsLmdldFVwZGF0ZU9iaigpKX0sY2xpY2tGbjpmdW5jdGlvbigpe2lmKHYodCkpcmV0dXJuOyQocyl9fTtmdW5jdGlvbiBaKHIpe2lmKHYodCkpTz1udWxsO2Vsc2UgaWYoUilPPSJwYXRoIj09PXIudGFyZ2V0LnRhZ05hbWU/Im1vdmUiOiJzdGFydC1wb2ludCI9PT1yLnRhcmdldC5hdHRyaWJ1dGVzWyJkYXRhLWxpbmUtcG9pbnQiXS52YWx1ZT8icmVzaXplLW92ZXItc3RhcnQtcG9pbnQiOiJyZXNpemUtb3Zlci1lbmQtcG9pbnQiO2Vsc2V7dmFyIG49WC5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9bi5yaWdodC1uLmxlZnQsYT1uLmJvdHRvbS1uLnRvcCxvPXIuY2xpZW50WC1uLmxlZnQscz1yLmNsaWVudFktbi50b3AsbD0hRiYmaT4xMCYmYT4xMCYmIXIuc2hpZnRLZXk/aC5nZXRDdXJzb3Ioby9pLDEtcy9hKToibW92ZSI7cChlLGwpLE89bC5zcGxpdCgiLSIpWzBdfX1mdW5jdGlvbiBKKG4saSl7aWYoInBhdGgiPT09ci50eXBlKXt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gdH0sbz1hLGw9YTt6P0IoInhhbmNob3IiLHIueGFuY2hvcj1HKHgrbikpOihvPWZ1bmN0aW9uKHQpe3JldHVybiBHKEgodCkrbil9LE4mJiJkYXRlIj09PU4udHlwZSYmKG89bS5lbmNvZGVEYXRlKG8pKSksRD9CKCJ5YW5jaG9yIixyLnlhbmNob3I9WShUK2kpKToobD1mdW5jdGlvbih0KXtyZXR1cm4gWShxKHQpK2kpfSxVJiYiZGF0ZSI9PT1VLnR5cGUmJihsPW0uZW5jb2RlRGF0ZShsKSkpLEIoInBhdGgiLHIucGF0aD13KEksbyxsKSl9ZWxzZSB6P0IoInhhbmNob3IiLHIueGFuY2hvcj1HKHgrbikpOihCKCJ4MCIsci54MD1HKGMrbikpLEIoIngxIixyLngxPUcoZytuKSkpLEQ/QigieWFuY2hvciIsci55YW5jaG9yPVkoVCtpKSk6KEIoInkwIixyLnkwPVkoZitpKSksQigieTEiLHIueTE9WSh5K2kpKSk7ZS5hdHRyKCJkIixfKHQscikpLFEocyxyKX1mdW5jdGlvbiBLKG4saSl7aWYoRil7dmFyIGE9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LG89YSxsPWE7ej9CKCJ4YW5jaG9yIixyLnhhbmNob3I9Ryh4K24pKToobz1mdW5jdGlvbih0KXtyZXR1cm4gRyhIKHQpK24pfSxOJiYiZGF0ZSI9PT1OLnR5cGUmJihvPW0uZW5jb2RlRGF0ZShvKSkpLEQ/QigieWFuY2hvciIsci55YW5jaG9yPVkoVCtpKSk6KGw9ZnVuY3Rpb24odCl7cmV0dXJuIFkocSh0KStpKX0sVSYmImRhdGUiPT09VS50eXBlJiYobD1tLmVuY29kZURhdGUobCkpKSxCKCJwYXRoIixyLnBhdGg9dyhJLG8sbCkpfWVsc2UgaWYoUil7aWYoInJlc2l6ZS1vdmVyLXN0YXJ0LXBvaW50Ij09PU8pe3ZhciB1PWMrbixoPUQ/Zi1pOmYraTtCKCJ4MCIsci54MD16P3U6Ryh1KSksQigieTAiLHIueTA9RD9oOlkoaCkpfWVsc2UgaWYoInJlc2l6ZS1vdmVyLWVuZC1wb2ludCI9PT1PKXt2YXIgcD1nK24sZD1EP3ktaTp5K2k7QigieDEiLHIueDE9ej9wOkcocCkpLEIoInkxIixyLnkxPUQ/ZDpZKGQpKX19ZWxzZXt2YXIgdj1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PU8uaW5kZXhPZih0KX0sYj12KCJuIiksaj12KCJzIiksVj12KCJ3IiksVz12KCJlIiksWD1iP2sraTprLFo9aj9BK2k6QSxKPVY/TStuOk0sSz1XP1MrbjpTO0QmJihiJiYoWD1rLWkpLGomJihaPUEtaSkpLCghRCYmWi1YPjEwfHxEJiZYLVo+MTApJiYoQihFLHJbRV09RD9YOlkoWCkpLEIoTCxyW0xdPUQ/WjpZKFopKSksSy1KPjEwJiYoQihDLHJbQ109ej9KOkcoSikpLEIoUCxyW1BdPXo/SzpHKEspKSl9ZS5hdHRyKCJkIixfKHQscikpLFEocyxyKX1mdW5jdGlvbiBRKHQsZSl7KHp8fEQpJiZmdW5jdGlvbigpe3ZhciByPSJwYXRoIiE9PWUudHlwZSxuPXQuc2VsZWN0QWxsKCIudmlzdWFsLWN1ZSIpLmRhdGEoWzBdKTtuLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cih7ZmlsbDoiI2ZmZiIsImZpbGwtcnVsZSI6ImV2ZW5vZGQiLHN0cm9rZToiIzAwMCIsInN0cm9rZS13aWR0aCI6MX0pLmNsYXNzZWQoInZpc3VhbC1jdWUiLCEwKTt2YXIgYT1IKHo/ZS54YW5jaG9yOmkubWlkUmFuZ2Uocj9bZS54MCxlLngxXTptLmV4dHJhY3RQYXRoQ29vcmRzKGUucGF0aCxkLnBhcmFtSXNYKSkpLG89cShEP2UueWFuY2hvcjppLm1pZFJhbmdlKHI/W2UueTAsZS55MV06bS5leHRyYWN0UGF0aENvb3JkcyhlLnBhdGgsZC5wYXJhbUlzWSkpKTtpZihhPW0ucm91bmRQb3NpdGlvbkZvclNoYXJwU3Ryb2tlUmVuZGVyaW5nKGEsMSksbz1tLnJvdW5kUG9zaXRpb25Gb3JTaGFycFN0cm9rZVJlbmRlcmluZyhvLDEpLHomJkQpe3ZhciBzPSJNIisoYS0xLTEpKyIsIisoby0xLTEpKyJoLTh2Mmg4IHY4aDJ2LTggaDh2LTJoLTggdi04aC0yIFoiO24uYXR0cigiZCIscyl9ZWxzZSBpZih6KXt2YXIgbD0iTSIrKGEtMS0xKSsiLCIrKG8tOS0xKSsidjE4IGgyIHYtMTggWiI7bi5hdHRyKCJkIixsKX1lbHNle3ZhciBjPSJNIisoYS05LTEpKyIsIisoby0xLTEpKyJoMTggdjIgaC0xOCBaIjtuLmF0dHIoImQiLGMpfX0oKX1mdW5jdGlvbiAkKHQpe3Quc2VsZWN0QWxsKCIudmlzdWFsLWN1ZSIpLnJlbW92ZSgpfWguaW5pdChYKSxXLm5vZGUoKS5vbm1vdXNlbW92ZT1afSh0LHosbCxlLHIsTyk6ITA9PT1sLmVkaXRhYmxlJiZ6LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsUHx8Yy5vcGFjaXR5KFMpKk08PS41PyJzdHJva2UiOiJhbGwiKTt6Lm5vZGUoKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoIXkodCkpcmV0dXJuO3ZhciByPStlLm5vZGUoKS5nZXRBdHRyaWJ1dGUoImRhdGEtaW5kZXgiKTtpZihyPj0wKXtpZihyPT09dC5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleClyZXR1cm4gdm9pZCBUKHQpO3QuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg9cix0Ll9mdWxsTGF5b3V0Ll9kZWFjdGl2YXRlU2hhcGU9VCxnKHQpfX0odCx6KX0pKX19ZnVuY3Rpb24gYih0LGUscil7dmFyIG49KHIueHJlZityLnlyZWYpLnJlcGxhY2UoL3BhcGVyL2csIiIpLnJlcGxhY2UoL1t4eXpdWzEtOV0qICpkb21haW4vZywiIik7dS5zZXRDbGlwVXJsKHQsbj8iY2xpcCIrZS5fZnVsbExheW91dC5fdWlkK246bnVsbCxlKX1mdW5jdGlvbiBfKHQsZSl7dmFyIHIsbixvLHMsbCxjLHUsZixoPWUudHlwZSxwPWEuZ2V0UmVmVHlwZShlLnhyZWYpLGc9YS5nZXRSZWZUeXBlKGUueXJlZiksdj1hLmdldEZyb21JZCh0LGUueHJlZikseT1hLmdldEZyb21JZCh0LGUueXJlZikseD10Ll9mdWxsTGF5b3V0Ll9zaXplO2lmKHY/ImRvbWFpbiI9PT1wP249ZnVuY3Rpb24odCl7cmV0dXJuIHYuX29mZnNldCt2Ll9sZW5ndGgqdH06KHI9bS5zaGFwZVBvc2l0aW9uVG9SYW5nZSh2KSxuPWZ1bmN0aW9uKHQpe3JldHVybiB2Ll9vZmZzZXQrdi5yMnAocih0LCEwKSl9KTpuPWZ1bmN0aW9uKHQpe3JldHVybiB4LmwreC53KnR9LHk/ImRvbWFpbiI9PT1nP3M9ZnVuY3Rpb24odCl7cmV0dXJuIHkuX29mZnNldCt5Ll9sZW5ndGgqKDEtdCl9OihvPW0uc2hhcGVQb3NpdGlvblRvUmFuZ2UoeSkscz1mdW5jdGlvbih0KXtyZXR1cm4geS5fb2Zmc2V0K3kucjJwKG8odCwhMCkpfSk6cz1mdW5jdGlvbih0KXtyZXR1cm4geC50K3guaCooMS10KX0sInBhdGgiPT09aClyZXR1cm4gdiYmImRhdGUiPT09di50eXBlJiYobj1tLmRlY29kZURhdGUobikpLHkmJiJkYXRlIj09PXkudHlwZSYmKHM9bS5kZWNvZGVEYXRlKHMpKSxmdW5jdGlvbih0LGUscil7dmFyIG49dC5wYXRoLGE9dC54c2l6ZW1vZGUsbz10LnlzaXplbW9kZSxzPXQueGFuY2hvcixsPXQueWFuY2hvcjtyZXR1cm4gbi5yZXBsYWNlKGQuc2VnbWVudFJFLChmdW5jdGlvbih0KXt2YXIgbj0wLGM9dC5jaGFyQXQoMCksdT1kLnBhcmFtSXNYW2NdLGY9ZC5wYXJhbUlzWVtjXSxoPWQubnVtUGFyYW1zW2NdLHA9dC5zdWJzdHIoMSkucmVwbGFjZShkLnBhcmFtUkUsKGZ1bmN0aW9uKHQpe3JldHVybiB1W25dP3Q9InBpeGVsIj09PWE/ZShzKStOdW1iZXIodCk6ZSh0KTpmW25dJiYodD0icGl4ZWwiPT09bz9yKGwpLU51bWJlcih0KTpyKHQpKSwrK24+aCYmKHQ9IlgiKSx0fSkpO3JldHVybiBuPmgmJihwPXAucmVwbGFjZSgvW1xzLF0qWC4qLywiIiksaS5sb2coIklnbm9yaW5nIGV4dHJhIHBhcmFtcyBpbiBzZWdtZW50ICIrdCkpLGMrcH0pKX0oZSxuLHMpO2lmKCJwaXhlbCI9PT1lLnhzaXplbW9kZSl7dmFyIGI9bihlLnhhbmNob3IpO2w9YitlLngwLGM9YitlLngxfWVsc2UgbD1uKGUueDApLGM9bihlLngxKTtpZigicGl4ZWwiPT09ZS55c2l6ZW1vZGUpe3ZhciBfPXMoZS55YW5jaG9yKTt1PV8tZS55MCxmPV8tZS55MX1lbHNlIHU9cyhlLnkwKSxmPXMoZS55MSk7aWYoImxpbmUiPT09aClyZXR1cm4iTSIrbCsiLCIrdSsiTCIrYysiLCIrZjtpZigicmVjdCI9PT1oKXJldHVybiJNIitsKyIsIit1KyJIIitjKyJWIitmKyJIIitsKyJaIjt2YXIgdz0obCtjKS8yLFQ9KHUrZikvMixrPU1hdGguYWJzKHctbCksQT1NYXRoLmFicyhULXUpLE09IkEiK2srIiwiK0EsUz13K2srIiwiK1Q7cmV0dXJuIk0iK1MrTSsiIDAgMSwxICIrKHcrIiwiKyhULUEpKStNKyIgMCAwLDEgIitTKyJaIn1mdW5jdGlvbiB3KHQsZSxyKXtyZXR1cm4gdC5yZXBsYWNlKGQuc2VnbWVudFJFLChmdW5jdGlvbih0KXt2YXIgbj0wLGk9dC5jaGFyQXQoMCksYT1kLnBhcmFtSXNYW2ldLG89ZC5wYXJhbUlzWVtpXSxzPWQubnVtUGFyYW1zW2ldO3JldHVybiBpK3Quc3Vic3RyKDEpLnJlcGxhY2UoZC5wYXJhbVJFLChmdW5jdGlvbih0KXtyZXR1cm4gbj49c3x8KGFbbl0/dD1lKHQpOm9bbl0mJih0PXIodCkpLG4rKyksdH0pKX0pKX1mdW5jdGlvbiBUKHQpe3kodCkmJih0Ll9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4Pj0wJiYobCh0KSxkZWxldGUgdC5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleCxnKHQpKSl9ZS5leHBvcnRzPXtkcmF3OmcsZHJhd09uZTp4LGVyYXNlQWN0aXZlU2hhcGU6ZnVuY3Rpb24odCl7aWYoIXkodCkpcmV0dXJuO2wodCk7dmFyIGU9dC5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleCxyPSh0LmxheW91dHx8e30pLnNoYXBlc3x8W107aWYoZTxyLmxlbmd0aCl7Zm9yKHZhciBpPVtdLGE9MDthPHIubGVuZ3RoO2ErKylhIT09ZSYmaS5wdXNoKHJbYV0pO2RlbGV0ZSB0Ll9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4LG4uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHtzaGFwZXM6aX0pfX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3OTcsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIjo4MzgsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL2NvbG9yIjo2MzksIi4uL2RyYWdlbGVtZW50Ijo2NTgsIi4uL2RyYXdpbmciOjY2MSwiLi9jb25zdGFudHMiOjcyMSwiLi9kcmF3X25ld3NoYXBlL2Rpc3BsYXlfb3V0bGluZXMiOjcyNywiLi9kcmF3X25ld3NoYXBlL2hlbHBlcnMiOjcyOCwiLi9oZWxwZXJzIjo3MzB9XSw3MjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxpPXQoIi4uLy4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17bmV3c2hhcGU6e2xpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im5vbmUifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjQsZWRpdFR5cGU6Im5vbmUifSxkYXNoOmkoe30sbix7ZGZsdDoic29saWQiLGVkaXRUeXBlOiJub25lIn0pLGVkaXRUeXBlOiJub25lIn0sZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSIsZWRpdFR5cGU6Im5vbmUifSxmaWxscnVsZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZXZlbm9kZCIsIm5vbnplcm8iXSxkZmx0OiJldmVub2RkIixlZGl0VHlwZToibm9uZSJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJub25lIn0sbGF5ZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJlbG93IiwiYWJvdmUiXSxkZmx0OiJhYm92ZSIsZWRpdFR5cGU6Im5vbmUifSxkcmF3ZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJvcnRobyIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsImRpYWdvbmFsIl0sZGZsdDoiZGlhZ29uYWwiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6Im5vbmUifSxhY3RpdmVzaGFwZTp7ZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiKDI1NSwwLDI1NSkiLGVkaXRUeXBlOiJub25lIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi41LGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6Im5vbmUifX19LHsiLi4vLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9kcmF3aW5nL2F0dHJpYnV0ZXMiOjY2MH1dLDcyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0NJUkNMRV9TSURFUzozMixpMDAwOjAsaTA5MDo4LGkxODA6MTYsaTI3MDoyNCxjb3M0NTpNYXRoLmNvcyhNYXRoLlBJLzQpLHNpbjQ1Ok1hdGguc2luKE1hdGguUEkvNCksU1FSVDI6TWF0aC5zcXJ0KDIpfX0se31dLDcyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYocigibmV3c2hhcGUuZHJhd2RpcmVjdGlvbiIpLHIoIm5ld3NoYXBlLmxheWVyIikscigibmV3c2hhcGUuZmlsbGNvbG9yIikscigibmV3c2hhcGUuZmlsbHJ1bGUiKSxyKCJuZXdzaGFwZS5vcGFjaXR5IikscigibmV3c2hhcGUubGluZS53aWR0aCIpKXt2YXIgaT0odHx8e30pLnBsb3RfYmdjb2xvcnx8IiNGRkYiO3IoIm5ld3NoYXBlLmxpbmUuY29sb3IiLG4uY29udHJhc3QoaSkpLHIoIm5ld3NoYXBlLmxpbmUuZGFzaCIpfXIoImFjdGl2ZXNoYXBlLmZpbGxjb2xvciIpLHIoImFjdGl2ZXNoYXBlLm9wYWNpdHkiKX19LHsiLi4vLi4vY29sb3IiOjYzOX1dLDcyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9kcmFnZWxlbWVudCIpLGk9dCgiLi4vLi4vZHJhZ2VsZW1lbnQvaGVscGVycyIpLmRyYXdNb2RlLGE9dCgiLi4vLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4vY29uc3RhbnRzIikscz1vLmkwMDAsbD1vLmkwOTAsYz1vLmkxODAsdT1vLmkyNzAsZj10KCIuLi8uLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaGFuZGxlX291dGxpbmUiKS5jbGVhck91dGxpbmVDb250cm9sbGVycyxoPXQoIi4vaGVscGVycyIpLHA9aC5wb2ludHNTaGFwZVJlY3RhbmdsZSxkPWgucG9pbnRzU2hhcGVFbGxpcHNlLG09aC53cml0ZVBhdGhzLGc9dCgiLi9uZXdzaGFwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIsbyxoKXtofHwoaD0wKTt2YXIgdj1vLmdkO2Z1bmN0aW9uIHkoKXt0KGUscixvLGgrKyksZChlWzBdKSYmeCh7cmVkcmF3aW5nOiEwfSl9ZnVuY3Rpb24geCh0KXtvLmlzQWN0aXZlU2hhcGU9ITE7dmFyIGU9ZyhyLG8pO09iamVjdC5rZXlzKGUpLmxlbmd0aCYmYS5jYWxsKCh0fHx7fSkucmVkcmF3aW5nPyJyZWxheW91dCI6Il9ndWlSZWxheW91dCIsdixlKX12YXIgYixfLHcsVCxrLEE9by5pc0FjdGl2ZVNoYXBlLE09di5fZnVsbExheW91dC5fem9vbWxheWVyLFM9by5kcmFnbW9kZTsoaShTKT92Ll9mdWxsTGF5b3V0Ll9kcmF3aW5nPSEwOnYuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg+PTAmJmYodiksci5hdHRyKCJkIixtKGUpKSxBJiYhaCkmJihrPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07dFtyXT1bXTtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyl7dFtyXVtpXT1bXTtmb3IodmFyIGE9MDthPG5baV0ubGVuZ3RoO2ErKyl0W3JdW2ldW2FdPW5baV1bYV19fXJldHVybiB0fShbXSxlKSxmdW5jdGlvbih0KXtiPVtdO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdLGE9IXAoaSkmJmQoaSk7YltyXT1bXTtmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKylpZigiWiIhPT1pW29dWzBdJiYoIWF8fG89PT1zfHxvPT09bHx8bz09PWN8fG89PT11KSl7dmFyIGY9aVtvXVsxXSxoPWlbb11bMl0sbT10LmFwcGVuZCgiY2lyY2xlIikuY2xhc3NlZCgiY3Vyc29yLWdyYWIiLCEwKS5hdHRyKCJkYXRhLWkiLHIpLmF0dHIoImRhdGEtaiIsbykuYXR0cigiY3giLGYpLmF0dHIoImN5IixoKS5hdHRyKCJyIiw0KS5zdHlsZSh7Im1peC1ibGVuZC1tb2RlIjoibHVtaW5vc2l0eSIsZmlsbDoiYmxhY2siLHN0cm9rZToid2hpdGUiLCJzdHJva2Utd2lkdGgiOjF9KTtiW3JdW29dPXtlbGVtZW50Om0ubm9kZSgpLGdkOnYscHJlcEZuOkUsZG9uZUZuOkMsY2xpY2tGbjpQfSxuLmluaXQoYltyXVtvXSl9fX0oTS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm91dGxpbmUtY29udHJvbGxlcnMiKSksZnVuY3Rpb24oKXtpZihfPVtdLCFlLmxlbmd0aClyZXR1cm47X1swXT17ZWxlbWVudDpyWzBdWzBdLGdkOnYscHJlcEZuOk8sZG9uZUZuOnp9LG4uaW5pdChfWzBdKX0oKSk7ZnVuY3Rpb24gRSh0KXt3PSt0LnNyY0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWkiKSxUPSt0LnNyY0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWoiKSxiW3ddW1RdLm1vdmVGbj1MfWZ1bmN0aW9uIEwodCxyKXtpZihlLmxlbmd0aCl7dmFyIG49a1t3XVtUXVsxXSxpPWtbd11bVF1bMl0sYT1lW3ddLG89YS5sZW5ndGg7aWYocChhKSl7Zm9yKHZhciBzPTA7czxvO3MrKylpZihzIT09VCl7dmFyIGw9YVtzXTtsWzFdPT09YVtUXVsxXSYmKGxbMV09bit0KSxsWzJdPT09YVtUXVsyXSYmKGxbMl09aStyKX1pZihhW1RdWzFdPW4rdCxhW1RdWzJdPWkrciwhcChhKSlmb3IodmFyIGM9MDtjPG87YysrKWZvcih2YXIgdT0wO3U8YVtjXS5sZW5ndGg7dSsrKWFbY11bdV09a1t3XVtjXVt1XX1lbHNlIGFbVF1bMV09bit0LGFbVF1bMl09aStyO3koKX19ZnVuY3Rpb24gQygpe3goKX1mdW5jdGlvbiBQKHQscil7aWYoMj09PXQpe3c9K3Iuc3JjRWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtaSIpLFQ9K3Iuc3JjRWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtaiIpO3ZhciBuPWVbd107cChuKXx8ZChuKXx8ZnVuY3Rpb24oKXtpZihlLmxlbmd0aCYmZVt3XSYmZVt3XS5sZW5ndGgpe2Zvcih2YXIgdD1bXSxyPTA7cjxlW3ddLmxlbmd0aDtyKyspciE9PVQmJnQucHVzaChlW3ddW3JdKTt0Lmxlbmd0aD4xJiYoMiE9PXQubGVuZ3RofHwiWiIhPT10WzFdWzBdKSYmKDA9PT1UJiYodFswXVswXT0iTSIpLGVbd109dCx5KCkseCgpKX19KCl9fWZ1bmN0aW9uIEkodCxyKXshZnVuY3Rpb24odCxyKXtpZihlLmxlbmd0aClmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylmb3IodmFyIGk9MDtpPGVbbl0ubGVuZ3RoO2krKylmb3IodmFyIGE9MDthKzI8ZVtuXVtpXS5sZW5ndGg7YSs9MillW25dW2ldW2ErMV09a1tuXVtpXVthKzFdK3QsZVtuXVtpXVthKzJdPWtbbl1baV1bYSsyXStyfSh0LHIpLHkoKX1mdW5jdGlvbiBPKHQpeyh3PSt0LnNyY0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWkiKSl8fCh3PTApLF9bd10ubW92ZUZuPUl9ZnVuY3Rpb24geigpe3goKX19fSx7Ii4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oYW5kbGVfb3V0bGluZSI6ODM4LCIuLi8uLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi8uLi9kcmFnZWxlbWVudCI6NjU4LCIuLi8uLi9kcmFnZWxlbWVudC9oZWxwZXJzIjo2NTcsIi4vY29uc3RhbnRzIjo3MjUsIi4vaGVscGVycyI6NzI4LCIuL25ld3NoYXBlcyI6NzI5fV0sNzI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBhcnNlLXN2Zy1wYXRoIiksaT10KCIuL2NvbnN0YW50cyIpLGE9aS5DSVJDTEVfU0lERVMsbz1pLlNRUlQyLHM9dCgiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hlbHBlcnMiKSxsPXMucDJyLGM9cy5yMnAsdT1bMCwzLDQsNSw2LDEsMl0sZj1bMCwzLDQsMSwyXTtmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIE1hdGguYWJzKHQtZSk8PTFlLTZ9ZnVuY3Rpb24gcCh0LGUpe3ZhciByPWVbMV0tdFsxXSxuPWVbMl0tdFsyXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4pfXIud3JpdGVQYXRocz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZighZSlyZXR1cm4iTTAsMFoiO2Zvcih2YXIgcj0iIixuPTA7bjxlO24rKylmb3IodmFyIGk9dFtuXS5sZW5ndGgsYT0wO2E8aTthKyspe3ZhciBvPXRbbl1bYV1bMF07aWYoIloiPT09bylyKz0iWiI7ZWxzZSBmb3IodmFyIHM9dFtuXVthXS5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciBjPWw7IlEiPT09b3x8IlMiPT09bz9jPWZbbF06IkMiPT09byYmKGM9dVtsXSkscis9dFtuXVthXVtjXSxsPjAmJmw8cy0xJiYocis9IiwiKX19cmV0dXJuIHJ9LHIucmVhZFBhdGhzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBvLHMsdSxmPW4odCksaD1bXSxwPS0xLGQ9MCxtPTAsZz1mdW5jdGlvbigpe3M9ZCx1PW19O2coKTtmb3IodmFyIHY9MDt2PGYubGVuZ3RoO3YrKyl7dmFyIHkseCxiLF8sdz1bXSxUPWZbdl1bMF0saz1UO3N3aXRjaChUKXtjYXNlIk0iOnArKyxoW3BdPVtdLGQ9K2Zbdl1bMV0sbT0rZlt2XVsyXSx3LnB1c2goW2ssZCxtXSksZygpO2JyZWFrO2Nhc2UiUSI6Y2FzZSJTIjp5PStmW3ZdWzFdLGI9K2Zbdl1bMl0sZD0rZlt2XVszXSxtPStmW3ZdWzRdLHcucHVzaChbayxkLG0seSxiXSk7YnJlYWs7Y2FzZSJDIjp5PStmW3ZdWzFdLGI9K2Zbdl1bMl0seD0rZlt2XVszXSxfPStmW3ZdWzRdLGQ9K2Zbdl1bNV0sbT0rZlt2XVs2XSx3LnB1c2goW2ssZCxtLHksYix4LF9dKTticmVhaztjYXNlIlQiOmNhc2UiTCI6ZD0rZlt2XVsxXSxtPStmW3ZdWzJdLHcucHVzaChbayxkLG1dKTticmVhaztjYXNlIkgiOms9IkwiLGQ9K2Zbdl1bMV0sdy5wdXNoKFtrLGQsbV0pO2JyZWFrO2Nhc2UiViI6az0iTCIsbT0rZlt2XVsxXSx3LnB1c2goW2ssZCxtXSk7YnJlYWs7Y2FzZSJBIjprPSJMIjt2YXIgQT0rZlt2XVsxXSxNPStmW3ZdWzJdOytmW3ZdWzRdfHwoQT0tQSxNPS1NKTt2YXIgUz1kLUEsRT1tO2ZvcihvPTE7bzw9YS8yO28rKyl7dmFyIEw9MipNYXRoLlBJKm8vYTt3LnB1c2goW2ssUytBKk1hdGguY29zKEwpLEUrTSpNYXRoLnNpbihMKV0pfWJyZWFrO2Nhc2UiWiI6ZD09PXMmJm09PT11fHwoZD1zLG09dSx3LnB1c2goW2ssZCxtXSkpfWZvcih2YXIgQz0ocnx8e30pLmRvbWFpbixQPWUuX2Z1bGxMYXlvdXQuX3NpemUsST1yJiYicGl4ZWwiPT09ci54c2l6ZW1vZGUsTz1yJiYicGl4ZWwiPT09ci55c2l6ZW1vZGUsej0hMT09PWksRD0wO0Q8dy5sZW5ndGg7RCsrKXtmb3Iobz0wO28rMjw3O28rPTIpe3ZhciBSPXdbRF1bbysxXSxGPXdbRF1bbysyXTt2b2lkIDAhPT1SJiZ2b2lkIDAhPT1GJiYoZD1SLG09RixyJiYoci54YXhpcyYmci54YXhpcy5wMnI/KHomJihSLT1yLnhheGlzLl9vZmZzZXQpLFI9ST9jKHIueGF4aXMsci54YW5jaG9yKStSOmwoci54YXhpcyxSKSk6KHomJihSLT1QLmwpLEM/Uj1DLnhbMF0rUi9QLnc6Ui89UC53KSxyLnlheGlzJiZyLnlheGlzLnAycj8oeiYmKEYtPXIueWF4aXMuX29mZnNldCksRj1PP2Moci55YXhpcyxyLnlhbmNob3IpLUY6bChyLnlheGlzLEYpKTooeiYmKEYtPVAudCksRj1DP0MueVsxXS1GL1AuaDoxLUYvUC5oKSksd1tEXVtvKzFdPVIsd1tEXVtvKzJdPUYpfWhbcF0ucHVzaCh3W0RdLnNsaWNlKCkpfX1yZXR1cm4gaH0sci5wb2ludHNTaGFwZVJlY3RhbmdsZT1mdW5jdGlvbih0KXtpZig1IT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBlPTE7ZTwzO2UrKyl7aWYoIWgodFswXVtlXS10WzFdW2VdLHRbM11bZV0tdFsyXVtlXSkpcmV0dXJuITE7aWYoIWgodFswXVtlXS10WzNdW2VdLHRbMV1bZV0tdFsyXVtlXSkpcmV0dXJuITF9cmV0dXJuISghaCh0WzBdWzFdLHRbMV1bMV0pJiYhaCh0WzBdWzFdLHRbM11bMV0pKSYmISEocCh0WzBdLHRbMV0pKnAodFswXSx0WzNdKSl9LHIucG9pbnRzU2hhcGVFbGxpcHNlPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGUhPT1hKzEpcmV0dXJuITE7ZT1hO2Zvcih2YXIgcj0wO3I8ZTtyKyspe3ZhciBuPSgyKmUtciklZSxpPShlLzIrbiklZSxvPShlLzIrciklZTtpZighaChwKHRbcl0sdFtvXSkscCh0W25dLHRbaV0pKSlyZXR1cm4hMX1yZXR1cm4hMH0sci5oYW5kbGVFbGxpcHNlPWZ1bmN0aW9uKHQsZSxuKXtpZighdClyZXR1cm5bZSxuXTt2YXIgaT1yLmVsbGlwc2VPdmVyKHt4MDplWzBdLHkwOmVbMV0seDE6blswXSx5MTpuWzFdfSkscz0oaS54MStpLngwKS8yLGw9KGkueTEraS55MCkvMixjPShpLngxLWkueDApLzIsdT0oaS55MS1pLnkwKS8yO2N8fChjPXUvPW8pLHV8fCh1PWMvPW8pO2Zvcih2YXIgZj1bXSxoPTA7aDxhO2grKyl7dmFyIHA9MipoKk1hdGguUEkvYTtmLnB1c2goW3MrYypNYXRoLmNvcyhwKSxsK3UqTWF0aC5zaW4ocCldKX1yZXR1cm4gZn0sci5lbGxpcHNlT3Zlcj1mdW5jdGlvbih0KXt2YXIgZT10LngwLHI9dC55MCxuPXQueDEsaT10LnkxLGE9bi1lLHM9aS1yLGw9KChlLT1hKStuKS8yLGM9KChyLT1zKStpKS8yO3JldHVybnt4MDpsLShhKj1vKSx5MDpjLShzKj1vKSx4MTpsK2EseTE6YytzfX19LHsiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hlbHBlcnMiOjgzOSwiLi9jb25zdGFudHMiOjcyNSwicGFyc2Utc3ZnLXBhdGgiOjQ3Mn1dLDcyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9kcmFnZWxlbWVudC9oZWxwZXJzIiksaT1uLmRyYXdNb2RlLGE9bi5vcGVuTW9kZSxvPXQoIi4vY29uc3RhbnRzIikscz1vLmkwMDAsbD1vLmkwOTAsYz1vLmkxODAsdT1vLmkyNzAsZj1vLmNvczQ1LGg9by5zaW40NSxwPXQoIi4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oZWxwZXJzIiksZD1wLnAycixtPXAucjJwLGc9dCgiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIikuY2xlYXJTZWxlY3Qsdj10KCIuL2hlbHBlcnMiKSx5PXYucmVhZFBhdGhzLHg9di53cml0ZVBhdGhzLGI9di5lbGxpcHNlT3ZlcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aCl7dmFyIHI9dFswXVswXTtpZihyKXt2YXIgbj1yLmdldEF0dHJpYnV0ZSgiZCIpLG89ZS5nZCxwPW8uX2Z1bGxMYXlvdXQubmV3c2hhcGUsdj1lLnBsb3RpbmZvLF89di54YXhpcyx3PXYueWF4aXMsVD0hIXYuZG9tYWlufHwhdi54YXhpcyxrPSEhdi5kb21haW58fCF2LnlheGlzLEE9ZS5pc0FjdGl2ZVNoYXBlLE09ZS5kcmFnbW9kZSxTPShvLmxheW91dHx8e30pLnNoYXBlc3x8W107aWYoIWkoTSkmJnZvaWQgMCE9PUEpe3ZhciBFPW8uX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg7aWYoRTxTLmxlbmd0aClzd2l0Y2goby5fZnVsbExheW91dC5zaGFwZXNbRV0udHlwZSl7Y2FzZSJyZWN0IjpNPSJkcmF3cmVjdCI7YnJlYWs7Y2FzZSJjaXJjbGUiOk09ImRyYXdjaXJjbGUiO2JyZWFrO2Nhc2UibGluZSI6TT0iZHJhd2xpbmUiO2JyZWFrO2Nhc2UicGF0aCI6dmFyIEw9U1tFXS5wYXRofHwiIjtNPSJaIj09PUxbTC5sZW5ndGgtMV0/ImRyYXdjbG9zZWRwYXRoIjoiZHJhd29wZW5wYXRoIn19dmFyIEMsUD1hKE0pLEk9eShuLG8sdixBKSxPPXtlZGl0YWJsZTohMCx4cmVmOlQ/InBhcGVyIjpfLl9pZCx5cmVmOms/InBhcGVyIjp3Ll9pZCxsYXllcjpwLmxheWVyLG9wYWNpdHk6cC5vcGFjaXR5LGxpbmU6e2NvbG9yOnAubGluZS5jb2xvcix3aWR0aDpwLmxpbmUud2lkdGgsZGFzaDpwLmxpbmUuZGFzaH19O2lmKFB8fChPLmZpbGxjb2xvcj1wLmZpbGxjb2xvcixPLmZpbGxydWxlPXAuZmlsbHJ1bGUpLDE9PT1JLmxlbmd0aCYmKEM9SVswXSksQyYmImRyYXdyZWN0Ij09PU0pTy50eXBlPSJyZWN0IixPLngwPUNbMF1bMV0sTy55MD1DWzBdWzJdLE8ueDE9Q1syXVsxXSxPLnkxPUNbMl1bMl07ZWxzZSBpZihDJiYiZHJhd2xpbmUiPT09TSlPLnR5cGU9ImxpbmUiLE8ueDA9Q1swXVsxXSxPLnkwPUNbMF1bMl0sTy54MT1DWzFdWzFdLE8ueTE9Q1sxXVsyXTtlbHNlIGlmKEMmJiJkcmF3Y2lyY2xlIj09PU0pe08udHlwZT0iY2lyY2xlIjt2YXIgej1DW3NdWzFdLEQ9Q1tsXVsxXSxSPUNbY11bMV0sRj1DW3VdWzFdLEI9Q1tzXVsyXSxOPUNbbF1bMl0saj1DW2NdWzJdLFU9Q1t1XVsyXSxWPXYueGF4aXMmJigiZGF0ZSI9PT12LnhheGlzLnR5cGV8fCJsb2ciPT09di54YXhpcy50eXBlKSxIPXYueWF4aXMmJigiZGF0ZSI9PT12LnlheGlzLnR5cGV8fCJsb2ciPT09di55YXhpcy50eXBlKTtWJiYoej1tKHYueGF4aXMseiksRD1tKHYueGF4aXMsRCksUj1tKHYueGF4aXMsUiksRj1tKHYueGF4aXMsRikpLEgmJihCPW0odi55YXhpcyxCKSxOPW0odi55YXhpcyxOKSxqPW0odi55YXhpcyxqKSxVPW0odi55YXhpcyxVKSk7dmFyIHE9KEQrRikvMixHPShCK2opLzIsWT1iKHt4MDpxLHkwOkcseDE6cSsoRi1EK1IteikvMipmLHkxOkcrKFUtTitqLUIpLzIqaH0pO1YmJihZLngwPWQodi54YXhpcyxZLngwKSxZLngxPWQodi54YXhpcyxZLngxKSksSCYmKFkueTA9ZCh2LnlheGlzLFkueTApLFkueTE9ZCh2LnlheGlzLFkueTEpKSxPLngwPVkueDAsTy55MD1ZLnkwLE8ueDE9WS54MSxPLnkxPVkueTF9ZWxzZSBPLnR5cGU9InBhdGgiLF8mJncmJmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0iZGF0ZSI9PT1lLnR5cGUsaT0iZGF0ZSI9PT1yLnR5cGU7aWYoIW4mJiFpKXJldHVybiB0O2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288dFthXS5sZW5ndGg7bysrKWZvcih2YXIgcz0wO3MrMjx0W2FdW29dLmxlbmd0aDtzKz0yKW4mJih0W2FdW29dW3MrMV09dFthXVtvXVtzKzFdLnJlcGxhY2UoIiAiLCJfIikpLGkmJih0W2FdW29dW3MrMl09dFthXVtvXVtzKzJdLnJlcGxhY2UoIiAiLCJfIikpfShJLF8sdyksTy5wYXRoPXgoSSksQz1udWxsO2cobyk7Zm9yKHZhciBXPWUuZWRpdEhlbHBlcnMsWD0oV3x8e30pLm1vZGlmeUl0ZW0sWj1bXSxKPTA7SjxTLmxlbmd0aDtKKyspe3ZhciBLPW8uX2Z1bGxMYXlvdXQuc2hhcGVzW0pdO2lmKFpbSl09Sy5faW5wdXQsdm9pZCAwIT09QSYmSj09PW8uX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXgpe3ZhciBRPU87c3dpdGNoKEsudHlwZSl7Y2FzZSJsaW5lIjpjYXNlInJlY3QiOmNhc2UiY2lyY2xlIjpYKCJ4MCIsUS54MCksWCgieDEiLFEueDEpLFgoInkwIixRLnkwKSxYKCJ5MSIsUS55MSk7YnJlYWs7Y2FzZSJwYXRoIjpYKCJwYXRoIixRLnBhdGgpfX19cmV0dXJuIHZvaWQgMD09PUE/KFoucHVzaChPKSxaKTpXP1cuZ2V0VXBkYXRlT2JqKCk6e319fX19LHsiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIjo4MzgsIi4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oZWxwZXJzIjo4MzksIi4uLy4uL2RyYWdlbGVtZW50L2hlbHBlcnMiOjY1NywiLi9jb25zdGFudHMiOjcyNSwiLi9oZWxwZXJzIjo3Mjh9XSw3MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxpPXQoIi4uLy4uL2xpYiIpO3IucmFuZ2VUb1NoYXBlUG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuImxvZyI9PT10LnR5cGU/dC5yMmQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxyLnNoYXBlUG9zaXRpb25Ub1JhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiJsb2ciPT09dC50eXBlP3QuZDJyOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sci5kZWNvZGVEYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlJiYoZT1lLnJlcGxhY2UoIl8iLCIgIikpLHQoZSl9fSxyLmVuY29kZURhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpLnJlcGxhY2UoIiAiLCJfIil9fSxyLmV4dHJhY3RQYXRoQ29vcmRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107cmV0dXJuIHQubWF0Y2gobi5zZWdtZW50UkUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBhPWVbdC5jaGFyQXQoMCldLmRyYXduO2lmKHZvaWQgMCE9PWEpe3ZhciBvPXQuc3Vic3RyKDEpLm1hdGNoKG4ucGFyYW1SRSk7IW98fG8ubGVuZ3RoPGF8fHIucHVzaChpLmNsZWFuTnVtYmVyKG9bYV0pKX19KSkscn0sci5nZXREYXRhVG9QaXhlbD1mdW5jdGlvbih0LGUsbixpKXt2YXIgYSxvPXQuX2Z1bGxMYXlvdXQuX3NpemU7aWYoZSlpZigiZG9tYWluIj09PWkpYT1mdW5jdGlvbih0KXtyZXR1cm4gZS5fbGVuZ3RoKihuPzEtdDp0KStlLl9vZmZzZXR9O2Vsc2V7dmFyIHM9ci5zaGFwZVBvc2l0aW9uVG9SYW5nZShlKTthPWZ1bmN0aW9uKHQpe3JldHVybiBlLl9vZmZzZXQrZS5yMnAocyh0LCEwKSl9LCJkYXRlIj09PWUudHlwZSYmKGE9ci5kZWNvZGVEYXRlKGEpKX1lbHNlIGE9bj9mdW5jdGlvbih0KXtyZXR1cm4gby50K28uaCooMS10KX06ZnVuY3Rpb24odCl7cmV0dXJuIG8ubCtvLncqdH07cmV0dXJuIGF9LHIuZ2V0UGl4ZWxUb0RhdGE9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGEsbz10Ll9mdWxsTGF5b3V0Ll9zaXplO2lmKGUpaWYoImRvbWFpbiI9PT1pKWE9ZnVuY3Rpb24odCl7dmFyIHI9KHQtZS5fb2Zmc2V0KS9lLl9sZW5ndGg7cmV0dXJuIG4/MS1yOnJ9O2Vsc2V7dmFyIHM9ci5yYW5nZVRvU2hhcGVQb3NpdGlvbihlKTthPWZ1bmN0aW9uKHQpe3JldHVybiBzKGUucDJyKHQtZS5fb2Zmc2V0KSl9fWVsc2UgYT1uP2Z1bmN0aW9uKHQpe3JldHVybiAxLSh0LW8udCkvby5ofTpmdW5jdGlvbih0KXtyZXR1cm4odC1vLmwpL28ud307cmV0dXJuIGF9LHIucm91bmRQb3NpdGlvbkZvclNoYXJwU3Ryb2tlUmVuZGVyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MT09PU1hdGgucm91bmQoZSUyKSxuPU1hdGgucm91bmQodCk7cmV0dXJuIHI/bisuNTpufSxyLm1ha2VPcHRpb25zQW5kUGxvdGluZm89ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LnNoYXBlc1tlXXx8e30sbj10Ll9mdWxsTGF5b3V0Ll9wbG90c1tyLnhyZWYrci55cmVmXTtyZXR1cm4hIW4/bi5faGFkUGxvdGluZm89ITA6KG49e30sci54cmVmJiYicGFwZXIiIT09ci54cmVmJiYobi54YXhpcz10Ll9mdWxsTGF5b3V0W3IueHJlZisiYXhpcyJdKSxyLnlyZWYmJiJwYXBlciIhPT1yLnlyZWYmJihuLnlheGlzPXQuX2Z1bGxMYXlvdXRbci55cmVmKyJheGlzIl0pKSxuLnhzaXplbW9kZT1yLnhzaXplbW9kZSxuLnlzaXplbW9kZT1yLnlzaXplbW9kZSxuLnhhbmNob3I9ci54YW5jaG9yLG4ueWFuY2hvcj1yLnlhbmNob3Ise29wdGlvbnM6cixwbG90aW5mbzpufX19LHsiLi4vLi4vbGliIjo3NzYsIi4vY29uc3RhbnRzIjo3MjF9XSw3MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9kcmF3Iik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6InNoYXBlcyIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksc3VwcGx5RHJhd05ld1NoYXBlRGVmYXVsdHM6dCgiLi9kcmF3X25ld3NoYXBlL2RlZmF1bHRzIiksaW5jbHVkZUJhc2VQbG90OnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiKSgic2hhcGVzIiksY2FsY0F1dG9yYW5nZTp0KCIuL2NhbGNfYXV0b3JhbmdlIiksZHJhdzpuLmRyYXcsZHJhd09uZTpuLmRyYXdPbmV9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiOjg0MCwiLi9hdHRyaWJ1dGVzIjo3MTksIi4vY2FsY19hdXRvcmFuZ2UiOjcyMCwiLi9kZWZhdWx0cyI6NzIyLCIuL2RyYXciOjcyMywiLi9kcmF3X25ld3NoYXBlL2RlZmF1bHRzIjo3MjZ9XSw3MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZERlZXBBbGwsbz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwscz10KCIuLi8uLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LGM9dCgiLi9jb25zdGFudHMiKSx1PWwoInN0ZXAiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxtZXRob2Q6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJlc3R5bGUiLCJyZWxheW91dCIsImFuaW1hdGUiLCJ1cGRhdGUiLCJza2lwIl0sZGZsdDoicmVzdHlsZSJ9LGFyZ3M6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6W3t2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9XX0sbGFiZWw6e3ZhbFR5cGU6InN0cmluZyJ9LHZhbHVlOnt2YWxUeXBlOiJzdHJpbmcifSxleGVjdXRlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX0pO2UuZXhwb3J0cz1vKGwoInNsaWRlciIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGFjdGl2ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjB9LHN0ZXBzOnUsbGVubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJmcmFjdGlvbiJ9LGxlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MH0scGFkOmEoaSh7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSx7fSx7dDp7ZGZsdDoyMH19KSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MH0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9LHRyYW5zaXRpb246e2R1cmF0aW9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTUwfSxlYXNpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpzLnRyYW5zaXRpb24uZWFzaW5nLnZhbHVlcyxkZmx0OiJjdWJpYy1pbi1vdXQifX0sY3VycmVudHZhbHVlOnt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0In0sb2Zmc2V0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MTB9LHByZWZpeDp7dmFsVHlwZToic3RyaW5nIn0sc3VmZml4Ont2YWxUeXBlOiJzdHJpbmcifSxmb250Om4oe30pfSxmb250Om4oe30pLGFjdGl2ZWJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmMuZ3JpcEJnQWN0aXZlQ29sb3J9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmMucmFpbEJnQ29sb3J9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpjLnJhaWxCb3JkZXJDb2xvcn0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDpjLnJhaWxCb3JkZXJXaWR0aH0sdGlja2xlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OmMudGlja0xlbmd0aH0sdGlja2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpjLnRpY2tDb2xvcn0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sbWlub3J0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6Yy5taW5vclRpY2tMZW5ndGh9fSksImFycmF5ZHJhdyIsImZyb20tcm9vdCIpfSx7Ii4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODA5LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTYsIi4uLy4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIjo4MjEsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyI6ODg5LCIuL2NvbnN0YW50cyI6NzMzfV0sNzMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToic2xpZGVycyIsY29udGFpbmVyQ2xhc3NOYW1lOiJzbGlkZXItY29udGFpbmVyIixncm91cENsYXNzTmFtZToic2xpZGVyLWdyb3VwIixpbnB1dEFyZWFDbGFzczoic2xpZGVyLWlucHV0LWFyZWEiLHJhaWxSZWN0Q2xhc3M6InNsaWRlci1yYWlsLXJlY3QiLHJhaWxUb3VjaFJlY3RDbGFzczoic2xpZGVyLXJhaWwtdG91Y2gtcmVjdCIsZ3JpcFJlY3RDbGFzczoic2xpZGVyLWdyaXAtcmVjdCIsdGlja1JlY3RDbGFzczoic2xpZGVyLXRpY2stcmVjdCIsaW5wdXRQcm94eUNsYXNzOiJzbGlkZXItaW5wdXQtcHJveHkiLGxhYmVsc0NsYXNzOiJzbGlkZXItbGFiZWxzIixsYWJlbEdyb3VwQ2xhc3M6InNsaWRlci1sYWJlbC1ncm91cCIsbGFiZWxDbGFzczoic2xpZGVyLWxhYmVsIixjdXJyZW50VmFsdWVDbGFzczoic2xpZGVyLWN1cnJlbnQtdmFsdWUiLHJhaWxIZWlnaHQ6NSxtZW51SW5kZXhBdHRyTmFtZToic2xpZGVyLWFjdGl2ZS1pbmRleCIsYXV0b01hcmdpbklkUm9vdDoic2xpZGVyLSIsbWluV2lkdGg6MzAsbWluSGVpZ2h0OjMwLHRleHRQYWRYOjQwLGFycm93T2Zmc2V0WDo0LHJhaWxSYWRpdXM6MixyYWlsV2lkdGg6NSxyYWlsQm9yZGVyOjQscmFpbEJvcmRlcldpZHRoOjEscmFpbEJvcmRlckNvbG9yOiIjYmVjOGQ5IixyYWlsQmdDb2xvcjoiI2Y4ZmFmYyIscmFpbEluc2V0Ojgsc3RlcEluc2V0OjEwLGdyaXBSYWRpdXM6MTAsZ3JpcFdpZHRoOjIwLGdyaXBIZWlnaHQ6MjAsZ3JpcEJvcmRlcjoyMCxncmlwQm9yZGVyV2lkdGg6MSxncmlwQm9yZGVyQ29sb3I6IiNiZWM4ZDkiLGdyaXBCZ0NvbG9yOiIjZjZmOGZhIixncmlwQmdBY3RpdmVDb2xvcjoiI2RiZGRlMCIsbGFiZWxQYWRkaW5nOjgsbGFiZWxPZmZzZXQ6MCx0aWNrV2lkdGg6MSx0aWNrQ29sb3I6IiMzMzMiLHRpY2tPZmZzZXQ6MjUsdGlja0xlbmd0aDo3LG1pbm9yVGlja09mZnNldDoyNSxtaW5vclRpY2tDb2xvcjoiIzMzMyIsbWlub3JUaWNrTGVuZ3RoOjQsY3VycmVudFZhbHVlUGFkZGluZzo4LGN1cnJlbnRWYWx1ZUluc2V0OjB9fSx7fV0sNzM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4vY29uc3RhbnRzIikubmFtZSxzPWEuc3RlcHM7ZnVuY3Rpb24gbCh0LGUscil7ZnVuY3Rpb24gbyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfWZvcih2YXIgcz1pKHQsZSx7bmFtZToic3RlcHMiLGhhbmRsZUl0ZW1EZWZhdWx0czpjfSksbD0wLHU9MDt1PHMubGVuZ3RoO3UrKylzW3VdLnZpc2libGUmJmwrKztpZihsPDI/ZS52aXNpYmxlPSExOm8oInZpc2libGUiKSl7ZS5fc3RlcENvdW50PWw7dmFyIGY9ZS5fdmlzaWJsZVN0ZXBzPW4uZmlsdGVyVmlzaWJsZShzKTsoc1tvKCJhY3RpdmUiKV18fHt9KS52aXNpYmxlfHwoZS5hY3RpdmU9ZlswXS5faW5kZXgpLG8oIngiKSxvKCJ5Iiksbi5ub25lT3JBbGwodCxlLFsieCIsInkiXSksbygieGFuY2hvciIpLG8oInlhbmNob3IiKSxvKCJsZW4iKSxvKCJsZW5tb2RlIiksbygicGFkLnQiKSxvKCJwYWQuciIpLG8oInBhZC5iIiksbygicGFkLmwiKSxuLmNvZXJjZUZvbnQobywiZm9udCIsci5mb250KSxvKCJjdXJyZW50dmFsdWUudmlzaWJsZSIpJiYobygiY3VycmVudHZhbHVlLnhhbmNob3IiKSxvKCJjdXJyZW50dmFsdWUucHJlZml4IiksbygiY3VycmVudHZhbHVlLnN1ZmZpeCIpLG8oImN1cnJlbnR2YWx1ZS5vZmZzZXQiKSxuLmNvZXJjZUZvbnQobywiY3VycmVudHZhbHVlLmZvbnQiLGUuZm9udCkpLG8oInRyYW5zaXRpb24uZHVyYXRpb24iKSxvKCJ0cmFuc2l0aW9uLmVhc2luZyIpLG8oImJnY29sb3IiKSxvKCJhY3RpdmViZ2NvbG9yIiksbygiYm9yZGVyY29sb3IiKSxvKCJib3JkZXJ3aWR0aCIpLG8oInRpY2tsZW4iKSxvKCJ0aWNrd2lkdGgiKSxvKCJ0aWNrY29sb3IiKSxvKCJtaW5vcnRpY2tsZW4iKX19ZnVuY3Rpb24gYyh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1pZigic2tpcCI9PT10Lm1ldGhvZHx8QXJyYXkuaXNBcnJheSh0LmFyZ3MpP3IoInZpc2libGUiKTplLnZpc2libGU9ITEpe3IoIm1ldGhvZCIpLHIoImFyZ3MiKTt2YXIgaT1yKCJsYWJlbCIsInN0ZXAtIitlLl9pbmRleCk7cigidmFsdWUiLGkpLHIoImV4ZWN1dGUiKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aSh0LGUse25hbWU6byxoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo4MjIsIi4vYXR0cmlidXRlcyI6NzMyLCIuL2NvbnN0YW50cyI6NzMzfV0sNzM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuLi9jb2xvciIpLG89dCgiLi4vZHJhd2luZyIpLHM9dCgiLi4vLi4vbGliIiksbD1zLnN0clRyYW5zbGF0ZSxjPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHU9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yLGY9dCgiLi9jb25zdGFudHMiKSxoPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSxwPWguTElORV9TUEFDSU5HLGQ9aC5GUk9NX1RMLG09aC5GUk9NX0JSO2Z1bmN0aW9uIGcodCl7cmV0dXJuIGYuYXV0b01hcmdpbklkUm9vdCt0Ll9pbmRleH1mdW5jdGlvbiB2KHQpe3JldHVybiB0Ll9pbmRleH1mdW5jdGlvbiB5KHQsZSl7dmFyIHI9by50ZXN0ZXIuc2VsZWN0QWxsKCJnLiIrZi5sYWJlbEdyb3VwQ2xhc3MpLmRhdGEoZS5fdmlzaWJsZVN0ZXBzKTtyLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmxhYmVsR3JvdXBDbGFzcywhMCk7dmFyIGE9MCxsPTA7ci5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1fKG4uc2VsZWN0KHRoaXMpLHtzdGVwOnR9LGUpLm5vZGUoKTtpZihyKXt2YXIgaT1vLmJCb3gocik7bD1NYXRoLm1heChsLGkuaGVpZ2h0KSxhPU1hdGgubWF4KGEsaS53aWR0aCl9fSkpLHIucmVtb3ZlKCk7dmFyIHU9ZS5fZGltcz17fTt1LmlucHV0QXJlYVdpZHRoPU1hdGgubWF4KGYucmFpbFdpZHRoLGYuZ3JpcEhlaWdodCk7dmFyIGg9dC5fZnVsbExheW91dC5fc2l6ZTt1Lmx4PWgubCtoLncqZS54LHUubHk9aC50K2guaCooMS1lLnkpLCJmcmFjdGlvbiI9PT1lLmxlbm1vZGU/dS5vdXRlckxlbmd0aD1NYXRoLnJvdW5kKGgudyplLmxlbik6dS5vdXRlckxlbmd0aD1lLmxlbix1LmlucHV0QXJlYVN0YXJ0PTAsdS5pbnB1dEFyZWFMZW5ndGg9TWF0aC5yb3VuZCh1Lm91dGVyTGVuZ3RoLWUucGFkLmwtZS5wYWQucik7dmFyIHA9KHUuaW5wdXRBcmVhTGVuZ3RoLTIqZi5zdGVwSW5zZXQpLyhlLl9zdGVwQ291bnQtMSksdj1hK2YubGFiZWxQYWRkaW5nO2lmKHUubGFiZWxTdHJpZGU9TWF0aC5tYXgoMSxNYXRoLmNlaWwodi9wKSksdS5sYWJlbEhlaWdodD1sLHUuY3VycmVudFZhbHVlTWF4V2lkdGg9MCx1LmN1cnJlbnRWYWx1ZUhlaWdodD0wLHUuY3VycmVudFZhbHVlVG90YWxIZWlnaHQ9MCx1LmN1cnJlbnRWYWx1ZU1heExpbmVzPTEsZS5jdXJyZW50dmFsdWUudmlzaWJsZSl7dmFyIHk9by50ZXN0ZXIuYXBwZW5kKCJnIik7ci5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj14KHksZSx0LmxhYmVsKSxuPXIubm9kZSgpJiZvLmJCb3goci5ub2RlKCkpfHx7d2lkdGg6MCxoZWlnaHQ6MH0saT1jLmxpbmVDb3VudChyKTt1LmN1cnJlbnRWYWx1ZU1heFdpZHRoPU1hdGgubWF4KHUuY3VycmVudFZhbHVlTWF4V2lkdGgsTWF0aC5jZWlsKG4ud2lkdGgpKSx1LmN1cnJlbnRWYWx1ZUhlaWdodD1NYXRoLm1heCh1LmN1cnJlbnRWYWx1ZUhlaWdodCxNYXRoLmNlaWwobi5oZWlnaHQpKSx1LmN1cnJlbnRWYWx1ZU1heExpbmVzPU1hdGgubWF4KHUuY3VycmVudFZhbHVlTWF4TGluZXMsaSl9KSksdS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodD11LmN1cnJlbnRWYWx1ZUhlaWdodCtlLmN1cnJlbnR2YWx1ZS5vZmZzZXQseS5yZW1vdmUoKX11LmhlaWdodD11LmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0K2YudGlja09mZnNldCtlLnRpY2tsZW4rZi5sYWJlbE9mZnNldCt1LmxhYmVsSGVpZ2h0K2UucGFkLnQrZS5wYWQuYjt2YXIgYj0ibGVmdCI7cy5pc1JpZ2h0QW5jaG9yKGUpJiYodS5seC09dS5vdXRlckxlbmd0aCxiPSJyaWdodCIpLHMuaXNDZW50ZXJBbmNob3IoZSkmJih1Lmx4LT11Lm91dGVyTGVuZ3RoLzIsYj0iY2VudGVyIik7dmFyIHc9InRvcCI7cy5pc0JvdHRvbUFuY2hvcihlKSYmKHUubHktPXUuaGVpZ2h0LHc9ImJvdHRvbSIpLHMuaXNNaWRkbGVBbmNob3IoZSkmJih1Lmx5LT11LmhlaWdodC8yLHc9Im1pZGRsZSIpLHUub3V0ZXJMZW5ndGg9TWF0aC5jZWlsKHUub3V0ZXJMZW5ndGgpLHUuaGVpZ2h0PU1hdGguY2VpbCh1LmhlaWdodCksdS5seD1NYXRoLnJvdW5kKHUubHgpLHUubHk9TWF0aC5yb3VuZCh1Lmx5KTt2YXIgVD17eTplLnksYjp1LmhlaWdodCptW3ddLHQ6dS5oZWlnaHQqZFt3XX07ImZyYWN0aW9uIj09PWUubGVubW9kZT8oVC5sPTAsVC54bD1lLngtZS5sZW4qZFtiXSxULnI9MCxULnhyPWUueCtlLmxlbiptW2JdKTooVC54PWUueCxULmw9dS5vdXRlckxlbmd0aCpkW2JdLFQucj11Lm91dGVyTGVuZ3RoKm1bYl0pLGkuYXV0b01hcmdpbih0LGcoZSksVCl9ZnVuY3Rpb24geCh0LGUscil7aWYoZS5jdXJyZW50dmFsdWUudmlzaWJsZSl7dmFyIG4saSxhPWUuX2RpbXM7c3dpdGNoKGUuY3VycmVudHZhbHVlLnhhbmNob3Ipe2Nhc2UicmlnaHQiOm49YS5pbnB1dEFyZWFMZW5ndGgtZi5jdXJyZW50VmFsdWVJbnNldC1hLmN1cnJlbnRWYWx1ZU1heFdpZHRoLGk9ImxlZnQiO2JyZWFrO2Nhc2UiY2VudGVyIjpuPS41KmEuaW5wdXRBcmVhTGVuZ3RoLGk9Im1pZGRsZSI7YnJlYWs7ZGVmYXVsdDpuPWYuY3VycmVudFZhbHVlSW5zZXQsaT0ibGVmdCJ9dmFyIGw9cy5lbnN1cmVTaW5nbGUodCwidGV4dCIsZi5sYWJlbENsYXNzLChmdW5jdGlvbih0KXt0LmF0dHIoeyJ0ZXh0LWFuY2hvciI6aSwiZGF0YS1ub3RleCI6MX0pfSkpLHU9ZS5jdXJyZW50dmFsdWUucHJlZml4P2UuY3VycmVudHZhbHVlLnByZWZpeDoiIjtpZigic3RyaW5nIj09dHlwZW9mIHIpdSs9cjtlbHNle3ZhciBoPWUuc3RlcHNbZS5hY3RpdmVdLmxhYmVsLGQ9ZS5fZ2QuX2Z1bGxMYXlvdXQuX21ldGE7ZCYmKGg9cy50ZW1wbGF0ZVN0cmluZyhoLGQpKSx1Kz1ofWUuY3VycmVudHZhbHVlLnN1ZmZpeCYmKHUrPWUuY3VycmVudHZhbHVlLnN1ZmZpeCksbC5jYWxsKG8uZm9udCxlLmN1cnJlbnR2YWx1ZS5mb250KS50ZXh0KHUpLmNhbGwoYy5jb252ZXJ0VG9Uc3BhbnMsZS5fZ2QpO3ZhciBtPWMubGluZUNvdW50KGwpLGc9KGEuY3VycmVudFZhbHVlTWF4TGluZXMrMS1tKSplLmN1cnJlbnR2YWx1ZS5mb250LnNpemUqcDtyZXR1cm4gYy5wb3NpdGlvblRleHQobCxuLGcpLGx9fWZ1bmN0aW9uIGIodCxlLHIpe3MuZW5zdXJlU2luZ2xlKHQsInJlY3QiLGYuZ3JpcFJlY3RDbGFzcywoZnVuY3Rpb24obil7bi5jYWxsKEEsZSx0LHIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpLmF0dHIoe3dpZHRoOmYuZ3JpcFdpZHRoLGhlaWdodDpmLmdyaXBIZWlnaHQscng6Zi5ncmlwUmFkaXVzLHJ5OmYuZ3JpcFJhZGl1c30pLmNhbGwoYS5zdHJva2Usci5ib3JkZXJjb2xvcikuY2FsbChhLmZpbGwsci5iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixyLmJvcmRlcndpZHRoKyJweCIpfWZ1bmN0aW9uIF8odCxlLHIpe3ZhciBuPXMuZW5zdXJlU2luZ2xlKHQsInRleHQiLGYubGFiZWxDbGFzcywoZnVuY3Rpb24odCl7dC5hdHRyKHsidGV4dC1hbmNob3IiOiJtaWRkbGUiLCJkYXRhLW5vdGV4IjoxfSl9KSksaT1lLnN0ZXAubGFiZWwsYT1yLl9nZC5fZnVsbExheW91dC5fbWV0YTtyZXR1cm4gYSYmKGk9cy50ZW1wbGF0ZVN0cmluZyhpLGEpKSxuLmNhbGwoby5mb250LHIuZm9udCkudGV4dChpKS5jYWxsKGMuY29udmVydFRvVHNwYW5zLHIuX2dkKSxufWZ1bmN0aW9uIHcodCxlKXt2YXIgcj1zLmVuc3VyZVNpbmdsZSh0LCJnIixmLmxhYmVsc0NsYXNzKSxpPWUuX2RpbXMsYT1yLnNlbGVjdEFsbCgiZy4iK2YubGFiZWxHcm91cENsYXNzKS5kYXRhKGkubGFiZWxTdGVwcyk7YS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5sYWJlbEdyb3VwQ2xhc3MsITApLGEuZXhpdCgpLnJlbW92ZSgpLGEuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7ci5jYWxsKF8sdCxlKSxvLnNldFRyYW5zbGF0ZShyLEUoZSx0LmZyYWN0aW9uKSxmLnRpY2tPZmZzZXQrZS50aWNrbGVuK2UuZm9udC5zaXplKnArZi5sYWJlbE9mZnNldCtpLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX0pKX1mdW5jdGlvbiBUKHQsZSxyLG4saSl7dmFyIGE9TWF0aC5yb3VuZChuKihyLl9zdGVwQ291bnQtMSkpLG89ci5fdmlzaWJsZVN0ZXBzW2FdLl9pbmRleDtvIT09ci5hY3RpdmUmJmsodCxlLHIsbywhMCxpKX1mdW5jdGlvbiBrKHQsZSxyLG4sYSxvKXt2YXIgcz1yLmFjdGl2ZTtyLmFjdGl2ZT1uLHUodC5sYXlvdXQsZi5uYW1lLHIpLmFwcGx5VXBkYXRlKCJhY3RpdmUiLG4pO3ZhciBsPXIuc3RlcHNbci5hY3RpdmVdO2UuY2FsbChTLHIsbyksZS5jYWxsKHgsciksdC5lbWl0KCJwbG90bHlfc2xpZGVyY2hhbmdlIix7c2xpZGVyOnIsc3RlcDpyLnN0ZXBzW3IuYWN0aXZlXSxpbnRlcmFjdGlvbjphLHByZXZpb3VzQWN0aXZlOnN9KSxsJiZsLm1ldGhvZCYmYSYmKGUuX25leHRNZXRob2Q/KGUuX25leHRNZXRob2Quc3RlcD1sLGUuX25leHRNZXRob2QuZG9DYWxsYmFjaz1hLGUuX25leHRNZXRob2QuZG9UcmFuc2l0aW9uPW8pOihlLl9uZXh0TWV0aG9kPXtzdGVwOmwsZG9DYWxsYmFjazphLGRvVHJhbnNpdGlvbjpvfSxlLl9uZXh0TWV0aG9kUmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7dmFyIHI9ZS5fbmV4dE1ldGhvZC5zdGVwO3IubWV0aG9kJiYoci5leGVjdXRlJiZpLmV4ZWN1dGVBUElDb21tYW5kKHQsci5tZXRob2Qsci5hcmdzKSxlLl9uZXh0TWV0aG9kPW51bGwsZS5fbmV4dE1ldGhvZFJhZj1udWxsKX0pKSkpfWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBpPXIubm9kZSgpLG89bi5zZWxlY3QoZSk7ZnVuY3Rpb24gcygpe3JldHVybiByLmRhdGEoKVswXX1mdW5jdGlvbiBsKCl7dmFyIHQ9cygpO2UuZW1pdCgicGxvdGx5X3NsaWRlcnN0YXJ0Iix7c2xpZGVyOnR9KTt2YXIgbD1yLnNlbGVjdCgiLiIrZi5ncmlwUmVjdENsYXNzKTtuLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLG4uZXZlbnQucHJldmVudERlZmF1bHQoKSxsLmNhbGwoYS5maWxsLHQuYWN0aXZlYmdjb2xvcik7dmFyIGM9TCh0LG4ubW91c2UoaSlbMF0pO2Z1bmN0aW9uIHUoKXt2YXIgdD1zKCksYT1MKHQsbi5tb3VzZShpKVswXSk7VChlLHIsdCxhLCExKX1mdW5jdGlvbiBoKCl7dmFyIHQ9cygpO3QuX2RyYWdnaW5nPSExLGwuY2FsbChhLmZpbGwsdC5iZ2NvbG9yKSxvLm9uKCJtb3VzZXVwIixudWxsKSxvLm9uKCJtb3VzZW1vdmUiLG51bGwpLG8ub24oInRvdWNoZW5kIixudWxsKSxvLm9uKCJ0b3VjaG1vdmUiLG51bGwpLGUuZW1pdCgicGxvdGx5X3NsaWRlcmVuZCIse3NsaWRlcjp0LHN0ZXA6dC5zdGVwc1t0LmFjdGl2ZV19KX1UKGUscix0LGMsITApLHQuX2RyYWdnaW5nPSEwLG8ub24oIm1vdXNlbW92ZSIsdSksby5vbigidG91Y2htb3ZlIix1KSxvLm9uKCJtb3VzZXVwIixoKSxvLm9uKCJ0b3VjaGVuZCIsaCl9dC5vbigibW91c2Vkb3duIixsKSx0Lm9uKCJ0b3VjaHN0YXJ0IixsKX1mdW5jdGlvbiBNKHQsZSl7dmFyIHI9dC5zZWxlY3RBbGwoInJlY3QuIitmLnRpY2tSZWN0Q2xhc3MpLmRhdGEoZS5fdmlzaWJsZVN0ZXBzKSxpPWUuX2RpbXM7ci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoZi50aWNrUmVjdENsYXNzLCEwKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmF0dHIoe3dpZHRoOmUudGlja3dpZHRoKyJweCIsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksci5lYWNoKChmdW5jdGlvbih0LHIpe3ZhciBzPXIlaS5sYWJlbFN0cmlkZT09MCxsPW4uc2VsZWN0KHRoaXMpO2wuYXR0cih7aGVpZ2h0OnM/ZS50aWNrbGVuOmUubWlub3J0aWNrbGVufSkuY2FsbChhLmZpbGwsZS50aWNrY29sb3IpLG8uc2V0VHJhbnNsYXRlKGwsRShlLHIvKGUuX3N0ZXBDb3VudC0xKSktLjUqZS50aWNrd2lkdGgsKHM/Zi50aWNrT2Zmc2V0OmYubWlub3JUaWNrT2Zmc2V0KStpLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX0pKX1mdW5jdGlvbiBTKHQsZSxyKXtmb3IodmFyIG49dC5zZWxlY3QoInJlY3QuIitmLmdyaXBSZWN0Q2xhc3MpLGk9MCxhPTA7YTxlLl9zdGVwQ291bnQ7YSsrKWlmKGUuX3Zpc2libGVTdGVwc1thXS5faW5kZXg9PT1lLmFjdGl2ZSl7aT1hO2JyZWFrfXZhciBvPUUoZSxpLyhlLl9zdGVwQ291bnQtMSkpO2lmKCFlLl9pbnZva2luZ0NvbW1hbmQpe3ZhciBzPW47ciYmZS50cmFuc2l0aW9uLmR1cmF0aW9uPjAmJihzPXMudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUudHJhbnNpdGlvbi5kdXJhdGlvbikuZWFzZShlLnRyYW5zaXRpb24uZWFzaW5nKSkscy5hdHRyKCJ0cmFuc2Zvcm0iLGwoby0uNSpmLmdyaXBXaWR0aCxlLl9kaW1zLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KSl9fWZ1bmN0aW9uIEUodCxlKXt2YXIgcj10Ll9kaW1zO3JldHVybiByLmlucHV0QXJlYVN0YXJ0K2Yuc3RlcEluc2V0KyhyLmlucHV0QXJlYUxlbmd0aC0yKmYuc3RlcEluc2V0KSpNYXRoLm1pbigxLE1hdGgubWF4KDAsZSkpfWZ1bmN0aW9uIEwodCxlKXt2YXIgcj10Ll9kaW1zO3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KDAsKGUtZi5zdGVwSW5zZXQtci5pbnB1dEFyZWFTdGFydCkvKHIuaW5wdXRBcmVhTGVuZ3RoLTIqZi5zdGVwSW5zZXQtMipyLmlucHV0QXJlYVN0YXJ0KSkpfWZ1bmN0aW9uIEModCxlLHIpe3ZhciBuPXIuX2RpbXMsaT1zLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixmLnJhaWxUb3VjaFJlY3RDbGFzcywoZnVuY3Rpb24obil7bi5jYWxsKEEsZSx0LHIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpO2kuYXR0cih7d2lkdGg6bi5pbnB1dEFyZWFMZW5ndGgsaGVpZ2h0Ok1hdGgubWF4KG4uaW5wdXRBcmVhV2lkdGgsZi50aWNrT2Zmc2V0K3IudGlja2xlbituLmxhYmVsSGVpZ2h0KX0pLmNhbGwoYS5maWxsLHIuYmdjb2xvcikuYXR0cigib3BhY2l0eSIsMCksby5zZXRUcmFuc2xhdGUoaSwwLG4uY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfWZ1bmN0aW9uIFAodCxlKXt2YXIgcj1lLl9kaW1zLG49ci5pbnB1dEFyZWFMZW5ndGgtMipmLnJhaWxJbnNldCxpPXMuZW5zdXJlU2luZ2xlKHQsInJlY3QiLGYucmFpbFJlY3RDbGFzcyk7aS5hdHRyKHt3aWR0aDpuLGhlaWdodDpmLnJhaWxXaWR0aCxyeDpmLnJhaWxSYWRpdXMscnk6Zi5yYWlsUmFkaXVzLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pLmNhbGwoYS5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChhLmZpbGwsZS5iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKyJweCIpLG8uc2V0VHJhbnNsYXRlKGksZi5yYWlsSW5zZXQsLjUqKHIuaW5wdXRBcmVhV2lkdGgtZi5yYWlsV2lkdGgpK3IuY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dFtmLm5hbWVdLG49W10saT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldO2EudmlzaWJsZSYmKGEuX2dkPWUsbi5wdXNoKGEpKX1yZXR1cm4gbn0oZSx0KSxhPWUuX2luZm9sYXllci5zZWxlY3RBbGwoImcuIitmLmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLmxlbmd0aD4wP1swXTpbXSk7ZnVuY3Rpb24gcyhlKXtlLl9jb21tYW5kT2JzZXJ2ZXImJihlLl9jb21tYW5kT2JzZXJ2ZXIucmVtb3ZlKCksZGVsZXRlIGUuX2NvbW1hbmRPYnNlcnZlciksaS5hdXRvTWFyZ2luKHQsZyhlKSl9aWYoYS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5jb250YWluZXJDbGFzc05hbWUsITApLnN0eWxlKCJjdXJzb3IiLCJldy1yZXNpemUiKSxhLmV4aXQoKS5lYWNoKChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy4iK2YuZ3JvdXBDbGFzc05hbWUpLmVhY2gocyl9KSkucmVtb3ZlKCksMCE9PXIubGVuZ3RoKXt2YXIgbD1hLnNlbGVjdEFsbCgiZy4iK2YuZ3JvdXBDbGFzc05hbWUpLmRhdGEocix2KTtsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmdyb3VwQ2xhc3NOYW1lLCEwKSxsLmV4aXQoKS5lYWNoKHMpLnJlbW92ZSgpO2Zvcih2YXIgYz0wO2M8ci5sZW5ndGg7YysrKXt2YXIgdT1yW2NdO3kodCx1KX1sLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpOyFmdW5jdGlvbih0KXt2YXIgZT10Ll9kaW1zO2UubGFiZWxTdGVwcz1bXTtmb3IodmFyIHI9dC5fc3RlcENvdW50LG49MDtuPHI7bis9ZS5sYWJlbFN0cmlkZSllLmxhYmVsU3RlcHMucHVzaCh7ZnJhY3Rpb246bi8oci0xKSxzdGVwOnQuX3Zpc2libGVTdGVwc1tuXX0pfShlKSxpLm1hbmFnZUNvbW1hbmRPYnNlcnZlcih0LGUsZS5fdmlzaWJsZVN0ZXBzLChmdW5jdGlvbihlKXt2YXIgbj1yLmRhdGEoKVswXTtuLmFjdGl2ZSE9PWUuaW5kZXgmJihuLl9kcmFnZ2luZ3x8ayh0LHIsbixlLmluZGV4LCExLCEwKSl9KSksZnVuY3Rpb24odCxlLHIpeyhyLnN0ZXBzW3IuYWN0aXZlXXx8e30pLnZpc2libGV8fChyLmFjdGl2ZT1yLl92aXNpYmxlU3RlcHNbMF0uX2luZGV4KTtlLmNhbGwoeCxyKS5jYWxsKFAscikuY2FsbCh3LHIpLmNhbGwoTSxyKS5jYWxsKEMsdCxyKS5jYWxsKGIsdCxyKTt2YXIgbj1yLl9kaW1zO28uc2V0VHJhbnNsYXRlKGUsbi5seCtyLnBhZC5sLG4ubHkrci5wYWQudCksZS5jYWxsKFMsciwhMSksZS5jYWxsKHgscil9KHQsbi5zZWxlY3QodGhpcyksZSl9KSl9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3NDQsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuLi8uLi9wbG90cy9wbG90cyI6ODkwLCIuLi9jb2xvciI6NjM5LCIuLi9kcmF3aW5nIjo2NjEsIi4vY29uc3RhbnRzIjo3MzMsIkBwbG90bHkvZDMiOjU4fV0sNzM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6bi5uYW1lLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGRyYXc6dCgiLi9kcmF3Iil9fSx7Ii4vYXR0cmlidXRlcyI6NzMyLCIuL2NvbnN0YW50cyI6NzMzLCIuL2RlZmF1bHRzIjo3MzQsIi4vZHJhdyI6NzM1fV0sNzM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL2xpYiIpLGw9cy5zdHJUcmFuc2xhdGUsYz10KCIuLi9kcmF3aW5nIiksdT10KCIuLi9jb2xvciIpLGY9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksaD10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikscD10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuT1BQT1NJVEVfU0lERSxkPS8gW1hZXVswLTldKiAvO2UuZXhwb3J0cz17ZHJhdzpmdW5jdGlvbih0LGUscil7dmFyIG0sZz1yLnByb3BDb250YWluZXIsdj1yLnByb3BOYW1lLHk9ci5wbGFjZWhvbGRlcix4PXIudHJhY2VJbmRleCxiPXIuYXZvaWR8fHt9LF89ci5hdHRyaWJ1dGVzLHc9ci50cmFuc2Zvcm0sVD1yLmNvbnRhaW5lckdyb3VwLGs9dC5fZnVsbExheW91dCxBPTEsTT0hMSxTPWcudGl0bGUsRT0oUyYmUy50ZXh0P1MudGV4dDoiIikudHJpbSgpLEw9UyYmUy5mb250P1MuZm9udDp7fSxDPUwuZmFtaWx5LFA9TC5zaXplLEk9TC5jb2xvcjsidGl0bGUudGV4dCI9PT12P209InRpdGxlVGV4dCI6LTEhPT12LmluZGV4T2YoImF4aXMiKT9tPSJheGlzVGl0bGVUZXh0Ijp2LmluZGV4T2YoITApJiYobT0iY29sb3JiYXJUaXRsZVRleHQiKTt2YXIgTz10Ll9jb250ZXh0LmVkaXRzW21dOyIiPT09RT9BPTA6RS5yZXBsYWNlKGQsIiAlICIpPT09eS5yZXBsYWNlKGQsIiAlICIpJiYoQT0uMixNPSEwLE98fChFPSIiKSksci5fbWV0YT9FPXMudGVtcGxhdGVTdHJpbmcoRSxyLl9tZXRhKTprLl9tZXRhJiYoRT1zLnRlbXBsYXRlU3RyaW5nKEUsay5fbWV0YSkpO3ZhciB6PUV8fE87VHx8KFQ9cy5lbnN1cmVTaW5nbGUoay5faW5mb2xheWVyLCJnIiwiZy0iK2UpKTt2YXIgRD1ULnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoej9bMF06W10pO2lmKEQuZW50ZXIoKS5hcHBlbmQoInRleHQiKSxELnRleHQoRSkuYXR0cigiY2xhc3MiLGUpLEQuZXhpdCgpLnJlbW92ZSgpLCF6KXJldHVybiBUO2Z1bmN0aW9uIFIodCl7cy5zeW5jT3JBc3luYyhbRixCXSx0KX1mdW5jdGlvbiBGKGUpe3ZhciByO3JldHVybiB3PyhyPSIiLHcucm90YXRlJiYocis9InJvdGF0ZSgiK1t3LnJvdGF0ZSxfLngsXy55XSsiKSIpLHcub2Zmc2V0JiYocis9bCgwLHcub2Zmc2V0KSkpOnI9bnVsbCxlLmF0dHIoInRyYW5zZm9ybSIsciksZS5zdHlsZSh7ImZvbnQtZmFtaWx5IjpDLCJmb250LXNpemUiOm4ucm91bmQoUCwyKSsicHgiLGZpbGw6dS5yZ2IoSSksb3BhY2l0eTpBKnUub3BhY2l0eShJKSwiZm9udC13ZWlnaHQiOmEuZm9udFdlaWdodH0pLmF0dHIoXykuY2FsbChmLmNvbnZlcnRUb1RzcGFucyx0KSxhLnByZXZpb3VzUHJvbWlzZXModCl9ZnVuY3Rpb24gQih0KXt2YXIgZT1uLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKTtpZihiJiZiLnNlbGVjdGlvbiYmYi5zaWRlJiZFKXtlLmF0dHIoInRyYW5zZm9ybSIsbnVsbCk7dmFyIHI9cFtiLnNpZGVdLGE9ImxlZnQiPT09Yi5zaWRlfHwidG9wIj09PWIuc2lkZT8tMToxLG89aShiLnBhZCk/Yi5wYWQ6Mix1PWMuYkJveChlLm5vZGUoKSksZj17bGVmdDowLHRvcDowLHJpZ2h0Omsud2lkdGgsYm90dG9tOmsuaGVpZ2h0fSxoPWIubWF4U2hpZnR8fGEqKGZbYi5zaWRlXS11W2Iuc2lkZV0pLGQ9MDtpZihoPDApZD1oO2Vsc2V7dmFyIG09Yi5vZmZzZXRMZWZ0fHwwLGc9Yi5vZmZzZXRUb3B8fDA7dS5sZWZ0LT1tLHUucmlnaHQtPW0sdS50b3AtPWcsdS5ib3R0b20tPWcsYi5zZWxlY3Rpb24uZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1jLmJCb3godGhpcyk7cy5iQm94SW50ZXJzZWN0KHUsdCxvKSYmKGQ9TWF0aC5tYXgoZCxhKih0W2Iuc2lkZV0tdVtyXSkrbykpfSkpLGQ9TWF0aC5taW4oaCxkKX1pZihkPjB8fGg8MCl7dmFyIHY9e2xlZnQ6Wy1kLDBdLHJpZ2h0OltkLDBdLHRvcDpbMCwtZF0sYm90dG9tOlswLGRdfVtiLnNpZGVdO2UuYXR0cigidHJhbnNmb3JtIixsKHZbMF0sdlsxXSkpfX19cmV0dXJuIEQuY2FsbChSKSxPJiYoRT9ELm9uKCIub3BhY2l0eSIsbnVsbCk6KEE9MCxNPSEwLEQudGV4dCh5KS5vbigibW91c2VvdmVyLm9wYWNpdHkiLChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihoLlNIT1dfUExBQ0VIT0xERVIpLnN0eWxlKCJvcGFjaXR5IiwxKX0pKS5vbigibW91c2VvdXQub3BhY2l0eSIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGguSElERV9QTEFDRUhPTERFUikuc3R5bGUoIm9wYWNpdHkiLDApfSkpKSxELmNhbGwoZi5tYWtlRWRpdGFibGUse2dkOnR9KS5vbigiZWRpdCIsKGZ1bmN0aW9uKGUpe3ZvaWQgMCE9PXg/by5jYWxsKCJfZ3VpUmVzdHlsZSIsdCx2LGUseCk6by5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsdixlKX0pKS5vbigiY2FuY2VsIiwoZnVuY3Rpb24oKXt0aGlzLnRleHQodGhpcy5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIikpLmNhbGwoUil9KSkub24oImlucHV0IiwoZnVuY3Rpb24odCl7dGhpcy50ZXh0KHR8fCIgIikuY2FsbChmLnBvc2l0aW9uVGV4dCxfLngsXy55KX0pKSksRC5jbGFzc2VkKCJqcy1wbGFjZWhvbGRlciIsTSksVH19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjc0NCwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NzUxLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDIsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4OTAsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL2NvbG9yIjo2MzksIi4uL2RyYXdpbmciOjY2MSwiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw3Mzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxzPXQoIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXksYz1sKCJidXR0b24iLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIn0sbWV0aG9kOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyZXN0eWxlIiwicmVsYXlvdXQiLCJhbmltYXRlIiwidXBkYXRlIiwic2tpcCJdLGRmbHQ6InJlc3R5bGUifSxhcmdzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOlt7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifV19LGFyZ3MyOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOlt7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifV19LGxhYmVsOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGV4ZWN1dGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9fSk7ZS5leHBvcnRzPW8obCgidXBkYXRlbWVudSIse19hcnJheUF0dHJSZWdleHBzOlsvXnVwZGF0ZW1lbnVzXFsoMHxbMS05XVswLTldKylcXVwuYnV0dG9ucy9dLHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4ifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJkcm9wZG93biIsImJ1dHRvbnMiXSxkZmx0OiJkcm9wZG93biJ9LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsInJpZ2h0IiwidXAiLCJkb3duIl0sZGZsdDoiZG93biJ9LGFjdGl2ZTp7dmFsVHlwZToiaW50ZWdlciIsbWluOi0xLGRmbHQ6MH0sc2hvd2FjdGl2ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sYnV0dG9uczpjLHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6LS4wNX0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6InJpZ2h0In0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDoxfSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoidG9wIn0scGFkOmEocyh7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSx7fSksZm9udDpuKHt9KSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmJvcmRlckxpbmV9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In19KSwiYXJyYXlkcmF3IiwiZnJvbS1yb290Iil9LHsiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MDksIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4NTYsIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzIjo4ODksIi4uL2NvbG9yL2F0dHJpYnV0ZXMiOjYzOH1dLDczOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InVwZGF0ZW1lbnVzIixjb250YWluZXJDbGFzc05hbWU6InVwZGF0ZW1lbnUtY29udGFpbmVyIixoZWFkZXJHcm91cENsYXNzTmFtZToidXBkYXRlbWVudS1oZWFkZXItZ3JvdXAiLGhlYWRlckNsYXNzTmFtZToidXBkYXRlbWVudS1oZWFkZXIiLGhlYWRlckFycm93Q2xhc3NOYW1lOiJ1cGRhdGVtZW51LWhlYWRlci1hcnJvdyIsZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZToidXBkYXRlbWVudS1kcm9wZG93bi1idXR0b24tZ3JvdXAiLGRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWRyb3Bkb3duLWJ1dHRvbiIsYnV0dG9uQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWJ1dHRvbiIsaXRlbVJlY3RDbGFzc05hbWU6InVwZGF0ZW1lbnUtaXRlbS1yZWN0IixpdGVtVGV4dENsYXNzTmFtZToidXBkYXRlbWVudS1pdGVtLXRleHQiLG1lbnVJbmRleEF0dHJOYW1lOiJ1cGRhdGVtZW51LWFjdGl2ZS1pbmRleCIsYXV0b01hcmdpbklkUm9vdDoidXBkYXRlbWVudS0iLGJsYW5rSGVhZGVyT3B0czp7bGFiZWw6IiAgIn0sbWluV2lkdGg6MzAsbWluSGVpZ2h0OjMwLHRleHRQYWRYOjI0LGFycm93UGFkWDoxNixyeDoyLHJ5OjIsdGV4dE9mZnNldFg6MTIsdGV4dE9mZnNldFk6MyxhcnJvd09mZnNldFg6NCxnYXBCdXR0b25IZWFkZXI6NSxnYXBCdXR0b246MixhY3RpdmVDb2xvcjoiI0Y0RkFGRiIsaG92ZXJDb2xvcjoiI0Y0RkFGRiIsYXJyb3dTeW1ib2w6e2xlZnQ6Ilx1MjVjNCIscmlnaHQ6Ilx1MjViYSIsdXA6Ilx1MjViMiIsZG93bjoiXHUyNWJjIn19fSx7fV0sNzQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4vY29uc3RhbnRzIikubmFtZSxzPWEuYnV0dG9ucztmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBvKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9bygidmlzaWJsZSIsaSh0LGUse25hbWU6ImJ1dHRvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpjfSkubGVuZ3RoPjApJiYobygiYWN0aXZlIiksbygiZGlyZWN0aW9uIiksbygidHlwZSIpLG8oInNob3dhY3RpdmUiKSxvKCJ4IiksbygieSIpLG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLG8oInhhbmNob3IiKSxvKCJ5YW5jaG9yIiksbygicGFkLnQiKSxvKCJwYWQuciIpLG8oInBhZC5iIiksbygicGFkLmwiKSxuLmNvZXJjZUZvbnQobywiZm9udCIsci5mb250KSxvKCJiZ2NvbG9yIixyLnBhcGVyX2JnY29sb3IpLG8oImJvcmRlcmNvbG9yIiksbygiYm9yZGVyd2lkdGgiKSl9ZnVuY3Rpb24gYyh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1yKCJ2aXNpYmxlIiwic2tpcCI9PT10Lm1ldGhvZHx8QXJyYXkuaXNBcnJheSh0LmFyZ3MpKSYmKHIoIm1ldGhvZCIpLHIoImFyZ3MiKSxyKCJhcmdzMiIpLHIoImxhYmVsIikscigiZXhlY3V0ZSIpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpKHQsZSx7bmFtZTpvLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjgyMiwiLi9hdHRyaWJ1dGVzIjo3MzgsIi4vY29uc3RhbnRzIjo3Mzl9XSw3NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxhPXQoIi4uL2NvbG9yIiksbz10KCIuLi9kcmF3aW5nIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yLHU9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORyxmPXQoIi4vY29uc3RhbnRzIiksaD10KCIuL3Njcm9sbGJveCIpO2Z1bmN0aW9uIHAodCl7cmV0dXJuIHQuX2luZGV4fWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4rdC5hdHRyKGYubWVudUluZGV4QXR0ck5hbWUpPT09ZS5faW5kZXh9ZnVuY3Rpb24gbSh0LGUscixuLGksYSxvLHMpe2UuYWN0aXZlPW8sYyh0LmxheW91dCxmLm5hbWUsZSkuYXBwbHlVcGRhdGUoImFjdGl2ZSIsbyksImJ1dHRvbnMiPT09ZS50eXBlP3YodCxuLG51bGwsbnVsbCxlKToiZHJvcGRvd24iPT09ZS50eXBlJiYoaS5hdHRyKGYubWVudUluZGV4QXR0ck5hbWUsIi0xIiksZyh0LG4saSxhLGUpLHN8fHYodCxuLGksYSxlKSl9ZnVuY3Rpb24gZyh0LGUscixuLGkpe3ZhciBhPXMuZW5zdXJlU2luZ2xlKGUsImciLGYuaGVhZGVyQ2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpLGw9aS5fZGltcyxjPWkuYWN0aXZlLHU9aS5idXR0b25zW2NdfHxmLmJsYW5rSGVhZGVyT3B0cyxoPXt5OmkucGFkLnQseVBhZDowLHg6aS5wYWQubCx4UGFkOjAsaW5kZXg6MH0scD17d2lkdGg6bC5oZWFkZXJXaWR0aCxoZWlnaHQ6bC5oZWFkZXJIZWlnaHR9O2EuY2FsbCh5LGksdSx0KS5jYWxsKE0saSxoLHApLHMuZW5zdXJlU2luZ2xlKGUsInRleHQiLGYuaGVhZGVyQXJyb3dDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cigidGV4dC1hbmNob3IiLCJlbmQiKS5jYWxsKG8uZm9udCxpLmZvbnQpLnRleHQoZi5hcnJvd1N5bWJvbFtpLmRpcmVjdGlvbl0pfSkpLmF0dHIoe3g6bC5oZWFkZXJXaWR0aC1mLmFycm93T2Zmc2V0WCtpLnBhZC5sLHk6bC5oZWFkZXJIZWlnaHQvMitmLnRleHRPZmZzZXRZK2kucGFkLnR9KSxhLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7ci5jYWxsKFMsU3RyaW5nKGQocixpKT8tMTppLl9pbmRleCkpLHYodCxlLHIsbixpKX0pKSxhLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe2EuY2FsbCh3KX0pKSxhLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7YS5jYWxsKFQsaSl9KSksby5zZXRUcmFuc2xhdGUoZSxsLmx4LGwubHkpfWZ1bmN0aW9uIHYodCxlLHIsYSxvKXtyfHwocj1lKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpO3ZhciBsPWZ1bmN0aW9uKHQpe3JldHVybi0xPT0rdC5hdHRyKGYubWVudUluZGV4QXR0ck5hbWUpfShyKSYmImJ1dHRvbnMiIT09by50eXBlP1tdOm8uYnV0dG9ucyxjPSJkcm9wZG93biI9PT1vLnR5cGU/Zi5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZTpmLmJ1dHRvbkNsYXNzTmFtZSx1PXIuc2VsZWN0QWxsKCJnLiIrYykuZGF0YShzLmZpbHRlclZpc2libGUobCkpLGg9dS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoYywhMCkscD11LmV4aXQoKTsiZHJvcGRvd24iPT09by50eXBlPyhoLmF0dHIoIm9wYWNpdHkiLCIwIikudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIxIikscC50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjAiKS5yZW1vdmUoKSk6cC5yZW1vdmUoKTt2YXIgZD0wLGc9MCx2PW8uX2RpbXMseD0tMSE9PVsidXAiLCJkb3duIl0uaW5kZXhPZihvLmRpcmVjdGlvbik7ImRyb3Bkb3duIj09PW8udHlwZSYmKHg/Zz12LmhlYWRlckhlaWdodCtmLmdhcEJ1dHRvbkhlYWRlcjpkPXYuaGVhZGVyV2lkdGgrZi5nYXBCdXR0b25IZWFkZXIpLCJkcm9wZG93biI9PT1vLnR5cGUmJiJ1cCI9PT1vLmRpcmVjdGlvbiYmKGc9LWYuZ2FwQnV0dG9uSGVhZGVyK2YuZ2FwQnV0dG9uLXYub3BlbkhlaWdodCksImRyb3Bkb3duIj09PW8udHlwZSYmImxlZnQiPT09by5kaXJlY3Rpb24mJihkPS1mLmdhcEJ1dHRvbkhlYWRlcitmLmdhcEJ1dHRvbi12Lm9wZW5XaWR0aCk7dmFyIGI9e3g6di5seCtkK28ucGFkLmwseTp2Lmx5K2crby5wYWQudCx5UGFkOmYuZ2FwQnV0dG9uLHhQYWQ6Zi5nYXBCdXR0b24saW5kZXg6MH0saz17bDpiLngrby5ib3JkZXJ3aWR0aCx0OmIueStvLmJvcmRlcndpZHRofTt1LmVhY2goKGZ1bmN0aW9uKHMsbCl7dmFyIGM9bi5zZWxlY3QodGhpcyk7Yy5jYWxsKHksbyxzLHQpLmNhbGwoTSxvLGIpLGMub24oImNsaWNrIiwoZnVuY3Rpb24oKXtuLmV2ZW50LmRlZmF1bHRQcmV2ZW50ZWR8fChzLmV4ZWN1dGUmJihzLmFyZ3MyJiZvLmFjdGl2ZT09PWw/KG0odCxvLDAsZSxyLGEsLTEpLGkuZXhlY3V0ZUFQSUNvbW1hbmQodCxzLm1ldGhvZCxzLmFyZ3MyKSk6KG0odCxvLDAsZSxyLGEsbCksaS5leGVjdXRlQVBJQ29tbWFuZCh0LHMubWV0aG9kLHMuYXJncykpKSx0LmVtaXQoInBsb3RseV9idXR0b25jbGlja2VkIix7bWVudTpvLGJ1dHRvbjpzLGFjdGl2ZTpvLmFjdGl2ZX0pKX0pKSxjLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe2MuY2FsbCh3KX0pKSxjLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7Yy5jYWxsKFQsbyksdS5jYWxsKF8sbyl9KSl9KSksdS5jYWxsKF8sbykseD8oay53PU1hdGgubWF4KHYub3BlbldpZHRoLHYuaGVhZGVyV2lkdGgpLGsuaD1iLnktay50KTooay53PWIueC1rLmwsay5oPU1hdGgubWF4KHYub3BlbkhlaWdodCx2LmhlYWRlckhlaWdodCkpLGsuZGlyZWN0aW9uPW8uZGlyZWN0aW9uLGEmJih1LnNpemUoKT9mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scyxsLGM9aS5kaXJlY3Rpb24sdT0idXAiPT09Y3x8ImRvd24iPT09YyxoPWkuX2RpbXMscD1pLmFjdGl2ZTtpZih1KWZvcihzPTAsbD0wO2w8cDtsKyspcys9aC5oZWlnaHRzW2xdK2YuZ2FwQnV0dG9uO2Vsc2UgZm9yKG89MCxsPTA7bDxwO2wrKylvKz1oLndpZHRoc1tsXStmLmdhcEJ1dHRvbjtuLmVuYWJsZShhLG8scyksbi5oYmFyJiZuLmhiYXIuYXR0cigib3BhY2l0eSIsIjAiKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjEiKTtuLnZiYXImJm4udmJhci5hdHRyKCJvcGFjaXR5IiwiMCIpLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMSIpfSgwLDAsMCxhLG8sayk6ZnVuY3Rpb24odCl7dmFyIGU9ISF0LmhiYXIscj0hIXQudmJhcjtlJiZ0LmhiYXIudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIwIikuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtlPSExLHJ8fHQuZGlzYWJsZSgpfSkpO3ImJnQudmJhci50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjAiKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe3I9ITEsZXx8dC5kaXNhYmxlKCl9KSl9KGEpKX1mdW5jdGlvbiB5KHQsZSxyLG4pe3QuY2FsbCh4LGUpLmNhbGwoYixlLHIsbil9ZnVuY3Rpb24geCh0LGUpe3MuZW5zdXJlU2luZ2xlKHQsInJlY3QiLGYuaXRlbVJlY3RDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih7cng6Zi5yeCxyeTpmLnJ5LCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkpLmNhbGwoYS5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChhLmZpbGwsZS5iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKyJweCIpfWZ1bmN0aW9uIGIodCxlLHIsbil7dmFyIGk9cy5lbnN1cmVTaW5nbGUodCwidGV4dCIsZi5pdGVtVGV4dENsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHsidGV4dC1hbmNob3IiOiJzdGFydCIsImRhdGEtbm90ZXgiOjF9KX0pKSxhPXIubGFiZWwsYz1uLl9mdWxsTGF5b3V0Ll9tZXRhO2MmJihhPXMudGVtcGxhdGVTdHJpbmcoYSxjKSksaS5jYWxsKG8uZm9udCxlLmZvbnQpLnRleHQoYSkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxuKX1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9ZS5hY3RpdmU7dC5lYWNoKChmdW5jdGlvbih0LGkpe3ZhciBvPW4uc2VsZWN0KHRoaXMpO2k9PT1yJiZlLnNob3dhY3RpdmUmJm8uc2VsZWN0KCJyZWN0LiIrZi5pdGVtUmVjdENsYXNzTmFtZSkuY2FsbChhLmZpbGwsZi5hY3RpdmVDb2xvcil9KSl9ZnVuY3Rpb24gdyh0KXt0LnNlbGVjdCgicmVjdC4iK2YuaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoYS5maWxsLGYuaG92ZXJDb2xvcil9ZnVuY3Rpb24gVCh0LGUpe3Quc2VsZWN0KCJyZWN0LiIrZi5pdGVtUmVjdENsYXNzTmFtZSkuY2FsbChhLmZpbGwsZS5iZ2NvbG9yKX1mdW5jdGlvbiBrKHQsZSl7dmFyIHI9ZS5fZGltcz17d2lkdGgxOjAsaGVpZ2h0MTowLGhlaWdodHM6W10sd2lkdGhzOltdLHRvdGFsV2lkdGg6MCx0b3RhbEhlaWdodDowLG9wZW5XaWR0aDowLG9wZW5IZWlnaHQ6MCxseDowLGx5OjB9LGE9by50ZXN0ZXIuc2VsZWN0QWxsKCJnLiIrZi5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSkuZGF0YShzLmZpbHRlclZpc2libGUoZS5idXR0b25zKSk7YS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSwhMCk7dmFyIGM9LTEhPT1bInVwIiwiZG93biJdLmluZGV4T2YoZS5kaXJlY3Rpb24pO2EuZWFjaCgoZnVuY3Rpb24oaSxhKXt2YXIgcz1uLnNlbGVjdCh0aGlzKTtzLmNhbGwoeSxlLGksdCk7dmFyIGg9cy5zZWxlY3QoIi4iK2YuaXRlbVRleHRDbGFzc05hbWUpLHA9aC5ub2RlKCkmJm8uYkJveChoLm5vZGUoKSkud2lkdGgsZD1NYXRoLm1heChwK2YudGV4dFBhZFgsZi5taW5XaWR0aCksbT1lLmZvbnQuc2l6ZSp1LGc9bC5saW5lQ291bnQoaCksdj1NYXRoLm1heChtKmcsZi5taW5IZWlnaHQpK2YudGV4dE9mZnNldFk7dj1NYXRoLmNlaWwodiksZD1NYXRoLmNlaWwoZCksci53aWR0aHNbYV09ZCxyLmhlaWdodHNbYV09dixyLmhlaWdodDE9TWF0aC5tYXgoci5oZWlnaHQxLHYpLHIud2lkdGgxPU1hdGgubWF4KHIud2lkdGgxLGQpLGM/KHIudG90YWxXaWR0aD1NYXRoLm1heChyLnRvdGFsV2lkdGgsZCksci5vcGVuV2lkdGg9ci50b3RhbFdpZHRoLHIudG90YWxIZWlnaHQrPXYrZi5nYXBCdXR0b24sci5vcGVuSGVpZ2h0Kz12K2YuZ2FwQnV0dG9uKTooci50b3RhbFdpZHRoKz1kK2YuZ2FwQnV0dG9uLHIub3BlbldpZHRoKz1kK2YuZ2FwQnV0dG9uLHIudG90YWxIZWlnaHQ9TWF0aC5tYXgoci50b3RhbEhlaWdodCx2KSxyLm9wZW5IZWlnaHQ9ci50b3RhbEhlaWdodCl9KSksYz9yLnRvdGFsSGVpZ2h0LT1mLmdhcEJ1dHRvbjpyLnRvdGFsV2lkdGgtPWYuZ2FwQnV0dG9uLHIuaGVhZGVyV2lkdGg9ci53aWR0aDErZi5hcnJvd1BhZFgsci5oZWFkZXJIZWlnaHQ9ci5oZWlnaHQxLCJkcm9wZG93biI9PT1lLnR5cGUmJihjPyhyLndpZHRoMSs9Zi5hcnJvd1BhZFgsci50b3RhbEhlaWdodD1yLmhlaWdodDEpOnIudG90YWxXaWR0aD1yLndpZHRoMSxyLnRvdGFsV2lkdGgrPWYuYXJyb3dQYWRYKSxhLnJlbW92ZSgpO3ZhciBoPXIudG90YWxXaWR0aCtlLnBhZC5sK2UucGFkLnIscD1yLnRvdGFsSGVpZ2h0K2UucGFkLnQrZS5wYWQuYixkPXQuX2Z1bGxMYXlvdXQuX3NpemU7ci5seD1kLmwrZC53KmUueCxyLmx5PWQudCtkLmgqKDEtZS55KTt2YXIgbT0ibGVmdCI7cy5pc1JpZ2h0QW5jaG9yKGUpJiYoci5seC09aCxtPSJyaWdodCIpLHMuaXNDZW50ZXJBbmNob3IoZSkmJihyLmx4LT1oLzIsbT0iY2VudGVyIik7dmFyIGc9InRvcCI7cy5pc0JvdHRvbUFuY2hvcihlKSYmKHIubHktPXAsZz0iYm90dG9tIikscy5pc01pZGRsZUFuY2hvcihlKSYmKHIubHktPXAvMixnPSJtaWRkbGUiKSxyLnRvdGFsV2lkdGg9TWF0aC5jZWlsKHIudG90YWxXaWR0aCksci50b3RhbEhlaWdodD1NYXRoLmNlaWwoci50b3RhbEhlaWdodCksci5seD1NYXRoLnJvdW5kKHIubHgpLHIubHk9TWF0aC5yb3VuZChyLmx5KSxpLmF1dG9NYXJnaW4odCxBKGUpLHt4OmUueCx5OmUueSxsOmgqKHtyaWdodDoxLGNlbnRlcjouNX1bbV18fDApLHI6aCooe2xlZnQ6MSxjZW50ZXI6LjV9W21dfHwwKSxiOnAqKHt0b3A6MSxtaWRkbGU6LjV9W2ddfHwwKSx0OnAqKHtib3R0b206MSxtaWRkbGU6LjV9W2ddfHwwKX0pfWZ1bmN0aW9uIEEodCl7cmV0dXJuIGYuYXV0b01hcmdpbklkUm9vdCt0Ll9pbmRleH1mdW5jdGlvbiBNKHQsZSxyLG4pe249bnx8e307dmFyIGk9dC5zZWxlY3QoIi4iK2YuaXRlbVJlY3RDbGFzc05hbWUpLGE9dC5zZWxlY3QoIi4iK2YuaXRlbVRleHRDbGFzc05hbWUpLHM9ZS5ib3JkZXJ3aWR0aCxjPXIuaW5kZXgsaD1lLl9kaW1zO28uc2V0VHJhbnNsYXRlKHQscytyLngscytyLnkpO3ZhciBwPS0xIT09WyJ1cCIsImRvd24iXS5pbmRleE9mKGUuZGlyZWN0aW9uKSxkPW4uaGVpZ2h0fHwocD9oLmhlaWdodHNbY106aC5oZWlnaHQxKTtpLmF0dHIoe3g6MCx5OjAsd2lkdGg6bi53aWR0aHx8KHA/aC53aWR0aDE6aC53aWR0aHNbY10pLGhlaWdodDpkfSk7dmFyIG09ZS5mb250LnNpemUqdSxnPShsLmxpbmVDb3VudChhKS0xKSptLzI7bC5wb3NpdGlvblRleHQoYSxmLnRleHRPZmZzZXRYLGQvMi1nK2YudGV4dE9mZnNldFkpLHA/ci55Kz1oLmhlaWdodHNbY10rci55UGFkOnIueCs9aC53aWR0aHNbY10rci54UGFkLHIuaW5kZXgrK31mdW5jdGlvbiBTKHQsZSl7dC5hdHRyKGYubWVudUluZGV4QXR0ck5hbWUsZXx8Ii0xIikuc2VsZWN0QWxsKCJnLiIrZi5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSkucmVtb3ZlKCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1zLmZpbHRlclZpc2libGUoZVtmLm5hbWVdKTtmdW5jdGlvbiBhKGUpe2kuYXV0b01hcmdpbih0LEEoZSkpfXZhciBvPWUuX21lbnVsYXllci5zZWxlY3RBbGwoImcuIitmLmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLmxlbmd0aD4wP1swXTpbXSk7aWYoby5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5jb250YWluZXJDbGFzc05hbWUsITApLnN0eWxlKCJjdXJzb3IiLCJwb2ludGVyIiksby5leGl0KCkuZWFjaCgoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuIitmLmhlYWRlckdyb3VwQ2xhc3NOYW1lKS5lYWNoKGEpfSkpLnJlbW92ZSgpLDAhPT1yLmxlbmd0aCl7dmFyIGw9by5zZWxlY3RBbGwoImcuIitmLmhlYWRlckdyb3VwQ2xhc3NOYW1lKS5kYXRhKHIscCk7bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5oZWFkZXJHcm91cENsYXNzTmFtZSwhMCk7Zm9yKHZhciBjPXMuZW5zdXJlU2luZ2xlKG8sImciLGYuZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pKSx1PTA7dTxyLmxlbmd0aDt1Kyspe3ZhciB5PXJbdV07ayh0LHkpfXZhciB4PSJ1cGRhdGVtZW51cyIrZS5fdWlkLGI9bmV3IGgodCxjLHgpO2wuZW50ZXIoKS5zaXplKCkmJihjLm5vZGUoKS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGMubm9kZSgpKSxjLmNhbGwoUykpLGwuZXhpdCgpLmVhY2goKGZ1bmN0aW9uKHQpe2MuY2FsbChTKSxhKHQpfSkpLnJlbW92ZSgpLGwuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT0iZHJvcGRvd24iPT09ZS50eXBlP2M6bnVsbDtpLm1hbmFnZUNvbW1hbmRPYnNlcnZlcih0LGUsZS5idXR0b25zLChmdW5jdGlvbihuKXttKHQsZSxlLmJ1dHRvbnNbbi5pbmRleF0scixhLGIsbi5pbmRleCwhMCl9KSksImRyb3Bkb3duIj09PWUudHlwZT8oZyh0LHIsYyxiLGUpLGQoYyxlKSYmdih0LHIsYyxiLGUpKTp2KHQscixudWxsLG51bGwsZSl9KSl9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3NDQsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuLi8uLi9wbG90cy9wbG90cyI6ODkwLCIuLi9jb2xvciI6NjM5LCIuLi9kcmF3aW5nIjo2NjEsIi4vY29uc3RhbnRzIjo3MzksIi4vc2Nyb2xsYm94Ijo3NDMsIkBwbG90bHkvZDMiOjU4fV0sNzQyOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzczNl1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4vYXR0cmlidXRlcyI6NzM4LCIuL2NvbnN0YW50cyI6NzM5LCIuL2RlZmF1bHRzIjo3NDAsIi4vZHJhdyI6NzQxLGR1cDo3MzZ9XSw3NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXM7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vY29sb3IiKSxhPXQoIi4uL2RyYXdpbmciKSxvPXQoIi4uLy4uL2xpYiIpO2Z1bmN0aW9uIHModCxlLHIpe3RoaXMuZ2Q9dCx0aGlzLmNvbnRhaW5lcj1lLHRoaXMuaWQ9cix0aGlzLnBvc2l0aW9uPW51bGwsdGhpcy50cmFuc2xhdGVYPW51bGwsdGhpcy50cmFuc2xhdGVZPW51bGwsdGhpcy5oYmFyPW51bGwsdGhpcy52YmFyPW51bGwsdGhpcy5iZz10aGlzLmNvbnRhaW5lci5zZWxlY3RBbGwoInJlY3Quc2Nyb2xsYm94LWJnIikuZGF0YShbMF0pLHRoaXMuYmcuZXhpdCgpLm9uKCIuZHJhZyIsbnVsbCkub24oIndoZWVsIixudWxsKS5yZW1vdmUoKSx0aGlzLmJnLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic2Nyb2xsYm94LWJnIiwhMCkuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cih7b3BhY2l0eTowLHg6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0pfXMuYmFyV2lkdGg9MixzLmJhckxlbmd0aD0yMCxzLmJhclJhZGl1cz0yLHMuYmFyUGFkPTEscy5iYXJDb2xvcj0iIzgwOEJBNCIscy5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbz10aGlzLmdkLl9mdWxsTGF5b3V0LGw9by53aWR0aCxjPW8uaGVpZ2h0O3RoaXMucG9zaXRpb249dDt2YXIgdSxmLGgscCxkPXRoaXMucG9zaXRpb24ubCxtPXRoaXMucG9zaXRpb24udyxnPXRoaXMucG9zaXRpb24udCx2PXRoaXMucG9zaXRpb24uaCx5PXRoaXMucG9zaXRpb24uZGlyZWN0aW9uLHg9ImRvd24iPT09eSxiPSJsZWZ0Ij09PXksXz0idXAiPT09eSx3PW0sVD12O3h8fGJ8fCJyaWdodCI9PT15fHxffHwodGhpcy5wb3NpdGlvbi5kaXJlY3Rpb249ImRvd24iLHg9ITApLHh8fF8/KGY9KHU9ZCkrdyx4PyhoPWcsVD0ocD1NYXRoLm1pbihoK1QsYykpLWgpOlQ9KHA9ZytUKS0oaD1NYXRoLm1heChwLVQsMCkpKToocD0oaD1nKStULGI/dz0oZj1kK3cpLSh1PU1hdGgubWF4KGYtdywwKSk6KHU9ZCx3PShmPU1hdGgubWluKHUrdyxsKSktdSkpLHRoaXMuX2JveD17bDp1LHQ6aCx3OncsaDpUfTt2YXIgaz1tPncsQT1zLmJhckxlbmd0aCsyKnMuYmFyUGFkLE09cy5iYXJXaWR0aCsyKnMuYmFyUGFkLFM9ZCxFPWcrdjtFK00+YyYmKEU9Yy1NKTt2YXIgTD10aGlzLmNvbnRhaW5lci5zZWxlY3RBbGwoInJlY3Quc2Nyb2xsYmFyLWhvcml6b250YWwiKS5kYXRhKGs/WzBdOltdKTtMLmV4aXQoKS5vbigiLmRyYWciLG51bGwpLnJlbW92ZSgpLEwuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzY3JvbGxiYXItaG9yaXpvbnRhbCIsITApLmNhbGwoaS5maWxsLHMuYmFyQ29sb3IpLGs/KHRoaXMuaGJhcj1MLmF0dHIoe3J4OnMuYmFyUmFkaXVzLHJ5OnMuYmFyUmFkaXVzLHg6Uyx5OkUsd2lkdGg6QSxoZWlnaHQ6TX0pLHRoaXMuX2hiYXJYTWluPVMrQS8yLHRoaXMuX2hiYXJUcmFuc2xhdGVNYXg9dy1BKTooZGVsZXRlIHRoaXMuaGJhcixkZWxldGUgdGhpcy5faGJhclhNaW4sZGVsZXRlIHRoaXMuX2hiYXJUcmFuc2xhdGVNYXgpO3ZhciBDPXY+VCxQPXMuYmFyV2lkdGgrMipzLmJhclBhZCxJPXMuYmFyTGVuZ3RoKzIqcy5iYXJQYWQsTz1kK20sej1nO08rUD5sJiYoTz1sLVApO3ZhciBEPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zY3JvbGxiYXItdmVydGljYWwiKS5kYXRhKEM/WzBdOltdKTtELmV4aXQoKS5vbigiLmRyYWciLG51bGwpLnJlbW92ZSgpLEQuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzY3JvbGxiYXItdmVydGljYWwiLCEwKS5jYWxsKGkuZmlsbCxzLmJhckNvbG9yKSxDPyh0aGlzLnZiYXI9RC5hdHRyKHtyeDpzLmJhclJhZGl1cyxyeTpzLmJhclJhZGl1cyx4Ok8seTp6LHdpZHRoOlAsaGVpZ2h0Okl9KSx0aGlzLl92YmFyWU1pbj16K0kvMix0aGlzLl92YmFyVHJhbnNsYXRlTWF4PVQtSSk6KGRlbGV0ZSB0aGlzLnZiYXIsZGVsZXRlIHRoaXMuX3ZiYXJZTWluLGRlbGV0ZSB0aGlzLl92YmFyVHJhbnNsYXRlTWF4KTt2YXIgUj10aGlzLmlkLEY9dS0uNSxCPUM/ZitQKy41OmYrLjUsTj1oLS41LGo9az9wK00rLjU6cCsuNSxVPW8uX3RvcGRlZnMuc2VsZWN0QWxsKCIjIitSKS5kYXRhKGt8fEM/WzBdOltdKTtpZihVLmV4aXQoKS5yZW1vdmUoKSxVLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixSKS5hcHBlbmQoInJlY3QiKSxrfHxDPyh0aGlzLl9jbGlwUmVjdD1VLnNlbGVjdCgicmVjdCIpLmF0dHIoe3g6TWF0aC5mbG9vcihGKSx5Ok1hdGguZmxvb3IoTiksd2lkdGg6TWF0aC5jZWlsKEIpLU1hdGguZmxvb3IoRiksaGVpZ2h0Ok1hdGguY2VpbChqKS1NYXRoLmZsb29yKE4pfSksdGhpcy5jb250YWluZXIuY2FsbChhLnNldENsaXBVcmwsUix0aGlzLmdkKSx0aGlzLmJnLmF0dHIoe3g6ZCx5Omcsd2lkdGg6bSxoZWlnaHQ6dn0pKToodGhpcy5iZy5hdHRyKHt3aWR0aDowLGhlaWdodDowfSksdGhpcy5jb250YWluZXIub24oIndoZWVsIixudWxsKS5vbigiLmRyYWciLG51bGwpLmNhbGwoYS5zZXRDbGlwVXJsLG51bGwpLGRlbGV0ZSB0aGlzLl9jbGlwUmVjdCksa3x8Qyl7dmFyIFY9bi5iZWhhdmlvci5kcmFnKCkub24oImRyYWdzdGFydCIsKGZ1bmN0aW9uKCl7bi5ldmVudC5zb3VyY2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSkpLm9uKCJkcmFnIix0aGlzLl9vbkJveERyYWcuYmluZCh0aGlzKSk7dGhpcy5jb250YWluZXIub24oIndoZWVsIixudWxsKS5vbigid2hlZWwiLHRoaXMuX29uQm94V2hlZWwuYmluZCh0aGlzKSkub24oIi5kcmFnIixudWxsKS5jYWxsKFYpO3ZhciBIPW4uYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnc3RhcnQiLChmdW5jdGlvbigpe24uZXZlbnQuc291cmNlRXZlbnQucHJldmVudERlZmF1bHQoKSxuLmV2ZW50LnNvdXJjZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSkpLm9uKCJkcmFnIix0aGlzLl9vbkJhckRyYWcuYmluZCh0aGlzKSk7ayYmdGhpcy5oYmFyLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChIKSxDJiZ0aGlzLnZiYXIub24oIi5kcmFnIixudWxsKS5jYWxsKEgpfXRoaXMuc2V0VHJhbnNsYXRlKGUscil9LHMucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXsodGhpcy5oYmFyfHx0aGlzLnZiYXIpJiYodGhpcy5iZy5hdHRyKHt3aWR0aDowLGhlaWdodDowfSksdGhpcy5jb250YWluZXIub24oIndoZWVsIixudWxsKS5vbigiLmRyYWciLG51bGwpLmNhbGwoYS5zZXRDbGlwVXJsLG51bGwpLGRlbGV0ZSB0aGlzLl9jbGlwUmVjdCksdGhpcy5oYmFyJiYodGhpcy5oYmFyLm9uKCIuZHJhZyIsbnVsbCksdGhpcy5oYmFyLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLmhiYXIsZGVsZXRlIHRoaXMuX2hiYXJYTWluLGRlbGV0ZSB0aGlzLl9oYmFyVHJhbnNsYXRlTWF4KSx0aGlzLnZiYXImJih0aGlzLnZiYXIub24oIi5kcmFnIixudWxsKSx0aGlzLnZiYXIucmVtb3ZlKCksZGVsZXRlIHRoaXMudmJhcixkZWxldGUgdGhpcy5fdmJhcllNaW4sZGVsZXRlIHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpfSxzLnByb3RvdHlwZS5fb25Cb3hEcmFnPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFuc2xhdGVYLGU9dGhpcy50cmFuc2xhdGVZO3RoaXMuaGJhciYmKHQtPW4uZXZlbnQuZHgpLHRoaXMudmJhciYmKGUtPW4uZXZlbnQuZHkpLHRoaXMuc2V0VHJhbnNsYXRlKHQsZSl9LHMucHJvdG90eXBlLl9vbkJveFdoZWVsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFuc2xhdGVYLGU9dGhpcy50cmFuc2xhdGVZO3RoaXMuaGJhciYmKHQrPW4uZXZlbnQuZGVsdGFZKSx0aGlzLnZiYXImJihlKz1uLmV2ZW50LmRlbHRhWSksdGhpcy5zZXRUcmFuc2xhdGUodCxlKX0scy5wcm90b3R5cGUuX29uQmFyRHJhZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMudHJhbnNsYXRlWCxlPXRoaXMudHJhbnNsYXRlWTtpZih0aGlzLmhiYXIpe3ZhciByPXQrdGhpcy5faGJhclhNaW4saT1yK3RoaXMuX2hiYXJUcmFuc2xhdGVNYXg7dD0oby5jb25zdHJhaW4obi5ldmVudC54LHIsaSktcikvKGktcikqKHRoaXMucG9zaXRpb24udy10aGlzLl9ib3gudyl9aWYodGhpcy52YmFyKXt2YXIgYT1lK3RoaXMuX3ZiYXJZTWluLHM9YSt0aGlzLl92YmFyVHJhbnNsYXRlTWF4O2U9KG8uY29uc3RyYWluKG4uZXZlbnQueSxhLHMpLWEpLyhzLWEpKih0aGlzLnBvc2l0aW9uLmgtdGhpcy5fYm94LmgpfXRoaXMuc2V0VHJhbnNsYXRlKHQsZSl9LHMucHJvdG90eXBlLnNldFRyYW5zbGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucG9zaXRpb24udy10aGlzLl9ib3gudyxuPXRoaXMucG9zaXRpb24uaC10aGlzLl9ib3guaDtpZih0PW8uY29uc3RyYWluKHR8fDAsMCxyKSxlPW8uY29uc3RyYWluKGV8fDAsMCxuKSx0aGlzLnRyYW5zbGF0ZVg9dCx0aGlzLnRyYW5zbGF0ZVk9ZSx0aGlzLmNvbnRhaW5lci5jYWxsKGEuc2V0VHJhbnNsYXRlLHRoaXMuX2JveC5sLXRoaXMucG9zaXRpb24ubC10LHRoaXMuX2JveC50LXRoaXMucG9zaXRpb24udC1lKSx0aGlzLl9jbGlwUmVjdCYmdGhpcy5fY2xpcFJlY3QuYXR0cih7eDpNYXRoLmZsb29yKHRoaXMucG9zaXRpb24ubCt0LS41KSx5Ok1hdGguZmxvb3IodGhpcy5wb3NpdGlvbi50K2UtLjUpfSksdGhpcy5oYmFyKXt2YXIgaT10L3I7dGhpcy5oYmFyLmNhbGwoYS5zZXRUcmFuc2xhdGUsdCtpKnRoaXMuX2hiYXJUcmFuc2xhdGVNYXgsZSl9aWYodGhpcy52YmFyKXt2YXIgcz1lL247dGhpcy52YmFyLmNhbGwoYS5zZXRUcmFuc2xhdGUsdCxlK3MqdGhpcy5fdmJhclRyYW5zbGF0ZU1heCl9fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vY29sb3IiOjYzOSwiLi4vZHJhd2luZyI6NjYxLCJAcGxvdGx5L2QzIjo1OH1dLDc0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0ZST01fQkw6e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MSxib3R0b206MCxtaWRkbGU6LjUsdG9wOjF9LEZST01fVEw6e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MSxib3R0b206MSxtaWRkbGU6LjUsdG9wOjB9LEZST01fQlI6e2xlZnQ6MSxjZW50ZXI6LjUscmlnaHQ6MCxib3R0b206MCxtaWRkbGU6LjUsdG9wOjF9LExJTkVfU1BBQ0lORzoxLjMsQ0FQX1NISUZUOi43LE1JRF9TSElGVDouMzUsT1BQT1NJVEVfU0lERTp7bGVmdDoicmlnaHQiLHJpZ2h0OiJsZWZ0Iix0b3A6ImJvdHRvbSIsYm90dG9tOiJ0b3AifX19LHt9XSw3NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtheGlzUmVmRGVzY3JpcHRpb246ZnVuY3Rpb24odCxlLHIpe3JldHVyblsiSWYgc2V0IHRvIGEiLHQsImF4aXMgaWQgKGUuZy4gKiIrdCsiKiBvciIsIioiK3QrIjIqKSwgdGhlIGAiK3QrImAgcG9zaXRpb24gcmVmZXJzIHRvIGEiLHQsImNvb3JkaW5hdGUuIElmIHNldCB0byAqcGFwZXIqLCB0aGUgYCIrdCsiYCIsInBvc2l0aW9uIHJlZmVycyB0byB0aGUgZGlzdGFuY2UgZnJvbSB0aGUiLGUsIm9mIHRoZSBwbG90dGluZyIsImFyZWEgaW4gbm9ybWFsaXplZCBjb29yZGluYXRlcyB3aGVyZSAqMCogKCoxKikgY29ycmVzcG9uZHMgdG8gdGhlIixlLCIoIityKyIpLiBJZiBzZXQgdG8gYSIsdCwiYXhpcyBJRCBmb2xsb3dlZCBieSIsIipkb21haW4qIChzZXBhcmF0ZWQgYnkgYSBzcGFjZSksIHRoZSBwb3NpdGlvbiBiZWhhdmVzIGxpa2UgZm9yIiwiKnBhcGVyKiwgYnV0IHJlZmVycyB0byB0aGUgZGlzdGFuY2UgaW4gZnJhY3Rpb25zIG9mIHRoZSBkb21haW4iLCJsZW5ndGggZnJvbSB0aGUiLGUsIm9mIHRoZSBkb21haW4gb2YgdGhhdCBheGlzOiBlLmcuLCIsIioiK3QrIjIgZG9tYWluKiByZWZlcnMgdG8gdGhlIGRvbWFpbiBvZiB0aGUgc2Vjb25kIix0LCIgYXhpcyBhbmQgYSIsdCwicG9zaXRpb24gb2YgMC41IHJlZmVycyB0byB0aGUiLCJwb2ludCBiZXR3ZWVuIHRoZSIsZSwiYW5kIHRoZSIsciwib2YgdGhlIGRvbWFpbiBvZiB0aGUiLCJzZWNvbmQiLHQsImF4aXMuIl0uam9pbigiICIpfX19LHt9XSw3NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtJTkNSRUFTSU5HOntDT0xPUjoiIzNEOTk3MCIsU1lNQk9MOiJcdTI1YjIifSxERUNSRUFTSU5HOntDT0xPUjoiI0ZGNDEzNiIsU1lNQk9MOiJcdTI1YmMifX19LHt9XSw3NDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtGT1JNQVRfTElOSzoiaHR0cHM6Ly9naXRodWIuY29tL2QzL2QzLWZvcm1hdC90cmVlL3YxLjQuNSNkMy1mb3JtYXQiLERBVEVfRk9STUFUX0xJTks6Imh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy10aW1lLWZvcm1hdC90cmVlL3YyLjIuMyNsb2NhbGVfZm9ybWF0In19LHt9XSw3NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtDT01QQVJJU09OX09QUzpbIj0iLCIhPSIsIjwiLCI+PSIsIj4iLCI8PSJdLENPTVBBUklTT05fT1BTMjpbIj0iLCI8IiwiPj0iLCI+IiwiPD0iXSxJTlRFUlZBTF9PUFM6WyJbXSIsIigpIiwiWykiLCIoXSIsIl1bIiwiKSgiLCJdKCIsIilbIl0sU0VUX09QUzpbInt9IiwifXsiXSxDT05TVFJBSU5UX1JFRFVDVElPTjp7Ij0iOiI9IiwiPCI6IjwiLCI8PSI6IjwiLCI+IjoiPiIsIj49IjoiPiIsIltdIjoiW10iLCIoKSI6IltdIiwiWykiOiJbXSIsIihdIjoiW10iLCJdWyI6Il1bIiwiKSgiOiJdWyIsIl0oIjoiXVsiLCIpWyI6Il1bIn19fSx7fV0sNzQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c29saWQ6W1tdLDBdLGRvdDpbWy41LDFdLDIwMF0sZGFzaDpbWy41LDFdLDUwXSxsb25nZGFzaDpbWy41LDFdLDEwXSxkYXNoZG90OltbLjUsLjYyNSwuODc1LDFdLDUwXSxsb25nZGFzaGRvdDpbWy41LC43LC44LDFdLDEwXX19LHt9XSw3NTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjaXJjbGU6Ilx1MjVjZiIsImNpcmNsZS1vcGVuIjoiXHUyNWNiIixzcXVhcmU6Ilx1MjVhMCIsInNxdWFyZS1vcGVuIjoiXHUyNWExIixkaWFtb25kOiJcdTI1YzYiLCJkaWFtb25kLW9wZW4iOiJcdTI1YzciLGNyb3NzOiIrIix4OiJcdTI3NGMifX0se31dLDc1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1NIT1dfUExBQ0VIT0xERVI6MTAwLEhJREVfUExBQ0VIT0xERVI6MWUzLERFU0VMRUNURElNOi4yfX0se31dLDc1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0JBRE5VTTp2b2lkIDAsRlBfU0FGRToxZS00Kk51bWJlci5NQVhfVkFMVUUsT05FTUFYWUVBUjozMTYyMjRlNSxPTkVBVkdZRUFSOjMxNTU3NmU1LE9ORU1JTllFQVI6MzE1MzZlNixPTkVNQVhRVUFSVEVSOjc5NDg4ZTUsT05FQVZHUVVBUlRFUjo3ODg5NGU1LE9ORU1JTlFVQVJURVI6NzY4OTZlNSxPTkVNQVhNT05USDoyNjc4NGU1LE9ORUFWR01PTlRIOjI2Mjk4ZTUsT05FTUlOTU9OVEg6MjQxOTJlNSxPTkVXRUVLOjYwNDhlNSxPTkVEQVk6ODY0ZTUsT05FSE9VUjozNmU1LE9ORU1JTjo2ZTQsT05FU0VDOjFlMyxFUE9DSEpEOjI0NDA1ODcuNSxBTE1PU1RfRVFVQUw6Ljk5OTk5OSxMT0dfQ0xJUDoxMCxNSU5VU19TSUdOOiJcdTIyMTIifX0se31dLDc1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsci5zdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixyLnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIixyLnN2Z0F0dHJzPXt4bWxuczpyLnN2ZywieG1sbnM6eGxpbmsiOnIueGxpbmt9fSx7fV0sNzU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IudmVyc2lvbj10KCIuL3ZlcnNpb24iKS52ZXJzaW9uLHQoIm5hdGl2ZS1wcm9taXNlLW9ubHkiKSx0KCIuLi9idWlsZC9wbG90Y3NzIik7Zm9yKHZhciBuPXQoIi4vcmVnaXN0cnkiKSxpPXIucmVnaXN0ZXI9bi5yZWdpc3RlcixhPXQoIi4vcGxvdF9hcGkiKSxvPU9iamVjdC5rZXlzKGEpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTsiXyIhPT1sLmNoYXJBdCgwKSYmKHJbbF09YVtsXSksaSh7bW9kdWxlVHlwZToiYXBpTWV0aG9kIixuYW1lOmwsZm46YVtsXX0pfWkodCgiLi90cmFjZXMvc2NhdHRlciIpKSxpKFt0KCIuL2NvbXBvbmVudHMvbGVnZW5kIiksdCgiLi9jb21wb25lbnRzL2Z4IiksdCgiLi9jb21wb25lbnRzL2Fubm90YXRpb25zIiksdCgiLi9jb21wb25lbnRzL2Fubm90YXRpb25zM2QiKSx0KCIuL2NvbXBvbmVudHMvc2hhcGVzIiksdCgiLi9jb21wb25lbnRzL2ltYWdlcyIpLHQoIi4vY29tcG9uZW50cy91cGRhdGVtZW51cyIpLHQoIi4vY29tcG9uZW50cy9zbGlkZXJzIiksdCgiLi9jb21wb25lbnRzL3Jhbmdlc2xpZGVyIiksdCgiLi9jb21wb25lbnRzL3Jhbmdlc2VsZWN0b3IiKSx0KCIuL2NvbXBvbmVudHMvZ3JpZCIpLHQoIi4vY29tcG9uZW50cy9lcnJvcmJhcnMiKSx0KCIuL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHQoIi4vY29tcG9uZW50cy9jb2xvcmJhciIpLHQoIi4vY29tcG9uZW50cy9tb2RlYmFyIildKSxpKFt0KCIuL2xvY2FsZS1lbiIpLHQoIi4vbG9jYWxlLWVuLXVzIildKSx3aW5kb3cuUGxvdGx5TG9jYWxlcyYmQXJyYXkuaXNBcnJheSh3aW5kb3cuUGxvdGx5TG9jYWxlcykmJihpKHdpbmRvdy5QbG90bHlMb2NhbGVzKSxkZWxldGUgd2luZG93LlBsb3RseUxvY2FsZXMpLHIuSWNvbnM9dCgiLi9mb250cy9wbG90aWNvbiIpO3ZhciBjPXQoIi4vY29tcG9uZW50cy9meCIpLHU9dCgiLi9wbG90cy9wbG90cyIpO3IuUGxvdHM9e3Jlc2l6ZTp1LnJlc2l6ZSxncmFwaEpzb246dS5ncmFwaEpzb24sc2VuZERhdGFUb0Nsb3VkOnUuc2VuZERhdGFUb0Nsb3VkfSxyLkZ4PXtob3ZlcjpjLmhvdmVyLHVuaG92ZXI6Yy51bmhvdmVyLGxvbmVIb3ZlcjpjLmxvbmVIb3Zlcixsb25lVW5ob3ZlcjpjLmxvbmVVbmhvdmVyfSxyLlNuYXBzaG90PXQoIi4vc25hcHNob3QiKSxyLlBsb3RTY2hlbWE9dCgiLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpfSx7Ii4uL2J1aWxkL3Bsb3Rjc3MiOjEsIi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucyI6NjMwLCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMzZCI6NjM1LCIuL2NvbXBvbmVudHMvY29sb3JiYXIiOjY0NSwiLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1MSwiLi9jb21wb25lbnRzL2Vycm9yYmFycyI6NjY3LCIuL2NvbXBvbmVudHMvZngiOjY3OSwiLi9jb21wb25lbnRzL2dyaWQiOjY4MywiLi9jb21wb25lbnRzL2ltYWdlcyI6Njg4LCIuL2NvbXBvbmVudHMvbGVnZW5kIjo2OTYsIi4vY29tcG9uZW50cy9tb2RlYmFyIjo3MDIsIi4vY29tcG9uZW50cy9yYW5nZXNlbGVjdG9yIjo3MTAsIi4vY29tcG9uZW50cy9yYW5nZXNsaWRlciI6NzE3LCIuL2NvbXBvbmVudHMvc2hhcGVzIjo3MzEsIi4vY29tcG9uZW50cy9zbGlkZXJzIjo3MzYsIi4vY29tcG9uZW50cy91cGRhdGVtZW51cyI6NzQyLCIuL2ZvbnRzL3Bsb3RpY29uIjo3NTUsIi4vbG9jYWxlLWVuIjo4MDcsIi4vbG9jYWxlLWVuLXVzIjo4MDYsIi4vcGxvdF9hcGkiOjgxMSwiLi9wbG90X2FwaS9wbG90X3NjaGVtYSI6ODE1LCIuL3Bsb3RzL3Bsb3RzIjo4OTAsIi4vcmVnaXN0cnkiOjkwNCwiLi9zbmFwc2hvdCI6OTA5LCIuL3RyYWNlcy9zY2F0dGVyIjoxMjAzLCIuL3ZlcnNpb24iOjEzNzcsIm5hdGl2ZS1wcm9taXNlLW9ubHkiOjQ1M31dLDc1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3VuZG86e3dpZHRoOjg1Ny4xLGhlaWdodDoxZTMscGF0aDoibTg1NyAzNTBxMC04Ny0zNC0xNjZ0LTkxLTEzNy0xMzctOTItMTY2LTM0cS05NiAwLTE4MyA0MXQtMTQ3IDExNHEtNCA2LTQgMTN0NSAxMWw3NiA3N3E2IDUgMTQgNSA5LTEgMTMtNyA0MS01MyAxMDAtODJ0MTI2LTI5cTU4IDAgMTEwIDIzdDkyIDYxIDYxIDkxIDIyIDExMS0yMiAxMTEtNjEgOTEtOTIgNjEtMTEwIDIzcS01NSAwLTEwNS0yMHQtOTAtNTdsNzctNzdxMTctMTYgOC0zOC0xMC0yMy0zMy0yM2gtMjUwcS0xNSAwLTI1IDExdC0xMSAyNXYyNTBxMCAyNCAyMiAzMyAyMiAxMCAzOS04bDcyLTcycTYwIDU3IDEzNyA4OHQxNTkgMzFxODcgMCAxNjYtMzR0MTM3LTkyIDkxLTEzNyAzNC0xNjZ6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxob21lOnt3aWR0aDo5MjguNixoZWlnaHQ6MWUzLHBhdGg6Im03ODYgMjk2di0yNjdxMC0xNS0xMS0yNnQtMjUtMTBoLTIxNHYyMTRoLTE0M3YtMjE0aC0yMTRxLTE1IDAtMjUgMTB0LTExIDI2djI2N3EwIDEgMCAydDAgMmwzMjEgMjY0IDMyMS0yNjRxMS0xIDEtNHogbTEyNCAzOWwtMzQtNDFxLTUtNS0xMi02aC0ycS03IDAtMTIgM2wtMzg2IDMyMi0zODYtMzIycS03LTQtMTMtNC03IDItMTIgN2wtMzUgNDFxLTQgNS0zIDEzdDYgMTJsNDAxIDMzNHExOCAxNSA0MiAxNXQ0My0xNWwxMzYtMTE0djEwOXEwIDggNSAxM3QxMyA1aDEwN3E4IDAgMTMtNXQ1LTEzdi0yMjdsMTIyLTEwMnE1LTUgNi0xMnQtNC0xM3oiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LCJjYW1lcmEtcmV0cm8iOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtNTE4IDM4NnEwIDgtNSAxM3QtMTMgNXEtMzcgMC02My0yN3QtMjYtNjNxMC04IDUtMTN0MTMtNSAxMiA1IDUgMTNxMCAyMyAxNiAzOHQzOCAxNnE4IDAgMTMgNXQ1IDEzeiBtMTI1LTczcTAtNTktNDItMTAxdC0xMDEtNDItMTAxIDQyLTQyIDEwMSA0MiAxMDEgMTAxIDQyIDEwMS00MiA0Mi0xMDF6IG0tNTcyLTMyMGg4NTh2NzFoLTg1OHYtNzF6IG02NDMgMzIwcTAgODktNjIgMTUydC0xNTIgNjItMTUxLTYyLTYzLTE1MiA2My0xNTEgMTUxLTYzIDE1MiA2MyA2MiAxNTF6IG0tNTcxIDM1OGgyMTR2NzJoLTIxNHYtNzJ6IG0tNzItMTA3aDg1OHYxNDNoLTQ2MmwtMzYtNzFoLTM2MHYtNzJ6IG05MjkgMTQzdi03MTRxMC0zMC0yMS01MXQtNTAtMjFoLTg1OHEtMjkgMC01MCAyMXQtMjEgNTF2NzE0cTAgMzAgMjEgNTF0NTAgMjFoODU4cTI5IDAgNTAtMjF0MjEtNTF6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSx6b29tYm94Ont3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtMTAwMC0yNWwtMjUwIDI1MWM0MCA2MyA2MyAxMzggNjMgMjE4IDAgMjI0LTE4MiA0MDYtNDA3IDQwNi0yMjQgMC00MDYtMTgyLTQwNi00MDZzMTgzLTQwNiA0MDctNDA2YzgwIDAgMTU1IDIyIDIxOCA2MmwyNTAtMjUwIDEyNSAxMjV6IG0tODEyIDI1MGwwIDQzOCA0MzcgMCAwLTQzOC00MzcgMHogbTYyIDM3NWwzMTMgMCAwLTMxMi0zMTMgMCAwIDMxMnoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHBhbjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTEwMDAgMzUwbC0xODcgMTg4IDAtMTI1LTI1MCAwIDAgMjUwIDEyNSAwLTE4OCAxODctMTg3LTE4NyAxMjUgMCAwLTI1MC0yNTAgMCAwIDEyNS0xODgtMTg4IDE4Ni0xODcgMCAxMjUgMjUyIDAgMC0yNTAtMTI1IDAgMTg3LTE4OCAxODggMTg4LTEyNSAwIDAgMjUwIDI1MCAwIDAtMTI2IDE4NyAxODh6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSx6b29tX3BsdXM6e3dpZHRoOjg3NSxoZWlnaHQ6MWUzLHBhdGg6Im0xIDc4N2wwLTg3NSA4NzUgMCAwIDg3NS04NzUgMHogbTY4Ny01MDBsLTE4NyAwIDAtMTg3LTEyNSAwIDAgMTg3LTE4OCAwIDAgMTI1IDE4OCAwIDAgMTg3IDEyNSAwIDAtMTg3IDE4NyAwIDAtMTI1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sem9vbV9taW51czp7d2lkdGg6ODc1LGhlaWdodDoxZTMscGF0aDoibTAgNzg4bDAtODc2IDg3NSAwIDAgODc2LTg3NSAweiBtNjg4LTUwMGwtNTAwIDAgMCAxMjUgNTAwIDAgMC0xMjV6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxhdXRvc2NhbGU6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im0yNTAgODUwbC0xODcgMC02MyAwIDAtNjIgMC0xODggNjMgMCAwIDE4OCAxODcgMCAwIDYyeiBtNjg4IDBsLTE4OCAwIDAtNjIgMTg4IDAgMC0xODggNjIgMCAwIDE4OCAwIDYyLTYyIDB6IG0tODc1LTkzOGwwIDE4OC02MyAwIDAtMTg4IDAtNjIgNjMgMCAxODcgMCAwIDYyLTE4NyAweiBtODc1IDE4OGwwLTE4OC0xODggMCAwLTYyIDE4OCAwIDYyIDAgMCA2MiAwIDE4OC02MiAweiBtLTEyNSAxODhsLTEgMC05My05NC0xNTYgMTU2IDE1NiAxNTYgOTItOTMgMiAwIDAgMjUwLTI1MCAwIDAtMiA5My05Mi0xNTYtMTU2LTE1NiAxNTYgOTQgOTIgMCAyLTI1MCAwIDAtMjUwIDAgMCA5MyA5MyAxNTctMTU2LTE1Ny0xNTYtOTMgOTQgMCAwIDAtMjUwIDI1MCAwIDAgMC05NCA5MyAxNTYgMTU3IDE1Ni0xNTctOTMtOTMgMCAwIDI1MCAwIDAgMjUweiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sdG9vbHRpcF9iYXNpYzp7d2lkdGg6MTUwMCxoZWlnaHQ6MWUzLHBhdGg6Im0zNzUgNzI1bDAgMC0zNzUtMzc1IDM3NS0zNzQgMC0xIDExMjUgMCAwIDc1MC0xMTI1IDB6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSx0b29sdGlwX2NvbXBhcmU6e3dpZHRoOjExMjUsaGVpZ2h0OjFlMyxwYXRoOiJtMTg3IDc4NmwwIDItMTg3LTE4OCAxODgtMTg3IDAgMCA5MzcgMCAwIDM3My05MzggMHogbTAtNDk5bDAgMS0xODctMTg4IDE4OC0xODggMCAwIDkzNyAwIDAgMzc2LTkzOC0xeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0scGxvdGx5bG9nbzp7d2lkdGg6MTU0MixoZWlnaHQ6MWUzLHBhdGg6Im0wLTEwaDE4MnYtMTQwaC0xODJ2MTQweiBtMjI4IDE0NmgxODN2LTI4NmgtMTgzdjI4NnogbTIyNSA3MTRoMTgydi0xMDAwaC0xODJ2MTAwMHogbTIyNS0yODVoMTgydi03MTVoLTE4MnY3MTV6IG0yMjUgMTQyaDE4M3YtODU3aC0xODN2ODU3eiBtMjMxLTQyOGgxODJ2LTQyOWgtMTgydjQyOXogbTIyNS0yOTFoMTgzdi0xMzhoLTE4M3YxMzh6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSwiei1heGlzIjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTgzMyA1bC0xNyAxMDh2NDFsLTEzMC02NSAxMzAtNjZjMCAwIDAgMzggMCAzOSAwLTEgMzYtMTQgMzktMjUgNC0xNS02LTIyLTE2LTMwLTE1LTEyLTM5LTE2LTU2LTIwLTkwLTIyLTE4Ny0yMy0yNzktMjMtMjYxIDAtMzQxIDM0LTM1MyA1OSAzIDYwIDIyOCAxMTAgMjI4IDExMC0xNDAtOC0zNTEtMzUtMzUxLTExNiAwLTEyMCAyOTMtMTQyIDQ3NC0xNDIgMTU1IDAgNDc3IDIyIDQ3NyAxNDIgMCA1MC03NCA3OS0xNjMgOTZ6IG0tMzc0IDk0Yy01OC01LTk5LTIxLTk5LTQwIDAtMjQgNjUtNDMgMTQ0LTQzIDc5IDAgMTQzIDE5IDE0MyA0MyAwIDE5LTQyIDM0LTk4IDQwdjIxNmg4N2wtMTMyIDEzNS0xMzMtMTM1aDg4di0yMTZ6IG0xNjcgNTE1aC0xMzZ2MWMxNiAxNiAzMSAzNCA0NiA1Mmw4NCAxMDl2NTRoLTIzMHYtNzFoMTI0di0xYy0xNi0xNy0yOC0zMi00NC01MWwtODktMTE0di01MWgyNDV2NzJ6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSwiM2Rfcm90YXRlIjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTkyMiA2NjBjLTUgNC05IDctMTQgMTEtMzU5IDI2My01ODAtMzEtNTgwLTMxbC0xMDIgMjggNTgtNDAwYzAgMSAxIDEgMiAyIDExOCAxMDggMzUxIDI0OSAzNTEgMjQ5cy02MiAyNy0xMDAgNDJjODggODMgMjIyIDE4MyAzNDcgMTIyIDE2LTggMzAtMTcgNDQtMjctMiAxLTQgMi02IDR6IG0zNi0zMjljMCAwIDY0IDIyOS04OCAyOTYtNjIgMjctMTI0IDE0LTE3NS0xMSAxNTctNzggMjI1LTIwOCAyNDktMjY2IDgtMTkgMTEtMzEgMTEtMzEgMiA1IDYgMTUgMTEgMzItNS0xMy04LTIwLTgtMjB6IG0tNzc1LTIzOWM3MC0zMSAxMTctNTAgMTk4LTMyLTEyMSA4MC0xOTkgMzQ2LTE5OSAzNDZsLTk2LTE1LTU4LTEyYzAgMCA1NS0yMjYgMTU1LTI4N3ogbTYwMyAxMzNsLTMxNy0xMzljMCAwIDQtNCAxOS0xNCA3LTUgMjQtMTUgMjQtMTVzLTE3Ny0xNDctMzg5IDRjMjM1LTI4NyA1MzYtMTEyIDUzNi0xMTJsMzEtMjIgMTAwIDI5OS00LTF6IG0tMjk4LTE1M2M2LTQgMTQtOSAyNC0xNSAwIDAtMTcgMTAtMjQgMTV6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxjYW1lcmE6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im01MDAgNDUwYy04MyAwLTE1MC02Ny0xNTAtMTUwIDAtODMgNjctMTUwIDE1MC0xNTAgODMgMCAxNTAgNjcgMTUwIDE1MCAwIDgzLTY3IDE1MC0xNTAgMTUweiBtNDAwIDE1MGgtMTIwYy0xNiAwLTM0IDEzLTM5IDI5bC0zMSA5M2MtNiAxNS0yMyAyOC00MCAyOGgtMzQwYy0xNiAwLTM0LTEzLTM5LTI4bC0zMS05NGMtNi0xNS0yMy0yOC00MC0yOGgtMTIwYy01NSAwLTEwMC00NS0xMDAtMTAwdi00NTBjMC01NSA0NS0xMDAgMTAwLTEwMGg4MDBjNTUgMCAxMDAgNDUgMTAwIDEwMHY0NTBjMCA1NS00NSAxMDAtMTAwIDEwMHogbS00MDAtNTUwYy0xMzggMC0yNTAgMTEyLTI1MCAyNTAgMCAxMzggMTEyIDI1MCAyNTAgMjUwIDEzOCAwIDI1MC0xMTIgMjUwLTI1MCAwLTEzOC0xMTItMjUwLTI1MC0yNTB6IG0zNjUgMzgwYy0xOSAwLTM1IDE2LTM1IDM1IDAgMTkgMTYgMzUgMzUgMzUgMTkgMCAzNS0xNiAzNS0zNSAwLTE5LTE2LTM1LTM1LTM1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sbW92aWU6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im05MzggNDEzbC0xODgtMTI1YzAgMzctMTcgNzEtNDQgOTQgNjQgMzggMTA3IDEwNyAxMDcgMTg3IDAgMTIxLTk4IDIxOS0yMTkgMjE5LTEyMSAwLTIxOS05OC0yMTktMjE5IDAtNjEgMjUtMTE3IDY2LTE1NmgtMTE1YzMwIDMzIDQ5IDc2IDQ5IDEyNSAwIDEwMy04NCAxODctMTg3IDE4N3MtMTg4LTg0LTE4OC0xODdjMC01NyAyNi0xMDcgNjUtMTQxLTM4LTIyLTY1LTYyLTY1LTEwOXYtMjUwYzAtNzAgNTYtMTI2IDEyNS0xMjZoNTAwYzY5IDAgMTI1IDU2IDEyNSAxMjZsMTg4LTEyNmMzNCAwIDYyIDI4IDYyIDYzdjM3NWMwIDM1LTI4IDYzLTYyIDYzeiBtLTc1MCAwYy02OSAwLTEyNSA1Ni0xMjUgMTI1czU2IDEyNSAxMjUgMTI1IDEyNS01NiAxMjUtMTI1LTU2LTEyNS0xMjUtMTI1eiBtNDA2LTFjLTg3IDAtMTU3IDcwLTE1NyAxNTcgMCA4NiA3MCAxNTYgMTU3IDE1NnMxNTYtNzAgMTU2LTE1Ni03MC0xNTctMTU2LTE1N3oiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHF1ZXN0aW9uOnt3aWR0aDo4NTcuMSxoZWlnaHQ6MWUzLHBhdGg6Im01MDAgODJ2MTA3cTAgOC01IDEzdC0xMyA1aC0xMDdxLTggMC0xMy01dC01LTEzdi0xMDdxMC04IDUtMTN0MTMtNWgxMDdxOCAwIDEzIDV0NSAxM3ogbTE0MyAzNzVxMCA0OS0zMSA5MXQtNzcgNjUtOTUgMjNxLTEzNiAwLTIwNy0xMTktOS0xNCA0LTI0bDc0LTU1cTQtNCAxMC00IDkgMCAxNCA3IDMwIDM4IDQ4IDUxIDE5IDE0IDQ4IDE0IDI3IDAgNDgtMTV0MjEtMzNxMC0yMS0xMS0zNHQtMzgtMjVxLTM1LTE2LTY1LTQ4dC0yOS03MHYtMjBxMC04IDUtMTN0MTMtNWgxMDdxOCAwIDEzIDV0NSAxM3EwIDEwIDEyIDI3dDMwIDI4cTE4IDEwIDI4IDE2dDI1IDE5IDI1IDI3IDE2IDM0IDcgNDV6IG0yMTQtMTA3cTAtMTE3LTU3LTIxNXQtMTU2LTE1Ni0yMTUtNTgtMjE2IDU4LTE1NSAxNTYtNTggMjE1IDU4IDIxNSAxNTUgMTU2IDIxNiA1OCAyMTUtNTggMTU2LTE1NiA1Ny0yMTV6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxkaXNrOnt3aWR0aDo4NTcuMSxoZWlnaHQ6MWUzLHBhdGg6Im0yMTQtN2g0Mjl2MjE0aC00Mjl2LTIxNHogbTUwMCAwaDcydjUwMHEwIDgtNiAyMXQtMTEgMjBsLTE1NyAxNTZxLTUgNi0xOSAxMnQtMjIgNXYtMjMycTAtMjItMTUtMzh0LTM4LTE2aC0zMjJxLTIyIDAtMzcgMTZ0LTE2IDM4djIzMmgtNzJ2LTcxNGg3MnYyMzJxMCAyMiAxNiAzOHQzNyAxNmg0NjVxMjIgMCAzOC0xNnQxNS0zOHYtMjMyeiBtLTIxNCA1MTh2MTc4cTAgOC01IDEzdC0xMyA1aC0xMDdxLTcgMC0xMy01dC01LTEzdi0xNzhxMC04IDUtMTN0MTMtNWgxMDdxNyAwIDEzIDV0NSAxM3ogbTM1Ny0xOHYtNTE4cTAtMjItMTUtMzh0LTM4LTE2aC03NTBxLTIzIDAtMzggMTZ0LTE2IDM4djc1MHEwIDIyIDE2IDM4dDM4IDE2aDUxN3EyMyAwIDUwLTEydDQyLTI2bDE1Ni0xNTdxMTYtMTUgMjctNDJ0MTEtNDl6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxkcmF3b3BlbnBhdGg6e3dpZHRoOjcwLGhlaWdodDo3MCxwYXRoOiJNMzMuMjEsODUuNjVhNy4zMSw3LjMxLDAsMCwxLTIuNTktLjQ4Yy04LjE2LTMuMTEtOS4yNy0xOS44LTkuODgtNDEuMy0uMS0zLjU4LS4xOS02LjY4LS4zNS05LS4xNS0yLjEtLjY3LTMuNDgtMS40My0zLjc5LTIuMTMtLjg4LTcuOTEsMi4zMi0xMiw1Ljg2TDMsMzIuMzhjMS44Ny0xLjY0LDExLjU1LTkuNjYsMTguMjctNi45LDIuMTMuODcsNC43NSwzLjE0LDUuMTcsOSwuMTcsMi40My4yNiw1LjU5LjM2LDkuMjVhMjI0LjE3LDIyNC4xNywwLDAsMCwxLjUsMjMuNGMxLjU0LDEwLjc2LDQsMTIuMjIsNC40OCwxMi40Ljg0LjMyLDIuNzktLjQ2LDUuNzYtMy41OUw0Myw4MC4wN0M0MS41Myw4MS41NywzNy42OCw4NS42NCwzMy4yMSw4NS42NVpNNzQuODEsNjlhMTEuMzQsMTEuMzQsMCwwLDAsNi4wOS02LjcyTDg3LjI2LDQ0LjUsNzQuNzIsMzIsNTYuOSwzOC4zNWMtMi4zNy44Ni01LjU3LDMuNDItNi42MSw2TDM4LjY1LDcyLjE0bDguNDIsOC40M1pNNTUsNDYuMjdhNy45MSw3LjkxLDAsMCwxLDMuNjQtMy4xN2wxNC44LTUuMyw4LDhMNzYuMTEsNjAuNmwtLjA2LjE5YTYuMzcsNi4zNywwLDAsMS0zLDMuNDNMNDguMjUsNzQuNTksNDQuNjIsNzFabTE2LjU3LDcuODJBNi45LDYuOSwwLDEsMCw2NC42NCw2MSw2LjkxLDYuOTEsMCwwLDAsNzEuNTQsNTQuMDlabS00LjA1LDBhMi44NSwyLjg1LDAsMSwxLTIuODUtMi44NUEyLjg2LDIuODYsMCwwLDEsNjcuNDksNTQuMDlabS00LjEzLDUuMjJMNjAuNSw1Ni40NSw0NC4yNiw3Mi43bDIuODYsMi44NlpNOTcuODMsMzUuNjcsODQuMTQsMjJsLTguNTcsOC41N0w4OS4yNiw0NC4yNFptLTEzLjY5LTgsOCw4LTIuODUsMi44NS04LThaIix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAxIC0xNSAtMTUpIn0sZHJhd2Nsb3NlZHBhdGg6e3dpZHRoOjkwLGhlaWdodDo5MCxwYXRoOiJNODguNDEsMjEuMTJhMjYuNTYsMjYuNTYsMCwwLDAtMzYuMTgsMGwtMi4wNywyLTIuMDctMmEyNi41NywyNi41NywwLDAsMC0zNi4xOCwwLDIzLjc0LDIzLjc0LDAsMCwwLDAsMzQuOEw0OCw5MC4xMmEzLjIyLDMuMjIsMCwwLDAsNC40MiwwbDM2LTM0LjIxYTIzLjczLDIzLjczLDAsMCwwLDAtMzQuNzlaTTg0LDUxLjI0LDUwLjE2LDgzLjM1LDE2LjM1LDUxLjI1YTE3LjI4LDE3LjI4LDAsMCwxLDAtMjUuNDcsMjAsMjAsMCwwLDEsMjcuMywwbDQuMjksNC4wN2EzLjIzLDMuMjMsMCwwLDAsNC40NCwwbDQuMjktNC4wN2EyMCwyMCwwLDAsMSwyNy4zLDAsMTcuMjcsMTcuMjcsMCwwLDEsMCwyNS40NlpNNjYuNzYsNDcuNjhoLTMzdjYuOTFoMzNaTTUzLjM1LDM1SDQ2LjQ0VjY4aDYuOTFaIix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAxIC01IC01KSJ9LGxhc3NvOnt3aWR0aDoxMDMxLGhlaWdodDoxZTMscGF0aDoibTEwMTggNTM4Yy0zNiAyMDctMjkwIDMzNi01NjggMjg2LTI3Ny00OC00NzMtMjU2LTQzNi00NjMgMTAtNTcgMzYtMTA4IDc2LTE1MS0xMy02NiAxMS0xMzcgNjgtMTgzIDM0LTI4IDc1LTQxIDExNC00MmwtNTUtNzAgMCAwYy0yLTEtMy0yLTQtMy0xMC0xNC04LTM0IDUtNDUgMTQtMTEgMzQtOCA0NSA0IDEgMSAyIDMgMiA1bDAgMCAxMTMgMTQwYzE2IDExIDMxIDI0IDQ1IDQwIDQgMyA2IDcgOCAxMSA0OC0zIDEwMCAwIDE1MSA5IDI3OCA0OCA0NzMgMjU1IDQzNiA0NjJ6IG0tNjI0LTM3OWMtODAgMTQtMTQ5IDQ4LTE5NyA5NiA0MiA0MiAxMDkgNDcgMTU2IDkgMzMtMjYgNDctNjYgNDEtMTA1eiBtLTE4Ny03NGMtMTkgMTYtMzMgMzctMzkgNjAgNTAtMzIgMTA5LTU1IDE3NC02OC00Mi0yNS05NS0yNC0xMzUgOHogbTM2MCA3NWMtMzQtNy02OS05LTEwMi04IDggNjItMTYgMTI4LTY4IDE3MC03MyA1OS0xNzUgNTQtMjQ0LTUtOSAyMC0xNiA0MC0yMCA2MS0yOCAxNTkgMTIxIDMxNyAzMzMgMzU0czQwNy02MCA0MzQtMjE3YzI4LTE1OS0xMjEtMzE4LTMzMy0zNTV6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxzZWxlY3Rib3g6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im0wIDg1MGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg1IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbS04NTctMjg2bDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtODU3IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0tODU3LTI4NWwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTg1NyAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtLTg1Ny0yODZsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NSAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxkcmF3bGluZTp7d2lkdGg6NzAsaGVpZ2h0OjcwLHBhdGg6Ik02MC42NCw2Mi4zYTExLjI5LDExLjI5LDAsMCwwLDYuMDktNi43Mmw2LjM1LTE3LjcyTDYwLjU0LDI1LjMxbC0xNy44Miw2LjRjLTIuMzYuODYtNS41NywzLjQxLTYuNiw2TDI0LjQ4LDY1LjVsOC40Miw4LjQyWk00MC43OSwzOS42M2E3Ljg5LDcuODksMCwwLDEsMy42NS0zLjE3bDE0Ljc5LTUuMzEsOCw4TDYxLjk0LDU0bC0uMDYuMTlhNi40NCw2LjQ0LDAsMCwxLTMsMy40M0wzNC4wNyw2OGwtMy42Mi0zLjYzWm0xNi41Nyw3LjgxYTYuOSw2LjksMCwxLDAtNi44OSw2LjlBNi45LDYuOSwwLDAsMCw1Ny4zNiw0Ny40NFptLTQsMGEyLjg2LDIuODYsMCwxLDEtMi44NS0yLjg1QTIuODYsMi44NiwwLDAsMSw1My4zMiw0Ny40NFptLTQuMTMsNS4yMkw0Ni4zMyw0OS44LDMwLjA4LDY2LjA1bDIuODYsMi44NlpNODMuNjUsMjksNzAsMTUuMzQsNjEuNCwyMy45LDc1LjA5LDM3LjU5Wk03MCwyMS4wNmw4LDgtMi44NCwyLjg1LTgtOFpNODcsODAuNDlIMTAuNjdWODdIODdaIix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAxIC0xNSAtMTUpIn0sZHJhd3JlY3Q6e3dpZHRoOjgwLGhlaWdodDo4MCxwYXRoOiJNNzgsMjJWNzlIMjFWMjJINzhtOS05SDEyVjg4SDg3VjEzWk02OCw0Ni4yMkgzMVY1NEg2OFpNNTMsMzJINDUuMjJWNjlINTNaIix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAxIC0xMCAtMTApIn0sZHJhd2NpcmNsZTp7d2lkdGg6ODAsaGVpZ2h0OjgwLHBhdGg6Ik01MCw4NC43MkMyNi44NCw4NC43Miw4LDY5LjI4LDgsNTAuM1MyNi44NCwxNS44Nyw1MCwxNS44Nyw5MiwzMS4zMSw5Miw1MC4zLDczLjE2LDg0LjcyLDUwLDg0LjcyWm0wLTYwLjU5Yy0xOC42LDAtMzMuNzQsMTEuNzQtMzMuNzQsMjYuMTdTMzEuNCw3Ni40Niw1MCw3Ni40Niw4My43NCw2NC43Miw4My43NCw1MC4zLDY4LjYsMjQuMTMsNTAsMjQuMTNabTE3LjE1LDIyaC0zNHY3LjExaDM0Wm0tMTMuOC0xM0g0Ni4yNHYzNGg3LjExWiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAtMTAgLTEwKSJ9LGVyYXNlc2hhcGU6e3dpZHRoOjgwLGhlaWdodDo4MCxwYXRoOiJNODIuNzcsNzhIMzEuODVMNiw0OS41NywzMS44NSwyMS4xNEg4Mi43N2E4LjcyLDguNzIsMCwwLDEsOC42NSw4Ljc3VjY5LjI0QTguNzIsOC43MiwwLDAsMSw4Mi43Nyw3OFpNMzUuNDYsNjkuODRIODIuNzdhLjU3LjU3LDAsMCwwLC40OS0uNlYyOS45MWEuNTcuNTcsMCwwLDAtLjQ5LS42MUgzNS40NkwxNyw0OS41N1ptMzIuNjgtMzQuNy0yNCwyNCw1LDUsMjQtMjRabS0xOSwuNTMtNSw1LDI0LDI0LDUtNVoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIDEgLTEwIC0xMCkifSxzcGlrZWxpbmU6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Ik01MTIgNDA5YzAtNTctNDYtMTA0LTEwMy0xMDQtNTcgMC0xMDQgNDctMTA0IDEwNCAwIDU3IDQ3IDEwMyAxMDQgMTAzIDU3IDAgMTAzLTQ2IDEwMy0xMDN6IG0tMzI3LTM5bDkyIDAgMCA5Mi05MiAweiBtLTE4NSAwbDkyIDAgMCA5Mi05MiAweiBtMzcwLTE4Nmw5MiAwIDAgOTMtOTIgMHogbTAtMTg0bDkyIDAgMCA5Mi05MiAweiIsdHJhbnNmb3JtOiJtYXRyaXgoMS41IDAgMCAtMS41IDAgODUwKSJ9LHBlbmNpbDp7d2lkdGg6MTc5MixoZWlnaHQ6MTc5MixwYXRoOiJNNDkxIDE1MzZsOTEtOTEtMjM1LTIzNS05MSA5MXYxMDdoMTI4djEyOGgxMDd6bTUyMy05MjhxMC0yMi0yMi0yMi0xMCAwLTE3IDdsLTU0MiA1NDJxLTcgNy03IDE3IDAgMjIgMjIgMjIgMTAgMCAxNy03bDU0Mi01NDJxNy03IDctMTd6bS01NC0xOTJsNDE2IDQxNi04MzIgODMyaC00MTZ2LTQxNnptNjgzIDk2cTAgNTMtMzcgOTBsLTE2NiAxNjYtNDE2LTQxNiAxNjYtMTY1cTM2LTM4IDkwLTM4IDUzIDAgOTEgMzhsMjM1IDIzNHEzNyAzOSAzNyA5MXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIDEgMCAxKSJ9LG5ld3Bsb3RseWxvZ286e25hbWU6Im5ld3Bsb3RseWxvZ28iLHN2ZzoiPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxMzIgMTMyJz48ZGVmcz48c3R5bGU+LmNscy0xIHtmaWxsOiAjM2Y0Zjc1O30gLmNscy0yIHtmaWxsOiAjODBjZmJlO30gLmNscy0zIHtmaWxsOiAjZmZmO308L3N0eWxlPjwvZGVmcz48dGl0bGU+cGxvdGx5LWxvZ29tYXJrPC90aXRsZT48ZyBpZD0nc3ltYm9sJz48cmVjdCBjbGFzcz0nY2xzLTEnIHdpZHRoPScxMzInIGhlaWdodD0nMTMyJyByeD0nNicgcnk9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9Jzc4JyBjeT0nNTQnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzEwMicgY3k9JzMwJyByPSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PSc3OCcgY3k9JzMwJyByPSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PSc1NCcgY3k9JzMwJyByPSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PSczMCcgY3k9JzMwJyByPSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PSczMCcgY3k9JzU0JyByPSc2Jy8+PHBhdGggY2xhc3M9J2Nscy0zJyBkPSdNMzAsNzJhNiw2LDAsMCwwLTYsNnYyNGE2LDYsMCwwLDAsMTIsMFY3OEE2LDYsMCwwLDAsMzAsNzJaJy8+PHBhdGggY2xhc3M9J2Nscy0zJyBkPSdNNzgsNzJhNiw2LDAsMCwwLTYsNnYyNGE2LDYsMCwwLDAsMTIsMFY3OEE2LDYsMCwwLDAsNzgsNzJaJy8+PHBhdGggY2xhc3M9J2Nscy0zJyBkPSdNNTQsNDhhNiw2LDAsMCwwLTYsNnY0OGE2LDYsMCwwLDAsMTIsMFY1NEE2LDYsMCwwLDAsNTQsNDhaJy8+PHBhdGggY2xhc3M9J2Nscy0zJyBkPSdNMTAyLDQ4YTYsNiwwLDAsMC02LDZ2NDhhNiw2LDAsMCwwLDEyLDBWNTRBNiw2LDAsMCwwLDEwMiw0OFonLz48L2c+PC9zdmc+In19fSx7fV0sNzU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuaXNMZWZ0QW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJsZWZ0Ij09PXQueGFuY2hvcnx8ImF1dG8iPT09dC54YW5jaG9yJiZ0Lng8PTEvM30sci5pc0NlbnRlckFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4iY2VudGVyIj09PXQueGFuY2hvcnx8ImF1dG8iPT09dC54YW5jaG9yJiZ0Lng+MS8zJiZ0Lng8Mi8zfSxyLmlzUmlnaHRBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuInJpZ2h0Ij09PXQueGFuY2hvcnx8ImF1dG8iPT09dC54YW5jaG9yJiZ0Lng+PTIvM30sci5pc1RvcEFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4idG9wIj09PXQueWFuY2hvcnx8ImF1dG8iPT09dC55YW5jaG9yJiZ0Lnk+PTIvM30sci5pc01pZGRsZUFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4ibWlkZGxlIj09PXQueWFuY2hvcnx8ImF1dG8iPT09dC55YW5jaG9yJiZ0Lnk+MS8zJiZ0Lnk8Mi8zfSxyLmlzQm90dG9tQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJib3R0b20iPT09dC55YW5jaG9yfHwiYXV0byI9PT10LnlhbmNob3ImJnQueTw9MS8zfX0se31dLDc1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL21vZCIpLGk9bi5tb2QsYT1uLm1vZEhhbGYsbz1NYXRoLlBJLHM9MipvO2Z1bmN0aW9uIGwodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tdFswXSk+cy0xZS0xNH1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIGEoZS10LHMpfWZ1bmN0aW9uIHUodCxlKXtpZihsKGUpKXJldHVybiEwO3ZhciByLG47ZVswXTxlWzFdPyhyPWVbMF0sbj1lWzFdKToocj1lWzFdLG49ZVswXSksKHI9aShyLHMpKT4obj1pKG4scykpJiYobis9cyk7dmFyIGE9aSh0LHMpLG89YStzO3JldHVybiBhPj1yJiZhPD1ufHxvPj1yJiZvPD1ufWZ1bmN0aW9uIGYodCxlLHIsbixpLGEsYyl7aT1pfHwwLGE9YXx8MDt2YXIgdSxmLGgscCxkLG09bChbcixuXSk7ZnVuY3Rpb24gZyh0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpK2ksYS10Kk1hdGguc2luKGUpXX1tPyh1PTAsZj1vLGg9cyk6cjxuPyh1PXIsaD1uKToodT1uLGg9ciksdDxlPyhwPXQsZD1lKToocD1lLGQ9dCk7dmFyIHYseT1NYXRoLmFicyhoLXUpPD1vPzA6MTtmdW5jdGlvbiB4KHQsZSxyKXtyZXR1cm4iQSIrW3QsdF0rIiAiK1swLHkscl0rIiAiK2codCxlKX1yZXR1cm4gbT92PW51bGw9PT1wPyJNIitnKGQsdSkreChkLGYsMCkreChkLGgsMCkrIloiOiJNIitnKHAsdSkreChwLGYsMCkreChwLGgsMCkrIlpNIitnKGQsdSkreChkLGYsMSkreChkLGgsMSkrIloiOm51bGw9PT1wPyh2PSJNIitnKGQsdSkreChkLGgsMCksYyYmKHYrPSJMMCwwWiIpKTp2PSJNIitnKHAsdSkrIkwiK2coZCx1KSt4KGQsaCwwKSsiTCIrZyhwLGgpK3gocCx1LDEpKyJaIix2fWUuZXhwb3J0cz17ZGVnMnJhZDpmdW5jdGlvbih0KXtyZXR1cm4gdC8xODAqb30scmFkMmRlZzpmdW5jdGlvbih0KXtyZXR1cm4gdC9vKjE4MH0sYW5nbGVEZWx0YTpjLGFuZ2xlRGlzdDpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyhjKHQsZSkpfSxpc0Z1bGxDaXJjbGU6bCxpc0FuZ2xlSW5zaWRlU2VjdG9yOnUsaXNQdEluc2lkZVNlY3RvcjpmdW5jdGlvbih0LGUscixuKXtyZXR1cm4hIXUoZSxuKSYmKHJbMF08clsxXT8oaT1yWzBdLGE9clsxXSk6KGk9clsxXSxhPXJbMF0pLHQ+PWkmJnQ8PWEpO3ZhciBpLGF9LHBhdGhBcmM6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gZihudWxsLHQsZSxyLG4saSwwKX0scGF0aFNlY3RvcjpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBmKG51bGwsdCxlLHIsbixpLDEpfSxwYXRoQW5udWx1czpmdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIGYodCxlLHIsbixpLGEsMSl9fX0seyIuL21vZCI6NzgzfV0sNzU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPUFycmF5LmlzQXJyYXksaT0idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXI6e2lzVmlldzpmdW5jdGlvbigpe3JldHVybiExfX0sYT0idW5kZWZpbmVkIj09dHlwZW9mIERhdGFWaWV3P2Z1bmN0aW9uKCl7fTpEYXRhVmlldztmdW5jdGlvbiBvKHQpe3JldHVybiBpLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgYSl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gbih0KXx8byh0KX1mdW5jdGlvbiBsKHQsZSxyKXtpZihzKHQpKXtpZihzKHRbMF0pKXtmb3IodmFyIG49cixpPTA7aTx0Lmxlbmd0aDtpKyspbj1lKG4sdFtpXS5sZW5ndGgpO3JldHVybiBufXJldHVybiB0Lmxlbmd0aH1yZXR1cm4gMH1yLmlzVHlwZWRBcnJheT1vLHIuaXNBcnJheU9yVHlwZWRBcnJheT1zLHIuaXNBcnJheTFEPWZ1bmN0aW9uKHQpe3JldHVybiFzKHRbMF0pfSxyLmVuc3VyZUFycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCl8fCh0PVtdKSx0Lmxlbmd0aD1lLHR9LHIuY29uY2F0PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLGksYSxvLHMsbCxjPVtdLHU9ITAsZj0wO2ZvcihyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKykobz0oaT1hcmd1bWVudHNbcl0pLmxlbmd0aCkmJihlP2MucHVzaChpKTooZT1pLGE9byksbihpKT90PSExOih1PSExLGY/dCE9PWkuY29uc3RydWN0b3ImJih0PSExKTp0PWkuY29uc3RydWN0b3IpLGYrPW8pO2lmKCFmKXJldHVybltdO2lmKCFjLmxlbmd0aClyZXR1cm4gZTtpZih1KXJldHVybiBlLmNvbmNhdC5hcHBseShlLGMpO2lmKHQpe2Zvcigocz1uZXcgdChmKSkuc2V0KGUpLHI9MDtyPGMubGVuZ3RoO3IrKylpPWNbcl0scy5zZXQoaSxhKSxhKz1pLmxlbmd0aDtyZXR1cm4gc31mb3Iocz1uZXcgQXJyYXkoZiksbD0wO2w8ZS5sZW5ndGg7bCsrKXNbbF09ZVtsXTtmb3Iocj0wO3I8Yy5sZW5ndGg7cisrKXtmb3IoaT1jW3JdLGw9MDtsPGkubGVuZ3RoO2wrKylzW2ErbF09aVtsXTthKz1sfXJldHVybiBzfSxyLm1heFJvd0xlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LE1hdGgubWF4LDApfSxyLm1pblJvd0xlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LE1hdGgubWluLDEvMCl9fSx7fV0sNzU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9L15bJyIlLCQjXHMnXSt8WywgXXxbJyIlLCQjXHMnXSskL2c7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC5yZXBsYWNlKGEsIiIpKSxuKHQpP051bWJlcih0KTppfX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw3NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5fZ2xjYW52YXMmJmUuX2dsY2FudmFzLnNpemUoKSYmZS5fZ2xjYW52YXMuZWFjaCgoZnVuY3Rpb24odCl7dC5yZWdsJiZ0LnJlZ2wuY2xlYXIoe2NvbG9yOiEwLGRlcHRoOiEwfSl9KSl9fSx7fV0sNzYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt0Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyJiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlciksZGVsZXRlIHQuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXIpfX0se31dLDc2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLG89dCgiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL3NjYWxlcyIpLHM9dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLGw9dCgiLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNLGM9dCgiLi9uZXN0ZWRfcHJvcGVydHkiKSx1PXQoIi4vcmVnZXgiKS5jb3VudGVyLGY9dCgiLi9tb2QiKS5tb2RIYWxmLGg9dCgiLi9hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZnVuY3Rpb24gcCh0LGUpe3ZhciBuPXIudmFsT2JqZWN0TWV0YVtlLnZhbFR5cGVdO2lmKGUuYXJyYXlPayYmaCh0KSlyZXR1cm4hMDtpZihuLnZhbGlkYXRlRnVuY3Rpb24pcmV0dXJuIG4udmFsaWRhdGVGdW5jdGlvbih0LGUpO3ZhciBpPXt9LGE9aSxvPXtzZXQ6ZnVuY3Rpb24odCl7YT10fX07cmV0dXJuIG4uY29lcmNlRnVuY3Rpb24odCxvLGksZSksYSE9PWl9ci52YWxPYmplY3RNZXRhPXtkYXRhX2FycmF5Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7aCh0KT9lLnNldCh0KTp2b2lkIDAhPT1yJiZlLnNldChyKX19LGVudW1lcmF0ZWQ6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe24uY29lcmNlTnVtYmVyJiYodD0rdCksLTE9PT1uLnZhbHVlcy5pbmRleE9mKHQpP2Uuc2V0KHIpOmUuc2V0KHQpfSx2YWxpZGF0ZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSl7ZS5jb2VyY2VOdW1iZXImJih0PSt0KTtmb3IodmFyIHI9ZS52YWx1ZXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1TdHJpbmcocltuXSk7aWYoIi8iPT09aS5jaGFyQXQoMCkmJiIvIj09PWkuY2hhckF0KGkubGVuZ3RoLTEpKXtpZihuZXcgUmVnRXhwKGkuc3Vic3RyKDEsaS5sZW5ndGgtMikpLnRlc3QodCkpcmV0dXJuITB9ZWxzZSBpZih0PT09cltuXSlyZXR1cm4hMH1yZXR1cm4hMX19LGJvb2xlYW46e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXshMD09PXR8fCExPT09dD9lLnNldCh0KTplLnNldChyKX19LG51bWJlcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsaSl7IW4odCl8fHZvaWQgMCE9PWkubWluJiZ0PGkubWlufHx2b2lkIDAhPT1pLm1heCYmdD5pLm1heD9lLnNldChyKTplLnNldCgrdCl9fSxpbnRlZ2VyOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixpKXt0JTF8fCFuKHQpfHx2b2lkIDAhPT1pLm1pbiYmdDxpLm1pbnx8dm9pZCAwIT09aS5tYXgmJnQ+aS5tYXg/ZS5zZXQocik6ZS5zZXQoK3QpfX0sc3RyaW5nOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixuKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciBpPSJudW1iZXIiPT10eXBlb2YgdDshMCE9PW4uc3RyaWN0JiZpP2Uuc2V0KFN0cmluZyh0KSk6ZS5zZXQocil9ZWxzZSBuLm5vQmxhbmsmJiF0P2Uuc2V0KHIpOmUuc2V0KHQpfX0sY29sb3I6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtpKHQpLmlzVmFsaWQoKT9lLnNldCh0KTplLnNldChyKX19LGNvbG9ybGlzdDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe0FycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoJiZ0LmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gaSh0KS5pc1ZhbGlkKCl9KSk/ZS5zZXQodCk6ZS5zZXQocil9fSxjb2xvcnNjYWxlOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7ZS5zZXQoby5nZXQodCxyKSl9fSxhbmdsZTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpeyJhdXRvIj09PXQ/ZS5zZXQoImF1dG8iKTpuKHQpP2Uuc2V0KGYoK3QsMzYwKSk6ZS5zZXQocil9fSxzdWJwbG90aWQ6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4ucmVnZXh8fHUocik7InN0cmluZyI9PXR5cGVvZiB0JiZpLnRlc3QodCk/ZS5zZXQodCk6ZS5zZXQocil9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmRmbHQ7cmV0dXJuIHQ9PT1yfHwic3RyaW5nIj09dHlwZW9mIHQmJiEhdShyKS50ZXN0KHQpfX0sZmxhZ2xpc3Q6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgdClpZigtMT09PShuLmV4dHJhc3x8W10pLmluZGV4T2YodCkpe2Zvcih2YXIgaT10LnNwbGl0KCIrIiksYT0wO2E8aS5sZW5ndGg7KXt2YXIgbz1pW2FdOy0xPT09bi5mbGFncy5pbmRleE9mKG8pfHxpLmluZGV4T2Yobyk8YT9pLnNwbGljZShhLDEpOmErK31pLmxlbmd0aD9lLnNldChpLmpvaW4oIisiKSk6ZS5zZXQocil9ZWxzZSBlLnNldCh0KTtlbHNlIGUuc2V0KHIpfX0sYW55Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7dm9pZCAwPT09dD9lLnNldChyKTplLnNldCh0KX19LGluZm9fYXJyYXk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxuLGkpe2Z1bmN0aW9uIGEodCxlLG4pe3ZhciBpLGE9e3NldDpmdW5jdGlvbih0KXtpPXR9fTtyZXR1cm4gdm9pZCAwPT09biYmKG49ZS5kZmx0KSxyLnZhbE9iamVjdE1ldGFbZS52YWxUeXBlXS5jb2VyY2VGdW5jdGlvbih0LGEsbixlKSxpfXZhciBvPTI9PT1pLmRpbWVuc2lvbnN8fCIxLTIiPT09aS5kaW1lbnNpb25zJiZBcnJheS5pc0FycmF5KHQpJiZBcnJheS5pc0FycmF5KHRbMF0pO2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBzLGwsYyx1LGYsaCxwPWkuaXRlbXMsZD1bXSxtPUFycmF5LmlzQXJyYXkocCksZz1tJiZvJiZBcnJheS5pc0FycmF5KHBbMF0pLHY9byYmbSYmIWcseT1tJiYhdj9wLmxlbmd0aDp0Lmxlbmd0aDtpZihuPUFycmF5LmlzQXJyYXkobik/bjpbXSxvKWZvcihzPTA7czx5O3MrKylmb3IoZFtzXT1bXSxjPUFycmF5LmlzQXJyYXkodFtzXSk/dFtzXTpbXSxmPXY/cC5sZW5ndGg6bT9wW3NdLmxlbmd0aDpjLmxlbmd0aCxsPTA7bDxmO2wrKyl1PXY/cFtsXTptP3Bbc11bbF06cCx2b2lkIDAhPT0oaD1hKGNbbF0sdSwobltzXXx8W10pW2xdKSkmJihkW3NdW2xdPWgpO2Vsc2UgZm9yKHM9MDtzPHk7cysrKXZvaWQgMCE9PShoPWEodFtzXSxtP3Bbc106cCxuW3NdKSkmJihkW3NdPWgpO2Uuc2V0KGQpfWVsc2UgZS5zZXQobil9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4hMTt2YXIgcj1lLml0ZW1zLG49QXJyYXkuaXNBcnJheShyKSxpPTI9PT1lLmRpbWVuc2lvbnM7aWYoIWUuZnJlZUxlbmd0aCYmdC5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylpZihpKXtpZighQXJyYXkuaXNBcnJheSh0W2FdKXx8IWUuZnJlZUxlbmd0aCYmdFthXS5sZW5ndGghPT1yW2FdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG89MDtvPHRbYV0ubGVuZ3RoO28rKylpZighcCh0W2FdW29dLG4/clthXVtvXTpyKSlyZXR1cm4hMX1lbHNlIGlmKCFwKHRbYV0sbj9yW2FdOnIpKXJldHVybiExO3JldHVybiEwfX19LHIuY29lcmNlPWZ1bmN0aW9uKHQsZSxuLGksYSl7dmFyIG89YyhuLGkpLmdldCgpLHM9Yyh0LGkpLGw9YyhlLGkpLHU9cy5nZXQoKSxmPWUuX3RlbXBsYXRlO2lmKHZvaWQgMD09PXUmJmYmJih1PWMoZixpKS5nZXQoKSxmPTApLHZvaWQgMD09PWEmJihhPW8uZGZsdCksby5hcnJheU9rJiZoKHUpKXJldHVybiBsLnNldCh1KSx1O3ZhciBkPXIudmFsT2JqZWN0TWV0YVtvLnZhbFR5cGVdLmNvZXJjZUZ1bmN0aW9uO2QodSxsLGEsbyk7dmFyIG09bC5nZXQoKTtyZXR1cm4gZiYmbT09PWEmJiFwKHUsbykmJihkKHU9YyhmLGkpLmdldCgpLGwsYSxvKSxtPWwuZ2V0KCkpLG19LHIuY29lcmNlMj1mdW5jdGlvbih0LGUsbixpLGEpe3ZhciBvPWModCxpKSxzPXIuY29lcmNlKHQsZSxuLGksYSksbD1vLmdldCgpO3JldHVybiBudWxsIT1sJiZzfSxyLmNvZXJjZUZvbnQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt9O3JldHVybiByPXJ8fHt9LG4uZmFtaWx5PXQoZSsiLmZhbWlseSIsci5mYW1pbHkpLG4uc2l6ZT10KGUrIi5zaXplIixyLnNpemUpLG4uY29sb3I9dChlKyIuY29sb3IiLHIuY29sb3IpLG59LHIuY29lcmNlUGF0dGVybj1mdW5jdGlvbih0LGUscixuKXtpZih0KGUrIi5zaGFwZSIpKXt0KGUrIi5zb2xpZGl0eSIpLHQoZSsiLnNpemUiKTt2YXIgaT0ib3ZlcmxheSI9PT10KGUrIi5maWxsbW9kZSIpO2lmKCFuKXt2YXIgYT10KGUrIi5iZ2NvbG9yIixpP3I6dm9pZCAwKTt0KGUrIi5mZ2NvbG9yIixpP3MuY29udHJhc3QoYSk6cil9dChlKyIuZmdvcGFjaXR5IixpPy41OjEpfX0sci5jb2VyY2VIb3ZlcmluZm89ZnVuY3Rpb24odCxlLG4pe3ZhciBpLG89ZS5fbW9kdWxlLmF0dHJpYnV0ZXMscz1vLmhvdmVyaW5mbz9vOmEsbD1zLmhvdmVyaW5mbztpZigxPT09bi5fZGF0YUxlbmd0aCl7dmFyIGM9ImFsbCI9PT1sLmRmbHQ/bC5mbGFncy5zbGljZSgpOmwuZGZsdC5zcGxpdCgiKyIpO2Muc3BsaWNlKGMuaW5kZXhPZigibmFtZSIpLDEpLGk9Yy5qb2luKCIrIil9cmV0dXJuIHIuY29lcmNlKHQsZSxzLCJob3ZlcmluZm8iLGkpfSxyLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHk9ZnVuY3Rpb24odCxlKXtpZih0Lm1hcmtlcil7dmFyIHIsbixpPXQubWFya2VyLm9wYWNpdHk7aWYodm9pZCAwIT09aSloKGkpfHx0LnNlbGVjdGVkfHx0LnVuc2VsZWN0ZWR8fChyPWksbj1sKmkpLGUoInNlbGVjdGVkLm1hcmtlci5vcGFjaXR5IixyKSxlKCJ1bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5IixuKX19LHIudmFsaWRhdGU9cH0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9zY2FsZXMiOjY1NCwiLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NzUxLCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4vYXJyYXkiOjc1OCwiLi9tb2QiOjc4MywiLi9uZXN0ZWRfcHJvcGVydHkiOjc4NCwiLi9yZWdleCI6NzkzLCJmYXN0LWlzbnVtZXJpYyI6MjQyLHRpbnljb2xvcjI6NTcyfV0sNzYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGksYT10KCJkMy10aW1lLWZvcm1hdCIpLnRpbWVGb3JtYXQsbz10KCJmYXN0LWlzbnVtZXJpYyIpLHM9dCgiLi9sb2dnZXJzIiksbD10KCIuL21vZCIpLm1vZCxjPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKSx1PWMuQkFETlVNLGY9Yy5PTkVEQVksaD1jLk9ORUhPVVIscD1jLk9ORU1JTixkPWMuT05FU0VDLG09Yy5FUE9DSEpELGc9dCgiLi4vcmVnaXN0cnkiKSx2PXQoImQzLXRpbWUtZm9ybWF0IikudXRjRm9ybWF0LHk9L15ccyooLT9cZFxkXGRcZHxcZFxkKSgtKFxkP1xkKSgtKFxkP1xkKShbIFR0XShbMDFdP1xkfDJbMC0zXSkoOihbMC01XVxkKSg6KFswLTVdXGQoXC5cZCspPykpPyhafHp8WytcLV1cZFxkKDo/XGRcZCk/KT8pPyk/KT8pP1xzKiQvbSx4PS9eXHMqKC0/XGRcZFxkXGR8XGRcZCkoLShcZD9cZGk/KSgtKFxkP1xkKShbIFR0XShbMDFdP1xkfDJbMC0zXSkoOihbMC01XVxkKSg6KFswLTVdXGQoXC5cZCspPykpPyhafHp8WytcLV1cZFxkKDo/XGRcZCk/KT8pPyk/KT8pP1xzKiQvbSxiPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS03MDtmdW5jdGlvbiBfKHQpe3JldHVybiB0JiZnLmNvbXBvbmVudHNSZWdpc3RyeS5jYWxlbmRhcnMmJiJzdHJpbmciPT10eXBlb2YgdCYmImdyZWdvcmlhbiIhPT10fWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gU3RyaW5nKHQrTWF0aC5wb3coMTAsZSkpLnN1YnN0cigxKX1yLmRhdGVUaWNrMD1mdW5jdGlvbih0LGUpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIF8odCk/ZT9nLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiQ0FOT05JQ0FMX1NVTkRBWSIpW3RdOmcuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJDQU5PTklDQUxfVElDSyIpW3RdOmU/IjIwMDAtMDEtMDIiOiIyMDAwLTAxLTAxIn0odCwhIWUpO2lmKGU8MilyZXR1cm4gbjt2YXIgaT1yLmRhdGVUaW1lMm1zKG4sdCk7cmV0dXJuIGkrPWYqKGUtMSksci5tczJEYXRlVGltZShpLDAsdCl9LHIuZGZsdFJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBfKHQpP2cuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJERkxUUkFOR0UiKVt0XTpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl19LHIuaXNKU0RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuZ2V0VGltZX0sci5kYXRlVGltZTJtcz1mdW5jdGlvbih0LGUpe2lmKHIuaXNKU0RhdGUodCkpe3ZhciBhPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSpwLG89KHQuZ2V0VVRDTWludXRlcygpLXQuZ2V0TWludXRlcygpKSpwKyh0LmdldFVUQ1NlY29uZHMoKS10LmdldFNlY29uZHMoKSkqZCsodC5nZXRVVENNaWxsaXNlY29uZHMoKS10LmdldE1pbGxpc2Vjb25kcygpKTtpZihvKXt2YXIgcz0zKnA7YT1hLXMvMitsKG8tYStzLzIscyl9cmV0dXJuKHQ9TnVtYmVyKHQpLWEpPj1uJiZ0PD1pP3Q6dX1pZigic3RyaW5nIiE9dHlwZW9mIHQmJiJudW1iZXIiIT10eXBlb2YgdClyZXR1cm4gdTt0PVN0cmluZyh0KTt2YXIgYz1fKGUpLHY9dC5jaGFyQXQoMCk7IWN8fCJHIiE9PXYmJiJnIiE9PXZ8fCh0PXQuc3Vic3RyKDEpLGU9IiIpO3ZhciB3PWMmJiJjaGluZXNlIj09PWUuc3Vic3RyKDAsNyksVD10Lm1hdGNoKHc/eDp5KTtpZighVClyZXR1cm4gdTt2YXIgaz1UWzFdLEE9VFszXXx8IjEiLE09TnVtYmVyKFRbNV18fDEpLFM9TnVtYmVyKFRbN118fDApLEU9TnVtYmVyKFRbOV18fDApLEw9TnVtYmVyKFRbMTFdfHwwKTtpZihjKXtpZigyPT09ay5sZW5ndGgpcmV0dXJuIHU7dmFyIEM7az1OdW1iZXIoayk7dHJ5e3ZhciBQPWcuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShlKTtpZih3KXt2YXIgST0iaSI9PT1BLmNoYXJBdChBLmxlbmd0aC0xKTtBPXBhcnNlSW50KEEsMTApLEM9UC5uZXdEYXRlKGssUC50b01vbnRoSW5kZXgoayxBLEkpLE0pfWVsc2UgQz1QLm5ld0RhdGUoayxOdW1iZXIoQSksTSl9Y2F0Y2godCl7cmV0dXJuIHV9cmV0dXJuIEM/KEMudG9KRCgpLW0pKmYrUypoK0UqcCtMKmQ6dX1rPTI9PT1rLmxlbmd0aD8oTnVtYmVyKGspKzJlMy1iKSUxMDArYjpOdW1iZXIoayksQS09MTt2YXIgTz1uZXcgRGF0ZShEYXRlLlVUQygyZTMsQSxNLFMsRSkpO3JldHVybiBPLnNldFVUQ0Z1bGxZZWFyKGspLE8uZ2V0VVRDTW9udGgoKSE9PUF8fE8uZ2V0VVRDRGF0ZSgpIT09TT91Ok8uZ2V0VGltZSgpK0wqZH0sbj1yLk1JTl9NUz1yLmRhdGVUaW1lMm1zKCItOTk5OSIpLGk9ci5NQVhfTVM9ci5kYXRlVGltZTJtcygiOTk5OS0xMi0zMSAyMzo1OTo1OS45OTk5Iiksci5pc0RhdGVUaW1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGF0ZVRpbWUybXModCxlKSE9PXV9O3ZhciBUPTkwKmYsaz0zKmgsQT01KnA7ZnVuY3Rpb24gTSh0LGUscixuLGkpe2lmKChlfHxyfHxufHxpKSYmKHQrPSIgIit3KGUsMikrIjoiK3cociwyKSwobnx8aSkmJih0Kz0iOiIrdyhuLDIpLGkpKSl7Zm9yKHZhciBhPTQ7aSUxMD09MDspYS09MSxpLz0xMDt0Kz0iLiIrdyhpLGEpfXJldHVybiB0fXIubXMyRGF0ZVRpbWU9ZnVuY3Rpb24odCxlLHIpe2lmKCJudW1iZXIiIT10eXBlb2YgdHx8ISh0Pj1uJiZ0PD1pKSlyZXR1cm4gdTtlfHwoZT0wKTt2YXIgYSxvLHMsYyx5LHgsYj1NYXRoLmZsb29yKDEwKmwodCsuMDUsMSkpLHc9TWF0aC5yb3VuZCh0LWIvMTApO2lmKF8ocikpe3ZhciBTPU1hdGguZmxvb3Iody9mKSttLEU9TWF0aC5mbG9vcihsKHQsZikpO3RyeXthPWcuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShyKS5mcm9tSkQoUykuZm9ybWF0RGF0ZSgieXl5eS1tbS1kZCIpfWNhdGNoKHQpe2E9digiRyVZLSVtLSVkIikobmV3IERhdGUodykpfWlmKCItIj09PWEuY2hhckF0KDApKWZvcig7YS5sZW5ndGg8MTE7KWE9Ii0wIithLnN1YnN0cigxKTtlbHNlIGZvcig7YS5sZW5ndGg8MTA7KWE9IjAiK2E7bz1lPFQ/TWF0aC5mbG9vcihFL2gpOjAscz1lPFQ/TWF0aC5mbG9vcihFJWgvcCk6MCxjPWU8az9NYXRoLmZsb29yKEUlcC9kKTowLHk9ZTxBP0UlZCoxMCtiOjB9ZWxzZSB4PW5ldyBEYXRlKHcpLGE9digiJVktJW0tJWQiKSh4KSxvPWU8VD94LmdldFVUQ0hvdXJzKCk6MCxzPWU8VD94LmdldFVUQ01pbnV0ZXMoKTowLGM9ZTxrP3guZ2V0VVRDU2Vjb25kcygpOjAseT1lPEE/MTAqeC5nZXRVVENNaWxsaXNlY29uZHMoKStiOjA7cmV0dXJuIE0oYSxvLHMsYyx5KX0sci5tczJEYXRlVGltZUxvY2FsPWZ1bmN0aW9uKHQpe2lmKCEodD49bitmJiZ0PD1pLWYpKXJldHVybiB1O3ZhciBlPU1hdGguZmxvb3IoMTAqbCh0Ky4wNSwxKSkscj1uZXcgRGF0ZShNYXRoLnJvdW5kKHQtZS8xMCkpO3JldHVybiBNKGEoIiVZLSVtLSVkIikociksci5nZXRIb3VycygpLHIuZ2V0TWludXRlcygpLHIuZ2V0U2Vjb25kcygpLDEwKnIuZ2V0VVRDTWlsbGlzZWNvbmRzKCkrZSl9LHIuY2xlYW5EYXRlPWZ1bmN0aW9uKHQsZSxuKXtpZih0PT09dSlyZXR1cm4gZTtpZihyLmlzSlNEYXRlKHQpfHwibnVtYmVyIj09dHlwZW9mIHQmJmlzRmluaXRlKHQpKXtpZihfKG4pKXJldHVybiBzLmVycm9yKCJKUyBEYXRlcyBhbmQgbWlsbGlzZWNvbmRzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB3b3JsZCBjYWxlbmRhcnMiLHQpLGU7aWYoISh0PXIubXMyRGF0ZVRpbWVMb2NhbCgrdCkpJiZ2b2lkIDAhPT1lKXJldHVybiBlfWVsc2UgaWYoIXIuaXNEYXRlVGltZSh0LG4pKXJldHVybiBzLmVycm9yKCJ1bnJlY29nbml6ZWQgZGF0ZSIsdCksZTtyZXR1cm4gdH07dmFyIFM9LyVcZD9mL2csRT0vJWgvZyxMPXsxOiIxIiwyOiIxIiwzOiIyIiw0OiIyIn07ZnVuY3Rpb24gQyh0LGUscixuKXt0PXQucmVwbGFjZShTLChmdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1pbigrdC5jaGFyQXQoMSl8fDYsNik7cmV0dXJuKGUvMWUzJTErMikudG9GaXhlZChyKS5zdWJzdHIoMikucmVwbGFjZSgvMCskLywiIil8fCIwIn0pKTt2YXIgaT1uZXcgRGF0ZShNYXRoLmZsb29yKGUrLjA1KSk7aWYodD10LnJlcGxhY2UoRSwoZnVuY3Rpb24oKXtyZXR1cm4gTFtyKCIlcSIpKGkpXX0pKSxfKG4pKXRyeXt0PWcuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJ3b3JsZENhbEZtdCIpKHQsZSxuKX1jYXRjaCh0KXtyZXR1cm4iSW52YWxpZCJ9cmV0dXJuIHIodCkoaSl9dmFyIFA9WzU5LDU5LjksNTkuOTksNTkuOTk5LDU5Ljk5OTldO3IuZm9ybWF0RGF0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7aWYoaT1fKGkpJiZpLCFlKWlmKCJ5Ij09PXIpZT1hLnllYXI7ZWxzZSBpZigibSI9PT1yKWU9YS5tb250aDtlbHNle2lmKCJkIiE9PXIpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9bCh0Ky4wNSxmKSxuPXcoTWF0aC5mbG9vcihyL2gpLDIpKyI6Iit3KGwoTWF0aC5mbG9vcihyL3ApLDYwKSwyKTtpZigiTSIhPT1lKXtvKGUpfHwoZT0wKTt2YXIgaT0oMTAwK01hdGgubWluKGwodC9kLDYwKSxQW2VdKSkudG9GaXhlZChlKS5zdWJzdHIoMSk7ZT4wJiYoaT1pLnJlcGxhY2UoLzArJC8sIiIpLnJlcGxhY2UoL1tcLl0kLywiIikpLG4rPSI6IitpfXJldHVybiBufSh0LHIpKyJcbiIrQyhhLmRheU1vbnRoWWVhcix0LG4saSk7ZT1hLmRheU1vbnRoKyJcbiIrYS55ZWFyfXJldHVybiBDKGUsdCxuLGkpfTt2YXIgST0zKmY7ci5pbmNyZW1lbnRNb250aD1mdW5jdGlvbih0LGUscil7cj1fKHIpJiZyO3ZhciBuPWwodCxmKTtpZih0PU1hdGgucm91bmQodC1uKSxyKXRyeXt2YXIgaT1NYXRoLnJvdW5kKHQvZikrbSxhPWcuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShyKSxvPWEuZnJvbUpEKGkpO3JldHVybiBlJTEyP2EuYWRkKG8sZSwibSIpOmEuYWRkKG8sZS8xMiwieSIpLChvLnRvSkQoKS1tKSpmK259Y2F0Y2goZSl7cy5lcnJvcigiaW52YWxpZCBtcyAiK3QrIiBpbiBjYWxlbmRhciAiK3IpfXZhciBjPW5ldyBEYXRlKHQrSSk7cmV0dXJuIGMuc2V0VVRDTW9udGgoYy5nZXRVVENNb250aCgpK2UpK24tSX0sci5maW5kRXhhY3REYXRlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGk9MCxhPTAscz0wLGw9MCxjPV8oZSkmJmcuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShlKSx1PTA7dTx0Lmxlbmd0aDt1KyspaWYobj10W3VdLG8obikpe2lmKCEobiVmKSlpZihjKXRyeXsxPT09KHI9Yy5mcm9tSkQobi9mK20pKS5kYXkoKT8xPT09ci5tb250aCgpP2krKzphKys6cysrfWNhdGNoKHQpe31lbHNlIDE9PT0ocj1uZXcgRGF0ZShuKSkuZ2V0VVRDRGF0ZSgpPzA9PT1yLmdldFVUQ01vbnRoKCk/aSsrOmErKzpzKyt9ZWxzZSBsKys7cys9YSs9aTt2YXIgaD10Lmxlbmd0aC1sO3JldHVybntleGFjdFllYXJzOmkvaCxleGFjdE1vbnRoczphL2gsZXhhY3REYXlzOnMvaH19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vcmVnaXN0cnkiOjkwNCwiLi9sb2dnZXJzIjo3ODAsIi4vbW9kIjo3ODMsImQzLXRpbWUtZm9ybWF0IjoxNjgsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw3NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi9sb2dnZXJzIiksYT10KCIuL21hdHJpeCIpLG89dCgiZ2wtbWF0NCIpO2Z1bmN0aW9uIHModCl7dmFyIGU9dCYmdC5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodCl9ZnVuY3Rpb24gbCh0LGUscil7dmFyIG49InBsb3RseS5qcy1zdHlsZS0iK3QsYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChuKTthfHwoKGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSkuc2V0QXR0cmlidXRlKCJpZCIsbiksYS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYSkpO3ZhciBvPWEuc2hlZXQ7by5pbnNlcnRSdWxlP28uaW5zZXJ0UnVsZShlKyJ7IityKyJ9IiwwKTpvLmFkZFJ1bGU/by5hZGRSdWxlKGUsciwwKTppLndhcm4oImFkZFN0eWxlUnVsZSBmYWlsZWQiKX1mdW5jdGlvbiBjKHQpe3ZhciBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkscj1lLmdldFByb3BlcnR5VmFsdWUoIi13ZWJraXQtdHJhbnNmb3JtIil8fGUuZ2V0UHJvcGVydHlWYWx1ZSgiLW1vei10cmFuc2Zvcm0iKXx8ZS5nZXRQcm9wZXJ0eVZhbHVlKCItbXMtdHJhbnNmb3JtIil8fGUuZ2V0UHJvcGVydHlWYWx1ZSgiLW8tdHJhbnNmb3JtIil8fGUuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIik7cmV0dXJuIm5vbmUiPT09cj9udWxsOnIucmVwbGFjZSgibWF0cml4IiwiIikucmVwbGFjZSgiM2QiLCIiKS5zbGljZSgxLC0xKS5zcGxpdCgiLCIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuK3R9KSl9ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9W107Zih0KTspZS5wdXNoKHQpLHQ9dC5wYXJlbnROb2RlO3JldHVybiBlfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQmJih0IGluc3RhbmNlb2YgRWxlbWVudHx8dCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KX1lLmV4cG9ydHM9e2dldEdyYXBoRGl2OmZ1bmN0aW9uKHQpe3ZhciBlO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYobnVsbD09PShlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpKSl0aHJvdyBuZXcgRXJyb3IoIk5vIERPTSBlbGVtZW50IHdpdGggaWQgJyIrdCsiJyBleGlzdHMgb24gdGhlIHBhZ2UuIik7cmV0dXJuIGV9aWYobnVsbD09dCl0aHJvdyBuZXcgRXJyb3IoIkRPTSBlbGVtZW50IHByb3ZpZGVkIGlzIG51bGwgb3IgdW5kZWZpbmVkIik7cmV0dXJuIHR9LGlzUGxvdERpdjpmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KTtyZXR1cm4gZS5ub2RlKClpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZlLnNpemUoKSYmZS5jbGFzc2VkKCJqcy1wbG90bHktcGxvdCIpfSxyZW1vdmVFbGVtZW50OnMsYWRkU3R5bGVSdWxlOmZ1bmN0aW9uKHQsZSl7bCgiZ2xvYmFsIix0LGUpfSxhZGRSZWxhdGVkU3R5bGVSdWxlOmwsZGVsZXRlUmVsYXRlZFN0eWxlUnVsZTpmdW5jdGlvbih0KXt2YXIgZT0icGxvdGx5LmpzLXN0eWxlLSIrdCxyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO3ImJnMocil9LGdldEZ1bGxUcmFuc2Zvcm1NYXRyaXg6ZnVuY3Rpb24odCl7dmFyIGU9dSh0KSxyPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1jKHQpO2lmKGUpe3ZhciBuPWEuY29udmVydENzc01hdHJpeChlKTtyPW8ubXVsdGlwbHkocixyLG4pfX0pKSxyfSxnZXRFbGVtZW50VHJhbnNmb3JtTWF0cml4OmMsZ2V0RWxlbWVudEFuZEFuY2VzdG9yczp1LGVxdWFsRG9tUmVjdHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmZSYmdC54PT09ZS54JiZ0Lnk9PT1lLnkmJnQudG9wPT09ZS50b3AmJnQubGVmdD09PWUubGVmdCYmdC5yaWdodD09PWUucmlnaHQmJnQuYm90dG9tPT09ZS5ib3R0b219fX0seyIuL2xvZ2dlcnMiOjc4MCwiLi9tYXRyaXgiOjc4MiwiQHBsb3RseS9kMyI6NTgsImdsLW1hdDQiOjI4Nn1dLDc2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJldmVudHMiKS5FdmVudEVtaXR0ZXIsaT17aW5pdDpmdW5jdGlvbih0KXtpZih0Ll9ldiBpbnN0YW5jZW9mIG4pcmV0dXJuIHQ7dmFyIGU9bmV3IG4scj1uZXcgbjtyZXR1cm4gdC5fZXY9ZSx0Ll9pbnRlcm5hbEV2PXIsdC5vbj1lLm9uLmJpbmQoZSksdC5vbmNlPWUub25jZS5iaW5kKGUpLHQucmVtb3ZlTGlzdGVuZXI9ZS5yZW1vdmVMaXN0ZW5lci5iaW5kKGUpLHQucmVtb3ZlQWxsTGlzdGVuZXJzPWUucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQoZSksdC5faW50ZXJuYWxPbj1yLm9uLmJpbmQociksdC5faW50ZXJuYWxPbmNlPXIub25jZS5iaW5kKHIpLHQuX3JlbW92ZUludGVybmFsTGlzdGVuZXI9ci5yZW1vdmVMaXN0ZW5lci5iaW5kKHIpLHQuX3JlbW92ZUFsbEludGVybmFsTGlzdGVuZXJzPXIucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQociksdC5lbWl0PWZ1bmN0aW9uKG4saSl7InVuZGVmaW5lZCIhPXR5cGVvZiBqUXVlcnkmJmpRdWVyeSh0KS50cmlnZ2VyKG4saSksZS5lbWl0KG4saSksci5lbWl0KG4saSl9LHR9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpOyJ1bmRlZmluZWQiIT10eXBlb2YgalF1ZXJ5JiYobj1qUXVlcnkodCkudHJpZ2dlckhhbmRsZXIoZSxyKSk7dmFyIGE9dC5fZXY7aWYoIWEpcmV0dXJuIG47dmFyIG8scz1hLl9ldmVudHNbZV07aWYoIXMpcmV0dXJuIG47ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdC5saXN0ZW5lcj8oYS5yZW1vdmVMaXN0ZW5lcihlLHQubGlzdGVuZXIpLHQuZmlyZWQ/dm9pZCAwOih0LmZpcmVkPSEwLHQubGlzdGVuZXIuYXBwbHkoYSxbcl0pKSk6dC5hcHBseShhLFtyXSl9Zm9yKHM9QXJyYXkuaXNBcnJheShzKT9zOltzXSxvPTA7bzxzLmxlbmd0aC0xO28rKylsKHNbb10pO3JldHVybiBpPWwoc1tvXSksdm9pZCAwIT09bj9uOml9LHB1cmdlOmZ1bmN0aW9uKHQpe3JldHVybiBkZWxldGUgdC5fZXYsZGVsZXRlIHQub24sZGVsZXRlIHQub25jZSxkZWxldGUgdC5yZW1vdmVMaXN0ZW5lcixkZWxldGUgdC5yZW1vdmVBbGxMaXN0ZW5lcnMsZGVsZXRlIHQuZW1pdCxkZWxldGUgdC5fZXYsZGVsZXRlIHQuX2ludGVybmFsRXYsZGVsZXRlIHQuX2ludGVybmFsT24sZGVsZXRlIHQuX2ludGVybmFsT25jZSxkZWxldGUgdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcixkZWxldGUgdC5fcmVtb3ZlQWxsSW50ZXJuYWxMaXN0ZW5lcnMsdH19O2UuZXhwb3J0cz1pfSx7ZXZlbnRzOjIzN31dLDc2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzX3BsYWluX29iamVjdC5qcyIpLGk9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBhKHQsZSxyLG8pe3ZhciBzLGwsYyx1LGYsaCxwPXRbMF0sZD10Lmxlbmd0aDtpZigyPT09ZCYmaShwKSYmaSh0WzFdKSYmMD09PXAubGVuZ3RoKXtpZihmdW5jdGlvbih0LGUpe3ZhciByLG47Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7aWYobnVsbCE9PShuPXRbcl0pJiYib2JqZWN0Ij09dHlwZW9mIG4pcmV0dXJuITE7dm9pZCAwIT09biYmKGVbcl09bil9cmV0dXJuITB9KHRbMV0scCkpcmV0dXJuIHA7cC5zcGxpY2UoMCxwLmxlbmd0aCl9Zm9yKHZhciBtPTE7bTxkO20rKylmb3IobCBpbiBzPXRbbV0pYz1wW2xdLHU9c1tsXSxvJiZpKHUpP3BbbF09dTplJiZ1JiYobih1KXx8KGY9aSh1KSkpPyhmPyhmPSExLGg9YyYmaShjKT9jOltdKTpoPWMmJm4oYyk/Yzp7fSxwW2xdPWEoW2gsdV0sZSxyLG8pKToodm9pZCAwIT09dXx8cikmJihwW2xdPXUpO3JldHVybiBwfXIuZXh0ZW5kRmxhdD1mdW5jdGlvbigpe3JldHVybiBhKGFyZ3VtZW50cywhMSwhMSwhMSl9LHIuZXh0ZW5kRGVlcD1mdW5jdGlvbigpe3JldHVybiBhKGFyZ3VtZW50cywhMCwhMSwhMSl9LHIuZXh0ZW5kRGVlcEFsbD1mdW5jdGlvbigpe3JldHVybiBhKGFyZ3VtZW50cywhMCwhMCwhMSl9LHIuZXh0ZW5kRGVlcE5vQXJyYXlzPWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCEwLCExLCEwKX19LHsiLi9pc19wbGFpbl9vYmplY3QuanMiOjc3N31dLDc2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9W10sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTsxIT09ZVthXSYmKGVbYV09MSxyW24rK109YSl9cmV0dXJuIHJ9fSx7fV0sNzY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuITA9PT10LnZpc2libGV9ZnVuY3Rpb24gaSh0KXt2YXIgZT10WzBdLnRyYWNlO3JldHVybiEwPT09ZS52aXNpYmxlJiYwIT09ZS5fbGVuZ3RofWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj0oZT10LEFycmF5LmlzQXJyYXkoZSkmJkFycmF5LmlzQXJyYXkoZVswXSkmJmVbMF1bMF0mJmVbMF1bMF0udHJhY2U/aTpuKSxhPVtdLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXTtyKHMpJiZhLnB1c2gocyl9cmV0dXJuIGF9fSx7fV0sNzY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImNvdW50cnktcmVnZXgiKSxhPXQoIkB0dXJmL2FyZWEiKSxvPXQoIkB0dXJmL2NlbnRyb2lkIikscz10KCJAdHVyZi9iYm94IiksbD10KCIuL2lkZW50aXR5IiksYz10KCIuL2xvZ2dlcnMiKSx1PXQoIi4vaXNfcGxhaW5fb2JqZWN0IiksZj10KCIuL25lc3RlZF9wcm9wZXJ0eSIpLGg9dCgiLi9wb2x5Z29uIikscD1PYmplY3Qua2V5cyhpKSxkPXsiSVNPLTMiOmwsIlVTQS1zdGF0ZXMiOmwsImNvdW50cnkgbmFtZXMiOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8cC5sZW5ndGg7ZSsrKXt2YXIgcj1wW2VdO2lmKG5ldyBSZWdFeHAoaVtyXSkudGVzdCh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gcn1yZXR1cm4gYy5sb2coIlVucmVjb2duaXplZCBjb3VudHJ5IG5hbWU6ICIrdCsiLiIpLCExfX07ZnVuY3Rpb24gbSh0KXt2YXIgZT10Lmdlb2pzb24scj13aW5kb3cuUGxvdGx5R2VvQXNzZXRzfHx7fSxuPSJzdHJpbmciPT10eXBlb2YgZT9yW2VdOmU7cmV0dXJuIHUobik/bjooYy5lcnJvcigiT29wcyAuLi4gc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hlbiBmZXRjaGluZyAiK2UpLCExKX1lLmV4cG9ydHM9e2xvY2F0aW9uVG9GZWF0dXJlOmZ1bmN0aW9uKHQsZSxyKXtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiExO3ZhciBuLGksYSxvPWRbdF0oZSk7aWYobyl7aWYoIlVTQS1zdGF0ZXMiPT09dClmb3Iobj1bXSxhPTA7YTxyLmxlbmd0aDthKyspKGk9clthXSkucHJvcGVydGllcyYmaS5wcm9wZXJ0aWVzLmd1JiYiVVNBIj09PWkucHJvcGVydGllcy5ndSYmbi5wdXNoKGkpO2Vsc2Ugbj1yO2ZvcihhPTA7YTxuLmxlbmd0aDthKyspaWYoKGk9blthXSkuaWQ9PT1vKXJldHVybiBpO2MubG9nKFsiTG9jYXRpb24gd2l0aCBpZCIsbywiZG9lcyBub3QgaGF2ZSBhIG1hdGNoaW5nIHRvcG9qc29uIGZlYXR1cmUgYXQgdGhpcyByZXNvbHV0aW9uLiJdLmpvaW4oIiAiKSl9cmV0dXJuITF9LGZlYXR1cmUycG9seWdvbnM6ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT10Lmdlb21ldHJ5LG89YS5jb29yZGluYXRlcyxzPXQuaWQsbD1bXTtmdW5jdGlvbiBjKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGgtMTtlKyspaWYodFtlXVswXT4wJiZ0W2UrMV1bMF08MClyZXR1cm4gZTtyZXR1cm4gbnVsbH1zd2l0Y2goZT0iUlVTIj09PXN8fCJGSkkiPT09cz9mdW5jdGlvbih0KXt2YXIgZTtpZihudWxsPT09Yyh0KSllPXQ7ZWxzZSBmb3IoZT1uZXcgQXJyYXkodC5sZW5ndGgpLGk9MDtpPHQubGVuZ3RoO2krKyllW2ldPVt0W2ldWzBdPDA/dFtpXVswXSszNjA6dFtpXVswXSx0W2ldWzFdXTtsLnB1c2goaC50ZXN0ZXIoZSkpfToiQVRBIj09PXM/ZnVuY3Rpb24odCl7dmFyIGU9Yyh0KTtpZihudWxsPT09ZSlyZXR1cm4gbC5wdXNoKGgudGVzdGVyKHQpKTt2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgrMSksbj0wO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspaT5lP3JbbisrXT1bdFtpXVswXSszNjAsdFtpXVsxXV06aT09PWU/KHJbbisrXT10W2ldLHJbbisrXT1bdFtpXVswXSwtOTBdKTpyW24rK109dFtpXTt2YXIgYT1oLnRlc3RlcihyKTthLnB0cy5wb3AoKSxsLnB1c2goYSl9OmZ1bmN0aW9uKHQpe2wucHVzaChoLnRlc3Rlcih0KSl9LGEudHlwZSl7Y2FzZSJNdWx0aVBvbHlnb24iOmZvcihyPTA7cjxvLmxlbmd0aDtyKyspZm9yKG49MDtuPG9bcl0ubGVuZ3RoO24rKyllKG9bcl1bbl0pO2JyZWFrO2Nhc2UiUG9seWdvbiI6Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyllKG9bcl0pfXJldHVybiBsfSxnZXRUcmFjZUdlb2pzb246bSxleHRyYWN0VHJhY2VGZWF0dXJlOmZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1tKGUpO2lmKCFyKXJldHVybiExO3ZhciBuLGk9e30scz1bXTtmb3Iobj0wO248ZS5fbGVuZ3RoO24rKyl7dmFyIGw9dFtuXTsobC5sb2N8fDA9PT1sLmxvYykmJihpW2wubG9jXT1sKX1mdW5jdGlvbiB1KHQpe3ZhciByPWYodCxlLmZlYXR1cmVpZGtleXx8ImlkIikuZ2V0KCksbj1pW3JdO2lmKG4pe3ZhciBsPXQuZ2VvbWV0cnk7aWYoIlBvbHlnb24iPT09bC50eXBlfHwiTXVsdGlQb2x5Z29uIj09PWwudHlwZSl7dmFyIHU9e3R5cGU6IkZlYXR1cmUiLGlkOnIsZ2VvbWV0cnk6bCxwcm9wZXJ0aWVzOnt9fTt1LnByb3BlcnRpZXMuY3Q9ZnVuY3Rpb24odCl7dmFyIGUscj10Lmdlb21ldHJ5O2lmKCJNdWx0aVBvbHlnb24iPT09ci50eXBlKWZvcih2YXIgbj1yLmNvb3JkaW5hdGVzLGk9MCxzPTA7czxuLmxlbmd0aDtzKyspe3ZhciBsPXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpuW3NdfSxjPWEuZGVmYXVsdChsKTtjPmkmJihpPWMsZT1sKX1lbHNlIGU9cjtyZXR1cm4gby5kZWZhdWx0KGUpLmdlb21ldHJ5LmNvb3JkaW5hdGVzfSh1KSxuLmZJbj10LG4uZk91dD11LHMucHVzaCh1KX1lbHNlIGMubG9nKFsiTG9jYXRpb24iLG4ubG9jLCJkb2VzIG5vdCBoYXZlIGEgdmFsaWQgR2VvSlNPTiBnZW9tZXRyeS4iLCJUcmFjZXMgd2l0aCBsb2NhdGlvbm1vZGUgKmdlb2pzb24taWQqIG9ubHkgc3VwcG9ydCIsIipQb2x5Z29uKiBhbmQgKk11bHRpUG9seWdvbiogZ2VvbWV0cmllcy4iXS5qb2luKCIgIikpfWRlbGV0ZSBpW3JdfXN3aXRjaChyLnR5cGUpe2Nhc2UiRmVhdHVyZUNvbGxlY3Rpb24iOnZhciBoPXIuZmVhdHVyZXM7Zm9yKG49MDtuPGgubGVuZ3RoO24rKyl1KGhbbl0pO2JyZWFrO2Nhc2UiRmVhdHVyZSI6dShyKTticmVhaztkZWZhdWx0OnJldHVybiBjLndhcm4oWyJJbnZhbGlkIEdlb0pTT04gdHlwZSIsKHIudHlwZXx8Im5vbmUiKSsiLiIsIlRyYWNlcyB3aXRoIGxvY2F0aW9ubW9kZSAqZ2VvanNvbi1pZCogb25seSBzdXBwb3J0IiwiKkZlYXR1cmVDb2xsZWN0aW9uKiBhbmQgKkZlYXR1cmUqIHR5cGVzLiJdLmpvaW4oIiAiKSksITF9Zm9yKHZhciBwIGluIGkpYy5sb2coWyJMb2NhdGlvbiAqIitwKyIqIiwiZG9lcyBub3QgaGF2ZSBhIG1hdGNoaW5nIGZlYXR1cmUgd2l0aCBpZC1rZXkiLCIqIitlLmZlYXR1cmVpZGtleSsiKi4iXS5qb2luKCIgIikpO3JldHVybiBzfSxmZXRjaFRyYWNlR2VvRGF0YTpmdW5jdGlvbih0KXt2YXIgZT13aW5kb3cuUGxvdGx5R2VvQXNzZXRzfHx7fSxyPVtdO2Z1bmN0aW9uIGkodCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLGkpe24uanNvbih0LChmdW5jdGlvbihuLGEpe2lmKG4pe2RlbGV0ZSBlW3RdO3ZhciBvPTQwND09PW4uc3RhdHVzPydHZW9KU09OIGF0IFVSTCAiJyt0KyciIGRvZXMgbm90IGV4aXN0Lic6IlVuZXhwZWN0ZWQgZXJyb3Igd2hpbGUgZmV0Y2hpbmcgZnJvbSAiK3Q7cmV0dXJuIGkobmV3IEVycm9yKG8pKX1yZXR1cm4gZVt0XT1hLHIoYSl9KSl9KSl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7dmFyIGk9MCxhPXNldEludGVydmFsKChmdW5jdGlvbigpe3JldHVybiBlW3RdJiYicGVuZGluZyIhPT1lW3RdPyhjbGVhckludGVydmFsKGEpLHIoZVt0XSkpOmk+MTAwPyhjbGVhckludGVydmFsKGEpLG4oIlVuZXhwZWN0ZWQgZXJyb3Igd2hpbGUgZmV0Y2hpbmcgZnJvbSAiK3QpKTp2b2lkIGkrK30pLDUwKX0pKX1mb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXVswXS50cmFjZS5nZW9qc29uOyJzdHJpbmciPT10eXBlb2YgcyYmKGVbc10/InBlbmRpbmciPT09ZVtzXSYmci5wdXNoKGEocykpOihlW3NdPSJwZW5kaW5nIixyLnB1c2goaShzKSkpKX1yZXR1cm4gcn0sY29tcHV0ZUJib3g6ZnVuY3Rpb24odCl7cmV0dXJuIHMuZGVmYXVsdCh0KX19fSx7Ii4vaWRlbnRpdHkiOjc3NCwiLi9pc19wbGFpbl9vYmplY3QiOjc3NywiLi9sb2dnZXJzIjo3ODAsIi4vbmVzdGVkX3Byb3BlcnR5Ijo3ODQsIi4vcG9seWdvbiI6Nzg4LCJAcGxvdGx5L2QzIjo1OCwiQHR1cmYvYXJlYSI6NjEsIkB0dXJmL2Jib3giOjYyLCJAdHVyZi9jZW50cm9pZCI6NjMsImNvdW50cnktcmVnZXgiOjE0MX1dLDc3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO3IuY2FsY1RyYWNlVG9MaW5lQ29vcmRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdLnRyYWNlLmNvbm5lY3RnYXBzLHI9W10saT1bXSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvPXRbYV0ubG9ubGF0O29bMF0hPT1uP2kucHVzaChvKTohZSYmaS5sZW5ndGg+MCYmKHIucHVzaChpKSxpPVtdKX1yZXR1cm4gaS5sZW5ndGg+MCYmci5wdXNoKGkpLHJ9LHIubWFrZUxpbmU9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lmxlbmd0aD97dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dFswXX06e3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19LHIubWFrZVBvbHlnb249ZnVuY3Rpb24odCl7aWYoMT09PXQubGVuZ3RoKXJldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczp0fTtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDtyKyspZVtyXT1bdFtyXV07cmV0dXJue3R5cGU6Ik11bHRpUG9seWdvbiIsY29vcmRpbmF0ZXM6ZX19LHIubWFrZUJsYW5rPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpbXX19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1Mn1dLDc3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpLGEsbz10KCIuL21vZCIpLm1vZDtmdW5jdGlvbiBzKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9ci10LGM9aS10LHU9by1pLGY9bi1lLGg9YS1lLHA9cy1hLGQ9bCpwLXUqZjtpZigwPT09ZClyZXR1cm4gbnVsbDt2YXIgbT0oYypwLXUqaCkvZCxnPShjKmYtbCpoKS9kO3JldHVybiBnPDB8fGc+MXx8bTwwfHxtPjE/bnVsbDp7eDp0K2wqbSx5OmUrZiptfX1mdW5jdGlvbiBsKHQsZSxyLG4saSl7dmFyIGE9bip0K2kqZTtpZihhPDApcmV0dXJuIG4qbitpKmk7aWYoYT5yKXt2YXIgbz1uLXQscz1pLWU7cmV0dXJuIG8qbytzKnN9dmFyIGw9biplLWkqdDtyZXR1cm4gbCpsL3J9ci5zZWdtZW50c0ludGVyc2VjdD1zLHIuc2VnbWVudERpc3RhbmNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8sYyl7aWYocyh0LGUscixuLGksYSxvLGMpKXJldHVybiAwO3ZhciB1PXItdCxmPW4tZSxoPW8taSxwPWMtYSxkPXUqdStmKmYsbT1oKmgrcCpwLGc9TWF0aC5taW4obCh1LGYsZCxpLXQsYS1lKSxsKHUsZixkLG8tdCxjLWUpLGwoaCxwLG0sdC1pLGUtYSksbChoLHAsbSxyLWksbi1hKSk7cmV0dXJuIE1hdGguc3FydChnKX0sci5nZXRUZXh0TG9jYXRpb249ZnVuY3Rpb24odCxlLHIscyl7aWYodD09PWkmJnM9PT1hfHwobj17fSxpPXQsYT1zKSxuW3JdKXJldHVybiBuW3JdO3ZhciBsPXQuZ2V0UG9pbnRBdExlbmd0aChvKHItcy8yLGUpKSxjPXQuZ2V0UG9pbnRBdExlbmd0aChvKHIrcy8yLGUpKSx1PU1hdGguYXRhbigoYy55LWwueSkvKGMueC1sLngpKSxmPXQuZ2V0UG9pbnRBdExlbmd0aChvKHIsZSkpLGg9e3g6KDQqZi54K2wueCtjLngpLzYseTooNCpmLnkrbC55K2MueSkvNix0aGV0YTp1fTtyZXR1cm4gbltyXT1oLGh9LHIuY2xlYXJMb2NhdGlvbkNhY2hlPWZ1bmN0aW9uKCl7aT1udWxsfSxyLmdldFZpc2libGVTZWdtZW50PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ZS5sZWZ0LG89ZS5yaWdodCxzPWUudG9wLGw9ZS5ib3R0b20sYz0wLHU9dC5nZXRUb3RhbExlbmd0aCgpLGY9dTtmdW5jdGlvbiBoKGUpe3ZhciByPXQuZ2V0UG9pbnRBdExlbmd0aChlKTswPT09ZT9uPXI6ZT09PXUmJihpPXIpO3ZhciBjPXIueDxhP2Etci54OnIueD5vP3IueC1vOjAsZj1yLnk8cz9zLXIueTpyLnk+bD9yLnktbDowO3JldHVybiBNYXRoLnNxcnQoYypjK2YqZil9Zm9yKHZhciBwPWgoYyk7cDspe2lmKChjKz1wK3IpPmYpcmV0dXJuO3A9aChjKX1mb3IocD1oKGYpO3A7KXtpZihjPihmLT1wK3IpKXJldHVybjtwPWgoZil9cmV0dXJue21pbjpjLG1heDpmLGxlbjpmLWMsdG90YWw6dSxpc0Nsb3NlZDowPT09YyYmZj09PXUmJk1hdGguYWJzKG4ueC1pLngpPC4xJiZNYXRoLmFicyhuLnktaS55KTwuMX19LHIuZmluZFBvaW50T25QYXRoPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaSxhLG8scz0obj1ufHx7fSkucGF0aExlbmd0aHx8dC5nZXRUb3RhbExlbmd0aCgpLGw9bi50b2xlcmFuY2V8fC4wMDEsYz1uLml0ZXJhdGlvbkxpbWl0fHwzMCx1PXQuZ2V0UG9pbnRBdExlbmd0aCgwKVtyXT50LmdldFBvaW50QXRMZW5ndGgocylbcl0/LTE6MSxmPTAsaD0wLHA9cztmPGM7KXtpZihpPShoK3ApLzIsbz0oYT10LmdldFBvaW50QXRMZW5ndGgoaSkpW3JdLWUsTWF0aC5hYnMobyk8bClyZXR1cm4gYTt1Km8+MD9wPWk6aD1pLGYrK31yZXR1cm4gYX19LHsiLi9tb2QiOjc4M31dLDc3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiY29sb3Itbm9ybWFsaXplIiksbz10KCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxzPXQoIi4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLmRlZmF1bHRMaW5lLGw9dCgiLi9hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXksYz1hKHMpO2Z1bmN0aW9uIHUodCxlKXt2YXIgcj10O3JldHVybiByWzNdKj1lLHJ9ZnVuY3Rpb24gZih0KXtpZihuKHQpKXJldHVybiBjO3ZhciBlPWEodCk7cmV0dXJuIGUubGVuZ3RoP2U6Y31mdW5jdGlvbiBoKHQpe3JldHVybiBuKHQpP3Q6MX1lLmV4cG9ydHM9e2Zvcm1hdENvbG9yOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLHMscCxkLG09dC5jb2xvcixnPWwobSksdj1sKGUpLHk9by5leHRyYWN0T3B0cyh0KSx4PVtdO2lmKG49dm9pZCAwIT09eS5jb2xvcnNjYWxlP28ubWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlKHQpOmYsaT1nP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PXRbZV0/YzphKG4odFtlXSkpfTpmLHM9dj9mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT10W2VdPzE6aCh0W2VdKX06aCxnfHx2KWZvcih2YXIgYj0wO2I8cjtiKyspcD1pKG0sYiksZD1zKGUsYikseFtiXT11KHAsZCk7ZWxzZSB4PXUoYShtKSxlKTtyZXR1cm4geH0scGFyc2VDb2xvclNjYWxlOmZ1bmN0aW9uKHQpe3ZhciBlPW8uZXh0cmFjdE9wdHModCkscj1lLmNvbG9yc2NhbGU7cmV0dXJuIGUucmV2ZXJzZXNjYWxlJiYocj1vLmZsaXBTY2FsZShlLmNvbG9yc2NhbGUpKSxyLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPWkodFsxXSkudG9SZ2IoKTtyZXR1cm57aW5kZXg6ZSxyZ2I6W3IucixyLmcsci5iLHIuYV19fSkpfX19LHsiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MzgsIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjUxLCIuL2FycmF5Ijo3NTgsImNvbG9yLW5vcm1hbGl6ZSI6MTI2LCJmYXN0LWlzbnVtZXJpYyI6MjQyLHRpbnljb2xvcjI6NTcyfV0sNzczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaWRlbnRpdHkiKTtmdW5jdGlvbiBpKHQpe3JldHVyblt0XX1lLmV4cG9ydHM9e2tleUZ1bjpmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9LHJlcGVhdDppLGRlc2NlbmQ6bix3cmFwOmksdW53cmFwOmZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfX19LHsiLi9pZGVudGl0eSI6Nzc0fV0sNzc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdH19LHt9XSw3NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuIHQ7dmFyIHI9MS9NYXRoLmFicyhlKSxuPXI+MT8ocip0K3IqZSkvcjp0K2UsaT1TdHJpbmcobikubGVuZ3RoO2lmKGk+MTYpe3ZhciBhPVN0cmluZyhlKS5sZW5ndGg7aWYoaT49U3RyaW5nKHQpLmxlbmd0aCthKXt2YXIgbz1wYXJzZUZsb2F0KG4pLnRvUHJlY2lzaW9uKDEyKTstMT09PW8uaW5kZXhPZigiZSsiKSYmKG49K28pfX1yZXR1cm4gbn19LHt9XSw3NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZDMtdGltZS1mb3JtYXQiKS51dGNGb3JtYXQsYT10KCJkMy1mb3JtYXQiKS5mb3JtYXQsbz10KCJmYXN0LWlzbnVtZXJpYyIpLHM9dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLGw9cy5GUF9TQUZFLGM9LWwsdT1zLkJBRE5VTSxmPWUuZXhwb3J0cz17fTtmLmFkanVzdEZvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4hdHx8L15cZFsuXVxkZi8udGVzdCh0KXx8L1suXVxkJS8udGVzdCh0KT90OiIwLmYiPT09dD8ifmYiOi9eXGQlLy50ZXN0KHQpPyJ+JSI6L15cZHMvLnRlc3QodCk/In5zIjohL15bfiwuMCRdLy50ZXN0KHQpJiYvWyZmcHNdLy50ZXN0KHQpPyJ+Iit0OnR9O3ZhciBoPXt9O2Yud2FybkJhZEZvcm1hdD1mdW5jdGlvbih0KXt2YXIgZT1TdHJpbmcodCk7aFtlXXx8KGhbZV09MSxmLndhcm4oJ2VuY291bnRlcmVkIGJhZCBmb3JtYXQ6ICInK2UrJyInKSl9LGYubm9Gb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KX0sZi5udW1iZXJGb3JtYXQ9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9YShmLmFkanVzdEZvcm1hdCh0KSl9Y2F0Y2goZSl7cmV0dXJuIGYud2FybkJhZEZvcm1hdCh0KSxmLm5vRm9ybWF0fXJldHVybiBlfSxmLm5lc3RlZFByb3BlcnR5PXQoIi4vbmVzdGVkX3Byb3BlcnR5IiksZi5rZXllZENvbnRhaW5lcj10KCIuL2tleWVkX2NvbnRhaW5lciIpLGYucmVsYXRpdmVBdHRyPXQoIi4vcmVsYXRpdmVfYXR0ciIpLGYuaXNQbGFpbk9iamVjdD10KCIuL2lzX3BsYWluX29iamVjdCIpLGYudG9Mb2dSYW5nZT10KCIuL3RvX2xvZ19yYW5nZSIpLGYucmVsaW5rUHJpdmF0ZUtleXM9dCgiLi9yZWxpbmtfcHJpdmF0ZSIpO3ZhciBwPXQoIi4vYXJyYXkiKTtmLmlzVHlwZWRBcnJheT1wLmlzVHlwZWRBcnJheSxmLmlzQXJyYXlPclR5cGVkQXJyYXk9cC5pc0FycmF5T3JUeXBlZEFycmF5LGYuaXNBcnJheTFEPXAuaXNBcnJheTFELGYuZW5zdXJlQXJyYXk9cC5lbnN1cmVBcnJheSxmLmNvbmNhdD1wLmNvbmNhdCxmLm1heFJvd0xlbmd0aD1wLm1heFJvd0xlbmd0aCxmLm1pblJvd0xlbmd0aD1wLm1pblJvd0xlbmd0aDt2YXIgZD10KCIuL21vZCIpO2YubW9kPWQubW9kLGYubW9kSGFsZj1kLm1vZEhhbGY7dmFyIG09dCgiLi9jb2VyY2UiKTtmLnZhbE9iamVjdE1ldGE9bS52YWxPYmplY3RNZXRhLGYuY29lcmNlPW0uY29lcmNlLGYuY29lcmNlMj1tLmNvZXJjZTIsZi5jb2VyY2VGb250PW0uY29lcmNlRm9udCxmLmNvZXJjZVBhdHRlcm49bS5jb2VyY2VQYXR0ZXJuLGYuY29lcmNlSG92ZXJpbmZvPW0uY29lcmNlSG92ZXJpbmZvLGYuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eT1tLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHksZi52YWxpZGF0ZT1tLnZhbGlkYXRlO3ZhciBnPXQoIi4vZGF0ZXMiKTtmLmRhdGVUaW1lMm1zPWcuZGF0ZVRpbWUybXMsZi5pc0RhdGVUaW1lPWcuaXNEYXRlVGltZSxmLm1zMkRhdGVUaW1lPWcubXMyRGF0ZVRpbWUsZi5tczJEYXRlVGltZUxvY2FsPWcubXMyRGF0ZVRpbWVMb2NhbCxmLmNsZWFuRGF0ZT1nLmNsZWFuRGF0ZSxmLmlzSlNEYXRlPWcuaXNKU0RhdGUsZi5mb3JtYXREYXRlPWcuZm9ybWF0RGF0ZSxmLmluY3JlbWVudE1vbnRoPWcuaW5jcmVtZW50TW9udGgsZi5kYXRlVGljazA9Zy5kYXRlVGljazAsZi5kZmx0UmFuZ2U9Zy5kZmx0UmFuZ2UsZi5maW5kRXhhY3REYXRlcz1nLmZpbmRFeGFjdERhdGVzLGYuTUlOX01TPWcuTUlOX01TLGYuTUFYX01TPWcuTUFYX01TO3ZhciB2PXQoIi4vc2VhcmNoIik7Zi5maW5kQmluPXYuZmluZEJpbixmLnNvcnRlckFzYz12LnNvcnRlckFzYyxmLnNvcnRlckRlcz12LnNvcnRlckRlcyxmLmRpc3RpbmN0VmFscz12LmRpc3RpbmN0VmFscyxmLnJvdW5kVXA9di5yb3VuZFVwLGYuc29ydD12LnNvcnQsZi5maW5kSW5kZXhPZk1pbj12LmZpbmRJbmRleE9mTWluLGYuc29ydE9iamVjdEtleXM9dCgiLi9zb3J0X29iamVjdF9rZXlzIik7dmFyIHk9dCgiLi9zdGF0cyIpO2YuYWdnTnVtcz15LmFnZ051bXMsZi5sZW49eS5sZW4sZi5tZWFuPXkubWVhbixmLm1lZGlhbj15Lm1lZGlhbixmLm1pZFJhbmdlPXkubWlkUmFuZ2UsZi52YXJpYW5jZT15LnZhcmlhbmNlLGYuc3RkZXY9eS5zdGRldixmLmludGVycD15LmludGVycDt2YXIgeD10KCIuL21hdHJpeCIpO2YuaW5pdDJkQXJyYXk9eC5pbml0MmRBcnJheSxmLnRyYW5zcG9zZVJhZ2dlZD14LnRyYW5zcG9zZVJhZ2dlZCxmLmRvdD14LmRvdCxmLnRyYW5zbGF0aW9uTWF0cml4PXgudHJhbnNsYXRpb25NYXRyaXgsZi5yb3RhdGlvbk1hdHJpeD14LnJvdGF0aW9uTWF0cml4LGYucm90YXRpb25YWU1hdHJpeD14LnJvdGF0aW9uWFlNYXRyaXgsZi5hcHBseTNEVHJhbnNmb3JtPXguYXBwbHkzRFRyYW5zZm9ybSxmLmFwcGx5MkRUcmFuc2Zvcm09eC5hcHBseTJEVHJhbnNmb3JtLGYuYXBwbHkyRFRyYW5zZm9ybTI9eC5hcHBseTJEVHJhbnNmb3JtMixmLmNvbnZlcnRDc3NNYXRyaXg9eC5jb252ZXJ0Q3NzTWF0cml4LGYuaW52ZXJzZVRyYW5zZm9ybU1hdHJpeD14LmludmVyc2VUcmFuc2Zvcm1NYXRyaXg7dmFyIGI9dCgiLi9hbmdsZXMiKTtmLmRlZzJyYWQ9Yi5kZWcycmFkLGYucmFkMmRlZz1iLnJhZDJkZWcsZi5hbmdsZURlbHRhPWIuYW5nbGVEZWx0YSxmLmFuZ2xlRGlzdD1iLmFuZ2xlRGlzdCxmLmlzRnVsbENpcmNsZT1iLmlzRnVsbENpcmNsZSxmLmlzQW5nbGVJbnNpZGVTZWN0b3I9Yi5pc0FuZ2xlSW5zaWRlU2VjdG9yLGYuaXNQdEluc2lkZVNlY3Rvcj1iLmlzUHRJbnNpZGVTZWN0b3IsZi5wYXRoQXJjPWIucGF0aEFyYyxmLnBhdGhTZWN0b3I9Yi5wYXRoU2VjdG9yLGYucGF0aEFubnVsdXM9Yi5wYXRoQW5udWx1czt2YXIgXz10KCIuL2FuY2hvcl91dGlscyIpO2YuaXNMZWZ0QW5jaG9yPV8uaXNMZWZ0QW5jaG9yLGYuaXNDZW50ZXJBbmNob3I9Xy5pc0NlbnRlckFuY2hvcixmLmlzUmlnaHRBbmNob3I9Xy5pc1JpZ2h0QW5jaG9yLGYuaXNUb3BBbmNob3I9Xy5pc1RvcEFuY2hvcixmLmlzTWlkZGxlQW5jaG9yPV8uaXNNaWRkbGVBbmNob3IsZi5pc0JvdHRvbUFuY2hvcj1fLmlzQm90dG9tQW5jaG9yO3ZhciB3PXQoIi4vZ2VvbWV0cnkyZCIpO2Yuc2VnbWVudHNJbnRlcnNlY3Q9dy5zZWdtZW50c0ludGVyc2VjdCxmLnNlZ21lbnREaXN0YW5jZT13LnNlZ21lbnREaXN0YW5jZSxmLmdldFRleHRMb2NhdGlvbj13LmdldFRleHRMb2NhdGlvbixmLmNsZWFyTG9jYXRpb25DYWNoZT13LmNsZWFyTG9jYXRpb25DYWNoZSxmLmdldFZpc2libGVTZWdtZW50PXcuZ2V0VmlzaWJsZVNlZ21lbnQsZi5maW5kUG9pbnRPblBhdGg9dy5maW5kUG9pbnRPblBhdGg7dmFyIFQ9dCgiLi9leHRlbmQiKTtmLmV4dGVuZEZsYXQ9VC5leHRlbmRGbGF0LGYuZXh0ZW5kRGVlcD1ULmV4dGVuZERlZXAsZi5leHRlbmREZWVwQWxsPVQuZXh0ZW5kRGVlcEFsbCxmLmV4dGVuZERlZXBOb0FycmF5cz1ULmV4dGVuZERlZXBOb0FycmF5czt2YXIgaz10KCIuL2xvZ2dlcnMiKTtmLmxvZz1rLmxvZyxmLndhcm49ay53YXJuLGYuZXJyb3I9ay5lcnJvcjt2YXIgQT10KCIuL3JlZ2V4Iik7Zi5jb3VudGVyUmVnZXg9QS5jb3VudGVyO3ZhciBNPXQoIi4vdGhyb3R0bGUiKTtmLnRocm90dGxlPU0udGhyb3R0bGUsZi50aHJvdHRsZURvbmU9TS5kb25lLGYuY2xlYXJUaHJvdHRsZT1NLmNsZWFyO3ZhciBTPXQoIi4vZG9tIik7ZnVuY3Rpb24gRSh0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdClmb3IodmFyIG49dFtyXSxpPTA7aTxuLmxlbmd0aDtpKyspZVtuW2ldXT0rcjtyZXR1cm4gZX1mLmdldEdyYXBoRGl2PVMuZ2V0R3JhcGhEaXYsZi5pc1Bsb3REaXY9Uy5pc1Bsb3REaXYsZi5yZW1vdmVFbGVtZW50PVMucmVtb3ZlRWxlbWVudCxmLmFkZFN0eWxlUnVsZT1TLmFkZFN0eWxlUnVsZSxmLmFkZFJlbGF0ZWRTdHlsZVJ1bGU9Uy5hZGRSZWxhdGVkU3R5bGVSdWxlLGYuZGVsZXRlUmVsYXRlZFN0eWxlUnVsZT1TLmRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGUsZi5nZXRGdWxsVHJhbnNmb3JtTWF0cml4PVMuZ2V0RnVsbFRyYW5zZm9ybU1hdHJpeCxmLmdldEVsZW1lbnRUcmFuc2Zvcm1NYXRyaXg9Uy5nZXRFbGVtZW50VHJhbnNmb3JtTWF0cml4LGYuZ2V0RWxlbWVudEFuZEFuY2VzdG9ycz1TLmdldEVsZW1lbnRBbmRBbmNlc3RvcnMsZi5lcXVhbERvbVJlY3RzPVMuZXF1YWxEb21SZWN0cyxmLmNsZWFyUmVzcG9uc2l2ZT10KCIuL2NsZWFyX3Jlc3BvbnNpdmUiKSxmLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj10KCIuL3ByZXNlcnZlX2RyYXdpbmdfYnVmZmVyIiksZi5tYWtlVHJhY2VHcm91cHM9dCgiLi9tYWtlX3RyYWNlX2dyb3VwcyIpLGYuXz10KCIuL2xvY2FsaXplIiksZi5ub3RpZmllcj10KCIuL25vdGlmaWVyIiksZi5maWx0ZXJVbmlxdWU9dCgiLi9maWx0ZXJfdW5pcXVlIiksZi5maWx0ZXJWaXNpYmxlPXQoIi4vZmlsdGVyX3Zpc2libGUiKSxmLnB1c2hVbmlxdWU9dCgiLi9wdXNoX3VuaXF1ZSIpLGYuaW5jcmVtZW50PXQoIi4vaW5jcmVtZW50IiksZi5jbGVhbk51bWJlcj10KCIuL2NsZWFuX251bWJlciIpLGYuZW5zdXJlTnVtYmVyPWZ1bmN0aW9uKHQpe3JldHVybiBvKHQpPyh0PU51bWJlcih0KSk+bHx8dDxjP3U6dDp1fSxmLmlzSW5kZXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4hKHZvaWQgMCE9PWUmJnQ+PWUpJiYobyh0KSYmdD49MCYmdCUxPT0wKX0sZi5ub29wPXQoIi4vbm9vcCIpLGYuaWRlbnRpdHk9dCgiLi9pZGVudGl0eSIpLGYucmVwZWF0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKylyW25dPXQ7cmV0dXJuIHJ9LGYuc3dhcEF0dHJzPWZ1bmN0aW9uKHQsZSxyLG4pe3J8fChyPSJ4Iiksbnx8KG49InkiKTtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXSxvPWYubmVzdGVkUHJvcGVydHkodCxhLnJlcGxhY2UoIj8iLHIpKSxzPWYubmVzdGVkUHJvcGVydHkodCxhLnJlcGxhY2UoIj8iLG4pKSxsPW8uZ2V0KCk7by5zZXQocy5nZXQoKSkscy5zZXQobCl9fSxmLnJhaXNlVG9Ub3A9ZnVuY3Rpb24odCl7dC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHQpfSxmLmNhbmNlbFRyYW5zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApfSxmLmNvbnN0cmFpbj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGU+cj9NYXRoLm1heChyLE1hdGgubWluKGUsdCkpOk1hdGgubWF4KGUsTWF0aC5taW4ocix0KSl9LGYuYkJveEludGVyc2VjdD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHI9cnx8MCx0LmxlZnQ8PWUucmlnaHQrciYmZS5sZWZ0PD10LnJpZ2h0K3ImJnQudG9wPD1lLmJvdHRvbStyJiZlLnRvcDw9dC5ib3R0b20rcn0sZi5zaW1wbGVNYXA9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9dC5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz0wO3M8YTtzKyspb1tzXT1lKHRbc10scixuLGkpO3JldHVybiBvfSxmLnJhbmRzdHI9ZnVuY3Rpb24gdChlLHIsbixpKXtpZihufHwobj0xNiksdm9pZCAwPT09ciYmKHI9MjQpLHI8PTApcmV0dXJuIjAiO3ZhciBhLG8scz1NYXRoLmxvZyhNYXRoLnBvdygyLHIpKS9NYXRoLmxvZyhuKSxsPSIiO2ZvcihhPTI7cz09PTEvMDthKj0yKXM9TWF0aC5sb2coTWF0aC5wb3coMixyL2EpKS9NYXRoLmxvZyhuKSphO3ZhciBjPXMtTWF0aC5mbG9vcihzKTtmb3IoYT0wO2E8TWF0aC5mbG9vcihzKTthKyspbD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbikudG9TdHJpbmcobikrbDtjJiYobz1NYXRoLnBvdyhuLGMpLGw9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm8pLnRvU3RyaW5nKG4pK2wpO3ZhciB1PXBhcnNlSW50KGwsbik7cmV0dXJuIGUmJmVbbF18fHUhPT0xLzAmJnU+PU1hdGgucG93KDIscik/aT4xMD8oZi53YXJuKCJyYW5kc3RyIGZhaWxlZCB1bmlxdWVuZXNzIiksbCk6dChlLHIsbiwoaXx8MCkrMSk6bH0sZi5PcHRpb25Db250cm9sPWZ1bmN0aW9uKHQsZSl7dHx8KHQ9e30pLGV8fChlPSJvcHQiKTt2YXIgcj17b3B0aW9uTGlzdDpbXSxfbmV3b3B0aW9uOmZ1bmN0aW9uKG4pe25bZV09dCxyW24ubmFtZV09bixyLm9wdGlvbkxpc3QucHVzaChuKX19O3JldHVybiByWyJfIitlXT10LHJ9LGYuc21vb3RoPWZ1bmN0aW9uKHQsZSl7aWYoKGU9TWF0aC5yb3VuZChlKXx8MCk8MilyZXR1cm4gdDt2YXIgcixuLGksYSxvPXQubGVuZ3RoLHM9MipvLGw9MiplLTEsYz1uZXcgQXJyYXkobCksdT1uZXcgQXJyYXkobyk7Zm9yKHI9MDtyPGw7cisrKWNbcl09KDEtTWF0aC5jb3MoTWF0aC5QSSoocisxKS9lKSkvKDIqZSk7Zm9yKHI9MDtyPG87cisrKXtmb3IoYT0wLG49MDtuPGw7bisrKShpPXIrbisxLWUpPC1vP2ktPXMqTWF0aC5yb3VuZChpL3MpOmk+PXMmJihpLT1zKk1hdGguZmxvb3IoaS9zKSksaTwwP2k9LTEtaTppPj1vJiYoaT1zLTEtaSksYSs9dFtpXSpjW25dO3Vbcl09YX1yZXR1cm4gdX0sZi5zeW5jT3JBc3luYz1mdW5jdGlvbih0LGUscil7dmFyIG47ZnVuY3Rpb24gaSgpe3JldHVybiBmLnN5bmNPckFzeW5jKHQsZSxyKX1mb3IoO3QubGVuZ3RoOylpZigobj0oMCx0LnNwbGljZSgwLDEpWzBdKShlKSkmJm4udGhlbilyZXR1cm4gbi50aGVuKGkpO3JldHVybiByJiZyKGUpfSxmLnN0cmlwVHJhaWxpbmdTbGFzaD1mdW5jdGlvbih0KXtyZXR1cm4iLyI9PT10LnN1YnN0cigtMSk/dC5zdWJzdHIoMCx0Lmxlbmd0aC0xKTp0fSxmLm5vbmVPckFsbD1mdW5jdGlvbih0LGUscil7aWYodCl7dmFyIG4saT0hMSxhPSEwO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspbnVsbCE9dFtyW25dXT9pPSEwOmE9ITE7aWYoaSYmIWEpZm9yKG49MDtuPHIubGVuZ3RoO24rKyl0W3Jbbl1dPWVbcltuXV19fSxmLm1lcmdlQXJyYXk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ImZ1bmN0aW9uIj09dHlwZW9mIG47aWYoZi5pc0FycmF5T3JUeXBlZEFycmF5KHQpKWZvcih2YXIgYT1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCksbz0wO288YTtvKyspe3ZhciBzPXRbb107ZVtvXVtyXT1pP24ocyk6c319LGYubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIGYubWVyZ2VBcnJheSh0LGUsciwoZnVuY3Rpb24odCl7dmFyIGU9K3Q7cmV0dXJuIGlzRmluaXRlKGUpJiZlPjA/ZTowfSkpfSxmLmZpbGxBcnJheT1mdW5jdGlvbih0LGUscixuKXtpZihuPW58fGYuaWRlbnRpdHksZi5pc0FycmF5T3JUeXBlZEFycmF5KHQpKWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWVbaV1bcl09bih0W2ldKX0sZi5jYXN0T3B0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe249bnx8Zi5pZGVudGl0eTt2YXIgaT1mLm5lc3RlZFByb3BlcnR5KHQscikuZ2V0KCk7cmV0dXJuIGYuaXNBcnJheU9yVHlwZWRBcnJheShpKT9BcnJheS5pc0FycmF5KGUpJiZmLmlzQXJyYXlPclR5cGVkQXJyYXkoaVtlWzBdXSk/bihpW2VbMF1dW2VbMV1dKTpuKGlbZV0pOml9LGYuZXh0cmFjdE9wdGlvbj1mdW5jdGlvbih0LGUscixuKXtpZihyIGluIHQpcmV0dXJuIHRbcl07dmFyIGk9Zi5uZXN0ZWRQcm9wZXJ0eShlLG4pLmdldCgpO3JldHVybiBBcnJheS5pc0FycmF5KGkpP3ZvaWQgMDppfSxmLnRhZ1NlbGVjdGVkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ZS5zZWxlY3RlZHBvaW50cyxvPWUuX2luZGV4VG9Qb2ludHM7byYmKG49RShvKSk7Zm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc107aWYoZi5pc0luZGV4KGwpfHxmLmlzQXJyYXlPclR5cGVkQXJyYXkobCkmJmYuaXNJbmRleChsWzBdKSYmZi5pc0luZGV4KGxbMV0pKXt2YXIgYz1uP25bbF06bCx1PXI/cltjXTpjO3ZvaWQgMCE9PShpPXUpJiZpPHQubGVuZ3RoJiYodFt1XS5zZWxlY3RlZD0xKX19fSxmLnNlbEluZGljZXMyc2VsUG9pbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0ZWRwb2ludHMscj10Ll9pbmRleFRvUG9pbnRzO2lmKHIpe2Zvcih2YXIgbj1FKHIpLGk9W10sYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1lW2FdO2lmKGYuaXNJbmRleChvKSl7dmFyIHM9bltvXTtmLmlzSW5kZXgocykmJmkucHVzaChzKX19cmV0dXJuIGl9cmV0dXJuIGV9LGYuZ2V0VGFyZ2V0QXJyYXk9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRhcmdldDtpZigic3RyaW5nIj09dHlwZW9mIHImJnIpe3ZhciBuPWYubmVzdGVkUHJvcGVydHkodCxyKS5nZXQoKTtyZXR1cm4hIUFycmF5LmlzQXJyYXkobikmJm59cmV0dXJuISFBcnJheS5pc0FycmF5KHIpJiZyfSxmLm1pbkV4dGVuZD1mdW5jdGlvbih0LGUpe3ZhciByPXt9OyJvYmplY3QiIT10eXBlb2YgZSYmKGU9e30pO3ZhciBuLGksYSxvPU9iamVjdC5rZXlzKHQpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspYT10W2k9b1tuXV0sIl8iIT09aS5jaGFyQXQoMCkmJiJmdW5jdGlvbiIhPXR5cGVvZiBhJiYoIm1vZHVsZSI9PT1pP3JbaV09YTpBcnJheS5pc0FycmF5KGEpP3JbaV09ImNvbG9yc2NhbGUiPT09aT9hLnNsaWNlKCk6YS5zbGljZSgwLDMpOmYuaXNUeXBlZEFycmF5KGEpP3JbaV09YS5zdWJhcnJheSgwLDMpOnJbaV09YSYmIm9iamVjdCI9PXR5cGVvZiBhP2YubWluRXh0ZW5kKHRbaV0sZVtpXSk6YSk7Zm9yKG89T2JqZWN0LmtleXMoZSksbj0wO248by5sZW5ndGg7bisrKSJvYmplY3QiPT10eXBlb2YoYT1lW2k9b1tuXV0pJiZpIGluIHImJiJvYmplY3QiPT10eXBlb2YgcltpXXx8KHJbaV09YSk7cmV0dXJuIHJ9LGYudGl0bGVDYXNlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpfSxmLmNvbnRhaW5zQW55PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoLTEhPT10LmluZGV4T2YoZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9LGYuaXNJRT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT13aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2J9O3ZhciBMPS9WZXJzaW9uXC9bXGRcLl0rLipTYWZhcmkvO2YuaXNTYWZhcmk9ZnVuY3Rpb24oKXtyZXR1cm4gTC50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KX07dmFyIEM9L2lQYWR8aVBob25lfGlQb2QvO2YuaXNJT1M9ZnVuY3Rpb24oKXtyZXR1cm4gQy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KX07dmFyIFA9L0ZpcmVmb3hcLyhcZCspXC5cZCsvO2YuZ2V0RmlyZWZveFZlcnNpb249ZnVuY3Rpb24oKXt2YXIgdD1QLmV4ZWMod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpO2lmKHQmJjI9PT10Lmxlbmd0aCl7dmFyIGU9cGFyc2VJbnQodFsxXSk7aWYoIWlzTmFOKGUpKXJldHVybiBlfXJldHVybiBudWxsfSxmLmlzRDNTZWxlY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBuLnNlbGVjdGlvbn0sZi5lbnN1cmVTaW5nbGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5zZWxlY3QoZSsocj8iLiIrcjoiIikpO2lmKGkuc2l6ZSgpKXJldHVybiBpO3ZhciBhPXQuYXBwZW5kKGUpO3JldHVybiByJiZhLmNsYXNzZWQociwhMCksbiYmYS5jYWxsKG4pLGF9LGYuZW5zdXJlU2luZ2xlQnlJZD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10LnNlbGVjdChlKyIjIityKTtpZihpLnNpemUoKSlyZXR1cm4gaTt2YXIgYT10LmFwcGVuZChlKS5hdHRyKCJpZCIscik7cmV0dXJuIG4mJmEuY2FsbChuKSxhfSxmLm9iamVjdEZyb21QYXRoPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5zcGxpdCgiLiIpLGk9cj17fSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPW5bYV0scz1udWxsLGw9blthXS5tYXRjaCgvKC4qKVxbKFswLTldKylcXS8pO2w/KG89bFsxXSxzPWxbMl0scj1yW29dPVtdLGE9PT1uLmxlbmd0aC0xP3Jbc109ZTpyW3NdPXt9LHI9cltzXSk6KGE9PT1uLmxlbmd0aC0xP3Jbb109ZTpyW29dPXt9LHI9cltvXSl9cmV0dXJuIGl9O3ZhciBJPS9eKFteXFtcLl0rKVwuKC4rKT8vLE89L14oW15cLl0rKVxbKFswLTldKylcXShcLik/KC4rKT8vO2YuZXhwYW5kT2JqZWN0UGF0aHM9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHM7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYhQXJyYXkuaXNBcnJheSh0KSlmb3IociBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJigoZT1yLm1hdGNoKEkpKT8oaT10W3JdLG49ZVsxXSxkZWxldGUgdFtyXSx0W25dPWYuZXh0ZW5kRGVlcE5vQXJyYXlzKHRbbl18fHt9LGYub2JqZWN0RnJvbVBhdGgocixmLmV4cGFuZE9iamVjdFBhdGhzKGkpKVtuXSkpOihlPXIubWF0Y2goTykpPyhpPXRbcl0sbj1lWzFdLGE9cGFyc2VJbnQoZVsyXSksZGVsZXRlIHRbcl0sdFtuXT10W25dfHxbXSwiLiI9PT1lWzNdPyhzPWVbNF0sbz10W25dW2FdPXRbbl1bYV18fHt9LGYuZXh0ZW5kRGVlcE5vQXJyYXlzKG8sZi5vYmplY3RGcm9tUGF0aChzLGYuZXhwYW5kT2JqZWN0UGF0aHMoaSkpKSk6dFtuXVthXT1mLmV4cGFuZE9iamVjdFBhdGhzKGkpKTp0W3JdPWYuZXhwYW5kT2JqZWN0UGF0aHModFtyXSkpO3JldHVybiB0fSxmLm51bVNlcGFyYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZihyfHwocj0hMSksInN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJTZXBhcmF0b3Igc3RyaW5nIHJlcXVpcmVkIGZvciBmb3JtYXR0aW5nISIpOyJudW1iZXIiPT10eXBlb2YgdCYmKHQ9U3RyaW5nKHQpKTt2YXIgbj0vKFxkKykoXGR7M30pLyxpPWUuY2hhckF0KDApLGE9ZS5jaGFyQXQoMSksbz10LnNwbGl0KCIuIikscz1vWzBdLGw9by5sZW5ndGg+MT9pK29bMV06IiI7aWYoYSYmKG8ubGVuZ3RoPjF8fHMubGVuZ3RoPjR8fHIpKWZvcig7bi50ZXN0KHMpOylzPXMucmVwbGFjZShuLCIkMSIrYSsiJDIiKTtyZXR1cm4gcytsfSxmLlRFTVBMQVRFX1NUUklOR19SRUdFWD0vJXsoW15ccyV7fTpdKikoWzp8XHxdW159XSopP30vZzt2YXIgej0vXlx3KiQvO2YudGVtcGxhdGVTdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcj17fTtyZXR1cm4gdC5yZXBsYWNlKGYuVEVNUExBVEVfU1RSSU5HX1JFR0VYLChmdW5jdGlvbih0LG4pe3ZhciBpO3JldHVybiB6LnRlc3Qobik/aT1lW25dOihyW25dPXJbbl18fGYubmVzdGVkUHJvcGVydHkoZSxuKS5nZXQsaT1yW25dKCkpLGYuaXNWYWxpZFRleHRWYWx1ZShpKT9pOiIifSkpfTt2YXIgRD17bWF4OjEwLGNvdW50OjAsbmFtZToiaG92ZXJ0ZW1wbGF0ZSJ9O2YuaG92ZXJ0ZW1wbGF0ZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiBCLmFwcGx5KEQsYXJndW1lbnRzKX07dmFyIFI9e21heDoxMCxjb3VudDowLG5hbWU6InRleHR0ZW1wbGF0ZSJ9O2YudGV4dHRlbXBsYXRlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEIuYXBwbHkoUixhcmd1bWVudHMpfTt2YXIgRj0vXls6fFx8XS87ZnVuY3Rpb24gQih0LGUscil7dmFyIG49dGhpcyxhPWFyZ3VtZW50cztlfHwoZT17fSk7dmFyIG89e307cmV0dXJuIHQucmVwbGFjZShmLlRFTVBMQVRFX1NUUklOR19SRUdFWCwoZnVuY3Rpb24odCxzLGwpe3ZhciBjLHUsaCxwPSJfeG90aGVyIj09PXN8fCJfeW90aGVyIj09PXMsZD0iX3hvdGhlcl8iPT09c3x8Il95b3RoZXJfIj09PXMsbT0ieG90aGVyXyI9PT1zfHwieW90aGVyXyI9PT1zLGc9InhvdGhlciI9PT1zfHwieW90aGVyIj09PXN8fHB8fG18fGQsdj1zO2lmKChwfHxkKSYmKHY9di5zdWJzdHJpbmcoMSkpLChtfHxkKSYmKHY9di5zdWJzdHJpbmcoMCx2Lmxlbmd0aC0xKSksZyl7aWYodm9pZCAwPT09KGM9ZVt2XSkpcmV0dXJuIiJ9ZWxzZSBmb3IoaD0zO2g8YS5sZW5ndGg7aCsrKWlmKHU9YVtoXSl7aWYodS5oYXNPd25Qcm9wZXJ0eSh2KSl7Yz11W3ZdO2JyZWFrfWlmKHoudGVzdCh2KXx8KGM9Zi5uZXN0ZWRQcm9wZXJ0eSh1LHYpLmdldCgpLChjPW9bdl18fGYubmVzdGVkUHJvcGVydHkodSx2KS5nZXQoKSkmJihvW3ZdPWMpKSx2b2lkIDAhPT1jKWJyZWFrfWlmKHZvaWQgMD09PWMmJm4pcmV0dXJuIG4uY291bnQ8bi5tYXgmJihmLndhcm4oIlZhcmlhYmxlICciK3YrIicgaW4gIituLm5hbWUrIiBjb3VsZCBub3QgYmUgZm91bmQhIiksYz10KSxuLmNvdW50PT09bi5tYXgmJmYud2FybigiVG9vIG1hbnkgIituLm5hbWUrIiB3YXJuaW5ncyAtIGFkZGl0aW9uYWwgd2FybmluZ3Mgd2lsbCBiZSBzdXBwcmVzc2VkIiksbi5jb3VudCsrLHQ7aWYobCl7dmFyIHk7aWYoIjoiPT09bFswXSYmKGM9KHk9cj9yLm51bWJlckZvcm1hdDpmLm51bWJlckZvcm1hdCkobC5yZXBsYWNlKEYsIiIpKShjKSksInwiPT09bFswXSl7eT1yP3IudGltZUZvcm1hdDppO3ZhciB4PWYuZGF0ZVRpbWUybXMoYyk7Yz1mLmZvcm1hdERhdGUoeCxsLnJlcGxhY2UoRiwiIiksITEseSl9fWVsc2V7dmFyIGI9disiTGFiZWwiO2UuaGFzT3duUHJvcGVydHkoYikmJihjPWVbYl0pfXJldHVybiBnJiYoYz0iKCIrYysiKSIsKHB8fGQpJiYoYz0iICIrYyksKG18fGQpJiYoYys9IiAiKSksY30pKX1mLnN1YnBsb3RTb3J0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKSsxLG49MCxpPTAsYT0wO2E8cjthKyspe3ZhciBvPXQuY2hhckNvZGVBdChhKXx8MCxzPWUuY2hhckNvZGVBdChhKXx8MCxsPW8+PTQ4JiZvPD01NyxjPXM+PTQ4JiZzPD01NztpZihsJiYobj0xMCpuK28tNDgpLGMmJihpPTEwKmkrcy00OCksIWx8fCFjKXtpZihuIT09aSlyZXR1cm4gbi1pO2lmKG8hPT1zKXJldHVybiBvLXN9fXJldHVybiBpLW59O3ZhciBOPTJlOTtmLnNlZWRQc2V1ZG9SYW5kb209ZnVuY3Rpb24oKXtOPTJlOX0sZi5wc2V1ZG9SYW5kb209ZnVuY3Rpb24oKXt2YXIgdD1OO3JldHVybiBOPSg2OTA2OSpOKzEpJTQyOTQ5NjcyOTYsTWF0aC5hYnMoTi10KTw0Mjk0OTY3Mjk/Zi5wc2V1ZG9SYW5kb20oKTpOLzQyOTQ5NjcyOTZ9LGYuZmlsbFRleHQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPUFycmF5LmlzQXJyYXkocik/ZnVuY3Rpb24odCl7ci5wdXNoKHQpfTpmdW5jdGlvbih0KXtyLnRleHQ9dH0saT1mLmV4dHJhY3RPcHRpb24odCxlLCJodHgiLCJob3ZlcnRleHQiKTtpZihmLmlzVmFsaWRUZXh0VmFsdWUoaSkpcmV0dXJuIG4oaSk7dmFyIGE9Zi5leHRyYWN0T3B0aW9uKHQsZSwidHgiLCJ0ZXh0Iik7cmV0dXJuIGYuaXNWYWxpZFRleHRWYWx1ZShhKT9uKGEpOnZvaWQgMH0sZi5pc1ZhbGlkVGV4dFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB0fHwwPT09dH0sZi5mb3JtYXRQZXJjZW50PWZ1bmN0aW9uKHQsZSl7ZT1lfHwwO2Zvcih2YXIgcj0oTWF0aC5yb3VuZCgxMDAqdCpNYXRoLnBvdygxMCxlKSkqTWF0aC5wb3coLjEsZSkpLnRvRml4ZWQoZSkrIiUiLG49MDtuPGU7bisrKS0xIT09ci5pbmRleE9mKCIuIikmJihyPShyPXIucmVwbGFjZSgiMCUiLCIlIikpLnJlcGxhY2UoIi4lIiwiJSIpKTtyZXR1cm4gcn0sZi5pc0hpZGRlbj1mdW5jdGlvbih0KXt2YXIgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5kaXNwbGF5O3JldHVybiFlfHwibm9uZSI9PT1lfSxmLnN0clRyYW5zbGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0fHxlPyJ0cmFuc2xhdGUoIit0KyIsIitlKyIpIjoiIn0sZi5zdHJSb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/InJvdGF0ZSgiK3QrIikiOiIifSxmLnN0clNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiAxIT09dD8ic2NhbGUoIit0KyIpIjoiIn0sZi5nZXRUZXh0VHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3ZhciBlPXQubm9DZW50ZXIscj10LnRleHRYLG49dC50ZXh0WSxpPXQudGFyZ2V0WCxhPXQudGFyZ2V0WSxvPXQuYW5jaG9yWHx8MCxzPXQuYW5jaG9yWXx8MCxsPXQucm90YXRlLGM9dC5zY2FsZTtyZXR1cm4gYz9jPjEmJihjPTEpOmM9MCxmLnN0clRyYW5zbGF0ZShpLWMqKHIrbyksYS1jKihuK3MpKStmLnN0clNjYWxlKGMpKyhsPyJyb3RhdGUoIitsKyhlPyIiOiIgIityKyIgIituKSsiKSI6IiIpfSxmLmVuc3VyZVVuaWZvcm1Gb250U2l6ZT1mdW5jdGlvbih0LGUpe3ZhciByPWYuZXh0ZW5kRmxhdCh7fSxlKTtyZXR1cm4gci5zaXplPU1hdGgubWF4KGUuc2l6ZSx0Ll9mdWxsTGF5b3V0LnVuaWZvcm10ZXh0Lm1pbnNpemV8fDApLHJ9LGYuam9pbjI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQubGVuZ3RoO3JldHVybiBuPjE/dC5zbGljZSgwLC0xKS5qb2luKGUpK3IrdFtuLTFdOnQuam9pbihlKX0sZi5iaWdGb250PWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKDEuMip0KX07dmFyIGo9Zi5nZXRGaXJlZm94VmVyc2lvbigpLFU9bnVsbCE9PWomJmo8ODY7Zi5nZXRQb3NpdGlvbkZyb21EM0V2ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIFU/W24uZXZlbnQubGF5ZXJYLG4uZXZlbnQubGF5ZXJZXTpbbi5ldmVudC5vZmZzZXRYLG4uZXZlbnQub2Zmc2V0WV19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi9hbmNob3JfdXRpbHMiOjc1NiwiLi9hbmdsZXMiOjc1NywiLi9hcnJheSI6NzU4LCIuL2NsZWFuX251bWJlciI6NzU5LCIuL2NsZWFyX3Jlc3BvbnNpdmUiOjc2MSwiLi9jb2VyY2UiOjc2MiwiLi9kYXRlcyI6NzYzLCIuL2RvbSI6NzY0LCIuL2V4dGVuZCI6NzY2LCIuL2ZpbHRlcl91bmlxdWUiOjc2NywiLi9maWx0ZXJfdmlzaWJsZSI6NzY4LCIuL2dlb21ldHJ5MmQiOjc3MSwiLi9pZGVudGl0eSI6Nzc0LCIuL2luY3JlbWVudCI6Nzc1LCIuL2lzX3BsYWluX29iamVjdCI6Nzc3LCIuL2tleWVkX2NvbnRhaW5lciI6Nzc4LCIuL2xvY2FsaXplIjo3NzksIi4vbG9nZ2VycyI6NzgwLCIuL21ha2VfdHJhY2VfZ3JvdXBzIjo3ODEsIi4vbWF0cml4Ijo3ODIsIi4vbW9kIjo3ODMsIi4vbmVzdGVkX3Byb3BlcnR5Ijo3ODQsIi4vbm9vcCI6Nzg1LCIuL25vdGlmaWVyIjo3ODYsIi4vcHJlc2VydmVfZHJhd2luZ19idWZmZXIiOjc5MCwiLi9wdXNoX3VuaXF1ZSI6NzkxLCIuL3JlZ2V4Ijo3OTMsIi4vcmVsYXRpdmVfYXR0ciI6Nzk0LCIuL3JlbGlua19wcml2YXRlIjo3OTUsIi4vc2VhcmNoIjo3OTYsIi4vc29ydF9vYmplY3Rfa2V5cyI6Nzk5LCIuL3N0YXRzIjo4MDAsIi4vdGhyb3R0bGUiOjgwMywiLi90b19sb2dfcmFuZ2UiOjgwNCwiQHBsb3RseS9kMyI6NTgsImQzLWZvcm1hdCI6MTYwLCJkMy10aW1lLWZvcm1hdCI6MTY4LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sNzc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gd2luZG93JiZ3aW5kb3cucHJvY2VzcyYmd2luZG93LnByb2Nlc3MudmVyc2lvbnM/IltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk6IltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkmJk9iamVjdC5nZXRQcm90b3R5cGVPZih0KS5oYXNPd25Qcm9wZXJ0eSgiaGFzT3duUHJvcGVydHkiKX19LHt9XSw3Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9uZXN0ZWRfcHJvcGVydHkiKSxpPS9eXHcqJC87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHMsbDtyPXJ8fCJuYW1lIixhPWF8fCJ2YWx1ZSI7dmFyIGM9e307ZSYmZS5sZW5ndGg/KGw9bih0LGUpLHM9bC5nZXQoKSk6cz10LGU9ZXx8IiI7dmFyIHU9e307aWYocylmb3Iobz0wO288cy5sZW5ndGg7bysrKXVbc1tvXVtyXV09bzt2YXIgZj1pLnRlc3QoYSksaD17c2V0OmZ1bmN0aW9uKHQsZSl7dmFyIGk9bnVsbD09PWU/NDowO2lmKCFzKXtpZighbHx8ND09PWkpcmV0dXJuO3M9W10sbC5zZXQocyl9dmFyIG89dVt0XTtpZih2b2lkIDA9PT1vKXtpZig0PT09aSlyZXR1cm47aXw9MyxvPXMubGVuZ3RoLHVbdF09b31lbHNlIGUhPT0oZj9zW29dW2FdOm4oc1tvXSxhKS5nZXQoKSkmJihpfD0yKTt2YXIgcD1zW29dPXNbb118fHt9O3JldHVybiBwW3JdPXQsZj9wW2FdPWU6bihwLGEpLnNldChlKSxudWxsIT09ZSYmKGkmPS01KSxjW29dPWNbb118aSxofSxnZXQ6ZnVuY3Rpb24odCl7aWYocyl7dmFyIGU9dVt0XTtyZXR1cm4gdm9pZCAwPT09ZT92b2lkIDA6Zj9zW2VdW2FdOm4oc1tlXSxhKS5nZXQoKX19LHJlbmFtZTpmdW5jdGlvbih0LGUpe3ZhciBuPXVbdF07cmV0dXJuIHZvaWQgMD09PW58fChjW25dPTF8Y1tuXSx1W2VdPW4sZGVsZXRlIHVbdF0sc1tuXVtyXT1lKSxofSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dVt0XTtpZih2b2lkIDA9PT1lKXJldHVybiBoO3ZhciBpPXNbZV07aWYoT2JqZWN0LmtleXMoaSkubGVuZ3RoPjIpcmV0dXJuIGNbZV09MnxjW2VdLGguc2V0KHQsbnVsbCk7aWYoZil7Zm9yKG89ZTtvPHMubGVuZ3RoO28rKyljW29dPTN8Y1tvXTtmb3Iobz1lO288cy5sZW5ndGg7bysrKXVbc1tvXVtyXV0tLTtzLnNwbGljZShlLDEpLGRlbGV0ZSB1W3RdfWVsc2UgbihpLGEpLnNldChudWxsKSxjW2VdPTZ8Y1tlXTtyZXR1cm4gaH0sY29uc3RydWN0VXBkYXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0LGksbz17fSxsPU9iamVjdC5rZXlzKGMpLHU9MDt1PGwubGVuZ3RoO3UrKylpPWxbdV0sdD1lKyJbIitpKyJdIixzW2ldPygxJmNbaV0mJihvW3QrIi4iK3JdPXNbaV1bcl0pLDImY1tpXSYmKG9bdCsiLiIrYV09Zj80JmNbaV0/bnVsbDpzW2ldW2FdOjQmY1tpXT9udWxsOm4oc1tpXSxhKS5nZXQoKSkpOm9bdF09bnVsbDtyZXR1cm4gb319O3JldHVybiBofX0seyIuL25lc3RlZF9wcm9wZXJ0eSI6Nzg0fV0sNzc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3JlZ2lzdHJ5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2NvbnRleHQubG9jYWxlLGk9MDtpPDI7aSsrKXtmb3IodmFyIGE9dC5fY29udGV4dC5sb2NhbGVzLG89MDtvPDI7bysrKXt2YXIgcz0oYVtyXXx8e30pLmRpY3Rpb25hcnk7aWYocyl7dmFyIGw9c1tlXTtpZihsKXJldHVybiBsfWE9bi5sb2NhbGVSZWdpc3RyeX12YXIgYz1yLnNwbGl0KCItIilbMF07aWYoYz09PXIpYnJlYWs7cj1jfXJldHVybiBlfX0seyIuLi9yZWdpc3RyeSI6OTA0fV0sNzgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIikuZGZsdENvbmZpZyxpPXQoIi4vbm90aWZpZXIiKSxhPWUuZXhwb3J0cz17fTthLmxvZz1mdW5jdGlvbigpe3ZhciB0O2lmKG4ubG9nZ2luZz4xKXt2YXIgZT1bIkxPRzoiXTtmb3IodD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZS5wdXNoKGFyZ3VtZW50c1t0XSk7Y29uc29sZS50cmFjZS5hcHBseShjb25zb2xlLGUpfWlmKG4ubm90aWZ5T25Mb2dnaW5nPjEpe3ZhciByPVtdO2Zvcih0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKylyLnB1c2goYXJndW1lbnRzW3RdKTtpKHIuam9pbigiPGJyPiIpLCJsb25nIil9fSxhLndhcm49ZnVuY3Rpb24oKXt2YXIgdDtpZihuLmxvZ2dpbmc+MCl7dmFyIGU9WyJXQVJOOiJdO2Zvcih0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllLnB1c2goYXJndW1lbnRzW3RdKTtjb25zb2xlLnRyYWNlLmFwcGx5KGNvbnNvbGUsZSl9aWYobi5ub3RpZnlPbkxvZ2dpbmc+MCl7dmFyIHI9W107Zm9yKHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXIucHVzaChhcmd1bWVudHNbdF0pO2koci5qb2luKCI8YnI+IiksInN0aWNrIil9fSxhLmVycm9yPWZ1bmN0aW9uKCl7dmFyIHQ7aWYobi5sb2dnaW5nPjApe3ZhciBlPVsiRVJST1I6Il07Zm9yKHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWUucHVzaChhcmd1bWVudHNbdF0pO2NvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSxlKX1pZihuLm5vdGlmeU9uTG9nZ2luZz4wKXt2YXIgcj1bXTtmb3IodD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspci5wdXNoKGFyZ3VtZW50c1t0XSk7aShyLmpvaW4oIjxicj4iKSwic3RpY2siKX19fSx7Ii4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIjo4MTQsIi4vbm90aWZpZXIiOjc4Nn1dLDc4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10LnNlbGVjdEFsbCgiZy4iK3IucmVwbGFjZSgvXHMvZywiLiIpKS5kYXRhKGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pKTtpLmV4aXQoKS5yZW1vdmUoKSxpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLHIpLGkub3JkZXIoKTt2YXIgYT10LmNsYXNzZWQoInJhbmdlcGxvdCIpPyJub2RlUmFuZ2VQbG90MyI6Im5vZGUzIjtyZXR1cm4gaS5lYWNoKChmdW5jdGlvbih0KXt0WzBdW2FdPW4uc2VsZWN0KHRoaXMpfSkpLGl9fSx7IkBwbG90bHkvZDMiOjU4fV0sNzgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLW1hdDQiKTtyLmluaXQyZEFycmF5PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0O24rKylyW25dPW5ldyBBcnJheShlKTtyZXR1cm4gcn0sci50cmFuc3Bvc2VSYWdnZWQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPTAsaT10Lmxlbmd0aDtmb3IoZT0wO2U8aTtlKyspbj1NYXRoLm1heChuLHRbZV0ubGVuZ3RoKTt2YXIgYT1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47ZSsrKWZvcihhW2VdPW5ldyBBcnJheShpKSxyPTA7cjxpO3IrKylhW2VdW3JdPXRbcl1bZV07cmV0dXJuIGF9LHIuZG90PWZ1bmN0aW9uKHQsZSl7aWYoIXQubGVuZ3RofHwhZS5sZW5ndGh8fHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIG4saSxhPXQubGVuZ3RoO2lmKHRbMF0ubGVuZ3RoKWZvcihuPW5ldyBBcnJheShhKSxpPTA7aTxhO2krKyluW2ldPXIuZG90KHRbaV0sZSk7ZWxzZSBpZihlWzBdLmxlbmd0aCl7dmFyIG89ci50cmFuc3Bvc2VSYWdnZWQoZSk7Zm9yKG49bmV3IEFycmF5KG8ubGVuZ3RoKSxpPTA7aTxvLmxlbmd0aDtpKyspbltpXT1yLmRvdCh0LG9baV0pfWVsc2UgZm9yKG49MCxpPTA7aTxhO2krKyluKz10W2ldKmVbaV07cmV0dXJuIG59LHIudHJhbnNsYXRpb25NYXRyaXg9ZnVuY3Rpb24odCxlKXtyZXR1cm5bWzEsMCx0XSxbMCwxLGVdLFswLDAsMV1dfSxyLnJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uKHQpe3ZhciBlPXQqTWF0aC5QSS8xODA7cmV0dXJuW1tNYXRoLmNvcyhlKSwtTWF0aC5zaW4oZSksMF0sW01hdGguc2luKGUpLE1hdGguY29zKGUpLDBdLFswLDAsMV1dfSxyLnJvdGF0aW9uWFlNYXRyaXg9ZnVuY3Rpb24odCxlLG4pe3JldHVybiByLmRvdChyLmRvdChyLnRyYW5zbGF0aW9uTWF0cml4KGUsbiksci5yb3RhdGlvbk1hdHJpeCh0KSksci50cmFuc2xhdGlvbk1hdHJpeCgtZSwtbikpfSxyLmFwcGx5M0RUcmFuc2Zvcm09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLG49MT09PWFyZ3VtZW50cy5sZW5ndGg/ZVswXTpbZVswXSxlWzFdLGVbMl18fDBdO3JldHVybiByLmRvdCh0LFtuWzBdLG5bMV0sblsyXSwxXSkuc2xpY2UoMCwzKX19LHIuYXBwbHkyRFRyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7Mz09PWUubGVuZ3RoJiYoZT1lWzBdKTt2YXIgbj0xPT09YXJndW1lbnRzLmxlbmd0aD9lWzBdOltlWzBdLGVbMV1dO3JldHVybiByLmRvdCh0LFtuWzBdLG5bMV0sMV0pLnNsaWNlKDAsMil9fSxyLmFwcGx5MkRUcmFuc2Zvcm0yPWZ1bmN0aW9uKHQpe3ZhciBlPXIuYXBwbHkyRFRyYW5zZm9ybSh0KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodC5zbGljZSgwLDIpKS5jb25jYXQoZSh0LnNsaWNlKDIsNCkpKX19LHIuY29udmVydENzc01hdHJpeD1mdW5jdGlvbih0KXtpZih0KXt2YXIgZT10Lmxlbmd0aDtpZigxNj09PWUpcmV0dXJuIHQ7aWYoNj09PWUpcmV0dXJuW3RbMF0sdFsxXSwwLDAsdFsyXSx0WzNdLDAsMCwwLDAsMSwwLHRbNF0sdFs1XSwwLDFdfXJldHVyblsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXX0sci5pbnZlcnNlVHJhbnNmb3JtTWF0cml4PWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiBuLmludmVydChlLHQpLFtbZVswXSxlWzFdLGVbMl0sZVszXV0sW2VbNF0sZVs1XSxlWzZdLGVbN11dLFtlWzhdLGVbOV0sZVsxMF0sZVsxMV1dLFtlWzEyXSxlWzEzXSxlWzE0XSxlWzE1XV1dfX0seyJnbC1tYXQ0IjoyODZ9XSw3ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2Q6ZnVuY3Rpb24odCxlKXt2YXIgcj10JWU7cmV0dXJuIHI8MD9yK2U6cn0sbW9kSGFsZjpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyh0KT5lLzI/dC1NYXRoLnJvdW5kKHQvZSkqZTp0fX19LHt9XSw3ODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4vYXJyYXkiKS5pc0FycmF5T3JUeXBlZEFycmF5O2Z1bmN0aW9uIGEodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuLG8scyxsLGM9dDtmb3Iocz0wO3M8ZS5sZW5ndGgtMTtzKyspe2lmKC0xPT09KHI9ZVtzXSkpe2ZvcihuPSEwLG89W10sbD0wO2w8Yy5sZW5ndGg7bCsrKW9bbF09YShjW2xdLGUuc2xpY2UocysxKSkoKSxvW2xdIT09b1swXSYmKG49ITEpO3JldHVybiBuP29bMF06b31pZigibnVtYmVyIj09dHlwZW9mIHImJiFpKGMpKXJldHVybjtpZigib2JqZWN0IiE9dHlwZW9mKGM9Y1tyXSl8fG51bGw9PT1jKXJldHVybn1pZigib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPT1jJiZudWxsIT09KG89Y1tlW3NdXSkpcmV0dXJuIG99fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKG4oZSkpZT1TdHJpbmcoZSk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGV8fCJbLTFdIj09PWUuc3Vic3RyKGUubGVuZ3RoLTQpKXRocm93ImJhZCBwcm9wZXJ0eSBzdHJpbmciO2Zvcih2YXIgcixpLG8scz0wLGM9ZS5zcGxpdCgiLiIpO3M8Yy5sZW5ndGg7KXtpZihyPVN0cmluZyhjW3NdKS5tYXRjaCgvXihbXlxbXF1dKikoKFxbXC0/WzAtOV0qXF0pKykkLykpe2lmKHJbMV0pY1tzXT1yWzFdO2Vsc2V7aWYoMCE9PXMpdGhyb3ciYmFkIHByb3BlcnR5IHN0cmluZyI7Yy5zcGxpY2UoMCwxKX1mb3IoaT1yWzJdLnN1YnN0cigxLHJbMl0ubGVuZ3RoLTIpLnNwbGl0KCJdWyIpLG89MDtvPGkubGVuZ3RoO28rKylzKyssYy5zcGxpY2UocywwLE51bWJlcihpW29dKSl9cysrfXJldHVybiJvYmplY3QiIT10eXBlb2YgdD9mdW5jdGlvbih0LGUscil7cmV0dXJue3NldDpmdW5jdGlvbigpe3Rocm93ImJhZCBjb250YWluZXIifSxnZXQ6ZnVuY3Rpb24oKXt9LGFzdHI6ZSxwYXJ0czpyLG9iajp0fX0odCxlLGMpOntzZXQ6bCh0LGMsZSksZ2V0OmEodCxjKSxhc3RyOmUscGFydHM6YyxvYmo6dH19O3ZhciBvPS8oXnxcLilhcmdzXFsvO2Z1bmN0aW9uIHModCxlKXtyZXR1cm4gdm9pZCAwPT09dHx8bnVsbD09PXQmJiFlLm1hdGNoKG8pfWZ1bmN0aW9uIGwodCxlLHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgYSxvLGw9dCxoPSIiLHA9W1t0LGhdXSxkPXMobixyKTtmb3Iobz0wO288ZS5sZW5ndGgtMTtvKyspe2lmKCJudW1iZXIiPT10eXBlb2YoYT1lW29dKSYmIWkobCkpdGhyb3ciYXJyYXkgaW5kZXggYnV0IGNvbnRhaW5lciBpcyBub3QgYW4gYXJyYXkiO2lmKC0xPT09YSl7aWYoZD0hdShsLGUuc2xpY2UobysxKSxuLHIpKWJyZWFrO3JldHVybn1pZighZihsLGEsZVtvKzFdLGQpKWJyZWFrO2lmKCJvYmplY3QiIT10eXBlb2YobD1sW2FdKXx8bnVsbD09PWwpdGhyb3ciY29udGFpbmVyIGlzIG5vdCBhbiBvYmplY3QiO2g9YyhoLGEpLHAucHVzaChbbCxoXSl9aWYoZCl7aWYobz09PWUubGVuZ3RoLTEmJihkZWxldGUgbFtlW29dXSxBcnJheS5pc0FycmF5KGwpJiYrZVtvXT09bC5sZW5ndGgtMSkpZm9yKDtsLmxlbmd0aCYmdm9pZCAwPT09bFtsLmxlbmd0aC0xXTspbC5wb3AoKX1lbHNlIGxbZVtvXV09bn19ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWU7cmV0dXJuIG4oZSk/cj0iWyIrZSsiXSI6dCYmKHI9Ii4iK2UpLHQrcn1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBhLG89aShyKSxjPSEwLHU9cixoPW4ucmVwbGFjZSgiLTEiLDApLHA9IW8mJnMocixoKSxkPWVbMF07Zm9yKGE9MDthPHQubGVuZ3RoO2ErKyloPW4ucmVwbGFjZSgiLTEiLGEpLG8mJihwPXModT1yW2Elci5sZW5ndGhdLGgpKSxwJiYoYz0hMSksZih0LGEsZCxwKSYmbCh0W2FdLGUsbi5yZXBsYWNlKCItMSIsYSkpKHUpO3JldHVybiBjfWZ1bmN0aW9uIGYodCxlLHIsbil7aWYodm9pZCAwPT09dFtlXSl7aWYobilyZXR1cm4hMTt0W2VdPSJudW1iZXIiPT10eXBlb2Ygcj9bXTp7fX1yZXR1cm4hMH19LHsiLi9hcnJheSI6NzU4LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sNzg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe319LHt9XSw3ODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPVtdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKC0xPT09YS5pbmRleE9mKHQpKXthLnB1c2godCk7dmFyIHI9MWUzO2koZSk/cj1lOiJsb25nIj09PWUmJihyPTNlMyk7dmFyIG89bi5zZWxlY3QoImJvZHkiKS5zZWxlY3RBbGwoIi5wbG90bHktbm90aWZpZXIiKS5kYXRhKFswXSk7by5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgicGxvdGx5LW5vdGlmaWVyIiwhMCksby5zZWxlY3RBbGwoIi5ub3RpZmllci1ub3RlIikuZGF0YShhKS5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgibm90aWZpZXItbm90ZSIsITApLnN0eWxlKCJvcGFjaXR5IiwwKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgaT1uLnNlbGVjdCh0aGlzKTtpLmFwcGVuZCgiYnV0dG9uIikuY2xhc3NlZCgibm90aWZpZXItY2xvc2UiLCEwKS5odG1sKCImdGltZXM7Iikub24oImNsaWNrIiwoZnVuY3Rpb24oKXtpLnRyYW5zaXRpb24oKS5jYWxsKHMpfSkpO2Zvcih2YXIgYT1pLmFwcGVuZCgicCIpLG89dC5zcGxpdCgvPGJyXHMqXC8/Pi9nKSxsPTA7bDxvLmxlbmd0aDtsKyspbCYmYS5hcHBlbmQoImJyIiksYS5hcHBlbmQoInNwYW4iKS50ZXh0KG9bbF0pOyJzdGljayI9PT1lP2kudHJhbnNpdGlvbigpLmR1cmF0aW9uKDM1MCkuc3R5bGUoIm9wYWNpdHkiLDEpOmkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDcwMCkuc3R5bGUoIm9wYWNpdHkiLDEpLnRyYW5zaXRpb24oKS5kZWxheShyKS5jYWxsKHMpfSkpfWZ1bmN0aW9uIHModCl7dC5kdXJhdGlvbig3MDApLnN0eWxlKCJvcGFjaXR5IiwwKS5lYWNoKCJlbmQiLChmdW5jdGlvbih0KXt2YXIgZT1hLmluZGV4T2YodCk7LTEhPT1lJiZhLnNwbGljZShlLDEpLG4uc2VsZWN0KHRoaXMpLnJlbW92ZSgpfSkpfX19LHsiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw3ODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zZXRjdXJzb3IiKSxpPSJkYXRhLXNhdmVkY3Vyc29yIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmF0dHIoaSk7aWYoZSl7aWYoIXIpe2Zvcih2YXIgYT0odC5hdHRyKCJjbGFzcyIpfHwiIikuc3BsaXQoIiAiKSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107MD09PXMuaW5kZXhPZigiY3Vyc29yLSIpJiZ0LmF0dHIoaSxzLnN1YnN0cig3KSkuY2xhc3NlZChzLCExKX10LmF0dHIoaSl8fHQuYXR0cihpLCIhISIpfW4odCxlKX1lbHNlIHImJih0LmF0dHIoaSxudWxsKSwiISEiPT09cj9uKHQpOm4odCxyKSl9fSx7Ii4vc2V0Y3Vyc29yIjo3OTd9XSw3ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9tYXRyaXgiKS5kb3QsaT10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9ZS5leHBvcnRzPXt9O2EudGVzdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zbGljZSgpLG49clswXVswXSxhPW4sbz1yWzBdWzFdLHM9bztmb3Ioci5wdXNoKHJbMF0pLGU9MTtlPHIubGVuZ3RoO2UrKyluPU1hdGgubWluKG4scltlXVswXSksYT1NYXRoLm1heChhLHJbZV1bMF0pLG89TWF0aC5taW4obyxyW2VdWzFdKSxzPU1hdGgubWF4KHMscltlXVsxXSk7dmFyIGwsYz0hMTs1PT09ci5sZW5ndGgmJihyWzBdWzBdPT09clsxXVswXT9yWzJdWzBdPT09clszXVswXSYmclswXVsxXT09PXJbM11bMV0mJnJbMV1bMV09PT1yWzJdWzFdJiYoYz0hMCxsPWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09clswXVswXX0pOnJbMF1bMV09PT1yWzFdWzFdJiZyWzJdWzFdPT09clszXVsxXSYmclswXVswXT09PXJbM11bMF0mJnJbMV1bMF09PT1yWzJdWzBdJiYoYz0hMCxsPWZ1bmN0aW9uKHQpe3JldHVybiB0WzFdPT09clswXVsxXX0pKTt2YXIgdT0hMCxmPXJbMF07Zm9yKGU9MTtlPHIubGVuZ3RoO2UrKylpZihmWzBdIT09cltlXVswXXx8ZlsxXSE9PXJbZV1bMV0pe3U9ITE7YnJlYWt9cmV0dXJue3htaW46bix4bWF4OmEseW1pbjpvLHltYXg6cyxwdHM6cixjb250YWluczpjP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxjPXRbMV07cmV0dXJuIShyPT09aXx8cjxufHxyPmF8fGM9PT1pfHxjPG98fGM+cykmJighZXx8IWwodCkpfTpmdW5jdGlvbih0LGUpe3ZhciBsPXRbMF0sYz10WzFdO2lmKGw9PT1pfHxsPG58fGw+YXx8Yz09PWl8fGM8b3x8Yz5zKXJldHVybiExO3ZhciB1LGYsaCxwLGQsbT1yLmxlbmd0aCxnPXJbMF1bMF0sdj1yWzBdWzFdLHk9MDtmb3IodT0xO3U8bTt1KyspaWYoZj1nLGg9dixnPXJbdV1bMF0sdj1yW3VdWzFdLCEobDwocD1NYXRoLm1pbihmLGcpKXx8bD5NYXRoLm1heChmLGcpfHxjPk1hdGgubWF4KGgsdikpKWlmKGM8TWF0aC5taW4oaCx2KSlsIT09cCYmeSsrO2Vsc2V7aWYoYz09PShkPWc9PT1mP2M6aCsobC1mKSoodi1oKS8oZy1mKSkpcmV0dXJuIDEhPT11fHwhZTtjPD1kJiZsIT09cCYmeSsrfXJldHVybiB5JTI9PTF9LGlzUmVjdDpjLGRlZ2VuZXJhdGU6dX19LGEuaXNTZWdtZW50QmVudD1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsbD10W2VdLGM9W3Rbcl1bMF0tbFswXSx0W3JdWzFdLWxbMV1dLHU9bihjLGMpLGY9TWF0aC5zcXJ0KHUpLGg9Wy1jWzFdL2YsY1swXS9mXTtmb3IoYT1lKzE7YTxyO2ErKylpZihvPVt0W2FdWzBdLWxbMF0sdFthXVsxXS1sWzFdXSwocz1uKG8sYykpPDB8fHM+dXx8TWF0aC5hYnMobihvLGgpKT5pKXJldHVybiEwO3JldHVybiExfSxhLmZpbHRlcj1mdW5jdGlvbih0LGUpe3ZhciByPVt0WzBdXSxuPTAsaT0wO2Z1bmN0aW9uIG8obyl7dC5wdXNoKG8pO3ZhciBzPXIubGVuZ3RoLGw9bjtyLnNwbGljZShpKzEpO2Zvcih2YXIgYz1sKzE7Yzx0Lmxlbmd0aDtjKyspKGM9PT10Lmxlbmd0aC0xfHxhLmlzU2VnbWVudEJlbnQodCxsLGMrMSxlKSkmJihyLnB1c2godFtjXSksci5sZW5ndGg8cy0yJiYobj1jLGk9ci5sZW5ndGgtMSksbD1jKX10Lmxlbmd0aD4xJiZvKHQucG9wKCkpO3JldHVybnthZGRQdDpvLHJhdzp0LGZpbHRlcmVkOnJ9fX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4vbWF0cml4Ijo3ODJ9XSw3ODk6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2hvd19ub193ZWJnbF9tc2ciKSxpPXQoInJlZ2wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89ITA7cmV0dXJuIGEuX2dsY2FudmFzLmVhY2goKGZ1bmN0aW9uKG4pe2lmKCFuLnJlZ2wmJighbi5waWNrfHxhLl9oYXMoInBhcmNvb3JkcyIpKSl7dHJ5e24ucmVnbD1pKHtjYW52YXM6dGhpcyxhdHRyaWJ1dGVzOnthbnRpYWxpYXM6IW4ucGljayxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITB9LHBpeGVsUmF0aW86dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvfHxyLmRldmljZVBpeGVsUmF0aW8sZXh0ZW5zaW9uczplfHxbXX0pfWNhdGNoKHQpe289ITF9bi5yZWdsfHwobz0hMSksbyYmdGhpcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IiwoZnVuY3Rpb24oZSl7dCYmdC5lbWl0JiZ0LmVtaXQoInBsb3RseV93ZWJnbGNvbnRleHRsb3N0Iix7ZXZlbnQ6ZSxsYXllcjpuLmtleX0pfSksITEpfX0pKSxvfHxuKHtjb250YWluZXI6YS5fZ2xjb250YWluZXIubm9kZSgpfSksb319KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vc2hvd19ub193ZWJnbF9tc2ciOjc5OCxyZWdsOjUxNn1dLDc5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiaXMtbW9iaWxlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKCJzdHJpbmciIT10eXBlb2YoZT10JiZ0Lmhhc093blByb3BlcnR5KCJ1c2VyQWdlbnQiKT90LnVzZXJBZ2VudDpmdW5jdGlvbigpe3ZhciB0OyJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYodD1uYXZpZ2F0b3IudXNlckFnZW50KTt0JiZ0LmhlYWRlcnMmJiJzdHJpbmciPT10eXBlb2YgdC5oZWFkZXJzWyJ1c2VyLWFnZW50Il0mJih0PXQuaGVhZGVyc1sidXNlci1hZ2VudCJdKTtyZXR1cm4gdH0oKSkpcmV0dXJuITA7dmFyIHI9aSh7dWE6e2hlYWRlcnM6eyJ1c2VyLWFnZW50IjplfX0sdGFibGV0OiEwLGZlYXR1cmVEZXRlY3Q6ITF9KTtpZighcilmb3IodmFyIGE9ZS5zcGxpdCgiICIpLG89MTtvPGEubGVuZ3RoO28rKyl7aWYoLTEhPT1hW29dLmluZGV4T2YoIlNhZmFyaSIpKWZvcih2YXIgcz1vLTE7cz4tMTtzLS0pe3ZhciBsPWFbc107aWYoIlZlcnNpb24vIj09PWwuc3Vic3RyKDAsOCkpe3ZhciBjPWwuc3Vic3RyKDgpLnNwbGl0KCIuIilbMF07aWYobihjKSYmKGM9K2MpLGM+PTEzKXJldHVybiEwfX19cmV0dXJuIHJ9fSx7ImZhc3QtaXNudW1lcmljIjoyNDIsImlzLW1vYmlsZSI6NDM1fV0sNzkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApe2Zvcih2YXIgcj1lLnRvU3RyaW5nKCksbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl1pbnN0YW5jZW9mIFJlZ0V4cCYmdFtuXS50b1N0cmluZygpPT09cilyZXR1cm4gdDt0LnB1c2goZSl9ZWxzZSFlJiYwIT09ZXx8LTEhPT10LmluZGV4T2YoZSl8fHQucHVzaChlKTtyZXR1cm4gdH19LHt9XSw3OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpLmRmbHRDb25maWc7dmFyIGE9e2FkZDpmdW5jdGlvbih0LGUscixuLGEpe3ZhciBvLHM7dC51bmRvUXVldWU9dC51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSxzPXQudW5kb1F1ZXVlLmluZGV4LHQuYXV0b3BsYXk/dC51bmRvUXVldWUuaW5TZXF1ZW5jZXx8KHQuYXV0b3BsYXk9ITEpOighdC51bmRvUXVldWUuc2VxdWVuY2V8fHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U/KG89e3VuZG86e2NhbGxzOltdLGFyZ3M6W119LHJlZG86e2NhbGxzOltdLGFyZ3M6W119fSx0LnVuZG9RdWV1ZS5xdWV1ZS5zcGxpY2Uocyx0LnVuZG9RdWV1ZS5xdWV1ZS5sZW5ndGgtcyxvKSx0LnVuZG9RdWV1ZS5pbmRleCs9MSk6bz10LnVuZG9RdWV1ZS5xdWV1ZVtzLTFdLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITEsbyYmKG8udW5kby5jYWxscy51bnNoaWZ0KGUpLG8udW5kby5hcmdzLnVuc2hpZnQociksby5yZWRvLmNhbGxzLnB1c2gobiksby5yZWRvLmFyZ3MucHVzaChhKSksdC51bmRvUXVldWUucXVldWUubGVuZ3RoPmkucXVldWVMZW5ndGgmJih0LnVuZG9RdWV1ZS5xdWV1ZS5zaGlmdCgpLHQudW5kb1F1ZXVlLmluZGV4LS0pKX0sc3RhcnRTZXF1ZW5jZTpmdW5jdGlvbih0KXt0LnVuZG9RdWV1ZT10LnVuZG9RdWV1ZXx8e2luZGV4OjAscXVldWU6W10sc2VxdWVuY2U6ITF9LHQudW5kb1F1ZXVlLnNlcXVlbmNlPSEwLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITB9LHN0b3BTZXF1ZW5jZTpmdW5jdGlvbih0KXt0LnVuZG9RdWV1ZT10LnVuZG9RdWV1ZXx8e2luZGV4OjAscXVldWU6W10sc2VxdWVuY2U6ITF9LHQudW5kb1F1ZXVlLnNlcXVlbmNlPSExLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITF9LHVuZG86ZnVuY3Rpb24odCl7dmFyIGUscjtpZighKHZvaWQgMD09PXQudW5kb1F1ZXVlfHxpc05hTih0LnVuZG9RdWV1ZS5pbmRleCl8fHQudW5kb1F1ZXVlLmluZGV4PD0wKSl7Zm9yKHQudW5kb1F1ZXVlLmluZGV4LS0sZT10LnVuZG9RdWV1ZS5xdWV1ZVt0LnVuZG9RdWV1ZS5pbmRleF0sdC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMCxyPTA7cjxlLnVuZG8uY2FsbHMubGVuZ3RoO3IrKylhLnBsb3REbyh0LGUudW5kby5jYWxsc1tyXSxlLnVuZG8uYXJnc1tyXSk7dC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMSx0LmF1dG9wbGF5PSExfX0scmVkbzpmdW5jdGlvbih0KXt2YXIgZSxyO2lmKCEodm9pZCAwPT09dC51bmRvUXVldWV8fGlzTmFOKHQudW5kb1F1ZXVlLmluZGV4KXx8dC51bmRvUXVldWUuaW5kZXg+PXQudW5kb1F1ZXVlLnF1ZXVlLmxlbmd0aCkpe2ZvcihlPXQudW5kb1F1ZXVlLnF1ZXVlW3QudW5kb1F1ZXVlLmluZGV4XSx0LnVuZG9RdWV1ZS5pblNlcXVlbmNlPSEwLHI9MDtyPGUucmVkby5jYWxscy5sZW5ndGg7cisrKWEucGxvdERvKHQsZS5yZWRvLmNhbGxzW3JdLGUucmVkby5hcmdzW3JdKTt0LnVuZG9RdWV1ZS5pblNlcXVlbmNlPSExLHQuYXV0b3BsYXk9ITEsdC51bmRvUXVldWUuaW5kZXgrK319fTthLnBsb3REbz1mdW5jdGlvbih0LGUscil7dC5hdXRvcGxheT0hMCxyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLGk9W10sYT0wO2E8ZS5sZW5ndGg7YSsrKXI9ZVthXSxpW2FdPXI9PT10P3I6Im9iamVjdCI9PXR5cGVvZiByP0FycmF5LmlzQXJyYXkocik/bi5leHRlbmREZWVwKFtdLHIpOm4uZXh0ZW5kRGVlcEFsbCh7fSxyKTpyO3JldHVybiBpfSh0LHIpLGUuYXBwbHkobnVsbCxyKX0sZS5leHBvcnRzPWF9LHsiLi4vbGliIjo3NzYsIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIjo4MTR9XSw3OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5jb3VudGVyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPShlfHwiIikrKHI/IiI6IiQiKSxhPSExPT09bj8iIjoiXiI7cmV0dXJuInh5Ij09PXQ/bmV3IFJlZ0V4cChhKyJ4KFsyLTldfFsxLTldWzAtOV0rKT95KFsyLTldfFsxLTldWzAtOV0rKT8iK2kpOm5ldyBSZWdFeHAoYSt0KyIoWzItOV18WzEtOV1bMC05XSspPyIraSl9fSx7fV0sNzk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPS9eKC4qKShcLlteXC5cW1xdXSt8XFtcZFxdKSQvLGk9L15bXlwuXFtcXV0rJC87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKDtlOyl7dmFyIHI9dC5tYXRjaChuKTtpZihyKXQ9clsxXTtlbHNle2lmKCF0Lm1hdGNoKGkpKXRocm93IG5ldyBFcnJvcigiYmFkIHJlbGF0aXZlQXR0ciBjYWxsOiIrW3QsZV0pO3Q9IiJ9aWYoIl4iIT09ZS5jaGFyQXQoMCkpYnJlYWs7ZT1lLnNsaWNlKDEpfXJldHVybiB0JiYiWyIhPT1lLmNoYXJBdCgwKT90KyIuIitlOnQrZX19LHt9XSw3OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXksaT10KCIuL2lzX3BsYWluX29iamVjdCIpO2UuZXhwb3J0cz1mdW5jdGlvbiB0KGUscil7Zm9yKHZhciBhIGluIHIpe3ZhciBvPXJbYV0scz1lW2FdO2lmKHMhPT1vKWlmKCJfIj09PWEuY2hhckF0KDApfHwiZnVuY3Rpb24iPT10eXBlb2Ygbyl7aWYoYSBpbiBlKWNvbnRpbnVlO2VbYV09b31lbHNlIGlmKG4obykmJm4ocykmJmkob1swXSkpe2lmKCJjdXN0b21kYXRhIj09PWF8fCJpZHMiPT09YSljb250aW51ZTtmb3IodmFyIGw9TWF0aC5taW4oby5sZW5ndGgscy5sZW5ndGgpLGM9MDtjPGw7YysrKXNbY10hPT1vW2NdJiZpKG9bY10pJiZpKHNbY10pJiZ0KHNbY10sb1tjXSl9ZWxzZSBpKG8pJiZpKHMpJiYodChzLG8pLE9iamVjdC5rZXlzKHMpLmxlbmd0aHx8ZGVsZXRlIGVbYV0pfX19LHsiLi9hcnJheSI6NzU4LCIuL2lzX3BsYWluX29iamVjdCI6Nzc3fV0sNzk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuL2xvZ2dlcnMiKSxhPXQoIi4vaWRlbnRpdHkiKSxvPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB0PGV9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0PD1lfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdD5lfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdD49ZX1yLmZpbmRCaW49ZnVuY3Rpb24odCxlLHIpe2lmKG4oZS5zdGFydCkpcmV0dXJuIHI/TWF0aC5jZWlsKCh0LWUuc3RhcnQpL2Uuc2l6ZS0xZS05KS0xOk1hdGguZmxvb3IoKHQtZS5zdGFydCkvZS5zaXplKzFlLTkpO3ZhciBhLG8sZj0wLGg9ZS5sZW5ndGgscD0wLGQ9aD4xPyhlW2gtMV0tZVswXSkvKGgtMSk6MTtmb3Iobz1kPj0wP3I/czpsOnI/dTpjLHQrPTFlLTkqZCoocj8tMToxKSooZD49MD8xOi0xKTtmPGgmJnArKzwxMDA7KW8oZVthPU1hdGguZmxvb3IoKGYraCkvMildLHQpP2Y9YSsxOmg9YTtyZXR1cm4gcD45MCYmaS5sb2coIkxvbmcgYmluYXJ5IHNlYXJjaC4uLiIpLGYtMX0sci5zb3J0ZXJBc2M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSxyLnNvcnRlckRlcz1mdW5jdGlvbih0LGUpe3JldHVybiBlLXR9LHIuZGlzdGluY3RWYWxzPWZ1bmN0aW9uKHQpe3ZhciBlLG49dC5zbGljZSgpO2ZvcihuLnNvcnQoci5zb3J0ZXJBc2MpLGU9bi5sZW5ndGgtMTtlPi0xJiZuW2VdPT09bztlLS0pO2Zvcih2YXIgaSxhPW5bZV0tblswXXx8MSxzPWEvKGV8fDEpLzFlNCxsPVtdLGM9MDtjPD1lO2MrKyl7dmFyIHU9bltjXSxmPXUtaTt2b2lkIDA9PT1pPyhsLnB1c2godSksaT11KTpmPnMmJihhPU1hdGgubWluKGEsZiksbC5wdXNoKHUpLGk9dSl9cmV0dXJue3ZhbHM6bCxtaW5EaWZmOmF9fSxyLnJvdW5kVXA9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPTAsYT1lLmxlbmd0aC0xLG89MCxzPXI/MDoxLGw9cj8xOjAsYz1yP01hdGguY2VpbDpNYXRoLmZsb29yO2k8YSYmbysrPDEwMDspZVtuPWMoKGkrYSkvMildPD10P2k9bitzOmE9bi1sO3JldHVybiBlW2ldfSxyLnNvcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT0xO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1lKHRbaV0sdFtpLTFdKTtpZihhPDA/cj0xOmE+MCYmKG49MSksciYmbilyZXR1cm4gdC5zb3J0KGUpfXJldHVybiBuP3Q6dC5yZXZlcnNlKCl9LHIuZmluZEluZGV4T2ZNaW49ZnVuY3Rpb24odCxlKXtlPWV8fGE7Zm9yKHZhciByLG49MS8wLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89ZSh0W2ldKTtvPG4mJihuPW8scj1pKX1yZXR1cm4gcn19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuL2lkZW50aXR5Ijo3NzQsIi4vbG9nZ2VycyI6NzgwLCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sNzk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpeyh0LmF0dHIoImNsYXNzIil8fCIiKS5zcGxpdCgiICIpLmZvckVhY2goKGZ1bmN0aW9uKGUpezA9PT1lLmluZGV4T2YoImN1cnNvci0iKSYmdC5jbGFzc2VkKGUsITEpfSkpLGUmJnQuY2xhc3NlZCgiY3Vyc29yLSIrZSwhMCl9fSx7fV0sNzk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSxpPWZ1bmN0aW9uKCl7fTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpImZ1bmN0aW9uIj09dHlwZW9mIHRbZV0mJih0W2VdPWkpO3QuZGVzdHJveT1mdW5jdGlvbigpe3QuY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodC5jb250YWluZXIpfTt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLmNsYXNzTmFtZT0ibm8td2ViZ2wiLHIuc3R5bGUuY3Vyc29yPSJwb2ludGVyIixyLnN0eWxlLmZvbnRTaXplPSIyNHB4IixyLnN0eWxlLmNvbG9yPW4uZGVmYXVsdHNbMF0sci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHIuc3R5bGUubGVmdD1yLnN0eWxlLnRvcD0iMHB4IixyLnN0eWxlLndpZHRoPXIuc3R5bGUuaGVpZ2h0PSIxMDAlIixyLnN0eWxlWyJiYWNrZ3JvdW5kLWNvbG9yIl09bi5saWdodExpbmUsci5zdHlsZVsiei1pbmRleCJdPTMwO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTtyZXR1cm4gYS50ZXh0Q29udGVudD0iV2ViR0wgaXMgbm90IHN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIgLSB2aXNpdCBodHRwczovL2dldC53ZWJnbC5vcmcgZm9yIG1vcmUgaW5mbyIsYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGEuc3R5bGUudG9wPSI1MCUiLGEuc3R5bGUubGVmdD0iNTAlIixhLnN0eWxlLmhlaWdodD0iMzAlIixhLnN0eWxlLndpZHRoPSI1MCUiLGEuc3R5bGUubWFyZ2luPSItMTUlIDAgMCAtMjUlIixyLmFwcGVuZENoaWxkKGEpLHQuY29udGFpbmVyLmFwcGVuZENoaWxkKHIpLHQuY29udGFpbmVyLnN0eWxlLmJhY2tncm91bmQ9IiNGRkZGRkYiLHQuY29udGFpbmVyLm9uY2xpY2s9ZnVuY3Rpb24oKXt3aW5kb3cub3BlbigiaHR0cHM6Ly9nZXQud2ViZ2wub3JnIil9LCExfX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo2Mzl9XSw3OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5zb3J0KCl9fSx7fV0sODAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuL2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheTtyLmFnZ051bXM9ZnVuY3Rpb24odCxlLGEsbyl7dmFyIHMsbDtpZigoIW98fG8+YS5sZW5ndGgpJiYobz1hLmxlbmd0aCksbihlKXx8KGU9ITEpLGkoYVswXSkpe2ZvcihsPW5ldyBBcnJheShvKSxzPTA7czxvO3MrKylsW3NdPXIuYWdnTnVtcyh0LGUsYVtzXSk7YT1sfWZvcihzPTA7czxvO3MrKyluKGUpP24oYVtzXSkmJihlPXQoK2UsK2Fbc10pKTplPWFbc107cmV0dXJuIGV9LHIubGVuPWZ1bmN0aW9uKHQpe3JldHVybiByLmFnZ051bXMoKGZ1bmN0aW9uKHQpe3JldHVybiB0KzF9KSwwLHQpfSxyLm1lYW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8KGU9ci5sZW4odCkpLHIuYWdnTnVtcygoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSksMCx0KS9lfSxyLm1pZFJhbmdlPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQmJjAhPT10Lmxlbmd0aClyZXR1cm4oci5hZ2dOdW1zKE1hdGgubWF4LG51bGwsdCkrci5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCkpLzJ9LHIudmFyaWFuY2U9ZnVuY3Rpb24odCxlLGkpe3JldHVybiBlfHwoZT1yLmxlbih0KSksbihpKXx8KGk9ci5tZWFuKHQsZSkpLHIuYWdnTnVtcygoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtNYXRoLnBvdyhlLWksMil9KSwwLHQpL2V9LHIuc3RkZXY9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLnNxcnQoci52YXJpYW5jZSh0LGUsbikpfSxyLm1lZGlhbj1mdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKCkuc29ydCgpO3JldHVybiByLmludGVycChlLC41KX0sci5pbnRlcnA9ZnVuY3Rpb24odCxlKXtpZighbihlKSl0aHJvdyJuIHNob3VsZCBiZSBhIGZpbml0ZSBudW1iZXIiO2lmKChlPWUqdC5sZW5ndGgtLjUpPDApcmV0dXJuIHRbMF07aWYoZT50Lmxlbmd0aC0xKXJldHVybiB0W3QubGVuZ3RoLTFdO3ZhciByPWUlMTtyZXR1cm4gcip0W01hdGguY2VpbChlKV0rKDEtcikqdFtNYXRoLmZsb29yKGUpXX19LHsiLi9hcnJheSI6NzU4LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sODAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLW5vcm1hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD9uKHQpOlswLDAsMCwxXX19LHsiY29sb3Itbm9ybWFsaXplIjoxMjZ9XSw4MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vbGliIiksYT1pLnN0clRyYW5zbGF0ZSxvPXQoIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIikscz10KCIuLi9jb25zdGFudHMvYWxpZ25tZW50IikuTElORV9TUEFDSU5HO2Z1bmN0aW9uIGwodCxlKXtyZXR1cm4gdC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZV19dmFyIGM9LyhbXiRdKikoWyRdK1teJF0qWyRdKykoW14kXSopLztyLmNvbnZlcnRUb1RzcGFucz1mdW5jdGlvbih0LGUsbSl7dmFyIE09dC50ZXh0KCksUz0hdC5hdHRyKCJkYXRhLW5vdGV4IikmJiJ1bmRlZmluZWQiIT10eXBlb2YgTWF0aEpheCYmTS5tYXRjaChjKSxDPW4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpO2lmKCFDLmVtcHR5KCkpe3ZhciBQPXQuYXR0cigiY2xhc3MiKT90LmF0dHIoImNsYXNzIikuc3BsaXQoIiAiKVswXToidGV4dCI7cmV0dXJuIFArPSItbWF0aCIsQy5zZWxlY3RBbGwoInN2Zy4iK1ApLnJlbW92ZSgpLEMuc2VsZWN0QWxsKCJnLiIrUCsiLWdyb3VwIikucmVtb3ZlKCksdC5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cih7ImRhdGEtdW5mb3JtYXR0ZWQiOk0sImRhdGEtbWF0aCI6Ik4ifSksUz8oZSYmZS5fcHJvbWlzZXN8fFtdKS5wdXNoKG5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt0LnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpO3ZhciByPXBhcnNlSW50KHQubm9kZSgpLnN0eWxlLmZvbnRTaXplLDEwKSxvPXtmb250U2l6ZTpyfTshZnVuY3Rpb24odCxlLHIpe3ZhciBhLG8scyxsO01hdGhKYXguSHViLlF1ZXVlKChmdW5jdGlvbigpe3JldHVybiBvPWkuZXh0ZW5kRGVlcEFsbCh7fSxNYXRoSmF4Lkh1Yi5jb25maWcpLHM9TWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheSx2b2lkIDAhPT1NYXRoSmF4Lkh1Yi5wcm9jZXNzU2VjdGlvbkRlbGF5JiYoTWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheT0wKSxNYXRoSmF4Lkh1Yi5Db25maWcoe21lc3NhZ2VTdHlsZToibm9uZSIsdGV4MmpheDp7aW5saW5lTWF0aDpbWyIkIiwiJCJdLFsiXFwoIiwiXFwpIl1dfSxkaXNwbGF5QWxpZ246ImxlZnQifSl9KSwoZnVuY3Rpb24oKXtpZigiU1ZHIiE9PShhPU1hdGhKYXguSHViLmNvbmZpZy5tZW51U2V0dGluZ3MucmVuZGVyZXIpKXJldHVybiBNYXRoSmF4Lkh1Yi5zZXRSZW5kZXJlcigiU1ZHIil9KSwoZnVuY3Rpb24oKXt2YXIgcj0ibWF0aC1vdXRwdXQtIitpLnJhbmRzdHIoe30sNjQpO3JldHVybiBsPW4uc2VsZWN0KCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKHtpZDpyfSkuc3R5bGUoe3Zpc2liaWxpdHk6ImhpZGRlbiIscG9zaXRpb246ImFic29sdXRlIn0pLnN0eWxlKHsiZm9udC1zaXplIjplLmZvbnRTaXplKyJweCJ9KS50ZXh0KHQucmVwbGFjZSh1LCJcXGx0ICIpLnJlcGxhY2UoZiwiXFxndCAiKSksTWF0aEpheC5IdWIuVHlwZXNldChsLm5vZGUoKSl9KSwoZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCgiYm9keSIpLnNlbGVjdCgiI01hdGhKYXhfU1ZHX2dseXBocyIpO2lmKGwuc2VsZWN0KCIuTWF0aEpheF9TVkciKS5lbXB0eSgpfHwhbC5zZWxlY3QoInN2ZyIpLm5vZGUoKSlpLmxvZygiVGhlcmUgd2FzIGFuIGVycm9yIGluIHRoZSB0ZXggc3ludGF4LiIsdCkscigpO2Vsc2V7dmFyIG89bC5zZWxlY3QoInN2ZyIpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyKGwuc2VsZWN0KCIuTWF0aEpheF9TVkciKSxlLG8pfWlmKGwucmVtb3ZlKCksIlNWRyIhPT1hKXJldHVybiBNYXRoSmF4Lkh1Yi5zZXRSZW5kZXJlcihhKX0pLChmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT1zJiYoTWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheT1zKSxNYXRoSmF4Lkh1Yi5Db25maWcobyl9KSl9KFNbMl0sbywoZnVuY3Rpb24obixpLG8pe0Muc2VsZWN0QWxsKCJzdmcuIitQKS5yZW1vdmUoKSxDLnNlbGVjdEFsbCgiZy4iK1ArIi1ncm91cCIpLnJlbW92ZSgpO3ZhciBzPW4mJm4uc2VsZWN0KCJzdmciKTtpZighc3x8IXMubm9kZSgpKXJldHVybiBJKCksdm9pZCBlKCk7dmFyIGM9Qy5hcHBlbmQoImciKS5jbGFzc2VkKFArIi1ncm91cCIsITApLmF0dHIoeyJwb2ludGVyLWV2ZW50cyI6Im5vbmUiLCJkYXRhLXVuZm9ybWF0dGVkIjpNLCJkYXRhLW1hdGgiOiJZIn0pO2Mubm9kZSgpLmFwcGVuZENoaWxkKHMubm9kZSgpKSxpJiZpLm5vZGUoKSYmcy5ub2RlKCkuaW5zZXJ0QmVmb3JlKGkubm9kZSgpLmNsb25lTm9kZSghMCkscy5ub2RlKCkuZmlyc3RDaGlsZCkscy5hdHRyKHtjbGFzczpQLGhlaWdodDpvLmhlaWdodCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWluWU1pbiBtZWV0In0pLnN0eWxlKHtvdmVyZmxvdzoidmlzaWJsZSIsInBvaW50ZXItZXZlbnRzIjoibm9uZSJ9KTt2YXIgdT10Lm5vZGUoKS5zdHlsZS5maWxsfHwiYmxhY2siLGY9cy5zZWxlY3QoImciKTtmLmF0dHIoe2ZpbGw6dSxzdHJva2U6dX0pO3ZhciBoPWwoZiwid2lkdGgiKSxwPWwoZiwiaGVpZ2h0IiksZD0rdC5hdHRyKCJ4IiktaCp7c3RhcnQ6MCxtaWRkbGU6LjUsZW5kOjF9W3QuYXR0cigidGV4dC1hbmNob3IiKXx8InN0YXJ0Il0sZz0tKHJ8fGwodCwiaGVpZ2h0IikpLzQ7InkiPT09UFswXT8oYy5hdHRyKHt0cmFuc2Zvcm06InJvdGF0ZSgiK1stOTAsK3QuYXR0cigieCIpLCt0LmF0dHIoInkiKV0rIikiK2EoLWgvMixnLXAvMil9KSxzLmF0dHIoe3g6K3QuYXR0cigieCIpLHk6K3QuYXR0cigieSIpfSkpOiJsIj09PVBbMF0/cy5hdHRyKHt4OnQuYXR0cigieCIpLHk6Zy1wLzJ9KToiYSI9PT1QWzBdJiYwIT09UC5pbmRleE9mKCJhdGl0bGUiKT9zLmF0dHIoe3g6MCx5Omd9KTpzLmF0dHIoe3g6ZCx5Oit0LmF0dHIoInkiKStnLXAvMn0pLG0mJm0uY2FsbCh0LGMpLGUoYyl9KSl9KSkpOkkoKSx0fWZ1bmN0aW9uIEkoKXtDLmVtcHR5KCl8fChQPXQuYXR0cigiY2xhc3MiKSsiLW1hdGgiLEMuc2VsZWN0KCJzdmcuIitQKS5yZW1vdmUoKSksdC50ZXh0KCIiKS5zdHlsZSgid2hpdGUtc3BhY2UiLCJwcmUiKSxmdW5jdGlvbih0LGUpe2U9ZS5yZXBsYWNlKGcsIiAiKTt2YXIgcixhPSExLGw9W10sYz0tMTtmdW5jdGlvbiB1KCl7YysrO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvLnN2ZywidHNwYW4iKTtuLnNlbGVjdChlKS5hdHRyKHtjbGFzczoibGluZSIsZHk6YypzKyJlbSJ9KSx0LmFwcGVuZENoaWxkKGUpLHI9ZTt2YXIgaT1sO2lmKGw9W3tub2RlOmV9XSxpLmxlbmd0aD4xKWZvcih2YXIgYT0xO2E8aS5sZW5ndGg7YSsrKWYoaVthXSl9ZnVuY3Rpb24gZih0KXt2YXIgZSxpPXQudHlwZSxhPXt9O2lmKCJhIj09PWkpe2U9ImEiO3ZhciBzPXQudGFyZ2V0LGM9dC5ocmVmLHU9dC5wb3B1cDtjJiYoYT17InhsaW5rOnhsaW5rOnNob3ciOiJfYmxhbmsiPT09c3x8Il8iIT09cy5jaGFyQXQoMCk/Im5ldyI6InJlcGxhY2UiLHRhcmdldDpzLCJ4bGluazp4bGluazpocmVmIjpjfSx1JiYoYS5vbmNsaWNrPSd3aW5kb3cub3Blbih0aGlzLmhyZWYuYmFzZVZhbCx0aGlzLnRhcmdldC5iYXNlVmFsLCInK3UrJyIpO3JldHVybiBmYWxzZTsnKSl9ZWxzZSBlPSJ0c3BhbiI7dC5zdHlsZSYmKGEuc3R5bGU9dC5zdHlsZSk7dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG8uc3ZnLGUpO2lmKCJzdXAiPT09aXx8InN1YiI9PT1pKXttKHIsIlx1MjAwYiIpLHIuYXBwZW5kQ2hpbGQoZik7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG8uc3ZnLCJ0c3BhbiIpO20oaCwiXHUyMDBiIiksbi5zZWxlY3QoaCkuYXR0cigiZHkiLGRbaV0pLGEuZHk9cFtpXSxyLmFwcGVuZENoaWxkKGYpLHIuYXBwZW5kQ2hpbGQoaCl9ZWxzZSByLmFwcGVuZENoaWxkKGYpO24uc2VsZWN0KGYpLmF0dHIoYSkscj10Lm5vZGU9ZixsLnB1c2godCl9ZnVuY3Rpb24gbSh0LGUpe3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpfWZ1bmN0aW9uIE0odCl7aWYoMSE9PWwubGVuZ3RoKXt2YXIgbj1sLnBvcCgpO3QhPT1uLnR5cGUmJmkubG9nKCJTdGFydCB0YWcgPCIrbi50eXBlKyI+IGRvZXNudCBtYXRjaCBlbmQgdGFnIDwiK3QrIj4uIFByZXRlbmRpbmcgaXQgZGlkIG1hdGNoLiIsZSkscj1sW2wubGVuZ3RoLTFdLm5vZGV9ZWxzZSBpLmxvZygiSWdub3JpbmcgdW5leHBlY3RlZCBlbmQgdGFnIDwvIit0KyI+LiIsZSl9eC50ZXN0KGUpP3UoKToocj10LGw9W3tub2RlOnR9XSk7Zm9yKHZhciBTPWUuc3BsaXQodiksQz0wO0M8Uy5sZW5ndGg7QysrKXt2YXIgUD1TW0NdLEk9UC5tYXRjaCh5KSxPPUkmJklbMl0udG9Mb3dlckNhc2UoKSx6PWhbT107aWYoImJyIj09PU8pdSgpO2Vsc2UgaWYodm9pZCAwPT09eiltKHIsRShQKSk7ZWxzZSBpZihJWzFdKU0oTyk7ZWxzZXt2YXIgRD1JWzRdLFI9e3R5cGU6T30sRj1rKEQsYik7aWYoRj8oRj1GLnJlcGxhY2UoQSwiJDEgZmlsbDoiKSx6JiYoRis9IjsiK3opKTp6JiYoRj16KSxGJiYoUi5zdHlsZT1GKSwiYSI9PT1PKXthPSEwO3ZhciBCPWsoRCxfKTtpZihCKXt2YXIgTj1MKEIpO04mJihSLmhyZWY9TixSLnRhcmdldD1rKEQsdyl8fCJfYmxhbmsiLFIucG9wdXA9ayhELFQpKX19ZihSKX19cmV0dXJuIGF9KHQubm9kZSgpLE0pJiZ0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLHIucG9zaXRpb25UZXh0KHQpLG0mJm0uY2FsbCh0KX19O3ZhciB1PS8oPHwmbHQ7fCYjNjA7KS9nLGY9Lyg+fCZndDt8JiM2MjspL2c7dmFyIGg9e3N1cDoiZm9udC1zaXplOjcwJSIsc3ViOiJmb250LXNpemU6NzAlIixiOiJmb250LXdlaWdodDpib2xkIixpOiJmb250LXN0eWxlOml0YWxpYyIsYToiY3Vyc29yOnBvaW50ZXIiLHNwYW46IiIsZW06ImZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGQifSxwPXtzdWI6IjAuM2VtIixzdXA6Ii0wLjZlbSJ9LGQ9e3N1YjoiLTAuMjFlbSIsc3VwOiIwLjQyZW0ifSxtPVsiaHR0cDoiLCJodHRwczoiLCJtYWlsdG86IiwiIix2b2lkIDAsIjoiXSxnPXIuTkVXTElORVM9LyhcclxuP3xcbikvZyx2PS8oPFtePD5dKj4pLyx5PS88KFwvPykoW14gPl0qKShccysoLiopKT8+L2kseD0vPGJyKFxzKy4qKT8+L2k7ci5CUl9UQUdfQUxMPS88YnIoXHMrLiopPz4vZ2k7dmFyIGI9LyhefFtccyInXSlzdHlsZVxzKj1ccyooIihbXiJdKik7PyJ8JyhbXiddKik7PycpL2ksXz0vKF58W1xzIiddKWhyZWZccyo9XHMqKCIoW14iXSopInwnKFteJ10qKScpL2ksdz0vKF58W1xzIiddKXRhcmdldFxzKj1ccyooIihbXiJcc10qKSJ8JyhbXidcc10qKScpL2ksVD0vKF58W1xzIiddKXBvcHVwXHMqPVxzKigiKFtcdz0sXSopInwnKFtcdz0sXSopJykvaTtmdW5jdGlvbiBrKHQsZSl7aWYoIXQpcmV0dXJuIG51bGw7dmFyIHI9dC5tYXRjaChlKSxuPXImJihyWzNdfHxyWzRdKTtyZXR1cm4gbiYmRShuKX12YXIgQT0vKF58Oylccypjb2xvcjovO3IucGxhaW5UZXh0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXZvaWQgMCE9PShlPWV8fHt9KS5sZW4mJi0xIT09ZS5sZW4/ZS5sZW46MS8wLG49dm9pZCAwIT09ZS5hbGxvd2VkVGFncz9lLmFsbG93ZWRUYWdzOlsiYnIiXSxpPSIuLi4iLmxlbmd0aCxhPXQuc3BsaXQodiksbz1bXSxzPSIiLGw9MCxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciB1PWFbY10sZj11Lm1hdGNoKHkpLGg9ZiYmZlsyXS50b0xvd2VyQ2FzZSgpO2lmKGgpLTEhPT1uLmluZGV4T2YoaCkmJihvLnB1c2godSkscz1oKTtlbHNle3ZhciBwPXUubGVuZ3RoO2lmKGwrcDxyKW8ucHVzaCh1KSxsKz1wO2Vsc2UgaWYobDxyKXt2YXIgZD1yLWw7cyYmKCJiciIhPT1zfHxkPD1pfHxwPD1pKSYmby5wb3AoKSxyPmk/by5wdXNoKHUuc3Vic3RyKDAsZC1pKSsiLi4uIik6by5wdXNoKHUuc3Vic3RyKDAsZCkpO2JyZWFrfXM9IiJ9fXJldHVybiBvLmpvaW4oIiIpfTt2YXIgTT17bXU6Ilx1MDNiYyIsYW1wOiImIixsdDoiPCIsZ3Q6Ij4iLG5ic3A6Ilx4YTAiLHRpbWVzOiJceGQ3IixwbHVzbW46Ilx4YjEiLGRlZzoiXHhiMCJ9LFM9LyYoI1xkK3wjeFtcZGEtZkEtRl0rfFthLXpdKyk7L2c7ZnVuY3Rpb24gRSh0KXtyZXR1cm4gdC5yZXBsYWNlKFMsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKCIjIj09PWUuY2hhckF0KDApP2Z1bmN0aW9uKHQpe2lmKHQ+MTExNDExMSlyZXR1cm47dmFyIGU9U3RyaW5nLmZyb21Db2RlUG9pbnQ7aWYoZSlyZXR1cm4gZSh0KTt2YXIgcj1TdHJpbmcuZnJvbUNoYXJDb2RlO3JldHVybiB0PD02NTUzNT9yKHQpOnIoNTUyMzIrKHQ+PjEwKSx0JTEwMjQrNTYzMjApfSgieCI9PT1lLmNoYXJBdCgxKT9wYXJzZUludChlLnN1YnN0cigyKSwxNik6cGFyc2VJbnQoZS5zdWJzdHIoMSksMTApKTpNW2VdKXx8dH0pKX1mdW5jdGlvbiBMKHQpe3ZhciBlPWVuY29kZVVSSShkZWNvZGVVUkkodCkpLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3IuaHJlZj10LG4uaHJlZj1lO3ZhciBpPXIucHJvdG9jb2wsYT1uLnByb3RvY29sO3JldHVybi0xIT09bS5pbmRleE9mKGkpJiYtMSE9PW0uaW5kZXhPZihhKT9lOiIifWZ1bmN0aW9uIEModCxlLHIpe3ZhciBuLGEsbyxzPXIuaG9yaXpvbnRhbEFsaWduLGw9ci52ZXJ0aWNhbEFsaWdufHwidG9wIixjPXQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHU9ZS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGE9ImJvdHRvbSI9PT1sP2Z1bmN0aW9uKCl7cmV0dXJuIGMuYm90dG9tLW4uaGVpZ2h0fToibWlkZGxlIj09PWw/ZnVuY3Rpb24oKXtyZXR1cm4gYy50b3ArKGMuaGVpZ2h0LW4uaGVpZ2h0KS8yfTpmdW5jdGlvbigpe3JldHVybiBjLnRvcH0sbz0icmlnaHQiPT09cz9mdW5jdGlvbigpe3JldHVybiBjLnJpZ2h0LW4ud2lkdGh9OiJjZW50ZXIiPT09cz9mdW5jdGlvbigpe3JldHVybiBjLmxlZnQrKGMud2lkdGgtbi53aWR0aCkvMn06ZnVuY3Rpb24oKXtyZXR1cm4gYy5sZWZ0fSxmdW5jdGlvbigpe249dGhpcy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmFyIHQ9bygpLXUubGVmdCxlPWEoKS11LnRvcCxzPXIuZ2R8fHt9O2lmKHIuZ2Qpe3MuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKHMpO3ZhciBsPWkuYXBwbHkzRFRyYW5zZm9ybShzLl9mdWxsTGF5b3V0Ll9pbnZUcmFuc2Zvcm0pKHQsZSk7dD1sWzBdLGU9bFsxXX1yZXR1cm4gdGhpcy5zdHlsZSh7dG9wOmUrInB4IixsZWZ0OnQrInB4Iiwiei1pbmRleCI6MWUzfSksdGhpc319ci5jb252ZXJ0RW50aXRpZXM9RSxyLnNhbml0aXplSFRNTD1mdW5jdGlvbih0KXt0PXQucmVwbGFjZShnLCIgIik7Zm9yKHZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKSxyPWUsaT1bXSxhPXQuc3BsaXQodiksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dLGw9cy5tYXRjaCh5KSxjPWwmJmxbMl0udG9Mb3dlckNhc2UoKTtpZihjIGluIGgpaWYobFsxXSlpLmxlbmd0aCYmKHI9aS5wb3AoKSk7ZWxzZXt2YXIgdT1sWzRdLGY9ayh1LGIpLHA9Zj97c3R5bGU6Zn06e307aWYoImEiPT09Yyl7dmFyIGQ9ayh1LF8pO2lmKGQpe3ZhciBtPUwoZCk7aWYobSl7cC5ocmVmPW07dmFyIHg9ayh1LHcpO3gmJihwLnRhcmdldD14KX19fXZhciBUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYyk7ci5hcHBlbmRDaGlsZChUKSxuLnNlbGVjdChUKS5hdHRyKHApLHI9VCxpLnB1c2goVCl9ZWxzZSByLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKEUocykpKX1yZXR1cm4gZS5pbm5lckhUTUx9LHIubGluZUNvdW50PWZ1bmN0aW9uKHQpe3JldHVybiB0LnNlbGVjdEFsbCgidHNwYW4ubGluZSIpLnNpemUoKXx8MX0sci5wb3NpdGlvblRleHQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7ZnVuY3Rpb24gaShlLHIpe3JldHVybiB2b2lkIDA9PT1yP251bGw9PT0ocj10LmF0dHIoZSkpJiYodC5hdHRyKGUsMCkscj0wKTp0LmF0dHIoZSxyKSxyfXZhciBhPWkoIngiLGUpLG89aSgieSIscik7InRleHQiPT09dGhpcy5ub2RlTmFtZSYmdC5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5hdHRyKHt4OmEseTpvfSl9KSl9O3IubWFrZVRleHRTaGFkb3c9ZnVuY3Rpb24odCl7dmFyIGU9IjFweCAiLHI9IjFweCAiLG49IjFweCAiO3JldHVybiBlK3Irbit0KyIsIC0iK2UrIi0iK3Irbit0KyIsICIrZSsiLSIrcituK3QrIiwgLSIrZStyK24rdH0sci5tYWtlRWRpdGFibGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmdkLGk9ZS5kZWxlZ2F0ZSxhPW4uZGlzcGF0Y2goImVkaXQiLCJpbnB1dCIsImNhbmNlbCIpLG89aXx8dDtpZih0LnN0eWxlKHsicG9pbnRlci1ldmVudHMiOmk/Im5vbmUiOiJhbGwifSksMSE9PXQuc2l6ZSgpKXRocm93IG5ldyBFcnJvcigiYm9vIik7ZnVuY3Rpb24gcygpeyFmdW5jdGlvbigpe3ZhciBpPW4uc2VsZWN0KHIpLnNlbGVjdCgiLnN2Zy1jb250YWluZXIiKSxvPWkuYXBwZW5kKCJkaXYiKSxzPXQubm9kZSgpLnN0eWxlLGM9cGFyc2VGbG9hdChzLmZvbnRTaXplfHwxMiksdT1lLnRleHQ7dm9pZCAwPT09dSYmKHU9dC5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIikpO28uY2xhc3NlZCgicGx1Z2luLWVkaXRhYmxlIGVkaXRhYmxlIiwhMCkuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsImZvbnQtZmFtaWx5IjpzLmZvbnRGYW1pbHl8fCJBcmlhbCIsImZvbnQtc2l6ZSI6Yyxjb2xvcjplLmZpbGx8fHMuZmlsbHx8ImJsYWNrIixvcGFjaXR5OjEsImJhY2tncm91bmQtY29sb3IiOmUuYmFja2dyb3VuZHx8InRyYW5zcGFyZW50IixvdXRsaW5lOiIjZmZmZmZmMzMgMXB4IHNvbGlkIixtYXJnaW46Wy1jLzgrMSwwLDAsLTFdLmpvaW4oInB4ICIpKyJweCIscGFkZGluZzoiMCIsImJveC1zaXppbmciOiJib3JkZXItYm94In0pLmF0dHIoe2NvbnRlbnRlZGl0YWJsZTohMH0pLnRleHQodSkuY2FsbChDKHQsaSxlKSkub24oImJsdXIiLChmdW5jdGlvbigpe3IuX2VkaXRpbmc9ITEsdC50ZXh0KHRoaXMudGV4dENvbnRlbnQpLnN0eWxlKHtvcGFjaXR5OjF9KTt2YXIgZSxpPW4uc2VsZWN0KHRoaXMpLmF0dHIoImNsYXNzIik7KGU9aT8iLiIraS5zcGxpdCgiICIpWzBdKyItbWF0aC1ncm91cCI6IltjbGFzcyo9LW1hdGgtZ3JvdXBdIikmJm4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLnNlbGVjdChlKS5zdHlsZSh7b3BhY2l0eTowfSk7dmFyIG89dGhpcy50ZXh0Q29udGVudDtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkucmVtb3ZlKCksbi5zZWxlY3QoZG9jdW1lbnQpLm9uKCJtb3VzZXVwIixudWxsKSxhLmVkaXQuY2FsbCh0LG8pfSkpLm9uKCJmb2N1cyIsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyLl9lZGl0aW5nPSEwLG4uc2VsZWN0KGRvY3VtZW50KS5vbigibW91c2V1cCIsKGZ1bmN0aW9uKCl7aWYobi5ldmVudC50YXJnZXQ9PT10KXJldHVybiExO2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1vLm5vZGUoKSYmby5ub2RlKCkuYmx1cigpfSkpfSkpLm9uKCJrZXl1cCIsKGZ1bmN0aW9uKCl7Mjc9PT1uLmV2ZW50LndoaWNoPyhyLl9lZGl0aW5nPSExLHQuc3R5bGUoe29wYWNpdHk6MX0pLG4uc2VsZWN0KHRoaXMpLnN0eWxlKHtvcGFjaXR5OjB9KS5vbigiYmx1ciIsKGZ1bmN0aW9uKCl7cmV0dXJuITF9KSkudHJhbnNpdGlvbigpLnJlbW92ZSgpLGEuY2FuY2VsLmNhbGwodCx0aGlzLnRleHRDb250ZW50KSk6KGEuaW5wdXQuY2FsbCh0LHRoaXMudGV4dENvbnRlbnQpLG4uc2VsZWN0KHRoaXMpLmNhbGwoQyh0LGksZSkpKX0pKS5vbigia2V5ZG93biIsKGZ1bmN0aW9uKCl7MTM9PT1uLmV2ZW50LndoaWNoJiZ0aGlzLmJsdXIoKX0pKS5jYWxsKGwpfSgpLHQuc3R5bGUoe29wYWNpdHk6MH0pO3ZhciBpLHM9by5hdHRyKCJjbGFzcyIpOyhpPXM/Ii4iK3Muc3BsaXQoIiAiKVswXSsiLW1hdGgtZ3JvdXAiOiJbY2xhc3MqPS1tYXRoLWdyb3VwXSIpJiZuLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKS5zZWxlY3QoaSkuc3R5bGUoe29wYWNpdHk6MH0pfWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5ub2RlKCkscj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO3Iuc2VsZWN0Tm9kZUNvbnRlbnRzKGUpO3ZhciBuPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtuLnJlbW92ZUFsbFJhbmdlcygpLG4uYWRkUmFuZ2UociksZS5mb2N1cygpfXJldHVybiBlLmltbWVkaWF0ZT9zKCk6by5vbigiY2xpY2siLHMpLG4ucmViaW5kKHQsYSwib24iKX19LHsiLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzQ0LCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzUzLCIuLi9saWIiOjc3NiwiQHBsb3RseS9kMyI6NTh9XSw4MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307ZnVuY3Rpb24gaSh0KXt0JiZudWxsIT09dC50aW1lciYmKGNsZWFyVGltZW91dCh0LnRpbWVyKSx0LnRpbWVyPW51bGwpfXIudGhyb3R0bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPW5bdF0sbz1EYXRlLm5vdygpO2lmKCFhKXtmb3IodmFyIHMgaW4gbiluW3NdLnRzPG8tNmU0JiZkZWxldGUgbltzXTthPW5bdF09e3RzOjAsdGltZXI6bnVsbH19ZnVuY3Rpb24gbCgpe3IoKSxhLnRzPURhdGUubm93KCksYS5vbkRvbmUmJihhLm9uRG9uZSgpLGEub25Eb25lPW51bGwpfWkoYSksbz5hLnRzK2U/bCgpOmEudGltZXI9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtsKCksYS50aW1lcj1udWxsfSksZSl9LHIuZG9uZT1mdW5jdGlvbih0KXt2YXIgZT1uW3RdO3JldHVybiBlJiZlLnRpbWVyP25ldyBQcm9taXNlKChmdW5jdGlvbih0KXt2YXIgcj1lLm9uRG9uZTtlLm9uRG9uZT1mdW5jdGlvbigpe3ImJnIoKSx0KCksZS5vbkRvbmU9bnVsbH19KSk6UHJvbWlzZS5yZXNvbHZlKCl9LHIuY2xlYXI9ZnVuY3Rpb24odCl7aWYodClpKG5bdF0pLGRlbGV0ZSBuW3RdO2Vsc2UgZm9yKHZhciBlIGluIG4pci5jbGVhcihlKX19LHt9XSw4MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0PjApcmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4xMDt2YXIgcj1NYXRoLmxvZyhNYXRoLm1pbihlWzBdLGVbMV0pKS9NYXRoLkxOMTA7cmV0dXJuIG4ocil8fChyPU1hdGgubG9nKE1hdGgubWF4KGVbMF0sZVsxXSkpL01hdGguTE4xMC02KSxyfX0seyJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sODA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWUuZXhwb3J0cz17fSxpPXQoIi4uL3Bsb3RzL2dlby9jb25zdGFudHMiKS5sb2NhdGlvbm1vZGVUb0xheWVyLGE9dCgidG9wb2pzb24tY2xpZW50IikuZmVhdHVyZTtuLmdldFRvcG9qc29uTmFtZT1mdW5jdGlvbih0KXtyZXR1cm5bdC5zY29wZS5yZXBsYWNlKC8gL2csIi0iKSwiXyIsdC5yZXNvbHV0aW9uLnRvU3RyaW5nKCksIm0iXS5qb2luKCIiKX0sbi5nZXRUb3BvanNvblBhdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlKyIuanNvbiJ9LG4uZ2V0VG9wb2pzb25GZWF0dXJlcz1mdW5jdGlvbih0LGUpe3ZhciByPWlbdC5sb2NhdGlvbm1vZGVdLG49ZS5vYmplY3RzW3JdO3JldHVybiBhKGUsbikuZmVhdHVyZXN9fSx7Ii4uL3Bsb3RzL2dlby9jb25zdGFudHMiOjg1OCwidG9wb2pzb24tY2xpZW50Ijo1NzV9XSw4MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJsb2NhbGUiLG5hbWU6ImVuLVVTIixkaWN0aW9uYXJ5OnsiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZSI6IkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUifSxmb3JtYXQ6e2RhdGU6IiVtLyVkLyVZIn19fSx7fV0sODA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToibG9jYWxlIixuYW1lOiJlbiIsZGljdGlvbmFyeTp7IkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUiOiJDbGljayB0byBlbnRlciBDb2xvdXJzY2FsZSB0aXRsZSJ9LGZvcm1hdDp7ZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF0ZVRpbWU6IiVhICViICVlICVYICVZIixkYXRlOiIlZC8lbS8lWSIsdGltZToiJUg6JU06JVMiLGRlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLHllYXI6IiVZIixtb250aDoiJWIgJVkiLGRheU1vbnRoOiIlYiAlLWQiLGRheU1vbnRoWWVhcjoiJWIgJS1kLCAlWSJ9fX0se31dLDgwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscixpPW4ubGF5b3V0QXJyYXlDb250YWluZXJzLGE9bi5sYXlvdXRBcnJheVJlZ2V4ZXMsbz10LnNwbGl0KCJbIilbMF0scz0wO3M8YS5sZW5ndGg7cysrKWlmKChyPXQubWF0Y2goYVtzXSkpJiYwPT09ci5pbmRleCl7ZT1yWzBdO2JyZWFrfWlmKGV8fChlPWlbaS5pbmRleE9mKG8pXSksIWUpcmV0dXJuITE7dmFyIGw9dC5zdWJzdHIoZS5sZW5ndGgpO3JldHVybiBsPyEhKHI9bC5tYXRjaCgvXlxbKDB8WzEtOV1bMC05XSopXF0oXC4oLispKT8kLykpJiZ7YXJyYXk6ZSxpbmRleDpOdW1iZXIoclsxXSkscHJvcGVydHk6clszXXx8IiJ9OnthcnJheTplLGluZGV4OiIiLHByb3BlcnR5OiIifX19LHsiLi4vcmVnaXN0cnkiOjkwNH1dLDgwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPW4uZXh0ZW5kRmxhdCxhPW4uaXNQbGFpbk9iamVjdCxvPXt2YWxUeXBlOiJmbGFnbGlzdCIsZXh0cmFzOlsibm9uZSJdLGZsYWdzOlsiY2FsYyIsImNsZWFyQXhpc1R5cGVzIiwicGxvdCIsInN0eWxlIiwibWFya2VyU2l6ZSIsImNvbG9yYmFycyJdfSxzPXt2YWxUeXBlOiJmbGFnbGlzdCIsZXh0cmFzOlsibm9uZSJdLGZsYWdzOlsiY2FsYyIsInBsb3QiLCJsZWdlbmQiLCJ0aWNrcyIsImF4cmFuZ2UiLCJsYXlvdXRzdHlsZSIsIm1vZGViYXIiLCJjYW1lcmEiLCJhcnJheWRyYXciLCJjb2xvcmJhcnMiXX0sbD1vLmZsYWdzLnNsaWNlKCkuY29uY2F0KFsiZnVsbFJlcGxvdCJdKSxjPXMuZmxhZ3Muc2xpY2UoKS5jb25jYXQoImxheW91dFJlcGxvdCIpO2Z1bmN0aW9uIHUodCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoO3IrKyllW3Rbcl1dPSExO3JldHVybiBlfWZ1bmN0aW9uIGYodCxlLHIpe3ZhciBuPWkoe30sdCk7Zm9yKHZhciBvIGluIG4pe3ZhciBzPW5bb107YShzKSYmKG5bb109aChzLGUscixvKSl9cmV0dXJuImZyb20tcm9vdCI9PT1yJiYobi5lZGl0VHlwZT1lKSxufWZ1bmN0aW9uIGgodCxlLHIsbil7aWYodC52YWxUeXBlKXt2YXIgYT1pKHt9LHQpO2lmKGEuZWRpdFR5cGU9ZSxBcnJheS5pc0FycmF5KHQuaXRlbXMpKXthLml0ZW1zPW5ldyBBcnJheSh0Lml0ZW1zLmxlbmd0aCk7Zm9yKHZhciBvPTA7bzx0Lml0ZW1zLmxlbmd0aDtvKyspYS5pdGVtc1tvXT1oKHQuaXRlbXNbb10sZSwiZnJvbS1yb290Iil9cmV0dXJuIGF9cmV0dXJuIGYodCxlLCJfIj09PW4uY2hhckF0KDApPyJuZXN0ZWQiOiJmcm9tLXJvb3QiKX1lLmV4cG9ydHM9e3RyYWNlczpvLGxheW91dDpzLHRyYWNlRmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShsKX0sbGF5b3V0RmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShjKX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5lZGl0VHlwZTtpZihyJiYibm9uZSIhPT1yKWZvcih2YXIgbj1yLnNwbGl0KCIrIiksaT0wO2k8bi5sZW5ndGg7aSsrKXRbbltpXV09ITB9LG92ZXJyaWRlQWxsOmZ9fSx7Ii4uL2xpYiI6Nzc2fV0sODEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJnbC1tYXQ0L2Zyb21RdWF0IiksYT10KCIuLi9yZWdpc3RyeSIpLG89dCgiLi4vbGliIikscz10KCIuLi9wbG90cy9wbG90cyIpLGw9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksYz10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksdT1sLmNsZWFuSWQsZj1sLmdldEZyb21UcmFjZSxoPWEudHJhY2VJcztmdW5jdGlvbiBwKHQsZSl7dmFyIHI9dFtlXSxuPWUuY2hhckF0KDApO3ImJiJwYXBlciIhPT1yJiYodFtlXT11KHIsbiwhMCkpfWZ1bmN0aW9uIGQodCl7ZnVuY3Rpb24gZShlLHIpe3ZhciBuPXRbZV0saT10LnRpdGxlJiZ0LnRpdGxlW3JdO24mJiFpJiYodC50aXRsZXx8KHQudGl0bGU9e30pLHQudGl0bGVbcl09dFtlXSxkZWxldGUgdFtlXSl9dCYmKCJzdHJpbmciIT10eXBlb2YgdC50aXRsZSYmIm51bWJlciIhPXR5cGVvZiB0LnRpdGxlfHwodC50aXRsZT17dGV4dDp0LnRpdGxlfSksZSgidGl0bGVmb250IiwiZm9udCIpLGUoInRpdGxlcG9zaXRpb24iLCJwb3NpdGlvbiIpLGUoInRpdGxlc2lkZSIsInNpZGUiKSxlKCJ0aXRsZW9mZnNldCIsIm9mZnNldCIpKX1mdW5jdGlvbiBtKHQpe2lmKCFvLmlzUGxhaW5PYmplY3QodCkpcmV0dXJuITE7dmFyIGU9dC5uYW1lO3JldHVybiBkZWxldGUgdC5uYW1lLGRlbGV0ZSB0LnNob3dsZWdlbmQsKCJzdHJpbmciPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlKSYmU3RyaW5nKGUpfWZ1bmN0aW9uIGcodCxlLHIsbil7aWYociYmIW4pcmV0dXJuIHQ7aWYobiYmIXIpcmV0dXJuIGU7aWYoIXQudHJpbSgpKXJldHVybiBlO2lmKCFlLnRyaW0oKSlyZXR1cm4gdDt2YXIgaSxhPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTtmb3IoaT0wO2k8YSYmdC5jaGFyQXQoaSk9PT1lLmNoYXJBdChpKTtpKyspO3JldHVybiB0LnN1YnN0cigwLGkpLnRyaW0oKX1mdW5jdGlvbiB2KHQpe3ZhciBlPSJtaWRkbGUiLHI9ImNlbnRlciI7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYoLTEhPT10LmluZGV4T2YoInRvcCIpP2U9InRvcCI6LTEhPT10LmluZGV4T2YoImJvdHRvbSIpJiYoZT0iYm90dG9tIiksLTEhPT10LmluZGV4T2YoImxlZnQiKT9yPSJsZWZ0IjotMSE9PXQuaW5kZXhPZigicmlnaHQiKSYmKHI9InJpZ2h0IikpLGUrIiAiK3J9ZnVuY3Rpb24geSh0LGUpe3JldHVybiBlIGluIHQmJiJvYmplY3QiPT10eXBlb2YgdFtlXSYmMD09PU9iamVjdC5rZXlzKHRbZV0pLmxlbmd0aH1yLmNsZWFyUHJvbWlzZVF1ZXVlPWZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkodC5fcHJvbWlzZXMpJiZ0Ll9wcm9taXNlcy5sZW5ndGg+MCYmby5sb2coIkNsZWFyaW5nIHByZXZpb3VzIHJlamVjdGVkIHByb21pc2VzIGZyb20gcXVldWUuIiksdC5fcHJvbWlzZXM9W119LHIuY2xlYW5MYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGUsbjt0fHwodD17fSksdC54YXhpczEmJih0LnhheGlzfHwodC54YXhpcz10LnhheGlzMSksZGVsZXRlIHQueGF4aXMxKSx0LnlheGlzMSYmKHQueWF4aXN8fCh0LnlheGlzPXQueWF4aXMxKSxkZWxldGUgdC55YXhpczEpLHQuc2NlbmUxJiYodC5zY2VuZXx8KHQuc2NlbmU9dC5zY2VuZTEpLGRlbGV0ZSB0LnNjZW5lMSk7dmFyIGE9KHMuc3VicGxvdHNSZWdpc3RyeS5jYXJ0ZXNpYW58fHt9KS5hdHRyUmVnZXgsbD0ocy5zdWJwbG90c1JlZ2lzdHJ5LnBvbGFyfHx7fSkuYXR0clJlZ2V4LGY9KHMuc3VicGxvdHNSZWdpc3RyeS50ZXJuYXJ5fHx7fSkuYXR0clJlZ2V4LGg9KHMuc3VicGxvdHNSZWdpc3RyeS5nbDNkfHx7fSkuYXR0clJlZ2V4LG09T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPG0ubGVuZ3RoO2UrKyl7dmFyIGc9bVtlXTtpZihhJiZhLnRlc3QoZykpe3ZhciB2PXRbZ107di5hbmNob3ImJiJmcmVlIiE9PXYuYW5jaG9yJiYodi5hbmNob3I9dSh2LmFuY2hvcikpLHYub3ZlcmxheWluZyYmKHYub3ZlcmxheWluZz11KHYub3ZlcmxheWluZykpLHYudHlwZXx8KHYuaXNkYXRlP3YudHlwZT0iZGF0ZSI6di5pc2xvZz92LnR5cGU9ImxvZyI6ITE9PT12LmlzZGF0ZSYmITE9PT12LmlzbG9nJiYodi50eXBlPSJsaW5lYXIiKSksIndpdGh6ZXJvIiE9PXYuYXV0b3JhbmdlJiYidG96ZXJvIiE9PXYuYXV0b3JhbmdlfHwodi5hdXRvcmFuZ2U9ITAsdi5yYW5nZW1vZGU9InRvemVybyIpLGRlbGV0ZSB2LmlzbG9nLGRlbGV0ZSB2LmlzZGF0ZSxkZWxldGUgdi5jYXRlZ29yaWVzLHkodiwiZG9tYWluIikmJmRlbGV0ZSB2LmRvbWFpbix2b2lkIDAhPT12LmF1dG90aWNrJiYodm9pZCAwPT09di50aWNrbW9kZSYmKHYudGlja21vZGU9di5hdXRvdGljaz8iYXV0byI6ImxpbmVhciIpLGRlbGV0ZSB2LmF1dG90aWNrKSxkKHYpfWVsc2UgaWYobCYmbC50ZXN0KGcpKXtkKHRbZ10ucmFkaWFsYXhpcyl9ZWxzZSBpZihmJiZmLnRlc3QoZykpe3ZhciB4PXRbZ107ZCh4LmFheGlzKSxkKHguYmF4aXMpLGQoeC5jYXhpcyl9ZWxzZSBpZihoJiZoLnRlc3QoZykpe3ZhciBiPXRbZ10sXz1iLmNhbWVyYXBvc2l0aW9uO2lmKEFycmF5LmlzQXJyYXkoXykmJjQ9PT1fWzBdLmxlbmd0aCl7dmFyIHc9X1swXSxUPV9bMV0saz1fWzJdLEE9aShbXSx3KSxNPVtdO2ZvcihuPTA7bjwzOysrbilNW25dPVRbbl0raypBWzIrNCpuXTtiLmNhbWVyYT17ZXllOnt4Ok1bMF0seTpNWzFdLHo6TVsyXX0sY2VudGVyOnt4OlRbMF0seTpUWzFdLHo6VFsyXX0sdXA6e3g6MCx5OjAsejoxfX0sZGVsZXRlIGIuY2FtZXJhcG9zaXRpb259ZChiLnhheGlzKSxkKGIueWF4aXMpLGQoYi56YXhpcyl9fXZhciBTPUFycmF5LmlzQXJyYXkodC5hbm5vdGF0aW9ucyk/dC5hbm5vdGF0aW9ucy5sZW5ndGg6MDtmb3IoZT0wO2U8UztlKyspe3ZhciBFPXQuYW5ub3RhdGlvbnNbZV07by5pc1BsYWluT2JqZWN0KEUpJiYoRS5yZWYmJigicGFwZXIiPT09RS5yZWY/KEUueHJlZj0icGFwZXIiLEUueXJlZj0icGFwZXIiKToiZGF0YSI9PT1FLnJlZiYmKEUueHJlZj0ieCIsRS55cmVmPSJ5IiksZGVsZXRlIEUucmVmKSxwKEUsInhyZWYiKSxwKEUsInlyZWYiKSl9dmFyIEw9QXJyYXkuaXNBcnJheSh0LnNoYXBlcyk/dC5zaGFwZXMubGVuZ3RoOjA7Zm9yKGU9MDtlPEw7ZSsrKXt2YXIgQz10LnNoYXBlc1tlXTtvLmlzUGxhaW5PYmplY3QoQykmJihwKEMsInhyZWYiKSxwKEMsInlyZWYiKSl9dmFyIFA9QXJyYXkuaXNBcnJheSh0LmltYWdlcyk/dC5pbWFnZXMubGVuZ3RoOjA7Zm9yKGU9MDtlPFA7ZSsrKXt2YXIgST10LmltYWdlc1tlXTtvLmlzUGxhaW5PYmplY3QoSSkmJihwKEksInhyZWYiKSxwKEksInlyZWYiKSl9dmFyIE89dC5sZWdlbmQ7cmV0dXJuIE8mJihPLng+Mz8oTy54PTEuMDIsTy54YW5jaG9yPSJsZWZ0Iik6Ty54PC0yJiYoTy54PS0uMDIsTy54YW5jaG9yPSJyaWdodCIpLE8ueT4zPyhPLnk9MS4wMixPLnlhbmNob3I9ImJvdHRvbSIpOk8ueTwtMiYmKE8ueT0tLjAyLE8ueWFuY2hvcj0idG9wIikpLGQodCksInJvdGF0ZSI9PT10LmRyYWdtb2RlJiYodC5kcmFnbW9kZT0ib3JiaXQiKSxjLmNsZWFuKHQpLHQudGVtcGxhdGUmJnQudGVtcGxhdGUubGF5b3V0JiZyLmNsZWFuTGF5b3V0KHQudGVtcGxhdGUubGF5b3V0KSx0fSxyLmNsZWFuRGF0YT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG4saT10W2VdO2lmKCJoaXN0b2dyYW15Ij09PWkudHlwZSYmInhiaW5zImluIGkmJiEoInliaW5zImluIGkpJiYoaS55Ymlucz1pLnhiaW5zLGRlbGV0ZSBpLnhiaW5zKSxpLmVycm9yX3kmJiJvcGFjaXR5ImluIGkuZXJyb3JfeSl7dmFyIGw9Yy5kZWZhdWx0cyxmPWkuZXJyb3JfeS5jb2xvcnx8KGgoaSwiYmFyIik/Yy5kZWZhdWx0TGluZTpsW2UlbC5sZW5ndGhdKTtpLmVycm9yX3kuY29sb3I9Yy5hZGRPcGFjaXR5KGMucmdiKGYpLGMub3BhY2l0eShmKSppLmVycm9yX3kub3BhY2l0eSksZGVsZXRlIGkuZXJyb3JfeS5vcGFjaXR5fWlmKCJiYXJkaXIiaW4gaSYmKCJoIiE9PWkuYmFyZGlyfHwhaChpLCJiYXIiKSYmImhpc3RvZ3JhbSIhPT1pLnR5cGUuc3Vic3RyKDAsOSl8fChpLm9yaWVudGF0aW9uPSJoIixyLnN3YXBYWURhdGEoaSkpLGRlbGV0ZSBpLmJhcmRpciksImhpc3RvZ3JhbXkiPT09aS50eXBlJiZyLnN3YXBYWURhdGEoaSksImhpc3RvZ3JhbXgiIT09aS50eXBlJiYiaGlzdG9ncmFteSIhPT1pLnR5cGV8fChpLnR5cGU9Imhpc3RvZ3JhbSIpLCJzY2wiaW4gaSYmISgiY29sb3JzY2FsZSJpbiBpKSYmKGkuY29sb3JzY2FsZT1pLnNjbCxkZWxldGUgaS5zY2wpLCJyZXZlcnNlc2NsImluIGkmJiEoInJldmVyc2VzY2FsZSJpbiBpKSYmKGkucmV2ZXJzZXNjYWxlPWkucmV2ZXJzZXNjbCxkZWxldGUgaS5yZXZlcnNlc2NsKSxpLnhheGlzJiYoaS54YXhpcz11KGkueGF4aXMsIngiKSksaS55YXhpcyYmKGkueWF4aXM9dShpLnlheGlzLCJ5IikpLGgoaSwiZ2wzZCIpJiZpLnNjZW5lJiYoaS5zY2VuZT1zLnN1YnBsb3RzUmVnaXN0cnkuZ2wzZC5jbGVhbklkKGkuc2NlbmUpKSwhaChpLCJwaWUtbGlrZSIpJiYhaChpLCJiYXItbGlrZSIpKWlmKEFycmF5LmlzQXJyYXkoaS50ZXh0cG9zaXRpb24pKWZvcihuPTA7bjxpLnRleHRwb3NpdGlvbi5sZW5ndGg7bisrKWkudGV4dHBvc2l0aW9uW25dPXYoaS50ZXh0cG9zaXRpb25bbl0pO2Vsc2UgaS50ZXh0cG9zaXRpb24mJihpLnRleHRwb3NpdGlvbj12KGkudGV4dHBvc2l0aW9uKSk7dmFyIHA9YS5nZXRNb2R1bGUoaSk7aWYocCYmcC5jb2xvcmJhcil7dmFyIHg9cC5jb2xvcmJhci5jb250YWluZXIsYj14P2lbeF06aTtiJiZiLmNvbG9yc2NhbGUmJigiWUlHbkJ1Ij09PWIuY29sb3JzY2FsZSYmKGIuY29sb3JzY2FsZT0iWWxHbkJ1IiksIllJT3JSZCI9PT1iLmNvbG9yc2NhbGUmJihiLmNvbG9yc2NhbGU9IllsT3JSZCIpKX1pZigic3VyZmFjZSI9PT1pLnR5cGUmJm8uaXNQbGFpbk9iamVjdChpLmNvbnRvdXJzKSl7dmFyIF89WyJ4IiwieSIsInoiXTtmb3Iobj0wO248Xy5sZW5ndGg7bisrKXt2YXIgdz1pLmNvbnRvdXJzW19bbl1dO28uaXNQbGFpbk9iamVjdCh3KSYmKHcuaGlnaGxpZ2h0Q29sb3ImJih3LmhpZ2hsaWdodGNvbG9yPXcuaGlnaGxpZ2h0Q29sb3IsZGVsZXRlIHcuaGlnaGxpZ2h0Q29sb3IpLHcuaGlnaGxpZ2h0V2lkdGgmJih3LmhpZ2hsaWdodHdpZHRoPXcuaGlnaGxpZ2h0V2lkdGgsZGVsZXRlIHcuaGlnaGxpZ2h0V2lkdGgpKX19aWYoImNhbmRsZXN0aWNrIj09PWkudHlwZXx8Im9obGMiPT09aS50eXBlKXt2YXIgVD0hMSE9PShpLmluY3JlYXNpbmd8fHt9KS5zaG93bGVnZW5kLGs9ITEhPT0oaS5kZWNyZWFzaW5nfHx7fSkuc2hvd2xlZ2VuZCxBPW0oaS5pbmNyZWFzaW5nKSxNPW0oaS5kZWNyZWFzaW5nKTtpZighMSE9PUEmJiExIT09TSl7dmFyIFM9ZyhBLE0sVCxrKTtTJiYoaS5uYW1lPVMpfWVsc2UhQSYmIU18fGkubmFtZXx8KGkubmFtZT1BfHxNKX1pZihBcnJheS5pc0FycmF5KGkudHJhbnNmb3Jtcykpe3ZhciBFPWkudHJhbnNmb3Jtcztmb3Iobj0wO248RS5sZW5ndGg7bisrKXt2YXIgTD1FW25dO2lmKG8uaXNQbGFpbk9iamVjdChMKSlzd2l0Y2goTC50eXBlKXtjYXNlImZpbHRlciI6TC5maWx0ZXJzcmMmJihMLnRhcmdldD1MLmZpbHRlcnNyYyxkZWxldGUgTC5maWx0ZXJzcmMpLEwuY2FsZW5kYXImJihMLnZhbHVlY2FsZW5kYXJ8fChMLnZhbHVlY2FsZW5kYXI9TC5jYWxlbmRhciksZGVsZXRlIEwuY2FsZW5kYXIpO2JyZWFrO2Nhc2UiZ3JvdXBieSI6aWYoTC5zdHlsZXM9TC5zdHlsZXN8fEwuc3R5bGUsTC5zdHlsZXMmJiFBcnJheS5pc0FycmF5KEwuc3R5bGVzKSl7dmFyIEM9TC5zdHlsZXMsUD1PYmplY3Qua2V5cyhDKTtMLnN0eWxlcz1bXTtmb3IodmFyIEk9MDtJPFAubGVuZ3RoO0krKylMLnN0eWxlcy5wdXNoKHt0YXJnZXQ6UFtJXSx2YWx1ZTpDW1BbSV1dfSl9fX19eShpLCJsaW5lIikmJmRlbGV0ZSBpLmxpbmUsIm1hcmtlciJpbiBpJiYoeShpLm1hcmtlciwibGluZSIpJiZkZWxldGUgaS5tYXJrZXIubGluZSx5KGksIm1hcmtlciIpJiZkZWxldGUgaS5tYXJrZXIpLGMuY2xlYW4oaSksaS5hdXRvYmlueCYmKGRlbGV0ZSBpLmF1dG9iaW54LGRlbGV0ZSBpLnhiaW5zKSxpLmF1dG9iaW55JiYoZGVsZXRlIGkuYXV0b2JpbnksZGVsZXRlIGkueWJpbnMpLGQoaSksaS5jb2xvcmJhciYmZChpLmNvbG9yYmFyKSxpLm1hcmtlciYmaS5tYXJrZXIuY29sb3JiYXImJmQoaS5tYXJrZXIuY29sb3JiYXIpLGkubGluZSYmaS5saW5lLmNvbG9yYmFyJiZkKGkubGluZS5jb2xvcmJhciksaS5hYXhpcyYmZChpLmFheGlzKSxpLmJheGlzJiZkKGkuYmF4aXMpfX0sci5zd2FwWFlEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKG8uc3dhcEF0dHJzKHQsWyI/IiwiPzAiLCJkPyIsIj9iaW5zIiwibmJpbnM/IiwiYXV0b2Jpbj8iLCI/c3JjIiwiZXJyb3JfPyJdKSxBcnJheS5pc0FycmF5KHQueikmJkFycmF5LmlzQXJyYXkodC56WzBdKSYmKHQudHJhbnNwb3NlP2RlbGV0ZSB0LnRyYW5zcG9zZTp0LnRyYW5zcG9zZT0hMCksdC5lcnJvcl94JiZ0LmVycm9yX3kpe3ZhciByPXQuZXJyb3JfeSxuPSJjb3B5X3lzdHlsZSJpbiByP3IuY29weV95c3R5bGU6IShyLmNvbG9yfHxyLnRoaWNrbmVzc3x8ci53aWR0aCk7by5zd2FwQXR0cnModCxbImVycm9yXz8uY29weV95c3R5bGUiXSksbiYmby5zd2FwQXR0cnModCxbImVycm9yXz8uY29sb3IiLCJlcnJvcl8/LnRoaWNrbmVzcyIsImVycm9yXz8ud2lkdGgiXSl9aWYoInN0cmluZyI9PXR5cGVvZiB0LmhvdmVyaW5mbyl7dmFyIGk9dC5ob3ZlcmluZm8uc3BsaXQoIisiKTtmb3IoZT0wO2U8aS5sZW5ndGg7ZSsrKSJ4Ij09PWlbZV0/aVtlXT0ieSI6InkiPT09aVtlXSYmKGlbZV09IngiKTt0LmhvdmVyaW5mbz1pLmpvaW4oIisiKX19LHIuY29lcmNlVHJhY2VJbmRpY2VzPWZ1bmN0aW9uKHQsZSl7aWYobihlKSlyZXR1cm5bZV07aWYoIUFycmF5LmlzQXJyYXkoZSl8fCFlLmxlbmd0aClyZXR1cm4gdC5kYXRhLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pKTtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHI9W10saT0wO2k8ZS5sZW5ndGg7aSsrKW8uaXNJbmRleChlW2ldLHQuZGF0YS5sZW5ndGgpP3IucHVzaChlW2ldKTpvLndhcm4oInRyYWNlIGluZGV4ICgiLGVbaV0sIikgaXMgbm90IGEgbnVtYmVyIG9yIGlzIG91dCBvZiBib3VuZHMiKTtyZXR1cm4gcn1yZXR1cm4gZX0sci5tYW5hZ2VBcnJheUNvbnRhaW5lcnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQub2JqLGE9dC5wYXJ0cyxzPWEubGVuZ3RoLGw9YVtzLTFdLGM9bihsKTtpZihjJiZudWxsPT09ZSl7dmFyIHU9YS5zbGljZSgwLHMtMSkuam9pbigiLiIpO28ubmVzdGVkUHJvcGVydHkoaSx1KS5nZXQoKS5zcGxpY2UobCwxKX1lbHNlIGMmJnZvaWQgMD09PXQuZ2V0KCk/KHZvaWQgMD09PXQuZ2V0KCkmJihyW3QuYXN0cl09bnVsbCksdC5zZXQoZSkpOnQuc2V0KGUpfTt2YXIgeD0vKFwuW15cW1xdXC5dK3xcW1teXFtcXVwuXStcXSkkLztmdW5jdGlvbiBiKHQpe3ZhciBlPXQuc2VhcmNoKHgpO2lmKGU+MClyZXR1cm4gdC5zdWJzdHIoMCxlKX1yLmhhc1BhcmVudD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1iKGUpO3I7KXtpZihyIGluIHQpcmV0dXJuITA7cj1iKHIpfXJldHVybiExfTt2YXIgXz1bIngiLCJ5IiwieiJdO3IuY2xlYXJBeGlzVHlwZXM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWZvcih2YXIgaT10Ll9mdWxsRGF0YVtuXSxhPTA7YTwzO2ErKyl7dmFyIHM9Zih0LGksX1thXSk7aWYocyYmImxvZyIhPT1zLnR5cGUpe3ZhciBsPXMuX25hbWUsYz1zLl9pZC5zdWJzdHIoMSk7aWYoInNjZW5lIj09PWMuc3Vic3RyKDAsNSkpe2lmKHZvaWQgMCE9PXJbY10pY29udGludWU7bD1jKyIuIitsfXZhciB1PWwrIi50eXBlIjt2b2lkIDA9PT1yW2xdJiZ2b2lkIDA9PT1yW3VdJiZvLm5lc3RlZFByb3BlcnR5KHQubGF5b3V0LHUpLnNldChudWxsKX19fX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uL2xpYiI6Nzc2LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwiLi4vcGxvdHMvcGxvdHMiOjg5MCwiLi4vcmVnaXN0cnkiOjkwNCwiZmFzdC1pc251bWVyaWMiOjI0MiwiZ2wtbWF0NC9mcm9tUXVhdCI6Mjc2fV0sODExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vcGxvdF9hcGkiKTtyLl9kb1Bsb3Q9bi5fZG9QbG90LHIubmV3UGxvdD1uLm5ld1Bsb3Qsci5yZXN0eWxlPW4ucmVzdHlsZSxyLnJlbGF5b3V0PW4ucmVsYXlvdXQsci5yZWRyYXc9bi5yZWRyYXcsci51cGRhdGU9bi51cGRhdGUsci5fZ3VpUmVzdHlsZT1uLl9ndWlSZXN0eWxlLHIuX2d1aVJlbGF5b3V0PW4uX2d1aVJlbGF5b3V0LHIuX2d1aVVwZGF0ZT1uLl9ndWlVcGRhdGUsci5fc3RvcmVEaXJlY3RHVUlFZGl0PW4uX3N0b3JlRGlyZWN0R1VJRWRpdCxyLnJlYWN0PW4ucmVhY3Qsci5leHRlbmRUcmFjZXM9bi5leHRlbmRUcmFjZXMsci5wcmVwZW5kVHJhY2VzPW4ucHJlcGVuZFRyYWNlcyxyLmFkZFRyYWNlcz1uLmFkZFRyYWNlcyxyLmRlbGV0ZVRyYWNlcz1uLmRlbGV0ZVRyYWNlcyxyLm1vdmVUcmFjZXM9bi5tb3ZlVHJhY2VzLHIucHVyZ2U9bi5wdXJnZSxyLmFkZEZyYW1lcz1uLmFkZEZyYW1lcyxyLmRlbGV0ZUZyYW1lcz1uLmRlbGV0ZUZyYW1lcyxyLmFuaW1hdGU9bi5hbmltYXRlLHIuc2V0UGxvdENvbmZpZz1uLnNldFBsb3RDb25maWcsci50b0ltYWdlPXQoIi4vdG9faW1hZ2UiKSxyLnZhbGlkYXRlPXQoIi4vdmFsaWRhdGUiKSxyLmRvd25sb2FkSW1hZ2U9dCgiLi4vc25hcHNob3QvZG93bmxvYWQiKTt2YXIgaT10KCIuL3RlbXBsYXRlX2FwaSIpO3IubWFrZVRlbXBsYXRlPWkubWFrZVRlbXBsYXRlLHIudmFsaWRhdGVUZW1wbGF0ZT1pLnZhbGlkYXRlVGVtcGxhdGV9LHsiLi4vc25hcHNob3QvZG93bmxvYWQiOjkwNiwiLi9wbG90X2FwaSI6ODEzLCIuL3RlbXBsYXRlX2FwaSI6ODE4LCIuL3RvX2ltYWdlIjo4MTksIi4vdmFsaWRhdGUiOjgyMH1dLDgxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIvaXNfcGxhaW5fb2JqZWN0IiksaT10KCIuLi9saWIvbm9vcCIpLGE9dCgiLi4vbGliL2xvZ2dlcnMiKSxvPXQoIi4uL2xpYi9zZWFyY2giKS5zb3J0ZXJBc2Mscz10KCIuLi9yZWdpc3RyeSIpO3IuY29udGFpbmVyQXJyYXlNYXRjaD10KCIuL2NvbnRhaW5lcl9hcnJheV9tYXRjaCIpO3ZhciBsPXIuaXNBZGRWYWw9ZnVuY3Rpb24odCl7cmV0dXJuImFkZCI9PT10fHxuKHQpfSxjPXIuaXNSZW1vdmVWYWw9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10fHwicmVtb3ZlIj09PXR9O3IuYXBwbHlDb250YWluZXJBcnJheUNoYW5nZXM9ZnVuY3Rpb24odCxlLHIsbix1KXt2YXIgZj1lLmFzdHIsaD1zLmdldENvbXBvbmVudE1ldGhvZChmLCJzdXBwbHlMYXlvdXREZWZhdWx0cyIpLHA9cy5nZXRDb21wb25lbnRNZXRob2QoZiwiZHJhdyIpLGQ9cy5nZXRDb21wb25lbnRNZXRob2QoZiwiZHJhd09uZSIpLG09bi5yZXBsb3R8fG4ucmVjYWxjfHxoPT09aXx8cD09PWksZz10LmxheW91dCx2PXQuX2Z1bGxMYXlvdXQ7aWYoclsiIl0pe09iamVjdC5rZXlzKHIpLmxlbmd0aD4xJiZhLndhcm4oIkZ1bGwgYXJyYXkgZWRpdHMgYXJlIGluY29tcGF0aWJsZSB3aXRoIG90aGVyIGVkaXRzIixmKTt2YXIgeT1yWyIiXVsiIl07aWYoYyh5KSllLnNldChudWxsKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KHkpKXJldHVybiBhLndhcm4oIlVucmVjb2duaXplZCBmdWxsIGFycmF5IGVkaXQgdmFsdWUiLGYseSksITA7ZS5zZXQoeSl9cmV0dXJuIW0mJihoKGcsdikscCh0KSwhMCl9dmFyIHgsYixfLHcsVCxrLEEsTSxTPU9iamVjdC5rZXlzKHIpLm1hcChOdW1iZXIpLnNvcnQobyksRT1lLmdldCgpLEw9RXx8W10sQz11KHYsZikuZ2V0KCksUD1bXSxJPS0xLE89TC5sZW5ndGg7Zm9yKHg9MDt4PFMubGVuZ3RoO3grKylpZih3PXJbXz1TW3hdXSxUPU9iamVjdC5rZXlzKHcpLGs9d1siIl0sQT1sKGspLF88MHx8Xz5MLmxlbmd0aC0oQT8wOjEpKWEud2FybigiaW5kZXggb3V0IG9mIHJhbmdlIixmLF8pO2Vsc2UgaWYodm9pZCAwIT09aylULmxlbmd0aD4xJiZhLndhcm4oIkluc2VydGlvbiAmIHJlbW92YWwgYXJlIGluY29tcGF0aWJsZSB3aXRoIGVkaXRzIHRvIHRoZSBzYW1lIGluZGV4LiIsZixfKSxjKGspP1AucHVzaChfKTpBPygiYWRkIj09PWsmJihrPXt9KSxMLnNwbGljZShfLDAsayksQyYmQy5zcGxpY2UoXywwLHt9KSk6YS53YXJuKCJVbnJlY29nbml6ZWQgZnVsbCBvYmplY3QgZWRpdCB2YWx1ZSIsZixfLGspLC0xPT09SSYmKEk9Xyk7ZWxzZSBmb3IoYj0wO2I8VC5sZW5ndGg7YisrKU09ZisiWyIrXysiXS4iLHUoTFtfXSxUW2JdLE0pLnNldCh3W1RbYl1dKTtmb3IoeD1QLmxlbmd0aC0xO3g+PTA7eC0tKUwuc3BsaWNlKFBbeF0sMSksQyYmQy5zcGxpY2UoUFt4XSwxKTtpZihMLmxlbmd0aD9FfHxlLnNldChMKTplLnNldChudWxsKSxtKXJldHVybiExO2lmKGgoZyx2KSxkIT09aSl7dmFyIHo7aWYoLTE9PT1JKXo9UztlbHNle2ZvcihPPU1hdGgubWF4KEwubGVuZ3RoLE8pLHo9W10seD0wO3g8Uy5sZW5ndGgmJiEoKF89U1t4XSk+PUkpO3grKyl6LnB1c2goXyk7Zm9yKHg9STt4PE87eCsrKXoucHVzaCh4KX1mb3IoeD0wO3g8ei5sZW5ndGg7eCsrKWQodCx6W3hdKX1lbHNlIHAodCk7cmV0dXJuITB9fSx7Ii4uL2xpYi9pc19wbGFpbl9vYmplY3QiOjc3NywiLi4vbGliL2xvZ2dlcnMiOjc4MCwiLi4vbGliL25vb3AiOjc4NSwiLi4vbGliL3NlYXJjaCI6Nzk2LCIuLi9yZWdpc3RyeSI6OTA0LCIuL2NvbnRhaW5lcl9hcnJheV9tYXRjaCI6ODA4fV0sODEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCJoYXMtaG92ZXIiKSxvPXQoIi4uL2xpYiIpLHM9by5uZXN0ZWRQcm9wZXJ0eSxsPXQoIi4uL2xpYi9ldmVudHMiKSxjPXQoIi4uL2xpYi9xdWV1ZSIpLHU9dCgiLi4vcmVnaXN0cnkiKSxmPXQoIi4vcGxvdF9zY2hlbWEiKSxoPXQoIi4uL3Bsb3RzL3Bsb3RzIikscD10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGQ9dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbT10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksZz10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vZ3JhcGhfaW50ZXJhY3QiKS5pbml0SW50ZXJhY3Rpb25zLHY9dCgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSx5PXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3QiKS5jbGVhclNlbGVjdCx4PXQoIi4vcGxvdF9jb25maWciKS5kZmx0Q29uZmlnLGI9dCgiLi9tYW5hZ2VfYXJyYXlzIiksXz10KCIuL2hlbHBlcnMiKSx3PXQoIi4vc3Vicm91dGluZXMiKSxUPXQoIi4vZWRpdF90eXBlcyIpLGs9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLkFYX05BTUVfUEFUVEVSTixBPTA7ZnVuY3Rpb24gTSh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQ/ZS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudC0tOnQuZW1pdCgicGxvdGx5X2FmdGVycGxvdCIpfWZ1bmN0aW9uIFModCxlKXt0cnl7dC5fZnVsbExheW91dC5fcGFwZXIuc3R5bGUoImJhY2tncm91bmQiLGUpfWNhdGNoKHQpe28uZXJyb3IodCl9fWZ1bmN0aW9uIEUodCxlKXtTKHQsbS5jb21iaW5lKGUsIndoaXRlIikpfWZ1bmN0aW9uIEwodCxlKXtpZighdC5fY29udGV4dCl7dC5fY29udGV4dD1vLmV4dGVuZERlZXAoe30seCk7dmFyIHI9bi5zZWxlY3QoImJhc2UiKTt0Ll9jb250ZXh0Ll9iYXNlVXJsPXIuc2l6ZSgpJiZyLmF0dHIoImhyZWYiKT93aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdOiIifXZhciBpLHMsbCxjPXQuX2NvbnRleHQ7aWYoZSl7Zm9yKHM9T2JqZWN0LmtleXMoZSksaT0wO2k8cy5sZW5ndGg7aSsrKSJlZGl0YWJsZSIhPT0obD1zW2ldKSYmImVkaXRzIiE9PWwmJmwgaW4gYyYmKCJzZXRCYWNrZ3JvdW5kIj09PWwmJiJvcGFxdWUiPT09ZVtsXT9jW2xdPUU6Y1tsXT1lW2xdKTtlLnBsb3QzZFBpeGVsUmF0aW8mJiFjLnBsb3RHbFBpeGVsUmF0aW8mJihjLnBsb3RHbFBpeGVsUmF0aW89Yy5wbG90M2RQaXhlbFJhdGlvKTt2YXIgdT1lLmVkaXRhYmxlO2lmKHZvaWQgMCE9PXUpZm9yKGMuZWRpdGFibGU9dSxzPU9iamVjdC5rZXlzKGMuZWRpdHMpLGk9MDtpPHMubGVuZ3RoO2krKyljLmVkaXRzW3NbaV1dPXU7aWYoZS5lZGl0cylmb3Iocz1PYmplY3Qua2V5cyhlLmVkaXRzKSxpPTA7aTxzLmxlbmd0aDtpKyspKGw9c1tpXSlpbiBjLmVkaXRzJiYoYy5lZGl0c1tsXT1lLmVkaXRzW2xdKTtjLl9leHBvcnRlZFBsb3Q9ZS5fZXhwb3J0ZWRQbG90fWMuc3RhdGljUGxvdCYmKGMuZWRpdGFibGU9ITEsYy5lZGl0cz17fSxjLmF1dG9zaXphYmxlPSExLGMuc2Nyb2xsWm9vbT0hMSxjLmRvdWJsZUNsaWNrPSExLGMuc2hvd1RpcHM9ITEsYy5zaG93TGluaz0hMSxjLmRpc3BsYXlNb2RlQmFyPSExKSwiaG92ZXIiIT09Yy5kaXNwbGF5TW9kZUJhcnx8YXx8KGMuZGlzcGxheU1vZGVCYXI9ITApLCJ0cmFuc3BhcmVudCIhPT1jLnNldEJhY2tncm91bmQmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnNldEJhY2tncm91bmR8fChjLnNldEJhY2tncm91bmQ9UyksYy5faGFzWmVyb0hlaWdodD1jLl9oYXNaZXJvSGVpZ2h0fHwwPT09dC5jbGllbnRIZWlnaHQsYy5faGFzWmVyb1dpZHRoPWMuX2hhc1plcm9XaWR0aHx8MD09PXQuY2xpZW50V2lkdGg7dmFyIGY9Yy5zY3JvbGxab29tLGg9Yy5fc2Nyb2xsWm9vbT17fTtpZighMD09PWYpaC5jYXJ0ZXNpYW49MSxoLmdsM2Q9MSxoLmdlbz0xLGgubWFwYm94PTE7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGYpe3ZhciBwPWYuc3BsaXQoIisiKTtmb3IoaT0wO2k8cC5sZW5ndGg7aSsrKWhbcFtpXV09MX1lbHNlITEhPT1mJiYoaC5nbDNkPTEsaC5nZW89MSxoLm1hcGJveD0xKX1mdW5jdGlvbiBDKHQsZSl7dmFyIHIsbixpPWUrMSxhPVtdO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspKG49dFtyXSk8MD9hLnB1c2goaStuKTphLnB1c2gobik7cmV0dXJuIGF9ZnVuY3Rpb24gUCh0LGUscil7dmFyIG4saTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXtpZigoaT1lW25dKSE9PXBhcnNlSW50KGksMTApKXRocm93IG5ldyBFcnJvcigiYWxsIHZhbHVlcyBpbiAiK3IrIiBtdXN0IGJlIGludGVnZXJzIik7aWYoaT49dC5kYXRhLmxlbmd0aHx8aTwtdC5kYXRhLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IocisiIG11c3QgYmUgdmFsaWQgaW5kaWNlcyBmb3IgZ2QuZGF0YS4iKTtpZihlLmluZGV4T2YoaSxuKzEpPi0xfHxpPj0wJiZlLmluZGV4T2YoLXQuZGF0YS5sZW5ndGgraSk+LTF8fGk8MCYmZS5pbmRleE9mKHQuZGF0YS5sZW5ndGgraSk+LTEpdGhyb3cgbmV3IEVycm9yKCJlYWNoIGluZGV4IGluICIrcisiIG11c3QgYmUgdW5pcXVlLiIpfX1mdW5jdGlvbiBJKHQsZSxyKXtpZighQXJyYXkuaXNBcnJheSh0LmRhdGEpKXRocm93IG5ldyBFcnJvcigiZ2QuZGF0YSBtdXN0IGJlIGFuIGFycmF5LiIpO2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKCJjdXJyZW50SW5kaWNlcyBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LiIpO2lmKEFycmF5LmlzQXJyYXkoZSl8fChlPVtlXSksUCh0LGUsImN1cnJlbnRJbmRpY2VzIiksdm9pZCAwPT09cnx8QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSx2b2lkIDAhPT1yJiZQKHQsciwibmV3SW5kaWNlcyIpLHZvaWQgMCE9PXImJmUubGVuZ3RoIT09ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJjdXJyZW50IGFuZCBuZXcgaW5kaWNlcyBtdXN0IGJlIG9mIGVxdWFsIGxlbmd0aC4iKX1mdW5jdGlvbiBPKHQsZSxyLG4sYSl7IWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW8uaXNQbGFpbk9iamVjdChuKTtpZighQXJyYXkuaXNBcnJheSh0LmRhdGEpKXRocm93IG5ldyBFcnJvcigiZ2QuZGF0YSBtdXN0IGJlIGFuIGFycmF5Iik7aWYoIW8uaXNQbGFpbk9iamVjdChlKSl0aHJvdyBuZXcgRXJyb3IoInVwZGF0ZSBtdXN0IGJlIGEga2V5OnZhbHVlIG9iamVjdCIpO2lmKHZvaWQgMD09PXIpdGhyb3cgbmV3IEVycm9yKCJpbmRpY2VzIG11c3QgYmUgYW4gaW50ZWdlciBvciBhcnJheSBvZiBpbnRlZ2VycyIpO2Zvcih2YXIgYSBpbiBQKHQsciwiaW5kaWNlcyIpLGUpe2lmKCFBcnJheS5pc0FycmF5KGVbYV0pfHxlW2FdLmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYXR0cmlidXRlICIrYSsiIG11c3QgYmUgYW4gYXJyYXkgb2YgbGVuZ3RoIGVxdWFsIHRvIGluZGljZXMgYXJyYXkgbGVuZ3RoIik7aWYoaSYmKCEoYSBpbiBuKXx8IUFycmF5LmlzQXJyYXkoblthXSl8fG5bYV0ubGVuZ3RoIT09ZVthXS5sZW5ndGgpKXRocm93IG5ldyBFcnJvcigid2hlbiBtYXhQb2ludHMgaXMgc2V0IGFzIGEga2V5OnZhbHVlIG9iamVjdCBpdCBtdXN0IGNvbnRhaW4gYSAxOjEgY29ycmlzcG9uZGVuY2Ugd2l0aCB0aGUga2V5cyBhbmQgbnVtYmVyIG9mIHRyYWNlcyBpbiB0aGUgdXBkYXRlIG9iamVjdCIpfX0odCxlLHIsbik7Zm9yKHZhciBsPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLGwsYyx1LGYsaD1vLmlzUGxhaW5PYmplY3QobikscD1bXTtmb3IodmFyIGQgaW4gQXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSxyPUMocix0LmRhdGEubGVuZ3RoLTEpLGUpZm9yKHZhciBtPTA7bTxyLmxlbmd0aDttKyspe2lmKGE9dC5kYXRhW3JbbV1dLGw9KGM9cyhhLGQpKS5nZXQoKSx1PWVbZF1bbV0sIW8uaXNBcnJheU9yVHlwZWRBcnJheSh1KSl0aHJvdyBuZXcgRXJyb3IoImF0dHJpYnV0ZTogIitkKyIgaW5kZXg6ICIrbSsiIG11c3QgYmUgYW4gYXJyYXkiKTtpZighby5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGV4dGVuZCBtaXNzaW5nIG9yIG5vbi1hcnJheSBhdHRyaWJ1dGU6ICIrZCk7aWYobC5jb25zdHJ1Y3RvciE9PXUuY29uc3RydWN0b3IpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZXh0ZW5kIGFycmF5IHdpdGggYW4gYXJyYXkgb2YgYSBkaWZmZXJlbnQgdHlwZTogIitkKTtmPWg/bltkXVttXTpuLGkoZil8fChmPS0xKSxwLnB1c2goe3Byb3A6Yyx0YXJnZXQ6bCxpbnNlcnQ6dSxtYXhwOk1hdGguZmxvb3IoZil9KX1yZXR1cm4gcH0odCxlLHIsbiksYz17fSx1PXt9LGY9MDtmPGwubGVuZ3RoO2YrKyl7dmFyIGg9bFtmXS5wcm9wLHA9bFtmXS5tYXhwLGQ9YShsW2ZdLnRhcmdldCxsW2ZdLmluc2VydCxwKTtoLnNldChkWzBdKSxBcnJheS5pc0FycmF5KGNbaC5hc3RyXSl8fChjW2guYXN0cl09W10pLGNbaC5hc3RyXS5wdXNoKGRbMV0pLEFycmF5LmlzQXJyYXkodVtoLmFzdHJdKXx8KHVbaC5hc3RyXT1bXSksdVtoLmFzdHJdLnB1c2gobFtmXS50YXJnZXQubGVuZ3RoKX1yZXR1cm57dXBkYXRlOmMsbWF4UG9pbnRzOnV9fWZ1bmN0aW9uIHoodCxlKXt2YXIgcj1uZXcgdC5jb25zdHJ1Y3Rvcih0Lmxlbmd0aCtlLmxlbmd0aCk7cmV0dXJuIHIuc2V0KHQpLHIuc2V0KGUsdC5sZW5ndGgpLHJ9ZnVuY3Rpb24gRCh0LGUsbixpKXt0PW8uZ2V0R3JhcGhEaXYodCksXy5jbGVhclByb21pc2VRdWV1ZSh0KTt2YXIgYT17fTtpZigic3RyaW5nIj09dHlwZW9mIGUpYVtlXT1uO2Vsc2V7aWYoIW8uaXNQbGFpbk9iamVjdChlKSlyZXR1cm4gby53YXJuKCJSZXN0eWxlIGZhaWwuIixlLG4saSksUHJvbWlzZS5yZWplY3QoKTthPW8uZXh0ZW5kRmxhdCh7fSxlKSx2b2lkIDA9PT1pJiYoaT1uKX1PYmplY3Qua2V5cyhhKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApO3ZhciBzPV8uY29lcmNlVHJhY2VJbmRpY2VzKHQsaSksbD1OKHQsYSxzKSx1PWwuZmxhZ3M7dS5jYWxjJiYodC5jYWxjZGF0YT12b2lkIDApLHUuY2xlYXJBeGlzVHlwZXMmJl8uY2xlYXJBeGlzVHlwZXModCxzLHt9KTt2YXIgZj1bXTt1LmZ1bGxSZXBsb3Q/Zi5wdXNoKHIuX2RvUGxvdCk6KGYucHVzaChoLnByZXZpb3VzUHJvbWlzZXMpLGguc3VwcGx5RGVmYXVsdHModCksdS5tYXJrZXJTaXplJiYoaC5kb0NhbGNkYXRhKHQpLEgoZikpLHUuc3R5bGUmJmYucHVzaCh3LmRvVHJhY2VTdHlsZSksdS5jb2xvcmJhcnMmJmYucHVzaCh3LmRvQ29sb3JCYXJzKSxmLnB1c2goTSkpLGYucHVzaChoLnJlaG92ZXIsaC5yZWRyYWcpLGMuYWRkKHQsRCxbdCxsLnVuZG9pdCxsLnRyYWNlc10sRCxbdCxsLnJlZG9pdCxsLnRyYWNlc10pO3ZhciBwPW8uc3luY09yQXN5bmMoZix0KTtyZXR1cm4gcCYmcC50aGVufHwocD1Qcm9taXNlLnJlc29sdmUoKSkscC50aGVuKChmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV9yZXN0eWxlIixsLmV2ZW50RGF0YSksdH0pKX1mdW5jdGlvbiBSKHQpe3JldHVybiB2b2lkIDA9PT10P251bGw6dH1mdW5jdGlvbiBGKHQsZSl7cmV0dXJuIGU/ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXMoZSxyKSxhPWkuc2V0O3JldHVybiBpLnNldD1mdW5jdGlvbihlKXtCKChufHwiIikrcixpLmdldCgpLGUsdCksYShlKX0saX06c31mdW5jdGlvbiBCKHQsZSxyLG4pe2lmKEFycmF5LmlzQXJyYXkoZSl8fEFycmF5LmlzQXJyYXkocikpZm9yKHZhciBpPUFycmF5LmlzQXJyYXkoZSk/ZTpbXSxhPUFycmF5LmlzQXJyYXkocik/cjpbXSxzPU1hdGgubWF4KGkubGVuZ3RoLGEubGVuZ3RoKSxsPTA7bDxzO2wrKylCKHQrIlsiK2wrIl0iLGlbbF0sYVtsXSxuKTtlbHNlIGlmKG8uaXNQbGFpbk9iamVjdChlKXx8by5pc1BsYWluT2JqZWN0KHIpKXt2YXIgYz1vLmlzUGxhaW5PYmplY3QoZSk/ZTp7fSx1PW8uaXNQbGFpbk9iamVjdChyKT9yOnt9LGY9by5leHRlbmRGbGF0KHt9LGMsdSk7Zm9yKHZhciBoIGluIGYpQih0KyIuIitoLGNbaF0sdVtoXSxuKX1lbHNlIHZvaWQgMD09PW5bdF0mJihuW3RdPVIoZSkpfWZ1bmN0aW9uIE4odCxlLHIpe3ZhciBuLGk9dC5fZnVsbExheW91dCxhPXQuX2Z1bGxEYXRhLGw9dC5kYXRhLGM9aS5fZ3VpRWRpdGluZyxkPUYoaS5fcHJlR1VJLGMpLG09by5leHRlbmREZWVwQWxsKHt9LGUpO2ooZSk7dmFyIGcsdj1ULnRyYWNlRmxhZ3MoKSx5PXt9LHg9e307ZnVuY3Rpb24gYigpe3JldHVybiByLm1hcCgoZnVuY3Rpb24oKXt9KSl9ZnVuY3Rpb24gdyh0KXt2YXIgZT1wLmlkMm5hbWUodCk7LTE9PT1nLmluZGV4T2YoZSkmJmcucHVzaChlKX1mdW5jdGlvbiBrKHQpe3JldHVybiJMQVlPVVQiK3QrIi5hdXRvcmFuZ2UifWZ1bmN0aW9uIEEodCl7cmV0dXJuIkxBWU9VVCIrdCsiLnJhbmdlIn1mdW5jdGlvbiBNKHQpe2Zvcih2YXIgZT10O2U8YS5sZW5ndGg7ZSsrKWlmKGFbZV0uX2lucHV0PT09bFt0XSlyZXR1cm4gYVtlXX1mdW5jdGlvbiBTKG4sYSxvKXtpZihBcnJheS5pc0FycmF5KG4pKW4uZm9yRWFjaCgoZnVuY3Rpb24odCl7Uyh0LGEsbyl9KSk7ZWxzZSBpZighKG4gaW4gZSkmJiFfLmhhc1BhcmVudChlLG4pKXt2YXIgcztpZigiTEFZT1VUIj09PW4uc3Vic3RyKDAsNikpcz1kKHQubGF5b3V0LG4ucmVwbGFjZSgiTEFZT1VUIiwiIikpO2Vsc2V7dmFyIHU9cltvXTtzPUYoaS5fdHJhY2VQcmVHVUlbTSh1KS5fZnVsbElucHV0LnVpZF0sYykobFt1XSxuKX1uIGluIHh8fCh4W25dPWIoKSksdm9pZCAwPT09eFtuXVtvXSYmKHhbbl1bb109UihzLmdldCgpKSksdm9pZCAwIT09YSYmcy5zZXQoYSl9fWZ1bmN0aW9uIEUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBhW2VdW3RdfX1mdW5jdGlvbiBMKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiExPT09ZT9hW3Jbbl1dW3RdOm51bGx9fWZvcih2YXIgQyBpbiBlKXtpZihfLmhhc1BhcmVudChlLEMpKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHNldCAiK0MrIiBhbmQgYSBwYXJlbnQgYXR0cmlidXRlIHNpbXVsdGFuZW91c2x5Iik7dmFyIFAsSSxPLHosRCxCLE49ZVtDXTtpZigiYXV0b2JpbngiIT09QyYmImF1dG9iaW55IiE9PUN8fChDPUMuY2hhckF0KEMubGVuZ3RoLTEpKyJiaW5zIixOPUFycmF5LmlzQXJyYXkoTik/Ti5tYXAoTChDKSk6ITE9PT1OP3IubWFwKEUoQykpOm51bGwpLHlbQ109TiwiTEFZT1VUIiE9PUMuc3Vic3RyKDAsNikpe2Zvcih4W0NdPWIoKSxuPTA7bjxyLmxlbmd0aDtuKyspe2lmKFA9bFtyW25dXSxJPU0ocltuXSksej0oTz1GKGkuX3RyYWNlUHJlR1VJW0kuX2Z1bGxJbnB1dC51aWRdLGMpKFAsQykpLmdldCgpLHZvaWQgMCE9PShEPUFycmF5LmlzQXJyYXkoTik/TltuJU4ubGVuZ3RoXTpOKSl7dmFyIFU9Ty5wYXJ0c1tPLnBhcnRzLmxlbmd0aC0xXSxWPUMuc3Vic3RyKDAsQy5sZW5ndGgtVS5sZW5ndGgtMSksSD1WP1YrIi4iOiIiLHE9Vj9zKEksVikuZ2V0KCk6STtpZigoQj1mLmdldFRyYWNlVmFsT2JqZWN0KEksTy5wYXJ0cykpJiZCLmltcGxpZWRFZGl0cyYmbnVsbCE9PUQpZm9yKHZhciBHIGluIEIuaW1wbGllZEVkaXRzKVMoby5yZWxhdGl2ZUF0dHIoQyxHKSxCLmltcGxpZWRFZGl0c1tHXSxuKTtlbHNlIGlmKCJ0aGlja25lc3Ntb2RlIiE9PVUmJiJsZW5tb2RlIiE9PVV8fHo9PT1EfHwiZnJhY3Rpb24iIT09RCYmInBpeGVscyIhPT1EfHwhcSl7aWYoInR5cGUiPT09QyYmKCJwaWUiPT09RCE9KCJwaWUiPT09eil8fCJmdW5uZWxhcmVhIj09PUQhPSgiZnVubmVsYXJlYSI9PT16KSkpe3ZhciBZPSJ4IixXPSJ5IjsiYmFyIiE9PUQmJiJiYXIiIT09enx8ImgiIT09UC5vcmllbnRhdGlvbnx8KFk9InkiLFc9IngiKSxvLnN3YXBBdHRycyhQLFsiPyIsIj9zcmMiXSwibGFiZWxzIixZKSxvLnN3YXBBdHRycyhQLFsiZD8iLCI/MCJdLCJsYWJlbCIsWSksby5zd2FwQXR0cnMoUCxbIj8iLCI/c3JjIl0sInZhbHVlcyIsVyksInBpZSI9PT16fHwiZnVubmVsYXJlYSI9PT16PyhzKFAsIm1hcmtlci5jb2xvciIpLnNldChzKFAsIm1hcmtlci5jb2xvcnMiKS5nZXQoKSksaS5fcGllbGF5ZXIuc2VsZWN0QWxsKCJnLnRyYWNlIikucmVtb3ZlKCkpOnUudHJhY2VJcyhQLCJjYXJ0ZXNpYW4iKSYmcyhQLCJtYXJrZXIuY29sb3JzIikuc2V0KHMoUCwibWFya2VyLmNvbG9yIikuZ2V0KCkpfX1lbHNle3ZhciBYPWkuX3NpemUsWj1xLm9yaWVudCxKPSJ0b3AiPT09Wnx8ImJvdHRvbSI9PT1aO2lmKCJ0aGlja25lc3Ntb2RlIj09PVUpe3ZhciBLPUo/WC5oOlgudztTKEgrInRoaWNrbmVzcyIscS50aGlja25lc3MqKCJmcmFjdGlvbiI9PT1EPzEvSzpLKSxuKX1lbHNle3ZhciBRPUo/WC53OlguaDtTKEgrImxlbiIscS5sZW4qKCJmcmFjdGlvbiI9PT1EPzEvUTpRKSxuKX19eFtDXVtuXT1SKHopO2lmKC0xIT09WyJzd2FweHkiLCJzd2FweHlheGVzIiwib3JpZW50YXRpb24iLCJvcmllbnRhdGlvbmF4ZXMiXS5pbmRleE9mKEMpKXtpZigib3JpZW50YXRpb24iPT09Qyl7Ty5zZXQoRCk7dmFyICQ9UC54JiYhUC55PyJoIjoidiI7aWYoKE8uZ2V0KCl8fCQpPT09SS5vcmllbnRhdGlvbiljb250aW51ZX1lbHNlIm9yaWVudGF0aW9uYXhlcyI9PT1DJiYoUC5vcmllbnRhdGlvbj17djoiaCIsaDoidiJ9W0kub3JpZW50YXRpb25dKTtfLnN3YXBYWURhdGEoUCksdi5jYWxjPXYuY2xlYXJBeGlzVHlwZXM9ITB9ZWxzZS0xIT09aC5kYXRhQXJyYXlDb250YWluZXJzLmluZGV4T2YoTy5wYXJ0c1swXSk/KF8ubWFuYWdlQXJyYXlDb250YWluZXJzKE8sRCx4KSx2LmNhbGM9ITApOihCP0IuYXJyYXlPayYmIXUudHJhY2VJcyhJLCJyZWdsIikmJihvLmlzQXJyYXlPclR5cGVkQXJyYXkoRCl8fG8uaXNBcnJheU9yVHlwZWRBcnJheSh6KSk/di5jYWxjPSEwOlQudXBkYXRlKHYsQik6di5jYWxjPSEwLE8uc2V0KEQpKX19aWYoLTEhPT1bInN3YXB4eWF4ZXMiLCJvcmllbnRhdGlvbmF4ZXMiXS5pbmRleE9mKEMpJiZwLnN3YXAodCxyKSwib3JpZW50YXRpb25heGVzIj09PUMpe3ZhciB0dD1zKHQubGF5b3V0LCJob3Zlcm1vZGUiKSxldD10dC5nZXQoKTsieCI9PT1ldD90dC5zZXQoInkiKToieSI9PT1ldD90dC5zZXQoIngiKToieCB1bmlmaWVkIj09PWV0P3R0LnNldCgieSB1bmlmaWVkIik6InkgdW5pZmllZCI9PT1ldCYmdHQuc2V0KCJ4IHVuaWZpZWQiKX1pZigtMSE9PVsib3JpZW50YXRpb24iLCJ0eXBlIl0uaW5kZXhPZihDKSl7Zm9yKGc9W10sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgcnQ9bFtyW25dXTt1LnRyYWNlSXMocnQsImNhcnRlc2lhbiIpJiYodyhydC54YXhpc3x8IngiKSx3KHJ0LnlheGlzfHwieSIpKX1TKGcubWFwKGspLCEwLDApLFMoZy5tYXAoQSksWzAsMV0sMCl9fWVsc2UgTz1kKHQubGF5b3V0LEMucmVwbGFjZSgiTEFZT1VUIiwiIikpLHhbQ109W1IoTy5nZXQoKSldLE8uc2V0KEFycmF5LmlzQXJyYXkoTik/TlswXTpOKSx2LmNhbGM9ITB9cmV0dXJuKHYuY2FsY3x8di5wbG90KSYmKHYuZnVsbFJlcGxvdD0hMCkse2ZsYWdzOnYsdW5kb2l0OngscmVkb2l0OnksdHJhY2VzOnIsZXZlbnREYXRhOm8uZXh0ZW5kRGVlcE5vQXJyYXlzKFtdLFttLHJdKX19ZnVuY3Rpb24gaih0KXt2YXIgZSxyLG4saT1vLmNvdW50ZXJSZWdleCgiYXhpcyIsIi50aXRsZSIsITEsITEpLGE9L2NvbG9yYmFyXC50aXRsZSQvLHM9T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPHMubGVuZ3RoO2UrKylyPXNbZV0sbj10W3JdLCJ0aXRsZSIhPT1yJiYhaS50ZXN0KHIpJiYhYS50ZXN0KHIpfHwic3RyaW5nIiE9dHlwZW9mIG4mJiJudW1iZXIiIT10eXBlb2Ygbj9yLmluZGV4T2YoInRpdGxlZm9udCIpPi0xP2wocixyLnJlcGxhY2UoInRpdGxlZm9udCIsInRpdGxlLmZvbnQiKSk6ci5pbmRleE9mKCJ0aXRsZXBvc2l0aW9uIik+LTE/bChyLHIucmVwbGFjZSgidGl0bGVwb3NpdGlvbiIsInRpdGxlLnBvc2l0aW9uIikpOnIuaW5kZXhPZigidGl0bGVzaWRlIik+LTE/bChyLHIucmVwbGFjZSgidGl0bGVzaWRlIiwidGl0bGUuc2lkZSIpKTpyLmluZGV4T2YoInRpdGxlb2Zmc2V0Iik+LTEmJmwocixyLnJlcGxhY2UoInRpdGxlb2Zmc2V0IiwidGl0bGUub2Zmc2V0IikpOmwocixyLnJlcGxhY2UoInRpdGxlIiwidGl0bGUudGV4dCIpKTtmdW5jdGlvbiBsKGUscil7dFtyXT10W2VdLGRlbGV0ZSB0W2VdfX1mdW5jdGlvbiBVKHQsZSxyKXt0PW8uZ2V0R3JhcGhEaXYodCksXy5jbGVhclByb21pc2VRdWV1ZSh0KTt2YXIgbj17fTtpZigic3RyaW5nIj09dHlwZW9mIGUpbltlXT1yO2Vsc2V7aWYoIW8uaXNQbGFpbk9iamVjdChlKSlyZXR1cm4gby53YXJuKCJSZWxheW91dCBmYWlsLiIsZSxyKSxQcm9taXNlLnJlamVjdCgpO249by5leHRlbmRGbGF0KHt9LGUpfU9iamVjdC5rZXlzKG4pLmxlbmd0aCYmKHQuY2hhbmdlZD0hMCk7dmFyIGk9Vyh0LG4pLGE9aS5mbGFnczthLmNhbGMmJih0LmNhbGNkYXRhPXZvaWQgMCk7dmFyIHM9W2gucHJldmlvdXNQcm9taXNlc107YS5sYXlvdXRSZXBsb3Q/cy5wdXNoKHcubGF5b3V0UmVwbG90KTpPYmplY3Qua2V5cyhuKS5sZW5ndGgmJihWKHQsYSxpKXx8aC5zdXBwbHlEZWZhdWx0cyh0KSxhLmxlZ2VuZCYmcy5wdXNoKHcuZG9MZWdlbmQpLGEubGF5b3V0c3R5bGUmJnMucHVzaCh3LmxheW91dFN0eWxlcyksYS5heHJhbmdlJiZIKHMsaS5yYW5nZXNBbHRlcmVkKSxhLnRpY2tzJiZzLnB1c2gody5kb1RpY2tzUmVsYXlvdXQpLGEubW9kZWJhciYmcy5wdXNoKHcuZG9Nb2RlQmFyKSxhLmNhbWVyYSYmcy5wdXNoKHcuZG9DYW1lcmEpLGEuY29sb3JiYXJzJiZzLnB1c2gody5kb0NvbG9yQmFycykscy5wdXNoKE0pKSxzLnB1c2goaC5yZWhvdmVyLGgucmVkcmFnKSxjLmFkZCh0LFUsW3QsaS51bmRvaXRdLFUsW3QsaS5yZWRvaXRdKTt2YXIgbD1vLnN5bmNPckFzeW5jKHMsdCk7cmV0dXJuIGwmJmwudGhlbnx8KGw9UHJvbWlzZS5yZXNvbHZlKHQpKSxsLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3JlbGF5b3V0IixpLmV2ZW50RGF0YSksdH0pKX1mdW5jdGlvbiBWKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0O2lmKCFlLmF4cmFuZ2UpcmV0dXJuITE7Zm9yKHZhciBpIGluIGUpaWYoImF4cmFuZ2UiIT09aSYmZVtpXSlyZXR1cm4hMTtmb3IodmFyIGEgaW4gci5yYW5nZXNBbHRlcmVkKXt2YXIgbz1wLmlkMm5hbWUoYSkscz10LmxheW91dFtvXSxsPW5bb107aWYobC5hdXRvcmFuZ2U9cy5hdXRvcmFuZ2Uscy5yYW5nZSYmKGwucmFuZ2U9cy5yYW5nZS5zbGljZSgpKSxsLmNsZWFuUmFuZ2UoKSxsLl9tYXRjaEdyb3VwKWZvcih2YXIgYyBpbiBsLl9tYXRjaEdyb3VwKWlmKGMhPT1hKXt2YXIgdT1uW3AuaWQybmFtZShjKV07dS5hdXRvcmFuZ2U9bC5hdXRvcmFuZ2UsdS5yYW5nZT1sLnJhbmdlLnNsaWNlKCksdS5faW5wdXQucmFuZ2U9bC5yYW5nZS5zbGljZSgpfX1yZXR1cm4hMH1mdW5jdGlvbiBIKHQsZSl7dmFyIHI9ZT9mdW5jdGlvbih0KXt2YXIgcj1bXSxuPSEwO2Zvcih2YXIgaSBpbiBlKXt2YXIgYT1wLmdldEZyb21JZCh0LGkpO2lmKHIucHVzaChpKSwtMSE9PShhLnRpY2tsYWJlbHBvc2l0aW9ufHwiIikuaW5kZXhPZigiaW5zaWRlIikmJmEuX2FuY2hvckF4aXMmJnIucHVzaChhLl9hbmNob3JBeGlzLl9pZCksYS5fbWF0Y2hHcm91cClmb3IodmFyIG8gaW4gYS5fbWF0Y2hHcm91cCllW29dfHxyLnB1c2gobyk7YS5hdXRvbWFyZ2luJiYobj0hMSl9cmV0dXJuIHAuZHJhdyh0LHIse3NraXBUaXRsZTpufSl9OmZ1bmN0aW9uKHQpe3JldHVybiBwLmRyYXcodCwicmVkcmF3Iil9O3QucHVzaCh5LHcuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cyxyLHcuZHJhd0RhdGEsdy5maW5hbERyYXcpfXZhciBxPS9eW3h5el1heGlzWzAtOV0qXC5yYW5nZShcW1swfDFdXF0pPyQvLEc9L15beHl6XWF4aXNbMC05XSpcLmF1dG9yYW5nZSQvLFk9L15beHl6XWF4aXNbMC05XSpcLmRvbWFpbihcW1swfDFdXF0pPyQvO2Z1bmN0aW9uIFcodCxlKXt2YXIgcixuLGksYT10LmxheW91dCxsPXQuX2Z1bGxMYXlvdXQsYz1sLl9ndWlFZGl0aW5nLGg9RihsLl9wcmVHVUksYyksZD1PYmplY3Qua2V5cyhlKSxtPXAubGlzdCh0KSxnPW8uZXh0ZW5kRGVlcEFsbCh7fSxlKSx2PXt9O2ZvcihqKGUpLGQ9T2JqZWN0LmtleXMoZSksbj0wO248ZC5sZW5ndGg7bisrKWlmKDA9PT1kW25dLmluZGV4T2YoImFsbGF4ZXMiKSl7Zm9yKGk9MDtpPG0ubGVuZ3RoO2krKyl7dmFyIHk9bVtpXS5faWQuc3Vic3RyKDEpLHg9LTEhPT15LmluZGV4T2YoInNjZW5lIik/eSsiLiI6IiIsdz1kW25dLnJlcGxhY2UoImFsbGF4ZXMiLHgrbVtpXS5fbmFtZSk7ZVt3XXx8KGVbd109ZVtkW25dXSl9ZGVsZXRlIGVbZFtuXV19dmFyIEE9VC5sYXlvdXRGbGFncygpLE09e30sUz17fTtmdW5jdGlvbiBFKHQscil7aWYoQXJyYXkuaXNBcnJheSh0KSl0LmZvckVhY2goKGZ1bmN0aW9uKHQpe0UodCxyKX0pKTtlbHNlIGlmKCEodCBpbiBlKSYmIV8uaGFzUGFyZW50KGUsdCkpe3ZhciBuPWgoYSx0KTt0IGluIFN8fChTW3RdPVIobi5nZXQoKSkpLHZvaWQgMCE9PXImJm4uc2V0KHIpfX12YXIgTCxDPXt9O2Z1bmN0aW9uIFAodCl7dmFyIGU9cC5uYW1lMmlkKHQuc3BsaXQoIi4iKVswXSk7cmV0dXJuIENbZV09MSxlfWZvcih2YXIgSSBpbiBlKXtpZihfLmhhc1BhcmVudChlLEkpKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHNldCAiK0krIiBhbmQgYSBwYXJlbnQgYXR0cmlidXRlIHNpbXVsdGFuZW91c2x5Iik7Zm9yKHZhciBPPWgoYSxJKSx6PWVbSV0sRD1PLnBhcnRzLmxlbmd0aC0xO0Q+MCYmInN0cmluZyIhPXR5cGVvZiBPLnBhcnRzW0RdOylELS07dmFyIEI9Ty5wYXJ0c1tEXSxOPU8ucGFydHNbRC0xXSsiLiIrQixVPU8ucGFydHMuc2xpY2UoMCxEKS5qb2luKCIuIiksVj1zKHQubGF5b3V0LFUpLmdldCgpLEg9cyhsLFUpLmdldCgpLFc9Ty5nZXQoKTtpZih2b2lkIDAhPT16KXtNW0ldPXosU1tJXT0icmV2ZXJzZSI9PT1CP3o6UihXKTt2YXIgWj1mLmdldExheW91dFZhbE9iamVjdChsLE8ucGFydHMpO2lmKFomJlouaW1wbGllZEVkaXRzJiZudWxsIT09eilmb3IodmFyIEogaW4gWi5pbXBsaWVkRWRpdHMpRShvLnJlbGF0aXZlQXR0cihJLEopLFouaW1wbGllZEVkaXRzW0pdKTtpZigtMSE9PVsid2lkdGgiLCJoZWlnaHQiXS5pbmRleE9mKEkpKWlmKHope0UoImF1dG9zaXplIixudWxsKTt2YXIgSz0iaGVpZ2h0Ij09PUk/IndpZHRoIjoiaGVpZ2h0IjtFKEssbFtLXSl9ZWxzZSBsW0ldPXQuX2luaXRpYWxBdXRvU2l6ZVtJXTtlbHNlIGlmKCJhdXRvc2l6ZSI9PT1JKUUoIndpZHRoIix6P251bGw6bC53aWR0aCksRSgiaGVpZ2h0Iix6P251bGw6bC5oZWlnaHQpO2Vsc2UgaWYoTi5tYXRjaChxKSlQKE4pLHMobCxVKyIuX2lucHV0UmFuZ2UiKS5zZXQobnVsbCk7ZWxzZSBpZihOLm1hdGNoKEcpKXtQKE4pLHMobCxVKyIuX2lucHV0UmFuZ2UiKS5zZXQobnVsbCk7dmFyIFE9cyhsLFUpLmdldCgpO1EuX2lucHV0RG9tYWluJiYoUS5faW5wdXQuZG9tYWluPVEuX2lucHV0RG9tYWluLnNsaWNlKCkpfWVsc2UgTi5tYXRjaChZKSYmcyhsLFUrIi5faW5wdXREb21haW4iKS5zZXQobnVsbCk7aWYoInR5cGUiPT09Qil7TD1WO3ZhciAkPSJsaW5lYXIiPT09SC50eXBlJiYibG9nIj09PXosdHQ9ImxvZyI9PT1ILnR5cGUmJiJsaW5lYXIiPT09ejtpZigkfHx0dCl7aWYoTCYmTC5yYW5nZSlpZihILmF1dG9yYW5nZSkkJiYoTC5yYW5nZT1MLnJhbmdlWzFdPkwucmFuZ2VbMF0/WzEsMl06WzIsMV0pO2Vsc2V7dmFyIGV0PUwucmFuZ2VbMF0scnQ9TC5yYW5nZVsxXTskPyhldDw9MCYmcnQ8PTAmJkUoVSsiLmF1dG9yYW5nZSIsITApLGV0PD0wP2V0PXJ0LzFlNjpydDw9MCYmKHJ0PWV0LzFlNiksRShVKyIucmFuZ2VbMF0iLE1hdGgubG9nKGV0KS9NYXRoLkxOMTApLEUoVSsiLnJhbmdlWzFdIixNYXRoLmxvZyhydCkvTWF0aC5MTjEwKSk6KEUoVSsiLnJhbmdlWzBdIixNYXRoLnBvdygxMCxldCkpLEUoVSsiLnJhbmdlWzFdIixNYXRoLnBvdygxMCxydCkpKX1lbHNlIEUoVSsiLmF1dG9yYW5nZSIsITApO0FycmF5LmlzQXJyYXkobC5fc3VicGxvdHMucG9sYXIpJiZsLl9zdWJwbG90cy5wb2xhci5sZW5ndGgmJmxbTy5wYXJ0c1swXV0mJiJyYWRpYWxheGlzIj09PU8ucGFydHNbMV0mJmRlbGV0ZSBsW08ucGFydHNbMF1dLl9zdWJwbG90LnZpZXdJbml0aWFsWyJyYWRpYWxheGlzLnJhbmdlIl0sdS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiY29udmVydENvb3JkcyIpKHQsSCx6LEUpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJpbWFnZXMiLCJjb252ZXJ0Q29vcmRzIikodCxILHosRSl9ZWxzZSBFKFUrIi5hdXRvcmFuZ2UiLCEwKSxFKFUrIi5yYW5nZSIsbnVsbCk7cyhsLFUrIi5faW5wdXRSYW5nZSIpLnNldChudWxsKX1lbHNlIGlmKEIubWF0Y2goaykpe3ZhciBudD1zKGwsSSkuZ2V0KCksaXQ9KHp8fHt9KS50eXBlO2l0JiYiLSIhPT1pdHx8KGl0PSJsaW5lYXIiKSx1LmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJjb252ZXJ0Q29vcmRzIikodCxudCxpdCxFKSx1LmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiY29udmVydENvb3JkcyIpKHQsbnQsaXQsRSl9dmFyIGF0PWIuY29udGFpbmVyQXJyYXlNYXRjaChJKTtpZihhdCl7cj1hdC5hcnJheSxuPWF0LmluZGV4O3ZhciBvdD1hdC5wcm9wZXJ0eSxzdD1afHx7ZWRpdFR5cGU6ImNhbGMifTsiIiE9PW4mJiIiPT09b3QmJihiLmlzQWRkVmFsKHopP1NbSV09bnVsbDpiLmlzUmVtb3ZlVmFsKHopP1NbSV09KHMoYSxyKS5nZXQoKXx8W10pW25dOm8ud2FybigidW5yZWNvZ25pemVkIGZ1bGwgb2JqZWN0IHZhbHVlIixlKSksVC51cGRhdGUoQSxzdCksdltyXXx8KHZbcl09e30pO3ZhciBsdD12W3JdW25dO2x0fHwobHQ9dltyXVtuXT17fSksbHRbb3RdPXosZGVsZXRlIGVbSV19ZWxzZSJyZXZlcnNlIj09PUI/KFYucmFuZ2U/Vi5yYW5nZS5yZXZlcnNlKCk6KEUoVSsiLmF1dG9yYW5nZSIsITApLFYucmFuZ2U9WzEsMF0pLEguYXV0b3JhbmdlP0EuY2FsYz0hMDpBLnBsb3Q9ITApOihsLl9oYXMoInNjYXR0ZXItbGlrZSIpJiZsLl9oYXMoInJlZ2wiKSYmImRyYWdtb2RlIj09PUkmJigibGFzc28iPT09enx8InNlbGVjdCI9PT16KSYmImxhc3NvIiE9PVcmJiJzZWxlY3QiIT09V3x8bC5faGFzKCJnbDJkIik/QS5wbG90PSEwOlo/VC51cGRhdGUoQSxaKTpBLmNhbGM9ITAsTy5zZXQoeikpfX1mb3IociBpbiB2KXtiLmFwcGx5Q29udGFpbmVyQXJyYXlDaGFuZ2VzKHQsaChhLHIpLHZbcl0sQSxoKXx8KEEucGxvdD0hMCl9Zm9yKHZhciBjdCBpbiBDKXt2YXIgdXQ9KEw9cC5nZXRGcm9tSWQodCxjdCkpJiZMLl9jb25zdHJhaW50R3JvdXA7aWYodXQpZm9yKHZhciBmdCBpbiBBLmNhbGM9ITAsdXQpQ1tmdF18fChwLmdldEZyb21JZCh0LGZ0KS5fY29uc3RyYWludFNocmlua2FibGU9ITApfXJldHVybihYKHQpfHxlLmhlaWdodHx8ZS53aWR0aCkmJihBLnBsb3Q9ITApLChBLnBsb3R8fEEuY2FsYykmJihBLmxheW91dFJlcGxvdD0hMCkse2ZsYWdzOkEscmFuZ2VzQWx0ZXJlZDpDLHVuZG9pdDpTLHJlZG9pdDpNLGV2ZW50RGF0YTpnfX1mdW5jdGlvbiBYKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLndpZHRoLG49ZS5oZWlnaHQ7cmV0dXJuIHQubGF5b3V0LmF1dG9zaXplJiZoLnBsb3RBdXRvU2l6ZSh0LHQubGF5b3V0LGUpLGUud2lkdGghPT1yfHxlLmhlaWdodCE9PW59ZnVuY3Rpb24gWih0LGUsbixpKXt0PW8uZ2V0R3JhcGhEaXYodCksXy5jbGVhclByb21pc2VRdWV1ZSh0KSxvLmlzUGxhaW5PYmplY3QoZSl8fChlPXt9KSxvLmlzUGxhaW5PYmplY3Qobil8fChuPXt9KSxPYmplY3Qua2V5cyhlKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApLE9iamVjdC5rZXlzKG4pLmxlbmd0aCYmKHQuY2hhbmdlZD0hMCk7dmFyIGE9Xy5jb2VyY2VUcmFjZUluZGljZXModCxpKSxzPU4odCxvLmV4dGVuZEZsYXQoe30sZSksYSksbD1zLmZsYWdzLHU9Vyh0LG8uZXh0ZW5kRmxhdCh7fSxuKSksZj11LmZsYWdzOyhsLmNhbGN8fGYuY2FsYykmJih0LmNhbGNkYXRhPXZvaWQgMCksbC5jbGVhckF4aXNUeXBlcyYmXy5jbGVhckF4aXNUeXBlcyh0LGEsbik7dmFyIHA9W107Zi5sYXlvdXRSZXBsb3Q/cC5wdXNoKHcubGF5b3V0UmVwbG90KTpsLmZ1bGxSZXBsb3Q/cC5wdXNoKHIuX2RvUGxvdCk6KHAucHVzaChoLnByZXZpb3VzUHJvbWlzZXMpLFYodCxmLHUpfHxoLnN1cHBseURlZmF1bHRzKHQpLGwuc3R5bGUmJnAucHVzaCh3LmRvVHJhY2VTdHlsZSksKGwuY29sb3JiYXJzfHxmLmNvbG9yYmFycykmJnAucHVzaCh3LmRvQ29sb3JCYXJzKSxmLmxlZ2VuZCYmcC5wdXNoKHcuZG9MZWdlbmQpLGYubGF5b3V0c3R5bGUmJnAucHVzaCh3LmxheW91dFN0eWxlcyksZi5heHJhbmdlJiZIKHAsdS5yYW5nZXNBbHRlcmVkKSxmLnRpY2tzJiZwLnB1c2gody5kb1RpY2tzUmVsYXlvdXQpLGYubW9kZWJhciYmcC5wdXNoKHcuZG9Nb2RlQmFyKSxmLmNhbWVyYSYmcC5wdXNoKHcuZG9DYW1lcmEpLHAucHVzaChNKSkscC5wdXNoKGgucmVob3ZlcixoLnJlZHJhZyksYy5hZGQodCxaLFt0LHMudW5kb2l0LHUudW5kb2l0LHMudHJhY2VzXSxaLFt0LHMucmVkb2l0LHUucmVkb2l0LHMudHJhY2VzXSk7dmFyIGQ9by5zeW5jT3JBc3luYyhwLHQpO3JldHVybiBkJiZkLnRoZW58fChkPVByb21pc2UucmVzb2x2ZSh0KSksZC50aGVuKChmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV91cGRhdGUiLHtkYXRhOnMuZXZlbnREYXRhLGxheW91dDp1LmV2ZW50RGF0YX0pLHR9KSl9ZnVuY3Rpb24gSih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5fZnVsbExheW91dC5fZ3VpRWRpdGluZz0hMDt2YXIgcj10LmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gZS5fZnVsbExheW91dC5fZ3VpRWRpdGluZz0hMSxyfX12YXIgSz1be3BhdHRlcm46L15oaWRkZW5sYWJlbHMvLGF0dHI6ImxlZ2VuZC51aXJldmlzaW9uIn0se3BhdHRlcm46L14oKHh8eSlheGlzXGQqKVwuKChhdXRvKT9yYW5nZXx0aXRsZVwudGV4dCkvfSx7cGF0dGVybjovYXhpc1xkKlwuc2hvd3NwaWtlcyQvLGF0dHI6Im1vZGViYXIudWlyZXZpc2lvbiJ9LHtwYXR0ZXJuOi8oaG92ZXJ8ZHJhZyltb2RlJC8sYXR0cjoibW9kZWJhci51aXJldmlzaW9uIn0se3BhdHRlcm46L14oc2NlbmVcZCopXC5jYW1lcmEvfSx7cGF0dGVybjovXihnZW9cZCopXC4ocHJvamVjdGlvbnxjZW50ZXJ8Zml0Ym91bmRzKS99LHtwYXR0ZXJuOi9eKHRlcm5hcnlcZCpcLlthYmNdYXhpcylcLihtaW58dGl0bGVcLnRleHQpJC99LHtwYXR0ZXJuOi9eKHBvbGFyXGQqXC5yYWRpYWxheGlzKVwuKChhdXRvKT9yYW5nZXxhbmdsZXx0aXRsZVwudGV4dCkvfSx7cGF0dGVybjovXihwb2xhclxkKlwuYW5ndWxhcmF4aXMpXC5yb3RhdGlvbi99LHtwYXR0ZXJuOi9eKG1hcGJveFxkKilcLihjZW50ZXJ8em9vbXxiZWFyaW5nfHBpdGNoKS99LHtwYXR0ZXJuOi9ebGVnZW5kXC4oeHx5KSQvLGF0dHI6ImVkaXRyZXZpc2lvbiJ9LHtwYXR0ZXJuOi9eKHNoYXBlc3xhbm5vdGF0aW9ucykvLGF0dHI6ImVkaXRyZXZpc2lvbiJ9LHtwYXR0ZXJuOi9edGl0bGVcLnRleHQkLyxhdHRyOiJlZGl0cmV2aXNpb24ifV0sUT1be3BhdHRlcm46L15zZWxlY3RlZHBvaW50cyQvLGF0dHI6InNlbGVjdGlvbnJldmlzaW9uIn0se3BhdHRlcm46LyhefHZhbHVlXC4pdmlzaWJsZSQvLGF0dHI6ImxlZ2VuZC51aXJldmlzaW9uIn0se3BhdHRlcm46L15kaW1lbnNpb25zXFtcZCtcXVwuY29uc3RyYWludHJhbmdlL30se3BhdHRlcm46L15ub2RlXC4oeHx5fGdyb3VwcykvfSx7cGF0dGVybjovXmxldmVsJC99LHtwYXR0ZXJuOi8oXnx2YWx1ZVwuKW5hbWUkL30se3BhdHRlcm46L2NvbG9yYmFyXC50aXRsZVwudGV4dCQvfSx7cGF0dGVybjovY29sb3JiYXJcLih4fHkpJC8sYXR0cjoiZWRpdHJldmlzaW9uIn1dO2Z1bmN0aW9uICQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxpPXQubWF0Y2gobi5wYXR0ZXJuKTtpZihpKXJldHVybntoZWFkOmlbMV0sYXR0cjpuLmF0dHJ9fX1mdW5jdGlvbiB0dCh0LGUpe3ZhciByPXMoZSx0KS5nZXQoKTtpZih2b2lkIDAhPT1yKXJldHVybiByO3ZhciBuPXQuc3BsaXQoIi4iKTtmb3Iobi5wb3AoKTtuLmxlbmd0aD4xOylpZihuLnBvcCgpLHZvaWQgMCE9PShyPXMoZSxuLmpvaW4oIi4iKSsiLnVpcmV2aXNpb24iKS5nZXQoKSkpcmV0dXJuIHI7cmV0dXJuIGUudWlyZXZpc2lvbn1mdW5jdGlvbiBldCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl0uX2Z1bGxJbnB1dC51aWQ9PT10KXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIHJ0KHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihlW25dLnVpZD09PXQpcmV0dXJuIG47cmV0dXJuIWVbcl18fGVbcl0udWlkPy0xOnJ9ZnVuY3Rpb24gbnQodCxlKXt2YXIgcj1vLmlzUGxhaW5PYmplY3QodCksbj1BcnJheS5pc0FycmF5KHQpO3JldHVybiByfHxuPyhyJiZvLmlzUGxhaW5PYmplY3QoZSl8fG4mJkFycmF5LmlzQXJyYXkoZSkpJiZKU09OLnN0cmluZ2lmeSh0KT09PUpTT04uc3RyaW5naWZ5KGUpOnQ9PT1lfWZ1bmN0aW9uIGl0KHQsZSxyLG4pe3ZhciBpLGEsbCxjPW4uZ2V0VmFsT2JqZWN0LHU9bi5mbGFncyxmPW4uaW1tdXRhYmxlLGg9bi5pbkFycmF5LHA9bi5hcnJheUluZGV4O2Z1bmN0aW9uIGQoKXt2YXIgdD1pLmVkaXRUeXBlO2gmJi0xIT09dC5pbmRleE9mKCJhcnJheWRyYXciKT9vLnB1c2hVbmlxdWUodS5hcnJheXNbaF0scCk6KFQudXBkYXRlKHUsaSksIm5vbmUiIT09dCYmdS5uQ2hhbmdlcysrLG4udHJhbnNpdGlvbiYmaS5hbmltJiZ1Lm5DaGFuZ2VzQW5pbSsrLChxLnRlc3QobCl8fEcudGVzdChsKSkmJih1LnJhbmdlc0FsdGVyZWRbclswXV09MSksWS50ZXN0KGwpJiZzKGUsIl9pbnB1dERvbWFpbiIpLnNldChudWxsKSwiZGF0YXJldmlzaW9uIj09PWEmJih1Lm5ld0RhdGFSZXZpc2lvbj0xKSl9ZnVuY3Rpb24gbSh0KXtyZXR1cm4iZGF0YV9hcnJheSI9PT10LnZhbFR5cGV8fHQuYXJyYXlPa31mb3IoYSBpbiB0KXtpZih1LmNhbGMmJiFuLnRyYW5zaXRpb24pcmV0dXJuO3ZhciBnPXRbYV0sdj1lW2FdLHk9ci5jb25jYXQoYSk7aWYobD15LmpvaW4oIi4iKSwiXyIhPT1hLmNoYXJBdCgwKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGcmJmchPT12KXtpZigoInRpY2swIj09PWF8fCJkdGljayI9PT1hKSYmImdlbyIhPT1yWzBdKXt2YXIgeD1lLnRpY2ttb2RlO2lmKCJhdXRvIj09PXh8fCJhcnJheSI9PT14fHwheCljb250aW51ZX1pZigoInJhbmdlIiE9PWF8fCFlLmF1dG9yYW5nZSkmJigiem1pbiIhPT1hJiYiem1heCIhPT1hfHwiY29udG91cmNhcnBldCIhPT1lLnR5cGUpJiYoaT1jKHkpKSYmKCFpLl9jb21wYXJlQXNKU09OfHxKU09OLnN0cmluZ2lmeShnKSE9PUpTT04uc3RyaW5naWZ5KHYpKSl7dmFyIGIsXz1pLnZhbFR5cGUsdz1tKGkpLGs9QXJyYXkuaXNBcnJheShnKSxBPUFycmF5LmlzQXJyYXkodik7aWYoayYmQSl7dmFyIE09Il9pbnB1dF8iK2EsUz10W01dLEU9ZVtNXTtpZihBcnJheS5pc0FycmF5KFMpJiZTPT09RSljb250aW51ZX1pZih2b2lkIDA9PT12KXcmJms/dS5jYWxjPSEwOmQoKTtlbHNlIGlmKGkuX2lzTGlua2VkVG9BcnJheSl7dmFyIEw9W10sQz0hMTtofHwodS5hcnJheXNbYV09TCk7dmFyIFA9TWF0aC5taW4oZy5sZW5ndGgsdi5sZW5ndGgpLEk9TWF0aC5tYXgoZy5sZW5ndGgsdi5sZW5ndGgpO2lmKFAhPT1JKXtpZigiYXJyYXlkcmF3IiE9PWkuZWRpdFR5cGUpe2QoKTtjb250aW51ZX1DPSEwfWZvcihiPTA7YjxQO2IrKylpdChnW2JdLHZbYl0seS5jb25jYXQoYiksby5leHRlbmRGbGF0KHtpbkFycmF5OmEsYXJyYXlJbmRleDpifSxuKSk7aWYoQylmb3IoYj1QO2I8STtiKyspTC5wdXNoKGIpfWVsc2UhXyYmby5pc1BsYWluT2JqZWN0KGcpP2l0KGcsdix5LG4pOnc/ayYmQT8oZiYmKHUuY2FsYz0hMCksKGZ8fG4ubmV3RGF0YVJldmlzaW9uKSYmZCgpKTprIT09QT91LmNhbGM9ITA6ZCgpOmsmJkEmJmcubGVuZ3RoPT09di5sZW5ndGgmJlN0cmluZyhnKT09PVN0cmluZyh2KXx8ZCgpfX19Zm9yKGEgaW4gZSlpZighKGEgaW4gdCkmJiJfIiE9PWEuY2hhckF0KDApJiYiZnVuY3Rpb24iIT10eXBlb2YgZVthXSl7aWYobShpPWMoci5jb25jYXQoYSkpKSYmQXJyYXkuaXNBcnJheShlW2FdKSlyZXR1cm4gdm9pZCh1LmNhbGM9ITApO2QoKX19ZnVuY3Rpb24gYXQodCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIW8uZXF1YWxEb21SZWN0cyhyLGUuX2xhc3RCQm94KSl7dmFyIG49ZS5faW52VHJhbnNmb3JtPW8uaW52ZXJzZVRyYW5zZm9ybU1hdHJpeChvLmdldEZ1bGxUcmFuc2Zvcm1NYXRyaXgodCkpO2UuX2ludlNjYWxlWD1NYXRoLnNxcnQoblswXVswXSpuWzBdWzBdK25bMF1bMV0qblswXVsxXStuWzBdWzJdKm5bMF1bMl0pLGUuX2ludlNjYWxlWT1NYXRoLnNxcnQoblsxXVswXSpuWzFdWzBdK25bMV1bMV0qblsxXVsxXStuWzFdWzJdKm5bMV1bMl0pLGUuX2xhc3RCQm94PXJ9fXIuYW5pbWF0ZT1mdW5jdGlvbih0LGUscil7aWYodD1vLmdldEdyYXBoRGl2KHQpLCFvLmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZWxlbWVudCBpcyBub3QgYSBQbG90bHkgcGxvdDogIit0KyIuIEl0J3MgbGlrZWx5IHRoYXQgeW91J3ZlIGZhaWxlZCB0byBjcmVhdGUgYSBwbG90IGJlZm9yZSBhbmltYXRpbmcgaXQuIEZvciBtb3JlIGRldGFpbHMsIHNlZSBodHRwczovL3Bsb3RseS5jb20vamF2YXNjcmlwdC9hbmltYXRpb25zLyIpO3ZhciBuPXQuX3RyYW5zaXRpb25EYXRhO24uX2ZyYW1lUXVldWV8fChuLl9mcmFtZVF1ZXVlPVtdKTt2YXIgaT0ocj1oLnN1cHBseUFuaW1hdGlvbkRlZmF1bHRzKHIpKS50cmFuc2l0aW9uLGE9ci5mcmFtZTtmdW5jdGlvbiBzKHQpe3JldHVybiBBcnJheS5pc0FycmF5KGkpP3Q+PWkubGVuZ3RoP2lbMF06aVt0XTppfWZ1bmN0aW9uIGwodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/dD49YS5sZW5ndGg/YVswXTphW3RdOmF9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPTA7cmV0dXJuIGZ1bmN0aW9uKCl7aWYodCYmKytyPT09ZSlyZXR1cm4gdCgpfX1yZXR1cm4gdm9pZCAwPT09bi5fZnJhbWVXYWl0aW5nQ250JiYobi5fZnJhbWVXYWl0aW5nQ250PTApLG5ldyBQcm9taXNlKChmdW5jdGlvbihhLHUpe2Z1bmN0aW9uIGYoKXtuLl9jdXJyZW50RnJhbWUmJm4uX2N1cnJlbnRGcmFtZS5vbkNvbXBsZXRlJiZuLl9jdXJyZW50RnJhbWUub25Db21wbGV0ZSgpO3ZhciBlPW4uX2N1cnJlbnRGcmFtZT1uLl9mcmFtZVF1ZXVlLnNoaWZ0KCk7aWYoZSl7dmFyIHI9ZS5uYW1lP2UubmFtZS50b1N0cmluZygpOm51bGw7dC5fZnVsbExheW91dC5fY3VycmVudEZyYW1lPXIsbi5fbGFzdEZyYW1lQXQ9RGF0ZS5ub3coKSxuLl90aW1lVG9OZXh0PWUuZnJhbWVPcHRzLmR1cmF0aW9uLGgudHJhbnNpdGlvbih0LGUuZnJhbWUuZGF0YSxlLmZyYW1lLmxheW91dCxfLmNvZXJjZVRyYWNlSW5kaWNlcyh0LGUuZnJhbWUudHJhY2VzKSxlLmZyYW1lT3B0cyxlLnRyYW5zaXRpb25PcHRzKS50aGVuKChmdW5jdGlvbigpe2Uub25Db21wbGV0ZSYmZS5vbkNvbXBsZXRlKCl9KSksdC5lbWl0KCJwbG90bHlfYW5pbWF0aW5nZnJhbWUiLHtuYW1lOnIsZnJhbWU6ZS5mcmFtZSxhbmltYXRpb246e2ZyYW1lOmUuZnJhbWVPcHRzLHRyYW5zaXRpb246ZS50cmFuc2l0aW9uT3B0c319KX1lbHNlIHQuZW1pdCgicGxvdGx5X2FuaW1hdGVkIiksd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKG4uX2FuaW1hdGlvblJhZiksbi5fYW5pbWF0aW9uUmFmPW51bGx9ZnVuY3Rpb24gcCgpe3QuZW1pdCgicGxvdGx5X2FuaW1hdGluZyIpLG4uX2xhc3RGcmFtZUF0PS0xLzAsbi5fdGltZVRvTmV4dD0wLG4uX3J1bm5pbmdUcmFuc2l0aW9ucz0wLG4uX2N1cnJlbnRGcmFtZT1udWxsO3ZhciBlPWZ1bmN0aW9uKCl7bi5fYW5pbWF0aW9uUmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSksRGF0ZS5ub3coKS1uLl9sYXN0RnJhbWVBdD5uLl90aW1lVG9OZXh0JiZmKCl9O2UoKX12YXIgZCxtLGc9MDtmdW5jdGlvbiB2KHQpe3JldHVybiBBcnJheS5pc0FycmF5KGkpP2c+PWkubGVuZ3RoP3QudHJhbnNpdGlvbk9wdHM9aVtnXTp0LnRyYW5zaXRpb25PcHRzPWlbMF06dC50cmFuc2l0aW9uT3B0cz1pLGcrKyx0fXZhciB5PVtdLHg9bnVsbD09ZSxiPUFycmF5LmlzQXJyYXkoZSk7aWYoIXgmJiFiJiZvLmlzUGxhaW5PYmplY3QoZSkpeS5wdXNoKHt0eXBlOiJvYmplY3QiLGRhdGE6dihvLmV4dGVuZEZsYXQoe30sZSkpfSk7ZWxzZSBpZih4fHwtMSE9PVsic3RyaW5nIiwibnVtYmVyIl0uaW5kZXhPZih0eXBlb2YgZSkpZm9yKGQ9MDtkPG4uX2ZyYW1lcy5sZW5ndGg7ZCsrKShtPW4uX2ZyYW1lc1tkXSkmJih4fHxTdHJpbmcobS5ncm91cCk9PT1TdHJpbmcoZSkpJiZ5LnB1c2goe3R5cGU6ImJ5bmFtZSIsbmFtZTpTdHJpbmcobS5uYW1lKSxkYXRhOnYoe25hbWU6bS5uYW1lfSl9KTtlbHNlIGlmKGIpZm9yKGQ9MDtkPGUubGVuZ3RoO2QrKyl7dmFyIHc9ZVtkXTstMSE9PVsibnVtYmVyIiwic3RyaW5nIl0uaW5kZXhPZih0eXBlb2Ygdyk/KHc9U3RyaW5nKHcpLHkucHVzaCh7dHlwZToiYnluYW1lIixuYW1lOncsZGF0YTp2KHtuYW1lOnd9KX0pKTpvLmlzUGxhaW5PYmplY3QodykmJnkucHVzaCh7dHlwZToib2JqZWN0IixkYXRhOnYoby5leHRlbmRGbGF0KHt9LHcpKX0pfWZvcihkPTA7ZDx5Lmxlbmd0aDtkKyspaWYoImJ5bmFtZSI9PT0obT15W2RdKS50eXBlJiYhbi5fZnJhbWVIYXNoW20uZGF0YS5uYW1lXSlyZXR1cm4gby53YXJuKCdhbmltYXRlIGZhaWx1cmU6IGZyYW1lIG5vdCBmb3VuZDogIicrbS5kYXRhLm5hbWUrJyInKSx2b2lkIHUoKTstMSE9PVsibmV4dCIsImltbWVkaWF0ZSJdLmluZGV4T2Yoci5tb2RlKSYmZnVuY3Rpb24oKXtpZigwIT09bi5fZnJhbWVRdWV1ZS5sZW5ndGgpe2Zvcig7bi5fZnJhbWVRdWV1ZS5sZW5ndGg7KXt2YXIgZT1uLl9mcmFtZVF1ZXVlLnBvcCgpO2Uub25JbnRlcnJ1cHQmJmUub25JbnRlcnJ1cHQoKX10LmVtaXQoInBsb3RseV9hbmltYXRpb25pbnRlcnJ1cHRlZCIsW10pfX0oKSwicmV2ZXJzZSI9PT1yLmRpcmVjdGlvbiYmeS5yZXZlcnNlKCk7dmFyIFQ9dC5fZnVsbExheW91dC5fY3VycmVudEZyYW1lO2lmKFQmJnIuZnJvbWN1cnJlbnQpe3ZhciBrPS0xO2ZvcihkPTA7ZDx5Lmxlbmd0aDtkKyspaWYoImJ5bmFtZSI9PT0obT15W2RdKS50eXBlJiZtLm5hbWU9PT1UKXtrPWQ7YnJlYWt9aWYoaz4wJiZrPHkubGVuZ3RoLTEpe3ZhciBBPVtdO2ZvcihkPTA7ZDx5Lmxlbmd0aDtkKyspbT15W2RdLCgiYnluYW1lIiE9PXlbZF0udHlwZXx8ZD5rKSYmQS5wdXNoKG0pO3k9QX19eS5sZW5ndGg+MD9mdW5jdGlvbihlKXtpZigwIT09ZS5sZW5ndGgpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbztvPSJieW5hbWUiPT09ZVtpXS50eXBlP2guY29tcHV0ZUZyYW1lKHQsZVtpXS5uYW1lKTplW2ldLmRhdGE7dmFyIGY9bChpKSxkPXMoaSk7ZC5kdXJhdGlvbj1NYXRoLm1pbihkLmR1cmF0aW9uLGYuZHVyYXRpb24pO3ZhciBtPXtmcmFtZTpvLG5hbWU6ZVtpXS5uYW1lLGZyYW1lT3B0czpmLHRyYW5zaXRpb25PcHRzOmR9O2k9PT1lLmxlbmd0aC0xJiYobS5vbkNvbXBsZXRlPWMoYSwyKSxtLm9uSW50ZXJydXB0PXUpLG4uX2ZyYW1lUXVldWUucHVzaChtKX0iaW1tZWRpYXRlIj09PXIubW9kZSYmKG4uX2xhc3RGcmFtZUF0PS0xLzApLG4uX2FuaW1hdGlvblJhZnx8cCgpfX0oeSk6KHQuZW1pdCgicGxvdGx5X2FuaW1hdGVkIiksYSgpKX0pKX0sci5hZGRGcmFtZXM9ZnVuY3Rpb24odCxlLHIpe2lmKHQ9by5nZXRHcmFwaERpdih0KSxudWxsPT1lKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtpZighby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrdCsiLiBJdCdzIGxpa2VseSB0aGF0IHlvdSd2ZSBmYWlsZWQgdG8gY3JlYXRlIGEgcGxvdCBiZWZvcmUgYWRkaW5nIGZyYW1lcy4gRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vcGxvdGx5LmNvbS9qYXZhc2NyaXB0L2FuaW1hdGlvbnMvIik7dmFyIG4saSxhLHMsbD10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLHU9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtpZighQXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgRXJyb3IoImFkZEZyYW1lcyBmYWlsdXJlOiBmcmFtZUxpc3QgbXVzdCBiZSBhbiBBcnJheSBvZiBmcmFtZSBkZWZpbml0aW9ucyIrZSk7dmFyIGY9bC5sZW5ndGgrMiplLmxlbmd0aCxwPVtdLGQ9e307Zm9yKG49ZS5sZW5ndGgtMTtuPj0wO24tLSlpZihvLmlzUGxhaW5PYmplY3QoZVtuXSkpe3ZhciBtPWVbbl0ubmFtZSxnPSh1W21dfHxkW21dfHx7fSkubmFtZSx2PWVbbl0ubmFtZSx5PXVbZ118fGRbZ107ZyYmdiYmIm51bWJlciI9PXR5cGVvZiB2JiZ5JiZBPDUmJihBKyssby53YXJuKCdhZGRGcmFtZXM6IG92ZXJ3cml0aW5nIGZyYW1lICInKyh1W2ddfHxkW2ddKS5uYW1lKyciIHdpdGggYSBmcmFtZSB3aG9zZSBuYW1lIG9mIHR5cGUgIm51bWJlciIgYWxzbyBlcXVhdGVzIHRvICInK2crJyIuIFRoaXMgaXMgdmFsaWQgYnV0IG1heSBwb3RlbnRpYWxseSBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igc2luY2UgYWxsIHBsb3RseS5qcyBmcmFtZSBuYW1lcyBhcmUgc3RvcmVkIGludGVybmFsbHkgYXMgc3RyaW5ncy4nKSw1PT09QSYmby53YXJuKCJhZGRGcmFtZXM6IFRoaXMgQVBJIGNhbGwgaGFzIHlpZWxkZWQgdG9vIG1hbnkgb2YgdGhlc2Ugd2FybmluZ3MuIEZvciB0aGUgcmVzdCBvZiB0aGlzIGNhbGwsIGZ1cnRoZXIgd2FybmluZ3MgYWJvdXQgbnVtZXJpYyBmcmFtZSBuYW1lcyB3aWxsIGJlIHN1cHByZXNzZWQuIikpLGRbbV09e25hbWU6bX0scC5wdXNoKHtmcmFtZTpoLnN1cHBseUZyYW1lRGVmYXVsdHMoZVtuXSksaW5kZXg6ciYmdm9pZCAwIT09cltuXSYmbnVsbCE9PXJbbl0/cltuXTpmK259KX1wLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW5kZXg+ZS5pbmRleD8tMTp0LmluZGV4PGUuaW5kZXg/MTowfSkpO3ZhciB4PVtdLGI9W10sXz1sLmxlbmd0aDtmb3Iobj1wLmxlbmd0aC0xO24+PTA7bi0tKXtpZigibnVtYmVyIj09dHlwZW9mKGk9cFtuXS5mcmFtZSkubmFtZSYmby53YXJuKCJXYXJuaW5nOiBhZGRGcmFtZXMgYWNjZXB0cyBmcmFtZXMgd2l0aCBudW1lcmljIG5hbWVzLCBidXQgdGhlIG51bWJlcnMgYXJlaW1wbGljaXRseSBjYXN0IHRvIHN0cmluZ3MiKSwhaS5uYW1lKWZvcig7dVtpLm5hbWU9ImZyYW1lICIrdC5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXIrK107KTtpZih1W2kubmFtZV0pe2ZvcihhPTA7YTxsLmxlbmd0aCYmKGxbYV18fHt9KS5uYW1lIT09aS5uYW1lO2ErKyk7eC5wdXNoKHt0eXBlOiJyZXBsYWNlIixpbmRleDphLHZhbHVlOml9KSxiLnVuc2hpZnQoe3R5cGU6InJlcGxhY2UiLGluZGV4OmEsdmFsdWU6bFthXX0pfWVsc2Ugcz1NYXRoLm1heCgwLE1hdGgubWluKHBbbl0uaW5kZXgsXykpLHgucHVzaCh7dHlwZToiaW5zZXJ0IixpbmRleDpzLHZhbHVlOml9KSxiLnVuc2hpZnQoe3R5cGU6ImRlbGV0ZSIsaW5kZXg6c30pLF8rK312YXIgdz1oLm1vZGlmeUZyYW1lcyxUPWgubW9kaWZ5RnJhbWVzLGs9W3QsYl0sTT1bdCx4XTtyZXR1cm4gYyYmYy5hZGQodCx3LGssVCxNKSxoLm1vZGlmeUZyYW1lcyh0LHgpfSxyLmRlbGV0ZUZyYW1lcz1mdW5jdGlvbih0LGUpe2lmKHQ9by5nZXRHcmFwaERpdih0KSwhby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrdCk7dmFyIHIsbixpPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsYT1bXSxzPVtdO2lmKCFlKWZvcihlPVtdLHI9MDtyPGkubGVuZ3RoO3IrKyllLnB1c2gocik7Zm9yKChlPWUuc2xpY2UoKSkuc29ydCgpLHI9ZS5sZW5ndGgtMTtyPj0wO3ItLSluPWVbcl0sYS5wdXNoKHt0eXBlOiJkZWxldGUiLGluZGV4Om59KSxzLnVuc2hpZnQoe3R5cGU6Imluc2VydCIsaW5kZXg6bix2YWx1ZTppW25dfSk7dmFyIGw9aC5tb2RpZnlGcmFtZXMsdT1oLm1vZGlmeUZyYW1lcyxmPVt0LHNdLHA9W3QsYV07cmV0dXJuIGMmJmMuYWRkKHQsbCxmLHUscCksaC5tb2RpZnlGcmFtZXModCxhKX0sci5hZGRUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSl7ZT1vLmdldEdyYXBoRGl2KGUpO3ZhciBhLHMsbD1bXSx1PXIuZGVsZXRlVHJhY2VzLGY9dCxoPVtlLGxdLHA9W2Usbl07Zm9yKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpO2lmKCFBcnJheS5pc0FycmF5KHQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkuIik7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgRXJyb3IoInRyYWNlcyBtdXN0IGJlIGRlZmluZWQuIik7Zm9yKEFycmF5LmlzQXJyYXkoZSl8fChlPVtlXSksbj0wO248ZS5sZW5ndGg7bisrKWlmKCJvYmplY3QiIT10eXBlb2YoaT1lW25dKXx8QXJyYXkuaXNBcnJheShpKXx8bnVsbD09PWkpdGhyb3cgbmV3IEVycm9yKCJhbGwgdmFsdWVzIGluIHRyYWNlcyBhcnJheSBtdXN0IGJlIG5vbi1hcnJheSBvYmplY3RzIik7aWYodm9pZCAwPT09cnx8QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSx2b2lkIDAhPT1yJiZyLmxlbmd0aCE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiaWYgaW5kaWNlcyBpcyBzcGVjaWZpZWQsIHRyYWNlcy5sZW5ndGggbXVzdCBlcXVhbCBpbmRpY2VzLmxlbmd0aCIpfShlLG4saSksQXJyYXkuaXNBcnJheShuKXx8KG49W25dKSxuPW4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gby5leHRlbmRGbGF0KHt9LHQpfSkpLF8uY2xlYW5EYXRhKG4pLGE9MDthPG4ubGVuZ3RoO2ErKyllLmRhdGEucHVzaChuW2FdKTtmb3IoYT0wO2E8bi5sZW5ndGg7YSsrKWwucHVzaCgtbi5sZW5ndGgrYSk7aWYodm9pZCAwPT09aSlyZXR1cm4gcz1yLnJlZHJhdyhlKSxjLmFkZChlLHUsaCxmLHApLHM7QXJyYXkuaXNBcnJheShpKXx8KGk9W2ldKTt0cnl7SShlLGwsaSl9Y2F0Y2godCl7dGhyb3cgZS5kYXRhLnNwbGljZShlLmRhdGEubGVuZ3RoLW4ubGVuZ3RoLG4ubGVuZ3RoKSx0fXJldHVybiBjLnN0YXJ0U2VxdWVuY2UoZSksYy5hZGQoZSx1LGgsZixwKSxzPXIubW92ZVRyYWNlcyhlLGwsaSksYy5zdG9wU2VxdWVuY2UoZSksc30sci5kZWxldGVUcmFjZXM9ZnVuY3Rpb24gdChlLG4pe2U9by5nZXRHcmFwaERpdihlKTt2YXIgaSxhLHM9W10sbD1yLmFkZFRyYWNlcyx1PXQsZj1bZSxzLG5dLGg9W2Usbl07aWYodm9pZCAwPT09bil0aHJvdyBuZXcgRXJyb3IoImluZGljZXMgbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIGFycmF5IG9mIGludGVnZXJzLiIpO2ZvcihBcnJheS5pc0FycmF5KG4pfHwobj1bbl0pLFAoZSxuLCJpbmRpY2VzIiksKG49QyhuLGUuZGF0YS5sZW5ndGgtMSkpLnNvcnQoby5zb3J0ZXJEZXMpLGk9MDtpPG4ubGVuZ3RoO2krPTEpYT1lLmRhdGEuc3BsaWNlKG5baV0sMSlbMF0scy5wdXNoKGEpO3ZhciBwPXIucmVkcmF3KGUpO3JldHVybiBjLmFkZChlLGwsZix1LGgpLHB9LHIuZXh0ZW5kVHJhY2VzPWZ1bmN0aW9uIHQoZSxuLGksYSl7ZnVuY3Rpb24gcyh0LGUscil7dmFyIG4saTtpZihvLmlzVHlwZWRBcnJheSh0KSlpZihyPDApe3ZhciBhPW5ldyB0LmNvbnN0cnVjdG9yKDApLHM9eih0LGUpO3I8MD8obj1zLGk9YSk6KG49YSxpPXMpfWVsc2UgaWYobj1uZXcgdC5jb25zdHJ1Y3RvcihyKSxpPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoLXIpLHI9PT1lLmxlbmd0aCluLnNldChlKSxpLnNldCh0KTtlbHNlIGlmKHI8ZS5sZW5ndGgpe3ZhciBsPWUubGVuZ3RoLXI7bi5zZXQoZS5zdWJhcnJheShsKSksaS5zZXQodCksaS5zZXQoZS5zdWJhcnJheSgwLGwpLHQubGVuZ3RoKX1lbHNle3ZhciBjPXItZS5sZW5ndGgsdT10Lmxlbmd0aC1jO24uc2V0KHQuc3ViYXJyYXkodSkpLG4uc2V0KGUsYyksaS5zZXQodC5zdWJhcnJheSgwLHUpKX1lbHNlIG49dC5jb25jYXQoZSksaT1yPj0wJiZyPG4ubGVuZ3RoP24uc3BsaWNlKDAsbi5sZW5ndGgtcik6W107cmV0dXJuW24saV19dmFyIGw9TyhlPW8uZ2V0R3JhcGhEaXYoZSksbixpLGEscyksdT1yLnJlZHJhdyhlKSxmPVtlLGwudXBkYXRlLGksbC5tYXhQb2ludHNdO3JldHVybiBjLmFkZChlLHIucHJlcGVuZFRyYWNlcyxmLHQsYXJndW1lbnRzKSx1fSxyLm1vdmVUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSl7dmFyIGEscz1bXSxsPVtdLHU9dCxmPXQsaD1bZT1vLmdldEdyYXBoRGl2KGUpLGksbl0scD1bZSxuLGldO2lmKEkoZSxuLGkpLG49QXJyYXkuaXNBcnJheShuKT9uOltuXSx2b2lkIDA9PT1pKWZvcihpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKylpLnB1c2goLW4ubGVuZ3RoK2EpO2ZvcihpPUFycmF5LmlzQXJyYXkoaSk/aTpbaV0sbj1DKG4sZS5kYXRhLmxlbmd0aC0xKSxpPUMoaSxlLmRhdGEubGVuZ3RoLTEpLGE9MDthPGUuZGF0YS5sZW5ndGg7YSsrKS0xPT09bi5pbmRleE9mKGEpJiZzLnB1c2goZS5kYXRhW2FdKTtmb3IoYT0wO2E8bi5sZW5ndGg7YSsrKWwucHVzaCh7bmV3SW5kZXg6aVthXSx0cmFjZTplLmRhdGFbblthXV19KTtmb3IobC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0Lm5ld0luZGV4LWUubmV3SW5kZXh9KSksYT0wO2E8bC5sZW5ndGg7YSs9MSlzLnNwbGljZShsW2FdLm5ld0luZGV4LDAsbFthXS50cmFjZSk7ZS5kYXRhPXM7dmFyIGQ9ci5yZWRyYXcoZSk7cmV0dXJuIGMuYWRkKGUsdSxoLGYscCksZH0sci5wcmVwZW5kVHJhY2VzPWZ1bmN0aW9uIHQoZSxuLGksYSl7ZnVuY3Rpb24gcyh0LGUscil7dmFyIG4saTtpZihvLmlzVHlwZWRBcnJheSh0KSlpZihyPD0wKXt2YXIgYT1uZXcgdC5jb25zdHJ1Y3RvcigwKSxzPXooZSx0KTtyPDA/KG49cyxpPWEpOihuPWEsaT1zKX1lbHNlIGlmKG49bmV3IHQuY29uc3RydWN0b3IociksaT1uZXcgdC5jb25zdHJ1Y3Rvcih0Lmxlbmd0aCtlLmxlbmd0aC1yKSxyPT09ZS5sZW5ndGgpbi5zZXQoZSksaS5zZXQodCk7ZWxzZSBpZihyPGUubGVuZ3RoKXt2YXIgbD1lLmxlbmd0aC1yO24uc2V0KGUuc3ViYXJyYXkoMCxsKSksaS5zZXQoZS5zdWJhcnJheShsKSksaS5zZXQodCxsKX1lbHNle3ZhciBjPXItZS5sZW5ndGg7bi5zZXQoZSksbi5zZXQodC5zdWJhcnJheSgwLGMpLGUubGVuZ3RoKSxpLnNldCh0LnN1YmFycmF5KGMpKX1lbHNlIG49ZS5jb25jYXQodCksaT1yPj0wJiZyPG4ubGVuZ3RoP24uc3BsaWNlKHIsbi5sZW5ndGgpOltdO3JldHVybltuLGldfXZhciBsPU8oZT1vLmdldEdyYXBoRGl2KGUpLG4saSxhLHMpLHU9ci5yZWRyYXcoZSksZj1bZSxsLnVwZGF0ZSxpLGwubWF4UG9pbnRzXTtyZXR1cm4gYy5hZGQoZSxyLmV4dGVuZFRyYWNlcyxmLHQsYXJndW1lbnRzKSx1fSxyLm5ld1Bsb3Q9ZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuIHQ9by5nZXRHcmFwaERpdih0KSxoLmNsZWFuUGxvdChbXSx7fSx0Ll9mdWxsRGF0YXx8W10sdC5fZnVsbExheW91dHx8e30pLGgucHVyZ2UodCksci5fZG9QbG90KHQsZSxuLGkpfSxyLl9kb1Bsb3Q9ZnVuY3Rpb24odCxlLGksYSl7dmFyIHM7aWYodD1vLmdldEdyYXBoRGl2KHQpLGwuaW5pdCh0KSxvLmlzUGxhaW5PYmplY3QoZSkpe3ZhciBjPWU7ZT1jLmRhdGEsaT1jLmxheW91dCxhPWMuY29uZmlnLHM9Yy5mcmFtZXN9aWYoITE9PT1sLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9iZWZvcmVwbG90IixbZSxpLGFdKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtlfHxpfHxvLmlzUGxvdERpdih0KXx8by53YXJuKCJDYWxsaW5nIF9kb1Bsb3QgYXMgaWYgcmVkcmF3aW5nIGJ1dCB0aGlzIGNvbnRhaW5lciBkb2Vzbid0IHlldCBoYXZlIGEgcGxvdC4iLHQpLEwodCxhKSxpfHwoaT17fSksbi5zZWxlY3QodCkuY2xhc3NlZCgianMtcGxvdGx5LXBsb3QiLCEwKSxkLm1ha2VUZXN0ZXIoKSxBcnJheS5pc0FycmF5KHQuX3Byb21pc2VzKXx8KHQuX3Byb21pc2VzPVtdKTt2YXIgZj0wPT09KHQuZGF0YXx8W10pLmxlbmd0aCYmQXJyYXkuaXNBcnJheShlKTtBcnJheS5pc0FycmF5KGUpJiYoXy5jbGVhbkRhdGEoZSksZj90LmRhdGE9ZTp0LmRhdGEucHVzaC5hcHBseSh0LmRhdGEsZSksdC5lbXB0eT0hMSksdC5sYXlvdXQmJiFmfHwodC5sYXlvdXQ9Xy5jbGVhbkxheW91dChpKSksaC5zdXBwbHlEZWZhdWx0cyh0KTt2YXIgbT10Ll9mdWxsTGF5b3V0LHk9bS5faGFzKCJjYXJ0ZXNpYW4iKTttLl9yZXBsb3R0aW5nPSEwLChmfHxtLl9zaG91bGRDcmVhdGVCZ0xheWVyKSYmKCFmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KSxyPXQuX2Z1bGxMYXlvdXQ7aWYoci5fY2FsY0ludmVyc2VUcmFuc2Zvcm09YXQsci5fY2FsY0ludmVyc2VUcmFuc2Zvcm0odCksci5fY29udGFpbmVyPWUuc2VsZWN0QWxsKCIucGxvdC1jb250YWluZXIiKS5kYXRhKFswXSksci5fY29udGFpbmVyLmVudGVyKCkuaW5zZXJ0KCJkaXYiLCI6Zmlyc3QtY2hpbGQiKS5jbGFzc2VkKCJwbG90LWNvbnRhaW5lciIsITApLmNsYXNzZWQoInBsb3RseSIsITApLHIuX3BhcGVyZGl2PXIuX2NvbnRhaW5lci5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyIikuZGF0YShbMF0pLHIuX3BhcGVyZGl2LmVudGVyKCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuY2xhc3NlZCgic3ZnLWNvbnRhaW5lciIsITApLnN0eWxlKCJwb3NpdGlvbiIsInJlbGF0aXZlIiksci5fZ2xjb250YWluZXI9ci5fcGFwZXJkaXYuc2VsZWN0QWxsKCIuZ2wtY29udGFpbmVyIikuZGF0YShbe31dKSxyLl9nbGNvbnRhaW5lci5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgiZ2wtY29udGFpbmVyIiwhMCksci5fcGFwZXJkaXYuc2VsZWN0QWxsKCIubWFpbi1zdmciKS5yZW1vdmUoKSxyLl9wYXBlcmRpdi5zZWxlY3QoIi5tb2RlYmFyLWNvbnRhaW5lciIpLnJlbW92ZSgpLHIuX3BhcGVyPXIuX3BhcGVyZGl2Lmluc2VydCgic3ZnIiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZCgibWFpbi1zdmciLCEwKSxyLl90b3BwYXBlcj1yLl9wYXBlcmRpdi5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoIm1haW4tc3ZnIiwhMCksci5fbW9kZWJhcmRpdj1yLl9wYXBlcmRpdi5hcHBlbmQoImRpdiIpLGRlbGV0ZSByLl9tb2RlQmFyLHIuX2hvdmVycGFwZXI9ci5fcGFwZXJkaXYuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJtYWluLXN2ZyIsITApLCFyLl91aWQpe3ZhciBpPXt9O24uc2VsZWN0QWxsKCJkZWZzIikuZWFjaCgoZnVuY3Rpb24oKXt0aGlzLmlkJiYoaVt0aGlzLmlkLnNwbGl0KCItIilbMV1dPTEpfSkpLHIuX3VpZD1vLnJhbmRzdHIoaSl9ci5fcGFwZXJkaXYuc2VsZWN0QWxsKCIubWFpbi1zdmciKS5hdHRyKHYuc3ZnQXR0cnMpLHIuX2RlZnM9ci5fcGFwZXIuYXBwZW5kKCJkZWZzIikuYXR0cigiaWQiLCJkZWZzLSIrci5fdWlkKSxyLl9jbGlwcz1yLl9kZWZzLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNsaXBzIiwhMCksci5fdG9wZGVmcz1yLl90b3BwYXBlci5hcHBlbmQoImRlZnMiKS5hdHRyKCJpZCIsInRvcGRlZnMtIityLl91aWQpLHIuX3RvcGNsaXBzPXIuX3RvcGRlZnMuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2xpcHMiLCEwKSxyLl9iZ0xheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJnbGF5ZXIiLCEwKSxyLl9kcmFnZ2Vycz1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJkcmFnbGF5ZXIiLCEwKTt2YXIgYT1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJsYXllci1iZWxvdyIsITApO3IuX2ltYWdlTG93ZXJMYXllcj1hLmFwcGVuZCgiZyIpLmNsYXNzZWQoImltYWdlbGF5ZXIiLCEwKSxyLl9zaGFwZUxvd2VyTGF5ZXI9YS5hcHBlbmQoImciKS5jbGFzc2VkKCJzaGFwZWxheWVyIiwhMCksci5fY2FydGVzaWFubGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2FydGVzaWFubGF5ZXIiLCEwKSxyLl9wb2xhcmxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBvbGFybGF5ZXIiLCEwKSxyLl90ZXJuYXJ5bGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgidGVybmFyeWxheWVyIiwhMCksci5fZ2VvbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ2VvbGF5ZXIiLCEwKSxyLl9mdW5uZWxhcmVhbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZnVubmVsYXJlYWxheWVyIiwhMCksci5fcGllbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgicGllbGF5ZXIiLCEwKSxyLl9pY2ljbGVsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJpY2ljbGVsYXllciIsITApLHIuX3RyZWVtYXBsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJ0cmVlbWFwbGF5ZXIiLCEwKSxyLl9zdW5idXJzdGxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInN1bmJ1cnN0bGF5ZXIiLCEwKSxyLl9pbmRpY2F0b3JsYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJpbmRpY2F0b3JsYXllciIsITApLHIuX2dsaW1hZ2VzPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImdsaW1hZ2VzIiwhMCk7dmFyIHM9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgibGF5ZXItYWJvdmUiLCEwKTtyLl9pbWFnZVVwcGVyTGF5ZXI9cy5hcHBlbmQoImciKS5jbGFzc2VkKCJpbWFnZWxheWVyIiwhMCksci5fc2hhcGVVcHBlckxheWVyPXMuYXBwZW5kKCJnIikuY2xhc3NlZCgic2hhcGVsYXllciIsITApLHIuX2luZm9sYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJpbmZvbGF5ZXIiLCEwKSxyLl9tZW51bGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgibWVudWxheWVyIiwhMCksci5fem9vbWxheWVyPXIuX3RvcHBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInpvb21sYXllciIsITApLHIuX2hvdmVybGF5ZXI9ci5faG92ZXJwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJob3ZlcmxheWVyIiwhMCksci5fbW9kZWJhcmRpdi5jbGFzc2VkKCJtb2RlYmFyLWNvbnRhaW5lciIsITApLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoInRvcCIsIjBweCIpLnN0eWxlKCJyaWdodCIsIjBweCIpLHQuZW1pdCgicGxvdGx5X2ZyYW1ld29yayIpfSh0KSxtLl9zaG91bGRDcmVhdGVCZ0xheWVyJiZkZWxldGUgbS5fc2hvdWxkQ3JlYXRlQmdMYXllciksZC5pbml0R3JhZGllbnRzKHQpLGQuaW5pdFBhdHRlcm5zKHQpLGYmJnAuc2F2ZVNob3dTcGlrZUluaXRpYWwodCk7dmFyIHg9IXQuY2FsY2RhdGF8fHQuY2FsY2RhdGEubGVuZ3RoIT09KHQuX2Z1bGxEYXRhfHxbXSkubGVuZ3RoO3gmJmguZG9DYWxjZGF0YSh0KTtmb3IodmFyIGI9MDtiPHQuY2FsY2RhdGEubGVuZ3RoO2IrKyl0LmNhbGNkYXRhW2JdWzBdLnRyYWNlPXQuX2Z1bGxEYXRhW2JdO3QuX2NvbnRleHQucmVzcG9uc2l2ZT90Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyfHwodC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcj1mdW5jdGlvbigpe28uaXNIaWRkZW4odCl8fGgucmVzaXplKHQpfSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyKSk6by5jbGVhclJlc3BvbnNpdmUodCk7dmFyIFQ9by5leHRlbmRGbGF0KHt9LG0uX3NpemUpLGs9MDtmdW5jdGlvbiBBKCl7aWYoaC5jbGVhckF1dG9NYXJnaW5JZHModCksdy5kcmF3TWFyZ2luUHVzaGVycyh0KSxwLmFsbG93QXV0b01hcmdpbih0KSxtLl9oYXMoInBpZSIpKWZvcih2YXIgZT10Ll9mdWxsRGF0YSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07InBpZSI9PT1uLnR5cGUmJm4uYXV0b21hcmdpbiYmaC5hbGxvd0F1dG9NYXJnaW4odCwicGllLiIrbi51aWQrIi5hdXRvbWFyZ2luIil9cmV0dXJuIGguZG9BdXRvTWFyZ2luKHQpLGgucHJldmlvdXNQcm9taXNlcyh0KX1mdW5jdGlvbiBTKCl7dC5fdHJhbnNpdGlvbmluZ3x8KHcuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cyh0KSxmJiZwLnNhdmVSYW5nZUluaXRpYWwodCksdS5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiY2FsY0F1dG9yYW5nZSIpKHQpKX12YXIgRT1baC5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7aWYocylyZXR1cm4gci5hZGRGcmFtZXModCxzKX0sZnVuY3Rpb24gZSgpe2Zvcih2YXIgcj1tLl9iYXNlUGxvdE1vZHVsZXMsbj0wO248ci5sZW5ndGg7bisrKXJbbl0uZHJhd0ZyYW1ld29yayYmcltuXS5kcmF3RnJhbWV3b3JrKHQpOyFtLl9nbGNhbnZhcyYmbS5faGFzKCJnbCIpJiYobS5fZ2xjYW52YXM9bS5fZ2xjb250YWluZXIuc2VsZWN0QWxsKCIuZ2wtY2FudmFzIikuZGF0YShbe2tleToiY29udGV4dExheWVyIixjb250ZXh0OiEwLHBpY2s6ITF9LHtrZXk6ImZvY3VzTGF5ZXIiLGNvbnRleHQ6ITEscGljazohMX0se2tleToicGlja0xheWVyIixjb250ZXh0OiExLHBpY2s6ITB9XSwoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSkpLG0uX2dsY2FudmFzLmVudGVyKCkuYXBwZW5kKCJjYW52YXMiKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJnbC1jYW52YXMgZ2wtY2FudmFzLSIrdC5rZXkucmVwbGFjZSgiTGF5ZXIiLCIiKX0pKS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsb3ZlcmZsb3c6InZpc2libGUiLCJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSkpO3ZhciBpPXQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpbztpZihtLl9nbGNhbnZhcyl7bS5fZ2xjYW52YXMuYXR0cigid2lkdGgiLG0ud2lkdGgqaSkuYXR0cigiaGVpZ2h0IixtLmhlaWdodCppKS5zdHlsZSgid2lkdGgiLG0ud2lkdGgrInB4Iikuc3R5bGUoImhlaWdodCIsbS5oZWlnaHQrInB4Iik7dmFyIGE9bS5fZ2xjYW52YXMuZGF0YSgpWzBdLnJlZ2w7aWYoYSYmKE1hdGguZmxvb3IobS53aWR0aCppKSE9PWEuX2dsLmRyYXdpbmdCdWZmZXJXaWR0aHx8TWF0aC5mbG9vcihtLmhlaWdodCppKSE9PWEuX2dsLmRyYXdpbmdCdWZmZXJIZWlnaHQpKXt2YXIgcz0iV2ViR0wgY29udGV4dCBidWZmZXIgYW5kIGNhbnZhcyBkaW1lbnNpb25zIGRvIG5vdCBtYXRjaCBkdWUgdG8gYnJvd3Nlci9XZWJHTCBidWcuIjtpZighaylyZXR1cm4gby5sb2cocysiIENsZWFyaW5nIGdyYXBoIGFuZCBwbG90dGluZyBhZ2Fpbi4iKSxoLmNsZWFuUGxvdChbXSx7fSx0Ll9mdWxsRGF0YSxtKSxoLnN1cHBseURlZmF1bHRzKHQpLG09dC5fZnVsbExheW91dCxoLmRvQ2FsY2RhdGEodCksaysrLGUoKTtvLmVycm9yKHMpfX1yZXR1cm4iaCI9PT1tLm1vZGViYXIub3JpZW50YXRpb24/bS5fbW9kZWJhcmRpdi5zdHlsZSgiaGVpZ2h0IixudWxsKS5zdHlsZSgid2lkdGgiLCIxMDAlIik6bS5fbW9kZWJhcmRpdi5zdHlsZSgid2lkdGgiLG51bGwpLnN0eWxlKCJoZWlnaHQiLG0uaGVpZ2h0KyJweCIpLGgucHJldmlvdXNQcm9taXNlcyh0KX0sQSxmdW5jdGlvbigpe2lmKGguZGlkTWFyZ2luQ2hhbmdlKFQsbS5fc2l6ZSkpcmV0dXJuIG8uc3luY09yQXN5bmMoW0Esdy5sYXlvdXRTdHlsZXNdLHQpfV07eSYmRS5wdXNoKChmdW5jdGlvbigpe2lmKHgpcmV0dXJuIG8uc3luY09yQXN5bmMoW3UuZ2V0Q29tcG9uZW50TWV0aG9kKCJzaGFwZXMiLCJjYWxjQXV0b3JhbmdlIiksdS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiY2FsY0F1dG9yYW5nZSIpLFNdLHQpO1MoKX0pKSxFLnB1c2gody5sYXlvdXRTdHlsZXMpLHkmJkUucHVzaCgoZnVuY3Rpb24oKXtyZXR1cm4gcC5kcmF3KHQsZj8iIjoicmVkcmF3Iil9KSwoZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5faW5zaWRlVGlja0xhYmVsc0F1dG9yYW5nZSYmVSh0LHQuX2Z1bGxMYXlvdXQuX2luc2lkZVRpY2tMYWJlbHNBdXRvcmFuZ2UpLnRoZW4oKGZ1bmN0aW9uKCl7dC5fZnVsbExheW91dC5faW5zaWRlVGlja0xhYmVsc0F1dG9yYW5nZT12b2lkIDB9KSl9KSksRS5wdXNoKHcuZHJhd0RhdGEsdy5maW5hbERyYXcsZyxoLmFkZExpbmtzLGgucmVob3ZlcixoLnJlZHJhZyxoLmRvQXV0b01hcmdpbiwoZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5faW5zaWRlVGlja0xhYmVsc0F1dG9yYW5nZSYmZiYmcC5zYXZlUmFuZ2VJbml0aWFsKHQsITApfSksaC5wcmV2aW91c1Byb21pc2VzKTt2YXIgQz1vLnN5bmNPckFzeW5jKEUsdCk7cmV0dXJuIEMmJkMudGhlbnx8KEM9UHJvbWlzZS5yZXNvbHZlKCkpLEMudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gTSh0KSx0fSkpfSxyLnB1cmdlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PW8uZ2V0R3JhcGhEaXYodCkpLl9mdWxsTGF5b3V0fHx7fSxyPXQuX2Z1bGxEYXRhfHxbXTtyZXR1cm4gaC5jbGVhblBsb3QoW10se30scixlKSxoLnB1cmdlKHQpLGwucHVyZ2UodCksZS5fY29udGFpbmVyJiZlLl9jb250YWluZXIucmVtb3ZlKCksZGVsZXRlIHQuX2NvbnRleHQsdH0sci5yZWFjdD1mdW5jdGlvbih0LGUsbixpKXt2YXIgYSxsO3Q9by5nZXRHcmFwaERpdih0KSxfLmNsZWFyUHJvbWlzZVF1ZXVlKHQpO3ZhciBjPXQuX2Z1bGxEYXRhLHA9dC5fZnVsbExheW91dDtpZihvLmlzUGxvdERpdih0KSYmYyYmcCl7aWYoby5pc1BsYWluT2JqZWN0KGUpKXt2YXIgZD1lO2U9ZC5kYXRhLG49ZC5sYXlvdXQsaT1kLmNvbmZpZyxhPWQuZnJhbWVzfXZhciBtPSExO2lmKGkpe3ZhciBnPW8uZXh0ZW5kRGVlcCh7fSx0Ll9jb250ZXh0KTt0Ll9jb250ZXh0PXZvaWQgMCxMKHQsaSksbT1mdW5jdGlvbiB0KGUscil7dmFyIG47Zm9yKG4gaW4gZSlpZigiXyIhPT1uLmNoYXJBdCgwKSl7dmFyIGk9ZVtuXSxhPXJbbl07aWYoaSE9PWEpaWYoby5pc1BsYWluT2JqZWN0KGkpJiZvLmlzUGxhaW5PYmplY3QoYSkpe2lmKHQoaSxhKSlyZXR1cm4hMH1lbHNle2lmKCFBcnJheS5pc0FycmF5KGkpfHwhQXJyYXkuaXNBcnJheShhKSlyZXR1cm4hMDtpZihpLmxlbmd0aCE9PWEubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKWlmKGlbc10hPT1hW3NdKXtpZighby5pc1BsYWluT2JqZWN0KGlbc10pfHwhby5pc1BsYWluT2JqZWN0KGFbc10pKXJldHVybiEwO2lmKHQoaVtzXSxhW3NdKSlyZXR1cm4hMH19fX0oZyx0Ll9jb250ZXh0KX10LmRhdGE9ZXx8W10sXy5jbGVhbkRhdGEodC5kYXRhKSx0LmxheW91dD1ufHx7fSxfLmNsZWFuTGF5b3V0KHQubGF5b3V0KSxmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLGwsYyx1LGYsaCxwLGQ9bi5fcHJlR1VJLG09W10sZz17fTtmb3IoaSBpbiBkKXtpZih1PSQoaSxLKSl7aWYoYT11LmF0dHJ8fHUuaGVhZCsiLnVpcmV2aXNpb24iLChjPShsPXMobixhKS5nZXQoKSkmJnR0KGEsZSkpJiZjPT09bCYmKG51bGw9PT0oZj1kW2ldKSYmKGY9dm9pZCAwKSxudChwPShoPXMoZSxpKSkuZ2V0KCksZikpKXt2b2lkIDA9PT1wJiYiYXV0b3JhbmdlIj09PWkuc3Vic3RyKGkubGVuZ3RoLTkpJiZtLnB1c2goaS5zdWJzdHIoMCxpLmxlbmd0aC0xMCkpLGguc2V0KFIocyhuLGkpLmdldCgpKSk7Y29udGludWV9fWVsc2Ugby53YXJuKCJ1bnJlY29nbml6ZWQgR1VJIGVkaXQ6ICIraSk7ZGVsZXRlIGRbaV0sInJhbmdlWyI9PT1pLnN1YnN0cihpLmxlbmd0aC04LDYpJiYoZ1tpLnN1YnN0cigwLGkubGVuZ3RoLTkpXT0xKX1mb3IodmFyIHY9MDt2PG0ubGVuZ3RoO3YrKyl7dmFyIHk9bVt2XTtpZihnW3ldKXt2YXIgeD1zKGUseSkuZ2V0KCk7eCYmZGVsZXRlIHguYXV0b3JhbmdlfX12YXIgYj1uLl90cmFjZVByZUdVSTtmb3IodmFyIF8gaW4gYil7dmFyIHcsVD1iW19dLGs9bnVsbDtmb3IoaSBpbiBUKXtpZighayl7dmFyIEE9ZXQoXyxyKTtpZihBPDApe2RlbGV0ZSBiW19dO2JyZWFrfXZhciBNPXJ0KF8sdCwodz1yW0FdLl9mdWxsSW5wdXQpLmluZGV4KTtpZihNPDApe2RlbGV0ZSBiW19dO2JyZWFrfWs9dFtNXX1pZih1PSQoaSxRKSl7aWYodS5hdHRyP2M9KGw9cyhuLHUuYXR0cikuZ2V0KCkpJiZ0dCh1LmF0dHIsZSk6KGw9dy51aXJldmlzaW9uLHZvaWQgMD09PShjPWsudWlyZXZpc2lvbikmJihjPWUudWlyZXZpc2lvbikpLGMmJmM9PT1sJiYobnVsbD09PShmPVRbaV0pJiYoZj12b2lkIDApLG50KHA9KGg9cyhrLGkpKS5nZXQoKSxmKSkpe2guc2V0KFIocyh3LGkpLmdldCgpKSk7Y29udGludWV9fWVsc2Ugby53YXJuKCJ1bnJlY29nbml6ZWQgR1VJIGVkaXQ6ICIraSsiIGluIHRyYWNlIHVpZCAiK18pO2RlbGV0ZSBUW2ldfX19KHQuZGF0YSx0LmxheW91dCxjLHApLGguc3VwcGx5RGVmYXVsdHModCx7c2tpcFVwZGF0ZUNhbGM6ITB9KTt2YXIgdj10Ll9mdWxsRGF0YSx5PXQuX2Z1bGxMYXlvdXQseD12b2lkIDA9PT15LmRhdGFyZXZpc2lvbixiPXkudHJhbnNpdGlvbixrPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9VC5sYXlvdXRGbGFncygpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGYuZ2V0TGF5b3V0VmFsT2JqZWN0KHIsdCl9YS5hcnJheXM9e30sYS5yYW5nZXNBbHRlcmVkPXt9LGEubkNoYW5nZXM9MCxhLm5DaGFuZ2VzQW5pbT0wLGl0KGUscixbXSx7Z2V0VmFsT2JqZWN0Om8sZmxhZ3M6YSxpbW11dGFibGU6bix0cmFuc2l0aW9uOmksZ2Q6dH0pLChhLnBsb3R8fGEuY2FsYykmJihhLmxheW91dFJlcGxvdD0hMCk7aSYmYS5uQ2hhbmdlcyYmYS5uQ2hhbmdlc0FuaW0mJihhLmFuaW09YS5uQ2hhbmdlcz09PWEubkNoYW5nZXNBbmltPyJhbGwiOiJzb21lIik7cmV0dXJuIGF9KHQscCx5LHgsYiksQT1rLm5ld0RhdGFSZXZpc2lvbixTPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1lLmxlbmd0aD09PXIubGVuZ3RoO2lmKCFpJiYhbylyZXR1cm57ZnVsbFJlcGxvdDohMCxjYWxjOiEwfTt2YXIgcyxsLGM9VC50cmFjZUZsYWdzKCk7Yy5hcnJheXM9e30sYy5uQ2hhbmdlcz0wLGMubkNoYW5nZXNBbmltPTA7dmFyIHU9e2dldFZhbE9iamVjdDpmdW5jdGlvbih0KXt2YXIgZT1mLmdldFRyYWNlVmFsT2JqZWN0KGwsdCk7cmV0dXJuIWwuX21vZHVsZS5hbmltYXRhYmxlJiZlLmFuaW0mJihlLmFuaW09ITEpLGV9LGZsYWdzOmMsaW1tdXRhYmxlOm4sdHJhbnNpdGlvbjppLG5ld0RhdGFSZXZpc2lvbjphLGdkOnR9LHA9e307Zm9yKHM9MDtzPGUubGVuZ3RoO3MrKylpZihyW3NdKXtpZihsPXJbc10uX2Z1bGxJbnB1dCxoLmhhc01ha2VzRGF0YVRyYW5zZm9ybShsKSYmKGw9cltzXSkscFtsLnVpZF0pY29udGludWU7cFtsLnVpZF09MSxpdChlW3NdLl9mdWxsSW5wdXQsbCxbXSx1KX0oYy5jYWxjfHxjLnBsb3QpJiYoYy5mdWxsUmVwbG90PSEwKTtpJiZjLm5DaGFuZ2VzJiZjLm5DaGFuZ2VzQW5pbSYmKGMuYW5pbT1jLm5DaGFuZ2VzPT09Yy5uQ2hhbmdlc0FuaW0mJm8/ImFsbCI6InNvbWUiKTtyZXR1cm4gY30odCxjLHYseCxiLEEpO2lmKFgodCkmJihrLmxheW91dFJlcGxvdD0hMCksUy5jYWxjfHxrLmNhbGMpe3QuY2FsY2RhdGE9dm9pZCAwO2Zvcih2YXIgRT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh5KSxDPTA7QzxFLmxlbmd0aDtDKyspe3ZhciBQPUVbQ10sST1QLnN1YnN0cmluZygwLDUpO2lmKCJ4YXhpcyI9PT1JfHwieWF4aXMiPT09SSl7dmFyIE89eVtQXS5fZW1wdHlDYXRlZ29yaWVzO08mJk8oKX19fWVsc2UgaC5zdXBwbHlEZWZhdWx0c1VwZGF0ZUNhbGModC5jYWxjZGF0YSx2KTt2YXIgej1bXTtpZihhJiYodC5fdHJhbnNpdGlvbkRhdGE9e30saC5jcmVhdGVUcmFuc2l0aW9uRGF0YSh0KSx6LnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIHIuYWRkRnJhbWVzKHQsYSl9KSkpLHkudHJhbnNpdGlvbiYmIW0mJihTLmFuaW18fGsuYW5pbSkpay50aWNrcyYmei5wdXNoKHcuZG9UaWNrc1JlbGF5b3V0KSxoLmRvQ2FsY2RhdGEodCksdy5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzKHQpLHoucHVzaCgoZnVuY3Rpb24oKXtyZXR1cm4gaC50cmFuc2l0aW9uRnJvbVJlYWN0KHQsUyxrLHApfSkpO2Vsc2UgaWYoUy5mdWxsUmVwbG90fHxrLmxheW91dFJlcGxvdHx8bSl0Ll9mdWxsTGF5b3V0Ll9za2lwRGVmYXVsdHM9ITAsei5wdXNoKHIuX2RvUGxvdCk7ZWxzZXtmb3IodmFyIEQgaW4gay5hcnJheXMpe3ZhciBGPWsuYXJyYXlzW0RdO2lmKEYubGVuZ3RoKXt2YXIgQj11LmdldENvbXBvbmVudE1ldGhvZChELCJkcmF3T25lIik7aWYoQiE9PW8ubm9vcClmb3IodmFyIE49MDtOPEYubGVuZ3RoO04rKylCKHQsRltOXSk7ZWxzZXt2YXIgaj11LmdldENvbXBvbmVudE1ldGhvZChELCJkcmF3Iik7aWYoaj09PW8ubm9vcCl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBkcmF3IGNvbXBvbmVudHM6ICIrRCk7aih0KX19fXoucHVzaChoLnByZXZpb3VzUHJvbWlzZXMpLFMuc3R5bGUmJnoucHVzaCh3LmRvVHJhY2VTdHlsZSksKFMuY29sb3JiYXJzfHxrLmNvbG9yYmFycykmJnoucHVzaCh3LmRvQ29sb3JCYXJzKSxrLmxlZ2VuZCYmei5wdXNoKHcuZG9MZWdlbmQpLGsubGF5b3V0c3R5bGUmJnoucHVzaCh3LmxheW91dFN0eWxlcyksay5heHJhbmdlJiZIKHopLGsudGlja3MmJnoucHVzaCh3LmRvVGlja3NSZWxheW91dCksay5tb2RlYmFyJiZ6LnB1c2gody5kb01vZGVCYXIpLGsuY2FtZXJhJiZ6LnB1c2gody5kb0NhbWVyYSksei5wdXNoKE0pfXoucHVzaChoLnJlaG92ZXIsaC5yZWRyYWcpLChsPW8uc3luY09yQXN5bmMoeix0KSkmJmwudGhlbnx8KGw9UHJvbWlzZS5yZXNvbHZlKHQpKX1lbHNlIGw9ci5uZXdQbG90KHQsZSxuLGkpO3JldHVybiBsLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3JlYWN0Iix7ZGF0YTplLGxheW91dDpufSksdH0pKX0sci5yZWRyYXc9ZnVuY3Rpb24odCl7aWYodD1vLmdldEdyYXBoRGl2KHQpLCFvLmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZWxlbWVudCBpcyBub3QgYSBQbG90bHkgcGxvdDogIit0KTtyZXR1cm4gXy5jbGVhbkRhdGEodC5kYXRhKSxfLmNsZWFuTGF5b3V0KHQubGF5b3V0KSx0LmNhbGNkYXRhPXZvaWQgMCxyLl9kb1Bsb3QodCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0KCJwbG90bHlfcmVkcmF3IiksdH0pKX0sci5yZWxheW91dD1VLHIucmVzdHlsZT1ELHIuc2V0UGxvdENvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gby5leHRlbmRGbGF0KHgsdCl9LHIudXBkYXRlPVosci5fZ3VpUmVsYXlvdXQ9SihVKSxyLl9ndWlSZXN0eWxlPUooRCksci5fZ3VpVXBkYXRlPUooWiksci5fc3RvcmVEaXJlY3RHVUlFZGl0PWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4gaW4gcil7QihuLHModCxuKS5nZXQoKSxyW25dLGUpfX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjc1MywiLi4vbGliIjo3NzYsIi4uL2xpYi9ldmVudHMiOjc2NSwiLi4vbGliL3F1ZXVlIjo3OTIsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjgzNCwiLi4vcGxvdHMvY2FydGVzaWFuL2dyYXBoX2ludGVyYWN0Ijo4MzcsIi4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3QiOjg0NywiLi4vcGxvdHMvcGxvdHMiOjg5MCwiLi4vcmVnaXN0cnkiOjkwNCwiLi9lZGl0X3R5cGVzIjo4MDksIi4vaGVscGVycyI6ODEwLCIuL21hbmFnZV9hcnJheXMiOjgxMiwiLi9wbG90X2NvbmZpZyI6ODE0LCIuL3Bsb3Rfc2NoZW1hIjo4MTUsIi4vc3Vicm91dGluZXMiOjgxNywiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoyNDIsImhhcy1ob3ZlciI6NDI1fV0sODE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXtzdGF0aWNQbG90Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxwbG90bHlTZXJ2ZXJVUkw6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sZWRpdGFibGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGVkaXRzOnthbm5vdGF0aW9uUG9zaXRpb246e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGFubm90YXRpb25UYWlsOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxhbm5vdGF0aW9uVGV4dDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sYXhpc1RpdGxlVGV4dDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sY29sb3JiYXJQb3NpdGlvbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sY29sb3JiYXJUaXRsZVRleHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxlZ2VuZFBvc2l0aW9uOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsZWdlbmRUZXh0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxzaGFwZVBvc2l0aW9uOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx0aXRsZVRleHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9fSxhdXRvc2l6YWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scmVzcG9uc2l2ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sZmlsbEZyYW1lOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxmcmFtZU1hcmdpbnM6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowLG1heDouNX0sc2Nyb2xsWm9vbTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiY2FydGVzaWFuIiwiZ2wzZCIsImdlbyIsIm1hcGJveCJdLGV4dHJhczpbITAsITFdLGRmbHQ6ImdsM2QrZ2VvK21hcGJveCJ9LGRvdWJsZUNsaWNrOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExLCJyZXNldCIsImF1dG9zaXplIiwicmVzZXQrYXV0b3NpemUiXSxkZmx0OiJyZXNldCthdXRvc2l6ZSJ9LGRvdWJsZUNsaWNrRGVsYXk6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDozMDAsbWluOjB9LHNob3dBeGlzRHJhZ0hhbmRsZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNob3dBeGlzUmFuZ2VFbnRyeUJveGVzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzaG93VGlwczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc2hvd0xpbms6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxpbmtUZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IkVkaXQgY2hhcnQiLG5vQmxhbms6ITB9LHNlbmREYXRhOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzaG93U291cmNlczp7dmFsVHlwZToiYW55IixkZmx0OiExfSxkaXNwbGF5TW9kZUJhcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaG92ZXIiLCEwLCExXSxkZmx0OiJob3ZlciJ9LHNob3dTZW5kVG9DbG91ZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sc2hvd0VkaXRJbkNoYXJ0U3R1ZGlvOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxtb2RlQmFyQnV0dG9uc1RvUmVtb3ZlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6W119LG1vZGVCYXJCdXR0b25zVG9BZGQ6e3ZhbFR5cGU6ImFueSIsZGZsdDpbXX0sbW9kZUJhckJ1dHRvbnM6e3ZhbFR5cGU6ImFueSIsZGZsdDohMX0sdG9JbWFnZUJ1dHRvbk9wdGlvbnM6e3ZhbFR5cGU6ImFueSIsZGZsdDp7fX0sZGlzcGxheWxvZ286e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHdhdGVybWFyazp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scGxvdEdsUGl4ZWxSYXRpbzp7dmFsVHlwZToibnVtYmVyIixkZmx0OjIsbWluOjEsbWF4OjR9LHNldEJhY2tncm91bmQ6e3ZhbFR5cGU6ImFueSIsZGZsdDoidHJhbnNwYXJlbnQifSx0b3BvanNvblVSTDp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLGRmbHQ6Imh0dHBzOi8vY2RuLnBsb3QubHkvIn0sbWFwYm94QWNjZXNzVG9rZW46e3ZhbFR5cGU6InN0cmluZyIsZGZsdDpudWxsfSxsb2dnaW5nOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxtYXg6MixkZmx0OjF9LG5vdGlmeU9uTG9nZ2luZzp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsbWF4OjIsZGZsdDowfSxxdWV1ZUxlbmd0aDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowfSxnbG9iYWxUcmFuc2Zvcm1zOnt2YWxUeXBlOiJhbnkiLGRmbHQ6W119LGxvY2FsZTp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJlbi1VUyJ9LGxvY2FsZXM6e3ZhbFR5cGU6ImFueSIsZGZsdDp7fX19LGk9e307IWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSl7dmFyIGk9ZVtuXTtpLnZhbFR5cGU/cltuXT1pLmRmbHQ6KHJbbl18fChyW25dPXt9KSx0KGkscltuXSkpfX0obixpKSxlLmV4cG9ydHM9e2NvbmZpZ0F0dHJpYnV0ZXM6bixkZmx0Q29uZmlnOml9fSx7fV0sODE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3JlZ2lzdHJ5IiksaT10KCIuLi9saWIiKSxhPXQoIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIikscz10KCIuLi9wbG90cy9mcmFtZV9hdHRyaWJ1dGVzIiksbD10KCIuLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlcyIpLGM9dCgiLi9wbG90X2NvbmZpZyIpLmNvbmZpZ0F0dHJpYnV0ZXMsdT10KCIuL2VkaXRfdHlwZXMiKSxmPWkuZXh0ZW5kRGVlcEFsbCxoPWkuaXNQbGFpbk9iamVjdCxwPWkuaXNBcnJheU9yVHlwZWRBcnJheSxkPWkubmVzdGVkUHJvcGVydHksbT1pLnZhbE9iamVjdE1ldGEsZz1bIl9pc1N1YnBsb3RPYmoiLCJfaXNMaW5rZWRUb0FycmF5IiwiX2FycmF5QXR0clJlZ2V4cHMiLCJfZGVwcmVjYXRlZCJdO2Z1bmN0aW9uIHYodCxlLHIpe2lmKCF0KXJldHVybiExO2lmKHQuX2lzTGlua2VkVG9BcnJheSlpZih5KGVbcl0pKXIrKztlbHNlIGlmKHI8ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49dFtlW3JdXTtpZighaChuKSlicmVhaztpZih0PW4scj09PWUubGVuZ3RoLTEpYnJlYWs7aWYodC5faXNMaW5rZWRUb0FycmF5KXtpZigheShlWysrcl0pKXJldHVybiExfWVsc2UgaWYoImluZm9fYXJyYXkiPT09dC52YWxUeXBlKXt2YXIgaT1lWysrcl07aWYoIXkoaSkpcmV0dXJuITE7dmFyIGE9dC5pdGVtcztpZihBcnJheS5pc0FycmF5KGEpKXtpZihpPj1hLmxlbmd0aClyZXR1cm4hMTtpZigyPT09dC5kaW1lbnNpb25zKXtpZihyKyssZS5sZW5ndGg9PT1yKXJldHVybiB0O3ZhciBvPWVbcl07aWYoIXkobykpcmV0dXJuITE7dD1hW2ldW29dfWVsc2UgdD1hW2ldfWVsc2UgdD1hfX1yZXR1cm4gdH1mdW5jdGlvbiB5KHQpe3JldHVybiB0PT09TWF0aC5yb3VuZCh0KSYmdD49MH1mdW5jdGlvbiB4KCl7dmFyIHQsZSxyPXt9O2Zvcih0IGluIGYocixvKSxuLnN1YnBsb3RzUmVnaXN0cnkpe2lmKChlPW4uc3VicGxvdHNSZWdpc3RyeVt0XSkubGF5b3V0QXR0cmlidXRlcylpZihBcnJheS5pc0FycmF5KGUuYXR0cikpZm9yKHZhciBpPTA7aTxlLmF0dHIubGVuZ3RoO2krKyl3KHIsZSxlLmF0dHJbaV0pO2Vsc2UgdyhyLGUsInN1YnBsb3QiPT09ZS5hdHRyP2UubmFtZTplLmF0dHIpfWZvcih0IGluIG4uY29tcG9uZW50c1JlZ2lzdHJ5KXt2YXIgYT0oZT1uLmNvbXBvbmVudHNSZWdpc3RyeVt0XSkuc2NoZW1hO2lmKGEmJihhLnN1YnBsb3RzfHxhLmxheW91dCkpe3ZhciBzPWEuc3VicGxvdHM7aWYocyYmcy54YXhpcyYmIXMueWF4aXMpZm9yKHZhciBsIGluIHMueGF4aXMpZGVsZXRlIHIueWF4aXNbbF19ZWxzZSJjb2xvcnNjYWxlIj09PWUubmFtZT9mKHIsZS5sYXlvdXRBdHRyaWJ1dGVzKTplLmxheW91dEF0dHJpYnV0ZXMmJlQocixlLmxheW91dEF0dHJpYnV0ZXMsZS5uYW1lKX1yZXR1cm57bGF5b3V0QXR0cmlidXRlczpfKHIpfX1mdW5jdGlvbiBiKCl7dmFyIHQ9e2ZyYW1lczpmKHt9LHMpfTtyZXR1cm4gXyh0KSx0LmZyYW1lc31mdW5jdGlvbiBfKHQpe3JldHVybiBmdW5jdGlvbih0KXtyLmNyYXdsKHQsKGZ1bmN0aW9uKHQsZSxuKXtyLmlzVmFsT2JqZWN0KHQpPyEwIT09dC5hcnJheU9rJiYiZGF0YV9hcnJheSIhPT10LnZhbFR5cGV8fChuW2UrInNyYyJdPXt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJub25lIn0pOmgodCkmJih0LnJvbGU9Im9iamVjdCIpfSkpfSh0KSxmdW5jdGlvbih0KXtyLmNyYXdsKHQsKGZ1bmN0aW9uKHQsZSxyKXtpZih0KXt2YXIgbj10Ll9pc0xpbmtlZFRvQXJyYXk7biYmKGRlbGV0ZSB0Ll9pc0xpbmtlZFRvQXJyYXkscltlXT17aXRlbXM6e319LHJbZV0uaXRlbXNbbl09dCxyW2VdLnJvbGU9Im9iamVjdCIpfX0pKX0odCksZnVuY3Rpb24odCl7IWZ1bmN0aW9uIHQoZSl7Zm9yKHZhciByIGluIGUpaWYoaChlW3JdKSl0KGVbcl0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlW3JdKSlmb3IodmFyIG49MDtuPGVbcl0ubGVuZ3RoO24rKyl0KGVbcl1bbl0pO2Vsc2UgZVtyXWluc3RhbmNlb2YgUmVnRXhwJiYoZVtyXT1lW3JdLnRvU3RyaW5nKCkpfSh0KX0odCksdH1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbj1kKHQsciksaT1mKHt9LGUubGF5b3V0QXR0cmlidXRlcyk7aS5faXNTdWJwbG90T2JqPSEwLG4uc2V0KGkpfWZ1bmN0aW9uIFQodCxlLHIpe3ZhciBuPWQodCxyKTtuLnNldChmKG4uZ2V0KCl8fHt9LGUpKX1yLklTX1NVQlBMT1RfT0JKPSJfaXNTdWJwbG90T2JqIixyLklTX0xJTktFRF9UT19BUlJBWT0iX2lzTGlua2VkVG9BcnJheSIsci5ERVBSRUNBVEVEPSJfZGVwcmVjYXRlZCIsci5VTkRFUlNDT1JFX0FUVFJTPWcsci5nZXQ9ZnVuY3Rpb24oKXt2YXIgdD17fTtuLmFsbFR5cGVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3RbZV09ZnVuY3Rpb24odCl7dmFyIGUsaTtlPW4ubW9kdWxlc1t0XS5fbW9kdWxlLGk9ZS5iYXNlUGxvdE1vZHVsZTt2YXIgbz17dHlwZTpudWxsfSxzPWYoe30sYSksbD1mKHt9LGUuYXR0cmlidXRlcyk7ci5jcmF3bChsLChmdW5jdGlvbih0LGUscixuLGkpe2QocyxpKS5zZXQodm9pZCAwKSx2b2lkIDA9PT10JiZkKGwsaSkuc2V0KHZvaWQgMCl9KSksZihvLHMpLG4udHJhY2VJcyh0LCJub09wYWNpdHkiKSYmZGVsZXRlIG8ub3BhY2l0eTtuLnRyYWNlSXModCwic2hvd0xlZ2VuZCIpfHwoZGVsZXRlIG8uc2hvd2xlZ2VuZCxkZWxldGUgby5sZWdlbmRncm91cCk7bi50cmFjZUlzKHQsIm5vSG92ZXIiKSYmKGRlbGV0ZSBvLmhvdmVyaW5mbyxkZWxldGUgby5ob3ZlcmxhYmVsKTtlLnNlbGVjdFBvaW50c3x8ZGVsZXRlIG8uc2VsZWN0ZWRwb2ludHM7ZihvLGwpLGkuYXR0cmlidXRlcyYmZihvLGkuYXR0cmlidXRlcyk7by50eXBlPXQ7dmFyIGM9e21ldGE6ZS5tZXRhfHx7fSxjYXRlZ29yaWVzOmUuY2F0ZWdvcmllc3x8e30sYW5pbWF0YWJsZTpCb29sZWFuKGUuYW5pbWF0YWJsZSksdHlwZTp0LGF0dHJpYnV0ZXM6XyhvKX07aWYoZS5sYXlvdXRBdHRyaWJ1dGVzKXt2YXIgdT17fTtmKHUsZS5sYXlvdXRBdHRyaWJ1dGVzKSxjLmxheW91dEF0dHJpYnV0ZXM9Xyh1KX1lLmFuaW1hdGFibGV8fHIuY3Jhd2woYywoZnVuY3Rpb24odCl7ci5pc1ZhbE9iamVjdCh0KSYmImFuaW0iaW4gdCYmZGVsZXRlIHQuYW5pbX0pKTtyZXR1cm4gY30oZSl9KSk7dmFyIGU9e307cmV0dXJuIE9iamVjdC5rZXlzKG4udHJhbnNmb3Jtc1JlZ2lzdHJ5KS5mb3JFYWNoKChmdW5jdGlvbih0KXtlW3RdPWZ1bmN0aW9uKHQpe3ZhciBlPW4udHJhbnNmb3Jtc1JlZ2lzdHJ5W3RdLHI9Zih7fSxlLmF0dHJpYnV0ZXMpO3JldHVybiBPYmplY3Qua2V5cyhuLmNvbXBvbmVudHNSZWdpc3RyeSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIGk9bi5jb21wb25lbnRzUmVnaXN0cnlbZV07aS5zY2hlbWEmJmkuc2NoZW1hLnRyYW5zZm9ybXMmJmkuc2NoZW1hLnRyYW5zZm9ybXNbdF0mJk9iamVjdC5rZXlzKGkuc2NoZW1hLnRyYW5zZm9ybXNbdF0pLmZvckVhY2goKGZ1bmN0aW9uKGUpe1QocixpLnNjaGVtYS50cmFuc2Zvcm1zW3RdW2VdLGUpfSkpfSkpLHthdHRyaWJ1dGVzOl8ocil9fSh0KX0pKSx7ZGVmczp7dmFsT2JqZWN0czptLG1ldGFLZXlzOmcuY29uY2F0KFsiZGVzY3JpcHRpb24iLCJyb2xlIiwiZWRpdFR5cGUiLCJpbXBsaWVkRWRpdHMiXSksZWRpdFR5cGU6e3RyYWNlczp1LnRyYWNlcyxsYXlvdXQ6dS5sYXlvdXR9LGltcGxpZWRFZGl0czp7fX0sdHJhY2VzOnQsbGF5b3V0OngoKSx0cmFuc2Zvcm1zOmUsZnJhbWVzOmIoKSxhbmltYXRpb246XyhsKSxjb25maWc6XyhjKX19LHIuY3Jhd2w9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGE9bnx8MDtpPWl8fCIiLE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBvPXRbbl07aWYoLTE9PT1nLmluZGV4T2Yobikpe3ZhciBzPShpP2krIi4iOiIiKStuO2UobyxuLHQsYSxzKSxyLmlzVmFsT2JqZWN0KG8pfHxoKG8pJiYiaW1wbGllZEVkaXRzIiE9PW4mJnIuY3Jhd2wobyxlLGErMSxzKX19KSl9LHIuaXNWYWxPYmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnZvaWQgMCE9PXQudmFsVHlwZX0sci5maW5kQXJyYXlBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saT1bXSxvPVtdLHM9W107ZnVuY3Rpb24gbCh0LHIsYSxsKXtvPW8uc2xpY2UoMCxsKS5jb25jYXQoW3JdKSxzPXMuc2xpY2UoMCxsKS5jb25jYXQoW3QmJnQuX2lzTGlua2VkVG9BcnJheV0pLHQmJigiZGF0YV9hcnJheSI9PT10LnZhbFR5cGV8fCEwPT09dC5hcnJheU9rKSYmISgiY29sb3JiYXIiPT09b1tsLTFdJiYoInRpY2t0ZXh0Ij09PXJ8fCJ0aWNrdmFscyI9PT1yKSkmJmZ1bmN0aW9uIHQoZSxyLGEpe3ZhciBsPWVbb1tyXV0sYz1hK29bcl07aWYocj09PW8ubGVuZ3RoLTEpcChsKSYmaS5wdXNoKG4rYyk7ZWxzZSBpZihzW3JdKXtpZihBcnJheS5pc0FycmF5KGwpKWZvcih2YXIgdT0wO3U8bC5sZW5ndGg7dSsrKWgobFt1XSkmJnQobFt1XSxyKzEsYysiWyIrdSsiXS4iKX1lbHNlIGgobCkmJnQobCxyKzEsYysiLiIpfShlLDAsIiIpfWU9dCxuPSIiLHIuY3Jhd2woYSxsKSx0Ll9tb2R1bGUmJnQuX21vZHVsZS5hdHRyaWJ1dGVzJiZyLmNyYXdsKHQuX21vZHVsZS5hdHRyaWJ1dGVzLGwpO3ZhciBjPXQudHJhbnNmb3JtcztpZihjKWZvcih2YXIgdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgZj1jW3VdLGQ9Zi5fbW9kdWxlO2QmJihuPSJ0cmFuc2Zvcm1zWyIrdSsiXS4iLGU9ZixyLmNyYXdsKGQuYXR0cmlidXRlcyxsKSl9cmV0dXJuIGl9LHIuZ2V0VHJhY2VWYWxPYmplY3Q9ZnVuY3Rpb24odCxlKXt2YXIgcixpLG89ZVswXSxzPTE7aWYoInRyYW5zZm9ybXMiPT09byl7aWYoMT09PWUubGVuZ3RoKXJldHVybiBhLnRyYW5zZm9ybXM7dmFyIGw9dC50cmFuc2Zvcm1zO2lmKCFBcnJheS5pc0FycmF5KGwpfHwhbC5sZW5ndGgpcmV0dXJuITE7dmFyIGM9ZVsxXTtpZigheShjKXx8Yz49bC5sZW5ndGgpcmV0dXJuITE7aT0ocj0obi50cmFuc2Zvcm1zUmVnaXN0cnlbbFtjXS50eXBlXXx8e30pLmF0dHJpYnV0ZXMpJiZyW2VbMl1dLHM9M31lbHNle3ZhciB1PXQuX21vZHVsZTtpZih1fHwodT0obi5tb2R1bGVzW3QudHlwZXx8YS50eXBlLmRmbHRdfHx7fSkuX21vZHVsZSksIXUpcmV0dXJuITE7aWYoIShpPShyPXUuYXR0cmlidXRlcykmJnJbb10pKXt2YXIgZj11LmJhc2VQbG90TW9kdWxlO2YmJmYuYXR0cmlidXRlcyYmKGk9Zi5hdHRyaWJ1dGVzW29dKX1pfHwoaT1hW29dKX1yZXR1cm4gdihpLGUscyl9LHIuZ2V0TGF5b3V0VmFsT2JqZWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYoZnVuY3Rpb24odCxlKXt2YXIgcixpLGEscyxsPXQuX2Jhc2VQbG90TW9kdWxlcztpZihsKXt2YXIgYztmb3Iocj0wO3I8bC5sZW5ndGg7cisrKXtpZigoYT1sW3JdKS5hdHRyUmVnZXgmJmEuYXR0clJlZ2V4LnRlc3QoZSkpe2lmKGEubGF5b3V0QXR0ck92ZXJyaWRlcylyZXR1cm4gYS5sYXlvdXRBdHRyT3ZlcnJpZGVzOyFjJiZhLmxheW91dEF0dHJpYnV0ZXMmJihjPWEubGF5b3V0QXR0cmlidXRlcyl9dmFyIHU9YS5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcztpZih1JiZlIGluIHUpcmV0dXJuIHVbZV19aWYoYylyZXR1cm4gY312YXIgZj10Ll9tb2R1bGVzO2lmKGYpZm9yKHI9MDtyPGYubGVuZ3RoO3IrKylpZigocz1mW3JdLmxheW91dEF0dHJpYnV0ZXMpJiZlIGluIHMpcmV0dXJuIHNbZV07Zm9yKGkgaW4gbi5jb21wb25lbnRzUmVnaXN0cnkpe2lmKCJjb2xvcnNjYWxlIj09PShhPW4uY29tcG9uZW50c1JlZ2lzdHJ5W2ldKS5uYW1lJiYwPT09ZS5pbmRleE9mKCJjb2xvcmF4aXMiKSlyZXR1cm4gYS5sYXlvdXRBdHRyaWJ1dGVzW2VdO2lmKCFhLnNjaGVtYSYmZT09PWEubmFtZSlyZXR1cm4gYS5sYXlvdXRBdHRyaWJ1dGVzfXJldHVybiBlIGluIG8mJm9bZV19KHQsZVswXSksZSwxKX19LHsiLi4vbGliIjo3NzYsIi4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIjo4MjEsIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vcGxvdHMvZnJhbWVfYXR0cmlidXRlcyI6ODU3LCIuLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyI6ODgxLCIuLi9yZWdpc3RyeSI6OTA0LCIuL2VkaXRfdHlwZXMiOjgwOSwiLi9wbG90X2NvbmZpZyI6ODE0fV0sODE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9e25hbWU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6Im5vbmUifX07ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCYmInN0cmluZyI9PXR5cGVvZiB0fWZ1bmN0aW9uIHModCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4icyIhPT10LmNoYXJBdChlKSYmbi53YXJuKCJiYWQgYXJndW1lbnQgdG8gYXJyYXlEZWZhdWx0S2V5OiAiK3QpLHQuc3Vic3RyKDAsdC5sZW5ndGgtMSkrImRlZmF1bHRzIn1hLnRlbXBsYXRlaXRlbW5hbWU9e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxyLnRlbXBsYXRlZEFycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuX2lzTGlua2VkVG9BcnJheT10LGUubmFtZT1hLm5hbWUsZS50ZW1wbGF0ZWl0ZW1uYW1lPWEudGVtcGxhdGVpdGVtbmFtZSxlfSxyLnRyYWNlVGVtcGxhdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYT17fTtmb3IoZSBpbiB0KXI9dFtlXSxBcnJheS5pc0FycmF5KHIpJiZyLmxlbmd0aCYmKGFbZV09MCk7cmV0dXJue25ld1RyYWNlOmZ1bmN0aW9uKG8pe3ZhciBzPXt0eXBlOmU9bi5jb2VyY2Uobyx7fSxpLCJ0eXBlIiksX3RlbXBsYXRlOm51bGx9O2lmKGUgaW4gYSl7cj10W2VdO3ZhciBsPWFbZV0lci5sZW5ndGg7YVtlXSsrLHMuX3RlbXBsYXRlPXJbbF19cmV0dXJuIHN9fX0sci5uZXdDb250YWluZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQuX3RlbXBsYXRlLGE9aSYmKGlbZV18fHImJmlbcl0pO3JldHVybiBuLmlzUGxhaW5PYmplY3QoYSl8fChhPW51bGwpLHRbZV09e190ZW1wbGF0ZTphfX0sci5hcnJheVRlbXBsYXRlcj1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fdGVtcGxhdGUsaT1uJiZuW3MoZSldLGE9biYmbltlXTtBcnJheS5pc0FycmF5KGEpJiZhLmxlbmd0aHx8KGE9W10pO3ZhciBsPXt9O3JldHVybntuZXdJdGVtOmZ1bmN0aW9uKHQpe3ZhciBlPXtuYW1lOnQubmFtZSxfaW5wdXQ6dH0sbj1lLnRlbXBsYXRlaXRlbW5hbWU9dC50ZW1wbGF0ZWl0ZW1uYW1lO2lmKCFvKG4pKXJldHVybiBlLl90ZW1wbGF0ZT1pLGU7Zm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBjPWFbc107aWYoYy5uYW1lPT09bilyZXR1cm4gbFtuXT0xLGUuX3RlbXBsYXRlPWMsZX1yZXR1cm4gZVtyXT10W3JdfHwhMSxlLl90ZW1wbGF0ZT0hMSxlfSxkZWZhdWx0SXRlbXM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgcj1hW2VdLG49ci5uYW1lO2lmKG8obikmJiFsW25dKXt2YXIgaT17X3RlbXBsYXRlOnIsbmFtZTpuLF9pbnB1dDp7X3RlbXBsYXRlaXRlbW5hbWU6bn19O2kudGVtcGxhdGVpdGVtbmFtZT1yLnRlbXBsYXRlaXRlbW5hbWUsdC5wdXNoKGkpLGxbbl09MX19cmV0dXJuIHR9fX0sci5hcnJheURlZmF1bHRLZXk9cyxyLmFycmF5RWRpdG9yPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT0obi5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpfHxbXSkubGVuZ3RoLGE9ci5faW5kZXgsbz1hPj1pJiYoci5faW5wdXR8fHt9KS5fdGVtcGxhdGVpdGVtbmFtZTtvJiYoYT1pKTt2YXIgcyxsPWUrIlsiK2ErIl0iO2Z1bmN0aW9uIGMoKXtzPXt9LG8mJihzW2xdPXt9LHNbbF0udGVtcGxhdGVpdGVtbmFtZT1vKX1mdW5jdGlvbiB1KHQsZSl7bz9uLm5lc3RlZFByb3BlcnR5KHNbbF0sdCkuc2V0KGUpOnNbbCsiLiIrdF09ZX1mdW5jdGlvbiBmKCl7dmFyIHQ9cztyZXR1cm4gYygpLHR9cmV0dXJuIGMoKSx7bW9kaWZ5QmFzZTpmdW5jdGlvbih0LGUpe3NbdF09ZX0sbW9kaWZ5SXRlbTp1LGdldFVwZGF0ZU9iajpmLGFwcGx5VXBkYXRlOmZ1bmN0aW9uKGUscil7ZSYmdShlLHIpO3ZhciBpPWYoKTtmb3IodmFyIGEgaW4gaSluLm5lc3RlZFByb3BlcnR5KHQsYSkuc2V0KGlbYV0pfX19fSx7Ii4uL2xpYiI6Nzc2LCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjN9XSw4MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vcmVnaXN0cnkiKSxhPXQoIi4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi9saWIiKSxzPXQoIi4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyIpLGw9dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLGM9dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIiksdT10KCIuLi9jb21wb25lbnRzL3RpdGxlcyIpLGY9dCgiLi4vY29tcG9uZW50cy9tb2RlYmFyIiksaD10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHA9dCgiLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLGQ9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIiksbT1kLmVuZm9yY2UsZz1kLmNsZWFuLHY9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSIpLmRvQXV0b1JhbmdlO2Z1bmN0aW9uIHkodCxlLHIpe2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dWzBdLGE9cltuXVsxXTtpZighKGlbMF0+PXRbMV18fGlbMV08PXRbMF0pJiYoYVswXTxlWzFdJiZhWzFdPmVbMF0pKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHgodCl7dmFyIGUsaSxzLHUsZCxtLGc9dC5fZnVsbExheW91dCx2PWcuX3NpemUseD12LnAsXz1oLmxpc3QodCwiIiwhMCk7aWYoZy5fcGFwZXJkaXYuc3R5bGUoe3dpZHRoOnQuX2NvbnRleHQucmVzcG9uc2l2ZSYmZy5hdXRvc2l6ZSYmIXQuX2NvbnRleHQuX2hhc1plcm9XaWR0aCYmIXQubGF5b3V0LndpZHRoPyIxMDAlIjpnLndpZHRoKyJweCIsaGVpZ2h0OnQuX2NvbnRleHQucmVzcG9uc2l2ZSYmZy5hdXRvc2l6ZSYmIXQuX2NvbnRleHQuX2hhc1plcm9IZWlnaHQmJiF0LmxheW91dC5oZWlnaHQ/IjEwMCUiOmcuaGVpZ2h0KyJweCJ9KS5zZWxlY3RBbGwoIi5tYWluLXN2ZyIpLmNhbGwoYy5zZXRTaXplLGcud2lkdGgsZy5oZWlnaHQpLHQuX2NvbnRleHQuc2V0QmFja2dyb3VuZCh0LGcucGFwZXJfYmdjb2xvciksci5kcmF3TWFpblRpdGxlKHQpLGYubWFuYWdlKHQpLCFnLl9oYXMoImNhcnRlc2lhbiIpKXJldHVybiBhLnByZXZpb3VzUHJvbWlzZXModCk7ZnVuY3Rpb24gVCh0LGUscil7dmFyIG49dC5fbHcvMjtyZXR1cm4ieCI9PT10Ll9pZC5jaGFyQXQoMCk/ZT8idG9wIj09PXI/ZS5fb2Zmc2V0LXgtbjplLl9vZmZzZXQrZS5fbGVuZ3RoK3grbjp2LnQrdi5oKigxLSh0LnBvc2l0aW9ufHwwKSkrbiUxOmU/InJpZ2h0Ij09PXI/ZS5fb2Zmc2V0K2UuX2xlbmd0aCt4K246ZS5fb2Zmc2V0LXgtbjp2Lmwrdi53Kih0LnBvc2l0aW9ufHwwKStuJTF9Zm9yKGU9MDtlPF8ubGVuZ3RoO2UrKyl7dmFyIGs9KHU9X1tlXSkuX2FuY2hvckF4aXM7dS5fbGluZXBvc2l0aW9ucz17fSx1Ll9sdz1jLmNyaXNwUm91bmQodCx1LmxpbmV3aWR0aCwxKSx1Ll9tYWluTGluZVBvc2l0aW9uPVQodSxrLHUuc2lkZSksdS5fbWFpbk1pcnJvclBvc2l0aW9uPXUubWlycm9yJiZrP1QodSxrLHAuT1BQT1NJVEVfU0lERVt1LnNpZGVdKTpudWxsfXZhciBBPVtdLE09W10sUz1bXSxFPTE9PT1sLm9wYWNpdHkoZy5wYXBlcl9iZ2NvbG9yKSYmMT09PWwub3BhY2l0eShnLnBsb3RfYmdjb2xvcikmJmcucGFwZXJfYmdjb2xvcj09PWcucGxvdF9iZ2NvbG9yO2ZvcihpIGluIGcuX3Bsb3RzKWlmKChzPWcuX3Bsb3RzW2ldKS5tYWlucGxvdClzLmJnJiZzLmJnLnJlbW92ZSgpLHMuYmc9dm9pZCAwO2Vsc2V7dmFyIEw9cy54YXhpcy5kb21haW4sQz1zLnlheGlzLmRvbWFpbixQPXMucGxvdGdyb3VwO2lmKHkoTCxDLFMpKXt2YXIgST1QLm5vZGUoKSxPPXMuYmc9by5lbnN1cmVTaW5nbGUoUCwicmVjdCIsImJnIik7SS5pbnNlcnRCZWZvcmUoTy5ub2RlKCksSS5jaGlsZE5vZGVzWzBdKSxNLnB1c2goaSl9ZWxzZSBQLnNlbGVjdCgicmVjdC5iZyIpLnJlbW92ZSgpLFMucHVzaChbTCxDXSksRXx8KEEucHVzaChpKSxNLnB1c2goaSkpfXZhciB6LEQsUixGLEIsTixqLFUsVixILHEsRyxZLFc9Zy5fYmdMYXllci5zZWxlY3RBbGwoIi5iZyIpLmRhdGEoQSk7Zm9yKFcuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJiZyIsITApLFcuZXhpdCgpLnJlbW92ZSgpLFcuZWFjaCgoZnVuY3Rpb24odCl7Zy5fcGxvdHNbdF0uYmc9bi5zZWxlY3QodGhpcyl9KSksZT0wO2U8TS5sZW5ndGg7ZSsrKXM9Zy5fcGxvdHNbTVtlXV0sZD1zLnhheGlzLG09cy55YXhpcyxzLmJnJiZ2b2lkIDAhPT1kLl9vZmZzZXQmJnZvaWQgMCE9PW0uX29mZnNldCYmcy5iZy5jYWxsKGMuc2V0UmVjdCxkLl9vZmZzZXQteCxtLl9vZmZzZXQteCxkLl9sZW5ndGgrMip4LG0uX2xlbmd0aCsyKngpLmNhbGwobC5maWxsLGcucGxvdF9iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwwKTtpZighZy5faGFzT25seUxhcmdlU3Bsb21zKWZvcihpIGluIGcuX3Bsb3RzKXtzPWcuX3Bsb3RzW2ldLGQ9cy54YXhpcyxtPXMueWF4aXM7dmFyIFgsWixKPXMuY2xpcElkPSJjbGlwIitnLl91aWQraSsicGxvdCIsSz1vLmVuc3VyZVNpbmdsZUJ5SWQoZy5fY2xpcHMsImNsaXBQYXRoIixKLChmdW5jdGlvbih0KXt0LmNsYXNzZWQoInBsb3RjbGlwIiwhMCkuYXBwZW5kKCJyZWN0Iil9KSk7cy5jbGlwUmVjdD1LLnNlbGVjdCgicmVjdCIpLmF0dHIoe3dpZHRoOmQuX2xlbmd0aCxoZWlnaHQ6bS5fbGVuZ3RofSksYy5zZXRUcmFuc2xhdGUocy5wbG90LGQuX29mZnNldCxtLl9vZmZzZXQpLHMuX2hhc0NsaXBPbkF4aXNGYWxzZT8oWD1udWxsLFo9Sik6KFg9SixaPW51bGwpLGMuc2V0Q2xpcFVybChzLnBsb3QsWCx0KSxzLmxheWVyQ2xpcElkPVp9ZnVuY3Rpb24gUSh0KXtyZXR1cm4iTSIreisiLCIrdCsiSCIrRH1mdW5jdGlvbiAkKHQpe3JldHVybiJNIitkLl9vZmZzZXQrIiwiK3QrImgiK2QuX2xlbmd0aH1mdW5jdGlvbiB0dCh0KXtyZXR1cm4iTSIrdCsiLCIrVSsiViIran1mdW5jdGlvbiBldCh0KXtyZXR1cm4iTSIrdCsiLCIrbS5fb2Zmc2V0KyJ2IittLl9sZW5ndGh9ZnVuY3Rpb24gcnQodCxlLHIpe2lmKCF0LnNob3dsaW5lfHxpIT09dC5fbWFpblN1YnBsb3QpcmV0dXJuIiI7aWYoIXQuX2FuY2hvckF4aXMpcmV0dXJuIHIodC5fbWFpbkxpbmVQb3NpdGlvbik7dmFyIG49ZSh0Ll9tYWluTGluZVBvc2l0aW9uKTtyZXR1cm4gdC5taXJyb3ImJihuKz1lKHQuX21haW5NaXJyb3JQb3NpdGlvbikpLG59Zm9yKGkgaW4gZy5fcGxvdHMpe3M9Zy5fcGxvdHNbaV0sZD1zLnhheGlzLG09cy55YXhpczt2YXIgbnQ9Ik0wLDAiO2IoZCxpKSYmKEI9dyhkLCJsZWZ0IixtLF8pLHo9ZC5fb2Zmc2V0LShCP3grQjowKSxOPXcoZCwicmlnaHQiLG0sXyksRD1kLl9vZmZzZXQrZC5fbGVuZ3RoKyhOP3grTjowKSxSPVQoZCxtLCJib3R0b20iKSxGPVQoZCxtLCJ0b3AiKSwhKFk9IWQuX2FuY2hvckF4aXN8fGkhPT1kLl9tYWluU3VicGxvdCl8fCJhbGx0aWNrcyIhPT1kLm1pcnJvciYmImFsbCIhPT1kLm1pcnJvcnx8KGQuX2xpbmVwb3NpdGlvbnNbaV09W1IsRl0pLG50PXJ0KGQsUSwkKSxZJiZkLnNob3dsaW5lJiYoImFsbCI9PT1kLm1pcnJvcnx8ImFsbHRpY2tzIj09PWQubWlycm9yKSYmKG50Kz1RKFIpK1EoRikpLHMueGxpbmVzLnN0eWxlKCJzdHJva2Utd2lkdGgiLGQuX2x3KyJweCIpLmNhbGwobC5zdHJva2UsZC5zaG93bGluZT9kLmxpbmVjb2xvcjoicmdiYSgwLDAsMCwwKSIpKSxzLnhsaW5lcy5hdHRyKCJkIixudCk7dmFyIGl0PSJNMCwwIjtiKG0saSkmJihxPXcobSwiYm90dG9tIixkLF8pLGo9bS5fb2Zmc2V0K20uX2xlbmd0aCsocT94OjApLEc9dyhtLCJ0b3AiLGQsXyksVT1tLl9vZmZzZXQtKEc/eDowKSxWPVQobSxkLCJsZWZ0IiksSD1UKG0sZCwicmlnaHQiKSwhKFk9IW0uX2FuY2hvckF4aXN8fGkhPT1tLl9tYWluU3VicGxvdCl8fCJhbGx0aWNrcyIhPT1tLm1pcnJvciYmImFsbCIhPT1tLm1pcnJvcnx8KG0uX2xpbmVwb3NpdGlvbnNbaV09W1YsSF0pLGl0PXJ0KG0sdHQsZXQpLFkmJm0uc2hvd2xpbmUmJigiYWxsIj09PW0ubWlycm9yfHwiYWxsdGlja3MiPT09bS5taXJyb3IpJiYoaXQrPXR0KFYpK3R0KEgpKSxzLnlsaW5lcy5zdHlsZSgic3Ryb2tlLXdpZHRoIixtLl9sdysicHgiKS5jYWxsKGwuc3Ryb2tlLG0uc2hvd2xpbmU/bS5saW5lY29sb3I6InJnYmEoMCwwLDAsMCkiKSkscy55bGluZXMuYXR0cigiZCIsaXQpfXJldHVybiBoLm1ha2VDbGlwUGF0aHModCksYS5wcmV2aW91c1Byb21pc2VzKHQpfWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4odC50aWNrc3x8dC5zaG93bGluZSkmJihlPT09dC5fbWFpblN1YnBsb3R8fCJhbGwiPT09dC5taXJyb3J8fCJhbGx0aWNrcyI9PT10Lm1pcnJvcil9ZnVuY3Rpb24gXyh0LGUscil7aWYoIXIuc2hvd2xpbmV8fCFyLl9sdylyZXR1cm4hMTtpZigiYWxsIj09PXIubWlycm9yfHwiYWxsdGlja3MiPT09ci5taXJyb3IpcmV0dXJuITA7dmFyIG49ci5fYW5jaG9yQXhpcztpZighbilyZXR1cm4hMTt2YXIgaT1wLkZST01fQkxbZV07cmV0dXJuIHIuc2lkZT09PWU/bi5kb21haW5baV09PT10LmRvbWFpbltpXTpyLm1pcnJvciYmbi5kb21haW5bMS1pXT09PXQuZG9tYWluWzEtaV19ZnVuY3Rpb24gdyh0LGUscixuKXtpZihfKHQsZSxyKSlyZXR1cm4gci5fbHc7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07aWYoYS5fbWFpbkF4aXM9PT1yLl9tYWluQXhpcyYmXyh0LGUsYSkpcmV0dXJuIGEuX2x3fXJldHVybiAwfWZ1bmN0aW9uIFQodCxlKXt2YXIgcj10LnRpdGxlLG49dC5fc2l6ZSxpPTA7c3dpdGNoKCJzdGFydCI9PT1lP2k9ci5wYWQubDoiZW5kIj09PWUmJihpPS1yLnBhZC5yKSxyLnhyZWYpe2Nhc2UicGFwZXIiOnJldHVybiBuLmwrbi53KnIueCtpO2Nhc2UiY29udGFpbmVyIjpkZWZhdWx0OnJldHVybiB0LndpZHRoKnIueCtpfX1mdW5jdGlvbiBrKHQsZSl7dmFyIHI9dC50aXRsZSxuPXQuX3NpemUsaT0wO2lmKCIwZW0iIT09ZSYmZT9lPT09cC5DQVBfU0hJRlQrImVtIiYmKGk9ci5wYWQudCk6aT0tci5wYWQuYiwiYXV0byI9PT1yLnkpcmV0dXJuIG4udC8yO3N3aXRjaChyLnlyZWYpe2Nhc2UicGFwZXIiOnJldHVybiBuLnQrbi5oLW4uaCpyLnkraTtjYXNlImNvbnRhaW5lciI6ZGVmYXVsdDpyZXR1cm4gdC5oZWlnaHQtdC5oZWlnaHQqci55K2l9fXIubGF5b3V0U3R5bGVzPWZ1bmN0aW9uKHQpe3JldHVybiBvLnN5bmNPckFzeW5jKFthLmRvQXV0b01hcmdpbix4XSx0KX0sci5kcmF3TWFpblRpdGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1mdW5jdGlvbih0KXt2YXIgZT10LnRpdGxlLHI9Im1pZGRsZSI7by5pc1JpZ2h0QW5jaG9yKGUpP3I9ImVuZCI6by5pc0xlZnRBbmNob3IoZSkmJihyPSJzdGFydCIpO3JldHVybiByfShlKSxuPWZ1bmN0aW9uKHQpe3ZhciBlPXQudGl0bGUscj0iMGVtIjtvLmlzVG9wQW5jaG9yKGUpP3I9cC5DQVBfU0hJRlQrImVtIjpvLmlzTWlkZGxlQW5jaG9yKGUpJiYocj1wLk1JRF9TSElGVCsiZW0iKTtyZXR1cm4gcn0oZSk7dS5kcmF3KHQsImd0aXRsZSIse3Byb3BDb250YWluZXI6ZSxwcm9wTmFtZToidGl0bGUudGV4dCIscGxhY2Vob2xkZXI6ZS5fZGZsdFRpdGxlLnBsb3QsYXR0cmlidXRlczp7eDpUKGUscikseTprKGUsbiksInRleHQtYW5jaG9yIjpyLGR5Om59fSl9LHIuZG9UcmFjZVN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlLG49dC5jYWxjZGF0YSxvPVtdO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspe3ZhciBsPW5bZV0sYz1sWzBdfHx7fSx1PWMudHJhY2V8fHt9LGY9dS5fbW9kdWxlfHx7fSxoPWYuYXJyYXlzVG9DYWxjZGF0YTtoJiZoKGwsdSk7dmFyIHA9Zi5lZGl0U3R5bGU7cCYmby5wdXNoKHtmbjpwLGNkMDpjfSl9aWYoby5sZW5ndGgpe2ZvcihlPTA7ZTxvLmxlbmd0aDtlKyspe3ZhciBkPW9bZV07ZC5mbih0LGQuY2QwKX1zKHQpLHIucmVkcmF3UmVnbFRyYWNlcyh0KX1yZXR1cm4gYS5zdHlsZSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb0NvbG9yQmFycz1mdW5jdGlvbih0KXtyZXR1cm4gaS5nZXRDb21wb25lbnRNZXRob2QoImNvbG9yYmFyIiwiZHJhdyIpKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5sYXlvdXRSZXBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9dC5sYXlvdXQ7cmV0dXJuIHQubGF5b3V0PXZvaWQgMCxpLmNhbGwoIl9kb1Bsb3QiLHQsIiIsZSl9LHIuZG9MZWdlbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikodCksYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvVGlja3NSZWxheW91dD1mdW5jdGlvbih0KXtyZXR1cm4gaC5kcmF3KHQsInJlZHJhdyIpLHQuX2Z1bGxMYXlvdXQuX2hhc09ubHlMYXJnZVNwbG9tcyYmKGkuc3VicGxvdHNSZWdpc3RyeS5zcGxvbS51cGRhdGVHcmlkKHQpLHModCksci5yZWRyYXdSZWdsVHJhY2VzKHQpKSxyLmRyYXdNYWluVGl0bGUodCksYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvTW9kZUJhcj1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2YubWFuYWdlKHQpO2Zvcih2YXIgcj0wO3I8ZS5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aDtyKyspe3ZhciBuPWUuX2Jhc2VQbG90TW9kdWxlc1tyXS51cGRhdGVGeDtuJiZuKHQpfXJldHVybiBhLnByZXZpb3VzUHJvbWlzZXModCl9LHIuZG9DYW1lcmE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDNkLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9ZVtyW25dXTtpLl9zY2VuZS5zZXRWaWV3cG9ydChpKX19LHIuZHJhd0RhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtzKHQpO2Zvcih2YXIgbj1lLl9iYXNlUGxvdE1vZHVsZXMsbz0wO288bi5sZW5ndGg7bysrKW5bb10ucGxvdCh0KTtyZXR1cm4gci5yZWRyYXdSZWdsVHJhY2VzKHQpLGEuc3R5bGUodCksaS5nZXRDb21wb25lbnRNZXRob2QoInNoYXBlcyIsImRyYXciKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoImltYWdlcyIsImRyYXciKSh0KSxlLl9yZXBsb3R0aW5nPSExLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5yZWRyYXdSZWdsVHJhY2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYoZS5faGFzKCJyZWdsIikpe3ZhciByLG4saT10Ll9mdWxsRGF0YSxhPVtdLHM9W107Zm9yKGUuX2hhc09ubHlMYXJnZVNwbG9tcyYmZS5fc3Bsb21HcmlkLmRyYXcoKSxyPTA7cjxpLmxlbmd0aDtyKyspe3ZhciBsPWlbcl07ITA9PT1sLnZpc2libGUmJjAhPT1sLl9sZW5ndGgmJigic3Bsb20iPT09bC50eXBlP2UuX3NwbG9tU2NlbmVzW2wudWlkXS5kcmF3KCk6InNjYXR0ZXJnbCI9PT1sLnR5cGU/by5wdXNoVW5pcXVlKGEsbC54YXhpcytsLnlheGlzKToic2NhdHRlcnBvbGFyZ2wiPT09bC50eXBlJiZvLnB1c2hVbmlxdWUocyxsLnN1YnBsb3QpKX1mb3Iocj0wO3I8YS5sZW5ndGg7cisrKShuPWUuX3Bsb3RzW2Fbcl1dKS5fc2NlbmUmJm4uX3NjZW5lLmRyYXcoKTtmb3Iocj0wO3I8cy5sZW5ndGg7cisrKShuPWVbc1tyXV0uX3N1YnBsb3QpLl9zY2VuZSYmbi5fc2NlbmUuZHJhdygpfX0sci5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPWgubGlzdCh0LCIiLCEwKSxuPXt9LGk9MDtpPHIubGVuZ3RoO2krKylpZighblsoZT1yW2ldKS5faWRdKXtuW2UuX2lkXT0xLGcodCxlKSx2KHQsZSk7dmFyIGE9ZS5fbWF0Y2hHcm91cDtpZihhKWZvcih2YXIgbyBpbiBhKXt2YXIgcz1oLmdldEZyb21JZCh0LG8pO3YodCxzLGUucmFuZ2UpLG5bb109MX19bSh0KX0sci5maW5hbERyYXc9ZnVuY3Rpb24odCl7aS5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNlbGVjdG9yIiwiZHJhdyIpKHQpfSxyLmRyYXdNYXJnaW5QdXNoZXJzPWZ1bmN0aW9uKHQpe2kuZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2VsZWN0b3IiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoInNsaWRlcnMiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoInVwZGF0ZW1lbnVzIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJjb2xvcmJhciIsImRyYXciKSh0KX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vY29tcG9uZW50cy9tb2RlYmFyIjo3MDIsIi4uL2NvbXBvbmVudHMvdGl0bGVzIjo3MzcsIi4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjc0NCwiLi4vbGliIjo3NzYsIi4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyI6NzYwLCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo4MjYsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyI6ODM1LCIuLi9wbG90cy9wbG90cyI6ODkwLCIuLi9yZWdpc3RyeSI6OTA0LCJAcGxvdGx5L2QzIjo1OH1dLDgxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPW4uaXNQbGFpbk9iamVjdCxhPXQoIi4vcGxvdF9zY2hlbWEiKSxvPXQoIi4uL3Bsb3RzL3Bsb3RzIikscz10KCIuLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuL3Bsb3RfdGVtcGxhdGUiKSxjPXQoIi4vcGxvdF9jb25maWciKS5kZmx0Q29uZmlnO2Z1bmN0aW9uIHUodCxlKXt0PW4uZXh0ZW5kRGVlcCh7fSx0KTt2YXIgcixhLG89T2JqZWN0LmtleXModCkuc29ydCgpO2Z1bmN0aW9uIHMoZSxyLG4pe2lmKGkocikmJmkoZSkpdShlLHIpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShyKSYmQXJyYXkuaXNBcnJheShlKSl7dmFyIG89bC5hcnJheVRlbXBsYXRlcih7X3RlbXBsYXRlOnR9LG4pO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV0sYz1vLm5ld0l0ZW0ocykuX3RlbXBsYXRlO2MmJnUoYyxzKX12YXIgZj1vLmRlZmF1bHRJdGVtcygpO2ZvcihhPTA7YTxmLmxlbmd0aDthKyspci5wdXNoKGZbYV0uX3RlbXBsYXRlKTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKWRlbGV0ZSByW2FdLnRlbXBsYXRlaXRlbW5hbWV9fWZvcihyPTA7cjxvLmxlbmd0aDtyKyspe3ZhciBjPW9bcl0saD10W2NdO2lmKGMgaW4gZT9zKGgsZVtjXSxjKTplW2NdPWgsZihjKT09PWMpZm9yKHZhciBwIGluIGUpe3ZhciBkPWYocCk7cD09PWR8fGQhPT1jfHxwIGluIHR8fHMoaCxlW3BdLGMpfX19ZnVuY3Rpb24gZih0KXtyZXR1cm4gdC5yZXBsYWNlKC9bMC05XSskLywiIil9ZnVuY3Rpb24gaCh0LGUscixhLG8pe3ZhciBzPW8mJnIobyk7Zm9yKHZhciBjIGluIHQpe3ZhciB1PXRbY10scD1tKHQsYyxhKSxkPW0odCxjLG8pLGc9cihkKTtpZighZyl7dmFyIHY9ZihjKTt2IT09YyYmKGc9cihkPW0odCx2LG8pKSl9aWYoKCFzfHxzIT09ZykmJiEoIWd8fGcuX25vVGVtcGxhdGluZ3x8ImRhdGFfYXJyYXkiPT09Zy52YWxUeXBlfHxnLmFycmF5T2smJkFycmF5LmlzQXJyYXkodSkpKWlmKCFnLnZhbFR5cGUmJmkodSkpaCh1LGUscixwLGQpO2Vsc2UgaWYoZy5faXNMaW5rZWRUb0FycmF5JiZBcnJheS5pc0FycmF5KHUpKWZvcih2YXIgeT0hMSx4PTAsYj17fSxfPTA7Xzx1Lmxlbmd0aDtfKyspe3ZhciB3PXVbX107aWYoaSh3KSl7dmFyIFQ9dy5uYW1lO2lmKFQpYltUXXx8KGgodyxlLHIsbSh1LHgscCksbSh1LHgsZCkpLHgrKyxiW1RdPTEpO2Vsc2UgaWYoIXkpe3ZhciBrPW0odCxsLmFycmF5RGVmYXVsdEtleShjKSxhKSxBPW0odSx4LHApO2godyxlLHIsQSxtKHUseCxkKSk7dmFyIE09bi5uZXN0ZWRQcm9wZXJ0eShlLEEpO24ubmVzdGVkUHJvcGVydHkoZSxrKS5zZXQoTS5nZXQoKSksTS5zZXQobnVsbCkseT0hMH19fWVsc2V7bi5uZXN0ZWRQcm9wZXJ0eShlLHApLnNldCh1KX19fWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gYS5nZXRMYXlvdXRWYWxPYmplY3QodCxuLm5lc3RlZFByb3BlcnR5KHt9LGUpLnBhcnRzKX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuIGEuZ2V0VHJhY2VWYWxPYmplY3QodCxuLm5lc3RlZFByb3BlcnR5KHt9LGUpLnBhcnRzKX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gcj9BcnJheS5pc0FycmF5KHQpP3IrIlsiK2UrIl0iOnIrIi4iK2U6ZX1mdW5jdGlvbiBnKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKGkodFtlXSkpcmV0dXJuITB9ZnVuY3Rpb24gdih0KXt2YXIgZTtzd2l0Y2godC5jb2RlKXtjYXNlImRhdGEiOmU9IlRoZSB0ZW1wbGF0ZSBoYXMgbm8ga2V5IGRhdGEuIjticmVhaztjYXNlImxheW91dCI6ZT0iVGhlIHRlbXBsYXRlIGhhcyBubyBrZXkgbGF5b3V0LiI7YnJlYWs7Y2FzZSJtaXNzaW5nIjplPXQucGF0aD8iVGhlcmUgYXJlIG5vIHRlbXBsYXRlcyBmb3IgaXRlbSAiK3QucGF0aCsiIHdpdGggbmFtZSAiK3QudGVtcGxhdGVpdGVtbmFtZToiVGhlcmUgYXJlIG5vIHRlbXBsYXRlcyBmb3IgdHJhY2UgIit0LmluZGV4KyIsIG9mIHR5cGUgIit0LnRyYWNlVHlwZSsiLiI7YnJlYWs7Y2FzZSJ1bnVzZWQiOmU9dC5wYXRoPyJUaGUgdGVtcGxhdGUgaXRlbSBhdCAiK3QucGF0aCsiIHdhcyBub3QgdXNlZCBpbiBjb25zdHJ1Y3RpbmcgdGhlIHBsb3QuIjp0LmRhdGFDb3VudD8iU29tZSBvZiB0aGUgdGVtcGxhdGVzIG9mIHR5cGUgIit0LnRyYWNlVHlwZSsiIHdlcmUgbm90IHVzZWQuIFRoZSB0ZW1wbGF0ZSBoYXMgIit0LnRlbXBsYXRlQ291bnQrIiB0cmFjZXMsIHRoZSBkYXRhIG9ubHkgaGFzICIrdC5kYXRhQ291bnQrIiBvZiB0aGlzIHR5cGUuIjoiVGhlIHRlbXBsYXRlIGhhcyAiK3QudGVtcGxhdGVDb3VudCsiIHRyYWNlcyBvZiB0eXBlICIrdC50cmFjZVR5cGUrIiBidXQgdGhlcmUgYXJlIG5vbmUgaW4gdGhlIGRhdGEuIjticmVhaztjYXNlInJldXNlZCI6ZT0iU29tZSBvZiB0aGUgdGVtcGxhdGVzIG9mIHR5cGUgIit0LnRyYWNlVHlwZSsiIHdlcmUgdXNlZCBtb3JlIHRoYW4gb25jZS4gVGhlIHRlbXBsYXRlIGhhcyAiK3QudGVtcGxhdGVDb3VudCsiIHRyYWNlcywgdGhlIGRhdGEgaGFzICIrdC5kYXRhQ291bnQrIiBvZiB0aGlzIHR5cGUuIn1yZXR1cm4gdC5tc2c9ZSx0fXIubWFrZVRlbXBsYXRlPWZ1bmN0aW9uKHQpe3Q9bi5pc1BsYWluT2JqZWN0KHQpP3Q6bi5nZXRHcmFwaERpdih0KSx0PW4uZXh0ZW5kRGVlcCh7X2NvbnRleHQ6Y30se2RhdGE6dC5kYXRhLGxheW91dDp0LmxheW91dH0pLG8uc3VwcGx5RGVmYXVsdHModCk7dmFyIGU9dC5kYXRhfHxbXSxyPXQubGF5b3V0fHx7fTtyLl9iYXNlUGxvdE1vZHVsZXM9dC5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLHIuX21vZHVsZXM9dC5fZnVsbExheW91dC5fbW9kdWxlczt2YXIgYT17ZGF0YTp7fSxsYXlvdXQ6e319O2UuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9e307aCh0LGUsZC5iaW5kKG51bGwsdCkpO3ZhciByPW4uY29lcmNlKHQse30scywidHlwZSIpLGk9YS5kYXRhW3JdO2l8fChpPWEuZGF0YVtyXT1bXSksaS5wdXNoKGUpfSkpLGgocixhLmxheW91dCxwLmJpbmQobnVsbCxyKSksZGVsZXRlIGEubGF5b3V0LnRlbXBsYXRlO3ZhciBsPXIudGVtcGxhdGU7aWYoaShsKSl7dmFyIGYsbSxnLHYseSx4LGI9bC5sYXlvdXQ7aShiKSYmdShiLGEubGF5b3V0KTt2YXIgXz1sLmRhdGE7aWYoaShfKSl7Zm9yKG0gaW4gYS5kYXRhKWlmKGc9X1ttXSxBcnJheS5pc0FycmF5KGcpKXtmb3IoeD0oeT1hLmRhdGFbbV0pLmxlbmd0aCx2PWcubGVuZ3RoLGY9MDtmPHg7ZisrKXUoZ1tmJXZdLHlbZl0pO2ZvcihmPXg7Zjx2O2YrKyl5LnB1c2gobi5leHRlbmREZWVwKHt9LGdbZl0pKX1mb3IobSBpbiBfKW0gaW4gYS5kYXRhfHwoYS5kYXRhW21dPW4uZXh0ZW5kRGVlcChbXSxfW21dKSl9fXJldHVybiBhfSxyLnZhbGlkYXRlVGVtcGxhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmV4dGVuZERlZXAoe30se19jb250ZXh0OmMsZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0fSksYT1yLmxheW91dHx8e307aShlKXx8KGU9YS50ZW1wbGF0ZXx8e30pO3ZhciBzPWUubGF5b3V0LGw9ZS5kYXRhLHU9W107ci5sYXlvdXQ9YSxyLmxheW91dC50ZW1wbGF0ZT1lLG8uc3VwcGx5RGVmYXVsdHMocik7dmFyIGg9ci5fZnVsbExheW91dCxwPXIuX2Z1bGxEYXRhLGQ9e307aWYoaShzKT8oIWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSlpZigiXyIhPT1uLmNoYXJBdCgwKSYmaShlW25dKSl7dmFyIGEsbz1mKG4pLHM9W107Zm9yKGE9MDthPHIubGVuZ3RoO2ErKylzLnB1c2gobShlLG4sclthXSkpLG8hPT1uJiZzLnB1c2gobShlLG8sclthXSkpO2ZvcihhPTA7YTxzLmxlbmd0aDthKyspZFtzW2FdXT0xO3QoZVtuXSxzKX19KGgsWyJsYXlvdXQiXSksZnVuY3Rpb24gdChlLHIpe2Zvcih2YXIgbiBpbiBlKWlmKC0xPT09bi5pbmRleE9mKCJkZWZhdWx0cyIpJiZpKGVbbl0pKXt2YXIgYT1tKGUsbixyKTtkW2FdP3QoZVtuXSxhKTp1LnB1c2goe2NvZGU6InVudXNlZCIscGF0aDphfSl9fShzLCJsYXlvdXQiKSk6dS5wdXNoKHtjb2RlOiJsYXlvdXQifSksaShsKSl7Zm9yKHZhciB5LHg9e30sYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgXz1wW2JdO3hbeT1fLnR5cGVdPSh4W3ldfHwwKSsxLF8uX2Z1bGxJbnB1dC5fdGVtcGxhdGV8fHUucHVzaCh7Y29kZToibWlzc2luZyIsaW5kZXg6Xy5fZnVsbElucHV0LmluZGV4LHRyYWNlVHlwZTp5fSl9Zm9yKHkgaW4gbCl7dmFyIHc9bFt5XS5sZW5ndGgsVD14W3ldfHwwO3c+VD91LnB1c2goe2NvZGU6InVudXNlZCIsdHJhY2VUeXBlOnksdGVtcGxhdGVDb3VudDp3LGRhdGFDb3VudDpUfSk6VD53JiZ1LnB1c2goe2NvZGU6InJldXNlZCIsdHJhY2VUeXBlOnksdGVtcGxhdGVDb3VudDp3LGRhdGFDb3VudDpUfSl9fWVsc2UgdS5wdXNoKHtjb2RlOiJkYXRhIn0pO2lmKGZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSlpZigiXyIhPT1uLmNoYXJBdCgwKSl7dmFyIGE9ZVtuXSxvPW0oZSxuLHIpO2koYSk/KEFycmF5LmlzQXJyYXkoZSkmJiExPT09YS5fdGVtcGxhdGUmJmEudGVtcGxhdGVpdGVtbmFtZSYmdS5wdXNoKHtjb2RlOiJtaXNzaW5nIixwYXRoOm8sdGVtcGxhdGVpdGVtbmFtZTphLnRlbXBsYXRlaXRlbW5hbWV9KSx0KGEsbykpOkFycmF5LmlzQXJyYXkoYSkmJmcoYSkmJnQoYSxvKX19KHtkYXRhOnAsbGF5b3V0Omh9LCIiKSx1Lmxlbmd0aClyZXR1cm4gdS5tYXAodil9fSx7Ii4uL2xpYiI6Nzc2LCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4uL3Bsb3RzL3Bsb3RzIjo4OTAsIi4vcGxvdF9jb25maWciOjgxNCwiLi9wbG90X3NjaGVtYSI6ODE1LCIuL3Bsb3RfdGVtcGxhdGUiOjgxNn1dLDgxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi9wbG90X2FwaSIpLGE9dCgiLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uL2xpYiIpLHM9dCgiLi4vc25hcHNob3QvaGVscGVycyIpLGw9dCgiLi4vc25hcHNob3QvdG9zdmciKSxjPXQoIi4uL3NuYXBzaG90L3N2Z3RvaW1nIiksdT10KCIuLi92ZXJzaW9uIikudmVyc2lvbixmPXtmb3JtYXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBuZyIsImpwZWciLCJ3ZWJwIiwic3ZnIiwiZnVsbC1qc29uIl0sZGZsdDoicG5nIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjF9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixtaW46MX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzZXRCYWNrZ3JvdW5kOnt2YWxUeXBlOiJhbnkiLGRmbHQ6ITF9LGltYWdlRGF0YU9ubHk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9fTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixoLHAsZDtmdW5jdGlvbiBtKHQpe3JldHVybiEodCBpbiBlKXx8by52YWxpZGF0ZShlW3RdLGZbdF0pfWlmKGU9ZXx8e30sby5pc1BsYWluT2JqZWN0KHQpPyhyPXQuZGF0YXx8W10saD10LmxheW91dHx8e30scD10LmNvbmZpZ3x8e30sZD17fSk6KHQ9by5nZXRHcmFwaERpdih0KSxyPW8uZXh0ZW5kRGVlcChbXSx0LmRhdGEpLGg9by5leHRlbmREZWVwKHt9LHQubGF5b3V0KSxwPXQuX2NvbnRleHQsZD10Ll9mdWxsTGF5b3V0fHx7fSksIW0oIndpZHRoIikmJm51bGwhPT1lLndpZHRofHwhbSgiaGVpZ2h0IikmJm51bGwhPT1lLmhlaWdodCl0aHJvdyBuZXcgRXJyb3IoIkhlaWdodCBhbmQgd2lkdGggc2hvdWxkIGJlIHBpeGVsIHZhbHVlcy4iKTtpZighbSgiZm9ybWF0IikpdGhyb3cgbmV3IEVycm9yKCJFeHBvcnQgZm9ybWF0IGlzIG5vdCAiK28uam9pbjIoZi5mb3JtYXQudmFsdWVzLCIsICIsIiBvciAiKSsiLiIpO3ZhciBnPXt9O2Z1bmN0aW9uIHYodCxyKXtyZXR1cm4gby5jb2VyY2UoZSxnLGYsdCxyKX12YXIgeT12KCJmb3JtYXQiKSx4PXYoIndpZHRoIiksYj12KCJoZWlnaHQiKSxfPXYoInNjYWxlIiksdz12KCJzZXRCYWNrZ3JvdW5kIiksVD12KCJpbWFnZURhdGFPbmx5Iiksaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtrLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsay5zdHlsZS5sZWZ0PSItNTAwMHB4Iixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGspO3ZhciBBPW8uZXh0ZW5kRmxhdCh7fSxoKTt4P0Eud2lkdGg9eDpudWxsPT09ZS53aWR0aCYmbihkLndpZHRoKSYmKEEud2lkdGg9ZC53aWR0aCksYj9BLmhlaWdodD1iOm51bGw9PT1lLmhlaWdodCYmbihkLmhlaWdodCkmJihBLmhlaWdodD1kLmhlaWdodCk7dmFyIE09by5leHRlbmRGbGF0KHt9LHAse19leHBvcnRlZFBsb3Q6ITAsc3RhdGljUGxvdDohMCxzZXRCYWNrZ3JvdW5kOnd9KSxTPXMuZ2V0UmVkcmF3RnVuYyhrKTtmdW5jdGlvbiBFKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQscy5nZXREZWxheShrLl9mdWxsTGF5b3V0KSl9KSl9ZnVuY3Rpb24gTCgpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxlKXt2YXIgcj1sKGsseSxfKSxuPWsuX2Z1bGxMYXlvdXQud2lkdGgsZj1rLl9mdWxsTGF5b3V0LmhlaWdodDtmdW5jdGlvbiBoKCl7aS5wdXJnZShrKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGspfWlmKCJmdWxsLWpzb24iPT09eSl7dmFyIHA9YS5ncmFwaEpzb24oaywhMSwia2VlcGRhdGEiLCJvYmplY3QiLCEwLCEwKTtyZXR1cm4gcC52ZXJzaW9uPXUscD1KU09OLnN0cmluZ2lmeShwKSxoKCksdChUP3A6cy5lbmNvZGVKU09OKHApKX1pZihoKCksInN2ZyI9PT15KXJldHVybiB0KFQ/cjpzLmVuY29kZVNWRyhyKSk7dmFyIGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ZC5pZD1vLnJhbmRzdHIoKSxjKHtmb3JtYXQ6eSx3aWR0aDpuLGhlaWdodDpmLHNjYWxlOl8sY2FudmFzOmQsc3ZnOnIscHJvbWlzZTohMH0pLnRoZW4odCkuY2F0Y2goZSl9KSl9cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LGUpe2kubmV3UGxvdChrLHIsQSxNKS50aGVuKFMpLnRoZW4oRSkudGhlbihMKS50aGVuKChmdW5jdGlvbihlKXt0KGZ1bmN0aW9uKHQpe3JldHVybiBUP3QucmVwbGFjZShzLklNQUdFX1VSTF9QUkVGSVgsIiIpOnR9KGUpKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7ZSh0KX0pKX0pKX19LHsiLi4vbGliIjo3NzYsIi4uL3Bsb3RzL3Bsb3RzIjo4OTAsIi4uL3NuYXBzaG90L2hlbHBlcnMiOjkwOCwiLi4vc25hcHNob3Qvc3ZndG9pbWciOjkxMCwiLi4vc25hcHNob3QvdG9zdmciOjkxMiwiLi4vdmVyc2lvbiI6MTM3NywiLi9wbG90X2FwaSI6ODEzLCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sODIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdHMvcGxvdHMiKSxhPXQoIi4vcGxvdF9zY2hlbWEiKSxvPXQoIi4vcGxvdF9jb25maWciKS5kZmx0Q29uZmlnLHM9bi5pc1BsYWluT2JqZWN0LGw9QXJyYXkuaXNBcnJheSxjPW4uaXNBcnJheU9yVHlwZWRBcnJheTtmdW5jdGlvbiB1KHQsZSxyLGksYSxvKXtvPW98fFtdO2Zvcih2YXIgZj1PYmplY3Qua2V5cyh0KSxoPTA7aDxmLmxlbmd0aDtoKyspe3ZhciBwPWZbaF07aWYoInRyYW5zZm9ybXMiIT09cCl7dmFyIHY9by5zbGljZSgpO3YucHVzaChwKTt2YXIgeT10W3BdLHg9ZVtwXSxiPWcocixwKSxfPShifHx7fSkudmFsVHlwZSx3PSJpbmZvX2FycmF5Ij09PV8sVD0iY29sb3JzY2FsZSI9PT1fLGs9KGJ8fHt9KS5pdGVtcztpZihtKHIscCkpaWYocyh5KSYmcyh4KSYmImFueSIhPT1fKXUoeSx4LGIsaSxhLHYpO2Vsc2UgaWYodyYmbCh5KSl7eS5sZW5ndGg+eC5sZW5ndGgmJmkucHVzaChkKCJ1bnVzZWQiLGEsdi5jb25jYXQoeC5sZW5ndGgpKSk7dmFyIEEsTSxTLEUsTCxDPXgubGVuZ3RoLFA9QXJyYXkuaXNBcnJheShrKTtpZihQJiYoQz1NYXRoLm1pbihDLGsubGVuZ3RoKSksMj09PWIuZGltZW5zaW9ucylmb3IoTT0wO008QztNKyspaWYobCh5W01dKSl7eVtNXS5sZW5ndGg+eFtNXS5sZW5ndGgmJmkucHVzaChkKCJ1bnVzZWQiLGEsdi5jb25jYXQoTSx4W01dLmxlbmd0aCkpKTt2YXIgST14W01dLmxlbmd0aDtmb3IoQT0wO0E8KFA/TWF0aC5taW4oSSxrW01dLmxlbmd0aCk6SSk7QSsrKVM9UD9rW01dW0FdOmssRT15W01dW0FdLEw9eFtNXVtBXSxuLnZhbGlkYXRlKEUsUyk/TCE9PUUmJkwhPT0rRSYmaS5wdXNoKGQoImR5bmFtaWMiLGEsdi5jb25jYXQoTSxBKSxFLEwpKTppLnB1c2goZCgidmFsdWUiLGEsdi5jb25jYXQoTSxBKSxFKSl9ZWxzZSBpLnB1c2goZCgiYXJyYXkiLGEsdi5jb25jYXQoTSkseVtNXSkpO2Vsc2UgZm9yKE09MDtNPEM7TSsrKVM9UD9rW01dOmssRT15W01dLEw9eFtNXSxuLnZhbGlkYXRlKEUsUyk/TCE9PUUmJkwhPT0rRSYmaS5wdXNoKGQoImR5bmFtaWMiLGEsdi5jb25jYXQoTSksRSxMKSk6aS5wdXNoKGQoInZhbHVlIixhLHYuY29uY2F0KE0pLEUpKX1lbHNlIGlmKGIuaXRlbXMmJiF3JiZsKHkpKXt2YXIgTyx6LEQ9a1tPYmplY3Qua2V5cyhrKVswXV0sUj1bXTtmb3IoTz0wO088eC5sZW5ndGg7TysrKXt2YXIgRj14W09dLl9pbmRleHx8TztpZigoej12LnNsaWNlKCkpLnB1c2goRikscyh5W0ZdKSYmcyh4W09dKSl7Ui5wdXNoKEYpO3ZhciBCPXlbRl0sTj14W09dO3MoQikmJiExIT09Qi52aXNpYmxlJiYhMT09PU4udmlzaWJsZT9pLnB1c2goZCgiaW52aXNpYmxlIixhLHopKTp1KEIsTixELGksYSx6KX19Zm9yKE89MDtPPHkubGVuZ3RoO08rKykoej12LnNsaWNlKCkpLnB1c2goTykscyh5W09dKT8tMT09PVIuaW5kZXhPZihPKSYmaS5wdXNoKGQoInVudXNlZCIsYSx6KSk6aS5wdXNoKGQoIm9iamVjdCIsYSx6LHlbT10pKX1lbHNlIXMoeSkmJnMoeCk/aS5wdXNoKGQoIm9iamVjdCIsYSx2LHkpKTpjKHkpfHwhYyh4KXx8d3x8VD9wIGluIGU/bi52YWxpZGF0ZSh5LGIpPyJlbnVtZXJhdGVkIj09PWIudmFsVHlwZSYmKGIuY29lcmNlTnVtYmVyJiZ5IT09K3h8fHkhPT14KSYmaS5wdXNoKGQoImR5bmFtaWMiLGEsdix5LHgpKTppLnB1c2goZCgidmFsdWUiLGEsdix5KSk6aS5wdXNoKGQoInVudXNlZCIsYSx2LHkpKTppLnB1c2goZCgiYXJyYXkiLGEsdix5KSk7ZWxzZSBpLnB1c2goZCgic2NoZW1hIixhLHYpKX19cmV0dXJuIGl9ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgcj10LmxheW91dC5sYXlvdXRBdHRyaWJ1dGVzLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXSxvPXQudHJhY2VzW2EudHlwZV0scz1vLmxheW91dEF0dHJpYnV0ZXM7cyYmKGEuc3VicGxvdD9uLmV4dGVuZEZsYXQocltvLmF0dHJpYnV0ZXMuc3VicGxvdC5kZmx0XSxzKTpuLmV4dGVuZEZsYXQocixzKSl9cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PWUmJihlPXt9KTt2YXIgcixjLGg9YS5nZXQoKSxwPVtdLG09e19jb250ZXh0Om4uZXh0ZW5kRmxhdCh7fSxvKX07bCh0KT8obS5kYXRhPW4uZXh0ZW5kRGVlcChbXSx0KSxyPXQpOihtLmRhdGE9W10scj1bXSxwLnB1c2goZCgiYXJyYXkiLCJkYXRhIikpKSxzKGUpPyhtLmxheW91dD1uLmV4dGVuZERlZXAoe30sZSksYz1lKToobS5sYXlvdXQ9e30sYz17fSxhcmd1bWVudHMubGVuZ3RoPjEmJnAucHVzaChkKCJvYmplY3QiLCJsYXlvdXQiKSkpLGkuc3VwcGx5RGVmYXVsdHMobSk7Zm9yKHZhciBnPW0uX2Z1bGxEYXRhLHY9ci5sZW5ndGgseT0wO3k8djt5Kyspe3ZhciB4PXJbeV0sYj1bImRhdGEiLHldO2lmKHMoeCkpe3ZhciBfPWdbeV0sdz1fLnR5cGUsVD1oLnRyYWNlc1t3XS5hdHRyaWJ1dGVzO1QudHlwZT17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlt3XX0sITE9PT1fLnZpc2libGUmJiExIT09eC52aXNpYmxlJiZwLnB1c2goZCgiaW52aXNpYmxlIixiKSksdSh4LF8sVCxwLGIpO3ZhciBrPXgudHJhbnNmb3JtcyxBPV8udHJhbnNmb3JtcztpZihrKXtsKGspfHxwLnB1c2goZCgiYXJyYXkiLGIsWyJ0cmFuc2Zvcm1zIl0pKSxiLnB1c2goInRyYW5zZm9ybXMiKTtmb3IodmFyIE09MDtNPGsubGVuZ3RoO00rKyl7dmFyIFM9WyJ0cmFuc2Zvcm1zIixNXSxFPWtbTV0udHlwZTtpZihzKGtbTV0pKXt2YXIgTD1oLnRyYW5zZm9ybXNbRV0/aC50cmFuc2Zvcm1zW0VdLmF0dHJpYnV0ZXM6e307TC50eXBlPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMoaC50cmFuc2Zvcm1zKX0sdShrW01dLEFbTV0sTCxwLGIsUyl9ZWxzZSBwLnB1c2goZCgib2JqZWN0IixiLFMpKX19fWVsc2UgcC5wdXNoKGQoIm9iamVjdCIsYikpfXZhciBDPW0uX2Z1bGxMYXlvdXQsUD1mKGgsZyk7cmV0dXJuIHUoYyxDLFAscCwibGF5b3V0IiksMD09PXAubGVuZ3RoP3ZvaWQgMDpwfTt2YXIgaD17b2JqZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuKCJsYXlvdXQiPT09dCYmIiI9PT1lPyJUaGUgbGF5b3V0IGFyZ3VtZW50IjoiZGF0YSI9PT10WzBdJiYiIj09PWU/IlRyYWNlICIrdFsxXSsiIGluIHRoZSBkYXRhIGFyZ3VtZW50IjpwKHQpKyJrZXkgIitlKSsiIG11c3QgYmUgbGlua2VkIHRvIGFuIG9iamVjdCBjb250YWluZXIifSxhcnJheTpmdW5jdGlvbih0LGUpe3JldHVybigiZGF0YSI9PT10PyJUaGUgZGF0YSBhcmd1bWVudCI6cCh0KSsia2V5ICIrZSkrIiBtdXN0IGJlIGxpbmtlZCB0byBhbiBhcnJheSBjb250YWluZXIifSxzY2hlbWE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gcCh0KSsia2V5ICIrZSsiIGlzIG5vdCBwYXJ0IG9mIHRoZSBzY2hlbWEifSx1bnVzZWQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXMocik/ImNvbnRhaW5lciI6ImtleSI7cmV0dXJuIHAodCkrbisiICIrZSsiIGRpZCBub3QgZ2V0IGNvZXJjZWQifSxkeW5hbWljOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybltwKHQpKyJrZXkiLGUsIihzZXQgdG8gJyIrcisiJykiLCJnb3QgcmVzZXQgdG8iLCInIituKyInIiwiZHVyaW5nIGRlZmF1bHRzLiJdLmpvaW4oIiAiKX0saW52aXNpYmxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU/cCh0KSsiaXRlbSAiK2U6IlRyYWNlICIrdFsxXSkrIiBnb3QgZGVmYXVsdGVkIHRvIGJlIG5vdCB2aXNpYmxlIn0sdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVybltwKHQpKyJrZXkgIitlLCJpcyBzZXQgdG8gYW4gaW52YWxpZCB2YWx1ZSAoIityKyIpIl0uam9pbigiICIpfX07ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbCh0KT8iSW4gZGF0YSB0cmFjZSAiK3RbMV0rIiwgIjoiSW4gIit0KyIsICJ9ZnVuY3Rpb24gZCh0LGUscixpLGEpe3ZhciBvLHM7cj1yfHwiIixsKGUpPyhvPWVbMF0scz1lWzFdKToobz1lLHM9bnVsbCk7dmFyIGM9ZnVuY3Rpb24odCl7aWYoIWwodCkpcmV0dXJuIFN0cmluZyh0KTtmb3IodmFyIGU9IiIscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdOyJudW1iZXIiPT10eXBlb2Ygbj9lPWUuc3Vic3RyKDAsZS5sZW5ndGgtMSkrIlsiK24rIl0iOmUrPW4scjx0Lmxlbmd0aC0xJiYoZSs9Ii4iKX1yZXR1cm4gZX0ociksdT1oW3RdKGUsYyxpLGEpO3JldHVybiBuLmxvZyh1KSx7Y29kZTp0LGNvbnRhaW5lcjpvLHRyYWNlOnMscGF0aDpyLGFzdHI6Yyxtc2c6dX19ZnVuY3Rpb24gbSh0LGUpe3ZhciByPXkoZSksbj1yLmtleU1pbnVzSWQsaT1yLmlkO3JldHVybiEhKG4gaW4gdCYmdFtuXS5faXNTdWJwbG90T2JqJiZpKXx8ZSBpbiB0fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gZSBpbiB0P3RbZV06dFt5KGUpLmtleU1pbnVzSWRdfXZhciB2PW4uY291bnRlclJlZ2V4KCIoW2Etel0rKSIpO2Z1bmN0aW9uIHkodCl7dmFyIGU9dC5tYXRjaCh2KTtyZXR1cm57a2V5TWludXNJZDplJiZlWzFdLGlkOmUmJmVbMl19fX0seyIuLi9saWIiOjc3NiwiLi4vcGxvdHMvcGxvdHMiOjg5MCwiLi9wbG90X2NvbmZpZyI6ODE0LCIuL3Bsb3Rfc2NoZW1hIjo4MTV9XSw4MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJhZnRlcmFsbCIsdmFsdWVzOlsiaW1tZWRpYXRlIiwibmV4dCIsImFmdGVyYWxsIl19LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZm9yd2FyZCIsInJldmVyc2UiXSxkZmx0OiJmb3J3YXJkIn0sZnJvbWN1cnJlbnQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZyYW1lOntkdXJhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjUwMH0scmVkcmF3Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo1MDAsZWRpdFR5cGU6Im5vbmUifSxlYXNpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImN1YmljLWluLW91dCIsdmFsdWVzOlsibGluZWFyIiwicXVhZCIsImN1YmljIiwic2luIiwiZXhwIiwiY2lyY2xlIiwiZWxhc3RpYyIsImJhY2siLCJib3VuY2UiLCJsaW5lYXItaW4iLCJxdWFkLWluIiwiY3ViaWMtaW4iLCJzaW4taW4iLCJleHAtaW4iLCJjaXJjbGUtaW4iLCJlbGFzdGljLWluIiwiYmFjay1pbiIsImJvdW5jZS1pbiIsImxpbmVhci1vdXQiLCJxdWFkLW91dCIsImN1YmljLW91dCIsInNpbi1vdXQiLCJleHAtb3V0IiwiY2lyY2xlLW91dCIsImVsYXN0aWMtb3V0IiwiYmFjay1vdXQiLCJib3VuY2Utb3V0IiwibGluZWFyLWluLW91dCIsInF1YWQtaW4tb3V0IiwiY3ViaWMtaW4tb3V0Iiwic2luLWluLW91dCIsImV4cC1pbi1vdXQiLCJjaXJjbGUtaW4tb3V0IiwiZWxhc3RpYy1pbi1vdXQiLCJiYWNrLWluLW91dCIsImJvdW5jZS1pbi1vdXQiXSxlZGl0VHlwZToibm9uZSJ9LG9yZGVyaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsYXlvdXQgZmlyc3QiLCJ0cmFjZXMgZmlyc3QiXSxkZmx0OiJsYXlvdXQgZmlyc3QiLGVkaXRUeXBlOiJub25lIn19fX0se31dLDgyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG8scz1yLm5hbWUsbD1yLmluY2x1c2lvbkF0dHJ8fCJ2aXNpYmxlIixjPWVbc10sdT1uLmlzQXJyYXlPclR5cGVkQXJyYXkodFtzXSk/dFtzXTpbXSxmPWVbc109W10saD1pLmFycmF5VGVtcGxhdGVyKGUscyxsKTtmb3IoYT0wO2E8dS5sZW5ndGg7YSsrKXt2YXIgcD11W2FdO24uaXNQbGFpbk9iamVjdChwKT9vPWgubmV3SXRlbShwKToobz1oLm5ld0l0ZW0oe30pKVtsXT0hMSxvLl9pbmRleD1hLCExIT09b1tsXSYmci5oYW5kbGVJdGVtRGVmYXVsdHMocCxvLGUsciksZi5wdXNoKG8pfXZhciBkPWguZGVmYXVsdEl0ZW1zKCk7Zm9yKGE9MDthPGQubGVuZ3RoO2ErKykobz1kW2FdKS5faW5kZXg9Zi5sZW5ndGgsci5oYW5kbGVJdGVtRGVmYXVsdHMoe30sbyxlLHIse30pLGYucHVzaChvKTtpZihuLmlzQXJyYXlPclR5cGVkQXJyYXkoYykpe3ZhciBtPU1hdGgubWluKGMubGVuZ3RoLGYubGVuZ3RoKTtmb3IoYT0wO2E8bTthKyspbi5yZWxpbmtQcml2YXRlS2V5cyhmW2FdLGNbYV0pfXJldHVybiBmfX0seyIuLi9saWIiOjc3NiwiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2fV0sODIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbXSxkZmx0OiJzY2F0dGVyIixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyIsX25vVGVtcGxhdGluZzohMH0sdmlzaWJsZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwhMSwibGVnZW5kb25seSJdLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxzaG93bGVnZW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJzdHlsZSJ9LGxlZ2VuZGdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InN0eWxlIn0sbGVnZW5kZ3JvdXB0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJzdHlsZSJ9LGZvbnQ6bih7ZWRpdFR5cGU6InN0eWxlIn0pLGVkaXRUeXBlOiJzdHlsZSJ9LGxlZ2VuZHJhbms6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxZTMsZWRpdFR5cGU6InN0eWxlIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6InN0eWxlIn0sbmFtZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToic3R5bGUifSx1aWQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QiLGFuaW06ITB9LGlkczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LGN1c3RvbWRhdGE6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbWV0YTp7dmFsVHlwZToiYW55IixhcnJheU9rOiEwLGVkaXRUeXBlOiJwbG90In0sc2VsZWN0ZWRwb2ludHM6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcmluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbIngiLCJ5IiwieiIsInRleHQiLCJuYW1lIl0sZXh0cmFzOlsiYWxsIiwibm9uZSIsInNraXAiXSxhcnJheU9rOiEwLGRmbHQ6ImFsbCIsZWRpdFR5cGU6Im5vbmUifSxob3ZlcmxhYmVsOmkuaG92ZXJsYWJlbCxzdHJlYW06e3Rva2VuOnt2YWxUeXBlOiJzdHJpbmciLG5vQmxhbms6ITAsc3RyaWN0OiEwLGVkaXRUeXBlOiJjYWxjIn0sbWF4cG9pbnRzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxZTQsZGZsdDo1MDAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRyYW5zZm9ybXM6e19pc0xpbmtlZFRvQXJyYXk6InRyYW5zZm9ybSIsZWRpdFR5cGU6ImNhbGMifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn19fSx7Ii4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlcyI6NjcwLCIuL2ZvbnRfYXR0cmlidXRlcyI6ODU2fV0sODI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPWkuZGF0ZVRpbWUybXMsbz1pLmluY3JlbWVudE1vbnRoLHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLk9ORUFWR01PTlRIO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtpZigiZGF0ZSIhPT1lLnR5cGUpcmV0dXJue3ZhbHM6aX07dmFyIGw9dFtyKyJwZXJpb2RhbGlnbm1lbnQiXTtpZighbClyZXR1cm57dmFsczppfTt2YXIgYyx1PXRbcisicGVyaW9kIl07aWYobih1KSl7aWYoKHU9K3UpPD0wKXJldHVybnt2YWxzOml9fWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiB1JiYiTSI9PT11LmNoYXJBdCgwKSl7dmFyIGY9K3Uuc3Vic3RyaW5nKDEpO2lmKCEoZj4wJiZNYXRoLnJvdW5kKGYpPT09ZikpcmV0dXJue3ZhbHM6aX07Yz1mfWZvcih2YXIgaD1lLmNhbGVuZGFyLHA9InN0YXJ0Ij09PWwsZD0iZW5kIj09PWwsbT10W3IrInBlcmlvZDAiXSxnPWEobSxoKXx8MCx2PVtdLHk9W10seD1bXSxiPWkubGVuZ3RoLF89MDtfPGI7XysrKXt2YXIgdyxULGssQT1pW19dO2lmKGMpe2Zvcih3PU1hdGgucm91bmQoKEEtZykvKGMqcykpLGs9byhnLGMqdyxoKTtrPkE7KWs9byhrLC1jLGgpO2Zvcig7azw9QTspaz1vKGssYyxoKTtUPW8oaywtYyxoKX1lbHNle2ZvcihrPWcrKHc9TWF0aC5yb3VuZCgoQS1nKS91KSkqdTtrPkE7KWstPXU7Zm9yKDtrPD1BOylrKz11O1Q9ay11fXZbX109cD9UOmQ/azooVCtrKS8yLHlbX109VCx4W19dPWt9cmV0dXJue3ZhbHM6dixzdGFydHM6eSxlbmRzOnh9fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sODI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17eGF4aXM6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoieCIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx5YXhpczp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJ5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9fX0se31dLDgyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuRlBfU0FGRSxzPXQoIi4uLy4uL3JlZ2lzdHJ5IiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4vYXhpc19pZHMiKSx1PWMuZ2V0RnJvbUlkLGY9Yy5pc0xpbmtlZDtmdW5jdGlvbiBoKHQsZSl7dmFyIHIsbixpPVtdLG89dC5fZnVsbExheW91dCxzPWQobyxlLDApLGw9ZChvLGUsMSksYz1tKHQsZSksdT1jLm1pbixmPWMubWF4O2lmKDA9PT11Lmxlbmd0aHx8MD09PWYubGVuZ3RoKXJldHVybiBhLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTt2YXIgaD11WzBdLnZhbCxnPWZbMF0udmFsO2ZvcihyPTE7cjx1Lmxlbmd0aCYmaD09PWc7cisrKWg9TWF0aC5taW4oaCx1W3JdLnZhbCk7Zm9yKHI9MTtyPGYubGVuZ3RoJiZoPT09ZztyKyspZz1NYXRoLm1heChnLGZbcl0udmFsKTt2YXIgdj0hMTtpZihlLnJhbmdlKXt2YXIgeT1hLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTt2PXlbMV08eVswXX0icmV2ZXJzZWQiPT09ZS5hdXRvcmFuZ2UmJih2PSEwLGUuYXV0b3JhbmdlPSEwKTt2YXIgeCxiLF8sdyxULGssQT1lLnJhbmdlbW9kZSxNPSJ0b3plcm8iPT09QSxTPSJub25uZWdhdGl2ZSI9PT1BLEU9ZS5fbGVuZ3RoLEw9RS8xMCxDPTA7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKylmb3IoeD11W3JdLG49MDtuPGYubGVuZ3RoO24rKykoaz0oYj1mW25dKS52YWwteC52YWwtcChlLHgudmFsLGIudmFsKSk+MCYmKChUPUUtcyh4KS1sKGIpKT5MP2svVD5DJiYoXz14LHc9YixDPWsvVCk6ay9FPkMmJihfPXt2YWw6eC52YWwsbm9wYWQ6MX0sdz17dmFsOmIudmFsLG5vcGFkOjF9LEM9ay9FKSk7aWYoaD09PWcpe3ZhciBQPWgtMSxJPWgrMTtpZihNKWlmKDA9PT1oKWk9WzAsMV07ZWxzZXt2YXIgTz0oaD4wP2Y6dSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGwoZSkpfSksMCksej1oLygxLU1hdGgubWluKC41LE8vRSkpO2k9aD4wP1swLHpdOlt6LDBdfWVsc2UgaT1TP1tNYXRoLm1heCgwLFApLE1hdGgubWF4KDEsSSldOltQLEldfWVsc2UgTT8oXy52YWw+PTAmJihfPXt2YWw6MCxub3BhZDoxfSksdy52YWw8PTAmJih3PXt2YWw6MCxub3BhZDoxfSkpOlMmJihfLnZhbC1DKnMoXyk8MCYmKF89e3ZhbDowLG5vcGFkOjF9KSx3LnZhbDw9MCYmKHc9e3ZhbDoxLG5vcGFkOjF9KSksQz0ody52YWwtXy52YWwtcChlLHgudmFsLGIudmFsKSkvKEUtcyhfKS1sKHcpKSxpPVtfLnZhbC1DKnMoXyksdy52YWwrQypsKHcpXTtyZXR1cm4gdiYmaS5yZXZlcnNlKCksYS5zaW1wbGVNYXAoaSxlLmwycnx8TnVtYmVyKX1mdW5jdGlvbiBwKHQsZSxyKXt2YXIgbj0wO2lmKHQucmFuZ2VicmVha3MpZm9yKHZhciBpPXQubG9jYXRlQnJlYWtzKGUsciksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO24rPW8ubWF4LW8ubWlufXJldHVybiBufWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBpPS4wNSplLl9sZW5ndGgsbz1lLl9hbmNob3JBeGlzfHx7fTtpZigtMSE9PShlLnRpY2tsYWJlbHBvc2l0aW9ufHwiIikuaW5kZXhPZigiaW5zaWRlIil8fC0xIT09KG8udGlja2xhYmVscG9zaXRpb258fCIiKS5pbmRleE9mKCJpbnNpZGUiKSl7dmFyIHM9InJldmVyc2VkIj09PWUuYXV0b3JhbmdlO2lmKCFzKXt2YXIgYz1hLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTtzPWNbMV08Y1swXX1zJiYocj0hcil9dmFyIHU9MDtyZXR1cm4gZih0LGUuX2lkKXx8KHU9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPTAsbz0ieCI9PT1lLl9pZC5jaGFyQXQoMCk7Zm9yKHZhciBzIGluIHQuX3Bsb3RzKXt2YXIgYz10Ll9wbG90c1tzXTtpZihlLl9pZD09PWMueGF4aXMuX2lkfHxlLl9pZD09PWMueWF4aXMuX2lkKXt2YXIgdT0obz9jLnlheGlzOmMueGF4aXMpfHx7fTtpZigtMSE9PSh1LnRpY2tsYWJlbHBvc2l0aW9ufHwiIikuaW5kZXhPZigiaW5zaWRlIikmJighciYmKCJsZWZ0Ij09PXUuc2lkZXx8ImJvdHRvbSI9PT11LnNpZGUpfHxyJiYoInRvcCI9PT11LnNpZGV8fCJyaWdodCI9PT11LnNpZGUpKSl7aWYodS5fdmFscyl7dmFyIGY9YS5kZWcycmFkKHUuX3RpY2tBbmdsZXNbdS5faWQrInRpY2siXXx8MCksaD1NYXRoLmFicyhNYXRoLmNvcyhmKSkscD1NYXRoLmFicyhNYXRoLnNpbihmKSk7aWYoIXUuX3ZhbHNbMF0uYmIpe3ZhciBkPXUuX2lkKyJ0aWNrIjt1Ll9zZWxlY3Rpb25zW2RdLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO2Uuc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIikuZW1wdHkoKSYmKHQuYmI9bC5iQm94KGUubm9kZSgpKSl9KSl9Zm9yKHZhciBtPTA7bTx1Ll92YWxzLmxlbmd0aDttKyspe3ZhciBnPXUuX3ZhbHNbbV0uYmI7aWYoZyl7dmFyIHY9NitnLndpZHRoLHk9NitnLmhlaWdodDtpPU1hdGgubWF4KGksbz9NYXRoLm1heCh2KmgseSpwKTpNYXRoLm1heCh5KmgsdipwKSl9fX0iaW5zaWRlIj09PXUudGlja3MmJiJpbnNpZGUiPT09dS50aWNrbGFiZWxwb3NpdGlvbiYmKGkrPXUudGlja2xlbnx8MCl9fX1yZXR1cm4gaX0odCxlLHIpKSxpPU1hdGgubWF4KHUsaSksImRvbWFpbiI9PT1lLmNvbnN0cmFpbiYmZS5faW5wdXREb21haW4mJihpKj0oZS5faW5wdXREb21haW5bMV0tZS5faW5wdXREb21haW5bMF0pLyhlLmRvbWFpblsxXS1lLmRvbWFpblswXSkpLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vcGFkPzA6dC5wYWQrKHQuZXh0cmFwYWQ/aTp1KX19ZS5leHBvcnRzPXtnZXRBdXRvUmFuZ2U6aCxtYWtlUGFkRm46ZCxkb0F1dG9SYW5nZTpmdW5jdGlvbih0LGUscil7aWYoZS5zZXRTY2FsZSgpLGUuYXV0b3JhbmdlKXtlLnJhbmdlPXI/ci5zbGljZSgpOmgodCxlKSxlLl9yPWUucmFuZ2Uuc2xpY2UoKSxlLl9ybD1hLnNpbXBsZU1hcChlLl9yLGUucjJsKTt2YXIgbj1lLl9pbnB1dCxpPXt9O2lbZS5fYXR0cisiLnJhbmdlIl09ZS5yYW5nZSxpW2UuX2F0dHIrIi5hdXRvcmFuZ2UiXT1lLmF1dG9yYW5nZSxzLmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLHQubGF5b3V0LHQuX2Z1bGxMYXlvdXQuX3ByZUdVSSxpKSxuLnJhbmdlPWUucmFuZ2Uuc2xpY2UoKSxuLmF1dG9yYW5nZT1lLmF1dG9yYW5nZX12YXIgbz1lLl9hbmNob3JBeGlzO2lmKG8mJm8ucmFuZ2VzbGlkZXIpe3ZhciBsPW8ucmFuZ2VzbGlkZXJbZS5fbmFtZV07bCYmImF1dG8iPT09bC5yYW5nZW1vZGUmJihsLnJhbmdlPWgodCxlKSksby5faW5wdXQucmFuZ2VzbGlkZXJbZS5fbmFtZV09YS5leHRlbmRGbGF0KHt9LGwpfX0sZmluZEV4dHJlbWVzOmZ1bmN0aW9uKHQsZSxyKXtyfHwocj17fSk7dC5fbXx8dC5zZXRTY2FsZSgpO3ZhciBuLGEscyxsLGMsdSxmLGgscCxkPVtdLG09W10seT1lLmxlbmd0aCxiPXIucGFkZGVkfHwhMSxfPXIudG96ZXJvJiYoImxpbmVhciI9PT10LnR5cGV8fCItIj09PXQudHlwZSksdz0ibG9nIj09PXQudHlwZSxUPSExLGs9ci52cGFkTGluZWFyaXplZHx8ITE7ZnVuY3Rpb24gQSh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBUPSEwLGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heChOdW1iZXIodFtlXXx8MCksMCl9O3ZhciBlPU1hdGgubWF4KE51bWJlcih0fHwwKSwwKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIE09QSgodC5fbT4wP3IucHBhZHBsdXM6ci5wcGFkbWludXMpfHxyLnBwYWR8fDApLFM9QSgodC5fbT4wP3IucHBhZG1pbnVzOnIucHBhZHBsdXMpfHxyLnBwYWR8fDApLEU9QShyLnZwYWRwbHVzfHxyLnZwYWQpLEw9QShyLnZwYWRtaW51c3x8ci52cGFkKTtpZighVCl7aWYoaD0xLzAscD0tMS8wLHcpZm9yKG49MDtuPHk7bisrKShhPWVbbl0pPGgmJmE+MCYmKGg9YSksYT5wJiZhPG8mJihwPWEpO2Vsc2UgZm9yKG49MDtuPHk7bisrKShhPWVbbl0pPGgmJmE+LW8mJihoPWEpLGE+cCYmYTxvJiYocD1hKTtlPVtoLHBdLHk9Mn12YXIgQz17dG96ZXJvOl8sZXh0cmFwYWQ6Yn07ZnVuY3Rpb24gUChyKXtzPWVbcl0saShzKSYmKHU9TShyKSxmPVMociksaz8obD10LmMybChzKS1MKHIpLGM9dC5jMmwocykrRShyKSk6KGg9cy1MKHIpLHA9cytFKHIpLHcmJmg8cC8xMCYmKGg9cC8xMCksbD10LmMybChoKSxjPXQuYzJsKHApKSxfJiYobD1NYXRoLm1pbigwLGwpLGM9TWF0aC5tYXgoMCxjKSkseChsKSYmZyhkLGwsZixDKSx4KGMpJiZ2KG0sYyx1LEMpKX12YXIgST1NYXRoLm1pbig2LHkpO2ZvcihuPTA7bjxJO24rKylQKG4pO2ZvcihuPXktMTtuPj1JO24tLSlQKG4pO3JldHVybnttaW46ZCxtYXg6bSxvcHRzOnJ9fSxjb25jYXRFeHRyZW1lczptfTtmdW5jdGlvbiBtKHQsZSxyKXt2YXIgbixpLGEsbz1lLl9pZCxzPXQuX2Z1bGxEYXRhLGw9dC5fZnVsbExheW91dCxjPVtdLGY9W107ZnVuY3Rpb24gaCh0LGUpe2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPXRbZVtuXV0scz0oci5fZXh0cmVtZXN8fHt9KVtvXTtpZighMD09PXIudmlzaWJsZSYmcyl7Zm9yKGk9MDtpPHMubWluLmxlbmd0aDtpKyspYT1zLm1pbltpXSxnKGMsYS52YWwsYS5wYWQse2V4dHJhcGFkOmEuZXh0cmFwYWR9KTtmb3IoaT0wO2k8cy5tYXgubGVuZ3RoO2krKylhPXMubWF4W2ldLHYoZixhLnZhbCxhLnBhZCx7ZXh0cmFwYWQ6YS5leHRyYXBhZH0pfX19aWYoaChzLGUuX3RyYWNlSW5kaWNlcyksaChsLmFubm90YXRpb25zfHxbXSxlLl9hbm5JbmRpY2VzfHxbXSksaChsLnNoYXBlc3x8W10sZS5fc2hhcGVJbmRpY2VzfHxbXSksZS5fbWF0Y2hHcm91cCYmIXIpZm9yKHZhciBwIGluIGUuX21hdGNoR3JvdXApaWYocCE9PWUuX2lkKXt2YXIgZD11KHQscCkseT1tKHQsZCwhMCkseD1lLl9sZW5ndGgvZC5fbGVuZ3RoO2ZvcihpPTA7aTx5Lm1pbi5sZW5ndGg7aSsrKWE9eS5taW5baV0sZyhjLGEudmFsLGEucGFkKngse2V4dHJhcGFkOmEuZXh0cmFwYWR9KTtmb3IoaT0wO2k8eS5tYXgubGVuZ3RoO2krKylhPXkubWF4W2ldLHYoZixhLnZhbCxhLnBhZCp4LHtleHRyYXBhZDphLmV4dHJhcGFkfSl9cmV0dXJue21pbjpjLG1heDpmfX1mdW5jdGlvbiBnKHQsZSxyLG4pe3kodCxlLHIsbixiKX1mdW5jdGlvbiB2KHQsZSxyLG4pe3kodCxlLHIsbixfKX1mdW5jdGlvbiB5KHQsZSxyLG4saSl7Zm9yKHZhciBhPW4udG96ZXJvLG89bi5leHRyYXBhZCxzPSEwLGw9MDtsPHQubGVuZ3RoJiZzO2wrKyl7dmFyIGM9dFtsXTtpZihpKGMudmFsLGUpJiZjLnBhZD49ciYmKGMuZXh0cmFwYWR8fCFvKSl7cz0hMTticmVha31pKGUsYy52YWwpJiZjLnBhZDw9ciYmKG98fCFjLmV4dHJhcGFkKSYmKHQuc3BsaWNlKGwsMSksbC0tKX1pZihzKXt2YXIgdT1hJiYwPT09ZTt0LnB1c2goe3ZhbDplLHBhZDp1PzA6cixleHRyYXBhZDohdSYmb30pfX1mdW5jdGlvbiB4KHQpe3JldHVybiBpKHQpJiZNYXRoLmFicyh0KTxvfWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4gdDw9ZX1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuIHQ+PWV9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2F4aXNfaWRzIjo4MzEsIkBwbG90bHkvZDMiOjU4LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sODI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL2xpYiIpLGw9cy5zdHJUcmFuc2xhdGUsYz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIiksZj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxwPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxkPXQoIi4vY2xlYW5fdGlja3MiKSxtPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxnPW0uT05FTUFYWUVBUix2PW0uT05FQVZHWUVBUix5PW0uT05FTUlOWUVBUix4PW0uT05FTUFYUVVBUlRFUixiPW0uT05FQVZHUVVBUlRFUixfPW0uT05FTUlOUVVBUlRFUix3PW0uT05FTUFYTU9OVEgsVD1tLk9ORUFWR01PTlRILGs9bS5PTkVNSU5NT05USCxBPW0uT05FV0VFSyxNPW0uT05FREFZLFM9TS8yLEU9bS5PTkVIT1VSLEw9bS5PTkVNSU4sQz1tLk9ORVNFQyxQPW0uTUlOVVNfU0lHTixJPW0uQkFETlVNLE89e0s6Inplcm9saW5lIn0sej17SzoiZ3JpZGxpbmUiLEw6InBhdGgifSxEPXtLOiJ0aWNrIixMOiJwYXRoIn0sUj17SzoidGljayIsTDoidGV4dCJ9LEY9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLEI9Ri5NSURfU0hJRlQsTj1GLkNBUF9TSElGVCxqPUYuTElORV9TUEFDSU5HLFU9Ri5PUFBPU0lURV9TSURFLFY9ZS5leHBvcnRzPXt9O1Yuc2V0Q29udmVydD10KCIuL3NldF9jb252ZXJ0Iik7dmFyIEg9dCgiLi9heGlzX2F1dG90eXBlIikscT10KCIuL2F4aXNfaWRzIiksRz1xLmlkU29ydCxZPXEuaXNMaW5rZWQ7Vi5pZDJuYW1lPXEuaWQybmFtZSxWLm5hbWUyaWQ9cS5uYW1lMmlkLFYuY2xlYW5JZD1xLmNsZWFuSWQsVi5saXN0PXEubGlzdCxWLmxpc3RJZHM9cS5saXN0SWRzLFYuZ2V0RnJvbUlkPXEuZ2V0RnJvbUlkLFYuZ2V0RnJvbVRyYWNlPXEuZ2V0RnJvbVRyYWNlO3ZhciBXPXQoIi4vYXV0b3JhbmdlIik7Vi5nZXRBdXRvUmFuZ2U9Vy5nZXRBdXRvUmFuZ2UsVi5maW5kRXh0cmVtZXM9Vy5maW5kRXh0cmVtZXM7ZnVuY3Rpb24gWCh0KXt2YXIgZT0xZS00Kih0WzFdLXRbMF0pO3JldHVyblt0WzBdLWUsdFsxXStlXX1WLmNvZXJjZVJlZj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89bi5jaGFyQXQobi5sZW5ndGgtMSksbD1yLl9mdWxsTGF5b3V0Ll9zdWJwbG90c1tvKyJheGlzIl0sYz1uKyJyZWYiLHU9e307cmV0dXJuIGl8fChpPWxbMF18fCgic3RyaW5nIj09dHlwZW9mIGE/YTphWzBdKSksYXx8KGE9aSksbD1sLmNvbmNhdChsLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQrIiBkb21haW4ifSkpKSx1W2NdPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6bC5jb25jYXQoYT8ic3RyaW5nIj09dHlwZW9mIGE/W2FdOmE6W10pLGRmbHQ6aX0scy5jb2VyY2UodCxlLHUsYyl9LFYuZ2V0UmVmVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD90OiJwYXBlciI9PT10PyJwYXBlciI6InBpeGVsIj09PXQ/InBpeGVsIjovKCBkb21haW4pJC8udGVzdCh0KT8iZG9tYWluIjoicmFuZ2UifSxWLmNvZXJjZVBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxsO2lmKCJyYW5nZSIhPT1WLmdldFJlZlR5cGUobikpbz1zLmVuc3VyZU51bWJlcixsPXIoaSxhKTtlbHNle3ZhciBjPVYuZ2V0RnJvbUlkKGUsbik7bD1yKGksYT1jLmZyYWN0aW9uMnIoYSkpLG89Yy5jbGVhblBvc310W2ldPW8obCl9LFYuY2xlYW5Qb3NpdGlvbj1mdW5jdGlvbih0LGUscil7cmV0dXJuKCJwYXBlciI9PT1yfHwicGl4ZWwiPT09cj9zLmVuc3VyZU51bWJlcjpWLmdldEZyb21JZChlLHIpLmNsZWFuUG9zKSh0KX0sVi5yZWRyYXdDb21wb25lbnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHxWLmxpc3RJZHModCk7dmFyIHI9dC5fZnVsbExheW91dDtmdW5jdGlvbiBuKG4saSxhLHMpe2Zvcih2YXIgbD1vLmdldENvbXBvbmVudE1ldGhvZChuLGkpLGM9e30sdT0wO3U8ZS5sZW5ndGg7dSsrKWZvcih2YXIgZj1yW1YuaWQybmFtZShlW3VdKV1bYV0saD0wO2g8Zi5sZW5ndGg7aCsrKXt2YXIgcD1mW2hdO2lmKCFjW3BdJiYobCh0LHApLGNbcF09MSxzKSlyZXR1cm59fW4oImFubm90YXRpb25zIiwiZHJhd09uZSIsIl9hbm5JbmRpY2VzIiksbigic2hhcGVzIiwiZHJhd09uZSIsIl9zaGFwZUluZGljZXMiKSxuKCJpbWFnZXMiLCJkcmF3IiwiX2ltZ0luZGljZXMiLCEwKX07dmFyIFo9Vi5nZXREYXRhQ29udmVyc2lvbnM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT0ieCI9PT1yfHwieSI9PT1yfHwieiI9PT1yP3I6bjtpZihBcnJheS5pc0FycmF5KGEpKXtpZihpPXt0eXBlOkgobix2b2lkIDAse2F1dG90eXBlbnVtYmVyczp0Ll9mdWxsTGF5b3V0LmF1dG90eXBlbnVtYmVyc30pLF9jYXRlZ29yaWVzOltdfSxWLnNldENvbnZlcnQoaSksImNhdGVnb3J5Ij09PWkudHlwZSlmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKylpLmQyYyhuW29dKX1lbHNlIGk9Vi5nZXRGcm9tVHJhY2UodCxlLGEpO3JldHVybiBpP3tkMmM6aS5kMmMsYzJkOmkuYzJkfToiaWRzIj09PWE/e2QyYzpLLGMyZDpLfTp7ZDJjOkosYzJkOkp9fTtmdW5jdGlvbiBKKHQpe3JldHVybit0fWZ1bmN0aW9uIEsodCl7cmV0dXJuIFN0cmluZyh0KX1mdW5jdGlvbiBRKHQpe3JldHVybit0LnN1YnN0cmluZygxKX1WLmdldERhdGFUb0Nvb3JkRnVuYz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gWih0LGUscixuKS5kMmN9LFYuY291bnRlckxldHRlcj1mdW5jdGlvbih0KXt2YXIgZT10LmNoYXJBdCgwKTtyZXR1cm4ieCI9PT1lPyJ5IjoieSI9PT1lPyJ4Ijp2b2lkIDB9LFYubWluRHRpY2s9ZnVuY3Rpb24odCxlLHIsbil7LTE9PT1bImxvZyIsImNhdGVnb3J5IiwibXVsdGljYXRlZ29yeSJdLmluZGV4T2YodC50eXBlKSYmbj92b2lkIDA9PT10Ll9taW5EdGljaz8odC5fbWluRHRpY2s9ZSx0Ll9mb3JjZVRpY2swPXIpOnQuX21pbkR0aWNrJiYoKHQuX21pbkR0aWNrL2UrMWUtNiklMTwyZS02JiYoKHItdC5fZm9yY2VUaWNrMCkvZSUxKzEuMDAwMDAxKSUxPDJlLTY/KHQuX21pbkR0aWNrPWUsdC5fZm9yY2VUaWNrMD1yKTooKGUvdC5fbWluRHRpY2srMWUtNiklMT4yZS02fHwoKHItdC5fZm9yY2VUaWNrMCkvdC5fbWluRHRpY2slMSsxLjAwMDAwMSklMT4yZS02KSYmKHQuX21pbkR0aWNrPTApKTp0Ll9taW5EdGljaz0wfSxWLnNhdmVSYW5nZUluaXRpYWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9Vi5saXN0KHQsIiIsITApLG49ITEsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLG89dm9pZCAwPT09YS5fcmFuZ2VJbml0aWFsLHM9b3x8IShhLnJhbmdlWzBdPT09YS5fcmFuZ2VJbml0aWFsWzBdJiZhLnJhbmdlWzFdPT09YS5fcmFuZ2VJbml0aWFsWzFdKTsobyYmITE9PT1hLmF1dG9yYW5nZXx8ZSYmcykmJihhLl9yYW5nZUluaXRpYWw9YS5yYW5nZS5zbGljZSgpLG49ITApfXJldHVybiBufSxWLnNhdmVTaG93U3Bpa2VJbml0aWFsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVYubGlzdCh0LCIiLCEwKSxuPSExLGk9Im9uIixhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV0scz12b2lkIDA9PT1vLl9zaG93U3Bpa2VJbml0aWFsLGw9c3x8IShvLnNob3dzcGlrZXM9PT1vLl9zaG93c3Bpa2VzKTsoc3x8ZSYmbCkmJihvLl9zaG93U3Bpa2VJbml0aWFsPW8uc2hvd3NwaWtlcyxuPSEwKSwib24iIT09aXx8by5zaG93c3Bpa2VzfHwoaT0ib2ZmIil9cmV0dXJuIHQuX2Z1bGxMYXlvdXQuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ9aSxufSxWLmF1dG9CaW49ZnVuY3Rpb24odCxlLHIsbixhLG8pe3ZhciBsLGM9cy5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCksdT1zLmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0KTtpZigiY2F0ZWdvcnkiPT09ZS50eXBlfHwibXVsdGljYXRlZ29yeSI9PT1lLnR5cGUpcmV0dXJue3N0YXJ0OmMtLjUsZW5kOnUrLjUsc2l6ZTpNYXRoLm1heCgxLE1hdGgucm91bmQobyl8fDEpLF9kYXRhU3Bhbjp1LWN9O2lmKGF8fChhPWUuY2FsZW5kYXIpLGw9ImxvZyI9PT1lLnR5cGU/e3R5cGU6ImxpbmVhciIscmFuZ2U6W2MsdV19Ont0eXBlOmUudHlwZSxyYW5nZTpzLnNpbXBsZU1hcChbYyx1XSxlLmMyciwwLGEpLGNhbGVuZGFyOmF9LFYuc2V0Q29udmVydChsKSxvPW8mJmQuZHRpY2sobyxsLnR5cGUpKWwuZHRpY2s9byxsLnRpY2swPWQudGljazAodm9pZCAwLGwudHlwZSxhKTtlbHNle3ZhciBmO2lmKHIpZj0odS1jKS9yO2Vsc2V7dmFyIGg9cy5kaXN0aW5jdFZhbHModCkscD1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGgubWluRGlmZikvTWF0aC5MTjEwKSksbT1wKnMucm91bmRVcChoLm1pbkRpZmYvcCxbLjksMS45LDQuOSw5LjldLCEwKTtmPU1hdGgubWF4KG0sMipzLnN0ZGV2KHQpL01hdGgucG93KHQubGVuZ3RoLG4/LjI1Oi40KSksaShmKXx8KGY9MSl9Vi5hdXRvVGlja3MobCxmKX12YXIgZyx2PWwuZHRpY2sseT1WLnRpY2tJbmNyZW1lbnQoVi50aWNrRmlyc3QobCksdiwicmV2ZXJzZSIsYSk7aWYoIm51bWJlciI9PXR5cGVvZiB2KWc9KHk9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbz0wLHM9MCxsPTAsYz0wO2Z1bmN0aW9uIHUoZSl7cmV0dXJuKDErMTAwKihlLXQpL3IuZHRpY2spJTEwMDwyfWZvcih2YXIgZj0wO2Y8ZS5sZW5ndGg7ZisrKWVbZl0lMT09MD9sKys6aShlW2ZdKXx8YysrLHUoZVtmXSkmJm8rKyx1KGVbZl0rci5kdGljay8yKSYmcysrO3ZhciBoPWUubGVuZ3RoLWM7aWYobD09PWgmJiJkYXRlIiE9PXIudHlwZSlyLmR0aWNrPDE/dD1uLS41KnIuZHRpY2s6KHQtPS41KStyLmR0aWNrPG4mJih0Kz1yLmR0aWNrKTtlbHNlIGlmKHM8LjEqaCYmKG8+LjMqaHx8dShuKXx8dShhKSkpe3ZhciBwPXIuZHRpY2svMjt0Kz10K3A8bj9wOi1wfXJldHVybiB0fSh5LHQsbCxjLHUpKSsoMStNYXRoLmZsb29yKCh1LXkpL3YpKSp2O2Vsc2UgZm9yKCJNIj09PWwuZHRpY2suY2hhckF0KDApJiYoeT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXMuZmluZEV4YWN0RGF0ZXMoZSxpKTtpZihhLmV4YWN0RGF5cz4uOCl7dmFyIG89TnVtYmVyKHIuc3Vic3RyKDEpKTthLmV4YWN0WWVhcnM+LjgmJm8lMTI9PTA/dD1WLnRpY2tJbmNyZW1lbnQodCwiTTYiLCJyZXZlcnNlIikrMS41Kk06YS5leGFjdE1vbnRocz4uOD90PVYudGlja0luY3JlbWVudCh0LCJNMSIsInJldmVyc2UiKSsxNS41Kk06dC09Uzt2YXIgbD1WLnRpY2tJbmNyZW1lbnQodCxyKTtpZihsPD1uKXJldHVybiBsfXJldHVybiB0fSh5LHQsdixjLGEpKSxnPXksMDtnPD11OylnPVYudGlja0luY3JlbWVudChnLHYsITEsYSk7cmV0dXJue3N0YXJ0OmUuYzJyKHksMCxhKSxlbmQ6ZS5jMnIoZywwLGEpLHNpemU6dixfZGF0YVNwYW46dS1jfX0sVi5wcmVwVGlja3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsLHZvaWQgMCx2b2lkIDAsZSk7aWYodC5fZHRpY2tJbml0PXQuZHRpY2ssdC5fdGljazBJbml0PXQudGljazAsImF1dG8iPT09dC50aWNrbW9kZXx8IXQuZHRpY2spe3ZhciBuLGE9dC5udGlja3M7YXx8KCJjYXRlZ29yeSI9PT10LnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZT8obj10LnRpY2tmb250P3MuYmlnRm9udCh0LnRpY2tmb250LnNpemV8fDEyKToxNSxhPXQuX2xlbmd0aC9uKToobj0ieSI9PT10Ll9pZC5jaGFyQXQoMCk/NDA6ODAsYT1zLmNvbnN0cmFpbih0Ll9sZW5ndGgvbiw0LDkpKzEpLCJyYWRpYWxheGlzIj09PXQuX25hbWUmJihhKj0yKSksImFycmF5Ij09PXQudGlja21vZGUmJihhKj0xMDApLHQuX3JvdWdoRFRpY2s9TWF0aC5hYnMoclsxXS1yWzBdKS9hLFYuYXV0b1RpY2tzKHQsdC5fcm91Z2hEVGljayksdC5fbWluRHRpY2s+MCYmdC5kdGljazwyKnQuX21pbkR0aWNrJiYodC5kdGljaz10Ll9taW5EdGljayx0LnRpY2swPXQubDJyKHQuX2ZvcmNlVGljazApKX0icGVyaW9kIj09PXQudGlja2xhYmVsbW9kZSYmZnVuY3Rpb24odCl7dmFyIGU7ZnVuY3Rpb24gcigpe3JldHVybiEoaSh0LmR0aWNrKXx8Ik0iIT09dC5kdGljay5jaGFyQXQoMCkpfXZhciBuPXIoKSxhPVYuZ2V0VGlja0Zvcm1hdCh0KTtpZihhKXt2YXIgbz10Ll9kdGlja0luaXQhPT10LmR0aWNrOy8lW2ZMUXNTTVhdLy50ZXN0KGEpfHwoLyVbSEldLy50ZXN0KGEpPyhlPUUsbyYmIW4mJnQuZHRpY2s8RSYmKHQuZHRpY2s9RSkpOi8lcC8udGVzdChhKT8oZT1TLG8mJiFuJiZ0LmR0aWNrPFMmJih0LmR0aWNrPVMpKTovJVtBYWRlanV3eF0vLnRlc3QoYSk/KGU9TSxvJiYhbiYmdC5kdGljazxNJiYodC5kdGljaz1NKSk6LyVbVVZXXS8udGVzdChhKT8oZT1BLG8mJiFuJiZ0LmR0aWNrPEEmJih0LmR0aWNrPUEpKTovJVtCYm1dLy50ZXN0KGEpPyhlPVQsbyYmKG4/USh0LmR0aWNrKTwxOnQuZHRpY2s8aykmJih0LmR0aWNrPSJNMSIpKTovJVtxXS8udGVzdChhKT8oZT1iLG8mJihuP1EodC5kdGljayk8Mzp0LmR0aWNrPF8pJiYodC5kdGljaz0iTTMiKSk6LyVbWXldLy50ZXN0KGEpJiYoZT12LG8mJihuP1EodC5kdGljayk8MTI6dC5kdGljazx5KSYmKHQuZHRpY2s9Ik0xMiIpKSl9KG49cigpKSYmdC50aWNrMD09PXQuX2Rvd1RpY2swJiYodC50aWNrMD10Ll9yYXdUaWNrMCk7dC5fZGVmaW5lZERlbHRhPWV9KHQpLHQudGljazB8fCh0LnRpY2swPSJkYXRlIj09PXQudHlwZT8iMjAwMC0wMS0wMSI6MCksImRhdGUiPT09dC50eXBlJiZ0LmR0aWNrPC4xJiYodC5kdGljaz0uMSksc3QodCl9LFYuY2FsY1RpY2tzPWZ1bmN0aW9uKHQsZSl7Vi5wcmVwVGlja3ModCxlKTt2YXIgcj1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsLHZvaWQgMCx2b2lkIDAsZSk7aWYoImFycmF5Ij09PXQudGlja21vZGUpcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQudGlja3ZhbHMscj10LnRpY2t0ZXh0LG49bmV3IEFycmF5KGUubGVuZ3RoKSxpPVgocy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCkpLGE9TWF0aC5taW4oaVswXSxpWzFdKSxvPU1hdGgubWF4KGlbMF0saVsxXSksbD0wO0FycmF5LmlzQXJyYXkocil8fChyPVtdKTt2YXIgYz0iY2F0ZWdvcnkiPT09dC50eXBlP3QuZDJsX25vYWRkOnQuZDJsOyJsb2ciPT09dC50eXBlJiYiTCIhPT1TdHJpbmcodC5kdGljaykuY2hhckF0KDApJiYodC5kdGljaz0iTCIrTWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLm1pbih0LnJhbmdlWzBdLHQucmFuZ2VbMV0pKS0xKSk7Zm9yKHZhciB1PTA7dTxlLmxlbmd0aDt1Kyspe3ZhciBmPWMoZVt1XSk7Zj5hJiZmPG8mJih2b2lkIDA9PT1yW3VdP25bbF09Vi50aWNrVGV4dCh0LGYpOm5bbF09bHQodCxmLFN0cmluZyhyW3VdKSksbCsrKX1sPGUubGVuZ3RoJiZuLnNwbGljZShsLGUubGVuZ3RoLWwpO3QucmFuZ2VicmVha3MmJihuPW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gdC5tYXNrQnJlYWtzKGUueCkhPT1JfSkpKTtyZXR1cm4gbn0odCk7dmFyIG49WChyKSxhPW5bMF0sbz1uWzFdLGw9clsxXTxyWzBdLGM9TWF0aC5taW4oclswXSxyWzFdKSx1PU1hdGgubWF4KHJbMF0sclsxXSksZj0ibG9nIj09PXQudHlwZSYmIShpKHQuZHRpY2spfHwiTCI9PT10LmR0aWNrLmNoYXJBdCgwKSksaD0icGVyaW9kIj09PXQudGlja2xhYmVsbW9kZTtpZih0Ll90bWluPVYudGlja0ZpcnN0KHQsZSksdC5fdG1pbjxhIT09bClyZXR1cm5bXTsiY2F0ZWdvcnkiIT09dC50eXBlJiYibXVsdGljYXRlZ29yeSIhPT10LnR5cGV8fChvPWw/TWF0aC5tYXgoLS41LG8pOk1hdGgubWluKHQuX2NhdGVnb3JpZXMubGVuZ3RoLS41LG8pKTt2YXIgcD10Ll90bWluO3QucmFuZ2VicmVha3MmJnQuX3RpY2swSW5pdCE9PXQudGljazAmJihwPU10KHAsdCksbHx8KHA9Vi50aWNrSW5jcmVtZW50KHAsdC5kdGljaywhbCx0LmNhbGVuZGFyKSkpLGgmJihwPVYudGlja0luY3JlbWVudChwLHQuZHRpY2ssIWwsdC5jYWxlbmRhcikpO2Zvcih2YXIgZCxtPU1hdGgubWF4KDFlMyx0Ll9sZW5ndGh8fDApLEw9W10sQz1udWxsO2w/cD49bzpwPD1vO3A9Vi50aWNrSW5jcmVtZW50KHAsdC5kdGljayxsLHQuY2FsZW5kYXIpKXtpZih0LnJhbmdlYnJlYWtzJiYhbCl7aWYocDxhKWNvbnRpbnVlO2lmKHQubWFza0JyZWFrcyhwKT09PUkmJk10KHAsdCk+PXUpYnJlYWt9aWYoTC5sZW5ndGg+bXx8cD09PUMpYnJlYWs7Qz1wO3ZhciBQPSExO2YmJnAhPT0oMHxwKSYmKFA9ITApLEwucHVzaCh7bWlub3I6UCx2YWx1ZTpwfSl9aWYoaCYmZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dLnZhbHVlLGE9bixvPW4rMTtuPHQubGVuZ3RoLTE/KGE9bixvPW4rMSk6bj4wPyhhPW4tMSxvPW4pOihhPW4sbz1uKTt2YXIgcyxsPXRbYV0udmFsdWUsYz10W29dLnZhbHVlLHU9TWF0aC5hYnMoYy1sKSxmPXJ8fHUsaD0wO2Y+PXk/aD11Pj15JiZ1PD1nP3U6djpyPT09YiYmZj49Xz9oPXU+PV8mJnU8PXg/dTpiOmY+PWs/aD11Pj1rJiZ1PD13P3U6VDpyPT09QSYmZj49QT9oPUE6Zj49TT9oPU06cj09PVMmJmY+PVM/aD1TOnI9PT1FJiZmPj1FJiYoaD1FKSxoPj11JiYoaD11LHM9ITApO3ZhciBwPWkraDtpZihlLnJhbmdlYnJlYWtzJiZoPjApe2Zvcih2YXIgZD0wLG09MDttPDg0O20rKyl7dmFyIEw9KG0rLjUpLzg0O2UubWFza0JyZWFrcyhpKigxLUwpK0wqcCkhPT1JJiZkKyt9KGgqPWQvODQpfHwodFtuXS5kcm9wPSEwKSxzJiZ1PkEmJihoPXUpfShoPjB8fDA9PT1uKSYmKHRbbl0ucGVyaW9kWD1pK2gvMil9fShMLHQsdC5fZGVmaW5lZERlbHRhKSx0LnJhbmdlYnJlYWtzKXt2YXIgTz0ieSI9PT10Ll9pZC5jaGFyQXQoMCksej0xOyJhdXRvIj09PXQudGlja21vZGUmJih6PXQudGlja2ZvbnQ/dC50aWNrZm9udC5zaXplOjEyKTt2YXIgRD1OYU47Zm9yKGQ9TC5sZW5ndGgtMTtkPi0xO2QtLSlpZihMW2RdLmRyb3ApTC5zcGxpY2UoZCwxKTtlbHNle0xbZF0udmFsdWU9TXQoTFtkXS52YWx1ZSx0KTt2YXIgUj10LmMycChMW2RdLnZhbHVlKTsoTz9EPlItejpEPFIreik/TC5zcGxpY2UobD9kKzE6ZCwxKTpEPVJ9fUF0KHQpJiYzNjA9PT1NYXRoLmFicyhyWzFdLXJbMF0pJiZMLnBvcCgpLHQuX3RtYXg9KExbTC5sZW5ndGgtMV18fHt9KS52YWx1ZSx0Ll9wcmV2RGF0ZUhlYWQ9IiIsdC5faW5DYWxjVGlja3M9ITA7dmFyIEYsQixOPVtdO2ZvcihkPTA7ZDxMLmxlbmd0aDtkKyspe3ZhciBqPUxbZF0ubWlub3IsVT1MW2RdLnZhbHVlO0Y9Vi50aWNrVGV4dCh0LFUsITEsaiksdm9pZCAwIT09KEI9TFtkXS5wZXJpb2RYKSYmKEYucGVyaW9kWD1CLChCPnV8fEI8YykmJihCPnUmJihGLnBlcmlvZFg9dSksQjxjJiYoRi5wZXJpb2RYPWMpLEYudGV4dD0iICIsdC5fcHJldkRhdGVIZWFkPSIiKSksTi5wdXNoKEYpfXJldHVybiB0Ll9pbkNhbGNUaWNrcz0hMSxOfTt2YXIgJD1bMiw1LDEwXSx0dD1bMSwyLDMsNiwxMl0sZXQ9WzEsMiw1LDEwLDE1LDMwXSxydD1bMSwyLDMsNywxNF0sbnQ9Wy0uMDQ2LDAsLjMwMSwuNDc3LC42MDIsLjY5OSwuNzc4LC44NDUsLjkwMywuOTU0LDFdLGl0PVstLjMwMSwwLC4zMDEsLjY5OSwxXSxhdD1bMTUsMzAsNDUsOTAsMTgwXTtmdW5jdGlvbiBvdCh0LGUscil7cmV0dXJuIGUqcy5yb3VuZFVwKHQvZSxyKX1mdW5jdGlvbiBzdCh0KXt2YXIgZT10LmR0aWNrO2lmKHQuX3RpY2tleHBvbmVudD0wLGkoZSl8fCJzdHJpbmciPT10eXBlb2YgZXx8KGU9MSksImNhdGVnb3J5IiE9PXQudHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09dC50eXBlfHwodC5fdGlja3JvdW5kPW51bGwpLCJkYXRlIj09PXQudHlwZSl7dmFyIHI9dC5yMmwodC50aWNrMCksbj10LmwycihyKS5yZXBsYWNlKC8oXi18aSkvZywiIiksYT1uLmxlbmd0aDtpZigiTSI9PT1TdHJpbmcoZSkuY2hhckF0KDApKWE+MTB8fCIwMS0wMSIhPT1uLnN1YnN0cig1KT90Ll90aWNrcm91bmQ9ImQiOnQuX3RpY2tyb3VuZD0rZS5zdWJzdHIoMSklMTI9PTA/InkiOiJtIjtlbHNlIGlmKGU+PU0mJmE8PTEwfHxlPj0xNSpNKXQuX3RpY2tyb3VuZD0iZCI7ZWxzZSBpZihlPj1MJiZhPD0xNnx8ZT49RSl0Ll90aWNrcm91bmQ9Ik0iO2Vsc2UgaWYoZT49QyYmYTw9MTl8fGU+PUwpdC5fdGlja3JvdW5kPSJTIjtlbHNle3ZhciBvPXQubDJyKHIrZSkucmVwbGFjZSgvXi0vLCIiKS5sZW5ndGg7dC5fdGlja3JvdW5kPU1hdGgubWF4KGEsbyktMjAsdC5fdGlja3JvdW5kPDAmJih0Ll90aWNrcm91bmQ9NCl9fWVsc2UgaWYoaShlKXx8IkwiPT09ZS5jaGFyQXQoMCkpe3ZhciBzPXQucmFuZ2UubWFwKHQucjJkfHxOdW1iZXIpO2koZSl8fChlPU51bWJlcihlLnN1YnN0cigxKSkpLHQuX3RpY2tyb3VuZD0yLU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjEwKy4wMSk7dmFyIGw9TWF0aC5tYXgoTWF0aC5hYnMoc1swXSksTWF0aC5hYnMoc1sxXSkpLGM9TWF0aC5mbG9vcihNYXRoLmxvZyhsKS9NYXRoLkxOMTArLjAxKSx1PXZvaWQgMD09PXQubWluZXhwb25lbnQ/Mzp0Lm1pbmV4cG9uZW50O01hdGguYWJzKGMpPnUmJih1dCh0LmV4cG9uZW50Zm9ybWF0KSYmIWZ0KGMpP3QuX3RpY2tleHBvbmVudD0zKk1hdGgucm91bmQoKGMtMSkvMyk6dC5fdGlja2V4cG9uZW50PWMpfWVsc2UgdC5fdGlja3JvdW5kPW51bGx9ZnVuY3Rpb24gbHQodCxlLHIpe3ZhciBuPXQudGlja2ZvbnR8fHt9O3JldHVybnt4OmUsZHg6MCxkeTowLHRleHQ6cnx8IiIsZm9udFNpemU6bi5zaXplLGZvbnQ6bi5mYW1pbHksZm9udENvbG9yOm4uY29sb3J9fVYuYXV0b1RpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gTWF0aC5wb3codCxNYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4xMCkpfWlmKCJkYXRlIj09PXQudHlwZSl7dC50aWNrMD1zLmRhdGVUaWNrMCh0LmNhbGVuZGFyLDApO3ZhciBhPTIqZTtpZihhPnYpZS89dixyPW4oMTApLHQuZHRpY2s9Ik0iKzEyKm90KGUsciwkKTtlbHNlIGlmKGE+VCllLz1ULHQuZHRpY2s9Ik0iK290KGUsMSx0dCk7ZWxzZSBpZihhPk0pe3QuZHRpY2s9b3QoZSxNLHQuX2hhc0RheU9mV2Vla0JyZWFrcz9bMSwyLDcsMTRdOnJ0KTt2YXIgbz1WLmdldFRpY2tGb3JtYXQodCksbD0icGVyaW9kIj09PXQudGlja2xhYmVsbW9kZTtsJiYodC5fcmF3VGljazA9dC50aWNrMCksLyVbdVZXXS8udGVzdChvKT90LnRpY2swPXMuZGF0ZVRpY2swKHQuY2FsZW5kYXIsMik6dC50aWNrMD1zLmRhdGVUaWNrMCh0LmNhbGVuZGFyLDEpLGwmJih0Ll9kb3dUaWNrMD10LnRpY2swKX1lbHNlIGE+RT90LmR0aWNrPW90KGUsRSx0dCk6YT5MP3QuZHRpY2s9b3QoZSxMLGV0KTphPkM/dC5kdGljaz1vdChlLEMsZXQpOihyPW4oMTApLHQuZHRpY2s9b3QoZSxyLCQpKX1lbHNlIGlmKCJsb2ciPT09dC50eXBlKXt0LnRpY2swPTA7dmFyIGM9cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCk7aWYoZT4uNyl0LmR0aWNrPU1hdGguY2VpbChlKTtlbHNlIGlmKE1hdGguYWJzKGNbMV0tY1swXSk8MSl7dmFyIHU9MS41Kk1hdGguYWJzKChjWzFdLWNbMF0pL2UpO2U9TWF0aC5hYnMoTWF0aC5wb3coMTAsY1sxXSktTWF0aC5wb3coMTAsY1swXSkpL3Uscj1uKDEwKSx0LmR0aWNrPSJMIitvdChlLHIsJCl9ZWxzZSB0LmR0aWNrPWU+LjM/IkQyIjoiRDEifWVsc2UiY2F0ZWdvcnkiPT09dC50eXBlfHwibXVsdGljYXRlZ29yeSI9PT10LnR5cGU/KHQudGljazA9MCx0LmR0aWNrPU1hdGguY2VpbChNYXRoLm1heChlLDEpKSk6QXQodCk/KHQudGljazA9MCxyPTEsdC5kdGljaz1vdChlLHIsYXQpKToodC50aWNrMD0wLHI9bigxMCksdC5kdGljaz1vdChlLHIsJCkpO2lmKDA9PT10LmR0aWNrJiYodC5kdGljaz0xKSwhaSh0LmR0aWNrKSYmInN0cmluZyIhPXR5cGVvZiB0LmR0aWNrKXt2YXIgZj10LmR0aWNrO3Rocm93IHQuZHRpY2s9MSwiYXguZHRpY2sgZXJyb3I6ICIrU3RyaW5nKGYpfX0sVi50aWNrSW5jcmVtZW50PWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPXI/LTE6MTtpZihpKGUpKXJldHVybiBzLmluY3JlbWVudCh0LG8qZSk7dmFyIGw9ZS5jaGFyQXQoMCksYz1vKk51bWJlcihlLnN1YnN0cigxKSk7aWYoIk0iPT09bClyZXR1cm4gcy5pbmNyZW1lbnRNb250aCh0LGMsYSk7aWYoIkwiPT09bClyZXR1cm4gTWF0aC5sb2coTWF0aC5wb3coMTAsdCkrYykvTWF0aC5MTjEwO2lmKCJEIj09PWwpe3ZhciB1PSJEMiI9PT1lP2l0Om50LGY9dCsuMDEqbyxoPXMucm91bmRVcChzLm1vZChmLDEpLHUscik7cmV0dXJuIE1hdGguZmxvb3IoZikrTWF0aC5sb2cobi5yb3VuZChNYXRoLnBvdygxMCxoKSwxKSkvTWF0aC5MTjEwfXRocm93InVucmVjb2duaXplZCBkdGljayAiK1N0cmluZyhlKX0sVi50aWNrRmlyc3Q9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnIybHx8TnVtYmVyLGE9cy5zaW1wbGVNYXAodC5yYW5nZSxyLHZvaWQgMCx2b2lkIDAsZSksbz1hWzFdPGFbMF0sbD1vP01hdGguZmxvb3I6TWF0aC5jZWlsLGM9WChhKVswXSx1PXQuZHRpY2ssZj1yKHQudGljazApO2lmKGkodSkpe3ZhciBoPWwoKGMtZikvdSkqdStmO3JldHVybiJjYXRlZ29yeSIhPT10LnR5cGUmJiJtdWx0aWNhdGVnb3J5IiE9PXQudHlwZXx8KGg9cy5jb25zdHJhaW4oaCwwLHQuX2NhdGVnb3JpZXMubGVuZ3RoLTEpKSxofXZhciBwPXUuY2hhckF0KDApLGQ9TnVtYmVyKHUuc3Vic3RyKDEpKTtpZigiTSI9PT1wKXtmb3IodmFyIG0sZyx2LHk9MCx4PWY7eTwxMDspe2lmKCgobT1WLnRpY2tJbmNyZW1lbnQoeCx1LG8sdC5jYWxlbmRhcikpLWMpKih4LWMpPD0wKXJldHVybiBvP01hdGgubWluKHgsbSk6TWF0aC5tYXgoeCxtKTtnPShjLSh4K20pLzIpLyhtLXgpLHY9cCsoTWF0aC5hYnMoTWF0aC5yb3VuZChnKSl8fDEpKmQseD1WLnRpY2tJbmNyZW1lbnQoeCx2LGc8MD8hbzpvLHQuY2FsZW5kYXIpLHkrK31yZXR1cm4gcy5lcnJvcigidGlja0ZpcnN0IGRpZCBub3QgY29udmVyZ2UiLHQpLHh9aWYoIkwiPT09cClyZXR1cm4gTWF0aC5sb2cobCgoTWF0aC5wb3coMTAsYyktZikvZCkqZCtmKS9NYXRoLkxOMTA7aWYoIkQiPT09cCl7dmFyIGI9IkQyIj09PXU/aXQ6bnQsXz1zLnJvdW5kVXAocy5tb2QoYywxKSxiLG8pO3JldHVybiBNYXRoLmZsb29yKGMpK01hdGgubG9nKG4ucm91bmQoTWF0aC5wb3coMTAsXyksMSkpL01hdGguTE4xMH10aHJvdyJ1bnJlY29nbml6ZWQgZHRpY2sgIitTdHJpbmcodSl9LFYudGlja1RleHQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGEsbz1sdCh0LGUpLGw9ImFycmF5Ij09PXQudGlja21vZGUsYz1yfHxsLHU9dC50eXBlLGY9ImNhdGVnb3J5Ij09PXU/dC5kMmxfbm9hZGQ6dC5kMmw7aWYobCYmQXJyYXkuaXNBcnJheSh0LnRpY2t0ZXh0KSl7dmFyIGg9cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCkscD0oTWF0aC5hYnMoaFsxXS1oWzBdKS0odC5fbEJyZWFrc3x8MCkpLzFlNDtmb3IoYT0wO2E8dC50aWNrdGV4dC5sZW5ndGgmJiEoTWF0aC5hYnMoZS1mKHQudGlja3ZhbHNbYV0pKTxwKTthKyspO2lmKGE8dC50aWNrdGV4dC5sZW5ndGgpcmV0dXJuIG8udGV4dD1TdHJpbmcodC50aWNrdGV4dFthXSksb31mdW5jdGlvbiBkKG4pe2lmKHZvaWQgMD09PW4pcmV0dXJuITA7aWYocilyZXR1cm4ibm9uZSI9PT1uO3ZhciBpPXtmaXJzdDp0Ll90bWluLGxhc3Q6dC5fdG1heH1bbl07cmV0dXJuImFsbCIhPT1uJiZlIT09aX12YXIgbT1yPyJuZXZlciI6Im5vbmUiIT09dC5leHBvbmVudGZvcm1hdCYmZCh0LnNob3dleHBvbmVudCk/ImhpZGUiOiIiO2lmKCJkYXRlIj09PXU/ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9dC5fdGlja3JvdW5kLG89ciYmdC5ob3ZlcmZvcm1hdHx8Vi5nZXRUaWNrRm9ybWF0KHQpO24mJihhPWkoYSk/NDp7eToibSIsbToiZCIsZDoiTSIsTToiUyIsUzo0fVthXSk7dmFyIGwsYz1zLmZvcm1hdERhdGUoZS54LG8sYSx0Ll9kYXRlRm9ybWF0LHQuY2FsZW5kYXIsdC5fZXh0cmFGb3JtYXQpLHU9Yy5pbmRleE9mKCJcbiIpOy0xIT09dSYmKGw9Yy5zdWJzdHIodSsxKSxjPWMuc3Vic3RyKDAsdSkpO24mJigiMDA6MDA6MDAiPT09Y3x8IjAwOjAwIj09PWM/KGM9bCxsPSIiKTo4PT09Yy5sZW5ndGgmJihjPWMucmVwbGFjZSgvOjAwJC8sIiIpKSk7aWYobClpZihyKSJkIj09PWE/Yys9IiwgIitsOmM9bCsoYz8iLCAiK2M6IiIpO2Vsc2UgaWYodC5faW5DYWxjVGlja3MmJnQuX3ByZXZEYXRlSGVhZD09PWwpe3ZhciBmPVN0KHQpLGg9dC5fcmVhbFNpZGV8fHQuc2lkZTsoIWYmJiJ0b3AiPT09aHx8ZiYmImJvdHRvbSI9PT1oKSYmKGMrPSI8YnI+ICIpfWVsc2UgdC5fcHJldkRhdGVIZWFkPWwsYys9Ijxicj4iK2w7ZS50ZXh0PWN9KHQsbyxyLGMpOiJsb2ciPT09dT9mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvPXQuZHRpY2ssbD1lLngsYz10LnRpY2tmb3JtYXQsdT0ic3RyaW5nIj09dHlwZW9mIG8mJm8uY2hhckF0KDApOyJuZXZlciI9PT1hJiYoYT0iIik7biYmIkwiIT09dSYmKG89IkwzIix1PSJMIik7aWYoY3x8IkwiPT09dSllLnRleHQ9aHQoTWF0aC5wb3coMTAsbCksdCxhLG4pO2Vsc2UgaWYoaShvKXx8IkQiPT09dSYmcy5tb2QobCsuMDEsMSk8LjEpe3ZhciBmPU1hdGgucm91bmQobCksaD1NYXRoLmFicyhmKSxwPXQuZXhwb25lbnRmb3JtYXQ7InBvd2VyIj09PXB8fHV0KHApJiZmdChmKT8oZS50ZXh0PTA9PT1mPzE6MT09PWY/IjEwIjoiMTA8c3VwPiIrKGY+MT8iIjpQKStoKyI8L3N1cD4iLGUuZm9udFNpemUqPTEuMjUpOigiZSI9PT1wfHwiRSI9PT1wKSYmaD4yP2UudGV4dD0iMSIrcCsoZj4wPyIrIjpQKStoOihlLnRleHQ9aHQoTWF0aC5wb3coMTAsbCksdCwiIiwiZmFrZWhvdmVyIiksIkQxIj09PW8mJiJ5Ij09PXQuX2lkLmNoYXJBdCgwKSYmKGUuZHktPWUuZm9udFNpemUvNikpfWVsc2V7aWYoIkQiIT09dSl0aHJvdyJ1bnJlY29nbml6ZWQgZHRpY2sgIitTdHJpbmcobyk7ZS50ZXh0PVN0cmluZyhNYXRoLnJvdW5kKE1hdGgucG93KDEwLHMubW9kKGwsMSkpKSksZS5mb250U2l6ZSo9Ljc1fWlmKCJEMSI9PT10LmR0aWNrKXt2YXIgZD1TdHJpbmcoZS50ZXh0KS5jaGFyQXQoMCk7IjAiIT09ZCYmIjEiIT09ZHx8KCJ5Ij09PXQuX2lkLmNoYXJBdCgwKT9lLmR4LT1lLmZvbnRTaXplLzQ6KGUuZHkrPWUuZm9udFNpemUvMixlLmR4Kz0odC5yYW5nZVsxXT50LnJhbmdlWzBdPzE6LTEpKmUuZm9udFNpemUqKGw8MD8uNTouMjUpKSl9fSh0LG8sMCxjLG0pOiJjYXRlZ29yeSI9PT11P2Z1bmN0aW9uKHQsZSl7dmFyIHI9dC5fY2F0ZWdvcmllc1tNYXRoLnJvdW5kKGUueCldO3ZvaWQgMD09PXImJihyPSIiKTtlLnRleHQ9U3RyaW5nKHIpfSh0LG8pOiJtdWx0aWNhdGVnb3J5Ij09PXU/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGgucm91bmQoZS54KSxpPXQuX2NhdGVnb3JpZXNbbl18fFtdLGE9dm9pZCAwPT09aVsxXT8iIjpTdHJpbmcoaVsxXSksbz12b2lkIDA9PT1pWzBdPyIiOlN0cmluZyhpWzBdKTtyP2UudGV4dD1vKyIgLSAiK2E6KGUudGV4dD1hLGUudGV4dDI9byl9KHQsbyxyKTpBdCh0KT9mdW5jdGlvbih0LGUscixuLGkpe2lmKCJyYWRpYW5zIiE9PXQudGhldGF1bml0fHxyKWUudGV4dD1odChlLngsdCxpLG4pO2Vsc2V7dmFyIGE9ZS54LzE4MDtpZigwPT09YSllLnRleHQ9IjAiO2Vsc2V7dmFyIG89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiBNYXRoLmFicyh0LWUpPD0xZS02fXZhciByPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0xOyFlKE1hdGgucm91bmQodCpyKS9yLHQpOylyKj0xMDtyZXR1cm4gcn0odCksbj10KnIsaT1NYXRoLmFicyhmdW5jdGlvbiB0KHIsbil7cmV0dXJuIGUobiwwKT9yOnQobixyJW4pfShuLHIpKTtyZXR1cm5bTWF0aC5yb3VuZChuL2kpLE1hdGgucm91bmQoci9pKV19KGEpO2lmKG9bMV0+PTEwMCllLnRleHQ9aHQocy5kZWcycmFkKGUueCksdCxpLG4pO2Vsc2V7dmFyIGw9ZS54PDA7MT09PW9bMV0/MT09PW9bMF0/ZS50ZXh0PSJcdTAzYzAiOmUudGV4dD1vWzBdKyJcdTAzYzAiOmUudGV4dD1bIjxzdXA+IixvWzBdLCI8L3N1cD4iLCJcdTIwNDQiLCI8c3ViPiIsb1sxXSwiPC9zdWI+IiwiXHUwM2MwIl0uam9pbigiIiksbCYmKGUudGV4dD1QK2UudGV4dCl9fX19KHQsbyxyLGMsbSk6ZnVuY3Rpb24odCxlLHIsbixpKXsibmV2ZXIiPT09aT9pPSIiOiJhbGwiPT09dC5zaG93ZXhwb25lbnQmJk1hdGguYWJzKGUueC90LmR0aWNrKTwxZS02JiYoaT0iaGlkZSIpO2UudGV4dD1odChlLngsdCxpLG4pfSh0LG8sMCxjLG0pLG58fCh0LnRpY2twcmVmaXgmJiFkKHQuc2hvd3RpY2twcmVmaXgpJiYoby50ZXh0PXQudGlja3ByZWZpeCtvLnRleHQpLHQudGlja3N1ZmZpeCYmIWQodC5zaG93dGlja3N1ZmZpeCkmJihvLnRleHQrPXQudGlja3N1ZmZpeCkpLCJib3VuZGFyaWVzIj09PXQudGlja3Nvbnx8dC5zaG93ZGl2aWRlcnMpe3ZhciBnPWZ1bmN0aW9uKGUpe3ZhciByPXQubDJwKGUpO3JldHVybiByPj0wJiZyPD10Ll9sZW5ndGg/ZTpudWxsfTtvLnhibmQ9W2coby54LS41KSxnKG8ueCt0LmR0aWNrLS41KV19cmV0dXJuIG99LFYuaG92ZXJMYWJlbFRleHQ9ZnVuY3Rpb24odCxlLHIpe3ImJih0PXMuZXh0ZW5kRmxhdCh7fSx0LHtob3ZlcmZvcm1hdDpyfSkpO3ZhciBuPUFycmF5LmlzQXJyYXkoZSk/ZVswXTplLGk9QXJyYXkuaXNBcnJheShlKT9lWzFdOnZvaWQgMDtpZih2b2lkIDAhPT1pJiZpIT09bilyZXR1cm4gVi5ob3ZlckxhYmVsVGV4dCh0LG4scikrIiAtICIrVi5ob3ZlckxhYmVsVGV4dCh0LGkscik7dmFyIGE9ImxvZyI9PT10LnR5cGUmJm48PTAsbz1WLnRpY2tUZXh0KHQsdC5jMmwoYT8tbjpuKSwiaG92ZXIiKS50ZXh0O3JldHVybiBhPzA9PT1uPyIwIjpQK286b307dmFyIGN0PVsiZiIsInAiLCJuIiwiXHUwM2JjIiwibSIsIiIsImsiLCJNIiwiRyIsIlQiXTtmdW5jdGlvbiB1dCh0KXtyZXR1cm4iU0kiPT09dHx8IkIiPT09dH1mdW5jdGlvbiBmdCh0KXtyZXR1cm4gdD4xNHx8dDwtMTV9ZnVuY3Rpb24gaHQodCxlLHIsbil7dmFyIGE9dDwwLG89ZS5fdGlja3JvdW5kLGw9cnx8ZS5leHBvbmVudGZvcm1hdHx8IkIiLGM9ZS5fdGlja2V4cG9uZW50LHU9Vi5nZXRUaWNrRm9ybWF0KGUpLGY9ZS5zZXBhcmF0ZXRob3VzYW5kcztpZihuKXt2YXIgaD17ZXhwb25lbnRmb3JtYXQ6bCxtaW5leHBvbmVudDplLm1pbmV4cG9uZW50LGR0aWNrOiJub25lIj09PWUuc2hvd2V4cG9uZW50P2UuZHRpY2s6aSh0KSYmTWF0aC5hYnModCl8fDEscmFuZ2U6Im5vbmUiPT09ZS5zaG93ZXhwb25lbnQ/ZS5yYW5nZS5tYXAoZS5yMmQpOlswLHR8fDFdfTtzdChoKSxvPShOdW1iZXIoaC5fdGlja3JvdW5kKXx8MCkrNCxjPWguX3RpY2tleHBvbmVudCxlLmhvdmVyZm9ybWF0JiYodT1lLmhvdmVyZm9ybWF0KX1pZih1KXJldHVybiBlLl9udW1Gb3JtYXQodSkodCkucmVwbGFjZSgvLS9nLFApO3ZhciBwLGQ9TWF0aC5wb3coMTAsLW8pLzI7aWYoIm5vbmUiPT09bCYmKGM9MCksKHQ9TWF0aC5hYnModCkpPGQpdD0iMCIsYT0hMTtlbHNle2lmKHQrPWQsYyYmKHQqPU1hdGgucG93KDEwLC1jKSxvKz1jKSwwPT09byl0PVN0cmluZyhNYXRoLmZsb29yKHQpKTtlbHNlIGlmKG88MCl7dD0odD1TdHJpbmcoTWF0aC5yb3VuZCh0KSkpLnN1YnN0cigwLHQubGVuZ3RoK28pO2Zvcih2YXIgbT1vO208MDttKyspdCs9IjAifWVsc2V7dmFyIGc9KHQ9U3RyaW5nKHQpKS5pbmRleE9mKCIuIikrMTtnJiYodD10LnN1YnN0cigwLGcrbykucmVwbGFjZSgvXC4/MCskLywiIikpfXQ9cy5udW1TZXBhcmF0ZSh0LGUuX3NlcGFyYXRvcnMsZil9YyYmImhpZGUiIT09bCYmKHV0KGwpJiZmdChjKSYmKGw9InBvd2VyIikscD1jPDA/UCstYzoicG93ZXIiIT09bD8iKyIrYzpTdHJpbmcoYyksImUiPT09bHx8IkUiPT09bD90Kz1sK3A6InBvd2VyIj09PWw/dCs9Ilx4ZDcxMDxzdXA+IitwKyI8L3N1cD4iOiJCIj09PWwmJjk9PT1jP3QrPSJCIjp1dChsKSYmKHQrPWN0W2MvMys1XSkpO3JldHVybiBhP1ArdDp0fWZ1bmN0aW9uIHB0KHQsZSl7Zm9yKHZhciByPVtdLG49e30saT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO25bYS50ZXh0Ml0/blthLnRleHQyXS5wdXNoKGEueCk6blthLnRleHQyXT1bYS54XX1mb3IodmFyIG8gaW4gbilyLnB1c2gobHQodCxzLmludGVycChuW29dLC41KSxvKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gZHQodCl7cmV0dXJuIHZvaWQgMCE9PXQucGVyaW9kWD90LnBlcmlvZFg6dC54fWZ1bmN0aW9uIG10KHQpe3JldHVyblt0LnRleHQsdC54LHQuYXhJbmZvLHQuZm9udCx0LmZvbnRTaXplLHQuZm9udENvbG9yXS5qb2luKCJfIil9ZnVuY3Rpb24gZ3QodCl7dmFyIGU9dC50aXRsZS5mb250LnNpemUscj0odC50aXRsZS50ZXh0Lm1hdGNoKGMuQlJfVEFHX0FMTCl8fFtdKS5sZW5ndGg7cmV0dXJuIHQudGl0bGUuaGFzT3duUHJvcGVydHkoInN0YW5kb2ZmIik/cj9lKihOK3Iqaik6ZSpOOnI/ZSoocisxKSpqOmV9ZnVuY3Rpb24gdnQodCxlKXt2YXIgcj10LmwycChlKTtyZXR1cm4gcj4xJiZyPHQuX2xlbmd0aC0xfWZ1bmN0aW9uIHl0KHQpe3ZhciBlPW4uc2VsZWN0KHQpLHI9ZS5zZWxlY3QoIi50ZXh0LW1hdGgtZ3JvdXAiKTtyZXR1cm4gci5lbXB0eSgpP2Uuc2VsZWN0KCJ0ZXh0Iik6cn1mdW5jdGlvbiB4dCh0KXtyZXR1cm4gdC5faWQrIi5hdXRvbWFyZ2luIn1mdW5jdGlvbiBidCh0KXtyZXR1cm4geHQodCkrIi5taXJyb3IifWZ1bmN0aW9uIF90KHQpe3JldHVybiB0Ll9pZCsiLnJhbmdlc2xpZGVyIn1mdW5jdGlvbiB3dCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKS0xPT09dC5pbmRleE9mKGVbcl0pJiZ0LnB1c2goZVtyXSl9ZnVuY3Rpb24gVHQodCxlLHIpe3ZhciBuLGksYT1bXSxvPVtdLGw9dC5sYXlvdXQ7Zm9yKG49MDtuPGUubGVuZ3RoO24rKylhLnB1c2goVi5nZXRGcm9tSWQodCxlW25dKSk7Zm9yKG49MDtuPHIubGVuZ3RoO24rKylvLnB1c2goVi5nZXRGcm9tSWQodCxyW25dKSk7dmFyIGM9T2JqZWN0LmtleXMocCksdT1bImFuY2hvciIsImRvbWFpbiIsIm92ZXJsYXlpbmciLCJwb3NpdGlvbiIsInNpZGUiLCJ0aWNrYW5nbGUiLCJlZGl0VHlwZSJdLGY9WyJsaW5lYXIiLCJsb2ciXTtmb3Iobj0wO248Yy5sZW5ndGg7bisrKXt2YXIgaD1jW25dLGQ9YVswXVtoXSxtPW9bMF1baF0sZz0hMCx2PSExLHk9ITE7aWYoIl8iIT09aC5jaGFyQXQoMCkmJiJmdW5jdGlvbiIhPXR5cGVvZiBkJiYtMT09PXUuaW5kZXhPZihoKSl7Zm9yKGk9MTtpPGEubGVuZ3RoJiZnO2krKyl7dmFyIHg9YVtpXVtoXTsidHlwZSI9PT1oJiYtMSE9PWYuaW5kZXhPZihkKSYmLTEhPT1mLmluZGV4T2YoeCkmJmQhPT14P3Y9ITA6eCE9PWQmJihnPSExKX1mb3IoaT0xO2k8by5sZW5ndGgmJmc7aSsrKXt2YXIgYj1vW2ldW2hdOyJ0eXBlIj09PWgmJi0xIT09Zi5pbmRleE9mKG0pJiYtMSE9PWYuaW5kZXhPZihiKSYmbSE9PWI/eT0hMDpvW2ldW2hdIT09bSYmKGc9ITEpfWcmJih2JiYobFthWzBdLl9uYW1lXS50eXBlPSJsaW5lYXIiKSx5JiYobFtvWzBdLl9uYW1lXS50eXBlPSJsaW5lYXIiKSxrdChsLGgsYSxvLHQuX2Z1bGxMYXlvdXQuX2RmbHRUaXRsZSkpfX1mb3Iobj0wO248dC5fZnVsbExheW91dC5hbm5vdGF0aW9ucy5sZW5ndGg7bisrKXt2YXIgXz10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zW25dOy0xIT09ZS5pbmRleE9mKF8ueHJlZikmJi0xIT09ci5pbmRleE9mKF8ueXJlZikmJnMuc3dhcEF0dHJzKGwuYW5ub3RhdGlvbnNbbl0sWyI/Il0pfX1mdW5jdGlvbiBrdCh0LGUscixuLGkpe3ZhciBhLG89cy5uZXN0ZWRQcm9wZXJ0eSxsPW8odFtyWzBdLl9uYW1lXSxlKS5nZXQoKSxjPW8odFtuWzBdLl9uYW1lXSxlKS5nZXQoKTtmb3IoInRpdGxlIj09PWUmJihsJiZsLnRleHQ9PT1pLngmJihsLnRleHQ9aS55KSxjJiZjLnRleHQ9PT1pLnkmJihjLnRleHQ9aS54KSksYT0wO2E8ci5sZW5ndGg7YSsrKW8odCxyW2FdLl9uYW1lKyIuIitlKS5zZXQoYyk7Zm9yKGE9MDthPG4ubGVuZ3RoO2ErKylvKHQsblthXS5fbmFtZSsiLiIrZSkuc2V0KGwpfWZ1bmN0aW9uIEF0KHQpe3JldHVybiJhbmd1bGFyYXhpcyI9PT10Ll9pZH1mdW5jdGlvbiBNdCh0LGUpe2Zvcih2YXIgcj1lLl9yYW5nZWJyZWFrcy5sZW5ndGgsbj0wO248cjtuKyspe3ZhciBpPWUuX3JhbmdlYnJlYWtzW25dO2lmKHQ+PWkubWluJiZ0PGkubWF4KXJldHVybiBpLm1heH1yZXR1cm4gdH1mdW5jdGlvbiBTdCh0KXtyZXR1cm4tMSE9PSh0LnRpY2tsYWJlbHBvc2l0aW9ufHwiIikuaW5kZXhPZigiaW5zaWRlIil9ZnVuY3Rpb24gRXQodCxlKXtTdCh0Ll9hbmNob3JBeGlzfHx7fSkmJnQuX2hpZGVDb3VudGVyQXhpc0luc2lkZVRpY2tMYWJlbHMmJnQuX2hpZGVDb3VudGVyQXhpc0luc2lkZVRpY2tMYWJlbHMoZSl9Vi5nZXRUaWNrRm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzLGw7ZnVuY3Rpb24gYyh0KXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQ/dDpOdW1iZXIodC5yZXBsYWNlKCJNIiwiIikpKlR9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPVsiTCIsIkQiXTtpZih0eXBlb2YgdD09dHlwZW9mIGUpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdC1lO3ZhciBuPXIuaW5kZXhPZih0LmNoYXJBdCgwKSksaT1yLmluZGV4T2YoZS5jaGFyQXQoMCkpO3JldHVybiBuPT09aT9OdW1iZXIodC5yZXBsYWNlKC8oTHxEKS9nLCIiKSktTnVtYmVyKGUucmVwbGFjZSgvKEx8RCkvZywiIikpOm4taX1yZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/MTotMX1mdW5jdGlvbiBmKHQsZSl7dmFyIHI9bnVsbD09PWVbMF0sbj1udWxsPT09ZVsxXSxpPXUodCxlWzBdKT49MCxhPXUodCxlWzFdKTw9MDtyZXR1cm4ocnx8aSkmJihufHxhKX1pZih0LnRpY2tmb3JtYXRzdG9wcyYmdC50aWNrZm9ybWF0c3RvcHMubGVuZ3RoPjApc3dpdGNoKHQudHlwZSl7Y2FzZSJkYXRlIjpjYXNlImxpbmVhciI6Zm9yKGU9MDtlPHQudGlja2Zvcm1hdHN0b3BzLmxlbmd0aDtlKyspaWYoKG49dC50aWNrZm9ybWF0c3RvcHNbZV0pLmVuYWJsZWQmJihpPXQuZHRpY2ssYT1uLmR0aWNrcmFuZ2Usbz12b2lkIDAscz12b2lkIDAsbD12b2lkIDAsbz1jfHxmdW5jdGlvbih0KXtyZXR1cm4gdH0scz1hWzBdLGw9YVsxXSwoIXMmJiJudW1iZXIiIT10eXBlb2Ygc3x8byhzKTw9byhpKSkmJighbCYmIm51bWJlciIhPXR5cGVvZiBsfHxvKGwpPj1vKGkpKSkpe3I9bjticmVha31icmVhaztjYXNlImxvZyI6Zm9yKGU9MDtlPHQudGlja2Zvcm1hdHN0b3BzLmxlbmd0aDtlKyspaWYoKG49dC50aWNrZm9ybWF0c3RvcHNbZV0pLmVuYWJsZWQmJmYodC5kdGljayxuLmR0aWNrcmFuZ2UpKXtyPW47YnJlYWt9fXJldHVybiByP3IudmFsdWU6dC50aWNrZm9ybWF0fSxWLmdldFN1YnBsb3RzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dC5fc3VicGxvdHMsbj1yLmNhcnRlc2lhbi5jb25jYXQoci5nbDJkfHxbXSksaT1lP1YuZmluZFN1YnBsb3RzV2l0aEF4aXMobixlKTpuO3JldHVybiBpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdWJzdHIoMSkuc3BsaXQoInkiKSxuPWUuc3Vic3RyKDEpLnNwbGl0KCJ5Iik7cmV0dXJuIHJbMF09PT1uWzBdPytyWzFdLStuWzFdOityWzBdLStuWzBdfSkpLGl9LFYuZmluZFN1YnBsb3RzV2l0aEF4aXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IFJlZ0V4cCgieCI9PT1lLl9pZC5jaGFyQXQoMCk/Il4iK2UuX2lkKyJ5IjplLl9pZCsiJCIpLG49W10saT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldO3IudGVzdChhKSYmbi5wdXNoKGEpfXJldHVybiBufSxWLm1ha2VDbGlwUGF0aHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZighZS5faGFzT25seUxhcmdlU3Bsb21zKXt2YXIgcixpLGE9e19vZmZzZXQ6MCxfbGVuZ3RoOmUud2lkdGgsX2lkOiIifSxvPXtfb2Zmc2V0OjAsX2xlbmd0aDplLmhlaWdodCxfaWQ6IiJ9LHM9Vi5saXN0KHQsIngiLCEwKSxsPVYubGlzdCh0LCJ5IiwhMCksYz1bXTtmb3Iocj0wO3I8cy5sZW5ndGg7cisrKWZvcihjLnB1c2goe3g6c1tyXSx5Om99KSxpPTA7aTxsLmxlbmd0aDtpKyspMD09PXImJmMucHVzaCh7eDphLHk6bFtpXX0pLGMucHVzaCh7eDpzW3JdLHk6bFtpXX0pO3ZhciB1PWUuX2NsaXBzLnNlbGVjdEFsbCgiLmF4ZXNjbGlwIikuZGF0YShjLChmdW5jdGlvbih0KXtyZXR1cm4gdC54Ll9pZCt0LnkuX2lkfSkpO3UuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiYXhlc2NsaXAiLCEwKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKHQpe3JldHVybiJjbGlwIitlLl91aWQrdC54Ll9pZCt0LnkuX2lkfSkpLmFwcGVuZCgicmVjdCIpLHUuZXhpdCgpLnJlbW92ZSgpLHUuZWFjaCgoZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuc2VsZWN0KCJyZWN0IikuYXR0cih7eDp0LnguX29mZnNldHx8MCx5OnQueS5fb2Zmc2V0fHwwLHdpZHRoOnQueC5fbGVuZ3RofHwxLGhlaWdodDp0LnkuX2xlbmd0aHx8MX0pfSkpfX0sVi5kcmF3PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0OyJyZWRyYXciPT09ZSYmbi5fcGFwZXIuc2VsZWN0QWxsKCJnLnN1YnBsb3QiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9bi5fcGxvdHNbZV07aWYocil7dmFyIGk9ci54YXhpcyxhPXIueWF4aXM7ci54YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIraS5faWQrInRpY2siKS5yZW1vdmUoKSxyLnlheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIithLl9pZCsidGljayIpLnJlbW92ZSgpLHIueGF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2kuX2lkKyJ0aWNrMiIpLnJlbW92ZSgpLHIueWF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2EuX2lkKyJ0aWNrMiIpLnJlbW92ZSgpLHIueGF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2kuX2lkKyJkaXZpZGVyIikucmVtb3ZlKCksci55YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIrYS5faWQrImRpdmlkZXIiKS5yZW1vdmUoKSxyLmdyaWRsYXllciYmci5ncmlkbGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCksci56ZXJvbGluZWxheWVyJiZyLnplcm9saW5lbGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCksbi5faW5mb2xheWVyLnNlbGVjdCgiLmctIitpLl9pZCsidGl0bGUiKS5yZW1vdmUoKSxuLl9pbmZvbGF5ZXIuc2VsZWN0KCIuZy0iK2EuX2lkKyJ0aXRsZSIpLnJlbW92ZSgpfX0pKTt2YXIgaT1lJiYicmVkcmF3IiE9PWU/ZTpWLmxpc3RJZHModCk7cmV0dXJuIHMuc3luY09yQXN5bmMoaS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe2lmKGUpe3ZhciBuPVYuZ2V0RnJvbUlkKHQsZSksaT1WLmRyYXdPbmUodCxuLHIpO3JldHVybiBuLl9yPW4ucmFuZ2Uuc2xpY2UoKSxuLl9ybD1zLnNpbXBsZU1hcChuLl9yLG4ucjJsKSxpfX19KSkpfSxWLmRyYXdPbmU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbDtyPXJ8fHt9LGUuc2V0U2NhbGUoKTt2YXIgYz10Ll9mdWxsTGF5b3V0LHA9ZS5faWQsZD1wLmNoYXJBdCgwKSxtPVYuY291bnRlckxldHRlcihwKSxnPWMuX3Bsb3RzW2UuX21haW5TdWJwbG90XTtpZihnKXt2YXIgdj1nW2QrImF4aXNsYXllciJdLHk9ZS5fbWFpbkxpbmVQb3NpdGlvbix4PWUuX21haW5NaXJyb3JQb3NpdGlvbixiPWUuX3ZhbHM9Vi5jYWxjVGlja3MoZSksXz1bZS5taXJyb3IseSx4XS5qb2luKCJfIik7Zm9yKG49MDtuPGIubGVuZ3RoO24rKyliW25dLmF4SW5mbz1fO2UuX3NlbGVjdGlvbnM9e30sZS5fdGlja0FuZ2xlcyYmKGUuX3ByZXZUaWNrQW5nbGVzPWUuX3RpY2tBbmdsZXMpLGUuX3RpY2tBbmdsZXM9e30sZS5fZGVwdGg9bnVsbDt2YXIgdz17fTtpZihlLnZpc2libGUpe3ZhciBULGssQT1WLm1ha2VUcmFuc1RpY2tGbihlKSxNPVYubWFrZVRyYW5zVGlja0xhYmVsRm4oZSksUz0iaW5zaWRlIj09PWUudGlja3MsRT0ib3V0c2lkZSI9PT1lLnRpY2tzO2lmKCJib3VuZGFyaWVzIj09PWUudGlja3Nvbil7dmFyIEw9ZnVuY3Rpb24odCxlKXt2YXIgcixuPVtdLGk9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnhibmRbZV07bnVsbCE9PXImJm4ucHVzaChzLmV4dGVuZEZsYXQoe30sdCx7eDpyfSkpfTtpZihlLmxlbmd0aCl7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylpKGVbcl0sMCk7aShlW3ItMV0sMSl9cmV0dXJuIG59KDAsYik7az1WLmNsaXBFbmRzKGUsTCksVD1TP2s6TH1lbHNlIGs9Vi5jbGlwRW5kcyhlLGIpLFQ9UyYmInBlcmlvZCIhPT1lLnRpY2tsYWJlbG1vZGU/azpiO3ZhciBDPWUuX2dyaWRWYWxzPWssUD1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1bXSxhPWUubGVuZ3RoJiZlW2UubGVuZ3RoLTFdLng8ZVswXS54LG89ZnVuY3Rpb24odCxlKXt2YXIgcj10LnhibmRbZV07bnVsbCE9PXImJmkucHVzaChzLmV4dGVuZEZsYXQoe30sdCx7eDpyfSkpfTtpZih0LnNob3dkaXZpZGVycyYmZS5sZW5ndGgpe2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBsPWVbcl07bC50ZXh0MiE9PW4mJm8obCxhPzE6MCksbj1sLnRleHQyfW8oZVtyLTFdLGE/MDoxKX1yZXR1cm4gaX0oZSxiKTtpZighYy5faGFzT25seUxhcmdlU3Bsb21zKXt2YXIgST1lLl9zdWJwbG90c1dpdGgsTz17fTtmb3Iobj0wO248SS5sZW5ndGg7bisrKXtpPUlbbl07dmFyIHo9KGw9Yy5fcGxvdHNbaV0pW20rImF4aXMiXSxEPXouX21haW5BeGlzLl9pZDtpZighT1tEXSl7T1tEXT0xO3ZhciBSPSJ4Ij09PWQ/Ik0wLCIrei5fb2Zmc2V0KyJ2Iit6Ll9sZW5ndGg6Ik0iK3ouX29mZnNldCsiLDBoIit6Ll9sZW5ndGg7Vi5kcmF3R3JpZCh0LGUse3ZhbHM6Qyxjb3VudGVyQXhpczp6LGxheWVyOmwuZ3JpZGxheWVyLnNlbGVjdCgiLiIrcCkscGF0aDpSLHRyYW5zRm46QX0pLFYuZHJhd1plcm9MaW5lKHQsZSx7Y291bnRlckF4aXM6eixsYXllcjpsLnplcm9saW5lbGF5ZXIscGF0aDpSLHRyYW5zRm46QX0pfX19dmFyIEY9Vi5nZXRUaWNrU2lnbnMoZSksQj1bXTtpZihlLnRpY2tzKXt2YXIgTixILHEsRz1WLm1ha2VUaWNrUGF0aChlLHksRlsyXSk7aWYoZS5fYW5jaG9yQXhpcyYmZS5taXJyb3ImJiEwIT09ZS5taXJyb3I/KE49Vi5tYWtlVGlja1BhdGgoZSx4LEZbM10pLEg9RytOKTooTj0iIixIPUcpLGUuc2hvd2RpdmlkZXJzJiZFJiYiYm91bmRhcmllcyI9PT1lLnRpY2tzb24pe3ZhciBZPXt9O2ZvcihuPTA7bjxQLmxlbmd0aDtuKyspWVtQW25dLnhdPTE7cT1mdW5jdGlvbih0KXtyZXR1cm4gWVt0LnhdP046SH19ZWxzZSBxPUg7Vi5kcmF3VGlja3ModCxlLHt2YWxzOlQsbGF5ZXI6dixwYXRoOnEsdHJhbnNGbjpBfSksImFsbHRpY2tzIj09PWUubWlycm9yJiYoQj1PYmplY3Qua2V5cyhlLl9saW5lcG9zaXRpb25zfHx7fSkpfWZvcihuPTA7bjxCLmxlbmd0aDtuKyspe2k9QltuXSxsPWMuX3Bsb3RzW2ldO3ZhciBXPWUuX2xpbmVwb3NpdGlvbnNbaV18fFtdLFg9Vi5tYWtlVGlja1BhdGgoZSxXWzBdLEZbMF0pK1YubWFrZVRpY2tQYXRoKGUsV1sxXSxGWzFdKTtWLmRyYXdUaWNrcyh0LGUse3ZhbHM6VCxsYXllcjpsW2QrImF4aXNsYXllciJdLHBhdGg6WCx0cmFuc0ZuOkF9KX12YXIgWj1bXTtpZihaLnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIFYuZHJhd0xhYmVscyh0LGUse3ZhbHM6YixsYXllcjp2LHBsb3RpbmZvOmwsdHJhbnNGbjpNLGxhYmVsRm5zOlYubWFrZUxhYmVsRm5zKGUseSl9KX0pKSwibXVsdGljYXRlZ29yeSI9PT1lLnR5cGUpe3ZhciBKPXt4OjIseToxMH1bZF07Wi5wdXNoKChmdW5jdGlvbigpe3ZhciByPXt4OiJoZWlnaHQiLHk6IndpZHRoIn1bZF0sbj1RKClbcl0rSisoZS5fdGlja0FuZ2xlc1twKyJ0aWNrIl0/ZS50aWNrZm9udC5zaXplKmo6MCk7cmV0dXJuIFYuZHJhd0xhYmVscyh0LGUse3ZhbHM6cHQoZSxiKSxsYXllcjp2LGNsczpwKyJ0aWNrMiIscmVwb3NpdGlvbk9uVXBkYXRlOiEwLHNlY29uZGFyeTohMCx0cmFuc0ZuOkEsbGFiZWxGbnM6Vi5tYWtlTGFiZWxGbnMoZSx5K24qRls0XSl9KX0pKSxaLnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX2RlcHRoPUZbNF0qKFEoInRpY2syIilbZS5zaWRlXS15KSxmdW5jdGlvbih0LGUscil7dmFyIG49ZS5faWQrImRpdmlkZXIiLGk9ci52YWxzLGE9ci5sYXllci5zZWxlY3RBbGwoInBhdGguIituKS5kYXRhKGksbXQpO2EuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5jbGFzc2VkKG4sMSkuY2xhc3NlZCgiY3Jpc3AiLDEpLmNhbGwoZi5zdHJva2UsZS5kaXZpZGVyY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGguY3Jpc3BSb3VuZCh0LGUuZGl2aWRlcndpZHRoLDEpKyJweCIpLGEuYXR0cigidHJhbnNmb3JtIixyLnRyYW5zRm4pLmF0dHIoImQiLHIucGF0aCl9KHQsZSx7dmFsczpQLGxheWVyOnYscGF0aDpWLm1ha2VUaWNrUGF0aChlLHksRls0XSxlLl9kZXB0aCksdHJhbnNGbjpBfSl9KSl9ZWxzZSBlLnRpdGxlLmhhc093blByb3BlcnR5KCJzdGFuZG9mZiIpJiZaLnB1c2goKGZ1bmN0aW9uKCl7ZS5fZGVwdGg9Rls0XSooUSgpW2Uuc2lkZV0teSl9KSk7dmFyIEs9by5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikoZSk7cmV0dXJuIFoucHVzaCgoZnVuY3Rpb24oKXt2YXIgcixuLGkscyxsPWUuc2lkZS5jaGFyQXQoMCksdT1VW2Uuc2lkZV0uY2hhckF0KDApLGY9Vi5nZXRQeFBvc2l0aW9uKHQsZSksaD1FP2UudGlja2xlbjowO2lmKChlLmF1dG9tYXJnaW58fEspJiYoIm11bHRpY2F0ZWdvcnkiPT09ZS50eXBlP3I9USgidGljazIiKToocj1RKCksIngiPT09ZCYmImIiPT09bCYmKGUuX2RlcHRoPU1hdGgubWF4KHIud2lkdGg+MD9yLmJvdHRvbS1mOjAsaCkpKSksZS5hdXRvbWFyZ2luKXtuPXt4OjAseTowLHI6MCxsOjAsdDowLGI6MH07dmFyIHA9WzAsMV07aWYoIngiPT09ZCl7aWYoImIiPT09bD9uW2xdPWUuX2RlcHRoOihuW2xdPWUuX2RlcHRoPU1hdGgubWF4KHIud2lkdGg+MD9mLXIudG9wOjAsaCkscC5yZXZlcnNlKCkpLHIud2lkdGg+MCl7dmFyIGc9ci5yaWdodC0oZS5fb2Zmc2V0K2UuX2xlbmd0aCk7Zz4wJiYobi54cj0xLG4ucj1nKTt2YXIgdj1lLl9vZmZzZXQtci5sZWZ0O3Y+MCYmKG4ueGw9MCxuLmw9dil9fWVsc2UgaWYoImwiPT09bD9uW2xdPWUuX2RlcHRoPU1hdGgubWF4KHIuaGVpZ2h0PjA/Zi1yLmxlZnQ6MCxoKToobltsXT1lLl9kZXB0aD1NYXRoLm1heChyLmhlaWdodD4wP3IucmlnaHQtZjowLGgpLHAucmV2ZXJzZSgpKSxyLmhlaWdodD4wKXt2YXIgeT1yLmJvdHRvbS0oZS5fb2Zmc2V0K2UuX2xlbmd0aCk7eT4wJiYobi55Yj0wLG4uYj15KTt2YXIgeD1lLl9vZmZzZXQtci50b3A7eD4wJiYobi55dD0xLG4udD14KX1uW21dPSJmcmVlIj09PWUuYW5jaG9yP2UucG9zaXRpb246ZS5fYW5jaG9yQXhpcy5kb21haW5bcFswXV0sZS50aXRsZS50ZXh0IT09Yy5fZGZsdFRpdGxlW2RdJiYobltsXSs9Z3QoZSkrKGUudGl0bGUuc3RhbmRvZmZ8fDApKSxlLm1pcnJvciYmImZyZWUiIT09ZS5hbmNob3ImJigoaT17eDowLHk6MCxyOjAsbDowLHQ6MCxiOjB9KVt1XT1lLmxpbmV3aWR0aCxlLm1pcnJvciYmITAhPT1lLm1pcnJvciYmKGlbdV0rPWgpLCEwPT09ZS5taXJyb3J8fCJ0aWNrcyI9PT1lLm1pcnJvcj9pW21dPWUuX2FuY2hvckF4aXMuZG9tYWluW3BbMV1dOiJhbGwiIT09ZS5taXJyb3ImJiJhbGx0aWNrcyIhPT1lLm1pcnJvcnx8KGlbbV09W2UuX2NvdW50ZXJEb21haW5NaW4sZS5fY291bnRlckRvbWFpbk1heF1bcFsxXV0pKX1LJiYocz1vLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJhdXRvTWFyZ2luT3B0cyIpKHQsZSkpLGEuYXV0b01hcmdpbih0LHh0KGUpLG4pLGEuYXV0b01hcmdpbih0LGJ0KGUpLGkpLGEuYXV0b01hcmdpbih0LF90KGUpLHMpfSkpLHIuc2tpcFRpdGxlfHxLJiYiYm90dG9tIj09PWUuc2lkZXx8Wi5wdXNoKChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByLG49dC5fZnVsbExheW91dCxpPWUuX2lkLGE9aS5jaGFyQXQoMCksbz1lLnRpdGxlLmZvbnQuc2l6ZTtpZihlLnRpdGxlLmhhc093blByb3BlcnR5KCJzdGFuZG9mZiIpKXI9ZS5fZGVwdGgrZS50aXRsZS5zdGFuZG9mZitndChlKTtlbHNle3ZhciBzPVN0KGUpO2lmKCJtdWx0aWNhdGVnb3J5Ij09PWUudHlwZSlyPWUuX2RlcHRoO2Vsc2V7dmFyIGw9MS41Km87cyYmKGw9LjUqbywib3V0c2lkZSI9PT1lLnRpY2tzJiYobCs9ZS50aWNrbGVuKSkscj0xMCtsKyhlLmxpbmV3aWR0aD9lLmxpbmV3aWR0aC0xOjApfXN8fChyKz0ieCI9PT1hPyJ0b3AiPT09ZS5zaWRlP28qKGUuc2hvd3RpY2tsYWJlbHM/MTowKTpvKihlLnNob3d0aWNrbGFiZWxzPzEuNTouNSk6InJpZ2h0Ij09PWUuc2lkZT9vKihlLnNob3d0aWNrbGFiZWxzPzE6LjUpOm8qKGUuc2hvd3RpY2tsYWJlbHM/LjU6MCkpfXZhciBjLGYscCxkLG09Vi5nZXRQeFBvc2l0aW9uKHQsZSk7IngiPT09YT8oZj1lLl9vZmZzZXQrZS5fbGVuZ3RoLzIscD0idG9wIj09PWUuc2lkZT9tLXI6bStyKToocD1lLl9vZmZzZXQrZS5fbGVuZ3RoLzIsZj0icmlnaHQiPT09ZS5zaWRlP20rcjptLXIsYz17cm90YXRlOiItOTAiLG9mZnNldDowfSk7aWYoIm11bHRpY2F0ZWdvcnkiIT09ZS50eXBlKXt2YXIgZz1lLl9zZWxlY3Rpb25zW2UuX2lkKyJ0aWNrIl07aWYoZD17c2VsZWN0aW9uOmcsc2lkZTplLnNpZGV9LGcmJmcubm9kZSgpJiZnLm5vZGUoKS5wYXJlbnROb2RlKXt2YXIgdj1oLmdldFRyYW5zbGF0ZShnLm5vZGUoKS5wYXJlbnROb2RlKTtkLm9mZnNldExlZnQ9di54LGQub2Zmc2V0VG9wPXYueX1lLnRpdGxlLmhhc093blByb3BlcnR5KCJzdGFuZG9mZiIpJiYoZC5wYWQ9MCl9cmV0dXJuIHUuZHJhdyh0LGkrInRpdGxlIix7cHJvcENvbnRhaW5lcjplLHByb3BOYW1lOmUuX25hbWUrIi50aXRsZS50ZXh0IixwbGFjZWhvbGRlcjpuLl9kZmx0VGl0bGVbYV0sYXZvaWQ6ZCx0cmFuc2Zvcm06YyxhdHRyaWJ1dGVzOnt4OmYseTpwLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSl9KHQsZSl9KSkscy5zeW5jT3JBc3luYyhaKX19ZnVuY3Rpb24gUSh0KXt2YXIgcj1wKyh0fHwidGljayIpO3JldHVybiB3W3JdfHwod1tyXT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhO3QuX3NlbGVjdGlvbnNbZV0uc2l6ZSgpPyhyPTEvMCxuPS0xLzAsaT0xLzAsYT0tMS8wLHQuX3NlbGVjdGlvbnNbZV0uZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD15dCh0aGlzKSxlPWguYkJveCh0Lm5vZGUoKS5wYXJlbnROb2RlKTtyPU1hdGgubWluKHIsZS50b3ApLG49TWF0aC5tYXgobixlLmJvdHRvbSksaT1NYXRoLm1pbihpLGUubGVmdCksYT1NYXRoLm1heChhLGUucmlnaHQpfSkpKToocj0wLG49MCxpPTAsYT0wKTtyZXR1cm57dG9wOnIsYm90dG9tOm4sbGVmdDppLHJpZ2h0OmEsaGVpZ2h0Om4tcix3aWR0aDphLWl9fShlLHIpKSx3W3JdfX0sVi5nZXRUaWNrU2lnbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5faWQuY2hhckF0KDApLHI9e3g6InRvcCIseToicmlnaHQifVtlXSxuPXQuc2lkZT09PXI/MTotMSxpPVstMSwxLG4sLW5dO3JldHVybiJpbnNpZGUiIT09dC50aWNrcz09KCJ4Ij09PWUpJiYoaT1pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuLXR9KSkpLHQuc2lkZSYmaS5wdXNoKHtsOi0xLHQ6LTEscjoxLGI6MX1bdC5zaWRlLmNoYXJBdCgwKV0pLGl9LFYubWFrZVRyYW5zVGlja0ZuPWZ1bmN0aW9uKHQpe3JldHVybiJ4Ij09PXQuX2lkLmNoYXJBdCgwKT9mdW5jdGlvbihlKXtyZXR1cm4gbCh0Ll9vZmZzZXQrdC5sMnAoZS54KSwwKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGwoMCx0Ll9vZmZzZXQrdC5sMnAoZS54KSl9fSxWLm1ha2VUcmFuc1RpY2tMYWJlbEZuPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPXQudGlja2xhYmVscG9zaXRpb258fCIiLHI9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1lLmluZGV4T2YodCl9LG49cigidG9wIiksaT1yKCJsZWZ0IiksYT1yKCJyaWdodCIpLG89cigiYm90dG9tIikscz1yKCJpbnNpZGUiKSxsPW98fGl8fG58fGE7aWYoIWwmJiFzKXJldHVyblswLDBdO3ZhciBjPXQuc2lkZSx1PWw/KHQudGlja3dpZHRofHwwKS8yOjAsZj0zLGg9dC50aWNrZm9udD90LnRpY2tmb250LnNpemU6MTI7KG98fG4pJiYodSs9aCpOLGYrPSh0LmxpbmV3aWR0aHx8MCkvMik7KGl8fGEpJiYodSs9KHQubGluZXdpZHRofHwwKS8yLGYrPTMpO3MmJiJ0b3AiPT09YyYmKGYtPWgqKDEtTikpOyhpfHxuKSYmKHU9LXUpOyJib3R0b20iIT09YyYmInJpZ2h0IiE9PWN8fChmPS1mKTtyZXR1cm5bbD91OjAscz9mOjBdfSh0KSxyPWVbMF0sbj1lWzFdO3JldHVybiJ4Ij09PXQuX2lkLmNoYXJBdCgwKT9mdW5jdGlvbihlKXtyZXR1cm4gbChyK3QuX29mZnNldCt0LmwycChkdChlKSksbil9OmZ1bmN0aW9uKGUpe3JldHVybiBsKG4scit0Ll9vZmZzZXQrdC5sMnAoZHQoZSkpKX19LFYubWFrZVRpY2tQYXRoPWZ1bmN0aW9uKHQsZSxyLG4pe249dm9pZCAwIT09bj9uOnQudGlja2xlbjt2YXIgaT10Ll9pZC5jaGFyQXQoMCksYT0odC5saW5ld2lkdGh8fDEpLzI7cmV0dXJuIngiPT09aT8iTTAsIisoZSthKnIpKyJ2IituKnI6Ik0iKyhlK2EqcikrIiwwaCIrbipyfSxWLm1ha2VMYWJlbEZucz1mdW5jdGlvbih0LGUscil7dmFyIG49dC50aWNrbGFiZWxwb3NpdGlvbnx8IiIsYT1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PW4uaW5kZXhPZih0KX0sbz1hKCJ0b3AiKSxsPWEoImxlZnQiKSxjPWEoInJpZ2h0IiksdT1hKCJib3R0b20iKXx8bHx8b3x8YyxmPWEoImluc2lkZSIpLGg9Imluc2lkZSI9PT1uJiYiaW5zaWRlIj09PXQudGlja3N8fCFmJiYib3V0c2lkZSI9PT10LnRpY2tzJiYiYm91bmRhcmllcyIhPT10LnRpY2tzb24scD0wLGQ9MCxtPWg/dC50aWNrbGVuOjA7aWYoZj9tKj0tMTp1JiYobT0wKSxoJiYocCs9bSxyKSl7dmFyIGc9cy5kZWcycmFkKHIpO3A9bSpNYXRoLmNvcyhnKSsxLGQ9bSpNYXRoLnNpbihnKX10LnNob3d0aWNrbGFiZWxzJiYoaHx8dC5zaG93bGluZSkmJihwKz0uMip0LnRpY2tmb250LnNpemUpO3ZhciB2LHkseCxiLF8sdz17bGFiZWxTdGFuZG9mZjpwKz0odC5saW5ld2lkdGh8fDEpLzIqKGY/LTE6MSksbGFiZWxTaGlmdDpkfSxUPTAsaz10LnNpZGUsQT10Ll9pZC5jaGFyQXQoMCksTT10LnRpY2thbmdsZTtpZigieCI9PT1BKWI9KF89IWYmJiJib3R0b20iPT09a3x8ZiYmInRvcCI9PT1rKT8xOi0xLGYmJihiKj0tMSksdj1kKmIseT1lK3AqYix4PV8/MTotLjIsOTA9PT1NYXRoLmFicyhNKSYmKGY/eCs9Qjp4PS05MD09PU0mJiJib3R0b20iPT09az9OOjkwPT09TSYmInRvcCI9PT1rP0I6LjUsVD1CLzIqKE0vOTApKSx3LnhGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5keCt2K1QqdC5mb250U2l6ZX0sdy55Rm49ZnVuY3Rpb24odCl7cmV0dXJuIHQuZHkreSt0LmZvbnRTaXplKnh9LHcuYW5jaG9yRm49ZnVuY3Rpb24odCxlKXtpZih1KXtpZihsKXJldHVybiJlbmQiO2lmKGMpcmV0dXJuInN0YXJ0In1yZXR1cm4gaShlKSYmMCE9PWUmJjE4MCE9PWU/ZSpiPDAhPT1mPyJlbmQiOiJzdGFydCI6Im1pZGRsZSJ9LHcuaGVpZ2h0Rm49ZnVuY3Rpb24oZSxyLG4pe3JldHVybiByPC02MHx8cj42MD8tLjUqbjoidG9wIj09PXQuc2lkZSE9PWY/LW46MH07ZWxzZSBpZigieSI9PT1BKXtpZihiPShfPSFmJiYibGVmdCI9PT1rfHxmJiYicmlnaHQiPT09ayk/MTotMSxmJiYoYio9LTEpLHY9cCx5PWQqYix4PTAsZnx8OTAhPT1NYXRoLmFicyhNKXx8KHg9LTkwPT09TSYmImxlZnQiPT09a3x8OTA9PT1NJiYicmlnaHQiPT09az9OOi41KSxmKXt2YXIgUz1pKE0pPytNOjA7aWYoMCE9PVMpe3ZhciBFPXMuZGVnMnJhZChTKTtUPU1hdGguYWJzKE1hdGguc2luKEUpKSpOKmIseD0wfX13LnhGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5keCtlLSh2K3QuZm9udFNpemUqeCkqYitUKnQuZm9udFNpemV9LHcueUZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR5K3krdC5mb250U2l6ZSpCfSx3LmFuY2hvckZuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkoZSkmJjkwPT09TWF0aC5hYnMoZSk/Im1pZGRsZSI6Xz8iZW5kIjoic3RhcnQifSx3LmhlaWdodEZuPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4icmlnaHQiPT09dC5zaWRlJiYocio9LTEpLHI8LTMwPy1uOnI8MzA/LS41Km46MH19cmV0dXJuIHd9LFYuZHJhd1RpY2tzPWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fHt9O3ZhciBuPWUuX2lkKyJ0aWNrIixpPXIudmFsczsicGVyaW9kIj09PWUudGlja2xhYmVsbW9kZSYmKGk9aS5zbGljZSgpKS5zaGlmdCgpO3ZhciBhPXIubGF5ZXIuc2VsZWN0QWxsKCJwYXRoLiIrbikuZGF0YShlLnRpY2tzP2k6W10sbXQpO2EuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKG4sMSkuY2xhc3NlZCgidGlja3MiLDEpLmNsYXNzZWQoImNyaXNwIiwhMSE9PXIuY3Jpc3ApLmNhbGwoZi5zdHJva2UsZS50aWNrY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGguY3Jpc3BSb3VuZCh0LGUudGlja3dpZHRoLDEpKyJweCIpLmF0dHIoImQiLHIucGF0aCkuc3R5bGUoImRpc3BsYXkiLG51bGwpLEV0KGUsW0RdKSxhLmF0dHIoInRyYW5zZm9ybSIsci50cmFuc0ZuKX0sVi5kcmF3R3JpZD1mdW5jdGlvbih0LGUscil7cj1yfHx7fTt2YXIgbj1lLl9pZCsiZ3JpZCIsaT1yLnZhbHMsYT1yLmNvdW50ZXJBeGlzO2lmKCExPT09ZS5zaG93Z3JpZClpPVtdO2Vsc2UgaWYoYSYmVi5zaG91bGRTaG93WmVyb0xpbmUodCxlLGEpKWZvcih2YXIgbz0iYXJyYXkiPT09ZS50aWNrbW9kZSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc10ueDtpZihvPyFsOk1hdGguYWJzKGwpPGUuZHRpY2svMTAwKXtpZihpPWkuc2xpY2UoMCxzKS5jb25jYXQoaS5zbGljZShzKzEpKSwhbylicmVhaztzLS19fXZhciBjPXIubGF5ZXIuc2VsZWN0QWxsKCJwYXRoLiIrbikuZGF0YShpLG10KTtjLmV4aXQoKS5yZW1vdmUoKSxjLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoImNyaXNwIiwhMSE9PXIuY3Jpc3ApLGUuX2d3PWguY3Jpc3BSb3VuZCh0LGUuZ3JpZHdpZHRoLDEpLGMuYXR0cigidHJhbnNmb3JtIixyLnRyYW5zRm4pLmF0dHIoImQiLHIucGF0aCkuY2FsbChmLnN0cm9rZSxlLmdyaWRjb2xvcnx8IiNkZGQiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLl9ndysicHgiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksRXQoZSxbel0pLCJmdW5jdGlvbiI9PXR5cGVvZiByLnBhdGgmJmMuYXR0cigiZCIsci5wYXRoKX0sVi5kcmF3WmVyb0xpbmU9ZnVuY3Rpb24odCxlLHIpe3I9cnx8cjt2YXIgbj1lLl9pZCsiemwiLGk9Vi5zaG91bGRTaG93WmVyb0xpbmUodCxlLHIuY291bnRlckF4aXMpLGE9ci5sYXllci5zZWxlY3RBbGwoInBhdGguIituKS5kYXRhKGk/W3t4OjAsaWQ6ZS5faWR9XTpbXSk7YS5leGl0KCkucmVtb3ZlKCksYS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKCJ6bCIsMSkuY2xhc3NlZCgiY3Jpc3AiLCExIT09ci5jcmlzcCkuZWFjaCgoZnVuY3Rpb24oKXtyLmxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEcodC5pZCxlLmlkKX0pKX0pKSxhLmF0dHIoInRyYW5zZm9ybSIsci50cmFuc0ZuKS5hdHRyKCJkIixyLnBhdGgpLmNhbGwoZi5zdHJva2UsZS56ZXJvbGluZWNvbG9yfHxmLmRlZmF1bHRMaW5lKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixoLmNyaXNwUm91bmQodCxlLnplcm9saW5ld2lkdGgsZS5fZ3d8fDEpKyJweCIpLnN0eWxlKCJkaXNwbGF5IixudWxsKSxFdChlLFtPXSl9LFYuZHJhd0xhYmVscz1mdW5jdGlvbih0LGUscil7cj1yfHx7fTt2YXIgYT10Ll9mdWxsTGF5b3V0LG89ZS5faWQsdT1vLmNoYXJBdCgwKSxmPXIuY2xzfHxvKyJ0aWNrIixwPXIudmFscyxkPXIubGFiZWxGbnMsbT1yLnNlY29uZGFyeT8wOmUudGlja2FuZ2xlLGc9KGUuX3ByZXZUaWNrQW5nbGVzfHx7fSlbZl0sdj1yLmxheWVyLnNlbGVjdEFsbCgiZy4iK2YpLmRhdGEoZS5zaG93dGlja2xhYmVscz9wOltdLG10KSx5PVtdO2Z1bmN0aW9uIHgodCxhKXt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBvPW4uc2VsZWN0KHRoaXMpLHM9by5zZWxlY3QoIi50ZXh0LW1hdGgtZ3JvdXAiKSx1PWQuYW5jaG9yRm4odCxhKSxmPXIudHJhbnNGbi5jYWxsKG8ubm9kZSgpLHQpKyhpKGEpJiYwIT0rYT8iIHJvdGF0ZSgiK2ErIiwiK2QueEZuKHQpKyIsIisoZC55Rm4odCktdC5mb250U2l6ZS8yKSsiKSI6IiIpLHA9Yy5saW5lQ291bnQobyksbT1qKnQuZm9udFNpemUsZz1kLmhlaWdodEZuKHQsaShhKT8rYTowLChwLTEpKm0pO2lmKGcmJihmKz1sKDAsZykpLHMuZW1wdHkoKSl7dmFyIHY9by5zZWxlY3QoInRleHQiKTt2LmF0dHIoe3RyYW5zZm9ybTpmLCJ0ZXh0LWFuY2hvciI6dX0pLHYuc3R5bGUoIm9wYWNpdHkiLDEpLGUuX2FkanVzdFRpY2tMYWJlbHNPdmVyZmxvdyYmZS5fYWRqdXN0VGlja0xhYmVsc092ZXJmbG93KCl9ZWxzZXt2YXIgeT1oLmJCb3gocy5ub2RlKCkpLndpZHRoKntlbmQ6LS41LHN0YXJ0Oi41fVt1XTtzLmF0dHIoInRyYW5zZm9ybSIsZitsKHksMCkpfX0pKX12LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLDEpLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksaT10Ll9wcm9taXNlcy5sZW5ndGg7ci5jYWxsKGMucG9zaXRpb25UZXh0LGQueEZuKGUpLGQueUZuKGUpKS5jYWxsKGguZm9udCxlLmZvbnQsZS5mb250U2l6ZSxlLmZvbnRDb2xvcikudGV4dChlLnRleHQpLmNhbGwoYy5jb252ZXJ0VG9Uc3BhbnMsdCksdC5fcHJvbWlzZXNbaV0/eS5wdXNoKHQuX3Byb21pc2VzLnBvcCgpLnRoZW4oKGZ1bmN0aW9uKCl7eChyLG0pfSkpKTp4KHIsbSl9KSksRXQoZSxbUl0pLHYuZXhpdCgpLnJlbW92ZSgpLHIucmVwb3NpdGlvbk9uVXBkYXRlJiZ2LmVhY2goKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLnNlbGVjdCgidGV4dCIpLmNhbGwoYy5wb3NpdGlvblRleHQsZC54Rm4odCksZC55Rm4odCkpfSkpLGUuX2FkanVzdFRpY2tMYWJlbHNPdmVyZmxvdz1mdW5jdGlvbigpe3ZhciByPWUudGlja2xhYmVsb3ZlcmZsb3c7aWYociYmImFsbG93IiE9PXIpe3ZhciBpPS0xIT09ci5pbmRleE9mKCJoaWRlIiksbz0ieCI9PT1lLl9pZC5jaGFyQXQoMCksbD0wLGM9bz90Ll9mdWxsTGF5b3V0LndpZHRoOnQuX2Z1bGxMYXlvdXQuaGVpZ2h0O2lmKC0xIT09ci5pbmRleE9mKCJkb21haW4iKSl7dmFyIHU9cy5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCk7bD1lLmwycCh1WzBdKStlLl9vZmZzZXQsYz1lLmwycCh1WzFdKStlLl9vZmZzZXR9dmFyIGY9TWF0aC5taW4obCxjKSxwPU1hdGgubWF4KGwsYyksZD1lLnNpZGUsbT0xLzAsZz0tMS8wO2Zvcih2YXIgeSBpbiB2LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHIuc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIikuZW1wdHkoKSl7dmFyIGE9aC5iQm94KHIubm9kZSgpKSxzPTA7bz8oYS5yaWdodD5wfHxhLmxlZnQ8ZikmJihzPTEpOihhLmJvdHRvbT5wfHxhLnRvcCsoZS50aWNrYW5nbGU/MDp0LmZvbnRTaXplLzQpPGYpJiYocz0xKTt2YXIgbD1yLnNlbGVjdCgidGV4dCIpO3M/aSYmbC5zdHlsZSgib3BhY2l0eSIsMCk6KGwuc3R5bGUoIm9wYWNpdHkiLDEpLG09ImJvdHRvbSI9PT1kfHwicmlnaHQiPT09ZD9NYXRoLm1pbihtLG8/YS50b3A6YS5sZWZ0KTotMS8wLGc9InRvcCI9PT1kfHwibGVmdCI9PT1kP01hdGgubWF4KGcsbz9hLmJvdHRvbTphLnJpZ2h0KToxLzApfX0pKSxhLl9wbG90cyl7dmFyIHg9YS5fcGxvdHNbeV07aWYoZS5faWQ9PT14LnhheGlzLl9pZHx8ZS5faWQ9PT14LnlheGlzLl9pZCl7dmFyIGI9bz94LnlheGlzOngueGF4aXM7YiYmKGJbIl92aXNpYmxlTGFiZWxNaW5fIitlLl9pZF09bSxiWyJfdmlzaWJsZUxhYmVsTWF4XyIrZS5faWRdPWcpfX19fSxlLl9oaWRlQ291bnRlckF4aXNJbnNpZGVUaWNrTGFiZWxzPWZ1bmN0aW9uKHQpe3ZhciByPSJ4Ij09PWUuX2lkLmNoYXJBdCgwKSxpPVtdO2Zvcih2YXIgbyBpbiBhLl9wbG90cyl7dmFyIHM9YS5fcGxvdHNbb107ZS5faWQhPT1zLnhheGlzLl9pZCYmZS5faWQhPT1zLnlheGlzLl9pZHx8aS5wdXNoKHI/cy55YXhpczpzLnhheGlzKX1pLmZvckVhY2goKGZ1bmN0aW9uKHIsaSl7ciYmU3QocikmJih0fHxbTyx6LEQsUl0pLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBvPSJ0aWNrIj09PXQuSyYmInRleHQiPT09dC5MJiYicGVyaW9kIj09PWUudGlja2xhYmVsbW9kZSxzPWEuX3Bsb3RzW2UuX21haW5TdWJwbG90XTsodC5LPT09Ty5LP3MuemVyb2xpbmVsYXllci5zZWxlY3RBbGwoIi4iK2UuX2lkKyJ6bCIpOnQuSz09PXouSz9zLmdyaWRsYXllci5zZWxlY3RBbGwoIi4iK2UuX2lkKTpzW2UuX2lkLmNoYXJBdCgwKSsiYXhpc2xheWVyIl0pLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGE9bi5zZWxlY3QodGhpcyk7dC5MJiYoYT1hLnNlbGVjdEFsbCh0LkwpKSxhLmVhY2goKGZ1bmN0aW9uKGEpe3ZhciBzPWUubDJwKG8/ZHQoYSk6YS54KStlLl9vZmZzZXQsbD1uLnNlbGVjdCh0aGlzKTtzPGVbIl92aXNpYmxlTGFiZWxNYXhfIityLl9pZF0mJnM+ZVsiX3Zpc2libGVMYWJlbE1pbl8iK3IuX2lkXT9sLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpOiJ0aWNrIiE9PXQuS3x8aXx8bC5zdHlsZSgiZGlzcGxheSIsbnVsbCl9KSl9KSl9KSl9KSl9LHgodixnKzE/ZzptKTt2YXIgYj1udWxsO2UuX3NlbGVjdGlvbnMmJihlLl9zZWxlY3Rpb25zW2ZdPXYpO3ZhciBfPVtmdW5jdGlvbigpe3JldHVybiB5Lmxlbmd0aCYmUHJvbWlzZS5hbGwoeSl9XTtlLmF1dG9tYXJnaW4mJmEuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQmJjkwPT09Zz8oYj05MCxfLnB1c2goKGZ1bmN0aW9uKCl7eCh2LGcpfSkpKTpfLnB1c2goKGZ1bmN0aW9uKCl7aWYoeCh2LG0pLHAubGVuZ3RoJiYieCI9PT11JiYhaShtKSYmKCJsb2ciIT09ZS50eXBlfHwiRCIhPT1TdHJpbmcoZS5kdGljaykuY2hhckF0KDApKSl7Yj0wO3ZhciB0LG49MCxhPVtdO2lmKHYuZWFjaCgoZnVuY3Rpb24odCl7bj1NYXRoLm1heChuLHQuZm9udFNpemUpO3ZhciByPWUubDJwKHQueCksaT15dCh0aGlzKSxvPWguYkJveChpLm5vZGUoKSk7YS5wdXNoKHt0b3A6MCxib3R0b206MTAsaGVpZ2h0OjEwLGxlZnQ6ci1vLndpZHRoLzIscmlnaHQ6citvLndpZHRoLzIrMix3aWR0aDpvLndpZHRoKzJ9KX0pKSwiYm91bmRhcmllcyIhPT1lLnRpY2tzb24mJiFlLnNob3dkaXZpZGVyc3x8ci5zZWNvbmRhcnkpe3ZhciBvPXAubGVuZ3RoLGw9TWF0aC5hYnMoKHBbby0xXS54LXBbMF0ueCkqZS5fbSkvKG8tMSksYz1lLnRpY2tsYWJlbHBvc2l0aW9ufHwiIixmPWZ1bmN0aW9uKHQpe3JldHVybi0xIT09Yy5pbmRleE9mKHQpfSxkPWYoInRvcCIpLGc9ZigibGVmdCIpLHk9ZigicmlnaHQiKSxfPWYoImJvdHRvbSIpfHxnfHxkfHx5PyhlLnRpY2t3aWR0aHx8MCkrNjowLHc9bDwyLjUqbnx8Im11bHRpY2F0ZWdvcnkiPT09ZS50eXBlO2Zvcih0PTA7dDxhLmxlbmd0aC0xO3QrKylpZihzLmJCb3hJbnRlcnNlY3QoYVt0XSxhW3QrMV0sXykpe2I9dz85MDozMDticmVha319ZWxzZXt2YXIgVD0yO2ZvcihlLnRpY2tzJiYoVCs9ZS50aWNrd2lkdGgvMiksdD0wO3Q8YS5sZW5ndGg7dCsrKXt2YXIgaz1wW3RdLnhibmQsQT1hW3RdO2lmKG51bGwhPT1rWzBdJiZBLmxlZnQtZS5sMnAoa1swXSk8VHx8bnVsbCE9PWtbMV0mJmUubDJwKGtbMV0pLUEucmlnaHQ8VCl7Yj05MDticmVha319fWImJngodixiKX19KSksZS5fdGlja0FuZ2xlcyYmXy5wdXNoKChmdW5jdGlvbigpe2UuX3RpY2tBbmdsZXNbZl09bnVsbD09PWI/aShtKT9tOjA6Yn0pKTt2YXIgdz1lLl9hbmNob3JBeGlzO3cmJncuYXV0b3JhbmdlJiZTdChlKSYmIVkoYSxlLl9pZCkmJihhLl9pbnNpZGVUaWNrTGFiZWxzQXV0b3JhbmdlfHwoYS5faW5zaWRlVGlja0xhYmVsc0F1dG9yYW5nZT17fSksYS5faW5zaWRlVGlja0xhYmVsc0F1dG9yYW5nZVt3Ll9uYW1lKyIuYXV0b3JhbmdlIl09dy5hdXRvcmFuZ2UsXy5wdXNoKChmdW5jdGlvbigpe3YuZWFjaCgoZnVuY3Rpb24odCxyKXt2YXIgbj15dCh0aGlzKTtuLnNlbGVjdCgiLnRleHQtbWF0aC1ncm91cCIpLmVtcHR5KCkmJihlLl92YWxzW3JdLmJiPWguYkJveChuLm5vZGUoKSkpfSkpfSkpKTt2YXIgVD1zLnN5bmNPckFzeW5jKF8pO3JldHVybiBUJiZULnRoZW4mJnQuX3Byb21pc2VzLnB1c2goVCksVH0sVi5nZXRQeFBvc2l0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Ll9mdWxsTGF5b3V0Ll9zaXplLGk9ZS5faWQuY2hhckF0KDApLGE9ZS5zaWRlO3JldHVybiJmcmVlIiE9PWUuYW5jaG9yP3I9ZS5fYW5jaG9yQXhpczoieCI9PT1pP3I9e19vZmZzZXQ6bi50KygxLShlLnBvc2l0aW9ufHwwKSkqbi5oLF9sZW5ndGg6MH06InkiPT09aSYmKHI9e19vZmZzZXQ6bi5sKyhlLnBvc2l0aW9ufHwwKSpuLncsX2xlbmd0aDowfSksInRvcCI9PT1hfHwibGVmdCI9PT1hP3IuX29mZnNldDoiYm90dG9tIj09PWF8fCJyaWdodCI9PT1hP3IuX29mZnNldCtyLl9sZW5ndGg6dm9pZCAwfSxWLnNob3VsZFNob3daZXJvTGluZT1mdW5jdGlvbih0LGUscil7dmFyIG49cy5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCk7cmV0dXJuIG5bMF0qblsxXTw9MCYmZS56ZXJvbGluZSYmKCJsaW5lYXIiPT09ZS50eXBlfHwiLSI9PT1lLnR5cGUpJiYhKGUucmFuZ2VicmVha3MmJmUubWFza0JyZWFrcygwKT09PUkpJiYodnQoZSwwKXx8IWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXIuX21haW5BeGlzO2lmKCFpKXJldHVybjt2YXIgYT10Ll9mdWxsTGF5b3V0LG89ZS5faWQuY2hhckF0KDApLHM9Vi5jb3VudGVyTGV0dGVyKGUuX2lkKSxsPWUuX29mZnNldCsoTWF0aC5hYnMoblswXSk8TWF0aC5hYnMoblsxXSk9PSgieCI9PT1vKT8wOmUuX2xlbmd0aCk7ZnVuY3Rpb24gYyh0KXtpZighdC5zaG93bGluZXx8IXQubGluZXdpZHRoKXJldHVybiExO3ZhciByPU1hdGgubWF4KCh0LmxpbmV3aWR0aCtlLnplcm9saW5ld2lkdGgpLzIsMSk7ZnVuY3Rpb24gbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJk1hdGguYWJzKHQtbCk8cn1pZihuKHQuX21haW5MaW5lUG9zaXRpb24pfHxuKHQuX21haW5NaXJyb3JQb3NpdGlvbikpcmV0dXJuITA7dmFyIGk9dC5fbGluZXBvc2l0aW9uc3x8e307Zm9yKHZhciBhIGluIGkpaWYobihpW2FdWzBdKXx8bihpW2FdWzFdKSlyZXR1cm4hMH12YXIgdT1hLl9wbG90c1tyLl9tYWluU3VicGxvdF07aWYoISh1Lm1haW5wbG90aW5mb3x8dSkub3ZlcmxheXMubGVuZ3RoKXJldHVybiBjKHIpO2Zvcih2YXIgZj1WLmxpc3QodCxzKSxoPTA7aDxmLmxlbmd0aDtoKyspe3ZhciBwPWZbaF07aWYocC5fbWFpbkF4aXM9PT1pJiZjKHApKXJldHVybiEwfX0odCxlLHIsbil8fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxEYXRhLG49ZS5fbWFpblN1YnBsb3QsaT1lLl9pZC5jaGFyQXQoMCksYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdO2lmKCEwPT09cy52aXNpYmxlJiZzLnhheGlzK3MueWF4aXM9PT1uKXtpZihvLnRyYWNlSXMocywiYmFyLWxpa2UiKSYmcy5vcmllbnRhdGlvbj09PXt4OiJoIix5OiJ2In1baV0pcmV0dXJuITA7aWYocy5maWxsJiZzLmZpbGwuY2hhckF0KHMuZmlsbC5sZW5ndGgtMSk9PT1pKXJldHVybiEwfX1yZXR1cm4hMX0odCxlKSl9LFYuY2xpcEVuZHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiB2dCh0LGUueCl9KSl9LFYuYWxsb3dBdXRvTWFyZ2luPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1WLmxpc3QodCwiIiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uYXV0b21hcmdpbiYmKGEuYWxsb3dBdXRvTWFyZ2luKHQseHQobikpLG4ubWlycm9yJiZhLmFsbG93QXV0b01hcmdpbih0LGJ0KG4pKSksby5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikobikmJmEuYWxsb3dBdXRvTWFyZ2luKHQsX3QobikpfX0sVi5zd2FwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPVtdO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBhPVtdLG89dC5fZnVsbERhdGFbZVtyXV0ueGF4aXMscz10Ll9mdWxsRGF0YVtlW3JdXS55YXhpcztpZihvJiZzKXtmb3Iobj0wO248aS5sZW5ndGg7bisrKS0xPT09aVtuXS54LmluZGV4T2YobykmJi0xPT09aVtuXS55LmluZGV4T2Yocyl8fGEucHVzaChuKTtpZihhLmxlbmd0aCl7dmFyIGwsYz1pW2FbMF1dO2lmKGEubGVuZ3RoPjEpZm9yKG49MTtuPGEubGVuZ3RoO24rKylsPWlbYVtuXV0sd3QoYy54LGwueCksd3QoYy55LGwueSk7d3QoYy54LFtvXSksd3QoYy55LFtzXSl9ZWxzZSBpLnB1c2goe3g6W29dLHk6W3NdfSl9fXJldHVybiBpfSh0LGUpLG49MDtuPHIubGVuZ3RoO24rKylUdCh0LHJbbl0ueCxyW25dLnkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyI6NzM3LCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3NDQsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAyLCIuLi8uLi9wbG90cy9wbG90cyI6ODkwLCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2F1dG9yYW5nZSI6ODI2LCIuL2F4aXNfYXV0b3R5cGUiOjgyOCwiLi9heGlzX2lkcyI6ODMxLCIuL2NsZWFuX3RpY2tzIjo4MzMsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg0MiwiLi9zZXRfY29udmVydCI6ODQ4LCJAcGxvdGx5L2QzIjo1OCwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDgyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLG89aS5pc0FycmF5T3JUeXBlZEFycmF5LHM9aS5pc0RhdGVUaW1lLGw9aS5jbGVhbk51bWJlcixjPU1hdGgucm91bmQ7ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBlP24odCk6Im51bWJlciI9PXR5cGVvZiB0fWZ1bmN0aW9uIGYodCl7cmV0dXJuIE1hdGgubWF4KDEsKHQtMSkvMWUzKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQsaD1yLm5vTXVsdGlDYXRlZ29yeTtpZihvKGkpJiYhaS5sZW5ndGgpcmV0dXJuIi0iO2lmKCFoJiZmdW5jdGlvbih0KXtyZXR1cm4gbyh0WzBdKSYmbyh0WzFdKX0oaSkpcmV0dXJuIm11bHRpY2F0ZWdvcnkiO2lmKGgmJkFycmF5LmlzQXJyYXkoaVswXSkpe2Zvcih2YXIgcD1bXSxkPTA7ZDxpLmxlbmd0aDtkKyspaWYobyhpW2RdKSlmb3IodmFyIG09MDttPGlbZF0ubGVuZ3RoO20rKylwLnB1c2goaVtkXVttXSk7aT1wfWlmKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLGk9ZihyKSxhPTAsbz0wLGw9e30sdT0wO3U8cjt1Kz1pKXt2YXIgaD1jKHUpLHA9dFtoXSxkPVN0cmluZyhwKTtsW2RdfHwobFtkXT0xLHMocCxlKSYmYSsrLG4ocCkmJm8rKyl9cmV0dXJuIGE+MipvfShpLGUpKXJldHVybiJkYXRlIjt2YXIgZz0ic3RyaWN0IiE9PXIuYXV0b3R5cGVudW1iZXJzO3JldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPWYociksaT0wLG89MCxzPXt9LHU9MDt1PHI7dSs9bil7dmFyIGg9Yyh1KSxwPXRbaF0sZD1TdHJpbmcocCk7aWYoIXNbZF0pe3NbZF09MTt2YXIgbT10eXBlb2YgcDsiYm9vbGVhbiI9PT1tP28rKzooZT9sKHApIT09YToibnVtYmVyIj09PW0pP2krKzoic3RyaW5nIj09PW0mJm8rK319cmV0dXJuIG8+MippfShpLGcpPyJjYXRlZ29yeSI6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wO248cjtuKyspaWYodSh0W25dLGUpKXJldHVybiEwO3JldHVybiExfShpLGcpPyJsaW5lYXIiOiItIn19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3NiwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDgyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIikscz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbD10KCIuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSxjPXQoIi4vdGlja19tYXJrX2RlZmF1bHRzIiksdT10KCIuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxmPXQoIi4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiKSxoPXQoIi4vbGluZV9ncmlkX2RlZmF1bHRzIikscD10KCIuL3NldF9jb252ZXJ0IiksZD10KCIuL2NvbnN0YW50cyIpLldFRUtEQVlfUEFUVEVSTixtPXQoIi4vY29uc3RhbnRzIikuSE9VUl9QQVRURVJOO2Z1bmN0aW9uIGcodCxlLHIpe2Z1bmN0aW9uIGkocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLHMucmFuZ2VicmVha3MscixuKX1pZihpKCJlbmFibGVkIikpe3ZhciBvPWkoImJvdW5kcyIpO2lmKG8mJm8ubGVuZ3RoPj0yKXt2YXIgbCxjLHU9IiI7aWYoMj09PW8ubGVuZ3RoKWZvcihsPTA7bDwyO2wrKylpZihjPXkob1tsXSkpe3U9ZDticmVha312YXIgZj1pKCJwYXR0ZXJuIix1KTtpZihmPT09ZClmb3IobD0wO2w8MjtsKyspKGM9eShvW2xdKSkmJihlLmJvdW5kc1tsXT1vW2xdPWMtMSk7aWYoZilmb3IobD0wO2w8MjtsKyspc3dpdGNoKGM9b1tsXSxmKXtjYXNlIGQ6aWYoIW4oYykpcmV0dXJuIHZvaWQoZS5lbmFibGVkPSExKTtpZigoYz0rYykhPT1NYXRoLmZsb29yKGMpfHxjPDB8fGM+PTcpcmV0dXJuIHZvaWQoZS5lbmFibGVkPSExKTtlLmJvdW5kc1tsXT1vW2xdPWM7YnJlYWs7Y2FzZSBtOmlmKCFuKGMpKXJldHVybiB2b2lkKGUuZW5hYmxlZD0hMSk7aWYoKGM9K2MpPDB8fGM+MjQpcmV0dXJuIHZvaWQoZS5lbmFibGVkPSExKTtlLmJvdW5kc1tsXT1vW2xdPWN9aWYoITE9PT1yLmF1dG9yYW5nZSl7dmFyIGg9ci5yYW5nZTtpZihoWzBdPGhbMV0pe2lmKG9bMF08aFswXSYmb1sxXT5oWzFdKXJldHVybiB2b2lkKGUuZW5hYmxlZD0hMSl9ZWxzZSBpZihvWzBdPmhbMF0mJm9bMV08aFsxXSlyZXR1cm4gdm9pZChlLmVuYWJsZWQ9ITEpfX1lbHNle3ZhciBwPWkoInZhbHVlcyIpO2lmKCFwfHwhcC5sZW5ndGgpcmV0dXJuIHZvaWQoZS5lbmFibGVkPSExKTtpKCJkdmFsdWUiKX19fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLG0pe3ZhciB2LHk9bi5sZXR0ZXIseD1uLmZvbnR8fHt9LGI9bi5zcGxvbVN0YXNofHx7fSxfPXIoInZpc2libGUiLCFuLnZpc2libGVEZmx0KSx3PWUuX3RlbXBsYXRlfHx7fSxUPWUudHlwZXx8dy50eXBlfHwiLSI7ImRhdGUiPT09VCYmKGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVEZWZhdWx0cyIpKHQsZSwiY2FsZW5kYXIiLG4uY2FsZW5kYXIpLG4ubm9UaWNrbGFiZWxtb2RlfHwodj1yKCJ0aWNrbGFiZWxtb2RlIikpKTt2YXIgaz0iIjtuLm5vVGlja2xhYmVscG9zaXRpb24mJiJtdWx0aWNhdGVnb3J5IiE9PVR8fChrPWEuY29lcmNlKHQsZSx7dGlja2xhYmVscG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6Im91dHNpZGUiLHZhbHVlczoicGVyaW9kIj09PXY/WyJvdXRzaWRlIiwiaW5zaWRlIl06IngiPT09eT9bIm91dHNpZGUiLCJpbnNpZGUiLCJvdXRzaWRlIGxlZnQiLCJpbnNpZGUgbGVmdCIsIm91dHNpZGUgcmlnaHQiLCJpbnNpZGUgcmlnaHQiXTpbIm91dHNpZGUiLCJpbnNpZGUiLCJvdXRzaWRlIHRvcCIsImluc2lkZSB0b3AiLCJvdXRzaWRlIGJvdHRvbSIsImluc2lkZSBib3R0b20iXX19LCJ0aWNrbGFiZWxwb3NpdGlvbiIpKSxuLm5vVGlja2xhYmVsb3ZlcmZsb3d8fHIoInRpY2tsYWJlbG92ZXJmbG93IiwtMSE9PWsuaW5kZXhPZigiaW5zaWRlIik/ImhpZGUgcGFzdCBkb21haW4iOiJjYXRlZ29yeSI9PT1UfHwibXVsdGljYXRlZ29yeSI9PT1UPyJhbGxvdyI6ImhpZGUgcGFzdCBkaXYiKSxwKGUsbSk7dmFyIEE9IWUuaXNWYWxpZFJhbmdlKHQucmFuZ2UpO0EmJm4ucmV2ZXJzZURmbHQmJihBPSJyZXZlcnNlZCIpLCFyKCJhdXRvcmFuZ2UiLEEpfHwibGluZWFyIiE9PVQmJiItIiE9PVR8fHIoInJhbmdlbW9kZSIpLHIoInJhbmdlIiksZS5jbGVhblJhbmdlKCksZih0LGUscixuKSwiY2F0ZWdvcnkiPT09VHx8bi5ub0hvdmVyfHxyKCJob3ZlcmZvcm1hdCIpO3ZhciBNPXIoImNvbG9yIiksUz1NIT09cy5jb2xvci5kZmx0P006eC5jb2xvcixFPWIubGFiZWx8fG0uX2RmbHRUaXRsZVt5XTtpZih1KHQsZSxyLFQsbix7cGFzczoxfSksIV8pcmV0dXJuIGU7cigidGl0bGUudGV4dCIsRSksYS5jb2VyY2VGb250KHIsInRpdGxlLmZvbnQiLHtmYW1pbHk6eC5mYW1pbHksc2l6ZTphLmJpZ0ZvbnQoeC5zaXplKSxjb2xvcjpTfSksbCh0LGUscixUKSx1KHQsZSxyLFQsbix7cGFzczoyfSksYyh0LGUscixuKSxoKHQsZSxyLHtkZmx0Q29sb3I6TSxiZ0NvbG9yOm4uYmdDb2xvcixzaG93R3JpZDpuLnNob3dHcmlkLGF0dHJpYnV0ZXM6c30pLChlLnNob3dsaW5lfHxlLnRpY2tzKSYmcigibWlycm9yIiksbi5hdXRvbWFyZ2luJiZyKCJhdXRvbWFyZ2luIik7dmFyIEwsQz0ibXVsdGljYXRlZ29yeSI9PT1UO24ubm9UaWNrc29ufHwiY2F0ZWdvcnkiIT09VCYmIUN8fCFlLnRpY2tzJiYhZS5zaG93Z3JpZHx8KEMmJihMPSJib3VuZGFyaWVzIiksImJvdW5kYXJpZXMiPT09cigidGlja3NvbiIsTCkmJmRlbGV0ZSBlLnRpY2tsYWJlbHBvc2l0aW9uKTtDJiYocigic2hvd2RpdmlkZXJzIikmJihyKCJkaXZpZGVyY29sb3IiKSxyKCJkaXZpZGVyd2lkdGgiKSkpO2lmKCJkYXRlIj09PVQpaWYobyh0LGUse25hbWU6InJhbmdlYnJlYWtzIixpbmNsdXNpb25BdHRyOiJlbmFibGVkIixoYW5kbGVJdGVtRGVmYXVsdHM6Z30pLGUucmFuZ2VicmVha3MubGVuZ3RoKXtmb3IodmFyIFA9MDtQPGUucmFuZ2VicmVha3MubGVuZ3RoO1ArKylpZihlLnJhbmdlYnJlYWtzW1BdLnBhdHRlcm49PT1kKXtlLl9oYXNEYXlPZldlZWtCcmVha3M9ITA7YnJlYWt9aWYocChlLG0pLG0uX2hhcygic2NhdHRlcmdsIil8fG0uX2hhcygic3Bsb20iKSlmb3IodmFyIEk9MDtJPG4uZGF0YS5sZW5ndGg7SSsrKXt2YXIgTz1uLmRhdGFbSV07InNjYXR0ZXJnbCIhPT1PLnR5cGUmJiJzcGxvbSIhPT1PLnR5cGV8fChPLnZpc2libGU9ITEsYS53YXJuKE8udHlwZSsiIHRyYWNlcyBkbyBub3Qgd29yayBvbiBheGVzIHdpdGggcmFuZ2VicmVha3MuIFNldHRpbmcgdHJhY2UgIitPLmluZGV4KyIgdG8gYHZpc2libGU6IGZhbHNlYC4iKSl9fWVsc2UgZGVsZXRlIGUucmFuZ2VicmVha3M7cmV0dXJuIGV9O3ZhciB2PXtzdW46MSxtb246Mix0dWU6Myx3ZWQ6NCx0aHU6NSxmcmk6NixzYXQ6N307ZnVuY3Rpb24geSh0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHZbdC5zdWJzdHIoMCwzKS50b0xvd2VyQ2FzZSgpXX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6ODIyLCIuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIjo4MzIsIi4vY29uc3RhbnRzIjo4MzQsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg0MiwiLi9saW5lX2dyaWRfZGVmYXVsdHMiOjg0NCwiLi9zZXRfY29udmVydCI6ODQ4LCIuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjg0OSwiLi90aWNrX21hcmtfZGVmYXVsdHMiOjg1MCwiLi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo4NTEsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw4MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29uc3RhbnRzL2RvY3MiKSxpPW4uRk9STUFUX0xJTkssYT1uLkRBVEVfRk9STUFUX0xJTks7ZnVuY3Rpb24gbyh0LGUpe3JldHVyblsiU2V0cyB0aGUgIit0KyIgZm9ybWF0dGluZyBydWxlIisoZT8iZm9yIGAiK2UrImAgIjoiIiksInVzaW5nIGQzIGZvcm1hdHRpbmcgbWluaS1sYW5ndWFnZXMiLCJ3aGljaCBhcmUgdmVyeSBzaW1pbGFyIHRvIHRob3NlIGluIFB5dGhvbi4gRm9yIG51bWJlcnMsIHNlZTogIitpKyIuIl0uam9pbigiICIpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gbyh0LGUpK1siIEFuZCBmb3IgZGF0ZXMgc2VlOiAiK2ErIi4iLCJXZSBhZGQgdHdvIGl0ZW1zIHRvIGQzJ3MgZGF0ZSBmb3JtYXR0ZXI6IiwiKiVoKiBmb3IgaGFsZiBvZiB0aGUgeWVhciBhcyBhIGRlY2ltYWwgbnVtYmVyIGFzIHdlbGwgYXMiLCIqJXtufWYqIGZvciBmcmFjdGlvbmFsIHNlY29uZHMiLCJ3aXRoIG4gZGlnaXRzLiBGb3IgZXhhbXBsZSwgKjIwMTYtMTAtMTMgMDk6MTU6MjMuNDU2KiB3aXRoIHRpY2tmb3JtYXQiLCIqJUh+JU1+JVMuJTJmKiB3b3VsZCBkaXNwbGF5ICowOX4xNX4yMy40NioiXS5qb2luKCIgIil9ZS5leHBvcnRzPXtheGlzSG92ZXJGb3JtYXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm57dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJub25lIixkZXNjcmlwdGlvbjooZT9vOnMpKCJob3ZlciB0ZXh0Iix0KStbIkJ5IGRlZmF1bHQgdGhlIHZhbHVlcyBhcmUgZm9ybWF0dGVkIHVzaW5nICIrKGU/ImdlbmVyaWMgbnVtYmVyIGZvcm1hdCI6ImAiK3QrImF4aXMuaG92ZXJmb3JtYXRgIikrIi4iXS5qb2luKCIgIil9fSxkZXNjcmlwdGlvbk9ubHlOdW1iZXJzOm8sZGVzY3JpcHRpb25XaXRoRGF0ZXM6c319LHsiLi4vLi4vY29uc3RhbnRzL2RvY3MiOjc0N31dLDgzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBhKHQsZSl7aWYoZSYmZS5sZW5ndGgpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXVt0XSlyZXR1cm4hMDtyZXR1cm4hMX1yLmlkMm5hbWU9ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZ0Lm1hdGNoKGkuQVhfSURfUEFUVEVSTikpe3ZhciBlPXQuc3BsaXQoIiAiKVswXS5zdWJzdHIoMSk7cmV0dXJuIjEiPT09ZSYmKGU9IiIpLHQuY2hhckF0KDApKyJheGlzIitlfX0sci5uYW1lMmlkPWZ1bmN0aW9uKHQpe2lmKHQubWF0Y2goaS5BWF9OQU1FX1BBVFRFUk4pKXt2YXIgZT10LnN1YnN0cig1KTtyZXR1cm4iMSI9PT1lJiYoZT0iIiksdC5jaGFyQXQoMCkrZX19LHIuY2xlYW5JZD1mdW5jdGlvbih0LGUscil7dmFyIG49LyggZG9tYWluKSQvLnRlc3QodCk7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZ0Lm1hdGNoKGkuQVhfSURfUEFUVEVSTikmJighZXx8dC5jaGFyQXQoMCk9PT1lKSYmKCFufHxyKSl7dmFyIGE9dC5zcGxpdCgiICIpWzBdLnN1YnN0cigxKS5yZXBsYWNlKC9eMCsvLCIiKTtyZXR1cm4iMSI9PT1hJiYoYT0iIiksdC5jaGFyQXQoMCkrYSsobiYmcj8iIGRvbWFpbiI6IiIpfX0sci5saXN0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10Ll9mdWxsTGF5b3V0O2lmKCFpKXJldHVybltdO3ZhciBhLG89ci5saXN0SWRzKHQsZSkscz1uZXcgQXJyYXkoby5sZW5ndGgpO2ZvcihhPTA7YTxvLmxlbmd0aDthKyspe3ZhciBsPW9bYV07c1thXT1pW2wuY2hhckF0KDApKyJheGlzIitsLnN1YnN0cigxKV19aWYoIW4pe3ZhciBjPWkuX3N1YnBsb3RzLmdsM2R8fFtdO2ZvcihhPTA7YTxjLmxlbmd0aDthKyspe3ZhciB1PWlbY1thXV07ZT9zLnB1c2godVtlKyJheGlzIl0pOnMucHVzaCh1LnhheGlzLHUueWF4aXMsdS56YXhpcyl9fXJldHVybiBzfSxyLmxpc3RJZHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0O2lmKCFyKXJldHVybltdO3ZhciBuPXIuX3N1YnBsb3RzO3JldHVybiBlP25bZSsiYXhpcyJdOm4ueGF4aXMuY29uY2F0KG4ueWF4aXMpfSxyLmdldEZyb21JZD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5fZnVsbExheW91dDtyZXR1cm4gZT12b2lkIDA9PT1lfHwic3RyaW5nIiE9dHlwZW9mIGU/ZTplLnJlcGxhY2UoIiBkb21haW4iLCIiKSwieCI9PT1uP2U9ZS5yZXBsYWNlKC95WzAtOV0qLywiIik6InkiPT09biYmKGU9ZS5yZXBsYWNlKC94WzAtOV0qLywiIikpLGlbci5pZDJuYW1lKGUpXX0sci5nZXRGcm9tVHJhY2U9ZnVuY3Rpb24odCxlLGkpe3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1udWxsO2lmKG4udHJhY2VJcyhlLCJnbDNkIikpe3ZhciBzPWUuc2NlbmU7InNjZW5lIj09PXMuc3Vic3RyKDAsNSkmJihvPWFbc11baSsiYXhpcyJdKX1lbHNlIG89ci5nZXRGcm9tSWQodCxlW2krImF4aXMiXXx8aSk7cmV0dXJuIG99LHIuaWRTb3J0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jaGFyQXQoMCksbj1lLmNoYXJBdCgwKTtyZXR1cm4gciE9PW4/cj5uPzE6LTE6Kyh0LnN1YnN0cigxKXx8MSktKyhlLnN1YnN0cigxKXx8MSl9LHIucmVmMmlkPWZ1bmN0aW9uKHQpe3JldHVybiEhL15beHl6XS8udGVzdCh0KSYmdC5zcGxpdCgiICIpWzBdfSxyLmlzTGlua2VkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEoZSx0Ll9heGlzTWF0Y2hHcm91cHMpfHxhKGUsdC5fYXhpc0NvbnN0cmFpbnRHcm91cHMpfX0seyIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2NvbnN0YW50cyI6ODM0fV0sODMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpZigiY2F0ZWdvcnkiPT09ZS50eXBlKXt2YXIgaSxhPXQuY2F0ZWdvcnlhcnJheSxvPUFycmF5LmlzQXJyYXkoYSkmJmEubGVuZ3RoPjA7byYmKGk9ImFycmF5Iik7dmFyIHMsbD1yKCJjYXRlZ29yeW9yZGVyIixpKTsiYXJyYXkiPT09bCYmKHM9cigiY2F0ZWdvcnlhcnJheSIpKSxvfHwiYXJyYXkiIT09bHx8KGw9ZS5jYXRlZ29yeW9yZGVyPSJ0cmFjZSIpLCJ0cmFjZSI9PT1sP2UuX2luaXRpYWxDYXRlZ29yaWVzPVtdOiJhcnJheSI9PT1sP2UuX2luaXRpYWxDYXRlZ29yaWVzPXMuc2xpY2UoKToocz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPWUuZGF0YUF0dHJ8fHQuX2lkLmNoYXJBdCgwKSxvPXt9O2lmKGUuYXhEYXRhKXI9ZS5heERhdGE7ZWxzZSBmb3Iocj1bXSxuPTA7bjxlLmRhdGEubGVuZ3RoO24rKyl7dmFyIHM9ZS5kYXRhW25dO3NbYSsiYXhpcyJdPT09dC5faWQmJnIucHVzaChzKX1mb3Iobj0wO248ci5sZW5ndGg7bisrKXt2YXIgbD1yW25dW2FdO2ZvcihpPTA7aTxsLmxlbmd0aDtpKyspe3ZhciBjPWxbaV07bnVsbCE9YyYmKG9bY109MSl9fXJldHVybiBPYmplY3Qua2V5cyhvKX0oZSxuKS5zb3J0KCksImNhdGVnb3J5IGFzY2VuZGluZyI9PT1sP2UuX2luaXRpYWxDYXRlZ29yaWVzPXM6ImNhdGVnb3J5IGRlc2NlbmRpbmciPT09bCYmKGUuX2luaXRpYWxDYXRlZ29yaWVzPXMucmV2ZXJzZSgpKSl9fX0se31dLDgzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksbz1hLk9ORURBWSxzPWEuT05FV0VFSztyLmR0aWNrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ImxvZyI9PT1lLGk9ImRhdGUiPT09ZSxhPSJjYXRlZ29yeSI9PT1lLHM9aT9vOjE7aWYoIXQpcmV0dXJuIHM7aWYobih0KSlyZXR1cm4odD1OdW1iZXIodCkpPD0wP3M6YT9NYXRoLm1heCgxLE1hdGgucm91bmQodCkpOmk/TWF0aC5tYXgoLjEsdCk6dDtpZigic3RyaW5nIiE9dHlwZW9mIHR8fCFpJiYhcilyZXR1cm4gczt2YXIgbD10LmNoYXJBdCgwKSxjPXQuc3Vic3RyKDEpO3JldHVybihjPW4oYyk/TnVtYmVyKGMpOjApPD0wfHwhKGkmJiJNIj09PWwmJmM9PT1NYXRoLnJvdW5kKGMpfHxyJiYiTCI9PT1sfHxyJiYiRCI9PT1sJiYoMT09PWN8fDI9PT1jKSk/czp0fSxyLnRpY2swPWZ1bmN0aW9uKHQsZSxyLGEpe3JldHVybiJkYXRlIj09PWU/aS5jbGVhbkRhdGUodCxpLmRhdGVUaWNrMChyLGElcz09MD8xOjApKToiRDEiIT09YSYmIkQyIiE9PWE/bih0KT9OdW1iZXIodCk6MDp2b2lkIDB9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzYsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw4MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL3JlZ2V4IikuY291bnRlcjtlLmV4cG9ydHM9e2lkUmVnZXg6e3g6bigieCIsIiggZG9tYWluKT8iKSx5Om4oInkiLCIoIGRvbWFpbik/Iil9LGF0dHJSZWdleDpuKCJbeHldYXhpcyIpLHhBeGlzTWF0Y2g6bigieGF4aXMiKSx5QXhpc01hdGNoOm4oInlheGlzIiksQVhfSURfUEFUVEVSTjovXlt4eXpdWzAtOV0qKCBkb21haW4pPyQvLEFYX05BTUVfUEFUVEVSTjovXlt4eXpdYXhpc1swLTldKiQvLFNVQlBMT1RfUEFUVEVSTjovXngoWzAtOV0qKXkoWzAtOV0qKSQvLEhPVVJfUEFUVEVSTjoiaG91ciIsV0VFS0RBWV9QQVRURVJOOiJkYXkgb2Ygd2VlayIsTUlORFJBRzo4LE1JTlNFTEVDVDoxMixNSU5aT09NOjIwLERSQUdHRVJTSVpFOjIwLEJFTkRQWDoxLjUsUkVEUkFXREVMQVk6NTAsU0VMRUNUREVMQVk6MTAwLFNFTEVDVElEOiItc2VsZWN0IixERkxUUkFOR0VYOlstMSw2XSxERkxUUkFOR0VZOlstMSw0XSx0cmFjZUxheWVyQ2xhc3NlczpbImltYWdlbGF5ZXIiLCJoZWF0bWFwbGF5ZXIiLCJjb250b3VyY2FycGV0bGF5ZXIiLCJjb250b3VybGF5ZXIiLCJmdW5uZWxsYXllciIsIndhdGVyZmFsbGxheWVyIiwiYmFybGF5ZXIiLCJjYXJwZXRsYXllciIsInZpb2xpbmxheWVyIiwiYm94bGF5ZXIiLCJvaGxjbGF5ZXIiLCJzY2F0dGVyY2FycGV0bGF5ZXIiLCJzY2F0dGVybGF5ZXIiXSxjbGlwT25BeGlzRmFsc2VRdWVyeTpbIi5zY2F0dGVybGF5ZXIiLCIuYmFybGF5ZXIiLCIuZnVubmVsbGF5ZXIiLCIud2F0ZXJmYWxsbGF5ZXIiXSxsYXllclZhbHVlMmxheWVyQ2xhc3M6eyJhYm92ZSB0cmFjZXMiOiJhYm92ZSIsImJlbG93IHRyYWNlcyI6ImJlbG93In19fSx7Ii4uLy4uL2xpYi9yZWdleCI6NzkzfV0sODM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdXRvcmFuZ2UiKSxhPXQoIi4vYXhpc19pZHMiKS5pZDJuYW1lLG89dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHM9dCgiLi9zY2FsZV96b29tIiksbD10KCIuL3NldF9jb252ZXJ0IiksYz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQUxNT1NUX0VRVUFMLHU9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkZST01fQkw7ZnVuY3Rpb24gZih0LGUscil7dmFyIGk9ci5heElkcyxzPXIubGF5b3V0T3V0LGw9ci5oYXNJbWFnZSxjPXMuX2F4aXNDb25zdHJhaW50R3JvdXBzLHU9cy5fYXhpc01hdGNoR3JvdXBzLGY9ZS5faWQsbT1mLmNoYXJBdCgwKSxnPSgocy5fc3Bsb21BeGVzfHx7fSlbbV18fHt9KVtmXXx8e30sdj1lLl9pZCx5PSJ4Ij09PXYuY2hhckF0KDApO2Z1bmN0aW9uIHgocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1lLl9tYXRjaEdyb3VwPW51bGwsZS5fY29uc3RyYWludEdyb3VwPW51bGwseCgiY29uc3RyYWluIixsPyJkb21haW4iOiJyYW5nZSIpLG4uY29lcmNlKHQsZSx7Y29uc3RyYWludG93YXJkOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6eT9bImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdOlsiYm90dG9tIiwibWlkZGxlIiwidG9wIl0sZGZsdDp5PyJjZW50ZXIiOiJtaWRkbGUifX0sImNvbnN0cmFpbnRvd2FyZCIpO3ZhciBiLF8sdz1lLnR5cGUsVD1bXTtmb3IoYj0wO2I8aS5sZW5ndGg7YisrKXtpZigoXz1pW2JdKSE9PXYpc1thKF8pXS50eXBlPT09dyYmVC5wdXNoKF8pfXZhciBrPXAoYyx2KTtpZihrKXt2YXIgQT1bXTtmb3IoYj0wO2I8VC5sZW5ndGg7YisrKWtbXz1UW2JdXXx8QS5wdXNoKF8pO1Q9QX12YXIgTSxTLEU9VC5sZW5ndGg7RSYmKHQubWF0Y2hlc3x8Zy5tYXRjaGVzKSYmKE09bi5jb2VyY2UodCxlLHttYXRjaGVzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6VCxkZmx0Oi0xIT09VC5pbmRleE9mKGcubWF0Y2hlcyk/Zy5tYXRjaGVzOnZvaWQgMH19LCJtYXRjaGVzIikpO3ZhciBMPWwmJiF5P2UuYW5jaG9yOnZvaWQgMDtpZihFJiYhTSYmKHQuc2NhbGVhbmNob3J8fEwpJiYoUz1uLmNvZXJjZSh0LGUse3NjYWxlYW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6VH19LCJzY2FsZWFuY2hvciIsTCkpLE0pe2UuX21hdGNoR3JvdXA9ZCh1LHYsTSwxKTt2YXIgQz1zW2EoTSldLFA9aChzLGUpL2gocyxDKTt5IT09KCJ4Ij09PU0uY2hhckF0KDApKSYmKFA9KHk/IngiOiJ5IikrUCksZChjLHYsTSxQKX1lbHNlIHQubWF0Y2hlcyYmLTEhPT1pLmluZGV4T2YodC5tYXRjaGVzKSYmbi53YXJuKCJpZ25vcmVkICIrZS5fbmFtZSsnLm1hdGNoZXM6ICInK3QubWF0Y2hlcysnIiB0byBhdm9pZCBhbiBpbmZpbml0ZSBsb29wJyk7aWYoUyl7dmFyIEk9eCgic2NhbGVyYXRpbyIpO0l8fChJPWUuc2NhbGVyYXRpbz0xKSxkKGMsdixTLEkpfWVsc2UgdC5zY2FsZWFuY2hvciYmLTEhPT1pLmluZGV4T2YodC5zY2FsZWFuY2hvcikmJm4ud2FybigiaWdub3JlZCAiK2UuX25hbWUrJy5zY2FsZWFuY2hvcjogIicrdC5zY2FsZWFuY2hvcisnIiB0byBhdm9pZCBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBhbmQgcG9zc2libHkgaW5jb25zaXN0ZW50IHNjYWxlcmF0aW9zLCBvciBiZWNhdXNlIHRoaXMgYXhpcyBkZWNsYXJlcyBhICptYXRjaGVzKiBjb25zdHJhaW50LicpfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj1lLmRvbWFpbjtyZXR1cm4gcnx8KHI9dFthKGUub3ZlcmxheWluZyldLmRvbWFpbiksclsxXS1yWzBdfWZ1bmN0aW9uIHAodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZih0W3JdW2VdKXJldHVybiB0W3JdO3JldHVybiBudWxsfWZ1bmN0aW9uIGQodCxlLHIsbil7dmFyIGksYSxvLHMsbCxjPXAodCxlKTtudWxsPT09Yz8oKGM9e30pW2VdPTEsbD10Lmxlbmd0aCx0LnB1c2goYykpOmw9dC5pbmRleE9mKGMpO3ZhciB1PU9iamVjdC5rZXlzKGMpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspaWYobz10W2ldLGkhPT1sJiZvW3JdKXt2YXIgZj1vW3JdO2ZvcihhPTA7YTx1Lmxlbmd0aDthKyspb1tzPXVbYV1dPW0oZixtKG4sY1tzXSkpO3JldHVybiB2b2lkIHQuc3BsaWNlKGwsMSl9aWYoMSE9PW4pZm9yKGE9MDthPHUubGVuZ3RoO2ErKyl7dmFyIGg9dVthXTtjW2hdPW0obixjW2hdKX1jW3JdPTF9ZnVuY3Rpb24gbSh0LGUpe3ZhciByLG4saT0iIixhPSIiOyJzdHJpbmciPT10eXBlb2YgdCYmKHI9KGk9dC5tYXRjaCgvXlt4eV0qLylbMF0pLmxlbmd0aCx0PSt0LnN1YnN0cihyKSksInN0cmluZyI9PXR5cGVvZiBlJiYobj0oYT1lLm1hdGNoKC9eW3h5XSovKVswXSkubGVuZ3RoLGU9K2Uuc3Vic3RyKG4pKTt2YXIgbz10KmU7cmV0dXJuIHJ8fG4/ciYmbiYmaS5jaGFyQXQoMCkhPT1hLmNoYXJBdCgwKT9yPT09bj9vOihyPm4/aS5zdWJzdHIobik6YS5zdWJzdHIocikpK286aSthK3QqZTpvfWZ1bmN0aW9uIGcodCxlKXtmb3IodmFyIHI9ZS5fc2l6ZSxuPXIuaC9yLncsaT17fSxhPU9iamVjdC5rZXlzKHQpLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPXRbc107aWYoInN0cmluZyI9PXR5cGVvZiBsKXt2YXIgYz1sLm1hdGNoKC9eW3h5XSovKVswXSx1PWMubGVuZ3RoO2w9K2wuc3Vic3RyKHUpO2Zvcih2YXIgZj0ieSI9PT1jLmNoYXJBdCgwKT9uOjEvbixoPTA7aDx1O2grKylsKj1mfWlbc109bH1yZXR1cm4gaX1mdW5jdGlvbiB2KHQsZSl7dmFyIHI9dC5faW5wdXREb21haW4sbj11W3QuY29uc3RyYWludG93YXJkXSxpPXJbMF0rKHJbMV0tclswXSkqbjt0LmRvbWFpbj10Ll9pbnB1dC5kb21haW49W2krKHJbMF0taSkvZSxpKyhyWzFdLWkpL2VdLHQuc2V0U2NhbGUoKX1yLmhhbmRsZURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxvLHMsYyx1LGgscCxkLG09ci5heElkcyxnPXIuYXhIYXNJbWFnZSx2PWUuX2F4aXNDb25zdHJhaW50R3JvdXBzPVtdLHk9ZS5fYXhpc01hdGNoR3JvdXBzPVtdO2ZvcihpPTA7aTxtLmxlbmd0aDtpKyspZih1PXRbYz1hKG1baV0pXSxoPWVbY10se2F4SWRzOm0sbGF5b3V0T3V0OmUsaGFzSW1hZ2U6Z1tjXX0pO2Z1bmN0aW9uIHgodCxyKXtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKWZvcihzIGluIG89dFtpXSllW2EocyldW3JdPW99Zm9yKHgoeSwiX21hdGNoR3JvdXAiKSxpPTA7aTx2Lmxlbmd0aDtpKyspZm9yKHMgaW4gbz12W2ldKWlmKChoPWVbYShzKV0pLmZpeGVkcmFuZ2Upe2Zvcih2YXIgYiBpbiBvKXt2YXIgXz1hKGIpOyExPT09KHRbX118fHt9KS5maXhlZHJhbmdlJiZuLndhcm4oImZpeGVkcmFuZ2Ugd2FzIHNwZWNpZmllZCBhcyBmYWxzZSBmb3IgYXhpcyAiK18rIiBidXQgd2FzIG92ZXJyaWRkZW4gYmVjYXVzZSBhbm90aGVyIGF4aXMgaW4gaXRzIGNvbnN0cmFpbnQgZ3JvdXAgaGFzIGZpeGVkcmFuZ2UgdHJ1ZSIpLGVbX10uZml4ZWRyYW5nZT0hMH1icmVha31mb3IoaT0wO2k8di5sZW5ndGg7KXtmb3IocyBpbiBvPXZbaV0peyhoPWVbYShzKV0pLl9tYXRjaEdyb3VwJiZPYmplY3Qua2V5cyhoLl9tYXRjaEdyb3VwKS5sZW5ndGg9PT1PYmplY3Qua2V5cyhvKS5sZW5ndGgmJih2LnNwbGljZShpLDEpLGktLSk7YnJlYWt9aSsrfXgodiwiX2NvbnN0cmFpbnRHcm91cCIpO3ZhciB3PVsiY29uc3RyYWluIiwicmFuZ2UiLCJhdXRvcmFuZ2UiLCJyYW5nZW1vZGUiLCJyYW5nZWJyZWFrcyIsImNhdGVnb3J5b3JkZXIiLCJjYXRlZ29yeWFycmF5Il0sVD0hMSxrPSExO2Z1bmN0aW9uIEEoKXtkPWhbcF0sInJhbmdlYnJlYWtzIj09PXAmJihrPWguX2hhc0RheU9mV2Vla0JyZWFrcyl9Zm9yKGk9MDtpPHkubGVuZ3RoO2krKyl7bz15W2ldO2Zvcih2YXIgTT0wO008dy5sZW5ndGg7TSsrKXt2YXIgUztmb3IocyBpbiBwPXdbTV0sZD1udWxsLG8paWYodT10W2M9YShzKV0saD1lW2NdLHAgaW4gaCl7aWYoIWgubWF0Y2hlcyYmKFM9aCxwIGluIHUpKXtBKCk7YnJlYWt9bnVsbD09PWQmJnAgaW4gdSYmQSgpfWlmKCJyYW5nZSI9PT1wJiZkJiYoVD0hMCksImF1dG9yYW5nZSI9PT1wJiZudWxsPT09ZCYmVCYmKGQ9ITEpLG51bGw9PT1kJiZwIGluIFMmJihkPVNbcF0pLG51bGwhPT1kKWZvcihzIGluIG8pKGg9ZVthKHMpXSlbcF09InJhbmdlIj09PXA/ZC5zbGljZSgpOmQsInJhbmdlYnJlYWtzIj09PXAmJihoLl9oYXNEYXlPZldlZWtCcmVha3M9ayxsKGgsZSkpfX19LHIuZW5mb3JjZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4sbyxsLHUsZixoLHA9dC5fZnVsbExheW91dCxkPXAuX2F4aXNDb25zdHJhaW50R3JvdXBzfHxbXTtmb3IoZT0wO2U8ZC5sZW5ndGg7ZSsrKXtuPWcoZFtlXSxwKTt2YXIgbT1PYmplY3Qua2V5cyhuKSx5PTEvMCx4PTAsYj0xLzAsXz17fSx3PXt9LFQ9ITE7Zm9yKHI9MDtyPG0ubGVuZ3RoO3IrKyl3W289bVtyXV09bD1wW2EobyldLGwuX2lucHV0RG9tYWluP2wuZG9tYWluPWwuX2lucHV0RG9tYWluLnNsaWNlKCk6bC5faW5wdXREb21haW49bC5kb21haW4uc2xpY2UoKSxsLl9pbnB1dFJhbmdlfHwobC5faW5wdXRSYW5nZT1sLnJhbmdlLnNsaWNlKCkpLGwuc2V0U2NhbGUoKSxfW29dPXU9TWF0aC5hYnMobC5fbSkvbltvXSx5PU1hdGgubWluKHksdSksImRvbWFpbiIhPT1sLmNvbnN0cmFpbiYmbC5fY29uc3RyYWludFNocmlua2FibGV8fChiPU1hdGgubWluKGIsdSkpLGRlbGV0ZSBsLl9jb25zdHJhaW50U2hyaW5rYWJsZSx4PU1hdGgubWF4KHgsdSksImRvbWFpbiI9PT1sLmNvbnN0cmFpbiYmKFQ9ITApO2lmKCEoeT5jKngpfHxUKWZvcihyPTA7cjxtLmxlbmd0aDtyKyspaWYodT1fW289bVtyXV0sZj0obD13W29dKS5jb25zdHJhaW4sdSE9PWJ8fCJkb21haW4iPT09ZilpZihoPXUvYiwicmFuZ2UiPT09ZilzKGwsaCk7ZWxzZXt2YXIgaz1sLl9pbnB1dERvbWFpbixBPShsLmRvbWFpblsxXS1sLmRvbWFpblswXSkvKGtbMV0ta1swXSksTT0obC5yMmwobC5yYW5nZVsxXSktbC5yMmwobC5yYW5nZVswXSkpLyhsLnIybChsLl9pbnB1dFJhbmdlWzFdKS1sLnIybChsLl9pbnB1dFJhbmdlWzBdKSk7aWYoKGgvPUEpKk08MSl7bC5kb21haW49bC5faW5wdXQuZG9tYWluPWsuc2xpY2UoKSxzKGwsaCk7Y29udGludWV9aWYoTTwxJiYobC5yYW5nZT1sLl9pbnB1dC5yYW5nZT1sLl9pbnB1dFJhbmdlLnNsaWNlKCksaCo9TSksbC5hdXRvcmFuZ2Upe3ZhciBTPWwucjJsKGwucmFuZ2VbMF0pLEU9bC5yMmwobC5yYW5nZVsxXSksTD0oUytFKS8yLEM9TCxQPUwsST1NYXRoLmFicyhFLUwpLE89TC1JKmgqMS4wMDAxLHo9TCtJKmgqMS4wMDAxLEQ9aS5tYWtlUGFkRm4ocCxsLDApLFI9aS5tYWtlUGFkRm4ocCxsLDEpO3YobCxoKTt2YXIgRixCLE49TWF0aC5hYnMobC5fbSksaj1pLmNvbmNhdEV4dHJlbWVzKHQsbCksVT1qLm1pbixWPWoubWF4O2ZvcihCPTA7QjxVLmxlbmd0aDtCKyspKEY9VVtCXS52YWwtRChVW0JdKS9OKT5PJiZGPEMmJihDPUYpO2ZvcihCPTA7QjxWLmxlbmd0aDtCKyspKEY9VltCXS52YWwrUihWW0JdKS9OKTx6JiZGPlAmJihQPUYpO2gvPShQLUMpLygyKkkpLEM9bC5sMnIoQyksUD1sLmwycihQKSxsLnJhbmdlPWwuX2lucHV0LnJhbmdlPVM8RT9bQyxQXTpbUCxDXX12KGwsaCl9fX0sci5nZXRBeGlzR3JvdXA9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fYXhpc01hdGNoR3JvdXBzLG49MDtuPHIubGVuZ3RoO24rKyl7aWYocltuXVtlXSlyZXR1cm4iZyIrbn1yZXR1cm4gZX0sci5jbGVhbj1mdW5jdGlvbih0LGUpe2lmKGUuX2lucHV0RG9tYWluKXtmb3IodmFyIHI9ITEsbj1lLl9pZCxpPXQuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLGE9MDthPGkubGVuZ3RoO2ErKylpZihpW2FdW25dKXtyPSEwO2JyZWFrfXImJiJkb21haW4iPT09ZS5jb25zdHJhaW58fChlLl9pbnB1dC5kb21haW49ZS5kb21haW49ZS5faW5wdXREb21haW4sZGVsZXRlIGUuX2lucHV0RG9tYWluKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjc0NCwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3NiwiLi9hdXRvcmFuZ2UiOjgyNiwiLi9heGlzX2lkcyI6ODMxLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDIsIi4vc2NhbGVfem9vbSI6ODQ2LCIuL3NldF9jb252ZXJ0Ijo4NDh9XSw4MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT1pLm51bWJlckZvcm1hdCxvPXQoInRpbnljb2xvcjIiKSxzPXQoImhhcy1wYXNzaXZlLWV2ZW50cyIpLGw9dCgiLi4vLi4vcmVnaXN0cnkiKSxjPWkuc3RyVHJhbnNsYXRlLHU9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksZj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxwPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxkPXQoIi4vYXhlcyIpLG09dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGc9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLHY9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIikseT12LnNlbGVjdGluZ09yRHJhd2luZyx4PXYuZnJlZU1vZGUsYj10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuRlJPTV9UTCxfPXQoIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyIpLHc9dCgiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiKS5yZWRyYXdSZWdsVHJhY2VzLFQ9dCgiLi4vcGxvdHMiKSxrPXQoIi4vYXhpc19pZHMiKS5nZXRGcm9tSWQsQT10KCIuL3NlbGVjdCIpLnByZXBTZWxlY3QsTT10KCIuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LFM9dCgiLi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLEU9dCgiLi9zY2FsZV96b29tIiksTD10KCIuL2NvbnN0YW50cyIpLEM9TC5NSU5EUkFHLFA9TC5NSU5aT09NLEk9ITA7ZnVuY3Rpb24gTyh0LGUscixuKXt2YXIgYT1pLmVuc3VyZVNpbmdsZSh0LmRyYWdsYXllcixlLHIsKGZ1bmN0aW9uKGUpe2UuY2xhc3NlZCgiZHJhZyIsITApLnN0eWxlKHtmaWxsOiJ0cmFuc3BhcmVudCIsInN0cm9rZS13aWR0aCI6MH0pLmF0dHIoImRhdGEtc3VicGxvdCIsdC5pZCl9KSk7cmV0dXJuIGEuY2FsbChtLG4pLGEubm9kZSgpfWZ1bmN0aW9uIHoodCxlLHIsaSxhLG8scyl7dmFyIGw9Tyh0LCJyZWN0IixlLHIpO3JldHVybiBuLnNlbGVjdChsKS5jYWxsKGguc2V0UmVjdCxpLGEsbyxzKSxsfWZ1bmN0aW9uIEQodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZighdFtyXS5maXhlZHJhbmdlKXJldHVybiBlO3JldHVybiIifWZ1bmN0aW9uIFIodCxlLHIsbixpKXtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXTtpZighby5maXhlZHJhbmdlKWlmKG8ucmFuZ2VicmVha3Mpe3ZhciBzPSJ5Ij09PW8uX2lkLmNoYXJBdCgwKSxsPXM/MS1lOmUsYz1zPzEtcjpyO25bby5fbmFtZSsiLnJhbmdlWzBdIl09by5sMnIoby5wMmwobCpvLl9sZW5ndGgpKSxuW28uX25hbWUrIi5yYW5nZVsxXSJdPW8ubDJyKG8ucDJsKGMqby5fbGVuZ3RoKSl9ZWxzZXt2YXIgdT1vLl9ybFswXSxmPW8uX3JsWzFdLXU7bltvLl9uYW1lKyIucmFuZ2VbMF0iXT1vLmwycih1K2YqZSksbltvLl9uYW1lKyIucmFuZ2VbMV0iXT1vLmwycih1K2Yqcil9fWlmKGkmJmkubGVuZ3RoKXt2YXIgaD0oZSsoMS1yKSkvMjtSKGksaCwxLWgsbixbXSl9fWZ1bmN0aW9uIEYodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtpZighbi5maXhlZHJhbmdlKWlmKG4ucmFuZ2VicmVha3Mpe3ZhciBpPW4uX2xlbmd0aCxhPShuLnAybCgwK2UpLW4ucDJsKDApKyhuLnAybChpK2UpLW4ucDJsKGkpKSkvMjtuLnJhbmdlPVtuLmwycihuLl9ybFswXS1hKSxuLmwycihuLl9ybFsxXS1hKV19ZWxzZSBuLnJhbmdlPVtuLmwycihuLl9ybFswXS1lL24uX20pLG4ubDJyKG4uX3JsWzFdLWUvbi5fbSldfX1mdW5jdGlvbiBCKHQpe3JldHVybiAxLSh0Pj0wP01hdGgubWluKHQsLjkpOjEvKDEvTWF0aC5tYXgodCwtLjMpKzMuMjIyKSl9ZnVuY3Rpb24gTih0LGUscixuLGkpe3JldHVybiB0LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveCIpLnN0eWxlKHtmaWxsOmU+LjI/InJnYmEoMCwwLDAsMCkiOiJyZ2JhKDI1NSwyNTUsMjU1LDApIiwic3Ryb2tlLXdpZHRoIjowfSkuYXR0cigidHJhbnNmb3JtIixjKHIsbikpLmF0dHIoImQiLGkrIloiKX1mdW5jdGlvbiBqKHQsZSxyKXtyZXR1cm4gdC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3gtY29ybmVycyIpLnN0eWxlKHtmaWxsOmYuYmFja2dyb3VuZCxzdHJva2U6Zi5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjoxLG9wYWNpdHk6MH0pLmF0dHIoInRyYW5zZm9ybSIsYyhlLHIpKS5hdHRyKCJkIiwiTTAsMFoiKX1mdW5jdGlvbiBVKHQsZSxyLG4saSxhKXt0LmF0dHIoImQiLG4rIk0iK3IubCsiLCIrci50KyJ2IityLmgrImgiK3Iudysidi0iK3IuaCsiaC0iK3IudysiWiIpLFYodCxlLGksYSl9ZnVuY3Rpb24gVih0LGUscixuKXtyfHwodC50cmFuc2l0aW9uKCkuc3R5bGUoImZpbGwiLG4+LjI/InJnYmEoMCwwLDAsMC40KSI6InJnYmEoMjU1LDI1NSwyNTUsMC4zKSIpLmR1cmF0aW9uKDIwMCksZS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpLmR1cmF0aW9uKDIwMCkpfWZ1bmN0aW9uIEgodCl7bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuem9vbWJveCwuanMtem9vbWJveC1iYWNrZHJvcCwuanMtem9vbWJveC1tZW51LC56b29tYm94LWNvcm5lcnMiKS5yZW1vdmUoKX1mdW5jdGlvbiBxKHQpe0kmJnQuZGF0YSYmdC5fY29udGV4dC5zaG93VGlwcyYmKGkubm90aWZpZXIoaS5fKHQsIkRvdWJsZS1jbGljayB0byB6b29tIGJhY2sgb3V0IiksImxvbmciKSxJPSExKX1mdW5jdGlvbiBHKHQpe3ZhciBlPU1hdGguZmxvb3IoTWF0aC5taW4odC5iLXQudCx0LnItdC5sLFApLzIpO3JldHVybiJNIisodC5sLTMuNSkrIiwiKyh0LnQtLjUrZSkrImgzdiIrLWUrImgiK2UrInYtM2gtIisoZSszKSsiWk0iKyh0LnIrMy41KSsiLCIrKHQudC0uNStlKSsiaC0zdiIrLWUrImgiKy1lKyJ2LTNoIisoZSszKSsiWk0iKyh0LnIrMy41KSsiLCIrKHQuYisuNS1lKSsiaC0zdiIrZSsiaCIrLWUrInYzaCIrKGUrMykrIlpNIisodC5sLTMuNSkrIiwiKyh0LmIrLjUtZSkrImgzdiIrZSsiaCIrZSsidjNoLSIrKGUrMykrIloifWZ1bmN0aW9uIFkodCxlLHIsbixhKXtmb3IodmFyIG8scyxsLGMsdT0hMSxmPXt9LGg9e30scD0oYXx8e30pLnhhSGFzaCxkPShhfHx7fSkueWFIYXNoLG09MDttPGUubGVuZ3RoO20rKyl7dmFyIGc9ZVttXTtmb3IobyBpbiByKWlmKGdbb10pe2ZvcihsIGluIGcpYSYmKHBbbF18fGRbbF0pfHwoIngiPT09bC5jaGFyQXQoMCk/cjpuKVtsXXx8KGZbbF09byk7Zm9yKHMgaW4gbilhJiYocFtzXXx8ZFtzXSl8fCFnW3NdfHwodT0hMCl9Zm9yKHMgaW4gbilpZihnW3NdKWZvcihjIGluIGcpYSYmKHBbY118fGRbY10pfHwoIngiPT09Yy5jaGFyQXQoMCk/cjpuKVtjXXx8KGhbY109cyl9dSYmKGkuZXh0ZW5kRmxhdChmLGgpLGg9e30pO3ZhciB2PXt9LHk9W107Zm9yKGwgaW4gZil7dmFyIHg9ayh0LGwpO3kucHVzaCh4KSx2W3guX2lkXT14fXZhciBiPXt9LF89W107Zm9yKGMgaW4gaCl7dmFyIHc9ayh0LGMpO18ucHVzaCh3KSxiW3cuX2lkXT13fXJldHVybnt4YUhhc2g6dix5YUhhc2g6Yix4YXhlczp5LHlheGVzOl8seExpbmtzOmYseUxpbmtzOmgsaXNTdWJwbG90Q29uc3RyYWluZWQ6dX19ZnVuY3Rpb24gVyh0LGUpe2lmKHMpe3ZhciByPXZvaWQgMCE9PXQub253aGVlbD8id2hlZWwiOiJtb3VzZXdoZWVsIjt0Ll9vbndoZWVsJiZ0LnJlbW92ZUV2ZW50TGlzdGVuZXIocix0Ll9vbndoZWVsKSx0Ll9vbndoZWVsPWUsdC5hZGRFdmVudExpc3RlbmVyKHIsZSx7cGFzc2l2ZTohMX0pfWVsc2Ugdm9pZCAwIT09dC5vbndoZWVsP3Qub253aGVlbD1lOnZvaWQgMCE9PXQub25tb3VzZXdoZWVsP3Qub25tb3VzZXdoZWVsPWU6dC5pc0FkZGVkV2hlZWxFdmVudHx8KHQuaXNBZGRlZFdoZWVsRXZlbnQ9ITAsdC5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsZSx7cGFzc2l2ZTohMX0pKX1mdW5jdGlvbiBYKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX1lLmV4cG9ydHM9e21ha2VEcmFnQm94OmZ1bmN0aW9uKHQsZSxyLHMsYyxmLG0sdil7dmFyIEksTyxWLFosSixLLFEsJCx0dCxldCxydCxudCxpdCxhdCxvdCxzdCxsdCxjdCx1dCxmdCxodCxwdCxkdCxtdD10Ll9mdWxsTGF5b3V0Ll96b29tbGF5ZXIsZ3Q9bSt2PT09Im5zZXciLHZ0PTE9PT0obSt2KS5sZW5ndGg7ZnVuY3Rpb24geXQoKXtpZihJPWUueGF4aXMsTz1lLnlheGlzLHR0PUkuX2xlbmd0aCxldD1PLl9sZW5ndGgsUT1JLl9vZmZzZXQsJD1PLl9vZmZzZXQsKFY9e30pW0kuX2lkXT1JLChaPXt9KVtPLl9pZF09TyxtJiZ2KWZvcih2YXIgcj1lLm92ZXJsYXlzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXS54YXhpcztWW2kuX2lkXT1pO3ZhciBhPXJbbl0ueWF4aXM7WlthLl9pZF09YX1KPVgoViksSz1YKFopLGl0PUQoSix2KSxhdD1EKEssbSksb3Q9IWF0JiYhaXQsbnQ9WSh0LHQuX2Z1bGxMYXlvdXQuX2F4aXNNYXRjaEdyb3VwcyxWLFopO3ZhciBvPShydD1ZKHQsdC5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMsVixaLG50KSkuaXNTdWJwbG90Q29uc3RyYWluZWR8fG50LmlzU3VicGxvdENvbnN0cmFpbmVkO3N0PXZ8fG8sbHQ9bXx8bzt2YXIgcz10Ll9mdWxsTGF5b3V0O2N0PXMuX2hhcygic2NhdHRlcmdsIiksdXQ9cy5faGFzKCJzcGxvbSIpLGZ0PXMuX2hhcygic3ZnIil9eXQoKTt2YXIgeHQ9ZnVuY3Rpb24odCxlLHIpe2lmKCF0KXJldHVybiJwb2ludGVyIjtpZigibnNldyI9PT10KXJldHVybiByPyIiOiJwYW4iPT09ZT8ibW92ZSI6ImNyb3NzaGFpciI7cmV0dXJuIHQudG9Mb3dlckNhc2UoKSsiLXJlc2l6ZSJ9KGF0K2l0LHQuX2Z1bGxMYXlvdXQuZHJhZ21vZGUsZ3QpLGJ0PXooZSxtK3YrImRyYWciLHh0LHIscyxjLGYpO2lmKG90JiYhZ3QpcmV0dXJuIGJ0Lm9ubW91c2Vkb3duPW51bGwsYnQuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsYnQ7dmFyIF90LHd0LFR0LGt0LEF0LE10LFN0LEV0LEx0LEN0LFB0PXtlbGVtZW50OmJ0LGdkOnQscGxvdGluZm86ZX07ZnVuY3Rpb24gSXQoKXtQdC5wbG90aW5mby5zZWxlY3Rpb249ITEsTSh0KX1mdW5jdGlvbiBPdCh0LHIpe3ZhciBpPVB0LmdkO2lmKGkuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg+PTApaS5fZnVsbExheW91dC5fZGVhY3RpdmF0ZVNoYXBlKGkpO2Vsc2V7dmFyIG89aS5fZnVsbExheW91dC5jbGlja21vZGU7aWYoSChpKSwyIT09dHx8dnR8fHF0KCksZ3Qpby5pbmRleE9mKCJzZWxlY3QiKT4tMSYmUyhyLGksSixLLGUuaWQsUHQpLG8uaW5kZXhPZigiZXZlbnQiKT4tMSYmcC5jbGljayhpLHIsZS5pZCk7ZWxzZSBpZigxPT09dCYmdnQpe3ZhciBzPW0/TzpJLGM9InMiPT09bXx8InciPT09dj8wOjEsZj1zLl9uYW1lKyIucmFuZ2VbIitjKyJdIixoPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10LnJhbmdlW2VdLGk9TWF0aC5hYnMobi10LnJhbmdlWzEtZV0pO3JldHVybiJkYXRlIj09PXQudHlwZT9uOiJsb2ciPT09dC50eXBlPyhyPU1hdGguY2VpbChNYXRoLm1heCgwLC1NYXRoLmxvZyhpKS9NYXRoLkxOMTApKSszLGEoIi4iK3IrImciKShNYXRoLnBvdygxMCxuKSkpOihyPU1hdGguZmxvb3IoTWF0aC5sb2coTWF0aC5hYnMobikpL01hdGguTE4xMCktTWF0aC5mbG9vcihNYXRoLmxvZyhpKS9NYXRoLkxOMTApKzQsYSgiLiIrU3RyaW5nKHIpKyJnIikobikpfShzLGMpLGQ9ImxlZnQiLGc9Im1pZGRsZSI7aWYocy5maXhlZHJhbmdlKXJldHVybjttPyhnPSJuIj09PW0/InRvcCI6ImJvdHRvbSIsInJpZ2h0Ij09PXMuc2lkZSYmKGQ9InJpZ2h0IikpOiJlIj09PXYmJihkPSJyaWdodCIpLGkuX2NvbnRleHQuc2hvd0F4aXNSYW5nZUVudHJ5Qm94ZXMmJm4uc2VsZWN0KGJ0KS5jYWxsKHUubWFrZUVkaXRhYmxlLHtnZDppLGltbWVkaWF0ZTohMCxiYWNrZ3JvdW5kOmkuX2Z1bGxMYXlvdXQucGFwZXJfYmdjb2xvcix0ZXh0OlN0cmluZyhoKSxmaWxsOnMudGlja2ZvbnQ/cy50aWNrZm9udC5jb2xvcjoiIzQ0NCIsaG9yaXpvbnRhbEFsaWduOmQsdmVydGljYWxBbGlnbjpnfSkub24oImVkaXQiLChmdW5jdGlvbih0KXt2YXIgZT1zLmQycih0KTt2b2lkIDAhPT1lJiZsLmNhbGwoIl9ndWlSZWxheW91dCIsaSxmLGUpfSkpfX19ZnVuY3Rpb24genQoZSxyKXtpZih0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXJldHVybiExO3ZhciBuPU1hdGgubWF4KDAsTWF0aC5taW4odHQscHQqZStfdCkpLGk9TWF0aC5tYXgoMCxNYXRoLm1pbihldCxkdCpyK3d0KSksYT1NYXRoLmFicyhuLV90KSxvPU1hdGguYWJzKGktd3QpO2Z1bmN0aW9uIHMoKXtTdD0iIixUdC5yPVR0LmwsVHQudD1UdC5iLEx0LmF0dHIoImQiLCJNMCwwWiIpfWlmKFR0Lmw9TWF0aC5taW4oX3QsbiksVHQucj1NYXRoLm1heChfdCxuKSxUdC50PU1hdGgubWluKHd0LGkpLFR0LmI9TWF0aC5tYXgod3QsaSkscnQuaXNTdWJwbG90Q29uc3RyYWluZWQpYT5QfHxvPlA/KFN0PSJ4eSIsYS90dD5vL2V0PyhvPWEqZXQvdHQsd3Q+aT9UdC50PXd0LW86VHQuYj13dCtvKTooYT1vKnR0L2V0LF90Pm4/VHQubD1fdC1hOlR0LnI9X3QrYSksTHQuYXR0cigiZCIsRyhUdCkpKTpzKCk7ZWxzZSBpZihudC5pc1N1YnBsb3RDb25zdHJhaW5lZClpZihhPlB8fG8+UCl7U3Q9Inh5Ijt2YXIgbD1NYXRoLm1pbihUdC5sL3R0LChldC1UdC5iKS9ldCksYz1NYXRoLm1heChUdC5yL3R0LChldC1UdC50KS9ldCk7VHQubD1sKnR0LFR0LnI9Yyp0dCxUdC5iPSgxLWwpKmV0LFR0LnQ9KDEtYykqZXQsTHQuYXR0cigiZCIsRyhUdCkpfWVsc2UgcygpO2Vsc2UhYXR8fG88TWF0aC5taW4oTWF0aC5tYXgoLjYqYSxDKSxQKT9hPEN8fCFpdD9zKCk6KFR0LnQ9MCxUdC5iPWV0LFN0PSJ4IixMdC5hdHRyKCJkIixmdW5jdGlvbih0LGUpe3JldHVybiJNIisodC5sLS41KSsiLCIrKGUtUC0uNSkrImgtM3YiKygyKlArMSkrImgzWk0iKyh0LnIrLjUpKyIsIisoZS1QLS41KSsiaDN2IisoMipQKzEpKyJoLTNaIn0oVHQsd3QpKSk6IWl0fHxhPE1hdGgubWluKC42Km8sUCk/KFR0Lmw9MCxUdC5yPXR0LFN0PSJ5IixMdC5hdHRyKCJkIixmdW5jdGlvbih0LGUpe3JldHVybiJNIisoZS1QLS41KSsiLCIrKHQudC0uNSkrInYtM2giKygyKlArMSkrInYzWk0iKyhlLVAtLjUpKyIsIisodC5iKy41KSsidjNoIisoMipQKzEpKyJ2LTNaIn0oVHQsX3QpKSk6KFN0PSJ4eSIsTHQuYXR0cigiZCIsRyhUdCkpKTtUdC53PVR0LnItVHQubCxUdC5oPVR0LmItVHQudCxTdCYmKEN0PSEwKSx0Ll9kcmFnZ2VkPUN0LFUoRXQsTHQsVHQsQXQsTXQsa3QpLER0KCksdC5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLGh0KSxNdD0hMH1mdW5jdGlvbiBEdCgpe2h0PXt9LCJ4eSIhPT1TdCYmIngiIT09U3R8fChSKEosVHQubC90dCxUdC5yL3R0LGh0LHJ0LnhheGVzKSxWdCgieCIsaHQpKSwieHkiIT09U3QmJiJ5IiE9PVN0fHwoUihLLChldC1UdC5iKS9ldCwoZXQtVHQudCkvZXQsaHQscnQueWF4ZXMpLFZ0KCJ5IixodCkpfWZ1bmN0aW9uIFJ0KCl7RHQoKSxIKHQpLEd0KCkscSh0KX1QdC5wcmVwRm49ZnVuY3Rpb24oZSxyLG4pe3ZhciBhPVB0LmRyYWdtb2RlLHM9dC5fZnVsbExheW91dC5kcmFnbW9kZTtzIT09YSYmKFB0LmRyYWdtb2RlPXMpLHl0KCkscHQ9dC5fZnVsbExheW91dC5faW52U2NhbGVYLGR0PXQuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWSxvdHx8KGd0P2Uuc2hpZnRLZXk/InBhbiI9PT1zP3M9Inpvb20iOnkocyl8fChzPSJwYW4iKTplLmN0cmxLZXkmJihzPSJwYW4iKTpzPSJwYW4iKSx4KHMpP1B0Lm1pbkRyYWc9MTpQdC5taW5EcmFnPXZvaWQgMCx5KHMpPyhQdC54YXhlcz1KLFB0LnlheGVzPUssQShlLHIsbixQdCxzKSk6KFB0LmNsaWNrRm49T3QseShhKSYmSXQoKSxvdHx8KCJ6b29tIj09PXM/KFB0Lm1vdmVGbj16dCxQdC5kb25lRm49UnQsUHQubWluRHJhZz0xLGZ1bmN0aW9uKGUscixuKXt2YXIgYT1idC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtfdD1yLWEubGVmdCx3dD1uLWEudG9wLHQuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKHQpO3ZhciBzPWkuYXBwbHkzRFRyYW5zZm9ybSh0Ll9mdWxsTGF5b3V0Ll9pbnZUcmFuc2Zvcm0pKF90LHd0KTtfdD1zWzBdLHd0PXNbMV0sVHQ9e2w6X3QscjpfdCx3OjAsdDp3dCxiOnd0LGg6MH0sa3Q9dC5faG1waXhjb3VudD90Ll9obWx1bWNvdW50L3QuX2htcGl4Y291bnQ6byh0Ll9mdWxsTGF5b3V0LnBsb3RfYmdjb2xvcikuZ2V0THVtaW5hbmNlKCksTXQ9ITEsU3Q9Inh5IixDdD0hMSxFdD1OKG10LGt0LFEsJCxBdD0iTTAsMEgiK3R0KyJWIitldCsiSDBWMCIpLEx0PWoobXQsUSwkKX0oMCxyLG4pKToicGFuIj09PXMmJihQdC5tb3ZlRm49VXQsUHQuZG9uZUZuPUd0KSkpLHQuX2Z1bGxMYXlvdXQuX3JlZHJhZz1mdW5jdGlvbigpe3ZhciBlPXQuX2RyYWdkYXRhO2lmKGUmJmUuZWxlbWVudD09PWJ0KXt2YXIgcj10Ll9mdWxsTGF5b3V0LmRyYWdtb2RlO3kocil8fCh5dCgpLFl0KFswLDAsdHQsZXRdKSxQdC5tb3ZlRm4oZS5keCxlLmR5KSl9fX0sZy5pbml0KFB0KTt2YXIgRnQ9WzAsMCx0dCxldF0sQnQ9bnVsbCxOdD1MLlJFRFJBV0RFTEFZLGp0PWUubWFpbnBsb3Q/dC5fZnVsbExheW91dC5fcGxvdHNbZS5tYWlucGxvdF06ZTtmdW5jdGlvbiBVdChlLHIpe2lmKGUqPXB0LHIqPWR0LCF0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXtpZih0Ll9mdWxsTGF5b3V0Ll9yZXBsb3R0aW5nPSEwLCJldyI9PT1pdHx8Im5zIj09PWF0KXt2YXIgbj1pdD8tZTowLGk9YXQ/LXI6MDtpZihudC5pc1N1YnBsb3RDb25zdHJhaW5lZCl7aWYoaXQmJmF0KXt2YXIgYT0oZS90dC1yL2V0KS8yO249LShlPWEqdHQpLGk9LShyPS1hKmV0KX1hdD9uPS1pKnR0L2V0Omk9LW4qZXQvdHR9cmV0dXJuIGl0JiYoRihKLGUpLFZ0KCJ4IikpLGF0JiYoRihLLHIpLFZ0KCJ5IikpLFl0KFtuLGksdHQsZXRdKSxIdCgpLHZvaWQgdC5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLGh0KX12YXIgbyxzLGw9InciPT09aXQ9PSgibiI9PT1hdCk/MTotMTtpZihpdCYmYXQmJihydC5pc1N1YnBsb3RDb25zdHJhaW5lZHx8bnQuaXNTdWJwbG90Q29uc3RyYWluZWQpKXt2YXIgYz0oZS90dCtsKnIvZXQpLzI7ZT1jKnR0LHI9bCpjKmV0fWlmKCJ3Ij09PWl0P2U9cChKLDAsZSk6ImUiPT09aXQ/ZT1wKEosMSwtZSk6aXR8fChlPTApLCJuIj09PWF0P3I9cChLLDEscik6InMiPT09YXQ/cj1wKEssMCwtcik6YXR8fChyPTApLG89InciPT09aXQ/ZTowLHM9Im4iPT09YXQ/cjowLHJ0LmlzU3VicGxvdENvbnN0cmFpbmVkJiYhbnQuaXNTdWJwbG90Q29uc3RyYWluZWR8fG50LmlzU3VicGxvdENvbnN0cmFpbmVkJiZpdCYmYXQmJmw+MCl7dmFyIHU7aWYobnQuaXNTdWJwbG90Q29uc3RyYWluZWR8fCFpdCYmMT09PWF0Lmxlbmd0aCl7Zm9yKHU9MDt1PEoubGVuZ3RoO3UrKylKW3VdLnJhbmdlPUpbdV0uX3Iuc2xpY2UoKSxFKEpbdV0sMS1yL2V0KTtvPShlPXIqdHQvZXQpLzJ9aWYobnQuaXNTdWJwbG90Q29uc3RyYWluZWR8fCFhdCYmMT09PWl0Lmxlbmd0aCl7Zm9yKHU9MDt1PEsubGVuZ3RoO3UrKylLW3VdLnJhbmdlPUtbdV0uX3Iuc2xpY2UoKSxFKEtbdV0sMS1lL3R0KTtzPShyPWUqZXQvdHQpLzJ9fW50LmlzU3VicGxvdENvbnN0cmFpbmVkJiZhdHx8VnQoIngiKSxudC5pc1N1YnBsb3RDb25zdHJhaW5lZCYmaXR8fFZ0KCJ5Iik7dmFyIGY9dHQtZSxoPWV0LXI7IW50LmlzU3VicGxvdENvbnN0cmFpbmVkfHxpdCYmYXR8fChpdD8ocz1vPzA6ZSpldC90dCxoPWYqZXQvdHQpOihvPXM/MDpyKnR0L2V0LGY9aCp0dC9ldCkpLFl0KFtvLHMsZixoXSksSHQoKSx0LmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsaHQpfWZ1bmN0aW9uIHAodCxlLHIpe2Zvcih2YXIgbixpLGE9MS1lLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXTtpZighcy5maXhlZHJhbmdlKXtuPXMsaT1zLl9ybFthXSsocy5fcmxbZV0tcy5fcmxbYV0pL0Ioci9zLl9sZW5ndGgpO3ZhciBsPXMubDJyKGkpOyExIT09bCYmdm9pZCAwIT09bCYmKHMucmFuZ2VbZV09bCl9fXJldHVybiBuLl9sZW5ndGgqKG4uX3JsW2VdLWkpLyhuLl9ybFtlXS1uLl9ybFthXSl9fWZ1bmN0aW9uIFZ0KHQsZSl7Zm9yKHZhciByPW50LmlzU3VicGxvdENvbnN0cmFpbmVkP3t4OksseTpKfVt0XTpudFt0KyJheGVzIl0sbj1udC5pc1N1YnBsb3RDb25zdHJhaW5lZD97eDpKLHk6S31bdF06W10saT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLG89YS5faWQscz1udC54TGlua3Nbb118fG50LnlMaW5rc1tvXSxsPW5bMF18fFZbc118fFpbc107bCYmKGU/KGVbYS5fbmFtZSsiLnJhbmdlWzBdIl09ZVtsLl9uYW1lKyIucmFuZ2VbMF0iXSxlW2EuX25hbWUrIi5yYW5nZVsxXSJdPWVbbC5fbmFtZSsiLnJhbmdlWzFdIl0pOmEucmFuZ2U9bC5yYW5nZS5zbGljZSgpKX19ZnVuY3Rpb24gSHQoKXt2YXIgZSxyPVtdO2Z1bmN0aW9uIG4odCl7Zm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLmZpeGVkcmFuZ2V8fHIucHVzaCh0W2VdLl9pZCl9Zm9yKHN0JiYobihKKSxuKHJ0LnhheGVzKSxuKG50LnhheGVzKSksbHQmJihuKEspLG4ocnQueWF4ZXMpLG4obnQueWF4ZXMpKSxodD17fSxlPTA7ZTxyLmxlbmd0aDtlKyspe3ZhciBpPXJbZV0sYT1rKHQsaSk7ZC5kcmF3T25lKHQsYSx7c2tpcFRpdGxlOiEwfSksaHRbYS5fbmFtZSsiLnJhbmdlWzBdIl09YS5yYW5nZVswXSxodFthLl9uYW1lKyIucmFuZ2VbMV0iXT1hLnJhbmdlWzFdfWQucmVkcmF3Q29tcG9uZW50cyh0LHIpfWZ1bmN0aW9uIHF0KCl7aWYoIXQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pe3ZhciBlPXQuX2NvbnRleHQuZG91YmxlQ2xpY2sscj1bXTtpdCYmKHI9ci5jb25jYXQoSikpLGF0JiYocj1yLmNvbmNhdChLKSksbnQueGF4ZXMmJihyPXIuY29uY2F0KG50LnhheGVzKSksbnQueWF4ZXMmJihyPXIuY29uY2F0KG50LnlheGVzKSk7dmFyIG4saSxhLG89e307aWYoInJlc2V0K2F1dG9zaXplIj09PWUpZm9yKGU9ImF1dG9zaXplIixpPTA7aTxyLmxlbmd0aDtpKyspaWYoKG49cltpXSkuX3JhbmdlSW5pdGlhbCYmKG4ucmFuZ2VbMF0hPT1uLl9yYW5nZUluaXRpYWxbMF18fG4ucmFuZ2VbMV0hPT1uLl9yYW5nZUluaXRpYWxbMV0pfHwhbi5fcmFuZ2VJbml0aWFsJiYhbi5hdXRvcmFuZ2Upe2U9InJlc2V0IjticmVha31pZigiYXV0b3NpemUiPT09ZSlmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKShuPXJbaV0pLmZpeGVkcmFuZ2V8fChvW24uX25hbWUrIi5hdXRvcmFuZ2UiXT0hMCk7ZWxzZSBpZigicmVzZXQiPT09ZSlmb3IoKGl0fHxydC5pc1N1YnBsb3RDb25zdHJhaW5lZCkmJihyPXIuY29uY2F0KHJ0LnhheGVzKSksYXQmJiFydC5pc1N1YnBsb3RDb25zdHJhaW5lZCYmKHI9ci5jb25jYXQocnQueWF4ZXMpKSxydC5pc1N1YnBsb3RDb25zdHJhaW5lZCYmKGl0P2F0fHwocj1yLmNvbmNhdChLKSk6cj1yLmNvbmNhdChKKSksaT0wO2k8ci5sZW5ndGg7aSsrKShuPXJbaV0pLmZpeGVkcmFuZ2V8fChuLl9yYW5nZUluaXRpYWw/KGE9bi5fcmFuZ2VJbml0aWFsLG9bbi5fbmFtZSsiLnJhbmdlWzBdIl09YVswXSxvW24uX25hbWUrIi5yYW5nZVsxXSJdPWFbMV0pOm9bbi5fbmFtZSsiLmF1dG9yYW5nZSJdPSEwKTt0LmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCksbC5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsbyl9fWZ1bmN0aW9uIEd0KCl7WXQoWzAsMCx0dCxldF0pLGkuc3luY09yQXN5bmMoW1QucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe3QuX2Z1bGxMYXlvdXQuX3JlcGxvdHRpbmc9ITEsbC5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsaHQpfV0sdCl9ZnVuY3Rpb24gWXQoZSl7dmFyIHIsbixhLG8scz10Ll9mdWxsTGF5b3V0LGM9cy5fcGxvdHMsdT1zLl9zdWJwbG90cy5jYXJ0ZXNpYW47aWYodXQmJmwuc3VicGxvdHNSZWdpc3RyeS5zcGxvbS5kcmFnKHQpLGN0KWZvcihyPTA7cjx1Lmxlbmd0aDtyKyspaWYoYT0obj1jW3Vbcl1dKS54YXhpcyxvPW4ueWF4aXMsbi5fc2NlbmUpe3ZhciBmPWkuc2ltcGxlTWFwKGEucmFuZ2UsYS5yMmwpLHA9aS5zaW1wbGVNYXAoby5yYW5nZSxvLnIybCk7bi5fc2NlbmUudXBkYXRlKHtyYW5nZTpbZlswXSxwWzBdLGZbMV0scFsxXV19KX1pZigodXR8fGN0KSYmKF8odCksdyh0KSksZnQpe3ZhciBkPWVbMl0vSS5fbGVuZ3RoLGc9ZVszXS9PLl9sZW5ndGg7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKyl7YT0obj1jW3Vbcl1dKS54YXhpcyxvPW4ueWF4aXM7dmFyIHkseCxiLFQsaz0oc3R8fG50LmlzU3VicGxvdENvbnN0cmFpbmVkKSYmIWEuZml4ZWRyYW5nZSYmVlthLl9pZF0sQT0obHR8fG50LmlzU3VicGxvdENvbnN0cmFpbmVkKSYmIW8uZml4ZWRyYW5nZSYmWltvLl9pZF07aWYoaz8oeT1kLGI9dnx8bnQuaXNTdWJwbG90Q29uc3RyYWluZWQ/ZVswXTpadChhLHkpKTpudC54YUhhc2hbYS5faWRdPyh5PWQsYj1lWzBdKmEuX2xlbmd0aC9JLl9sZW5ndGgpOm50LnlhSGFzaFthLl9pZF0/KHk9ZyxiPSJucyI9PT1hdD8tZVsxXSphLl9sZW5ndGgvTy5fbGVuZ3RoOlp0KGEseSx7bjoidG9wIixzOiJib3R0b20ifVthdF0pKTpiPVh0KGEseT1XdChhLGQsZykpLEE/KHg9ZyxUPW18fG50LmlzU3VicGxvdENvbnN0cmFpbmVkP2VbMV06WnQobyx4KSk6bnQueWFIYXNoW28uX2lkXT8oeD1nLFQ9ZVsxXSpvLl9sZW5ndGgvTy5fbGVuZ3RoKTpudC54YUhhc2hbby5faWRdPyh4PWQsVD0iZXciPT09aXQ/LWVbMF0qby5fbGVuZ3RoL0kuX2xlbmd0aDpadChvLHgse2U6InJpZ2h0Iix3OiJsZWZ0In1baXRdKSk6VD1YdChvLHg9V3QobyxkLGcpKSx5fHx4KXt5fHwoeT0xKSx4fHwoeD0xKTt2YXIgTT1hLl9vZmZzZXQtYi95LFM9by5fb2Zmc2V0LVQveDtuLmNsaXBSZWN0LmNhbGwoaC5zZXRUcmFuc2xhdGUsYixUKS5jYWxsKGguc2V0U2NhbGUseSx4KSxuLnBsb3QuY2FsbChoLnNldFRyYW5zbGF0ZSxNLFMpLmNhbGwoaC5zZXRTY2FsZSwxL3ksMS94KSx5PT09bi54U2NhbGVGYWN0b3ImJng9PT1uLnlTY2FsZUZhY3Rvcnx8KGguc2V0UG9pbnRHcm91cFNjYWxlKG4uem9vbVNjYWxlUHRzLHkseCksaC5zZXRUZXh0UG9pbnRzU2NhbGUobi56b29tU2NhbGVUeHQseSx4KSksaC5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzKG4uY2xpcE9uQXhpc0ZhbHNlVHJhY2VzLG4pLG4ueFNjYWxlRmFjdG9yPXksbi55U2NhbGVGYWN0b3I9eH19fX1mdW5jdGlvbiBXdCh0LGUscil7cmV0dXJuIHQuZml4ZWRyYW5nZT8wOnN0JiZydC54YUhhc2hbdC5faWRdP2U6bHQmJihydC5pc1N1YnBsb3RDb25zdHJhaW5lZD9ydC54YUhhc2g6cnQueWFIYXNoKVt0Ll9pZF0/cjowfWZ1bmN0aW9uIFh0KHQsZSl7cmV0dXJuIGU/KHQucmFuZ2U9dC5fci5zbGljZSgpLEUodCxlKSxadCh0LGUpKTowfWZ1bmN0aW9uIFp0KHQsZSxyKXtyZXR1cm4gdC5fbGVuZ3RoKigxLWUpKmJbcnx8dC5jb25zdHJhaW50b3dhcmR8fCJtaWRkbGUiXX1yZXR1cm4gbS5sZW5ndGgqdi5sZW5ndGghPTEmJlcoYnQsKGZ1bmN0aW9uKGUpe2lmKHQuX2NvbnRleHQuX3Njcm9sbFpvb20uY2FydGVzaWFufHx0Ll9mdWxsTGF5b3V0Ll9lbmFibGVzY3JvbGx6b29tKXtpZihJdCgpLHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pcmV0dXJuIGUucHJldmVudERlZmF1bHQoKSx2b2lkIGUuc3RvcFByb3BhZ2F0aW9uKCk7eXQoKSxjbGVhclRpbWVvdXQoQnQpO3ZhciByPS1lLmRlbHRhWTtpZihpc0Zpbml0ZShyKXx8KHI9ZS53aGVlbERlbHRhLzEwKSxpc0Zpbml0ZShyKSl7dmFyIG4sYT1NYXRoLmV4cCgtTWF0aC5taW4oTWF0aC5tYXgociwtMjApLDIwKS8yMDApLG89anQuZHJhZ2xheWVyLnNlbGVjdCgiLm5zZXdkcmFnIikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9KGUuY2xpZW50WC1vLmxlZnQpL28ud2lkdGgsbD0oby5ib3R0b20tZS5jbGllbnRZKS9vLmhlaWdodDtpZihzdCl7Zm9yKHZ8fChzPS41KSxuPTA7bjxKLmxlbmd0aDtuKyspYyhKW25dLHMsYSk7VnQoIngiKSxGdFsyXSo9YSxGdFswXSs9RnRbMl0qcyooMS9hLTEpfWlmKGx0KXtmb3IobXx8KGw9LjUpLG49MDtuPEsubGVuZ3RoO24rKyljKEtbbl0sbCxhKTtWdCgieSIpLEZ0WzNdKj1hLEZ0WzFdKz1GdFszXSooMS1sKSooMS9hLTEpfVl0KEZ0KSxIdCgpLHQuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixodCksQnQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0Ll9mdWxsTGF5b3V0JiYoRnQ9WzAsMCx0dCxldF0sR3QoKSl9KSxOdCksZS5wcmV2ZW50RGVmYXVsdCgpfWVsc2UgaS5sb2coIkRpZCBub3QgZmluZCB3aGVlbCBtb3Rpb24gYXR0cmlidXRlczogIixlKX1mdW5jdGlvbiBjKHQsZSxyKXtpZighdC5maXhlZHJhbmdlKXt2YXIgbj1pLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKSxhPW5bMF0rKG5bMV0tblswXSkqZTt0LnJhbmdlPW4ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdC5sMnIoYSsoZS1hKSpyKX0pKX19fSkpLGJ0fSxtYWtlRHJhZ2dlcjpPLG1ha2VSZWN0RHJhZ2dlcjp6LG1ha2Vab29tYm94Ok4sbWFrZUNvcm5lcnM6aix1cGRhdGVab29tYm94OlUseHlDb3JuZXJzOkcsdHJhbnNpdGlvblpvb21ib3g6VixyZW1vdmVab29tYm94Okgsc2hvd0RvdWJsZUNsaWNrTm90aWZpZXI6cSxhdHRhY2hXaGVlbEV2ZW50SGFuZGxlcjpXfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjY1OCwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIjo2NTcsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NzksIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjc0NCwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyI6NzYwLCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3OTcsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAyLCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyI6ODE3LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi9wbG90cyI6ODkwLCIuL2F4ZXMiOjgyNywiLi9heGlzX2lkcyI6ODMxLCIuL2NvbnN0YW50cyI6ODM0LCIuL3NjYWxlX3pvb20iOjg0NiwiLi9zZWxlY3QiOjg0NywiQHBsb3RseS9kMyI6NTgsImhhcy1wYXNzaXZlLWV2ZW50cyI6NDI2LHRpbnljb2xvcjI6NTcyfV0sODM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxvPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxzPXQoIi4vZHJhZ2JveCIpLm1ha2VEcmFnQm94LGw9dCgiLi9jb25zdGFudHMiKS5EUkFHR0VSU0laRTtyLmluaXRJbnRlcmFjdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZih0Ll9jb250ZXh0LnN0YXRpY1Bsb3Qpbi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuZHJhZyIpLnJlbW92ZSgpO2Vsc2UgaWYoZS5faGFzKCJjYXJ0ZXNpYW4iKXx8ZS5faGFzKCJzcGxvbSIpKXtPYmplY3Qua2V5cyhlLl9wbG90c3x8e30pLnNvcnQoKGZ1bmN0aW9uKHQscil7aWYoKGUuX3Bsb3RzW3RdLm1haW5wbG90JiYhMCk9PT0oZS5fcGxvdHNbcl0ubWFpbnBsb3QmJiEwKSl7dmFyIG49dC5zcGxpdCgieSIpLGk9ci5zcGxpdCgieSIpO3JldHVybiBuWzBdPT09aVswXT9OdW1iZXIoblsxXXx8MSktTnVtYmVyKGlbMV18fDEpOk51bWJlcihuWzBdfHwxKS1OdW1iZXIoaVswXXx8MSl9cmV0dXJuIGUuX3Bsb3RzW3RdLm1haW5wbG90PzE6LTF9KSkuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIG49ZS5fcGxvdHNbcl0sbz1uLnhheGlzLGM9bi55YXhpcztpZighbi5tYWlucGxvdCl7dmFyIHU9cyh0LG4sby5fb2Zmc2V0LGMuX29mZnNldCxvLl9sZW5ndGgsYy5fbGVuZ3RoLCJucyIsImV3Iik7dS5vbm1vdXNlbW92ZT1mdW5jdGlvbihlKXt0Ll9mdWxsTGF5b3V0Ll9yZWhvdmVyPWZ1bmN0aW9uKCl7dC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PT09ciYmdC5fZnVsbExheW91dC5fcGxvdHNbcl0mJmkuaG92ZXIodCxlLHIpfSxpLmhvdmVyKHQsZSxyKSx0Ll9mdWxsTGF5b3V0Ll9sYXN0aG92ZXI9dSx0Ll9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9cn0sdS5vbm1vdXNlb3V0PWZ1bmN0aW9uKGUpe3QuX2RyYWdnaW5nfHwodC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PW51bGwsYS51bmhvdmVyKHQsZSkpfSx0Ll9jb250ZXh0LnNob3dBeGlzRHJhZ0hhbmRsZXMmJihzKHQsbixvLl9vZmZzZXQtbCxjLl9vZmZzZXQtbCxsLGwsIm4iLCJ3Iikscyh0LG4sby5fb2Zmc2V0K28uX2xlbmd0aCxjLl9vZmZzZXQtbCxsLGwsIm4iLCJlIikscyh0LG4sby5fb2Zmc2V0LWwsYy5fb2Zmc2V0K2MuX2xlbmd0aCxsLGwsInMiLCJ3Iikscyh0LG4sby5fb2Zmc2V0K28uX2xlbmd0aCxjLl9vZmZzZXQrYy5fbGVuZ3RoLGwsbCwicyIsImUiKSl9aWYodC5fY29udGV4dC5zaG93QXhpc0RyYWdIYW5kbGVzKXtpZihyPT09by5fbWFpblN1YnBsb3Qpe3ZhciBmPW8uX21haW5MaW5lUG9zaXRpb247InRvcCI9PT1vLnNpZGUmJihmLT1sKSxzKHQsbixvLl9vZmZzZXQrLjEqby5fbGVuZ3RoLGYsLjgqby5fbGVuZ3RoLGwsIiIsImV3Iikscyh0LG4sby5fb2Zmc2V0LGYsLjEqby5fbGVuZ3RoLGwsIiIsInciKSxzKHQsbixvLl9vZmZzZXQrLjkqby5fbGVuZ3RoLGYsLjEqby5fbGVuZ3RoLGwsIiIsImUiKX1pZihyPT09Yy5fbWFpblN1YnBsb3Qpe3ZhciBoPWMuX21haW5MaW5lUG9zaXRpb247InJpZ2h0IiE9PWMuc2lkZSYmKGgtPWwpLHModCxuLGgsYy5fb2Zmc2V0Ky4xKmMuX2xlbmd0aCxsLC44KmMuX2xlbmd0aCwibnMiLCIiKSxzKHQsbixoLGMuX29mZnNldCsuOSpjLl9sZW5ndGgsbCwuMSpjLl9sZW5ndGgsInMiLCIiKSxzKHQsbixoLGMuX29mZnNldCxsLC4xKmMuX2xlbmd0aCwibiIsIiIpfX19KSk7dmFyIG89ZS5faG92ZXJsYXllci5ub2RlKCk7by5vbm1vdXNlbW92ZT1mdW5jdGlvbihyKXtyLnRhcmdldD10Ll9mdWxsTGF5b3V0Ll9sYXN0aG92ZXIsaS5ob3Zlcih0LHIsZS5faG92ZXJzdWJwbG90KX0sby5vbmNsaWNrPWZ1bmN0aW9uKGUpe2UudGFyZ2V0PXQuX2Z1bGxMYXlvdXQuX2xhc3Rob3ZlcixpLmNsaWNrKHQsZSl9LG8ub25tb3VzZWRvd249ZnVuY3Rpb24oZSl7dC5fZnVsbExheW91dC5fbGFzdGhvdmVyLm9ubW91c2Vkb3duKGUpfSxyLnVwZGF0ZUZ4KHQpfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9InBhbiI9PT1lLmRyYWdtb2RlPyJtb3ZlIjoiY3Jvc3NoYWlyIjtvKGUuX2RyYWdnZXJzLHIpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo2NTgsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY3OSwiLi4vLi4vbGliL3NldGN1cnNvciI6Nzk3LCIuL2NvbnN0YW50cyI6ODM0LCIuL2RyYWdib3giOjgzNiwiQHBsb3RseS9kMyI6NTh9XSw4Mzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjbGVhck91dGxpbmVDb250cm9sbGVyczpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll96b29tbGF5ZXI7ZSYmZS5zZWxlY3RBbGwoIi5vdXRsaW5lLWNvbnRyb2xsZXJzIikucmVtb3ZlKCl9LGNsZWFyU2VsZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX3pvb21sYXllcjtlJiZlLnNlbGVjdEFsbCgiLnNlbGVjdC1vdXRsaW5lIikucmVtb3ZlKCksdC5fZnVsbExheW91dC5fZHJhd2luZz0hMX19fSx7fV0sODM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLnN0clRyYW5zbGF0ZTtmdW5jdGlvbiBpKHQsZSl7c3dpdGNoKHQudHlwZSl7Y2FzZSJsb2ciOnJldHVybiB0LnAyZChlKTtjYXNlImRhdGUiOnJldHVybiB0LnAycihlLDAsdC5jYWxlbmRhcik7ZGVmYXVsdDpyZXR1cm4gdC5wMnIoZSl9fWUuZXhwb3J0cz17cDJyOmkscjJwOmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQudHlwZSl7Y2FzZSJsb2ciOnJldHVybiB0LmQycChlKTtjYXNlImRhdGUiOnJldHVybiB0LnIycChlLDAsdC5jYWxlbmRhcik7ZGVmYXVsdDpyZXR1cm4gdC5yMnAoZSl9fSxheFZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPSJ5Ij09PXQuX2lkLmNoYXJBdCgwKT8xOjA7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBpKHQscltlXSl9fSxnZXRUcmFuc2Zvcm06ZnVuY3Rpb24odCl7cmV0dXJuIG4odC54YXhpcy5fb2Zmc2V0LHQueWF4aXMuX29mZnNldCl9fX0seyIuLi8uLi9saWIiOjc3Nn1dLDg0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuL2F4aXNfaWRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBvPWVbdF07aWYoQXJyYXkuaXNBcnJheShvKSlmb3IodmFyIHM9bi5zdWJwbG90c1JlZ2lzdHJ5LmNhcnRlc2lhbixsPXMuaWRSZWdleCxjPXIuX3N1YnBsb3RzLHU9Yy54YXhpcyxmPWMueWF4aXMsaD1jLmNhcnRlc2lhbixwPXIuX2hhcygiY2FydGVzaWFuIil8fHIuX2hhcygiZ2wyZCIpLGQ9MDtkPG8ubGVuZ3RoO2QrKyl7dmFyIG09b1tkXTtpZihpLmlzUGxhaW5PYmplY3QobSkpe3ZhciBnPWEuY2xlYW5JZChtLnhyZWYsIngiLCExKSx2PWEuY2xlYW5JZChtLnlyZWYsInkiLCExKSx5PWwueC50ZXN0KGcpLHg9bC55LnRlc3Qodik7aWYoeXx8eCl7cHx8aS5wdXNoVW5pcXVlKHIuX2Jhc2VQbG90TW9kdWxlcyxzKTt2YXIgYj0hMTt5JiYtMT09PXUuaW5kZXhPZihnKSYmKHUucHVzaChnKSxiPSEwKSx4JiYtMT09PWYuaW5kZXhPZih2KSYmKGYucHVzaCh2KSxiPSEwKSxiJiZ5JiZ4JiZoLnB1c2goZyt2KX19fX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2F4aXNfaWRzIjo4MzF9XSw4NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vcGxvdHMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9dCgiLi4vZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxjPXQoIi4vYXhpc19pZHMiKSx1PXQoIi4vY29uc3RhbnRzIiksZj10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLGg9YS5lbnN1cmVTaW5nbGU7ZnVuY3Rpb24gcCh0LGUscil7cmV0dXJuIGEuZW5zdXJlU2luZ2xlKHQsZSxyLChmdW5jdGlvbih0KXt0LmRhdHVtKHIpfSkpfWZ1bmN0aW9uIGQodCxlLHIsYSxvKXtmb3IodmFyIGMsZixoLHA9dS50cmFjZUxheWVyQ2xhc3NlcyxkPXQuX2Z1bGxMYXlvdXQsbT1kLl9tb2R1bGVzLGc9W10sdj1bXSx5PTA7eTxtLmxlbmd0aDt5Kyspe3ZhciB4PShjPW1beV0pLm5hbWUsYj1pLm1vZHVsZXNbeF0uY2F0ZWdvcmllcztpZihiLnN2Zyl7dmFyIF89Yy5sYXllck5hbWV8fHgrImxheWVyIix3PWMucGxvdDtoPShmPWwocix3KSlbMF0scj1mWzFdLGgubGVuZ3RoJiZnLnB1c2goe2k6cC5pbmRleE9mKF8pLGNsYXNzTmFtZTpfLHBsb3RNZXRob2Q6dyxjZE1vZHVsZTpofSksYi56b29tU2NhbGUmJnYucHVzaCgiLiIrXyl9fWcuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pLWUuaX0pKTt2YXIgVD1lLnBsb3Quc2VsZWN0QWxsKCJnLm1sYXllciIpLmRhdGEoZywoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xhc3NOYW1lfSkpO2lmKFQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsYXNzTmFtZX0pKS5jbGFzc2VkKCJtbGF5ZXIiLCEwKS5jbGFzc2VkKCJyYW5nZXBsb3QiLGUuaXNSYW5nZVBsb3QpLFQuZXhpdCgpLnJlbW92ZSgpLFQub3JkZXIoKSxULmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGw9ci5jbGFzc05hbWU7ci5wbG90TWV0aG9kKHQsZSxyLmNkTW9kdWxlLGksYSxvKSwtMT09PXUuY2xpcE9uQXhpc0ZhbHNlUXVlcnkuaW5kZXhPZigiLiIrbCkmJnMuc2V0Q2xpcFVybChpLGUubGF5ZXJDbGlwSWQsdCl9KSksZC5faGFzKCJzY2F0dGVyZ2wiKSYmKGM9aS5nZXRNb2R1bGUoInNjYXR0ZXJnbCIpLGg9bChyLGMpWzBdLGMucGxvdCh0LGUsaCkpLCF0Ll9jb250ZXh0LnN0YXRpY1Bsb3QmJihlLl9oYXNDbGlwT25BeGlzRmFsc2UmJihlLmNsaXBPbkF4aXNGYWxzZVRyYWNlcz1lLnBsb3Quc2VsZWN0QWxsKHUuY2xpcE9uQXhpc0ZhbHNlUXVlcnkuam9pbigiLCIpKS5zZWxlY3RBbGwoIi50cmFjZSIpKSx2Lmxlbmd0aCkpe3ZhciBrPWUucGxvdC5zZWxlY3RBbGwodi5qb2luKCIsIikpLnNlbGVjdEFsbCgiLnRyYWNlIik7ZS56b29tU2NhbGVQdHM9ay5zZWxlY3RBbGwoInBhdGgucG9pbnQiKSxlLnpvb21TY2FsZVR4dD1rLnNlbGVjdEFsbCgiLnRleHRwb2ludCIpfX1mdW5jdGlvbiBtKHQsZSl7dmFyIHI9ZS5wbG90Z3JvdXAsbj1lLmlkLGk9dS5sYXllclZhbHVlMmxheWVyQ2xhc3NbZS54YXhpcy5sYXllcl0sYT11LmxheWVyVmFsdWUybGF5ZXJDbGFzc1tlLnlheGlzLmxheWVyXSxvPXQuX2Z1bGxMYXlvdXQuX2hhc09ubHlMYXJnZVNwbG9tcztpZihlLm1haW5wbG90KXt2YXIgcz1lLm1haW5wbG90aW5mbyxsPXMucGxvdGdyb3VwLGY9bisiLXgiLGQ9bisiLXkiO2UuZ3JpZGxheWVyPXMuZ3JpZGxheWVyLGUuemVyb2xpbmVsYXllcj1zLnplcm9saW5lbGF5ZXIsaChzLm92ZXJsaW5lc0JlbG93LCJwYXRoIixmKSxoKHMub3ZlcmxpbmVzQmVsb3csInBhdGgiLGQpLGgocy5vdmVyYXhlc0JlbG93LCJnIixmKSxoKHMub3ZlcmF4ZXNCZWxvdywiZyIsZCksZS5wbG90PWgocy5vdmVycGxvdCwiZyIsbiksaChzLm92ZXJsaW5lc0Fib3ZlLCJwYXRoIixmKSxoKHMub3ZlcmxpbmVzQWJvdmUsInBhdGgiLGQpLGgocy5vdmVyYXhlc0Fib3ZlLCJnIixmKSxoKHMub3ZlcmF4ZXNBYm92ZSwiZyIsZCksZS54bGluZXM9bC5zZWxlY3QoIi5vdmVybGluZXMtIitpKS5zZWxlY3QoIi4iK2YpLGUueWxpbmVzPWwuc2VsZWN0KCIub3ZlcmxpbmVzLSIrYSkuc2VsZWN0KCIuIitkKSxlLnhheGlzbGF5ZXI9bC5zZWxlY3QoIi5vdmVyYXhlcy0iK2kpLnNlbGVjdCgiLiIrZiksZS55YXhpc2xheWVyPWwuc2VsZWN0KCIub3ZlcmF4ZXMtIithKS5zZWxlY3QoIi4iK2QpfWVsc2UgaWYobyllLnhsaW5lcz1oKHIsInBhdGgiLCJ4bGluZXMtYWJvdmUiKSxlLnlsaW5lcz1oKHIsInBhdGgiLCJ5bGluZXMtYWJvdmUiKSxlLnhheGlzbGF5ZXI9aChyLCJnIiwieGF4aXNsYXllci1hYm92ZSIpLGUueWF4aXNsYXllcj1oKHIsImciLCJ5YXhpc2xheWVyLWFib3ZlIik7ZWxzZXt2YXIgbT1oKHIsImciLCJsYXllci1zdWJwbG90Iik7ZS5zaGFwZWxheWVyPWgobSwiZyIsInNoYXBlbGF5ZXIiKSxlLmltYWdlbGF5ZXI9aChtLCJnIiwiaW1hZ2VsYXllciIpLGUuZ3JpZGxheWVyPWgociwiZyIsImdyaWRsYXllciIpLGUuemVyb2xpbmVsYXllcj1oKHIsImciLCJ6ZXJvbGluZWxheWVyIiksaChyLCJwYXRoIiwieGxpbmVzLWJlbG93IiksaChyLCJwYXRoIiwieWxpbmVzLWJlbG93IiksZS5vdmVybGluZXNCZWxvdz1oKHIsImciLCJvdmVybGluZXMtYmVsb3ciKSxoKHIsImciLCJ4YXhpc2xheWVyLWJlbG93IiksaChyLCJnIiwieWF4aXNsYXllci1iZWxvdyIpLGUub3ZlcmF4ZXNCZWxvdz1oKHIsImciLCJvdmVyYXhlcy1iZWxvdyIpLGUucGxvdD1oKHIsImciLCJwbG90IiksZS5vdmVycGxvdD1oKHIsImciLCJvdmVycGxvdCIpLGUueGxpbmVzPWgociwicGF0aCIsInhsaW5lcy1hYm92ZSIpLGUueWxpbmVzPWgociwicGF0aCIsInlsaW5lcy1hYm92ZSIpLGUub3ZlcmxpbmVzQWJvdmU9aChyLCJnIiwib3ZlcmxpbmVzLWFib3ZlIiksaChyLCJnIiwieGF4aXNsYXllci1hYm92ZSIpLGgociwiZyIsInlheGlzbGF5ZXItYWJvdmUiKSxlLm92ZXJheGVzQWJvdmU9aChyLCJnIiwib3ZlcmF4ZXMtYWJvdmUiKSxlLnhsaW5lcz1yLnNlbGVjdCgiLnhsaW5lcy0iK2kpLGUueWxpbmVzPXIuc2VsZWN0KCIueWxpbmVzLSIrYSksZS54YXhpc2xheWVyPXIuc2VsZWN0KCIueGF4aXNsYXllci0iK2kpLGUueWF4aXNsYXllcj1yLnNlbGVjdCgiLnlheGlzbGF5ZXItIithKX1vfHwocChlLmdyaWRsYXllciwiZyIsZS54YXhpcy5faWQpLHAoZS5ncmlkbGF5ZXIsImciLGUueWF4aXMuX2lkKSxlLmdyaWRsYXllci5zZWxlY3RBbGwoImciKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkpLnNvcnQoYy5pZFNvcnQpKSxlLnhsaW5lcy5zdHlsZSgiZmlsbCIsIm5vbmUiKS5jbGFzc2VkKCJjcmlzcCIsITApLGUueWxpbmVzLnN0eWxlKCJmaWxsIiwibm9uZSIpLmNsYXNzZWQoImNyaXNwIiwhMCl9ZnVuY3Rpb24gZyh0LGUpe2lmKHQpe3ZhciByPXt9O2Zvcih2YXIgaSBpbiB0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPXRbMF07bi5zZWxlY3QodGhpcykucmVtb3ZlKCksdihpLGUpLHJbaV09ITB9KSksZS5fcGxvdHMpZm9yKHZhciBhPWUuX3Bsb3RzW2ldLm92ZXJsYXlzfHxbXSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107cltzLmlkXSYmcy5wbG90LnNlbGVjdEFsbCgiLnRyYWNlIikucmVtb3ZlKCl9fX1mdW5jdGlvbiB2KHQsZSl7ZS5fZHJhZ2dlcnMuc2VsZWN0QWxsKCJnLiIrdCkucmVtb3ZlKCksZS5fZGVmcy5zZWxlY3QoIiNjbGlwIitlLl91aWQrdCsicGxvdCIpLnJlbW92ZSgpfXIubmFtZT0iY2FydGVzaWFuIixyLmF0dHI9WyJ4YXhpcyIsInlheGlzIl0sci5pZFJvb3Q9WyJ4IiwieSJdLHIuaWRSZWdleD11LmlkUmVnZXgsci5hdHRyUmVnZXg9dS5hdHRyUmVnZXgsci5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLHIubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dF9kZWZhdWx0cyIpLHIudHJhbnNpdGlvbkF4ZXM9dCgiLi90cmFuc2l0aW9uX2F4ZXMiKSxyLmZpbmFsaXplU3VicGxvdHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksbz1lLl9zdWJwbG90cyxzPW8ueGF4aXMsbD1vLnlheGlzLGY9by5jYXJ0ZXNpYW4saD1mLmNvbmNhdChvLmdsMmR8fFtdKSxwPXt9LGQ9e307Zm9yKHI9MDtyPGgubGVuZ3RoO3IrKyl7dmFyIG09aFtyXS5zcGxpdCgieSIpO3BbbVswXV09MSxkWyJ5IittWzFdXT0xfWZvcihyPTA7cjxzLmxlbmd0aDtyKyspcFtuPXNbcl1dfHwoaT0odFtjLmlkMm5hbWUobildfHx7fSkuYW5jaG9yLHUuaWRSZWdleC55LnRlc3QoaSl8fChpPSJ5IiksZi5wdXNoKG4raSksaC5wdXNoKG4raSksZFtpXXx8KGRbaV09MSxhLnB1c2hVbmlxdWUobCxpKSkpO2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspZFtpPWxbcl1dfHwobj0odFtjLmlkMm5hbWUoaSldfHx7fSkuYW5jaG9yLHUuaWRSZWdleC54LnRlc3Qobil8fChuPSJ4IiksZi5wdXNoKG4raSksaC5wdXNoKG4raSkscFtuXXx8KHBbbl09MSxhLnB1c2hVbmlxdWUocyxuKSkpO2lmKCFoLmxlbmd0aCl7Zm9yKHZhciBnIGluIG49IiIsaT0iIix0KXtpZih1LmF0dHJSZWdleC50ZXN0KGcpKSJ4Ij09PWcuY2hhckF0KDApPyghbnx8K2cuc3Vic3RyKDUpPCtuLnN1YnN0cig1KSkmJihuPWcpOighaXx8K2cuc3Vic3RyKDUpPCtpLnN1YnN0cig1KSkmJihpPWcpfW49bj9jLm5hbWUyaWQobik6IngiLGk9aT9jLm5hbWUyaWQoaSk6InkiLHMucHVzaChuKSxsLnB1c2goaSksZi5wdXNoKG4raSl9fSxyLnBsb3Q9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT10Ll9mdWxsTGF5b3V0LG89YS5fc3VicGxvdHMuY2FydGVzaWFuLHM9dC5jYWxjZGF0YTtpZighQXJyYXkuaXNBcnJheShlKSlmb3IoZT1bXSxpPTA7aTxzLmxlbmd0aDtpKyspZS5wdXNoKGkpO2ZvcihpPTA7aTxvLmxlbmd0aDtpKyspe2Zvcih2YXIgbCxjPW9baV0sdT1hLl9wbG90c1tjXSxmPVtdLGg9MDtoPHMubGVuZ3RoO2grKyl7dmFyIHA9c1toXSxtPXBbMF0udHJhY2U7bS54YXhpcyttLnlheGlzPT09YyYmKCgtMSE9PWUuaW5kZXhPZihtLmluZGV4KXx8bS5jYXJwZXQpJiYobCYmbFswXS50cmFjZS54YXhpcytsWzBdLnRyYWNlLnlheGlzPT09YyYmLTEhPT1bInRvbmV4dHgiLCJ0b25leHR5IiwidG9uZXh0Il0uaW5kZXhPZihtLmZpbGwpJiYtMT09PWYuaW5kZXhPZihsKSYmZi5wdXNoKGwpLGYucHVzaChwKSksbD1wKX1kKHQsdSxmLHIsbil9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPW4uX3Bsb3RzfHx7fSxsPWUuX3Bsb3RzfHx7fSx1PW4uX3N1YnBsb3RzfHx7fTtpZihuLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJiFlLl9oYXNPbmx5TGFyZ2VTcGxvbXMpZm9yKG8gaW4gcykoaT1zW29dKS5wbG90Z3JvdXAmJmkucGxvdGdyb3VwLnJlbW92ZSgpO3ZhciBmPW4uX2hhcyYmbi5faGFzKCJnbCIpLGg9ZS5faGFzJiZlLl9oYXMoImdsIik7aWYoZiYmIWgpZm9yKG8gaW4gcykoaT1zW29dKS5fc2NlbmUmJmkuX3NjZW5lLmRlc3Ryb3koKTtpZih1LnhheGlzJiZ1LnlheGlzKXt2YXIgcD1jLmxpc3RJZHMoe19mdWxsTGF5b3V0Om59KTtmb3IoYT0wO2E8cC5sZW5ndGg7YSsrKXt2YXIgZD1wW2FdO2VbYy5pZDJuYW1lKGQpXXx8bi5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmctIitkKyJ0aXRsZSIpLnJlbW92ZSgpfX12YXIgbT1uLl9oYXMmJm4uX2hhcygiY2FydGVzaWFuIikseT1lLl9oYXMmJmUuX2hhcygiY2FydGVzaWFuIik7aWYobSYmIXkpZyhuLl9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoIi5zdWJwbG90Iiksbiksbi5fZGVmcy5zZWxlY3RBbGwoIi5heGVzY2xpcCIpLnJlbW92ZSgpLGRlbGV0ZSBuLl9heGlzQ29uc3RyYWludEdyb3VwcyxkZWxldGUgbi5fYXhpc01hdGNoR3JvdXBzO2Vsc2UgaWYodS5jYXJ0ZXNpYW4pZm9yKGE9MDthPHUuY2FydGVzaWFuLmxlbmd0aDthKyspe3ZhciB4PXUuY2FydGVzaWFuW2FdO2lmKCFsW3hdKXt2YXIgYj0iLiIreCsiLC4iK3grIi14LC4iK3grIi15IjtuLl9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoYikucmVtb3ZlKCksdih4LG4pfX19LHIuZHJhd0ZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHM9dC5fZnVsbExheW91dCxsPXMuX3N1YnBsb3RzLmNhcnRlc2lhbixjPWwubGVuZ3RoLHU9W10sZj1bXTtmb3IoZT0wO2U8YztlKyspe249bFtlXSxpPXMuX3Bsb3RzW25dLGE9aS54YXhpcyxvPWkueWF4aXM7dmFyIGg9YS5fbWFpbkF4aXMscD1vLl9tYWluQXhpcyxkPWguX2lkK3AuX2lkLG09cy5fcGxvdHNbZF07aS5vdmVybGF5cz1bXSxkIT09biYmbT8oaS5tYWlucGxvdD1kLGkubWFpbnBsb3RpbmZvPW0sZi5wdXNoKG4pKTooaS5tYWlucGxvdD12b2lkIDAsaS5tYWlucGxvdGluZm89dm9pZCAwLHUucHVzaChuKSl9Zm9yKGU9MDtlPGYubGVuZ3RoO2UrKyluPWZbZV0sKGk9cy5fcGxvdHNbbl0pLm1haW5wbG90aW5mby5vdmVybGF5cy5wdXNoKGkpO3ZhciBnPXUuY29uY2F0KGYpLHY9bmV3IEFycmF5KGMpO2ZvcihlPTA7ZTxjO2UrKyl7bj1nW2VdLGk9cy5fcGxvdHNbbl0sYT1pLnhheGlzLG89aS55YXhpczt2YXIgeT1bbixhLmxheWVyLG8ubGF5ZXIsYS5vdmVybGF5aW5nfHwiIixvLm92ZXJsYXlpbmd8fCIiXTtmb3Iocj0wO3I8aS5vdmVybGF5cy5sZW5ndGg7cisrKXkucHVzaChpLm92ZXJsYXlzW3JdLmlkKTt2W2VdPXl9cmV0dXJuIHZ9KHQpLGk9ZS5fY2FydGVzaWFubGF5ZXIuc2VsZWN0QWxsKCIuc3VicGxvdCIpLmRhdGEocixTdHJpbmcpO2kuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJzdWJwbG90ICIrdFswXX0pKSxpLm9yZGVyKCksaS5leGl0KCkuY2FsbChnLGUpLGkuZWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9clswXSxhPWUuX3Bsb3RzW2ldO2EucGxvdGdyb3VwPW4uc2VsZWN0KHRoaXMpLG0odCxhKSxhLmRyYWdsYXllcj1oKGUuX2RyYWdnZXJzLCJnIixpKX0pKX0sci5yYW5nZVBsb3Q9ZnVuY3Rpb24odCxlLHIpe20odCxlKSxkKHQsZSxyKSxvLnN0eWxlKHQpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2dsaW1hZ2VzLHI9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpO3IuZmlsdGVyKChmdW5jdGlvbih0LGUpe3JldHVybiBlPT09ci5zaXplKCktMX0pKS5zZWxlY3RBbGwoIi5nbC1jYW52YXMtY29udGV4dCwgLmdsLWNhbnZhcy1mb2N1cyIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b0RhdGFVUkwoImltYWdlL3BuZyIpO2UuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpmLnN2ZywieGxpbms6aHJlZiI6dCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIix4OjAseTowLHdpZHRoOnRoaXMuc3R5bGUud2lkdGgsaGVpZ2h0OnRoaXMuc3R5bGUuaGVpZ2h0fSl9KSl9LHIudXBkYXRlRng9dCgiLi9ncmFwaF9pbnRlcmFjdCIpLnVwZGF0ZUZ4fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzUzLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vZ2V0X2RhdGEiOjg2NCwiLi4vcGxvdHMiOjg5MCwiLi9hdHRyaWJ1dGVzIjo4MjUsIi4vYXhpc19pZHMiOjgzMSwiLi9jb25zdGFudHMiOjgzNCwiLi9ncmFwaF9pbnRlcmFjdCI6ODM3LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDIsIi4vbGF5b3V0X2RlZmF1bHRzIjo4NDMsIi4vdHJhbnNpdGlvbl9heGVzIjo4NTIsIkBwbG90bHkvZDMiOjU4fV0sODQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxzPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuZGVzY3JpcHRpb25XaXRoRGF0ZXMsYz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuT05FREFZLHU9dCgiLi9jb25zdGFudHMiKSxmPXUuSE9VUl9QQVRURVJOLGg9dS5XRUVLREFZX1BBVFRFUk47ZS5leHBvcnRzPXt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToicGxvdCJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJ0aWNrcyJ9LGZvbnQ6bih7ZWRpdFR5cGU6InRpY2tzIn0pLHN0YW5kb2ZmOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJ0aWNrcyJ9LGVkaXRUeXBlOiJ0aWNrcyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIi0iLCJsaW5lYXIiLCJsb2ciLCJkYXRlIiwiY2F0ZWdvcnkiLCJtdWx0aWNhdGVnb3J5Il0sZGZsdDoiLSIsZWRpdFR5cGU6ImNhbGMiLF9ub1RlbXBsYXRpbmc6ITB9LGF1dG90eXBlbnVtYmVyczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY29udmVydCB0eXBlcyIsInN0cmljdCJdLGRmbHQ6ImNvbnZlcnQgdHlwZXMiLGVkaXRUeXBlOiJjYWxjIn0sYXV0b3JhbmdlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCExLCJyZXZlcnNlZCJdLGRmbHQ6ITAsZWRpdFR5cGU6ImF4cmFuZ2UiLGltcGxpZWRFZGl0czp7InJhbmdlWzBdIjp2b2lkIDAsInJhbmdlWzFdIjp2b2lkIDB9fSxyYW5nZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vcm1hbCIsInRvemVybyIsIm5vbm5lZ2F0aXZlIl0sZGZsdDoibm9ybWFsIixlZGl0VHlwZToicGxvdCJ9LHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImF4cmFuZ2UiLGltcGxpZWRFZGl0czp7Il5hdXRvcmFuZ2UiOiExfSxhbmltOiEwfSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiYXhyYW5nZSIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9LGFuaW06ITB9XSxlZGl0VHlwZToiYXhyYW5nZSIsaW1wbGllZEVkaXRzOnthdXRvcmFuZ2U6ITF9LGFuaW06ITB9LGZpeGVkcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxzY2FsZWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlt1LmlkUmVnZXgueC50b1N0cmluZygpLHUuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJwbG90In0sc2NhbGVyYXRpbzp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InBsb3QifSxjb25zdHJhaW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJhbmdlIiwiZG9tYWluIl0sZWRpdFR5cGU6InBsb3QifSxjb25zdHJhaW50b3dhcmQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGVkaXRUeXBlOiJwbG90In0sbWF0Y2hlczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlt1LmlkUmVnZXgueC50b1N0cmluZygpLHUuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2VicmVha3M6cygicmFuZ2VicmVhayIse2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxib3VuZHM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn1dLGVkaXRUeXBlOiJjYWxjIn0scGF0dGVybjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltoLGYsIiJdLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGVkaXRUeXBlOiJjYWxjIixpdGVtczp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9fSxkdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLG1pbjowLGRmbHQ6Y30sZWRpdFR5cGU6ImNhbGMifSksdGlja21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsaW5lYXIiLCJhcnJheSJdLGVkaXRUeXBlOiJ0aWNrcyIsaW1wbGllZEVkaXRzOnt0aWNrMDp2b2lkIDAsZHRpY2s6dm9pZCAwfX0sbnRpY2tzOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InRpY2tzIn0sdGljazA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIixpbXBsaWVkRWRpdHM6e3RpY2ttb2RlOiJsaW5lYXIifX0sZHRpY2s6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIixpbXBsaWVkRWRpdHM6e3RpY2ttb2RlOiJsaW5lYXIifX0sdGlja3ZhbHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2t0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToidGlja3MifSx0aWNrczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsib3V0c2lkZSIsImluc2lkZSIsIiJdLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tzb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxhYmVscyIsImJvdW5kYXJpZXMiXSxkZmx0OiJsYWJlbHMiLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tsYWJlbG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluc3RhbnQiLCJwZXJpb2QiXSxkZmx0OiJpbnN0YW50IixlZGl0VHlwZToidGlja3MifSx0aWNrbGFiZWxwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsib3V0c2lkZSIsImluc2lkZSIsIm91dHNpZGUgdG9wIiwiaW5zaWRlIHRvcCIsIm91dHNpZGUgbGVmdCIsImluc2lkZSBsZWZ0Iiwib3V0c2lkZSByaWdodCIsImluc2lkZSByaWdodCIsIm91dHNpZGUgYm90dG9tIiwiaW5zaWRlIGJvdHRvbSJdLGRmbHQ6Im91dHNpZGUiLGVkaXRUeXBlOiJjYWxjIn0sdGlja2xhYmVsb3ZlcmZsb3c6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbG93IiwiaGlkZSBwYXN0IGRpdiIsImhpZGUgcGFzdCBkb21haW4iXSxlZGl0VHlwZToiY2FsYyJ9LG1pcnJvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwidGlja3MiLCExLCJhbGwiLCJhbGx0aWNrcyJdLGRmbHQ6ITEsZWRpdFR5cGU6InRpY2tzK2xheW91dHN0eWxlIn0sdGlja2xlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjUsZWRpdFR5cGU6InRpY2tzIn0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToidGlja3MifSx0aWNrY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6InRpY2tzIn0sc2hvd3RpY2tsYWJlbHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InRpY2tzIn0sYXV0b21hcmdpbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToidGlja3MifSxzaG93c3Bpa2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJtb2RlYmFyIn0sc3Bpa2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bnVsbCxlZGl0VHlwZToibm9uZSJ9LHNwaWtldGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MyxlZGl0VHlwZToibm9uZSJ9LHNwaWtlZGFzaDpvKHt9LGEse2RmbHQ6ImRhc2giLGVkaXRUeXBlOiJub25lIn0pLHNwaWtlbW9kZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsidG9heGlzIiwiYWNyb3NzIiwibWFya2VyIl0sZGZsdDoidG9heGlzIixlZGl0VHlwZToibm9uZSJ9LHNwaWtlc25hcDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZGF0YSIsImN1cnNvciIsImhvdmVyZWQgZGF0YSJdLGRmbHQ6ImhvdmVyZWQgZGF0YSIsZWRpdFR5cGU6Im5vbmUifSx0aWNrZm9udDpuKHtlZGl0VHlwZToidGlja3MifSksdGlja2FuZ2xlOnt2YWxUeXBlOiJhbmdsZSIsZGZsdDoiYXV0byIsZWRpdFR5cGU6InRpY2tzIn0sdGlja3ByZWZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3d0aWNrcHJlZml4Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToidGlja3MifSx0aWNrc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InRpY2tzIn0sc2hvd3RpY2tzdWZmaXg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3dleHBvbmVudDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6InRpY2tzIn0sZXhwb25lbnRmb3JtYXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vbmUiLCJlIiwiRSIsInBvd2VyIiwiU0kiLCJCIl0sZGZsdDoiQiIsZWRpdFR5cGU6InRpY2tzIn0sbWluZXhwb25lbnQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDozLG1pbjowLGVkaXRUeXBlOiJ0aWNrcyJ9LHNlcGFyYXRldGhvdXNhbmRzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToidGlja3MiLGRlc2NyaXB0aW9uOmwoInRpY2sgbGFiZWwiKX0sdGlja2Zvcm1hdHN0b3BzOnMoInRpY2tmb3JtYXRzdG9wIix7ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToidGlja3MifSxkdGlja3JhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIn0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIn1dLGVkaXRUeXBlOiJ0aWNrcyJ9LHZhbHVlOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InRpY2tzIn0sZWRpdFR5cGU6InRpY2tzIn0pLGhvdmVyZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6Im5vbmUiLGRlc2NyaXB0aW9uOmwoImhvdmVyIHRleHQiKX0sc2hvd2xpbmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InRpY2tzK2xheW91dHN0eWxlIn0sbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LGxpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InRpY2tzK2xheW91dHN0eWxlIn0sc2hvd2dyaWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJ0aWNrcyJ9LGdyaWRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5saWdodExpbmUsZWRpdFR5cGU6InRpY2tzIn0sZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToidGlja3MifSx6ZXJvbGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InRpY2tzIn0semVyb2xpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToidGlja3MifSx6ZXJvbGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToidGlja3MifSxzaG93ZGl2aWRlcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InRpY2tzIn0sZGl2aWRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LGRpdmlkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6InRpY2tzIn0sYW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmVlIix1LmlkUmVnZXgueC50b1N0cmluZygpLHUuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJwbG90In0sc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Il0sZWRpdFR5cGU6InBsb3QifSxvdmVybGF5aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmVlIix1LmlkUmVnZXgueC50b1N0cmluZygpLHUuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJwbG90In0sbGF5ZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFib3ZlIHRyYWNlcyIsImJlbG93IHRyYWNlcyJdLGRmbHQ6ImFib3ZlIHRyYWNlcyIsZWRpdFR5cGU6InBsb3QifSxkb21haW46e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToicGxvdCJ9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJwbG90In1dLGRmbHQ6WzAsMV0sZWRpdFR5cGU6InBsb3QifSxwb3NpdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxjYXRlZ29yeW9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0cmFjZSIsImNhdGVnb3J5IGFzY2VuZGluZyIsImNhdGVnb3J5IGRlc2NlbmRpbmciLCJhcnJheSIsInRvdGFsIGFzY2VuZGluZyIsInRvdGFsIGRlc2NlbmRpbmciLCJtaW4gYXNjZW5kaW5nIiwibWluIGRlc2NlbmRpbmciLCJtYXggYXNjZW5kaW5nIiwibWF4IGRlc2NlbmRpbmciLCJzdW0gYXNjZW5kaW5nIiwic3VtIGRlc2NlbmRpbmciLCJtZWFuIGFzY2VuZGluZyIsIm1lYW4gZGVzY2VuZGluZyIsIm1lZGlhbiBhc2NlbmRpbmciLCJtZWRpYW4gZGVzY2VuZGluZyJdLGRmbHQ6InRyYWNlIixlZGl0VHlwZToiY2FsYyJ9LGNhdGVnb3J5YXJyYXk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJjYWxjIixfZGVwcmVjYXRlZDp7YXV0b3RpY2s6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpdGxlOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpdGxlZm9udDpuKHtlZGl0VHlwZToidGlja3MifSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYzOCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjY2MCwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vZm9udF9hdHRyaWJ1dGVzIjo4NTYsIi4vY29uc3RhbnRzIjo4MzR9XSw4NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5pc1VuaWZpZWRIb3ZlcixvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJtb2RlX2RlZmF1bHRzIikscz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbD10KCIuLi9sYXlvdXRfYXR0cmlidXRlcyIpLGM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHU9dCgiLi90eXBlX2RlZmF1bHRzIiksZj10KCIuL2F4aXNfZGVmYXVsdHMiKSxoPXQoIi4vY29uc3RyYWludHMiKSxwPXQoIi4vcG9zaXRpb25fZGVmYXVsdHMiKSxkPXQoIi4vYXhpc19pZHMiKSxtPWQuaWQybmFtZSxnPWQubmFtZTJpZCx2PXQoIi4vY29uc3RhbnRzIikuQVhfSURfUEFUVEVSTix5PXQoIi4uLy4uL3JlZ2lzdHJ5IikseD15LnRyYWNlSXMsYj15LmdldENvbXBvbmVudE1ldGhvZDtmdW5jdGlvbiBfKHQsZSxyKXtBcnJheS5pc0FycmF5KHRbZV0pP3RbZV0ucHVzaChyKTp0W2VdPVtyXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciB5LHcsVD1lLmF1dG90eXBlbnVtYmVycyxrPXt9LEE9e30sTT17fSxTPXt9LEU9e30sTD17fSxDPXt9LFA9e30sST17fSxPPXt9O2Zvcih5PTA7eTxyLmxlbmd0aDt5Kyspe3ZhciB6PXJbeV07aWYoeCh6LCJjYXJ0ZXNpYW4iKXx8eCh6LCJnbDJkIikpe3ZhciBELFI7aWYoei54YXhpcylEPW0oei54YXhpcyksXyhrLEQseik7ZWxzZSBpZih6LnhheGVzKWZvcih3PTA7dzx6LnhheGVzLmxlbmd0aDt3KyspXyhrLG0oei54YXhlc1t3XSkseik7aWYoei55YXhpcylSPW0oei55YXhpcyksXyhrLFIseik7ZWxzZSBpZih6LnlheGVzKWZvcih3PTA7dzx6LnlheGVzLmxlbmd0aDt3KyspXyhrLG0oei55YXhlc1t3XSkseik7aWYoImZ1bm5lbCI9PT16LnR5cGU/ImgiPT09ei5vcmllbnRhdGlvbj8oRCYmKEFbRF09ITApLFImJihDW1JdPSEwKSk6UiYmKE1bUl09ITApOiJpbWFnZSI9PT16LnR5cGU/KFImJihQW1JdPSEwKSxEJiYoUFtEXT0hMCkpOihSJiYoRVtSXT0hMCxMW1JdPSEwKSx4KHosImNhcnBldCIpJiYoImNhcnBldCIhPT16LnR5cGV8fHouX2NoZWF0ZXIpfHxEJiYoU1tEXT0hMCkpLCJjYXJwZXQiPT09ei50eXBlJiZ6Ll9jaGVhdGVyJiZEJiYoQVtEXT0hMCkseCh6LCIyZE1hcCIpJiYoSVtEXT0hMCxJW1JdPSEwKSx4KHosIm9yaWVudGVkIikpT1siaCI9PT16Lm9yaWVudGF0aW9uP1I6RF09ITB9fXZhciBGPWUuX3N1YnBsb3RzLEI9Ri54YXhpcyxOPUYueWF4aXMsaj1uLnNpbXBsZU1hcChCLG0pLFU9bi5zaW1wbGVNYXAoTixtKSxWPWouY29uY2F0KFUpLEg9aS5iYWNrZ3JvdW5kO0IubGVuZ3RoJiZOLmxlbmd0aCYmKEg9bi5jb2VyY2UodCxlLGwsInBsb3RfYmdjb2xvciIpKTt2YXIgcSxHLFksVyxYLFo9aS5jb21iaW5lKEgsZS5wYXBlcl9iZ2NvbG9yKTtmdW5jdGlvbiBKKCl7dmFyIHQ9a1txXXx8W107WC5fdHJhY2VJbmRpY2VzPXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5fZXhwYW5kZWRJbmRleH0pKSxYLl9hbm5JbmRpY2VzPVtdLFguX3NoYXBlSW5kaWNlcz1bXSxYLl9pbWdJbmRpY2VzPVtdLFguX3N1YnBsb3RzV2l0aD1bXSxYLl9jb3VudGVyQXhlcz1bXSxYLl9uYW1lPVguX2F0dHI9cSxYLl9pZD1HfWZ1bmN0aW9uIEsodCxlKXtyZXR1cm4gbi5jb2VyY2UoVyxYLGMsdCxlKX1mdW5jdGlvbiBRKHQsZSl7cmV0dXJuIG4uY29lcmNlMihXLFgsYyx0LGUpfWZ1bmN0aW9uICQodCl7cmV0dXJuIngiPT09dD9OOkJ9ZnVuY3Rpb24gdHQoZSxyKXtmb3IodmFyIG49IngiPT09ZT9qOlUsaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPW5bYV07bz09PXJ8fCh0W29dfHx7fSkub3ZlcmxheWluZ3x8aS5wdXNoKGcobykpfXJldHVybiBpfXZhciBldD17eDokKCJ4IikseTokKCJ5Iil9LHJ0PWV0LnguY29uY2F0KGV0LnkpLG50PXt9LGl0PVtdO2Z1bmN0aW9uIGF0KCl7dmFyIHQ9Vy5tYXRjaGVzO3YudGVzdCh0KSYmLTE9PT1ydC5pbmRleE9mKHQpJiYobnRbdF09Vy50eXBlLGl0PU9iamVjdC5rZXlzKG50KSl9dmFyIG90PW8odCxlKSxzdD1hKG90KTtmb3IoeT0wO3k8Vi5sZW5ndGg7eSsrKXtxPVZbeV0sRz1nKHEpLFk9cS5jaGFyQXQoMCksbi5pc1BsYWluT2JqZWN0KHRbcV0pfHwodFtxXT17fSksVz10W3FdLFg9cy5uZXdDb250YWluZXIoZSxxLFkrImF4aXMiKSxKKCk7dmFyIGx0PSJ4Ij09PVkmJiFTW3FdJiZBW3FdfHwieSI9PT1ZJiYhRVtxXSYmTVtxXSxjdD0ieSI9PT1ZJiYoIUxbcV0mJkNbcV18fFBbcV0pLHV0PXtsZXR0ZXI6WSxmb250OmUuZm9udCxvdXRlclRpY2tzOklbcV0sc2hvd0dyaWQ6IU9bcV0sZGF0YTprW3FdfHxbXSxiZ0NvbG9yOlosY2FsZW5kYXI6ZS5jYWxlbmRhcixhdXRvbWFyZ2luOiEwLHZpc2libGVEZmx0Omx0LHJldmVyc2VEZmx0OmN0LGF1dG90eXBlbnVtYmVyc0RmbHQ6VCxzcGxvbVN0YXNoOigoZS5fc3Bsb21BeGVzfHx7fSlbWV18fHt9KVtHXX07SygidWlyZXZpc2lvbiIsZS51aXJldmlzaW9uKSx1KFcsWCxLLHV0KSxmKFcsWCxLLHV0LGUpO3ZhciBmdD1zdCYmWT09PW90LmNoYXJBdCgwKSxodD1RKCJzcGlrZWNvbG9yIixzdD9YLmNvbG9yOnZvaWQgMCkscHQ9USgic3Bpa2V0aGlja25lc3MiLHN0PzEuNTp2b2lkIDApLGR0PVEoInNwaWtlZGFzaCIsc3Q/ImRvdCI6dm9pZCAwKSxtdD1RKCJzcGlrZW1vZGUiLHN0PyJhY3Jvc3MiOnZvaWQgMCksZ3Q9USgic3Bpa2VzbmFwIik7Sygic2hvd3NwaWtlcyIsISEoZnR8fGh0fHxwdHx8ZHR8fG10fHxndCkpfHwoZGVsZXRlIFguc3Bpa2Vjb2xvcixkZWxldGUgWC5zcGlrZXRoaWNrbmVzcyxkZWxldGUgWC5zcGlrZWRhc2gsZGVsZXRlIFguc3Bpa2Vtb2RlLGRlbGV0ZSBYLnNwaWtlc25hcCkscChXLFgsSyx7bGV0dGVyOlksY291bnRlckF4ZXM6ZXRbWV0sb3ZlcmxheWFibGVBeGVzOnR0KFkscSksZ3JpZDplLmdyaWR9KSxLKCJ0aXRsZS5zdGFuZG9mZiIpLGF0KCksWC5faW5wdXQ9V31mb3IoeT0wO3k8aXQubGVuZ3RoOyl7Rz1pdFt5KytdLFk9KHE9bShHKSkuY2hhckF0KDApLG4uaXNQbGFpbk9iamVjdCh0W3FdKXx8KHRbcV09e30pLFc9dFtxXSxYPXMubmV3Q29udGFpbmVyKGUscSxZKyJheGlzIiksSigpO3ZhciB2dD17bGV0dGVyOlksZm9udDplLmZvbnQsb3V0ZXJUaWNrczpJW3FdLHNob3dHcmlkOiFPW3FdLGRhdGE6W10sYmdDb2xvcjpaLGNhbGVuZGFyOmUuY2FsZW5kYXIsYXV0b21hcmdpbjohMCx2aXNpYmxlRGZsdDohMSxyZXZlcnNlRGZsdDohMSxhdXRvdHlwZW51bWJlcnNEZmx0OlQsc3Bsb21TdGFzaDooKGUuX3NwbG9tQXhlc3x8e30pW1ldfHx7fSlbR119O0soInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbiksWC50eXBlPW50W0ddfHwibGluZWFyIixmKFcsWCxLLHZ0LGUpLHAoVyxYLEsse2xldHRlcjpZLGNvdW50ZXJBeGVzOmV0W1ldLG92ZXJsYXlhYmxlQXhlczp0dChZLHEpLGdyaWQ6ZS5ncmlkfSksSygiZml4ZWRyYW5nZSIpLGF0KCksWC5faW5wdXQ9V312YXIgeXQ9YigicmFuZ2VzbGlkZXIiLCJoYW5kbGVEZWZhdWx0cyIpLHh0PWIoInJhbmdlc2VsZWN0b3IiLCJoYW5kbGVEZWZhdWx0cyIpO2Zvcih5PTA7eTxqLmxlbmd0aDt5KyspcT1qW3ldLFc9dFtxXSxYPWVbcV0seXQodCxlLHEpLCJkYXRlIj09PVgudHlwZSYmeHQoVyxYLGUsVSxYLmNhbGVuZGFyKSxLKCJmaXhlZHJhbmdlIik7Zm9yKHk9MDt5PFUubGVuZ3RoO3krKyl7cT1VW3ldLFc9dFtxXSxYPWVbcV07dmFyIGJ0PWVbbShYLmFuY2hvcildO0soImZpeGVkcmFuZ2UiLGIoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikoYnQpKX1oLmhhbmRsZURlZmF1bHRzKHQsZSx7YXhJZHM6cnQuY29uY2F0KGl0KS5zb3J0KGQuaWRTb3J0KSxheEhhc0ltYWdlOlB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjY3NSwiLi4vLi4vY29tcG9uZW50cy9meC9ob3Zlcm1vZGVfZGVmYXVsdHMiOjY3OCwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg4MSwiLi9heGlzX2RlZmF1bHRzIjo4MjksIi4vYXhpc19pZHMiOjgzMSwiLi9jb25zdGFudHMiOjgzNCwiLi9jb25zdHJhaW50cyI6ODM1LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDIsIi4vcG9zaXRpb25fZGVmYXVsdHMiOjg0NSwiLi90eXBlX2RlZmF1bHRzIjo4NTN9XSw4NDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidGlueWNvbG9yMiIpLm1peCxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLmxpZ2h0RnJhY3Rpb24sYT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9KG89b3x8e30pLmRmbHRDb2xvcjtmdW5jdGlvbiBsKHIsbil7cmV0dXJuIGEuY29lcmNlMih0LGUsby5hdHRyaWJ1dGVzLHIsbil9dmFyIGM9bCgibGluZWNvbG9yIixzKSx1PWwoImxpbmV3aWR0aCIpO3IoInNob3dsaW5lIixvLnNob3dMaW5lfHwhIWN8fCEhdSl8fChkZWxldGUgZS5saW5lY29sb3IsZGVsZXRlIGUubGluZXdpZHRoKTt2YXIgZj1sKCJncmlkY29sb3IiLG4ocyxvLmJnQ29sb3Isby5ibGVuZHx8aSkudG9SZ2JTdHJpbmcoKSksaD1sKCJncmlkd2lkdGgiKTtpZihyKCJzaG93Z3JpZCIsby5zaG93R3JpZHx8ISFmfHwhIWgpfHwoZGVsZXRlIGUuZ3JpZGNvbG9yLGRlbGV0ZSBlLmdyaWR3aWR0aCksIW8ubm9aZXJvTGluZSl7dmFyIHA9bCgiemVyb2xpbmVjb2xvciIscyksZD1sKCJ6ZXJvbGluZXdpZHRoIik7cigiemVyb2xpbmUiLG8uc2hvd0dyaWR8fCEhcHx8ISFkKXx8KGRlbGV0ZSBlLnplcm9saW5lY29sb3IsZGVsZXRlIGUuemVyb2xpbmV3aWR0aCl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYzOCwiLi4vLi4vbGliIjo3NzYsdGlueWNvbG9yMjo1NzJ9XSw4NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbyxzLGwsYyx1PWEuY291bnRlckF4ZXN8fFtdLGY9YS5vdmVybGF5YWJsZUF4ZXN8fFtdLGg9YS5sZXR0ZXIscD1hLmdyaWQ7cCYmKHM9cC5fZG9tYWluc1toXVtwLl9heGlzTWFwW2UuX2lkXV0sbz1wLl9hbmNob3JzW2UuX2lkXSxzJiYobD1wW2grInNpZGUiXS5zcGxpdCgiICIpWzBdLGM9cC5kb21haW5baF1bInJpZ2h0Ij09PWx8fCJ0b3AiPT09bD8xOjBdKSkscz1zfHxbMCwxXSxvPW98fChuKHQucG9zaXRpb24pPyJmcmVlIjp1WzBdfHwiZnJlZSIpLGw9bHx8KCJ4Ij09PWg/ImJvdHRvbSI6ImxlZnQiKSxjPWN8fDAsImZyZWUiPT09aS5jb2VyY2UodCxlLHthbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyZWUiXS5jb25jYXQodSksZGZsdDpvfX0sImFuY2hvciIpJiZyKCJwb3NpdGlvbiIsYyksaS5jb2VyY2UodCxlLHtzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6IngiPT09aD9bImJvdHRvbSIsInRvcCJdOlsibGVmdCIsInJpZ2h0Il0sZGZsdDpsfX0sInNpZGUiKTt2YXIgZD0hMTtpZihmLmxlbmd0aCYmKGQ9aS5jb2VyY2UodCxlLHtvdmVybGF5aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExXS5jb25jYXQoZiksZGZsdDohMX19LCJvdmVybGF5aW5nIikpLCFkKXt2YXIgbT1yKCJkb21haW4iLHMpO21bMF0+bVsxXS0xLzQwOTYmJihlLmRvbWFpbj1zKSxpLm5vbmVPckFsbCh0LmRvbWFpbixlLmRvbWFpbixzKX1yZXR1cm4gcigibGF5ZXIiKSxlfX0seyIuLi8uLi9saWIiOjc3NiwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDg0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuRlJPTV9CTDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZvaWQgMD09PXImJihyPW5bdC5jb25zdHJhaW50b3dhcmR8fCJjZW50ZXIiXSk7dmFyIGk9W3QucjJsKHQucmFuZ2VbMF0pLHQucjJsKHQucmFuZ2VbMV0pXSxhPWlbMF0rKGlbMV0taVswXSkqcjt0LnJhbmdlPXQuX2lucHV0LnJhbmdlPVt0LmwycihhKyhpWzBdLWEpKmUpLHQubDJyKGErKGlbMV0tYSkqZSldLHQuc2V0U2NhbGUoKX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzQ0fV0sODQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBvbHlib29sanMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKS5kYXNoU3R5bGUsbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksbD10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5tYWtlRXZlbnREYXRhLGM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIiksdT1jLmZyZWVNb2RlLGY9Yy5yZWN0TW9kZSxoPWMuZHJhd01vZGUscD1jLm9wZW5Nb2RlLGQ9Yy5zZWxlY3RNb2RlLG09dCgiLi4vLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9kaXNwbGF5X291dGxpbmVzIiksZz10KCIuLi8uLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL2hlbHBlcnMiKS5oYW5kbGVFbGxpcHNlLHY9dCgiLi4vLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9uZXdzaGFwZXMiKSx5PXQoIi4uLy4uL2xpYiIpLHg9dCgiLi4vLi4vbGliL3BvbHlnb24iKSxiPXQoIi4uLy4uL2xpYi90aHJvdHRsZSIpLF89dCgiLi9heGlzX2lkcyIpLmdldEZyb21JZCx3PXQoIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyIpLFQ9dCgiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiKS5yZWRyYXdSZWdsVHJhY2VzLGs9dCgiLi9jb25zdGFudHMiKSxBPWsuTUlOU0VMRUNULE09eC5maWx0ZXIsUz14LnRlc3RlcixFPXQoIi4vaGFuZGxlX291dGxpbmUiKS5jbGVhclNlbGVjdCxMPXQoIi4vaGVscGVycyIpLEM9TC5wMnIsUD1MLmF4VmFsdWUsST1MLmdldFRyYW5zZm9ybTtmdW5jdGlvbiBPKHQsZSxyLG4saSxhLG8pe3ZhciBzLGwsYyx1LGYsaCxkLGcsdix5PWUuX2hvdmVyZGF0YSx4PWUuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlLmluZGV4T2YoImV2ZW50Iik+LTEsYj1bXTtpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmQXJyYXkuaXNBcnJheSh0KSYmITAhPT10WzBdLmhvdmVyT25Cb3h9KHkpKXtGKHQsZSxhKTt2YXIgXz1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10WzBdLGE9LTEsbz1bXTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWlmKHI9ZVtuXSxpLmZ1bGxEYXRhLl9leHBhbmRlZEluZGV4PT09ci5jZFswXS50cmFjZS5fZXhwYW5kZWRJbmRleCl7aWYoITA9PT1pLmhvdmVyT25Cb3gpYnJlYWs7dm9pZCAwIT09aS5wb2ludE51bWJlcj9hPWkucG9pbnROdW1iZXI6dm9pZCAwIT09aS5iaW5OdW1iZXImJihhPWkuYmluTnVtYmVyLG89aS5wb2ludE51bWJlcnMpO2JyZWFrfXJldHVybntwb2ludE51bWJlcjphLHBvaW50TnVtYmVyczpvLHNlYXJjaEluZm86cn19KHkscz1OKGUscixuLGkpKTtpZihfLnBvaW50TnVtYmVycy5sZW5ndGg+MD9mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPVtdO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspKHI9dFtpXSkuY2RbMF0udHJhY2Uuc2VsZWN0ZWRwb2ludHMmJnIuY2RbMF0udHJhY2Uuc2VsZWN0ZWRwb2ludHMubGVuZ3RoPjAmJmEucHVzaChyKTtpZigxPT09YS5sZW5ndGgmJmFbMF09PT1lLnNlYXJjaEluZm8mJihuPWUuc2VhcmNoSW5mby5jZFswXS50cmFjZSkuc2VsZWN0ZWRwb2ludHMubGVuZ3RoPT09ZS5wb2ludE51bWJlcnMubGVuZ3RoKXtmb3IoaT0wO2k8ZS5wb2ludE51bWJlcnMubGVuZ3RoO2krKylpZihuLnNlbGVjdGVkcG9pbnRzLmluZGV4T2YoZS5wb2ludE51bWJlcnNbaV0pPDApcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9KHMsXyk6ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9MDtmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKGU9dFtuXSwocj1lLmNkWzBdLnRyYWNlKS5zZWxlY3RlZHBvaW50cyl7aWYoci5zZWxlY3RlZHBvaW50cy5sZW5ndGg+MSlyZXR1cm4hMTtpZigoaSs9ci5zZWxlY3RlZHBvaW50cy5sZW5ndGgpPjEpcmV0dXJuITF9cmV0dXJuIDE9PT1pfShzKSYmKGg9aihfKSkpe2ZvcihvJiZvLnJlbW92ZSgpLHY9MDt2PHMubGVuZ3RoO3YrKykobD1zW3ZdKS5fbW9kdWxlLnNlbGVjdFBvaW50cyhsLCExKTtVKGUscyksQihhKSx4JiZlLmVtaXQoInBsb3RseV9kZXNlbGVjdCIsbnVsbCl9ZWxzZXtmb3IoZD10LnNoaWZ0S2V5JiYodm9pZCAwIT09aD9oOmooXykpLGM9ZnVuY3Rpb24odCxlLHIpe3JldHVybntwb2ludE51bWJlcjp0LHNlYXJjaEluZm86ZSxzdWJ0cmFjdDpyfX0oXy5wb2ludE51bWJlcixfLnNlYXJjaEluZm8sZCksdT1SKGEuc2VsZWN0aW9uRGVmcy5jb25jYXQoW2NdKSksdj0wO3Y8cy5sZW5ndGg7disrKWlmKGY9VihzW3ZdLl9tb2R1bGUuc2VsZWN0UG9pbnRzKHNbdl0sdSksc1t2XSksYi5sZW5ndGgpZm9yKHZhciB3PTA7dzxmLmxlbmd0aDt3KyspYi5wdXNoKGZbd10pO2Vsc2UgYj1mO2lmKFUoZSxzLGc9e3BvaW50czpifSksYyYmYSYmYS5zZWxlY3Rpb25EZWZzLnB1c2goYyksbyl7dmFyIFQ9YS5tZXJnZWRQb2x5Z29ucyxrPXAoYS5kcmFnbW9kZSk7bShIKFQsayksbyxhKX14JiZlLmVtaXQoInBsb3RseV9zZWxlY3RlZCIsZyl9fX1mdW5jdGlvbiB6KHQpe3JldHVybiJwb2ludE51bWJlciJpbiB0JiYic2VhcmNoSW5mbyJpbiB0fWZ1bmN0aW9uIEQodCl7cmV0dXJue3htaW46MCx4bWF4OjAseW1pbjowLHltYXg6MCxwdHM6W10sY29udGFpbnM6ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dC5zZWFyY2hJbmZvLmNkWzBdLnRyYWNlLl9leHBhbmRlZEluZGV4O3JldHVybiBpLmNkWzBdLnRyYWNlLl9leHBhbmRlZEluZGV4PT09YSYmbj09PXQucG9pbnROdW1iZXJ9LGlzUmVjdDohMSxkZWdlbmVyYXRlOiExLHN1YnRyYWN0OnQuc3VidHJhY3R9fWZ1bmN0aW9uIFIodCl7Zm9yKHZhciBlPVtdLHI9eih0WzBdKT8wOnRbMF1bMF1bMF0sbj1yLGk9eih0WzBdKT8wOnRbMF1bMF1bMV0sYT1pLG89MDtvPHQubGVuZ3RoO28rKylpZih6KHRbb10pKWUucHVzaChEKHRbb10pKTtlbHNle3ZhciBzPXgudGVzdGVyKHRbb10pO3Muc3VidHJhY3Q9dFtvXS5zdWJ0cmFjdCxlLnB1c2gocykscj1NYXRoLm1pbihyLHMueG1pbiksbj1NYXRoLm1heChuLHMueG1heCksaT1NYXRoLm1pbihpLHMueW1pbiksYT1NYXRoLm1heChhLHMueW1heCl9cmV0dXJue3htaW46cix4bWF4Om4seW1pbjppLHltYXg6YSxwdHM6W10sY29udGFpbnM6ZnVuY3Rpb24odCxyLG4saSl7Zm9yKHZhciBhPSExLG89MDtvPGUubGVuZ3RoO28rKyllW29dLmNvbnRhaW5zKHQscixuLGkpJiYoYT0hMT09PWVbb10uc3VidHJhY3QpO3JldHVybiBhfSxpc1JlY3Q6ITEsZGVnZW5lcmF0ZTohMX19ZnVuY3Rpb24gRih0LGUscil7ZS5fZnVsbExheW91dC5fZHJhd2luZz0hMTt2YXIgbj1lLl9mdWxsTGF5b3V0LGk9ci5wbG90aW5mbyxhPXIuZHJhZ21vZGUsbz1uLl9sYXN0U2VsZWN0ZWRTdWJwbG90JiZuLl9sYXN0U2VsZWN0ZWRTdWJwbG90PT09aS5pZCxzPSh0LnNoaWZ0S2V5fHx0LmFsdEtleSkmJiEoaChhKSYmcChhKSk7byYmcyYmaS5zZWxlY3Rpb24mJmkuc2VsZWN0aW9uLnNlbGVjdGlvbkRlZnMmJiFyLnNlbGVjdGlvbkRlZnM/KHIuc2VsZWN0aW9uRGVmcz1pLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzLHIubWVyZ2VkUG9seWdvbnM9aS5zZWxlY3Rpb24ubWVyZ2VkUG9seWdvbnMpOnMmJmkuc2VsZWN0aW9ufHxCKHIpLG98fChFKGUpLG4uX2xhc3RTZWxlY3RlZFN1YnBsb3Q9aS5pZCl9ZnVuY3Rpb24gQih0KXt2YXIgZT10LmRyYWdtb2RlLHI9dC5wbG90aW5mbyxuPXQuZ2Q7aWYobi5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleD49MCYmbi5fZnVsbExheW91dC5fZGVhY3RpdmF0ZVNoYXBlKG4pLGgoZSkpe3ZhciBhPW4uX2Z1bGxMYXlvdXQuX3pvb21sYXllci5zZWxlY3RBbGwoIi5zZWxlY3Qtb3V0bGluZS0iK3IuaWQpO2lmKGEmJm4uX2Z1bGxMYXlvdXQuX2RyYXdpbmcpe3ZhciBvPXYoYSx0KTtvJiZpLmNhbGwoIl9ndWlSZWxheW91dCIsbix7c2hhcGVzOm99KSxuLl9mdWxsTGF5b3V0Ll9kcmF3aW5nPSExfX1yLnNlbGVjdGlvbj17fSxyLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzPXQuc2VsZWN0aW9uRGVmcz1bXSxyLnNlbGVjdGlvbi5tZXJnZWRQb2x5Z29ucz10Lm1lcmdlZFBvbHlnb25zPVtdfWZ1bmN0aW9uIE4odCxlLHIsbil7dmFyIGksYSxvLHM9W10sbD1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2lkfSkpLGM9ci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9pZH0pKTtmb3Iobz0wO288dC5jYWxjZGF0YS5sZW5ndGg7bysrKWlmKCEwPT09KGE9KGk9dC5jYWxjZGF0YVtvXSlbMF0udHJhY2UpLnZpc2libGUmJmEuX21vZHVsZSYmYS5fbW9kdWxlLnNlbGVjdFBvaW50cylpZighbnx8YS5zdWJwbG90IT09biYmYS5nZW8hPT1uKWlmKCJzcGxvbSI9PT1hLnR5cGUmJmEuX3hheGVzW2xbMF1dJiZhLl95YXhlc1tjWzBdXSl7dmFyIHU9aChhLl9tb2R1bGUsaSxlWzBdLHJbMF0pO3Uuc2NlbmU9dC5fZnVsbExheW91dC5fc3Bsb21TY2VuZXNbYS51aWRdLHMucHVzaCh1KX1lbHNlIGlmKCJzYW5rZXkiPT09YS50eXBlKXt2YXIgZj1oKGEuX21vZHVsZSxpLGVbMF0sclswXSk7cy5wdXNoKGYpfWVsc2V7aWYoLTE9PT1sLmluZGV4T2YoYS54YXhpcykpY29udGludWU7aWYoLTE9PT1jLmluZGV4T2YoYS55YXhpcykpY29udGludWU7cy5wdXNoKGgoYS5fbW9kdWxlLGksXyh0LGEueGF4aXMpLF8odCxhLnlheGlzKSkpfWVsc2Ugcy5wdXNoKGgoYS5fbW9kdWxlLGksZVswXSxyWzBdKSk7cmV0dXJuIHM7ZnVuY3Rpb24gaCh0LGUscixuKXtyZXR1cm57X21vZHVsZTp0LGNkOmUseGF4aXM6cix5YXhpczpufX19ZnVuY3Rpb24gaih0KXt2YXIgZT10LnNlYXJjaEluZm8uY2RbMF0udHJhY2Uscj10LnBvaW50TnVtYmVyLG49dC5wb2ludE51bWJlcnMsaT1uLmxlbmd0aD4wP25bMF06cjtyZXR1cm4hIWUuc2VsZWN0ZWRwb2ludHMmJmUuc2VsZWN0ZWRwb2ludHMuaW5kZXhPZihpKT4tMX1mdW5jdGlvbiBVKHQsZSxyKXt2YXIgbixhLG8scztmb3Iobj0wO248ZS5sZW5ndGg7bisrKXt2YXIgbD1lW25dLmNkWzBdLnRyYWNlLl9mdWxsSW5wdXQsYz10Ll9mdWxsTGF5b3V0Ll90cmFjZVByZUdVSVtsLnVpZF18fHt9O3ZvaWQgMD09PWMuc2VsZWN0ZWRwb2ludHMmJihjLnNlbGVjdGVkcG9pbnRzPWwuX2lucHV0LnNlbGVjdGVkcG9pbnRzfHxudWxsKX1pZihyKXt2YXIgdT1yLnBvaW50c3x8W107Zm9yKG49MDtuPGUubGVuZ3RoO24rKykocz1lW25dLmNkWzBdLnRyYWNlKS5faW5wdXQuc2VsZWN0ZWRwb2ludHM9cy5fZnVsbElucHV0LnNlbGVjdGVkcG9pbnRzPVtdLHMuX2Z1bGxJbnB1dCE9PXMmJihzLnNlbGVjdGVkcG9pbnRzPVtdKTtmb3Iobj0wO248dS5sZW5ndGg7bisrKXt2YXIgZj11W25dLGg9Zi5kYXRhLHA9Zi5mdWxsRGF0YTtmLnBvaW50SW5kaWNlcz8oW10ucHVzaC5hcHBseShoLnNlbGVjdGVkcG9pbnRzLGYucG9pbnRJbmRpY2VzKSxzLl9mdWxsSW5wdXQhPT1zJiZbXS5wdXNoLmFwcGx5KHAuc2VsZWN0ZWRwb2ludHMsZi5wb2ludEluZGljZXMpKTooaC5zZWxlY3RlZHBvaW50cy5wdXNoKGYucG9pbnRJbmRleCkscy5fZnVsbElucHV0IT09cyYmcC5zZWxlY3RlZHBvaW50cy5wdXNoKGYucG9pbnRJbmRleCkpfX1lbHNlIGZvcihuPTA7bjxlLmxlbmd0aDtuKyspZGVsZXRlKHM9ZVtuXS5jZFswXS50cmFjZSkuc2VsZWN0ZWRwb2ludHMsZGVsZXRlIHMuX2lucHV0LnNlbGVjdGVkcG9pbnRzLHMuX2Z1bGxJbnB1dCE9PXMmJmRlbGV0ZSBzLl9mdWxsSW5wdXQuc2VsZWN0ZWRwb2ludHM7dmFyIGQ9ITE7Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7cz0obz0oYT1lW25dKS5jZClbMF0udHJhY2UsaS50cmFjZUlzKHMsInJlZ2wiKSYmKGQ9ITApO3ZhciBtPWEuX21vZHVsZSxnPW0uc3R5bGVPblNlbGVjdHx8bS5zdHlsZTtnJiYoZyh0LG8sb1swXS5ub2RlMyksb1swXS5ub2RlUmFuZ2VQbG90MyYmZyh0LG8sb1swXS5ub2RlUmFuZ2VQbG90MykpfWQmJih3KHQpLFQodCkpfWZ1bmN0aW9uIFYodCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj1lLmNkLG49ZS5jZFswXS50cmFjZSxpPTA7aTx0Lmxlbmd0aDtpKyspdFtpXT1sKHRbaV0sbixyKTtyZXR1cm4gdH1mdW5jdGlvbiBIKHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7cltuXT1bXTtmb3IodmFyIGk9MDtpPHRbbl0ubGVuZ3RoO2krKyl7cltuXVtpXT1bXSxyW25dW2ldWzBdPWk/IkwiOiJNIjtmb3IodmFyIGE9MDthPHRbbl1baV0ubGVuZ3RoO2ErKylyW25dW2ldLnB1c2godFtuXVtpXVthXSl9ZXx8cltuXS5wdXNoKFsiWiIscltuXVswXVsxXSxyW25dWzBdWzJdXSl9cmV0dXJuIHJ9ZS5leHBvcnRzPXtwcmVwU2VsZWN0OmZ1bmN0aW9uKHQsZSxyLGksbCl7dmFyIGM9dShsKSx2PWYobCkseD1wKGwpLF89aChsKSx3PWQobCksVD0iZHJhd2NpcmNsZSI9PT1sLEU9ImRyYXdsaW5lIj09PWx8fFQsTD1pLmdkLHo9TC5fZnVsbExheW91dCxEPXouX3pvb21sYXllcixqPWkuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxxPWkucGxvdGluZm8sRz1JKHEpLFk9ZS1qLmxlZnQsVz1yLWoudG9wO3ouX2NhbGNJbnZlcnNlVHJhbnNmb3JtKEwpO3ZhciBYPXkuYXBwbHkzRFRyYW5zZm9ybSh6Ll9pbnZUcmFuc2Zvcm0pKFksVyk7WT1YWzBdLFc9WFsxXTt2YXIgWixKLEssUSwkLHR0LGV0LHJ0PXouX2ludlNjYWxlWCxudD16Ll9pbnZTY2FsZVksaXQ9WSxhdD1XLG90PSJNIitZKyIsIitXLHN0PWkueGF4ZXNbMF0uX2xlbmd0aCxsdD1pLnlheGVzWzBdLl9sZW5ndGgsY3Q9aS54YXhlcy5jb25jYXQoaS55YXhlcyksdXQ9dC5hbHRLZXkmJiEoaChsKSYmeCk7Rih0LEwsaSksYyYmKFo9TShbW1ksV11dLGsuQkVORFBYKSk7dmFyIGZ0PUQuc2VsZWN0QWxsKCJwYXRoLnNlbGVjdC1vdXRsaW5lLSIrcS5pZCkuZGF0YShfP1swXTpbMSwyXSksaHQ9ei5uZXdzaGFwZTtmdC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuInNlbGVjdC1vdXRsaW5lIHNlbGVjdC1vdXRsaW5lLSIrdCsiIHNlbGVjdC1vdXRsaW5lLSIrcS5pZH0pKS5zdHlsZShfP3tvcGFjaXR5Omh0Lm9wYWNpdHkvMixmaWxsOng/dm9pZCAwOmh0LmZpbGxjb2xvcixzdHJva2U6aHQubGluZS5jb2xvciwic3Ryb2tlLWRhc2hhcnJheSI6YShodC5saW5lLmRhc2gsaHQubGluZS53aWR0aCksInN0cm9rZS13aWR0aCI6aHQubGluZS53aWR0aCsicHgifTp7fSkuYXR0cigiZmlsbC1ydWxlIixodC5maWxscnVsZSkuY2xhc3NlZCgiY3Vyc29yLW1vdmUiLCEhXykuYXR0cigidHJhbnNmb3JtIixHKS5hdHRyKCJkIixvdCsiWiIpO3ZhciBwdCxkdD1ELmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveC1jb3JuZXJzIikuc3R5bGUoe2ZpbGw6by5iYWNrZ3JvdW5kLHN0cm9rZTpvLmRlZmF1bHRMaW5lLCJzdHJva2Utd2lkdGgiOjF9KS5hdHRyKCJ0cmFuc2Zvcm0iLEcpLmF0dHIoImQiLCJNMCwwWiIpLG10PXouX3VpZCtrLlNFTEVDVElELGd0PVtdLHZ0PU4oTCxpLnhheGVzLGkueWF4ZXMsaS5zdWJwbG90KTtmdW5jdGlvbiB5dCh0LGUpe3JldHVybiB0LWV9cHQ9cS5maWxsUmFuZ2VJdGVtcz9xLmZpbGxSYW5nZUl0ZW1zOnY/ZnVuY3Rpb24odCxlKXt2YXIgcj10LnJhbmdlPXt9O2ZvcigkPTA7JDxjdC5sZW5ndGg7JCsrKXt2YXIgbj1jdFskXSxpPW4uX2lkLmNoYXJBdCgwKTtyW24uX2lkXT1bQyhuLGVbaSsibWluIl0pLEMobixlW2krIm1heCJdKV0uc29ydCh5dCl9fTpmdW5jdGlvbih0LGUscil7dmFyIG49dC5sYXNzb1BvaW50cz17fTtmb3IoJD0wOyQ8Y3QubGVuZ3RoOyQrKyl7dmFyIGk9Y3RbJF07bltpLl9pZF09ci5maWx0ZXJlZC5tYXAoUChpKSl9fSxpLm1vdmVGbj1mdW5jdGlvbih0LGUpe2l0PU1hdGgubWF4KDAsTWF0aC5taW4oc3QscnQqdCtZKSksYXQ9TWF0aC5tYXgoMCxNYXRoLm1pbihsdCxudCplK1cpKTt2YXIgcj1NYXRoLmFicyhpdC1ZKSxhPU1hdGguYWJzKGF0LVcpO2lmKHYpe3ZhciBvLHMsbDtpZih3KXt2YXIgdT16LnNlbGVjdGRpcmVjdGlvbjtzd2l0Y2gobz0iYW55Ij09PXU/YTxNYXRoLm1pbiguNipyLEEpPyJoIjpyPE1hdGgubWluKC42KmEsQSk/InYiOiJkIjp1KXtjYXNlImgiOnM9VD9sdC8yOjAsbD1sdDticmVhaztjYXNlInYiOnM9VD9zdC8yOjAsbD1zdH19aWYoXylzd2l0Y2goei5uZXdzaGFwZS5kcmF3ZGlyZWN0aW9uKXtjYXNlInZlcnRpY2FsIjpvPSJoIixzPVQ/bHQvMjowLGw9bHQ7YnJlYWs7Y2FzZSJob3Jpem9udGFsIjpvPSJ2IixzPVQ/c3QvMjowLGw9c3Q7YnJlYWs7Y2FzZSJvcnRobyI6cjxhPyhvPSJoIixzPVcsbD1hdCk6KG89InYiLHM9WSxsPWl0KTticmVhaztkZWZhdWx0Om89ImQifSJoIj09PW8/KChRPUU/ZyhULFtpdCxzXSxbaXQsbF0pOltbWSxzXSxbWSxsXSxbaXQsbF0sW2l0LHNdXSkueG1pbj1FP2l0Ok1hdGgubWluKFksaXQpLFEueG1heD1FP2l0Ok1hdGgubWF4KFksaXQpLFEueW1pbj1NYXRoLm1pbihzLGwpLFEueW1heD1NYXRoLm1heChzLGwpLGR0LmF0dHIoImQiLCJNIitRLnhtaW4rIiwiKyhXLUEpKyJoLTR2IisyKkErImg0Wk0iKyhRLnhtYXgtMSkrIiwiKyhXLUEpKyJoNHYiKzIqQSsiaC00WiIpKToidiI9PT1vPygoUT1FP2coVCxbcyxhdF0sW2wsYXRdKTpbW3MsV10sW3MsYXRdLFtsLGF0XSxbbCxXXV0pLnhtaW49TWF0aC5taW4ocyxsKSxRLnhtYXg9TWF0aC5tYXgocyxsKSxRLnltaW49RT9hdDpNYXRoLm1pbihXLGF0KSxRLnltYXg9RT9hdDpNYXRoLm1heChXLGF0KSxkdC5hdHRyKCJkIiwiTSIrKFktQSkrIiwiK1EueW1pbisidi00aCIrMipBKyJ2NFpNIisoWS1BKSsiLCIrKFEueW1heC0xKSsidjRoIisyKkErInYtNFoiKSk6ImQiPT09byYmKChRPUU/ZyhULFtZLFddLFtpdCxhdF0pOltbWSxXXSxbWSxhdF0sW2l0LGF0XSxbaXQsV11dKS54bWluPU1hdGgubWluKFksaXQpLFEueG1heD1NYXRoLm1heChZLGl0KSxRLnltaW49TWF0aC5taW4oVyxhdCksUS55bWF4PU1hdGgubWF4KFcsYXQpLGR0LmF0dHIoImQiLCJNMCwwWiIpKX1lbHNlIGMmJihaLmFkZFB0KFtpdCxhdF0pLFE9Wi5maWx0ZXJlZCk7aS5zZWxlY3Rpb25EZWZzJiZpLnNlbGVjdGlvbkRlZnMubGVuZ3RoPyhLPWZ1bmN0aW9uKHQsZSxyKXtpZihyKXJldHVybiBuLmRpZmZlcmVuY2Uoe3JlZ2lvbnM6dCxpbnZlcnRlZDohMX0se3JlZ2lvbnM6W2VdLGludmVydGVkOiExfSkucmVnaW9ucztyZXR1cm4gbi51bmlvbih7cmVnaW9uczp0LGludmVydGVkOiExfSx7cmVnaW9uczpbZV0saW52ZXJ0ZWQ6ITF9KS5yZWdpb25zfShpLm1lcmdlZFBvbHlnb25zLFEsdXQpLFEuc3VidHJhY3Q9dXQsSj1SKGkuc2VsZWN0aW9uRGVmcy5jb25jYXQoW1FdKSkpOihLPVtRXSxKPVMoUSkpLG0oSChLLHgpLGZ0LGkpLHcmJmIudGhyb3R0bGUobXQsay5TRUxFQ1RERUxBWSwoZnVuY3Rpb24oKXt2YXIgdDtndD1bXTt2YXIgZSxyPVtdO2ZvcigkPTA7JDx2dC5sZW5ndGg7JCsrKWlmKGU9KHR0PXZ0WyRdKS5fbW9kdWxlLnNlbGVjdFBvaW50cyh0dCxKKSxyLnB1c2goZSksdD1WKGUsdHQpLGd0Lmxlbmd0aClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylndC5wdXNoKHRbbl0pO2Vsc2UgZ3Q9dDtVKEwsdnQsZXQ9e3BvaW50czpndH0pLHB0KGV0LFEsWiksaS5nZC5lbWl0KCJwbG90bHlfc2VsZWN0aW5nIixldCl9KSl9LGkuY2xpY2tGbj1mdW5jdGlvbih0LGUpe2lmKGR0LnJlbW92ZSgpLEwuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg+PTApTC5fZnVsbExheW91dC5fZGVhY3RpdmF0ZVNoYXBlKEwpO2Vsc2UgaWYoIV8pe3ZhciByPXouY2xpY2ttb2RlO2IuZG9uZShtdCkudGhlbigoZnVuY3Rpb24oKXtpZihiLmNsZWFyKG10KSwyPT09dCl7Zm9yKGZ0LnJlbW92ZSgpLCQ9MDskPHZ0Lmxlbmd0aDskKyspKHR0PXZ0WyRdKS5fbW9kdWxlLnNlbGVjdFBvaW50cyh0dCwhMSk7VShMLHZ0KSxCKGkpLEwuZW1pdCgicGxvdGx5X2Rlc2VsZWN0IixudWxsKX1lbHNlIHIuaW5kZXhPZigic2VsZWN0Iik+LTEmJk8oZSxMLGkueGF4ZXMsaS55YXhlcyxpLnN1YnBsb3QsaSxmdCksImV2ZW50Ij09PXImJkwuZW1pdCgicGxvdGx5X3NlbGVjdGVkIix2b2lkIDApO3MuY2xpY2soTCxlKX0pKS5jYXRjaCh5LmVycm9yKX19LGkuZG9uZUZuPWZ1bmN0aW9uKCl7ZHQucmVtb3ZlKCksYi5kb25lKG10KS50aGVuKChmdW5jdGlvbigpe2IuY2xlYXIobXQpLGkuZ2QuZW1pdCgicGxvdGx5X3NlbGVjdGVkIixldCksUSYmaS5zZWxlY3Rpb25EZWZzJiYoUS5zdWJ0cmFjdD11dCxpLnNlbGVjdGlvbkRlZnMucHVzaChRKSxpLm1lcmdlZFBvbHlnb25zLmxlbmd0aD0wLFtdLnB1c2guYXBwbHkoaS5tZXJnZWRQb2x5Z29ucyxLKSksaS5kb25lRm5Db21wbGV0ZWQmJmkuZG9uZUZuQ29tcGxldGVkKGd0KX0pKS5jYXRjaCh5LmVycm9yKSxfJiZCKGkpfX0sY2xlYXJTZWxlY3Q6RSxjbGVhclNlbGVjdGlvbnNDYWNoZTpCLHNlbGVjdE9uQ2xpY2s6T319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiOjY1NywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY3OSwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo2NzUsIi4uLy4uL2NvbXBvbmVudHMvc2hhcGVzL2RyYXdfbmV3c2hhcGUvZGlzcGxheV9vdXRsaW5lcyI6NzI3LCIuLi8uLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL2hlbHBlcnMiOjcyOCwiLi4vLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9uZXdzaGFwZXMiOjcyOSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyI6NzYwLCIuLi8uLi9saWIvcG9seWdvbiI6Nzg4LCIuLi8uLi9saWIvdGhyb3R0bGUiOjgwMywiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiOjgxNywiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi9heGlzX2lkcyI6ODMxLCIuL2NvbnN0YW50cyI6ODM0LCIuL2hhbmRsZV9vdXRsaW5lIjo4MzgsIi4vaGVscGVycyI6ODM5LHBvbHlib29sanM6NDgwfV0sODQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImQzLXRpbWUtZm9ybWF0IikudXRjRm9ybWF0LGE9dCgiLi4vLi4vbGliIiksbz1hLm51bWJlckZvcm1hdCxzPXQoImZhc3QtaXNudW1lcmljIiksbD1hLmNsZWFuTnVtYmVyLGM9YS5tczJEYXRlVGltZSx1PWEuZGF0ZVRpbWUybXMsZj1hLmVuc3VyZU51bWJlcixoPWEuaXNBcnJheU9yVHlwZWRBcnJheSxwPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxkPXAuRlBfU0FGRSxtPXAuQkFETlVNLGc9cC5MT0dfQ0xJUCx2PXAuT05FV0VFSyx5PXAuT05FREFZLHg9cC5PTkVIT1VSLGI9cC5PTkVNSU4sXz1wLk9ORVNFQyx3PXQoIi4vYXhpc19pZHMiKSxUPXQoIi4vY29uc3RhbnRzIiksaz1ULkhPVVJfUEFUVEVSTixBPVQuV0VFS0RBWV9QQVRURVJOO2Z1bmN0aW9uIE0odCl7cmV0dXJuIE1hdGgucG93KDEwLHQpfWZ1bmN0aW9uIFModCl7cmV0dXJuIG51bGwhPXR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgcj10Ll9pZHx8IngiLHA9ci5jaGFyQXQoMCk7ZnVuY3Rpb24gRShlLHIpe2lmKGU+MClyZXR1cm4gTWF0aC5sb2coZSkvTWF0aC5MTjEwO2lmKGU8PTAmJnImJnQucmFuZ2UmJjI9PT10LnJhbmdlLmxlbmd0aCl7dmFyIG49dC5yYW5nZVswXSxpPXQucmFuZ2VbMV07cmV0dXJuLjUqKG4raS0yKmcqTWF0aC5hYnMobi1pKSl9cmV0dXJuIG19ZnVuY3Rpb24gTChlLHIsbixpKXtpZigoaXx8e30pLm1zVVRDJiZzKGUpKXJldHVybitlO3ZhciBvPXUoZSxufHx0LmNhbGVuZGFyKTtpZihvPT09bSl7aWYoIXMoZSkpcmV0dXJuIG07ZT0rZTt2YXIgbD1NYXRoLmZsb29yKDEwKmEubW9kKGUrLjA1LDEpKSxjPU1hdGgucm91bmQoZS1sLzEwKTtvPXUobmV3IERhdGUoYykpK2wvMTB9cmV0dXJuIG99ZnVuY3Rpb24gQyhlLHIsbil7cmV0dXJuIGMoZSxyLG58fHQuY2FsZW5kYXIpfWZ1bmN0aW9uIFAoZSl7cmV0dXJuIHQuX2NhdGVnb3JpZXNbTWF0aC5yb3VuZChlKV19ZnVuY3Rpb24gSShlKXtpZihTKGUpKXtpZih2b2lkIDA9PT10Ll9jYXRlZ29yaWVzTWFwJiYodC5fY2F0ZWdvcmllc01hcD17fSksdm9pZCAwIT09dC5fY2F0ZWdvcmllc01hcFtlXSlyZXR1cm4gdC5fY2F0ZWdvcmllc01hcFtlXTt0Ll9jYXRlZ29yaWVzLnB1c2goIm51bWJlciI9PXR5cGVvZiBlP1N0cmluZyhlKTplKTt2YXIgcj10Ll9jYXRlZ29yaWVzLmxlbmd0aC0xO3JldHVybiB0Ll9jYXRlZ29yaWVzTWFwW2VdPXIscn1yZXR1cm4gbX1mdW5jdGlvbiBPKGUpe2lmKHQuX2NhdGVnb3JpZXNNYXApcmV0dXJuIHQuX2NhdGVnb3JpZXNNYXBbZV19ZnVuY3Rpb24geih0KXt2YXIgZT1PKHQpO3JldHVybiB2b2lkIDAhPT1lP2U6cyh0KT8rdDp2b2lkIDB9ZnVuY3Rpb24gRCh0KXtyZXR1cm4gcyh0KT8rdDpPKHQpfWZ1bmN0aW9uIFIodCxlLHIpe3JldHVybiBuLnJvdW5kKHIrZSp0LDIpfWZ1bmN0aW9uIEYodCxlLHIpe3JldHVybih0LXIpL2V9dmFyIEI9ZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSk/UihlLHQuX20sdC5fYik6bX0sTj1mdW5jdGlvbihlKXtyZXR1cm4gRihlLHQuX20sdC5fYil9O2lmKHQucmFuZ2VicmVha3Mpe3ZhciBqPSJ5Ij09PXA7Qj1mdW5jdGlvbihlKXtpZighcyhlKSlyZXR1cm4gbTt2YXIgcj10Ll9yYW5nZWJyZWFrcy5sZW5ndGg7aWYoIXIpcmV0dXJuIFIoZSx0Ll9tLHQuX2IpO3ZhciBuPWo7dC5yYW5nZVswXT50LnJhbmdlWzFdJiYobj0hbik7Zm9yKHZhciBpPW4/LTE6MSxhPWkqZSxvPTAsbD0wO2w8cjtsKyspe3ZhciBjPWkqdC5fcmFuZ2VicmVha3NbbF0ubWluLHU9aSp0Ll9yYW5nZWJyZWFrc1tsXS5tYXg7aWYoYTxjKWJyZWFrO2lmKCEoYT51KSl7bz1hPChjK3UpLzI/bDpsKzE7YnJlYWt9bz1sKzF9dmFyIGY9dC5fQltvXXx8MDtyZXR1cm4gaXNGaW5pdGUoZik/UihlLHQuX20yLGYpOjB9LE49ZnVuY3Rpb24oZSl7dmFyIHI9dC5fcmFuZ2VicmVha3MubGVuZ3RoO2lmKCFyKXJldHVybiBGKGUsdC5fbSx0Ll9iKTtmb3IodmFyIG49MCxpPTA7aTxyJiYhKGU8dC5fcmFuZ2VicmVha3NbaV0ucG1pbik7aSsrKWU+dC5fcmFuZ2VicmVha3NbaV0ucG1heCYmKG49aSsxKTtyZXR1cm4gRihlLHQuX20yLHQuX0Jbbl0pfX10LmMybD0ibG9nIj09PXQudHlwZT9FOmYsdC5sMmM9ImxvZyI9PT10LnR5cGU/TTpmLHQubDJwPUIsdC5wMmw9Tix0LmMycD0ibG9nIj09PXQudHlwZT9mdW5jdGlvbih0LGUpe3JldHVybiBCKEUodCxlKSl9OkIsdC5wMmM9ImxvZyI9PT10LnR5cGU/ZnVuY3Rpb24odCl7cmV0dXJuIE0oTih0KSl9Ok4sLTEhPT1bImxpbmVhciIsIi0iXS5pbmRleE9mKHQudHlwZSk/KHQuZDJyPXQucjJkPXQuZDJjPXQucjJjPXQuZDJsPXQucjJsPWwsdC5jMmQ9dC5jMnI9dC5sMmQ9dC5sMnI9Zix0LmQycD10LnIycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAobChlKSl9LHQucDJkPXQucDJyPU4sdC5jbGVhblBvcz1mKToibG9nIj09PXQudHlwZT8odC5kMnI9dC5kMmw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gRShsKHQpLGUpfSx0LnIyZD10LnIyYz1mdW5jdGlvbih0KXtyZXR1cm4gTShsKHQpKX0sdC5kMmM9dC5yMmw9bCx0LmMyZD10Lmwycj1mLHQuYzJyPUUsdC5sMmQ9TSx0LmQycD1mdW5jdGlvbihlLHIpe3JldHVybiB0LmwycCh0LmQycihlLHIpKX0sdC5wMmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE0oTih0KSl9LHQucjJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmwycChsKGUpKX0sdC5wMnI9Tix0LmNsZWFuUG9zPWYpOiJkYXRlIj09PXQudHlwZT8odC5kMnI9dC5yMmQ9YS5pZGVudGl0eSx0LmQyYz10LnIyYz10LmQybD10LnIybD1MLHQuYzJkPXQuYzJyPXQubDJkPXQubDJyPUMsdC5kMnA9dC5yMnA9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmwycChMKGUsMCxuKSl9LHQucDJkPXQucDJyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gQyhOKHQpLGUscil9LHQuY2xlYW5Qb3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGEuY2xlYW5EYXRlKGUsbSx0LmNhbGVuZGFyKX0pOiJjYXRlZ29yeSI9PT10LnR5cGU/KHQuZDJjPXQuZDJsPUksdC5yMmQ9dC5jMmQ9dC5sMmQ9UCx0LmQycj10LmQybF9ub2FkZD16LHQucjJjPWZ1bmN0aW9uKGUpe3ZhciByPUQoZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmZyYWN0aW9uMnIoLjUpfSx0Lmwycj10LmMycj1mLHQucjJsPUQsdC5kMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJwKHQucjJjKGUpKX0sdC5wMmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFAoTih0KSl9LHQucjJwPXQuZDJwLHQucDJyPU4sdC5jbGVhblBvcz1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJiIiIT09dD90OmYodCl9KToibXVsdGljYXRlZ29yeSI9PT10LnR5cGUmJih0LnIyZD10LmMyZD10LmwyZD1QLHQuZDJyPXQuZDJsX25vYWRkPXosdC5yMmM9ZnVuY3Rpb24oZSl7dmFyIHI9eihlKTtyZXR1cm4gdm9pZCAwIT09cj9yOnQuZnJhY3Rpb24yciguNSl9LHQucjJjX2p1c3RfaW5kaWNlcz1PLHQubDJyPXQuYzJyPWYsdC5yMmw9eix0LmQycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAodC5yMmMoZSkpfSx0LnAyZD1mdW5jdGlvbih0KXtyZXR1cm4gUChOKHQpKX0sdC5yMnA9dC5kMnAsdC5wMnI9Tix0LmNsZWFuUG9zPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHwic3RyaW5nIj09dHlwZW9mIHQmJiIiIT09dD90OmYodCl9LHQuc2V0dXBNdWx0aUNhdGVnb3J5PWZ1bmN0aW9uKG4pe3ZhciBpLG8scz10Ll90cmFjZUluZGljZXMsbD10Ll9tYXRjaEdyb3VwO2lmKGwmJjA9PT10Ll9jYXRlZ29yaWVzLmxlbmd0aClmb3IodmFyIGMgaW4gbClpZihjIT09cil7dmFyIHU9ZVt3LmlkMm5hbWUoYyldO3M9cy5jb25jYXQodS5fdHJhY2VJbmRpY2VzKX12YXIgZj1bWzAse31dLFswLHt9XV0sZD1bXTtmb3IoaT0wO2k8cy5sZW5ndGg7aSsrKXt2YXIgbT1uW3NbaV1dO2lmKHAgaW4gbSl7dmFyIGc9bVtwXSx2PW0uX2xlbmd0aHx8YS5taW5Sb3dMZW5ndGgoZyk7aWYoaChnWzBdKSYmaChnWzFdKSlmb3Iobz0wO288djtvKyspe3ZhciB5PWdbMF1bb10seD1nWzFdW29dO1MoeSkmJlMoeCkmJihkLnB1c2goW3kseF0pLHkgaW4gZlswXVsxXXx8KGZbMF1bMV1beV09ZlswXVswXSsrKSx4IGluIGZbMV1bMV18fChmWzFdWzFdW3hdPWZbMV1bMF0rKykpfX19Zm9yKGQuc29ydCgoZnVuY3Rpb24odCxlKXt2YXIgcj1mWzBdWzFdLG49clt0WzBdXS1yW2VbMF1dO2lmKG4pcmV0dXJuIG47dmFyIGk9ZlsxXVsxXTtyZXR1cm4gaVt0WzFdXS1pW2VbMV1dfSkpLGk9MDtpPGQubGVuZ3RoO2krKylJKGRbaV0pfSksdC5mcmFjdGlvbjJyPWZ1bmN0aW9uKGUpe3ZhciByPXQucjJsKHQucmFuZ2VbMF0pLG49dC5yMmwodC5yYW5nZVsxXSk7cmV0dXJuIHQubDJyKHIrZSoobi1yKSl9LHQucjJmcmFjdGlvbj1mdW5jdGlvbihlKXt2YXIgcj10LnIybCh0LnJhbmdlWzBdKSxuPXQucjJsKHQucmFuZ2VbMV0pO3JldHVybih0LnIybChlKS1yKS8obi1yKX0sdC5jbGVhblJhbmdlPWZ1bmN0aW9uKGUscil7cnx8KHI9e30pLGV8fChlPSJyYW5nZSIpO3ZhciBuLGksbz1hLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCk7aWYoaT0oaT0iZGF0ZSI9PT10LnR5cGU/YS5kZmx0UmFuZ2UodC5jYWxlbmRhcik6InkiPT09cD9ULkRGTFRSQU5HRVk6ci5kZmx0UmFuZ2V8fFQuREZMVFJBTkdFWCkuc2xpY2UoKSwidG96ZXJvIiE9PXQucmFuZ2Vtb2RlJiYibm9ubmVnYXRpdmUiIT09dC5yYW5nZW1vZGV8fChpWzBdPTApLG8mJjI9PT1vLmxlbmd0aClmb3IoImRhdGUiIT09dC50eXBlfHx0LmF1dG9yYW5nZXx8KG9bMF09YS5jbGVhbkRhdGUob1swXSxtLHQuY2FsZW5kYXIpLG9bMV09YS5jbGVhbkRhdGUob1sxXSxtLHQuY2FsZW5kYXIpKSxuPTA7bjwyO24rKylpZigiZGF0ZSI9PT10LnR5cGUpe2lmKCFhLmlzRGF0ZVRpbWUob1tuXSx0LmNhbGVuZGFyKSl7dFtlXT1pO2JyZWFrfWlmKHQucjJsKG9bMF0pPT09dC5yMmwob1sxXSkpe3ZhciBsPWEuY29uc3RyYWluKHQucjJsKG9bMF0pLGEuTUlOX01TKzFlMyxhLk1BWF9NUy0xZTMpO29bMF09dC5sMnIobC0xZTMpLG9bMV09dC5sMnIobCsxZTMpO2JyZWFrfX1lbHNle2lmKCFzKG9bbl0pKXtpZighcyhvWzEtbl0pKXt0W2VdPWk7YnJlYWt9b1tuXT1vWzEtbl0qKG4/MTA6LjEpfWlmKG9bbl08LWQ/b1tuXT0tZDpvW25dPmQmJihvW25dPWQpLG9bMF09PT1vWzFdKXt2YXIgYz1NYXRoLm1heCgxLE1hdGguYWJzKDFlLTYqb1swXSkpO29bMF0tPWMsb1sxXSs9Y319ZWxzZSBhLm5lc3RlZFByb3BlcnR5KHQsZSkuc2V0KGkpfSx0LnNldFNjYWxlPWZ1bmN0aW9uKHIpe3ZhciBuPWUuX3NpemU7aWYodC5vdmVybGF5aW5nKXt2YXIgaT13LmdldEZyb21JZCh7X2Z1bGxMYXlvdXQ6ZX0sdC5vdmVybGF5aW5nKTt0LmRvbWFpbj1pLmRvbWFpbn12YXIgYT1yJiZ0Ll9yPyJfciI6InJhbmdlIixvPXQuY2FsZW5kYXI7dC5jbGVhblJhbmdlKGEpO3ZhciBzLGwsYz10LnIybCh0W2FdWzBdLG8pLHU9dC5yMmwodFthXVsxXSxvKSxmPSJ5Ij09PXA7aWYoKGY/KHQuX29mZnNldD1uLnQrKDEtdC5kb21haW5bMV0pKm4uaCx0Ll9sZW5ndGg9bi5oKih0LmRvbWFpblsxXS10LmRvbWFpblswXSksdC5fbT10Ll9sZW5ndGgvKGMtdSksdC5fYj0tdC5fbSp1KToodC5fb2Zmc2V0PW4ubCt0LmRvbWFpblswXSpuLncsdC5fbGVuZ3RoPW4udyoodC5kb21haW5bMV0tdC5kb21haW5bMF0pLHQuX209dC5fbGVuZ3RoLyh1LWMpLHQuX2I9LXQuX20qYyksdC5fcmFuZ2VicmVha3M9W10sdC5fbEJyZWFrcz0wLHQuX20yPTAsdC5fQj1bXSx0LnJhbmdlYnJlYWtzKSYmKHQuX3JhbmdlYnJlYWtzPXQubG9jYXRlQnJlYWtzKE1hdGgubWluKGMsdSksTWF0aC5tYXgoYyx1KSksdC5fcmFuZ2VicmVha3MubGVuZ3RoKSl7Zm9yKHM9MDtzPHQuX3JhbmdlYnJlYWtzLmxlbmd0aDtzKyspbD10Ll9yYW5nZWJyZWFrc1tzXSx0Ll9sQnJlYWtzKz1NYXRoLmFicyhsLm1heC1sLm1pbik7dmFyIGg9ZjtjPnUmJihoPSFoKSxoJiZ0Ll9yYW5nZWJyZWFrcy5yZXZlcnNlKCk7dmFyIGQ9aD8tMToxO2Zvcih0Ll9tMj1kKnQuX2xlbmd0aC8oTWF0aC5hYnModS1jKS10Ll9sQnJlYWtzKSx0Ll9CLnB1c2goLXQuX20yKihmP3U6YykpLHM9MDtzPHQuX3JhbmdlYnJlYWtzLmxlbmd0aDtzKyspbD10Ll9yYW5nZWJyZWFrc1tzXSx0Ll9CLnB1c2godC5fQlt0Ll9CLmxlbmd0aC0xXS1kKnQuX20yKihsLm1heC1sLm1pbikpO2ZvcihzPTA7czx0Ll9yYW5nZWJyZWFrcy5sZW5ndGg7cysrKShsPXQuX3JhbmdlYnJlYWtzW3NdKS5wbWluPUIobC5taW4pLGwucG1heD1CKGwubWF4KX1pZighaXNGaW5pdGUodC5fbSl8fCFpc0Zpbml0ZSh0Ll9iKXx8dC5fbGVuZ3RoPDApdGhyb3cgZS5fcmVwbG90dGluZz0hMSxuZXcgRXJyb3IoIlNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggYXhpcyBzY2FsaW5nIil9LHQubWFza0JyZWFrcz1mdW5jdGlvbihlKXt2YXIgcixuLGksbyxzLGM9dC5yYW5nZWJyZWFrc3x8W107Yy5fY2FjaGVkUGF0dGVybnN8fChjLl9jYWNoZWRQYXR0ZXJucz1jLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZW5hYmxlZCYmZS5ib3VuZHM/YS5zaW1wbGVNYXAoZS5ib3VuZHMsZS5wYXR0ZXJuP2w6dC5kMmMpOm51bGx9KSkpLGMuX2NhY2hlZFZhbHVlc3x8KGMuX2NhY2hlZFZhbHVlcz1jLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZW5hYmxlZCYmZS52YWx1ZXM/YS5zaW1wbGVNYXAoZS52YWx1ZXMsdC5kMmMpLnNvcnQoYS5zb3J0ZXJBc2MpOm51bGx9KSkpO2Zvcih2YXIgdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgZj1jW3VdO2lmKGYuZW5hYmxlZClpZihmLmJvdW5kcyl7dmFyIGg9Zi5wYXR0ZXJuO3N3aXRjaChuPShyPWMuX2NhY2hlZFBhdHRlcm5zW3VdKVswXSxpPXJbMV0saCl7Y2FzZSBBOm89KHM9bmV3IERhdGUoZSkpLmdldFVUQ0RheSgpLG4+aSYmKGkrPTcsbzxuJiYobys9NykpO2JyZWFrO2Nhc2UgazpvPShzPW5ldyBEYXRlKGUpKS5nZXRVVENIb3VycygpKyhzLmdldFVUQ01pbnV0ZXMoKS82MCtzLmdldFVUQ1NlY29uZHMoKS8zNjAwK3MuZ2V0VVRDTWlsbGlzZWNvbmRzKCkvMzZlNSksbj5pJiYoaSs9MjQsbzxuJiYobys9MjQpKTticmVhaztjYXNlIiI6bz1lfWlmKG8+PW4mJm88aSlyZXR1cm4gbX1lbHNlIGZvcih2YXIgcD1jLl9jYWNoZWRWYWx1ZXNbdV0sZD0wO2Q8cC5sZW5ndGg7ZCsrKWlmKGk9KG49cFtkXSkrZi5kdmFsdWUsZT49biYmZTxpKXJldHVybiBtfXJldHVybiBlfSx0LmxvY2F0ZUJyZWFrcz1mdW5jdGlvbihlLHIpe3ZhciBuLGksbyxzLGM9W107aWYoIXQucmFuZ2VicmVha3MpcmV0dXJuIGM7dmFyIHU9dC5yYW5nZWJyZWFrcy5zbGljZSgpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucGF0dGVybj09PUEmJmUucGF0dGVybj09PWs/LTE6ZS5wYXR0ZXJuPT09QSYmdC5wYXR0ZXJuPT09az8xOjB9KSksZj1mdW5jdGlvbih0LG4pe2lmKCh0PWEuY29uc3RyYWluKHQsZSxyKSkhPT0obj1hLmNvbnN0cmFpbihuLGUscikpKXtmb3IodmFyIGk9ITAsbz0wO288Yy5sZW5ndGg7bysrKXt2YXIgcz1jW29dO3Q8cy5tYXgmJm4+PXMubWluJiYodDxzLm1pbiYmKHMubWluPXQpLG4+cy5tYXgmJihzLm1heD1uKSxpPSExKX1pJiZjLnB1c2goe21pbjp0LG1heDpufSl9fTtmb3Iobj0wO248dS5sZW5ndGg7bisrKXt2YXIgaD11W25dO2lmKGguZW5hYmxlZClpZihoLmJvdW5kcyl7dmFyIHA9ZSxkPXI7aC5wYXR0ZXJuJiYocD1NYXRoLmZsb29yKHApKSxvPShpPWEuc2ltcGxlTWFwKGguYm91bmRzLGgucGF0dGVybj9sOnQucjJsKSlbMF0scz1pWzFdO3ZhciBtLGcsdz1uZXcgRGF0ZShwKTtzd2l0Y2goaC5wYXR0ZXJuKXtjYXNlIEE6Zz12LG09KHMtbysoczxvPzc6MCkpKnkscCs9byp5LSh3LmdldFVUQ0RheSgpKnkrdy5nZXRVVENIb3VycygpKngrdy5nZXRVVENNaW51dGVzKCkqYit3LmdldFVUQ1NlY29uZHMoKSpfK3cuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpO2JyZWFrO2Nhc2UgazpnPXksbT0ocy1vKyhzPG8/MjQ6MCkpKngscCs9byp4LSh3LmdldFVUQ0hvdXJzKCkqeCt3LmdldFVUQ01pbnV0ZXMoKSpiK3cuZ2V0VVRDU2Vjb25kcygpKl8rdy5nZXRVVENNaWxsaXNlY29uZHMoKSk7YnJlYWs7ZGVmYXVsdDpwPU1hdGgubWluKGlbMF0saVsxXSksbT1nPShkPU1hdGgubWF4KGlbMF0saVsxXSkpLXB9Zm9yKHZhciBUPXA7VDxkO1QrPWcpZihULFQrbSl9ZWxzZSBmb3IodmFyIE09YS5zaW1wbGVNYXAoaC52YWx1ZXMsdC5kMmMpLFM9MDtTPE0ubGVuZ3RoO1MrKylmKG89TVtTXSxzPW8raC5kdmFsdWUpfXJldHVybiBjLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubWluLWUubWlufSkpLGN9LHQubWFrZUNhbGNkYXRhPWZ1bmN0aW9uKGUscixuKXt2YXIgaSxvLHMsbCxjPXQudHlwZSx1PSJkYXRlIj09PWMmJmVbcisiY2FsZW5kYXIiXTtpZihyIGluIGUpe2lmKGk9ZVtyXSxsPWUuX2xlbmd0aHx8YS5taW5Sb3dMZW5ndGgoaSksYS5pc1R5cGVkQXJyYXkoaSkmJigibGluZWFyIj09PWN8fCJsb2ciPT09Yykpe2lmKGw9PT1pLmxlbmd0aClyZXR1cm4gaTtpZihpLnN1YmFycmF5KXJldHVybiBpLnN1YmFycmF5KDAsbCl9aWYoIm11bHRpY2F0ZWdvcnkiPT09YylyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXt2YXIgaT0odFswXXx8W10pW25dLGE9KHRbMV18fFtdKVtuXTtyW25dPU8oW2ksYV0pfXJldHVybiByfShpLGwpO2ZvcihvPW5ldyBBcnJheShsKSxzPTA7czxsO3MrKylvW3NdPXQuZDJjKGlbc10sMCx1LG4pfWVsc2V7dmFyIGY9cisiMCJpbiBlP3QuZDJjKGVbcisiMCJdLDAsdSk6MCxoPWVbImQiK3JdP051bWJlcihlWyJkIityXSk6MTtmb3IoaT1lW3t4OiJ5Iix5OiJ4In1bcl1dLGw9ZS5fbGVuZ3RofHxpLmxlbmd0aCxvPW5ldyBBcnJheShsKSxzPTA7czxsO3MrKylvW3NdPWYrcypofWlmKHQucmFuZ2VicmVha3MpZm9yKHM9MDtzPGw7cysrKW9bc109dC5tYXNrQnJlYWtzKG9bc10pO3JldHVybiBvfSx0LmlzVmFsaWRSYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmMj09PWUubGVuZ3RoJiZzKHQucjJsKGVbMF0pKSYmcyh0LnIybChlWzFdKSl9LHQuaXNQdFdpdGhpblJhbmdlPWZ1bmN0aW9uKGUscil7dmFyIG49dC5jMmwoZVtwXSxudWxsLHIpLGk9dC5yMmwodC5yYW5nZVswXSksYT10LnIybCh0LnJhbmdlWzFdKTtyZXR1cm4gaTxhP2k8PW4mJm48PWE6YTw9biYmbjw9aX0sdC5fZW1wdHlDYXRlZ29yaWVzPWZ1bmN0aW9uKCl7dC5fY2F0ZWdvcmllcz1bXSx0Ll9jYXRlZ29yaWVzTWFwPXt9fSx0LmNsZWFyQ2FsYz1mdW5jdGlvbigpe3ZhciByPXQuX21hdGNoR3JvdXA7aWYocil7dmFyIG49bnVsbCxpPW51bGw7Zm9yKHZhciBhIGluIHIpe3ZhciBvPWVbdy5pZDJuYW1lKGEpXTtpZihvLl9jYXRlZ29yaWVzKXtuPW8uX2NhdGVnb3JpZXMsaT1vLl9jYXRlZ29yaWVzTWFwO2JyZWFrfX1uJiZpPyh0Ll9jYXRlZ29yaWVzPW4sdC5fY2F0ZWdvcmllc01hcD1pKTp0Ll9lbXB0eUNhdGVnb3JpZXMoKX1lbHNlIHQuX2VtcHR5Q2F0ZWdvcmllcygpO2lmKHQuX2luaXRpYWxDYXRlZ29yaWVzKWZvcih2YXIgcz0wO3M8dC5faW5pdGlhbENhdGVnb3JpZXMubGVuZ3RoO3MrKylJKHQuX2luaXRpYWxDYXRlZ29yaWVzW3NdKX0sdC5zb3J0QnlJbml0aWFsQ2F0ZWdvcmllcz1mdW5jdGlvbigpe3ZhciBuPVtdO2lmKHQuX2VtcHR5Q2F0ZWdvcmllcygpLHQuX2luaXRpYWxDYXRlZ29yaWVzKWZvcih2YXIgaT0wO2k8dC5faW5pdGlhbENhdGVnb3JpZXMubGVuZ3RoO2krKylJKHQuX2luaXRpYWxDYXRlZ29yaWVzW2ldKTtuPW4uY29uY2F0KHQuX3RyYWNlSW5kaWNlcyk7dmFyIGE9dC5fbWF0Y2hHcm91cDtmb3IodmFyIG8gaW4gYSlpZihyIT09byl7dmFyIHM9ZVt3LmlkMm5hbWUobyldO3MuX2NhdGVnb3JpZXM9dC5fY2F0ZWdvcmllcyxzLl9jYXRlZ29yaWVzTWFwPXQuX2NhdGVnb3JpZXNNYXAsbj1uLmNvbmNhdChzLl90cmFjZUluZGljZXMpfXJldHVybiBufTt2YXIgVT1lLl9kM2xvY2FsZTsiZGF0ZSI9PT10LnR5cGUmJih0Ll9kYXRlRm9ybWF0PVU/VS50aW1lRm9ybWF0OmksdC5fZXh0cmFGb3JtYXQ9ZS5fZXh0cmFGb3JtYXQpLHQuX3NlcGFyYXRvcnM9ZS5zZXBhcmF0b3JzLHQuX251bUZvcm1hdD1VP1UubnVtYmVyRm9ybWF0Om8sZGVsZXRlIHQuX21pbkR0aWNrLGRlbGV0ZSB0Ll9mb3JjZVRpY2swfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuL2F4aXNfaWRzIjo4MzEsIi4vY29uc3RhbnRzIjo4MzQsIkBwbG90bHkvZDMiOjU4LCJkMy10aW1lLWZvcm1hdCI6MTY4LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sODQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLmNvbnRyYXN0LGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIik7ZnVuY3Rpb24gcyh0KXt2YXIgZT1bInNob3dleHBvbmVudCIsInNob3d0aWNrcHJlZml4Iiwic2hvd3RpY2tzdWZmaXgiXS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10W2VdfSkpO2lmKGUuZXZlcnkoKGZ1bmN0aW9uKHIpe3JldHVybiB0W3JdPT09dFtlWzBdXX0pKXx8MT09PWUubGVuZ3RoKXJldHVybiB0W2VbMF1dfWZ1bmN0aW9uIGwodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLnRpY2tmb3JtYXRzdG9wcyxyLGkpfXIoImVuYWJsZWQiKSYmKHIoImR0aWNrcmFuZ2UiKSxyKCJ2YWx1ZSIpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyx1LGYpe2YmJjEhPT1mLnBhc3N8fGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9cyh0KTtyKCJ0aWNrcHJlZml4IikmJnIoInNob3d0aWNrcHJlZml4IixhKTtyKCJ0aWNrc3VmZml4IixpLnRpY2tTdWZmaXhEZmx0KSYmcigic2hvd3RpY2tzdWZmaXgiLGEpfSh0LDAsciwwLHUpLGYmJjIhPT1mLnBhc3N8fGZ1bmN0aW9uKHQsZSxyLGMsdSl7dmFyIGY9cyh0KTtyKCJ0aWNrcHJlZml4IikmJnIoInNob3d0aWNrcHJlZml4IixmKTtyKCJ0aWNrc3VmZml4Iix1LnRpY2tTdWZmaXhEZmx0KSYmcigic2hvd3RpY2tzdWZmaXgiLGYpO2lmKHIoInNob3d0aWNrbGFiZWxzIikpe3ZhciBoPXUuZm9udHx8e30scD1lLmNvbG9yLGQ9LTEhPT0oZS50aWNrbGFiZWxwb3NpdGlvbnx8IiIpLmluZGV4T2YoImluc2lkZSIpP2kodS5iZ0NvbG9yKTpwJiZwIT09YS5jb2xvci5kZmx0P3A6aC5jb2xvcjtpZihuLmNvZXJjZUZvbnQociwidGlja2ZvbnQiLHtmYW1pbHk6aC5mYW1pbHksc2l6ZTpoLnNpemUsY29sb3I6ZH0pLHIoInRpY2thbmdsZSIpLCJjYXRlZ29yeSIhPT1jKXt2YXIgbT1yKCJ0aWNrZm9ybWF0Iik7byh0LGUse25hbWU6InRpY2tmb3JtYXRzdG9wcyIsaW5jbHVzaW9uQXR0cjoiZW5hYmxlZCIsaGFuZGxlSXRlbURlZmF1bHRzOmx9KSxlLnRpY2tmb3JtYXRzdG9wcy5sZW5ndGh8fGRlbGV0ZSBlLnRpY2tmb3JtYXRzdG9wcyxtfHwiZGF0ZSI9PT1jfHwocigic2hvd2V4cG9uZW50IixmKSxyKCJleHBvbmVudGZvcm1hdCIpLHIoIm1pbmV4cG9uZW50Iikscigic2VwYXJhdGV0aG91c2FuZHMiKSl9fX0odCxlLHIsYyx1KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9saWIiOjc3NiwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo4MjIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg0Mn1dLDg1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bi5jb2VyY2UyKHQsZSxpLCJ0aWNrbGVuIikscz1uLmNvZXJjZTIodCxlLGksInRpY2t3aWR0aCIpLGw9bi5jb2VyY2UyKHQsZSxpLCJ0aWNrY29sb3IiLGUuY29sb3IpO3IoInRpY2tzIixhLm91dGVyVGlja3N8fG98fHN8fGw/Im91dHNpZGUiOiIiKXx8KGRlbGV0ZSBlLnRpY2tsZW4sZGVsZXRlIGUudGlja3dpZHRoLGRlbGV0ZSBlLnRpY2tjb2xvcil9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDJ9XSw4NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jbGVhbl90aWNrcyIpLGk9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZnVuY3Rpb24gbyhyKXt2YXIgbj10W3JdO3JldHVybiB2b2lkIDAhPT1uP246KGUuX3RlbXBsYXRlfHx7fSlbcl19dmFyIHM9bygidGljazAiKSxsPW8oImR0aWNrIiksYz1vKCJ0aWNrdmFscyIpLHU9cigidGlja21vZGUiLGkoYyk/ImFycmF5IjpsPyJsaW5lYXIiOiJhdXRvIik7aWYoImF1dG8iPT09dSlyKCJudGlja3MiKTtlbHNlIGlmKCJsaW5lYXIiPT09dSl7dmFyIGY9ZS5kdGljaz1uLmR0aWNrKGwsYSk7ZS50aWNrMD1uLnRpY2swKHMsYSxlLmNhbGVuZGFyLGYpfWVsc2UgaWYoIm11bHRpY2F0ZWdvcnkiIT09YSl7dm9pZCAwPT09cigidGlja3ZhbHMiKT9lLnRpY2ttb2RlPSJhdXRvIjpyKCJ0aWNrdGV4dCIpfX19LHsiLi4vLi4vbGliIjo3NzYsIi4vY2xlYW5fdGlja3MiOjgzM31dLDg1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4vYXhlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXt2YXIgYz10Ll9mdWxsTGF5b3V0O2lmKDAhPT1lLmxlbmd0aCl7dmFyIHUsZixoLHA7bCYmKHU9bCgpKTt2YXIgZD1uLmVhc2Uoci5lYXNpbmcpO3JldHVybiB0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShwKSxwPW51bGwsZnVuY3Rpb24oKXtmb3IodmFyIHI9e30sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgYT1lW25dLG89YS5wbG90aW5mby54YXhpcyxzPWEucGxvdGluZm8ueWF4aXM7YS54cjAmJihyW28uX25hbWUrIi5yYW5nZSJdPWEueHIwLnNsaWNlKCkpLGEueXIwJiYocltzLl9uYW1lKyIucmFuZ2UiXT1hLnlyMC5zbGljZSgpKX1yZXR1cm4gaS5jYWxsKCJyZWxheW91dCIsdCxyKS50aGVuKChmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKW0oZVt0XS5wbG90aW5mbyl9KSl9KCl9KSksZj1EYXRlLm5vdygpLHA9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24gbigpe2g9RGF0ZS5ub3coKTtmb3IodmFyIGE9TWF0aC5taW4oMSwoaC1mKS9yLmR1cmF0aW9uKSxvPWQoYSkscz0wO3M8ZS5sZW5ndGg7cysrKWcoZVtzXSxvKTtoLWY+ci5kdXJhdGlvbj8oIWZ1bmN0aW9uKCl7Zm9yKHZhciByPXt9LG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXSxvPWEucGxvdGluZm8ueGF4aXMscz1hLnBsb3RpbmZvLnlheGlzO2EueHIxJiYocltvLl9uYW1lKyIucmFuZ2UiXT1hLnhyMS5zbGljZSgpKSxhLnlyMSYmKHJbcy5fbmFtZSsiLnJhbmdlIl09YS55cjEuc2xpY2UoKSl9dSYmdSgpLGkuY2FsbCgicmVsYXlvdXQiLHQscikudGhlbigoZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyltKGVbdF0ucGxvdGluZm8pfSkpfSgpLHA9d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKG4pKTpwPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9KSksUHJvbWlzZS5yZXNvbHZlKCl9ZnVuY3Rpb24gbSh0KXt2YXIgZT10LnhheGlzLHI9dC55YXhpcztjLl9kZWZzLnNlbGVjdCgiIyIrdC5jbGlwSWQrIj4gcmVjdCIpLmNhbGwoby5zZXRUcmFuc2xhdGUsMCwwKS5jYWxsKG8uc2V0U2NhbGUsMSwxKSx0LnBsb3QuY2FsbChvLnNldFRyYW5zbGF0ZSxlLl9vZmZzZXQsci5fb2Zmc2V0KS5jYWxsKG8uc2V0U2NhbGUsMSwxKTt2YXIgbj10LnBsb3Quc2VsZWN0QWxsKCIuc2NhdHRlcmxheWVyIC50cmFjZSIpO24uc2VsZWN0QWxsKCIucG9pbnQiKS5jYWxsKG8uc2V0UG9pbnRHcm91cFNjYWxlLDEsMSksbi5zZWxlY3RBbGwoIi50ZXh0cG9pbnQiKS5jYWxsKG8uc2V0VGV4dFBvaW50c1NjYWxlLDEsMSksbi5jYWxsKG8uaGlkZU91dHNpZGVSYW5nZVBvaW50cyx0KX1mdW5jdGlvbiBnKGUscil7dmFyIG49ZS5wbG90aW5mbyxpPW4ueGF4aXMsbD1uLnlheGlzLGM9aS5fbGVuZ3RoLHU9bC5fbGVuZ3RoLGY9ISFlLnhyMSxoPSEhZS55cjEscD1bXTtpZihmKXt2YXIgZD1hLnNpbXBsZU1hcChlLnhyMCxpLnIybCksbT1hLnNpbXBsZU1hcChlLnhyMSxpLnIybCksZz1kWzFdLWRbMF0sdj1tWzFdLW1bMF07cFswXT0oZFswXSooMS1yKStyKm1bMF0tZFswXSkvKGRbMV0tZFswXSkqYyxwWzJdPWMqKDEtcityKnYvZyksaS5yYW5nZVswXT1pLmwycihkWzBdKigxLXIpK3IqbVswXSksaS5yYW5nZVsxXT1pLmwycihkWzFdKigxLXIpK3IqbVsxXSl9ZWxzZSBwWzBdPTAscFsyXT1jO2lmKGgpe3ZhciB5PWEuc2ltcGxlTWFwKGUueXIwLGwucjJsKSx4PWEuc2ltcGxlTWFwKGUueXIxLGwucjJsKSxiPXlbMV0teVswXSxfPXhbMV0teFswXTtwWzFdPSh5WzFdKigxLXIpK3IqeFsxXS15WzFdKS8oeVswXS15WzFdKSp1LHBbM109dSooMS1yK3IqXy9iKSxsLnJhbmdlWzBdPWkubDJyKHlbMF0qKDEtcikrcip4WzBdKSxsLnJhbmdlWzFdPWwubDJyKHlbMV0qKDEtcikrcip4WzFdKX1lbHNlIHBbMV09MCxwWzNdPXU7cy5kcmF3T25lKHQsaSx7c2tpcFRpdGxlOiEwfSkscy5kcmF3T25lKHQsbCx7c2tpcFRpdGxlOiEwfSkscy5yZWRyYXdDb21wb25lbnRzKHQsW2kuX2lkLGwuX2lkXSk7dmFyIHc9Zj9jL3BbMl06MSxUPWg/dS9wWzNdOjEsaz1mP3BbMF06MCxBPWg/cFsxXTowLE09Zj9wWzBdL3BbMl0qYzowLFM9aD9wWzFdL3BbM10qdTowLEU9aS5fb2Zmc2V0LU0sTD1sLl9vZmZzZXQtUztuLmNsaXBSZWN0LmNhbGwoby5zZXRUcmFuc2xhdGUsayxBKS5jYWxsKG8uc2V0U2NhbGUsMS93LDEvVCksbi5wbG90LmNhbGwoby5zZXRUcmFuc2xhdGUsRSxMKS5jYWxsKG8uc2V0U2NhbGUsdyxUKSxvLnNldFBvaW50R3JvdXBTY2FsZShuLnpvb21TY2FsZVB0cywxL3csMS9UKSxvLnNldFRleHRQb2ludHNTY2FsZShuLnpvb21TY2FsZVR4dCwxL3csMS9UKX1zLnJlZHJhd0NvbXBvbmVudHModCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi9heGVzIjo4MjcsIkBwbG90bHkvZDMiOjU4fV0sODUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IikudHJhY2VJcyxpPXQoIi4vYXhpc19hdXRvdHlwZSIpO2Z1bmN0aW9uIGEodCl7cmV0dXJue3Y6IngiLGg6InkifVt0Lm9yaWVudGF0aW9ufHwidiJdfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1hKHQpLGk9bih0LCJib3gtdmlvbGluIiksbz1uKHQuX2Z1bGxJbnB1dHx8e30sImNhbmRsZXN0aWNrIik7cmV0dXJuIGkmJiFvJiZlPT09ciYmdm9pZCAwPT09dFtyXSYmdm9pZCAwPT09dFtyKyIwIl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3IoImF1dG90eXBlbnVtYmVycyIscy5hdXRvdHlwZW51bWJlcnNEZmx0KSwiLSI9PT1yKCJ0eXBlIiwocy5zcGxvbVN0YXNofHx7fSkudHlwZSkmJighZnVuY3Rpb24odCxlKXtpZigiLSIhPT10LnR5cGUpcmV0dXJuO3ZhciByLHM9dC5faWQsbD1zLmNoYXJBdCgwKTstMSE9PXMuaW5kZXhPZigic2NlbmUiKSYmKHM9bCk7dmFyIGM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2lmKCJzcGxvbSI9PT1pLnR5cGUmJmkuX2xlbmd0aD4wJiYoaVsiXyIrcisiYXhlcyJdfHx7fSlbZV0pcmV0dXJuIGk7aWYoKGlbcisiYXhpcyJdfHxyKT09PWUpe2lmKG8oaSxyKSlyZXR1cm4gaTtpZigoaVtyXXx8W10pLmxlbmd0aHx8aVtyKyIwIl0pcmV0dXJuIGl9fX0oZSxzLGwpO2lmKCFjKXJldHVybjtpZigiaGlzdG9ncmFtIj09PWMudHlwZSYmbD09PXt2OiJ5IixoOiJ4In1bYy5vcmllbnRhdGlvbnx8InYiXSlyZXR1cm4gdm9pZCh0LnR5cGU9ImxpbmVhciIpO3ZhciB1PWwrImNhbGVuZGFyIixmPWNbdV0saD17bm9NdWx0aUNhdGVnb3J5OiFuKGMsImNhcnRlc2lhbiIpfHxuKGMsIm5vTXVsdGlDYXRlZ29yeSIpfTsiYm94Ij09PWMudHlwZSYmYy5faGFzUHJlQ29tcFN0YXRzJiZsPT09e2g6IngiLHY6InkifVtjLm9yaWVudGF0aW9ufHwidiJdJiYoaC5ub011bHRpQ2F0ZWdvcnk9ITApO2lmKGguYXV0b3R5cGVudW1iZXJzPXQuYXV0b3R5cGVudW1iZXJzLG8oYyxsKSl7dmFyIHA9YShjKSxkPVtdO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBtPWVbcl07bihtLCJib3gtdmlvbGluIikmJihtW2wrImF4aXMiXXx8bCk9PT1zJiYodm9pZCAwIT09bVtwXT9kLnB1c2gobVtwXVswXSk6dm9pZCAwIT09bS5uYW1lP2QucHVzaChtLm5hbWUpOmQucHVzaCgidGV4dCIpLG1bdV0hPT1mJiYoZj12b2lkIDApKX10LnR5cGU9aShkLGYsaCl9ZWxzZSBpZigic3Bsb20iPT09Yy50eXBlKXt2YXIgZz1jLmRpbWVuc2lvbnNbYy5fYXhlc0RpbVtzXV07Zy52aXNpYmxlJiYodC50eXBlPWkoZy52YWx1ZXMsZixoKSl9ZWxzZSB0LnR5cGU9aShjW2xdfHxbY1tsKyIwIl1dLGYsaCl9KGUscy5kYXRhKSwiLSI9PT1lLnR5cGU/ZS50eXBlPSJsaW5lYXIiOnQudHlwZT1lLnR5cGUpfX0seyIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2F4aXNfYXV0b3R5cGUiOjgyOH1dLDg1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpLGk9dCgiLi4vbGliIik7ZnVuY3Rpb24gYSh0LGUscil7dmFyIG4sYSxvLHM9ITE7aWYoImRhdGEiPT09ZS50eXBlKW49dC5fZnVsbERhdGFbbnVsbCE9PWUudHJhY2VzP2UudHJhY2VzWzBdOjBdO2Vsc2V7aWYoImxheW91dCIhPT1lLnR5cGUpcmV0dXJuITE7bj10Ll9mdWxsTGF5b3V0fXJldHVybiBhPWkubmVzdGVkUHJvcGVydHkobixlLnByb3ApLmdldCgpLChvPXJbZS50eXBlXT1yW2UudHlwZV18fHt9KS5oYXNPd25Qcm9wZXJ0eShlLnByb3ApJiZvW2UucHJvcF0hPT1hJiYocz0hMCksb1tlLnByb3BdPWEse2NoYW5nZWQ6cyx2YWx1ZTphfX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9W10sbj1lWzBdLGE9e307aWYoInN0cmluZyI9PXR5cGVvZiBuKWFbbl09ZVsxXTtlbHNle2lmKCFpLmlzUGxhaW5PYmplY3QobikpcmV0dXJuIHI7YT1ufXJldHVybiBsKGEsKGZ1bmN0aW9uKHQsZSxuKXtyLnB1c2goe3R5cGU6ImxheW91dCIscHJvcDp0LHZhbHVlOm59KX0pLCIiLDApLHJ9ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG4sYSxvLHM9W107aWYobj1lWzBdLGE9ZVsxXSxyPWVbMl0sbz17fSwic3RyaW5nIj09dHlwZW9mIG4pb1tuXT1hO2Vsc2V7aWYoIWkuaXNQbGFpbk9iamVjdChuKSlyZXR1cm4gcztvPW4sdm9pZCAwPT09ciYmKHI9YSl9cmV0dXJuIHZvaWQgMD09PXImJihyPW51bGwpLGwobywoZnVuY3Rpb24oZSxuLGkpe3ZhciBhLG87aWYoQXJyYXkuaXNBcnJheShpKSl7bz1pLnNsaWNlKCk7dmFyIGw9TWF0aC5taW4oby5sZW5ndGgsdC5kYXRhLmxlbmd0aCk7ciYmKGw9TWF0aC5taW4obCxyLmxlbmd0aCkpLGE9W107Zm9yKHZhciBjPTA7YzxsO2MrKylhW2NdPXI/cltjXTpjfWVsc2Ugbz1pLGE9cj9yLnNsaWNlKCk6bnVsbDtpZihudWxsPT09YSlBcnJheS5pc0FycmF5KG8pJiYobz1vWzBdKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoYSkpe2lmKCFBcnJheS5pc0FycmF5KG8pKXt2YXIgdT1vO289W107Zm9yKHZhciBmPTA7ZjxhLmxlbmd0aDtmKyspb1tmXT11fW8ubGVuZ3RoPU1hdGgubWluKGEubGVuZ3RoLG8ubGVuZ3RoKX1zLnB1c2goe3R5cGU6ImRhdGEiLHByb3A6ZSx0cmFjZXM6YSx2YWx1ZTpvfSl9KSwiIiwwKSxzfWZ1bmN0aW9uIGwodCxlLHIsbil7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oYSl7dmFyIG89dFthXTtpZigiXyIhPT1hWzBdKXt2YXIgcz1yKyhuPjA/Ii4iOiIiKSthO2kuaXNQbGFpbk9iamVjdChvKT9sKG8sZSxzLG4rMSk6ZShzLGEsbyl9fSkpfXIubWFuYWdlQ29tbWFuZE9ic2VydmVyPWZ1bmN0aW9uKHQsZSxuLG8pe3ZhciBzPXt9LGw9ITA7ZSYmZS5fY29tbWFuZE9ic2VydmVyJiYocz1lLl9jb21tYW5kT2JzZXJ2ZXIpLHMuY2FjaGV8fChzLmNhY2hlPXt9KSxzLmxvb2t1cFRhYmxlPXt9O3ZhciBjPXIuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzKHQsbixzLmxvb2t1cFRhYmxlKTtpZihlJiZlLl9jb21tYW5kT2JzZXJ2ZXIpe2lmKGMpcmV0dXJuIHM7aWYoZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSlyZXR1cm4gZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSgpLGUuX2NvbW1hbmRPYnNlcnZlcj1udWxsLHN9aWYoYyl7YSh0LGMscy5jYWNoZSkscy5jaGVjaz1mdW5jdGlvbigpe2lmKGwpe3ZhciBlPWEodCxjLHMuY2FjaGUpO3JldHVybiBlLmNoYW5nZWQmJm8mJnZvaWQgMCE9PXMubG9va3VwVGFibGVbZS52YWx1ZV0mJihzLmRpc2FibGUoKSxQcm9taXNlLnJlc29sdmUobyh7dmFsdWU6ZS52YWx1ZSx0eXBlOmMudHlwZSxwcm9wOmMucHJvcCx0cmFjZXM6Yy50cmFjZXMsaW5kZXg6cy5sb29rdXBUYWJsZVtlLnZhbHVlXX0pKS50aGVuKHMuZW5hYmxlLHMuZW5hYmxlKSksZS5jaGFuZ2VkfX07Zm9yKHZhciB1PVsicGxvdGx5X3JlbGF5b3V0IiwicGxvdGx5X3JlZHJhdyIsInBsb3RseV9yZXN0eWxlIiwicGxvdGx5X3VwZGF0ZSIsInBsb3RseV9hbmltYXRpbmdmcmFtZSIsInBsb3RseV9hZnRlcnBsb3QiXSxmPTA7Zjx1Lmxlbmd0aDtmKyspdC5faW50ZXJuYWxPbih1W2ZdLHMuY2hlY2spO3MucmVtb3ZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx1Lmxlbmd0aDtlKyspdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcih1W2VdLHMuY2hlY2spfX1lbHNlIGkubG9nKCJVbmFibGUgdG8gYXV0b21hdGljYWxseSBiaW5kIHBsb3QgdXBkYXRlcyB0byBBUEkgY29tbWFuZCIpLHMubG9va3VwVGFibGU9e30scy5yZW1vdmU9ZnVuY3Rpb24oKXt9O3JldHVybiBzLmRpc2FibGU9ZnVuY3Rpb24oKXtsPSExfSxzLmVuYWJsZT1mdW5jdGlvbigpe2w9ITB9LGUmJihlLl9jb21tYW5kT2JzZXJ2ZXI9cyksc30sci5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3M9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbz1lLmxlbmd0aDtmb3IoaT0wO2k8bztpKyspe3ZhciBzLGw9ZVtpXSxjPWwubWV0aG9kLHU9bC5hcmdzO2lmKEFycmF5LmlzQXJyYXkodSl8fCh1PVtdKSwhYylyZXR1cm4hMTt2YXIgZj1yLmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3ModCxjLHUpO2lmKDEhPT1mLmxlbmd0aClyZXR1cm4hMTtpZihhKXtpZigocz1mWzBdKS50eXBlIT09YS50eXBlKXJldHVybiExO2lmKHMucHJvcCE9PWEucHJvcClyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KGEudHJhY2VzKSl7aWYoIUFycmF5LmlzQXJyYXkocy50cmFjZXMpKXJldHVybiExO3MudHJhY2VzLnNvcnQoKTtmb3IodmFyIGg9MDtoPGEudHJhY2VzLmxlbmd0aDtoKyspaWYoYS50cmFjZXNbaF0hPT1zLnRyYWNlc1toXSlyZXR1cm4hMX1lbHNlIGlmKHMucHJvcCE9PWEucHJvcClyZXR1cm4hMX1lbHNlIGE9ZlswXSxBcnJheS5pc0FycmF5KGEudHJhY2VzKSYmYS50cmFjZXMuc29ydCgpO3ZhciBwPShzPWZbMF0pLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocCkpe2lmKDEhPT1wLmxlbmd0aClyZXR1cm4hMTtwPXBbMF19biYmKG5bcF09aSl9cmV0dXJuIGF9LHIuZXhlY3V0ZUFQSUNvbW1hbmQ9ZnVuY3Rpb24odCxlLHIpe2lmKCJza2lwIj09PWUpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBhPW4uYXBpTWV0aG9kUmVnaXN0cnlbZV0sbz1bdF07QXJyYXkuaXNBcnJheShyKXx8KHI9W10pO2Zvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKW8ucHVzaChyW3NdKTtyZXR1cm4gYS5hcHBseShudWxsLG8pLmNhdGNoKChmdW5jdGlvbih0KXtyZXR1cm4gaS53YXJuKCJBUEkgY2FsbCB0byBQbG90bHkuIitlKyIgcmVqZWN0ZWQuIix0KSxQcm9taXNlLnJlamVjdCh0KX0pKX0sci5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtzd2l0Y2goQXJyYXkuaXNBcnJheShyKXx8KHI9W10pLGUpe2Nhc2UicmVzdHlsZSI6bj1zKHQscik7YnJlYWs7Y2FzZSJyZWxheW91dCI6bj1vKHQscik7YnJlYWs7Y2FzZSJ1cGRhdGUiOm49cyh0LFtyWzBdLHJbMl1dKS5jb25jYXQobyh0LFtyWzFdXSkpO2JyZWFrO2Nhc2UiYW5pbWF0ZSI6bj1mdW5jdGlvbih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KGVbMF0pJiYxPT09ZVswXS5sZW5ndGgmJi0xIT09WyJzdHJpbmciLCJudW1iZXIiXS5pbmRleE9mKHR5cGVvZiBlWzBdWzBdKT9be3R5cGU6ImxheW91dCIscHJvcDoiX2N1cnJlbnRGcmFtZSIsdmFsdWU6ZVswXVswXS50b1N0cmluZygpfV06W119KDAscik7YnJlYWs7ZGVmYXVsdDpuPVtdfXJldHVybiBufX0seyIuLi9saWIiOjc3NiwiLi4vcmVnaXN0cnkiOjkwNH1dLDg1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtyLmF0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXt2YWxUeXBlOiJpbmZvX2FycmF5IixlZGl0VHlwZToodD10fHx7fSkuZWRpdFR5cGUsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOnQuZWRpdFR5cGV9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOnQuZWRpdFR5cGV9XSxkZmx0OlswLDFdfSxpPSh0Lm5hbWUmJnQubmFtZSx0LnRyYWNlLGUuZGVzY3JpcHRpb24mJmUuZGVzY3JpcHRpb24se3g6bih7fSxyLHt9KSx5Om4oe30scix7fSksZWRpdFR5cGU6dC5lZGl0VHlwZX0pO3JldHVybiB0Lm5vR3JpZENlbGx8fChpLnJvdz17dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOnQuZWRpdFR5cGV9LGkuY29sdW1uPXt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6dC5lZGl0VHlwZX0pLGl9LHIuZGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9biYmbi54fHxbMCwxXSxhPW4mJm4ueXx8WzAsMV0sbz1lLmdyaWQ7aWYobyl7dmFyIHM9cigiZG9tYWluLmNvbHVtbiIpO3ZvaWQgMCE9PXMmJihzPG8uY29sdW1ucz9pPW8uX2RvbWFpbnMueFtzXTpkZWxldGUgdC5kb21haW4uY29sdW1uKTt2YXIgbD1yKCJkb21haW4ucm93Iik7dm9pZCAwIT09bCYmKGw8by5yb3dzP2E9by5fZG9tYWlucy55W2xdOmRlbGV0ZSB0LmRvbWFpbi5yb3cpfXZhciBjPXIoImRvbWFpbi54IixpKSx1PXIoImRvbWFpbi55IixhKTtjWzBdPGNbMV18fCh0LmRvbWFpbi54PWkuc2xpY2UoKSksdVswXTx1WzFdfHwodC5kb21haW4ueT1hLnNsaWNlKCkpfX0seyIuLi9saWIvZXh0ZW5kIjo3NjZ9XSw4NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZWRpdFR5cGUscj10LmNvbG9yRWRpdFR5cGU7dm9pZCAwPT09ciYmKHI9ZSk7dmFyIG49e2ZhbWlseTp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLHN0cmljdDohMCxlZGl0VHlwZTplfSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxLGVkaXRUeXBlOmV9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6cn0sZWRpdFR5cGU6ZX07cmV0dXJuIHQuYXJyYXlPayYmKG4uZmFtaWx5LmFycmF5T2s9ITAsbi5zaXplLmFycmF5T2s9ITAsbi5jb2xvci5hcnJheU9rPSEwKSxufX0se31dLDg1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e19pc0xpbmtlZFRvQXJyYXk6ImZyYW1lc19lbnRyeSIsZ3JvdXA6e3ZhbFR5cGU6InN0cmluZyJ9LG5hbWU6e3ZhbFR5cGU6InN0cmluZyJ9LHRyYWNlczp7dmFsVHlwZToiYW55In0sYmFzZWZyYW1lOnt2YWxUeXBlOiJzdHJpbmcifSxkYXRhOnt2YWxUeXBlOiJhbnkifSxsYXlvdXQ6e3ZhbFR5cGU6ImFueSJ9fX0se31dLDg1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnByb2pOYW1lcz17YWlyeToiYWlyeSIsYWl0b2ZmOiJhaXRvZmYiLCJhbGJlcnMgdXNhIjoiYWxiZXJzVXNhIixhbGJlcnM6ImFsYmVycyIsYXVndXN0OiJhdWd1c3QiLCJhemltdXRoYWwgZXF1YWwgYXJlYSI6ImF6aW11dGhhbEVxdWFsQXJlYSIsImF6aW11dGhhbCBlcXVpZGlzdGFudCI6ImF6aW11dGhhbEVxdWlkaXN0YW50IixiYWtlcjoiYmFrZXIiLGJlcnRpbjE5NTM6ImJlcnRpbjE5NTMiLGJvZ2dzOiJib2dncyIsYm9ubmU6ImJvbm5lIixib3R0b21sZXk6ImJvdHRvbWxleSIsYnJvbWxleToiYnJvbWxleSIsY29sbGlnbm9uOiJjb2xsaWdub24iLCJjb25pYyBjb25mb3JtYWwiOiJjb25pY0NvbmZvcm1hbCIsImNvbmljIGVxdWFsIGFyZWEiOiJjb25pY0VxdWFsQXJlYSIsImNvbmljIGVxdWlkaXN0YW50IjoiY29uaWNFcXVpZGlzdGFudCIsY3JhaWc6ImNyYWlnIixjcmFzdGVyOiJjcmFzdGVyIiwiY3lsaW5kcmljYWwgZXF1YWwgYXJlYSI6ImN5bGluZHJpY2FsRXF1YWxBcmVhIiwiY3lsaW5kcmljYWwgc3RlcmVvZ3JhcGhpYyI6ImN5bGluZHJpY2FsU3RlcmVvZ3JhcGhpYyIsZWNrZXJ0MToiZWNrZXJ0MSIsZWNrZXJ0MjoiZWNrZXJ0MiIsZWNrZXJ0MzoiZWNrZXJ0MyIsZWNrZXJ0NDoiZWNrZXJ0NCIsZWNrZXJ0NToiZWNrZXJ0NSIsZWNrZXJ0NjoiZWNrZXJ0NiIsZWlzZW5sb2hyOiJlaXNlbmxvaHIiLGVxdWlyZWN0YW5ndWxhcjoiZXF1aXJlY3Rhbmd1bGFyIixmYWhleToiZmFoZXkiLCJmb3VjYXV0IHNpbnVzb2lkYWwiOiJmb3VjYXV0U2ludXNvaWRhbCIsZm91Y2F1dDoiZm91Y2F1dCIsZ2luemJ1cmc0OiJnaW56YnVyZzQiLGdpbnpidXJnNToiZ2luemJ1cmc1IixnaW56YnVyZzY6ImdpbnpidXJnNiIsZ2luemJ1cmc4OiJnaW56YnVyZzgiLGdpbnpidXJnOToiZ2luemJ1cmc5Iixnbm9tb25pYzoiZ25vbW9uaWMiLCJncmluZ29ydGVuIHF1aW5jdW5jaWFsIjoiZ3JpbmdvcnRlblF1aW5jdW5jaWFsIixncmluZ29ydGVuOiJncmluZ29ydGVuIixndXlvdToiZ3V5b3UiLGhhbW1lcjoiaGFtbWVyIixoaWxsOiJoaWxsIixob21vbG9zaW5lOiJob21vbG9zaW5lIixodWZuYWdlbDoiaHVmbmFnZWwiLGh5cGVyZWxsaXB0aWNhbDoiaHlwZXJlbGxpcHRpY2FsIixrYXZyYXlza2l5Nzoia2F2cmF5c2tpeTciLGxhZ3JhbmdlOiJsYWdyYW5nZSIsbGFycml2ZWU6ImxhcnJpdmVlIixsYXNrb3dza2k6Imxhc2tvd3NraSIsbG94aW11dGhhbDoibG94aW11dGhhbCIsbWVyY2F0b3I6Im1lcmNhdG9yIixtaWxsZXI6Im1pbGxlciIsbW9sbHdlaWRlOiJtb2xsd2VpZGUiLCJtdCBmbGF0IHBvbGFyIHBhcmFib2xpYyI6Im10RmxhdFBvbGFyUGFyYWJvbGljIiwibXQgZmxhdCBwb2xhciBxdWFydGljIjoibXRGbGF0UG9sYXJRdWFydGljIiwibXQgZmxhdCBwb2xhciBzaW51c29pZGFsIjoibXRGbGF0UG9sYXJTaW51c29pZGFsIiwibmF0dXJhbCBlYXJ0aCI6Im5hdHVyYWxFYXJ0aCIsIm5hdHVyYWwgZWFydGgxIjoibmF0dXJhbEVhcnRoMSIsIm5hdHVyYWwgZWFydGgyIjoibmF0dXJhbEVhcnRoMiIsIm5lbGwgaGFtbWVyIjoibmVsbEhhbW1lciIsbmljb2xvc2k6Im5pY29sb3NpIixvcnRob2dyYXBoaWM6Im9ydGhvZ3JhcGhpYyIscGF0dGVyc29uOiJwYXR0ZXJzb24iLCJwZWlyY2UgcXVpbmN1bmNpYWwiOiJwZWlyY2VRdWluY3VuY2lhbCIscG9seWNvbmljOiJwb2x5Y29uaWMiLCJyZWN0YW5ndWxhciBwb2x5Y29uaWMiOiJyZWN0YW5ndWxhclBvbHljb25pYyIscm9iaW5zb246InJvYmluc29uIixzYXRlbGxpdGU6InNhdGVsbGl0ZSIsInNpbnUgbW9sbHdlaWRlIjoic2ludU1vbGx3ZWlkZSIsc2ludXNvaWRhbDoic2ludXNvaWRhbCIsc3RlcmVvZ3JhcGhpYzoic3RlcmVvZ3JhcGhpYyIsdGltZXM6InRpbWVzIiwidHJhbnN2ZXJzZSBtZXJjYXRvciI6InRyYW5zdmVyc2VNZXJjYXRvciIsInZhbiBkZXIgZ3JpbnRlbiI6InZhbkRlckdyaW50ZW4iLCJ2YW4gZGVyIGdyaW50ZW4yIjoidmFuRGVyR3JpbnRlbjIiLCJ2YW4gZGVyIGdyaW50ZW4zIjoidmFuRGVyR3JpbnRlbjMiLCJ2YW4gZGVyIGdyaW50ZW40IjoidmFuRGVyR3JpbnRlbjQiLHdhZ25lcjQ6IndhZ25lcjQiLHdhZ25lcjY6IndhZ25lcjYiLHdpZWNoZWw6IndpZWNoZWwiLCJ3aW5rZWwgdHJpcGVsIjoid2lua2VsMyIsd2lua2VsMzoid2lua2VsMyJ9LHIuYXhlc05hbWVzPVsibG9uYXhpcyIsImxhdGF4aXMiXSxyLmxvbmF4aXNTcGFuPXtvcnRob2dyYXBoaWM6MTgwLCJhemltdXRoYWwgZXF1YWwgYXJlYSI6MzYwLCJhemltdXRoYWwgZXF1aWRpc3RhbnQiOjM2MCwiY29uaWMgY29uZm9ybWFsIjoxODAsZ25vbW9uaWM6MTYwLHN0ZXJlb2dyYXBoaWM6MTgwLCJ0cmFuc3ZlcnNlIG1lcmNhdG9yIjoxODAsIioiOjM2MH0sci5sYXRheGlzU3Bhbj17ImNvbmljIGNvbmZvcm1hbCI6MTUwLHN0ZXJlb2dyYXBoaWM6MTc5LjUsIioiOjE4MH0sci5zY29wZURlZmF1bHRzPXt3b3JsZDp7bG9uYXhpc1JhbmdlOlstMTgwLDE4MF0sbGF0YXhpc1JhbmdlOlstOTAsOTBdLHByb2pUeXBlOiJlcXVpcmVjdGFuZ3VsYXIiLHByb2pSb3RhdGU6WzAsMCwwXX0sdXNhOntsb25heGlzUmFuZ2U6Wy0xODAsLTUwXSxsYXRheGlzUmFuZ2U6WzE1LDgwXSxwcm9qVHlwZToiYWxiZXJzIHVzYSJ9LGV1cm9wZTp7bG9uYXhpc1JhbmdlOlstMzAsNjBdLGxhdGF4aXNSYW5nZTpbMzAsODVdLHByb2pUeXBlOiJjb25pYyBjb25mb3JtYWwiLHByb2pSb3RhdGU6WzE1LDAsMF0scHJvalBhcmFsbGVsczpbMCw2MF19LGFzaWE6e2xvbmF4aXNSYW5nZTpbMjIsMTYwXSxsYXRheGlzUmFuZ2U6Wy0xNSw1NV0scHJvalR5cGU6Im1lcmNhdG9yIixwcm9qUm90YXRlOlswLDAsMF19LGFmcmljYTp7bG9uYXhpc1JhbmdlOlstMzAsNjBdLGxhdGF4aXNSYW5nZTpbLTQwLDQwXSxwcm9qVHlwZToibWVyY2F0b3IiLHByb2pSb3RhdGU6WzAsMCwwXX0sIm5vcnRoIGFtZXJpY2EiOntsb25heGlzUmFuZ2U6Wy0xODAsLTQ1XSxsYXRheGlzUmFuZ2U6WzUsODVdLHByb2pUeXBlOiJjb25pYyBjb25mb3JtYWwiLHByb2pSb3RhdGU6Wy0xMDAsMCwwXSxwcm9qUGFyYWxsZWxzOlsyOS41LDQ1LjVdfSwic291dGggYW1lcmljYSI6e2xvbmF4aXNSYW5nZTpbLTEwMCwtMzBdLGxhdGF4aXNSYW5nZTpbLTYwLDE1XSxwcm9qVHlwZToibWVyY2F0b3IiLHByb2pSb3RhdGU6WzAsMCwwXX19LHIuY2xpcFBhZD0uMDAxLHIucHJlY2lzaW9uPS4xLHIubGFuZENvbG9yPSIjRjBEQzgyIixyLndhdGVyQ29sb3I9IiMzMzk5RkYiLHIubG9jYXRpb25tb2RlVG9MYXllcj17IklTTy0zIjoiY291bnRyaWVzIiwiVVNBLXN0YXRlcyI6InN1YnVuaXRzIiwiY291bnRyeSBuYW1lcyI6ImNvdW50cmllcyJ9LHIuc3BoZXJlU1ZHPXt0eXBlOiJTcGhlcmUifSxyLmZpbGxMYXllcnM9e29jZWFuOjEsbGFuZDoxLGxha2VzOjF9LHIubGluZUxheWVycz17c3VidW5pdHM6MSxjb3VudHJpZXM6MSxjb2FzdGxpbmVzOjEscml2ZXJzOjEsZnJhbWU6MX0sci5sYXllcnM9WyJiZyIsIm9jZWFuIiwibGFuZCIsImxha2VzIiwic3VidW5pdHMiLCJjb3VudHJpZXMiLCJjb2FzdGxpbmVzIiwicml2ZXJzIiwibGF0YXhpcyIsImxvbmF4aXMiLCJmcmFtZSIsImJhY2twbG90IiwiZnJvbnRwbG90Il0sci5sYXllcnNGb3JDaG9yb3BsZXRoPVsiYmciLCJvY2VhbiIsImxhbmQiLCJzdWJ1bml0cyIsImNvdW50cmllcyIsImNvYXN0bGluZXMiLCJsYXRheGlzIiwibG9uYXhpcyIsImZyYW1lIiwiYmFja3Bsb3QiLCJyaXZlcnMiLCJsYWtlcyIsImZyb250cGxvdCJdLHIubGF5ZXJOYW1lVG9BZGplY3RpdmU9e29jZWFuOiJvY2VhbiIsbGFuZDoibGFuZCIsbGFrZXM6Imxha2UiLHN1YnVuaXRzOiJzdWJ1bml0Iixjb3VudHJpZXM6ImNvdW50cnkiLGNvYXN0bGluZXM6ImNvYXN0bGluZSIscml2ZXJzOiJyaXZlciIsZnJhbWU6ImZyYW1lIn19LHt9XSw4NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZDMtZ2VvIiksYT1pLmdlb1BhdGgsbz1pLmdlb0Rpc3RhbmNlLHM9dCgiZDMtZ2VvLXByb2plY3Rpb24iKSxsPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYz10KCIuLi8uLi9saWIiKSx1PWMuc3RyVHJhbnNsYXRlLGY9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGg9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscD10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksZD10KCIuLi9wbG90cyIpLG09dCgiLi4vY2FydGVzaWFuL2F4ZXMiKSxnPXQoIi4uL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5nZXRBdXRvUmFuZ2Usdj10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IikseT10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikucHJlcFNlbGVjdCx4PXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5jbGVhclNlbGVjdCxiPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLF89dCgiLi96b29tIiksdz10KCIuL2NvbnN0YW50cyIpLFQ9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpLGs9dCgiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIiksQT10KCJ0b3BvanNvbi1jbGllbnQiKS5mZWF0dXJlO2Z1bmN0aW9uIE0odCl7dGhpcy5pZD10LmlkLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLnRvcG9qc29uVVJMPXQudG9wb2pzb25VUkwsdGhpcy5pc1N0YXRpYz10LnN0YXRpY1Bsb3QsdGhpcy50b3BvanNvbk5hbWU9bnVsbCx0aGlzLnRvcG9qc29uPW51bGwsdGhpcy5wcm9qZWN0aW9uPW51bGwsdGhpcy5zY29wZT1udWxsLHRoaXMudmlld0luaXRpYWw9bnVsbCx0aGlzLmZpdFNjYWxlPW51bGwsdGhpcy5ib3VuZHM9bnVsbCx0aGlzLm1pZFB0PW51bGwsdGhpcy5oYXNDaG9yb3BsZXRoPSExLHRoaXMudHJhY2VIYXNoPXt9LHRoaXMubGF5ZXJzPXt9LHRoaXMuYmFzZVBhdGhzPXt9LHRoaXMuZGF0YVBhdGhzPXt9LHRoaXMuZGF0YVBvaW50cz17fSx0aGlzLmNsaXBEZWY9bnVsbCx0aGlzLmNsaXBSZWN0PW51bGwsdGhpcy5iZ1JlY3Q9bnVsbCx0aGlzLm1ha2VGcmFtZXdvcmsoKX12YXIgUz1NLnByb3RvdHlwZTtmdW5jdGlvbiBFKHQsZSl7dmFyIHI9dy5jbGlwUGFkLG49dFswXStyLGk9dFsxXS1yLGE9ZVswXStyLG89ZVsxXS1yO24+MCYmaTwwJiYoaSs9MzYwKTt2YXIgcz0oaS1uKS80O3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbW1tuLGFdLFtuLG9dLFtuK3Msb10sW24rMipzLG9dLFtuKzMqcyxvXSxbaSxvXSxbaSxhXSxbaS1zLGFdLFtpLTIqcyxhXSxbaS0zKnMsYV0sW24sYV1dXX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTSh0KX0sUy5wbG90PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9ZVt0aGlzLmlkXSxhPVtdLG89ITE7Zm9yKHZhciBzIGluIHcubGF5ZXJOYW1lVG9BZGplY3RpdmUpaWYoImZyYW1lIiE9PXMmJmlbInNob3ciK3NdKXtvPSEwO2JyZWFrfWZvcih2YXIgbD0wO2w8dC5sZW5ndGg7bCsrKWlmKHRbMF1bMF0udHJhY2UubG9jYXRpb25tb2RlKXtvPSEwO2JyZWFrfWlmKG8pe3ZhciBjPWsuZ2V0VG9wb2pzb25OYW1lKGkpO251bGwhPT1uLnRvcG9qc29uJiZjPT09bi50b3BvanNvbk5hbWV8fChuLnRvcG9qc29uTmFtZT1jLHZvaWQgMD09PVBsb3RseUdlb0Fzc2V0cy50b3BvanNvbltuLnRvcG9qc29uTmFtZV0mJmEucHVzaChuLmZldGNoVG9wb2pzb24oKSkpfWE9YS5jb25jYXQoVC5mZXRjaFRyYWNlR2VvRGF0YSh0KSksci5wdXNoKG5ldyBQcm9taXNlKChmdW5jdGlvbihyLGkpe1Byb21pc2UuYWxsKGEpLnRoZW4oKGZ1bmN0aW9uKCl7bi50b3BvanNvbj1QbG90bHlHZW9Bc3NldHMudG9wb2pzb25bbi50b3BvanNvbk5hbWVdLG4udXBkYXRlKHQsZSkscigpfSkpLmNhdGNoKGkpfSkpKX0sUy5mZXRjaFRvcG9qc29uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPWsuZ2V0VG9wb2pzb25QYXRoKHQudG9wb2pzb25VUkwsdC50b3BvanNvbk5hbWUpO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixpKXtuLmpzb24oZSwoZnVuY3Rpb24obixhKXtpZihuKXJldHVybiA0MDQ9PT1uLnN0YXR1cz9pKG5ldyBFcnJvcihbInBsb3RseS5qcyBjb3VsZCBub3QgZmluZCB0b3BvanNvbiBmaWxlIGF0IixlLCIuIiwiTWFrZSBzdXJlIHRoZSAqdG9wb2pzb25VUkwqIHBsb3QgY29uZmlnIG9wdGlvbiIsImlzIHNldCBwcm9wZXJseS4iXS5qb2luKCIgIikpKTppKG5ldyBFcnJvcihbInVuZXhwZWN0ZWQgZXJyb3Igd2hpbGUgZmV0Y2hpbmcgdG9wb2pzb24gZmlsZSBhdCIsZV0uam9pbigiICIpKSk7UGxvdGx5R2VvQXNzZXRzLnRvcG9qc29uW3QudG9wb2pzb25OYW1lXT1hLHIoKX0pKX0pKX0sUy51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lW3RoaXMuaWRdO3RoaXMuaGFzQ2hvcm9wbGV0aD0hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxhPWlbMF0udHJhY2U7ImNob3JvcGxldGgiPT09YS50eXBlJiYodGhpcy5oYXNDaG9yb3BsZXRoPSEwKSwhMD09PWEudmlzaWJsZSYmYS5fbGVuZ3RoPjAmJmEuX21vZHVsZS5jYWxjR2VvSlNPTihpLGUpfWlmKCF0aGlzLnVwZGF0ZVByb2plY3Rpb24odCxlKSl7dGhpcy52aWV3SW5pdGlhbCYmdGhpcy5zY29wZT09PXIuc2NvcGV8fHRoaXMuc2F2ZVZpZXdJbml0aWFsKHIpLHRoaXMuc2NvcGU9ci5zY29wZSx0aGlzLnVwZGF0ZUJhc2VMYXllcnMoZSxyKSx0aGlzLnVwZGF0ZURpbXMoZSxyKSx0aGlzLnVwZGF0ZUZ4KGUsciksZC5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGUodGhpcy5ncmFwaERpdix0aGlzLHQscik7dmFyIG89dGhpcy5sYXllcnMuZnJvbnRwbG90LnNlbGVjdCgiLnNjYXR0ZXJsYXllciIpO3RoaXMuZGF0YVBvaW50cy5wb2ludD1vLnNlbGVjdEFsbCgiLnBvaW50IiksdGhpcy5kYXRhUG9pbnRzLnRleHQ9by5zZWxlY3RBbGwoInRleHQiKSx0aGlzLmRhdGFQYXRocy5saW5lPW8uc2VsZWN0QWxsKCIuanMtbGluZSIpO3ZhciBzPXRoaXMubGF5ZXJzLmJhY2twbG90LnNlbGVjdCgiLmNob3JvcGxldGhsYXllciIpO3RoaXMuZGF0YVBhdGhzLmNob3JvcGxldGg9cy5zZWxlY3RBbGwoInBhdGgiKSx0aGlzLnJlbmRlcigpfX0sUy51cGRhdGVQcm9qZWN0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5ncmFwaERpdixuPWVbdGhpcy5pZF0sbD1lLl9zaXplLHU9bi5kb21haW4sZj1uLnByb2plY3Rpb24saD1uLmxvbmF4aXMscD1uLmxhdGF4aXMsZD1oLl9heCxtPXAuX2F4LHY9dGhpcy5wcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQucHJvamVjdGlvbixyPWUudHlwZSxuPXcucHJvak5hbWVzW3JdO249ImdlbyIrYy50aXRsZUNhc2Uobik7Zm9yKHZhciBsPShpW25dfHxzW25dKSgpLHU9dC5faXNTYXRlbGxpdGU/MTgwKk1hdGguYWNvcygxL2UuZGlzdGFuY2UpL01hdGguUEk6dC5faXNDbGlwcGVkP3cubG9uYXhpc1NwYW5bcl0vMjpudWxsLGY9WyJjZW50ZXIiLCJyb3RhdGUiLCJwYXJhbGxlbHMiLCJjbGlwRXh0ZW50Il0saD1mdW5jdGlvbih0KXtyZXR1cm4gdD9sOltdfSxwPTA7cDxmLmxlbmd0aDtwKyspe3ZhciBkPWZbcF07ImZ1bmN0aW9uIiE9dHlwZW9mIGxbZF0mJihsW2RdPWgpfWwuaXNMb25MYXRPdmVyRWRnZXM9ZnVuY3Rpb24odCl7aWYobnVsbD09PWwodCkpcmV0dXJuITA7aWYodSl7dmFyIGU9bC5yb3RhdGUoKTtyZXR1cm4gbyh0LFstZVswXSwtZVsxXV0pPnUqTWF0aC5QSS8xODB9cmV0dXJuITF9LGwuZ2V0UGF0aD1mdW5jdGlvbigpe3JldHVybiBhKCkucHJvamVjdGlvbihsKX0sbC5nZXRCb3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGwuZ2V0UGF0aCgpLmJvdW5kcyh0KX0sbC5wcmVjaXNpb24ody5wcmVjaXNpb24pLHQuX2lzU2F0ZWxsaXRlJiZsLnRpbHQoZS50aWx0KS5kaXN0YW5jZShlLmRpc3RhbmNlKTt1JiZsLmNsaXBBbmdsZSh1LXcuY2xpcFBhZCk7cmV0dXJuIGx9KG4pLHk9W1tsLmwrbC53KnUueFswXSxsLnQrbC5oKigxLXUueVsxXSldLFtsLmwrbC53KnUueFsxXSxsLnQrbC5oKigxLXUueVswXSldXSx4PW4uY2VudGVyfHx7fSxiPWYucm90YXRpb258fHt9LF89aC5yYW5nZXx8W10sVD1wLnJhbmdlfHxbXTtpZihuLmZpdGJvdW5kcyl7ZC5fbGVuZ3RoPXlbMV1bMF0teVswXVswXSxtLl9sZW5ndGg9eVsxXVsxXS15WzBdWzFdLGQucmFuZ2U9ZyhyLGQpLG0ucmFuZ2U9ZyhyLG0pO3ZhciBrPShkLnJhbmdlWzBdK2QucmFuZ2VbMV0pLzIsQT0obS5yYW5nZVswXSttLnJhbmdlWzFdKS8yO2lmKG4uX2lzU2NvcGVkKXg9e2xvbjprLGxhdDpBfTtlbHNlIGlmKG4uX2lzQ2xpcHBlZCl7eD17bG9uOmssbGF0OkF9LGI9e2xvbjprLGxhdDpBLHJvbGw6Yi5yb2xsfTt2YXIgTT1mLnR5cGUsUz13LmxvbmF4aXNTcGFuW01dLzJ8fDE4MCxMPXcubGF0YXhpc1NwYW5bTV0vMnx8OTA7Xz1bay1TLGsrU10sVD1bQS1MLEErTF19ZWxzZSB4PXtsb246ayxsYXQ6QX0sYj17bG9uOmssbGF0OmIubGF0LHJvbGw6Yi5yb2xsfX12LmNlbnRlcihbeC5sb24tYi5sb24seC5sYXQtYi5sYXRdKS5yb3RhdGUoWy1iLmxvbiwtYi5sYXQsYi5yb2xsXSkucGFyYWxsZWxzKGYucGFyYWxsZWxzKTt2YXIgQz1FKF8sVCk7di5maXRFeHRlbnQoeSxDKTt2YXIgUD10aGlzLmJvdW5kcz12LmdldEJvdW5kcyhDKSxJPXRoaXMuZml0U2NhbGU9di5zY2FsZSgpLE89di50cmFuc2xhdGUoKTtpZihuLmZpdGJvdW5kcyl7dmFyIHo9di5nZXRCb3VuZHMoRShkLnJhbmdlLG0ucmFuZ2UpKSxEPU1hdGgubWluKChQWzFdWzBdLVBbMF1bMF0pLyh6WzFdWzBdLXpbMF1bMF0pLChQWzFdWzFdLVBbMF1bMV0pLyh6WzFdWzFdLXpbMF1bMV0pKTtpc0Zpbml0ZShEKT92LnNjYWxlKEQqSSk6Yy53YXJuKCJTb21ldGhpbmcgd2VudCB3cm9uZyBkdXJpbmciK3RoaXMuaWQrImZpdGJvdW5kcyBjb21wdXRhdGlvbnMuIil9ZWxzZSB2LnNjYWxlKGYuc2NhbGUqSSk7dmFyIFI9dGhpcy5taWRQdD1bKFBbMF1bMF0rUFsxXVswXSkvMiwoUFswXVsxXStQWzFdWzFdKS8yXTtpZih2LnRyYW5zbGF0ZShbT1swXSsoUlswXS1PWzBdKSxPWzFdKyhSWzFdLU9bMV0pXSkuY2xpcEV4dGVudChQKSxuLl9pc0FsYmVyc1VzYSl7dmFyIEY9dihbeC5sb24seC5sYXRdKSxCPXYudHJhbnNsYXRlKCk7di50cmFuc2xhdGUoW0JbMF0tKEZbMF0tQlswXSksQlsxXS0oRlsxXS1CWzFdKV0pfX0sUy51cGRhdGVCYXNlTGF5ZXJzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxpPXIudG9wb2pzb24sYT1yLmxheWVycyxvPXIuYmFzZVBhdGhzO2Z1bmN0aW9uIHModCl7cmV0dXJuImxvbmF4aXMiPT09dHx8ImxhdGF4aXMiPT09dH1mdW5jdGlvbiBsKHQpe3JldHVybiBCb29sZWFuKHcubGluZUxheWVyc1t0XSl9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gQm9vbGVhbih3LmZpbGxMYXllcnNbdF0pfXZhciB1PSh0aGlzLmhhc0Nob3JvcGxldGg/dy5sYXllcnNGb3JDaG9yb3BsZXRoOncubGF5ZXJzKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBsKHQpfHxjKHQpP2VbInNob3ciK3RdOiFzKHQpfHxlW3RdLnNob3dncmlkfSkpLHA9ci5mcmFtZXdvcmsuc2VsZWN0QWxsKCIubGF5ZXIiKS5kYXRhKHUsU3RyaW5nKTtwLmV4aXQoKS5lYWNoKChmdW5jdGlvbih0KXtkZWxldGUgYVt0XSxkZWxldGUgb1t0XSxuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pKSxwLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtyZXR1cm4ibGF5ZXIgIit0fSkpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPWFbdF09bi5zZWxlY3QodGhpcyk7ImJnIj09PXQ/ci5iZ1JlY3Q9ZS5hcHBlbmQoInJlY3QiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKTpzKHQpP29bdF09ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKToiYmFja3Bsb3QiPT09dD9lLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNob3JvcGxldGhsYXllciIsITApOiJmcm9udHBsb3QiPT09dD9lLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNjYXR0ZXJsYXllciIsITApOmwodCk/b1t0XT1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJmaWxsIiwibm9uZSIpLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMik6Yyh0KSYmKG9bdF09ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpKX0pKSxwLm9yZGVyKCkscC5lYWNoKChmdW5jdGlvbihyKXt2YXIgbj1vW3JdLGE9dy5sYXllck5hbWVUb0FkamVjdGl2ZVtyXTsiZnJhbWUiPT09cj9uLmRhdHVtKHcuc3BoZXJlU1ZHKTpsKHIpfHxjKHIpP24uZGF0dW0oQShpLGkub2JqZWN0c1tyXSkpOnMocikmJm4uZGF0dW0oZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvPWVbdF0scz13LnNjb3BlRGVmYXVsdHNbZS5zY29wZV07ImxvbmF4aXMiPT09dD8obj1zLmxvbmF4aXNSYW5nZSxpPXMubGF0YXhpc1JhbmdlLGE9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCxlXX0pOiJsYXRheGlzIj09PXQmJihuPXMubGF0YXhpc1JhbmdlLGk9cy5sb25heGlzUmFuZ2UsYT1mdW5jdGlvbih0LGUpe3JldHVybltlLHRdfSk7dmFyIGw9e3R5cGU6ImxpbmVhciIscmFuZ2U6W25bMF0sblsxXS0xZS02XSx0aWNrMDpvLnRpY2swLGR0aWNrOm8uZHRpY2t9O20uc2V0Q29udmVydChsLHIpO3ZhciBjPW0uY2FsY1RpY2tzKGwpO2UuaXNTY29wZWR8fCJsb25heGlzIiE9PXR8fGMucG9wKCk7Zm9yKHZhciB1PWMubGVuZ3RoLGY9bmV3IEFycmF5KHUpLGg9MDtoPHU7aCsrKWZvcih2YXIgcD1jW2hdLngsZD1mW2hdPVtdLGc9aVswXTtnPGlbMV0rMi41O2crPTIuNSlkLnB1c2goYShwLGcpKTtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczpmfX0ocixlLHQpKS5jYWxsKGYuc3Ryb2tlLGVbcl0uZ3JpZGNvbG9yKS5jYWxsKGguZGFzaExpbmUsIiIsZVtyXS5ncmlkd2lkdGgpLGwocik/bi5jYWxsKGYuc3Ryb2tlLGVbYSsiY29sb3IiXSkuY2FsbChoLmRhc2hMaW5lLCIiLGVbYSsid2lkdGgiXSk6YyhyKSYmbi5jYWxsKGYuZmlsbCxlW2ErImNvbG9yIl0pfSkpfSxTLnVwZGF0ZURpbXM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmJvdW5kcyxuPShlLmZyYW1ld2lkdGh8fDApLzIsaT1yWzBdWzBdLW4sYT1yWzBdWzFdLW4sbz1yWzFdWzBdLWkrbixzPXJbMV1bMV0tYStuO2guc2V0UmVjdCh0aGlzLmNsaXBSZWN0LGksYSxvLHMpLHRoaXMuYmdSZWN0LmNhbGwoaC5zZXRSZWN0LGksYSxvLHMpLmNhbGwoZi5maWxsLGUuYmdjb2xvciksdGhpcy54YXhpcy5fb2Zmc2V0PWksdGhpcy54YXhpcy5fbGVuZ3RoPW8sdGhpcy55YXhpcy5fb2Zmc2V0PWEsdGhpcy55YXhpcy5fbGVuZ3RoPXN9LFMudXBkYXRlRng9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLGk9ci5ncmFwaERpdixhPXIuYmdSZWN0LG89dC5kcmFnbW9kZSxzPXQuY2xpY2ttb2RlO2lmKCFyLmlzU3RhdGljKXt2YXIgdTsic2VsZWN0Ij09PW8/dT1mdW5jdGlvbih0LGUpeyh0LnJhbmdlPXt9KVtyLmlkXT1baChbZS54bWluLGUueW1pbl0pLGgoW2UueG1heCxlLnltYXhdKV19OiJsYXNzbyI9PT1vJiYodT1mdW5jdGlvbih0LGUsbil7KHQubGFzc29Qb2ludHM9e30pW3IuaWRdPW4uZmlsdGVyZWQubWFwKGgpfSk7dmFyIGY9e2VsZW1lbnQ6ci5iZ1JlY3Qubm9kZSgpLGdkOmkscGxvdGluZm86e2lkOnIuaWQseGF4aXM6ci54YXhpcyx5YXhpczpyLnlheGlzLGZpbGxSYW5nZUl0ZW1zOnV9LHhheGVzOltyLnhheGlzXSx5YXhlczpbci55YXhpc10sc3VicGxvdDpyLmlkLGNsaWNrRm46ZnVuY3Rpb24odCl7Mj09PXQmJngoaSl9fTsicGFuIj09PW8/KGEubm9kZSgpLm9ubW91c2Vkb3duPW51bGwsYS5jYWxsKF8ocixlKSksYS5vbigiZGJsY2xpY2suem9vbSIsKGZ1bmN0aW9uKCl7dmFyIHQ9ci52aWV3SW5pdGlhbCxlPXt9O2Zvcih2YXIgbiBpbiB0KWVbci5pZCsiLiIrbl09dFtuXTtsLmNhbGwoIl9ndWlSZWxheW91dCIsaSxlKSxpLmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCl9KSksaS5fY29udGV4dC5fc2Nyb2xsWm9vbS5nZW98fGEub24oIndoZWVsLnpvb20iLG51bGwpKToic2VsZWN0IiE9PW8mJiJsYXNzbyIhPT1vfHwoYS5vbigiLnpvb20iLG51bGwpLGYucHJlcEZuPWZ1bmN0aW9uKHQsZSxyKXt5KHQsZSxyLGYsbyl9LHYuaW5pdChmKSksYS5vbigibW91c2Vtb3ZlIiwoZnVuY3Rpb24oKXt2YXIgdD1yLnByb2plY3Rpb24uaW52ZXJ0KGMuZ2V0UG9zaXRpb25Gcm9tRDNFdmVudCgpKTtpZighdClyZXR1cm4gdi51bmhvdmVyKGksbi5ldmVudCk7ci54YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gdFswXX0sci55YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gdFsxXX0scC5ob3ZlcihpLG4uZXZlbnQsci5pZCl9KSksYS5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe2kuX2RyYWdnaW5nfHx2LnVuaG92ZXIoaSxuLmV2ZW50KX0pKSxhLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7InNlbGVjdCIhPT1vJiYibGFzc28iIT09byYmKHMuaW5kZXhPZigic2VsZWN0Iik+LTEmJmIobi5ldmVudCxpLFtyLnhheGlzXSxbci55YXhpc10sci5pZCxmKSxzLmluZGV4T2YoImV2ZW50Iik+LTEmJnAuY2xpY2soaSxuLmV2ZW50KSl9KSl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gci5wcm9qZWN0aW9uLmludmVydChbdFswXStyLnhheGlzLl9vZmZzZXQsdFsxXStyLnlheGlzLl9vZmZzZXRdKX19LFMubWFrZUZyYW1ld29yaz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LmdyYXBoRGl2LHI9ZS5fZnVsbExheW91dCxpPSJjbGlwIityLl91aWQrdC5pZDt0LmNsaXBEZWY9ci5fY2xpcHMuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixpKSx0LmNsaXBSZWN0PXQuY2xpcERlZi5hcHBlbmQoInJlY3QiKSx0LmZyYW1ld29yaz1uLnNlbGVjdCh0LmNvbnRhaW5lcikuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJnZW8gIit0LmlkKS5jYWxsKGguc2V0Q2xpcFVybCxpLGUpLHQucHJvamVjdD1mdW5jdGlvbihlKXt2YXIgcj10LnByb2plY3Rpb24oZSk7cmV0dXJuIHI/W3JbMF0tdC54YXhpcy5fb2Zmc2V0LHJbMV0tdC55YXhpcy5fb2Zmc2V0XTpbbnVsbCxudWxsXX0sdC54YXhpcz17X2lkOiJ4IixjMnA6ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvamVjdChlKVswXX19LHQueWF4aXM9e19pZDoieSIsYzJwOmZ1bmN0aW9uKGUpe3JldHVybiB0LnByb2plY3QoZSlbMV19fSx0Lm1vY2tBeGlzPXt0eXBlOiJsaW5lYXIiLHNob3dleHBvbmVudDoiYWxsIixleHBvbmVudGZvcm1hdDoiQiJ9LG0uc2V0Q29udmVydCh0Lm1vY2tBeGlzLHIpfSxTLnNhdmVWaWV3SW5pdGlhbD1mdW5jdGlvbih0KXt2YXIgZSxyPXQuY2VudGVyfHx7fSxuPXQucHJvamVjdGlvbixpPW4ucm90YXRpb258fHt9O3RoaXMudmlld0luaXRpYWw9e2ZpdGJvdW5kczp0LmZpdGJvdW5kcywicHJvamVjdGlvbi5zY2FsZSI6bi5zY2FsZX0sZT10Ll9pc1Njb3BlZD97ImNlbnRlci5sb24iOnIubG9uLCJjZW50ZXIubGF0IjpyLmxhdH06dC5faXNDbGlwcGVkP3sicHJvamVjdGlvbi5yb3RhdGlvbi5sb24iOmkubG9uLCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxhdCI6aS5sYXR9OnsiY2VudGVyLmxvbiI6ci5sb24sImNlbnRlci5sYXQiOnIubGF0LCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiI6aS5sb259LGMuZXh0ZW5kRmxhdCh0aGlzLnZpZXdJbml0aWFsLGUpfSxTLnJlbmRlcj1mdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5wcm9qZWN0aW9uLHI9ZS5nZXRQYXRoKCk7ZnVuY3Rpb24gbih0KXt2YXIgcj1lKHQubG9ubGF0KTtyZXR1cm4gcj91KHJbMF0sclsxXSk6bnVsbH1mdW5jdGlvbiBpKHQpe3JldHVybiBlLmlzTG9uTGF0T3ZlckVkZ2VzKHQubG9ubGF0KT8ibm9uZSI6bnVsbH1mb3IodCBpbiB0aGlzLmJhc2VQYXRocyl0aGlzLmJhc2VQYXRoc1t0XS5hdHRyKCJkIixyKTtmb3IodCBpbiB0aGlzLmRhdGFQYXRocyl0aGlzLmRhdGFQYXRoc1t0XS5hdHRyKCJkIiwoZnVuY3Rpb24odCl7cmV0dXJuIHIodC5nZW9qc29uKX0pKTtmb3IodCBpbiB0aGlzLmRhdGFQb2ludHMpdGhpcy5kYXRhUG9pbnRzW3RdLmF0dHIoImRpc3BsYXkiLGkpLmF0dHIoInRyYW5zZm9ybSIsbil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NjU4LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vY29tcG9uZW50cy9meCI6Njc5LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyI6NzY5LCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiOjgwNSwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vY2FydGVzaWFuL2F1dG9yYW5nZSI6ODI2LCIuLi9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Ijo4NDcsIi4uL3Bsb3RzIjo4OTAsIi4vY29uc3RhbnRzIjo4NTgsIi4vem9vbSI6ODYzLCJAcGxvdGx5L2QzIjo1OCwiZDMtZ2VvIjoxNjIsImQzLWdlby1wcm9qZWN0aW9uIjoxNjEsInRvcG9qc29uLWNsaWVudCI6NTc1fV0sODYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0U3VicGxvdENhbGNEYXRhLGk9dCgiLi4vLi4vbGliIikuY291bnRlclJlZ2V4LGE9dCgiLi9nZW8iKSxvPSJnZW8iLHM9aShvKSxsPXt9O2wuZ2VvPXt2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6byxlZGl0VHlwZToiY2FsYyJ9LGUuZXhwb3J0cz17YXR0cjpvLG5hbWU6byxpZFJvb3Q6byxpZFJlZ2V4OnMsYXR0clJlZ2V4OnMsYXR0cmlidXRlczpsLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIikscGxvdDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsaT1lLl9zdWJwbG90cy5nZW8scz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdLGM9bihyLG8sbCksdT1lW2xdLl9zdWJwbG90O3V8fCh1PWEoe2lkOmwsZ3JhcGhEaXY6dCxjb250YWluZXI6ZS5fZ2VvbGF5ZXIubm9kZSgpLHRvcG9qc29uVVJMOnQuX2NvbnRleHQudG9wb2pzb25VUkwsc3RhdGljUGxvdDp0Ll9jb250ZXh0LnN0YXRpY1Bsb3R9KSxlW2xdLl9zdWJwbG90PXUpLHUucGxvdChjLGUsdC5fcHJvbWlzZXMpfX0sdXBkYXRlRng6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nZW8sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1lW3Jbbl1dO2kuX3N1YnBsb3QudXBkYXRlRngoZSxpKX19LGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90cy5nZW98fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXSxzPW5bb10uX3N1YnBsb3Q7IWVbb10mJnMmJihzLmZyYW1ld29yay5yZW1vdmUoKSxzLmNsaXBEZWYucmVtb3ZlKCkpfX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6ODY0LCIuL2dlbyI6ODU5LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NjEsIi4vbGF5b3V0X2RlZmF1bHRzIjo4NjJ9XSw4NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksaT10KCIuLi9kb21haW4iKS5hdHRyaWJ1dGVzLGE9dCgiLi9jb25zdGFudHMiKSxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxzPXQoIi4uLy4uL2xpYi9zb3J0X29iamVjdF9rZXlzIiksbD17cmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIn0se3ZhbFR5cGU6Im51bWJlciJ9XX0sc2hvd2dyaWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHRpY2swOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0sZHRpY2s6e3ZhbFR5cGU6Im51bWJlciJ9LGdyaWRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5saWdodExpbmV9LGdyaWR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9fTsoZS5leHBvcnRzPW8oe2RvbWFpbjppKHtuYW1lOiJnZW8ifSx7fSksZml0Ym91bmRzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExLCJsb2NhdGlvbnMiLCJnZW9qc29uIl0sZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LHJlc29sdXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbMTEwLDUwXSxkZmx0OjExMCxjb2VyY2VOdW1iZXI6ITB9LHNjb3BlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6cyhhLnNjb3BlRGVmYXVsdHMpLGRmbHQ6IndvcmxkIn0scHJvamVjdGlvbjp7dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnMoYS5wcm9qTmFtZXMpfSxyb3RhdGlvbjp7bG9uOnt2YWxUeXBlOiJudW1iZXIifSxsYXQ6e3ZhbFR5cGU6Im51bWJlciJ9LHJvbGw6e3ZhbFR5cGU6Im51bWJlciJ9fSx0aWx0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0sZGlzdGFuY2U6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEuMDAxLGRmbHQ6Mn0scGFyYWxsZWxzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LHNjYWxlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX19LGNlbnRlcjp7bG9uOnt2YWxUeXBlOiJudW1iZXIifSxsYXQ6e3ZhbFR5cGU6Im51bWJlciJ9fSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzaG93Y29hc3RsaW5lczp7dmFsVHlwZToiYm9vbGVhbiJ9LGNvYXN0bGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxjb2FzdGxpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHNob3dsYW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsYW5kY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEubGFuZENvbG9yfSxzaG93b2NlYW46e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9jZWFuY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEud2F0ZXJDb2xvcn0sc2hvd2xha2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsYWtlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEud2F0ZXJDb2xvcn0sc2hvd3JpdmVyczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scml2ZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS53YXRlckNvbG9yfSxyaXZlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd2NvdW50cmllczp7dmFsVHlwZToiYm9vbGVhbiJ9LGNvdW50cnljb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZX0sY291bnRyeXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd3N1YnVuaXRzOnt2YWxUeXBlOiJib29sZWFuIn0sc3VidW5pdGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxzdWJ1bml0d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzaG93ZnJhbWU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxmcmFtZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxmcmFtZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxsb25heGlzOmwsbGF0YXhpczpsfSwicGxvdCIsImZyb20tcm9vdCIpKS51aXJldmlzaW9uPXt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MzgsIi4uLy4uL2xpYi9zb3J0X29iamVjdF9rZXlzIjo3OTksIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgwOSwiLi4vZG9tYWluIjo4NTUsIi4vY29uc3RhbnRzIjo4NTh9XSw4NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zdWJwbG90X2RlZmF1bHRzIiksYT10KCIuLi9nZXRfZGF0YSIpLmdldFN1YnBsb3REYXRhLG89dCgiLi9jb25zdGFudHMiKSxzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxsPW8uYXhlc05hbWVzO2Z1bmN0aW9uIGModCxlLHIsaSl7dmFyIHM9YShpLmZ1bGxEYXRhLCJnZW8iLGkuaWQpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2V4cGFuZGVkSW5kZXh9KSksYz1yKCJyZXNvbHV0aW9uIiksdT1yKCJzY29wZSIpLGY9by5zY29wZURlZmF1bHRzW3VdLGg9cigicHJvamVjdGlvbi50eXBlIixmLnByb2pUeXBlKSxwPWUuX2lzQWxiZXJzVXNhPSJhbGJlcnMgdXNhIj09PWg7cCYmKHU9ZS5zY29wZT0idXNhIik7dmFyIGQ9ZS5faXNTY29wZWQ9IndvcmxkIiE9PXUsbT1lLl9pc1NhdGVsbGl0ZT0ic2F0ZWxsaXRlIj09PWgsZz1lLl9pc0NvbmljPS0xIT09aC5pbmRleE9mKCJjb25pYyIpfHwiYWxiZXJzIj09PWgsdj1lLl9pc0NsaXBwZWQ9ISFvLmxvbmF4aXNTcGFuW2hdO2lmKCExPT09dC52aXNpYmxlKXt2YXIgeT1uLmV4dGVuZERlZXAoe30sZS5fdGVtcGxhdGUpO3kuc2hvd2NvYXN0bGluZXM9ITEseS5zaG93Y291bnRyaWVzPSExLHkuc2hvd2ZyYW1lPSExLHkuc2hvd2xha2VzPSExLHkuc2hvd2xhbmQ9ITEseS5zaG93b2NlYW49ITEseS5zaG93cml2ZXJzPSExLHkuc2hvd3N1YnVuaXRzPSExLHkubG9uYXhpcyYmKHkubG9uYXhpcy5zaG93Z3JpZD0hMSkseS5sYXRheGlzJiYoeS5sYXRheGlzLnNob3dncmlkPSExKSxlLl90ZW1wbGF0ZT15fWZvcih2YXIgeD1yKCJ2aXNpYmxlIiksYj0wO2I8bC5sZW5ndGg7YisrKXt2YXIgXyx3PWxbYl0sVD1bMzAsMTBdW2JdO2lmKGQpXz1mW3crIlJhbmdlIl07ZWxzZXt2YXIgaz1vW3crIlNwYW4iXSxBPShrW2hdfHxrWyIqIl0pLzIsTT1yKCJwcm9qZWN0aW9uLnJvdGF0aW9uLiIrdy5zdWJzdHIoMCwzKSxmLnByb2pSb3RhdGVbYl0pO189W00tQSxNK0FdfXZhciBTPXIodysiLnJhbmdlIixfKTtyKHcrIi50aWNrMCIpLHIodysiLmR0aWNrIixUKSxyKHcrIi5zaG93Z3JpZCIsISF4JiZ2b2lkIDApJiYocih3KyIuZ3JpZGNvbG9yIikscih3KyIuZ3JpZHdpZHRoIikpLGVbd10uX2F4PXt0eXBlOiJsaW5lYXIiLF9pZDp3LnNsaWNlKDAsMyksX3RyYWNlSW5kaWNlczpzLHNldFNjYWxlOm4uaWRlbnRpdHksYzJsOm4uaWRlbnRpdHkscjJsOm4uaWRlbnRpdHksYXV0b3JhbmdlOiEwLHJhbmdlOlMuc2xpY2UoKSxfbToxLF9pbnB1dDp7fX19dmFyIEU9ZS5sb25heGlzLnJhbmdlLEw9ZS5sYXRheGlzLnJhbmdlLEM9RVswXSxQPUVbMV07Qz4wJiZQPDAmJihQKz0zNjApO3ZhciBJLE8seixEPShDK1ApLzI7aWYoIXApe3ZhciBSPWQ/Zi5wcm9qUm90YXRlOltELDAsMF07ST1yKCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiIsUlswXSkscigicHJvamVjdGlvbi5yb3RhdGlvbi5sYXQiLFJbMV0pLHIoInByb2plY3Rpb24ucm90YXRpb24ucm9sbCIsUlsyXSkscigic2hvd2NvYXN0bGluZXMiLCFkJiZ4KSYmKHIoImNvYXN0bGluZWNvbG9yIikscigiY29hc3RsaW5ld2lkdGgiKSkscigic2hvd29jZWFuIiwhIXgmJnZvaWQgMCkmJnIoIm9jZWFuY29sb3IiKX0ocD8oTz0tOTYuNix6PTM4LjcpOihPPWQ/RDpJLHo9KExbMF0rTFsxXSkvMikscigiY2VudGVyLmxvbiIsTykscigiY2VudGVyLmxhdCIseiksbSYmKHIoInByb2plY3Rpb24udGlsdCIpLHIoInByb2plY3Rpb24uZGlzdGFuY2UiKSksZykmJnIoInByb2plY3Rpb24ucGFyYWxsZWxzIixmLnByb2pQYXJhbGxlbHN8fFswLDYwXSk7cigicHJvamVjdGlvbi5zY2FsZSIpLHIoInNob3dsYW5kIiwhIXgmJnZvaWQgMCkmJnIoImxhbmRjb2xvciIpLHIoInNob3dsYWtlcyIsISF4JiZ2b2lkIDApJiZyKCJsYWtlY29sb3IiKSxyKCJzaG93cml2ZXJzIiwhIXgmJnZvaWQgMCkmJihyKCJyaXZlcmNvbG9yIikscigicml2ZXJ3aWR0aCIpKSxyKCJzaG93Y291bnRyaWVzIixkJiYidXNhIiE9PXUmJngpJiYocigiY291bnRyeWNvbG9yIikscigiY291bnRyeXdpZHRoIikpLCgidXNhIj09PXV8fCJub3J0aCBhbWVyaWNhIj09PXUmJjUwPT09YykmJihyKCJzaG93c3VidW5pdHMiLHgpLHIoInN1YnVuaXRjb2xvciIpLHIoInN1YnVuaXR3aWR0aCIpKSxkfHxyKCJzaG93ZnJhbWUiLHgpJiYocigiZnJhbWVjb2xvciIpLHIoImZyYW1ld2lkdGgiKSkscigiYmdjb2xvciIpLHIoImZpdGJvdW5kcyIpJiYoZGVsZXRlIGUucHJvamVjdGlvbi5zY2FsZSxkPyhkZWxldGUgZS5jZW50ZXIubG9uLGRlbGV0ZSBlLmNlbnRlci5sYXQpOnY/KGRlbGV0ZSBlLmNlbnRlci5sb24sZGVsZXRlIGUuY2VudGVyLmxhdCxkZWxldGUgZS5wcm9qZWN0aW9uLnJvdGF0aW9uLmxvbixkZWxldGUgZS5wcm9qZWN0aW9uLnJvdGF0aW9uLmxhdCxkZWxldGUgZS5sb25heGlzLnJhbmdlLGRlbGV0ZSBlLmxhdGF4aXMucmFuZ2UpOihkZWxldGUgZS5jZW50ZXIubG9uLGRlbGV0ZSBlLmNlbnRlci5sYXQsZGVsZXRlIGUucHJvamVjdGlvbi5yb3RhdGlvbi5sb24pKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2kodCxlLHIse3R5cGU6ImdlbyIsYXR0cmlidXRlczpzLGhhbmRsZURlZmF1bHRzOmMsZnVsbERhdGE6cixwYXJ0aXRpb246InkifSl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9nZXRfZGF0YSI6ODY0LCIuLi9zdWJwbG90X2RlZmF1bHRzIjo4OTgsIi4vY29uc3RhbnRzIjo4NTgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg2MX1dLDg2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz1NYXRoLlBJLzE4MCxzPTE4MC9NYXRoLlBJLGw9e2N1cnNvcjoicG9pbnRlciJ9LGM9e2N1cnNvcjoiYXV0byJ9O2Z1bmN0aW9uIHUodCxlKXtyZXR1cm4gbi5iZWhhdmlvci56b29tKCkudHJhbnNsYXRlKGUudHJhbnNsYXRlKCkpLnNjYWxlKGUuc2NhbGUoKSl9ZnVuY3Rpb24gZih0LGUscil7dmFyIG49dC5pZCxvPXQuZ3JhcGhEaXYscz1vLmxheW91dCxsPXNbbl0sYz1vLl9mdWxsTGF5b3V0LHU9Y1tuXSxmPXt9LGg9e307ZnVuY3Rpb24gcCh0LGUpe2ZbbisiLiIrdF09aS5uZXN0ZWRQcm9wZXJ0eShsLHQpLmdldCgpLGEuY2FsbCgiX3N0b3JlRGlyZWN0R1VJRWRpdCIscyxjLl9wcmVHVUksZik7dmFyIHI9aS5uZXN0ZWRQcm9wZXJ0eSh1LHQpO3IuZ2V0KCkhPT1lJiYoci5zZXQoZSksaS5uZXN0ZWRQcm9wZXJ0eShsLHQpLnNldChlKSxoW24rIi4iK3RdPWUpfXIocCkscCgicHJvamVjdGlvbi5zY2FsZSIsZS5zY2FsZSgpL3QuZml0U2NhbGUpLHAoImZpdGJvdW5kcyIsITEpLG8uZW1pdCgicGxvdGx5X3JlbGF5b3V0IixoKX1mdW5jdGlvbiBoKHQsZSl7dmFyIHI9dSgwLGUpO2Z1bmN0aW9uIGkocil7dmFyIG49ZS5pbnZlcnQodC5taWRQdCk7cigiY2VudGVyLmxvbiIsblswXSkscigiY2VudGVyLmxhdCIsblsxXSl9cmV0dXJuIHIub24oInpvb21zdGFydCIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUobCl9KSkub24oInpvb20iLChmdW5jdGlvbigpe2Uuc2NhbGUobi5ldmVudC5zY2FsZSkudHJhbnNsYXRlKG4uZXZlbnQudHJhbnNsYXRlKSx0LnJlbmRlcigpO3ZhciByPWUuaW52ZXJ0KHQubWlkUHQpO3QuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIix7Imdlby5wcm9qZWN0aW9uLnNjYWxlIjplLnNjYWxlKCkvdC5maXRTY2FsZSwiZ2VvLmNlbnRlci5sb24iOnJbMF0sImdlby5jZW50ZXIubGF0IjpyWzFdfSl9KSkub24oInpvb21lbmQiLChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGMpLGYodCxlLGkpfSkpLHJ9ZnVuY3Rpb24gcCh0LGUpe3ZhciByLGksYSxvLHMsaCxwLGQsbSxnPXUoMCxlKTtmdW5jdGlvbiB2KHQpe3JldHVybiBlLmludmVydCh0KX1mdW5jdGlvbiB5KHIpe3ZhciBuPWUucm90YXRlKCksaT1lLmludmVydCh0Lm1pZFB0KTtyKCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiIsLW5bMF0pLHIoImNlbnRlci5sb24iLGlbMF0pLHIoImNlbnRlci5sYXQiLGlbMV0pfXJldHVybiBnLm9uKCJ6b29tc3RhcnQiLChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGwpLHI9bi5tb3VzZSh0aGlzKSxpPWUucm90YXRlKCksYT1lLnRyYW5zbGF0ZSgpLG89aSxzPXYocil9KSkub24oInpvb20iLChmdW5jdGlvbigpe2lmKGg9bi5tb3VzZSh0aGlzKSxmdW5jdGlvbih0KXt2YXIgcj12KHQpO2lmKCFyKXJldHVybiEwO3ZhciBuPWUocik7cmV0dXJuIE1hdGguYWJzKG5bMF0tdFswXSk+Mnx8TWF0aC5hYnMoblsxXS10WzFdKT4yfShyKSlyZXR1cm4gZy5zY2FsZShlLnNjYWxlKCkpLHZvaWQgZy50cmFuc2xhdGUoZS50cmFuc2xhdGUoKSk7ZS5zY2FsZShuLmV2ZW50LnNjYWxlKSxlLnRyYW5zbGF0ZShbYVswXSxuLmV2ZW50LnRyYW5zbGF0ZVsxXV0pLHM/dihoKSYmKGQ9dihoKSxwPVtvWzBdKyhkWzBdLXNbMF0pLGlbMV0saVsyXV0sZS5yb3RhdGUocCksbz1wKTpzPXYocj1oKSxtPSEwLHQucmVuZGVyKCk7dmFyIGw9ZS5yb3RhdGUoKSxjPWUuaW52ZXJ0KHQubWlkUHQpO3QuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIix7Imdlby5wcm9qZWN0aW9uLnNjYWxlIjplLnNjYWxlKCkvdC5maXRTY2FsZSwiZ2VvLmNlbnRlci5sb24iOmNbMF0sImdlby5jZW50ZXIubGF0IjpjWzFdLCJnZW8ucHJvamVjdGlvbi5yb3RhdGlvbi5sb24iOi1sWzBdfSl9KSkub24oInpvb21lbmQiLChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGMpLG0mJmYodCxlLHkpfSkpLGd9ZnVuY3Rpb24gZCh0LGUpe3ZhciByLGk9e3I6ZS5yb3RhdGUoKSxrOmUuc2NhbGUoKX0sYT11KDAsZSksbz1mdW5jdGlvbih0KXt2YXIgZT0wLHI9YXJndW1lbnRzLmxlbmd0aCxpPVtdO2Zvcig7KytlPHI7KWkucHVzaChhcmd1bWVudHNbZV0pO3ZhciBhPW4uZGlzcGF0Y2guYXBwbHkobnVsbCxpKTtyZXR1cm4gYS5vZj1mdW5jdGlvbihlLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbzt0cnl7bz1pLnNvdXJjZUV2ZW50PW4uZXZlbnQsaS50YXJnZXQ9dCxuLmV2ZW50PWksYVtpLnR5cGVdLmFwcGx5KGUscil9ZmluYWxseXtuLmV2ZW50PW99fX0sYX0oYSwiem9vbXN0YXJ0Iiwiem9vbSIsInpvb21lbmQiKSxzPTAsaD1hLm9uO2Z1bmN0aW9uIHAodCl7cysrfHx0KHt0eXBlOiJ6b29tc3RhcnQifSl9ZnVuY3Rpb24gZCh0KXt0KHt0eXBlOiJ6b29tIn0pfWZ1bmN0aW9uIGIodCl7LS1zfHx0KHt0eXBlOiJ6b29tZW5kIn0pfWZ1bmN0aW9uIF8odCl7dmFyIHI9ZS5yb3RhdGUoKTt0KCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiIsLXJbMF0pLHQoInByb2plY3Rpb24ucm90YXRpb24ubGF0IiwtclsxXSl9cmV0dXJuIGEub24oInpvb21zdGFydCIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUobCk7dmFyIHQ9bi5tb3VzZSh0aGlzKSxzPWUucm90YXRlKCksYz1zLHU9ZS50cmFuc2xhdGUoKSxmPWcocyk7cj1tKGUsdCksaC5jYWxsKGEsInpvb20iLChmdW5jdGlvbigpe3ZhciBhPW4ubW91c2UodGhpcyk7aWYoZS5zY2FsZShpLms9bi5ldmVudC5zY2FsZSkscil7aWYobShlLGEpKXtlLnJvdGF0ZShzKS50cmFuc2xhdGUodSk7dmFyIGw9bShlLGEpLGg9eShyLGwpLHA9VCh2KGYsaCkpLGc9aS5yPXgocCxyLGMpO2lzRmluaXRlKGdbMF0pJiZpc0Zpbml0ZShnWzFdKSYmaXNGaW5pdGUoZ1syXSl8fChnPWMpLGUucm90YXRlKGcpLGM9Z319ZWxzZSByPW0oZSx0PWEpO2Qoby5vZih0aGlzLGFyZ3VtZW50cykpfSkpLHAoby5vZih0aGlzLGFyZ3VtZW50cykpfSkpLm9uKCJ6b29tZW5kIiwoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zdHlsZShjKSxoLmNhbGwoYSwiem9vbSIsbnVsbCksYihvLm9mKHRoaXMsYXJndW1lbnRzKSksZih0LGUsXyl9KSkub24oInpvb20ucmVkcmF3IiwoZnVuY3Rpb24oKXt0LnJlbmRlcigpO3ZhciByPWUucm90YXRlKCk7dC5ncmFwaERpdi5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLHsiZ2VvLnByb2plY3Rpb24uc2NhbGUiOmUuc2NhbGUoKS90LmZpdFNjYWxlLCJnZW8ucHJvamVjdGlvbi5yb3RhdGlvbi5sb24iOi1yWzBdLCJnZW8ucHJvamVjdGlvbi5yb3RhdGlvbi5sYXQiOi1yWzFdfSl9KSksbi5yZWJpbmQoYSxvLCJvbiIpfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj10LmludmVydChlKTtyZXR1cm4gciYmaXNGaW5pdGUoclswXSkmJmlzRmluaXRlKHJbMV0pJiZmdW5jdGlvbih0KXt2YXIgZT10WzBdKm8scj10WzFdKm8sbj1NYXRoLmNvcyhyKTtyZXR1cm5bbipNYXRoLmNvcyhlKSxuKk1hdGguc2luKGUpLE1hdGguc2luKHIpXX0ocil9ZnVuY3Rpb24gZyh0KXt2YXIgZT0uNSp0WzBdKm8scj0uNSp0WzFdKm8sbj0uNSp0WzJdKm8saT1NYXRoLnNpbihlKSxhPU1hdGguY29zKGUpLHM9TWF0aC5zaW4ociksbD1NYXRoLmNvcyhyKSxjPU1hdGguc2luKG4pLHU9TWF0aC5jb3Mobik7cmV0dXJuW2EqbCp1K2kqcypjLGkqbCp1LWEqcypjLGEqcyp1K2kqbCpjLGEqbCpjLWkqcyp1XX1mdW5jdGlvbiB2KHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT10WzJdLGE9dFszXSxvPWVbMF0scz1lWzFdLGw9ZVsyXSxjPWVbM107cmV0dXJuW3Iqby1uKnMtaSpsLWEqYyxyKnMrbipvK2kqYy1hKmwscipsLW4qYytpKm8rYSpzLHIqYytuKmwtaSpzK2Eqb119ZnVuY3Rpb24geSh0LGUpe2lmKHQmJmUpe3ZhciByPWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMV0qZVsyXS10WzJdKmVbMV0sdFsyXSplWzBdLXRbMF0qZVsyXSx0WzBdKmVbMV0tdFsxXSplWzBdXX0odCxlKSxuPU1hdGguc3FydChrKHIscikpLGk9LjUqTWF0aC5hY29zKE1hdGgubWF4KC0xLE1hdGgubWluKDEsayh0LGUpKSkpLGE9TWF0aC5zaW4oaSkvbjtyZXR1cm4gbiYmW01hdGguY29zKGkpLHJbMl0qYSwtclsxXSphLHJbMF0qYV19fWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuPXcoZSwyLHRbMF0pO249dyhuLDEsdFsxXSksbj13KG4sMCx0WzJdLXJbMl0pO3ZhciBpLGEsbz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1uWzBdLGY9blsxXSxoPW5bMl0scD1NYXRoLmF0YW4yKGwsbykqcyxkPU1hdGguc3FydChvKm8rbCpsKTtNYXRoLmFicyhmKT5kPyhhPShmPjA/OTA6LTkwKS1wLGk9MCk6KGE9TWF0aC5hc2luKGYvZCkqcy1wLGk9TWF0aC5zcXJ0KGQqZC1mKmYpKTt2YXIgbT0xODAtYS0yKnAsZz0oTWF0aC5hdGFuMihoLHUpLU1hdGguYXRhbjIoYyxpKSkqcyx2PShNYXRoLmF0YW4yKGgsdSktTWF0aC5hdGFuMihjLC1pKSkqcztyZXR1cm4gYihyWzBdLHJbMV0sYSxnKTw9YihyWzBdLHJbMV0sbSx2KT9bYSxnLHJbMl1dOlttLHYsclsyXV19ZnVuY3Rpb24gYih0LGUscixuKXt2YXIgaT1fKHItdCksYT1fKG4tZSk7cmV0dXJuIE1hdGguc3FydChpKmkrYSphKX1mdW5jdGlvbiBfKHQpe3JldHVybih0JTM2MCs1NDApJTM2MC0xODB9ZnVuY3Rpb24gdyh0LGUscil7dmFyIG49cipvLGk9dC5zbGljZSgpLGE9MD09PWU/MTowLHM9Mj09PWU/MToyLGw9TWF0aC5jb3MobiksYz1NYXRoLnNpbihuKTtyZXR1cm4gaVthXT10W2FdKmwtdFtzXSpjLGlbc109dFtzXSpsK3RbYV0qYyxpfWZ1bmN0aW9uIFQodCl7cmV0dXJuW01hdGguYXRhbjIoMioodFswXSp0WzFdK3RbMl0qdFszXSksMS0yKih0WzFdKnRbMV0rdFsyXSp0WzJdKSkqcyxNYXRoLmFzaW4oTWF0aC5tYXgoLTEsTWF0aC5taW4oMSwyKih0WzBdKnRbMl0tdFszXSp0WzFdKSkpKSpzLE1hdGguYXRhbjIoMioodFswXSp0WzNdK3RbMV0qdFsyXSksMS0yKih0WzJdKnRbMl0rdFszXSp0WzNdKSkqc119ZnVuY3Rpb24gayh0LGUpe2Zvcih2YXIgcj0wLG49MCxpPXQubGVuZ3RoO248aTsrK24pcis9dFtuXSplW25dO3JldHVybiByfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQucHJvamVjdGlvbjtyZXR1cm4oZS5faXNTY29wZWQ/aDplLl9pc0NsaXBwZWQ/ZDpwKSh0LHIpfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiQHBsb3RseS9kMyI6NTh9XSw4NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcmVnaXN0cnkiKSxpPXQoIi4vY2FydGVzaWFuL2NvbnN0YW50cyIpLlNVQlBMT1RfUEFUVEVSTjtyLmdldFN1YnBsb3RDYWxjRGF0YT1mdW5jdGlvbih0LGUscil7dmFyIGk9bi5zdWJwbG90c1JlZ2lzdHJ5W2VdO2lmKCFpKXJldHVybltdO2Zvcih2YXIgYT1pLmF0dHIsbz1bXSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc107bFswXS50cmFjZVthXT09PXImJm8ucHVzaChsKX1yZXR1cm4gb30sci5nZXRNb2R1bGVDYWxjRGF0YT1mdW5jdGlvbih0LGUpe3ZhciByLGk9W10sYT1bXTtpZighKHI9InN0cmluZyI9PXR5cGVvZiBlP24uZ2V0TW9kdWxlKGUpLnBsb3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTplLnBsb3QpKXJldHVybltpLHRdO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dLGw9c1swXS50cmFjZTshMD09PWwudmlzaWJsZSYmMCE9PWwuX2xlbmd0aCYmKGwuX21vZHVsZS5wbG90PT09cj9pLnB1c2gocyk6YS5wdXNoKHMpKX1yZXR1cm5baSxhXX0sci5nZXRTdWJwbG90RGF0YT1mdW5jdGlvbih0LGUscil7aWYoIW4uc3VicGxvdHNSZWdpc3RyeVtlXSlyZXR1cm5bXTt2YXIgYSxvLHMsbD1uLnN1YnBsb3RzUmVnaXN0cnlbZV0uYXR0cixjPVtdO2lmKCJnbDJkIj09PWUpe3ZhciB1PXIubWF0Y2goaSk7bz0ieCIrdVsxXSxzPSJ5Iit1WzJdfWZvcih2YXIgZj0wO2Y8dC5sZW5ndGg7ZisrKWE9dFtmXSwiZ2wyZCI9PT1lJiZuLnRyYWNlSXMoYSwiZ2wyZCIpP2FbbFswXV09PT1vJiZhW2xbMV1dPT09cyYmYy5wdXNoKGEpOmFbbF09PT1yJiZjLnB1c2goYSk7cmV0dXJuIGN9fSx7Ii4uL3JlZ2lzdHJ5Ijo5MDQsIi4vY2FydGVzaWFuL2NvbnN0YW50cyI6ODM0fV0sODY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm1vdXNlLWNoYW5nZSIpLGk9dCgibW91c2Utd2hlZWwiKSxhPXQoIm1vdXNlLWV2ZW50LW9mZnNldCIpLG89dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpLHM9dCgiaGFzLXBhc3NpdmUtZXZlbnRzIik7ZnVuY3Rpb24gbCh0LGUpe3RoaXMuZWxlbWVudD10LHRoaXMucGxvdD1lLHRoaXMubW91c2VMaXN0ZW5lcj1udWxsLHRoaXMud2hlZWxMaXN0ZW5lcj1udWxsLHRoaXMubGFzdElucHV0VGltZT1EYXRlLm5vdygpLHRoaXMubGFzdFBvcz1bMCwwXSx0aGlzLmJveEVuYWJsZWQ9ITEsdGhpcy5ib3hJbml0ZWQ9ITEsdGhpcy5ib3hTdGFydD1bMCwwXSx0aGlzLmJveEVuZD1bMCwwXSx0aGlzLmRyYWdTdGFydD1bMCwwXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5tb3VzZUNvbnRhaW5lcixyPXQuZ2xwbG90LGM9bmV3IGwoZSxyKTtmdW5jdGlvbiB1KCl7dC54YXhpcy5hdXRvcmFuZ2U9ITEsdC55YXhpcy5hdXRvcmFuZ2U9ITF9ZnVuY3Rpb24gZihlLG4saSl7dmFyIGEscyxsPXQuY2FsY0RhdGFCb3goKSxmPXIudmlld0JveCxoPWMubGFzdFBvc1swXSxwPWMubGFzdFBvc1sxXSxkPW8uTUlORFJBRypyLnBpeGVsUmF0aW8sbT1vLk1JTlpPT00qci5waXhlbFJhdGlvO2Z1bmN0aW9uIGcoZSxyLG4pe3ZhciBpPU1hdGgubWluKHIsbiksYT1NYXRoLm1heChyLG4pO2khPT1hPyhsW2VdPWksbFtlKzJdPWEsYy5kYXRhQm94PWwsdC5zZXRSYW5nZXMobCkpOih0LnNlbGVjdEJveC5zZWxlY3RCb3g9WzAsMCwxLDFdLHQuZ2xwbG90LnNldERpcnR5KCkpfXN3aXRjaChuKj1yLnBpeGVsUmF0aW8saSo9ci5waXhlbFJhdGlvLGk9ZlszXS1mWzFdLWksdC5mdWxsTGF5b3V0LmRyYWdtb2RlKXtjYXNlInpvb20iOmlmKGUpe3ZhciB2PW4vKGZbMl0tZlswXSkqKGxbMl0tbFswXSkrbFswXSx5PWkvKGZbM10tZlsxXSkqKGxbM10tbFsxXSkrbFsxXTtjLmJveEluaXRlZHx8KGMuYm94U3RhcnRbMF09dixjLmJveFN0YXJ0WzFdPXksYy5kcmFnU3RhcnRbMF09bixjLmRyYWdTdGFydFsxXT1pKSxjLmJveEVuZFswXT12LGMuYm94RW5kWzFdPXksYy5ib3hJbml0ZWQ9ITAsYy5ib3hFbmFibGVkfHxjLmJveFN0YXJ0WzBdPT09Yy5ib3hFbmRbMF0mJmMuYm94U3RhcnRbMV09PT1jLmJveEVuZFsxXXx8KGMuYm94RW5hYmxlZD0hMCk7dmFyIHg9TWF0aC5hYnMoYy5kcmFnU3RhcnRbMF0tbik8bSxiPU1hdGguYWJzKGMuZHJhZ1N0YXJ0WzFdLWkpPG07aWYoIWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXQuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLHI9dC54YXhpcy5faWQsbj10LnlheGlzLl9pZCxpPTA7aTxlLmxlbmd0aDtpKyspaWYoLTEhPT1lW2ldW3JdKXtpZigtMSE9PWVbaV1bbl0pcmV0dXJuITA7YnJlYWt9cmV0dXJuITF9KCl8fHgmJmIpeCYmKGMuYm94RW5kWzBdPWMuYm94U3RhcnRbMF0pLGImJihjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdKTtlbHNle2E9Yy5ib3hFbmRbMF0tYy5ib3hTdGFydFswXSxzPWMuYm94RW5kWzFdLWMuYm94U3RhcnRbMV07dmFyIF89KGxbM10tbFsxXSkvKGxbMl0tbFswXSk7TWF0aC5hYnMoYSpfKT5NYXRoLmFicyhzKT8oYy5ib3hFbmRbMV09Yy5ib3hTdGFydFsxXStNYXRoLmFicyhhKSpfKihzPj0wPzE6LTEpLGMuYm94RW5kWzFdPGxbMV0/KGMuYm94RW5kWzFdPWxbMV0sYy5ib3hFbmRbMF09Yy5ib3hTdGFydFswXSsobFsxXS1jLmJveFN0YXJ0WzFdKS9NYXRoLmFicyhfKSk6Yy5ib3hFbmRbMV0+bFszXSYmKGMuYm94RW5kWzFdPWxbM10sYy5ib3hFbmRbMF09Yy5ib3hTdGFydFswXSsobFszXS1jLmJveFN0YXJ0WzFdKS9NYXRoLmFicyhfKSkpOihjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdK01hdGguYWJzKHMpL18qKGE+PTA/MTotMSksYy5ib3hFbmRbMF08bFswXT8oYy5ib3hFbmRbMF09bFswXSxjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdKyhsWzBdLWMuYm94U3RhcnRbMF0pKk1hdGguYWJzKF8pKTpjLmJveEVuZFswXT5sWzJdJiYoYy5ib3hFbmRbMF09bFsyXSxjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdKyhsWzJdLWMuYm94U3RhcnRbMF0pKk1hdGguYWJzKF8pKSl9fWVsc2UgYy5ib3hFbmFibGVkPyhhPWMuYm94U3RhcnRbMF0hPT1jLmJveEVuZFswXSxzPWMuYm94U3RhcnRbMV0hPT1jLmJveEVuZFsxXSxhfHxzPyhhJiYoZygwLGMuYm94U3RhcnRbMF0sYy5ib3hFbmRbMF0pLHQueGF4aXMuYXV0b3JhbmdlPSExKSxzJiYoZygxLGMuYm94U3RhcnRbMV0sYy5ib3hFbmRbMV0pLHQueWF4aXMuYXV0b3JhbmdlPSExKSx0LnJlbGF5b3V0Q2FsbGJhY2soKSk6dC5nbHBsb3Quc2V0RGlydHkoKSxjLmJveEVuYWJsZWQ9ITEsYy5ib3hJbml0ZWQ9ITEpOmMuYm94SW5pdGVkJiYoYy5ib3hJbml0ZWQ9ITEpO2JyZWFrO2Nhc2UicGFuIjpjLmJveEVuYWJsZWQ9ITEsYy5ib3hJbml0ZWQ9ITEsZT8oYy5wYW5uaW5nfHwoYy5kcmFnU3RhcnRbMF09bixjLmRyYWdTdGFydFsxXT1pKSxNYXRoLmFicyhjLmRyYWdTdGFydFswXS1uKTxkJiYobj1jLmRyYWdTdGFydFswXSksTWF0aC5hYnMoYy5kcmFnU3RhcnRbMV0taSk8ZCYmKGk9Yy5kcmFnU3RhcnRbMV0pLGE9KGgtbikqKGxbMl0tbFswXSkvKHIudmlld0JveFsyXS1yLnZpZXdCb3hbMF0pLHM9KHAtaSkqKGxbM10tbFsxXSkvKHIudmlld0JveFszXS1yLnZpZXdCb3hbMV0pLGxbMF0rPWEsbFsyXSs9YSxsWzFdKz1zLGxbM10rPXMsdC5zZXRSYW5nZXMobCksYy5wYW5uaW5nPSEwLGMubGFzdElucHV0VGltZT1EYXRlLm5vdygpLHUoKSx0LmNhbWVyYUNoYW5nZWQoKSx0LmhhbmRsZUFubm90YXRpb25zKCkpOmMucGFubmluZyYmKGMucGFubmluZz0hMSx0LnJlbGF5b3V0Q2FsbGJhY2soKSl9Yy5sYXN0UG9zWzBdPW4sYy5sYXN0UG9zWzFdPWl9cmV0dXJuIGMubW91c2VMaXN0ZW5lcj1uKGUsZiksZS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwoZnVuY3Rpb24odCl7dmFyIHI9YSh0LmNoYW5nZWRUb3VjaGVzWzBdLGUpO2YoMCxyWzBdLHJbMV0pLGYoMSxyWzBdLHJbMV0pLHQucHJldmVudERlZmF1bHQoKX0pLCEhcyYme3Bhc3NpdmU6ITF9KSxlLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKTt2YXIgcj1hKHQuY2hhbmdlZFRvdWNoZXNbMF0sZSk7ZigxLHJbMF0sclsxXSksdC5wcmV2ZW50RGVmYXVsdCgpfSksISFzJiZ7cGFzc2l2ZTohMX0pLGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLChmdW5jdGlvbih0KXtmKDAsYy5sYXN0UG9zWzBdLGMubGFzdFBvc1sxXSksdC5wcmV2ZW50RGVmYXVsdCgpfSksISFzJiZ7cGFzc2l2ZTohMX0pLGMud2hlZWxMaXN0ZW5lcj1pKGUsKGZ1bmN0aW9uKGUsbil7aWYoIXQuc2Nyb2xsWm9vbSlyZXR1cm4hMTt2YXIgaT10LmNhbGNEYXRhQm94KCksYT1yLnZpZXdCb3gsbz1jLmxhc3RQb3NbMF0scz1jLmxhc3RQb3NbMV0sbD1NYXRoLmV4cCg1Km4vKGFbM10tYVsxXSkpLGY9by8oYVsyXS1hWzBdKSooaVsyXS1pWzBdKStpWzBdLGg9cy8oYVszXS1hWzFdKSooaVszXS1pWzFdKStpWzFdO3JldHVybiBpWzBdPShpWzBdLWYpKmwrZixpWzJdPShpWzJdLWYpKmwrZixpWzFdPShpWzFdLWgpKmwraCxpWzNdPShpWzNdLWgpKmwraCx0LnNldFJhbmdlcyhpKSxjLmxhc3RJbnB1dFRpbWU9RGF0ZS5ub3coKSx1KCksdC5jYW1lcmFDaGFuZ2VkKCksdC5oYW5kbGVBbm5vdGF0aW9ucygpLHQucmVsYXlvdXRDYWxsYmFjaygpLCEwfSksITApLGN9fSx7Ii4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjgzNCwiaGFzLXBhc3NpdmUtZXZlbnRzIjo0MjYsIm1vdXNlLWNoYW5nZSI6NDQ5LCJtb3VzZS1ldmVudC1vZmZzZXQiOjQ1MCwibW91c2Utd2hlZWwiOjQ1Mn1dLDg2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpO2Z1bmN0aW9uIGEodCl7dGhpcy5zY2VuZT10LHRoaXMuZ2w9dC5nbCx0aGlzLnBpeGVsUmF0aW89dC5waXhlbFJhdGlvLHRoaXMuc2NyZWVuQm94PVswLDAsMSwxXSx0aGlzLnZpZXdCb3g9WzAsMCwxLDFdLHRoaXMuZGF0YUJveD1bLTEsLTEsMSwxXSx0aGlzLmJvcmRlckxpbmVFbmFibGU9WyExLCExLCExLCExXSx0aGlzLmJvcmRlckxpbmVXaWR0aD1bMSwxLDEsMV0sdGhpcy5ib3JkZXJMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrcz1bW10sW11dLHRoaXMudGlja0VuYWJsZT1bITAsITAsITEsITFdLHRoaXMudGlja1BhZD1bMTUsMTUsMTUsMTVdLHRoaXMudGlja0FuZ2xlPVswLDAsMCwwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tNYXJrTGVuZ3RoPVswLDAsMCwwXSx0aGlzLnRpY2tNYXJrV2lkdGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVscz1bIngiLCJ5Il0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITEsITFdLHRoaXMubGFiZWxBbmdsZT1bMCxNYXRoLlBJLzIsMCwzKk1hdGguUEkvMl0sdGhpcy5sYWJlbFBhZD1bMTUsMTUsMTUsMTVdLHRoaXMubGFiZWxTaXplPVsxMiwxMl0sdGhpcy5sYWJlbEZvbnQ9WyJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiJdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpdGxlPSIiLHRoaXMudGl0bGVFbmFibGU9ITAsdGhpcy50aXRsZUNlbnRlcj1bMCwwLDAsMF0sdGhpcy50aXRsZUFuZ2xlPTAsdGhpcy50aXRsZUNvbG9yPVswLDAsMCwxXSx0aGlzLnRpdGxlRm9udD0ic2Fucy1zZXJpZiIsdGhpcy50aXRsZVNpemU9MTgsdGhpcy5ncmlkTGluZUVuYWJsZT1bITAsITBdLHRoaXMuZ3JpZExpbmVDb2xvcj1bWzAsMCwwLC41XSxbMCwwLDAsLjVdXSx0aGlzLmdyaWRMaW5lV2lkdGg9WzEsMV0sdGhpcy56ZXJvTGluZUVuYWJsZT1bITAsITBdLHRoaXMuemVyb0xpbmVXaWR0aD1bMSwxXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVswLDAsMCwwXSx0aGlzLnN0YXRpYz10aGlzLnNjZW5lLnN0YXRpY1Bsb3R9dmFyIG89YS5wcm90b3R5cGUscz1bInhheGlzIiwieWF4aXMiXTtvLm1lcmdlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixhLG8sbCxjLHUsZixoLHA7Zm9yKHRoaXMudGl0bGVFbmFibGU9ITEsdGhpcy5iYWNrZ3JvdW5kQ29sb3I9aSh0LnBsb3RfYmdjb2xvciksaD0wO2g8MjsrK2gpe3ZhciBkPShlPXNbaF0pLmNoYXJBdCgwKTtmb3Iobj0ocj10W3RoaXMuc2NlbmVbZV0uX25hbWVdKS50aXRsZS50ZXh0PT09dGhpcy5zY2VuZS5mdWxsTGF5b3V0Ll9kZmx0VGl0bGVbZF0/IiI6ci50aXRsZS50ZXh0LHA9MDtwPD0yO3ArPTIpdGhpcy5sYWJlbEVuYWJsZVtoK3BdPSExLHRoaXMubGFiZWxzW2grcF09bix0aGlzLmxhYmVsQ29sb3JbaCtwXT1pKHIudGl0bGUuZm9udC5jb2xvciksdGhpcy5sYWJlbEZvbnRbaCtwXT1yLnRpdGxlLmZvbnQuZmFtaWx5LHRoaXMubGFiZWxTaXplW2grcF09ci50aXRsZS5mb250LnNpemUsdGhpcy5sYWJlbFBhZFtoK3BdPXRoaXMuZ2V0TGFiZWxQYWQoZSxyKSx0aGlzLnRpY2tFbmFibGVbaCtwXT0hMSx0aGlzLnRpY2tDb2xvcltoK3BdPWkoKHIudGlja2ZvbnR8fHt9KS5jb2xvciksdGhpcy50aWNrQW5nbGVbaCtwXT0iYXV0byI9PT1yLnRpY2thbmdsZT8wOk1hdGguUEkqLXIudGlja2FuZ2xlLzE4MCx0aGlzLnRpY2tQYWRbaCtwXT10aGlzLmdldFRpY2tQYWQociksdGhpcy50aWNrTWFya0xlbmd0aFtoK3BdPTAsdGhpcy50aWNrTWFya1dpZHRoW2grcF09ci50aWNrd2lkdGh8fDAsdGhpcy50aWNrTWFya0NvbG9yW2grcF09aShyLnRpY2tjb2xvciksdGhpcy5ib3JkZXJMaW5lRW5hYmxlW2grcF09ITEsdGhpcy5ib3JkZXJMaW5lQ29sb3JbaCtwXT1pKHIubGluZWNvbG9yKSx0aGlzLmJvcmRlckxpbmVXaWR0aFtoK3BdPXIubGluZXdpZHRofHwwO2M9dGhpcy5oYXNTaGFyZWRBeGlzKHIpLG89dGhpcy5oYXNBeGlzSW5EZmx0UG9zKGUscikmJiFjLGw9dGhpcy5oYXNBeGlzSW5BbHRyUG9zKGUscikmJiFjLGE9ci5taXJyb3J8fCExLHU9Yz8tMSE9PVN0cmluZyhhKS5pbmRleE9mKCJhbGwiKTohIWEsZj1jPyJhbGx0aWNrcyI9PT1hOi0xIT09U3RyaW5nKGEpLmluZGV4T2YoInRpY2tzIiksbz90aGlzLmxhYmVsRW5hYmxlW2hdPSEwOmwmJih0aGlzLmxhYmVsRW5hYmxlW2grMl09ITApLG8/dGhpcy50aWNrRW5hYmxlW2hdPXIuc2hvd3RpY2tsYWJlbHM6bCYmKHRoaXMudGlja0VuYWJsZVtoKzJdPXIuc2hvd3RpY2tsYWJlbHMpLChvfHx1KSYmKHRoaXMuYm9yZGVyTGluZUVuYWJsZVtoXT1yLnNob3dsaW5lKSwobHx8dSkmJih0aGlzLmJvcmRlckxpbmVFbmFibGVbaCsyXT1yLnNob3dsaW5lKSwob3x8ZikmJih0aGlzLnRpY2tNYXJrTGVuZ3RoW2hdPXRoaXMuZ2V0VGlja01hcmtMZW5ndGgocikpLChsfHxmKSYmKHRoaXMudGlja01hcmtMZW5ndGhbaCsyXT10aGlzLmdldFRpY2tNYXJrTGVuZ3RoKHIpKSx0aGlzLmdyaWRMaW5lRW5hYmxlW2hdPXIuc2hvd2dyaWQsdGhpcy5ncmlkTGluZUNvbG9yW2hdPWkoci5ncmlkY29sb3IpLHRoaXMuZ3JpZExpbmVXaWR0aFtoXT1yLmdyaWR3aWR0aCx0aGlzLnplcm9MaW5lRW5hYmxlW2hdPXIuemVyb2xpbmUsdGhpcy56ZXJvTGluZUNvbG9yW2hdPWkoci56ZXJvbGluZWNvbG9yKSx0aGlzLnplcm9MaW5lV2lkdGhbaF09ci56ZXJvbGluZXdpZHRofX0sby5oYXNTaGFyZWRBeGlzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUscj1lLmZ1bGxMYXlvdXQuX3N1YnBsb3RzLmdsMmQ7cmV0dXJuIDAhPT1uLmZpbmRTdWJwbG90c1dpdGhBeGlzKHIsdCkuaW5kZXhPZihlLmlkKX0sby5oYXNBeGlzSW5EZmx0UG9zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5zaWRlO3JldHVybiJ4YXhpcyI9PT10PyJib3R0b20iPT09cjoieWF4aXMiPT09dD8ibGVmdCI9PT1yOnZvaWQgMH0sby5oYXNBeGlzSW5BbHRyUG9zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5zaWRlO3JldHVybiJ4YXhpcyI9PT10PyJ0b3AiPT09cjoieWF4aXMiPT09dD8icmlnaHQiPT09cjp2b2lkIDB9LG8uZ2V0TGFiZWxQYWQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRpdGxlLmZvbnQuc2l6ZSxuPWUuc2hvd3RpY2tsYWJlbHM7cmV0dXJuInhheGlzIj09PXQ/InRvcCI9PT1lLnNpZGU/ciooMS41KyhuPzE6MCkpLTEwOnIqKDEuNSsobj8uNTowKSktMTA6InlheGlzIj09PXQ/InJpZ2h0Ij09PWUuc2lkZT8xMCtyKigxLjUrKG4/MTouNSkpOjEwK3IqKDEuNSsobj8uNTowKSk6dm9pZCAwfSxvLmdldFRpY2tQYWQ9ZnVuY3Rpb24odCl7cmV0dXJuIm91dHNpZGUiPT09dC50aWNrcz8xMCt0LnRpY2tsZW46MTV9LG8uZ2V0VGlja01hcmtMZW5ndGg9ZnVuY3Rpb24odCl7aWYoIXQudGlja3MpcmV0dXJuIDA7dmFyIGU9dC50aWNrbGVuO3JldHVybiJpbnNpZGUiPT09dC50aWNrcz8tZTplfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHQpfX0seyIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo4MDEsIi4uL2NhcnRlc2lhbi9heGVzIjo4Mjd9XSw4Njc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGk9dCgiLi9zY2VuZTJkIiksYT10KCIuLi9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxzPXQoIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiKSxsPXQoIi4uL2NhcnRlc2lhbiIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyIpLHU9dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90RGF0YTtyLm5hbWU9ImdsMmQiLHIuYXR0cj1bInhheGlzIiwieWF4aXMiXSxyLmlkUm9vdD1bIngiLCJ5Il0sci5pZFJlZ2V4PXMuaWRSZWdleCxyLmF0dHJSZWdleD1zLmF0dHJSZWdleCxyLmF0dHJpYnV0ZXM9dCgiLi4vY2FydGVzaWFuL2F0dHJpYnV0ZXMiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyKXtlLl9oYXMoImNhcnRlc2lhbiIpfHxsLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKX0sci5sYXlvdXRBdHRyT3ZlcnJpZGVzPW4obC5sYXlvdXRBdHRyaWJ1dGVzLCJwbG90IiwiZnJvbS1yb290Iiksci5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcz1uKHtwbG90X2JnY29sb3I6YS5wbG90X2JnY29sb3IsaG92ZXJsYWJlbDpjLmhvdmVybGFiZWx9LCJwbG90IiwibmVzdGVkIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEsbj1lLl9zdWJwbG90cy5nbDJkLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPWUuX3Bsb3RzW29dLGw9dShyLCJnbDJkIixvKSxjPXMuX3NjZW5lMmQ7dm9pZCAwPT09YyYmKGM9bmV3IGkoe2lkOm8sZ3JhcGhEaXY6dCxjb250YWluZXI6dC5xdWVyeVNlbGVjdG9yKCIuZ2wtY29udGFpbmVyIiksc3RhdGljUGxvdDp0Ll9jb250ZXh0LnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp0Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW99LGUpLHMuX3NjZW5lMmQ9YyksYy5wbG90KGwsdC5jYWxjZGF0YSxlLHQubGF5b3V0KX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLmdsMmR8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXSxzPW4uX3Bsb3RzW29dO2lmKHMuX3NjZW5lMmQpe3ZhciBjPXUodCwiZ2wyZCIsbyk7MD09PWMubGVuZ3RoJiYocy5fc2NlbmUyZC5kZXN0cm95KCksZGVsZXRlIG4uX3Bsb3RzW29dKX19bC5jbGVhbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHIuZHJhd0ZyYW1ld29yaz1mdW5jdGlvbih0KXt0Ll9jb250ZXh0LnN0YXRpY1Bsb3R8fGwuZHJhd0ZyYW1ld29yayh0KX0sci50b1NWRz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsMmQsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1lLl9wbG90c1tyW25dXS5fc2NlbmUyZCxhPWkudG9JbWFnZSgicG5nIik7ZS5fZ2xpbWFnZXMuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpvLnN2ZywieGxpbms6aHJlZiI6YSx4OjAseTowLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSksaS5kZXN0cm95KCl9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMuZ2wyZCxuPTA7bjxyLmxlbmd0aDtuKyspe2UuX3Bsb3RzW3Jbbl1dLl9zY2VuZTJkLnVwZGF0ZUZ4KGUuZHJhZ21vZGUpfX19LHsiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyI6NjgwLCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzUzLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MDksIi4uL2NhcnRlc2lhbiI6ODQxLCIuLi9jYXJ0ZXNpYW4vYXR0cmlidXRlcyI6ODI1LCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo4MzQsIi4uL2dldF9kYXRhIjo4NjQsIi4uL2xheW91dF9hdHRyaWJ1dGVzIjo4ODEsIi4vc2NlbmUyZCI6ODY4fV0sODY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxsPXQoImdsLXBsb3QyZCIpLGM9dCgiZ2wtc3Bpa2VzMmQiKSx1PXQoImdsLXNlbGVjdC1ib3giKSxmPXQoIndlYmdsLWNvbnRleHQiKSxoPXQoIi4vY29udmVydCIpLHA9dCgiLi9jYW1lcmEiKSxkPXQoIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyIpLG09dCgiLi4vY2FydGVzaWFuL2NvbnN0cmFpbnRzIiksZz1tLmVuZm9yY2Usdj1tLmNsZWFuLHk9dCgiLi4vY2FydGVzaWFuL2F1dG9yYW5nZSIpLmRvQXV0b1JhbmdlLHg9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIiksYj14LmRyYXdNb2RlLF89eC5zZWxlY3RNb2RlLHc9WyJ4YXhpcyIsInlheGlzIl0sVD10KCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuU1VCUExPVF9QQVRURVJOO2Z1bmN0aW9uIGsodCxlKXt0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXYsdGhpcy5waXhlbFJhdGlvPXQucGxvdEdsUGl4ZWxSYXRpb3x8d2luZG93LmRldmljZVBpeGVsUmF0aW8sdGhpcy5pZD10LmlkLHRoaXMuc3RhdGljUGxvdD0hIXQuc3RhdGljUGxvdCx0aGlzLnNjcm9sbFpvb209dGhpcy5ncmFwaERpdi5fY29udGV4dC5fc2Nyb2xsWm9vbS5jYXJ0ZXNpYW4sdGhpcy5mdWxsRGF0YT1udWxsLHRoaXMudXBkYXRlUmVmcyhlKSx0aGlzLm1ha2VGcmFtZXdvcmsoKSx0aGlzLnN0b3BwZWR8fCh0aGlzLmdscGxvdE9wdGlvbnM9aCh0aGlzKSx0aGlzLmdscGxvdE9wdGlvbnMubWVyZ2UoZSksdGhpcy5nbHBsb3Q9bCh0aGlzLmdscGxvdE9wdGlvbnMpLHRoaXMuY2FtZXJhPXAodGhpcyksdGhpcy50cmFjZXM9e30sdGhpcy5zcGlrZXM9Yyh0aGlzLmdscGxvdCksdGhpcy5zZWxlY3RCb3g9dSh0aGlzLmdscGxvdCx7aW5uZXJGaWxsOiExLG91dGVyRmlsbDohMH0pLHRoaXMubGFzdEJ1dHRvblN0YXRlPTAsdGhpcy5waWNrUmVzdWx0PW51bGwsdGhpcy5pc01vdXNlT3Zlcj0hMCx0aGlzLnN0b3BwZWQ9ITEsdGhpcy5yZWRyYXc9dGhpcy5kcmF3LmJpbmQodGhpcyksdGhpcy5yZWRyYXcoKSl9ZS5leHBvcnRzPWs7dmFyIEE9ay5wcm90b3R5cGU7QS5tYWtlRnJhbWV3b3JrPWZ1bmN0aW9uKCl7aWYodGhpcy5zdGF0aWNQbG90KXtpZighKGl8fChuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGk9Zih7Y2FudmFzOm4scHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLHByZW11bHRpcGxpZWRBbHBoYTohMCxhbnRpYWxpYXM6ITB9KSkpKXRocm93IG5ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgc3RhdGljIGNhbnZhcy9jb250ZXh0IGZvciBpbWFnZSBzZXJ2ZXIiKTt0aGlzLmNhbnZhcz1uLHRoaXMuZ2w9aX1lbHNle3ZhciB0PXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5nbC1jYW52YXMtZm9jdXMiKSxlPWYoe2NhbnZhczp0LHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMCxwcmVtdWx0aXBsaWVkQWxwaGE6ITB9KTtpZighZSlyZXR1cm4gZCh0aGlzKSx2b2lkKHRoaXMuc3RvcHBlZD0hMCk7dGhpcy5jYW52YXM9dCx0aGlzLmdsPWV9dmFyIHI9dGhpcy5jYW52YXM7ci5zdHlsZS53aWR0aD0iMTAwJSIsci5zdHlsZS5oZWlnaHQ9IjEwMCUiLHIuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixyLnN0eWxlLnRvcD0iMHB4IixyLnN0eWxlLmxlZnQ9IjBweCIsci5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0ibm9uZSIsdGhpcy51cGRhdGVTaXplKHIpO3ZhciBhPXRoaXMuc3ZnQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTthLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYS5zdHlsZS50b3A9YS5zdHlsZS5sZWZ0PSIwcHgiLGEuc3R5bGUud2lkdGg9YS5zdHlsZS5oZWlnaHQ9IjEwMCUiLGEuc3R5bGVbInotaW5kZXgiXT0yMCxhLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIjt2YXIgbz10aGlzLm1vdXNlQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO28uc3R5bGUucG9zaXRpb249ImFic29sdXRlIixvLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJhdXRvIix0aGlzLnBpY2tDYW52YXM9dGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcigiLmdsLWNhbnZhcy1waWNrIik7dmFyIHM9dGhpcy5jb250YWluZXI7cy5hcHBlbmRDaGlsZChhKSxzLmFwcGVuZENoaWxkKG8pO3ZhciBsPXRoaXM7by5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7bC5pc01vdXNlT3Zlcj0hMSxsLnVuaG92ZXIoKX0pKSxvLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7bC5pc01vdXNlT3Zlcj0hMH0pKX0sQS50b0ltYWdlPWZ1bmN0aW9uKHQpe3R8fCh0PSJwbmciKSx0aGlzLnN0b3BwZWQ9ITAsdGhpcy5zdGF0aWNQbG90JiZ0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChuKSx0aGlzLnVwZGF0ZVNpemUodGhpcy5jYW52YXMpO3ZhciBlPXRoaXMuZ2xwbG90LmdsLHI9ZS5kcmF3aW5nQnVmZmVyV2lkdGgsaT1lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7ZS5jbGVhckNvbG9yKDEsMSwxLDApLGUuY2xlYXIoZS5DT0xPUl9CVUZGRVJfQklUfGUuREVQVEhfQlVGRkVSX0JJVCksdGhpcy5nbHBsb3Quc2V0RGlydHkoKSx0aGlzLmdscGxvdC5kcmF3KCksZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUixudWxsKTt2YXIgYT1uZXcgVWludDhBcnJheShyKmkqNCk7ZS5yZWFkUGl4ZWxzKDAsMCxyLGksZS5SR0JBLGUuVU5TSUdORURfQllURSxhKTtmb3IodmFyIG89MCxzPWktMTtvPHM7KytvLC0tcylmb3IodmFyIGw9MDtsPHI7KytsKWZvcih2YXIgYz0wO2M8NDsrK2Mpe3ZhciB1PWFbNCoocipvK2wpK2NdO2FbNCoocipvK2wpK2NdPWFbNCoocipzK2wpK2NdLGFbNCoocipzK2wpK2NdPXV9dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Zi53aWR0aD1yLGYuaGVpZ2h0PWk7dmFyIGgscD1mLmdldENvbnRleHQoIjJkIiksZD1wLmNyZWF0ZUltYWdlRGF0YShyLGkpO3N3aXRjaChkLmRhdGEuc2V0KGEpLHAucHV0SW1hZ2VEYXRhKGQsMCwwKSx0KXtjYXNlImpwZWciOmg9Zi50b0RhdGFVUkwoImltYWdlL2pwZWciKTticmVhaztjYXNlIndlYnAiOmg9Zi50b0RhdGFVUkwoImltYWdlL3dlYnAiKTticmVhaztkZWZhdWx0Omg9Zi50b0RhdGFVUkwoImltYWdlL3BuZyIpfXJldHVybiB0aGlzLnN0YXRpY1Bsb3QmJnRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKG4pLGh9LEEudXBkYXRlU2l6ZT1mdW5jdGlvbih0KXt0fHwodD10aGlzLmNhbnZhcyk7dmFyIGU9dGhpcy5waXhlbFJhdGlvLHI9dGhpcy5mdWxsTGF5b3V0LG49ci53aWR0aCxpPXIuaGVpZ2h0LGE9MHxNYXRoLmNlaWwoZSpuKSxvPTB8TWF0aC5jZWlsKGUqaSk7cmV0dXJuIHQud2lkdGg9PT1hJiZ0LmhlaWdodD09PW98fCh0LndpZHRoPWEsdC5oZWlnaHQ9byksdH0sQS5jb21wdXRlVGlja01hcmtzPWZ1bmN0aW9uKCl7dGhpcy54YXhpcy5zZXRTY2FsZSgpLHRoaXMueWF4aXMuc2V0U2NhbGUoKTtmb3IodmFyIHQ9W28uY2FsY1RpY2tzKHRoaXMueGF4aXMpLG8uY2FsY1RpY2tzKHRoaXMueWF4aXMpXSxlPTA7ZTwyOysrZSlmb3IodmFyIHI9MDtyPHRbZV0ubGVuZ3RoOysrcil0W2VdW3JdLnRleHQ9dFtlXVtyXS50ZXh0KyIiO3JldHVybiB0fSxBLnVwZGF0ZVJlZnM9ZnVuY3Rpb24odCl7dGhpcy5mdWxsTGF5b3V0PXQ7dmFyIGU9dGhpcy5pZC5tYXRjaChUKSxyPSJ4YXhpcyIrZVsxXSxuPSJ5YXhpcyIrZVsyXTt0aGlzLnhheGlzPXRoaXMuZnVsbExheW91dFtyXSx0aGlzLnlheGlzPXRoaXMuZnVsbExheW91dFtuXX0sQS5yZWxheW91dENhbGxiYWNrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncmFwaERpdixlPXRoaXMueGF4aXMscj10aGlzLnlheGlzLG49dC5sYXlvdXQsaT17fSxvPWlbZS5fbmFtZSsiLnJhbmdlIl09ZS5yYW5nZS5zbGljZSgpLHM9aVtyLl9uYW1lKyIucmFuZ2UiXT1yLnJhbmdlLnNsaWNlKCk7aVtlLl9uYW1lKyIuYXV0b3JhbmdlIl09ZS5hdXRvcmFuZ2UsaVtyLl9uYW1lKyIuYXV0b3JhbmdlIl09ci5hdXRvcmFuZ2UsYS5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0Iix0LmxheW91dCx0Ll9mdWxsTGF5b3V0Ll9wcmVHVUksaSk7dmFyIGw9bltlLl9uYW1lXTtsLnJhbmdlPW8sbC5hdXRvcmFuZ2U9ZS5hdXRvcmFuZ2U7dmFyIGM9bltyLl9uYW1lXTtjLnJhbmdlPXMsYy5hdXRvcmFuZ2U9ci5hdXRvcmFuZ2UsaS5sYXN0SW5wdXRUaW1lPXRoaXMuY2FtZXJhLmxhc3RJbnB1dFRpbWUsdC5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGkpfSxBLmNhbWVyYUNoYW5nZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNhbWVyYTt0aGlzLmdscGxvdC5zZXREYXRhQm94KHRoaXMuY2FsY0RhdGFCb3goKSk7dmFyIGU9dGhpcy5jb21wdXRlVGlja01hcmtzKCk7KGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjwyOysrcil7dmFyIG49dFtyXSxpPWVbcl07aWYobi5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIGE9MDthPG4ubGVuZ3RoOysrYSlpZihuW2FdLnghPT1pW2FdLngpcmV0dXJuITB9cmV0dXJuITF9KShlLHRoaXMuZ2xwbG90T3B0aW9ucy50aWNrcykmJih0aGlzLmdscGxvdE9wdGlvbnMudGlja3M9ZSx0aGlzLmdscGxvdE9wdGlvbnMuZGF0YUJveD10LmRhdGFCb3gsdGhpcy5nbHBsb3QudXBkYXRlKHRoaXMuZ2xwbG90T3B0aW9ucyksdGhpcy5oYW5kbGVBbm5vdGF0aW9ucygpKX0sQS5oYW5kbGVBbm5vdGF0aW9ucz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmdyYXBoRGl2LGU9dGhpcy5mdWxsTGF5b3V0LmFubm90YXRpb25zLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLnhyZWY9PT10aGlzLnhheGlzLl9pZCYmbi55cmVmPT09dGhpcy55YXhpcy5faWQmJmEuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXdPbmUiKSh0LHIpfX0sQS5kZXN0cm95PWZ1bmN0aW9uKCl7aWYodGhpcy5nbHBsb3Qpe3ZhciB0PXRoaXMudHJhY2VzO3QmJk9iamVjdC5rZXlzKHQpLm1hcCgoZnVuY3Rpb24oZSl7dFtlXS5kaXNwb3NlKCksZGVsZXRlIHRbZV19KSksdGhpcy5nbHBsb3QuZGlzcG9zZSgpLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuc3ZnQ29udGFpbmVyKSx0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLm1vdXNlQ29udGFpbmVyKSx0aGlzLmZ1bGxEYXRhPW51bGwsdGhpcy5nbHBsb3Q9bnVsbCx0aGlzLnN0b3BwZWQ9ITAsdGhpcy5jYW1lcmEubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLHRoaXMubW91c2VDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMuY2FtZXJhLndoZWVsTGlzdGVuZXIpLHRoaXMuY2FtZXJhPW51bGx9fSxBLnBsb3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZ2xwbG90O3RoaXMudXBkYXRlUmVmcyhyKSx0aGlzLnhheGlzLmNsZWFyQ2FsYygpLHRoaXMueWF4aXMuY2xlYXJDYWxjKCksdGhpcy51cGRhdGVUcmFjZXModCxlKSx0aGlzLnVwZGF0ZUZ4KHIuZHJhZ21vZGUpO3ZhciBpPXIud2lkdGgsYT1yLmhlaWdodDt0aGlzLnVwZGF0ZVNpemUodGhpcy5jYW52YXMpO3ZhciBvPXRoaXMuZ2xwbG90T3B0aW9ucztvLm1lcmdlKHIpLG8uc2NyZWVuQm94PVswLDAsaSxhXTt2YXIgcz17X2Z1bGxMYXlvdXQ6e19heGlzQ29uc3RyYWludEdyb3VwczpyLl9heGlzQ29uc3RyYWludEdyb3Vwcyx4YXhpczp0aGlzLnhheGlzLHlheGlzOnRoaXMueWF4aXMsX3NpemU6ci5fc2l6ZX19O3Yocyx0aGlzLnhheGlzKSx2KHMsdGhpcy55YXhpcyk7dmFyIGwsYyx1PXIuX3NpemUsZj10aGlzLnhheGlzLmRvbWFpbixoPXRoaXMueWF4aXMuZG9tYWluO2ZvcihvLnZpZXdCb3g9W3UubCtmWzBdKnUudyx1LmIraFswXSp1LmgsaS11LnItKDEtZlsxXSkqdS53LGEtdS50LSgxLWhbMV0pKnUuaF0sdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS53aWR0aD11LncqKGZbMV0tZlswXSkrInB4Iix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmhlaWdodD11LmgqKGhbMV0taFswXSkrInB4Iix0aGlzLm1vdXNlQ29udGFpbmVyLmhlaWdodD11LmgqKGhbMV0taFswXSksdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS5sZWZ0PXUubCtmWzBdKnUudysicHgiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUudG9wPXUudCsoMS1oWzFdKSp1LmgrInB4IixjPTA7YzwyOysrYykobD10aGlzW3dbY11dKS5fbGVuZ3RoPW8udmlld0JveFtjKzJdLW8udmlld0JveFtjXSx5KHRoaXMuZ3JhcGhEaXYsbCksbC5zZXRTY2FsZSgpO2cocyksby50aWNrcz10aGlzLmNvbXB1dGVUaWNrTWFya3MoKSxvLmRhdGFCb3g9dGhpcy5jYWxjRGF0YUJveCgpLG8ubWVyZ2Uociksbi51cGRhdGUobyksdGhpcy5nbHBsb3QuZHJhdygpfSxBLmNhbGNEYXRhQm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy54YXhpcyxlPXRoaXMueWF4aXMscj10LnJhbmdlLG49ZS5yYW5nZSxpPXQucjJsLGE9ZS5yMmw7cmV0dXJuW2koclswXSksYShuWzBdKSxpKHJbMV0pLGEoblsxXSldfSxBLnNldFJhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnhheGlzLHI9dGhpcy55YXhpcyxuPWUubDJyLGk9ci5sMnI7ZS5yYW5nZT1bbih0WzBdKSxuKHRbMl0pXSxyLnJhbmdlPVtpKHRbMV0pLGkodFszXSldfSxBLnVwZGF0ZVRyYWNlcz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPU9iamVjdC5rZXlzKHRoaXMudHJhY2VzKTt0aGlzLmZ1bGxEYXRhPXQ7dDpmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXt2YXIgbz1hW3JdLHM9dGhpcy50cmFjZXNbb107Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZigoaT10W25dKS51aWQ9PT1vJiZpLnR5cGU9PT1zLnR5cGUpY29udGludWUgdDtzLmRpc3Bvc2UoKSxkZWxldGUgdGhpcy50cmFjZXNbb119Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7aT10W3JdO3ZhciBsPWVbcl0sYz10aGlzLnRyYWNlc1tpLnVpZF07Yz9jLnVwZGF0ZShpLGwpOihjPWkuX21vZHVsZS5wbG90KHRoaXMsaSxsKSx0aGlzLnRyYWNlc1tpLnVpZF09Yyl9dGhpcy5nbHBsb3Qub2JqZWN0cy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0Ll90cmFjZS5pbmRleC1lLl90cmFjZS5pbmRleH0pKX0sQS51cGRhdGVGeD1mdW5jdGlvbih0KXtfKHQpfHxiKHQpPyh0aGlzLnBpY2tDYW52YXMuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiKToodGhpcy5waWNrQ2FudmFzLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJhdXRvIix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJhdXRvIiksdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS5jdXJzb3I9InBhbiI9PT10PyJtb3ZlIjoiem9vbSI9PT10PyJjcm9zc2hhaXIiOm51bGx9LEEuZW1pdFBvaW50QWN0aW9uPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC50cmFjZS51aWQsaT10LnBvaW50SW5kZXgsYT0wO2E8dGhpcy5mdWxsRGF0YS5sZW5ndGg7YSsrKXRoaXMuZnVsbERhdGFbYV0udWlkPT09biYmKHI9dGhpcy5mdWxsRGF0YVthXSk7dmFyIG89e3g6dC50cmFjZUNvb3JkWzBdLHk6dC50cmFjZUNvb3JkWzFdLGN1cnZlTnVtYmVyOnIuaW5kZXgscG9pbnROdW1iZXI6aSxkYXRhOnIuX2lucHV0LGZ1bGxEYXRhOnRoaXMuZnVsbERhdGEseGF4aXM6dGhpcy54YXhpcyx5YXhpczp0aGlzLnlheGlzfTtzLmFwcGVuZEFycmF5UG9pbnRWYWx1ZShvLHIsaSksdGhpcy5ncmFwaERpdi5lbWl0KGUse3BvaW50czpbb119KX0sQS5kcmF3PWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RvcHBlZCl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmVkcmF3KTt2YXIgdD10aGlzLmdscGxvdCxlPXRoaXMuY2FtZXJhLHI9ZS5tb3VzZUxpc3RlbmVyLG49MT09PXRoaXMubGFzdEJ1dHRvblN0YXRlJiYwPT09ci5idXR0b25zLGk9dGhpcy5mdWxsTGF5b3V0O3RoaXMubGFzdEJ1dHRvblN0YXRlPXIuYnV0dG9ucyx0aGlzLmNhbWVyYUNoYW5nZWQoKTt2YXIgYSxvPXIueCp0LnBpeGVsUmF0aW8sbD10aGlzLmNhbnZhcy5oZWlnaHQtdC5waXhlbFJhdGlvKnIueTtpZihlLmJveEVuYWJsZWQmJiJ6b29tIj09PWkuZHJhZ21vZGUpe3RoaXMuc2VsZWN0Qm94LmVuYWJsZWQ9ITA7Zm9yKHZhciBjPXRoaXMuc2VsZWN0Qm94LnNlbGVjdEJveD1bTWF0aC5taW4oZS5ib3hTdGFydFswXSxlLmJveEVuZFswXSksTWF0aC5taW4oZS5ib3hTdGFydFsxXSxlLmJveEVuZFsxXSksTWF0aC5tYXgoZS5ib3hTdGFydFswXSxlLmJveEVuZFswXSksTWF0aC5tYXgoZS5ib3hTdGFydFsxXSxlLmJveEVuZFsxXSldLHU9MDt1PDI7dSsrKWUuYm94U3RhcnRbdV09PT1lLmJveEVuZFt1XSYmKGNbdV09dC5kYXRhQm94W3VdLGNbdSsyXT10LmRhdGFCb3hbdSsyXSk7dC5zZXREaXJ0eSgpfWVsc2UgaWYoIWUucGFubmluZyYmdGhpcy5pc01vdXNlT3Zlcil7dGhpcy5zZWxlY3RCb3guZW5hYmxlZD0hMTt2YXIgZj1pLl9zaXplLGg9dGhpcy54YXhpcy5kb21haW4scD10aGlzLnlheGlzLmRvbWFpbixkPShhPXQucGljayhvL3QucGl4ZWxSYXRpbytmLmwraFswXSpmLncsbC90LnBpeGVsUmF0aW8tKGYudCsoMS1wWzFdKSpmLmgpKSkmJmEub2JqZWN0Ll90cmFjZS5oYW5kbGVQaWNrKGEpO2lmKGQmJm4mJnRoaXMuZW1pdFBvaW50QWN0aW9uKGQsInBsb3RseV9jbGljayIpLGEmJiJza2lwIiE9PWEub2JqZWN0Ll90cmFjZS5ob3ZlcmluZm8mJmkuaG92ZXJtb2RlJiZkJiYoIXRoaXMubGFzdFBpY2tSZXN1bHR8fHRoaXMubGFzdFBpY2tSZXN1bHQudHJhY2VVaWQhPT1kLnRyYWNlLnVpZHx8dGhpcy5sYXN0UGlja1Jlc3VsdC5kYXRhQ29vcmRbMF0hPT1kLmRhdGFDb29yZFswXXx8dGhpcy5sYXN0UGlja1Jlc3VsdC5kYXRhQ29vcmRbMV0hPT1kLmRhdGFDb29yZFsxXSkpe3ZhciBtPWQ7dGhpcy5sYXN0UGlja1Jlc3VsdD17dHJhY2VVaWQ6ZC50cmFjZT9kLnRyYWNlLnVpZDpudWxsLGRhdGFDb29yZDpkLmRhdGFDb29yZC5zbGljZSgpfSx0aGlzLnNwaWtlcy51cGRhdGUoe2NlbnRlcjphLmRhdGFDb29yZH0pLG0uc2NyZWVuQ29vcmQ9WygodC52aWV3Qm94WzJdLXQudmlld0JveFswXSkqKGEuZGF0YUNvb3JkWzBdLXQuZGF0YUJveFswXSkvKHQuZGF0YUJveFsyXS10LmRhdGFCb3hbMF0pK3Qudmlld0JveFswXSkvdC5waXhlbFJhdGlvLCh0aGlzLmNhbnZhcy5oZWlnaHQtKHQudmlld0JveFszXS10LnZpZXdCb3hbMV0pKihhLmRhdGFDb29yZFsxXS10LmRhdGFCb3hbMV0pLyh0LmRhdGFCb3hbM10tdC5kYXRhQm94WzFdKS10LnZpZXdCb3hbMV0pL3QucGl4ZWxSYXRpb10sdGhpcy5lbWl0UG9pbnRBY3Rpb24oZCwicGxvdGx5X2hvdmVyIik7dmFyIGc9dGhpcy5mdWxsRGF0YVttLnRyYWNlLmluZGV4XXx8e30sdj1tLnBvaW50SW5kZXgseT1zLmNhc3RIb3ZlcmluZm8oZyxpLHYpO2lmKHkmJiJhbGwiIT09eSl7dmFyIHg9eS5zcGxpdCgiKyIpOy0xPT09eC5pbmRleE9mKCJ4IikmJihtLnRyYWNlQ29vcmRbMF09dm9pZCAwKSwtMT09PXguaW5kZXhPZigieSIpJiYobS50cmFjZUNvb3JkWzFdPXZvaWQgMCksLTE9PT14LmluZGV4T2YoInoiKSYmKG0udHJhY2VDb29yZFsyXT12b2lkIDApLC0xPT09eC5pbmRleE9mKCJ0ZXh0IikmJihtLnRleHRMYWJlbD12b2lkIDApLC0xPT09eC5pbmRleE9mKCJuYW1lIikmJihtLm5hbWU9dm9pZCAwKX1zLmxvbmVIb3Zlcih7eDptLnNjcmVlbkNvb3JkWzBdLHk6bS5zY3JlZW5Db29yZFsxXSx4TGFiZWw6dGhpcy5ob3ZlckZvcm1hdHRlcigieGF4aXMiLG0udHJhY2VDb29yZFswXSkseUxhYmVsOnRoaXMuaG92ZXJGb3JtYXR0ZXIoInlheGlzIixtLnRyYWNlQ29vcmRbMV0pLHpMYWJlbDptLnRyYWNlQ29vcmRbMl0sdGV4dDptLnRleHRMYWJlbCxuYW1lOm0ubmFtZSxjb2xvcjpzLmNhc3RIb3Zlck9wdGlvbihnLHYsImJnY29sb3IiKXx8bS5jb2xvcixib3JkZXJDb2xvcjpzLmNhc3RIb3Zlck9wdGlvbihnLHYsImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpzLmNhc3RIb3Zlck9wdGlvbihnLHYsImZvbnQuZmFtaWx5IiksZm9udFNpemU6cy5jYXN0SG92ZXJPcHRpb24oZyx2LCJmb250LnNpemUiKSxmb250Q29sb3I6cy5jYXN0SG92ZXJPcHRpb24oZyx2LCJmb250LmNvbG9yIiksbmFtZUxlbmd0aDpzLmNhc3RIb3Zlck9wdGlvbihnLHYsIm5hbWVsZW5ndGgiKSx0ZXh0QWxpZ246cy5jYXN0SG92ZXJPcHRpb24oZyx2LCJhbGlnbiIpfSx7Y29udGFpbmVyOnRoaXMuc3ZnQ29udGFpbmVyLGdkOnRoaXMuZ3JhcGhEaXZ9KX19YXx8dGhpcy51bmhvdmVyKCksdC5kcmF3KCl9fSxBLnVuaG92ZXI9ZnVuY3Rpb24oKXt0aGlzLmxhc3RQaWNrUmVzdWx0JiYodGhpcy5zcGlrZXMudXBkYXRlKHt9KSx0aGlzLmxhc3RQaWNrUmVzdWx0PW51bGwsdGhpcy5ncmFwaERpdi5lbWl0KCJwbG90bHlfdW5ob3ZlciIpLHMubG9uZVVuaG92ZXIodGhpcy5zdmdDb250YWluZXIpKX0sQS5ob3ZlckZvcm1hdHRlcj1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PWUpe3ZhciByPXRoaXNbdF07cmV0dXJuIG8udGlja1RleHQocixyLmMybChlKSwiaG92ZXIiKS50ZXh0fX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIjo2NTcsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY3OSwiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnIjo3OTgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjgyNiwiLi4vY2FydGVzaWFuL2NvbnN0YW50cyI6ODM0LCIuLi9jYXJ0ZXNpYW4vY29uc3RyYWludHMiOjgzNSwiLi9jYW1lcmEiOjg2NSwiLi9jb252ZXJ0Ijo4NjYsImdsLXBsb3QyZCI6MzA5LCJnbC1zZWxlY3QtYm94IjozMjEsImdsLXNwaWtlczJkIjozMzAsIndlYmdsLWNvbnRleHQiOjYwMn1dLDg2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsaT10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuL3NjZW5lIiksbz10KCIuLi9nZXRfZGF0YSIpLmdldFN1YnBsb3REYXRhLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpO3IubmFtZT0iZ2wzZCIsci5hdHRyPSJzY2VuZSIsci5pZFJvb3Q9InNjZW5lIixyLmlkUmVnZXg9ci5hdHRyUmVnZXg9cy5jb3VudGVyUmVnZXgoInNjZW5lIiksci5hdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2F0dHJpYnV0ZXMiKSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiKSxyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe2hvdmVybGFiZWw6aS5ob3ZlcmxhYmVsfSwicGxvdCIsIm5lc3RlZCIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXQvZGVmYXVsdHMiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9mdWxsRGF0YSxuPWUuX3N1YnBsb3RzLmdsM2QsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgcz1uW2ldLGw9byhyLCJnbDNkIixzKSxjPWVbc10sdT1jLmNhbWVyYSxmPWMuX3NjZW5lO2Z8fChmPW5ldyBhKHtpZDpzLGdyYXBoRGl2OnQsY29udGFpbmVyOnQucXVlcnlTZWxlY3RvcigiLmdsLWNvbnRhaW5lciIpLHN0YXRpY1Bsb3Q6dC5fY29udGV4dC5zdGF0aWNQbG90LHBsb3RHbFBpeGVsUmF0aW86dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvLGNhbWVyYTp1fSxlKSxjLl9zY2VuZT1mKSxmLnZpZXdJbml0aWFsfHwoZi52aWV3SW5pdGlhbD17dXA6e3g6dS51cC54LHk6dS51cC55LHo6dS51cC56fSxleWU6e3g6dS5leWUueCx5OnUuZXllLnksejp1LmV5ZS56fSxjZW50ZXI6e3g6dS5jZW50ZXIueCx5OnUuY2VudGVyLnksejp1LmNlbnRlci56fX0pLGYucGxvdChsLGUsdC5sYXlvdXQpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHMuZ2wzZHx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdOyFlW29dJiZuW29dLl9zY2VuZSYmKG5bb10uX3NjZW5lLmRlc3Ryb3koKSxuLl9pbmZvbGF5ZXImJm4uX2luZm9sYXllci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLSIrbykucmVtb3ZlKCkpfX0sci50b1NWRz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsM2Qsbj1lLl9zaXplLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9ZVtyW2ldXSxvPWEuZG9tYWluLHM9YS5fc2NlbmUsYz1zLnRvSW1hZ2UoInBuZyIpO2UuX2dsaW1hZ2VzLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6bC5zdmcsInhsaW5rOmhyZWYiOmMseDpuLmwrbi53Km8ueFswXSx5Om4udCtuLmgqKDEtby55WzFdKSx3aWR0aDpuLncqKG8ueFsxXS1vLnhbMF0pLGhlaWdodDpuLmgqKG8ueVsxXS1vLnlbMF0pLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSkscy5kZXN0cm95KCl9fSxyLmNsZWFuSWQ9ZnVuY3Rpb24odCl7aWYodC5tYXRjaCgvXnNjZW5lWzAtOV0qJC8pKXt2YXIgZT10LnN1YnN0cig1KTtyZXR1cm4iMSI9PT1lJiYoZT0iIiksInNjZW5lIitlfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsM2Qsbj0wO248ci5sZW5ndGg7bisrKXtlW3Jbbl1dLl9zY2VuZS51cGRhdGVGeChlLmRyYWdtb2RlLGUuaG92ZXJtb2RlKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXMiOjY4MCwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjc1MywiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgwOSwiLi4vZ2V0X2RhdGEiOjg2NCwiLi9sYXlvdXQvYXR0cmlidXRlcyI6ODcwLCIuL2xheW91dC9kZWZhdWx0cyI6ODc0LCIuL2xheW91dC9sYXlvdXRfYXR0cmlidXRlcyI6ODc1LCIuL3NjZW5lIjo4Nzl9XSw4NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzY2VuZTp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJzY2VuZSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifX19LHt9XSw4NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9byh7dmlzaWJsZTppLnZpc2libGUsc2hvd3NwaWtlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc3Bpa2VzaWRlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc3Bpa2V0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyfSxzcGlrZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxzaG93YmFja2dyb3VuZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sYmFja2dyb3VuZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgyMDQsIDIwNCwgMjA0LCAwLjUpIn0sc2hvd2F4ZXNsYWJlbHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGNvbG9yOmkuY29sb3IsY2F0ZWdvcnlvcmRlcjppLmNhdGVnb3J5b3JkZXIsY2F0ZWdvcnlhcnJheTppLmNhdGVnb3J5YXJyYXksdGl0bGU6e3RleHQ6aS50aXRsZS50ZXh0LGZvbnQ6aS50aXRsZS5mb250fSx0eXBlOmEoe30saS50eXBlLHt2YWx1ZXM6WyItIiwibGluZWFyIiwibG9nIiwiZGF0ZSIsImNhdGVnb3J5Il19KSxhdXRvdHlwZW51bWJlcnM6aS5hdXRvdHlwZW51bWJlcnMsYXV0b3JhbmdlOmkuYXV0b3JhbmdlLHJhbmdlbW9kZTppLnJhbmdlbW9kZSxyYW5nZTphKHt9LGkucmFuZ2Use2l0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9fSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9fV0sYW5pbTohMX0pLHRpY2ttb2RlOmkudGlja21vZGUsbnRpY2tzOmkubnRpY2tzLHRpY2swOmkudGljazAsZHRpY2s6aS5kdGljayx0aWNrdmFsczppLnRpY2t2YWxzLHRpY2t0ZXh0OmkudGlja3RleHQsdGlja3M6aS50aWNrcyxtaXJyb3I6aS5taXJyb3IsdGlja2xlbjppLnRpY2tsZW4sdGlja3dpZHRoOmkudGlja3dpZHRoLHRpY2tjb2xvcjppLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczppLnNob3d0aWNrbGFiZWxzLHRpY2tmb250OmkudGlja2ZvbnQsdGlja2FuZ2xlOmkudGlja2FuZ2xlLHRpY2twcmVmaXg6aS50aWNrcHJlZml4LHNob3d0aWNrcHJlZml4Omkuc2hvd3RpY2twcmVmaXgsdGlja3N1ZmZpeDppLnRpY2tzdWZmaXgsc2hvd3RpY2tzdWZmaXg6aS5zaG93dGlja3N1ZmZpeCxzaG93ZXhwb25lbnQ6aS5zaG93ZXhwb25lbnQsZXhwb25lbnRmb3JtYXQ6aS5leHBvbmVudGZvcm1hdCxtaW5leHBvbmVudDppLm1pbmV4cG9uZW50LHNlcGFyYXRldGhvdXNhbmRzOmkuc2VwYXJhdGV0aG91c2FuZHMsdGlja2Zvcm1hdDppLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmkudGlja2Zvcm1hdHN0b3BzLGhvdmVyZm9ybWF0OmkuaG92ZXJmb3JtYXQsc2hvd2xpbmU6aS5zaG93bGluZSxsaW5lY29sb3I6aS5saW5lY29sb3IsbGluZXdpZHRoOmkubGluZXdpZHRoLHNob3dncmlkOmkuc2hvd2dyaWQsZ3JpZGNvbG9yOmEoe30saS5ncmlkY29sb3Ise2RmbHQ6InJnYigyMDQsIDIwNCwgMjA0KSJ9KSxncmlkd2lkdGg6aS5ncmlkd2lkdGgsemVyb2xpbmU6aS56ZXJvbGluZSx6ZXJvbGluZWNvbG9yOmkuemVyb2xpbmVjb2xvcix6ZXJvbGluZXdpZHRoOmkuemVyb2xpbmV3aWR0aCxfZGVwcmVjYXRlZDp7dGl0bGU6aS5fZGVwcmVjYXRlZC50aXRsZSx0aXRsZWZvbnQ6aS5fZGVwcmVjYXRlZC50aXRsZWZvbnR9fSwicGxvdCIsImZyb20tcm9vdCIpfSx7Ii4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MDksIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6ODQyfV0sODcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInRpbnljb2xvcjIiKS5taXgsaT10KCIuLi8uLi8uLi9saWIiKSxhPXQoIi4uLy4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxvPXQoIi4vYXhpc19hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jYXJ0ZXNpYW4vdHlwZV9kZWZhdWx0cyIpLGw9dCgiLi4vLi4vY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiKSxjPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgdSxmO2Z1bmN0aW9uIGgodCxlKXtyZXR1cm4gaS5jb2VyY2UodSxmLG8sdCxlKX1mb3IodmFyIHA9MDtwPGMubGVuZ3RoO3ArKyl7dmFyIGQ9Y1twXTt1PXRbZF18fHt9LChmPWEubmV3Q29udGFpbmVyKGUsZCkpLl9pZD1kWzBdK3Iuc2NlbmUsZi5fbmFtZT1kLHModSxmLGgsciksbCh1LGYsaCx7Zm9udDpyLmZvbnQsbGV0dGVyOmRbMF0sZGF0YTpyLmRhdGEsc2hvd0dyaWQ6ITAsbm9UaWNrc29uOiEwLG5vVGlja2xhYmVsbW9kZTohMCxub1RpY2tsYWJlbHBvc2l0aW9uOiEwLG5vVGlja2xhYmVsb3ZlcmZsb3c6ITAsYmdDb2xvcjpyLmJnQ29sb3IsY2FsZW5kYXI6ci5jYWxlbmRhcn0sci5mdWxsTGF5b3V0KSxoKCJncmlkY29sb3IiLG4oZi5jb2xvcixyLmJnQ29sb3IsMTM2MDAvMTg3KS50b1JnYlN0cmluZygpKSxoKCJ0aXRsZS50ZXh0IixkWzBdKSxmLnNldFNjYWxlPWkubm9vcCxoKCJzaG93c3Bpa2VzIikmJihoKCJzcGlrZXNpZGVzIiksaCgic3Bpa2V0aGlja25lc3MiKSxoKCJzcGlrZWNvbG9yIixmLmNvbG9yKSksaCgic2hvd2F4ZXNsYWJlbHMiKSxoKCJzaG93YmFja2dyb3VuZCIpJiZoKCJiYWNrZ3JvdW5kY29sb3IiKX19fSx7Ii4uLy4uLy4uL2xpYiI6Nzc2LCIuLi8uLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTYsIi4uLy4uL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIjo4MjksIi4uLy4uL2NhcnRlc2lhbi90eXBlX2RlZmF1bHRzIjo4NTMsIi4vYXhpc19hdHRyaWJ1dGVzIjo4NzEsdGlueWNvbG9yMjo1NzJ9XSw4NzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLGk9dCgiLi4vLi4vLi4vbGliIiksYT1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO2Z1bmN0aW9uIG8oKXt0aGlzLmJvdW5kcz1bWy0xMCwtMTAsLTEwXSxbMTAsMTAsMTBdXSx0aGlzLnRpY2tzPVtbXSxbXSxbXV0sdGhpcy50aWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy50aWNrRm9udD1bInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiJdLHRoaXMudGlja1NpemU9WzEyLDEyLDEyXSx0aGlzLnRpY2tBbmdsZT1bMCwwLDBdLHRoaXMudGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrUGFkPVsxOCwxOCwxOF0sdGhpcy5sYWJlbHM9WyJ4IiwieSIsInoiXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5sYWJlbEZvbnQ9WyJPcGVuIFNhbnMiLCJPcGVuIFNhbnMiLCJPcGVuIFNhbnMiXSx0aGlzLmxhYmVsU2l6ZT1bMjAsMjAsMjBdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGFiZWxQYWQ9WzMwLDMwLDMwXSx0aGlzLmxpbmVFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVNaXJyb3I9WyExLCExLCExXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdLHRoaXMubGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5saW5lVGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMubGluZVRpY2tNaXJyb3I9WyExLCExLCExXSx0aGlzLmxpbmVUaWNrTGVuZ3RoPVsxMCwxMCwxMF0sdGhpcy5saW5lVGlja1dpZHRoPVsxLDEsMV0sdGhpcy5saW5lVGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ncmlkRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5ncmlkV2lkdGg9WzEsMSwxXSx0aGlzLmdyaWRDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuemVyb0VuYWJsZT1bITAsITAsITBdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuemVyb0xpbmVXaWR0aD1bMiwyLDJdLHRoaXMuYmFja2dyb3VuZEVuYWJsZT1bITAsITAsITBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVtbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV0sWy44LC44LC44LC41XV0sdGhpcy5fZGVmYXVsdFRpY2tQYWQ9dGhpcy50aWNrUGFkLnNsaWNlKCksdGhpcy5fZGVmYXVsdExhYmVsUGFkPXRoaXMubGFiZWxQYWQuc2xpY2UoKSx0aGlzLl9kZWZhdWx0TGluZVRpY2tMZW5ndGg9dGhpcy5saW5lVGlja0xlbmd0aC5zbGljZSgpfW8ucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjwzOysrcil7dmFyIG89ZVthW3JdXTtvLnZpc2libGU/KHRoaXMubGFiZWxzW3JdPXQuX21ldGE/aS50ZW1wbGF0ZVN0cmluZyhvLnRpdGxlLnRleHQsdC5fbWV0YSk6by50aXRsZS50ZXh0LCJmb250ImluIG8udGl0bGUmJihvLnRpdGxlLmZvbnQuY29sb3ImJih0aGlzLmxhYmVsQ29sb3Jbcl09bihvLnRpdGxlLmZvbnQuY29sb3IpKSxvLnRpdGxlLmZvbnQuZmFtaWx5JiYodGhpcy5sYWJlbEZvbnRbcl09by50aXRsZS5mb250LmZhbWlseSksby50aXRsZS5mb250LnNpemUmJih0aGlzLmxhYmVsU2l6ZVtyXT1vLnRpdGxlLmZvbnQuc2l6ZSkpLCJzaG93bGluZSJpbiBvJiYodGhpcy5saW5lRW5hYmxlW3JdPW8uc2hvd2xpbmUpLCJsaW5lY29sb3IiaW4gbyYmKHRoaXMubGluZUNvbG9yW3JdPW4oby5saW5lY29sb3IpKSwibGluZXdpZHRoImluIG8mJih0aGlzLmxpbmVXaWR0aFtyXT1vLmxpbmV3aWR0aCksInNob3dncmlkImluIG8mJih0aGlzLmdyaWRFbmFibGVbcl09by5zaG93Z3JpZCksImdyaWRjb2xvciJpbiBvJiYodGhpcy5ncmlkQ29sb3Jbcl09bihvLmdyaWRjb2xvcikpLCJncmlkd2lkdGgiaW4gbyYmKHRoaXMuZ3JpZFdpZHRoW3JdPW8uZ3JpZHdpZHRoKSwibG9nIj09PW8udHlwZT90aGlzLnplcm9FbmFibGVbcl09ITE6Inplcm9saW5lImluIG8mJih0aGlzLnplcm9FbmFibGVbcl09by56ZXJvbGluZSksInplcm9saW5lY29sb3IiaW4gbyYmKHRoaXMuemVyb0xpbmVDb2xvcltyXT1uKG8uemVyb2xpbmVjb2xvcikpLCJ6ZXJvbGluZXdpZHRoImluIG8mJih0aGlzLnplcm9MaW5lV2lkdGhbcl09by56ZXJvbGluZXdpZHRoKSwidGlja3MiaW4gbyYmby50aWNrcz90aGlzLmxpbmVUaWNrRW5hYmxlW3JdPSEwOnRoaXMubGluZVRpY2tFbmFibGVbcl09ITEsInRpY2tsZW4iaW4gbyYmKHRoaXMubGluZVRpY2tMZW5ndGhbcl09dGhpcy5fZGVmYXVsdExpbmVUaWNrTGVuZ3RoW3JdPW8udGlja2xlbiksInRpY2tjb2xvciJpbiBvJiYodGhpcy5saW5lVGlja0NvbG9yW3JdPW4oby50aWNrY29sb3IpKSwidGlja3dpZHRoImluIG8mJih0aGlzLmxpbmVUaWNrV2lkdGhbcl09by50aWNrd2lkdGgpLCJ0aWNrYW5nbGUiaW4gbyYmKHRoaXMudGlja0FuZ2xlW3JdPSJhdXRvIj09PW8udGlja2FuZ2xlPy0zNjAwOk1hdGguUEkqLW8udGlja2FuZ2xlLzE4MCksInNob3d0aWNrbGFiZWxzImluIG8mJih0aGlzLnRpY2tFbmFibGVbcl09by5zaG93dGlja2xhYmVscyksInRpY2tmb250ImluIG8mJihvLnRpY2tmb250LmNvbG9yJiYodGhpcy50aWNrQ29sb3Jbcl09bihvLnRpY2tmb250LmNvbG9yKSksby50aWNrZm9udC5mYW1pbHkmJih0aGlzLnRpY2tGb250W3JdPW8udGlja2ZvbnQuZmFtaWx5KSxvLnRpY2tmb250LnNpemUmJih0aGlzLnRpY2tTaXplW3JdPW8udGlja2ZvbnQuc2l6ZSkpLCJtaXJyb3IiaW4gbz8tMSE9PVsidGlja3MiLCJhbGwiLCJhbGx0aWNrcyJdLmluZGV4T2Yoby5taXJyb3IpPyh0aGlzLmxpbmVUaWNrTWlycm9yW3JdPSEwLHRoaXMubGluZU1pcnJvcltyXT0hMCk6ITA9PT1vLm1pcnJvcj8odGhpcy5saW5lVGlja01pcnJvcltyXT0hMSx0aGlzLmxpbmVNaXJyb3Jbcl09ITApOih0aGlzLmxpbmVUaWNrTWlycm9yW3JdPSExLHRoaXMubGluZU1pcnJvcltyXT0hMSk6dGhpcy5saW5lTWlycm9yW3JdPSExLCJzaG93YmFja2dyb3VuZCJpbiBvJiYhMSE9PW8uc2hvd2JhY2tncm91bmQ/KHRoaXMuYmFja2dyb3VuZEVuYWJsZVtyXT0hMCx0aGlzLmJhY2tncm91bmRDb2xvcltyXT1uKG8uYmFja2dyb3VuZGNvbG9yKSk6dGhpcy5iYWNrZ3JvdW5kRW5hYmxlW3JdPSExKToodGhpcy50aWNrRW5hYmxlW3JdPSExLHRoaXMubGFiZWxFbmFibGVbcl09ITEsdGhpcy5saW5lRW5hYmxlW3JdPSExLHRoaXMubGluZVRpY2tFbmFibGVbcl09ITEsdGhpcy5ncmlkRW5hYmxlW3JdPSExLHRoaXMuemVyb0VuYWJsZVtyXT0hMSx0aGlzLmJhY2tncm91bmRFbmFibGVbcl09ITEpfX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IG87cmV0dXJuIHIubWVyZ2UodCxlKSxyfX0seyIuLi8uLi8uLi9saWIiOjc3NiwiLi4vLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6ODAxfV0sODc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL3N1YnBsb3RfZGVmYXVsdHMiKSxzPXQoIi4vYXhpc19kZWZhdWx0cyIpLGw9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGM9dCgiLi4vLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90RGF0YTtmdW5jdGlvbiB1KHQsZSxyLG4pe2Zvcih2YXIgbz1yKCJiZ2NvbG9yIiksbD1pLmNvbWJpbmUobyxuLnBhcGVyX2JnY29sb3IpLHU9WyJ1cCIsImNlbnRlciIsImV5ZSJdLGY9MDtmPHUubGVuZ3RoO2YrKylyKCJjYW1lcmEuIit1W2ZdKyIueCIpLHIoImNhbWVyYS4iK3VbZl0rIi55IikscigiY2FtZXJhLiIrdVtmXSsiLnoiKTtyKCJjYW1lcmEucHJvamVjdGlvbi50eXBlIik7dmFyIGg9ISFyKCJhc3BlY3RyYXRpby54IikmJiEhcigiYXNwZWN0cmF0aW8ueSIpJiYhIXIoImFzcGVjdHJhdGlvLnoiKSxwPXIoImFzcGVjdG1vZGUiLGg/Im1hbnVhbCI6ImF1dG8iKTtofHwodC5hc3BlY3RyYXRpbz1lLmFzcGVjdHJhdGlvPXt4OjEseToxLHo6MX0sIm1hbnVhbCI9PT1wJiYoZS5hc3BlY3Rtb2RlPSJhdXRvIiksdC5hc3BlY3Rtb2RlPWUuYXNwZWN0bW9kZSk7dmFyIGQ9YyhuLmZ1bGxEYXRhLCJnbDNkIixuLmlkKTtzKHQsZSx7Zm9udDpuLmZvbnQsc2NlbmU6bi5pZCxkYXRhOmQsYmdDb2xvcjpsLGNhbGVuZGFyOm4uY2FsZW5kYXIsYXV0b3R5cGVudW1iZXJzRGZsdDpuLmF1dG90eXBlbnVtYmVyc0RmbHQsZnVsbExheW91dDpuLmZ1bGxMYXlvdXR9KSxhLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMzZCIsImhhbmRsZURlZmF1bHRzIikodCxlLG4pO3ZhciBtPW4uZ2V0RGZsdEZyb21MYXlvdXQoImRyYWdtb2RlIik7aWYoITEhPT1tJiYhbSlpZihtPSJvcmJpdCIsdC5jYW1lcmEmJnQuY2FtZXJhLnVwKXt2YXIgZz10LmNhbWVyYS51cC54LHY9dC5jYW1lcmEudXAueSx5PXQuY2FtZXJhLnVwLno7MCE9PXkmJihnJiZ2JiZ5P3kvTWF0aC5zcXJ0KGcqZyt2KnYreSp5KT4uOTk5JiYobT0idHVybnRhYmxlIik6bT0idHVybnRhYmxlIil9ZWxzZSBtPSJ0dXJudGFibGUiO3IoImRyYWdtb2RlIixtKSxyKCJob3Zlcm1vZGUiLG4uZ2V0RGZsdEZyb21MYXlvdXQoImhvdmVybW9kZSIpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGg+MTtvKHQsZSxyLHt0eXBlOiJnbDNkIixhdHRyaWJ1dGVzOmwsaGFuZGxlRGVmYXVsdHM6dSxmdWxsTGF5b3V0OmUsZm9udDplLmZvbnQsZnVsbERhdGE6cixnZXREZmx0RnJvbUxheW91dDpmdW5jdGlvbihlKXtpZighaSlyZXR1cm4gbi52YWxpZGF0ZSh0W2VdLGxbZV0pP3RbZV06dm9pZCAwfSxhdXRvdHlwZW51bWJlcnNEZmx0OmUuYXV0b3R5cGVudW1iZXJzLHBhcGVyX2JnY29sb3I6ZS5wYXBlcl9iZ2NvbG9yLGNhbGVuZGFyOmUuY2FsZW5kYXJ9KX19LHsiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi8uLi9saWIiOjc3NiwiLi4vLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vLi4vZ2V0X2RhdGEiOjg2NCwiLi4vLi4vc3VicGxvdF9kZWZhdWx0cyI6ODk4LCIuL2F4aXNfZGVmYXVsdHMiOjg3MiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODc1fV0sODc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYXhpc19hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9kb21haW4iKS5hdHRyaWJ1dGVzLGE9dCgiLi4vLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuLi8uLi8uLi9saWIiKS5jb3VudGVyUmVnZXg7ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJue3g6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDp0LGVkaXRUeXBlOiJjYW1lcmEifSx5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6ZSxlZGl0VHlwZToiY2FtZXJhIn0sejp7dmFsVHlwZToibnVtYmVyIixkZmx0OnIsZWRpdFR5cGU6ImNhbWVyYSJ9LGVkaXRUeXBlOiJjYW1lcmEifX1lLmV4cG9ydHM9e19hcnJheUF0dHJSZWdleHBzOltvKCJzY2VuZSIsIi5hbm5vdGF0aW9ucyIsITApXSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSIsZWRpdFR5cGU6InBsb3QifSxjYW1lcmE6e3VwOmEocygwLDAsMSkse30pLGNlbnRlcjphKHMoMCwwLDApLHt9KSxleWU6YShzKDEuMjUsMS4yNSwxLjI1KSx7fSkscHJvamVjdGlvbjp7dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGVyc3BlY3RpdmUiLCJvcnRob2dyYXBoaWMiXSxkZmx0OiJwZXJzcGVjdGl2ZSIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYW1lcmEifSxkb21haW46aSh7bmFtZToic2NlbmUiLGVkaXRUeXBlOiJwbG90In0pLGFzcGVjdG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJjdWJlIiwiZGF0YSIsIm1hbnVhbCJdLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJhc3BlY3RyYXRpby54Ijp2b2lkIDAsImFzcGVjdHJhdGlvLnkiOnZvaWQgMCwiYXNwZWN0cmF0aW8ueiI6dm9pZCAwfX0sYXNwZWN0cmF0aW86e3g6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hc3BlY3Rtb2RlIjoibWFudWFsIn19LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hc3BlY3Rtb2RlIjoibWFudWFsIn19LHo6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hc3BlY3Rtb2RlIjoibWFudWFsIn19LGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6e2FzcGVjdG1vZGU6Im1hbnVhbCJ9fSx4YXhpczpuLHlheGlzOm4semF4aXM6bixkcmFnbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsib3JiaXQiLCJ0dXJudGFibGUiLCJ6b29tIiwicGFuIiwhMV0sZWRpdFR5cGU6InBsb3QifSxob3Zlcm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNsb3Nlc3QiLCExXSxkZmx0OiJjbG9zZXN0IixlZGl0VHlwZToibW9kZWJhciJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToicGxvdCIsX2RlcHJlY2F0ZWQ6e2NhbWVyYXBvc2l0aW9uOnt2YWxUeXBlOiJpbmZvX2FycmF5IixlZGl0VHlwZToiY2FtZXJhIn19fX0seyIuLi8uLi8uLi9saWIiOjc3NiwiLi4vLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9kb21haW4iOjg1NSwiLi9heGlzX2F0dHJpYnV0ZXMiOjg3MX1dLDg3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5IiksaT1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO2Z1bmN0aW9uIGEoKXt0aGlzLmVuYWJsZWQ9WyEwLCEwLCEwXSx0aGlzLmNvbG9ycz1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZHJhd1NpZGVzPVshMCwhMCwhMF0sdGhpcy5saW5lV2lkdGg9WzEsMSwxXX1hLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPDM7KytlKXt2YXIgcj10W2lbZV1dO3IudmlzaWJsZT8odGhpcy5lbmFibGVkW2VdPXIuc2hvd3NwaWtlcyx0aGlzLmNvbG9yc1tlXT1uKHIuc3Bpa2Vjb2xvciksdGhpcy5kcmF3U2lkZXNbZV09ci5zcGlrZXNpZGVzLHRoaXMubGluZVdpZHRoW2VdPXIuc3Bpa2V0aGlja25lc3MpOih0aGlzLmVuYWJsZWRbZV09ITEsdGhpcy5kcmF3U2lkZXNbZV09ITEpfX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBhO3JldHVybiBlLm1lcmdlKHQpLGV9fSx7Ii4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjgwMX1dLDg3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuYXhlc09wdGlvbnMscj10LmdscGxvdC5heGVzUGl4ZWxzLHM9dC5mdWxsU2NlbmVMYXlvdXQsbD1bW10sW10sW11dLGM9MDtjPDM7KytjKXt2YXIgdT1zW2FbY11dO2lmKHUuX2xlbmd0aD0ocltjXS5oaS1yW2NdLmxvKSpyW2NdLnBpeGVsc1BlckRhdGFVbml0L3QuZGF0YVNjYWxlW2NdLE1hdGguYWJzKHUuX2xlbmd0aCk9PT0xLzB8fGlzTmFOKHUuX2xlbmd0aCkpbFtjXT1bXTtlbHNle3UuX2lucHV0X3JhbmdlPXUucmFuZ2Uuc2xpY2UoKSx1LnJhbmdlWzBdPXJbY10ubG8vdC5kYXRhU2NhbGVbY10sdS5yYW5nZVsxXT1yW2NdLmhpL3QuZGF0YVNjYWxlW2NdLHUuX209MS8odC5kYXRhU2NhbGVbY10qcltjXS5waXhlbHNQZXJEYXRhVW5pdCksdS5yYW5nZVswXT09PXUucmFuZ2VbMV0mJih1LnJhbmdlWzBdLT0xLHUucmFuZ2VbMV0rPTEpO3ZhciBmPXUudGlja21vZGU7aWYoImF1dG8iPT09dS50aWNrbW9kZSl7dS50aWNrbW9kZT0ibGluZWFyIjt2YXIgaD11Lm50aWNrc3x8aS5jb25zdHJhaW4odS5fbGVuZ3RoLzQwLDQsOSk7bi5hdXRvVGlja3ModSxNYXRoLmFicyh1LnJhbmdlWzFdLXUucmFuZ2VbMF0pL2gpfWZvcih2YXIgcD1uLmNhbGNUaWNrcyh1LHttc1VUQzohMH0pLGQ9MDtkPHAubGVuZ3RoOysrZClwW2RdLng9cFtkXS54KnQuZGF0YVNjYWxlW2NdLCJkYXRlIj09PXUudHlwZSYmKHBbZF0udGV4dD1wW2RdLnRleHQucmVwbGFjZSgvXDxiclw+L2csIiAiKSk7bFtjXT1wLHUudGlja21vZGU9Zn19ZS50aWNrcz1sO2ZvcihjPTA7YzwzOysrYyl7b1tjXT0uNSoodC5nbHBsb3QuYm91bmRzWzBdW2NdK3QuZ2xwbG90LmJvdW5kc1sxXVtjXSk7Zm9yKGQ9MDtkPDI7KytkKWUuYm91bmRzW2RdW2NdPXQuZ2xwbG90LmJvdW5kc1tkXVtjXX10LmNvbnRvdXJMZXZlbHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSgzKSxyPTA7cjwzOysrcil7Zm9yKHZhciBuPXRbcl0saT1uZXcgQXJyYXkobi5sZW5ndGgpLGE9MDthPG4ubGVuZ3RoOysrYSlpW2FdPW5bYV0ueDtlW3JdPWl9cmV0dXJuIGV9KGwpfTt2YXIgbj10KCIuLi8uLi9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vLi4vbGliIiksYT1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdLG89WzAsMCwwXX0seyIuLi8uLi8uLi9saWIiOjc3NiwiLi4vLi4vY2FydGVzaWFuL2F4ZXMiOjgyN31dLDg3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHIsbixpPVswLDAsMCwwXTtmb3Iocj0wO3I8NDsrK3IpZm9yKG49MDtuPDQ7KytuKWlbbl0rPXRbNCpyK25dKmVbcl07cmV0dXJuIGl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odC5wcm9qZWN0aW9uLG4odC52aWV3LG4odC5tb2RlbCxbZVswXSxlWzFdLGVbMl0sMV0pKSl9fSx7fV0sODc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGksYT10KCJnbC1wbG90M2QiKSxvPWEuY3JlYXRlQ2FtZXJhLHM9YS5jcmVhdGVTY2VuZSxsPXQoIndlYmdsLWNvbnRleHQiKSxjPXQoImhhcy1wYXNzaXZlLWV2ZW50cyIpLHU9dCgiLi4vLi4vcmVnaXN0cnkiKSxmPXQoIi4uLy4uL2xpYiIpLGg9Zi5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIoKSxwPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksZD10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksbT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksZz10KCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2ciKSx2PXQoIi4vcHJvamVjdCIpLHk9dCgiLi9sYXlvdXQvY29udmVydCIpLHg9dCgiLi9sYXlvdXQvc3Bpa2VzIiksYj10KCIuL2xheW91dC90aWNrX21hcmtzIik7ZnVuY3Rpb24gXyh0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLG49dC5jb250YWluZXI7dGhpcy5ncmFwaERpdj10LmdyYXBoRGl2O3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTtpLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaS5zdHlsZS50b3A9aS5zdHlsZS5sZWZ0PSIwcHgiLGkuc3R5bGUud2lkdGg9aS5zdHlsZS5oZWlnaHQ9IjEwMCUiLGkuc3R5bGVbInotaW5kZXgiXT0yMCxpLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIixyLmFwcGVuZENoaWxkKGkpLHRoaXMuc3ZnQ29udGFpbmVyPWksci5pZD10LmlkLHIuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixyLnN0eWxlLnRvcD1yLnN0eWxlLmxlZnQ9IjBweCIsci5zdHlsZS53aWR0aD1yLnN0eWxlLmhlaWdodD0iMTAwJSIsbi5hcHBlbmRDaGlsZChyKSx0aGlzLmZ1bGxMYXlvdXQ9ZSx0aGlzLmlkPXQuaWR8fCJzY2VuZSIsdGhpcy5mdWxsU2NlbmVMYXlvdXQ9ZVt0aGlzLmlkXSx0aGlzLnBsb3RBcmdzPVtbXSx7fSx7fV0sdGhpcy5heGVzT3B0aW9ucz15KGUsZVt0aGlzLmlkXSksdGhpcy5zcGlrZU9wdGlvbnM9eChlW3RoaXMuaWRdKSx0aGlzLmNvbnRhaW5lcj1yLHRoaXMuc3RhdGljTW9kZT0hIXQuc3RhdGljUGxvdCx0aGlzLnBpeGVsUmF0aW89dGhpcy5waXhlbFJhdGlvfHx0LnBsb3RHbFBpeGVsUmF0aW98fDIsdGhpcy5kYXRhU2NhbGU9WzEsMSwxXSx0aGlzLmNvbnRvdXJMZXZlbHM9W1tdLFtdLFtdXSx0aGlzLmNvbnZlcnRBbm5vdGF0aW9ucz11LmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMzZCIsImNvbnZlcnQiKSx0aGlzLmRyYXdBbm5vdGF0aW9ucz11LmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMzZCIsImRyYXciKSx0aGlzLmluaXRpYWxpemVHTFBsb3QoKX12YXIgdz1fLnByb3RvdHlwZTt3LnByZXBhcmVPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9e2NhbnZhczp0aGlzLmNhbnZhcyxnbDp0aGlzLmdsLGdsT3B0aW9uczp7cHJlc2VydmVEcmF3aW5nQnVmZmVyOmgscHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0sY29udGFpbmVyOnRoaXMuY29udGFpbmVyLGF4ZXM6dGhpcy5heGVzT3B0aW9ucyxzcGlrZXM6dGhpcy5zcGlrZU9wdGlvbnMscGlja1JhZGl1czoxMCxzbmFwVG9EYXRhOiEwLGF1dG9TY2FsZTohMCxhdXRvQm91bmRzOiExLGNhbWVyYU9iamVjdDp0aGlzLmNhbWVyYSxwaXhlbFJhdGlvOnRoaXMucGl4ZWxSYXRpb307aWYodGhpcy5zdGF0aWNNb2RlKXtpZighKGl8fChuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGk9bCh7Y2FudmFzOm4scHJlc2VydmVEcmF3aW5nQnVmZmVyOiEwLHByZW11bHRpcGxpZWRBbHBoYTohMCxhbnRpYWxpYXM6ITB9KSkpKXRocm93IG5ldyBFcnJvcigiZXJyb3IgY3JlYXRpbmcgc3RhdGljIGNhbnZhcy9jb250ZXh0IGZvciBpbWFnZSBzZXJ2ZXIiKTt0LmdsPWksdC5jYW52YXM9bn1yZXR1cm4gdH07dmFyIFQ9ITA7dy50cnlDcmVhdGVQbG90PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wcmVwYXJlT3B0aW9ucygpLGU9ITA7dHJ5e3RoaXMuZ2xwbG90PXModCl9Y2F0Y2gocil7aWYodGhpcy5zdGF0aWNNb2RlfHwhVHx8aCllPSExO2Vsc2V7Zi53YXJuKFsid2ViZ2wgc2V0dXAgZmFpbGVkIHBvc3NpYmx5IGR1ZSB0byIsImZhbHNlIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBjb25maWcuIiwiVGhlIG1vYmlsZS90YWJsZXQgZGV2aWNlIG1heSBub3QgYmUgZGV0ZWN0ZWQgYnkgaXMtbW9iaWxlIG1vZHVsZS4iLCJFbmFibGluZyBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgaW4gc2Vjb25kIGF0dGVtcHQgdG8gY3JlYXRlIHdlYmdsIHNjZW5lLi4uIl0uam9pbigiICIpKTt0cnl7aD10LmdsT3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ITAsdGhpcy5nbHBsb3Q9cyh0KX1jYXRjaChyKXtoPXQuZ2xPcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj0hMSxlPSExfX19cmV0dXJuIFQ9ITEsZX0sdy5pbml0aWFsaXplR0xDYW1lcmE9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZ1bGxTY2VuZUxheW91dC5jYW1lcmEsZT0ib3J0aG9ncmFwaGljIj09PXQucHJvamVjdGlvbi50eXBlO3RoaXMuY2FtZXJhPW8odGhpcy5jb250YWluZXIse2NlbnRlcjpbdC5jZW50ZXIueCx0LmNlbnRlci55LHQuY2VudGVyLnpdLGV5ZTpbdC5leWUueCx0LmV5ZS55LHQuZXllLnpdLHVwOlt0LnVwLngsdC51cC55LHQudXAuel0sX29ydGhvOmUsem9vbU1pbjouMDEsem9vbU1heDoxMDAsbW9kZToib3JiaXQifSl9LHcuaW5pdGlhbGl6ZUdMUGxvdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodC5pbml0aWFsaXplR0xDYW1lcmEoKSwhdC50cnlDcmVhdGVQbG90KCkpcmV0dXJuIGcodCk7dC50cmFjZXM9e30sdC5tYWtlNHRoRGltZW5zaW9uKCk7dmFyIGU9dC5ncmFwaERpdixyPWUubGF5b3V0LG49ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gdC5pc0NhbWVyYUNoYW5nZWQocikmJihlW3QuaWQrIi5jYW1lcmEiXT10LmdldENhbWVyYSgpKSx0LmlzQXNwZWN0Q2hhbmdlZChyKSYmKGVbdC5pZCsiLmFzcGVjdHJhdGlvIl09dC5nbHBsb3QuZ2V0QXNwZWN0cmF0aW8oKSwibWFudWFsIiE9PXJbdC5pZF0uYXNwZWN0bW9kZSYmKHQuZnVsbFNjZW5lTGF5b3V0LmFzcGVjdG1vZGU9clt0LmlkXS5hc3BlY3Rtb2RlPWVbdC5pZCsiLmFzcGVjdG1vZGUiXT0ibWFudWFsIikpLGV9LGk9ZnVuY3Rpb24odCl7aWYoITEhPT10LmZ1bGxTY2VuZUxheW91dC5kcmFnbW9kZSl7dmFyIGU9bigpO3Quc2F2ZUxheW91dChyKSx0LmdyYXBoRGl2LmVtaXQoInBsb3RseV9yZWxheW91dCIsZSl9fTtyZXR1cm4gdC5nbHBsb3QuY2FudmFzJiYodC5nbHBsb3QuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLChmdW5jdGlvbigpe2kodCl9KSksdC5nbHBsb3QuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIiwoZnVuY3Rpb24ocil7aWYoZS5fY29udGV4dC5fc2Nyb2xsWm9vbS5nbDNkKXtpZih0LmNhbWVyYS5fb3J0aG8pe3ZhciBuPXIuZGVsdGFYPnIuZGVsdGFZPzEuMToxLzEuMSxhPXQuZ2xwbG90LmdldEFzcGVjdHJhdGlvKCk7dC5nbHBsb3Quc2V0QXNwZWN0cmF0aW8oe3g6biphLngseTpuKmEueSx6Om4qYS56fSl9aSh0KX19KSwhIWMmJntwYXNzaXZlOiExfSksdC5nbHBsb3QuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsKGZ1bmN0aW9uKCl7aWYoITEhPT10LmZ1bGxTY2VuZUxheW91dC5kcmFnbW9kZSYmMCE9PXQuY2FtZXJhLm1vdXNlTGlzdGVuZXIuYnV0dG9ucyl7dmFyIGU9bigpO3QuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixlKX19KSksdC5zdGF0aWNNb2RlfHx0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsKGZ1bmN0aW9uKHIpe2UmJmUuZW1pdCYmZS5lbWl0KCJwbG90bHlfd2ViZ2xjb250ZXh0bG9zdCIse2V2ZW50OnIsbGF5ZXI6dC5pZH0pfSksITEpKSx0LmdscGxvdC5vbmNvbnRleHRsb3NzPWZ1bmN0aW9uKCl7dC5yZWNvdmVyQ29udGV4dCgpfSx0LmdscGxvdC5vbnJlbmRlcj1mdW5jdGlvbigpe3QucmVuZGVyKCl9LCEwfSx3LnJlbmRlcj1mdW5jdGlvbigpe3ZhciB0LGU9dGhpcyxyPWUuZ3JhcGhEaXYsbj1lLnN2Z0NvbnRhaW5lcixpPWUuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3IuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKHIpO3ZhciBhPXIuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWCxvPXIuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWSxzPWkud2lkdGgqYSxsPWkuaGVpZ2h0Km87bi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ2aWV3Qm94IiwiMCAwICIrcysiICIrbCksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ3aWR0aCIscyksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLGwpLGIoZSksZS5nbHBsb3QuYXhlcy51cGRhdGUoZS5heGVzT3B0aW9ucyk7Zm9yKHZhciBjLHU9T2JqZWN0LmtleXMoZS50cmFjZXMpLGg9bnVsbCxtPWUuZ2xwbG90LnNlbGVjdGlvbixnPTA7Zzx1Lmxlbmd0aDsrK2cpInNraXAiIT09KHQ9ZS50cmFjZXNbdVtnXV0pLmRhdGEuaG92ZXJpbmZvJiZ0LmhhbmRsZVBpY2sobSkmJihoPXQpLHQuc2V0Q29udG91ckxldmVscyYmdC5zZXRDb250b3VyTGV2ZWxzKCk7ZnVuY3Rpb24geSh0LHIsbil7dmFyIGk9ZS5mdWxsU2NlbmVMYXlvdXRbdCsiYXhpcyJdO3JldHVybiJsb2ciIT09aS50eXBlJiYocj1pLmQybChyKSkscC5ob3ZlckxhYmVsVGV4dChpLHIsbil9aWYobnVsbCE9PWgpe3ZhciB4PXYoZS5nbHBsb3QuY2FtZXJhUGFyYW1zLG0uZGF0YUNvb3JkaW5hdGUpO3Q9aC5kYXRhO3ZhciBfLHc9ci5fZnVsbERhdGFbdC5pbmRleF0sVD1tLmluZGV4LGs9e3hMYWJlbDp5KCJ4IixtLnRyYWNlQ29vcmRpbmF0ZVswXSx0Lnhob3ZlcmZvcm1hdCkseUxhYmVsOnkoInkiLG0udHJhY2VDb29yZGluYXRlWzFdLHQueWhvdmVyZm9ybWF0KSx6TGFiZWw6eSgieiIsbS50cmFjZUNvb3JkaW5hdGVbMl0sdC56aG92ZXJmb3JtYXQpfSxBPWQuY2FzdEhvdmVyaW5mbyh3LGUuZnVsbExheW91dCxUKSxNPShBfHwiIikuc3BsaXQoIisiKSxTPUEmJiJhbGwiPT09QTt3LmhvdmVydGVtcGxhdGV8fFN8fCgtMT09PU0uaW5kZXhPZigieCIpJiYoay54TGFiZWw9dm9pZCAwKSwtMT09PU0uaW5kZXhPZigieSIpJiYoay55TGFiZWw9dm9pZCAwKSwtMT09PU0uaW5kZXhPZigieiIpJiYoay56TGFiZWw9dm9pZCAwKSwtMT09PU0uaW5kZXhPZigidGV4dCIpJiYobS50ZXh0TGFiZWw9dm9pZCAwKSwtMT09PU0uaW5kZXhPZigibmFtZSIpJiYoaC5uYW1lPXZvaWQgMCkpO3ZhciBFPVtdOyJjb25lIj09PXQudHlwZXx8InN0cmVhbXR1YmUiPT09dC50eXBlPyhrLnVMYWJlbD15KCJ4IixtLnRyYWNlQ29vcmRpbmF0ZVszXSx0LnVob3ZlcmZvcm1hdCksKFN8fC0xIT09TS5pbmRleE9mKCJ1IikpJiZFLnB1c2goInU6ICIray51TGFiZWwpLGsudkxhYmVsPXkoInkiLG0udHJhY2VDb29yZGluYXRlWzRdLHQudmhvdmVyZm9ybWF0KSwoU3x8LTEhPT1NLmluZGV4T2YoInYiKSkmJkUucHVzaCgidjogIitrLnZMYWJlbCksay53TGFiZWw9eSgieiIsbS50cmFjZUNvb3JkaW5hdGVbNV0sdC53aG92ZXJmb3JtYXQpLChTfHwtMSE9PU0uaW5kZXhPZigidyIpKSYmRS5wdXNoKCJ3OiAiK2sud0xhYmVsKSxrLm5vcm1MYWJlbD1tLnRyYWNlQ29vcmRpbmF0ZVs2XS50b1ByZWNpc2lvbigzKSwoU3x8LTEhPT1NLmluZGV4T2YoIm5vcm0iKSkmJkUucHVzaCgibm9ybTogIitrLm5vcm1MYWJlbCksInN0cmVhbXR1YmUiPT09dC50eXBlJiYoay5kaXZlcmdlbmNlTGFiZWw9bS50cmFjZUNvb3JkaW5hdGVbN10udG9QcmVjaXNpb24oMyksKFN8fC0xIT09TS5pbmRleE9mKCJkaXZlcmdlbmNlIikpJiZFLnB1c2goImRpdmVyZ2VuY2U6ICIray5kaXZlcmdlbmNlTGFiZWwpKSxtLnRleHRMYWJlbCYmRS5wdXNoKG0udGV4dExhYmVsKSxfPUUuam9pbigiPGJyPiIpKToiaXNvc3VyZmFjZSI9PT10LnR5cGV8fCJ2b2x1bWUiPT09dC50eXBlPyhrLnZhbHVlTGFiZWw9cC5ob3ZlckxhYmVsVGV4dChlLl9tb2NrQXhpcyxlLl9tb2NrQXhpcy5kMmwobS50cmFjZUNvb3JkaW5hdGVbM10pLHQudmFsdWVob3ZlcmZvcm1hdCksRS5wdXNoKCJ2YWx1ZTogIitrLnZhbHVlTGFiZWwpLG0udGV4dExhYmVsJiZFLnB1c2gobS50ZXh0TGFiZWwpLF89RS5qb2luKCI8YnI+IikpOl89bS50ZXh0TGFiZWw7dmFyIEw9e3g6bS50cmFjZUNvb3JkaW5hdGVbMF0seTptLnRyYWNlQ29vcmRpbmF0ZVsxXSx6Om0udHJhY2VDb29yZGluYXRlWzJdLGRhdGE6dy5faW5wdXQsZnVsbERhdGE6dyxjdXJ2ZU51bWJlcjp3LmluZGV4LHBvaW50TnVtYmVyOlR9O2QuYXBwZW5kQXJyYXlQb2ludFZhbHVlKEwsdyxUKSx0Ll9tb2R1bGUuZXZlbnREYXRhJiYoTD13Ll9tb2R1bGUuZXZlbnREYXRhKEwsbSx3LHt9LFQpKTt2YXIgQz17cG9pbnRzOltMXX07aWYoZS5mdWxsU2NlbmVMYXlvdXQuaG92ZXJtb2RlKXt2YXIgUD1bXTtkLmxvbmVIb3Zlcih7dHJhY2U6dyx4OiguNSsuNSp4WzBdL3hbM10pKnMseTooLjUtLjUqeFsxXS94WzNdKSpsLHhMYWJlbDprLnhMYWJlbCx5TGFiZWw6ay55TGFiZWwsekxhYmVsOmsuekxhYmVsLHRleHQ6XyxuYW1lOmgubmFtZSxjb2xvcjpkLmNhc3RIb3Zlck9wdGlvbih3LFQsImJnY29sb3IiKXx8aC5jb2xvcixib3JkZXJDb2xvcjpkLmNhc3RIb3Zlck9wdGlvbih3LFQsImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpkLmNhc3RIb3Zlck9wdGlvbih3LFQsImZvbnQuZmFtaWx5IiksZm9udFNpemU6ZC5jYXN0SG92ZXJPcHRpb24odyxULCJmb250LnNpemUiKSxmb250Q29sb3I6ZC5jYXN0SG92ZXJPcHRpb24odyxULCJmb250LmNvbG9yIiksbmFtZUxlbmd0aDpkLmNhc3RIb3Zlck9wdGlvbih3LFQsIm5hbWVsZW5ndGgiKSx0ZXh0QWxpZ246ZC5jYXN0SG92ZXJPcHRpb24odyxULCJhbGlnbiIpLGhvdmVydGVtcGxhdGU6Zi5jYXN0T3B0aW9uKHcsVCwiaG92ZXJ0ZW1wbGF0ZSIpLGhvdmVydGVtcGxhdGVMYWJlbHM6Zi5leHRlbmRGbGF0KHt9LEwsayksZXZlbnREYXRhOltMXX0se2NvbnRhaW5lcjpuLGdkOnIsaW5PdXRfYmJveDpQfSksTC5iYm94PVBbMF19bS5idXR0b25zJiZtLmRpc3RhbmNlPDU/ci5lbWl0KCJwbG90bHlfY2xpY2siLEMpOnIuZW1pdCgicGxvdGx5X2hvdmVyIixDKSxjPUN9ZWxzZSBkLmxvbmVVbmhvdmVyKG4pLHIuZW1pdCgicGxvdGx5X3VuaG92ZXIiLGMpO2UuZHJhd0Fubm90YXRpb25zKGUpfSx3LnJlY292ZXJDb250ZXh0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0LmdscGxvdC5kaXNwb3NlKCk7dmFyIGU9ZnVuY3Rpb24oKXt0LmdscGxvdC5nbC5pc0NvbnRleHRMb3N0KCk/cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpOnQuaW5pdGlhbGl6ZUdMUGxvdCgpP3QucGxvdC5hcHBseSh0LHQucGxvdEFyZ3MpOmYuZXJyb3IoIkNhdGFzdHJvcGhpYyBhbmQgdW5yZWNvdmVyYWJsZSBXZWJHTCBlcnJvci4gQ29udGV4dCBsb3N0LiIpfTtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSl9O3ZhciBrPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl07ZnVuY3Rpb24gQSh0LGUscil7Zm9yKHZhciBuPXQuZnVsbFNjZW5lTGF5b3V0LGk9MDtpPDM7aSsrKXt2YXIgYT1rW2ldLG89YS5jaGFyQXQoMCkscz1uW2FdLGw9ZVtvXSxjPWVbbysiY2FsZW5kYXIiXSx1PWVbIl8iK28rImxlbmd0aCJdO2lmKGYuaXNBcnJheU9yVHlwZWRBcnJheShsKSlmb3IodmFyIGgscD0wO3A8KHV8fGwubGVuZ3RoKTtwKyspaWYoZi5pc0FycmF5T3JUeXBlZEFycmF5KGxbcF0pKWZvcih2YXIgZD0wO2Q8bFtwXS5sZW5ndGg7KytkKWg9cy5kMmwobFtwXVtkXSwwLGMpLCFpc05hTihoKSYmaXNGaW5pdGUoaCkmJihyWzBdW2ldPU1hdGgubWluKHJbMF1baV0saCksclsxXVtpXT1NYXRoLm1heChyWzFdW2ldLGgpKTtlbHNlIGg9cy5kMmwobFtwXSwwLGMpLCFpc05hTihoKSYmaXNGaW5pdGUoaCkmJihyWzBdW2ldPU1hdGgubWluKHJbMF1baV0saCksclsxXVtpXT1NYXRoLm1heChyWzFdW2ldLGgpKTtlbHNlIHJbMF1baV09TWF0aC5taW4oclswXVtpXSwwKSxyWzFdW2ldPU1hdGgubWF4KHJbMV1baV0sdS0xKX19dy5wbG90PWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLnBsb3RBcmdzPVt0LGUscl0sIXRoaXMuZ2xwbG90LmNvbnRleHRMb3N0KXt2YXIgbixpLGEsbyxzLGwsYz1lW3RoaXMuaWRdLHU9clt0aGlzLmlkXTt0aGlzLmZ1bGxMYXlvdXQ9ZSx0aGlzLmZ1bGxTY2VuZUxheW91dD1jLHRoaXMuYXhlc09wdGlvbnMubWVyZ2UoZSxjKSx0aGlzLnNwaWtlT3B0aW9ucy5tZXJnZShjKSx0aGlzLnNldFZpZXdwb3J0KGMpLHRoaXMudXBkYXRlRngoYy5kcmFnbW9kZSxjLmhvdmVybW9kZSksdGhpcy5jYW1lcmEuZW5hYmxlV2hlZWw9dGhpcy5ncmFwaERpdi5fY29udGV4dC5fc2Nyb2xsWm9vbS5nbDNkLHRoaXMuZ2xwbG90LnNldENsZWFyQ29sb3IobShjLmJnY29sb3IpKSx0aGlzLnNldENvbnZlcnQocyksdD9BcnJheS5pc0FycmF5KHQpfHwodD1bdF0pOnQ9W107dmFyIGY9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKGE9MDthPHQubGVuZ3RoOysrYSkhMD09PShuPXRbYV0pLnZpc2libGUmJjAhPT1uLl9sZW5ndGgmJkEodGhpcyxuLGYpOyFmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmZ1bGxTY2VuZUxheW91dCxuPXIuYW5ub3RhdGlvbnN8fFtdLGk9MDtpPDM7aSsrKWZvcih2YXIgYT1rW2ldLG89YS5jaGFyQXQoMCkscz1yW2FdLGw9MDtsPG4ubGVuZ3RoO2wrKyl7dmFyIGM9bltsXTtpZihjLnZpc2libGUpe3ZhciB1PXMucjJsKGNbb10pOyFpc05hTih1KSYmaXNGaW5pdGUodSkmJihlWzBdW2ldPU1hdGgubWluKGVbMF1baV0sdSksZVsxXVtpXT1NYXRoLm1heChlWzFdW2ldLHUpKX19fSh0aGlzLGYpO3ZhciBoPVsxLDEsMV07Zm9yKG89MDtvPDM7KytvKWZbMV1bb109PT1mWzBdW29dP2hbb109MTpoW29dPTEvKGZbMV1bb10tZlswXVtvXSk7Zm9yKHRoaXMuZGF0YVNjYWxlPWgsdGhpcy5jb252ZXJ0QW5ub3RhdGlvbnModGhpcyksYT0wO2E8dC5sZW5ndGg7KythKSEwPT09KG49dFthXSkudmlzaWJsZSYmMCE9PW4uX2xlbmd0aCYmKChpPXRoaXMudHJhY2VzW24udWlkXSk/aS5kYXRhLnR5cGU9PT1uLnR5cGU/aS51cGRhdGUobik6KGkuZGlzcG9zZSgpLGk9bi5fbW9kdWxlLnBsb3QodGhpcyxuKSx0aGlzLnRyYWNlc1tuLnVpZF09aSk6KGk9bi5fbW9kdWxlLnBsb3QodGhpcyxuKSx0aGlzLnRyYWNlc1tuLnVpZF09aSksaS5uYW1lPW4ubmFtZSk7dmFyIHA9T2JqZWN0LmtleXModGhpcy50cmFjZXMpO3Q6Zm9yKGE9MDthPHAubGVuZ3RoOysrYSl7Zm9yKG89MDtvPHQubGVuZ3RoOysrbylpZih0W29dLnVpZD09PXBbYV0mJiEwPT09dFtvXS52aXNpYmxlJiYwIT09dFtvXS5fbGVuZ3RoKWNvbnRpbnVlIHQ7KGk9dGhpcy50cmFjZXNbcFthXV0pLmRpc3Bvc2UoKSxkZWxldGUgdGhpcy50cmFjZXNbcFthXV19dGhpcy5nbHBsb3Qub2JqZWN0cy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0Ll90cmFjZS5kYXRhLmluZGV4LWUuX3RyYWNlLmRhdGEuaW5kZXh9KSk7dmFyIGQsZz1bWzAsMCwwXSxbMCwwLDBdXSx2PVtdLHk9e307Zm9yKGE9MDthPDM7KythKXtpZigobD0ocz1jW2tbYV1dKS50eXBlKWluIHk/KHlbbF0uYWNjKj1oW2FdLHlbbF0uY291bnQrPTEpOnlbbF09e2FjYzpoW2FdLGNvdW50OjF9LHMuYXV0b3JhbmdlKXtnWzBdW2FdPTEvMCxnWzFdW2FdPS0xLzA7dmFyIHg9dGhpcy5nbHBsb3Qub2JqZWN0cyxiPXRoaXMuZnVsbFNjZW5lTGF5b3V0LmFubm90YXRpb25zfHxbXSxfPXMuX25hbWUuY2hhckF0KDApO2ZvcihvPTA7bzx4Lmxlbmd0aDtvKyspe3ZhciB3PXhbb10sVD13LmJvdW5kcyxNPXcuX3RyYWNlLmRhdGEuX3BhZHx8MDsiRXJyb3JCYXJzIj09PXcuY29uc3RydWN0b3IubmFtZSYmcy5fbG93ZXJMb2dFcnJvckJvdW5kP2dbMF1bYV09TWF0aC5taW4oZ1swXVthXSxzLl9sb3dlckxvZ0Vycm9yQm91bmQpOmdbMF1bYV09TWF0aC5taW4oZ1swXVthXSxUWzBdW2FdL2hbYV0tTSksZ1sxXVthXT1NYXRoLm1heChnWzFdW2FdLFRbMV1bYV0vaFthXStNKX1mb3Iobz0wO288Yi5sZW5ndGg7bysrKXt2YXIgUz1iW29dO2lmKFMudmlzaWJsZSl7dmFyIEU9cy5yMmwoU1tfXSk7Z1swXVthXT1NYXRoLm1pbihnWzBdW2FdLEUpLGdbMV1bYV09TWF0aC5tYXgoZ1sxXVthXSxFKX19aWYoInJhbmdlbW9kZSJpbiBzJiYidG96ZXJvIj09PXMucmFuZ2Vtb2RlJiYoZ1swXVthXT1NYXRoLm1pbihnWzBdW2FdLDApLGdbMV1bYV09TWF0aC5tYXgoZ1sxXVthXSwwKSksZ1swXVthXT5nWzFdW2FdKWdbMF1bYV09LTEsZ1sxXVthXT0xO2Vsc2V7dmFyIEw9Z1sxXVthXS1nWzBdW2FdO2dbMF1bYV0tPUwvMzIsZ1sxXVthXSs9TC8zMn1pZigicmV2ZXJzZWQiPT09cy5hdXRvcmFuZ2Upe3ZhciBDPWdbMF1bYV07Z1swXVthXT1nWzFdW2FdLGdbMV1bYV09Q319ZWxzZXt2YXIgUD1zLnJhbmdlO2dbMF1bYV09cy5yMmwoUFswXSksZ1sxXVthXT1zLnIybChQWzFdKX1nWzBdW2FdPT09Z1sxXVthXSYmKGdbMF1bYV0tPTEsZ1sxXVthXSs9MSksdlthXT1nWzFdW2FdLWdbMF1bYV0sdGhpcy5nbHBsb3Quc2V0Qm91bmRzKGEse21pbjpnWzBdW2FdKmhbYV0sbWF4OmdbMV1bYV0qaFthXX0pfXZhciBJPWMuYXNwZWN0bW9kZTtpZigiY3ViZSI9PT1JKWQ9WzEsMSwxXTtlbHNlIGlmKCJtYW51YWwiPT09SSl7dmFyIE89Yy5hc3BlY3RyYXRpbztkPVtPLngsTy55LE8uel19ZWxzZXtpZigiYXV0byIhPT1JJiYiZGF0YSIhPT1JKXRocm93IG5ldyBFcnJvcigic2NlbmUuanMgYXNwZWN0UmF0aW8gd2FzIG5vdCBvbmUgb2YgdGhlIGVudW1lcmF0ZWQgdHlwZXMiKTt2YXIgej1bMSwxLDFdO2ZvcihhPTA7YTwzOysrYSl7dmFyIEQ9eVtsPShzPWNba1thXV0pLnR5cGVdO3pbYV09TWF0aC5wb3coRC5hY2MsMS9ELmNvdW50KS9oW2FdfWQ9ImRhdGEiPT09SXx8TWF0aC5tYXguYXBwbHkobnVsbCx6KS9NYXRoLm1pbi5hcHBseShudWxsLHopPD00P3o6WzEsMSwxXX1jLmFzcGVjdHJhdGlvLng9dS5hc3BlY3RyYXRpby54PWRbMF0sYy5hc3BlY3RyYXRpby55PXUuYXNwZWN0cmF0aW8ueT1kWzFdLGMuYXNwZWN0cmF0aW8uej11LmFzcGVjdHJhdGlvLno9ZFsyXSx0aGlzLmdscGxvdC5zZXRBc3BlY3RyYXRpbyhjLmFzcGVjdHJhdGlvKSx0aGlzLnZpZXdJbml0aWFsLmFzcGVjdHJhdGlvfHwodGhpcy52aWV3SW5pdGlhbC5hc3BlY3RyYXRpbz17eDpjLmFzcGVjdHJhdGlvLngseTpjLmFzcGVjdHJhdGlvLnksejpjLmFzcGVjdHJhdGlvLnp9KSx0aGlzLnZpZXdJbml0aWFsLmFzcGVjdG1vZGV8fCh0aGlzLnZpZXdJbml0aWFsLmFzcGVjdG1vZGU9Yy5hc3BlY3Rtb2RlKTt2YXIgUj1jLmRvbWFpbnx8bnVsbCxGPWUuX3NpemV8fG51bGw7aWYoUiYmRil7dmFyIEI9dGhpcy5jb250YWluZXIuc3R5bGU7Qi5wb3NpdGlvbj0iYWJzb2x1dGUiLEIubGVmdD1GLmwrUi54WzBdKkYudysicHgiLEIudG9wPUYudCsoMS1SLnlbMV0pKkYuaCsicHgiLEIud2lkdGg9Ri53KihSLnhbMV0tUi54WzBdKSsicHgiLEIuaGVpZ2h0PUYuaCooUi55WzFdLVIueVswXSkrInB4In10aGlzLmdscGxvdC5yZWRyYXcoKX19LHcuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZ2xwbG90JiYodGhpcy5jYW1lcmEubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLHRoaXMuY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIix0aGlzLmNhbWVyYS53aGVlbExpc3RlbmVyKSx0aGlzLmNhbWVyYT1udWxsLHRoaXMuZ2xwbG90LmRpc3Bvc2UoKSx0aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKSx0aGlzLmdscGxvdD1udWxsKX0sdy5nZXRDYW1lcmE9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5jYW1lcmEudmlldy5yZWNhbGNNYXRyaXgodGhpcy5jYW1lcmEudmlldy5sYXN0VCgpKSx7dXA6e3g6KHQ9dGhpcy5jYW1lcmEpLnVwWzBdLHk6dC51cFsxXSx6OnQudXBbMl19LGNlbnRlcjp7eDp0LmNlbnRlclswXSx5OnQuY2VudGVyWzFdLHo6dC5jZW50ZXJbMl19LGV5ZTp7eDp0LmV5ZVswXSx5OnQuZXllWzFdLHo6dC5leWVbMl19LHByb2plY3Rpb246e3R5cGU6ITA9PT10Ll9vcnRobz8ib3J0aG9ncmFwaGljIjoicGVyc3BlY3RpdmUifX19LHcuc2V0Vmlld3BvcnQ9ZnVuY3Rpb24odCl7dmFyIGUscj10LmNhbWVyYTt0aGlzLmNhbWVyYS5sb29rQXQuYXBwbHkodGhpcyxbWyhlPXIpLmV5ZS54LGUuZXllLnksZS5leWUuel0sW2UuY2VudGVyLngsZS5jZW50ZXIueSxlLmNlbnRlci56XSxbZS51cC54LGUudXAueSxlLnVwLnpdXSksdGhpcy5nbHBsb3Quc2V0QXNwZWN0cmF0aW8odC5hc3BlY3RyYXRpbyksIm9ydGhvZ3JhcGhpYyI9PT1yLnByb2plY3Rpb24udHlwZSE9PXRoaXMuY2FtZXJhLl9vcnRobyYmKHRoaXMuZ2xwbG90LnJlZHJhdygpLHRoaXMuZ2xwbG90LmNsZWFyUkdCQSgpLHRoaXMuZ2xwbG90LmRpc3Bvc2UoKSx0aGlzLmluaXRpYWxpemVHTFBsb3QoKSl9LHcuaXNDYW1lcmFDaGFuZ2VkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0Q2FtZXJhKCkscj1mLm5lc3RlZFByb3BlcnR5KHQsdGhpcy5pZCsiLmNhbWVyYSIpLmdldCgpO2Z1bmN0aW9uIG4odCxlLHIsbil7dmFyIGk9WyJ1cCIsImNlbnRlciIsImV5ZSJdLGE9WyJ4IiwieSIsInoiXTtyZXR1cm4gZVtpW3JdXSYmdFtpW3JdXVthW25dXT09PWVbaVtyXV1bYVtuXV19dmFyIGk9ITE7aWYodm9pZCAwPT09cilpPSEwO2Vsc2V7Zm9yKHZhciBhPTA7YTwzO2ErKylmb3IodmFyIG89MDtvPDM7bysrKWlmKCFuKGUscixhLG8pKXtpPSEwO2JyZWFrfSghci5wcm9qZWN0aW9ufHxlLnByb2plY3Rpb24mJmUucHJvamVjdGlvbi50eXBlIT09ci5wcm9qZWN0aW9uLnR5cGUpJiYoaT0hMCl9cmV0dXJuIGl9LHcuaXNBc3BlY3RDaGFuZ2VkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2xwbG90LmdldEFzcGVjdHJhdGlvKCkscj1mLm5lc3RlZFByb3BlcnR5KHQsdGhpcy5pZCsiLmFzcGVjdHJhdGlvIikuZ2V0KCk7cmV0dXJuIHZvaWQgMD09PXJ8fHIueCE9PWUueHx8ci55IT09ZS55fHxyLnohPT1lLnp9LHcuc2F2ZUxheW91dD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scz10aGlzLmZ1bGxMYXlvdXQsbD10aGlzLmlzQ2FtZXJhQ2hhbmdlZCh0KSxjPXRoaXMuaXNBc3BlY3RDaGFuZ2VkKHQpLGg9bHx8YztpZihoKXt2YXIgcD17fTtpZihsJiYoZT10aGlzLmdldENhbWVyYSgpLG49KHI9Zi5uZXN0ZWRQcm9wZXJ0eSh0LHRoaXMuaWQrIi5jYW1lcmEiKSkuZ2V0KCkscFt0aGlzLmlkKyIuY2FtZXJhIl09biksYyYmKGk9dGhpcy5nbHBsb3QuZ2V0QXNwZWN0cmF0aW8oKSxvPShhPWYubmVzdGVkUHJvcGVydHkodCx0aGlzLmlkKyIuYXNwZWN0cmF0aW8iKSkuZ2V0KCkscFt0aGlzLmlkKyIuYXNwZWN0cmF0aW8iXT1vKSx1LmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLHQscy5fcHJlR1VJLHApLGwpci5zZXQoZSksZi5uZXN0ZWRQcm9wZXJ0eShzLHRoaXMuaWQrIi5jYW1lcmEiKS5zZXQoZSk7aWYoYylhLnNldChpKSxmLm5lc3RlZFByb3BlcnR5KHMsdGhpcy5pZCsiLmFzcGVjdHJhdGlvIikuc2V0KGkpLHRoaXMuZ2xwbG90LnJlZHJhdygpfXJldHVybiBofSx3LnVwZGF0ZUZ4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jYW1lcmE7aWYocilpZigib3JiaXQiPT09dClyLm1vZGU9Im9yYml0IixyLmtleUJpbmRpbmdNb2RlPSJyb3RhdGUiO2Vsc2UgaWYoInR1cm50YWJsZSI9PT10KXtyLnVwPVswLDAsMV0sci5tb2RlPSJ0dXJudGFibGUiLHIua2V5QmluZGluZ01vZGU9InJvdGF0ZSI7dmFyIG49dGhpcy5ncmFwaERpdixpPW4uX2Z1bGxMYXlvdXQsYT10aGlzLmZ1bGxTY2VuZUxheW91dC5jYW1lcmEsbz1hLnVwLngscz1hLnVwLnksbD1hLnVwLno7aWYobC9NYXRoLnNxcnQobypvK3MqcytsKmwpPC45OTkpe3ZhciBjPXRoaXMuaWQrIi5jYW1lcmEudXAiLGg9e3g6MCx5OjAsejoxfSxwPXt9O3BbY109aDt2YXIgZD1uLmxheW91dDt1LmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLGQsaS5fcHJlR1VJLHApLGEudXA9aCxmLm5lc3RlZFByb3BlcnR5KGQsYykuc2V0KGgpfX1lbHNlIHIua2V5QmluZGluZ01vZGU9dDt0aGlzLmZ1bGxTY2VuZUxheW91dC5ob3Zlcm1vZGU9ZX0sdy50b0ltYWdlPWZ1bmN0aW9uKHQpe3R8fCh0PSJwbmciKSx0aGlzLnN0YXRpY01vZGUmJnRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKG4pLHRoaXMuZ2xwbG90LnJlZHJhdygpO3ZhciBlPXRoaXMuZ2xwbG90LmdsLHI9ZS5kcmF3aW5nQnVmZmVyV2lkdGgsaT1lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7ZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUixudWxsKTt2YXIgYT1uZXcgVWludDhBcnJheShyKmkqNCk7ZS5yZWFkUGl4ZWxzKDAsMCxyLGksZS5SR0JBLGUuVU5TSUdORURfQllURSxhKSxmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT1yLTE7bjxpOysrbiwtLWkpZm9yKHZhciBhPTA7YTxlOysrYSlmb3IodmFyIG89MDtvPDQ7KytvKXt2YXIgcz00KihlKm4rYSkrbyxsPTQqKGUqaSthKStvLGM9dFtzXTt0W3NdPXRbbF0sdFtsXT1jfX0oYSxyLGkpLGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHI7KytuKWZvcih2YXIgaT0wO2k8ZTsrK2kpe3ZhciBhPTQqKGUqbitpKSxvPXRbYSszXTtpZihvPjApZm9yKHZhciBzPTI1NS9vLGw9MDtsPDM7KytsKXRbYStsXT1NYXRoLm1pbihzKnRbYStsXSwyNTUpfX0oYSxyLGkpO3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO28ud2lkdGg9cixvLmhlaWdodD1pO3ZhciBzLGw9by5nZXRDb250ZXh0KCIyZCIpLGM9bC5jcmVhdGVJbWFnZURhdGEocixpKTtzd2l0Y2goYy5kYXRhLnNldChhKSxsLnB1dEltYWdlRGF0YShjLDAsMCksdCl7Y2FzZSJqcGVnIjpzPW8udG9EYXRhVVJMKCJpbWFnZS9qcGVnIik7YnJlYWs7Y2FzZSJ3ZWJwIjpzPW8udG9EYXRhVVJMKCJpbWFnZS93ZWJwIik7YnJlYWs7ZGVmYXVsdDpzPW8udG9EYXRhVVJMKCJpbWFnZS9wbmciKX1yZXR1cm4gdGhpcy5zdGF0aWNNb2RlJiZ0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZChuKSxzfSx3LnNldENvbnZlcnQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDM7dCsrKXt2YXIgZT10aGlzLmZ1bGxTY2VuZUxheW91dFtrW3RdXTtwLnNldENvbnZlcnQoZSx0aGlzLmZ1bGxMYXlvdXQpLGUuc2V0U2NhbGU9Zi5ub29wfX0sdy5tYWtlNHRoRGltZW5zaW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncmFwaERpdi5fZnVsbExheW91dDt0aGlzLl9tb2NrQXhpcz17dHlwZToibGluZWFyIixzaG93ZXhwb25lbnQ6ImFsbCIsZXhwb25lbnRmb3JtYXQ6IkIifSxwLnNldENvbnZlcnQodGhpcy5fbW9ja0F4aXMsdCl9LGUuZXhwb3J0cz1ffSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjY3OSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyI6Nzk4LCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo4MDEsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4vbGF5b3V0L2NvbnZlcnQiOjg3MywiLi9sYXlvdXQvc3Bpa2VzIjo4NzYsIi4vbGF5b3V0L3RpY2tfbWFya3MiOjg3NywiLi9wcm9qZWN0Ijo4NzgsImdsLXBsb3QzZCI6MzEyLCJoYXMtcGFzc2l2ZS1ldmVudHMiOjQyNiwid2ViZ2wtY29udGV4dCI6NjAyfV0sODgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtuPW58fHQubGVuZ3RoO2Zvcih2YXIgaT1uZXcgQXJyYXkobiksYT0wO2E8bjthKyspaVthXT1bdFthXSxlW2FdLHJbYV1dO3JldHVybiBpfX0se31dLDg4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi9hbmltYXRpb25fYXR0cmlidXRlcyIpLGE9dCgiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbz10KCIuLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL2F0dHJpYnV0ZXMiKSxzPXQoIi4vcGFkX2F0dHJpYnV0ZXMiKSxsPXQoIi4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9bih7ZWRpdFR5cGU6ImNhbGMifSk7Yy5mYW1pbHkuZGZsdD0nIk9wZW4gU2FucyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxjLnNpemUuZGZsdD0xMixjLmNvbG9yLmRmbHQ9YS5kZWZhdWx0TGluZSxlLmV4cG9ydHM9e2ZvbnQ6Yyx0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToibGF5b3V0c3R5bGUifSxmb250Om4oe2VkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9KSx4cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJjb250YWluZXIiLHZhbHVlczpbImNvbnRhaW5lciIsInBhcGVyIl0sZWRpdFR5cGU6ImxheW91dHN0eWxlIn0seXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoiY29udGFpbmVyIix2YWx1ZXM6WyJjb250YWluZXIiLCJwYXBlciJdLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouNSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImF1dG8iLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJhdXRvIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZWRpdFR5cGU6ImxheW91dHN0eWxlIn0scGFkOmwocyh7ZWRpdFR5cGU6ImxheW91dHN0eWxlIn0pLHt9KSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx1bmlmb3JtdGV4dDp7bW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMSwiaGlkZSIsInNob3ciXSxkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sbWluc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGF1dG9zaXplOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJub25lIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEwLGRmbHQ6NzAwLGVkaXRUeXBlOiJwbG90In0saGVpZ2h0Ont2YWxUeXBlOiJudW1iZXIiLG1pbjoxMCxkZmx0OjQ1MCxlZGl0VHlwZToicGxvdCJ9LG1hcmdpbjp7bDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOiJwbG90In0scjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOiJwbG90In0sdDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwMCxlZGl0VHlwZToicGxvdCJ9LGI6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo4MCxlZGl0VHlwZToicGxvdCJ9LHBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxhdXRvZXhwYW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxjb21wdXRlZDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LHBhcGVyX2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuYmFja2dyb3VuZCxlZGl0VHlwZToicGxvdCJ9LHBsb3RfYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5iYWNrZ3JvdW5kLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LGF1dG90eXBlbnVtYmVyczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY29udmVydCB0eXBlcyIsInN0cmljdCJdLGRmbHQ6ImNvbnZlcnQgdHlwZXMiLGVkaXRUeXBlOiJjYWxjIn0sc2VwYXJhdG9yczp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LGhpZGVzb3VyY2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sc2hvd2xlZ2VuZDp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGNvbG9yd2F5Ont2YWxUeXBlOiJjb2xvcmxpc3QiLGRmbHQ6YS5kZWZhdWx0cyxlZGl0VHlwZToiY2FsYyJ9LGRhdGFyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxlZGl0cmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxzZWxlY3Rpb25yZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LHRlbXBsYXRlOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sbmV3c2hhcGU6by5uZXdzaGFwZSxhY3RpdmVzaGFwZTpvLmFjdGl2ZXNoYXBlLG1ldGE6e3ZhbFR5cGU6ImFueSIsYXJyYXlPazohMCxlZGl0VHlwZToicGxvdCJ9LHRyYW5zaXRpb246bCh7fSxpLnRyYW5zaXRpb24se2VkaXRUeXBlOiJub25lIn0pLF9kZXByZWNhdGVkOnt0aXRsZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToibGF5b3V0c3R5bGUifSx0aXRsZWZvbnQ6bih7ZWRpdFR5cGU6ImxheW91dHN0eWxlIn0pfX19LHsiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MzgsIi4uL2NvbXBvbmVudHMvc2hhcGVzL2RyYXdfbmV3c2hhcGUvYXR0cmlidXRlcyI6NzI0LCIuLi9saWIvZXh0ZW5kIjo3NjYsIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXMiOjgyMSwiLi9mb250X2F0dHJpYnV0ZXMiOjg1NiwiLi9wYWRfYXR0cmlidXRlcyI6ODg5fV0sODgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9zb3J0X29iamVjdF9rZXlzIiksaT0nXHhhOSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0Ij5PcGVuU3RyZWV0TWFwPC9hPiBjb250cmlidXRvcnMnLGE9WydceGE5IDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2NhcnRvLmNvbS8iPkNhcnRvPC9hPicsaV0uam9pbigiICIpLG89WydNYXAgdGlsZXMgYnkgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vc3RhbWVuLmNvbSI+U3RhbWVuIERlc2lnbjwvYT4nLCd1bmRlciA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMCI+Q0MgQlkgMy4wPC9hPicsInwiLCdEYXRhIGJ5IDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL29wZW5zdHJlZXRtYXAub3JnIj5PcGVuU3RyZWV0TWFwPC9hPiBjb250cmlidXRvcnMnLCd1bmRlciA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0Ij5PRGJMPC9hPiddLmpvaW4oIiAiKSxzPXsib3Blbi1zdHJlZXQtbWFwIjp7aWQ6Im9zbSIsdmVyc2lvbjo4LHNvdXJjZXM6eyJwbG90bHktb3NtLXRpbGVzIjp7dHlwZToicmFzdGVyIixhdHRyaWJ1dGlvbjppLHRpbGVzOlsiaHR0cHM6Ly9hLnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nIiwiaHR0cHM6Ly9iLnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1vc20tdGlsZXMiLHR5cGU6InJhc3RlciIsc291cmNlOiJwbG90bHktb3NtLXRpbGVzIixtaW56b29tOjAsbWF4em9vbToyMn1dfSwid2hpdGUtYmciOntpZDoid2hpdGUtYmciLHZlcnNpb246OCxzb3VyY2VzOnt9LGxheWVyczpbe2lkOiJ3aGl0ZS1iZyIsdHlwZToiYmFja2dyb3VuZCIscGFpbnQ6eyJiYWNrZ3JvdW5kLWNvbG9yIjoiI0ZGRkZGRiJ9LG1pbnpvb206MCxtYXh6b29tOjIyfV19LCJjYXJ0by1wb3NpdHJvbiI6e2lkOiJjYXJ0by1wb3NpdHJvbiIsdmVyc2lvbjo4LHNvdXJjZXM6eyJwbG90bHktY2FydG8tcG9zaXRyb24iOnt0eXBlOiJyYXN0ZXIiLGF0dHJpYnV0aW9uOmEsdGlsZXM6WyJodHRwczovL2NhcnRvZGItYmFzZW1hcHMtYy5nbG9iYWwuc3NsLmZhc3RseS5uZXQvbGlnaHRfYWxsL3t6fS97eH0ve3l9LnBuZyJdLHRpbGVTaXplOjI1Nn19LGxheWVyczpbe2lkOiJwbG90bHktY2FydG8tcG9zaXRyb24iLHR5cGU6InJhc3RlciIsc291cmNlOiJwbG90bHktY2FydG8tcG9zaXRyb24iLG1pbnpvb206MCxtYXh6b29tOjIyfV19LCJjYXJ0by1kYXJrbWF0dGVyIjp7aWQ6ImNhcnRvLWRhcmttYXR0ZXIiLHZlcnNpb246OCxzb3VyY2VzOnsicGxvdGx5LWNhcnRvLWRhcmttYXR0ZXIiOnt0eXBlOiJyYXN0ZXIiLGF0dHJpYnV0aW9uOmEsdGlsZXM6WyJodHRwczovL2NhcnRvZGItYmFzZW1hcHMtYy5nbG9iYWwuc3NsLmZhc3RseS5uZXQvZGFya19hbGwve3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1jYXJ0by1kYXJrbWF0dGVyIix0eXBlOiJyYXN0ZXIiLHNvdXJjZToicGxvdGx5LWNhcnRvLWRhcmttYXR0ZXIiLG1pbnpvb206MCxtYXh6b29tOjIyfV19LCJzdGFtZW4tdGVycmFpbiI6e2lkOiJzdGFtZW4tdGVycmFpbiIsdmVyc2lvbjo4LHNvdXJjZXM6eyJwbG90bHktc3RhbWVuLXRlcnJhaW4iOnt0eXBlOiJyYXN0ZXIiLGF0dHJpYnV0aW9uOm8sdGlsZXM6WyJodHRwczovL3N0YW1lbi10aWxlcy5hLnNzbC5mYXN0bHkubmV0L3RlcnJhaW4ve3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1zdGFtZW4tdGVycmFpbiIsdHlwZToicmFzdGVyIixzb3VyY2U6InBsb3RseS1zdGFtZW4tdGVycmFpbiIsbWluem9vbTowLG1heHpvb206MjJ9XX0sInN0YW1lbi10b25lciI6e2lkOiJzdGFtZW4tdG9uZXIiLHZlcnNpb246OCxzb3VyY2VzOnsicGxvdGx5LXN0YW1lbi10b25lciI6e3R5cGU6InJhc3RlciIsYXR0cmlidXRpb246byx0aWxlczpbImh0dHBzOi8vc3RhbWVuLXRpbGVzLmEuc3NsLmZhc3RseS5uZXQvdG9uZXIve3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1zdGFtZW4tdG9uZXIiLHR5cGU6InJhc3RlciIsc291cmNlOiJwbG90bHktc3RhbWVuLXRvbmVyIixtaW56b29tOjAsbWF4em9vbToyMn1dfSwic3RhbWVuLXdhdGVyY29sb3IiOntpZDoic3RhbWVuLXdhdGVyY29sb3IiLHZlcnNpb246OCxzb3VyY2VzOnsicGxvdGx5LXN0YW1lbi13YXRlcmNvbG9yIjp7dHlwZToicmFzdGVyIixhdHRyaWJ1dGlvbjpbJ01hcCB0aWxlcyBieSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9zdGFtZW4uY29tIj5TdGFtZW4gRGVzaWduPC9hPicsJ3VuZGVyIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wIj5DQyBCWSAzLjA8L2E+JywifCIsJ0RhdGEgYnkgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vb3BlbnN0cmVldG1hcC5vcmciPk9wZW5TdHJlZXRNYXA8L2E+IGNvbnRyaWJ1dG9ycycsJ3VuZGVyIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMy4wIj5DQyBCWSBTQTwvYT4nXS5qb2luKCIgIiksdGlsZXM6WyJodHRwczovL3N0YW1lbi10aWxlcy5hLnNzbC5mYXN0bHkubmV0L3dhdGVyY29sb3Ive3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1zdGFtZW4td2F0ZXJjb2xvciIsdHlwZToicmFzdGVyIixzb3VyY2U6InBsb3RseS1zdGFtZW4td2F0ZXJjb2xvciIsbWluem9vbTowLG1heHpvb206MjJ9XX19LGw9bihzKTtlLmV4cG9ydHM9e3JlcXVpcmVkVmVyc2lvbjoiMS4xMC4xIixzdHlsZVVybFByZWZpeDoibWFwYm94Oi8vc3R5bGVzL21hcGJveC8iLHN0eWxlVXJsU3VmZml4OiJ2OSIsc3R5bGVWYWx1ZXNNYXBib3g6WyJiYXNpYyIsInN0cmVldHMiLCJvdXRkb29ycyIsImxpZ2h0IiwiZGFyayIsInNhdGVsbGl0ZSIsInNhdGVsbGl0ZS1zdHJlZXRzIl0sc3R5bGVWYWx1ZURmbHQ6ImJhc2ljIixzdHlsZXNOb25NYXBib3g6cyxzdHlsZVZhbHVlc05vbk1hcGJveDpsLHRyYWNlTGF5ZXJQcmVmaXg6InBsb3RseS10cmFjZS1sYXllci0iLGxheW91dExheWVyUHJlZml4OiJwbG90bHktbGF5b3V0LWxheWVyLSIsd3JvbmdWZXJzaW9uRXJyb3JNc2c6WyJZb3VyIGN1c3RvbSBwbG90bHkuanMgYnVuZGxlIGlzIG5vdCB1c2luZyB0aGUgY29ycmVjdCBtYXBib3gtZ2wgdmVyc2lvbiIsIlBsZWFzZSBpbnN0YWxsIG1hcGJveC1nbEAxLjEwLjEuIl0uam9pbigiXG4iKSxub0FjY2Vzc1Rva2VuRXJyb3JNc2c6WyJNaXNzaW5nIE1hcGJveCBhY2Nlc3MgdG9rZW4uIiwiTWFwYm94IHRyYWNlIHR5cGUgcmVxdWlyZSBhIE1hcGJveCBhY2Nlc3MgdG9rZW4gdG8gYmUgcmVnaXN0ZXJlZC4iLCJGb3IgZXhhbXBsZToiLCIgIFBsb3RseS5uZXdQbG90KGdkLCBkYXRhLCBsYXlvdXQsIHsgbWFwYm94QWNjZXNzVG9rZW46ICdteS1hY2Nlc3MtdG9rZW4nIH0pOyIsIk1vcmUgaW5mbyBoZXJlOiBodHRwczovL3d3dy5tYXBib3guY29tL2hlbHAvZGVmaW5lLWFjY2Vzcy10b2tlbi8iXS5qb2luKCJcbiIpLG1pc3NpbmdTdHlsZUVycm9yTXNnOlsiTm8gdmFsaWQgbWFwYm94IHN0eWxlIGZvdW5kLCBwbGVhc2Ugc2V0IGBtYXBib3guc3R5bGVgIHRvIG9uZSBvZjoiLGwuam9pbigiLCAiKSwib3IgcmVnaXN0ZXIgYSBNYXBib3ggYWNjZXNzIHRva2VuIHRvIHVzZSBhIE1hcGJveC1zZXJ2ZWQgc3R5bGUuIl0uam9pbigiXG4iKSxtdWx0aXBsZVRva2Vuc0Vycm9yTXNnOlsiU2V0IG11bHRpcGxlIG1hcGJveCBhY2Nlc3MgdG9rZW4gYWNyb3NzIGRpZmZlcmVudCBtYXBib3ggc3VicGxvdCwiLCJ1c2luZyBmaXJzdCB0b2tlbiBmb3VuZCBhcyBtYXBib3gtZ2wgZG9lcyBub3QgYWxsb3cgbXVsdGlwbGVhY2Nlc3MgdG9rZW5zIG9uIHRoZSBzYW1lIHBhZ2UuIl0uam9pbigiXG4iKSxtYXBPbkVycm9yTXNnOiJNYXBib3ggZXJyb3IuIixtYXBib3hMb2dvOntwYXRoMDoibSAxMC41LDEuMjQgYyAtNS4xMSwwIC05LjI1LDQuMTUgLTkuMjUsOS4yNSAwLDUuMSA0LjE1LDkuMjUgOS4yNSw5LjI1IDUuMSwwIDkuMjUsLTQuMTUgOS4yNSwtOS4yNSAwLC01LjExIC00LjE0LC05LjI1IC05LjI1LC05LjI1IHogbSA0LjM5LDExLjUzIGMgLTEuOTMsMS45MyAtNC43OCwyLjMxIC02LjcsMi4zMSAtMC43LDAgLTEuNDEsLTAuMDUgLTIuMSwtMC4xNiAwLDAgLTEuMDIsLTUuNjQgMi4xNCwtOC44MSAwLjgzLC0wLjgzIDEuOTUsLTEuMjggMy4xMywtMS4yOCAxLjI3LDAgMi40OSwwLjUxIDMuMzksMS40MiAxLjg0LDEuODQgMS44OSw0Ljc1IDAuMTQsNi41MiB6IixwYXRoMToiTSAxMC41LC0wLjAxIEMgNC43LC0wLjAxIDAsNC43IDAsMTAuNDkgYyAwLDUuNzkgNC43LDEwLjUgMTAuNSwxMC41IDUuOCwwIDEwLjUsLTQuNyAxMC41LC0xMC41IEMgMjAuOTksNC43IDE2LjMsLTAuMDEgMTAuNSwtMC4wMSBaIG0gMCwxOS43NSBjIC01LjExLDAgLTkuMjUsLTQuMTUgLTkuMjUsLTkuMjUgMCwtNS4xIDQuMTQsLTkuMjYgOS4yNSwtOS4yNiA1LjExLDAgOS4yNSw0LjE1IDkuMjUsOS4yNSAwLDUuMTMgLTQuMTQsOS4yNiAtOS4yNSw5LjI2IHoiLHBhdGgyOiJNIDE0Ljc0LDYuMjUgQyAxMi45LDQuNDEgOS45OCw0LjM1IDguMjMsNi4xIDUuMDcsOS4yNyA2LjA5LDE0LjkxIDYuMDksMTQuOTEgYyAwLDAgNS42NCwxLjAyIDguODEsLTIuMTQgQyAxNi42NCwxMSAxNi41OSw4LjA5IDE0Ljc0LDYuMjUgWiBtIC0yLjI3LDQuMDkgLTAuOTEsMS44NyAtMC45LC0xLjg3IC0xLjg2LC0wLjkxIDEuODYsLTAuOSAwLjksLTEuODcgMC45MSwxLjg3IDEuODYsMC45IHoiLHBvbHlnb246IjExLjU2LDEyLjIxIDEwLjY2LDEwLjM0IDguOCw5LjQzIDEwLjY2LDguNTMgMTEuNTYsNi42NiAxMi40Nyw4LjUzIDE0LjMzLDkuNDMgMTIuNDcsMTAuMzQifSxzdHlsZVJ1bGVzOnttYXA6Im92ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTsiLCJtaXNzaW5nLWNzcyI6ImRpc3BsYXk6bm9uZTsiLGNhbmFyeToiYmFja2dyb3VuZC1jb2xvcjpzYWxtb247IiwiY3RybC1ib3R0b20tbGVmdCI6InBvc2l0aW9uOiBhYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6IG5vbmU7IHotaW5kZXg6IDI7IGJvdHRvbTogMDsgbGVmdDogMDsiLCJjdHJsLWJvdHRvbS1yaWdodCI6InBvc2l0aW9uOiBhYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6IG5vbmU7IHotaW5kZXg6IDI7IHJpZ2h0OiAwOyBib3R0b206IDA7IixjdHJsOiJjbGVhcjogYm90aDsgcG9pbnRlci1ldmVudHM6IGF1dG87IHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOyIsImN0cmwtYXR0cmliLm1hcGJveGdsLWNvbXBhY3QgLm1hcGJveGdsLWN0cmwtYXR0cmliLWlubmVyIjoiZGlzcGxheTogbm9uZTsiLCJjdHJsLWF0dHJpYi5tYXBib3hnbC1jb21wYWN0OmhvdmVyIC5tYXBib3hnbC1jdHJsLWF0dHJpYi1pbm5lciI6ImRpc3BsYXk6IGJsb2NrOyBtYXJnaW4tdG9wOjJweCIsImN0cmwtYXR0cmliLm1hcGJveGdsLWNvbXBhY3Q6aG92ZXIiOiJwYWRkaW5nOiAycHggMjRweCAycHggNHB4OyB2aXNpYmlsaXR5OiB2aXNpYmxlOyBtYXJnaW4tdG9wOiA2cHg7IiwiY3RybC1hdHRyaWIubWFwYm94Z2wtY29tcGFjdDo6YWZ0ZXIiOidjb250ZW50OiAiIjsgY3Vyc29yOiBwb2ludGVyOyBwb3NpdGlvbjogYWJzb2x1dGU7IGJhY2tncm91bmQtaW1hZ2U6IHVybChcJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIlM0UgJTNDcGF0aCBmaWxsPSIlMjMzMzMzMzMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTQsMTBhNiw2IDAgMSwwIDEyLDBhNiw2IDAgMSwwIC0xMiwwIE05LDdhMSwxIDAgMSwwIDIsMGExLDEgMCAxLDAgLTIsMCBNOSwxMGExLDEgMCAxLDEgMiwwbDAsM2ExLDEgMCAxLDEgLTIsMCIvJTNFICUzQy9zdmclM0VcJyk7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsgd2lkdGg6IDI0cHg7IGhlaWdodDogMjRweDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgYm9yZGVyLXJhZGl1czogMTJweDsnLCJjdHJsLWF0dHJpYi5tYXBib3hnbC1jb21wYWN0IjoibWluLWhlaWdodDogMjBweDsgcGFkZGluZzogMDsgbWFyZ2luOiAxMHB4OyBwb3NpdGlvbjogcmVsYXRpdmU7IGJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDNweCAxMnB4IDEycHggM3B4OyIsImN0cmwtYm90dG9tLXJpZ2h0ID4gLm1hcGJveGdsLWN0cmwtYXR0cmliLm1hcGJveGdsLWNvbXBhY3Q6OmFmdGVyIjoiYm90dG9tOiAwOyByaWdodDogMCIsImN0cmwtYm90dG9tLWxlZnQgPiAubWFwYm94Z2wtY3RybC1hdHRyaWIubWFwYm94Z2wtY29tcGFjdDo6YWZ0ZXIiOiJib3R0b206IDA7IGxlZnQ6IDAiLCJjdHJsLWJvdHRvbS1sZWZ0IC5tYXBib3hnbC1jdHJsIjoibWFyZ2luOiAwIDAgMTBweCAxMHB4OyBmbG9hdDogbGVmdDsiLCJjdHJsLWJvdHRvbS1yaWdodCAubWFwYm94Z2wtY3RybCI6Im1hcmdpbjogMCAxMHB4IDEwcHggMDsgZmxvYXQ6IHJpZ2h0OyIsImN0cmwtYXR0cmliIjoiY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43NSk7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC1zaXplOiAxMnB4IiwiY3RybC1hdHRyaWIgYSI6ImNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNzUpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtc2l6ZTogMTJweCIsImN0cmwtYXR0cmliIGE6aG92ZXIiOiJjb2xvcjogaW5oZXJpdDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IiwiY3RybC1hdHRyaWIgLm1hcGJveC1pbXByb3ZlLW1hcCI6ImZvbnQtd2VpZ2h0OiBib2xkOyBtYXJnaW4tbGVmdDogMnB4OyIsImF0dHJpYi1lbXB0eSI6ImRpc3BsYXk6IG5vbmU7IiwiY3RybC1sb2dvIjonZGlzcGxheTpibG9jazsgd2lkdGg6IDIxcHg7IGhlaWdodDogMjFweDsgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwnZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDP3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/JTNFICUzQ3N2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDIxIDIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyMSAyMTsiIHhtbDpzcGFjZT0icHJlc2VydmUiJTNFJTNDZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDAuMDEpIiUzRSUzQ3BhdGggZD0ibSAxMC41LDEuMjQgYyAtNS4xMSwwIC05LjI1LDQuMTUgLTkuMjUsOS4yNSAwLDUuMSA0LjE1LDkuMjUgOS4yNSw5LjI1IDUuMSwwIDkuMjUsLTQuMTUgOS4yNSwtOS4yNSAwLC01LjExIC00LjE0LC05LjI1IC05LjI1LC05LjI1IHogbSA0LjM5LDExLjUzIGMgLTEuOTMsMS45MyAtNC43OCwyLjMxIC02LjcsMi4zMSAtMC43LDAgLTEuNDEsLTAuMDUgLTIuMSwtMC4xNiAwLDAgLTEuMDIsLTUuNjQgMi4xNCwtOC44MSAwLjgzLC0wLjgzIDEuOTUsLTEuMjggMy4xMywtMS4yOCAxLjI3LDAgMi40OSwwLjUxIDMuMzksMS40MiAxLjg0LDEuODQgMS44OSw0Ljc1IDAuMTQsNi41MiB6IiBzdHlsZT0ib3BhY2l0eTowLjk7ZmlsbDolMjNmZmZmZmY7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiBjbGFzcz0ic3QwIi8lM0UlM0NwYXRoIGQ9Ik0gMTAuNSwtMC4wMSBDIDQuNywtMC4wMSAwLDQuNyAwLDEwLjQ5IGMgMCw1Ljc5IDQuNywxMC41IDEwLjUsMTAuNSA1LjgsMCAxMC41LC00LjcgMTAuNSwtMTAuNSBDIDIwLjk5LDQuNyAxNi4zLC0wLjAxIDEwLjUsLTAuMDEgWiBtIDAsMTkuNzUgYyAtNS4xMSwwIC05LjI1LC00LjE1IC05LjI1LC05LjI1IDAsLTUuMSA0LjE0LC05LjI2IDkuMjUsLTkuMjYgNS4xMSwwIDkuMjUsNC4xNSA5LjI1LDkuMjUgMCw1LjEzIC00LjE0LDkuMjYgLTkuMjUsOS4yNiB6IiBzdHlsZT0ib3BhY2l0eTowLjM1O2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgY2xhc3M9InN0MSIvJTNFJTNDcGF0aCBkPSJNIDE0Ljc0LDYuMjUgQyAxMi45LDQuNDEgOS45OCw0LjM1IDguMjMsNi4xIDUuMDcsOS4yNyA2LjA5LDE0LjkxIDYuMDksMTQuOTEgYyAwLDAgNS42NCwxLjAyIDguODEsLTIuMTQgQyAxNi42NCwxMSAxNi41OSw4LjA5IDE0Ljc0LDYuMjUgWiBtIC0yLjI3LDQuMDkgLTAuOTEsMS44NyAtMC45LC0xLjg3IC0xLjg2LC0wLjkxIDEuODYsLTAuOSAwLjksLTEuODcgMC45MSwxLjg3IDEuODYsMC45IHoiIHN0eWxlPSJvcGFjaXR5OjAuMzU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiBjbGFzcz0ic3QxIi8lM0UlM0Nwb2x5Z29uIHBvaW50cz0iMTEuNTYsMTIuMjEgMTAuNjYsMTAuMzQgOC44LDkuNDMgMTAuNjYsOC41MyAxMS41Niw2LjY2IDEyLjQ3LDguNTMgMTQuMzMsOS40MyAxMi40NywxMC4zNCAiIHN0eWxlPSJvcGFjaXR5OjAuOTtmaWxsOiUyM2ZmZmZmZjtlbmFibGUtYmFja2dyb3VuZDpuZXciIGNsYXNzPSJzdDAiLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVwnKSd9fX0seyIuLi8uLi9saWIvc29ydF9vYmplY3Rfa2V5cyI6Nzk5fV0sODgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3BsaXQoIiAiKSxpPXJbMF0sYT1yWzFdLG89bi5pc0FycmF5T3JUeXBlZEFycmF5KGUpP24ubWVhbihlKTplLHM9LjUrby8xMDAsbD0xLjUrby8xMDAsYz1bIiIsIiJdLHU9WzAsMF07c3dpdGNoKGkpe2Nhc2UidG9wIjpjWzBdPSJ0b3AiLHVbMV09LWw7YnJlYWs7Y2FzZSJib3R0b20iOmNbMF09ImJvdHRvbSIsdVsxXT1sfXN3aXRjaChhKXtjYXNlImxlZnQiOmNbMV09InJpZ2h0Iix1WzBdPS1zO2JyZWFrO2Nhc2UicmlnaHQiOmNbMV09ImxlZnQiLHVbMF09c31yZXR1cm57YW5jaG9yOmNbMF0mJmNbMV0/Yy5qb2luKCItIik6Y1swXT9jWzBdOmNbMV0/Y1sxXToiY2VudGVyIixvZmZzZXQ6dX19fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sODg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm1hcGJveC1nbC9kaXN0L21hcGJveC1nbC11bm1pbmlmaWVkIiksaT10KCIuLi8uLi9saWIiKSxhPWkuc3RyVHJhbnNsYXRlLG89aS5zdHJTY2FsZSxzPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0U3VicGxvdENhbGNEYXRhLGw9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxjPXQoIkBwbG90bHkvZDMiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGY9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksaD10KCIuL21hcGJveCIpLHA9ci5jb25zdGFudHM9dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBkKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKC0xIT09cC5zdHlsZVZhbHVlc01hcGJveC5pbmRleE9mKHQpfHwwPT09dC5pbmRleE9mKCJtYXBib3g6Ly8iKSl9ci5uYW1lPSJtYXBib3giLHIuYXR0cj0ic3VicGxvdCIsci5pZFJvb3Q9Im1hcGJveCIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PWkuY291bnRlclJlZ2V4KCJtYXBib3giKSxyLmF0dHJpYnV0ZXM9e3N1YnBsb3Q6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoibWFwYm94IixlZGl0VHlwZToiY2FsYyJ9fSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsYT1lLl9zdWJwbG90cy5tYXBib3g7aWYobi52ZXJzaW9uIT09cC5yZXF1aXJlZFZlcnNpb24pdGhyb3cgbmV3IEVycm9yKHAud3JvbmdWZXJzaW9uRXJyb3JNc2cpO3ZhciBvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dDtpZigiIj09PXQuX2NvbnRleHQubWFwYm94QWNjZXNzVG9rZW4pcmV0dXJuIiI7Zm9yKHZhciBuPVtdLGE9W10sbz0hMSxzPSExLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGM9cltlW2xdXSx1PWMuYWNjZXNzdG9rZW47ZChjLnN0eWxlKSYmKHU/aS5wdXNoVW5pcXVlKG4sdSk6KGQoYy5faW5wdXQuc3R5bGUpJiYoaS5lcnJvcigiVXNlcyBNYXBib3ggbWFwIHN0eWxlLCBidXQgZGlkIG5vdCBzZXQgYW4gYWNjZXNzIHRva2VuLiIpLG89ITApLHM9ITApKSx1JiZpLnB1c2hVbmlxdWUoYSx1KX1pZihzKXt2YXIgZj1vP3Aubm9BY2Nlc3NUb2tlbkVycm9yTXNnOnAubWlzc2luZ1N0eWxlRXJyb3JNc2c7dGhyb3cgaS5lcnJvcihmKSxuZXcgRXJyb3IoZil9cmV0dXJuIG4ubGVuZ3RoPyhuLmxlbmd0aD4xJiZpLndhcm4ocC5tdWx0aXBsZVRva2Vuc0Vycm9yTXNnKSxuWzBdKTooYS5sZW5ndGgmJmkubG9nKFsiTGlzdGVkIG1hcGJveCBhY2Nlc3MgdG9rZW4ocykiLGEuam9pbigiLCIpLCJidXQgZGlkIG5vdCB1c2UgYSBNYXBib3ggbWFwIHN0eWxlLCBpZ25vcmluZyB0b2tlbihzKS4iXS5qb2luKCIgIikpLCIiKX0odCxhKTtuLmFjY2Vzc1Rva2VuPW87Zm9yKHZhciBsPTA7bDxhLmxlbmd0aDtsKyspe3ZhciBjPWFbbF0sdT1zKHIsIm1hcGJveCIsYyksZj1lW2NdLG09Zi5fc3VicGxvdDttfHwobT1uZXcgaCh0LGMpLGVbY10uX3N1YnBsb3Q9bSksbS52aWV3SW5pdGlhbHx8KG0udmlld0luaXRpYWw9e2NlbnRlcjppLmV4dGVuZEZsYXQoe30sZi5jZW50ZXIpLHpvb206Zi56b29tLGJlYXJpbmc6Zi5iZWFyaW5nLHBpdGNoOmYucGl0Y2h9KSxtLnBsb3QodSxlLHQuX3Byb21pc2VzKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLm1hcGJveHx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdOyFlW29dJiZuW29dLl9zdWJwbG90JiZuW29dLl9zdWJwbG90LmRlc3Ryb3koKX19LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5tYXBib3gsbj1lLl9zaXplLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIHM9ZVtyW2ldXSxoPXMuZG9tYWluLGQ9cy5fc3VicGxvdC50b0ltYWdlKCJwbmciKTtlLl9nbGltYWdlcy5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOmwuc3ZnLCJ4bGluazpocmVmIjpkLHg6bi5sK24udypoLnhbMF0seTpuLnQrbi5oKigxLWgueVsxXSksd2lkdGg6bi53KihoLnhbMV0taC54WzBdKSxoZWlnaHQ6bi5oKihoLnlbMV0taC55WzBdKSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pO3ZhciBtPWMuc2VsZWN0KHMuX3N1YnBsb3QuZGl2KTtpZighKG51bGw9PT1tLnNlbGVjdCgiLm1hcGJveGdsLWN0cmwtbG9nbyIpLm5vZGUoKS5vZmZzZXRQYXJlbnQpKXt2YXIgZz1lLl9nbGltYWdlcy5hcHBlbmQoImciKTtnLmF0dHIoInRyYW5zZm9ybSIsYShuLmwrbi53KmgueFswXSsxMCxuLnQrbi5oKigxLWgueVswXSktMzEpKSxnLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHAubWFwYm94TG9nby5wYXRoMCkuc3R5bGUoe29wYWNpdHk6LjksZmlsbDoiI2ZmZmZmZiIsImVuYWJsZS1iYWNrZ3JvdW5kIjoibmV3In0pLGcuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIscC5tYXBib3hMb2dvLnBhdGgxKS5zdHlsZSgib3BhY2l0eSIsLjM1KS5zdHlsZSgiZW5hYmxlLWJhY2tncm91bmQiLCJuZXciKSxnLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHAubWFwYm94TG9nby5wYXRoMikuc3R5bGUoIm9wYWNpdHkiLC4zNSkuc3R5bGUoImVuYWJsZS1iYWNrZ3JvdW5kIiwibmV3IiksZy5hcHBlbmQoInBvbHlnb24iKS5hdHRyKCJwb2ludHMiLHAubWFwYm94TG9nby5wb2x5Z29uKS5zdHlsZSh7b3BhY2l0eTouOSxmaWxsOiIjZmZmZmZmIiwiZW5hYmxlLWJhY2tncm91bmQiOiJuZXcifSl9dmFyIHY9bS5zZWxlY3QoIi5tYXBib3hnbC1jdHJsLWF0dHJpYiIpLnRleHQoKS5yZXBsYWNlKCJJbXByb3ZlIHRoaXMgbWFwIiwiIikseT1lLl9nbGltYWdlcy5hcHBlbmQoImciKSx4PXkuYXBwZW5kKCJ0ZXh0Iik7eC50ZXh0KHYpLmNsYXNzZWQoInN0YXRpYy1hdHRyaWJ1dGlvbiIsITApLmF0dHIoeyJmb250LXNpemUiOjEyLCJmb250LWZhbWlseSI6IkFyaWFsIixjb2xvcjoicmdiYSgwLCAwLCAwLCAwLjc1KSIsInRleHQtYW5jaG9yIjoiZW5kIiwiZGF0YS11bmZvcm1hdHRlZCI6dn0pO3ZhciBiPXUuYkJveCh4Lm5vZGUoKSksXz1uLncqKGgueFsxXS1oLnhbMF0pO2lmKGIud2lkdGg+Xy8yKXt2YXIgdz12LnNwbGl0KCJ8Iikuam9pbigiPGJyPiIpO3gudGV4dCh3KS5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIix3KS5jYWxsKGYuY29udmVydFRvVHNwYW5zLHQpLGI9dS5iQm94KHgubm9kZSgpKX14LmF0dHIoInRyYW5zZm9ybSIsYSgtMyw4LWIuaGVpZ2h0KSkseS5pbnNlcnQoInJlY3QiLCIuc3RhdGljLWF0dHJpYnV0aW9uIikuYXR0cih7eDotYi53aWR0aC02LHk6LWIuaGVpZ2h0LTMsd2lkdGg6Yi53aWR0aCs2LGhlaWdodDpiLmhlaWdodCszLGZpbGw6InJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSkifSk7dmFyIFQ9MTtiLndpZHRoKzY+XyYmKFQ9Xy8oYi53aWR0aCs2KSk7dmFyIGs9W24ubCtuLncqaC54WzFdLG4udCtuLmgqKDEtaC55WzBdKV07eS5hdHRyKCJ0cmFuc2Zvcm0iLGEoa1swXSxrWzFdKStvKFQpKX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5tYXBib3gsbj0wO248ci5sZW5ndGg7bisrKXtlW3Jbbl1dLl9zdWJwbG90LnVwZGF0ZUZ4KGUpfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3NTMsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMiwiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjg2NCwiLi9jb25zdGFudHMiOjg4MiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODg2LCIuL2xheW91dF9kZWZhdWx0cyI6ODg3LCIuL21hcGJveCI6ODg4LCJAcGxvdGx5L2QzIjo1OCwibWFwYm94LWdsL2Rpc3QvbWFwYm94LWdsLXVubWluaWZpZWQiOjQ0MX1dLDg4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLnNhbml0aXplSFRNTCxhPXQoIi4vY29udmVydF90ZXh0X29wdHMiKSxvPXQoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gcyh0LGUpe3RoaXMuc3VicGxvdD10LHRoaXMudWlkPXQudWlkKyItIitlLHRoaXMuaW5kZXg9ZSx0aGlzLmlkU291cmNlPSJzb3VyY2UtIit0aGlzLnVpZCx0aGlzLmlkTGF5ZXI9by5sYXlvdXRMYXllclByZWZpeCt0aGlzLnVpZCx0aGlzLnNvdXJjZVR5cGU9bnVsbCx0aGlzLnNvdXJjZT1udWxsLHRoaXMubGF5ZXJUeXBlPW51bGwsdGhpcy5iZWxvdz1udWxsLHRoaXMudmlzaWJsZT0hMX12YXIgbD1zLnByb3RvdHlwZTtmdW5jdGlvbiBjKHQpe2lmKCF0LnZpc2libGUpcmV0dXJuITE7dmFyIGU9dC5zb3VyY2U7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg+MCl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoInN0cmluZyIhPXR5cGVvZiBlW3JdfHwwPT09ZVtyXS5sZW5ndGgpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIG4uaXNQbGFpbk9iamVjdChlKXx8InN0cmluZyI9PXR5cGVvZiBlJiZlLmxlbmd0aD4wfWZ1bmN0aW9uIHUodCl7dmFyIGU9e30scj17fTtzd2l0Y2godC50eXBlKXtjYXNlImNpcmNsZSI6bi5leHRlbmRGbGF0KHIseyJjaXJjbGUtcmFkaXVzIjp0LmNpcmNsZS5yYWRpdXMsImNpcmNsZS1jb2xvciI6dC5jb2xvciwiY2lyY2xlLW9wYWNpdHkiOnQub3BhY2l0eX0pO2JyZWFrO2Nhc2UibGluZSI6bi5leHRlbmRGbGF0KHIseyJsaW5lLXdpZHRoIjp0LmxpbmUud2lkdGgsImxpbmUtY29sb3IiOnQuY29sb3IsImxpbmUtb3BhY2l0eSI6dC5vcGFjaXR5LCJsaW5lLWRhc2hhcnJheSI6dC5saW5lLmRhc2h9KTticmVhaztjYXNlImZpbGwiOm4uZXh0ZW5kRmxhdChyLHsiZmlsbC1jb2xvciI6dC5jb2xvciwiZmlsbC1vdXRsaW5lLWNvbG9yIjp0LmZpbGwub3V0bGluZWNvbG9yLCJmaWxsLW9wYWNpdHkiOnQub3BhY2l0eX0pO2JyZWFrO2Nhc2Uic3ltYm9sIjp2YXIgaT10LnN5bWJvbCxvPWEoaS50ZXh0cG9zaXRpb24saS5pY29uc2l6ZSk7bi5leHRlbmRGbGF0KGUseyJpY29uLWltYWdlIjppLmljb24rIi0xNSIsImljb24tc2l6ZSI6aS5pY29uc2l6ZS8xMCwidGV4dC1maWVsZCI6aS50ZXh0LCJ0ZXh0LXNpemUiOmkudGV4dGZvbnQuc2l6ZSwidGV4dC1hbmNob3IiOm8uYW5jaG9yLCJ0ZXh0LW9mZnNldCI6by5vZmZzZXQsInN5bWJvbC1wbGFjZW1lbnQiOmkucGxhY2VtZW50fSksbi5leHRlbmRGbGF0KHIseyJpY29uLWNvbG9yIjp0LmNvbG9yLCJ0ZXh0LWNvbG9yIjppLnRleHRmb250LmNvbG9yLCJ0ZXh0LW9wYWNpdHkiOnQub3BhY2l0eX0pO2JyZWFrO2Nhc2UicmFzdGVyIjpuLmV4dGVuZEZsYXQocix7InJhc3Rlci1mYWRlLWR1cmF0aW9uIjowLCJyYXN0ZXItb3BhY2l0eSI6dC5vcGFjaXR5fSl9cmV0dXJue2xheW91dDplLHBhaW50OnJ9fWwudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMudmlzaWJsZT90aGlzLm5lZWRzTmV3SW1hZ2UodCk/dGhpcy51cGRhdGVJbWFnZSh0KTp0aGlzLm5lZWRzTmV3U291cmNlKHQpPyh0aGlzLnJlbW92ZUxheWVyKCksdGhpcy51cGRhdGVTb3VyY2UodCksdGhpcy51cGRhdGVMYXllcih0KSk6dGhpcy5uZWVkc05ld0xheWVyKHQpP3RoaXMudXBkYXRlTGF5ZXIodCk6dGhpcy51cGRhdGVTdHlsZSh0KToodGhpcy51cGRhdGVTb3VyY2UodCksdGhpcy51cGRhdGVMYXllcih0KSksdGhpcy52aXNpYmxlPWModCl9LGwubmVlZHNOZXdJbWFnZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdWJwbG90Lm1hcC5nZXRTb3VyY2UodGhpcy5pZFNvdXJjZSkmJiJpbWFnZSI9PT10aGlzLnNvdXJjZVR5cGUmJiJpbWFnZSI9PT10LnNvdXJjZXR5cGUmJih0aGlzLnNvdXJjZSE9PXQuc291cmNlfHxKU09OLnN0cmluZ2lmeSh0aGlzLmNvb3JkaW5hdGVzKSE9PUpTT04uc3RyaW5naWZ5KHQuY29vcmRpbmF0ZXMpKX0sbC5uZWVkc05ld1NvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zb3VyY2VUeXBlIT09dC5zb3VyY2V0eXBlfHxKU09OLnN0cmluZ2lmeSh0aGlzLnNvdXJjZSkhPT1KU09OLnN0cmluZ2lmeSh0LnNvdXJjZSl8fHRoaXMubGF5ZXJUeXBlIT09dC50eXBlfSxsLm5lZWRzTmV3TGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGF5ZXJUeXBlIT09dC50eXBlfHx0aGlzLmJlbG93IT09dGhpcy5zdWJwbG90LmJlbG93TG9va3VwWyJsYXlvdXQtIit0aGlzLmluZGV4XX0sbC5sb29rdXBCZWxvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN1YnBsb3QuYmVsb3dMb29rdXBbImxheW91dC0iK3RoaXMuaW5kZXhdfSxsLnVwZGF0ZUltYWdlPWZ1bmN0aW9uKHQpe3RoaXMuc3VicGxvdC5tYXAuZ2V0U291cmNlKHRoaXMuaWRTb3VyY2UpLnVwZGF0ZUltYWdlKHt1cmw6dC5zb3VyY2UsY29vcmRpbmF0ZXM6dC5jb29yZGluYXRlc30pO3ZhciBlPXRoaXMuZmluZEZvbGxvd2luZ01hcGJveExheWVySWQodGhpcy5sb29rdXBCZWxvdygpKTtudWxsIT09ZSYmdGhpcy5zdWJwbG90Lm1hcC5tb3ZlTGF5ZXIodGhpcy5pZExheWVyLGUpfSxsLnVwZGF0ZVNvdXJjZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnN1YnBsb3QubWFwO2lmKGUuZ2V0U291cmNlKHRoaXMuaWRTb3VyY2UpJiZlLnJlbW92ZVNvdXJjZSh0aGlzLmlkU291cmNlKSx0aGlzLnNvdXJjZVR5cGU9dC5zb3VyY2V0eXBlLHRoaXMuc291cmNlPXQuc291cmNlLGModCkpe3ZhciByPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zb3VyY2V0eXBlLG49dC5zb3VyY2UsYT17dHlwZTpyfTsiZ2VvanNvbiI9PT1yP2U9ImRhdGEiOiJ2ZWN0b3IiPT09cj9lPSJzdHJpbmciPT10eXBlb2Ygbj8idXJsIjoidGlsZXMiOiJyYXN0ZXIiPT09cj8oZT0idGlsZXMiLGEudGlsZVNpemU9MjU2KToiaW1hZ2UiPT09ciYmKGU9InVybCIsYS5jb29yZGluYXRlcz10LmNvb3JkaW5hdGVzKTthW2VdPW4sdC5zb3VyY2VhdHRyaWJ1dGlvbiYmKGEuYXR0cmlidXRpb249aSh0LnNvdXJjZWF0dHJpYnV0aW9uKSk7cmV0dXJuIGF9KHQpO2UuYWRkU291cmNlKHRoaXMuaWRTb3VyY2Uscil9fSxsLmZpbmRGb2xsb3dpbmdNYXBib3hMYXllcklkPWZ1bmN0aW9uKHQpe2lmKCJ0cmFjZXMiPT09dClmb3IodmFyIGU9dGhpcy5zdWJwbG90LmdldE1hcExheWVycygpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXS5pZDtpZigic3RyaW5nIj09dHlwZW9mIG4mJjA9PT1uLmluZGV4T2Yoby50cmFjZUxheWVyUHJlZml4KSl7dD1uO2JyZWFrfX1yZXR1cm4gdH0sbC51cGRhdGVMYXllcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnN1YnBsb3Qscj11KHQpLG49dGhpcy5sb29rdXBCZWxvdygpLGk9dGhpcy5maW5kRm9sbG93aW5nTWFwYm94TGF5ZXJJZChuKTt0aGlzLnJlbW92ZUxheWVyKCksYyh0KSYmZS5hZGRMYXllcih7aWQ6dGhpcy5pZExheWVyLHNvdXJjZTp0aGlzLmlkU291cmNlLCJzb3VyY2UtbGF5ZXIiOnQuc291cmNlbGF5ZXJ8fCIiLHR5cGU6dC50eXBlLG1pbnpvb206dC5taW56b29tLG1heHpvb206dC5tYXh6b29tLGxheW91dDpyLmxheW91dCxwYWludDpyLnBhaW50fSxpKSx0aGlzLmxheWVyVHlwZT10LnR5cGUsdGhpcy5iZWxvdz1ufSxsLnVwZGF0ZVN0eWxlPWZ1bmN0aW9uKHQpe2lmKGModCkpe3ZhciBlPXUodCk7dGhpcy5zdWJwbG90LnNldE9wdGlvbnModGhpcy5pZExheWVyLCJzZXRMYXlvdXRQcm9wZXJ0eSIsZS5sYXlvdXQpLHRoaXMuc3VicGxvdC5zZXRPcHRpb25zKHRoaXMuaWRMYXllciwic2V0UGFpbnRQcm9wZXJ0eSIsZS5wYWludCl9fSxsLnJlbW92ZUxheWVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zdWJwbG90Lm1hcDt0LmdldExheWVyKHRoaXMuaWRMYXllcikmJnQucmVtb3ZlTGF5ZXIodGhpcy5pZExheWVyKX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zdWJwbG90Lm1hcDt0LmdldExheWVyKHRoaXMuaWRMYXllcikmJnQucmVtb3ZlTGF5ZXIodGhpcy5pZExheWVyKSx0LmdldFNvdXJjZSh0aGlzLmlkU291cmNlKSYmdC5yZW1vdmVTb3VyY2UodGhpcy5pZFNvdXJjZSl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IHModCxlKTtyZXR1cm4gbi51cGRhdGUociksbn19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAyLCIuL2NvbnN0YW50cyI6ODgyLCIuL2NvbnZlcnRfdGV4dF9vcHRzIjo4ODN9XSw4ODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikuZGVmYXVsdExpbmUsYT10KCIuLi9kb21haW4iKS5hdHRyaWJ1dGVzLG89dCgiLi4vZm9udF9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIikudGV4dHBvc2l0aW9uLGw9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LHU9dCgiLi9jb25zdGFudHMiKSxmPW8oe30pO2YuZmFtaWx5LmRmbHQ9Ik9wZW4gU2FucyBSZWd1bGFyLCBBcmlhbCBVbmljb2RlIE1TIFJlZ3VsYXIiLChlLmV4cG9ydHM9bCh7X2FycmF5QXR0clJlZ2V4cHM6W24uY291bnRlclJlZ2V4KCJtYXBib3giLCIubGF5ZXJzIiwhMCldLGRvbWFpbjphKHtuYW1lOiJtYXBib3gifSksYWNjZXNzdG9rZW46e3ZhbFR5cGU6InN0cmluZyIsbm9CbGFuazohMCxzdHJpY3Q6ITB9LHN0eWxlOnt2YWxUeXBlOiJhbnkiLHZhbHVlczp1LnN0eWxlVmFsdWVzTWFwYm94LmNvbmNhdCh1LnN0eWxlVmFsdWVzTm9uTWFwYm94KSxkZmx0OnUuc3R5bGVWYWx1ZURmbHR9LGNlbnRlcjp7bG9uOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0sbGF0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH19LHpvb206e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxfSxiZWFyaW5nOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0scGl0Y2g6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxsYXllcnM6YygibGF5ZXIiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzb3VyY2V0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJnZW9qc29uIiwidmVjdG9yIiwicmFzdGVyIiwiaW1hZ2UiXSxkZmx0OiJnZW9qc29uIn0sc291cmNlOnt2YWxUeXBlOiJhbnkifSxzb3VyY2VsYXllcjp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxzb3VyY2VhdHRyaWJ1dGlvbjp7dmFsVHlwZToic3RyaW5nIn0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2lyY2xlIiwibGluZSIsImZpbGwiLCJzeW1ib2wiLCJyYXN0ZXIiXSxkZmx0OiJjaXJjbGUifSxjb29yZGluYXRlczp7dmFsVHlwZToiYW55In0sYmVsb3c6e3ZhbFR5cGU6InN0cmluZyJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sbWluem9vbTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MjQsZGZsdDowfSxtYXh6b29tOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoyNCxkZmx0OjI0fSxjaXJjbGU6e3JhZGl1czp7dmFsVHlwZToibnVtYmVyIixkZmx0OjE1fX0sbGluZTp7d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoyfSxkYXNoOnt2YWxUeXBlOiJkYXRhX2FycmF5In19LGZpbGw6e291dGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aX19LHN5bWJvbDp7aWNvbjp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJtYXJrZXIifSxpY29uc2l6ZTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEwfSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LHBsYWNlbWVudDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicG9pbnQiLCJsaW5lIiwibGluZS1jZW50ZXIiXSxkZmx0OiJwb2ludCJ9LHRleHRmb250OmYsdGV4dHBvc2l0aW9uOm4uZXh0ZW5kRmxhdCh7fSxzLHthcnJheU9rOiExfSl9fSl9LCJwbG90IiwiZnJvbS1yb290IikpLnVpcmV2aXNpb249e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MDksIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE5MSwiLi4vZG9tYWluIjo4NTUsIi4uL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuL2NvbnN0YW50cyI6ODgyfV0sODg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc3VicGxvdF9kZWZhdWx0cyIpLGE9dCgiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gcyh0LGUscixuKXtyKCJhY2Nlc3N0b2tlbiIsbi5hY2Nlc3NUb2tlbikscigic3R5bGUiKSxyKCJjZW50ZXIubG9uIikscigiY2VudGVyLmxhdCIpLHIoInpvb20iKSxyKCJiZWFyaW5nIikscigicGl0Y2giKSxhKHQsZSx7bmFtZToibGF5ZXJzIixoYW5kbGVJdGVtRGVmYXVsdHM6bH0pLGUuX2lucHV0PXR9ZnVuY3Rpb24gbCh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8ubGF5ZXJzLHIsaSl9aWYocigidmlzaWJsZSIpKXt2YXIgaSxhPXIoInNvdXJjZXR5cGUiKSxzPSJyYXN0ZXIiPT09YXx8ImltYWdlIj09PWE7cigic291cmNlIikscigic291cmNlYXR0cmlidXRpb24iKSwidmVjdG9yIj09PWEmJnIoInNvdXJjZWxheWVyIiksImltYWdlIj09PWEmJnIoImNvb3JkaW5hdGVzIikscyYmKGk9InJhc3RlciIpO3ZhciBsPXIoInR5cGUiLGkpO3MmJiJyYXN0ZXIiIT09bCYmKGw9ZS50eXBlPSJyYXN0ZXIiLG4ubG9nKCJTb3VyY2UgdHlwZXMgKnJhc3RlciogYW5kICppbWFnZSogbXVzdCBkcmF3biAqcmFzdGVyKiBsYXllciB0eXBlLiIpKSxyKCJiZWxvdyIpLHIoImNvbG9yIikscigib3BhY2l0eSIpLHIoIm1pbnpvb20iKSxyKCJtYXh6b29tIiksImNpcmNsZSI9PT1sJiZyKCJjaXJjbGUucmFkaXVzIiksImxpbmUiPT09bCYmKHIoImxpbmUud2lkdGgiKSxyKCJsaW5lLmRhc2giKSksImZpbGwiPT09bCYmcigiZmlsbC5vdXRsaW5lY29sb3IiKSwic3ltYm9sIj09PWwmJihyKCJzeW1ib2wuaWNvbiIpLHIoInN5bWJvbC5pY29uc2l6ZSIpLHIoInN5bWJvbC50ZXh0Iiksbi5jb2VyY2VGb250KHIsInN5bWJvbC50ZXh0Zm9udCIpLHIoInN5bWJvbC50ZXh0cG9zaXRpb24iKSxyKCJzeW1ib2wucGxhY2VtZW50IikpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2kodCxlLHIse3R5cGU6Im1hcGJveCIsYXR0cmlidXRlczpvLGhhbmRsZURlZmF1bHRzOnMscGFydGl0aW9uOiJ5IixhY2Nlc3NUb2tlbjplLl9tYXBib3hBY2Nlc3NUb2tlbn0pfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo4MjIsIi4uL3N1YnBsb3RfZGVmYXVsdHMiOjg5OCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODg2fV0sODg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm1hcGJveC1nbC9kaXN0L21hcGJveC1nbC11bm1pbmlmaWVkIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi9jYXJ0ZXNpYW4vYXhlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIiksZj11LnJlY3RNb2RlLGg9dS5kcmF3TW9kZSxwPXUuc2VsZWN0TW9kZSxkPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5wcmVwU2VsZWN0LG09dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LGc9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0aW9uc0NhY2hlLHY9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLnNlbGVjdE9uQ2xpY2sseT10KCIuL2NvbnN0YW50cyIpLHg9dCgiLi9sYXllcnMiKTtmdW5jdGlvbiBiKHQsZSl7dGhpcy5pZD1lLHRoaXMuZ2Q9dDt2YXIgcj10Ll9mdWxsTGF5b3V0LG49dC5fY29udGV4dDt0aGlzLmNvbnRhaW5lcj1yLl9nbGNvbnRhaW5lci5ub2RlKCksdGhpcy5pc1N0YXRpYz1uLnN0YXRpY1Bsb3QsdGhpcy51aWQ9ci5fdWlkKyItIit0aGlzLmlkLHRoaXMuZGl2PW51bGwsdGhpcy54YXhpcz1udWxsLHRoaXMueWF4aXM9bnVsbCx0aGlzLmNyZWF0ZUZyYW1ld29yayhyKSx0aGlzLm1hcD1udWxsLHRoaXMuYWNjZXNzVG9rZW49bnVsbCx0aGlzLnN0eWxlT2JqPW51bGwsdGhpcy50cmFjZUhhc2g9e30sdGhpcy5sYXllckxpc3Q9W10sdGhpcy5iZWxvd0xvb2t1cD17fSx0aGlzLmRyYWdnaW5nPSExLHRoaXMud2hlZWxpbmc9ITF9dmFyIF89Yi5wcm90b3R5cGU7Xy5wbG90PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPXRoaXMsYT1lW2kuaWRdO2kubWFwJiZhLmFjY2Vzc3Rva2VuIT09aS5hY2Nlc3NUb2tlbiYmKGkubWFwLnJlbW92ZSgpLGkubWFwPW51bGwsaS5zdHlsZU9iaj1udWxsLGkudHJhY2VIYXNoPXt9LGkubGF5ZXJMaXN0PVtdKSxuPWkubWFwP25ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2kudXBkYXRlTWFwKHQsZSxyLG4pfSkpOm5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2kuY3JlYXRlTWFwKHQsZSxyLG4pfSkpLHIucHVzaChuKX0sXy5jcmVhdGVNYXA9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIG89dGhpcyxzPWVbby5pZF0sbD1vLnN0eWxlT2JqPVQocy5zdHlsZSk7by5hY2Nlc3NUb2tlbj1zLmFjY2Vzc3Rva2VuO3ZhciBjPW8ubWFwPW5ldyBuLk1hcCh7Y29udGFpbmVyOm8uZGl2LHN0eWxlOmwuc3R5bGUsY2VudGVyOkEocy5jZW50ZXIpLHpvb206cy56b29tLGJlYXJpbmc6cy5iZWFyaW5nLHBpdGNoOnMucGl0Y2gsaW50ZXJhY3RpdmU6IW8uaXNTdGF0aWMscHJlc2VydmVEcmF3aW5nQnVmZmVyOm8uaXNTdGF0aWMsZG91YmxlQ2xpY2tab29tOiExLGJveFpvb206ITEsYXR0cmlidXRpb25Db250cm9sOiExfSkuYWRkQ29udHJvbChuZXcgbi5BdHRyaWJ1dGlvbkNvbnRyb2woe2NvbXBhY3Q6ITB9KSk7Yy5fY2FudmFzLnN0eWxlLmxlZnQ9IjBweCIsYy5fY2FudmFzLnN0eWxlLnRvcD0iMHB4IixvLnJlamVjdE9uRXJyb3IoaSksby5pc1N0YXRpY3x8by5pbml0RngodCxlKTt2YXIgdT1bXTt1LnB1c2gobmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe2Mub25jZSgibG9hZCIsdCl9KSkpLHU9dS5jb25jYXQoYS5mZXRjaFRyYWNlR2VvRGF0YSh0KSksUHJvbWlzZS5hbGwodSkudGhlbigoZnVuY3Rpb24oKXtvLmZpbGxCZWxvd0xvb2t1cCh0LGUpLG8udXBkYXRlRGF0YSh0KSxvLnVwZGF0ZUxheW91dChlKSxvLnJlc29sdmVPblJlbmRlcihyKX0pKS5jYXRjaChpKX0sXy51cGRhdGVNYXA9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcyxvPWkubWFwLHM9ZVt0aGlzLmlkXTtpLnJlamVjdE9uRXJyb3Iobik7dmFyIGw9W10sYz1UKHMuc3R5bGUpO0pTT04uc3RyaW5naWZ5KGkuc3R5bGVPYmopIT09SlNPTi5zdHJpbmdpZnkoYykmJihpLnN0eWxlT2JqPWMsby5zZXRTdHlsZShjLnN0eWxlKSxpLnRyYWNlSGFzaD17fSxsLnB1c2gobmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe28ub25jZSgic3R5bGVkYXRhIix0KX0pKSkpLGw9bC5jb25jYXQoYS5mZXRjaFRyYWNlR2VvRGF0YSh0KSksUHJvbWlzZS5hbGwobCkudGhlbigoZnVuY3Rpb24oKXtpLmZpbGxCZWxvd0xvb2t1cCh0LGUpLGkudXBkYXRlRGF0YSh0KSxpLnVwZGF0ZUxheW91dChlKSxpLnJlc29sdmVPblJlbmRlcihyKX0pKS5jYXRjaChuKX0sXy5maWxsQmVsb3dMb29rdXA9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9ZVt0aGlzLmlkXS5sYXllcnMsYT10aGlzLmJlbG93TG9va3VwPXt9LG89ITE7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIHM9dFtyXVswXS50cmFjZSxsPXMuX21vZHVsZTsic3RyaW5nIj09dHlwZW9mIHMuYmVsb3c/bj1zLmJlbG93OmwuZ2V0QmVsb3cmJihuPWwuZ2V0QmVsb3cocyx0aGlzKSksIiI9PT1uJiYobz0hMCksYVsidHJhY2UtIitzLnVpZF09bnx8IiJ9Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyl7dmFyIGM9aVtyXTtuPSJzdHJpbmciPT10eXBlb2YgYy5iZWxvdz9jLmJlbG93Om8/InRyYWNlcyI6IiIsYVsibGF5b3V0LSIrcl09bn12YXIgdSxmLGg9e307Zm9yKHUgaW4gYSloW249YVt1XV0/aFtuXS5wdXNoKHUpOmhbbl09W3VdO2ZvcihuIGluIGgpe3ZhciBwPWhbbl07aWYocC5sZW5ndGg+MSlmb3Iocj0wO3I8cC5sZW5ndGg7cisrKTA9PT0odT1wW3JdKS5pbmRleE9mKCJ0cmFjZS0iKT8oZj11LnNwbGl0KCJ0cmFjZS0iKVsxXSx0aGlzLnRyYWNlSGFzaFtmXSYmKHRoaXMudHJhY2VIYXNoW2ZdLmJlbG93PW51bGwpKTowPT09dS5pbmRleE9mKCJsYXlvdXQtIikmJihmPXUuc3BsaXQoImxheW91dC0iKVsxXSx0aGlzLmxheWVyTGlzdFtmXSYmKHRoaXMubGF5ZXJMaXN0W2ZdLmJlbG93PW51bGwpKX19O3ZhciB3PXtjaG9yb3BsZXRobWFwYm94OjAsZGVuc2l0eW1hcGJveDoxLHNjYXR0ZXJtYXBib3g6Mn07ZnVuY3Rpb24gVCh0KXt2YXIgZT17fTtyZXR1cm4gaS5pc1BsYWluT2JqZWN0KHQpPyhlLmlkPXQuaWQsZS5zdHlsZT10KToic3RyaW5nIj09dHlwZW9mIHQ/KGUuaWQ9dCwtMSE9PXkuc3R5bGVWYWx1ZXNNYXBib3guaW5kZXhPZih0KT9lLnN0eWxlPWsodCk6eS5zdHlsZXNOb25NYXBib3hbdF0/ZS5zdHlsZT15LnN0eWxlc05vbk1hcGJveFt0XTplLnN0eWxlPXQpOihlLmlkPXkuc3R5bGVWYWx1ZURmbHQsZS5zdHlsZT1rKHkuc3R5bGVWYWx1ZURmbHQpKSxlLnRyYW5zaXRpb249e2R1cmF0aW9uOjAsZGVsYXk6MH0sZX1mdW5jdGlvbiBrKHQpe3JldHVybiB5LnN0eWxlVXJsUHJlZml4K3QrIi0iK3kuc3R5bGVVcmxTdWZmaXh9ZnVuY3Rpb24gQSh0KXtyZXR1cm5bdC5sb24sdC5sYXRdfV8udXBkYXRlRGF0YT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPXRoaXMudHJhY2VIYXNoLG89dC5zbGljZSgpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHdbdFswXS50cmFjZS50eXBlXS13W2VbMF0udHJhY2UudHlwZV19KSk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKyl7dmFyIHM9b1tuXSxsPSExOyhlPWFbKHI9c1swXS50cmFjZSkudWlkXSkmJihlLnR5cGU9PT1yLnR5cGU/KGUudXBkYXRlKHMpLGw9ITApOmUuZGlzcG9zZSgpKSwhbCYmci5fbW9kdWxlJiYoYVtyLnVpZF09ci5fbW9kdWxlLnBsb3QodGhpcyxzKSl9dmFyIGM9T2JqZWN0LmtleXMoYSk7dDpmb3Iobj0wO248Yy5sZW5ndGg7bisrKXt2YXIgdT1jW25dO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspaWYodT09PShyPXRbaV1bMF0udHJhY2UpLnVpZCljb250aW51ZSB0OyhlPWFbdV0pLmRpc3Bvc2UoKSxkZWxldGUgYVt1XX19LF8udXBkYXRlTGF5b3V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwLHI9dFt0aGlzLmlkXTt0aGlzLmRyYWdnaW5nfHx0aGlzLndoZWVsaW5nfHwoZS5zZXRDZW50ZXIoQShyLmNlbnRlcikpLGUuc2V0Wm9vbShyLnpvb20pLGUuc2V0QmVhcmluZyhyLmJlYXJpbmcpLGUuc2V0UGl0Y2goci5waXRjaCkpLHRoaXMudXBkYXRlTGF5ZXJzKHQpLHRoaXMudXBkYXRlRnJhbWV3b3JrKHQpLHRoaXMudXBkYXRlRngodCksdGhpcy5tYXAucmVzaXplKCksdGhpcy5nZC5fY29udGV4dC5fc2Nyb2xsWm9vbS5tYXBib3g/ZS5zY3JvbGxab29tLmVuYWJsZSgpOmUuc2Nyb2xsWm9vbS5kaXNhYmxlKCl9LF8ucmVzb2x2ZU9uUmVuZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwO2Uub24oInJlbmRlciIsKGZ1bmN0aW9uIHIoKXtlLmxvYWRlZCgpJiYoZS5vZmYoInJlbmRlciIsciksc2V0VGltZW91dCh0LDEwKSl9KSl9LF8ucmVqZWN0T25FcnJvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcDtmdW5jdGlvbiByKCl7dChuZXcgRXJyb3IoeS5tYXBPbkVycm9yTXNnKSl9ZS5vbmNlKCJlcnJvciIsciksZS5vbmNlKCJzdHlsZS5lcnJvciIsciksZS5vbmNlKCJzb3VyY2UuZXJyb3IiLHIpLGUub25jZSgidGlsZS5lcnJvciIsciksZS5vbmNlKCJsYXllci5lcnJvciIscil9LF8uY3JlYXRlRnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmRpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLmlkPWUudWlkLHIuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixlLmNvbnRhaW5lci5hcHBlbmRDaGlsZChyKSxlLnhheGlzPXtfaWQ6IngiLGMycDpmdW5jdGlvbih0KXtyZXR1cm4gZS5wcm9qZWN0KHQpLnh9fSxlLnlheGlzPXtfaWQ6InkiLGMycDpmdW5jdGlvbih0KXtyZXR1cm4gZS5wcm9qZWN0KHQpLnl9fSxlLnVwZGF0ZUZyYW1ld29yayh0KSxlLm1vY2tBeGlzPXt0eXBlOiJsaW5lYXIiLHNob3dleHBvbmVudDoiYWxsIixleHBvbmVudGZvcm1hdDoiQiJ9LHMuc2V0Q29udmVydChlLm1vY2tBeGlzLHQpfSxfLmluaXRGeD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLmdkLGk9ci5tYXA7ZnVuY3Rpb24gYSgpe2MubG9uZVVuaG92ZXIoZS5faG92ZXJsYXllcil9ZnVuY3Rpb24gcygpe3ZhciB0PXIuZ2V0VmlldygpO24uZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixyLmdldFZpZXdFZGl0c1dpdGhEZXJpdmVkKHQpKX1pLm9uKCJtb3ZlZW5kIiwoZnVuY3Rpb24odCl7aWYoci5tYXApe3ZhciBlPW4uX2Z1bGxMYXlvdXQ7aWYodC5vcmlnaW5hbEV2ZW50fHxyLndoZWVsaW5nKXt2YXIgaT1lW3IuaWRdO28uY2FsbCgiX3N0b3JlRGlyZWN0R1VJRWRpdCIsbi5sYXlvdXQsZS5fcHJlR1VJLHIuZ2V0Vmlld0VkaXRzKGkpKTt2YXIgYT1yLmdldFZpZXcoKTtpLl9pbnB1dC5jZW50ZXI9aS5jZW50ZXI9YS5jZW50ZXIsaS5faW5wdXQuem9vbT1pLnpvb209YS56b29tLGkuX2lucHV0LmJlYXJpbmc9aS5iZWFyaW5nPWEuYmVhcmluZyxpLl9pbnB1dC5waXRjaD1pLnBpdGNoPWEucGl0Y2gsbi5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLHIuZ2V0Vmlld0VkaXRzV2l0aERlcml2ZWQoYSkpfXQub3JpZ2luYWxFdmVudCYmIm1vdXNldXAiPT09dC5vcmlnaW5hbEV2ZW50LnR5cGU/ci5kcmFnZ2luZz0hMTpyLndoZWVsaW5nJiYoci53aGVlbGluZz0hMSksZS5fcmVob3ZlciYmZS5fcmVob3ZlcigpfX0pKSxpLm9uKCJ3aGVlbCIsKGZ1bmN0aW9uKCl7ci53aGVlbGluZz0hMH0pKSxpLm9uKCJtb3VzZW1vdmUiLChmdW5jdGlvbih0KXt2YXIgZT1yLmRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPVt0Lm9yaWdpbmFsRXZlbnQub2Zmc2V0WCx0Lm9yaWdpbmFsRXZlbnQub2Zmc2V0WV07dC50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHIueGF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIGkudW5wcm9qZWN0KGEpLmxuZ30sci55YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gaS51bnByb2plY3QoYSkubGF0fSxuLl9mdWxsTGF5b3V0Ll9yZWhvdmVyPWZ1bmN0aW9uKCl7bi5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PT09ci5pZCYmbi5fZnVsbExheW91dFtyLmlkXSYmYy5ob3ZlcihuLHQsci5pZCl9LGMuaG92ZXIobix0LHIuaWQpLG4uX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1yLmlkfSkpLGkub24oImRyYWdzdGFydCIsKGZ1bmN0aW9uKCl7ci5kcmFnZ2luZz0hMCxhKCl9KSksaS5vbigiem9vbXN0YXJ0IixhKSxpLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7bi5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PW51bGx9KSksaS5vbigiZHJhZyIscyksaS5vbigiem9vbSIscyksaS5vbigiZGJsY2xpY2siLChmdW5jdGlvbigpe3ZhciB0PW4uX2Z1bGxMYXlvdXRbci5pZF07by5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixuLmxheW91dCxuLl9mdWxsTGF5b3V0Ll9wcmVHVUksci5nZXRWaWV3RWRpdHModCkpO3ZhciBlPXIudmlld0luaXRpYWw7aS5zZXRDZW50ZXIoQShlLmNlbnRlcikpLGkuc2V0Wm9vbShlLnpvb20pLGkuc2V0QmVhcmluZyhlLmJlYXJpbmcpLGkuc2V0UGl0Y2goZS5waXRjaCk7dmFyIGE9ci5nZXRWaWV3KCk7dC5faW5wdXQuY2VudGVyPXQuY2VudGVyPWEuY2VudGVyLHQuX2lucHV0Lnpvb209dC56b29tPWEuem9vbSx0Ll9pbnB1dC5iZWFyaW5nPXQuYmVhcmluZz1hLmJlYXJpbmcsdC5faW5wdXQucGl0Y2g9dC5waXRjaD1hLnBpdGNoLG4uZW1pdCgicGxvdGx5X2RvdWJsZWNsaWNrIixudWxsKSxuLmVtaXQoInBsb3RseV9yZWxheW91dCIsci5nZXRWaWV3RWRpdHNXaXRoRGVyaXZlZChhKSl9KSksci5jbGVhclNlbGVjdD1mdW5jdGlvbigpe2coci5kcmFnT3B0aW9ucyksbShyLmRyYWdPcHRpb25zLmdkKX0sci5vbkNsaWNrSW5QYW5Gbj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGk9bi5fZnVsbExheW91dC5jbGlja21vZGU7aS5pbmRleE9mKCJzZWxlY3QiKT4tMSYmdihlLm9yaWdpbmFsRXZlbnQsbixbci54YXhpc10sW3IueWF4aXNdLHIuaWQsdCksaS5pbmRleE9mKCJldmVudCIpPi0xJiZjLmNsaWNrKG4sZS5vcmlnaW5hbEV2ZW50KX19fSxfLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLm1hcCxuPWUuZ2Q7aWYoIWUuaXNTdGF0aWMpe3ZhciBhLG89dC5kcmFnbW9kZTthPWYobyk/ZnVuY3Rpb24odCxyKXsodC5yYW5nZT17fSlbZS5pZF09W2MoW3IueG1pbixyLnltaW5dKSxjKFtyLnhtYXgsci55bWF4XSldfTpmdW5jdGlvbih0LHIsbil7KHQubGFzc29Qb2ludHM9e30pW2UuaWRdPW4uZmlsdGVyZWQubWFwKGMpfTt2YXIgcz1lLmRyYWdPcHRpb25zO2UuZHJhZ09wdGlvbnM9aS5leHRlbmREZWVwKHN8fHt9LHtkcmFnbW9kZTp0LmRyYWdtb2RlLGVsZW1lbnQ6ZS5kaXYsZ2Q6bixwbG90aW5mbzp7aWQ6ZS5pZCxkb21haW46dFtlLmlkXS5kb21haW4seGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLGZpbGxSYW5nZUl0ZW1zOmF9LHhheGVzOltlLnhheGlzXSx5YXhlczpbZS55YXhpc10sc3VicGxvdDplLmlkfSksci5vZmYoImNsaWNrIixlLm9uQ2xpY2tJblBhbkhhbmRsZXIpLHAobyl8fGgobyk/KHIuZHJhZ1Bhbi5kaXNhYmxlKCksci5vbigiem9vbXN0YXJ0IixlLmNsZWFyU2VsZWN0KSxlLmRyYWdPcHRpb25zLnByZXBGbj1mdW5jdGlvbih0LHIsbil7ZCh0LHIsbixlLmRyYWdPcHRpb25zLG8pfSxsLmluaXQoZS5kcmFnT3B0aW9ucykpOihyLmRyYWdQYW4uZW5hYmxlKCksci5vZmYoInpvb21zdGFydCIsZS5jbGVhclNlbGVjdCksZS5kaXYub25tb3VzZWRvd249bnVsbCxlLm9uQ2xpY2tJblBhbkhhbmRsZXI9ZS5vbkNsaWNrSW5QYW5GbihlLmRyYWdPcHRpb25zKSxyLm9uKCJjbGljayIsZS5vbkNsaWNrSW5QYW5IYW5kbGVyKSl9ZnVuY3Rpb24gYyh0KXt2YXIgcj1lLm1hcC51bnByb2plY3QodCk7cmV0dXJuW3IubG5nLHIubGF0XX19LF8udXBkYXRlRnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlPXRbdGhpcy5pZF0uZG9tYWluLHI9dC5fc2l6ZSxuPXRoaXMuZGl2LnN0eWxlO24ud2lkdGg9ci53KihlLnhbMV0tZS54WzBdKSsicHgiLG4uaGVpZ2h0PXIuaCooZS55WzFdLWUueVswXSkrInB4IixuLmxlZnQ9ci5sK2UueFswXSpyLncrInB4IixuLnRvcD1yLnQrKDEtZS55WzFdKSpyLmgrInB4Iix0aGlzLnhheGlzLl9vZmZzZXQ9ci5sK2UueFswXSpyLncsdGhpcy54YXhpcy5fbGVuZ3RoPXIudyooZS54WzFdLWUueFswXSksdGhpcy55YXhpcy5fb2Zmc2V0PXIudCsoMS1lLnlbMV0pKnIuaCx0aGlzLnlheGlzLl9sZW5ndGg9ci5oKihlLnlbMV0tZS55WzBdKX0sXy51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCl7dmFyIGUscj10W3RoaXMuaWRdLmxheWVycyxuPXRoaXMubGF5ZXJMaXN0O2lmKHIubGVuZ3RoIT09bi5sZW5ndGgpe2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspbltlXS5kaXNwb3NlKCk7Zm9yKG49dGhpcy5sYXllckxpc3Q9W10sZT0wO2U8ci5sZW5ndGg7ZSsrKW4ucHVzaCh4KHRoaXMsZSxyW2VdKSl9ZWxzZSBmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKW5bZV0udXBkYXRlKHJbZV0pfSxfLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLm1hcCYmKHRoaXMubWFwLnJlbW92ZSgpLHRoaXMubWFwPW51bGwsdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5kaXYpKX0sXy50b0ltYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwLnN0b3AoKSx0aGlzLm1hcC5nZXRDYW52YXMoKS50b0RhdGFVUkwoKX0sXy5zZXRPcHRpb25zPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4gaW4gcil0aGlzLm1hcFtlXSh0LG4scltuXSl9LF8uZ2V0TWFwTGF5ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwLmdldFN0eWxlKCkubGF5ZXJzfSxfLmFkZExheWVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5tYXA7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigiIj09PWUpcmV0dXJuIHZvaWQgci5hZGRMYXllcih0LGUpO2Zvcih2YXIgbj10aGlzLmdldE1hcExheWVycygpLGE9MDthPG4ubGVuZ3RoO2ErKylpZihlPT09blthXS5pZClyZXR1cm4gdm9pZCByLmFkZExheWVyKHQsZSk7aS53YXJuKFsiVHJ5aW5nIHRvIGFkZCBsYXllciB3aXRoICpiZWxvdyogdmFsdWUiLGUsInJlZmVyZW5jaW5nIGEgbGF5ZXIgdGhhdCBkb2VzIG5vdCBleGlzdCIsIm9yIHRoYXQgZG9lcyBub3QgeWV0IGV4aXN0LiJdLmpvaW4oIiAiKSl9ci5hZGRMYXllcih0KX0sXy5wcm9qZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcC5wcm9qZWN0KG5ldyBuLkxuZ0xhdCh0WzBdLHRbMV0pKX0sXy5nZXRWaWV3PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXAsZT10LmdldENlbnRlcigpLHI9e2xvbjplLmxuZyxsYXQ6ZS5sYXR9LG49dC5nZXRDYW52YXMoKSxpPW4ud2lkdGgsYT1uLmhlaWdodDtyZXR1cm57Y2VudGVyOnIsem9vbTp0LmdldFpvb20oKSxiZWFyaW5nOnQuZ2V0QmVhcmluZygpLHBpdGNoOnQuZ2V0UGl0Y2goKSxfZGVyaXZlZDp7Y29vcmRpbmF0ZXM6W3QudW5wcm9qZWN0KFswLDBdKS50b0FycmF5KCksdC51bnByb2plY3QoW2ksMF0pLnRvQXJyYXkoKSx0LnVucHJvamVjdChbaSxhXSkudG9BcnJheSgpLHQudW5wcm9qZWN0KFswLGFdKS50b0FycmF5KCldfX19LF8uZ2V0Vmlld0VkaXRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmlkLHI9WyJjZW50ZXIiLCJ6b29tIiwiYmVhcmluZyIsInBpdGNoIl0sbj17fSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV07bltlKyIuIithXT10W2FdfXJldHVybiBufSxfLmdldFZpZXdFZGl0c1dpdGhEZXJpdmVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaWQscj10aGlzLmdldFZpZXdFZGl0cyh0KTtyZXR1cm4gcltlKyIuX2Rlcml2ZWQiXT10Ll9kZXJpdmVkLHJ9LGUuZXhwb3J0cz1ifSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjY1OCwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIjo2NTcsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY3OSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiOjc2OSwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vY2FydGVzaWFuL3NlbGVjdCI6ODQ3LCIuL2NvbnN0YW50cyI6ODgyLCIuL2xheWVycyI6ODg1LCJtYXBib3gtZ2wvZGlzdC9tYXBib3gtZ2wtdW5taW5pZmllZCI6NDQxfV0sODg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmVkaXRUeXBlO3JldHVybnt0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZTplfSxyOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZTplfSxiOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZTplfSxsOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZTplfSxlZGl0VHlwZTplfX19LHt9XSw4OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZDMtdGltZS1mb3JtYXQiKS50aW1lRm9ybWF0TG9jYWxlLGE9dCgiZDMtZm9ybWF0IikuZm9ybWF0TG9jYWxlLG89dCgiZmFzdC1pc251bWVyaWMiKSxzPXQoIi4uL3JlZ2lzdHJ5IiksbD10KCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLGM9dCgiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLHU9dCgiLi4vbGliIiksZj10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksaD10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLHA9dCgiLi9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxkPXQoIi4vY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIikuY2xlYXJTZWxlY3QsbT10KCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIiksZz10KCIuL2ZyYW1lX2F0dHJpYnV0ZXMiKSx2PXQoIi4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEseT11LnJlbGlua1ByaXZhdGVLZXlzLHg9dS5fLGI9ZS5leHBvcnRzPXt9O3UuZXh0ZW5kRmxhdChiLHMpLGIuYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxiLmF0dHJpYnV0ZXMudHlwZS52YWx1ZXM9Yi5hbGxUeXBlcyxiLmZvbnRBdHRycz10KCIuL2ZvbnRfYXR0cmlidXRlcyIpLGIubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksYi5mb250V2VpZ2h0PSJub3JtYWwiO3ZhciBfPWIudHJhbnNmb3Jtc1JlZ2lzdHJ5LHc9dCgiLi9jb21tYW5kIik7Yi5leGVjdXRlQVBJQ29tbWFuZD13LmV4ZWN1dGVBUElDb21tYW5kLGIuY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncz13LmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3MsYi5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXI9dy5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXIsYi5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3M9dy5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3MsYi5yZWRyYXdUZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0PXUuZ2V0R3JhcGhEaXYodCksbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dC5fZnVsbExheW91dCYmKHMuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXciKSh0KSxzLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLHMuZ2V0Q29tcG9uZW50TWV0aG9kKCJjb2xvcmJhciIsImRyYXciKSh0KSxlKGIucHJldmlvdXNQcm9taXNlcyh0KSkpfSksMzAwKX0pKX0sYi5yZXNpemU9ZnVuY3Rpb24odCl7dmFyIGU7dD11LmdldEdyYXBoRGl2KHQpO3ZhciByPW5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe3QmJiF1LmlzSGlkZGVuKHQpfHxuKG5ldyBFcnJvcigiUmVzaXplIG11c3QgYmUgcGFzc2VkIGEgZGlzcGxheWVkIHBsb3QgZGl2IGVsZW1lbnQuIikpLHQuX3JlZHJhd1RpbWVyJiZjbGVhclRpbWVvdXQodC5fcmVkcmF3VGltZXIpLHQuX3Jlc29sdmVSZXNpemUmJihlPXQuX3Jlc29sdmVSZXNpemUpLHQuX3Jlc29sdmVSZXNpemU9cix0Ll9yZWRyYXdUaW1lcj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2lmKCF0LmxheW91dHx8dC5sYXlvdXQud2lkdGgmJnQubGF5b3V0LmhlaWdodHx8dS5pc0hpZGRlbih0KSlyKHQpO2Vsc2V7ZGVsZXRlIHQubGF5b3V0LndpZHRoLGRlbGV0ZSB0LmxheW91dC5oZWlnaHQ7dmFyIGU9dC5jaGFuZ2VkO3QuYXV0b3BsYXk9ITAscy5jYWxsKCJyZWxheW91dCIsdCx7YXV0b3NpemU6ITB9KS50aGVuKChmdW5jdGlvbigpe3QuY2hhbmdlZD1lLHQuX3Jlc29sdmVSZXNpemU9PT1yJiYoZGVsZXRlIHQuX3Jlc29sdmVSZXNpemUscih0KSl9KSl9fSksMTAwKX0pKTtyZXR1cm4gZSYmZShyKSxyfSxiLnByZXZpb3VzUHJvbWlzZXM9ZnVuY3Rpb24odCl7aWYoKHQuX3Byb21pc2VzfHxbXSkubGVuZ3RoKXJldHVybiBQcm9taXNlLmFsbCh0Ll9wcm9taXNlcykudGhlbigoZnVuY3Rpb24oKXt0Ll9wcm9taXNlcz1bXX0pKX0sYi5hZGRMaW5rcz1mdW5jdGlvbih0KXtpZih0Ll9jb250ZXh0LnNob3dMaW5rfHx0Ll9jb250ZXh0LnNob3dTb3VyY2VzKXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dS5lbnN1cmVTaW5nbGUoZS5fcGFwZXIsInRleHQiLCJqcy1wbG90LWxpbmstY29udGFpbmVyIiwoZnVuY3Rpb24odCl7dC5zdHlsZSh7ImZvbnQtZmFtaWx5IjonIk9wZW4gU2FucyIsIEFyaWFsLCBzYW5zLXNlcmlmJywiZm9udC1zaXplIjoiMTJweCIsZmlsbDpmLmRlZmF1bHRMaW5lLCJwb2ludGVyLWV2ZW50cyI6ImFsbCJ9KS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3QuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstdG8tdG9vbCIsITApLHQuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstc3BhY2VyIiwhMCksdC5hcHBlbmQoInRzcGFuIikuY2xhc3NlZCgianMtc291cmNlbGlua3MiLCEwKX0pKX0pKSxpPXIubm9kZSgpLGE9e3k6ZS5fcGFwZXIuYXR0cigiaGVpZ2h0IiktOX07ZG9jdW1lbnQuYm9keS5jb250YWlucyhpKSYmaS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKT49ZS53aWR0aC0yMD8oYVsidGV4dC1hbmNob3IiXT0ic3RhcnQiLGEueD01KTooYVsidGV4dC1hbmNob3IiXT0iZW5kIixhLng9ZS5fcGFwZXIuYXR0cigid2lkdGgiKS03KSxyLmF0dHIoYSk7dmFyIG89ci5zZWxlY3QoIi5qcy1saW5rLXRvLXRvb2wiKSxzPXIuc2VsZWN0KCIuanMtbGluay1zcGFjZXIiKSxsPXIuc2VsZWN0KCIuanMtc291cmNlbGlua3MiKTt0Ll9jb250ZXh0LnNob3dTb3VyY2VzJiZ0Ll9jb250ZXh0LnNob3dTb3VyY2VzKHQpLHQuX2NvbnRleHQuc2hvd0xpbmsmJmZ1bmN0aW9uKHQsZSl7ZS50ZXh0KCIiKTt2YXIgcj1lLmFwcGVuZCgiYSIpLmF0dHIoeyJ4bGluazp4bGluazpocmVmIjoiIyIsY2xhc3M6ImxpbmstLWltcHQgbGluay0tZW1iZWR2aWV3IiwiZm9udC13ZWlnaHQiOiJib2xkIn0pLnRleHQodC5fY29udGV4dC5saW5rVGV4dCsiICIrU3RyaW5nLmZyb21DaGFyQ29kZSgxODcpKTtpZih0Ll9jb250ZXh0LnNlbmREYXRhKXIub24oImNsaWNrIiwoZnVuY3Rpb24oKXtiLnNlbmREYXRhVG9DbG91ZCh0KX0pKTtlbHNle3ZhciBuPXdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zcGxpdCgiLyIpLGk9d2luZG93LmxvY2F0aW9uLnNlYXJjaDtyLmF0dHIoeyJ4bGluazp4bGluazpzaG93IjoibmV3IiwieGxpbms6eGxpbms6aHJlZiI6Ii8iK25bMl0uc3BsaXQoIi4iKVswXSsiLyIrblsxXStpfSl9fSh0LG8pLHMudGV4dChvLnRleHQoKSYmbC50ZXh0KCk/IiAtICI6IiIpfX0sYi5zZW5kRGF0YVRvQ2xvdWQ9ZnVuY3Rpb24odCl7dmFyIGU9KHdpbmRvdy5QTE9UTFlFTlZ8fHt9KS5CQVNFX1VSTHx8dC5fY29udGV4dC5wbG90bHlTZXJ2ZXJVUkw7aWYoZSl7dC5lbWl0KCJwbG90bHlfYmVmb3JlZXhwb3J0Iik7dmFyIHI9bi5zZWxlY3QodCkuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImhpZGRlbmZvcm0iKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxpPXIuYXBwZW5kKCJmb3JtIikuYXR0cih7YWN0aW9uOmUrIi9leHRlcm5hbCIsbWV0aG9kOiJwb3N0Iix0YXJnZXQ6Il9ibGFuayJ9KTtyZXR1cm4gaS5hcHBlbmQoImlucHV0IikuYXR0cih7dHlwZToidGV4dCIsbmFtZToiZGF0YSJ9KS5ub2RlKCkudmFsdWU9Yi5ncmFwaEpzb24odCwhMSwia2VlcGRhdGEiKSxpLm5vZGUoKS5zdWJtaXQoKSxyLnJlbW92ZSgpLHQuZW1pdCgicGxvdGx5X2FmdGVyZXhwb3J0IiksITF9fTt2YXIgVD1bImRheXMiLCJzaG9ydERheXMiLCJtb250aHMiLCJzaG9ydE1vbnRocyIsInBlcmlvZHMiLCJkYXRlVGltZSIsImRhdGUiLCJ0aW1lIiwiZGVjaW1hbCIsInRob3VzYW5kcyIsImdyb3VwaW5nIiwiY3VycmVuY3kiXSxrPVsieWVhciIsIm1vbnRoIiwiZGF5TW9udGgiLCJkYXlNb250aFllYXIiXTtmdW5jdGlvbiBBKHQsZSl7dmFyIHI9dC5fY29udGV4dC5sb2NhbGU7cnx8KHI9ImVuLVVTIik7dmFyIG49ITEsaT17fTtmdW5jdGlvbiBhKHQpe2Zvcih2YXIgcj0hMCxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPWVbYV07aVtvXXx8KHRbb10/aVtvXT10W29dOnI9ITEpfXImJihuPSEwKX1mb3IodmFyIG89MDtvPDI7bysrKXtmb3IodmFyIGw9dC5fY29udGV4dC5sb2NhbGVzLGM9MDtjPDI7YysrKXt2YXIgdT0obFtyXXx8e30pLmZvcm1hdDtpZih1JiYoYSh1KSxuKSlicmVhaztsPXMubG9jYWxlUmVnaXN0cnl9dmFyIGY9ci5zcGxpdCgiLSIpWzBdO2lmKG58fGY9PT1yKWJyZWFrO3I9Zn1yZXR1cm4gbnx8YShzLmxvY2FsZVJlZ2lzdHJ5LmVuLmZvcm1hdCksaX1mdW5jdGlvbiBNKHQsZSl7dmFyIHI9e19mdWxsTGF5b3V0OmV9LG49IngiPT09dC5faWQuY2hhckF0KDApLGk9dC5fbWFpbkF4aXMuX2FuY2hvckF4aXMsYT0iIixvPSIiLHM9IiI7aWYoaSYmKHM9aS5fbWFpbkF4aXMuX2lkLGE9bj90Ll9pZCtzOnMrdC5faWQpLCFhfHwhZS5fcGxvdHNbYV0pe2E9IiI7Zm9yKHZhciBsPXQuX2NvdW50ZXJBeGVzLGM9MDtjPGwubGVuZ3RoO2MrKyl7dmFyIHU9bFtjXSxmPW4/dC5faWQrdTp1K3QuX2lkO298fChvPWYpO3ZhciBoPXAuZ2V0RnJvbUlkKHIsdSk7aWYocyYmaC5vdmVybGF5aW5nPT09cyl7YT1mO2JyZWFrfX19cmV0dXJuIGF8fG99ZnVuY3Rpb24gUyh0KXt2YXIgZT10LnRyYW5zZm9ybXM7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGgpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl0saT1uLl9tb2R1bGV8fF9bbi50eXBlXTtpZihpJiZpLm1ha2VzRGF0YSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBFKHQsZSxyLG4pe2Zvcih2YXIgaT10LnRyYW5zZm9ybXMsYT1bdF0sbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dLGw9X1tzLnR5cGVdO2wmJmwudHJhbnNmb3JtJiYoYT1sLnRyYW5zZm9ybShhLHt0cmFuc2Zvcm06cyxmdWxsVHJhY2U6dCxmdWxsRGF0YTplLGxheW91dDpyLGZ1bGxMYXlvdXQ6bix0cmFuc2Zvcm1JbmRleDpvfSkpfXJldHVybiBhfWZ1bmN0aW9uIEwodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYicHgiPT09dC5zdWJzdHIodC5sZW5ndGgtMikmJnBhcnNlRmxvYXQodCl9ZnVuY3Rpb24gQyh0KXt2YXIgZT10Lm1hcmdpbjtpZighdC5fc2l6ZSl7dmFyIHI9dC5fc2l6ZT17bDpNYXRoLnJvdW5kKGUubCkscjpNYXRoLnJvdW5kKGUuciksdDpNYXRoLnJvdW5kKGUudCksYjpNYXRoLnJvdW5kKGUuYikscDpNYXRoLnJvdW5kKGUucGFkKX07ci53PU1hdGgucm91bmQodC53aWR0aCktci5sLXIucixyLmg9TWF0aC5yb3VuZCh0LmhlaWdodCktci50LXIuYn10Ll9wdXNobWFyZ2lufHwodC5fcHVzaG1hcmdpbj17fSksdC5fcHVzaG1hcmdpbklkc3x8KHQuX3B1c2htYXJnaW5JZHM9e30pfWIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lJiZlLnNraXBVcGRhdGVDYWxjLG49dC5fZnVsbExheW91dHx8e307aWYobi5fc2tpcERlZmF1bHRzKWRlbGV0ZSBuLl9za2lwRGVmYXVsdHM7ZWxzZXt2YXIgbyxsPXQuX2Z1bGxMYXlvdXQ9e30sYz10LmxheW91dHx8e30sZj10Ll9mdWxsRGF0YXx8W10saD10Ll9mdWxsRGF0YT1bXSxwPXQuZGF0YXx8W10sbT10LmNhbGNkYXRhfHxbXSxnPXQuX2NvbnRleHR8fHt9O3QuX3RyYW5zaXRpb25EYXRhfHxiLmNyZWF0ZVRyYW5zaXRpb25EYXRhKHQpLGwuX2RmbHRUaXRsZT17cGxvdDp4KHQsIkNsaWNrIHRvIGVudGVyIFBsb3QgdGl0bGUiKSx4OngodCwiQ2xpY2sgdG8gZW50ZXIgWCBheGlzIHRpdGxlIikseTp4KHQsIkNsaWNrIHRvIGVudGVyIFkgYXhpcyB0aXRsZSIpLGNvbG9yYmFyOngodCwiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZSIpLGFubm90YXRpb246eCh0LCJuZXcgdGV4dCIpfSxsLl90cmFjZVdvcmQ9eCh0LCJ0cmFjZSIpO3ZhciB2PUEodCxUKTtpZihsLl9tYXBib3hBY2Nlc3NUb2tlbj1nLm1hcGJveEFjY2Vzc1Rva2VuLG4uX2luaXRpYWxBdXRvU2l6ZUlzRG9uZSl7dmFyIF89bi53aWR0aCx3PW4uaGVpZ2h0O2Iuc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHMoYyxsLHYpLGMud2lkdGh8fChsLndpZHRoPV8pLGMuaGVpZ2h0fHwobC5oZWlnaHQ9dyksYi5zYW5pdGl6ZU1hcmdpbnMobCl9ZWxzZXtiLnN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzKGMsbCx2KTt2YXIgTT0hYy53aWR0aHx8IWMuaGVpZ2h0LFM9bC5hdXRvc2l6ZSxFPWcuYXV0b3NpemFibGU7TSYmKFN8fEUpP2IucGxvdEF1dG9TaXplKHQsYyxsKTpNJiZiLnNhbml0aXplTWFyZ2lucyhsKSwhUyYmTSYmKGMud2lkdGg9bC53aWR0aCxjLmhlaWdodD1sLmhlaWdodCl9bC5fZDNsb2NhbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kZWNpbWFsPWUuY2hhckF0KDApLHQudGhvdXNhbmRzPWUuY2hhckF0KDEpLHtudW1iZXJGb3JtYXQ6ZnVuY3Rpb24oZSl7dHJ5e2U9YSh0KS5mb3JtYXQodS5hZGp1c3RGb3JtYXQoZSkpfWNhdGNoKHQpe3JldHVybiB1Lndhcm5CYWRGb3JtYXQoZSksdS5ub0Zvcm1hdH1yZXR1cm4gZX0sdGltZUZvcm1hdDppKHQpLnV0Y0Zvcm1hdH19KHYsbC5zZXBhcmF0b3JzKSxsLl9leHRyYUZvcm1hdD1BKHQsayksbC5faW5pdGlhbEF1dG9TaXplSXNEb25lPSEwLGwuX2RhdGFMZW5ndGg9cC5sZW5ndGgsbC5fbW9kdWxlcz1bXSxsLl92aXNpYmxlTW9kdWxlcz1bXSxsLl9iYXNlUGxvdE1vZHVsZXM9W107dmFyIEw9bC5fc3VicGxvdHM9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9cy5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcyxuPXt9O2lmKCFyKXtyPVtdO3ZhciBpPXMuc3VicGxvdHNSZWdpc3RyeTtmb3IodmFyIGEgaW4gaSl7dmFyIG89aVthXS5hdHRyO2lmKG8mJihyLnB1c2goYSksQXJyYXkuaXNBcnJheShvKSkpZm9yKGU9MDtlPG8ubGVuZ3RoO2UrKyl1LnB1c2hVbmlxdWUocixvW2VdKX19Zm9yKHQ9MDt0PHIubGVuZ3RoO3QrKyluW3JbdF1dPVtdO3JldHVybiBufSgpLFA9bC5fc3Bsb21BeGVzPXt4Ont9LHk6e319LEk9bC5fc3Bsb21TdWJwbG90cz17fTtsLl9zcGxvbUdyaWREZmx0PXt9LGwuX3NjYXR0ZXJTdGFja09wdHM9e30sbC5fZmlyc3RTY2F0dGVyPXt9LGwuX2FsaWdubWVudE9wdHM9e30sbC5fY29sb3JBeGVzPXt9LGwuX3JlcXVlc3RSYW5nZXNsaWRlcj17fSxsLl90cmFjZVVpZHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9ZS5sZW5ndGgsYT1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz10W3JdLl9mdWxsSW5wdXQ7byE9PW4mJmEucHVzaChvKSxuPW99dmFyIHM9YS5sZW5ndGgsbD1uZXcgQXJyYXkoaSksYz17fTtmdW5jdGlvbiBmKHQsZSl7bFtlXT10LGNbdF09MX1mdW5jdGlvbiBoKHQsZSl7aWYodCYmInN0cmluZyI9PXR5cGVvZiB0JiYhY1t0XSlyZXR1cm4gZih0LGUpLCEwfWZvcihyPTA7cjxpO3IrKyl7dmFyIHA9ZVtyXS51aWQ7Im51bWJlciI9PXR5cGVvZiBwJiYocD1TdHJpbmcocCkpLGgocCxyKXx8KHI8cyYmaChhW3JdLnVpZCxyKXx8Zih1LnJhbmRzdHIoYykscikpfXJldHVybiBsfShmLHApLGwuX2dsb2JhbFRyYW5zZm9ybXM9KHQuX2NvbnRleHR8fHt9KS5nbG9iYWxUcmFuc2Zvcm1zLGIuc3VwcGx5RGF0YURlZmF1bHRzKHAsaCxjLGwpO3ZhciBPPU9iamVjdC5rZXlzKFAueCksej1PYmplY3Qua2V5cyhQLnkpO2lmKE8ubGVuZ3RoPjEmJnoubGVuZ3RoPjEpe2ZvcihzLmdldENvbXBvbmVudE1ldGhvZCgiZ3JpZCIsInNpemVEZWZhdWx0cyIpKGMsbCksbz0wO288Ty5sZW5ndGg7bysrKXUucHVzaFVuaXF1ZShMLnhheGlzLE9bb10pO2ZvcihvPTA7bzx6Lmxlbmd0aDtvKyspdS5wdXNoVW5pcXVlKEwueWF4aXMseltvXSk7Zm9yKHZhciBEIGluIEkpdS5wdXNoVW5pcXVlKEwuY2FydGVzaWFuLEQpfWlmKGwuX2hhcz1iLl9oYXNQbG90VHlwZS5iaW5kKGwpLGYubGVuZ3RoPT09aC5sZW5ndGgpZm9yKG89MDtvPGgubGVuZ3RoO28rKyl5KGhbb10sZltvXSk7Yi5zdXBwbHlMYXlvdXRNb2R1bGVEZWZhdWx0cyhjLGwsaCx0Ll90cmFuc2l0aW9uRGF0YSk7dmFyIFI9bC5fdmlzaWJsZU1vZHVsZXMsRj1bXTtmb3Iobz0wO288Ui5sZW5ndGg7bysrKXt2YXIgQj1SW29dLmNyb3NzVHJhY2VEZWZhdWx0cztCJiZ1LnB1c2hVbmlxdWUoRixCKX1mb3Iobz0wO288Ri5sZW5ndGg7bysrKUZbb10oaCxsKTtsLl9oYXNPbmx5TGFyZ2VTcGxvbXM9MT09PWwuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGgmJiJzcGxvbSI9PT1sLl9iYXNlUGxvdE1vZHVsZXNbMF0ubmFtZSYmTy5sZW5ndGg+MTUmJnoubGVuZ3RoPjE1JiYwPT09bC5zaGFwZXMubGVuZ3RoJiYwPT09bC5pbWFnZXMubGVuZ3RoLGIubGlua1N1YnBsb3RzKGgsbCxmLG4pLGIuY2xlYW5QbG90KGgsbCxmLG4pO3ZhciBOPSEoIW4uX2hhc3x8IW4uX2hhcygiZ2wyZCIpKSxqPSEoIWwuX2hhc3x8IWwuX2hhcygiZ2wyZCIpKSxVPSEoIW4uX2hhc3x8IW4uX2hhcygiY2FydGVzaWFuIikpfHxOLFY9ISghbC5faGFzfHwhbC5faGFzKCJjYXJ0ZXNpYW4iKSl8fGo7VSYmIVY/bi5fYmdMYXllci5yZW1vdmUoKTpWJiYhVSYmKGwuX3Nob3VsZENyZWF0ZUJnTGF5ZXI9ITApLG4uX3pvb21sYXllciYmIXQuX2RyYWdnaW5nJiZkKHtfZnVsbExheW91dDpufSksZnVuY3Rpb24odCxlKXt2YXIgcixuPVtdO2UubWV0YSYmKHI9ZS5fbWV0YT17bWV0YTplLm1ldGEsbGF5b3V0OnttZXRhOmUubWV0YX19KTtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTthLm1ldGE/blthLmluZGV4XT1hLl9tZXRhPXttZXRhOmEubWV0YX06ZS5tZXRhJiYoYS5fbWV0YT17bWV0YTplLm1ldGF9KSxlLm1ldGEmJihhLl9tZXRhLmxheW91dD17bWV0YTplLm1ldGF9KX1uLmxlbmd0aCYmKHJ8fChyPWUuX21ldGE9e30pLHIuZGF0YT1uKX0oaCxsKSx5KGwsbikscy5nZXRDb21wb25lbnRNZXRob2QoImNvbG9yc2NhbGUiLCJjcm9zc1RyYWNlRGVmYXVsdHMiKShoLGwpLGwuX3ByZUdVSXx8KGwuX3ByZUdVST17fSksbC5fdHJhY2VQcmVHVUl8fChsLl90cmFjZVByZUdVST17fSk7dmFyIEgscT1sLl90cmFjZVByZUdVSSxHPXt9O2ZvcihIIGluIHEpR1tIXT0ib2xkIjtmb3Iobz0wO288aC5sZW5ndGg7bysrKUdbSD1oW29dLl9mdWxsSW5wdXQudWlkXXx8KHFbSF09e30pLEdbSF09Im5ldyI7Zm9yKEggaW4gRykib2xkIj09PUdbSF0mJmRlbGV0ZSBxW0hdO0MobCkscy5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwibWFrZURhdGEiKShsKSxyfHxtLmxlbmd0aCE9PWgubGVuZ3RofHxiLnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYyhtLGgpfX0sYi5zdXBwbHlEZWZhdWx0c1VwZGF0ZUNhbGM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxpPSh0W3JdfHxbXSlbMF07aWYoaSYmaS50cmFjZSl7dmFyIGE9aS50cmFjZTtpZihhLl9oYXNDYWxjVHJhbnNmb3JtKXt2YXIgbyxzLGwsYz1hLl9hcnJheUF0dHJzO2ZvcihvPTA7bzxjLmxlbmd0aDtvKyspcz1jW29dLGw9dS5uZXN0ZWRQcm9wZXJ0eShhLHMpLmdldCgpLnNsaWNlKCksdS5uZXN0ZWRQcm9wZXJ0eShuLHMpLnNldChsKX1pLnRyYWNlPW59fX0sYi5jcmVhdGVUcmFuc2l0aW9uRGF0YT1mdW5jdGlvbih0KXt0Ll90cmFuc2l0aW9uRGF0YXx8KHQuX3RyYW5zaXRpb25EYXRhPXt9KSx0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzfHwodC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcz1bXSksdC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaHx8KHQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g9e30pLHQuX3RyYW5zaXRpb25EYXRhLl9jb3VudGVyfHwodC5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXI9MCksdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrc3x8KHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3M9W10pfSxiLl9oYXNQbG90VHlwZT1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKGU9MDtlPHIubGVuZ3RoO2UrKylpZihyW2VdLm5hbWU9PT10KXJldHVybiEwO3ZhciBuPXRoaXMuX21vZHVsZXN8fFtdO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspe3ZhciBpPW5bZV0ubmFtZTtpZihpPT09dClyZXR1cm4hMDt2YXIgYT1zLm1vZHVsZXNbaV07aWYoYSYmYS5jYXRlZ29yaWVzW3RdKXJldHVybiEwfXJldHVybiExfSxiLmNsZWFuUGxvdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG89bi5fYmFzZVBsb3RNb2R1bGVzfHxbXTtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKXt2YXIgcz1vW2ldO3MuY2xlYW4mJnMuY2xlYW4odCxlLHIsbil9dmFyIGw9bi5faGFzJiZuLl9oYXMoImdsIiksYz1lLl9oYXMmJmUuX2hhcygiZ2wiKTtsJiYhYyYmdm9pZCAwIT09bi5fZ2xjb250YWluZXImJihuLl9nbGNvbnRhaW5lci5zZWxlY3RBbGwoIi5nbC1jYW52YXMiKS5yZW1vdmUoKSxuLl9nbGNvbnRhaW5lci5zZWxlY3RBbGwoIi5uby13ZWJnbCIpLnJlbW92ZSgpLG4uX2dsY2FudmFzPW51bGwpO3ZhciB1PSEhbi5faW5mb2xheWVyO3Q6Zm9yKGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGY9cltpXS51aWQ7Zm9yKGE9MDthPHQubGVuZ3RoO2ErKyl7aWYoZj09PXRbYV0udWlkKWNvbnRpbnVlIHR9dSYmbi5faW5mb2xheWVyLnNlbGVjdCgiLmNiIitmKS5yZW1vdmUoKX19LGIubGlua1N1YnBsb3RzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1uLl9wbG90c3x8e30sbD1lLl9wbG90cz17fSxjPWUuX3N1YnBsb3RzLGY9e19mdWxsRGF0YTp0LF9mdWxsTGF5b3V0OmV9LGg9Yy5jYXJ0ZXNpYW4uY29uY2F0KGMuZ2wyZHx8W10pO2ZvcihpPTA7aTxoLmxlbmd0aDtpKyspe3ZhciBkLG09aFtpXSxnPW9bbV0sdj1wLmdldEZyb21JZChmLG0sIngiKSx5PXAuZ2V0RnJvbUlkKGYsbSwieSIpO2ZvcihnP2Q9bFttXT1nOihkPWxbbV09e30pLmlkPW0sdi5fY291bnRlckF4ZXMucHVzaCh5Ll9pZCkseS5fY291bnRlckF4ZXMucHVzaCh2Ll9pZCksdi5fc3VicGxvdHNXaXRoLnB1c2gobSkseS5fc3VicGxvdHNXaXRoLnB1c2gobSksZC54YXhpcz12LGQueWF4aXM9eSxkLl9oYXNDbGlwT25BeGlzRmFsc2U9ITEsYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgeD10W2FdO2lmKHgueGF4aXM9PT1kLnhheGlzLl9pZCYmeC55YXhpcz09PWQueWF4aXMuX2lkJiYhMT09PXguY2xpcG9uYXhpcyl7ZC5faGFzQ2xpcE9uQXhpc0ZhbHNlPSEwO2JyZWFrfX19dmFyIGIsXz1wLmxpc3QoZixudWxsLCEwKTtmb3IoaT0wO2k8Xy5sZW5ndGg7aSsrKXt2YXIgdz1udWxsOyhiPV9baV0pLm92ZXJsYXlpbmcmJih3PXAuZ2V0RnJvbUlkKGYsYi5vdmVybGF5aW5nKSkmJncub3ZlcmxheWluZyYmKGIub3ZlcmxheWluZz0hMSx3PW51bGwpLGIuX21haW5BeGlzPXd8fGIsdyYmKGIuZG9tYWluPXcuZG9tYWluLnNsaWNlKCkpLGIuX2FuY2hvckF4aXM9ImZyZWUiPT09Yi5hbmNob3I/bnVsbDpwLmdldEZyb21JZChmLGIuYW5jaG9yKX1mb3IoaT0wO2k8Xy5sZW5ndGg7aSsrKWlmKChiPV9baV0pLl9jb3VudGVyQXhlcy5zb3J0KHAuaWRTb3J0KSxiLl9zdWJwbG90c1dpdGguc29ydCh1LnN1YnBsb3RTb3J0KSxiLl9tYWluU3VicGxvdD1NKGIsZSksYi5fY291bnRlckF4ZXMubGVuZ3RoJiYoYi5zcGlrZW1vZGUmJi0xIT09Yi5zcGlrZW1vZGUuaW5kZXhPZigiYWNyb3NzIil8fGIuYXV0b21hcmdpbiYmYi5taXJyb3ImJiJmcmVlIiE9PWIuYW5jaG9yfHxzLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJpc1Zpc2libGUiKShiKSkpe3ZhciBUPTEsaz0wO2ZvcihhPTA7YTxiLl9jb3VudGVyQXhlcy5sZW5ndGg7YSsrKXt2YXIgQT1wLmdldEZyb21JZChmLGIuX2NvdW50ZXJBeGVzW2FdKTtUPU1hdGgubWluKFQsQS5kb21haW5bMF0pLGs9TWF0aC5tYXgoayxBLmRvbWFpblsxXSl9VDxrJiYoYi5fY291bnRlckRvbWFpbk1pbj1ULGIuX2NvdW50ZXJEb21haW5NYXg9ayl9fSxiLmNsZWFyRXhwYW5kZWRUcmFjZURlZmF1bHRDb2xvcnM9ZnVuY3Rpb24odCl7dmFyIGUscixuO2ZvcihyPVtdLChlPXQuX21vZHVsZS5fY29sb3JBdHRycyl8fCh0Ll9tb2R1bGUuX2NvbG9yQXR0cnM9ZT1bXSxsLmNyYXdsKHQuX21vZHVsZS5hdHRyaWJ1dGVzLChmdW5jdGlvbih0LG4saSxhKXtyW2FdPW4sci5sZW5ndGg9YSsxLCJjb2xvciI9PT10LnZhbFR5cGUmJnZvaWQgMD09PXQuZGZsdCYmZS5wdXNoKHIuam9pbigiLiIpKX0pKSksbj0wO248ZS5sZW5ndGg7bisrKXt1Lm5lc3RlZFByb3BlcnR5KHQsIl9pbnB1dC4iK2Vbbl0pLmdldCgpfHx1Lm5lc3RlZFByb3BlcnR5KHQsZVtuXSkuc2V0KG51bGwpfX0sYi5zdXBwbHlEYXRhRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLGw9bi5fbW9kdWxlcyxmPW4uX3Zpc2libGVNb2R1bGVzLGg9bi5fYmFzZVBsb3RNb2R1bGVzLHA9MCxkPTA7ZnVuY3Rpb24gbSh0KXtlLnB1c2godCk7dmFyIHI9dC5fbW9kdWxlO3ImJih1LnB1c2hVbmlxdWUobCxyKSwhMD09PXQudmlzaWJsZSYmdS5wdXNoVW5pcXVlKGYsciksdS5wdXNoVW5pcXVlKGgsdC5fbW9kdWxlLmJhc2VQbG90TW9kdWxlKSxwKyssITEhPT10Ll9pbnB1dC52aXNpYmxlJiZkKyspfW4uX3RyYW5zZm9ybU1vZHVsZXM9W107dmFyIGc9e30sdj1bXSx4PShyLnRlbXBsYXRlfHx7fSkuZGF0YXx8e30sXz1jLnRyYWNlVGVtcGxhdGVyKHgpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2lmKG89dFtpXSwoYT1fLm5ld1RyYWNlKG8pKS51aWQ9bi5fdHJhY2VVaWRzW2ldLGIuc3VwcGx5VHJhY2VEZWZhdWx0cyhvLGEsZCxuLGkpLGEuaW5kZXg9aSxhLl9pbnB1dD1vLGEuX2V4cGFuZGVkSW5kZXg9cCxhLnRyYW5zZm9ybXMmJmEudHJhbnNmb3Jtcy5sZW5ndGgpZm9yKHZhciB3PSExIT09by52aXNpYmxlJiYhMT09PWEudmlzaWJsZSxUPUUoYSxlLHIsbiksaz0wO2s8VC5sZW5ndGg7aysrKXt2YXIgQT1UW2tdLE09e190ZW1wbGF0ZTphLl90ZW1wbGF0ZSx0eXBlOmEudHlwZSx1aWQ6YS51aWQra307dyYmITE9PT1BLnZpc2libGUmJmRlbGV0ZSBBLnZpc2libGUsYi5zdXBwbHlUcmFjZURlZmF1bHRzKEEsTSxwLG4saSkseShNLEEpLE0uaW5kZXg9aSxNLl9pbnB1dD1vLE0uX2Z1bGxJbnB1dD1hLE0uX2V4cGFuZGVkSW5kZXg9cCxNLl9leHBhbmRlZElucHV0PUEsbShNKX1lbHNlIGEuX2Z1bGxJbnB1dD1hLGEuX2V4cGFuZGVkSW5wdXQ9YSxtKGEpO3MudHJhY2VJcyhhLCJjYXJwZXRBeGlzIikmJihnW2EuY2FycGV0XT1hKSxzLnRyYWNlSXMoYSwiY2FycGV0RGVwZW5kZW50IikmJnYucHVzaChpKX1mb3IoaT0wO2k8di5sZW5ndGg7aSsrKWlmKChhPWVbdltpXV0pLnZpc2libGUpe3ZhciBTPWdbYS5jYXJwZXRdO2EuX2NhcnBldD1TLFMmJlMudmlzaWJsZT8oYS54YXhpcz1TLnhheGlzLGEueWF4aXM9Uy55YXhpcyk6YS52aXNpYmxlPSExfX0sYi5zdXBwbHlBbmltYXRpb25EZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZTt0PXR8fHt9O3ZhciByPXt9O2Z1bmN0aW9uIG4oZSxuKXtyZXR1cm4gdS5jb2VyY2UodHx8e30scixtLGUsbil9aWYobigibW9kZSIpLG4oImRpcmVjdGlvbiIpLG4oImZyb21jdXJyZW50IiksQXJyYXkuaXNBcnJheSh0LmZyYW1lKSlmb3Ioci5mcmFtZT1bXSxlPTA7ZTx0LmZyYW1lLmxlbmd0aDtlKyspci5mcmFtZVtlXT1iLnN1cHBseUFuaW1hdGlvbkZyYW1lRGVmYXVsdHModC5mcmFtZVtlXXx8e30pO2Vsc2Ugci5mcmFtZT1iLnN1cHBseUFuaW1hdGlvbkZyYW1lRGVmYXVsdHModC5mcmFtZXx8e30pO2lmKEFycmF5LmlzQXJyYXkodC50cmFuc2l0aW9uKSlmb3Ioci50cmFuc2l0aW9uPVtdLGU9MDtlPHQudHJhbnNpdGlvbi5sZW5ndGg7ZSsrKXIudHJhbnNpdGlvbltlXT1iLnN1cHBseUFuaW1hdGlvblRyYW5zaXRpb25EZWZhdWx0cyh0LnRyYW5zaXRpb25bZV18fHt9KTtlbHNlIHIudHJhbnNpdGlvbj1iLnN1cHBseUFuaW1hdGlvblRyYW5zaXRpb25EZWZhdWx0cyh0LnRyYW5zaXRpb258fHt9KTtyZXR1cm4gcn0sYi5zdXBwbHlBbmltYXRpb25GcmFtZURlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gdS5jb2VyY2UodHx8e30sZSxtLmZyYW1lLHIsbil9cmV0dXJuIHIoImR1cmF0aW9uIikscigicmVkcmF3IiksZX0sYi5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihyLG4pe3JldHVybiB1LmNvZXJjZSh0fHx7fSxlLG0udHJhbnNpdGlvbixyLG4pfXJldHVybiByKCJkdXJhdGlvbiIpLHIoImVhc2luZyIpLGV9LGIuc3VwcGx5RnJhbWVEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKHIsbil7cmV0dXJuIHUuY29lcmNlKHQsZSxnLHIsbil9cmV0dXJuIHIoImdyb3VwIikscigibmFtZSIpLHIoInRyYWNlcyIpLHIoImJhc2VmcmFtZSIpLHIoImRhdGEiKSxyKCJsYXlvdXQiKSxlfSxiLnN1cHBseVRyYWNlRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvPW4uY29sb3J3YXl8fGYuZGVmYXVsdHMsbD1vW3Ilby5sZW5ndGhdO2Z1bmN0aW9uIGMocixuKXtyZXR1cm4gdS5jb2VyY2UodCxlLGIuYXR0cmlidXRlcyxyLG4pfXZhciBoPWMoInZpc2libGUiKTtjKCJ0eXBlIiksYygibmFtZSIsbi5fdHJhY2VXb3JkKyIgIitpKSxjKCJ1aXJldmlzaW9uIixuLnVpcmV2aXNpb24pO3ZhciBwPWIuZ2V0TW9kdWxlKGUpO2lmKGUuX21vZHVsZT1wLHApe3ZhciBkPXAuYmFzZVBsb3RNb2R1bGUsbT1kLmF0dHIsZz1kLmF0dHJpYnV0ZXM7aWYobSYmZyl7dmFyIHY9bi5fc3VicGxvdHMseT0iIjtpZihofHwiZ2wyZCIhPT1kLm5hbWUpe2lmKEFycmF5LmlzQXJyYXkobSkpZm9yKGE9MDthPG0ubGVuZ3RoO2ErKyl7dmFyIHg9bVthXSxfPXUuY29lcmNlKHQsZSxnLHgpO3ZbeF0mJnUucHVzaFVuaXF1ZSh2W3hdLF8pLHkrPV99ZWxzZSB5PXUuY29lcmNlKHQsZSxnLG0pO3ZbZC5uYW1lXSYmdS5wdXNoVW5pcXVlKHZbZC5uYW1lXSx5KX19fWlmKGgpe2lmKGMoImN1c3RvbWRhdGEiKSxjKCJpZHMiKSxjKCJtZXRhIikscy50cmFjZUlzKGUsInNob3dMZWdlbmQiKSl1LmNvZXJjZSh0LGUscC5hdHRyaWJ1dGVzLnNob3dsZWdlbmQ/cC5hdHRyaWJ1dGVzOmIuYXR0cmlidXRlcywic2hvd2xlZ2VuZCIpLGMoImxlZ2VuZGdyb3VwIiksYygibGVnZW5kZ3JvdXB0aXRsZS50ZXh0IikmJnUuY29lcmNlRm9udChjLCJsZWdlbmRncm91cHRpdGxlLmZvbnQiLHUuZXh0ZW5kRmxhdCh7fSxuLmZvbnQse3NpemU6TWF0aC5yb3VuZCgxLjEqbi5mb250LnNpemUpfSkpLGMoImxlZ2VuZHJhbmsiKSxlLl9kZmx0U2hvd0xlZ2VuZD0hMDtlbHNlIGUuX2RmbHRTaG93TGVnZW5kPSExO3AmJnAuc3VwcGx5RGVmYXVsdHModCxlLGwsbikscy50cmFjZUlzKGUsIm5vT3BhY2l0eSIpfHxjKCJvcGFjaXR5Iikscy50cmFjZUlzKGUsIm5vdExlZ2VuZElzb2xhdGFibGUiKSYmKGUudmlzaWJsZT0hIWUudmlzaWJsZSkscy50cmFjZUlzKGUsIm5vSG92ZXIiKXx8KGUuaG92ZXJ0ZW1wbGF0ZXx8dS5jb2VyY2VIb3ZlcmluZm8odCxlLG4pLCJwYXJjYXRzIiE9PWUudHlwZSYmcy5nZXRDb21wb25lbnRNZXRob2QoImZ4Iiwic3VwcGx5RGVmYXVsdHMiKSh0LGUsbCxuKSkscCYmcC5zZWxlY3RQb2ludHMmJmMoInNlbGVjdGVkcG9pbnRzIiksYi5zdXBwbHlUcmFuc2Zvcm1EZWZhdWx0cyh0LGUsbil9cmV0dXJuIGV9LGIuaGFzTWFrZXNEYXRhVHJhbnNmb3JtPVMsYi5zdXBwbHlUcmFuc2Zvcm1EZWZhdWx0cz1mdW5jdGlvbih0LGUscil7aWYoZS5fbGVuZ3RofHxTKHQpKXt2YXIgbj1yLl9nbG9iYWxUcmFuc2Zvcm1zfHxbXSxpPXIuX3RyYW5zZm9ybU1vZHVsZXN8fFtdO2lmKEFycmF5LmlzQXJyYXkodC50cmFuc2Zvcm1zKXx8MCE9PW4ubGVuZ3RoKWZvcih2YXIgYT10LnRyYW5zZm9ybXN8fFtdLG89bi5jb25jYXQoYSkscz1lLnRyYW5zZm9ybXM9W10sbD0wO2w8by5sZW5ndGg7bCsrKXt2YXIgYyxmPW9bbF0saD1mLnR5cGUscD1fW2hdLGQ9IShmLl9tb2R1bGUmJmYuX21vZHVsZT09PXApLG09cCYmImZ1bmN0aW9uIj09dHlwZW9mIHAudHJhbnNmb3JtO3B8fHUud2FybigiVW5yZWNvZ25pemVkIHRyYW5zZm9ybSB0eXBlICIraCsiLiIpLHAmJnAuc3VwcGx5RGVmYXVsdHMmJihkfHxtKT8oKGM9cC5zdXBwbHlEZWZhdWx0cyhmLGUscix0KSkudHlwZT1oLGMuX21vZHVsZT1wLHUucHVzaFVuaXF1ZShpLHApKTpjPXUuZXh0ZW5kRmxhdCh7fSxmKSxzLnB1c2goYyl9fX0sYi5zdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbihyLG4pe3JldHVybiB1LmNvZXJjZSh0LGUsYi5sYXlvdXRBdHRyaWJ1dGVzLHIsbil9dmFyIGk9dC50ZW1wbGF0ZTt1LmlzUGxhaW5PYmplY3QoaSkmJihlLnRlbXBsYXRlPWksZS5fdGVtcGxhdGU9aS5sYXlvdXQsZS5fZGF0YVRlbXBsYXRlPWkuZGF0YSksbigiYXV0b3R5cGVudW1iZXJzIik7dmFyIGE9dS5jb2VyY2VGb250KG4sImZvbnQiKTtuKCJ0aXRsZS50ZXh0IixlLl9kZmx0VGl0bGUucGxvdCksdS5jb2VyY2VGb250KG4sInRpdGxlLmZvbnQiLHtmYW1pbHk6YS5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuNCphLnNpemUpLGNvbG9yOmEuY29sb3J9KSxuKCJ0aXRsZS54cmVmIiksbigidGl0bGUueXJlZiIpLG4oInRpdGxlLngiKSxuKCJ0aXRsZS55IiksbigidGl0bGUueGFuY2hvciIpLG4oInRpdGxlLnlhbmNob3IiKSxuKCJ0aXRsZS5wYWQudCIpLG4oInRpdGxlLnBhZC5yIiksbigidGl0bGUucGFkLmIiKSxuKCJ0aXRsZS5wYWQubCIpLG4oInVuaWZvcm10ZXh0Lm1vZGUiKSYmbigidW5pZm9ybXRleHQubWluc2l6ZSIpLG4oImF1dG9zaXplIiwhKHQud2lkdGgmJnQuaGVpZ2h0KSksbigid2lkdGgiKSxuKCJoZWlnaHQiKSxuKCJtYXJnaW4ubCIpLG4oIm1hcmdpbi5yIiksbigibWFyZ2luLnQiKSxuKCJtYXJnaW4uYiIpLG4oIm1hcmdpbi5wYWQiKSxuKCJtYXJnaW4uYXV0b2V4cGFuZCIpLHQud2lkdGgmJnQuaGVpZ2h0JiZiLnNhbml0aXplTWFyZ2lucyhlKSxzLmdldENvbXBvbmVudE1ldGhvZCgiZ3JpZCIsInNpemVEZWZhdWx0cyIpKHQsZSksbigicGFwZXJfYmdjb2xvciIpLG4oInNlcGFyYXRvcnMiLHIuZGVjaW1hbCtyLnRob3VzYW5kcyksbigiaGlkZXNvdXJjZXMiKSxuKCJjb2xvcndheSIpLG4oImRhdGFyZXZpc2lvbiIpO3ZhciBvPW4oInVpcmV2aXNpb24iKTtuKCJlZGl0cmV2aXNpb24iLG8pLG4oInNlbGVjdGlvbnJldmlzaW9uIixvKSxzLmdldENvbXBvbmVudE1ldGhvZCgibW9kZWJhciIsInN1cHBseUxheW91dERlZmF1bHRzIikodCxlKSxzLmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwic3VwcGx5RHJhd05ld1NoYXBlRGVmYXVsdHMiKSh0LGUsbiksbigibWV0YSIpLHUuaXNQbGFpbk9iamVjdCh0LnRyYW5zaXRpb24pJiYobigidHJhbnNpdGlvbi5kdXJhdGlvbiIpLG4oInRyYW5zaXRpb24uZWFzaW5nIiksbigidHJhbnNpdGlvbi5vcmRlcmluZyIpKSxzLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlRGVmYXVsdHMiKSh0LGUsImNhbGVuZGFyIikscy5nZXRDb21wb25lbnRNZXRob2QoImZ4Iiwic3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHMiKSh0LGUsbil9LGIucGxvdEF1dG9TaXplPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9dC5fY29udGV4dHx8e30scz1hLmZyYW1lTWFyZ2lucyxsPXUuaXNQbG90RGl2KHQpO2lmKGwmJnQuZW1pdCgicGxvdGx5X2F1dG9zaXplIiksYS5maWxsRnJhbWUpbj13aW5kb3cuaW5uZXJXaWR0aCxpPXdpbmRvdy5pbm5lckhlaWdodCxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iO2Vsc2V7dmFyIGM9bD93aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KTp7fTtpZihuPUwoYy53aWR0aCl8fEwoYy5tYXhXaWR0aCl8fHIud2lkdGgsaT1MKGMuaGVpZ2h0KXx8TChjLm1heEhlaWdodCl8fHIuaGVpZ2h0LG8ocykmJnM+MCl7dmFyIGY9MS0yKnM7bj1NYXRoLnJvdW5kKGYqbiksaT1NYXRoLnJvdW5kKGYqaSl9fXZhciBoPWIubGF5b3V0QXR0cmlidXRlcy53aWR0aC5taW4scD1iLmxheW91dEF0dHJpYnV0ZXMuaGVpZ2h0Lm1pbjtuPGgmJihuPWgpLGk8cCYmKGk9cCk7dmFyIGQ9IWUud2lkdGgmJk1hdGguYWJzKHIud2lkdGgtbik+MSxtPSFlLmhlaWdodCYmTWF0aC5hYnMoci5oZWlnaHQtaSk+MTsobXx8ZCkmJihkJiYoci53aWR0aD1uKSxtJiYoci5oZWlnaHQ9aSkpLHQuX2luaXRpYWxBdXRvU2l6ZXx8KHQuX2luaXRpYWxBdXRvU2l6ZT17d2lkdGg6bixoZWlnaHQ6aX0pLGIuc2FuaXRpemVNYXJnaW5zKHIpfSxiLnN1cHBseUxheW91dE1vZHVsZURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxsPXMuY29tcG9uZW50c1JlZ2lzdHJ5LGM9ZS5fYmFzZVBsb3RNb2R1bGVzLGY9cy5zdWJwbG90c1JlZ2lzdHJ5LmNhcnRlc2lhbjtmb3IoaSBpbiBsKShvPWxbaV0pLmluY2x1ZGVCYXNlUGxvdCYmby5pbmNsdWRlQmFzZVBsb3QodCxlKTtmb3IodmFyIGggaW4gYy5sZW5ndGh8fGMucHVzaChmKSxlLl9oYXMoImNhcnRlc2lhbiIpJiYocy5nZXRDb21wb25lbnRNZXRob2QoImdyaWQiLCJjb250ZW50RGVmYXVsdHMiKSh0LGUpLGYuZmluYWxpemVTdWJwbG90cyh0LGUpKSxlLl9zdWJwbG90cyllLl9zdWJwbG90c1toXS5zb3J0KHUuc3VicGxvdFNvcnQpO2ZvcihhPTA7YTxjLmxlbmd0aDthKyspKG89Y1thXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJm8uc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpO3ZhciBwPWUuX21vZHVsZXM7Zm9yKGE9MDthPHAubGVuZ3RoO2ErKykobz1wW2FdKS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmby5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscik7dmFyIGQ9ZS5fdHJhbnNmb3JtTW9kdWxlcztmb3IoYT0wO2E8ZC5sZW5ndGg7YSsrKShvPWRbYV0pLnN1cHBseUxheW91dERlZmF1bHRzJiZvLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyLG4pO2ZvcihpIGluIGwpKG89bFtpXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJm8uc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpfSxiLnB1cmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXR8fHt9O3ZvaWQgMCE9PWUuX2dsY29udGFpbmVyJiYoZS5fZ2xjb250YWluZXIuc2VsZWN0QWxsKCIuZ2wtY2FudmFzIikucmVtb3ZlKCksZS5fZ2xjb250YWluZXIucmVtb3ZlKCksZS5fZ2xjYW52YXM9bnVsbCksZS5fbW9kZUJhciYmZS5fbW9kZUJhci5kZXN0cm95KCksdC5fdHJhbnNpdGlvbkRhdGEmJih0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzJiYodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5sZW5ndGg9MCksdC5fdHJhbnNpdGlvbkRhdGEuX2FuaW1hdGlvblJhZiYmd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHQuX3RyYW5zaXRpb25EYXRhLl9hbmltYXRpb25SYWYpKSx1LmNsZWFyVGhyb3R0bGUoKSx1LmNsZWFyUmVzcG9uc2l2ZSh0KSxkZWxldGUgdC5kYXRhLGRlbGV0ZSB0LmxheW91dCxkZWxldGUgdC5fZnVsbERhdGEsZGVsZXRlIHQuX2Z1bGxMYXlvdXQsZGVsZXRlIHQuY2FsY2RhdGEsZGVsZXRlIHQuZW1wdHksZGVsZXRlIHQuZmlkLGRlbGV0ZSB0LnVuZG9xdWV1ZSxkZWxldGUgdC51bmRvbnVtLGRlbGV0ZSB0LmF1dG9wbGF5LGRlbGV0ZSB0LmNoYW5nZWQsZGVsZXRlIHQuX3Byb21pc2VzLGRlbGV0ZSB0Ll9yZWRyYXdUaW1lcixkZWxldGUgdC5faG1sdW1jb3VudCxkZWxldGUgdC5faG1waXhjb3VudCxkZWxldGUgdC5fdHJhbnNpdGlvbkRhdGEsZGVsZXRlIHQuX3RyYW5zaXRpb25pbmcsZGVsZXRlIHQuX2luaXRpYWxBdXRvU2l6ZSxkZWxldGUgdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbixkZWxldGUgdC5fZHJhZ2dpbmcsZGVsZXRlIHQuX2RyYWdnZWQsZGVsZXRlIHQuX2RyYWdkYXRhLGRlbGV0ZSB0Ll9ob3ZlcmRhdGEsZGVsZXRlIHQuX3NuYXBzaG90SW5Qcm9ncmVzcyxkZWxldGUgdC5fZWRpdGluZyxkZWxldGUgdC5fbW91c2VEb3duVGltZSxkZWxldGUgdC5fbGVnZW5kTW91c2VEb3duVGltZSx0LnJlbW92ZUFsbExpc3RlbmVycyYmdC5yZW1vdmVBbGxMaXN0ZW5lcnMoKX0sYi5zdHlsZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQuX2Z1bGxMYXlvdXQuX3Zpc2libGVNb2R1bGVzLG49W107Zm9yKGU9MDtlPHIubGVuZ3RoO2UrKyl7dmFyIGk9cltlXTtpLnN0eWxlJiZ1LnB1c2hVbmlxdWUobixpLnN0eWxlKX1mb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV0odCl9LGIuc2FuaXRpemVNYXJnaW5zPWZ1bmN0aW9uKHQpe2lmKHQmJnQubWFyZ2luKXt2YXIgZSxyPXQud2lkdGgsbj10LmhlaWdodCxpPXQubWFyZ2luLGE9ci0oaS5sK2kuciksbz1uLShpLnQraS5iKTthPDAmJihlPShyLTEpLyhpLmwraS5yKSxpLmw9TWF0aC5mbG9vcihlKmkubCksaS5yPU1hdGguZmxvb3IoZSppLnIpKSxvPDAmJihlPShuLTEpLyhpLnQraS5iKSxpLnQ9TWF0aC5mbG9vcihlKmkudCksaS5iPU1hdGguZmxvb3IoZSppLmIpKX19LGIuY2xlYXJBdXRvTWFyZ2luSWRzPWZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX3B1c2htYXJnaW5JZHM9e319LGIuYWxsb3dBdXRvTWFyZ2luPWZ1bmN0aW9uKHQsZSl7dC5fZnVsbExheW91dC5fcHVzaG1hcmdpbklkc1tlXT0xfTtiLmF1dG9NYXJnaW49ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQsaT1uLndpZHRoLGE9bi5oZWlnaHQsbz1uLm1hcmdpbixzPXUuY29uc3RyYWluKGktby5sLW8uciwyLDY0KSxsPXUuY29uc3RyYWluKGEtby50LW8uYiwyLDY0KSxjPU1hdGgubWF4KDAsaS1zKSxmPU1hdGgubWF4KDAsYS1sKSxoPW4uX3B1c2htYXJnaW4scD1uLl9wdXNobWFyZ2luSWRzO2lmKCExIT09by5hdXRvZXhwYW5kKXtpZihyKXt2YXIgZD1yLnBhZDtpZih2b2lkIDA9PT1kJiYoZD1NYXRoLm1pbigxMixvLmwsby5yLG8udCxvLmIpKSxjKXt2YXIgbT0oci5sK3IucikvYzttPjEmJihyLmwvPW0sci5yLz1tKX1pZihmKXt2YXIgZz0oci50K3IuYikvZjtnPjEmJihyLnQvPWcsci5iLz1nKX12YXIgdj12b2lkIDAhPT1yLnhsP3IueGw6ci54LHk9dm9pZCAwIT09ci54cj9yLnhyOnIueCx4PXZvaWQgMCE9PXIueXQ/ci55dDpyLnksXz12b2lkIDAhPT1yLnliP3IueWI6ci55O2hbZV09e2w6e3ZhbDp2LHNpemU6ci5sK2R9LHI6e3ZhbDp5LHNpemU6ci5yK2R9LGI6e3ZhbDpfLHNpemU6ci5iK2R9LHQ6e3ZhbDp4LHNpemU6ci50K2R9fSxwW2VdPTF9ZWxzZSBkZWxldGUgaFtlXSxkZWxldGUgcFtlXTtpZighbi5fcmVwbG90dGluZylyZXR1cm4gYi5kb0F1dG9NYXJnaW4odCl9fSxiLmRvQXV0b01hcmdpbj1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS53aWR0aCxuPWUuaGVpZ2h0O2UuX3NpemV8fChlLl9zaXplPXt9KSxDKGUpO3ZhciBpPWUuX3NpemUsYT1lLm1hcmdpbixsPXUuZXh0ZW5kRmxhdCh7fSxpKSxjPWEubCxmPWEucixoPWEudCxkPWEuYixtPWUuX3B1c2htYXJnaW4sZz1lLl9wdXNobWFyZ2luSWRzO2lmKCExIT09ZS5tYXJnaW4uYXV0b2V4cGFuZCl7Zm9yKHZhciB2IGluIG0pZ1t2XXx8ZGVsZXRlIG1bdl07Zm9yKHZhciB5IGluIG0uYmFzZT17bDp7dmFsOjAsc2l6ZTpjfSxyOnt2YWw6MSxzaXplOmZ9LHQ6e3ZhbDoxLHNpemU6aH0sYjp7dmFsOjAsc2l6ZTpkfX0sbSl7dmFyIHg9bVt5XS5sfHx7fSxfPW1beV0uYnx8e30sdz14LnZhbCxUPXguc2l6ZSxrPV8udmFsLEE9Xy5zaXplO2Zvcih2YXIgTSBpbiBtKXtpZihvKFQpJiZtW01dLnIpe3ZhciBTPW1bTV0uci52YWwsRT1tW01dLnIuc2l6ZTtpZihTPncpe3ZhciBMPShUKlMrKEUtcikqdykvKFMtdyksUD0oRSooMS13KSsoVC1yKSooMS1TKSkvKFMtdyk7TCtQPmMrZiYmKGM9TCxmPVApfX1pZihvKEEpJiZtW01dLnQpe3ZhciBJPW1bTV0udC52YWwsTz1tW01dLnQuc2l6ZTtpZihJPmspe3ZhciB6PShBKkkrKE8tbikqaykvKEktayksRD0oTyooMS1rKSsoQS1uKSooMS1JKSkvKEktayk7eitEPmQraCYmKGQ9eixoPUQpfX19fX12YXIgUj11LmNvbnN0cmFpbihyLWEubC1hLnIsMiw2NCksRj11LmNvbnN0cmFpbihuLWEudC1hLmIsMiw2NCksQj1NYXRoLm1heCgwLHItUiksTj1NYXRoLm1heCgwLG4tRik7aWYoQil7dmFyIGo9KGMrZikvQjtqPjEmJihjLz1qLGYvPWopfWlmKE4pe3ZhciBVPShkK2gpL047VT4xJiYoZC89VSxoLz1VKX1pZihpLmw9TWF0aC5yb3VuZChjKSxpLnI9TWF0aC5yb3VuZChmKSxpLnQ9TWF0aC5yb3VuZChoKSxpLmI9TWF0aC5yb3VuZChkKSxpLnA9TWF0aC5yb3VuZChhLnBhZCksaS53PU1hdGgucm91bmQociktaS5sLWkucixpLmg9TWF0aC5yb3VuZChuKS1pLnQtaS5iLCFlLl9yZXBsb3R0aW5nJiZiLmRpZE1hcmdpbkNoYW5nZShsLGkpKXsiX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQiaW4gZT9lLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50Kys6ZS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudD0xO3ZhciBWPTMqKDErT2JqZWN0LmtleXMoZykubGVuZ3RoKTtpZihlLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50PFYpcmV0dXJuIHMuY2FsbCgiX2RvUGxvdCIsdCk7ZS5fc2l6ZT1sLHUud2FybigiVG9vIG1hbnkgYXV0by1tYXJnaW4gcmVkcmF3cy4iKX0hZnVuY3Rpb24odCl7dmFyIGU9cC5saXN0KHQsIiIsITApO1siX2FkanVzdFRpY2tMYWJlbHNPdmVyZmxvdyIsIl9oaWRlQ291bnRlckF4aXNJbnNpZGVUaWNrTGFiZWxzIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl1bdF07biYmbigpfX0pKX0odCl9O3ZhciBQPVsibCIsInIiLCJ0IiwiYiIsInAiLCJ3IiwiaCJdO2Z1bmN0aW9uIEkodCxlLHIpe3ZhciBuPSExO3ZhciBpPVtiLnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXtpZih0Ll90cmFuc2l0aW9uRGF0YSlyZXR1cm4gdC5fdHJhbnNpdGlvbmluZz0hMSxmdW5jdGlvbih0KXt2YXIgZT1Qcm9taXNlLnJlc29sdmUoKTtpZighdClyZXR1cm4gZTtmb3IoO3QubGVuZ3RoOyllPWUudGhlbih0LnNoaWZ0KCkpO3JldHVybiBlfSh0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzKX0sci5wcmVwYXJlRm4sYi5yZWhvdmVyLGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25pbmciLFtdKSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24oaSl7dC5fdHJhbnNpdGlvbmluZz0hMCxlLmR1cmF0aW9uPjAmJih0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uPSEwKSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goKGZ1bmN0aW9uKCl7bj0hMH0pKSxyLnJlZHJhdyYmdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKChmdW5jdGlvbigpe3JldHVybiBzLmNhbGwoInJlZHJhdyIsdCl9KSksdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKChmdW5jdGlvbigpe3QuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25pbnRlcnJ1cHRlZCIsW10pfSkpO3ZhciBhPTAsbz0wO2Z1bmN0aW9uIGwoKXtyZXR1cm4gYSsrLGZ1bmN0aW9uKCl7bysrLG58fG8hPT1hfHxmdW5jdGlvbihlKXtpZighdC5fdHJhbnNpdGlvbkRhdGEpcmV0dXJuOyhmdW5jdGlvbih0KXtpZih0KWZvcig7dC5sZW5ndGg7KXQuc2hpZnQoKX0pKHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKGZ1bmN0aW9uKCl7aWYoci5yZWRyYXcpcmV0dXJuIHMuY2FsbCgicmVkcmF3Iix0KX0pKS50aGVuKChmdW5jdGlvbigpe3QuX3RyYW5zaXRpb25pbmc9ITEsdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbj0hMSx0LmVtaXQoInBsb3RseV90cmFuc2l0aW9uZWQiLFtdKX0pKS50aGVuKGUpfShpKX19ci5ydW5GbihsKSxzZXRUaW1lb3V0KGwoKSl9KSl9XSxhPXUuc3luY09yQXN5bmMoaSx0KTtyZXR1cm4gYSYmYS50aGVufHwoYT1Qcm9taXNlLnJlc29sdmUoKSksYS50aGVuKChmdW5jdGlvbigpe3JldHVybiB0fSkpfWIuZGlkTWFyZ2luQ2hhbmdlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxQLmxlbmd0aDtyKyspe3ZhciBuPVBbcl0saT10W25dLGE9ZVtuXTtpZighbyhpKXx8TWF0aC5hYnMoYS1pKT4xKXJldHVybiEwfXJldHVybiExfSxiLmdyYXBoSnNvbj1mdW5jdGlvbih0LGUscixuLGksYSl7KGkmJmUmJiF0Ll9mdWxsRGF0YXx8aSYmIWUmJiF0Ll9mdWxsTGF5b3V0KSYmYi5zdXBwbHlEZWZhdWx0cyh0KTt2YXIgbz1pP3QuX2Z1bGxEYXRhOnQuZGF0YSxzPWk/dC5fZnVsbExheW91dDp0LmxheW91dCxsPSh0Ll90cmFuc2l0aW9uRGF0YXx8e30pLl9mcmFtZXM7ZnVuY3Rpb24gYyh0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiBlPyJfZnVuY3Rpb25fIjpudWxsO2lmKHUuaXNQbGFpbk9iamVjdCh0KSl7dmFyIG4saT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuc29ydCgpLmZvckVhY2goKGZ1bmN0aW9uKGEpe2lmKC0xPT09WyJfIiwiWyJdLmluZGV4T2YoYS5jaGFyQXQoMCkpKWlmKCJmdW5jdGlvbiIhPXR5cGVvZiB0W2FdKXtpZigia2VlcGRhdGEiPT09cil7aWYoInNyYyI9PT1hLnN1YnN0cihhLmxlbmd0aC0zKSlyZXR1cm59ZWxzZSBpZigia2VlcHN0cmVhbSI9PT1yKXtpZigic3RyaW5nIj09dHlwZW9mKG49dFthKyJzcmMiXSkmJm4uaW5kZXhPZigiOiIpPjAmJiF1LmlzUGxhaW5PYmplY3QodC5zdHJlYW0pKXJldHVybn1lbHNlIGlmKCJrZWVwYWxsIiE9PXImJiJzdHJpbmciPT10eXBlb2Yobj10W2ErInNyYyJdKSYmbi5pbmRleE9mKCI6Iik+MClyZXR1cm47aVthXT1jKHRbYV0sZSl9ZWxzZSBlJiYoaVthXT0iX2Z1bmN0aW9uIil9KSksaX1yZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGModCxlKX0pKTp1LmlzVHlwZWRBcnJheSh0KT91LnNpbXBsZU1hcCh0LHUuaWRlbnRpdHkpOnUuaXNKU0RhdGUodCk/dS5tczJEYXRlVGltZUxvY2FsKCt0KTp0fXZhciBmPXtkYXRhOihvfHxbXSkubWFwKChmdW5jdGlvbih0KXt2YXIgcj1jKHQpO3JldHVybiBlJiZkZWxldGUgci5maXQscn0pKX07aWYoIWUmJihmLmxheW91dD1jKHMpLGkpKXt2YXIgaD1zLl9zaXplO2YubGF5b3V0LmNvbXB1dGVkPXttYXJnaW46e2I6aC5iLGw6aC5sLHI6aC5yLHQ6aC50fX19cmV0dXJuIGwmJihmLmZyYW1lcz1jKGwpKSxhJiYoZi5jb25maWc9Yyh0Ll9jb250ZXh0LCEwKSksIm9iamVjdCI9PT1uP2Y6SlNPTi5zdHJpbmdpZnkoZil9LGIubW9kaWZ5RnJhbWVzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxvPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylzd2l0Y2goKG49ZVtyXSkudHlwZSl7Y2FzZSJyZXBsYWNlIjppPW4udmFsdWU7dmFyIHM9KGFbbi5pbmRleF18fHt9KS5uYW1lLGw9aS5uYW1lO2Fbbi5pbmRleF09b1tsXT1pLGwhPT1zJiYoZGVsZXRlIG9bc10sb1tsXT1pKTticmVhaztjYXNlImluc2VydCI6b1soaT1uLnZhbHVlKS5uYW1lXT1pLGEuc3BsaWNlKG4uaW5kZXgsMCxpKTticmVhaztjYXNlImRlbGV0ZSI6ZGVsZXRlIG9bKGk9YVtuLmluZGV4XSkubmFtZV0sYS5zcGxpY2Uobi5pbmRleCwxKX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LGIuY29tcHV0ZUZyYW1lPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbz10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoO2lmKCFlKXRocm93IG5ldyBFcnJvcigiY29tcHV0ZUZyYW1lIG11c3QgYmUgZ2l2ZW4gYSBzdHJpbmcgZnJhbWUgbmFtZSIpO3ZhciBzPW9bZS50b1N0cmluZygpXTtpZighcylyZXR1cm4hMTtmb3IodmFyIGw9W3NdLGM9W3MubmFtZV07cy5iYXNlZnJhbWUmJihzPW9bcy5iYXNlZnJhbWUudG9TdHJpbmcoKV0pJiYtMT09PWMuaW5kZXhPZihzLm5hbWUpOylsLnB1c2gocyksYy5wdXNoKHMubmFtZSk7Zm9yKHZhciB1PXt9O3M9bC5wb3AoKTspaWYocy5sYXlvdXQmJih1LmxheW91dD1iLmV4dGVuZExheW91dCh1LmxheW91dCxzLmxheW91dCkpLHMuZGF0YSl7aWYodS5kYXRhfHwodS5kYXRhPVtdKSwhKG49cy50cmFjZXMpKWZvcihuPVtdLHI9MDtyPHMuZGF0YS5sZW5ndGg7cisrKW5bcl09cjtmb3IodS50cmFjZXN8fCh1LnRyYWNlcz1bXSkscj0wO3I8cy5kYXRhLmxlbmd0aDtyKyspbnVsbCE9KGk9bltyXSkmJigtMT09PShhPXUudHJhY2VzLmluZGV4T2YoaSkpJiYoYT11LmRhdGEubGVuZ3RoLHUudHJhY2VzW2FdPWkpLHUuZGF0YVthXT1iLmV4dGVuZFRyYWNlKHUuZGF0YVthXSxzLmRhdGFbcl0pKX1yZXR1cm4gdX0sYi5yZWNvbXB1dGVGcmFtZUhhc2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g9e30scj10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpJiZpLm5hbWUmJihlW2kubmFtZV09aSl9fSxiLmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYyxmPXUuZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LGV8fHt9KSxoPXUuZXhwYW5kT2JqZWN0UGF0aHMoZikscD17fTtpZihyJiZyLmxlbmd0aClmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKXZvaWQgMD09PShpPShuPXUubmVzdGVkUHJvcGVydHkoaCxyW2FdKSkuZ2V0KCkpP3UubmVzdGVkUHJvcGVydHkocCxyW2FdKS5zZXQobnVsbCk6KG4uc2V0KG51bGwpLHUubmVzdGVkUHJvcGVydHkocCxyW2FdKS5zZXQoaSkpO2lmKHQ9dS5leHRlbmREZWVwTm9BcnJheXModHx8e30saCksciYmci5sZW5ndGgpZm9yKGE9MDthPHIubGVuZ3RoO2ErKylpZihsPXUubmVzdGVkUHJvcGVydHkocCxyW2FdKS5nZXQoKSl7Zm9yKGM9KHM9dS5uZXN0ZWRQcm9wZXJ0eSh0LHJbYV0pKS5nZXQoKSxBcnJheS5pc0FycmF5KGMpfHwoYz1bXSxzLnNldChjKSksbz0wO288bC5sZW5ndGg7bysrKXt2YXIgZD1sW29dO2Nbb109bnVsbD09PWQ/bnVsbDpiLmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKGNbb10sZCl9cy5zZXQoYyl9cmV0dXJuIHR9LGIuZGF0YUFycmF5Q29udGFpbmVycz1bInRyYW5zZm9ybXMiLCJkaW1lbnNpb25zIl0sYi5sYXlvdXRBcnJheUNvbnRhaW5lcnM9cy5sYXlvdXRBcnJheUNvbnRhaW5lcnMsYi5leHRlbmRUcmFjZT1mdW5jdGlvbih0LGUpe3JldHVybiBiLmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKHQsZSxiLmRhdGFBcnJheUNvbnRhaW5lcnMpfSxiLmV4dGVuZExheW91dD1mdW5jdGlvbih0LGUpe3JldHVybiBiLmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKHQsZSxiLmxheW91dEFycmF5Q29udGFpbmVycyl9LGIudHJhbnNpdGlvbj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89e3JlZHJhdzppLnJlZHJhd30scz17fSxsPVtdO3JldHVybiBvLnByZXBhcmVGbj1mdW5jdGlvbigpe2Zvcih2YXIgaT1BcnJheS5pc0FycmF5KGUpP2UubGVuZ3RoOjAsYT1uLnNsaWNlKDAsaSksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgYz1hW29dLGY9dC5fZnVsbERhdGFbY10uX21vZHVsZTtpZihmKXtpZihmLmFuaW1hdGFibGUpe3ZhciBoPWYuYmFzZVBsb3RNb2R1bGUubmFtZTtzW2hdfHwoc1toXT1bXSksc1toXS5wdXNoKGMpfXQuZGF0YVthW29dXT1iLmV4dGVuZFRyYWNlKHQuZGF0YVthW29dXSxlW29dKX19dmFyIHA9dS5leHBhbmRPYmplY3RQYXRocyh1LmV4dGVuZERlZXBOb0FycmF5cyh7fSxyKSksZD0vXlt4eV1heGlzWzAtOV0qJC87Zm9yKHZhciBtIGluIHApZC50ZXN0KG0pJiZkZWxldGUgcFttXS5yYW5nZTtiLmV4dGVuZExheW91dCh0LmxheW91dCxwKSxkZWxldGUgdC5jYWxjZGF0YSxiLnN1cHBseURlZmF1bHRzKHQpLGIuZG9DYWxjZGF0YSh0KTt2YXIgZz11LmV4cGFuZE9iamVjdFBhdGhzKHIpO2lmKGcpe3ZhciB2PXQuX2Z1bGxMYXlvdXQuX3Bsb3RzO2Zvcih2YXIgeSBpbiB2KXt2YXIgeD12W3ldLF89eC54YXhpcyx3PXgueWF4aXMsVD1fLnJhbmdlLnNsaWNlKCksaz13LnJhbmdlLnNsaWNlKCksQT1udWxsLE09bnVsbCxTPW51bGwsRT1udWxsO0FycmF5LmlzQXJyYXkoZ1tfLl9uYW1lKyIucmFuZ2UiXSk/QT1nW18uX25hbWUrIi5yYW5nZSJdLnNsaWNlKCk6QXJyYXkuaXNBcnJheSgoZ1tfLl9uYW1lXXx8e30pLnJhbmdlKSYmKEE9Z1tfLl9uYW1lXS5yYW5nZS5zbGljZSgpKSxBcnJheS5pc0FycmF5KGdbdy5fbmFtZSsiLnJhbmdlIl0pP009Z1t3Ll9uYW1lKyIucmFuZ2UiXS5zbGljZSgpOkFycmF5LmlzQXJyYXkoKGdbdy5fbmFtZV18fHt9KS5yYW5nZSkmJihNPWdbdy5fbmFtZV0ucmFuZ2Uuc2xpY2UoKSksVCYmQSYmKF8ucjJsKFRbMF0pIT09Xy5yMmwoQVswXSl8fF8ucjJsKFRbMV0pIT09Xy5yMmwoQVsxXSkpJiYoUz17eHIwOlQseHIxOkF9KSxrJiZNJiYody5yMmwoa1swXSkhPT13LnIybChNWzBdKXx8dy5yMmwoa1sxXSkhPT13LnIybChNWzFdKSkmJihFPXt5cjA6ayx5cjE6TX0pLChTfHxFKSYmbC5wdXNoKHUuZXh0ZW5kRmxhdCh7cGxvdGluZm86eH0sUyxFKSl9fXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0sby5ydW5Gbj1mdW5jdGlvbihlKXt2YXIgbixpLG89dC5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLGM9bC5sZW5ndGg7aWYocilmb3IoaT0wO2k8by5sZW5ndGg7aSsrKW9baV0udHJhbnNpdGlvbkF4ZXMmJm9baV0udHJhbnNpdGlvbkF4ZXModCxsLGEsZSk7Zm9yKHZhciBmIGluIGM/KChuPXUuZXh0ZW5kRmxhdCh7fSxhKSkuZHVyYXRpb249MCxkZWxldGUgcy5jYXJ0ZXNpYW4pOm49YSxzKXt2YXIgaD1zW2ZdO3QuX2Z1bGxEYXRhW2hbMF1dLl9tb2R1bGUuYmFzZVBsb3RNb2R1bGUucGxvdCh0LGgsbixlKX19LEkodCxhLG8pfSxiLnRyYW5zaXRpb25Gcm9tUmVhY3Q9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5fZnVsbExheW91dCxhPWkudHJhbnNpdGlvbixvPXt9LHM9W107cmV0dXJuIG8ucHJlcGFyZUZuPWZ1bmN0aW9uKCl7dmFyIHQ9aS5fcGxvdHM7Zm9yKHZhciBhIGluIG8ucmVkcmF3PSExLCJzb21lIj09PWUuYW5pbSYmKG8ucmVkcmF3PSEwKSwic29tZSI9PT1yLmFuaW0mJihvLnJlZHJhdz0hMCksdCl7dmFyIGw9dFthXSxjPWwueGF4aXMsZj1sLnlheGlzLGg9bltjLl9uYW1lXS5yYW5nZS5zbGljZSgpLHA9bltmLl9uYW1lXS5yYW5nZS5zbGljZSgpLGQ9Yy5yYW5nZS5zbGljZSgpLG09Zi5yYW5nZS5zbGljZSgpO2Muc2V0U2NhbGUoKSxmLnNldFNjYWxlKCk7dmFyIGc9bnVsbCx2PW51bGw7Yy5yMmwoaFswXSk9PT1jLnIybChkWzBdKSYmYy5yMmwoaFsxXSk9PT1jLnIybChkWzFdKXx8KGc9e3hyMDpoLHhyMTpkfSksZi5yMmwocFswXSk9PT1mLnIybChtWzBdKSYmZi5yMmwocFsxXSk9PT1mLnIybChtWzFdKXx8KHY9e3lyMDpwLHlyMTptfSksKGd8fHYpJiZzLnB1c2godS5leHRlbmRGbGF0KHtwbG90aW5mbzpsfSxnLHYpKX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LG8ucnVuRm49ZnVuY3Rpb24ocil7Zm9yKHZhciBuLGksbyxsPXQuX2Z1bGxEYXRhLGM9dC5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLGY9W10saD0wO2g8bC5sZW5ndGg7aCsrKWYucHVzaChoKTtmdW5jdGlvbiBwKCl7aWYodC5fZnVsbExheW91dClmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKyljW2VdLnRyYW5zaXRpb25BeGVzJiZjW2VdLnRyYW5zaXRpb25BeGVzKHQscyxuLHIpfWZ1bmN0aW9uIGQoKXtpZih0Ll9mdWxsTGF5b3V0KWZvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKWNbZV0ucGxvdCh0LG8saSxyKX1zLmxlbmd0aCYmZS5hbmltPyJ0cmFjZXMgZmlyc3QiPT09YS5vcmRlcmluZz8obj11LmV4dGVuZEZsYXQoe30sYSx7ZHVyYXRpb246MH0pLG89ZixpPWEsc2V0VGltZW91dChwLGEuZHVyYXRpb24pLGQoKSk6KG49YSxvPW51bGwsaT11LmV4dGVuZEZsYXQoe30sYSx7ZHVyYXRpb246MH0pLHNldFRpbWVvdXQoZCxuLmR1cmF0aW9uKSxwKCkpOnMubGVuZ3RoPyhuPWEscCgpKTplLmFuaW0mJihvPWYsaT1hLGQoKSl9LEkodCxhLG8pfSxiLmRvQ2FsY2RhdGE9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvPXAubGlzdCh0KSxjPXQuX2Z1bGxEYXRhLGY9dC5fZnVsbExheW91dCxkPW5ldyBBcnJheShjLmxlbmd0aCksbT0odC5jYWxjZGF0YXx8W10pLnNsaWNlKCk7Zm9yKHQuY2FsY2RhdGE9ZCxmLl9udW1Cb3hlcz0wLGYuX251bVZpb2xpbnM9MCxmLl92aW9saW5TY2FsZUdyb3VwU3RhdHM9e30sdC5faG1waXhjb3VudD0wLHQuX2htbHVtY291bnQ9MCxmLl9waWVjb2xvcm1hcD17fSxmLl9zdW5idXJzdGNvbG9ybWFwPXt9LGYuX3RyZWVtYXBjb2xvcm1hcD17fSxmLl9pY2ljbGVjb2xvcm1hcD17fSxmLl9mdW5uZWxhcmVhY29sb3JtYXA9e30saT0wO2k8Yy5sZW5ndGg7aSsrKUFycmF5LmlzQXJyYXkoZSkmJi0xPT09ZS5pbmRleE9mKGkpJiYoZFtpXT1tW2ldKTtmb3IoaT0wO2k8Yy5sZW5ndGg7aSsrKShyPWNbaV0pLl9hcnJheUF0dHJzPWwuZmluZEFycmF5QXR0cmlidXRlcyhyKSxyLl9leHRyZW1lcz17fTt2YXIgZz1mLl9zdWJwbG90cy5wb2xhcnx8W107Zm9yKGk9MDtpPGcubGVuZ3RoO2krKylvLnB1c2goZltnW2ldXS5yYWRpYWxheGlzLGZbZ1tpXV0uYW5ndWxhcmF4aXMpO2Zvcih2YXIgdiBpbiBmLl9jb2xvckF4ZXMpe3ZhciB5PWZbdl07ITEhPT15LmNhdXRvJiYoZGVsZXRlIHkuY21pbixkZWxldGUgeS5jbWF4KX12YXIgeD0hMTtmdW5jdGlvbiBiKGUpe2lmKHI9Y1tlXSxuPXIuX21vZHVsZSwhMD09PXIudmlzaWJsZSYmci50cmFuc2Zvcm1zKXtpZihuJiZuLmNhbGMpe3ZhciBpPW4uY2FsYyh0LHIpO2lbMF0mJmlbMF0udCYmaVswXS50Ll9zY2VuZSYmZGVsZXRlIGlbMF0udC5fc2NlbmUuZGlydHl9Zm9yKGE9MDthPHIudHJhbnNmb3Jtcy5sZW5ndGg7YSsrKXt2YXIgbz1yLnRyYW5zZm9ybXNbYV07KG49X1tvLnR5cGVdKSYmbi5jYWxjVHJhbnNmb3JtJiYoci5faGFzQ2FsY1RyYW5zZm9ybT0hMCx4PSEwLG4uY2FsY1RyYW5zZm9ybSh0LHIsbykpfX19ZnVuY3Rpb24gdyhlLGkpe2lmKHI9Y1tlXSwhIShuPXIuX21vZHVsZSkuaXNDb250YWluZXI9PT1pKXt2YXIgbz1bXTtpZighMD09PXIudmlzaWJsZSYmMCE9PXIuX2xlbmd0aCl7ZGVsZXRlIHIuX2luZGV4VG9Qb2ludHM7dmFyIHM9ci50cmFuc2Zvcm1zfHxbXTtmb3IoYT1zLmxlbmd0aC0xO2E+PTA7YS0tKWlmKHNbYV0uZW5hYmxlZCl7ci5faW5kZXhUb1BvaW50cz1zW2FdLl9pbmRleFRvUG9pbnRzO2JyZWFrfW4mJm4uY2FsYyYmKG89bi5jYWxjKHQscikpfUFycmF5LmlzQXJyYXkobykmJm9bMF18fChvPVt7eDpoLHk6aH1dKSxvWzBdLnR8fChvWzBdLnQ9e30pLG9bMF0udHJhY2U9cixkW2VdPW99fWZvcih6KG8sYyxmKSxpPTA7aTxjLmxlbmd0aDtpKyspdyhpLCEwKTtmb3IoaT0wO2k8Yy5sZW5ndGg7aSsrKWIoaSk7Zm9yKHgmJnoobyxjLGYpLGk9MDtpPGMubGVuZ3RoO2krKyl3KGksITApO2ZvcihpPTA7aTxjLmxlbmd0aDtpKyspdyhpLCExKTtEKHQpO3ZhciBUPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxsPVtdO2Z1bmN0aW9uIGModCxyLG4pe3ZhciBpPXIuX2lkLmNoYXJBdCgwKTtpZigiaGlzdG9ncmFtMmRjb250b3VyIj09PXQpe3ZhciBhPXIuX2NvdW50ZXJBeGVzWzBdLG89cC5nZXRGcm9tSWQoZSxhKSxzPSJ4Ij09PWl8fCJ4Ij09PWEmJiJjYXRlZ29yeSI9PT1vLnR5cGUsbD0ieSI9PT1pfHwieSI9PT1hJiYiY2F0ZWdvcnkiPT09by50eXBlO3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiAwPT09dHx8MD09PWV8fHMmJnQ9PT1uW2VdLmxlbmd0aC0xfHxsJiZlPT09bi5sZW5ndGgtMT8tMTooInkiPT09aT9lOnQpLTF9fXJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiJ5Ij09PWk/ZTp0fX12YXIgZj17bWluOmZ1bmN0aW9uKHQpe3JldHVybiB1LmFnZ051bXMoTWF0aC5taW4sbnVsbCx0KX0sbWF4OmZ1bmN0aW9uKHQpe3JldHVybiB1LmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0KX0sc3VtOmZ1bmN0aW9uKHQpe3JldHVybiB1LmFnZ051bXMoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pLG51bGwsdCl9LHRvdGFsOmZ1bmN0aW9uKHQpe3JldHVybiB1LmFnZ051bXMoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pLG51bGwsdCl9LG1lYW46ZnVuY3Rpb24odCl7cmV0dXJuIHUubWVhbih0KX0sbWVkaWFuOmZ1bmN0aW9uKHQpe3JldHVybiB1Lm1lZGlhbih0KX19O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBoPXRbcl07aWYoImNhdGVnb3J5Ij09PWgudHlwZSl7dmFyIGQ9aC5jYXRlZ29yeW9yZGVyLm1hdGNoKE8pO2lmKGQpe3ZhciBtPWRbMV0sZz1kWzJdLHY9aC5faWQuY2hhckF0KDApLHk9IngiPT09dix4PVtdO2ZvcihuPTA7bjxoLl9jYXRlZ29yaWVzLmxlbmd0aDtuKyspeC5wdXNoKFtoLl9jYXRlZ29yaWVzW25dLFtdXSk7Zm9yKG49MDtuPGguX3RyYWNlSW5kaWNlcy5sZW5ndGg7bisrKXt2YXIgYj1oLl90cmFjZUluZGljZXNbbl0sXz1lLl9mdWxsRGF0YVtiXTtpZighMD09PV8udmlzaWJsZSl7dmFyIHc9Xy50eXBlO3MudHJhY2VJcyhfLCJoaXN0b2dyYW0iKSYmKGRlbGV0ZSBfLl94YXV0b0JpbkZpbmlzaGVkLGRlbGV0ZSBfLl95YXV0b0JpbkZpbmlzaGVkKTt2YXIgVD0ic3Bsb20iPT09dyxrPSJzY2F0dGVyZ2wiPT09dyxBPWUuY2FsY2RhdGFbYl07Zm9yKGk9MDtpPEEubGVuZ3RoO2krKyl7dmFyIE0sUyxFPUFbaV07aWYoVCl7dmFyIEw9Xy5fYXhlc0RpbVtoLl9pZF07aWYoIXkpe3ZhciBDPV8uX2RpYWdbTF1bMF07QyYmKGg9ZS5fZnVsbExheW91dFtwLmlkMm5hbWUoQyldKX12YXIgUD1FLnRyYWNlLmRpbWVuc2lvbnNbTF0udmFsdWVzO2ZvcihhPTA7YTxQLmxlbmd0aDthKyspZm9yKE09aC5fY2F0ZWdvcmllc01hcFtQW2FdXSxvPTA7bzxFLnRyYWNlLmRpbWVuc2lvbnMubGVuZ3RoO28rKylpZihvIT09TCl7dmFyIEk9RS50cmFjZS5kaW1lbnNpb25zW29dO3hbTV1bMV0ucHVzaChJLnZhbHVlc1thXSl9fWVsc2UgaWYoayl7Zm9yKGE9MDthPEUudC54Lmxlbmd0aDthKyspeT8oTT1FLnQueFthXSxTPUUudC55W2FdKTooTT1FLnQueVthXSxTPUUudC54W2FdKSx4W01dWzFdLnB1c2goUyk7RS50JiZFLnQuX3NjZW5lJiZkZWxldGUgRS50Ll9zY2VuZS5kaXJ0eX1lbHNlIGlmKEUuaGFzT3duUHJvcGVydHkoInoiKSl7Uz1FLno7dmFyIHo9YyhfLnR5cGUsaCxTKTtmb3IoYT0wO2E8Uy5sZW5ndGg7YSsrKWZvcihvPTA7bzxTW2FdLmxlbmd0aDtvKyspKE09eihvLGEpKSsxJiZ4W01dWzFdLnB1c2goU1thXVtvXSl9ZWxzZSBmb3Iodm9pZCAwPT09KE09RS5wKSYmKE09RVt2XSksdm9pZCAwPT09KFM9RS5zKSYmKFM9RS52KSx2b2lkIDA9PT1TJiYoUz15P0UueTpFLngpLEFycmF5LmlzQXJyYXkoUyl8fChTPXZvaWQgMD09PVM/W106W1NdKSxhPTA7YTxTLmxlbmd0aDthKyspeFtNXVsxXS5wdXNoKFNbYV0pfX19aC5fY2F0ZWdvcmllc1ZhbHVlPXg7dmFyIEQ9W107Zm9yKG49MDtuPHgubGVuZ3RoO24rKylELnB1c2goW3hbbl1bMF0sZlttXSh4W25dWzFdKV0pO0Quc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFsxXS1lWzFdfSkpLGguX2NhdGVnb3JpZXNBZ2dyZWdhdGVkVmFsdWU9RCxoLl9pbml0aWFsQ2F0ZWdvcmllcz1ELm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSksImRlc2NlbmRpbmciPT09ZyYmaC5faW5pdGlhbENhdGVnb3JpZXMucmV2ZXJzZSgpLGw9bC5jb25jYXQoaC5zb3J0QnlJbml0aWFsQ2F0ZWdvcmllcygpKX19fXJldHVybiBsfShvLHQpO2lmKFQubGVuZ3RoKXtmb3IoZi5fbnVtQm94ZXM9MCxmLl9udW1WaW9saW5zPTAsaT0wO2k8VC5sZW5ndGg7aSsrKXcoVFtpXSwhMCk7Zm9yKGk9MDtpPFQubGVuZ3RoO2krKyl3KFRbaV0sITEpO0QodCl9cy5nZXRDb21wb25lbnRNZXRob2QoImZ4IiwiY2FsYyIpKHQpLHMuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJjYWxjIikodCl9O3ZhciBPPS8odG90YWx8c3VtfG1pbnxtYXh8bWVhbnxtZWRpYW4pIChhc2NlbmRpbmd8ZGVzY2VuZGluZykvO2Z1bmN0aW9uIHoodCxlLHIpe3ZhciBuPXt9O2Z1bmN0aW9uIGkodCl7dC5jbGVhckNhbGMoKSwibXVsdGljYXRlZ29yeSI9PT10LnR5cGUmJnQuc2V0dXBNdWx0aUNhdGVnb3J5KGUpLG5bdC5faWRdPTF9dS5zaW1wbGVNYXAodCxpKTtmb3IodmFyIGE9ci5fYXhpc01hdGNoR3JvdXBzfHxbXSxvPTA7bzxhLmxlbmd0aDtvKyspZm9yKHZhciBzIGluIGFbb10pbltzXXx8aShyW3AuaWQybmFtZShzKV0pfWZ1bmN0aW9uIEQodCl7dmFyIGUscixuLGk9dC5fZnVsbExheW91dCxhPWkuX3Zpc2libGVNb2R1bGVzLG89e307Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl7dmFyIHM9YVtyXSxsPXMuY3Jvc3NUcmFjZUNhbGM7aWYobCl7dmFyIGM9cy5iYXNlUGxvdE1vZHVsZS5uYW1lO29bY10/dS5wdXNoVW5pcXVlKG9bY10sbCk6b1tjXT1bbF19fWZvcihuIGluIG8pe3ZhciBmPW9bbl0saD1pLl9zdWJwbG90c1tuXTtpZihBcnJheS5pc0FycmF5KGgpKWZvcihlPTA7ZTxoLmxlbmd0aDtlKyspe3ZhciBwPWhbZV0sZD0iY2FydGVzaWFuIj09PW4/aS5fcGxvdHNbcF06aVtwXTtmb3Iocj0wO3I8Zi5sZW5ndGg7cisrKWZbcl0odCxkLHApfWVsc2UgZm9yKHI9MDtyPGYubGVuZ3RoO3IrKylmW3JdKHQpfX1iLnJlaG92ZXI9ZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fcmVob3ZlciYmdC5fZnVsbExheW91dC5fcmVob3ZlcigpfSxiLnJlZHJhZz1mdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9yZWRyYWcmJnQuX2Z1bGxMYXlvdXQuX3JlZHJhZygpfSxiLmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPWUudHJhY2VIYXNoLG89e307Zm9yKGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIHM9cltpXSxsPXNbMF0udHJhY2U7bC52aXNpYmxlJiYob1tsLnR5cGVdPW9bbC50eXBlXXx8W10sb1tsLnR5cGVdLnB1c2gocykpfWZvcih2YXIgYyBpbiBhKWlmKCFvW2NdKXt2YXIgZj1hW2NdWzBdO2ZbMF0udHJhY2UudmlzaWJsZT0hMSxvW2NdPVtmXX1mb3IodmFyIGggaW4gbyl7dmFyIHA9b1toXTtwWzBdWzBdLnRyYWNlLl9tb2R1bGUucGxvdCh0LGUsdS5maWx0ZXJWaXNpYmxlKHApLG4pfWUudHJhY2VIYXNoPW99LGIucGxvdEJhc2VQbG90PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9cy5nZXRNb2R1bGUodCksbz12KGUuY2FsY2RhdGEsYSlbMF07YS5wbG90KGUsbyxuLGkpfSxiLmNsZWFuQmFzZVBsb3Q9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1pLl9oYXMmJmkuX2hhcyh0KSxvPXIuX2hhcyYmci5faGFzKHQpO2EmJiFvJiZpWyJfIit0KyJsYXllciJdLnNlbGVjdEFsbCgiZy50cmFjZSIpLnJlbW92ZSgpfX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vbGliIjo3NzYsIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo4MTUsIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vcGxvdHMvZ2V0X2RhdGEiOjg2NCwiLi4vcmVnaXN0cnkiOjkwNCwiLi9hbmltYXRpb25fYXR0cmlidXRlcyI6ODIxLCIuL2F0dHJpYnV0ZXMiOjgyMywiLi9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwiLi9jYXJ0ZXNpYW4vaGFuZGxlX291dGxpbmUiOjgzOCwiLi9jb21tYW5kIjo4NTQsIi4vZm9udF9hdHRyaWJ1dGVzIjo4NTYsIi4vZnJhbWVfYXR0cmlidXRlcyI6ODU3LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4ODEsIkBwbG90bHkvZDMiOjU4LCJkMy1mb3JtYXQiOjE2MCwiZDMtdGltZS1mb3JtYXQiOjE2OCwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDg5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHI6InN1YnBsb3QiLG5hbWU6InBvbGFyIixheGlzTmFtZXM6WyJhbmd1bGFyYXhpcyIsInJhZGlhbGF4aXMiXSxheGlzTmFtZTJkYXRhQXJyYXk6e2FuZ3VsYXJheGlzOiJ0aGV0YSIscmFkaWFsYXhpczoiciJ9LGxheWVyTmFtZXM6WyJkcmFnbGF5ZXIiLCJwbG90YmciLCJiYWNrcGxvdCIsImFuZ3VsYXItZ3JpZCIsInJhZGlhbC1ncmlkIiwiZnJvbnRwbG90IiwiYW5ndWxhci1saW5lIiwicmFkaWFsLWxpbmUiLCJhbmd1bGFyLWF4aXMiLCJyYWRpYWwtYXhpcyJdLHJhZGlhbERyYWdCb3hTaXplOjUwLGFuZ3VsYXJEcmFnQm94U2l6ZTozMCxjb3JuZXJMZW46MjUsY29ybmVySGFsZldpZHRoOjIsTUlORFJBRzo4LE1JTlpPT006MjAsT0ZGRURHRToyMH19LHt9XSw4OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9saWIvcG9seWdvbiIpLnRlc3RlcixhPW4uZmluZEluZGV4T2ZNaW4sbz1uLmlzQW5nbGVJbnNpZGVTZWN0b3Iscz1uLmFuZ2xlRGVsdGEsbD1uLmFuZ2xlRGlzdDtmdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBpLGEsbz1uWzBdLHM9blsxXSxsPWYoTWF0aC5zaW4oZSktTWF0aC5zaW4odCkpLGM9ZihNYXRoLmNvcyhlKS1NYXRoLmNvcyh0KSksdT1NYXRoLnRhbihyKSxoPWYoMS91KSxwPWwvYyxkPXMtcCpvO3JldHVybiBoP2wmJmM/YT11KihpPWQvKHUtcCkpOmM/KGk9cypoLGE9cyk6KGk9byxhPW8qdSk6bCYmYz8oaT0wLGE9ZCk6Yz8oaT0wLGE9cyk6aT1hPU5hTixbaSxhXX1mdW5jdGlvbiB1KHQsZSxyLGkpe3JldHVybiBuLmlzRnVsbENpcmNsZShbZSxyXSk/ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4rMSk7Zm9yKHI9MDtyPG47cisrKXt2YXIgYT1lW3JdO2lbcl09W3QqTWF0aC5jb3MoYSksdCpNYXRoLnNpbihhKV19cmV0dXJuIGlbcl09aVswXS5zbGljZSgpLGl9KHQsaSk6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIHMsdSxmPWkubGVuZ3RoLGg9W107ZnVuY3Rpb24gcChlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKSx0Kk1hdGguc2luKGUpXX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gYyh0LGUscixwKHQpKX1mdW5jdGlvbiBtKHQpe3JldHVybiBuLm1vZCh0LGYpfWZ1bmN0aW9uIGcodCl7cmV0dXJuIG8odCxbZSxyXSl9dmFyIHY9YShpLChmdW5jdGlvbih0KXtyZXR1cm4gZyh0KT9sKHQsZSk6MS8wfSkpLHk9ZChpW3ZdLGlbbSh2LTEpXSxlKTtmb3IoaC5wdXNoKHkpLHM9dix1PTA7dTxmO3MrKyx1Kyspe3ZhciB4PWlbbShzKV07aWYoIWcoeCkpYnJlYWs7aC5wdXNoKHAoeCkpfXZhciBiPWEoaSwoZnVuY3Rpb24odCl7cmV0dXJuIGcodCk/bCh0LHIpOjEvMH0pKSxfPWQoaVtiXSxpW20oYisxKV0scik7cmV0dXJuIGgucHVzaChfKSxoLnB1c2goWzAsMF0pLGgucHVzaChoWzBdLnNsaWNlKCkpLGh9KHQsZSxyLGkpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIE1hdGguYWJzKHQpPjFlLTEwP3Q6MH1mdW5jdGlvbiBoKHQsZSxyKXtlPWV8fDAscj1yfHwwO2Zvcih2YXIgbj10Lmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPTA7YTxuO2ErKyl7dmFyIG89dFthXTtpW2FdPVtlK29bMF0sci1vWzFdXX1yZXR1cm4gaX1lLmV4cG9ydHM9e2lzUHRJbnNpZGVQb2x5Z29uOmZ1bmN0aW9uKHQsZSxyLG4sYSl7aWYoIW8oZSxuKSlyZXR1cm4hMTt2YXIgcyxsO3JbMF08clsxXT8ocz1yWzBdLGw9clsxXSk6KHM9clsxXSxsPXJbMF0pO3ZhciBjPWkodShzLG5bMF0sblsxXSxhKSksZj1pKHUobCxuWzBdLG5bMV0sYSkpLGg9W3QqTWF0aC5jb3MoZSksdCpNYXRoLnNpbihlKV07cmV0dXJuIGYuY29udGFpbnMoaCkmJiFjLmNvbnRhaW5zKGgpfSxmaW5kUG9seWdvbk9mZnNldDpmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MS8wLGE9MS8wLG89dSh0LGUscixuKSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107aT1NYXRoLm1pbihpLGxbMF0pLGE9TWF0aC5taW4oYSwtbFsxXSl9cmV0dXJuW2ksYV19LGZpbmRFbmNsb3NpbmdWZXJ0ZXhBbmdsZXM6ZnVuY3Rpb24odCxlKXt2YXIgcj1hKGUsKGZ1bmN0aW9uKGUpe3ZhciByPXMoZSx0KTtyZXR1cm4gcj4wP3I6MS8wfSkpLGk9bi5tb2QocisxLGUubGVuZ3RoKTtyZXR1cm5bZVtyXSxlW2ldXX0sZmluZEludGVyc2VjdGlvblhZOmMsZmluZFhZYXRMZW5ndGg6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9LWUqcixhPWUqZSsxLG89MiooZSppLXIpLHM9aSppK3Iqci10KnQsbD1NYXRoLnNxcnQobypvLTQqYSpzKSxjPSgtbytsKS8oMiphKSx1PSgtby1sKS8oMiphKTtyZXR1cm5bW2MsZSpjK2krbl0sW3UsZSp1K2krbl1dfSxjbGFtcFRpbnk6ZixwYXRoUG9seWdvbjpmdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIk0iK2godSh0LGUscixuKSxpLGEpLmpvaW4oIkwiKX0scGF0aFBvbHlnb25Bbm51bHVzOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzLGw7dDxlPyhzPXQsbD1lKToocz1lLGw9dCk7dmFyIGM9aCh1KHMscixuLGkpLGEsbyk7cmV0dXJuIk0iK2godShsLHIsbixpKSxhLG8pLnJldmVyc2UoKS5qb2luKCJMIikrIk0iK2Muam9pbigiTCIpfX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9wb2x5Z29uIjo3ODh9XSw4OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90Q2FsY0RhdGEsaT10KCIuLi8uLi9saWIiKS5jb3VudGVyUmVnZXgsYT10KCIuL3BvbGFyIiksbz10KCIuL2NvbnN0YW50cyIpLHM9by5hdHRyLGw9by5uYW1lLGM9aShsKSx1PXt9O3Vbc109e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDpsLGVkaXRUeXBlOiJjYWxjIn0sZS5leHBvcnRzPXthdHRyOnMsbmFtZTpsLGlkUm9vdDpsLGlkUmVnZXg6YyxhdHRyUmVnZXg6YyxhdHRyaWJ1dGVzOnUsbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxwbG90OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxpPWUuX3N1YnBsb3RzW2xdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXSxjPW4ocixsLHMpLHU9ZVtzXS5fc3VicGxvdDt1fHwodT1hKHQscyksZVtzXS5fc3VicGxvdD11KSx1LnBsb3QoYyxlLHQuX3Byb21pc2VzKX19LGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90c1tsXXx8W10sYT1uLl9oYXMmJm4uX2hhcygiZ2wiKSxvPWUuX2hhcyYmZS5faGFzKCJnbCIpLHM9YSYmIW8sYz0wO2M8aS5sZW5ndGg7YysrKXt2YXIgdT1pW2NdLGY9blt1XS5fc3VicGxvdDtpZighZVt1XSYmZilmb3IodmFyIGggaW4gZi5mcmFtZXdvcmsucmVtb3ZlKCksZi5sYXllcnNbInJhZGlhbC1heGlzLXRpdGxlIl0ucmVtb3ZlKCksZi5jbGlwUGF0aHMpZi5jbGlwUGF0aHNbaF0ucmVtb3ZlKCk7cyYmZi5fc2NlbmUmJihmLl9zY2VuZS5kZXN0cm95KCksZi5fc2NlbmU9bnVsbCl9fSx0b1NWRzp0KCIuLi9jYXJ0ZXNpYW4iKS50b1NWR319LHsiLi4vLi4vbGliIjo3NzYsIi4uL2NhcnRlc2lhbiI6ODQxLCIuLi9nZXRfZGF0YSI6ODY0LCIuL2NvbnN0YW50cyI6ODkxLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4OTQsIi4vbGF5b3V0X2RlZmF1bHRzIjo4OTUsIi4vcG9sYXIiOjg5Nn1dLDg5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi4vZG9tYWluIikuYXR0cmlidXRlcyxvPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQscz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsbD1zKHtjb2xvcjppLmNvbG9yLHNob3dsaW5lOm8oe30saS5zaG93bGluZSx7ZGZsdDohMH0pLGxpbmVjb2xvcjppLmxpbmVjb2xvcixsaW5ld2lkdGg6aS5saW5ld2lkdGgsc2hvd2dyaWQ6byh7fSxpLnNob3dncmlkLHtkZmx0OiEwfSksZ3JpZGNvbG9yOmkuZ3JpZGNvbG9yLGdyaWR3aWR0aDppLmdyaWR3aWR0aH0sInBsb3QiLCJmcm9tLXJvb3QiKSxjPXMoe3RpY2ttb2RlOmkudGlja21vZGUsbnRpY2tzOmkubnRpY2tzLHRpY2swOmkudGljazAsZHRpY2s6aS5kdGljayx0aWNrdmFsczppLnRpY2t2YWxzLHRpY2t0ZXh0OmkudGlja3RleHQsdGlja3M6aS50aWNrcyx0aWNrbGVuOmkudGlja2xlbix0aWNrd2lkdGg6aS50aWNrd2lkdGgsdGlja2NvbG9yOmkudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmkuc2hvd3RpY2tsYWJlbHMsc2hvd3RpY2twcmVmaXg6aS5zaG93dGlja3ByZWZpeCx0aWNrcHJlZml4OmkudGlja3ByZWZpeCxzaG93dGlja3N1ZmZpeDppLnNob3d0aWNrc3VmZml4LHRpY2tzdWZmaXg6aS50aWNrc3VmZml4LHNob3dleHBvbmVudDppLnNob3dleHBvbmVudCxleHBvbmVudGZvcm1hdDppLmV4cG9uZW50Zm9ybWF0LG1pbmV4cG9uZW50OmkubWluZXhwb25lbnQsc2VwYXJhdGV0aG91c2FuZHM6aS5zZXBhcmF0ZXRob3VzYW5kcyx0aWNrZm9udDppLnRpY2tmb250LHRpY2thbmdsZTppLnRpY2thbmdsZSx0aWNrZm9ybWF0OmkudGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6aS50aWNrZm9ybWF0c3RvcHMsbGF5ZXI6aS5sYXllcn0sInBsb3QiLCJmcm9tLXJvb3QiKSx1PXt2aXNpYmxlOm8oe30saS52aXNpYmxlLHtkZmx0OiEwfSksdHlwZTpvKHt9LGkudHlwZSx7dmFsdWVzOlsiLSIsImxpbmVhciIsImxvZyIsImRhdGUiLCJjYXRlZ29yeSJdfSksYXV0b3R5cGVudW1iZXJzOmkuYXV0b3R5cGVudW1iZXJzLGF1dG9yYW5nZTpvKHt9LGkuYXV0b3JhbmdlLHtlZGl0VHlwZToicGxvdCJ9KSxyYW5nZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvemVybyIsIm5vbm5lZ2F0aXZlIiwibm9ybWFsIl0sZGZsdDoidG96ZXJvIixlZGl0VHlwZToiY2FsYyJ9LHJhbmdlOm8oe30saS5yYW5nZSx7aXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19XSxlZGl0VHlwZToicGxvdCJ9KSxjYXRlZ29yeW9yZGVyOmkuY2F0ZWdvcnlvcmRlcixjYXRlZ29yeWFycmF5OmkuY2F0ZWdvcnlhcnJheSxhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGVkaXRUeXBlOiJwbG90In0sc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvY2t3aXNlIiwiY291bnRlcmNsb2Nrd2lzZSJdLGRmbHQ6ImNsb2Nrd2lzZSIsZWRpdFR5cGU6InBsb3QifSx0aXRsZTp7dGV4dDpvKHt9LGkudGl0bGUudGV4dCx7ZWRpdFR5cGU6InBsb3QiLGRmbHQ6IiJ9KSxmb250Om8oe30saS50aXRsZS5mb250LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToicGxvdCJ9LGhvdmVyZm9ybWF0OmkuaG92ZXJmb3JtYXQsdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJjYWxjIixfZGVwcmVjYXRlZDp7dGl0bGU6aS5fZGVwcmVjYXRlZC50aXRsZSx0aXRsZWZvbnQ6aS5fZGVwcmVjYXRlZC50aXRsZWZvbnR9fTtvKHUsbCxjKTt2YXIgZj17dmlzaWJsZTpvKHt9LGkudmlzaWJsZSx7ZGZsdDohMH0pLHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIi0iLCJsaW5lYXIiLCJjYXRlZ29yeSJdLGRmbHQ6Ii0iLGVkaXRUeXBlOiJjYWxjIixfbm9UZW1wbGF0aW5nOiEwfSxhdXRvdHlwZW51bWJlcnM6aS5hdXRvdHlwZW51bWJlcnMsY2F0ZWdvcnlvcmRlcjppLmNhdGVnb3J5b3JkZXIsY2F0ZWdvcnlhcnJheTppLmNhdGVnb3J5YXJyYXksdGhldGF1bml0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyYWRpYW5zIiwiZGVncmVlcyJdLGRmbHQ6ImRlZ3JlZXMiLGVkaXRUeXBlOiJjYWxjIn0scGVyaW9kOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIixtaW46MH0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjb3VudGVyY2xvY2t3aXNlIiwiY2xvY2t3aXNlIl0sZGZsdDoiY291bnRlcmNsb2Nrd2lzZSIsZWRpdFR5cGU6ImNhbGMifSxyb3RhdGlvbjp7dmFsVHlwZToiYW5nbGUiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJmb3JtYXQ6aS5ob3ZlcmZvcm1hdCx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6ImNhbGMifTtvKGYsbCxjKSxlLmV4cG9ydHM9e2RvbWFpbjphKHtuYW1lOiJwb2xhciIsZWRpdFR5cGU6InBsb3QifSksc2VjdG9yOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToicGxvdCJ9XSxkZmx0OlswLDM2MF0sZWRpdFR5cGU6InBsb3QifSxob2xlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToicGxvdCIsZGZsdDpuLmJhY2tncm91bmR9LHJhZGlhbGF4aXM6dSxhbmd1bGFyYXhpczpmLGdyaWRzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2lyY3VsYXIiLCJsaW5lYXIiXSxkZmx0OiJjaXJjdWxhciIsZWRpdFR5cGU6InBsb3QifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6ImNhbGMifX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYzOCwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgwOSwiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDIsIi4uL2RvbWFpbiI6ODU1fV0sODk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLG89dCgiLi4vc3VicGxvdF9kZWZhdWx0cyIpLHM9dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90RGF0YSxsPXQoIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksYz10KCIuLi9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIiksdT10KCIuLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpLGY9dCgiLi4vY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIiksaD10KCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzIikscD10KCIuLi9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZSIpLGQ9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLG09dCgiLi9zZXRfY29udmVydCIpLGc9dCgiLi9jb25zdGFudHMiKSx2PWcuYXhpc05hbWVzO2Z1bmN0aW9uIHkodCxlLHIsbyl7dmFyIHA9cigiYmdjb2xvciIpO28uYmdDb2xvcj1pLmNvbWJpbmUocCxvLnBhcGVyX2JnY29sb3IpO3ZhciB5PXIoInNlY3RvciIpO3IoImhvbGUiKTt2YXIgYixfPXMoby5mdWxsRGF0YSxnLm5hbWUsby5pZCksdz1vLmxheW91dE91dDtmdW5jdGlvbiBUKHQsZSl7cmV0dXJuIHIoYisiLiIrdCxlKX1mb3IodmFyIGs9MDtrPHYubGVuZ3RoO2srKyl7Yj12W2tdLG4uaXNQbGFpbk9iamVjdCh0W2JdKXx8KHRbYl09e30pO3ZhciBBPXRbYl0sTT1hLm5ld0NvbnRhaW5lcihlLGIpO00uX2lkPU0uX25hbWU9YixNLl9hdHRyPW8uaWQrIi4iK2IsTS5fdHJhY2VJbmRpY2VzPV8ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5fZXhwYW5kZWRJbmRleH0pKTt2YXIgUz1nLmF4aXNOYW1lMmRhdGFBcnJheVtiXSxFPXgoQSxNLFQsXyxTLG8pO2YoQSxNLFQse2F4RGF0YTpfLGRhdGFBdHRyOlN9KTt2YXIgTCxDLFA9VCgidmlzaWJsZSIpO3N3aXRjaChtKE0sZSx3KSxUKCJ1aXJldmlzaW9uIixlLnVpcmV2aXNpb24pLFAmJihDPShMPVQoImNvbG9yIikpPT09QS5jb2xvcj9MOm8uZm9udC5jb2xvciksTS5fbT0xLGIpe2Nhc2UicmFkaWFsYXhpcyI6dmFyIEk9VCgiYXV0b3JhbmdlIiwhTS5pc1ZhbGlkUmFuZ2UoQS5yYW5nZSkpO0EuYXV0b3JhbmdlPUksIUl8fCJsaW5lYXIiIT09RSYmIi0iIT09RXx8VCgicmFuZ2Vtb2RlIiksInJldmVyc2VkIj09PUkmJihNLl9tPS0xKSxUKCJyYW5nZSIpLE0uY2xlYW5SYW5nZSgicmFuZ2UiLHtkZmx0UmFuZ2U6WzAsMV19KSxQJiYoVCgic2lkZSIpLFQoImFuZ2xlIix5WzBdKSxUKCJ0aXRsZS50ZXh0Iiksbi5jb2VyY2VGb250KFQsInRpdGxlLmZvbnQiLHtmYW1pbHk6by5mb250LmZhbWlseSxzaXplOm4uYmlnRm9udChvLmZvbnQuc2l6ZSksY29sb3I6Q30pKTticmVhaztjYXNlImFuZ3VsYXJheGlzIjppZigiZGF0ZSI9PT1FKXtuLmxvZygiUG9sYXIgcGxvdHMgZG8gbm90IHN1cHBvcnQgZGF0ZSBhbmd1bGFyIGF4ZXMgeWV0LiIpO2Zvcih2YXIgTz0wO088Xy5sZW5ndGg7TysrKV9bT10udmlzaWJsZT0hMTtFPUEudHlwZT1NLnR5cGU9ImxpbmVhciJ9VCgibGluZWFyIj09PUU/InRoZXRhdW5pdCI6InBlcmlvZCIpO3ZhciB6PVQoImRpcmVjdGlvbiIpO1QoInJvdGF0aW9uIix7Y291bnRlcmNsb2Nrd2lzZTowLGNsb2Nrd2lzZTo5MH1bel0pfWlmKFApbChBLE0sVCxNLnR5cGUpLHUoQSxNLFQsTS50eXBlLHt0aWNrU3VmZml4RGZsdDoiZGVncmVlcyI9PT1NLnRoZXRhdW5pdD8iXHhiMCI6dm9pZCAwfSksYyhBLE0sVCx7b3V0ZXJUaWNrczohMH0pLFQoInNob3d0aWNrbGFiZWxzIikmJihuLmNvZXJjZUZvbnQoVCwidGlja2ZvbnQiLHtmYW1pbHk6by5mb250LmZhbWlseSxzaXplOm8uZm9udC5zaXplLGNvbG9yOkN9KSxUKCJ0aWNrYW5nbGUiKSxUKCJ0aWNrZm9ybWF0IikpLGgoQSxNLFQse2RmbHRDb2xvcjpMLGJnQ29sb3I6by5iZ0NvbG9yLGJsZW5kOjYwLHNob3dMaW5lOiEwLHNob3dHcmlkOiEwLG5vWmVyb0xpbmU6ITAsYXR0cmlidXRlczpkW2JdfSksVCgibGF5ZXIiKTsiY2F0ZWdvcnkiIT09RSYmVCgiaG92ZXJmb3JtYXQiKSxNLl9pbnB1dD1BfSJjYXRlZ29yeSI9PT1lLmFuZ3VsYXJheGlzLnR5cGUmJnIoImdyaWRzaGFwZSIpfWZ1bmN0aW9uIHgodCxlLHIsbixpLGEpe3ZhciBvPXIoImF1dG90eXBlbnVtYmVycyIsYS5hdXRvdHlwZW51bWJlcnNEZmx0KTtpZigiLSI9PT1yKCJ0eXBlIikpe2Zvcih2YXIgcyxsPTA7bDxuLmxlbmd0aDtsKyspaWYobltsXS52aXNpYmxlKXtzPW5bbF07YnJlYWt9cyYmc1tpXSYmKGUudHlwZT1wKHNbaV0sImdyZWdvcmlhbiIse25vTXVsdGlDYXRlZ29yeTohMCxhdXRvdHlwZW51bWJlcnM6b30pKSwiLSI9PT1lLnR5cGU/ZS50eXBlPSJsaW5lYXIiOnQudHlwZT1lLnR5cGV9cmV0dXJuIGUudHlwZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe28odCxlLHIse3R5cGU6Zy5uYW1lLGF0dHJpYnV0ZXM6ZCxoYW5kbGVEZWZhdWx0czp5LGZvbnQ6ZS5mb250LGF1dG90eXBlbnVtYmVyc0RmbHQ6ZS5hdXRvdHlwZW51bWJlcnMscGFwZXJfYmdjb2xvcjplLnBhcGVyX2JnY29sb3IsZnVsbERhdGE6cixsYXlvdXRPdXQ6ZX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTYsIi4uL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIjo4MjgsIi4uL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyI6ODMyLCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzIjo4NDQsIi4uL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIjo4NDksIi4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiOjg1MCwiLi4vY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjg1MSwiLi4vZ2V0X2RhdGEiOjg2NCwiLi4vc3VicGxvdF9kZWZhdWx0cyI6ODk4LCIuL2NvbnN0YW50cyI6ODkxLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4OTQsIi4vc2V0X2NvbnZlcnQiOjg5N31dLDg5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vbGliIikscz1vLnN0clJvdGF0ZSxsPW8uc3RyVHJhbnNsYXRlLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksZj10KCIuLi9wbG90cyIpLGg9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxwPXQoIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGQ9dCgiLi9zZXRfY29udmVydCIpLG09dCgiLi4vY2FydGVzaWFuL2F1dG9yYW5nZSIpLmRvQXV0b1JhbmdlLGc9dCgiLi4vY2FydGVzaWFuL2RyYWdib3giKSx2PXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSx5PXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSx4PXQoIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIiksYj10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikucHJlcFNlbGVjdCxfPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLHc9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LFQ9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGs9dCgiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIiksQT10KCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyIpLnJlZHJhd1JlZ2xUcmFjZXMsTT10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTUlEX1NISUZULFM9dCgiLi9jb25zdGFudHMiKSxFPXQoIi4vaGVscGVycyIpLEw9by5fLEM9by5tb2QsUD1vLmRlZzJyYWQsST1vLnJhZDJkZWc7ZnVuY3Rpb24gTyh0LGUpe3RoaXMuaWQ9ZSx0aGlzLmdkPXQsdGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPW51bGwsdGhpcy52YW5nbGVzPW51bGwsdGhpcy5yYWRpYWxBeGlzQW5nbGU9bnVsbCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVycz17fSx0aGlzLmNsaXBQYXRocz17fSx0aGlzLmNsaXBJZHM9e30sdGhpcy52aWV3SW5pdGlhbD17fTt2YXIgcj10Ll9mdWxsTGF5b3V0LG49ImNsaXAiK3IuX3VpZCtlO3RoaXMuY2xpcElkcy5mb3JUcmFjZXM9bisiLWZvci10cmFjZXMiLHRoaXMuY2xpcFBhdGhzLmZvclRyYWNlcz1yLl9jbGlwcy5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLHRoaXMuY2xpcElkcy5mb3JUcmFjZXMpLHRoaXMuY2xpcFBhdGhzLmZvclRyYWNlcy5hcHBlbmQoInBhdGgiKSx0aGlzLmZyYW1ld29yaz1yLl9wb2xhcmxheWVyLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixlKSx0aGlzLnJhZGlhbFRpY2tMYXlvdXQ9bnVsbCx0aGlzLmFuZ3VsYXJUaWNrTGF5b3V0PW51bGx9dmFyIHo9Ty5wcm90b3R5cGU7ZnVuY3Rpb24gRCh0KXt2YXIgZT10LnRpY2tzK1N0cmluZyh0LnRpY2tsZW4pK1N0cmluZyh0LnNob3d0aWNrbGFiZWxzKTtyZXR1cm4ic2lkZSJpbiB0JiYoZSs9dC5zaWRlKSxlfWZ1bmN0aW9uIFIodCxlKXtyZXR1cm4gZVtvLmZpbmRJbmRleE9mTWluKGUsKGZ1bmN0aW9uKGUpe3JldHVybiBvLmFuZ2xlRGlzdCh0LGUpfSkpXX1mdW5jdGlvbiBGKHQsZSxyKXtyZXR1cm4gZT8odC5hdHRyKCJkaXNwbGF5IixudWxsKSx0LmF0dHIocikpOnQmJnQuYXR0cigiZGlzcGxheSIsIm5vbmUiKSx0fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgTyh0LGUpfSx6LnBsb3Q9ZnVuY3Rpb24odCxlKXt2YXIgcj1lW3RoaXMuaWRdO3RoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7aWYoITE9PT10W25dWzBdLnRyYWNlLmNsaXBvbmF4aXMpe3RoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMDticmVha319dGhpcy51cGRhdGVMYXllcnMoZSxyKSx0aGlzLnVwZGF0ZUxheW91dChlLHIpLGYuZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlKHRoaXMuZ2QsdGhpcyx0LHIpLHRoaXMudXBkYXRlRngoZSxyKX0sei51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxheWVycyxpPWUucmFkaWFsYXhpcyxhPWUuYW5ndWxhcmF4aXMsbz1TLmxheWVyTmFtZXMscz1vLmluZGV4T2YoImZyb250cGxvdCIpLGw9by5zbGljZSgwLHMpLGM9ImJlbG93IHRyYWNlcyI9PT1hLmxheWVyLHU9ImJlbG93IHRyYWNlcyI9PT1pLmxheWVyO2MmJmwucHVzaCgiYW5ndWxhci1saW5lIiksdSYmbC5wdXNoKCJyYWRpYWwtbGluZSIpLGMmJmwucHVzaCgiYW5ndWxhci1heGlzIiksdSYmbC5wdXNoKCJyYWRpYWwtYXhpcyIpLGwucHVzaCgiZnJvbnRwbG90IiksY3x8bC5wdXNoKCJhbmd1bGFyLWxpbmUiKSx1fHxsLnB1c2goInJhZGlhbC1saW5lIiksY3x8bC5wdXNoKCJhbmd1bGFyLWF4aXMiKSx1fHxsLnB1c2goInJhZGlhbC1heGlzIik7dmFyIGY9dGhpcy5mcmFtZXdvcmsuc2VsZWN0QWxsKCIucG9sYXJzdWJsYXllciIpLmRhdGEobCxTdHJpbmcpO2YuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJwb2xhcnN1YmxheWVyICIrdH0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1yW3RdPW4uc2VsZWN0KHRoaXMpO3N3aXRjaCh0KXtjYXNlImZyb250cGxvdCI6ZS5hcHBlbmQoImciKS5jbGFzc2VkKCJiYXJsYXllciIsITApLGUuYXBwZW5kKCJnIikuY2xhc3NlZCgic2NhdHRlcmxheWVyIiwhMCk7YnJlYWs7Y2FzZSJiYWNrcGxvdCI6ZS5hcHBlbmQoImciKS5jbGFzc2VkKCJtYXBsYXllciIsITApO2JyZWFrO2Nhc2UicGxvdGJnIjpyLmJnPWUuYXBwZW5kKCJwYXRoIik7YnJlYWs7Y2FzZSJyYWRpYWwtZ3JpZCI6Y2FzZSJhbmd1bGFyLWdyaWQiOmUuc3R5bGUoImZpbGwiLCJub25lIik7YnJlYWs7Y2FzZSJyYWRpYWwtbGluZSI6ZS5hcHBlbmQoImxpbmUiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKTticmVhaztjYXNlImFuZ3VsYXItbGluZSI6ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKX19KSksZi5vcmRlcigpfSx6LnVwZGF0ZUxheW91dD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGF5ZXJzLG49dC5fc2l6ZSxpPWUucmFkaWFsYXhpcyxhPWUuYW5ndWxhcmF4aXMsbz1lLmRvbWFpbi54LHM9ZS5kb21haW4ueTt0aGlzLnhPZmZzZXQ9bi5sK24udypvWzBdLHRoaXMueU9mZnNldD1uLnQrbi5oKigxLXNbMV0pO3ZhciBmPXRoaXMueExlbmd0aD1uLncqKG9bMV0tb1swXSksaD10aGlzLnlMZW5ndGg9bi5oKihzWzFdLXNbMF0pLHA9ZS5zZWN0b3I7dGhpcy5zZWN0b3JJblJhZD1wLm1hcChQKTt2YXIgZCxtLGcsdix5LHg9dGhpcy5zZWN0b3JCQm94PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dFswXSxvPXRbMV0tYSxzPUMoYSwzNjApLGw9cytvLGM9TWF0aC5jb3MoUChzKSksdT1NYXRoLnNpbihQKHMpKSxmPU1hdGguY29zKFAobCkpLGg9TWF0aC5zaW4oUChsKSk7aT1zPD05MCYmbD49OTB8fHM+OTAmJmw+PTQ1MD8xOnU8PTAmJmg8PTA/MDpNYXRoLm1heCh1LGgpO2U9czw9MTgwJiZsPj0xODB8fHM+MTgwJiZsPj01NDA/LTE6Yz49MCYmZj49MD8wOk1hdGgubWluKGMsZik7cj1zPD0yNzAmJmw+PTI3MHx8cz4yNzAmJmw+PTYzMD8tMTp1Pj0wJiZoPj0wPzA6TWF0aC5taW4odSxoKTtuPWw+PTM2MD8xOmM8PTAmJmY8PTA/MDpNYXRoLm1heChjLGYpO3JldHVybltlLHIsbixpXX0ocCksYj14WzJdLXhbMF0sXz14WzNdLXhbMV0sdz1oL2YsVD1NYXRoLmFicyhfL2IpO3c+VD8oZD1mLHk9KGgtKG09ZipUKSkvbi5oLzIsZz1bb1swXSxvWzFdXSx2PVtzWzBdK3ksc1sxXS15XSk6KG09aCx5PShmLShkPWgvVCkpL24udy8yLGc9W29bMF0reSxvWzFdLXldLHY9W3NbMF0sc1sxXV0pLHRoaXMueExlbmd0aDI9ZCx0aGlzLnlMZW5ndGgyPW0sdGhpcy54RG9tYWluMj1nLHRoaXMueURvbWFpbjI9djt2YXIgaz10aGlzLnhPZmZzZXQyPW4ubCtuLncqZ1swXSxBPXRoaXMueU9mZnNldDI9bi50K24uaCooMS12WzFdKSxNPXRoaXMucmFkaXVzPWQvYixTPXRoaXMuaW5uZXJSYWRpdXM9ZS5ob2xlKk0sRT10aGlzLmN4PWstTSp4WzBdLEw9dGhpcy5jeT1BK00qeFszXSxJPXRoaXMuY3h4PUUtayxPPXRoaXMuY3l5PUwtQTt0aGlzLnJhZGlhbEF4aXM9dGhpcy5tb2NrQXhpcyh0LGUsaSx7X2lkOiJ4IixzaWRlOntjb3VudGVyY2xvY2t3aXNlOiJ0b3AiLGNsb2Nrd2lzZToiYm90dG9tIn1baS5zaWRlXSxfcmVhbFNpZGU6aS5zaWRlLGRvbWFpbjpbUy9uLncsTS9uLnddfSksdGhpcy5hbmd1bGFyQXhpcz10aGlzLm1vY2tBeGlzKHQsZSxhLHtzaWRlOiJyaWdodCIsZG9tYWluOlswLE1hdGguUEldLGF1dG9yYW5nZTohMX0pLHRoaXMuZG9BdXRvUmFuZ2UodCxlKSx0aGlzLnVwZGF0ZUFuZ3VsYXJBeGlzKHQsZSksdGhpcy51cGRhdGVSYWRpYWxBeGlzKHQsZSksdGhpcy51cGRhdGVSYWRpYWxBeGlzVGl0bGUodCxlKSx0aGlzLnhheGlzPXRoaXMubW9ja0NhcnRlc2lhbkF4aXModCxlLHtfaWQ6IngiLGRvbWFpbjpnfSksdGhpcy55YXhpcz10aGlzLm1vY2tDYXJ0ZXNpYW5BeGlzKHQsZSx7X2lkOiJ5Iixkb21haW46dn0pO3ZhciB6PXRoaXMucGF0aFN1YnBsb3QoKTt0aGlzLmNsaXBQYXRocy5mb3JUcmFjZXMuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIseikuYXR0cigidHJhbnNmb3JtIixsKEksTykpLHIuZnJvbnRwbG90LmF0dHIoInRyYW5zZm9ybSIsbChrLEEpKS5jYWxsKHUuc2V0Q2xpcFVybCx0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U/bnVsbDp0aGlzLmNsaXBJZHMuZm9yVHJhY2VzLHRoaXMuZ2QpLHIuYmcuYXR0cigiZCIseikuYXR0cigidHJhbnNmb3JtIixsKEUsTCkpLmNhbGwoYy5maWxsLGUuYmdjb2xvcil9LHoubW9ja0F4aXM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9by5leHRlbmRGbGF0KHt9LHIsbik7cmV0dXJuIGQoaSxlLHQpLGl9LHoubW9ja0NhcnRlc2lhbkF4aXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMsaT1yLl9pZCxhPW8uZXh0ZW5kRmxhdCh7dHlwZToibGluZWFyIn0scik7cChhLHQpO3ZhciBzPXt4OlswLDJdLHk6WzEsM119O3JldHVybiBhLnNldFJhbmdlPWZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWN0b3JCQm94LHI9c1tpXSxvPW4ucmFkaWFsQXhpcy5fcmwsbD0ob1sxXS1vWzBdKS8oMS1lLmhvbGUpO2EucmFuZ2U9W3RbclswXV0qbCx0W3JbMV1dKmxdfSxhLmlzUHRXaXRoaW5SYW5nZT0ieCI9PT1pP2Z1bmN0aW9uKHQpe3JldHVybiBuLmlzUHRJbnNpZGUodCl9OmZ1bmN0aW9uKCl7cmV0dXJuITB9LGEuc2V0UmFuZ2UoKSxhLnNldFNjYWxlKCksYX0sei5kb0F1dG9SYW5nZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2Qsbj10aGlzLnJhZGlhbEF4aXMsaT1lLnJhZGlhbGF4aXM7bi5zZXRTY2FsZSgpLG0ocixuKTt2YXIgYT1uLnJhbmdlO2kucmFuZ2U9YS5zbGljZSgpLGkuX2lucHV0LnJhbmdlPWEuc2xpY2UoKSxuLl9ybD1bbi5yMmwoYVswXSxudWxsLCJncmVnb3JpYW4iKSxuLnIybChhWzFdLG51bGwsImdyZWdvcmlhbiIpXX0sei51cGRhdGVSYWRpYWxBeGlzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2QsaT1yLmxheWVycyxhPXIucmFkaXVzLHU9ci5pbm5lclJhZGl1cyxmPXIuY3gscD1yLmN5LGQ9ZS5yYWRpYWxheGlzLG09QyhlLnNlY3RvclswXSwzNjApLGc9ci5yYWRpYWxBeGlzLHY9dTxhO3IuZmlsbFZpZXdJbml0aWFsS2V5KCJyYWRpYWxheGlzLmFuZ2xlIixkLmFuZ2xlKSxyLmZpbGxWaWV3SW5pdGlhbEtleSgicmFkaWFsYXhpcy5yYW5nZSIsZy5yYW5nZS5zbGljZSgpKSxnLnNldEdlb21ldHJ5KCksImF1dG8iPT09Zy50aWNrYW5nbGUmJm0+OTAmJm08PTI3MCYmKGcudGlja2FuZ2xlPTE4MCk7dmFyIHk9ZnVuY3Rpb24odCl7cmV0dXJuIGwoZy5sMnAodC54KSt1LDApfSx4PUQoZCk7aWYoci5yYWRpYWxUaWNrTGF5b3V0IT09eCYmKGlbInJhZGlhbC1heGlzIl0uc2VsZWN0QWxsKCIueHRpY2siKS5yZW1vdmUoKSxyLnJhZGlhbFRpY2tMYXlvdXQ9eCksdil7Zy5zZXRTY2FsZSgpO3ZhciBiPWguY2FsY1RpY2tzKGcpLF89aC5jbGlwRW5kcyhnLGIpLHc9aC5nZXRUaWNrU2lnbnMoZylbMl07aC5kcmF3VGlja3MobixnLHt2YWxzOmIsbGF5ZXI6aVsicmFkaWFsLWF4aXMiXSxwYXRoOmgubWFrZVRpY2tQYXRoKGcsMCx3KSx0cmFuc0ZuOnksY3Jpc3A6ITF9KSxoLmRyYXdHcmlkKG4sZyx7dmFsczpfLGxheWVyOmlbInJhZGlhbC1ncmlkIl0scGF0aDpmdW5jdGlvbih0KXtyZXR1cm4gci5wYXRoQXJjKGcucjJwKHQueCkrdSl9LHRyYW5zRm46by5ub29wLGNyaXNwOiExfSksaC5kcmF3TGFiZWxzKG4sZyx7dmFsczpiLGxheWVyOmlbInJhZGlhbC1heGlzIl0sdHJhbnNGbjp5LGxhYmVsRm5zOmgubWFrZUxhYmVsRm5zKGcsMCl9KX12YXIgVD1yLnJhZGlhbEF4aXNBbmdsZT1yLnZhbmdsZXM/SShSKFAoZC5hbmdsZSksci52YW5nbGVzKSk6ZC5hbmdsZSxrPWwoZixwKSxBPWsrcygtVCk7RihpWyJyYWRpYWwtYXhpcyJdLHYmJihkLnNob3d0aWNrbGFiZWxzfHxkLnRpY2tzKSx7dHJhbnNmb3JtOkF9KSxGKGlbInJhZGlhbC1ncmlkIl0sdiYmZC5zaG93Z3JpZCx7dHJhbnNmb3JtOmt9KSxGKGlbInJhZGlhbC1saW5lIl0uc2VsZWN0KCJsaW5lIiksdiYmZC5zaG93bGluZSx7eDE6dSx5MTowLHgyOmEseTI6MCx0cmFuc2Zvcm06QX0pLmF0dHIoInN0cm9rZS13aWR0aCIsZC5saW5ld2lkdGgpLmNhbGwoYy5zdHJva2UsZC5saW5lY29sb3IpfSx6LnVwZGF0ZVJhZGlhbEF4aXNUaXRsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5nZCxpPXRoaXMucmFkaXVzLGE9dGhpcy5jeCxvPXRoaXMuY3kscz1lLnJhZGlhbGF4aXMsbD10aGlzLmlkKyJ0aXRsZSIsYz12b2lkIDAhPT1yP3I6dGhpcy5yYWRpYWxBeGlzQW5nbGUsZj1QKGMpLGg9TWF0aC5jb3MoZikscD1NYXRoLnNpbihmKSxkPTA7aWYocy50aXRsZSl7dmFyIG09dS5iQm94KHRoaXMubGF5ZXJzWyJyYWRpYWwtYXhpcyJdLm5vZGUoKSkuaGVpZ2h0LGc9cy50aXRsZS5mb250LnNpemU7ZD0iY291bnRlcmNsb2Nrd2lzZSI9PT1zLnNpZGU/LW0tLjQqZzptKy44Kmd9dGhpcy5sYXllcnNbInJhZGlhbC1heGlzLXRpdGxlIl09eC5kcmF3KG4sbCx7cHJvcENvbnRhaW5lcjpzLHByb3BOYW1lOnRoaXMuaWQrIi5yYWRpYWxheGlzLnRpdGxlIixwbGFjZWhvbGRlcjpMKG4sIkNsaWNrIHRvIGVudGVyIHJhZGlhbCBheGlzIHRpdGxlIiksYXR0cmlidXRlczp7eDphK2kvMipoK2QqcCx5Om8taS8yKnArZCpoLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9LHRyYW5zZm9ybTp7cm90YXRlOi1jfX0pfSx6LnVwZGF0ZUFuZ3VsYXJBeGlzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2QsaT1yLmxheWVycyxhPXIucmFkaXVzLHU9ci5pbm5lclJhZGl1cyxmPXIuY3gscD1yLmN5LGQ9ZS5hbmd1bGFyYXhpcyxtPXIuYW5ndWxhckF4aXM7ci5maWxsVmlld0luaXRpYWxLZXkoImFuZ3VsYXJheGlzLnJvdGF0aW9uIixkLnJvdGF0aW9uKSxtLnNldEdlb21ldHJ5KCksbS5zZXRTY2FsZSgpO3ZhciBnPWZ1bmN0aW9uKHQpe3JldHVybiBtLnQyZyh0LngpfTsibGluZWFyIj09PW0udHlwZSYmInJhZGlhbnMiPT09bS50aGV0YXVuaXQmJihtLnRpY2swPUkobS50aWNrMCksbS5kdGljaz1JKG0uZHRpY2spKTt2YXIgdj1mdW5jdGlvbih0KXtyZXR1cm4gbChmK2EqTWF0aC5jb3ModCkscC1hKk1hdGguc2luKHQpKX0seT1oLm1ha2VMYWJlbEZucyhtLDApLmxhYmVsU3RhbmRvZmYseD17eEZuOmZ1bmN0aW9uKHQpe3ZhciBlPWcodCk7cmV0dXJuIE1hdGguY29zKGUpKnl9LHlGbjpmdW5jdGlvbih0KXt2YXIgZT1nKHQpLHI9TWF0aC5zaW4oZSk+MD8uMjoxO3JldHVybi1NYXRoLnNpbihlKSooeSt0LmZvbnRTaXplKnIpK01hdGguYWJzKE1hdGguY29zKGUpKSoodC5mb250U2l6ZSpNKX0sYW5jaG9yRm46ZnVuY3Rpb24odCl7dmFyIGU9Zyh0KSxyPU1hdGguY29zKGUpO3JldHVybiBNYXRoLmFicyhyKTwuMT8ibWlkZGxlIjpyPjA/InN0YXJ0IjoiZW5kIn0saGVpZ2h0Rm46ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWcodCk7cmV0dXJuLS41KigxK01hdGguc2luKG4pKSpyfX0sYj1EKGQpO3IuYW5ndWxhclRpY2tMYXlvdXQhPT1iJiYoaVsiYW5ndWxhci1heGlzIl0uc2VsZWN0QWxsKCIuIittLl9pZCsidGljayIpLnJlbW92ZSgpLHIuYW5ndWxhclRpY2tMYXlvdXQ9Yik7dmFyIF8sdz1oLmNhbGNUaWNrcyhtKTtpZigibGluZWFyIj09PWUuZ3JpZHNoYXBlPyhfPXcubWFwKGcpLG8uYW5nbGVEZWx0YShfWzBdLF9bMV0pPDAmJihfPV8uc2xpY2UoKS5yZXZlcnNlKCkpKTpfPW51bGwsci52YW5nbGVzPV8sImNhdGVnb3J5Ij09PW0udHlwZSYmKHc9dy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBvLmlzQW5nbGVJbnNpZGVTZWN0b3IoZyh0KSxyLnNlY3RvckluUmFkKX0pKSksbS52aXNpYmxlKXt2YXIgVD0iaW5zaWRlIj09PW0udGlja3M/LTE6MSxrPShtLmxpbmV3aWR0aHx8MSkvMjtoLmRyYXdUaWNrcyhuLG0se3ZhbHM6dyxsYXllcjppWyJhbmd1bGFyLWF4aXMiXSxwYXRoOiJNIitUKmsrIiwwaCIrVCptLnRpY2tsZW4sdHJhbnNGbjpmdW5jdGlvbih0KXt2YXIgZT1nKHQpO3JldHVybiB2KGUpK3MoLUkoZSkpfSxjcmlzcDohMX0pLGguZHJhd0dyaWQobixtLHt2YWxzOncsbGF5ZXI6aVsiYW5ndWxhci1ncmlkIl0scGF0aDpmdW5jdGlvbih0KXt2YXIgZT1nKHQpLHI9TWF0aC5jb3MoZSksbj1NYXRoLnNpbihlKTtyZXR1cm4iTSIrW2YrdSpyLHAtdSpuXSsiTCIrW2YrYSpyLHAtYSpuXX0sdHJhbnNGbjpvLm5vb3AsY3Jpc3A6ITF9KSxoLmRyYXdMYWJlbHMobixtLHt2YWxzOncsbGF5ZXI6aVsiYW5ndWxhci1heGlzIl0scmVwb3NpdGlvbk9uVXBkYXRlOiEwLHRyYW5zRm46ZnVuY3Rpb24odCl7cmV0dXJuIHYoZyh0KSl9LGxhYmVsRm5zOnh9KX1GKGlbImFuZ3VsYXItbGluZSJdLnNlbGVjdCgicGF0aCIpLGQuc2hvd2xpbmUse2Q6ci5wYXRoU3VicGxvdCgpLHRyYW5zZm9ybTpsKGYscCl9KS5hdHRyKCJzdHJva2Utd2lkdGgiLGQubGluZXdpZHRoKS5jYWxsKGMuc3Ryb2tlLGQubGluZWNvbG9yKX0sei51cGRhdGVGeD1mdW5jdGlvbih0LGUpe3RoaXMuZ2QuX2NvbnRleHQuc3RhdGljUGxvdHx8KHRoaXMudXBkYXRlQW5ndWxhckRyYWcodCksdGhpcy51cGRhdGVSYWRpYWxEcmFnKHQsZSwwKSx0aGlzLnVwZGF0ZVJhZGlhbERyYWcodCxlLDEpLHRoaXMudXBkYXRlTWFpbkRyYWcodCkpfSx6LnVwZGF0ZU1haW5EcmFnPWZ1bmN0aW9uKHQpe3ZhciBlLHIscz10aGlzLGM9cy5nZCx1PXMubGF5ZXJzLGY9dC5fem9vbWxheWVyLGg9Uy5NSU5aT09NLHA9Uy5PRkZFREdFLGQ9cy5yYWRpdXMsbT1zLmlubmVyUmFkaXVzLHg9cy5jeCxUPXMuY3ksaz1zLmN4eCxBPXMuY3l5LE09cy5zZWN0b3JJblJhZCxMPXMudmFuZ2xlcyxDPXMucmFkaWFsQXhpcyxQPUUuY2xhbXBUaW55LEk9RS5maW5kWFlhdExlbmd0aCxPPUUuZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlcyx6PVMuY29ybmVySGFsZldpZHRoLEQ9Uy5jb3JuZXJMZW4vMixSPWcubWFrZURyYWdnZXIodSwicGF0aCIsIm1haW5kcmFnIiwiY3Jvc3NoYWlyIik7bi5zZWxlY3QoUikuYXR0cigiZCIscy5wYXRoU3VicGxvdCgpKS5hdHRyKCJ0cmFuc2Zvcm0iLGwoeCxUKSk7dmFyIEYsQixOLGosVSxWLEgscSxHLFk9e2VsZW1lbnQ6UixnZDpjLHN1YnBsb3Q6cy5pZCxwbG90aW5mbzp7aWQ6cy5pZCx4YXhpczpzLnhheGlzLHlheGlzOnMueWF4aXN9LHhheGVzOltzLnhheGlzXSx5YXhlczpbcy55YXhpc119O2Z1bmN0aW9uIFcodCxlKXtyZXR1cm4gTWF0aC5zcXJ0KHQqdCtlKmUpfWZ1bmN0aW9uIFgodCxlKXtyZXR1cm4gVyh0LWssZS1BKX1mdW5jdGlvbiBaKHQsZSl7cmV0dXJuIE1hdGguYXRhbjIoQS1lLHQtayl9ZnVuY3Rpb24gSih0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpLHQqTWF0aC5zaW4oLWUpXX1mdW5jdGlvbiBLKHQsZSl7aWYoMD09PXQpcmV0dXJuIHMucGF0aFNlY3RvcigyKnopO3ZhciByPUQvdCxuPWUtcixpPWUrcixhPU1hdGgubWF4KDAsTWF0aC5taW4odCxkKSksbz1hLXosbD1hK3o7cmV0dXJuIk0iK0oobyxuKSsiQSIrW28sb10rIiAwLDAsMCAiK0oobyxpKSsiTCIrSihsLGkpKyJBIitbbCxsXSsiIDAsMCwxICIrSihsLG4pKyJaIn1mdW5jdGlvbiBRKHQsZSxyKXtpZigwPT09dClyZXR1cm4gcy5wYXRoU2VjdG9yKDIqeik7dmFyIG4saSxhPUoodCxlKSxvPUoodCxyKSxsPVAoKGFbMF0rb1swXSkvMiksYz1QKChhWzFdK29bMV0pLzIpO2lmKGwmJmMpe3ZhciB1PWMvbCxmPS0xL3UsaD1JKHosdSxsLGMpO249SShELGYsaFswXVswXSxoWzBdWzFdKSxpPUkoRCxmLGhbMV1bMF0saFsxXVsxXSl9ZWxzZXt2YXIgcCxkO2M/KHA9RCxkPXopOihwPXosZD1EKSxuPVtbbC1wLGMtZF0sW2wrcCxjLWRdXSxpPVtbbC1wLGMrZF0sW2wrcCxjK2RdXX1yZXR1cm4iTSIrbi5qb2luKCJMIikrIkwiK2kucmV2ZXJzZSgpLmpvaW4oIkwiKSsiWiJ9ZnVuY3Rpb24gJCh0LGUpe3JldHVybiBlPU1hdGgubWF4KE1hdGgubWluKGUsZCksbSksdDxwP3Q9MDpkLXQ8cD90PWQ6ZTxwP2U9MDpkLWU8cCYmKGU9ZCksTWF0aC5hYnMoZS10KT5oPyh0PGU/KE49dCxqPWUpOihOPWUsaj10KSwhMCk6KE49bnVsbCxqPW51bGwsITEpfWZ1bmN0aW9uIHR0KHQsZSl7dD10fHxVLGU9ZXx8Ik0wLDBaIixxLmF0dHIoImQiLHQpLEcuYXR0cigiZCIsZSksZy50cmFuc2l0aW9uWm9vbWJveChxLEcsVixIKSxWPSEwO3ZhciByPXt9O2F0KHIpLGMuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixyKX1mdW5jdGlvbiBldCh0LG4pe3ZhciBpLGEsbz1GKyh0Kj1lKSxsPUIrKG4qPXIpLGM9WChGLEIpLHU9TWF0aC5taW4oWChvLGwpLGQpLGY9WihGLEIpOyQoYyx1KSYmKGk9VStzLnBhdGhTZWN0b3IoaiksTiYmKGkrPXMucGF0aFNlY3RvcihOKSksYT1LKE4sZikrSyhqLGYpKSx0dChpLGEpfWZ1bmN0aW9uIHJ0KHQsZSxyLG4pe3ZhciBpPUUuZmluZEludGVyc2VjdGlvblhZKHIsbixyLFt0LWssQS1lXSk7cmV0dXJuIFcoaVswXSxpWzFdKX1mdW5jdGlvbiBudCh0LGUpe3ZhciByLG4saT1GK3QsYT1CK2Usbz1aKEYsQiksbD1aKGksYSksYz1PKG8sTCksdT1PKGwsTCk7JChydChGLEIsY1swXSxjWzFdKSxNYXRoLm1pbihydChpLGEsdVswXSx1WzFdKSxkKSkmJihyPVUrcy5wYXRoU2VjdG9yKGopLE4mJihyKz1zLnBhdGhTZWN0b3IoTikpLG49W1EoTixjWzBdLGNbMV0pLFEoaixjWzBdLGNbMV0pXS5qb2luKCIgIikpLHR0KHIsbil9ZnVuY3Rpb24gaXQoKXtpZihnLnJlbW92ZVpvb21ib3goYyksbnVsbCE9PU4mJm51bGwhPT1qKXt2YXIgdD17fTthdCh0KSxnLnNob3dEb3VibGVDbGlja05vdGlmaWVyKGMpLGEuY2FsbCgiX2d1aVJlbGF5b3V0IixjLHQpfX1mdW5jdGlvbiBhdCh0KXt2YXIgZT1DLl9ybCxyPShlWzFdLWVbMF0pLygxLW0vZCkvZCxuPVtlWzBdKyhOLW0pKnIsZVswXSsoai1tKSpyXTt0W3MuaWQrIi5yYWRpYWxheGlzLnJhbmdlIl09bn1mdW5jdGlvbiBvdCh0LGUpe3ZhciByPWMuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlO2lmKGcucmVtb3ZlWm9vbWJveChjKSwyPT09dCl7dmFyIG49e307Zm9yKHZhciBpIGluIHMudmlld0luaXRpYWwpbltzLmlkKyIuIitpXT1zLnZpZXdJbml0aWFsW2ldO2MuZW1pdCgicGxvdGx5X2RvdWJsZWNsaWNrIixudWxsKSxhLmNhbGwoIl9ndWlSZWxheW91dCIsYyxuKX1yLmluZGV4T2YoInNlbGVjdCIpPi0xJiYxPT09dCYmXyhlLGMsW3MueGF4aXNdLFtzLnlheGlzXSxzLmlkLFkpLHIuaW5kZXhPZigiZXZlbnQiKT4tMSYmeS5jbGljayhjLGUscy5pZCl9WS5wcmVwRm49ZnVuY3Rpb24odCxuLGEpe3ZhciBsPWMuX2Z1bGxMYXlvdXQuZHJhZ21vZGUsdT1SLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2MuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKGMpO3ZhciBoPWMuX2Z1bGxMYXlvdXQuX2ludlRyYW5zZm9ybTtlPWMuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWCxyPWMuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWTt2YXIgcD1vLmFwcGx5M0RUcmFuc2Zvcm0oaCkobi11LmxlZnQsYS11LnRvcCk7aWYoRj1wWzBdLEI9cFsxXSxMKXt2YXIgbT1FLmZpbmRQb2x5Z29uT2Zmc2V0KGQsTVswXSxNWzFdLEwpO0YrPWsrbVswXSxCKz1BK21bMV19c3dpdGNoKGwpe2Nhc2Uiem9vbSI6WS5tb3ZlRm49TD9udDpldCxZLmNsaWNrRm49b3QsWS5kb25lRm49aXQsZnVuY3Rpb24oKXtOPW51bGwsaj1udWxsLFU9cy5wYXRoU3VicGxvdCgpLFY9ITE7dmFyIHQ9Yy5fZnVsbExheW91dFtzLmlkXTtIPWkodC5iZ2NvbG9yKS5nZXRMdW1pbmFuY2UoKSwocT1nLm1ha2Vab29tYm94KGYsSCx4LFQsVSkpLmF0dHIoImZpbGwtcnVsZSIsImV2ZW5vZGQiKSxHPWcubWFrZUNvcm5lcnMoZix4LFQpLHcoYyl9KCk7YnJlYWs7Y2FzZSJzZWxlY3QiOmNhc2UibGFzc28iOmIodCxuLGEsWSxsKX19LFIub25tb3VzZW1vdmU9ZnVuY3Rpb24odCl7eS5ob3ZlcihjLHQscy5pZCksYy5fZnVsbExheW91dC5fbGFzdGhvdmVyPVIsYy5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PXMuaWR9LFIub25tb3VzZW91dD1mdW5jdGlvbih0KXtjLl9kcmFnZ2luZ3x8di51bmhvdmVyKGMsdCl9LHYuaW5pdChZKX0sei51cGRhdGVSYWRpYWxEcmFnPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLGM9aS5nZCx1PWkubGF5ZXJzLGY9aS5yYWRpdXMsaD1pLmlubmVyUmFkaXVzLHA9aS5jeCxkPWkuY3ksbT1pLnJhZGlhbEF4aXMseT1TLnJhZGlhbERyYWdCb3hTaXplLHg9eS8yO2lmKG0udmlzaWJsZSl7dmFyIGIsXyxULE09UChpLnJhZGlhbEF4aXNBbmdsZSksRT1tLl9ybCxMPUVbMF0sQz1FWzFdLE89RVtyXSx6PS43NSooRVsxXS1FWzBdKS8oMS1lLmhvbGUpL2Y7cj8oYj1wKyhmK3gpKk1hdGguY29zKE0pLF89ZC0oZit4KSpNYXRoLnNpbihNKSxUPSJyYWRpYWxkcmFnIik6KGI9cCsoaC14KSpNYXRoLmNvcyhNKSxfPWQtKGgteCkqTWF0aC5zaW4oTSksVD0icmFkaWFsZHJhZy1pbm5lciIpO3ZhciBELEIsTixqPWcubWFrZVJlY3REcmFnZ2VyKHUsVCwiY3Jvc3NoYWlyIiwteCwteCx5LHkpLFU9e2VsZW1lbnQ6aixnZDpjfTtGKG4uc2VsZWN0KGopLG0udmlzaWJsZSYmaDxmLHt0cmFuc2Zvcm06bChiLF8pfSksVS5wcmVwRm49ZnVuY3Rpb24oKXtEPW51bGwsQj1udWxsLE49bnVsbCxVLm1vdmVGbj1WLFUuZG9uZUZuPUgsdyhjKX0sVS5jbGFtcEZuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguc3FydCh0KnQrZSplKTxTLk1JTkRSQUcmJih0PTAsZT0wKSxbdCxlXX0sdi5pbml0KFUpfWZ1bmN0aW9uIFYodCxlKXtpZihEKUQodCxlKTtlbHNle3ZhciBuPVt0LC1lXSxhPVtNYXRoLmNvcyhNKSxNYXRoLnNpbihNKV0scz1NYXRoLmFicyhvLmRvdChuLGEpL01hdGguc3FydChvLmRvdChuLG4pKSk7aXNOYU4ocyl8fChEPXM8LjU/cTpHKX12YXIgbD17fTshZnVuY3Rpb24odCl7bnVsbCE9PUI/dFtpLmlkKyIucmFkaWFsYXhpcy5hbmdsZSJdPUI6bnVsbCE9PU4mJih0W2kuaWQrIi5yYWRpYWxheGlzLnJhbmdlWyIrcisiXSJdPU4pfShsKSxjLmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsbCl9ZnVuY3Rpb24gSCgpe251bGwhPT1CP2EuY2FsbCgiX2d1aVJlbGF5b3V0IixjLGkuaWQrIi5yYWRpYWxheGlzLmFuZ2xlIixCKTpudWxsIT09TiYmYS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGMsaS5pZCsiLnJhZGlhbGF4aXMucmFuZ2VbIityKyJdIixOKX1mdW5jdGlvbiBxKHQsZSl7aWYoMCE9PXIpe3ZhciBuPWIrdCxhPV8rZTtCPU1hdGguYXRhbjIoZC1hLG4tcCksaS52YW5nbGVzJiYoQj1SKEIsaS52YW5nbGVzKSksQj1JKEIpO3ZhciBvPWwocCxkKStzKC1CKTt1WyJyYWRpYWwtYXhpcyJdLmF0dHIoInRyYW5zZm9ybSIsbyksdVsicmFkaWFsLWxpbmUiXS5zZWxlY3QoImxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLG8pO3ZhciBjPWkuZ2QuX2Z1bGxMYXlvdXQsZj1jW2kuaWRdO2kudXBkYXRlUmFkaWFsQXhpc1RpdGxlKGMsZixCKX19ZnVuY3Rpb24gRyh0LGUpe3ZhciBuPW8uZG90KFt0LC1lXSxbTWF0aC5jb3MoTSksTWF0aC5zaW4oTSldKTtpZihOPU8teipuLHo+MD09KHI/Tj5MOk48Qykpe3ZhciBzPWMuX2Z1bGxMYXlvdXQsbD1zW2kuaWRdO20ucmFuZ2Vbcl09TixtLl9ybFtyXT1OLGkudXBkYXRlUmFkaWFsQXhpcyhzLGwpLGkueGF4aXMuc2V0UmFuZ2UoKSxpLnhheGlzLnNldFNjYWxlKCksaS55YXhpcy5zZXRSYW5nZSgpLGkueWF4aXMuc2V0U2NhbGUoKTt2YXIgdT0hMTtmb3IodmFyIGYgaW4gaS50cmFjZUhhc2gpe3ZhciBoPWkudHJhY2VIYXNoW2ZdLHA9by5maWx0ZXJWaXNpYmxlKGgpO2hbMF1bMF0udHJhY2UuX21vZHVsZS5wbG90KGMsaSxwLGwpLGEudHJhY2VJcyhmLCJnbCIpJiZwLmxlbmd0aCYmKHU9ITApfXUmJihrKGMpLEEoYykpfWVsc2UgTj1udWxsfX0sei51cGRhdGVBbmd1bGFyRHJhZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5nZCxpPWUubGF5ZXJzLGM9ZS5yYWRpdXMsZj1lLmFuZ3VsYXJBeGlzLGg9ZS5jeCxwPWUuY3ksZD1lLmN4eCxtPWUuY3l5LHk9Uy5hbmd1bGFyRHJhZ0JveFNpemUseD1nLm1ha2VEcmFnZ2VyKGksInBhdGgiLCJhbmd1bGFyZHJhZyIsIm1vdmUiKSxiPXtlbGVtZW50OngsZ2Q6cn07ZnVuY3Rpb24gXyh0LGUpe3JldHVybiBNYXRoLmF0YW4yKG0reS1lLHQtZC15KX1uLnNlbGVjdCh4KS5hdHRyKCJkIixlLnBhdGhBbm51bHVzKGMsYyt5KSkuYXR0cigidHJhbnNmb3JtIixsKGgscCkpLmNhbGwoVCwibW92ZSIpO3ZhciBNLEUsTCxDLFAsTyx6PWkuZnJvbnRwbG90LnNlbGVjdCgiLnNjYXR0ZXJsYXllciIpLnNlbGVjdEFsbCgiLnRyYWNlIiksRD16LnNlbGVjdEFsbCgiLnBvaW50IiksUj16LnNlbGVjdEFsbCgiLnRleHRwb2ludCIpO2Z1bmN0aW9uIEYoYyxnKXt2YXIgdj1lLmdkLl9mdWxsTGF5b3V0LHk9dltlLmlkXSx4PV8oTStjKnQuX2ludlNjYWxlWCxFK2cqdC5faW52U2NhbGVZKSxiPUkoeC1PKTtpZihDPUwrYixpLmZyb250cGxvdC5hdHRyKCJ0cmFuc2Zvcm0iLGwoZS54T2Zmc2V0MixlLnlPZmZzZXQyKStzKFstYixkLG1dKSksZS52YW5nbGVzKXtQPWUucmFkaWFsQXhpc0FuZ2xlK2I7dmFyIHc9bChoLHApK3MoLWIpLFQ9bChoLHApK3MoLVApO2kuYmcuYXR0cigidHJhbnNmb3JtIix3KSxpWyJyYWRpYWwtZ3JpZCJdLmF0dHIoInRyYW5zZm9ybSIsdyksaVsicmFkaWFsLWF4aXMiXS5hdHRyKCJ0cmFuc2Zvcm0iLFQpLGlbInJhZGlhbC1saW5lIl0uc2VsZWN0KCJsaW5lIikuYXR0cigidHJhbnNmb3JtIixUKSxlLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZSh2LHksUCl9ZWxzZSBlLmNsaXBQYXRocy5mb3JUcmFjZXMuc2VsZWN0KCJwYXRoIikuYXR0cigidHJhbnNmb3JtIixsKGQsbSkrcyhiKSk7RC5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dS5nZXRUcmFuc2xhdGUodCk7dC5hdHRyKCJ0cmFuc2Zvcm0iLGwoZS54LGUueSkrcyhbYl0pKX0pKSxSLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10LnNlbGVjdCgidGV4dCIpLHI9dS5nZXRUcmFuc2xhdGUodCk7dC5hdHRyKCJ0cmFuc2Zvcm0iLHMoW2IsZS5hdHRyKCJ4IiksZS5hdHRyKCJ5IildKStsKHIueCxyLnkpKX0pKSxmLnJvdGF0aW9uPW8ubW9kSGFsZihDLDM2MCksZS51cGRhdGVBbmd1bGFyQXhpcyh2LHkpLGUuX2hhc0NsaXBPbkF4aXNGYWxzZSYmIW8uaXNGdWxsQ2lyY2xlKGUuc2VjdG9ySW5SYWQpJiZ6LmNhbGwodS5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLGUpO3ZhciBTPSExO2Zvcih2YXIgRiBpbiBlLnRyYWNlSGFzaClpZihhLnRyYWNlSXMoRiwiZ2wiKSl7dmFyIE49ZS50cmFjZUhhc2hbRl0saj1vLmZpbHRlclZpc2libGUoTik7TlswXVswXS50cmFjZS5fbW9kdWxlLnBsb3QocixlLGoseSksai5sZW5ndGgmJihTPSEwKX1TJiYoayhyKSxBKHIpKTt2YXIgVT17fTtCKFUpLHIuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixVKX1mdW5jdGlvbiBCKHQpe3RbZS5pZCsiLmFuZ3VsYXJheGlzLnJvdGF0aW9uIl09QyxlLnZhbmdsZXMmJih0W2UuaWQrIi5yYWRpYWxheGlzLmFuZ2xlIl09UCl9ZnVuY3Rpb24gTigpe1Iuc2VsZWN0KCJ0ZXh0IikuYXR0cigidHJhbnNmb3JtIixudWxsKTt2YXIgdD17fTtCKHQpLGEuY2FsbCgiX2d1aVJlbGF5b3V0IixyLHQpfWIucHJlcEZuPWZ1bmN0aW9uKG4saSxhKXt2YXIgcz10W2UuaWRdO0w9cy5hbmd1bGFyYXhpcy5yb3RhdGlvbjt2YXIgbD14LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO009aS1sLmxlZnQsRT1hLWwudG9wLHIuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKHIpO3ZhciBjPW8uYXBwbHkzRFRyYW5zZm9ybSh0Ll9pbnZUcmFuc2Zvcm0pKE0sRSk7TT1jWzBdLEU9Y1sxXSxPPV8oTSxFKSxiLm1vdmVGbj1GLGIuZG9uZUZuPU4sdyhyKX0sZS52YW5nbGVzJiYhby5pc0Z1bGxDaXJjbGUoZS5zZWN0b3JJblJhZCkmJihiLnByZXBGbj1vLm5vb3AsVChuLnNlbGVjdCh4KSxudWxsKSksdi5pbml0KGIpfSx6LmlzUHRJbnNpZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZWN0b3JJblJhZCxyPXRoaXMudmFuZ2xlcyxuPXRoaXMuYW5ndWxhckF4aXMuYzJnKHQudGhldGEpLGk9dGhpcy5yYWRpYWxBeGlzLGE9aS5jMmwodC5yKSxzPWkuX3JsO3JldHVybihyP0UuaXNQdEluc2lkZVBvbHlnb246by5pc1B0SW5zaWRlU2VjdG9yKShhLG4scyxlLHIpfSx6LnBhdGhBcmM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZWN0b3JJblJhZCxyPXRoaXMudmFuZ2xlcztyZXR1cm4ocj9FLnBhdGhQb2x5Z29uOm8ucGF0aEFyYykodCxlWzBdLGVbMV0scil9LHoucGF0aFNlY3Rvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNlY3RvckluUmFkLHI9dGhpcy52YW5nbGVzO3JldHVybihyP0UucGF0aFBvbHlnb246by5wYXRoU2VjdG9yKSh0LGVbMF0sZVsxXSxyKX0sei5wYXRoQW5udWx1cz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuc2VjdG9ySW5SYWQsbj10aGlzLnZhbmdsZXM7cmV0dXJuKG4/RS5wYXRoUG9seWdvbkFubnVsdXM6by5wYXRoQW5udWx1cykodCxlLHJbMF0sclsxXSxuKX0sei5wYXRoU3VicGxvdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaW5uZXJSYWRpdXMsZT10aGlzLnJhZGl1cztyZXR1cm4gdD90aGlzLnBhdGhBbm51bHVzKHQsZSk6dGhpcy5wYXRoU2VjdG9yKGUpfSx6LmZpbGxWaWV3SW5pdGlhbEtleT1mdW5jdGlvbih0LGUpe3QgaW4gdGhpcy52aWV3SW5pdGlhbHx8KHRoaXMudmlld0luaXRpYWxbdF09ZSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NjU4LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vY29tcG9uZW50cy9meCI6Njc5LCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyI6NzM3LCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3NDQsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiOjc2MCwiLi4vLi4vbGliL3NldGN1cnNvciI6Nzk3LCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyI6ODE3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo4MjYsIi4uL2NhcnRlc2lhbi9kcmFnYm94Ijo4MzYsIi4uL2NhcnRlc2lhbi9zZWxlY3QiOjg0NywiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0Ijo4NDgsIi4uL3Bsb3RzIjo4OTAsIi4vY29uc3RhbnRzIjo4OTEsIi4vaGVscGVycyI6ODkyLCIuL3NldF9jb252ZXJ0Ijo4OTcsIkBwbG90bHkvZDMiOjU4LHRpbnljb2xvcjI6NTcyfV0sODk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0IiksYT1uLmRlZzJyYWQsbz1uLnJhZDJkZWc7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goaSh0LHIpLHQuX2lkKXtjYXNlIngiOmNhc2UicmFkaWFsYXhpcyI6IWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5fc3VicGxvdDt0LnNldEdlb21ldHJ5PWZ1bmN0aW9uKCl7dmFyIGU9dC5fcmxbMF0sbj10Ll9ybFsxXSxpPXIuaW5uZXJSYWRpdXMsYT0oci5yYWRpdXMtaSkvKG4tZSksbz1pL2Escz1lPm4/ZnVuY3Rpb24odCl7cmV0dXJuIHQ8PTB9OmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wfTt0LmMyZz1mdW5jdGlvbihyKXt2YXIgbj10LmMybChyKS1lO3JldHVybihzKG4pP246MCkrb30sdC5nMmM9ZnVuY3Rpb24ocil7cmV0dXJuIHQubDJjKHIrZS1vKX0sdC5nMnA9ZnVuY3Rpb24odCl7cmV0dXJuIHQqYX0sdC5jMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZzJwKHQuYzJnKGUpKX19fSh0LGUpO2JyZWFrO2Nhc2UiYW5ndWxhcmF4aXMiOiFmdW5jdGlvbih0LGUpe3ZhciByPXQudHlwZTtpZigibGluZWFyIj09PXIpe3ZhciBpPXQuZDJjLHM9dC5jMmQ7dC5kMmM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4iZGVncmVlcyI9PT1lP2EodCk6dH0oaSh0KSxlKX0sdC5jMmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcyhmdW5jdGlvbih0LGUpe3JldHVybiJkZWdyZWVzIj09PWU/byh0KTp0fSh0LGUpKX19dC5tYWtlQ2FsY2RhdGE9ZnVuY3Rpb24oZSxpKXt2YXIgYSxvLHM9ZVtpXSxsPWUuX2xlbmd0aCxjPWZ1bmN0aW9uKHIpe3JldHVybiB0LmQyYyhyLGUudGhldGF1bml0KX07aWYocyl7aWYobi5pc1R5cGVkQXJyYXkocykmJiJsaW5lYXIiPT09cil7aWYobD09PXMubGVuZ3RoKXJldHVybiBzO2lmKHMuc3ViYXJyYXkpcmV0dXJuIHMuc3ViYXJyYXkoMCxsKX1mb3IoYT1uZXcgQXJyYXkobCksbz0wO288bDtvKyspYVtvXT1jKHNbb10pfWVsc2V7dmFyIHU9aSsiMCIsZj0iZCIraSxoPXUgaW4gZT9jKGVbdV0pOjAscD1lW2ZdP2MoZVtmXSk6KHQucGVyaW9kfHwyKk1hdGguUEkpL2w7Zm9yKGE9bmV3IEFycmF5KGwpLG89MDtvPGw7bysrKWFbb109aCtvKnB9cmV0dXJuIGF9LHQuc2V0R2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgaSxzLGwsYyx1PWUuc2VjdG9yLGY9dS5tYXAoYSksaD17Y2xvY2t3aXNlOi0xLGNvdW50ZXJjbG9ja3dpc2U6MX1bdC5kaXJlY3Rpb25dLHA9YSh0LnJvdGF0aW9uKSxkPWZ1bmN0aW9uKHQpe3JldHVybiBoKnQrcH0sbT1mdW5jdGlvbih0KXtyZXR1cm4odC1wKS9ofTtzd2l0Y2gocil7Y2FzZSJsaW5lYXIiOnM9aT1uLmlkZW50aXR5LGM9YSxsPW8sdC5yYW5nZT1uLmlzRnVsbENpcmNsZShmKT9bdVswXSx1WzBdKzM2MF06Zi5tYXAobSkubWFwKG8pO2JyZWFrO2Nhc2UiY2F0ZWdvcnkiOnZhciBnPXQuX2NhdGVnb3JpZXMubGVuZ3RoLHY9dC5wZXJpb2Q/TWF0aC5tYXgodC5wZXJpb2QsZyk6ZzswPT09diYmKHY9MSkscz1jPWZ1bmN0aW9uKHQpe3JldHVybiAyKnQqTWF0aC5QSS92fSxpPWw9ZnVuY3Rpb24odCl7cmV0dXJuIHQqdi9NYXRoLlBJLzJ9LHQucmFuZ2U9WzAsdl19dC5jMmc9ZnVuY3Rpb24odCl7cmV0dXJuIGQocyh0KSl9LHQuZzJjPWZ1bmN0aW9uKHQpe3JldHVybiBpKG0odCkpfSx0LnQyZz1mdW5jdGlvbih0KXtyZXR1cm4gZChjKHQpKX0sdC5nMnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwobSh0KSl9fX0odCxlKX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjg0OH1dLDg5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxhPXQoIi4vZG9tYWluIikuZGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzLGwsYz1vLnR5cGUsdT1vLmF0dHJpYnV0ZXMsZj1vLmhhbmRsZURlZmF1bHRzLGg9by5wYXJ0aXRpb258fCJ4IixwPWUuX3N1YnBsb3RzW2NdLGQ9cC5sZW5ndGgsbT1kJiZwWzBdLnJlcGxhY2UoL1xkKyQvLCIiKTtmdW5jdGlvbiBnKHQsZSl7cmV0dXJuIG4uY29lcmNlKHMsbCx1LHQsZSl9Zm9yKHZhciB2PTA7djxkO3YrKyl7dmFyIHk9cFt2XTtzPXRbeV0/dFt5XTp0W3ldPXt9LGw9aS5uZXdDb250YWluZXIoZSx5LG0pLGcoInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbik7dmFyIHg9e307eFtoXT1bdi9kLCh2KzEpL2RdLGEobCxlLGcseCksby5pZD15LGYocyxsLGcsbyl9fX0seyIuLi9saWIiOjc3NiwiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuL2RvbWFpbiI6ODU1fV0sODk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbnN0YW50cy9kb2NzIik7bi5GT1JNQVRfTElOSyxuLkRBVEVfRk9STUFUX0xJTks7ZnVuY3Rpb24gaSh0KXt2YXIgZT10LmRlc2NyaXB0aW9uPyIgIit0LmRlc2NyaXB0aW9uOiIiLHI9dC5rZXlzfHxbXTtpZihyLmxlbmd0aD4wKXtmb3IodmFyIG49W10saT0wO2k8ci5sZW5ndGg7aSsrKW5baV09ImAiK3JbaV0rImAiO2UrPSJGaW5hbGx5LCB0aGUgdGVtcGxhdGUgc3RyaW5nIGhhcyBhY2Nlc3MgdG8gIixlPTE9PT1yLmxlbmd0aD8idmFyaWFibGUgIituWzBdOiJ2YXJpYWJsZXMgIituLnNsaWNlKDAsLTEpLmpvaW4oIiwgIikrIiBhbmQgIituLnNsaWNlKC0xKSsiLiJ9cmV0dXJuIGV9ci5ob3ZlcnRlbXBsYXRlQXR0cnM9ZnVuY3Rpb24odCxlKXt0PXR8fHt9O2koZT1lfHx7fSk7dmFyIHI9e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZTp0LmVkaXRUeXBlfHwibm9uZSJ9O3JldHVybiExIT09dC5hcnJheU9rJiYoci5hcnJheU9rPSEwKSxyfSxyLnRleHR0ZW1wbGF0ZUF0dHJzPWZ1bmN0aW9uKHQsZSl7dD10fHx7fTtpKGU9ZXx8e30pO3ZhciByPXt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6dC5lZGl0VHlwZXx8ImNhbGMifTtyZXR1cm4hMSE9PXQuYXJyYXlPayYmKHIuYXJyYXlPaz0hMCkscn19LHsiLi4vY29uc3RhbnRzL2RvY3MiOjc0N31dLDkwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3Rlcm5hcnkiKSxpPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0U3VicGxvdENhbGNEYXRhLGE9dCgiLi4vLi4vbGliIikuY291bnRlclJlZ2V4O3IubmFtZT0idGVybmFyeSI7dmFyIG89ci5hdHRyPSJzdWJwbG90IjtyLmlkUm9vdD0idGVybmFyeSIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PWEoInRlcm5hcnkiKSwoci5hdHRyaWJ1dGVzPXt9KVtvXT17dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJ0ZXJuYXJ5IixlZGl0VHlwZToiY2FsYyJ9LHIubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dF9kZWZhdWx0cyIpLHIucGxvdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsYT1lLl9zdWJwbG90cy50ZXJuYXJ5LG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPWkociwidGVybmFyeSIscyksYz1lW3NdLl9zdWJwbG90O2N8fChjPW5ldyBuKHtpZDpzLGdyYXBoRGl2OnQsY29udGFpbmVyOmUuX3Rlcm5hcnlsYXllci5ub2RlKCl9LGUpLGVbc10uX3N1YnBsb3Q9YyksYy5wbG90KGwsZSx0Ll9wcm9taXNlcyl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90cy50ZXJuYXJ5fHxbXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV0scz1uW29dLl9zdWJwbG90OyFlW29dJiZzJiYocy5wbG90Q29udGFpbmVyLnJlbW92ZSgpLHMuY2xpcERlZi5yZW1vdmUoKSxzLmNsaXBEZWZSZWxhdGl2ZS5yZW1vdmUoKSxzLmxheWVyc1siYS10aXRsZSJdLnJlbW92ZSgpLHMubGF5ZXJzWyJiLXRpdGxlIl0ucmVtb3ZlKCkscy5sYXllcnNbImMtdGl0bGUiXS5yZW1vdmUoKSl9fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjg2NCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6OTAxLCIuL2xheW91dF9kZWZhdWx0cyI6OTAyLCIuL3Rlcm5hcnkiOjkwM31dLDkwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2RvbWFpbiIpLmF0dHJpYnV0ZXMsYT10KCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9e3RpdGxlOnt0ZXh0OmEudGl0bGUudGV4dCxmb250OmEudGl0bGUuZm9udH0sY29sb3I6YS5jb2xvcix0aWNrbW9kZTphLnRpY2ttb2RlLG50aWNrczpzKHt9LGEubnRpY2tzLHtkZmx0OjYsbWluOjF9KSx0aWNrMDphLnRpY2swLGR0aWNrOmEuZHRpY2ssdGlja3ZhbHM6YS50aWNrdmFscyx0aWNrdGV4dDphLnRpY2t0ZXh0LHRpY2tzOmEudGlja3MsdGlja2xlbjphLnRpY2tsZW4sdGlja3dpZHRoOmEudGlja3dpZHRoLHRpY2tjb2xvcjphLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczphLnNob3d0aWNrbGFiZWxzLHNob3d0aWNrcHJlZml4OmEuc2hvd3RpY2twcmVmaXgsdGlja3ByZWZpeDphLnRpY2twcmVmaXgsc2hvd3RpY2tzdWZmaXg6YS5zaG93dGlja3N1ZmZpeCx0aWNrc3VmZml4OmEudGlja3N1ZmZpeCxzaG93ZXhwb25lbnQ6YS5zaG93ZXhwb25lbnQsZXhwb25lbnRmb3JtYXQ6YS5leHBvbmVudGZvcm1hdCxtaW5leHBvbmVudDphLm1pbmV4cG9uZW50LHNlcGFyYXRldGhvdXNhbmRzOmEuc2VwYXJhdGV0aG91c2FuZHMsdGlja2ZvbnQ6YS50aWNrZm9udCx0aWNrYW5nbGU6YS50aWNrYW5nbGUsdGlja2Zvcm1hdDphLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmEudGlja2Zvcm1hdHN0b3BzLGhvdmVyZm9ybWF0OmEuaG92ZXJmb3JtYXQsc2hvd2xpbmU6cyh7fSxhLnNob3dsaW5lLHtkZmx0OiEwfSksbGluZWNvbG9yOmEubGluZWNvbG9yLGxpbmV3aWR0aDphLmxpbmV3aWR0aCxzaG93Z3JpZDpzKHt9LGEuc2hvd2dyaWQse2RmbHQ6ITB9KSxncmlkY29sb3I6YS5ncmlkY29sb3IsZ3JpZHdpZHRoOmEuZ3JpZHdpZHRoLGxheWVyOmEubGF5ZXIsbWluOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MH0sX2RlcHJlY2F0ZWQ6e3RpdGxlOmEuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmEuX2RlcHJlY2F0ZWQudGl0bGVmb250fX0sYz1lLmV4cG9ydHM9byh7ZG9tYWluOmkoe25hbWU6InRlcm5hcnkifSksYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxzdW06e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLG1pbjowfSxhYXhpczpsLGJheGlzOmwsY2F4aXM6bH0sInBsb3QiLCJmcm9tLXJvb3QiKTtjLnVpcmV2aXNpb249e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxjLmFheGlzLnVpcmV2aXNpb249Yy5iYXhpcy51aXJldmlzaW9uPWMuY2F4aXMudWlyZXZpc2lvbj17dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NjM4LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgwOSwiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDIsIi4uL2RvbWFpbiI6ODU1fV0sOTAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vc3VicGxvdF9kZWZhdWx0cyIpLHM9dCgiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxsPXQoIi4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiKSxjPXQoIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksdT10KCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzIiksZj10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksaD1bImFheGlzIiwiYmF4aXMiLCJjYXhpcyJdO2Z1bmN0aW9uIHAodCxlLHIsYSl7dmFyIG8scyxsLGM9cigiYmdjb2xvciIpLHU9cigic3VtIik7YS5iZ0NvbG9yPW4uY29tYmluZShjLGEucGFwZXJfYmdjb2xvcik7Zm9yKHZhciBmPTA7ZjxoLmxlbmd0aDtmKyspcz10W289aFtmXV18fHt9LChsPWkubmV3Q29udGFpbmVyKGUsbykpLl9uYW1lPW8sZChzLGwsYSxlKTt2YXIgcD1lLmFheGlzLG09ZS5iYXhpcyxnPWUuY2F4aXM7cC5taW4rbS5taW4rZy5taW4+PXUmJihwLm1pbj0wLG0ubWluPTAsZy5taW49MCx0LmFheGlzJiZkZWxldGUgdC5hYXhpcy5taW4sdC5iYXhpcyYmZGVsZXRlIHQuYmF4aXMubWluLHQuY2F4aXMmJmRlbGV0ZSB0LmNheGlzLm1pbil9ZnVuY3Rpb24gZCh0LGUscixuKXt2YXIgaT1mW2UuX25hbWVdO2Z1bmN0aW9uIG8ocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLGkscixuKX1vKCJ1aXJldmlzaW9uIixuLnVpcmV2aXNpb24pLGUudHlwZT0ibGluZWFyIjt2YXIgaD1vKCJjb2xvciIpLHA9aCE9PWkuY29sb3IuZGZsdD9oOnIuZm9udC5jb2xvcixkPWUuX25hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCksbT0iQ29tcG9uZW50ICIrZCxnPW8oInRpdGxlLnRleHQiLG0pO2UuX2hvdmVydGl0bGU9Zz09PW0/ZzpkLGEuY29lcmNlRm9udChvLCJ0aXRsZS5mb250Iix7ZmFtaWx5OnIuZm9udC5mYW1pbHksc2l6ZTphLmJpZ0ZvbnQoci5mb250LnNpemUpLGNvbG9yOnB9KSxvKCJtaW4iKSxjKHQsZSxvLCJsaW5lYXIiKSxzKHQsZSxvLCJsaW5lYXIiLHt9KSxsKHQsZSxvLHtvdXRlclRpY2tzOiEwfSksbygic2hvd3RpY2tsYWJlbHMiKSYmKGEuY29lcmNlRm9udChvLCJ0aWNrZm9udCIse2ZhbWlseTpyLmZvbnQuZmFtaWx5LHNpemU6ci5mb250LnNpemUsY29sb3I6cH0pLG8oInRpY2thbmdsZSIpLG8oInRpY2tmb3JtYXQiKSksdSh0LGUsbyx7ZGZsdENvbG9yOmgsYmdDb2xvcjpyLmJnQ29sb3IsYmxlbmQ6NjAsc2hvd0xpbmU6ITAsc2hvd0dyaWQ6ITAsbm9aZXJvTGluZTohMCxhdHRyaWJ1dGVzOml9KSxvKCJob3ZlcmZvcm1hdCIpLG8oImxheWVyIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtvKHQsZSxyLHt0eXBlOiJ0ZXJuYXJ5IixhdHRyaWJ1dGVzOmYsaGFuZGxlRGVmYXVsdHM6cCxmb250OmUuZm9udCxwYXBlcl9iZ2NvbG9yOmUucGFwZXJfYmdjb2xvcn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTYsIi4uL2NhcnRlc2lhbi9saW5lX2dyaWRfZGVmYXVsdHMiOjg0NCwiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjg0OSwiLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyI6ODUwLCIuLi9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyI6ODUxLCIuLi9zdWJwbG90X2RlZmF1bHRzIjo4OTgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjkwMX1dLDkwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vbGliIikscz1vLnN0clRyYW5zbGF0ZSxsPW8uXyxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGY9dCgiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0IiksaD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxwPXQoIi4uL3Bsb3RzIiksZD10KCIuLi9jYXJ0ZXNpYW4vYXhlcyIpLG09dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLGc9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLHY9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIikseT12LmZyZWVNb2RlLHg9di5yZWN0TW9kZSxiPXQoIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIiksXz10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikucHJlcFNlbGVjdCx3PXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLFQ9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LGs9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0aW9uc0NhY2hlLEE9dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIE0odCxlKXt0aGlzLmlkPXQuaWQsdGhpcy5ncmFwaERpdj10LmdyYXBoRGl2LHRoaXMuaW5pdChlKSx0aGlzLm1ha2VGcmFtZXdvcmsoZSksdGhpcy5hVGlja0xheW91dD1udWxsLHRoaXMuYlRpY2tMYXlvdXQ9bnVsbCx0aGlzLmNUaWNrTGF5b3V0PW51bGx9ZS5leHBvcnRzPU07dmFyIFM9TS5wcm90b3R5cGU7Uy5pbml0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGFpbmVyPXQuX3Rlcm5hcnlsYXllcix0aGlzLmRlZnM9dC5fZGVmcyx0aGlzLmxheW91dElkPXQuX3VpZCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVycz17fX0sUy5wbG90PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVt0aGlzLmlkXSxuPWUuX3NpemU7dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSExO2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXtpZighMT09PXRbaV1bMF0udHJhY2UuY2xpcG9uYXhpcyl7dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSEwO2JyZWFrfX10aGlzLnVwZGF0ZUxheWVycyhyKSx0aGlzLmFkanVzdExheW91dChyLG4pLHAuZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlKHRoaXMuZ3JhcGhEaXYsdGhpcyx0LHIpLHRoaXMubGF5ZXJzLnBsb3RiZy5zZWxlY3QoInBhdGgiKS5jYWxsKGMuZmlsbCxyLmJnY29sb3IpfSxTLm1ha2VGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5ncmFwaERpdixyPXRbdGhpcy5pZF0sbj10aGlzLmNsaXBJZD0iY2xpcCIrdGhpcy5sYXlvdXRJZCt0aGlzLmlkLGk9dGhpcy5jbGlwSWRSZWxhdGl2ZT0iY2xpcC1yZWxhdGl2ZSIrdGhpcy5sYXlvdXRJZCt0aGlzLmlkO3RoaXMuY2xpcERlZj1vLmVuc3VyZVNpbmdsZUJ5SWQodC5fY2xpcHMsImNsaXBQYXRoIixuLChmdW5jdGlvbih0KXt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwwWiIpfSkpLHRoaXMuY2xpcERlZlJlbGF0aXZlPW8uZW5zdXJlU2luZ2xlQnlJZCh0Ll9jbGlwcywiY2xpcFBhdGgiLGksKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0wLDBaIil9KSksdGhpcy5wbG90Q29udGFpbmVyPW8uZW5zdXJlU2luZ2xlKHRoaXMuY29udGFpbmVyLCJnIix0aGlzLmlkKSx0aGlzLnVwZGF0ZUxheWVycyhyKSx1LnNldENsaXBVcmwodGhpcy5sYXllcnMuYmFja3Bsb3QsbixlKSx1LnNldENsaXBVcmwodGhpcy5sYXllcnMuZ3JpZHMsbixlKX0sUy51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXllcnMscj1bImRyYWdsYXllciIsInBsb3RiZyIsImJhY2twbG90IiwiZ3JpZHMiXTsiYmVsb3cgdHJhY2VzIj09PXQuYWF4aXMubGF5ZXImJnIucHVzaCgiYWF4aXMiLCJhbGluZSIpLCJiZWxvdyB0cmFjZXMiPT09dC5iYXhpcy5sYXllciYmci5wdXNoKCJiYXhpcyIsImJsaW5lIiksImJlbG93IHRyYWNlcyI9PT10LmNheGlzLmxheWVyJiZyLnB1c2goImNheGlzIiwiY2xpbmUiKSxyLnB1c2goImZyb250cGxvdCIpLCJhYm92ZSB0cmFjZXMiPT09dC5hYXhpcy5sYXllciYmci5wdXNoKCJhYXhpcyIsImFsaW5lIiksImFib3ZlIHRyYWNlcyI9PT10LmJheGlzLmxheWVyJiZyLnB1c2goImJheGlzIiwiYmxpbmUiKSwiYWJvdmUgdHJhY2VzIj09PXQuY2F4aXMubGF5ZXImJnIucHVzaCgiY2F4aXMiLCJjbGluZSIpO3ZhciBpPXRoaXMucGxvdENvbnRhaW5lci5zZWxlY3RBbGwoImcudG9wbGV2ZWwiKS5kYXRhKHIsU3RyaW5nKSxhPVsiYWdyaWQiLCJiZ3JpZCIsImNncmlkIl07aS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuInRvcGxldmVsICIrdH0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtlW3RdPXIsImZyb250cGxvdCI9PT10P3IuYXBwZW5kKCJnIikuY2xhc3NlZCgic2NhdHRlcmxheWVyIiwhMCk6ImJhY2twbG90Ij09PXQ/ci5hcHBlbmQoImciKS5jbGFzc2VkKCJtYXBsYXllciIsITApOiJwbG90YmciPT09dD9yLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwwWiIpOiJhbGluZSI9PT10fHwiYmxpbmUiPT09dHx8ImNsaW5lIj09PXQ/ci5hcHBlbmQoInBhdGgiKToiZ3JpZHMiPT09dCYmYS5mb3JFYWNoKChmdW5jdGlvbih0KXtlW3RdPXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ3JpZCAiK3QsITApfSkpfSkpLGkub3JkZXIoKX07dmFyIEU9TWF0aC5zcXJ0KDQvMyk7Uy5hZGp1c3RMYXlvdXQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLGwscD10aGlzLGQ9dC5kb21haW4sbT0oZC54WzBdK2QueFsxXSkvMixnPShkLnlbMF0rZC55WzFdKS8yLHY9ZC54WzFdLWQueFswXSx5PWQueVsxXS1kLnlbMF0seD12KmUudyxiPXkqZS5oLF89dC5zdW0sdz10LmFheGlzLm1pbixUPXQuYmF4aXMubWluLGs9dC5jYXhpcy5taW47eD5FKmI/aT0oYT1iKSpFOmE9KGk9eCkvRSxvPXYqaS94LGw9eSphL2Iscj1lLmwrZS53Km0taS8yLG49ZS50K2UuaCooMS1nKS1hLzIscC54MD1yLHAueTA9bixwLnc9aSxwLmg9YSxwLnN1bT1fLHAueGF4aXM9e3R5cGU6ImxpbmVhciIscmFuZ2U6W3crMiprLV8sXy13LTIqVF0sZG9tYWluOlttLW8vMixtK28vMl0sX2lkOiJ4In0sZihwLnhheGlzLHAuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQpLHAueGF4aXMuc2V0U2NhbGUoKSxwLnhheGlzLmlzUHRXaXRoaW5SYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5hPj1wLmFheGlzLnJhbmdlWzBdJiZ0LmE8PXAuYWF4aXMucmFuZ2VbMV0mJnQuYj49cC5iYXhpcy5yYW5nZVsxXSYmdC5iPD1wLmJheGlzLnJhbmdlWzBdJiZ0LmM+PXAuY2F4aXMucmFuZ2VbMV0mJnQuYzw9cC5jYXhpcy5yYW5nZVswXX0scC55YXhpcz17dHlwZToibGluZWFyIixyYW5nZTpbdyxfLVQta10sZG9tYWluOltnLWwvMixnK2wvMl0sX2lkOiJ5In0sZihwLnlheGlzLHAuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQpLHAueWF4aXMuc2V0U2NhbGUoKSxwLnlheGlzLmlzUHRXaXRoaW5SYW5nZT1mdW5jdGlvbigpe3JldHVybiEwfTt2YXIgQT1wLnlheGlzLmRvbWFpblswXSxNPXAuYWF4aXM9aCh7fSx0LmFheGlzLHtyYW5nZTpbdyxfLVQta10sc2lkZToibGVmdCIsdGlja2FuZ2xlOigrdC5hYXhpcy50aWNrYW5nbGV8fDApLTMwLGRvbWFpbjpbQSxBK2wqRV0sYW5jaG9yOiJmcmVlIixwb3NpdGlvbjowLF9pZDoieSIsX2xlbmd0aDppfSk7ZihNLHAuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQpLE0uc2V0U2NhbGUoKTt2YXIgUz1wLmJheGlzPWgoe30sdC5iYXhpcyx7cmFuZ2U6W18tdy1rLFRdLHNpZGU6ImJvdHRvbSIsZG9tYWluOnAueGF4aXMuZG9tYWluLGFuY2hvcjoiZnJlZSIscG9zaXRpb246MCxfaWQ6IngiLF9sZW5ndGg6aX0pO2YoUyxwLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxTLnNldFNjYWxlKCk7dmFyIEw9cC5jYXhpcz1oKHt9LHQuY2F4aXMse3JhbmdlOltfLXctVCxrXSxzaWRlOiJyaWdodCIsdGlja2FuZ2xlOigrdC5jYXhpcy50aWNrYW5nbGV8fDApKzMwLGRvbWFpbjpbQSxBK2wqRV0sYW5jaG9yOiJmcmVlIixwb3NpdGlvbjowLF9pZDoieSIsX2xlbmd0aDppfSk7ZihMLHAuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQpLEwuc2V0U2NhbGUoKTt2YXIgQz0iTSIrcisiLCIrKG4rYSkrImgiK2krImwtIitpLzIrIiwtIithKyJaIjtwLmNsaXBEZWYuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsQykscC5sYXllcnMucGxvdGJnLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLEMpO3ZhciBQPSJNMCwiK2ErImgiK2krImwtIitpLzIrIiwtIithKyJaIjtwLmNsaXBEZWZSZWxhdGl2ZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixQKTt2YXIgST1zKHIsbik7cC5wbG90Q29udGFpbmVyLnNlbGVjdEFsbCgiLnNjYXR0ZXJsYXllciwubWFwbGF5ZXIiKS5hdHRyKCJ0cmFuc2Zvcm0iLEkpLHAuY2xpcERlZlJlbGF0aXZlLnNlbGVjdCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCk7dmFyIE89cyhyLVMuX29mZnNldCxuK2EpO3AubGF5ZXJzLmJheGlzLmF0dHIoInRyYW5zZm9ybSIsTykscC5sYXllcnMuYmdyaWQuYXR0cigidHJhbnNmb3JtIixPKTt2YXIgej1zKHIraS8yLG4pKyJyb3RhdGUoMzApIitzKDAsLU0uX29mZnNldCk7cC5sYXllcnMuYWF4aXMuYXR0cigidHJhbnNmb3JtIix6KSxwLmxheWVycy5hZ3JpZC5hdHRyKCJ0cmFuc2Zvcm0iLHopO3ZhciBEPXMocitpLzIsbikrInJvdGF0ZSgtMzApIitzKDAsLUwuX29mZnNldCk7cC5sYXllcnMuY2F4aXMuYXR0cigidHJhbnNmb3JtIixEKSxwLmxheWVycy5jZ3JpZC5hdHRyKCJ0cmFuc2Zvcm0iLEQpLHAuZHJhd0F4ZXMoITApLHAubGF5ZXJzLmFsaW5lLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLE0uc2hvd2xpbmU/Ik0iK3IrIiwiKyhuK2EpKyJsIitpLzIrIiwtIithOiJNMCwwIikuY2FsbChjLnN0cm9rZSxNLmxpbmVjb2xvcnx8IiMwMDAiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwoTS5saW5ld2lkdGh8fDApKyJweCIpLHAubGF5ZXJzLmJsaW5lLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLFMuc2hvd2xpbmU/Ik0iK3IrIiwiKyhuK2EpKyJoIitpOiJNMCwwIikuY2FsbChjLnN0cm9rZSxTLmxpbmVjb2xvcnx8IiMwMDAiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwoUy5saW5ld2lkdGh8fDApKyJweCIpLHAubGF5ZXJzLmNsaW5lLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLEwuc2hvd2xpbmU/Ik0iKyhyK2kvMikrIiwiK24rImwiK2kvMisiLCIrYToiTTAsMCIpLmNhbGwoYy5zdHJva2UsTC5saW5lY29sb3J8fCIjMDAwIikuc3R5bGUoInN0cm9rZS13aWR0aCIsKEwubGluZXdpZHRofHwwKSsicHgiKSxwLmdyYXBoRGl2Ll9jb250ZXh0LnN0YXRpY1Bsb3R8fHAuaW5pdEludGVyYWN0aW9ucygpLHUuc2V0Q2xpcFVybChwLmxheWVycy5mcm9udHBsb3QscC5faGFzQ2xpcE9uQXhpc0ZhbHNlP251bGw6cC5jbGlwSWQscC5ncmFwaERpdil9LFMuZHJhd0F4ZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5ncmFwaERpdixyPXRoaXMuaWQuc3Vic3RyKDcpKyJ0aXRsZSIsbj10aGlzLmxheWVycyxpPXRoaXMuYWF4aXMsYT10aGlzLmJheGlzLG89dGhpcy5jYXhpcztpZih0aGlzLmRyYXdBeChpKSx0aGlzLmRyYXdBeChhKSx0aGlzLmRyYXdBeChvKSx0KXt2YXIgcz1NYXRoLm1heChpLnNob3d0aWNrbGFiZWxzP2kudGlja2ZvbnQuc2l6ZS8yOjAsKG8uc2hvd3RpY2tsYWJlbHM/Ljc1Km8udGlja2ZvbnQuc2l6ZTowKSsoIm91dHNpZGUiPT09by50aWNrcz8uODcqby50aWNrbGVuOjApKSxjPShhLnNob3d0aWNrbGFiZWxzP2EudGlja2ZvbnQuc2l6ZTowKSsoIm91dHNpZGUiPT09YS50aWNrcz9hLnRpY2tsZW46MCkrMztuWyJhLXRpdGxlIl09Yi5kcmF3KGUsImEiK3Ise3Byb3BDb250YWluZXI6aSxwcm9wTmFtZTp0aGlzLmlkKyIuYWF4aXMudGl0bGUiLHBsYWNlaG9sZGVyOmwoZSwiQ2xpY2sgdG8gZW50ZXIgQ29tcG9uZW50IEEgdGl0bGUiKSxhdHRyaWJ1dGVzOnt4OnRoaXMueDArdGhpcy53LzIseTp0aGlzLnkwLWkudGl0bGUuZm9udC5zaXplLzMtcywidGV4dC1hbmNob3IiOiJtaWRkbGUifX0pLG5bImItdGl0bGUiXT1iLmRyYXcoZSwiYiIrcix7cHJvcENvbnRhaW5lcjphLHByb3BOYW1lOnRoaXMuaWQrIi5iYXhpcy50aXRsZSIscGxhY2Vob2xkZXI6bChlLCJDbGljayB0byBlbnRlciBDb21wb25lbnQgQiB0aXRsZSIpLGF0dHJpYnV0ZXM6e3g6dGhpcy54MC1jLHk6dGhpcy55MCt0aGlzLmgrLjgzKmEudGl0bGUuZm9udC5zaXplK2MsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KSxuWyJjLXRpdGxlIl09Yi5kcmF3KGUsImMiK3Ise3Byb3BDb250YWluZXI6byxwcm9wTmFtZTp0aGlzLmlkKyIuY2F4aXMudGl0bGUiLHBsYWNlaG9sZGVyOmwoZSwiQ2xpY2sgdG8gZW50ZXIgQ29tcG9uZW50IEMgdGl0bGUiKSxhdHRyaWJ1dGVzOnt4OnRoaXMueDArdGhpcy53K2MseTp0aGlzLnkwK3RoaXMuaCsuODMqby50aXRsZS5mb250LnNpemUrYywidGV4dC1hbmNob3IiOiJtaWRkbGUifX0pfX0sUy5kcmF3QXg9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLmdyYXBoRGl2LG49dC5fbmFtZSxpPW4uY2hhckF0KDApLGE9dC5faWQscz10aGlzLmxheWVyc1tuXSxsPWkrInRpY2tMYXlvdXQiLGM9KGU9dCkudGlja3MrU3RyaW5nKGUudGlja2xlbikrU3RyaW5nKGUuc2hvd3RpY2tsYWJlbHMpO3RoaXNbbF0hPT1jJiYocy5zZWxlY3RBbGwoIi4iK2ErInRpY2siKS5yZW1vdmUoKSx0aGlzW2xdPWMpLHQuc2V0U2NhbGUoKTt2YXIgdT1kLmNhbGNUaWNrcyh0KSxmPWQuY2xpcEVuZHModCx1KSxoPWQubWFrZVRyYW5zVGlja0ZuKHQpLHA9ZC5nZXRUaWNrU2lnbnModClbMl0sbT1vLmRlZzJyYWQoMzApLGc9cCoodC5saW5ld2lkdGh8fDEpLzIsdj1wKnQudGlja2xlbix5PXRoaXMudyx4PXRoaXMuaCxiPSJiIj09PWk/Ik0wLCIrZysibCIrTWF0aC5zaW4obSkqdisiLCIrTWF0aC5jb3MobSkqdjoiTSIrZysiLDBsIitNYXRoLmNvcyhtKSp2KyIsIistTWF0aC5zaW4obSkqdixfPXthOiJNMCwwbCIreCsiLC0iK3kvMixiOiJNMCwwbC0iK3kvMisiLC0iK3gsYzoiTTAsMGwtIit4KyIsIit5LzJ9W2ldO2QuZHJhd1RpY2tzKHIsdCx7dmFsczoiaW5zaWRlIj09PXQudGlja3M/Zjp1LGxheWVyOnMscGF0aDpiLHRyYW5zRm46aCxjcmlzcDohMX0pLGQuZHJhd0dyaWQocix0LHt2YWxzOmYsbGF5ZXI6dGhpcy5sYXllcnNbaSsiZ3JpZCJdLHBhdGg6Xyx0cmFuc0ZuOmgsY3Jpc3A6ITF9KSxkLmRyYXdMYWJlbHMocix0LHt2YWxzOnUsbGF5ZXI6cyx0cmFuc0ZuOmgsbGFiZWxGbnM6ZC5tYWtlTGFiZWxGbnModCwwLDMwKX0pfTt2YXIgTD1BLk1JTlpPT00vMisuODcsQz0ibS0wLjg3LC41aCIrTCsidjNoLSIrKEwrNS4yKSsibCIrKEwvMisyLjYpKyIsLSIrKC44NypMKzQuNSkrImwyLjYsMS41bC0iK0wvMisiLCIrLjg3KkwrIloiLFA9Im0wLjg3LC41aC0iK0wrInYzaCIrKEwrNS4yKSsibC0iKyhMLzIrMi42KSsiLC0iKyguODcqTCs0LjUpKyJsLTIuNiwxLjVsIitMLzIrIiwiKy44NypMKyJaIixJPSJtMCwxbCIrTC8yKyIsIisuODcqTCsibDIuNiwtMS41bC0iKyhMLzIrMi42KSsiLC0iKyguODcqTCs0LjUpKyJsLSIrKEwvMisyLjYpKyIsIisoLjg3KkwrNC41KSsibDIuNiwxLjVsIitMLzIrIiwtIisuODcqTCsiWiIsTz0hMDtmdW5jdGlvbiB6KHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLnpvb21ib3gsLmpzLXpvb21ib3gtYmFja2Ryb3AsLmpzLXpvb21ib3gtbWVudSwuem9vbWJveC1jb3JuZXJzIikucmVtb3ZlKCl9Uy5jbGVhclNlbGVjdD1mdW5jdGlvbigpe2sodGhpcy5kcmFnT3B0aW9ucyksVCh0aGlzLmRyYWdPcHRpb25zLmdkKX0sUy5pbml0SW50ZXJhY3Rpb25zPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4sZixoLHAsZCx2LGIsVCxrLE09dGhpcyxTPU0ubGF5ZXJzLnBsb3RiZy5zZWxlY3QoInBhdGgiKS5ub2RlKCksTD1NLmdyYXBoRGl2LEQ9TC5fZnVsbExheW91dC5fem9vbWxheWVyO2Z1bmN0aW9uIFIodCl7dmFyIGU9e307cmV0dXJuIGVbTS5pZCsiLmFheGlzLm1pbiJdPXQuYSxlW00uaWQrIi5iYXhpcy5taW4iXT10LmIsZVtNLmlkKyIuY2F4aXMubWluIl09dC5jLGV9ZnVuY3Rpb24gRih0LGUpe3ZhciByPUwuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlO3ooTCksMj09PXQmJihMLmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCksYS5jYWxsKCJfZ3VpUmVsYXlvdXQiLEwsUih7YTowLGI6MCxjOjB9KSkpLHIuaW5kZXhPZigic2VsZWN0Iik+LTEmJjE9PT10JiZ3KGUsTCxbTS54YXhpc10sW00ueWF4aXNdLE0uaWQsTS5kcmFnT3B0aW9ucyksci5pbmRleE9mKCJldmVudCIpPi0xJiZnLmNsaWNrKEwsZSxNLmlkKX1mdW5jdGlvbiBCKHQsZSl7cmV0dXJuIDEtZS9NLmh9ZnVuY3Rpb24gTih0LGUpe3JldHVybiAxLSh0KyhNLmgtZSkvTWF0aC5zcXJ0KDMpKS9NLnd9ZnVuY3Rpb24gaih0LGUpe3JldHVybih0LShNLmgtZSkvTWF0aC5zcXJ0KDMpKS9NLnd9ZnVuY3Rpb24gVShpLGEpe3ZhciBvPXIraSp0LHM9bithKmUsbD1NYXRoLm1heCgwLE1hdGgubWluKDEsQigwLG4pLEIoMCxzKSkpLGM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLE4ocixuKSxOKG8scykpKSx1PU1hdGgubWF4KDAsTWF0aC5taW4oMSxqKHIsbiksaihvLHMpKSksbT0obC8yK3UpKk0udyxnPSgxLWwvMi1jKSpNLncseT0obStnKS8yLHg9Zy1tLF89KDEtbCkqTS5oLHc9Xy14L0U7eDxBLk1JTlpPT00/KHA9ZixULmF0dHIoImQiLHYpLGsuYXR0cigiZCIsIk0wLDBaIikpOihwPXthOmYuYStsKmgsYjpmLmIrYypoLGM6Zi5jK3UqaH0sVC5hdHRyKCJkIix2KyJNIittKyIsIitfKyJIIitnKyJMIit5KyIsIit3KyJMIittKyIsIitfKyJaIiksay5hdHRyKCJkIiwiTSIrcisiLCIrbisibTAuNSwwLjVoNXYtMmgtNXYtNWgtMnY1aC01djJoNXY1aDJaTSIrbSsiLCIrXytDKyJNIitnKyIsIitfK1ArIk0iK3krIiwiK3crSSkpLGJ8fChULnRyYW5zaXRpb24oKS5zdHlsZSgiZmlsbCIsZD4uMj8icmdiYSgwLDAsMCwwLjQpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjMpIikuZHVyYXRpb24oMjAwKSxrLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMSkuZHVyYXRpb24oMjAwKSxiPSEwKSxMLmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsUihwKSl9ZnVuY3Rpb24gVigpe3ooTCkscCE9PWYmJihhLmNhbGwoIl9ndWlSZWxheW91dCIsTCxSKHApKSxPJiZMLmRhdGEmJkwuX2NvbnRleHQuc2hvd1RpcHMmJihvLm5vdGlmaWVyKGwoTCwiRG91YmxlLWNsaWNrIHRvIHpvb20gYmFjayBvdXQiKSwibG9uZyIpLE89ITEpKX1mdW5jdGlvbiBIKHQsZSl7dmFyIHI9dC9NLnhheGlzLl9tLG49ZS9NLnlheGlzLl9tLGk9WyhwPXthOmYuYS1uLGI6Zi5iKyhyK24pLzIsYzpmLmMtKHItbikvMn0pLmEscC5iLHAuY10uc29ydChvLnNvcnRlckFzYyksYT1pLmluZGV4T2YocC5hKSxsPWkuaW5kZXhPZihwLmIpLGM9aS5pbmRleE9mKHAuYyk7aVswXTwwJiYoaVsxXStpWzBdLzI8MD8oaVsyXSs9aVswXStpWzFdLGlbMF09aVsxXT0wKTooaVsyXSs9aVswXS8yLGlbMV0rPWlbMF0vMixpWzBdPTApLHA9e2E6aVthXSxiOmlbbF0sYzppW2NdfSxlPShmLmEtcC5hKSpNLnlheGlzLl9tLHQ9KGYuYy1wLmMtZi5iK3AuYikqTS54YXhpcy5fbSk7dmFyIGg9cyhNLngwK3QsTS55MCtlKTtNLnBsb3RDb250YWluZXIuc2VsZWN0QWxsKCIuc2NhdHRlcmxheWVyLC5tYXBsYXllciIpLmF0dHIoInRyYW5zZm9ybSIsaCk7dmFyIGQ9cygtdCwtZSk7TS5jbGlwRGVmUmVsYXRpdmUuc2VsZWN0KCJwYXRoIikuYXR0cigidHJhbnNmb3JtIixkKSxNLmFheGlzLnJhbmdlPVtwLmEsTS5zdW0tcC5iLXAuY10sTS5iYXhpcy5yYW5nZT1bTS5zdW0tcC5hLXAuYyxwLmJdLE0uY2F4aXMucmFuZ2U9W00uc3VtLXAuYS1wLmIscC5jXSxNLmRyYXdBeGVzKCExKSxNLl9oYXNDbGlwT25BeGlzRmFsc2UmJk0ucGxvdENvbnRhaW5lci5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKS5zZWxlY3RBbGwoIi50cmFjZSIpLmNhbGwodS5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLE0pLEwuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixSKHApKX1mdW5jdGlvbiBxKCl7YS5jYWxsKCJfZ3VpUmVsYXlvdXQiLEwsUihwKSl9dGhpcy5kcmFnT3B0aW9ucz17ZWxlbWVudDpTLGdkOkwscGxvdGluZm86e2lkOk0uaWQsZG9tYWluOkwuX2Z1bGxMYXlvdXRbTS5pZF0uZG9tYWluLHhheGlzOk0ueGF4aXMseWF4aXM6TS55YXhpc30sc3VicGxvdDpNLmlkLHByZXBGbjpmdW5jdGlvbihhLGwsdSl7TS5kcmFnT3B0aW9ucy54YXhlcz1bTS54YXhpc10sTS5kcmFnT3B0aW9ucy55YXhlcz1bTS55YXhpc10sdD1MLl9mdWxsTGF5b3V0Ll9pbnZTY2FsZVgsZT1MLl9mdWxsTGF5b3V0Ll9pbnZTY2FsZVk7dmFyIG09TS5kcmFnT3B0aW9ucy5kcmFnbW9kZT1MLl9mdWxsTGF5b3V0LmRyYWdtb2RlO3kobSk/TS5kcmFnT3B0aW9ucy5taW5EcmFnPTE6TS5kcmFnT3B0aW9ucy5taW5EcmFnPXZvaWQgMCwiem9vbSI9PT1tPyhNLmRyYWdPcHRpb25zLm1vdmVGbj1VLE0uZHJhZ09wdGlvbnMuY2xpY2tGbj1GLE0uZHJhZ09wdGlvbnMuZG9uZUZuPVYsZnVuY3Rpb24odCxlLGEpe3ZhciBsPVMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cj1lLWwubGVmdCxuPWEtbC50b3AsTC5fZnVsbExheW91dC5fY2FsY0ludmVyc2VUcmFuc2Zvcm0oTCk7dmFyIHU9TC5fZnVsbExheW91dC5faW52VHJhbnNmb3JtLG09by5hcHBseTNEVHJhbnNmb3JtKHUpKHIsbik7cj1tWzBdLG49bVsxXSxmPXthOk0uYWF4aXMucmFuZ2VbMF0sYjpNLmJheGlzLnJhbmdlWzFdLGM6TS5jYXhpcy5yYW5nZVsxXX0scD1mLGg9TS5hYXhpcy5yYW5nZVsxXS1mLmEsZD1pKE0uZ3JhcGhEaXYuX2Z1bGxMYXlvdXRbTS5pZF0uYmdjb2xvcikuZ2V0THVtaW5hbmNlKCksdj0iTTAsIitNLmgrIkwiK00udy8yKyIsIDBMIitNLncrIiwiK00uaCsiWiIsYj0hMSxUPUQuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94IikuYXR0cigidHJhbnNmb3JtIixzKE0ueDAsTS55MCkpLnN0eWxlKHtmaWxsOmQ+LjI/InJnYmEoMCwwLDAsMCkiOiJyZ2JhKDI1NSwyNTUsMjU1LDApIiwic3Ryb2tlLXdpZHRoIjowfSkuYXR0cigiZCIsdiksaz1ELmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveC1jb3JuZXJzIikuYXR0cigidHJhbnNmb3JtIixzKE0ueDAsTS55MCkpLnN0eWxlKHtmaWxsOmMuYmFja2dyb3VuZCxzdHJva2U6Yy5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjoxLG9wYWNpdHk6MH0pLmF0dHIoImQiLCJNMCwwWiIpLE0uY2xlYXJTZWxlY3QoTCl9KDAsbCx1KSk6InBhbiI9PT1tPyhNLmRyYWdPcHRpb25zLm1vdmVGbj1ILE0uZHJhZ09wdGlvbnMuY2xpY2tGbj1GLE0uZHJhZ09wdGlvbnMuZG9uZUZuPXEsZj17YTpNLmFheGlzLnJhbmdlWzBdLGI6TS5iYXhpcy5yYW5nZVsxXSxjOk0uY2F4aXMucmFuZ2VbMV19LHA9ZixNLmNsZWFyU2VsZWN0KEwpKTooeChtKXx8eShtKSkmJl8oYSxsLHUsTS5kcmFnT3B0aW9ucyxtKX19LFMub25tb3VzZW1vdmU9ZnVuY3Rpb24odCl7Zy5ob3ZlcihMLHQsTS5pZCksTC5fZnVsbExheW91dC5fbGFzdGhvdmVyPVMsTC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PU0uaWR9LFMub25tb3VzZW91dD1mdW5jdGlvbih0KXtMLl9kcmFnZ2luZ3x8bS51bmhvdmVyKEwsdCl9LG0uaW5pdCh0aGlzLmRyYWdPcHRpb25zKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo2NTgsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyI6NjU3LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vY29tcG9uZW50cy9meCI6Njc5LCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyI6NzM3LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo4MzQsIi4uL2NhcnRlc2lhbi9zZWxlY3QiOjg0NywiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0Ijo4NDgsIi4uL3Bsb3RzIjo4OTAsIkBwbG90bHkvZDMiOjU4LHRpbnljb2xvcjI6NTcyfV0sOTA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2xvZ2dlcnMiKSxpPXQoIi4vbGliL25vb3AiKSxhPXQoIi4vbGliL3B1c2hfdW5pcXVlIiksbz10KCIuL2xpYi9pc19wbGFpbl9vYmplY3QiKSxzPXQoIi4vbGliL2RvbSIpLmFkZFN0eWxlUnVsZSxsPXQoIi4vbGliL2V4dGVuZCIpLGM9dCgiLi9wbG90cy9hdHRyaWJ1dGVzIiksdT10KCIuL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIiksZj1sLmV4dGVuZEZsYXQsaD1sLmV4dGVuZERlZXBBbGw7ZnVuY3Rpb24gcCh0KXt2YXIgZT10Lm5hbWUsaT10LmNhdGVnb3JpZXMsYT10Lm1ldGE7aWYoci5tb2R1bGVzW2VdKW4ubG9nKCJUeXBlICIrZSsiIGFscmVhZHkgcmVnaXN0ZXJlZCIpO2Vsc2V7ci5zdWJwbG90c1JlZ2lzdHJ5W3QuYmFzZVBsb3RNb2R1bGUubmFtZV18fGZ1bmN0aW9uKHQpe3ZhciBlPXQubmFtZTtpZihyLnN1YnBsb3RzUmVnaXN0cnlbZV0pcmV0dXJuIHZvaWQgbi5sb2coIlBsb3QgdHlwZSAiK2UrIiBhbHJlYWR5IHJlZ2lzdGVyZWQuIik7Zm9yKHZhciBpIGluIHYodCksci5zdWJwbG90c1JlZ2lzdHJ5W2VdPXQsci5jb21wb25lbnRzUmVnaXN0cnkpYihpLHQubmFtZSl9KHQuYmFzZVBsb3RNb2R1bGUpO2Zvcih2YXIgbz17fSxsPTA7bDxpLmxlbmd0aDtsKyspb1tpW2xdXT0hMCxyLmFsbENhdGVnb3JpZXNbaVtsXV09ITA7Zm9yKHZhciBjIGluIHIubW9kdWxlc1tlXT17X21vZHVsZTp0LGNhdGVnb3JpZXM6b30sYSYmT2JqZWN0LmtleXMoYSkubGVuZ3RoJiYoci5tb2R1bGVzW2VdLm1ldGE9YSksci5hbGxUeXBlcy5wdXNoKGUpLHIuY29tcG9uZW50c1JlZ2lzdHJ5KXkoYyxlKTt0LmxheW91dEF0dHJpYnV0ZXMmJmYoci50cmFjZUxheW91dEF0dHJpYnV0ZXMsdC5sYXlvdXRBdHRyaWJ1dGVzKTt2YXIgdT10LmJhc2VQbG90TW9kdWxlLGg9dS5uYW1lO2lmKCJtYXBib3giPT09aCl7dmFyIHA9dS5jb25zdGFudHMuc3R5bGVSdWxlcztmb3IodmFyIGQgaW4gcClzKCIuanMtcGxvdGx5LXBsb3QgLnBsb3RseSAubWFwYm94Z2wtIitkLHBbZF0pfSJnZW8iIT09aCYmIm1hcGJveCIhPT1ofHx2b2lkIDA9PT10eXBlb2Ygd2luZG93fHx2b2lkIDAhPT13aW5kb3cuUGxvdGx5R2VvQXNzZXRzfHwod2luZG93LlBsb3RseUdlb0Fzc2V0cz17dG9wb2pzb246e319KX19ZnVuY3Rpb24gZCh0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQubmFtZSl0aHJvdyBuZXcgRXJyb3IoIkNvbXBvbmVudCBtb2R1bGUgKm5hbWUqIG11c3QgYmUgYSBzdHJpbmcuIik7dmFyIGU9dC5uYW1lO2Zvcih2YXIgbiBpbiByLmNvbXBvbmVudHNSZWdpc3RyeVtlXT10LHQubGF5b3V0QXR0cmlidXRlcyYmKHQubGF5b3V0QXR0cmlidXRlcy5faXNMaW5rZWRUb0FycmF5JiZhKHIubGF5b3V0QXJyYXlDb250YWluZXJzLGUpLHYodCkpLHIubW9kdWxlcyl5KGUsbik7Zm9yKHZhciBpIGluIHIuc3VicGxvdHNSZWdpc3RyeSliKGUsaSk7Zm9yKHZhciBvIGluIHIudHJhbnNmb3Jtc1JlZ2lzdHJ5KXgoZSxvKTt0LnNjaGVtYSYmdC5zY2hlbWEubGF5b3V0JiZoKHUsdC5zY2hlbWEubGF5b3V0KX1mdW5jdGlvbiBtKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdC5uYW1lKXRocm93IG5ldyBFcnJvcigiVHJhbnNmb3JtIG1vZHVsZSAqbmFtZSogbXVzdCBiZSBhIHN0cmluZy4iKTt2YXIgZT0iVHJhbnNmb3JtIG1vZHVsZSAiK3QubmFtZSxpPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnRyYW5zZm9ybSxhPSJmdW5jdGlvbiI9PXR5cGVvZiB0LmNhbGNUcmFuc2Zvcm07aWYoIWkmJiFhKXRocm93IG5ldyBFcnJvcihlKyIgaXMgbWlzc2luZyBhICp0cmFuc2Zvcm0qIG9yICpjYWxjVHJhbnNmb3JtKiBtZXRob2QuIik7Zm9yKHZhciBzIGluIGkmJmEmJm4ubG9nKFtlKyIgaGFzIGJvdGggYSAqdHJhbnNmb3JtKiBhbmQgKmNhbGNUcmFuc2Zvcm0qIG1ldGhvZHMuIiwiUGxlYXNlIG5vdGUgdGhhdCBhbGwgKnRyYW5zZm9ybSogbWV0aG9kcyBhcmUgZXhlY3V0ZWQiLCJiZWZvcmUgYWxsICpjYWxjVHJhbnNmb3JtKiBtZXRob2RzLiJdLmpvaW4oIiAiKSksbyh0LmF0dHJpYnV0ZXMpfHxuLmxvZyhlKyIgcmVnaXN0ZXJlZCB3aXRob3V0IGFuICphdHRyaWJ1dGVzKiBvYmplY3QuIiksImZ1bmN0aW9uIiE9dHlwZW9mIHQuc3VwcGx5RGVmYXVsdHMmJm4ubG9nKGUrIiByZWdpc3RlcmVkIHdpdGhvdXQgYSAqc3VwcGx5RGVmYXVsdHMqIG1ldGhvZC4iKSxyLnRyYW5zZm9ybXNSZWdpc3RyeVt0Lm5hbWVdPXQsci5jb21wb25lbnRzUmVnaXN0cnkpeChzLHQubmFtZSl9ZnVuY3Rpb24gZyh0KXt2YXIgZT10Lm5hbWUsbj1lLnNwbGl0KCItIilbMF0saT10LmRpY3Rpb25hcnksYT10LmZvcm1hdCxvPWkmJk9iamVjdC5rZXlzKGkpLmxlbmd0aCxzPWEmJk9iamVjdC5rZXlzKGEpLmxlbmd0aCxsPXIubG9jYWxlUmVnaXN0cnksYz1sW2VdO2lmKGN8fChsW2VdPWM9e30pLG4hPT1lKXt2YXIgdT1sW25dO3V8fChsW25dPXU9e30pLG8mJnUuZGljdGlvbmFyeT09PWMuZGljdGlvbmFyeSYmKHUuZGljdGlvbmFyeT1pKSxzJiZ1LmZvcm1hdD09PWMuZm9ybWF0JiYodS5mb3JtYXQ9YSl9byYmKGMuZGljdGlvbmFyeT1pKSxzJiYoYy5mb3JtYXQ9YSl9ZnVuY3Rpb24gdih0KXtpZih0LmxheW91dEF0dHJpYnV0ZXMpe3ZhciBlPXQubGF5b3V0QXR0cmlidXRlcy5fYXJyYXlBdHRyUmVnZXhwcztpZihlKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWEoci5sYXlvdXRBcnJheVJlZ2V4ZXMsZVtuXSl9fWZ1bmN0aW9uIHkodCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XS5zY2hlbWE7aWYobiYmbi50cmFjZXMpe3ZhciBpPW4udHJhY2VzW2VdO2kmJmgoci5tb2R1bGVzW2VdLl9tb2R1bGUuYXR0cmlidXRlcyxpKX19ZnVuY3Rpb24geCh0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdLnNjaGVtYTtpZihuJiZuLnRyYW5zZm9ybXMpe3ZhciBpPW4udHJhbnNmb3Jtc1tlXTtpJiZoKHIudHJhbnNmb3Jtc1JlZ2lzdHJ5W2VdLmF0dHJpYnV0ZXMsaSl9fWZ1bmN0aW9uIGIodCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XS5zY2hlbWE7aWYobiYmbi5zdWJwbG90cyl7dmFyIGk9ci5zdWJwbG90c1JlZ2lzdHJ5W2VdLGE9aS5sYXlvdXRBdHRyaWJ1dGVzLG89InN1YnBsb3QiPT09aS5hdHRyP2kubmFtZTppLmF0dHI7QXJyYXkuaXNBcnJheShvKSYmKG89b1swXSk7dmFyIHM9bi5zdWJwbG90c1tvXTthJiZzJiZoKGEscyl9fWZ1bmN0aW9uIF8odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYodD10LnR5cGUpLHR9ci5tb2R1bGVzPXt9LHIuYWxsQ2F0ZWdvcmllcz17fSxyLmFsbFR5cGVzPVtdLHIuc3VicGxvdHNSZWdpc3RyeT17fSxyLnRyYW5zZm9ybXNSZWdpc3RyeT17fSxyLmNvbXBvbmVudHNSZWdpc3RyeT17fSxyLmxheW91dEFycmF5Q29udGFpbmVycz1bXSxyLmxheW91dEFycmF5UmVnZXhlcz1bXSxyLnRyYWNlTGF5b3V0QXR0cmlidXRlcz17fSxyLmxvY2FsZVJlZ2lzdHJ5PXt9LHIuYXBpTWV0aG9kUmVnaXN0cnk9e30sci5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcz1udWxsLHIucmVnaXN0ZXI9ZnVuY3Rpb24odCl7aWYoci5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcz1udWxsLCF0KXRocm93IG5ldyBFcnJvcigiTm8gYXJndW1lbnQgcGFzc2VkIHRvIFBsb3RseS5yZWdpc3Rlci4iKTt0JiYhQXJyYXkuaXNBcnJheSh0KSYmKHQ9W3RdKTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dFtlXTtpZighbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbW9kdWxlIHdhcyBhdHRlbXB0ZWQgdG8gYmUgcmVnaXN0ZXJlZCEiKTtzd2l0Y2gobi5tb2R1bGVUeXBlKXtjYXNlInRyYWNlIjpwKG4pO2JyZWFrO2Nhc2UidHJhbnNmb3JtIjptKG4pO2JyZWFrO2Nhc2UiY29tcG9uZW50IjpkKG4pO2JyZWFrO2Nhc2UibG9jYWxlIjpnKG4pO2JyZWFrO2Nhc2UiYXBpTWV0aG9kIjp2YXIgaT1uLm5hbWU7ci5hcGlNZXRob2RSZWdpc3RyeVtpXT1uLmZuO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1vZHVsZSB3YXMgYXR0ZW1wdGVkIHRvIGJlIHJlZ2lzdGVyZWQhIil9fX0sci5nZXRNb2R1bGU9ZnVuY3Rpb24odCl7dmFyIGU9ci5tb2R1bGVzW18odCldO3JldHVybiEhZSYmZS5fbW9kdWxlfSxyLnRyYWNlSXM9ZnVuY3Rpb24odCxlKXtpZigidmFyaW91cyI9PT0odD1fKHQpKSlyZXR1cm4hMTt2YXIgaT1yLm1vZHVsZXNbdF07cmV0dXJuIGl8fCh0JiZuLmxvZygiVW5yZWNvZ25pemVkIHRyYWNlIHR5cGUgIit0KyIuIiksaT1yLm1vZHVsZXNbYy50eXBlLmRmbHRdKSwhIWkuY2F0ZWdvcmllc1tlXX0sci5nZXRUcmFuc2Zvcm1JbmRpY2VzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dC50cmFuc2Zvcm1zfHxbXSxpPTA7aTxuLmxlbmd0aDtpKyspbltpXS50eXBlPT09ZSYmci5wdXNoKGkpO3JldHVybiByfSxyLmhhc1RyYW5zZm9ybT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LnRyYW5zZm9ybXN8fFtdLG49MDtuPHIubGVuZ3RoO24rKylpZihyW25dLnR5cGU9PT1lKXJldHVybiEwO3JldHVybiExfSxyLmdldENvbXBvbmVudE1ldGhvZD1mdW5jdGlvbih0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdO3JldHVybiBuJiZuW2VdfHxpfSxyLmNhbGw9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF0sZT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gci5hcGlNZXRob2RSZWdpc3RyeVt0XS5hcHBseShudWxsLGUpfX0seyIuL2xpYi9kb20iOjc2NCwiLi9saWIvZXh0ZW5kIjo3NjYsIi4vbGliL2lzX3BsYWluX29iamVjdCI6Nzc3LCIuL2xpYi9sb2dnZXJzIjo3ODAsIi4vbGliL25vb3AiOjc4NSwiLi9saWIvcHVzaF91bmlxdWUiOjc5MSwiLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiOjg4MX1dLDkwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpLGk9dCgiLi4vbGliIiksYT1pLmV4dGVuZEZsYXQsbz1pLmV4dGVuZERlZXA7ZnVuY3Rpb24gcyh0KXt2YXIgZTtzd2l0Y2godCl7Y2FzZSJ0aGVtZXNfX3RodW1iIjplPXthdXRvc2l6ZTohMCx3aWR0aDoxNTAsaGVpZ2h0OjE1MCx0aXRsZTp7dGV4dDoiIn0sc2hvd2xlZ2VuZDohMSxtYXJnaW46e2w6NSxyOjUsdDo1LGI6NSxwYWQ6MH0sYW5ub3RhdGlvbnM6W119O2JyZWFrO2Nhc2UidGh1bWJuYWlsIjplPXt0aXRsZTp7dGV4dDoiIn0saGlkZXNvdXJjZXM6ITAsc2hvd2xlZ2VuZDohMSxib3JkZXJ3aWR0aDowLGJvcmRlcmNvbG9yOiIiLG1hcmdpbjp7bDoxLHI6MSx0OjEsYjoxLHBhZDowfSxhbm5vdGF0aW9uczpbXX07YnJlYWs7ZGVmYXVsdDplPXt9fXJldHVybiBlfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksbD10LmRhdGEsYz10LmxheW91dCx1PW8oW10sbCksZj1vKHt9LGMscyhlLnRpbGVDbGFzcykpLGg9dC5fY29udGV4dHx8e307aWYoZS53aWR0aCYmKGYud2lkdGg9ZS53aWR0aCksZS5oZWlnaHQmJihmLmhlaWdodD1lLmhlaWdodCksInRodW1ibmFpbCI9PT1lLnRpbGVDbGFzc3x8InRoZW1lc19fdGh1bWIiPT09ZS50aWxlQ2xhc3Mpe2YuYW5ub3RhdGlvbnM9W107dmFyIHA9T2JqZWN0LmtleXMoZik7Zm9yKHI9MDtyPHAubGVuZ3RoO3IrKylpPXBbcl0sWyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXS5pbmRleE9mKGkuc2xpY2UoMCw1KSk+LTEmJihmW3Bbcl1dLnRpdGxlPXt0ZXh0OiIifSk7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKyl7dmFyIGQ9dVtyXTtkLnNob3dzY2FsZT0hMSxkLm1hcmtlciYmKGQubWFya2VyLnNob3dzY2FsZT0hMSksbi50cmFjZUlzKGQsInBpZS1saWtlIikmJihkLnRleHRwb3NpdGlvbj0ibm9uZSIpfX1pZihBcnJheS5pc0FycmF5KGUuYW5ub3RhdGlvbnMpKWZvcihyPTA7cjxlLmFubm90YXRpb25zLmxlbmd0aDtyKyspZi5hbm5vdGF0aW9ucy5wdXNoKGUuYW5ub3RhdGlvbnNbcl0pO3ZhciBtPU9iamVjdC5rZXlzKGYpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF0Y2goL15zY2VuZVxkKiQvKX0pKTtpZihtLmxlbmd0aCl7dmFyIGc9e307Zm9yKCJ0aHVtYm5haWwiPT09ZS50aWxlQ2xhc3MmJihnPXt0aXRsZTp7dGV4dDoiIn0sc2hvd2F4ZXNsYWJlbHM6ITEsc2hvd3RpY2tsYWJlbHM6ITEsbGluZXRpY2tlbmFibGU6ITF9KSxyPTA7cjxtLmxlbmd0aDtyKyspe3ZhciB2PWZbbVtyXV07di54YXhpc3x8KHYueGF4aXM9e30pLHYueWF4aXN8fCh2LnlheGlzPXt9KSx2LnpheGlzfHwodi56YXhpcz17fSksYSh2LnhheGlzLGcpLGEodi55YXhpcyxnKSxhKHYuemF4aXMsZyksdi5fc2NlbmU9bnVsbH19dmFyIHk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZS50aWxlQ2xhc3MmJih5LmNsYXNzTmFtZT1lLnRpbGVDbGFzcyk7dmFyIHg9e2dkOnksdGQ6eSxsYXlvdXQ6ZixkYXRhOnUsY29uZmlnOntzdGF0aWNQbG90OnZvaWQgMD09PWUuc3RhdGljUGxvdHx8ZS5zdGF0aWNQbG90LHBsb3RHbFBpeGVsUmF0aW86dm9pZCAwPT09ZS5wbG90R2xQaXhlbFJhdGlvPzI6ZS5wbG90R2xQaXhlbFJhdGlvLGRpc3BsYXlsb2dvOmUuZGlzcGxheWxvZ298fCExLHNob3dMaW5rOmUuc2hvd0xpbmt8fCExLHNob3dUaXBzOmUuc2hvd1RpcHN8fCExLG1hcGJveEFjY2Vzc1Rva2VuOmgubWFwYm94QWNjZXNzVG9rZW59fTtyZXR1cm4idHJhbnNwYXJlbnQiIT09ZS5zZXRCYWNrZ3JvdW5kJiYoeC5jb25maWcuc2V0QmFja2dyb3VuZD1lLnNldEJhY2tncm91bmR8fCJvcGFxdWUiKSx4LmdkLmRlZmF1bHRMYXlvdXQ9cyhlLnRpbGVDbGFzcykseH19LHsiLi4vbGliIjo3NzYsIi4uL3JlZ2lzdHJ5Ijo5MDR9XSw5MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9wbG90X2FwaS90b19pbWFnZSIpLGE9dCgiLi9maWxlc2F2ZXIiKSxvPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBuLmlzUGxhaW5PYmplY3QodCl8fChyPW4uZ2V0R3JhcGhEaXYodCkpLChlPWV8fHt9KS5mb3JtYXQ9ZS5mb3JtYXR8fCJwbmciLGUud2lkdGg9ZS53aWR0aHx8bnVsbCxlLmhlaWdodD1lLmhlaWdodHx8bnVsbCxlLmltYWdlRGF0YU9ubHk9ITAsbmV3IFByb21pc2UoKGZ1bmN0aW9uKHMsbCl7ciYmci5fc25hcHNob3RJblByb2dyZXNzJiZsKG5ldyBFcnJvcigiU25hcHNob3R0aW5nIGFscmVhZHkgaW4gcHJvZ3Jlc3MuIikpLG4uaXNJRSgpJiYic3ZnIiE9PWUuZm9ybWF0JiZsKG5ldyBFcnJvcihvLk1TR19JRV9CQURfRk9STUFUKSksciYmKHIuX3NuYXBzaG90SW5Qcm9ncmVzcz0hMCk7dmFyIGM9aSh0LGUpLHU9ZS5maWxlbmFtZXx8dC5mbnx8Im5ld3Bsb3QiO3UrPSIuIitlLmZvcm1hdC5yZXBsYWNlKCItIiwiLiIpLGMudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHImJihyLl9zbmFwc2hvdEluUHJvZ3Jlc3M9ITEpLGEodCx1LGUuZm9ybWF0KX0pKS50aGVuKChmdW5jdGlvbih0KXtzKHQpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtyJiYoci5fc25hcHNob3RJblByb2dyZXNzPSExKSxsKHQpfSkpfSkpfX0seyIuLi9saWIiOjc3NiwiLi4vcGxvdF9hcGkvdG9faW1hZ2UiOjgxOSwiLi9maWxlc2F2ZXIiOjkwNywiLi9oZWxwZXJzIjo5MDh9XSw5MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxvPSJkb3dubG9hZCJpbiBhO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocyxsKXt2YXIgYyx1O2lmKG4uaXNJRSgpKXJldHVybiBjPWkuY3JlYXRlQmxvYih0LCJzdmciKSx3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IoYyxlKSxjPW51bGwscyhlKTtpZihvKXJldHVybiBjPWkuY3JlYXRlQmxvYih0LHIpLHU9aS5jcmVhdGVPYmplY3RVUkwoYyksYS5ocmVmPXUsYS5kb3dubG9hZD1lLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSksaS5yZXZva2VPYmplY3RVUkwodSksYz1udWxsLHMoZSk7aWYobi5pc1NhZmFyaSgpKXt2YXIgZj0ic3ZnIj09PXI/IiwiOiI7YmFzZTY0LCI7cmV0dXJuIGkub2N0ZXRTdHJlYW0oZitlbmNvZGVVUklDb21wb25lbnQodCkpLHMoZSl9bChuZXcgRXJyb3IoImRvd25sb2FkIGVycm9yIikpfSkpfX0seyIuLi9saWIiOjc3NiwiLi9oZWxwZXJzIjo5MDh9XSw5MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcmVnaXN0cnkiKTtyLmdldERlbGF5PWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9oYXMmJih0Ll9oYXMoImdsM2QiKXx8dC5faGFzKCJnbDJkIil8fHQuX2hhcygibWFwYm94IikpPzUwMDowfSxyLmdldFJlZHJhd0Z1bmM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7bi5nZXRDb21wb25lbnRNZXRob2QoImNvbG9yYmFyIiwiZHJhdyIpKHQpfX0sci5lbmNvZGVTVkc9ZnVuY3Rpb24odCl7cmV0dXJuImRhdGE6aW1hZ2Uvc3ZnK3htbCwiK2VuY29kZVVSSUNvbXBvbmVudCh0KX0sci5lbmNvZGVKU09OPWZ1bmN0aW9uKHQpe3JldHVybiJkYXRhOmFwcGxpY2F0aW9uL2pzb24sIitlbmNvZGVVUklDb21wb25lbnQodCl9O3ZhciBpPXdpbmRvdy5VUkx8fHdpbmRvdy53ZWJraXRVUkw7ci5jcmVhdGVPYmplY3RVUkw9ZnVuY3Rpb24odCl7cmV0dXJuIGkuY3JlYXRlT2JqZWN0VVJMKHQpfSxyLnJldm9rZU9iamVjdFVSTD1mdW5jdGlvbih0KXtyZXR1cm4gaS5yZXZva2VPYmplY3RVUkwodCl9LHIuY3JlYXRlQmxvYj1mdW5jdGlvbih0LGUpe2lmKCJzdmciPT09ZSlyZXR1cm4gbmV3IHdpbmRvdy5CbG9iKFt0XSx7dHlwZToiaW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04In0pO2lmKCJmdWxsLWpzb24iPT09ZSlyZXR1cm4gbmV3IHdpbmRvdy5CbG9iKFt0XSx7dHlwZToiYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04In0pO3ZhciByPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheUJ1ZmZlcihlKSxuPW5ldyBVaW50OEFycmF5KHIpLGk9MDtpPGU7aSsrKW5baV09dC5jaGFyQ29kZUF0KGkpO3JldHVybiByfSh3aW5kb3cuYXRvYih0KSk7cmV0dXJuIG5ldyB3aW5kb3cuQmxvYihbcl0se3R5cGU6ImltYWdlLyIrZX0pfSxyLm9jdGV0U3RyZWFtPWZ1bmN0aW9uKHQpe2RvY3VtZW50LmxvY2F0aW9uLmhyZWY9ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIit0fSxyLklNQUdFX1VSTF9QUkVGSVg9L15kYXRhOmltYWdlXC9cdys7YmFzZTY0LC8sci5NU0dfSUVfQkFEX0ZPUk1BVD0iU29ycnkgSUUgZG9lcyBub3Qgc3VwcG9ydCBkb3dubG9hZGluZyBmcm9tIGNhbnZhcy4gVHJ5IHtmb3JtYXQ6J3N2Zyd9IGluc3RlYWQuIn0seyIuLi9yZWdpc3RyeSI6OTA0fV0sOTA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaGVscGVycyIpLGk9e2dldERlbGF5Om4uZ2V0RGVsYXksZ2V0UmVkcmF3RnVuYzpuLmdldFJlZHJhd0Z1bmMsY2xvbmU6dCgiLi9jbG9uZXBsb3QiKSx0b1NWRzp0KCIuL3Rvc3ZnIiksc3ZnVG9JbWc6dCgiLi9zdmd0b2ltZyIpLHRvSW1hZ2U6dCgiLi90b2ltYWdlIiksZG93bmxvYWRJbWFnZTp0KCIuL2Rvd25sb2FkIil9O2UuZXhwb3J0cz1pfSx7Ii4vY2xvbmVwbG90Ijo5MDUsIi4vZG93bmxvYWQiOjkwNiwiLi9oZWxwZXJzIjo5MDgsIi4vc3ZndG9pbWciOjkxMCwiLi90b2ltYWdlIjo5MTEsIi4vdG9zdmciOjkxMn1dLDkxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoImV2ZW50cyIpLkV2ZW50RW1pdHRlcixhPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmVtaXR0ZXJ8fG5ldyBpLHI9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGksbyl7dmFyIHM9d2luZG93LkltYWdlLGw9dC5zdmcsYz10LmZvcm1hdHx8InBuZyI7aWYobi5pc0lFKCkmJiJzdmciIT09Yyl7dmFyIHU9bmV3IEVycm9yKGEuTVNHX0lFX0JBRF9GT1JNQVQpO3JldHVybiBvKHUpLHQucHJvbWlzZT9yOmUuZW1pdCgiZXJyb3IiLHUpfXZhciBmLGgscD10LmNhbnZhcyxkPXQuc2NhbGV8fDEsbT10LndpZHRofHwzMDAsZz10LmhlaWdodHx8MTUwLHY9ZCptLHk9ZCpnLHg9cC5nZXRDb250ZXh0KCIyZCIpLGI9bmV3IHM7InN2ZyI9PT1jfHxuLmlzU2FmYXJpKCk/aD1hLmVuY29kZVNWRyhsKTooZj1hLmNyZWF0ZUJsb2IobCwic3ZnIiksaD1hLmNyZWF0ZU9iamVjdFVSTChmKSkscC53aWR0aD12LHAuaGVpZ2h0PXksYi5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgcjtzd2l0Y2goZj1udWxsLGEucmV2b2tlT2JqZWN0VVJMKGgpLCJzdmciIT09YyYmeC5kcmF3SW1hZ2UoYiwwLDAsdix5KSxjKXtjYXNlImpwZWciOnI9cC50b0RhdGFVUkwoImltYWdlL2pwZWciKTticmVhaztjYXNlInBuZyI6cj1wLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7YnJlYWs7Y2FzZSJ3ZWJwIjpyPXAudG9EYXRhVVJMKCJpbWFnZS93ZWJwIik7YnJlYWs7Y2FzZSJzdmciOnI9aDticmVhaztkZWZhdWx0OnZhciBuPSJJbWFnZSBmb3JtYXQgaXMgbm90IGpwZWcsIHBuZywgc3ZnIG9yIHdlYnAuIjtpZihvKG5ldyBFcnJvcihuKSksIXQucHJvbWlzZSlyZXR1cm4gZS5lbWl0KCJlcnJvciIsbil9aShyKSx0LnByb21pc2V8fGUuZW1pdCgic3VjY2VzcyIscil9LGIub25lcnJvcj1mdW5jdGlvbihyKXtpZihmPW51bGwsYS5yZXZva2VPYmplY3RVUkwoaCksbyhyKSwhdC5wcm9taXNlKXJldHVybiBlLmVtaXQoImVycm9yIixyKX0sYi5zcmM9aH0pKTtyZXR1cm4gdC5wcm9taXNlP3I6ZX19LHsiLi4vbGliIjo3NzYsIi4vaGVscGVycyI6OTA4LGV2ZW50czoyMzd9XSw5MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZXZlbnRzIikuRXZlbnRFbWl0dGVyLGk9dCgiLi4vcmVnaXN0cnkiKSxhPXQoIi4uL2xpYiIpLG89dCgiLi9oZWxwZXJzIikscz10KCIuL2Nsb25lcGxvdCIpLGw9dCgiLi90b3N2ZyIpLGM9dCgiLi9zdmd0b2ltZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBuLHU9cyh0LHtmb3JtYXQ6InBuZyJ9KSxmPXUuZ2Q7Zi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGYuc3R5bGUubGVmdD0iLTUwMDBweCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmKTt2YXIgaD1vLmdldFJlZHJhd0Z1bmMoZik7cmV0dXJuIGkuY2FsbCgiX2RvUGxvdCIsZix1LmRhdGEsdS5sYXlvdXQsdS5jb25maWcpLnRoZW4oaCkudGhlbigoZnVuY3Rpb24oKXt2YXIgdD1vLmdldERlbGF5KGYuX2Z1bGxMYXlvdXQpO3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIHQ9bChmKSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO24uaWQ9YS5yYW5kc3RyKCksKHI9Yyh7Zm9ybWF0OmUuZm9ybWF0LHdpZHRoOmYuX2Z1bGxMYXlvdXQud2lkdGgsaGVpZ2h0OmYuX2Z1bGxMYXlvdXQuaGVpZ2h0LGNhbnZhczpuLGVtaXR0ZXI6cixzdmc6dH0pKS5jbGVhbj1mdW5jdGlvbigpe2YmJmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZil9fSksdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpe3IuZW1pdCgiZXJyb3IiLHQpfSkpLHJ9fSx7Ii4uL2xpYiI6Nzc2LCIuLi9yZWdpc3RyeSI6OTA0LCIuL2Nsb25lcGxvdCI6OTA1LCIuL2hlbHBlcnMiOjkwOCwiLi9zdmd0b2ltZyI6OTEwLCIuL3Rvc3ZnIjo5MTIsZXZlbnRzOjIzN31dLDkxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi9saWIiKSxhPXQoIi4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxsPS8iL2csYz1uZXcgUmVnRXhwKCcoIlRPQkVTVFJJUFBFRCl8KFRPQkVTVFJJUFBFRCIpJywiZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHUsZixoPXQuX2Z1bGxMYXlvdXQscD1oLl9wYXBlcixkPWguX3RvcHBhcGVyLG09aC53aWR0aCxnPWguaGVpZ2h0O3AuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuY2FsbChhLnNldFJlY3QsMCwwLG0sZykuY2FsbChvLmZpbGwsaC5wYXBlcl9iZ2NvbG9yKTt2YXIgdj1oLl9iYXNlUGxvdE1vZHVsZXN8fFtdO2Zvcih1PTA7dTx2Lmxlbmd0aDt1Kyspe3ZhciB5PXZbdV07eS50b1NWRyYmeS50b1NWRyh0KX1pZihkKXt2YXIgeD1kLm5vZGUoKS5jaGlsZE5vZGVzLGI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoeCk7Zm9yKHU9MDt1PGIubGVuZ3RoO3UrKyl7dmFyIF89Ylt1XTtfLmNoaWxkTm9kZXMubGVuZ3RoJiZwLm5vZGUoKS5hcHBlbmRDaGlsZChfKX19aC5fZHJhZ2dlcnMmJmguX2RyYWdnZXJzLnJlbW92ZSgpLHAubm9kZSgpLnN0eWxlLmJhY2tncm91bmQ9IiIscC5zZWxlY3RBbGwoInRleHQiKS5hdHRyKHsiZGF0YS11bmZvcm1hdHRlZCI6bnVsbCwiZGF0YS1tYXRoIjpudWxsfSkuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTtpZigiaGlkZGVuIiE9PXRoaXMuc3R5bGUudmlzaWJpbGl0eSYmIm5vbmUiIT09dGhpcy5zdHlsZS5kaXNwbGF5KXt0LnN0eWxlKHt2aXNpYmlsaXR5Om51bGwsZGlzcGxheTpudWxsfSk7dmFyIGU9dGhpcy5zdHlsZS5mb250RmFtaWx5O2UmJi0xIT09ZS5pbmRleE9mKCciJykmJnQuc3R5bGUoImZvbnQtZmFtaWx5IixlLnJlcGxhY2UobCwiVE9CRVNUUklQUEVEIikpfWVsc2UgdC5yZW1vdmUoKX0pKTt2YXIgdz1bXTtpZihoLl9ncmFkaWVudFVybFF1ZXJ5UGFydHMpZm9yKGYgaW4gaC5fZ3JhZGllbnRVcmxRdWVyeVBhcnRzKXcucHVzaChmKTtpZihoLl9wYXR0ZXJuVXJsUXVlcnlQYXJ0cylmb3IoZiBpbiBoLl9wYXR0ZXJuVXJsUXVlcnlQYXJ0cyl3LnB1c2goZik7dy5sZW5ndGgmJnAuc2VsZWN0QWxsKHcuam9pbigiLCIpKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dGhpcy5zdHlsZS5maWxsO2UmJi0xIT09ZS5pbmRleE9mKCJ1cmwoIikmJnQuc3R5bGUoImZpbGwiLGUucmVwbGFjZShsLCJUT0JFU1RSSVBQRUQiKSk7dmFyIHI9dGhpcy5zdHlsZS5zdHJva2U7ciYmLTEhPT1yLmluZGV4T2YoInVybCgiKSYmdC5zdHlsZSgic3Ryb2tlIixyLnJlcGxhY2UobCwiVE9CRVNUUklQUEVEIikpfSkpLCJwZGYiIT09ZSYmImVwcyIhPT1lfHxwLnNlbGVjdEFsbCgiI01hdGhKYXhfU1ZHX2dseXBocyBwYXRoIikuYXR0cigic3Ryb2tlLXdpZHRoIiwwKSxwLm5vZGUoKS5zZXRBdHRyaWJ1dGVOUyhzLnhtbG5zLCJ4bWxucyIscy5zdmcpLHAubm9kZSgpLnNldEF0dHJpYnV0ZU5TKHMueG1sbnMsInhtbG5zOnhsaW5rIixzLnhsaW5rKSwic3ZnIj09PWUmJnImJihwLmF0dHIoIndpZHRoIixyKm0pLHAuYXR0cigiaGVpZ2h0IixyKmcpLHAuYXR0cigidmlld0JveCIsIjAgMCAiK20rIiAiK2cpKTt2YXIgVD0obmV3IHdpbmRvdy5YTUxTZXJpYWxpemVyKS5zZXJpYWxpemVUb1N0cmluZyhwLm5vZGUoKSk7cmV0dXJuIFQ9ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QoImJvZHkiKS5hcHBlbmQoImRpdiIpLnN0eWxlKHtkaXNwbGF5OiJub25lIn0pLmh0bWwoIiIpLHI9dC5yZXBsYWNlKC8oJlteO10qOykvZ2ksKGZ1bmN0aW9uKHQpe3JldHVybiImbHQ7Ij09PXQ/IiYjNjA7IjoiJnJ0OyI9PT10PyImIzYyOyI6LTEhPT10LmluZGV4T2YoIjwiKXx8LTEhPT10LmluZGV4T2YoIj4iKT8iIjplLmh0bWwodCkudGV4dCgpfSkpO3JldHVybiBlLnJlbW92ZSgpLHJ9KFQpLFQ9KFQ9VC5yZXBsYWNlKC8mKD8hXHcrO3xcI1swLTldKzt8IFwjeFswLTlBLUZdKzspL2csIiZhbXA7IikpLnJlcGxhY2UoYywiJyIpLGkuaXNJRSgpJiYoVD0oVD0oVD1ULnJlcGxhY2UoLyIvZ2ksIiciKSkucmVwbGFjZSgvKFwoJyMpKFteJ10qKSgnXCkpL2dpLCcoIiMkMiIpJykpLnJlcGxhY2UoLyhcXCcpL2dpLCciJykpLFR9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3NTMsIi4uL2xpYiI6Nzc2LCJAcGxvdGx5L2QzIjo1OH1dLDkxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdLmk9cjtuLm1lcmdlQXJyYXkoZS50ZXh0LHQsInR4Iiksbi5tZXJnZUFycmF5KGUuaG92ZXJ0ZXh0LHQsImh0eCIpO3ZhciBpPWUubWFya2VyO2lmKGkpe24ubWVyZ2VBcnJheShpLm9wYWNpdHksdCwibW8iLCEwKSxuLm1lcmdlQXJyYXkoaS5jb2xvcix0LCJtYyIpO3ZhciBhPWkubGluZTthJiYobi5tZXJnZUFycmF5KGEuY29sb3IsdCwibWxjIiksbi5tZXJnZUFycmF5Q2FzdFBvc2l0aXZlKGEud2lkdGgsdCwibWx3IikpfX19LHsiLi4vLi4vbGliIjo3NzZ9XSw5MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmF4aXNIb3ZlckZvcm1hdCxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYz10KCIuL2NvbnN0YW50cyIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5wYXR0ZXJuLGY9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaD1sKHtlZGl0VHlwZToiY2FsYyIsYXJyYXlPazohMCxjb2xvckVkaXRUeXBlOiJzdHlsZSJ9KSxwPWYoe30sbi5tYXJrZXIubGluZS53aWR0aCx7ZGZsdDowfSksZD1mKHt3aWR0aDpwLGVkaXRUeXBlOiJjYWxjIn0scygibWFya2VyLmxpbmUiKSksbT1mKHtsaW5lOmQsZWRpdFR5cGU6ImNhbGMifSxzKCJtYXJrZXIiKSx7b3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6MSxtaW46MCxtYXg6MSxlZGl0VHlwZToic3R5bGUifSxwYXR0ZXJuOnV9KTtlLmV4cG9ydHM9e3g6bi54LHgwOm4ueDAsZHg6bi5keCx5Om4ueSx5MDpuLnkwLGR5Om4uZHkseHBlcmlvZDpuLnhwZXJpb2QseXBlcmlvZDpuLnlwZXJpb2QseHBlcmlvZDA6bi54cGVyaW9kMCx5cGVyaW9kMDpuLnlwZXJpb2QwLHhwZXJpb2RhbGlnbm1lbnQ6bi54cGVyaW9kYWxpZ25tZW50LHlwZXJpb2RhbGlnbm1lbnQ6bi55cGVyaW9kYWxpZ25tZW50LHhob3ZlcmZvcm1hdDppKCJ4IikseWhvdmVyZm9ybWF0OmkoInkiKSx0ZXh0Om4udGV4dCx0ZXh0dGVtcGxhdGU6byh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpjLmV2ZW50RGF0YUtleXN9KSxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTphKHt9LHtrZXlzOmMuZXZlbnREYXRhS2V5c30pLHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5zaWRlIiwib3V0c2lkZSIsImF1dG8iLCJub25lIl0sZGZsdDoiYXV0byIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGluc2lkZXRleHRhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImVuZCIsIm1pZGRsZSIsInN0YXJ0Il0sZGZsdDoiZW5kIixlZGl0VHlwZToicGxvdCJ9LHRleHRhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJwbG90In0sdGV4dGZvbnQ6Zih7fSxoLHt9KSxpbnNpZGV0ZXh0Zm9udDpmKHt9LGgse30pLG91dHNpZGV0ZXh0Zm9udDpmKHt9LGgse30pLGNvbnN0cmFpbnRleHQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluc2lkZSIsIm91dHNpZGUiLCJib3RoIiwibm9uZSJdLGRmbHQ6ImJvdGgiLGVkaXRUeXBlOiJjYWxjIn0sY2xpcG9uYXhpczpmKHt9LG4uY2xpcG9uYXhpcyx7fSksb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxiYXNlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6bnVsbCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sb2Zmc2V0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLG1pbjowLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxtYXJrZXI6bSxvZmZzZXRncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sYWxpZ25tZW50Z3JvdXA6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6bi5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSxjb2xvcjpuLnNlbGVjdGVkLm1hcmtlci5jb2xvcixlZGl0VHlwZToic3R5bGUifSx0ZXh0Zm9udDpuLnNlbGVjdGVkLnRleHRmb250LGVkaXRUeXBlOiJzdHlsZSJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTpuLnVuc2VsZWN0ZWQubWFya2VyLm9wYWNpdHksY29sb3I6bi51bnNlbGVjdGVkLm1hcmtlci5jb2xvcixlZGl0VHlwZToic3R5bGUifSx0ZXh0Zm9udDpuLnVuc2VsZWN0ZWQudGV4dGZvbnQsZWRpdFR5cGU6InN0eWxlIn0sX2RlcHJlY2F0ZWQ6e2JhcmRpcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZWRpdFR5cGU6ImNhbGMiLHZhbHVlczpbInYiLCJoIl19fX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY0NiwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjY2MCwiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6ODMwLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjg1NiwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODk5LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExOTEsIi4vY29uc3RhbnRzIjo5MTZ9XSw5MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIikscz10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLGw9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGMsdSxmLGgscCxkPW4uZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxtPW4uZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxnPXttc1VUQzohKCFlLmJhc2UmJjAhPT1lLmJhc2UpfTsiaCI9PT1lLm9yaWVudGF0aW9uPyhyPWQubWFrZUNhbGNkYXRhKGUsIngiLGcpLHU9bS5tYWtlQ2FsY2RhdGEoZSwieSIpLGY9aShlLG0sInkiLHUpLGg9ISFlLnlwZXJpb2RhbGlnbm1lbnQscD0ieSIpOihyPW0ubWFrZUNhbGNkYXRhKGUsInkiLGcpLHU9ZC5tYWtlQ2FsY2RhdGEoZSwieCIpLGY9aShlLGQsIngiLHUpLGg9ISFlLnhwZXJpb2RhbGlnbm1lbnQscD0ieCIpLGM9Zi52YWxzO2Zvcih2YXIgdj1NYXRoLm1pbihjLmxlbmd0aCxyLmxlbmd0aCkseT1uZXcgQXJyYXkodikseD0wO3g8djt4KyspeVt4XT17cDpjW3hdLHM6clt4XX0saCYmKHlbeF0ub3JpZ19wPXVbeF0seVt4XVtwKyJFbmQiXT1mLmVuZHNbeF0seVt4XVtwKyJTdGFydCJdPWYuc3RhcnRzW3hdKSxlLmlkcyYmKHlbeF0uaWQ9U3RyaW5nKGUuaWRzW3hdKSk7cmV0dXJuIGEoZSwibWFya2VyIikmJm8odCxlLHt2YWxzOmUubWFya2VyLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyIixjTGV0dGVyOiJjIn0pLGEoZSwibWFya2VyLmxpbmUiKSYmbyh0LGUse3ZhbHM6ZS5tYXJrZXIubGluZS5jb2xvcixjb250YWluZXJTdHI6Im1hcmtlci5saW5lIixjTGV0dGVyOiJjIn0pLHMoeSxlKSxsKHksZSkseX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjY0NywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjY1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCI6ODI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjoxMTkzLCIuL2FycmF5c190b19jYWxjZGF0YSI6OTEzfV0sOTE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17VEVYVFBBRDozLGV2ZW50RGF0YUtleXM6WyJ2YWx1ZSIsImxhYmVsIl19fSx7fV0sOTE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIikuZ2V0QXhpc0dyb3VwLGM9dCgiLi9zaWV2ZS5qcyIpO2Z1bmN0aW9uIHUodCxlLHIsbyx1KXtpZihvLmxlbmd0aCl7dmFyIGIsXyx3LFQ7c3dpdGNoKGZ1bmN0aW9uKHQsZSl7dmFyIHIsYTtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbyxzPWVbcl0sbD1zWzBdLnRyYWNlLGM9ImZ1bm5lbCI9PT1sLnR5cGU/bC5fYmFzZTpsLmJhc2UsdT0iaCI9PT1sLm9yaWVudGF0aW9uP2wueGNhbGVuZGFyOmwueWNhbGVuZGFyLGY9ImNhdGVnb3J5Ij09PXQudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09dC50eXBlP2Z1bmN0aW9uKCl7cmV0dXJuIG51bGx9OnQuZDJjO2lmKGkoYykpe2ZvcihhPTA7YTxNYXRoLm1pbihjLmxlbmd0aCxzLmxlbmd0aCk7YSsrKW89ZihjW2FdLDAsdSksbihvKT8oc1thXS5iPStvLHNbYV0uaGFzQj0xKTpzW2FdLmI9MDtmb3IoO2E8cy5sZW5ndGg7YSsrKXNbYV0uYj0wfWVsc2V7bz1mKGMsMCx1KTt2YXIgaD1uKG8pO2ZvcihvPWg/bzowLGE9MDthPHMubGVuZ3RoO2ErKylzW2FdLmI9byxoJiYoc1thXS5oYXNCPTEpfX19KHIsbyksdS5tb2RlKXtjYXNlIm92ZXJsYXkiOmYoZSxyLG8sdSk7YnJlYWs7Y2FzZSJncm91cCI6Zm9yKGI9W10sXz1bXSx3PTA7dzxvLmxlbmd0aDt3Kyspdm9pZCAwPT09KFQ9b1t3XSlbMF0udHJhY2Uub2Zmc2V0P18ucHVzaChUKTpiLnB1c2goVCk7Xy5sZW5ndGgmJmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89bmV3IGMobix7cG9zQXhpczplLHNlcE5lZ1ZhbDohMSxvdmVybGFwTm9NZXJnZTohaS5ub3JtfSk7KGZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10Ll9mdWxsTGF5b3V0LGE9ci5wb3NpdGlvbnMsbz1yLmRpc3RpbmN0UG9zaXRpb25zLHM9ci5taW5EaWZmLGM9ci50cmFjZXMsdT1jLmxlbmd0aCxmPWEubGVuZ3RoIT09by5sZW5ndGgsaD1zKigxLW4uZ2FwKSxnPWwoaSxlLl9pZCkrY1swXVswXS50cmFjZS5vcmllbnRhdGlvbix2PWkuX2FsaWdubWVudE9wdHNbZ118fHt9LHk9MDt5PHU7eSsrKXt2YXIgeCxiLF89Y1t5XSx3PV9bMF0udHJhY2UsVD12W3cuYWxpZ25tZW50Z3JvdXBdfHx7fSxrPU9iamVjdC5rZXlzKFQub2Zmc2V0R3JvdXBzfHx7fSkubGVuZ3RoLEE9KHg9az9oL2s6Zj9oL3U6aCkqKDEtKG4uZ3JvdXBnYXB8fDApKTtiPWs/KCgyKncuX29mZnNldEluZGV4KzEtaykqeC1BKS8yOmY/KCgyKnkrMS11KSp4LUEpLzI6LUEvMjt2YXIgTT1fWzBdLnQ7TS5iYXJ3aWR0aD1BLE0ucG9mZnNldD1iLE0uYmFyZ3JvdXB3aWR0aD1oLE0uYmFyZGVsdGE9c31yLmJpbldpZHRoPWNbMF1bMF0udC5iYXJ3aWR0aC8xMDAscChyKSxkKGUsciksbShlLHIsZil9KSh0LGUsbyxpKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LnRyYWNlcyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYodm9pZCAwPT09aVswXS50cmFjZS5iYXNlKWZvcih2YXIgbz1uZXcgYyhbaV0se3Bvc0F4aXM6ZSxzZXBOZWdWYWw6ITAsb3ZlcmxhcE5vTWVyZ2U6ITB9KSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc107aWYobC5wIT09YSl7dmFyIHU9by5wdXQobC5wLGwuYitsLnMpO3UmJihsLmI9dSl9fX19KG8sZSksaS5ub3JtPyh2KG8pLHkocixvLGkpKTpnKHIsbyl9KHQsZSxyLF8sdSksYi5sZW5ndGgmJmYoZSxyLGIsdSk7YnJlYWs7Y2FzZSJzdGFjayI6Y2FzZSJyZWxhdGl2ZSI6Zm9yKGI9W10sXz1bXSx3PTA7dzxvLmxlbmd0aDt3Kyspdm9pZCAwPT09KFQ9b1t3XSlbMF0udHJhY2UuYmFzZT9fLnB1c2goVCk6Yi5wdXNoKFQpO18ubGVuZ3RoJiZmdW5jdGlvbih0LGUscixuLGkpe3ZhciBvPW5ldyBjKG4se3Bvc0F4aXM6ZSxzZXBOZWdWYWw6InJlbGF0aXZlIj09PWkubW9kZSxvdmVybGFwTm9NZXJnZTohKGkubm9ybXx8InN0YWNrIj09PWkubW9kZXx8InJlbGF0aXZlIj09PWkubW9kZSl9KTtoKGUsbyxpKSxmdW5jdGlvbih0LGUscil7dmFyIG4saSxvLGwsYyx1LGY9eCh0KSxoPWUudHJhY2VzO2ZvcihsPTA7bDxoLmxlbmd0aDtsKyspaWYobj1oW2xdLCJmdW5uZWwiPT09KGk9blswXS50cmFjZSkudHlwZSlmb3IoYz0wO2M8bi5sZW5ndGg7YysrKSh1PW5bY10pLnMhPT1hJiZlLnB1dCh1LnAsLS41KnUucyk7Zm9yKGw9MDtsPGgubGVuZ3RoO2wrKyl7bj1oW2xdLGk9blswXS50cmFjZSxvPSJmdW5uZWwiPT09aS50eXBlO3ZhciBwPVtdO2ZvcihjPTA7YzxuLmxlbmd0aDtjKyspaWYoKHU9bltjXSkucyE9PWEpe3ZhciBkO2Q9bz91LnM6dS5zK3UuYjt2YXIgbT1lLnB1dCh1LnAsZCksZz1tK2Q7dS5iPW0sdVtmXT1nLHIubm9ybXx8KHAucHVzaChnKSx1Lmhhc0ImJnAucHVzaChtKSl9ci5ub3JtfHwoaS5fZXh0cmVtZXNbdC5faWRdPXMuZmluZEV4dHJlbWVzKHQscCx7dG96ZXJvOiEwLHBhZGRlZDohMH0pKX19KHIsbyxpKTtmb3IodmFyIGw9MDtsPG4ubGVuZ3RoO2wrKylmb3IodmFyIHU9bltsXSxmPTA7Zjx1Lmxlbmd0aDtmKyspe3ZhciBwPXVbZl07aWYocC5zIT09YSlwLmIrcC5zPT09by5nZXQocC5wLHAucykmJihwLl9vdXRtb3N0PSEwKX1pLm5vcm0mJnkocixvLGkpfSgwLGUscixfLHUpLGIubGVuZ3RoJiZmKGUscixiLHUpfSFmdW5jdGlvbih0LGUpe3ZhciByLGksYSxvPXgoZSkscz17fSxsPTEvMCxjPS0xLzA7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylmb3IoYT10W3JdLGk9MDtpPGEubGVuZ3RoO2krKyl7dmFyIHU9YVtpXS5wO24odSkmJihsPU1hdGgubWluKGwsdSksYz1NYXRoLm1heChjLHUpKX12YXIgZj0xZTQvKGMtbCksaD1zLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcoTWF0aC5yb3VuZChmKih0LWwpKSl9O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspeyhhPXRbcl0pWzBdLnQuZXh0ZW50cz1zO3ZhciBwPWFbMF0udC5wb2Zmc2V0LGQ9QXJyYXkuaXNBcnJheShwKTtmb3IoaT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgbT1hW2ldLGc9bVtvXS1tLncvMjtpZihuKGcpKXt2YXIgdj1tW29dK20udy8yLHk9aChtLnApO3NbeV0/c1t5XT1bTWF0aC5taW4oZyxzW3ldWzBdKSxNYXRoLm1heCh2LHNbeV1bMV0pXTpzW3ldPVtnLHZdfW0ucDA9bS5wKyhkP3BbaV06cCksbS5wMT1tLnAwK20udyxtLnMwPW0uYixtLnMxPW0uczArbS5zfX19KG8sZSl9fWZ1bmN0aW9uIGYodCxlLHIsbil7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0sbz1uZXcgYyhbYV0se3Bvc0F4aXM6dCxzZXBOZWdWYWw6ITEsb3ZlcmxhcE5vTWVyZ2U6IW4ubm9ybX0pO2godCxvLG4pLG4ubm9ybT8odihvKSx5KGUsbyxuKSk6ZyhlLG8pfX1mdW5jdGlvbiBoKHQsZSxyKXtmb3IodmFyIG49ZS5taW5EaWZmLGk9ZS50cmFjZXMsYT1uKigxLXIuZ2FwKSxvPWEqKDEtKHIuZ3JvdXBnYXB8fDApKSxzPS1vLzIsbD0wO2w8aS5sZW5ndGg7bCsrKXt2YXIgYz1pW2xdWzBdLnQ7Yy5iYXJ3aWR0aD1vLGMucG9mZnNldD1zLGMuYmFyZ3JvdXB3aWR0aD1hLGMuYmFyZGVsdGE9bn1lLmJpbldpZHRoPWlbMF1bMF0udC5iYXJ3aWR0aC8xMDAscChlKSxkKHQsZSksbSh0LGUpfWZ1bmN0aW9uIHAodCl7dmFyIGUscixhPXQudHJhY2VzO2ZvcihlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBvLHM9YVtlXSxsPXNbMF0sYz1sLnRyYWNlLHU9bC50LGY9Yy5fb2Zmc2V0fHxjLm9mZnNldCxoPXUucG9mZnNldDtpZihpKGYpKXtmb3Iobz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmLDAscy5sZW5ndGgpLHI9MDtyPG8ubGVuZ3RoO3IrKyluKG9bcl0pfHwob1tyXT1oKTtmb3Iocj1vLmxlbmd0aDtyPHMubGVuZ3RoO3IrKylvLnB1c2goaCk7dS5wb2Zmc2V0PW99ZWxzZSB2b2lkIDAhPT1mJiYodS5wb2Zmc2V0PWYpO3ZhciBwPWMuX3dpZHRofHxjLndpZHRoLGQ9dS5iYXJ3aWR0aDtpZihpKHApKXt2YXIgbT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChwLDAscy5sZW5ndGgpO2ZvcihyPTA7cjxtLmxlbmd0aDtyKyspbihtW3JdKXx8KG1bcl09ZCk7Zm9yKHI9bS5sZW5ndGg7cjxzLmxlbmd0aDtyKyspbS5wdXNoKGQpO2lmKHUuYmFyd2lkdGg9bSx2b2lkIDA9PT1mKXtmb3Iobz1bXSxyPTA7cjxzLmxlbmd0aDtyKyspby5wdXNoKGgrKGQtbVtyXSkvMik7dS5wb2Zmc2V0PW99fWVsc2Ugdm9pZCAwIT09cCYmKHUuYmFyd2lkdGg9cCx2b2lkIDA9PT1mJiYodS5wb2Zmc2V0PWgrKGQtcCkvMikpfX1mdW5jdGlvbiBkKHQsZSl7Zm9yKHZhciByPWUudHJhY2VzLG49eCh0KSxpPTA7aTxyLmxlbmd0aDtpKyspZm9yKHZhciBhPXJbaV0sbz1hWzBdLnQscz1vLnBvZmZzZXQsbD1BcnJheS5pc0FycmF5KHMpLGM9by5iYXJ3aWR0aCx1PUFycmF5LmlzQXJyYXkoYyksZj0wO2Y8YS5sZW5ndGg7ZisrKXt2YXIgaD1hW2ZdLHA9aC53PXU/Y1tmXTpjO2hbbl09aC5wKyhsP3NbZl06cykrcC8yfX1mdW5jdGlvbiBtKHQsZSxyKXt2YXIgbj1lLnRyYWNlcyxpPWUubWluRGlmZi8yO3MubWluRHRpY2sodCxlLm1pbkRpZmYsZS5kaXN0aW5jdFBvc2l0aW9uc1swXSxyKTtmb3IodmFyIGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG8sbCxjLHUsZj1uW2FdLGg9ZlswXSxwPWgudHJhY2UsZD1bXTtmb3IodT0wO3U8Zi5sZW5ndGg7dSsrKWw9KG89Zlt1XSkucC1pLGM9by5wK2ksZC5wdXNoKGwsYyk7aWYocC53aWR0aHx8cC5vZmZzZXQpe3ZhciBtPWgudCxnPW0ucG9mZnNldCx2PW0uYmFyd2lkdGgseT1BcnJheS5pc0FycmF5KGcpLHg9QXJyYXkuaXNBcnJheSh2KTtmb3IodT0wO3U8Zi5sZW5ndGg7dSsrKXtvPWZbdV07dmFyIGI9eT9nW3VdOmcsXz14P3ZbdV06djtjPShsPW8ucCtiKStfLGQucHVzaChsLGMpfX1wLl9leHRyZW1lc1t0Ll9pZF09cy5maW5kRXh0cmVtZXModCxkLHtwYWRkZWQ6ITF9KX19ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj1lLnRyYWNlcyxuPXgodCksaT0wO2k8ci5sZW5ndGg7aSsrKXtmb3IodmFyIGE9cltpXSxvPWFbMF0udHJhY2UsbD1bXSxjPSExLHU9MDt1PGEubGVuZ3RoO3UrKyl7dmFyIGY9YVt1XSxoPWYuYixwPWgrZi5zO2Zbbl09cCxsLnB1c2gocCksZi5oYXNCJiZsLnB1c2goaCksZi5oYXNCJiZmLmJ8fChjPSEwKX1vLl9leHRyZW1lc1t0Ll9pZF09cy5maW5kRXh0cmVtZXModCxsLHt0b3plcm86YyxwYWRkZWQ6ITB9KX19ZnVuY3Rpb24gdih0KXtmb3IodmFyIGU9dC50cmFjZXMscj0wO3I8ZS5sZW5ndGg7cisrKWZvcih2YXIgbj1lW3JdLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXTtvLnMhPT1hJiZ0LnB1dChvLnAsby5iK28ucyl9fWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBpPWUudHJhY2VzLG89eCh0KSxsPSJmcmFjdGlvbiI9PT1yLm5vcm0/MToxMDAsYz1sLzFlOSx1PXQubDJjKHQuYzJsKDApKSxmPSJzdGFjayI9PT1yLm1vZGU/bDp1O2Z1bmN0aW9uIGgoZSl7cmV0dXJuIG4odC5jMmwoZSkpJiYoZTx1LWN8fGU+ZitjfHwhbih1KSl9Zm9yKHZhciBwPTA7cDxpLmxlbmd0aDtwKyspe2Zvcih2YXIgZD1pW3BdLG09ZFswXS50cmFjZSxnPVtdLHY9ITEseT0hMSxiPTA7YjxkLmxlbmd0aDtiKyspe3ZhciBfPWRbYl07aWYoXy5zIT09YSl7dmFyIHc9TWF0aC5hYnMobC9lLmdldChfLnAsXy5zKSk7Xy5iKj13LF8ucyo9dzt2YXIgVD1fLmIsaz1UK18ucztfW29dPWssZy5wdXNoKGspLHk9eXx8aChrKSxfLmhhc0ImJihnLnB1c2goVCkseT15fHxoKFQpKSxfLmhhc0ImJl8uYnx8KHY9ITApfX1tLl9leHRyZW1lc1t0Ll9pZF09cy5maW5kRXh0cmVtZXModCxnLHt0b3plcm86dixwYWRkZWQ6eX0pfX1mdW5jdGlvbiB4KHQpe3JldHVybiB0Ll9pZC5jaGFyQXQoMCl9ZS5leHBvcnRzPXtjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLnhheGlzLG49ZS55YXhpcyxpPXQuX2Z1bGxMYXlvdXQsYT10Ll9mdWxsRGF0YSxzPXQuY2FsY2RhdGEsbD1bXSxjPVtdLGY9MDtmPGEubGVuZ3RoO2YrKyl7dmFyIGg9YVtmXTtpZighMD09PWgudmlzaWJsZSYmby50cmFjZUlzKGgsImJhciIpJiZoLnhheGlzPT09ci5faWQmJmgueWF4aXM9PT1uLl9pZCYmKCJoIj09PWgub3JpZW50YXRpb24/bC5wdXNoKHNbZl0pOmMucHVzaChzW2ZdKSxoLl9jb21wdXRlUGgpKWZvcih2YXIgcD10LmNhbGNkYXRhW2ZdLGQ9MDtkPHAubGVuZ3RoO2QrKykiZnVuY3Rpb24iPT10eXBlb2YgcFtkXS5waDAmJihwW2RdLnBoMD1wW2RdLnBoMCgpKSwiZnVuY3Rpb24iPT10eXBlb2YgcFtkXS5waDEmJihwW2RdLnBoMT1wW2RdLnBoMSgpKX12YXIgbT17eENhdDoiY2F0ZWdvcnkiPT09ci50eXBlfHwibXVsdGljYXRlZ29yeSI9PT1yLnR5cGUseUNhdDoiY2F0ZWdvcnkiPT09bi50eXBlfHwibXVsdGljYXRlZ29yeSI9PT1uLnR5cGUsbW9kZTppLmJhcm1vZGUsbm9ybTppLmJhcm5vcm0sZ2FwOmkuYmFyZ2FwLGdyb3VwZ2FwOmkuYmFyZ3JvdXBnYXB9O3UodCxyLG4sYyxtKSx1KHQsbixyLGwsbSl9LHNldEdyb3VwUG9zaXRpb25zOnV9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyI6ODM1LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL3NpZXZlLmpzIjo5MjcsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw5MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vc2NhdHRlci94eV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiKSxsPXQoIi4vc3R5bGVfZGVmYXVsdHMiKSxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyIpLmdldEF4aXNHcm91cCx1PXQoIi4vYXR0cmlidXRlcyIpLGY9bi5jb2VyY2VGb250O2Z1bmN0aW9uIGgodCxlLHIsbil7dmFyIGk9ZS5vcmllbnRhdGlvbixhPWVbe3Y6IngiLGg6InkifVtpXSsiYXhpcyJdLG89YyhyLGEpK2kscz1yLl9hbGlnbm1lbnRPcHRzfHx7fSxsPW4oImFsaWdubWVudGdyb3VwIiksdT1zW29dO3V8fCh1PXNbb109e30pO3ZhciBmPXVbbF07Zj9mLnRyYWNlcy5wdXNoKGUpOmY9dVtsXT17dHJhY2VzOltlXSxhbGlnbm1lbnRJbmRleDpPYmplY3Qua2V5cyh1KS5sZW5ndGgsb2Zmc2V0R3JvdXBzOnt9fTt2YXIgaD1uKCJvZmZzZXRncm91cCIpLHA9Zi5vZmZzZXRHcm91cHMsZD1wW2hdO2gmJihkfHwoZD1wW2hdPXtvZmZzZXRJbmRleDpPYmplY3Qua2V5cyhwKS5sZW5ndGh9KSxlLl9vZmZzZXRJbmRleD1kLm9mZnNldEluZGV4KX1mdW5jdGlvbiBwKHQsZSxyLGksYSxvKXt2YXIgcz0hKCExPT09KG89b3x8e30pLm1vZHVsZUhhc1NlbGVjdGVkKSxsPSEoITE9PT1vLm1vZHVsZUhhc1Vuc2VsZWN0ZWQpLGM9ISghMT09PW8ubW9kdWxlSGFzQ29uc3RyYWluKSx1PSEoITE9PT1vLm1vZHVsZUhhc0NsaXBvbmF4aXMpLGg9ISghMT09PW8ubW9kdWxlSGFzVGV4dGFuZ2xlKSxwPSEoITE9PT1vLm1vZHVsZUhhc0luc2lkZWFuY2hvciksZD0hIW8uaGFzUGF0aGJhcixtPUFycmF5LmlzQXJyYXkoYSl8fCJhdXRvIj09PWEsZz1tfHwiaW5zaWRlIj09PWEsdj1tfHwib3V0c2lkZSI9PT1hO2lmKGd8fHYpe3ZhciB5PWYoaSwidGV4dGZvbnQiLHIuZm9udCkseD1uLmV4dGVuZEZsYXQoe30seSksYj0hKHQudGV4dGZvbnQmJnQudGV4dGZvbnQuY29sb3IpO2lmKGImJmRlbGV0ZSB4LmNvbG9yLGYoaSwiaW5zaWRldGV4dGZvbnQiLHgpLGQpe3ZhciBfPW4uZXh0ZW5kRmxhdCh7fSx5KTtiJiZkZWxldGUgXy5jb2xvcixmKGksInBhdGhiYXIudGV4dGZvbnQiLF8pfXYmJmYoaSwib3V0c2lkZXRleHRmb250Iix5KSxzJiZpKCJzZWxlY3RlZC50ZXh0Zm9udC5jb2xvciIpLGwmJmkoInVuc2VsZWN0ZWQudGV4dGZvbnQuY29sb3IiKSxjJiZpKCJjb25zdHJhaW50ZXh0IiksdSYmaSgiY2xpcG9uYXhpcyIpLGgmJmkoInRleHRhbmdsZSIpLGkoInRleHR0ZW1wbGF0ZSIpfWcmJnAmJmkoImluc2lkZXRleHRhbmNob3IiKX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIGYocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHUscixpKX1pZihvKHQsZSxjLGYpKXtzKHQsZSxjLGYpLGYoInhob3ZlcmZvcm1hdCIpLGYoInlob3ZlcmZvcm1hdCIpLGYoIm9yaWVudGF0aW9uIixlLngmJiFlLnk/ImgiOiJ2IiksZigiYmFzZSIpLGYoIm9mZnNldCIpLGYoIndpZHRoIiksZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoImhvdmVydGVtcGxhdGUiKTt2YXIgaD1mKCJ0ZXh0cG9zaXRpb24iKTtwKHQsZSxjLGYsaCx7bW9kdWxlSGFzU2VsZWN0ZWQ6ITAsbW9kdWxlSGFzVW5zZWxlY3RlZDohMCxtb2R1bGVIYXNDb25zdHJhaW46ITAsbW9kdWxlSGFzQ2xpcG9uYXhpczohMCxtb2R1bGVIYXNUZXh0YW5nbGU6ITAsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiEwfSksbCh0LGUsZixyLGMpO3ZhciBkPShlLm1hcmtlci5saW5lfHx7fSkuY29sb3IsbT1hLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTttKHQsZSxkfHxpLmRlZmF1bHRMaW5lLHtheGlzOiJ5In0pLG0odCxlLGR8fGkuZGVmYXVsdExpbmUse2F4aXM6IngiLGluaGVyaXQ6InkifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsZil9ZWxzZSBlLnZpc2libGU9ITF9LGNyb3NzVHJhY2VEZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByO2Z1bmN0aW9uIGkodCl7cmV0dXJuIG4uY29lcmNlKHIuX2lucHV0LHIsdSx0KX1pZigiZ3JvdXAiPT09ZS5iYXJtb2RlKWZvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKSJiYXIiPT09KHI9dFthXSkudHlwZSYmKHIuX2lucHV0LGgoMCxyLGUsaSkpfSxoYW5kbGVHcm91cGluZ0RlZmF1bHRzOmgsaGFuZGxlVGV4dDpwfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHMiOjgzNSwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiOjEyMTEsIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiOjEyMTgsIi4vYXR0cmlidXRlcyI6OTE0LCIuL3N0eWxlX2RlZmF1bHRzIjo5Mjl9XSw5MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC54PSJ4VmFsImluIGU/ZS54VmFsOmUueCx0Lnk9InlWYWwiaW4gZT9lLnlWYWw6ZS55LGUueGEmJih0LnhheGlzPWUueGEpLGUueWEmJih0LnlheGlzPWUueWEpLCJoIj09PXIub3JpZW50YXRpb24/KHQubGFiZWw9dC55LHQudmFsdWU9dC54KToodC5sYWJlbD10LngsdC52YWx1ZT10LnkpLHR9fSx7fV0sOTIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O3IuY29lcmNlU3RyaW5nPWZ1bmN0aW9uKHQsZSxyKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKGV8fCF0Lm5vQmxhbmspcmV0dXJuIGV9ZWxzZSBpZigoIm51bWJlciI9PXR5cGVvZiBlfHwhMD09PWUpJiYhdC5zdHJpY3QpcmV0dXJuIFN0cmluZyhlKTtyZXR1cm4gdm9pZCAwIT09cj9yOnQuZGZsdH0sci5jb2VyY2VOdW1iZXI9ZnVuY3Rpb24odCxlLHIpe2lmKG4oZSkpe2U9K2U7dmFyIGk9dC5taW4sYT10Lm1heDtpZighKHZvaWQgMCE9PWkmJmU8aXx8dm9pZCAwIT09YSYmZT5hKSlyZXR1cm4gZX1yZXR1cm4gdm9pZCAwIT09cj9yOnQuZGZsdH0sci5jb2VyY2VDb2xvcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGkoZSkuaXNWYWxpZCgpP2U6dm9pZCAwIT09cj9yOnQuZGZsdH0sci5jb2VyY2VFbnVtZXJhdGVkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC5jb2VyY2VOdW1iZXImJihlPStlKSwtMSE9PXQudmFsdWVzLmluZGV4T2YoZSk/ZTp2b2lkIDAhPT1yP3I6dC5kZmx0fSxyLmdldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/ZTx0Lmxlbmd0aCYmKHI9dFtlXSk6cj10LHJ9LHIuZ2V0TGluZVdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA8ZS5tbHc/ZS5tbHc6YSh0Lm1hcmtlci5saW5lLndpZHRoKT8wOnQubWFya2VyLmxpbmUud2lkdGh9fSx7Ii4uLy4uL2xpYiI6Nzc2LCJmYXN0LWlzbnVtZXJpYyI6MjQyLHRpbnljb2xvcjI6NTcyfV0sOTIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi8uLi9saWIiKS5maWxsVGV4dCxzPXQoIi4vaGVscGVycyIpLmdldExpbmVXaWR0aCxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikuaG92ZXJMYWJlbFRleHQsYz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2Z1bmN0aW9uIHUodCxlLHIsaSxhKXt2YXIgcyx1LGYsaCxwLGQsbSxnPXQuY2Qsdj1nWzBdLnRyYWNlLHk9Z1swXS50LHg9ImNsb3Nlc3QiPT09aSxiPSJ3YXRlcmZhbGwiPT09di50eXBlLF89dC5tYXhIb3ZlckRpc3RhbmNlLHc9dC5tYXhTcGlrZURpc3RhbmNlOyJoIj09PXYub3JpZW50YXRpb24/KHM9cix1PWUsZj0ieSIsaD0ieCIscD16LGQ9SSk6KHM9ZSx1PXIsZj0ieCIsaD0ieSIsZD16LHA9SSk7dmFyIFQ9dltmKyJwZXJpb2QiXSxrPXh8fFQ7ZnVuY3Rpb24gQSh0KXtyZXR1cm4gUyh0LC0xKX1mdW5jdGlvbiBNKHQpe3JldHVybiBTKHQsMSl9ZnVuY3Rpb24gUyh0LGUpe3ZhciByPXQudztyZXR1cm4gdFtmXStlKnIvMn1mdW5jdGlvbiBFKHQpe3JldHVybiB0W2YrIkVuZCJdLXRbZisiU3RhcnQiXX12YXIgTD14P0E6VD9mdW5jdGlvbih0KXtyZXR1cm4gdC5wLUUodCkvMn06ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWluKEEodCksdC5wLXkuYmFyZGVsdGEvMil9LEM9eD9NOlQ/ZnVuY3Rpb24odCl7cmV0dXJuIHQucCtFKHQpLzJ9OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChNKHQpLHQucCt5LmJhcmRlbHRhLzIpfTtmdW5jdGlvbiBQKHQsZSxyKXtyZXR1cm4gYS5maW5pdGVSYW5nZSYmKHI9MCksbi5pbmJveCh0LXMsZS1zLHIrTWF0aC5taW4oMSxNYXRoLmFicyhlLXQpL20pLTEpfWZ1bmN0aW9uIEkodCl7cmV0dXJuIFAoTCh0KSxDKHQpLF8pfWZ1bmN0aW9uIE8odCl7dmFyIGU9dFtoXTtpZihiKXt2YXIgcj1NYXRoLmFicyh0LnJhd1MpfHwwO3U+MD9lKz1yOnU8MCYmKGUtPXIpfXJldHVybiBlfWZ1bmN0aW9uIHoodCl7dmFyIGU9dSxyPXQuYixpPU8odCk7cmV0dXJuIG4uaW5ib3goci1lLGktZSxfKyhpLWUpLyhpLXIpLTEpfXZhciBEPXRbZisiYSJdLFI9dFtoKyJhIl07bT1NYXRoLmFicyhELnIyYyhELnJhbmdlWzFdKS1ELnIyYyhELnJhbmdlWzBdKSk7dmFyIEY9bi5nZXREaXN0YW5jZUZ1bmN0aW9uKGkscCxkLChmdW5jdGlvbih0KXtyZXR1cm4ocCh0KStkKHQpKS8yfSkpO2lmKG4uZ2V0Q2xvc2VzdChnLEYsdCksITEhPT10LmluZGV4JiZnW3QuaW5kZXhdLnAhPT1jKXtrfHwoTD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5taW4oQSh0KSx0LnAteS5iYXJncm91cHdpZHRoLzIpfSxDPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChNKHQpLHQucCt5LmJhcmdyb3Vwd2lkdGgvMil9KTt2YXIgQj1nW3QuaW5kZXhdLE49di5iYXNlP0IuYitCLnM6Qi5zO3RbaCsiMCJdPXRbaCsiMSJdPVIuYzJwKEJbaF0sITApLHRbaCsiTGFiZWxWYWwiXT1OO3ZhciBqPXkuZXh0ZW50c1t5LmV4dGVudHMucm91bmQoQi5wKV07dFtmKyIwIl09RC5jMnAoeD9MKEIpOmpbMF0sITApLHRbZisiMSJdPUQuYzJwKHg/QyhCKTpqWzFdLCEwKTt2YXIgVT12b2lkIDAhPT1CLm9yaWdfcDtyZXR1cm4gdFtmKyJMYWJlbFZhbCJdPVU/Qi5vcmlnX3A6Qi5wLHQubGFiZWxMYWJlbD1sKEQsdFtmKyJMYWJlbFZhbCJdLHZbZisiaG92ZXJmb3JtYXQiXSksdC52YWx1ZUxhYmVsPWwoUix0W2grIkxhYmVsVmFsIl0sdltoKyJob3ZlcmZvcm1hdCJdKSx0LmJhc2VMYWJlbD1sKFIsQi5iLHZbaCsiaG92ZXJmb3JtYXQiXSksdC5zcGlrZURpc3RhbmNlPShmdW5jdGlvbih0KXt2YXIgZT11LHI9dC5iLGk9Tyh0KTtyZXR1cm4gbi5pbmJveChyLWUsaS1lLHcrKGktZSkvKGktciktMSl9KEIpK2Z1bmN0aW9uKHQpe3JldHVybiBQKEEodCksTSh0KSx3KX0oQikpLzIsdFtmKyJTcGlrZSJdPUQuYzJwKEIucCwhMCksbyhCLHYsdCksdC5ob3ZlcnRlbXBsYXRlPXYuaG92ZXJ0ZW1wbGF0ZSx0fX1mdW5jdGlvbiBmKHQsZSl7dmFyIHI9ZS5tY2N8fHQubWFya2VyLmNvbG9yLG49ZS5tbGNjfHx0Lm1hcmtlci5saW5lLmNvbG9yLGk9cyh0LGUpO3JldHVybiBhLm9wYWNpdHkocik/cjphLm9wYWNpdHkobikmJmk/bjp2b2lkIDB9ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixuLGEpe3ZhciBvPXUodCxlLHIsbixhKTtpZihvKXt2YXIgcz1vLmNkLGw9c1swXS50cmFjZSxjPXNbby5pbmRleF07cmV0dXJuIG8uY29sb3I9ZihsLGMpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJob3ZlckluZm8iKShjLGwsbyksW29dfX0saG92ZXJPbkJhcnM6dSxnZXRUcmFjZUNvbG9yOmZ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29tcG9uZW50cy9meCI6Njc5LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2hlbHBlcnMiOjkyMH1dLDkyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLnN1cHBseURlZmF1bHRzLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuY3Jvc3NUcmFjZURlZmF1bHRzLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxjcm9zc1RyYWNlQ2FsYzp0KCIuL2Nyb3NzX3RyYWNlX2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGFycmF5c1RvQ2FsY2RhdGE6dCgiLi9hcnJheXNfdG9fY2FsY2RhdGEiKSxwbG90OnQoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6dCgiLi9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLGV2ZW50RGF0YTp0KCIuL2V2ZW50X2RhdGEiKSxzZWxlY3RQb2ludHM6dCgiLi9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiYmFyIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiYmFyLWxpa2UiLCJjYXJ0ZXNpYW4iLCJzdmciLCJiYXIiLCJvcmllbnRlZCIsImVycm9yQmFyc09LIiwic2hvd0xlZ2VuZCIsInpvb21TY2FsZSJdLGFuaW1hdGFibGU6ITAsbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4NDEsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMjA5LCIuL2FycmF5c190b19jYWxjZGF0YSI6OTEzLCIuL2F0dHJpYnV0ZXMiOjkxNCwiLi9jYWxjIjo5MTUsIi4vY3Jvc3NfdHJhY2VfY2FsYyI6OTE3LCIuL2RlZmF1bHRzIjo5MTgsIi4vZXZlbnRfZGF0YSI6OTE5LCIuL2hvdmVyIjo5MjEsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjkyMywiLi9sYXlvdXRfZGVmYXVsdHMiOjkyNCwiLi9wbG90Ijo5MjUsIi4vc2VsZWN0Ijo5MjYsIi4vc3R5bGUiOjkyOH1dLDkyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2Jhcm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInN0YWNrIiwiZ3JvdXAiLCJvdmVybGF5IiwicmVsYXRpdmUiXSxkZmx0OiJncm91cCIsZWRpdFR5cGU6ImNhbGMifSxiYXJub3JtOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyIiLCJmcmFjdGlvbiIsInBlcmNlbnQiXSxkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sYmFyZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJjYWxjIn0sYmFyZ3JvdXBnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sOTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBzKHIsbil7cmV0dXJuIGEuY29lcmNlKHQsZSxvLHIsbil9Zm9yKHZhciBsPSExLGM9ITEsdT0hMSxmPXt9LGg9cygiYmFybW9kZSIpLHA9MDtwPHIubGVuZ3RoO3ArKyl7dmFyIGQ9cltwXTtpZihuLnRyYWNlSXMoZCwiYmFyIikmJmQudmlzaWJsZSl7aWYobD0hMCwiZ3JvdXAiPT09aCl7dmFyIG09ZC54YXhpcytkLnlheGlzO2ZbbV0mJih1PSEwKSxmW21dPSEwfWlmKGQudmlzaWJsZSYmImhpc3RvZ3JhbSI9PT1kLnR5cGUpImNhdGVnb3J5IiE9PWkuZ2V0RnJvbUlkKHtfZnVsbExheW91dDplfSxkWyJ2Ij09PWQub3JpZW50YXRpb24/InhheGlzIjoieWF4aXMiXSkudHlwZSYmKGM9ITApfX1sPygib3ZlcmxheSIhPT1oJiZzKCJiYXJub3JtIikscygiYmFyZ2FwIixjJiYhdT8wOi4yKSxzKCJiYXJncm91cGdhcCIpKTpkZWxldGUgZS5iYXJtb2RlfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6OTIzfV0sOTI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuLi8uLi9yZWdpc3RyeSIpLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS50aWNrVGV4dCxmPXQoIi4vdW5pZm9ybV90ZXh0IiksaD1mLnJlY29yZE1pblRleHRTaXplLHA9Zi5jbGVhck1pblRleHRTaXplLGQ9dCgiLi9zdHlsZSIpLG09dCgiLi9oZWxwZXJzIiksZz10KCIuL2NvbnN0YW50cyIpLHY9dCgiLi9hdHRyaWJ1dGVzIikseT12LnRleHQseD12LnRleHRwb3NpdGlvbixiPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxfPWcuVEVYVFBBRDtmdW5jdGlvbiB3KHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIFQodCl7aWYodC5pZHMpcmV0dXJuIHd9ZnVuY3Rpb24gayh0LGUpe3JldHVybiB0PGU/MTotMX1mdW5jdGlvbiBBKHQsZSxyLG4pe3ZhciBpO3JldHVybiFlLnVuaWZvcm10ZXh0Lm1vZGUmJk0ocik/KG4mJihpPW4oKSksdC50cmFuc2l0aW9uKCkuZHVyYXRpb24oci5kdXJhdGlvbikuZWFzZShyLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtpJiZpKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtpJiZpKCl9KSkpOnR9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdCYmdC5kdXJhdGlvbj4wfWZ1bmN0aW9uIFModCl7cmV0dXJuImF1dG8iPT09dD8wOnR9ZnVuY3Rpb24gRSh0LGUpe3ZhciByPU1hdGguUEkvMTgwKmUsbj1NYXRoLmFicyhNYXRoLnNpbihyKSksaT1NYXRoLmFicyhNYXRoLmNvcyhyKSk7cmV0dXJue3g6dC53aWR0aCppK3QuaGVpZ2h0Km4seTp0LndpZHRoKm4rdC5oZWlnaHQqaX19ZnVuY3Rpb24gTCh0LGUscixuLGksYSl7dmFyIG89ISFhLmlzSG9yaXpvbnRhbCxzPSEhYS5jb25zdHJhaW5lZCxsPWEuYW5nbGV8fDAsYz1hLmFuY2hvcnx8ImVuZCIsdT0iZW5kIj09PWMsZj0ic3RhcnQiPT09YyxoPSgoYS5sZWZ0VG9SaWdodHx8MCkrMSkvMixwPTEtaCxkPWkud2lkdGgsbT1pLmhlaWdodCxnPU1hdGguYWJzKGUtdCksdj1NYXRoLmFicyhuLXIpLHk9Zz4yKl8mJnY+MipfP186MDtnLT0yKnksdi09Mip5O3ZhciB4PVMobCk7ImF1dG8iIT09bHx8ZDw9ZyYmbTw9dnx8IShkPmd8fG0+dil8fChkPnZ8fG0+ZykmJmQ8bT09Zzx2fHwoeCs9OTApO3ZhciBiPUUoaSx4KSx3PTE7cyYmKHc9TWF0aC5taW4oMSxnL2IueCx2L2IueSkpO3ZhciBUPWkubGVmdCpwK2kucmlnaHQqaCxBPShpLnRvcCtpLmJvdHRvbSkvMixNPSh0K18pKnArKGUtXykqaCxMPShyK24pLzIsQz0wLFA9MDtpZihmfHx1KXt2YXIgST0obz9iLng6Yi55KS8yLE89bz9rKHQsZSk6ayhyLG4pO28/Zj8oTT10K08qeSxDPS1PKkkpOihNPWUtTyp5LEM9TypJKTpmPyhMPXIrTyp5LFA9LU8qSSk6KEw9bi1PKnksUD1PKkkpfXJldHVybnt0ZXh0WDpULHRleHRZOkEsdGFyZ2V0WDpNLHRhcmdldFk6TCxhbmNob3JYOkMsYW5jaG9yWTpQLHNjYWxlOncscm90YXRlOnh9fWUuZXhwb3J0cz17cGxvdDpmdW5jdGlvbih0LGUscixmLGcsdil7dmFyIHc9ZS54YXhpcyxDPWUueWF4aXMsUD10Ll9mdWxsTGF5b3V0O2d8fChnPXttb2RlOlAuYmFybW9kZSxub3JtOlAuYmFybW9kZSxnYXA6UC5iYXJnYXAsZ3JvdXBnYXA6UC5iYXJncm91cGdhcH0scCgiYmFyIixQKSk7dmFyIEk9YS5tYWtlVHJhY2VHcm91cHMoZixyLCJ0cmFjZSBiYXJzIikuZWFjaCgoZnVuY3Rpb24ocil7dmFyIGM9bi5zZWxlY3QodGhpcyksZj1yWzBdLnRyYWNlLHA9IndhdGVyZmFsbCI9PT1mLnR5cGUsST0iZnVubmVsIj09PWYudHlwZSxPPSJiYXIiPT09Zi50eXBlfHxJLHo9MDtwJiZmLmNvbm5lY3Rvci52aXNpYmxlJiYiYmV0d2VlbiI9PT1mLmNvbm5lY3Rvci5tb2RlJiYoej1mLmNvbm5lY3Rvci5saW5lLndpZHRoLzIpO3ZhciBEPSJoIj09PWYub3JpZW50YXRpb24sUj1NKGcpLEY9YS5lbnN1cmVTaW5nbGUoYywiZyIsInBvaW50cyIpLEI9VChmKSxOPUYuc2VsZWN0QWxsKCJnLnBvaW50IikuZGF0YShhLmlkZW50aXR5LEIpO04uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2ludCIsITApLE4uZXhpdCgpLnJlbW92ZSgpLE4uZWFjaCgoZnVuY3Rpb24oYyxwKXt2YXIgVCxNLEk9bi5zZWxlY3QodGhpcyksRj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1bXSxhPVtdLG89bj9lOnIscz1uP3I6ZTtyZXR1cm4gaVswXT1vLmMycCh0LnMwLCEwKSxhWzBdPXMuYzJwKHQucDAsITApLGlbMV09by5jMnAodC5zMSwhMCksYVsxXT1zLmMycCh0LnAxLCEwKSxuP1tpLGFdOlthLGldfShjLHcsQyxEKSxCPUZbMF1bMF0sTj1GWzBdWzFdLGo9RlsxXVswXSxVPUZbMV1bMV0sVj0wPT0oRD9OLUI6VS1qKTtpZihWJiZPJiZtLmdldExpbmVXaWR0aChmLGMpJiYoVj0hMSksVnx8KFY9IShpKEIpJiZpKE4pJiZpKGopJiZpKFUpKSksYy5pc0JsYW5rPVYsViYmKEQ/Tj1COlU9aikseiYmIVYmJihEPyhCLT1rKEIsTikqeixOKz1rKEIsTikqeik6KGotPWsoaixVKSp6LFUrPWsoaixVKSp6KSksIndhdGVyZmFsbCI9PT1mLnR5cGUpe2lmKCFWKXt2YXIgSD1mW2MuZGlyXS5tYXJrZXI7VD1ILmxpbmUud2lkdGgsTT1ILmNvbG9yfX1lbHNlIFQ9bS5nZXRMaW5lV2lkdGgoZixjKSxNPWMubWN8fGYubWFya2VyLmNvbG9yO2Z1bmN0aW9uIHEodCl7dmFyIGU9bi5yb3VuZChULzIlMSwyKTtyZXR1cm4gMD09PWcuZ2FwJiYwPT09Zy5ncm91cGdhcD9uLnJvdW5kKE1hdGgucm91bmQodCktZSwyKTp0fWlmKCF0Ll9jb250ZXh0LnN0YXRpY1Bsb3Qpe3ZhciBHPXMub3BhY2l0eShNKTwxfHxUPi4wMT9xOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gciYmdD09PWU/dDpNYXRoLmFicyh0LWUpPj0yP3EodCk6dD5lP01hdGguY2VpbCh0KTpNYXRoLmZsb29yKHQpfTtCPUcoQixOLEQpLE49RyhOLEIsRCksaj1HKGosVSwhRCksVT1HKFUsaiwhRCl9dmFyIFk9QShhLmVuc3VyZVNpbmdsZShJLCJwYXRoIiksUCxnLHYpO2lmKFkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJkIixpc05hTigoTi1CKSooVS1qKSl8fFYmJnQuX2NvbnRleHQuc3RhdGljUGxvdD8iTTAsMFoiOiJNIitCKyIsIitqKyJWIitVKyJIIitOKyJWIitqKyJaIikuY2FsbChsLnNldENsaXBVcmwsZS5sYXllckNsaXBJZCx0KSwhUC51bmlmb3JtdGV4dC5tb2RlJiZSKXt2YXIgVz1sLm1ha2VQb2ludFN0eWxlRm5zKGYpO2wuc2luZ2xlUG9pbnRTdHlsZShjLFksZixXLHQpfSFmdW5jdGlvbih0LGUscixuLGkscyxjLGYscCxnLHYpe3ZhciB3LFQ9ZS54YXhpcyxNPWUueWF4aXMsQz10Ll9mdWxsTGF5b3V0O2Z1bmN0aW9uIFAoZSxyLG4pe3JldHVybiBhLmVuc3VyZVNpbmdsZShlLCJ0ZXh0IikudGV4dChyKS5hdHRyKHtjbGFzczoiYmFydGV4dCBiYXJ0ZXh0LSIrdywidGV4dC1hbmNob3IiOiJtaWRkbGUiLCJkYXRhLW5vdGV4IjoxfSkuY2FsbChsLmZvbnQsbikuY2FsbChvLmNvbnZlcnRUb1RzcGFucyx0KX12YXIgST1uWzBdLnRyYWNlLE89ImgiPT09SS5vcmllbnRhdGlvbix6PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG8scz1lWzBdLnRyYWNlO289cy50ZXh0dGVtcGxhdGU/ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz1lWzBdLnRyYWNlLHM9YS5jYXN0T3B0aW9uKG8sciwidGV4dHRlbXBsYXRlIik7aWYoIXMpcmV0dXJuIiI7dmFyIGwsYyxmLGgscD0id2F0ZXJmYWxsIj09PW8udHlwZSxkPSJmdW5uZWwiPT09by50eXBlOyJoIj09PW8ub3JpZW50YXRpb24/KGw9InkiLGM9aSxmPSJ4IixoPW4pOihsPSJ4IixjPW4sZj0ieSIsaD1pKTtmdW5jdGlvbiBtKHQpe3JldHVybiB1KGgsaC5jMmwodCksITApLnRleHR9dmFyIGc9ZVtyXSx2PXt9O3YubGFiZWw9Zy5wLHYubGFiZWxMYWJlbD12W2wrIkxhYmVsIl09KHk9Zy5wLHUoYyxjLmMybCh5KSwhMCkudGV4dCk7dmFyIHk7dmFyIHg9YS5jYXN0T3B0aW9uKG8sZy5pLCJ0ZXh0Iik7KDA9PT14fHx4KSYmKHYudGV4dD14KTt2LnZhbHVlPWcucyx2LnZhbHVlTGFiZWw9dltmKyJMYWJlbCJdPW0oZy5zKTt2YXIgXz17fTtiKF8sbyxnLmkpLHAmJih2LmRlbHRhPStnLnJhd1N8fGcucyx2LmRlbHRhTGFiZWw9bSh2LmRlbHRhKSx2LmZpbmFsPWcudix2LmZpbmFsTGFiZWw9bSh2LmZpbmFsKSx2LmluaXRpYWw9di5maW5hbC12LmRlbHRhLHYuaW5pdGlhbExhYmVsPW0odi5pbml0aWFsKSk7ZCYmKHYudmFsdWU9Zy5zLHYudmFsdWVMYWJlbD1tKHYudmFsdWUpLHYucGVyY2VudEluaXRpYWw9Zy5iZWdSLHYucGVyY2VudEluaXRpYWxMYWJlbD1hLmZvcm1hdFBlcmNlbnQoZy5iZWdSKSx2LnBlcmNlbnRQcmV2aW91cz1nLmRpZlIsdi5wZXJjZW50UHJldmlvdXNMYWJlbD1hLmZvcm1hdFBlcmNlbnQoZy5kaWZSKSx2LnBlcmNlbnRUb3RhbD1nLnN1bVIsdi5wZXJjZW5Ub3RhbExhYmVsPWEuZm9ybWF0UGVyY2VudChnLnN1bVIpKTt2YXIgdz1hLmNhc3RPcHRpb24obyxnLmksImN1c3RvbWRhdGEiKTt3JiYodi5jdXN0b21kYXRhPXcpO3JldHVybiBhLnRleHR0ZW1wbGF0ZVN0cmluZyhzLHYsdC5fZDNsb2NhbGUsXyx2LG8uX21ldGF8fHt9KX0odCxlLHIsbixpKTpzLnRleHRpbmZvP2Z1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbMF0udHJhY2Usbz0iaCI9PT1pLm9yaWVudGF0aW9uLHM9IndhdGVyZmFsbCI9PT1pLnR5cGUsbD0iZnVubmVsIj09PWkudHlwZTtmdW5jdGlvbiBjKHQpe3JldHVybiB1KG8/cjpuLCt0LCEwKS50ZXh0fXZhciBmLGg9aS50ZXh0aW5mbyxwPXRbZV0sZD1oLnNwbGl0KCIrIiksbT1bXSxnPWZ1bmN0aW9uKHQpe3JldHVybi0xIT09ZC5pbmRleE9mKHQpfTtnKCJsYWJlbCIpJiZtLnB1c2goKHY9dFtlXS5wLHUobz9uOnIsdiwhMCkudGV4dCkpO3ZhciB2O2coInRleHQiKSYmKDA9PT0oZj1hLmNhc3RPcHRpb24oaSxwLmksInRleHQiKSl8fGYpJiZtLnB1c2goZik7aWYocyl7dmFyIHk9K3AucmF3U3x8cC5zLHg9cC52LGI9eC15O2coImluaXRpYWwiKSYmbS5wdXNoKGMoYikpLGcoImRlbHRhIikmJm0ucHVzaChjKHkpKSxnKCJmaW5hbCIpJiZtLnB1c2goYyh4KSl9aWYobCl7ZygidmFsdWUiKSYmbS5wdXNoKGMocC5zKSk7dmFyIF89MDtnKCJwZXJjZW50IGluaXRpYWwiKSYmXysrLGcoInBlcmNlbnQgcHJldmlvdXMiKSYmXysrLGcoInBlcmNlbnQgdG90YWwiKSYmXysrO3ZhciB3PV8+MTtnKCJwZXJjZW50IGluaXRpYWwiKSYmKGY9YS5mb3JtYXRQZXJjZW50KHAuYmVnUiksdyYmKGYrPSIgb2YgaW5pdGlhbCIpLG0ucHVzaChmKSksZygicGVyY2VudCBwcmV2aW91cyIpJiYoZj1hLmZvcm1hdFBlcmNlbnQocC5kaWZSKSx3JiYoZis9IiBvZiBwcmV2aW91cyIpLG0ucHVzaChmKSksZygicGVyY2VudCB0b3RhbCIpJiYoZj1hLmZvcm1hdFBlcmNlbnQocC5zdW1SKSx3JiYoZis9IiBvZiB0b3RhbCIpLG0ucHVzaChmKSl9cmV0dXJuIG0uam9pbigiPGJyPiIpfShlLHIsbixpKTptLmdldFZhbHVlKHMudGV4dCxyKTtyZXR1cm4gbS5jb2VyY2VTdHJpbmcoeSxvKX0oQyxuLGksVCxNKTt3PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bS5nZXRWYWx1ZSh0LnRleHRwb3NpdGlvbixlKTtyZXR1cm4gbS5jb2VyY2VFbnVtZXJhdGVkKHgscil9KEksaSk7dmFyIEQ9InN0YWNrIj09PWcubW9kZXx8InJlbGF0aXZlIj09PWcubW9kZSxSPW5baV0sRj0hRHx8Ui5fb3V0bW9zdDtpZighenx8Im5vbmUiPT09d3x8KFIuaXNCbGFua3x8cz09PWN8fGY9PT1wKSYmKCJhdXRvIj09PXd8fCJpbnNpZGUiPT09dykpcmV0dXJuIHZvaWQgci5zZWxlY3QoInRleHQiKS5yZW1vdmUoKTt2YXIgQj1DLmZvbnQsTj1kLmdldEJhckNvbG9yKG5baV0sSSksaj1kLmdldEluc2lkZVRleHRGb250KEksaSxCLE4pLFU9ZC5nZXRPdXRzaWRlVGV4dEZvbnQoSSxpLEIpLFY9ci5kYXR1bSgpO08/ImxvZyI9PT1ULnR5cGUmJlYuczA8PTAmJihzPVQucmFuZ2VbMF08VC5yYW5nZVsxXT8wOlQuX2xlbmd0aCk6ImxvZyI9PT1NLnR5cGUmJlYuczA8PTAmJihmPU0ucmFuZ2VbMF08TS5yYW5nZVsxXT9NLl9sZW5ndGg6MCk7dmFyIEgscSxHLFksVyxYPU1hdGguYWJzKGMtcyktMipfLFo9TWF0aC5hYnMocC1mKS0yKl87Im91dHNpZGUiPT09dyYmKEZ8fFIuaGFzQnx8KHc9Imluc2lkZSIpKTtpZigiYXV0byI9PT13KWlmKEYpe3c9Imluc2lkZSIsVz1hLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LGopLEg9UChyLHosVykscT1sLmJCb3goSC5ub2RlKCkpLEc9cS53aWR0aCxZPXEuaGVpZ2h0O3ZhciBKPUc8PVgmJlk8PVosSz1HPD1aJiZZPD1YLFE9Tz9YPj1HKihaL1kpOlo+PVkqKFgvRyk7Rz4wJiZZPjAmJihKfHxLfHxRKT93PSJpbnNpZGUiOih3PSJvdXRzaWRlIixILnJlbW92ZSgpLEg9bnVsbCl9ZWxzZSB3PSJpbnNpZGUiO2lmKCFIKXtXPWEuZW5zdXJlVW5pZm9ybUZvbnRTaXplKHQsIm91dHNpZGUiPT09dz9VOmopO3ZhciAkPShIPVAocix6LFcpKS5hdHRyKCJ0cmFuc2Zvcm0iKTtpZihILmF0dHIoInRyYW5zZm9ybSIsIiIpLHE9bC5iQm94KEgubm9kZSgpKSxHPXEud2lkdGgsWT1xLmhlaWdodCxILmF0dHIoInRyYW5zZm9ybSIsJCksRzw9MHx8WTw9MClyZXR1cm4gdm9pZCBILnJlbW92ZSgpfXZhciB0dCxldCxydD1JLnRleHRhbmdsZTsib3V0c2lkZSI9PT13PyhldD0iYm90aCI9PT1JLmNvbnN0cmFpbnRleHR8fCJvdXRzaWRlIj09PUkuY29uc3RyYWludGV4dCx0dD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scz0hIWEuaXNIb3Jpem9udGFsLGw9ISFhLmNvbnN0cmFpbmVkLGM9YS5hbmdsZXx8MCx1PWkud2lkdGgsZj1pLmhlaWdodCxoPU1hdGguYWJzKGUtdCkscD1NYXRoLmFicyhuLXIpO289cz9wPjIqXz9fOjA6aD4yKl8/XzowO3ZhciBkPTE7bCYmKGQ9cz9NYXRoLm1pbigxLHAvZik6TWF0aC5taW4oMSxoL3UpKTt2YXIgbT1TKGMpLGc9RShpLG0pLHY9KHM/Zy54OmcueSkvMix5PShpLmxlZnQraS5yaWdodCkvMix4PShpLnRvcCtpLmJvdHRvbSkvMixiPSh0K2UpLzIsdz0ocituKS8yLFQ9MCxBPTAsTT1zP2soZSx0KTprKHIsbik7cz8oYj1lLU0qbyxUPU0qdik6KHc9bitNKm8sQT0tTSp2KTtyZXR1cm57dGV4dFg6eSx0ZXh0WTp4LHRhcmdldFg6Yix0YXJnZXRZOncsYW5jaG9yWDpULGFuY2hvclk6QSxzY2FsZTpkLHJvdGF0ZTptfX0ocyxjLGYscCxxLHtpc0hvcml6b250YWw6Tyxjb25zdHJhaW5lZDpldCxhbmdsZTpydH0pKTooZXQ9ImJvdGgiPT09SS5jb25zdHJhaW50ZXh0fHwiaW5zaWRlIj09PUkuY29uc3RyYWludGV4dCx0dD1MKHMsYyxmLHAscSx7aXNIb3Jpem9udGFsOk8sY29uc3RyYWluZWQ6ZXQsYW5nbGU6cnQsYW5jaG9yOkkuaW5zaWRldGV4dGFuY2hvcn0pKTt0dC5mb250U2l6ZT1XLnNpemUsaChJLnR5cGUsdHQsQyksUi50cmFuc2Zvcm09dHQsQShILEMsZyx2KS5hdHRyKCJ0cmFuc2Zvcm0iLGEuZ2V0VGV4dFRyYW5zZm9ybSh0dCkpfSh0LGUsSSxyLHAsQixOLGosVSxnLHYpLGUubGF5ZXJDbGlwSWQmJmwuaGlkZU91dHNpZGVSYW5nZVBvaW50KGMsSS5zZWxlY3QoInRleHQiKSx3LEMsZi54Y2FsZW5kYXIsZi55Y2FsZW5kYXIpfSkpO3ZhciBqPSExPT09Zi5jbGlwb25heGlzO2wuc2V0Q2xpcFVybChjLGo/bnVsbDplLmxheWVyQ2xpcElkLHQpfSkpO2MuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJwbG90IikodCxJLGUsZyl9LHRvTW92ZUluc2lkZUJhcjpMfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjY3NSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2F0dHJpYnV0ZXMiOjkxNCwiLi9jb25zdGFudHMiOjkxNiwiLi9oZWxwZXJzIjo5MjAsIi4vc3R5bGUiOjkyOCwiLi91bmlmb3JtX3RleHQiOjkzMCwiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw5MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3ZhciBhPWUuYzJwKG4/dC5zMDp0LnAwLCEwKSxvPWUuYzJwKG4/dC5zMTp0LnAxLCEwKSxzPXIuYzJwKG4/dC5wMDp0LnMwLCEwKSxsPXIuYzJwKG4/dC5wMTp0LnMxLCEwKTtyZXR1cm4gaT9bKGErbykvMiwocytsKS8yXTpuP1tvLChzK2wpLzJdOlsoYStvKS8yLGxdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGk9dC5jZCxhPXQueGF4aXMsbz10LnlheGlzLHM9aVswXS50cmFjZSxsPSJmdW5uZWwiPT09cy50eXBlLGM9ImgiPT09cy5vcmllbnRhdGlvbix1PVtdO2lmKCExPT09ZSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxpLmxlbmd0aDtyKyspe3ZhciBmPWlbcl0saD0iY3QiaW4gZj9mLmN0Om4oZixhLG8sYyxsKTtlLmNvbnRhaW5zKGgsITEscix0KT8odS5wdXNoKHtwb2ludE51bWJlcjpyLHg6YS5jMmQoZi54KSx5Om8uYzJkKGYueSl9KSxmLnNlbGVjdGVkPTEpOmYuc2VsZWN0ZWQ9MH1yZXR1cm4gdX19LHt9XSw5Mjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWE7dmFyIG49dCgiLi4vLi4vbGliIikuZGlzdGluY3RWYWxzLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBhKHQsZSl7dGhpcy50cmFjZXM9dCx0aGlzLnNlcE5lZ1ZhbD1lLnNlcE5lZ1ZhbCx0aGlzLm92ZXJsYXBOb01lcmdlPWUub3ZlcmxhcE5vTWVyZ2U7Zm9yKHZhciByPTEvMCxhPVtdLG89MDtvPHQubGVuZ3RoO28rKyl7Zm9yKHZhciBzPXRbb10sbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgYz1zW2xdO2MucCE9PWkmJmEucHVzaChjLnApfXNbMF0mJnNbMF0ud2lkdGgxJiYocj1NYXRoLm1pbihzWzBdLndpZHRoMSxyKSl9dGhpcy5wb3NpdGlvbnM9YTt2YXIgdT1uKGEpO3RoaXMuZGlzdGluY3RQb3NpdGlvbnM9dS52YWxzLDE9PT11LnZhbHMubGVuZ3RoJiZyIT09MS8wP3RoaXMubWluRGlmZj1yOnRoaXMubWluRGlmZj1NYXRoLm1pbih1Lm1pbkRpZmYscik7dmFyIGY9KGUucG9zQXhpc3x8e30pLnR5cGU7ImNhdGVnb3J5IiE9PWYmJiJtdWx0aWNhdGVnb3J5IiE9PWZ8fCh0aGlzLm1pbkRpZmY9MSksdGhpcy5iaW5XaWR0aD10aGlzLm1pbkRpZmYsdGhpcy5iaW5zPXt9fWEucHJvdG90eXBlLnB1dD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2V0TGFiZWwodCxlKSxuPXRoaXMuYmluc1tyXXx8MDtyZXR1cm4gdGhpcy5iaW5zW3JdPW4rZSxufSxhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdldExhYmVsKHQsZSk7cmV0dXJuIHRoaXMuYmluc1tyXXx8MH0sYS5wcm90b3R5cGUuZ2V0TGFiZWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZTwwJiZ0aGlzLnNlcE5lZ1ZhbD8idiI6Il4iKSsodGhpcy5vdmVybGFwTm9NZXJnZT90Ok1hdGgucm91bmQodC90aGlzLmJpbldpZHRoKSl9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzZ9XSw5Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uLy4uL3JlZ2lzdHJ5IiksbD10KCIuL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQsYz10KCIuL2F0dHJpYnV0ZXMiKSx1PWMudGV4dGZvbnQsZj1jLmluc2lkZXRleHRmb250LGg9Yy5vdXRzaWRldGV4dGZvbnQscD10KCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBkKHQsZSxyKXthLnBvaW50U3R5bGUodC5zZWxlY3RBbGwoInBhdGgiKSxlLHIpLG0odCxlLHIpfWZ1bmN0aW9uIG0odCxlLHIpe3Quc2VsZWN0QWxsKCJ0ZXh0IikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9bi5zZWxlY3QodGhpcykscz1vLmVuc3VyZVVuaWZvcm1Gb250U2l6ZShyLGcoaSx0LGUscikpO2EuZm9udChpLHMpfSkpfWZ1bmN0aW9uIGcodCxlLHIsbil7dmFyIGk9bi5fZnVsbExheW91dC5mb250LGE9ci50ZXh0Zm9udDtpZih0LmNsYXNzZWQoImJhcnRleHQtaW5zaWRlIikpe3ZhciBvPV8oZSxyKTthPXkocixlLmksaSxvKX1lbHNlIHQuY2xhc3NlZCgiYmFydGV4dC1vdXRzaWRlIikmJihhPXgocixlLmksaSkpO3JldHVybiBhfWZ1bmN0aW9uIHYodCxlLHIpe3JldHVybiBiKHUsdC50ZXh0Zm9udCxlLHIpfWZ1bmN0aW9uIHkodCxlLHIsbil7dmFyIGE9dih0LGUscik7cmV0dXJuKHZvaWQgMD09PXQuX2lucHV0LnRleHRmb250fHx2b2lkIDA9PT10Ll9pbnB1dC50ZXh0Zm9udC5jb2xvcnx8QXJyYXkuaXNBcnJheSh0LnRleHRmb250LmNvbG9yKSYmdm9pZCAwPT09dC50ZXh0Zm9udC5jb2xvcltlXSkmJihhPXtjb2xvcjppLmNvbnRyYXN0KG4pLGZhbWlseTphLmZhbWlseSxzaXplOmEuc2l6ZX0pLGIoZix0Lmluc2lkZXRleHRmb250LGUsYSl9ZnVuY3Rpb24geCh0LGUscil7dmFyIG49dih0LGUscik7cmV0dXJuIGIoaCx0Lm91dHNpZGV0ZXh0Zm9udCxlLG4pfWZ1bmN0aW9uIGIodCxlLHIsbil7ZT1lfHx7fTt2YXIgaT1wLmdldFZhbHVlKGUuZmFtaWx5LHIpLGE9cC5nZXRWYWx1ZShlLnNpemUsciksbz1wLmdldFZhbHVlKGUuY29sb3Iscik7cmV0dXJue2ZhbWlseTpwLmNvZXJjZVN0cmluZyh0LmZhbWlseSxpLG4uZmFtaWx5KSxzaXplOnAuY29lcmNlTnVtYmVyKHQuc2l6ZSxhLG4uc2l6ZSksY29sb3I6cC5jb2VyY2VDb2xvcih0LmNvbG9yLG8sbi5jb2xvcil9fWZ1bmN0aW9uIF8odCxlKXtyZXR1cm4id2F0ZXJmYWxsIj09PWUudHlwZT9lW3QuZGlyXS5tYXJrZXIuY29sb3I6dC5tY2N8fHQubWN8fGUubWFya2VyLmNvbG9yfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLmJhcmxheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlIik7bCh0LGUsImJhciIpO3ZhciByPWUuc2l6ZSgpLGk9dC5fZnVsbExheW91dDtlLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKS5lYWNoKChmdW5jdGlvbih0KXsoInN0YWNrIj09PWkuYmFybW9kZSYmcj4xfHwwPT09aS5iYXJnYXAmJjA9PT1pLmJhcmdyb3VwZ2FwJiYhdFswXS50cmFjZS5tYXJrZXIubGluZS53aWR0aCkmJm4uc2VsZWN0KHRoaXMpLmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKX0pKSxlLnNlbGVjdEFsbCgiZy5wb2ludHMiKS5lYWNoKChmdW5jdGlvbihlKXtkKG4uc2VsZWN0KHRoaXMpLGVbMF0udHJhY2UsdCl9KSkscy5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN0eWxlIikoZSl9LHN0eWxlVGV4dFBvaW50czptLHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWVbMF0udHJhY2U7aS5zZWxlY3RlZHBvaW50cz9mdW5jdGlvbih0LGUscil7YS5zZWxlY3RlZFBvaW50U3R5bGUodC5zZWxlY3RBbGwoInBhdGgiKSxlKSxmdW5jdGlvbih0LGUscil7dC5lYWNoKChmdW5jdGlvbih0KXt2YXIgaSxzPW4uc2VsZWN0KHRoaXMpO2lmKHQuc2VsZWN0ZWQpe2k9by5lbnN1cmVVbmlmb3JtRm9udFNpemUocixnKHMsdCxlLHIpKTt2YXIgbD1lLnNlbGVjdGVkLnRleHRmb250JiZlLnNlbGVjdGVkLnRleHRmb250LmNvbG9yO2wmJihpLmNvbG9yPWwpLGEuZm9udChzLGkpfWVsc2UgYS5zZWxlY3RlZFRleHRTdHlsZShzLGUpfSkpfSh0LnNlbGVjdEFsbCgidGV4dCIpLGUscil9KHIsaSx0KTooZChyLGksdCkscy5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN0eWxlIikocikpfSxnZXRJbnNpZGVUZXh0Rm9udDp5LGdldE91dHNpZGVUZXh0Rm9udDp4LGdldEJhckNvbG9yOl8scmVzaXplVGV4dDpsfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi9hdHRyaWJ1dGVzIjo5MTQsIi4vaGVscGVycyI6OTIwLCIuL3VuaWZvcm1fdGV4dCI6OTMwLCJAcGxvdGx5L2QzIjo1OH1dLDkyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4uLy4uL2xpYiIpLmNvZXJjZVBhdHRlcm47ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCl7dmFyIGM9cigibWFya2VyLmNvbG9yIixzKSx1PWkodCwibWFya2VyIik7dSYmYSh0LGUsbCxyLHtwcmVmaXg6Im1hcmtlci4iLGNMZXR0ZXI6ImMifSkscigibWFya2VyLmxpbmUuY29sb3IiLG4uZGVmYXVsdExpbmUpLGkodCwibWFya2VyLmxpbmUiKSYmYSh0LGUsbCxyLHtwcmVmaXg6Im1hcmtlci5saW5lLiIsY0xldHRlcjoiYyJ9KSxyKCJtYXJrZXIubGluZS53aWR0aCIpLHIoIm1hcmtlci5vcGFjaXR5IiksbyhyLCJtYXJrZXIucGF0dGVybiIsYyx1KSxyKCJzZWxlY3RlZC5tYXJrZXIuY29sb3IiKSxyKCJ1bnNlbGVjdGVkLm1hcmtlci5jb2xvciIpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjQ5LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NjUwLCIuLi8uLi9saWIiOjc3Nn1dLDkzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKTtmdW5jdGlvbiBhKHQpe3JldHVybiJfIit0KyJUZXh0X21pbnNpemUifWUuZXhwb3J0cz17cmVjb3JkTWluVGV4dFNpemU6ZnVuY3Rpb24odCxlLHIpe2lmKHIudW5pZm9ybXRleHQubW9kZSl7dmFyIG49YSh0KSxpPXIudW5pZm9ybXRleHQubWluc2l6ZSxvPWUuc2NhbGUqZS5mb250U2l6ZTtlLmhpZGU9bzxpLHJbbl09cltuXXx8MS8wLGUuaGlkZXx8KHJbbl09TWF0aC5taW4ocltuXSxNYXRoLm1heChvLGkpKSl9fSxjbGVhck1pblRleHRTaXplOmZ1bmN0aW9uKHQsZSl7ZVthKHQpXT12b2lkIDB9LHJlc2l6ZVRleHQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1hWyJfIityKyJUZXh0X21pbnNpemUiXTtpZihvKXt2YXIgcyxsPSJoaWRlIj09PWEudW5pZm9ybXRleHQubW9kZTtzd2l0Y2gocil7Y2FzZSJmdW5uZWxhcmVhIjpjYXNlInBpZSI6Y2FzZSJzdW5idXJzdCI6cz0iZy5zbGljZSI7YnJlYWs7Y2FzZSJ0cmVlbWFwIjpjYXNlImljaWNsZSI6cz0iZy5zbGljZSwgZy5wYXRoYmFyIjticmVhaztkZWZhdWx0OnM9ImcucG9pbnRzID4gZy5wb2ludCJ9ZS5zZWxlY3RBbGwocykuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC50cmFuc2Zvcm07ZSYmKGUuc2NhbGU9bCYmZS5oaWRlPzA6by9lLmZvbnRTaXplLG4uc2VsZWN0KHRoaXMpLnNlbGVjdCgidGV4dCIpLmF0dHIoInRyYW5zZm9ybSIsaS5nZXRUZXh0VHJhbnNmb3JtKGUpKSl9KSl9fX19LHsiLi4vLi4vbGliIjo3NzYsIkBwbG90bHkvZDMiOjU4fV0sOTMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxhPXQoIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIiksbz10KCIuLi9iYXIvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17cjphLnIsdGhldGE6YS50aGV0YSxyMDphLnIwLGRyOmEuZHIsdGhldGEwOmEudGhldGEwLGR0aGV0YTphLmR0aGV0YSx0aGV0YXVuaXQ6YS50aGV0YXVuaXQsYmFzZTppKHt9LG8uYmFzZSx7fSksb2Zmc2V0Omkoe30sby5vZmZzZXQse30pLHdpZHRoOmkoe30sby53aWR0aCx7fSksdGV4dDppKHt9LG8udGV4dCx7fSksaG92ZXJ0ZXh0Omkoe30sby5ob3ZlcnRleHQse30pLG1hcmtlcjpvLm1hcmtlcixob3ZlcmluZm86YS5ob3ZlcmluZm8saG92ZXJ0ZW1wbGF0ZTpuKCksc2VsZWN0ZWQ6by5zZWxlY3RlZCx1bnNlbGVjdGVkOm8udW5zZWxlY3RlZH19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4uL2Jhci9hdHRyaWJ1dGVzIjo5MTQsIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIjoxMjY1fV0sOTMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYT10KCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksbz10KCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyIpLnNldEdyb3VwUG9zaXRpb25zLHM9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLGw9dCgiLi4vLi4vcmVnaXN0cnkiKS50cmFjZUlzLGM9dCgiLi4vLi4vbGliIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fZnVsbExheW91dCxvPWUuc3VicGxvdCxsPXJbb10ucmFkaWFsYXhpcyxjPXJbb10uYW5ndWxhcmF4aXMsdT1sLm1ha2VDYWxjZGF0YShlLCJyIiksZj1jLm1ha2VDYWxjZGF0YShlLCJ0aGV0YSIpLGg9ZS5fbGVuZ3RoLHA9bmV3IEFycmF5KGgpLGQ9dSxtPWYsZz0wO2c8aDtnKyspcFtnXT17cDptW2ddLHM6ZFtnXX07ZnVuY3Rpb24gdih0KXt2YXIgcj1lW3RdO3ZvaWQgMCE9PXImJihlWyJfIit0XT1BcnJheS5pc0FycmF5KHIpP2MubWFrZUNhbGNkYXRhKGUsdCk6Yy5kMmMocixlLnRoZXRhdW5pdCkpfXJldHVybiJsaW5lYXIiPT09Yy50eXBlJiYodigid2lkdGgiKSx2KCJvZmZzZXQiKSksbihlLCJtYXJrZXIiKSYmaSh0LGUse3ZhbHM6ZS5tYXJrZXIuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIiLGNMZXR0ZXI6ImMifSksbihlLCJtYXJrZXIubGluZSIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyLmxpbmUiLGNMZXR0ZXI6ImMifSksYShwLGUpLHMocCxlKSxwfSxjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQuY2FsY2RhdGEsaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV0sdT1zWzBdLnRyYWNlOyEwPT09dS52aXNpYmxlJiZsKHUsImJhciIpJiZ1LnN1YnBsb3Q9PT1yJiZpLnB1c2gocyl9dmFyIGY9Yyh7fSxlLnJhZGlhbGF4aXMse19pZDoieCJ9KSxoPWUuYW5ndWxhcmF4aXM7byh0LGgsZixpLHttb2RlOmUuYmFybW9kZSxub3JtOmUuYmFybm9ybSxnYXA6ZS5iYXJnYXAsZ3JvdXBnYXA6ZS5iYXJncm91cGdhcH0pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjY0NywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjY1MCwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGEiOjkxMywiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiOjkxNywiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTE5M31dLDkzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXJwb2xhci9kZWZhdWx0cyIpLmhhbmRsZVJUaGV0YURlZmF1bHRzLGE9dCgiLi4vYmFyL3N0eWxlX2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWkodCxlLHMsbCk/KGwoInRoZXRhdW5pdCIpLGwoImJhc2UiKSxsKCJvZmZzZXQiKSxsKCJ3aWR0aCIpLGwoInRleHQiKSxsKCJob3ZlcnRleHQiKSxsKCJob3ZlcnRlbXBsYXRlIiksYSh0LGUsbCxyLHMpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGwpKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9iYXIvc3R5bGVfZGVmYXVsdHMiOjkyOSwiLi4vc2NhdHRlcnBvbGFyL2RlZmF1bHRzIjoxMjY3LCIuL2F0dHJpYnV0ZXMiOjkzMX1dLDkzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL2Jhci9ob3ZlciIpLmdldFRyYWNlQ29sb3Isbz1pLmZpbGxUZXh0LHM9dCgiLi4vc2NhdHRlcnBvbGFyL2hvdmVyIikubWFrZUhvdmVyUG9pbnRUZXh0LGw9dCgiLi4vLi4vcGxvdHMvcG9sYXIvaGVscGVycyIpLmlzUHRJbnNpZGVQb2x5Z29uO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGM9dC5jZCx1PWNbMF0udHJhY2UsZj10LnN1YnBsb3QsaD1mLnJhZGlhbEF4aXMscD1mLmFuZ3VsYXJBeGlzLGQ9Zi52YW5nbGVzLG09ZD9sOmkuaXNQdEluc2lkZVNlY3RvcixnPXQubWF4SG92ZXJEaXN0YW5jZSx2PXAuX3BlcmlvZHx8MipNYXRoLlBJLHk9TWF0aC5hYnMoaC5nMnAoTWF0aC5zcXJ0KGUqZStyKnIpKSkseD1NYXRoLmF0YW4yKHIsZSk7aC5yYW5nZVswXT5oLnJhbmdlWzFdJiYoeCs9TWF0aC5QSSk7aWYobi5nZXRDbG9zZXN0KGMsKGZ1bmN0aW9uKHQpe3JldHVybiBtKHkseCxbdC5ycDAsdC5ycDFdLFt0LnRoZXRhZzAsdC50aGV0YWcxXSxkKT9nK01hdGgubWluKDEsTWF0aC5hYnModC50aGV0YWcxLXQudGhldGFnMCkvdiktMSsodC5ycDEteSkvKHQucnAxLXQucnAwKS0xOjEvMH0pLHQpLCExIT09dC5pbmRleCl7dmFyIGI9Y1t0LmluZGV4XTt0LngwPXQueDE9Yi5jdFswXSx0LnkwPXQueTE9Yi5jdFsxXTt2YXIgXz1pLmV4dGVuZEZsYXQoe30sYix7cjpiLnMsdGhldGE6Yi5wfSk7cmV0dXJuIG8oYix1LHQpLHMoXyx1LGYsdCksdC5ob3ZlcnRlbXBsYXRlPXUuaG92ZXJ0ZW1wbGF0ZSx0LmNvbG9yPWEodSxiKSx0LnhMYWJlbFZhbD10LnlMYWJlbFZhbD12b2lkIDAsYi5zPDAmJih0LmlkZWFsQWxpZ249ImxlZnQiKSxbdF19fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NzksIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzIjo4OTIsIi4uL2Jhci9ob3ZlciI6OTIxLCIuLi9zY2F0dGVycG9sYXIvaG92ZXIiOjEyNjl9XSw5MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiYmFycG9sYXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL3BvbGFyIiksY2F0ZWdvcmllczpbInBvbGFyIiwiYmFyIiwic2hvd0xlZ2VuZCJdLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKS5jYWxjLGNyb3NzVHJhY2VDYWxjOnQoIi4vY2FsYyIpLmNyb3NzVHJhY2VDYWxjLHBsb3Q6dCgiLi9wbG90IiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi4vc2NhdHRlcnBvbGFyL2Zvcm1hdF9sYWJlbHMiKSxzdHlsZTp0KCIuLi9iYXIvc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4uL2Jhci9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLHNlbGVjdFBvaW50czp0KCIuLi9iYXIvc2VsZWN0IiksbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvcG9sYXIiOjg5MywiLi4vYmFyL3NlbGVjdCI6OTI2LCIuLi9iYXIvc3R5bGUiOjkyOCwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEyMDksIi4uL3NjYXR0ZXJwb2xhci9mb3JtYXRfbGFiZWxzIjoxMjY4LCIuL2F0dHJpYnV0ZXMiOjkzMSwiLi9jYWxjIjo5MzIsIi4vZGVmYXVsdHMiOjkzMywiLi9ob3ZlciI6OTM0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo5MzYsIi4vbGF5b3V0X2RlZmF1bHRzIjo5MzcsIi4vcGxvdCI6OTM4fV0sOTM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YmFybW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhY2siLCJvdmVybGF5Il0sZGZsdDoic3RhY2siLGVkaXRUeXBlOiJjYWxjIn0sYmFyZ2FwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6LjEsbWluOjAsbWF4OjEsZWRpdFR5cGU6ImNhbGMifX19LHt9XSw5Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvPXt9O2Z1bmN0aW9uIHMocixvKXtyZXR1cm4gbi5jb2VyY2UodFthXXx8e30sZVthXSxpLHIsbyl9Zm9yKHZhciBsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBjPXJbbF07ImJhcnBvbGFyIj09PWMudHlwZSYmITA9PT1jLnZpc2libGUmJihvW2E9Yy5zdWJwbG90XXx8KHMoImJhcm1vZGUiKSxzKCJiYXJnYXAiKSxvW2FdPTEpKX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo5MzZ9XSw5Mzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbD1lLnhheGlzLGM9ZS55YXhpcyx1PWUucmFkaWFsQXhpcyxmPWUuYW5ndWxhckF4aXMsaD1mdW5jdGlvbih0KXt2YXIgZT10LmN4eCxyPXQuY3l5O2lmKHQudmFuZ2xlcylyZXR1cm4gZnVuY3Rpb24obixpLG8sbCl7dmFyIGMsdTthLmFuZ2xlRGVsdGEobyxsKT4wPyhjPW8sdT1sKTooYz1sLHU9byk7dmFyIGY9W3MuZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlcyhjLHQudmFuZ2xlcylbMF0sKGMrdSkvMixzLmZpbmRFbmNsb3NpbmdWZXJ0ZXhBbmdsZXModSx0LnZhbmdsZXMpWzFdXTtyZXR1cm4gcy5wYXRoUG9seWdvbkFubnVsdXMobixpLGMsdSxmLGUscil9O3JldHVybiBmdW5jdGlvbih0LG4saSxvKXtyZXR1cm4gYS5wYXRoQW5udWx1cyh0LG4saSxvLGUscil9fShlKSxwPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoImcuYmFybGF5ZXIiKTthLm1ha2VUcmFjZUdyb3VwcyhwLHIsInRyYWNlIGJhcnMiKS5lYWNoKChmdW5jdGlvbigpe3ZhciByPW4uc2VsZWN0KHRoaXMpLHM9YS5lbnN1cmVTaW5nbGUociwiZyIsInBvaW50cyIpLnNlbGVjdEFsbCgiZy5wb2ludCIpLmRhdGEoYS5pZGVudGl0eSk7cy5lbnRlcigpLmFwcGVuZCgiZyIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwyKS5jbGFzc2VkKCJwb2ludCIsITApLHMuZXhpdCgpLnJlbW92ZSgpLHMuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGUscj1uLnNlbGVjdCh0aGlzKSxvPXQucnAwPXUuYzJwKHQuczApLHM9dC5ycDE9dS5jMnAodC5zMSkscD10LnRoZXRhZzA9Zi5jMmcodC5wMCksZD10LnRoZXRhZzE9Zi5jMmcodC5wMSk7aWYoaShvKSYmaShzKSYmaShwKSYmaShkKSYmbyE9PXMmJnAhPT1kKXt2YXIgbT11LmMyZyh0LnMxKSxnPShwK2QpLzI7dC5jdD1bbC5jMnAobSpNYXRoLmNvcyhnKSksYy5jMnAobSpNYXRoLnNpbihnKSldLGU9aChvLHMscCxkKX1lbHNlIGU9Ik0wLDBaIjthLmVuc3VyZVNpbmdsZShyLCJwYXRoIikuYXR0cigiZCIsZSl9KSksby5zZXRDbGlwVXJsKHIsZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkcy5mb3JUcmFjZXM6bnVsbCx0KX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzIjo4OTIsIkBwbG90bHkvZDMiOjU4LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sOTM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vYmFyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQscz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGw9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYz1uLm1hcmtlcix1PWMubGluZTtlLmV4cG9ydHM9e3k6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx4MDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHkwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sZHg6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSxkeTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHhwZXJpb2Q6bi54cGVyaW9kLHlwZXJpb2Q6bi55cGVyaW9kLHhwZXJpb2QwOm4ueHBlcmlvZDAseXBlcmlvZDA6bi55cGVyaW9kMCx4cGVyaW9kYWxpZ25tZW50Om4ueHBlcmlvZGFsaWdubWVudCx5cGVyaW9kYWxpZ25tZW50Om4ueXBlcmlvZGFsaWdubWVudCx4aG92ZXJmb3JtYXQ6bygieCIpLHlob3ZlcmZvcm1hdDpvKCJ5IiksbmFtZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHExOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LG1lZGlhbjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxxMzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxsb3dlcmZlbmNlOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHVwcGVyZmVuY2U6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbm90Y2hlZDp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxub3RjaHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDouNSxkZmx0Oi4yNSxlZGl0VHlwZToiY2FsYyJ9LG5vdGNoc3Bhbjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxib3hwb2ludHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsIm91dGxpZXJzIiwic3VzcGVjdGVkb3V0bGllcnMiLCExXSxlZGl0VHlwZToiY2FsYyJ9LGppdHRlcjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9LHBvaW50cG9zOnt2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MixlZGl0VHlwZToiY2FsYyJ9LGJveG1lYW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsInNkIiwhMV0sZWRpdFR5cGU6ImNhbGMifSxtZWFuOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHNkOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0scXVhcnRpbGVtZXRob2Q6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsImV4Y2x1c2l2ZSIsImluY2x1c2l2ZSJdLGRmbHQ6ImxpbmVhciIsZWRpdFR5cGU6ImNhbGMifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxtYXJrZXI6e291dGxpZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwgMCwgMCwgMCkiLGVkaXRUeXBlOiJzdHlsZSJ9LHN5bWJvbDpsKHt9LGMuc3ltYm9sLHthcnJheU9rOiExLGVkaXRUeXBlOiJwbG90In0pLG9wYWNpdHk6bCh7fSxjLm9wYWNpdHkse2FycmF5T2s6ITEsZGZsdDoxLGVkaXRUeXBlOiJzdHlsZSJ9KSxzaXplOmwoe30sYy5zaXplLHthcnJheU9rOiExLGVkaXRUeXBlOiJjYWxjIn0pLGNvbG9yOmwoe30sYy5jb2xvcix7YXJyYXlPazohMSxlZGl0VHlwZToic3R5bGUifSksbGluZTp7Y29sb3I6bCh7fSx1LmNvbG9yLHthcnJheU9rOiExLGRmbHQ6YS5kZWZhdWx0TGluZSxlZGl0VHlwZToic3R5bGUifSksd2lkdGg6bCh7fSx1LndpZHRoLHthcnJheU9rOiExLGRmbHQ6MCxlZGl0VHlwZToic3R5bGUifSksb3V0bGllcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sb3V0bGllcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToicGxvdCJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sZmlsbGNvbG9yOm4uZmlsbGNvbG9yLHdoaXNrZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi41LGVkaXRUeXBlOiJjYWxjIn0sb2Zmc2V0Z3JvdXA6aS5vZmZzZXRncm91cCxhbGlnbm1lbnRncm91cDppLmFsaWdubWVudGdyb3VwLHNlbGVjdGVkOnttYXJrZXI6bi5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6InN0eWxlIn0sdW5zZWxlY3RlZDp7bWFya2VyOm4udW5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6InN0eWxlIn0sdGV4dDpsKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0Omwoe30sbi5ob3ZlcnRleHQse30pLGhvdmVydGVtcGxhdGU6cyh7fSksaG92ZXJvbjp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiYm94ZXMiLCJwb2ludHMiXSxkZmx0OiJib3hlcytwb2ludHMiLGVkaXRUeXBlOiJzdHlsZSJ9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYzOCwiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6ODMwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4uL2Jhci9hdHRyaWJ1dGVzIjo5MTQsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE5MX1dLDk0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxsPW8uXztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixjLHkseCxiLF8sdyxUPXQuX2Z1bGxMYXlvdXQsaz1pLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IiksQT1pLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5IiksTT1bXSxTPSJ2aW9saW4iPT09ZS50eXBlPyJfbnVtVmlvbGlucyI6Il9udW1Cb3hlcyI7ImgiPT09ZS5vcmllbnRhdGlvbj8oeT1rLHg9IngiLGI9QSxfPSJ5Iix3PSEhZS55cGVyaW9kYWxpZ25tZW50KTooeT1BLHg9InkiLGI9ayxfPSJ4Iix3PSEhZS54cGVyaW9kYWxpZ25tZW50KTt2YXIgRSxMLEMsUCxJLE8sej1mdW5jdGlvbih0LGUscixpKXt2YXIgcyxsPWUrIjAiaW4gdCxjPSJkIitlIGluIHQ7aWYoZSBpbiB0fHxsJiZjKXt2YXIgdT1yLm1ha2VDYWxjZGF0YSh0LGUpO3JldHVyblthKHQscixlLHUpLnZhbHMsdV19cz1sP3RbZSsiMCJdOiJuYW1lImluIHQmJigiY2F0ZWdvcnkiPT09ci50eXBlfHxuKHQubmFtZSkmJi0xIT09WyJsaW5lYXIiLCJsb2ciXS5pbmRleE9mKHIudHlwZSl8fG8uaXNEYXRlVGltZSh0Lm5hbWUpJiYiZGF0ZSI9PT1yLnR5cGUpP3QubmFtZTppO2Zvcih2YXIgZj0ibXVsdGljYXRlZ29yeSI9PT1yLnR5cGU/ci5yMmNfanVzdF9pbmRpY2VzKHMpOnIuZDJjKHMsMCx0W2UrImNhbGVuZGFyIl0pLGg9dC5fbGVuZ3RoLHA9bmV3IEFycmF5KGgpLGQ9MDtkPGg7ZCsrKXBbZF09ZjtyZXR1cm5bcF19KGUsXyxiLFRbU10pLEQ9elswXSxSPXpbMV0sRj1vLmRpc3RpbmN0VmFscyhELGIpLEI9Ri52YWxzLE49Ri5taW5EaWZmLzIsaj0iYWxsIj09PShlLmJveHBvaW50c3x8ZS5wb2ludHMpP28uaWRlbnRpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHQudjxFLmxmfHx0LnY+RS51Zn07aWYoZS5faGFzUHJlQ29tcFN0YXRzKXt2YXIgVT1lW3hdLFY9ZnVuY3Rpb24odCl7cmV0dXJuIHkuZDJjKChlW3RdfHxbXSlbcl0pfSxIPTEvMCxxPS0xLzA7Zm9yKHI9MDtyPGUuX2xlbmd0aDtyKyspe3ZhciBHPURbcl07aWYobihHKSl7aWYoKEU9e30pLnBvcz1FW19dPUcsdyYmUiYmKEUub3JpZ19wPVJbcl0pLEUucTE9VigicTEiKSxFLm1lZD1WKCJtZWRpYW4iKSxFLnEzPVYoInEzIiksTD1bXSxVJiZvLmlzQXJyYXlPclR5cGVkQXJyYXkoVVtyXSkpZm9yKGM9MDtjPFVbcl0ubGVuZ3RoO2MrKykoTz15LmQyYyhVW3JdW2NdKSkhPT1zJiYodShJPXt2Ok8saTpbcixjXX0sZSxbcixjXSksTC5wdXNoKEkpKTtpZihFLnB0cz1MLnNvcnQoZiksUD0oQz1FW3hdPUwubWFwKGgpKS5sZW5ndGgsRS5tZWQhPT1zJiZFLnExIT09cyYmRS5xMyE9PXMmJkUubWVkPj1FLnExJiZFLnEzPj1FLm1lZCl7dmFyIFk9VigibG93ZXJmZW5jZSIpO0UubGY9WSE9PXMmJlk8PUUucTE/WTpwKEUsQyxQKTt2YXIgVz1WKCJ1cHBlcmZlbmNlIik7RS51Zj1XIT09cyYmVz49RS5xMz9XOmQoRSxDLFApO3ZhciBYPVYoIm1lYW4iKTtFLm1lYW49WCE9PXM/WDpQP28ubWVhbihDLFApOihFLnExK0UucTMpLzI7dmFyIFo9Vigic2QiKTtFLnNkPVghPT1zJiZaPj0wP1o6UD9vLnN0ZGV2KEMsUCxFLm1lYW4pOkUucTMtRS5xMSxFLmxvPW0oRSksRS51bz1nKEUpO3ZhciBKPVYoIm5vdGNoc3BhbiIpO0o9SiE9PXMmJko+MD9KOnYoRSxQKSxFLmxuPUUubWVkLUosRS51bj1FLm1lZCtKO3ZhciBLPUUubGYsUT1FLnVmO2UuYm94cG9pbnRzJiZDLmxlbmd0aCYmKEs9TWF0aC5taW4oSyxDWzBdKSxRPU1hdGgubWF4KFEsQ1tQLTFdKSksZS5ub3RjaGVkJiYoSz1NYXRoLm1pbihLLEUubG4pLFE9TWF0aC5tYXgoUSxFLnVuKSksRS5taW49SyxFLm1heD1RfWVsc2V7dmFyICQ7by53YXJuKFsiSW52YWxpZCBpbnB1dCAtIG1ha2Ugc3VyZSB0aGF0IHExIDw9IG1lZGlhbiA8PSBxMyIsInExID0gIitFLnExLCJtZWRpYW4gPSAiK0UubWVkLCJxMyA9ICIrRS5xM10uam9pbigiXG4iKSksJD1FLm1lZCE9PXM/RS5tZWQ6RS5xMSE9PXM/RS5xMyE9PXM/KEUucTErRS5xMykvMjpFLnExOkUucTMhPT1zP0UucTM6MCxFLm1lZD0kLEUucTE9RS5xMz0kLEUubGY9RS51Zj0kLEUubWVhbj1FLnNkPSQsRS5sbj1FLnVuPSQsRS5taW49RS5tYXg9JH1IPU1hdGgubWluKEgsRS5taW4pLHE9TWF0aC5tYXgocSxFLm1heCksRS5wdHMyPUwuZmlsdGVyKGopLE0ucHVzaChFKX19ZS5fZXh0cmVtZXNbeS5faWRdPWkuZmluZEV4dHJlbWVzKHksW0gscV0se3BhZGRlZDohMH0pfWVsc2V7dmFyIHR0PXkubWFrZUNhbGNkYXRhKGUseCksZXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkocisxKSxpPTA7aTxyO2krKyluW2ldPXRbaV0tZTtyZXR1cm4gbltyXT10W3ItMV0rZSxufShCLE4pLHJ0PUIubGVuZ3RoLG50PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT1bXTtyZXR1cm4gZX0ocnQpO2ZvcihyPTA7cjxlLl9sZW5ndGg7cisrKWlmKE89dHRbcl0sbihPKSl7dmFyIGl0PW8uZmluZEJpbihEW3JdLGV0KTtpdD49MCYmaXQ8cnQmJih1KEk9e3Y6TyxpOnJ9LGUsciksbnRbaXRdLnB1c2goSSkpfXZhciBhdD0xLzAsb3Q9LTEvMCxzdD1lLnF1YXJ0aWxlbWV0aG9kLGx0PSJleGNsdXNpdmUiPT09c3QsY3Q9ImluY2x1c2l2ZSI9PT1zdDtmb3Iocj0wO3I8cnQ7cisrKWlmKG50W3JdLmxlbmd0aD4wKXt2YXIgdXQsZnQ7aWYoKEU9e30pLnBvcz1FW19dPUJbcl0sTD1FLnB0cz1udFtyXS5zb3J0KGYpLFA9KEM9RVt4XT1MLm1hcChoKSkubGVuZ3RoLEUubWluPUNbMF0sRS5tYXg9Q1tQLTFdLEUubWVhbj1vLm1lYW4oQyxQKSxFLnNkPW8uc3RkZXYoQyxQLEUubWVhbiksRS5tZWQ9by5pbnRlcnAoQywuNSksUCUyJiYobHR8fGN0KSlsdD8odXQ9Qy5zbGljZSgwLFAvMiksZnQ9Qy5zbGljZShQLzIrMSkpOmN0JiYodXQ9Qy5zbGljZSgwLFAvMisxKSxmdD1DLnNsaWNlKFAvMikpLEUucTE9by5pbnRlcnAodXQsLjUpLEUucTM9by5pbnRlcnAoZnQsLjUpO2Vsc2UgRS5xMT1vLmludGVycChDLC4yNSksRS5xMz1vLmludGVycChDLC43NSk7RS5sZj1wKEUsQyxQKSxFLnVmPWQoRSxDLFApLEUubG89bShFKSxFLnVvPWcoRSk7dmFyIGh0PXYoRSxQKTtFLmxuPUUubWVkLWh0LEUudW49RS5tZWQraHQsYXQ9TWF0aC5taW4oYXQsRS5sbiksb3Q9TWF0aC5tYXgob3QsRS51biksRS5wdHMyPUwuZmlsdGVyKGopLE0ucHVzaChFKX1lLl9leHRyZW1lc1t5Ll9pZF09aS5maW5kRXh0cmVtZXMoeSxlLm5vdGNoZWQ/dHQuY29uY2F0KFthdCxvdF0pOnR0LHtwYWRkZWQ6ITB9KX1yZXR1cm4gZnVuY3Rpb24odCxlKXtpZihvLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5zZWxlY3RlZHBvaW50cykpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe2Zvcih2YXIgbj10W3JdLnB0c3x8W10saT17fSxhPTA7YTxuLmxlbmd0aDthKyspaVtuW2FdLmldPWE7by50YWdTZWxlY3RlZChuLGUsaSl9fShNLGUpLE0ubGVuZ3RoPjA/KE1bMF0udD17bnVtOlRbU10sZFBvczpOLHBvc0xldHRlcjpfLHZhbExldHRlcjp4LGxhYmVsczp7bWVkOmwodCwibWVkaWFuOiIpLG1pbjpsKHQsIm1pbjoiKSxxMTpsKHQsInExOiIpLHEzOmwodCwicTM6IiksbWF4OmwodCwibWF4OiIpLG1lYW46InNkIj09PWUuYm94bWVhbj9sKHQsIm1lYW4gXHhiMSBcdTAzYzM6Iik6bCh0LCJtZWFuOiIpLGxmOmwodCwibG93ZXIgZmVuY2U6IiksdWY6bCh0LCJ1cHBlciBmZW5jZToiKX19LFRbU10rKyxNKTpbe3Q6e2VtcHR5OiEwfX1dfTt2YXIgYz17dGV4dDoidHgiLGhvdmVydGV4dDoiaHR4In07ZnVuY3Rpb24gdSh0LGUscil7Zm9yKHZhciBuIGluIGMpby5pc0FycmF5T3JUeXBlZEFycmF5KGVbbl0pJiYoQXJyYXkuaXNBcnJheShyKT9vLmlzQXJyYXlPclR5cGVkQXJyYXkoZVtuXVtyWzBdXSkmJih0W2Nbbl1dPWVbbl1bclswXV1bclsxXV0pOnRbY1tuXV09ZVtuXVtyXSl9ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0LnYtZS52fWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQudn1mdW5jdGlvbiBwKHQsZSxyKXtyZXR1cm4gMD09PXI/dC5xMTpNYXRoLm1pbih0LnExLGVbTWF0aC5taW4oby5maW5kQmluKDIuNSp0LnExLTEuNSp0LnEzLGUsITApKzEsci0xKV0pfWZ1bmN0aW9uIGQodCxlLHIpe3JldHVybiAwPT09cj90LnEzOk1hdGgubWF4KHQucTMsZVtNYXRoLm1heChvLmZpbmRCaW4oMi41KnQucTMtMS41KnQucTEsZSksMCldKX1mdW5jdGlvbiBtKHQpe3JldHVybiA0KnQucTEtMyp0LnEzfWZ1bmN0aW9uIGcodCl7cmV0dXJuIDQqdC5xMy0zKnQucTF9ZnVuY3Rpb24gdih0LGUpe3JldHVybiAwPT09ZT8wOjEuNTcqKHQucTMtdC5xMSkvTWF0aC5zcXJ0KGUpfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIjo4MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw5NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIikuZ2V0QXhpc0dyb3VwLG89WyJ2IiwiaCJdO2Z1bmN0aW9uIHModCxlLHIsbyl7dmFyIHMsbCxjLHU9ZS5jYWxjZGF0YSxmPWUuX2Z1bGxMYXlvdXQsaD1vLl9pZCxwPWguY2hhckF0KDApLGQ9W10sbT0wO2ZvcihzPTA7czxyLmxlbmd0aDtzKyspZm9yKGM9dVtyW3NdXSxsPTA7bDxjLmxlbmd0aDtsKyspZC5wdXNoKG8uYzJsKGNbbF0ucG9zLCEwKSksbSs9KGNbbF0ucHRzMnx8W10pLmxlbmd0aDtpZihkLmxlbmd0aCl7dmFyIGc9aS5kaXN0aW5jdFZhbHMoZCk7ImNhdGVnb3J5IiE9PW8udHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09by50eXBlfHwoZy5taW5EaWZmPTEpO3ZhciB2PWcubWluRGlmZi8yO24ubWluRHRpY2sobyxnLm1pbkRpZmYsZy52YWxzWzBdLCEwKTt2YXIgeT1mWyJ2aW9saW4iPT09dD8iX251bVZpb2xpbnMiOiJfbnVtQm94ZXMiXSx4PSJncm91cCI9PT1mW3QrIm1vZGUiXSYmeT4xLGI9MS1mW3QrImdhcCJdLF89MS1mW3QrImdyb3VwZ2FwIl07Zm9yKHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIHcsVCxrLEEsTSxTLEU9KGM9dVtyW3NdXSlbMF0udHJhY2UsTD1jWzBdLnQsQz1FLndpZHRoLFA9RS5zaWRlO2lmKEMpdz1UPUE9Qy8yLGs9MDtlbHNlIGlmKHc9dix4KXt2YXIgST1hKGYsby5faWQpK0Uub3JpZW50YXRpb24sTz0oZi5fYWxpZ25tZW50T3B0c1tJXXx8e30pW0UuYWxpZ25tZW50Z3JvdXBdfHx7fSx6PU9iamVjdC5rZXlzKE8ub2Zmc2V0R3JvdXBzfHx7fSkubGVuZ3RoLEQ9enx8eTtUPXcqYipfL0Qsaz0yKncqKCgoej9FLl9vZmZzZXRJbmRleDpMLm51bSkrLjUpL0QtLjUpKmIsQT13KmIvRH1lbHNlIFQ9dypiKl8saz0wLEE9dztMLmRQb3M9dyxMLmJQb3M9ayxMLmJkUG9zPVQsTC53SG92ZXI9QTt2YXIgUixGLEIsTixqLFUsVj1rK1QsSD1Cb29sZWFuKEMpO2lmKCJwb3NpdGl2ZSI9PT1QPyhNPXcqKEM/MTouNSksUj1WLFM9Uj1rKToibmVnYXRpdmUiPT09UD8oTT1SPWssUz13KihDPzE6LjUpLEY9Vik6KE09Uz13LFI9Rj1WKSwoRS5ib3hwb2ludHN8fEUucG9pbnRzKSYmbT4wKXt2YXIgcT1FLnBvaW50cG9zLEc9RS5qaXR0ZXIsWT1FLm1hcmtlci5zaXplLzIsVz0wO3ErRz49MCYmKChXPVYqKHErRykpPk0/KEg9ITAsaj1ZLEI9Vyk6Vz5SJiYoaj1ZLEI9TSkpLFc8PU0mJihCPU0pO3ZhciBYPTA7cS1HPD0wJiYoKFg9LVYqKHEtRykpPlM/KEg9ITAsVT1ZLE49WCk6WD5GJiYoVT1ZLE49UykpLFg8PVMmJihOPVMpfWVsc2UgQj1NLE49Uzt2YXIgWj1uZXcgQXJyYXkoYy5sZW5ndGgpO2ZvcihsPTA7bDxjLmxlbmd0aDtsKyspWltsXT1jW2xdLnBvcztFLl9leHRyZW1lc1toXT1uLmZpbmRFeHRyZW1lcyhvLFose3BhZGRlZDpILHZwYWRtaW51czpOLHZwYWRwbHVzOkIsdnBhZExpbmVhcml6ZWQ6ITAscHBhZG1pbnVzOnt4OlUseTpqfVtwXSxwcGFkcGx1czp7eDpqLHk6VX1bcF19KX19fWUuZXhwb3J0cz17Y3Jvc3NUcmFjZUNhbGM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jYWxjZGF0YSxuPWUueGF4aXMsaT1lLnlheGlzLGE9MDthPG8ubGVuZ3RoO2ErKyl7Zm9yKHZhciBsPW9bYV0sYz0iaCI9PT1sP2k6bix1PVtdLGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIGg9cltmXSxwPWhbMF0udCxkPWhbMF0udHJhY2U7ITAhPT1kLnZpc2libGV8fCJib3giIT09ZC50eXBlJiYiY2FuZGxlc3RpY2siIT09ZC50eXBlfHxwLmVtcHR5fHwoZC5vcmllbnRhdGlvbnx8InYiKSE9PWx8fGQueGF4aXMhPT1uLl9pZHx8ZC55YXhpcyE9PWkuX2lkfHx1LnB1c2goZil9cygiYm94Iix0LHUsYyl9fSxzZXRQb3NpdGlvbk9mZnNldDpzfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIjo4MzV9XSw5NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiKSxzPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMsbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZSIpLGM9dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gdSh0LGUscixhKXtmdW5jdGlvbiBvKHQpe3ZhciBlPTA7cmV0dXJuIHQmJnQubGVuZ3RoJiYoZSs9MSxuLmlzQXJyYXlPclR5cGVkQXJyYXkodFswXSkmJnRbMF0ubGVuZ3RoJiYoZSs9MSkpLGV9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gbi52YWxpZGF0ZSh0W2VdLGNbZV0pfXZhciB1LGY9cigieSIpLGg9cigieCIpO2lmKCJib3giPT09ZS50eXBlKXt2YXIgcD1yKCJxMSIpLGQ9cigibWVkaWFuIiksbT1yKCJxMyIpO2UuX2hhc1ByZUNvbXBTdGF0cz1wJiZwLmxlbmd0aCYmZCYmZC5sZW5ndGgmJm0mJm0ubGVuZ3RoLHU9TWF0aC5taW4obi5taW5Sb3dMZW5ndGgocCksbi5taW5Sb3dMZW5ndGgoZCksbi5taW5Sb3dMZW5ndGgobSkpfXZhciBnLHYseT1vKGYpLHg9byhoKSxiPXkmJm4ubWluUm93TGVuZ3RoKGYpLF89eCYmbi5taW5Sb3dMZW5ndGgoaCksdz1hLmNhbGVuZGFyLFQ9e2F1dG90eXBlbnVtYmVyczphLmF1dG90eXBlbnVtYmVyc307aWYoZS5faGFzUHJlQ29tcFN0YXRzKXN3aXRjaChTdHJpbmcoeCkrU3RyaW5nKHkpKXtjYXNlIjAwIjp2YXIgaz1zKCJ4MCIpfHxzKCJkeCIpO2c9KHMoInkwIil8fHMoImR5IikpJiYhaz8iaCI6InYiLHY9dTticmVhaztjYXNlIjEwIjpnPSJ2Iix2PU1hdGgubWluKHUsXyk7YnJlYWs7Y2FzZSIyMCI6Zz0iaCIsdj1NYXRoLm1pbih1LGgubGVuZ3RoKTticmVhaztjYXNlIjAxIjpnPSJoIix2PU1hdGgubWluKHUsYik7YnJlYWs7Y2FzZSIwMiI6Zz0idiIsdj1NYXRoLm1pbih1LGYubGVuZ3RoKTticmVhaztjYXNlIjEyIjpnPSJ2Iix2PU1hdGgubWluKHUsXyxmLmxlbmd0aCk7YnJlYWs7Y2FzZSIyMSI6Zz0iaCIsdj1NYXRoLm1pbih1LGgubGVuZ3RoLGIpO2JyZWFrO2Nhc2UiMTEiOnY9MDticmVhaztjYXNlIjIyIjp2YXIgQSxNPSExO2ZvcihBPTA7QTxoLmxlbmd0aDtBKyspaWYoImNhdGVnb3J5Ij09PWwoaFtBXSx3LFQpKXtNPSEwO2JyZWFrfWlmKE0pZz0idiIsdj1NYXRoLm1pbih1LF8sZi5sZW5ndGgpO2Vsc2V7Zm9yKEE9MDtBPGYubGVuZ3RoO0ErKylpZigiY2F0ZWdvcnkiPT09bChmW0FdLHcsVCkpe009ITA7YnJlYWt9TT8oZz0iaCIsdj1NYXRoLm1pbih1LGgubGVuZ3RoLGIpKTooZz0idiIsdj1NYXRoLm1pbih1LF8sZi5sZW5ndGgpKX19ZWxzZSB5PjA/KGc9InYiLHY9eD4wP01hdGgubWluKF8sYik6TWF0aC5taW4oYikpOng+MD8oZz0iaCIsdj1NYXRoLm1pbihfKSk6dj0wO2lmKHYpe2UuX2xlbmd0aD12O3ZhciBTPXIoIm9yaWVudGF0aW9uIixnKTtlLl9oYXNQcmVDb21wU3RhdHM/InYiPT09UyYmMD09PXg/KHIoIngwIiwwKSxyKCJkeCIsMSkpOiJoIj09PVMmJjA9PT15JiYocigieTAiLDApLHIoImR5IiwxKSk6InYiPT09UyYmMD09PXg/cigieDAiKToiaCI9PT1TJiYwPT09eSYmcigieTAiKSxpLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5Il0sYSl9ZWxzZSBlLnZpc2libGU9ITF9ZnVuY3Rpb24gZih0LGUscixpKXt2YXIgYT1pLnByZWZpeCxvPW4uY29lcmNlMih0LGUsYywibWFya2VyLm91dGxpZXJjb2xvciIpLHM9cigibWFya2VyLmxpbmUub3V0bGllcmNvbG9yIiksbD0ib3V0bGllcnMiO2UuX2hhc1ByZUNvbXBTdGF0cz9sPSJhbGwiOihvfHxzKSYmKGw9InN1c3BlY3RlZG91dGxpZXJzIik7dmFyIHU9cihhKyJwb2ludHMiLGwpO3U/KHIoImppdHRlciIsImFsbCI9PT11Py4zOjApLHIoInBvaW50cG9zIiwiYWxsIj09PXU/LTEuNTowKSxyKCJtYXJrZXIuc3ltYm9sIikscigibWFya2VyLm9wYWNpdHkiKSxyKCJtYXJrZXIuc2l6ZSIpLHIoIm1hcmtlci5jb2xvciIsZS5saW5lLmNvbG9yKSxyKCJtYXJrZXIubGluZS5jb2xvciIpLHIoIm1hcmtlci5saW5lLndpZHRoIiksInN1c3BlY3RlZG91dGxpZXJzIj09PXUmJihyKCJtYXJrZXIubGluZS5vdXRsaWVyY29sb3IiLGUubWFya2VyLmNvbG9yKSxyKCJtYXJrZXIubGluZS5vdXRsaWVyd2lkdGgiKSkscigic2VsZWN0ZWQubWFya2VyLmNvbG9yIikscigidW5zZWxlY3RlZC5tYXJrZXIuY29sb3IiKSxyKCJzZWxlY3RlZC5tYXJrZXIuc2l6ZSIpLHIoInVuc2VsZWN0ZWQubWFya2VyLnNpemUiKSxyKCJ0ZXh0IikscigiaG92ZXJ0ZXh0IikpOmRlbGV0ZSBlLm1hcmtlcjt2YXIgZj1yKCJob3Zlcm9uIik7ImFsbCIhPT1mJiYtMT09PWYuaW5kZXhPZigicG9pbnRzIil8fHIoImhvdmVydGVtcGxhdGUiKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxyKX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIHMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMscixpKX1pZih1KHQsZSxzLGkpLCExIT09ZS52aXNpYmxlKXtvKHQsZSxpLHMpLHMoInhob3ZlcmZvcm1hdCIpLHMoInlob3ZlcmZvcm1hdCIpO3ZhciBsPWUuX2hhc1ByZUNvbXBTdGF0cztsJiYocygibG93ZXJmZW5jZSIpLHMoInVwcGVyZmVuY2UiKSkscygibGluZS5jb2xvciIsKHQubWFya2VyfHx7fSkuY29sb3J8fHIpLHMoImxpbmUud2lkdGgiKSxzKCJmaWxsY29sb3IiLGEuYWRkT3BhY2l0eShlLmxpbmUuY29sb3IsLjUpKTt2YXIgaD0hMTtpZihsKXt2YXIgcD1zKCJtZWFuIiksZD1zKCJzZCIpO3AmJnAubGVuZ3RoJiYoaD0hMCxkJiZkLmxlbmd0aCYmKGg9InNkIikpfXMoImJveG1lYW4iLGgpLHMoIndoaXNrZXJ3aWR0aCIpLHMoIndpZHRoIikscygicXVhcnRpbGVtZXRob2QiKTt2YXIgbT0hMTtpZihsKXt2YXIgZz1zKCJub3RjaHNwYW4iKTtnJiZnLmxlbmd0aCYmKG09ITApfWVsc2Ugbi52YWxpZGF0ZSh0Lm5vdGNod2lkdGgsYy5ub3RjaHdpZHRoKSYmKG09ITApO3MoIm5vdGNoZWQiLG0pJiZzKCJub3RjaHdpZHRoIiksZih0LGUscyx7cHJlZml4OiJib3gifSl9fSxjcm9zc1RyYWNlRGVmYXVsdHM6ZnVuY3Rpb24odCxlKXt2YXIgcixpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIG4uY29lcmNlKGkuX2lucHV0LGksYyx0KX1mb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIGw9KGk9dFtvXSkudHlwZTsiYm94IiE9PWwmJiJ2aW9saW4iIT09bHx8KHI9aS5faW5wdXQsImdyb3VwIj09PWVbbCsibW9kZSJdJiZzKHIsaSxlLGEpKX19LGhhbmRsZVNhbXBsZURlZmF1bHRzOnUsaGFuZGxlUG9pbnRzRGVmYXVsdHM6Zn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiOjgyOCwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vYmFyL2RlZmF1bHRzIjo5MTgsIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIjoxMjExLCIuL2F0dHJpYnV0ZXMiOjkzOX1dLDk0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5ob3Zlck9uQm94JiYodC5ob3Zlck9uQm94PWUuaG92ZXJPbkJveCksInhWYWwiaW4gZSYmKHQueD1lLnhWYWwpLCJ5VmFsImluIGUmJih0Lnk9ZS55VmFsKSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSx0fX0se31dLDk0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz1pLmZpbGxUZXh0O2Z1bmN0aW9uIGwodCxlLHIscyl7dmFyIGwsYyx1LGYsaCxwLGQsbSxnLHYseSx4LGIsXyx3PXQuY2QsVD10LnhhLGs9dC55YSxBPXdbMF0udHJhY2UsTT13WzBdLnQsUz0idmlvbGluIj09PUEudHlwZSxFPVtdLEw9TS5iZFBvcyxDPU0ud0hvdmVyLFA9ZnVuY3Rpb24odCl7cmV0dXJuIHUuYzJsKHQucG9zKStNLmJQb3MtdS5jMmwocCl9O1MmJiJib3RoIiE9PUEuc2lkZT8oInBvc2l0aXZlIj09PUEuc2lkZSYmKGc9ZnVuY3Rpb24odCl7dmFyIGU9UCh0KTtyZXR1cm4gYS5pbmJveChlLGUrQyx2KX0seD1MLGI9MCksIm5lZ2F0aXZlIj09PUEuc2lkZSYmKGc9ZnVuY3Rpb24odCl7dmFyIGU9UCh0KTtyZXR1cm4gYS5pbmJveChlLUMsZSx2KX0seD0wLGI9TCkpOihnPWZ1bmN0aW9uKHQpe3ZhciBlPVAodCk7cmV0dXJuIGEuaW5ib3goZS1DLGUrQyx2KX0seD1iPUwpLF89Uz9mdW5jdGlvbih0KXtyZXR1cm4gYS5pbmJveCh0LnNwYW5bMF0taCx0LnNwYW5bMV0taCx2KX06ZnVuY3Rpb24odCl7cmV0dXJuIGEuaW5ib3godC5taW4taCx0Lm1heC1oLHYpfSwiaCI9PT1BLm9yaWVudGF0aW9uPyhoPWUscD1yLGQ9XyxtPWcsbD0ieSIsdT1rLGM9IngiLGY9VCk6KGg9cixwPWUsZD1nLG09XyxsPSJ4Iix1PVQsYz0ieSIsZj1rKTt2YXIgST1NYXRoLm1pbigxLEwvTWF0aC5hYnModS5yMmModS5yYW5nZVsxXSktdS5yMmModS5yYW5nZVswXSkpKTtmdW5jdGlvbiBPKHQpe3JldHVybihkKHQpK20odCkpLzJ9dj10Lm1heEhvdmVyRGlzdGFuY2UtSSx5PXQubWF4U3Bpa2VEaXN0YW5jZS1JO3ZhciB6PWEuZ2V0RGlzdGFuY2VGdW5jdGlvbihzLGQsbSxPKTtpZihhLmdldENsb3Nlc3Qodyx6LHQpLCExPT09dC5pbmRleClyZXR1cm5bXTt2YXIgRD13W3QuaW5kZXhdLFI9QS5saW5lLmNvbG9yLEY9KEEubWFya2VyfHx7fSkuY29sb3I7by5vcGFjaXR5KFIpJiZBLmxpbmUud2lkdGg/dC5jb2xvcj1SOm8ub3BhY2l0eShGKSYmQS5ib3hwb2ludHM/dC5jb2xvcj1GOnQuY29sb3I9QS5maWxsY29sb3IsdFtsKyIwIl09dS5jMnAoRC5wb3MrTS5iUG9zLWIsITApLHRbbCsiMSJdPXUuYzJwKEQucG9zK00uYlBvcyt4LCEwKSx0W2wrIkxhYmVsVmFsIl09dm9pZCAwIT09RC5vcmlnX3A/RC5vcmlnX3A6RC5wb3M7dmFyIEI9bCsiU3Bpa2UiO3Quc3Bpa2VEaXN0YW5jZT1PKEQpKnkvdix0W0JdPXUuYzJwKEQucG9zLCEwKTt2YXIgTj17fSxqPVsibWVkIiwicTEiLCJxMyIsIm1pbiIsIm1heCJdOyhBLmJveG1lYW58fChBLm1lYW5saW5lfHx7fSkudmlzaWJsZSkmJmoucHVzaCgibWVhbiIpLChBLmJveHBvaW50c3x8QS5wb2ludHMpJiZqLnB1c2goImxmIiwidWYiKTtmb3IodmFyIFU9MDtVPGoubGVuZ3RoO1UrKyl7dmFyIFY9altVXTtpZihWIGluIEQmJiEoRFtWXWluIE4pKXtOW0RbVl1dPSEwO3ZhciBIPURbVl0scT1mLmMycChILCEwKSxHPWkuZXh0ZW5kRmxhdCh7fSx0KTtHLmF0dHI9VixHW2MrIjAiXT1HW2MrIjEiXT1xLEdbYysiTGFiZWxWYWwiXT1ILEdbYysiTGFiZWwiXT0oTS5sYWJlbHM/TS5sYWJlbHNbVl0rIiAiOiIiKStuLmhvdmVyTGFiZWxUZXh0KGYsSCxBW2MrImhvdmVyZm9ybWF0Il0pLEcuaG92ZXJPbkJveD0hMCwibWVhbiI9PT1WJiYic2QiaW4gRCYmInNkIj09PUEuYm94bWVhbiYmKEdbYysiZXJyIl09RC5zZCksdC5uYW1lPSIiLHQuc3Bpa2VEaXN0YW5jZT12b2lkIDAsdFtCXT12b2lkIDAsRy5ob3ZlcnRlbXBsYXRlPSExLEUucHVzaChHKX19cmV0dXJuIEV9ZnVuY3Rpb24gYyh0LGUscil7Zm9yKHZhciBuLG8sbCxjPXQuY2QsdT10LnhhLGY9dC55YSxoPWNbMF0udHJhY2UscD11LmMycChlKSxkPWYuYzJwKHIpLG09YS5xdWFkcmF0dXJlKChmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnModS5jMnAodC54KS1wKS1lLDEtMy9lKX0pLChmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMoZi5jMnAodC55KS1kKS1lLDEtMy9lKX0pKSxnPSExLHY9MDt2PGMubGVuZ3RoO3YrKyl7bz1jW3ZdO2Zvcih2YXIgeT0wO3k8KG8ucHRzfHxbXSkubGVuZ3RoO3krKyl7dmFyIHg9bShsPW8ucHRzW3ldKTt4PD10LmRpc3RhbmNlJiYodC5kaXN0YW5jZT14LGc9W3YseV0pfX1pZighZylyZXR1cm4hMTtsPShvPWNbZ1swXV0pLnB0c1tnWzFdXTt2YXIgYj11LmMycChsLngsITApLF89Zi5jMnAobC55LCEwKSx3PWwubXJjfHwxO249aS5leHRlbmRGbGF0KHt9LHQse2luZGV4OmwuaSxjb2xvcjooaC5tYXJrZXJ8fHt9KS5jb2xvcixuYW1lOmgubmFtZSx4MDpiLXcseDE6Yit3LHkwOl8tdyx5MTpfK3csc3Bpa2VEaXN0YW5jZTp0LmRpc3RhbmNlLGhvdmVydGVtcGxhdGU6aC5ob3ZlcnRlbXBsYXRlfSk7dmFyIFQsaz1vLm9yaWdfcCxBPXZvaWQgMCE9PWs/azpvLnBvcztyZXR1cm4iaCI9PT1oLm9yaWVudGF0aW9uPyhUPWYsbi54TGFiZWxWYWw9bC54LG4ueUxhYmVsVmFsPUEpOihUPXUsbi54TGFiZWxWYWw9QSxuLnlMYWJlbFZhbD1sLnkpLG5bVC5faWQuY2hhckF0KDApKyJTcGlrZSJdPVQuYzJwKG8ucG9zLCEwKSxzKGwsaCxuKSxufWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT10LmNkWzBdLnRyYWNlLmhvdmVyb24sbz1bXTtyZXR1cm4tMSE9PWEuaW5kZXhPZigiYm94ZXMiKSYmKG89by5jb25jYXQobCh0LGUscixuKSkpLC0xIT09YS5pbmRleE9mKCJwb2ludHMiKSYmKGk9Yyh0LGUscikpLCJjbG9zZXN0Ij09PW4/aT9baV06bzppPyhvLnB1c2goaSksbyk6b30saG92ZXJPbkJveGVzOmwsaG92ZXJPblBvaW50czpjfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvZngiOjY3OSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4Mjd9XSw5NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLmNyb3NzVHJhY2VEZWZhdWx0cyxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLnN1cHBseUxheW91dERlZmF1bHRzLGNhbGM6dCgiLi9jYWxjIiksY3Jvc3NUcmFjZUNhbGM6dCgiLi9jcm9zc190cmFjZV9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuL3Bsb3QiKS5wbG90LHN0eWxlOnQoIi4vc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4vc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImJveCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsInN5bWJvbHMiLCJvcmllbnRlZCIsImJveC12aW9saW4iLCJzaG93TGVnZW5kIiwiYm94TGF5b3V0Iiwiem9vbVNjYWxlIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4NDEsIi4vYXR0cmlidXRlcyI6OTM5LCIuL2NhbGMiOjk0MCwiLi9jcm9zc190cmFjZV9jYWxjIjo5NDEsIi4vZGVmYXVsdHMiOjk0MiwiLi9ldmVudF9kYXRhIjo5NDMsIi4vaG92ZXIiOjk0NCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6OTQ2LCIuL2xheW91dF9kZWZhdWx0cyI6OTQ3LCIuL3Bsb3QiOjk0OCwiLi9zZWxlY3QiOjk0OSwiLi9zdHlsZSI6OTUwfV0sOTQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Ym94bW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZ3JvdXAiLCJvdmVybGF5Il0sZGZsdDoib3ZlcmxheSIsZWRpdFR5cGU6ImNhbGMifSxib3hnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMyxlZGl0VHlwZToiY2FsYyJ9LGJveGdyb3VwZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjMsZWRpdFR5cGU6ImNhbGMifX19LHt9XSw5NDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2Z1bmN0aW9uIG8odCxlLHIsaSxhKXtmb3IodmFyIG89YSsiTGF5b3V0IixzPSExLGw9MDtsPHIubGVuZ3RoO2wrKyl7dmFyIGM9cltsXTtpZihuLnRyYWNlSXMoYyxvKSl7cz0hMDticmVha319cyYmKGkoYSsibW9kZSIpLGkoYSsiZ2FwIiksaShhKyJncm91cGdhcCIpKX1lLmV4cG9ydHM9e3N1cHBseUxheW91dERlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyKXtvKDAsMCxyLChmdW5jdGlvbihyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsYSxyLG4pfSksImJveCIpfSxfc3VwcGx5Om99fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo5NDZ9XSw5NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKTtmdW5jdGlvbiBvKHQsZSxyLGEpe3ZhciBvLHMsbD0iaCI9PT1yLm9yaWVudGF0aW9uLGM9ZS52YWwsdT1lLnBvcyxmPSEhdS5yYW5nZWJyZWFrcyxoPWEuYlBvcyxwPWEud2RQb3N8fDAsZD1hLmJQb3NQeE9mZnNldHx8MCxtPXIud2hpc2tlcndpZHRofHwwLGc9ci5ub3RjaGVkfHwhMSx2PWc/MS0yKnIubm90Y2h3aWR0aDoxO0FycmF5LmlzQXJyYXkoYS5iZFBvcyk/KG89YS5iZFBvc1swXSxzPWEuYmRQb3NbMV0pOihvPWEuYmRQb3Mscz1hLmJkUG9zKTt2YXIgeT10LnNlbGVjdEFsbCgicGF0aC5ib3giKS5kYXRhKCJ2aW9saW4iIT09ci50eXBlfHxyLmJveC52aXNpYmxlP2kuaWRlbnRpdHk6W10pO3kuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmF0dHIoImNsYXNzIiwiYm94IikseS5leGl0KCkucmVtb3ZlKCkseS5lYWNoKChmdW5jdGlvbih0KXtpZih0LmVtcHR5KXJldHVybiJNMCwwWiI7dmFyIGU9dS5jMmwodC5wb3MraCwhMCksYT11LmwycChlLW8pK2QseT11LmwycChlK3MpK2QseD1mPyhhK3kpLzI6dS5sMnAoZSkrZCxiPXIud2hpc2tlcndpZHRoLF89Zj9hKmIrKDEtYikqeDp1LmwycChlLXApK2Qsdz1mP3kqYisoMS1iKSp4OnUubDJwKGUrcCkrZCxUPXUubDJwKGUtbyp2KStkLGs9dS5sMnAoZStzKnYpK2QsQT1jLmMycCh0LnExLCEwKSxNPWMuYzJwKHQucTMsITApLFM9aS5jb25zdHJhaW4oYy5jMnAodC5tZWQsITApLE1hdGgubWluKEEsTSkrMSxNYXRoLm1heChBLE0pLTEpLEU9dm9pZCAwPT09dC5sZnx8ITE9PT1yLmJveHBvaW50cyxMPWMuYzJwKEU/dC5taW46dC5sZiwhMCksQz1jLmMycChFP3QubWF4OnQudWYsITApLFA9Yy5jMnAodC5sbiwhMCksST1jLmMycCh0LnVuLCEwKTtsP24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitTKyIsIitUKyJWIitrKyJNIitBKyIsIithKyJWIit5KyhnPyJIIitQKyJMIitTKyIsIitrKyJMIitJKyIsIit5OiIiKSsiSCIrTSsiViIrYSsoZz8iSCIrSSsiTCIrUysiLCIrVCsiTCIrUCsiLCIrYToiIikrIlpNIitBKyIsIit4KyJIIitMKyJNIitNKyIsIit4KyJIIitDKygwPT09bT8iIjoiTSIrTCsiLCIrXysiViIrdysiTSIrQysiLCIrXysiViIrdykpOm4uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitUKyIsIitTKyJIIitrKyJNIithKyIsIitBKyJIIit5KyhnPyJWIitQKyJMIitrKyIsIitTKyJMIit5KyIsIitJOiIiKSsiViIrTSsiSCIrYSsoZz8iViIrSSsiTCIrVCsiLCIrUysiTCIrYSsiLCIrUDoiIikrIlpNIit4KyIsIitBKyJWIitMKyJNIit4KyIsIitNKyJWIitDKygwPT09bT8iIjoiTSIrXysiLCIrTCsiSCIrdysiTSIrXysiLCIrQysiSCIrdykpfSkpfWZ1bmN0aW9uIHModCxlLHIsbil7dmFyIG89ZS54LHM9ZS55LGw9bi5iZFBvcyxjPW4uYlBvcyx1PXIuYm94cG9pbnRzfHxyLnBvaW50cztpLnNlZWRQc2V1ZG9SYW5kb20oKTt2YXIgZj10LnNlbGVjdEFsbCgiZy5wb2ludHMiKS5kYXRhKHU/ZnVuY3Rpb24odCl7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC50PW4sdC50cmFjZT1yfSkpLHR9OltdKTtmLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJwb2ludHMiKSxmLmV4aXQoKS5yZW1vdmUoKTt2YXIgaD1mLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoKGZ1bmN0aW9uKHQpe3ZhciBlLG4sYT10LnB0czIsbz1NYXRoLm1heCgodC5tYXgtdC5taW4pLzEwLHQucTMtdC5xMSkscz0xZS05Km8sZj0uMDEqbyxoPVtdLHA9MDtpZihyLmppdHRlcil7aWYoMD09PW8pZm9yKHA9MSxoPW5ldyBBcnJheShhLmxlbmd0aCksZT0wO2U8YS5sZW5ndGg7ZSsrKWhbZV09MTtlbHNlIGZvcihlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBkPU1hdGgubWF4KDAsZS01KSxtPWFbZF0udixnPU1hdGgubWluKGEubGVuZ3RoLTEsZSs1KSx2PWFbZ10udjsiYWxsIiE9PXUmJihhW2VdLnY8dC5sZj92PU1hdGgubWluKHYsdC5sZik6bT1NYXRoLm1heChtLHQudWYpKTt2YXIgeT1NYXRoLnNxcnQoZiooZy1kKS8odi1tK3MpKXx8MDt5PWkuY29uc3RyYWluKE1hdGguYWJzKHkpLDAsMSksaC5wdXNoKHkpLHA9TWF0aC5tYXgoeSxwKX1uPTIqci5qaXR0ZXIvKHB8fDEpfWZvcihlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciB4PWFbZV0sYj14LnYsXz1yLmppdHRlcj9uKmhbZV0qKGkucHNldWRvUmFuZG9tKCktLjUpOjAsdz10LnBvcytjK2wqKHIucG9pbnRwb3MrXyk7ImgiPT09ci5vcmllbnRhdGlvbj8oeC55PXcseC54PWIpOih4Lng9dyx4Lnk9YiksInN1c3BlY3RlZG91dGxpZXJzIj09PXUmJmI8dC51byYmYj50LmxvJiYoeC5zbz0hMCl9cmV0dXJuIGF9KSk7aC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInBvaW50IiwhMCksaC5leGl0KCkucmVtb3ZlKCksaC5jYWxsKGEudHJhbnNsYXRlUG9pbnRzLG8scyl9ZnVuY3Rpb24gbCh0LGUscixhKXt2YXIgbyxzLGw9ZS52YWwsYz1lLnBvcyx1PSEhYy5yYW5nZWJyZWFrcyxmPWEuYlBvcyxoPWEuYlBvc1B4T2Zmc2V0fHwwLHA9ci5ib3htZWFufHwoci5tZWFubGluZXx8e30pLnZpc2libGU7QXJyYXkuaXNBcnJheShhLmJkUG9zKT8obz1hLmJkUG9zWzBdLHM9YS5iZFBvc1sxXSk6KG89YS5iZFBvcyxzPWEuYmRQb3MpO3ZhciBkPXQuc2VsZWN0QWxsKCJwYXRoLm1lYW4iKS5kYXRhKCJib3giPT09ci50eXBlJiZyLmJveG1lYW58fCJ2aW9saW4iPT09ci50eXBlJiZyLmJveC52aXNpYmxlJiZyLm1lYW5saW5lLnZpc2libGU/aS5pZGVudGl0eTpbXSk7ZC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibWVhbiIpLnN0eWxlKHtmaWxsOiJub25lIiwidmVjdG9yLWVmZmVjdCI6Im5vbi1zY2FsaW5nLXN0cm9rZSJ9KSxkLmV4aXQoKS5yZW1vdmUoKSxkLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPWMuYzJsKHQucG9zK2YsITApLGk9Yy5sMnAoZS1vKStoLGE9Yy5sMnAoZStzKStoLGQ9dT8oaSthKS8yOmMubDJwKGUpK2gsbT1sLmMycCh0Lm1lYW4sITApLGc9bC5jMnAodC5tZWFuLXQuc2QsITApLHY9bC5jMnAodC5tZWFuK3Quc2QsITApOyJoIj09PXIub3JpZW50YXRpb24/bi5zZWxlY3QodGhpcykuYXR0cigiZCIsIk0iK20rIiwiK2krIlYiK2ErKCJzZCI9PT1wPyJtMCwwTCIrZysiLCIrZCsiTCIrbSsiLCIraSsiTCIrdisiLCIrZCsiWiI6IiIpKTpuLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIraSsiLCIrbSsiSCIrYSsoInNkIj09PXA/Im0wLDBMIitkKyIsIitnKyJMIitpKyIsIittKyJMIitkKyIsIit2KyJaIjoiIikpfSkpfWUuZXhwb3J0cz17cGxvdDpmdW5jdGlvbih0LGUscixhKXt2YXIgYz1lLnhheGlzLHU9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhhLHIsInRyYWNlIGJveGVzIikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGUscixpPW4uc2VsZWN0KHRoaXMpLGE9dFswXSxmPWEudCxoPWEudHJhY2U7KGYud2RQb3M9Zi5iZFBvcypoLndoaXNrZXJ3aWR0aCwhMCE9PWgudmlzaWJsZXx8Zi5lbXB0eSk/aS5yZW1vdmUoKTooImgiPT09aC5vcmllbnRhdGlvbj8oZT11LHI9Yyk6KGU9YyxyPXUpLG8oaSx7cG9zOmUsdmFsOnJ9LGgsZikscyhpLHt4OmMseTp1fSxoLGYpLGwoaSx7cG9zOmUsdmFsOnJ9LGgsZikpfSkpfSxwbG90Qm94QW5kV2hpc2tlcnM6byxwbG90UG9pbnRzOnMscGxvdEJveE1lYW46bH19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIi4uLy4uL2xpYiI6Nzc2LCJAcGxvdGx5L2QzIjo1OH1dLDk0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5jZCxhPXQueGF4aXMsbz10LnlheGlzLHM9W107aWYoITE9PT1lKWZvcihyPTA7cjxpLmxlbmd0aDtyKyspZm9yKG49MDtuPChpW3JdLnB0c3x8W10pLmxlbmd0aDtuKyspaVtyXS5wdHNbbl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxpLmxlbmd0aDtyKyspZm9yKG49MDtuPChpW3JdLnB0c3x8W10pLmxlbmd0aDtuKyspe3ZhciBsPWlbcl0ucHRzW25dLGM9YS5jMnAobC54KSx1PW8uYzJwKGwueSk7ZS5jb250YWlucyhbYyx1XSxudWxsLGwuaSx0KT8ocy5wdXNoKHtwb2ludE51bWJlcjpsLmkseDphLmMyZChsLngpLHk6by5jMmQobC55KX0pLGwuc2VsZWN0ZWQ9MSk6bC5zZWxlY3RlZD0wfXJldHVybiBzfX0se31dLDk1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKTtlLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbz1yfHxuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2UuYm94ZXMiKTtvLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKSxvLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLG89ZVswXS50cmFjZSxzPW8ubGluZS53aWR0aDtmdW5jdGlvbiBsKHQsZSxyLG4pe3Quc3R5bGUoInN0cm9rZS13aWR0aCIsZSsicHgiKS5jYWxsKGkuc3Ryb2tlLHIpLmNhbGwoaS5maWxsLG4pfXZhciBjPXIuc2VsZWN0QWxsKCJwYXRoLmJveCIpO2lmKCJjYW5kbGVzdGljayI9PT1vLnR5cGUpYy5lYWNoKChmdW5jdGlvbih0KXtpZighdC5lbXB0eSl7dmFyIGU9bi5zZWxlY3QodGhpcykscj1vW3QuZGlyXTtsKGUsci5saW5lLndpZHRoLHIubGluZS5jb2xvcixyLmZpbGxjb2xvciksZS5zdHlsZSgib3BhY2l0eSIsby5zZWxlY3RlZHBvaW50cyYmIXQuc2VsZWN0ZWQ/LjM6MSl9fSkpO2Vsc2V7bChjLHMsby5saW5lLmNvbG9yLG8uZmlsbGNvbG9yKSxyLnNlbGVjdEFsbCgicGF0aC5tZWFuIikuc3R5bGUoeyJzdHJva2Utd2lkdGgiOnMsInN0cm9rZS1kYXNoYXJyYXkiOjIqcysicHgsIitzKyJweCJ9KS5jYWxsKGkuc3Ryb2tlLG8ubGluZS5jb2xvcik7dmFyIHU9ci5zZWxlY3RBbGwoInBhdGgucG9pbnQiKTthLnBvaW50U3R5bGUodSxvLHQpfX0pKX0sc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUscil7dmFyIG49ZVswXS50cmFjZSxpPXIuc2VsZWN0QWxsKCJwYXRoLnBvaW50Iik7bi5zZWxlY3RlZHBvaW50cz9hLnNlbGVjdGVkUG9pbnRTdHlsZShpLG4pOmEucG9pbnRTdHlsZShpLG4sdCl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCJAcGxvdGx5L2QzIjo1OH1dLDk1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5leHRlbmRGbGF0LGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsYT10KCIuLi9vaGxjL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL2JveC9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gcyh0KXtyZXR1cm57bGluZTp7Y29sb3I6bih7fSxvLmxpbmUuY29sb3Ise2RmbHQ6dH0pLHdpZHRoOm8ubGluZS53aWR0aCxlZGl0VHlwZToic3R5bGUifSxmaWxsY29sb3I6by5maWxsY29sb3IsZWRpdFR5cGU6InN0eWxlIn19ZS5leHBvcnRzPXt4cGVyaW9kOmEueHBlcmlvZCx4cGVyaW9kMDphLnhwZXJpb2QwLHhwZXJpb2RhbGlnbm1lbnQ6YS54cGVyaW9kYWxpZ25tZW50LHhob3ZlcmZvcm1hdDppKCJ4IikseWhvdmVyZm9ybWF0OmkoInkiKSx4OmEueCxvcGVuOmEub3BlbixoaWdoOmEuaGlnaCxsb3c6YS5sb3csY2xvc2U6YS5jbG9zZSxsaW5lOnt3aWR0aDpuKHt9LG8ubGluZS53aWR0aCx7fSksZWRpdFR5cGU6InN0eWxlIn0saW5jcmVhc2luZzpzKGEuaW5jcmVhc2luZy5saW5lLmNvbG9yLmRmbHQpLGRlY3JlYXNpbmc6cyhhLmRlY3JlYXNpbmcubGluZS5jb2xvci5kZmx0KSx0ZXh0OmEudGV4dCxob3ZlcnRleHQ6YS5ob3ZlcnRleHQsd2hpc2tlcndpZHRoOm4oe30sby53aGlza2Vyd2lkdGgse2RmbHQ6MH0pLGhvdmVybGFiZWw6YS5ob3ZlcmxhYmVsfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vYm94L2F0dHJpYnV0ZXMiOjkzOSwiLi4vb2hsYy9hdHRyaWJ1dGVzIjoxMTM3fV0sOTUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxvPXQoIi4uL29obGMvY2FsYyIpLmNhbGNDb21tb247ZnVuY3Rpb24gcyh0LGUscixuKXtyZXR1cm57bWluOnIscTE6TWF0aC5taW4odCxuKSxtZWQ6bixxMzpNYXRoLm1heCh0LG4pLG1heDplfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGw9aS5nZXRGcm9tSWQodCxlLnhheGlzKSxjPWkuZ2V0RnJvbUlkKHQsZS55YXhpcyksdT1sLm1ha2VDYWxjZGF0YShlLCJ4IiksZj1hKGUsbCwieCIsdSkudmFscyxoPW8odCxlLHUsZixjLHMpO3JldHVybiBoLmxlbmd0aD8obi5leHRlbmRGbGF0KGhbMF0udCx7bnVtOnIuX251bUJveGVzLGRQb3M6bi5kaXN0aW5jdFZhbHMoZikubWluRGlmZi8yLHBvc0xldHRlcjoieCIsdmFsTGV0dGVyOiJ5In0pLHIuX251bUJveGVzKyssaCk6W3t0OntlbXB0eTohMH19XX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjgyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vb2hsYy9jYWxjIjoxMTM4fV0sOTUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vb2hsYy9vaGxjX2RlZmF1bHRzIiksbz10KCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gbCh0LGUscixuKXt2YXIgYT1yKG4rIi5saW5lLmNvbG9yIik7cihuKyIubGluZS53aWR0aCIsZS5saW5lLndpZHRoKSxyKG4rIi5maWxsY29sb3IiLGkuYWRkT3BhY2l0eShhLC41KSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1hKHQsZSxjLGkpPyhvKHQsZSxpLGMse3g6ITB9KSxjKCJ4aG92ZXJmb3JtYXQiKSxjKCJ5aG92ZXJmb3JtYXQiKSxjKCJsaW5lLndpZHRoIiksbCh0LGUsYywiaW5jcmVhc2luZyIpLGwodCxlLGMsImRlY3JlYXNpbmciKSxjKCJ0ZXh0IiksYygiaG92ZXJ0ZXh0IiksYygid2hpc2tlcndpZHRoIiksaS5fcmVxdWVzdFJhbmdlc2xpZGVyW2UueGF4aXNdPSEwKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vbGliIjo3NzYsIi4uL29obGMvb2hsY19kZWZhdWx0cyI6MTE0MiwiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiOjEyMTEsIi4vYXR0cmlidXRlcyI6OTUxfV0sOTU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNhbmRsZXN0aWNrIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwic2hvd0xlZ2VuZCIsImNhbmRsZXN0aWNrIiwiYm94TGF5b3V0Il0sbWV0YTp7fSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi4vYm94L2xheW91dF9kZWZhdWx0cyIpLnN1cHBseUxheW91dERlZmF1bHRzLGNyb3NzVHJhY2VDYWxjOnQoIi4uL2JveC9jcm9zc190cmFjZV9jYWxjIikuY3Jvc3NUcmFjZUNhbGMsc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuLi9ib3gvcGxvdCIpLnBsb3QsbGF5ZXJOYW1lOiJib3hsYXllciIsc3R5bGU6dCgiLi4vYm94L3N0eWxlIikuc3R5bGUsaG92ZXJQb2ludHM6dCgiLi4vb2hsYy9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuLi9vaGxjL3NlbGVjdCIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGMiOjk0MSwiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzIjo5NDYsIi4uL2JveC9sYXlvdXRfZGVmYXVsdHMiOjk0NywiLi4vYm94L3Bsb3QiOjk0OCwiLi4vYm94L3N0eWxlIjo5NTAsIi4uL29obGMvaG92ZXIiOjExNDAsIi4uL29obGMvc2VsZWN0IjoxMTQ0LCIuL2F0dHJpYnV0ZXMiOjk1MSwiLi9jYWxjIjo5NTIsIi4vZGVmYXVsdHMiOjk1M31dLDk1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2F4aXNfZGVmYXVsdHMiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvKXthKCJhIil8fChhKCJkYSIpLGEoImEwIikpLGEoImIiKXx8KGEoImRiIiksYSgiYjAiKSksZnVuY3Rpb24odCxlLHIsYSl7WyJhYXhpcyIsImJheGlzIl0uZm9yRWFjaCgoZnVuY3Rpb24obyl7dmFyIHM9by5jaGFyQXQoMCksbD10W29dfHx7fSxjPWkubmV3Q29udGFpbmVyKGUsbyksdT17dGlja2ZvbnQ6IngiLGlkOnMrImF4aXMiLGxldHRlcjpzLGZvbnQ6ZS5mb250LG5hbWU6byxkYXRhOnRbc10sY2FsZW5kYXI6ZS5jYWxlbmRhcixkZmx0Q29sb3I6YSxiZ0NvbG9yOnIucGFwZXJfYmdjb2xvcixhdXRvdHlwZW51bWJlcnNEZmx0OnIuYXV0b3R5cGVudW1iZXJzLGZ1bGxMYXlvdXQ6cn07bihsLGMsdSksYy5fY2F0ZWdvcmllcz1jLl9jYXRlZ29yaWVzfHxbXSx0W29dfHwiLSI9PT1sLnR5cGV8fCh0W29dPXt0eXBlOmwudHlwZX0pfSkpfSh0LGUscixvKX19LHsiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuL2F4aXNfZGVmYXVsdHMiOjk2MH1dLDk1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gdChlLHIpe2lmKCFuKGUpfHxyPj0xMClyZXR1cm4gbnVsbDtmb3IodmFyIGk9MS8wLGE9LTEvMCxvPWUubGVuZ3RoLHM9MDtzPG87cysrKXt2YXIgbD1lW3NdO2lmKG4obCkpe3ZhciBjPXQobCxyKzEpO2MmJihpPU1hdGgubWluKGNbMF0saSksYT1NYXRoLm1heChjWzFdLGEpKX1lbHNlIGk9TWF0aC5taW4obCxpKSxhPU1hdGgubWF4KGwsYSl9cmV0dXJuW2ksYV19KHQsMCl9fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sOTU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi9heGlzX2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLG89bih7ZWRpdFR5cGU6ImNhbGMifSk7by5mYW1pbHkuZGZsdD0nIk9wZW4gU2FucyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxvLnNpemUuZGZsdD0xMixvLmNvbG9yLmRmbHQ9YS5kZWZhdWx0TGluZSxlLmV4cG9ydHM9e2NhcnBldDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHg6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxhOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGEwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGRhOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sYjA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZGI6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sY2hlYXRlcnNsb3BlOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGFheGlzOmksYmF4aXM6aSxmb250Om8sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuZGVmYXVsdExpbmUsZWRpdFR5cGU6InBsb3QifSx0cmFuc2Zvcm1zOnZvaWQgMH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MzgsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuL2F4aXNfYXR0cmlidXRlcyI6OTU5fV0sOTU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2LHk9bihyKT8iYSI6ImIiLHg9KCJhIj09PXk/dC5hYXhpczp0LmJheGlzKS5zbW9vdGhpbmcsYj0iYSI9PT15P3QuYTJpOnQuYjJqLF89ImEiPT09eT9yOmksdz0iYSI9PT15P2k6cixUPSJhIj09PXk/ZS5hLmxlbmd0aDplLmIubGVuZ3RoLGs9ImEiPT09eT9lLmIubGVuZ3RoOmUuYS5sZW5ndGgsQT1NYXRoLmZsb29yKCJhIj09PXk/dC5iMmoodyk6dC5hMmkodykpLE09ImEiPT09eT9mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sZSxBKX06ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLEEsZSl9O3gmJihzPU1hdGgubWF4KDAsTWF0aC5taW4oay0yLEEpKSxsPUEtcyxvPSJhIj09PXk/ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaShbXSxlLHMscixsKX06ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaihbXSxzLGUsbCxyKX0pO3ZhciBTPWIoX1swXSksRT1iKF9bMV0pLEw9UzxFPzE6LTEsQz0xZS04KihFLVMpLFA9TD4wP01hdGguZmxvb3I6TWF0aC5jZWlsLEk9TD4wP01hdGguY2VpbDpNYXRoLmZsb29yLE89TD4wP01hdGgubWluOk1hdGgubWF4LHo9TD4wP01hdGgubWF4Ok1hdGgubWluLEQ9UChTK0MpLFI9SShFLUMpLEY9W1tmPU0oUyldXTtmb3IoYT1EO2EqTDxSKkw7YSs9TCljPVtdLG09eihTLGEpLHY9KGc9TyhFLGErTCkpLW0sdT1NYXRoLm1heCgwLE1hdGgubWluKFQtMixNYXRoLmZsb29yKC41KihtK2cpKSkpLGg9TShnKSx4JiYocD1vKHUsbS11KSxkPW8odSxnLXUpLGMucHVzaChbZlswXStwWzBdLzMqdixmWzFdK3BbMV0vMyp2XSksYy5wdXNoKFtoWzBdLWRbMF0vMyp2LGhbMV0tZFsxXS8zKnZdKSksYy5wdXNoKGgpLEYucHVzaChjKSxmPWg7cmV0dXJuIEZ9fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sOTU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuZGVzY3JpcHRpb25XaXRoRGF0ZXMscz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGw7ZS5leHBvcnRzPXtjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sc21vb3RoaW5nOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxtaW46MCxtYXg6MS4zLGVkaXRUeXBlOiJjYWxjIn0sdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGZvbnQ6bih7ZWRpdFR5cGU6ImNhbGMifSksb2Zmc2V0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MTAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIi0iLCJsaW5lYXIiLCJkYXRlIiwiY2F0ZWdvcnkiXSxkZmx0OiItIixlZGl0VHlwZToiY2FsYyJ9LGF1dG90eXBlbnVtYmVyczphLmF1dG90eXBlbnVtYmVycyxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsITEsInJldmVyc2VkIl0sZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHJhbmdlbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9ybWFsIiwidG96ZXJvIiwibm9ubmVnYXRpdmUiXSxkZmx0OiJub3JtYWwiLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGVkaXRUeXBlOiJjYWxjIixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9XX0sZml4ZWRyYW5nZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGNoZWF0ZXJ0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbmRleCIsInZhbHVlIl0sZGZsdDoidmFsdWUiLGVkaXRUeXBlOiJjYWxjIn0sdGlja21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsImFycmF5Il0sZGZsdDoiYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbnRpY2tzOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx0aWNrdmFsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0aWNrdGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxzaG93dGlja2xhYmVsczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhcnQiLCJlbmQiLCJib3RoIiwibm9uZSJdLGRmbHQ6InN0YXJ0IixlZGl0VHlwZToiY2FsYyJ9LHRpY2tmb250Om4oe2VkaXRUeXBlOiJjYWxjIn0pLHRpY2thbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJjYWxjIn0sdGlja3ByZWZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd3RpY2twcmVmaXg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJjYWxjIn0sdGlja3N1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd3RpY2tzdWZmaXg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2V4cG9uZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToiY2FsYyJ9LGV4cG9uZW50Zm9ybWF0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub25lIiwiZSIsIkUiLCJwb3dlciIsIlNJIiwiQiJdLGRmbHQ6IkIiLGVkaXRUeXBlOiJjYWxjIn0sbWluZXhwb25lbnQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDozLG1pbjowLGVkaXRUeXBlOiJjYWxjIn0sc2VwYXJhdGV0aG91c2FuZHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSx0aWNrZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMiLGRlc2NyaXB0aW9uOm8oInRpY2sgbGFiZWwiKX0sdGlja2Zvcm1hdHN0b3BzOnMoYS50aWNrZm9ybWF0c3RvcHMsImNhbGMiLCJmcm9tLXJvb3QiKSxjYXRlZ29yeW9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0cmFjZSIsImNhdGVnb3J5IGFzY2VuZGluZyIsImNhdGVnb3J5IGRlc2NlbmRpbmciLCJhcnJheSJdLGRmbHQ6InRyYWNlIixlZGl0VHlwZToiY2FsYyJ9LGNhdGVnb3J5YXJyYXk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbGFiZWxwYWRkaW5nOnt2YWxUeXBlOiJpbnRlZ2VyIixkZmx0OjEwLGVkaXRUeXBlOiJjYWxjIn0sbGFiZWxwcmVmaXg6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxsYWJlbHN1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xpbmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxsaW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6ImNhbGMifSxsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sZ3JpZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSxncmlkd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2dyaWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxtaW5vcmdyaWRjb3VudDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sbWlub3Jncmlkd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sbWlub3JncmlkY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkubGlnaHRMaW5lLGVkaXRUeXBlOiJjYWxjIn0sc3RhcnRsaW5lOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiY2FsYyJ9LHN0YXJ0bGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSxzdGFydGxpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxlbmRsaW5lOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiY2FsYyJ9LGVuZGxpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxlbmRsaW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyJ9LHRpY2swOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGR0aWNrOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGFycmF5dGljazA6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGFycmF5ZHRpY2s6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjoxLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LF9kZXByZWNhdGVkOnt0aXRsZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHRpdGxlZm9udDpuKHtlZGl0VHlwZToiY2FsYyJ9KSx0aXRsZW9mZnNldDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEwLGVkaXRUeXBlOiJjYWxjIn19LGVkaXRUeXBlOiJjYWxjIn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MzgsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgwOSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDIsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2fV0sOTYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLmFkZE9wYWNpdHksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyIpLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NldF9jb252ZXJ0IiksZj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGg9ci5sZXR0ZXIscD1yLmZvbnR8fHt9LGQ9bltoKyJheGlzIl07ZnVuY3Rpb24gbShyLG4pe3JldHVybiBvLmNvZXJjZSh0LGUsZCxyLG4pfWZ1bmN0aW9uIGcocixuKXtyZXR1cm4gby5jb2VyY2UyKHQsZSxkLHIsbil9ci5uYW1lJiYoZS5fbmFtZT1yLm5hbWUsZS5faWQ9ci5uYW1lKSxtKCJhdXRvdHlwZW51bWJlcnMiLHIuYXV0b3R5cGVudW1iZXJzRGZsdCk7dmFyIHY9bSgidHlwZSIpOygiLSI9PT12JiYoci5kYXRhJiZmdW5jdGlvbih0LGUpe2lmKCItIiE9PXQudHlwZSlyZXR1cm47dmFyIHI9dC5faWQuY2hhckF0KDApLG49dFtyKyJjYWxlbmRhciJdO3QudHlwZT1mKGUsbix7YXV0b3R5cGVudW1iZXJzOnQuYXV0b3R5cGVudW1iZXJzfSl9KGUsci5kYXRhKSwiLSI9PT1lLnR5cGU/ZS50eXBlPSJsaW5lYXIiOnY9dC50eXBlPWUudHlwZSksbSgic21vb3RoaW5nIiksbSgiY2hlYXRlcnR5cGUiKSxtKCJzaG93dGlja2xhYmVscyIpLG0oImxhYmVscHJlZml4IixoKyIgPSAiKSxtKCJsYWJlbHN1ZmZpeCIpLG0oInNob3d0aWNrcHJlZml4IiksbSgic2hvd3RpY2tzdWZmaXgiKSxtKCJzZXBhcmF0ZXRob3VzYW5kcyIpLG0oInRpY2tmb3JtYXQiKSxtKCJleHBvbmVudGZvcm1hdCIpLG0oIm1pbmV4cG9uZW50IiksbSgic2hvd2V4cG9uZW50IiksbSgiY2F0ZWdvcnlvcmRlciIpLG0oInRpY2ttb2RlIiksbSgidGlja3ZhbHMiKSxtKCJ0aWNrdGV4dCIpLG0oInRpY2swIiksbSgiZHRpY2siKSwiYXJyYXkiPT09ZS50aWNrbW9kZSYmKG0oImFycmF5dGljazAiKSxtKCJhcnJheWR0aWNrIikpLG0oImxhYmVscGFkZGluZyIpLGUuX2hvdmVydGl0bGU9aCwiZGF0ZSI9PT12KSYmYS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIikodCxlLCJjYWxlbmRhciIsci5jYWxlbmRhcik7dShlLHIuZnVsbExheW91dCksZS5jMnA9by5pZGVudGl0eTt2YXIgeT1tKCJjb2xvciIsci5kZmx0Q29sb3IpLHg9eT09PXQuY29sb3I/eTpwLmNvbG9yO20oInRpdGxlLnRleHQiKSYmKG8uY29lcmNlRm9udChtLCJ0aXRsZS5mb250Iix7ZmFtaWx5OnAuZmFtaWx5LHNpemU6by5iaWdGb250KHAuc2l6ZSksY29sb3I6eH0pLG0oInRpdGxlLm9mZnNldCIpKSxtKCJ0aWNrYW5nbGUiKSxtKCJhdXRvcmFuZ2UiLCFlLmlzVmFsaWRSYW5nZSh0LnJhbmdlKSkmJm0oInJhbmdlbW9kZSIpLG0oInJhbmdlIiksZS5jbGVhblJhbmdlKCksbSgiZml4ZWRyYW5nZSIpLHModCxlLG0sdiksbCh0LGUsbSx2LHIpLGModCxlLG0se2RhdGE6ci5kYXRhLGRhdGFBdHRyOmh9KTt2YXIgYj1nKCJncmlkY29sb3IiLGkoeSwuMykpLF89ZygiZ3JpZHdpZHRoIiksdz1tKCJzaG93Z3JpZCIpO3d8fChkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZHdpZHRoKTt2YXIgVD1nKCJzdGFydGxpbmVjb2xvciIseSksaz1nKCJzdGFydGxpbmV3aWR0aCIsXyk7bSgic3RhcnRsaW5lIixlLnNob3dncmlkfHwhIVR8fCEhayl8fChkZWxldGUgZS5zdGFydGxpbmVjb2xvcixkZWxldGUgZS5zdGFydGxpbmV3aWR0aCk7dmFyIEE9ZygiZW5kbGluZWNvbG9yIix5KSxNPWcoImVuZGxpbmV3aWR0aCIsXyk7cmV0dXJuIG0oImVuZGxpbmUiLGUuc2hvd2dyaWR8fCEhQXx8ISFNKXx8KGRlbGV0ZSBlLmVuZGxpbmVjb2xvcixkZWxldGUgZS5lbmRsaW5ld2lkdGgpLHc/KG0oIm1pbm9yZ3JpZGNvdW50IiksbSgibWlub3Jncmlkd2lkdGgiLF8pLG0oIm1pbm9yZ3JpZGNvbG9yIixpKGIsLjA2KSksZS5taW5vcmdyaWRjb3VudHx8KGRlbGV0ZSBlLm1pbm9yZ3JpZHdpZHRoLGRlbGV0ZSBlLm1pbm9yZ3JpZGNvbG9yKSk6KGRlbGV0ZSBlLmdyaWRjb2xvcixkZWxldGUgZS5ncmlkV2lkdGgpLCJub25lIj09PWUuc2hvd3RpY2tsYWJlbHMmJihkZWxldGUgZS50aWNrZm9udCxkZWxldGUgZS50aWNrYW5nbGUsZGVsZXRlIGUuc2hvd2V4cG9uZW50LGRlbGV0ZSBlLmV4cG9uZW50Zm9ybWF0LGRlbGV0ZSBlLm1pbmV4cG9uZW50LGRlbGV0ZSBlLnRpY2tmb3JtYXQsZGVsZXRlIGUuc2hvd3RpY2tzdWZmaXgsZGVsZXRlIGUuc2hvd3RpY2twcmVmaXgpLGUuc2hvd3RpY2tzdWZmaXh8fGRlbGV0ZSBlLnRpY2tzdWZmaXgsZS5zaG93dGlja3ByZWZpeHx8ZGVsZXRlIGUudGlja3ByZWZpeCxtKCJ0aWNrbW9kZSIpLGV9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIjo4MjgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyI6ODMyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjg0OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjg0OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjg1MSwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi9hdHRyaWJ1dGVzIjo5NTd9XSw5NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXkxRCxhPXQoIi4vY2hlYXRlcl9iYXNpcyIpLG89dCgiLi9hcnJheV9taW5tYXgiKSxzPXQoIi4vY2FsY19ncmlkbGluZXMiKSxsPXQoIi4vY2FsY19sYWJlbHMiKSxjPXQoIi4vY2FsY19jbGlwcGF0aCIpLHU9dCgiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheSIpLGY9dCgiLi9zbW9vdGhfZmlsbF8yZF9hcnJheSIpLGg9dCgiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiKSxwPXQoIi4vc2V0X2NvbnZlcnQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmdldEZyb21JZCh0LGUueGF4aXMpLGQ9bi5nZXRGcm9tSWQodCxlLnlheGlzKSxtPWUuYWF4aXMsZz1lLmJheGlzLHY9ZS54LHk9ZS55LHg9W107diYmaSh2KSYmeC5wdXNoKCJ4IikseSYmaSh5KSYmeC5wdXNoKCJ5IikseC5sZW5ndGgmJmgoZSxtLGcsImEiLCJiIix4KTt2YXIgYj1lLl9hPWUuX2F8fGUuYSxfPWUuX2I9ZS5fYnx8ZS5iO3Y9ZS5feHx8ZS54LHk9ZS5feXx8ZS55O3ZhciB3PXt9O2lmKGUuX2NoZWF0ZXIpe3ZhciBUPSJpbmRleCI9PT1tLmNoZWF0ZXJ0eXBlP2IubGVuZ3RoOmIsaz0iaW5kZXgiPT09Zy5jaGVhdGVydHlwZT9fLmxlbmd0aDpfO3Y9YShULGssZS5jaGVhdGVyc2xvcGUpfWUuX3g9dj11KHYpLGUuX3k9eT11KHkpLGYodixiLF8pLGYoeSxiLF8pLHAoZSksZS5zZXRTY2FsZSgpO3ZhciBBPW8odiksTT1vKHkpLFM9LjUqKEFbMV0tQVswXSksRT0uNSooQVsxXStBWzBdKSxMPS41KihNWzFdLU1bMF0pLEM9LjUqKE1bMV0rTVswXSk7cmV0dXJuIEE9W0UtMS4zKlMsRSsxLjMqU10sTT1bQy0xLjMqTCxDKzEuMypMXSxlLl9leHRyZW1lc1tyLl9pZF09bi5maW5kRXh0cmVtZXMocixBLHtwYWRkZWQ6ITB9KSxlLl9leHRyZW1lc1tkLl9pZF09bi5maW5kRXh0cmVtZXMoZCxNLHtwYWRkZWQ6ITB9KSxzKGUsImEiLCJiIikscyhlLCJiIiwiYSIpLGwoZSxtKSxsKGUsZyksdy5jbGlwc2VnbWVudHM9YyhlLl94Y3RybCxlLl95Y3RybCxtLGcpLHcueD12LHcueT15LHcuYT1iLHcuYj1fLFt3XX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiOjEwNjAsIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6IjoxMDYyLCIuL2FycmF5X21pbm1heCI6OTU2LCIuL2NhbGNfY2xpcHBhdGgiOjk2MiwiLi9jYWxjX2dyaWRsaW5lcyI6OTYzLCIuL2NhbGNfbGFiZWxzIjo5NjQsIi4vY2hlYXRlcl9iYXNpcyI6OTY2LCIuL3NldF9jb252ZXJ0Ijo5NzksIi4vc21vb3RoX2ZpbGxfMmRfYXJyYXkiOjk4MH1dLDk2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHM9W10sbD0hIXIuc21vb3RoaW5nLGM9ISFuLnNtb290aGluZyx1PXRbMF0ubGVuZ3RoLTEsZj10Lmxlbmd0aC0xO2ZvcihpPTAsYT1bXSxvPVtdO2k8PXU7aSsrKWFbaV09dFswXVtpXSxvW2ldPWVbMF1baV07Zm9yKHMucHVzaCh7eDphLHk6byxiaWN1YmljOmx9KSxpPTAsYT1bXSxvPVtdO2k8PWY7aSsrKWFbaV09dFtpXVt1XSxvW2ldPWVbaV1bdV07Zm9yKHMucHVzaCh7eDphLHk6byxiaWN1YmljOmN9KSxpPXUsYT1bXSxvPVtdO2k+PTA7aS0tKWFbdS1pXT10W2ZdW2ldLG9bdS1pXT1lW2ZdW2ldO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpsfSksaT1mLGE9W10sbz1bXTtpPj0wO2ktLSlhW2YtaV09dFtpXVswXSxvW2YtaV09ZVtpXVswXTtyZXR1cm4gcy5wdXNoKHt4OmEseTpvLGJpY3ViaWM6Y30pLHN9fSx7fV0sOTYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2LHkseD10WyJfIitlXSxiPXRbZSsiYXhpcyJdLF89Yi5fZ3JpZGxpbmVzPVtdLHc9Yi5fbWlub3JncmlkbGluZXM9W10sVD1iLl9ib3VuZGFyeWxpbmVzPVtdLGs9dFsiXyIrcl0sQT10W3IrImF4aXMiXTsiYXJyYXkiPT09Yi50aWNrbW9kZSYmKGIudGlja3ZhbHM9eC5zbGljZSgpKTt2YXIgTT10Ll94Y3RybCxTPXQuX3ljdHJsLEU9TVswXS5sZW5ndGgsTD1NLmxlbmd0aCxDPXQuX2EubGVuZ3RoLFA9dC5fYi5sZW5ndGg7bi5wcmVwVGlja3MoYiksImFycmF5Ij09PWIudGlja21vZGUmJmRlbGV0ZSBiLnRpY2t2YWxzO3ZhciBJPWIuc21vb3RoaW5nPzM6MTtmdW5jdGlvbiBPKG4pe3ZhciBpLGEsbyxzLGwsYyx1LGYscCxkLG0sZyx2PVtdLHk9W10seD17fTtpZigiYiI9PT1lKWZvcihhPXQuYjJqKG4pLG89TWF0aC5mbG9vcihNYXRoLm1heCgwLE1hdGgubWluKFAtMixhKSkpLHM9YS1vLHgubGVuZ3RoPVAseC5jcm9zc0xlbmd0aD1DLHgueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsYSl9LHguZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxvLHIscyl9LGk9MDtpPEM7aSsrKWM9TWF0aC5taW4oQy0yLGkpLHU9aS1jLGY9dC5ldmFseHkoW10saSxhKSxBLnNtb290aGluZyYmaT4wJiYocD10LmR4eWRpKFtdLGktMSxvLDAscyksdi5wdXNoKGxbMF0rcFswXS8zKSx5LnB1c2gobFsxXStwWzFdLzMpLGQ9dC5keHlkaShbXSxpLTEsbywxLHMpLHYucHVzaChmWzBdLWRbMF0vMykseS5wdXNoKGZbMV0tZFsxXS8zKSksdi5wdXNoKGZbMF0pLHkucHVzaChmWzFdKSxsPWY7ZWxzZSBmb3IoaT10LmEyaShuKSxjPU1hdGguZmxvb3IoTWF0aC5tYXgoMCxNYXRoLm1pbihDLTIsaSkpKSx1PWktYyx4Lmxlbmd0aD1DLHguY3Jvc3NMZW5ndGg9UCx4Lnh5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxpLGUpfSx4LmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRqKFtdLGMsZSx1LHIpfSxhPTA7YTxQO2ErKylvPU1hdGgubWluKFAtMixhKSxzPWEtbyxmPXQuZXZhbHh5KFtdLGksYSksQS5zbW9vdGhpbmcmJmE+MCYmKG09dC5keHlkaihbXSxjLGEtMSx1LDApLHYucHVzaChsWzBdK21bMF0vMykseS5wdXNoKGxbMV0rbVsxXS8zKSxnPXQuZHh5ZGooW10sYyxhLTEsdSwxKSx2LnB1c2goZlswXS1nWzBdLzMpLHkucHVzaChmWzFdLWdbMV0vMykpLHYucHVzaChmWzBdKSx5LnB1c2goZlsxXSksbD1mO3JldHVybiB4LmF4aXNMZXR0ZXI9ZSx4LmF4aXM9Yix4LmNyb3NzQXhpcz1BLHgudmFsdWU9bix4LmNvbnN0dmFyPXIseC5pbmRleD1oLHgueD12LHgueT15LHguc21vb3RoaW5nPUEuc21vb3RoaW5nLHh9ZnVuY3Rpb24geihuKXt2YXIgaSxhLG8scyxsLGM9W10sdT1bXSxmPXt9O2lmKGYubGVuZ3RoPXgubGVuZ3RoLGYuY3Jvc3NMZW5ndGg9ay5sZW5ndGgsImIiPT09ZSlmb3Iobz1NYXRoLm1heCgwLE1hdGgubWluKFAtMixuKSksbD1NYXRoLm1pbigxLE1hdGgubWF4KDAsbi1vKSksZi54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sZSxuKX0sZi5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaShbXSxlLG8scixsKX0saT0wO2k8RTtpKyspY1tpXT1NW24qSV1baV0sdVtpXT1TW24qSV1baV07ZWxzZSBmb3IoYT1NYXRoLm1heCgwLE1hdGgubWluKEMtMixuKSkscz1NYXRoLm1pbigxLE1hdGgubWF4KDAsbi1hKSksZi54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sbixlKX0sZi5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaihbXSxhLGUscyxyKX0saT0wO2k8TDtpKyspY1tpXT1NW2ldW24qSV0sdVtpXT1TW2ldW24qSV07cmV0dXJuIGYuYXhpc0xldHRlcj1lLGYuYXhpcz1iLGYuY3Jvc3NBeGlzPUEsZi52YWx1ZT14W25dLGYuY29uc3R2YXI9cixmLmluZGV4PW4sZi54PWMsZi55PXUsZi5zbW9vdGhpbmc9QS5zbW9vdGhpbmcsZn1pZigiYXJyYXkiPT09Yi50aWNrbW9kZSl7Zm9yKGw9NWUtMTUsdT0oYz1bTWF0aC5mbG9vcigoeC5sZW5ndGgtMS1iLmFycmF5dGljazApL2IuYXJyYXlkdGljayooMStsKSksTWF0aC5jZWlsKC1iLmFycmF5dGljazAvYi5hcnJheWR0aWNrLygxK2wpKV0uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpKVswXS0xLGY9Y1sxXSsxLGg9dTtoPGY7aCsrKShvPWIuYXJyYXl0aWNrMCtiLmFycmF5ZHRpY2sqaCk8MHx8bz54Lmxlbmd0aC0xfHxfLnB1c2goaSh6KG8pLHtjb2xvcjpiLmdyaWRjb2xvcix3aWR0aDpiLmdyaWR3aWR0aH0pKTtmb3IoaD11O2g8ZjtoKyspaWYocz1iLmFycmF5dGljazArYi5hcnJheWR0aWNrKmgsbT1NYXRoLm1pbihzK2IuYXJyYXlkdGljayx4Lmxlbmd0aC0xKSwhKHM8MHx8cz54Lmxlbmd0aC0xfHxtPDB8fG0+eC5sZW5ndGgtMSkpZm9yKGc9eFtzXSx2PXhbbV0sYT0wO2E8Yi5taW5vcmdyaWRjb3VudDthKyspKHk9bS1zKTw9MHx8KGQ9Zysodi1nKSooYSsxKS8oYi5taW5vcmdyaWRjb3VudCsxKSooYi5hcnJheWR0aWNrL3kpKTx4WzBdfHxkPnhbeC5sZW5ndGgtMV18fHcucHVzaChpKE8oZCkse2NvbG9yOmIubWlub3JncmlkY29sb3Isd2lkdGg6Yi5taW5vcmdyaWR3aWR0aH0pKTtiLnN0YXJ0bGluZSYmVC5wdXNoKGkoeigwKSx7Y29sb3I6Yi5zdGFydGxpbmVjb2xvcix3aWR0aDpiLnN0YXJ0bGluZXdpZHRofSkpLGIuZW5kbGluZSYmVC5wdXNoKGkoeih4Lmxlbmd0aC0xKSx7Y29sb3I6Yi5lbmRsaW5lY29sb3Isd2lkdGg6Yi5lbmRsaW5ld2lkdGh9KSl9ZWxzZXtmb3IobD01ZS0xNSx1PShjPVtNYXRoLmZsb29yKCh4W3gubGVuZ3RoLTFdLWIudGljazApL2IuZHRpY2sqKDErbCkpLE1hdGguY2VpbCgoeFswXS1iLnRpY2swKS9iLmR0aWNrLygxK2wpKV0uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpKVswXSxmPWNbMV0saD11O2g8PWY7aCsrKXA9Yi50aWNrMCtiLmR0aWNrKmgsXy5wdXNoKGkoTyhwKSx7Y29sb3I6Yi5ncmlkY29sb3Isd2lkdGg6Yi5ncmlkd2lkdGh9KSk7Zm9yKGg9dS0xO2g8ZisxO2grKylmb3IocD1iLnRpY2swK2IuZHRpY2sqaCxhPTA7YTxiLm1pbm9yZ3JpZGNvdW50O2ErKykoZD1wK2IuZHRpY2sqKGErMSkvKGIubWlub3JncmlkY291bnQrMSkpPHhbMF18fGQ+eFt4Lmxlbmd0aC0xXXx8dy5wdXNoKGkoTyhkKSx7Y29sb3I6Yi5taW5vcmdyaWRjb2xvcix3aWR0aDpiLm1pbm9yZ3JpZHdpZHRofSkpO2Iuc3RhcnRsaW5lJiZULnB1c2goaShPKHhbMF0pLHtjb2xvcjpiLnN0YXJ0bGluZWNvbG9yLHdpZHRoOmIuc3RhcnRsaW5ld2lkdGh9KSksYi5lbmRsaW5lJiZULnB1c2goaShPKHhbeC5sZW5ndGgtMV0pLHtjb2xvcjpiLmVuZGxpbmVjb2xvcix3aWR0aDpiLmVuZGxpbmV3aWR0aH0pKX19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyN31dLDk2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM9ZS5fbGFiZWxzPVtdLGw9ZS5fZ3JpZGxpbmVzO2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspbz1sW3JdLC0xIT09WyJzdGFydCIsImJvdGgiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoYT1uLnRpY2tUZXh0KGUsby52YWx1ZSksaShhLHtwcmVmaXg6dm9pZCAwLHN1ZmZpeDp2b2lkIDAsZW5kQW5jaG9yOiEwLHh5Om8ueHkoMCksZHh5Om8uZHh5KDAsMCksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChhKSksLTEhPT1bImVuZCIsImJvdGgiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoYT1uLnRpY2tUZXh0KGUsby52YWx1ZSksaShhLHtlbmRBbmNob3I6ITEseHk6by54eShvLmNyb3NzTGVuZ3RoLTEpLGR4eTpvLmR4eShvLmNyb3NzTGVuZ3RoLTIsMSksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChhKSl9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyN31dLDk2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFswXS1lWzBdLGE9dFsxXS1lWzFdLG89clswXS1lWzBdLHM9clsxXS1lWzFdLGw9TWF0aC5wb3coaSppK2EqYSwuMjUpLGM9TWF0aC5wb3cobypvK3MqcywuMjUpLHU9KGMqYyppLWwqbCpvKSpuLGY9KGMqYyphLWwqbCpzKSpuLGg9YyoobCtjKSozLHA9bCoobCtjKSozO3JldHVybltbZVswXSsoaCYmdS9oKSxlWzFdKyhoJiZmL2gpXSxbZVswXS0ocCYmdS9wKSxlWzFdLShwJiZmL3ApXV19fSx7fV0sOTY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG8scyxsLGMsdT1bXSxmPW4odCk/dC5sZW5ndGg6dCxoPW4oZSk/ZS5sZW5ndGg6ZSxwPW4odCk/dDpudWxsLGQ9bihlKT9lOm51bGw7cCYmKG89KHAubGVuZ3RoLTEpLyhwW3AubGVuZ3RoLTFdLXBbMF0pLyhmLTEpKSxkJiYocz0oZC5sZW5ndGgtMSkvKGRbZC5sZW5ndGgtMV0tZFswXSkvKGgtMSkpO3ZhciBtPTEvMCxnPS0xLzA7Zm9yKGE9MDthPGg7YSsrKWZvcih1W2FdPVtdLGw9ZD8oZFthXS1kWzBdKSpzOmEvKGgtMSksaT0wO2k8ZjtpKyspYz0ocD8ocFtpXS1wWzBdKSpvOmkvKGYtMSkpLWwqcixtPU1hdGgubWluKGMsbSksZz1NYXRoLm1heChjLGcpLHVbYV1baV09Yzt2YXIgdj0xLyhnLW0pLHk9LW0qdjtmb3IoYT0wO2E8aDthKyspZm9yKGk9MDtpPGY7aSsrKXVbYV1baV09dip1W2FdW2ldK3k7cmV0dXJuIHV9fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sOTY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY2F0bXVsbF9yb20iKSxpPXQoIi4uLy4uL2xpYiIpLmVuc3VyZUFycmF5O2Z1bmN0aW9uIGEodCxlLHIpe3ZhciBuPS0uNSpyWzBdKzEuNSplWzBdLGk9LS41KnJbMV0rMS41KmVbMV07cmV0dXJuWygyKm4rdFswXSkvMywoMippK3RbMV0pLzNdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMsbCl7dmFyIGMsdSxmLGgscCxkLG0sZyx2LHkseD1yWzBdLmxlbmd0aCxiPXIubGVuZ3RoLF89cz8zKngtMjp4LHc9bD8zKmItMjpiO2Zvcih0PWkodCx3KSxlPWkoZSx3KSxmPTA7Zjx3O2YrKyl0W2ZdPWkodFtmXSxfKSxlW2ZdPWkoZVtmXSxfKTtmb3IodT0wLGg9MDt1PGI7dSsrLGgrPWw/MzoxKWZvcihwPXRbaF0sZD1lW2hdLG09clt1XSxnPW9bdV0sYz0wLGY9MDtjPHg7YysrLGYrPXM/MzoxKXBbZl09bVtjXSxkW2ZdPWdbY107aWYocylmb3IodT0wLGg9MDt1PGI7dSsrLGgrPWw/MzoxKXtmb3IoYz0xLGY9MztjPHgtMTtjKyssZis9Myl2PW4oW3JbdV1bYy0xXSxvW3VdW2MtMV1dLFtyW3VdW2NdLG9bdV1bY11dLFtyW3VdW2MrMV0sb1t1XVtjKzFdXSxzKSx0W2hdW2YtMV09dlswXVswXSxlW2hdW2YtMV09dlswXVsxXSx0W2hdW2YrMV09dlsxXVswXSxlW2hdW2YrMV09dlsxXVsxXTt5PWEoW3RbaF1bMF0sZVtoXVswXV0sW3RbaF1bMl0sZVtoXVsyXV0sW3RbaF1bM10sZVtoXVszXV0pLHRbaF1bMV09eVswXSxlW2hdWzFdPXlbMV0seT1hKFt0W2hdW18tMV0sZVtoXVtfLTFdXSxbdFtoXVtfLTNdLGVbaF1bXy0zXV0sW3RbaF1bXy00XSxlW2hdW18tNF1dKSx0W2hdW18tMl09eVswXSxlW2hdW18tMl09eVsxXX1pZihsKWZvcihmPTA7ZjxfO2YrKyl7Zm9yKGg9MztoPHctMztoKz0zKXY9bihbdFtoLTNdW2ZdLGVbaC0zXVtmXV0sW3RbaF1bZl0sZVtoXVtmXV0sW3RbaCszXVtmXSxlW2grM11bZl1dLGwpLHRbaC0xXVtmXT12WzBdWzBdLGVbaC0xXVtmXT12WzBdWzFdLHRbaCsxXVtmXT12WzFdWzBdLGVbaCsxXVtmXT12WzFdWzFdO3k9YShbdFswXVtmXSxlWzBdW2ZdXSxbdFsyXVtmXSxlWzJdW2ZdXSxbdFszXVtmXSxlWzNdW2ZdXSksdFsxXVtmXT15WzBdLGVbMV1bZl09eVsxXSx5PWEoW3Rbdy0xXVtmXSxlW3ctMV1bZl1dLFt0W3ctM11bZl0sZVt3LTNdW2ZdXSxbdFt3LTRdW2ZdLGVbdy00XVtmXV0pLHRbdy0yXVtmXT15WzBdLGVbdy0yXVtmXT15WzFdfWlmKHMmJmwpZm9yKGg9MTtoPHc7aCs9KGgrMSklMz09MD8yOjEpe2ZvcihmPTM7ZjxfLTM7Zis9Myl2PW4oW3RbaF1bZi0zXSxlW2hdW2YtM11dLFt0W2hdW2ZdLGVbaF1bZl1dLFt0W2hdW2YrM10sZVtoXVtmKzNdXSxzKSx0W2hdW2YtMV09LjUqKHRbaF1bZi0xXSt2WzBdWzBdKSxlW2hdW2YtMV09LjUqKGVbaF1bZi0xXSt2WzBdWzFdKSx0W2hdW2YrMV09LjUqKHRbaF1bZisxXSt2WzFdWzBdKSxlW2hdW2YrMV09LjUqKGVbaF1bZisxXSt2WzFdWzFdKTt5PWEoW3RbaF1bMF0sZVtoXVswXV0sW3RbaF1bMl0sZVtoXVsyXV0sW3RbaF1bM10sZVtoXVszXV0pLHRbaF1bMV09LjUqKHRbaF1bMV0reVswXSksZVtoXVsxXT0uNSooZVtoXVsxXSt5WzFdKSx5PWEoW3RbaF1bXy0xXSxlW2hdW18tMV1dLFt0W2hdW18tM10sZVtoXVtfLTNdXSxbdFtoXVtfLTRdLGVbaF1bXy00XV0pLHRbaF1bXy0yXT0uNSoodFtoXVtfLTJdK3lbMF0pLGVbaF1bXy0yXT0uNSooZVtoXVtfLTJdK3lbMV0pfXJldHVyblt0LGVdfX0seyIuLi8uLi9saWIiOjc3NiwiLi9jYXRtdWxsX3JvbSI6OTY1fV0sOTY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17UkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0U6MWUtNn19LHt9XSw5Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSYmcj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsZjtlfHwoZT1bXSkscio9MyxuKj0zO3ZhciBoPWkqaSxwPTEtaSxkPXAqcCxtPXAqaSoyLGc9LTMqZCx2PTMqKGQtbSkseT0zKihtLWgpLHg9MypoLGI9YSphLF89YiphLHc9MS1hLFQ9dyp3LGs9VCp3O2ZvcihmPTA7Zjx0Lmxlbmd0aDtmKyspbz1nKih1PXRbZl0pW25dW3JdK3YqdVtuXVtyKzFdK3kqdVtuXVtyKzJdK3gqdVtuXVtyKzNdLHM9Zyp1W24rMV1bcl0rdip1W24rMV1bcisxXSt5KnVbbisxXVtyKzJdK3gqdVtuKzFdW3IrM10sbD1nKnVbbisyXVtyXSt2KnVbbisyXVtyKzFdK3kqdVtuKzJdW3IrMl0reCp1W24rMl1bciszXSxjPWcqdVtuKzNdW3JdK3YqdVtuKzNdW3IrMV0reSp1W24rM11bcisyXSt4KnVbbiszXVtyKzNdLGVbZl09aypvKzMqKFQqYSpzK3cqYipsKStfKmM7cmV0dXJuIGV9OmU/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYztlfHwoZT1bXSkscio9Mzt2YXIgdT1pKmksZj0xLWksaD1mKmYscD1mKmkqMixkPS0zKmgsbT0zKihoLXApLGc9MyoocC11KSx2PTMqdSx5PTEtYTtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89ZCooYz10W2xdKVtuXVtyXSttKmNbbl1bcisxXStnKmNbbl1bcisyXSt2KmNbbl1bciszXSxzPWQqY1tuKzFdW3JdK20qY1tuKzFdW3IrMV0rZypjW24rMV1bcisyXSt2KmNbbisxXVtyKzNdLGVbbF09eSpvK2EqcztyZXR1cm4gZX06cj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsZjtlfHwoZT1bXSksbio9Mzt2YXIgaD1hKmEscD1oKmEsZD0xLWEsbT1kKmQsZz1tKmQ7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylvPShmPXRbdV0pW25dW3IrMV0tZltuXVtyXSxzPWZbbisxXVtyKzFdLWZbbisxXVtyXSxsPWZbbisyXVtyKzFdLWZbbisyXVtyXSxjPWZbbiszXVtyKzFdLWZbbiszXVtyXSxlW3VdPWcqbyszKihtKmEqcytkKmgqbCkrcCpjO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjO2V8fChlPVtdKTt2YXIgdT0xLWE7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPShjPXRbbF0pW25dW3IrMV0tY1tuXVtyXSxzPWNbbisxXVtyKzFdLWNbbisxXVtyXSxlW2xdPXUqbythKnM7cmV0dXJuIGV9fX0se31dLDk3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlJiZyP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGMsdSxmO2V8fChlPVtdKSxyKj0zLG4qPTM7dmFyIGg9aSppLHA9aCppLGQ9MS1pLG09ZCpkLGc9bSpkLHY9YSphLHk9MS1hLHg9eSp5LGI9eSphKjIsXz0tMyp4LHc9MyooeC1iKSxUPTMqKGItdiksaz0zKnY7Zm9yKGY9MDtmPHQubGVuZ3RoO2YrKylvPV8qKHU9dFtmXSlbbl1bcl0rdyp1W24rMV1bcl0rVCp1W24rMl1bcl0rayp1W24rM11bcl0scz1fKnVbbl1bcisxXSt3KnVbbisxXVtyKzFdK1QqdVtuKzJdW3IrMV0rayp1W24rM11bcisxXSxsPV8qdVtuXVtyKzJdK3cqdVtuKzFdW3IrMl0rVCp1W24rMl1bcisyXStrKnVbbiszXVtyKzJdLGM9Xyp1W25dW3IrM10rdyp1W24rMV1bciszXStUKnVbbisyXVtyKzNdK2sqdVtuKzNdW3IrM10sZVtmXT1nKm8rMyoobSppKnMrZCpoKmwpK3AqYztyZXR1cm4gZX06ZT9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsZjtlfHwoZT1bXSkscio9Mzt2YXIgaD1hKmEscD1oKmEsZD0xLWEsbT1kKmQsZz1tKmQ7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylvPShmPXRbdV0pW24rMV1bcl0tZltuXVtyXSxzPWZbbisxXVtyKzFdLWZbbl1bcisxXSxsPWZbbisxXVtyKzJdLWZbbl1bcisyXSxjPWZbbisxXVtyKzNdLWZbbl1bciszXSxlW3VdPWcqbyszKihtKmEqcytkKmgqbCkrcCpjO3JldHVybiBlfTpyP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGM7ZXx8KGU9W10pLG4qPTM7dmFyIHU9MS1pLGY9YSphLGg9MS1hLHA9aCpoLGQ9aCphKjIsbT0tMypwLGc9MyoocC1kKSx2PTMqKGQtZikseT0zKmY7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPW0qKGM9dFtsXSlbbl1bcl0rZypjW24rMV1bcl0rdipjW24rMl1bcl0reSpjW24rM11bcl0scz1tKmNbbl1bcisxXStnKmNbbisxXVtyKzFdK3YqY1tuKzJdW3IrMV0reSpjW24rM11bcisxXSxlW2xdPXUqbytpKnM7cmV0dXJuIGV9OmZ1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGM7ZXx8KGU9W10pO3ZhciB1PTEtaTtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89KGM9dFtsXSlbbisxXVtyXS1jW25dW3JdLHM9Y1tuKzFdW3IrMV0tY1tuXVtyKzFdLGVbbF09dSpvK2kqcztyZXR1cm4gZX19fSx7fV0sOTcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWUtMixvPXItMjtyZXR1cm4gbiYmaT9mdW5jdGlvbihlLHIsbil7dmFyIGkscyxsLGMsdSxmO2V8fChlPVtdKTt2YXIgaD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWgpKSxtPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtoKj0zLHAqPTM7dmFyIGc9ZCpkLHY9ZypkLHk9MS1kLHg9eSp5LGI9eCp5LF89bSptLHc9XyptLFQ9MS1tLGs9VCpULEE9aypUO2ZvcihmPTA7Zjx0Lmxlbmd0aDtmKyspaT1iKih1PXRbZl0pW3BdW2hdKzMqKHgqZCp1W3BdW2grMV0reSpnKnVbcF1baCsyXSkrdip1W3BdW2grM10scz1iKnVbcCsxXVtoXSszKih4KmQqdVtwKzFdW2grMV0reSpnKnVbcCsxXVtoKzJdKSt2KnVbcCsxXVtoKzNdLGw9Yip1W3ArMl1baF0rMyooeCpkKnVbcCsyXVtoKzFdK3kqZyp1W3ArMl1baCsyXSkrdip1W3ArMl1baCszXSxjPWIqdVtwKzNdW2hdKzMqKHgqZCp1W3ArM11baCsxXSt5KmcqdVtwKzNdW2grMl0pK3YqdVtwKzNdW2grM10sZVtmXT1BKmkrMyooayptKnMrVCpfKmwpK3cqYztyZXR1cm4gZX06bj9mdW5jdGlvbihlLHIsbil7ZXx8KGU9W10pO3ZhciBpLHMsbCxjLHUsZixoPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihyKSxhKSkscD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IobiksbykpLGQ9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHItaCkpLG09TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4tcCkpO2gqPTM7dmFyIGc9ZCpkLHY9ZypkLHk9MS1kLHg9eSp5LGI9eCp5LF89MS1tO2Zvcih1PTA7dTx0Lmxlbmd0aDt1KyspaT1fKihmPXRbdV0pW3BdW2hdK20qZltwKzFdW2hdLHM9XypmW3BdW2grMV0rbSpmW3ArMV1baCsxXSxsPV8qZltwXVtoKzJdK20qZltwKzFdW2grMV0sYz1fKmZbcF1baCszXSttKmZbcCsxXVtoKzFdLGVbdV09YippKzMqKHgqZCpzK3kqZypsKSt2KmM7cmV0dXJuIGV9Omk/ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsYyx1LGYsaD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWgpKSxtPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtwKj0zO3ZhciBnPW0qbSx2PWcqbSx5PTEtbSx4PXkqeSxiPXgqeSxfPTEtZDtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKWk9XyooZj10W3VdKVtwXVtoXStkKmZbcF1baCsxXSxzPV8qZltwKzFdW2hdK2QqZltwKzFdW2grMV0sbD1fKmZbcCsyXVtoXStkKmZbcCsyXVtoKzFdLGM9XypmW3ArM11baF0rZCpmW3ArM11baCsxXSxlW3VdPWIqaSszKih4Km0qcyt5KmcqbCkrdipjO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbil7ZXx8KGU9W10pO3ZhciBpLHMsbCxjLHU9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxmPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSksaD1NYXRoLm1heCgwLE1hdGgubWluKDEsci11KSkscD1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1mKSksZD0xLXAsbT0xLWg7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylpPW0qKGM9dFtsXSlbZl1bdV0raCpjW2ZdW3UrMV0scz1tKmNbZisxXVt1XStoKmNbZisxXVt1KzFdLGVbbF09ZCppK3AqcztyZXR1cm4gZX19fSx7fV0sOTcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi94eV9kZWZhdWx0cyIpLGE9dCgiLi9hYl9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWUuX2NsaXBQYXRoSWQ9ImNsaXAiK2UudWlkKyJjYXJwZXQiO3ZhciB1PWMoImNvbG9yIixzLmRlZmF1bHRMaW5lKTsobi5jb2VyY2VGb250KGMsImZvbnQiKSxjKCJjYXJwZXQiKSxhKHQsZSxsLGMsdSksZS5hJiZlLmIpPyhlLmEubGVuZ3RoPDMmJihlLmFheGlzLnNtb290aGluZz0wKSxlLmIubGVuZ3RoPDMmJihlLmJheGlzLnNtb290aGluZz0wKSxpKHQsZSxjKXx8KGUudmlzaWJsZT0hMSksZS5fY2hlYXRlciYmYygiY2hlYXRlcnNsb3BlIikpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MzgsIi4uLy4uL2xpYiI6Nzc2LCIuL2FiX2RlZmF1bHRzIjo5NTUsIi4vYXR0cmlidXRlcyI6OTU3LCIuL3h5X2RlZmF1bHRzIjo5ODF9XSw5NzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxwbG90OnQoIi4vcGxvdCIpLGNhbGM6dCgiLi9jYWxjIiksYW5pbWF0YWJsZTohMCxpc0NvbnRhaW5lcjohMCxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY2FycGV0IixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwiY2FycGV0IiwiY2FycGV0QXhpcyIsIm5vdExlZ2VuZElzb2xhdGFibGUiLCJub011bHRpQ2F0ZWdvcnkiLCJub0hvdmVyIiwibm9Tb3J0aW5nQnlWYWx1ZSJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODQxLCIuL2F0dHJpYnV0ZXMiOjk1NywiLi9jYWxjIjo5NjEsIi4vZGVmYXVsdHMiOjk3MiwiLi9wbG90Ijo5Nzh9XSw5NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5fZnVsbERhdGEubGVuZ3RoLGk9MDtpPG47aSsrKXt2YXIgYT10Ll9mdWxsRGF0YVtpXTtpZihhLmluZGV4IT09ZS5pbmRleCYmKCJjYXJwZXQiPT09YS50eXBlJiYocnx8KHI9YSksYS5jYXJwZXQ9PT1lLmNhcnBldCkpKXJldHVybiBhfXJldHVybiByfX0se31dLDk3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4iIjt2YXIgbixpPVtdLGE9cj8zOjE7Zm9yKG49MDtuPHQubGVuZ3RoO24rPWEpaS5wdXNoKHRbbl0rIiwiK2Vbbl0pLHImJm48dC5sZW5ndGgtYSYmKGkucHVzaCgiQyIpLGkucHVzaChbdFtuKzFdKyIsIitlW24rMV0sdFtuKzJdKyIsIitlW24rMl0rIiAiXS5qb2luKCIgIikpKTtyZXR1cm4gaS5qb2luKHI/IiI6IkwiKX19LHt9XSw5NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpO2ZvcihuKHQpP3QubGVuZ3RoPmUubGVuZ3RoJiYodD10LnNsaWNlKDAsZS5sZW5ndGgpKTp0PVtdLGk9MDtpPGUubGVuZ3RoO2krKyl0W2ldPXIoZVtpXSk7cmV0dXJuIHR9fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sOTc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89aVswXSp0LmRwZHgoZSkscz1pWzFdKnQuZHBkeShyKSxsPTEsYz0xO2lmKGEpe3ZhciB1PU1hdGguc3FydChpWzBdKmlbMF0raVsxXSppWzFdKSxmPU1hdGguc3FydChhWzBdKmFbMF0rYVsxXSphWzFdKSxoPShpWzBdKmFbMF0raVsxXSphWzFdKS91L2Y7Yz1NYXRoLm1heCgwLGgpfXZhciBwPTE4MCpNYXRoLmF0YW4yKHMsbykvTWF0aC5QSTtyZXR1cm4gcDwtOTA/KHArPTE4MCxsPS1sKTpwPjkwJiYocC09MTgwLGw9LWwpLHthbmdsZTpwLGZsaXA6bCxwOnQuYzJwKG4sZSxyKSxvZmZzZXRNdWx0cGxpZXI6Y319fSx7fV0sOTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi9tYXBfMWRfYXJyYXkiKSxvPXQoIi4vbWFrZXBhdGgiKSxzPXQoIi4vb3JpZW50X3RleHQiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vbGliIiksdT1jLnN0clJvdGF0ZSxmPWMuc3RyVHJhbnNsYXRlLGg9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpO2Z1bmN0aW9uIHAodCxlLHIsaSxzLGwpe3ZhciBjPSJjb25zdC0iK3MrIi1saW5lcyIsdT1yLnNlbGVjdEFsbCgiLiIrYykuZGF0YShsKTt1LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChjLCEwKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLHUuZWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9cixzPWkueCxsPWkueSxjPWEoW10scyx0LmMycCksdT1hKFtdLGwsZS5jMnApLGY9Ik0iK28oYyx1LGkuc21vb3RoaW5nKTtuLnNlbGVjdCh0aGlzKS5hdHRyKCJkIixmKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixpLndpZHRoKS5zdHlsZSgic3Ryb2tlIixpLmNvbG9yKS5zdHlsZSgiZmlsbCIsIm5vbmUiKX0pKSx1LmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBkKHQsZSxyLGEsbyxjLGgscCl7dmFyIGQ9Yy5zZWxlY3RBbGwoInRleHQuIitwKS5kYXRhKGgpO2QuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKHAsITApO3ZhciBtPTAsZz17fTtyZXR1cm4gZC5lYWNoKChmdW5jdGlvbihvLGMpe3ZhciBoO2lmKCJhdXRvIj09PW8uYXhpcy50aWNrYW5nbGUpaD1zKGEsZSxyLG8ueHksby5keHkpO2Vsc2V7dmFyIHA9KG8uYXhpcy50aWNrYW5nbGUrMTgwKSpNYXRoLlBJLzE4MDtoPXMoYSxlLHIsby54eSxbTWF0aC5jb3MocCksTWF0aC5zaW4ocCldKX1jfHwoZz17YW5nbGU6aC5hbmdsZSxmbGlwOmguZmxpcH0pO3ZhciBkPShvLmVuZEFuY2hvcj8tMToxKSpoLmZsaXAsdj1uLnNlbGVjdCh0aGlzKS5hdHRyKHsidGV4dC1hbmNob3IiOmQ+MD8ic3RhcnQiOiJlbmQiLCJkYXRhLW5vdGV4IjoxfSkuY2FsbChpLmZvbnQsby5mb250KS50ZXh0KG8udGV4dCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KSx5PWkuYkJveCh0aGlzKTt2LmF0dHIoInRyYW5zZm9ybSIsZihoLnBbMF0saC5wWzFdKSt1KGguYW5nbGUpK2Yoby5heGlzLmxhYmVscGFkZGluZypkLC4zKnkuaGVpZ2h0KSksbT1NYXRoLm1heChtLHkud2lkdGgrby5heGlzLmxhYmVscGFkZGluZyl9KSksZC5leGl0KCkucmVtb3ZlKCksZy5tYXhFeHRlbnQ9bSxnfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgbD1lLnhheGlzLHU9ZS55YXhpcyxmPXQuX2Z1bGxMYXlvdXQuX2NsaXBzO2MubWFrZVRyYWNlR3JvdXBzKGksciwidHJhY2UiKS5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPWVbMF0saD1pLnRyYWNlLG09aC5hYXhpcyxnPWguYmF4aXMseT1jLmVuc3VyZVNpbmdsZShyLCJnIiwibWlub3JsYXllciIpLHg9Yy5lbnN1cmVTaW5nbGUociwiZyIsIm1ham9ybGF5ZXIiKSxiPWMuZW5zdXJlU2luZ2xlKHIsImciLCJib3VuZGFyeWxheWVyIiksXz1jLmVuc3VyZVNpbmdsZShyLCJnIiwibGFiZWxsYXllciIpO3Iuc3R5bGUoIm9wYWNpdHkiLGgub3BhY2l0eSkscChsLHUseCxtLCJhIixtLl9ncmlkbGluZXMpLHAobCx1LHgsZywiYiIsZy5fZ3JpZGxpbmVzKSxwKGwsdSx5LG0sImEiLG0uX21pbm9yZ3JpZGxpbmVzKSxwKGwsdSx5LGcsImIiLGcuX21pbm9yZ3JpZGxpbmVzKSxwKGwsdSxiLG0sImEtYm91bmRhcnkiLG0uX2JvdW5kYXJ5bGluZXMpLHAobCx1LGIsZywiYi1ib3VuZGFyeSIsZy5fYm91bmRhcnlsaW5lcyk7dmFyIHc9ZCh0LGwsdSxoLGksXyxtLl9sYWJlbHMsImEtbGFiZWwiKSxUPWQodCxsLHUsaCxpLF8sZy5fbGFiZWxzLCJiLWxhYmVsIik7IWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8sbCl7dmFyIHUsZixoLHAsZD1jLmFnZ051bXMoTWF0aC5taW4sbnVsbCxyLmEpLG09Yy5hZ2dOdW1zKE1hdGgubWF4LG51bGwsci5hKSxnPWMuYWdnTnVtcyhNYXRoLm1pbixudWxsLHIuYikseT1jLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxyLmIpO3U9LjUqKGQrbSksZj1nLGg9ci5hYjJ4eSh1LGYsITApLHA9ci5keHlkYV9yb3VnaCh1LGYpLHZvaWQgMD09PW8uYW5nbGUmJmMuZXh0ZW5kRmxhdChvLHMocixpLGEsaCxyLmR4eWRiX3JvdWdoKHUsZikpKTt2KHQsZSxyLG4saCxwLHIuYWF4aXMsaSxhLG8sImEtdGl0bGUiKSx1PWQsZj0uNSooZyt5KSxoPXIuYWIyeHkodSxmLCEwKSxwPXIuZHh5ZGJfcm91Z2godSxmKSx2b2lkIDA9PT1sLmFuZ2xlJiZjLmV4dGVuZEZsYXQobCxzKHIsaSxhLGgsci5keHlkYV9yb3VnaCh1LGYpKSk7dih0LGUscixuLGgscCxyLmJheGlzLGksYSxsLCJiLXRpdGxlIil9KHQsXyxoLGksbCx1LHcsVCksZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgcyxsLHUsZixoPXIuc2VsZWN0KCIjIit0Ll9jbGlwUGF0aElkKTtoLnNpemUoKXx8KGg9ci5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiY2FycGV0Y2xpcCIsITApKTt2YXIgcD1jLmVuc3VyZVNpbmdsZShoLCJwYXRoIiwiY2FycGV0Ym91bmRhcnkiKSxkPWUuY2xpcHNlZ21lbnRzLG09W107Zm9yKGY9MDtmPGQubGVuZ3RoO2YrKylzPWRbZl0sbD1hKFtdLHMueCxuLmMycCksdT1hKFtdLHMueSxpLmMycCksbS5wdXNoKG8obCx1LHMuYmljdWJpYykpO3ZhciBnPSJNIittLmpvaW4oIkwiKSsiWiI7aC5hdHRyKCJpZCIsdC5fY2xpcFBhdGhJZCkscC5hdHRyKCJkIixnKX0oaCxpLGYsbCx1KX0pKX07dmFyIG09aC5MSU5FX1NQQUNJTkcsZz0oMS1oLk1JRF9TSElGVCkvbSsxO2Z1bmN0aW9uIHYodCxlLHIsYSxvLGMsaCxwLGQsdix5KXt2YXIgeD1bXTtoLnRpdGxlLnRleHQmJngucHVzaChoLnRpdGxlLnRleHQpO3ZhciBiPWUuc2VsZWN0QWxsKCJ0ZXh0LiIreSkuZGF0YSh4KSxfPXYubWF4RXh0ZW50O2IuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKHksITApLGIuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT1zKHIscCxkLG8sYyk7LTE9PT1bInN0YXJ0IiwiYm90aCJdLmluZGV4T2YoaC5zaG93dGlja2xhYmVscykmJihfPTApO3ZhciBhPWgudGl0bGUuZm9udC5zaXplO18rPWEraC50aXRsZS5vZmZzZXQ7dmFyIHk9KHYuYW5nbGUrKHYuZmxpcDwwPzE4MDowKS1lLmFuZ2xlKzQ1MCklMzYwLHg9eT45MCYmeTwyNzAsYj1uLnNlbGVjdCh0aGlzKTtiLnRleHQoaC50aXRsZS50ZXh0KS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHQpLHgmJihfPSgtbC5saW5lQ291bnQoYikrZykqbSphLV8pLGIuYXR0cigidHJhbnNmb3JtIixmKGUucFswXSxlLnBbMV0pK3UoZS5hbmdsZSkrZigwLF8pKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoaS5mb250LGgudGl0bGUuZm9udCl9KSksYi5leGl0KCkucmVtb3ZlKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3NDQsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMiwiLi9tYWtlcGF0aCI6OTc1LCIuL21hcF8xZF9hcnJheSI6OTc2LCIuL29yaWVudF90ZXh0Ijo5NzcsIkBwbG90bHkvZDMiOjU4fV0sOTc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCIuLi8uLi9saWIvc2VhcmNoIikuZmluZEJpbixhPXQoIi4vY29tcHV0ZV9jb250cm9sX3BvaW50cyIpLG89dCgiLi9jcmVhdGVfc3BsaW5lX2V2YWx1YXRvciIpLHM9dCgiLi9jcmVhdGVfaV9kZXJpdmF0aXZlX2V2YWx1YXRvciIpLGw9dCgiLi9jcmVhdGVfal9kZXJpdmF0aXZlX2V2YWx1YXRvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9hLHI9dC5fYixjPWUubGVuZ3RoLHU9ci5sZW5ndGgsZj10LmFheGlzLGg9dC5iYXhpcyxwPWVbMF0sZD1lW2MtMV0sbT1yWzBdLGc9clt1LTFdLHY9ZVtlLmxlbmd0aC0xXS1lWzBdLHk9cltyLmxlbmd0aC0xXS1yWzBdLHg9dipuLlJFTEFUSVZFX0NVTExfVE9MRVJBTkNFLGI9eSpuLlJFTEFUSVZFX0NVTExfVE9MRVJBTkNFO3AtPXgsZCs9eCxtLT1iLGcrPWIsdC5pc1Zpc2libGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5wJiZ0PGQmJmU+bSYmZTxnfSx0LmlzT2NjbHVkZWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDxwfHx0PmR8fGU8bXx8ZT5nfSx0LnNldFNjYWxlPWZ1bmN0aW9uKCl7dmFyIGU9dC5feCxyPXQuX3ksbj1hKHQuX3hjdHJsLHQuX3ljdHJsLGUscixmLnNtb290aGluZyxoLnNtb290aGluZyk7dC5feGN0cmw9blswXSx0Ll95Y3RybD1uWzFdLHQuZXZhbHh5PW8oW3QuX3hjdHJsLHQuX3ljdHJsXSxjLHUsZi5zbW9vdGhpbmcsaC5zbW9vdGhpbmcpLHQuZHh5ZGk9cyhbdC5feGN0cmwsdC5feWN0cmxdLGYuc21vb3RoaW5nLGguc21vb3RoaW5nKSx0LmR4eWRqPWwoW3QuX3hjdHJsLHQuX3ljdHJsXSxmLnNtb290aGluZyxoLnNtb290aGluZyl9LHQuaTJhPWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgubWF4KDAsTWF0aC5mbG9vcih0WzBdKSxjLTIpLG49dFswXS1yO3JldHVybigxLW4pKmVbcl0rbiplW3IrMV19LHQuajJiPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5mbG9vcih0WzFdKSxjLTIpLG49dFsxXS1lO3JldHVybigxLW4pKnJbZV0rbipyW2UrMV19LHQuaWoyYWI9ZnVuY3Rpb24oZSl7cmV0dXJuW3QuaTJhKGVbMF0pLHQuajJiKGVbMV0pXX0sdC5hMmk9ZnVuY3Rpb24odCl7dmFyIHI9TWF0aC5tYXgoMCxNYXRoLm1pbihpKHQsZSksYy0yKSksbj1lW3JdLGE9ZVtyKzFdO3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKGMtMSxyKyh0LW4pLyhhLW4pKSl9LHQuYjJqPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4oaSh0LHIpLHUtMikpLG49cltlXSxhPXJbZSsxXTtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbih1LTEsZSsodC1uKS8oYS1uKSkpfSx0LmFiMmlqPWZ1bmN0aW9uKGUpe3JldHVyblt0LmEyaShlWzBdKSx0LmIyaihlWzFdKV19LHQuaTJjPWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZXZhbHh5KFtdLGUscil9LHQuYWIyeHk9ZnVuY3Rpb24obixpLGEpe2lmKCFhJiYobjxlWzBdfHxuPmVbYy0xXXxpPHJbMF18fGk+clt1LTFdKSlyZXR1cm5bITEsITFdO3ZhciBvPXQuYTJpKG4pLHM9dC5iMmooaSksbD10LmV2YWx4eShbXSxvLHMpO2lmKGEpe3ZhciBmLGgscCxkLG09MCxnPTAsdj1bXTtuPGVbMF0/KGY9MCxoPTAsbT0obi1lWzBdKS8oZVsxXS1lWzBdKSk6bj5lW2MtMV0/KGY9Yy0yLGg9MSxtPShuLWVbYy0xXSkvKGVbYy0xXS1lW2MtMl0pKTpoPW8tKGY9TWF0aC5tYXgoMCxNYXRoLm1pbihjLTIsTWF0aC5mbG9vcihvKSkpKSxpPHJbMF0/KHA9MCxkPTAsZz0oaS1yWzBdKS8oclsxXS1yWzBdKSk6aT5yW3UtMV0/KHA9dS0yLGQ9MSxnPShpLXJbdS0xXSkvKHJbdS0xXS1yW3UtMl0pKTpkPXMtKHA9TWF0aC5tYXgoMCxNYXRoLm1pbih1LTIsTWF0aC5mbG9vcihzKSkpKSxtJiYodC5keHlkaSh2LGYscCxoLGQpLGxbMF0rPXZbMF0qbSxsWzFdKz12WzFdKm0pLGcmJih0LmR4eWRqKHYsZixwLGgsZCksbFswXSs9dlswXSpnLGxbMV0rPXZbMV0qZyl9cmV0dXJuIGx9LHQuYzJwPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5jMnAodFswXSksci5jMnAodFsxXSldfSx0LnAyeD1mdW5jdGlvbih0LGUscil7cmV0dXJuW2UucDJjKHRbMF0pLHIucDJjKHRbMV0pXX0sdC5kYWRpPWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgubWF4KDAsTWF0aC5taW4oZS5sZW5ndGgtMix0KSk7cmV0dXJuIGVbcisxXS1lW3JdfSx0LmRiZGo9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMCxNYXRoLm1pbihyLmxlbmd0aC0yLHQpKTtyZXR1cm4gcltlKzFdLXJbZV19LHQuZHh5ZGE9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dC5keHlkaShudWxsLGUscixuLGkpLG89dC5kYWRpKGUsbik7cmV0dXJuW2FbMF0vbyxhWzFdL29dfSx0LmR4eWRiPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXQuZHh5ZGoobnVsbCxlLHIsbixpKSxvPXQuZGJkaihyLGkpO3JldHVyblthWzBdL28sYVsxXS9vXX0sdC5keHlkYV9yb3VnaD1mdW5jdGlvbihlLHIsbil7dmFyIGk9dioobnx8LjEpLGE9dC5hYjJ4eShlK2ksciwhMCksbz10LmFiMnh5KGUtaSxyLCEwKTtyZXR1cm5bLjUqKGFbMF0tb1swXSkvaSwuNSooYVsxXS1vWzFdKS9pXX0sdC5keHlkYl9yb3VnaD1mdW5jdGlvbihlLHIsbil7dmFyIGk9eSoobnx8LjEpLGE9dC5hYjJ4eShlLHIraSwhMCksbz10LmFiMnh5KGUsci1pLCEwKTtyZXR1cm5bLjUqKGFbMF0tb1swXSkvaSwuNSooYVsxXS1vWzFdKS9pXX0sdC5kcGR4PWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9tfSx0LmRwZHk9ZnVuY3Rpb24odCl7cmV0dXJuIHQuX219fX0seyIuLi8uLi9saWIvc2VhcmNoIjo3OTYsIi4vY29tcHV0ZV9jb250cm9sX3BvaW50cyI6OTY3LCIuL2NvbnN0YW50cyI6OTY4LCIuL2NyZWF0ZV9pX2Rlcml2YXRpdmVfZXZhbHVhdG9yIjo5NjksIi4vY3JlYXRlX2pfZGVyaXZhdGl2ZV9ldmFsdWF0b3IiOjk3MCwiLi9jcmVhdGVfc3BsaW5lX2V2YWx1YXRvciI6OTcxfV0sOTgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvLHM9W10sbD1bXSxjPXRbMF0ubGVuZ3RoLHU9dC5sZW5ndGg7ZnVuY3Rpb24gZihlLHIpe3ZhciBuLGk9MCxhPTA7cmV0dXJuIGU+MCYmdm9pZCAwIT09KG49dFtyXVtlLTFdKSYmKGErKyxpKz1uKSxlPGMtMSYmdm9pZCAwIT09KG49dFtyXVtlKzFdKSYmKGErKyxpKz1uKSxyPjAmJnZvaWQgMCE9PShuPXRbci0xXVtlXSkmJihhKyssaSs9bikscjx1LTEmJnZvaWQgMCE9PShuPXRbcisxXVtlXSkmJihhKyssaSs9biksaS9NYXRoLm1heCgxLGEpfXZhciBoLHAsZCxtLGcsdix5LHgsYixfLHcsVD0wO2ZvcihpPTA7aTxjO2krKylmb3IoYT0wO2E8dTthKyspdm9pZCAwPT09dFthXVtpXSYmKHMucHVzaChpKSxsLnB1c2goYSksdFthXVtpXT1mKGksYSkpLFQ9TWF0aC5tYXgoVCxNYXRoLmFicyh0W2FdW2ldKSk7aWYoIXMubGVuZ3RoKXJldHVybiB0O3ZhciBrPTAsQT0wLE09cy5sZW5ndGg7ZG97Zm9yKGs9MCxvPTA7bzxNO28rKyl7aT1zW29dLGE9bFtvXTt2YXIgUyxFLEwsQyxQLEksTz0wLHo9MDswPT09aT8oTD1lW1A9TWF0aC5taW4oYy0xLDIpXSxDPWVbMV0sUz10W2FdW1BdLHorPShFPXRbYV1bMV0pKyhFLVMpKihlWzBdLUMpLyhDLUwpLE8rKyk6aT09PWMtMSYmKEw9ZVtQPU1hdGgubWF4KDAsYy0zKV0sQz1lW2MtMl0sUz10W2FdW1BdLHorPShFPXRbYV1bYy0yXSkrKEUtUykqKGVbYy0xXS1DKS8oQy1MKSxPKyspLCgwPT09aXx8aT09PWMtMSkmJmE+MCYmYTx1LTEmJihoPXJbYSsxXS1yW2FdLHorPSgocD1yW2FdLXJbYS0xXSkqdFthKzFdW2ldK2gqdFthLTFdW2ldKS8ocCtoKSxPKyspLDA9PT1hPyhMPXJbST1NYXRoLm1pbih1LTEsMildLEM9clsxXSxTPXRbSV1baV0seis9KEU9dFsxXVtpXSkrKEUtUykqKHJbMF0tQykvKEMtTCksTysrKTphPT09dS0xJiYoTD1yW0k9TWF0aC5tYXgoMCx1LTMpXSxDPXJbdS0yXSxTPXRbSV1baV0seis9KEU9dFt1LTJdW2ldKSsoRS1TKSooclt1LTFdLUMpLyhDLUwpLE8rKyksKDA9PT1hfHxhPT09dS0xKSYmaT4wJiZpPGMtMSYmKGg9ZVtpKzFdLWVbaV0seis9KChwPWVbaV0tZVtpLTFdKSp0W2FdW2krMV0raCp0W2FdW2ktMV0pLyhwK2gpLE8rKyksTz96Lz1POihkPWVbaSsxXS1lW2ldLG09ZVtpXS1lW2ktMV0seD0oZz1yW2ErMV0tclthXSkqKHY9clthXS1yW2EtMV0pKihnK3YpLHo9KCh5PWQqbSooZCttKSkqKHYqdFthKzFdW2ldK2cqdFthLTFdW2ldKSt4KihtKnRbYV1baSsxXStkKnRbYV1baS0xXSkpLyh4KihtK2QpK3kqKHYrZykpKSxrKz0oXz0oYj16LXRbYV1baV0pL1QpKl8sdz1PPzA6Ljg1LHRbYV1baV0rPWIqKDErdyl9az1NYXRoLnNxcnQoayl9d2hpbGUoQSsrPDEwMCYmaz4xZS01KTtyZXR1cm4gbi5sb2coIlNtb290aGVyIGNvbnZlcmdlZCB0byIsaywiYWZ0ZXIiLEEsIml0ZXJhdGlvbnMiKSx0fX0seyIuLi8uLi9saWIiOjc3Nn1dLDk4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5MUQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1yKCJ4IiksYT1pJiZpLmxlbmd0aCxvPXIoInkiKSxzPW8mJm8ubGVuZ3RoO2lmKCFhJiYhcylyZXR1cm4hMTtpZihlLl9jaGVhdGVyPSFpLGEmJiFuKGkpfHxzJiYhbihvKSllLl9sZW5ndGg9bnVsbDtlbHNle3ZhciBsPWE/aS5sZW5ndGg6MS8wO3MmJihsPU1hdGgubWluKGwsby5sZW5ndGgpKSxlLmEmJmUuYS5sZW5ndGgmJihsPU1hdGgubWluKGwsZS5hLmxlbmd0aCkpLGUuYiYmZS5iLmxlbmd0aCYmKGw9TWF0aC5taW4obCxlLmIubGVuZ3RoKSksZS5fbGVuZ3RoPWx9cmV0dXJuITB9fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sOTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKS5kZWZhdWx0TGluZSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9aS5tYXJrZXIubGluZTtlLmV4cG9ydHM9bCh7bG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxvY2F0aW9ubW9kZTppLmxvY2F0aW9ubW9kZSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGdlb2pzb246bCh7fSxpLmdlb2pzb24se30pLGZlYXR1cmVpZGtleTppLmZlYXR1cmVpZGtleSx0ZXh0Omwoe30saS50ZXh0LHt9KSxob3ZlcnRleHQ6bCh7fSxpLmhvdmVydGV4dCx7fSksbWFya2VyOntsaW5lOntjb2xvcjpsKHt9LGMuY29sb3Ise2RmbHQ6c30pLHdpZHRoOmwoe30sYy53aWR0aCx7ZGZsdDoxfSksZWRpdFR5cGU6ImNhbGMifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLGFycmF5T2s6ITAsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJjYWxjIn0sc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTppLnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSx1bnNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6aS51bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxob3ZlcmluZm86bCh7fSxvLmhvdmVyaW5mbyx7ZWRpdFR5cGU6ImNhbGMiLGZsYWdzOlsibG9jYXRpb24iLCJ6IiwidGV4dCIsIm5hbWUiXX0pLGhvdmVydGVtcGxhdGU6bigpLHNob3dsZWdlbmQ6bCh7fSxvLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0sYSgiIix7Y0xldHRlcjoieiIsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MzgsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODIzLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4uL3NjYXR0ZXJnZW8vYXR0cmlidXRlcyI6MTIzM31dLDk4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksbz10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLHM9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpO2Z1bmN0aW9uIGwodCl7cmV0dXJuIHQmJiJzdHJpbmciPT10eXBlb2YgdH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixjPWUuX2xlbmd0aCx1PW5ldyBBcnJheShjKTtyPWUuZ2VvanNvbj9mdW5jdGlvbih0KXtyZXR1cm4gbCh0KXx8bih0KX06bDtmb3IodmFyIGY9MDtmPGM7ZisrKXt2YXIgaD11W2ZdPXt9LHA9ZS5sb2NhdGlvbnNbZl0sZD1lLnpbZl07cihwKSYmbihkKT8oaC5sb2M9cCxoLno9ZCk6KGgubG9jPW51bGwsaC56PWkpLGguaW5kZXg9Zn1yZXR1cm4gbyh1LGUpLGEodCxlLHt2YWxzOmUueixjb250YWluZXJTdHI6IiIsY0xldHRlcjoieiJ9KSxzKHUsZSksdX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjY0NywiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTE5MCwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTE5MywiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDk4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGE9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgbD1zKCJsb2NhdGlvbnMiKSxjPXMoInoiKTtpZihsJiZsLmxlbmd0aCYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGMpJiZjLmxlbmd0aCl7ZS5fbGVuZ3RoPU1hdGgubWluKGwubGVuZ3RoLGMubGVuZ3RoKTt2YXIgdSxmPXMoImdlb2pzb24iKTsoInN0cmluZyI9PXR5cGVvZiBmJiYiIiE9PWZ8fG4uaXNQbGFpbk9iamVjdChmKSkmJih1PSJnZW9qc29uLWlkIiksImdlb2pzb24taWQiPT09cygibG9jYXRpb25tb2RlIix1KSYmcygiZmVhdHVyZWlka2V5IikscygidGV4dCIpLHMoImhvdmVydGV4dCIpLHMoImhvdmVydGVtcGxhdGUiKSxzKCJtYXJrZXIubGluZS53aWR0aCIpJiZzKCJtYXJrZXIubGluZS5jb2xvciIpLHMoIm1hcmtlci5vcGFjaXR5IiksaSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxzKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2NDksIi4uLy4uL2xpYiI6Nzc2LCIuL2F0dHJpYnV0ZXMiOjk4Mn1dLDk4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt0LmxvY2F0aW9uPWUubG9jYXRpb24sdC56PWUuejt2YXIgYT1uW2ldO3JldHVybiBhLmZJbiYmYS5mSW4ucHJvcGVydGllcyYmKHQucHJvcGVydGllcz1hLmZJbi5wcm9wZXJ0aWVzKSx0LmN0PWEuY3QsdH19LHt9XSw5ODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliIikuZmlsbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbyxzLGwsYyx1PXQuY2QsZj11WzBdLnRyYWNlLGg9dC5zdWJwbG90LHA9W2Uscl0sZD1bZSszNjAscl07Zm9yKHM9MDtzPHUubGVuZ3RoO3MrKylpZihjPSExLChvPXVbc10pLl9wb2x5Z29ucyl7Zm9yKGw9MDtsPG8uX3BvbHlnb25zLmxlbmd0aDtsKyspby5fcG9seWdvbnNbbF0uY29udGFpbnMocCkmJihjPSFjKSxvLl9wb2x5Z29uc1tsXS5jb250YWlucyhkKSYmKGM9IWMpO2lmKGMpYnJlYWt9aWYoYyYmbylyZXR1cm4gdC54MD10LngxPXQueGEuYzJwKG8uY3QpLHQueTA9dC55MT10LnlhLmMycChvLmN0KSx0LmluZGV4PW8uaW5kZXgsdC5sb2NhdGlvbj1vLmxvYyx0Lno9by56LHQuekxhYmVsPW4udGlja1RleHQoaC5tb2NrQXhpcyxoLm1vY2tBeGlzLmMybChvLnopLCJob3ZlciIpLnRleHQsdC5ob3ZlcnRlbXBsYXRlPW8uaG92ZXJ0ZW1wbGF0ZSxmdW5jdGlvbih0LGUscil7aWYoZS5ob3ZlcnRlbXBsYXRlKXJldHVybjt2YXIgbj1yLmhpfHxlLmhvdmVyaW5mbyxvPVN0cmluZyhyLmxvYykscz0iYWxsIj09PW4/aS5ob3ZlcmluZm8uZmxhZ3M6bi5zcGxpdCgiKyIpLGw9LTEhPT1zLmluZGV4T2YoIm5hbWUiKSxjPS0xIT09cy5pbmRleE9mKCJsb2NhdGlvbiIpLHU9LTEhPT1zLmluZGV4T2YoInoiKSxmPS0xIT09cy5pbmRleE9mKCJ0ZXh0IiksaD1bXTshbCYmYz90Lm5hbWVPdmVycmlkZT1vOihsJiYodC5uYW1lT3ZlcnJpZGU9ZS5uYW1lKSxjJiZoLnB1c2gobykpO3UmJmgucHVzaCh0LnpMYWJlbCk7ZiYmYShyLGUsaCk7dC5leHRyYVRleHQ9aC5qb2luKCI8YnI+Iil9KHQsZixvKSxbdF19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuL2F0dHJpYnV0ZXMiOjk4Mn1dLDk4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL2hlYXRtYXAvY29sb3JiYXIiKSxjYWxjOnQoIi4vY2FsYyIpLGNhbGNHZW9KU09OOnQoIi4vcGxvdCIpLmNhbGNHZW9KU09OLHBsb3Q6dCgiLi9wbG90IikucGxvdCxzdHlsZTp0KCIuL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJjaG9yb3BsZXRoIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nZW8iKSxjYXRlZ29yaWVzOlsiZ2VvIiwibm9PcGFjaXR5Iiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dlbyI6ODYwLCIuLi9oZWF0bWFwL2NvbG9yYmFyIjoxMDYxLCIuL2F0dHJpYnV0ZXMiOjk4MiwiLi9jYWxjIjo5ODMsIi4vZGVmYXVsdHMiOjk4NCwiLi9ldmVudF9kYXRhIjo5ODUsIi4vaG92ZXIiOjk4NiwiLi9wbG90Ijo5ODgsIi4vc2VsZWN0Ijo5ODksIi4vc3R5bGUiOjk5MH1dLDk4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiKSxvPXQoIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyIpLmdldFRvcG9qc29uRmVhdHVyZXMscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZmluZEV4dHJlbWVzLGw9dCgiLi9zdHlsZSIpLnN0eWxlO2UuZXhwb3J0cz17Y2FsY0dlb0pTT046ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dFswXS50cmFjZSxuPWVbci5nZW9dLGk9bi5fc3VicGxvdCxsPXIubG9jYXRpb25tb2RlLGM9ci5fbGVuZ3RoLHU9Imdlb2pzb24taWQiPT09bD9hLmV4dHJhY3RUcmFjZUZlYXR1cmUodCk6byhyLGkudG9wb2pzb24pLGY9W10saD1bXSxwPTA7cDxjO3ArKyl7dmFyIGQ9dFtwXSxtPSJnZW9qc29uLWlkIj09PWw/ZC5mT3V0OmEubG9jYXRpb25Ub0ZlYXR1cmUobCxkLmxvYyx1KTtpZihtKXtkLmdlb2pzb249bSxkLmN0PW0ucHJvcGVydGllcy5jdCxkLl9wb2x5Z29ucz1hLmZlYXR1cmUycG9seWdvbnMobSk7dmFyIGc9YS5jb21wdXRlQmJveChtKTtmLnB1c2goZ1swXSxnWzJdKSxoLnB1c2goZ1sxXSxnWzNdKX1lbHNlIGQuZ2VvanNvbj1udWxsfWlmKCJnZW9qc29uIj09PW4uZml0Ym91bmRzJiYiZ2VvanNvbi1pZCI9PT1sKXt2YXIgdj1hLmNvbXB1dGVCYm94KGEuZ2V0VHJhY2VHZW9qc29uKHIpKTtmPVt2WzBdLHZbMl1dLGg9W3ZbMV0sdlszXV19dmFyIHk9e3BhZGRlZDohMH07ci5fZXh0cmVtZXMubG9uPXMobi5sb25heGlzLl9heCxmLHkpLHIuX2V4dHJlbWVzLmxhdD1zKG4ubGF0YXhpcy5fYXgsaCx5KX0scGxvdDpmdW5jdGlvbih0LGUscil7dmFyIGE9ZS5sYXllcnMuYmFja3Bsb3Quc2VsZWN0KCIuY2hvcm9wbGV0aGxheWVyIik7aS5tYWtlVHJhY2VHcm91cHMoYSxyLCJ0cmFjZSBjaG9yb3BsZXRoIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLmNob3JvcGxldGhsb2NhdGlvbiIpLmRhdGEoaS5pZGVudGl0eSk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImNob3JvcGxldGhsb2NhdGlvbiIsITApLHIuZXhpdCgpLnJlbW92ZSgpLGwodCxlKX0pKX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo3NjksIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyI6ODA1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo4MjYsIi4vc3R5bGUiOjk5MCwiQHBsb3RseS9kMyI6NTh9XSw5ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzPXQuY2QsbD10LnhheGlzLGM9dC55YXhpcyx1PVtdO2lmKCExPT09ZSlmb3Iocj0wO3I8cy5sZW5ndGg7cisrKXNbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxzLmxlbmd0aDtyKyspKGk9KG49c1tyXSkuY3QpJiYoYT1sLmMycChpKSxvPWMuYzJwKGkpLGUuY29udGFpbnMoW2Esb10sbnVsbCxyLHQpPyh1LnB1c2goe3BvaW50TnVtYmVyOnIsbG9uOmlbMF0sbGF0OmlbMV19KSxuLnNlbGVjdGVkPTEpOm4uc2VsZWN0ZWQ9MCk7cmV0dXJuIHV9fSx7fV0sOTkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIik7ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWVbMF0udHJhY2Uscz1lWzBdLm5vZGUzLnNlbGVjdEFsbCgiLmNob3JvcGxldGhsb2NhdGlvbiIpLGw9ci5tYXJrZXJ8fHt9LGM9bC5saW5lfHx7fSx1PW8ubWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlKHIpO3MuZWFjaCgoZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuYXR0cigiZmlsbCIsdSh0LnopKS5jYWxsKGkuc3Ryb2tlLHQubWxjfHxjLmNvbG9yKS5jYWxsKGEuZGFzaExpbmUsIiIsdC5tbHd8fGMud2lkdGh8fDApLnN0eWxlKCJvcGFjaXR5IixsLm9wYWNpdHkpfSkpLGEuc2VsZWN0ZWRQb2ludFN0eWxlKHMscix0KX1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSl7ZSYmcyh0LGUpfSxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS5ub2RlMyxuPWVbMF0udHJhY2U7bi5zZWxlY3RlZHBvaW50cz9hLnNlbGVjdGVkUG9pbnRTdHlsZShyLnNlbGVjdEFsbCgiLmNob3JvcGxldGhsb2NhdGlvbiIpLG4sdCk6cyh0LGUpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1MSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIkBwbG90bHkvZDMiOjU4fV0sOTkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Nob3JvcGxldGgvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9cyh7bG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sZ2VvanNvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LGZlYXR1cmVpZGtleTpzKHt9LG4uZmVhdHVyZWlka2V5LHt9KSxiZWxvdzp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCxtYXJrZXI6e2xpbmU6e2NvbG9yOnMoe30sbi5tYXJrZXIubGluZS5jb2xvcix7ZWRpdFR5cGU6InBsb3QifSksd2lkdGg6cyh7fSxuLm1hcmtlci5saW5lLndpZHRoLHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToiY2FsYyJ9LG9wYWNpdHk6cyh7fSxuLm1hcmtlci5vcGFjaXR5LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToiY2FsYyJ9LHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6cyh7fSxuLnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sdW5zZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5OnMoe30sbi51bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0saG92ZXJpbmZvOm4uaG92ZXJpbmZvLGhvdmVydGVtcGxhdGU6YSh7fSx7a2V5czpbInByb3BlcnRpZXMiXX0pLHNob3dsZWdlbmQ6cyh7fSxvLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0saSgiIix7Y0xldHRlcjoieiIsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY0NiwiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OSwiLi4vY2hvcm9wbGV0aC9hdHRyaWJ1dGVzIjo5ODJ9XSw5OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIikubWFrZUJsYW5rLGw9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpO2Z1bmN0aW9uIGModCl7dmFyIGUscj10WzBdLnRyYWNlLG49ci5fb3B0cztpZihyLnNlbGVjdGVkcG9pbnRzKXtmb3IodmFyIGE9by5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zKHIpLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9dFtzXTtsLmZPdXQmJihsLmZPdXQucHJvcGVydGllcy5tbzI9YS5zZWxlY3RlZE9wYWNpdHlGbihsKSl9ZT17dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbzIifX1lbHNlIGU9aS5pc0FycmF5T3JUeXBlZEFycmF5KHIubWFya2VyLm9wYWNpdHkpP3t0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6Im1vIn06ci5tYXJrZXIub3BhY2l0eTtyZXR1cm4gaS5leHRlbmRGbGF0KG4uZmlsbC5wYWludCx7ImZpbGwtb3BhY2l0eSI6ZX0pLGkuZXh0ZW5kRmxhdChuLmxpbmUucGFpbnQseyJsaW5lLW9wYWNpdHkiOmV9KSxufWUuZXhwb3J0cz17Y29udmVydDpmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ITA9PT1lLnZpc2libGUmJjAhPT1lLl9sZW5ndGgsbz17bGF5b3V0Ont2aXNpYmlsaXR5OiJub25lIn0scGFpbnQ6e319LHU9e2xheW91dDp7dmlzaWJpbGl0eToibm9uZSJ9LHBhaW50Ont9fSxmPWUuX29wdHM9e2ZpbGw6byxsaW5lOnUsZ2VvanNvbjpzKCl9O2lmKCFyKXJldHVybiBmO3ZhciBoPWwuZXh0cmFjdFRyYWNlRmVhdHVyZSh0KTtpZighaClyZXR1cm4gZjt2YXIgcCxkLG0sZz1hLm1ha2VDb2xvclNjYWxlRnVuY0Zyb21UcmFjZShlKSx2PWUubWFya2VyLHk9di5saW5lfHx7fTtpLmlzQXJyYXlPclR5cGVkQXJyYXkodi5vcGFjaXR5KSYmKHA9ZnVuY3Rpb24odCl7dmFyIGU9dC5tbztyZXR1cm4gbihlKT8raS5jb25zdHJhaW4oZSwwLDEpOjB9KSxpLmlzQXJyYXlPclR5cGVkQXJyYXkoeS5jb2xvcikmJihkPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm1sY30pLGkuaXNBcnJheU9yVHlwZWRBcnJheSh5LndpZHRoKSYmKG09ZnVuY3Rpb24odCl7cmV0dXJuIHQubWx3fSk7Zm9yKHZhciB4PTA7eDx0Lmxlbmd0aDt4Kyspe3ZhciBiPXRbeF0sXz1iLmZPdXQ7aWYoXyl7dmFyIHc9Xy5wcm9wZXJ0aWVzO3cuZmM9ZyhiLnopLHAmJih3Lm1vPXAoYikpLGQmJih3Lm1sYz1kKGIpKSxtJiYody5tbHc9bShiKSksYi5jdD13LmN0LGIuX3BvbHlnb25zPWwuZmVhdHVyZTJwb2x5Z29ucyhfKX19dmFyIFQ9cD97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbyJ9OnYub3BhY2l0eTtyZXR1cm4gaS5leHRlbmRGbGF0KG8ucGFpbnQseyJmaWxsLWNvbG9yIjp7dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJmYyJ9LCJmaWxsLW9wYWNpdHkiOlR9KSxpLmV4dGVuZEZsYXQodS5wYWludCx7ImxpbmUtY29sb3IiOmQ/e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToibWxjIn06eS5jb2xvciwibGluZS13aWR0aCI6bT97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbHcifTp5LndpZHRoLCJsaW5lLW9wYWNpdHkiOlR9KSxvLmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIix1LmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIixmLmdlb2pzb249e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczpofSxjKHQpLGZ9LGNvbnZlcnRPblNlbGVjdDpjfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1MSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo3NjksIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIjo3NzAsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw5OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygibG9jYXRpb25zIiksYz1zKCJ6IiksdT1zKCJnZW9qc29uIik7bi5pc0FycmF5T3JUeXBlZEFycmF5KGwpJiZsLmxlbmd0aCYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGMpJiZjLmxlbmd0aCYmKCJzdHJpbmciPT10eXBlb2YgdSYmIiIhPT11fHxuLmlzUGxhaW5PYmplY3QodSkpPyhzKCJmZWF0dXJlaWRrZXkiKSxlLl9sZW5ndGg9TWF0aC5taW4obC5sZW5ndGgsYy5sZW5ndGgpLHMoImJlbG93IikscygidGV4dCIpLHMoImhvdmVydGV4dCIpLHMoImhvdmVydGVtcGxhdGUiKSxzKCJtYXJrZXIubGluZS53aWR0aCIpJiZzKCJtYXJrZXIubGluZS5jb2xvciIpLHMoIm1hcmtlci5vcGFjaXR5IiksaSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxzKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY0OSwiLi4vLi4vbGliIjo3NzYsIi4vYXR0cmlidXRlcyI6OTkxfV0sOTk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLGNhbGM6dCgiLi4vY2hvcm9wbGV0aC9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxob3ZlclBvaW50czp0KCIuLi9jaG9yb3BsZXRoL2hvdmVyIiksZXZlbnREYXRhOnQoIi4uL2Nob3JvcGxldGgvZXZlbnRfZGF0YSIpLHNlbGVjdFBvaW50czp0KCIuLi9jaG9yb3BsZXRoL3NlbGVjdCIpLHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlKXtlJiZlWzBdLnRyYWNlLl9nbFRyYWNlLnVwZGF0ZU9uU2VsZWN0KGUpfSxnZXRCZWxvdzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmdldE1hcExheWVycygpLG49ci5sZW5ndGgtMjtuPj0wO24tLSl7dmFyIGk9cltuXS5pZDtpZigic3RyaW5nIj09dHlwZW9mIGkmJjA9PT1pLmluZGV4T2YoIndhdGVyIikpZm9yKHZhciBhPW4rMTthPHIubGVuZ3RoO2ErKylpZigic3RyaW5nIj09dHlwZW9mKGk9clthXS5pZCkmJi0xPT09aS5pbmRleE9mKCJwbG90bHktIikpcmV0dXJuIGl9fSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY2hvcm9wbGV0aG1hcGJveCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvbWFwYm94IiksY2F0ZWdvcmllczpbIm1hcGJveCIsImdsIiwibm9PcGFjaXR5Iiwic2hvd0xlZ2VuZCJdLG1ldGE6e2hyX25hbWU6ImNob3JvcGxldGhfbWFwYm94In19fSx7Ii4uLy4uL3Bsb3RzL21hcGJveCI6ODg0LCIuLi9jaG9yb3BsZXRoL2NhbGMiOjk4MywiLi4vY2hvcm9wbGV0aC9ldmVudF9kYXRhIjo5ODUsIi4uL2Nob3JvcGxldGgvaG92ZXIiOjk4NiwiLi4vY2hvcm9wbGV0aC9zZWxlY3QiOjk4OSwiLi4vaGVhdG1hcC9jb2xvcmJhciI6MTA2MSwiLi9hdHRyaWJ1dGVzIjo5OTEsIi4vZGVmYXVsdHMiOjk5MywiLi9wbG90Ijo5OTV9XSw5OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb252ZXJ0IikuY29udmVydCxpPXQoIi4vY29udmVydCIpLmNvbnZlcnRPblNlbGVjdCxhPXQoIi4uLy4uL3Bsb3RzL21hcGJveC9jb25zdGFudHMiKS50cmFjZUxheWVyUHJlZml4O2Z1bmN0aW9uIG8odCxlKXt0aGlzLnR5cGU9ImNob3JvcGxldGhtYXBib3giLHRoaXMuc3VicGxvdD10LHRoaXMudWlkPWUsdGhpcy5zb3VyY2VJZD0ic291cmNlLSIrZSx0aGlzLmxheWVyTGlzdD1bWyJmaWxsIixhK2UrIi1maWxsIl0sWyJsaW5lIixhK2UrIi1saW5lIl1dLHRoaXMuYmVsb3c9bnVsbH12YXIgcz1vLnByb3RvdHlwZTtzLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGUobih0KSl9LHMudXBkYXRlT25TZWxlY3Q9ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlKGkodCkpfSxzLl91cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdWJwbG90LHI9dGhpcy5sYXllckxpc3Qsbj1lLmJlbG93TG9va3VwWyJ0cmFjZS0iK3RoaXMudWlkXTtlLm1hcC5nZXRTb3VyY2UodGhpcy5zb3VyY2VJZCkuc2V0RGF0YSh0Lmdlb2pzb24pLG4hPT10aGlzLmJlbG93JiYodGhpcy5fcmVtb3ZlTGF5ZXJzKCksdGhpcy5fYWRkTGF5ZXJzKHQsbiksdGhpcy5iZWxvdz1uKTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXSxvPWFbMF0scz1hWzFdLGw9dFtvXTtlLnNldE9wdGlvbnMocywic2V0TGF5b3V0UHJvcGVydHkiLGwubGF5b3V0KSwidmlzaWJsZSI9PT1sLmxheW91dC52aXNpYmlsaXR5JiZlLnNldE9wdGlvbnMocywic2V0UGFpbnRQcm9wZXJ0eSIsbC5wYWludCl9fSxzLl9hZGRMYXllcnM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5zdWJwbG90LG49dGhpcy5sYXllckxpc3QsaT10aGlzLnNvdXJjZUlkLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPW9bMF0sbD10W3NdO3IuYWRkTGF5ZXIoe3R5cGU6cyxpZDpvWzFdLHNvdXJjZTppLGxheW91dDpsLmxheW91dCxwYWludDpsLnBhaW50fSxlKX19LHMuX3JlbW92ZUxheWVycz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN1YnBsb3QubWFwLGU9dGhpcy5sYXllckxpc3Qscj1lLmxlbmd0aC0xO3I+PTA7ci0tKXQucmVtb3ZlTGF5ZXIoZVtyXVsxXSl9LHMuZGlzcG9zZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc3VicGxvdC5tYXA7dGhpcy5fcmVtb3ZlTGF5ZXJzKCksdC5yZW1vdmVTb3VyY2UodGhpcy5zb3VyY2VJZCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0udHJhY2UsaT1uZXcgbyh0LHIudWlkKSxhPWkuc291cmNlSWQscz1uKGUpLGw9aS5iZWxvdz10LmJlbG93TG9va3VwWyJ0cmFjZS0iK3IudWlkXTtyZXR1cm4gdC5tYXAuYWRkU291cmNlKGEse3R5cGU6Imdlb2pzb24iLGRhdGE6cy5nZW9qc29ufSksaS5fYWRkTGF5ZXJzKHMsbCksZVswXS50cmFjZS5fZ2xUcmFjZT1pLGl9fSx7Ii4uLy4uL3Bsb3RzL21hcGJveC9jb25zdGFudHMiOjg4MiwiLi9jb252ZXJ0Ijo5OTJ9XSw5OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uL21lc2gzZC9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx1Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHY6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxzaXplbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic2NhbGVkIiwiYWJzb2x1dGUiXSxlZGl0VHlwZToiY2FsYyIsZGZsdDoic2NhbGVkIn0sc2l6ZXJlZjp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsbWluOjB9LGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZWRpdFR5cGU6ImNhbGMiLHZhbHVlczpbInRpcCIsInRhaWwiLCJjbSIsImNlbnRlciJdLGRmbHQ6ImNtIn0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZW1wbGF0ZTphKHtlZGl0VHlwZToiY2FsYyJ9LHtrZXlzOlsibm9ybSJdfSksdWhvdmVyZm9ybWF0OmkoInUiLDEpLHZob3ZlcmZvcm1hdDppKCJ2IiwxKSx3aG92ZXJmb3JtYXQ6aSgidyIsMSkseGhvdmVyZm9ybWF0OmkoIngiKSx5aG92ZXJmb3JtYXQ6aSgieSIpLHpob3ZlcmZvcm1hdDppKCJ6Iiksc2hvd2xlZ2VuZDpsKHt9LHMuc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfTtsKGMsbigiIix7Y29sb3JBdHRyOiJ1L3YvdyBub3JtIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpO1sib3BhY2l0eSIsImxpZ2h0cG9zaXRpb24iLCJsaWdodGluZyJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2NbdF09b1t0XX0pKSxjLmhvdmVyaW5mbz1sKHt9LHMuaG92ZXJpbmZvLHtlZGl0VHlwZToiY2FsYyIsZmxhZ3M6WyJ4IiwieSIsInoiLCJ1IiwidiIsInciLCJub3JtIiwidGV4dCIsIm5hbWUiXSxkZmx0OiJ4K3kreitub3JtK3RleHQrbmFtZSJ9KSxjLnRyYW5zZm9ybXM9dm9pZCAwLGUuZXhwb3J0cz1jfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODIzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6ODMwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4uL21lc2gzZC9hdHRyaWJ1dGVzIjoxMTMyfV0sOTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUudSxpPWUudixhPWUudyxvPU1hdGgubWluKGUueC5sZW5ndGgsZS55Lmxlbmd0aCxlLnoubGVuZ3RoLHIubGVuZ3RoLGkubGVuZ3RoLGEubGVuZ3RoKSxzPS0xLzAsbD0xLzAsYz0wO2M8bztjKyspe3ZhciB1PXJbY10sZj1pW2NdLGg9YVtjXSxwPU1hdGguc3FydCh1KnUrZipmK2gqaCk7cz1NYXRoLm1heChzLHApLGw9TWF0aC5taW4obCxwKX1lLl9sZW49byxlLl9ub3JtTWF4PXMsbih0LGUse3ZhbHM6W2wsc10sY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2NDd9XSw5OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtY29uZTNkIiksaT10KCJnbC1jb25lM2QiKS5jcmVhdGVDb25lTWVzaCxhPXQoIi4uLy4uL2xpYiIpLnNpbXBsZU1hcCxvPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cyxsPXQoIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyIpO2Z1bmN0aW9uIGModCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLm1lc2g9bnVsbCx0aGlzLmRhdGE9bnVsbH12YXIgdT1jLnByb3RvdHlwZTt1LmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuaW5kZXg9dC5kYXRhLmluZGV4LHI9dGhpcy5kYXRhLnhbZV0sbj10aGlzLmRhdGEueVtlXSxpPXRoaXMuZGF0YS56W2VdLGE9dGhpcy5kYXRhLnVbZV0sbz10aGlzLmRhdGEudltlXSxzPXRoaXMuZGF0YS53W2VdO3QudHJhY2VDb29yZGluYXRlPVtyLG4saSxhLG8scyxNYXRoLnNxcnQoYSphK28qbytzKnMpXTt2YXIgbD10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShsKSYmdm9pZCAwIT09bFtlXT90LnRleHRMYWJlbD1sW2VdOmwmJih0LnRleHRMYWJlbD1sKSwhMH19O3ZhciBmPXt4YXhpczowLHlheGlzOjEsemF4aXM6Mn0saD17dGlwOjEsdGFpbDowLGNtOi4yNSxjZW50ZXI6LjV9LHA9e3RpcDoxLHRhaWw6MSxjbTouNzUsY2VudGVyOi41fTtmdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC5mdWxsU2NlbmVMYXlvdXQsaT10LmRhdGFTY2FsZSxjPXt9O2Z1bmN0aW9uIHUodCxlKXt2YXIgbj1yW2VdLG89aVtmW2VdXTtyZXR1cm4gYSh0LChmdW5jdGlvbih0KXtyZXR1cm4gbi5kMmwodCkqb30pKX1jLnZlY3RvcnM9bCh1KGUudSwieGF4aXMiKSx1KGUudiwieWF4aXMiKSx1KGUudywiemF4aXMiKSxlLl9sZW4pLGMucG9zaXRpb25zPWwodShlLngsInhheGlzIiksdShlLnksInlheGlzIiksdShlLnosInpheGlzIiksZS5fbGVuKTt2YXIgZD1zKGUpO2MuY29sb3JtYXA9byhlKSxjLnZlcnRleEludGVuc2l0eUJvdW5kcz1bZC5taW4vZS5fbm9ybU1heCxkLm1heC9lLl9ub3JtTWF4XSxjLmNvbmVPZmZzZXQ9aFtlLmFuY2hvcl0sInNjYWxlZCI9PT1lLnNpemVtb2RlP2MuY29uZVNpemU9ZS5zaXplcmVmfHwuNTpjLmNvbmVTaXplPWUuc2l6ZXJlZiYmZS5fbm9ybU1heD9lLnNpemVyZWYvZS5fbm9ybU1heDouNTt2YXIgbT1uKGMpLGc9ZS5saWdodHBvc2l0aW9uO3JldHVybiBtLmxpZ2h0UG9zaXRpb249W2cueCxnLnksZy56XSxtLmFtYmllbnQ9ZS5saWdodGluZy5hbWJpZW50LG0uZGlmZnVzZT1lLmxpZ2h0aW5nLmRpZmZ1c2UsbS5zcGVjdWxhcj1lLmxpZ2h0aW5nLnNwZWN1bGFyLG0ucm91Z2huZXNzPWUubGlnaHRpbmcucm91Z2huZXNzLG0uZnJlc25lbD1lLmxpZ2h0aW5nLmZyZXNuZWwsbS5vcGFjaXR5PWUub3BhY2l0eSxlLl9wYWQ9cFtlLmFuY2hvcl0qbS52ZWN0b3JTY2FsZSptLmNvbmVTY2FsZSplLl9ub3JtTWF4LG19dS51cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5kYXRhPXQ7dmFyIGU9ZCh0aGlzLnNjZW5lLHQpO3RoaXMubWVzaC51cGRhdGUoZSl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLm1lc2gpLHRoaXMubWVzaC5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2xwbG90LmdsLG49ZCh0LGUpLGE9aShyLG4pLG89bmV3IGModCxlLnVpZCk7cmV0dXJuIG8ubWVzaD1hLG8uZGF0YT1lLGEuX3RyYWNlPW8sdC5nbHBsb3QuYWRkKGEpLG99fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjUxLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6NzcyLCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiOjg4MCwiZ2wtY29uZTNkIjoyNTh9XSw5OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygidSIpLGM9cygidiIpLHU9cygidyIpLGY9cygieCIpLGg9cygieSIpLHA9cygieiIpO2wmJmwubGVuZ3RoJiZjJiZjLmxlbmd0aCYmdSYmdS5sZW5ndGgmJmYmJmYubGVuZ3RoJiZoJiZoLmxlbmd0aCYmcCYmcC5sZW5ndGg/KHMoInNpemVyZWYiKSxzKCJzaXplbW9kZSIpLHMoImFuY2hvciIpLHMoImxpZ2h0aW5nLmFtYmllbnQiKSxzKCJsaWdodGluZy5kaWZmdXNlIikscygibGlnaHRpbmcuc3BlY3VsYXIiKSxzKCJsaWdodGluZy5yb3VnaG5lc3MiKSxzKCJsaWdodGluZy5mcmVzbmVsIikscygibGlnaHRwb3NpdGlvbi54IikscygibGlnaHRwb3NpdGlvbi55IikscygibGlnaHRwb3NpdGlvbi56IiksaSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSxzKCJ0ZXh0IikscygiaG92ZXJ0ZXh0IikscygiaG92ZXJ0ZW1wbGF0ZSIpLHMoInVob3ZlcmZvcm1hdCIpLHMoInZob3ZlcmZvcm1hdCIpLHMoIndob3ZlcmZvcm1hdCIpLHMoInhob3ZlcmZvcm1hdCIpLHMoInlob3ZlcmZvcm1hdCIpLHMoInpob3ZlcmZvcm1hdCIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjQ5LCIuLi8uLi9saWIiOjc3NiwiLi9hdHRyaWJ1dGVzIjo5OTZ9XSwxZTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY29uZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIiwic2hvd0xlZ2VuZCJdLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnttaW46ImNtaW4iLG1heDoiY21heCJ9LGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL2NvbnZlcnQiKSxldmVudERhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5ub3JtPWUudHJhY2VDb29yZGluYXRlWzZdLHR9LG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjg2OSwiLi9hdHRyaWJ1dGVzIjo5OTYsIi4vY2FsYyI6OTk3LCIuL2NvbnZlcnQiOjk5OCwiLi9kZWZhdWx0cyI6OTk5fV0sMTAwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKSxvPWEuYXhpc0hvdmVyRm9ybWF0LHM9YS5kZXNjcmlwdGlvbk9ubHlOdW1iZXJzLGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCx1PXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGY9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaD10KCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyIpLHA9aC5DT01QQVJJU09OX09QUzIsZD1oLklOVEVSVkFMX09QUyxtPWkubGluZTtlLmV4cG9ydHM9Zih7ejpuLnoseDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSx4cGVyaW9kOm4ueHBlcmlvZCx5cGVyaW9kOm4ueXBlcmlvZCx4cGVyaW9kMDppLnhwZXJpb2QwLHlwZXJpb2QwOmkueXBlcmlvZDAseHBlcmlvZGFsaWdubWVudDpuLnhwZXJpb2RhbGlnbm1lbnQseXBlcmlvZGFsaWdubWVudDpuLnlwZXJpb2RhbGlnbm1lbnQsdGV4dDpuLnRleHQsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LHRyYW5zcG9zZTpuLnRyYW5zcG9zZSx4dHlwZTpuLnh0eXBlLHl0eXBlOm4ueXR5cGUseGhvdmVyZm9ybWF0Om8oIngiKSx5aG92ZXJmb3JtYXQ6bygieSIpLHpob3ZlcmZvcm1hdDpvKCJ6IiwxKSxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZSxob3Zlcm9uZ2FwczpuLmhvdmVyb25nYXBzLGNvbm5lY3RnYXBzOmYoe30sbi5jb25uZWN0Z2Fwcyx7fSksZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSxhdXRvY29udG91cjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnsiY29udG91cnMuc3RhcnQiOnZvaWQgMCwiY29udG91cnMuZW5kIjp2b2lkIDAsImNvbnRvdXJzLnNpemUiOnZvaWQgMH19LG5jb250b3Vyczp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDoxNSxtaW46MSxlZGl0VHlwZToiY2FsYyJ9LGNvbnRvdXJzOnt0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZXZlbHMiLCJjb25zdHJhaW50Il0sZGZsdDoibGV2ZWxzIixlZGl0VHlwZToiY2FsYyJ9LHN0YXJ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9jb250b3VyIjohMX19LGVuZDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hdXRvY29udG91ciI6ITF9fSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxtaW46MCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9jb250b3VyIjohMX19LGNvbG9yaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmaWxsIiwiaGVhdG1hcCIsImxpbmVzIiwibm9uZSJdLGRmbHQ6ImZpbGwiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xpbmVzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sc2hvd2xhYmVsczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LGxhYmVsZm9udDp1KHtlZGl0VHlwZToicGxvdCIsY29sb3JFZGl0VHlwZToic3R5bGUifSksbGFiZWxmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToicGxvdCIsZGVzY3JpcHRpb246cygiY29udG91ciBsYWJlbCIpfSxvcGVyYXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbXS5jb25jYXQocCkuY29uY2F0KGQpLGRmbHQ6Ij0iLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7YXV0b2NvbnRvdXI6ITF9fSxsaW5lOntjb2xvcjpmKHt9LG0uY29sb3Ise2VkaXRUeXBlOiJzdHlsZStjb2xvcmJhcnMifSksd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InN0eWxlK2NvbG9yYmFycyJ9LGRhc2g6YyxzbW9vdGhpbmc6Zih7fSxtLnNtb290aGluZyx7fSksZWRpdFR5cGU6InBsb3QifX0sbCgiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMSxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NjYwLCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NzQ4LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo4MzAsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjEwNTgsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE5MX1dLDEwMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksaT10KCIuLi9oZWF0bWFwL2NhbGMiKSxhPXQoIi4vc2V0X2NvbnRvdXJzIiksbz10KCIuL2VuZF9wbHVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aSh0LGUpLHM9clswXS56O2EoZSxzKTt2YXIgbCxjPWUuY29udG91cnMsdT1uLmV4dHJhY3RPcHRzKGUpO2lmKCJoZWF0bWFwIj09PWMuY29sb3JpbmcmJnUuYXV0byYmITE9PT1lLmF1dG9jb250b3VyKXt2YXIgZj1jLnN0YXJ0LGg9byhjKSxwPWMuc2l6ZXx8MSxkPU1hdGguZmxvb3IoKGgtZikvcCkrMTtpc0Zpbml0ZShwKXx8KHA9MSxkPTEpO3ZhciBtPWYtcC8yO2w9W20sbStkKnBdfWVsc2UgbD1zO3JldHVybiBuLmNhbGModCxlLHt2YWxzOmwsY0xldHRlcjoieiJ9KSxyfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1MSwiLi4vaGVhdG1hcC9jYWxjIjoxMDU5LCIuL2VuZF9wbHVzIjoxMDEyLCIuL3NldF9jb250b3VycyI6MTAyMH1dLDEwMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10WzBdLGk9bi56O3N3aXRjaChlLnR5cGUpe2Nhc2UibGV2ZWxzIjp2YXIgYT1NYXRoLm1pbihpWzBdWzBdLGlbMF1bMV0pO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPXRbcl07by5wcmVmaXhCb3VuZGFyeT0hby5lZGdlcGF0aHMubGVuZ3RoJiYoYT5vLmxldmVsfHxvLnN0YXJ0cy5sZW5ndGgmJmE9PT1vLmxldmVsKX1icmVhaztjYXNlImNvbnN0cmFpbnQiOmlmKG4ucHJlZml4Qm91bmRhcnk9ITEsbi5lZGdlcGF0aHMubGVuZ3RoKXJldHVybjt2YXIgcz1uLngubGVuZ3RoLGw9bi55Lmxlbmd0aCxjPS0xLzAsdT0xLzA7Zm9yKHI9MDtyPGw7cisrKXU9TWF0aC5taW4odSxpW3JdWzBdKSx1PU1hdGgubWluKHUsaVtyXVtzLTFdKSxjPU1hdGgubWF4KGMsaVtyXVswXSksYz1NYXRoLm1heChjLGlbcl1bcy0xXSk7Zm9yKHI9MTtyPHMtMTtyKyspdT1NYXRoLm1pbih1LGlbMF1bcl0pLHU9TWF0aC5taW4odSxpW2wtMV1bcl0pLGM9TWF0aC5tYXgoYyxpWzBdW3JdKSxjPU1hdGgubWF4KGMsaVtsLTFdW3JdKTt2YXIgZixoLHA9ZS52YWx1ZTtzd2l0Y2goZS5fb3BlcmF0aW9uKXtjYXNlIj4iOnA+YyYmKG4ucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2UiPCI6KHA8dXx8bi5zdGFydHMubGVuZ3RoJiZwPT09dSkmJihuLnByZWZpeEJvdW5kYXJ5PSEwKTticmVhaztjYXNlIltdIjpmPU1hdGgubWluKHBbMF0scFsxXSksKChoPU1hdGgubWF4KHBbMF0scFsxXSkpPHV8fGY+Y3x8bi5zdGFydHMubGVuZ3RoJiZoPT09dSkmJihuLnByZWZpeEJvdW5kYXJ5PSEwKTticmVhaztjYXNlIl1bIjpmPU1hdGgubWluKHBbMF0scFsxXSksaD1NYXRoLm1heChwWzBdLHBbMV0pLGY8dSYmaD5jJiYobi5wcmVmaXhCb3VuZGFyeT0hMCl9fX19LHt9XSwxMDA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGk9dCgiLi9tYWtlX2NvbG9yX21hcCIpLGE9dCgiLi9lbmRfcGx1cyIpO2UuZXhwb3J0cz17bWluOiJ6bWluIixtYXg6InptYXgiLGNhbGM6ZnVuY3Rpb24odCxlLHIpe3ZhciBvPWUuY29udG91cnMscz1lLmxpbmUsbD1vLnNpemV8fDEsYz1vLmNvbG9yaW5nLHU9aShlLHtpc0NvbG9yYmFyOiEwfSk7aWYoImhlYXRtYXAiPT09Yyl7dmFyIGY9bi5leHRyYWN0T3B0cyhlKTtyLl9maWxsZ3JhZGllbnQ9Zi5yZXZlcnNlc2NhbGU/bi5mbGlwU2NhbGUoZi5jb2xvcnNjYWxlKTpmLmNvbG9yc2NhbGUsci5fenJhbmdlPVtmLm1pbixmLm1heF19ZWxzZSJmaWxsIj09PWMmJihyLl9maWxsY29sb3I9dSk7ci5fbGluZT17Y29sb3I6ImxpbmVzIj09PWM/dTpzLmNvbG9yLHdpZHRoOiExIT09by5zaG93bGluZXM/cy53aWR0aDowLGRhc2g6cy5kYXNofSxyLl9sZXZlbHM9e3N0YXJ0Om8uc3RhcnQsZW5kOmEobyksc2l6ZTpsfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjUxLCIuL2VuZF9wbHVzIjoxMDEyLCIuL21ha2VfY29sb3JfbWFwIjoxMDE3fV0sMTAwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0JPVFRPTVNUQVJUOlsxLDksMTMsMTA0LDcxM10sVE9QU1RBUlQ6WzQsNiw3LDEwNCw3MTNdLExFRlRTVEFSVDpbOCwxMiwxNCwyMDgsMTExNF0sUklHSFRTVEFSVDpbMiwzLDExLDIwOCwxMTE0XSxORVdERUxUQTpbbnVsbCxbLTEsMF0sWzAsLTFdLFstMSwwXSxbMSwwXSxudWxsLFswLC0xXSxbLTEsMF0sWzAsMV0sWzAsMV0sbnVsbCxbMCwxXSxbMSwwXSxbMSwwXSxbMCwtMV1dLENIT09TRVNBRERMRTp7MTA0Ols0LDFdLDIwODpbMiw4XSw3MTM6WzcsMTNdLDExMTQ6WzExLDE0XX0sU0FERExFUkVNQUlOREVSOnsxOjQsMjo4LDQ6MSw3OjEzLDg6MiwxMToxNCwxMzo3LDE0OjExfSxMQUJFTERJU1RBTkNFOjIsTEFCRUxJTkNSRUFTRToxMCxMQUJFTE1JTjozLExBQkVMTUFYOjEwLExBQkVMT1BUSU1JWkVSOntFREdFQ09TVDoxLEFOR0xFQ09TVDoxLE5FSUdIQk9SQ09TVDo1LFNBTUVMRVZFTEZBQ1RPUjoxMCxTQU1FTEVWRUxESVNUQU5DRTo1LE1BWENPU1Q6MTAwLElOSVRJQUxTRUFSQ0hQT0lOVFM6MTAsSVRFUkFUSU9OUzo1fX19LHt9XSwxMDA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuL2xhYmVsX2RlZmF1bHRzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz1hLmFkZE9wYWNpdHkscz1hLm9wYWNpdHksbD10KCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyIpLGM9bC5DT05TVFJBSU5UX1JFRFVDVElPTix1PWwuQ09NUEFSSVNPTl9PUFMyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLGwsZil7dmFyIGgscCxkLG09ZS5jb250b3VycyxnPXIoImNvbnRvdXJzLm9wZXJhdGlvbiIpOyhtLl9vcGVyYXRpb249Y1tnXSxmdW5jdGlvbih0LGUpe3ZhciByOy0xPT09dS5pbmRleE9mKGUub3BlcmF0aW9uKT8odCgiY29udG91cnMudmFsdWUiLFswLDFdKSxBcnJheS5pc0FycmF5KGUudmFsdWUpP2UudmFsdWUubGVuZ3RoPjI/ZS52YWx1ZT1lLnZhbHVlLnNsaWNlKDIpOjA9PT1lLmxlbmd0aD9lLnZhbHVlPVswLDFdOmUubGVuZ3RoPDI/KHI9cGFyc2VGbG9hdChlLnZhbHVlWzBdKSxlLnZhbHVlPVtyLHIrMV0pOmUudmFsdWU9W3BhcnNlRmxvYXQoZS52YWx1ZVswXSkscGFyc2VGbG9hdChlLnZhbHVlWzFdKV06bihlLnZhbHVlKSYmKHI9cGFyc2VGbG9hdChlLnZhbHVlKSxlLnZhbHVlPVtyLHIrMV0pKToodCgiY29udG91cnMudmFsdWUiLDApLG4oZS52YWx1ZSl8fChBcnJheS5pc0FycmF5KGUudmFsdWUpP2UudmFsdWU9cGFyc2VGbG9hdChlLnZhbHVlWzBdKTplLnZhbHVlPTApKX0ocixtKSwiPSI9PT1nP2g9bS5zaG93bGluZXM9ITA6KGg9cigiY29udG91cnMuc2hvd2xpbmVzIiksZD1yKCJmaWxsY29sb3IiLG8oKHQubGluZXx8e30pLmNvbG9yfHxsLC41KSkpLGgpJiYocD1yKCJsaW5lLmNvbG9yIixkJiZzKGQpP28oZS5maWxsY29sb3IsMSk6bCkscigibGluZS53aWR0aCIsMikscigibGluZS5kYXNoIikpO3IoImxpbmUuc21vb3RoaW5nIiksaShyLGEscCxmKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NzQ4LCIuL2xhYmVsX2RlZmF1bHRzIjoxMDE2LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sMTAwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKTtmdW5jdGlvbiBhKHQsZSl7dmFyIHIsYT1BcnJheS5pc0FycmF5KGUpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGkodCk/K3Q6bnVsbH1yZXR1cm4tMSE9PW4uQ09NUEFSSVNPTl9PUFMyLmluZGV4T2YodCk/cj1vKGE/ZVswXTplKTotMSE9PW4uSU5URVJWQUxfT1BTLmluZGV4T2YodCk/cj1hP1tvKGVbMF0pLG8oZVsxXSldOltvKGUpLG8oZSldOi0xIT09bi5TRVRfT1BTLmluZGV4T2YodCkmJihyPWE/ZS5tYXAobyk6W28oZSldKSxyfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2U9YSh0LGUpO3ZhciByPU1hdGgubWluKGVbMF0sZVsxXSksbj1NYXRoLm1heChlWzBdLGVbMV0pO3JldHVybntzdGFydDpyLGVuZDpuLHNpemU6bi1yfX19ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJue3N0YXJ0OmU9YSh0LGUpLGVuZDoxLzAsc2l6ZToxLzB9fX1lLmV4cG9ydHM9eyJbXSI6bygiW10iKSwiXVsiOm8oIl1bIiksIj4iOnMoIj4iKSwiPCI6cygiPCIpLCI9IjpzKCI9Iil9fSx7Ii4uLy4uL2NvbnN0YW50cy9maWx0ZXJfb3BzIjo3NDgsImZhc3QtaXNudW1lcmljIjoyNDJ9XSwxMDA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uKCJjb250b3Vycy5zdGFydCIpLGE9bigiY29udG91cnMuZW5kIiksbz0hMT09PWl8fCExPT09YSxzPXIoImNvbnRvdXJzLnNpemUiKTshKG8/ZS5hdXRvY29udG91cj0hMDpyKCJhdXRvY29udG91ciIsITEpKSYmc3x8cigibmNvbnRvdXJzIil9fSx7fV0sMTAwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtmdW5jdGlvbiBpKHQpe3JldHVybiBuLmV4dGVuZEZsYXQoe30sdCx7ZWRnZXBhdGhzOm4uZXh0ZW5kRGVlcChbXSx0LmVkZ2VwYXRocykscGF0aHM6bi5leHRlbmREZWVwKFtdLHQucGF0aHMpLHN0YXJ0czpuLmV4dGVuZERlZXAoW10sdC5zdGFydHMpfSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmV2ZXJzZSgpfSxsPWZ1bmN0aW9uKHQpe3JldHVybiB0fTtzd2l0Y2goZSl7Y2FzZSI9IjpjYXNlIjwiOnJldHVybiB0O2Nhc2UiPiI6Zm9yKDEhPT10Lmxlbmd0aCYmbi53YXJuKCJDb250b3VyIGRhdGEgaW52YWxpZCBmb3IgdGhlIHNwZWNpZmllZCBpbmVxdWFsaXR5IG9wZXJhdGlvbi4iKSxhPXRbMF0scj0wO3I8YS5lZGdlcGF0aHMubGVuZ3RoO3IrKylhLmVkZ2VwYXRoc1tyXT1zKGEuZWRnZXBhdGhzW3JdKTtmb3Iocj0wO3I8YS5wYXRocy5sZW5ndGg7cisrKWEucGF0aHNbcl09cyhhLnBhdGhzW3JdKTtmb3Iocj0wO3I8YS5zdGFydHMubGVuZ3RoO3IrKylhLnN0YXJ0c1tyXT1zKGEuc3RhcnRzW3JdKTtyZXR1cm4gdDtjYXNlIl1bIjp2YXIgYz1zO3M9bCxsPWM7Y2FzZSJbXSI6Zm9yKDIhPT10Lmxlbmd0aCYmbi53YXJuKCJDb250b3VyIGRhdGEgaW52YWxpZCBmb3IgdGhlIHNwZWNpZmllZCBpbmVxdWFsaXR5IHJhbmdlIG9wZXJhdGlvbi4iKSxhPWkodFswXSksbz1pKHRbMV0pLHI9MDtyPGEuZWRnZXBhdGhzLmxlbmd0aDtyKyspYS5lZGdlcGF0aHNbcl09cyhhLmVkZ2VwYXRoc1tyXSk7Zm9yKHI9MDtyPGEucGF0aHMubGVuZ3RoO3IrKylhLnBhdGhzW3JdPXMoYS5wYXRoc1tyXSk7Zm9yKHI9MDtyPGEuc3RhcnRzLmxlbmd0aDtyKyspYS5zdGFydHNbcl09cyhhLnN0YXJ0c1tyXSk7Zm9yKDtvLmVkZ2VwYXRocy5sZW5ndGg7KWEuZWRnZXBhdGhzLnB1c2gobChvLmVkZ2VwYXRocy5zaGlmdCgpKSk7Zm9yKDtvLnBhdGhzLmxlbmd0aDspYS5wYXRocy5wdXNoKGwoby5wYXRocy5zaGlmdCgpKSk7Zm9yKDtvLnN0YXJ0cy5sZW5ndGg7KWEuc3RhcnRzLnB1c2gobChvLnN0YXJ0cy5zaGlmdCgpKSk7cmV0dXJuW2FdfX19LHsiLi4vLi4vbGliIjo3NzZ9XSwxMDEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiKSxhPXQoIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIiksbz10KCIuL2NvbnN0cmFpbnRfZGVmYXVsdHMiKSxzPXQoIi4vY29udG91cnNfZGVmYXVsdHMiKSxsPXQoIi4vc3R5bGVfZGVmYXVsdHMiKSxjPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXtmdW5jdGlvbiBmKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxjLHIsaSl9aWYoaSh0LGUsZix1KSl7YSh0LGUsdSxmKSxmKCJ4aG92ZXJmb3JtYXQiKSxmKCJ5aG92ZXJmb3JtYXQiKSxmKCJ0ZXh0IiksZigiaG92ZXJ0ZXh0IiksZigiaG92ZXJ0ZW1wbGF0ZSIpLGYoImhvdmVyb25nYXBzIik7dmFyIGg9ImNvbnN0cmFpbnQiPT09ZigiY29udG91cnMudHlwZSIpO2YoImNvbm5lY3RnYXBzIixuLmlzQXJyYXkxRChlLnopKSxoP28odCxlLGYsdSxyKToocyh0LGUsZiwoZnVuY3Rpb24ocil7cmV0dXJuIG4uY29lcmNlMih0LGUsYyxyKX0pKSxsKHQsZSxmLHUpKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NzYsIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIjoxMDcyLCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyI6MTIxMSwiLi9hdHRyaWJ1dGVzIjoxMDAxLCIuL2NvbnN0cmFpbnRfZGVmYXVsdHMiOjEwMDYsIi4vY29udG91cnNfZGVmYXVsdHMiOjEwMDgsIi4vc3R5bGVfZGVmYXVsdHMiOjEwMjJ9XSwxMDExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9jb25zdHJhaW50X21hcHBpbmciKSxhPXQoIi4vZW5kX3BsdXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbz0iY29uc3RyYWludCI9PT10LnR5cGU/aVt0Ll9vcGVyYXRpb25dKHQudmFsdWUpOnQscz1vLnNpemUsbD1bXSxjPWEobyksdT1yLnRyYWNlLl9jYXJwZXRUcmFjZSxmPXU/e3hheGlzOnUuYWF4aXMseWF4aXM6dS5iYXhpcyx4OnIuYSx5OnIuYn06e3hheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyx4OnIueCx5OnIueX0saD1vLnN0YXJ0O2g8YztoKz1zKWlmKGwucHVzaChuLmV4dGVuZEZsYXQoe2xldmVsOmgsY3Jvc3NpbmdzOnt9LHN0YXJ0czpbXSxlZGdlcGF0aHM6W10scGF0aHM6W10sejpyLnosc21vb3RoaW5nOnIudHJhY2UubGluZS5zbW9vdGhpbmd9LGYpKSxsLmxlbmd0aD4xZTMpe24ud2FybigiVG9vIG1hbnkgY29udG91cnMsIGNsaXBwaW5nIGF0IDEwMDAiLHQpO2JyZWFrfXJldHVybiBsfX0seyIuLi8uLi9saWIiOjc3NiwiLi9jb25zdHJhaW50X21hcHBpbmciOjEwMDcsIi4vZW5kX3BsdXMiOjEwMTJ9XSwxMDEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5lbmQrdC5zaXplLzFlNn19LHt9XSwxMDEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBhKHQsZSxyLG4pe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMF0pPHImJk1hdGguYWJzKHRbMV0tZVsxXSk8bn1mdW5jdGlvbiBvKHQsZSxyLG8sbCl7dmFyIGMsdT1lLmpvaW4oIiwiKSxmPXQuY3Jvc3NpbmdzW3VdLGg9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTAsYT0wO3Q+MjAmJmU/MjA4PT09dHx8MTExND09PXQ/bj0wPT09clswXT8xOi0xOmE9MD09PXJbMV0/MTotMTotMSE9PWkuQk9UVE9NU1RBUlQuaW5kZXhPZih0KT9hPTE6LTEhPT1pLkxFRlRTVEFSVC5pbmRleE9mKHQpP249MTotMSE9PWkuVE9QU1RBUlQuaW5kZXhPZih0KT9hPS0xOm49LTE7cmV0dXJuW24sYV19KGYscixlKSxwPVtzKHQsZSxbLWhbMF0sLWhbMV1dKV0sZD10LnoubGVuZ3RoLG09dC56WzBdLmxlbmd0aCxnPWUuc2xpY2UoKSx2PWguc2xpY2UoKTtmb3IoYz0wO2M8MWU0O2MrKyl7aWYoZj4yMD8oZj1pLkNIT09TRVNBRERMRVtmXVsoaFswXXx8aFsxXSk8MD8wOjFdLHQuY3Jvc3NpbmdzW3VdPWkuU0FERExFUkVNQUlOREVSW2ZdKTpkZWxldGUgdC5jcm9zc2luZ3NbdV0sIShoPWkuTkVXREVMVEFbZl0pKXtuLmxvZygiRm91bmQgYmFkIG1hcmNoaW5nIGluZGV4OiIsZixlLHQubGV2ZWwpO2JyZWFrfXAucHVzaChzKHQsZSxoKSksZVswXSs9aFswXSxlWzFdKz1oWzFdLHU9ZS5qb2luKCIsIiksYShwW3AubGVuZ3RoLTFdLHBbcC5sZW5ndGgtMl0sbyxsKSYmcC5wb3AoKTt2YXIgeT1oWzBdJiYoZVswXTwwfHxlWzBdPm0tMil8fGhbMV0mJihlWzFdPDB8fGVbMV0+ZC0yKTtpZihlWzBdPT09Z1swXSYmZVsxXT09PWdbMV0mJmhbMF09PT12WzBdJiZoWzFdPT09dlsxXXx8ciYmeSlicmVhaztmPXQuY3Jvc3NpbmdzW3VdfTFlND09PWMmJm4ubG9nKCJJbmZpbml0ZSBsb29wIGluIGNvbnRvdXI/Iik7dmFyIHgsYixfLHcsVCxrLEEsTSxTLEUsTCxDLFAsSSxPLHo9YShwWzBdLHBbcC5sZW5ndGgtMV0sbyxsKSxEPTAsUj0uMip0LnNtb290aGluZyxGPVtdLEI9MDtmb3IoYz0xO2M8cC5sZW5ndGg7YysrKUM9cFtjXSxQPXBbYy0xXSxJPXZvaWQgMCxPPXZvaWQgMCxJPUNbMl0tUFsyXSxPPUNbM10tUFszXSxEKz1BPU1hdGguc3FydChJKkkrTypPKSxGLnB1c2goQSk7dmFyIE49RC9GLmxlbmd0aCpSO2Z1bmN0aW9uIGoodCl7cmV0dXJuIHBbdCVwLmxlbmd0aF19Zm9yKGM9cC5sZW5ndGgtMjtjPj1CO2MtLSlpZigoeD1GW2NdKTxOKXtmb3IoXz0wLGI9Yy0xO2I+PUImJngrRltiXTxOO2ItLSl4Kz1GW2JdO2lmKHomJmM9PT1wLmxlbmd0aC0yKWZvcihfPTA7XzxiJiZ4K0ZbX108TjtfKyspeCs9RltfXTtUPWMtYitfKzEsaz1NYXRoLmZsb29yKChjK2IrXysyKS8yKSx3PXp8fGMhPT1wLmxlbmd0aC0yP3p8fC0xIT09Yj9UJTI/aihrKTpbKGooaylbMF0raihrKzEpWzBdKS8yLChqKGspWzFdK2ooaysxKVsxXSkvMl06cFswXTpwW3AubGVuZ3RoLTFdLHAuc3BsaWNlKGIrMSxjLWIrMSx3KSxjPWIrMSxfJiYoQj1fKSx6JiYoYz09PXAubGVuZ3RoLTI/cFtfXT1wW3AubGVuZ3RoLTFdOjA9PT1jJiYocFtwLmxlbmd0aC0xXT1wWzBdKSl9Zm9yKHAuc3BsaWNlKDAsQiksYz0wO2M8cC5sZW5ndGg7YysrKXBbY10ubGVuZ3RoPTI7aWYoIShwLmxlbmd0aDwyKSlpZih6KXAucG9wKCksdC5wYXRocy5wdXNoKHApO2Vsc2V7cnx8bi5sb2coIlVuY2xvc2VkIGludGVyaW9yIGNvbnRvdXI/Iix0LmxldmVsLGcuam9pbigiLCIpLHAuam9pbigiTCIpKTt2YXIgVT0hMTtmb3IoTT0wO008dC5lZGdlcGF0aHMubGVuZ3RoO00rKylpZihFPXQuZWRnZXBhdGhzW01dLCFVJiZhKEVbMF0scFtwLmxlbmd0aC0xXSxvLGwpKXtwLnBvcCgpLFU9ITA7dmFyIFY9ITE7Zm9yKFM9MDtTPHQuZWRnZXBhdGhzLmxlbmd0aDtTKyspaWYoYSgoTD10LmVkZ2VwYXRoc1tTXSlbTC5sZW5ndGgtMV0scFswXSxvLGwpKXtWPSEwLHAuc2hpZnQoKSx0LmVkZ2VwYXRocy5zcGxpY2UoTSwxKSxTPT09TT90LnBhdGhzLnB1c2gocC5jb25jYXQoTCkpOihTPk0mJlMtLSx0LmVkZ2VwYXRoc1tTXT1MLmNvbmNhdChwLEUpKTticmVha31WfHwodC5lZGdlcGF0aHNbTV09cC5jb25jYXQoRSkpfWZvcihNPTA7TTx0LmVkZ2VwYXRocy5sZW5ndGgmJiFVO00rKylhKChFPXQuZWRnZXBhdGhzW01dKVtFLmxlbmd0aC0xXSxwWzBdLG8sbCkmJihwLnNoaWZ0KCksdC5lZGdlcGF0aHNbTV09RS5jb25jYXQocCksVT0hMCk7VXx8dC5lZGdlcGF0aHMucHVzaChwKX19ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49ZVswXStNYXRoLm1heChyWzBdLDApLGk9ZVsxXStNYXRoLm1heChyWzFdLDApLGE9dC56W2ldW25dLG89dC54YXhpcyxzPXQueWF4aXM7aWYoclsxXSl7dmFyIGw9KHQubGV2ZWwtYSkvKHQueltpXVtuKzFdLWEpO3JldHVybltvLmMycCgoMS1sKSp0Lnhbbl0rbCp0LnhbbisxXSwhMCkscy5jMnAodC55W2ldLCEwKSxuK2wsaV19dmFyIGM9KHQubGV2ZWwtYSkvKHQueltpKzFdW25dLWEpO3JldHVybltvLmMycCh0Lnhbbl0sITApLHMuYzJwKCgxLWMpKnQueVtpXStjKnQueVtpKzFdLCEwKSxuLGkrY119ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLHMsbDtmb3IoZT1lfHwuMDEscj1yfHwuMDEsYT0wO2E8dC5sZW5ndGg7YSsrKXtmb3Iocz10W2FdLGw9MDtsPHMuc3RhcnRzLmxlbmd0aDtsKyspbyhzLHMuc3RhcnRzW2xdLCJlZGdlIixlLHIpO2ZvcihpPTA7T2JqZWN0LmtleXMocy5jcm9zc2luZ3MpLmxlbmd0aCYmaTwxZTQ7KWkrKyxvKHMsT2JqZWN0LmtleXMocy5jcm9zc2luZ3MpWzBdLnNwbGl0KCIsIikubWFwKE51bWJlciksdm9pZCAwLGUscik7MWU0PT09aSYmbi5sb2coIkluZmluaXRlIGxvb3AgaW4gY29udG91cj8iKX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2NvbnN0YW50cyI6MTAwNX1dLDEwMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vaGVhdG1hcC9ob3ZlciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe298fChvPXt9KSxvLmlzQ29udG91cj0hMDt2YXIgcz1pKHQsZSxyLGEsbyk7cmV0dXJuIHMmJnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC50cmFjZTsiY29uc3RyYWludCI9PT1lLmNvbnRvdXJzLnR5cGUmJihlLmZpbGxjb2xvciYmbi5vcGFjaXR5KGUuZmlsbGNvbG9yKT90LmNvbG9yPW4uYWRkT3BhY2l0eShlLmZpbGxjb2xvciwxKTplLmNvbnRvdXJzLnNob3dsaW5lcyYmbi5vcGFjaXR5KGUubGluZS5jb2xvcikmJih0LmNvbG9yPW4uYWRkT3BhY2l0eShlLmxpbmUuY29sb3IsMSkpKX0pKSxzfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uL2hlYXRtYXAvaG92ZXIiOjEwNjV9XSwxMDE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6dCgiLi9zdHlsZSIpLGNvbG9yYmFyOnQoIi4vY29sb3JiYXIiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNvbnRvdXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsImNvbnRvdXIiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4NDEsIi4vYXR0cmlidXRlcyI6MTAwMSwiLi9jYWxjIjoxMDAyLCIuL2NvbG9yYmFyIjoxMDA0LCIuL2RlZmF1bHRzIjoxMDEwLCIuL2hvdmVyIjoxMDE0LCIuL3Bsb3QiOjEwMTksIi4vc3R5bGUiOjEwMjF9XSwxMDE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtpZihpfHwoaT17fSksdCgiY29udG91cnMuc2hvd2xhYmVscyIpKXt2YXIgYT1lLmZvbnQ7bi5jb2VyY2VGb250KHQsImNvbnRvdXJzLmxhYmVsZm9udCIse2ZhbWlseTphLmZhbWlseSxzaXplOmEuc2l6ZSxjb2xvcjpyfSksdCgiY29udG91cnMubGFiZWxmb3JtYXQiKX0hMSE9PWkuaGFzSG92ZXImJnQoInpob3ZlcmZvcm1hdCIpfX0seyIuLi8uLi9saWIiOjc3Nn1dLDEwMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksYT10KCIuL2VuZF9wbHVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY29udG91cnMscj1lLnN0YXJ0LG89YShlKSxzPWUuc2l6ZXx8MSxsPU1hdGguZmxvb3IoKG8tcikvcykrMSxjPSJsaW5lcyI9PT1lLmNvbG9yaW5nPzA6MSx1PWkuZXh0cmFjdE9wdHModCk7aXNGaW5pdGUocyl8fChzPTEsbD0xKTt2YXIgZixoLHA9dS5yZXZlcnNlc2NhbGU/aS5mbGlwU2NhbGUodS5jb2xvcnNjYWxlKTp1LmNvbG9yc2NhbGUsZD1wLmxlbmd0aCxtPW5ldyBBcnJheShkKSxnPW5ldyBBcnJheShkKTtpZigiaGVhdG1hcCI9PT1lLmNvbG9yaW5nKXt2YXIgdj11Lm1pbix5PXUubWF4O2ZvcihoPTA7aDxkO2grKylmPXBbaF0sbVtoXT1mWzBdKih5LXYpK3YsZ1toXT1mWzFdO3ZhciB4PW4uZXh0ZW50KFt2LHksZS5zdGFydCxlLnN0YXJ0K3MqKGwtMSldKSxiPXhbdjx5PzA6MV0sXz14W3Y8eT8xOjBdO2IhPT12JiYobS5zcGxpY2UoMCwwLGIpLGcuc3BsaWNlKDAsMCxnWzBdKSksXyE9PXkmJihtLnB1c2goXyksZy5wdXNoKGdbZy5sZW5ndGgtMV0pKX1lbHNlIGZvcihoPTA7aDxkO2grKylmPXBbaF0sbVtoXT0oZlswXSoobCtjLTEpLWMvMikqcytyLGdbaF09ZlsxXTtyZXR1cm4gaS5tYWtlQ29sb3JTY2FsZUZ1bmMoe2RvbWFpbjptLHJhbmdlOmd9LHtub051bWVyaWNDaGVjazohMH0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1MSwiLi9lbmRfcGx1cyI6MTAxMiwiQHBsb3RseS9kMyI6NTh9XSwxMDE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gaSh0LGUpe3ZhciByPShlWzBdWzBdPnQ/MDoxKSsoZVswXVsxXT50PzA6MikrKGVbMV1bMV0+dD8wOjQpKyhlWzFdWzBdPnQ/MDo4KTtyZXR1cm4gNT09PXJ8fDEwPT09cj90PihlWzBdWzBdK2VbMF1bMV0rZVsxXVswXStlWzFdWzFdKS80PzU9PT1yPzcxMzoxMTE0OjU9PT1yPzEwNDoyMDg6MTU9PT1yPzA6cn1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixhLG8scyxsLGMsdSxmLGg9dFswXS56LHA9aC5sZW5ndGgsZD1oWzBdLmxlbmd0aCxtPTI9PT1wfHwyPT09ZDtmb3Iocj0wO3I8cC0xO3IrKylmb3Iobz1bXSwwPT09ciYmKG89by5jb25jYXQobi5CT1RUT01TVEFSVCkpLHI9PT1wLTImJihvPW8uY29uY2F0KG4uVE9QU1RBUlQpKSxlPTA7ZTxkLTE7ZSsrKWZvcihhPW8uc2xpY2UoKSwwPT09ZSYmKGE9YS5jb25jYXQobi5MRUZUU1RBUlQpKSxlPT09ZC0yJiYoYT1hLmNvbmNhdChuLlJJR0hUU1RBUlQpKSxzPWUrIiwiK3IsbD1bW2hbcl1bZV0saFtyXVtlKzFdXSxbaFtyKzFdW2VdLGhbcisxXVtlKzFdXV0sZj0wO2Y8dC5sZW5ndGg7ZisrKShjPWkoKHU9dFtmXSkubGV2ZWwsbCkpJiYodS5jcm9zc2luZ3Nbc109YywtMSE9PWEuaW5kZXhPZihjKSYmKHUuc3RhcnRzLnB1c2goW2Uscl0pLG0mJi0xIT09YS5pbmRleE9mKGMsYS5pbmRleE9mKGMpKzEpJiZ1LnN0YXJ0cy5wdXNoKFtlLHJdKSkpfX0seyIuL2NvbnN0YW50cyI6MTAwNX1dLDEwMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NldF9jb252ZXJ0IiksdT10KCIuLi9oZWF0bWFwL3Bsb3QiKSxmPXQoIi4vbWFrZV9jcm9zc2luZ3MiKSxoPXQoIi4vZmluZF9hbGxfcGF0aHMiKSxwPXQoIi4vZW1wdHlfcGF0aGluZm8iKSxkPXQoIi4vY29udmVydF90b19jb25zdHJhaW50cyIpLG09dCgiLi9jbG9zZV9ib3VuZGFyaWVzIiksZz10KCIuL2NvbnN0YW50cyIpLHY9Zy5MQUJFTE9QVElNSVpFUjtmdW5jdGlvbiB5KHQsZSl7dmFyIHIsbixvLHMsbCxjLHUsZj0iIixoPTAscD10LmVkZ2VwYXRocy5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSksZD0hMDtmdW5jdGlvbiBtKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLWVbMl1bMV0pPC4wMX1mdW5jdGlvbiBnKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMF1bMF0pPC4wMX1mdW5jdGlvbiB2KHQpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMl1bMF0pPC4wMX1mb3IoO3AubGVuZ3RoOyl7Zm9yKGM9YS5zbW9vdGhvcGVuKHQuZWRnZXBhdGhzW2hdLHQuc21vb3RoaW5nKSxmKz1kP2M6Yy5yZXBsYWNlKC9eTS8sIkwiKSxwLnNwbGljZShwLmluZGV4T2YoaCksMSkscj10LmVkZ2VwYXRoc1toXVt0LmVkZ2VwYXRoc1toXS5sZW5ndGgtMV0scz0tMSxvPTA7bzw0O28rKyl7aWYoIXIpe2kubG9nKCJNaXNzaW5nIGVuZD8iLGgsdCk7YnJlYWt9Zm9yKHU9cixNYXRoLmFicyh1WzFdLWVbMF1bMV0pPC4wMSYmIXYocik/bj1lWzFdOmcocik/bj1lWzBdOm0ocik/bj1lWzNdOnYocikmJihuPWVbMl0pLGw9MDtsPHQuZWRnZXBhdGhzLmxlbmd0aDtsKyspe3ZhciB5PXQuZWRnZXBhdGhzW2xdWzBdO01hdGguYWJzKHJbMF0tblswXSk8LjAxP01hdGguYWJzKHJbMF0teVswXSk8LjAxJiYoeVsxXS1yWzFdKSooblsxXS15WzFdKT49MCYmKG49eSxzPWwpOk1hdGguYWJzKHJbMV0tblsxXSk8LjAxP01hdGguYWJzKHJbMV0teVsxXSk8LjAxJiYoeVswXS1yWzBdKSooblswXS15WzBdKT49MCYmKG49eSxzPWwpOmkubG9nKCJlbmRwdCB0byBuZXdlbmRwdCBpcyBub3QgdmVydC4gb3IgaG9yei4iLHIsbix5KX1pZihyPW4scz49MClicmVhaztmKz0iTCIrbn1pZihzPT09dC5lZGdlcGF0aHMubGVuZ3RoKXtpLmxvZygidW5jbG9zZWQgcGVyaW1ldGVyIHBhdGgiKTticmVha31oPXMsKGQ9LTE9PT1wLmluZGV4T2YoaCkpJiYoaD1wWzBdLGYrPSJaIil9Zm9yKGg9MDtoPHQucGF0aHMubGVuZ3RoO2grKylmKz1hLnNtb290aGNsb3NlZCh0LnBhdGhzW2hdLHQuc21vb3RoaW5nKTtyZXR1cm4gZn1mdW5jdGlvbiB4KHQsZSxyLG4pe3ZhciBhPWUud2lkdGgvMixvPWUuaGVpZ2h0LzIscz10LngsbD10LnksYz10LnRoZXRhLHU9TWF0aC5jb3MoYykqYSxmPU1hdGguc2luKGMpKmEsaD0ocz5uLmNlbnRlcj9uLnJpZ2h0LXM6cy1uLmxlZnQpLyh1K01hdGguYWJzKE1hdGguc2luKGMpKm8pKSxwPShsPm4ubWlkZGxlP24uYm90dG9tLWw6bC1uLnRvcCkvKE1hdGguYWJzKGYpK01hdGguY29zKGMpKm8pO2lmKGg8MXx8cDwxKXJldHVybiAxLzA7dmFyIGQ9di5FREdFQ09TVCooMS8oaC0xKSsxLyhwLTEpKTtkKz12LkFOR0xFQ09TVCpjKmM7Zm9yKHZhciBtPXMtdSxnPWwtZix5PXMrdSx4PWwrZixiPTA7YjxyLmxlbmd0aDtiKyspe3ZhciBfPXJbYl0sdz1NYXRoLmNvcyhfLnRoZXRhKSpfLndpZHRoLzIsVD1NYXRoLnNpbihfLnRoZXRhKSpfLndpZHRoLzIsaz0yKmkuc2VnbWVudERpc3RhbmNlKG0sZyx5LHgsXy54LXcsXy55LVQsXy54K3csXy55K1QpLyhlLmhlaWdodCtfLmhlaWdodCksQT1fLmxldmVsPT09ZS5sZXZlbCxNPUE/di5TQU1FTEVWRUxESVNUQU5DRToxO2lmKGs8PU0pcmV0dXJuIDEvMDtkKz12Lk5FSUdIQk9SQ09TVCooQT92LlNBTUVMRVZFTEZBQ1RPUjoxKS8oay1NKX1yZXR1cm4gZH1mdW5jdGlvbiBiKHQpe3ZhciBlLHIsbj10LnRyYWNlLl9lbXB0eXBvaW50cyxpPVtdLGE9dC56Lmxlbmd0aCxvPXQuelswXS5sZW5ndGgscz1bXTtmb3IoZT0wO2U8bztlKyspcy5wdXNoKDEpO2ZvcihlPTA7ZTxhO2UrKylpLnB1c2gocy5zbGljZSgpKTtmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKWlbKHI9bltlXSlbMF1dW3JbMV1dPTA7cmV0dXJuIHQuem1hc2s9aSxpfXIucGxvdD1mdW5jdGlvbih0LGUsbyxzKXt2YXIgbD1lLnhheGlzLGM9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhzLG8sImNvbnRvdXIiKS5lYWNoKChmdW5jdGlvbihvKXt2YXIgcz1uLnNlbGVjdCh0aGlzKSx2PW9bMF0seD12LnRyYWNlLF89di54LHc9di55LFQ9eC5jb250b3VycyxrPXAoVCxlLHYpLEE9aS5lbnN1cmVTaW5nbGUocywiZyIsImhlYXRtYXBjb2xvcmluZyIpLE09W107ImhlYXRtYXAiPT09VC5jb2xvcmluZyYmKE09W29dKSx1KHQsZSxNLEEpLGYoayksaChrKTt2YXIgUz1sLmMycChfWzBdLCEwKSxFPWwuYzJwKF9bXy5sZW5ndGgtMV0sITApLEw9Yy5jMnAod1swXSwhMCksQz1jLmMycCh3W3cubGVuZ3RoLTFdLCEwKSxQPVtbUyxDXSxbRSxDXSxbRSxMXSxbUyxMXV0sST1rOyJjb25zdHJhaW50Ij09PVQudHlwZSYmKEk9ZChrLFQuX29wZXJhdGlvbikpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1pLmVuc3VyZVNpbmdsZSh0LCJnIiwiY29udG91cmJnIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YSgiZmlsbCI9PT1yLmNvbG9yaW5nP1swXTpbXSk7bi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLG4uZXhpdCgpLnJlbW92ZSgpLG4uYXR0cigiZCIsIk0iK2Uuam9pbigiTCIpKyJaIikuc3R5bGUoInN0cm9rZSIsIm5vbmUiKX0ocyxQLFQpLGZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPSJmaWxsIj09PWEuY29sb3Jpbmd8fCJjb25zdHJhaW50Ij09PWEudHlwZSYmIj0iIT09YS5fb3BlcmF0aW9uLHM9Ik0iK3Iuam9pbigiTCIpKyJaIjtvJiZtKGUsYSk7dmFyIGw9aS5lbnN1cmVTaW5nbGUodCwiZyIsImNvbnRvdXJmaWxsIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShvP2U6W10pO2wuZW50ZXIoKS5hcHBlbmQoInBhdGgiKSxsLmV4aXQoKS5yZW1vdmUoKSxsLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPSh0LnByZWZpeEJvdW5kYXJ5P3M6IiIpK3kodCxyKTtlP24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLGUpLnN0eWxlKCJzdHJva2UiLCJub25lIik6bi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KSl9KHMsSSxQLFQpLGZ1bmN0aW9uKHQsZSxvLHMsbCl7dmFyIGM9aS5lbnN1cmVTaW5nbGUodCwiZyIsImNvbnRvdXJsaW5lcyIpLHU9ITEhPT1sLnNob3dsaW5lcyxmPWwuc2hvd2xhYmVscyxoPXUmJmYscD1yLmNyZWF0ZUxpbmVzKGMsdXx8ZixlKSxkPXIuY3JlYXRlTGluZUNsaXAoYyxoLG8scy50cmFjZS51aWQpLG09dC5zZWxlY3RBbGwoImcuY29udG91cmxhYmVscyIpLmRhdGEoZj9bMF06W10pO2lmKG0uZXhpdCgpLnJlbW92ZSgpLG0uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VybGFiZWxzIiwhMCksZil7dmFyIHY9W10seT1bXTtpLmNsZWFyTG9jYXRpb25DYWNoZSgpO3ZhciB4PXIubGFiZWxGb3JtYXR0ZXIobyxzKSxiPWEudGVzdGVyLmFwcGVuZCgidGV4dCIpLmF0dHIoImRhdGEtbm90ZXgiLDEpLmNhbGwoYS5mb250LGwubGFiZWxmb250KSxfPWVbMF0ueGF4aXMsdz1lWzBdLnlheGlzLFQ9Xy5fbGVuZ3RoLGs9dy5fbGVuZ3RoLEE9Xy5yYW5nZSxNPXcucmFuZ2UsUz1pLmFnZ051bXMoTWF0aC5taW4sbnVsbCxzLngpLEU9aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwscy54KSxMPWkuYWdnTnVtcyhNYXRoLm1pbixudWxsLHMueSksQz1pLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxzLnkpLFA9TWF0aC5tYXgoXy5jMnAoUywhMCksMCksST1NYXRoLm1pbihfLmMycChFLCEwKSxUKSxPPU1hdGgubWF4KHcuYzJwKEMsITApLDApLHo9TWF0aC5taW4ody5jMnAoTCwhMCksayksRD17fTtBWzBdPEFbMV0/KEQubGVmdD1QLEQucmlnaHQ9SSk6KEQubGVmdD1JLEQucmlnaHQ9UCksTVswXTxNWzFdPyhELnRvcD1PLEQuYm90dG9tPXopOihELnRvcD16LEQuYm90dG9tPU8pLEQubWlkZGxlPShELnRvcCtELmJvdHRvbSkvMixELmNlbnRlcj0oRC5sZWZ0K0QucmlnaHQpLzIsdi5wdXNoKFtbRC5sZWZ0LEQudG9wXSxbRC5yaWdodCxELnRvcF0sW0QucmlnaHQsRC5ib3R0b21dLFtELmxlZnQsRC5ib3R0b21dXSk7dmFyIFI9TWF0aC5zcXJ0KFQqVCtrKmspLEY9Zy5MQUJFTERJU1RBTkNFKlIvTWF0aC5tYXgoMSxlLmxlbmd0aC9nLkxBQkVMSU5DUkVBU0UpO3AuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9ci5jYWxjVGV4dE9wdHModC5sZXZlbCx4LGIsbyk7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1pLmdldFZpc2libGVTZWdtZW50KHRoaXMsRCxlLmhlaWdodC8yKTtpZih0JiYhKHQubGVuPChlLndpZHRoK2UuaGVpZ2h0KSpnLkxBQkVMTUlOKSlmb3IodmFyIG49TWF0aC5taW4oTWF0aC5jZWlsKHQubGVuL0YpLGcuTEFCRUxNQVgpLGE9MDthPG47YSsrKXt2YXIgbz1yLmZpbmRCZXN0VGV4dExvY2F0aW9uKHRoaXMsdCxlLHksRCk7aWYoIW8pYnJlYWs7ci5hZGRMYWJlbERhdGEobyxlLHksdil9fSkpfSkpLGIucmVtb3ZlKCksci5kcmF3TGFiZWxzKG0seSxvLGQsaD92Om51bGwpfWYmJiF1JiZwLnJlbW92ZSgpfShzLGssdCx2LFQpLGZ1bmN0aW9uKHQsZSxyLG4sbyl7dmFyIHM9bi50cmFjZSxsPXIuX2Z1bGxMYXlvdXQuX2NsaXBzLGM9ImNsaXAiK3MudWlkLHU9bC5zZWxlY3RBbGwoIiMiK2MpLmRhdGEocy5jb25uZWN0Z2Fwcz9bXTpbMF0pO2lmKHUuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiY29udG91cmNsaXAiLCEwKS5hdHRyKCJpZCIsYyksdS5leGl0KCkucmVtb3ZlKCksITE9PT1zLmNvbm5lY3RnYXBzKXt2YXIgcD17bGV2ZWw6LjksY3Jvc3NpbmdzOnt9LHN0YXJ0czpbXSxlZGdlcGF0aHM6W10scGF0aHM6W10seGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHg6bi54LHk6bi55LHo6YihuKSxzbW9vdGhpbmc6MH07ZihbcF0pLGgoW3BdKSxtKFtwXSx7dHlwZToibGV2ZWxzIn0pLGkuZW5zdXJlU2luZ2xlKHUsInBhdGgiLCIiKS5hdHRyKCJkIiwocC5wcmVmaXhCb3VuZGFyeT8iTSIrby5qb2luKCJMIikrIloiOiIiKSt5KHAsbykpfWVsc2UgYz1udWxsO2Euc2V0Q2xpcFVybCh0LGMscil9KHMsZSx0LHYsUCl9KSl9LHIuY3JlYXRlTGluZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbMF0uc21vb3RoaW5nLGk9dC5zZWxlY3RBbGwoImcuY29udG91cmxldmVsIikuZGF0YShlP3I6W10pO2lmKGkuZXhpdCgpLnJlbW92ZSgpLGkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VybGV2ZWwiLCEwKSxlKXt2YXIgbz1pLnNlbGVjdEFsbCgicGF0aC5vcGVubGluZSIpLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBlZGdlcGF0aHN8fHQuZWRnZXBhdGhzfSkpO28uZXhpdCgpLnJlbW92ZSgpLG8uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJvcGVubGluZSIsITApLG8uYXR0cigiZCIsKGZ1bmN0aW9uKHQpe3JldHVybiBhLnNtb290aG9wZW4odCxuKX0pKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIik7dmFyIHM9aS5zZWxlY3RBbGwoInBhdGguY2xvc2VkbGluZSIpLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBwYXRoc3x8dC5wYXRoc30pKTtzLmV4aXQoKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgiY2xvc2VkbGluZSIsITApLHMuYXR0cigiZCIsKGZ1bmN0aW9uKHQpe3JldHVybiBhLnNtb290aGNsb3NlZCh0LG4pfSkpLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMSkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKX1yZXR1cm4gaX0sci5jcmVhdGVMaW5lQ2xpcD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lPyJjbGlwbGluZSIrbjpudWxsLG89ci5fZnVsbExheW91dC5fY2xpcHMuc2VsZWN0QWxsKCIjIitpKS5kYXRhKGU/WzBdOltdKTtyZXR1cm4gby5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJjb250b3VybGluZWNsaXAiLCEwKS5hdHRyKCJpZCIsaSksYS5zZXRDbGlwVXJsKHQsaSxyKSxvfSxyLmxhYmVsRm9ybWF0dGVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxuPWUudHJhY2UsaT1uLmNvbnRvdXJzLGE9e3R5cGU6ImxpbmVhciIsX2lkOiJ5Y29udG91ciIsc2hvd2V4cG9uZW50OiJhbGwiLGV4cG9uZW50Zm9ybWF0OiJCIn07aWYoaS5sYWJlbGZvcm1hdClhLnRpY2tmb3JtYXQ9aS5sYWJlbGZvcm1hdCxjKGEscik7ZWxzZXt2YXIgcz1vLmV4dHJhY3RPcHRzKG4pO2lmKHMmJnMuY29sb3JiYXImJnMuY29sb3JiYXIuX2F4aXMpYT1zLmNvbG9yYmFyLl9heGlzO2Vsc2V7aWYoImNvbnN0cmFpbnQiPT09aS50eXBlKXt2YXIgdT1pLnZhbHVlO0FycmF5LmlzQXJyYXkodSk/YS5yYW5nZT1bdVswXSx1W3UubGVuZ3RoLTFdXTphLnJhbmdlPVt1LHVdfWVsc2UgYS5yYW5nZT1baS5zdGFydCxpLmVuZF0sYS5udGlja3M9KGkuZW5kLWkuc3RhcnQpL2kuc2l6ZTthLnJhbmdlWzBdPT09YS5yYW5nZVsxXSYmKGEucmFuZ2VbMV0rPWEucmFuZ2VbMF18fDEpLGEubnRpY2tzfHwoYS5udGlja3M9MWUzKSxjKGEsciksbC5wcmVwVGlja3MoYSksYS5fdG1pbj1udWxsLGEuX3RtYXg9bnVsbH19cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBsLnRpY2tUZXh0KGEsdCkudGV4dH19LHIuY2FsY1RleHRPcHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUodCk7ci50ZXh0KGkpLmNhbGwocy5jb252ZXJ0VG9Uc3BhbnMsbik7dmFyIG89ci5ub2RlKCksbD1hLmJCb3gobywhMCk7cmV0dXJue3RleHQ6aSx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodCxmb250U2l6ZTorby5zdHlsZVsiZm9udC1zaXplIl0ucmVwbGFjZSgicHgiLCIiKSxsZXZlbDp0LGR5OihsLnRvcCtsLmJvdHRvbSkvMn19LHIuZmluZEJlc3RUZXh0TG9jYXRpb249ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbyxzLGwsYyx1LGY9ci53aWR0aDtlLmlzQ2xvc2VkPyhzPWUubGVuL3YuSU5JVElBTFNFQVJDSFBPSU5UUyxvPWUubWluK3MvMixsPWUubWF4KToocz0oZS5sZW4tZikvKHYuSU5JVElBTFNFQVJDSFBPSU5UUysxKSxvPWUubWluK3MrZi8yLGw9ZS5tYXgtKHMrZikvMik7Zm9yKHZhciBoPTEvMCxwPTA7cDx2LklURVJBVElPTlM7cCsrKXtmb3IodmFyIGQ9bztkPGw7ZCs9cyl7dmFyIG09aS5nZXRUZXh0TG9jYXRpb24odCxlLnRvdGFsLGQsZiksZz14KG0scixuLGEpO2c8aCYmKGg9Zyx1PW0sYz1kKX1pZihoPjIqdi5NQVhDT1NUKWJyZWFrO3AmJihzLz0yKSxsPShvPWMtcy8yKSsxLjUqc31pZihoPD12Lk1BWENPU1QpcmV0dXJuIHV9LHIuYWRkTGFiZWxEYXRhPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUuZm9udFNpemUsYT1lLndpZHRoK2kvMyxvPU1hdGgubWF4KDAsZS5oZWlnaHQtaS8zKSxzPXQueCxsPXQueSxjPXQudGhldGEsdT1NYXRoLnNpbihjKSxmPU1hdGguY29zKGMpLGg9ZnVuY3Rpb24odCxlKXtyZXR1cm5bcyt0KmYtZSp1LGwrdCp1K2UqZl19LHA9W2goLWEvMiwtby8yKSxoKC1hLzIsby8yKSxoKGEvMixvLzIpLGgoYS8yLC1vLzIpXTtyLnB1c2goe3RleHQ6ZS50ZXh0LHg6cyx5OmwsZHk6ZS5keSx0aGV0YTpjLGxldmVsOmUubGV2ZWwsd2lkdGg6YSxoZWlnaHQ6b30pLG4ucHVzaChwKX0sci5kcmF3TGFiZWxzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIGw9dC5zZWxlY3RBbGwoInRleHQiKS5kYXRhKGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHQrIiwiK3QueCsiLCIrdC55KyIsIit0LnRoZXRhfSkpO2lmKGwuZXhpdCgpLnJlbW92ZSgpLGwuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKHsiZGF0YS1ub3RleCI6MSwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC54K01hdGguc2luKHQudGhldGEpKnQuZHksaT10LnktTWF0aC5jb3ModC50aGV0YSkqdC5keTtuLnNlbGVjdCh0aGlzKS50ZXh0KHQudGV4dCkuYXR0cih7eDplLHk6aSx0cmFuc2Zvcm06InJvdGF0ZSgiKzE4MCp0LnRoZXRhL01hdGguUEkrIiAiK2UrIiAiK2krIikifSkuY2FsbChzLmNvbnZlcnRUb1RzcGFucyxyKX0pKSxvKXtmb3IodmFyIGM9IiIsdT0wO3U8by5sZW5ndGg7dSsrKWMrPSJNIitvW3VdLmpvaW4oIkwiKSsiWiI7aS5lbnN1cmVTaW5nbGUoYSwicGF0aCIsIiIpLmF0dHIoImQiLGMpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTEsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCI6ODQ4LCIuLi9oZWF0bWFwL3Bsb3QiOjEwNjksIi4vY2xvc2VfYm91bmRhcmllcyI6MTAwMywiLi9jb25zdGFudHMiOjEwMDUsIi4vY29udmVydF90b19jb25zdHJhaW50cyI6MTAwOSwiLi9lbXB0eV9wYXRoaW5mbyI6MTAxMSwiLi9maW5kX2FsbF9wYXRocyI6MTAxMywiLi9tYWtlX2Nyb3NzaW5ncyI6MTAxOCwiQHBsb3RseS9kMyI6NTh9XSwxMDIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9saWIiKTtmdW5jdGlvbiBhKHQsZSxyKXt2YXIgaT17dHlwZToibGluZWFyIixyYW5nZTpbdCxlXX07cmV0dXJuIG4uYXV0b1RpY2tzKGksKGUtdCkvKHJ8fDE1KSksaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNvbnRvdXJzO2lmKHQuYXV0b2NvbnRvdXIpe3ZhciBvPXQuem1pbixzPXQuem1heDsodC56YXV0b3x8dm9pZCAwPT09bykmJihvPWkuYWdnTnVtcyhNYXRoLm1pbixudWxsLGUpKSwodC56YXV0b3x8dm9pZCAwPT09cykmJihzPWkuYWdnTnVtcyhNYXRoLm1heCxudWxsLGUpKTt2YXIgbD1hKG8scyx0Lm5jb250b3Vycyk7ci5zaXplPWwuZHRpY2ssci5zdGFydD1uLnRpY2tGaXJzdChsKSxsLnJhbmdlLnJldmVyc2UoKSxyLmVuZD1uLnRpY2tGaXJzdChsKSxyLnN0YXJ0PT09byYmKHIuc3RhcnQrPXIuc2l6ZSksci5lbmQ9PT1zJiYoci5lbmQtPXIuc2l6ZSksci5zdGFydD5yLmVuZCYmKHIuc3RhcnQ9ci5lbmQ9KHIuc3RhcnQrci5lbmQpLzIpLHQuX2lucHV0LmNvbnRvdXJzfHwodC5faW5wdXQuY29udG91cnM9e30pLGkuZXh0ZW5kRmxhdCh0Ll9pbnB1dC5jb250b3Vycyx7c3RhcnQ6ci5zdGFydCxlbmQ6ci5lbmQsc2l6ZTpyLnNpemV9KSx0Ll9pbnB1dC5hdXRvY29udG91cj0hMH1lbHNlIGlmKCJjb25zdHJhaW50IiE9PXIudHlwZSl7dmFyIGMsdT1yLnN0YXJ0LGY9ci5lbmQsaD10Ll9pbnB1dC5jb250b3VycztpZih1PmYmJihyLnN0YXJ0PWguc3RhcnQ9ZixmPXIuZW5kPWguZW5kPXUsdT1yLnN0YXJ0KSwhKHIuc2l6ZT4wKSljPXU9PT1mPzE6YSh1LGYsdC5uY29udG91cnMpLmR0aWNrLGguc2l6ZT1yLnNpemU9Y319fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3fV0sMTAyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4uL2hlYXRtYXAvc3R5bGUiKSxvPXQoIi4vbWFrZV9jb2xvcl9tYXAiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLmNvbnRvdXIiKTtlLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKSxlLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dFswXS50cmFjZSxhPXIuY29udG91cnMscz1yLmxpbmUsbD1hLnNpemV8fDEsYz1hLnN0YXJ0LHU9ImNvbnN0cmFpbnQiPT09YS50eXBlLGY9IXUmJiJsaW5lcyI9PT1hLmNvbG9yaW5nLGg9IXUmJiJmaWxsIj09PWEuY29sb3JpbmcscD1mfHxoP28ocik6bnVsbDtlLnNlbGVjdEFsbCgiZy5jb250b3VybGV2ZWwiKS5lYWNoKChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUscy53aWR0aCxmP3AodC5sZXZlbCk6cy5jb2xvcixzLmRhc2gpfSkpO3ZhciBkPWEubGFiZWxmb250O2lmKGUuc2VsZWN0QWxsKCJnLmNvbnRvdXJsYWJlbHMgdGV4dCIpLmVhY2goKGZ1bmN0aW9uKHQpe2kuZm9udChuLnNlbGVjdCh0aGlzKSx7ZmFtaWx5OmQuZmFtaWx5LHNpemU6ZC5zaXplLGNvbG9yOmQuY29sb3J8fChmP3AodC5sZXZlbCk6cy5jb2xvcil9KX0pKSx1KWUuc2VsZWN0QWxsKCJnLmNvbnRvdXJmaWxsIHBhdGgiKS5zdHlsZSgiZmlsbCIsci5maWxsY29sb3IpO2Vsc2UgaWYoaCl7dmFyIG07ZS5zZWxlY3RBbGwoImcuY29udG91cmZpbGwgcGF0aCIpLnN0eWxlKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PW0mJihtPXQubGV2ZWwpLHAodC5sZXZlbCsuNSpsKX0pKSx2b2lkIDA9PT1tJiYobT1jKSxlLnNlbGVjdEFsbCgiZy5jb250b3VyYmcgcGF0aCIpLnN0eWxlKCJmaWxsIixwKG0tLjUqbCkpfX0pKSxhKHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vaGVhdG1hcC9zdHlsZSI6MTA3MCwiLi9tYWtlX2NvbG9yX21hcCI6MTAxNywiQHBsb3RseS9kMyI6NTh9XSwxMDIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGk9dCgiLi9sYWJlbF9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe3ZhciBzLGw9cigiY29udG91cnMuY29sb3JpbmciKSxjPSIiOyJmaWxsIj09PWwmJihzPXIoImNvbnRvdXJzLnNob3dsaW5lcyIpKSwhMSE9PXMmJigibGluZXMiIT09bCYmKGM9cigibGluZS5jb2xvciIsIiMwMDAiKSkscigibGluZS53aWR0aCIsLjUpLHIoImxpbmUuZGFzaCIpKSwibm9uZSIhPT1sJiYoITAhPT10LnNob3dsZWdlbmQmJihlLnNob3dsZWdlbmQ9ITEpLGUuX2RmbHRTaG93TGVnZW5kPSExLG4odCxlLGEscix7cHJlZml4OiIiLGNMZXR0ZXI6InoifSkpLHIoImxpbmUuc21vb3RoaW5nIiksaShyLGEsYyxvKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2NDksIi4vbGFiZWxfZGVmYXVsdHMiOjEwMTZ9XSwxMDIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvYXR0cmlidXRlcyIpLGk9dCgiLi4vY29udG91ci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQscz1pLmNvbnRvdXJzO2UuZXhwb3J0cz1vKHtjYXJwZXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx6Om4ueixhOm4ueCxhMDpuLngwLGRhOm4uZHgsYjpuLnksYjA6bi55MCxkYjpuLmR5LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCx0cmFuc3Bvc2U6bi50cmFuc3Bvc2UsYXR5cGU6bi54dHlwZSxidHlwZTpuLnl0eXBlLGZpbGxjb2xvcjppLmZpbGxjb2xvcixhdXRvY29udG91cjppLmF1dG9jb250b3VyLG5jb250b3VyczppLm5jb250b3Vycyxjb250b3Vyczp7dHlwZTpzLnR5cGUsc3RhcnQ6cy5zdGFydCxlbmQ6cy5lbmQsc2l6ZTpzLnNpemUsY29sb3Jpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZpbGwiLCJsaW5lcyIsIm5vbmUiXSxkZmx0OiJmaWxsIixlZGl0VHlwZToiY2FsYyJ9LHNob3dsaW5lczpzLnNob3dsaW5lcyxzaG93bGFiZWxzOnMuc2hvd2xhYmVscyxsYWJlbGZvbnQ6cy5sYWJlbGZvbnQsbGFiZWxmb3JtYXQ6cy5sYWJlbGZvcm1hdCxvcGVyYXRpb246cy5vcGVyYXRpb24sdmFsdWU6cy52YWx1ZSxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnthdXRvY29udG91cjohMX19LGxpbmU6e2NvbG9yOmkubGluZS5jb2xvcix3aWR0aDppLmxpbmUud2lkdGgsZGFzaDppLmxpbmUuZGFzaCxzbW9vdGhpbmc6aS5saW5lLnNtb290aGluZyxlZGl0VHlwZToicGxvdCJ9LHRyYW5zZm9ybXM6dm9pZCAwfSxhKCIiLHtjTGV0dGVyOiJ6IixhdXRvQ29sb3JEZmx0OiExfSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vY29udG91ci9hdHRyaWJ1dGVzIjoxMDAxLCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjEwNTh9XSwxMDI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6Iiksbz10KCIuLi9oZWF0bWFwL2NsZWFuXzJkX2FycmF5Iikscz10KCIuLi9oZWF0bWFwL2ludGVycDJkIiksbD10KCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyIpLGM9dCgiLi4vaGVhdG1hcC9tYWtlX2JvdW5kX2FycmF5IiksdT10KCIuL2RlZmF1bHRzIiksZj10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIiksaD10KCIuLi9jb250b3VyL3NldF9jb250b3VycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2NhcnBldFRyYWNlPWYodCxlKTtpZihyJiZyLnZpc2libGUmJiJsZWdlbmRvbmx5IiE9PXIudmlzaWJsZSl7aWYoIWUuYXx8IWUuYil7dmFyIHA9dC5kYXRhW3IuaW5kZXhdLGQ9dC5kYXRhW2UuaW5kZXhdO2QuYXx8KGQuYT1wLmEpLGQuYnx8KGQuYj1wLmIpLHUoZCxlLGUuX2RlZmF1bHRDb2xvcix0Ll9mdWxsTGF5b3V0KX12YXIgbT1mdW5jdGlvbih0LGUpe3ZhciByLHUsZixoLHAsZCxtLGc9ZS5fY2FycGV0VHJhY2Usdj1nLmFheGlzLHk9Zy5iYXhpczt2Ll9taW5EdGljaz0wLHkuX21pbkR0aWNrPTAsaS5pc0FycmF5MUQoZS56KSYmYShlLHYseSwiYSIsImIiLFsieiJdKTtyPWUuX2E9ZS5fYXx8ZS5hLGg9ZS5fYj1lLl9ifHxlLmIscj1yP3YubWFrZUNhbGNkYXRhKGUsIl9hIik6W10saD1oP3kubWFrZUNhbGNkYXRhKGUsIl9iIik6W10sdT1lLmEwfHwwLGY9ZS5kYXx8MSxwPWUuYjB8fDAsZD1lLmRifHwxLG09ZS5fej1vKGUuX3p8fGUueixlLnRyYW5zcG9zZSksZS5fZW1wdHlwb2ludHM9bChtKSxzKG0sZS5fZW1wdHlwb2ludHMpO3ZhciB4PWkubWF4Um93TGVuZ3RoKG0pLGI9InNjYWxlZCI9PT1lLnh0eXBlPyIiOnIsXz1jKGUsYix1LGYseCx2KSx3PSJzY2FsZWQiPT09ZS55dHlwZT8iIjpoLFQ9YyhlLHcscCxkLG0ubGVuZ3RoLHkpLGs9e2E6XyxiOlQsejptfTsibGV2ZWxzIj09PWUuY29udG91cnMudHlwZSYmIm5vbmUiIT09ZS5jb250b3Vycy5jb2xvcmluZyYmbih0LGUse3ZhbHM6bSxjb250YWluZXJTdHI6IiIsY0xldHRlcjoieiJ9KTtyZXR1cm5ba119KHQsZSk7cmV0dXJuIGgoZSxlLl96KSxtfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjY0NywiLi4vLi4vbGliIjo3NzYsIi4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiOjk3NCwiLi4vY29udG91ci9zZXRfY29udG91cnMiOjEwMjAsIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiOjEwNjAsIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6IjoxMDYyLCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyI6MTA2NCwiLi4vaGVhdG1hcC9pbnRlcnAyZCI6MTA2NywiLi4vaGVhdG1hcC9tYWtlX2JvdW5kX2FycmF5IjoxMDY4LCIuL2RlZmF1bHRzIjoxMDI1fV0sMTAyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL2NvbnRvdXIvY29uc3RyYWludF9kZWZhdWx0cyIpLHM9dCgiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyIpLGw9dCgiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjKXtmdW5jdGlvbiB1KHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9aWYodSgiY2FycGV0IiksdC5hJiZ0LmIpe2lmKCFpKHQsZSx1LGMsImEiLCJiIikpcmV0dXJuIHZvaWQoZS52aXNpYmxlPSExKTt1KCJ0ZXh0IiksImNvbnN0cmFpbnQiPT09dSgiY29udG91cnMudHlwZSIpP28odCxlLHUsYyxyLHtoYXNIb3ZlcjohMX0pOihzKHQsZSx1LChmdW5jdGlvbihyKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxhLHIpfSkpLGwodCxlLHUsYyx7aGFzSG92ZXI6ITF9KSl9ZWxzZSBlLl9kZWZhdWx0Q29sb3I9cixlLl9sZW5ndGg9bnVsbH19LHsiLi4vLi4vbGliIjo3NzYsIi4uL2NvbnRvdXIvY29uc3RyYWludF9kZWZhdWx0cyI6MTAwNiwiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyI6MTAwOCwiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyI6MTAyMiwiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiOjEwNzIsIi4vYXR0cmlidXRlcyI6MTAyM31dLDEwMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9jb250b3VyL2NvbG9yYmFyIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4uL2NvbnRvdXIvc3R5bGUiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY29udG91cmNhcnBldCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsImNhcnBldCIsImNvbnRvdXIiLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsImhhc0xpbmVzIiwiY2FycGV0RGVwZW5kZW50Iiwibm9Ib3ZlciIsIm5vU29ydGluZ0J5VmFsdWUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vY29udG91ci9jb2xvcmJhciI6MTAwNCwiLi4vY29udG91ci9zdHlsZSI6MTAyMSwiLi9hdHRyaWJ1dGVzIjoxMDIzLCIuL2NhbGMiOjEwMjQsIi4vZGVmYXVsdHMiOjEwMjUsIi4vcGxvdCI6MTAyN31dLDEwMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vY2FycGV0L21hcF8xZF9hcnJheSIpLGE9dCgiLi4vY2FycGV0L21ha2VwYXRoIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vY29udG91ci9tYWtlX2Nyb3NzaW5ncyIpLGM9dCgiLi4vY29udG91ci9maW5kX2FsbF9wYXRocyIpLHU9dCgiLi4vY29udG91ci9wbG90IiksZj10KCIuLi9jb250b3VyL2NvbnN0YW50cyIpLGg9dCgiLi4vY29udG91ci9jb252ZXJ0X3RvX2NvbnN0cmFpbnRzIikscD10KCIuLi9jb250b3VyL2VtcHR5X3BhdGhpbmZvIiksZD10KCIuLi9jb250b3VyL2Nsb3NlX2JvdW5kYXJpZXMiKSxtPXQoIi4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiKSxnPXQoIi4uL2NhcnBldC9heGlzX2FsaWduZWRfbGluZSIpO2Z1bmN0aW9uIHYodCxlLHIpe3ZhciBuPXQuZ2V0UG9pbnRBdExlbmd0aChlKSxpPXQuZ2V0UG9pbnRBdExlbmd0aChyKSxhPWkueC1uLngsbz1pLnktbi55LHM9TWF0aC5zcXJ0KGEqYStvKm8pO3JldHVyblthL3Msby9zXX1mdW5jdGlvbiB5KHQpe3ZhciBlPU1hdGguc3FydCh0WzBdKnRbMF0rdFsxXSp0WzFdKTtyZXR1cm5bdFswXS9lLHRbMV0vZV19ZnVuY3Rpb24geCh0LGUpe3ZhciByPU1hdGguYWJzKHRbMF0qZVswXSt0WzFdKmVbMV0pO3JldHVybiBNYXRoLnNxcnQoMS1yKnIpL3J9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGIpe3ZhciBfPWUueGF4aXMsdz1lLnlheGlzO3MubWFrZVRyYWNlR3JvdXBzKGIsciwiY29udG91ciIpLmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBiPW4uc2VsZWN0KHRoaXMpLFQ9clswXSxrPVQudHJhY2UsQT1rLl9jYXJwZXRUcmFjZT1tKHQsayksTT10LmNhbGNkYXRhW0EuaW5kZXhdWzBdO2lmKEEudmlzaWJsZSYmImxlZ2VuZG9ubHkiIT09QS52aXNpYmxlKXt2YXIgUz1ULmEsRT1ULmIsTD1rLmNvbnRvdXJzLEM9cChMLGUsVCksUD0iY29uc3RyYWludCI9PT1MLnR5cGUsST1MLl9vcGVyYXRpb24sTz1QPyI9Ij09PUk/ImxpbmVzIjoiZmlsbCI6TC5jb2xvcmluZyx6PVtbU1swXSxFW0UubGVuZ3RoLTFdXSxbU1tTLmxlbmd0aC0xXSxFW0UubGVuZ3RoLTFdXSxbU1tTLmxlbmd0aC0xXSxFWzBdXSxbU1swXSxFWzBdXV07bChDKTt2YXIgRD0xZS04KihTW1MubGVuZ3RoLTFdLVNbMF0pLFI9MWUtOCooRVtFLmxlbmd0aC0xXS1FWzBdKTtjKEMsRCxSKTt2YXIgRixCLE4saixVPUM7ImNvbnN0cmFpbnQiPT09TC50eXBlJiYoVT1oKEMsSSkpLGZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzLGwsYyx1O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe2ZvcihhPXRbcl0sbz1hLnBlZGdlcGF0aHM9W10scz1hLnBwYXRocz1bXSxuPTA7bjxhLmVkZ2VwYXRocy5sZW5ndGg7bisrKXtmb3IodT1hLmVkZ2VwYXRoc1tuXSxsPVtdLGk9MDtpPHUubGVuZ3RoO2krKylsW2ldPWUodVtpXSk7by5wdXNoKGwpfWZvcihuPTA7bjxhLnBhdGhzLmxlbmd0aDtuKyspe2Zvcih1PWEucGF0aHNbbl0sYz1bXSxpPTA7aTx1Lmxlbmd0aDtpKyspY1tpXT1lKHVbaV0pO3MucHVzaChjKX19fShDLHEpO3ZhciBWPVtdO2ZvcihqPU0uY2xpcHNlZ21lbnRzLmxlbmd0aC0xO2o+PTA7ai0tKUY9TS5jbGlwc2VnbWVudHNbal0sQj1pKFtdLEYueCxfLmMycCksTj1pKFtdLEYueSx3LmMycCksQi5yZXZlcnNlKCksTi5yZXZlcnNlKCksVi5wdXNoKGEoQixOLEYuYmljdWJpYykpO3ZhciBIPSJNIitWLmpvaW4oIkwiKSsiWiI7IWZ1bmN0aW9uKHQsZSxyLG4sbyxsKXt2YXIgYyx1LGYsaCxwPXMuZW5zdXJlU2luZ2xlKHQsImciLCJjb250b3VyYmciKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKCJmaWxsIiE9PWx8fG8/W106WzBdKTtwLmVudGVyKCkuYXBwZW5kKCJwYXRoIikscC5leGl0KCkucmVtb3ZlKCk7dmFyIGQ9W107Zm9yKGg9MDtoPGUubGVuZ3RoO2grKyljPWVbaF0sdT1pKFtdLGMueCxyLmMycCksZj1pKFtdLGMueSxuLmMycCksZC5wdXNoKGEodSxmLGMuYmljdWJpYykpO3AuYXR0cigiZCIsIk0iK2Quam9pbigiTCIpKyJaIikuc3R5bGUoInN0cm9rZSIsIm5vbmUiKX0oYixNLmNsaXBzZWdtZW50cyxfLHcsUCxPKSxmdW5jdGlvbih0LGUscixpLGEsbCxjLHUsZixoLHApe3ZhciBtPSJmaWxsIj09PWg7bSYmZChhLHQuY29udG91cnMpO3ZhciB2PXMuZW5zdXJlU2luZ2xlKGUsImciLCJjb250b3VyZmlsbCIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEobT9hOltdKTt2LmVudGVyKCkuYXBwZW5kKCJwYXRoIiksdi5leGl0KCkucmVtb3ZlKCksdi5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT0odC5wcmVmaXhCb3VuZGFyeT9wOiIiKStmdW5jdGlvbih0LGUscixuLGksYSxsLGMpe3ZhciB1LGYsaCxwLGQsbSx2LHk9IiIseD1lLmVkZ2VwYXRocy5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSksYj0hMCxfPTFlLTQqTWF0aC5hYnMoclswXVswXS1yWzJdWzBdKSx3PTFlLTQqTWF0aC5hYnMoclswXVsxXS1yWzJdWzFdKTtmdW5jdGlvbiBUKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLXJbMF1bMV0pPHd9ZnVuY3Rpb24gayh0KXtyZXR1cm4gTWF0aC5hYnModFsxXS1yWzJdWzFdKTx3fWZ1bmN0aW9uIEEodCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tclswXVswXSk8X31mdW5jdGlvbiBNKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLXJbMl1bMF0pPF99ZnVuY3Rpb24gUyh0LGUpe3ZhciByLG4sbyxzLHU9IiI7Zm9yKFQodCkmJiFNKHQpfHxrKHQpJiYhQSh0KT8ocz1pLmFheGlzLG89ZyhpLGEsW3RbMF0sZVswXV0sLjUqKHRbMV0rZVsxXSkpKToocz1pLmJheGlzLG89ZyhpLGEsLjUqKHRbMF0rZVswXSksW3RbMV0sZVsxXV0pKSxyPTE7cjxvLmxlbmd0aDtyKyspZm9yKHUrPXMuc21vb3RoaW5nPyJDIjoiTCIsbj0wO248b1tyXS5sZW5ndGg7bisrKXt2YXIgZj1vW3JdW25dO3UrPVtsLmMycChmWzBdKSxjLmMycChmWzFdKV0rIiAifXJldHVybiB1fXU9MCxmPW51bGw7Zm9yKDt4Lmxlbmd0aDspe3ZhciBFPWUuZWRnZXBhdGhzW3VdWzBdO2ZvcihmJiYoeSs9UyhmLEUpKSx2PW8uc21vb3Rob3BlbihlLmVkZ2VwYXRoc1t1XS5tYXAobiksZS5zbW9vdGhpbmcpLHkrPWI/djp2LnJlcGxhY2UoL15NLywiTCIpLHguc3BsaWNlKHguaW5kZXhPZih1KSwxKSxmPWUuZWRnZXBhdGhzW3VdW2UuZWRnZXBhdGhzW3VdLmxlbmd0aC0xXSxkPS0xLHA9MDtwPDQ7cCsrKXtpZighZil7cy5sb2coIk1pc3NpbmcgZW5kPyIsdSxlKTticmVha31mb3IoVChmKSYmIU0oZik/aD1yWzFdOkEoZik/aD1yWzBdOmsoZik/aD1yWzNdOk0oZikmJihoPXJbMl0pLG09MDttPGUuZWRnZXBhdGhzLmxlbmd0aDttKyspe3ZhciBMPWUuZWRnZXBhdGhzW21dWzBdO01hdGguYWJzKGZbMF0taFswXSk8Xz9NYXRoLmFicyhmWzBdLUxbMF0pPF8mJihMWzFdLWZbMV0pKihoWzFdLUxbMV0pPj0wJiYoaD1MLGQ9bSk6TWF0aC5hYnMoZlsxXS1oWzFdKTx3P01hdGguYWJzKGZbMV0tTFsxXSk8dyYmKExbMF0tZlswXSkqKGhbMF0tTFswXSk+PTAmJihoPUwsZD1tKTpzLmxvZygiZW5kcHQgdG8gbmV3ZW5kcHQgaXMgbm90IHZlcnQuIG9yIGhvcnouIixmLGgsTCl9aWYoZD49MClicmVhazt5Kz1TKGYsaCksZj1ofWlmKGQ9PT1lLmVkZ2VwYXRocy5sZW5ndGgpe3MubG9nKCJ1bmNsb3NlZCBwZXJpbWV0ZXIgcGF0aCIpO2JyZWFrfXU9ZCwoYj0tMT09PXguaW5kZXhPZih1KSkmJih1PXhbMF0seSs9UyhmLGgpKyJaIixmPW51bGwpfWZvcih1PTA7dTxlLnBhdGhzLmxlbmd0aDt1KyspeSs9by5zbW9vdGhjbG9zZWQoZS5wYXRoc1t1XS5tYXAobiksZS5zbW9vdGhpbmcpO3JldHVybiB5fSgwLHQsbCxjLHUsZixyLGkpO2U/bi5zZWxlY3QodGhpcykuYXR0cigiZCIsZSkuc3R5bGUoInN0cm9rZSIsIm5vbmUiKTpuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pKX0oayxiLF8sdyxVLHoscSxBLE0sTyxIKSxmdW5jdGlvbih0LGUscixpLGEsbCxjKXt2YXIgaD1zLmVuc3VyZVNpbmdsZSh0LCJnIiwiY29udG91cmxpbmVzIikscD0hMSE9PWEuc2hvd2xpbmVzLGQ9YS5zaG93bGFiZWxzLG09cCYmZCxnPXUuY3JlYXRlTGluZXMoaCxwfHxkLGUpLGI9dS5jcmVhdGVMaW5lQ2xpcChoLG0scixpLnRyYWNlLnVpZCksXz10LnNlbGVjdEFsbCgiZy5jb250b3VybGFiZWxzIikuZGF0YShkP1swXTpbXSk7aWYoXy5leGl0KCkucmVtb3ZlKCksXy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNvbnRvdXJsYWJlbHMiLCEwKSxkKXt2YXIgdz1sLnhheGlzLFQ9bC55YXhpcyxrPXcuX2xlbmd0aCxBPVQuX2xlbmd0aCxNPVtbWzAsMF0sW2ssMF0sW2ssQV0sWzAsQV1dXSxTPVtdO3MuY2xlYXJMb2NhdGlvbkNhY2hlKCk7dmFyIEU9dS5sYWJlbEZvcm1hdHRlcihyLGkpLEw9by50ZXN0ZXIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbChvLmZvbnQsYS5sYWJlbGZvbnQpLEM9e2xlZnQ6MCxyaWdodDprLGNlbnRlcjprLzIsdG9wOjAsYm90dG9tOkEsbWlkZGxlOkEvMn0sUD1NYXRoLnNxcnQoayprK0EqQSksST1mLkxBQkVMRElTVEFOQ0UqUC9NYXRoLm1heCgxLGUubGVuZ3RoL2YuTEFCRUxJTkNSRUFTRSk7Zy5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT11LmNhbGNUZXh0T3B0cyh0LmxldmVsLEUsTCxyKTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5lYWNoKChmdW5jdGlvbihyKXt2YXIgbj1zLmdldFZpc2libGVTZWdtZW50KHRoaXMsQyxlLmhlaWdodC8yKTtpZihuJiYoZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbyxzPTA7czxyLnBlZGdlcGF0aHMubGVuZ3RoO3MrKyllPT09ci5wZWRnZXBhdGhzW3NdJiYobz1yLmVkZ2VwYXRoc1tzXSk7aWYoIW8pcmV0dXJuO3ZhciBsPWkuYVswXSxjPWkuYVtpLmEubGVuZ3RoLTFdLHU9aS5iWzBdLGY9aS5iW2kuYi5sZW5ndGgtMV07ZnVuY3Rpb24gaCh0LGUpe3ZhciByLG49MDtyZXR1cm4oTWF0aC5hYnModFswXS1sKTwuMXx8TWF0aC5hYnModFswXS1jKTwuMSkmJihyPXkoaS5keHlkYl9yb3VnaCh0WzBdLHRbMV0sLjEpKSxuPU1hdGgubWF4KG4sYSp4KGUscikvMikpLChNYXRoLmFicyh0WzFdLXUpPC4xfHxNYXRoLmFicyh0WzFdLWYpPC4xKSYmKHI9eShpLmR4eWRhX3JvdWdoKHRbMF0sdFsxXSwuMSkpLG49TWF0aC5tYXgobixhKngoZSxyKS8yKSksbn12YXIgcD12KHQsMCwxKSxkPXYodCxuLnRvdGFsLG4udG90YWwtMSksbT1oKG9bMF0scCksZz1uLnRvdGFsLWgob1tvLmxlbmd0aC0xXSxkKTtuLm1pbjxtJiYobi5taW49bSk7bi5tYXg+ZyYmKG4ubWF4PWcpO24ubGVuPW4ubWF4LW4ubWlufSh0aGlzLHIsdCxuLGMsZS5oZWlnaHQpLCEobi5sZW48KGUud2lkdGgrZS5oZWlnaHQpKmYuTEFCRUxNSU4pKSlmb3IodmFyIGk9TWF0aC5taW4oTWF0aC5jZWlsKG4ubGVuL0kpLGYuTEFCRUxNQVgpLGE9MDthPGk7YSsrKXt2YXIgbz11LmZpbmRCZXN0VGV4dExvY2F0aW9uKHRoaXMsbixlLFMsQyk7aWYoIW8pYnJlYWs7dS5hZGRMYWJlbERhdGEobyxlLFMsTSl9fSkpfSkpLEwucmVtb3ZlKCksdS5kcmF3TGFiZWxzKF8sUyxyLGIsbT9NOm51bGwpfWQmJiFwJiZnLnJlbW92ZSgpfShiLEMsdCxULEwsZSxBKSxvLnNldENsaXBVcmwoYixBLl9jbGlwUGF0aElkLHQpfWZ1bmN0aW9uIHEodCl7dmFyIGU9QS5hYjJ4eSh0WzBdLHRbMV0sITApO3JldHVybltfLmMycChlWzBdKSx3LmMycChlWzFdKV19fSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vbGliIjo3NzYsIi4uL2NhcnBldC9heGlzX2FsaWduZWRfbGluZSI6OTU4LCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIjo5NzQsIi4uL2NhcnBldC9tYWtlcGF0aCI6OTc1LCIuLi9jYXJwZXQvbWFwXzFkX2FycmF5Ijo5NzYsIi4uL2NvbnRvdXIvY2xvc2VfYm91bmRhcmllcyI6MTAwMywiLi4vY29udG91ci9jb25zdGFudHMiOjEwMDUsIi4uL2NvbnRvdXIvY29udmVydF90b19jb25zdHJhaW50cyI6MTAwOSwiLi4vY29udG91ci9lbXB0eV9wYXRoaW5mbyI6MTAxMSwiLi4vY29udG91ci9maW5kX2FsbF9wYXRocyI6MTAxMywiLi4vY29udG91ci9tYWtlX2Nyb3NzaW5ncyI6MTAxOCwiLi4vY29udG91ci9wbG90IjoxMDE5LCJAcGxvdGx5L2QzIjo1OH1dLDEwMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsYT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbz10KCIuLi9zY2F0dGVybWFwYm94L2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1zKHtsb246by5sb24sbGF0Om8ubGF0LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0scmFkaXVzOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90IixhcnJheU9rOiEwLG1pbjoxLGRmbHQ6MzB9LGJlbG93Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJwbG90In0sdGV4dDpvLnRleHQsaG92ZXJ0ZXh0Om8uaG92ZXJ0ZXh0LGhvdmVyaW5mbzpzKHt9LGEuaG92ZXJpbmZvLHtmbGFnczpbImxvbiIsImxhdCIsInoiLCJ0ZXh0IiwibmFtZSJdfSksaG92ZXJ0ZW1wbGF0ZTppKCksc2hvd2xlZ2VuZDpzKHt9LGEuc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfSxuKCIiLHtjTGV0dGVyOiJ6IixlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODk5LCIuLi9zY2F0dGVybWFwYm94L2F0dHJpYnV0ZXMiOjEyNTZ9XSwxMDI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIikscz10KCIuLi8uLi9saWIiKS5fO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLl9sZW5ndGgsbD1uZXcgQXJyYXkociksYz1lLnosdT1pKGMpJiZjLmxlbmd0aCxmPTA7ZjxyO2YrKyl7dmFyIGg9bFtmXT17fSxwPWUubG9uW2ZdLGQ9ZS5sYXRbZl07aWYoaC5sb25sYXQ9bihwKSYmbihkKT9bK3AsK2RdOlthLGFdLHUpe3ZhciBtPWNbZl07aC56PW4obSk/bTphfX1yZXR1cm4gbyh0LGUse3ZhbHM6dT9jOlswLDFdLGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJ6In0pLHImJihsWzBdLnQ9e2xhYmVsczp7bGF0OnModCwibGF0OiIpKyIgIixsb246cyh0LCJsb246IikrIiAifX0pLGx9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2NDcsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzYsImZhc3QtaXNudW1lcmljIjoyNDJ9XSwxMDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxsPXQoIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIikubWFrZUJsYW5rO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ITA9PT1lLnZpc2libGUmJjAhPT1lLl9sZW5ndGgsYz1lLl9vcHRzPXtoZWF0bWFwOntsYXlvdXQ6e3Zpc2liaWxpdHk6Im5vbmUifSxwYWludDp7fX0sZ2VvanNvbjpsKCl9O2lmKCFyKXJldHVybiBjO3ZhciB1LGY9W10saD1lLnoscD1lLnJhZGl1cyxkPWkuaXNBcnJheU9yVHlwZWRBcnJheShoKSYmaC5sZW5ndGgsbT1pLmlzQXJyYXlPclR5cGVkQXJyYXkocCk7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKyl7dmFyIGc9dFt1XSx2PWcubG9ubGF0O2lmKHZbMF0hPT1zKXt2YXIgeT17fTtpZihkKXt2YXIgeD1nLno7eS56PXghPT1zP3g6MH1tJiYoeS5yPW4ocFt1XSkmJnBbdV0+MD8rcFt1XTowKSxmLnB1c2goe3R5cGU6IkZlYXR1cmUiLGdlb21ldHJ5Ont0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6dn0scHJvcGVydGllczp5fSl9fXZhciBiPW8uZXh0cmFjdE9wdHMoZSksXz1iLnJldmVyc2VzY2FsZT9vLmZsaXBTY2FsZShiLmNvbG9yc2NhbGUpOmIuY29sb3JzY2FsZSx3PV9bMF1bMV0sVD1bImludGVycG9sYXRlIixbImxpbmVhciJdLFsiaGVhdG1hcC1kZW5zaXR5Il0sMCxhLm9wYWNpdHkodyk8MT93OmEuYWRkT3BhY2l0eSh3LDApXTtmb3IodT0xO3U8Xy5sZW5ndGg7dSsrKVQucHVzaChfW3VdWzBdLF9bdV1bMV0pO3ZhciBrPVsiaW50ZXJwb2xhdGUiLFsibGluZWFyIl0sWyJnZXQiLCJ6Il0sYi5taW4sMCxiLm1heCwxXTtyZXR1cm4gaS5leHRlbmRGbGF0KGMuaGVhdG1hcC5wYWludCx7ImhlYXRtYXAtd2VpZ2h0IjpkP2s6MS8oYi5tYXgtYi5taW4pLCJoZWF0bWFwLWNvbG9yIjpULCJoZWF0bWFwLXJhZGl1cyI6bT97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJyIn06ZS5yYWRpdXMsImhlYXRtYXAtb3BhY2l0eSI6ZS5vcGFjaXR5fSksYy5nZW9qc29uPXt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6Zn0sYy5oZWF0bWFwLmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIixjfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjUxLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyI6NzcwLCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sMTAzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGE9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgbD1zKCJsb24iKXx8W10sYz1zKCJsYXQiKXx8W10sdT1NYXRoLm1pbihsLmxlbmd0aCxjLmxlbmd0aCk7dT8oZS5fbGVuZ3RoPXUscygieiIpLHMoInJhZGl1cyIpLHMoImJlbG93IikscygidGV4dCIpLHMoImhvdmVydGV4dCIpLHMoImhvdmVydGVtcGxhdGUiKSxpKHQsZSxvLHMse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjQ5LCIuLi8uLi9saWIiOjc3NiwiLi9hdHRyaWJ1dGVzIjoxMDI4fV0sMTAzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sb249ZS5sb24sdC5sYXQ9ZS5sYXQsdC56PWUueix0fX0se31dLDEwMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uL3NjYXR0ZXJtYXBib3gvaG92ZXIiKS5ob3ZlclBvaW50cyxhPXQoIi4uL3NjYXR0ZXJtYXBib3gvaG92ZXIiKS5nZXRFeHRyYVRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbz1pKHQsZSxyKTtpZihvKXt2YXIgcz1vWzBdLGw9cy5jZCxjPWxbMF0udHJhY2UsdT1sW3MuaW5kZXhdO2lmKGRlbGV0ZSBzLmNvbG9yLCJ6ImluIHUpe3ZhciBmPXMuc3VicGxvdC5tb2NrQXhpcztzLno9dS56LHMuekxhYmVsPW4udGlja1RleHQoZixmLmMybCh1LnopLCJob3ZlciIpLnRleHR9cmV0dXJuIHMuZXh0cmFUZXh0PWEoYyx1LGxbMF0udC5sYWJlbHMpLFtzXX19fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uL3NjYXR0ZXJtYXBib3gvaG92ZXIiOjEyNjF9XSwxMDM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLGZvcm1hdExhYmVsczp0KCIuLi9zY2F0dGVybWFwYm94L2Zvcm1hdF9sYWJlbHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLGV2ZW50RGF0YTp0KCIuL2V2ZW50X2RhdGEiKSxnZXRCZWxvdzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmdldE1hcExheWVycygpLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxhPWkuaWQ7aWYoInN5bWJvbCI9PT1pLnR5cGUmJiJzdHJpbmciPT10eXBlb2YgYSYmLTE9PT1hLmluZGV4T2YoInBsb3RseS0iKSlyZXR1cm4gYX19LG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJkZW5zaXR5bWFwYm94IixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9tYXBib3giKSxjYXRlZ29yaWVzOlsibWFwYm94IiwiZ2wiLCJzaG93TGVnZW5kIl0sbWV0YTp7aHJfbmFtZToiZGVuc2l0eV9tYXBib3gifX19LHsiLi4vLi4vcGxvdHMvbWFwYm94Ijo4ODQsIi4uL2hlYXRtYXAvY29sb3JiYXIiOjEwNjEsIi4uL3NjYXR0ZXJtYXBib3gvZm9ybWF0X2xhYmVscyI6MTI2MCwiLi9hdHRyaWJ1dGVzIjoxMDI4LCIuL2NhbGMiOjEwMjksIi4vZGVmYXVsdHMiOjEwMzEsIi4vZXZlbnRfZGF0YSI6MTAzMiwiLi9ob3ZlciI6MTAzMywiLi9wbG90IjoxMDM1fV0sMTAzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnZlcnQiKSxpPXQoIi4uLy4uL3Bsb3RzL21hcGJveC9jb25zdGFudHMiKS50cmFjZUxheWVyUHJlZml4O2Z1bmN0aW9uIGEodCxlKXt0aGlzLnR5cGU9ImRlbnNpdHltYXBib3giLHRoaXMuc3VicGxvdD10LHRoaXMudWlkPWUsdGhpcy5zb3VyY2VJZD0ic291cmNlLSIrZSx0aGlzLmxheWVyTGlzdD1bWyJoZWF0bWFwIixpK2UrIi1oZWF0bWFwIl1dLHRoaXMuYmVsb3c9bnVsbH12YXIgbz1hLnByb3RvdHlwZTtvLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnN1YnBsb3Qscj10aGlzLmxheWVyTGlzdCxpPW4odCksYT1lLmJlbG93TG9va3VwWyJ0cmFjZS0iK3RoaXMudWlkXTtlLm1hcC5nZXRTb3VyY2UodGhpcy5zb3VyY2VJZCkuc2V0RGF0YShpLmdlb2pzb24pLGEhPT10aGlzLmJlbG93JiYodGhpcy5fcmVtb3ZlTGF5ZXJzKCksdGhpcy5fYWRkTGF5ZXJzKGksYSksdGhpcy5iZWxvdz1hKTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIHM9cltvXSxsPXNbMF0sYz1zWzFdLHU9aVtsXTtlLnNldE9wdGlvbnMoYywic2V0TGF5b3V0UHJvcGVydHkiLHUubGF5b3V0KSwidmlzaWJsZSI9PT11LmxheW91dC52aXNpYmlsaXR5JiZlLnNldE9wdGlvbnMoYywic2V0UGFpbnRQcm9wZXJ0eSIsdS5wYWludCl9fSxvLl9hZGRMYXllcnM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5zdWJwbG90LG49dGhpcy5sYXllckxpc3QsaT10aGlzLnNvdXJjZUlkLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPW9bMF0sbD10W3NdO3IuYWRkTGF5ZXIoe3R5cGU6cyxpZDpvWzFdLHNvdXJjZTppLGxheW91dDpsLmxheW91dCxwYWludDpsLnBhaW50fSxlKX19LG8uX3JlbW92ZUxheWVycz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN1YnBsb3QubWFwLGU9dGhpcy5sYXllckxpc3Qscj1lLmxlbmd0aC0xO3I+PTA7ci0tKXQucmVtb3ZlTGF5ZXIoZVtyXVsxXSl9LG8uZGlzcG9zZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc3VicGxvdC5tYXA7dGhpcy5fcmVtb3ZlTGF5ZXJzKCksdC5yZW1vdmVTb3VyY2UodGhpcy5zb3VyY2VJZCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0udHJhY2UsaT1uZXcgYSh0LHIudWlkKSxvPWkuc291cmNlSWQscz1uKGUpLGw9aS5iZWxvdz10LmJlbG93TG9va3VwWyJ0cmFjZS0iK3IudWlkXTtyZXR1cm4gdC5tYXAuYWRkU291cmNlKG8se3R5cGU6Imdlb2pzb24iLGRhdGE6cy5nZW9qc29ufSksaS5fYWRkTGF5ZXJzKHMsbCksaX19LHsiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnN0YW50cyI6ODgyLCIuL2NvbnZlcnQiOjEwMzB9XSwxMDM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRbcl0uaT1yO24ubWVyZ2VBcnJheShlLnRleHQsdCwidHgiKSxuLm1lcmdlQXJyYXkoZS5ob3ZlcnRleHQsdCwiaHR4Iik7dmFyIGk9ZS5tYXJrZXI7aWYoaSl7bi5tZXJnZUFycmF5KGkub3BhY2l0eSx0LCJtbyIpLG4ubWVyZ2VBcnJheShpLmNvbG9yLHQsIm1jIik7dmFyIGE9aS5saW5lO2EmJihuLm1lcmdlQXJyYXkoYS5jb2xvcix0LCJtbGMiKSxuLm1lcmdlQXJyYXlDYXN0UG9zaXRpdmUoYS53aWR0aCx0LCJtbHciKSl9fX0seyIuLi8uLi9saWIiOjc3Nn1dLDEwMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCIuLi9iYXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIikubGluZSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LGw9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxjPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyx1PXQoIi4vY29uc3RhbnRzIiksZj10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxoPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKTtlLmV4cG9ydHM9e3g6aS54LHgwOmkueDAsZHg6aS5keCx5OmkueSx5MDppLnkwLGR5OmkuZHkseHBlcmlvZDppLnhwZXJpb2QseXBlcmlvZDppLnlwZXJpb2QseHBlcmlvZDA6aS54cGVyaW9kMCx5cGVyaW9kMDppLnlwZXJpb2QwLHhwZXJpb2RhbGlnbm1lbnQ6aS54cGVyaW9kYWxpZ25tZW50LHlwZXJpb2RhbGlnbm1lbnQ6aS55cGVyaW9kYWxpZ25tZW50LHhob3ZlcmZvcm1hdDpzKCJ4IikseWhvdmVyZm9ybWF0OnMoInkiKSxob3ZlcnRleHQ6aS5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpsKHt9LHtrZXlzOnUuZXZlbnREYXRhS2V5c30pLGhvdmVyaW5mbzpmKHt9LG8uaG92ZXJpbmZvLHtmbGFnczpbIm5hbWUiLCJ4IiwieSIsInRleHQiLCJwZXJjZW50IGluaXRpYWwiLCJwZXJjZW50IHByZXZpb3VzIiwicGVyY2VudCB0b3RhbCJdfSksdGV4dGluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxhYmVsIiwidGV4dCIsInBlcmNlbnQgaW5pdGlhbCIsInBlcmNlbnQgcHJldmlvdXMiLCJwZXJjZW50IHRvdGFsIiwidmFsdWUiXSxleHRyYXM6WyJub25lIl0sZWRpdFR5cGU6InBsb3QiLGFycmF5T2s6ITF9LHRleHR0ZW1wbGF0ZTpjKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOnUuZXZlbnREYXRhS2V5cy5jb25jYXQoWyJsYWJlbCIsInZhbHVlIl0pfSksdGV4dDppLnRleHQsdGV4dHBvc2l0aW9uOmkudGV4dHBvc2l0aW9uLGluc2lkZXRleHRhbmNob3I6Zih7fSxpLmluc2lkZXRleHRhbmNob3Ise2RmbHQ6Im1pZGRsZSJ9KSx0ZXh0YW5nbGU6Zih7fSxpLnRleHRhbmdsZSx7ZGZsdDowfSksdGV4dGZvbnQ6aS50ZXh0Zm9udCxpbnNpZGV0ZXh0Zm9udDppLmluc2lkZXRleHRmb250LG91dHNpZGV0ZXh0Zm9udDppLm91dHNpZGV0ZXh0Zm9udCxjb25zdHJhaW50ZXh0OmkuY29uc3RyYWludGV4dCxjbGlwb25heGlzOmkuY2xpcG9uYXhpcyxvcmllbnRhdGlvbjpmKHt9LGkub3JpZW50YXRpb24se30pLG9mZnNldDpmKHt9LGkub2Zmc2V0LHthcnJheU9rOiExfSksd2lkdGg6Zih7fSxpLndpZHRoLHthcnJheU9rOiExfSksbWFya2VyOihuPWYoe30saS5tYXJrZXIpLGRlbGV0ZSBuLnBhdHRlcm4sbiksY29ubmVjdG9yOntmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxsaW5lOntjb2xvcjpmKHt9LGEuY29sb3Ise2RmbHQ6aC5kZWZhdWx0TGluZX0pLHdpZHRoOmYoe30sYS53aWR0aCx7ZGZsdDowLGVkaXRUeXBlOiJwbG90In0pLGRhc2g6YS5kYXNoLGVkaXRUeXBlOiJzdHlsZSJ9LHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LG9mZnNldGdyb3VwOmkub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6aS5hbGlnbm1lbnRncm91cH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODk5LCIuLi9iYXIvYXR0cmlidXRlcyI6OTE0LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExOTEsIi4vY29uc3RhbnRzIjoxMDM5fV0sMTAzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCIpLGE9dCgiLi9hcnJheXNfdG9fY2FsY2RhdGEiKSxvPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxzPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdD09PXM/MDp0fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGMsdSxmLGgscCxkLG0sZz1uLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4Iiksdj1uLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5Iik7ImgiPT09ZS5vcmllbnRhdGlvbj8ocj1nLm1ha2VDYWxjZGF0YShlLCJ4IiksdT12Lm1ha2VDYWxjZGF0YShlLCJ5IiksZj1pKGUsdiwieSIsdSksaD0hIWUueXBlcmlvZGFsaWdubWVudCxwPSJ5Iik6KHI9di5tYWtlQ2FsY2RhdGEoZSwieSIpLHU9Zy5tYWtlQ2FsY2RhdGEoZSwieCIpLGY9aShlLGcsIngiLHUpLGg9ISFlLnhwZXJpb2RhbGlnbm1lbnQscD0ieCIpLGM9Zi52YWxzO3ZhciB5LHg9TWF0aC5taW4oYy5sZW5ndGgsci5sZW5ndGgpLGI9bmV3IEFycmF5KHgpO2ZvcihlLl9iYXNlPVtdLGQ9MDtkPHg7ZCsrKXtyW2RdPDAmJihyW2RdPXMpO3ZhciBfPSExO3JbZF0hPT1zJiZkKzE8eCYmcltkKzFdIT09cyYmKF89ITApLG09YltkXT17cDpjW2RdLHM6cltkXSxjTmV4dDpffSxlLl9iYXNlW2RdPS0uNSptLnMsaCYmKGJbZF0ub3JpZ19wPXVbZF0sYltkXVtwKyJFbmQiXT1mLmVuZHNbZF0sYltkXVtwKyJTdGFydCJdPWYuc3RhcnRzW2RdKSxlLmlkcyYmKG0uaWQ9U3RyaW5nKGUuaWRzW2RdKSksMD09PWQmJihiWzBdLnZUb3RhbD0wKSxiWzBdLnZUb3RhbCs9bChtLnMpLG0uYmVnUj1sKG0ucykvbChiWzBdLnMpfWZvcihkPTA7ZDx4O2QrKykobT1iW2RdKS5zIT09cyYmKG0uc3VtUj1tLnMvYlswXS52VG90YWwsbS5kaWZSPXZvaWQgMCE9PXk/bS5zL3k6MSx5PW0ucyk7cmV0dXJuIGEoYixlKSxvKGIsZSksYn19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIjo4MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjExOTMsIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjoxMDM2fV0sMTAzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2V2ZW50RGF0YUtleXM6WyJwZXJjZW50SW5pdGlhbCIsInBlcmNlbnRQcmV2aW91cyIsInBlcmNlbnRUb3RhbCJdfX0se31dLDEwNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiKS5zZXRHcm91cFBvc2l0aW9ucztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGE9dC5fZnVsbExheW91dCxvPXQuX2Z1bGxEYXRhLHM9dC5jYWxjZGF0YSxsPWUueGF4aXMsYz1lLnlheGlzLHU9W10sZj1bXSxoPVtdO2ZvcihpPTA7aTxvLmxlbmd0aDtpKyspe3ZhciBwPW9baV0sZD0iaCI9PT1wLm9yaWVudGF0aW9uOyEwPT09cC52aXNpYmxlJiZwLnhheGlzPT09bC5faWQmJnAueWF4aXM9PT1jLl9pZCYmImZ1bm5lbCI9PT1wLnR5cGUmJihyPXNbaV0sZD9oLnB1c2gocik6Zi5wdXNoKHIpLHUucHVzaChyKSl9dmFyIG09e21vZGU6YS5mdW5uZWxtb2RlLG5vcm06YS5mdW5uZWxub3JtLGdhcDphLmZ1bm5lbGdhcCxncm91cGdhcDphLmZ1bm5lbGdyb3VwZ2FwfTtmb3Iobih0LGwsYyxmLG0pLG4odCxjLGwsaCxtKSxpPTA7aTx1Lmxlbmd0aDtpKyspe3I9dVtpXTtmb3IodmFyIGc9MDtnPHIubGVuZ3RoO2crKylnKzE8ci5sZW5ndGgmJihyW2ddLm5leHRQMD1yW2crMV0ucDAscltnXS5uZXh0UzA9cltnKzFdLnMwLHJbZ10ubmV4dFAxPXJbZysxXS5wMSxyW2ddLm5leHRTMT1yW2crMV0uczEpfX19LHsiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiOjkxN31dLDEwNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVHcm91cGluZ0RlZmF1bHRzLGE9dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlVGV4dCxvPXQoIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKTtlLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX1pZihvKHQsZSxpLHUpKXtzKHQsZSxpLHUpLHUoInhob3ZlcmZvcm1hdCIpLHUoInlob3ZlcmZvcm1hdCIpLHUoIm9yaWVudGF0aW9uIixlLnkmJiFlLng/InYiOiJoIiksdSgib2Zmc2V0IiksdSgid2lkdGgiKTt2YXIgZj11KCJ0ZXh0Iik7dSgiaG92ZXJ0ZXh0IiksdSgiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciBoPXUoInRleHRwb3NpdGlvbiIpO2EodCxlLGksdSxoLHttb2R1bGVIYXNTZWxlY3RlZDohMSxtb2R1bGVIYXNVbnNlbGVjdGVkOiExLG1vZHVsZUhhc0NvbnN0cmFpbjohMCxtb2R1bGVIYXNDbGlwb25heGlzOiEwLG1vZHVsZUhhc1RleHRhbmdsZTohMCxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITB9KSwibm9uZSI9PT1lLnRleHRwb3NpdGlvbnx8ZS50ZXh0dGVtcGxhdGV8fHUoInRleHRpbmZvIixBcnJheS5pc0FycmF5KGYpPyJ0ZXh0K3ZhbHVlIjoidmFsdWUiKTt2YXIgcD11KCJtYXJrZXIuY29sb3IiLHIpO2lmKHUoIm1hcmtlci5saW5lLmNvbG9yIixjLmRlZmF1bHRMaW5lKSx1KCJtYXJrZXIubGluZS53aWR0aCIpLHUoImNvbm5lY3Rvci52aXNpYmxlIikpdSgiY29ubmVjdG9yLmZpbGxjb2xvciIsZnVuY3Rpb24odCl7dmFyIGU9bi5pc0FycmF5T3JUeXBlZEFycmF5KHQpPyIjMDAwIjp0O3JldHVybiBjLmFkZE9wYWNpdHkoZSwuNSpjLm9wYWNpdHkoZSkpfShwKSksdSgiY29ubmVjdG9yLmxpbmUud2lkdGgiKSYmKHUoImNvbm5lY3Rvci5saW5lLmNvbG9yIiksdSgiY29ubmVjdG9yLmxpbmUuZGFzaCIpKX1lbHNlIGUudmlzaWJsZT0hMX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsYTtmdW5jdGlvbiBvKHQpe3JldHVybiBuLmNvZXJjZShhLl9pbnB1dCxhLGwsdCl9aWYoImdyb3VwIj09PWUuZnVubmVsbW9kZSlmb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKylyPShhPXRbc10pLl9pbnB1dCxpKHIsYSxlLG8pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9saWIiOjc3NiwiLi4vYmFyL2RlZmF1bHRzIjo5MTgsIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIjoxMjExLCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIjoxMjE4LCIuL2F0dHJpYnV0ZXMiOjEwMzd9XSwxMDQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0Lng9InhWYWwiaW4gZT9lLnhWYWw6ZS54LHQueT0ieVZhbCJpbiBlP2UueVZhbDplLnksInBlcmNlbnRJbml0aWFsImluIGUmJih0LnBlcmNlbnRJbml0aWFsPWUucGVyY2VudEluaXRpYWwpLCJwZXJjZW50UHJldmlvdXMiaW4gZSYmKHQucGVyY2VudFByZXZpb3VzPWUucGVyY2VudFByZXZpb3VzKSwicGVyY2VudFRvdGFsImluIGUmJih0LnBlcmNlbnRUb3RhbD1lLnBlcmNlbnRUb3RhbCksZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksdH19LHt9XSwxMDQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5vcGFjaXR5LGk9dCgiLi4vYmFyL2hvdmVyIikuaG92ZXJPbkJhcnMsYT10KCIuLi8uLi9saWIiKS5mb3JtYXRQZXJjZW50O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMpe3ZhciBsPWkodCxlLHIsbyxzKTtpZihsKXt2YXIgYz1sLmNkLHU9Y1swXS50cmFjZSxmPSJoIj09PXUub3JpZW50YXRpb24saD1jW2wuaW5kZXhdO2xbKGY/IngiOiJ5IikrIkxhYmVsVmFsIl09aC5zLGwucGVyY2VudEluaXRpYWw9aC5iZWdSLGwucGVyY2VudEluaXRpYWxMYWJlbD1hKGguYmVnUiwxKSxsLnBlcmNlbnRQcmV2aW91cz1oLmRpZlIsbC5wZXJjZW50UHJldmlvdXNMYWJlbD1hKGguZGlmUiwxKSxsLnBlcmNlbnRUb3RhbD1oLnN1bVIsbC5wZXJjZW50VG90YWxMYWJlbD1hKGguc3VtUiwxKTt2YXIgcD1oLmhpfHx1LmhvdmVyaW5mbyxkPVtdO2lmKHAmJiJub25lIiE9PXAmJiJza2lwIiE9PXApe3ZhciBtPSJhbGwiPT09cCxnPXAuc3BsaXQoIisiKSx2PWZ1bmN0aW9uKHQpe3JldHVybiBtfHwtMSE9PWcuaW5kZXhPZih0KX07digicGVyY2VudCBpbml0aWFsIikmJmQucHVzaChsLnBlcmNlbnRJbml0aWFsTGFiZWwrIiBvZiBpbml0aWFsIiksdigicGVyY2VudCBwcmV2aW91cyIpJiZkLnB1c2gobC5wZXJjZW50UHJldmlvdXNMYWJlbCsiIG9mIHByZXZpb3VzIiksdigicGVyY2VudCB0b3RhbCIpJiZkLnB1c2gobC5wZXJjZW50VG90YWxMYWJlbCsiIG9mIHRvdGFsIil9cmV0dXJuIGwuZXh0cmFUZXh0PWQuam9pbigiPGJyPiIpLGwuY29sb3I9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lm1hcmtlcixpPWUubWN8fHIuY29sb3IsYT1lLm1sY3x8ci5saW5lLmNvbG9yLG89ZS5tbHd8fHIubGluZS53aWR0aDtpZihuKGkpKXJldHVybiBpO2lmKG4oYSkmJm8pcmV0dXJuIGF9KHUsaCksW2xdfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9saWIiOjc3NiwiLi4vYmFyL2hvdmVyIjo5MjF9XSwxMDQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5jcm9zc1RyYWNlRGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLGNyb3NzVHJhY2VDYWxjOnQoIi4vY3Jvc3NfdHJhY2VfY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4uL2Jhci9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiZnVubmVsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiYmFyLWxpa2UiLCJjYXJ0ZXNpYW4iLCJzdmciLCJvcmllbnRlZCIsInNob3dMZWdlbmQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vYmFyL3NlbGVjdCI6OTI2LCIuL2F0dHJpYnV0ZXMiOjEwMzcsIi4vY2FsYyI6MTAzOCwiLi9jcm9zc190cmFjZV9jYWxjIjoxMDQwLCIuL2RlZmF1bHRzIjoxMDQxLCIuL2V2ZW50X2RhdGEiOjEwNDIsIi4vaG92ZXIiOjEwNDMsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEwNDUsIi4vbGF5b3V0X2RlZmF1bHRzIjoxMDQ2LCIuL3Bsb3QiOjEwNDcsIi4vc3R5bGUiOjEwNDh9XSwxMDQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZnVubmVsbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhY2siLCJncm91cCIsIm92ZXJsYXkiXSxkZmx0OiJzdGFjayIsZWRpdFR5cGU6ImNhbGMifSxmdW5uZWxnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6ImNhbGMifSxmdW5uZWxncm91cGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSwxMDQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9ITE7ZnVuY3Rpb24gbyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWZvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgbD1yW3NdO2lmKGwudmlzaWJsZSYmImZ1bm5lbCI9PT1sLnR5cGUpe2E9ITA7YnJlYWt9fWEmJihvKCJmdW5uZWxtb2RlIiksbygiZnVubmVsZ2FwIiwuMiksbygiZnVubmVsZ3JvdXBnYXAiKSl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDQ1fV0sMTA0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxzPXQoIi4uL2Jhci9wbG90IiksbD10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikuY2xlYXJNaW5UZXh0U2l6ZTtmdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBpPVtdLGE9W10sbz1uP2U6cixzPW4/cjplO3JldHVybiBpWzBdPW8uYzJwKHQuczAsITApLGFbMF09cy5jMnAodC5wMCwhMCksaVsxXT1vLmMycCh0LnMxLCEwKSxhWzFdPXMuYzJwKHQucDEsITApLGlbMl09by5jMnAodC5uZXh0UzAsITApLGFbMl09cy5jMnAodC5uZXh0UDAsITApLGlbM109by5jMnAodC5uZXh0UzEsITApLGFbM109cy5jMnAodC5uZXh0UDEsITApLG4/W2ksYV06W2EsaV19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe3ZhciBmPXQuX2Z1bGxMYXlvdXQ7bCgiZnVubmVsIixmKSxmdW5jdGlvbih0LGUscixzKXt2YXIgbD1lLnhheGlzLHU9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhzLHIsInRyYWNlIGJhcnMiKS5lYWNoKChmdW5jdGlvbihyKXt2YXIgcz1uLnNlbGVjdCh0aGlzKSxmPXJbMF0udHJhY2UsaD1pLmVuc3VyZVNpbmdsZShzLCJnIiwicmVnaW9ucyIpO2lmKGYuY29ubmVjdG9yJiZmLmNvbm5lY3Rvci52aXNpYmxlKXt2YXIgcD0iaCI9PT1mLm9yaWVudGF0aW9uLGQ9aC5zZWxlY3RBbGwoImcucmVnaW9uIikuZGF0YShpLmlkZW50aXR5KTtkLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicmVnaW9uIiwhMCksZC5leGl0KCkucmVtb3ZlKCk7dmFyIG09ZC5zaXplKCk7ZC5lYWNoKChmdW5jdGlvbihyLHMpe2lmKHM9PT1tLTF8fHIuY05leHQpe3ZhciBmPWMocixsLHUscCksaD1mWzBdLGQ9ZlsxXSxnPSIiO2hbMF0hPT1vJiZkWzBdIT09byYmaFsxXSE9PW8mJmRbMV0hPT1vJiZoWzJdIT09byYmZFsyXSE9PW8mJmhbM10hPT1vJiZkWzNdIT09byYmKGcrPXA/Ik0iK2hbMF0rIiwiK2RbMV0rIkwiK2hbMl0rIiwiK2RbMl0rIkgiK2hbM10rIkwiK2hbMV0rIiwiK2RbMV0rIloiOiJNIitoWzFdKyIsIitkWzFdKyJMIitoWzJdKyIsIitkWzNdKyJWIitkWzJdKyJMIitoWzFdKyIsIitkWzBdKyJaIiksIiI9PT1nJiYoZz0iTTAsMFoiKSxpLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwicGF0aCIpLmF0dHIoImQiLGcpLmNhbGwoYS5zZXRDbGlwVXJsLGUubGF5ZXJDbGlwSWQsdCl9fSkpfWVsc2UgaC5yZW1vdmUoKX0pKX0odCxlLHIsdSksZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9ZS54YXhpcyxsPWUueWF4aXM7aS5tYWtlVHJhY2VHcm91cHMobyxyLCJ0cmFjZSBiYXJzIikuZWFjaCgoZnVuY3Rpb24ocil7dmFyIG89bi5zZWxlY3QodGhpcyksdT1yWzBdLnRyYWNlLGY9aS5lbnN1cmVTaW5nbGUobywiZyIsImxpbmVzIik7aWYodS5jb25uZWN0b3ImJnUuY29ubmVjdG9yLnZpc2libGUmJnUuY29ubmVjdG9yLmxpbmUud2lkdGgpe3ZhciBoPSJoIj09PXUub3JpZW50YXRpb24scD1mLnNlbGVjdEFsbCgiZy5saW5lIikuZGF0YShpLmlkZW50aXR5KTtwLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGluZSIsITApLHAuZXhpdCgpLnJlbW92ZSgpO3ZhciBkPXAuc2l6ZSgpO3AuZWFjaCgoZnVuY3Rpb24ocixvKXtpZihvPT09ZC0xfHxyLmNOZXh0KXt2YXIgdT1jKHIscyxsLGgpLGY9dVswXSxwPXVbMV0sbT0iIjt2b2lkIDAhPT1mWzNdJiZ2b2lkIDAhPT1wWzNdJiYoaD8obSs9Ik0iK2ZbMF0rIiwiK3BbMV0rIkwiK2ZbMl0rIiwiK3BbMl0sbSs9Ik0iK2ZbMV0rIiwiK3BbMV0rIkwiK2ZbM10rIiwiK3BbMl0pOihtKz0iTSIrZlsxXSsiLCIrcFsxXSsiTCIrZlsyXSsiLCIrcFszXSxtKz0iTSIrZlsxXSsiLCIrcFswXSsiTCIrZlsyXSsiLCIrcFsyXSkpLCIiPT09bSYmKG09Ik0wLDBaIiksaS5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksInBhdGgiKS5hdHRyKCJkIixtKS5jYWxsKGEuc2V0Q2xpcFVybCxlLmxheWVyQ2xpcElkLHQpfX0pKX1lbHNlIGYucmVtb3ZlKCl9KSl9KHQsZSxyLHUpLHMucGxvdCh0LGUscix1LHttb2RlOmYuZnVubmVsbW9kZSxub3JtOmYuZnVubmVsbW9kZSxnYXA6Zi5mdW5uZWxnYXAsZ3JvdXBnYXA6Zi5mdW5uZWxncm91cGdhcH0pfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3NiwiLi4vYmFyL3Bsb3QiOjkyNSwiLi4vYmFyL3VuaWZvcm1fdGV4dCI6OTMwLCJAcGxvdGx5L2QzIjo1OH1dLDEwNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikuREVTRUxFQ1RESU0scz10KCIuLi9iYXIvc3R5bGUiKSxsPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5yZXNpemVUZXh0LGM9cy5zdHlsZVRleHRQb2ludHM7ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUscil7dmFyIHM9cnx8bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLmZ1bm5lbGxheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlIik7bCh0LHMsImZ1bm5lbCIpLHMuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkpLHMuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcykscz1lWzBdLnRyYWNlO3Iuc2VsZWN0QWxsKCIucG9pbnQgPiBwYXRoIikuZWFjaCgoZnVuY3Rpb24odCl7aWYoIXQuaXNCbGFuayl7dmFyIGU9cy5tYXJrZXI7bi5zZWxlY3QodGhpcykuY2FsbChhLmZpbGwsdC5tY3x8ZS5jb2xvcikuY2FsbChhLnN0cm9rZSx0Lm1sY3x8ZS5saW5lLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsZS5saW5lLmRhc2gsdC5tbHd8fGUubGluZS53aWR0aCkuc3R5bGUoIm9wYWNpdHkiLHMuc2VsZWN0ZWRwb2ludHMmJiF0LnNlbGVjdGVkP286MSl9fSkpLGMocixzLHQpLHIuc2VsZWN0QWxsKCIucmVnaW9ucyIpLmVhY2goKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMCkuY2FsbChhLmZpbGwscy5jb25uZWN0b3IuZmlsbGNvbG9yKX0pKSxyLnNlbGVjdEFsbCgiLmxpbmVzIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1zLmNvbm5lY3Rvci5saW5lO2kubGluZUdyb3VwU3R5bGUobi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIiksdC53aWR0aCx0LmNvbG9yLHQuZGFzaCl9KSl9KSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo3NTEsIi4uL2Jhci9zdHlsZSI6OTI4LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo5MzAsIkBwbG90bHkvZDMiOjU4fV0sMTA0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9waWUvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2xhYmVsczpuLmxhYmVscyxsYWJlbDA6bi5sYWJlbDAsZGxhYmVsOm4uZGxhYmVsLHZhbHVlczpuLnZhbHVlcyxtYXJrZXI6e2NvbG9yczpuLm1hcmtlci5jb2xvcnMsbGluZTp7Y29sb3I6bCh7fSxuLm1hcmtlci5saW5lLmNvbG9yLHtkZmx0Om51bGx9KSx3aWR0aDpsKHt9LG4ubWFya2VyLmxpbmUud2lkdGgse2RmbHQ6MX0pLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSx0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsc2NhbGVncm91cDpsKHt9LG4uc2NhbGVncm91cCx7fSksdGV4dGluZm86bCh7fSxuLnRleHRpbmZvLHtmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwicGVyY2VudCJdfSksdGV4dHRlbXBsYXRlOnMoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJsYWJlbCIsImNvbG9yIiwidmFsdWUiLCJ0ZXh0IiwicGVyY2VudCJdfSksaG92ZXJpbmZvOmwoe30saS5ob3ZlcmluZm8se2ZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50IiwibmFtZSJdfSksaG92ZXJ0ZW1wbGF0ZTpvKHt9LHtrZXlzOlsibGFiZWwiLCJjb2xvciIsInZhbHVlIiwidGV4dCIsInBlcmNlbnQiXX0pLHRleHRwb3NpdGlvbjpsKHt9LG4udGV4dHBvc2l0aW9uLHt2YWx1ZXM6WyJpbnNpZGUiLCJub25lIl0sZGZsdDoiaW5zaWRlIn0pLHRleHRmb250Om4udGV4dGZvbnQsaW5zaWRldGV4dGZvbnQ6bi5pbnNpZGV0ZXh0Zm9udCx0aXRsZTp7dGV4dDpuLnRpdGxlLnRleHQsZm9udDpuLnRpdGxlLmZvbnQscG9zaXRpb246bCh7fSxuLnRpdGxlLnBvc2l0aW9uLHt2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiXSxkZmx0OiJ0b3AgY2VudGVyIn0pLGVkaXRUeXBlOiJwbG90In0sZG9tYWluOmEoe25hbWU6ImZ1bm5lbGFyZWEiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pLGFzcGVjdHJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGJhc2VyYXRpbzp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi4zMzMsZWRpdFR5cGU6InBsb3QifX19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4uL3BpZS9hdHRyaWJ1dGVzIjoxMTY1fV0sMTA1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpO3IubmFtZT0iZnVubmVsYXJlYSIsci5wbG90PWZ1bmN0aW9uKHQsZSxpLGEpe24ucGxvdEJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX0sci5jbGVhbj1mdW5jdGlvbih0LGUsaSxhKXtuLmNsZWFuQmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfX0seyIuLi8uLi9wbG90cy9wbG90cyI6ODkwfV0sMTA1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9waWUvY2FsYyIpO2UuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe3JldHVybiBuLmNhbGModCxlKX0sY3Jvc3NUcmFjZUNhbGM6ZnVuY3Rpb24odCl7bi5jcm9zc1RyYWNlQ2FsYyh0LHt0eXBlOiJmdW5uZWxhcmVhIn0pfX19LHsiLi4vcGllL2NhbGMiOjExNjd9XSwxMDUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxvPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQscz10KCIuLi9waWUvZGVmYXVsdHMiKS5oYW5kbGVMYWJlbHNBbmRWYWx1ZXM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgdT1jKCJsYWJlbHMiKSxmPWMoInZhbHVlcyIpLGg9cyh1LGYpLHA9aC5sZW47aWYoZS5faGFzTGFiZWxzPWguaGFzTGFiZWxzLGUuX2hhc1ZhbHVlcz1oLmhhc1ZhbHVlcywhZS5faGFzTGFiZWxzJiZlLl9oYXNWYWx1ZXMmJihjKCJsYWJlbDAiKSxjKCJkbGFiZWwiKSkscCl7ZS5fbGVuZ3RoPXAsYygibWFya2VyLmxpbmUud2lkdGgiKSYmYygibWFya2VyLmxpbmUuY29sb3IiLGwucGFwZXJfYmdjb2xvciksYygibWFya2VyLmNvbG9ycyIpLGMoInNjYWxlZ3JvdXAiKTt2YXIgZCxtPWMoInRleHQiKSxnPWMoInRleHR0ZW1wbGF0ZSIpO2lmKGd8fChkPWMoInRleHRpbmZvIixBcnJheS5pc0FycmF5KG0pPyJ0ZXh0K3BlcmNlbnQiOiJwZXJjZW50IikpLGMoImhvdmVydGV4dCIpLGMoImhvdmVydGVtcGxhdGUiKSxnfHxkJiYibm9uZSIhPT1kKXt2YXIgdj1jKCJ0ZXh0cG9zaXRpb24iKTtvKHQsZSxsLGMsdix7bW9kdWxlSGFzU2VsZWN0ZWQ6ITEsbW9kdWxlSGFzVW5zZWxlY3RlZDohMSxtb2R1bGVIYXNDb25zdHJhaW46ITEsbW9kdWxlSGFzQ2xpcG9uYXhpczohMSxtb2R1bGVIYXNUZXh0YW5nbGU6ITEsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiExfSl9YShlLGwsYyksYygidGl0bGUudGV4dCIpJiYoYygidGl0bGUucG9zaXRpb24iKSxuLmNvZXJjZUZvbnQoYywidGl0bGUuZm9udCIsbC5mb250KSksYygiYXNwZWN0cmF0aW8iKSxjKCJiYXNlcmF0aW8iKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuLi9iYXIvZGVmYXVsdHMiOjkxOCwiLi4vcGllL2RlZmF1bHRzIjoxMTY4LCIuL2F0dHJpYnV0ZXMiOjEwNDl9XSwxMDUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImZ1bm5lbGFyZWEiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbInBpZS1saWtlIiwiZnVubmVsYXJlYSIsInNob3dMZWdlbmQiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKSxzdHlsZU9uZTp0KCIuLi9waWUvc3R5bGVfb25lIiksbWV0YTp7fX19LHsiLi4vcGllL3N0eWxlX29uZSI6MTE3NiwiLi9hdHRyaWJ1dGVzIjoxMDQ5LCIuL2Jhc2VfcGxvdCI6MTA1MCwiLi9jYWxjIjoxMDUxLCIuL2RlZmF1bHRzIjoxMDUyLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDU0LCIuL2xheW91dF9kZWZhdWx0cyI6MTA1NSwiLi9wbG90IjoxMDU2LCIuL3N0eWxlIjoxMDU3fV0sMTA1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9waWUvbGF5b3V0X2F0dHJpYnV0ZXMiKS5oaWRkZW5sYWJlbHM7ZS5leHBvcnRzPXtoaWRkZW5sYWJlbHM6bixmdW5uZWxhcmVhY29sb3J3YXk6e3ZhbFR5cGU6ImNvbG9ybGlzdCIsZWRpdFR5cGU6ImNhbGMifSxleHRlbmRmdW5uZWxhcmVhY29sb3JzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn19fSx7Ii4uL3BpZS9sYXlvdXRfYXR0cmlidXRlcyI6MTE3Mn1dLDEwNTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXIoImhpZGRlbmxhYmVscyIpLHIoImZ1bm5lbGFyZWFjb2xvcndheSIsZS5jb2xvcndheSkscigiZXh0ZW5kZnVubmVsYXJlYWNvbG9ycyIpfX0seyIuLi8uLi9saWIiOjc3NiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTA1NH1dLDEwNTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9saWIiKSxvPWEuc3RyU2NhbGUscz1hLnN0clRyYW5zbGF0ZSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vYmFyL3Bsb3QiKS50b01vdmVJbnNpZGVCYXIsdT10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IiksZj11LnJlY29yZE1pblRleHRTaXplLGg9dS5jbGVhck1pblRleHRTaXplLHA9dCgiLi4vcGllL2hlbHBlcnMiKSxkPXQoIi4uL3BpZS9wbG90IiksbT1kLmF0dGFjaEZ4SGFuZGxlcnMsZz1kLmRldGVybWluZUluc2lkZVRleHRGb250LHY9ZC5sYXlvdXRBcmVhcyx5PWQucHJlcmVuZGVyVGl0bGVzLHg9ZC5wb3NpdGlvblRpdGxlT3V0c2lkZSxiPWQuZm9ybWF0U2xpY2VMYWJlbDtmdW5jdGlvbiBfKHQsZSl7cmV0dXJuImwiKyhlWzBdLXRbMF0pKyIsIisoZVsxXS10WzFdKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0O2goImZ1bm5lbGFyZWEiLHIpLHkoZSx0KSx2KGUsci5fc2l6ZSksYS5tYWtlVHJhY2VHcm91cHMoci5fZnVubmVsYXJlYWxheWVyLGUsInRyYWNlIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHU9bi5zZWxlY3QodGhpcyksaD1lWzBdLGQ9aC50cmFjZTshZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKXJldHVybjt2YXIgZT10WzBdLHI9ZS50cmFjZSxuPXIuYXNwZWN0cmF0aW8saT1yLmJhc2VyYXRpbztpPi45OTkmJihpPS45OTkpO3ZhciBhLG89TWF0aC5wb3coaSwyKSxzPWUudlRvdGFsLGw9cyxjPXMqby8oMS1vKS9zO2Z1bmN0aW9uIHUoKXt2YXIgdCxlPXt4OnQ9TWF0aC5zcXJ0KGMpLHk6LXR9O3JldHVybltlLngsZS55XX12YXIgZixoLHA9W107Zm9yKHAucHVzaCh1KCkpLGY9dC5sZW5ndGgtMTtmPi0xO2YtLSlpZighKGg9dFtmXSkuaGlkZGVuKXt2YXIgZD1oLnYvbDtjKz1kLHAucHVzaCh1KCkpfXZhciBtPTEvMCxnPS0xLzA7Zm9yKGY9MDtmPHAubGVuZ3RoO2YrKylhPXBbZl0sbT1NYXRoLm1pbihtLGFbMV0pLGc9TWF0aC5tYXgoZyxhWzFdKTtmb3IoZj0wO2Y8cC5sZW5ndGg7ZisrKXBbZl1bMV0tPShnK20pLzI7dmFyIHY9cFtwLmxlbmd0aC0xXVswXSx5PWUucix4PShnLW0pLzIsYj15L3YsXz15L3gqbjtmb3IoZS5yPV8qeCxmPTA7ZjxwLmxlbmd0aDtmKyspcFtmXVswXSo9YixwW2ZdWzFdKj1fO3ZhciB3PVstKGE9cFswXSlbMF0sYVsxXV0sVD1bYVswXSxhWzFdXSxrPTA7Zm9yKGY9dC5sZW5ndGgtMTtmPi0xO2YtLSlpZighKGg9dFtmXSkuaGlkZGVuKXt2YXIgQT1wW2srPTFdWzBdLE09cFtrXVsxXTtoLlRMPVstQSxNXSxoLlRSPVtBLE1dLGguQkw9dyxoLkJSPVQsaC5weG1pZD0oUz1oLlRSLEU9aC5CUixbLjUqKFNbMF0rRVswXSksLjUqKFNbMV0rRVsxXSldKSx3PWguVEwsVD1oLlRSfXZhciBTLEV9KGUpLHUuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdT1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuc2xpY2UiKS5kYXRhKGUpO3UuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzbGljZSIsITApLHUuZXhpdCgpLnJlbW92ZSgpLHUuZWFjaCgoZnVuY3Rpb24obyxzKXtpZihvLmhpZGRlbiluLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgsZyIpLnJlbW92ZSgpO2Vsc2V7by5wb2ludE51bWJlcj1vLmksby5jdXJ2ZU51bWJlcj1kLmluZGV4O3ZhciB1PWguY3gsdj1oLmN5LHk9bi5zZWxlY3QodGhpcykseD15LnNlbGVjdEFsbCgicGF0aC5zdXJmYWNlIikuZGF0YShbb10pO3guZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJzdXJmYWNlIiwhMCkuc3R5bGUoeyJwb2ludGVyLWV2ZW50cyI6ImFsbCJ9KSx5LmNhbGwobSx0LGUpO3ZhciB3PSJNIisodStvLlRSWzBdKSsiLCIrKHYrby5UUlsxXSkrXyhvLlRSLG8uQlIpK18oby5CUixvLkJMKStfKG8uQkwsby5UTCkrIloiO3guYXR0cigiZCIsdyksYih0LG8saCk7dmFyIFQ9cC5jYXN0T3B0aW9uKGQudGV4dHBvc2l0aW9uLG8ucHRzKSxrPXkuc2VsZWN0QWxsKCJnLnNsaWNldGV4dCIpLmRhdGEoby50ZXh0JiYibm9uZSIhPT1UP1swXTpbXSk7ay5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLGsuZXhpdCgpLnJlbW92ZSgpLGsuZWFjaCgoZnVuY3Rpb24oKXt2YXIgaD1hLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSkscD1hLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LGcoZCxvLHIuZm9udCkpO2gudGV4dChvLnRleHQpLmF0dHIoe2NsYXNzOiJzbGljZXRleHQiLHRyYW5zZm9ybToiIiwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuY2FsbChpLmZvbnQscCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KTt2YXIgbSx5LHgsYj1pLmJCb3goaC5ub2RlKCkpLF89TWF0aC5taW4oby5CTFsxXSxvLkJSWzFdKSt2LHc9TWF0aC5tYXgoby5UTFsxXSxvLlRSWzFdKSt2O3k9TWF0aC5tYXgoby5UTFswXSxvLkJMWzBdKSt1LHg9TWF0aC5taW4oby5UUlswXSxvLkJSWzBdKSt1LChtPWMoeSx4LF8sdyxiLHtpc0hvcml6b250YWw6ITAsY29uc3RyYWluZWQ6ITAsYW5nbGU6MCxhbmNob3I6Im1pZGRsZSJ9KSkuZm9udFNpemU9cC5zaXplLGYoZC50eXBlLG0sciksZVtzXS50cmFuc2Zvcm09bSxoLmF0dHIoInRyYW5zZm9ybSIsYS5nZXRUZXh0VHJhbnNmb3JtKG0pKX0pKX19KSk7dmFyIHY9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnRpdGxldGV4dCIpLmRhdGEoZC50aXRsZS50ZXh0P1swXTpbXSk7di5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRpdGxldGV4dCIsITApLHYuZXhpdCgpLnJlbW92ZSgpLHYuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT1hLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksYz1kLnRpdGxlLnRleHQ7ZC5fbWV0YSYmKGM9YS50ZW1wbGF0ZVN0cmluZyhjLGQuX21ldGEpKSxlLnRleHQoYykuYXR0cih7Y2xhc3M6InRpdGxldGV4dCIsdHJhbnNmb3JtOiIiLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9KS5jYWxsKGkuZm9udCxkLnRpdGxlLmZvbnQpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIHU9eChoLHIuX3NpemUpO2UuYXR0cigidHJhbnNmb3JtIixzKHUueCx1LnkpK28oTWF0aC5taW4oMSx1LnNjYWxlKSkrcyh1LnR4LHUudHkpKX0pKX0pKX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMiwiLi4vYmFyL3Bsb3QiOjkyNSwiLi4vYmFyL3VuaWZvcm1fdGV4dCI6OTMwLCIuLi9waWUvaGVscGVycyI6MTE3MCwiLi4vcGllL3Bsb3QiOjExNzQsIkBwbG90bHkvZDMiOjU4fV0sMTA1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi9waWUvc3R5bGVfb25lIiksYT10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikucmVzaXplVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5fZnVubmVsYXJlYWxheWVyLnNlbGVjdEFsbCgiLnRyYWNlIik7YSh0LGUsImZ1bm5lbGFyZWEiKSxlLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1uLnNlbGVjdCh0aGlzKTtyLnN0eWxlKHtvcGFjaXR5OmUub3BhY2l0eX0pLHIuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5lYWNoKChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5jYWxsKGksdCxlKX0pKX0pKX19LHsiLi4vYmFyL3VuaWZvcm1fdGV4dCI6OTMwLCIuLi9waWUvc3R5bGVfb25lIjoxMTc2LCJAcGxvdGx5L2QzIjo1OH1dLDEwNTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmF4aXNIb3ZlckZvcm1hdCxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWwoe3o6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0seDpsKHt9LG4ueCx7aW1wbGllZEVkaXRzOnt4dHlwZToiYXJyYXkifX0pLHgwOmwoe30sbi54MCx7aW1wbGllZEVkaXRzOnt4dHlwZToic2NhbGVkIn19KSxkeDpsKHt9LG4uZHgse2ltcGxpZWRFZGl0czp7eHR5cGU6InNjYWxlZCJ9fSkseTpsKHt9LG4ueSx7aW1wbGllZEVkaXRzOnt5dHlwZToiYXJyYXkifX0pLHkwOmwoe30sbi55MCx7aW1wbGllZEVkaXRzOnt5dHlwZToic2NhbGVkIn19KSxkeTpsKHt9LG4uZHkse2ltcGxpZWRFZGl0czp7eXR5cGU6InNjYWxlZCJ9fSkseHBlcmlvZDpsKHt9LG4ueHBlcmlvZCx7aW1wbGllZEVkaXRzOnt4dHlwZToic2NhbGVkIn19KSx5cGVyaW9kOmwoe30sbi55cGVyaW9kLHtpbXBsaWVkRWRpdHM6e3l0eXBlOiJzY2FsZWQifX0pLHhwZXJpb2QwOmwoe30sbi54cGVyaW9kMCx7aW1wbGllZEVkaXRzOnt4dHlwZToic2NhbGVkIn19KSx5cGVyaW9kMDpsKHt9LG4ueXBlcmlvZDAse2ltcGxpZWRFZGl0czp7eXR5cGU6InNjYWxlZCJ9fSkseHBlcmlvZGFsaWdubWVudDpsKHt9LG4ueHBlcmlvZGFsaWdubWVudCx7aW1wbGllZEVkaXRzOnt4dHlwZToic2NhbGVkIn19KSx5cGVyaW9kYWxpZ25tZW50Omwoe30sbi55cGVyaW9kYWxpZ25tZW50LHtpbXBsaWVkRWRpdHM6e3l0eXBlOiJzY2FsZWQifX0pLHRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHRyYW5zcG9zZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LHh0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhcnJheSIsInNjYWxlZCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seXR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFycmF5Iiwic2NhbGVkIl0sZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx6c21vb3RoOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmYXN0IiwiYmVzdCIsITFdLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxob3Zlcm9uZ2Fwczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToibm9uZSJ9LGNvbm5lY3RnYXBzOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiY2FsYyJ9LHhnYXA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowLGVkaXRUeXBlOiJwbG90In0seWdhcDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsbWluOjAsZWRpdFR5cGU6InBsb3QifSx4aG92ZXJmb3JtYXQ6YSgieCIpLHlob3ZlcmZvcm1hdDphKCJ5IiksemhvdmVyZm9ybWF0OmEoInoiLDEpLGhvdmVydGVtcGxhdGU6bygpLHNob3dsZWdlbmQ6bCh7fSxpLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0se3RyYW5zZm9ybXM6dm9pZCAwfSxzKCIiLHtjTGV0dGVyOiJ6IixhdXRvQ29sb3JEZmx0OiExfSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODIzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6ODMwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE5MX1dLDEwNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxzPXQoIi4uL2hpc3RvZ3JhbTJkL2NhbGMiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYz10KCIuL2NvbnZlcnRfY29sdW1uX3h5eiIpLHU9dCgiLi9jbGVhbl8yZF9hcnJheSIpLGY9dCgiLi9pbnRlcnAyZCIpLGg9dCgiLi9maW5kX2VtcHRpZXMiKSxwPXQoIi4vbWFrZV9ib3VuZF9hcnJheSIpLGQ9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBtKHQpe2Zvcih2YXIgZT1bXSxyPXQubGVuZ3RoLG49MDtuPHI7bisrKXt2YXIgaT10W25dO2khPT1kJiZlLnB1c2goaSl9cmV0dXJuIGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsZyx2LHkseCxiLF8sdyxULGssQSxNPWEuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxTPWEuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxFPW4udHJhY2VJcyhlLCJjb250b3VyIiksTD1uLnRyYWNlSXMoZSwiaGlzdG9ncmFtIiksQz1uLnRyYWNlSXMoZSwiZ2wyZCIpLFA9RT8iYmVzdCI6ZS56c21vb3RoO2lmKE0uX21pbkR0aWNrPTAsUy5fbWluRHRpY2s9MCxMKXk9KEE9cyh0LGUpKS5vcmlnX3gscj1BLngsZz1BLngwLHY9QS5keCx3PUEub3JpZ195LHg9QS55LGI9QS55MCxfPUEuZHksVD1BLno7ZWxzZXt2YXIgST1lLno7aS5pc0FycmF5MUQoSSk/KGMoZSxNLFMsIngiLCJ5IixbInoiXSkscj1lLl94LHg9ZS5feSxJPWUuX3opOih5PWUueD9NLm1ha2VDYWxjZGF0YShlLCJ4Iik6W10sdz1lLnk/Uy5tYWtlQ2FsY2RhdGEoZSwieSIpOltdLHI9byhlLE0sIngiLHkpLnZhbHMseD1vKGUsUywieSIsdykudmFscyxlLl94PXIsZS5feT14KSxnPWUueDAsdj1lLmR4LGI9ZS55MCxfPWUuZHksVD11KEksZSxNLFMpfWZ1bmN0aW9uIE8odCl7UD1lLl9pbnB1dC56c21vb3RoPWUuenNtb290aD0hMSxpLndhcm4oJ2Nhbm5vdCB1c2UgenNtb290aDogImZhc3QiOiAnK3QpfWlmKChNLnJhbmdlYnJlYWtzfHxTLnJhbmdlYnJlYWtzKSYmKFQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1bXSxpPS0xLGE9MDthPHIubGVuZ3RoO2ErKylpZihlW2FdIT09ZCl7aSsrLG5baV09W107Zm9yKHZhciBvPTA7bzxyW2FdLmxlbmd0aDtvKyspdFtvXSE9PWQmJm5baV0ucHVzaChyW2FdW29dKX1yZXR1cm4gbn0ocix4LFQpLEx8fChyPW0ocikseD1tKHgpLGUuX3g9cixlLl95PXgpKSxMfHwhRSYmIWUuY29ubmVjdGdhcHN8fChlLl9lbXB0eXBvaW50cz1oKFQpLGYoVCxlLl9lbXB0eXBvaW50cykpLCJmYXN0Ij09PVApaWYoImxvZyI9PT1NLnR5cGV8fCJsb2ciPT09Uy50eXBlKU8oImxvZyBheGlzIGZvdW5kIik7ZWxzZSBpZighTCl7aWYoci5sZW5ndGgpe3ZhciB6PShyW3IubGVuZ3RoLTFdLXJbMF0pLyhyLmxlbmd0aC0xKSxEPU1hdGguYWJzKHovMTAwKTtmb3Ioaz0wO2s8ci5sZW5ndGgtMTtrKyspaWYoTWF0aC5hYnMocltrKzFdLXJba10teik+RCl7TygieCBzY2FsZSBpcyBub3QgbGluZWFyIik7YnJlYWt9fWlmKHgubGVuZ3RoJiYiZmFzdCI9PT1QKXt2YXIgUj0oeFt4Lmxlbmd0aC0xXS14WzBdKS8oeC5sZW5ndGgtMSksRj1NYXRoLmFicyhSLzEwMCk7Zm9yKGs9MDtrPHgubGVuZ3RoLTE7aysrKWlmKE1hdGguYWJzKHhbaysxXS14W2tdLVIpPkYpe08oInkgc2NhbGUgaXMgbm90IGxpbmVhciIpO2JyZWFrfX19dmFyIEI9aS5tYXhSb3dMZW5ndGgoVCksTj0ic2NhbGVkIj09PWUueHR5cGU/IiI6cixqPXAoZSxOLGcsdixCLE0pLFU9InNjYWxlZCI9PT1lLnl0eXBlPyIiOngsVj1wKGUsVSxiLF8sVC5sZW5ndGgsUyk7Q3x8KGUuX2V4dHJlbWVzW00uX2lkXT1hLmZpbmRFeHRyZW1lcyhNLGopLGUuX2V4dHJlbWVzW1MuX2lkXT1hLmZpbmRFeHRyZW1lcyhTLFYpKTt2YXIgSD17eDpqLHk6Vix6OlQsdGV4dDplLl90ZXh0fHxlLnRleHQsaG92ZXJ0ZXh0OmUuX2hvdmVydGV4dHx8ZS5ob3ZlcnRleHR9O2lmKGUueHBlcmlvZGFsaWdubWVudCYmeSYmKEgub3JpZ194PXkpLGUueXBlcmlvZGFsaWdubWVudCYmdyYmKEgub3JpZ195PXcpLE4mJk4ubGVuZ3RoPT09ai5sZW5ndGgtMSYmKEgueENlbnRlcj1OKSxVJiZVLmxlbmd0aD09PVYubGVuZ3RoLTEmJihILnlDZW50ZXI9VSksTCYmKEgueFJhbmdlcz1BLnhSYW5nZXMsSC55UmFuZ2VzPUEueVJhbmdlcyxILnB0cz1BLnB0cyksRXx8bCh0LGUse3ZhbHM6VCxjTGV0dGVyOiJ6In0pLEUmJmUuY29udG91cnMmJiJoZWF0bWFwIj09PWUuY29udG91cnMuY29sb3Jpbmcpe3ZhciBxPXt0eXBlOiJjb250b3VyIj09PWUudHlwZT8iaGVhdG1hcCI6Imhpc3RvZ3JhbTJkIix4Y2FsZW5kYXI6ZS54Y2FsZW5kYXIseWNhbGVuZGFyOmUueWNhbGVuZGFyfTtILnhmaWxsPXAocSxOLGcsdixCLE0pLEgueWZpbGw9cChxLFUsYixfLFQubGVuZ3RoLFMpfXJldHVybltIXX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjY0NywiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCI6ODI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi9oaXN0b2dyYW0yZC9jYWxjIjoxMDkxLCIuL2NsZWFuXzJkX2FycmF5IjoxMDYwLCIuL2NvbnZlcnRfY29sdW1uX3h5eiI6MTA2MiwiLi9maW5kX2VtcHRpZXMiOjEwNjQsIi4vaW50ZXJwMmQiOjEwNjcsIi4vbWFrZV9ib3VuZF9hcnJheSI6MTA2OH1dLDEwNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHMsbCxjLHUsZixoO2Z1bmN0aW9uIHAodCl7aWYobih0KSlyZXR1cm4rdH1pZihlJiZlLnRyYW5zcG9zZSl7Zm9yKHM9MCxmPTA7Zjx0Lmxlbmd0aDtmKyspcz1NYXRoLm1heChzLHRbZl0ubGVuZ3RoKTtpZigwPT09cylyZXR1cm4hMTtjPWZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aH0sdT1mdW5jdGlvbih0LGUscil7cmV0dXJuKHRbcl18fFtdKVtlXX19ZWxzZSBzPXQubGVuZ3RoLGM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlXS5sZW5ndGh9LHU9ZnVuY3Rpb24odCxlLHIpe3JldHVybih0W2VdfHxbXSlbcl19O3ZhciBkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZT09PWF8fHI9PT1hP2E6dSh0LGUscil9O2Z1bmN0aW9uIG0odCl7aWYoZSYmImNhcnBldCIhPT1lLnR5cGUmJiJjb250b3VyY2FycGV0IiE9PWUudHlwZSYmdCYmImNhdGVnb3J5Ij09PXQudHlwZSYmZVsiXyIrdC5faWQuY2hhckF0KDApXS5sZW5ndGgpe3ZhciByPXQuX2lkLmNoYXJBdCgwKSxuPXt9LG89ZVsiXyIrcisiQ2F0ZWdvcnlNYXAiXXx8ZVtyXTtmb3IoZj0wO2Y8by5sZW5ndGg7ZisrKW5bb1tmXV09ZjtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9blt0Ll9jYXRlZ29yaWVzW2VdXTtyZXR1cm4gcisxP3I6YX19cmV0dXJuIGkuaWRlbnRpdHl9dmFyIGc9bShyKSx2PW0obyk7byYmImNhdGVnb3J5Ij09PW8udHlwZSYmKHM9by5fY2F0ZWdvcmllcy5sZW5ndGgpO3ZhciB5PW5ldyBBcnJheShzKTtmb3IoZj0wO2Y8cztmKyspZm9yKGw9ciYmImNhdGVnb3J5Ij09PXIudHlwZT9yLl9jYXRlZ29yaWVzLmxlbmd0aDpjKHQsZikseVtmXT1uZXcgQXJyYXkobCksaD0wO2g8bDtoKyspeVtmXVtoXT1wKGQodCx2KGYpLGcoaCkpKTtyZXR1cm4geX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3NiwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDEwNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttaW46InptaW4iLG1heDoiem1heCJ9fSx7fV0sMTA2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxsKXt2YXIgYz10Ll9sZW5ndGgsdT1lLm1ha2VDYWxjZGF0YSh0LG8pLGY9ci5tYWtlQ2FsY2RhdGEodCxzKTt1PWEodCxlLG8sdSkudmFscyxmPWEodCxyLHMsZikudmFsczt2YXIgaCxwLGQsbSxnPXQudGV4dCx2PXZvaWQgMCE9PWcmJm4uaXNBcnJheTFEKGcpLHk9dC5ob3ZlcnRleHQseD12b2lkIDAhPT15JiZuLmlzQXJyYXkxRCh5KSxiPW4uZGlzdGluY3RWYWxzKHUpLF89Yi52YWxzLHc9bi5kaXN0aW5jdFZhbHMoZiksVD13LnZhbHMsaz1bXSxBPVQubGVuZ3RoLE09Xy5sZW5ndGg7Zm9yKGg9MDtoPGwubGVuZ3RoO2grKylrW2hdPW4uaW5pdDJkQXJyYXkoQSxNKTt2JiYoZD1uLmluaXQyZEFycmF5KEEsTSkpLHgmJihtPW4uaW5pdDJkQXJyYXkoQSxNKSk7dmFyIFM9bi5pbml0MmRBcnJheShBLE0pO2ZvcihoPTA7aDxjO2grKylpZih1W2hdIT09aSYmZltoXSE9PWkpe3ZhciBFPW4uZmluZEJpbih1W2hdK2IubWluRGlmZi8yLF8pLEw9bi5maW5kQmluKGZbaF0rdy5taW5EaWZmLzIsVCk7Zm9yKHA9MDtwPGwubGVuZ3RoO3ArKyl7dmFyIEM9dFtsW3BdXTtrW3BdW0xdW0VdPUNbaF0sU1tMXVtFXT1ofXYmJihkW0xdW0VdPWdbaF0pLHgmJihtW0xdW0VdPXlbaF0pfWZvcih0WyJfIitvXT1fLHRbIl8iK3NdPVQscD0wO3A8bC5sZW5ndGg7cCsrKXRbIl8iK2xbcF1dPWtbcF07diYmKHQuX3RleHQ9ZCkseCYmKHQuX2hvdmVydGV4dD1tKSxlJiYiY2F0ZWdvcnkiPT09ZS50eXBlJiYodFsiXyIrbysiQ2F0ZWdvcnlNYXAiXT1fLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NhdGVnb3JpZXNbdF19KSkpLHImJiJjYXRlZ29yeSI9PT1yLnR5cGUmJih0WyJfIitzKyJDYXRlZ29yeU1hcCJdPVQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gci5fY2F0ZWdvcmllc1t0XX0pKSksdC5fYWZ0ZXIyYmVmb3JlPVN9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjgyNH1dLDEwNjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL3h5el9kZWZhdWx0cyIpLGE9dCgiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiKSxvPXQoIi4vc3R5bGVfZGVmYXVsdHMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX1pKHQsZSx1LGMpPyhhKHQsZSxjLHUpLHUoInhob3ZlcmZvcm1hdCIpLHUoInlob3ZlcmZvcm1hdCIpLHUoInRleHQiKSx1KCJob3ZlcnRleHQiKSx1KCJob3ZlcnRlbXBsYXRlIiksbyh0LGUsdSxjKSx1KCJob3Zlcm9uZ2FwcyIpLHUoImNvbm5lY3RnYXBzIixuLmlzQXJyYXkxRChlLnopJiYhMSE9PWUuenNtb290aCkscyh0LGUsYyx1LHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY0OSwiLi4vLi4vbGliIjo3NzYsIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIjoxMjExLCIuL2F0dHJpYnV0ZXMiOjEwNTgsIi4vc3R5bGVfZGVmYXVsdHMiOjEwNzEsIi4veHl6X2RlZmF1bHRzIjoxMDcyfV0sMTA2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5tYXhSb3dMZW5ndGg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhLG8scyxsLGMsdT1bXSxmPXt9LGg9W10scD10WzBdLGQ9W10sbT1bMCwwLDBdLGc9bih0KTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWZvcihlPWQsZD1wLHA9dFtyKzFdfHxbXSxpPTA7aTxnO2krKyl2b2lkIDA9PT1kW2ldJiYoKHM9KHZvaWQgMCE9PWRbaS0xXT8xOjApKyh2b2lkIDAhPT1kW2krMV0/MTowKSsodm9pZCAwIT09ZVtpXT8xOjApKyh2b2lkIDAhPT1wW2ldPzE6MCkpPygwPT09ciYmcysrLDA9PT1pJiZzKysscj09PXQubGVuZ3RoLTEmJnMrKyxpPT09ZC5sZW5ndGgtMSYmcysrLHM8NCYmKGZbW3IsaV1dPVtyLGksc10pLHUucHVzaChbcixpLHNdKSk6aC5wdXNoKFtyLGldKSk7Zm9yKDtoLmxlbmd0aDspe2ZvcihsPXt9LGM9ITEsbz1oLmxlbmd0aC0xO28+PTA7by0tKShzPSgoZltbKHI9KGE9aFtvXSlbMF0pLTEsaT1hWzFdXV18fG0pWzJdKyhmW1tyKzEsaV1dfHxtKVsyXSsoZltbcixpLTFdXXx8bSlbMl0rKGZbW3IsaSsxXV18fG0pWzJdKS8yMCkmJihsW2FdPVtyLGksc10saC5zcGxpY2UobywxKSxjPSEwKTtpZighYyl0aHJvdyJmaW5kRW1wdGllcyBpdGVyYXRlZCB3aXRoIG5vIG5ldyBuZWlnaGJvcnMiO2ZvcihhIGluIGwpZlthXT1sW2FdLHUucHVzaChsW2FdKX1yZXR1cm4gdS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlWzJdLXRbMl19KSl9fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sMTA2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsKXtsfHwobD17fSk7dmFyIGMsdSxmLGgscD1sLmlzQ29udG91cixkPXQuY2RbMF0sbT1kLnRyYWNlLGc9dC54YSx2PXQueWEseT1kLngseD1kLnksYj1kLnosXz1kLnhDZW50ZXIsdz1kLnlDZW50ZXIsVD1kLnptYXNrLGs9bS56aG92ZXJmb3JtYXQsQT15LE09eDtpZighMSE9PXQuaW5kZXgpe3RyeXtmPU1hdGgucm91bmQodC5pbmRleFsxXSksaD1NYXRoLnJvdW5kKHQuaW5kZXhbMF0pfWNhdGNoKGUpe3JldHVybiB2b2lkIGkuZXJyb3IoIkVycm9yIGhvdmVyaW5nIG9uIGhlYXRtYXAsIHBvaW50TnVtYmVyIG11c3QgYmUgW3Jvdyxjb2xdLCBmb3VuZDoiLHQuaW5kZXgpfWlmKGY8MHx8Zj49YlswXS5sZW5ndGh8fGg8MHx8aD5iLmxlbmd0aClyZXR1cm59ZWxzZXtpZihuLmluYm94KGUteVswXSxlLXlbeS5sZW5ndGgtMV0sMCk+MHx8bi5pbmJveChyLXhbMF0sci14W3gubGVuZ3RoLTFdLDApPjApcmV0dXJuO2lmKHApe3ZhciBTO2ZvcihBPVsyKnlbMF0teVsxXV0sUz0xO1M8eS5sZW5ndGg7UysrKUEucHVzaCgoeVtTXSt5W1MtMV0pLzIpO2ZvcihBLnB1c2goWzIqeVt5Lmxlbmd0aC0xXS15W3kubGVuZ3RoLTJdXSksTT1bMip4WzBdLXhbMV1dLFM9MTtTPHgubGVuZ3RoO1MrKylNLnB1c2goKHhbU10reFtTLTFdKS8yKTtNLnB1c2goWzIqeFt4Lmxlbmd0aC0xXS14W3gubGVuZ3RoLTJdXSl9Zj1NYXRoLm1heCgwLE1hdGgubWluKEEubGVuZ3RoLTIsaS5maW5kQmluKGUsQSkpKSxoPU1hdGgubWF4KDAsTWF0aC5taW4oTS5sZW5ndGgtMixpLmZpbmRCaW4ocixNKSkpfXZhciBFLEwsQz1nLmMycCh5W2ZdKSxQPWcuYzJwKHlbZisxXSksST12LmMycCh4W2hdKSxPPXYuYzJwKHhbaCsxXSk7cD8oRT1kLm9yaWdfeHx8eSxMPWQub3JpZ195fHx4LFA9QyxjPUVbZl0sTz1JLHU9TFtoXSk6KEU9ZC5vcmlnX3h8fF98fHksTD1kLm9yaWdfeXx8d3x8eCxjPV8/RVtmXTooRVtmXStFW2YrMV0pLzIsdT13P0xbaF06KExbaF0rTFtoKzFdKS8yLGcmJiJjYXRlZ29yeSI9PT1nLnR5cGUmJihjPXlbZl0pLHYmJiJjYXRlZ29yeSI9PT12LnR5cGUmJih1PXhbaF0pLG0uenNtb290aCYmKEM9UD1nLmMycChjKSxJPU89di5jMnAodSkpKTt2YXIgej1iW2hdW2ZdO2lmKFQmJiFUW2hdW2ZdJiYoej12b2lkIDApLHZvaWQgMCE9PXp8fG0uaG92ZXJvbmdhcHMpe3ZhciBEO0FycmF5LmlzQXJyYXkoZC5ob3ZlcnRleHQpJiZBcnJheS5pc0FycmF5KGQuaG92ZXJ0ZXh0W2hdKT9EPWQuaG92ZXJ0ZXh0W2hdW2ZdOkFycmF5LmlzQXJyYXkoZC50ZXh0KSYmQXJyYXkuaXNBcnJheShkLnRleHRbaF0pJiYoRD1kLnRleHRbaF1bZl0pO3ZhciBSPW8obSksRj17dHlwZToibGluZWFyIixyYW5nZTpbUi5taW4sUi5tYXhdLGhvdmVyZm9ybWF0OmssX3NlcGFyYXRvcnM6Zy5fc2VwYXJhdG9ycyxfbnVtRm9ybWF0OmcuX251bUZvcm1hdH0sQj1hLnRpY2tUZXh0KEYseiwiaG92ZXIiKS50ZXh0O3JldHVybltpLmV4dGVuZEZsYXQodCx7aW5kZXg6bS5fYWZ0ZXIyYmVmb3JlP20uX2FmdGVyMmJlZm9yZVtoXVtmXTpbaCxmXSxkaXN0YW5jZTp0Lm1heEhvdmVyRGlzdGFuY2Usc3Bpa2VEaXN0YW5jZTp0Lm1heFNwaWtlRGlzdGFuY2UseDA6Qyx4MTpQLHkwOkkseTE6Tyx4TGFiZWxWYWw6Yyx5TGFiZWxWYWw6dSx6TGFiZWxWYWw6eix6TGFiZWw6Qix0ZXh0OkR9KV19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1MSwiLi4vLi4vY29tcG9uZW50cy9meCI6Njc5LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyN31dLDEwNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksY29sb3JiYXI6dCgiLi9jb2xvcmJhciIpLHN0eWxlOnQoIi4vc3R5bGUiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImhlYXRtYXAiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi9hdHRyaWJ1dGVzIjoxMDU4LCIuL2NhbGMiOjEwNTksIi4vY29sb3JiYXIiOjEwNjEsIi4vZGVmYXVsdHMiOjEwNjMsIi4vaG92ZXIiOjEwNjUsIi4vcGxvdCI6MTA2OSwiLi9zdHlsZSI6MTA3MH1dLDEwNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT1bWy0xLDBdLFsxLDBdLFswLC0xXSxbMCwxXV07ZnVuY3Rpb24gYSh0KXtyZXR1cm4uNS0uMjUqTWF0aC5taW4oMSwuNSp0KX1mdW5jdGlvbiBvKHQsZSxyKXt2YXIgbixhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2PTA7Zm9yKHM9MDtzPGUubGVuZ3RoO3MrKyl7Zm9yKGE9KG49ZVtzXSlbMF0sbz1uWzFdLGQ9dFthXVtvXSxwPTAsaD0wLGw9MDtsPDQ7bCsrKSh1PXRbYSsoYz1pW2xdKVswXV0pJiZ2b2lkIDAhPT0oZj11W28rY1sxXV0pJiYoMD09PXA/bT1nPWY6KG09TWF0aC5taW4obSxmKSxnPU1hdGgubWF4KGcsZikpLGgrKyxwKz1mKTtpZigwPT09aCl0aHJvdyJpdGVyYXRlSW50ZXJwMmQgb3JkZXIgaXMgd3Jvbmc6IG5vIGRlZmluZWQgbmVpZ2hib3JzIjt0W2FdW29dPXAvaCx2b2lkIDA9PT1kP2g8NCYmKHY9MSk6KHRbYV1bb109KDErcikqdFthXVtvXS1yKmQsZz5tJiYodj1NYXRoLm1heCh2LE1hdGguYWJzKHRbYV1bb10tZCkvKGctbSkpKSl9cmV0dXJuIHZ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaT0xO2ZvcihvKHQsZSkscj0wO3I8ZS5sZW5ndGgmJiEoZVtyXVsyXTw0KTtyKyspO2ZvcihlPWUuc2xpY2Uocikscj0wO3I8MTAwJiZpPi4wMTtyKyspaT1vKHQsZSxhKGkpKTtyZXR1cm4gaT4uMDEmJm4ubG9nKCJpbnRlcnAyZCBkaWRuJ3QgY29udmVyZ2UgcXVpY2tseSIsaSksdH19LHsiLi4vLi4vbGliIjo3NzZ9XSwxMDY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7dmFyIGwsYyx1LGY9W10saD1uLnRyYWNlSXModCwiY29udG91ciIpLHA9bi50cmFjZUlzKHQsImhpc3RvZ3JhbSIpLGQ9bi50cmFjZUlzKHQsImdsMmQiKTtpZihpKGUpJiZlLmxlbmd0aD4xJiYhcCYmImNhdGVnb3J5IiE9PXMudHlwZSl7dmFyIG09ZS5sZW5ndGg7aWYoIShtPD1vKSlyZXR1cm4gaD9lLnNsaWNlKDAsbyk6ZS5zbGljZSgwLG8rMSk7aWYoaHx8ZClmPWUuc2xpY2UoMCxvKTtlbHNlIGlmKDE9PT1vKWY9W2VbMF0tLjUsZVswXSsuNV07ZWxzZXtmb3IoZj1bMS41KmVbMF0tLjUqZVsxXV0sdT0xO3U8bTt1KyspZi5wdXNoKC41KihlW3UtMV0rZVt1XSkpO2YucHVzaCgxLjUqZVttLTFdLS41KmVbbS0yXSl9aWYobTxvKXt2YXIgZz1mW2YubGVuZ3RoLTFdLHY9Zy1mW2YubGVuZ3RoLTJdO2Zvcih1PW07dTxvO3UrKylnKz12LGYucHVzaChnKX19ZWxzZXt2YXIgeT10W3MuX2lkLmNoYXJBdCgwKSsiY2FsZW5kYXIiXTtpZihwKWw9cy5yMmMociwwLHkpO2Vsc2UgaWYoaShlKSYmMT09PWUubGVuZ3RoKWw9ZVswXTtlbHNlIGlmKHZvaWQgMD09PXIpbD0wO2Vsc2V7bD0oImxvZyI9PT1zLnR5cGU/cy5kMmM6cy5yMmMpKHIsMCx5KX1mb3IoYz1hfHwxLHU9aHx8ZD8wOi0uNTt1PG87dSsrKWYucHVzaChsK2MqdSl9cmV0dXJuIGZ9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0fV0sMTA2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2UsbD10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpO2Z1bmN0aW9uIGModCxlKXt2YXIgcj1lLmxlbmd0aC0yLG49by5jb25zdHJhaW4oby5maW5kQmluKHQsZSksMCxyKSxpPWVbbl0sYT1lW24rMV0scz1vLmNvbnN0cmFpbihuKyh0LWkpLyhhLWkpLS41LDAsciksbD1NYXRoLnJvdW5kKHMpLGM9TWF0aC5hYnMocy1sKTtyZXR1cm4gcyYmcyE9PXImJmM/e2JpbjA6bCxmcmFjOmMsYmluMTpNYXRoLnJvdW5kKGwrYy8ocy1sKSl9OntiaW4wOmwsYmluMTpsLGZyYWM6MH19ZnVuY3Rpb24gdSh0LGUpe3ZhciByPWUubGVuZ3RoLTEsbj1vLmNvbnN0cmFpbihvLmZpbmRCaW4odCxlKSwwLHIpLGk9ZVtuXSxhPSh0LWkpLyhlW24rMV0taSl8fDA7cmV0dXJuIGE8PTA/e2JpbjA6bixiaW4xOm4sZnJhYzowfTphPC41P3tiaW4wOm4sYmluMTpuKzEsZnJhYzphfTp7YmluMDpuKzEsYmluMTpuLGZyYWM6MS1hfX1mdW5jdGlvbiBmKHQsZSxyKXt0W2VdPXJbMF0sdFtlKzFdPXJbMV0sdFtlKzJdPXJbMl0sdFtlKzNdPU1hdGgucm91bmQoMjU1KnJbM10pfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXt2YXIgcD1lLnhheGlzLGQ9ZS55YXhpcztvLm1ha2VUcmFjZUdyb3VwcyhoLHIsImhtIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHIsaCxtLGcsdix5LHg9bi5zZWxlY3QodGhpcyksYj1lWzBdLF89Yi50cmFjZSx3PWIueixUPWIueCxrPWIueSxBPWIueENlbnRlcixNPWIueUNlbnRlcixTPWEudHJhY2VJcyhfLCJjb250b3VyIiksRT1TPyJiZXN0IjpfLnpzbW9vdGgsTD13Lmxlbmd0aCxDPW8ubWF4Um93TGVuZ3RoKHcpLFA9ITEsST0hMTtmb3IoeT0wO3ZvaWQgMD09PXImJnk8VC5sZW5ndGgtMTspcj1wLmMycChUW3ldKSx5Kys7Zm9yKHk9VC5sZW5ndGgtMTt2b2lkIDA9PT1oJiZ5PjA7KWg9cC5jMnAoVFt5XSkseS0tO2ZvcihoPHImJihtPWgsaD1yLHI9bSxQPSEwKSx5PTA7dm9pZCAwPT09ZyYmeTxrLmxlbmd0aC0xOylnPWQuYzJwKGtbeV0pLHkrKztmb3IoeT1rLmxlbmd0aC0xO3ZvaWQgMD09PXYmJnk+MDspdj1kLmMycChrW3ldKSx5LS07aWYodjxnJiYobT1nLGc9dix2PW0sST0hMCksUyYmKEE9VCxNPWssVD1iLnhmaWxsLGs9Yi55ZmlsbCksImZhc3QiIT09RSl7dmFyIE89ImJlc3QiPT09RT8wOi41O3I9TWF0aC5tYXgoLU8qcC5fbGVuZ3RoLHIpLGg9TWF0aC5taW4oKDErTykqcC5fbGVuZ3RoLGgpLGc9TWF0aC5tYXgoLU8qZC5fbGVuZ3RoLGcpLHY9TWF0aC5taW4oKDErTykqZC5fbGVuZ3RoLHYpfXZhciB6PU1hdGgucm91bmQoaC1yKSxEPU1hdGgucm91bmQodi1nKTtpZih6PD0wfHxEPD0wKXt4LnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKFtdKS5leGl0KCkucmVtb3ZlKCl9ZWxzZXt2YXIgUixGOyJmYXN0Ij09PUU/KFI9QyxGPUwpOihSPXosRj1EKTt2YXIgQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtCLndpZHRoPVIsQi5oZWlnaHQ9Rjt2YXIgTixqLFU9Qi5nZXRDb250ZXh0KCIyZCIpLFY9cyhfLHtub051bWVyaWNDaGVjazohMCxyZXR1cm5BcnJheTohMH0pOyJmYXN0Ij09PUU/KE49UD9mdW5jdGlvbih0KXtyZXR1cm4gQy0xLXR9Om8uaWRlbnRpdHksaj1JP2Z1bmN0aW9uKHQpe3JldHVybiBMLTEtdH06by5pZGVudGl0eSk6KE49ZnVuY3Rpb24odCl7cmV0dXJuIG8uY29uc3RyYWluKE1hdGgucm91bmQocC5jMnAoVFt0XSktciksMCx6KX0saj1mdW5jdGlvbih0KXtyZXR1cm4gby5jb25zdHJhaW4oTWF0aC5yb3VuZChkLmMycChrW3RdKS1nKSwwLEQpfSk7dmFyIEgscSxHLFksVyxYPWooMCksWj1bWCxYXSxKPVA/MDoxLEs9ST8wOjEsUT0wLCQ9MCx0dD0wLGV0PTA7aWYoRSl7dmFyIHJ0LG50PTA7dHJ5e3J0PW5ldyBVaW50OEFycmF5KHoqRCo0KX1jYXRjaCh0KXtydD1uZXcgQXJyYXkoeipEKjQpfWlmKCJiZXN0Ij09PUUpe3ZhciBpdCxhdCxvdCxzdD1BfHxULGx0PU18fGssY3Q9bmV3IEFycmF5KHN0Lmxlbmd0aCksdXQ9bmV3IEFycmF5KGx0Lmxlbmd0aCksZnQ9bmV3IEFycmF5KHopLGh0PUE/dTpjLHB0PU0/dTpjO2Zvcih5PTA7eTxzdC5sZW5ndGg7eSsrKWN0W3ldPU1hdGgucm91bmQocC5jMnAoc3RbeV0pLXIpO2Zvcih5PTA7eTxsdC5sZW5ndGg7eSsrKXV0W3ldPU1hdGgucm91bmQoZC5jMnAobHRbeV0pLWcpO2Zvcih5PTA7eTx6O3krKylmdFt5XT1odCh5LGN0KTtmb3IocT0wO3E8RDtxKyspZm9yKGF0PXdbKGl0PXB0KHEsdXQpKS5iaW4wXSxvdD13W2l0LmJpbjFdLHk9MDt5PHo7eSsrLG50Kz00KWYocnQsbnQsVz1rdChhdCxvdCxmdFt5XSxpdCkpfWVsc2UgZm9yKHE9MDtxPEw7cSsrKWZvcihZPXdbcV0sWj1qKHEpLHk9MDt5PHo7eSsrKVc9VHQoWVt5XSwxKSxmKHJ0LG50PTQqKFoqeitOKHkpKSxXKTt2YXIgZHQ9VS5jcmVhdGVJbWFnZURhdGEoeixEKTt0cnl7ZHQuZGF0YS5zZXQocnQpfWNhdGNoKHQpe3ZhciBtdD1kdC5kYXRhLGd0PW10Lmxlbmd0aDtmb3IocT0wO3E8Z3Q7cSsrKW10W3FdPXJ0W3FdfVUucHV0SW1hZ2VEYXRhKGR0LDAsMCl9ZWxzZXt2YXIgdnQ9Xy54Z2FwLHl0PV8ueWdhcCx4dD1NYXRoLmZsb29yKHZ0LzIpLGJ0PU1hdGguZmxvb3IoeXQvMik7Zm9yKHE9MDtxPEw7cSsrKWlmKFk9d1txXSxaLnJldmVyc2UoKSxaW0tdPWoocSsxKSxaWzBdIT09WlsxXSYmdm9pZCAwIT09WlswXSYmdm9pZCAwIT09WlsxXSlmb3IoSD1bRz1OKDApLEddLHk9MDt5PEM7eSsrKUgucmV2ZXJzZSgpLEhbSl09Tih5KzEpLEhbMF0hPT1IWzFdJiZ2b2lkIDAhPT1IWzBdJiZ2b2lkIDAhPT1IWzFdJiYoVz1UdChZW3ldLChIWzFdLUhbMF0pKihaWzFdLVpbMF0pKSxVLmZpbGxTdHlsZT0icmdiYSgiK1cuam9pbigiLCIpKyIpIixVLmZpbGxSZWN0KEhbMF0reHQsWlswXStidCxIWzFdLUhbMF0tdnQsWlsxXS1aWzBdLXl0KSl9JD1NYXRoLnJvdW5kKCQvUSksdHQ9TWF0aC5yb3VuZCh0dC9RKSxldD1NYXRoLnJvdW5kKGV0L1EpO3ZhciBfdD1pKCJyZ2IoIiskKyIsIit0dCsiLCIrZXQrIikiKTt0Ll9obXBpeGNvdW50PSh0Ll9obXBpeGNvdW50fHwwKStRLHQuX2htbHVtY291bnQ9KHQuX2htbHVtY291bnR8fDApK1EqX3QuZ2V0THVtaW5hbmNlKCk7dmFyIHd0PXguc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEoZSk7d3QuZW50ZXIoKS5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOmwuc3ZnLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSksd3QuYXR0cih7aGVpZ2h0OkQsd2lkdGg6eix4OnIseTpnLCJ4bGluazpocmVmIjpCLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9KX1mdW5jdGlvbiBUdCh0LGUpe2lmKHZvaWQgMCE9PXQpe3ZhciByPVYodCk7cmV0dXJuIHJbMF09TWF0aC5yb3VuZChyWzBdKSxyWzFdPU1hdGgucm91bmQoclsxXSksclsyXT1NYXRoLnJvdW5kKHJbMl0pLFErPWUsJCs9clswXSplLHR0Kz1yWzFdKmUsZXQrPXJbMl0qZSxyfXJldHVyblswLDAsMCwwXX1mdW5jdGlvbiBrdCh0LGUscixuKXt2YXIgaT10W3IuYmluMF07aWYodm9pZCAwPT09aSlyZXR1cm4gVHQodm9pZCAwLDEpO3ZhciBhLG89dFtyLmJpbjFdLHM9ZVtyLmJpbjBdLGw9ZVtyLmJpbjFdLGM9by1pfHwwLHU9cy1pfHwwO3JldHVybiBhPXZvaWQgMD09PW8/dm9pZCAwPT09bD8wOnZvaWQgMD09PXM/MioobC1pKToyKigyKmwtcy1pKS8zOnZvaWQgMD09PWw/dm9pZCAwPT09cz8wOjIqKDIqaS1vLXMpLzM6dm9pZCAwPT09cz8yKigyKmwtby1pKS8zOmwraS1vLXMsVHQoaStyLmZyYWMqYytuLmZyYWMqKHUrci5mcmFjKmEpKX19KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjUxLCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzUzLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiQHBsb3RseS9kMyI6NTgsdGlueWNvbG9yMjo1NzJ9XSwxMDcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuaG0gaW1hZ2UiKS5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyYWNlLm9wYWNpdHl9KSl9fSx7IkBwbG90bHkvZDMiOjU4fV0sMTA3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyExPT09cigienNtb290aCIpJiYocigieGdhcCIpLHIoInlnYXAiKSkscigiemhvdmVyZm9ybWF0Iil9fSx7fV0sMTA3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIG8odCxlKXt2YXIgcj1lKHQpO3JldHVybiJzY2FsZWQiPT09KHI/ZSh0KyJ0eXBlIiwiYXJyYXkiKToic2NhbGVkIikmJihlKHQrIjAiKSxlKCJkIit0KSkscn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsLGMpe3ZhciB1LGYsaD1yKCJ6Iik7aWYobD1sfHwieCIsYz1jfHwieSIsdm9pZCAwPT09aHx8IWgubGVuZ3RoKXJldHVybiAwO2lmKGkuaXNBcnJheTFEKHQueikpe3U9cihsKSxmPXIoYyk7dmFyIHA9aS5taW5Sb3dMZW5ndGgodSksZD1pLm1pblJvd0xlbmd0aChmKTtpZigwPT09cHx8MD09PWQpcmV0dXJuIDA7ZS5fbGVuZ3RoPU1hdGgubWluKHAsZCxoLmxlbmd0aCl9ZWxzZXtpZih1PW8obCxyKSxmPW8oYyxyKSwhZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9ITAsYT0hMSxvPSExLHM9MDtzPHQubGVuZ3RoO3MrKyl7aWYoZT10W3NdLCFpLmlzQXJyYXlPclR5cGVkQXJyYXkoZSkpe3I9ITE7YnJlYWt9ZS5sZW5ndGg+MCYmKGE9ITApO2Zvcih2YXIgbD0wO2w8ZS5sZW5ndGg7bCsrKWlmKG4oZVtsXSkpe289ITA7YnJlYWt9fXJldHVybiByJiZhJiZvfShoKSlyZXR1cm4gMDtyKCJ0cmFuc3Bvc2UiKSxlLl9sZW5ndGg9bnVsbH1yZXR1cm4iaGVhdG1hcGdsIj09PXQudHlwZXx8YS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsW2wsY10scyksITB9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sMTA3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIG49dCgiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwscz1bInoiLCJ4IiwieDAiLCJkeCIsInkiLCJ5MCIsImR5IiwidGV4dCIsInRyYW5zcG9zZSIsInh0eXBlIiwieXR5cGUiXSxsPXt9LGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHU9c1tjXTtsW3VdPW5bdV19bC56c21vb3RoPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmYXN0IiwhMV0sZGZsdDoiZmFzdCIsZWRpdFR5cGU6ImNhbGMifSxhKGwsaSgiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMX0pKSxlLmV4cG9ydHM9byhsLCJjYWxjIiwibmVzdGVkIil9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY0NiwiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MDksIi4uL2hlYXRtYXAvYXR0cmlidXRlcyI6MTA1OH1dLDEwNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtaGVhdG1hcDJkIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpO2Z1bmN0aW9uIG8odCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLnR5cGU9ImhlYXRtYXBnbCIsdGhpcy5uYW1lPSIiLHRoaXMuaG92ZXJpbmZvPSJhbGwiLHRoaXMueERhdGE9W10sdGhpcy55RGF0YT1bXSx0aGlzLnpEYXRhPVtdLHRoaXMudGV4dExhYmVscz1bXSx0aGlzLmlkVG9JbmRleD1bXSx0aGlzLmJvdW5kcz1bMCwwLDAsMF0sdGhpcy5vcHRpb25zPXt6c21vb3RoOiJmYXN0Iix6OltdLHg6W10seTpbXSxzaGFwZTpbMCwwXSxjb2xvckxldmVsczpbMF0sY29sb3JWYWx1ZXM6WzAsMCwwLDFdfSx0aGlzLmhlYXRtYXA9bih0LmdscGxvdCx0aGlzLm9wdGlvbnMpLHRoaXMuaGVhdG1hcC5fdHJhY2U9dGhpc312YXIgcz1vLnByb3RvdHlwZTtzLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLHI9ZS5zaGFwZSxuPXQucG9pbnRJZCxpPW4lclswXSxhPU1hdGguZmxvb3Iobi9yWzBdKSxvPW47cmV0dXJue3RyYWNlOnRoaXMsZGF0YUNvb3JkOnQuZGF0YUNvb3JkLHRyYWNlQ29vcmQ6W2UueFtpXSxlLnlbYV0sZS56W29dXSx0ZXh0TGFiZWw6dGhpcy50ZXh0TGFiZWxzW25dLG5hbWU6dGhpcy5uYW1lLHBvaW50SW5kZXg6W2EsaV0saG92ZXJpbmZvOnRoaXMuaG92ZXJpbmZvfX0scy51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3RoaXMuaW5kZXg9dC5pbmRleCx0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaG92ZXJpbmZvPXQuaG92ZXJpbmZvO3ZhciBuPXIuejt0aGlzLm9wdGlvbnMuej1bXS5jb25jYXQuYXBwbHkoW10sbik7dmFyIG89blswXS5sZW5ndGgscz1uLmxlbmd0aDt0aGlzLm9wdGlvbnMuc2hhcGU9W28sc10sdGhpcy5vcHRpb25zLng9ci54LHRoaXMub3B0aW9ucy55PXIueSx0aGlzLm9wdGlvbnMuenNtb290aD10LnpzbW9vdGg7dmFyIGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY29sb3JzY2FsZSxyPXQuem1pbixuPXQuem1heCxpPWUubGVuZ3RoLG89bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KDQqaSksbD0wO2w8aTtsKyspe3ZhciBjPWVbbF0sdT1hKGNbMV0pO29bbF09citjWzBdKihuLXIpO2Zvcih2YXIgZj0wO2Y8NDtmKyspc1s0KmwrZl09dVtmXX1yZXR1cm57Y29sb3JMZXZlbHM6byxjb2xvclZhbHVlczpzfX0odCk7dGhpcy5vcHRpb25zLmNvbG9yTGV2ZWxzPWwuY29sb3JMZXZlbHMsdGhpcy5vcHRpb25zLmNvbG9yVmFsdWVzPWwuY29sb3JWYWx1ZXMsdGhpcy50ZXh0TGFiZWxzPVtdLmNvbmNhdC5hcHBseShbXSx0LnRleHQpLHRoaXMuaGVhdG1hcC51cGRhdGUodGhpcy5vcHRpb25zKTt2YXIgYyx1LGY9dGhpcy5zY2VuZS54YXhpcyxoPXRoaXMuc2NlbmUueWF4aXM7ITE9PT10LnpzbW9vdGgmJihjPXtwcGFkOnIueFsxXS1yLnhbMF19LHU9e3BwYWQ6ci55WzFdLXIueVswXX0pLHQuX2V4dHJlbWVzW2YuX2lkXT1pLmZpbmRFeHRyZW1lcyhmLHIueCxjKSx0Ll9leHRyZW1lc1toLl9pZF09aS5maW5kRXh0cmVtZXMoaCxyLnksdSl9LHMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuaGVhdG1hcC5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IG8odCxlLnVpZCk7cmV0dXJuIG4udXBkYXRlKGUsciksbn19LHsiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6ODAxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCJnbC1oZWF0bWFwMmQiOjI2N31dLDEwNzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0cyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWkodCxlLGwscyk/KGwoInRleHQiKSxsKCJ6c21vb3RoIiksYSh0LGUscyxsLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY0OSwiLi4vLi4vbGliIjo3NzYsIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIjoxMDcyLCIuL2F0dHJpYnV0ZXMiOjEwNzN9XSwxMDc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO1siKmhlYXRtYXBnbCogdHJhY2UgaXMgZGVwcmVjYXRlZCEiLCJQbGVhc2UgY29uc2lkZXIgc3dpdGNoaW5nIHRvIHRoZSAqaGVhdG1hcCogb3IgKmltYWdlKiB0cmFjZSB0eXBlcy4iLCJBbHRlcm5hdGl2ZWx5IHlvdSBjb3VsZCBjb250cmlidXRlL3Nwb25zb3IgcmV3cml0aW5nIHRoaXMgdHJhY2UgdHlwZSIsImJhc2VkIG9uIGNhcnRlc2lhbiBmZWF0dXJlcyBhbmQgdXNpbmcgcmVnbCBmcmFtZXdvcmsuIl0uam9pbigiICIpO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLGNhbGM6dCgiLi4vaGVhdG1hcC9jYWxjIikscGxvdDp0KCIuL2NvbnZlcnQiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaGVhdG1hcGdsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDJkIiksY2F0ZWdvcmllczpbImdsIiwiZ2wyZCIsIjJkTWFwIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wyZCI6ODY3LCIuLi9oZWF0bWFwL2NhbGMiOjEwNTksIi4uL2hlYXRtYXAvY29sb3JiYXIiOjEwNjEsIi4vYXR0cmlidXRlcyI6MTA3MywiLi9jb252ZXJ0IjoxMDc0LCIuL2RlZmF1bHRzIjoxMDc1fV0sMTA3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9iYXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLG89dCgiLi9iaW5fYXR0cmlidXRlcyIpLHM9dCgiLi9jb25zdGFudHMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17eDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHhob3ZlcmZvcm1hdDppKCJ4IikseWhvdmVyZm9ybWF0OmkoInkiKSx0ZXh0Omwoe30sbi50ZXh0LHt9KSxob3ZlcnRleHQ6bCh7fSxuLmhvdmVydGV4dCx7fSksb3JpZW50YXRpb246bi5vcmllbnRhdGlvbixoaXN0ZnVuYzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY291bnQiLCJzdW0iLCJhdmciLCJtaW4iLCJtYXgiXSxkZmx0OiJjb3VudCIsZWRpdFR5cGU6ImNhbGMifSxoaXN0bm9ybTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiIiwicGVyY2VudCIsInByb2JhYmlsaXR5IiwiZGVuc2l0eSIsInByb2JhYmlsaXR5IGRlbnNpdHkiXSxkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sY3VtdWxhdGl2ZTp7ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5jcmVhc2luZyIsImRlY3JlYXNpbmciXSxkZmx0OiJpbmNyZWFzaW5nIixlZGl0VHlwZToiY2FsYyJ9LGN1cnJlbnRiaW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluY2x1ZGUiLCJleGNsdWRlIiwiaGFsZiJdLGRmbHQ6ImluY2x1ZGUiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxuYmluc3g6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHhiaW5zOm8oIngiLCEwKSxuYmluc3k6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHliaW5zOm8oInkiLCEwKSxhdXRvYmlueDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjIn0sYXV0b2Jpbnk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyJ9LGJpbmdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRlbXBsYXRlOmEoe30se2tleXM6cy5ldmVudERhdGFLZXlzfSksbWFya2VyOm4ubWFya2VyLG9mZnNldGdyb3VwOm4ub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6bi5hbGlnbm1lbnRncm91cCxzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLF9kZXByZWNhdGVkOntiYXJkaXI6bi5fZGVwcmVjYXRlZC5iYXJkaXJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo4MzAsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OSwiLi4vYmFyL2F0dHJpYnV0ZXMiOjkxNCwiLi9iaW5fYXR0cmlidXRlcyI6MTA3OSwiLi9jb25zdGFudHMiOjEwODN9XSwxMDc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTAsaT0wO2k8cjtpKyspZVtpXT8odFtpXS89ZVtpXSxuKz10W2ldKTp0W2ldPW51bGw7cmV0dXJuIG59fSx7fV0sMTA3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57c3RhcnQ6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxlbmQ6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxzaXplOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifX19LHt9XSwxMDgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIik7ZS5leHBvcnRzPXtjb3VudDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHJbdF0rKywxfSxzdW06ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9aVtlXTtyZXR1cm4gbihhKT8oYT1OdW1iZXIoYSksclt0XSs9YSxhKTowfSxhdmc6ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbz1pW2VdO3JldHVybiBuKG8pJiYobz1OdW1iZXIobyksclt0XSs9byxhW3RdKyspLDB9LG1pbjpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO2lmKG4oYSkpe2lmKGE9TnVtYmVyKGEpLCFuKHJbdF0pKXJldHVybiByW3RdPWEsYTtpZihyW3RdPmEpe3ZhciBvPWEtclt0XTtyZXR1cm4gclt0XT1hLG99fXJldHVybiAwfSxtYXg6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9aVtlXTtpZihuKGEpKXtpZihhPU51bWJlcihhKSwhbihyW3RdKSlyZXR1cm4gclt0XT1hLGE7aWYoclt0XTxhKXt2YXIgbz1hLXJbdF07cmV0dXJuIHJbdF09YSxvfX1yZXR1cm4gMH19fSx7ImZhc3QtaXNudW1lcmljIjoyNDJ9XSwxMDgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxpPW4uT05FQVZHWUVBUixhPW4uT05FQVZHTU9OVEgsbz1uLk9ORURBWSxzPW4uT05FSE9VUixsPW4uT05FTUlOLGM9bi5PTkVTRUMsdT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLnRpY2tJbmNyZW1lbnQ7ZnVuY3Rpb24gZih0LGUscixuKXtpZih0KmU8PTApcmV0dXJuIDEvMDtmb3IodmFyIGk9TWF0aC5hYnMoZS10KSxhPSJkYXRlIj09PXIudHlwZSxvPWgoaSxhKSxzPTA7czwxMDtzKyspe3ZhciBsPWgoODAqbyxhKTtpZihvPT09bClicmVhaztpZighcChsLHQsZSxhLHIsbikpYnJlYWs7bz1sfXJldHVybiBvfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gZSYmdD5jP3Q+bz90PjEuMSppP2k6dD4xLjEqYT9hOm86dD5zP3M6dD5sP2w6YzpNYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4xMCkpfWZ1bmN0aW9uIHAodCxlLHIsbixhLHMpe2lmKG4mJnQ+byl7dmFyIGw9ZChlLGEscyksYz1kKHIsYSxzKSx1PXQ9PT1pPzA6MTtyZXR1cm4gbFt1XSE9PWNbdV19cmV0dXJuIE1hdGguZmxvb3Ioci90KS1NYXRoLmZsb29yKGUvdCk+LjF9ZnVuY3Rpb24gZCh0LGUscil7dmFyIG49ZS5jMmQodCxpLHIpLnNwbGl0KCItIik7cmV0dXJuIiI9PT1uWzBdJiYobi51bnNoaWZ0KCksblswXT0iLSIrblswXSksbn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgcyxsLGM9LTEuMSplLGg9LS4xKmUscD10LWgsZD1yWzBdLG09clsxXSxnPU1hdGgubWluKGYoZCtoLGQrcCxuLGEpLGYobStoLG0rcCxuLGEpKSx2PU1hdGgubWluKGYoZCtjLGQraCxuLGEpLGYobStjLG0raCxuLGEpKTtpZihnPnYmJnY8TWF0aC5hYnMobS1kKS80ZTM/KHM9ZyxsPSExKToocz1NYXRoLm1pbihnLHYpLGw9ITApLCJkYXRlIj09PW4udHlwZSYmcz5vKXt2YXIgeT1zPT09aT8xOjYseD1zPT09aT8iTTEyIjoiTTEiO3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBvPW4uYzJkKGUsaSxhKSxzPW8uaW5kZXhPZigiLSIseSk7cz4wJiYobz1vLnN1YnN0cigwLHMpKTt2YXIgYz1uLmQyYyhvLDAsYSk7aWYoYzxlKXt2YXIgZj11KGMseCwhMSxhKTsoYytmKS8yPGUrdCYmKGM9Zil9cmV0dXJuIHImJmw/dShjLHgsITAsYSk6Y319cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG49cypNYXRoLnJvdW5kKGUvcyk7cmV0dXJuIG4rcy8xMDxlJiZuKy45KnM8ZSt0JiYobis9cyksciYmbCYmKG4tPXMpLG59fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4Mjd9XSwxMDgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHM9dCgiLi4vYmFyL2FycmF5c190b19jYWxjZGF0YSIpLGw9dCgiLi9iaW5fZnVuY3Rpb25zIiksYz10KCIuL25vcm1fZnVuY3Rpb25zIiksdT10KCIuL2F2ZXJhZ2UiKSxmPXQoIi4vYmluX2xhYmVsX3ZhbHMiKTtmdW5jdGlvbiBoKHQsZSxyLHMsbCl7dmFyIGMsdSxmLHAsZCxtLGcsdj1zKyJiaW5zIix5PXQuX2Z1bGxMYXlvdXQseD1lWyJfIitzKyJiaW5ncm91cCJdLGI9eS5faGlzdG9ncmFtQmluT3B0c1t4XSxfPSJvdmVybGF5Ij09PXkuYmFybW9kZSx3PWZ1bmN0aW9uKHQpe3JldHVybiByLnIyYyh0LDAscCl9LFQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuYzJyKHQsMCxwKX0saz0iZGF0ZSI9PT1yLnR5cGU/ZnVuY3Rpb24odCl7cmV0dXJuIHR8fDA9PT10P2kuY2xlYW5EYXRlKHQsbnVsbCxwKTpudWxsfTpmdW5jdGlvbih0KXtyZXR1cm4gbih0KT9OdW1iZXIodCk6bnVsbH07ZnVuY3Rpb24gQSh0LGUscil7ZVt0KyJGb3VuZCJdPyhlW3RdPWsoZVt0XSksbnVsbD09PWVbdF0mJihlW3RdPXJbdF0pKToobVt0XT1lW3RdPXJbdF0saS5uZXN0ZWRQcm9wZXJ0eSh1WzBdLHYrIi4iK3QpLnNldChyW3RdKSl9aWYoZVsiXyIrcysiYXV0b0JpbkZpbmlzaGVkIl0pZGVsZXRlIGVbIl8iK3MrImF1dG9CaW5GaW5pc2hlZCJdO2Vsc2V7dT1iLnRyYWNlczt2YXIgTT1bXSxTPSEwLEU9ITEsTD0hMTtmb3IoYz0wO2M8dS5sZW5ndGg7YysrKWlmKChmPXVbY10pLnZpc2libGUpe3ZhciBDPWIuZGlyc1tjXTtkPWZbIl8iK0MrInBvczAiXT1yLm1ha2VDYWxjZGF0YShmLEMpLE09aS5jb25jYXQoTSxkKSxkZWxldGUgZlsiXyIrcysiYXV0b0JpbkZpbmlzaGVkIl0sITA9PT1lLnZpc2libGUmJihTP1M9ITE6KGRlbGV0ZSBmLl9hdXRvQmluLGZbIl8iK3MrImF1dG9CaW5GaW5pc2hlZCJdPTEpLGEudHJhY2VJcyhmLCIyZE1hcCIpJiYoRT0hMCksImhpc3RvZ3JhbTJkY29udG91ciI9PT1mLnR5cGUmJihMPSEwKSl9cD11WzBdW3MrImNhbGVuZGFyIl07dmFyIFA9by5hdXRvQmluKE0scixiLm5iaW5zLEUscCxiLnNpemVGb3VuZCYmYi5zaXplKSxJPXVbMF0uX2F1dG9CaW49e307aWYobT1JW2IuZGlyc1swXV09e30sTCYmKGIuc2l6ZXx8KFAuc3RhcnQ9VChvLnRpY2tJbmNyZW1lbnQodyhQLnN0YXJ0KSxQLnNpemUsITAscCkpKSx2b2lkIDA9PT1iLmVuZCYmKFAuZW5kPVQoby50aWNrSW5jcmVtZW50KHcoUC5lbmQpLFAuc2l6ZSwhMSxwKSkpKSxfJiYhYS50cmFjZUlzKGUsIjJkTWFwIikmJjA9PT1QLl9kYXRhU3BhbiYmImNhdGVnb3J5IiE9PXIudHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09ci50eXBlKXtpZihsKXJldHVybltQLGQsITBdO1A9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbyxzLGwsYz10Ll9mdWxsTGF5b3V0LHU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS54YXhpcyxuPWUueWF4aXMsaT1lLm9yaWVudGF0aW9uLGE9W10sbz10Ll9mdWxsRGF0YSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107Imhpc3RvZ3JhbSI9PT1sLnR5cGUmJiEwPT09bC52aXNpYmxlJiZsLm9yaWVudGF0aW9uPT09aSYmbC54YXhpcz09PXImJmwueWF4aXM9PT1uJiZhLnB1c2gobCl9cmV0dXJuIGF9KHQsZSksZj0hMSxwPTEvMCxkPVtlXTtmb3Iobz0wO288dS5sZW5ndGg7bysrKWlmKChzPXVbb10pPT09ZSlmPSEwO2Vsc2UgaWYoZil7dmFyIG09aCh0LHMscixuLCEwKSxnPW1bMF0sdj1tWzJdO3NbIl8iK24rImF1dG9CaW5GaW5pc2hlZCJdPTEsc1siXyIrbisicG9zMCJdPW1bMV0sdj9kLnB1c2gocyk6cD1NYXRoLm1pbihwLGcuc2l6ZSl9ZWxzZSBsPWMuX2hpc3RvZ3JhbUJpbk9wdHNbc1siXyIrbisiYmluZ3JvdXAiXV0scD1NYXRoLm1pbihwLGwuc2l6ZXx8c1thXS5zaXplKTt2YXIgeT1uZXcgQXJyYXkoZC5sZW5ndGgpO2ZvcihvPTA7bzxkLmxlbmd0aDtvKyspZm9yKHZhciB4PWRbb11bIl8iK24rInBvczAiXSxiPTA7Yjx4Lmxlbmd0aDtiKyspaWYodm9pZCAwIT09eFtiXSl7eVtvXT14W2JdO2JyZWFrfWlzRmluaXRlKHApfHwocD1pLmRpc3RpbmN0VmFscyh5KS5taW5EaWZmKTtmb3Iobz0wO288ZC5sZW5ndGg7bysrKXt2YXIgXz0ocz1kW29dKVtuKyJjYWxlbmRhciJdLHc9e3N0YXJ0OnIuYzJyKHlbb10tcC8yLDAsXyksZW5kOnIuYzJyKHlbb10rcC8yLDAsXyksc2l6ZTpwfTtzLl9pbnB1dFthXT1zW2FdPXcsKGw9Yy5faGlzdG9ncmFtQmluT3B0c1tzWyJfIituKyJiaW5ncm91cCJdXSkmJmkuZXh0ZW5kRmxhdChsLHcpfXJldHVybiBlW2FdfSh0LGUscixzLHYpfShnPWYuY3VtdWxhdGl2ZXx8e30pLmVuYWJsZWQmJiJpbmNsdWRlIiE9PWcuY3VycmVudGJpbiYmKCJkZWNyZWFzaW5nIj09PWcuZGlyZWN0aW9uP1Auc3RhcnQ9VChvLnRpY2tJbmNyZW1lbnQodyhQLnN0YXJ0KSxQLnNpemUsITAscCkpOlAuZW5kPVQoby50aWNrSW5jcmVtZW50KHcoUC5lbmQpLFAuc2l6ZSwhMSxwKSkpLGIuc2l6ZT1QLnNpemUsYi5zaXplRm91bmR8fChtLnNpemU9UC5zaXplLGkubmVzdGVkUHJvcGVydHkodVswXSx2KyIuc2l6ZSIpLnNldChQLnNpemUpKSxBKCJzdGFydCIsYixQKSxBKCJlbmQiLGIsUCl9ZD1lWyJfIitzKyJwb3MwIl0sZGVsZXRlIGVbIl8iK3MrInBvczAiXTt2YXIgTz1lLl9pbnB1dFt2XXx8e30sej1pLmV4dGVuZEZsYXQoe30sYiksRD1iLnN0YXJ0LFI9ci5yMmwoTy5zdGFydCksRj12b2lkIDAhPT1SO2lmKChiLnN0YXJ0Rm91bmR8fEYpJiZSIT09ci5yMmwoRCkpe3ZhciBCPUY/UjppLmFnZ051bXMoTWF0aC5taW4sbnVsbCxkKSxOPXt0eXBlOiJjYXRlZ29yeSI9PT1yLnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXIudHlwZT8ibGluZWFyIjpyLnR5cGUscjJsOnIucjJsLGR0aWNrOmIuc2l6ZSx0aWNrMDpELGNhbGVuZGFyOnAscmFuZ2U6W0Isby50aWNrSW5jcmVtZW50KEIsYi5zaXplLCExLHApXS5tYXAoci5sMnIpfSxqPW8udGlja0ZpcnN0KE4pO2o+ci5yMmwoQikmJihqPW8udGlja0luY3JlbWVudChqLGIuc2l6ZSwhMCxwKSksei5zdGFydD1yLmwycihqKSxGfHxpLm5lc3RlZFByb3BlcnR5KGUsdisiLnN0YXJ0Iikuc2V0KHouc3RhcnQpfXZhciBVPWIuZW5kLFY9ci5yMmwoTy5lbmQpLEg9dm9pZCAwIT09VjtpZigoYi5lbmRGb3VuZHx8SCkmJlYhPT1yLnIybChVKSl7dmFyIHE9SD9WOmkuYWdnTnVtcyhNYXRoLm1heCxudWxsLGQpO3ouZW5kPXIubDJyKHEpLEh8fGkubmVzdGVkUHJvcGVydHkoZSx2KyIuc3RhcnQiKS5zZXQoei5lbmQpfXZhciBHPSJhdXRvYmluIitzO3JldHVybiExPT09ZS5faW5wdXRbR10mJihlLl9pbnB1dFt2XT1pLmV4dGVuZEZsYXQoe30sZVt2XXx8e30pLGRlbGV0ZSBlLl9pbnB1dFtHXSxkZWxldGUgZVtHXSksW3osZF19ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxwLGQsbT1bXSxnPVtdLHY9by5nZXRGcm9tSWQodCwiaCI9PT1lLm9yaWVudGF0aW9uP2UueWF4aXM6ZS54YXhpcykseT0iaCI9PT1lLm9yaWVudGF0aW9uPyJ5IjoieCIseD17eDoieSIseToieCJ9W3ldLGI9ZVt5KyJjYWxlbmRhciJdLF89ZS5jdW11bGF0aXZlLHc9aCh0LGUsdix5KSxUPXdbMF0saz13WzFdLEE9InN0cmluZyI9PXR5cGVvZiBULnNpemUsTT1bXSxTPUE/TTpULEU9W10sTD1bXSxDPVtdLFA9MCxJPWUuaGlzdG5vcm0sTz1lLmhpc3RmdW5jLHo9LTEhPT1JLmluZGV4T2YoImRlbnNpdHkiKTtfLmVuYWJsZWQmJnomJihJPUkucmVwbGFjZSgvID9kZW5zaXR5JC8sIiIpLHo9ITEpO3ZhciBELFI9Im1heCI9PT1PfHwibWluIj09PU8/bnVsbDowLEY9bC5jb3VudCxCPWNbSV0sTj0hMSxqPWZ1bmN0aW9uKHQpe3JldHVybiB2LnIyYyh0LDAsYil9O2ZvcihpLmlzQXJyYXlPclR5cGVkQXJyYXkoZVt4XSkmJiJjb3VudCIhPT1PJiYoRD1lW3hdLE49ImF2ZyI9PT1PLEY9bFtPXSkscj1qKFQuc3RhcnQpLHA9aihULmVuZCkrKHItby50aWNrSW5jcmVtZW50KHIsVC5zaXplLCExLGIpKS8xZTY7cjxwJiZtLmxlbmd0aDwxZTYmJihhPW8udGlja0luY3JlbWVudChyLFQuc2l6ZSwhMSxiKSxtLnB1c2goKHIrYSkvMiksZy5wdXNoKFIpLEMucHVzaChbXSksTS5wdXNoKHIpLHomJkUucHVzaCgxLyhhLXIpKSxOJiZMLnB1c2goMCksIShhPD1yKSk7KXI9YTtNLnB1c2gociksQXx8ImRhdGUiIT09di50eXBlfHwoUz17c3RhcnQ6aihTLnN0YXJ0KSxlbmQ6aihTLmVuZCksc2l6ZTpTLnNpemV9KSx0Ll9mdWxsTGF5b3V0Ll9yb3VuZEZuT3B0c3x8KHQuX2Z1bGxMYXlvdXQuX3JvdW5kRm5PcHRzPXt9KTt2YXIgVT1lWyJfIit5KyJiaW5ncm91cCJdLFY9e2xlZnRHYXA6MS8wLHJpZ2h0R2FwOjEvMH07VSYmKHQuX2Z1bGxMYXlvdXQuX3JvdW5kRm5PcHRzW1VdfHwodC5fZnVsbExheW91dC5fcm91bmRGbk9wdHNbVV09ViksVj10Ll9mdWxsTGF5b3V0Ll9yb3VuZEZuT3B0c1tVXSk7dmFyIEgscT1nLmxlbmd0aCxHPSEwLFk9Vi5sZWZ0R2FwLFc9Vi5yaWdodEdhcCxYPXt9O2ZvcihyPTA7cjxrLmxlbmd0aDtyKyspe3ZhciBaPWtbcl07KGQ9aS5maW5kQmluKFosUykpPj0wJiZkPHEmJihQKz1GKGQscixnLEQsTCksRyYmQ1tkXS5sZW5ndGgmJlohPT1rW0NbZF1bMF1dJiYoRz0hMSksQ1tkXS5wdXNoKHIpLFhbcl09ZCxZPU1hdGgubWluKFksWi1NW2RdKSxXPU1hdGgubWluKFcsTVtkKzFdLVopKX1WLmxlZnRHYXA9WSxWLnJpZ2h0R2FwPVcsR3x8KEg9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10Ll9mdWxsTGF5b3V0Ll9yb3VuZEZuT3B0c1tVXTtyZXR1cm4gZihuLmxlZnRHYXAsbi5yaWdodEdhcCxNLHYsYikoZSxyKX19KSxOJiYoUD11KGcsTCkpLEImJkIoZyxQLEUpLF8uZW5hYmxlZCYmZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYTtmdW5jdGlvbiBvKGUpe2E9dFtlXSx0W2VdLz0yfWZ1bmN0aW9uIHMoZSl7aT10W2VdLHRbZV09YStpLzIsYSs9aX1pZigiaGFsZiI9PT1yKWlmKCJpbmNyZWFzaW5nIj09PWUpZm9yKG8oMCksbj0xO248dC5sZW5ndGg7bisrKXMobik7ZWxzZSBmb3Iobyh0Lmxlbmd0aC0xKSxuPXQubGVuZ3RoLTI7bj49MDtuLS0pcyhuKTtlbHNlIGlmKCJpbmNyZWFzaW5nIj09PWUpe2ZvcihuPTE7bjx0Lmxlbmd0aDtuKyspdFtuXSs9dFtuLTFdOyJleGNsdWRlIj09PXImJih0LnVuc2hpZnQoMCksdC5wb3AoKSl9ZWxzZXtmb3Iobj10Lmxlbmd0aC0yO24+PTA7bi0tKXRbbl0rPXRbbisxXTsiZXhjbHVkZSI9PT1yJiYodC5wdXNoKDApLHQuc2hpZnQoKSl9fShnLF8uZGlyZWN0aW9uLF8uY3VycmVudGJpbik7dmFyIEo9TWF0aC5taW4obS5sZW5ndGgsZy5sZW5ndGgpLEs9W10sUT0wLCQ9Si0xO2ZvcihyPTA7cjxKO3IrKylpZihnW3JdKXtRPXI7YnJlYWt9Zm9yKHI9Si0xO3I+PVE7ci0tKWlmKGdbcl0peyQ9cjticmVha31mb3Iocj1RO3I8PSQ7cisrKWlmKG4obVtyXSkmJm4oZ1tyXSkpe3ZhciB0dD17cDptW3JdLHM6Z1tyXSxiOjB9O18uZW5hYmxlZHx8KHR0LnB0cz1DW3JdLEc/dHQucGgwPXR0LnBoMT1DW3JdLmxlbmd0aD9rW0Nbcl1bMF1dOm1bcl06KGUuX2NvbXB1dGVQaD0hMCx0dC5waDA9SChNW3JdKSx0dC5waDE9SChNW3IrMV0sITApKSksSy5wdXNoKHR0KX1yZXR1cm4gMT09PUsubGVuZ3RoJiYoS1swXS53aWR0aDE9by50aWNrSW5jcmVtZW50KEtbMF0ucCxULnNpemUsITEsYiktS1swXS5wKSxzKEssZSksaS5pc0FycmF5T3JUeXBlZEFycmF5KGUuc2VsZWN0ZWRwb2ludHMpJiZpLnRhZ1NlbGVjdGVkKEssZSxYKSxLfSxjYWxjQWxsQXV0b0JpbnM6aH19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGEiOjkxMywiLi9hdmVyYWdlIjoxMDc4LCIuL2Jpbl9mdW5jdGlvbnMiOjEwODAsIi4vYmluX2xhYmVsX3ZhbHMiOjEwODEsIi4vbm9ybV9mdW5jdGlvbnMiOjEwODksImZhc3QtaXNudW1lcmljIjoyNDJ9XSwxMDgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZXZlbnREYXRhS2V5czpbImJpbk51bWJlciJdfX0se31dLDEwODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5IikudHJhY2VJcyxvPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMscz1uLm5lc3RlZFByb3BlcnR5LGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIikuZ2V0QXhpc0dyb3VwLGM9W3thU3RyOnt4OiJ4Ymlucy5zdGFydCIseToieWJpbnMuc3RhcnQifSxuYW1lOiJzdGFydCJ9LHthU3RyOnt4OiJ4Ymlucy5lbmQiLHk6InliaW5zLmVuZCJ9LG5hbWU6ImVuZCJ9LHthU3RyOnt4OiJ4Ymlucy5zaXplIix5OiJ5Ymlucy5zaXplIn0sbmFtZToic2l6ZSJ9LHthU3RyOnt4OiJuYmluc3giLHk6Im5iaW5zeSJ9LG5hbWU6Im5iaW5zIn1dLHU9WyJ4IiwieSJdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGYsaCxwLGQsbSxnLHY9ZS5faGlzdG9ncmFtQmluT3B0cz17fSx5PVtdLHg9e30sYj1bXTtmdW5jdGlvbiBfKHQsZSl7cmV0dXJuIG4uY29lcmNlKHIuX2lucHV0LHIsci5fbW9kdWxlLmF0dHJpYnV0ZXMsdCxlKX1mdW5jdGlvbiB3KHQpe3JldHVybiJ2Ij09PXQub3JpZW50YXRpb24/IngiOiJ5In1mdW5jdGlvbiBUKHQscixhKXt2YXIgbz10LnVpZCsiX18iK2E7cnx8KHI9byk7dmFyIHM9ZnVuY3Rpb24odCxyKXtyZXR1cm4gaS5nZXRGcm9tVHJhY2Uoe19mdWxsTGF5b3V0OmV9LHQscikudHlwZX0odCxhKSxsPXRbYSsiY2FsZW5kYXIiXXx8IiIsYz12W3JdLHU9ITA7YyYmKHM9PT1jLmF4VHlwZSYmbD09PWMuY2FsZW5kYXI/KHU9ITEsYy50cmFjZXMucHVzaCh0KSxjLmRpcnMucHVzaChhKSk6KHI9byxzIT09Yy5heFR5cGUmJm4ud2FybihbIkF0dGVtcHRlZCB0byBncm91cCB0aGUgYmlucyBvZiB0cmFjZSIsdC5pbmRleCwic2V0IG9uIGEiLCJ0eXBlOiIrcywiYXhpcyIsIndpdGggYmlucyBvbiIsInR5cGU6IitjLmF4VHlwZSwiYXhpcy4iXS5qb2luKCIgIikpLGwhPT1jLmNhbGVuZGFyJiZuLndhcm4oWyJBdHRlbXB0ZWQgdG8gZ3JvdXAgdGhlIGJpbnMgb2YgdHJhY2UiLHQuaW5kZXgsInNldCB3aXRoIGEiLGwsImNhbGVuZGFyIiwid2l0aCBiaW5zIixjLmNhbGVuZGFyPyJvbiBhICIrYy5jYWxlbmRhcisiIGNhbGVuZGFyIjoidy9vIGEgc2V0IGNhbGVuZGFyIl0uam9pbigiICIpKSkpLHUmJih2W3JdPXt0cmFjZXM6W3RdLGRpcnM6W2FdLGF4VHlwZTpzLGNhbGVuZGFyOnRbYSsiY2FsZW5kYXIiXXx8IiJ9KSx0WyJfIithKyJiaW5ncm91cCJdPXJ9Zm9yKGQ9MDtkPHQubGVuZ3RoO2QrKylyPXRbZF0sYShyLCJoaXN0b2dyYW0iKSYmKHkucHVzaChyKSxkZWxldGUgci5feGF1dG9CaW5GaW5pc2hlZCxkZWxldGUgci5feWF1dG9CaW5GaW5pc2hlZCxhKHIsIjJkTWFwIil8fG8oci5faW5wdXQscixlLF8pKTt2YXIgaz1lLl9hbGlnbm1lbnRPcHRzfHx7fTtmb3IoZD0wO2Q8eS5sZW5ndGg7ZCsrKXtpZihyPXlbZF0saD0iIiwhYShyLCIyZE1hcCIpKXtpZihwPXcociksImdyb3VwIj09PWUuYmFybW9kZSYmci5hbGlnbm1lbnRncm91cCl7dmFyIEE9cltwKyJheGlzIl0sTT1sKGUsQSkrci5vcmllbnRhdGlvbjsoa1tNXXx8e30pW3IuYWxpZ25tZW50Z3JvdXBdJiYoaD1NKX1ofHwib3ZlcmxheSI9PT1lLmJhcm1vZGV8fChoPWwoZSxyLnhheGlzKStsKGUsci55YXhpcykrdyhyKSl9aD8oeFtoXXx8KHhbaF09W10pLHhbaF0ucHVzaChyKSk6Yi5wdXNoKHIpfWZvcihoIGluIHgpaWYoMSE9PShmPXhbaF0pLmxlbmd0aCl7dmFyIFM9ITE7Zm9yKGYubGVuZ3RoJiYocj1mWzBdLFM9XygiYmluZ3JvdXAiKSksaD1TfHxoLGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIEU9KHI9ZltkXSkuX2lucHV0LmJpbmdyb3VwO0UmJkUhPT1oJiZuLndhcm4oWyJUcmFjZSIsci5pbmRleCwibXVzdCBtYXRjaCIsIndpdGhpbiBiaW5ncm91cCIsaCsiLiIsIklnbm9yaW5nIGl0cyBiaW5ncm91cDoiLEUsInNldHRpbmcuIl0uam9pbigiICIpKSxyLmJpbmdyb3VwPWgsVChyLGgsdyhyKSl9fWVsc2UgYi5wdXNoKGZbMF0pO2ZvcihkPTA7ZDxiLmxlbmd0aDtkKyspe3I9YltkXTt2YXIgTD1fKCJiaW5ncm91cCIpO2lmKGEociwiMmRNYXAiKSlmb3IoZz0wO2c8MjtnKyspe3ZhciBDPV8oKHA9dVtnXSkrImJpbmdyb3VwIixMP0wrIl9fIitwOm51bGwpO1QocixDLHApfWVsc2UgVChyLEwsdyhyKSl9Zm9yKGggaW4gdil7dmFyIFA9dltoXTtmb3IoZj1QLnRyYWNlcyxtPTA7bTxjLmxlbmd0aDttKyspe3ZhciBJLE8sej1jW21dLEQ9ei5uYW1lO2lmKCJuYmlucyIhPT1EfHwhUC5zaXplRm91bmQpe2ZvcihkPTA7ZDxmLmxlbmd0aDtkKyspe2lmKHI9ZltkXSxwPVAuZGlyc1tkXSxJPXouYVN0cltwXSx2b2lkIDAhPT1zKHIuX2lucHV0LEkpLmdldCgpKXtQW0RdPV8oSSksUFtEKyJGb3VuZCJdPSEwO2JyZWFrfShPPShyLl9hdXRvQmlufHx7fSlbcF18fHt9KVtEXSYmcyhyLEkpLnNldChPW0RdKX1pZigic3RhcnQiPT09RHx8ImVuZCI9PT1EKWZvcig7ZDxmLmxlbmd0aDtkKyspKHI9ZltkXSlbIl8iK3ArImJpbmdyb3VwIl0mJl8oSSwoTz0oci5fYXV0b0Jpbnx8e30pW3BdfHx7fSlbRF0pOyJuYmlucyIhPT1EfHxQLnNpemVGb3VuZHx8UC5uYmluc0ZvdW5kfHwocj1mWzBdLFBbRF09XyhJKSl9fX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIjo4MzUsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL2Jhci9kZWZhdWx0cyI6OTE4fV0sMTA4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi9iYXIvc3R5bGVfZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxzLHIsbil9dmFyIHU9YygieCIpLGY9YygieSIpO2MoImN1bXVsYXRpdmUuZW5hYmxlZCIpJiYoYygiY3VtdWxhdGl2ZS5kaXJlY3Rpb24iKSxjKCJjdW11bGF0aXZlLmN1cnJlbnRiaW4iKSksYygidGV4dCIpLGMoImhvdmVydGV4dCIpLGMoImhvdmVydGVtcGxhdGUiKSxjKCJ4aG92ZXJmb3JtYXQiKSxjKCJ5aG92ZXJmb3JtYXQiKTt2YXIgaD1jKCJvcmllbnRhdGlvbiIsZiYmIXU/ImgiOiJ2IikscD0idiI9PT1oPyJ4IjoieSIsZD0idiI9PT1oPyJ5IjoieCIsbT11JiZmP01hdGgubWluKGkubWluUm93TGVuZ3RoKHUpJiZpLm1pblJvd0xlbmd0aChmKSk6aS5taW5Sb3dMZW5ndGgoZVtwXXx8W10pO2lmKG0pe2UuX2xlbmd0aD1tLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiXSxsKSxlW2RdJiZjKCJoaXN0ZnVuYyIpLGMoImhpc3Rub3JtIiksYygiYXV0b2JpbiIrcCksbyh0LGUsYyxyLGwpLGkuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGMpO3ZhciBnPShlLm1hcmtlci5saW5lfHx7fSkuY29sb3Isdj1uLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTt2KHQsZSxnfHxhLmRlZmF1bHRMaW5lLHtheGlzOiJ5In0pLHYodCxlLGd8fGEuZGVmYXVsdExpbmUse2F4aXM6IngiLGluaGVyaXQ6InkifSl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL2Jhci9zdHlsZV9kZWZhdWx0cyI6OTI5LCIuL2F0dHJpYnV0ZXMiOjEwNzd9XSwxMDg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe2lmKHQueD0ieFZhbCJpbiBlP2UueFZhbDplLngsdC55PSJ5VmFsImluIGU/ZS55VmFsOmUueSwiekxhYmVsVmFsImluIGUmJih0Lno9ZS56TGFiZWxWYWwpLGUueGEmJih0LnhheGlzPWUueGEpLGUueWEmJih0LnlheGlzPWUueWEpLCEoci5jdW11bGF0aXZlfHx7fSkuZW5hYmxlZCl7dmFyIGEsbz1BcnJheS5pc0FycmF5KGkpP25bMF0ucHRzW2lbMF1dW2lbMV1dOm5baV0ucHRzO2lmKHQucG9pbnROdW1iZXJzPW8sdC5iaW5OdW1iZXI9dC5wb2ludE51bWJlcixkZWxldGUgdC5wb2ludE51bWJlcixkZWxldGUgdC5wb2ludEluZGV4LHIuX2luZGV4VG9Qb2ludHMpe2E9W107Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspYT1hLmNvbmNhdChyLl9pbmRleFRvUG9pbnRzW29bc11dKX1lbHNlIGE9bzt0LnBvaW50SW5kaWNlcz1hfXJldHVybiB0fX0se31dLDEwODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYmFyL2hvdmVyIikuaG92ZXJQb2ludHMsaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLmhvdmVyTGFiZWxUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe3ZhciBzPW4odCxlLHIsYSxvKTtpZihzKXt2YXIgbD0odD1zWzBdKS5jZFt0LmluZGV4XSxjPXQuY2RbMF0udHJhY2U7aWYoIWMuY3VtdWxhdGl2ZS5lbmFibGVkKXt2YXIgdT0iaCI9PT1jLm9yaWVudGF0aW9uPyJ5IjoieCI7dFt1KyJMYWJlbCJdPWkodFt1KyJhIl0sW2wucGgwLGwucGgxXSxjW3UrImhvdmVyZm9ybWF0Il0pfXJldHVybiBzfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vYmFyL2hvdmVyIjo5MjF9XSwxMDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4uL2Jhci9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi9jcm9zc190cmFjZV9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4uL2Jhci9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dCgiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4uL2Jhci9wbG90IikucGxvdCxsYXllck5hbWU6ImJhcmxheWVyIixzdHlsZTp0KCIuLi9iYXIvc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4uL2Jhci9zdHlsZSIpLnN0eWxlT25TZWxlY3QsY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL2Jhci9zZWxlY3QiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6Imhpc3RvZ3JhbSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImJhci1saWtlIiwiY2FydGVzaWFuIiwic3ZnIiwiYmFyIiwiaGlzdG9ncmFtIiwib3JpZW50ZWQiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiOjkxNywiLi4vYmFyL2xheW91dF9hdHRyaWJ1dGVzIjo5MjMsIi4uL2Jhci9sYXlvdXRfZGVmYXVsdHMiOjkyNCwiLi4vYmFyL3Bsb3QiOjkyNSwiLi4vYmFyL3NlbGVjdCI6OTI2LCIuLi9iYXIvc3R5bGUiOjkyOCwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEyMDksIi4vYXR0cmlidXRlcyI6MTA3NywiLi9jYWxjIjoxMDgyLCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIjoxMDg0LCIuL2RlZmF1bHRzIjoxMDg1LCIuL2V2ZW50X2RhdGEiOjEwODYsIi4vaG92ZXIiOjEwODd9XSwxMDg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17cGVyY2VudDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTEwMC9lLGk9MDtpPHI7aSsrKXRbaV0qPW59LHByb2JhYmlsaXR5OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49MDtuPHI7bisrKXRbbl0vPWV9LGRlbnNpdHk6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5sZW5ndGg7bj1ufHwxO2Zvcih2YXIgYT0wO2E8aTthKyspdFthXSo9clthXSpufSwicHJvYmFiaWxpdHkgZGVuc2l0eSI6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5sZW5ndGg7biYmKGUvPW4pO2Zvcih2YXIgYT0wO2E8aTthKyspdFthXSo9clthXS9lfX19LHt9XSwxMDkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hpc3RvZ3JhbS9hdHRyaWJ1dGVzIiksaT10KCIuLi9oaXN0b2dyYW0vYmluX2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2hlYXRtYXAvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsbD10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz11KHt4Om4ueCx5Om4ueSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1hcmtlcjp7Y29sb3I6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxoaXN0bm9ybTpuLmhpc3Rub3JtLGhpc3RmdW5jOm4uaGlzdGZ1bmMsbmJpbnN4Om4ubmJpbnN4LHhiaW5zOmkoIngiKSxuYmluc3k6bi5uYmluc3kseWJpbnM6aSgieSIpLGF1dG9iaW54Om4uYXV0b2JpbngsYXV0b2Jpbnk6bi5hdXRvYmlueSxiaW5ncm91cDp1KHt9LG4uYmluZ3JvdXAse30pLHhiaW5ncm91cDp1KHt9LG4uYmluZ3JvdXAse30pLHliaW5ncm91cDp1KHt9LG4uYmluZ3JvdXAse30pLHhnYXA6YS54Z2FwLHlnYXA6YS55Z2FwLHpzbW9vdGg6YS56c21vb3RoLHhob3ZlcmZvcm1hdDpzKCJ4IikseWhvdmVyZm9ybWF0OnMoInkiKSx6aG92ZXJmb3JtYXQ6cygieiIsMSksaG92ZXJ0ZW1wbGF0ZTpsKHt9LHtrZXlzOiJ6In0pLHNob3dsZWdlbmQ6dSh7fSxvLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0sYygiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMX0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODk5LCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjEwNTgsIi4uL2hpc3RvZ3JhbS9hdHRyaWJ1dGVzIjoxMDc3LCIuLi9oaXN0b2dyYW0vYmluX2F0dHJpYnV0ZXMiOjEwNzl9XSwxMDkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uL2hpc3RvZ3JhbS9iaW5fZnVuY3Rpb25zIiksbz10KCIuLi9oaXN0b2dyYW0vbm9ybV9mdW5jdGlvbnMiKSxzPXQoIi4uL2hpc3RvZ3JhbS9hdmVyYWdlIiksbD10KCIuLi9oaXN0b2dyYW0vYmluX2xhYmVsX3ZhbHMiKSxjPXQoIi4uL2hpc3RvZ3JhbS9jYWxjIikuY2FsY0FsbEF1dG9CaW5zO2Z1bmN0aW9uIHUodCxlLHIsbil7dmFyIGksYT1uZXcgQXJyYXkodCk7aWYobilmb3IoaT0wO2k8dDtpKyspYVtpXT0xLyhlW2krMV0tZVtpXSk7ZWxzZXt2YXIgbz0xL3I7Zm9yKGk9MDtpPHQ7aSsrKWFbaV09b31yZXR1cm4gYX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJue3N0YXJ0OnQoZS5zdGFydCksZW5kOnQoZS5lbmQpLHNpemU6ZS5zaXplfX1mdW5jdGlvbiBoKHQsZSxyLG4saSxhKXt2YXIgbyxzPXQubGVuZ3RoLTEsYz1uZXcgQXJyYXkocyksdT1sKHIsbix0LGksYSk7Zm9yKG89MDtvPHM7bysrKXt2YXIgZj0oZXx8W10pW29dO2Nbb109dm9pZCAwPT09Zj9bdSh0W29dKSx1KHRbbysxXSwhMCldOltmLGZdfXJldHVybiBjfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGwscCxkLG09aS5nZXRGcm9tSWQodCxlLnhheGlzKSxnPWkuZ2V0RnJvbUlkKHQsZS55YXhpcyksdj1lLnhjYWxlbmRhcix5PWUueWNhbGVuZGFyLHg9ZnVuY3Rpb24odCl7cmV0dXJuIG0ucjJjKHQsMCx2KX0sYj1mdW5jdGlvbih0KXtyZXR1cm4gZy5yMmModCwwLHkpfSxfPWModCxlLG0sIngiKSx3PV9bMF0sVD1fWzFdLGs9Yyh0LGUsZywieSIpLEE9a1swXSxNPWtbMV0sUz1lLl9sZW5ndGg7VC5sZW5ndGg+UyYmVC5zcGxpY2UoUyxULmxlbmd0aC1TKSxNLmxlbmd0aD5TJiZNLnNwbGljZShTLE0ubGVuZ3RoLVMpO3ZhciBFPVtdLEw9W10sQz1bXSxQPSJzdHJpbmciPT10eXBlb2Ygdy5zaXplLEk9InN0cmluZyI9PXR5cGVvZiBBLnNpemUsTz1bXSx6PVtdLEQ9UD9POncsUj1JP3o6QSxGPTAsQj1bXSxOPVtdLGo9ZS5oaXN0bm9ybSxVPWUuaGlzdGZ1bmMsVj0tMSE9PWouaW5kZXhPZigiZGVuc2l0eSIpLEg9Im1heCI9PT1VfHwibWluIj09PVU/bnVsbDowLHE9YS5jb3VudCxHPW9bal0sWT0hMSxXPVtdLFg9W10sWj0ieiJpbiBlP2UuejoibWFya2VyImluIGUmJkFycmF5LmlzQXJyYXkoZS5tYXJrZXIuY29sb3IpP2UubWFya2VyLmNvbG9yOiIiO1omJiJjb3VudCIhPT1VJiYoWT0iYXZnIj09PVUscT1hW1VdKTt2YXIgSj13LnNpemUsSz14KHcuc3RhcnQpLFE9eCh3LmVuZCkrKEstaS50aWNrSW5jcmVtZW50KEssSiwhMSx2KSkvMWU2O2ZvcihyPUs7cjxRO3I9aS50aWNrSW5jcmVtZW50KHIsSiwhMSx2KSlMLnB1c2goSCksTy5wdXNoKHIpLFkmJkMucHVzaCgwKTtPLnB1c2gocik7dmFyICQsdHQ9TC5sZW5ndGgsZXQ9KHItSykvdHQscnQ9KCQ9SytldC8yLG0uYzJyKCQsMCx2KSksbnQ9QS5zaXplLGl0PWIoQS5zdGFydCksYXQ9YihBLmVuZCkrKGl0LWkudGlja0luY3JlbWVudChpdCxudCwhMSx5KSkvMWU2O2ZvcihyPWl0O3I8YXQ7cj1pLnRpY2tJbmNyZW1lbnQocixudCwhMSx5KSl7RS5wdXNoKEwuc2xpY2UoKSksei5wdXNoKHIpO3ZhciBvdD1uZXcgQXJyYXkodHQpO2ZvcihsPTA7bDx0dDtsKyspb3RbbF09W107Ti5wdXNoKG90KSxZJiZCLnB1c2goQy5zbGljZSgpKX16LnB1c2gocik7dmFyIHN0PUUubGVuZ3RoLGx0PShyLWl0KS9zdCxjdD1mdW5jdGlvbih0KXtyZXR1cm4gZy5jMnIodCwwLHkpfShpdCtsdC8yKTtWJiYoVz11KEwubGVuZ3RoLEQsZXQsUCksWD11KEUubGVuZ3RoLFIsbHQsSSkpLFB8fCJkYXRlIiE9PW0udHlwZXx8KEQ9Zih4LEQpKSxJfHwiZGF0ZSIhPT1nLnR5cGV8fChSPWYoYixSKSk7dmFyIHV0PSEwLGZ0PSEwLGh0PW5ldyBBcnJheSh0dCkscHQ9bmV3IEFycmF5KHN0KSxkdD0xLzAsbXQ9MS8wLGd0PTEvMCx2dD0xLzA7Zm9yKHI9MDtyPFM7cisrKXt2YXIgeXQ9VFtyXSx4dD1NW3JdO3A9bi5maW5kQmluKHl0LEQpLGQ9bi5maW5kQmluKHh0LFIpLHA+PTAmJnA8dHQmJmQ+PTAmJmQ8c3QmJihGKz1xKHAscixFW2RdLFosQltkXSksTltkXVtwXS5wdXNoKHIpLHV0JiYodm9pZCAwPT09aHRbcF0/aHRbcF09eXQ6aHRbcF0hPT15dCYmKHV0PSExKSksZnQmJih2b2lkIDA9PT1wdFtkXT9wdFtkXT14dDpwdFtkXSE9PXh0JiYoZnQ9ITEpKSxkdD1NYXRoLm1pbihkdCx5dC1PW3BdKSxtdD1NYXRoLm1pbihtdCxPW3ArMV0teXQpLGd0PU1hdGgubWluKGd0LHh0LXpbZF0pLHZ0PU1hdGgubWluKHZ0LHpbZCsxXS14dCkpfWlmKFkpZm9yKGQ9MDtkPHN0O2QrKylGKz1zKEVbZF0sQltkXSk7aWYoRylmb3IoZD0wO2Q8c3Q7ZCsrKUcoRVtkXSxGLFcsWFtkXSk7cmV0dXJue3g6VCx4UmFuZ2VzOmgoTyx1dCYmaHQsZHQsbXQsbSx2KSx4MDpydCxkeDpldCx5Ok0seVJhbmdlczpoKHosZnQmJnB0LGd0LHZ0LGcseSkseTA6Y3QsZHk6bHQsejpFLHB0czpOfX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uL2hpc3RvZ3JhbS9hdmVyYWdlIjoxMDc4LCIuLi9oaXN0b2dyYW0vYmluX2Z1bmN0aW9ucyI6MTA4MCwiLi4vaGlzdG9ncmFtL2Jpbl9sYWJlbF92YWxzIjoxMDgxLCIuLi9oaXN0b2dyYW0vY2FsYyI6MTA4MiwiLi4vaGlzdG9ncmFtL25vcm1fZnVuY3Rpb25zIjoxMDg5fV0sMTA5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vc2FtcGxlX2RlZmF1bHRzIiksYT10KCIuLi9oZWF0bWFwL3N0eWxlX2RlZmF1bHRzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9aSh0LGUsYyxsKSwhMSE9PWUudmlzaWJsZSYmKGEodCxlLGMsbCksbyh0LGUsbCxjLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSxjKCJob3ZlcnRlbXBsYXRlIiksYygieGhvdmVyZm9ybWF0IiksYygieWhvdmVyZm9ybWF0IikpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY0OSwiLi4vLi4vbGliIjo3NzYsIi4uL2hlYXRtYXAvc3R5bGVfZGVmYXVsdHMiOjEwNzEsIi4vYXR0cmlidXRlcyI6MTA5MCwiLi9zYW1wbGVfZGVmYXVsdHMiOjEwOTV9XSwxMDkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvaG92ZXIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikuaG92ZXJMYWJlbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHM9bih0LGUscixhLG8pO2lmKHMpe3ZhciBsPSh0PXNbMF0pLmluZGV4LGM9bFswXSx1PWxbMV0sZj10LmNkWzBdLGg9Zi50cmFjZSxwPWYueFJhbmdlc1t1XSxkPWYueVJhbmdlc1tjXTtyZXR1cm4gdC54TGFiZWw9aSh0LnhhLFtwWzBdLHBbMV1dLGgueGhvdmVyZm9ybWF0KSx0LnlMYWJlbD1pKHQueWEsW2RbMF0sZFsxXV0saC55aG92ZXJmb3JtYXQpLHN9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi9oZWF0bWFwL2hvdmVyIjoxMDY1fV0sMTA5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuLi9oaXN0b2dyYW0vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiKSxjYWxjOnQoIi4uL2hlYXRtYXAvY2FsYyIpLHBsb3Q6dCgiLi4vaGVhdG1hcC9wbG90IiksbGF5ZXJOYW1lOiJoZWF0bWFwbGF5ZXIiLGNvbG9yYmFyOnQoIi4uL2hlYXRtYXAvY29sb3JiYXIiKSxzdHlsZTp0KCIuLi9oZWF0bWFwL3N0eWxlIiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLGV2ZW50RGF0YTp0KCIuLi9oaXN0b2dyYW0vZXZlbnRfZGF0YSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJoaXN0b2dyYW0yZCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsIjJkTWFwIiwiaGlzdG9ncmFtIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODQxLCIuLi9oZWF0bWFwL2NhbGMiOjEwNTksIi4uL2hlYXRtYXAvY29sb3JiYXIiOjEwNjEsIi4uL2hlYXRtYXAvcGxvdCI6MTA2OSwiLi4vaGVhdG1hcC9zdHlsZSI6MTA3MCwiLi4vaGlzdG9ncmFtL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIjoxMDg0LCIuLi9oaXN0b2dyYW0vZXZlbnRfZGF0YSI6MTA4NiwiLi9hdHRyaWJ1dGVzIjoxMDkwLCIuL2RlZmF1bHRzIjoxMDkyLCIuL2hvdmVyIjoxMDkzfV0sMTA5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPXIoIngiKSxzPXIoInkiKSxsPWkubWluUm93TGVuZ3RoKG8pLGM9aS5taW5Sb3dMZW5ndGgocyk7bCYmYz8oZS5fbGVuZ3RoPU1hdGgubWluKGwsYyksbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLGEpLChyKCJ6Iil8fHIoIm1hcmtlci5jb2xvciIpKSYmcigiaGlzdGZ1bmMiKSxyKCJoaXN0bm9ybSIpLHIoImF1dG9iaW54IikscigiYXV0b2JpbnkiKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcmVnaXN0cnkiOjkwNH1dLDEwOTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vaGlzdG9ncmFtMmQvYXR0cmlidXRlcyIpLGk9dCgiLi4vY29udG91ci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9cyh7eDpuLngseTpuLnksejpuLnosbWFya2VyOm4ubWFya2VyLGhpc3Rub3JtOm4uaGlzdG5vcm0saGlzdGZ1bmM6bi5oaXN0ZnVuYyxuYmluc3g6bi5uYmluc3gseGJpbnM6bi54YmlucyxuYmluc3k6bi5uYmluc3kseWJpbnM6bi55YmlucyxhdXRvYmlueDpuLmF1dG9iaW54LGF1dG9iaW55Om4uYXV0b2JpbnksYmluZ3JvdXA6bi5iaW5ncm91cCx4YmluZ3JvdXA6bi54YmluZ3JvdXAseWJpbmdyb3VwOm4ueWJpbmdyb3VwLGF1dG9jb250b3VyOmkuYXV0b2NvbnRvdXIsbmNvbnRvdXJzOmkubmNvbnRvdXJzLGNvbnRvdXJzOmkuY29udG91cnMsbGluZTp7Y29sb3I6aS5saW5lLmNvbG9yLHdpZHRoOnMoe30saS5saW5lLndpZHRoLHtkZmx0Oi41fSksZGFzaDppLmxpbmUuZGFzaCxzbW9vdGhpbmc6aS5saW5lLnNtb290aGluZyxlZGl0VHlwZToicGxvdCJ9LHhob3ZlcmZvcm1hdDpvKCJ4IikseWhvdmVyZm9ybWF0Om8oInkiKSx6aG92ZXJmb3JtYXQ6bygieiIsMSksaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGV9LGEoIiIse2NMZXR0ZXI6InoiLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vY29udG91ci9hdHRyaWJ1dGVzIjoxMDAxLCIuLi9oaXN0b2dyYW0yZC9hdHRyaWJ1dGVzIjoxMDkwfV0sMTA5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hpc3RvZ3JhbTJkL3NhbXBsZV9kZWZhdWx0cyIpLGE9dCgiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyIpLG89dCgiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1pKHQsZSxjLGwpLCExIT09ZS52aXNpYmxlJiYoYSh0LGUsYywoZnVuY3Rpb24ocil7cmV0dXJuIG4uY29lcmNlMih0LGUscyxyKX0pKSxvKHQsZSxjLGwpLGMoImhvdmVydGVtcGxhdGUiKSxjKCJ4aG92ZXJmb3JtYXQiKSxjKCJ5aG92ZXJmb3JtYXQiKSl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzIjoxMDA4LCIuLi9jb250b3VyL3N0eWxlX2RlZmF1bHRzIjoxMDIyLCIuLi9oaXN0b2dyYW0yZC9zYW1wbGVfZGVmYXVsdHMiOjEwOTUsIi4vYXR0cmlidXRlcyI6MTA5Nn1dLDEwOTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi4vaGlzdG9ncmFtL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksY2FsYzp0KCIuLi9jb250b3VyL2NhbGMiKSxwbG90OnQoIi4uL2NvbnRvdXIvcGxvdCIpLnBsb3QsbGF5ZXJOYW1lOiJjb250b3VybGF5ZXIiLHN0eWxlOnQoIi4uL2NvbnRvdXIvc3R5bGUiKSxjb2xvcmJhcjp0KCIuLi9jb250b3VyL2NvbG9yYmFyIiksaG92ZXJQb2ludHM6dCgiLi4vY29udG91ci9ob3ZlciIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJoaXN0b2dyYW0yZGNvbnRvdXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsImNvbnRvdXIiLCJoaXN0b2dyYW0iLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4NDEsIi4uL2NvbnRvdXIvY2FsYyI6MTAwMiwiLi4vY29udG91ci9jb2xvcmJhciI6MTAwNCwiLi4vY29udG91ci9ob3ZlciI6MTAxNCwiLi4vY29udG91ci9wbG90IjoxMDE5LCIuLi9jb250b3VyL3N0eWxlIjoxMDIxLCIuLi9oaXN0b2dyYW0vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjEwODQsIi4vYXR0cmlidXRlcyI6MTA5NiwiLi9kZWZhdWx0cyI6MTA5N31dLDEwOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLHM9dCgiLi4vcGllL2F0dHJpYnV0ZXMiKSxsPXQoIi4uL3N1bmJ1cnN0L2F0dHJpYnV0ZXMiKSxjPXQoIi4uL3RyZWVtYXAvYXR0cmlidXRlcyIpLHU9dCgiLi4vdHJlZW1hcC9jb25zdGFudHMiKSxmPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17bGFiZWxzOmwubGFiZWxzLHBhcmVudHM6bC5wYXJlbnRzLHZhbHVlczpsLnZhbHVlcyxicmFuY2h2YWx1ZXM6bC5icmFuY2h2YWx1ZXMsY291bnQ6bC5jb3VudCxsZXZlbDpsLmxldmVsLG1heGRlcHRoOmwubWF4ZGVwdGgsdGlsaW5nOntvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXSxkZmx0OiJoIixlZGl0VHlwZToicGxvdCJ9LGZsaXA6Yy50aWxpbmcuZmxpcCxwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6ImNhbGMifSxtYXJrZXI6Zih7Y29sb3JzOmwubWFya2VyLmNvbG9ycyxsaW5lOmwubWFya2VyLmxpbmUsZWRpdFR5cGU6ImNhbGMifSxhKCJtYXJrZXIiLHtjb2xvckF0dHI6ImNvbG9ycyIsYW5pbTohMX0pKSxsZWFmOmwubGVhZixwYXRoYmFyOmMucGF0aGJhcix0ZXh0OnMudGV4dCx0ZXh0aW5mbzpsLnRleHRpbmZvLHRleHR0ZW1wbGF0ZTppKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOnUuZXZlbnREYXRhS2V5cy5jb25jYXQoWyJsYWJlbCIsInZhbHVlIl0pfSksaG92ZXJ0ZXh0OnMuaG92ZXJ0ZXh0LGhvdmVyaW5mbzpsLmhvdmVyaW5mbyxob3ZlcnRlbXBsYXRlOm4oe30se2tleXM6dS5ldmVudERhdGFLZXlzfSksdGV4dGZvbnQ6cy50ZXh0Zm9udCxpbnNpZGV0ZXh0Zm9udDpzLmluc2lkZXRleHRmb250LG91dHNpZGV0ZXh0Zm9udDpjLm91dHNpZGV0ZXh0Zm9udCx0ZXh0cG9zaXRpb246Yy50ZXh0cG9zaXRpb24sc29ydDpzLnNvcnQscm9vdDpsLnJvb3QsZG9tYWluOm8oe25hbWU6ImljaWNsZSIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OSwiLi4vcGllL2F0dHJpYnV0ZXMiOjExNjUsIi4uL3N1bmJ1cnN0L2F0dHJpYnV0ZXMiOjEzMDMsIi4uL3RyZWVtYXAvYXR0cmlidXRlcyI6MTMyOSwiLi4vdHJlZW1hcC9jb25zdGFudHMiOjEzMzJ9XSwxMTAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIik7ci5uYW1lPSJpY2ljbGUiLHIucGxvdD1mdW5jdGlvbih0LGUsaSxhKXtuLnBsb3RCYXNlUGxvdChyLm5hbWUsdCxlLGksYSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLGksYSl7bi5jbGVhbkJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX19LHsiLi4vLi4vcGxvdHMvcGxvdHMiOjg5MH1dLDExMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc3VuYnVyc3QvY2FsYyIpO3IuY2FsYz1mdW5jdGlvbih0LGUpe3JldHVybiBuLmNhbGModCxlKX0sci5jcm9zc1RyYWNlQ2FsYz1mdW5jdGlvbih0KXtyZXR1cm4gbi5fcnVuQ3Jvc3NUcmFjZUNhbGMoImljaWNsZSIsdCl9fSx7Ii4uL3N1bmJ1cnN0L2NhbGMiOjEzMDV9XSwxMTAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxzPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQsbD10KCIuLi9iYXIvY29uc3RhbnRzIikuVEVYVFBBRCxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHU9Yy5oYXNDb2xvcnNjYWxlLGY9Yy5oYW5kbGVEZWZhdWx0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gaChyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBwPWgoImxhYmVscyIpLGQ9aCgicGFyZW50cyIpO2lmKHAmJnAubGVuZ3RoJiZkJiZkLmxlbmd0aCl7dmFyIG09aCgidmFsdWVzIik7bSYmbS5sZW5ndGg/aCgiYnJhbmNodmFsdWVzIik6aCgiY291bnQiKSxoKCJsZXZlbCIpLGgoIm1heGRlcHRoIiksaCgidGlsaW5nLm9yaWVudGF0aW9uIiksaCgidGlsaW5nLmZsaXAiKSxoKCJ0aWxpbmcucGFkIik7dmFyIGc9aCgidGV4dCIpO2goInRleHR0ZW1wbGF0ZSIpLGUudGV4dHRlbXBsYXRlfHxoKCJ0ZXh0aW5mbyIsQXJyYXkuaXNBcnJheShnKT8idGV4dCtsYWJlbCI6ImxhYmVsIiksaCgiaG92ZXJ0ZXh0IiksaCgiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciB2PWgoInBhdGhiYXIudmlzaWJsZSIpO3ModCxlLGMsaCwiYXV0byIse2hhc1BhdGhiYXI6dixtb2R1bGVIYXNTZWxlY3RlZDohMSxtb2R1bGVIYXNVbnNlbGVjdGVkOiExLG1vZHVsZUhhc0NvbnN0cmFpbjohMSxtb2R1bGVIYXNDbGlwb25heGlzOiExLG1vZHVsZUhhc1RleHRhbmdsZTohMSxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITF9KSxoKCJ0ZXh0cG9zaXRpb24iKSxoKCJtYXJrZXIubGluZS53aWR0aCIpJiZoKCJtYXJrZXIubGluZS5jb2xvciIsYy5wYXBlcl9iZ2NvbG9yKSxoKCJtYXJrZXIuY29sb3JzIik7dmFyIHk9ZS5faGFzQ29sb3JzY2FsZT11KHQsIm1hcmtlciIsImNvbG9ycyIpfHwodC5tYXJrZXJ8fHt9KS5jb2xvcmF4aXM7eSYmZih0LGUsYyxoLHtwcmVmaXg6Im1hcmtlci4iLGNMZXR0ZXI6ImMifSksaCgibGVhZi5vcGFjaXR5Iix5PzE6LjcpLGUuX2hvdmVyZWQ9e21hcmtlcjp7bGluZTp7d2lkdGg6Mixjb2xvcjphLmNvbnRyYXN0KGMucGFwZXJfYmdjb2xvcil9fX0sdiYmKGgoInBhdGhiYXIudGhpY2tuZXNzIixlLnBhdGhiYXIudGV4dGZvbnQuc2l6ZSsyKmwpLGgoInBhdGhiYXIuc2lkZSIpLGgoInBhdGhiYXIuZWRnZXNoYXBlIikpLGgoInNvcnQiKSxoKCJyb290LmNvbG9yIiksbyhlLGMsaCksZS5fbGVuZ3RoPW51bGx9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTEsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9kb21haW4iOjg1NSwiLi4vYmFyL2NvbnN0YW50cyI6OTE2LCIuLi9iYXIvZGVmYXVsdHMiOjkxOCwiLi9hdHRyaWJ1dGVzIjoxMDk5fV0sMTEwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikscz10KCIuL3BhcnRpdGlvbiIpLGw9dCgiLi9zdHlsZSIpLnN0eWxlT25lLGM9dCgiLi4vdHJlZW1hcC9jb25zdGFudHMiKSx1PXQoIi4uL3N1bmJ1cnN0L2hlbHBlcnMiKSxmPXQoIi4uL3N1bmJ1cnN0L2Z4IiksaD10KCIuLi9zdW5idXJzdC9wbG90IikuZm9ybWF0U2xpY2VMYWJlbDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscCxkKXt2YXIgbT1kLndpZHRoLGc9ZC5oZWlnaHQsdj1kLnZpZXdYLHk9ZC52aWV3WSx4PWQucGF0aFNsaWNlLGI9ZC50b01vdmVJbnNpZGVTbGljZSxfPWQuc3RyVHJhbnNmb3JtLHc9ZC5oYXNUcmFuc2l0aW9uLFQ9ZC5oYW5kbGVTbGljZXNFeGl0LGs9ZC5tYWtlVXBkYXRlU2xpY2VJbnRlcnBvbGF0b3IsQT1kLm1ha2VVcGRhdGVUZXh0SW50ZXJwb2xhdG9yLE09ZC5wcmV2RW50cnksUz10Ll9mdWxsTGF5b3V0LEU9ZVswXS50cmFjZSxMPS0xIT09RS50ZXh0cG9zaXRpb24uaW5kZXhPZigibGVmdCIpLEM9LTEhPT1FLnRleHRwb3NpdGlvbi5pbmRleE9mKCJyaWdodCIpLFA9LTEhPT1FLnRleHRwb3NpdGlvbi5pbmRleE9mKCJib3R0b20iKSxJPXMocixbbSxnXSx7ZmxpcFg6RS50aWxpbmcuZmxpcC5pbmRleE9mKCJ4Iik+LTEsZmxpcFk6RS50aWxpbmcuZmxpcC5pbmRleE9mKCJ5Iik+LTEsb3JpZW50YXRpb246RS50aWxpbmcub3JpZW50YXRpb24scGFkOntpbm5lcjpFLnRpbGluZy5wYWR9LG1heERlcHRoOkUuX21heERlcHRofSkuZGVzY2VuZGFudHMoKSxPPTEvMCx6PS0xLzA7SS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LmRlcHRoO2U+PUUuX21heERlcHRoPyh0LngwPXQueDE9KHQueDArdC54MSkvMix0LnkwPXQueTE9KHQueTArdC55MSkvMik6KE89TWF0aC5taW4oTyxlKSx6PU1hdGgubWF4KHosZSkpfSkpLHA9cC5kYXRhKEksdS5nZXRQdElkKSxFLl9tYXhWaXNpYmxlTGF5ZXJzPWlzRmluaXRlKHopP3otTysxOjAscC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNlIiwhMCksVChwLCExLHt9LFttLGddLHgpLHAub3JkZXIoKTt2YXIgRD1udWxsO2lmKHcmJk0pe3ZhciBSPXUuZ2V0UHRJZChNKTtwLmVhY2goKGZ1bmN0aW9uKHQpe251bGw9PT1EJiZ1LmdldFB0SWQodCk9PT1SJiYoRD17eDA6dC54MCx4MTp0LngxLHkwOnQueTAseTE6dC55MX0pfSkpfXZhciBGPWZ1bmN0aW9uKCl7cmV0dXJuIER8fHt4MDowLHgxOm0seTA6MCx5MTpnfX0sQj1wO3JldHVybiB3JiYoQj1CLnRyYW5zaXRpb24oKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO3Uuc2V0U2xpY2VDdXJzb3IoZSx0LHtoaWRlT25Sb290OiEwLGhpZGVPbkxlYXZlczohMSxpc1RyYW5zaXRpb25pbmc6ITF9KX0pKSksQi5lYWNoKChmdW5jdGlvbihzKXtzLl94MD12KHMueDApLHMuX3gxPXYocy54MSkscy5feTA9eShzLnkwKSxzLl95MT15KHMueTEpLHMuX2hvdmVyWD12KHMueDEtRS50aWxpbmcucGFkKSxzLl9ob3Zlclk9eShQP3MueTEtRS50aWxpbmcucGFkLzI6cy55MCtFLnRpbGluZy5wYWQvMik7dmFyIHA9bi5zZWxlY3QodGhpcyksZD1pLmVuc3VyZVNpbmdsZShwLCJwYXRoIiwic3VyZmFjZSIsKGZ1bmN0aW9uKHQpe3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSk7dz9kLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLChmdW5jdGlvbih0KXt2YXIgZT1rKHQsITEsRigpLFttLGddLHtvcmllbnRhdGlvbjpFLnRpbGluZy5vcmllbnRhdGlvbixmbGlwWDpFLnRpbGluZy5mbGlwLmluZGV4T2YoIngiKT4tMSxmbGlwWTpFLnRpbGluZy5mbGlwLmluZGV4T2YoInkiKT4tMX0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4geChlKHQpKX19KSk6ZC5hdHRyKCJkIix4KSxwLmNhbGwoZixyLHQsZSx7c3R5bGVPbmU6bCxldmVudERhdGFLZXlzOmMuZXZlbnREYXRhS2V5cyx0cmFuc2l0aW9uVGltZTpjLkNMSUNLX1RSQU5TSVRJT05fVElNRSx0cmFuc2l0aW9uRWFzaW5nOmMuQ0xJQ0tfVFJBTlNJVElPTl9FQVNJTkd9KS5jYWxsKHUuc2V0U2xpY2VDdXJzb3IsdCx7aXNUcmFuc2l0aW9uaW5nOnQuX3RyYW5zaXRpb25pbmd9KSxkLmNhbGwobCxzLEUse2hvdmVyZWQ6ITF9KSxzLngwPT09cy54MXx8cy55MD09PXMueTE/cy5fdGV4dD0iIjpzLl90ZXh0PWgocyxyLEUsZSxTKXx8IiI7dmFyIFQ9aS5lbnN1cmVTaW5nbGUocCwiZyIsInNsaWNldGV4dCIpLE09aS5lbnN1cmVTaW5nbGUoVCwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksST1pLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LHUuZGV0ZXJtaW5lVGV4dEZvbnQoRSxzLFMuZm9udCkpO00udGV4dChzLl90ZXh0fHwiICIpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLmF0dHIoInRleHQtYW5jaG9yIixDPyJlbmQiOkw/InN0YXJ0IjoibWlkZGxlIikuY2FsbChhLmZvbnQsSSkuY2FsbChvLmNvbnZlcnRUb1RzcGFucyx0KSxzLnRleHRCQj1hLmJCb3goTS5ub2RlKCkpLHMudHJhbnNmb3JtPWIocyx7Zm9udFNpemU6SS5zaXplfSkscy50cmFuc2Zvcm0uZm9udFNpemU9SS5zaXplLHc/TS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1BKHQsITEsRigpLFttLGddKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIF8oZSh0KSl9fSkpOk0uYXR0cigidHJhbnNmb3JtIixfKHMpKX0pKSxEfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAyLCIuLi9zdW5idXJzdC9meCI6MTMwOCwiLi4vc3VuYnVyc3QvaGVscGVycyI6MTMwOSwiLi4vc3VuYnVyc3QvcGxvdCI6MTMxMywiLi4vdHJlZW1hcC9jb25zdGFudHMiOjEzMzIsIi4vcGFydGl0aW9uIjoxMTA3LCIuL3N0eWxlIjoxMTA5LCJAcGxvdGx5L2QzIjo1OH1dLDExMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaWNpY2xlIixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6W10sYW5pbWF0YWJsZTohMCxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKS5zdHlsZSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLG1ldGE6e319fSx7Ii4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMjA5LCIuL2F0dHJpYnV0ZXMiOjEwOTksIi4vYmFzZV9wbG90IjoxMTAwLCIuL2NhbGMiOjExMDEsIi4vZGVmYXVsdHMiOjExMDIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjExMDUsIi4vbGF5b3V0X2RlZmF1bHRzIjoxMTA2LCIuL3Bsb3QiOjExMDgsIi4vc3R5bGUiOjExMDl9XSwxMTA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aWNpY2xlY29sb3J3YXk6e3ZhbFR5cGU6ImNvbG9ybGlzdCIsZWRpdFR5cGU6ImNhbGMifSxleHRlbmRpY2ljbGVjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSwxMTA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1yKCJpY2ljbGVjb2xvcndheSIsZS5jb2xvcndheSkscigiZXh0ZW5kaWNpY2xlY29sb3JzIil9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMTA1fV0sMTEwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMy1oaWVyYXJjaHkiKSxpPXQoIi4uL3RyZWVtYXAvZmxpcF90cmVlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1yLmZsaXBYLG89ci5mbGlwWSxzPSJoIj09PXIub3JpZW50YXRpb24sbD1yLm1heERlcHRoLGM9ZVswXSx1PWVbMV07bCYmKGM9KHQuaGVpZ2h0KzEpKmVbMF0vTWF0aC5taW4odC5oZWlnaHQrMSxsKSx1PSh0LmhlaWdodCsxKSplWzFdL01hdGgubWluKHQuaGVpZ2h0KzEsbCkpO3ZhciBmPW4ucGFydGl0aW9uKCkucGFkZGluZyhyLnBhZC5pbm5lcikuc2l6ZShzP1tlWzFdLGNdOltlWzBdLHVdKSh0KTtyZXR1cm4oc3x8YXx8bykmJmkoZixlLHtzd2FwWFk6cyxmbGlwWDphLGZsaXBZOm99KSxmfX0seyIuLi90cmVlbWFwL2ZsaXBfdHJlZSI6MTMzNywiZDMtaGllcmFyY2h5IjoxNjN9XSwxMTA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3RyZWVtYXAvZHJhdyIpLGk9dCgiLi9kcmF3X2Rlc2NlbmRhbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3JldHVybiBuKHQsZSxyLGEse3R5cGU6ImljaWNsZSIsZHJhd0Rlc2NlbmRhbnRzOml9KX19LHsiLi4vdHJlZW1hcC9kcmF3IjoxMzM0LCIuL2RyYXdfZGVzY2VuZGFudHMiOjExMDN9XSwxMTA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQ7ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49ZS5kYXRhLmRhdGEsbz0hZS5jaGlsZHJlbixzPW4uaSxsPWEuY2FzdE9wdGlvbihyLHMsIm1hcmtlci5saW5lLmNvbG9yIil8fGkuZGVmYXVsdExpbmUsYz1hLmNhc3RPcHRpb24ocixzLCJtYXJrZXIubGluZS53aWR0aCIpfHwwO3Quc3R5bGUoInN0cm9rZS13aWR0aCIsYykuY2FsbChpLmZpbGwsbi5jb2xvcikuY2FsbChpLnN0cm9rZSxsKS5zdHlsZSgib3BhY2l0eSIsbz9yLmxlYWYub3BhY2l0eTpudWxsKX1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2ljaWNsZWxheWVyLnNlbGVjdEFsbCgiLnRyYWNlIik7byh0LGUsImljaWNsZSIpLGUuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj10WzBdLnRyYWNlO2Uuc3R5bGUoIm9wYWNpdHkiLHIub3BhY2l0eSksZS5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmVhY2goKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwocyx0LHIpfSkpfSkpfSxzdHlsZU9uZTpzfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2xpYiI6Nzc2LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo5MzAsIkBwbG90bHkvZDMiOjU4fV0sMTExMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIG49dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi9jb25zdGFudHMiKS5jb2xvcm1vZGVsLHM9WyJyZ2IiLCJyZ2JhIiwicmdiYTI1NiIsImhzbCIsImhzbGEiXSxsPVtdLGM9W10sdT0wO3U8cy5sZW5ndGg7dSsrKXt2YXIgZj1vW3NbdV1dO2wucHVzaCgiRm9yIHRoZSBgIitzW3VdKyJgIGNvbG9ybW9kZWwsIGl0IGlzIFsiKyhmLnptaW5EZmx0fHxmLm1pbikuam9pbigiLCAiKSsiXS4iKSxjLnB1c2goIkZvciB0aGUgYCIrc1t1XSsiYCBjb2xvcm1vZGVsLCBpdCBpcyBbIisoZi56bWF4RGZsdHx8Zi5tYXgpLmpvaW4oIiwgIikrIl0uIil9ZS5leHBvcnRzPWEoe3NvdXJjZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sY29sb3Jtb2RlbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnMsZWRpdFR5cGU6ImNhbGMifSx6c21vb3RoOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmYXN0IiwhMV0sZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LHptaW46e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9XSxlZGl0VHlwZToiY2FsYyJ9LHptYXg6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9XSxlZGl0VHlwZToiY2FsYyJ9LHgwOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHkwOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGR4Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGR5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJwbG90In0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToicGxvdCJ9LGhvdmVyaW5mbzphKHt9LG4uaG92ZXJpbmZvLHtmbGFnczpbIngiLCJ5IiwieiIsImNvbG9yIiwibmFtZSIsInRleHQiXSxkZmx0OiJ4K3kreit0ZXh0K25hbWUifSksaG92ZXJ0ZW1wbGF0ZTppKHt9LHtrZXlzOlsieiIsImNvbG9yIiwiY29sb3Jtb2RlbCJdfSksdHJhbnNmb3Jtczp2b2lkIDB9KX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODk5LCIuL2NvbnN0YW50cyI6MTExMn1dLDExMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2NvbnN0YW50cyIpLGE9dCgiZmFzdC1pc251bWVyaWMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscz10KCIuLi8uLi9saWIiKS5tYXhSb3dMZW5ndGgsbD10KCIuL2hlbHBlcnMiKS5nZXRJbWFnZVNpemU7ZnVuY3Rpb24gYyh0LGUscixpKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIG4uY29uc3RyYWluKChhLXQpKmUscixpKX19ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gbi5jb25zdHJhaW4ocix0LGUpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuO2lmKGUuX2hhc1opcj1lLnoubGVuZ3RoLG49cyhlLnopO2Vsc2UgaWYoZS5faGFzU291cmNlKXt2YXIgZj1sKGUuc291cmNlKTtyPWYuaGVpZ2h0LG49Zi53aWR0aH12YXIgaCxwPW8uZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxkPW8uZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxtPXAuZDJjKGUueDApLWUuZHgvMixnPWQuZDJjKGUueTApLWUuZHkvMix2PVttLG0rbiplLmR4XSx5PVtnLGcrciplLmR5XTtpZihwJiYibG9nIj09PXAudHlwZSlmb3IoaD0wO2g8bjtoKyspdi5wdXNoKG0raCplLmR4KTtpZihkJiYibG9nIj09PWQudHlwZSlmb3IoaD0wO2g8cjtoKyspeS5wdXNoKGcraCplLmR5KTtyZXR1cm4gZS5fZXh0cmVtZXNbcC5faWRdPW8uZmluZEV4dHJlbWVzKHAsdiksZS5fZXh0cmVtZXNbZC5faWRdPW8uZmluZEV4dHJlbWVzKGQseSksZS5fc2NhbGVyPWZ1bmN0aW9uKHQpe3ZhciBlPWkuY29sb3Jtb2RlbFt0LmNvbG9ybW9kZWxdLHI9KGUuY29sb3Jtb2RlbHx8dC5jb2xvcm1vZGVsKS5sZW5ndGg7dC5fc0FycmF5PVtdO2Zvcih2YXIgbj0wO248cjtuKyspZS5taW5bbl0hPT10LnptaW5bbl18fGUubWF4W25dIT09dC56bWF4W25dP3QuX3NBcnJheS5wdXNoKGModC56bWluW25dLChlLm1heFtuXS1lLm1pbltuXSkvKHQuem1heFtuXS10LnptaW5bbl0pLGUubWluW25dLGUubWF4W25dKSk6dC5fc0FycmF5LnB1c2godShlLm1pbltuXSxlLm1heFtuXSkpO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIG49ZS5zbGljZSgwLHIpLGk9MDtpPHI7aSsrKXt2YXIgbz1uW2ldO2lmKCFhKG8pKXJldHVybiExO25baV09dC5fc0FycmF5W2ldKG8pfXJldHVybiBufX0oZSksW3t4MDptLHkwOmcsejplLnosdzpuLGg6cn1dfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi9jb25zdGFudHMiOjExMTIsIi4vaGVscGVycyI6MTExNSwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDExMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjb2xvcm1vZGVsOntyZ2I6e21pbjpbMCwwLDBdLG1heDpbMjU1LDI1NSwyNTVdLGZtdDpmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgwLDMpfSxzdWZmaXg6WyIiLCIiLCIiXX0scmdiYTp7bWluOlswLDAsMCwwXSxtYXg6WzI1NSwyNTUsMjU1LDFdLGZtdDpmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgwLDQpfSxzdWZmaXg6WyIiLCIiLCIiLCIiXX0scmdiYTI1Njp7Y29sb3Jtb2RlbDoicmdiYSIsem1pbkRmbHQ6WzAsMCwwLDBdLHptYXhEZmx0OlsyNTUsMjU1LDI1NSwyNTVdLG1pbjpbMCwwLDAsMF0sbWF4OlsyNTUsMjU1LDI1NSwxXSxmbXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoMCw0KX0sc3VmZml4OlsiIiwiIiwiIiwiIl19LGhzbDp7bWluOlswLDAsMF0sbWF4OlszNjAsMTAwLDEwMF0sZm10OmZ1bmN0aW9uKHQpe3ZhciBlPXQuc2xpY2UoMCwzKTtyZXR1cm4gZVsxXT1lWzFdKyIlIixlWzJdPWVbMl0rIiUiLGV9LHN1ZmZpeDpbIlx4YjAiLCIlIiwiJSJdfSxoc2xhOnttaW46WzAsMCwwLDBdLG1heDpbMzYwLDEwMCwxMDAsMV0sZm10OmZ1bmN0aW9uKHQpe3ZhciBlPXQuc2xpY2UoMCw0KTtyZXR1cm4gZVsxXT1lWzFdKyIlIixlWzJdPWVbMl0rIiUiLGV9LHN1ZmZpeDpbIlx4YjAiLCIlIiwiJSIsIiJdfX0scGl4ZWxhdGVkU3R5bGU6WyJpbWFnZS1yZW5kZXJpbmc6IG9wdGltaXplU3BlZWQiLCJpbWFnZS1yZW5kZXJpbmc6IC1tb3otY3Jpc3AtZWRnZXMiLCJpbWFnZS1yZW5kZXJpbmc6IC1vLWNyaXNwLWVkZ2VzIiwiaW1hZ2UtcmVuZGVyaW5nOiAtd2Via2l0LW9wdGltaXplLWNvbnRyYXN0IiwiaW1hZ2UtcmVuZGVyaW5nOiBvcHRpbWl6ZS1jb250cmFzdCIsImltYWdlLXJlbmRlcmluZzogY3Jpc3AtZWRnZXMiLCJpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZCIsIiJdLmpvaW4oIjsgIil9fSx7fV0sMTExMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi9jb25zdGFudHMiKSxvPXQoIi4uLy4uL3NuYXBzaG90L2hlbHBlcnMiKS5JTUFHRV9VUkxfUFJFRklYO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1yKCJzb3VyY2UiKSxlLnNvdXJjZSYmIWUuc291cmNlLm1hdGNoKG8pJiZkZWxldGUgZS5zb3VyY2UsZS5faGFzU291cmNlPSEhZS5zb3VyY2U7dmFyIHMsbD1yKCJ6Iik7KGUuX2hhc1o9ISh2b2lkIDA9PT1sfHwhbC5sZW5ndGh8fCFsWzBdfHwhbFswXS5sZW5ndGgpLGUuX2hhc1p8fGUuX2hhc1NvdXJjZSk/KHIoIngwIikscigieTAiKSxyKCJkeCIpLHIoImR5IiksZS5faGFzWj8ocigiY29sb3Jtb2RlbCIsInJnYiIpLHIoInptaW4iLChzPWEuY29sb3Jtb2RlbFtlLmNvbG9ybW9kZWxdKS56bWluRGZsdHx8cy5taW4pLHIoInptYXgiLHMuem1heERmbHR8fHMubWF4KSk6ZS5faGFzU291cmNlJiYoZS5jb2xvcm1vZGVsPSJyZ2JhMjU2IixzPWEuY29sb3Jtb2RlbFtlLmNvbG9ybW9kZWxdLGUuem1pbj1zLnptaW5EZmx0LGUuem1heD1zLnptYXhEZmx0KSxyKCJ6c21vb3RoIikscigidGV4dCIpLHIoImhvdmVydGV4dCIpLHIoImhvdmVydGVtcGxhdGUiKSxlLl9sZW5ndGg9bnVsbCk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vc25hcHNob3QvaGVscGVycyI6OTA4LCIuL2F0dHJpYnV0ZXMiOjExMTAsIi4vY29uc3RhbnRzIjoxMTEyfV0sMTExNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4ieFZhbCJpbiBlJiYodC54PWUueFZhbCksInlWYWwiaW4gZSYmKHQueT1lLnlWYWwpLGUueGEmJih0LnhheGlzPWUueGEpLGUueWEmJih0LnlheGlzPWUueWEpLHQuY29sb3I9ZS5jb2xvcix0LmNvbG9ybW9kZWw9ZS50cmFjZS5jb2xvcm1vZGVsLHQuenx8KHQuej1lLmNvbG9yKSx0fX0se31dLDExMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicHJvYmUtaW1hZ2Utc2l6ZS9zeW5jIiksaT10KCIuLi8uLi9zbmFwc2hvdC9oZWxwZXJzIikuSU1BR0VfVVJMX1BSRUZJWCxhPXQoImJ1ZmZlci8iKS5CdWZmZXI7ci5nZXRJbWFnZVNpemU9ZnVuY3Rpb24odCl7dmFyIGU9dC5yZXBsYWNlKGksIiIpLHI9bmV3IGEoZSwiYmFzZTY0Iik7cmV0dXJuIG4ocil9fSx7Ii4uLy4uL3NuYXBzaG90L2hlbHBlcnMiOjkwOCwiYnVmZmVyLyI6MTEyLCJwcm9iZS1pbWFnZS1zaXplL3N5bmMiOjUwM31dLDExMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG89dC5jZFswXSxzPW8udHJhY2UsbD10LnhhLGM9dC55YTtpZighKG4uaW5ib3goZS1vLngwLGUtKG8ueDArby53KnMuZHgpLDApPjB8fG4uaW5ib3goci1vLnkwLHItKG8ueTArby5oKnMuZHkpLDApPjApKXt2YXIgdSxmPU1hdGguZmxvb3IoKGUtby54MCkvcy5keCksaD1NYXRoLmZsb29yKE1hdGguYWJzKHItby55MCkvcy5keSk7aWYocy5faGFzWj91PW8ueltoXVtmXTpzLl9oYXNTb3VyY2UmJih1PXMuX2NhbnZhcy5lbC5nZXRDb250ZXh0KCIyZCIpLmdldEltYWdlRGF0YShmLGgsMSwxKS5kYXRhKSx1KXt2YXIgcCxkPW8uaGl8fHMuaG92ZXJpbmZvO2lmKGQpe3ZhciBtPWQuc3BsaXQoIisiKTstMSE9PW0uaW5kZXhPZigiYWxsIikmJihtPVsiY29sb3IiXSksLTEhPT1tLmluZGV4T2YoImNvbG9yIikmJihwPSEwKX12YXIgZyx2PWEuY29sb3Jtb2RlbFtzLmNvbG9ybW9kZWxdLHk9di5jb2xvcm1vZGVsfHxzLmNvbG9ybW9kZWwseD15Lmxlbmd0aCxiPXMuX3NjYWxlcih1KSxfPXYuc3VmZml4LHc9W107KHMuaG92ZXJ0ZW1wbGF0ZXx8cCkmJih3LnB1c2goIlsiK1tiWzBdK19bMF0sYlsxXStfWzFdLGJbMl0rX1syXV0uam9pbigiLCAiKSksND09PXgmJncucHVzaCgiLCAiK2JbM10rX1szXSksdy5wdXNoKCJdIiksdz13LmpvaW4oIiIpLHQuZXh0cmFUZXh0PXkudG9VcHBlckNhc2UoKSsiOiAiK3cpLEFycmF5LmlzQXJyYXkocy5ob3ZlcnRleHQpJiZBcnJheS5pc0FycmF5KHMuaG92ZXJ0ZXh0W2hdKT9nPXMuaG92ZXJ0ZXh0W2hdW2ZdOkFycmF5LmlzQXJyYXkocy50ZXh0KSYmQXJyYXkuaXNBcnJheShzLnRleHRbaF0pJiYoZz1zLnRleHRbaF1bZl0pO3ZhciBUPWMuYzJwKG8ueTArKGgrLjUpKnMuZHkpLGs9by54MCsoZisuNSkqcy5keCxBPW8ueTArKGgrLjUpKnMuZHksTT0iWyIrdS5zbGljZSgwLHMuY29sb3Jtb2RlbC5sZW5ndGgpLmpvaW4oIiwgIikrIl0iO3JldHVybltpLmV4dGVuZEZsYXQodCx7aW5kZXg6W2gsZl0seDA6bC5jMnAoby54MCtmKnMuZHgpLHgxOmwuYzJwKG8ueDArKGYrMSkqcy5keCkseTA6VCx5MTpULGNvbG9yOmIseFZhbDprLHhMYWJlbFZhbDprLHlWYWw6QSx5TGFiZWxWYWw6QSx6TGFiZWxWYWw6TSx0ZXh0OmcsaG92ZXJ0ZW1wbGF0ZUxhYmVsczp7ekxhYmVsOk0sY29sb3JMYWJlbDp3LCJjb2xvclswXUxhYmVsIjpiWzBdK19bMF0sImNvbG9yWzFdTGFiZWwiOmJbMV0rX1sxXSwiY29sb3JbMl1MYWJlbCI6YlsyXStfWzJdLCJjb2xvclszXUxhYmVsIjpiWzNdK19bM119fSldfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjY3OSwiLi4vLi4vbGliIjo3NzYsIi4vY29uc3RhbnRzIjoxMTEyfV0sMTExNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLGV2ZW50RGF0YTp0KCIuL2V2ZW50X2RhdGEiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaW1hZ2UiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsIm5vU29ydGluZ0J5VmFsdWUiXSxhbmltYXRhYmxlOiExLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODQxLCIuL2F0dHJpYnV0ZXMiOjExMTAsIi4vY2FsYyI6MTExMSwiLi9kZWZhdWx0cyI6MTExMywiLi9ldmVudF9kYXRhIjoxMTE0LCIuL2hvdmVyIjoxMTE2LCIuL3Bsb3QiOjExMTgsIi4vc3R5bGUiOjExMTl9XSwxMTE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9aS5zdHJUcmFuc2xhdGUsbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHM9dCgiLi9jb25zdGFudHMiKSxsPWkuaXNJT1MoKXx8aS5pc1NhZmFyaSgpfHxpLmlzSUUoKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7dmFyIHU9ZS54YXhpcyxmPWUueWF4aXMsaD0hKGx8fHQuX2NvbnRleHQuX2V4cG9ydGVkUGxvdCk7aS5tYWtlVHJhY2VHcm91cHMoYyxyLCJpbSIpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGw9ZVswXSxjPWwudHJhY2UscD0oImZhc3QiPT09Yy56c21vb3RofHwhMT09PWMuenNtb290aCYmaCkmJiFjLl9oYXNaJiZjLl9oYXNTb3VyY2UmJiJsaW5lYXIiPT09dS50eXBlJiYibGluZWFyIj09PWYudHlwZTtjLl9yZWFsSW1hZ2U9cDt2YXIgZCxtLGcsdix5LHgsYj1sLnosXz1sLngwLHc9bC55MCxUPWwudyxrPWwuaCxBPWMuZHgsTT1jLmR5O2Zvcih4PTA7dm9pZCAwPT09ZCYmeDxUOylkPXUuYzJwKF8reCpBKSx4Kys7Zm9yKHg9VDt2b2lkIDA9PT1tJiZ4PjA7KW09dS5jMnAoXyt4KkEpLHgtLTtmb3IoeD0wO3ZvaWQgMD09PXYmJng8azspdj1mLmMycCh3K3gqTSkseCsrO2Zvcih4PWs7dm9pZCAwPT09eSYmeD4wOyl5PWYuYzJwKHcreCpNKSx4LS07aWYobTxkJiYoZz1tLG09ZCxkPWcpLHk8diYmKGc9dix2PXkseT1nKSwhcCl7ZD1NYXRoLm1heCgtLjUqdS5fbGVuZ3RoLGQpLG09TWF0aC5taW4oMS41KnUuX2xlbmd0aCxtKSx2PU1hdGgubWF4KC0uNSpmLl9sZW5ndGgsdikseT1NYXRoLm1pbigxLjUqZi5fbGVuZ3RoLHkpfXZhciBTPU1hdGgucm91bmQobS1kKSxFPU1hdGgucm91bmQoeS12KTtpZihTPD0wfHxFPD0wKXtyLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKFtdKS5leGl0KCkucmVtb3ZlKCl9ZWxzZXt2YXIgTD1yLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKFtlXSk7TC5lbnRlcigpLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6by5zdmcscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KSxMLmV4aXQoKS5yZW1vdmUoKTt2YXIgQz0hMT09PWMuenNtb290aD9zLnBpeGVsYXRlZFN0eWxlOiIiO2lmKHApe3ZhciBQPWkuc2ltcGxlTWFwKHUucmFuZ2UsdS5yMmwpLEk9aS5zaW1wbGVNYXAoZi5yYW5nZSxmLnIybCksTz1QWzFdPFBbMF0sej1JWzFdPklbMF07aWYoT3x8eil7dmFyIEQ9ZCtTLzIsUj12K0UvMjtDKz0idHJhbnNmb3JtOiIrYShEKyJweCIsUisicHgiKSsic2NhbGUoIisoTz8tMToxKSsiLCIrKHo/LTE6MSkrIikiK2EoLUQrInB4IiwtUisicHgiKSsiOyJ9fUwuYXR0cigic3R5bGUiLEMpO3ZhciBGPW5ldyBQcm9taXNlKChmdW5jdGlvbih0KXtpZihjLl9oYXNaKXQoKTtlbHNlIGlmKGMuX2hhc1NvdXJjZSlpZihjLl9jYW52YXMmJmMuX2NhbnZhcy5lbC53aWR0aD09PVQmJmMuX2NhbnZhcy5lbC5oZWlnaHQ9PT1rJiZjLl9jYW52YXMuc291cmNlPT09Yy5zb3VyY2UpdCgpO2Vsc2V7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ZS53aWR0aD1ULGUuaGVpZ2h0PWs7dmFyIHI9ZS5nZXRDb250ZXh0KCIyZCIpO2MuX2ltYWdlPWMuX2ltYWdlfHxuZXcgSW1hZ2U7dmFyIG49Yy5faW1hZ2U7bi5vbmxvYWQ9ZnVuY3Rpb24oKXtyLmRyYXdJbWFnZShuLDAsMCksYy5fY2FudmFzPXtlbDplLHNvdXJjZTpjLnNvdXJjZX0sdCgpfSxuLnNldEF0dHJpYnV0ZSgic3JjIixjLnNvdXJjZSl9fSkpLnRoZW4oKGZ1bmN0aW9uKCl7dmFyIHQ7aWYoYy5faGFzWil0PUIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGJbZV1bdF19KSkudG9EYXRhVVJMKCJpbWFnZS9wbmciKTtlbHNlIGlmKGMuX2hhc1NvdXJjZSlpZihwKXQ9Yy5zb3VyY2U7ZWxzZXt2YXIgZT1jLl9jYW52YXMuZWwuZ2V0Q29udGV4dCgiMmQiKS5nZXRJbWFnZURhdGEoMCwwLFQsaykuZGF0YTt0PUIoKGZ1bmN0aW9uKHQscil7dmFyIG49NCoocipUK3QpO3JldHVybltlW25dLGVbbisxXSxlW24rMl0sZVtuKzNdXX0pKS50b0RhdGFVUkwoImltYWdlL3BuZyIpfUwuYXR0cih7InhsaW5rOmhyZWYiOnQsaGVpZ2h0OkUsd2lkdGg6Uyx4OmQseTp2fSl9KSk7dC5fcHJvbWlzZXMucHVzaChGKX1mdW5jdGlvbiBCKHQpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2Uud2lkdGg9UyxlLmhlaWdodD1FO3ZhciByLG49ZS5nZXRDb250ZXh0KCIyZCIpLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGkuY29uc3RyYWluKE1hdGgucm91bmQodS5jMnAoXyt0KkEpLWQpLDAsUyl9LG89ZnVuY3Rpb24odCl7cmV0dXJuIGkuY29uc3RyYWluKE1hdGgucm91bmQoZi5jMnAodyt0Kk0pLXYpLDAsRSl9LGg9cy5jb2xvcm1vZGVsW2MuY29sb3Jtb2RlbF0scD1oLmNvbG9ybW9kZWx8fGMuY29sb3Jtb2RlbCxtPWguZm10O2Zvcih4PTA7eDxsLnc7eCsrKXt2YXIgZz1hKHgpLHk9YSh4KzEpO2lmKHkhPT1nJiYhaXNOYU4oeSkmJiFpc05hTihnKSlmb3IodmFyIGI9MDtiPGwuaDtiKyspe3ZhciBUPW8oYiksaz1vKGIrMSk7az09PVR8fGlzTmFOKGspfHxpc05hTihUKXx8IXQoeCxiKXx8KHI9Yy5fc2NhbGVyKHQoeCxiKSksbi5maWxsU3R5bGU9cj9wKyIoIittKHIpLmpvaW4oIiwiKSsiKSI6InJnYmEoMCwwLDAsMCkiLG4uZmlsbFJlY3QoZyxULHktZyxrLVQpKX19cmV0dXJuIGV9fSkpfX0seyIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzUzLCIuLi8uLi9saWIiOjc3NiwiLi9jb25zdGFudHMiOjExMTIsIkBwbG90bHkvZDMiOjU4fV0sMTExOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLmltIGltYWdlIikuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkpfX0seyJAcGxvdGx5L2QzIjo1OH1dLDExMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRGVlcCxhPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxvPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksdT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXksZj10KCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiKSxoPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuZGVzY3JpcHRpb25Pbmx5TnVtYmVycyxwPW8oe2VkaXRUeXBlOiJwbG90Iixjb2xvckVkaXRUeXBlOiJwbG90In0pLGQ9e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InBsb3QifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6cy5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIn0sdGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIn0sbT17dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QifV0sZWRpdFR5cGU6InBsb3QifSxnPXUoInN0ZXAiLGkoe30sZCx7cmFuZ2U6bX0pKTtlLmV4cG9ydHM9e21vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixlZGl0VHlwZToiY2FsYyIsZmxhZ3M6WyJudW1iZXIiLCJkZWx0YSIsImdhdWdlIl0sZGZsdDoibnVtYmVyIn0sdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LGFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxlZGl0VHlwZToicGxvdCJ9LGRvbWFpbjpsKHtuYW1lOiJpbmRpY2F0b3IiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pLHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJwbG90In0sYWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGVkaXRUeXBlOiJwbG90In0sZm9udDpuKHt9LHAse30pLGVkaXRUeXBlOiJwbG90In0sbnVtYmVyOnt2YWx1ZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJwbG90IixkZXNjcmlwdGlvbjpoKCJ2YWx1ZSIpfSxmb250Om4oe30scCx7fSkscHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InBsb3QifSxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sZGVsdGE6e3JlZmVyZW5jZTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXSxkZmx0OiJib3R0b20iLGVkaXRUeXBlOiJwbG90In0scmVsYXRpdmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJwbG90IixkZmx0OiExfSx2YWx1ZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCIsZGVzY3JpcHRpb246aCgidmFsdWUiKX0saW5jcmVhc2luZzp7c3ltYm9sOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6Zi5JTkNSRUFTSU5HLlNZTUJPTCxlZGl0VHlwZToicGxvdCJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpmLklOQ1JFQVNJTkcuQ09MT1IsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGRlY3JlYXNpbmc6e3N5bWJvbDp7dmFsVHlwZToic3RyaW5nIixkZmx0OmYuREVDUkVBU0lORy5TWU1CT0wsZWRpdFR5cGU6InBsb3QifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6Zi5ERUNSRUFTSU5HLkNPTE9SLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxmb250Om4oe30scCx7fSksZWRpdFR5cGU6ImNhbGMifSxnYXVnZTp7c2hhcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGVkaXRUeXBlOiJwbG90IixkZmx0OiJhbmd1bGFyIix2YWx1ZXM6WyJhbmd1bGFyIiwiYnVsbGV0Il19LGJhcjppKHt9LGQse2NvbG9yOntkZmx0OiJncmVlbiJ9fSksYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJwbG90In0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OnMuZGVmYXVsdExpbmUsZWRpdFR5cGU6InBsb3QifSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InBsb3QifSxheGlzOmEoe3JhbmdlOm0sdmlzaWJsZTpuKHt9LGMudmlzaWJsZSx7ZGZsdDohMH0pLHRpY2ttb2RlOmMudGlja21vZGUsbnRpY2tzOmMubnRpY2tzLHRpY2swOmMudGljazAsZHRpY2s6Yy5kdGljayx0aWNrdmFsczpjLnRpY2t2YWxzLHRpY2t0ZXh0OmMudGlja3RleHQsdGlja3M6bih7fSxjLnRpY2tzLHtkZmx0OiJvdXRzaWRlIn0pLHRpY2tsZW46Yy50aWNrbGVuLHRpY2t3aWR0aDpjLnRpY2t3aWR0aCx0aWNrY29sb3I6Yy50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6Yy5zaG93dGlja2xhYmVscyx0aWNrZm9udDpvKHt9KSx0aWNrYW5nbGU6Yy50aWNrYW5nbGUsdGlja2Zvcm1hdDpjLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmMudGlja2Zvcm1hdHN0b3BzLHRpY2twcmVmaXg6Yy50aWNrcHJlZml4LHNob3d0aWNrcHJlZml4OmMuc2hvd3RpY2twcmVmaXgsdGlja3N1ZmZpeDpjLnRpY2tzdWZmaXgsc2hvd3RpY2tzdWZmaXg6Yy5zaG93dGlja3N1ZmZpeCxzZXBhcmF0ZXRob3VzYW5kczpjLnNlcGFyYXRldGhvdXNhbmRzLGV4cG9uZW50Zm9ybWF0OmMuZXhwb25lbnRmb3JtYXQsbWluZXhwb25lbnQ6Yy5taW5leHBvbmVudCxzaG93ZXhwb25lbnQ6Yy5zaG93ZXhwb25lbnQsZWRpdFR5cGU6InBsb3QifSwicGxvdCIpLHN0ZXBzOmcsdGhyZXNob2xkOntsaW5lOntjb2xvcjpuKHt9LGQubGluZS5jb2xvcix7fSksd2lkdGg6bih7fSxkLmxpbmUud2lkdGgse2RmbHQ6MX0pLGVkaXRUeXBlOiJwbG90In0sdGhpY2tuZXNzOm4oe30sZC50aGlja25lc3Mse2RmbHQ6Ljg1fSksdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLGRmbHQ6ITF9LGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MzgsIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyI6NzQ2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgwOSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6ODMwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg0MiwiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTUsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2fV0sMTEyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpO3IubmFtZT0iaW5kaWNhdG9yIixyLnBsb3Q9ZnVuY3Rpb24odCxlLGksYSl7bi5wbG90QmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxpLGEpe24uY2xlYW5CYXNlUGxvdChyLm5hbWUsdCxlLGksYSl9fSx7Ii4uLy4uL3Bsb3RzL3Bsb3RzIjo4OTB9XSwxMTIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe3ZhciByPVtdLG49ZS52YWx1ZTsibnVtYmVyIiE9dHlwZW9mIGUuX2xhc3RWYWx1ZSYmKGUuX2xhc3RWYWx1ZT1lLnZhbHVlKTt2YXIgaT1lLl9sYXN0VmFsdWUsYT1pO3JldHVybiBlLl9oYXNEZWx0YSYmIm51bWJlciI9PXR5cGVvZiBlLmRlbHRhLnJlZmVyZW5jZSYmKGE9ZS5kZWx0YS5yZWZlcmVuY2UpLHJbMF09e3k6bixsYXN0WTppLGRlbHRhOm4tYSxyZWxhdGl2ZURlbHRhOihuLWEpL2F9LHJ9fX0se31dLDExMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtkZWZhdWx0TnVtYmVyRm9udFNpemU6ODAsYnVsbGV0TnVtYmVyRG9tYWluU2l6ZTouMjUsYnVsbGV0UGFkZGluZzouMDI1LGlubmVyUmFkaXVzOi43NSx2YWx1ZVRoaWNrbmVzczouNSx0aXRsZVBhZGRpbmc6NSxob3Jpem9udGFsUGFkZGluZzoxMH19LHt9XSwxMTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxvPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxzPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLGw9dCgiLi9jb25zdGFudHMuanMiKSxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksdT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIiksZj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpO2Z1bmN0aW9uIGgodCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLmdhdWdlLnN0ZXBzLHIsYSl9cigiY29sb3IiKSxyKCJsaW5lLmNvbG9yIikscigibGluZS53aWR0aCIpLHIoInJhbmdlIikscigidGhpY2tuZXNzIil9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixwKXtmdW5jdGlvbiBkKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9YShlLHAsZCksZCgibW9kZSIpLGUuX2hhc051bWJlcj0tMSE9PWUubW9kZS5pbmRleE9mKCJudW1iZXIiKSxlLl9oYXNEZWx0YT0tMSE9PWUubW9kZS5pbmRleE9mKCJkZWx0YSIpLGUuX2hhc0dhdWdlPS0xIT09ZS5tb2RlLmluZGV4T2YoImdhdWdlIik7dmFyIG09ZCgidmFsdWUiKTtlLl9yYW5nZT1bMCwibnVtYmVyIj09dHlwZW9mIG0/MS41Km06MV07dmFyIGcsdix5LHgsYixfLHc9bmV3IEFycmF5KDIpO2Z1bmN0aW9uIFQodCxlKXtyZXR1cm4gbi5jb2VyY2UoeSx4LGkuZ2F1Z2UsdCxlKX1mdW5jdGlvbiBrKHQsZSl7cmV0dXJuIG4uY29lcmNlKGIsXyxpLmdhdWdlLmF4aXMsdCxlKX1pZihlLl9oYXNOdW1iZXImJihkKCJudW1iZXIudmFsdWVmb3JtYXQiKSxkKCJudW1iZXIuZm9udC5jb2xvciIscC5mb250LmNvbG9yKSxkKCJudW1iZXIuZm9udC5mYW1pbHkiLHAuZm9udC5mYW1pbHkpLGQoIm51bWJlci5mb250LnNpemUiKSx2b2lkIDA9PT1lLm51bWJlci5mb250LnNpemUmJihlLm51bWJlci5mb250LnNpemU9bC5kZWZhdWx0TnVtYmVyRm9udFNpemUsd1swXT0hMCksZCgibnVtYmVyLnByZWZpeCIpLGQoIm51bWJlci5zdWZmaXgiKSxnPWUubnVtYmVyLmZvbnQuc2l6ZSksZS5faGFzRGVsdGEmJihkKCJkZWx0YS5mb250LmNvbG9yIixwLmZvbnQuY29sb3IpLGQoImRlbHRhLmZvbnQuZmFtaWx5IixwLmZvbnQuZmFtaWx5KSxkKCJkZWx0YS5mb250LnNpemUiKSx2b2lkIDA9PT1lLmRlbHRhLmZvbnQuc2l6ZSYmKGUuZGVsdGEuZm9udC5zaXplPShlLl9oYXNOdW1iZXI/LjU6MSkqKGd8fGwuZGVmYXVsdE51bWJlckZvbnRTaXplKSx3WzFdPSEwKSxkKCJkZWx0YS5yZWZlcmVuY2UiLGUudmFsdWUpLGQoImRlbHRhLnJlbGF0aXZlIiksZCgiZGVsdGEudmFsdWVmb3JtYXQiLGUuZGVsdGEucmVsYXRpdmU/IjIlIjoiIiksZCgiZGVsdGEuaW5jcmVhc2luZy5zeW1ib2wiKSxkKCJkZWx0YS5pbmNyZWFzaW5nLmNvbG9yIiksZCgiZGVsdGEuZGVjcmVhc2luZy5zeW1ib2wiKSxkKCJkZWx0YS5kZWNyZWFzaW5nLmNvbG9yIiksZCgiZGVsdGEucG9zaXRpb24iKSx2PWUuZGVsdGEuZm9udC5zaXplKSxlLl9zY2FsZU51bWJlcnM9KCFlLl9oYXNOdW1iZXJ8fHdbMF0pJiYoIWUuX2hhc0RlbHRhfHx3WzFdKXx8ITEsZCgidGl0bGUuZm9udC5jb2xvciIscC5mb250LmNvbG9yKSxkKCJ0aXRsZS5mb250LmZhbWlseSIscC5mb250LmZhbWlseSksZCgidGl0bGUuZm9udC5zaXplIiwuMjUqKGd8fHZ8fGwuZGVmYXVsdE51bWJlckZvbnRTaXplKSksZCgidGl0bGUudGV4dCIpLGUuX2hhc0dhdWdlKXsoeT10LmdhdWdlKXx8KHk9e30pLHg9by5uZXdDb250YWluZXIoZSwiZ2F1Z2UiKSxUKCJzaGFwZSIpLChlLl9pc0J1bGxldD0iYnVsbGV0Ij09PWUuZ2F1Z2Uuc2hhcGUpfHxkKCJ0aXRsZS5hbGlnbiIsImNlbnRlciIpLChlLl9pc0FuZ3VsYXI9ImFuZ3VsYXIiPT09ZS5nYXVnZS5zaGFwZSl8fGQoImFsaWduIiwiY2VudGVyIiksVCgiYmdjb2xvciIscC5wYXBlcl9iZ2NvbG9yKSxUKCJib3JkZXJ3aWR0aCIpLFQoImJvcmRlcmNvbG9yIiksVCgiYmFyLmNvbG9yIiksVCgiYmFyLmxpbmUuY29sb3IiKSxUKCJiYXIubGluZS53aWR0aCIpLFQoImJhci50aGlja25lc3MiLGwudmFsdWVUaGlja25lc3MqKCJidWxsZXQiPT09ZS5nYXVnZS5zaGFwZT8uNToxKSkscyh5LHgse25hbWU6InN0ZXBzIixoYW5kbGVJdGVtRGVmYXVsdHM6aH0pLFQoInRocmVzaG9sZC52YWx1ZSIpLFQoInRocmVzaG9sZC50aGlja25lc3MiKSxUKCJ0aHJlc2hvbGQubGluZS53aWR0aCIpLFQoInRocmVzaG9sZC5saW5lLmNvbG9yIiksYj17fSx5JiYoYj15LmF4aXN8fHt9KSxfPW8ubmV3Q29udGFpbmVyKHgsImF4aXMiKSxrKCJ2aXNpYmxlIiksZS5fcmFuZ2U9aygicmFuZ2UiLGUuX3JhbmdlKTt2YXIgQT17b3V0ZXJUaWNrczohMH07YyhiLF8saywibGluZWFyIiksZihiLF8saywibGluZWFyIixBKSx1KGIsXyxrLEEpfWVsc2UgZCgidGl0bGUuYWxpZ24iLCJjZW50ZXIiKSxkKCJhbGlnbiIsImNlbnRlciIpLGUuX2lzQW5ndWxhcj1lLl9pc0J1bGxldD0hMTtlLl9sZW5ndGg9bnVsbH19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTYsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6ODIyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyI6ODQ5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIjo4NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo4NTEsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuL2F0dHJpYnV0ZXMiOjExMjAsIi4vY29uc3RhbnRzLmpzIjoxMTIzfV0sMTEyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJpbmRpY2F0b3IiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbInN2ZyIsIm5vT3BhY2l0eSIsIm5vSG92ZXIiXSxhbmltYXRhYmxlOiEwLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLnN1cHBseURlZmF1bHRzLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxwbG90OnQoIi4vcGxvdCIpLG1ldGE6e319fSx7Ii4vYXR0cmlidXRlcyI6MTEyMCwiLi9iYXNlX3Bsb3QiOjExMjEsIi4vY2FsYyI6MTEyMiwiLi9kZWZhdWx0cyI6MTEyNCwiLi9wbG90IjoxMTI2fV0sMTEyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJkMy1pbnRlcnBvbGF0ZSIpLmludGVycG9sYXRlLGE9dCgiZDMtaW50ZXJwb2xhdGUiKS5pbnRlcnBvbGF0ZU51bWJlcixvPXQoIi4uLy4uL2xpYiIpLHM9by5zdHJTY2FsZSxsPW8uc3RyVHJhbnNsYXRlLGM9by5yYWQyZGVnLHU9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLk1JRF9TSElGVCxmPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGg9dCgiLi9jb25zdGFudHMiKSxwPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGQ9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxtPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIiksZz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcG9zaXRpb25fZGVmYXVsdHMiKSx2PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLHk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHg9e2xlZnQ6InN0YXJ0IixjZW50ZXI6Im1pZGRsZSIscmlnaHQ6ImVuZCJ9LGI9e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MX0sXz0vW3l6YWZwblx4YjVta01HVFBFWlldLztmdW5jdGlvbiB3KHQpe3JldHVybiB0JiZ0LmR1cmF0aW9uPjB9ZnVuY3Rpb24gVCh0KXt0LmVhY2goKGZ1bmN0aW9uKHQpe3kuc3Ryb2tlKG4uc2VsZWN0KHRoaXMpLHQubGluZS5jb2xvcil9KSkuZWFjaCgoZnVuY3Rpb24odCl7eS5maWxsKG4uc2VsZWN0KHRoaXMpLHQuY29sb3IpfSkpLnN0eWxlKCJzdHJva2Utd2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5lLndpZHRofSkpfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQsaT1vLmV4dGVuZEZsYXQoe3R5cGU6ImxpbmVhciIsdGlja3M6Im91dHNpZGUiLHJhbmdlOnIsc2hvd2xpbmU6ITB9LGUpLGE9e3R5cGU6ImxpbmVhciIsX2lkOiJ4IitlLl9pZH0scz17bGV0dGVyOiJ4Iixmb250Om4uZm9udCxub0hvdmVyOiEwLG5vVGlja3NvbjohMH07ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBvLmNvZXJjZShpLGEsdix0LGUpfXJldHVybiBtKGksYSxsLHMsbiksZyhpLGEsbCxzKSxhfWZ1bmN0aW9uIEEodCxlLHIpe3JldHVybltNYXRoLm1pbihlL3Qud2lkdGgsci90LmhlaWdodCksdCxlKyJ4IityXX1mdW5jdGlvbiBNKHQsZSxyLGkpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iiksbz1uLnNlbGVjdChhKTtyZXR1cm4gby50ZXh0KHQpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoInRleHQtYW5jaG9yIixyKS5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIix0KS5jYWxsKHAuY29udmVydFRvVHNwYW5zLGkpLmNhbGwoZi5mb250LGUpLGYuYkJveChvLm5vZGUoKSl9ZnVuY3Rpb24gUyh0LGUscixuLGksYSl7dmFyIHM9Il9jYWNoZSIrZTt0W3NdJiZ0W3NdLmtleT09PWl8fCh0W3NdPXtrZXk6aSx2YWx1ZTpyfSk7dmFyIGw9by5hZ2dOdW1zKGEsbnVsbCxbdFtzXS52YWx1ZSxuXSwyKTtyZXR1cm4gdFtzXS52YWx1ZT1sLGx9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG0pe3ZhciBnLHY9dC5fZnVsbExheW91dDt3KHIpJiZtJiYoZz1tKCkpLG8ubWFrZVRyYWNlR3JvdXBzKHYuX2luZGljYXRvcmxheWVyLGUsInRyYWNlIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIG0sRSxMLEMsUCxJPWVbMF0udHJhY2UsTz1uLnNlbGVjdCh0aGlzKSx6PUkuX2hhc0dhdWdlLEQ9SS5faXNBbmd1bGFyLFI9SS5faXNCdWxsZXQsRj1JLmRvbWFpbixCPXt3OnYuX3NpemUudyooRi54WzFdLUYueFswXSksaDp2Ll9zaXplLmgqKEYueVsxXS1GLnlbMF0pLGw6di5fc2l6ZS5sK3YuX3NpemUudypGLnhbMF0scjp2Ll9zaXplLnIrdi5fc2l6ZS53KigxLUYueFsxXSksdDp2Ll9zaXplLnQrdi5fc2l6ZS5oKigxLUYueVsxXSksYjp2Ll9zaXplLmIrdi5fc2l6ZS5oKkYueVswXX0sTj1CLmwrQi53LzIsaj1CLnQrQi5oLzIsVT1NYXRoLm1pbihCLncvMixCLmgpLFY9aC5pbm5lclJhZGl1cypVLEg9SS5hbGlnbnx8ImNlbnRlciI7aWYoRT1qLHope2lmKEQmJihtPU4sRT1qK1UvMixMPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydCh0LndpZHRoLzIqKHQud2lkdGgvMikrdC5oZWlnaHQqdC5oZWlnaHQpO3JldHVybltlL3IsdCxlXX0odCwuOSpWKX0pLFIpe3ZhciBxPWguYnVsbGV0UGFkZGluZyxHPTEtaC5idWxsZXROdW1iZXJEb21haW5TaXplK3E7bT1CLmwrKEcrKDEtRykqYltIXSkqQi53LEw9ZnVuY3Rpb24odCl7cmV0dXJuIEEodCwoaC5idWxsZXROdW1iZXJEb21haW5TaXplLXEpKkIudyxCLmgpfX19ZWxzZSBtPUIubCtiW0hdKkIudyxMPWZ1bmN0aW9uKHQpe3JldHVybiBBKHQsQi53LEIuaCl9OyFmdW5jdGlvbih0LGUscixpKXt2YXIgYyx1LGgsbT1yWzBdLnRyYWNlLGc9aS5udW1iZXJzWCx2PWkubnVtYmVyc1ksVD1tLmFsaWdufHwiY2VudGVyIixBPXhbVF0sRT1pLnRyYW5zaXRpb25PcHRzLEw9aS5vbkNvbXBsZXRlLEM9by5lbnN1cmVTaW5nbGUoZSwiZyIsIm51bWJlcnMiKSxQPVtdO20uX2hhc051bWJlciYmUC5wdXNoKCJudW1iZXIiKTttLl9oYXNEZWx0YSYmKFAucHVzaCgiZGVsdGEiKSwibGVmdCI9PT1tLmRlbHRhLnBvc2l0aW9uJiZQLnJldmVyc2UoKSk7dmFyIEk9Qy5zZWxlY3RBbGwoInRleHQiKS5kYXRhKFApO2Z1bmN0aW9uIE8oZSxyLG4saSl7aWYoIWUubWF0Y2goInMiKXx8bj49MD09aT49MHx8cihuKS5zbGljZSgtMSkubWF0Y2goXyl8fHIoaSkuc2xpY2UoLTEpLm1hdGNoKF8pKXJldHVybiByO3ZhciBhPWUuc2xpY2UoKS5yZXBsYWNlKCJzIiwiZiIpLnJlcGxhY2UoL1xkKy8sKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUludCh0KS0xfSkpLG89ayh0LHt0aWNrZm9ybWF0OmF9KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHQpPDE/ZC50aWNrVGV4dChvLHQpLnRleHQ6cih0KX19SS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLEkuYXR0cigidGV4dC1hbmNob3IiLChmdW5jdGlvbigpe3JldHVybiBBfSkpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkuYXR0cigieCIsbnVsbCkuYXR0cigieSIsbnVsbCkuYXR0cigiZHgiLG51bGwpLmF0dHIoImR5IixudWxsKSxJLmV4aXQoKS5yZW1vdmUoKTt2YXIgeixEPW0ubW9kZSttLmFsaWduO20uX2hhc0RlbHRhJiYoej1mdW5jdGlvbigpe3ZhciBlPWsodCx7dGlja2Zvcm1hdDptLmRlbHRhLnZhbHVlZm9ybWF0fSxtLl9yYW5nZSk7ZS5zZXRTY2FsZSgpLGQucHJlcFRpY2tzKGUpO3ZhciBpPWZ1bmN0aW9uKHQpe3JldHVybiBkLnRpY2tUZXh0KGUsdCkudGV4dH0sbz1mdW5jdGlvbih0KXtyZXR1cm4gbS5kZWx0YS5yZWxhdGl2ZT90LnJlbGF0aXZlRGVsdGE6dC5kZWx0YX0scz1mdW5jdGlvbih0LGUpe3JldHVybiAwPT09dHx8Im51bWJlciIhPXR5cGVvZiB0fHxpc05hTih0KT8iLSI6KHQ+MD9tLmRlbHRhLmluY3JlYXNpbmcuc3ltYm9sOm0uZGVsdGEuZGVjcmVhc2luZy5zeW1ib2wpK2UodCl9LGw9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVsdGE+PTA/bS5kZWx0YS5pbmNyZWFzaW5nLmNvbG9yOm0uZGVsdGEuZGVjcmVhc2luZy5jb2xvcn07dm9pZCAwPT09bS5fZGVsdGFMYXN0VmFsdWUmJihtLl9kZWx0YUxhc3RWYWx1ZT1vKHJbMF0pKTt2YXIgYz1DLnNlbGVjdCgidGV4dC5kZWx0YSIpO2Z1bmN0aW9uIGgoKXtjLnRleHQocyhvKHJbMF0pLGkpKS5jYWxsKHkuZmlsbCxsKHJbMF0pKS5jYWxsKHAuY29udmVydFRvVHNwYW5zLHQpfXJldHVybiBjLmNhbGwoZi5mb250LG0uZGVsdGEuZm9udCkuY2FsbCh5LmZpbGwsbCh7ZGVsdGE6bS5fZGVsdGFMYXN0VmFsdWV9KSksdyhFKT9jLnRyYW5zaXRpb24oKS5kdXJhdGlvbihFLmR1cmF0aW9uKS5lYXNlKEUuZWFzaW5nKS50d2VlbigidGV4dCIsKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT1vKHJbMF0pLGM9bS5fZGVsdGFMYXN0VmFsdWUsdT1PKG0uZGVsdGEudmFsdWVmb3JtYXQsaSxjLGUpLGY9YShjLGUpO3JldHVybiBtLl9kZWx0YUxhc3RWYWx1ZT1lLGZ1bmN0aW9uKGUpe3QudGV4dChzKGYoZSksdSkpLHQuY2FsbCh5LmZpbGwsbCh7ZGVsdGE6ZihlKX0pKX19KSkuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtoKCksTCYmTCgpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7aCgpLEwmJkwoKX0pKTpoKCksdT1NKHMobyhyWzBdKSxpKSxtLmRlbHRhLmZvbnQsQSx0KSxjfSgpLEQrPW0uZGVsdGEucG9zaXRpb24rbS5kZWx0YS5mb250LnNpemUrbS5kZWx0YS5mb250LmZhbWlseSttLmRlbHRhLnZhbHVlZm9ybWF0LEQrPW0uZGVsdGEuaW5jcmVhc2luZy5zeW1ib2wrbS5kZWx0YS5kZWNyZWFzaW5nLnN5bWJvbCxoPXUpO20uX2hhc051bWJlciYmKCFmdW5jdGlvbigpe3ZhciBlPWsodCx7dGlja2Zvcm1hdDptLm51bWJlci52YWx1ZWZvcm1hdH0sbS5fcmFuZ2UpO2Uuc2V0U2NhbGUoKSxkLnByZXBUaWNrcyhlKTt2YXIgaT1mdW5jdGlvbih0KXtyZXR1cm4gZC50aWNrVGV4dChlLHQpLnRleHR9LG89bS5udW1iZXIuc3VmZml4LHM9bS5udW1iZXIucHJlZml4LGw9Qy5zZWxlY3QoInRleHQubnVtYmVyIik7ZnVuY3Rpb24gdSgpe3ZhciBlPSJudW1iZXIiPT10eXBlb2YgclswXS55P3MraShyWzBdLnkpK286Ii0iO2wudGV4dChlKS5jYWxsKGYuZm9udCxtLm51bWJlci5mb250KS5jYWxsKHAuY29udmVydFRvVHNwYW5zLHQpfXcoRSk/bC50cmFuc2l0aW9uKCkuZHVyYXRpb24oRS5kdXJhdGlvbikuZWFzZShFLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXt1KCksTCYmTCgpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7dSgpLEwmJkwoKX0pKS5hdHRyVHdlZW4oInRleHQiLChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9YShyWzBdLmxhc3RZLHJbMF0ueSk7bS5fbGFzdFZhbHVlPXJbMF0ueTt2YXIgbD1PKG0ubnVtYmVyLnZhbHVlZm9ybWF0LGksclswXS5sYXN0WSxyWzBdLnkpO3JldHVybiBmdW5jdGlvbihyKXt0LnRleHQocytsKGUocikpK28pfX0pKTp1KCksYz1NKHMraShyWzBdLnkpK28sbS5udW1iZXIuZm9udCxBLHQpfSgpLEQrPW0ubnVtYmVyLmZvbnQuc2l6ZSttLm51bWJlci5mb250LmZhbWlseSttLm51bWJlci52YWx1ZWZvcm1hdCttLm51bWJlci5zdWZmaXgrbS5udW1iZXIucHJlZml4LGg9Yyk7aWYobS5faGFzRGVsdGEmJm0uX2hhc051bWJlcil7dmFyIFIsRixCPVsoYy5sZWZ0K2MucmlnaHQpLzIsKGMudG9wK2MuYm90dG9tKS8yXSxOPVsodS5sZWZ0K3UucmlnaHQpLzIsKHUudG9wK3UuYm90dG9tKS8yXSxqPS43NSptLmRlbHRhLmZvbnQuc2l6ZTsibGVmdCI9PT1tLmRlbHRhLnBvc2l0aW9uJiYoUj1TKG0sImRlbHRhUG9zIiwwLC0xKihjLndpZHRoKmJbbS5hbGlnbl0rdS53aWR0aCooMS1iW20uYWxpZ25dKStqKSxELE1hdGgubWluKSxGPUJbMV0tTlsxXSxoPXt3aWR0aDpjLndpZHRoK3Uud2lkdGgraixoZWlnaHQ6TWF0aC5tYXgoYy5oZWlnaHQsdS5oZWlnaHQpLGxlZnQ6dS5sZWZ0K1IscmlnaHQ6Yy5yaWdodCx0b3A6TWF0aC5taW4oYy50b3AsdS50b3ArRiksYm90dG9tOk1hdGgubWF4KGMuYm90dG9tLHUuYm90dG9tK0YpfSksInJpZ2h0Ij09PW0uZGVsdGEucG9zaXRpb24mJihSPVMobSwiZGVsdGFQb3MiLDAsYy53aWR0aCooMS1iW20uYWxpZ25dKSt1LndpZHRoKmJbbS5hbGlnbl0raixELE1hdGgubWF4KSxGPUJbMV0tTlsxXSxoPXt3aWR0aDpjLndpZHRoK3Uud2lkdGgraixoZWlnaHQ6TWF0aC5tYXgoYy5oZWlnaHQsdS5oZWlnaHQpLGxlZnQ6Yy5sZWZ0LHJpZ2h0OnUucmlnaHQrUix0b3A6TWF0aC5taW4oYy50b3AsdS50b3ArRiksYm90dG9tOk1hdGgubWF4KGMuYm90dG9tLHUuYm90dG9tK0YpfSksImJvdHRvbSI9PT1tLmRlbHRhLnBvc2l0aW9uJiYoUj1udWxsLEY9dS5oZWlnaHQsaD17d2lkdGg6TWF0aC5tYXgoYy53aWR0aCx1LndpZHRoKSxoZWlnaHQ6Yy5oZWlnaHQrdS5oZWlnaHQsbGVmdDpNYXRoLm1pbihjLmxlZnQsdS5sZWZ0KSxyaWdodDpNYXRoLm1heChjLnJpZ2h0LHUucmlnaHQpLHRvcDpjLmJvdHRvbS1jLmhlaWdodCxib3R0b206Yy5ib3R0b20rdS5oZWlnaHR9KSwidG9wIj09PW0uZGVsdGEucG9zaXRpb24mJihSPW51bGwsRj1jLnRvcCxoPXt3aWR0aDpNYXRoLm1heChjLndpZHRoLHUud2lkdGgpLGhlaWdodDpjLmhlaWdodCt1LmhlaWdodCxsZWZ0Ok1hdGgubWluKGMubGVmdCx1LmxlZnQpLHJpZ2h0Ok1hdGgubWF4KGMucmlnaHQsdS5yaWdodCksdG9wOmMuYm90dG9tLWMuaGVpZ2h0LXUuaGVpZ2h0LGJvdHRvbTpjLmJvdHRvbX0pLHouYXR0cih7ZHg6UixkeTpGfSl9KG0uX2hhc051bWJlcnx8bS5faGFzRGVsdGEpJiZDLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKCl7dmFyIHQ9aS5udW1iZXJzU2NhbGVyKGgpO0QrPXRbMl07dmFyIGUscj1TKG0sIm51bWJlcnNTY2FsZSIsMSx0WzBdLEQsTWF0aC5taW4pO20uX3NjYWxlTnVtYmVyc3x8KHI9MSksZT1tLl9pc0FuZ3VsYXI/di1yKmguYm90dG9tOnYtciooaC50b3AraC5ib3R0b20pLzIsbS5fbnVtYmVyc1RvcD1yKmgudG9wK2U7dmFyIG49aFtUXTsiY2VudGVyIj09PVQmJihuPShoLmxlZnQraC5yaWdodCkvMik7dmFyIGE9Zy1yKm47cmV0dXJuIGE9UyhtLCJudW1iZXJzVHJhbnNsYXRlIiwwLGEsRCxNYXRoLm1heCksbChhLGUpK3Mocil9KSl9KHQsTyxlLHtudW1iZXJzWDptLG51bWJlcnNZOkUsbnVtYmVyc1NjYWxlcjpMLHRyYW5zaXRpb25PcHRzOnIsb25Db21wbGV0ZTpnfSkseiYmKEM9e3JhbmdlOkkuZ2F1Z2UuYXhpcy5yYW5nZSxjb2xvcjpJLmdhdWdlLmJnY29sb3IsbGluZTp7Y29sb3I6SS5nYXVnZS5ib3JkZXJjb2xvcix3aWR0aDowfSx0aGlja25lc3M6MX0sUD17cmFuZ2U6SS5nYXVnZS5heGlzLnJhbmdlLGNvbG9yOiJyZ2JhKDAsIDAsIDAsIDApIixsaW5lOntjb2xvcjpJLmdhdWdlLmJvcmRlcmNvbG9yLHdpZHRoOkkuZ2F1Z2UuYm9yZGVyd2lkdGh9LHRoaWNrbmVzczoxfSk7dmFyIFk9Ty5zZWxlY3RBbGwoImcuYW5ndWxhciIpLmRhdGEoRD9lOltdKTtZLmV4aXQoKS5yZW1vdmUoKTt2YXIgVz1PLnNlbGVjdEFsbCgiZy5hbmd1bGFyYXhpcyIpLmRhdGEoRD9lOltdKTtXLmV4aXQoKS5yZW1vdmUoKSxEJiZmdW5jdGlvbih0LGUscixhKXt2YXIgbyxzLGYsaCxwPXJbMF0udHJhY2UsbT1hLnNpemUsZz1hLnJhZGl1cyx2PWEuaW5uZXJSYWRpdXMseT1hLmdhdWdlQmcseD1hLmdhdWdlT3V0bGluZSxiPVttLmwrbS53LzIsbS50K20uaC8yK2cvMl0sXz1hLmdhdWdlLEE9YS5sYXllcixNPWEudHJhbnNpdGlvbk9wdHMsUz1hLm9uQ29tcGxldGUsRT1NYXRoLlBJLzI7ZnVuY3Rpb24gTCh0KXt2YXIgZT1wLmdhdWdlLmF4aXMucmFuZ2VbMF0scj0odC1lKS8ocC5nYXVnZS5heGlzLnJhbmdlWzFdLWUpKk1hdGguUEktRTtyZXR1cm4gcjwtRT8tRTpyPkU/RTpyfWZ1bmN0aW9uIEModCl7cmV0dXJuIG4uc3ZnLmFyYygpLmlubmVyUmFkaXVzKCh2K2cpLzItdC8yKihnLXYpKS5vdXRlclJhZGl1cygoditnKS8yK3QvMiooZy12KSkuc3RhcnRBbmdsZSgtRSl9ZnVuY3Rpb24gUCh0KXt0LmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4gQyh0LnRoaWNrbmVzcykuc3RhcnRBbmdsZShMKHQucmFuZ2VbMF0pKS5lbmRBbmdsZShMKHQucmFuZ2VbMV0pKSgpfSkpfV8uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJhbmd1bGFyIiwhMCksXy5hdHRyKCJ0cmFuc2Zvcm0iLGwoYlswXSxiWzFdKSksQS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFuZ3VsYXJheGlzIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxBLnNlbGVjdEFsbCgiZy54YW5ndWxhcmF4aXN0aWNrLHBhdGgsdGV4dCIpLnJlbW92ZSgpLChvPWsodCxwLmdhdWdlLmF4aXMpKS50eXBlPSJsaW5lYXIiLG8ucmFuZ2U9cC5nYXVnZS5heGlzLnJhbmdlLG8uX2lkPSJ4YW5ndWxhcmF4aXMiLG8udGlja2xhYmVsb3ZlcmZsb3c9ImFsbG93IixvLnNldFNjYWxlKCk7dmFyIEk9ZnVuY3Rpb24odCl7cmV0dXJuKG8ucmFuZ2VbMF0tdC54KS8oby5yYW5nZVsxXS1vLnJhbmdlWzBdKSpNYXRoLlBJK01hdGguUEl9LE89e30sej1kLm1ha2VMYWJlbEZucyhvLDApLmxhYmVsU3RhbmRvZmY7Ty54Rm49ZnVuY3Rpb24odCl7dmFyIGU9SSh0KTtyZXR1cm4gTWF0aC5jb3MoZSkqen0sTy55Rm49ZnVuY3Rpb24odCl7dmFyIGU9SSh0KSxyPU1hdGguc2luKGUpPjA/LjI6MTtyZXR1cm4tTWF0aC5zaW4oZSkqKHordC5mb250U2l6ZSpyKStNYXRoLmFicyhNYXRoLmNvcyhlKSkqKHQuZm9udFNpemUqdSl9LE8uYW5jaG9yRm49ZnVuY3Rpb24odCl7dmFyIGU9SSh0KSxyPU1hdGguY29zKGUpO3JldHVybiBNYXRoLmFicyhyKTwuMT8ibWlkZGxlIjpyPjA/InN0YXJ0IjoiZW5kIn0sTy5oZWlnaHRGbj1mdW5jdGlvbih0LGUscil7dmFyIG49SSh0KTtyZXR1cm4tLjUqKDErTWF0aC5zaW4obikpKnJ9O3ZhciBEPWZ1bmN0aW9uKHQpe3JldHVybiBsKGJbMF0rZypNYXRoLmNvcyh0KSxiWzFdLWcqTWF0aC5zaW4odCkpfTtmPWZ1bmN0aW9uKHQpe3JldHVybiBEKEkodCkpfTtpZihzPWQuY2FsY1RpY2tzKG8pLGg9ZC5nZXRUaWNrU2lnbnMobylbMl0sby52aXNpYmxlKXtoPSJpbnNpZGUiPT09by50aWNrcz8tMToxO3ZhciBSPShvLmxpbmV3aWR0aHx8MSkvMjtkLmRyYXdUaWNrcyh0LG8se3ZhbHM6cyxsYXllcjpBLHBhdGg6Ik0iK2gqUisiLDBoIitoKm8udGlja2xlbix0cmFuc0ZuOmZ1bmN0aW9uKHQpe3ZhciBlPUkodCk7cmV0dXJuIEQoZSkrInJvdGF0ZSgiKy1jKGUpKyIpIn19KSxkLmRyYXdMYWJlbHModCxvLHt2YWxzOnMsbGF5ZXI6QSx0cmFuc0ZuOmYsbGFiZWxGbnM6T30pfXZhciBGPVt5XS5jb25jYXQocC5nYXVnZS5zdGVwcyksQj1fLnNlbGVjdEFsbCgiZy5iZy1hcmMiKS5kYXRhKEYpO0IuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJiZy1hcmMiLCEwKS5hcHBlbmQoInBhdGgiKSxCLnNlbGVjdCgicGF0aCIpLmNhbGwoUCkuY2FsbChUKSxCLmV4aXQoKS5yZW1vdmUoKTt2YXIgTj1DKHAuZ2F1Z2UuYmFyLnRoaWNrbmVzcyksaj1fLnNlbGVjdEFsbCgiZy52YWx1ZS1hcmMiKS5kYXRhKFtwLmdhdWdlLmJhcl0pO2ouZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ2YWx1ZS1hcmMiLCEwKS5hcHBlbmQoInBhdGgiKTt2YXIgVT1qLnNlbGVjdCgicGF0aCIpO3coTSk/KFUudHJhbnNpdGlvbigpLmR1cmF0aW9uKE0uZHVyYXRpb24pLmVhc2UoTS5lYXNpbmcpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7UyYmUygpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7UyYmUygpfSkpLmF0dHJUd2VlbigiZCIsKFY9TixIPUwoclswXS5sYXN0WSkscT1MKHJbMF0ueSksZnVuY3Rpb24oKXt2YXIgdD1pKEgscSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBWLmVuZEFuZ2xlKHQoZSkpKCl9fSkpLHAuX2xhc3RWYWx1ZT1yWzBdLnkpOlUuYXR0cigiZCIsIm51bWJlciI9PXR5cGVvZiByWzBdLnk/Ti5lbmRBbmdsZShMKHJbMF0ueSkpOiJNMCwwWiIpO3ZhciBWLEgscTtVLmNhbGwoVCksai5leGl0KCkucmVtb3ZlKCksRj1bXTt2YXIgRz1wLmdhdWdlLnRocmVzaG9sZC52YWx1ZTsoR3x8MD09PUcpJiZGLnB1c2goe3JhbmdlOltHLEddLGNvbG9yOnAuZ2F1Z2UudGhyZXNob2xkLmNvbG9yLGxpbmU6e2NvbG9yOnAuZ2F1Z2UudGhyZXNob2xkLmxpbmUuY29sb3Isd2lkdGg6cC5nYXVnZS50aHJlc2hvbGQubGluZS53aWR0aH0sdGhpY2tuZXNzOnAuZ2F1Z2UudGhyZXNob2xkLnRoaWNrbmVzc30pO3ZhciBZPV8uc2VsZWN0QWxsKCJnLnRocmVzaG9sZC1hcmMiKS5kYXRhKEYpO1kuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0aHJlc2hvbGQtYXJjIiwhMCkuYXBwZW5kKCJwYXRoIiksWS5zZWxlY3QoInBhdGgiKS5jYWxsKFApLmNhbGwoVCksWS5leGl0KCkucmVtb3ZlKCk7dmFyIFc9Xy5zZWxlY3RBbGwoImcuZ2F1Z2Utb3V0bGluZSIpLmRhdGEoW3hdKTtXLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ2F1Z2Utb3V0bGluZSIsITApLmFwcGVuZCgicGF0aCIpLFcuc2VsZWN0KCJwYXRoIikuY2FsbChQKS5jYWxsKFQpLFcuZXhpdCgpLnJlbW92ZSgpfSh0LDAsZSx7cmFkaXVzOlUsaW5uZXJSYWRpdXM6VixnYXVnZTpZLGxheWVyOlcsc2l6ZTpCLGdhdWdlQmc6QyxnYXVnZU91dGxpbmU6UCx0cmFuc2l0aW9uT3B0czpyLG9uQ29tcGxldGU6Z30pO3ZhciBYPU8uc2VsZWN0QWxsKCJnLmJ1bGxldCIpLmRhdGEoUj9lOltdKTtYLmV4aXQoKS5yZW1vdmUoKTt2YXIgWj1PLnNlbGVjdEFsbCgiZy5idWxsZXRheGlzIikuZGF0YShSP2U6W10pO1ouZXhpdCgpLnJlbW92ZSgpLFImJmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzLGMsdT1yWzBdLnRyYWNlLGY9bi5nYXVnZSxwPW4ubGF5ZXIsbT1uLmdhdWdlQmcsZz1uLmdhdWdlT3V0bGluZSx2PW4uc2l6ZSx4PXUuZG9tYWluLGI9bi50cmFuc2l0aW9uT3B0cyxfPW4ub25Db21wbGV0ZTtmLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYnVsbGV0IiwhMCksZi5hdHRyKCJ0cmFuc2Zvcm0iLGwodi5sLHYudCkpLHAuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJidWxsZXRheGlzIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxwLnNlbGVjdEFsbCgiZy54YnVsbGV0YXhpc3RpY2sscGF0aCx0ZXh0IikucmVtb3ZlKCk7dmFyIEE9di5oLE09dS5nYXVnZS5iYXIudGhpY2tuZXNzKkEsUz14LnhbMF0sRT14LnhbMF0rKHgueFsxXS14LnhbMF0pKih1Ll9oYXNOdW1iZXJ8fHUuX2hhc0RlbHRhPzEtaC5idWxsZXROdW1iZXJEb21haW5TaXplOjEpOyhpPWsodCx1LmdhdWdlLmF4aXMpKS5faWQ9InhidWxsZXRheGlzIixpLmRvbWFpbj1bUyxFXSxpLnNldFNjYWxlKCksYT1kLmNhbGNUaWNrcyhpKSxvPWQubWFrZVRyYW5zVGlja0ZuKGkpLHM9ZC5nZXRUaWNrU2lnbnMoaSlbMl0sYz12LnQrdi5oLGkudmlzaWJsZSYmKGQuZHJhd1RpY2tzKHQsaSx7dmFsczoiaW5zaWRlIj09PWkudGlja3M/ZC5jbGlwRW5kcyhpLGEpOmEsbGF5ZXI6cCxwYXRoOmQubWFrZVRpY2tQYXRoKGksYyxzKSx0cmFuc0ZuOm99KSxkLmRyYXdMYWJlbHModCxpLHt2YWxzOmEsbGF5ZXI6cCx0cmFuc0ZuOm8sbGFiZWxGbnM6ZC5tYWtlTGFiZWxGbnMoaSxjKX0pKTtmdW5jdGlvbiBMKHQpe3QuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCxpLmMycCh0LnJhbmdlWzFdKS1pLmMycCh0LnJhbmdlWzBdKSl9KSkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybiBpLmMycCh0LnJhbmdlWzBdKX0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuLjUqKDEtdC50aGlja25lc3MpKkF9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGhpY2tuZXNzKkF9KSl9dmFyIEM9W21dLmNvbmNhdCh1LmdhdWdlLnN0ZXBzKSxQPWYuc2VsZWN0QWxsKCJnLmJnLWJ1bGxldCIpLmRhdGEoQyk7UC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJnLWJ1bGxldCIsITApLmFwcGVuZCgicmVjdCIpLFAuc2VsZWN0KCJyZWN0IikuY2FsbChMKS5jYWxsKFQpLFAuZXhpdCgpLnJlbW92ZSgpO3ZhciBJPWYuc2VsZWN0QWxsKCJnLnZhbHVlLWJ1bGxldCIpLmRhdGEoW3UuZ2F1Z2UuYmFyXSk7SS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInZhbHVlLWJ1bGxldCIsITApLmFwcGVuZCgicmVjdCIpLEkuc2VsZWN0KCJyZWN0IikuYXR0cigiaGVpZ2h0IixNKS5hdHRyKCJ5IiwoQS1NKS8yKS5jYWxsKFQpLHcoYik/SS5zZWxlY3QoInJlY3QiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oYi5kdXJhdGlvbikuZWFzZShiLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtfJiZfKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtfJiZfKCl9KSkuYXR0cigid2lkdGgiLE1hdGgubWF4KDAsaS5jMnAoTWF0aC5taW4odS5nYXVnZS5heGlzLnJhbmdlWzFdLHJbMF0ueSkpKSk6SS5zZWxlY3QoInJlY3QiKS5hdHRyKCJ3aWR0aCIsIm51bWJlciI9PXR5cGVvZiByWzBdLnk/TWF0aC5tYXgoMCxpLmMycChNYXRoLm1pbih1LmdhdWdlLmF4aXMucmFuZ2VbMV0sclswXS55KSkpOjApO0kuZXhpdCgpLnJlbW92ZSgpO3ZhciBPPXIuZmlsdGVyKChmdW5jdGlvbigpe3JldHVybiB1LmdhdWdlLnRocmVzaG9sZC52YWx1ZXx8MD09PXUuZ2F1Z2UudGhyZXNob2xkLnZhbHVlfSkpLHo9Zi5zZWxlY3RBbGwoImcudGhyZXNob2xkLWJ1bGxldCIpLmRhdGEoTyk7ei5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRocmVzaG9sZC1idWxsZXQiLCEwKS5hcHBlbmQoImxpbmUiKSx6LnNlbGVjdCgibGluZSIpLmF0dHIoIngxIixpLmMycCh1LmdhdWdlLnRocmVzaG9sZC52YWx1ZSkpLmF0dHIoIngyIixpLmMycCh1LmdhdWdlLnRocmVzaG9sZC52YWx1ZSkpLmF0dHIoInkxIiwoMS11LmdhdWdlLnRocmVzaG9sZC50aGlja25lc3MpLzIqQSkuYXR0cigieTIiLCgxLSgxLXUuZ2F1Z2UudGhyZXNob2xkLnRoaWNrbmVzcykvMikqQSkuY2FsbCh5LnN0cm9rZSx1LmdhdWdlLnRocmVzaG9sZC5saW5lLmNvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIix1LmdhdWdlLnRocmVzaG9sZC5saW5lLndpZHRoKSx6LmV4aXQoKS5yZW1vdmUoKTt2YXIgRD1mLnNlbGVjdEFsbCgiZy5nYXVnZS1vdXRsaW5lIikuZGF0YShbZ10pO0QuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJnYXVnZS1vdXRsaW5lIiwhMCkuYXBwZW5kKCJyZWN0IiksRC5zZWxlY3QoInJlY3QiKS5jYWxsKEwpLmNhbGwoVCksRC5leGl0KCkucmVtb3ZlKCl9KHQsMCxlLHtnYXVnZTpYLGxheWVyOlosc2l6ZTpCLGdhdWdlQmc6QyxnYXVnZU91dGxpbmU6UCx0cmFuc2l0aW9uT3B0czpyLG9uQ29tcGxldGU6Z30pO3ZhciBKPU8uc2VsZWN0QWxsKCJ0ZXh0LnRpdGxlIikuZGF0YShlKTtKLmV4aXQoKS5yZW1vdmUoKSxKLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgidGl0bGUiLCEwKSxKLmF0dHIoInRleHQtYW5jaG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gUj94LnJpZ2h0OnhbSS50aXRsZS5hbGlnbl19KSkudGV4dChJLnRpdGxlLnRleHQpLmNhbGwoZi5mb250LEkudGl0bGUuZm9udCkuY2FsbChwLmNvbnZlcnRUb1RzcGFucyx0KSxKLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKCl7dmFyIHQsZT1CLmwrQi53KmJbSS50aXRsZS5hbGlnbl0scj1oLnRpdGxlUGFkZGluZyxuPWYuYkJveChKLm5vZGUoKSk7aWYoeil7aWYoRClpZihJLmdhdWdlLmF4aXMudmlzaWJsZSl0PWYuYkJveChXLm5vZGUoKSkudG9wLXItbi5ib3R0b207ZWxzZSB0PUIudCtCLmgvMi1VLzItbi5ib3R0b20tcjtSJiYodD1FLShuLnRvcCtuLmJvdHRvbSkvMixlPUIubC1oLmJ1bGxldFBhZGRpbmcqQi53KX1lbHNlIHQ9SS5fbnVtYmVyc1RvcC1yLW4uYm90dG9tO3JldHVybiBsKGUsdCl9KSl9KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjc0NCwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0cyI6ODI5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg0MiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3Bvc2l0aW9uX2RlZmF1bHRzIjo4NDUsIi4vY29uc3RhbnRzIjoxMTIzLCJAcGxvdGx5L2QzIjo1OCwiZDMtaW50ZXJwb2xhdGUiOjE2NH1dLDExMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uL21lc2gzZC9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDt2YXIgdT1lLmV4cG9ydHM9YyhsKHt4Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx2YWx1ZTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGlzb21pbjp7dmFsVHlwZToibnVtYmVyIn0saXNvbWF4Ont2YWxUeXBlOiJudW1iZXIifSxzdXJmYWNlOntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxjb3VudDp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDoyLG1pbjoxfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0scGF0dGVybjp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiQSIsIkIiLCJDIiwiRCIsIkUiXSxleHRyYXM6WyJhbGwiLCJvZGQiLCJldmVuIl0sZGZsdDoiYWxsIn19LHNwYWNlZnJhbWU6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMTV9fSxzbGljZXM6e3g6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxvY2F0aW9uczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9fSx5OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsb2NhdGlvbnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX0sejp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX19fSxjYXBzOnt4OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX19LHk6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX0sejp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9fX0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGVtcGxhdGU6YSgpLHhob3ZlcmZvcm1hdDppKCJ4IikseWhvdmVyZm9ybWF0OmkoInkiKSx6aG92ZXJmb3JtYXQ6aSgieiIpLHZhbHVlaG92ZXJmb3JtYXQ6aSgidmFsdWUiLDEpLHNob3dsZWdlbmQ6bCh7fSxzLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0sbigiIix7Y29sb3JBdHRyOiJgdmFsdWVgIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkse29wYWNpdHk6by5vcGFjaXR5LGxpZ2h0cG9zaXRpb246by5saWdodHBvc2l0aW9uLGxpZ2h0aW5nOm8ubGlnaHRpbmcsZmxhdHNoYWRpbmc6by5mbGF0c2hhZGluZyxjb250b3VyOm8uY29udG91cixob3ZlcmluZm86bCh7fSxzLmhvdmVyaW5mbyl9KSwiY2FsYyIsIm5lc3RlZCIpO3UuZmxhdHNoYWRpbmcuZGZsdD0hMCx1LmxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbi5kZmx0PTAsdS54LmVkaXRUeXBlPXUueS5lZGl0VHlwZT11LnouZWRpdFR5cGU9dS52YWx1ZS5lZGl0VHlwZT0iY2FsYytjbGVhckF4aXNUeXBlcyIsdS50cmFuc2Zvcm1zPXZvaWQgMH0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgwOSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODIzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6ODMwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4uL21lc2gzZC9hdHRyaWJ1dGVzIjoxMTMyfV0sMTEyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLGk9dCgiLi4vc3RyZWFtdHViZS9jYWxjIikucHJvY2Vzc0dyaWQsYT10KCIuLi9zdHJlYW10dWJlL2NhbGMiKS5maWx0ZXI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZS5fbGVuPU1hdGgubWluKGUueC5sZW5ndGgsZS55Lmxlbmd0aCxlLnoubGVuZ3RoLGUudmFsdWUubGVuZ3RoKSxlLl94PWEoZS54LGUuX2xlbiksZS5feT1hKGUueSxlLl9sZW4pLGUuX3o9YShlLnosZS5fbGVuKSxlLl92YWx1ZT1hKGUudmFsdWUsZS5fbGVuKTt2YXIgcj1pKGUpO2UuX2dyaWRGaWxsPXIuZmlsbCxlLl9Ycz1yLlhzLGUuX1lzPXIuWXMsZS5fWnM9ci5acyxlLl9sZW49ci5sZW47Zm9yKHZhciBvPTEvMCxzPS0xLzAsbD0wO2w8ZS5fbGVuO2wrKyl7dmFyIGM9ZS5fdmFsdWVbbF07bz1NYXRoLm1pbihvLGMpLHM9TWF0aC5tYXgocyxjKX1lLl9taW5WYWx1ZXM9byxlLl9tYXhWYWx1ZXM9cyxlLl92TWluPXZvaWQgMD09PWUuaXNvbWlufHxudWxsPT09ZS5pc29taW4/bzplLmlzb21pbixlLl92TWF4PXZvaWQgMD09PWUuaXNvbWF4fHxudWxsPT09ZS5pc29taW4/czplLmlzb21heCxuKHQsZSx7dmFsczpbZS5fdk1pbixlLl92TWF4XSxjb250YWluZXJTdHI6IiIsY0xldHRlcjoiYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjY0NywiLi4vc3RyZWFtdHViZS9jYWxjIjoxMjk5fV0sMTEyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1tZXNoM2QiKSxpPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUsYT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cyxzPXQoIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyIpLGw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5sZW5ndGgtMTtyPjA7ci0tKXt2YXIgbj1NYXRoLm1pbihlW3JdLGVbci0xXSksaT1NYXRoLm1heChlW3JdLGVbci0xXSk7aWYoaT5uJiZuPHQmJnQ8PWkpcmV0dXJue2lkOnIsZGlzdFJhdGlvOihpLXQpLyhpLW4pfX1yZXR1cm57aWQ6MCxkaXN0UmF0aW86MH19O2Z1bmN0aW9uIGModCxlLHIpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1yLHRoaXMubWVzaD1lLHRoaXMubmFtZT0iIix0aGlzLmRhdGE9bnVsbCx0aGlzLnNob3dDb250b3VyPSExfXZhciB1PWMucHJvdG90eXBlO3UuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMubWVzaCl7dmFyIGU9dC5kYXRhLmluZGV4LHI9dGhpcy5kYXRhLl9tZXNoWFtlXSxuPXRoaXMuZGF0YS5fbWVzaFlbZV0saT10aGlzLmRhdGEuX21lc2haW2VdLGE9dGhpcy5kYXRhLl9Zcy5sZW5ndGgsbz10aGlzLmRhdGEuX1pzLmxlbmd0aCxzPWwocix0aGlzLmRhdGEuX1hzKS5pZCxjPWwobix0aGlzLmRhdGEuX1lzKS5pZCx1PWwoaSx0aGlzLmRhdGEuX1pzKS5pZCxmPXQuaW5kZXg9dStvKmMrbyphKnM7dC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS5fbWVzaFhbZl0sdGhpcy5kYXRhLl9tZXNoWVtmXSx0aGlzLmRhdGEuX21lc2haW2ZdLHRoaXMuZGF0YS5fdmFsdWVbZl1dO3ZhciBoPXRoaXMuZGF0YS5ob3ZlcnRleHR8fHRoaXMuZGF0YS50ZXh0O3JldHVybiBBcnJheS5pc0FycmF5KGgpJiZ2b2lkIDAhPT1oW2ZdP3QudGV4dExhYmVsPWhbZl06aCYmKHQudGV4dExhYmVsPWgpLCEwfX0sdS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZSxyPWUuZnVsbFNjZW5lTGF5b3V0O2Z1bmN0aW9uIG4odCxlLHIsbil7cmV0dXJuIGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdC5kMmwoZSwwLG4pKnJ9KSl9dGhpcy5kYXRhPWgodCk7dmFyIGw9e3Bvc2l0aW9uczpzKG4oci54YXhpcyx0Ll9tZXNoWCxlLmRhdGFTY2FsZVswXSx0LnhjYWxlbmRhciksbihyLnlheGlzLHQuX21lc2hZLGUuZGF0YVNjYWxlWzFdLHQueWNhbGVuZGFyKSxuKHIuemF4aXMsdC5fbWVzaFosZS5kYXRhU2NhbGVbMl0sdC56Y2FsZW5kYXIpKSxjZWxsczpzKHQuX21lc2hJLHQuX21lc2hKLHQuX21lc2hLKSxsaWdodFBvc2l0aW9uOlt0LmxpZ2h0cG9zaXRpb24ueCx0LmxpZ2h0cG9zaXRpb24ueSx0LmxpZ2h0cG9zaXRpb24uel0sYW1iaWVudDp0LmxpZ2h0aW5nLmFtYmllbnQsZGlmZnVzZTp0LmxpZ2h0aW5nLmRpZmZ1c2Usc3BlY3VsYXI6dC5saWdodGluZy5zcGVjdWxhcixyb3VnaG5lc3M6dC5saWdodGluZy5yb3VnaG5lc3MsZnJlc25lbDp0LmxpZ2h0aW5nLmZyZXNuZWwsdmVydGV4Tm9ybWFsc0Vwc2lsb246dC5saWdodGluZy52ZXJ0ZXhub3JtYWxzZXBzaWxvbixmYWNlTm9ybWFsc0Vwc2lsb246dC5saWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24sb3BhY2l0eTp0Lm9wYWNpdHksY29udG91ckVuYWJsZTp0LmNvbnRvdXIuc2hvdyxjb250b3VyQ29sb3I6YSh0LmNvbnRvdXIuY29sb3IpLnNsaWNlKDAsMyksY29udG91cldpZHRoOnQuY29udG91ci53aWR0aCx1c2VGYWNldE5vcm1hbHM6dC5mbGF0c2hhZGluZ30sYz1vKHQpO2wudmVydGV4SW50ZW5zaXR5PXQuX21lc2hJbnRlbnNpdHksbC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM9W2MubWluLGMubWF4XSxsLmNvbG9ybWFwPWkodCksdGhpcy5tZXNoLnVwZGF0ZShsKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX07dmFyIGY9WyJ4eXoiLCJ4enkiLCJ5eHoiLCJ5engiLCJ6eHkiLCJ6eXgiXTtmdW5jdGlvbiBoKHQpe3QuX21lc2hJPVtdLHQuX21lc2hKPVtdLHQuX21lc2hLPVtdO3ZhciBlLHIsbixpLGEsbyxzLGM9dC5zdXJmYWNlLnNob3csdT10LnNwYWNlZnJhbWUuc2hvdyxoPXQuc3VyZmFjZS5maWxsLHA9dC5zcGFjZWZyYW1lLmZpbGwsZD0hMSxtPSExLGc9MCx2PXQuX1hzLHk9dC5fWXMseD10Ll9acyxiPXYubGVuZ3RoLF89eS5sZW5ndGgsdz14Lmxlbmd0aCxUPWYuaW5kZXhPZih0Ll9ncmlkRmlsbC5yZXBsYWNlKC8tL2csIiIpLnJlcGxhY2UoL1wrL2csIiIpKSxrPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goVCl7Y2FzZSA1OnJldHVybiByK3cqZSt3Kl8qdDtjYXNlIDQ6cmV0dXJuIHIrdyp0K3cqYiplO2Nhc2UgMzpyZXR1cm4gZStfKnIrXyp3KnQ7Y2FzZSAyOnJldHVybiBlK18qdCtfKmIqcjtjYXNlIDE6cmV0dXJuIHQrYipyK2IqdyplO2RlZmF1bHQ6cmV0dXJuIHQrYiplK2IqXypyfX0sQT10Ll9taW5WYWx1ZXMsTT10Ll9tYXhWYWx1ZXMsUz10Ll92TWluLEU9dC5fdk1heDtmdW5jdGlvbiBMKHQsZSxzKXtmb3IodmFyIGw9by5sZW5ndGgsYz1yO2M8bDtjKyspaWYodD09PW5bY10mJmU9PT1pW2NdJiZzPT09YVtjXSlyZXR1cm4gYztyZXR1cm4tMX1mdW5jdGlvbiBDKCl7cj1lfWZ1bmN0aW9uIFAoKXtuPVtdLGk9W10sYT1bXSxvPVtdLGU9MCxDKCl9ZnVuY3Rpb24gSSh0LHIscyxsKXtyZXR1cm4gbi5wdXNoKHQpLGkucHVzaChyKSxhLnB1c2gocyksby5wdXNoKGwpLCsrZS0xfWZ1bmN0aW9uIE8odCxlLHIpe2Zvcih2YXIgbj1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspbltpXT10W2ldKigxLXIpK3IqZVtpXTtyZXR1cm4gbn1mdW5jdGlvbiB6KHQpe3M9dH1mdW5jdGlvbiBEKHQsZSl7cmV0dXJuImFsbCI9PT10fHxudWxsPT09dHx8dC5pbmRleE9mKGUpPi0xfWZ1bmN0aW9uIFIodCxlKXtyZXR1cm4gbnVsbD09PXQ/ZTp0fWZ1bmN0aW9uIEYoZSxyLG4pe0MoKTt2YXIgaSxhLG8sbD1bcl0sYz1bbl07aWYocz49MSlsPVtyXSxjPVtuXTtlbHNlIGlmKHM+MCl7dmFyIHU9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLG49dFsxXSxpPXRbMl0sYT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPVtdLGk9MDtpPHQubGVuZ3RoO2krKyluW2ldPSh0W2ldK2VbaV0rcltpXSkvMztyZXR1cm4gbn0ocixuLGkpLG89TWF0aC5zcXJ0KDEtcyksbD1PKGEscixvKSxjPU8oYSxuLG8pLHU9TyhhLGksbyksZj1lWzBdLGg9ZVsxXSxwPWVbMl07cmV0dXJue3h5enY6W1tyLG4sY10sW2MsbCxyXSxbbixpLHVdLFt1LGMsbl0sW2kscixsXSxbbCx1LGldXSxhYmM6W1tmLGgsLTFdLFstMSwtMSxmXSxbaCxwLC0xXSxbLTEsLTEsaF0sW3AsZiwtMV0sWy0xLC0xLHBdXX19KHIsbik7bD11Lnh5enYsYz11LmFiY31mb3IodmFyIGY9MDtmPGwubGVuZ3RoO2YrKyl7cj1sW2ZdLG49Y1tmXTtmb3IodmFyIGg9W10scD0wO3A8MztwKyspe3ZhciBkPXJbcF1bMF0sbT1yW3BdWzFdLHY9cltwXVsyXSx5PXJbcF1bM10seD1uW3BdPi0xP25bcF06TChkLG0sdik7aFtwXT14Pi0xP3g6SShkLG0sdixSKGUseSkpfWk9aFswXSxhPWhbMV0sbz1oWzJdLHQuX21lc2hJLnB1c2goaSksdC5fbWVzaEoucHVzaChhKSx0Ll9tZXNoSy5wdXNoKG8pLCsrZ319ZnVuY3Rpb24gQih0LGUscixuKXt2YXIgaT10WzNdO2k8ciYmKGk9ciksaT5uJiYoaT1uKTtmb3IodmFyIGE9KHRbM10taSkvKHRbM10tZVszXSsxZS05KSxvPVtdLHM9MDtzPDQ7cysrKW9bc109KDEtYSkqdFtzXSthKmVbc107cmV0dXJuIG99ZnVuY3Rpb24gTih0LGUscil7cmV0dXJuIHQ+PWUmJnQ8PXJ9ZnVuY3Rpb24gaih0KXt2YXIgZT0uMDAxKihFLVMpO3JldHVybiB0Pj1TLWUmJnQ8PUUrZX1mdW5jdGlvbiBVKGUpe2Zvcih2YXIgcj1bXSxuPTA7bjw0O24rKyl7dmFyIGk9ZVtuXTtyLnB1c2goW3QuX3hbaV0sdC5feVtpXSx0Ll96W2ldLHQuX3ZhbHVlW2ldXSl9cmV0dXJuIHJ9ZnVuY3Rpb24gVih0LGUscixuLGksYSl7YXx8KGE9MSkscj1bLTEsLTEsLTFdO3ZhciBvPSExLHM9W04oZVswXVszXSxuLGkpLE4oZVsxXVszXSxuLGkpLE4oZVsyXVszXSxuLGkpXTtpZighc1swXSYmIXNbMV0mJiFzWzJdKXJldHVybiExO3ZhciBsPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaihlWzBdWzNdKSYmaihlWzFdWzNdKSYmaihlWzJdWzNdKT8oRih0LGUsciksITApOmE8MyYmVih0LGUscixTLEUsKythKX07aWYoc1swXSYmc1sxXSYmc1syXSlyZXR1cm4gbCh0LGUscil8fG87dmFyIGM9ITE7cmV0dXJuW1swLDEsMl0sWzIsMCwxXSxbMSwyLDBdXS5mb3JFYWNoKChmdW5jdGlvbihhKXtpZihzW2FbMF1dJiZzW2FbMV1dJiYhc1thWzJdXSl7dmFyIHU9ZVthWzBdXSxmPWVbYVsxXV0saD1lW2FbMl1dLHA9QihoLHUsbixpKSxkPUIoaCxmLG4saSk7bz1sKHQsW2QscCx1XSxbLTEsLTEsclthWzBdXV0pfHxvLG89bCh0LFt1LGYsZF0sW3JbYVswXV0sclthWzFdXSwtMV0pfHxvLGM9ITB9fSkpLGN8fFtbMCwxLDJdLFsxLDIsMF0sWzIsMCwxXV0uZm9yRWFjaCgoZnVuY3Rpb24oYSl7aWYoc1thWzBdXSYmIXNbYVsxXV0mJiFzW2FbMl1dKXt2YXIgdT1lW2FbMF1dLGY9ZVthWzFdXSxoPWVbYVsyXV0scD1CKGYsdSxuLGkpLGQ9QihoLHUsbixpKTtvPWwodCxbZCxwLHVdLFstMSwtMSxyW2FbMF1dXSl8fG8sYz0hMH19KSksb31mdW5jdGlvbiBIKHQsZSxyLG4pe3ZhciBpPSExLGE9VShlKSxvPVtOKGFbMF1bM10scixuKSxOKGFbMV1bM10scixuKSxOKGFbMl1bM10scixuKSxOKGFbM11bM10scixuKV07aWYoIShvWzBdfHxvWzFdfHxvWzJdfHxvWzNdKSlyZXR1cm4gaTtpZihvWzBdJiZvWzFdJiZvWzJdJiZvWzNdKXJldHVybiBtJiYoaT1mdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24obixpLGEpe0YodCxbZVtuXSxlW2ldLGVbYV1dLFtyW25dLHJbaV0sclthXV0pfTtuKDAsMSwyKSxuKDMsMCwxKSxuKDIsMywwKSxuKDEsMiwzKX0odCxhLGUpfHxpKSxpO3ZhciBzPSExO3JldHVybltbMCwxLDIsM10sWzMsMCwxLDJdLFsyLDMsMCwxXSxbMSwyLDMsMF1dLmZvckVhY2goKGZ1bmN0aW9uKGwpe2lmKG9bbFswXV0mJm9bbFsxXV0mJm9bbFsyXV0mJiFvW2xbM11dKXt2YXIgYz1hW2xbMF1dLHU9YVtsWzFdXSxmPWFbbFsyXV0saD1hW2xbM11dO2lmKG0paT1GKHQsW2MsdSxmXSxbZVtsWzBdXSxlW2xbMV1dLGVbbFsyXV1dKXx8aTtlbHNle3ZhciBwPUIoaCxjLHIsbiksZD1CKGgsdSxyLG4pLGc9QihoLGYscixuKTtpPUYobnVsbCxbcCxkLGddLFstMSwtMSwtMV0pfHxpfXM9ITB9fSkpLHM/aTooW1swLDEsMiwzXSxbMSwyLDMsMF0sWzIsMywwLDFdLFszLDAsMSwyXSxbMCwyLDMsMV0sWzEsMywyLDBdXS5mb3JFYWNoKChmdW5jdGlvbihsKXtpZihvW2xbMF1dJiZvW2xbMV1dJiYhb1tsWzJdXSYmIW9bbFszXV0pe3ZhciBjPWFbbFswXV0sdT1hW2xbMV1dLGY9YVtsWzJdXSxoPWFbbFszXV0scD1CKGYsYyxyLG4pLGQ9QihmLHUscixuKSxnPUIoaCx1LHIsbiksdj1CKGgsYyxyLG4pO20/KGk9Rih0LFtjLHYscF0sW2VbbFswXV0sLTEsLTFdKXx8aSxpPUYodCxbdSxkLGddLFtlW2xbMV1dLC0xLC0xXSl8fGkpOmk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWZ1bmN0aW9uKG4saSxhKXtGKHQsW2Vbbl0sZVtpXSxlW2FdXSxbcltuXSxyW2ldLHJbYV1dKX07bigwLDEsMiksbigyLDMsMCl9KG51bGwsW3AsZCxnLHZdLFstMSwtMSwtMSwtMV0pfHxpLHM9ITB9fSkpLHN8fFtbMCwxLDIsM10sWzEsMiwzLDBdLFsyLDMsMCwxXSxbMywwLDEsMl1dLmZvckVhY2goKGZ1bmN0aW9uKGwpe2lmKG9bbFswXV0mJiFvW2xbMV1dJiYhb1tsWzJdXSYmIW9bbFszXV0pe3ZhciBjPWFbbFswXV0sdT1hW2xbMV1dLGY9YVtsWzJdXSxoPWFbbFszXV0scD1CKHUsYyxyLG4pLGQ9QihmLGMscixuKSxnPUIoaCxjLHIsbik7bT8oaT1GKHQsW2MscCxkXSxbZVtsWzBdXSwtMSwtMV0pfHxpLGk9Rih0LFtjLGQsZ10sW2VbbFswXV0sLTEsLTFdKXx8aSxpPUYodCxbYyxnLHBdLFtlW2xbMF1dLC0xLC0xXSl8fGkpOmk9RihudWxsLFtwLGQsZ10sWy0xLC0xLC0xXSl8fGkscz0hMH19KSksaSl9ZnVuY3Rpb24gcSh0LGUscixuLGksYSxvLHMsbCxjLHUpe3ZhciBmPSExO3JldHVybiBkJiYoRCh0LCJBIikmJihmPUgobnVsbCxbZSxyLG4sYV0sYyx1KXx8ZiksRCh0LCJCIikmJihmPUgobnVsbCxbcixuLGksbF0sYyx1KXx8ZiksRCh0LCJDIikmJihmPUgobnVsbCxbcixhLG8sbF0sYyx1KXx8ZiksRCh0LCJEIikmJihmPUgobnVsbCxbbixhLHMsbF0sYyx1KXx8ZiksRCh0LCJFIikmJihmPUgobnVsbCxbcixuLGEsbF0sYyx1KXx8ZikpLG0mJihmPUgodCxbcixuLGEsbF0sYyx1KXx8ZiksZn1mdW5jdGlvbiBHKHQsZSxyLG4saSxhLG8scyl7cmV0dXJuWyEwPT09c1swXXx8Vih0LFUoW2UscixuXSksW2UscixuXSxhLG8pLCEwPT09c1sxXXx8Vih0LFUoW24saSxlXSksW24saSxlXSxhLG8pXX1mdW5jdGlvbiBZKHQsZSxyLG4saSxhLG8scyxsKXtyZXR1cm4gcz9HKHQsZSxyLGksbixhLG8sbCk6Ryh0LHIsaSxuLGUsYSxvLGwpfWZ1bmN0aW9uIFcodCxlLHIsbixpLGEsbyl7dmFyIHMsbCxjLHUsZj0hMSxoPWZ1bmN0aW9uKCl7Zj1WKHQsW3MsbCxjXSxbLTEsLTEsLTFdLGksYSl8fGYsZj1WKHQsW2MsdSxzXSxbLTEsLTEsLTFdLGksYSl8fGZ9LHA9b1swXSxkPW9bMV0sbT1vWzJdO3JldHVybiBwJiYocz1PKFUoW2soZSxyLTAsbi0wKV0pWzBdLFUoW2soZS0xLHItMCxuLTApXSlbMF0scCksbD1PKFUoW2soZSxyLTAsbi0xKV0pWzBdLFUoW2soZS0xLHItMCxuLTEpXSlbMF0scCksYz1PKFUoW2soZSxyLTEsbi0xKV0pWzBdLFUoW2soZS0xLHItMSxuLTEpXSlbMF0scCksdT1PKFUoW2soZSxyLTEsbi0wKV0pWzBdLFUoW2soZS0xLHItMSxuLTApXSlbMF0scCksaCgpKSxkJiYocz1PKFUoW2soZS0wLHIsbi0wKV0pWzBdLFUoW2soZS0wLHItMSxuLTApXSlbMF0sZCksbD1PKFUoW2soZS0wLHIsbi0xKV0pWzBdLFUoW2soZS0wLHItMSxuLTEpXSlbMF0sZCksYz1PKFUoW2soZS0xLHIsbi0xKV0pWzBdLFUoW2soZS0xLHItMSxuLTEpXSlbMF0sZCksdT1PKFUoW2soZS0xLHIsbi0wKV0pWzBdLFUoW2soZS0xLHItMSxuLTApXSlbMF0sZCksaCgpKSxtJiYocz1PKFUoW2soZS0wLHItMCxuKV0pWzBdLFUoW2soZS0wLHItMCxuLTEpXSlbMF0sbSksbD1PKFUoW2soZS0wLHItMSxuKV0pWzBdLFUoW2soZS0wLHItMSxuLTEpXSlbMF0sbSksYz1PKFUoW2soZS0xLHItMSxuKV0pWzBdLFUoW2soZS0xLHItMSxuLTEpXSlbMF0sbSksdT1PKFUoW2soZS0xLHItMCxuKV0pWzBdLFUoW2soZS0xLHItMCxuLTEpXSlbMF0sbSksaCgpKSxmfWZ1bmN0aW9uIFgodCxlLHIsbixpLGEsbyxzLGwsYyx1LGYpe3ZhciBoPXQ7cmV0dXJuIGY/KGQmJiJldmVuIj09PXQmJihoPW51bGwpLHEoaCxlLHIsbixpLGEsbyxzLGwsYyx1KSk6KGQmJiJvZGQiPT09dCYmKGg9bnVsbCkscShoLGwscyxvLGEsaSxuLHIsZSxjLHUpKX1mdW5jdGlvbiBaKHQsZSxyLG4saSl7Zm9yKHZhciBhPVtdLG89MCxzPTA7czxlLmxlbmd0aDtzKyspZm9yKHZhciBsPWVbc10sYz0xO2M8dztjKyspZm9yKHZhciB1PTE7dTxfO3UrKylhLnB1c2goWSh0LGsobCx1LTEsYy0xKSxrKGwsdS0xLGMpLGsobCx1LGMtMSksayhsLHUsYykscixuLChsK3UrYyklMixpJiZpW29dP2lbb106W10pKSxvKys7cmV0dXJuIGF9ZnVuY3Rpb24gSih0LGUscixuLGkpe2Zvcih2YXIgYT1bXSxvPTAscz0wO3M8ZS5sZW5ndGg7cysrKWZvcih2YXIgbD1lW3NdLGM9MTtjPGI7YysrKWZvcih2YXIgdT0xO3U8dzt1KyspYS5wdXNoKFkodCxrKGMtMSxsLHUtMSksayhjLGwsdS0xKSxrKGMtMSxsLHUpLGsoYyxsLHUpLHIsbiwoYytsK3UpJTIsaSYmaVtvXT9pW29dOltdKSksbysrO3JldHVybiBhfWZ1bmN0aW9uIEsodCxlLHIsbixpKXtmb3IodmFyIGE9W10sbz0wLHM9MDtzPGUubGVuZ3RoO3MrKylmb3IodmFyIGw9ZVtzXSxjPTE7YzxfO2MrKylmb3IodmFyIHU9MTt1PGI7dSsrKWEucHVzaChZKHQsayh1LTEsYy0xLGwpLGsodS0xLGMsbCksayh1LGMtMSxsKSxrKHUsYyxsKSxyLG4sKHUrYytsKSUyLGkmJmlbb10/aVtvXTpbXSkpLG8rKztyZXR1cm4gYX1mdW5jdGlvbiBRKHQsZSxyKXtmb3IodmFyIG49MTtuPHc7bisrKWZvcih2YXIgaT0xO2k8XztpKyspZm9yKHZhciBhPTE7YTxiO2ErKylYKHQsayhhLTEsaS0xLG4tMSksayhhLTEsaS0xLG4pLGsoYS0xLGksbi0xKSxrKGEtMSxpLG4pLGsoYSxpLTEsbi0xKSxrKGEsaS0xLG4pLGsoYSxpLG4tMSksayhhLGksbiksZSxyLChhK2krbiklMil9ZnVuY3Rpb24gJCh0LGUscil7ZD0hMCxRKHQsZSxyKSxkPSExfWZ1bmN0aW9uIHR0KHQsZSxyLG4saSxhKXtmb3IodmFyIG89W10scz0wLGw9MDtsPGUubGVuZ3RoO2wrKylmb3IodmFyIGM9ZVtsXSx1PTE7dTx3O3UrKylmb3IodmFyIGY9MTtmPF87ZisrKW8ucHVzaChXKHQsYyxmLHUscixuLGlbbF0sYSYmYVtzXSYmYVtzXSkpLHMrKztyZXR1cm4gb31mdW5jdGlvbiBldCh0LGUscixuLGksYSl7Zm9yKHZhciBvPVtdLHM9MCxsPTA7bDxlLmxlbmd0aDtsKyspZm9yKHZhciBjPWVbbF0sdT0xO3U8Yjt1KyspZm9yKHZhciBmPTE7Zjx3O2YrKylvLnB1c2goVyh0LHUsYyxmLHIsbixpW2xdLGEmJmFbc10mJmFbc10pKSxzKys7cmV0dXJuIG99ZnVuY3Rpb24gcnQodCxlLHIsbixpLGEpe2Zvcih2YXIgbz1bXSxzPTAsbD0wO2w8ZS5sZW5ndGg7bCsrKWZvcih2YXIgYz1lW2xdLHU9MTt1PF87dSsrKWZvcih2YXIgZj0xO2Y8YjtmKyspby5wdXNoKFcodCxmLHUsYyxyLG4saVtsXSxhJiZhW3NdJiZhW3NdKSkscysrO3JldHVybiBvfWZ1bmN0aW9uIG50KHQsZSl7Zm9yKHZhciByPVtdLG49dDtuPGU7bisrKXIucHVzaChuKTtyZXR1cm4gcn1yZXR1cm4gZnVuY3Rpb24oKXtpZihQKCksZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPGI7ZSsrKWZvcih2YXIgcj0wO3I8XztyKyspZm9yKHZhciBuPTA7bjx3O24rKyl7dmFyIGk9ayhlLHIsbik7SSh0Ll94W2ldLHQuX3lbaV0sdC5feltpXSx0Ll92YWx1ZVtpXSl9fSgpLHUmJnAmJih6KHApLG09ITAsUShudWxsLFMsRSksbT0hMSksYyYmaCl7eihoKTtmb3IodmFyIGU9dC5zdXJmYWNlLnBhdHRlcm4scj10LnN1cmZhY2UuY291bnQscz0wO3M8cjtzKyspe3ZhciBmPTE9PT1yPy41OnMvKHItMSksZD0oMS1mKSpTK2YqRSxUPU1hdGguYWJzKGQtQSk+TWF0aC5hYnMoZC1NKT9bQSxkXTpbZCxNXTskKGUsVFswXSxUWzFdKX19dmFyIEw9W1tNYXRoLm1pbihTLE0pLE1hdGgubWF4KFMsTSldLFtNYXRoLm1pbihBLEUpLE1hdGgubWF4KEEsRSldXTtbIngiLCJ5IiwieiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1bXSxuPTA7bjxMLmxlbmd0aDtuKyspe3ZhciBpPTAsYT1MW25dWzBdLG89TFtuXVsxXSxzPXQuc2xpY2VzW2VdO2lmKHMuc2hvdyYmcy5maWxsKXt6KHMuZmlsbCk7dmFyIGM9W10sdT1bXSxmPVtdO2lmKHMubG9jYXRpb25zLmxlbmd0aClmb3IodmFyIGg9MDtoPHMubG9jYXRpb25zLmxlbmd0aDtoKyspe3ZhciBwPWwocy5sb2NhdGlvbnNbaF0sIngiPT09ZT92OiJ5Ij09PWU/eTp4KTswPT09cC5kaXN0UmF0aW8/Yy5wdXNoKHAuaWQpOnAuaWQ+MCYmKHUucHVzaChwLmlkKSwieCI9PT1lP2YucHVzaChbcC5kaXN0UmF0aW8sMCwwXSk6InkiPT09ZT9mLnB1c2goWzAscC5kaXN0UmF0aW8sMF0pOmYucHVzaChbMCwwLHAuZGlzdFJhdGlvXSkpfWVsc2UgYz1udCgxLCJ4Ij09PWU/Yi0xOiJ5Ij09PWU/Xy0xOnctMSk7dS5sZW5ndGg+MCYmKHJbaV09IngiPT09ZT90dChudWxsLHUsYSxvLGYscltpXSk6InkiPT09ZT9ldChudWxsLHUsYSxvLGYscltpXSk6cnQobnVsbCx1LGEsbyxmLHJbaV0pLGkrKyksYy5sZW5ndGg+MCYmKHJbaV09IngiPT09ZT9aKG51bGwsYyxhLG8scltpXSk6InkiPT09ZT9KKG51bGwsYyxhLG8scltpXSk6SyhudWxsLGMsYSxvLHJbaV0pLGkrKyl9dmFyIGQ9dC5jYXBzW2VdO2Quc2hvdyYmZC5maWxsJiYoeihkLmZpbGwpLHJbaV09IngiPT09ZT9aKG51bGwsWzAsYi0xXSxhLG8scltpXSk6InkiPT09ZT9KKG51bGwsWzAsXy0xXSxhLG8scltpXSk6SyhudWxsLFswLHctMV0sYSxvLHJbaV0pLGkrKyl9fSkpLDA9PT1nJiZQKCksdC5fbWVzaFg9bix0Ll9tZXNoWT1pLHQuX21lc2haPWEsdC5fbWVzaEludGVuc2l0eT1vLHQuX1hzPXYsdC5fWXM9eSx0Ll9acz14fSgpLHR9ZS5leHBvcnRzPXtmaW5kTmVhcmVzdE9uQXhpczpsLGdlbmVyYXRlSXNvTWVzaGVzOmgsY3JlYXRlSXNvc3VyZmFjZVRyYWNlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsaT1uKHtnbDpyfSksYT1uZXcgYyh0LGksZS51aWQpO3JldHVybiBpLl90cmFjZT1hLGEudXBkYXRlKGUpLHQuZ2xwbG90LmFkZChpKSxhfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTEsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjc3MiwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6ODAxLCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiOjg4MCwiZ2wtbWVzaDNkIjozMDN9XSwxMTMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIik7ZnVuY3Rpb24gcyh0LGUscixuLGEpe3ZhciBzPWEoImlzb21pbiIpLGw9YSgiaXNvbWF4Iik7bnVsbCE9bCYmbnVsbCE9cyYmcz5sJiYoZS5pc29taW49bnVsbCxlLmlzb21heD1udWxsKTt2YXIgYz1hKCJ4IiksdT1hKCJ5IiksZj1hKCJ6IiksaD1hKCJ2YWx1ZSIpO2MmJmMubGVuZ3RoJiZ1JiZ1Lmxlbmd0aCYmZiYmZi5sZW5ndGgmJmgmJmgubGVuZ3RoPyhpLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5IiwieiJdLG4pLGEoInZhbHVlaG92ZXJmb3JtYXQiKSxbIngiLCJ5IiwieiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2EodCsiaG92ZXJmb3JtYXQiKTt2YXIgZT0iY2Fwcy4iK3Q7YShlKyIuc2hvdyIpJiZhKGUrIi5maWxsIik7dmFyIHI9InNsaWNlcy4iK3Q7YShyKyIuc2hvdyIpJiYoYShyKyIuZmlsbCIpLGEocisiLmxvY2F0aW9ucyIpKX0pKSxhKCJzcGFjZWZyYW1lLnNob3ciKSYmYSgic3BhY2VmcmFtZS5maWxsIiksYSgic3VyZmFjZS5zaG93IikmJihhKCJzdXJmYWNlLmNvdW50IiksYSgic3VyZmFjZS5maWxsIiksYSgic3VyZmFjZS5wYXR0ZXJuIikpLGEoImNvbnRvdXIuc2hvdyIpJiYoYSgiY29udG91ci5jb2xvciIpLGEoImNvbnRvdXIud2lkdGgiKSksWyJ0ZXh0IiwiaG92ZXJ0ZXh0IiwiaG92ZXJ0ZW1wbGF0ZSIsImxpZ2h0aW5nLmFtYmllbnQiLCJsaWdodGluZy5kaWZmdXNlIiwibGlnaHRpbmcuc3BlY3VsYXIiLCJsaWdodGluZy5yb3VnaG5lc3MiLCJsaWdodGluZy5mcmVzbmVsIiwibGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24iLCJsaWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24iLCJsaWdodHBvc2l0aW9uLngiLCJsaWdodHBvc2l0aW9uLnkiLCJsaWdodHBvc2l0aW9uLnoiLCJmbGF0c2hhZGluZyIsIm9wYWNpdHkiXS5mb3JFYWNoKChmdW5jdGlvbih0KXthKHQpfSkpLG8odCxlLG4sYSx7cHJlZml4OiIiLGNMZXR0ZXI6ImMifSksZS5fbGVuZ3RoPW51bGwpOmUudmlzaWJsZT0hMX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGkpe3ModCxlLHIsaSwoZnVuY3Rpb24ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX0pKX0sc3VwcGx5SXNvRGVmYXVsdHM6c319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2NDksIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2F0dHJpYnV0ZXMiOjExMjd9XSwxMTMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY2FsYzp0KCIuL2NhbGMiKSxjb2xvcmJhcjp7bWluOiJjbWluIixtYXg6ImNtYXgifSxwbG90OnQoIi4vY29udmVydCIpLmNyZWF0ZUlzb3N1cmZhY2VUcmFjZSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaXNvc3VyZmFjZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjg2OSwiLi9hdHRyaWJ1dGVzIjoxMTI3LCIuL2NhbGMiOjExMjgsIi4vY29udmVydCI6MTEyOSwiLi9kZWZhdWx0cyI6MTEzMH1dLDExMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uL3N1cmZhY2UvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWwoe3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sajp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxrOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGVtcGxhdGU6YSh7ZWRpdFR5cGU6ImNhbGMifSkseGhvdmVyZm9ybWF0OmkoIngiKSx5aG92ZXJmb3JtYXQ6aSgieSIpLHpob3ZlcmZvcm1hdDppKCJ6IiksZGVsYXVuYXlheGlzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ4IiwieSIsInoiXSxkZmx0OiJ6IixlZGl0VHlwZToiY2FsYyJ9LGFscGhhaHVsbDp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi0xLGVkaXRUeXBlOiJjYWxjIn0saW50ZW5zaXR5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGludGVuc2l0eW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInZlcnRleCIsImNlbGwiXSxkZmx0OiJ2ZXJ0ZXgiLGVkaXRUeXBlOiJjYWxjIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyJ9LHZlcnRleGNvbG9yOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGZhY2Vjb2xvcjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0cmFuc2Zvcm1zOnZvaWQgMH0sbigiIix7Y29sb3JBdHRyOiJgaW50ZW5zaXR5YCIsc2hvd1NjYWxlRGZsdDohMCxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtvcGFjaXR5Om8ub3BhY2l0eSxmbGF0c2hhZGluZzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGNvbnRvdXI6e3Nob3c6bCh7fSxvLmNvbnRvdXJzLnguc2hvdyx7fSksY29sb3I6by5jb250b3Vycy54LmNvbG9yLHdpZHRoOm8uY29udG91cnMueC53aWR0aCxlZGl0VHlwZToiY2FsYyJ9LGxpZ2h0cG9zaXRpb246e3g6bCh7fSxvLmxpZ2h0cG9zaXRpb24ueCx7ZGZsdDoxZTV9KSx5Omwoe30sby5saWdodHBvc2l0aW9uLnkse2RmbHQ6MWU1fSksejpsKHt9LG8ubGlnaHRwb3NpdGlvbi56LHtkZmx0OjB9KSxlZGl0VHlwZToiY2FsYyJ9LGxpZ2h0aW5nOmwoe3ZlcnRleG5vcm1hbHNlcHNpbG9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MWUtMTIsZWRpdFR5cGU6ImNhbGMifSxmYWNlbm9ybWFsc2Vwc2lsb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxZS02LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxvLmxpZ2h0aW5nKSxob3ZlcmluZm86bCh7fSxzLmhvdmVyaW5mbyx7ZWRpdFR5cGU6ImNhbGMifSksc2hvd2xlZ2VuZDpsKHt9LHMuc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY0NiwiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo4MzAsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OSwiLi4vc3VyZmFjZS9hdHRyaWJ1dGVzIjoxMzE1fV0sMTEzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2UuaW50ZW5zaXR5JiZuKHQsZSx7dmFsczplLmludGVuc2l0eSxjb250YWluZXJTdHI6IiIsY0xldHRlcjoiYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjY0N31dLDExMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtbWVzaDNkIiksaT10KCJkZWxhdW5heS10cmlhbmd1bGF0ZSIpLGE9dCgiYWxwaGEtc2hhcGUiKSxvPXQoImNvbnZleC1odWxsIikscz10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIikucGFyc2VDb2xvclNjYWxlLGw9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikuZXh0cmFjdE9wdHMsdT10KCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiKTtmdW5jdGlvbiBmKHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj0iI2ZmZiIsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj0hMX12YXIgaD1mLnByb3RvdHlwZTtmdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT1bXSxyPXQubGVuZ3RoLG49MDtuPHI7bisrKWVbbl09bCh0W25dKTtyZXR1cm4gZX1mdW5jdGlvbiBkKHQsZSxyLG4pe2Zvcih2YXIgaT1bXSxhPWUubGVuZ3RoLG89MDtvPGE7bysrKWlbb109dC5kMmwoZVtvXSwwLG4pKnI7cmV0dXJuIGl9ZnVuY3Rpb24gbSh0KXtmb3IodmFyIGU9W10scj10Lmxlbmd0aCxuPTA7bjxyO24rKyllW25dPU1hdGgucm91bmQodFtuXSk7cmV0dXJuIGV9ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTA7bjxyO24rKylpZih0W25dPD0tLjV8fHRbbl0+PWUtLjUpcmV0dXJuITE7cmV0dXJuITB9aC5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgZT10LmluZGV4PXQuZGF0YS5pbmRleDt0LmRhdGEuX2NlbGxDZW50ZXI/dC50cmFjZUNvb3JkaW5hdGU9dC5kYXRhLmRhdGFDb29yZGluYXRlOnQudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEueFtlXSx0aGlzLmRhdGEueVtlXSx0aGlzLmRhdGEueltlXV07dmFyIHI9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkocikmJnZvaWQgMCE9PXJbZV0/dC50ZXh0TGFiZWw9cltlXTpyJiYodC50ZXh0TGFiZWw9ciksITB9fSxoLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjZW5lLHI9ZS5mdWxsU2NlbmVMYXlvdXQ7dGhpcy5kYXRhPXQ7dmFyIG4sZj10LngubGVuZ3RoLGg9dShkKHIueGF4aXMsdC54LGUuZGF0YVNjYWxlWzBdLHQueGNhbGVuZGFyKSxkKHIueWF4aXMsdC55LGUuZGF0YVNjYWxlWzFdLHQueWNhbGVuZGFyKSxkKHIuemF4aXMsdC56LGUuZGF0YVNjYWxlWzJdLHQuemNhbGVuZGFyKSk7aWYodC5pJiZ0LmomJnQuayl7aWYodC5pLmxlbmd0aCE9PXQuai5sZW5ndGh8fHQuai5sZW5ndGghPT10LmsubGVuZ3RofHwhZyh0LmksZil8fCFnKHQuaixmKXx8IWcodC5rLGYpKXJldHVybjtuPXUobSh0LmkpLG0odC5qKSxtKHQuaykpfWVsc2Ugbj0wPT09dC5hbHBoYWh1bGw/byhoKTp0LmFscGhhaHVsbD4wP2EodC5hbHBoYWh1bGwsaCk6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9WyJ4IiwieSIsInoiXS5pbmRleE9mKHQpLG49W10sYT1lLmxlbmd0aCxvPTA7bzxhO28rKyluW29dPVtlW29dWyhyKzEpJTNdLGVbb11bKHIrMiklM11dO3JldHVybiBpKG4pfSh0LmRlbGF1bmF5YXhpcyxoKTt2YXIgdj17cG9zaXRpb25zOmgsY2VsbHM6bixsaWdodFBvc2l0aW9uOlt0LmxpZ2h0cG9zaXRpb24ueCx0LmxpZ2h0cG9zaXRpb24ueSx0LmxpZ2h0cG9zaXRpb24uel0sYW1iaWVudDp0LmxpZ2h0aW5nLmFtYmllbnQsZGlmZnVzZTp0LmxpZ2h0aW5nLmRpZmZ1c2Usc3BlY3VsYXI6dC5saWdodGluZy5zcGVjdWxhcixyb3VnaG5lc3M6dC5saWdodGluZy5yb3VnaG5lc3MsZnJlc25lbDp0LmxpZ2h0aW5nLmZyZXNuZWwsdmVydGV4Tm9ybWFsc0Vwc2lsb246dC5saWdodGluZy52ZXJ0ZXhub3JtYWxzZXBzaWxvbixmYWNlTm9ybWFsc0Vwc2lsb246dC5saWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24sb3BhY2l0eTp0Lm9wYWNpdHksY29udG91ckVuYWJsZTp0LmNvbnRvdXIuc2hvdyxjb250b3VyQ29sb3I6bCh0LmNvbnRvdXIuY29sb3IpLnNsaWNlKDAsMyksY29udG91cldpZHRoOnQuY29udG91ci53aWR0aCx1c2VGYWNldE5vcm1hbHM6dC5mbGF0c2hhZGluZ307aWYodC5pbnRlbnNpdHkpe3ZhciB5PWModCk7dGhpcy5jb2xvcj0iI2ZmZiI7dmFyIHg9dC5pbnRlbnNpdHltb2RlO3ZbeCsiSW50ZW5zaXR5Il09dC5pbnRlbnNpdHksdlt4KyJJbnRlbnNpdHlCb3VuZHMiXT1beS5taW4seS5tYXhdLHYuY29sb3JtYXA9cyh0KX1lbHNlIHQudmVydGV4Y29sb3I/KHRoaXMuY29sb3I9dC52ZXJ0ZXhjb2xvclswXSx2LnZlcnRleENvbG9ycz1wKHQudmVydGV4Y29sb3IpKTp0LmZhY2Vjb2xvcj8odGhpcy5jb2xvcj10LmZhY2Vjb2xvclswXSx2LmNlbGxDb2xvcnM9cCh0LmZhY2Vjb2xvcikpOih0aGlzLmNvbG9yPXQuY29sb3Isdi5tZXNoQ29sb3I9bCh0LmNvbG9yKSk7dGhpcy5tZXNoLnVwZGF0ZSh2KX0saC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsaT1uKHtnbDpyfSksYT1uZXcgZih0LGksZS51aWQpO3JldHVybiBpLl90cmFjZT1hLGEudXBkYXRlKGUpLHQuZ2xwbG90LmFkZChpKSxhfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1MSwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6NzcyLCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo4MDEsIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyI6ODgwLCJhbHBoYS1zaGFwZSI6NzEsImNvbnZleC1odWxsIjoxMzcsImRlbGF1bmF5LXRyaWFuZ3VsYXRlIjoxNzIsImdsLW1lc2gzZCI6MzAzfV0sMTEzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxvLHIsbil9ZnVuY3Rpb24gYyh0KXt2YXIgZT10Lm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9bCh0KTtyZXR1cm4gZSYmaS5pc0FycmF5T3JUeXBlZEFycmF5KGUpP2U6bnVsbH0pKTtyZXR1cm4gZS5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubGVuZ3RoPT09ZVswXS5sZW5ndGh9KSkmJmV9YyhbIngiLCJ5IiwieiJdKT8oYyhbImkiLCJqIiwiayJdKSwoIWUuaXx8ZS5qJiZlLmspJiYoIWUuanx8ZS5rJiZlLmkpJiYoIWUua3x8ZS5pJiZlLmopPyhuLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5IiwieiJdLHMpLFsibGlnaHRpbmcuYW1iaWVudCIsImxpZ2h0aW5nLmRpZmZ1c2UiLCJsaWdodGluZy5zcGVjdWxhciIsImxpZ2h0aW5nLnJvdWdobmVzcyIsImxpZ2h0aW5nLmZyZXNuZWwiLCJsaWdodGluZy52ZXJ0ZXhub3JtYWxzZXBzaWxvbiIsImxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbiIsImxpZ2h0cG9zaXRpb24ueCIsImxpZ2h0cG9zaXRpb24ueSIsImxpZ2h0cG9zaXRpb24ueiIsImZsYXRzaGFkaW5nIiwiYWxwaGFodWxsIiwiZGVsYXVuYXlheGlzIiwib3BhY2l0eSJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2wodCl9KSksbCgiY29udG91ci5zaG93IikmJihsKCJjb250b3VyLmNvbG9yIiksbCgiY29udG91ci53aWR0aCIpKSwiaW50ZW5zaXR5ImluIHQ/KGwoImludGVuc2l0eSIpLGwoImludGVuc2l0eW1vZGUiKSxhKHQsZSxzLGwse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pKTooZS5zaG93c2NhbGU9ITEsImZhY2Vjb2xvciJpbiB0P2woImZhY2Vjb2xvciIpOiJ2ZXJ0ZXhjb2xvciJpbiB0P2woInZlcnRleGNvbG9yIik6bCgiY29sb3IiLHIpKSxsKCJ0ZXh0IiksbCgiaG92ZXJ0ZXh0IiksbCgiaG92ZXJ0ZW1wbGF0ZSIpLGwoInhob3ZlcmZvcm1hdCIpLGwoInlob3ZlcmZvcm1hdCIpLGwoInpob3ZlcmZvcm1hdCIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITEpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2NDksIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2F0dHJpYnV0ZXMiOjExMzJ9XSwxMTM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxjb2xvcmJhcjp7bWluOiJjbWluIixtYXg6ImNtYXgifSxwbG90OnQoIi4vY29udmVydCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJtZXNoM2QiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxjYXRlZ29yaWVzOlsiZ2wzZCIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nbDNkIjo4NjksIi4vYXR0cmlidXRlcyI6MTEzMiwiLi9jYWxjIjoxMTMzLCIuL2NvbnZlcnQiOjExMzQsIi4vZGVmYXVsdHMiOjExMzV9XSwxMTM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQsaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLHM9dCgiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiKSxjPWwuSU5DUkVBU0lORy5DT0xPUix1PWwuREVDUkVBU0lORy5DT0xPUixmPWkubGluZTtmdW5jdGlvbiBoKHQpe3JldHVybntsaW5lOntjb2xvcjpuKHt9LGYuY29sb3Ise2RmbHQ6dH0pLHdpZHRoOmYud2lkdGgsZGFzaDpvLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9fWUuZXhwb3J0cz17eHBlcmlvZDppLnhwZXJpb2QseHBlcmlvZDA6aS54cGVyaW9kMCx4cGVyaW9kYWxpZ25tZW50OmkueHBlcmlvZGFsaWdubWVudCx4aG92ZXJmb3JtYXQ6YSgieCIpLHlob3ZlcmZvcm1hdDphKCJ5IikseDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxvcGVuOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGhpZ2g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbG93Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGNsb3NlOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e3dpZHRoOm4oe30sZi53aWR0aCx7fSksZGFzaDpuKHt9LG8se30pLGVkaXRUeXBlOiJzdHlsZSJ9LGluY3JlYXNpbmc6aChjKSxkZWNyZWFzaW5nOmgodSksdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDouNSxkZmx0Oi4zLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJsYWJlbDpuKHt9LHMuaG92ZXJsYWJlbCx7c3BsaXQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InN0eWxlIn19KX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjY2MCwiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIjo2NzAsIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyI6NzQ2LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTkxfV0sMTEzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPW4uXyxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2Z1bmN0aW9uIGwodCxlLHIsbil7cmV0dXJue286dCxoOmUsbDpyLGM6bn19ZnVuY3Rpb24gYyh0LGUscixvLGwsYyl7Zm9yKHZhciB1PWwubWFrZUNhbGNkYXRhKGUsIm9wZW4iKSxmPWwubWFrZUNhbGNkYXRhKGUsImhpZ2giKSxoPWwubWFrZUNhbGNkYXRhKGUsImxvdyIpLHA9bC5tYWtlQ2FsY2RhdGEoZSwiY2xvc2UiKSxkPUFycmF5LmlzQXJyYXkoZS50ZXh0KSxtPUFycmF5LmlzQXJyYXkoZS5ob3ZlcnRleHQpLGc9ITAsdj1udWxsLHk9ISFlLnhwZXJpb2RhbGlnbm1lbnQseD1bXSxiPTA7YjxvLmxlbmd0aDtiKyspe3ZhciBfPW9bYl0sdz11W2JdLFQ9ZltiXSxrPWhbYl0sQT1wW2JdO2lmKF8hPT1zJiZ3IT09cyYmVCE9PXMmJmshPT1zJiZBIT09cyl7QT09PXc/bnVsbCE9PXYmJkEhPT12JiYoZz1BPnYpOmc9QT53LHY9QTt2YXIgTT1jKHcsVCxrLEEpO00ucG9zPV8sTS55Yz0odytBKS8yLE0uaT1iLE0uZGlyPWc/ImluY3JlYXNpbmciOiJkZWNyZWFzaW5nIixNLng9TS5wb3MsTS55PVtrLFRdLHkmJihNLm9yaWdfcD1yW2JdKSxkJiYoTS50eD1lLnRleHRbYl0pLG0mJihNLmh0eD1lLmhvdmVydGV4dFtiXSkseC5wdXNoKE0pfWVsc2UgeC5wdXNoKHtwb3M6XyxlbXB0eTohMH0pfXJldHVybiBlLl9leHRyZW1lc1tsLl9pZF09YS5maW5kRXh0cmVtZXMobCxuLmNvbmNhdChoLGYpLHtwYWRkZWQ6ITB9KSx4Lmxlbmd0aCYmKHhbMF0udD17bGFiZWxzOntvcGVuOmkodCwib3BlbjoiKSsiICIsaGlnaDppKHQsImhpZ2g6IikrIiAiLGxvdzppKHQsImxvdzoiKSsiICIsY2xvc2U6aSh0LCJjbG9zZToiKSsiICJ9fSkseH1lLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcj1hLmdldEZyb21JZCh0LGUueGF4aXMpLGk9YS5nZXRGcm9tSWQodCxlLnlheGlzKSxzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1yLl9taW5EaWZmO2lmKCFpKXt2YXIgYSxzPXQuX2Z1bGxEYXRhLGw9W107Zm9yKGk9MS8wLGE9MDthPHMubGVuZ3RoO2ErKyl7dmFyIGM9c1thXTtpZigib2hsYyI9PT1jLnR5cGUmJiEwPT09Yy52aXNpYmxlJiZjLnhheGlzPT09ZS5faWQpe2wucHVzaChjKTt2YXIgdT1lLm1ha2VDYWxjZGF0YShjLCJ4Iik7Yy5fb3JpZ1g9dTt2YXIgZj1vKHIsZSwieCIsdSkudmFscztjLl94Y2FsYz1mO3ZhciBoPW4uZGlzdGluY3RWYWxzKGYpLm1pbkRpZmY7aCYmaXNGaW5pdGUoaCkmJihpPU1hdGgubWluKGksaCkpfX1mb3IoaT09PTEvMCYmKGk9MSksYT0wO2E8bC5sZW5ndGg7YSsrKWxbYV0uX21pbkRpZmY9aX1yZXR1cm4gaSpyLnRpY2t3aWR0aH0odCxyLGUpLHU9ZS5fbWluRGlmZjtlLl9taW5EaWZmPW51bGw7dmFyIGY9ZS5fb3JpZ1g7ZS5fb3JpZ1g9bnVsbDt2YXIgaD1lLl94Y2FsYztlLl94Y2FsYz1udWxsO3ZhciBwPWModCxlLGYsaCxpLGwpO3JldHVybiBlLl9leHRyZW1lc1tyLl9pZF09YS5maW5kRXh0cmVtZXMocixoLHt2cGFkOnUvMn0pLHAubGVuZ3RoPyhuLmV4dGVuZEZsYXQocFswXS50LHt3SG92ZXI6dS8yLHRpY2tMZW46c30pLHApOlt7dDp7ZW1wdHk6ITB9fV19LGNhbGNDb21tb246Y319LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCI6ODI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3fV0sMTEzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vb2hsY19kZWZhdWx0cyIpLGE9dCgiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIHModCxlLHIsbil7cihuKyIubGluZS5jb2xvciIpLHIobisiLmxpbmUud2lkdGgiLGUubGluZS53aWR0aCkscihuKyIubGluZS5kYXNoIixlLmxpbmUuZGFzaCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1pKHQsZSxjLGwpPyhhKHQsZSxsLGMse3g6ITB9KSxjKCJ4aG92ZXJmb3JtYXQiKSxjKCJ5aG92ZXJmb3JtYXQiKSxjKCJsaW5lLndpZHRoIiksYygibGluZS5kYXNoIikscyh0LGUsYywiaW5jcmVhc2luZyIpLHModCxlLGMsImRlY3JlYXNpbmciKSxjKCJ0ZXh0IiksYygiaG92ZXJ0ZXh0IiksYygidGlja3dpZHRoIiksbC5fcmVxdWVzdFJhbmdlc2xpZGVyW2UueGF4aXNdPSEwKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyI6MTIxMSwiLi9hdHRyaWJ1dGVzIjoxMTM3LCIuL29obGNfZGVmYXVsdHMiOjExNDJ9XSwxMTQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxzPXQoIi4uLy4uL2xpYiIpLmZpbGxUZXh0LGw9dCgiLi4vLi4vY29uc3RhbnRzL2RlbHRhLmpzIiksYz17aW5jcmVhc2luZzpsLklOQ1JFQVNJTkcuU1lNQk9MLGRlY3JlYXNpbmc6bC5ERUNSRUFTSU5HLlNZTUJPTH07ZnVuY3Rpb24gdSh0LGUscixuKXt2YXIgaSxzLGw9dC5jZCxjPXQueGEsdT1sWzBdLnRyYWNlLGY9bFswXS50LGg9dS50eXBlLHA9Im9obGMiPT09aD8ibCI6Im1pbiIsZD0ib2hsYyI9PT1oPyJoIjoibWF4IixtPWYuYlBvc3x8MCxnPWYuYmRQb3N8fGYudGlja0xlbix2PWYud0hvdmVyLHk9TWF0aC5taW4oMSxnL01hdGguYWJzKGMucjJjKGMucmFuZ2VbMV0pLWMucjJjKGMucmFuZ2VbMF0pKSk7ZnVuY3Rpb24geCh0KXt2YXIgcj1mdW5jdGlvbih0KXtyZXR1cm4gdC5wb3MrbS1lfSh0KTtyZXR1cm4gYS5pbmJveChyLXYscit2LGkpfWZ1bmN0aW9uIGIodCl7dmFyIGU9dFtwXSxuPXRbZF07cmV0dXJuIGU9PT1ufHxhLmluYm94KGUtcixuLXIsaSl9ZnVuY3Rpb24gXyh0KXtyZXR1cm4oeCh0KStiKHQpKS8yfWk9dC5tYXhIb3ZlckRpc3RhbmNlLXkscz10Lm1heFNwaWtlRGlzdGFuY2UteTt2YXIgdz1hLmdldERpc3RhbmNlRnVuY3Rpb24obix4LGIsXyk7aWYoYS5nZXRDbG9zZXN0KGwsdyx0KSwhMT09PXQuaW5kZXgpcmV0dXJuIG51bGw7dmFyIFQ9bFt0LmluZGV4XTtpZihULmVtcHR5KXJldHVybiBudWxsO3ZhciBrPXVbVC5kaXJdLEE9ay5saW5lLmNvbG9yO3JldHVybiBvLm9wYWNpdHkoQSkmJmsubGluZS53aWR0aD90LmNvbG9yPUE6dC5jb2xvcj1rLmZpbGxjb2xvcix0LngwPWMuYzJwKFQucG9zK20tZywhMCksdC54MT1jLmMycChULnBvcyttK2csITApLHQueExhYmVsVmFsPXZvaWQgMCE9PVQub3JpZ19wP1Qub3JpZ19wOlQucG9zLHQuc3Bpa2VEaXN0YW5jZT1fKFQpKnMvaSx0LnhTcGlrZT1jLmMycChULnBvcywhMCksdH1mdW5jdGlvbiBmKHQsZSxyLGEpe3ZhciBvPXQuY2Qscz10LnlhLGw9b1swXS50cmFjZSxjPW9bMF0udCxmPVtdLGg9dSh0LGUscixhKTtpZighaClyZXR1cm5bXTt2YXIgcD1vW2guaW5kZXhdLmhpfHxsLmhvdmVyaW5mbyxkPXAuc3BsaXQoIisiKTtpZighKCJhbGwiPT09cHx8LTEhPT1kLmluZGV4T2YoInkiKSkpcmV0dXJuW107Zm9yKHZhciBtPVsiaGlnaCIsIm9wZW4iLCJjbG9zZSIsImxvdyJdLGc9e30sdj0wO3Y8bS5sZW5ndGg7disrKXt2YXIgeSx4PW1bdl0sYj1sW3hdW2guaW5kZXhdLF89cy5jMnAoYiwhMCk7YiBpbiBnPyh5PWdbYl0pLnlMYWJlbCs9Ijxicj4iK2MubGFiZWxzW3hdK24uaG92ZXJMYWJlbFRleHQocyxiLGwueWhvdmVyZm9ybWF0KTooKHk9aS5leHRlbmRGbGF0KHt9LGgpKS55MD15LnkxPV8seS55TGFiZWxWYWw9Yix5LnlMYWJlbD1jLmxhYmVsc1t4XStuLmhvdmVyTGFiZWxUZXh0KHMsYixsLnlob3ZlcmZvcm1hdCkseS5uYW1lPSIiLGYucHVzaCh5KSxnW2JdPXkpfXJldHVybiBmfWZ1bmN0aW9uIGgodCxlLHIsaSl7dmFyIGE9dC5jZCxvPXQueWEsbD1hWzBdLnRyYWNlLGY9YVswXS50LGg9dSh0LGUscixpKTtpZighaClyZXR1cm5bXTt2YXIgcD1hW2guaW5kZXhdLGQ9aC5pbmRleD1wLmksbT1wLmRpcjtmdW5jdGlvbiBnKHQpe3JldHVybiBmLmxhYmVsc1t0XStuLmhvdmVyTGFiZWxUZXh0KG8sbFt0XVtkXSxsLnlob3ZlcmZvcm1hdCl9dmFyIHY9cC5oaXx8bC5ob3ZlcmluZm8seT12LnNwbGl0KCIrIikseD0iYWxsIj09PXYsYj14fHwtMSE9PXkuaW5kZXhPZigieSIpLF89eHx8LTEhPT15LmluZGV4T2YoInRleHQiKSx3PWI/W2coIm9wZW4iKSxnKCJoaWdoIiksZygibG93IiksZygiY2xvc2UiKSsiICAiK2NbbV1dOltdO3JldHVybiBfJiZzKHAsbCx3KSxoLmV4dHJhVGV4dD13LmpvaW4oIjxicj4iKSxoLnkwPWgueTE9by5jMnAocC55YywhMCksW2hdfWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHQuY2RbMF0udHJhY2UuaG92ZXJsYWJlbC5zcGxpdD9mKHQsZSxyLG4pOmgodCxlLHIsbil9LGhvdmVyU3BsaXQ6Zixob3Zlck9uUG9pbnRzOmh9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29tcG9uZW50cy9meCI6Njc5LCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiOjc0NiwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4Mjd9XSwxMTQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6Im9obGMiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCJzaG93TGVnZW5kIl0sbWV0YTp7fSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi9hdHRyaWJ1dGVzIjoxMTM3LCIuL2NhbGMiOjExMzgsIi4vZGVmYXVsdHMiOjExMzksIi4vaG92ZXIiOjExNDAsIi4vcGxvdCI6MTE0MywiLi9zZWxlY3QiOjExNDQsIi4vc3R5bGUiOjExNDV9XSwxMTQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89cigieCIpLHM9cigib3BlbiIpLGw9cigiaGlnaCIpLGM9cigibG93IiksdT1yKCJjbG9zZSIpO2lmKHIoImhvdmVybGFiZWwuc3BsaXQiKSxuLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiXSxhKSxzJiZsJiZjJiZ1KXt2YXIgZj1NYXRoLm1pbihzLmxlbmd0aCxsLmxlbmd0aCxjLmxlbmd0aCx1Lmxlbmd0aCk7cmV0dXJuIG8mJihmPU1hdGgubWluKGYsaS5taW5Sb3dMZW5ndGgobykpKSxlLl9sZW5ndGg9ZixmfX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDR9XSwxMTQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1lLnlheGlzLHM9ZS54YXhpcyxsPSEhcy5yYW5nZWJyZWFrcztpLm1ha2VUcmFjZUdyb3VwcyhhLHIsInRyYWNlIG9obGMiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXRbMF0sYT1yLnQ7aWYoITAhPT1yLnRyYWNlLnZpc2libGV8fGEuZW1wdHkpZS5yZW1vdmUoKTtlbHNle3ZhciBjPWEudGlja0xlbix1PWUuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShpLmlkZW50aXR5KTt1LmVudGVyKCkuYXBwZW5kKCJwYXRoIiksdS5leGl0KCkucmVtb3ZlKCksdS5hdHRyKCJkIiwoZnVuY3Rpb24odCl7aWYodC5lbXB0eSlyZXR1cm4iTTAsMFoiO3ZhciBlPXMuYzJwKHQucG9zLWMsITApLHI9cy5jMnAodC5wb3MrYywhMCksbj1sPyhlK3IpLzI6cy5jMnAodC5wb3MsITApO3JldHVybiJNIitlKyIsIitvLmMycCh0Lm8sITApKyJIIituKyJNIituKyIsIitvLmMycCh0LmgsITApKyJWIitvLmMycCh0LmwsITApKyJNIityKyIsIitvLmMycCh0LmMsITApKyJIIitufSkpfX0pKX19LHsiLi4vLi4vbGliIjo3NzYsIkBwbG90bHkvZDMiOjU4fV0sMTE0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuY2QsaT10LnhheGlzLGE9dC55YXhpcyxvPVtdLHM9blswXS50LmJQb3N8fDA7aWYoITE9PT1lKWZvcihyPTA7cjxuLmxlbmd0aDtyKyspbltyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGw9bltyXTtlLmNvbnRhaW5zKFtpLmMycChsLnBvcytzKSxhLmMycChsLnljKV0sbnVsbCxsLmksdCk/KG8ucHVzaCh7cG9pbnROdW1iZXI6bC5pLHg6aS5jMmQobC5wb3MpLHk6YS5jMmQobC55Yyl9KSxsLnNlbGVjdGVkPTEpOmwuc2VsZWN0ZWQ9MH1yZXR1cm4gb319LHt9XSwxMTQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG89cnx8bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLm9obGNsYXllciIpLnNlbGVjdEFsbCgiZy50cmFjZSIpO28uc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkpLG8uZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5lYWNoKChmdW5jdGlvbih0KXtpZighdC5lbXB0eSl7dmFyIHI9ZVt0LmRpcl0ubGluZTtuLnNlbGVjdCh0aGlzKS5zdHlsZSgiZmlsbCIsIm5vbmUiKS5jYWxsKGEuc3Ryb2tlLHIuY29sb3IpLmNhbGwoaS5kYXNoTGluZSxyLmRhc2gsci53aWR0aCkuc3R5bGUoIm9wYWNpdHkiLGUuc2VsZWN0ZWRwb2ludHMmJiF0LnNlbGVjdGVkPy4zOjEpfX0pKX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiQHBsb3RseS9kMyI6NTh9XSwxMTQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxsPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsYz1uKHtlZGl0VHlwZToiY2FsYyJ9LG8oImxpbmUiLHtlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGluZWFyIiwiaHNwbGluZSJdLGRmbHQ6ImxpbmVhciIsZWRpdFR5cGU6InBsb3QifSxob3ZlcnRlbXBsYXRlOnMoe2VkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSx7a2V5czpbImNvdW50IiwicHJvYmFiaWxpdHkiXX0pfSk7ZS5leHBvcnRzPXtkb21haW46bCh7bmFtZToicGFyY2F0cyIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSksaG92ZXJpbmZvOm4oe30saS5ob3ZlcmluZm8se2ZsYWdzOlsiY291bnQiLCJwcm9iYWJpbGl0eSJdLGVkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSksaG92ZXJvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2F0ZWdvcnkiLCJjb2xvciIsImRpbWVuc2lvbiJdLGRmbHQ6ImNhdGVnb3J5IixlZGl0VHlwZToicGxvdCJ9LGhvdmVydGVtcGxhdGU6cyh7ZWRpdFR5cGU6InBsb3QiLGFycmF5T2s6ITF9LHtrZXlzOlsiY291bnQiLCJwcm9iYWJpbGl0eSIsImNhdGVnb3J5IiwiY2F0ZWdvcnljb3VudCIsImNvbG9yY291bnQiLCJiYW5kY29sb3Jjb3VudCJdfSksYXJyYW5nZW1lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBlcnBlbmRpY3VsYXIiLCJmcmVlZm9ybSIsImZpeGVkIl0sZGZsdDoicGVycGVuZGljdWxhciIsZWRpdFR5cGU6InBsb3QifSxidW5kbGVjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxzb3J0cGF0aHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZvcndhcmQiLCJiYWNrd2FyZCJdLGRmbHQ6ImZvcndhcmQiLGVkaXRUeXBlOiJwbG90In0sbGFiZWxmb250OmEoe2VkaXRUeXBlOiJjYWxjIn0pLHRpY2tmb250OmEoe2VkaXRUeXBlOiJjYWxjIn0pLGRpbWVuc2lvbnM6e19pc0xpbmtlZFRvQXJyYXk6ImRpbWVuc2lvbiIsbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxjYXRlZ29yeW9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0cmFjZSIsImNhdGVnb3J5IGFzY2VuZGluZyIsImNhdGVnb3J5IGRlc2NlbmRpbmciLCJhcnJheSJdLGRmbHQ6InRyYWNlIixlZGl0VHlwZToiY2FsYyJ9LGNhdGVnb3J5YXJyYXk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdGlja3RleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdLGVkaXRUeXBlOiJjYWxjIn0sZGlzcGxheWluZGV4Ont2YWxUeXBlOiJpbnRlZ2VyIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIix2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn19LGxpbmU6Yyxjb3VudHM6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxjdXN0b21kYXRhOnZvaWQgMCxob3ZlcmxhYmVsOnZvaWQgMCxpZHM6dm9pZCAwLGxlZ2VuZGdyb3VwOnZvaWQgMCxsZWdlbmRyYW5rOnZvaWQgMCxvcGFjaXR5OnZvaWQgMCxzZWxlY3RlZHBvaW50czp2b2lkIDAsc2hvd2xlZ2VuZDp2b2lkIDB9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODIzLCIuLi8uLi9wbG90cy9kb21haW4iOjg1NSwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4NTYsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OX1dLDExNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxpPXQoIi4vcGxvdCIpO3IubmFtZT0icGFyY2F0cyIsci5wbG90PWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4odC5jYWxjZGF0YSwicGFyY2F0cyIpO2lmKG8ubGVuZ3RoKXt2YXIgcz1vWzBdO2kodCxzLHIsYSl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKCJwYXJjYXRzIiksYT1lLl9oYXMmJmUuX2hhcygicGFyY2F0cyIpO2kmJiFhJiZuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5wYXJjYXRzIikucmVtb3ZlKCl9fSx7Ii4uLy4uL3Bsb3RzL2dldF9kYXRhIjo4NjQsIi4vcGxvdCI6MTE1Mn1dLDExNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2d1cCIpLndyYXAsaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLG89dCgiLi4vLi4vbGliL2ZpbHRlcl91bmlxdWUuanMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9dCgiLi4vLi4vbGliIiksYz10KCJmYXN0LWlzbnVtZXJpYyIpO2Z1bmN0aW9uIHUodCxlLHIpe3QudmFsdWVJbmRzLnB1c2goZSksdC5jb3VudCs9cn1mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm57Y2F0ZWdvcnlJbmRzOnQsY29sb3I6ZSxyYXdDb2xvcjpyLHZhbHVlSW5kczpbXSxjb3VudDowfX1mdW5jdGlvbiBoKHQsZSxyKXt0LnZhbHVlSW5kcy5wdXNoKGUpLHQuY291bnQrPXJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bC5maWx0ZXJWaXNpYmxlKGUuZGltZW5zaW9ucyk7aWYoMD09PXIubGVuZ3RoKXJldHVybltdO3ZhciBwLGQsbSxnPXIubWFwKChmdW5jdGlvbih0KXt2YXIgZTtpZigidHJhY2UiPT09dC5jYXRlZ29yeW9yZGVyKWU9bnVsbDtlbHNlIGlmKCJhcnJheSI9PT10LmNhdGVnb3J5b3JkZXIpZT10LmNhdGVnb3J5YXJyYXk7ZWxzZXtlPW8odC52YWx1ZXMpO2Zvcih2YXIgcj0hMCxuPTA7bjxlLmxlbmd0aDtuKyspaWYoIWMoZVtuXSkpe3I9ITE7YnJlYWt9ZS5zb3J0KHI/bC5zb3J0ZXJBc2M6dm9pZCAwKSwiY2F0ZWdvcnkgZGVzY2VuZGluZyI9PT10LmNhdGVnb3J5b3JkZXImJihlPWUucmV2ZXJzZSgpKX1yZXR1cm4gZnVuY3Rpb24odCxlKXtlPW51bGw9PWU/W106ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpO3ZhciByPXt9LG49e30saT1bXTtlLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7clt0XT0wLG5bdF09ZX0pKTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG8scz10W2FdO3ZvaWQgMD09PXJbc10/KHJbc109MSxvPWUucHVzaChzKS0xLG5bc109byk6KHJbc10rKyxvPW5bc10pLGkucHVzaChvKX12YXIgbD1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHJbdF19KSk7cmV0dXJue3VuaXF1ZVZhbHVlczplLHVuaXF1ZUNvdW50czpsLGluZHM6aX19KHQudmFsdWVzLGUpfSkpO3A9bC5pc0FycmF5T3JUeXBlZEFycmF5KGUuY291bnRzKT9lLmNvdW50czpbZS5jb3VudHNdLGZ1bmN0aW9uKHQpe3ZhciBlO2lmKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoO3IrKyl7aWYodFtyXTwwfHx0W3JdPj10Lmxlbmd0aClyZXR1cm4hMTtpZih2b2lkIDAhPT1lW3Rbcl1dKXJldHVybiExO2VbdFtyXV09ITB9cmV0dXJuITB9KHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5aW5kZXh9KSkpKWZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5fZGlzcGxheWluZGV4PXRbZV0uZGlzcGxheWluZGV4O2Vsc2UgZm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLl9kaXNwbGF5aW5kZXg9ZX0ociksci5mb3JFYWNoKChmdW5jdGlvbih0LGUpeyFmdW5jdGlvbih0LGUpe3QuX2NhdGVnb3J5YXJyYXk9ZS51bmlxdWVWYWx1ZXMsbnVsbD09PXQudGlja3RleHR8fHZvaWQgMD09PXQudGlja3RleHQ/dC5fdGlja3RleHQ9W106dC5fdGlja3RleHQ9dC50aWNrdGV4dC5zbGljZSgpO2Zvcih2YXIgcj10Ll90aWNrdGV4dC5sZW5ndGg7cjxlLnVuaXF1ZVZhbHVlcy5sZW5ndGg7cisrKXQuX3RpY2t0ZXh0LnB1c2goZS51bmlxdWVWYWx1ZXNbcl0pfSh0LGdbZV0pfSkpO3ZhciB2LHk9ZS5saW5lO3k/KGkoZSwibGluZSIpJiZhKHQsZSx7dmFsczplLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOiJsaW5lIixjTGV0dGVyOiJjIn0pLHY9cy50cnlDb2xvcnNjYWxlKHkpKTp2PWwuaWRlbnRpdHk7dmFyIHgsYixfLHcsVCxrPXJbMF0udmFsdWVzLmxlbmd0aCxBPXt9LE09Zy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmluZHN9KSk7Zm9yKG09MCx4PTA7eDxrO3grKyl7dmFyIFM9W107Zm9yKGI9MDtiPE0ubGVuZ3RoO2IrKylTLnB1c2goTVtiXVt4XSk7ZD1wW3glcC5sZW5ndGhdLG0rPWQ7dmFyIEU9KF89eCx3PXZvaWQgMCxUPXZvaWQgMCxsLmlzQXJyYXlPclR5cGVkQXJyYXkoeS5jb2xvcik/VD13PXkuY29sb3JbXyV5LmNvbG9yLmxlbmd0aF06dz15LmNvbG9yLHtjb2xvcjp2KHcpLHJhd0NvbG9yOlR9KSxMPVMrIi0iK0UucmF3Q29sb3I7dm9pZCAwPT09QVtMXSYmKEFbTF09ZihTLEUuY29sb3IsRS5yYXdDb2xvcikpLGgoQVtMXSx4LGQpfXZhciBDLFA9ci5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJue2RpbWVuc2lvbkluZDp0LGNvbnRhaW5lckluZDplLGRpc3BsYXlJbmQ6cixkaW1lbnNpb25MYWJlbDpuLGNvdW50OmksY2F0ZWdvcmllczpbXSxkcmFnWDpudWxsfX0oZSx0Ll9pbmRleCx0Ll9kaXNwbGF5aW5kZXgsdC5sYWJlbCxtKX0pKTtmb3IoeD0wO3g8azt4KyspZm9yKGQ9cFt4JXAubGVuZ3RoXSxiPTA7YjxQLmxlbmd0aDtiKyspe3ZhciBJPVBbYl0uY29udGFpbmVySW5kLE89Z1tiXS5pbmRzW3hdLHo9UFtiXS5jYXRlZ29yaWVzO2lmKHZvaWQgMD09PXpbT10pe3ZhciBEPWUuZGltZW5zaW9uc1tJXS5fY2F0ZWdvcnlhcnJheVtPXSxSPWUuZGltZW5zaW9uc1tJXS5fdGlja3RleHRbT107eltPXT17ZGltZW5zaW9uSW5kOmIsY2F0ZWdvcnlJbmQ6Qz1PLGNhdGVnb3J5VmFsdWU6RCxkaXNwbGF5SW5kOkMsY2F0ZWdvcnlMYWJlbDpSLHZhbHVlSW5kczpbXSxjb3VudDowLGRyYWdZOm51bGx9fXUoeltPXSx4LGQpfXJldHVybiBuKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllcy5sZW5ndGh9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUpfSkpO3JldHVybntkaW1lbnNpb25zOnQscGF0aHM6ZSx0cmFjZTp2b2lkIDAsbWF4Q2F0czpuLGNvdW50OnJ9fShQLEEsbSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjQ3LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NjUwLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9maWx0ZXJfdW5pcXVlLmpzIjo3NjcsIi4uLy4uL2xpYi9ndXAiOjc3MywiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDExNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLHM9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKSxjPXQoIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGgiKTtmdW5jdGlvbiB1KHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbC5kaW1lbnNpb25zLHIsaSl9dmFyIGk9cigidmFsdWVzIiksYT1yKCJ2aXNpYmxlIik7aWYoaSYmaS5sZW5ndGh8fChhPWUudmlzaWJsZT0hMSksYSl7cigibGFiZWwiKSxyKCJkaXNwbGF5aW5kZXgiLGUuX2luZGV4KTt2YXIgbyxzPXQuY2F0ZWdvcnlhcnJheSxjPUFycmF5LmlzQXJyYXkocykmJnMubGVuZ3RoPjA7YyYmKG89ImFycmF5Iik7dmFyIHU9cigiY2F0ZWdvcnlvcmRlciIsbyk7ImFycmF5Ij09PXU/KHIoImNhdGVnb3J5YXJyYXkiKSxyKCJ0aWNrdGV4dCIpKTooZGVsZXRlIHQuY2F0ZWdvcnlhcnJheSxkZWxldGUgdC50aWNrdGV4dCksY3x8ImFycmF5IiE9PXV8fChlLmNhdGVnb3J5b3JkZXI9InRyYWNlIil9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXtmdW5jdGlvbiBoKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLHIsaSl9dmFyIHA9cyh0LGUse25hbWU6ImRpbWVuc2lvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czp1fSksZD1mdW5jdGlvbih0LGUscixvLHMpe3MoImxpbmUuc2hhcGUiKSxzKCJsaW5lLmhvdmVydGVtcGxhdGUiKTt2YXIgbD1zKCJsaW5lLmNvbG9yIixvLmNvbG9yd2F5WzBdKTtpZihpKHQsImxpbmUiKSYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXtpZihsLmxlbmd0aClyZXR1cm4gcygibGluZS5jb2xvcnNjYWxlIiksYSh0LGUsbyxzLHtwcmVmaXg6ImxpbmUuIixjTGV0dGVyOiJjIn0pLGwubGVuZ3RoO2UubGluZS5jb2xvcj1yfXJldHVybiAxLzB9KHQsZSxyLGYsaCk7byhlLGYsaCksQXJyYXkuaXNBcnJheShwKSYmcC5sZW5ndGh8fChlLnZpc2libGU9ITEpLGMoZSxwLCJ2YWx1ZXMiLGQpLGgoImhvdmVyb24iKSxoKCJob3ZlcnRlbXBsYXRlIiksaCgiYXJyYW5nZW1lbnQiKSxoKCJidW5kbGVjb2xvcnMiKSxoKCJzb3J0cGF0aHMiKSxoKCJjb3VudHMiKTt2YXIgbT17ZmFtaWx5OmYuZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKGYuZm9udC5zaXplKSxjb2xvcjpmLmZvbnQuY29sb3J9O24uY29lcmNlRm9udChoLCJsYWJlbGZvbnQiLG0pO3ZhciBnPXtmYW1pbHk6Zi5mb250LmZhbWlseSxzaXplOk1hdGgucm91bmQoZi5mb250LnNpemUvMS4yKSxjb2xvcjpmLmZvbnQuY29sb3J9O24uY29lcmNlRm9udChoLCJ0aWNrZm9udCIsZyl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjQ5LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NjUwLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo4MjIsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoIjoxMTYyLCIuL2F0dHJpYnV0ZXMiOjExNDZ9XSwxMTUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLGNvbG9yYmFyOntjb250YWluZXI6ImxpbmUiLG1pbjoiY21pbiIsbWF4OiJjbWF4In0sbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InBhcmNhdHMiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbIm5vT3BhY2l0eSJdLG1ldGE6e319fSx7Ii4vYXR0cmlidXRlcyI6MTE0NiwiLi9iYXNlX3Bsb3QiOjExNDcsIi4vY2FsYyI6MTE0OCwiLi9kZWZhdWx0cyI6MTE0OSwiLi9wbG90IjoxMTUyfV0sMTE1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJkMy1pbnRlcnBvbGF0ZSIpLmludGVycG9sYXRlTnVtYmVyLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF9hcGkiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxzPXQoIi4uLy4uL2xpYiIpLGw9cy5zdHJUcmFuc2xhdGUsYz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSx1PXQoInRpbnljb2xvcjIiKSxmPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpO2Z1bmN0aW9uIGgodCxlLHIsaSl7dmFyIGE9dC5tYXAoRi5iaW5kKDAsZSxyKSksbz1pLnNlbGVjdEFsbCgiZy5wYXJjYXRzbGF5ZXIiKS5kYXRhKFtudWxsXSk7by5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwicGFyY2F0c2xheWVyIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIik7dmFyIHU9by5zZWxlY3RBbGwoImcudHJhY2UucGFyY2F0cyIpLmRhdGEoYSxwKSxoPXUuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRyYWNlIHBhcmNhdHMiKTt1LmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBsKHQueCx0LnkpfSkpLGguYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJwYXRocyIpO3ZhciB5PXUuc2VsZWN0KCJnLnBhdGhzIikuc2VsZWN0QWxsKCJwYXRoLnBhdGgiKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5wYXRoc30pLHApO3kuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNvbG9yfSkpO3ZhciB4PXkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInBhdGgiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCkuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNvbG9yfSkpLmF0dHIoImZpbGwtb3BhY2l0eSIsMCk7Xyh4KSx5LmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdEfSkpLHguZW1wdHkoKXx8eS5zb3J0KG0pLHkuZXhpdCgpLnJlbW92ZSgpLHkub24oIm1vdXNlb3ZlciIsZykub24oIm1vdXNlb3V0Iix2KS5vbigiY2xpY2siLGIpLGguYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJkaW1lbnNpb25zIik7dmFyIHc9dS5zZWxlY3QoImcuZGltZW5zaW9ucyIpLnNlbGVjdEFsbCgiZy5kaW1lbnNpb24iKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaW1lbnNpb25zfSkscCk7dy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZGltZW5zaW9uIiksdy5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gbCh0LngsMCl9KSksdy5leGl0KCkucmVtb3ZlKCk7dmFyIEE9dy5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yaWVzfSkscCksTT1BLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjYXRlZ29yeSIpO0EuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGwoMCx0LnkpfSkpLE0uYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJjYXRyZWN0IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIiksQS5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KSksVChNKTt2YXIgUz1BLnNlbGVjdEFsbCgicmVjdC5iYW5kcmVjdCIpLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJhbmRzfSkscCk7Uy5lYWNoKChmdW5jdGlvbigpe3MucmFpc2VUb1RvcCh0aGlzKX0pKSxTLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pKTt2YXIgRT1TLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYW5kcmVjdCIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKS5hdHRyKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sb3J9KSkuYXR0cigiZmlsbC1vcGFjaXR5IiwwKTtTLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKS5hdHRyKCJjdXJzb3IiLChmdW5jdGlvbih0KXtyZXR1cm4iZml4ZWQiPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50PyJkZWZhdWx0IjoicGVycGVuZGljdWxhciI9PT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQ/Im5zLXJlc2l6ZSI6Im1vdmUifSkpLGsoRSksUy5leGl0KCkucmVtb3ZlKCksTS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImNhdGxhYmVsIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIik7dmFyIHo9ZS5fZnVsbExheW91dC5wYXBlcl9iZ2NvbG9yO0Euc2VsZWN0KCJ0ZXh0LmNhdGxhYmVsIikuYXR0cigidGV4dC1hbmNob3IiLChmdW5jdGlvbih0KXtyZXR1cm4gZCh0KT8ic3RhcnQiOiJlbmQifSkpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LXNoYWRvdyIsZi5tYWtlVGV4dFNoYWRvdyh6KSkuc3R5bGUoImZpbGwiLCJyZ2IoMCwgMCwgMCkiKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGQodCk/dC53aWR0aCs1Oi01fSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQvMn0pKS50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5jYXRlZ29yeUxhYmVsfSkpLmVhY2goKGZ1bmN0aW9uKHQpe2MuZm9udChuLnNlbGVjdCh0aGlzKSx0LnBhcmNhdHNWaWV3TW9kZWwuY2F0ZWdvcnlsYWJlbGZvbnQpLGYuY29udmVydFRvVHNwYW5zKG4uc2VsZWN0KHRoaXMpLGUpfSkpLE0uYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJkaW1sYWJlbCIpLEEuc2VsZWN0KCJ0ZXh0LmRpbWxhYmVsIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJiYXNlbGluZSIpLmF0dHIoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3JldHVybiJmaXhlZCI9PT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQ/ImRlZmF1bHQiOiJldy1yZXNpemUifSkpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aC8yfSkpLmF0dHIoInkiLC01KS50ZXh0KChmdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZT90LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uc1t0Lm1vZGVsLmRpbWVuc2lvbkluZF0uZGltZW5zaW9uTGFiZWw6bnVsbH0pKS5lYWNoKChmdW5jdGlvbih0KXtjLmZvbnQobi5zZWxlY3QodGhpcyksdC5wYXJjYXRzVmlld01vZGVsLmxhYmVsZm9udCl9KSksQS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5vbigibW91c2VvdmVyIixMKS5vbigibW91c2VvdXQiLEMpLEEuZXhpdCgpLnJlbW92ZSgpLHcuY2FsbChuLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oKGZ1bmN0aW9uKHQpe3JldHVybnt4OnQueCx5OjB9fSkpLm9uKCJkcmFnc3RhcnQiLFApLm9uKCJkcmFnIixJKS5vbigiZHJhZ2VuZCIsTykpLHUuZWFjaCgoZnVuY3Rpb24odCl7dC50cmFjZVNlbGVjdGlvbj1uLnNlbGVjdCh0aGlzKSx0LnBhdGhTZWxlY3Rpb249bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnBhdGhzIikuc2VsZWN0QWxsKCJwYXRoLnBhdGgiKSx0LmRpbWVuc2lvblNlbGVjdGlvbj1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuZGltZW5zaW9ucyIpLnNlbGVjdEFsbCgiZy5kaW1lbnNpb24iKX0pKSx1LmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBwKHQpe3JldHVybiB0LmtleX1mdW5jdGlvbiBkKHQpe3ZhciBlPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zLmxlbmd0aCxyPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2UtMV0ubW9kZWwuZGltZW5zaW9uSW5kO3JldHVybiB0Lm1vZGVsLmRpbWVuc2lvbkluZD09PXJ9ZnVuY3Rpb24gbSh0LGUpe3JldHVybiB0Lm1vZGVsLnJhd0NvbG9yPmUubW9kZWwucmF3Q29sb3I/MTp0Lm1vZGVsLnJhd0NvbG9yPGUubW9kZWwucmF3Q29sb3I/LTE6MH1mdW5jdGlvbiBnKHQpe2lmKCF0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbiYmLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigic2tpcCIpKXtzLnJhaXNlVG9Ub3AodGhpcyksdyhuLnNlbGVjdCh0aGlzKSk7dmFyIGU9eSh0KSxyPXgodCk7aWYodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LmVtaXQoInBsb3RseV9ob3ZlciIse3BvaW50czplLGV2ZW50Om4uZXZlbnQsY29uc3RyYWludHM6cn0pLC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoIm5vbmUiKSl7dmFyIGksYSxsLGM9bi5tb3VzZSh0aGlzKVswXSxmPXQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixoPXQucGFyY2F0c1ZpZXdNb2RlbC50cmFjZSxwPWYuX2Z1bGxMYXlvdXQsZD1wLl9wYXBlcmRpdi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbT10LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Zm9yKGw9MDtsPHQubGVmdFhzLmxlbmd0aC0xO2wrKylpZih0LmxlZnRYc1tsXSt0LmRpbVdpZHRoc1tsXS0yPD1jJiZjPD10LmxlZnRYc1tsKzFdKzIpe3ZhciBnPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2xdLHY9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbbCsxXTtpPShnLngrZy53aWR0aCt2LngpLzIsYT0odC50b3BZc1tsXSt0LnRvcFlzW2wrMV0rdC5oZWlnaHQpLzI7YnJlYWt9dmFyIGI9dC5wYXJjYXRzVmlld01vZGVsLngraSxfPXQucGFyY2F0c1ZpZXdNb2RlbC55K2EsVD11Lm1vc3RSZWFkYWJsZSh0Lm1vZGVsLmNvbG9yLFsiYmxhY2siLCJ3aGl0ZSJdKSxrPXQubW9kZWwuY291bnQsQT1rL3QucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5jb3VudCxNPXtjb3VudExhYmVsOmsscHJvYmFiaWxpdHlMYWJlbDpBLnRvRml4ZWQoMyl9LFM9W107LTEhPT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigiY291bnQiKSYmUy5wdXNoKFsiQ291bnQ6IixNLmNvdW50TGFiZWxdLmpvaW4oIiAiKSksLTEhPT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigicHJvYmFiaWxpdHkiKSYmUy5wdXNoKFsiUDoiLE0ucHJvYmFiaWxpdHlMYWJlbF0uam9pbigiICIpKTt2YXIgRT1TLmpvaW4oIjxicj4iKSxMPW4ubW91c2UoZilbMF07by5sb25lSG92ZXIoe3RyYWNlOmgseDpiLWQubGVmdCttLmxlZnQseTpfLWQudG9wK20udG9wLHRleHQ6RSxjb2xvcjp0Lm1vZGVsLmNvbG9yLGJvcmRlckNvbG9yOiJibGFjayIsZm9udEZhbWlseTonTW9uYWNvLCAiQ291cmllciBOZXciLCBtb25vc3BhY2UnLGZvbnRTaXplOjEwLGZvbnRDb2xvcjpULGlkZWFsQWxpZ246TDxiPyJyaWdodCI6ImxlZnQiLGhvdmVydGVtcGxhdGU6KGgubGluZXx8e30pLmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczpNLGV2ZW50RGF0YTpbe2RhdGE6aC5faW5wdXQsZnVsbERhdGE6aCxjb3VudDprLHByb2JhYmlsaXR5OkF9XX0se2NvbnRhaW5lcjpwLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpwLl9wYXBlci5ub2RlKCksZ2Q6Zn0pfX19ZnVuY3Rpb24gdih0KXtpZighdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb24mJihfKG4uc2VsZWN0KHRoaXMpKSxvLmxvbmVVbmhvdmVyKHQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5fZnVsbExheW91dC5faG92ZXJsYXllci5ub2RlKCkpLHQucGFyY2F0c1ZpZXdNb2RlbC5wYXRoU2VsZWN0aW9uLnNvcnQobSksLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigic2tpcCIpKSl7dmFyIGU9eSh0KSxyPXgodCk7dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LmVtaXQoInBsb3RseV91bmhvdmVyIix7cG9pbnRzOmUsZXZlbnQ6bi5ldmVudCxjb25zdHJhaW50czpyfSl9fWZ1bmN0aW9uIHkodCl7Zm9yKHZhciBlPVtdLHI9eih0LnBhcmNhdHNWaWV3TW9kZWwpLG49MDtuPHQubW9kZWwudmFsdWVJbmRzLmxlbmd0aDtuKyspe3ZhciBpPXQubW9kZWwudmFsdWVJbmRzW25dO2UucHVzaCh7Y3VydmVOdW1iZXI6cixwb2ludE51bWJlcjppfSl9cmV0dXJuIGV9ZnVuY3Rpb24geCh0KXtmb3IodmFyIGU9e30scj10LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9ucyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl0sYT1pLmNhdGVnb3JpZXNbdC5tb2RlbC5jYXRlZ29yeUluZHNbbl1dO2VbaS5jb250YWluZXJJbmRdPWEuY2F0ZWdvcnlWYWx1ZX1yZXR1cm4gdm9pZCAwIT09dC5tb2RlbC5yYXdDb2xvciYmKGUuY29sb3I9dC5tb2RlbC5yYXdDb2xvciksZX1mdW5jdGlvbiBiKHQpe2lmKC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInNraXAiKSl7dmFyIGU9eSh0KSxyPXgodCk7dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LmVtaXQoInBsb3RseV9jbGljayIse3BvaW50czplLGV2ZW50Om4uZXZlbnQsY29uc3RyYWludHM6cn0pfX1mdW5jdGlvbiBfKHQpe3QuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNvbG9yfSkpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjYpLmF0dHIoInN0cm9rZSIsImxpZ2h0Z3JheSIpLmF0dHIoInN0cm9rZS13aWR0aCIsLjIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwxKX1mdW5jdGlvbiB3KHQpe3QuYXR0cigiZmlsbC1vcGFjaXR5IiwuOCkuYXR0cigic3Ryb2tlIiwoZnVuY3Rpb24odCl7cmV0dXJuIHUubW9zdFJlYWRhYmxlKHQubW9kZWwuY29sb3IsWyJibGFjayIsIndoaXRlIl0pfSkpLmF0dHIoInN0cm9rZS13aWR0aCIsLjMpfWZ1bmN0aW9uIFQodCl7dC5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLXdpZHRoIiwxKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMSl9ZnVuY3Rpb24gayh0KXt0LmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLXdpZHRoIiwuMikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDEpLmF0dHIoImZpbGwtb3BhY2l0eSIsMSl9ZnVuY3Rpb24gQSh0KXt2YXIgZT10LnBhcmNhdHNWaWV3TW9kZWwucGF0aFNlbGVjdGlvbixyPXQuY2F0ZWdvcnlWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uSW5kLG49dC5jYXRlZ29yeVZpZXdNb2RlbC5tb2RlbC5jYXRlZ29yeUluZDtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLm1vZGVsLmNhdGVnb3J5SW5kc1tyXT09PW4mJmUubW9kZWwuY29sb3I9PT10LmNvbG9yfSkpfWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBpPW4uc2VsZWN0KHQpLmRhdHVtKCksYT1pLmNhdGVnb3J5Vmlld01vZGVsLm1vZGVsLG89aS5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LHM9bi5zZWxlY3QodC5wYXJlbnROb2RlKS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKSxsPVtdO3MuZWFjaCgoZnVuY3Rpb24odCl7QSh0KS5lYWNoKChmdW5jdGlvbih0KXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShsLHkodCkpfSkpfSkpO3ZhciBjPXt9O2NbYS5kaW1lbnNpb25JbmRdPWEuY2F0ZWdvcnlWYWx1ZSxvLmVtaXQoZSx7cG9pbnRzOmwsZXZlbnQ6cixjb25zdHJhaW50czpjfSl9ZnVuY3Rpb24gUyh0LGUscil7dmFyIGk9bi5zZWxlY3QodCkuZGF0dW0oKSxhPWkuY2F0ZWdvcnlWaWV3TW9kZWwubW9kZWwsbz1pLnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYscz1BKGkpLGw9W107cy5lYWNoKChmdW5jdGlvbih0KXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShsLHkodCkpfSkpO3ZhciBjPXt9O2NbYS5kaW1lbnNpb25JbmRdPWEuY2F0ZWdvcnlWYWx1ZSx2b2lkIDAhPT1pLnJhd0NvbG9yJiYoYy5jb2xvcj1pLnJhd0NvbG9yKSxvLmVtaXQoZSx7cG9pbnRzOmwsZXZlbnQ6cixjb25zdHJhaW50czpjfSl9ZnVuY3Rpb24gRSh0LGUscil7dC5fZnVsbExheW91dC5fY2FsY0ludmVyc2VUcmFuc2Zvcm0odCk7dmFyIGksYSxvPXQuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWCxzPXQuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWSxsPW4uc2VsZWN0KHIucGFyZW50Tm9kZSkuc2VsZWN0KCJyZWN0LmNhdHJlY3QiKSxjPWwubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHU9bC5kYXR1bSgpLGY9dS5wYXJjYXRzVmlld01vZGVsLGg9Zi5tb2RlbC5kaW1lbnNpb25zW3UubW9kZWwuZGltZW5zaW9uSW5kXSxwPWYudHJhY2UsZD1jLnRvcCtjLmhlaWdodC8yO2YuZGltZW5zaW9ucy5sZW5ndGg+MSYmaC5kaXNwbGF5SW5kPT09Zi5kaW1lbnNpb25zLmxlbmd0aC0xPyhpPWMubGVmdCxhPSJsZWZ0Iik6KGk9Yy5sZWZ0K2Mud2lkdGgsYT0icmlnaHQiKTt2YXIgbT11Lm1vZGVsLmNvdW50LGc9dS5tb2RlbC5jYXRlZ29yeUxhYmVsLHY9bS91LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuY291bnQseT17Y291bnRMYWJlbDptLGNhdGVnb3J5TGFiZWw6Zyxwcm9iYWJpbGl0eUxhYmVsOnYudG9GaXhlZCgzKX0seD1bXTstMSE9PXUucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJjb3VudCIpJiZ4LnB1c2goWyJDb3VudDoiLHkuY291bnRMYWJlbF0uam9pbigiICIpKSwtMSE9PXUucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJwcm9iYWJpbGl0eSIpJiZ4LnB1c2goWyJQKCIreS5jYXRlZ29yeUxhYmVsKyIpOiIseS5wcm9iYWJpbGl0eUxhYmVsXS5qb2luKCIgIikpO3ZhciBiPXguam9pbigiPGJyPiIpO3JldHVybnt0cmFjZTpwLHg6byooaS1lLmxlZnQpLHk6cyooZC1lLnRvcCksdGV4dDpiLGNvbG9yOiJsaWdodGdyYXkiLGJvcmRlckNvbG9yOiJibGFjayIsZm9udEZhbWlseTonTW9uYWNvLCAiQ291cmllciBOZXciLCBtb25vc3BhY2UnLGZvbnRTaXplOjEyLGZvbnRDb2xvcjoiYmxhY2siLGlkZWFsQWxpZ246YSxob3ZlcnRlbXBsYXRlOnAuaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOnksZXZlbnREYXRhOlt7ZGF0YTpwLl9pbnB1dCxmdWxsRGF0YTpwLGNvdW50Om0sY2F0ZWdvcnk6Zyxwcm9iYWJpbGl0eTp2fV19fWZ1bmN0aW9uIEwodCl7aWYoIXQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uJiYtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJza2lwIikpe2lmKG4ubW91c2UodGhpcylbMV08LTEpcmV0dXJuO3ZhciBlLHI9dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LGk9ci5fZnVsbExheW91dCxhPWkuX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxsPXQucGFyY2F0c1ZpZXdNb2RlbC5ob3Zlcm9uO2lmKCJjb2xvciI9PT1sPyghZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuZGF0dW0oKSxyPUEoZSk7dyhyKSxyLmVhY2goKGZ1bmN0aW9uKCl7cy5yYWlzZVRvVG9wKHRoaXMpfSkpLG4uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcj09PWUuY29sb3J9KSkuZWFjaCgoZnVuY3Rpb24oKXtzLnJhaXNlVG9Ub3AodGhpcyksbi5zZWxlY3QodGhpcykuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEuNSl9KSl9KHRoaXMpLFModGhpcywicGxvdGx5X2hvdmVyIixuLmV2ZW50KSk6KCFmdW5jdGlvbih0KXtuLnNlbGVjdCh0LnBhcmVudE5vZGUpLnNlbGVjdEFsbCgicmVjdC5iYW5kcmVjdCIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPUEodCk7dyhlKSxlLmVhY2goKGZ1bmN0aW9uKCl7cy5yYWlzZVRvVG9wKHRoaXMpfSkpfSkpLG4uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0KCJyZWN0LmNhdHJlY3QiKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoInN0cm9rZS13aWR0aCIsMi41KX0odGhpcyksTSh0aGlzLCJwbG90bHlfaG92ZXIiLG4uZXZlbnQpKSwtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJub25lIikpImNhdGVnb3J5Ij09PWw/ZT1FKHIsYSx0aGlzKToiY29sb3IiPT09bD9lPWZ1bmN0aW9uKHQsZSxyKXt0Ll9mdWxsTGF5b3V0Ll9jYWxjSW52ZXJzZVRyYW5zZm9ybSh0KTt2YXIgaSxhLG89dC5fZnVsbExheW91dC5faW52U2NhbGVYLHM9dC5fZnVsbExheW91dC5faW52U2NhbGVZLGw9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPW4uc2VsZWN0KHIpLmRhdHVtKCksZj1jLmNhdGVnb3J5Vmlld01vZGVsLGg9Zi5wYXJjYXRzVmlld01vZGVsLHA9aC5tb2RlbC5kaW1lbnNpb25zW2YubW9kZWwuZGltZW5zaW9uSW5kXSxkPWgudHJhY2UsbT1sLnkrbC5oZWlnaHQvMjtoLmRpbWVuc2lvbnMubGVuZ3RoPjEmJnAuZGlzcGxheUluZD09PWguZGltZW5zaW9ucy5sZW5ndGgtMT8oaT1sLmxlZnQsYT0ibGVmdCIpOihpPWwubGVmdCtsLndpZHRoLGE9InJpZ2h0Iik7dmFyIGc9Zi5tb2RlbC5jYXRlZ29yeUxhYmVsLHY9Yy5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmNvdW50LHk9MDtjLmNhdGVnb3J5Vmlld01vZGVsLmJhbmRzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY29sb3I9PT1jLmNvbG9yJiYoeSs9dC5jb3VudCl9KSk7dmFyIHg9Zi5tb2RlbC5jb3VudCxiPTA7aC5wYXRoU2VsZWN0aW9uLmVhY2goKGZ1bmN0aW9uKHQpe3QubW9kZWwuY29sb3I9PT1jLmNvbG9yJiYoYis9dC5tb2RlbC5jb3VudCl9KSk7dmFyIF89eS92LHc9eS9iLFQ9eS94LGs9e2NvdW50TGFiZWw6dixjYXRlZ29yeUxhYmVsOmcscHJvYmFiaWxpdHlMYWJlbDpfLnRvRml4ZWQoMyl9LEE9W107LTEhPT1mLnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigiY291bnQiKSYmQS5wdXNoKFsiQ291bnQ6IixrLmNvdW50TGFiZWxdLmpvaW4oIiAiKSksLTEhPT1mLnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigicHJvYmFiaWxpdHkiKSYmKEEucHVzaCgiUChjb2xvciBcdTIyMjkgIitnKyIpOiAiK2sucHJvYmFiaWxpdHlMYWJlbCksQS5wdXNoKCJQKCIrZysiIHwgY29sb3IpOiAiK3cudG9GaXhlZCgzKSksQS5wdXNoKCJQKGNvbG9yIHwgIitnKyIpOiAiK1QudG9GaXhlZCgzKSkpO3ZhciBNPUEuam9pbigiPGJyPiIpLFM9dS5tb3N0UmVhZGFibGUoYy5jb2xvcixbImJsYWNrIiwid2hpdGUiXSk7cmV0dXJue3RyYWNlOmQseDpvKihpLWUubGVmdCkseTpzKihtLWUudG9wKSx0ZXh0Ok0sY29sb3I6Yy5jb2xvcixib3JkZXJDb2xvcjoiYmxhY2siLGZvbnRGYW1pbHk6J01vbmFjbywgIkNvdXJpZXIgTmV3IiwgbW9ub3NwYWNlJyxmb250Q29sb3I6Uyxmb250U2l6ZToxMCxpZGVhbEFsaWduOmEsaG92ZXJ0ZW1wbGF0ZTpkLmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczprLGV2ZW50RGF0YTpbe2RhdGE6ZC5faW5wdXQsZnVsbERhdGE6ZCxjYXRlZ29yeTpnLGNvdW50OnYscHJvYmFiaWxpdHk6XyxjYXRlZ29yeWNvdW50OngsY29sb3Jjb3VudDpiLGJhbmRjb2xvcmNvdW50Onl9XX19KHIsYSx0aGlzKToiZGltZW5zaW9uIj09PWwmJihlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1bXTtyZXR1cm4gbi5zZWxlY3Qoci5wYXJlbnROb2RlLnBhcmVudE5vZGUpLnNlbGVjdEFsbCgiZy5jYXRlZ29yeSIpLnNlbGVjdCgicmVjdC5jYXRyZWN0IikuZWFjaCgoZnVuY3Rpb24oKXtpLnB1c2goRSh0LGUsdGhpcykpfSkpLGl9KHIsYSx0aGlzKSksZSYmby5sb25lSG92ZXIoZSx7Y29udGFpbmVyOmkuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOmkuX3BhcGVyLm5vZGUoKSxnZDpyfSl9fWZ1bmN0aW9uIEModCl7dmFyIGU9dC5wYXJjYXRzVmlld01vZGVsO2lmKCFlLmRyYWdEaW1lbnNpb24mJihfKGUucGF0aFNlbGVjdGlvbiksVChlLmRpbWVuc2lvblNlbGVjdGlvbi5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKSksayhlLmRpbWVuc2lvblNlbGVjdGlvbi5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKSksby5sb25lVW5ob3ZlcihlLmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9ob3ZlcmxheWVyLm5vZGUoKSksZS5wYXRoU2VsZWN0aW9uLnNvcnQobSksLTE9PT1lLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInNraXAiKSkpeyJjb2xvciI9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJvbj9TKHRoaXMsInBsb3RseV91bmhvdmVyIixuLmV2ZW50KTpNKHRoaXMsInBsb3RseV91bmhvdmVyIixuLmV2ZW50KX19ZnVuY3Rpb24gUCh0KXsiZml4ZWQiIT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50JiYodC5kcmFnRGltZW5zaW9uRGlzcGxheUluZD10Lm1vZGVsLmRpc3BsYXlJbmQsdC5pbml0aWFsRHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmRzPXQucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pKSx0LmRyYWdIYXNNb3ZlZD0hMSx0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQ9bnVsbCxuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4ubW91c2UodGhpcylbMF0saT1uLm1vdXNlKHRoaXMpWzFdOy0yPD1yJiZyPD1lLndpZHRoKzImJi0yPD1pJiZpPD1lLmhlaWdodCsyJiYodC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kPWUubW9kZWwuZGlzcGxheUluZCx0LmluaXRpYWxEcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kcz10Lm1vZGVsLmNhdGVnb3JpZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSkpLGUubW9kZWwuZHJhZ1k9ZS55LHMucmFpc2VUb1RvcCh0aGlzLnBhcmVudE5vZGUpLG4uc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikuZWFjaCgoZnVuY3Rpb24oZSl7ZS55PGkmJmk8PWUueStlLmhlaWdodCYmKHQucG90ZW50aWFsQ2xpY2tCYW5kPXRoaXMpfSkpKX0pKSx0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbj10LG8ubG9uZVVuaG92ZXIodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9ob3ZlcmxheWVyLm5vZGUoKSkpfWZ1bmN0aW9uIEkodCl7aWYoImZpeGVkIiE9PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudCYmKHQuZHJhZ0hhc01vdmVkPSEwLG51bGwhPT10LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kKSl7dmFyIGU9dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZCxyPWUtMSxpPWUrMSxhPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2VdO2lmKG51bGwhPT10LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQpe3ZhciBvPWEuY2F0ZWdvcmllc1t0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmRdO28ubW9kZWwuZHJhZ1krPW4uZXZlbnQuZHk7dmFyIHM9by5tb2RlbC5kcmFnWSxsPW8ubW9kZWwuZGlzcGxheUluZCxjPWEuY2F0ZWdvcmllcyx1PWNbbC0xXSxmPWNbbCsxXTt2b2lkIDAhPT11JiZzPHUueSt1LmhlaWdodC8yJiYoby5tb2RlbC5kaXNwbGF5SW5kPXUubW9kZWwuZGlzcGxheUluZCx1Lm1vZGVsLmRpc3BsYXlJbmQ9bCksdm9pZCAwIT09ZiYmcytvLmhlaWdodD5mLnkrZi5oZWlnaHQvMiYmKG8ubW9kZWwuZGlzcGxheUluZD1mLm1vZGVsLmRpc3BsYXlJbmQsZi5tb2RlbC5kaXNwbGF5SW5kPWwpLHQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZD1vLm1vZGVsLmRpc3BsYXlJbmR9aWYobnVsbD09PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZHx8ImZyZWVmb3JtIj09PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudCl7YS5tb2RlbC5kcmFnWD1uLmV2ZW50Lng7dmFyIGg9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbcl0scD10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tpXTt2b2lkIDAhPT1oJiZhLm1vZGVsLmRyYWdYPGgueCtoLndpZHRoJiYoYS5tb2RlbC5kaXNwbGF5SW5kPWgubW9kZWwuZGlzcGxheUluZCxoLm1vZGVsLmRpc3BsYXlJbmQ9ZSksdm9pZCAwIT09cCYmYS5tb2RlbC5kcmFnWCthLndpZHRoPnAueCYmKGEubW9kZWwuZGlzcGxheUluZD1wLm1vZGVsLmRpc3BsYXlJbmQscC5tb2RlbC5kaXNwbGF5SW5kPXQuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQpLHQuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQ9YS5tb2RlbC5kaXNwbGF5SW5kfWoodC5wYXJjYXRzVmlld01vZGVsKSxOKHQucGFyY2F0c1ZpZXdNb2RlbCksUih0LnBhcmNhdHNWaWV3TW9kZWwpLEQodC5wYXJjYXRzVmlld01vZGVsKX19ZnVuY3Rpb24gTyh0KXtpZigiZml4ZWQiIT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50JiZudWxsIT09dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJ0ZXh0IikuYXR0cigiZm9udC13ZWlnaHQiLCJub3JtYWwiKTt2YXIgZT17fSxyPXoodC5wYXJjYXRzVmlld01vZGVsKSxpPXQucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pKSxvPXQuaW5pdGlhbERyYWdEaW1lbnNpb25EaXNwbGF5SW5kcy5zb21lKChmdW5jdGlvbih0LGUpe3JldHVybiB0IT09aVtlXX0pKTtvJiZpLmZvckVhY2goKGZ1bmN0aW9uKHIsbil7dmFyIGk9dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnNbbl0uY29udGFpbmVySW5kO2VbImRpbWVuc2lvbnNbIitpKyJdLmRpc3BsYXlpbmRleCJdPXJ9KSk7dmFyIHM9ITE7aWYobnVsbCE9PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZCl7dmFyIGw9dC5tb2RlbC5jYXRlZ29yaWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pKTtpZihzPXQuaW5pdGlhbERyYWdDYXRlZ29yeURpc3BsYXlJbmRzLnNvbWUoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQhPT1sW2VdfSkpKXt2YXIgYz10Lm1vZGVsLmNhdGVnb3JpZXMuc2xpY2UoKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3BsYXlJbmQtZS5kaXNwbGF5SW5kfSkpLHU9Yy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3J5VmFsdWV9KSksZj1jLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcnlMYWJlbH0pKTtlWyJkaW1lbnNpb25zWyIrdC5tb2RlbC5jb250YWluZXJJbmQrIl0uY2F0ZWdvcnlhcnJheSJdPVt1XSxlWyJkaW1lbnNpb25zWyIrdC5tb2RlbC5jb250YWluZXJJbmQrIl0udGlja3RleHQiXT1bZl0sZVsiZGltZW5zaW9uc1siK3QubW9kZWwuY29udGFpbmVySW5kKyJdLmNhdGVnb3J5b3JkZXIiXT0iYXJyYXkifX1pZigtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJza2lwIikmJiF0LmRyYWdIYXNNb3ZlZCYmdC5wb3RlbnRpYWxDbGlja0JhbmQmJigiY29sb3IiPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyb24/Uyh0LnBvdGVudGlhbENsaWNrQmFuZCwicGxvdGx5X2NsaWNrIixuLmV2ZW50LnNvdXJjZUV2ZW50KTpNKHQucG90ZW50aWFsQ2xpY2tCYW5kLCJwbG90bHlfY2xpY2siLG4uZXZlbnQuc291cmNlRXZlbnQpKSx0Lm1vZGVsLmRyYWdYPW51bGwsbnVsbCE9PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZCl0LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1t0LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kXS5jYXRlZ29yaWVzW3QuZHJhZ0NhdGVnb3J5RGlzcGxheUluZF0ubW9kZWwuZHJhZ1k9bnVsbCx0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQ9bnVsbDt0LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kPW51bGwsdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb249bnVsbCx0LmRyYWdIYXNNb3ZlZD1udWxsLHQucG90ZW50aWFsQ2xpY2tCYW5kPW51bGwsaih0LnBhcmNhdHNWaWV3TW9kZWwpLE4odC5wYXJjYXRzVmlld01vZGVsKSxuLnRyYW5zaXRpb24oKS5kdXJhdGlvbigzMDApLmVhc2UoImN1YmljLWluLW91dCIpLmVhY2goKGZ1bmN0aW9uKCl7Uih0LnBhcmNhdHNWaWV3TW9kZWwsITApLEQodC5wYXJjYXRzVmlld01vZGVsLCEwKX0pKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpeyhvfHxzKSYmYS5yZXN0eWxlKHQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixlLFtyXSl9KSl9fWZ1bmN0aW9uIHoodCl7Zm9yKHZhciBlLHI9dC5ncmFwaERpdi5fZnVsbERhdGEsbj0wO248ci5sZW5ndGg7bisrKWlmKHQua2V5PT09cltuXS51aWQpe2U9bjticmVha31yZXR1cm4gZX1mdW5jdGlvbiBEKHQsZSl7dmFyIHI7dm9pZCAwPT09ZSYmKGU9ITEpLHQucGF0aFNlbGVjdGlvbi5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5wYXRoc30pLHApLChyPXQucGF0aFNlbGVjdGlvbixlP3IudHJhbnNpdGlvbigpOnIpLmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdEfSkpfWZ1bmN0aW9uIFIodCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP3QudHJhbnNpdGlvbigpOnR9dm9pZCAwPT09ZSYmKGU9ITEpLHQuZGltZW5zaW9uU2VsZWN0aW9uLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpbWVuc2lvbnN9KSxwKTt2YXIgaT10LmRpbWVuc2lvblNlbGVjdGlvbi5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yaWVzfSkscCk7cih0LmRpbWVuc2lvblNlbGVjdGlvbikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGwodC54LDApfSkpLHIoaSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGwoMCx0LnkpfSkpLGkuc2VsZWN0KCIuZGltbGFiZWwiKS50ZXh0KChmdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZT90LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uc1t0Lm1vZGVsLmRpbWVuc2lvbkluZF0uZGltZW5zaW9uTGFiZWw6bnVsbH0pKSxpLnNlbGVjdCgiLmNhdGxhYmVsIikuYXR0cigidGV4dC1hbmNob3IiLChmdW5jdGlvbih0KXtyZXR1cm4gZCh0KT8ic3RhcnQiOiJlbmQifSkpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4gZCh0KT90LndpZHRoKzU6LTV9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGUscjtkKHQpPyhlPXQud2lkdGgrNSxyPSJzdGFydCIpOihlPS01LHI9ImVuZCIpLG4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgidHNwYW4iKS5hdHRyKCJ4IixlKS5hdHRyKCJ0ZXh0LWFuY2hvciIscil9KSk7dmFyIGE9aS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5iYW5kc30pLHApLG89YS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmFuZHJlY3QiKS5hdHRyKCJjdXJzb3IiLCJtb3ZlIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pKS5hdHRyKCJmaWxsLW9wYWNpdHkiLDApO2EuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGh9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpLGsobyksYS5lYWNoKChmdW5jdGlvbigpe3MucmFpc2VUb1RvcCh0aGlzKX0pKSxhLmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBGKHQsZSxyKXt2YXIgbixpPXJbMF0sYT1lLm1hcmdpbnx8e2w6ODAscjo4MCx0OjEwMCxiOjgwfSxvPWkudHJhY2Uscz1vLmRvbWFpbixsPWUud2lkdGgsYz1lLmhlaWdodCx1PU1hdGguZmxvb3IobCoocy54WzFdLXMueFswXSkpLGY9TWF0aC5mbG9vcihjKihzLnlbMV0tcy55WzBdKSksaD1zLnhbMF0qbCthLmwscD1lLmhlaWdodC1zLnlbMV0qZS5oZWlnaHQrYS50LGQ9by5saW5lLnNoYXBlO249ImFsbCI9PT1vLmhvdmVyaW5mbz9bImNvdW50IiwicHJvYmFiaWxpdHkiXTooby5ob3ZlcmluZm98fCIiKS5zcGxpdCgiKyIpO3ZhciBtPXt0cmFjZTpvLGtleTpvLnVpZCxtb2RlbDppLHg6aCx5OnAsd2lkdGg6dSxoZWlnaHQ6Zixob3Zlcm9uOm8uaG92ZXJvbixob3ZlcmluZm9JdGVtczpuLGFycmFuZ2VtZW50Om8uYXJyYW5nZW1lbnQsYnVuZGxlY29sb3JzOm8uYnVuZGxlY29sb3JzLHNvcnRwYXRoczpvLnNvcnRwYXRocyxsYWJlbGZvbnQ6by5sYWJlbGZvbnQsY2F0ZWdvcnlsYWJlbGZvbnQ6by50aWNrZm9udCxwYXRoU2hhcGU6ZCxkcmFnRGltZW5zaW9uOm51bGwsbWFyZ2luOmEscGF0aHM6W10sZGltZW5zaW9uczpbXSxncmFwaERpdjp0LHRyYWNlU2VsZWN0aW9uOm51bGwscGF0aFNlbGVjdGlvbjpudWxsLGRpbWVuc2lvblNlbGVjdGlvbjpudWxsfTtyZXR1cm4gaS5kaW1lbnNpb25zJiYoaihtKSxOKG0pKSxtfWZ1bmN0aW9uIEIodCxlLHIsbixhKXt2YXIgbyxzLGw9W10sYz1bXTtmb3Iocz0wO3M8ci5sZW5ndGgtMTtzKyspbz1pKHJbc10rdFtzXSx0W3MrMV0pLGwucHVzaChvKGEpKSxjLnB1c2gobygxLWEpKTt2YXIgdT0iTSAiK3RbMF0rIiwiK2VbMF07Zm9yKHUrPSJsIityWzBdKyIsMCAiLHM9MTtzPHIubGVuZ3RoO3MrKyl1Kz0iQyIrbFtzLTFdKyIsIitlW3MtMV0rIiAiK2Nbcy0xXSsiLCIrZVtzXSsiICIrdFtzXSsiLCIrZVtzXSx1Kz0ibCIrcltzXSsiLDAgIjtmb3IodSs9ImwwLCIrbisiICIsdSs9ImwgLSIrcltyLmxlbmd0aC0xXSsiLDAgIixzPXIubGVuZ3RoLTI7cz49MDtzLS0pdSs9IkMiK2Nbc10rIiwiKyhlW3MrMV0rbikrIiAiK2xbc10rIiwiKyhlW3NdK24pKyIgIisodFtzXStyW3NdKSsiLCIrKGVbc10rbiksdSs9ImwtIityW3NdKyIsMCAiO3JldHVybiB1Kz0iWiJ9ZnVuY3Rpb24gTih0KXt2YXIgZT10LmRpbWVuc2lvbnMscj10Lm1vZGVsLG49ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpfSkpLGk9dC5tb2RlbC5kaW1lbnNpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KSl9KSksYT10Lm1vZGVsLmRpbWVuc2lvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSkpLG89dC5kaW1lbnNpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuZGltZW5zaW9uSW5kfSkpLHM9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSksbD1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGh9KSksYz1bXTtmb3IodmFyIHUgaW4gci5wYXRocylyLnBhdGhzLmhhc093blByb3BlcnR5KHUpJiZjLnB1c2goci5wYXRoc1t1XSk7ZnVuY3Rpb24gZih0KXt2YXIgZT10LmNhdGVnb3J5SW5kcy5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGlbZV1bdF19KSk7cmV0dXJuIG8ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKX1jLnNvcnQoKGZ1bmN0aW9uKGUscil7dmFyIG49ZihlKSxpPWYocik7cmV0dXJuImJhY2t3YXJkIj09PXQuc29ydHBhdGhzJiYobi5yZXZlcnNlKCksaS5yZXZlcnNlKCkpLG4ucHVzaChlLnZhbHVlSW5kc1swXSksaS5wdXNoKHIudmFsdWVJbmRzWzBdKSx0LmJ1bmRsZWNvbG9ycyYmKG4udW5zaGlmdChlLnJhd0NvbG9yKSxpLnVuc2hpZnQoci5yYXdDb2xvcikpLG48aT8tMTpuPmk/MTowfSkpO2Zvcih2YXIgaD1uZXcgQXJyYXkoYy5sZW5ndGgpLHA9ZVswXS5tb2RlbC5jb3VudCxkPWVbMF0uY2F0ZWdvcmllcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSxtPTA7bTxjLmxlbmd0aDttKyspe3ZhciBnLHY9Y1ttXTtnPXA+MD9kKih2LmNvdW50L3ApOjA7Zm9yKHZhciB5LHg9bmV3IEFycmF5KG4ubGVuZ3RoKSxiPTA7Yjx2LmNhdGVnb3J5SW5kcy5sZW5ndGg7YisrKXt2YXIgXz12LmNhdGVnb3J5SW5kc1tiXSx3PWlbYl1bX10sVD1hW2JdO3hbVF09bltUXVt3XSxuW1RdW3ddKz1nO3ZhciBrPXQuZGltZW5zaW9uc1tUXS5jYXRlZ29yaWVzW3ddLEE9ay5iYW5kcy5sZW5ndGgsTT1rLmJhbmRzW0EtMV07aWYodm9pZCAwPT09TXx8di5yYXdDb2xvciE9PU0ucmF3Q29sb3Ipe3ZhciBTPXZvaWQgMD09PU0/MDpNLnkrTS5oZWlnaHQ7ay5iYW5kcy5wdXNoKHtrZXk6Uyxjb2xvcjp2LmNvbG9yLHJhd0NvbG9yOnYucmF3Q29sb3IsaGVpZ2h0Omcsd2lkdGg6ay53aWR0aCxjb3VudDp2LmNvdW50LHk6UyxjYXRlZ29yeVZpZXdNb2RlbDprLHBhcmNhdHNWaWV3TW9kZWw6dH0pfWVsc2V7dmFyIEU9ay5iYW5kc1tBLTFdO0UuaGVpZ2h0Kz1nLEUuY291bnQrPXYuY291bnR9fXk9ImhzcGxpbmUiPT09dC5wYXRoU2hhcGU/QihzLHgsbCxnLC41KTpCKHMseCxsLGcsMCksaFttXT17a2V5OnYudmFsdWVJbmRzWzBdLG1vZGVsOnYsaGVpZ2h0OmcsbGVmdFhzOnMsdG9wWXM6eCxkaW1XaWR0aHM6bCxzdmdEOnkscGFyY2F0c1ZpZXdNb2RlbDp0fX10LnBhdGhzPWh9ZnVuY3Rpb24gaih0KXt2YXIgZT10Lm1vZGVsLmRpbWVuc2lvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm57ZGlzcGxheUluZDp0LmRpc3BsYXlJbmQsZGltZW5zaW9uSW5kOnQuZGltZW5zaW9uSW5kfX0pKTtlLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGlzcGxheUluZC1lLmRpc3BsYXlJbmR9KSk7dmFyIHI9W107Zm9yKHZhciBuIGluIGUpe3ZhciBpPWVbbl0uZGltZW5zaW9uSW5kLGE9dC5tb2RlbC5kaW1lbnNpb25zW2ldO3IucHVzaChVKHQsYSkpfXQuZGltZW5zaW9ucz1yfWZ1bmN0aW9uIFUodCxlKXt2YXIgcixuPXQubW9kZWwuZGltZW5zaW9ucy5sZW5ndGgsaT1lLmRpc3BsYXlJbmQ7cj00MCsobj4xPyh0LndpZHRoLTgwLTE2KS8obi0xKTowKSppO3ZhciBhLG8scyxsLGMsdT1bXSxmPXQubW9kZWwubWF4Q2F0cyxoPWUuY2F0ZWdvcmllcy5sZW5ndGgscD1lLmNvdW50LGQ9dC5oZWlnaHQtOCooZi0xKSxtPTgqKGYtaCkvMixnPWUuY2F0ZWdvcmllcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntkaXNwbGF5SW5kOnQuZGlzcGxheUluZCxjYXRlZ29yeUluZDp0LmNhdGVnb3J5SW5kfX0pKTtmb3IoZy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3BsYXlJbmQtZS5kaXNwbGF5SW5kfSkpLGM9MDtjPGg7YysrKWw9Z1tjXS5jYXRlZ29yeUluZCxvPWUuY2F0ZWdvcmllc1tsXSxhPXA+MD9vLmNvdW50L3AqZDowLHM9e2tleTpvLnZhbHVlSW5kc1swXSxtb2RlbDpvLHdpZHRoOjE2LGhlaWdodDphLHk6bnVsbCE9PW8uZHJhZ1k/by5kcmFnWTptLGJhbmRzOltdLHBhcmNhdHNWaWV3TW9kZWw6dH0sbT1tK2ErOCx1LnB1c2gocyk7cmV0dXJue2tleTplLmRpbWVuc2lvbkluZCx4Om51bGwhPT1lLmRyYWdYP2UuZHJhZ1g6cix5OjAsd2lkdGg6MTYsbW9kZWw6ZSxjYXRlZ29yaWVzOnUscGFyY2F0c1ZpZXdNb2RlbDp0LGRyYWdDYXRlZ29yeURpc3BsYXlJbmQ6bnVsbCxkcmFnRGltZW5zaW9uRGlzcGxheUluZDpudWxsLGluaXRpYWxEcmFnRGltZW5zaW9uRGlzcGxheUluZHM6bnVsbCxpbml0aWFsRHJhZ0NhdGVnb3J5RGlzcGxheUluZHM6bnVsbCxkcmFnSGFzTW92ZWQ6bnVsbCxwb3RlbnRpYWxDbGlja0JhbmQ6bnVsbH19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2gocix0LG4sZSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NzksIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMiwiLi4vLi4vcGxvdF9hcGkvcGxvdF9hcGkiOjgxMywiQHBsb3RseS9kMyI6NTgsImQzLWludGVycG9sYXRlIjoxNjQsdGlueWNvbG9yMjo1NzJ9XSwxMTUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vcGFyY2F0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89YS5fcGFwZXIscz1hLl9zaXplO24odCxvLGUse3dpZHRoOnMudyxoZWlnaHQ6cy5oLG1hcmdpbjp7dDpzLnQscjpzLnIsYjpzLmIsbDpzLmx9fSxyLGkpfX0seyIuL3BhcmNhdHMiOjExNTF9XSwxMTUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5O2UuZXhwb3J0cz17ZG9tYWluOm8oe25hbWU6InBhcmNvb3JkcyIsdHJhY2U6ITAsZWRpdFR5cGU6InBsb3QifSksbGFiZWxhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGxhYmVsc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwiYm90dG9tIl0sZGZsdDoidG9wIixlZGl0VHlwZToicGxvdCJ9LGxhYmVsZm9udDphKHtlZGl0VHlwZToicGxvdCJ9KSx0aWNrZm9udDphKHtlZGl0VHlwZToicGxvdCJ9KSxyYW5nZWZvbnQ6YSh7ZWRpdFR5cGU6InBsb3QifSksZGltZW5zaW9uczpsKCJkaW1lbnNpb24iLHtsYWJlbDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LHRpY2t2YWxzOnMoe30saS50aWNrdmFscyx7ZWRpdFR5cGU6InBsb3QifSksdGlja3RleHQ6cyh7fSxpLnRpY2t0ZXh0LHtlZGl0VHlwZToicGxvdCJ9KSx0aWNrZm9ybWF0OnMoe30saS50aWNrZm9ybWF0LHtlZGl0VHlwZToicGxvdCJ9KSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToicGxvdCJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90In1dLGVkaXRUeXBlOiJwbG90In0sY29uc3RyYWludHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGRpbWVuc2lvbnM6IjEtMiIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QifV0sZWRpdFR5cGU6InBsb3QifSxtdWx0aXNlbGVjdDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9KSxsaW5lOnMoe2VkaXRUeXBlOiJjYWxjIn0sbigibGluZSIse2NvbG9yc2NhbGVEZmx0OiJWaXJpZGlzIixhdXRvQ29sb3JEZmx0OiExLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDIsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjg1Nn1dLDExNTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxpPXQoIkBwbG90bHkvZDMiKSxhPXQoIi4uLy4uL2xpYi9ndXAiKS5rZXlGdW4sbz10KCIuLi8uLi9saWIvZ3VwIikucmVwZWF0LHM9dCgiLi4vLi4vbGliIikuc29ydGVyQXNjLGw9dCgiLi4vLi4vbGliIikuc3RyVHJhbnNsYXRlLGM9bi5iYXIuc25hcFJhdGlvO2Z1bmN0aW9uIHUodCxlKXtyZXR1cm4gdCooMS1jKStlKmN9dmFyIGY9bi5iYXIuc25hcENsb3NlO2Z1bmN0aW9uIGgodCxlKXtyZXR1cm4gdCooMS1mKStlKmZ9ZnVuY3Rpb24gcCh0LGUscixuKXtpZihmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKHQ+PWVbcl1bMF0mJnQ8PWVbcl1bMV0pcmV0dXJuITA7cmV0dXJuITF9KHIsbikpcmV0dXJuIHI7dmFyIGk9dD8tMToxLGE9MCxvPWUubGVuZ3RoLTE7aWYoaTwwKXt2YXIgcz1hO2E9byxvPXN9Zm9yKHZhciBsPWVbYV0sYz1sLGY9YTtpKmY8aSpvO2YrPWkpe3ZhciBwPWYraSxkPWVbcF07aWYoaSpyPGkqaChsLGQpKXJldHVybiB1KGwsYyk7aWYoaSpyPGkqZHx8cD09PW8pcmV0dXJuIHUoZCxsKTtjPWwsbD1kfX1mdW5jdGlvbiBkKHQpe3QuYXR0cigieCIsLW4uYmFyLmNhcHR1cmVXaWR0aC8yKS5hdHRyKCJ3aWR0aCIsbi5iYXIuY2FwdHVyZVdpZHRoKX1mdW5jdGlvbiBtKHQpe3QuYXR0cigidmlzaWJpbGl0eSIsInZpc2libGUiKS5zdHlsZSgidmlzaWJpbGl0eSIsInZpc2libGUiKS5hdHRyKCJmaWxsIiwieWVsbG93IikuYXR0cigib3BhY2l0eSIsMCl9ZnVuY3Rpb24gZyh0KXtpZighdC5icnVzaC5maWx0ZXJTcGVjaWZpZWQpcmV0dXJuIjAsIit0LmhlaWdodDtmb3IodmFyIGUscixuLGk9dih0LmJydXNoLmZpbHRlci5nZXRDb25zb2xpZGF0ZWQoKSx0LmhlaWdodCksYT1bMF0sbz1pLmxlbmd0aD9pWzBdWzBdOm51bGwscz0wO3M8aS5sZW5ndGg7cysrKXI9KGU9aVtzXSlbMV0tZVswXSxhLnB1c2gobyksYS5wdXNoKHIpLChuPXMrMSk8aS5sZW5ndGgmJihvPWlbbl1bMF0tZVsxXSk7cmV0dXJuIGEucHVzaCh0LmhlaWdodCksYX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLHQqZSl9KSkuc29ydChzKX0pKX1mdW5jdGlvbiB5KCl7aS5zZWxlY3QoZG9jdW1lbnQuYm9keSkuc3R5bGUoImN1cnNvciIsbnVsbCl9ZnVuY3Rpb24geCh0KXt0LmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLGcpfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1pLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5oaWdobGlnaHQsIC5oaWdobGlnaHQtc2hhZG93Iik7eChlP3IudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4uYmFyLnNuYXBEdXJhdGlvbikuZWFjaCgiZW5kIixlKTpyKX1mdW5jdGlvbiBfKHQsZSl7dmFyIHIsaT10LmJydXNoLGE9TmFOLG89e307aWYoaS5maWx0ZXJTcGVjaWZpZWQpe3ZhciBzPXQuaGVpZ2h0LGw9aS5maWx0ZXIuZ2V0Q29uc29saWRhdGVkKCksYz12KGwscyksdT1OYU4sZj1OYU4saD1OYU47Zm9yKHI9MDtyPD1jLmxlbmd0aDtyKyspe3ZhciBwPWNbcl07aWYocCYmcFswXTw9ZSYmZTw9cFsxXSl7dT1yO2JyZWFrfWlmKGY9cj9yLTE6TmFOLHAmJnBbMF0+ZSl7aD1yO2JyZWFrfX1pZihhPXUsaXNOYU4oYSkmJihhPWlzTmFOKGYpfHxpc05hTihoKT9pc05hTihmKT9oOmY6ZS1jW2ZdWzFdPGNbaF1bMF0tZT9mOmgpLCFpc05hTihhKSl7dmFyIGQ9Y1thXSxtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5iYXIuaGFuZGxlSGVpZ2h0O2lmKCEoZT50WzFdK3J8fGU8dFswXS1yKSlyZXR1cm4gZT49LjkqdFsxXSsuMSp0WzBdPyJuIjplPD0uOSp0WzBdKy4xKnRbMV0/InMiOiJucyJ9KGQsZSk7bSYmKG8uaW50ZXJ2YWw9bFthXSxvLmludGVydmFsUGl4PWQsby5yZWdpb249bSl9fWlmKHQub3JkaW5hbCYmIW8ucmVnaW9uKXt2YXIgZz10LnVuaXRUaWNrdmFscyx5PXQudW5pdFRvUGFkZGVkUHguaW52ZXJ0KGUpO2ZvcihyPTA7cjxnLmxlbmd0aDtyKyspe3ZhciB4PVsuMjUqZ1tNYXRoLm1heChyLTEsMCldKy43NSpnW3JdLC4yNSpnW01hdGgubWluKHIrMSxnLmxlbmd0aC0xKV0rLjc1Kmdbcl1dO2lmKHk+PXhbMF0mJnk8PXhbMV0pe28uY2xpY2thYmxlT3JkaW5hbFJhbmdlPXg7YnJlYWt9fX1yZXR1cm4gb31mdW5jdGlvbiB3KHQsZSl7aS5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgcj1lLmhlaWdodC1pLm1vdXNlKHQpWzFdLTIqbi52ZXJ0aWNhbFBhZGRpbmcsYT1lLmJydXNoLnN2Z0JydXNoO2Eud2FzRHJhZ2dlZD0hMCxhLl9kcmFnZ2luZz0hMCxhLmdyYWJiaW5nQmFyP2EubmV3RXh0ZW50PVtyLWEuZ3JhYlBvaW50LHIrYS5iYXJMZW5ndGgtYS5ncmFiUG9pbnRdLm1hcChlLnVuaXRUb1BhZGRlZFB4LmludmVydCk6YS5uZXdFeHRlbnQ9W2Euc3RhcnRFeHRlbnQsZS51bml0VG9QYWRkZWRQeC5pbnZlcnQocildLnNvcnQocyksZS5icnVzaC5maWx0ZXJTcGVjaWZpZWQ9ITAsYS5leHRlbnQ9YS5zdGF5aW5nSW50ZXJ2YWxzLmNvbmNhdChbYS5uZXdFeHRlbnRdKSxhLmJydXNoQ2FsbGJhY2soZSksYih0LnBhcmVudE5vZGUpfWZ1bmN0aW9uIFQodCxlKXt2YXIgcj1fKGUsZS5oZWlnaHQtaS5tb3VzZSh0KVsxXS0yKm4udmVydGljYWxQYWRkaW5nKSxhPSJjcm9zc2hhaXIiO3IuY2xpY2thYmxlT3JkaW5hbFJhbmdlP2E9InBvaW50ZXIiOnIucmVnaW9uJiYoYT1yLnJlZ2lvbisiLXJlc2l6ZSIpLGkuc2VsZWN0KGRvY3VtZW50LmJvZHkpLnN0eWxlKCJjdXJzb3IiLGEpfWZ1bmN0aW9uIGsodCl7dC5vbigibW91c2Vtb3ZlIiwoZnVuY3Rpb24odCl7aS5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLHQucGFyZW50LmluQnJ1c2hEcmFnfHxUKHRoaXMsdCl9KSkub24oIm1vdXNlbGVhdmUiLChmdW5jdGlvbih0KXt0LnBhcmVudC5pbkJydXNoRHJhZ3x8eSgpfSkpLmNhbGwoaS5iZWhhdmlvci5kcmFnKCkub24oImRyYWdzdGFydCIsKGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUpe2kuZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIHI9ZS5oZWlnaHQtaS5tb3VzZSh0KVsxXS0yKm4udmVydGljYWxQYWRkaW5nLGE9ZS51bml0VG9QYWRkZWRQeC5pbnZlcnQociksbz1lLmJydXNoLHM9XyhlLHIpLGw9cy5pbnRlcnZhbCxjPW8uc3ZnQnJ1c2g7aWYoYy53YXNEcmFnZ2VkPSExLGMuZ3JhYmJpbmdCYXI9Im5zIj09PXMucmVnaW9uLGMuZ3JhYmJpbmdCYXIpe3ZhciB1PWwubWFwKGUudW5pdFRvUGFkZGVkUHgpO2MuZ3JhYlBvaW50PXItdVswXS1uLnZlcnRpY2FsUGFkZGluZyxjLmJhckxlbmd0aD11WzFdLXVbMF19Yy5jbGlja2FibGVPcmRpbmFsUmFuZ2U9cy5jbGlja2FibGVPcmRpbmFsUmFuZ2UsYy5zdGF5aW5nSW50ZXJ2YWxzPWUubXVsdGlzZWxlY3QmJm8uZmlsdGVyU3BlY2lmaWVkP28uZmlsdGVyLmdldENvbnNvbGlkYXRlZCgpOltdLGwmJihjLnN0YXlpbmdJbnRlcnZhbHM9Yy5zdGF5aW5nSW50ZXJ2YWxzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0hPT1sWzBdJiZ0WzFdIT09bFsxXX0pKSksYy5zdGFydEV4dGVudD1zLnJlZ2lvbj9sWyJzIj09PXMucmVnaW9uPzE6MF06YSxlLnBhcmVudC5pbkJydXNoRHJhZz0hMCxjLmJydXNoU3RhcnRDYWxsYmFjaygpfSh0aGlzLHQpfSkpLm9uKCJkcmFnIiwoZnVuY3Rpb24odCl7dyh0aGlzLHQpfSkpLm9uKCJkcmFnZW5kIiwoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5icnVzaCxuPXIuZmlsdGVyLGE9ci5zdmdCcnVzaDthLl9kcmFnZ2luZ3x8KFQodCxlKSx3KHQsZSksZS5icnVzaC5zdmdCcnVzaC53YXNEcmFnZ2VkPSExKSxhLl9kcmFnZ2luZz0hMSxpLmV2ZW50LnNvdXJjZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3ZhciBvPWEuZ3JhYmJpbmdCYXI7aWYoYS5ncmFiYmluZ0Jhcj0hMSxhLmdyYWJMb2NhdGlvbj12b2lkIDAsZS5wYXJlbnQuaW5CcnVzaERyYWc9ITEseSgpLCFhLndhc0RyYWdnZWQpcmV0dXJuIGEud2FzRHJhZ2dlZD12b2lkIDAsYS5jbGlja2FibGVPcmRpbmFsUmFuZ2U/ci5maWx0ZXJTcGVjaWZpZWQmJmUubXVsdGlzZWxlY3Q/YS5leHRlbnQucHVzaChhLmNsaWNrYWJsZU9yZGluYWxSYW5nZSk6KGEuZXh0ZW50PVthLmNsaWNrYWJsZU9yZGluYWxSYW5nZV0sci5maWx0ZXJTcGVjaWZpZWQ9ITApOm8/KGEuZXh0ZW50PWEuc3RheWluZ0ludGVydmFscywwPT09YS5leHRlbnQubGVuZ3RoJiZNKHIpKTpNKHIpLGEuYnJ1c2hDYWxsYmFjayhlKSxiKHQucGFyZW50Tm9kZSksdm9pZCBhLmJydXNoRW5kQ2FsbGJhY2soci5maWx0ZXJTcGVjaWZpZWQ/bi5nZXRDb25zb2xpZGF0ZWQoKTpbXSk7dmFyIHM9ZnVuY3Rpb24oKXtuLnNldChuLmdldENvbnNvbGlkYXRlZCgpKX07aWYoZS5vcmRpbmFsKXt2YXIgbD1lLnVuaXRUaWNrdmFscztsW2wubGVuZ3RoLTFdPGxbMF0mJmwucmV2ZXJzZSgpLGEubmV3RXh0ZW50PVtwKDAsbCxhLm5ld0V4dGVudFswXSxhLnN0YXlpbmdJbnRlcnZhbHMpLHAoMSxsLGEubmV3RXh0ZW50WzFdLGEuc3RheWluZ0ludGVydmFscyldO3ZhciBjPWEubmV3RXh0ZW50WzFdPmEubmV3RXh0ZW50WzBdO2EuZXh0ZW50PWEuc3RheWluZ0ludGVydmFscy5jb25jYXQoYz9bYS5uZXdFeHRlbnRdOltdKSxhLmV4dGVudC5sZW5ndGh8fE0ociksYS5icnVzaENhbGxiYWNrKGUpLGM/Yih0LnBhcmVudE5vZGUscyk6KHMoKSxiKHQucGFyZW50Tm9kZSkpfWVsc2UgcygpO2EuYnJ1c2hFbmRDYWxsYmFjayhyLmZpbHRlclNwZWNpZmllZD9uLmdldENvbnNvbGlkYXRlZCgpOltdKX0odGhpcyx0KX0pKSl9ZnVuY3Rpb24gQSh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gTSh0KXt0LmZpbHRlclNwZWNpZmllZD0hMSx0LnN2Z0JydXNoLmV4dGVudD1bWy0xLzAsMS8wXV19ZnVuY3Rpb24gUyh0KXtmb3IodmFyIGUscj10LnNsaWNlKCksbj1bXSxpPXIuc2hpZnQoKTtpOyl7Zm9yKGU9aS5zbGljZSgpOyhpPXIuc2hpZnQoKSkmJmlbMF08PWVbMV07KWVbMV09TWF0aC5tYXgoZVsxXSxpWzFdKTtuLnB1c2goZSl9cmV0dXJuIDE9PT1uLmxlbmd0aCYmblswXVswXT5uWzBdWzFdJiYobj1bXSksbn1lLmV4cG9ydHM9e21ha2VCcnVzaDpmdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8sbD1mdW5jdGlvbigpe3ZhciB0LGUscj1bXTtyZXR1cm57c2V0OmZ1bmN0aW9uKG4pezE9PT0ocj1uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKS5zb3J0KHMpfSkpLnNvcnQoQSkpLmxlbmd0aCYmclswXVswXT09PS0xLzAmJnJbMF1bMV09PT0xLzAmJihyPVtbMCwtMV1dKSx0PVMociksZT1yLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm5bTWF0aC5taW4odFswXSxlWzBdKSxNYXRoLm1heCh0WzFdLGVbMV0pXX0pLFsxLzAsLTEvMF0pfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5zbGljZSgpfSxnZXRDb25zb2xpZGF0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIGV9fX0oKTtyZXR1cm4gbC5zZXQocikse2ZpbHRlcjpsLGZpbHRlclNwZWNpZmllZDplLHN2Z0JydXNoOntleHRlbnQ6W10sYnJ1c2hTdGFydENhbGxiYWNrOm4sYnJ1c2hDYWxsYmFjazoobz1pLGZ1bmN0aW9uKHQpe3ZhciBlPXQuYnJ1c2gscj1mdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdCcnVzaC5leHRlbnQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpfSkpfShlKS5zbGljZSgpO2UuZmlsdGVyLnNldChyKSxvKCl9KSxicnVzaEVuZENhbGxiYWNrOmF9fX0sZW5zdXJlQXhpc0JydXNoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zZWxlY3RBbGwoIi4iK24uY24uYXhpc0JydXNoKS5kYXRhKG8sYSk7ci5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5heGlzQnJ1c2gsITApLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zZWxlY3RBbGwoIi5iYWNrZ3JvdW5kIikuZGF0YShvKTtyLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgiYmFja2dyb3VuZCIsITApLmNhbGwoZCkuY2FsbChtKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhdXRvIikuYXR0cigidHJhbnNmb3JtIixsKDAsbi52ZXJ0aWNhbFBhZGRpbmcpKSxyLmNhbGwoaykuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0LW4udmVydGljYWxQYWRkaW5nfSkpO3ZhciBpPXQuc2VsZWN0QWxsKCIuaGlnaGxpZ2h0LXNoYWRvdyIpLmRhdGEobyk7aS5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImhpZ2hsaWdodC1zaGFkb3ciLCEwKS5hdHRyKCJ4Iiwtbi5iYXIud2lkdGgvMikuYXR0cigic3Ryb2tlLXdpZHRoIixuLmJhci53aWR0aCtuLmJhci5zdHJva2VXaWR0aCkuYXR0cigic3Ryb2tlIixlKS5hdHRyKCJvcGFjaXR5IixuLmJhci5zdHJva2VPcGFjaXR5KS5hdHRyKCJzdHJva2UtbGluZWNhcCIsImJ1dHQiKSxpLmF0dHIoInkxIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkpLmNhbGwoeCk7dmFyIGE9dC5zZWxlY3RBbGwoIi5oaWdobGlnaHQiKS5kYXRhKG8pO2EuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJoaWdobGlnaHQiLCEwKS5hdHRyKCJ4Iiwtbi5iYXIud2lkdGgvMikuYXR0cigic3Ryb2tlLXdpZHRoIixuLmJhci53aWR0aC1uLmJhci5zdHJva2VXaWR0aCkuYXR0cigic3Ryb2tlIixuLmJhci5maWxsQ29sb3IpLmF0dHIoIm9wYWNpdHkiLG4uYmFyLmZpbGxPcGFjaXR5KS5hdHRyKCJzdHJva2UtbGluZWNhcCIsImJ1dHQiKSxhLmF0dHIoInkxIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkpLmNhbGwoeCl9KHIsZSl9LGNsZWFuUmFuZ2VzOmZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0WzBdKT8odD10Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc29ydChzKX0pKSx0PWUubXVsdGlzZWxlY3Q/Uyh0LnNvcnQoQSkpOlt0WzBdXSk6dD1bdC5zb3J0KHMpXSxlLnRpY2t2YWxzKXt2YXIgcj1lLnRpY2t2YWxzLnNsaWNlKCkuc29ydChzKTtpZighKHQ9dC5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPVtwKDAscix0WzBdLFtdKSxwKDEscix0WzFdLFtdKV07aWYoZVsxXT5lWzBdKXJldHVybiBlfSkpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkpLmxlbmd0aClyZXR1cm59cmV0dXJuIHQubGVuZ3RoPjE/dDp0WzBdfX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9ndXAiOjc3MywiLi9jb25zdGFudHMiOjExNTcsIkBwbG90bHkvZDMiOjU4fV0sMTE1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9wbG90cy9nZXRfZGF0YSIpLmdldE1vZHVsZUNhbGNEYXRhLGE9dCgiLi9wbG90Iiksbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpO3IubmFtZT0icGFyY29vcmRzIixyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9aSh0LmNhbGNkYXRhLCJwYXJjb29yZHMiKVswXTtlLmxlbmd0aCYmYSh0LGUpfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKCJwYXJjb29yZHMiKSxhPWUuX2hhcyYmZS5faGFzKCJwYXJjb29yZHMiKTtpJiYhYSYmKG4uX3BhcGVyZGl2LnNlbGVjdEFsbCgiLnBhcmNvb3JkcyIpLnJlbW92ZSgpLG4uX2dsaW1hZ2VzLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpKX0sci50b1NWRz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9nbGltYWdlcyxyPW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLnN2Zy1jb250YWluZXIiKTtyLmZpbHRlcigoZnVuY3Rpb24odCxlKXtyZXR1cm4gZT09PXIuc2l6ZSgpLTF9KSkuc2VsZWN0QWxsKCIuZ2wtY2FudmFzLWNvbnRleHQsIC5nbC1jYW52YXMtZm9jdXMiKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PXRoaXMudG9EYXRhVVJMKCJpbWFnZS9wbmciKTtlLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6by5zdmcsInhsaW5rOmhyZWYiOnQscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSIseDowLHk6MCx3aWR0aDp0aGlzLnN0eWxlLndpZHRoLGhlaWdodDp0aGlzLnN0eWxlLmhlaWdodH0pfSkpLHdpbmRvdy5zZXRUaW1lb3V0KChmdW5jdGlvbigpe24uc2VsZWN0QWxsKCIjZmlsdGVyQmFyUGF0dGVybiIpLmF0dHIoImlkIiwiZmlsdGVyQmFyUGF0dGVybiIpfSksNjApfX0seyIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzUzLCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6ODY0LCIuL3Bsb3QiOjExNjQsIkBwbG90bHkvZDMiOjU4fV0sMTE1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksYT10KCIuLi8uLi9saWIvZ3VwIikud3JhcDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixvO3JldHVybiBpLmhhc0NvbG9yc2NhbGUoZSwibGluZSIpJiZuKGUubGluZS5jb2xvcik/KHI9ZS5saW5lLmNvbG9yLG89aS5leHRyYWN0T3B0cyhlLmxpbmUpLmNvbG9yc2NhbGUsaS5jYWxjKHQsZSx7dmFsczpyLGNvbnRhaW5lclN0cjoibGluZSIsY0xldHRlcjoiYyJ9KSk6KHI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPS41O3JldHVybiBlfShlLl9sZW5ndGgpLG89W1swLGUubGluZS5jb2xvcl0sWzEsZS5saW5lLmNvbG9yXV0pLGEoe2xpbmVDb2xvcjpyLGNzY2FsZTpvfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjUxLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL2d1cCI6NzczfV0sMTE1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21heERpbWVuc2lvbkNvdW50OjYwLG92ZXJkcmFnOjQ1LHZlcnRpY2FsUGFkZGluZzoyLHRpY2tEaXN0YW5jZTo1MCxjYW52YXNQaXhlbFJhdGlvOjEsYmxvY2tMaW5lQ291bnQ6NWUzLGxheWVyczpbImNvbnRleHRMaW5lTGF5ZXIiLCJmb2N1c0xpbmVMYXllciIsInBpY2tMaW5lTGF5ZXIiXSxheGlzVGl0bGVPZmZzZXQ6MjgsYXhpc0V4dGVudE9mZnNldDoxMCxkZXNlbGVjdGVkTGluZUNvbG9yOiIjNzc3IixiYXI6e3dpZHRoOjQsY2FwdHVyZVdpZHRoOjEwLGZpbGxDb2xvcjoibWFnZW50YSIsZmlsbE9wYWNpdHk6MSxzbmFwRHVyYXRpb246MTUwLHNuYXBSYXRpbzouMjUsc25hcENsb3NlOi4wMSxzdHJva2VPcGFjaXR5OjEsc3Ryb2tlV2lkdGg6MSxoYW5kbGVIZWlnaHQ6OCxoYW5kbGVPcGFjaXR5OjEsaGFuZGxlT3ZlcmxhcDowfSxjbjp7YXhpc0V4dGVudFRleHQ6ImF4aXMtZXh0ZW50LXRleHQiLHBhcmNvb3Jkc0xpbmVMYXllcnM6InBhcmNvb3Jkcy1saW5lLWxheWVycyIscGFyY29vcmRzTGluZUxheWVyOiJwYXJjb29yZHMtbGluZXMiLHBhcmNvb3JkczoicGFyY29vcmRzIixwYXJjb29yZHNDb250cm9sVmlldzoicGFyY29vcmRzLWNvbnRyb2wtdmlldyIseUF4aXM6InktYXhpcyIsYXhpc092ZXJsYXlzOiJheGlzLW92ZXJsYXlzIixheGlzOiJheGlzIixheGlzSGVhZGluZzoiYXhpcy1oZWFkaW5nIixheGlzVGl0bGU6ImF4aXMtdGl0bGUiLGF4aXNFeHRlbnQ6ImF4aXMtZXh0ZW50IixheGlzRXh0ZW50VG9wOiJheGlzLWV4dGVudC10b3AiLGF4aXNFeHRlbnRUb3BUZXh0OiJheGlzLWV4dGVudC10b3AtdGV4dCIsYXhpc0V4dGVudEJvdHRvbToiYXhpcy1leHRlbnQtYm90dG9tIixheGlzRXh0ZW50Qm90dG9tVGV4dDoiYXhpcy1leHRlbnQtYm90dG9tLXRleHQiLGF4aXNCcnVzaDoiYXhpcy1icnVzaCJ9LGlkOntmaWx0ZXJCYXJQYXR0ZXJuOiJmaWx0ZXItYmFyLXBhdHRlcm4ifX19LHt9XSwxMTU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxzPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxjPXQoIi4vYXR0cmlidXRlcyIpLHU9dCgiLi9heGlzYnJ1c2giKSxmPXQoIi4vY29uc3RhbnRzIikubWF4RGltZW5zaW9uQ291bnQsaD10KCIuL21lcmdlX2xlbmd0aCIpO2Z1bmN0aW9uIHAodCxlLHIsaSl7ZnVuY3Rpb24gYShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYy5kaW1lbnNpb25zLHIsaSl9dmFyIG89YSgidmFsdWVzIikscz1hKCJ2aXNpYmxlIik7aWYobyYmby5sZW5ndGh8fChzPWUudmlzaWJsZT0hMSkscyl7YSgibGFiZWwiKSxhKCJ0aWNrdmFscyIpLGEoInRpY2t0ZXh0IiksYSgidGlja2Zvcm1hdCIpO3ZhciBmPWEoInJhbmdlIik7ZS5fYXg9e19pZDoieSIsdHlwZToibGluZWFyIixzaG93ZXhwb25lbnQ6ImFsbCIsZXhwb25lbnRmb3JtYXQ6IkIiLHJhbmdlOmZ9LGwuc2V0Q29udmVydChlLl9heCxpLmxheW91dCksYSgibXVsdGlzZWxlY3QiKTt2YXIgaD1hKCJjb25zdHJhaW50cmFuZ2UiKTtoJiYoZS5jb25zdHJhaW50cmFuZ2U9dS5jbGVhblJhbmdlcyhoLGUpKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMscixpKX12YXIgZD10LmRpbWVuc2lvbnM7QXJyYXkuaXNBcnJheShkKSYmZC5sZW5ndGg+ZiYmKG4ubG9nKCJwYXJjb29yZHMgdHJhY2VzIHN1cHBvcnQgdXAgdG8gIitmKyIgZGltZW5zaW9ucyBhdCB0aGUgbW9tZW50IiksZC5zcGxpY2UoZikpO3ZhciBtPXModCxlLHtuYW1lOiJkaW1lbnNpb25zIixsYXlvdXQ6bCxoYW5kbGVJdGVtRGVmYXVsdHM6cH0pLGc9ZnVuY3Rpb24odCxlLHIsbyxzKXt2YXIgbD1zKCJsaW5lLmNvbG9yIixyKTtpZihpKHQsImxpbmUiKSYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXtpZihsLmxlbmd0aClyZXR1cm4gcygibGluZS5jb2xvcnNjYWxlIiksYSh0LGUsbyxzLHtwcmVmaXg6ImxpbmUuIixjTGV0dGVyOiJjIn0pLGwubGVuZ3RoO2UubGluZS5jb2xvcj1yfXJldHVybiAxLzB9KHQsZSxyLGwsdSk7byhlLGwsdSksQXJyYXkuaXNBcnJheShtKSYmbS5sZW5ndGh8fChlLnZpc2libGU9ITEpLGgoZSxtLCJ2YWx1ZXMiLGcpO3ZhciB2PXtmYW1pbHk6bC5mb250LmZhbWlseSxzaXplOk1hdGgucm91bmQobC5mb250LnNpemUvMS4yKSxjb2xvcjpsLmZvbnQuY29sb3J9O24uY29lcmNlRm9udCh1LCJsYWJlbGZvbnQiLHYpLG4uY29lcmNlRm9udCh1LCJ0aWNrZm9udCIsdiksbi5jb2VyY2VGb250KHUsInJhbmdlZm9udCIsdiksdSgibGFiZWxhbmdsZSIpLHUoImxhYmVsc2lkZSIpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY0OSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjY1MCwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6ODIyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi8uLi9wbG90cy9kb21haW4iOjg1NSwiLi9hdHRyaWJ1dGVzIjoxMTUzLCIuL2F4aXNicnVzaCI6MTE1NCwiLi9jb25zdGFudHMiOjExNTcsIi4vbWVyZ2VfbGVuZ3RoIjoxMTYyfV0sMTE1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc1R5cGVkQXJyYXk7ci5jb252ZXJ0VHlwZWRBcnJheT1mdW5jdGlvbih0KXtyZXR1cm4gbih0KT9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KTp0fSxyLmlzT3JkaW5hbD1mdW5jdGlvbih0KXtyZXR1cm4hIXQudGlja3ZhbHN9LHIuaXNWaXNpYmxlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGV8fCEoInZpc2libGUiaW4gdCl9fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sMTE2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxjb2xvcmJhcjp7Y29udGFpbmVyOiJsaW5lIixtaW46ImNtaW4iLG1heDoiY21heCJ9LG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJwYXJjb29yZHMiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbImdsIiwicmVnbCIsIm5vT3BhY2l0eSIsIm5vSG92ZXIiXSxtZXRhOnt9fX0seyIuL2F0dHJpYnV0ZXMiOjExNTMsIi4vYmFzZV9wbG90IjoxMTU1LCIuL2NhbGMiOjExNTYsIi4vZGVmYXVsdHMiOjExNTgsIi4vcGxvdCI6MTE2NH1dLDExNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpLGk9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbmF0dHJpYnV0ZSB2ZWM0IHAwMV8wNCwgcDA1XzA4LCBwMDlfMTIsIHAxM18xNixcbiAgICAgICAgICAgICAgIHAxN18yMCwgcDIxXzI0LCBwMjVfMjgsIHAyOV8zMixcbiAgICAgICAgICAgICAgIHAzM18zNiwgcDM3XzQwLCBwNDFfNDQsIHA0NV80OCxcbiAgICAgICAgICAgICAgIHA0OV81MiwgcDUzXzU2LCBwNTdfNjAsIGNvbG9ycztcblxudW5pZm9ybSBtYXQ0IGRpbTBBLCBkaW0xQSwgZGltMEIsIGRpbTFCLCBkaW0wQywgZGltMUMsIGRpbTBELCBkaW0xRCxcbiAgICAgICAgICAgICBsb0EsIGhpQSwgbG9CLCBoaUIsIGxvQywgaGlDLCBsb0QsIGhpRDtcblxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb24sIHZpZXdCb3hQb3MsIHZpZXdCb3hTaXplO1xudW5pZm9ybSBmbG9hdCBtYXNrSGVpZ2h0O1xudW5pZm9ybSBmbG9hdCBkcndMYXllcjsgLy8gMDogY29udGV4dCwgMTogZm9jdXMsIDI6IHBpY2tcbnVuaWZvcm0gdmVjNCBjb250ZXh0Q29sb3I7XG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrVGV4dHVyZSwgcGFsZXR0ZTtcblxuYm9vbCBpc1BpY2sgICAgPSAoZHJ3TGF5ZXIgPiAxLjUpO1xuYm9vbCBpc0NvbnRleHQgPSAoZHJ3TGF5ZXIgPCAwLjUpO1xuXG5jb25zdCB2ZWM0IFpFUk9TID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuY29uc3QgdmVjNCBVTklUUyA9IHZlYzQoMS4wLCAxLjAsIDEuMCwgMS4wKTtcblxuZmxvYXQgdmFsKG1hdDQgcCwgbWF0NCB2KSB7XG4gICAgcmV0dXJuIGRvdChtYXRyaXhDb21wTXVsdChwLCB2KSAqIFVOSVRTLCBVTklUUyk7XG59XG5cbmZsb2F0IGF4aXNZKGZsb2F0IHJhdGlvLCBtYXQ0IEEsIG1hdDQgQiwgbWF0NCBDLCBtYXQ0IEQpIHtcbiAgICBmbG9hdCB5MSA9IHZhbChBLCBkaW0wQSkgKyB2YWwoQiwgZGltMEIpICsgdmFsKEMsIGRpbTBDKSArIHZhbChELCBkaW0wRCk7XG4gICAgZmxvYXQgeTIgPSB2YWwoQSwgZGltMUEpICsgdmFsKEIsIGRpbTFCKSArIHZhbChDLCBkaW0xQykgKyB2YWwoRCwgZGltMUQpO1xuICAgIHJldHVybiB5MSAqICgxLjAgLSByYXRpbykgKyB5MiAqIHJhdGlvO1xufVxuXG5pbnQgaU1vZChpbnQgYSwgaW50IGIpIHtcbiAgICByZXR1cm4gYSAtIGIgKiAoYSAvIGIpO1xufVxuXG5ib29sIGZPdXRzaWRlKGZsb2F0IHAsIGZsb2F0IGxvLCBmbG9hdCBoaSkge1xuICAgIHJldHVybiAobG8gPCBoaSkgJiYgKGxvID4gcCB8fCBwID4gaGkpO1xufVxuXG5ib29sIHZPdXRzaWRlKHZlYzQgcCwgdmVjNCBsbywgdmVjNCBoaSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIGZPdXRzaWRlKHBbMF0sIGxvWzBdLCBoaVswXSkgfHxcbiAgICAgICAgZk91dHNpZGUocFsxXSwgbG9bMV0sIGhpWzFdKSB8fFxuICAgICAgICBmT3V0c2lkZShwWzJdLCBsb1syXSwgaGlbMl0pIHx8XG4gICAgICAgIGZPdXRzaWRlKHBbM10sIGxvWzNdLCBoaVszXSlcbiAgICApO1xufVxuXG5ib29sIG1PdXRzaWRlKG1hdDQgcCwgbWF0NCBsbywgbWF0NCBoaSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIHZPdXRzaWRlKHBbMF0sIGxvWzBdLCBoaVswXSkgfHxcbiAgICAgICAgdk91dHNpZGUocFsxXSwgbG9bMV0sIGhpWzFdKSB8fFxuICAgICAgICB2T3V0c2lkZShwWzJdLCBsb1syXSwgaGlbMl0pIHx8XG4gICAgICAgIHZPdXRzaWRlKHBbM10sIGxvWzNdLCBoaVszXSlcbiAgICApO1xufVxuXG5ib29sIG91dHNpZGVCb3VuZGluZ0JveChtYXQ0IEEsIG1hdDQgQiwgbWF0NCBDLCBtYXQ0IEQpIHtcbiAgICByZXR1cm4gbU91dHNpZGUoQSwgbG9BLCBoaUEpIHx8XG4gICAgICAgICAgIG1PdXRzaWRlKEIsIGxvQiwgaGlCKSB8fFxuICAgICAgICAgICBtT3V0c2lkZShDLCBsb0MsIGhpQykgfHxcbiAgICAgICAgICAgbU91dHNpZGUoRCwgbG9ELCBoaUQpO1xufVxuXG5ib29sIG91dHNpZGVSYXN0ZXJNYXNrKG1hdDQgQSwgbWF0NCBCLCBtYXQ0IEMsIG1hdDQgRCkge1xuICAgIG1hdDQgcG50c1s0XTtcbiAgICBwbnRzWzBdID0gQTtcbiAgICBwbnRzWzFdID0gQjtcbiAgICBwbnRzWzJdID0gQztcbiAgICBwbnRzWzNdID0gRDtcblxuICAgIGZvcihpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHtcbiAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IDQ7ICsraikge1xuICAgICAgICAgICAgZm9yKGludCBrID0gMDsgayA8IDQ7ICsraykge1xuICAgICAgICAgICAgICAgIGlmKDAgPT0gaU1vZChcbiAgICAgICAgICAgICAgICAgICAgaW50KDI1NS4wICogdGV4dHVyZTJEKG1hc2tUZXh0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmVjMihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQoaSAqIDIgKyBqIC8gMikgKyAwLjUpIC8gOC4wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwbnRzW2ldW2pdW2tdICogKG1hc2tIZWlnaHQgLSAxLjApICsgMS4wKSAvIG1hc2tIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICkpWzNdXG4gICAgICAgICAgICAgICAgICAgICkgLyBpbnQocG93KDIuMCwgZmxvYXQoaU1vZChqICogNCArIGssIDgpKSkpLFxuICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgKSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG52ZWM0IHBvc2l0aW9uKGJvb2wgaXNDb250ZXh0LCBmbG9hdCB2LCBtYXQ0IEEsIG1hdDQgQiwgbWF0NCBDLCBtYXQ0IEQpIHtcbiAgICBmbG9hdCB4ID0gMC41ICogc2lnbih2KSArIDAuNTtcbiAgICBmbG9hdCB5ID0gYXhpc1koeCwgQSwgQiwgQywgRCk7XG4gICAgZmxvYXQgeiA9IDEuMCAtIGFicyh2KTtcblxuICAgIHogKz0gaXNDb250ZXh0ID8gMC4wIDogMi4wICogZmxvYXQoXG4gICAgICAgIG91dHNpZGVCb3VuZGluZ0JveChBLCBCLCBDLCBEKSB8fFxuICAgICAgICBvdXRzaWRlUmFzdGVyTWFzayhBLCBCLCBDLCBEKVxuICAgICk7XG5cbiAgICByZXR1cm4gdmVjNChcbiAgICAgICAgMi4wICogKHZlYzIoeCwgeSkgKiB2aWV3Qm94U2l6ZSArIHZpZXdCb3hQb3MpIC8gcmVzb2x1dGlvbiAtIDEuMCxcbiAgICAgICAgeixcbiAgICAgICAgMS4wXG4gICAgKTtcbn1cblxudm9pZCBtYWluKCkge1xuICAgIG1hdDQgQSA9IG1hdDQocDAxXzA0LCBwMDVfMDgsIHAwOV8xMiwgcDEzXzE2KTtcbiAgICBtYXQ0IEIgPSBtYXQ0KHAxN18yMCwgcDIxXzI0LCBwMjVfMjgsIHAyOV8zMik7XG4gICAgbWF0NCBDID0gbWF0NChwMzNfMzYsIHAzN180MCwgcDQxXzQ0LCBwNDVfNDgpO1xuICAgIG1hdDQgRCA9IG1hdDQocDQ5XzUyLCBwNTNfNTYsIHA1N182MCwgWkVST1MpO1xuXG4gICAgZmxvYXQgdiA9IGNvbG9yc1szXTtcblxuICAgIGdsX1Bvc2l0aW9uID0gcG9zaXRpb24oaXNDb250ZXh0LCB2LCBBLCBCLCBDLCBEKTtcblxuICAgIGZyYWdDb2xvciA9XG4gICAgICAgIGlzQ29udGV4dCA/IHZlYzQoY29udGV4dENvbG9yKSA6XG4gICAgICAgIGlzUGljayA/IHZlYzQoY29sb3JzLnJnYiwgMS4wKSA6IHRleHR1cmUyRChwYWxldHRlLCB2ZWMyKGFicyh2KSwgMC41KSk7XG59XG4iXSksYT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICAgIGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcbn1cbiJdKSxvPXQoIi4vY29uc3RhbnRzIikubWF4RGltZW5zaW9uQ291bnQscz10KCIuLi8uLi9saWIiKSxsPW5ldyBVaW50OEFycmF5KDQpLGM9bmV3IFVpbnQ4QXJyYXkoNCksdT17c2hhcGU6WzI1NiwxXSxmb3JtYXQ6InJnYmEiLHR5cGU6InVpbnQ4IixtYWc6Im5lYXJlc3QiLG1pbjoibmVhcmVzdCJ9O2Z1bmN0aW9uIGYodCxlLHIsbixpKXt2YXIgYT10Ll9nbDthLmVuYWJsZShhLlNDSVNTT1JfVEVTVCksYS5zY2lzc29yKGUscixuLGkpLHQuY2xlYXIoe2NvbG9yOlswLDAsMCwwXSxkZXB0aDoxfSl9ZnVuY3Rpb24gaCh0LGUscixuLGksYSl7dmFyIG89YS5rZXk7ci5kcmF3Q29tcGxldGVkfHwoIWZ1bmN0aW9uKHQpe3QucmVhZCh7eDowLHk6MCx3aWR0aDoxLGhlaWdodDoxLGRhdGE6bH0pfSh0KSxyLmRyYXdDb21wbGV0ZWQ9ITApLGZ1bmN0aW9uIHMobCl7dmFyIGM9TWF0aC5taW4obixpLWwqbik7MD09PWwmJih3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoci5jdXJyZW50UmFmc1tvXSksZGVsZXRlIHIuY3VycmVudFJhZnNbb10sZih0LGEuc2Npc3NvclgsYS5zY2lzc29yWSxhLnNjaXNzb3JXaWR0aCxhLnZpZXdCb3hTaXplWzFdKSksci5jbGVhck9ubHl8fChhLmNvdW50PTIqYyxhLm9mZnNldD0yKmwqbixlKGEpLGwqbitjPGkmJihyLmN1cnJlbnRSYWZzW29dPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7cyhsKzEpfSkpKSxyLmRyYXdDb21wbGV0ZWQ9ITEpfSgwKX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSgyNTYpLG49MDtuPDI1NjtuKyspcltuXT10KG4vMjU1KS5jb25jYXQoZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gZCh0LGUpe3JldHVybih0Pj4+OCplKSUyNTYvMjU1fWZ1bmN0aW9uIG0odCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoOCplKSxpPTAsYT0wO2E8ZTthKyspZm9yKHZhciBvPTA7bzwyO28rKylmb3IodmFyIHM9MDtzPDQ7cysrKXt2YXIgbD00KnQrcyxjPXJbNjQqYStsXTs2Mz09PWwmJjA9PT1vJiYoYyo9LTEpLG5baSsrXT1jfXJldHVybiBufWZ1bmN0aW9uIGcodCl7dmFyIGU9IjAiK3Q7cmV0dXJuIGUuc3Vic3RyKGUubGVuZ3RoLTIpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQ8bz8icCIrZyh0KzEpKyJfIitnKHQrNCk6ImNvbG9ycyJ9ZnVuY3Rpb24geSh0LGUscixuLGksYSxvLGwsYyx1LGYsaCxwLGQpe2Zvcih2YXIgbT1bW10sW11dLGc9MDtnPDY0O2crKyltWzBdW2ddPWc9PT1pPzE6MCxtWzFdW2ddPWc9PT1hPzE6MDtvKj1kLGwqPWQsYyo9ZCx1Kj1kO3ZhciB2PXQubGluZXMuY2FudmFzT3ZlcmRyYWcqZCx5PXQuZG9tYWluLHg9dC5jYW52YXNXaWR0aCpkLGI9dC5jYW52YXNIZWlnaHQqZCxfPXQucGFkLmwqZCx3PXQucGFkLmIqZCxUPXQubGF5b3V0SGVpZ2h0KmQsaz10LmxheW91dFdpZHRoKmQsQT10LmRlc2VsZWN0ZWRMaW5lcy5jb2xvcjtyZXR1cm4gcy5leHRlbmRGbGF0KHtrZXk6ZixyZXNvbHV0aW9uOlt4LGJdLHZpZXdCb3hQb3M6W28rdixsXSx2aWV3Qm94U2l6ZTpbYyx1XSxpMDppLGkxOmEsZGltMEE6bVswXS5zbGljZSgwLDE2KSxkaW0wQjptWzBdLnNsaWNlKDE2LDMyKSxkaW0wQzptWzBdLnNsaWNlKDMyLDQ4KSxkaW0wRDptWzBdLnNsaWNlKDQ4LDY0KSxkaW0xQTptWzFdLnNsaWNlKDAsMTYpLGRpbTFCOm1bMV0uc2xpY2UoMTYsMzIpLGRpbTFDOm1bMV0uc2xpY2UoMzIsNDgpLGRpbTFEOm1bMV0uc2xpY2UoNDgsNjQpLGRyd0xheWVyOmgsY29udGV4dENvbG9yOltBWzBdLzI1NSxBWzFdLzI1NSxBWzJdLzI1NSxBWzNdPDE/QVszXTpNYXRoLm1heCgxLzI1NSxNYXRoLnBvdygxL3QubGluZXMuY29sb3IubGVuZ3RoLDEvMykpXSxzY2lzc29yWDoobj09PWU/MDpvK3YpKyhfLXYpK2sqeS54WzBdLHNjaXNzb3JXaWR0aDoobj09PXI/eC1vK3Y6YysuNSkrKG49PT1lP28rdjowKSxzY2lzc29yWTpsK3crVCp5LnlbMF0sc2Npc3NvckhlaWdodDp1LHZpZXdwb3J0WDpfLXYrayp5LnhbMF0sdmlld3BvcnRZOncrVCp5LnlbMF0sdmlld3BvcnRXaWR0aDp4LHZpZXdwb3J0SGVpZ2h0OmJ9LHApfWZ1bmN0aW9uIHgodCl7dmFyIGU9TWF0aC5tYXgoMCxNYXRoLmZsb29yKDIwNDcqdFswXSksMCkscj1NYXRoLm1pbigyMDQ3LE1hdGguY2VpbCgyMDQ3KnRbMV0pLDIwNDcpO3JldHVybltNYXRoLm1pbihlLHIpLE1hdGgubWF4KGUscildfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4sbCxnLGIsXz1lLmNvbnRleHQsdz1lLnBpY2ssVD1lLnJlZ2wsaz1ULl9nbCxBPWsuZ2V0UGFyYW1ldGVyKGsuQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFKSxNPU1hdGgubWF4KEFbMF0sTWF0aC5taW4oQVsxXSxlLnZpZXdNb2RlbC5wbG90R2xQaXhlbFJhdGlvKSksUz17Y3VycmVudFJhZnM6e30sZHJhd0NvbXBsZXRlZDohMCxjbGVhck9ubHk6ITF9LEU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9MDtyPD1vO3IrPTQpZVt2KHIpXT10LmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5KDApfSk7cmV0dXJuIGV9KFQpLEw9VC50ZXh0dXJlKHUpLEM9W107SShlKTt2YXIgUD1UKHtwcm9maWxlOiExLGJsZW5kOntlbmFibGU6XyxmdW5jOntzcmNSR0I6InNyYyBhbHBoYSIsZHN0UkdCOiJvbmUgbWludXMgc3JjIGFscGhhIixzcmNBbHBoYToxLGRzdEFscGhhOjF9LGVxdWF0aW9uOntyZ2I6ImFkZCIsYWxwaGE6ImFkZCJ9LGNvbG9yOlswLDAsMCwwXX0sZGVwdGg6e2VuYWJsZTohXyxtYXNrOiEwLGZ1bmM6Imxlc3MiLHJhbmdlOlswLDFdfSxjdWxsOntlbmFibGU6ITAsZmFjZToiYmFjayJ9LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6e3g6VC5wcm9wKCJzY2lzc29yWCIpLHk6VC5wcm9wKCJzY2lzc29yWSIpLHdpZHRoOlQucHJvcCgic2Npc3NvcldpZHRoIiksaGVpZ2h0OlQucHJvcCgic2Npc3NvckhlaWdodCIpfX0sdmlld3BvcnQ6e3g6VC5wcm9wKCJ2aWV3cG9ydFgiKSx5OlQucHJvcCgidmlld3BvcnRZIiksd2lkdGg6VC5wcm9wKCJ2aWV3cG9ydFdpZHRoIiksaGVpZ2h0OlQucHJvcCgidmlld3BvcnRIZWlnaHQiKX0sZGl0aGVyOiExLHZlcnQ6aSxmcmFnOmEscHJpbWl0aXZlOiJsaW5lcyIsbGluZVdpZHRoOk0sYXR0cmlidXRlczpFLHVuaWZvcm1zOntyZXNvbHV0aW9uOlQucHJvcCgicmVzb2x1dGlvbiIpLHZpZXdCb3hQb3M6VC5wcm9wKCJ2aWV3Qm94UG9zIiksdmlld0JveFNpemU6VC5wcm9wKCJ2aWV3Qm94U2l6ZSIpLGRpbTBBOlQucHJvcCgiZGltMEEiKSxkaW0xQTpULnByb3AoImRpbTFBIiksZGltMEI6VC5wcm9wKCJkaW0wQiIpLGRpbTFCOlQucHJvcCgiZGltMUIiKSxkaW0wQzpULnByb3AoImRpbTBDIiksZGltMUM6VC5wcm9wKCJkaW0xQyIpLGRpbTBEOlQucHJvcCgiZGltMEQiKSxkaW0xRDpULnByb3AoImRpbTFEIiksbG9BOlQucHJvcCgibG9BIiksaGlBOlQucHJvcCgiaGlBIiksbG9COlQucHJvcCgibG9CIiksaGlCOlQucHJvcCgiaGlCIiksbG9DOlQucHJvcCgibG9DIiksaGlDOlQucHJvcCgiaGlDIiksbG9EOlQucHJvcCgibG9EIiksaGlEOlQucHJvcCgiaGlEIikscGFsZXR0ZTpMLGNvbnRleHRDb2xvcjpULnByb3AoImNvbnRleHRDb2xvciIpLG1hc2tUZXh0dXJlOlQucHJvcCgibWFza1RleHR1cmUiKSxkcndMYXllcjpULnByb3AoImRyd0xheWVyIiksbWFza0hlaWdodDpULnByb3AoIm1hc2tIZWlnaHQiKX0sb2Zmc2V0OlQucHJvcCgib2Zmc2V0IiksY291bnQ6VC5wcm9wKCJjb3VudCIpfSk7ZnVuY3Rpb24gSSh0KXtyPXQubW9kZWwsbj10LnZpZXdNb2RlbCxsPW4uZGltZW5zaW9ucy5zbGljZSgpLGc9bFswXT9sWzBdLnZhbHVlcy5sZW5ndGg6MDt2YXIgZT1yLmxpbmVzLGk9dz9lLmNvbG9yLm1hcCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gci9lLmNvbG9yLmxlbmd0aH0pKTplLmNvbG9yLGE9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPW5ldyBBcnJheSh0KihvKzQpKSxhPTAscz0wO3M8dDtzKyspe2Zvcih2YXIgbD0wO2w8bztsKyspaVthKytdPWw8ZS5sZW5ndGg/ZVtsXS5wYWRkZWRVbml0VmFsdWVzW3NdOi41O2lbYSsrXT1kKHMsMiksaVthKytdPWQocywxKSxpW2ErK109ZChzLDApLGlbYSsrXT0obj1yW3NdLE1hdGgubWF4KDFlLTYsTWF0aC5taW4oLjk5OTk5OSxuKSkpfXJldHVybiBpfShnLGwsaSk7IWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPD1vO24rPTQpdFt2KG4pXShtKG4vNCxlLHIpKX0oRSxnLGEpLF98fHd8fChMPVQudGV4dHVyZShzLmV4dGVuZEZsYXQoe2RhdGE6cChyLnVuaXRUb0NvbG9yLDI1NSl9LHUpKSl9cmV0dXJue3JlbmRlcjpmdW5jdGlvbih0LGUsbil7dmFyIGksYSxvLHM9dC5sZW5ndGgsYz0xLzAsdT0tMS8wO2ZvcihpPTA7aTxzO2krKyl0W2ldLmRpbTAuY2FudmFzWDxjJiYoYz10W2ldLmRpbTAuY2FudmFzWCxhPWkpLHRbaV0uZGltMS5jYW52YXNYPnUmJih1PXRbaV0uZGltMS5jYW52YXNYLG89aSk7MD09PXMmJmYoVCwwLDAsci5jYW52YXNXaWR0aCxyLmNhbnZhc0hlaWdodCk7dmFyIHA9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9W1tdLFtdXTtmb3Iobj0wO248NjQ7bisrKXt2YXIgYT0hdCYmbjxsLmxlbmd0aD9sW25dLmJydXNoLmZpbHRlci5nZXRCb3VuZHMoKTpbLTEvMCwxLzBdO2lbMF1bbl09YVswXSxpWzFdW25dPWFbMV19dmFyIG89bmV3IEFycmF5KDE2Mzg0KTtmb3IoZT0wO2U8MTYzODQ7ZSsrKW9bZV09MjU1O2lmKCF0KWZvcihlPTA7ZTxsLmxlbmd0aDtlKyspe3ZhciBzPWUlOCxjPShlLXMpLzgsdT1NYXRoLnBvdygyLHMpLGY9bFtlXS5icnVzaC5maWx0ZXIuZ2V0KCk7aWYoIShmLmxlbmd0aDwyKSl7dmFyIGg9eChmWzBdKVsxXTtmb3Iocj0xO3I8Zi5sZW5ndGg7cisrKXt2YXIgcD14KGZbcl0pO2ZvcihuPWgrMTtuPHBbMF07bisrKW9bOCpuK2NdJj1+dTtoPU1hdGgubWF4KGgscFsxXSl9fX12YXIgZD17c2hhcGU6WzgsMjA0OF0sZm9ybWF0OiJhbHBoYSIsdHlwZToidWludDgiLG1hZzoibmVhcmVzdCIsbWluOiJuZWFyZXN0IixkYXRhOm99O3JldHVybiBiP2IoZCk6Yj1ULnRleHR1cmUoZCkse21hc2tUZXh0dXJlOmIsbWFza0hlaWdodDoyMDQ4LGxvQTppWzBdLnNsaWNlKDAsMTYpLGxvQjppWzBdLnNsaWNlKDE2LDMyKSxsb0M6aVswXS5zbGljZSgzMiw0OCksbG9EOmlbMF0uc2xpY2UoNDgsNjQpLGhpQTppWzFdLnNsaWNlKDAsMTYpLGhpQjppWzFdLnNsaWNlKDE2LDMyKSxoaUM6aVsxXS5zbGljZSgzMiw0OCksaGlEOmlbMV0uc2xpY2UoNDgsNjQpfX0oXyk7Zm9yKGk9MDtpPHM7aSsrKXt2YXIgZD10W2ldLG09ZC5kaW0wLmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXgsdj1kLmRpbTEuY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleCxrPWQuY2FudmFzWCxBPWQuY2FudmFzWSxNPWsrZC5wYW5lbFNpemVYLEU9ZC5wbG90R2xQaXhlbFJhdGlvO2lmKGV8fCFDW21dfHxDW21dWzBdIT09a3x8Q1ttXVsxXSE9PU0pe0NbbV09W2ssTV07dmFyIEw9eShyLGEsbyxpLG0sdixrLEEsZC5wYW5lbFNpemVYLGQucGFuZWxTaXplWSxkLmRpbTAuY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleCxfPzA6dz8yOjEscCxFKTtTLmNsZWFyT25seT1uO3ZhciBJPWU/ci5saW5lcy5ibG9ja0xpbmVDb3VudDpnO2goVCxQLFMsSSxnLEwpfX19LHJlYWRQaXhlbDpmdW5jdGlvbih0LGUpe3JldHVybiBULnJlYWQoe3g6dCx5OmUsd2lkdGg6MSxoZWlnaHQ6MSxkYXRhOmN9KSxjfSxyZWFkUGl4ZWxzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5ldyBVaW50OEFycmF5KDQqcipuKTtyZXR1cm4gVC5yZWFkKHt4OnQseTplLHdpZHRoOnIsaGVpZ2h0Om4sZGF0YTppfSksaX0sZGVzdHJveTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0LnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIixMLmRlc3Ryb3koKSxiJiZiLmRlc3Ryb3koKSxFKUVbZV0uZGVzdHJveSgpfSx1cGRhdGU6SX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2NvbnN0YW50cyI6MTE1NyxnbHNsaWZ5OjQyNH1dLDExNjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE7Zm9yKG58fChuPTEvMCksaT0wO2k8ZS5sZW5ndGg7aSsrKShhPWVbaV0pLnZpc2libGUmJihuPU1hdGgubWluKG4sYVtyXS5sZW5ndGgpKTtmb3Iobj09PTEvMCYmKG49MCksdC5fbGVuZ3RoPW4saT0wO2k8ZS5sZW5ndGg7aSsrKShhPWVbaV0pLnZpc2libGUmJihhLl9sZW5ndGg9bik7cmV0dXJuIG59fSx7fV0sMTE2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPWkubnVtYmVyRm9ybWF0LG89dCgiY29sb3ItcmdiYSIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxsPWkuc3RyUm90YXRlLGM9aS5zdHJUcmFuc2xhdGUsdT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxmPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGg9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikscD10KCIuLi8uLi9saWIvZ3VwIiksZD1wLmtleUZ1bixtPXAucmVwZWF0LGc9cC51bndyYXAsdj10KCIuL2hlbHBlcnMiKSx5PXQoIi4vY29uc3RhbnRzIikseD10KCIuL2F4aXNicnVzaCIpLGI9dCgiLi9saW5lcyIpO2Z1bmN0aW9uIF8odCxlLHIpe3JldHVybiBpLmFnZ051bXModCxudWxsLGUscil9ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBrKF8oTWF0aC5taW4sdCxlKSxfKE1hdGgubWF4LHQsZSkpfWZ1bmN0aW9uIFQodCl7dmFyIGU9dC5yYW5nZTtyZXR1cm4gZT9rKGVbMF0sZVsxXSk6dyh0LnZhbHVlcyx0Ll9sZW5ndGgpfWZ1bmN0aW9uIGsodCxlKXtyZXR1cm4haXNOYU4odCkmJmlzRmluaXRlKHQpfHwodD0wKSwhaXNOYU4oZSkmJmlzRmluaXRlKGUpfHwoZT0wKSx0PT09ZSYmKDA9PT10Pyh0LT0xLGUrPTEpOih0Kj0uOSxlKj0xLjEpKSxbdCxlXX1mdW5jdGlvbiBBKHQsZSxyLGksbyl7dmFyIHMsbCxjPVQocik7cmV0dXJuIGk/bi5zY2FsZS5vcmRpbmFsKCkuZG9tYWluKGkubWFwKChzPWEoci50aWNrZm9ybWF0KSxsPW8sbD9mdW5jdGlvbih0LGUpe3ZhciByPWxbZV07cmV0dXJuIG51bGw9PXI/cyh0KTpyfTpzKSkpLnJhbmdlKGkubWFwKChmdW5jdGlvbihyKXt2YXIgbj0oci1jWzBdKS8oY1sxXS1jWzBdKTtyZXR1cm4gdC1lK24qKDIqZS10KX0pKSk6bi5zY2FsZS5saW5lYXIoKS5kb21haW4oYykucmFuZ2UoW3QtZSxlXSl9ZnVuY3Rpb24gTSh0KXtpZih0LnRpY2t2YWxzKXt2YXIgZT1UKHQpO3JldHVybiBuLnNjYWxlLm9yZGluYWwoKS5kb21haW4odC50aWNrdmFscykucmFuZ2UodC50aWNrdmFscy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybih0LWVbMF0pLyhlWzFdLWVbMF0pfSkpKX19ZnVuY3Rpb24gUyh0KXt2YXIgZT10Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSkscj10Lm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9byh0WzFdKTtyZXR1cm4gbi5yZ2IoInJnYigiK2VbMF0rIiwiK2VbMV0rIiwiK2VbMl0rIikiKX0pKSxpPSJyZ2IiLnNwbGl0KCIiKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBuLnNjYWxlLmxpbmVhcigpLmNsYW1wKCEwKS5kb21haW4oZSkucmFuZ2Uoci5tYXAoKGk9dCxmdW5jdGlvbih0KXtyZXR1cm4gdFtpXX0pKSk7dmFyIGl9KSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUodCl9KSl9fWZ1bmN0aW9uIEUodCl7cmV0dXJuIHQuZGltZW5zaW9ucy5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gdC5icnVzaC5maWx0ZXJTcGVjaWZpZWR9KSl9ZnVuY3Rpb24gTCh0LGUscil7dmFyIGE9ZyhlKSxzPWEudHJhY2UsbD12LmNvbnZlcnRUeXBlZEFycmF5KGEubGluZUNvbG9yKSxjPXMubGluZSx1PXtjb2xvcjpvKHkuZGVzZWxlY3RlZExpbmVDb2xvcil9LGY9aC5leHRyYWN0T3B0cyhjKSxwPWYucmV2ZXJzZXNjYWxlP2guZmxpcFNjYWxlKGEuY3NjYWxlKTphLmNzY2FsZSxkPXMuZG9tYWluLG09cy5kaW1lbnNpb25zLHg9dC53aWR0aCxiPXMubGFiZWxhbmdsZSxfPXMubGFiZWxzaWRlLHc9cy5sYWJlbGZvbnQsaz1zLnRpY2tmb250LEE9cy5yYW5nZWZvbnQsTT1pLmV4dGVuZERlZXBOb0FycmF5cyh7fSxjLHtjb2xvcjpsLm1hcChuLnNjYWxlLmxpbmVhcigpLmRvbWFpbihUKHt2YWx1ZXM6bCxyYW5nZTpbZi5taW4sZi5tYXhdLF9sZW5ndGg6cy5fbGVuZ3RofSkpKSxibG9ja0xpbmVDb3VudDp5LmJsb2NrTGluZUNvdW50LGNhbnZhc092ZXJkcmFnOnkub3ZlcmRyYWcqeS5jYW52YXNQaXhlbFJhdGlvfSksRT1NYXRoLmZsb29yKHgqKGQueFsxXS1kLnhbMF0pKSxMPU1hdGguZmxvb3IodC5oZWlnaHQqKGQueVsxXS1kLnlbMF0pKSxDPXQubWFyZ2lufHx7bDo4MCxyOjgwLHQ6MTAwLGI6ODB9LFA9RSxJPUw7cmV0dXJue2tleTpyLGNvbENvdW50Om0uZmlsdGVyKHYuaXNWaXNpYmxlKS5sZW5ndGgsZGltZW5zaW9uczptLHRpY2tEaXN0YW5jZTp5LnRpY2tEaXN0YW5jZSx1bml0VG9Db2xvcjpTKHApLGxpbmVzOk0sZGVzZWxlY3RlZExpbmVzOnUsbGFiZWxBbmdsZTpiLGxhYmVsU2lkZTpfLGxhYmVsRm9udDp3LHRpY2tGb250OmsscmFuZ2VGb250OkEsbGF5b3V0V2lkdGg6eCxsYXlvdXRIZWlnaHQ6dC5oZWlnaHQsZG9tYWluOmQsdHJhbnNsYXRlWDpkLnhbMF0qeCx0cmFuc2xhdGVZOnQuaGVpZ2h0LWQueVsxXSp0LmhlaWdodCxwYWQ6QyxjYW52YXNXaWR0aDpQKnkuY2FudmFzUGl4ZWxSYXRpbysyKk0uY2FudmFzT3ZlcmRyYWcsY2FudmFzSGVpZ2h0OkkqeS5jYW52YXNQaXhlbFJhdGlvLHdpZHRoOlAsaGVpZ2h0OkksY2FudmFzUGl4ZWxSYXRpbzp5LmNhbnZhc1BpeGVsUmF0aW99fWZ1bmN0aW9uIEModCxlLHIpe3ZhciBvPXIud2lkdGgscz1yLmhlaWdodCxsPXIuZGltZW5zaW9ucyxjPXIuY2FudmFzUGl4ZWxSYXRpbyx1PWZ1bmN0aW9uKHQpe3JldHVybiBvKnQvTWF0aC5tYXgoMSxyLmNvbENvdW50LTEpfSxmPXkudmVydGljYWxQYWRkaW5nL3MsaD1mdW5jdGlvbih0LGUpe3JldHVybiBuLnNjYWxlLmxpbmVhcigpLnJhbmdlKFtlLHQtZV0pfShzLHkudmVydGljYWxQYWRkaW5nKSxwPXtrZXk6ci5rZXkseFNjYWxlOnUsbW9kZWw6cixpbkJydXNoRHJhZzohMX0sZD17fTtyZXR1cm4gcC5kaW1lbnNpb25zPWwuZmlsdGVyKHYuaXNWaXNpYmxlKS5tYXAoKGZ1bmN0aW9uKG8sbCl7dmFyIG09ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zY2FsZS5saW5lYXIoKS5kb21haW4oVCh0KSkucmFuZ2UoW2UsMS1lXSl9KG8sZiksZz1kW28ubGFiZWxdO2Rbby5sYWJlbF09KGd8fDApKzE7dmFyIGI9by5sYWJlbCsoZz8iX18iK2c6IiIpLF89by5jb25zdHJhaW50cmFuZ2Usdz1fJiZfLmxlbmd0aDt3JiYhQXJyYXkuaXNBcnJheShfWzBdKSYmKF89W19dKTt2YXIgaz13P18ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAobSl9KSk6W1stMS8wLDEvMF1dLFM9by52YWx1ZXM7Uy5sZW5ndGg+by5fbGVuZ3RoJiYoUz1TLnNsaWNlKDAsby5fbGVuZ3RoKSk7dmFyIEwsQz1vLnRpY2t2YWxzO2Z1bmN0aW9uIFAodCxlKXtyZXR1cm57dmFsOnQsdGV4dDpMW2VdfX1mdW5jdGlvbiBJKHQsZSl7cmV0dXJuIHQudmFsLWUudmFsfWlmKEFycmF5LmlzQXJyYXkoQykmJkMubGVuZ3RoKXtMPW8udGlja3RleHQsQXJyYXkuaXNBcnJheShMKSYmTC5sZW5ndGg/TC5sZW5ndGg+Qy5sZW5ndGg/TD1MLnNsaWNlKDAsQy5sZW5ndGgpOkMubGVuZ3RoPkwubGVuZ3RoJiYoQz1DLnNsaWNlKDAsTC5sZW5ndGgpKTpMPUMubWFwKGEoby50aWNrZm9ybWF0KSk7Zm9yKHZhciBPPTE7TzxDLmxlbmd0aDtPKyspaWYoQ1tPXTxDW08tMV0pe2Zvcih2YXIgej1DLm1hcChQKS5zb3J0KEkpLEQ9MDtEPEMubGVuZ3RoO0QrKylDW0RdPXpbRF0udmFsLExbRF09eltEXS50ZXh0O2JyZWFrfX1lbHNlIEM9dm9pZCAwO3JldHVybiBTPXYuY29udmVydFR5cGVkQXJyYXkoUykse2tleTpiLGxhYmVsOm8ubGFiZWwsdGlja0Zvcm1hdDpvLnRpY2tmb3JtYXQsdGlja3ZhbHM6Qyx0aWNrdGV4dDpMLG9yZGluYWw6di5pc09yZGluYWwobyksbXVsdGlzZWxlY3Q6by5tdWx0aXNlbGVjdCx4SW5kZXg6bCxjcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4OmwsdmlzaWJsZUluZGV4Om8uX2luZGV4LGhlaWdodDpzLHZhbHVlczpTLHBhZGRlZFVuaXRWYWx1ZXM6Uy5tYXAobSksdW5pdFRpY2t2YWxzOkMmJkMubWFwKG0pLHhTY2FsZTp1LHg6dShsKSxjYW52YXNYOnUobCkqYyx1bml0VG9QYWRkZWRQeDpoLGRvbWFpblNjYWxlOkEocyx5LnZlcnRpY2FsUGFkZGluZyxvLEMsTCksb3JkaW5hbFNjYWxlOk0obykscGFyZW50OnAsbW9kZWw6cixicnVzaDp4Lm1ha2VCcnVzaCh0LHcsaywoZnVuY3Rpb24oKXt0LmxpbmVQaWNrQWN0aXZlKCExKX0pLChmdW5jdGlvbigpe3ZhciBlPXA7ZS5mb2N1c0xheWVyJiZlLmZvY3VzTGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKTt2YXIgcj1FKGUpOyF0LmNvbnRleHRTaG93bigpJiZyPyhlLmNvbnRleHRMYXllciYmZS5jb250ZXh0TGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKSx0LmNvbnRleHRTaG93bighMCkpOnQuY29udGV4dFNob3duKCkmJiFyJiYoZS5jb250ZXh0TGF5ZXImJmUuY29udGV4dExheWVyLnJlbmRlcihlLnBhbmVscywhMCwhMCksdC5jb250ZXh0U2hvd24oITEpKX0pLChmdW5jdGlvbihyKXtpZihwLmZvY3VzTGF5ZXIucmVuZGVyKHAucGFuZWxzLCEwKSxwLnBpY2tMYXllciYmcC5waWNrTGF5ZXIucmVuZGVyKHAucGFuZWxzLCEwKSx0LmxpbmVQaWNrQWN0aXZlKCEwKSxlJiZlLmZpbHRlckNoYW5nZWQpe3ZhciBuPW0uaW52ZXJ0LGE9ci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChuKS5zb3J0KGkuc29ydGVyQXNjKX0pKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLWVbMF19KSk7ZS5maWx0ZXJDaGFuZ2VkKHAua2V5LG8uX2luZGV4LGEpfX0pKX19KSkscH1mdW5jdGlvbiBQKHQpe3QuY2xhc3NlZCh5LmNuLmF4aXNFeHRlbnRUZXh0LCEwKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJjdXJzb3IiLCJkZWZhdWx0Iil9ZnVuY3Rpb24gSSh0LGUpe3ZhciByPSJ0b3AiPT09ZT8xOi0xLG49dCpNYXRoLlBJLzE4MDtyZXR1cm57ZGlyOnIsZHg6TWF0aC5zaW4obiksZHk6TWF0aC5jb3MobiksZGVncmVlczp0fX1mdW5jdGlvbiBPKHQsZSxyKXtmb3IodmFyIG49ZS5wYW5lbHN8fChlLnBhbmVscz1bXSksaT10LmRhdGEoKSxhPTA7YTxpLmxlbmd0aC0xO2ErKyl7dmFyIG89blthXXx8KG5bYV09e30pLHM9aVthXSxsPWlbYSsxXTtvLmRpbTA9cyxvLmRpbTE9bCxvLmNhbnZhc1g9cy5jYW52YXNYLG8ucGFuZWxTaXplWD1sLmNhbnZhc1gtcy5jYW52YXNYLG8ucGFuZWxTaXplWT1lLm1vZGVsLmNhbnZhc0hlaWdodCxvLnk9MCxvLmNhbnZhc1k9MCxvLnBsb3RHbFBpeGVsUmF0aW89cn19ZnVuY3Rpb24geih0LGUpe3JldHVybiBzLnRpY2tUZXh0KHQuX2F4LGUsITEpLnRleHR9ZnVuY3Rpb24gRCh0LGUpe2lmKHQub3JkaW5hbClyZXR1cm4iIjt2YXIgcj10LmRvbWFpblNjYWxlLmRvbWFpbigpLG49cltlP3IubGVuZ3RoLTE6MF07cmV0dXJuIHoodC5tb2RlbC5kaW1lbnNpb25zW3QudmlzaWJsZUluZGV4XSxuKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89dC5fZnVsbExheW91dCxoPW8uX3RvcHBhcGVyLHA9by5fZ2xjb250YWluZXIsXz10Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW8sVD10Ll9mdWxsTGF5b3V0LnBhcGVyX2JnY29sb3I7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWZvcih2YXIgcj0wO3I8dFtlXS5sZW5ndGg7cisrKWZvcih2YXIgbj10W2VdW3JdLnRyYWNlLGk9bi5kaW1lbnNpb25zLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXS52YWx1ZXMsbD1pW2FdLl9heDtsJiYobC5yYW5nZT9sLnJhbmdlPWsobC5yYW5nZVswXSxsLnJhbmdlWzFdKTpsLnJhbmdlPXcobyxuLl9sZW5ndGgpLGwuZHRpY2t8fChsLmR0aWNrPS4wMSooTWF0aC5hYnMobC5yYW5nZVsxXS1sLnJhbmdlWzBdKXx8MSkpLGwudGlja2Zvcm1hdD1pW2FdLnRpY2tmb3JtYXQscy5jYWxjVGlja3MobCksbC5jbGVhblJhbmdlKCkpfX0oZSk7dmFyIEEsTSxTPShBPSEwLE09ITEse2xpbmVQaWNrQWN0aXZlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP0E9ISF0OkF9LGNvbnRleHRTaG93bjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9NPSEhdDpNfX0pLFI9ZS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBnKHQpLnRyYWNlLnZpc2libGV9KSkubWFwKEwuYmluZCgwLHIpKS5tYXAoQy5iaW5kKDAsUyxhKSk7cC5lYWNoKChmdW5jdGlvbih0LGUpe3JldHVybiBpLmV4dGVuZEZsYXQodCxSW2VdKX0pKTt2YXIgRj1wLnNlbGVjdEFsbCgiLmdsLWNhbnZhcyIpLmVhY2goKGZ1bmN0aW9uKHQpe3Qudmlld01vZGVsPVJbMF0sdC52aWV3TW9kZWwucGxvdEdsUGl4ZWxSYXRpbz1fLHQudmlld01vZGVsLnBhcGVyQ29sb3I9VCx0Lm1vZGVsPXQudmlld01vZGVsP3Qudmlld01vZGVsLm1vZGVsOm51bGx9KSksQj1udWxsO0YuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5waWNrfSkpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImF1dG8iKS5vbigibW91c2Vtb3ZlIiwoZnVuY3Rpb24odCl7aWYoUy5saW5lUGlja0FjdGl2ZSgpJiZ0LmxpbmVMYXllciYmYSYmYS5ob3Zlcil7dmFyIGU9bi5ldmVudCxyPXRoaXMud2lkdGgsaT10aGlzLmhlaWdodCxvPW4ubW91c2UodGhpcykscz1vWzBdLGw9b1sxXTtpZihzPDB8fGw8MHx8cz49cnx8bD49aSlyZXR1cm47dmFyIGM9dC5saW5lTGF5ZXIucmVhZFBpeGVsKHMsaS0xLWwpLHU9MCE9PWNbM10sZj11P2NbMl0rMjU2KihjWzFdKzI1NipjWzBdKTpudWxsLGg9e3g6cyx5OmwsY2xpZW50WDplLmNsaWVudFgsY2xpZW50WTplLmNsaWVudFksZGF0YUluZGV4OnQubW9kZWwua2V5LGN1cnZlTnVtYmVyOmZ9O2YhPT1CJiYodT9hLmhvdmVyKGgpOmEudW5ob3ZlciYmYS51bmhvdmVyKGgpLEI9Zil9fSkpLEYuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5waWNrPzA6MX0pKSxoLnN0eWxlKCJiYWNrZ3JvdW5kIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwKSIpO3ZhciBOPWguc2VsZWN0QWxsKCIuIit5LmNuLnBhcmNvb3JkcykuZGF0YShSLGQpO04uZXhpdCgpLnJlbW92ZSgpLE4uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHkuY24ucGFyY29vcmRzLCEwKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxOLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBjKHQubW9kZWwudHJhbnNsYXRlWCx0Lm1vZGVsLnRyYW5zbGF0ZVkpfSkpO3ZhciBqPU4uc2VsZWN0QWxsKCIuIit5LmNuLnBhcmNvb3Jkc0NvbnRyb2xWaWV3KS5kYXRhKG0sZCk7ai5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoeS5jbi5wYXJjb29yZHNDb250cm9sVmlldywhMCksai5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gYyh0Lm1vZGVsLnBhZC5sLHQubW9kZWwucGFkLnQpfSkpO3ZhciBVPWouc2VsZWN0QWxsKCIuIit5LmNuLnlBeGlzKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaW1lbnNpb25zfSksZCk7VS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoeS5jbi55QXhpcywhMCksai5lYWNoKChmdW5jdGlvbih0KXtPKFUsdCxfKX0pKSxGLmVhY2goKGZ1bmN0aW9uKHQpe2lmKHQudmlld01vZGVsKXshdC5saW5lTGF5ZXJ8fGE/dC5saW5lTGF5ZXI9Yih0aGlzLHQpOnQubGluZUxheWVyLnVwZGF0ZSh0KSwodC5rZXl8fDA9PT10LmtleSkmJih0LnZpZXdNb2RlbFt0LmtleV09dC5saW5lTGF5ZXIpO3ZhciBlPSF0LmNvbnRleHR8fGE7dC5saW5lTGF5ZXIucmVuZGVyKHQudmlld01vZGVsLnBhbmVscyxlKX19KSksVS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gYyh0LnhTY2FsZSh0LnhJbmRleCksMCl9KSksVS5jYWxsKG4uYmVoYXZpb3IuZHJhZygpLm9yaWdpbigoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkub24oImRyYWciLChmdW5jdGlvbih0KXt2YXIgZT10LnBhcmVudDtTLmxpbmVQaWNrQWN0aXZlKCExKSx0Lng9TWF0aC5tYXgoLXkub3ZlcmRyYWcsTWF0aC5taW4odC5tb2RlbC53aWR0aCt5Lm92ZXJkcmFnLG4uZXZlbnQueCkpLHQuY2FudmFzWD10LngqdC5tb2RlbC5jYW52YXNQaXhlbFJhdGlvLFUuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54LWUueH0pKS5lYWNoKChmdW5jdGlvbihlLHIpe2UueEluZGV4PXIsZS54PXQ9PT1lP2UueDplLnhTY2FsZShlLnhJbmRleCksZS5jYW52YXNYPWUueCplLm1vZGVsLmNhbnZhc1BpeGVsUmF0aW99KSksTyhVLGUsXyksVS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiAwIT09TWF0aC5hYnModC54SW5kZXgtZS54SW5kZXgpfSkpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBjKHQueFNjYWxlKHQueEluZGV4KSwwKX0pKSxuLnNlbGVjdCh0aGlzKS5hdHRyKCJ0cmFuc2Zvcm0iLGModC54LDApKSxVLmVhY2goKGZ1bmN0aW9uKHIsbixpKXtpPT09dC5wYXJlbnQua2V5JiYoZS5kaW1lbnNpb25zW25dPXIpfSkpLGUuY29udGV4dExheWVyJiZlLmNvbnRleHRMYXllci5yZW5kZXIoZS5wYW5lbHMsITEsIUUoZSkpLGUuZm9jdXNMYXllci5yZW5kZXImJmUuZm9jdXNMYXllci5yZW5kZXIoZS5wYW5lbHMpfSkpLm9uKCJkcmFnZW5kIiwoZnVuY3Rpb24odCl7dmFyIGU9dC5wYXJlbnQ7dC54PXQueFNjYWxlKHQueEluZGV4KSx0LmNhbnZhc1g9dC54KnQubW9kZWwuY2FudmFzUGl4ZWxSYXRpbyxPKFUsZSxfKSxuLnNlbGVjdCh0aGlzKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gYyh0LngsMCl9KSksZS5jb250ZXh0TGF5ZXImJmUuY29udGV4dExheWVyLnJlbmRlcihlLnBhbmVscywhMSwhRShlKSksZS5mb2N1c0xheWVyJiZlLmZvY3VzTGF5ZXIucmVuZGVyKGUucGFuZWxzKSxlLnBpY2tMYXllciYmZS5waWNrTGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKSxTLmxpbmVQaWNrQWN0aXZlKCEwKSxhJiZhLmF4ZXNNb3ZlZCYmYS5heGVzTW92ZWQoZS5rZXksZS5kaW1lbnNpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleH0pKSl9KSkpLFUuZXhpdCgpLnJlbW92ZSgpO3ZhciBWPVUuc2VsZWN0QWxsKCIuIit5LmNuLmF4aXNPdmVybGF5cykuZGF0YShtLGQpO1YuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHkuY24uYXhpc092ZXJsYXlzLCEwKSxWLnNlbGVjdEFsbCgiLiIreS5jbi5heGlzKS5yZW1vdmUoKTt2YXIgSD1WLnNlbGVjdEFsbCgiLiIreS5jbi5heGlzKS5kYXRhKG0sZCk7SC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoeS5jbi5heGlzLCEwKSxILmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQubW9kZWwuaGVpZ2h0L3QubW9kZWwudGlja0Rpc3RhbmNlLHI9dC5kb21haW5TY2FsZSxpPXIuZG9tYWluKCk7bi5zZWxlY3QodGhpcykuY2FsbChuLnN2Zy5heGlzKCkub3JpZW50KCJsZWZ0IikudGlja1NpemUoNCkub3V0ZXJUaWNrU2l6ZSgyKS50aWNrcyhlLHQudGlja0Zvcm1hdCkudGlja1ZhbHVlcyh0Lm9yZGluYWw/aTpudWxsKS50aWNrRm9ybWF0KChmdW5jdGlvbihlKXtyZXR1cm4gdi5pc09yZGluYWwodCk/ZTp6KHQubW9kZWwuZGltZW5zaW9uc1t0LnZpc2libGVJbmRleF0sZSl9KSkuc2NhbGUocikpLGYuZm9udChILnNlbGVjdEFsbCgidGV4dCIpLHQubW9kZWwudGlja0ZvbnQpfSkpLEguc2VsZWN0QWxsKCIuZG9tYWluLCAudGljaz5saW5lIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwuMjUpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLEguc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoInRleHQtc2hhZG93Iix1Lm1ha2VUZXh0U2hhZG93KFQpKS5zdHlsZSgiY3Vyc29yIiwiZGVmYXVsdCIpO3ZhciBxPVYuc2VsZWN0QWxsKCIuIit5LmNuLmF4aXNIZWFkaW5nKS5kYXRhKG0sZCk7cS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoeS5jbi5heGlzSGVhZGluZywhMCk7dmFyIEc9cS5zZWxlY3RBbGwoIi4iK3kuY24uYXhpc1RpdGxlKS5kYXRhKG0sZCk7Ry5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoeS5jbi5heGlzVGl0bGUsITApLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImN1cnNvciIsImV3LXJlc2l6ZSIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImF1dG8iKSxHLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxhYmVsfSkpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2YuZm9udChyLGUubW9kZWwubGFiZWxGb250KSx1LmNvbnZlcnRUb1RzcGFucyhyLHQpfSkpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPUkodC5tb2RlbC5sYWJlbEFuZ2xlLHQubW9kZWwubGFiZWxTaWRlKSxyPXkuYXhpc1RpdGxlT2Zmc2V0O3JldHVybihlLmRpcj4wPyIiOmMoMCwyKnIrdC5tb2RlbC5oZWlnaHQpKStsKGUuZGVncmVlcykrYygtciplLmR4LC1yKmUuZHkpfSkpLmF0dHIoInRleHQtYW5jaG9yIiwoZnVuY3Rpb24odCl7dmFyIGU9SSh0Lm1vZGVsLmxhYmVsQW5nbGUsdC5tb2RlbC5sYWJlbFNpZGUpO3JldHVybiAyKk1hdGguYWJzKGUuZHgpPk1hdGguYWJzKGUuZHkpP2UuZGlyKmUuZHg8MD8ic3RhcnQiOiJlbmQiOiJtaWRkbGUifSkpO3ZhciBZPVYuc2VsZWN0QWxsKCIuIit5LmNuLmF4aXNFeHRlbnQpLmRhdGEobSxkKTtZLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh5LmNuLmF4aXNFeHRlbnQsITApO3ZhciBXPVkuc2VsZWN0QWxsKCIuIit5LmNuLmF4aXNFeHRlbnRUb3ApLmRhdGEobSxkKTtXLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh5LmNuLmF4aXNFeHRlbnRUb3AsITApLFcuYXR0cigidHJhbnNmb3JtIixjKDAsLXkuYXhpc0V4dGVudE9mZnNldCkpO3ZhciBYPVcuc2VsZWN0QWxsKCIuIit5LmNuLmF4aXNFeHRlbnRUb3BUZXh0KS5kYXRhKG0sZCk7WC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoeS5jbi5heGlzRXh0ZW50VG9wVGV4dCwhMCkuY2FsbChQKSxYLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybiBEKHQsITApfSkpLmVhY2goKGZ1bmN0aW9uKHQpe2YuZm9udChuLnNlbGVjdCh0aGlzKSx0Lm1vZGVsLnJhbmdlRm9udCl9KSk7dmFyIFo9WS5zZWxlY3RBbGwoIi4iK3kuY24uYXhpc0V4dGVudEJvdHRvbSkuZGF0YShtLGQpO1ouZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHkuY24uYXhpc0V4dGVudEJvdHRvbSwhMCksWi5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gYygwLHQubW9kZWwuaGVpZ2h0K3kuYXhpc0V4dGVudE9mZnNldCl9KSk7dmFyIEo9Wi5zZWxlY3RBbGwoIi4iK3kuY24uYXhpc0V4dGVudEJvdHRvbVRleHQpLmRhdGEobSxkKTtKLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCh5LmNuLmF4aXNFeHRlbnRCb3R0b21UZXh0LCEwKS5hdHRyKCJkeSIsIjAuNzVlbSIpLmNhbGwoUCksSi50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4gRCh0LCExKX0pKS5lYWNoKChmdW5jdGlvbih0KXtmLmZvbnQobi5zZWxlY3QodGhpcyksdC5tb2RlbC5yYW5nZUZvbnQpfSkpLHguZW5zdXJlQXhpc0JydXNoKFYsVCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjUxLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9ndXAiOjc3MywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4vYXhpc2JydXNoIjoxMTU0LCIuL2NvbnN0YW50cyI6MTE1NywiLi9oZWxwZXJzIjoxMTU5LCIuL2xpbmVzIjoxMTYxLCJAcGxvdGx5L2QzIjo1OCwiY29sb3ItcmdiYSI6MTI4fV0sMTE2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3BhcmNvb3JkcyIpLGk9dCgiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCIpLGE9dCgiLi9oZWxwZXJzIikuaXNWaXNpYmxlO2Z1bmN0aW9uIG8odCxlLHIpe3ZhciBuPWUuaW5kZXhPZihyKSxpPXQuaW5kZXhPZihuKTtyZXR1cm4tMT09PWkmJihpKz1lLmxlbmd0aCksaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0O2lmKGkodCkpe3ZhciBzPXt9LGw9e30sYz17fSx1PXt9LGY9ci5fc2l6ZTtlLmZvckVhY2goKGZ1bmN0aW9uKGUscil7dmFyIG49ZVswXS50cmFjZTtjW3JdPW4uaW5kZXg7dmFyIGk9dVtyXT1uLl9mdWxsSW5wdXQuaW5kZXg7c1tyXT10LmRhdGFbaV0uZGltZW5zaW9ucyxsW3JdPXQuZGF0YVtpXS5kaW1lbnNpb25zLnNsaWNlKCl9KSk7bih0LGUse3dpZHRoOmYudyxoZWlnaHQ6Zi5oLG1hcmdpbjp7dDpmLnQscjpmLnIsYjpmLmIsbDpmLmx9fSx7ZmlsdGVyQ2hhbmdlZDpmdW5jdGlvbihlLG4saSl7dmFyIGE9bFtlXVtuXSxvPWkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpfSkpLHM9ImRpbWVuc2lvbnNbIituKyJdLmNvbnN0cmFpbnRyYW5nZSIsZj1yLl90cmFjZVByZUdVSVt0Ll9mdWxsRGF0YVtjW2VdXS5fZnVsbElucHV0LnVpZF07aWYodm9pZCAwPT09ZltzXSl7dmFyIGg9YS5jb25zdHJhaW50cmFuZ2U7ZltzXT1ofHxudWxsfXZhciBwPXQuX2Z1bGxEYXRhW2NbZV1dLmRpbWVuc2lvbnNbbl07by5sZW5ndGg/KDE9PT1vLmxlbmd0aCYmKG89b1swXSksYS5jb25zdHJhaW50cmFuZ2U9byxwLmNvbnN0cmFpbnRyYW5nZT1vLnNsaWNlKCksbz1bb10pOihkZWxldGUgYS5jb25zdHJhaW50cmFuZ2UsZGVsZXRlIHAuY29uc3RyYWludHJhbmdlLG89bnVsbCk7dmFyIGQ9e307ZFtzXT1vLHQuZW1pdCgicGxvdGx5X3Jlc3R5bGUiLFtkLFt1W2VdXV0pfSxob3ZlcjpmdW5jdGlvbihlKXt0LmVtaXQoInBsb3RseV9ob3ZlciIsZSl9LHVuaG92ZXI6ZnVuY3Rpb24oZSl7dC5lbWl0KCJwbG90bHlfdW5ob3ZlciIsZSl9LGF4ZXNNb3ZlZDpmdW5jdGlvbihlLHIpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIG8odCxlLHIpLW8odCxlLG4pfX0ocixsW2VdLmZpbHRlcihhKSk7c1tlXS5zb3J0KG4pLGxbZV0uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hYSh0KX0pKS5zb3J0KChmdW5jdGlvbih0KXtyZXR1cm4gbFtlXS5pbmRleE9mKHQpfSkpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3NbZV0uc3BsaWNlKHNbZV0uaW5kZXhPZih0KSwxKSxzW2VdLnNwbGljZShsW2VdLmluZGV4T2YodCksMCx0KX0pKSx0LmVtaXQoInBsb3RseV9yZXN0eWxlIixbe2RpbWVuc2lvbnM6W3NbZV1dfSxbdVtlXV1dKX19KX19fSx7Ii4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiOjc4OSwiLi9oZWxwZXJzIjoxMTU5LCIuL3BhcmNvb3JkcyI6MTE2M31dLDExNjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxhPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGw9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsdT1hKHtlZGl0VHlwZToicGxvdCIsYXJyYXlPazohMCxjb2xvckVkaXRUeXBlOiJwbG90In0pO2UuZXhwb3J0cz17bGFiZWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxhYmVsMDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkbGFiZWw6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1hcmtlcjp7Y29sb3JzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpvLmRlZmF1bHRMaW5lLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJwbG90In0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxzY2FsZWdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSx0ZXh0aW5mbzp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50Il0sZXh0cmFzOlsibm9uZSJdLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJpbmZvOmMoe30sbi5ob3ZlcmluZm8se2ZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50IiwibmFtZSJdfSksaG92ZXJ0ZW1wbGF0ZTpzKHt9LHtrZXlzOlsibGFiZWwiLCJjb2xvciIsInZhbHVlIiwicGVyY2VudCIsInRleHQiXX0pLHRleHR0ZW1wbGF0ZTpsKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOlsibGFiZWwiLCJjb2xvciIsInZhbHVlIiwicGVyY2VudCIsInRleHQiXX0pLHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5zaWRlIiwib3V0c2lkZSIsImF1dG8iLCJub25lIl0sZGZsdDoiYXV0byIsYXJyYXlPazohMCxlZGl0VHlwZToicGxvdCJ9LHRleHRmb250OmMoe30sdSx7fSksaW5zaWRldGV4dG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJob3Jpem9udGFsIiwicmFkaWFsIiwidGFuZ2VudGlhbCIsImF1dG8iXSxkZmx0OiJhdXRvIixlZGl0VHlwZToicGxvdCJ9LGluc2lkZXRleHRmb250OmMoe30sdSx7fSksb3V0c2lkZXRleHRmb250OmMoe30sdSx7fSksYXV0b21hcmdpbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InBsb3QifSxmb250OmMoe30sdSx7fSkscG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCBsZWZ0IiwidG9wIGNlbnRlciIsInRvcCByaWdodCIsIm1pZGRsZSBjZW50ZXIiLCJib3R0b20gbGVmdCIsImJvdHRvbSBjZW50ZXIiLCJib3R0b20gcmlnaHQiXSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sZG9tYWluOmkoe25hbWU6InBpZSIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSksaG9sZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxzb3J0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjbG9ja3dpc2UiLCJjb3VudGVyY2xvY2t3aXNlIl0sZGZsdDoiY291bnRlcmNsb2Nrd2lzZSIsZWRpdFR5cGU6ImNhbGMifSxyb3RhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46LTM2MCxtYXg6MzYwLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHB1bGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHRpdGxlZm9udDpjKHt9LHUse30pLHRpdGxlcG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCBsZWZ0IiwidG9wIGNlbnRlciIsInRvcCByaWdodCIsIm1pZGRsZSBjZW50ZXIiLCJib3R0b20gbGVmdCIsImJvdHRvbSBjZW50ZXIiLCJib3R0b20gcmlnaHQiXSxlZGl0VHlwZToiY2FsYyJ9fX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MzgsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODIzLCIuLi8uLi9wbG90cy9kb21haW4iOjg1NSwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4NTYsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OX1dLDExNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvcGxvdHMiKTtyLm5hbWU9InBpZSIsci5wbG90PWZ1bmN0aW9uKHQsZSxpLGEpe24ucGxvdEJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX0sci5jbGVhbj1mdW5jdGlvbih0LGUsaSxhKXtuLmNsZWFuQmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfX0seyIuLi8uLi9wbG90cy9wbG90cyI6ODkwfV0sMTE2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89e307ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm4hIWUmJighIShlPWkoZSkpLmlzVmFsaWQoKSYmKGU9YS5hZGRPcGFjaXR5KGUsZS5nZXRBbHBoYSgpKSx0W3JdfHwodFtyXT1lKSxlKSl9fWZ1bmN0aW9uIGwodCxlKXt2YXIgcixuPUpTT04uc3RyaW5naWZ5KHQpLGE9ZVtuXTtpZighYSl7Zm9yKGE9dC5zbGljZSgpLHI9MDtyPHQubGVuZ3RoO3IrKylhLnB1c2goaSh0W3JdKS5saWdodGVuKDIwKS50b0hleFN0cmluZygpKTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWEucHVzaChpKHRbcl0pLmRhcmtlbigyMCkudG9IZXhTdHJpbmcoKSk7ZVtuXT1hfXJldHVybiBhfWUuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe3ZhciByLGksYT1bXSxvPXQuX2Z1bGxMYXlvdXQsbD1vLmhpZGRlbmxhYmVsc3x8W10sYz1lLmxhYmVscyx1PWUubWFya2VyLmNvbG9yc3x8W10sZj1lLnZhbHVlcyxoPWUuX2xlbmd0aCxwPWUuX2hhc1ZhbHVlcyYmaDtpZihlLmRsYWJlbClmb3IoYz1uZXcgQXJyYXkoaCkscj0wO3I8aDtyKyspY1tyXT1TdHJpbmcoZS5sYWJlbDArciplLmRsYWJlbCk7dmFyIGQ9e30sbT1zKG9bIl8iK2UudHlwZSsiY29sb3JtYXAiXSksZz0wLHY9ITE7Zm9yKHI9MDtyPGg7cisrKXt2YXIgeSx4LGI7aWYocCl7aWYoeT1mW3JdLCFuKHkpKWNvbnRpbnVlO2lmKCh5PSt5KTwwKWNvbnRpbnVlfWVsc2UgeT0xO3ZvaWQgMCE9PSh4PWNbcl0pJiYiIiE9PXh8fCh4PXIpO3ZhciBfPWRbeD1TdHJpbmcoeCldO3ZvaWQgMD09PV8/KGRbeF09YS5sZW5ndGgsKGI9LTEhPT1sLmluZGV4T2YoeCkpfHwoZys9eSksYS5wdXNoKHt2OnksbGFiZWw6eCxjb2xvcjptKHVbcl0seCksaTpyLHB0czpbcl0saGlkZGVuOmJ9KSk6KHY9ITAsKGk9YVtfXSkudis9eSxpLnB0cy5wdXNoKHIpLGkuaGlkZGVufHwoZys9eSksITE9PT1pLmNvbG9yJiZ1W3JdJiYoaS5jb2xvcj1tKHVbcl0seCkpKX1yZXR1cm4oImZ1bm5lbGFyZWEiPT09ZS50eXBlP3Y6ZS5zb3J0KSYmYS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLnYtdC52fSkpLGFbMF0mJihhWzBdLnZUb3RhbD1nKSxhfSxjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0LGUpe3ZhciByPShlfHx7fSkudHlwZTtyfHwocj0icGllIik7dmFyIG49dC5fZnVsbExheW91dCxpPXQuY2FsY2RhdGEsYT1uW3IrImNvbG9yd2F5Il0scz1uWyJfIityKyJjb2xvcm1hcCJdO25bImV4dGVuZCIrcisiY29sb3JzIl0mJihhPWwoYSxvKSk7Zm9yKHZhciBjPTAsdT0wO3U8aS5sZW5ndGg7dSsrKXt2YXIgZj1pW3VdO2lmKGZbMF0udHJhY2UudHlwZT09PXIpZm9yKHZhciBoPTA7aDxmLmxlbmd0aDtoKyspe3ZhciBwPWZbaF07ITE9PT1wLmNvbG9yJiYoc1twLmxhYmVsXT9wLmNvbG9yPXNbcC5sYWJlbF06KHNbcC5sYWJlbF09cC5jb2xvcj1hW2MlYS5sZW5ndGhdLGMrKykpfX19LG1ha2VQdWxsQ29sb3JGbjpzLGdlbmVyYXRlRXh0ZW5kZWRDb2xvcnM6bH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCJmYXN0LWlzbnVtZXJpYyI6MjQyLHRpbnljb2xvcjI6NTcyfV0sMTE2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLHM9dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlVGV4dDtmdW5jdGlvbiBsKHQsZSl7dmFyIHI9QXJyYXkuaXNBcnJheSh0KSxhPWkuaXNBcnJheU9yVHlwZWRBcnJheShlKSxvPU1hdGgubWluKHI/dC5sZW5ndGg6MS8wLGE/ZS5sZW5ndGg6MS8wKTtpZihpc0Zpbml0ZShvKXx8KG89MCksbyYmYSl7Zm9yKHZhciBzLGw9MDtsPG87bCsrKXt2YXIgYz1lW2xdO2lmKG4oYykmJmM+MCl7cz0hMDticmVha319c3x8KG89MCl9cmV0dXJue2hhc0xhYmVsczpyLGhhc1ZhbHVlczphLGxlbjpvfX1lLmV4cG9ydHM9e2hhbmRsZUxhYmVsc0FuZFZhbHVlczpsLHN1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLG4pe2Z1bmN0aW9uIGMocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLGEscixuKX12YXIgdT1sKGMoImxhYmVscyIpLGMoInZhbHVlcyIpKSxmPXUubGVuO2lmKGUuX2hhc0xhYmVscz11Lmhhc0xhYmVscyxlLl9oYXNWYWx1ZXM9dS5oYXNWYWx1ZXMsIWUuX2hhc0xhYmVscyYmZS5faGFzVmFsdWVzJiYoYygibGFiZWwwIiksYygiZGxhYmVsIikpLGYpe2UuX2xlbmd0aD1mLGMoIm1hcmtlci5saW5lLndpZHRoIikmJmMoIm1hcmtlci5saW5lLmNvbG9yIiksYygibWFya2VyLmNvbG9ycyIpLGMoInNjYWxlZ3JvdXAiKTt2YXIgaCxwPWMoInRleHQiKSxkPWMoInRleHR0ZW1wbGF0ZSIpO2lmKGR8fChoPWMoInRleHRpbmZvIixBcnJheS5pc0FycmF5KHApPyJ0ZXh0K3BlcmNlbnQiOiJwZXJjZW50IikpLGMoImhvdmVydGV4dCIpLGMoImhvdmVydGVtcGxhdGUiKSxkfHxoJiYibm9uZSIhPT1oKXt2YXIgbT1jKCJ0ZXh0cG9zaXRpb24iKTtzKHQsZSxuLGMsbSx7bW9kdWxlSGFzU2VsZWN0ZWQ6ITEsbW9kdWxlSGFzVW5zZWxlY3RlZDohMSxtb2R1bGVIYXNDb25zdHJhaW46ITEsbW9kdWxlSGFzQ2xpcG9uYXhpczohMSxtb2R1bGVIYXNUZXh0YW5nbGU6ITEsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiExfSksKEFycmF5LmlzQXJyYXkobSl8fCJhdXRvIj09PW18fCJvdXRzaWRlIj09PW0pJiZjKCJhdXRvbWFyZ2luIiksKCJpbnNpZGUiPT09bXx8ImF1dG8iPT09bXx8QXJyYXkuaXNBcnJheShtKSkmJmMoImluc2lkZXRleHRvcmllbnRhdGlvbiIpfW8oZSxuLGMpO3ZhciBnPWMoImhvbGUiKTtpZihjKCJ0aXRsZS50ZXh0Iikpe3ZhciB2PWMoInRpdGxlLnBvc2l0aW9uIixnPyJtaWRkbGUgY2VudGVyIjoidG9wIGNlbnRlciIpO2d8fCJtaWRkbGUgY2VudGVyIiE9PXZ8fChlLnRpdGxlLnBvc2l0aW9uPSJ0b3AgY2VudGVyIiksaS5jb2VyY2VGb250KGMsInRpdGxlLmZvbnQiLG4uZm9udCl9Yygic29ydCIpLGMoImRpcmVjdGlvbiIpLGMoInJvdGF0aW9uIiksYygicHVsbCIpfWVsc2UgZS52aXNpYmxlPSExfX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuLi9iYXIvZGVmYXVsdHMiOjkxOCwiLi9hdHRyaWJ1dGVzIjoxMTY1LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sMTE2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheU11bHRpUG9pbnRWYWx1ZXM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e2N1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXJzOnQucHRzLGRhdGE6ZS5faW5wdXQsZnVsbERhdGE6ZSxsYWJlbDp0LmxhYmVsLGNvbG9yOnQuY29sb3IsdmFsdWU6dC52LHBlcmNlbnQ6dC5wZXJjZW50LHRleHQ6dC50ZXh0LGJib3g6dC5iYm94LHY6dC52fTtyZXR1cm4gMT09PXQucHRzLmxlbmd0aCYmKHIucG9pbnROdW1iZXI9ci5pPXQucHRzWzBdKSxuKHIsZSx0LnB0cyksImZ1bm5lbGFyZWEiPT09ZS50eXBlJiYoZGVsZXRlIHIudixkZWxldGUgci5pKSxyfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjY3NX1dLDExNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gaSh0KXtyZXR1cm4tMSE9PXQuaW5kZXhPZigiZSIpP3QucmVwbGFjZSgvWy5dPzArZS8sImUiKTotMSE9PXQuaW5kZXhPZigiLiIpP3QucmVwbGFjZSgvWy5dPzArJC8sIiIpOnR9ci5mb3JtYXRQaWVQZXJjZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9aSgoMTAwKnQpLnRvUHJlY2lzaW9uKDMpKTtyZXR1cm4gbi5udW1TZXBhcmF0ZShyLGUpKyIlIn0sci5mb3JtYXRQaWVWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciByPWkodC50b1ByZWNpc2lvbigxMCkpO3JldHVybiBuLm51bVNlcGFyYXRlKHIsZSl9LHIuZ2V0Rmlyc3RGaWxsZWQ9ZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj10W2Vbcl1dO2lmKG58fDA9PT1ufHwiIj09PW4pcmV0dXJuIG59fSxyLmNhc3RPcHRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9yLmdldEZpcnN0RmlsbGVkKHQsZSk6dHx8dm9pZCAwfSxyLmdldFJvdGF0aW9uQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuKCJhdXRvIj09PXQ/MDp0KSpNYXRoLlBJLzE4MH19LHsiLi4vLi4vbGliIjo3NzZ9XSwxMTcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dCgiLi9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuL3Bsb3QiKS5wbG90LHN0eWxlOnQoIi4vc3R5bGUiKSxzdHlsZU9uZTp0KCIuL3N0eWxlX29uZSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJwaWUiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbInBpZS1saWtlIiwicGllIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4vYXR0cmlidXRlcyI6MTE2NSwiLi9iYXNlX3Bsb3QiOjExNjYsIi4vY2FsYyI6MTE2NywiLi9kZWZhdWx0cyI6MTE2OCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTE3MiwiLi9sYXlvdXRfZGVmYXVsdHMiOjExNzMsIi4vcGxvdCI6MTE3NCwiLi9zdHlsZSI6MTE3NSwiLi9zdHlsZV9vbmUiOjExNzZ9XSwxMTcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aGlkZGVubGFiZWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHBpZWNvbG9yd2F5Ont2YWxUeXBlOiJjb2xvcmxpc3QiLGVkaXRUeXBlOiJjYWxjIn0sZXh0ZW5kcGllY29sb3JzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sMTE3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9cigiaGlkZGVubGFiZWxzIikscigicGllY29sb3J3YXkiLGUuY29sb3J3YXkpLHIoImV4dGVuZHBpZWNvbG9ycyIpfX0seyIuLi8uLi9saWIiOjc3NiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTE3Mn1dLDExNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9dCgiLi4vLi4vbGliIiksYz1sLnN0clNjYWxlLHU9bC5zdHJUcmFuc2xhdGUsZj10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxoPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKSxwPWgucmVjb3JkTWluVGV4dFNpemUsZD1oLmNsZWFyTWluVGV4dFNpemUsbT10KCIuLi9iYXIvY29uc3RhbnRzIikuVEVYVFBBRCxnPXQoIi4vaGVscGVycyIpLHY9dCgiLi9ldmVudF9kYXRhIikseT10KCIuLi8uLi9saWIiKS5pc1ZhbGlkVGV4dFZhbHVlO2Z1bmN0aW9uIHgodCxlLHIpe3ZhciBpPXJbMF0sbz1pLmN4LHM9aS5jeSxjPWkudHJhY2UsdT0iZnVubmVsYXJlYSI9PT1jLnR5cGU7Il9oYXNIb3ZlckxhYmVsImluIGN8fChjLl9oYXNIb3ZlckxhYmVsPSExKSwiX2hhc0hvdmVyRXZlbnQiaW4gY3x8KGMuX2hhc0hvdmVyRXZlbnQ9ITEpLHQub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsZj1lLl9mdWxsRGF0YVtjLmluZGV4XTtpZighZS5fZHJhZ2dpbmcmJiExIT09ci5ob3Zlcm1vZGUpe3ZhciBoPWYuaG92ZXJpbmZvO2lmKEFycmF5LmlzQXJyYXkoaCkmJihoPWEuY2FzdEhvdmVyaW5mbyh7aG92ZXJpbmZvOltnLmNhc3RPcHRpb24oaCx0LnB0cyldLF9tb2R1bGU6Yy5fbW9kdWxlfSxyLDApKSwiYWxsIj09PWgmJihoPSJsYWJlbCt0ZXh0K3ZhbHVlK3BlcmNlbnQrbmFtZSIpLGYuaG92ZXJ0ZW1wbGF0ZXx8Im5vbmUiIT09aCYmInNraXAiIT09aCYmaCl7dmFyIHA9dC5ySW5zY3JpYmVkfHwwLGQ9byt0LnB4bWlkWzBdKigxLXApLG09cyt0LnB4bWlkWzFdKigxLXApLHk9ci5zZXBhcmF0b3JzLHg9W107aWYoaCYmLTEhPT1oLmluZGV4T2YoImxhYmVsIikmJngucHVzaCh0LmxhYmVsKSx0LnRleHQ9Zy5jYXN0T3B0aW9uKGYuaG92ZXJ0ZXh0fHxmLnRleHQsdC5wdHMpLGgmJi0xIT09aC5pbmRleE9mKCJ0ZXh0Iikpe3ZhciBiPXQudGV4dDtsLmlzVmFsaWRUZXh0VmFsdWUoYikmJngucHVzaChiKX10LnZhbHVlPXQudix0LnZhbHVlTGFiZWw9Zy5mb3JtYXRQaWVWYWx1ZSh0LnYseSksaCYmLTEhPT1oLmluZGV4T2YoInZhbHVlIikmJngucHVzaCh0LnZhbHVlTGFiZWwpLHQucGVyY2VudD10LnYvaS52VG90YWwsdC5wZXJjZW50TGFiZWw9Zy5mb3JtYXRQaWVQZXJjZW50KHQucGVyY2VudCx5KSxoJiYtMSE9PWguaW5kZXhPZigicGVyY2VudCIpJiZ4LnB1c2godC5wZXJjZW50TGFiZWwpO3ZhciBfPWYuaG92ZXJsYWJlbCx3PV8uZm9udCxUPVtdO2EubG9uZUhvdmVyKHt0cmFjZTpjLHgwOmQtcCppLnIseDE6ZCtwKmkucix5Om0sX3gwOnU/byt0LlRMWzBdOmQtcCppLnIsX3gxOnU/byt0LlRSWzBdOmQrcCppLnIsX3kwOnU/cyt0LlRMWzFdOm0tcCppLnIsX3kxOnU/cyt0LkJMWzFdOm0rcCppLnIsdGV4dDp4LmpvaW4oIjxicj4iKSxuYW1lOmYuaG92ZXJ0ZW1wbGF0ZXx8LTEhPT1oLmluZGV4T2YoIm5hbWUiKT9mLm5hbWU6dm9pZCAwLGlkZWFsQWxpZ246dC5weG1pZFswXTwwPyJsZWZ0IjoicmlnaHQiLGNvbG9yOmcuY2FzdE9wdGlvbihfLmJnY29sb3IsdC5wdHMpfHx0LmNvbG9yLGJvcmRlckNvbG9yOmcuY2FzdE9wdGlvbihfLmJvcmRlcmNvbG9yLHQucHRzKSxmb250RmFtaWx5OmcuY2FzdE9wdGlvbih3LmZhbWlseSx0LnB0cyksZm9udFNpemU6Zy5jYXN0T3B0aW9uKHcuc2l6ZSx0LnB0cyksZm9udENvbG9yOmcuY2FzdE9wdGlvbih3LmNvbG9yLHQucHRzKSxuYW1lTGVuZ3RoOmcuY2FzdE9wdGlvbihfLm5hbWVsZW5ndGgsdC5wdHMpLHRleHRBbGlnbjpnLmNhc3RPcHRpb24oXy5hbGlnbix0LnB0cyksaG92ZXJ0ZW1wbGF0ZTpnLmNhc3RPcHRpb24oZi5ob3ZlcnRlbXBsYXRlLHQucHRzKSxob3ZlcnRlbXBsYXRlTGFiZWxzOnQsZXZlbnREYXRhOlt2KHQsZildfSx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDplLGluT3V0X2Jib3g6VH0pLHQuYmJveD1UWzBdLGMuX2hhc0hvdmVyTGFiZWw9ITB9Yy5faGFzSG92ZXJFdmVudD0hMCxlLmVtaXQoInBsb3RseV9ob3ZlciIse3BvaW50czpbdih0LGYpXSxldmVudDpuLmV2ZW50fSl9fSkpLHQub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24odCl7dmFyIHI9ZS5fZnVsbExheW91dCxpPWUuX2Z1bGxEYXRhW2MuaW5kZXhdLG89bi5zZWxlY3QodGhpcykuZGF0dW0oKTtjLl9oYXNIb3ZlckV2ZW50JiYodC5vcmlnaW5hbEV2ZW50PW4uZXZlbnQsZS5lbWl0KCJwbG90bHlfdW5ob3ZlciIse3BvaW50czpbdihvLGkpXSxldmVudDpuLmV2ZW50fSksYy5faGFzSG92ZXJFdmVudD0hMSksYy5faGFzSG92ZXJMYWJlbCYmKGEubG9uZVVuaG92ZXIoci5faG92ZXJsYXllci5ub2RlKCkpLGMuX2hhc0hvdmVyTGFiZWw9ITEpfSkpLHQub24oImNsaWNrIiwoZnVuY3Rpb24odCl7dmFyIHI9ZS5fZnVsbExheW91dCxpPWUuX2Z1bGxEYXRhW2MuaW5kZXhdO2UuX2RyYWdnaW5nfHwhMT09PXIuaG92ZXJtb2RlfHwoZS5faG92ZXJkYXRhPVt2KHQsaSldLGEuY2xpY2soZSxuLmV2ZW50KSl9KSl9ZnVuY3Rpb24gYih0LGUscil7dmFyIG49Zy5jYXN0T3B0aW9uKHQuaW5zaWRldGV4dGZvbnQuY29sb3IsZS5wdHMpOyFuJiZ0Ll9pbnB1dC50ZXh0Zm9udCYmKG49Zy5jYXN0T3B0aW9uKHQuX2lucHV0LnRleHRmb250LmNvbG9yLGUucHRzKSk7dmFyIGk9Zy5jYXN0T3B0aW9uKHQuaW5zaWRldGV4dGZvbnQuZmFtaWx5LGUucHRzKXx8Zy5jYXN0T3B0aW9uKHQudGV4dGZvbnQuZmFtaWx5LGUucHRzKXx8ci5mYW1pbHksYT1nLmNhc3RPcHRpb24odC5pbnNpZGV0ZXh0Zm9udC5zaXplLGUucHRzKXx8Zy5jYXN0T3B0aW9uKHQudGV4dGZvbnQuc2l6ZSxlLnB0cyl8fHIuc2l6ZTtyZXR1cm57Y29sb3I6bnx8by5jb250cmFzdChlLmNvbG9yKSxmYW1pbHk6aSxzaXplOmF9fWZ1bmN0aW9uIF8odCxlKXtmb3IodmFyIHIsbixpPTA7aTx0Lmxlbmd0aDtpKyspaWYoKG49KHI9dFtpXVswXSkudHJhY2UpLnRpdGxlLnRleHQpe3ZhciBhPW4udGl0bGUudGV4dDtuLl9tZXRhJiYoYT1sLnRlbXBsYXRlU3RyaW5nKGEsbi5fbWV0YSkpO3ZhciBvPXMudGVzdGVyLmFwcGVuZCgidGV4dCIpLmF0dHIoImRhdGEtbm90ZXgiLDEpLnRleHQoYSkuY2FsbChzLmZvbnQsbi50aXRsZS5mb250KS5jYWxsKGYuY29udmVydFRvVHNwYW5zLGUpLGM9cy5iQm94KG8ubm9kZSgpLCEwKTtyLnRpdGxlQm94PXt3aWR0aDpjLndpZHRoLGhlaWdodDpjLmhlaWdodH0sby5yZW1vdmUoKX19ZnVuY3Rpb24gdyh0LGUscil7dmFyIG49ci5yfHxlLnJweDEsaT1lLnJJbnNjcmliZWQ7aWYoZS5zdGFydGFuZ2xlPT09ZS5zdG9wYW5nbGUpcmV0dXJue3JDZW50ZXI6MS1pLHNjYWxlOjAscm90YXRlOjAsdGV4dFBvc0FuZ2xlOjB9O3ZhciBhLG89ZS5yaW5nLHM9MT09PW8mJk1hdGguYWJzKGUuc3RhcnRhbmdsZS1lLnN0b3BhbmdsZSk9PT0yKk1hdGguUEksbD1lLmhhbGZhbmdsZSxjPWUubWlkYW5nbGUsdT1yLnRyYWNlLmluc2lkZXRleHRvcmllbnRhdGlvbixmPSJob3Jpem9udGFsIj09PXUsaD0idGFuZ2VudGlhbCI9PT11LHA9InJhZGlhbCI9PT11LGQ9ImF1dG8iPT09dSxtPVtdO2lmKCFkKXt2YXIgZyx2PWZ1bmN0aW9uKHIsaSl7aWYoZnVuY3Rpb24odCxlKXt2YXIgcj10LnN0YXJ0YW5nbGUsbj10LnN0b3BhbmdsZTtyZXR1cm4gcj5lJiZlPm58fHI8ZSYmZTxufShlLHIpKXt2YXIgcz1NYXRoLmFicyhyLWUuc3RhcnRhbmdsZSksbD1NYXRoLmFicyhyLWUuc3RvcGFuZ2xlKSxjPXM8bD9zOmw7KGE9InRhbiI9PT1pP2sodCxuLG8sYywwKTpUKHQsbixvLGMsTWF0aC5QSS8yKSkudGV4dFBvc0FuZ2xlPXIsbS5wdXNoKGEpfX07aWYoZnx8aCl7Zm9yKGc9NDtnPj0tNDtnLT0yKXYoTWF0aC5QSSpnLCJ0YW4iKTtmb3IoZz00O2c+PS00O2ctPTIpdihNYXRoLlBJKihnKzEpLCJ0YW4iKX1pZihmfHxwKXtmb3IoZz00O2c+PS00O2ctPTIpdihNYXRoLlBJKihnKzEuNSksInJhZCIpO2ZvcihnPTQ7Zz49LTQ7Zy09Mil2KE1hdGguUEkqKGcrLjUpLCJyYWQiKX19aWYoc3x8ZHx8Zil7dmFyIHk9TWF0aC5zcXJ0KHQud2lkdGgqdC53aWR0aCt0LmhlaWdodCp0LmhlaWdodCk7aWYoKGE9e3NjYWxlOmkqbioyL3ksckNlbnRlcjoxLWkscm90YXRlOjB9KS50ZXh0UG9zQW5nbGU9KGUuc3RhcnRhbmdsZStlLnN0b3BhbmdsZSkvMixhLnNjYWxlPj0xKXJldHVybiBhO20ucHVzaChhKX0oZHx8cCkmJigoYT1UKHQsbixvLGwsYykpLnRleHRQb3NBbmdsZT0oZS5zdGFydGFuZ2xlK2Uuc3RvcGFuZ2xlKS8yLG0ucHVzaChhKSksKGR8fGgpJiYoKGE9ayh0LG4sbyxsLGMpKS50ZXh0UG9zQW5nbGU9KGUuc3RhcnRhbmdsZStlLnN0b3BhbmdsZSkvMixtLnB1c2goYSkpO2Zvcih2YXIgeD0wLGI9MCxfPTA7XzxtLmxlbmd0aDtfKyspe3ZhciB3PW1bX10uc2NhbGU7aWYoYjx3JiYoYj13LHg9XyksIWQmJmI+PTEpYnJlYWt9cmV0dXJuIG1beF19ZnVuY3Rpb24gVCh0LGUscixuLGkpe2U9TWF0aC5tYXgoMCxlLTIqbSk7dmFyIGE9dC53aWR0aC90LmhlaWdodCxvPVMoYSxuLGUscik7cmV0dXJue3NjYWxlOjIqby90LmhlaWdodCxyQ2VudGVyOkEoYSxvL2UpLHJvdGF0ZTpNKGkpfX1mdW5jdGlvbiBrKHQsZSxyLG4saSl7ZT1NYXRoLm1heCgwLGUtMiptKTt2YXIgYT10LmhlaWdodC90LndpZHRoLG89UyhhLG4sZSxyKTtyZXR1cm57c2NhbGU6MipvL3Qud2lkdGgsckNlbnRlcjpBKGEsby9lKSxyb3RhdGU6TShpK01hdGguUEkvMil9fWZ1bmN0aW9uIEEodCxlKXtyZXR1cm4gTWF0aC5jb3MoZSktdCplfWZ1bmN0aW9uIE0odCl7cmV0dXJuKDE4MC9NYXRoLlBJKnQrNzIwKSUxODAtOTB9ZnVuY3Rpb24gUyh0LGUscixuKXt2YXIgaT10KzEvKDIqTWF0aC50YW4oZSkpO3JldHVybiByKk1hdGgubWluKDEvKE1hdGguc3FydChpKmkrLjUpK2kpLG4vKE1hdGguc3FydCh0KnQrbi8yKSt0KSl9ZnVuY3Rpb24gRSh0LGUpe3JldHVybiB0LnYhPT1lLnZUb3RhbHx8ZS50cmFjZS5ob2xlP01hdGgubWluKDEvKDErMS9NYXRoLnNpbih0LmhhbGZhbmdsZSkpLHQucmluZy8yKToxfWZ1bmN0aW9uIEwodCxlKXt2YXIgcj1lLnB4bWlkWzBdLG49ZS5weG1pZFsxXSxpPXQud2lkdGgvMixhPXQuaGVpZ2h0LzI7cmV0dXJuIHI8MCYmKGkqPS0xKSxuPDAmJihhKj0tMSkse3NjYWxlOjEsckNlbnRlcjoxLHJvdGF0ZTowLHg6aStNYXRoLmFicyhhKSooaT4wPzE6LTEpLzIseTphLygxK3Iqci8obipuKSksb3V0c2lkZTohMH19ZnVuY3Rpb24gQyh0LGUpe3ZhciByLG4saSxhPXQudHJhY2Usbz17eDp0LmN4LHk6dC5jeX0scz17dHg6MCx0eTowfTtzLnR5Kz1hLnRpdGxlLmZvbnQuc2l6ZSxpPUkoYSksLTEhPT1hLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoInRvcCIpPyhvLnktPSgxK2kpKnQucixzLnR5LT10LnRpdGxlQm94LmhlaWdodCk6LTEhPT1hLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoImJvdHRvbSIpJiYoby55Kz0oMStpKSp0LnIpO3ZhciBsLGMsdT0obD10LnIsYz10LnRyYWNlLmFzcGVjdHJhdGlvLGwvKHZvaWQgMD09PWM/MTpjKSksZj1lLncqKGEuZG9tYWluLnhbMV0tYS5kb21haW4ueFswXSkvMjtyZXR1cm4tMSE9PWEudGl0bGUucG9zaXRpb24uaW5kZXhPZigibGVmdCIpPyhmKz11LG8ueC09KDEraSkqdSxzLnR4Kz10LnRpdGxlQm94LndpZHRoLzIpOi0xIT09YS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJjZW50ZXIiKT9mKj0yOi0xIT09YS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJyaWdodCIpJiYoZis9dSxvLngrPSgxK2kpKnUscy50eC09dC50aXRsZUJveC53aWR0aC8yKSxyPWYvdC50aXRsZUJveC53aWR0aCxuPVAodCxlKS90LnRpdGxlQm94LmhlaWdodCx7eDpvLngseTpvLnksc2NhbGU6TWF0aC5taW4ocixuKSx0eDpzLnR4LHR5OnMudHl9fWZ1bmN0aW9uIFAodCxlKXt2YXIgcj10LnRyYWNlLG49ZS5oKihyLmRvbWFpbi55WzFdLXIuZG9tYWluLnlbMF0pO3JldHVybiBNYXRoLm1pbih0LnRpdGxlQm94LmhlaWdodCxuLzIpfWZ1bmN0aW9uIEkodCl7dmFyIGUscj10LnB1bGw7aWYoIXIpcmV0dXJuIDA7aWYoQXJyYXkuaXNBcnJheShyKSlmb3Iocj0wLGU9MDtlPHQucHVsbC5sZW5ndGg7ZSsrKXQucHVsbFtlXT5yJiYocj10LnB1bGxbZV0pO3JldHVybiByfWZ1bmN0aW9uIE8odCxlKXtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dWzBdLGE9aS50cmFjZSxvPWEuZG9tYWluLHM9ZS53KihvLnhbMV0tby54WzBdKSxsPWUuaCooby55WzFdLW8ueVswXSk7YS50aXRsZS50ZXh0JiYibWlkZGxlIGNlbnRlciIhPT1hLnRpdGxlLnBvc2l0aW9uJiYobC09UChpLGUpKTt2YXIgYz1zLzIsdT1sLzI7ImZ1bm5lbGFyZWEiIT09YS50eXBlfHxhLnNjYWxlZ3JvdXB8fCh1Lz1hLmFzcGVjdHJhdGlvKSxpLnI9TWF0aC5taW4oYyx1KS8oMStJKGEpKSxpLmN4PWUubCtlLncqKGEuZG9tYWluLnhbMV0rYS5kb21haW4ueFswXSkvMixpLmN5PWUudCtlLmgqKDEtYS5kb21haW4ueVswXSktbC8yLGEudGl0bGUudGV4dCYmLTEhPT1hLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoImJvdHRvbSIpJiYoaS5jeS09UChpLGUpKSxhLnNjYWxlZ3JvdXAmJi0xPT09ci5pbmRleE9mKGEuc2NhbGVncm91cCkmJnIucHVzaChhLnNjYWxlZ3JvdXApfSFmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGksYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz0xLzAscz1lW2FdO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspaWYocj10W25dWzBdLChpPXIudHJhY2UpLnNjYWxlZ3JvdXA9PT1zKXt2YXIgbDtpZigicGllIj09PWkudHlwZSlsPXIucipyLnI7ZWxzZSBpZigiZnVubmVsYXJlYSI9PT1pLnR5cGUpe3ZhciBjLHU7aS5hc3BlY3RyYXRpbz4xPyhjPXIucix1PWMvaS5hc3BlY3RyYXRpbyk6KHU9ci5yLGM9dSppLmFzcGVjdHJhdGlvKSxjKj0oMStpLmJhc2VyYXRpbykvMixsPWMqdX1vPU1hdGgubWluKG8sbC9yLnZUb3RhbCl9Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZihyPXRbbl1bMF0sKGk9ci50cmFjZSkuc2NhbGVncm91cD09PXMpe3ZhciBmPW8qci52VG90YWw7ImZ1bm5lbGFyZWEiPT09aS50eXBlJiYoZi89KDEraS5iYXNlcmF0aW8pLzIsZi89aS5hc3BlY3RyYXRpbyksci5yPU1hdGguc3FydChmKX19fSh0LHIpfWZ1bmN0aW9uIHoodCxlKXtyZXR1cm5bdCpNYXRoLnNpbihlKSwtdCpNYXRoLmNvcyhlKV19ZnVuY3Rpb24gRCh0LGUscil7dmFyIG49dC5fZnVsbExheW91dCxpPXIudHJhY2UsYT1pLnRleHR0ZW1wbGF0ZSxvPWkudGV4dGluZm87aWYoIWEmJm8mJiJub25lIiE9PW8pe3ZhciBzLGM9by5zcGxpdCgiKyIpLHU9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1jLmluZGV4T2YodCl9LGY9dSgibGFiZWwiKSxoPXUoInRleHQiKSxwPXUoInZhbHVlIiksZD11KCJwZXJjZW50IiksbT1uLnNlcGFyYXRvcnM7aWYocz1mP1tlLmxhYmVsXTpbXSxoKXt2YXIgdj1nLmdldEZpcnN0RmlsbGVkKGkudGV4dCxlLnB0cyk7eSh2KSYmcy5wdXNoKHYpfXAmJnMucHVzaChnLmZvcm1hdFBpZVZhbHVlKGUudixtKSksZCYmcy5wdXNoKGcuZm9ybWF0UGllUGVyY2VudChlLnYvci52VG90YWwsbSkpLGUudGV4dD1zLmpvaW4oIjxicj4iKX1pZihhKXt2YXIgeD1sLmNhc3RPcHRpb24oaSxlLmksInRleHR0ZW1wbGF0ZSIpO2lmKHgpe3ZhciBiPWZ1bmN0aW9uKHQpe3JldHVybntsYWJlbDp0LmxhYmVsLHZhbHVlOnQudix2YWx1ZUxhYmVsOmcuZm9ybWF0UGllVmFsdWUodC52LG4uc2VwYXJhdG9ycykscGVyY2VudDp0LnYvci52VG90YWwscGVyY2VudExhYmVsOmcuZm9ybWF0UGllUGVyY2VudCh0LnYvci52VG90YWwsbi5zZXBhcmF0b3JzKSxjb2xvcjp0LmNvbG9yLHRleHQ6dC50ZXh0LGN1c3RvbWRhdGE6bC5jYXN0T3B0aW9uKGksdC5pLCJjdXN0b21kYXRhIil9fShlKSxfPWcuZ2V0Rmlyc3RGaWxsZWQoaS50ZXh0LGUucHRzKTsoeShfKXx8IiI9PT1fKSYmKGIudGV4dD1fKSxlLnRleHQ9bC50ZXh0dGVtcGxhdGVTdHJpbmcoeCxiLHQuX2Z1bGxMYXlvdXQuX2QzbG9jYWxlLGIsaS5fbWV0YXx8e30pfWVsc2UgZS50ZXh0PSIifX1mdW5jdGlvbiBSKHQsZSl7dmFyIHI9dC5yb3RhdGUqTWF0aC5QSS8xODAsbj1NYXRoLmNvcyhyKSxpPU1hdGguc2luKHIpLGE9KGUubGVmdCtlLnJpZ2h0KS8yLG89KGUudG9wK2UuYm90dG9tKS8yO3QudGV4dFg9YSpuLW8qaSx0LnRleHRZPWEqaStvKm4sdC5ub0NlbnRlcj0hMH1lLmV4cG9ydHM9e3Bsb3Q6ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGE9ci5fc2l6ZTtkKCJwaWUiLHIpLF8oZSx0KSxPKGUsYSk7dmFyIGg9bC5tYWtlVHJhY2VHcm91cHMoci5fcGllbGF5ZXIsZSwidHJhY2UiKS5lYWNoKChmdW5jdGlvbihlKXt2YXIgaD1uLnNlbGVjdCh0aGlzKSxkPWVbMF0sbT1kLnRyYWNlOyFmdW5jdGlvbih0KXt2YXIgZSxyLG4saT10WzBdLGE9aS5yLG89aS50cmFjZSxzPWcuZ2V0Um90YXRpb25BbmdsZShvLnJvdGF0aW9uKSxsPTIqTWF0aC5QSS9pLnZUb3RhbCxjPSJweDAiLHU9InB4MSI7aWYoImNvdW50ZXJjbG9ja3dpc2UiPT09by5kaXJlY3Rpb24pe2ZvcihlPTA7ZTx0Lmxlbmd0aCYmdFtlXS5oaWRkZW47ZSsrKTtpZihlPT09dC5sZW5ndGgpcmV0dXJuO3MrPWwqdFtlXS52LGwqPS0xLGM9InB4MSIsdT0icHgwIn1mb3Iobj16KGEscyksZT0wO2U8dC5sZW5ndGg7ZSsrKShyPXRbZV0pLmhpZGRlbnx8KHJbY109bixyLnN0YXJ0YW5nbGU9cyxzKz1sKnIudi8yLHIucHhtaWQ9eihhLHMpLHIubWlkYW5nbGU9cyxzKz1sKnIudi8yLG49eihhLHMpLHIuc3RvcGFuZ2xlPXMsclt1XT1uLHIubGFyZ2VBcmM9ci52PmkudlRvdGFsLzI/MTowLHIuaGFsZmFuZ2xlPU1hdGguUEkqTWF0aC5taW4oci52L2kudlRvdGFsLC41KSxyLnJpbmc9MS1vLmhvbGUsci5ySW5zY3JpYmVkPUUocixpKSl9KGUpLGguYXR0cigic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKSxoLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHY9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnNsaWNlIikuZGF0YShlKTt2LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2xpY2UiLCEwKSx2LmV4aXQoKS5yZW1vdmUoKTt2YXIgeT1bW1tdLFtdXSxbW10sW11dXSxfPSExO3YuZWFjaCgoZnVuY3Rpb24oaSxhKXtpZihpLmhpZGRlbiluLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgsZyIpLnJlbW92ZSgpO2Vsc2V7aS5wb2ludE51bWJlcj1pLmksaS5jdXJ2ZU51bWJlcj1tLmluZGV4LHlbaS5weG1pZFsxXTwwPzA6MV1baS5weG1pZFswXTwwPzA6MV0ucHVzaChpKTt2YXIgbz1kLmN4LGM9ZC5jeSx1PW4uc2VsZWN0KHRoaXMpLGg9dS5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmRhdGEoW2ldKTtpZihoLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgic3VyZmFjZSIsITApLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJhbGwifSksdS5jYWxsKHgsdCxlKSxtLnB1bGwpe3ZhciB2PStnLmNhc3RPcHRpb24obS5wdWxsLGkucHRzKXx8MDt2PjAmJihvKz12KmkucHhtaWRbMF0sYys9dippLnB4bWlkWzFdKX1pLmN4RmluYWw9byxpLmN5RmluYWw9Yzt2YXIgVD1tLmhvbGU7aWYoaS52PT09ZC52VG90YWwpe3ZhciBrPSJNIisobytpLnB4MFswXSkrIiwiKyhjK2kucHgwWzFdKStDKGkucHgwLGkucHhtaWQsITAsMSkrQyhpLnB4bWlkLGkucHgwLCEwLDEpKyJaIjtUP2guYXR0cigiZCIsIk0iKyhvK1QqaS5weDBbMF0pKyIsIisoYytUKmkucHgwWzFdKStDKGkucHgwLGkucHhtaWQsITEsVCkrQyhpLnB4bWlkLGkucHgwLCExLFQpKyJaIitrKTpoLmF0dHIoImQiLGspfWVsc2V7dmFyIEE9QyhpLnB4MCxpLnB4MSwhMCwxKTtpZihUKXt2YXIgTT0xLVQ7aC5hdHRyKCJkIiwiTSIrKG8rVCppLnB4MVswXSkrIiwiKyhjK1QqaS5weDFbMV0pK0MoaS5weDEsaS5weDAsITEsVCkrImwiK00qaS5weDBbMF0rIiwiK00qaS5weDBbMV0rQSsiWiIpfWVsc2UgaC5hdHRyKCJkIiwiTSIrbysiLCIrYysibCIraS5weDBbMF0rIiwiK2kucHgwWzFdK0ErIloiKX1EKHQsaSxkKTt2YXIgUz1nLmNhc3RPcHRpb24obS50ZXh0cG9zaXRpb24saS5wdHMpLEU9dS5zZWxlY3RBbGwoImcuc2xpY2V0ZXh0IikuZGF0YShpLnRleHQmJiJub25lIiE9PVM/WzBdOltdKTtFLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2xpY2V0ZXh0IiwhMCksRS5leGl0KCkucmVtb3ZlKCksRS5lYWNoKChmdW5jdGlvbigpe3ZhciB1PWwuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLCJ0ZXh0IiwiIiwoZnVuY3Rpb24odCl7dC5hdHRyKCJkYXRhLW5vdGV4IiwxKX0pKSxoPWwuZW5zdXJlVW5pZm9ybUZvbnRTaXplKHQsIm91dHNpZGUiPT09Uz9mdW5jdGlvbih0LGUscil7dmFyIG49Zy5jYXN0T3B0aW9uKHQub3V0c2lkZXRleHRmb250LmNvbG9yLGUucHRzKXx8Zy5jYXN0T3B0aW9uKHQudGV4dGZvbnQuY29sb3IsZS5wdHMpfHxyLmNvbG9yLGk9Zy5jYXN0T3B0aW9uKHQub3V0c2lkZXRleHRmb250LmZhbWlseSxlLnB0cyl8fGcuY2FzdE9wdGlvbih0LnRleHRmb250LmZhbWlseSxlLnB0cyl8fHIuZmFtaWx5LGE9Zy5jYXN0T3B0aW9uKHQub3V0c2lkZXRleHRmb250LnNpemUsZS5wdHMpfHxnLmNhc3RPcHRpb24odC50ZXh0Zm9udC5zaXplLGUucHRzKXx8ci5zaXplO3JldHVybntjb2xvcjpuLGZhbWlseTppLHNpemU6YX19KG0saSxyLmZvbnQpOmIobSxpLHIuZm9udCkpO3UudGV4dChpLnRleHQpLmF0dHIoe2NsYXNzOiJzbGljZXRleHQiLHRyYW5zZm9ybToiIiwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuY2FsbChzLmZvbnQsaCkuY2FsbChmLmNvbnZlcnRUb1RzcGFucyx0KTt2YXIgdix5PXMuYkJveCh1Lm5vZGUoKSk7aWYoIm91dHNpZGUiPT09Uyl2PUwoeSxpKTtlbHNlIGlmKHY9dyh5LGksZCksImF1dG8iPT09UyYmdi5zY2FsZTwxKXt2YXIgeD1sLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LG0ub3V0c2lkZXRleHRmb250KTt1LmNhbGwocy5mb250LHgpLHY9TCh5PXMuYkJveCh1Lm5vZGUoKSksaSl9dmFyIFQ9di50ZXh0UG9zQW5nbGUsaz12b2lkIDA9PT1UP2kucHhtaWQ6eihkLnIsVCk7aWYodi50YXJnZXRYPW8ra1swXSp2LnJDZW50ZXIrKHYueHx8MCksdi50YXJnZXRZPWMra1sxXSp2LnJDZW50ZXIrKHYueXx8MCksUih2LHkpLHYub3V0c2lkZSl7dmFyIEE9di50YXJnZXRZO2kueUxhYmVsTWluPUEteS5oZWlnaHQvMixpLnlMYWJlbE1pZD1BLGkueUxhYmVsTWF4PUEreS5oZWlnaHQvMixpLmxhYmVsRXh0cmFYPTAsaS5sYWJlbEV4dHJhWT0wLF89ITB9di5mb250U2l6ZT1oLnNpemUscChtLnR5cGUsdixyKSxlW2FdLnRyYW5zZm9ybT12LHUuYXR0cigidHJhbnNmb3JtIixsLmdldFRleHRUcmFuc2Zvcm0odikpfSkpfWZ1bmN0aW9uIEModCxlLHIsbil7dmFyIGE9biooZVswXS10WzBdKSxvPW4qKGVbMV0tdFsxXSk7cmV0dXJuImEiK24qZC5yKyIsIituKmQucisiIDAgIitpLmxhcmdlQXJjKyhyPyIgMSAiOiIgMCAiKSthKyIsIitvfX0pKTt2YXIgVD1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcudGl0bGV0ZXh0IikuZGF0YShtLnRpdGxlLnRleHQ/WzBdOltdKTtpZihULmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgidGl0bGV0ZXh0IiwhMCksVC5leGl0KCkucmVtb3ZlKCksVC5lYWNoKChmdW5jdGlvbigpe3ZhciBlLHI9bC5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksInRleHQiLCIiLChmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSkpLGk9bS50aXRsZS50ZXh0O20uX21ldGEmJihpPWwudGVtcGxhdGVTdHJpbmcoaSxtLl9tZXRhKSksci50ZXh0KGkpLmF0dHIoe2NsYXNzOiJ0aXRsZXRleHQiLHRyYW5zZm9ybToiIiwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuY2FsbChzLmZvbnQsbS50aXRsZS5mb250KS5jYWxsKGYuY29udmVydFRvVHNwYW5zLHQpLGU9Im1pZGRsZSBjZW50ZXIiPT09bS50aXRsZS5wb3NpdGlvbj9mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC50aXRsZUJveC53aWR0aCp0LnRpdGxlQm94LndpZHRoK3QudGl0bGVCb3guaGVpZ2h0KnQudGl0bGVCb3guaGVpZ2h0KTtyZXR1cm57eDp0LmN4LHk6dC5jeSxzY2FsZTp0LnRyYWNlLmhvbGUqdC5yKjIvZSx0eDowLHR5Oi10LnRpdGxlQm94LmhlaWdodC8yK3QudHJhY2UudGl0bGUuZm9udC5zaXplfX0oZCk6QyhkLGEpLHIuYXR0cigidHJhbnNmb3JtIix1KGUueCxlLnkpK2MoTWF0aC5taW4oMSxlLnNjYWxlKSkrdShlLnR4LGUudHkpKX0pKSxfJiZmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLGMsdSxmLGgscCxkO2Z1bmN0aW9uIG0odCxlKXtyZXR1cm4gdC5weG1pZFsxXS1lLnB4bWlkWzFdfWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4gZS5weG1pZFsxXS10LnB4bWlkWzFdfWZ1bmN0aW9uIHkodCxyKXtyfHwocj17fSk7dmFyIGksYyx1LGgscD1yLmxhYmVsRXh0cmFZKyhuP3IueUxhYmVsTWF4OnIueUxhYmVsTWluKSxkPW4/dC55TGFiZWxNaW46dC55TGFiZWxNYXgsbT1uP3QueUxhYmVsTWF4OnQueUxhYmVsTWluLHY9dC5jeUZpbmFsK28odC5weDBbMV0sdC5weDFbMV0pLHk9cC1kO2lmKHkqbD4wJiYodC5sYWJlbEV4dHJhWT15KSxBcnJheS5pc0FycmF5KGUucHVsbCkpZm9yKGM9MDtjPGYubGVuZ3RoO2MrKykodT1mW2NdKT09PXR8fChnLmNhc3RPcHRpb24oZS5wdWxsLHQucHRzKXx8MCk+PShnLmNhc3RPcHRpb24oZS5wdWxsLHUucHRzKXx8MCl8fCgodC5weG1pZFsxXS11LnB4bWlkWzFdKSpsPjA/KHk9dS5jeUZpbmFsK28odS5weDBbMV0sdS5weDFbMV0pLWQtdC5sYWJlbEV4dHJhWSkqbD4wJiYodC5sYWJlbEV4dHJhWSs9eSk6KG0rdC5sYWJlbEV4dHJhWS12KSpsPjAmJihpPTMqcypNYXRoLmFicyhjLWYuaW5kZXhPZih0KSksKGg9dS5jeEZpbmFsK2EodS5weDBbMF0sdS5weDFbMF0pK2ktKHQuY3hGaW5hbCt0LnB4bWlkWzBdKS10LmxhYmVsRXh0cmFYKSpzPjAmJih0LmxhYmVsRXh0cmFYKz1oKSkpfWZvcihuPTA7bjwyO24rKylmb3IoaT1uP206dixvPW4/TWF0aC5tYXg6TWF0aC5taW4sbD1uPzE6LTEscj0wO3I8MjtyKyspe2ZvcihhPXI/TWF0aC5tYXg6TWF0aC5taW4scz1yPzE6LTEsKGM9dFtuXVtyXSkuc29ydChpKSx1PXRbMS1uXVtyXSxmPXUuY29uY2F0KGMpLHA9W10saD0wO2g8Yy5sZW5ndGg7aCsrKXZvaWQgMCE9PWNbaF0ueUxhYmVsTWlkJiZwLnB1c2goY1toXSk7Zm9yKGQ9ITEsaD0wO24mJmg8dS5sZW5ndGg7aCsrKWlmKHZvaWQgMCE9PXVbaF0ueUxhYmVsTWlkKXtkPXVbaF07YnJlYWt9Zm9yKGg9MDtoPHAubGVuZ3RoO2grKyl7dmFyIHg9aCYmcFtoLTFdO2QmJiFoJiYoeD1kKSx5KHBbaF0seCl9fX0oeSxtKSxmdW5jdGlvbih0LGUpe3QuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7aWYodC5sYWJlbEV4dHJhWHx8dC5sYWJlbEV4dHJhWSl7dmFyIGk9ci5zZWxlY3QoImcuc2xpY2V0ZXh0IHRleHQiKTt0LnRyYW5zZm9ybS50YXJnZXRYKz10LmxhYmVsRXh0cmFYLHQudHJhbnNmb3JtLnRhcmdldFkrPXQubGFiZWxFeHRyYVksaS5hdHRyKCJ0cmFuc2Zvcm0iLGwuZ2V0VGV4dFRyYW5zZm9ybSh0LnRyYW5zZm9ybSkpO3ZhciBhPXQuY3hGaW5hbCt0LnB4bWlkWzBdLHM9Ik0iK2ErIiwiKyh0LmN5RmluYWwrdC5weG1pZFsxXSksYz0odC55TGFiZWxNYXgtdC55TGFiZWxNaW4pKih0LnB4bWlkWzBdPDA/LTE6MSkvNDtpZih0LmxhYmVsRXh0cmFYKXt2YXIgdT10LmxhYmVsRXh0cmFYKnQucHhtaWRbMV0vdC5weG1pZFswXSxmPXQueUxhYmVsTWlkK3QubGFiZWxFeHRyYVktKHQuY3lGaW5hbCt0LnB4bWlkWzFdKTtNYXRoLmFicyh1KT5NYXRoLmFicyhmKT9zKz0ibCIrZip0LnB4bWlkWzBdL3QucHhtaWRbMV0rIiwiK2YrIkgiKyhhK3QubGFiZWxFeHRyYVgrYyk6cys9ImwiK3QubGFiZWxFeHRyYVgrIiwiK3UrInYiKyhmLXUpKyJoIitjfWVsc2Ugcys9IlYiKyh0LnlMYWJlbE1pZCt0LmxhYmVsRXh0cmFZKSsiaCIrYztsLmVuc3VyZVNpbmdsZShyLCJwYXRoIiwidGV4dGxpbmUiKS5jYWxsKG8uc3Ryb2tlLGUub3V0c2lkZXRleHRmb250LmNvbG9yKS5hdHRyKHsic3Ryb2tlLXdpZHRoIjpNYXRoLm1pbigyLGUub3V0c2lkZXRleHRmb250LnNpemUvOCksZDpzLGZpbGw6Im5vbmUifSl9ZWxzZSByLnNlbGVjdCgicGF0aC50ZXh0bGluZSIpLnJlbW92ZSgpfSkpfSh2LG0pLF8mJm0uYXV0b21hcmdpbil7dmFyIGs9cy5iQm94KGgubm9kZSgpKSxBPW0uZG9tYWluLE09YS53KihBLnhbMV0tQS54WzBdKSxTPWEuaCooQS55WzFdLUEueVswXSksRT0oLjUqTS1kLnIpL2EudyxQPSguNSpTLWQucikvYS5oO2kuYXV0b01hcmdpbih0LCJwaWUuIittLnVpZCsiLmF1dG9tYXJnaW4iLHt4bDpBLnhbMF0tRSx4cjpBLnhbMV0rRSx5YjpBLnlbMF0tUCx5dDpBLnlbMV0rUCxsOk1hdGgubWF4KGQuY3gtZC5yLWsubGVmdCwwKSxyOk1hdGgubWF4KGsucmlnaHQtKGQuY3grZC5yKSwwKSxiOk1hdGgubWF4KGsuYm90dG9tLShkLmN5K2QuciksMCksdDpNYXRoLm1heChkLmN5LWQuci1rLnRvcCwwKSxwYWQ6NX0pfX0pKX0pKTtzZXRUaW1lb3V0KChmdW5jdGlvbigpe2guc2VsZWN0QWxsKCJ0c3BhbiIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7dC5hdHRyKCJkeSIpJiZ0LmF0dHIoImR5Iix0LmF0dHIoImR5IikpfSkpfSksMCl9LGZvcm1hdFNsaWNlTGFiZWw6RCx0cmFuc2Zvcm1JbnNpZGVUZXh0OncsZGV0ZXJtaW5lSW5zaWRlVGV4dEZvbnQ6Yixwb3NpdGlvblRpdGxlT3V0c2lkZTpDLHByZXJlbmRlclRpdGxlczpfLGxheW91dEFyZWFzOk8sYXR0YWNoRnhIYW5kbGVyczp4LGNvbXB1dGVUcmFuc2Zvcm06Un19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vY29tcG9uZW50cy9meCI6Njc5LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDIsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4OTAsIi4uL2Jhci9jb25zdGFudHMiOjkxNiwiLi4vYmFyL3VuaWZvcm1fdGV4dCI6OTMwLCIuL2V2ZW50X2RhdGEiOjExNjksIi4vaGVscGVycyI6MTE3MCwiQHBsb3RseS9kMyI6NTh9XSwxMTc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4vc3R5bGVfb25lIiksYT10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikucmVzaXplVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5fcGllbGF5ZXIuc2VsZWN0QWxsKCIudHJhY2UiKTthKHQsZSwicGllIiksZS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcyk7ci5zdHlsZSh7b3BhY2l0eTplLm9wYWNpdHl9KSxyLnNlbGVjdEFsbCgicGF0aC5zdXJmYWNlIikuZWFjaCgoZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuY2FsbChpLHQsZSl9KSl9KSl9fSx7Ii4uL2Jhci91bmlmb3JtX3RleHQiOjkzMCwiLi9zdHlsZV9vbmUiOjExNzYsIkBwbG90bHkvZDMiOjU4fV0sMTE3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuL2hlbHBlcnMiKS5jYXN0T3B0aW9uO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9ci5tYXJrZXIubGluZSxvPWkoYS5jb2xvcixlLnB0cyl8fG4uZGVmYXVsdExpbmUscz1pKGEud2lkdGgsZS5wdHMpfHwwO3Quc3R5bGUoInN0cm9rZS13aWR0aCIscykuY2FsbChuLmZpbGwsZS5jb2xvcikuY2FsbChuLnN0cm9rZSxvKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuL2hlbHBlcnMiOjExNzB9XSwxMTc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17eDpuLngseTpuLnkseHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0saW5kaWNlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx4Ym91bmRzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHlib3VuZHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDpuLnRleHQsbWFya2VyOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGMifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxhcnJheU9rOiExLGVkaXRUeXBlOiJjYWxjIn0sYmxlbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyJ9LHNpemVtaW46e3ZhbFR5cGU6Im51bWJlciIsbWluOi4xLG1heDoyLGRmbHQ6LjUsZWRpdFR5cGU6ImNhbGMifSxzaXplbWF4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjouMSxkZmx0OjIwLGVkaXRUeXBlOiJjYWxjIn0sYm9yZGVyOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGMifSxhcmVhcmF0aW86e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRyYW5zZm9ybXM6dm9pZCAwfX0seyIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExOTF9XSwxMTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXBvaW50Y2xvdWQyZCIpLGk9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSIpLmZpbmRFeHRyZW1lcyxvPXQoIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIik7ZnVuY3Rpb24gcyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMudHlwZT0icG9pbnRjbG91ZCIsdGhpcy5waWNrWERhdGE9W10sdGhpcy5waWNrWURhdGE9W10sdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMudGV4dExhYmVscz1bXSx0aGlzLmNvbG9yPSJyZ2IoMCwgMCwgMCkiLHRoaXMubmFtZT0iIix0aGlzLmhvdmVyaW5mbz0iYWxsIix0aGlzLmlkVG9JbmRleD1uZXcgSW50MzJBcnJheSgwKSx0aGlzLmJvdW5kcz1bMCwwLDAsMF0sdGhpcy5wb2ludGNsb3VkT3B0aW9ucz17cG9zaXRpb25zOm5ldyBGbG9hdDMyQXJyYXkoMCksaWRUb0luZGV4OnRoaXMuaWRUb0luZGV4LHNpemVtaW46LjUsc2l6ZW1heDoxMixjb2xvcjpbMCwwLDAsMV0sYXJlYVJhdGlvOjEsYm9yZGVyQ29sb3I6WzAsMCwwLDFdfSx0aGlzLnBvaW50Y2xvdWQ9bih0LmdscGxvdCx0aGlzLnBvaW50Y2xvdWRPcHRpb25zKSx0aGlzLnBvaW50Y2xvdWQuX3RyYWNlPXRoaXN9dmFyIGw9cy5wcm90b3R5cGU7bC5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaWRUb0luZGV4W3QucG9pbnRJZF07cmV0dXJue3RyYWNlOnRoaXMsZGF0YUNvb3JkOnQuZGF0YUNvb3JkLHRyYWNlQ29vcmQ6dGhpcy5waWNrWFlEYXRhP1t0aGlzLnBpY2tYWURhdGFbMiplXSx0aGlzLnBpY2tYWURhdGFbMiplKzFdXTpbdGhpcy5waWNrWERhdGFbZV0sdGhpcy5waWNrWURhdGFbZV1dLHRleHRMYWJlbDpBcnJheS5pc0FycmF5KHRoaXMudGV4dExhYmVscyk/dGhpcy50ZXh0TGFiZWxzW2VdOnRoaXMudGV4dExhYmVscyxjb2xvcjp0aGlzLmNvbG9yLG5hbWU6dGhpcy5uYW1lLHBvaW50SW5kZXg6ZSxob3ZlcmluZm86dGhpcy5ob3ZlcmluZm99fSxsLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy50ZXh0TGFiZWxzPXQudGV4dCx0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaG92ZXJpbmZvPXQuaG92ZXJpbmZvLHRoaXMuYm91bmRzPVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy51cGRhdGVGYXN0KHQpLHRoaXMuY29sb3I9byh0LHt9KX0sbC51cGRhdGVGYXN0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixvLHMsbCxjPXRoaXMueERhdGE9dGhpcy5waWNrWERhdGE9dC54LHU9dGhpcy55RGF0YT10aGlzLnBpY2tZRGF0YT10LnksZj10aGlzLnBpY2tYWURhdGE9dC54eSxoPXQueGJvdW5kcyYmdC55Ym91bmRzLHA9dC5pbmRpY2VzLGQ9dGhpcy5ib3VuZHM7aWYoZil7aWYobj1mLGU9Zi5sZW5ndGg+Pj4xLGgpZFswXT10Lnhib3VuZHNbMF0sZFsyXT10Lnhib3VuZHNbMV0sZFsxXT10Lnlib3VuZHNbMF0sZFszXT10Lnlib3VuZHNbMV07ZWxzZSBmb3IobD0wO2w8ZTtsKyspbz1uWzIqbF0scz1uWzIqbCsxXSxvPGRbMF0mJihkWzBdPW8pLG8+ZFsyXSYmKGRbMl09byksczxkWzFdJiYoZFsxXT1zKSxzPmRbM10mJihkWzNdPXMpO2lmKHApcj1wO2Vsc2UgZm9yKHI9bmV3IEludDMyQXJyYXkoZSksbD0wO2w8ZTtsKyspcltsXT1sfWVsc2UgZm9yKGU9Yy5sZW5ndGgsbj1uZXcgRmxvYXQzMkFycmF5KDIqZSkscj1uZXcgSW50MzJBcnJheShlKSxsPTA7bDxlO2wrKylvPWNbbF0scz11W2xdLHJbbF09bCxuWzIqbF09byxuWzIqbCsxXT1zLG88ZFswXSYmKGRbMF09byksbz5kWzJdJiYoZFsyXT1vKSxzPGRbMV0mJihkWzFdPXMpLHM+ZFszXSYmKGRbM109cyk7dGhpcy5pZFRvSW5kZXg9cix0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmlkVG9JbmRleD1yLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMucG9zaXRpb25zPW47dmFyIG09aSh0Lm1hcmtlci5jb2xvciksZz1pKHQubWFya2VyLmJvcmRlci5jb2xvciksdj10Lm9wYWNpdHkqdC5tYXJrZXIub3BhY2l0eTttWzNdKj12LHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuY29sb3I9bTt2YXIgeT10Lm1hcmtlci5ibGVuZDtpZihudWxsPT09eSl7eT1jLmxlbmd0aDwxMDB8fHUubGVuZ3RoPDEwMH10aGlzLnBvaW50Y2xvdWRPcHRpb25zLmJsZW5kPXksZ1szXSo9dix0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmJvcmRlckNvbG9yPWc7dmFyIHg9dC5tYXJrZXIuc2l6ZW1pbixiPU1hdGgubWF4KHQubWFya2VyLnNpemVtYXgsdC5tYXJrZXIuc2l6ZW1pbik7dGhpcy5wb2ludGNsb3VkT3B0aW9ucy5zaXplTWluPXgsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5zaXplTWF4PWIsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5hcmVhUmF0aW89dC5tYXJrZXIuYm9yZGVyLmFyZWFyYXRpbyx0aGlzLnBvaW50Y2xvdWQudXBkYXRlKHRoaXMucG9pbnRjbG91ZE9wdGlvbnMpO3ZhciBfPXRoaXMuc2NlbmUueGF4aXMsdz10aGlzLnNjZW5lLnlheGlzLFQ9Yi8yfHwuNTt0Ll9leHRyZW1lc1tfLl9pZF09YShfLFtkWzBdLGRbMl1dLHtwcGFkOlR9KSx0Ll9leHRyZW1lc1t3Ll9pZF09YSh3LFtkWzFdLGRbM11dLHtwcGFkOlR9KX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5wb2ludGNsb3VkLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHModCxlLnVpZCk7cmV0dXJuIHIudXBkYXRlKGUpLHJ9fSx7Ii4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjgwMSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6ODI2LCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciI6MTIwMSwiZ2wtcG9pbnRjbG91ZDJkIjozMTR9XSwxMTc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBhKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9YSgieCIpLGEoInkiKSxhKCJ4Ym91bmRzIiksYSgieWJvdW5kcyIpLHQueHkmJnQueHkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkmJihlLnh5PXQueHkpLHQuaW5kaWNlcyYmdC5pbmRpY2VzIGluc3RhbmNlb2YgSW50MzJBcnJheSYmKGUuaW5kaWNlcz10LmluZGljZXMpLGEoInRleHQiKSxhKCJtYXJrZXIuY29sb3IiLHIpLGEoIm1hcmtlci5vcGFjaXR5IiksYSgibWFya2VyLmJsZW5kIiksYSgibWFya2VyLnNpemVtaW4iKSxhKCJtYXJrZXIuc2l6ZW1heCIpLGEoIm1hcmtlci5ib3JkZXIuY29sb3IiLHIpLGEoIm1hcmtlci5ib3JkZXIuYXJlYXJhdGlvIiksZS5fbGVuZ3RoPW51bGx9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2F0dHJpYnV0ZXMiOjExNzd9XSwxMTgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO1siKnBvaW50Y2xvdWQqIHRyYWNlIGlzIGRlcHJlY2F0ZWQhIiwiUGxlYXNlIGNvbnNpZGVyIHN3aXRjaGluZyB0byB0aGUgKnNjYXR0ZXJnbCogdHJhY2UgdHlwZS4iXS5qb2luKCIgIik7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4uL3NjYXR0ZXIzZC9jYWxjIikscGxvdDp0KCIuL2NvbnZlcnQiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToicG9pbnRjbG91ZCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wyZCIpLGNhdGVnb3JpZXM6WyJnbCIsImdsMmQiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wyZCI6ODY3LCIuLi9zY2F0dGVyM2QvY2FsYyI6MTIyMCwiLi9hdHRyaWJ1dGVzIjoxMTc3LCIuL2NvbnZlcnQiOjExNzgsIi4vZGVmYXVsdHMiOjExNzl9XSwxMTgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsbD10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSx1PXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxmPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuZGVzY3JpcHRpb25Pbmx5TnVtYmVycyxoPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHA9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsOyhlLmV4cG9ydHM9cCh7aG92ZXJpbmZvOmgoe30saS5ob3ZlcmluZm8se2ZsYWdzOltdLGFycmF5T2s6ITF9KSxob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbCxkb21haW46cyh7bmFtZToic2Fua2V5Iix0cmFjZTohMH0pLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGRmbHQ6ImgifSx2YWx1ZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIuM3MiLGRlc2NyaXB0aW9uOmYoInZhbHVlIil9LHZhbHVlc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGFycmFuZ2VtZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzbmFwIiwicGVycGVuZGljdWxhciIsImZyZWVmb3JtIiwiZml4ZWQiXSxkZmx0OiJzbmFwIn0sdGV4dGZvbnQ6bih7fSksY3VzdG9tZGF0YTp2b2lkIDAsbm9kZTp7bGFiZWw6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGdyb3Vwczp7dmFsVHlwZToiaW5mb19hcnJheSIsaW1wbGllZEVkaXRzOnt4OltdLHk6W119LGRpbWVuc2lvbnM6MixmcmVlTGVuZ3RoOiEwLGRmbHQ6W10saXRlbXM6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifX0seDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwfSxjdXN0b21kYXRhOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmRlZmF1bHRMaW5lLGFycmF5T2s6ITB9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6LjUsYXJyYXlPazohMH19LHBhZDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiExLG1pbjowLGRmbHQ6MjB9LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiExLG1pbjoxLGRmbHQ6MjB9LGhvdmVyaW5mbzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwibm9uZSIsInNraXAiXSxkZmx0OiJhbGwifSxob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbCxob3ZlcnRlbXBsYXRlOmwoe30se2tleXM6WyJ2YWx1ZSIsImxhYmVsIl19KX0sbGluazp7bGFiZWw6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMH0sY3VzdG9tZGF0YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZSxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsYXJyYXlPazohMH19LHNvdXJjZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sdGFyZ2V0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSx2YWx1ZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0saG92ZXJpbmZvOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJub25lIiwic2tpcCJdLGRmbHQ6ImFsbCJ9LGhvdmVybGFiZWw6by5ob3ZlcmxhYmVsLGhvdmVydGVtcGxhdGU6bCh7fSx7a2V5czpbInZhbHVlIiwibGFiZWwiXX0pLGNvbG9yc2NhbGVzOnUoImNvbmNlbnRyYXRpb25zY2FsZXMiLHtlZGl0VHlwZToiY2FsYyIsbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMiLGRmbHQ6IiJ9LGNtYXg6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLGRmbHQ6MX0sY21pbjp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsZGZsdDowfSxjb2xvcnNjYWxlOmgoYygpLmNvbG9yc2NhbGUse2RmbHQ6W1swLCJ3aGl0ZSJdLFsxLCJibGFjayJdXX0pfSl9fSwiY2FsYyIsIm5lc3RlZCIpKS50cmFuc2Zvcm1zPXZvaWQgMH0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYzOCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY0NiwiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIjo2NzAsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODA5LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTUsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTl9XSwxMTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxpPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYT10KCIuL3Bsb3QiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3QiKS5wcmVwU2VsZWN0LHU9dCgiLi4vLi4vbGliIiksZj10KCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIGgodCxlKXt2YXIgcj10Ll9mdWxsRGF0YVtlXSxuPXQuX2Z1bGxMYXlvdXQsaT1uLmRyYWdtb2RlLGE9InBhbiI9PT1uLmRyYWdtb2RlPyJtb3ZlIjoiY3Jvc3NoYWlyIixvPXIuX2JnUmVjdDtpZigicGFuIiE9PWkmJiJ6b29tIiE9PWkpe3MobyxhKTt2YXIgaD17X2lkOiJ4IixjMnA6dS5pZGVudGl0eSxfb2Zmc2V0OnIuX3NhbmtleS50cmFuc2xhdGVYLF9sZW5ndGg6ci5fc2Fua2V5LndpZHRofSxwPXtfaWQ6InkiLGMycDp1LmlkZW50aXR5LF9vZmZzZXQ6ci5fc2Fua2V5LnRyYW5zbGF0ZVksX2xlbmd0aDpyLl9zYW5rZXkuaGVpZ2h0fSxkPXtnZDp0LGVsZW1lbnQ6by5ub2RlKCkscGxvdGluZm86e2lkOmUseGF4aXM6aCx5YXhpczpwLGZpbGxSYW5nZUl0ZW1zOnUubm9vcH0sc3VicGxvdDplLHhheGVzOltoXSx5YXhlczpbcF0sZG9uZUZuQ29tcGxldGVkOmZ1bmN0aW9uKHIpe3ZhciBuLGk9dC5fZnVsbERhdGFbZV0sYT1pLm5vZGUuZ3JvdXBzLnNsaWNlKCksbz1bXTtmdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT1pLl9zYW5rZXkuZ3JhcGgubm9kZXMscj0wO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl0ucG9pbnROdW1iZXI9PT10KXJldHVybiBlW3JdfWZvcih2YXIgbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgYz1zKHJbbF0ucG9pbnROdW1iZXIpO2lmKGMpaWYoYy5ncm91cCl7Zm9yKHZhciB1PTA7dTxjLmNoaWxkcmVuTm9kZXMubGVuZ3RoO3UrKylvLnB1c2goYy5jaGlsZHJlbk5vZGVzW3VdLnBvaW50TnVtYmVyKTthW2MucG9pbnROdW1iZXItaS5ub2RlLl9jb3VudF09ITF9ZWxzZSBvLnB1c2goYy5wb2ludE51bWJlcil9bj1hLmZpbHRlcihCb29sZWFuKS5jb25jYXQoW29dKSxmLmNhbGwoIl9ndWlSZXN0eWxlIix0LHsibm9kZS5ncm91cHMiOltuXX0sZSl9LHByZXBGbjpmdW5jdGlvbih0LGUscil7Yyh0LGUscixkLGkpfX07bC5pbml0KGQpfX1yLm5hbWU9InNhbmtleSIsci5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcz1uKHtob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbH0sInBsb3QiLCJuZXN0ZWQiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9aSh0LmNhbGNkYXRhLCJzYW5rZXkiKVswXTthKHQsZSksci51cGRhdGVGeCh0KX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcygic2Fua2V5IiksYT1lLl9oYXMmJmUuX2hhcygic2Fua2V5Iik7aSYmIWEmJihuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5zYW5rZXkiKS5yZW1vdmUoKSxuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5iZ3NhbmtleSIpLnJlbW92ZSgpKX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQuX2Z1bGxEYXRhLmxlbmd0aDtlKyspaCh0LGUpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo2NTgsIi4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXMiOjY4MCwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjc5NywiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODA5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2VsZWN0Ijo4NDcsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo4NjQsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4vcGxvdCI6MTE4N31dLDExODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vbGliL2d1cCIpLndyYXAsbz1pLmlzQXJyYXlPclR5cGVkQXJyYXkscz1pLmlzSW5kZXgsbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKTtmdW5jdGlvbiBjKHQpe3ZhciBlLHI9dC5ub2RlLGE9dC5saW5rLGM9W10sdT1vKGEuY29sb3IpLGY9byhhLmN1c3RvbWRhdGEpLGg9e30scD17fSxkPWEuY29sb3JzY2FsZXMubGVuZ3RoO2ZvcihlPTA7ZTxkO2UrKyl7dmFyIG09YS5jb2xvcnNjYWxlc1tlXSxnPWwuZXh0cmFjdFNjYWxlKG0se2NMZXR0ZXI6ImMifSksdj1sLm1ha2VDb2xvclNjYWxlRnVuYyhnKTtwW20ubGFiZWxdPXZ9dmFyIHk9MDtmb3IoZT0wO2U8YS52YWx1ZS5sZW5ndGg7ZSsrKWEuc291cmNlW2VdPnkmJih5PWEuc291cmNlW2VdKSxhLnRhcmdldFtlXT55JiYoeT1hLnRhcmdldFtlXSk7dmFyIHgsYj15KzE7dC5ub2RlLl9jb3VudD1iO3ZhciBfPXQubm9kZS5ncm91cHMsdz17fTtmb3IoZT0wO2U8Xy5sZW5ndGg7ZSsrKXt2YXIgVD1fW2VdO2Zvcih4PTA7eDxULmxlbmd0aDt4Kyspe3ZhciBrPVRbeF0sQT1iK2U7dy5oYXNPd25Qcm9wZXJ0eShrKT9pLndhcm4oIk5vZGUgIitrKyIgaXMgYWxyZWFkeSBwYXJ0IG9mIGEgZ3JvdXAuIik6d1trXT1BfX12YXIgTT17c291cmNlOltdLHRhcmdldDpbXX07Zm9yKGU9MDtlPGEudmFsdWUubGVuZ3RoO2UrKyl7dmFyIFM9YS52YWx1ZVtlXSxFPWEuc291cmNlW2VdLEw9YS50YXJnZXRbZV07aWYoUz4wJiZzKEUsYikmJnMoTCxiKSYmKCF3Lmhhc093blByb3BlcnR5KEUpfHwhdy5oYXNPd25Qcm9wZXJ0eShMKXx8d1tFXSE9PXdbTF0pKXt3Lmhhc093blByb3BlcnR5KEwpJiYoTD13W0xdKSx3Lmhhc093blByb3BlcnR5KEUpJiYoRT13W0VdKSxMPStMLGhbRT0rRV09aFtMXT0hMDt2YXIgQz0iIjthLmxhYmVsJiZhLmxhYmVsW2VdJiYoQz1hLmxhYmVsW2VdKTt2YXIgUD1udWxsO0MmJnAuaGFzT3duUHJvcGVydHkoQykmJihQPXBbQ10pLGMucHVzaCh7cG9pbnROdW1iZXI6ZSxsYWJlbDpDLGNvbG9yOnU/YS5jb2xvcltlXTphLmNvbG9yLGN1c3RvbWRhdGE6Zj9hLmN1c3RvbWRhdGFbZV06YS5jdXN0b21kYXRhLGNvbmNlbnRyYXRpb25zY2FsZTpQLHNvdXJjZTpFLHRhcmdldDpMLHZhbHVlOitTfSksTS5zb3VyY2UucHVzaChFKSxNLnRhcmdldC5wdXNoKEwpfX12YXIgST1iK18ubGVuZ3RoLE89byhyLmNvbG9yKSx6PW8oci5jdXN0b21kYXRhKSxEPVtdO2ZvcihlPTA7ZTxJO2UrKylpZihoW2VdKXt2YXIgUj1yLmxhYmVsW2VdO0QucHVzaCh7Z3JvdXA6ZT5iLTEsY2hpbGRyZW5Ob2RlczpbXSxwb2ludE51bWJlcjplLGxhYmVsOlIsY29sb3I6Tz9yLmNvbG9yW2VdOnIuY29sb3IsY3VzdG9tZGF0YTp6P3IuY3VzdG9tZGF0YVtlXTpyLmN1c3RvbWRhdGF9KX12YXIgRj0hMTtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYT1pLmluaXQyZEFycmF5KHQsMCksbz0wO288TWF0aC5taW4oZS5sZW5ndGgsci5sZW5ndGgpO28rKylpZihpLmlzSW5kZXgoZVtvXSx0KSYmaS5pc0luZGV4KHJbb10sdCkpe2lmKGVbb109PT1yW29dKXJldHVybiEwO2FbZVtvXV0ucHVzaChyW29dKX1yZXR1cm4gbihhKS5jb21wb25lbnRzLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfSkpfShJLE0uc291cmNlLE0udGFyZ2V0KSYmKEY9ITApLHtjaXJjdWxhcjpGLGxpbmtzOmMsbm9kZXM6RCxncm91cHM6Xyxncm91cExvb2t1cDp3fX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1jKGUpO3JldHVybiBhKHtjaXJjdWxhcjpyLmNpcmN1bGFyLF9ub2RlczpyLm5vZGVzLF9saW5rczpyLmxpbmtzLF9ncm91cHM6ci5ncm91cHMsX2dyb3VwTG9va3VwOnIuZ3JvdXBMb29rdXB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTEsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvZ3VwIjo3NzMsInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzIjo1NjR9XSwxMTg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bm9kZVRleHRPZmZzZXRIb3Jpem9udGFsOjQsbm9kZVRleHRPZmZzZXRWZXJ0aWNhbDozLG5vZGVQYWRBY3Jvc3M6MTAsc2Fua2V5SXRlcmF0aW9uczo1MCxmb3JjZUl0ZXJhdGlvbnM6NSxmb3JjZVRpY2tzUGVyRnJhbWU6MTAsZHVyYXRpb246NTAwLGVhc2U6ImxpbmVhciIsY246e3NhbmtleToic2Fua2V5IixzYW5rZXlMaW5rczoic2Fua2V5LWxpbmtzIixzYW5rZXlMaW5rOiJzYW5rZXktbGluayIsc2Fua2V5Tm9kZVNldDoic2Fua2V5LW5vZGUtc2V0IixzYW5rZXlOb2RlOiJzYW5rZXktbm9kZSIsbm9kZVJlY3Q6Im5vZGUtcmVjdCIsbm9kZUxhYmVsOiJub2RlLWxhYmVsIn19fSx7fV0sMTE4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgidGlueWNvbG9yMiIpLHM9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuZGVmYXVsdHMsbD10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVybGFiZWxfZGVmYXVsdHMiKSxjPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSx1PXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpO2Z1bmN0aW9uIGYodCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLmxpbmsuY29sb3JzY2FsZXMscixhKX1yKCJsYWJlbCIpLHIoImNtaW4iKSxyKCJjbWF4IikscigiY29sb3JzY2FsZSIpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBwKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9dmFyIGQ9bi5leHRlbmREZWVwKGguaG92ZXJsYWJlbCx0LmhvdmVybGFiZWwpLG09dC5ub2RlLGc9Yy5uZXdDb250YWluZXIoZSwibm9kZSIpO2Z1bmN0aW9uIHYodCxlKXtyZXR1cm4gbi5jb2VyY2UobSxnLGkubm9kZSx0LGUpfXYoImxhYmVsIiksdigiZ3JvdXBzIiksdigieCIpLHYoInkiKSx2KCJwYWQiKSx2KCJ0aGlja25lc3MiKSx2KCJsaW5lLmNvbG9yIiksdigibGluZS53aWR0aCIpLHYoImhvdmVyaW5mbyIsdC5ob3ZlcmluZm8pLGwobSxnLHYsZCksdigiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciB5PWguY29sb3J3YXk7digiY29sb3IiLGcubGFiZWwubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBhLmFkZE9wYWNpdHkoZnVuY3Rpb24odCl7cmV0dXJuIHlbdCV5Lmxlbmd0aF19KGUpLC44KX0pKSksdigiY3VzdG9tZGF0YSIpO3ZhciB4PXQubGlua3x8e30sYj1jLm5ld0NvbnRhaW5lcihlLCJsaW5rIik7ZnVuY3Rpb24gXyh0LGUpe3JldHVybiBuLmNvZXJjZSh4LGIsaS5saW5rLHQsZSl9XygibGFiZWwiKSxfKCJzb3VyY2UiKSxfKCJ0YXJnZXQiKSxfKCJ2YWx1ZSIpLF8oImxpbmUuY29sb3IiKSxfKCJsaW5lLndpZHRoIiksXygiaG92ZXJpbmZvIix0LmhvdmVyaW5mbyksbCh4LGIsXyxkKSxfKCJob3ZlcnRlbXBsYXRlIik7dmFyIHcsVD1vKGgucGFwZXJfYmdjb2xvcikuZ2V0THVtaW5hbmNlKCk8LjMzMz8icmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpIjoicmdiYSgwLCAwLCAwLCAwLjIpIjtfKCJjb2xvciIsbi5yZXBlYXQoVCxiLnZhbHVlLmxlbmd0aCkpLF8oImN1c3RvbWRhdGEiKSx1KHgsYix7bmFtZToiY29sb3JzY2FsZXMiLGhhbmRsZUl0ZW1EZWZhdWx0czpmfSkscyhlLGgscCkscCgib3JpZW50YXRpb24iKSxwKCJ2YWx1ZWZvcm1hdCIpLHAoInZhbHVlc3VmZml4IiksZy54Lmxlbmd0aCYmZy55Lmxlbmd0aCYmKHc9ImZyZWVmb3JtIikscCgiYXJyYW5nZW1lbnQiLHcpLG4uY29lcmNlRm9udChwLCJ0ZXh0Zm9udCIsbi5leHRlbmRGbGF0KHt9LGguZm9udCkpLGUuX2xlbmd0aD1udWxsfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJsYWJlbF9kZWZhdWx0cyI6Njc3LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjgyMiwiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTUsIi4vYXR0cmlidXRlcyI6MTE4MSx0aW55Y29sb3IyOjU3Mn1dLDExODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNhbmtleSIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxzZWxlY3RQb2ludHM6dCgiLi9zZWxlY3QuanMiKSxjYXRlZ29yaWVzOlsibm9PcGFjaXR5Il0sbWV0YTp7fX19LHsiLi9hdHRyaWJ1dGVzIjoxMTgxLCIuL2Jhc2VfcGxvdCI6MTE4MiwiLi9jYWxjIjoxMTgzLCIuL2RlZmF1bHRzIjoxMTg1LCIuL3Bsb3QiOjExODcsIi4vc2VsZWN0LmpzIjoxMTg5fV0sMTE4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPWkubnVtYmVyRm9ybWF0LG89dCgiLi9yZW5kZXIiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxjPXQoIi4vY29uc3RhbnRzIikuY24sdT1pLl87ZnVuY3Rpb24gZih0KXtyZXR1cm4iIiE9PXR9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5PT09ZS50cmFjZUlkfSkpfWZ1bmN0aW9uIHAodCxlKXtuLnNlbGVjdCh0KS5zZWxlY3QoInBhdGgiKS5zdHlsZSgiZmlsbC1vcGFjaXR5IixlKSxuLnNlbGVjdCh0KS5zZWxlY3QoInJlY3QiKS5zdHlsZSgiZmlsbC1vcGFjaXR5IixlKX1mdW5jdGlvbiBkKHQpe24uc2VsZWN0KHQpLnNlbGVjdCgidGV4dC5uYW1lIikuc3R5bGUoImZpbGwiLCJibGFjayIpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi0xIT09dC5ub2RlLnNvdXJjZUxpbmtzLmluZGV4T2YoZS5saW5rKXx8LTEhPT10Lm5vZGUudGFyZ2V0TGlua3MuaW5kZXhPZihlLmxpbmspfX1mdW5jdGlvbiBnKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4tMSE9PWUubm9kZS5zb3VyY2VMaW5rcy5pbmRleE9mKHQubGluayl8fC0xIT09ZS5ub2RlLnRhcmdldExpbmtzLmluZGV4T2YodC5saW5rKX19ZnVuY3Rpb24gdih0LGUscil7ZSYmciYmaChyLGUpLnNlbGVjdEFsbCgiLiIrYy5zYW5rZXlMaW5rKS5maWx0ZXIobShlKSkuY2FsbCh4LmJpbmQoMCxlLHIsITEpKX1mdW5jdGlvbiB5KHQsZSxyKXtlJiZyJiZoKHIsZSkuc2VsZWN0QWxsKCIuIitjLnNhbmtleUxpbmspLmZpbHRlcihtKGUpKS5jYWxsKGIuYmluZCgwLGUsciwhMSkpfWZ1bmN0aW9uIHgodCxlLHIsbil7dmFyIGk9bi5kYXR1bSgpLmxpbmsubGFiZWw7bi5zdHlsZSgiZmlsbC1vcGFjaXR5IiwoZnVuY3Rpb24odCl7aWYoIXQubGluay5jb25jZW50cmF0aW9uc2NhbGUpcmV0dXJuLjR9KSksaSYmaChlLHQpLnNlbGVjdEFsbCgiLiIrYy5zYW5rZXlMaW5rKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpbmsubGFiZWw9PT1pfSkpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLChmdW5jdGlvbih0KXtpZighdC5saW5rLmNvbmNlbnRyYXRpb25zY2FsZSlyZXR1cm4uNH0pKSxyJiZoKGUsdCkuc2VsZWN0QWxsKCIuIitjLnNhbmtleU5vZGUpLmZpbHRlcihnKHQpKS5jYWxsKHYpfWZ1bmN0aW9uIGIodCxlLHIsbil7dmFyIGk9bi5kYXR1bSgpLmxpbmsubGFiZWw7bi5zdHlsZSgiZmlsbC1vcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSksaSYmaChlLHQpLnNlbGVjdEFsbCgiLiIrYy5zYW5rZXlMaW5rKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpbmsubGFiZWw9PT1pfSkpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pKSxyJiZoKGUsdCkuc2VsZWN0QWxsKGMuc2Fua2V5Tm9kZSkuZmlsdGVyKGcodCkpLmNhbGwoeSl9ZnVuY3Rpb24gXyh0LGUpe3ZhciByPXQuaG92ZXJsYWJlbHx8e30sbj1pLm5lc3RlZFByb3BlcnR5KHIsZSkuZ2V0KCk7cmV0dXJuIUFycmF5LmlzQXJyYXkobikmJm59ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxMYXlvdXQsaT1yLl9wYXBlcixoPXIuX3NpemUsbT0wO208dC5fZnVsbERhdGEubGVuZ3RoO20rKylpZih0Ll9mdWxsRGF0YVttXS52aXNpYmxlJiZ0Ll9mdWxsRGF0YVttXS50eXBlPT09Yy5zYW5rZXkmJiF0Ll9mdWxsRGF0YVttXS5fdmlld0luaXRpYWwpe3ZhciBnPXQuX2Z1bGxEYXRhW21dLm5vZGU7dC5fZnVsbERhdGFbbV0uX3ZpZXdJbml0aWFsPXtub2RlOntncm91cHM6Zy5ncm91cHMuc2xpY2UoKSx4OmcueC5zbGljZSgpLHk6Zy55LnNsaWNlKCl9fX12YXIgdz11KHQsInNvdXJjZToiKSsiICIsVD11KHQsInRhcmdldDoiKSsiICIsaz11KHQsImNvbmNlbnRyYXRpb246IikrIiAiLEE9dSh0LCJpbmNvbWluZyBmbG93IGNvdW50OiIpKyIgIixNPXUodCwib3V0Z29pbmcgZmxvdyBjb3VudDoiKSsiICI7byh0LGksZSx7d2lkdGg6aC53LGhlaWdodDpoLmgsbWFyZ2luOnt0OmgudCxyOmgucixiOmguYixsOmgubH19LHtsaW5rRXZlbnRzOntob3ZlcjpmdW5jdGlvbihlLHIsaSl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwoeC5iaW5kKDAscixpLCEwKSksInNraXAiIT09ci5saW5rLnRyYWNlLmxpbmsuaG92ZXJpbmZvJiYoci5saW5rLmZ1bGxEYXRhPXIubGluay50cmFjZSx0LmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50Om4uZXZlbnQscG9pbnRzOltyLmxpbmtdfSkpKX0sZm9sbG93OmZ1bmN0aW9uKGUsaSl7aWYoITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSl7dmFyIG89aS5saW5rLnRyYWNlLmxpbms7aWYoIm5vbmUiIT09by5ob3ZlcmluZm8mJiJza2lwIiE9PW8uaG92ZXJpbmZvKXtmb3IodmFyIGM9W10sdT0wLGg9MDtoPGkuZmxvdy5saW5rcy5sZW5ndGg7aCsrKXt2YXIgbT1pLmZsb3cubGlua3NbaF07aWYoImNsb3Nlc3QiIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGV8fGkubGluay5wb2ludE51bWJlcj09PW0ucG9pbnROdW1iZXIpe2kubGluay5wb2ludE51bWJlcj09PW0ucG9pbnROdW1iZXImJih1PWgpLG0uZnVsbERhdGE9bS50cmFjZSxvPWkubGluay50cmFjZS5saW5rO3ZhciBnPXkobSksdj17dmFsdWVMYWJlbDphKGkudmFsdWVGb3JtYXQpKG0udmFsdWUpK2kudmFsdWVTdWZmaXh9O2MucHVzaCh7eDpnWzBdLHk6Z1sxXSxuYW1lOnYudmFsdWVMYWJlbCx0ZXh0OlttLmxhYmVsfHwiIix3K20uc291cmNlLmxhYmVsLFQrbS50YXJnZXQubGFiZWwsbS5jb25jZW50cmF0aW9uc2NhbGU/aythKCIlMC4yZiIpKG0uZmxvdy5sYWJlbENvbmNlbnRyYXRpb24pOiIiXS5maWx0ZXIoZikuam9pbigiPGJyPiIpLGNvbG9yOl8obywiYmdjb2xvciIpfHxsLmFkZE9wYWNpdHkobS5jb2xvciwxKSxib3JkZXJDb2xvcjpfKG8sImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpfKG8sImZvbnQuZmFtaWx5IiksZm9udFNpemU6XyhvLCJmb250LnNpemUiKSxmb250Q29sb3I6XyhvLCJmb250LmNvbG9yIiksbmFtZUxlbmd0aDpfKG8sIm5hbWVsZW5ndGgiKSx0ZXh0QWxpZ246XyhvLCJhbGlnbiIpLGlkZWFsQWxpZ246bi5ldmVudC54PGdbMF0/InJpZ2h0IjoibGVmdCIsaG92ZXJ0ZW1wbGF0ZTpvLmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczp2LGV2ZW50RGF0YTpbbV19KX19cy5sb25lSG92ZXIoYyx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDp0LGFuY2hvckluZGV4OnV9KS5lYWNoKChmdW5jdGlvbigpe2kubGluay5jb25jZW50cmF0aW9uc2NhbGV8fHAodGhpcywuNjUpLGQodGhpcyl9KSl9fWZ1bmN0aW9uIHkodCl7dmFyIGUscjt0LmNpcmN1bGFyPyhlPSh0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50K3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50KS8yLHI9dC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCk6KGU9KHQuc291cmNlLngxK3QudGFyZ2V0LngwKS8yLHI9KHQueTArdC55MSkvMik7dmFyIG49W2Uscl07cmV0dXJuInYiPT09dC50cmFjZS5vcmllbnRhdGlvbiYmbi5yZXZlcnNlKCksblswXSs9aS5wYXJlbnQudHJhbnNsYXRlWCxuWzFdKz1pLnBhcmVudC50cmFuc2xhdGVZLG59fSx1bmhvdmVyOmZ1bmN0aW9uKGUsaSxhKXshMSE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlJiYobi5zZWxlY3QoZSkuY2FsbChiLmJpbmQoMCxpLGEsITApKSwic2tpcCIhPT1pLmxpbmsudHJhY2UubGluay5ob3ZlcmluZm8mJihpLmxpbmsuZnVsbERhdGE9aS5saW5rLnRyYWNlLHQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDpuLmV2ZW50LHBvaW50czpbaS5saW5rXX0pKSxzLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSl9LHNlbGVjdDpmdW5jdGlvbihlLHIpe3ZhciBpPXIubGluaztpLm9yaWdpbmFsRXZlbnQ9bi5ldmVudCx0Ll9ob3ZlcmRhdGE9W2ldLHMuY2xpY2sodCx7dGFyZ2V0OiEwfSl9fSxub2RlRXZlbnRzOntob3ZlcjpmdW5jdGlvbihlLHIsaSl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwodixyLGkpLCJza2lwIiE9PXIubm9kZS50cmFjZS5ub2RlLmhvdmVyaW5mbyYmKHIubm9kZS5mdWxsRGF0YT1yLm5vZGUudHJhY2UsdC5lbWl0KCJwbG90bHlfaG92ZXIiLHtldmVudDpuLmV2ZW50LHBvaW50czpbci5ub2RlXX0pKSl9LGZvbGxvdzpmdW5jdGlvbihlLGkpe2lmKCExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUpe3ZhciBvPWkubm9kZS50cmFjZS5ub2RlO2lmKCJub25lIiE9PW8uaG92ZXJpbmZvJiYic2tpcCIhPT1vLmhvdmVyaW5mbyl7dmFyIGw9bi5zZWxlY3QoZSkuc2VsZWN0KCIuIitjLm5vZGVSZWN0KSx1PXQuX2Z1bGxMYXlvdXQuX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPWwubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG09aC5sZWZ0LTItdS5sZWZ0LGc9aC5yaWdodCsyLXUubGVmdCx2PWgudG9wK2guaGVpZ2h0LzQtdS50b3AseT17dmFsdWVMYWJlbDphKGkudmFsdWVGb3JtYXQpKGkubm9kZS52YWx1ZSkraS52YWx1ZVN1ZmZpeH07aS5ub2RlLmZ1bGxEYXRhPWkubm9kZS50cmFjZSx0Ll9mdWxsTGF5b3V0Ll9jYWxjSW52ZXJzZVRyYW5zZm9ybSh0KTt2YXIgeD10Ll9mdWxsTGF5b3V0Ll9pbnZTY2FsZVgsYj10Ll9mdWxsTGF5b3V0Ll9pbnZTY2FsZVksdz1zLmxvbmVIb3Zlcih7eDA6eCptLHgxOngqZyx5OmIqdixuYW1lOmEoaS52YWx1ZUZvcm1hdCkoaS5ub2RlLnZhbHVlKStpLnZhbHVlU3VmZml4LHRleHQ6W2kubm9kZS5sYWJlbCxBK2kubm9kZS50YXJnZXRMaW5rcy5sZW5ndGgsTStpLm5vZGUuc291cmNlTGlua3MubGVuZ3RoXS5maWx0ZXIoZikuam9pbigiPGJyPiIpLGNvbG9yOl8obywiYmdjb2xvciIpfHxpLnRpbnlDb2xvckh1ZSxib3JkZXJDb2xvcjpfKG8sImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpfKG8sImZvbnQuZmFtaWx5IiksZm9udFNpemU6XyhvLCJmb250LnNpemUiKSxmb250Q29sb3I6XyhvLCJmb250LmNvbG9yIiksbmFtZUxlbmd0aDpfKG8sIm5hbWVsZW5ndGgiKSx0ZXh0QWxpZ246XyhvLCJhbGlnbiIpLGlkZWFsQWxpZ246ImxlZnQiLGhvdmVydGVtcGxhdGU6by5ob3ZlcnRlbXBsYXRlLGhvdmVydGVtcGxhdGVMYWJlbHM6eSxldmVudERhdGE6W2kubm9kZV19LHtjb250YWluZXI6ci5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6ci5fcGFwZXIubm9kZSgpLGdkOnR9KTtwKHcsLjg1KSxkKHcpfX19LHVuaG92ZXI6ZnVuY3Rpb24oZSxpLGEpeyExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUmJihuLnNlbGVjdChlKS5jYWxsKHksaSxhKSwic2tpcCIhPT1pLm5vZGUudHJhY2Uubm9kZS5ob3ZlcmluZm8mJihpLm5vZGUuZnVsbERhdGE9aS5ub2RlLnRyYWNlLHQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDpuLmV2ZW50LHBvaW50czpbaS5ub2RlXX0pKSxzLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSl9LHNlbGVjdDpmdW5jdGlvbihlLHIsaSl7dmFyIGE9ci5ub2RlO2Eub3JpZ2luYWxFdmVudD1uLmV2ZW50LHQuX2hvdmVyZGF0YT1bYV0sbi5zZWxlY3QoZSkuY2FsbCh5LHIsaSkscy5jbGljayh0LHt0YXJnZXQ6ITB9KX19fSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29tcG9uZW50cy9meCI6Njc5LCIuLi8uLi9saWIiOjc3NiwiLi9jb25zdGFudHMiOjExODQsIi4vcmVuZGVyIjoxMTg4LCJAcGxvdGx5L2QzIjo1OH1dLDExODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMtZm9yY2UiKSxpPXQoImQzLWludGVycG9sYXRlIikuaW50ZXJwb2xhdGVOdW1iZXIsYT10KCJAcGxvdGx5L2QzIiksbz10KCJAcGxvdGx5L2QzLXNhbmtleSIpLHM9dCgiQHBsb3RseS9kMy1zYW5rZXktY2lyY3VsYXIiKSxsPXQoIi4vY29uc3RhbnRzIiksYz10KCJ0aW55Y29sb3IyIiksdT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksZj10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxoPXQoIi4uLy4uL2xpYiIpLHA9aC5zdHJUcmFuc2xhdGUsZD1oLnN0clJvdGF0ZSxtPXQoIi4uLy4uL2xpYi9ndXAiKSxnPW0ua2V5RnVuLHY9bS5yZXBlYXQseT1tLnVud3JhcCx4PXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGI9dCgiLi4vLi4vcmVnaXN0cnkiKSxfPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSx3PV8uQ0FQX1NISUZULFQ9Xy5MSU5FX1NQQUNJTkc7ZnVuY3Rpb24gayh0LGUscil7dmFyIG4saT15KGUpLGE9aS50cmFjZSx1PWEuZG9tYWluLGY9ImgiPT09YS5vcmllbnRhdGlvbixwPWEubm9kZS5wYWQsZD1hLm5vZGUudGhpY2tuZXNzLG09dC53aWR0aCoodS54WzFdLXUueFswXSksZz10LmhlaWdodCoodS55WzFdLXUueVswXSksdj1pLl9ub2Rlcyx4PWkuX2xpbmtzLGI9aS5jaXJjdWxhcjsobj1iP3Muc2Fua2V5Q2lyY3VsYXIoKS5jaXJjdWxhckxpbmtHYXAoMCk6by5zYW5rZXkoKSkuaXRlcmF0aW9ucyhsLnNhbmtleUl0ZXJhdGlvbnMpLnNpemUoZj9bbSxnXTpbZyxtXSkubm9kZVdpZHRoKGQpLm5vZGVQYWRkaW5nKHApLm5vZGVJZCgoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9pbnROdW1iZXJ9KSkubm9kZXModikubGlua3MoeCk7dmFyIF8sdyxULGs9bigpO2Zvcih2YXIgQSBpbiBuLm5vZGVQYWRkaW5nKCk8cCYmaC53YXJuKCJub2RlLnBhZCB3YXMgcmVkdWNlZCB0byAiLG4ubm9kZVBhZGRpbmcoKSwiIHRvIGZpdCB3aXRoaW4gdGhlIGZpZ3VyZS4iKSxpLl9ncm91cExvb2t1cCl7dmFyIE0sUz1wYXJzZUludChpLl9ncm91cExvb2t1cFtBXSk7Zm9yKF89MDtfPGsubm9kZXMubGVuZ3RoO18rKylpZihrLm5vZGVzW19dLnBvaW50TnVtYmVyPT09Uyl7TT1rLm5vZGVzW19dO2JyZWFrfWlmKE0pe3ZhciBFPXtwb2ludE51bWJlcjpwYXJzZUludChBKSx4MDpNLngwLHgxOk0ueDEseTA6TS55MCx5MTpNLnkxLHBhcnRPZkdyb3VwOiEwLHNvdXJjZUxpbmtzOltdLHRhcmdldExpbmtzOltdfTtrLm5vZGVzLnVuc2hpZnQoRSksTS5jaGlsZHJlbk5vZGVzLnVuc2hpZnQoRSl9fWlmKGZ1bmN0aW9uKCl7Zm9yKF89MDtfPGsubm9kZXMubGVuZ3RoO18rKyl7dmFyIHQsZSxyPWsubm9kZXNbX10sbj17fTtmb3Iodz0wO3c8ci50YXJnZXRMaW5rcy5sZW5ndGg7dysrKXQ9KGU9ci50YXJnZXRMaW5rc1t3XSkuc291cmNlLnBvaW50TnVtYmVyKyI6IitlLnRhcmdldC5wb2ludE51bWJlcixuLmhhc093blByb3BlcnR5KHQpfHwoblt0XT1bXSksblt0XS5wdXNoKGUpO3ZhciBpPU9iamVjdC5rZXlzKG4pO2Zvcih3PTA7dzxpLmxlbmd0aDt3Kyspe3ZhciBhPW5bdD1pW3ddXSxvPTAscz17fTtmb3IoVD0wO1Q8YS5sZW5ndGg7VCsrKXNbKGU9YVtUXSkubGFiZWxdfHwoc1tlLmxhYmVsXT0wKSxzW2UubGFiZWxdKz1lLnZhbHVlLG8rPWUudmFsdWU7Zm9yKFQ9MDtUPGEubGVuZ3RoO1QrKykoZT1hW1RdKS5mbG93PXt2YWx1ZTpvLGxhYmVsQ29uY2VudHJhdGlvbjpzW2UubGFiZWxdL28sY29uY2VudHJhdGlvbjplLnZhbHVlL28sbGlua3M6YX0sZS5jb25jZW50cmF0aW9uc2NhbGUmJihlLmNvbG9yPWMoZS5jb25jZW50cmF0aW9uc2NhbGUoZS5mbG93LmxhYmVsQ29uY2VudHJhdGlvbikpKX12YXIgbD0wO2Zvcih3PTA7dzxyLnNvdXJjZUxpbmtzLmxlbmd0aDt3KyspbCs9ci5zb3VyY2VMaW5rc1t3XS52YWx1ZTtmb3Iodz0wO3c8ci5zb3VyY2VMaW5rcy5sZW5ndGg7dysrKShlPXIuc291cmNlTGlua3Nbd10pLmNvbmNlbnRyYXRpb25PdXQ9ZS52YWx1ZS9sO3ZhciB1PTA7Zm9yKHc9MDt3PHIudGFyZ2V0TGlua3MubGVuZ3RoO3crKyl1Kz1yLnRhcmdldExpbmtzW3ddLnZhbHVlO2Zvcih3PTA7dzxyLnRhcmdldExpbmtzLmxlbmd0aDt3KyspKGU9ci50YXJnZXRMaW5rc1t3XSkuY29uY2VucmF0aW9uSW49ZS52YWx1ZS91fX0oKSxhLm5vZGUueC5sZW5ndGgmJmEubm9kZS55Lmxlbmd0aCl7Zm9yKF89MDtfPE1hdGgubWluKGEubm9kZS54Lmxlbmd0aCxhLm5vZGUueS5sZW5ndGgsay5ub2Rlcy5sZW5ndGgpO18rKylpZihhLm5vZGUueFtfXSYmYS5ub2RlLnlbX10pe3ZhciBMPVthLm5vZGUueFtfXSptLGEubm9kZS55W19dKmddO2subm9kZXNbX10ueDA9TFswXS1kLzIsay5ub2Rlc1tfXS54MT1MWzBdK2QvMjt2YXIgQz1rLm5vZGVzW19dLnkxLWsubm9kZXNbX10ueTA7ay5ub2Rlc1tfXS55MD1MWzFdLUMvMixrLm5vZGVzW19dLnkxPUxbMV0rQy8yfWlmKCJzbmFwIj09PWEuYXJyYW5nZW1lbnQpIWZ1bmN0aW9uKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGUscixuLGk9MCxhPXQubGVuZ3RoO2Zvcih0LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueTAtZS55MH0pKSxuPTA7bjxhOysrbikoZT10W25dKS55MD49aXx8KHI9aS1lLnkwKT4xZS02JiYoZS55MCs9cixlLnkxKz1yKSxpPWUueTErcH0pKX0oZnVuY3Rpb24odCl7dmFyIGUscixuPXQubWFwKChmdW5jdGlvbih0LGUpe3JldHVybnt4MDp0LngwLGluZGV4OmV9fSkpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueDAtZS54MH0pKSxpPVtdLGE9LTEsbz0tMS8wO2ZvcihfPTA7XzxuLmxlbmd0aDtfKyspe3ZhciBzPXRbbltfXS5pbmRleF07cy54MD5vK2QmJihhKz0xLGU9cy54MCksbz1zLngwLGlbYV18fChpW2FdPVtdKSxpW2FdLnB1c2gocykscj1lLXMueDAscy54MCs9cixzLngxKz1yfXJldHVybiBpfSh2PWsubm9kZXMpKTtuLnVwZGF0ZShrKX1yZXR1cm57Y2lyY3VsYXI6YixrZXk6cix0cmFjZTphLGd1aWQ6aC5yYW5kc3RyKCksaG9yaXpvbnRhbDpmLHdpZHRoOm0saGVpZ2h0Omcsbm9kZVBhZDphLm5vZGUucGFkLG5vZGVMaW5lQ29sb3I6YS5ub2RlLmxpbmUuY29sb3Isbm9kZUxpbmVXaWR0aDphLm5vZGUubGluZS53aWR0aCxsaW5rTGluZUNvbG9yOmEubGluay5saW5lLmNvbG9yLGxpbmtMaW5lV2lkdGg6YS5saW5rLmxpbmUud2lkdGgsdmFsdWVGb3JtYXQ6YS52YWx1ZWZvcm1hdCx2YWx1ZVN1ZmZpeDphLnZhbHVlc3VmZml4LHRleHRGb250OmEudGV4dGZvbnQsdHJhbnNsYXRlWDp1LnhbMF0qdC53aWR0aCt0Lm1hcmdpbi5sLHRyYW5zbGF0ZVk6dC5oZWlnaHQtdS55WzFdKnQuaGVpZ2h0K3QubWFyZ2luLnQsZHJhZ1BhcmFsbGVsOmY/ZzptLGRyYWdQZXJwZW5kaWN1bGFyOmY/bTpnLGFycmFuZ2VtZW50OmEuYXJyYW5nZW1lbnQsc2Fua2V5Om4sZ3JhcGg6ayxmb3JjZUxheW91dHM6e30saW50ZXJhY3Rpb25TdGF0ZTp7ZHJhZ0luUHJvZ3Jlc3M6ITEsaG92ZXJlZDohMX19fWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPWMoZS5jb2xvciksaT1lLnNvdXJjZS5sYWJlbCsifCIrZS50YXJnZXQubGFiZWwrIl9fIityO3JldHVybiBlLnRyYWNlPXQudHJhY2UsZS5jdXJ2ZU51bWJlcj10LnRyYWNlLmluZGV4LHtjaXJjdWxhcjp0LmNpcmN1bGFyLGtleTppLHRyYWNlSWQ6dC5rZXkscG9pbnROdW1iZXI6ZS5wb2ludE51bWJlcixsaW5rOmUsdGlueUNvbG9ySHVlOnUudGlueVJHQihuKSx0aW55Q29sb3JBbHBoYTpuLmdldEFscGhhKCksbGlua1BhdGg6TSxsaW5rTGluZUNvbG9yOnQubGlua0xpbmVDb2xvcixsaW5rTGluZVdpZHRoOnQubGlua0xpbmVXaWR0aCx2YWx1ZUZvcm1hdDp0LnZhbHVlRm9ybWF0LHZhbHVlU3VmZml4OnQudmFsdWVTdWZmaXgsc2Fua2V5OnQuc2Fua2V5LHBhcmVudDp0LGludGVyYWN0aW9uU3RhdGU6dC5pbnRlcmFjdGlvblN0YXRlLGZsb3c6ZS5mbG93fX1mdW5jdGlvbiBNKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQubGluay5jaXJjdWxhcilyZXR1cm4gZT10Lmxpbmsscj1lLndpZHRoLzIsbj1lLmNpcmN1bGFyUGF0aERhdGEsInRvcCI9PT1lLmNpcmN1bGFyTGlua1R5cGU/Ik0gIituLnRhcmdldFgrIiAiKyhuLnRhcmdldFkrcikrIiBMIituLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhuLnRhcmdldFkrcikrIkEiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrcikrIiAiKyhuLnJpZ2h0U21hbGxBcmNSYWRpdXMrcikrIiAwIDAgMSAiKyhuLnJpZ2h0RnVsbEV4dGVudC1yKSsiICIrKG4udGFyZ2V0WS1uLnJpZ2h0U21hbGxBcmNSYWRpdXMpKyJMIisobi5yaWdodEZ1bGxFeHRlbnQtcikrIiAiK24udmVydGljYWxSaWdodElubmVyRXh0ZW50KyJBIisobi5yaWdodExhcmdlQXJjUmFkaXVzK3IpKyIgIisobi5yaWdodExhcmdlQXJjUmFkaXVzK3IpKyIgMCAwIDEgIituLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhuLnZlcnRpY2FsRnVsbEV4dGVudC1yKSsiTCIrbi5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhuLnZlcnRpY2FsRnVsbEV4dGVudC1yKSsiQSIrKG4ubGVmdExhcmdlQXJjUmFkaXVzK3IpKyIgIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMrcikrIiAwIDAgMSAiKyhuLmxlZnRGdWxsRXh0ZW50K3IpKyIgIituLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50KyJMIisobi5sZWZ0RnVsbEV4dGVudCtyKSsiICIrKG4uc291cmNlWS1uLmxlZnRTbWFsbEFyY1JhZGl1cykrIkEiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cytyKSsiICIrKG4ubGVmdFNtYWxsQXJjUmFkaXVzK3IpKyIgMCAwIDEgIituLmxlZnRJbm5lckV4dGVudCsiICIrKG4uc291cmNlWStyKSsiTCIrbi5zb3VyY2VYKyIgIisobi5zb3VyY2VZK3IpKyJMIituLnNvdXJjZVgrIiAiKyhuLnNvdXJjZVktcikrIkwiK24ubGVmdElubmVyRXh0ZW50KyIgIisobi5zb3VyY2VZLXIpKyJBIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMtcikrIiAiKyhuLmxlZnRTbWFsbEFyY1JhZGl1cy1yKSsiIDAgMCAwICIrKG4ubGVmdEZ1bGxFeHRlbnQtcikrIiAiKyhuLnNvdXJjZVktbi5sZWZ0U21hbGxBcmNSYWRpdXMpKyJMIisobi5sZWZ0RnVsbEV4dGVudC1yKSsiICIrbi52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCsiQSIrKG4ubGVmdExhcmdlQXJjUmFkaXVzLXIpKyIgIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMtcikrIiAwIDAgMCAiK24ubGVmdElubmVyRXh0ZW50KyIgIisobi52ZXJ0aWNhbEZ1bGxFeHRlbnQrcikrIkwiK24ucmlnaHRJbm5lckV4dGVudCsiICIrKG4udmVydGljYWxGdWxsRXh0ZW50K3IpKyJBIisobi5yaWdodExhcmdlQXJjUmFkaXVzLXIpKyIgIisobi5yaWdodExhcmdlQXJjUmFkaXVzLXIpKyIgMCAwIDAgIisobi5yaWdodEZ1bGxFeHRlbnQrcikrIiAiK24udmVydGljYWxSaWdodElubmVyRXh0ZW50KyJMIisobi5yaWdodEZ1bGxFeHRlbnQrcikrIiAiKyhuLnRhcmdldFktbi5yaWdodFNtYWxsQXJjUmFkaXVzKSsiQSIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cy1yKSsiICIrKG4ucmlnaHRTbWFsbEFyY1JhZGl1cy1yKSsiIDAgMCAwICIrbi5yaWdodElubmVyRXh0ZW50KyIgIisobi50YXJnZXRZLXIpKyJMIituLnRhcmdldFgrIiAiKyhuLnRhcmdldFktcikrIloiOiJNICIrbi50YXJnZXRYKyIgIisobi50YXJnZXRZLXIpKyIgTCIrbi5yaWdodElubmVyRXh0ZW50KyIgIisobi50YXJnZXRZLXIpKyJBIisobi5yaWdodExhcmdlQXJjUmFkaXVzK3IpKyIgIisobi5yaWdodFNtYWxsQXJjUmFkaXVzK3IpKyIgMCAwIDAgIisobi5yaWdodEZ1bGxFeHRlbnQtcikrIiAiKyhuLnRhcmdldFkrbi5yaWdodFNtYWxsQXJjUmFkaXVzKSsiTCIrKG4ucmlnaHRGdWxsRXh0ZW50LXIpKyIgIituLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCsiQSIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cytyKSsiICIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cytyKSsiIDAgMCAwICIrbi5yaWdodElubmVyRXh0ZW50KyIgIisobi52ZXJ0aWNhbEZ1bGxFeHRlbnQrcikrIkwiK24ubGVmdElubmVyRXh0ZW50KyIgIisobi52ZXJ0aWNhbEZ1bGxFeHRlbnQrcikrIkEiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cytyKSsiICIrKG4ubGVmdExhcmdlQXJjUmFkaXVzK3IpKyIgMCAwIDAgIisobi5sZWZ0RnVsbEV4dGVudCtyKSsiICIrbi52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCsiTCIrKG4ubGVmdEZ1bGxFeHRlbnQrcikrIiAiKyhuLnNvdXJjZVkrbi5sZWZ0U21hbGxBcmNSYWRpdXMpKyJBIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMrcikrIiAiKyhuLmxlZnRTbWFsbEFyY1JhZGl1cytyKSsiIDAgMCAwICIrbi5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhuLnNvdXJjZVktcikrIkwiK24uc291cmNlWCsiICIrKG4uc291cmNlWS1yKSsiTCIrbi5zb3VyY2VYKyIgIisobi5zb3VyY2VZK3IpKyJMIituLmxlZnRJbm5lckV4dGVudCsiICIrKG4uc291cmNlWStyKSsiQSIrKG4ubGVmdExhcmdlQXJjUmFkaXVzLXIpKyIgIisobi5sZWZ0U21hbGxBcmNSYWRpdXMtcikrIiAwIDAgMSAiKyhuLmxlZnRGdWxsRXh0ZW50LXIpKyIgIisobi5zb3VyY2VZK24ubGVmdFNtYWxsQXJjUmFkaXVzKSsiTCIrKG4ubGVmdEZ1bGxFeHRlbnQtcikrIiAiK24udmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrIkEiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cy1yKSsiICIrKG4ubGVmdExhcmdlQXJjUmFkaXVzLXIpKyIgMCAwIDEgIituLmxlZnRJbm5lckV4dGVudCsiICIrKG4udmVydGljYWxGdWxsRXh0ZW50LXIpKyJMIituLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhuLnZlcnRpY2FsRnVsbEV4dGVudC1yKSsiQSIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cy1yKSsiICIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cy1yKSsiIDAgMCAxICIrKG4ucmlnaHRGdWxsRXh0ZW50K3IpKyIgIituLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCsiTCIrKG4ucmlnaHRGdWxsRXh0ZW50K3IpKyIgIisobi50YXJnZXRZK24ucmlnaHRTbWFsbEFyY1JhZGl1cykrIkEiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtcikrIiAiKyhuLnJpZ2h0U21hbGxBcmNSYWRpdXMtcikrIiAwIDAgMSAiK24ucmlnaHRJbm5lckV4dGVudCsiICIrKG4udGFyZ2V0WStyKSsiTCIrbi50YXJnZXRYKyIgIisobi50YXJnZXRZK3IpKyJaIjt2YXIgZSxyLG4sYT10Lmxpbmsuc291cmNlLngxLG89dC5saW5rLnRhcmdldC54MCxzPWkoYSxvKSxsPXMoLjUpLGM9cyguNSksdT10LmxpbmsueTAtdC5saW5rLndpZHRoLzIsZj10LmxpbmsueTArdC5saW5rLndpZHRoLzIsaD10LmxpbmsueTEtdC5saW5rLndpZHRoLzIscD10LmxpbmsueTErdC5saW5rLndpZHRoLzI7cmV0dXJuIk0iK2ErIiwiK3UrIkMiK2wrIiwiK3UrIiAiK2MrIiwiK2grIiAiK28rIiwiK2grIkwiK28rIiwiK3ArIkMiK2MrIiwiK3ArIiAiK2wrIiwiK2YrIiAiK2ErIiwiK2YrIloifX1mdW5jdGlvbiBTKHQsZSl7dmFyIHI9YyhlLmNvbG9yKSxuPWwubm9kZVBhZEFjcm9zcyxpPXQubm9kZVBhZC8yO2UuZHg9ZS54MS1lLngwLGUuZHk9ZS55MS1lLnkwO3ZhciBhPWUuZHgsbz1NYXRoLm1heCguNSxlLmR5KSxzPSJub2RlXyIrZS5wb2ludE51bWJlcjtyZXR1cm4gZS5ncm91cCYmKHM9aC5yYW5kc3RyKCkpLGUudHJhY2U9dC50cmFjZSxlLmN1cnZlTnVtYmVyPXQudHJhY2UuaW5kZXgse2luZGV4OmUucG9pbnROdW1iZXIsa2V5OnMscGFydE9mR3JvdXA6ZS5wYXJ0T2ZHcm91cHx8ITEsZ3JvdXA6ZS5ncm91cCx0cmFjZUlkOnQua2V5LHRyYWNlOnQudHJhY2Usbm9kZTplLG5vZGVQYWQ6dC5ub2RlUGFkLG5vZGVMaW5lQ29sb3I6dC5ub2RlTGluZUNvbG9yLG5vZGVMaW5lV2lkdGg6dC5ub2RlTGluZVdpZHRoLHRleHRGb250OnQudGV4dEZvbnQsc2l6ZTp0Lmhvcml6b250YWw/dC5oZWlnaHQ6dC53aWR0aCx2aXNpYmxlV2lkdGg6TWF0aC5jZWlsKGEpLHZpc2libGVIZWlnaHQ6byx6b25lWDotbix6b25lWTotaSx6b25lV2lkdGg6YSsyKm4sem9uZUhlaWdodDpvKzIqaSxsYWJlbFk6dC5ob3Jpem9udGFsP2UuZHkvMisxOmUuZHgvMisxLGxlZnQ6MT09PWUub3JpZ2luYWxMYXllcixzaXplQWNyb3NzOnQud2lkdGgsZm9yY2VMYXlvdXRzOnQuZm9yY2VMYXlvdXRzLGhvcml6b250YWw6dC5ob3Jpem9udGFsLGRhcmtCYWNrZ3JvdW5kOnIuZ2V0QnJpZ2h0bmVzcygpPD0xMjgsdGlueUNvbG9ySHVlOnUudGlueVJHQihyKSx0aW55Q29sb3JBbHBoYTpyLmdldEFscGhhKCksdmFsdWVGb3JtYXQ6dC52YWx1ZUZvcm1hdCx2YWx1ZVN1ZmZpeDp0LnZhbHVlU3VmZml4LHNhbmtleTp0LnNhbmtleSxncmFwaDp0LmdyYXBoLGFycmFuZ2VtZW50OnQuYXJyYW5nZW1lbnQsdW5pcXVlTm9kZUxhYmVsUGF0aElkOlt0Lmd1aWQsdC5rZXksc10uam9pbigiXyIpLGludGVyYWN0aW9uU3RhdGU6dC5pbnRlcmFjdGlvblN0YXRlLGZpZ3VyZTp0fX1mdW5jdGlvbiBFKHQpe3QuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIHAodC5ub2RlLngwLnRvRml4ZWQoMyksdC5ub2RlLnkwLnRvRml4ZWQoMykpfSkpfWZ1bmN0aW9uIEwodCl7dC5jYWxsKEUpfWZ1bmN0aW9uIEModCxlKXt0LmNhbGwoTCksZS5hdHRyKCJkIixNKCkpfWZ1bmN0aW9uIFAodCl7dC5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGUueDEtdC5ub2RlLngwfSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGVIZWlnaHR9KSl9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gdC5saW5rLndpZHRoPjF8fHQubGlua0xpbmVXaWR0aD4wfWZ1bmN0aW9uIE8odCl7cmV0dXJuIHAodC50cmFuc2xhdGVYLHQudHJhbnNsYXRlWSkrKHQuaG9yaXpvbnRhbD8ibWF0cml4KDEgMCAwIDEgMCAwKSI6Im1hdHJpeCgwIDEgMSAwIDAgMCkiKX1mdW5jdGlvbiB6KHQsZSxyKXt0Lm9uKCIuYmFzaWMiLG51bGwpLm9uKCJtb3VzZW92ZXIuYmFzaWMiLChmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHQucGFydE9mR3JvdXB8fChyLmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD1bdGhpcyx0XSl9KSkub24oIm1vdXNlbW92ZS5iYXNpYyIsKGZ1bmN0aW9uKHQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzc3x8dC5wYXJ0T2ZHcm91cHx8KHIuZm9sbG93KHRoaXMsdCksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9W3RoaXMsdF0pfSkpLm9uKCJtb3VzZW91dC5iYXNpYyIsKGZ1bmN0aW9uKHQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzc3x8dC5wYXJ0T2ZHcm91cHx8KHIudW5ob3Zlcih0aGlzLHQsZSksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9ITEpfSkpLm9uKCJjbGljay5iYXNpYyIsKGZ1bmN0aW9uKHQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkJiYoci51bmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSksdC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHx0LnBhcnRPZkdyb3VwfHxyLnNlbGVjdCh0aGlzLHQsZSl9KSl9ZnVuY3Rpb24gRCh0LGUscixpKXt2YXIgbz1hLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oKGZ1bmN0aW9uKHQpe3JldHVybnt4OnQubm9kZS54MCt0LnZpc2libGVXaWR0aC8yLHk6dC5ub2RlLnkwK3QudmlzaWJsZUhlaWdodC8yfX0pKS5vbigiZHJhZ3N0YXJ0IiwoZnVuY3Rpb24oYSl7aWYoImZpeGVkIiE9PWEuYXJyYW5nZW1lbnQmJihoLmVuc3VyZVNpbmdsZShpLl9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIsImciLCJkcmFnY292ZXIiLChmdW5jdGlvbih0KXtpLl9mdWxsTGF5b3V0Ll9kcmFnQ292ZXI9dH0pKSxoLnJhaXNlVG9Ub3AodGhpcyksYS5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzPWEubm9kZSxGKGEubm9kZSksYS5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQmJihyLm5vZGVFdmVudHMudW5ob3Zlci5hcHBseSgwLGEuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkKSxhLmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSksInNuYXAiPT09YS5hcnJhbmdlbWVudCkpe3ZhciBvPWEudHJhY2VJZCsifCIrYS5rZXk7YS5mb3JjZUxheW91dHNbb10/YS5mb3JjZUxheW91dHNbb10uYWxwaGEoMSk6ZnVuY3Rpb24odCxlLHIsaSl7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ueT0odFtlXS55MCt0W2VdLnkxKS8yLHRbZV0ueD0odFtlXS54MCt0W2VdLngxKS8yfShyLmdyYXBoLm5vZGVzKTt2YXIgYT1yLmdyYXBoLm5vZGVzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQub3JpZ2luYWxYPT09ci5ub2RlLm9yaWdpbmFsWH0pKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiF0LnBhcnRPZkdyb3VwfSkpO3IuZm9yY2VMYXlvdXRzW2VdPW4uZm9yY2VTaW11bGF0aW9uKGEpLmFscGhhRGVjYXkoMCkuZm9yY2UoImNvbGxpZGUiLG4uZm9yY2VDb2xsaWRlKCkucmFkaXVzKChmdW5jdGlvbih0KXtyZXR1cm4gdC5keS8yK3Iubm9kZVBhZC8yfSkpLnN0cmVuZ3RoKDEpLml0ZXJhdGlvbnMobC5mb3JjZUl0ZXJhdGlvbnMpKS5mb3JjZSgiY29uc3RyYWluIixmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV07YT09PW4uaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcz8oYS54PWEubGFzdERyYWdnZWRYLGEueT1hLmxhc3REcmFnZ2VkWSk6KGEudng9KGEub3JpZ2luYWxYLWEueCkvbC5mb3JjZVRpY2tzUGVyRnJhbWUsYS55PU1hdGgubWluKG4uc2l6ZS1hLmR5LzIsTWF0aC5tYXgoYS5keS8yLGEueSkpKSx0PU1hdGgubWF4KHQsTWF0aC5hYnMoYS52eCksTWF0aC5hYnMoYS52eSkpfSFuLmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3MmJnQ8LjEmJm4uZm9yY2VMYXlvdXRzW2VdLmFscGhhKCk+MCYmbi5mb3JjZUxheW91dHNbZV0uYWxwaGEoMCl9fSgwLGUsYSxyKSkuc3RvcCgpfSgwLG8sYSksZnVuY3Rpb24odCxlLHIsbixpKXt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbiBhKCl7dmFyIG87Zm9yKG89MDtvPGwuZm9yY2VUaWNrc1BlckZyYW1lO28rKylyLmZvcmNlTGF5b3V0c1tuXS50aWNrKCk7aWYoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS55MD10W2VdLnktdFtlXS5keS8yLHRbZV0ueTE9dFtlXS55MCt0W2VdLmR5LHRbZV0ueDA9dFtlXS54LXRbZV0uZHgvMix0W2VdLngxPXRbZV0ueDArdFtlXS5keH0oci5ncmFwaC5ub2Rlcyksci5zYW5rZXkudXBkYXRlKHIuZ3JhcGgpLEModC5maWx0ZXIoQihyKSksZSksci5mb3JjZUxheW91dHNbbl0uYWxwaGEoKT4wKXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYSk7ZWxzZXt2YXIgcz1yLm5vZGUub3JpZ2luYWxYO3Iubm9kZS54MD1zLXIudmlzaWJsZVdpZHRoLzIsci5ub2RlLngxPXMrci52aXNpYmxlV2lkdGgvMixSKHIsaSl9fSkpfSh0LGUsYSxvLGkpfX0pKS5vbigiZHJhZyIsKGZ1bmN0aW9uKHIpe2lmKCJmaXhlZCIhPT1yLmFycmFuZ2VtZW50KXt2YXIgbj1hLmV2ZW50LngsaT1hLmV2ZW50Lnk7InNuYXAiPT09ci5hcnJhbmdlbWVudD8oci5ub2RlLngwPW4tci52aXNpYmxlV2lkdGgvMixyLm5vZGUueDE9bityLnZpc2libGVXaWR0aC8yLHIubm9kZS55MD1pLXIudmlzaWJsZUhlaWdodC8yLHIubm9kZS55MT1pK3IudmlzaWJsZUhlaWdodC8yKTooImZyZWVmb3JtIj09PXIuYXJyYW5nZW1lbnQmJihyLm5vZGUueDA9bi1yLnZpc2libGVXaWR0aC8yLHIubm9kZS54MT1uK3IudmlzaWJsZVdpZHRoLzIpLGk9TWF0aC5tYXgoMCxNYXRoLm1pbihyLnNpemUtci52aXNpYmxlSGVpZ2h0LzIsaSkpLHIubm9kZS55MD1pLXIudmlzaWJsZUhlaWdodC8yLHIubm9kZS55MT1pK3IudmlzaWJsZUhlaWdodC8yKSxGKHIubm9kZSksInNuYXAiIT09ci5hcnJhbmdlbWVudCYmKHIuc2Fua2V5LnVwZGF0ZShyLmdyYXBoKSxDKHQuZmlsdGVyKEIocikpLGUpKX19KSkub24oImRyYWdlbmQiLChmdW5jdGlvbih0KXtpZigiZml4ZWQiIT09dC5hcnJhbmdlbWVudCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzPSExO2Zvcih2YXIgZT0wO2U8dC5ub2RlLmNoaWxkcmVuTm9kZXMubGVuZ3RoO2UrKyl0Lm5vZGUuY2hpbGRyZW5Ob2Rlc1tlXS54PXQubm9kZS54LHQubm9kZS5jaGlsZHJlbk5vZGVzW2VdLnk9dC5ub2RlLnk7InNuYXAiIT09dC5hcnJhbmdlbWVudCYmUih0LGkpfX0pKTt0Lm9uKCIuZHJhZyIsbnVsbCkuY2FsbChvKX1mdW5jdGlvbiBSKHQsZSl7Zm9yKHZhciByPVtdLG49W10saT0wO2k8dC5ncmFwaC5ub2Rlcy5sZW5ndGg7aSsrKXt2YXIgYT0odC5ncmFwaC5ub2Rlc1tpXS54MCt0LmdyYXBoLm5vZGVzW2ldLngxKS8yLG89KHQuZ3JhcGgubm9kZXNbaV0ueTArdC5ncmFwaC5ub2Rlc1tpXS55MSkvMjtyLnB1c2goYS90LmZpZ3VyZS53aWR0aCksbi5wdXNoKG8vdC5maWd1cmUuaGVpZ2h0KX1iLmNhbGwoIl9ndWlSZXN0eWxlIixlLHsibm9kZS54Ijpbcl0sIm5vZGUueSI6W25dfSx0LnRyYWNlLmluZGV4KS50aGVuKChmdW5jdGlvbigpe2UuX2Z1bGxMYXlvdXQuX2RyYWdDb3ZlciYmZS5fZnVsbExheW91dC5fZHJhZ0NvdmVyLnJlbW92ZSgpfSkpfWZ1bmN0aW9uIEYodCl7dC5sYXN0RHJhZ2dlZFg9dC54MCt0LmR4LzIsdC5sYXN0RHJhZ2dlZFk9dC55MCt0LmR5LzJ9ZnVuY3Rpb24gQih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZS5vcmlnaW5hbFg9PT10Lm5vZGUub3JpZ2luYWxYfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz0hMTtoLmVuc3VyZVNpbmdsZSh0Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIsImciLCJmaXJzdC1yZW5kZXIiLChmdW5jdGlvbigpe289ITB9KSk7dmFyIHM9dC5fZnVsbExheW91dC5fZHJhZ0NvdmVyLG09ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB5KHQpLnRyYWNlLnZpc2libGV9KSkubWFwKGsuYmluZChudWxsLG4pKSxiPWUuc2VsZWN0QWxsKCIuIitsLmNuLnNhbmtleSkuZGF0YShtLGcpO2IuZXhpdCgpLnJlbW92ZSgpLGIuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGwuY24uc2Fua2V5LCEwKS5zdHlsZSgiYm94LXNpemluZyIsImNvbnRlbnQtYm94Iikuc3R5bGUoInBvc2l0aW9uIiwiYWJzb2x1dGUiKS5zdHlsZSgibGVmdCIsMCkuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsImdlb21ldHJpY1ByZWNpc2lvbiIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImF1dG8iKS5hdHRyKCJ0cmFuc2Zvcm0iLE8pLGIuZWFjaCgoZnVuY3Rpb24oZSxyKXt0Ll9mdWxsRGF0YVtyXS5fc2Fua2V5PWU7dmFyIG49ImJnc2Fua2V5LSIrZS50cmFjZS51aWQrIi0iK3I7aC5lbnN1cmVTaW5nbGUodC5fZnVsbExheW91dC5fZHJhZ2dlcnMsInJlY3QiLG4pLHQuX2Z1bGxEYXRhW3JdLl9iZ1JlY3Q9YS5zZWxlY3QoIi4iK24pLHQuX2Z1bGxEYXRhW3JdLl9iZ1JlY3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigid2lkdGgiLGUud2lkdGgpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQpLmF0dHIoIngiLGUudHJhbnNsYXRlWCkuYXR0cigieSIsZS50cmFuc2xhdGVZKS5jbGFzc2VkKCJiZ3NhbmtleSIsITApLnN0eWxlKHtmaWxsOiJ0cmFuc3BhcmVudCIsInN0cm9rZS13aWR0aCI6MH0pfSkpLGIudHJhbnNpdGlvbigpLmVhc2UobC5lYXNlKS5kdXJhdGlvbihsLmR1cmF0aW9uKS5hdHRyKCJ0cmFuc2Zvcm0iLE8pO3ZhciBfPWIuc2VsZWN0QWxsKCIuIitsLmNuLnNhbmtleUxpbmtzKS5kYXRhKHYsZyk7Xy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobC5jbi5zYW5rZXlMaW5rcywhMCkuc3R5bGUoImZpbGwiLCJub25lIik7dmFyIEw9Xy5zZWxlY3RBbGwoIi4iK2wuY24uc2Fua2V5TGluaykuZGF0YSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ3JhcGgubGlua3MuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pKS5tYXAoQS5iaW5kKG51bGwsdCkpfSksZyk7TC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQobC5jbi5zYW5rZXlMaW5rLCEwKS5jYWxsKHosYixpLmxpbmtFdmVudHMpLEwuc3R5bGUoInN0cm9rZSIsKGZ1bmN0aW9uKHQpe3JldHVybiBJKHQpP3UudGlueVJHQihjKHQubGlua0xpbmVDb2xvcikpOnQudGlueUNvbG9ySHVlfSkpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiBJKHQpP3Uub3BhY2l0eSh0LmxpbmtMaW5lQ29sb3IpOnQudGlueUNvbG9yQWxwaGF9KSkuc3R5bGUoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JIdWV9KSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSkpLnN0eWxlKCJzdHJva2Utd2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gSSh0KT90LmxpbmtMaW5lV2lkdGg6MX0pKS5hdHRyKCJkIixNKCkpLEwuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbigpe3JldHVybiB0Ll9jb250ZXh0LnN0YXRpY1Bsb3R8fG98fHM/MTowfSkpLnRyYW5zaXRpb24oKS5lYXNlKGwuZWFzZSkuZHVyYXRpb24obC5kdXJhdGlvbikuc3R5bGUoIm9wYWNpdHkiLDEpLEwuZXhpdCgpLnRyYW5zaXRpb24oKS5lYXNlKGwuZWFzZSkuZHVyYXRpb24obC5kdXJhdGlvbikuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpO3ZhciBDPWIuc2VsZWN0QWxsKCIuIitsLmNuLnNhbmtleU5vZGVTZXQpLmRhdGEodixnKTtDLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChsLmNuLnNhbmtleU5vZGVTZXQsITApLEMuc3R5bGUoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3N3aXRjaCh0LmFycmFuZ2VtZW50KXtjYXNlImZpeGVkIjpyZXR1cm4iZGVmYXVsdCI7Y2FzZSJwZXJwZW5kaWN1bGFyIjpyZXR1cm4ibnMtcmVzaXplIjtkZWZhdWx0OnJldHVybiJtb3ZlIn19KSk7dmFyIFI9Qy5zZWxlY3RBbGwoIi4iK2wuY24uc2Fua2V5Tm9kZSkuZGF0YSgoZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaC5ub2RlcztyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGUscj1bXTtmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ub3JpZ2luYWxYPSh0W2VdLngwK3RbZV0ueDEpLzIsdFtlXS5vcmlnaW5hbFk9KHRbZV0ueTArdFtlXS55MSkvMiwtMT09PXIuaW5kZXhPZih0W2VdLm9yaWdpbmFsWCkmJnIucHVzaCh0W2VdLm9yaWdpbmFsWCk7Zm9yKHIuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpLGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLm9yaWdpbmFsTGF5ZXJJbmRleD1yLmluZGV4T2YodFtlXS5vcmlnaW5hbFgpLHRbZV0ub3JpZ2luYWxMYXllcj10W2VdLm9yaWdpbmFsTGF5ZXJJbmRleC8oci5sZW5ndGgtMSl9KGUpLGUubWFwKFMuYmluZChudWxsLHQpKX0pLGcpO1IuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGwuY24uc2Fua2V5Tm9kZSwhMCkuY2FsbChFKS5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKGUpe3JldHVybiF0Ll9jb250ZXh0LnN0YXRpY1Bsb3QmJiFvfHxlLnBhcnRPZkdyb3VwPzA6MX0pKSxSLmNhbGwoeixiLGkubm9kZUV2ZW50cykuY2FsbChELEwsaSx0KSxSLnRyYW5zaXRpb24oKS5lYXNlKGwuZWFzZSkuZHVyYXRpb24obC5kdXJhdGlvbikuY2FsbChFKS5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhcnRPZkdyb3VwPzA6MX0pKSxSLmV4aXQoKS50cmFuc2l0aW9uKCkuZWFzZShsLmVhc2UpLmR1cmF0aW9uKGwuZHVyYXRpb24pLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKTt2YXIgRj1SLnNlbGVjdEFsbCgiLiIrbC5jbi5ub2RlUmVjdCkuZGF0YSh2KTtGLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChsLmNuLm5vZGVSZWN0LCEwKS5jYWxsKFApLEYuc3R5bGUoInN0cm9rZS13aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVMaW5lV2lkdGh9KSkuc3R5bGUoInN0cm9rZSIsKGZ1bmN0aW9uKHQpe3JldHVybiB1LnRpbnlSR0IoYyh0Lm5vZGVMaW5lQ29sb3IpKX0pKS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdS5vcGFjaXR5KHQubm9kZUxpbmVDb2xvcil9KSkuc3R5bGUoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JIdWV9KSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSkpLEYudHJhbnNpdGlvbigpLmVhc2UobC5lYXNlKS5kdXJhdGlvbihsLmR1cmF0aW9uKS5jYWxsKFApO3ZhciBCPVIuc2VsZWN0QWxsKCIuIitsLmNuLm5vZGVMYWJlbCkuZGF0YSh2KTtCLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChsLmNuLm5vZGVMYWJlbCwhMCkuc3R5bGUoImN1cnNvciIsImRlZmF1bHQiKSxCLmF0dHIoImRhdGEtbm90ZXgiLDEpLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGUubGFiZWx9KSkuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9YS5zZWxlY3QodGhpcyk7Zi5mb250KHIsZS50ZXh0Rm9udCkseC5jb252ZXJ0VG9Uc3BhbnMocix0KX0pKS5zdHlsZSgidGV4dC1zaGFkb3ciLHgubWFrZVRleHRTaGFkb3codC5fZnVsbExheW91dC5wYXBlcl9iZ2NvbG9yKSkuYXR0cigidGV4dC1hbmNob3IiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5ob3Jpem9udGFsJiZ0LmxlZnQ/ImVuZCI6InN0YXJ0In0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1hLnNlbGVjdCh0aGlzKSxyPXgubGluZUNvdW50KGUpLG49dC50ZXh0Rm9udC5zaXplKigoci0xKSpULXcpLGk9dC5ub2RlTGluZVdpZHRoLzIrMyxvPSgodC5ob3Jpem9udGFsP3QudmlzaWJsZUhlaWdodDp0LnZpc2libGVXaWR0aCktbikvMjt0Lmhvcml6b250YWwmJih0LmxlZnQ/aT0taTppKz10LnZpc2libGVXaWR0aCk7dmFyIHM9dC5ob3Jpem9udGFsPyIiOiJzY2FsZSgtMSwxKSIrZCg5MCk7cmV0dXJuIHAodC5ob3Jpem9udGFsP2k6byx0Lmhvcml6b250YWw/bzppKStzfSkpLEIudHJhbnNpdGlvbigpLmVhc2UobC5lYXNlKS5kdXJhdGlvbihsLmR1cmF0aW9uKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzQ0LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL2d1cCI6NzczLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMiwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi9jb25zdGFudHMiOjExODQsIkBwbG90bHkvZDMiOjU4LCJAcGxvdGx5L2QzLXNhbmtleSI6NTcsIkBwbG90bHkvZDMtc2Fua2V5LWNpcmN1bGFyIjo1NiwiZDMtZm9yY2UiOjE1OSwiZDMtaW50ZXJwb2xhdGUiOjE2NCx0aW55Y29sb3IyOjU3Mn1dLDExODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dC5jZFswXS50cmFjZSxpPW4uX3NhbmtleS5ncmFwaC5ub2RlcyxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07aWYoIW8ucGFydE9mR3JvdXApe3ZhciBzPVsoby54MCtvLngxKS8yLChvLnkwK28ueTEpLzJdOyJ2Ij09PW4ub3JpZW50YXRpb24mJnMucmV2ZXJzZSgpLGUmJmUuY29udGFpbnMocywhMSxhLHQpJiZyLnB1c2goe3BvaW50TnVtYmVyOm8ucG9pbnROdW1iZXJ9KX19cmV0dXJuIHJ9fSx7fV0sMTE5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdLmk9cjtuLm1lcmdlQXJyYXkoZS50ZXh0LHQsInR4Iiksbi5tZXJnZUFycmF5KGUudGV4dHRlbXBsYXRlLHQsInR4dCIpLG4ubWVyZ2VBcnJheShlLmhvdmVydGV4dCx0LCJodHgiKSxuLm1lcmdlQXJyYXkoZS5jdXN0b21kYXRhLHQsImRhdGEiKSxuLm1lcmdlQXJyYXkoZS50ZXh0cG9zaXRpb24sdCwidHAiKSxlLnRleHRmb250JiYobi5tZXJnZUFycmF5Q2FzdFBvc2l0aXZlKGUudGV4dGZvbnQuc2l6ZSx0LCJ0cyIpLG4ubWVyZ2VBcnJheShlLnRleHRmb250LmNvbG9yLHQsInRjIiksbi5tZXJnZUFycmF5KGUudGV4dGZvbnQuZmFtaWx5LHQsInRmIikpO3ZhciBpPWUubWFya2VyO2lmKGkpe24ubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZShpLnNpemUsdCwibXMiKSxuLm1lcmdlQXJyYXlDYXN0UG9zaXRpdmUoaS5vcGFjaXR5LHQsIm1vIiksbi5tZXJnZUFycmF5KGkuc3ltYm9sLHQsIm14Iiksbi5tZXJnZUFycmF5KGkuY29sb3IsdCwibWMiKTt2YXIgYT1pLmxpbmU7aS5saW5lJiYobi5tZXJnZUFycmF5KGEuY29sb3IsdCwibWxjIiksbi5tZXJnZUFycmF5Q2FzdFBvc2l0aXZlKGEud2lkdGgsdCwibWx3IikpO3ZhciBvPWkuZ3JhZGllbnQ7byYmIm5vbmUiIT09by50eXBlJiYobi5tZXJnZUFycmF5KG8udHlwZSx0LCJtZ3QiKSxuLm1lcmdlQXJyYXkoby5jb2xvcix0LCJtZ2MiKSl9fX0seyIuLi8uLi9saWIiOjc3Nn1dLDExOTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLGM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksdT10KCIuL2NvbnN0YW50cyIpLGY9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyIsYW5pbTohMH0seDA6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixhbmltOiEwfSxkeDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixhbmltOiEwfSx5MDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGFuaW06ITB9LGR5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyIsYW5pbTohMH0seHBlcmlvZDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx5cGVyaW9kOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHhwZXJpb2QwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0seXBlcmlvZDA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx4cGVyaW9kYWxpZ25tZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFydCIsIm1pZGRsZSIsImVuZCJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImNhbGMifSx5cGVyaW9kYWxpZ25tZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFydCIsIm1pZGRsZSIsImVuZCJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImNhbGMifSx4aG92ZXJmb3JtYXQ6bigieCIpLHlob3ZlcmZvcm1hdDpuKCJ5Iiksc3RhY2tncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZWRpdFR5cGU6ImNhbGMifSxncm91cG5vcm06e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIiIsImZyYWN0aW9uIiwicGVyY2VudCJdLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzdGFja2dhcHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluZmVyIHplcm8iLCJpbnRlcnBvbGF0ZSJdLGRmbHQ6ImluZmVyIHplcm8iLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSx0ZXh0dGVtcGxhdGU6aSh7fSx7fSksaG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxtb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsaW5lcyIsIm1hcmtlcnMiLCJ0ZXh0Il0sZXh0cmFzOlsibm9uZSJdLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJvbjp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsicG9pbnRzIiwiZmlsbHMiXSxlZGl0VHlwZToic3R5bGUifSxob3ZlcnRlbXBsYXRlOmEoe30se2tleXM6dS5ldmVudERhdGFLZXlzfSksbGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MixlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LHNoYXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsaW5lYXIiLCJzcGxpbmUiLCJodiIsInZoIiwiaHZoIiwidmh2Il0sZGZsdDoibGluZWFyIixlZGl0VHlwZToicGxvdCJ9LHNtb290aGluZzp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MS4zLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGRhc2g6Zih7fSxsLHtlZGl0VHlwZToic3R5bGUifSksc2ltcGxpZnk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGNvbm5lY3RnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sY2xpcG9uYXhpczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LGZpbGw6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vbmUiLCJ0b3plcm95IiwidG96ZXJveCIsInRvbmV4dHkiLCJ0b25leHR4IiwidG9zZWxmIiwidG9uZXh0Il0sZWRpdFR5cGU6ImNhbGMifSxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LG1hcmtlcjpmKHtzeW1ib2w6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpjLnN5bWJvbExpc3QsZGZsdDoiY2lyY2xlIixhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo2LGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LG1heGRpc3BsYXllZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxzaXplcmVmOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHNpemVtaW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sc2l6ZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImRpYW1ldGVyIiwiYXJlYSJdLGRmbHQ6ImRpYW1ldGVyIixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6Zih7d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LGVkaXRUeXBlOiJjYWxjIn0sbygibWFya2VyLmxpbmUiLHthbmltOiEwfSkpLGdyYWRpZW50Ont0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyYWRpYWwiLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJub25lIl0sYXJyYXlPazohMCxkZmx0OiJub25lIixlZGl0VHlwZToiY2FsYyJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxvKCJtYXJrZXIiLHthbmltOiEwfSkpLHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InN0eWxlIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LHRleHRmb250Ontjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToic3R5bGUifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sdGV4dGZvbnQ6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sdGV4dHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiLCJtaWRkbGUgbGVmdCIsIm1pZGRsZSBjZW50ZXIiLCJtaWRkbGUgcmlnaHQiLCJib3R0b20gbGVmdCIsImJvdHRvbSBjZW50ZXIiLCJib3R0b20gcmlnaHQiXSxkZmx0OiJtaWRkbGUgY2VudGVyIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sdGV4dGZvbnQ6cyh7ZWRpdFR5cGU6ImNhbGMiLGNvbG9yRWRpdFR5cGU6InN0eWxlIixhcnJheU9rOiEwfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NjYwLCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo4MzAsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4vY29uc3RhbnRzIjoxMTk1fV0sMTE5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCIpLHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxsPXQoIi4vc3VidHlwZXMiKSxjPXQoIi4vY29sb3JzY2FsZV9jYWxjIiksdT10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLGY9dCgiLi9jYWxjX3NlbGVjdGlvbiIpO2Z1bmN0aW9uIGgodCxlLHIsbixpLG8scyl7dmFyIGM9ZS5fbGVuZ3RoLHU9dC5fZnVsbExheW91dCxmPXIuX2lkLGg9bi5faWQscD11Ll9maXJzdFNjYXR0ZXJbbShlKV09PT1lLnVpZCxkPShnKGUsdSxyLG4pfHx7fSkub3JpZW50YXRpb24sdj1lLmZpbGw7ci5fbWluRHRpY2s9MCxuLl9taW5EdGljaz0wO3ZhciB5PXtwYWRkZWQ6ITB9LHg9e3BhZGRlZDohMH07cyYmKHkucHBhZD14LnBwYWQ9cyk7dmFyIGI9YzwyfHxpWzBdIT09aVtjLTFdfHxvWzBdIT09b1tjLTFdO2ImJigidG96ZXJveCI9PT12fHwidG9uZXh0eCI9PT12JiYocHx8ImgiPT09ZCkpP3kudG96ZXJvPSEwOihlLmVycm9yX3l8fHt9KS52aXNpYmxlfHwidG9uZXh0eSIhPT12JiYidG96ZXJveSIhPT12JiYobC5oYXNNYXJrZXJzKGUpfHxsLmhhc1RleHQoZSkpfHwoeS5wYWRkZWQ9ITEseS5wcGFkPTApLGImJigidG96ZXJveSI9PT12fHwidG9uZXh0eSI9PT12JiYocHx8InYiPT09ZCkpP3gudG96ZXJvPSEwOiJ0b25leHR4IiE9PXYmJiJ0b3plcm94IiE9PXZ8fCh4LnBhZGRlZD0hMSksZiYmKGUuX2V4dHJlbWVzW2ZdPWEuZmluZEV4dHJlbWVzKHIsaSx5KSksaCYmKGUuX2V4dHJlbWVzW2hdPWEuZmluZEV4dHJlbWVzKG4sbyx4KSl9ZnVuY3Rpb24gcCh0LGUpe2lmKGwuaGFzTWFya2Vycyh0KSl7dmFyIHIsbj10Lm1hcmtlcixvPTEuNioodC5tYXJrZXIuc2l6ZXJlZnx8MSk7aWYocj0iYXJlYSI9PT10Lm1hcmtlci5zaXplbW9kZT9mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KCh0fHwwKS9vKSwzKX06ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KCh0fHwwKS9vLDMpfSxpLmlzQXJyYXlPclR5cGVkQXJyYXkobi5zaXplKSl7dmFyIHM9e3R5cGU6ImxpbmVhciJ9O2Euc2V0Q29udmVydChzKTtmb3IodmFyIGM9cy5tYWtlQ2FsY2RhdGEodC5tYXJrZXIsInNpemUiKSx1PW5ldyBBcnJheShlKSxmPTA7ZjxlO2YrKyl1W2ZdPXIoY1tmXSk7cmV0dXJuIHV9cmV0dXJuIHIobi5zaXplKX19ZnVuY3Rpb24gZCh0LGUpe3ZhciByPW0oZSksbj10Ll9maXJzdFNjYXR0ZXI7bltyXXx8KG5bcl09ZS51aWQpfWZ1bmN0aW9uIG0odCl7dmFyIGU9dC5zdGFja2dyb3VwO3JldHVybiB0LnhheGlzK3QueWF4aXMrdC50eXBlKyhlPyItIitlOiIiKX1mdW5jdGlvbiBnKHQsZSxyLG4pe3ZhciBpPXQuc3RhY2tncm91cDtpZihpKXt2YXIgYT1lLl9zY2F0dGVyU3RhY2tPcHRzW3IuX2lkK24uX2lkXVtpXSxvPSJ2Ij09PWEub3JpZW50YXRpb24/bjpyO3JldHVybiJsaW5lYXIiPT09by50eXBlfHwibG9nIj09PW8udHlwZT9hOnZvaWQgMH19ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbCxtLHYseSx4LGI9dC5fZnVsbExheW91dCxfPWEuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSx3PWEuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxUPV8ubWFrZUNhbGNkYXRhKGUsIngiKSxrPXcubWFrZUNhbGNkYXRhKGUsInkiKSxBPW8oZSxfLCJ4IixUKSxNPW8oZSx3LCJ5IixrKSxTPUEudmFscyxFPU0udmFscyxMPWUuX2xlbmd0aCxDPW5ldyBBcnJheShMKSxQPWUuaWRzLEk9ZyhlLGIsXyx3KSxPPSExO2QoYixlKTt2YXIgeixEPSJ4IixSPSJ5IjtJPyhpLnB1c2hVbmlxdWUoSS50cmFjZUluZGljZXMsZS5fZXhwYW5kZWRJbmRleCksKHI9InYiPT09SS5vcmllbnRhdGlvbik/KFI9InMiLHo9IngiKTooRD0icyIsej0ieSIpLHk9ImludGVycG9sYXRlIj09PUkuc3RhY2tnYXBzKTpoKHQsZSxfLHcsUyxFLHAoZSxMKSk7dmFyIEY9ISFlLnhwZXJpb2RhbGlnbm1lbnQsQj0hIWUueXBlcmlvZGFsaWdubWVudDtmb3IobD0wO2w8TDtsKyspe3ZhciBOPUNbbF09e30saj1uKFNbbF0pLFU9bihFW2xdKTtqJiZVPyhOW0RdPVNbbF0sTltSXT1FW2xdLEYmJihOLm9yaWdfeD1UW2xdLE4ueEVuZD1BLmVuZHNbbF0sTi54U3RhcnQ9QS5zdGFydHNbbF0pLEImJihOLm9yaWdfeT1rW2xdLE4ueUVuZD1NLmVuZHNbbF0sTi55U3RhcnQ9TS5zdGFydHNbbF0pKTpJJiYocj9qOlUpPyhOW3pdPXI/U1tsXTpFW2xdLE4uZ2FwPSEwLHk/KE4ucz1zLE89ITApOk4ucz0wKTpOW0RdPU5bUl09cyxQJiYoTi5pZD1TdHJpbmcoUFtsXSkpfWlmKHUoQyxlKSxjKHQsZSksZihDLGUpLEkpe2ZvcihsPTA7bDxDLmxlbmd0aDspQ1tsXVt6XT09PXM/Qy5zcGxpY2UobCwxKTpsKys7aWYoaS5zb3J0KEMsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbel0tZVt6XXx8dC5pLWUuaX0pKSxPKXtmb3IobD0wO2w8Qy5sZW5ndGgtMSYmQ1tsXS5nYXA7KWwrKztmb3IoKHg9Q1tsXS5zKXx8KHg9Q1tsXS5zPTApLG09MDttPGw7bSsrKUNbbV0ucz14O2Zvcih2PUMubGVuZ3RoLTE7dj5sJiZDW3ZdLmdhcDspdi0tO2Zvcih4PUNbdl0ucyxtPUMubGVuZ3RoLTE7bT52O20tLSlDW21dLnM9eDtmb3IoO2w8djspaWYoQ1srK2xdLmdhcCl7Zm9yKG09bCsxO0NbbV0uZ2FwOyltKys7Zm9yKHZhciBWPUNbbC0xXVt6XSxIPUNbbC0xXS5zLHE9KENbbV0ucy1IKS8oQ1ttXVt6XS1WKTtsPG07KUNbbF0ucz1IKyhDW2xdW3pdLVYpKnEsbCsrfX19cmV0dXJuIEN9LGNhbGNNYXJrZXJTaXplOnAsY2FsY0F4aXNFeHBhbnNpb246aCxzZXRGaXJzdFNjYXR0ZXI6ZCxnZXRTdGFja09wdHM6Z319LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCI6ODI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuL2FycmF5c190b19jYWxjZGF0YSI6MTE5MCwiLi9jYWxjX3NlbGVjdGlvbiI6MTE5MywiLi9jb2xvcnNjYWxlX2NhbGMiOjExOTQsIi4vc3VidHlwZXMiOjEyMTYsImZhc3QtaXNudW1lcmljIjoyNDJ9XSwxMTkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe24uaXNBcnJheU9yVHlwZWRBcnJheShlLnNlbGVjdGVkcG9pbnRzKSYmbi50YWdTZWxlY3RlZCh0LGUpfX0seyIuLi8uLi9saWIiOjc3Nn1dLDExOTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxhPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXthLmhhc0xpbmVzKGUpJiZuKGUsImxpbmUiKSYmaSh0LGUse3ZhbHM6ZS5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjoibGluZSIsY0xldHRlcjoiYyJ9KSxhLmhhc01hcmtlcnMoZSkmJihuKGUsIm1hcmtlciIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5jb2xvcixjb250YWluZXJTdHI6Im1hcmtlciIsY0xldHRlcjoiYyJ9KSxuKGUsIm1hcmtlci5saW5lIikmJmkodCxlLHt2YWxzOmUubWFya2VyLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIubGluZSIsY0xldHRlcjoiYyJ9KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2NDcsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjo2NTAsIi4vc3VidHlwZXMiOjEyMTZ9XSwxMTk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17UFRTX0xJTkVTT05MWToyMCxtaW5Ub2xlcmFuY2U6LjIsdG9sZXJhbmNlR3Jvd3RoOjEwLG1heFNjcmVlbnNBd2F5OjIwLGV2ZW50RGF0YUtleXM6W119fSx7fV0sMTE5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NhbGMiKTtmdW5jdGlvbiBpKHQsZSxyLG4saSxhLG8pe2lbbl09ITA7dmFyIHM9e2k6bnVsbCxnYXA6ITAsczowfTtpZihzW29dPXIsdC5zcGxpY2UoZSwwLHMpLGUmJnI9PT10W2UtMV1bb10pe3ZhciBsPXRbZS0xXTtzLnM9bC5zLHMuaT1sLmkscy5nYXA9bC5nYXB9ZWxzZSBhJiYocy5zPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbZS0xXSxhPXRbZSsxXTtyZXR1cm4gYT9pP2kucysoYS5zLWkucykqKHItaVtuXSkvKGFbbl0taVtuXSk6YS5zOmkuc30odCxlLHIsbykpO2V8fCh0WzBdLnQ9dFsxXS50LHRbMF0udHJhY2U9dFsxXS50cmFjZSxkZWxldGUgdFsxXS50LGRlbGV0ZSB0WzFdLnRyYWNlKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnhheGlzLGE9ZS55YXhpcyxvPXIuX2lkK2EuX2lkLHM9dC5fZnVsbExheW91dC5fc2NhdHRlclN0YWNrT3B0c1tvXTtpZihzKXt2YXIgbCxjLHUsZixoLHAsZCxtLGcsdix5LHgsYixfLHcsVD10LmNhbGNkYXRhO2Zvcih2YXIgayBpbiBzKXt2YXIgQT0odj1zW2tdKS50cmFjZUluZGljZXM7aWYoQS5sZW5ndGgpe2Zvcih5PSJpbnRlcnBvbGF0ZSI9PT12LnN0YWNrZ2Fwcyx4PXYuZ3JvdXBub3JtLCJ2Ij09PXYub3JpZW50YXRpb24/KGI9IngiLF89InkiKTooYj0ieSIsXz0ieCIpLHc9bmV3IEFycmF5KEEubGVuZ3RoKSxsPTA7bDx3Lmxlbmd0aDtsKyspd1tsXT0hMTtwPVRbQVswXV07dmFyIE09bmV3IEFycmF5KHAubGVuZ3RoKTtmb3IobD0wO2w8cC5sZW5ndGg7bCsrKU1bbF09cFtsXVtiXTtmb3IobD0xO2w8QS5sZW5ndGg7bCsrKXtmb3IoaD1UW0FbbF1dLGM9dT0wO2M8aC5sZW5ndGg7YysrKXtmb3IoZD1oW2NdW2JdO2Q+TVt1XSYmdTxNLmxlbmd0aDt1KyspaShoLGMsTVt1XSxsLHcseSxiKSxjKys7aWYoZCE9PU1bdV0pe2ZvcihmPTA7ZjxsO2YrKylpKFRbQVtmXV0sdSxkLGYsdyx5LGIpO00uc3BsaWNlKHUsMCxkKX11Kyt9Zm9yKDt1PE0ubGVuZ3RoO3UrKylpKGgsYyxNW3VdLGwsdyx5LGIpLGMrK312YXIgUz1NLmxlbmd0aDtmb3IoYz0wO2M8cC5sZW5ndGg7YysrKXtmb3IobT1wW2NdW19dPXBbY10ucyxsPTE7bDxBLmxlbmd0aDtsKyspKGg9VFtBW2xdXSlbMF0udHJhY2UuX3Jhd0xlbmd0aD1oWzBdLnRyYWNlLl9sZW5ndGgsaFswXS50cmFjZS5fbGVuZ3RoPVMsbSs9aFtjXS5zLGhbY11bX109bTtpZih4KWZvcihnPSgiZnJhY3Rpb24iPT09eD9tOm0vMTAwKXx8MSxsPTA7bDxBLmxlbmd0aDtsKyspe3ZhciBFPVRbQVtsXV1bY107RVtfXS89ZyxFLnNOb3JtPUUucy9nfX1mb3IobD0wO2w8QS5sZW5ndGg7bCsrKXt2YXIgTD0oaD1UW0FbbF1dKVswXS50cmFjZSxDPW4uY2FsY01hcmtlclNpemUoTCxMLl9yYXdMZW5ndGgpLFA9QXJyYXkuaXNBcnJheShDKTtpZihDJiZ3W2xdfHxQKXt2YXIgST1DO2ZvcihDPW5ldyBBcnJheShTKSxjPTA7YzxTO2MrKylDW2NdPWhbY10uZ2FwPzA6UD9JW2hbY10uaV06SX12YXIgTz1uZXcgQXJyYXkoUyksej1uZXcgQXJyYXkoUyk7Zm9yKGM9MDtjPFM7YysrKU9bY109aFtjXS54LHpbY109aFtjXS55O24uY2FsY0F4aXNFeHBhbnNpb24odCxMLHIsYSxPLHosQyksaFswXS50Lm9yaWVudGF0aW9uPXYub3JpZW50YXRpb259fX19fX0seyIuL2NhbGMiOjExOTJ9XSwxMTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIHI9dFtlXTtpZigic2NhdHRlciI9PT1yLnR5cGUpe3ZhciBuPXIuZmlsbDtpZigibm9uZSIhPT1uJiYidG9zZWxmIiE9PW4mJihyLm9wYWNpdHk9dm9pZCAwLCJ0b25leHR5Ij09PW58fCJ0b25leHR4Ij09PW4pKWZvcih2YXIgaT1lLTE7aT49MDtpLS0pe3ZhciBhPXRbaV07aWYoInNjYXR0ZXIiPT09YS50eXBlJiZhLnhheGlzPT09ci54YXhpcyYmYS55YXhpcz09PXIueWF4aXMpe2Eub3BhY2l0eT12b2lkIDA7YnJlYWt9fX19fX0se31dLDExOTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi9hdHRyaWJ1dGVzIiksbz10KCIuL2NvbnN0YW50cyIpLHM9dCgiLi9zdWJ0eXBlcyIpLGw9dCgiLi94eV9kZWZhdWx0cyIpLGM9dCgiLi9wZXJpb2RfZGVmYXVsdHMiKSx1PXQoIi4vc3RhY2tfZGVmYXVsdHMiKSxmPXQoIi4vbWFya2VyX2RlZmF1bHRzIiksaD10KCIuL2xpbmVfZGVmYXVsdHMiKSxwPXQoIi4vbGluZV9zaGFwZV9kZWZhdWx0cyIpLGQ9dCgiLi90ZXh0X2RlZmF1bHRzIiksbT10KCIuL2ZpbGxjb2xvcl9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixnKXtmdW5jdGlvbiB2KHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIHk9bCh0LGUsZyx2KTtpZih5fHwoZS52aXNpYmxlPSExKSxlLnZpc2libGUpe2ModCxlLGcsdiksdigieGhvdmVyZm9ybWF0IiksdigieWhvdmVyZm9ybWF0Iik7dmFyIHg9dSh0LGUsZyx2KSxiPSF4JiZ5PG8uUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIjt2KCJ0ZXh0IiksdigiaG92ZXJ0ZXh0IiksdigibW9kZSIsYikscy5oYXNMaW5lcyhlKSYmKGgodCxlLHIsZyx2KSxwKHQsZSx2KSx2KCJjb25uZWN0Z2FwcyIpLHYoImxpbmUuc2ltcGxpZnkiKSkscy5oYXNNYXJrZXJzKGUpJiZmKHQsZSxyLGcsdix7Z3JhZGllbnQ6ITB9KSxzLmhhc1RleHQoZSkmJih2KCJ0ZXh0dGVtcGxhdGUiKSxkKHQsZSxnLHYpKTt2YXIgXz1bXTsocy5oYXNNYXJrZXJzKGUpfHxzLmhhc1RleHQoZSkpJiYodigiY2xpcG9uYXhpcyIpLHYoIm1hcmtlci5tYXhkaXNwbGF5ZWQiKSxfLnB1c2goInBvaW50cyIpKSx2KCJmaWxsIix4P3guZmlsbERmbHQ6Im5vbmUiKSwibm9uZSIhPT1lLmZpbGwmJihtKHQsZSxyLHYpLHMuaGFzTGluZXMoZSl8fHAodCxlLHYpKTt2YXIgdz0oZS5saW5lfHx7fSkuY29sb3IsVD0oZS5tYXJrZXJ8fHt9KS5jb2xvcjsidG9uZXh0IiE9PWUuZmlsbCYmInRvc2VsZiIhPT1lLmZpbGx8fF8ucHVzaCgiZmlsbHMiKSx2KCJob3Zlcm9uIixfLmpvaW4oIisiKXx8InBvaW50cyIpLCJmaWxscyIhPT1lLmhvdmVyb24mJnYoImhvdmVydGVtcGxhdGUiKTt2YXIgaz1pLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTtrKHQsZSx3fHxUfHxyLHtheGlzOiJ5In0pLGsodCxlLHd8fFR8fHIse2F4aXM6IngiLGluaGVyaXQ6InkifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsdil9fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi9hdHRyaWJ1dGVzIjoxMTkxLCIuL2NvbnN0YW50cyI6MTE5NSwiLi9maWxsY29sb3JfZGVmYXVsdHMiOjExOTksIi4vbGluZV9kZWZhdWx0cyI6MTIwNCwiLi9saW5lX3NoYXBlX2RlZmF1bHRzIjoxMjA2LCIuL21hcmtlcl9kZWZhdWx0cyI6MTIxMCwiLi9wZXJpb2RfZGVmYXVsdHMiOjEyMTEsIi4vc3RhY2tfZGVmYXVsdHMiOjEyMTQsIi4vc3VidHlwZXMiOjEyMTYsIi4vdGV4dF9kZWZhdWx0cyI6MTIxNywiLi94eV9kZWZhdWx0cyI6MTIxOH1dLDExOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89ITE7aWYoZS5tYXJrZXIpe3ZhciBzPWUubWFya2VyLmNvbG9yLGw9KGUubWFya2VyLmxpbmV8fHt9KS5jb2xvcjtzJiYhaShzKT9vPXM6bCYmIWkobCkmJihvPWwpfWEoImZpbGxjb2xvciIsbi5hZGRPcGFjaXR5KChlLmxpbmV8fHt9KS5jb2xvcnx8b3x8ciwuNSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2xpYiI6Nzc2fV0sMTIwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9e30sYT17X2Z1bGxMYXlvdXQ6cn0sbz1uLmdldEZyb21UcmFjZShhLGUsIngiKSxzPW4uZ2V0RnJvbVRyYWNlKGEsZSwieSIpO3JldHVybiBpLnhMYWJlbD1uLnRpY2tUZXh0KG8sby5jMmwodC54KSwhMCkudGV4dCxpLnlMYWJlbD1uLnRpY2tUZXh0KHMscy5jMmwodC55KSwhMCkudGV4dCxpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3fV0sMTIwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYTtpZigibGluZXMiPT09dC5tb2RlKXJldHVybihyPXQubGluZS5jb2xvcikmJm4ub3BhY2l0eShyKT9yOnQuZmlsbGNvbG9yO2lmKCJub25lIj09PXQubW9kZSlyZXR1cm4gdC5maWxsP3QuZmlsbGNvbG9yOiIiO3ZhciBvPWUubWNjfHwodC5tYXJrZXJ8fHt9KS5jb2xvcixzPWUubWxjY3x8KCh0Lm1hcmtlcnx8e30pLmxpbmV8fHt9KS5jb2xvcjtyZXR1cm4oYT1vJiZuLm9wYWNpdHkobyk/bzpzJiZuLm9wYWNpdHkocykmJihlLm1sd3x8KCh0Lm1hcmtlcnx8e30pLmxpbmV8fHt9KS53aWR0aCk/czoiIik/bi5vcGFjaXR5KGEpPC4zP24uYWRkT3BhY2l0eShhLC4zKTphOihyPSh0LmxpbmV8fHt9KS5jb2xvcikmJm4ub3BhY2l0eShyKSYmaS5oYXNMaW5lcyh0KSYmdC5saW5lLndpZHRoP3I6dC5maWxsY29sb3J9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi9zdWJ0eXBlcyI6MTIxNn1dLDEyMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi9nZXRfdHJhY2VfY29sb3IiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxsPW4uZmlsbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1PXQuY2QsZj11WzBdLnRyYWNlLGg9dC54YSxwPXQueWEsZD1oLmMycChlKSxtPXAuYzJwKHIpLGc9W2QsbV0sdj1mLmhvdmVyb258fCIiLHk9LTEhPT1mLm1vZGUuaW5kZXhPZigibWFya2VycyIpPzM6LjUseD0hIWYueHBlcmlvZGFsaWdubWVudCxiPSEhZi55cGVyaW9kYWxpZ25tZW50O2lmKC0xIT09di5pbmRleE9mKCJwb2ludHMiKSl7dmFyIF89ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoeSx0Lm1yY3x8MCkscj1oLmMycCh0LngpLWQsbj1wLmMycCh0LnkpLW07cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydChyKnIrbipuKS1lLDEteS9lKX0sdz1pLmdldERpc3RhbmNlRnVuY3Rpb24oYywoZnVuY3Rpb24odCl7aWYoeCl7dmFyIGU9aC5jMnAodC54U3RhcnQpLHI9aC5jMnAodC54RW5kKTtyZXR1cm4gZD49TWF0aC5taW4oZSxyKSYmZDw9TWF0aC5tYXgoZSxyKT8wOjEvMH12YXIgbj1NYXRoLm1heCgzLHQubXJjfHwwKSxpPTEtMS9uLGE9TWF0aC5hYnMoaC5jMnAodC54KS1kKTtyZXR1cm4gYTxuP2kqYS9uOmEtbitpfSksKGZ1bmN0aW9uKHQpe2lmKGIpe3ZhciBlPXAuYzJwKHQueVN0YXJ0KSxyPXAuYzJwKHQueUVuZCk7cmV0dXJuIG0+PU1hdGgubWluKGUscikmJm08PU1hdGgubWF4KGUscik/MDoxLzB9dmFyIG49TWF0aC5tYXgoMyx0Lm1yY3x8MCksaT0xLTEvbixhPU1hdGguYWJzKHAuYzJwKHQueSktbSk7cmV0dXJuIGE8bj9pKmEvbjphLW4raX0pLF8pO2lmKGkuZ2V0Q2xvc2VzdCh1LHcsdCksITEhPT10LmluZGV4KXt2YXIgVD11W3QuaW5kZXhdLGs9aC5jMnAoVC54LCEwKSxBPXAuYzJwKFQueSwhMCksTT1ULm1yY3x8MTt0LmluZGV4PVQuaTt2YXIgUz11WzBdLnQub3JpZW50YXRpb24sRT1TJiYoVC5zTm9ybXx8VC5zKSxMPSJoIj09PVM/RTp2b2lkIDAhPT1ULm9yaWdfeD9ULm9yaWdfeDpULngsQz0idiI9PT1TP0U6dm9pZCAwIT09VC5vcmlnX3k/VC5vcmlnX3k6VC55O3JldHVybiBuLmV4dGVuZEZsYXQodCx7Y29sb3I6byhmLFQpLHgwOmstTSx4MTprK00seExhYmVsVmFsOkwseTA6QS1NLHkxOkErTSx5TGFiZWxWYWw6QyxzcGlrZURpc3RhbmNlOl8oVCksaG92ZXJ0ZW1wbGF0ZTpmLmhvdmVydGVtcGxhdGV9KSxsKFQsZix0KSxhLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwiaG92ZXJJbmZvIikoVCxmLHQpLFt0XX19aWYoLTEhPT12LmluZGV4T2YoImZpbGxzIikmJmYuX3BvbHlnb25zKXt2YXIgUCxJLE8seixELFIsRixCLE4saj1mLl9wb2x5Z29ucyxVPVtdLFY9ITEsSD0xLzAscT0tMS8wLEc9MS8wLFk9LTEvMDtmb3IoUD0wO1A8ai5sZW5ndGg7UCsrKShPPWpbUF0pLmNvbnRhaW5zKGcpJiYoVj0hVixVLnB1c2goTyksRz1NYXRoLm1pbihHLE8ueW1pbiksWT1NYXRoLm1heChZLE8ueW1heCkpO2lmKFYpe3ZhciBXPSgoRz1NYXRoLm1heChHLDApKSsoWT1NYXRoLm1pbihZLHAuX2xlbmd0aCkpKS8yO2ZvcihQPTA7UDxVLmxlbmd0aDtQKyspZm9yKHo9VVtQXS5wdHMsST0xO0k8ei5sZW5ndGg7SSsrKShCPXpbSS0xXVsxXSk+VyE9KE49eltJXVsxXSk+PVcmJihSPXpbSS0xXVswXSxGPXpbSV1bMF0sTi1CJiYoRD1SKyhGLVIpKihXLUIpLyhOLUIpLEg9TWF0aC5taW4oSCxEKSxxPU1hdGgubWF4KHEsRCkpKTtIPU1hdGgubWF4KEgsMCkscT1NYXRoLm1pbihxLGguX2xlbmd0aCk7dmFyIFg9cy5kZWZhdWx0TGluZTtyZXR1cm4gcy5vcGFjaXR5KGYuZmlsbGNvbG9yKT9YPWYuZmlsbGNvbG9yOnMub3BhY2l0eSgoZi5saW5lfHx7fSkuY29sb3IpJiYoWD1mLmxpbmUuY29sb3IpLG4uZXh0ZW5kRmxhdCh0LHtkaXN0YW5jZTp0Lm1heEhvdmVyRGlzdGFuY2UseDA6SCx4MTpxLHkwOlcseTE6Vyxjb2xvcjpYLGhvdmVydGVtcGxhdGU6ITF9KSxkZWxldGUgdC5pbmRleCxmLnRleHQmJiFBcnJheS5pc0FycmF5KGYudGV4dCk/dC50ZXh0PVN0cmluZyhmLnRleHQpOnQudGV4dD1mLm5hbWUsW3RdfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29tcG9uZW50cy9meCI6Njc5LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi9nZXRfdHJhY2VfY29sb3IiOjEyMDF9XSwxMjAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9e2hhc0xpbmVzOm4uaGFzTGluZXMsaGFzTWFya2VyczpuLmhhc01hcmtlcnMsaGFzVGV4dDpuLmhhc1RleHQsaXNCdWJibGU6bi5pc0J1YmJsZSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi9jcm9zc190cmFjZV9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2Nyb3NzX3RyYWNlX2NhbGMiKSxhcnJheXNUb0NhbGNkYXRhOnQoIi4vYXJyYXlzX3RvX2NhbGNkYXRhIikscGxvdDp0KCIuL3Bsb3QiKSxjb2xvcmJhcjp0KCIuL21hcmtlcl9jb2xvcmJhciIpLGZvcm1hdExhYmVsczp0KCIuL2Zvcm1hdF9sYWJlbHMiKSxzdHlsZTp0KCIuL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksYW5pbWF0YWJsZTohMCxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlciIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsInN5bWJvbHMiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjExOTAsIi4vYXR0cmlidXRlcyI6MTE5MSwiLi9jYWxjIjoxMTkyLCIuL2Nyb3NzX3RyYWNlX2NhbGMiOjExOTYsIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjExOTcsIi4vZGVmYXVsdHMiOjExOTgsIi4vZm9ybWF0X2xhYmVscyI6MTIwMCwiLi9ob3ZlciI6MTIwMiwiLi9tYXJrZXJfY29sb3JiYXIiOjEyMDksIi4vcGxvdCI6MTIxMiwiLi9zZWxlY3QiOjEyMTMsIi4vc3R5bGUiOjEyMTUsIi4vc3VidHlwZXMiOjEyMTZ9XSwxMjA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwpe3ZhciBjPSh0Lm1hcmtlcnx8e30pLmNvbG9yOyhzKCJsaW5lLmNvbG9yIixyKSxpKHQsImxpbmUiKSk/YSh0LGUsbyxzLHtwcmVmaXg6ImxpbmUuIixjTGV0dGVyOiJjIn0pOnMoImxpbmUuY29sb3IiLCFuKGMpJiZjfHxyKTtzKCJsaW5lLndpZHRoIiksKGx8fHt9KS5ub0Rhc2h8fHMoImxpbmUuZGFzaCIpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY0OSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjY1MCwiLi4vLi4vbGliIjo3NzZ9XSwxMjA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxpPW4uQkFETlVNLGE9bi5MT0dfQ0xJUCxvPWErLjUscz1hLS41LGw9dCgiLi4vLi4vbGliIiksYz1sLnNlZ21lbnRzSW50ZXJzZWN0LHU9bC5jb25zdHJhaW4sZj10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4sYSxoLHAsZCxtLGcsdix5LHgsYixfLHcsVCxrLEEsTSxTPWUueGF4aXMsRT1lLnlheGlzLEw9ImxvZyI9PT1TLnR5cGUsQz0ibG9nIj09PUUudHlwZSxQPVMuX2xlbmd0aCxJPUUuX2xlbmd0aCxPPWUuY29ubmVjdEdhcHMsej1lLmJhc2VUb2xlcmFuY2UsRD1lLnNoYXBlLFI9ImxpbmVhciI9PT1ELEY9ZS5maWxsJiYibm9uZSIhPT1lLmZpbGwsQj1bXSxOPWYubWluVG9sZXJhbmNlLGo9dC5sZW5ndGgsVT1uZXcgQXJyYXkoaiksVj0wO2Z1bmN0aW9uIEgocil7dmFyIG49dFtyXTtpZighbilyZXR1cm4hMTt2YXIgYT1lLmxpbmVhcml6ZWQ/Uy5sMnAobi54KTpTLmMycChuLngpLGw9ZS5saW5lYXJpemVkP0UubDJwKG4ueSk6RS5jMnAobi55KTtpZihhPT09aSl7aWYoTCYmKGE9Uy5jMnAobi54LCEwKSksYT09PWkpcmV0dXJuITE7QyYmbD09PWkmJihhKj1NYXRoLmFicyhTLl9tKkkqKFMuX20+MD9vOnMpLyhFLl9tKlAqKEUuX20+MD9vOnMpKSkpLGEqPTFlM31pZihsPT09aSl7aWYoQyYmKGw9RS5jMnAobi55LCEwKSksbD09PWkpcmV0dXJuITE7bCo9MWUzfXJldHVyblthLGxdfWZ1bmN0aW9uIHEodCxlLHIsbil7dmFyIGk9ci10LGE9bi1lLG89LjUtdCxzPS41LWUsbD1pKmkrYSphLGM9aSpvK2EqcztpZihjPjAmJmM8bCl7dmFyIHU9byphLXMqaTtpZih1KnU8bClyZXR1cm4hMH19ZnVuY3Rpb24gRyh0LGUpe3ZhciByPXRbMF0vUCxuPXRbMV0vSSxpPU1hdGgubWF4KDAsLXIsci0xLC1uLG4tMSk7cmV0dXJuIGkmJnZvaWQgMCE9PUEmJnEocixuLEEsTSkmJihpPTApLGkmJmUmJnEocixuLGVbMF0vUCxlWzFdL0kpJiYoaT0wKSwoMStmLnRvbGVyYW5jZUdyb3d0aCppKSp6fWZ1bmN0aW9uIFkodCxlKXt2YXIgcj10WzBdLWVbMF0sbj10WzFdLWVbMV07cmV0dXJuIE1hdGguc3FydChyKnIrbipuKX12YXIgVyxYLFosSixLLFEsJCx0dD1mLm1heFNjcmVlbnNBd2F5LGV0PS1QKnR0LHJ0PVAqKDErdHQpLG50PS1JKnR0LGl0PUkqKDErdHQpLGF0PVtbZXQsbnQscnQsbnRdLFtydCxudCxydCxpdF0sW3J0LGl0LGV0LGl0XSxbZXQsaXQsZXQsbnRdXTtmdW5jdGlvbiBvdCh0KXtpZih0WzBdPGV0fHx0WzBdPnJ0fHx0WzFdPG50fHx0WzFdPml0KXJldHVyblt1KHRbMF0sZXQscnQpLHUodFsxXSxudCxpdCldfWZ1bmN0aW9uIHN0KHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiYodFswXT09PWV0fHx0WzBdPT09cnQpfHwodFsxXT09PWVbMV0mJih0WzFdPT09bnR8fHRbMV09PT1pdCl8fHZvaWQgMCl9ZnVuY3Rpb24gbHQodCxlLHIpe3JldHVybiBmdW5jdGlvbihuLGkpe3ZhciBhPW90KG4pLG89b3QoaSkscz1bXTtpZihhJiZvJiZzdChhLG8pKXJldHVybiBzO2EmJnMucHVzaChhKSxvJiZzLnB1c2gobyk7dmFyIGM9MipsLmNvbnN0cmFpbigoblt0XStpW3RdKS8yLGUsciktKChhfHxuKVt0XSsob3x8aSlbdF0pO2MmJigoYSYmbz9jPjA9PWFbdF0+b1t0XT9hOm86YXx8bylbdF0rPWMpO3JldHVybiBzfX1mdW5jdGlvbiBjdCh0KXt2YXIgZT10WzBdLHI9dFsxXSxuPWU9PT1VW1YtMV1bMF0saT1yPT09VVtWLTFdWzFdO2lmKCFufHwhaSlpZihWPjEpe3ZhciBhPWU9PT1VW1YtMl1bMF0sbz1yPT09VVtWLTJdWzFdO24mJihlPT09ZXR8fGU9PT1ydCkmJmE/bz9WLS06VVtWLTFdPXQ6aSYmKHI9PT1udHx8cj09PWl0KSYmbz9hP1YtLTpVW1YtMV09dDpVW1YrK109dH1lbHNlIFVbVisrXT10fWZ1bmN0aW9uIHV0KHQpe1VbVi0xXVswXSE9PXRbMF0mJlVbVi0xXVsxXSE9PXRbMV0mJmN0KFtaLEpdKSxjdCh0KSxLPW51bGwsWj1KPTB9ZnVuY3Rpb24gZnQodCl7aWYoQT10WzBdL1AsTT10WzFdL0ksVz10WzBdPGV0P2V0OnRbMF0+cnQ/cnQ6MCxYPXRbMV08bnQ/bnQ6dFsxXT5pdD9pdDowLFd8fFgpe2lmKFYpaWYoSyl7dmFyIGU9JChLLHQpO2UubGVuZ3RoPjEmJih1dChlWzBdKSxVW1YrK109ZVsxXSl9ZWxzZSBRPSQoVVtWLTFdLHQpWzBdLFVbVisrXT1RO2Vsc2UgVVtWKytdPVtXfHx0WzBdLFh8fHRbMV1dO3ZhciByPVVbVi0xXTtXJiZYJiYoclswXSE9PVd8fHJbMV0hPT1YKT8oSyYmKFohPT1XJiZKIT09WD9jdChaJiZKPyhuPUssYT0oaT10KVswXS1uWzBdLG89KGlbMV0tblsxXSkvYSwoblsxXSppWzBdLWlbMV0qblswXSkvYT4wP1tvPjA/ZXQ6cnQsaXRdOltvPjA/cnQ6ZXQsbnRdKTpbWnx8VyxKfHxYXSk6WiYmSiYmY3QoW1osSl0pKSxjdChbVyxYXSkpOlotVyYmSi1YJiZjdChbV3x8WixYfHxKXSksSz10LFo9VyxKPVh9ZWxzZSBLJiZ1dCgkKEssdClbMF0pLFVbVisrXT10O3ZhciBuLGksYSxvfWZvcigibGluZWFyIj09PUR8fCJzcGxpbmUiPT09RD8kPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49MCxpPTA7aTw0O2krKyl7dmFyIGE9YXRbaV0sbz1jKHRbMF0sdFsxXSxlWzBdLGVbMV0sYVswXSxhWzFdLGFbMl0sYVszXSk7byYmKCFufHxNYXRoLmFicyhvLngtclswXVswXSk+MXx8TWF0aC5hYnMoby55LXJbMF1bMV0pPjEpJiYobz1bby54LG8ueV0sbiYmWShvLHQpPFkoclswXSx0KT9yLnVuc2hpZnQobyk6ci5wdXNoKG8pLG4rKyl9cmV0dXJuIHJ9OiJodiI9PT1EfHwidmgiPT09RD8kPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W10sbj1vdCh0KSxpPW90KGUpO3JldHVybiBuJiZpJiZzdChuLGkpfHwobiYmci5wdXNoKG4pLGkmJnIucHVzaChpKSkscn06Imh2aCI9PT1EPyQ9bHQoMCxldCxydCk6InZodiI9PT1EJiYoJD1sdCgxLG50LGl0KSkscj0wO3I8ajtyKyspaWYobj1IKHIpKXtmb3IoVj0wLEs9bnVsbCxmdChuKSxyKys7cjxqO3IrKyl7aWYoIShoPUgocikpKXtpZihPKWNvbnRpbnVlO2JyZWFrfWlmKFImJmUuc2ltcGxpZnkpe3ZhciBodD1IKHIrMSk7aWYoeT1ZKGgsbiksRiYmKDA9PT1WfHxWPT09ai0xKXx8ISh5PEcoaCxodCkqTikpe2ZvcihnPVsoaFswXS1uWzBdKS95LChoWzFdLW5bMV0pL3ldLHA9bix4PXksYj13PVQ9MCxtPSExLGE9aCxyKys7cjx0Lmxlbmd0aDtyKyspe2lmKGQ9aHQsaHQ9SChyKzEpLCFkKXtpZihPKWNvbnRpbnVlO2JyZWFrfWlmKGs9KHY9W2RbMF0tblswXSxkWzFdLW5bMV1dKVswXSpnWzFdLXZbMV0qZ1swXSx3PU1hdGgubWluKHcsayksKFQ9TWF0aC5tYXgoVCxrKSktdz5HKGQsaHQpKWJyZWFrO2E9ZCwoXz12WzBdKmdbMF0rdlsxXSpnWzFdKT54Pyh4PV8saD1kLG09ITEpOl88YiYmKGI9XyxwPWQsbT0hMCl9aWYobT8oZnQoaCksYSE9PXAmJmZ0KHApKToocCE9PW4mJmZ0KHApLGEhPT1oJiZmdChoKSksZnQoYSkscj49dC5sZW5ndGh8fCFkKWJyZWFrO2Z0KGQpLG49ZH19ZWxzZSBmdChoKX1LJiZjdChbWnx8S1swXSxKfHxLWzFdXSksQi5wdXNoKFUuc2xpY2UoMCxWKSl9cmV0dXJuIEJ9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzYsIi4vY29uc3RhbnRzIjoxMTk1fV0sMTIwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJzcGxpbmUiPT09cigibGluZS5zaGFwZSIpJiZyKCJsaW5lLnNtb290aGluZyIpfX0se31dLDEyMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e3RvbmV4dHg6MSx0b25leHR5OjEsdG9uZXh0OjF9O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvLHMsbCxjPXt9LHU9ITEsZj0tMSxoPTAscD0tMTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKShvPShpPXJbYV1bMF0udHJhY2UpLnN0YWNrZ3JvdXB8fCIiKT9vIGluIGM/bD1jW29dOihsPWNbb109aCxoKyspOmkuZmlsbCBpbiBuJiZwPj0wP2w9cDoobD1wPWgsaCsrKSxsPGYmJih1PSEwKSxpLl9ncm91cEluZGV4PWY9bDt2YXIgZD1yLnNsaWNlKCk7dSYmZC5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciByPXRbMF0udHJhY2Usbj1lWzBdLnRyYWNlO3JldHVybiByLl9ncm91cEluZGV4LW4uX2dyb3VwSW5kZXh8fHIuaW5kZXgtbi5pbmRleH0pKTt2YXIgbT17fTtmb3IoYT0wO2E8ZC5sZW5ndGg7YSsrKW89KGk9ZFthXVswXS50cmFjZSkuc3RhY2tncm91cHx8IiIsITA9PT1pLnZpc2libGU/KGkuX25leHR0cmFjZT1udWxsLGkuZmlsbCBpbiBuJiYocz1tW29dLGkuX3ByZXZ0cmFjZT1zfHxudWxsLHMmJihzLl9uZXh0dHJhY2U9aSkpLGkuX293bmZpbGw9aS5maWxsJiYoInRvemVybyI9PT1pLmZpbGwuc3Vic3RyKDAsNil8fCJ0b3NlbGYiPT09aS5maWxsfHwidG8iPT09aS5maWxsLnN1YnN0cigwLDIpJiYhaS5fcHJldnRyYWNlKSxtW29dPWkpOmkuX3ByZXZ0cmFjZT1pLl9uZXh0dHJhY2U9aS5fb3duZmlsbD1udWxsO3JldHVybiBkfX0se31dLDEyMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT0yKTt2YXIgcj10Lm1hcmtlcixpPXIuc2l6ZXJlZnx8MSxhPXIuc2l6ZW1pbnx8MCxvPSJhcmVhIj09PXIuc2l6ZW1vZGU/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCh0L2kpfTpmdW5jdGlvbih0KXtyZXR1cm4gdC9pfTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9byh0L2UpO3JldHVybiBuKHIpJiZyPjA/TWF0aC5tYXgocixhKTowfX19LHsiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDEyMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjb250YWluZXI6Im1hcmtlciIsbWluOiJjbWluIixtYXg6ImNtYXgifX0se31dLDEyMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCxjKXt2YXIgdT1vLmlzQnViYmxlKHQpLGY9KHQubGluZXx8e30pLmNvbG9yOyhjPWN8fHt9LGYmJihyPWYpLGwoIm1hcmtlci5zeW1ib2wiKSxsKCJtYXJrZXIub3BhY2l0eSIsdT8uNzoxKSxsKCJtYXJrZXIuc2l6ZSIpLGwoIm1hcmtlci5jb2xvciIsciksaSh0LCJtYXJrZXIiKSYmYSh0LGUscyxsLHtwcmVmaXg6Im1hcmtlci4iLGNMZXR0ZXI6ImMifSksYy5ub1NlbGVjdHx8KGwoInNlbGVjdGVkLm1hcmtlci5jb2xvciIpLGwoInVuc2VsZWN0ZWQubWFya2VyLmNvbG9yIiksbCgic2VsZWN0ZWQubWFya2VyLnNpemUiKSxsKCJ1bnNlbGVjdGVkLm1hcmtlci5zaXplIikpLGMubm9MaW5lfHwobCgibWFya2VyLmxpbmUuY29sb3IiLGYmJiFBcnJheS5pc0FycmF5KGYpJiZlLm1hcmtlci5jb2xvciE9PWY/Zjp1P24uYmFja2dyb3VuZDpuLmRlZmF1bHRMaW5lKSxpKHQsIm1hcmtlci5saW5lIikmJmEodCxlLHMsbCx7cHJlZml4OiJtYXJrZXIubGluZS4iLGNMZXR0ZXI6ImMifSksbCgibWFya2VyLmxpbmUud2lkdGgiLHU/MTowKSksdSYmKGwoIm1hcmtlci5zaXplcmVmIiksbCgibWFya2VyLnNpemVtaW4iKSxsKCJtYXJrZXIuc2l6ZW1vZGUiKSksYy5ncmFkaWVudCkmJigibm9uZSIhPT1sKCJtYXJrZXIuZ3JhZGllbnQudHlwZSIpJiZsKCJtYXJrZXIuZ3JhZGllbnQuY29sb3IiKSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2NDksIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjo2NTAsIi4vc3VidHlwZXMiOjEyMTZ9XSwxMjExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmRhdGVUaWNrMCxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5PTkVXRUVLO2Z1bmN0aW9uIGEodCxlKXtyZXR1cm4gbihlLHQlaT09MD8xOjApfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe2lmKGl8fChpPXt4OiEwLHk6ITB9KSxpLngpe3ZhciBvPW4oInhwZXJpb2QiKTtvJiYobigieHBlcmlvZDAiLGEobyxlLnhjYWxlbmRhcikpLG4oInhwZXJpb2RhbGlnbm1lbnQiKSl9aWYoaS55KXt2YXIgcz1uKCJ5cGVyaW9kIik7cyYmKG4oInlwZXJpb2QwIixhKHMsZS55Y2FsZW5kYXIpKSxuKCJ5cGVyaW9kYWxpZ25tZW50IikpfX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3Nn1dLDEyMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89YS5lbnN1cmVTaW5nbGUscz1hLmlkZW50aXR5LGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuL3N1YnR5cGVzIiksdT10KCIuL2xpbmVfcG9pbnRzIiksZj10KCIuL2xpbmtfdHJhY2VzIiksaD10KCIuLi8uLi9saWIvcG9seWdvbiIpLnRlc3RlcjtmdW5jdGlvbiBwKHQsZSxyLGYscCxkLG0pe3ZhciBnOyFmdW5jdGlvbih0LGUscixpLG8pe3ZhciBzPXIueGF4aXMsbD1yLnlheGlzLHU9bi5leHRlbnQoYS5zaW1wbGVNYXAocy5yYW5nZSxzLnIyYykpLGY9bi5leHRlbnQoYS5zaW1wbGVNYXAobC5yYW5nZSxsLnIyYykpLGg9aVswXS50cmFjZTtpZighYy5oYXNNYXJrZXJzKGgpKXJldHVybjt2YXIgcD1oLm1hcmtlci5tYXhkaXNwbGF5ZWQ7aWYoMD09PXApcmV0dXJuO3ZhciBkPWkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC54Pj11WzBdJiZ0Lng8PXVbMV0mJnQueT49ZlswXSYmdC55PD1mWzFdfSkpLG09TWF0aC5jZWlsKGQubGVuZ3RoL3ApLGc9MDtvLmZvckVhY2goKGZ1bmN0aW9uKHQscil7dmFyIG49dFswXS50cmFjZTtjLmhhc01hcmtlcnMobikmJm4ubWFya2VyLm1heGRpc3BsYXllZD4wJiZyPGUmJmcrK30pKTt2YXIgdj1NYXRoLnJvdW5kKGcqbS8zK01hdGguZmxvb3IoZy8zKSptLzcuMSk7aS5mb3JFYWNoKChmdW5jdGlvbih0KXtkZWxldGUgdC52aXN9KSksZC5mb3JFYWNoKChmdW5jdGlvbih0LGUpezA9PT1NYXRoLnJvdW5kKChlK3YpJW0pJiYodC52aXM9ITApfSkpfSgwLGUscixmLHApO3ZhciB2PSEhbSYmbS5kdXJhdGlvbj4wO2Z1bmN0aW9uIHkodCl7cmV0dXJuIHY/dC50cmFuc2l0aW9uKCk6dH12YXIgeD1yLnhheGlzLGI9ci55YXhpcyxfPWZbMF0udHJhY2Usdz1fLmxpbmUsVD1uLnNlbGVjdChkKSxrPW8oVCwiZyIsImVycm9yYmFycyIpLEE9byhULCJnIiwibGluZXMiKSxNPW8oVCwiZyIsInBvaW50cyIpLFM9byhULCJnIiwidGV4dCIpO2lmKGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJwbG90IikodCxrLHIsbSksITA9PT1fLnZpc2libGUpe3ZhciBFLEw7eShUKS5zdHlsZSgib3BhY2l0eSIsXy5vcGFjaXR5KTt2YXIgQz1fLmZpbGwuY2hhckF0KF8uZmlsbC5sZW5ndGgtMSk7IngiIT09QyYmInkiIT09QyYmKEM9IiIpLGZbMF1bci5pc1JhbmdlUGxvdD8ibm9kZVJhbmdlUGxvdDMiOiJub2RlMyJdPVQ7dmFyIFAsSSxPPSIiLHo9W10sRD1fLl9wcmV2dHJhY2U7RCYmKE89RC5fcHJldlJldnBhdGh8fCIiLEw9RC5fbmV4dEZpbGwsej1ELl9wb2x5Z29ucyk7dmFyIFIsRixCLE4saixVLFYsSD0iIixxPSIiLEc9W10sWT1hLm5vb3A7aWYoRT1fLl9vd25GaWxsLGMuaGFzTGluZXMoXyl8fCJub25lIiE9PV8uZmlsbCl7Zm9yKEwmJkwuZGF0dW0oZiksLTEhPT1bImh2IiwidmgiLCJodmgiLCJ2aHYiXS5pbmRleE9mKHcuc2hhcGUpPyhSPWwuc3RlcHMody5zaGFwZSksRj1sLnN0ZXBzKHcuc2hhcGUuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKSkpOlI9Rj0ic3BsaW5lIj09PXcuc2hhcGU/ZnVuY3Rpb24odCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gdC5sZW5ndGg+MSYmdFswXVswXT09PWVbMF0mJnRbMF1bMV09PT1lWzFdP2wuc21vb3RoY2xvc2VkKHQuc2xpY2UoMSksdy5zbW9vdGhpbmcpOmwuc21vb3Rob3Blbih0LHcuc21vb3RoaW5nKX06ZnVuY3Rpb24odCl7cmV0dXJuIk0iK3Quam9pbigiTCIpfSxCPWZ1bmN0aW9uKHQpe3JldHVybiBGKHQucmV2ZXJzZSgpKX0sRz11KGYse3hheGlzOngseWF4aXM6Yixjb25uZWN0R2FwczpfLmNvbm5lY3RnYXBzLGJhc2VUb2xlcmFuY2U6TWF0aC5tYXgody53aWR0aHx8MSwzKS80LHNoYXBlOncuc2hhcGUsc2ltcGxpZnk6dy5zaW1wbGlmeSxmaWxsOl8uZmlsbH0pLFY9Xy5fcG9seWdvbnM9bmV3IEFycmF5KEcubGVuZ3RoKSxnPTA7ZzxHLmxlbmd0aDtnKyspXy5fcG9seWdvbnNbZ109aChHW2ddKTtHLmxlbmd0aCYmKE49R1swXVswXSxVPShqPUdbRy5sZW5ndGgtMV0pW2oubGVuZ3RoLTFdKSxZPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihQPVIoZSksST1CKGUpLEg/Qz8oSCs9IkwiK1Auc3Vic3RyKDEpLHE9SSsiTCIrcS5zdWJzdHIoMSkpOihIKz0iWiIrUCxxPUkrIloiK3EpOihIPVAscT1JKSxjLmhhc0xpbmVzKF8pJiZlLmxlbmd0aD4xKXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtpZihyLmRhdHVtKGYpLHQpeShyLnN0eWxlKCJvcGFjaXR5IiwwKS5hdHRyKCJkIixQKS5jYWxsKGwubGluZUdyb3VwU3R5bGUpKS5zdHlsZSgib3BhY2l0eSIsMSk7ZWxzZXt2YXIgaT15KHIpO2kuYXR0cigiZCIsUCksbC5zaW5nbGVMaW5lU3R5bGUoZixpKX19fX19dmFyIFc9QS5zZWxlY3RBbGwoIi5qcy1saW5lIikuZGF0YShHKTt5KFcuZXhpdCgpKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksVy5lYWNoKFkoITEpKSxXLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgianMtbGluZSIsITApLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuY2FsbChsLmxpbmVHcm91cFN0eWxlKS5lYWNoKFkoITApKSxsLnNldENsaXBVcmwoVyxyLmxheWVyQ2xpcElkLHQpLEcubGVuZ3RoPyhFPyhFLmRhdHVtKGYpLE4mJlUmJihDPygieSI9PT1DP05bMV09VVsxXT1iLmMycCgwLCEwKToieCI9PT1DJiYoTlswXT1VWzBdPXguYzJwKDAsITApKSx5KEUpLmF0dHIoImQiLCJNIitVKyJMIitOKyJMIitILnN1YnN0cigxKSkuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSkpOnkoRSkuYXR0cigiZCIsSCsiWiIpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpKSk6TCYmKCJ0b25leHQiPT09Xy5maWxsLnN1YnN0cigwLDYpJiZIJiZPPygidG9uZXh0Ij09PV8uZmlsbD95KEwpLmF0dHIoImQiLEgrIloiK08rIloiKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlKTp5KEwpLmF0dHIoImQiLEgrIkwiK08uc3Vic3RyKDEpKyJaIikuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSksXy5fcG9seWdvbnM9Xy5fcG9seWdvbnMuY29uY2F0KHopKTooWihMKSxfLl9wb2x5Z29ucz1udWxsKSksXy5fcHJldlJldnBhdGg9cSxfLl9wcmV2UG9seWdvbnM9Vik6KEU/WihFKTpMJiZaKEwpLF8uX3BvbHlnb25zPV8uX3ByZXZSZXZwYXRoPV8uX3ByZXZQb2x5Z29ucz1udWxsKSxNLmRhdHVtKGYpLFMuZGF0dW0oZiksZnVuY3Rpb24oZSxpLGEpe3ZhciBvLHU9YVswXS50cmFjZSxmPWMuaGFzTWFya2Vycyh1KSxoPWMuaGFzVGV4dCh1KSxwPXR0KHUpLGQ9ZXQsbT1ldDtpZihmfHxoKXt2YXIgZz1zLF89dS5zdGFja2dyb3VwLHc9XyYmImluZmVyIHplcm8iPT09dC5fZnVsbExheW91dC5fc2NhdHRlclN0YWNrT3B0c1t4Ll9pZCtiLl9pZF1bX10uc3RhY2tnYXBzO3UubWFya2VyLm1heGRpc3BsYXllZHx8dS5fbmVlZHNDdWxsP2c9dz9LOko6XyYmIXcmJihnPVEpLGYmJihkPWcpLGgmJihtPWcpfXZhciBULGs9KG89ZS5zZWxlY3RBbGwoInBhdGgucG9pbnQiKS5kYXRhKGQscCkpLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgicG9pbnQiLCEwKTt2JiZrLmNhbGwobC5wb2ludFN0eWxlLHUsdCkuY2FsbChsLnRyYW5zbGF0ZVBvaW50cyx4LGIpLnN0eWxlKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpLG8ub3JkZXIoKSxmJiYoVD1sLm1ha2VQb2ludFN0eWxlRm5zKHUpKSxvLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9eShpKTtsLnRyYW5zbGF0ZVBvaW50KGUsYSx4LGIpPyhsLnNpbmdsZVBvaW50U3R5bGUoZSxhLHUsVCx0KSxyLmxheWVyQ2xpcElkJiZsLmhpZGVPdXRzaWRlUmFuZ2VQb2ludChlLGEseCxiLHUueGNhbGVuZGFyLHUueWNhbGVuZGFyKSx1LmN1c3RvbWRhdGEmJmkuY2xhc3NlZCgicGxvdGx5LWN1c3RvbWRhdGEiLG51bGwhPT1lLmRhdGEmJnZvaWQgMCE9PWUuZGF0YSkpOmEucmVtb3ZlKCl9KSksdj9vLmV4aXQoKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpOm8uZXhpdCgpLnJlbW92ZSgpLChvPWkuc2VsZWN0QWxsKCJnIikuZGF0YShtLHApKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRleHRwb2ludCIsITApLmFwcGVuZCgidGV4dCIpLG8ub3JkZXIoKSxvLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGk9eShlLnNlbGVjdCgidGV4dCIpKTtsLnRyYW5zbGF0ZVBvaW50KHQsaSx4LGIpP3IubGF5ZXJDbGlwSWQmJmwuaGlkZU91dHNpZGVSYW5nZVBvaW50KHQsZSx4LGIsdS54Y2FsZW5kYXIsdS55Y2FsZW5kYXIpOmUucmVtb3ZlKCl9KSksby5zZWxlY3RBbGwoInRleHQiKS5jYWxsKGwudGV4dFBvaW50U3R5bGUsdSx0KS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT14LmMycCh0LngpLHI9Yi5jMnAodC55KTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5lYWNoKChmdW5jdGlvbigpe3kobi5zZWxlY3QodGhpcykpLmF0dHIoe3g6ZSx5OnJ9KX0pKX0pKSxvLmV4aXQoKS5yZW1vdmUoKX0oTSxTLGYpO3ZhciBYPSExPT09Xy5jbGlwb25heGlzP251bGw6ci5sYXllckNsaXBJZDtsLnNldENsaXBVcmwoTSxYLHQpLGwuc2V0Q2xpcFVybChTLFgsdCl9ZnVuY3Rpb24gWih0KXt5KHQpLmF0dHIoImQiLCJNMCwwWiIpfWZ1bmN0aW9uIEoodCl7cmV0dXJuIHQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hdC5nYXAmJnQudmlzfSkpfWZ1bmN0aW9uIEsodCl7cmV0dXJuIHQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC52aXN9KSl9ZnVuY3Rpb24gUSh0KXtyZXR1cm4gdC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiF0LmdhcH0pKX1mdW5jdGlvbiAkKHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIHR0KHQpe2lmKHQuaWRzKXJldHVybiAkfWZ1bmN0aW9uIGV0KCl7cmV0dXJuITF9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGEsYyl7dmFyIHUsaCxkPSFhLG09ISFhJiZhLmR1cmF0aW9uPjAsZz1mKHQsZSxyKTsoKHU9aS5zZWxlY3RBbGwoImcudHJhY2UiKS5kYXRhKGcsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pKSkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFjZSBzY2F0dGVyIHRyYWNlIit0WzBdLnRyYWNlLnVpZH0pKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDIpLHUub3JkZXIoKSxmdW5jdGlvbih0LGUscil7ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgaT1vKG4uc2VsZWN0KHRoaXMpLCJnIiwiZmlsbHMiKTtsLnNldENsaXBVcmwoaSxyLmxheWVyQ2xpcElkLHQpO3ZhciBhPWVbMF0udHJhY2UsYz1bXTthLl9vd25maWxsJiZjLnB1c2goIl9vd25GaWxsIiksYS5fbmV4dHRyYWNlJiZjLnB1c2goIl9uZXh0RmlsbCIpO3ZhciB1PWkuc2VsZWN0QWxsKCJnIikuZGF0YShjLHMpO3UuZW50ZXIoKS5hcHBlbmQoImciKSx1LmV4aXQoKS5lYWNoKChmdW5jdGlvbih0KXthW3RdPW51bGx9KSkucmVtb3ZlKCksdS5vcmRlcigpLmVhY2goKGZ1bmN0aW9uKHQpe2FbdF09byhuLnNlbGVjdCh0aGlzKSwicGF0aCIsImpzLWZpbGwiKX0pKX0pKX0odCx1LGUpLG0pPyhjJiYoaD1jKCkpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKGEuZHVyYXRpb24pLmVhc2UoYS5lYXNpbmcpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7aCYmaCgpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7aCYmaCgpfSkpLmVhY2goKGZ1bmN0aW9uKCl7aS5zZWxlY3RBbGwoImcudHJhY2UiKS5lYWNoKChmdW5jdGlvbihyLG4pe3AodCxuLGUscixnLHRoaXMsYSl9KSl9KSkpOnUuZWFjaCgoZnVuY3Rpb24ocixuKXtwKHQsbixlLHIsZyx0aGlzLGEpfSkpO2QmJnUuZXhpdCgpLnJlbW92ZSgpLGkuc2VsZWN0QWxsKCJwYXRoOm5vdChbZF0pIikucmVtb3ZlKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL3BvbHlnb24iOjc4OCwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi9saW5lX3BvaW50cyI6MTIwNSwiLi9saW5rX3RyYWNlcyI6MTIwNywiLi9zdWJ0eXBlcyI6MTIxNiwiQHBsb3RseS9kMyI6NTh9XSwxMjEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsbyxzPXQuY2QsbD10LnhheGlzLGM9dC55YXhpcyx1PVtdLGY9c1swXS50cmFjZTtpZighbi5oYXNNYXJrZXJzKGYpJiYhbi5oYXNUZXh0KGYpKXJldHVybltdO2lmKCExPT09ZSlmb3Iocj0wO3I8cy5sZW5ndGg7cisrKXNbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxzLmxlbmd0aDtyKyspaT1zW3JdLGE9bC5jMnAoaS54KSxvPWMuYzJwKGkueSksbnVsbCE9PWkuaSYmZS5jb250YWlucyhbYSxvXSwhMSxyLHQpPyh1LnB1c2goe3BvaW50TnVtYmVyOmkuaSx4OmwuYzJkKGkueCkseTpjLmMyZChpLnkpfSksaS5zZWxlY3RlZD0xKTppLnNlbGVjdGVkPTA7cmV0dXJuIHV9fSx7Ii4vc3VidHlwZXMiOjEyMTZ9XSwxMjE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPVsib3JpZW50YXRpb24iLCJncm91cG5vcm0iLCJzdGFja2dhcHMiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9ci5fc2NhdHRlclN0YWNrT3B0cyxvPWkoInN0YWNrZ3JvdXAiKTtpZihvKXt2YXIgcz1lLnhheGlzK2UueWF4aXMsbD1hW3NdO2x8fChsPWFbc109e30pO3ZhciBjPWxbb10sdT0hMTtjP2MudHJhY2VzLnB1c2goZSk6KGM9bFtvXT17dHJhY2VJbmRpY2VzOltdLHRyYWNlczpbZV19LHU9ITApO2Zvcih2YXIgZj17b3JpZW50YXRpb246ZS54JiYhZS55PyJoIjoidiJ9LGg9MDtoPG4ubGVuZ3RoO2grKyl7dmFyIHA9bltoXSxkPXArIkZvdW5kIjtpZighY1tkXSl7dmFyIG09dm9pZCAwIT09dFtwXSxnPSJvcmllbnRhdGlvbiI9PT1wO2lmKChtfHx1KSYmKGNbcF09aShwLGZbcF0pLGcmJihjLmZpbGxEZmx0PSJoIj09PWNbcF0/InRvbmV4dHgiOiJ0b25leHR5IiksbSYmKGNbZF09ITAsIXUmJihkZWxldGUgYy50cmFjZXNbMF1bcF0sZykpKSlmb3IodmFyIHY9MDt2PGMudHJhY2VzLmxlbmd0aC0xO3YrKyl7dmFyIHk9Yy50cmFjZXNbdl07eS5faW5wdXQuZmlsbCE9PXkuZmlsbCYmKHkuZmlsbD1jLmZpbGxEZmx0KX19fXJldHVybiBjfX19LHt9XSwxMjE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiBvKHQsZSxyKXtpLnBvaW50U3R5bGUodC5zZWxlY3RBbGwoInBhdGgucG9pbnQiKSxlLHIpfWZ1bmN0aW9uIHModCxlLHIpe2kudGV4dFBvaW50U3R5bGUodC5zZWxlY3RBbGwoInRleHQiKSxlLHIpfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLnRyYWNlLnNjYXR0ZXIiKTtlLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKSxlLnNlbGVjdEFsbCgiZy5wb2ludHMiKS5lYWNoKChmdW5jdGlvbihlKXtvKG4uc2VsZWN0KHRoaXMpLGUudHJhY2V8fGVbMF0udHJhY2UsdCl9KSksZS5zZWxlY3RBbGwoImcudGV4dCIpLmVhY2goKGZ1bmN0aW9uKGUpe3Mobi5zZWxlY3QodGhpcyksZS50cmFjZXx8ZVswXS50cmFjZSx0KX0pKSxlLnNlbGVjdEFsbCgiZy50cmFjZSBwYXRoLmpzLWxpbmUiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUpLGUuc2VsZWN0QWxsKCJnLnRyYWNlIHBhdGguanMtZmlsbCIpLmNhbGwoaS5maWxsR3JvdXBTdHlsZSksYS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN0eWxlIikoZSl9LHN0eWxlUG9pbnRzOm8sc3R5bGVUZXh0OnMsc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUscil7dmFyIG49ZVswXS50cmFjZTtuLnNlbGVjdGVkcG9pbnRzPyhpLnNlbGVjdGVkUG9pbnRTdHlsZShyLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLG4pLGkuc2VsZWN0ZWRUZXh0U3R5bGUoci5zZWxlY3RBbGwoInRleHQiKSxuKSk6KG8ocixuLHQpLHMocixuLHQpKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9yZWdpc3RyeSI6OTA0LCJAcGxvdGx5L2QzIjo1OH1dLDEyMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPXtoYXNMaW5lczpmdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlJiZ0Lm1vZGUmJi0xIT09dC5tb2RlLmluZGV4T2YoImxpbmVzIil9LGhhc01hcmtlcnM6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmKHQubW9kZSYmLTEhPT10Lm1vZGUuaW5kZXhPZigibWFya2VycyIpfHwic3Bsb20iPT09dC50eXBlKX0saGFzVGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlJiZ0Lm1vZGUmJi0xIT09dC5tb2RlLmluZGV4T2YoInRleHQiKX0saXNCdWJibGU6ZnVuY3Rpb24odCl7cmV0dXJuIG4uaXNQbGFpbk9iamVjdCh0Lm1hcmtlcikmJm4uaXNBcnJheU9yVHlwZWRBcnJheSh0Lm1hcmtlci5zaXplKX19fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sMTIxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxhKXthPWF8fHt9LGkoInRleHRwb3NpdGlvbiIpLG4uY29lcmNlRm9udChpLCJ0ZXh0Zm9udCIsci5mb250KSxhLm5vU2VsZWN0fHwoaSgic2VsZWN0ZWQudGV4dGZvbnQuY29sb3IiKSxpKCJ1bnNlbGVjdGVkLnRleHRmb250LmNvbG9yIikpfX0seyIuLi8uLi9saWIiOjc3Nn1dLDEyMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbyxzPWEoIngiKSxsPWEoInkiKTtpZihpLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5Il0scikscyl7dmFyIGM9bi5taW5Sb3dMZW5ndGgocyk7bD9vPU1hdGgubWluKGMsbi5taW5Sb3dMZW5ndGgobCkpOihvPWMsYSgieTAiKSxhKCJkeSIpKX1lbHNle2lmKCFsKXJldHVybiAwO289bi5taW5Sb3dMZW5ndGgobCksYSgieDAiKSxhKCJkeCIpfXJldHVybiBlLl9sZW5ndGg9byxvfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcmVnaXN0cnkiOjkwNH1dLDEyMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsbz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLHM9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGw9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGM9dCgiLi4vLi4vY29uc3RhbnRzL2dsM2RfZGFzaGVzIiksdT10KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIiksZj10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxoPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxwPXQoIi4uLy4uL2xpYi9zb3J0X29iamVjdF9rZXlzIiksZD1uLmxpbmUsbT1uLm1hcmtlcixnPW0ubGluZSx2PWYoe3dpZHRoOmQud2lkdGgsZGFzaDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnAoYyksZGZsdDoic29saWQifX0saSgibGluZSIpKTt2YXIgeT1lLmV4cG9ydHM9aCh7eDpuLngseTpuLnksejp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHRleHQ6Zih7fSxuLnRleHQse30pLHRleHR0ZW1wbGF0ZTpzKHt9LHt9KSxob3ZlcnRleHQ6Zih7fSxuLmhvdmVydGV4dCx7fSksaG92ZXJ0ZW1wbGF0ZTpvKCkseGhvdmVyZm9ybWF0OmEoIngiKSx5aG92ZXJmb3JtYXQ6YSgieSIpLHpob3ZlcmZvcm1hdDphKCJ6IiksbW9kZTpmKHt9LG4ubW9kZSx7ZGZsdDoibGluZXMrbWFya2VycyJ9KSxzdXJmYWNlYXhpczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlstMSwwLDEsMl0sZGZsdDotMX0sc3VyZmFjZWNvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LHByb2plY3Rpb246e3g6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxzY2FsZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MTAsZGZsdDoyLzN9fSx5OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEwLGRmbHQ6Mi8zfX0sejp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9LHNjYWxlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxMCxkZmx0OjIvM319fSxjb25uZWN0Z2FwczpuLmNvbm5lY3RnYXBzLGxpbmU6dixtYXJrZXI6Zih7c3ltYm9sOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6cCh1KSxkZmx0OiJjaXJjbGUiLGFycmF5T2s6ITB9LHNpemU6Zih7fSxtLnNpemUse2RmbHQ6OH0pLHNpemVyZWY6bS5zaXplcmVmLHNpemVtaW46bS5zaXplbWluLHNpemVtb2RlOm0uc2l6ZW1vZGUsb3BhY2l0eTpmKHt9LG0ub3BhY2l0eSx7YXJyYXlPazohMX0pLGNvbG9yYmFyOm0uY29sb3JiYXIsbGluZTpmKHt3aWR0aDpmKHt9LGcud2lkdGgse2FycmF5T2s6ITF9KX0saSgibWFya2VyLmxpbmUiKSl9LGkoIm1hcmtlciIpKSx0ZXh0cG9zaXRpb246Zih7fSxuLnRleHRwb3NpdGlvbix7ZGZsdDoidG9wIGNlbnRlciJ9KSx0ZXh0Zm9udDp7Y29sb3I6bi50ZXh0Zm9udC5jb2xvcixzaXplOm4udGV4dGZvbnQuc2l6ZSxmYW1pbHk6Zih7fSxuLnRleHRmb250LmZhbWlseSx7YXJyYXlPazohMX0pfSxob3ZlcmluZm86Zih7fSxsLmhvdmVyaW5mbyl9LCJjYWxjIiwibmVzdGVkIik7eS54LmVkaXRUeXBlPXkueS5lZGl0VHlwZT15LnouZWRpdFR5cGU9ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyI6NzQ5LCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIjo3NTAsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vbGliL3NvcnRfb2JqZWN0X2tleXMiOjc5OSwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODA5LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo4MzAsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OSwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTkxfV0sMTIyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLGk9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1be3g6ITEseTohMSx0cmFjZTplLHQ6e319XTtyZXR1cm4gbihyLGUpLGkodCxlKSxyfX0seyIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTE5MCwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjExOTR9XSwxMjIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ZnVuY3Rpb24gaSh0LGUscixpKXtpZighZXx8IWUudmlzaWJsZSlyZXR1cm4gbnVsbDtmb3IodmFyIGE9bi5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsIm1ha2VDb21wdXRlRXJyb3IiKShlKSxvPW5ldyBBcnJheSh0Lmxlbmd0aCkscz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD1hKCt0W3NdLHMpO2lmKCJsb2ciPT09aS50eXBlKXt2YXIgYz1pLmMybCh0W3NdKSx1PXRbc10tbFswXSxmPXRbc10rbFsxXTtpZihvW3NdPVsoaS5jMmwodSwhMCktYykqciwoaS5jMmwoZiwhMCktYykqcl0sdT4wKXt2YXIgaD1pLmMybCh1KTtpLl9sb3dlckxvZ0Vycm9yQm91bmR8fChpLl9sb3dlckxvZ0Vycm9yQm91bmQ9aCksaS5fbG93ZXJFcnJvckJvdW5kPU1hdGgubWluKGkuX2xvd2VyTG9nRXJyb3JCb3VuZCxoKX19ZWxzZSBvW3NdPVstbFswXSpyLGxbMV0qcl19cmV0dXJuIG99ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1baSh0LngsdC5lcnJvcl94LGVbMF0sci54YXhpcyksaSh0LnksdC5lcnJvcl95LGVbMV0sci55YXhpcyksaSh0LnosdC5lcnJvcl96LGVbMl0sci56YXhpcyldLGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodFtlXSlyZXR1cm4gdFtlXS5sZW5ndGg7cmV0dXJuIDB9KG4pO2lmKDA9PT1hKXJldHVybiBudWxsO2Zvcih2YXIgbz1uZXcgQXJyYXkoYSkscz0wO3M8YTtzKyspe2Zvcih2YXIgbD1bWzAsMCwwXSxbMCwwLDBdXSxjPTA7YzwzO2MrKylpZihuW2NdKWZvcih2YXIgdT0wO3U8Mjt1KyspbFt1XVtjXT1uW2NdW3NdW3VdO29bc109bH1yZXR1cm4gb319LHsiLi4vLi4vcmVnaXN0cnkiOjkwNH1dLDEyMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtbGluZTNkIiksaT10KCJnbC1zY2F0dGVyM2QiKSxhPXQoImdsLWVycm9yM2QiKSxvPXQoImdsLW1lc2gzZCIpLHM9dCgiZGVsYXVuYXktdHJpYW5ndWxhdGUiKSxsPXQoIi4uLy4uL2xpYiIpLGM9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLHU9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLmZvcm1hdENvbG9yLGY9dCgiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiKSxoPXQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyIpLHA9dCgiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyIpLGQ9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxtPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxnPXQoIi4vY2FsY19lcnJvcnMiKTtmdW5jdGlvbiB2KHQsZSl7dGhpcy5zY2VuZT10LHRoaXMudWlkPWUsdGhpcy5saW5lUGxvdD1udWxsLHRoaXMuc2NhdHRlclBsb3Q9bnVsbCx0aGlzLmVycm9yQmFycz1udWxsLHRoaXMudGV4dE1hcmtlcnM9bnVsbCx0aGlzLmRlbGF1bmF5TWVzaD1udWxsLHRoaXMuY29sb3I9bnVsbCx0aGlzLm1vZGU9IiIsdGhpcy5kYXRhUG9pbnRzPVtdLHRoaXMuYXhlc0JvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLnRleHRMYWJlbHM9bnVsbCx0aGlzLmRhdGE9bnVsbH12YXIgeT12LnByb3RvdHlwZTtmdW5jdGlvbiB4KHQpe3JldHVybiBudWxsPT10PzA6dC5pbmRleE9mKCJsZWZ0Iik+LTE/LTE6dC5pbmRleE9mKCJyaWdodCIpPi0xPzE6MH1mdW5jdGlvbiBiKHQpe3JldHVybiBudWxsPT10PzA6dC5pbmRleE9mKCJ0b3AiKT4tMT8tMTp0LmluZGV4T2YoImJvdHRvbSIpPi0xPzE6MH1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuIGUoNCp0KX1mdW5jdGlvbiB3KHQpe3JldHVybiBwW3RdfWZ1bmN0aW9uIFQodCxlLHIsbixpKXt2YXIgYT1udWxsO2lmKGwuaXNBcnJheU9yVHlwZWRBcnJheSh0KSl7YT1bXTtmb3IodmFyIG89MDtvPGU7bysrKXZvaWQgMD09PXRbb10/YVtvXT1uOmFbb109cih0W29dLGkpfWVsc2UgYT1yKHQsbC5pZGVudGl0eSk7cmV0dXJuIGF9ZnVuY3Rpb24gayh0LGUpe3ZhciByLG4saSxhLG8scyxoPVtdLHA9dC5mdWxsU2NlbmVMYXlvdXQsdj10LmRhdGFTY2FsZSx5PXAueGF4aXMsaz1wLnlheGlzLEE9cC56YXhpcyxNPWUubWFya2VyLFM9ZS5saW5lLEU9ZS54fHxbXSxMPWUueXx8W10sQz1lLnp8fFtdLFA9RS5sZW5ndGgsST1lLnhjYWxlbmRhcixPPWUueWNhbGVuZGFyLHo9ZS56Y2FsZW5kYXI7Zm9yKG89MDtvPFA7bysrKXI9eS5kMmwoRVtvXSwwLEkpKnZbMF0sbj1rLmQybChMW29dLDAsTykqdlsxXSxpPUEuZDJsKENbb10sMCx6KSp2WzJdLGhbb109W3IsbixpXTtpZihBcnJheS5pc0FycmF5KGUudGV4dCkpcz1lLnRleHQ7ZWxzZSBpZih2b2lkIDAhPT1lLnRleHQpZm9yKHM9bmV3IEFycmF5KFApLG89MDtvPFA7bysrKXNbb109ZS50ZXh0O2Z1bmN0aW9uIEQodCxlKXt2YXIgcj1wW3RdO3JldHVybiBkLnRpY2tUZXh0KHIsci5kMmwoZSksITApLnRleHR9dmFyIFI9ZS50ZXh0dGVtcGxhdGU7aWYoUil7dmFyIEY9dC5mdWxsTGF5b3V0Ll9kM2xvY2FsZSxCPUFycmF5LmlzQXJyYXkoUiksTj1CP01hdGgubWluKFIubGVuZ3RoLFApOlAsaj1CP2Z1bmN0aW9uKHQpe3JldHVybiBSW3RdfTpmdW5jdGlvbigpe3JldHVybiBSfTtmb3Iocz1uZXcgQXJyYXkoTiksbz0wO288TjtvKyspe3ZhciBVPXt4OkVbb10seTpMW29dLHo6Q1tvXX0sVj17eExhYmVsOkQoInhheGlzIixFW29dKSx5TGFiZWw6RCgieWF4aXMiLExbb10pLHpMYWJlbDpEKCJ6YXhpcyIsQ1tvXSl9LEg9e307bShILGUsbyk7dmFyIHE9ZS5fbWV0YXx8e307c1tvXT1sLnRleHR0ZW1wbGF0ZVN0cmluZyhqKG8pLFYsRixILFUscSl9fWlmKGE9e3Bvc2l0aW9uOmgsbW9kZTplLm1vZGUsdGV4dDpzfSwibGluZSJpbiBlJiYoYS5saW5lQ29sb3I9dShTLDEsUCksYS5saW5lV2lkdGg9Uy53aWR0aCxhLmxpbmVEYXNoZXM9Uy5kYXNoKSwibWFya2VyImluIGUpe3ZhciBHPWYoZSk7YS5zY2F0dGVyQ29sb3I9dShNLDEsUCksYS5zY2F0dGVyU2l6ZT1UKE0uc2l6ZSxQLF8sMjAsRyksYS5zY2F0dGVyTWFya2VyPVQoTS5zeW1ib2wsUCx3LCJcdTI1Y2YiKSxhLnNjYXR0ZXJMaW5lV2lkdGg9TS5saW5lLndpZHRoLGEuc2NhdHRlckxpbmVDb2xvcj11KE0ubGluZSwxLFApLGEuc2NhdHRlckFuZ2xlPTB9InRleHRwb3NpdGlvbiJpbiBlJiYoYS50ZXh0T2Zmc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPVswLDBdO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZVtyXT1bMCwwXSx0W3JdJiYoZVtyXVswXT14KHRbcl0pLGVbcl1bMV09Yih0W3JdKSk7ZWxzZSBlWzBdPXgodCksZVsxXT1iKHQpO3JldHVybiBlfShlLnRleHRwb3NpdGlvbiksYS50ZXh0Q29sb3I9dShlLnRleHRmb250LDEsUCksYS50ZXh0U2l6ZT1UKGUudGV4dGZvbnQuc2l6ZSxQLGwuaWRlbnRpdHksMTIpLGEudGV4dEZvbnQ9ZS50ZXh0Zm9udC5mYW1pbHksYS50ZXh0QW5nbGU9MCk7dmFyIFk9WyJ4IiwieSIsInoiXTtmb3IoYS5wcm9qZWN0PVshMSwhMSwhMV0sYS5wcm9qZWN0U2NhbGU9WzEsMSwxXSxhLnByb2plY3RPcGFjaXR5PVsxLDEsMV0sbz0wO288MzsrK28pe3ZhciBXPWUucHJvamVjdGlvbltZW29dXTsoYS5wcm9qZWN0W29dPVcuc2hvdykmJihhLnByb2plY3RPcGFjaXR5W29dPVcub3BhY2l0eSxhLnByb2plY3RTY2FsZVtvXT1XLnNjYWxlKX1hLmVycm9yQm91bmRzPWcoZSx2LHApO3ZhciBYPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bMCwwLDBdLHI9W1swLDAsMF0sWzAsMCwwXSxbMCwwLDBdXSxuPVsxLDEsMV0saT0wO2k8MztpKyspe3ZhciBhPXRbaV07YSYmITEhPT1hLmNvcHlfenN0eWxlJiYhMSE9PXRbMl0udmlzaWJsZSYmKGE9dFsyXSksYSYmYS52aXNpYmxlJiYoZVtpXT1hLndpZHRoLzIscltpXT1jKGEuY29sb3IpLG5baV09YS50aGlja25lc3MpfXJldHVybntjYXBTaXplOmUsY29sb3I6cixsaW5lV2lkdGg6bn19KFtlLmVycm9yX3gsZS5lcnJvcl95LGUuZXJyb3Jfel0pO3JldHVybiBhLmVycm9yQ29sb3I9WC5jb2xvcixhLmVycm9yTGluZVdpZHRoPVgubGluZVdpZHRoLGEuZXJyb3JDYXBTaXplPVguY2FwU2l6ZSxhLmRlbGF1bmF5QXhpcz1lLnN1cmZhY2VheGlzLGEuZGVsYXVuYXlDb2xvcj1jKGUuc3VyZmFjZWNvbG9yKSxhfWZ1bmN0aW9uIEEodCl7aWYobC5pc0FycmF5T3JUeXBlZEFycmF5KHQpKXt2YXIgZT10WzBdO3JldHVybiBsLmlzQXJyYXlPclR5cGVkQXJyYXkoZSkmJih0PWUpLCJyZ2IoIit0LnNsaWNlKDAsMykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqdCl9KSkrIikifXJldHVybiBudWxsfWZ1bmN0aW9uIE0odCl7cmV0dXJuIGwuaXNBcnJheU9yVHlwZWRBcnJheSh0KT80PT09dC5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2YgdFswXT9BKHQpOnQubWFwKEEpOm51bGx9eS5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0JiYodC5vYmplY3Q9PT10aGlzLmxpbmVQbG90fHx0Lm9iamVjdD09PXRoaXMuZGVsYXVuYXlNZXNofHx0Lm9iamVjdD09PXRoaXMudGV4dE1hcmtlcnN8fHQub2JqZWN0PT09dGhpcy5zY2F0dGVyUGxvdCkpe3ZhciBlPXQuaW5kZXg9dC5kYXRhLmluZGV4O3JldHVybiB0Lm9iamVjdC5oaWdobGlnaHQmJnQub2JqZWN0LmhpZ2hsaWdodChudWxsKSx0aGlzLnNjYXR0ZXJQbG90JiYodC5vYmplY3Q9dGhpcy5zY2F0dGVyUGxvdCx0aGlzLnNjYXR0ZXJQbG90LmhpZ2hsaWdodCh0LmRhdGEpKSx0LnRleHRMYWJlbD0iIix0aGlzLnRleHRMYWJlbHMmJihBcnJheS5pc0FycmF5KHRoaXMudGV4dExhYmVscyk/KHRoaXMudGV4dExhYmVsc1tlXXx8MD09PXRoaXMudGV4dExhYmVsc1tlXSkmJih0LnRleHRMYWJlbD10aGlzLnRleHRMYWJlbHNbZV0pOnQudGV4dExhYmVsPXRoaXMudGV4dExhYmVscyksdC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS54W2VdLHRoaXMuZGF0YS55W2VdLHRoaXMuZGF0YS56W2VdXSwhMH19LHkudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbCxjLHU9dGhpcy5zY2VuZS5nbHBsb3QuZ2wsZj1oLnNvbGlkO3RoaXMuZGF0YT10O3ZhciBwPWsodGhpcy5zY2VuZSx0KTsibW9kZSJpbiBwJiYodGhpcy5tb2RlPXAubW9kZSksImxpbmVEYXNoZXMiaW4gcCYmcC5saW5lRGFzaGVzIGluIGgmJihmPWhbcC5saW5lRGFzaGVzXSksdGhpcy5jb2xvcj1NKHAuc2NhdHRlckNvbG9yKXx8TShwLmxpbmVDb2xvciksdGhpcy5kYXRhUG9pbnRzPXAucG9zaXRpb24sZT17Z2w6dGhpcy5zY2VuZS5nbHBsb3QuZ2wscG9zaXRpb246cC5wb3NpdGlvbixjb2xvcjpwLmxpbmVDb2xvcixsaW5lV2lkdGg6cC5saW5lV2lkdGh8fDEsZGFzaGVzOmZbMF0sZGFzaFNjYWxlOmZbMV0sb3BhY2l0eTp0Lm9wYWNpdHksY29ubmVjdEdhcHM6dC5jb25uZWN0Z2Fwc30sLTEhPT10aGlzLm1vZGUuaW5kZXhPZigibGluZXMiKT90aGlzLmxpbmVQbG90P3RoaXMubGluZVBsb3QudXBkYXRlKGUpOih0aGlzLmxpbmVQbG90PW4oZSksdGhpcy5saW5lUGxvdC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5saW5lUGxvdCkpOnRoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCksdGhpcy5saW5lUGxvdD1udWxsKTt2YXIgZD10Lm9wYWNpdHk7aWYodC5tYXJrZXImJnQubWFya2VyLm9wYWNpdHkmJihkKj10Lm1hcmtlci5vcGFjaXR5KSxyPXtnbDp0aGlzLnNjZW5lLmdscGxvdC5nbCxwb3NpdGlvbjpwLnBvc2l0aW9uLGNvbG9yOnAuc2NhdHRlckNvbG9yLHNpemU6cC5zY2F0dGVyU2l6ZSxnbHlwaDpwLnNjYXR0ZXJNYXJrZXIsb3BhY2l0eTpkLG9ydGhvZ3JhcGhpYzohMCxsaW5lV2lkdGg6cC5zY2F0dGVyTGluZVdpZHRoLGxpbmVDb2xvcjpwLnNjYXR0ZXJMaW5lQ29sb3IscHJvamVjdDpwLnByb2plY3QscHJvamVjdFNjYWxlOnAucHJvamVjdFNjYWxlLHByb2plY3RPcGFjaXR5OnAucHJvamVjdE9wYWNpdHl9LC0xIT09dGhpcy5tb2RlLmluZGV4T2YoIm1hcmtlcnMiKT90aGlzLnNjYXR0ZXJQbG90P3RoaXMuc2NhdHRlclBsb3QudXBkYXRlKHIpOih0aGlzLnNjYXR0ZXJQbG90PWkociksdGhpcy5zY2F0dGVyUGxvdC5fdHJhY2U9dGhpcyx0aGlzLnNjYXR0ZXJQbG90LmhpZ2hsaWdodFNjYWxlPTEsdGhpcy5zY2VuZS5nbHBsb3QuYWRkKHRoaXMuc2NhdHRlclBsb3QpKTp0aGlzLnNjYXR0ZXJQbG90JiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc2NhdHRlclBsb3QpLHRoaXMuc2NhdHRlclBsb3QuZGlzcG9zZSgpLHRoaXMuc2NhdHRlclBsb3Q9bnVsbCksYz17Z2w6dGhpcy5zY2VuZS5nbHBsb3QuZ2wscG9zaXRpb246cC5wb3NpdGlvbixnbHlwaDpwLnRleHQsY29sb3I6cC50ZXh0Q29sb3Isc2l6ZTpwLnRleHRTaXplLGFuZ2xlOnAudGV4dEFuZ2xlLGFsaWdubWVudDpwLnRleHRPZmZzZXQsZm9udDpwLnRleHRGb250LG9ydGhvZ3JhcGhpYzohMCxsaW5lV2lkdGg6MCxwcm9qZWN0OiExLG9wYWNpdHk6dC5vcGFjaXR5fSx0aGlzLnRleHRMYWJlbHM9dC5ob3ZlcnRleHR8fHQudGV4dCwtMSE9PXRoaXMubW9kZS5pbmRleE9mKCJ0ZXh0Iik/dGhpcy50ZXh0TWFya2Vycz90aGlzLnRleHRNYXJrZXJzLnVwZGF0ZShjKToodGhpcy50ZXh0TWFya2Vycz1pKGMpLHRoaXMudGV4dE1hcmtlcnMuX3RyYWNlPXRoaXMsdGhpcy50ZXh0TWFya2Vycy5oaWdobGlnaHRTY2FsZT0xLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLnRleHRNYXJrZXJzKSk6dGhpcy50ZXh0TWFya2VycyYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLnRleHRNYXJrZXJzKSx0aGlzLnRleHRNYXJrZXJzLmRpc3Bvc2UoKSx0aGlzLnRleHRNYXJrZXJzPW51bGwpLGw9e2dsOnRoaXMuc2NlbmUuZ2xwbG90LmdsLHBvc2l0aW9uOnAucG9zaXRpb24sY29sb3I6cC5lcnJvckNvbG9yLGVycm9yOnAuZXJyb3JCb3VuZHMsbGluZVdpZHRoOnAuZXJyb3JMaW5lV2lkdGgsY2FwU2l6ZTpwLmVycm9yQ2FwU2l6ZSxvcGFjaXR5OnQub3BhY2l0eX0sdGhpcy5lcnJvckJhcnM/cC5lcnJvckJvdW5kcz90aGlzLmVycm9yQmFycy51cGRhdGUobCk6KHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmVycm9yQmFycyksdGhpcy5lcnJvckJhcnMuZGlzcG9zZSgpLHRoaXMuZXJyb3JCYXJzPW51bGwpOnAuZXJyb3JCb3VuZHMmJih0aGlzLmVycm9yQmFycz1hKGwpLHRoaXMuZXJyb3JCYXJzLl90cmFjZT10aGlzLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLmVycm9yQmFycykpLHAuZGVsYXVuYXlBeGlzPj0wKXt2YXIgbT1mdW5jdGlvbih0LGUscil7dmFyIG4saT0ocisxKSUzLGE9KHIrMiklMyxvPVtdLGw9W107Zm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGM9dFtuXTshaXNOYU4oY1tpXSkmJmlzRmluaXRlKGNbaV0pJiYhaXNOYU4oY1thXSkmJmlzRmluaXRlKGNbYV0pJiYoby5wdXNoKFtjW2ldLGNbYV1dKSxsLnB1c2gobikpfXZhciB1PXMobyk7Zm9yKG49MDtuPHUubGVuZ3RoOysrbilmb3IodmFyIGY9dVtuXSxoPTA7aDxmLmxlbmd0aDsrK2gpZltoXT1sW2ZbaF1dO3JldHVybntwb3NpdGlvbnM6dCxjZWxsczp1LG1lc2hDb2xvcjplfX0ocC5wb3NpdGlvbixwLmRlbGF1bmF5Q29sb3IscC5kZWxhdW5heUF4aXMpO20ub3BhY2l0eT10Lm9wYWNpdHksdGhpcy5kZWxhdW5heU1lc2g/dGhpcy5kZWxhdW5heU1lc2gudXBkYXRlKG0pOihtLmdsPXUsdGhpcy5kZWxhdW5heU1lc2g9byhtKSx0aGlzLmRlbGF1bmF5TWVzaC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5kZWxhdW5heU1lc2gpKX1lbHNlIHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCksdGhpcy5kZWxhdW5heU1lc2g9bnVsbCl9LHkuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCkpLHRoaXMuc2NhdHRlclBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zY2F0dGVyUGxvdCksdGhpcy5zY2F0dGVyUGxvdC5kaXNwb3NlKCkpLHRoaXMuZXJyb3JCYXJzJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZXJyb3JCYXJzKSx0aGlzLmVycm9yQmFycy5kaXNwb3NlKCkpLHRoaXMudGV4dE1hcmtlcnMmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy50ZXh0TWFya2VycyksdGhpcy50ZXh0TWFya2Vycy5kaXNwb3NlKCkpLHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCkpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgdih0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn19LHsiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo2NzUsIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyI6NzQ5LCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIjo3NTAsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo3NzIsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjgwMSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiOjEyMDgsIi4vY2FsY19lcnJvcnMiOjEyMjEsImRlbGF1bmF5LXRyaWFuZ3VsYXRlIjoxNzIsImdsLWVycm9yM2QiOjI2MywiZ2wtbGluZTNkIjoyNzAsImdsLW1lc2gzZCI6MzAzLCJnbC1zY2F0dGVyM2QiOjMxOX1dLDEyMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLG89dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gZihyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsYyxyLG4pfWlmKGZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPTAsbz1yKCJ4Iikscz1yKCJ5IiksbD1yKCJ6Iik7bi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxpKSxvJiZzJiZsJiYoYT1NYXRoLm1pbihvLmxlbmd0aCxzLmxlbmd0aCxsLmxlbmd0aCksZS5fbGVuZ3RoPWUuX3hsZW5ndGg9ZS5feWxlbmd0aD1lLl96bGVuZ3RoPWEpO3JldHVybiBhfSh0LGUsZix1KSl7ZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoImhvdmVydGVtcGxhdGUiKSxmKCJ4aG92ZXJmb3JtYXQiKSxmKCJ5aG92ZXJmb3JtYXQiKSxmKCJ6aG92ZXJmb3JtYXQiKSxmKCJtb2RlIiksYS5oYXNMaW5lcyhlKSYmKGYoImNvbm5lY3RnYXBzIikscyh0LGUscix1LGYpKSxhLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsdSxmLHtub1NlbGVjdDohMH0pLGEuaGFzVGV4dChlKSYmKGYoInRleHR0ZW1wbGF0ZSIpLGwodCxlLHUsZix7bm9TZWxlY3Q6ITB9KSk7dmFyIGg9KGUubGluZXx8e30pLmNvbG9yLHA9KGUubWFya2VyfHx7fSkuY29sb3I7Zigic3VyZmFjZWF4aXMiKT49MCYmZigic3VyZmFjZWNvbG9yIixofHxwKTtmb3IodmFyIGQ9WyJ4IiwieSIsInoiXSxtPTA7bTwzOysrbSl7dmFyIGc9InByb2plY3Rpb24uIitkW21dO2YoZysiLnNob3ciKSYmKGYoZysiLm9wYWNpdHkiKSxmKGcrIi5zY2FsZSIpKX12YXIgdj1uLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTt2KHQsZSxofHxwfHxyLHtheGlzOiJ6In0pLHYodCxlLGh8fHB8fHIse2F4aXM6InkiLGluaGVyaXQ6InoifSksdih0LGUsaHx8cHx8cix7YXhpczoieCIsaW5oZXJpdDoieiJ9KX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTIwNCwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEyMTAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTYsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTIxNywiLi9hdHRyaWJ1dGVzIjoxMjE5fV0sMTIyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3Bsb3Q6dCgiLi9jb252ZXJ0IiksYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxtYXJrZXJTeW1ib2xzOnQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6W3tjb250YWluZXI6Im1hcmtlciIsbWluOiJjbWluIixtYXg6ImNtYXgifSx7Y29udGFpbmVyOiJsaW5lIixtaW46ImNtaW4iLG1heDoiY21heCJ9XSxjYWxjOnQoIi4vY2FsYyIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVyM2QiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxjYXRlZ29yaWVzOlsiZ2wzZCIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sbWV0YTp7fX19LHsiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyI6NzUwLCIuLi8uLi9wbG90cy9nbDNkIjo4NjksIi4vYXR0cmlidXRlcyI6MTIxOSwiLi9jYWxjIjoxMjIwLCIuL2NvbnZlcnQiOjEyMjIsIi4vZGVmYXVsdHMiOjEyMjN9XSwxMjI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPW4ubWFya2VyLHU9bi5saW5lLGY9Yy5saW5lO2UuZXhwb3J0cz17Y2FycGV0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sYTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1vZGU6bCh7fSxuLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpsKHt9LG4udGV4dCx7fSksdGV4dHRlbXBsYXRlOm8oe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJhIiwiYiIsInRleHQiXX0pLGhvdmVydGV4dDpsKHt9LG4uaG92ZXJ0ZXh0LHt9KSxsaW5lOntjb2xvcjp1LmNvbG9yLHdpZHRoOnUud2lkdGgsZGFzaDp1LmRhc2gsc2hhcGU6bCh7fSx1LnNoYXBlLHt2YWx1ZXM6WyJsaW5lYXIiLCJzcGxpbmUiXX0pLHNtb290aGluZzp1LnNtb290aGluZyxlZGl0VHlwZToiY2FsYyJ9LGNvbm5lY3RnYXBzOm4uY29ubmVjdGdhcHMsZmlsbDpsKHt9LG4uZmlsbCx7dmFsdWVzOlsibm9uZSIsInRvc2VsZiIsInRvbmV4dCJdLGRmbHQ6Im5vbmUifSksZmlsbGNvbG9yOm4uZmlsbGNvbG9yLG1hcmtlcjpsKHtzeW1ib2w6Yy5zeW1ib2wsb3BhY2l0eTpjLm9wYWNpdHksbWF4ZGlzcGxheWVkOmMubWF4ZGlzcGxheWVkLHNpemU6Yy5zaXplLHNpemVyZWY6Yy5zaXplcmVmLHNpemVtaW46Yy5zaXplbWluLHNpemVtb2RlOmMuc2l6ZW1vZGUsbGluZTpsKHt3aWR0aDpmLndpZHRoLGVkaXRUeXBlOiJjYWxjIn0scygibWFya2VyLmxpbmUiKSksZ3JhZGllbnQ6Yy5ncmFkaWVudCxlZGl0VHlwZToiY2FsYyJ9LHMoIm1hcmtlciIpKSx0ZXh0Zm9udDpuLnRleHRmb250LHRleHRwb3NpdGlvbjpuLnRleHRwb3NpdGlvbixzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLGhvdmVyaW5mbzpsKHt9LGkuaG92ZXJpbmZvLHtmbGFnczpbImEiLCJiIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVyb246bi5ob3Zlcm9uLGhvdmVydGVtcGxhdGU6YSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODk5LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExOTF9XSwxMjI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLGE9dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxvPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxzPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplLGw9dCgiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2NhcnBldFRyYWNlPWwodCxlKTtpZihyJiZyLnZpc2libGUmJiJsZWdlbmRvbmx5IiE9PXIudmlzaWJsZSl7dmFyIGM7ZS54YXhpcz1yLnhheGlzLGUueWF4aXM9ci55YXhpczt2YXIgdSxmLGg9ZS5fbGVuZ3RoLHA9bmV3IEFycmF5KGgpLGQ9ITE7Zm9yKGM9MDtjPGg7YysrKWlmKHU9ZS5hW2NdLGY9ZS5iW2NdLG4odSkmJm4oZikpe3ZhciBtPXIuYWIyeHkoK3UsK2YsITApLGc9ci5pc1Zpc2libGUoK3UsK2YpO2d8fChkPSEwKSxwW2NdPXt4Om1bMF0seTptWzFdLGE6dSxiOmYsdmlzOmd9fWVsc2UgcFtjXT17eDohMSx5OiExfTtyZXR1cm4gZS5fbmVlZHNDdWxsPWQscFswXS5jYXJwZXQ9cixwWzBdLnRyYWNlPWUscyhlLGgpLGkodCxlKSxhKHAsZSksbyhwLGUpLHB9fX0seyIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIjo5NzQsIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMTkwLCIuLi9zY2F0dGVyL2NhbGMiOjExOTIsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjExOTMsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjoxMTk0LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sMTIyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIiksYT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksbz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSxmPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBwKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxmLHIsaSl9cCgiY2FycGV0IiksZS54YXhpcz0ieCIsZS55YXhpcz0ieSI7dmFyIGQ9cCgiYSIpLG09cCgiYiIpLGc9TWF0aC5taW4oZC5sZW5ndGgsbS5sZW5ndGgpO2lmKGcpe2UuX2xlbmd0aD1nLHAoInRleHQiKSxwKCJ0ZXh0dGVtcGxhdGUiKSxwKCJob3ZlcnRleHQiKSxwKCJtb2RlIixnPGkuUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIiksYS5oYXNMaW5lcyhlKSYmKHModCxlLHIsaCxwKSxsKHQsZSxwKSxwKCJjb25uZWN0Z2FwcyIpKSxhLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsaCxwLHtncmFkaWVudDohMH0pLGEuaGFzVGV4dChlKSYmYyh0LGUsaCxwKTt2YXIgdj1bXTsoYS5oYXNNYXJrZXJzKGUpfHxhLmhhc1RleHQoZSkpJiYocCgibWFya2VyLm1heGRpc3BsYXllZCIpLHYucHVzaCgicG9pbnRzIikpLHAoImZpbGwiKSwibm9uZSIhPT1lLmZpbGwmJih1KHQsZSxyLHApLGEuaGFzTGluZXMoZSl8fGwodCxlLHApKSwidG9uZXh0IiE9PWUuZmlsbCYmInRvc2VsZiIhPT1lLmZpbGx8fHYucHVzaCgiZmlsbHMiKSwiZmlsbHMiIT09cCgiaG92ZXJvbiIsdi5qb2luKCIrIil8fCJwb2ludHMiKSYmcCgiaG92ZXJ0ZW1wbGF0ZSIpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHApfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vc2NhdHRlci9jb25zdGFudHMiOjExOTUsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMTk5LCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjEyMDQsIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyI6MTIwNiwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEyMTAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTYsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTIxNywiLi9hdHRyaWJ1dGVzIjoxMjI1fV0sMTIyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1uW2ldO3JldHVybiB0LmE9YS5hLHQuYj1hLmIsdC55PWEueSx0fX0se31dLDEyMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e30sbj1lLl9jYXJwZXQsaT1uLmFiMmlqKFt0LmEsdC5iXSksYT1NYXRoLmZsb29yKGlbMF0pLG89aVswXS1hLHM9TWF0aC5mbG9vcihpWzFdKSxsPWlbMV0tcyxjPW4uZXZhbHh5KFtdLGEscyxvLGwpO3JldHVybiByLnlMYWJlbD1jWzFdLnRvRml4ZWQoMykscn19LHt9XSwxMjMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvaG92ZXIiKSxpPXQoIi4uLy4uL2xpYiIpLmZpbGxUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKHQsZSxyLGEpO2lmKG8mJiExIT09b1swXS5pbmRleCl7dmFyIHM9b1swXTtpZih2b2lkIDA9PT1zLmluZGV4KXt2YXIgbD0xLXMueTAvdC55YS5fbGVuZ3RoLGM9dC54YS5fbGVuZ3RoLHU9YypsLzIsZj1jLXU7cmV0dXJuIHMueDA9TWF0aC5tYXgoTWF0aC5taW4ocy54MCxmKSx1KSxzLngxPU1hdGgubWF4KE1hdGgubWluKHMueDEsZiksdSksb312YXIgaD1zLmNkW3MuaW5kZXhdO3MuYT1oLmEscy5iPWguYixzLnhMYWJlbFZhbD12b2lkIDAscy55TGFiZWxWYWw9dm9pZCAwO3ZhciBwPXMudHJhY2UsZD1wLl9jYXJwZXQsbT1wLl9tb2R1bGUuZm9ybWF0TGFiZWxzKGgscCk7cy55TGFiZWw9bS55TGFiZWwsZGVsZXRlIHMudGV4dDt2YXIgZz1bXTtpZighcC5ob3ZlcnRlbXBsYXRlKXt2YXIgdj0oaC5oaXx8cC5ob3ZlcmluZm8pLnNwbGl0KCIrIik7LTEhPT12LmluZGV4T2YoImFsbCIpJiYodj1bImEiLCJiIiwidGV4dCJdKSwtMSE9PXYuaW5kZXhPZigiYSIpJiZ5KGQuYWF4aXMsaC5hKSwtMSE9PXYuaW5kZXhPZigiYiIpJiZ5KGQuYmF4aXMsaC5iKSxnLnB1c2goInk6ICIrcy55TGFiZWwpLC0xIT09di5pbmRleE9mKCJ0ZXh0IikmJmkoaCxwLGcpLHMuZXh0cmFUZXh0PWcuam9pbigiPGJyPiIpfXJldHVybiBvfWZ1bmN0aW9uIHkodCxlKXt2YXIgcjtyPXQubGFiZWxwcmVmaXgmJnQubGFiZWxwcmVmaXgubGVuZ3RoPjA/dC5sYWJlbHByZWZpeC5yZXBsYWNlKC8gPSAkLywiIik6dC5faG92ZXJ0aXRsZSxnLnB1c2gocisiOiAiK2UudG9GaXhlZCgzKSt0LmxhYmVsc3VmZml4KX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9zY2F0dGVyL2hvdmVyIjoxMjAyfV0sMTIzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL3NjYXR0ZXIvc2VsZWN0IiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVyY2FycGV0IixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsic3ZnIiwiY2FycGV0Iiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJjYXJwZXREZXBlbmRlbnQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEyMDksIi4uL3NjYXR0ZXIvc2VsZWN0IjoxMjEzLCIuLi9zY2F0dGVyL3N0eWxlIjoxMjE1LCIuL2F0dHJpYnV0ZXMiOjEyMjUsIi4vY2FsYyI6MTIyNiwiLi9kZWZhdWx0cyI6MTIyNywiLi9ldmVudF9kYXRhIjoxMjI4LCIuL2Zvcm1hdF9sYWJlbHMiOjEyMjksIi4vaG92ZXIiOjEyMzAsIi4vcGxvdCI6MTIzMn1dLDEyMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9wbG90IiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzLGwsYyx1PXJbMF1bMF0uY2FycGV0LGY9e3hheGlzOmkuZ2V0RnJvbUlkKHQsdS54YXhpc3x8IngiKSx5YXhpczppLmdldEZyb21JZCh0LHUueWF4aXN8fCJ5IikscGxvdDplLnBsb3R9O2ZvcihuKHQsZixyLG8pLHM9MDtzPHIubGVuZ3RoO3MrKylsPXJbc11bMF0udHJhY2UsYz1vLnNlbGVjdEFsbCgiZy50cmFjZSIrbC51aWQrIiAuanMtbGluZSIpLGEuc2V0Q2xpcFVybChjLHJbc11bMF0uY2FycGV0Ll9jbGlwUGF0aElkLHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vc2NhdHRlci9wbG90IjoxMjEyfV0sMTIzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGE9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLGM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsdT10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsZj1hLm1hcmtlcixoPWEubGluZSxwPWYubGluZTtlLmV4cG9ydHM9dSh7bG9uOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sbGF0Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sbG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sbG9jYXRpb25tb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJJU08tMyIsIlVTQS1zdGF0ZXMiLCJjb3VudHJ5IG5hbWVzIiwiZ2VvanNvbi1pZCJdLGRmbHQ6IklTTy0zIn0sZ2VvanNvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LGZlYXR1cmVpZGtleTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyIsZGZsdDoiaWQifSxtb2RlOmMoe30sYS5tb2RlLHtkZmx0OiJtYXJrZXJzIn0pLHRleHQ6Yyh7fSxhLnRleHQse30pLHRleHR0ZW1wbGF0ZTppKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOlsibGF0IiwibG9uIiwibG9jYXRpb24iLCJ0ZXh0Il19KSxob3ZlcnRleHQ6Yyh7fSxhLmhvdmVydGV4dCx7fSksdGV4dGZvbnQ6YS50ZXh0Zm9udCx0ZXh0cG9zaXRpb246YS50ZXh0cG9zaXRpb24sbGluZTp7Y29sb3I6aC5jb2xvcix3aWR0aDpoLndpZHRoLGRhc2g6bH0sY29ubmVjdGdhcHM6YS5jb25uZWN0Z2FwcyxtYXJrZXI6Yyh7c3ltYm9sOmYuc3ltYm9sLG9wYWNpdHk6Zi5vcGFjaXR5LHNpemU6Zi5zaXplLHNpemVyZWY6Zi5zaXplcmVmLHNpemVtaW46Zi5zaXplbWluLHNpemVtb2RlOmYuc2l6ZW1vZGUsY29sb3JiYXI6Zi5jb2xvcmJhcixsaW5lOmMoe3dpZHRoOnAud2lkdGh9LHMoIm1hcmtlci5saW5lIikpLGdyYWRpZW50OmYuZ3JhZGllbnR9LHMoIm1hcmtlciIpKSxmaWxsOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub25lIiwidG9zZWxmIl0sZGZsdDoibm9uZSJ9LGZpbGxjb2xvcjphLmZpbGxjb2xvcixzZWxlY3RlZDphLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6YS51bnNlbGVjdGVkLGhvdmVyaW5mbzpjKHt9LG8uaG92ZXJpbmZvLHtmbGFnczpbImxvbiIsImxhdCIsImxvY2F0aW9uIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVydGVtcGxhdGU6bigpfSwiY2FsYyIsIm5lc3RlZCIpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo2NjAsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODA5LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OSwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTkxfV0sMTIzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksbz10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLHM9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLGw9dCgiLi4vLi4vbGliIikuXztmdW5jdGlvbiBjKHQpe3JldHVybiB0JiYic3RyaW5nIj09dHlwZW9mIHR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdT1BcnJheS5pc0FycmF5KGUubG9jYXRpb25zKSxmPXU/ZS5sb2NhdGlvbnMubGVuZ3RoOmUuX2xlbmd0aCxoPW5ldyBBcnJheShmKTtyPWUuZ2VvanNvbj9mdW5jdGlvbih0KXtyZXR1cm4gYyh0KXx8bih0KX06Yztmb3IodmFyIHA9MDtwPGY7cCsrKXt2YXIgZD1oW3BdPXt9O2lmKHUpe3ZhciBtPWUubG9jYXRpb25zW3BdO2QubG9jPXIobSk/bTpudWxsfWVsc2V7dmFyIGc9ZS5sb25bcF0sdj1lLmxhdFtwXTtuKGcpJiZuKHYpP2QubG9ubGF0PVsrZywrdl06ZC5sb25sYXQ9W2ksaV19fXJldHVybiBvKGgsZSksYSh0LGUpLHMoaCxlKSxmJiYoaFswXS50PXtsYWJlbHM6e2xhdDpsKHQsImxhdDoiKSsiICIsbG9uOmwodCwibG9uOiIpKyIgIn19KSxofX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTE5MCwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTE5MywiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjExOTQsImZhc3QtaXNudW1lcmljIjoyNDJ9XSwxMjM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxvPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe2Z1bmN0aW9uIGYocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMscixpKX12YXIgaCxwPWYoImxvY2F0aW9ucyIpO2lmKHAmJnAubGVuZ3RoKXt2YXIgZCxtPWYoImdlb2pzb24iKTsoInN0cmluZyI9PXR5cGVvZiBtJiYiIiE9PW18fG4uaXNQbGFpbk9iamVjdChtKSkmJihkPSJnZW9qc29uLWlkIiksImdlb2pzb24taWQiPT09ZigibG9jYXRpb25tb2RlIixkKSYmZigiZmVhdHVyZWlka2V5IiksaD1wLmxlbmd0aH1lbHNle3ZhciBnPWYoImxvbiIpfHxbXSx2PWYoImxhdCIpfHxbXTtoPU1hdGgubWluKGcubGVuZ3RoLHYubGVuZ3RoKX1oPyhlLl9sZW5ndGg9aCxmKCJ0ZXh0IiksZigiaG92ZXJ0ZXh0IiksZigiaG92ZXJ0ZW1wbGF0ZSIpLGYoIm1vZGUiKSxpLmhhc0xpbmVzKGUpJiYobyh0LGUscix1LGYpLGYoImNvbm5lY3RnYXBzIikpLGkuaGFzTWFya2VycyhlKSYmYSh0LGUscix1LGYse2dyYWRpZW50OiEwfSksaS5oYXNUZXh0KGUpJiYoZigidGV4dHRlbXBsYXRlIikscyh0LGUsdSxmKSksZigiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmbCh0LGUscixmKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxmKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjExOTksIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTIwNCwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEyMTAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTYsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTIxNywiLi9hdHRyaWJ1dGVzIjoxMjMzfV0sMTIzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt0Lmxvbj1lLmxvbix0LmxhdD1lLmxhdCx0LmxvY2F0aW9uPWUubG9jP2UubG9jOm51bGw7dmFyIGE9bltpXTtyZXR1cm4gYS5mSW4mJmEuZkluLnByb3BlcnRpZXMmJih0LnByb3BlcnRpZXM9YS5mSW4ucHJvcGVydGllcyksdH19LHt9XSwxMjM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT17fSxhPXJbZS5nZW9dLl9zdWJwbG90Lm1vY2tBeGlzLG89dC5sb25sYXQ7cmV0dXJuIGkubG9uTGFiZWw9bi50aWNrVGV4dChhLGEuYzJsKG9bMF0pLCEwKS50ZXh0LGkubGF0TGFiZWw9bi50aWNrVGV4dChhLGEuYzJsKG9bMV0pLCEwKS50ZXh0LGl9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4Mjd9XSwxMjM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT10KCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciIpLG89dCgiLi4vLi4vbGliIikuZmlsbFRleHQscz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBsPXQuY2QsYz1sWzBdLnRyYWNlLHU9dC54YSxmPXQueWEsaD10LnN1YnBsb3QscD1oLnByb2plY3Rpb24uaXNMb25MYXRPdmVyRWRnZXMsZD1oLnByb2plY3Q7aWYobi5nZXRDbG9zZXN0KGwsKGZ1bmN0aW9uKHQpe3ZhciBuPXQubG9ubGF0O2lmKG5bMF09PT1pKXJldHVybiAxLzA7aWYocChuKSlyZXR1cm4gMS8wO3ZhciBhPWQobiksbz1kKFtlLHJdKSxzPU1hdGguYWJzKGFbMF0tb1swXSksbD1NYXRoLmFicyhhWzFdLW9bMV0pLGM9TWF0aC5tYXgoMyx0Lm1yY3x8MCk7cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydChzKnMrbCpsKS1jLDEtMy9jKX0pLHQpLCExIT09dC5pbmRleCl7dmFyIG09bFt0LmluZGV4XSxnPW0ubG9ubGF0LHY9W3UuYzJwKGcpLGYuYzJwKGcpXSx5PW0ubXJjfHwxO3QueDA9dlswXS15LHQueDE9dlswXSt5LHQueTA9dlsxXS15LHQueTE9dlsxXSt5LHQubG9jPW0ubG9jLHQubG9uPWdbMF0sdC5sYXQ9Z1sxXTt2YXIgeD17fTt4W2MuZ2VvXT17X3N1YnBsb3Q6aH07dmFyIGI9Yy5fbW9kdWxlLmZvcm1hdExhYmVscyhtLGMseCk7cmV0dXJuIHQubG9uTGFiZWw9Yi5sb25MYWJlbCx0LmxhdExhYmVsPWIubGF0TGFiZWwsdC5jb2xvcj1hKGMsbSksdC5leHRyYVRleHQ9ZnVuY3Rpb24odCxlLHIsbil7aWYodC5ob3ZlcnRlbXBsYXRlKXJldHVybjt2YXIgaT1lLmhpfHx0LmhvdmVyaW5mbyxhPSJhbGwiPT09aT9zLmhvdmVyaW5mby5mbGFnczppLnNwbGl0KCIrIiksbD0tMSE9PWEuaW5kZXhPZigibG9jYXRpb24iKSYmQXJyYXkuaXNBcnJheSh0LmxvY2F0aW9ucyksYz0tMSE9PWEuaW5kZXhPZigibG9uIiksdT0tMSE9PWEuaW5kZXhPZigibGF0IiksZj0tMSE9PWEuaW5kZXhPZigidGV4dCIpLGg9W107ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdCsiXHhiMCJ9bD9oLnB1c2goZS5sb2MpOmMmJnU/aC5wdXNoKCIoIitwKHIubGF0TGFiZWwpKyIsICIrcChyLmxvbkxhYmVsKSsiKSIpOmM/aC5wdXNoKG4ubG9uK3Aoci5sb25MYWJlbCkpOnUmJmgucHVzaChuLmxhdCtwKHIubGF0TGFiZWwpKTtmJiZvKGUsdCxoKTtyZXR1cm4gaC5qb2luKCI8YnI+Iil9KGMsbSx0LGxbMF0udC5sYWJlbHMpLHQuaG92ZXJ0ZW1wbGF0ZT1jLmhvdmVydGVtcGxhdGUsW3RdfX19LHsiLi4vLi4vY29tcG9uZW50cy9meCI6Njc5LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciI6MTIwMSwiLi9hdHRyaWJ1dGVzIjoxMjMzfV0sMTIzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi9jYWxjIiksY2FsY0dlb0pTT046dCgiLi9wbG90IikuY2FsY0dlb0pTT04scGxvdDp0KCIuL3Bsb3QiKS5wbG90LHN0eWxlOnQoIi4vc3R5bGUiKSxzdHlsZU9uU2VsZWN0OnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJnZW8iLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dlbyIpLGNhdGVnb3JpZXM6WyJnZW8iLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dlbyI6ODYwLCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTIwOSwiLi4vc2NhdHRlci9zdHlsZSI6MTIxNSwiLi9hdHRyaWJ1dGVzIjoxMjMzLCIuL2NhbGMiOjEyMzQsIi4vZGVmYXVsdHMiOjEyMzUsIi4vZXZlbnRfZGF0YSI6MTIzNiwiLi9mb3JtYXRfbGFiZWxzIjoxMjM3LCIuL2hvdmVyIjoxMjM4LCIuL3Bsb3QiOjEyNDAsIi4vc2VsZWN0IjoxMjQxLCIuL3N0eWxlIjoxMjQyfV0sMTI0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyIpLmdldFRvcG9qc29uRmVhdHVyZXMsbz10KCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyIpLHM9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSIpLmZpbmRFeHRyZW1lcyxjPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sdT10KCIuLi9zY2F0dGVyL2NhbGMiKS5jYWxjTWFya2VyU2l6ZSxmPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxoPXQoIi4vc3R5bGUiKTtlLmV4cG9ydHM9e2NhbGNHZW9KU09OOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXRbMF0udHJhY2Usbz1lW2kuZ2VvXSxmPW8uX3N1YnBsb3QsaD1pLl9sZW5ndGg7aWYoQXJyYXkuaXNBcnJheShpLmxvY2F0aW9ucykpe3ZhciBwPWkubG9jYXRpb25tb2RlLGQ9Imdlb2pzb24taWQiPT09cD9zLmV4dHJhY3RUcmFjZUZlYXR1cmUodCk6YShpLGYudG9wb2pzb24pO2ZvcihyPTA7cjxoO3IrKyl7bj10W3JdO3ZhciBtPSJnZW9qc29uLWlkIj09PXA/bi5mT3V0OnMubG9jYXRpb25Ub0ZlYXR1cmUocCxuLmxvYyxkKTtuLmxvbmxhdD1tP20ucHJvcGVydGllcy5jdDpbYyxjXX19dmFyIGcsdix5PXtwYWRkZWQ6ITB9O2lmKCJnZW9qc29uIj09PW8uZml0Ym91bmRzJiYiZ2VvanNvbi1pZCI9PT1pLmxvY2F0aW9ubW9kZSl7dmFyIHg9cy5jb21wdXRlQmJveChzLmdldFRyYWNlR2VvanNvbihpKSk7Zz1beFswXSx4WzJdXSx2PVt4WzFdLHhbM11dfWVsc2V7Zm9yKGc9bmV3IEFycmF5KGgpLHY9bmV3IEFycmF5KGgpLHI9MDtyPGg7cisrKW49dFtyXSxnW3JdPW4ubG9ubGF0WzBdLHZbcl09bi5sb25sYXRbMV07eS5wcGFkPXUoaSxoKX1pLl9leHRyZW1lcy5sb249bChvLmxvbmF4aXMuX2F4LGcseSksaS5fZXh0cmVtZXMubGF0PWwoby5sYXRheGlzLl9heCx2LHkpfSxwbG90OmZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1lLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCIuc2NhdHRlcmxheWVyIikscz1pLm1ha2VUcmFjZUdyb3VwcyhhLHIsInRyYWNlIHNjYXR0ZXJnZW8iKTtmdW5jdGlvbiBsKHQsZSl7dC5sb25sYXRbMF09PT1jJiZuLnNlbGVjdChlKS5yZW1vdmUoKX1zLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpLHMuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT1lWzBdLnRyYWNlO2lmKGYuaGFzTGluZXMoYSl8fCJub25lIiE9PWEuZmlsbCl7dmFyIHM9by5jYWxjVHJhY2VUb0xpbmVDb29yZHMoZSksYz0ibm9uZSIhPT1hLmZpbGw/by5tYWtlUG9seWdvbihzKTpvLm1ha2VMaW5lKHMpO3Iuc2VsZWN0QWxsKCJwYXRoLmpzLWxpbmUiKS5kYXRhKFt7Z2VvanNvbjpjLHRyYWNlOmF9XSkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1saW5lIiwhMCkuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwyKX1mLmhhc01hcmtlcnMoYSkmJnIuc2VsZWN0QWxsKCJwYXRoLnBvaW50IikuZGF0YShpLmlkZW50aXR5KS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInBvaW50IiwhMCkuZWFjaCgoZnVuY3Rpb24odCl7bCh0LHRoaXMpfSkpLGYuaGFzVGV4dChhKSYmci5zZWxlY3RBbGwoImciKS5kYXRhKGkuaWRlbnRpdHkpLmVudGVyKCkuYXBwZW5kKCJnIikuYXBwZW5kKCJ0ZXh0IikuZWFjaCgoZnVuY3Rpb24odCl7bCh0LHRoaXMpfSkpLGgodCxlKX0pKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiOjc2OSwiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiOjc3MCwiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIjo4MDUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjgyNiwiLi4vc2NhdHRlci9jYWxjIjoxMTkyLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMjE2LCIuL3N0eWxlIjoxMjQyLCJAcGxvdGx5L2QzIjo1OH1dLDEyNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhLG8scyxsLGM9dC5jZCx1PXQueGF4aXMsZj10LnlheGlzLGg9W10scD1jWzBdLnRyYWNlO2lmKCFuLmhhc01hcmtlcnMocCkmJiFuLmhhc1RleHQocCkpcmV0dXJuW107aWYoITE9PT1lKWZvcihsPTA7bDxjLmxlbmd0aDtsKyspY1tsXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKGw9MDtsPGMubGVuZ3RoO2wrKykoYT0ocj1jW2xdKS5sb25sYXQpWzBdIT09aSYmKG89dS5jMnAoYSkscz1mLmMycChhKSxlLmNvbnRhaW5zKFtvLHNdLG51bGwsbCx0KT8oaC5wdXNoKHtwb2ludE51bWJlcjpsLGxvbjphWzBdLGxhdDphWzFdfSksci5zZWxlY3RlZD0xKTpyLnNlbGVjdGVkPTApO3JldHVybiBofX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTZ9XSwxMjQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vc2NhdHRlci9zdHlsZSIpLHM9by5zdHlsZVBvaW50cyxsPW8uc3R5bGVUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2UmJmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxvPWVbMF0ubm9kZTM7by5zdHlsZSgib3BhY2l0eSIsZVswXS50cmFjZS5vcGFjaXR5KSxzKG8scix0KSxsKG8scix0KSxvLnNlbGVjdEFsbCgicGF0aC5qcy1saW5lIikuc3R5bGUoImZpbGwiLCJub25lIikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj10LnRyYWNlLG89ci5saW5lfHx7fTtlLmNhbGwoYS5zdHJva2Usby5jb2xvcikuY2FsbChpLmRhc2hMaW5lLG8uZGFzaHx8IiIsby53aWR0aHx8MCksIm5vbmUiIT09ci5maWxsJiZlLmNhbGwoYS5maWxsLHIuZmlsbGNvbG9yKX0pKX0odCxlKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vc2NhdHRlci9zdHlsZSI6MTIxNSwiQHBsb3RseS9kMyI6NTh9XSwxMjQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL3NvcnRfb2JqZWN0X2tleXMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHU9dCgiLi9jb25zdGFudHMiKS5EQVNIRVMsZj1pLmxpbmUsaD1pLm1hcmtlcixwPWgubGluZSxkPWUuZXhwb3J0cz1jKHt4OmkueCx4MDppLngwLGR4OmkuZHgseTppLnkseTA6aS55MCxkeTppLmR5LHhwZXJpb2Q6aS54cGVyaW9kLHlwZXJpb2Q6aS55cGVyaW9kLHhwZXJpb2QwOmkueHBlcmlvZDAseXBlcmlvZDA6aS55cGVyaW9kMCx4cGVyaW9kYWxpZ25tZW50OmkueHBlcmlvZGFsaWdubWVudCx5cGVyaW9kYWxpZ25tZW50OmkueXBlcmlvZGFsaWdubWVudCx4aG92ZXJmb3JtYXQ6YSgieCIpLHlob3ZlcmZvcm1hdDphKCJ5IiksdGV4dDppLnRleHQsaG92ZXJ0ZXh0OmkuaG92ZXJ0ZXh0LHRleHRwb3NpdGlvbjppLnRleHRwb3NpdGlvbix0ZXh0Zm9udDppLnRleHRmb250LG1vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxpbmVzIiwibWFya2VycyIsInRleHQiXSxleHRyYXM6WyJub25lIl19LGxpbmU6e2NvbG9yOmYuY29sb3Isd2lkdGg6Zi53aWR0aCxzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGluZWFyIiwiaHYiLCJ2aCIsImh2aCIsInZodiJdLGRmbHQ6ImxpbmVhciIsZWRpdFR5cGU6InBsb3QifSxkYXNoOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6cyh1KSxkZmx0OiJzb2xpZCJ9fSxtYXJrZXI6bCh7fSxvKCJtYXJrZXIiKSx7c3ltYm9sOmguc3ltYm9sLHNpemU6aC5zaXplLHNpemVyZWY6aC5zaXplcmVmLHNpemVtaW46aC5zaXplbWluLHNpemVtb2RlOmguc2l6ZW1vZGUsb3BhY2l0eTpoLm9wYWNpdHksY29sb3JiYXI6aC5jb2xvcmJhcixsaW5lOmwoe30sbygibWFya2VyLmxpbmUiKSx7d2lkdGg6cC53aWR0aH0pfSksY29ubmVjdGdhcHM6aS5jb25uZWN0Z2FwcyxmaWxsOmwoe30saS5maWxsLHtkZmx0OiJub25lIn0pLGZpbGxjb2xvcjppLmZpbGxjb2xvcixzZWxlY3RlZDp7bWFya2VyOmkuc2VsZWN0ZWQubWFya2VyLHRleHRmb250Omkuc2VsZWN0ZWQudGV4dGZvbnR9LHVuc2VsZWN0ZWQ6e21hcmtlcjppLnVuc2VsZWN0ZWQubWFya2VyLHRleHRmb250OmkudW5zZWxlY3RlZC50ZXh0Zm9udH0sb3BhY2l0eTpuLm9wYWNpdHl9LCJjYWxjIiwibmVzdGVkIik7ZC54LmVkaXRUeXBlPWQueS5lZGl0VHlwZT1kLngwLmVkaXRUeXBlPWQueTAuZWRpdFR5cGU9ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGQuaG92ZXJ0ZW1wbGF0ZT1pLmhvdmVydGVtcGxhdGUsZC50ZXh0dGVtcGxhdGU9aS50ZXh0dGVtcGxhdGV9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY0NiwiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9saWIvc29ydF9vYmplY3Rfa2V5cyI6Nzk5LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MDksIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTkxLCIuL2NvbnN0YW50cyI6MTI0NX1dLDEyNDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9wb2ludC1jbHVzdGVyIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSIpLmZpbmRFeHRyZW1lcyxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxsPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLGM9bC5jYWxjTWFya2VyU2l6ZSx1PWwuY2FsY0F4aXNFeHBhbnNpb24sZj1sLnNldEZpcnN0U2NhdHRlcixoPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIikscD10KCIuL2NvbnZlcnQiKSxkPXQoIi4vc2NlbmVfdXBkYXRlIiksbT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGc9dCgiLi9jb25zdGFudHMiKS5UT09fTUFOWV9QT0lOVFM7ZnVuY3Rpb24gdih0LGUscil7dmFyIG49dC5fZXh0cmVtZXNbZS5faWRdLGk9byhlLHIuX2JuZHMse3BhZGRlZDohMH0pO24ubWluPW4ubWluLmNvbmNhdChpLm1pbiksbi5tYXg9bi5tYXguY29uY2F0KGkubWF4KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixvPXQuX2Z1bGxMYXlvdXQsbD1hLmdldEZyb21JZCh0LGUueGF4aXMpLHk9YS5nZXRGcm9tSWQodCxlLnlheGlzKSx4PW8uX3Bsb3RzW2UueGF4aXMrZS55YXhpc10sYj1lLl9sZW5ndGgsXz1iPj1nLHc9MipiLFQ9e30saz1sLm1ha2VDYWxjZGF0YShlLCJ4IiksQT15Lm1ha2VDYWxjZGF0YShlLCJ5IiksTT1zKGUsbCwieCIsayksUz1zKGUseSwieSIsQSksRT1NLnZhbHMsTD1TLnZhbHM7ZS5feD1FLGUuX3k9TCxlLnhwZXJpb2RhbGlnbm1lbnQmJihlLl9vcmlnWD1rLGUuX3hTdGFydHM9TS5zdGFydHMsZS5feEVuZHM9TS5lbmRzKSxlLnlwZXJpb2RhbGlnbm1lbnQmJihlLl9vcmlnWT1BLGUuX3lTdGFydHM9Uy5zdGFydHMsZS5feUVuZHM9Uy5lbmRzKTt2YXIgQz1uZXcgQXJyYXkodyksUD1uZXcgQXJyYXkoYik7Zm9yKHI9MDtyPGI7cisrKUNbMipyXT1FW3JdPT09bT9OYU46RVtyXSxDWzIqcisxXT1MW3JdPT09bT9OYU46TFtyXSxQW3JdPXI7aWYoImxvZyI9PT1sLnR5cGUpZm9yKHI9MDtyPHc7cis9MilDW3JdPWwuYzJsKENbcl0pO2lmKCJsb2ciPT09eS50eXBlKWZvcihyPTE7cjx3O3IrPTIpQ1tyXT15LmMybChDW3JdKTtfJiYibG9nIiE9PWwudHlwZSYmImxvZyIhPT15LnR5cGU/VC50cmVlPW4oQyk6VC5pZHM9UCxoKHQsZSk7dmFyIEksTz1mdW5jdGlvbih0LGUscixuLGEsbyl7dmFyIHM9cC5zdHlsZSh0LHIpO3MubWFya2VyJiYocy5tYXJrZXIucG9zaXRpb25zPW4pO3MubGluZSYmbi5sZW5ndGg+MSYmaS5leHRlbmRGbGF0KHMubGluZSxwLmxpbmVQb3NpdGlvbnModCxyLG4pKTtpZihzLmVycm9yWHx8cy5lcnJvclkpe3ZhciBsPXAuZXJyb3JCYXJQb3NpdGlvbnModCxyLG4sYSxvKTtzLmVycm9yWCYmaS5leHRlbmRGbGF0KHMuZXJyb3JYLGwueCkscy5lcnJvclkmJmkuZXh0ZW5kRmxhdChzLmVycm9yWSxsLnkpfXMudGV4dCYmKGkuZXh0ZW5kRmxhdChzLnRleHQse3Bvc2l0aW9uczpufSxwLnRleHRQb3NpdGlvbih0LHIscy50ZXh0LHMubWFya2VyKSksaS5leHRlbmRGbGF0KHMudGV4dFNlbCx7cG9zaXRpb25zOm59LHAudGV4dFBvc2l0aW9uKHQscixzLnRleHQscy5tYXJrZXJTZWwpKSxpLmV4dGVuZEZsYXQocy50ZXh0VW5zZWwse3Bvc2l0aW9uczpufSxwLnRleHRQb3NpdGlvbih0LHIscy50ZXh0LHMubWFya2VyVW5zZWwpKSk7cmV0dXJuIHN9KHQsMCxlLEMsRSxMKSx6PWQodCx4KTtyZXR1cm4gZihvLGUpLF8/Ty5tYXJrZXImJihJPU8ubWFya2VyLnNpemVBdmd8fE1hdGgubWF4KE8ubWFya2VyLnNpemUsMykpOkk9YyhlLGIpLHUodCxlLGwseSxFLEwsSSksTy5lcnJvclgmJnYoZSxsLE8uZXJyb3JYKSxPLmVycm9yWSYmdihlLHksTy5lcnJvclkpLE8uZmlsbCYmIXouZmlsbDJkJiYoei5maWxsMmQ9ITApLE8ubWFya2VyJiYhei5zY2F0dGVyMmQmJih6LnNjYXR0ZXIyZD0hMCksTy5saW5lJiYhei5saW5lMmQmJih6LmxpbmUyZD0hMCksIU8uZXJyb3JYJiYhTy5lcnJvcll8fHouZXJyb3IyZHx8KHouZXJyb3IyZD0hMCksTy50ZXh0JiYhei5nbFRleHQmJih6LmdsVGV4dD0hMCksTy5tYXJrZXImJihPLm1hcmtlci5zbmFwPWIpLHoubGluZU9wdGlvbnMucHVzaChPLmxpbmUpLHouZXJyb3JYT3B0aW9ucy5wdXNoKE8uZXJyb3JYKSx6LmVycm9yWU9wdGlvbnMucHVzaChPLmVycm9yWSksei5maWxsT3B0aW9ucy5wdXNoKE8uZmlsbCksei5tYXJrZXJPcHRpb25zLnB1c2goTy5tYXJrZXIpLHoubWFya2VyU2VsZWN0ZWRPcHRpb25zLnB1c2goTy5tYXJrZXJTZWwpLHoubWFya2VyVW5zZWxlY3RlZE9wdGlvbnMucHVzaChPLm1hcmtlclVuc2VsKSx6LnRleHRPcHRpb25zLnB1c2goTy50ZXh0KSx6LnRleHRTZWxlY3RlZE9wdGlvbnMucHVzaChPLnRleHRTZWwpLHoudGV4dFVuc2VsZWN0ZWRPcHRpb25zLnB1c2goTy50ZXh0VW5zZWwpLHouc2VsZWN0QmF0Y2gucHVzaChbXSksei51bnNlbGVjdEJhdGNoLnB1c2goW10pLFQuX3NjZW5lPXosVC5pbmRleD16LmNvdW50LFQueD1FLFQueT1MLFQucG9zaXRpb25zPUMsei5jb3VudCsrLFt7eDohMSx5OiExLHQ6VCx0cmFjZTplfV19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjgyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6ODI2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwiLi4vc2NhdHRlci9jYWxjIjoxMTkyLCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTE5NCwiLi9jb25zdGFudHMiOjEyNDUsIi4vY29udmVydCI6MTI0NiwiLi9zY2VuZV91cGRhdGUiOjEyNTQsIkBwbG90bHkvcG9pbnQtY2x1c3RlciI6NTl9XSwxMjQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17VE9PX01BTllfUE9JTlRTOjFlNSxTWU1CT0xfU0RGX1NJWkU6MjAwLFNZTUJPTF9TSVpFOjIwLFNZTUJPTF9TVFJPS0U6MSxET1RfUkU6Ly1kb3QvLE9QRU5fUkU6Ly1vcGVuLyxEQVNIRVM6e3NvbGlkOlsxXSxkb3Q6WzEsMV0sZGFzaDpbNCwxXSxsb25nZGFzaDpbOCwxXSxkYXNoZG90Ols0LDEsMSwxXSxsb25nZGFzaGRvdDpbOCwxLDEsMV19fX0se31dLDEyNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoInN2Zy1wYXRoLXNkZiIpLGE9dCgiY29sb3Itbm9ybWFsaXplIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLHU9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLmZvcm1hdENvbG9yLGY9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGg9dCgiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiKSxwPXQoIi4vaGVscGVycyIpLGQ9dCgiLi9jb25zdGFudHMiKSxtPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTSxnPXtzdGFydDoxLGxlZnQ6MSxlbmQ6LTEscmlnaHQ6LTEsbWlkZGxlOjAsY2VudGVyOjAsYm90dG9tOjEsdG9wOi0xfSx2PXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZTtmdW5jdGlvbiB5KHQsZSl7dmFyIHIsaT10Ll9mdWxsTGF5b3V0LGE9ZS5fbGVuZ3RoLG89ZS50ZXh0Zm9udCxsPWUudGV4dHBvc2l0aW9uLGM9QXJyYXkuaXNBcnJheShsKT9sOltsXSx1PW8uY29sb3IsZj1vLnNpemUsaD1vLmZhbWlseSxwPXt9LGQ9dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvLG09ZS50ZXh0dGVtcGxhdGU7aWYobSl7cC50ZXh0PVtdO3ZhciBnPWkuX2QzbG9jYWxlLHk9QXJyYXkuaXNBcnJheShtKSx4PXk/TWF0aC5taW4obS5sZW5ndGgsYSk6YSxiPXk/ZnVuY3Rpb24odCl7cmV0dXJuIG1bdF19OmZ1bmN0aW9uKCl7cmV0dXJuIG19O2ZvcihyPTA7cjx4O3IrKyl7dmFyIF89e2k6cn0sdz1lLl9tb2R1bGUuZm9ybWF0TGFiZWxzKF8sZSxpKSxUPXt9O3YoVCxlLHIpO3ZhciBrPWUuX21ldGF8fHt9O3AudGV4dC5wdXNoKHMudGV4dHRlbXBsYXRlU3RyaW5nKGIociksdyxnLFQsXyxrKSl9fWVsc2UgQXJyYXkuaXNBcnJheShlLnRleHQpJiZlLnRleHQubGVuZ3RoPGE/cC50ZXh0PWUudGV4dC5zbGljZSgpOnAudGV4dD1lLnRleHQ7aWYoQXJyYXkuaXNBcnJheShwLnRleHQpKWZvcihyPXAudGV4dC5sZW5ndGg7cjxhO3IrKylwLnRleHRbcl09IiI7Zm9yKHAub3BhY2l0eT1lLm9wYWNpdHkscC5mb250PXt9LHAuYWxpZ249W10scC5iYXNlbGluZT1bXSxyPTA7cjxjLmxlbmd0aDtyKyspe3ZhciBBPWNbcl0uc3BsaXQoL1xzKy8pO3N3aXRjaChBWzFdKXtjYXNlImxlZnQiOnAuYWxpZ24ucHVzaCgicmlnaHQiKTticmVhaztjYXNlInJpZ2h0IjpwLmFsaWduLnB1c2goImxlZnQiKTticmVhaztkZWZhdWx0OnAuYWxpZ24ucHVzaChBWzFdKX1zd2l0Y2goQVswXSl7Y2FzZSJ0b3AiOnAuYmFzZWxpbmUucHVzaCgiYm90dG9tIik7YnJlYWs7Y2FzZSJib3R0b20iOnAuYmFzZWxpbmUucHVzaCgidG9wIik7YnJlYWs7ZGVmYXVsdDpwLmJhc2VsaW5lLnB1c2goQVswXSl9fWlmKEFycmF5LmlzQXJyYXkodSkpZm9yKHAuY29sb3I9bmV3IEFycmF5KGEpLHI9MDtyPGE7cisrKXAuY29sb3Jbcl09dVtyXTtlbHNlIHAuY29sb3I9dTtpZihzLmlzQXJyYXlPclR5cGVkQXJyYXkoZil8fEFycmF5LmlzQXJyYXkoaCkpZm9yKHAuZm9udD1uZXcgQXJyYXkoYSkscj0wO3I8YTtyKyspe3ZhciBNPXAuZm9udFtyXT17fTtNLnNpemU9KHMuaXNUeXBlZEFycmF5KGYpP2Zbcl06QXJyYXkuaXNBcnJheShmKT9uKGZbcl0pP2Zbcl06MDpmKSpkLE0uZmFtaWx5PUFycmF5LmlzQXJyYXkoaCk/aFtyXTpofWVsc2UgcC5mb250PXtzaXplOmYqZCxmYW1pbHk6aH07cmV0dXJuIHB9ZnVuY3Rpb24geCh0KXt2YXIgZSxyLG49dC5fbGVuZ3RoLGk9dC5tYXJrZXIsbz17fSxsPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLnN5bWJvbCksYz1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5jb2xvciksZj1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5saW5lLmNvbG9yKSxkPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLm9wYWNpdHkpLG09cy5pc0FycmF5T3JUeXBlZEFycmF5KGkuc2l6ZSksZz1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5saW5lLndpZHRoKTtpZihsfHwocj1wLmlzT3BlblN5bWJvbChpLnN5bWJvbCkpLGx8fGN8fGZ8fGQpe28uY29sb3JzPW5ldyBBcnJheShuKSxvLmJvcmRlckNvbG9ycz1uZXcgQXJyYXkobik7dmFyIHY9dShpLGkub3BhY2l0eSxuKSx5PXUoaS5saW5lLGkub3BhY2l0eSxuKTtpZighQXJyYXkuaXNBcnJheSh5WzBdKSl7dmFyIHg9eTtmb3IoeT1BcnJheShuKSxlPTA7ZTxuO2UrKyl5W2VdPXh9aWYoIUFycmF5LmlzQXJyYXkodlswXSkpe3ZhciBiPXY7Zm9yKHY9QXJyYXkobiksZT0wO2U8bjtlKyspdltlXT1ifWZvcihvLmNvbG9ycz12LG8uYm9yZGVyQ29sb3JzPXksZT0wO2U8bjtlKyspe2lmKGwpe3ZhciBfPWkuc3ltYm9sW2VdO3I9cC5pc09wZW5TeW1ib2woXyl9ciYmKHlbZV09dltlXS5zbGljZSgpLHZbZV09dltlXS5zbGljZSgpLHZbZV1bM109MCl9by5vcGFjaXR5PXQub3BhY2l0eX1lbHNlIHI/KG8uY29sb3I9YShpLmNvbG9yLCJ1aW50OCIpLG8uY29sb3JbM109MCxvLmJvcmRlckNvbG9yPWEoaS5jb2xvciwidWludDgiKSk6KG8uY29sb3I9YShpLmNvbG9yLCJ1aW50OCIpLG8uYm9yZGVyQ29sb3I9YShpLmxpbmUuY29sb3IsInVpbnQ4IikpLG8ub3BhY2l0eT10Lm9wYWNpdHkqaS5vcGFjaXR5O2lmKGwpZm9yKG8ubWFya2Vycz1uZXcgQXJyYXkobiksZT0wO2U8bjtlKyspby5tYXJrZXJzW2VdPUUoaS5zeW1ib2xbZV0pO2Vsc2Ugby5tYXJrZXI9RShpLnN5bWJvbCk7dmFyIHcsVD1oKHQsMSk7aWYobXx8Zyl7dmFyIGssQT1vLnNpemVzPW5ldyBBcnJheShuKSxNPW8uYm9yZGVyU2l6ZXM9bmV3IEFycmF5KG4pLFM9MDtpZihtKXtmb3IoZT0wO2U8bjtlKyspQVtlXT1UKGkuc2l6ZVtlXSksUys9QVtlXTtrPVMvbn1lbHNlIGZvcih3PVQoaS5zaXplKSxlPTA7ZTxuO2UrKylBW2VdPXc7aWYoZylmb3IoZT0wO2U8bjtlKyspTVtlXT1pLmxpbmUud2lkdGhbZV07ZWxzZSBmb3Iodz1pLmxpbmUud2lkdGgsZT0wO2U8bjtlKyspTVtlXT13O28uc2l6ZUF2Zz1rfWVsc2Ugby5zaXplPVQoaSYmaS5zaXplfHwxMCksby5ib3JkZXJTaXplcz1UKGkubGluZS53aWR0aCk7cmV0dXJuIG99ZnVuY3Rpb24gYih0LGUpe3ZhciByPXQubWFya2VyLG49e307cmV0dXJuIGU/KGUubWFya2VyJiZlLm1hcmtlci5zeW1ib2w/bj14KHMuZXh0ZW5kRmxhdCh7fSxyLGUubWFya2VyKSk6ZS5tYXJrZXImJihlLm1hcmtlci5zaXplJiYobi5zaXplPWUubWFya2VyLnNpemUpLGUubWFya2VyLmNvbG9yJiYobi5jb2xvcnM9ZS5tYXJrZXIuY29sb3IpLHZvaWQgMCE9PWUubWFya2VyLm9wYWNpdHkmJihuLm9wYWNpdHk9ZS5tYXJrZXIub3BhY2l0eSkpLG4pOm59ZnVuY3Rpb24gXyh0LGUscil7dmFyIG49e307aWYoIXIpcmV0dXJuIG47aWYoci50ZXh0Zm9udCl7dmFyIGk9e29wYWNpdHk6MSx0ZXh0OmUudGV4dCx0ZXh0dGVtcGxhdGU6ZS50ZXh0dGVtcGxhdGUsdGV4dHBvc2l0aW9uOmUudGV4dHBvc2l0aW9uLHRleHRmb250OnMuZXh0ZW5kRmxhdCh7fSxlLnRleHRmb250KX07ci50ZXh0Zm9udCYmcy5leHRlbmRGbGF0KGkudGV4dGZvbnQsci50ZXh0Zm9udCksbj15KHQsaSl9cmV0dXJuIG59ZnVuY3Rpb24gdyh0LGUscil7dmFyIG49e2NhcFNpemU6MiplLndpZHRoKnIsbGluZVdpZHRoOmUudGhpY2tuZXNzKnIsY29sb3I6ZS5jb2xvcn07cmV0dXJuIGUuY29weV95c3R5bGUmJihuPXQuZXJyb3JfeSksbn12YXIgVD1kLlNZTUJPTF9TREZfU0laRSxrPWQuU1lNQk9MX1NJWkUsQT1kLlNZTUJPTF9TVFJPS0UsTT17fSxTPWwuc3ltYm9sRnVuY3NbMF0oLjA1KmspO2Z1bmN0aW9uIEUodCl7aWYoImNpcmNsZSI9PT10KXJldHVybiBudWxsO3ZhciBlLHIsbj1sLnN5bWJvbE51bWJlcih0KSxhPWwuc3ltYm9sRnVuY3NbbiUxMDBdLG89ISFsLnN5bWJvbE5vRG90W24lMTAwXSxzPSEhbC5zeW1ib2xOb0ZpbGxbbiUxMDBdLGM9cC5pc0RvdFN5bWJvbCh0KTtyZXR1cm4gTVt0XT9NW3RdOihlPWMmJiFvP2EoMS4xKmspK1M6YShrKSxyPWkoZSx7dzpULGg6VCx2aWV3Qm94OlstaywtayxrLGtdLHN0cm9rZTpzP0E6LUF9KSxNW3RdPXIscnx8bnVsbCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByLG49e21hcmtlcjp2b2lkIDAsbWFya2VyU2VsOnZvaWQgMCxtYXJrZXJVbnNlbDp2b2lkIDAsbGluZTp2b2lkIDAsZmlsbDp2b2lkIDAsZXJyb3JYOnZvaWQgMCxlcnJvclk6dm9pZCAwLHRleHQ6dm9pZCAwLHRleHRTZWw6dm9pZCAwLHRleHRVbnNlbDp2b2lkIDB9LGk9dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvO2lmKCEwIT09ZS52aXNpYmxlKXJldHVybiBuO2lmKGYuaGFzVGV4dChlKSYmKG4udGV4dD15KHQsZSksbi50ZXh0U2VsPV8odCxlLGUuc2VsZWN0ZWQpLG4udGV4dFVuc2VsPV8odCxlLGUudW5zZWxlY3RlZCkpLGYuaGFzTWFya2VycyhlKSYmKG4ubWFya2VyPXgoZSksbi5tYXJrZXJTZWw9YihlLGUuc2VsZWN0ZWQpLG4ubWFya2VyVW5zZWw9YihlLGUudW5zZWxlY3RlZCksIWUudW5zZWxlY3RlZCYmcy5pc0FycmF5T3JUeXBlZEFycmF5KGUubWFya2VyLm9wYWNpdHkpKSl7dmFyIGE9ZS5tYXJrZXIub3BhY2l0eTtmb3Iobi5tYXJrZXJVbnNlbC5vcGFjaXR5PW5ldyBBcnJheShhLmxlbmd0aCkscj0wO3I8YS5sZW5ndGg7cisrKW4ubWFya2VyVW5zZWwub3BhY2l0eVtyXT1tKmFbcl19aWYoZi5oYXNMaW5lcyhlKSl7bi5saW5lPXtvdmVybGF5OiEwLHRoaWNrbmVzczplLmxpbmUud2lkdGgqaSxjb2xvcjplLmxpbmUuY29sb3Isb3BhY2l0eTplLm9wYWNpdHl9O3ZhciBvPShkLkRBU0hFU1tlLmxpbmUuZGFzaF18fFsxXSkuc2xpY2UoKTtmb3Iocj0wO3I8by5sZW5ndGg7KytyKW9bcl0qPWUubGluZS53aWR0aCppO24ubGluZS5kYXNoZXM9b31yZXR1cm4gZS5lcnJvcl94JiZlLmVycm9yX3gudmlzaWJsZSYmKG4uZXJyb3JYPXcoZSxlLmVycm9yX3gsaSkpLGUuZXJyb3JfeSYmZS5lcnJvcl95LnZpc2libGUmJihuLmVycm9yWT13KGUsZS5lcnJvcl95LGkpKSxlLmZpbGwmJiJub25lIiE9PWUuZmlsbCYmKG4uZmlsbD17Y2xvc2VkOiEwLGZpbGw6ZS5maWxsY29sb3IsdGhpY2tuZXNzOjB9KSxufSxtYXJrZXJTdHlsZTp4LG1hcmtlclNlbGVjdGlvbjpiLGxpbmVQb3NpdGlvbnM6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1yLmxlbmd0aCxvPWEvMjtpZihmLmhhc0xpbmVzKGUpJiZvKWlmKCJodiI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPG8tMTtpKyspaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pP24ucHVzaChOYU4sTmFOLE5hTixOYU4pOihuLnB1c2goclsyKmldLHJbMippKzFdKSxpc05hTihyWzIqaSsyXSl8fGlzTmFOKHJbMippKzNdKT9uLnB1c2goTmFOLE5hTik6bi5wdXNoKHJbMippKzJdLHJbMippKzFdKSk7bi5wdXNoKHJbYS0yXSxyW2EtMV0pfWVsc2UgaWYoImh2aCI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPG8tMTtpKyspaWYoaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pfHxpc05hTihyWzIqaSsyXSl8fGlzTmFOKHJbMippKzNdKSlpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaV0sclsyKmkrMV0pLG4ucHVzaChOYU4sTmFOKTtlbHNle3ZhciBzPShyWzIqaV0rclsyKmkrMl0pLzI7bi5wdXNoKHJbMippXSxyWzIqaSsxXSxzLHJbMippKzFdLHMsclsyKmkrM10pfW4ucHVzaChyW2EtMl0sclthLTFdKX1lbHNlIGlmKCJ2aHYiPT09ZS5saW5lLnNoYXBlKXtmb3Iobj1bXSxpPTA7aTxvLTE7aSsrKWlmKGlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKXx8aXNOYU4oclsyKmkrMl0pfHxpc05hTihyWzIqaSszXSkpaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pP24ucHVzaChOYU4sTmFOKTpuLnB1c2goclsyKmldLHJbMippKzFdKSxuLnB1c2goTmFOLE5hTik7ZWxzZXt2YXIgbD0oclsyKmkrMV0rclsyKmkrM10pLzI7bi5wdXNoKHJbMippXSxyWzIqaSsxXSxyWzIqaV0sbCxyWzIqaSsyXSxsKX1uLnB1c2goclthLTJdLHJbYS0xXSl9ZWxzZSBpZigidmgiPT09ZS5saW5lLnNoYXBlKXtmb3Iobj1bXSxpPTA7aTxvLTE7aSsrKWlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKT9uLnB1c2goTmFOLE5hTixOYU4sTmFOKToobi5wdXNoKHJbMippXSxyWzIqaSsxXSksaXNOYU4oclsyKmkrMl0pfHxpc05hTihyWzIqaSszXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaV0sclsyKmkrM10pKTtuLnB1c2goclthLTJdLHJbYS0xXSl9ZWxzZSBuPXI7dmFyIGM9ITE7Zm9yKGk9MDtpPG4ubGVuZ3RoO2krKylpZihpc05hTihuW2ldKSl7Yz0hMDticmVha312YXIgdT1jfHxuLmxlbmd0aD5kLlRPT19NQU5ZX1BPSU5UU3x8Zi5oYXNNYXJrZXJzKGUpPyJyZWN0Ijoicm91bmQiO2lmKGMmJmUuY29ubmVjdGdhcHMpe3ZhciBoPW5bMF0scD1uWzFdO2ZvcihpPTA7aTxuLmxlbmd0aDtpKz0yKWlzTmFOKG5baV0pfHxpc05hTihuW2krMV0pPyhuW2ldPWgsbltpKzFdPXApOihoPW5baV0scD1uW2krMV0pfXJldHVybntqb2luOnUscG9zaXRpb25zOm59fSxlcnJvckJhclBvc2l0aW9uczpmdW5jdGlvbih0LGUscixpLGEpe3ZhciBzPW8uZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJtYWtlQ29tcHV0ZUVycm9yIiksbD1jLmdldEZyb21JZCh0LGUueGF4aXMpLHU9Yy5nZXRGcm9tSWQodCxlLnlheGlzKSxmPXIubGVuZ3RoLzIsaD17fTtmdW5jdGlvbiBwKHQsaSl7dmFyIGE9aS5faWQuY2hhckF0KDApLG89ZVsiZXJyb3JfIithXTtpZihvJiZvLnZpc2libGUmJigibGluZWFyIj09PWkudHlwZXx8ImxvZyI9PT1pLnR5cGUpKXtmb3IodmFyIGw9cyhvKSxjPXt4OjAseToxfVthXSx1PXt4OlswLDEsMiwzXSx5OlsyLDMsMCwxXX1bYV0scD1uZXcgRmxvYXQ2NEFycmF5KDQqZiksZD0xLzAsbT0tMS8wLGc9MCx2PTA7ZzxmO2crKyx2Kz00KXt2YXIgeT10W2ddO2lmKG4oeSkpe3ZhciB4PXJbMipnK2NdLGI9bCh5LGcpLF89YlswXSx3PWJbMV07aWYobihfKSYmbih3KSl7dmFyIFQ9eS1fLGs9eSt3O3Bbdit1WzBdXT14LWkuYzJsKFQpLHBbdit1WzFdXT1pLmMybChrKS14LHBbdit1WzJdXT0wLHBbdit1WzNdXT0wLGQ9TWF0aC5taW4oZCx5LV8pLG09TWF0aC5tYXgobSx5K3cpfX19aFthXT17cG9zaXRpb25zOnIsZXJyb3JzOnAsX2JuZHM6W2QsbV19fX1yZXR1cm4gcChpLGwpLHAoYSx1KSxofSx0ZXh0UG9zaXRpb246ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT1lLl9sZW5ndGgsbz17fTtpZihmLmhhc01hcmtlcnMoZSkpe3ZhciBzPXIuZm9udCxsPXIuYWxpZ24sYz1yLmJhc2VsaW5lO2ZvcihvLm9mZnNldD1uZXcgQXJyYXkoYSksaT0wO2k8YTtpKyspe3ZhciB1PW4uc2l6ZXM/bi5zaXplc1tpXTpuLnNpemUsaD1BcnJheS5pc0FycmF5KHMpP3NbaV0uc2l6ZTpzLnNpemUscD1BcnJheS5pc0FycmF5KGwpP2wubGVuZ3RoPjE/bFtpXTpsWzBdOmwsZD1BcnJheS5pc0FycmF5KGMpP2MubGVuZ3RoPjE/Y1tpXTpjWzBdOmMsbT1nW3BdLHY9Z1tkXSx5PXU/dS8uOCsxOjAseD0tdip5LS41KnY7by5vZmZzZXRbaV09W20qeS9oLHgvaF19fXJldHVybiBvfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6Njc1LCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo3NTEsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo3NzIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6ODMxLCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6MTIwOCwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTIxNiwiLi9jb25zdGFudHMiOjEyNDUsIi4vaGVscGVycyI6MTI1MCwiY29sb3Itbm9ybWFsaXplIjoxMjYsImZhc3QtaXNudW1lcmljIjoyNDIsInN2Zy1wYXRoLXNkZiI6NTY5fV0sMTI0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuL2hlbHBlcnMiKSxvPXQoIi4vYXR0cmlidXRlcyIpLHM9dCgiLi4vc2NhdHRlci9jb25zdGFudHMiKSxsPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxjPXQoIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiKSx1PXQoIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIiksZj10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLGg9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIikscD10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGQ9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG0pe2Z1bmN0aW9uIGcocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX12YXIgdj0hIXQubWFya2VyJiZhLmlzT3BlblN5bWJvbCh0Lm1hcmtlci5zeW1ib2wpLHk9bC5pc0J1YmJsZSh0KSx4PWModCxlLG0sZyk7aWYoeCl7dSh0LGUsbSxnKSxnKCJ4aG92ZXJmb3JtYXQiKSxnKCJ5aG92ZXJmb3JtYXQiKTt2YXIgYj14PHMuUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIjtnKCJ0ZXh0IiksZygiaG92ZXJ0ZXh0IiksZygiaG92ZXJ0ZW1wbGF0ZSIpLGcoIm1vZGUiLGIpLGwuaGFzTGluZXMoZSkmJihnKCJjb25uZWN0Z2FwcyIpLGgodCxlLHIsbSxnKSxnKCJsaW5lLnNoYXBlIikpLGwuaGFzTWFya2VycyhlKSYmKGYodCxlLHIsbSxnKSxnKCJtYXJrZXIubGluZS53aWR0aCIsdnx8eT8xOjApKSxsLmhhc1RleHQoZSkmJihnKCJ0ZXh0dGVtcGxhdGUiKSxkKHQsZSxtLGcpKTt2YXIgXz0oZS5saW5lfHx7fSkuY29sb3Isdz0oZS5tYXJrZXJ8fHt9KS5jb2xvcjtnKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZwKHQsZSxyLGcpO3ZhciBUPWkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdXBwbHlEZWZhdWx0cyIpO1QodCxlLF98fHd8fHIse2F4aXM6InkifSksVCh0LGUsX3x8d3x8cix7YXhpczoieCIsaW5oZXJpdDoieSJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxnKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjoxMTk1LCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTE5OSwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMjA0LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTIxMCwiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiOjEyMTEsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTYsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTIxNywiLi4vc2NhdHRlci94eV9kZWZhdWx0cyI6MTIxOCwiLi9hdHRyaWJ1dGVzIjoxMjQzLCIuL2hlbHBlcnMiOjEyNTB9XSwxMjQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNO2UuZXhwb3J0cz17c3R5bGVUZXh0U2VsZWN0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbz10WzBdLHM9by50cmFjZSxsPW8udCxjPWwuX3NjZW5lLHU9bC5pbmRleCxmPWMuc2VsZWN0QmF0Y2hbdV0saD1jLnVuc2VsZWN0QmF0Y2hbdV0scD1jLnRleHRPcHRpb25zW3VdLGQ9Yy50ZXh0U2VsZWN0ZWRPcHRpb25zW3VdfHx7fSxtPWMudGV4dFVuc2VsZWN0ZWRPcHRpb25zW3VdfHx7fSxnPW4uZXh0ZW5kRmxhdCh7fSxwKTtpZihmLmxlbmd0aHx8aC5sZW5ndGgpe3ZhciB2PWQuY29sb3IseT1tLmNvbG9yLHg9cC5jb2xvcixiPUFycmF5LmlzQXJyYXkoeCk7Zm9yKGcuY29sb3I9bmV3IEFycmF5KHMuX2xlbmd0aCksZT0wO2U8Zi5sZW5ndGg7ZSsrKXI9ZltlXSxnLmNvbG9yW3JdPXZ8fChiP3hbcl06eCk7Zm9yKGU9MDtlPGgubGVuZ3RoO2UrKyl7cj1oW2VdO3ZhciBfPWI/eFtyXTp4O2cuY29sb3Jbcl09eXx8KHY/XzppLmFkZE9wYWNpdHkoXyxhKSl9fWMuZ2xUZXh0W3VdLnVwZGF0ZShnKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NzUxLCIuLi8uLi9saWIiOjc3Nn1dLDEyNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9mb3JtYXRfbGFiZWxzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10Lmk7cmV0dXJuIngiaW4gdHx8KHQueD1lLl94W2ldKSwieSJpbiB0fHwodC55PWUuX3lbaV0pLG4odCxlLHIpfX0seyIuLi9zY2F0dGVyL2Zvcm1hdF9sYWJlbHMiOjEyMDB9XSwxMjUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIik7ci5pc09wZW5TeW1ib2w9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P24uT1BFTl9SRS50ZXN0KHQpOnQlMjAwPjEwMH0sci5pc0RvdFN5bWJvbD1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bi5ET1RfUkUudGVzdCh0KTp0PjIwMH19LHsiLi9jb25zdGFudHMiOjEyNDV9XSwxMjUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIik7ZnVuY3Rpb24gbyh0LGUscixvKXt2YXIgcz10LnhhLGw9dC55YSxjPXQuZGlzdGFuY2UsdT10LmR4eSxmPXQuaW5kZXgsaD17cG9pbnROdW1iZXI6Zix4OmVbZl0seTpyW2ZdfTtoLnR4PUFycmF5LmlzQXJyYXkoby50ZXh0KT9vLnRleHRbZl06by50ZXh0LGguaHR4PUFycmF5LmlzQXJyYXkoby5ob3ZlcnRleHQpP28uaG92ZXJ0ZXh0W2ZdOm8uaG92ZXJ0ZXh0LGguZGF0YT1BcnJheS5pc0FycmF5KG8uY3VzdG9tZGF0YSk/by5jdXN0b21kYXRhW2ZdOm8uY3VzdG9tZGF0YSxoLnRwPUFycmF5LmlzQXJyYXkoby50ZXh0cG9zaXRpb24pP28udGV4dHBvc2l0aW9uW2ZdOm8udGV4dHBvc2l0aW9uO3ZhciBwPW8udGV4dGZvbnQ7cCYmKGgudHM9aS5pc0FycmF5T3JUeXBlZEFycmF5KHAuc2l6ZSk/cC5zaXplW2ZdOnAuc2l6ZSxoLnRjPUFycmF5LmlzQXJyYXkocC5jb2xvcik/cC5jb2xvcltmXTpwLmNvbG9yLGgudGY9QXJyYXkuaXNBcnJheShwLmZhbWlseSk/cC5mYW1pbHlbZl06cC5mYW1pbHkpO3ZhciBkPW8ubWFya2VyO2QmJihoLm1zPWkuaXNBcnJheU9yVHlwZWRBcnJheShkLnNpemUpP2Quc2l6ZVtmXTpkLnNpemUsaC5tbz1pLmlzQXJyYXlPclR5cGVkQXJyYXkoZC5vcGFjaXR5KT9kLm9wYWNpdHlbZl06ZC5vcGFjaXR5LGgubXg9aS5pc0FycmF5T3JUeXBlZEFycmF5KGQuc3ltYm9sKT9kLnN5bWJvbFtmXTpkLnN5bWJvbCxoLm1jPWkuaXNBcnJheU9yVHlwZWRBcnJheShkLmNvbG9yKT9kLmNvbG9yW2ZdOmQuY29sb3IpO3ZhciBtPWQmJmQubGluZTttJiYoaC5tbGM9QXJyYXkuaXNBcnJheShtLmNvbG9yKT9tLmNvbG9yW2ZdOm0uY29sb3IsaC5tbHc9aS5pc0FycmF5T3JUeXBlZEFycmF5KG0ud2lkdGgpP20ud2lkdGhbZl06bS53aWR0aCk7dmFyIGc9ZCYmZC5ncmFkaWVudDtnJiYibm9uZSIhPT1nLnR5cGUmJihoLm1ndD1BcnJheS5pc0FycmF5KGcudHlwZSk/Zy50eXBlW2ZdOmcudHlwZSxoLm1nYz1BcnJheS5pc0FycmF5KGcuY29sb3IpP2cuY29sb3JbZl06Zy5jb2xvcik7dmFyIHY9cy5jMnAoaC54LCEwKSx5PWwuYzJwKGgueSwhMCkseD1oLm1yY3x8MSxiPW8uaG92ZXJsYWJlbDtiJiYoaC5oYmc9QXJyYXkuaXNBcnJheShiLmJnY29sb3IpP2IuYmdjb2xvcltmXTpiLmJnY29sb3IsaC5oYmM9QXJyYXkuaXNBcnJheShiLmJvcmRlcmNvbG9yKT9iLmJvcmRlcmNvbG9yW2ZdOmIuYm9yZGVyY29sb3IsaC5odHM9aS5pc0FycmF5T3JUeXBlZEFycmF5KGIuZm9udC5zaXplKT9iLmZvbnQuc2l6ZVtmXTpiLmZvbnQuc2l6ZSxoLmh0Yz1BcnJheS5pc0FycmF5KGIuZm9udC5jb2xvcik/Yi5mb250LmNvbG9yW2ZdOmIuZm9udC5jb2xvcixoLmh0Zj1BcnJheS5pc0FycmF5KGIuZm9udC5mYW1pbHkpP2IuZm9udC5mYW1pbHlbZl06Yi5mb250LmZhbWlseSxoLmhubD1pLmlzQXJyYXlPclR5cGVkQXJyYXkoYi5uYW1lbGVuZ3RoKT9iLm5hbWVsZW5ndGhbZl06Yi5uYW1lbGVuZ3RoKTt2YXIgXz1vLmhvdmVyaW5mbztfJiYoaC5oaT1BcnJheS5pc0FycmF5KF8pP19bZl06Xyk7dmFyIHc9by5ob3ZlcnRlbXBsYXRlO3cmJihoLmh0PUFycmF5LmlzQXJyYXkodyk/d1tmXTp3KTt2YXIgVD17fTtUW3QuaW5kZXhdPWg7dmFyIGs9by5fb3JpZ1gsQT1vLl9vcmlnWSxNPWkuZXh0ZW5kRmxhdCh7fSx0LHtjb2xvcjphKG8saCkseDA6di14LHgxOnYreCx4TGFiZWxWYWw6az9rW2ZdOmgueCx5MDp5LXgseTE6eSt4LHlMYWJlbFZhbDpBP0FbZl06aC55LGNkOlQsZGlzdGFuY2U6YyxzcGlrZURpc3RhbmNlOnUsaG92ZXJ0ZW1wbGF0ZTpoLmh0fSk7cmV0dXJuIGguaHR4P00udGV4dD1oLmh0eDpoLnR4P00udGV4dD1oLnR4Om8udGV4dCYmKE0udGV4dD1vLnRleHQpLGkuZmlsbFRleHQoaCxvLE0pLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJob3ZlckluZm8iKShoLG8sTSksTX1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEscyxsLGMsdSxmLGgscCxkLG09dC5jZCxnPW1bMF0udCx2PW1bMF0udHJhY2UseT10LnhhLHg9dC55YSxiPWcueCxfPWcueSx3PXkuYzJwKGUpLFQ9eC5jMnAociksaz10LmRpc3RhbmNlO2lmKGcudHJlZSl7dmFyIEE9eS5wMmMody1rKSxNPXkucDJjKHcrayksUz14LnAyYyhULWspLEU9eC5wMmMoVCtrKTtpPSJ4Ij09PW4/Zy50cmVlLnJhbmdlKE1hdGgubWluKEEsTSksTWF0aC5taW4oeC5fcmxbMF0seC5fcmxbMV0pLE1hdGgubWF4KEEsTSksTWF0aC5tYXgoeC5fcmxbMF0seC5fcmxbMV0pKTpnLnRyZWUucmFuZ2UoTWF0aC5taW4oQSxNKSxNYXRoLm1pbihTLEUpLE1hdGgubWF4KEEsTSksTWF0aC5tYXgoUyxFKSl9ZWxzZSBpPWcuaWRzO3ZhciBMPWs7aWYoIngiPT09bil7dmFyIEM9ISF2LnhwZXJpb2RhbGlnbm1lbnQsUD0hIXYueXBlcmlvZGFsaWdubWVudDtmb3IodT0wO3U8aS5sZW5ndGg7dSsrKXtpZihsPWJbYT1pW3VdXSxmPU1hdGguYWJzKHkuYzJwKGwpLXcpLEMpe3ZhciBJPXkuYzJwKHYuX3hTdGFydHNbYV0pLE89eS5jMnAodi5feEVuZHNbYV0pO2Y9dz49TWF0aC5taW4oSSxPKSYmdzw9TWF0aC5tYXgoSSxPKT8wOjEvMH1pZihmPEwpe2lmKEw9ZixjPV9bYV0saD14LmMycChjKS1ULFApe3ZhciB6PXguYzJwKHYuX3lTdGFydHNbYV0pLEQ9eC5jMnAodi5feUVuZHNbYV0pO2g9VD49TWF0aC5taW4oeixEKSYmVDw9TWF0aC5tYXgoeixEKT8wOjEvMH1kPU1hdGguc3FydChmKmYraCpoKSxzPWlbdV19fX1lbHNlIGZvcih1PWkubGVuZ3RoLTE7dT4tMTt1LS0pbD1iW2E9aVt1XV0sYz1fW2FdLGY9eS5jMnAobCktdyxoPXguYzJwKGMpLVQsKHA9TWF0aC5zcXJ0KGYqZitoKmgpKTxMJiYoTD1kPXAscz1hKTtyZXR1cm4gdC5pbmRleD1zLHQuZGlzdGFuY2U9TCx0LmR4eT1kLHZvaWQgMD09PXM/W3RdOltvKHQsYixfLHYpXX0sY2FsY0hvdmVyOm99fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciI6MTIwMX1dLDEyNTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9ob3ZlciIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJnbCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImdsIiwicmVnbCIsImNhcnRlc2lhbiIsInN5bWJvbHMiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi4vc2NhdHRlci9jcm9zc190cmFjZV9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxob3ZlclBvaW50czpuLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODQxLCIuLi9zY2F0dGVyL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIjoxMTk3LCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTIwOSwiLi9hdHRyaWJ1dGVzIjoxMjQzLCIuL2NhbGMiOjEyNDQsIi4vZGVmYXVsdHMiOjEyNDcsIi4vZm9ybWF0X2xhYmVscyI6MTI0OSwiLi9ob3ZlciI6MTI1MSwiLi9wbG90IjoxMjUzLCIuL3NlbGVjdCI6MTI1NX1dLDEyNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicmVnbC1zY2F0dGVyMmQiKSxpPXQoInJlZ2wtbGluZTJkIiksYT10KCJyZWdsLWVycm9yMmQiKSxvPXQoImdsLXRleHQiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIikuc2VsZWN0TW9kZSxjPXQoIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiKSx1PXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxmPXQoIi4uL3NjYXR0ZXIvbGlua190cmFjZXMiKSxoPXQoIi4vZWRpdF9zdHlsZSIpLnN0eWxlVGV4dFNlbGVjdGlvbjtmdW5jdGlvbiBwKHQsZSxyLG4pe3ZhciBpPXQuX3NpemUsYT10LndpZHRoKm4sbz10LmhlaWdodCpuLHM9aS5sKm4sbD1pLmIqbixjPWkucipuLHU9aS50Km4sZj1pLncqbixoPWkuaCpuO3JldHVybltzK2UuZG9tYWluWzBdKmYsbCtyLmRvbWFpblswXSpoLGEtYy0oMS1lLmRvbWFpblsxXSkqZixvLXUtKDEtci5kb21haW5bMV0pKmhdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoci5sZW5ndGgpe3ZhciBkLG0sZz10Ll9mdWxsTGF5b3V0LHY9ZS5fc2NlbmUseT1lLnhheGlzLHg9ZS55YXhpcztpZih2KWlmKGModCxbIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiLCJPRVNfZWxlbWVudF9pbmRleF91aW50Il0pKXt2YXIgYj12LmNvdW50LF89Zy5fZ2xjYW52YXMuZGF0YSgpWzBdLnJlZ2w7aWYoZih0LGUsciksdi5kaXJ0eSl7aWYoITA9PT12LmVycm9yMmQmJih2LmVycm9yMmQ9YShfKSksITA9PT12LmxpbmUyZCYmKHYubGluZTJkPWkoXykpLCEwPT09di5zY2F0dGVyMmQmJih2LnNjYXR0ZXIyZD1uKF8pKSwhMD09PXYuZmlsbDJkJiYodi5maWxsMmQ9aShfKSksITA9PT12LmdsVGV4dClmb3Iodi5nbFRleHQ9bmV3IEFycmF5KGIpLGQ9MDtkPGI7ZCsrKXYuZ2xUZXh0W2RdPW5ldyBvKF8pO2lmKHYuZ2xUZXh0KXtpZihiPnYuZ2xUZXh0Lmxlbmd0aCl7dmFyIHc9Yi12LmdsVGV4dC5sZW5ndGg7Zm9yKGQ9MDtkPHc7ZCsrKXYuZ2xUZXh0LnB1c2gobmV3IG8oXykpfWVsc2UgaWYoYjx2LmdsVGV4dC5sZW5ndGgpe3ZhciBUPXYuZ2xUZXh0Lmxlbmd0aC1iO3YuZ2xUZXh0LnNwbGljZShiLFQpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSgpfSkpfWZvcihkPTA7ZDxiO2QrKyl2LmdsVGV4dFtkXS51cGRhdGUodi50ZXh0T3B0aW9uc1tkXSl9aWYodi5saW5lMmQmJih2LmxpbmUyZC51cGRhdGUodi5saW5lT3B0aW9ucyksdi5saW5lT3B0aW9ucz12LmxpbmVPcHRpb25zLm1hcCgoZnVuY3Rpb24odCl7aWYodCYmdC5wb3NpdGlvbnMpe2Zvcih2YXIgZT10LnBvc2l0aW9ucyxyPTA7cjxlLmxlbmd0aCYmKGlzTmFOKGVbcl0pfHxpc05hTihlW3IrMV0pKTspcis9Mjtmb3IodmFyIG49ZS5sZW5ndGgtMjtuPnImJihpc05hTihlW25dKXx8aXNOYU4oZVtuKzFdKSk7KW4tPTI7dC5wb3NpdGlvbnM9ZS5zbGljZShyLG4rMil9cmV0dXJuIHR9KSksdi5saW5lMmQudXBkYXRlKHYubGluZU9wdGlvbnMpKSx2LmVycm9yMmQpe3ZhciBrPSh2LmVycm9yWE9wdGlvbnN8fFtdKS5jb25jYXQodi5lcnJvcllPcHRpb25zfHxbXSk7di5lcnJvcjJkLnVwZGF0ZShrKX12LnNjYXR0ZXIyZCYmdi5zY2F0dGVyMmQudXBkYXRlKHYubWFya2VyT3B0aW9ucyksdi5maWxsT3JkZXI9cy5yZXBlYXQobnVsbCxiKSx2LmZpbGwyZCYmKHYuZmlsbE9wdGlvbnM9di5maWxsT3B0aW9ucy5tYXAoKGZ1bmN0aW9uKHQsZSl7dmFyIG49cltlXTtpZih0JiZuJiZuWzBdJiZuWzBdLnRyYWNlKXt2YXIgaSxhLG89blswXSxzPW8udHJhY2UsbD1vLnQsYz12LmxpbmVPcHRpb25zW2VdLHU9W107cy5fb3duZmlsbCYmdS5wdXNoKGUpLHMuX25leHR0cmFjZSYmdS5wdXNoKGUrMSksdS5sZW5ndGgmJih2LmZpbGxPcmRlcltlXT11KTt2YXIgZixoLHA9W10sZD1jJiZjLnBvc2l0aW9uc3x8bC5wb3NpdGlvbnM7aWYoInRvemVyb3kiPT09cy5maWxsKXtmb3IoZj0wO2Y8ZC5sZW5ndGgmJmlzTmFOKGRbZisxXSk7KWYrPTI7Zm9yKGg9ZC5sZW5ndGgtMjtoPmYmJmlzTmFOKGRbaCsxXSk7KWgtPTI7MCE9PWRbZisxXSYmKHA9W2RbZl0sMF0pLHA9cC5jb25jYXQoZC5zbGljZShmLGgrMikpLDAhPT1kW2grMV0mJihwPXAuY29uY2F0KFtkW2hdLDBdKSl9ZWxzZSBpZigidG96ZXJveCI9PT1zLmZpbGwpe2ZvcihmPTA7ZjxkLmxlbmd0aCYmaXNOYU4oZFtmXSk7KWYrPTI7Zm9yKGg9ZC5sZW5ndGgtMjtoPmYmJmlzTmFOKGRbaF0pOyloLT0yOzAhPT1kW2ZdJiYocD1bMCxkW2YrMV1dKSxwPXAuY29uY2F0KGQuc2xpY2UoZixoKzIpKSwwIT09ZFtoXSYmKHA9cC5jb25jYXQoWzAsZFtoKzFdXSkpfWVsc2UgaWYoInRvc2VsZiI9PT1zLmZpbGx8fCJ0b25leHQiPT09cy5maWxsKXtmb3IocD1bXSxpPTAsdC5zcGxpdE51bGw9ITAsYT0wO2E8ZC5sZW5ndGg7YSs9MikoaXNOYU4oZFthXSl8fGlzTmFOKGRbYSsxXSkpJiYoKHA9cC5jb25jYXQoZC5zbGljZShpLGEpKSkucHVzaChkW2ldLGRbaSsxXSkscC5wdXNoKG51bGwsbnVsbCksaT1hKzIpO3A9cC5jb25jYXQoZC5zbGljZShpKSksaSYmcC5wdXNoKGRbaV0sZFtpKzFdKX1lbHNle3ZhciBtPXMuX25leHR0cmFjZTtpZihtKXt2YXIgZz12LmxpbmVPcHRpb25zW2UrMV07aWYoZyl7dmFyIHk9Zy5wb3NpdGlvbnM7aWYoInRvbmV4dHkiPT09cy5maWxsKXtmb3IocD1kLnNsaWNlKCksZT1NYXRoLmZsb29yKHkubGVuZ3RoLzIpO2UtLTspe3ZhciB4PXlbMiplXSxiPXlbMiplKzFdO2lzTmFOKHgpfHxpc05hTihiKXx8cC5wdXNoKHgsYil9dC5maWxsPW0uZmlsbGNvbG9yfX19fWlmKHMuX3ByZXZ0cmFjZSYmInRvbmV4dCI9PT1zLl9wcmV2dHJhY2UuZmlsbCl7dmFyIF89di5saW5lT3B0aW9uc1tlLTFdLnBvc2l0aW9ucyx3PXAubGVuZ3RoLzIsVD1baT13XTtmb3IoYT0wO2E8Xy5sZW5ndGg7YSs9MikoaXNOYU4oX1thXSl8fGlzTmFOKF9bYSsxXSkpJiYoVC5wdXNoKGEvMit3KzEpLGk9YSsyKTtwPXAuY29uY2F0KF8pLHQuaG9sZT1UfXJldHVybiB0LmZpbGxtb2RlPXMuZmlsbCx0Lm9wYWNpdHk9cy5vcGFjaXR5LHQucG9zaXRpb25zPXAsdH19KSksdi5maWxsMmQudXBkYXRlKHYuZmlsbE9wdGlvbnMpKX12YXIgQT1nLmRyYWdtb2RlLE09bChBKSxTPWcuY2xpY2ttb2RlLmluZGV4T2YoInNlbGVjdCIpPi0xO2ZvcihkPTA7ZDxiO2QrKyl7dmFyIEU9cltkXVswXSxMPUUudHJhY2UsQz1FLnQsUD1DLmluZGV4LEk9TC5fbGVuZ3RoLE89Qy54LHo9Qy55O2lmKEwuc2VsZWN0ZWRwb2ludHN8fE18fFMpe2lmKE18fChNPSEwKSxMLnNlbGVjdGVkcG9pbnRzKXt2YXIgRD12LnNlbGVjdEJhdGNoW1BdPXMuc2VsSW5kaWNlczJzZWxQb2ludHMoTCksUj17fTtmb3IobT0wO208RC5sZW5ndGg7bSsrKVJbRFttXV09MTt2YXIgRj1bXTtmb3IobT0wO208STttKyspUlttXXx8Ri5wdXNoKG0pO3YudW5zZWxlY3RCYXRjaFtQXT1GfXZhciBCPUMueHB4PW5ldyBBcnJheShJKSxOPUMueXB4PW5ldyBBcnJheShJKTtmb3IobT0wO208STttKyspQlttXT15LmMycChPW21dKSxOW21dPXguYzJwKHpbbV0pfWVsc2UgQy54cHg9Qy55cHg9bnVsbH1pZihNKXtpZih2LnNlbGVjdDJkfHwodi5zZWxlY3QyZD1uKGcuX2dsY2FudmFzLmRhdGEoKVsxXS5yZWdsKSksdi5zY2F0dGVyMmQpe3ZhciBqPW5ldyBBcnJheShiKTtmb3IoZD0wO2Q8YjtkKyspaltkXT12LnNlbGVjdEJhdGNoW2RdLmxlbmd0aHx8di51bnNlbGVjdEJhdGNoW2RdLmxlbmd0aD92Lm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zW2RdOnt9O3Yuc2NhdHRlcjJkLnVwZGF0ZShqKX12LnNlbGVjdDJkJiYodi5zZWxlY3QyZC51cGRhdGUodi5tYXJrZXJPcHRpb25zKSx2LnNlbGVjdDJkLnVwZGF0ZSh2Lm1hcmtlclNlbGVjdGVkT3B0aW9ucykpLHYuZ2xUZXh0JiZyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPSgodHx8W10pWzBdfHx7fSkudHJhY2V8fHt9O3UuaGFzVGV4dChlKSYmaCh0KX0pKX1lbHNlIHYuc2NhdHRlcjJkJiZ2LnNjYXR0ZXIyZC51cGRhdGUodi5tYXJrZXJPcHRpb25zKTt2YXIgVT17dmlld3BvcnQ6cChnLHkseCx0Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW8pLHJhbmdlOlsoeS5fcmx8fHkucmFuZ2UpWzBdLCh4Ll9ybHx8eC5yYW5nZSlbMF0sKHkuX3JsfHx5LnJhbmdlKVsxXSwoeC5fcmx8fHgucmFuZ2UpWzFdXX0sVj1zLnJlcGVhdChVLHYuY291bnQpO3YuZmlsbDJkJiZ2LmZpbGwyZC51cGRhdGUoViksdi5saW5lMmQmJnYubGluZTJkLnVwZGF0ZShWKSx2LmVycm9yMmQmJnYuZXJyb3IyZC51cGRhdGUoVi5jb25jYXQoVikpLHYuc2NhdHRlcjJkJiZ2LnNjYXR0ZXIyZC51cGRhdGUoViksdi5zZWxlY3QyZCYmdi5zZWxlY3QyZC51cGRhdGUoViksdi5nbFRleHQmJnYuZ2xUZXh0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3QudXBkYXRlKFUpfSkpfWVsc2Ugdi5pbml0KCl9fX0seyIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiOjY1NywiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiOjc4OSwiLi4vc2NhdHRlci9saW5rX3RyYWNlcyI6MTIwNywiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTIxNiwiLi9lZGl0X3N0eWxlIjoxMjQ4LCJnbC10ZXh0IjozMzcsInJlZ2wtZXJyb3IyZCI6NTEyLCJyZWdsLWxpbmUyZCI6NTEzLCJyZWdsLXNjYXR0ZXIyZCI6NTE0fV0sMTI1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLl9zY2VuZSxpPXtjb3VudDowLGRpcnR5OiEwLGxpbmVPcHRpb25zOltdLGZpbGxPcHRpb25zOltdLG1hcmtlck9wdGlvbnM6W10sbWFya2VyU2VsZWN0ZWRPcHRpb25zOltdLG1hcmtlclVuc2VsZWN0ZWRPcHRpb25zOltdLGVycm9yWE9wdGlvbnM6W10sZXJyb3JZT3B0aW9uczpbXSx0ZXh0T3B0aW9uczpbXSx0ZXh0U2VsZWN0ZWRPcHRpb25zOltdLHRleHRVbnNlbGVjdGVkT3B0aW9uczpbXSxzZWxlY3RCYXRjaDpbXSx1bnNlbGVjdEJhdGNoOltdfSxhPXtmaWxsMmQ6ITEsc2NhdHRlcjJkOiExLGVycm9yMmQ6ITEsbGluZTJkOiExLGdsVGV4dDohMSxzZWxlY3QyZDohMX07cmV0dXJuIGUuX3NjZW5lfHwoKHI9ZS5fc2NlbmU9e30pLmluaXQ9ZnVuY3Rpb24oKXtuLmV4dGVuZEZsYXQocixhLGkpfSxyLmluaXQoKSxyLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT1uLnJlcGVhdCh0LHIuY291bnQpO2lmKHIuZmlsbDJkJiZyLmZpbGwyZC51cGRhdGUoZSksci5zY2F0dGVyMmQmJnIuc2NhdHRlcjJkLnVwZGF0ZShlKSxyLmxpbmUyZCYmci5saW5lMmQudXBkYXRlKGUpLHIuZXJyb3IyZCYmci5lcnJvcjJkLnVwZGF0ZShlLmNvbmNhdChlKSksci5zZWxlY3QyZCYmci5zZWxlY3QyZC51cGRhdGUoZSksci5nbFRleHQpZm9yKHZhciBpPTA7aTxyLmNvdW50O2krKylyLmdsVGV4dFtpXS51cGRhdGUodCl9LHIuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdD1yLmNvdW50LGU9ci5maWxsMmQsaT1yLmVycm9yMmQsYT1yLmxpbmUyZCxvPXIuc2NhdHRlcjJkLHM9ci5nbFRleHQsbD1yLnNlbGVjdDJkLGM9ci5zZWxlY3RCYXRjaCx1PXIudW5zZWxlY3RCYXRjaCxmPTA7Zjx0O2YrKyl7aWYoZSYmci5maWxsT3JkZXJbZl0mJmUuZHJhdyhyLmZpbGxPcmRlcltmXSksYSYmci5saW5lT3B0aW9uc1tmXSYmYS5kcmF3KGYpLGkmJihyLmVycm9yWE9wdGlvbnNbZl0mJmkuZHJhdyhmKSxyLmVycm9yWU9wdGlvbnNbZl0mJmkuZHJhdyhmK3QpKSxvJiZyLm1hcmtlck9wdGlvbnNbZl0paWYodVtmXS5sZW5ndGgpe3ZhciBoPW4ucmVwZWF0KFtdLHIuY291bnQpO2hbZl09dVtmXSxvLmRyYXcoaCl9ZWxzZSBjW2ZdLmxlbmd0aHx8by5kcmF3KGYpO3NbZl0mJnIudGV4dE9wdGlvbnNbZl0mJnNbZl0ucmVuZGVyKCl9bCYmbC5kcmF3KGMpLHIuZGlydHk9ITF9LHIuZGVzdHJveT1mdW5jdGlvbigpe3IuZmlsbDJkJiZyLmZpbGwyZC5kZXN0cm95JiZyLmZpbGwyZC5kZXN0cm95KCksci5zY2F0dGVyMmQmJnIuc2NhdHRlcjJkLmRlc3Ryb3kmJnIuc2NhdHRlcjJkLmRlc3Ryb3koKSxyLmVycm9yMmQmJnIuZXJyb3IyZC5kZXN0cm95JiZyLmVycm9yMmQuZGVzdHJveSgpLHIubGluZTJkJiZyLmxpbmUyZC5kZXN0cm95JiZyLmxpbmUyZC5kZXN0cm95KCksci5zZWxlY3QyZCYmci5zZWxlY3QyZC5kZXN0cm95JiZyLnNlbGVjdDJkLmRlc3Ryb3koKSxyLmdsVGV4dCYmci5nbFRleHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pKSxyLmxpbmVPcHRpb25zPW51bGwsci5maWxsT3B0aW9ucz1udWxsLHIubWFya2VyT3B0aW9ucz1udWxsLHIubWFya2VyU2VsZWN0ZWRPcHRpb25zPW51bGwsci5tYXJrZXJVbnNlbGVjdGVkT3B0aW9ucz1udWxsLHIuZXJyb3JYT3B0aW9ucz1udWxsLHIuZXJyb3JZT3B0aW9ucz1udWxsLHIudGV4dE9wdGlvbnM9bnVsbCxyLnRleHRTZWxlY3RlZE9wdGlvbnM9bnVsbCxyLnRleHRVbnNlbGVjdGVkT3B0aW9ucz1udWxsLHIuc2VsZWN0QmF0Y2g9bnVsbCxyLnVuc2VsZWN0QmF0Y2g9bnVsbCxlLl9zY2VuZT1udWxsfSksci5kaXJ0eXx8bi5leHRlbmRGbGF0KHIsaSkscn19LHsiLi4vLi4vbGliIjo3NzZ9XSwxMjU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxpPXQoIi4vZWRpdF9zdHlsZSIpLnN0eWxlVGV4dFNlbGVjdGlvbjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNkLGE9dC54YXhpcyxvPXQueWF4aXMscz1bXSxsPXJbMF0udHJhY2UsYz1yWzBdLnQsdT1sLl9sZW5ndGgsZj1jLngsaD1jLnkscD1jLl9zY2VuZSxkPWMuaW5kZXg7aWYoIXApcmV0dXJuIHM7dmFyIG09bi5oYXNUZXh0KGwpLGc9bi5oYXNNYXJrZXJzKGwpLHY9IWcmJiFtO2lmKCEwIT09bC52aXNpYmxlfHx2KXJldHVybiBzO3ZhciB5PVtdLHg9W107aWYoITEhPT1lJiYhZS5kZWdlbmVyYXRlKWZvcih2YXIgYj0wO2I8dTtiKyspZS5jb250YWlucyhbYy54cHhbYl0sYy55cHhbYl1dLCExLGIsdCk/KHkucHVzaChiKSxzLnB1c2goe3BvaW50TnVtYmVyOmIseDphLmMyZChmW2JdKSx5Om8uYzJkKGhbYl0pfSkpOngucHVzaChiKTtpZihnKXt2YXIgXz1wLnNjYXR0ZXIyZDtpZih5Lmxlbmd0aHx8eC5sZW5ndGgpe2lmKCFwLnNlbGVjdEJhdGNoW2RdLmxlbmd0aCYmIXAudW5zZWxlY3RCYXRjaFtkXS5sZW5ndGgpe3ZhciB3PW5ldyBBcnJheShwLmNvdW50KTt3W2RdPXAubWFya2VyVW5zZWxlY3RlZE9wdGlvbnNbZF0sXy51cGRhdGUuYXBwbHkoXyx3KX19ZWxzZXt2YXIgVD1uZXcgQXJyYXkocC5jb3VudCk7VFtkXT1wLm1hcmtlck9wdGlvbnNbZF0sXy51cGRhdGUuYXBwbHkoXyxUKX19cmV0dXJuIHAuc2VsZWN0QmF0Y2hbZF09eSxwLnVuc2VsZWN0QmF0Y2hbZF09eCxtJiZpKHIpLHN9fSx7Ii4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTYsIi4vZWRpdF9zdHlsZSI6MTI0OH1dLDEyNTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxhPXQoIi4uL3NjYXR0ZXJnZW8vYXR0cmlidXRlcyIpLG89dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9tYXBib3gvbGF5b3V0X2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksdT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxmPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxoPWEubGluZSxwPWEubWFya2VyO2UuZXhwb3J0cz1mKHtsb246YS5sb24sbGF0OmEubGF0LG1vZGU6dSh7fSxvLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDp1KHt9LG8udGV4dCx7fSksdGV4dHRlbXBsYXRlOmkoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJsYXQiLCJsb24iLCJ0ZXh0Il19KSxob3ZlcnRleHQ6dSh7fSxvLmhvdmVydGV4dCx7fSksbGluZTp7Y29sb3I6aC5jb2xvcix3aWR0aDpoLndpZHRofSxjb25uZWN0Z2FwczpvLmNvbm5lY3RnYXBzLG1hcmtlcjp1KHtzeW1ib2w6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiY2lyY2xlIixhcnJheU9rOiEwfSxhbmdsZTp7dmFsVHlwZToibnVtYmVyIixkZmx0OiJhdXRvIixhcnJheU9rOiEwfSxhbGxvd292ZXJsYXA6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9wYWNpdHk6cC5vcGFjaXR5LHNpemU6cC5zaXplLHNpemVyZWY6cC5zaXplcmVmLHNpemVtaW46cC5zaXplbWluLHNpemVtb2RlOnAuc2l6ZW1vZGV9LGMoIm1hcmtlciIpKSxmaWxsOmEuZmlsbCxmaWxsY29sb3I6by5maWxsY29sb3IsdGV4dGZvbnQ6cy5sYXllcnMuc3ltYm9sLnRleHRmb250LHRleHRwb3NpdGlvbjpzLmxheWVycy5zeW1ib2wudGV4dHBvc2l0aW9uLGJlbG93Ont2YWxUeXBlOiJzdHJpbmcifSxzZWxlY3RlZDp7bWFya2VyOm8uc2VsZWN0ZWQubWFya2VyfSx1bnNlbGVjdGVkOnttYXJrZXI6by51bnNlbGVjdGVkLm1hcmtlcn0saG92ZXJpbmZvOnUoe30sbC5ob3ZlcmluZm8se2ZsYWdzOlsibG9uIiwibGF0IiwidGV4dCIsIm5hbWUiXX0pLGhvdmVydGVtcGxhdGU6bigpfSwiY2FsYyIsIm5lc3RlZCIpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODA5LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4uLy4uL3Bsb3RzL21hcGJveC9sYXlvdXRfYXR0cmlidXRlcyI6ODg2LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE5MSwiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzIjoxMjMzfV0sMTI1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLG89dCgiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyIpLHU9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGY9dCgiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnZlcnRfdGV4dF9vcHRzIiksaD10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheVBvaW50VmFsdWUscD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKS5ORVdMSU5FUyxkPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLkJSX1RBR19BTEw7ZnVuY3Rpb24gbSgpe3JldHVybntnZW9qc29uOm8ubWFrZUJsYW5rKCksbGF5b3V0Ont2aXNpYmlsaXR5OiJub25lIn0scGFpbnQ6e319fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gaS5pc0FycmF5T3JUeXBlZEFycmF5KHQpP2U/ZnVuY3Rpb24oZSl7cmV0dXJuIG4odFtlXSk/K3RbZV06MH06ZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19OnQ/ZnVuY3Rpb24oKXtyZXR1cm4gdH06dn1mdW5jdGlvbiB2KCl7cmV0dXJuIiJ9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdFswXT09PWF9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYT1lWzBdLnRyYWNlLHg9ITA9PT1hLnZpc2libGUmJjAhPT1hLl9sZW5ndGgsYj0ibm9uZSIhPT1hLmZpbGwsXz11Lmhhc0xpbmVzKGEpLHc9dS5oYXNNYXJrZXJzKGEpLFQ9dS5oYXNUZXh0KGEpLGs9dyYmImNpcmNsZSI9PT1hLm1hcmtlci5zeW1ib2wsQT13JiYiY2lyY2xlIiE9PWEubWFya2VyLnN5bWJvbCxNPW0oKSxTPW0oKSxFPW0oKSxMPW0oKSxDPXtmaWxsOk0sbGluZTpTLGNpcmNsZTpFLHN5bWJvbDpMfTtpZigheClyZXR1cm4gQztpZigoYnx8XykmJihyPW8uY2FsY1RyYWNlVG9MaW5lQ29vcmRzKGUpKSxiJiYoTS5nZW9qc29uPW8ubWFrZVBvbHlnb24ociksTS5sYXlvdXQudmlzaWJpbGl0eT0idmlzaWJsZSIsaS5leHRlbmRGbGF0KE0ucGFpbnQseyJmaWxsLWNvbG9yIjphLmZpbGxjb2xvcn0pKSxfJiYoUy5nZW9qc29uPW8ubWFrZUxpbmUociksUy5sYXlvdXQudmlzaWJpbGl0eT0idmlzaWJsZSIsaS5leHRlbmRGbGF0KFMucGFpbnQseyJsaW5lLXdpZHRoIjphLmxpbmUud2lkdGgsImxpbmUtY29sb3IiOmEubGluZS5jb2xvciwibGluZS1vcGFjaXR5IjphLm9wYWNpdHl9KSksayl7dmFyIFA9ZnVuY3Rpb24odCl7dmFyIGUscixhLG8sdT10WzBdLnRyYWNlLGY9dS5tYXJrZXIsaD11LnNlbGVjdGVkcG9pbnRzLHA9aS5pc0FycmF5T3JUeXBlZEFycmF5KGYuY29sb3IpLGQ9aS5pc0FycmF5T3JUeXBlZEFycmF5KGYuc2l6ZSksbT1pLmlzQXJyYXlPclR5cGVkQXJyYXkoZi5vcGFjaXR5KTtmdW5jdGlvbiBnKHQpe3JldHVybiB1Lm9wYWNpdHkqdH1wJiYocj1zLmhhc0NvbG9yc2NhbGUodSwibWFya2VyIik/cy5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2UoZik6aS5pZGVudGl0eSk7ZCYmKGE9Yyh1KSk7bSYmKG89ZnVuY3Rpb24odCl7cmV0dXJuIGcobih0KT8raS5jb25zdHJhaW4odCwwLDEpOjApfSk7dmFyIHYseD1bXTtmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgYj10W2VdLF89Yi5sb25sYXQ7aWYoIXkoXykpe3ZhciB3PXt9O3ImJih3Lm1jYz1iLm1jYz1yKGIubWMpKSxhJiYody5tcmM9Yi5tcmM9YShiLm1zKSksbyYmKHcubW89byhiLm1vKSksaCYmKHcuc2VsZWN0ZWQ9Yi5zZWxlY3RlZHx8MCkseC5wdXNoKHt0eXBlOiJGZWF0dXJlIixnZW9tZXRyeTp7dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOl99LHByb3BlcnRpZXM6d30pfX1pZihoKWZvcih2PWwubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucyh1KSxlPTA7ZTx4Lmxlbmd0aDtlKyspe3ZhciBUPXhbZV0ucHJvcGVydGllczt2LnNlbGVjdGVkT3BhY2l0eUZuJiYoVC5tbz1nKHYuc2VsZWN0ZWRPcGFjaXR5Rm4oVCkpKSx2LnNlbGVjdGVkQ29sb3JGbiYmKFQubWNjPXYuc2VsZWN0ZWRDb2xvckZuKFQpKSx2LnNlbGVjdGVkU2l6ZUZuJiYoVC5tcmM9di5zZWxlY3RlZFNpemVGbihUKSl9cmV0dXJue2dlb2pzb246e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczp4fSxtY2M6cHx8diYmdi5zZWxlY3RlZENvbG9yRm4/e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToibWNjIn06Zi5jb2xvcixtcmM6ZHx8diYmdi5zZWxlY3RlZFNpemVGbj97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtcmMifTooaz1mLnNpemUsay8yKSxtbzptfHx2JiZ2LnNlbGVjdGVkT3BhY2l0eUZuP3t0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6Im1vIn06ZyhmLm9wYWNpdHkpfTt2YXIga30oZSk7RS5nZW9qc29uPVAuZ2VvanNvbixFLmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIixpLmV4dGVuZEZsYXQoRS5wYWludCx7ImNpcmNsZS1jb2xvciI6UC5tY2MsImNpcmNsZS1yYWRpdXMiOlAubXJjLCJjaXJjbGUtb3BhY2l0eSI6UC5tb30pfWlmKChBfHxUKSYmKEwuZ2VvanNvbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLl9mdWxsTGF5b3V0LG49dFswXS50cmFjZSxhPW4ubWFya2VyfHx7fSxvPWEuc3ltYm9sLHM9YS5hbmdsZSxsPSJjaXJjbGUiIT09bz9nKG8pOnYsYz0iYXV0byIhPT1zP2cocywhMCk6dixmPXUuaGFzVGV4dChuKT9nKG4udGV4dCk6dixtPVtdLHg9MDt4PHQubGVuZ3RoO3grKyl7dmFyIGI9dFt4XTtpZigheShiLmxvbmxhdCkpe3ZhciBfLHc9bi50ZXh0dGVtcGxhdGU7aWYodyl7dmFyIFQ9QXJyYXkuaXNBcnJheSh3KT93W3hdfHwiIjp3LGs9bi5fbW9kdWxlLmZvcm1hdExhYmVscyhiLG4sciksQT17fTtoKEEsbixiLmkpO3ZhciBNPW4uX21ldGF8fHt9O189aS50ZXh0dGVtcGxhdGVTdHJpbmcoVCxrLHIuX2QzbG9jYWxlLEEsYixNKX1lbHNlIF89Zih4KTtfJiYoXz1fLnJlcGxhY2UocCwiIikucmVwbGFjZShkLCJcbiIpKSxtLnB1c2goe3R5cGU6IkZlYXR1cmUiLGdlb21ldHJ5Ont0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6Yi5sb25sYXR9LHByb3BlcnRpZXM6e3N5bWJvbDpsKHgpLGFuZ2xlOmMoeCksdGV4dDpffX0pfX1yZXR1cm57dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOm19fShlLHQpLGkuZXh0ZW5kRmxhdChMLmxheW91dCx7dmlzaWJpbGl0eToidmlzaWJsZSIsImljb24taW1hZ2UiOiJ7c3ltYm9sfS0xNSIsInRleHQtZmllbGQiOiJ7dGV4dH0ifSksQSYmKGkuZXh0ZW5kRmxhdChMLmxheW91dCx7Imljb24tc2l6ZSI6YS5tYXJrZXIuc2l6ZS8xMH0pLCJhbmdsZSJpbiBhLm1hcmtlciYmImF1dG8iIT09YS5tYXJrZXIuYW5nbGUmJmkuZXh0ZW5kRmxhdChMLmxheW91dCx7Imljb24tcm90YXRlIjp7dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJhbmdsZSJ9LCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCI6Im1hcCJ9KSxMLmxheW91dFsiaWNvbi1hbGxvdy1vdmVybGFwIl09YS5tYXJrZXIuYWxsb3dvdmVybGFwLGkuZXh0ZW5kRmxhdChMLnBhaW50LHsiaWNvbi1vcGFjaXR5IjphLm9wYWNpdHkqYS5tYXJrZXIub3BhY2l0eSwiaWNvbi1jb2xvciI6YS5tYXJrZXIuY29sb3J9KSksVCkpe3ZhciBJPShhLm1hcmtlcnx8e30pLnNpemUsTz1mKGEudGV4dHBvc2l0aW9uLEkpO2kuZXh0ZW5kRmxhdChMLmxheW91dCx7InRleHQtc2l6ZSI6YS50ZXh0Zm9udC5zaXplLCJ0ZXh0LWFuY2hvciI6Ty5hbmNob3IsInRleHQtb2Zmc2V0IjpPLm9mZnNldH0pLGkuZXh0ZW5kRmxhdChMLnBhaW50LHsidGV4dC1jb2xvciI6YS50ZXh0Zm9udC5jb2xvciwidGV4dC1vcGFjaXR5IjphLm9wYWNpdHl9KX1yZXR1cm4gQ319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTEsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjY3NSwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiOjc3MCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDIsIi4uLy4uL3Bsb3RzL21hcGJveC9jb252ZXJ0X3RleHRfb3B0cyI6ODgzLCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6MTIwOCwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTIxNiwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDEyNTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLG89dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gZihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYyxyLGkpfWlmKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKCJsb24iKXx8W10saT1yKCJsYXQiKXx8W10sYT1NYXRoLm1pbihuLmxlbmd0aCxpLmxlbmd0aCk7cmV0dXJuIGUuX2xlbmd0aD1hLGF9KDAsZSxmKSl7aWYoZigidGV4dCIpLGYoInRleHR0ZW1wbGF0ZSIpLGYoImhvdmVydGV4dCIpLGYoImhvdmVydGVtcGxhdGUiKSxmKCJtb2RlIiksZigiYmVsb3ciKSxpLmhhc0xpbmVzKGUpJiYobyh0LGUscix1LGYse25vRGFzaDohMH0pLGYoImNvbm5lY3RnYXBzIikpLGkuaGFzTWFya2VycyhlKSl7YSh0LGUscix1LGYse25vTGluZTohMH0pLGYoIm1hcmtlci5hbGxvd292ZXJsYXAiKSxmKCJtYXJrZXIuYW5nbGUiKTt2YXIgaD1lLm1hcmtlcjsiY2lyY2xlIiE9PWguc3ltYm9sJiYobi5pc0FycmF5T3JUeXBlZEFycmF5KGguc2l6ZSkmJihoLnNpemU9aC5zaXplWzBdKSxuLmlzQXJyYXlPclR5cGVkQXJyYXkoaC5jb2xvcikmJihoLmNvbG9yPWguY29sb3JbMF0pKX1pLmhhc1RleHQoZSkmJnModCxlLHUsZix7bm9TZWxlY3Q6ITB9KSxmKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZsKHQsZSxyLGYpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGYpfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjExOTksIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTIwNCwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEyMTAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTYsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTIxNywiLi9hdHRyaWJ1dGVzIjoxMjU2fV0sMTI1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sb249ZS5sb24sdC5sYXQ9ZS5sYXQsdH19LHt9XSwxMjYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT17fSxhPXJbZS5zdWJwbG90XS5fc3VicGxvdC5tb2NrQXhpcyxvPXQubG9ubGF0O3JldHVybiBpLmxvbkxhYmVsPW4udGlja1RleHQoYSxhLmMybChvWzBdKSwhMCkudGV4dCxpLmxhdExhYmVsPW4udGlja1RleHQoYSxhLmMybChvWzFdKSwhMCkudGV4dCxpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3fV0sMTI2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIiksbz1pLmZpbGxUZXh0LHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBsKHQsZSxyKXtpZighdC5ob3ZlcnRlbXBsYXRlKXt2YXIgbj0oZS5oaXx8dC5ob3ZlcmluZm8pLnNwbGl0KCIrIiksaT0tMSE9PW4uaW5kZXhPZigiYWxsIiksYT0tMSE9PW4uaW5kZXhPZigibG9uIikscz0tMSE9PW4uaW5kZXhPZigibGF0IiksbD1lLmxvbmxhdCxjPVtdO3JldHVybiBpfHxhJiZzP2MucHVzaCgiKCIrdShsWzFdKSsiLCAiK3UobFswXSkrIikiKTphP2MucHVzaChyLmxvbit1KGxbMF0pKTpzJiZjLnB1c2goci5sYXQrdShsWzFdKSksKGl8fC0xIT09bi5pbmRleE9mKCJ0ZXh0IikpJiZvKGUsdCxjKSxjLmpvaW4oIjxicj4iKX1mdW5jdGlvbiB1KHQpe3JldHVybiB0KyJceGIwIn19ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscil7dmFyIG89dC5jZCxjPW9bMF0udHJhY2UsdT10LnhhLGY9dC55YSxoPXQuc3VicGxvdCxwPTM2MCooZT49MD9NYXRoLmZsb29yKChlKzE4MCkvMzYwKTpNYXRoLmNlaWwoKGUtMTgwKS8zNjApKSxkPWUtcDtpZihuLmdldENsb3Nlc3QobywoZnVuY3Rpb24odCl7dmFyIGU9dC5sb25sYXQ7aWYoZVswXT09PXMpcmV0dXJuIDEvMDt2YXIgbj1pLm1vZEhhbGYoZVswXSwzNjApLGE9ZVsxXSxvPWgucHJvamVjdChbbixhXSksbD1vLngtdS5jMnAoW2QsYV0pLGM9by55LWYuYzJwKFtuLHJdKSxwPU1hdGgubWF4KDMsdC5tcmN8fDApO3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQobCpsK2MqYyktcCwxLTMvcCl9KSx0KSwhMSE9PXQuaW5kZXgpe3ZhciBtPW9bdC5pbmRleF0sZz1tLmxvbmxhdCx2PVtpLm1vZEhhbGYoZ1swXSwzNjApK3AsZ1sxXV0seT11LmMycCh2KSx4PWYuYzJwKHYpLGI9bS5tcmN8fDE7dC54MD15LWIsdC54MT15K2IsdC55MD14LWIsdC55MT14K2I7dmFyIF89e307X1tjLnN1YnBsb3RdPXtfc3VicGxvdDpofTt2YXIgdz1jLl9tb2R1bGUuZm9ybWF0TGFiZWxzKG0sYyxfKTtyZXR1cm4gdC5sb25MYWJlbD13LmxvbkxhYmVsLHQubGF0TGFiZWw9dy5sYXRMYWJlbCx0LmNvbG9yPWEoYyxtKSx0LmV4dHJhVGV4dD1sKGMsbSxvWzBdLnQubGFiZWxzKSx0LmhvdmVydGVtcGxhdGU9Yy5ob3ZlcnRlbXBsYXRlLFt0XX19LGdldEV4dHJhVGV4dDpsfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NzksIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzYsIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjoxMjAxfV0sMTI2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi4vc2NhdHRlcmdlby9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIikuaG92ZXJQb2ludHMsZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpLHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlKXtlJiZlWzBdLnRyYWNlLl9nbFRyYWNlLnVwZGF0ZShlKX0sbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJtYXBib3giLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL21hcGJveCIpLGNhdGVnb3JpZXM6WyJtYXBib3giLCJnbCIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvbWFwYm94Ijo4ODQsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMjA5LCIuLi9zY2F0dGVyZ2VvL2NhbGMiOjEyMzQsIi4vYXR0cmlidXRlcyI6MTI1NiwiLi9kZWZhdWx0cyI6MTI1OCwiLi9ldmVudF9kYXRhIjoxMjU5LCIuL2Zvcm1hdF9sYWJlbHMiOjEyNjAsIi4vaG92ZXIiOjEyNjEsIi4vcGxvdCI6MTI2MywiLi9zZWxlY3QiOjEyNjR9XSwxMjYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29udmVydCIpLGk9dCgiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnN0YW50cyIpLnRyYWNlTGF5ZXJQcmVmaXgsYT1bImZpbGwiLCJsaW5lIiwiY2lyY2xlIiwic3ltYm9sIl07ZnVuY3Rpb24gbyh0LGUpe3RoaXMudHlwZT0ic2NhdHRlcm1hcGJveCIsdGhpcy5zdWJwbG90PXQsdGhpcy51aWQ9ZSx0aGlzLnNvdXJjZUlkcz17ZmlsbDoic291cmNlLSIrZSsiLWZpbGwiLGxpbmU6InNvdXJjZS0iK2UrIi1saW5lIixjaXJjbGU6InNvdXJjZS0iK2UrIi1jaXJjbGUiLHN5bWJvbDoic291cmNlLSIrZSsiLXN5bWJvbCJ9LHRoaXMubGF5ZXJJZHM9e2ZpbGw6aStlKyItZmlsbCIsbGluZTppK2UrIi1saW5lIixjaXJjbGU6aStlKyItY2lyY2xlIixzeW1ib2w6aStlKyItc3ltYm9sIn0sdGhpcy5iZWxvdz1udWxsfXZhciBzPW8ucHJvdG90eXBlO3MuYWRkU291cmNlPWZ1bmN0aW9uKHQsZSl7dGhpcy5zdWJwbG90Lm1hcC5hZGRTb3VyY2UodGhpcy5zb3VyY2VJZHNbdF0se3R5cGU6Imdlb2pzb24iLGRhdGE6ZS5nZW9qc29ufSl9LHMuc2V0U291cmNlRGF0YT1mdW5jdGlvbih0LGUpe3RoaXMuc3VicGxvdC5tYXAuZ2V0U291cmNlKHRoaXMuc291cmNlSWRzW3RdKS5zZXREYXRhKGUuZ2VvanNvbil9LHMuYWRkTGF5ZXI9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc3VicGxvdC5hZGRMYXllcih7dHlwZTp0LGlkOnRoaXMubGF5ZXJJZHNbdF0sc291cmNlOnRoaXMuc291cmNlSWRzW3RdLGxheW91dDplLmxheW91dCxwYWludDplLnBhaW50fSxyKX0scy51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscixpLG89dGhpcy5zdWJwbG90LHM9by5tYXAsbD1uKG8uZ2QsdCksYz1vLmJlbG93TG9va3VwWyJ0cmFjZS0iK3RoaXMudWlkXTtpZihjIT09dGhpcy5iZWxvdyl7Zm9yKGU9YS5sZW5ndGgtMTtlPj0wO2UtLSlyPWFbZV0scy5yZW1vdmVMYXllcih0aGlzLmxheWVySWRzW3JdKTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKWk9bFtyPWFbZV1dLHRoaXMuYWRkTGF5ZXIocixpLGMpO3RoaXMuYmVsb3c9Y31mb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKWk9bFtyPWFbZV1dLG8uc2V0T3B0aW9ucyh0aGlzLmxheWVySWRzW3JdLCJzZXRMYXlvdXRQcm9wZXJ0eSIsaS5sYXlvdXQpLCJ2aXNpYmxlIj09PWkubGF5b3V0LnZpc2liaWxpdHkmJih0aGlzLnNldFNvdXJjZURhdGEocixpKSxvLnNldE9wdGlvbnModGhpcy5sYXllcklkc1tyXSwic2V0UGFpbnRQcm9wZXJ0eSIsaS5wYWludCkpO3RbMF0udHJhY2UuX2dsVHJhY2U9dGhpc30scy5kaXNwb3NlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3VicGxvdC5tYXAsZT1hLmxlbmd0aC0xO2U+PTA7ZS0tKXt2YXIgcj1hW2VdO3QucmVtb3ZlTGF5ZXIodGhpcy5sYXllcklkc1tyXSksdC5yZW1vdmVTb3VyY2UodGhpcy5zb3VyY2VJZHNbcl0pfX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWVbMF0udHJhY2UsaT1uZXcgbyh0LHIudWlkKSxzPW4odC5nZCxlKSxsPWkuYmVsb3c9dC5iZWxvd0xvb2t1cFsidHJhY2UtIityLnVpZF0sYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgdT1hW2NdLGY9c1t1XTtpLmFkZFNvdXJjZSh1LGYpLGkuYWRkTGF5ZXIodSxmLGwpfXJldHVybiBlWzBdLnRyYWNlLl9nbFRyYWNlPWksaX19LHsiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnN0YW50cyI6ODgyLCIuL2NvbnZlcnQiOjEyNTd9XSwxMjY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixvPXQuY2Qscz10LnhheGlzLGw9dC55YXhpcyxjPVtdLHU9b1swXS50cmFjZTtpZighaS5oYXNNYXJrZXJzKHUpKXJldHVybltdO2lmKCExPT09ZSlmb3Iocj0wO3I8by5sZW5ndGg7cisrKW9bcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxvLmxlbmd0aDtyKyspe3ZhciBmPW9bcl0saD1mLmxvbmxhdDtpZihoWzBdIT09YSl7dmFyIHA9W24ubW9kSGFsZihoWzBdLDM2MCksaFsxXV0sZD1bcy5jMnAocCksbC5jMnAocCldO2UuY29udGFpbnMoZCxudWxsLHIsdCk/KGMucHVzaCh7cG9pbnROdW1iZXI6cixsb246aFswXSxsYXQ6aFsxXX0pLGYuc2VsZWN0ZWQ9MSk6Zi5zZWxlY3RlZD0wfX1yZXR1cm4gY319LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3NiwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTIxNn1dLDEyNjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD1vLmxpbmU7ZS5leHBvcnRzPXttb2RlOm8ubW9kZSxyOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHRoZXRhOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHIwOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGRyOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHRoZXRhMDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxkdGhldGE6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSx0aGV0YXVuaXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJhZGlhbnMiLCJkZWdyZWVzIiwiZ3JhZGlhbnMiXSxkZmx0OiJkZWdyZWVzIixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHRleHQ6by50ZXh0LHRleHR0ZW1wbGF0ZTppKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOlsiciIsInRoZXRhIiwidGV4dCJdfSksaG92ZXJ0ZXh0Om8uaG92ZXJ0ZXh0LGxpbmU6e2NvbG9yOmwuY29sb3Isd2lkdGg6bC53aWR0aCxkYXNoOmwuZGFzaCxzaGFwZTphKHt9LGwuc2hhcGUse3ZhbHVlczpbImxpbmVhciIsInNwbGluZSJdfSksc21vb3RoaW5nOmwuc21vb3RoaW5nLGVkaXRUeXBlOiJjYWxjIn0sY29ubmVjdGdhcHM6by5jb25uZWN0Z2FwcyxtYXJrZXI6by5tYXJrZXIsY2xpcG9uYXhpczphKHt9LG8uY2xpcG9uYXhpcyx7ZGZsdDohMX0pLHRleHRwb3NpdGlvbjpvLnRleHRwb3NpdGlvbix0ZXh0Zm9udDpvLnRleHRmb250LGZpbGw6YSh7fSxvLmZpbGwse3ZhbHVlczpbIm5vbmUiLCJ0b3NlbGYiLCJ0b25leHQiXSxkZmx0OiJub25lIn0pLGZpbGxjb2xvcjpvLmZpbGxjb2xvcixob3ZlcmluZm86YSh7fSxzLmhvdmVyaW5mbyx7ZmxhZ3M6WyJyIiwidGhldGEiLCJ0ZXh0IiwibmFtZSJdfSksaG92ZXJvbjpvLmhvdmVyb24saG92ZXJ0ZW1wbGF0ZTpuKCksc2VsZWN0ZWQ6by5zZWxlY3RlZCx1bnNlbGVjdGVkOm8udW5zZWxlY3RlZH19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OSwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTkxfV0sMTI2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLHM9dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxsPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxjPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LHU9ZS5zdWJwbG90LGY9clt1XS5yYWRpYWxheGlzLGg9clt1XS5hbmd1bGFyYXhpcyxwPWYubWFrZUNhbGNkYXRhKGUsInIiKSxkPWgubWFrZUNhbGNkYXRhKGUsInRoZXRhIiksbT1lLl9sZW5ndGgsZz1uZXcgQXJyYXkobSksdj0wO3Y8bTt2Kyspe3ZhciB5PXBbdl0seD1kW3ZdLGI9Z1t2XT17fTtuKHkpJiZuKHgpPyhiLnI9eSxiLnRoZXRhPXgpOmIucj1pfXZhciBfPWMoZSxtKTtyZXR1cm4gZS5fZXh0cmVtZXMueD1hLmZpbmRFeHRyZW1lcyhmLHAse3BwYWQ6X30pLG8odCxlKSxzKGcsZSksbChnLGUpLGd9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiOjExOTAsIi4uL3NjYXR0ZXIvY2FsYyI6MTE5MiwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTE5MywiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjExOTQsImZhc3QtaXNudW1lcmljIjoyNDJ9XSwxMjY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxvPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLlBUU19MSU5FU09OTFksZj10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBoKHQsZSxyLG4pe3ZhciBpLGE9bigiciIpLG89bigidGhldGEiKTtpZihhKW8/aT1NYXRoLm1pbihhLmxlbmd0aCxvLmxlbmd0aCk6KGk9YS5sZW5ndGgsbigidGhldGEwIiksbigiZHRoZXRhIikpO2Vsc2V7aWYoIW8pcmV0dXJuIDA7aT1lLnRoZXRhLmxlbmd0aCxuKCJyMCIpLG4oImRyIil9cmV0dXJuIGUuX2xlbmd0aD1pLGl9ZS5leHBvcnRzPXtoYW5kbGVSVGhldGFEZWZhdWx0czpoLHN1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLHApe2Z1bmN0aW9uIGQocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGYscixpKX12YXIgbT1oKHQsZSxwLGQpO2lmKG0pe2QoInRoZXRhdW5pdCIpLGQoIm1vZGUiLG08dT8ibGluZXMrbWFya2VycyI6ImxpbmVzIiksZCgidGV4dCIpLGQoImhvdmVydGV4dCIpLCJmaWxscyIhPT1lLmhvdmVyb24mJmQoImhvdmVydGVtcGxhdGUiKSxpLmhhc0xpbmVzKGUpJiYobyh0LGUscixwLGQpLHModCxlLGQpLGQoImNvbm5lY3RnYXBzIikpLGkuaGFzTWFya2VycyhlKSYmYSh0LGUscixwLGQse2dyYWRpZW50OiEwfSksaS5oYXNUZXh0KGUpJiYoZCgidGV4dHRlbXBsYXRlIiksbCh0LGUscCxkKSk7dmFyIGc9W107KGkuaGFzTWFya2VycyhlKXx8aS5oYXNUZXh0KGUpKSYmKGQoImNsaXBvbmF4aXMiKSxkKCJtYXJrZXIubWF4ZGlzcGxheWVkIiksZy5wdXNoKCJwb2ludHMiKSksZCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmKGModCxlLHIsZCksaS5oYXNMaW5lcyhlKXx8cyh0LGUsZCkpLCJ0b25leHQiIT09ZS5maWxsJiYidG9zZWxmIiE9PWUuZmlsbHx8Zy5wdXNoKCJmaWxscyIpLGQoImhvdmVyb24iLGcuam9pbigiKyIpfHwicG9pbnRzIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsZCl9ZWxzZSBlLnZpc2libGU9ITF9fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vc2NhdHRlci9jb25zdGFudHMiOjExOTUsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMTk5LCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjEyMDQsIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyI6MTIwNiwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEyMTAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTYsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTIxNywiLi9hdHRyaWJ1dGVzIjoxMjY1fV0sMTI2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvLHM9e30sbD1yW2Uuc3VicGxvdF0uX3N1YnBsb3Q7bD8oYT1sLnJhZGlhbEF4aXMsbz1sLmFuZ3VsYXJBeGlzKTooYT0obD1yW2Uuc3VicGxvdF0pLnJhZGlhbGF4aXMsbz1sLmFuZ3VsYXJheGlzKTt2YXIgYz1hLmMybCh0LnIpO3MuckxhYmVsPWkudGlja1RleHQoYSxjLCEwKS50ZXh0O3ZhciB1PSJkZWdyZWVzIj09PW8udGhldGF1bml0P24ucmFkMmRlZyh0LnRoZXRhKTp0LnRoZXRhO3JldHVybiBzLnRoZXRhTGFiZWw9aS50aWNrVGV4dChvLHUsITApLnRleHQsc319LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4Mjd9XSwxMjY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvaG92ZXIiKTtmdW5jdGlvbiBpKHQsZSxyLG4pe3ZhciBpPXIucmFkaWFsQXhpcyxhPXIuYW5ndWxhckF4aXM7aS5faG92ZXJ0aXRsZT0iciIsYS5faG92ZXJ0aXRsZT0iXHUwM2I4Ijt2YXIgbz17fTtvW2Uuc3VicGxvdF09e19zdWJwbG90OnJ9O3ZhciBzPWUuX21vZHVsZS5mb3JtYXRMYWJlbHModCxlLG8pO24uckxhYmVsPXMuckxhYmVsLG4udGhldGFMYWJlbD1zLnRoZXRhTGFiZWw7dmFyIGw9dC5oaXx8ZS5ob3ZlcmluZm8sYz1bXTtmdW5jdGlvbiB1KHQsZSl7Yy5wdXNoKHQuX2hvdmVydGl0bGUrIjogIitlKX1pZighZS5ob3ZlcnRlbXBsYXRlKXt2YXIgZj1sLnNwbGl0KCIrIik7LTEhPT1mLmluZGV4T2YoImFsbCIpJiYoZj1bInIiLCJ0aGV0YSIsInRleHQiXSksLTEhPT1mLmluZGV4T2YoInIiKSYmdShpLG4uckxhYmVsKSwtMSE9PWYuaW5kZXhPZigidGhldGEiKSYmdShhLG4udGhldGFMYWJlbCksLTEhPT1mLmluZGV4T2YoInRleHQiKSYmbi50ZXh0JiYoYy5wdXNoKG4udGV4dCksZGVsZXRlIG4udGV4dCksbi5leHRyYVRleHQ9Yy5qb2luKCI8YnI+Iil9fWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bih0LGUscixhKTtpZihvJiYhMSE9PW9bMF0uaW5kZXgpe3ZhciBzPW9bMF07aWYodm9pZCAwPT09cy5pbmRleClyZXR1cm4gbzt2YXIgbD10LnN1YnBsb3QsYz1zLmNkW3MuaW5kZXhdLHU9cy50cmFjZTtpZihsLmlzUHRJbnNpZGUoYykpcmV0dXJuIHMueExhYmVsVmFsPXZvaWQgMCxzLnlMYWJlbFZhbD12b2lkIDAsaShjLHUsbCxzKSxzLmhvdmVydGVtcGxhdGU9dS5ob3ZlcnRlbXBsYXRlLG99fSxtYWtlSG92ZXJQb2ludFRleHQ6aX19LHsiLi4vc2NhdHRlci9ob3ZlciI6MTIwMn1dLDEyNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlcnBvbGFyIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9wb2xhciIpLGNhdGVnb3JpZXM6WyJwb2xhciIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxzZWxlY3RQb2ludHM6dCgiLi4vc2NhdHRlci9zZWxlY3QiKSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9wb2xhciI6ODkzLCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTIwOSwiLi4vc2NhdHRlci9zZWxlY3QiOjEyMTMsIi4uL3NjYXR0ZXIvc3R5bGUiOjEyMTUsIi4vYXR0cmlidXRlcyI6MTI2NSwiLi9jYWxjIjoxMjY2LCIuL2RlZmF1bHRzIjoxMjY3LCIuL2Zvcm1hdF9sYWJlbHMiOjEyNjgsIi4vaG92ZXIiOjEyNjksIi4vcGxvdCI6MTI3MX1dLDEyNzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9wbG90IiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBhPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoImcuc2NhdHRlcmxheWVyIiksbz17eGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHBsb3Q6ZS5mcmFtZXdvcmssbGF5ZXJDbGlwSWQ6ZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkcy5mb3JUcmFjZXM6bnVsbH0scz1lLnJhZGlhbEF4aXMsbD1lLmFuZ3VsYXJBeGlzLGM9MDtjPHIubGVuZ3RoO2MrKylmb3IodmFyIHU9cltjXSxmPTA7Zjx1Lmxlbmd0aDtmKyspe3ZhciBoPXVbZl0scD1oLnI7aWYocD09PWkpaC54PWgueT1pO2Vsc2V7dmFyIGQ9cy5jMmcocCksbT1sLmMyZyhoLnRoZXRhKTtoLng9ZCpNYXRoLmNvcyhtKSxoLnk9ZCpNYXRoLnNpbihtKX19bih0LG8scixhKX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi9zY2F0dGVyL3Bsb3QiOjEyMTJ9XSwxMjcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIiksaT10KCIuLi9zY2F0dGVyZ2wvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzO2UuZXhwb3J0cz17bW9kZTpuLm1vZGUscjpuLnIsdGhldGE6bi50aGV0YSxyMDpuLnIwLGRyOm4uZHIsdGhldGEwOm4udGhldGEwLGR0aGV0YTpuLmR0aGV0YSx0aGV0YXVuaXQ6bi50aGV0YXVuaXQsdGV4dDpuLnRleHQsdGV4dHRlbXBsYXRlOmEoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJyIiwidGhldGEiLCJ0ZXh0Il19KSxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsbGluZTppLmxpbmUsY29ubmVjdGdhcHM6aS5jb25uZWN0Z2FwcyxtYXJrZXI6aS5tYXJrZXIsZmlsbDppLmZpbGwsZmlsbGNvbG9yOmkuZmlsbGNvbG9yLHRleHRwb3NpdGlvbjppLnRleHRwb3NpdGlvbix0ZXh0Zm9udDppLnRleHRmb250LGhvdmVyaW5mbzpuLmhvdmVyaW5mbyxzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkfX0seyIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzIjoxMjQzLCIuLi9zY2F0dGVycG9sYXIvYXR0cmlidXRlcyI6MTI2NX1dLDEyNzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxpPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplLGE9dCgiLi4vc2NhdHRlcmdsL2NvbnZlcnQiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscz10KCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIikuVE9PX01BTllfUE9JTlRTO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsbD1lLnN1YnBsb3QsYz1yW2xdLnJhZGlhbGF4aXMsdT1yW2xdLmFuZ3VsYXJheGlzLGY9ZS5fcj1jLm1ha2VDYWxjZGF0YShlLCJyIiksaD1lLl90aGV0YT11Lm1ha2VDYWxjZGF0YShlLCJ0aGV0YSIpLHA9ZS5fbGVuZ3RoLGQ9e307cDxmLmxlbmd0aCYmKGY9Zi5zbGljZSgwLHApKSxwPGgubGVuZ3RoJiYoaD1oLnNsaWNlKDAscCkpLGQucj1mLGQudGhldGE9aCxuKHQsZSk7dmFyIG0sZz1kLm9wdHM9YS5zdHlsZSh0LGUpO3JldHVybiBwPHM/bT1pKGUscCk6Zy5tYXJrZXImJihtPTIqKGcubWFya2VyLnNpemVBdmd8fE1hdGgubWF4KGcubWFya2VyLnNpemUsMykpKSxlLl9leHRyZW1lcy54PW8uZmluZEV4dHJlbWVzKGMsZix7cHBhZDptfSksW3t4OiExLHk6ITEsdDpkLHRyYWNlOmV9XX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vc2NhdHRlci9jYWxjIjoxMTkyLCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTE5NCwiLi4vc2NhdHRlcmdsL2NvbnN0YW50cyI6MTI0NSwiLi4vc2NhdHRlcmdsL2NvbnZlcnQiOjEyNDZ9XSwxMjc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vc2NhdHRlcnBvbGFyL2RlZmF1bHRzIikuaGFuZGxlUlRoZXRhRGVmYXVsdHMsbz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLlBUU19MSU5FU09OTFksZj10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaCl7ZnVuY3Rpb24gcChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsZixyLGkpfXZhciBkPWEodCxlLGgscCk7ZD8ocCgidGhldGF1bml0IikscCgibW9kZSIsZDx1PyJsaW5lcyttYXJrZXJzIjoibGluZXMiKSxwKCJ0ZXh0IikscCgiaG92ZXJ0ZXh0IiksImZpbGxzIiE9PWUuaG92ZXJvbiYmcCgiaG92ZXJ0ZW1wbGF0ZSIpLGkuaGFzTGluZXMoZSkmJihzKHQsZSxyLGgscCkscCgiY29ubmVjdGdhcHMiKSksaS5oYXNNYXJrZXJzKGUpJiZvKHQsZSxyLGgscCksaS5oYXNUZXh0KGUpJiYocCgidGV4dHRlbXBsYXRlIiksbCh0LGUsaCxwKSkscCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmYyh0LGUscixwKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxwKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vc2NhdHRlci9jb25zdGFudHMiOjExOTUsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMTk5LCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjEyMDQsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMjEwLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMjE2LCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjEyMTcsIi4uL3NjYXR0ZXJwb2xhci9kZWZhdWx0cyI6MTI2NywiLi9hdHRyaWJ1dGVzIjoxMjcyfV0sMTI3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVycG9sYXIvZm9ybWF0X2xhYmVscyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9dC5pO3JldHVybiJyImluIHR8fCh0LnI9ZS5fcltpXSksInRoZXRhImluIHR8fCh0LnRoZXRhPWUuX3RoZXRhW2ldKSxuKHQsZSxyKX19LHsiLi4vc2NhdHRlcnBvbGFyL2Zvcm1hdF9sYWJlbHMiOjEyNjh9XSwxMjc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXJnbC9ob3ZlciIpLGk9dCgiLi4vc2NhdHRlcnBvbGFyL2hvdmVyIikubWFrZUhvdmVyUG9pbnRUZXh0O2UuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89dC5jZFswXS50LHM9by5yLGw9by50aGV0YSxjPW4uaG92ZXJQb2ludHModCxlLHIsYSk7aWYoYyYmITEhPT1jWzBdLmluZGV4KXt2YXIgdT1jWzBdO2lmKHZvaWQgMD09PXUuaW5kZXgpcmV0dXJuIGM7dmFyIGY9dC5zdWJwbG90LGg9dS5jZFt1LmluZGV4XSxwPXUudHJhY2U7aWYoaC5yPXNbdS5pbmRleF0saC50aGV0YT1sW3UuaW5kZXhdLGYuaXNQdEluc2lkZShoKSlyZXR1cm4gdS54TGFiZWxWYWw9dm9pZCAwLHUueUxhYmVsVmFsPXZvaWQgMCxpKGgscCxmLHUpLGN9fX19LHsiLi4vc2NhdHRlcmdsL2hvdmVyIjoxMjUxLCIuLi9zY2F0dGVycG9sYXIvaG92ZXIiOjEyNjl9XSwxMjc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJwb2xhcmdsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9wb2xhciIpLGNhdGVnb3JpZXM6WyJnbCIsInJlZ2wiLCJwb2xhciIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxzZWxlY3RQb2ludHM6dCgiLi4vc2NhdHRlcmdsL3NlbGVjdCIpLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL3BvbGFyIjo4OTMsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMjA5LCIuLi9zY2F0dGVyZ2wvc2VsZWN0IjoxMjU1LCIuL2F0dHJpYnV0ZXMiOjEyNzIsIi4vY2FsYyI6MTI3MywiLi9kZWZhdWx0cyI6MTI3NCwiLi9mb3JtYXRfbGFiZWxzIjoxMjc1LCIuL2hvdmVyIjoxMjc2LCIuL3Bsb3QiOjEyNzh9XSwxMjc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvcG9pbnQtY2x1c3RlciIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uL3NjYXR0ZXJnbC9wbG90Iiksbz10KCIuLi9zY2F0dGVyZ2wvc2NlbmVfdXBkYXRlIikscz10KCIuLi9zY2F0dGVyZ2wvY29udmVydCIpLGw9dCgiLi4vLi4vbGliIiksYz10KCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIikuVE9PX01BTllfUE9JTlRTO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoci5sZW5ndGgpe3ZhciB1PWUucmFkaWFsQXhpcyxmPWUuYW5ndWxhckF4aXMsaD1vKHQsZSk7cmV0dXJuIHIuZm9yRWFjaCgoZnVuY3Rpb24ocil7aWYociYmclswXSYmclswXS50cmFjZSl7dmFyIGEsbz1yWzBdLHA9by50cmFjZSxkPW8udCxtPXAuX2xlbmd0aCxnPWQucix2PWQudGhldGEseT1kLm9wdHMseD1nLnNsaWNlKCksYj12LnNsaWNlKCk7Zm9yKGE9MDthPGcubGVuZ3RoO2ErKyllLmlzUHRJbnNpZGUoe3I6Z1thXSx0aGV0YTp2W2FdfSl8fCh4W2FdPU5hTixiW2FdPU5hTik7dmFyIF89bmV3IEFycmF5KDIqbSksdz1BcnJheShtKSxUPUFycmF5KG0pO2ZvcihhPTA7YTxtO2ErKyl7dmFyIGssQSxNPXhbYV07aWYoaShNKSl7dmFyIFM9dS5jMmcoTSksRT1mLmMyZyhiW2FdLHAudGhldGF1bml0KTtrPVMqTWF0aC5jb3MoRSksQT1TKk1hdGguc2luKEUpfWVsc2Ugaz1BPU5hTjt3W2FdPV9bMiphXT1rLFRbYV09X1syKmErMV09QX1kLnRyZWU9bihfKSx5Lm1hcmtlciYmbT49YyYmKHkubWFya2VyLmNsdXN0ZXI9ZC50cmVlKSx5Lm1hcmtlciYmKHkubWFya2VyU2VsLnBvc2l0aW9ucz15Lm1hcmtlclVuc2VsLnBvc2l0aW9ucz15Lm1hcmtlci5wb3NpdGlvbnM9XykseS5saW5lJiZfLmxlbmd0aD4xJiZsLmV4dGVuZEZsYXQoeS5saW5lLHMubGluZVBvc2l0aW9ucyh0LHAsXykpLHkudGV4dCYmKGwuZXh0ZW5kRmxhdCh5LnRleHQse3Bvc2l0aW9uczpffSxzLnRleHRQb3NpdGlvbih0LHAseS50ZXh0LHkubWFya2VyKSksbC5leHRlbmRGbGF0KHkudGV4dFNlbCx7cG9zaXRpb25zOl99LHMudGV4dFBvc2l0aW9uKHQscCx5LnRleHQseS5tYXJrZXJTZWwpKSxsLmV4dGVuZEZsYXQoeS50ZXh0VW5zZWwse3Bvc2l0aW9uczpffSxzLnRleHRQb3NpdGlvbih0LHAseS50ZXh0LHkubWFya2VyVW5zZWwpKSkseS5maWxsJiYhaC5maWxsMmQmJihoLmZpbGwyZD0hMCkseS5tYXJrZXImJiFoLnNjYXR0ZXIyZCYmKGguc2NhdHRlcjJkPSEwKSx5LmxpbmUmJiFoLmxpbmUyZCYmKGgubGluZTJkPSEwKSx5LnRleHQmJiFoLmdsVGV4dCYmKGguZ2xUZXh0PSEwKSxoLmxpbmVPcHRpb25zLnB1c2goeS5saW5lKSxoLmZpbGxPcHRpb25zLnB1c2goeS5maWxsKSxoLm1hcmtlck9wdGlvbnMucHVzaCh5Lm1hcmtlciksaC5tYXJrZXJTZWxlY3RlZE9wdGlvbnMucHVzaCh5Lm1hcmtlclNlbCksaC5tYXJrZXJVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKHkubWFya2VyVW5zZWwpLGgudGV4dE9wdGlvbnMucHVzaCh5LnRleHQpLGgudGV4dFNlbGVjdGVkT3B0aW9ucy5wdXNoKHkudGV4dFNlbCksaC50ZXh0VW5zZWxlY3RlZE9wdGlvbnMucHVzaCh5LnRleHRVbnNlbCksaC5zZWxlY3RCYXRjaC5wdXNoKFtdKSxoLnVuc2VsZWN0QmF0Y2gucHVzaChbXSksZC54PXcsZC55PVQsZC5yYXd4PXcsZC5yYXd5PVQsZC5yPWcsZC50aGV0YT12LGQucG9zaXRpb25zPV8sZC5fc2NlbmU9aCxkLmluZGV4PWguY291bnQsaC5jb3VudCsrfX0pKSxhKHQsZSxyKX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIjoxMjQ1LCIuLi9zY2F0dGVyZ2wvY29udmVydCI6MTI0NiwiLi4vc2NhdHRlcmdsL3Bsb3QiOjEyNTMsIi4uL3NjYXR0ZXJnbC9zY2VuZV91cGRhdGUiOjEyNTQsIkBwbG90bHkvcG9pbnQtY2x1c3RlciI6NTksImZhc3QtaXNudW1lcmljIjoyNDJ9XSwxMjc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsYT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsYz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCx1PWEubWFya2VyLGY9YS5saW5lLGg9dS5saW5lO2UuZXhwb3J0cz17YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sc3VtOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZToiY2FsYyJ9LG1vZGU6Yyh7fSxhLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpjKHt9LGEudGV4dCx7fSksdGV4dHRlbXBsYXRlOmkoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJhIiwiYiIsImMiLCJ0ZXh0Il19KSxob3ZlcnRleHQ6Yyh7fSxhLmhvdmVydGV4dCx7fSksbGluZTp7Y29sb3I6Zi5jb2xvcix3aWR0aDpmLndpZHRoLGRhc2g6bCxzaGFwZTpjKHt9LGYuc2hhcGUse3ZhbHVlczpbImxpbmVhciIsInNwbGluZSJdfSksc21vb3RoaW5nOmYuc21vb3RoaW5nLGVkaXRUeXBlOiJjYWxjIn0sY29ubmVjdGdhcHM6YS5jb25uZWN0Z2FwcyxjbGlwb25heGlzOmEuY2xpcG9uYXhpcyxmaWxsOmMoe30sYS5maWxsLHt2YWx1ZXM6WyJub25lIiwidG9zZWxmIiwidG9uZXh0Il0sZGZsdDoibm9uZSJ9KSxmaWxsY29sb3I6YS5maWxsY29sb3IsbWFya2VyOmMoe3N5bWJvbDp1LnN5bWJvbCxvcGFjaXR5OnUub3BhY2l0eSxtYXhkaXNwbGF5ZWQ6dS5tYXhkaXNwbGF5ZWQsc2l6ZTp1LnNpemUsc2l6ZXJlZjp1LnNpemVyZWYsc2l6ZW1pbjp1LnNpemVtaW4sc2l6ZW1vZGU6dS5zaXplbW9kZSxsaW5lOmMoe3dpZHRoOmgud2lkdGgsZWRpdFR5cGU6ImNhbGMifSxzKCJtYXJrZXIubGluZSIpKSxncmFkaWVudDp1LmdyYWRpZW50LGVkaXRUeXBlOiJjYWxjIn0scygibWFya2VyIikpLHRleHRmb250OmEudGV4dGZvbnQsdGV4dHBvc2l0aW9uOmEudGV4dHBvc2l0aW9uLHNlbGVjdGVkOmEuc2VsZWN0ZWQsdW5zZWxlY3RlZDphLnVuc2VsZWN0ZWQsaG92ZXJpbmZvOmMoe30sby5ob3ZlcmluZm8se2ZsYWdzOlsiYSIsImIiLCJjIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVyb246YS5ob3Zlcm9uLGhvdmVydGVtcGxhdGU6bigpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NjYwLCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODk5LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExOTF9XSwxMjgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLGE9dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxvPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxzPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplLGw9WyJhIiwiYiIsImMiXSxjPXthOlsiYiIsImMiXSxiOlsiYSIsImMiXSxjOlsiYSIsImIiXX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxmLGgscCxkLG09dC5fZnVsbExheW91dFtlLnN1YnBsb3RdLnN1bSxnPWUuc3VtfHxtLHY9e2E6ZS5hLGI6ZS5iLGM6ZS5jfTtmb3Iocj0wO3I8bC5sZW5ndGg7cisrKWlmKCF2W2Y9bFtyXV0pe2ZvcihwPXZbY1tmXVswXV0sZD12W2NbZl1bMV1dLGg9bmV3IEFycmF5KHAubGVuZ3RoKSx1PTA7dTxwLmxlbmd0aDt1KyspaFt1XT1nLXBbdV0tZFt1XTt2W2ZdPWh9dmFyIHkseCxiLF8sdyxULGs9ZS5fbGVuZ3RoLEE9bmV3IEFycmF5KGspO2ZvcihyPTA7cjxrO3IrKyl5PXYuYVtyXSx4PXYuYltyXSxiPXYuY1tyXSxuKHkpJiZuKHgpJiZuKGIpPygxIT09KF89bS8oKHk9K3kpKyh4PSt4KSsoYj0rYikpKSYmKHkqPV8seCo9XyxiKj1fKSxUPXksdz1iLXgsQVtyXT17eDp3LHk6VCxhOnksYjp4LGM6Yn0pOkFbcl09e3g6ITEseTohMX07cmV0dXJuIHMoZSxrKSxpKHQsZSksYShBLGUpLG8oQSxlKSxBfX0seyIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTE5MCwiLi4vc2NhdHRlci9jYWxjIjoxMTkyLCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjoxMTkzLCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTE5NCwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDEyODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLGE9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLG89dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIiksYz10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSx1PXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksZj10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaCl7ZnVuY3Rpb24gcChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsZixyLGkpfXZhciBkLG09cCgiYSIpLGc9cCgiYiIpLHY9cCgiYyIpO2lmKG0/KGQ9bS5sZW5ndGgsZz8oZD1NYXRoLm1pbihkLGcubGVuZ3RoKSx2JiYoZD1NYXRoLm1pbihkLHYubGVuZ3RoKSkpOmQ9dj9NYXRoLm1pbihkLHYubGVuZ3RoKTowKTpnJiZ2JiYoZD1NYXRoLm1pbihnLmxlbmd0aCx2Lmxlbmd0aCkpLGQpe2UuX2xlbmd0aD1kLHAoInN1bSIpLHAoInRleHQiKSxwKCJob3ZlcnRleHQiKSwiZmlsbHMiIT09ZS5ob3Zlcm9uJiZwKCJob3ZlcnRlbXBsYXRlIikscCgibW9kZSIsZDxpLlBUU19MSU5FU09OTFk/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyIpLGEuaGFzTGluZXMoZSkmJihzKHQsZSxyLGgscCksbCh0LGUscCkscCgiY29ubmVjdGdhcHMiKSksYS5oYXNNYXJrZXJzKGUpJiZvKHQsZSxyLGgscCx7Z3JhZGllbnQ6ITB9KSxhLmhhc1RleHQoZSkmJihwKCJ0ZXh0dGVtcGxhdGUiKSxjKHQsZSxoLHApKTt2YXIgeT1bXTsoYS5oYXNNYXJrZXJzKGUpfHxhLmhhc1RleHQoZSkpJiYocCgiY2xpcG9uYXhpcyIpLHAoIm1hcmtlci5tYXhkaXNwbGF5ZWQiKSx5LnB1c2goInBvaW50cyIpKSxwKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiYodSh0LGUscixwKSxhLmhhc0xpbmVzKGUpfHxsKHQsZSxwKSksInRvbmV4dCIhPT1lLmZpbGwmJiJ0b3NlbGYiIT09ZS5maWxsfHx5LnB1c2goImZpbGxzIikscCgiaG92ZXJvbiIseS5qb2luKCIrIil8fCJwb2ludHMiKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxwKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NzYsIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjoxMTk1LCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTE5OSwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMjA0LCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiOjEyMDYsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMjEwLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMjE2LCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjEyMTcsIi4vYXR0cmlidXRlcyI6MTI3OX1dLDEyODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYoZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksbltpXSl7dmFyIGE9bltpXTt0LmE9YS5hLHQuYj1hLmIsdC5jPWEuY31lbHNlIHQuYT1lLmEsdC5iPWUuYix0LmM9ZS5jO3JldHVybiB0fX0se31dLDEyODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXt9LGE9cltlLnN1YnBsb3RdLl9zdWJwbG90O3JldHVybiBpLmFMYWJlbD1uLnRpY2tUZXh0KGEuYWF4aXMsdC5hLCEwKS50ZXh0LGkuYkxhYmVsPW4udGlja1RleHQoYS5iYXhpcyx0LmIsITApLnRleHQsaS5jTGFiZWw9bi50aWNrVGV4dChhLmNheGlzLHQuYywhMCkudGV4dCxpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3fV0sMTI4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2hvdmVyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPW4odCxlLHIsaSk7aWYoYSYmITEhPT1hWzBdLmluZGV4KXt2YXIgbz1hWzBdO2lmKHZvaWQgMD09PW8uaW5kZXgpe3ZhciBzPTEtby55MC90LnlhLl9sZW5ndGgsbD10LnhhLl9sZW5ndGgsYz1sKnMvMix1PWwtYztyZXR1cm4gby54MD1NYXRoLm1heChNYXRoLm1pbihvLngwLHUpLGMpLG8ueDE9TWF0aC5tYXgoTWF0aC5taW4oby54MSx1KSxjKSxhfXZhciBmPW8uY2Rbby5pbmRleF0saD1vLnRyYWNlLHA9by5zdWJwbG90O28uYT1mLmEsby5iPWYuYixvLmM9Zi5jLG8ueExhYmVsVmFsPXZvaWQgMCxvLnlMYWJlbFZhbD12b2lkIDA7dmFyIGQ9e307ZFtoLnN1YnBsb3RdPXtfc3VicGxvdDpwfTt2YXIgbT1oLl9tb2R1bGUuZm9ybWF0TGFiZWxzKGYsaCxkKTtvLmFMYWJlbD1tLmFMYWJlbCxvLmJMYWJlbD1tLmJMYWJlbCxvLmNMYWJlbD1tLmNMYWJlbDt2YXIgZz1mLmhpfHxoLmhvdmVyaW5mbyx2PVtdO2lmKCFoLmhvdmVydGVtcGxhdGUpe3ZhciB5PWcuc3BsaXQoIisiKTstMSE9PXkuaW5kZXhPZigiYWxsIikmJih5PVsiYSIsImIiLCJjIl0pLC0xIT09eS5pbmRleE9mKCJhIikmJngocC5hYXhpcyxvLmFMYWJlbCksLTEhPT15LmluZGV4T2YoImIiKSYmeChwLmJheGlzLG8uYkxhYmVsKSwtMSE9PXkuaW5kZXhPZigiYyIpJiZ4KHAuY2F4aXMsby5jTGFiZWwpfXJldHVybiBvLmV4dHJhVGV4dD12LmpvaW4oIjxicj4iKSxvLmhvdmVydGVtcGxhdGU9aC5ob3ZlcnRlbXBsYXRlLGF9ZnVuY3Rpb24geCh0LGUpe3YucHVzaCh0Ll9ob3ZlcnRpdGxlKyI6ICIrZSl9fX0seyIuLi9zY2F0dGVyL2hvdmVyIjoxMjAyfV0sMTI4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL3NjYXR0ZXIvc2VsZWN0IiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVydGVybmFyeSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvdGVybmFyeSIpLGNhdGVnb3JpZXM6WyJ0ZXJuYXJ5Iiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy90ZXJuYXJ5Ijo5MDAsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMjA5LCIuLi9zY2F0dGVyL3NlbGVjdCI6MTIxMywiLi4vc2NhdHRlci9zdHlsZSI6MTIxNSwiLi9hdHRyaWJ1dGVzIjoxMjc5LCIuL2NhbGMiOjEyODAsIi4vZGVmYXVsdHMiOjEyODEsIi4vZXZlbnRfZGF0YSI6MTI4MiwiLi9mb3JtYXRfbGFiZWxzIjoxMjgzLCIuL2hvdmVyIjoxMjg0LCIuL3Bsb3QiOjEyODZ9XSwxMjg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvcGxvdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5wbG90Q29udGFpbmVyO2kuc2VsZWN0KCIuc2NhdHRlcmxheWVyIikuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7dmFyIGE9e3hheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyxwbG90OmksbGF5ZXJDbGlwSWQ6ZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkUmVsYXRpdmU6bnVsbH0sbz1lLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCJnLnNjYXR0ZXJsYXllciIpO24odCxhLHIsbyl9fSx7Ii4uL3NjYXR0ZXIvcGxvdCI6MTIxMn1dLDEyODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsbz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLHM9dCgiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKS5pZFJlZ2V4LGM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsZj1uLm1hcmtlcixoPWYubGluZSxwPXUoaSgibWFya2VyLmxpbmUiLHtlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHt3aWR0aDp1KHt9LGgud2lkdGgse2VkaXRUeXBlOiJjYWxjIn0pLGVkaXRUeXBlOiJjYWxjIn0pLGQ9dShpKCJtYXJrZXIiKSx7c3ltYm9sOmYuc3ltYm9sLHNpemU6dSh7fSxmLnNpemUse2VkaXRUeXBlOiJtYXJrZXJTaXplIn0pLHNpemVyZWY6Zi5zaXplcmVmLHNpemVtaW46Zi5zaXplbWluLHNpemVtb2RlOmYuc2l6ZW1vZGUsb3BhY2l0eTpmLm9wYWNpdHksY29sb3JiYXI6Zi5jb2xvcmJhcixsaW5lOnAsZWRpdFR5cGU6ImNhbGMifSk7ZnVuY3Rpb24gbSh0KXtyZXR1cm57dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxlZGl0VHlwZToiY2FsYyIsaXRlbXM6e3ZhbFR5cGU6InN1YnBsb3RpZCIscmVnZXg6bFt0XSxlZGl0VHlwZToicGxvdCJ9fX1kLmNvbG9yLmVkaXRUeXBlPWQuY21pbi5lZGl0VHlwZT1kLmNtYXguZWRpdFR5cGU9InN0eWxlIixlLmV4cG9ydHM9e2RpbWVuc2lvbnM6YygiZGltZW5zaW9uIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGxhYmVsOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGF4aXM6e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsImxvZyIsImRhdGUiLCJjYXRlZ29yeSJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sbWF0Y2hlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSksdGV4dDp1KHt9LHMudGV4dCx7fSksaG92ZXJ0ZXh0OnUoe30scy5ob3ZlcnRleHQse30pLGhvdmVydGVtcGxhdGU6bygpLHhob3ZlcmZvcm1hdDphKCJ4IikseWhvdmVyZm9ybWF0OmEoInkiKSxtYXJrZXI6ZCx4YXhlczptKCJ4IikseWF4ZXM6bSgieSIpLGRpYWdvbmFsOnt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxzaG93dXBwZXJoYWxmOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xvd2VyaGFsZjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHNlbGVjdGVkOnttYXJrZXI6cy5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6ImNhbGMifSx1bnNlbGVjdGVkOnttYXJrZXI6cy51bnNlbGVjdGVkLm1hcmtlcixlZGl0VHlwZToiY2FsYyJ9LG9wYWNpdHk6cy5vcGFjaXR5fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6ODM0LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE5MSwiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXMiOjEyNDN9XSwxMjg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJlZ2wtbGluZTJkIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCIpLG89dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikuZ2V0RnJvbUlkLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS5zaG91bGRTaG93WmVyb0xpbmU7ZnVuY3Rpb24gdSh0LGUscil7Zm9yKHZhciBuPXIubWF0cml4T3B0aW9ucy5kYXRhLmxlbmd0aCxpPWUuX3Zpc2libGVEaW1zLGE9ci52aWV3T3B0cy5yYW5nZXM9bmV3IEFycmF5KG4pLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXSxjPWFbb109bmV3IEFycmF5KDQpLHU9bCh0LGUuX2RpYWdbc11bMF0pO3UmJihjWzBdPXUucjJsKHUucmFuZ2VbMF0pLGNbMl09dS5yMmwodS5yYW5nZVsxXSkpO3ZhciBmPWwodCxlLl9kaWFnW3NdWzFdKTtmJiYoY1sxXT1mLnIybChmLnJhbmdlWzBdKSxjWzNdPWYucjJsKGYucmFuZ2VbMV0pKX1yLnNlbGVjdEJhdGNoLmxlbmd0aHx8ci51bnNlbGVjdEJhdGNoLmxlbmd0aD9yLm1hdHJpeC51cGRhdGUoe3JhbmdlczphfSx7cmFuZ2VzOmF9KTpyLm1hdHJpeC51cGRhdGUoe3JhbmdlczphfSl9ZnVuY3Rpb24gZih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fZ2xjYW52YXMuZGF0YSgpWzBdLnJlZ2wsaT1lLl9zcGxvbUdyaWQ7aXx8KGk9ZS5fc3Bsb21HcmlkPW4ocikpLGkudXBkYXRlKGZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvLG49dC5fZnVsbExheW91dCxpPW4uX3NpemUsYT1bMCwwLG4ud2lkdGgqcixuLmhlaWdodCpyXSxvPXt9O2Z1bmN0aW9uIHModCxlLG4saSxzLGwpe24qPXIsaSo9cixzKj1yLGwqPXI7dmFyIGM9ZVt0KyJjb2xvciJdLHU9ZVt0KyJ3aWR0aCJdLGY9U3RyaW5nKGMrdSk7ZiBpbiBvP29bZl0uZGF0YS5wdXNoKE5hTixOYU4sbixpLHMsbCk6b1tmXT17ZGF0YTpbbixpLHMsbF0sam9pbjoicmVjdCIsdGhpY2tuZXNzOnUqcixjb2xvcjpjLHZpZXdwb3J0OmEscmFuZ2U6YSxvdmVybGF5OiExfX1mb3IoZSBpbiBuLl9zcGxvbVN1YnBsb3RzKXt2YXIgbCx1LGY9bi5fcGxvdHNbZV0saD1mLnhheGlzLHA9Zi55YXhpcyxkPWguX2dyaWRWYWxzLG09cC5fZ3JpZFZhbHMsZz1oLl9vZmZzZXQsdj1oLl9sZW5ndGgseT1wLl9sZW5ndGgseD1pLmIrcC5kb21haW5bMF0qaS5oLGI9LXAuX20sXz0tYipwLnIybChwLnJhbmdlWzBdLHAuY2FsZW5kYXIpO2lmKGguc2hvd2dyaWQpZm9yKGU9MDtlPGQubGVuZ3RoO2UrKylsPWcraC5sMnAoZFtlXS54KSxzKCJncmlkIixoLGwseCxsLHgreSk7aWYocC5zaG93Z3JpZClmb3IoZT0wO2U8bS5sZW5ndGg7ZSsrKXU9eCtfK2IqbVtlXS54LHMoImdyaWQiLHAsZyx1LGcrdix1KTtjKHQsaCxwKSYmKGw9ZytoLmwycCgwKSxzKCJ6ZXJvbGluZSIsaCxsLHgsbCx4K3kpKSxjKHQscCxoKSYmcygiemVyb2xpbmUiLHAsZyx1PXgrXyswLGcrdix1KX12YXIgdz1bXTtmb3IoZSBpbiBvKXcucHVzaChvW2VdKTtyZXR1cm4gd30odCkpfWUuZXhwb3J0cz17bmFtZToic3Bsb20iLGF0dHI6cy5hdHRyLGF0dHJSZWdleDpzLmF0dHJSZWdleCxsYXlvdXRBdHRyaWJ1dGVzOnMubGF5b3V0QXR0cmlidXRlcyxzdXBwbHlMYXlvdXREZWZhdWx0czpzLnN1cHBseUxheW91dERlZmF1bHRzLGRyYXdGcmFtZXdvcms6cy5kcmF3RnJhbWV3b3JrLHBsb3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWkuZ2V0TW9kdWxlKCJzcGxvbSIpLG49byh0LmNhbGNkYXRhLHIpWzBdO2EodCxbIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiLCJPRVNfZWxlbWVudF9pbmRleF91aW50Il0pJiYoZS5faGFzT25seUxhcmdlU3Bsb21zJiZmKHQpLHIucGxvdCh0LHt9LG4pKX0sZHJhZzpmdW5jdGlvbih0KXt2YXIgZT10LmNhbGNkYXRhLHI9dC5fZnVsbExheW91dDtyLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJmYodCk7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl1bMF0udHJhY2UsYT1yLl9zcGxvbVNjZW5lc1tpLnVpZF07InNwbG9tIj09PWkudHlwZSYmYSYmYS5tYXRyaXgmJnUodCxpLGEpfX0sdXBkYXRlR3JpZDpmLGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9e307aWYobi5fc3Bsb21TY2VuZXMpe2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBvPXRbaV07InNwbG9tIj09PW8udHlwZSYmKGFbby51aWRdPTEpfWZvcihpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBsPXJbaV07aWYoIWFbbC51aWRdKXt2YXIgYz1uLl9zcGxvbVNjZW5lc1tsLnVpZF07YyYmYy5kZXN0cm95JiZjLmRlc3Ryb3koKSxuLl9zcGxvbVNjZW5lc1tsLnVpZF09bnVsbCxkZWxldGUgbi5fc3Bsb21TY2VuZXNbbC51aWRdfX19MD09PU9iamVjdC5rZXlzKG4uX3NwbG9tU2NlbmVzfHx7fSkubGVuZ3RoJiZkZWxldGUgbi5fc3Bsb21TY2VuZXMsbi5fc3Bsb21HcmlkJiYhZS5faGFzT25seUxhcmdlU3Bsb21zJiZuLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJihuLl9zcGxvbUdyaWQuZGVzdHJveSgpLG4uX3NwbG9tR3JpZD1udWxsLGRlbGV0ZSBuLl9zcGxvbUdyaWQpLHMuY2xlYW4odCxlLHIsbil9LHVwZGF0ZUZ4OnMudXBkYXRlRngsdG9TVkc6cy50b1NWR319LHsiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCI6Nzg5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MzEsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo4NjQsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsInJlZ2wtbGluZTJkIjo1MTN9XSwxMjg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksYT10KCIuLi9zY2F0dGVyL2NhbGMiKS5jYWxjTWFya2VyU2l6ZSxvPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNBeGlzRXhwYW5zaW9uLHM9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxsPXQoIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IikubWFya2VyU2VsZWN0aW9uLGM9dCgiLi4vc2NhdHRlcmdsL2NvbnZlcnQiKS5tYXJrZXJTdHlsZSx1PXQoIi4vc2NlbmVfdXBkYXRlIiksZj10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGg9dCgiLi4vc2NhdHRlcmdsL2NvbnN0YW50cyIpLlRPT19NQU5ZX1BPSU5UUztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixwLGQsbSxnLHYseT1lLmRpbWVuc2lvbnMseD1lLl9sZW5ndGgsYj17fSxfPWIuY2RhdGE9W10sdz1iLmRhdGE9W10sVD1lLl92aXNpYmxlRGltcz1bXTtmdW5jdGlvbiBrKHQscil7Zm9yKHZhciBpPXQubWFrZUNhbGNkYXRhKHt2OnIudmFsdWVzLHZjYWxlbmRhcjplLmNhbGVuZGFyfSwidiIpLGE9MDthPGkubGVuZ3RoO2ErKylpW2FdPWlbYV09PT1mP05hTjppW2FdO18ucHVzaChpKSx3LnB1c2goImxvZyI9PT10LnR5cGU/bi5zaW1wbGVNYXAoaSx0LmMybCk6aSl9Zm9yKHI9MDtyPHkubGVuZ3RoO3IrKylpZigoZD15W3JdKS52aXNpYmxlKXtpZihtPWkuZ2V0RnJvbUlkKHQsZS5fZGlhZ1tyXVswXSksZz1pLmdldEZyb21JZCh0LGUuX2RpYWdbcl1bMV0pLG0mJmcmJm0udHlwZSE9PWcudHlwZSl7bi5sb2coIlNraXBwaW5nIHNwbG9tIGRpbWVuc2lvbiAiK3IrIiB3aXRoIGNvbmZsaWN0aW5nIGF4aXMgdHlwZXMiKTtjb250aW51ZX1tPyhrKG0sZCksZyYmImNhdGVnb3J5Ij09PWcudHlwZSYmKGcuX2NhdGVnb3JpZXM9bS5fY2F0ZWdvcmllcy5zbGljZSgpKSk6ayhnLGQpLFQucHVzaChyKX1mb3Iocyh0LGUpLG4uZXh0ZW5kRmxhdChiLGMoZSkpLHY9Xy5sZW5ndGgqeD5oP2Iuc2l6ZUF2Z3x8TWF0aC5tYXgoYi5zaXplLDMpOmEoZSx4KSxwPTA7cDxULmxlbmd0aDtwKyspZD15W3I9VFtwXV0sbT1pLmdldEZyb21JZCh0LGUuX2RpYWdbcl1bMF0pfHx7fSxnPWkuZ2V0RnJvbUlkKHQsZS5fZGlhZ1tyXVsxXSl8fHt9LG8odCxlLG0sZyxfW3BdLF9bcF0sdik7dmFyIEE9dSh0LGUpO3JldHVybiBBLm1hdHJpeHx8KEEubWF0cml4PSEwKSxBLm1hdHJpeE9wdGlvbnM9YixBLnNlbGVjdGVkT3B0aW9ucz1sKGUsZS5zZWxlY3RlZCksQS51bnNlbGVjdGVkT3B0aW9ucz1sKGUsZS51bnNlbGVjdGVkKSxbe3g6ITEseTohMSx0Ont9LHRyYWNlOmV9XX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MzEsIi4uL3NjYXR0ZXIvY2FsYyI6MTE5MiwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjExOTQsIi4uL3NjYXR0ZXJnbC9jb25zdGFudHMiOjEyNDUsIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IjoxMjQ2LCIuL3NjZW5lX3VwZGF0ZSI6MTI5Nn1dLDEyOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLHM9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxsPXQoIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGgiKSxjPXQoIi4uL3NjYXR0ZXJnbC9oZWxwZXJzIikuaXNPcGVuU3ltYm9sO2Z1bmN0aW9uIHUodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLmRpbWVuc2lvbnMscixpKX1yKCJsYWJlbCIpO3ZhciBpPXIoInZhbHVlcyIpO2kmJmkubGVuZ3RoP3IoInZpc2libGUiKTplLnZpc2libGU9ITEscigiYXhpcy50eXBlIikscigiYXhpcy5tYXRjaGVzIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIGgocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgcD1pKHQsZSx7bmFtZToiZGltZW5zaW9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOnV9KSxkPWgoImRpYWdvbmFsLnZpc2libGUiKSxtPWgoInNob3d1cHBlcmhhbGYiKSxnPWgoInNob3dsb3dlcmhhbGYiKTtpZihsKGUscCwidmFsdWVzIikmJihkfHxtfHxnKSl7aCgidGV4dCIpLGgoImhvdmVydGV4dCIpLGgoImhvdmVydGVtcGxhdGUiKSxoKCJ4aG92ZXJmb3JtYXQiKSxoKCJ5aG92ZXJmb3JtYXQiKSxzKHQsZSxyLGYsaCk7dmFyIHY9YyhlLm1hcmtlci5zeW1ib2wpLHk9by5pc0J1YmJsZShlKTtoKCJtYXJrZXIubGluZS53aWR0aCIsdnx8eT8xOjApLGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1lLmRpbWVuc2lvbnMscz1vLmxlbmd0aCxsPWUuc2hvd3VwcGVyaGFsZixjPWUuc2hvd2xvd2VyaGFsZix1PWUuZGlhZ29uYWwudmlzaWJsZSxmPW5ldyBBcnJheShzKSxoPW5ldyBBcnJheShzKTtmb3IoaT0wO2k8cztpKyspe3ZhciBwPWk/aSsxOiIiO2ZbaV09IngiK3AsaFtpXT0ieSIrcH12YXIgZD1uKCJ4YXhlcyIsZiksbT1uKCJ5YXhlcyIsaCksZz1lLl9kaWFnPW5ldyBBcnJheShzKTtlLl94YXhlcz17fSxlLl95YXhlcz17fTt2YXIgdj1bXSx5PVtdO2Z1bmN0aW9uIHgodCxuLGksYSl7aWYodCl7dmFyIG89dC5jaGFyQXQoMCkscz1yLl9zcGxvbUF4ZXNbb107aWYoZVsiXyIrbysiYXhlcyJdW3RdPTEsYS5wdXNoKHQpLCEodCBpbiBzKSl7dmFyIGw9c1t0XT17fTtpJiYobC5sYWJlbD1pLmxhYmVsfHwiIixpLnZpc2libGUmJmkuYXhpcyYmKGkuYXhpcy50eXBlJiYobC50eXBlPWkuYXhpcy50eXBlKSxpLmF4aXMubWF0Y2hlcyYmKGwubWF0Y2hlcz1uKSkpfX19dmFyIGI9IXUmJiFjLF89IXUmJiFsO2ZvcihlLl9heGVzRGltPXt9LGk9MDtpPHM7aSsrKXt2YXIgdz1vW2ldLFQ9MD09PWksaz1pPT09cy0xLEE9VCYmYnx8ayYmXz92b2lkIDA6ZFtpXSxNPVQmJl98fGsmJmI/dm9pZCAwOm1baV07eChBLE0sdyx2KSx4KE0sQSx3LHkpLGdbaV09W0EsTV0sZS5fYXhlc0RpbVtBXT1pLGUuX2F4ZXNEaW1bTV09aX1mb3IoaT0wO2k8di5sZW5ndGg7aSsrKWZvcihhPTA7YTx5Lmxlbmd0aDthKyspe3ZhciBTPXZbaV0reVthXTtpPmEmJmx8fGk8YSYmYz9yLl9zcGxvbVN1YnBsb3RzW1NdPTE6aSE9PWF8fCF1JiZjJiZsfHwoci5fc3Bsb21TdWJwbG90c1tTXT0xKX0oIWN8fCF1JiZsJiZjKSYmKHIuX3NwbG9tR3JpZERmbHQueHNpZGU9ImJvdHRvbSIsci5fc3Bsb21HcmlkRGZsdC55c2lkZT0ibGVmdCIpfSgwLGUsZixoKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxoKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6ODIyLCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoIjoxMTYyLCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTIxMCwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTIxNiwiLi4vc2NhdHRlcmdsL2hlbHBlcnMiOjEyNTAsIi4vYXR0cmlidXRlcyI6MTI4N31dLDEyOTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLGE9dCgiLi4vc2NhdHRlcmdsL2NvbnZlcnQiKS5tYXJrZXJTdHlsZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRyYWNlLG89dC5fZnVsbExheW91dC5fc3Bsb21TY2VuZXNbci51aWRdO2lmKG8pe2kodCxyKSxuLmV4dGVuZEZsYXQoby5tYXRyaXhPcHRpb25zLGEocikpO3ZhciBzPW4uZXh0ZW5kRmxhdCh7fSxvLm1hdHJpeE9wdGlvbnMsby52aWV3T3B0cyk7by5tYXRyaXgudXBkYXRlKHMsbnVsbCl9fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjExOTQsIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IjoxMjQ2fV0sMTI5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmdldERpbUluZGV4PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUuX2lkLG49e3g6MCx5OjF9W3IuY2hhckF0KDApXSxpPXQuX3Zpc2libGVEaW1zLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtpZih0Ll9kaWFnW29dW25dPT09cilyZXR1cm4gYX1yZXR1cm4hMX19LHt9XSwxMjkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaGVscGVycyIpLGk9dCgiLi4vc2NhdHRlcmdsL2hvdmVyIikuY2FsY0hvdmVyO2UuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXQuY2RbMF0udHJhY2Usbz10LnNjZW5lLm1hdHJpeE9wdGlvbnMuY2RhdGEscz10LnhhLGw9dC55YSxjPXMuYzJwKGUpLHU9bC5jMnAociksZj10LmRpc3RhbmNlLGg9bi5nZXREaW1JbmRleChhLHMpLHA9bi5nZXREaW1JbmRleChhLGwpO2lmKCExPT09aHx8ITE9PT1wKXJldHVyblt0XTtmb3IodmFyIGQsbSxnPW9baF0sdj1vW3BdLHk9Zix4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBiPWdbeF0sXz12W3hdLHc9cy5jMnAoYiktYyxUPWwuYzJwKF8pLXUsaz1NYXRoLnNxcnQodyp3K1QqVCk7azx5JiYoeT1tPWssZD14KX1yZXR1cm4gdC5pbmRleD1kLHQuZGlzdGFuY2U9eSx0LmR4eT1tLHZvaWQgMD09PWQ/W3RdOltpKHQsZyx2LGEpXX19fSx7Ii4uL3NjYXR0ZXJnbC9ob3ZlciI6MTI1MSwiLi9oZWxwZXJzIjoxMjkyfV0sMTI5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9ncmlkIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic3Bsb20iLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbImdsIiwicmVnbCIsImNhcnRlc2lhbiIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpLGVkaXRTdHlsZTp0KCIuL2VkaXRfc3R5bGUiKSxtZXRhOnt9fSxuLnJlZ2lzdGVyKGkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvZ3JpZCI6NjgzLCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTIwOSwiLi9hdHRyaWJ1dGVzIjoxMjg3LCIuL2Jhc2VfcGxvdCI6MTI4OCwiLi9jYWxjIjoxMjg5LCIuL2RlZmF1bHRzIjoxMjkwLCIuL2VkaXRfc3R5bGUiOjEyOTEsIi4vaG92ZXIiOjEyOTMsIi4vcGxvdCI6MTI5NSwiLi9zZWxlY3QiOjEyOTd9XSwxMjk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJlZ2wtc3Bsb20iKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiKS5zZWxlY3RNb2RlO2Z1bmN0aW9uIHModCxlKXt2YXIgcixzLGwsYyx1LGY9dC5fZnVsbExheW91dCxoPWYuX3NpemUscD1lLnRyYWNlLGQ9ZS50LG09Zi5fc3Bsb21TY2VuZXNbcC51aWRdLGc9bS5tYXRyaXhPcHRpb25zLHY9Zy5jZGF0YSx5PWYuX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsLHg9Zi5kcmFnbW9kZTtpZigwIT09di5sZW5ndGgpe2cubG93ZXI9cC5zaG93dXBwZXJoYWxmLGcudXBwZXI9cC5zaG93bG93ZXJoYWxmLGcuZGlhZ29uYWw9cC5kaWFnb25hbC52aXNpYmxlO3ZhciBiPXAuX3Zpc2libGVEaW1zLF89di5sZW5ndGgsdz1tLnZpZXdPcHRzPXt9O2Zvcih3LnJhbmdlcz1uZXcgQXJyYXkoXyksdy5kb21haW5zPW5ldyBBcnJheShfKSx1PTA7dTxiLmxlbmd0aDt1Kyspe2w9Ylt1XTt2YXIgVD13LnJhbmdlc1t1XT1uZXcgQXJyYXkoNCksaz13LmRvbWFpbnNbdV09bmV3IEFycmF5KDQpOyhyPWEuZ2V0RnJvbUlkKHQscC5fZGlhZ1tsXVswXSkpJiYoVFswXT1yLl9ybFswXSxUWzJdPXIuX3JsWzFdLGtbMF09ci5kb21haW5bMF0sa1syXT1yLmRvbWFpblsxXSksKHM9YS5nZXRGcm9tSWQodCxwLl9kaWFnW2xdWzFdKSkmJihUWzFdPXMuX3JsWzBdLFRbM109cy5fcmxbMV0sa1sxXT1zLmRvbWFpblswXSxrWzNdPXMuZG9tYWluWzFdKX12YXIgQT10Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW8sTT1oLmwqQSxTPWguYipBLEU9aC53KkEsTD1oLmgqQTt3LnZpZXdwb3J0PVtNLFMsRStNLEwrU10sITA9PT1tLm1hdHJpeCYmKG0ubWF0cml4PW4oeSkpO3ZhciBDPWYuY2xpY2ttb2RlLmluZGV4T2YoInNlbGVjdCIpPi0xLFA9ITA7aWYobyh4KXx8ISFwLnNlbGVjdGVkcG9pbnRzfHxDKXt2YXIgST1wLl9sZW5ndGg7aWYocC5zZWxlY3RlZHBvaW50cyl7bS5zZWxlY3RCYXRjaD1wLnNlbGVjdGVkcG9pbnRzO3ZhciBPPXAuc2VsZWN0ZWRwb2ludHMsej17fTtmb3IobD0wO2w8Ty5sZW5ndGg7bCsrKXpbT1tsXV09ITA7dmFyIEQ9W107Zm9yKGw9MDtsPEk7bCsrKXpbbF18fEQucHVzaChsKTttLnVuc2VsZWN0QmF0Y2g9RH12YXIgUj1kLnhweD1uZXcgQXJyYXkoXyksRj1kLnlweD1uZXcgQXJyYXkoXyk7Zm9yKHU9MDt1PGIubGVuZ3RoO3UrKyl7aWYobD1iW3VdLHI9YS5nZXRGcm9tSWQodCxwLl9kaWFnW2xdWzBdKSlmb3IoUlt1XT1uZXcgQXJyYXkoSSksYz0wO2M8STtjKyspUlt1XVtjXT1yLmMycCh2W3VdW2NdKTtpZihzPWEuZ2V0RnJvbUlkKHQscC5fZGlhZ1tsXVsxXSkpZm9yKEZbdV09bmV3IEFycmF5KEkpLGM9MDtjPEk7YysrKUZbdV1bY109cy5jMnAodlt1XVtjXSl9aWYobS5zZWxlY3RCYXRjaC5sZW5ndGh8fG0udW5zZWxlY3RCYXRjaC5sZW5ndGgpe3ZhciBCPWkuZXh0ZW5kRmxhdCh7fSxnLG0udW5zZWxlY3RlZE9wdGlvbnMsdyksTj1pLmV4dGVuZEZsYXQoe30sZyxtLnNlbGVjdGVkT3B0aW9ucyx3KTttLm1hdHJpeC51cGRhdGUoQixOKSxQPSExfX1lbHNlIGQueHB4PWQueXB4PW51bGw7aWYoUCl7dmFyIGo9aS5leHRlbmRGbGF0KHt9LGcsdyk7bS5tYXRyaXgudXBkYXRlKGosbnVsbCl9fX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKHIubGVuZ3RoKWZvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXModCxyW25dWzBdKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIjo2NTcsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwicmVnbC1zcGxvbSI6NTE1fV0sMTI5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGk9ZS51aWQsYT1yLl9zcGxvbVNjZW5lczthfHwoYT1yLl9zcGxvbVNjZW5lcz17fSk7dmFyIG89e2RpcnR5OiEwLHNlbGVjdEJhdGNoOltdLHVuc2VsZWN0QmF0Y2g6W119LHM9YVtlLnVpZF07cmV0dXJuIHN8fCgocz1hW2ldPW4uZXh0ZW5kRmxhdCh7fSxvLHttYXRyaXg6ITEsc2VsZWN0QmF0Y2g6W10sdW5zZWxlY3RCYXRjaDpbXX0pKS5kcmF3PWZ1bmN0aW9uKCl7cy5tYXRyaXgmJnMubWF0cml4LmRyYXcmJihzLnNlbGVjdEJhdGNoLmxlbmd0aHx8cy51bnNlbGVjdEJhdGNoLmxlbmd0aD9zLm1hdHJpeC5kcmF3KHMudW5zZWxlY3RCYXRjaCxzLnNlbGVjdEJhdGNoKTpzLm1hdHJpeC5kcmF3KCkpLHMuZGlydHk9ITF9LHMuZGVzdHJveT1mdW5jdGlvbigpe3MubWF0cml4JiZzLm1hdHJpeC5kZXN0cm95JiZzLm1hdHJpeC5kZXN0cm95KCkscy5tYXRyaXhPcHRpb25zPW51bGwscy5zZWxlY3RCYXRjaD1udWxsLHMudW5zZWxlY3RCYXRjaD1udWxsLHM9bnVsbH0pLHMuZGlydHl8fG4uZXh0ZW5kRmxhdChzLG8pLHN9fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sMTI5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxhPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuY2Qsbz1yWzBdLnRyYWNlLHM9clswXS50LGw9dC5zY2VuZSxjPWwubWF0cml4T3B0aW9ucy5jZGF0YSx1PXQueGF4aXMsZj10LnlheGlzLGg9W107aWYoIWwpcmV0dXJuIGg7dmFyIHA9IWkuaGFzTWFya2VycyhvKSYmIWkuaGFzVGV4dChvKTtpZighMCE9PW8udmlzaWJsZXx8cClyZXR1cm4gaDt2YXIgZD1hLmdldERpbUluZGV4KG8sdSksbT1hLmdldERpbUluZGV4KG8sZik7aWYoITE9PT1kfHwhMT09PW0pcmV0dXJuIGg7dmFyIGc9cy54cHhbZF0sdj1zLnlweFttXSx5PWNbZF0seD1jW21dLGI9W10sXz1bXTtpZighMSE9PWUmJiFlLmRlZ2VuZXJhdGUpZm9yKHZhciB3PTA7dzx5Lmxlbmd0aDt3KyspZS5jb250YWlucyhbZ1t3XSx2W3ddXSxudWxsLHcsdCk/KGIucHVzaCh3KSxoLnB1c2goe3BvaW50TnVtYmVyOncseDp5W3ddLHk6eFt3XX0pKTpfLnB1c2godyk7dmFyIFQ9bC5tYXRyaXhPcHRpb25zO3JldHVybiBiLmxlbmd0aHx8Xy5sZW5ndGg/bC5zZWxlY3RCYXRjaC5sZW5ndGh8fGwudW5zZWxlY3RCYXRjaC5sZW5ndGh8fGwubWF0cml4LnVwZGF0ZShsLnVuc2VsZWN0ZWRPcHRpb25zLG4uZXh0ZW5kRmxhdCh7fSxULGwuc2VsZWN0ZWRPcHRpb25zLGwudmlld09wdHMpKTpsLm1hdHJpeC51cGRhdGUoVCxudWxsKSxsLnNlbGVjdEJhdGNoPWIsbC51bnNlbGVjdEJhdGNoPV8saH19LHsiLi4vLi4vbGliIjo3NzYsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTYsIi4vaGVscGVycyI6MTI5Mn1dLDEyOTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uL21lc2gzZC9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx1Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHY6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxzdGFydHM6e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sbWF4ZGlzcGxheWVkOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjFlMyxlZGl0VHlwZToiY2FsYyJ9LHNpemVyZWY6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLG1pbjowLGRmbHQ6MX0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRlbXBsYXRlOmEoe2VkaXRUeXBlOiJjYWxjIn0se2tleXM6WyJ0dWJleCIsInR1YmV5IiwidHViZXoiLCJ0dWJldSIsInR1YmV2IiwidHViZXciLCJub3JtIiwiZGl2ZXJnZW5jZSJdfSksdWhvdmVyZm9ybWF0OmkoInUiLDEpLHZob3ZlcmZvcm1hdDppKCJ2IiwxKSx3aG92ZXJmb3JtYXQ6aSgidyIsMSkseGhvdmVyZm9ybWF0OmkoIngiKSx5aG92ZXJmb3JtYXQ6aSgieSIpLHpob3ZlcmZvcm1hdDppKCJ6Iiksc2hvd2xlZ2VuZDpsKHt9LHMuc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfTtsKGMsbigiIix7Y29sb3JBdHRyOiJ1L3YvdyBub3JtIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpO1sib3BhY2l0eSIsImxpZ2h0cG9zaXRpb24iLCJsaWdodGluZyJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2NbdF09b1t0XX0pKSxjLmhvdmVyaW5mbz1sKHt9LHMuaG92ZXJpbmZvLHtlZGl0VHlwZToiY2FsYyIsZmxhZ3M6WyJ4IiwieSIsInoiLCJ1IiwidiIsInciLCJub3JtIiwiZGl2ZXJnZW5jZSIsInRleHQiLCJuYW1lIl0sZGZsdDoieCt5K3orbm9ybSt0ZXh0K25hbWUifSksYy50cmFuc2Zvcm1zPXZvaWQgMCxlLmV4cG9ydHM9Y30seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODk5LCIuLi9tZXNoM2QvYXR0cmlidXRlcyI6MTEzMn1dLDEyOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpO2Z1bmN0aW9uIGEodCl7dmFyIGUscixpLGEscyxsLGMsdSxmLGgscCxkLG09dC5feCxnPXQuX3ksdj10Ll96LHk9dC5fbGVuLHg9LTEvMCxiPTEvMCxfPS0xLzAsdz0xLzAsVD0tMS8wLGs9MS8wLEE9IiI7Zm9yKHkmJihjPW1bMF0sZj1nWzBdLHA9dlswXSkseT4xJiYodT1tW3ktMV0saD1nW3ktMV0sZD12W3ktMV0pLGU9MDtlPHk7ZSsrKXg9TWF0aC5tYXgoeCxtW2VdKSxiPU1hdGgubWluKGIsbVtlXSksXz1NYXRoLm1heChfLGdbZV0pLHc9TWF0aC5taW4odyxnW2VdKSxUPU1hdGgubWF4KFQsdltlXSksaz1NYXRoLm1pbihrLHZbZV0pLGF8fG1bZV09PT1jfHwoYT0hMCxBKz0ieCIpLHN8fGdbZV09PT1mfHwocz0hMCxBKz0ieSIpLGx8fHZbZV09PT1wfHwobD0hMCxBKz0ieiIpO2F8fChBKz0ieCIpLHN8fChBKz0ieSIpLGx8fChBKz0ieiIpO3ZhciBNPW8odC5feCksUz1vKHQuX3kpLEU9byh0Ll96KTtBPShBPShBPUEucmVwbGFjZSgieCIsKGM+dT8iLSI6IisiKSsieCIpKS5yZXBsYWNlKCJ5IiwoZj5oPyItIjoiKyIpKyJ5IikpLnJlcGxhY2UoInoiLChwPmQ/Ii0iOiIrIikrInoiKTt2YXIgTD1mdW5jdGlvbigpe3k9MCxNPVtdLFM9W10sRT1bXX07KCF5fHx5PE0ubGVuZ3RoKlMubGVuZ3RoKkUubGVuZ3RoKSYmTCgpO3ZhciBDPWZ1bmN0aW9uKHQpe3JldHVybiJ4Ij09PXQ/bToieSI9PT10P2c6dn0sUD1mdW5jdGlvbih0KXtyZXR1cm4ieCI9PT10P006InkiPT09dD9TOkV9LEk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbeS0xXTx0WzBdPy0xOjF9LE89QyhBWzFdKSx6PUMoQVszXSksRD1DKEFbNV0pLFI9UChBWzFdKS5sZW5ndGgsRj1QKEFbM10pLmxlbmd0aCxCPVAoQVs1XSkubGVuZ3RoLE49ITEsaj1mdW5jdGlvbih0LGUscil7cmV0dXJuIFIqKEYqdCtlKStyfSxVPUkoQyhBWzFdKSksVj1JKEMoQVszXSkpLEg9SShDKEFbNV0pKTtmb3IoZT0wO2U8Qi0xO2UrKyl7Zm9yKHI9MDtyPEYtMTtyKyspe2ZvcihpPTA7aTxSLTE7aSsrKXt2YXIgcT1qKGUscixpKSxHPWooZSxyLGkrMSksWT1qKGUscisxLGkpLFc9aihlKzEscixpKTtpZihPW3FdKlU8T1tHXSpVJiZ6W3FdKlY8eltZXSpWJiZEW3FdKkg8RFtXXSpIfHwoTj0hMCksTilicmVha31pZihOKWJyZWFrfWlmKE4pYnJlYWt9cmV0dXJuIE4mJihuLndhcm4oIkVuY291bnRlcmVkIGFyYml0cmFyeSBjb29yZGluYXRlcyEgVW5hYmxlIHRvIGlucHV0IGRhdGEgZ3JpZC4iKSxMKCkpLHt4TWluOmIseU1pbjp3LHpNaW46ayx4TWF4OngseU1heDpfLHpNYXg6VCxYczpNLFlzOlMsWnM6RSxsZW46eSxmaWxsOkF9fWZ1bmN0aW9uIG8odCl7cmV0dXJuIG4uZGlzdGluY3RWYWxzKHQpLnZhbHN9ZnVuY3Rpb24gcyh0LGUpe2lmKHZvaWQgMD09PWUmJihlPXQubGVuZ3RoKSxuLmlzVHlwZWRBcnJheSh0KSlyZXR1cm4gdC5zdWJhcnJheSgwLGUpO2Zvcih2YXIgcj1bXSxpPTA7aTxlO2krKylyW2ldPSt0W2ldO3JldHVybiByfWUuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe2UuX2xlbj1NYXRoLm1pbihlLnUubGVuZ3RoLGUudi5sZW5ndGgsZS53Lmxlbmd0aCxlLngubGVuZ3RoLGUueS5sZW5ndGgsZS56Lmxlbmd0aCksZS5fdT1zKGUudSxlLl9sZW4pLGUuX3Y9cyhlLnYsZS5fbGVuKSxlLl93PXMoZS53LGUuX2xlbiksZS5feD1zKGUueCxlLl9sZW4pLGUuX3k9cyhlLnksZS5fbGVuKSxlLl96PXMoZS56LGUuX2xlbik7dmFyIHI9YShlKTtlLl9ncmlkRmlsbD1yLmZpbGwsZS5fWHM9ci5YcyxlLl9Zcz1yLllzLGUuX1pzPXIuWnMsZS5fbGVuPXIubGVuO3ZhciBuLG8sbCxjPTA7ZS5zdGFydHMmJihuPXMoZS5zdGFydHMueHx8W10pLG89cyhlLnN0YXJ0cy55fHxbXSksbD1zKGUuc3RhcnRzLnp8fFtdKSxjPU1hdGgubWluKG4ubGVuZ3RoLG8ubGVuZ3RoLGwubGVuZ3RoKSksZS5fc3RhcnRzWD1ufHxbXSxlLl9zdGFydHNZPW98fFtdLGUuX3N0YXJ0c1o9bHx8W107dmFyIHUsZj0wLGg9MS8wO2Zvcih1PTA7dTxlLl9sZW47dSsrKXt2YXIgcD1lLl91W3VdLGQ9ZS5fdlt1XSxtPWUuX3dbdV0sZz1NYXRoLnNxcnQocCpwK2QqZCttKm0pO2Y9TWF0aC5tYXgoZixnKSxoPU1hdGgubWluKGgsZyl9Zm9yKGkodCxlLHt2YWxzOltoLGZdLGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJjIn0pLHU9MDt1PGM7dSsrKXt2YXIgdj1uW3VdO3IueE1heD1NYXRoLm1heChyLnhNYXgsdiksci54TWluPU1hdGgubWluKHIueE1pbix2KTt2YXIgeT1vW3VdO3IueU1heD1NYXRoLm1heChyLnlNYXgseSksci55TWluPU1hdGgubWluKHIueU1pbix5KTt2YXIgeD1sW3VdO3Iuek1heD1NYXRoLm1heChyLnpNYXgseCksci56TWluPU1hdGgubWluKHIuek1pbix4KX1lLl9zbGVuPWMsZS5fbm9ybU1heD1mLGUuX3hibmRzPVtyLnhNaW4sci54TWF4XSxlLl95Ym5kcz1bci55TWluLHIueU1heF0sZS5femJuZHM9W3Iuek1pbixyLnpNYXhdfSxmaWx0ZXI6cyxwcm9jZXNzR3JpZDphfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjQ3LCIuLi8uLi9saWIiOjc3Nn1dLDEzMDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc3RyZWFtdHViZTNkIiksaT1uLmNyZWF0ZVR1YmVNZXNoLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIikucGFyc2VDb2xvclNjYWxlLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikuZXh0cmFjdE9wdHMsbD10KCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiKSxjPXt4YXhpczowLHlheGlzOjEsemF4aXM6Mn07ZnVuY3Rpb24gdSh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMubWVzaD1udWxsLHRoaXMuZGF0YT1udWxsfXZhciBmPXUucHJvdG90eXBlO2Z1bmN0aW9uIGgodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGU+Mj90LnNsaWNlKDEsZS0xKToyPT09ZT9bKHRbMF0rdFsxXSkvMl06dH1mdW5jdGlvbiBwKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiAxPT09ZT9bLjUsLjVdOlt0WzFdLXRbMF0sdFtlLTFdLXRbZS0yXV19ZnVuY3Rpb24gZCh0LGUpe3ZhciByPXQuZnVsbFNjZW5lTGF5b3V0LGk9dC5kYXRhU2NhbGUsdT1lLl9sZW4sZj17fTtmdW5jdGlvbiBkKHQsZSl7dmFyIG49cltlXSxvPWlbY1tlXV07cmV0dXJuIGEuc2ltcGxlTWFwKHQsKGZ1bmN0aW9uKHQpe3JldHVybiBuLmQybCh0KSpvfSkpfWlmKGYudmVjdG9ycz1sKGQoZS5fdSwieGF4aXMiKSxkKGUuX3YsInlheGlzIiksZChlLl93LCJ6YXhpcyIpLHUpLCF1KXJldHVybntwb3NpdGlvbnM6W10sY2VsbHM6W119O3ZhciBtPWQoZS5fWHMsInhheGlzIiksZz1kKGUuX1lzLCJ5YXhpcyIpLHY9ZChlLl9acywiemF4aXMiKTtpZihmLm1lc2hncmlkPVttLGcsdl0sZi5ncmlkRmlsbD1lLl9ncmlkRmlsbCxlLl9zbGVuKWYuc3RhcnRpbmdQb3NpdGlvbnM9bChkKGUuX3N0YXJ0c1gsInhheGlzIiksZChlLl9zdGFydHNZLCJ5YXhpcyIpLGQoZS5fc3RhcnRzWiwiemF4aXMiKSk7ZWxzZXtmb3IodmFyIHk9Z1swXSx4PWgobSksYj1oKHYpLF89bmV3IEFycmF5KHgubGVuZ3RoKmIubGVuZ3RoKSx3PTAsVD0wO1Q8eC5sZW5ndGg7VCsrKWZvcih2YXIgaz0wO2s8Yi5sZW5ndGg7aysrKV9bdysrXT1beFtUXSx5LGJba11dO2Yuc3RhcnRpbmdQb3NpdGlvbnM9X31mLmNvbG9ybWFwPW8oZSksZi50dWJlU2l6ZT1lLnNpemVyZWYsZi5tYXhMZW5ndGg9ZS5tYXhkaXNwbGF5ZWQ7dmFyIEE9ZChlLl94Ym5kcywieGF4aXMiKSxNPWQoZS5feWJuZHMsInlheGlzIiksUz1kKGUuX3pibmRzLCJ6YXhpcyIpLEU9cChtKSxMPXAoZyksQz1wKHYpLFA9W1tBWzBdLUVbMF0sTVswXS1MWzBdLFNbMF0tQ1swXV0sW0FbMV0rRVsxXSxNWzFdK0xbMV0sU1sxXStDWzFdXV0sST1uKGYsUCksTz1zKGUpO0kudmVydGV4SW50ZW5zaXR5Qm91bmRzPVtPLm1pbi9lLl9ub3JtTWF4LE8ubWF4L2UuX25vcm1NYXhdO3ZhciB6PWUubGlnaHRwb3NpdGlvbjtyZXR1cm4gSS5saWdodFBvc2l0aW9uPVt6Lngsei55LHouel0sSS5hbWJpZW50PWUubGlnaHRpbmcuYW1iaWVudCxJLmRpZmZ1c2U9ZS5saWdodGluZy5kaWZmdXNlLEkuc3BlY3VsYXI9ZS5saWdodGluZy5zcGVjdWxhcixJLnJvdWdobmVzcz1lLmxpZ2h0aW5nLnJvdWdobmVzcyxJLmZyZXNuZWw9ZS5saWdodGluZy5mcmVzbmVsLEkub3BhY2l0eT1lLm9wYWNpdHksZS5fcGFkPUkudHViZVNjYWxlKmUuc2l6ZXJlZioyLEl9Zi5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LHI9dGhpcy5zY2VuZS5kYXRhU2NhbGU7ZnVuY3Rpb24gbih0LG4pe3ZhciBpPWVbbl0sYT1yW2Nbbl1dO3JldHVybiBpLmwyYyh0KS9hfWlmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgaT10LmRhdGEucG9zaXRpb24sYT10LmRhdGEudmVsb2NpdHk7cmV0dXJuIHQudHJhY2VDb29yZGluYXRlPVtuKGlbMF0sInhheGlzIiksbihpWzFdLCJ5YXhpcyIpLG4oaVsyXSwiemF4aXMiKSxuKGFbMF0sInhheGlzIiksbihhWzFdLCJ5YXhpcyIpLG4oYVsyXSwiemF4aXMiKSx0LmRhdGEuaW50ZW5zaXR5KnRoaXMuZGF0YS5fbm9ybU1heCx0LmRhdGEuZGl2ZXJnZW5jZV0sdC50ZXh0TGFiZWw9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQsITB9fSxmLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmRhdGE9dDt2YXIgZT1kKHRoaXMuc2NlbmUsdCk7dGhpcy5tZXNoLnVwZGF0ZShlKX0sZi5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsbj1kKHQsZSksYT1pKHIsbiksbz1uZXcgdSh0LGUudWlkKTtyZXR1cm4gby5tZXNoPWEsby5kYXRhPWUsYS5fdHJhY2U9byx0LmdscGxvdC5hZGQoYSksb319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTEsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo3NzIsIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyI6ODgwLCJnbC1zdHJlYW10dWJlM2QiOjMzNH1dLDEzMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygidSIpLGM9cygidiIpLHU9cygidyIpLGY9cygieCIpLGg9cygieSIpLHA9cygieiIpO2wmJmwubGVuZ3RoJiZjJiZjLmxlbmd0aCYmdSYmdS5sZW5ndGgmJmYmJmYubGVuZ3RoJiZoJiZoLmxlbmd0aCYmcCYmcC5sZW5ndGg/KHMoInN0YXJ0cy54Iikscygic3RhcnRzLnkiKSxzKCJzdGFydHMueiIpLHMoIm1heGRpc3BsYXllZCIpLHMoInNpemVyZWYiKSxzKCJsaWdodGluZy5hbWJpZW50IikscygibGlnaHRpbmcuZGlmZnVzZSIpLHMoImxpZ2h0aW5nLnNwZWN1bGFyIikscygibGlnaHRpbmcucm91Z2huZXNzIikscygibGlnaHRpbmcuZnJlc25lbCIpLHMoImxpZ2h0cG9zaXRpb24ueCIpLHMoImxpZ2h0cG9zaXRpb24ueSIpLHMoImxpZ2h0cG9zaXRpb24ueiIpLGkodCxlLG8scyx7cHJlZml4OiIiLGNMZXR0ZXI6ImMifSkscygidGV4dCIpLHMoImhvdmVydGV4dCIpLHMoImhvdmVydGVtcGxhdGUiKSxzKCJ1aG92ZXJmb3JtYXQiKSxzKCJ2aG92ZXJmb3JtYXQiKSxzKCJ3aG92ZXJmb3JtYXQiKSxzKCJ4aG92ZXJmb3JtYXQiKSxzKCJ5aG92ZXJmb3JtYXQiKSxzKCJ6aG92ZXJmb3JtYXQiKSxlLl9sZW5ndGg9bnVsbCk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY0OSwiLi4vLi4vbGliIjo3NzYsIi4vYXR0cmlidXRlcyI6MTI5OH1dLDEzMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic3RyZWFtdHViZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIiwic2hvd0xlZ2VuZCJdLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnttaW46ImNtaW4iLG1heDoiY21heCJ9LGNhbGM6dCgiLi9jYWxjIikuY2FsYyxwbG90OnQoIi4vY29udmVydCIpLGV2ZW50RGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiB0LnR1YmV4PXQueCx0LnR1YmV5PXQueSx0LnR1YmV6PXQueix0LnR1YmV1PWUudHJhY2VDb29yZGluYXRlWzNdLHQudHViZXY9ZS50cmFjZUNvb3JkaW5hdGVbNF0sdC50dWJldz1lLnRyYWNlQ29vcmRpbmF0ZVs1XSx0Lm5vcm09ZS50cmFjZUNvb3JkaW5hdGVbNl0sdC5kaXZlcmdlbmNlPWUudHJhY2VDb29yZGluYXRlWzddLGRlbGV0ZSB0LngsZGVsZXRlIHQueSxkZWxldGUgdC56LHR9LG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjg2OSwiLi9hdHRyaWJ1dGVzIjoxMjk4LCIuL2NhbGMiOjEyOTksIi4vY29udmVydCI6MTMwMCwiLi9kZWZhdWx0cyI6MTMwMX1dLDEzMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLGw9dCgiLi4vcGllL2F0dHJpYnV0ZXMiKSxjPXQoIi4vY29uc3RhbnRzIiksdT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2xhYmVsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxwYXJlbnRzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxicmFuY2h2YWx1ZXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJlbWFpbmRlciIsInRvdGFsIl0sZGZsdDoicmVtYWluZGVyIixlZGl0VHlwZToiY2FsYyJ9LGNvdW50Ont2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJicmFuY2hlcyIsImxlYXZlcyJdLGRmbHQ6ImxlYXZlcyIsZWRpdFR5cGU6ImNhbGMifSxsZXZlbDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCIsYW5pbTohMH0sbWF4ZGVwdGg6e3ZhbFR5cGU6ImludGVnZXIiLGVkaXRUeXBlOiJwbG90IixkZmx0Oi0xfSxtYXJrZXI6dSh7Y29sb3JzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnUoe30sbC5tYXJrZXIubGluZS5jb2xvcix7ZGZsdDpudWxsfSksd2lkdGg6dSh7fSxsLm1hcmtlci5saW5lLndpZHRoLHtkZmx0OjF9KSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sbygibWFya2VyIix7Y29sb3JBdHRyOiJjb2xvcnMiLGFuaW06ITF9KSksbGVhZjp7b3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToic3R5bGUiLG1pbjowLG1heDoxfSxlZGl0VHlwZToicGxvdCJ9LHRleHQ6bC50ZXh0LHRleHRpbmZvOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsYWJlbCIsInRleHQiLCJ2YWx1ZSIsImN1cnJlbnQgcGF0aCIsInBlcmNlbnQgcm9vdCIsInBlcmNlbnQgZW50cnkiLCJwZXJjZW50IHBhcmVudCJdLGV4dHJhczpbIm5vbmUiXSxlZGl0VHlwZToicGxvdCJ9LHRleHR0ZW1wbGF0ZTphKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOmMuZXZlbnREYXRhS2V5cy5jb25jYXQoWyJsYWJlbCIsInZhbHVlIl0pfSksaG92ZXJ0ZXh0OmwuaG92ZXJ0ZXh0LGhvdmVyaW5mbzp1KHt9LG4uaG92ZXJpbmZvLHtmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwibmFtZSIsImN1cnJlbnQgcGF0aCIsInBlcmNlbnQgcm9vdCIsInBlcmNlbnQgZW50cnkiLCJwZXJjZW50IHBhcmVudCJdLGRmbHQ6ImxhYmVsK3RleHQrdmFsdWUrbmFtZSJ9KSxob3ZlcnRlbXBsYXRlOmkoe30se2tleXM6Yy5ldmVudERhdGFLZXlzfSksdGV4dGZvbnQ6bC50ZXh0Zm9udCxpbnNpZGV0ZXh0b3JpZW50YXRpb246bC5pbnNpZGV0ZXh0b3JpZW50YXRpb24saW5zaWRldGV4dGZvbnQ6bC5pbnNpZGV0ZXh0Zm9udCxvdXRzaWRldGV4dGZvbnQ6dSh7fSxsLm91dHNpZGV0ZXh0Zm9udCx7fSkscm90YXRpb246e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxzb3J0Omwuc29ydCxyb290Ontjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIixkZmx0OiJyZ2JhKDAsMCwwLDApIn0sZWRpdFR5cGU6ImNhbGMifSxkb21haW46cyh7bmFtZToic3VuYnVyc3QiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OSwiLi4vcGllL2F0dHJpYnV0ZXMiOjExNjUsIi4vY29uc3RhbnRzIjoxMzA2fV0sMTMwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpO3IubmFtZT0ic3VuYnVyc3QiLHIucGxvdD1mdW5jdGlvbih0LGUsaSxhKXtuLnBsb3RCYXNlUGxvdChyLm5hbWUsdCxlLGksYSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLGksYSl7bi5jbGVhbkJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX19LHsiLi4vLi4vcGxvdHMvcGxvdHMiOjg5MH1dLDEzMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMtaGllcmFyY2h5IiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2Uscz10KCIuLi9waWUvY2FsYyIpLm1ha2VQdWxsQ29sb3JGbixsPXQoIi4uL3BpZS9jYWxjIikuZ2VuZXJhdGVFeHRlbmRlZENvbG9ycyxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLmNhbGMsdT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQUxNT1NUX0VRVUFMLGY9e30saD17fSxwPXt9O3IuY2FsYz1mdW5jdGlvbih0LGUpe3ZhciByLGwsZixoLHAsZCxtPXQuX2Z1bGxMYXlvdXQsZz1lLmlkcyx2PWEuaXNBcnJheU9yVHlwZWRBcnJheShnKSx5PWUubGFiZWxzLHg9ZS5wYXJlbnRzLGI9ZS52YWx1ZXMsXz1hLmlzQXJyYXlPclR5cGVkQXJyYXkoYiksdz1bXSxUPXt9LGs9e30sQT1mdW5jdGlvbih0KXtyZXR1cm4gdHx8Im51bWJlciI9PXR5cGVvZiB0fSxNPWZ1bmN0aW9uKHQpe3JldHVybiFffHxpKGJbdF0pJiZiW3RdPj0wfTt2PyhyPU1hdGgubWluKGcubGVuZ3RoLHgubGVuZ3RoKSxsPWZ1bmN0aW9uKHQpe3JldHVybiBBKGdbdF0pJiZNKHQpfSxmPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcoZ1t0XSl9KToocj1NYXRoLm1pbih5Lmxlbmd0aCx4Lmxlbmd0aCksbD1mdW5jdGlvbih0KXtyZXR1cm4gQSh5W3RdKSYmTSh0KX0sZj1mdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHlbdF0pfSksXyYmKHI9TWF0aC5taW4ocixiLmxlbmd0aCkpO2Zvcih2YXIgUz0wO1M8cjtTKyspaWYobChTKSl7dmFyIEU9ZihTKSxMPUEoeFtTXSk/U3RyaW5nKHhbU10pOiIiLEM9e2k6UyxpZDpFLHBpZDpMLGxhYmVsOkEoeVtTXSk/U3RyaW5nKHlbU10pOiIifTtfJiYoQy52PStiW1NdKSx3LnB1c2goQykscD1FLFRbaD1MXT9UW2hdLnB1c2gocCk6VFtoXT1bcF0sa1twXT0xfWlmKFRbIiJdKXtpZihUWyIiXS5sZW5ndGg+MSl7Zm9yKHZhciBQPWEucmFuZHN0cigpLEk9MDtJPHcubGVuZ3RoO0krKykiIj09PXdbSV0ucGlkJiYod1tJXS5waWQ9UCk7dy51bnNoaWZ0KHtoYXNNdWx0aXBsZVJvb3RzOiEwLGlkOlAscGlkOiIiLGxhYmVsOiIifSl9fWVsc2V7dmFyIE8sej1bXTtmb3IoTyBpbiBUKWtbT118fHoucHVzaChPKTtpZigxIT09ei5sZW5ndGgpcmV0dXJuIGEud2FybihbIk11bHRpcGxlIGltcGxpZWQgcm9vdHMsIGNhbm5vdCBidWlsZCIsZS50eXBlLCJoaWVyYXJjaHkgb2YiLGUubmFtZSsiLiIsIlRoZXNlIHJvb3RzIGluY2x1ZGU6Iix6LmpvaW4oIiwgIildLmpvaW4oIiAiKSk7Tz16WzBdLHcudW5zaGlmdCh7aGFzSW1wbGllZFJvb3Q6ITAsaWQ6TyxwaWQ6IiIsbGFiZWw6T30pfXRyeXtkPW4uc3RyYXRpZnkoKS5pZCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSkucGFyZW50SWQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpZH0pKSh3KX1jYXRjaCh0KXtyZXR1cm4gYS53YXJuKFsiRmFpbGVkIHRvIGJ1aWxkIixlLnR5cGUsImhpZXJhcmNoeSBvZiIsZS5uYW1lKyIuIiwiRXJyb3I6Iix0Lm1lc3NhZ2VdLmpvaW4oIiAiKSl9dmFyIEQ9bi5oaWVyYXJjaHkoZCksUj0hMTtpZihfKXN3aXRjaChlLmJyYW5jaHZhbHVlcyl7Y2FzZSJyZW1haW5kZXIiOkQuc3VtKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kYXRhLnZ9KSk7YnJlYWs7Y2FzZSJ0b3RhbCI6RC5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj10LmRhdGEuZGF0YSxuPXIudjtpZih0LmNoaWxkcmVuKXt2YXIgaT10LmNoaWxkcmVuLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLmRhdGEuZGF0YS52fSksMCk7aWYoKHIuaGFzSW1wbGllZFJvb3R8fHIuaGFzTXVsdGlwbGVSb290cykmJihuPWkpLG48aSp1KXJldHVybiBSPSEwLGEud2FybihbIlRvdGFsIHZhbHVlIGZvciBub2RlIix0LmRhdGEuZGF0YS5pZCwib2YiLGUubmFtZSwiaXMgc21hbGxlciB0aGFuIHRoZSBzdW0gb2YgaXRzIGNoaWxkcmVuLiIsIlxucGFyZW50IHZhbHVlID0iLG4sIlxuY2hpbGRyZW4gc3VtID0iLGldLmpvaW4oIiAiKSl9dC52YWx1ZT1ufSkpfWVsc2UhZnVuY3Rpb24gdChlLHIsbil7dmFyIGk9MCxhPWUuY2hpbGRyZW47aWYoYSl7Zm9yKHZhciBvPWEubGVuZ3RoLHM9MDtzPG87cysrKWkrPXQoYVtzXSxyLG4pO24uYnJhbmNoZXMmJmkrK31lbHNlIG4ubGVhdmVzJiZpKys7ZS52YWx1ZT1lLmRhdGEuZGF0YS52YWx1ZT1pLHIuX3ZhbHVlc3x8KHIuX3ZhbHVlcz1bXSk7cmV0dXJuIHIuX3ZhbHVlc1tlLmRhdGEuZGF0YS5pXT1pLGl9KEQsZSx7YnJhbmNoZXM6LTEhPT1lLmNvdW50LmluZGV4T2YoImJyYW5jaGVzIiksbGVhdmVzOi0xIT09ZS5jb3VudC5pbmRleE9mKCJsZWF2ZXMiKX0pO2lmKCFSKXt2YXIgRixCO2Uuc29ydCYmRC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLnZhbHVlLXQudmFsdWV9KSk7dmFyIE49ZS5tYXJrZXIuY29sb3JzfHxbXSxqPSEhTi5sZW5ndGg7cmV0dXJuIGUuX2hhc0NvbG9yc2NhbGU/KGp8fChOPV8/ZS52YWx1ZXM6ZS5fdmFsdWVzKSxjKHQsZSx7dmFsczpOLGNvbnRhaW5lclN0cjoibWFya2VyIixjTGV0dGVyOiJjIn0pLEI9byhlLm1hcmtlcikpOkY9cyhtWyJfIitlLnR5cGUrImNvbG9ybWFwIl0pLEQuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9dC5kYXRhLmRhdGE7ci5jb2xvcj1lLl9oYXNDb2xvcnNjYWxlP0IoTltyLmldKTpGKE5bci5pXSxyLmlkKX0pKSx3WzBdLmhpZXJhcmNoeT1ELHd9fSxyLl9ydW5Dcm9zc1RyYWNlQ2FsYz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2Z1bGxMYXlvdXQsbj1lLmNhbGNkYXRhLGk9clt0KyJjb2xvcndheSJdLGE9clsiXyIrdCsiY29sb3JtYXAiXTtyWyJleHRlbmQiK3QrImNvbG9ycyJdJiYoaT1sKGksImljaWNsZSI9PT10P3A6InRyZWVtYXAiPT09dD9oOmYpKTt2YXIgbyxzPTA7ZnVuY3Rpb24gYyh0KXt2YXIgZT10LmRhdGEuZGF0YSxyPWUuaWQ7ITE9PT1lLmNvbG9yJiYoYVtyXT9lLmNvbG9yPWFbcl06dC5wYXJlbnQ/dC5wYXJlbnQucGFyZW50P2UuY29sb3I9dC5wYXJlbnQuZGF0YS5kYXRhLmNvbG9yOihhW3JdPWUuY29sb3I9aVtzJWkubGVuZ3RoXSxzKyspOmUuY29sb3I9byl9Zm9yKHZhciB1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBkPW5bdV1bMF07ZC50cmFjZS50eXBlPT09dCYmZC5oaWVyYXJjaHkmJihvPWQudHJhY2Uucm9vdC5jb2xvcixkLmhpZXJhcmNoeS5lYWNoKGMpKX19LHIuY3Jvc3NUcmFjZUNhbGM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuX3J1bkNyb3NzVHJhY2VDYWxjKCJzdW5idXJzdCIsdCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjUxLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuLi9waWUvY2FsYyI6MTE2NywiZDMtaGllcmFyY2h5IjoxNjMsImZhc3QtaXNudW1lcmljIjoyNDJ9XSwxMzA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Q0xJQ0tfVFJBTlNJVElPTl9USU1FOjc1MCxDTElDS19UUkFOU0lUSU9OX0VBU0lORzoibGluZWFyIixldmVudERhdGFLZXlzOlsiY3VycmVudFBhdGgiLCJyb290IiwiZW50cnkiLCJwZXJjZW50Um9vdCIsInBlcmNlbnRFbnRyeSIsInBlcmNlbnRQYXJlbnQiXX19LHt9XSwxMzA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxvPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxsPXMuaGFzQ29sb3JzY2FsZSxjPXMuaGFuZGxlRGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIHUocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgZj11KCJsYWJlbHMiKSxoPXUoInBhcmVudHMiKTtpZihmJiZmLmxlbmd0aCYmaCYmaC5sZW5ndGgpe3ZhciBwPXUoInZhbHVlcyIpO3AmJnAubGVuZ3RoP3UoImJyYW5jaHZhbHVlcyIpOnUoImNvdW50IiksdSgibGV2ZWwiKSx1KCJtYXhkZXB0aCIpLHUoIm1hcmtlci5saW5lLndpZHRoIikmJnUoIm1hcmtlci5saW5lLmNvbG9yIixzLnBhcGVyX2JnY29sb3IpLHUoIm1hcmtlci5jb2xvcnMiKTt2YXIgZD1lLl9oYXNDb2xvcnNjYWxlPWwodCwibWFya2VyIiwiY29sb3JzIil8fCh0Lm1hcmtlcnx8e30pLmNvbG9yYXhpcztkJiZjKHQsZSxzLHUse3ByZWZpeDoibWFya2VyLiIsY0xldHRlcjoiYyJ9KSx1KCJsZWFmLm9wYWNpdHkiLGQ/MTouNyk7dmFyIG09dSgidGV4dCIpO3UoInRleHR0ZW1wbGF0ZSIpLGUudGV4dHRlbXBsYXRlfHx1KCJ0ZXh0aW5mbyIsQXJyYXkuaXNBcnJheShtKT8idGV4dCtsYWJlbCI6ImxhYmVsIiksdSgiaG92ZXJ0ZXh0IiksdSgiaG92ZXJ0ZW1wbGF0ZSIpO28odCxlLHMsdSwiYXV0byIse21vZHVsZUhhc1NlbGVjdGVkOiExLG1vZHVsZUhhc1Vuc2VsZWN0ZWQ6ITEsbW9kdWxlSGFzQ29uc3RyYWluOiExLG1vZHVsZUhhc0NsaXBvbmF4aXM6ITEsbW9kdWxlSGFzVGV4dGFuZ2xlOiExLG1vZHVsZUhhc0luc2lkZWFuY2hvcjohMX0pLHUoImluc2lkZXRleHRvcmllbnRhdGlvbiIpLHUoInNvcnQiKSx1KCJyb3RhdGlvbiIpLHUoInJvb3QuY29sb3IiKSxhKGUscyx1KSxlLl9sZW5ndGg9bnVsbH1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTEsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9kb21haW4iOjg1NSwiLi4vYmFyL2RlZmF1bHRzIjo5MTgsIi4vYXR0cmlidXRlcyI6MTMwM31dLDEzMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vbGliL2V2ZW50cyIpLGM9dCgiLi9oZWxwZXJzIiksdT10KCIuLi9waWUvaGVscGVycyIpLmZvcm1hdFBpZVZhbHVlO2Z1bmN0aW9uIGYodCxlLHIpe2Zvcih2YXIgbj10LmRhdGEuZGF0YSxpPXtjdXJ2ZU51bWJlcjplLmluZGV4LHBvaW50TnVtYmVyOm4uaSxkYXRhOmUuX2lucHV0LGZ1bGxEYXRhOmV9LG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIHM9cltvXTtzIGluIHQmJihpW3NdPXRbc10pfXJldHVybiJwYXJlbnRTdHJpbmciaW4gdCYmIWMuaXNIaWVyYXJjaHlSb290KHQpJiYoaS5wYXJlbnQ9dC5wYXJlbnRTdHJpbmcpLGEoaSxlLG4uaSksaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxoKXt2YXIgcD1hWzBdLGQ9cC50cmFjZSxtPXAuaGllcmFyY2h5LGc9InN1bmJ1cnN0Ij09PWQudHlwZSx2PSJ0cmVlbWFwIj09PWQudHlwZXx8ImljaWNsZSI9PT1kLnR5cGU7Il9oYXNIb3ZlckxhYmVsImluIGR8fChkLl9oYXNIb3ZlckxhYmVsPSExKSwiX2hhc0hvdmVyRXZlbnQiaW4gZHx8KGQuX2hhc0hvdmVyRXZlbnQ9ITEpO3Qub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKGkpe3ZhciBhPXIuX2Z1bGxMYXlvdXQ7aWYoIXIuX2RyYWdnaW5nJiYhMSE9PWEuaG92ZXJtb2RlKXt2YXIgbCx5PXIuX2Z1bGxEYXRhW2QuaW5kZXhdLHg9aS5kYXRhLmRhdGEsYj14LmksXz1jLmlzSGllcmFyY2h5Um9vdChpKSx3PWMuZ2V0UGFyZW50KG0saSksVD1jLmdldFZhbHVlKGkpLGs9ZnVuY3Rpb24odCl7cmV0dXJuIHMuY2FzdE9wdGlvbih5LGIsdCl9LEE9aygiaG92ZXJ0ZW1wbGF0ZSIpLE09by5jYXN0SG92ZXJpbmZvKHksYSxiKSxTPWEuc2VwYXJhdG9ycztpZihBfHxNJiYibm9uZSIhPT1NJiYic2tpcCIhPT1NKXt2YXIgRSxMO2cmJihFPXAuY3graS5weG1pZFswXSooMS1pLnJJbnNjcmliZWQpLEw9cC5jeStpLnB4bWlkWzFdKigxLWkuckluc2NyaWJlZCkpLHYmJihFPWkuX2hvdmVyWCxMPWkuX2hvdmVyWSk7dmFyIEMsUD17fSxJPVtdLE89W10sej1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PUkuaW5kZXhPZih0KX07TSYmKEk9ImFsbCI9PT1NP3kuX21vZHVsZS5hdHRyaWJ1dGVzLmhvdmVyaW5mby5mbGFnczpNLnNwbGl0KCIrIikpLFAubGFiZWw9eC5sYWJlbCx6KCJsYWJlbCIpJiZQLmxhYmVsJiZPLnB1c2goUC5sYWJlbCkseC5oYXNPd25Qcm9wZXJ0eSgidiIpJiYoUC52YWx1ZT14LnYsUC52YWx1ZUxhYmVsPXUoUC52YWx1ZSxTKSx6KCJ2YWx1ZSIpJiZPLnB1c2goUC52YWx1ZUxhYmVsKSksUC5jdXJyZW50UGF0aD1pLmN1cnJlbnRQYXRoPWMuZ2V0UGF0aChpLmRhdGEpLHooImN1cnJlbnQgcGF0aCIpJiYhXyYmTy5wdXNoKFAuY3VycmVudFBhdGgpO3ZhciBEPVtdLFI9ZnVuY3Rpb24oKXstMT09PUQuaW5kZXhPZihDKSYmKE8ucHVzaChDKSxELnB1c2goQykpfTtQLnBlcmNlbnRQYXJlbnQ9aS5wZXJjZW50UGFyZW50PVQvYy5nZXRWYWx1ZSh3KSxQLnBhcmVudD1pLnBhcmVudFN0cmluZz1jLmdldFB0TGFiZWwodykseigicGVyY2VudCBwYXJlbnQiKSYmKEM9Yy5mb3JtYXRQZXJjZW50KFAucGVyY2VudFBhcmVudCxTKSsiIG9mICIrUC5wYXJlbnQsUigpKSxQLnBlcmNlbnRFbnRyeT1pLnBlcmNlbnRFbnRyeT1UL2MuZ2V0VmFsdWUoZSksUC5lbnRyeT1pLmVudHJ5PWMuZ2V0UHRMYWJlbChlKSwheigicGVyY2VudCBlbnRyeSIpfHxffHxpLm9uUGF0aGJhcnx8KEM9Yy5mb3JtYXRQZXJjZW50KFAucGVyY2VudEVudHJ5LFMpKyIgb2YgIitQLmVudHJ5LFIoKSksUC5wZXJjZW50Um9vdD1pLnBlcmNlbnRSb290PVQvYy5nZXRWYWx1ZShtKSxQLnJvb3Q9aS5yb290PWMuZ2V0UHRMYWJlbChtKSx6KCJwZXJjZW50IHJvb3QiKSYmIV8mJihDPWMuZm9ybWF0UGVyY2VudChQLnBlcmNlbnRSb290LFMpKyIgb2YgIitQLnJvb3QsUigpKSxQLnRleHQ9aygiaG92ZXJ0ZXh0Iil8fGsoInRleHQiKSx6KCJ0ZXh0IikmJihDPVAudGV4dCxzLmlzVmFsaWRUZXh0VmFsdWUoQykmJk8ucHVzaChDKSksbD1bZihpLHksaC5ldmVudERhdGFLZXlzKV07dmFyIEY9e3RyYWNlOnkseTpMLF94MDppLl94MCxfeDE6aS5feDEsX3kwOmkuX3kwLF95MTppLl95MSx0ZXh0Ok8uam9pbigiPGJyPiIpLG5hbWU6QXx8eigibmFtZSIpP3kubmFtZTp2b2lkIDAsY29sb3I6aygiaG92ZXJsYWJlbC5iZ2NvbG9yIil8fHguY29sb3IsYm9yZGVyQ29sb3I6aygiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6aygiaG92ZXJsYWJlbC5mb250LmZhbWlseSIpLGZvbnRTaXplOmsoImhvdmVybGFiZWwuZm9udC5zaXplIiksZm9udENvbG9yOmsoImhvdmVybGFiZWwuZm9udC5jb2xvciIpLG5hbWVMZW5ndGg6aygiaG92ZXJsYWJlbC5uYW1lbGVuZ3RoIiksdGV4dEFsaWduOmsoImhvdmVybGFiZWwuYWxpZ24iKSxob3ZlcnRlbXBsYXRlOkEsaG92ZXJ0ZW1wbGF0ZUxhYmVsczpQLGV2ZW50RGF0YTpsfTtnJiYoRi54MD1FLWkuckluc2NyaWJlZCppLnJweDEsRi54MT1FK2kuckluc2NyaWJlZCppLnJweDEsRi5pZGVhbEFsaWduPWkucHhtaWRbMF08MD8ibGVmdCI6InJpZ2h0IiksdiYmKEYueD1FLEYuaWRlYWxBbGlnbj1FPDA/ImxlZnQiOiJyaWdodCIpO3ZhciBCPVtdO28ubG9uZUhvdmVyKEYse2NvbnRhaW5lcjphLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjphLl9wYXBlci5ub2RlKCksZ2Q6cixpbk91dF9iYm94OkJ9KSxsWzBdLmJib3g9QlswXSxkLl9oYXNIb3ZlckxhYmVsPSEwfWlmKHYpe3ZhciBOPXQuc2VsZWN0KCJwYXRoLnN1cmZhY2UiKTtoLnN0eWxlT25lKE4saSx5LHtob3ZlcmVkOiEwfSl9ZC5faGFzSG92ZXJFdmVudD0hMCxyLmVtaXQoInBsb3RseV9ob3ZlciIse3BvaW50czpsfHxbZihpLHksaC5ldmVudERhdGFLZXlzKV0sZXZlbnQ6bi5ldmVudH0pfX0pKSx0Lm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKGUpe3ZhciBpPXIuX2Z1bGxMYXlvdXQsYT1yLl9mdWxsRGF0YVtkLmluZGV4XSxzPW4uc2VsZWN0KHRoaXMpLmRhdHVtKCk7aWYoZC5faGFzSG92ZXJFdmVudCYmKGUub3JpZ2luYWxFdmVudD1uLmV2ZW50LHIuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtwb2ludHM6W2YocyxhLGguZXZlbnREYXRhS2V5cyldLGV2ZW50Om4uZXZlbnR9KSxkLl9oYXNIb3ZlckV2ZW50PSExKSxkLl9oYXNIb3ZlckxhYmVsJiYoby5sb25lVW5ob3ZlcihpLl9ob3ZlcmxheWVyLm5vZGUoKSksZC5faGFzSG92ZXJMYWJlbD0hMSksdil7dmFyIGw9dC5zZWxlY3QoInBhdGguc3VyZmFjZSIpO2guc3R5bGVPbmUobCxzLGEse2hvdmVyZWQ6ITF9KX19KSksdC5vbigiY2xpY2siLChmdW5jdGlvbih0KXt2YXIgZT1yLl9mdWxsTGF5b3V0LGE9ci5fZnVsbERhdGFbZC5pbmRleF0scz1nJiYoYy5pc0hpZXJhcmNoeVJvb3QodCl8fGMuaXNMZWFmKHQpKSx1PWMuZ2V0UHRJZCh0KSxwPWMuaXNFbnRyeSh0KT9jLmZpbmRFbnRyeVdpdGhDaGlsZChtLHUpOmMuZmluZEVudHJ5V2l0aExldmVsKG0sdSksdj1jLmdldFB0SWQocCkseT17cG9pbnRzOltmKHQsYSxoLmV2ZW50RGF0YUtleXMpXSxldmVudDpuLmV2ZW50fTtzfHwoeS5uZXh0TGV2ZWw9dik7dmFyIHg9bC50cmlnZ2VySGFuZGxlcihyLCJwbG90bHlfIitkLnR5cGUrImNsaWNrIix5KTtpZighMSE9PXgmJmUuaG92ZXJtb2RlJiYoci5faG92ZXJkYXRhPVtmKHQsYSxoLmV2ZW50RGF0YUtleXMpXSxvLmNsaWNrKHIsbi5ldmVudCkpLCFzJiYhMSE9PXgmJiFyLl9kcmFnZ2luZyYmIXIuX3RyYW5zaXRpb25pbmcpe2kuY2FsbCgiX3N0b3JlRGlyZWN0R1VJRWRpdCIsYSxlLl90cmFjZVByZUdVSVthLnVpZF0se2xldmVsOmEubGV2ZWx9KTt2YXIgYj17ZGF0YTpbe2xldmVsOnZ9XSx0cmFjZXM6W2QuaW5kZXhdfSxfPXtmcmFtZTp7cmVkcmF3OiExLGR1cmF0aW9uOmgudHJhbnNpdGlvblRpbWV9LHRyYW5zaXRpb246e2R1cmF0aW9uOmgudHJhbnNpdGlvblRpbWUsZWFzaW5nOmgudHJhbnNpdGlvbkVhc2luZ30sbW9kZToiaW1tZWRpYXRlIixmcm9tY3VycmVudDohMH07by5sb25lVW5ob3ZlcihlLl9ob3ZlcmxheWVyLm5vZGUoKSksaS5jYWxsKCJhbmltYXRlIixyLGIsXyl9fSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NzksIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6Njc1LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL2V2ZW50cyI6NzY1LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi9waWUvaGVscGVycyI6MTE3MCwiLi9oZWxwZXJzIjoxMzA5LCJAcGxvdGx5L2QzIjo1OH1dLDEzMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksbz10KCIuLi9waWUvaGVscGVycyIpO2Z1bmN0aW9uIHModCl7cmV0dXJuIHQuZGF0YS5kYXRhLnBpZH1yLmZpbmRFbnRyeVdpdGhMZXZlbD1mdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybiBlJiZ0LmVhY2hBZnRlcigoZnVuY3Rpb24odCl7aWYoci5nZXRQdElkKHQpPT09ZSlyZXR1cm4gbj10LmNvcHkoKX0pKSxufHx0fSxyLmZpbmRFbnRyeVdpdGhDaGlsZD1mdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybiB0LmVhY2hBZnRlcigoZnVuY3Rpb24odCl7Zm9yKHZhciBpPXQuY2hpbGRyZW58fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtpZihyLmdldFB0SWQobyk9PT1lKXJldHVybiBuPXQuY29weSgpfX0pKSxufHx0fSxyLmlzRW50cnk9ZnVuY3Rpb24odCl7cmV0dXJuIXQucGFyZW50fSxyLmlzTGVhZj1mdW5jdGlvbih0KXtyZXR1cm4hdC5jaGlsZHJlbn0sci5nZXRQdElkPWZ1bmN0aW9uKHQpe3JldHVybiB0LmRhdGEuZGF0YS5pZH0sci5nZXRQdExhYmVsPWZ1bmN0aW9uKHQpe3JldHVybiB0LmRhdGEuZGF0YS5sYWJlbH0sci5nZXRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0sci5pc0hpZXJhcmNoeVJvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIiI9PT1zKHQpfSxyLnNldFNsaWNlQ3Vyc29yPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uLmlzVHJhbnNpdGlvbmluZztpZighaSl7dmFyIG89dC5kYXR1bSgpO2k9bi5oaWRlT25Sb290JiZyLmlzSGllcmFyY2h5Um9vdChvKXx8bi5oaWRlT25MZWF2ZXMmJnIuaXNMZWFmKG8pfWEodCxpP251bGw6InBvaW50ZXIiKX0sci5nZXRJbnNpZGVUZXh0Rm9udEtleT1mdW5jdGlvbih0LGUscixpLGEpe3ZhciBvPShhfHx7fSkub25QYXRoYmFyPyJwYXRoYmFyLnRleHRmb250IjoiaW5zaWRldGV4dGZvbnQiLHM9ci5kYXRhLmRhdGEuaTtyZXR1cm4gbi5jYXN0T3B0aW9uKGUscyxvKyIuIit0KXx8bi5jYXN0T3B0aW9uKGUscywidGV4dGZvbnQuIit0KXx8aS5zaXplfSxyLmdldE91dHNpZGVUZXh0Rm9udEtleT1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1yLmRhdGEuZGF0YS5pO3JldHVybiBuLmNhc3RPcHRpb24oZSxhLCJvdXRzaWRldGV4dGZvbnQuIit0KXx8bi5jYXN0T3B0aW9uKGUsYSwidGV4dGZvbnQuIit0KXx8aS5zaXplfSxyLmlzT3V0c2lkZVRleHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4hdC5faGFzQ29sb3JzY2FsZSYmci5pc0hpZXJhcmNoeVJvb3QoZSl9LHIuZGV0ZXJtaW5lVGV4dEZvbnQ9ZnVuY3Rpb24odCxlLGEsbyl7cmV0dXJuIHIuaXNPdXRzaWRlVGV4dCh0LGUpP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm57Y29sb3I6ci5nZXRPdXRzaWRlVGV4dEZvbnRLZXkoImNvbG9yIix0LGUsbiksZmFtaWx5OnIuZ2V0T3V0c2lkZVRleHRGb250S2V5KCJmYW1pbHkiLHQsZSxuKSxzaXplOnIuZ2V0T3V0c2lkZVRleHRGb250S2V5KCJzaXplIix0LGUsbil9fSh0LGUsYSk6ZnVuY3Rpb24odCxlLGEsbyl7dmFyIHM9KG98fHt9KS5vblBhdGhiYXIsbD1lLmRhdGEuZGF0YSxjPWwuaSx1PW4uY2FzdE9wdGlvbih0LGMsKHM/InBhdGhiYXIudGV4dGZvbnQiOiJpbnNpZGV0ZXh0Zm9udCIpKyIuY29sb3IiKTtyZXR1cm4hdSYmdC5faW5wdXQudGV4dGZvbnQmJih1PW4uY2FzdE9wdGlvbih0Ll9pbnB1dCxjLCJ0ZXh0Zm9udC5jb2xvciIpKSx7Y29sb3I6dXx8aS5jb250cmFzdChsLmNvbG9yKSxmYW1pbHk6ci5nZXRJbnNpZGVUZXh0Rm9udEtleSgiZmFtaWx5Iix0LGUsYSxvKSxzaXplOnIuZ2V0SW5zaWRlVGV4dEZvbnRLZXkoInNpemUiLHQsZSxhLG8pfX0odCxlLGEsbyl9LHIuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4hISh0JiZ0LmR1cmF0aW9uPjApfSxyLmdldE1heERlcHRoPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm1heGRlcHRoPj0wP3QubWF4ZGVwdGg6MS8wfSxyLmlzSGVhZGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIShyLmlzTGVhZih0KXx8dC5kZXB0aD09PWUuX21heERlcHRoLTEpfSxyLmdldFBhcmVudD1mdW5jdGlvbih0LGUpe3JldHVybiByLmZpbmRFbnRyeVdpdGhMZXZlbCh0LHMoZSkpfSxyLmxpc3RQYXRoPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5wYXJlbnQ7aWYoIW4pcmV0dXJuW107dmFyIGk9ZT9bbi5kYXRhW2VdXTpbbl07cmV0dXJuIHIubGlzdFBhdGgobixlKS5jb25jYXQoaSl9LHIuZ2V0UGF0aD1mdW5jdGlvbih0KXtyZXR1cm4gci5saXN0UGF0aCh0LCJsYWJlbCIpLmpvaW4oIi8iKSsiLyJ9LHIuZm9ybWF0VmFsdWU9by5mb3JtYXRQaWVWYWx1ZSxyLmZvcm1hdFBlcmNlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmZvcm1hdFBlcmNlbnQodCwwKTtyZXR1cm4iMCUiPT09ciYmKHI9by5mb3JtYXRQaWVQZXJjZW50KHQsZSkpLHJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjc5NywiLi4vcGllL2hlbHBlcnMiOjExNzB9XSwxMzEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InN1bmJ1cnN0IixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6W10sYW5pbWF0YWJsZTohMCxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksbWV0YTp7fX19LHsiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEyMDksIi4vYXR0cmlidXRlcyI6MTMwMywiLi9iYXNlX3Bsb3QiOjEzMDQsIi4vY2FsYyI6MTMwNSwiLi9kZWZhdWx0cyI6MTMwNywiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTMxMSwiLi9sYXlvdXRfZGVmYXVsdHMiOjEzMTIsIi4vcGxvdCI6MTMxMywiLi9zdHlsZSI6MTMxNH1dLDEzMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzdW5idXJzdGNvbG9yd2F5Ont2YWxUeXBlOiJjb2xvcmxpc3QiLGVkaXRUeXBlOiJjYWxjIn0sZXh0ZW5kc3VuYnVyc3Rjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSwxMzEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1yKCJzdW5idXJzdGNvbG9yd2F5IixlLmNvbG9yd2F5KSxyKCJleHRlbmRzdW5idXJzdGNvbG9ycyIpfX0seyIuLi8uLi9saWIiOjc3NiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTMxMX1dLDEzMTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZDMtaGllcmFyY2h5IiksYT10KCJkMy1pbnRlcnBvbGF0ZSIpLmludGVycG9sYXRlLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLHU9Yy5yZWNvcmRNaW5UZXh0U2l6ZSxmPWMuY2xlYXJNaW5UZXh0U2l6ZSxoPXQoIi4uL3BpZS9wbG90IikscD10KCIuLi9waWUvaGVscGVycyIpLmdldFJvdGF0aW9uQW5nbGUsZD1oLmNvbXB1dGVUcmFuc2Zvcm0sbT1oLnRyYW5zZm9ybUluc2lkZVRleHQsZz10KCIuL3N0eWxlIikuc3R5bGVPbmUsdj10KCIuLi9iYXIvc3R5bGUiKS5yZXNpemVUZXh0LHk9dCgiLi9meCIpLHg9dCgiLi9jb25zdGFudHMiKSxiPXQoIi4vaGVscGVycyIpO2Z1bmN0aW9uIF8odCxlLGMsZil7dmFyIGg9dC5fZnVsbExheW91dCx2PSFoLnVuaWZvcm10ZXh0Lm1vZGUmJmIuaGFzVHJhbnNpdGlvbihmKSxfPW4uc2VsZWN0KGMpLnNlbGVjdEFsbCgiZy5zbGljZSIpLFQ9ZVswXSxrPVQudHJhY2UsQT1ULmhpZXJhcmNoeSxNPWIuZmluZEVudHJ5V2l0aExldmVsKEEsay5sZXZlbCksUz1iLmdldE1heERlcHRoKGspLEU9aC5fc2l6ZSxMPWsuZG9tYWluLEM9RS53KihMLnhbMV0tTC54WzBdKSxQPUUuaCooTC55WzFdLUwueVswXSksST0uNSpNYXRoLm1pbihDLFApLE89VC5jeD1FLmwrRS53KihMLnhbMV0rTC54WzBdKS8yLHo9VC5jeT1FLnQrRS5oKigxLUwueVswXSktUC8yO2lmKCFNKXJldHVybiBfLnJlbW92ZSgpO3ZhciBEPW51bGwsUj17fTt2JiZfLmVhY2goKGZ1bmN0aW9uKHQpe1JbYi5nZXRQdElkKHQpXT17cnB4MDp0LnJweDAscnB4MTp0LnJweDEseDA6dC54MCx4MTp0LngxLHRyYW5zZm9ybTp0LnRyYW5zZm9ybX0sIUQmJmIuaXNFbnRyeSh0KSYmKEQ9dCl9KSk7dmFyIEY9ZnVuY3Rpb24odCl7cmV0dXJuIGkucGFydGl0aW9uKCkuc2l6ZShbMipNYXRoLlBJLHQuaGVpZ2h0KzFdKSh0KX0oTSkuZGVzY2VuZGFudHMoKSxCPU0uaGVpZ2h0KzEsTj0wLGo9UztULmhhc011bHRpcGxlUm9vdHMmJmIuaXNIaWVyYXJjaHlSb290KE0pJiYoRj1GLnNsaWNlKDEpLEItPTEsTj0xLGorPTEpLEY9Ri5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnkxPD1qfSkpO3ZhciBVPXAoay5yb3RhdGlvbik7VSYmRi5mb3JFYWNoKChmdW5jdGlvbih0KXt0LngwKz1VLHQueDErPVV9KSk7dmFyIFY9TWF0aC5taW4oQixTKSxIPWZ1bmN0aW9uKHQpe3JldHVybih0LU4pL1YqSX0scT1mdW5jdGlvbih0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpLC10Kk1hdGguc2luKGUpXX0sRz1mdW5jdGlvbih0KXtyZXR1cm4gcy5wYXRoQW5udWx1cyh0LnJweDAsdC5ycHgxLHQueDAsdC54MSxPLHopfSxZPWZ1bmN0aW9uKHQpe3JldHVybiBPK3codClbMF0qKHQudHJhbnNmb3JtLnJDZW50ZXJ8fDApKyh0LnRyYW5zZm9ybS54fHwwKX0sVz1mdW5jdGlvbih0KXtyZXR1cm4geit3KHQpWzFdKih0LnRyYW5zZm9ybS5yQ2VudGVyfHwwKSsodC50cmFuc2Zvcm0ueXx8MCl9OyhfPV8uZGF0YShGLGIuZ2V0UHRJZCkpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2xpY2UiLCEwKSx2P18uZXhpdCgpLnRyYW5zaXRpb24oKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3Quc2VsZWN0KCJwYXRoLnN1cmZhY2UiKS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJkIiwoZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGUscj1iLmdldFB0SWQodCksbj1SW3JdLGk9UltiLmdldFB0SWQoTSldO2lmKGkpe3ZhciBvPSh0LngxPmkueDE/MipNYXRoLlBJOjApK1U7ZT10LnJweDE8aS5ycHgxP3t4MDp0LngwLHgxOnQueDEscnB4MDowLHJweDE6MH06e3gwOm8seDE6byxycHgwOnQucnB4MCxycHgxOnQucnB4MX19ZWxzZXt2YXIgcyxsPWIuZ2V0UHRJZCh0LnBhcmVudCk7Xy5lYWNoKChmdW5jdGlvbih0KXtpZihiLmdldFB0SWQodCk9PT1sKXJldHVybiBzPXR9KSk7dmFyIGMsdT1zLmNoaWxkcmVuO3UuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtpZihiLmdldFB0SWQodCk9PT1yKXJldHVybiBjPWV9KSk7dmFyIGY9dS5sZW5ndGgsaD1hKHMueDAscy54MSk7ZT17cnB4MDpJLHJweDE6SSx4MDpoKGMvZikseDE6aCgoYysxKS9mKX19cmV0dXJuIGEobixlKX0odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBHKGUodCkpfX0pKSx0LnNlbGVjdCgiZy5zbGljZXRleHQiKS5hdHRyKCJvcGFjaXR5IiwwKX0pKS5yZW1vdmUoKTpfLmV4aXQoKS5yZW1vdmUoKSxfLm9yZGVyKCk7dmFyIFg9bnVsbDtpZih2JiZEKXt2YXIgWj1iLmdldFB0SWQoRCk7Xy5lYWNoKChmdW5jdGlvbih0KXtudWxsPT09WCYmYi5nZXRQdElkKHQpPT09WiYmKFg9dC54MSl9KSl9dmFyIEo9XztmdW5jdGlvbiBLKHQpe3ZhciBlPXQucGFyZW50LHI9UltiLmdldFB0SWQoZSldLG49e307aWYocil7dmFyIGk9ZS5jaGlsZHJlbixvPWkuaW5kZXhPZih0KSxzPWkubGVuZ3RoLGw9YShyLngwLHIueDEpO24ueDA9bChvL3MpLG4ueDE9bChvL3MpfWVsc2Ugbi54MD1uLngxPTA7cmV0dXJuIG59diYmKEo9Si50cmFuc2l0aW9uKCkuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCh0aGlzKTtiLnNldFNsaWNlQ3Vyc29yKGUsdCx7aGlkZU9uUm9vdDohMCxoaWRlT25MZWF2ZXM6ITAsaXNUcmFuc2l0aW9uaW5nOiExfSl9KSkpLEouZWFjaCgoZnVuY3Rpb24oaSl7dmFyIGM9bi5zZWxlY3QodGhpcyksZj1zLmVuc3VyZVNpbmdsZShjLCJwYXRoIiwic3VyZmFjZSIsKGZ1bmN0aW9uKHQpe3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSk7aS5ycHgwPUgoaS55MCksaS5ycHgxPUgoaS55MSksaS54bWlkPShpLngwK2kueDEpLzIsaS5weG1pZD1xKGkucnB4MSxpLnhtaWQpLGkubWlkYW5nbGU9LShpLnhtaWQtTWF0aC5QSS8yKSxpLnN0YXJ0YW5nbGU9LShpLngwLU1hdGguUEkvMiksaS5zdG9wYW5nbGU9LShpLngxLU1hdGguUEkvMiksaS5oYWxmYW5nbGU9LjUqTWF0aC5taW4ocy5hbmdsZURlbHRhKGkueDAsaS54MSl8fE1hdGguUEksTWF0aC5QSSksaS5yaW5nPTEtaS5ycHgwL2kucnB4MSxpLnJJbnNjcmliZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10LnJweDAmJnMuaXNGdWxsQ2lyY2xlKFt0LngwLHQueDFdKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMS8oMSsxL01hdGguc2luKHQuaGFsZmFuZ2xlKSksdC5yaW5nLzIpKX0oaSksdj9mLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLChmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZSxyPVJbYi5nZXRQdElkKHQpXSxuPXt4MDp0LngwLHgxOnQueDEscnB4MDp0LnJweDAscnB4MTp0LnJweDF9O2lmKHIpZT1yO2Vsc2UgaWYoRClpZih0LnBhcmVudClpZihYKXt2YXIgaT0odC54MT5YPzIqTWF0aC5QSTowKStVO2U9e3gwOmkseDE6aX19ZWxzZSBlPXtycHgwOkkscnB4MTpJfSxzLmV4dGVuZEZsYXQoZSxLKHQpKTtlbHNlIGU9e3JweDA6MCxycHgxOjB9O2Vsc2UgZT17eDA6VSx4MTpVfTtyZXR1cm4gYShlLG4pfSh0KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEcoZSh0KSl9fSkpOmYuYXR0cigiZCIsRyksYy5jYWxsKHksTSx0LGUse2V2ZW50RGF0YUtleXM6eC5ldmVudERhdGFLZXlzLHRyYW5zaXRpb25UaW1lOnguQ0xJQ0tfVFJBTlNJVElPTl9USU1FLHRyYW5zaXRpb25FYXNpbmc6eC5DTElDS19UUkFOU0lUSU9OX0VBU0lOR30pLmNhbGwoYi5zZXRTbGljZUN1cnNvcix0LHtoaWRlT25Sb290OiEwLGhpZGVPbkxlYXZlczohMCxpc1RyYW5zaXRpb25pbmc6dC5fdHJhbnNpdGlvbmluZ30pLGYuY2FsbChnLGksayk7dmFyIHA9cy5lbnN1cmVTaW5nbGUoYywiZyIsInNsaWNldGV4dCIpLF89cy5lbnN1cmVTaW5nbGUocCwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksdz1zLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LGIuZGV0ZXJtaW5lVGV4dEZvbnQoayxpLGguZm9udCkpO18udGV4dChyLmZvcm1hdFNsaWNlTGFiZWwoaSxNLGssZSxoKSkuY2xhc3NlZCgic2xpY2V0ZXh0IiwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKG8uZm9udCx3KS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHQpO3ZhciBBPW8uYkJveChfLm5vZGUoKSk7aS50cmFuc2Zvcm09bShBLGksVCksaS50cmFuc2Zvcm0udGFyZ2V0WD1ZKGkpLGkudHJhbnNmb3JtLnRhcmdldFk9VyhpKTt2YXIgUz1mdW5jdGlvbih0LGUpe3ZhciByPXQudHJhbnNmb3JtO3JldHVybiBkKHIsZSksci5mb250U2l6ZT13LnNpemUsdShrLnR5cGUscixoKSxzLmdldFRleHRUcmFuc2Zvcm0ocil9O3Y/Xy50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZSxyPVJbYi5nZXRQdElkKHQpXSxuPXQudHJhbnNmb3JtO2lmKHIpZT1yO2Vsc2UgaWYoZT17cnB4MTp0LnJweDEsdHJhbnNmb3JtOnt0ZXh0UG9zQW5nbGU6bi50ZXh0UG9zQW5nbGUsc2NhbGU6MCxyb3RhdGU6bi5yb3RhdGUsckNlbnRlcjpuLnJDZW50ZXIseDpuLngseTpuLnl9fSxEKWlmKHQucGFyZW50KWlmKFgpe3ZhciBpPXQueDE+WD8yKk1hdGguUEk6MDtlLngwPWUueDE9aX1lbHNlIHMuZXh0ZW5kRmxhdChlLEsodCkpO2Vsc2UgZS54MD1lLngxPVU7ZWxzZSBlLngwPWUueDE9VTt2YXIgbz1hKGUudHJhbnNmb3JtLnRleHRQb3NBbmdsZSx0LnRyYW5zZm9ybS50ZXh0UG9zQW5nbGUpLGw9YShlLnJweDEsdC5ycHgxKSxjPWEoZS54MCx0LngwKSxmPWEoZS54MSx0LngxKSxwPWEoZS50cmFuc2Zvcm0uc2NhbGUsbi5zY2FsZSksZD1hKGUudHJhbnNmb3JtLnJvdGF0ZSxuLnJvdGF0ZSksbT0wPT09bi5yQ2VudGVyPzM6MD09PWUudHJhbnNmb3JtLnJDZW50ZXI/MS8zOjEsZz1hKGUudHJhbnNmb3JtLnJDZW50ZXIsbi5yQ2VudGVyKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9bCh0KSxyPWModCksaT1mKHQpLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGcoTWF0aC5wb3codCxtKSl9KHQpLHM9e3B4bWlkOnEoZSwocitpKS8yKSxycHgxOmUsdHJhbnNmb3JtOnt0ZXh0UG9zQW5nbGU6byh0KSxyQ2VudGVyOmEseDpuLngseTpuLnl9fTtyZXR1cm4gdShrLnR5cGUsbixoKSx7dHJhbnNmb3JtOnt0YXJnZXRYOlkocyksdGFyZ2V0WTpXKHMpLHNjYWxlOnAodCkscm90YXRlOmQodCksckNlbnRlcjphfX19fSh0KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFMoZSh0KSxBKX19KSk6Xy5hdHRyKCJ0cmFuc2Zvcm0iLFMoaSxBKSl9KSl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gZT10LnJweDEscj10LnRyYW5zZm9ybS50ZXh0UG9zQW5nbGUsW2UqTWF0aC5zaW4ociksLWUqTWF0aC5jb3MocildO3ZhciBlLHJ9ci5wbG90PWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLG8scz10Ll9mdWxsTGF5b3V0LGw9cy5fc3VuYnVyc3RsYXllcixjPSFyLHU9IXMudW5pZm9ybXRleHQubW9kZSYmYi5oYXNUcmFuc2l0aW9uKHIpOyhmKCJzdW5idXJzdCIscyksKGE9bC5zZWxlY3RBbGwoImcudHJhY2Uuc3VuYnVyc3QiKS5kYXRhKGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0cmFjZSIsITApLmNsYXNzZWQoInN1bmJ1cnN0IiwhMCkuYXR0cigic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKSxhLm9yZGVyKCksdSk/KGkmJihvPWkoKSksbi50cmFuc2l0aW9uKCkuZHVyYXRpb24oci5kdXJhdGlvbikuZWFzZShyLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtvJiZvKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtvJiZvKCl9KSkuZWFjaCgoZnVuY3Rpb24oKXtsLnNlbGVjdEFsbCgiZy50cmFjZSIpLmVhY2goKGZ1bmN0aW9uKGUpe18odCxlLHRoaXMscil9KSl9KSkpOihhLmVhY2goKGZ1bmN0aW9uKGUpe18odCxlLHRoaXMscil9KSkscy51bmlmb3JtdGV4dC5tb2RlJiZ2KHQscy5fc3VuYnVyc3RsYXllci5zZWxlY3RBbGwoIi50cmFjZSIpLCJzdW5idXJzdCIpKTtjJiZhLmV4aXQoKS5yZW1vdmUoKX0sci5mb3JtYXRTbGljZUxhYmVsPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9ci50ZXh0dGVtcGxhdGUsbz1yLnRleHRpbmZvO2lmKCEoYXx8byYmIm5vbmUiIT09bykpcmV0dXJuIiI7dmFyIGw9aS5zZXBhcmF0b3JzLGM9blswXSx1PXQuZGF0YS5kYXRhLGY9Yy5oaWVyYXJjaHksaD1iLmlzSGllcmFyY2h5Um9vdCh0KSxwPWIuZ2V0UGFyZW50KGYsdCksZD1iLmdldFZhbHVlKHQpO2lmKCFhKXt2YXIgbSxnPW8uc3BsaXQoIisiKSx2PWZ1bmN0aW9uKHQpe3JldHVybi0xIT09Zy5pbmRleE9mKHQpfSx5PVtdO2lmKHYoImxhYmVsIikmJnUubGFiZWwmJnkucHVzaCh1LmxhYmVsKSx1Lmhhc093blByb3BlcnR5KCJ2IikmJnYoInZhbHVlIikmJnkucHVzaChiLmZvcm1hdFZhbHVlKHUudixsKSksIWgpe3YoImN1cnJlbnQgcGF0aCIpJiZ5LnB1c2goYi5nZXRQYXRoKHQuZGF0YSkpO3ZhciB4PTA7digicGVyY2VudCBwYXJlbnQiKSYmeCsrLHYoInBlcmNlbnQgZW50cnkiKSYmeCsrLHYoInBlcmNlbnQgcm9vdCIpJiZ4Kys7dmFyIF89eD4xO2lmKHgpe3ZhciB3LFQ9ZnVuY3Rpb24odCl7bT1iLmZvcm1hdFBlcmNlbnQodyxsKSxfJiYobSs9IiBvZiAiK3QpLHkucHVzaChtKX07digicGVyY2VudCBwYXJlbnQiKSYmIWgmJih3PWQvYi5nZXRWYWx1ZShwKSxUKCJwYXJlbnQiKSksdigicGVyY2VudCBlbnRyeSIpJiYodz1kL2IuZ2V0VmFsdWUoZSksVCgiZW50cnkiKSksdigicGVyY2VudCByb290IikmJih3PWQvYi5nZXRWYWx1ZShmKSxUKCJyb290IikpfX1yZXR1cm4gdigidGV4dCIpJiYobT1zLmNhc3RPcHRpb24ocix1LmksInRleHQiKSxzLmlzVmFsaWRUZXh0VmFsdWUobSkmJnkucHVzaChtKSkseS5qb2luKCI8YnI+Iil9dmFyIGs9cy5jYXN0T3B0aW9uKHIsdS5pLCJ0ZXh0dGVtcGxhdGUiKTtpZighaylyZXR1cm4iIjt2YXIgQT17fTt1LmxhYmVsJiYoQS5sYWJlbD11LmxhYmVsKSx1Lmhhc093blByb3BlcnR5KCJ2IikmJihBLnZhbHVlPXUudixBLnZhbHVlTGFiZWw9Yi5mb3JtYXRWYWx1ZSh1LnYsbCkpLEEuY3VycmVudFBhdGg9Yi5nZXRQYXRoKHQuZGF0YSksaHx8KEEucGVyY2VudFBhcmVudD1kL2IuZ2V0VmFsdWUocCksQS5wZXJjZW50UGFyZW50TGFiZWw9Yi5mb3JtYXRQZXJjZW50KEEucGVyY2VudFBhcmVudCxsKSxBLnBhcmVudD1iLmdldFB0TGFiZWwocCkpLEEucGVyY2VudEVudHJ5PWQvYi5nZXRWYWx1ZShlKSxBLnBlcmNlbnRFbnRyeUxhYmVsPWIuZm9ybWF0UGVyY2VudChBLnBlcmNlbnRFbnRyeSxsKSxBLmVudHJ5PWIuZ2V0UHRMYWJlbChlKSxBLnBlcmNlbnRSb290PWQvYi5nZXRWYWx1ZShmKSxBLnBlcmNlbnRSb290TGFiZWw9Yi5mb3JtYXRQZXJjZW50KEEucGVyY2VudFJvb3QsbCksQS5yb290PWIuZ2V0UHRMYWJlbChmKSx1Lmhhc093blByb3BlcnR5KCJjb2xvciIpJiYoQS5jb2xvcj11LmNvbG9yKTt2YXIgTT1zLmNhc3RPcHRpb24ocix1LmksInRleHQiKTtyZXR1cm4ocy5pc1ZhbGlkVGV4dFZhbHVlKE0pfHwiIj09PU0pJiYoQS50ZXh0PU0pLEEuY3VzdG9tZGF0YT1zLmNhc3RPcHRpb24ocix1LmksImN1c3RvbWRhdGEiKSxzLnRleHR0ZW1wbGF0ZVN0cmluZyhrLEEsaS5fZDNsb2NhbGUsQSxyLl9tZXRhfHx7fSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDIsIi4uL2Jhci9zdHlsZSI6OTI4LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo5MzAsIi4uL3BpZS9oZWxwZXJzIjoxMTcwLCIuLi9waWUvcGxvdCI6MTE3NCwiLi9jb25zdGFudHMiOjEzMDYsIi4vZngiOjEzMDgsIi4vaGVscGVycyI6MTMwOSwiLi9zdHlsZSI6MTMxNCwiQHBsb3RseS9kMyI6NTgsImQzLWhpZXJhcmNoeSI6MTYzLCJkMy1pbnRlcnBvbGF0ZSI6MTY0fV0sMTMxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5yZXNpemVUZXh0O2Z1bmN0aW9uIHModCxlLHIpe3ZhciBuPWUuZGF0YS5kYXRhLG89IWUuY2hpbGRyZW4scz1uLmksbD1hLmNhc3RPcHRpb24ocixzLCJtYXJrZXIubGluZS5jb2xvciIpfHxpLmRlZmF1bHRMaW5lLGM9YS5jYXN0T3B0aW9uKHIscywibWFya2VyLmxpbmUud2lkdGgiKXx8MDt0LnN0eWxlKCJzdHJva2Utd2lkdGgiLGMpLmNhbGwoaS5maWxsLG4uY29sb3IpLmNhbGwoaS5zdHJva2UsbCkuc3R5bGUoIm9wYWNpdHkiLG8/ci5sZWFmLm9wYWNpdHk6bnVsbCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9zdW5idXJzdGxheWVyLnNlbGVjdEFsbCgiLnRyYWNlIik7byh0LGUsInN1bmJ1cnN0IiksZS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXRbMF0udHJhY2U7ZS5zdHlsZSgib3BhY2l0eSIsci5vcGFjaXR5KSxlLnNlbGVjdEFsbCgicGF0aC5zdXJmYWNlIikuZWFjaCgoZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuY2FsbChzLHQscil9KSl9KSl9LHN0eWxlT25lOnN9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vbGliIjo3NzYsIi4uL2Jhci91bmlmb3JtX3RleHQiOjkzMCwiQHBsb3RseS9kMyI6NTh9XSwxMzE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmF4aXNIb3ZlckZvcm1hdCxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtmdW5jdGlvbiB1KHQpe3JldHVybntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxzdGFydDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6InBsb3QifSxlbmQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOiJwbG90In0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsbWluOjAsZWRpdFR5cGU6InBsb3QifSxwcm9qZWN0Ont4Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx5Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx6Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LHVzZWNvbG9ybWFwOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxtYXg6MTYsZGZsdDoyfSxoaWdobGlnaHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGhpZ2hsaWdodGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxoaWdobGlnaHR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxtYXg6MTYsZGZsdDoyfX19dmFyIGY9ZS5leHBvcnRzPWMobCh7ejp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHg6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGVtcGxhdGU6bygpLHhob3ZlcmZvcm1hdDphKCJ4IikseWhvdmVyZm9ybWF0OmEoInkiKSx6aG92ZXJmb3JtYXQ6YSgieiIpLGNvbm5lY3RnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sc3VyZmFjZWNvbG9yOnt2YWxUeXBlOiJkYXRhX2FycmF5In19LGkoIiIse2NvbG9yQXR0cjoieiBvciBzdXJmYWNlY29sb3IiLHNob3dTY2FsZURmbHQ6ITAsYXV0b0NvbG9yRGZsdDohMSxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtjb250b3Vyczp7eDp1KCkseTp1KCksejp1KCl9LGhpZGVzdXJmYWNlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsaWdodHBvc2l0aW9uOnt4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDoxMH0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTFlNSxtYXg6MWU1LGRmbHQ6MWU0fSx6Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDowfX0sbGlnaHRpbmc6e2FtYmllbnQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouOH0sZGlmZnVzZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi44fSxzcGVjdWxhcjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MixkZmx0Oi4wNX0scm91Z2huZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjV9LGZyZXNuZWw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjUsZGZsdDouMn19LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxvcGFjaXR5c2NhbGU6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxfZGVwcmVjYXRlZDp7emF1dG86bCh7fSxpLnphdXRvLHt9KSx6bWluOmwoe30saS56bWluLHt9KSx6bWF4Omwoe30saS56bWF4LHt9KX0saG92ZXJpbmZvOmwoe30scy5ob3ZlcmluZm8pLHNob3dsZWdlbmQ6bCh7fSxzLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0pLCJjYWxjIiwibmVzdGVkIik7Zi54LmVkaXRUeXBlPWYueS5lZGl0VHlwZT1mLnouZWRpdFR5cGU9ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGYudHJhbnNmb3Jtcz12b2lkIDB9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgwOSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODIzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6ODMwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTl9XSwxMzE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZS5zdXJmYWNlY29sb3I/bih0LGUse3ZhbHM6ZS5zdXJmYWNlY29sb3IsY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSk6bih0LGUse3ZhbHM6ZS56LGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjQ3fV0sMTMxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zdXJmYWNlM2QiKSxpPXQoIm5kYXJyYXkiKSxhPXQoIm5kYXJyYXktbGluZWFyLWludGVycG9sYXRlIikuZDIsbz10KCIuLi9oZWF0bWFwL2ludGVycDJkIikscz10KCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyIpLGw9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheSxjPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUsdT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksZj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cztmdW5jdGlvbiBoKHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLnN1cmZhY2U9ZSx0aGlzLmRhdGE9bnVsbCx0aGlzLnNob3dDb250b3VyPVshMSwhMSwhMV0sdGhpcy5jb250b3VyU3RhcnQ9W251bGwsbnVsbCxudWxsXSx0aGlzLmNvbnRvdXJFbmQ9W251bGwsbnVsbCxudWxsXSx0aGlzLmNvbnRvdXJTaXplPVswLDAsMF0sdGhpcy5taW5WYWx1ZXM9WzEvMCwxLzAsMS8wXSx0aGlzLm1heFZhbHVlcz1bLTEvMCwtMS8wLC0xLzBdLHRoaXMuZGF0YVNjYWxlWD0xLHRoaXMuZGF0YVNjYWxlWT0xLHRoaXMucmVmaW5lRGF0YT0hMCx0aGlzLm9iamVjdE9mZnNldD1bMCwwLDBdfXZhciBwPWgucHJvdG90eXBlO3AuZ2V0WGF0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWwodGhpcy5kYXRhLngpP2wodGhpcy5kYXRhLnhbMF0pP3RoaXMuZGF0YS54W2VdW3RdOnRoaXMuZGF0YS54W3RdOnQ7cmV0dXJuIHZvaWQgMD09PXI/aTpuLmQybChpLDAscil9LHAuZ2V0WWF0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWwodGhpcy5kYXRhLnkpP2wodGhpcy5kYXRhLnlbMF0pP3RoaXMuZGF0YS55W2VdW3RdOnRoaXMuZGF0YS55W2VdOmU7cmV0dXJuIHZvaWQgMD09PXI/aTpuLmQybChpLDAscil9LHAuZ2V0WmF0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuZGF0YS56W2VdW3RdO3JldHVybiBudWxsPT09aSYmdGhpcy5kYXRhLmNvbm5lY3RnYXBzJiZ0aGlzLmRhdGEuX2ludGVycG9sYXRlZFomJihpPXRoaXMuZGF0YS5faW50ZXJwb2xhdGVkWltlXVt0XSksdm9pZCAwPT09cj9pOm4uZDJsKGksMCxyKX0scC5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0PT09dGhpcy5zdXJmYWNlKXt2YXIgZT0odC5kYXRhLmluZGV4WzBdLTEpL3RoaXMuZGF0YVNjYWxlWC0xLHI9KHQuZGF0YS5pbmRleFsxXS0xKS90aGlzLmRhdGFTY2FsZVktMSxuPU1hdGgubWF4KE1hdGgubWluKE1hdGgucm91bmQoZSksdGhpcy5kYXRhLnpbMF0ubGVuZ3RoLTEpLDApLGk9TWF0aC5tYXgoTWF0aC5taW4oTWF0aC5yb3VuZChyKSx0aGlzLmRhdGEuX3lsZW5ndGgtMSksMCk7dC5pbmRleD1bbixpXSx0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5nZXRYYXQobixpKSx0aGlzLmdldFlhdChuLGkpLHRoaXMuZ2V0WmF0KG4saSldLHQuZGF0YUNvb3JkaW5hdGU9W3RoaXMuZ2V0WGF0KG4saSx0aGlzLmRhdGEueGNhbGVuZGFyLHRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LnhheGlzKSx0aGlzLmdldFlhdChuLGksdGhpcy5kYXRhLnljYWxlbmRhcix0aGlzLnNjZW5lLmZ1bGxTY2VuZUxheW91dC55YXhpcyksdGhpcy5nZXRaYXQobixpLHRoaXMuZGF0YS56Y2FsZW5kYXIsdGhpcy5zY2VuZS5mdWxsU2NlbmVMYXlvdXQuemF4aXMpXTtmb3IodmFyIGE9MDthPDM7YSsrKXt2YXIgbz10LmRhdGFDb29yZGluYXRlW2FdO251bGwhPW8mJih0LmRhdGFDb29yZGluYXRlW2FdKj10aGlzLnNjZW5lLmRhdGFTY2FsZVthXSl9dmFyIHM9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkocykmJnNbaV0mJnZvaWQgMCE9PXNbaV1bbl0/dC50ZXh0TGFiZWw9c1tpXVtuXTp0LnRleHRMYWJlbD1zfHwiIix0LmRhdGEuZGF0YUNvb3JkaW5hdGU9dC5kYXRhQ29vcmRpbmF0ZS5zbGljZSgpLHRoaXMuc3VyZmFjZS5oaWdobGlnaHQodC5kYXRhKSx0aGlzLnNjZW5lLmdscGxvdC5zcGlrZXMucG9zaXRpb249dC5kYXRhQ29vcmRpbmF0ZSwhMH19O3ZhciBkPVsyLDMsNSw3LDExLDEzLDE3LDE5LDIzLDI5LDMxLDM3LDQxLDQzLDQ3LDUzLDU5LDYxLDY3LDcxLDczLDc5LDgzLDg5LDk3LDEwMSwxMDMsMTA3LDEwOSwxMTMsMTI3LDEzMSwxMzcsMTM5LDE0OSwxNTEsMTU3LDE2MywxNjcsMTczLDE3OSwxODEsMTkxLDE5MywxOTcsMTk5LDIxMSwyMjMsMjI3LDIyOSwyMzMsMjM5LDI0MSwyNTEsMjU3LDI2MywyNjksMjcxLDI3NywyODEsMjgzLDI5MywzMDcsMzExLDMxMywzMTcsMzMxLDMzNywzNDcsMzQ5LDM1MywzNTksMzY3LDM3MywzNzksMzgzLDM4OSwzOTcsNDAxLDQwOSw0MTksNDIxLDQzMSw0MzMsNDM5LDQ0Myw0NDksNDU3LDQ2MSw0NjMsNDY3LDQ3OSw0ODcsNDkxLDQ5OSw1MDMsNTA5LDUyMSw1MjMsNTQxLDU0Nyw1NTcsNTYzLDU2OSw1NzEsNTc3LDU4Nyw1OTMsNTk5LDYwMSw2MDcsNjEzLDYxNyw2MTksNjMxLDY0MSw2NDMsNjQ3LDY1Myw2NTksNjYxLDY3Myw2NzcsNjgzLDY5MSw3MDEsNzA5LDcxOSw3MjcsNzMzLDczOSw3NDMsNzUxLDc1Nyw3NjEsNzY5LDc3Myw3ODcsNzk3LDgwOSw4MTEsODIxLDgyMyw4MjcsODI5LDgzOSw4NTMsODU3LDg1OSw4NjMsODc3LDg4MSw4ODMsODg3LDkwNyw5MTEsOTE5LDkyOSw5MzcsOTQxLDk0Nyw5NTMsOTY3LDk3MSw5NzcsOTgzLDk5MSw5OTcsMTAwOSwxMDEzLDEwMTksMTAyMSwxMDMxLDEwMzMsMTAzOSwxMDQ5LDEwNTEsMTA2MSwxMDYzLDEwNjksMTA4NywxMDkxLDEwOTMsMTA5NywxMTAzLDExMDksMTExNywxMTIzLDExMjksMTE1MSwxMTUzLDExNjMsMTE3MSwxMTgxLDExODcsMTE5MywxMjAxLDEyMTMsMTIxNywxMjIzLDEyMjksMTIzMSwxMjM3LDEyNDksMTI1OSwxMjc3LDEyNzksMTI4MywxMjg5LDEyOTEsMTI5NywxMzAxLDEzMDMsMTMwNywxMzE5LDEzMjEsMTMyNywxMzYxLDEzNjcsMTM3MywxMzgxLDEzOTksMTQwOSwxNDIzLDE0MjcsMTQyOSwxNDMzLDE0MzksMTQ0NywxNDUxLDE0NTMsMTQ1OSwxNDcxLDE0ODEsMTQ4MywxNDg3LDE0ODksMTQ5MywxNDk5LDE1MTEsMTUyMywxNTMxLDE1NDMsMTU0OSwxNTUzLDE1NTksMTU2NywxNTcxLDE1NzksMTU4MywxNTk3LDE2MDEsMTYwNywxNjA5LDE2MTMsMTYxOSwxNjIxLDE2MjcsMTYzNywxNjU3LDE2NjMsMTY2NywxNjY5LDE2OTMsMTY5NywxNjk5LDE3MDksMTcyMSwxNzIzLDE3MzMsMTc0MSwxNzQ3LDE3NTMsMTc1OSwxNzc3LDE3ODMsMTc4NywxNzg5LDE4MDEsMTgxMSwxODIzLDE4MzEsMTg0NywxODYxLDE4NjcsMTg3MSwxODczLDE4NzcsMTg3OSwxODg5LDE5MDEsMTkwNywxOTEzLDE5MzEsMTkzMywxOTQ5LDE5NTEsMTk3MywxOTc5LDE5ODcsMTk5MywxOTk3LDE5OTksMjAwMywyMDExLDIwMTcsMjAyNywyMDI5LDIwMzksMjA1MywyMDYzLDIwNjksMjA4MSwyMDgzLDIwODcsMjA4OSwyMDk5LDIxMTEsMjExMywyMTI5LDIxMzEsMjEzNywyMTQxLDIxNDMsMjE1MywyMTYxLDIxNzksMjIwMywyMjA3LDIyMTMsMjIyMSwyMjM3LDIyMzksMjI0MywyMjUxLDIyNjcsMjI2OSwyMjczLDIyODEsMjI4NywyMjkzLDIyOTcsMjMwOSwyMzExLDIzMzMsMjMzOSwyMzQxLDIzNDcsMjM1MSwyMzU3LDIzNzEsMjM3NywyMzgxLDIzODMsMjM4OSwyMzkzLDIzOTksMjQxMSwyNDE3LDI0MjMsMjQzNywyNDQxLDI0NDcsMjQ1OSwyNDY3LDI0NzMsMjQ3NywyNTAzLDI1MjEsMjUzMSwyNTM5LDI1NDMsMjU0OSwyNTUxLDI1NTcsMjU3OSwyNTkxLDI1OTMsMjYwOSwyNjE3LDI2MjEsMjYzMywyNjQ3LDI2NTcsMjY1OSwyNjYzLDI2NzEsMjY3NywyNjgzLDI2ODcsMjY4OSwyNjkzLDI2OTksMjcwNywyNzExLDI3MTMsMjcxOSwyNzI5LDI3MzEsMjc0MSwyNzQ5LDI3NTMsMjc2NywyNzc3LDI3ODksMjc5MSwyNzk3LDI4MDEsMjgwMywyODE5LDI4MzMsMjgzNywyODQzLDI4NTEsMjg1NywyODYxLDI4NzksMjg4NywyODk3LDI5MDMsMjkwOSwyOTE3LDI5MjcsMjkzOSwyOTUzLDI5NTcsMjk2MywyOTY5LDI5NzEsMjk5OV07ZnVuY3Rpb24gbSh0LGUpe2lmKHQ8ZSlyZXR1cm4gMDtmb3IodmFyIHI9MDswPT09TWF0aC5mbG9vcih0JWUpOyl0Lz1lLHIrKztyZXR1cm4gcn1mdW5jdGlvbiBnKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjxkLmxlbmd0aDtyKyspe3ZhciBuPWRbcl07ZS5wdXNoKG0odCxuKSl9cmV0dXJuIGV9ZnVuY3Rpb24gdih0KXtmb3IodmFyIGU9Zyh0KSxyPXQsbj0wO248ZC5sZW5ndGg7bisrKWlmKGVbbl0+MCl7cj1kW25dO2JyZWFrfXJldHVybiByfWZ1bmN0aW9uIHkodCxlKXtpZighKHQ8MXx8ZTwxKSl7Zm9yKHZhciByPWcodCksbj1nKGUpLGk9MSxhPTA7YTxkLmxlbmd0aDthKyspaSo9TWF0aC5wb3coZFthXSxNYXRoLm1heChyW2FdLG5bYV0pKTtyZXR1cm4gaX19cC5jYWxjWG51bXM9ZnVuY3Rpb24odCl7dmFyIGUscj1bXTtmb3IoZT0xO2U8dDtlKyspe3ZhciBuPXRoaXMuZ2V0WGF0KGUtMSwwKSxpPXRoaXMuZ2V0WGF0KGUsMCk7cltlLTFdPWkhPT1uJiZudWxsIT1uJiZudWxsIT1pP01hdGguYWJzKGktbik6MH12YXIgYT0wO2ZvcihlPTE7ZTx0O2UrKylhKz1yW2UtMV07Zm9yKGU9MTtlPHQ7ZSsrKTA9PT1yW2UtMV0/cltlLTFdPTE6cltlLTFdPU1hdGgucm91bmQoYS9yW2UtMV0pO3JldHVybiByfSxwLmNhbGNZbnVtcz1mdW5jdGlvbih0KXt2YXIgZSxyPVtdO2ZvcihlPTE7ZTx0O2UrKyl7dmFyIG49dGhpcy5nZXRZYXQoMCxlLTEpLGk9dGhpcy5nZXRZYXQoMCxlKTtyW2UtMV09aSE9PW4mJm51bGwhPW4mJm51bGwhPWk/TWF0aC5hYnMoaS1uKTowfXZhciBhPTA7Zm9yKGU9MTtlPHQ7ZSsrKWErPXJbZS0xXTtmb3IoZT0xO2U8dDtlKyspMD09PXJbZS0xXT9yW2UtMV09MTpyW2UtMV09TWF0aC5yb3VuZChhL3JbZS0xXSk7cmV0dXJuIHJ9O3ZhciB4PVsxLDIsNCw2LDEyLDI0LDM2LDQ4LDYwLDEyMCwxODAsMjQwLDM2MCw3MjAsODQwLDEyNjBdLGI9eFs5XSxfPXhbMTNdO2Z1bmN0aW9uIHcodCxlLHIpe3ZhciBuPXJbOF0rclsyXSplWzBdK3JbNV0qZVsxXTtyZXR1cm4gdFswXT0ocls2XStyWzBdKmVbMF0rclszXSplWzFdKS9uLHRbMV09KHJbN10rclsxXSplWzBdK3JbNF0qZVsxXSkvbix0fWZ1bmN0aW9uIFQodCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9WzAsMF0sbz10LnNoYXBlWzBdLHM9dC5zaGFwZVsxXSxsPTA7bDxvO2wrKylmb3IodmFyIGM9MDtjPHM7YysrKXIoaSxbbCxjXSxuKSx0LnNldChsLGMsYShlLGlbMF0saVsxXSkpfSh0LGUsdyxyKSx0fWZ1bmN0aW9uIGsodCxlKXtmb3IodmFyIHI9ITEsbj0wO248dC5sZW5ndGg7bisrKWlmKGU9PT10W25dKXtyPSEwO2JyZWFrfSExPT09ciYmdC5wdXNoKGUpfXAuZXN0aW1hdGVTY2FsZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xK2Z1bmN0aW9uKHQpe2lmKDAhPT10Lmxlbmd0aCl7Zm9yKHZhciBlPTEscj0wO3I8dC5sZW5ndGg7cisrKWU9eShlLHRbcl0pO3JldHVybiBlfX0oMD09PWU/dGhpcy5jYWxjWG51bXModCk6dGhpcy5jYWxjWW51bXModCkpO3I8Yjspcio9Mjtmb3IoO3I+Xzspci0tLHIvPXYociksKytyPGImJihyPV8pO3ZhciBuPU1hdGgucm91bmQoci90KTtyZXR1cm4gbj4xP246MX0scC5yZWZpbmVDb29yZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuZGF0YVNjYWxlWCxyPXRoaXMuZGF0YVNjYWxlWSxuPXRbMF0uc2hhcGVbMF0sYT10WzBdLnNoYXBlWzFdLG89MHxNYXRoLmZsb29yKHRbMF0uc2hhcGVbMF0qZSsxKSxzPTB8TWF0aC5mbG9vcih0WzBdLnNoYXBlWzFdKnIrMSksbD0xK24rMSxjPTErYSsxLHU9aShuZXcgRmxvYXQzMkFycmF5KGwqYyksW2wsY10pLGY9WzEvZSwwLDAsMCwxL3IsMCwwLDAsMV0saD0wO2g8dC5sZW5ndGg7KytoKXt0aGlzLnN1cmZhY2UucGFkRmllbGQodSx0W2hdKTt2YXIgcD1pKG5ldyBGbG9hdDMyQXJyYXkobypzKSxbbyxzXSk7VChwLHUsZiksdFtoXT1wfX0scC5zZXRDb250b3VyTGV2ZWxzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49W1tdLFtdLFtdXSxpPVshMSwhMSwhMV0sYT0hMTtmb3IodD0wO3Q8MzsrK3QpaWYodGhpcy5zaG93Q29udG91clt0XSYmKGE9ITAsdGhpcy5jb250b3VyU2l6ZVt0XT4wJiZudWxsIT09dGhpcy5jb250b3VyU3RhcnRbdF0mJm51bGwhPT10aGlzLmNvbnRvdXJFbmRbdF0mJnRoaXMuY29udG91ckVuZFt0XT50aGlzLmNvbnRvdXJTdGFydFt0XSkpZm9yKGlbdF09ITAsZT10aGlzLmNvbnRvdXJTdGFydFt0XTtlPHRoaXMuY29udG91ckVuZFt0XTtlKz10aGlzLmNvbnRvdXJTaXplW3RdKXI9ZSp0aGlzLnNjZW5lLmRhdGFTY2FsZVt0XSxrKG5bdF0scik7aWYoYSl7dmFyIG89W1tdLFtdLFtdXTtmb3IodD0wO3Q8MzsrK3QpdGhpcy5zaG93Q29udG91clt0XSYmKG9bdF09aVt0XT9uW3RdOnRoaXMuc2NlbmUuY29udG91ckxldmVsc1t0XSk7dGhpcy5zdXJmYWNlLnVwZGF0ZSh7bGV2ZWxzOm99KX19LHAudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixhLGw9dGhpcy5zY2VuZSxoPWwuZnVsbFNjZW5lTGF5b3V0LHA9dGhpcy5zdXJmYWNlLGQ9Yyh0KSxtPWwuZGF0YVNjYWxlLGc9dC56WzBdLmxlbmd0aCx2PXQuX3lsZW5ndGgseT1sLmNvbnRvdXJMZXZlbHM7dGhpcy5kYXRhPXQ7dmFyIHg9W107Zm9yKGU9MDtlPDM7ZSsrKWZvcih4W2VdPVtdLHI9MDtyPGc7cisrKXhbZV1bcl09W107Zm9yKHI9MDtyPGc7cisrKWZvcihuPTA7bjx2O24rKyl4WzBdW3JdW25dPXRoaXMuZ2V0WGF0KHIsbix0LnhjYWxlbmRhcixoLnhheGlzKSx4WzFdW3JdW25dPXRoaXMuZ2V0WWF0KHIsbix0LnljYWxlbmRhcixoLnlheGlzKSx4WzJdW3JdW25dPXRoaXMuZ2V0WmF0KHIsbix0LnpjYWxlbmRhcixoLnpheGlzKTtpZih0LmNvbm5lY3RnYXBzKWZvcih0Ll9lbXB0eXBvaW50cz1zKHhbMl0pLG8oeFsyXSx0Ll9lbXB0eXBvaW50cyksdC5faW50ZXJwb2xhdGVkWj1bXSxyPTA7cjxnO3IrKylmb3IodC5faW50ZXJwb2xhdGVkWltyXT1bXSxuPTA7bjx2O24rKyl0Ll9pbnRlcnBvbGF0ZWRaW3JdW25dPXhbMl1bcl1bbl07Zm9yKGU9MDtlPDM7ZSsrKWZvcihyPTA7cjxnO3IrKylmb3Iobj0wO248djtuKyspbnVsbD09KGE9eFtlXVtyXVtuXSk/eFtlXVtyXVtuXT1OYU46YT14W2VdW3JdW25dKj1tW2VdO2ZvcihlPTA7ZTwzO2UrKylmb3Iocj0wO3I8ZztyKyspZm9yKG49MDtuPHY7bisrKW51bGwhPShhPXhbZV1bcl1bbl0pJiYodGhpcy5taW5WYWx1ZXNbZV0+YSYmKHRoaXMubWluVmFsdWVzW2VdPWEpLHRoaXMubWF4VmFsdWVzW2VdPGEmJih0aGlzLm1heFZhbHVlc1tlXT1hKSk7Zm9yKGU9MDtlPDM7ZSsrKXRoaXMub2JqZWN0T2Zmc2V0W2VdPS41Kih0aGlzLm1pblZhbHVlc1tlXSt0aGlzLm1heFZhbHVlc1tlXSk7Zm9yKGU9MDtlPDM7ZSsrKWZvcihyPTA7cjxnO3IrKylmb3Iobj0wO248djtuKyspbnVsbCE9KGE9eFtlXVtyXVtuXSkmJih4W2VdW3JdW25dLT10aGlzLm9iamVjdE9mZnNldFtlXSk7dmFyIGI9W2kobmV3IEZsb2F0MzJBcnJheShnKnYpLFtnLHZdKSxpKG5ldyBGbG9hdDMyQXJyYXkoZyp2KSxbZyx2XSksaShuZXcgRmxvYXQzMkFycmF5KGcqdiksW2csdl0pXTtmb3IoZT0wO2U8MztlKyspZm9yKHI9MDtyPGc7cisrKWZvcihuPTA7bjx2O24rKyliW2VdLnNldChyLG4seFtlXVtyXVtuXSk7eD1bXTt2YXIgdz17Y29sb3JtYXA6ZCxsZXZlbHM6W1tdLFtdLFtdXSxzaG93Q29udG91cjpbITAsITAsITBdLHNob3dTdXJmYWNlOiF0LmhpZGVzdXJmYWNlLGNvbnRvdXJQcm9qZWN0OltbITEsITEsITFdLFshMSwhMSwhMV0sWyExLCExLCExXV0sY29udG91cldpZHRoOlsxLDEsMV0sY29udG91ckNvbG9yOltbMSwxLDEsMV0sWzEsMSwxLDFdLFsxLDEsMSwxXV0sY29udG91clRpbnQ6WzEsMSwxXSxkeW5hbWljQ29sb3I6W1sxLDEsMSwxXSxbMSwxLDEsMV0sWzEsMSwxLDFdXSxkeW5hbWljV2lkdGg6WzEsMSwxXSxkeW5hbWljVGludDpbMSwxLDFdLG9wYWNpdHlzY2FsZTp0Lm9wYWNpdHlzY2FsZSxvcGFjaXR5OnQub3BhY2l0eX0sVD1mKHQpO2lmKHcuaW50ZW5zaXR5Qm91bmRzPVtULm1pbixULm1heF0sdC5zdXJmYWNlY29sb3Ipe3ZhciBrPWkobmV3IEZsb2F0MzJBcnJheShnKnYpLFtnLHZdKTtmb3Iocj0wO3I8ZztyKyspZm9yKG49MDtuPHY7bisrKWsuc2V0KHIsbix0LnN1cmZhY2Vjb2xvcltuXVtyXSk7Yi5wdXNoKGspfWVsc2Ugdy5pbnRlbnNpdHlCb3VuZHNbMF0qPW1bMl0sdy5pbnRlbnNpdHlCb3VuZHNbMV0qPW1bMl07KF88YlswXS5zaGFwZVswXXx8XzxiWzBdLnNoYXBlWzFdKSYmKHRoaXMucmVmaW5lRGF0YT0hMSksITA9PT10aGlzLnJlZmluZURhdGEmJih0aGlzLmRhdGFTY2FsZVg9dGhpcy5lc3RpbWF0ZVNjYWxlKGJbMF0uc2hhcGVbMF0sMCksdGhpcy5kYXRhU2NhbGVZPXRoaXMuZXN0aW1hdGVTY2FsZShiWzBdLnNoYXBlWzFdLDEpLDE9PT10aGlzLmRhdGFTY2FsZVgmJjE9PT10aGlzLmRhdGFTY2FsZVl8fHRoaXMucmVmaW5lQ29vcmRzKGIpKSx0LnN1cmZhY2Vjb2xvciYmKHcuaW50ZW5zaXR5PWIucG9wKCkpO3ZhciBBPVshMCwhMCwhMF0sTT1bIngiLCJ5IiwieiJdO2ZvcihlPTA7ZTwzOysrZSl7dmFyIFM9dC5jb250b3Vyc1tNW2VdXTtBW2VdPVMuaGlnaGxpZ2h0LHcuc2hvd0NvbnRvdXJbZV09Uy5zaG93fHxTLmhpZ2hsaWdodCx3LnNob3dDb250b3VyW2VdJiYody5jb250b3VyUHJvamVjdFtlXT1bUy5wcm9qZWN0LngsUy5wcm9qZWN0LnksUy5wcm9qZWN0LnpdLFMuc2hvdz8odGhpcy5zaG93Q29udG91cltlXT0hMCx3LmxldmVsc1tlXT15W2VdLHAuaGlnaGxpZ2h0Q29sb3JbZV09dy5jb250b3VyQ29sb3JbZV09dShTLmNvbG9yKSxTLnVzZWNvbG9ybWFwP3AuaGlnaGxpZ2h0VGludFtlXT13LmNvbnRvdXJUaW50W2VdPTA6cC5oaWdobGlnaHRUaW50W2VdPXcuY29udG91clRpbnRbZV09MSx3LmNvbnRvdXJXaWR0aFtlXT1TLndpZHRoLHRoaXMuY29udG91clN0YXJ0W2VdPVMuc3RhcnQsdGhpcy5jb250b3VyRW5kW2VdPVMuZW5kLHRoaXMuY29udG91clNpemVbZV09Uy5zaXplKToodGhpcy5zaG93Q29udG91cltlXT0hMSx0aGlzLmNvbnRvdXJTdGFydFtlXT1udWxsLHRoaXMuY29udG91ckVuZFtlXT1udWxsLHRoaXMuY29udG91clNpemVbZV09MCksUy5oaWdobGlnaHQmJih3LmR5bmFtaWNDb2xvcltlXT11KFMuaGlnaGxpZ2h0Y29sb3IpLHcuZHluYW1pY1dpZHRoW2VdPVMuaGlnaGxpZ2h0d2lkdGgpKX0oZnVuY3Rpb24odCl7dmFyIGU9dFswXS5yZ2Iscj10W3QubGVuZ3RoLTFdLnJnYjtyZXR1cm4gZVswXT09PXJbMF0mJmVbMV09PT1yWzFdJiZlWzJdPT09clsyXSYmZVszXT09PXJbM119KShkKSYmKHcudmVydGV4Q29sb3I9ITApLHcub2JqZWN0T2Zmc2V0PXRoaXMub2JqZWN0T2Zmc2V0LHcuY29vcmRzPWIscC51cGRhdGUodykscC52aXNpYmxlPXQudmlzaWJsZSxwLmVuYWJsZUR5bmFtaWM9QSxwLmVuYWJsZUhpZ2hsaWdodD1BLHAuc25hcFRvRGF0YT0hMCwibGlnaHRpbmciaW4gdCYmKHAuYW1iaWVudExpZ2h0PXQubGlnaHRpbmcuYW1iaWVudCxwLmRpZmZ1c2VMaWdodD10LmxpZ2h0aW5nLmRpZmZ1c2UscC5zcGVjdWxhckxpZ2h0PXQubGlnaHRpbmcuc3BlY3VsYXIscC5yb3VnaG5lc3M9dC5saWdodGluZy5yb3VnaG5lc3MscC5mcmVzbmVsPXQubGlnaHRpbmcuZnJlc25lbCksImxpZ2h0cG9zaXRpb24iaW4gdCYmKHAubGlnaHRQb3NpdGlvbj1bdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdKX0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc3VyZmFjZSksdGhpcy5zdXJmYWNlLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsaT1uKHtnbDpyfSksYT1uZXcgaCh0LGksZS51aWQpO3JldHVybiBpLl90cmFjZT1hLGEudXBkYXRlKGUpLHQuZ2xwbG90LmFkZChpKSxhfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1MSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjc3MiwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6ODAxLCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyI6MTA2NCwiLi4vaGVhdG1hcC9pbnRlcnAyZCI6MTA2NywiZ2wtc3VyZmFjZTNkIjozMzYsbmRhcnJheTo0NjIsIm5kYXJyYXktbGluZWFyLWludGVycG9sYXRlIjo0NTZ9XSwxMzE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gcyh0LGUscixuKXt2YXIgaT1uKCJvcGFjaXR5c2NhbGUiKTsibWF4Ij09PWk/ZS5vcGFjaXR5c2NhbGU9W1swLC4xXSxbMSwxXV06Im1pbiI9PT1pP2Uub3BhY2l0eXNjYWxlPVtbMCwxXSxbMSwuMV1dOiJleHRyZW1lcyI9PT1pP2Uub3BhY2l0eXNjYWxlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPDMyO24rKyl7dmFyIGk9bi8zMSxhPWUrKDEtZSkqKDEtTWF0aC5wb3coTWF0aC5zaW4odCppKk1hdGguUEkpLDIpKTtyLnB1c2goW2ksTWF0aC5tYXgoMCxNYXRoLm1pbigxLGEpKV0pfXJldHVybiByfSgxLC4xKTpmdW5jdGlvbih0KXt2YXIgZT0wO2lmKCFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aDwyKXJldHVybiExO2lmKCF0WzBdfHwhdFt0Lmxlbmd0aC0xXSlyZXR1cm4hMTtpZigwIT0rdFswXVswXXx8MSE9K3RbdC5sZW5ndGgtMV1bMF0pcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07aWYoMiE9PW4ubGVuZ3RofHwrblswXTxlKXJldHVybiExO2U9K25bMF19cmV0dXJuITB9KGkpfHwoZS5vcGFjaXR5c2NhbGU9dm9pZCAwKX1mdW5jdGlvbiBsKHQsZSxyKXtlIGluIHQmJiEociBpbiB0KSYmKHRbcl09dFtlXSl9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixjKXt2YXIgdSxmO2Z1bmN0aW9uIGgocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLG8scixuKX12YXIgcD1oKCJ4IiksZD1oKCJ5IiksbT1oKCJ6Iik7aWYoIW18fCFtLmxlbmd0aHx8cCYmcC5sZW5ndGg8MXx8ZCYmZC5sZW5ndGg8MSllLnZpc2libGU9ITE7ZWxzZXtlLl94bGVuZ3RoPUFycmF5LmlzQXJyYXkocCkmJmkuaXNBcnJheU9yVHlwZWRBcnJheShwWzBdKT9tLmxlbmd0aDptWzBdLmxlbmd0aCxlLl95bGVuZ3RoPW0ubGVuZ3RoLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiLCJ6Il0sYyksaCgidGV4dCIpLGgoImhvdmVydGV4dCIpLGgoImhvdmVydGVtcGxhdGUiKSxoKCJ4aG92ZXJmb3JtYXQiKSxoKCJ5aG92ZXJmb3JtYXQiKSxoKCJ6aG92ZXJmb3JtYXQiKSxbImxpZ2h0aW5nLmFtYmllbnQiLCJsaWdodGluZy5kaWZmdXNlIiwibGlnaHRpbmcuc3BlY3VsYXIiLCJsaWdodGluZy5yb3VnaG5lc3MiLCJsaWdodGluZy5mcmVzbmVsIiwibGlnaHRwb3NpdGlvbi54IiwibGlnaHRwb3NpdGlvbi55IiwibGlnaHRwb3NpdGlvbi56IiwiaGlkZXN1cmZhY2UiLCJjb25uZWN0Z2FwcyIsIm9wYWNpdHkiXS5mb3JFYWNoKChmdW5jdGlvbih0KXtoKHQpfSkpO3ZhciBnPWgoInN1cmZhY2Vjb2xvciIpLHY9WyJ4IiwieSIsInoiXTtmb3IodT0wO3U8MzsrK3Upe3ZhciB5PSJjb250b3Vycy4iK3ZbdV0seD1oKHkrIi5zaG93IiksYj1oKHkrIi5oaWdobGlnaHQiKTtpZih4fHxiKWZvcihmPTA7ZjwzOysrZiloKHkrIi5wcm9qZWN0LiIrdltmXSk7eCYmKGgoeSsiLmNvbG9yIiksaCh5KyIud2lkdGgiKSxoKHkrIi51c2Vjb2xvcm1hcCIpKSxiJiYoaCh5KyIuaGlnaGxpZ2h0Y29sb3IiKSxoKHkrIi5oaWdobGlnaHR3aWR0aCIpKSxoKHkrIi5zdGFydCIpLGgoeSsiLmVuZCIpLGgoeSsiLnNpemUiKX1nfHwobCh0LCJ6bWluIiwiY21pbiIpLGwodCwiem1heCIsImNtYXgiKSxsKHQsInphdXRvIiwiY2F1dG8iKSksYSh0LGUsYyxoLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSxzKHQsZSxjLGgpLGUuX2xlbmd0aD1udWxsfX0sb3BhY2l0eXNjYWxlRGVmYXVsdHM6c319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2NDksIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2F0dHJpYnV0ZXMiOjEzMTV9XSwxMzE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY29sb3JiYXI6e21pbjoiY21pbiIsbWF4OiJjbWF4In0sY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vY29udmVydCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzdXJmYWNlIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDNkIiksY2F0ZWdvcmllczpbImdsM2QiLCIyZE1hcCIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nbDNkIjo4NjksIi4vYXR0cmlidXRlcyI6MTMxNSwiLi9jYWxjIjoxMzE2LCIuL2NvbnZlcnQiOjEzMTcsIi4vZGVmYXVsdHMiOjEzMTh9XSwxMzIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYT10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsbz10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmRlc2NyaXB0aW9uT25seU51bWJlcnM7KGUuZXhwb3J0cz1hKHtkb21haW46cyh7bmFtZToidGFibGUiLHRyYWNlOiEwfSksY29sdW1ud2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMCxkZmx0Om51bGx9LGNvbHVtbm9yZGVyOnt2YWxUeXBlOiJkYXRhX2FycmF5In0saGVhZGVyOnt2YWx1ZXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGZvcm1hdDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXSxkZXNjcmlwdGlvbjpsKCJjZWxsIHZhbHVlIil9LHByZWZpeDp7dmFsVHlwZToic3RyaW5nIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0sc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGFycmF5T2s6ITAsZGZsdDpudWxsfSxoZWlnaHQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoyOH0sYWxpZ246aSh7fSxuLmFsaWduLHthcnJheU9rOiEwfSksbGluZTp7d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMCxkZmx0OjF9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxkZmx0OiJncmV5In19LGZpbGw6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxkZmx0OiJ3aGl0ZSJ9fSxmb250Omkoe30sbyh7YXJyYXlPazohMH0pKX0sY2VsbHM6e3ZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sZm9ybWF0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdLGRlc2NyaXB0aW9uOmwoImNlbGwgdmFsdWUiKX0scHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGFycmF5T2s6ITAsZGZsdDpudWxsfSxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0Om51bGx9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjIwfSxhbGlnbjppKHt9LG4uYWxpZ24se2FycmF5T2s6ITB9KSxsaW5lOnt3aWR0aDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6MX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGRmbHQ6ImdyZXkifX0sZmlsbDp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGRmbHQ6IndoaXRlIn19LGZvbnQ6aSh7fSxvKHthcnJheU9rOiEwfSkpfX0sImNhbGMiLCJmcm9tLXJvb3QiKSkudHJhbnNmb3Jtcz12b2lkIDB9LHsiLi4vLi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIjo2MjIsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODA5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6ODMwLCIuLi8uLi9wbG90cy9kb21haW4iOjg1NSwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4NTZ9XSwxMzIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsaT10KCIuL3Bsb3QiKTtyLm5hbWU9InRhYmxlIixyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9bih0LmNhbGNkYXRhLCJ0YWJsZSIpWzBdO2UubGVuZ3RoJiZpKHQsZSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoInRhYmxlIiksYT1lLl9oYXMmJmUuX2hhcygidGFibGUiKTtpJiYhYSYmbi5fcGFwZXJkaXYuc2VsZWN0QWxsKCIudGFibGUiKS5yZW1vdmUoKX19LHsiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjg2NCwiLi9wbG90IjoxMzI4fV0sMTMyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvZ3VwIikud3JhcDtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gbih7fSl9fSx7Ii4uLy4uL2xpYi9ndXAiOjc3M31dLDEzMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjZWxsUGFkOjgsY29sdW1uRXh0ZW50T2Zmc2V0OjEwLGNvbHVtblRpdGxlT2Zmc2V0OjI4LGVtcHR5SGVhZGVySGVpZ2h0OjE2LGxhdGV4Q2hlY2s6L15cJC4qXCQkLyxnb2xkZW5SYXRpbzoxLjYxOCxsaW5lQnJlYWtlcjoiPGJyPiIsbWF4RGltZW5zaW9uQ291bnQ6NjAsb3ZlcmRyYWc6NDUscmVsZWFzZVRyYW5zaXRpb25EdXJhdGlvbjoxMjAscmVsZWFzZVRyYW5zaXRpb25FYXNlOiJjdWJpYy1vdXQiLHNjcm9sbGJhckNhcHR1cmVXaWR0aDoxOCxzY3JvbGxiYXJIaWRlRGVsYXk6MWUzLHNjcm9sbGJhckhpZGVEdXJhdGlvbjoxZTMsc2Nyb2xsYmFyT2Zmc2V0OjUsc2Nyb2xsYmFyV2lkdGg6OCx0cmFuc2l0aW9uRHVyYXRpb246MTAwLHRyYW5zaXRpb25FYXNlOiJjdWJpYy1vdXQiLHVwbGlmdDo1LHdyYXBTcGFjZXI6IiAiLHdyYXBTcGxpdENoYXJhY3RlcjoiICIsY246e3RhYmxlOiJ0YWJsZSIsdGFibGVDb250cm9sVmlldzoidGFibGUtY29udHJvbC12aWV3IixzY3JvbGxCYWNrZ3JvdW5kOiJzY3JvbGwtYmFja2dyb3VuZCIseUNvbHVtbjoieS1jb2x1bW4iLGNvbHVtbkJsb2NrOiJjb2x1bW4tYmxvY2siLHNjcm9sbEFyZWFDbGlwOiJzY3JvbGwtYXJlYS1jbGlwIixzY3JvbGxBcmVhQ2xpcFJlY3Q6InNjcm9sbC1hcmVhLWNsaXAtcmVjdCIsY29sdW1uQm91bmRhcnk6ImNvbHVtbi1ib3VuZGFyeSIsY29sdW1uQm91bmRhcnlDbGlwcGF0aDoiY29sdW1uLWJvdW5kYXJ5LWNsaXBwYXRoIixjb2x1bW5Cb3VuZGFyeVJlY3Q6ImNvbHVtbi1ib3VuZGFyeS1yZWN0Iixjb2x1bW5DZWxsczoiY29sdW1uLWNlbGxzIixjb2x1bW5DZWxsOiJjb2x1bW4tY2VsbCIsY2VsbFJlY3Q6ImNlbGwtcmVjdCIsY2VsbFRleHQ6ImNlbGwtdGV4dCIsY2VsbFRleHRIb2xkZXI6ImNlbGwtdGV4dC1ob2xkZXIiLHNjcm9sbGJhcktpdDoic2Nyb2xsYmFyLWtpdCIsc2Nyb2xsYmFyOiJzY3JvbGxiYXIiLHNjcm9sbGJhclNsaWRlcjoic2Nyb2xsYmFyLXNsaWRlciIsc2Nyb2xsYmFyR2x5cGg6InNjcm9sbGJhci1nbHlwaCIsc2Nyb2xsYmFyQ2FwdHVyZVpvbmU6InNjcm9sbGJhci1jYXB0dXJlLXpvbmUifX19LHt9XSwxMzI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxhPXQoImZhc3QtaXNudW1lcmljIik7ZnVuY3Rpb24gbyh0KXtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspZT1NYXRoLm1heChlLG8odFtyXSkpO3JldHVybiBlfXJldHVybiB0fWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gdCtlfWZ1bmN0aW9uIGwodCl7dmFyIGUscj10LnNsaWNlKCksbj0xLzAsaT0wO2ZvcihlPTA7ZTxyLmxlbmd0aDtlKyspQXJyYXkuaXNBcnJheShyW2VdKXx8KHJbZV09W3JbZV1dKSxuPU1hdGgubWluKG4scltlXS5sZW5ndGgpLGk9TWF0aC5tYXgoaSxyW2VdLmxlbmd0aCk7aWYobiE9PWkpZm9yKGU9MDtlPHIubGVuZ3RoO2UrKyl7dmFyIGE9aS1yW2VdLmxlbmd0aDthJiYocltlXT1yW2VdLmNvbmNhdChjKGEpKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09IiI7cmV0dXJuIGV9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC5jYWxjZGF0YS5jb2x1bW5zLnJlZHVjZSgoZnVuY3Rpb24oZSxyKXtyZXR1cm4gci54SW5kZXg8dC54SW5kZXg/ZStyLmNvbHVtbldpZHRoOmV9KSwwKX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcCgoZnVuY3Rpb24ocil7cmV0dXJuIGkoe30sdFtyXSx7YXV4aWxpYXJ5QmxvY2tzOmV9KX0pKX1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByLG49e30saT0wLGE9MCxvPXtmaXJzdFJvd0luZGV4Om51bGwsbGFzdFJvd0luZGV4Om51bGwscm93czpbXX0scz0wLGw9MCxjPTA7Yzx0Lmxlbmd0aDtjKyspcj10W2NdLG8ucm93cy5wdXNoKHtyb3dJbmRleDpjLHJvd0hlaWdodDpyfSksKChhKz1yKT49ZXx8Yz09PXQubGVuZ3RoLTEpJiYobltpXT1vLG8ua2V5PWwrKyxvLmZpcnN0Um93SW5kZXg9cyxvLmxhc3RSb3dJbmRleD1jLG89e2ZpcnN0Um93SW5kZXg6bnVsbCxsYXN0Um93SW5kZXg6bnVsbCxyb3dzOltdfSxpKz1hLHM9YysxLGE9MCk7cmV0dXJuIG59ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bChlLmNlbGxzLnZhbHVlcykscD1mdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZShlLmhlYWRlci52YWx1ZXMubGVuZ3RoLHQubGVuZ3RoKX0sZD1sKGUuaGVhZGVyLnZhbHVlcyk7ZC5sZW5ndGgmJiFkWzBdLmxlbmd0aCYmKGRbMF09WyIiXSxkPWwoZCkpO3ZhciBtPWQuY29uY2F0KHAocikubWFwKChmdW5jdGlvbigpe3JldHVybiBjKChkWzBdfHxbIiJdKS5sZW5ndGgpfSkpKSxnPWUuZG9tYWluLHY9TWF0aC5mbG9vcih0Ll9mdWxsTGF5b3V0Ll9zaXplLncqKGcueFsxXS1nLnhbMF0pKSx5PU1hdGguZmxvb3IodC5fZnVsbExheW91dC5fc2l6ZS5oKihnLnlbMV0tZy55WzBdKSkseD1lLmhlYWRlci52YWx1ZXMubGVuZ3RoP21bMF0ubWFwKChmdW5jdGlvbigpe3JldHVybiBlLmhlYWRlci5oZWlnaHR9KSk6W24uZW1wdHlIZWFkZXJIZWlnaHRdLGI9ci5sZW5ndGg/clswXS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY2VsbHMuaGVpZ2h0fSkpOltdLF89eC5yZWR1Y2UocywwKSx3PWgoYix5LV8rbi51cGxpZnQpLFQ9ZihoKHgsXyksW10pLGs9Zih3LFQpLEE9e30sTT1lLl9mdWxsSW5wdXQuY29sdW1ub3JkZXIuY29uY2F0KHAoci5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSkpKSxTPW0ubWFwKChmdW5jdGlvbih0LHIpe3ZhciBuPUFycmF5LmlzQXJyYXkoZS5jb2x1bW53aWR0aCk/ZS5jb2x1bW53aWR0aFtNYXRoLm1pbihyLGUuY29sdW1ud2lkdGgubGVuZ3RoLTEpXTplLmNvbHVtbndpZHRoO3JldHVybiBhKG4pP051bWJlcihuKToxfSkpLEU9Uy5yZWR1Y2UocywwKTtTPVMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC9FKnZ9KSk7dmFyIEw9TWF0aC5tYXgobyhlLmhlYWRlci5saW5lLndpZHRoKSxvKGUuY2VsbHMubGluZS53aWR0aCkpLEM9e2tleTplLnVpZCt0Ll9jb250ZXh0LnN0YXRpY1Bsb3QsdHJhbnNsYXRlWDpnLnhbMF0qdC5fZnVsbExheW91dC5fc2l6ZS53LHRyYW5zbGF0ZVk6dC5fZnVsbExheW91dC5fc2l6ZS5oKigxLWcueVsxXSksc2l6ZTp0Ll9mdWxsTGF5b3V0Ll9zaXplLHdpZHRoOnYsbWF4TGluZVdpZHRoOkwsaGVpZ2h0OnksY29sdW1uT3JkZXI6TSxncm91cEhlaWdodDp5LHJvd0Jsb2NrczprLGhlYWRlclJvd0Jsb2NrczpULHNjcm9sbFk6MCxjZWxsczppKHt9LGUuY2VsbHMse3ZhbHVlczpyfSksaGVhZGVyQ2VsbHM6aSh7fSxlLmhlYWRlcix7dmFsdWVzOm19KSxnZENvbHVtbnM6bS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkpLGdkQ29sdW1uc09yaWdpbmFsT3JkZXI6bS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkpLHByZXZQYWdlczpbMCwwXSxzY3JvbGxiYXJTdGF0ZTp7c2Nyb2xsYmFyU2Nyb2xsSW5Qcm9ncmVzczohMX0sY29sdW1uczptLm1hcCgoZnVuY3Rpb24odCxlKXt2YXIgcj1BW3RdO3JldHVybiBBW3RdPShyfHwwKSsxLHtrZXk6dCsiX18iK0FbdF0sbGFiZWw6dCxzcGVjSW5kZXg6ZSx4SW5kZXg6TVtlXSx4U2NhbGU6dSx4OnZvaWQgMCxjYWxjZGF0YTp2b2lkIDAsY29sdW1uV2lkdGg6U1tlXX19KSl9O3JldHVybiBDLmNvbHVtbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jYWxjZGF0YT1DLHQueD11KHQpfSkpLEN9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi9jb25zdGFudHMiOjEzMjMsImZhc3QtaXNudW1lcmljIjoyNDJ9XSwxMzI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O3Iuc3BsaXRUb1BhbmVscz1mdW5jdGlvbih0KXt2YXIgZT1bMCwwXSxyPW4oe30sdCx7a2V5OiJoZWFkZXIiLHR5cGU6ImhlYWRlciIscGFnZTowLHByZXZQYWdlczplLGN1cnJlbnRSZXBhaW50OltudWxsLG51bGxdLGRyYWdIYW5kbGU6ITAsdmFsdWVzOnQuY2FsY2RhdGEuaGVhZGVyQ2VsbHMudmFsdWVzW3Quc3BlY0luZGV4XSxyb3dCbG9ja3M6dC5jYWxjZGF0YS5oZWFkZXJSb3dCbG9ja3MsY2FsY2RhdGE6bih7fSx0LmNhbGNkYXRhLHtjZWxsczp0LmNhbGNkYXRhLmhlYWRlckNlbGxzfSl9KTtyZXR1cm5bbih7fSx0LHtrZXk6ImNlbGxzMSIsdHlwZToiY2VsbHMiLHBhZ2U6MCxwcmV2UGFnZXM6ZSxjdXJyZW50UmVwYWludDpbbnVsbCxudWxsXSxkcmFnSGFuZGxlOiExLHZhbHVlczp0LmNhbGNkYXRhLmNlbGxzLnZhbHVlc1t0LnNwZWNJbmRleF0scm93QmxvY2tzOnQuY2FsY2RhdGEucm93QmxvY2tzfSksbih7fSx0LHtrZXk6ImNlbGxzMiIsdHlwZToiY2VsbHMiLHBhZ2U6MSxwcmV2UGFnZXM6ZSxjdXJyZW50UmVwYWludDpbbnVsbCxudWxsXSxkcmFnSGFuZGxlOiExLHZhbHVlczp0LmNhbGNkYXRhLmNlbGxzLnZhbHVlc1t0LnNwZWNJbmRleF0scm93QmxvY2tzOnQuY2FsY2RhdGEucm93QmxvY2tzfSkscl19LHIuc3BsaXRUb0NlbGxzPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPXQucm93QmxvY2tzW3QucGFnZV0scj1lP2Uucm93c1swXS5yb3dJbmRleDowLG49ZT9yK2Uucm93cy5sZW5ndGg6MDtyZXR1cm5bcixuXX0odCk7cmV0dXJuKHQudmFsdWVzfHxbXSkuc2xpY2UoZVswXSxlWzFdKS5tYXAoKGZ1bmN0aW9uKHIsbil7cmV0dXJue2tleVdpdGhpbkJsb2NrOm4rKCJzdHJpbmciPT10eXBlb2YgciYmci5tYXRjaCgvWzwkJj4gXS8pPyJfa2V5YnVzdGVyXyIrTWF0aC5yYW5kb20oKToiIiksa2V5OmVbMF0rbixjb2x1bW46dCxjYWxjZGF0YTp0LmNhbGNkYXRhLHBhZ2U6dC5wYWdlLHJvd0Jsb2Nrczp0LnJvd0Jsb2Nrcyx2YWx1ZTpyfX0pKX19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzY2fV0sMTMyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuZGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKGUsbyxzKSxzKCJjb2x1bW53aWR0aCIpLHMoImhlYWRlci52YWx1ZXMiKSxzKCJoZWFkZXIuZm9ybWF0IikscygiaGVhZGVyLmFsaWduIikscygiaGVhZGVyLnByZWZpeCIpLHMoImhlYWRlci5zdWZmaXgiKSxzKCJoZWFkZXIuaGVpZ2h0IikscygiaGVhZGVyLmxpbmUud2lkdGgiKSxzKCJoZWFkZXIubGluZS5jb2xvciIpLHMoImhlYWRlci5maWxsLmNvbG9yIiksbi5jb2VyY2VGb250KHMsImhlYWRlci5mb250IixuLmV4dGVuZEZsYXQoe30sby5mb250KSksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb2x1bW5vcmRlcnx8W10sbj10LmhlYWRlci52YWx1ZXMubGVuZ3RoLGk9ci5zbGljZSgwLG4pLGE9aS5zbGljZSgpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKSxvPWkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gYS5pbmRleE9mKHQpfSkpLHM9by5sZW5ndGg7czxuO3MrKylvLnB1c2gocyk7ZSgiY29sdW1ub3JkZXIiLG8pfShlLHMpLHMoImNlbGxzLnZhbHVlcyIpLHMoImNlbGxzLmZvcm1hdCIpLHMoImNlbGxzLmFsaWduIikscygiY2VsbHMucHJlZml4IikscygiY2VsbHMuc3VmZml4IikscygiY2VsbHMuaGVpZ2h0IikscygiY2VsbHMubGluZS53aWR0aCIpLHMoImNlbGxzLmxpbmUuY29sb3IiKSxzKCJjZWxscy5maWxsLmNvbG9yIiksbi5jb2VyY2VGb250KHMsImNlbGxzLmZvbnQiLG4uZXh0ZW5kRmxhdCh7fSxvLmZvbnQpKSxlLl9sZW5ndGg9bnVsbH19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuL2F0dHJpYnV0ZXMiOjEzMjB9XSwxMzI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJ0YWJsZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOlsibm9PcGFjaXR5Il0sbWV0YTp7fX19LHsiLi9hdHRyaWJ1dGVzIjoxMzIwLCIuL2Jhc2VfcGxvdCI6MTMyMSwiLi9jYWxjIjoxMzIyLCIuL2RlZmF1bHRzIjoxMzI2LCIuL3Bsb3QiOjEzMjh9XSwxMzI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCJAcGxvdGx5L2QzIiksYT10KCIuLi8uLi9saWIiKS5udW1iZXJGb3JtYXQsbz10KCIuLi8uLi9saWIvZ3VwIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vbGliIikucmFpc2VUb1RvcCx1PXQoIi4uLy4uL2xpYiIpLnN0clRyYW5zbGF0ZSxmPXQoIi4uLy4uL2xpYiIpLmNhbmNlbFRyYW5zaXRpb24saD10KCIuL2RhdGFfcHJlcGFyYXRpb25faGVscGVyIikscD10KCIuL2RhdGFfc3BsaXRfaGVscGVycyIpLGQ9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2Z1bmN0aW9uIG0odCl7cmV0dXJuIE1hdGguY2VpbCh0LmNhbGNkYXRhLm1heExpbmVXaWR0aC8yKX1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuImNsaXAiK3QuX2Z1bGxMYXlvdXQuX3VpZCsiX3Njcm9sbEFyZWFCb3R0b21DbGlwXyIrZS5rZXl9ZnVuY3Rpb24gdih0LGUpe3JldHVybiJjbGlwIit0Ll9mdWxsTGF5b3V0Ll91aWQrIl9jb2x1bW5Cb3VuZGFyeUNsaXBwYXRoXyIrZS5jYWxjZGF0YS5rZXkrIl8iK2Uuc3BlY0luZGV4fWZ1bmN0aW9uIHkodCl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5fX2RhdGFfX30pKX1mdW5jdGlvbiB4KHQsZSxyKXt2YXIgYT10LnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxiYXJLaXQpLmRhdGEoby5yZXBlYXQsby5rZXlGdW4pO2EuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyS2l0LCEwKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiZ2VvbWV0cmljUHJlY2lzaW9uIiksYS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnNjcm9sbGJhclN0YXRlO2UudG90YWxIZWlnaHQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5yb3dCbG9ja3M7cmV0dXJuIEQoZSxlLmxlbmd0aC0xKSsoZS5sZW5ndGg/UihlW2UubGVuZ3RoLTFdLDEvMCk6MSl9KHQpLGUuc2Nyb2xsYWJsZUFyZWFIZWlnaHQ9dC5ncm91cEhlaWdodC1TKHQpLGUuY3VycmVudGx5VmlzaWJsZUhlaWdodD1NYXRoLm1pbihlLnRvdGFsSGVpZ2h0LGUuc2Nyb2xsYWJsZUFyZWFIZWlnaHQpLGUucmF0aW89ZS5jdXJyZW50bHlWaXNpYmxlSGVpZ2h0L2UudG90YWxIZWlnaHQsZS5iYXJMZW5ndGg9TWF0aC5tYXgoZS5yYXRpbyplLmN1cnJlbnRseVZpc2libGVIZWlnaHQsbi5nb2xkZW5SYXRpbypuLnNjcm9sbGJhcldpZHRoKSxlLmJhcldpZ2dsZVJvb209ZS5jdXJyZW50bHlWaXNpYmxlSGVpZ2h0LWUuYmFyTGVuZ3RoLGUud2lnZ2xlUm9vbT1NYXRoLm1heCgwLGUudG90YWxIZWlnaHQtZS5zY3JvbGxhYmxlQXJlYUhlaWdodCksZS50b3BZPTA9PT1lLmJhcldpZ2dsZVJvb20/MDp0LnNjcm9sbFkvZS53aWdnbGVSb29tKmUuYmFyV2lnZ2xlUm9vbSxlLmJvdHRvbVk9ZS50b3BZK2UuYmFyTGVuZ3RoLGUuZHJhZ011bHRpcGxpZXI9ZS53aWdnbGVSb29tL2UuYmFyV2lnZ2xlUm9vbX0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT10LndpZHRoK24uc2Nyb2xsYmFyV2lkdGgvMituLnNjcm9sbGJhck9mZnNldDtyZXR1cm4gdShlLFModCkpfSkpO3ZhciBzPWEuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbGJhcikuZGF0YShvLnJlcGVhdCxvLmtleUZ1bik7cy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXIsITApO3ZhciBsPXMuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbGJhclNsaWRlcikuZGF0YShvLnJlcGVhdCxvLmtleUZ1bik7bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXJTbGlkZXIsITApLGwuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIHUoMCx0LnNjcm9sbGJhclN0YXRlLnRvcFl8fDApfSkpO3ZhciBjPWwuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbGJhckdseXBoKS5kYXRhKG8ucmVwZWF0LG8ua2V5RnVuKTtjLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhckdseXBoLCEwKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoInN0cm9rZS13aWR0aCIsbi5zY3JvbGxiYXJXaWR0aCkuYXR0cigic3Ryb2tlLWxpbmVjYXAiLCJyb3VuZCIpLmF0dHIoInkxIixuLnNjcm9sbGJhcldpZHRoLzIpLGMuYXR0cigieTIiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zY3JvbGxiYXJTdGF0ZS5iYXJMZW5ndGgtbi5zY3JvbGxiYXJXaWR0aC8yfSkpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1uRHJhZ0luUHJvZ3Jlc3N8fCF0LnNjcm9sbGJhclN0YXRlLmJhcldpZ2dsZVJvb218fHI/MDouNH0pKSxjLnRyYW5zaXRpb24oKS5kZWxheSgwKS5kdXJhdGlvbigwKSxjLnRyYW5zaXRpb24oKS5kZWxheShuLnNjcm9sbGJhckhpZGVEZWxheSkuZHVyYXRpb24obi5zY3JvbGxiYXJIaWRlRHVyYXRpb24pLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKTt2YXIgZj1zLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxiYXJDYXB0dXJlWm9uZSkuZGF0YShvLnJlcGVhdCxvLmtleUZ1bik7Zi5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXJDYXB0dXJlWm9uZSwhMCkuYXR0cigic3Ryb2tlIiwid2hpdGUiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsLjAxKS5hdHRyKCJzdHJva2Utd2lkdGgiLG4uc2Nyb2xsYmFyQ2FwdHVyZVdpZHRoKS5hdHRyKCJzdHJva2UtbGluZWNhcCIsImJ1dHQiKS5hdHRyKCJ5MSIsMCkub24oIm1vdXNlZG93biIsKGZ1bmN0aW9uKHIpe3ZhciBuPWkuZXZlbnQueSxhPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1yLnNjcm9sbGJhclN0YXRlLHM9bi1hLnRvcCxsPWkuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLG8uc2Nyb2xsYWJsZUFyZWFIZWlnaHRdKS5yYW5nZShbMCxvLnRvdGFsSGVpZ2h0XSkuY2xhbXAoITApO28udG9wWTw9cyYmczw9by5ib3R0b21ZfHxMKGUsdCxudWxsLGwocy1vLmJhckxlbmd0aC8yKSkocil9KSkuY2FsbChpLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oKGZ1bmN0aW9uKHQpe3JldHVybiBpLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLHQuc2Nyb2xsYmFyU3RhdGUuc2Nyb2xsYmFyU2Nyb2xsSW5Qcm9ncmVzcz0hMCx0fSkpLm9uKCJkcmFnIixMKGUsdCkpLm9uKCJkcmFnZW5kIiwoZnVuY3Rpb24oKXt9KSkpLGYuYXR0cigieTIiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zY3JvbGxiYXJTdGF0ZS5zY3JvbGxhYmxlQXJlYUhlaWdodH0pKSxlLl9jb250ZXh0LnN0YXRpY1Bsb3QmJihjLnJlbW92ZSgpLGYucmVtb3ZlKCkpfWZ1bmN0aW9uIGIodCxlLHIsYSl7dmFyIGw9ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQ2VsbCkuZGF0YShwLnNwbGl0VG9DZWxscywoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uY29sdW1uQ2VsbCwhMCksZS5leGl0KCkucmVtb3ZlKCksZX0oZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQ2VsbHMpLmRhdGEoby5yZXBlYXQsby5rZXlGdW4pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLmNvbHVtbkNlbGxzLCEwKSxlLmV4aXQoKS5yZW1vdmUoKSxlfShyKSk7IWZ1bmN0aW9uKHQpe3QuZWFjaCgoZnVuY3Rpb24odCxlKXt2YXIgcj10LmNhbGNkYXRhLmNlbGxzLmZvbnQsbj10LmNvbHVtbi5zcGVjSW5kZXgsaT17c2l6ZTpUKHIuc2l6ZSxuLGUpLGNvbG9yOlQoci5jb2xvcixuLGUpLGZhbWlseTpUKHIuZmFtaWx5LG4sZSl9O3Qucm93TnVtYmVyPXQua2V5LHQuYWxpZ249VCh0LmNhbGNkYXRhLmNlbGxzLmFsaWduLG4sZSksdC5jZWxsQm9yZGVyV2lkdGg9VCh0LmNhbGNkYXRhLmNlbGxzLmxpbmUud2lkdGgsbixlKSx0LmZvbnQ9aX0pKX0obCksZnVuY3Rpb24odCl7dC5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbi5jb2x1bW5XaWR0aH0pKS5hdHRyKCJzdHJva2Utd2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jZWxsQm9yZGVyV2lkdGh9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9aS5zZWxlY3QodGhpcyk7ZC5zdHJva2UoZSxUKHQuY2FsY2RhdGEuY2VsbHMubGluZS5jb2xvcix0LmNvbHVtbi5zcGVjSW5kZXgsdC5yb3dOdW1iZXIpKSxkLmZpbGwoZSxUKHQuY2FsY2RhdGEuY2VsbHMuZmlsbC5jb2xvcix0LmNvbHVtbi5zcGVjSW5kZXgsdC5yb3dOdW1iZXIpKX0pKX0oZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY2VsbFJlY3QpLmRhdGEoby5yZXBlYXQsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleVdpdGhpbkJsb2NrfSkpO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChuLmNuLmNlbGxSZWN0LCEwKSxlfShsKSk7dmFyIGM9ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY2VsbFRleHQpLmRhdGEoby5yZXBlYXQsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleVdpdGhpbkJsb2NrfSkpO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChuLmNuLmNlbGxUZXh0LCEwKS5zdHlsZSgiY3Vyc29yIiwoZnVuY3Rpb24oKXtyZXR1cm4iYXV0byJ9KSkub24oIm1vdXNlZG93biIsKGZ1bmN0aW9uKCl7aS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pKSxlfShmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5jZWxsVGV4dEhvbGRlcikuZGF0YShvLnJlcGVhdCwoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uY2VsbFRleHRIb2xkZXIsITApLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJnZW9tZXRyaWNQcmVjaXNpb24iKSxlfShsKSk7IWZ1bmN0aW9uKHQpe3QuZWFjaCgoZnVuY3Rpb24odCl7cy5mb250KGkuc2VsZWN0KHRoaXMpLHQuZm9udCl9KSl9KGMpLF8oYyxlLGEsdCkseihsKX1mdW5jdGlvbiBfKHQsZSxyLG8pe3QudGV4dCgoZnVuY3Rpb24odCl7dmFyIGU9dC5jb2x1bW4uc3BlY0luZGV4LHI9dC5yb3dOdW1iZXIsaT10LnZhbHVlLG89InN0cmluZyI9PXR5cGVvZiBpLHM9byYmaS5tYXRjaCgvPGJyPi9pKSxsPSFvfHxzO3QubWF5SGF2ZU1hcmt1cD1vJiZpLm1hdGNoKC9bPCY+XS8pO3ZhciBjLHU9InN0cmluZyI9PXR5cGVvZihjPWkpJiZjLm1hdGNoKG4ubGF0ZXhDaGVjayk7dC5sYXRleD11O3ZhciBmLGgscD11PyIiOlQodC5jYWxjZGF0YS5jZWxscy5wcmVmaXgsZSxyKXx8IiIsZD11PyIiOlQodC5jYWxjZGF0YS5jZWxscy5zdWZmaXgsZSxyKXx8IiIsbT11P251bGw6VCh0LmNhbGNkYXRhLmNlbGxzLmZvcm1hdCxlLHIpfHxudWxsLGc9cCsobT9hKG0pKHQudmFsdWUpOnQudmFsdWUpK2Q7aWYodC53cmFwcGluZ05lZWRlZD0hdC53cmFwcGVkJiYhbCYmIXUmJihmPXcoZykpLHQuY2VsbEhlaWdodE1heUluY3JlYXNlPXN8fHV8fHQubWF5SGF2ZU1hcmt1cHx8KHZvaWQgMD09PWY/dyhnKTpmKSx0Lm5lZWRzQ29udmVydFRvVHNwYW5zPXQubWF5SGF2ZU1hcmt1cHx8dC53cmFwcGluZ05lZWRlZHx8dC5sYXRleCx0LndyYXBwaW5nTmVlZGVkKXt2YXIgdj0oIiAiPT09bi53cmFwU3BsaXRDaGFyYWN0ZXI/Zy5yZXBsYWNlKC88YSBocmVmPS9naSwiPGFfaHJlZj0iKTpnKS5zcGxpdChuLndyYXBTcGxpdENoYXJhY3RlcikseT0iICI9PT1uLndyYXBTcGxpdENoYXJhY3Rlcj92Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvPGFfaHJlZj0vZ2ksIjxhIGhyZWY9Iil9KSk6djt0LmZyYWdtZW50cz15Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJue3RleHQ6dCx3aWR0aDpudWxsfX0pKSx0LmZyYWdtZW50cy5wdXNoKHtmcmFnbWVudDpuLndyYXBTcGFjZXIsd2lkdGg6bnVsbH0pLGg9eS5qb2luKG4ubGluZUJyZWFrZXIpK24ubGluZUJyZWFrZXIrbi53cmFwU3BhY2VyfWVsc2UgZGVsZXRlIHQuZnJhZ21lbnRzLGg9ZztyZXR1cm4gaH0pKS5hdHRyKCJkeSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5lZWRzQ29udmVydFRvVHNwYW5zPzA6IjAuNzVlbSJ9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGE9aS5zZWxlY3QodGhpcykscz10LndyYXBwaW5nTmVlZGVkP1A6STt0Lm5lZWRzQ29udmVydFRvVHNwYW5zP2wuY29udmVydFRvVHNwYW5zKGEsbyxzKHIsdGhpcyxlLG8sdCkpOmkuc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIHUoTyh0KSxuLmNlbGxQYWQpfSkpLmF0dHIoInRleHQtYW5jaG9yIiwoZnVuY3Rpb24odCl7cmV0dXJue2xlZnQ6InN0YXJ0IixjZW50ZXI6Im1pZGRsZSIscmlnaHQ6ImVuZCJ9W3QuYWxpZ25dfSkpfSkpfWZ1bmN0aW9uIHcodCl7cmV0dXJuLTEhPT10LmluZGV4T2Yobi53cmFwU3BsaXRDaGFyYWN0ZXIpfWZ1bmN0aW9uIFQodCxlLHIpe2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBuPXRbTWF0aC5taW4oZSx0Lmxlbmd0aC0xKV07cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bltNYXRoLm1pbihyLG4ubGVuZ3RoLTEpXTpufXJldHVybiB0fWZ1bmN0aW9uIGsodCxlLHIpe3QudHJhbnNpdGlvbigpLmVhc2Uobi5yZWxlYXNlVHJhbnNpdGlvbkVhc2UpLmR1cmF0aW9uKG4ucmVsZWFzZVRyYW5zaXRpb25EdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIix1KGUueCxyKSl9ZnVuY3Rpb24gQSh0KXtyZXR1cm4iY2VsbHMiPT09dC50eXBlfWZ1bmN0aW9uIE0odCl7cmV0dXJuImhlYWRlciI9PT10LnR5cGV9ZnVuY3Rpb24gUyh0KXtyZXR1cm4odC5yb3dCbG9ja3MubGVuZ3RoP3Qucm93QmxvY2tzWzBdLmF1eGlsaWFyeUJsb2NrczpbXSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K1IoZSwxLzApfSksMCl9ZnVuY3Rpb24gRSh0LGUscil7dmFyIG49eShlKVswXTtpZih2b2lkIDAhPT1uKXt2YXIgaT1uLnJvd0Jsb2NrcyxhPW4uY2FsY2RhdGEsbz1EKGksaS5sZW5ndGgpLHM9bi5jYWxjZGF0YS5ncm91cEhlaWdodC1TKG4pLGw9YS5zY3JvbGxZPU1hdGgubWF4KDAsTWF0aC5taW4oby1zLGEuc2Nyb2xsWSkpLGM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1bXSxpPTAsYT0wO2E8dC5sZW5ndGg7YSsrKXtmb3IodmFyIG89dFthXSxzPW8ucm93cyxsPTAsYz0wO2M8cy5sZW5ndGg7YysrKWwrPXNbY10ucm93SGVpZ2h0O28uYWxsUm93c0hlaWdodD1sO2U8aStsJiZlK3I+aSYmbi5wdXNoKGEpLGkrPWx9cmV0dXJuIG59KGksbCxzKTsxPT09Yy5sZW5ndGgmJihjWzBdPT09aS5sZW5ndGgtMT9jLnVuc2hpZnQoY1swXS0xKTpjLnB1c2goY1swXSsxKSksY1swXSUyJiZjLnJldmVyc2UoKSxlLmVhY2goKGZ1bmN0aW9uKHQsZSl7dC5wYWdlPWNbZV0sdC5zY3JvbGxZPWx9KSksZS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1EKHQucm93QmxvY2tzLHQucGFnZSktdC5zY3JvbGxZO3JldHVybiB1KDAsZSl9KSksdCYmKEModCxyLGUsYyxuLnByZXZQYWdlcyxuLDApLEModCxyLGUsYyxuLnByZXZQYWdlcyxuLDEpLHgocix0KSl9fWZ1bmN0aW9uIEwodCxlLHIsYSl7cmV0dXJuIGZ1bmN0aW9uKG8pe3ZhciBzPW8uY2FsY2RhdGE/by5jYWxjZGF0YTpvLGw9ZS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBzLmtleT09PXQua2V5fSkpLGM9cnx8cy5zY3JvbGxiYXJTdGF0ZS5kcmFnTXVsdGlwbGllcix1PXMuc2Nyb2xsWTtzLnNjcm9sbFk9dm9pZCAwPT09YT9zLnNjcm9sbFkrYyppLmV2ZW50LmR5OmE7dmFyIGY9bC5zZWxlY3RBbGwoIi4iK24uY24ueUNvbHVtbikuc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkJsb2NrKS5maWx0ZXIoQSk7cmV0dXJuIEUodCxmLGwpLHMuc2Nyb2xsWT09PXV9fWZ1bmN0aW9uIEModCxlLHIsbixpLGEsbyl7bltvXSE9PWlbb10mJihjbGVhclRpbWVvdXQoYS5jdXJyZW50UmVwYWludFtvXSksYS5jdXJyZW50UmVwYWludFtvXT1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3ZhciBhPXIuZmlsdGVyKChmdW5jdGlvbih0LGUpe3JldHVybiBlPT09byYmbltlXSE9PWlbZV19KSk7Yih0LGUsYSxyKSxpW29dPW5bb119KSkpfWZ1bmN0aW9uIFAodCxlLHIsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89aS5zZWxlY3QoZS5wYXJlbnROb2RlKTtvLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZnJhZ21lbnRzO28uc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuZWFjaCgoZnVuY3Rpb24odCxyKXtlW3JdLndpZHRoPXRoaXMuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCl9KSk7dmFyIHIsaSxhPWVbZS5sZW5ndGgtMV0ud2lkdGgscz1lLnNsaWNlKDAsLTEpLGw9W10sYz0wLHU9dC5jb2x1bW4uY29sdW1uV2lkdGgtMipuLmNlbGxQYWQ7Zm9yKHQudmFsdWU9IiI7cy5sZW5ndGg7KWMrKGk9KHI9cy5zaGlmdCgpKS53aWR0aCthKT51JiYodC52YWx1ZSs9bC5qb2luKG4ud3JhcFNwYWNlcikrbi5saW5lQnJlYWtlcixsPVtdLGM9MCksbC5wdXNoKHIudGV4dCksYys9aTtjJiYodC52YWx1ZSs9bC5qb2luKG4ud3JhcFNwYWNlcikpLHQud3JhcHBlZD0hMH0pKSxvLnNlbGVjdEFsbCgidHNwYW4ubGluZSIpLnJlbW92ZSgpLF8oby5zZWxlY3QoIi4iK24uY24uY2VsbFRleHQpLHIsdCxhKSxpLnNlbGVjdChlLnBhcmVudE5vZGUucGFyZW50Tm9kZSkuY2FsbCh6KX19ZnVuY3Rpb24gSSh0LGUscixhLG8pe3JldHVybiBmdW5jdGlvbigpe2lmKCFvLnNldHRsZWRZKXt2YXIgcz1pLnNlbGVjdChlLnBhcmVudE5vZGUpLGw9QihvKSxjPW8ua2V5LWwuZmlyc3RSb3dJbmRleCxmPWwucm93c1tjXS5yb3dIZWlnaHQsaD1vLmNlbGxIZWlnaHRNYXlJbmNyZWFzZT9lLnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KzIqbi5jZWxsUGFkOmYscD1NYXRoLm1heChoLGYpO3AtbC5yb3dzW2NdLnJvd0hlaWdodCYmKGwucm93c1tjXS5yb3dIZWlnaHQ9cCx0LnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5DZWxsKS5jYWxsKHopLEUobnVsbCx0LmZpbHRlcihBKSwwKSx4KHIsYSwhMCkpLHMuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZT1pLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUpLnNlbGVjdCgiLiIrbi5jbi5jZWxsUmVjdCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9dGhpcy50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpLGE9ZS50b3AtdC50b3ArKHI/ci5tYXRyaXguZjpuLmNlbGxQYWQpO3JldHVybiB1KE8obyxpLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUpLnNlbGVjdCgiLiIrbi5jbi5jZWxsVGV4dEhvbGRlcikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKSxhKX0pKSxvLnNldHRsZWRZPSEwfX19ZnVuY3Rpb24gTyh0LGUpe3N3aXRjaCh0LmFsaWduKXtjYXNlImxlZnQiOnJldHVybiBuLmNlbGxQYWQ7Y2FzZSJyaWdodCI6cmV0dXJuIHQuY29sdW1uLmNvbHVtbldpZHRoLShlfHwwKS1uLmNlbGxQYWQ7Y2FzZSJjZW50ZXIiOnJldHVybih0LmNvbHVtbi5jb2x1bW5XaWR0aC0oZXx8MCkpLzI7ZGVmYXVsdDpyZXR1cm4gbi5jZWxsUGFkfX1mdW5jdGlvbiB6KHQpe3QuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9dC5yb3dCbG9ja3NbMF0uYXV4aWxpYXJ5QmxvY2tzLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtSKGUsMS8wKX0pLDApLHI9UihCKHQpLHQua2V5KTtyZXR1cm4gdSgwLHIrZSl9KSkuc2VsZWN0QWxsKCIuIituLmNuLmNlbGxSZWN0KS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4oZT1CKHQpLHI9dC5rZXksZS5yb3dzW3ItZS5maXJzdFJvd0luZGV4XSkucm93SGVpZ2h0O3ZhciBlLHJ9KSl9ZnVuY3Rpb24gRCh0LGUpe2Zvcih2YXIgcj0wLG49ZS0xO24+PTA7bi0tKXIrPUYodFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gUih0LGUpe2Zvcih2YXIgcj0wLG49MDtuPHQucm93cy5sZW5ndGgmJnQucm93c1tuXS5yb3dJbmRleDxlO24rKylyKz10LnJvd3Nbbl0ucm93SGVpZ2h0O3JldHVybiByfWZ1bmN0aW9uIEYodCl7dmFyIGU9dC5hbGxSb3dzSGVpZ2h0O2lmKHZvaWQgMCE9PWUpcmV0dXJuIGU7Zm9yKHZhciByPTAsbj0wO248dC5yb3dzLmxlbmd0aDtuKyspcis9dC5yb3dzW25dLnJvd0hlaWdodDtyZXR1cm4gdC5hbGxSb3dzSGVpZ2h0PXIscn1mdW5jdGlvbiBCKHQpe3JldHVybiB0LnJvd0Jsb2Nrc1t0LnBhZ2VdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPSF0Ll9jb250ZXh0LnN0YXRpY1Bsb3QsYT10Ll9mdWxsTGF5b3V0Ll9wYXBlci5zZWxlY3RBbGwoIi4iK24uY24udGFibGUpLmRhdGEoZS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciByPW8udW53cmFwKGUpLnRyYWNlO3JldHVybiBoKHQscil9KSksby5rZXlGdW4pO2EuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24udGFibGUsITApLmF0dHIoIm92ZXJmbG93IiwidmlzaWJsZSIpLnN0eWxlKCJib3gtc2l6aW5nIiwiY29udGVudC1ib3giKS5zdHlsZSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpLnN0eWxlKCJsZWZ0IiwwKS5zdHlsZSgib3ZlcmZsb3ciLCJ2aXNpYmxlIikuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKSxhLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGgrdC5zaXplLmwrdC5zaXplLnJ9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0K3Quc2l6ZS50K3Quc2l6ZS5ifSkpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiB1KHQudHJhbnNsYXRlWCx0LnRyYW5zbGF0ZVkpfSkpO3ZhciBsPWEuc2VsZWN0QWxsKCIuIituLmNuLnRhYmxlQ29udHJvbFZpZXcpLmRhdGEoby5yZXBlYXQsby5rZXlGdW4pLGQ9bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi50YWJsZUNvbnRyb2xWaWV3LCEwKS5zdHlsZSgiYm94LXNpemluZyIsImNvbnRlbnQtYm94Iik7aWYocil7dmFyIF89Im9ud2hlZWwiaW4gZG9jdW1lbnQ/IndoZWVsIjoibW91c2V3aGVlbCI7ZC5vbigibW91c2Vtb3ZlIiwoZnVuY3Rpb24oZSl7bC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dH0pKS5jYWxsKHgsdCl9KSkub24oXywoZnVuY3Rpb24oZSl7aWYoIWUuc2Nyb2xsYmFyU3RhdGUud2hlZWxpbmcpe2Uuc2Nyb2xsYmFyU3RhdGUud2hlZWxpbmc9ITA7dmFyIHI9ZS5zY3JvbGxZK2kuZXZlbnQuZGVsdGFZO0wodCxsLG51bGwscikoZSl8fChpLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLGkuZXZlbnQucHJldmVudERlZmF1bHQoKSksZS5zY3JvbGxiYXJTdGF0ZS53aGVlbGluZz0hMX19KSkuY2FsbCh4LHQsITApfWwuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIHUodC5zaXplLmwsdC5zaXplLnQpfSkpO3ZhciB3PWwuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbEJhY2tncm91bmQpLmRhdGEoby5yZXBlYXQsby5rZXlGdW4pO3cuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24uc2Nyb2xsQmFja2dyb3VuZCwhMCkuYXR0cigiZmlsbCIsIm5vbmUiKSx3LmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGh9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkpLGwuZWFjaCgoZnVuY3Rpb24oZSl7cy5zZXRDbGlwVXJsKGkuc2VsZWN0KHRoaXMpLGcodCxlKSx0KX0pKTt2YXIgVD1sLnNlbGVjdEFsbCgiLiIrbi5jbi55Q29sdW1uKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW5zfSksby5rZXlGdW4pO1QuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24ueUNvbHVtbiwhMCksVC5leGl0KCkucmVtb3ZlKCksVC5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gdSh0LngsMCl9KSksciYmVC5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbigoZnVuY3Rpb24oZSl7cmV0dXJuIGsoaS5zZWxlY3QodGhpcyksZSwtbi51cGxpZnQpLGModGhpcyksZS5jYWxjZGF0YS5jb2x1bW5EcmFnSW5Qcm9ncmVzcz0hMCx4KGwuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gZS5jYWxjZGF0YS5rZXk9PT10LmtleX0pKSx0KSxlfSkpLm9uKCJkcmFnIiwoZnVuY3Rpb24odCl7dmFyIGU9aS5zZWxlY3QodGhpcykscj1mdW5jdGlvbihlKXtyZXR1cm4odD09PWU/aS5ldmVudC54OmUueCkrZS5jb2x1bW5XaWR0aC8yfTt0Lng9TWF0aC5tYXgoLW4ub3ZlcmRyYWcsTWF0aC5taW4odC5jYWxjZGF0YS53aWR0aCtuLm92ZXJkcmFnLXQuY29sdW1uV2lkdGgsaS5ldmVudC54KSkseShUKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNhbGNkYXRhLmtleT09PXQuY2FsY2RhdGEua2V5fSkpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCktcihlKX0pKS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe2UueEluZGV4PXIsZS54PXQ9PT1lP2UueDplLnhTY2FsZShlKX0pKSxULmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIHQhPT1lfSkpLnRyYW5zaXRpb24oKS5lYXNlKG4udHJhbnNpdGlvbkVhc2UpLmR1cmF0aW9uKG4udHJhbnNpdGlvbkR1cmF0aW9uKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gdSh0LngsMCl9KSksZS5jYWxsKGYpLmF0dHIoInRyYW5zZm9ybSIsdSh0LngsLW4udXBsaWZ0KSl9KSkub24oImRyYWdlbmQiLChmdW5jdGlvbihlKXt2YXIgcj1pLnNlbGVjdCh0aGlzKSxuPWUuY2FsY2RhdGE7ZS54PWUueFNjYWxlKGUpLGUuY2FsY2RhdGEuY29sdW1uRHJhZ0luUHJvZ3Jlc3M9ITEsayhyLGUsMCksZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuZ2RDb2x1bW5zT3JpZ2luYWxPcmRlcjtlLmdkQ29sdW1ucy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiByW24uaW5kZXhPZih0KV0tcltuLmluZGV4T2YoZSldfSkpLGUuY29sdW1ub3JkZXI9cix0LmVtaXQoInBsb3RseV9yZXN0eWxlIil9KHQsbixuLmNvbHVtbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC54SW5kZXh9KSkpfSkpKSxULmVhY2goKGZ1bmN0aW9uKGUpe3Muc2V0Q2xpcFVybChpLnNlbGVjdCh0aGlzKSx2KHQsZSksdCl9KSk7dmFyIFM9VC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQmxvY2spLmRhdGEocC5zcGxpdFRvUGFuZWxzLG8ua2V5RnVuKTtTLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLmNvbHVtbkJsb2NrLCEwKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pKSxTLnN0eWxlKCJjdXJzb3IiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5kcmFnSGFuZGxlPyJldy1yZXNpemUiOnQuY2FsY2RhdGEuc2Nyb2xsYmFyU3RhdGUuYmFyV2lnZ2xlUm9vbT8ibnMtcmVzaXplIjoiZGVmYXVsdCJ9KSk7dmFyIEM9Uy5maWx0ZXIoTSksUD1TLmZpbHRlcihBKTtyJiZQLmNhbGwoaS5iZWhhdmlvci5kcmFnKCkub3JpZ2luKChmdW5jdGlvbih0KXtyZXR1cm4gaS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSx0fSkpLm9uKCJkcmFnIixMKHQsbCwtMSkpLm9uKCJkcmFnZW5kIiwoZnVuY3Rpb24oKXt9KSkpLGIodCxsLEMsUyksYih0LGwsUCxTKTt2YXIgST1sLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxBcmVhQ2xpcCkuZGF0YShvLnJlcGVhdCxvLmtleUZ1bik7SS5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKG4uY24uc2Nyb2xsQXJlYUNsaXAsITApLmF0dHIoImlkIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGcodCxlKX0pKTt2YXIgTz1JLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxBcmVhQ2xpcFJlY3QpLmRhdGEoby5yZXBlYXQsby5rZXlGdW4pO08uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24uc2Nyb2xsQXJlYUNsaXBSZWN0LCEwKS5hdHRyKCJ4Iiwtbi5vdmVyZHJhZykuYXR0cigieSIsLW4udXBsaWZ0KS5hdHRyKCJmaWxsIiwibm9uZSIpLE8uYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aCsyKm4ub3ZlcmRyYWd9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0K24udXBsaWZ0fSkpLFQuc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkJvdW5kYXJ5KS5kYXRhKG8ucmVwZWF0LG8ua2V5RnVuKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5jb2x1bW5Cb3VuZGFyeSwhMCk7dmFyIHo9VC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQm91bmRhcnlDbGlwcGF0aCkuZGF0YShvLnJlcGVhdCxvLmtleUZ1bik7ei5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKG4uY24uY29sdW1uQm91bmRhcnlDbGlwcGF0aCwhMCksei5hdHRyKCJpZCIsKGZ1bmN0aW9uKGUpe3JldHVybiB2KHQsZSl9KSk7dmFyIEQ9ei5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQm91bmRhcnlSZWN0KS5kYXRhKG8ucmVwZWF0LG8ua2V5RnVuKTtELmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChuLmNuLmNvbHVtbkJvdW5kYXJ5UmVjdCwhMCkuYXR0cigiZmlsbCIsIm5vbmUiKSxELmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1uV2lkdGgrMiptKHQpfSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhbGNkYXRhLmhlaWdodCsyKm0odCkrbi51cGxpZnR9KSkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybi1tKHQpfSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4tbSh0KX0pKSxFKG51bGwsUCxsKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9ndXAiOjc3MywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDIsIi4vY29uc3RhbnRzIjoxMzIzLCIuL2RhdGFfcHJlcGFyYXRpb25faGVscGVyIjoxMzI0LCIuL2RhdGFfc3BsaXRfaGVscGVycyI6MTMyNSwiQHBsb3RseS9kMyI6NTh9XSwxMzI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxzPXQoIi4uL3BpZS9hdHRyaWJ1dGVzIiksbD10KCIuLi9zdW5idXJzdC9hdHRyaWJ1dGVzIiksYz10KCIuL2NvbnN0YW50cyIpLHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXtsYWJlbHM6bC5sYWJlbHMscGFyZW50czpsLnBhcmVudHMsdmFsdWVzOmwudmFsdWVzLGJyYW5jaHZhbHVlczpsLmJyYW5jaHZhbHVlcyxjb3VudDpsLmNvdW50LGxldmVsOmwubGV2ZWwsbWF4ZGVwdGg6bC5tYXhkZXB0aCx0aWxpbmc6e3BhY2tpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNxdWFyaWZ5IiwiYmluYXJ5IiwiZGljZSIsInNsaWNlIiwic2xpY2UtZGljZSIsImRpY2Utc2xpY2UiXSxkZmx0OiJzcXVhcmlmeSIsZWRpdFR5cGU6InBsb3QifSxzcXVhcmlmeXJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGZsaXA6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbIngiLCJ5Il0sZGZsdDoiIixlZGl0VHlwZToicGxvdCJ9LHBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjMsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyJ9LG1hcmtlcjp1KHtwYWQ6e3Q6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QifSxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90In0scjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCJ9LGI6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyJ9LGNvbG9yczpsLm1hcmtlci5jb2xvcnMsZGVwdGhmYWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCExLCJyZXZlcnNlZCJdLGVkaXRUeXBlOiJzdHlsZSJ9LGxpbmU6bC5tYXJrZXIubGluZSxlZGl0VHlwZToiY2FsYyJ9LGEoIm1hcmtlciIse2NvbG9yQXR0cjoiY29sb3JzIixhbmltOiExfSkpLHBhdGhiYXI6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJib3R0b20iXSxkZmx0OiJ0b3AiLGVkaXRUeXBlOiJwbG90In0sZWRnZXNoYXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyI+IiwiPCIsInwiLCIvIiwiXFwiXSxkZmx0OiI+IixlZGl0VHlwZToicGxvdCJ9LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixtaW46MTIsZWRpdFR5cGU6InBsb3QifSx0ZXh0Zm9udDp1KHt9LHMudGV4dGZvbnQse30pLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDpzLnRleHQsdGV4dGluZm86bC50ZXh0aW5mbyx0ZXh0dGVtcGxhdGU6aSh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpjLmV2ZW50RGF0YUtleXMuY29uY2F0KFsibGFiZWwiLCJ2YWx1ZSJdKX0pLGhvdmVydGV4dDpzLmhvdmVydGV4dCxob3ZlcmluZm86bC5ob3ZlcmluZm8saG92ZXJ0ZW1wbGF0ZTpuKHt9LHtrZXlzOmMuZXZlbnREYXRhS2V5c30pLHRleHRmb250OnMudGV4dGZvbnQsaW5zaWRldGV4dGZvbnQ6cy5pbnNpZGV0ZXh0Zm9udCxvdXRzaWRldGV4dGZvbnQ6dSh7fSxzLm91dHNpZGV0ZXh0Zm9udCx7fSksdGV4dHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiLCJtaWRkbGUgbGVmdCIsIm1pZGRsZSBjZW50ZXIiLCJtaWRkbGUgcmlnaHQiLCJib3R0b20gbGVmdCIsImJvdHRvbSBjZW50ZXIiLCJib3R0b20gcmlnaHQiXSxkZmx0OiJ0b3AgbGVmdCIsZWRpdFR5cGU6InBsb3QifSxzb3J0OnMuc29ydCxyb290Omwucm9vdCxkb21haW46byh7bmFtZToidHJlZW1hcCIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OSwiLi4vcGllL2F0dHJpYnV0ZXMiOjExNjUsIi4uL3N1bmJ1cnN0L2F0dHJpYnV0ZXMiOjEzMDMsIi4vY29uc3RhbnRzIjoxMzMyfV0sMTMzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpO3IubmFtZT0idHJlZW1hcCIsci5wbG90PWZ1bmN0aW9uKHQsZSxpLGEpe24ucGxvdEJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX0sci5jbGVhbj1mdW5jdGlvbih0LGUsaSxhKXtuLmNsZWFuQmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfX0seyIuLi8uLi9wbG90cy9wbG90cyI6ODkwfV0sMTMzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zdW5idXJzdC9jYWxjIik7ci5jYWxjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uY2FsYyh0LGUpfSxyLmNyb3NzVHJhY2VDYWxjPWZ1bmN0aW9uKHQpe3JldHVybiBuLl9ydW5Dcm9zc1RyYWNlQ2FsYygidHJlZW1hcCIsdCl9fSx7Ii4uL3N1bmJ1cnN0L2NhbGMiOjEzMDV9XSwxMzMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Q0xJQ0tfVFJBTlNJVElPTl9USU1FOjc1MCxDTElDS19UUkFOU0lUSU9OX0VBU0lORzoicG9seSIsZXZlbnREYXRhS2V5czpbImN1cnJlbnRQYXRoIiwicm9vdCIsImVudHJ5IiwicGVyY2VudFJvb3QiLCJwZXJjZW50RW50cnkiLCJwZXJjZW50UGFyZW50Il0sZ2FwV2l0aFBhdGhiYXI6MX19LHt9XSwxMzMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxzPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQsbD10KCIuLi9iYXIvY29uc3RhbnRzIikuVEVYVFBBRCxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHU9Yy5oYXNDb2xvcnNjYWxlLGY9Yy5oYW5kbGVEZWZhdWx0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gaChyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBwPWgoImxhYmVscyIpLGQ9aCgicGFyZW50cyIpO2lmKHAmJnAubGVuZ3RoJiZkJiZkLmxlbmd0aCl7dmFyIG09aCgidmFsdWVzIik7bSYmbS5sZW5ndGg/aCgiYnJhbmNodmFsdWVzIik6aCgiY291bnQiKSxoKCJsZXZlbCIpLGgoIm1heGRlcHRoIiksInNxdWFyaWZ5Ij09PWgoInRpbGluZy5wYWNraW5nIikmJmgoInRpbGluZy5zcXVhcmlmeXJhdGlvIiksaCgidGlsaW5nLmZsaXAiKSxoKCJ0aWxpbmcucGFkIik7dmFyIGc9aCgidGV4dCIpO2goInRleHR0ZW1wbGF0ZSIpLGUudGV4dHRlbXBsYXRlfHxoKCJ0ZXh0aW5mbyIsQXJyYXkuaXNBcnJheShnKT8idGV4dCtsYWJlbCI6ImxhYmVsIiksaCgiaG92ZXJ0ZXh0IiksaCgiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciB2PWgoInBhdGhiYXIudmlzaWJsZSIpO3ModCxlLGMsaCwiYXV0byIse2hhc1BhdGhiYXI6dixtb2R1bGVIYXNTZWxlY3RlZDohMSxtb2R1bGVIYXNVbnNlbGVjdGVkOiExLG1vZHVsZUhhc0NvbnN0cmFpbjohMSxtb2R1bGVIYXNDbGlwb25heGlzOiExLG1vZHVsZUhhc1RleHRhbmdsZTohMSxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITF9KSxoKCJ0ZXh0cG9zaXRpb24iKTt2YXIgeT0tMSE9PWUudGV4dHBvc2l0aW9uLmluZGV4T2YoImJvdHRvbSIpO2goIm1hcmtlci5saW5lLndpZHRoIikmJmgoIm1hcmtlci5saW5lLmNvbG9yIixjLnBhcGVyX2JnY29sb3IpO3ZhciB4PWgoIm1hcmtlci5jb2xvcnMiKTsoZS5faGFzQ29sb3JzY2FsZT11KHQsIm1hcmtlciIsImNvbG9ycyIpfHwodC5tYXJrZXJ8fHt9KS5jb2xvcmF4aXMpP2YodCxlLGMsaCx7cHJlZml4OiJtYXJrZXIuIixjTGV0dGVyOiJjIn0pOmgoIm1hcmtlci5kZXB0aGZhZGUiLCEoeHx8W10pLmxlbmd0aCk7dmFyIGI9MiplLnRleHRmb250LnNpemU7aCgibWFya2VyLnBhZC50Iix5P2IvNDpiKSxoKCJtYXJrZXIucGFkLmwiLGIvNCksaCgibWFya2VyLnBhZC5yIixiLzQpLGgoIm1hcmtlci5wYWQuYiIseT9iOmIvNCksZS5faG92ZXJlZD17bWFya2VyOntsaW5lOnt3aWR0aDoyLGNvbG9yOmEuY29udHJhc3QoYy5wYXBlcl9iZ2NvbG9yKX19fSx2JiYoaCgicGF0aGJhci50aGlja25lc3MiLGUucGF0aGJhci50ZXh0Zm9udC5zaXplKzIqbCksaCgicGF0aGJhci5zaWRlIiksaCgicGF0aGJhci5lZGdlc2hhcGUiKSksaCgic29ydCIpLGgoInJvb3QuY29sb3IiKSxvKGUsYyxoKSxlLl9sZW5ndGg9bnVsbH1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1MSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuLi9iYXIvY29uc3RhbnRzIjo5MTYsIi4uL2Jhci9kZWZhdWx0cyI6OTE4LCIuL2F0dHJpYnV0ZXMiOjEzMjl9XSwxMzM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uL3N1bmJ1cnN0L2hlbHBlcnMiKSxhPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5jbGVhck1pblRleHRTaXplLG89dCgiLi4vYmFyL3N0eWxlIikucmVzaXplVGV4dCxzPXQoIi4vcGxvdF9vbmUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCxjKXt2YXIgdSxmLGg9Yy50eXBlLHA9Yy5kcmF3RGVzY2VuZGFudHMsZD10Ll9mdWxsTGF5b3V0LG09ZFsiXyIraCsibGF5ZXIiXSxnPSFyOyhhKGgsZCksKHU9bS5zZWxlY3RBbGwoImcudHJhY2UuIitoKS5kYXRhKGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0cmFjZSIsITApLmNsYXNzZWQoaCwhMCksdS5vcmRlcigpLCFkLnVuaWZvcm10ZXh0Lm1vZGUmJmkuaGFzVHJhbnNpdGlvbihyKSk/KGwmJihmPWwoKSksbi50cmFuc2l0aW9uKCkuZHVyYXRpb24oci5kdXJhdGlvbikuZWFzZShyLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtmJiZmKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtmJiZmKCl9KSkuZWFjaCgoZnVuY3Rpb24oKXttLnNlbGVjdEFsbCgiZy50cmFjZSIpLmVhY2goKGZ1bmN0aW9uKGUpe3ModCxlLHRoaXMscixwKX0pKX0pKSk6KHUuZWFjaCgoZnVuY3Rpb24oZSl7cyh0LGUsdGhpcyxyLHApfSkpLGQudW5pZm9ybXRleHQubW9kZSYmbyh0LG0uc2VsZWN0QWxsKCIudHJhY2UiKSxoKSk7ZyYmdS5leGl0KCkucmVtb3ZlKCl9fSx7Ii4uL2Jhci9zdHlsZSI6OTI4LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo5MzAsIi4uL3N1bmJ1cnN0L2hlbHBlcnMiOjEzMDksIi4vcGxvdF9vbmUiOjEzNDMsIkBwbG90bHkvZDMiOjU4fV0sMTMzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikscz10KCIuL3BhcnRpdGlvbiIpLGw9dCgiLi9zdHlsZSIpLnN0eWxlT25lLGM9dCgiLi9jb25zdGFudHMiKSx1PXQoIi4uL3N1bmJ1cnN0L2hlbHBlcnMiKSxmPXQoIi4uL3N1bmJ1cnN0L2Z4Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgscCl7dmFyIGQ9cC5iYXJEaWZZLG09cC53aWR0aCxnPXAuaGVpZ2h0LHY9cC52aWV3WCx5PXAudmlld1kseD1wLnBhdGhTbGljZSxiPXAudG9Nb3ZlSW5zaWRlU2xpY2UsXz1wLnN0clRyYW5zZm9ybSx3PXAuaGFzVHJhbnNpdGlvbixUPXAuaGFuZGxlU2xpY2VzRXhpdCxrPXAubWFrZVVwZGF0ZVNsaWNlSW50ZXJwb2xhdG9yLEE9cC5tYWtlVXBkYXRlVGV4dEludGVycG9sYXRvcixNPXt9LFM9dC5fZnVsbExheW91dCxFPWVbMF0sTD1FLnRyYWNlLEM9RS5oaWVyYXJjaHksUD1tL0wuX2VudHJ5RGVwdGgsST11Lmxpc3RQYXRoKHIuZGF0YSwiaWQiKSxPPXMoQy5jb3B5KCksW20sZ10se3BhY2tpbmc6ImRpY2UiLHBhZDp7aW5uZXI6MCx0b3A6MCxsZWZ0OjAscmlnaHQ6MCxib3R0b206MH19KS5kZXNjZW5kYW50cygpOyhPPU8uZmlsdGVyKChmdW5jdGlvbih0KXt2YXIgZT1JLmluZGV4T2YodC5kYXRhLmlkKTtyZXR1cm4tMSE9PWUmJih0LngwPVAqZSx0LngxPVAqKGUrMSksdC55MD1kLHQueTE9ZCtnLHQub25QYXRoYmFyPSEwLCEwKX0pKSkucmV2ZXJzZSgpLChoPWguZGF0YShPLHUuZ2V0UHRJZCkpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicGF0aGJhciIsITApLFQoaCwhMCxNLFttLGddLHgpLGgub3JkZXIoKTt2YXIgej1oO3cmJih6PXoudHJhbnNpdGlvbigpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QodGhpcyk7dS5zZXRTbGljZUN1cnNvcihlLHQse2hpZGVPblJvb3Q6ITEsaGlkZU9uTGVhdmVzOiExLGlzVHJhbnNpdGlvbmluZzohMX0pfSkpKSx6LmVhY2goKGZ1bmN0aW9uKHMpe3MuX3gwPXYocy54MCkscy5feDE9dihzLngxKSxzLl95MD15KHMueTApLHMuX3kxPXkocy55MSkscy5faG92ZXJYPXYocy54MS1NYXRoLm1pbihtLGcpLzIpLHMuX2hvdmVyWT15KHMueTEtZy8yKTt2YXIgaD1uLnNlbGVjdCh0aGlzKSxwPWkuZW5zdXJlU2luZ2xlKGgsInBhdGgiLCJzdXJmYWNlIiwoZnVuY3Rpb24odCl7dC5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pKTt3P3AudHJhbnNpdGlvbigpLmF0dHJUd2VlbigiZCIsKGZ1bmN0aW9uKHQpe3ZhciBlPWsodCwhMCxNLFttLGddKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHgoZSh0KSl9fSkpOnAuYXR0cigiZCIseCksaC5jYWxsKGYscix0LGUse3N0eWxlT25lOmwsZXZlbnREYXRhS2V5czpjLmV2ZW50RGF0YUtleXMsdHJhbnNpdGlvblRpbWU6Yy5DTElDS19UUkFOU0lUSU9OX1RJTUUsdHJhbnNpdGlvbkVhc2luZzpjLkNMSUNLX1RSQU5TSVRJT05fRUFTSU5HfSkuY2FsbCh1LnNldFNsaWNlQ3Vyc29yLHQse2hpZGVPblJvb3Q6ITEsaGlkZU9uTGVhdmVzOiExLGlzVHJhbnNpdGlvbmluZzp0Ll90cmFuc2l0aW9uaW5nfSkscC5jYWxsKGwscyxMLHtob3ZlcmVkOiExfSkscy5fdGV4dD0odS5nZXRQdExhYmVsKHMpfHwiIikuc3BsaXQoIjxicj4iKS5qb2luKCIgIil8fCIiO3ZhciBkPWkuZW5zdXJlU2luZ2xlKGgsImciLCJzbGljZXRleHQiKSxUPWkuZW5zdXJlU2luZ2xlKGQsInRleHQiLCIiLChmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSkpLEU9aS5lbnN1cmVVbmlmb3JtRm9udFNpemUodCx1LmRldGVybWluZVRleHRGb250KEwscyxTLmZvbnQse29uUGF0aGJhcjohMH0pKTtULnRleHQocy5fdGV4dHx8IiAiKS5jbGFzc2VkKCJzbGljZXRleHQiLCEwKS5hdHRyKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IikuY2FsbChhLmZvbnQsRSkuY2FsbChvLmNvbnZlcnRUb1RzcGFucyx0KSxzLnRleHRCQj1hLmJCb3goVC5ub2RlKCkpLHMudHJhbnNmb3JtPWIocyx7Zm9udFNpemU6RS5zaXplLG9uUGF0aGJhcjohMH0pLHMudHJhbnNmb3JtLmZvbnRTaXplPUUuc2l6ZSx3P1QudHJhbnNpdGlvbigpLmF0dHJUd2VlbigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9QSh0LCEwLE0sW20sZ10pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gXyhlKHQpKX19KSk6VC5hdHRyKCJ0cmFuc2Zvcm0iLF8ocykpfSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAyLCIuLi9zdW5idXJzdC9meCI6MTMwOCwiLi4vc3VuYnVyc3QvaGVscGVycyI6MTMwOSwiLi9jb25zdGFudHMiOjEzMzIsIi4vcGFydGl0aW9uIjoxMzQxLCIuL3N0eWxlIjoxMzQ0LCJAcGxvdGx5L2QzIjo1OH1dLDEzMzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHM9dCgiLi9wYXJ0aXRpb24iKSxsPXQoIi4vc3R5bGUiKS5zdHlsZU9uZSxjPXQoIi4vY29uc3RhbnRzIiksdT10KCIuLi9zdW5idXJzdC9oZWxwZXJzIiksZj10KCIuLi9zdW5idXJzdC9meCIpLGg9dCgiLi4vc3VuYnVyc3QvcGxvdCIpLmZvcm1hdFNsaWNlTGFiZWw7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHAsZCl7dmFyIG09ZC53aWR0aCxnPWQuaGVpZ2h0LHY9ZC52aWV3WCx5PWQudmlld1kseD1kLnBhdGhTbGljZSxiPWQudG9Nb3ZlSW5zaWRlU2xpY2UsXz1kLnN0clRyYW5zZm9ybSx3PWQuaGFzVHJhbnNpdGlvbixUPWQuaGFuZGxlU2xpY2VzRXhpdCxrPWQubWFrZVVwZGF0ZVNsaWNlSW50ZXJwb2xhdG9yLEE9ZC5tYWtlVXBkYXRlVGV4dEludGVycG9sYXRvcixNPWQucHJldkVudHJ5LFM9dC5fZnVsbExheW91dCxFPWVbMF0udHJhY2UsTD0tMSE9PUUudGV4dHBvc2l0aW9uLmluZGV4T2YoImxlZnQiKSxDPS0xIT09RS50ZXh0cG9zaXRpb24uaW5kZXhPZigicmlnaHQiKSxQPS0xIT09RS50ZXh0cG9zaXRpb24uaW5kZXhPZigiYm90dG9tIiksST0hUCYmIUUubWFya2VyLnBhZC50fHxQJiYhRS5tYXJrZXIucGFkLmIsTz1zKHIsW20sZ10se3BhY2tpbmc6RS50aWxpbmcucGFja2luZyxzcXVhcmlmeXJhdGlvOkUudGlsaW5nLnNxdWFyaWZ5cmF0aW8sZmxpcFg6RS50aWxpbmcuZmxpcC5pbmRleE9mKCJ4Iik+LTEsZmxpcFk6RS50aWxpbmcuZmxpcC5pbmRleE9mKCJ5Iik+LTEscGFkOntpbm5lcjpFLnRpbGluZy5wYWQsdG9wOkUubWFya2VyLnBhZC50LGxlZnQ6RS5tYXJrZXIucGFkLmwscmlnaHQ6RS5tYXJrZXIucGFkLnIsYm90dG9tOkUubWFya2VyLnBhZC5ifX0pLmRlc2NlbmRhbnRzKCksej0xLzAsRD0tMS8wO08uZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC5kZXB0aDtlPj1FLl9tYXhEZXB0aD8odC54MD10LngxPSh0LngwK3QueDEpLzIsdC55MD10LnkxPSh0LnkwK3QueTEpLzIpOih6PU1hdGgubWluKHosZSksRD1NYXRoLm1heChELGUpKX0pKSxwPXAuZGF0YShPLHUuZ2V0UHRJZCksRS5fbWF4VmlzaWJsZUxheWVycz1pc0Zpbml0ZShEKT9ELXorMTowLHAuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzbGljZSIsITApLFQocCwhMSx7fSxbbSxnXSx4KSxwLm9yZGVyKCk7dmFyIFI9bnVsbDtpZih3JiZNKXt2YXIgRj11LmdldFB0SWQoTSk7cC5lYWNoKChmdW5jdGlvbih0KXtudWxsPT09UiYmdS5nZXRQdElkKHQpPT09RiYmKFI9e3gwOnQueDAseDE6dC54MSx5MDp0LnkwLHkxOnQueTF9KX0pKX12YXIgQj1mdW5jdGlvbigpe3JldHVybiBSfHx7eDA6MCx4MTptLHkwOjAseTE6Z319LE49cDtyZXR1cm4gdyYmKE49Ti50cmFuc2l0aW9uKCkuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCh0aGlzKTt1LnNldFNsaWNlQ3Vyc29yKGUsdCx7aGlkZU9uUm9vdDohMCxoaWRlT25MZWF2ZXM6ITEsaXNUcmFuc2l0aW9uaW5nOiExfSl9KSkpLE4uZWFjaCgoZnVuY3Rpb24ocyl7dmFyIHA9dS5pc0hlYWRlcihzLEUpO3MuX3gwPXYocy54MCkscy5feDE9dihzLngxKSxzLl95MD15KHMueTApLHMuX3kxPXkocy55MSkscy5faG92ZXJYPXYocy54MS1FLm1hcmtlci5wYWQucikscy5faG92ZXJZPXkoUD9zLnkxLUUubWFya2VyLnBhZC5iLzI6cy55MCtFLm1hcmtlci5wYWQudC8yKTt2YXIgZD1uLnNlbGVjdCh0aGlzKSxUPWkuZW5zdXJlU2luZ2xlKGQsInBhdGgiLCJzdXJmYWNlIiwoZnVuY3Rpb24odCl7dC5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pKTt3P1QudHJhbnNpdGlvbigpLmF0dHJUd2VlbigiZCIsKGZ1bmN0aW9uKHQpe3ZhciBlPWsodCwhMSxCKCksW20sZ10pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4geChlKHQpKX19KSk6VC5hdHRyKCJkIix4KSxkLmNhbGwoZixyLHQsZSx7c3R5bGVPbmU6bCxldmVudERhdGFLZXlzOmMuZXZlbnREYXRhS2V5cyx0cmFuc2l0aW9uVGltZTpjLkNMSUNLX1RSQU5TSVRJT05fVElNRSx0cmFuc2l0aW9uRWFzaW5nOmMuQ0xJQ0tfVFJBTlNJVElPTl9FQVNJTkd9KS5jYWxsKHUuc2V0U2xpY2VDdXJzb3IsdCx7aXNUcmFuc2l0aW9uaW5nOnQuX3RyYW5zaXRpb25pbmd9KSxULmNhbGwobCxzLEUse2hvdmVyZWQ6ITF9KSxzLngwPT09cy54MXx8cy55MD09PXMueTE/cy5fdGV4dD0iIjpzLl90ZXh0PXA/ST8iIjp1LmdldFB0TGFiZWwocyl8fCIiOmgocyxyLEUsZSxTKXx8IiI7dmFyIE09aS5lbnN1cmVTaW5nbGUoZCwiZyIsInNsaWNldGV4dCIpLE89aS5lbnN1cmVTaW5nbGUoTSwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksej1pLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LHUuZGV0ZXJtaW5lVGV4dEZvbnQoRSxzLFMuZm9udCkpO08udGV4dChzLl90ZXh0fHwiICIpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLmF0dHIoInRleHQtYW5jaG9yIixDPyJlbmQiOkx8fHA/InN0YXJ0IjoibWlkZGxlIikuY2FsbChhLmZvbnQseikuY2FsbChvLmNvbnZlcnRUb1RzcGFucyx0KSxzLnRleHRCQj1hLmJCb3goTy5ub2RlKCkpLHMudHJhbnNmb3JtPWIocyx7Zm9udFNpemU6ei5zaXplLGlzSGVhZGVyOnB9KSxzLnRyYW5zZm9ybS5mb250U2l6ZT16LnNpemUsdz9PLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPUEodCwhMSxCKCksW20sZ10pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gXyhlKHQpKX19KSk6Ty5hdHRyKCJ0cmFuc2Zvcm0iLF8ocykpfSkpLFJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDIsIi4uL3N1bmJ1cnN0L2Z4IjoxMzA4LCIuLi9zdW5idXJzdC9oZWxwZXJzIjoxMzA5LCIuLi9zdW5idXJzdC9wbG90IjoxMzEzLCIuL2NvbnN0YW50cyI6MTMzMiwiLi9wYXJ0aXRpb24iOjEzNDEsIi4vc3R5bGUiOjEzNDQsIkBwbG90bHkvZDMiOjU4fV0sMTMzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIsbil7dmFyIGk7bi5zd2FwWFkmJihpPWUueDAsZS54MD1lLnkwLGUueTA9aSxpPWUueDEsZS54MT1lLnkxLGUueTE9aSksbi5mbGlwWCYmKGk9ZS54MCxlLngwPXJbMF0tZS54MSxlLngxPXJbMF0taSksbi5mbGlwWSYmKGk9ZS55MCxlLnkwPXJbMV0tZS55MSxlLnkxPXJbMV0taSk7dmFyIGE9ZS5jaGlsZHJlbjtpZihhKWZvcih2YXIgbz0wO288YS5sZW5ndGg7bysrKXQoYVtvXSxyLG4pfX0se31dLDEzMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToidHJlZW1hcCIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOltdLGFuaW1hdGFibGU6ITAsYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dCgiLi9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIikuc3R5bGUsY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxtZXRhOnt9fX0seyIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTIwOSwiLi9hdHRyaWJ1dGVzIjoxMzI5LCIuL2Jhc2VfcGxvdCI6MTMzMCwiLi9jYWxjIjoxMzMxLCIuL2RlZmF1bHRzIjoxMzMzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMzM5LCIuL2xheW91dF9kZWZhdWx0cyI6MTM0MCwiLi9wbG90IjoxMzQyLCIuL3N0eWxlIjoxMzQ0fV0sMTMzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3RyZWVtYXBjb2xvcndheTp7dmFsVHlwZToiY29sb3JsaXN0IixlZGl0VHlwZToiY2FsYyJ9LGV4dGVuZHRyZWVtYXBjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSwxMzQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1yKCJ0cmVlbWFwY29sb3J3YXkiLGUuY29sb3J3YXkpLHIoImV4dGVuZHRyZWVtYXBjb2xvcnMiKX19LHsiLi4vLi4vbGliIjo3NzYsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEzMzl9XSwxMzQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzLWhpZXJhcmNoeSIpLGk9dCgiLi9mbGlwX3RyZWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG89ci5mbGlwWCxzPXIuZmxpcFksbD0iZGljZS1zbGljZSI9PT1yLnBhY2tpbmcsYz1yLnBhZFtzPyJib3R0b20iOiJ0b3AiXSx1PXIucGFkW28/InJpZ2h0IjoibGVmdCJdLGY9ci5wYWRbbz8ibGVmdCI6InJpZ2h0Il0saD1yLnBhZFtzPyJ0b3AiOiJib3R0b20iXTtsJiYoYT11LHU9YyxjPWEsYT1mLGY9aCxoPWEpO3ZhciBwPW4udHJlZW1hcCgpLnRpbGUoZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZSJzcXVhcmlmeSI6cmV0dXJuIG4udHJlZW1hcFNxdWFyaWZ5LnJhdGlvKGUpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gbi50cmVlbWFwQmluYXJ5O2Nhc2UiZGljZSI6cmV0dXJuIG4udHJlZW1hcERpY2U7Y2FzZSJzbGljZSI6cmV0dXJuIG4udHJlZW1hcFNsaWNlO2RlZmF1bHQ6cmV0dXJuIG4udHJlZW1hcFNsaWNlRGljZX19KHIucGFja2luZyxyLnNxdWFyaWZ5cmF0aW8pKS5wYWRkaW5nSW5uZXIoci5wYWQuaW5uZXIpLnBhZGRpbmdMZWZ0KHUpLnBhZGRpbmdSaWdodChmKS5wYWRkaW5nVG9wKGMpLnBhZGRpbmdCb3R0b20oaCkuc2l6ZShsP1tlWzFdLGVbMF1dOmUpKHQpO3JldHVybihsfHxvfHxzKSYmaShwLGUse3N3YXBYWTpsLGZsaXBYOm8sZmxpcFk6c30pLHB9fSx7Ii4vZmxpcF90cmVlIjoxMzM3LCJkMy1oaWVyYXJjaHkiOjE2M31dLDEzNDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9kcmF3IiksaT10KCIuL2RyYXdfZGVzY2VuZGFudHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7cmV0dXJuIG4odCxlLHIsYSx7dHlwZToidHJlZW1hcCIsZHJhd0Rlc2NlbmRhbnRzOml9KX19LHsiLi9kcmF3IjoxMzM0LCIuL2RyYXdfZGVzY2VuZGFudHMiOjEzMzZ9XSwxMzQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImQzLWludGVycG9sYXRlIikuaW50ZXJwb2xhdGUsYT10KCIuLi9zdW5idXJzdC9oZWxwZXJzIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uL2Jhci9jb25zdGFudHMiKS5URVhUUEFELGw9dCgiLi4vYmFyL3Bsb3QiKS50b01vdmVJbnNpZGVCYXIsYz10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikucmVjb3JkTWluVGV4dFNpemUsdT10KCIuL2NvbnN0YW50cyIpLGY9dCgiLi9kcmF3X2FuY2VzdG9ycyIpO2Z1bmN0aW9uIGgodCl7cmV0dXJuIGEuaXNIaWVyYXJjaHlSb290KHQpPyIiOmEuZ2V0UHRJZCh0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscCxkKXt2YXIgbT10Ll9mdWxsTGF5b3V0LGc9ZVswXSx2PWcudHJhY2UseT0iaWNpY2xlIj09PXYudHlwZSx4PWcuaGllcmFyY2h5LGI9YS5maW5kRW50cnlXaXRoTGV2ZWwoeCx2LmxldmVsKSxfPW4uc2VsZWN0KHIpLHc9Xy5zZWxlY3RBbGwoImcucGF0aGJhciIpLFQ9Xy5zZWxlY3RBbGwoImcuc2xpY2UiKTtpZighYilyZXR1cm4gdy5yZW1vdmUoKSx2b2lkIFQucmVtb3ZlKCk7dmFyIGs9YS5pc0hpZXJhcmNoeVJvb3QoYiksQT0hbS51bmlmb3JtdGV4dC5tb2RlJiZhLmhhc1RyYW5zaXRpb24ocCksTT1hLmdldE1heERlcHRoKHYpLFM9bS5fc2l6ZSxFPXYuZG9tYWluLEw9Uy53KihFLnhbMV0tRS54WzBdKSxDPVMuaCooRS55WzFdLUUueVswXSksUD1MLEk9di5wYXRoYmFyLnRoaWNrbmVzcyxPPXYubWFya2VyLmxpbmUud2lkdGgrdS5nYXBXaXRoUGF0aGJhcix6PXYucGF0aGJhci52aXNpYmxlP3YucGF0aGJhci5zaWRlLmluZGV4T2YoImJvdHRvbSIpPi0xP0MrTzotKEkrTyk6MCxEPXt4MDpQLHgxOlAseTA6eix5MTp6K0l9LFI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXYudGlsaW5nLnBhZCxpPWZ1bmN0aW9uKHQpe3JldHVybiB0LW48PWUueDB9LGE9ZnVuY3Rpb24odCl7cmV0dXJuIHQrbj49ZS54MX0sbz1mdW5jdGlvbih0KXtyZXR1cm4gdC1uPD1lLnkwfSxzPWZ1bmN0aW9uKHQpe3JldHVybiB0K24+PWUueTF9O3JldHVybiB0LngwPT09ZS54MCYmdC54MT09PWUueDEmJnQueTA9PT1lLnkwJiZ0LnkxPT09ZS55MT97eDA6dC54MCx4MTp0LngxLHkwOnQueTAseTE6dC55MX06e3gwOmkodC54MC1uKT8wOmEodC54MC1uKT9yWzBdOnQueDAseDE6aSh0LngxK24pPzA6YSh0LngxK24pP3JbMF06dC54MSx5MDpvKHQueTAtbik/MDpzKHQueTAtbik/clsxXTp0LnkwLHkxOm8odC55MStuKT8wOnModC55MStuKT9yWzFdOnQueTF9fSxGPW51bGwsQj17fSxOPXt9LGo9bnVsbCxVPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/QltoKHQpXTpOW2godCldfSxWPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKGUpcmV0dXJuIEJbaCh4KV18fEQ7dmFyIGk9Tlt2LmxldmVsXXx8cjtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQuZGF0YS5kZXB0aC1iLmRhdGEuZGVwdGg8TX0odCk/Uih0LGksbik6e319O2cuaGFzTXVsdGlwbGVSb290cyYmayYmTSsrLHYuX21heERlcHRoPU0sdi5fYmFja2dyb3VuZENvbG9yPW0ucGFwZXJfYmdjb2xvcix2Ll9lbnRyeURlcHRoPWIuZGF0YS5kZXB0aCx2Ll9hdFJvb3RMZXZlbD1rO3ZhciBIPS1MLzIrUy5sK1MudyooRS54WzFdK0UueFswXSkvMixxPS1DLzIrUy50K1MuaCooMS0oRS55WzFdK0UueVswXSkvMiksRz1mdW5jdGlvbih0KXtyZXR1cm4gSCt0fSxZPWZ1bmN0aW9uKHQpe3JldHVybiBxK3R9LFc9WSgwKSxYPUcoMCksWj1mdW5jdGlvbih0KXtyZXR1cm4gWCt0fSxKPWZ1bmN0aW9uKHQpe3JldHVybiBXK3R9O2Z1bmN0aW9uIEsodCxlKXtyZXR1cm4gdCsiLCIrZX12YXIgUT1aKDApLCQ9ZnVuY3Rpb24odCl7dC54PU1hdGgubWF4KFEsdC54KX0sdHQ9di5wYXRoYmFyLmVkZ2VzaGFwZSxldD1mdW5jdGlvbih0LGUpe3ZhciByPXQueDAsbj10LngxLGk9dC55MCxhPXQueTEsbz10LnRleHRCQix1PWZ1bmN0aW9uKHQpe3JldHVybi0xIT09di50ZXh0cG9zaXRpb24uaW5kZXhPZih0KX0sZj11KCJib3R0b20iKSxoPXUoInRvcCIpfHxlLmlzSGVhZGVyJiYhZj8ic3RhcnQiOmY/ImVuZCI6Im1pZGRsZSIscD11KCJyaWdodCIpLGQ9dSgibGVmdCIpfHxlLm9uUGF0aGJhcj8tMTpwPzE6MCxnPXZbeT8idGlsaW5nIjoibWFya2VyIl0ucGFkO2lmKGUuaXNIZWFkZXIpe2lmKChyKz0oeT9nOmcubCktcyk+PShuLT0oeT9nOmcuciktcykpe3ZhciB4PShyK24pLzI7cj14LG49eH12YXIgYjtmP2k8KGI9YS0oeT9nOmcuYikpJiZiPGEmJihpPWIpOmk8KGI9aSsoeT9nOmcudCkpJiZiPGEmJihhPWIpfXZhciBfPWwocixuLGksYSxvLHtpc0hvcml6b250YWw6ITEsY29uc3RyYWluZWQ6ITAsYW5nbGU6MCxhbmNob3I6aCxsZWZ0VG9SaWdodDpkfSk7cmV0dXJuIF8uZm9udFNpemU9ZS5mb250U2l6ZSxfLnRhcmdldFg9RyhfLnRhcmdldFgpLF8udGFyZ2V0WT1ZKF8udGFyZ2V0WSksaXNOYU4oXy50YXJnZXRYKXx8aXNOYU4oXy50YXJnZXRZKT97fToociE9PW4mJmkhPT1hJiZjKHYudHlwZSxfLG0pLHtzY2FsZTpfLnNjYWxlLHJvdGF0ZTpfLnJvdGF0ZSx0ZXh0WDpfLnRleHRYLHRleHRZOl8udGV4dFksYW5jaG9yWDpfLmFuY2hvclgsYW5jaG9yWTpfLmFuY2hvclksdGFyZ2V0WDpfLnRhcmdldFgsdGFyZ2V0WTpfLnRhcmdldFl9KX0scnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj0wLGk9dDshciYmbjxNOyluKyssKGk9aS5wYXJlbnQpP3I9VShpLGUpOm49TTtyZXR1cm4gcnx8e319LG50PWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIHMsbD1VKHQsZSk7aWYobClzPWw7ZWxzZSBpZihlKXM9RDtlbHNlIGlmKEYpaWYodC5wYXJlbnQpe3ZhciBjPWp8fHI7YyYmIWU/cz1SKHQsYyxuKToocz17fSxvLmV4dGVuZEZsYXQocyxydCh0LGUpKSl9ZWxzZSBzPW8uZXh0ZW5kRmxhdCh7fSx0KSx5JiYoImgiPT09YS5vcmllbnRhdGlvbj9hLmZsaXBYP3MueDA9dC54MTpzLngxPTA6YS5mbGlwWT9zLnkwPXQueTE6cy55MT0wKTtlbHNlIHM9e307cmV0dXJuIGkocyx7eDA6dC54MCx4MTp0LngxLHkwOnQueTAseTE6dC55MX0pfSxpdD1mdW5jdGlvbih0LGUscixuKXt2YXIgcz1VKHQsZSksbD17fSx1PVYodCxlLHIsbik7by5leHRlbmRGbGF0KGwse3RyYW5zZm9ybTpldCh7eDA6dS54MCx4MTp1LngxLHkwOnUueTAseTE6dS55MSx0ZXh0QkI6dC50ZXh0QkIsX3RleHQ6dC5fdGV4dH0se2lzSGVhZGVyOmEuaXNIZWFkZXIodCx2KX0pfSkscz9sPXM6dC5wYXJlbnQmJm8uZXh0ZW5kRmxhdChsLHJ0KHQsZSkpO3ZhciBmPXQudHJhbnNmb3JtO3JldHVybiB0LngwIT09dC54MSYmdC55MCE9PXQueTEmJmModi50eXBlLGYsbSksaShsLHt0cmFuc2Zvcm06e3NjYWxlOmYuc2NhbGUscm90YXRlOmYucm90YXRlLHRleHRYOmYudGV4dFgsdGV4dFk6Zi50ZXh0WSxhbmNob3JYOmYuYW5jaG9yWCxhbmNob3JZOmYuYW5jaG9yWSx0YXJnZXRYOmYudGFyZ2V0WCx0YXJnZXRZOmYudGFyZ2V0WX19KX0sYXQ9ZnVuY3Rpb24odCxlLHIsYSxvKXt2YXIgcz1hWzBdLGw9YVsxXTtBP3QuZXhpdCgpLnRyYW5zaXRpb24oKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3Quc2VsZWN0KCJwYXRoLnN1cmZhY2UiKS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJkIiwoZnVuY3Rpb24odCl7dmFyIHI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGEsbz1VKHQsZSk7aWYoZSlhPUQ7ZWxzZXt2YXIgcz1VKGIsZSk7YT1zP1IodCxzLG4pOnt9fXJldHVybiBpKG8sYSl9KHQsZSwwLFtzLGxdKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG8ocih0KSl9fSkpLHQuc2VsZWN0KCJnLnNsaWNldGV4dCIpLmF0dHIoIm9wYWNpdHkiLDApfSkpLnJlbW92ZSgpOnQuZXhpdCgpLnJlbW92ZSgpfSxvdD1mdW5jdGlvbih0KXt2YXIgZT10LnRyYW5zZm9ybTtyZXR1cm4gdC54MCE9PXQueDEmJnQueTAhPT10LnkxJiZjKHYudHlwZSxlLG0pLG8uZ2V0VGV4dFRyYW5zZm9ybSh7dGV4dFg6ZS50ZXh0WCx0ZXh0WTplLnRleHRZLGFuY2hvclg6ZS5hbmNob3JYLGFuY2hvclk6ZS5hbmNob3JZLHRhcmdldFg6ZS50YXJnZXRYLHRhcmdldFk6ZS50YXJnZXRZLHNjYWxlOmUuc2NhbGUscm90YXRlOmUucm90YXRlfSl9O0EmJih3LmVhY2goKGZ1bmN0aW9uKHQpe0JbaCh0KV09e3gwOnQueDAseDE6dC54MSx5MDp0LnkwLHkxOnQueTF9LHQudHJhbnNmb3JtJiYoQltoKHQpXS50cmFuc2Zvcm09e3RleHRYOnQudHJhbnNmb3JtLnRleHRYLHRleHRZOnQudHJhbnNmb3JtLnRleHRZLGFuY2hvclg6dC50cmFuc2Zvcm0uYW5jaG9yWCxhbmNob3JZOnQudHJhbnNmb3JtLmFuY2hvclksdGFyZ2V0WDp0LnRyYW5zZm9ybS50YXJnZXRYLHRhcmdldFk6dC50cmFuc2Zvcm0udGFyZ2V0WSxzY2FsZTp0LnRyYW5zZm9ybS5zY2FsZSxyb3RhdGU6dC50cmFuc2Zvcm0ucm90YXRlfSl9KSksVC5lYWNoKChmdW5jdGlvbih0KXtOW2godCldPXt4MDp0LngwLHgxOnQueDEseTA6dC55MCx5MTp0LnkxfSx0LnRyYW5zZm9ybSYmKE5baCh0KV0udHJhbnNmb3JtPXt0ZXh0WDp0LnRyYW5zZm9ybS50ZXh0WCx0ZXh0WTp0LnRyYW5zZm9ybS50ZXh0WSxhbmNob3JYOnQudHJhbnNmb3JtLmFuY2hvclgsYW5jaG9yWTp0LnRyYW5zZm9ybS5hbmNob3JZLHRhcmdldFg6dC50cmFuc2Zvcm0udGFyZ2V0WCx0YXJnZXRZOnQudHJhbnNmb3JtLnRhcmdldFksc2NhbGU6dC50cmFuc2Zvcm0uc2NhbGUscm90YXRlOnQudHJhbnNmb3JtLnJvdGF0ZX0pLCFGJiZhLmlzRW50cnkodCkmJihGPXQpfSkpKSxqPWQodCxlLGIsVCx7d2lkdGg6TCxoZWlnaHQ6Qyx2aWV3WDpHLHZpZXdZOlkscGF0aFNsaWNlOmZ1bmN0aW9uKHQpe3ZhciBlPUcodC54MCkscj1HKHQueDEpLG49WSh0LnkwKSxpPVkodC55MSksYT1yLWUsbz1pLW47aWYoIWF8fCFvKXJldHVybiIiO3JldHVybiJNIitLKGUsbiswKSsiTCIrSyhyLTAsbikrIkwiK0socixpLTApKyJMIitLKGUrMCxpKSsiWiJ9LHRvTW92ZUluc2lkZVNsaWNlOmV0LHByZXZFbnRyeTpGLG1ha2VVcGRhdGVTbGljZUludGVycG9sYXRvcjpudCxtYWtlVXBkYXRlVGV4dEludGVycG9sYXRvcjppdCxoYW5kbGVTbGljZXNFeGl0OmF0LGhhc1RyYW5zaXRpb246QSxzdHJUcmFuc2Zvcm06b3R9KSx2LnBhdGhiYXIudmlzaWJsZT9mKHQsZSxiLHcse2JhckRpZlk6eix3aWR0aDpQLGhlaWdodDpJLHZpZXdYOlosdmlld1k6SixwYXRoU2xpY2U6ZnVuY3Rpb24odCl7dmFyIGU9WihNYXRoLm1heChNYXRoLm1pbih0LngwLHQueDApLDApKSxyPVooTWF0aC5taW4oTWF0aC5tYXgodC54MSx0LngxKSxQKSksbj1KKHQueTApLGk9Sih0LnkxKSxhPUkvMixvPXt9LHM9e307by54PWUscy54PXIsby55PXMueT0obitpKS8yO3ZhciBsPXt4OmUseTpufSxjPXt4OnIseTpufSx1PXt4OnIseTppfSxmPXt4OmUseTppfTtyZXR1cm4iPiI9PT10dD8obC54LT1hLGMueC09YSx1LngtPWEsZi54LT1hKToiLyI9PT10dD8odS54LT1hLGYueC09YSxvLngtPWEvMixzLngtPWEvMik6IlxcIj09PXR0PyhsLngtPWEsYy54LT1hLG8ueC09YS8yLHMueC09YS8yKToiPCI9PT10dCYmKG8ueC09YSxzLngtPWEpLCQobCksJChmKSwkKG8pLCQoYyksJCh1KSwkKHMpLCJNIitLKGwueCxsLnkpKyJMIitLKGMueCxjLnkpKyJMIitLKHMueCxzLnkpKyJMIitLKHUueCx1LnkpKyJMIitLKGYueCxmLnkpKyJMIitLKG8ueCxvLnkpKyJaIn0sdG9Nb3ZlSW5zaWRlU2xpY2U6ZXQsbWFrZVVwZGF0ZVNsaWNlSW50ZXJwb2xhdG9yOm50LG1ha2VVcGRhdGVUZXh0SW50ZXJwb2xhdG9yOml0LGhhbmRsZVNsaWNlc0V4aXQ6YXQsaGFzVHJhbnNpdGlvbjpBLHN0clRyYW5zZm9ybTpvdH0pOncucmVtb3ZlKCl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9iYXIvY29uc3RhbnRzIjo5MTYsIi4uL2Jhci9wbG90Ijo5MjUsIi4uL2Jhci91bmlmb3JtX3RleHQiOjkzMCwiLi4vc3VuYnVyc3QvaGVscGVycyI6MTMwOSwiLi9jb25zdGFudHMiOjEzMzIsIi4vZHJhd19hbmNlc3RvcnMiOjEzMzUsIkBwbG90bHkvZDMiOjU4LCJkMy1pbnRlcnBvbGF0ZSI6MTY0fV0sMTM0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL3N1bmJ1cnN0L2hlbHBlcnMiKSxzPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5yZXNpemVUZXh0O2Z1bmN0aW9uIGwodCxlLHIsbil7dmFyIHMsbCxjPShufHx7fSkuaG92ZXJlZCx1PWUuZGF0YS5kYXRhLGY9dS5pLGg9dS5jb2xvcixwPW8uaXNIaWVyYXJjaHlSb290KGUpLGQ9MTtpZihjKXM9ci5faG92ZXJlZC5tYXJrZXIubGluZS5jb2xvcixsPXIuX2hvdmVyZWQubWFya2VyLmxpbmUud2lkdGg7ZWxzZSBpZihwJiZoPT09ci5yb290LmNvbG9yKWQ9MTAwLHM9InJnYmEoMCwwLDAsMCkiLGw9MDtlbHNlIGlmKHM9YS5jYXN0T3B0aW9uKHIsZiwibWFya2VyLmxpbmUuY29sb3IiKXx8aS5kZWZhdWx0TGluZSxsPWEuY2FzdE9wdGlvbihyLGYsIm1hcmtlci5saW5lLndpZHRoIil8fDAsIXIuX2hhc0NvbG9yc2NhbGUmJiFlLm9uUGF0aGJhcil7dmFyIG09ci5tYXJrZXIuZGVwdGhmYWRlO2lmKG0pe3ZhciBnLHY9aS5jb21iaW5lKGkuYWRkT3BhY2l0eShyLl9iYWNrZ3JvdW5kQ29sb3IsLjc1KSxoKTtpZighMD09PW0pe3ZhciB5PW8uZ2V0TWF4RGVwdGgocik7Zz1pc0Zpbml0ZSh5KT9vLmlzTGVhZihlKT8wOnIuX21heFZpc2libGVMYXllcnMtKGUuZGF0YS5kZXB0aC1yLl9lbnRyeURlcHRoKTplLmRhdGEuaGVpZ2h0KzF9ZWxzZSBnPWUuZGF0YS5kZXB0aC1yLl9lbnRyeURlcHRoLHIuX2F0Um9vdExldmVsfHxnKys7aWYoZz4wKWZvcih2YXIgeD0wO3g8Zzt4Kyspe3ZhciBiPS41KngvZztoPWkuY29tYmluZShpLmFkZE9wYWNpdHkodixiKSxoKX19fXQuc3R5bGUoInN0cm9rZS13aWR0aCIsbCkuY2FsbChpLmZpbGwsaCkuY2FsbChpLnN0cm9rZSxzKS5zdHlsZSgib3BhY2l0eSIsZCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll90cmVlbWFwbGF5ZXIuc2VsZWN0QWxsKCIudHJhY2UiKTtzKHQsZSwidHJlZW1hcCIpLGUuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj10WzBdLnRyYWNlO2Uuc3R5bGUoIm9wYWNpdHkiLHIub3BhY2l0eSksZS5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmVhY2goKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwobCx0LHIse2hvdmVyZWQ6ITF9KX0pKX0pKX0sc3R5bGVPbmU6bH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9saWIiOjc3NiwiLi4vYmFyL3VuaWZvcm1fdGV4dCI6OTMwLCIuLi9zdW5idXJzdC9oZWxwZXJzIjoxMzA5LCJAcGxvdGx5L2QzIjo1OH1dLDEzNDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYm94L2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQ7ZS5leHBvcnRzPXt5Om4ueSx4Om4ueCx4MDpuLngwLHkwOm4ueTAseGhvdmVyZm9ybWF0OmEoIngiKSx5aG92ZXJmb3JtYXQ6YSgieSIpLG5hbWU6aSh7fSxuLm5hbWUse30pLG9yaWVudGF0aW9uOmkoe30sbi5vcmllbnRhdGlvbix7fSksYmFuZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJjYWxjIn0sc2NhbGVncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc2NhbGVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ3aWR0aCIsImNvdW50Il0sZGZsdDoid2lkdGgiLGVkaXRUeXBlOiJjYWxjIn0sc3Bhbm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNvZnQiLCJoYXJkIiwibWFudWFsIl0sZGZsdDoic29mdCIsZWRpdFR5cGU6ImNhbGMifSxzcGFuOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9XSxlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sZmlsbGNvbG9yOm4uZmlsbGNvbG9yLHBvaW50czppKHt9LG4uYm94cG9pbnRzLHt9KSxqaXR0ZXI6aSh7fSxuLmppdHRlcix7fSkscG9pbnRwb3M6aSh7fSxuLnBvaW50cG9zLHt9KSx3aWR0aDppKHt9LG4ud2lkdGgse30pLG1hcmtlcjpuLm1hcmtlcix0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsYm94Ont2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMjUsZWRpdFR5cGU6InBsb3QifSxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sbWVhbmxpbmU6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYm90aCIsInBvc2l0aXZlIiwibmVnYXRpdmUiXSxkZmx0OiJib3RoIixlZGl0VHlwZToiY2FsYyJ9LG9mZnNldGdyb3VwOm4ub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6bi5hbGlnbm1lbnRncm91cCxzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLGhvdmVyb246e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbInZpb2xpbnMiLCJwb2ludHMiLCJrZGUiXSxkZmx0OiJ2aW9saW5zK3BvaW50cytrZGUiLGV4dHJhczpbImFsbCJdLGVkaXRUeXBlOiJzdHlsZSJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo4MzAsIi4uL2JveC9hdHRyaWJ1dGVzIjo5Mzl9XSwxMzQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uL2JveC9jYWxjIiksbz10KCIuL2hlbHBlcnMiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gbCh0LGUscil7dmFyIGk9ZS5tYXgtZS5taW47aWYoIWkpcmV0dXJuIHQuYmFuZHdpZHRoP3QuYmFuZHdpZHRoOjA7aWYodC5iYW5kd2lkdGgpcmV0dXJuIE1hdGgubWF4KHQuYmFuZHdpZHRoLGkvMWU0KTt2YXIgYT1yLmxlbmd0aCxvPW4uc3RkZXYocixhLTEsZS5tZWFuKTtyZXR1cm4gTWF0aC5tYXgoZnVuY3Rpb24odCxlLHIpe3JldHVybiAxLjA1OSpNYXRoLm1pbihlLHIvMS4zNDkpKk1hdGgucG93KHQsLS4yKX0oYSxvLGUucTMtZS5xMSksaS8xMDApfWZ1bmN0aW9uIGModCxlLHIsbil7dmFyIGEsbz10LnNwYW5tb2RlLGw9dC5zcGFufHxbXSxjPVtlLm1pbixlLm1heF0sdT1bZS5taW4tMipuLGUubWF4KzIqbl07ZnVuY3Rpb24gZihuKXt2YXIgaT1sW25dLGE9Im11bHRpY2F0ZWdvcnkiPT09ci50eXBlP3IucjJjKGkpOnIuZDJjKGksMCx0W2UudmFsTGV0dGVyKyJjYWxlbmRhciJdKTtyZXR1cm4gYT09PXM/dVtuXTphfXZhciBoPXt0eXBlOiJsaW5lYXIiLHJhbmdlOmE9InNvZnQiPT09bz91OiJoYXJkIj09PW8/YzpbZigwKSxmKDEpXX07cmV0dXJuIGkuc2V0Q29udmVydChoKSxoLmNsZWFuUmFuZ2UoKSxhfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWEodCxlKTtpZihyWzBdLnQuZW1wdHkpcmV0dXJuIHI7Zm9yKHZhciBzPXQuX2Z1bGxMYXlvdXQsdT1pLmdldEZyb21JZCh0LGVbImgiPT09ZS5vcmllbnRhdGlvbj8ieGF4aXMiOiJ5YXhpcyJdKSxmPTEvMCxoPS0xLzAscD0wLGQ9MCxtPTA7bTxyLmxlbmd0aDttKyspe3ZhciBnPXJbbV0sdj1nLnB0cy5tYXAoby5leHRyYWN0VmFsKSx5PWcuYmFuZHdpZHRoPWwoZSxnLHYpLHg9Zy5zcGFuPWMoZSxnLHUseSk7aWYoZy5taW49PT1nLm1heCYmMD09PXkpeD1nLnNwYW49W2cubWluLGcubWF4XSxnLmRlbnNpdHk9W3t2OjEsdDp4WzBdfV0sZy5iYW5kd2lkdGg9eSxwPU1hdGgubWF4KHAsMSk7ZWxzZXt2YXIgYj14WzFdLXhbMF0sXz1NYXRoLmNlaWwoYi8oeS8zKSksdz1iL187aWYoIWlzRmluaXRlKHcpfHwhaXNGaW5pdGUoXykpcmV0dXJuIG4uZXJyb3IoIlNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggY29tcHV0aW5nIHRoZSB2aW9saW4gc3BhbiIpLHJbMF0udC5lbXB0eT0hMCxyO3ZhciBUPW8ubWFrZUtERShnLGUsdik7Zy5kZW5zaXR5PW5ldyBBcnJheShfKTtmb3IodmFyIGs9MCxBPXhbMF07QTx4WzFdK3cvMjtrKyssQSs9dyl7dmFyIE09VChBKTtnLmRlbnNpdHlba109e3Y6TSx0OkF9LHA9TWF0aC5tYXgocCxNKX19ZD1NYXRoLm1heChkLHYubGVuZ3RoKSxmPU1hdGgubWluKGYseFswXSksaD1NYXRoLm1heChoLHhbMV0pfXZhciBTPWkuZmluZEV4dHJlbWVzKHUsW2YsaF0se3BhZGRlZDohMH0pO2lmKGUuX2V4dHJlbWVzW3UuX2lkXT1TLGUud2lkdGgpclswXS50Lm1heEtERT1wO2Vsc2V7dmFyIEU9cy5fdmlvbGluU2NhbGVHcm91cFN0YXRzLEw9ZS5zY2FsZWdyb3VwLEM9RVtMXTtDPyhDLm1heEtERT1NYXRoLm1heChDLm1heEtERSxwKSxDLm1heENvdW50PU1hdGgubWF4KEMubWF4Q291bnQsZCkpOkVbTF09e21heEtERTpwLG1heENvdW50OmR9fXJldHVybiByWzBdLnQubGFiZWxzLmtkZT1uLl8odCwia2RlOiIpLHJ9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uL2JveC9jYWxjIjo5NDAsIi4vaGVscGVycyI6MTM0OX1dLDEzNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGMiKS5zZXRQb3NpdGlvbk9mZnNldCxpPVsidiIsImgiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jYWxjZGF0YSxhPWUueGF4aXMsbz1lLnlheGlzLHM9MDtzPGkubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPWlbc10sYz0iaCI9PT1sP286YSx1PVtdLGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIGg9cltmXSxwPWhbMF0udCxkPWhbMF0udHJhY2U7ITAhPT1kLnZpc2libGV8fCJ2aW9saW4iIT09ZC50eXBlfHxwLmVtcHR5fHxkLm9yaWVudGF0aW9uIT09bHx8ZC54YXhpcyE9PWEuX2lkfHxkLnlheGlzIT09by5faWR8fHUucHVzaChmKX1uKCJ2aW9saW4iLHQsdSxjKX19fSx7Ii4uL2JveC9jcm9zc190cmFjZV9jYWxjIjo5NDF9XSwxMzQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vYm94L2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWZ1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxvLHIsaSl9aWYoYS5oYW5kbGVTYW1wbGVEZWZhdWx0cyh0LGUsbCxzKSwhMSE9PWUudmlzaWJsZSl7bCgiYmFuZHdpZHRoIiksbCgic2lkZSIpLGwoIndpZHRoIil8fChsKCJzY2FsZWdyb3VwIixlLm5hbWUpLGwoInNjYWxlbW9kZSIpKTt2YXIgdSxmPWwoInNwYW4iKTtBcnJheS5pc0FycmF5KGYpJiYodT0ibWFudWFsIiksbCgic3Bhbm1vZGUiLHUpO3ZhciBoPWwoImxpbmUuY29sb3IiLCh0Lm1hcmtlcnx8e30pLmNvbG9yfHxyKSxwPWwoImxpbmUud2lkdGgiKSxkPWwoImZpbGxjb2xvciIsaS5hZGRPcGFjaXR5KGUubGluZS5jb2xvciwuNSkpO2EuaGFuZGxlUG9pbnRzRGVmYXVsdHModCxlLGwse3ByZWZpeDoiIn0pO3ZhciBtPWMoImJveC53aWR0aCIpLGc9YygiYm94LmZpbGxjb2xvciIsZCksdj1jKCJib3gubGluZS5jb2xvciIsaCkseT1jKCJib3gubGluZS53aWR0aCIscCk7bCgiYm94LnZpc2libGUiLEJvb2xlYW4obXx8Z3x8dnx8eSkpfHwoZS5ib3g9e3Zpc2libGU6ITF9KTt2YXIgeD1jKCJtZWFubGluZS5jb2xvciIsaCksYj1jKCJtZWFubGluZS53aWR0aCIscCk7bCgibWVhbmxpbmUudmlzaWJsZSIsQm9vbGVhbih4fHxiKSl8fChlLm1lYW5saW5lPXt2aXNpYmxlOiExfSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2xpYiI6Nzc2LCIuLi9ib3gvZGVmYXVsdHMiOjk0MiwiLi9hdHRyaWJ1dGVzIjoxMzQ1fV0sMTM0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGguc3FydCgyKk1hdGguUEkpKk1hdGguZXhwKC0uNSp0KnQpfTtyLm1ha2VLREU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIubGVuZ3RoLGE9aSxvPXQuYmFuZHdpZHRoLHM9MS8obipvKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsaT0wO2k8bjtpKyspZSs9YSgodC1yW2ldKS9vKTtyZXR1cm4gcyplfX0sci5nZXRQb3NpdGlvbk9uS2RlUGF0aD1mdW5jdGlvbih0LGUscil7dmFyIGksYTsiaCI9PT1lLm9yaWVudGF0aW9uPyhpPSJ5IixhPSJ4Iik6KGk9IngiLGE9InkiKTt2YXIgbz1uLmZpbmRQb2ludE9uUGF0aCh0LnBhdGgscixhLHtwYXRoTGVuZ3RoOnQucGF0aExlbmd0aH0pLHM9dC5wb3NDZW50ZXJQeCxsPW9baV07cmV0dXJuW2wsImJvdGgiPT09ZS5zaWRlPzIqcy1sOnNdfSxyLmdldEtkZVZhbHVlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10LnB0cy5tYXAoci5leHRyYWN0VmFsKTtyZXR1cm4gci5tYWtlS0RFKHQsZSxpKShuKS90LnBvc0RlbnNpdHlTY2FsZX0sci5leHRyYWN0VmFsPWZ1bmN0aW9uKHQpe3JldHVybiB0LnZ9fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sMTM1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi9ib3gvaG92ZXIiKSxvPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzLGwpe2x8fChsPXt9KTt2YXIgYyx1LGY9bC5ob3ZlckxheWVyLGg9dC5jZCxwPWhbMF0udHJhY2UsZD1wLmhvdmVyb24sbT0tMSE9PWQuaW5kZXhPZigidmlvbGlucyIpLGc9LTEhPT1kLmluZGV4T2YoImtkZSIpLHY9W107aWYobXx8Zyl7dmFyIHk9YS5ob3Zlck9uQm94ZXModCxlLHIscyk7aWYoZyYmeS5sZW5ndGg+MCl7dmFyIHgsYixfLHcsVCxrPXQueGEsQT10LnlhOyJoIj09PXAub3JpZW50YXRpb24/KFQ9ZSx4PSJ5IixfPUEsYj0ieCIsdz1rKTooVD1yLHg9IngiLF89ayxiPSJ5Iix3PUEpO3ZhciBNPWhbdC5pbmRleF07aWYoVD49TS5zcGFuWzBdJiZUPD1NLnNwYW5bMV0pe3ZhciBTPW4uZXh0ZW5kRmxhdCh7fSx0KSxFPXcuYzJwKFQsITApLEw9by5nZXRLZGVWYWx1ZShNLHAsVCksQz1vLmdldFBvc2l0aW9uT25LZGVQYXRoKE0scCxFKSxQPV8uX29mZnNldCxJPV8uX2xlbmd0aDtTW3grIjAiXT1DWzBdLFNbeCsiMSJdPUNbMV0sU1tiKyIwIl09U1tiKyIxIl09RSxTW2IrIkxhYmVsIl09YisiOiAiK2kuaG92ZXJMYWJlbFRleHQodyxULHBbYisiaG92ZXJmb3JtYXQiXSkrIiwgIitoWzBdLnQubGFiZWxzLmtkZSsiICIrTC50b0ZpeGVkKDMpLFMuc3Bpa2VEaXN0YW5jZT15WzBdLnNwaWtlRGlzdGFuY2U7dmFyIE89eCsiU3Bpa2UiO1NbT109eVswXVtPXSx5WzBdLnNwaWtlRGlzdGFuY2U9dm9pZCAwLHlbMF1bT109dm9pZCAwLFMuaG92ZXJ0ZW1wbGF0ZT0hMSx2LnB1c2goUyksKHU9e3N0cm9rZTp0LmNvbG9yfSlbeCsiMSJdPW4uY29uc3RyYWluKFArQ1swXSxQLFArSSksdVt4KyIyIl09bi5jb25zdHJhaW4oUCtDWzFdLFAsUCtJKSx1W2IrIjEiXT11W2IrIjIiXT13Ll9vZmZzZXQrRX19bSYmKHY9di5jb25jYXQoeSkpfS0xIT09ZC5pbmRleE9mKCJwb2ludHMiKSYmKGM9YS5ob3Zlck9uUG9pbnRzKHQsZSxyKSk7dmFyIHo9Zi5zZWxlY3RBbGwoIi52aW9saW5saW5lLSIrcC51aWQpLmRhdGEodT9bMF06W10pO3JldHVybiB6LmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgidmlvbGlubGluZS0iK3AudWlkLCEwKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEuNSksei5leGl0KCkucmVtb3ZlKCksei5hdHRyKHUpLCJjbG9zZXN0Ij09PXM/Yz9bY106djpjPyh2LnB1c2goYyksdik6dn19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uL2JveC9ob3ZlciI6OTQ0LCIuL2hlbHBlcnMiOjEzNDl9XSwxMzUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4uL2JveC9kZWZhdWx0cyIpLmNyb3NzVHJhY2VEZWZhdWx0cyxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksY3Jvc3NUcmFjZUNhbGM6dCgiLi9jcm9zc190cmFjZV9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIiksc3R5bGVPblNlbGVjdDp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL2JveC9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToidmlvbGluIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwic3ltYm9scyIsIm9yaWVudGVkIiwiYm94LXZpb2xpbiIsInNob3dMZWdlbmQiLCJ2aW9saW5MYXlvdXQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vYm94L2RlZmF1bHRzIjo5NDIsIi4uL2JveC9zZWxlY3QiOjk0OSwiLi4vc2NhdHRlci9zdHlsZSI6MTIxNSwiLi9hdHRyaWJ1dGVzIjoxMzQ1LCIuL2NhbGMiOjEzNDYsIi4vY3Jvc3NfdHJhY2VfY2FsYyI6MTM0NywiLi9kZWZhdWx0cyI6MTM0OCwiLi9ob3ZlciI6MTM1MCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTM1MiwiLi9sYXlvdXRfZGVmYXVsdHMiOjEzNTMsIi4vcGxvdCI6MTM1NCwiLi9zdHlsZSI6MTM1NX1dLDEzNTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9saWIiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17dmlvbGlubW9kZTppKHt9LG4uYm94bW9kZSx7fSksdmlvbGluZ2FwOmkoe30sbi5ib3hnYXAse30pLHZpb2xpbmdyb3VwZ2FwOmkoe30sbi5ib3hncm91cGdhcCx7fSl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXMiOjk0Nn1dLDEzNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuLi9ib3gvbGF5b3V0X2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXthLl9zdXBwbHkodCxlLHIsKGZ1bmN0aW9uKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9KSwidmlvbGluIil9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9ib3gvbGF5b3V0X2RlZmF1bHRzIjo5NDcsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEzNTJ9XSwxMzU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi9ib3gvcGxvdCIpLHM9dCgiLi4vc2NhdHRlci9saW5lX3BvaW50cyIpLGw9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1PXQuX2Z1bGxMYXlvdXQsZj1lLnhheGlzLGg9ZS55YXhpcztmdW5jdGlvbiBwKHQpe3ZhciBlPXModCx7eGF4aXM6Zix5YXhpczpoLGNvbm5lY3RHYXBzOiEwLGJhc2VUb2xlcmFuY2U6Ljc1LHNoYXBlOiJzcGxpbmUiLHNpbXBsaWZ5OiEwLGxpbmVhcml6ZWQ6ITB9KTtyZXR1cm4gYS5zbW9vdGhvcGVuKGVbMF0sMSl9aS5tYWtlVHJhY2VHcm91cHMoYyxyLCJ0cmFjZSB2aW9saW5zIikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT10WzBdLHM9YS50LGM9YS50cmFjZTtpZighMCE9PWMudmlzaWJsZXx8cy5lbXB0eSlyLnJlbW92ZSgpO2Vsc2V7dmFyIGQ9cy5iUG9zLG09cy5iZFBvcyxnPWVbcy52YWxMZXR0ZXIrImF4aXMiXSx2PWVbcy5wb3NMZXR0ZXIrImF4aXMiXSx5PSJib3RoIj09PWMuc2lkZSx4PXl8fCJwb3NpdGl2ZSI9PT1jLnNpZGUsYj15fHwibmVnYXRpdmUiPT09Yy5zaWRlLF89ci5zZWxlY3RBbGwoInBhdGgudmlvbGluIikuZGF0YShpLmlkZW50aXR5KTtfLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJjbGFzcyIsInZpb2xpbiIpLF8uZXhpdCgpLnJlbW92ZSgpLF8uZWFjaCgoZnVuY3Rpb24odCl7dmFyIGUscixpLGEsbyxsLGYsaCxfPW4uc2VsZWN0KHRoaXMpLHc9dC5kZW5zaXR5LFQ9dy5sZW5ndGgsaz12LmMybCh0LnBvcytkLCEwKSxBPXYubDJwKGspO2lmKGMud2lkdGgpZT1zLm1heEtERS9tO2Vsc2V7dmFyIE09dS5fdmlvbGluU2NhbGVHcm91cFN0YXRzW2Muc2NhbGVncm91cF07ZT0iY291bnQiPT09Yy5zY2FsZW1vZGU/TS5tYXhLREUvbSooTS5tYXhDb3VudC90LnB0cy5sZW5ndGgpOk0ubWF4S0RFL219aWYoeCl7Zm9yKGY9bmV3IEFycmF5KFQpLG89MDtvPFQ7bysrKShoPWZbb109e30pW3MucG9zTGV0dGVyXT1rK3dbb10udi9lLGhbcy52YWxMZXR0ZXJdPWcuYzJsKHdbb10udCwhMCk7cj1wKGYpfWlmKGIpe2ZvcihmPW5ldyBBcnJheShUKSxsPTAsbz1ULTE7bDxUO2wrKyxvLS0pKGg9ZltsXT17fSlbcy5wb3NMZXR0ZXJdPWstd1tvXS52L2UsaFtzLnZhbExldHRlcl09Zy5jMmwod1tvXS50LCEwKTtpPXAoZil9aWYoeSlhPXIrIkwiK2kuc3Vic3RyKDEpKyJaIjtlbHNle3ZhciBTPVtBLGcuYzJwKHdbMF0udCldLEU9W0EsZy5jMnAod1tULTFdLnQpXTsiaCI9PT1jLm9yaWVudGF0aW9uJiYoUy5yZXZlcnNlKCksRS5yZXZlcnNlKCkpLGE9eD8iTSIrUysiTCIrci5zdWJzdHIoMSkrIkwiK0U6Ik0iK0UrIkwiK2kuc3Vic3RyKDEpKyJMIitTfV8uYXR0cigiZCIsYSksdC5wb3NDZW50ZXJQeD1BLHQucG9zRGVuc2l0eVNjYWxlPWUqbSx0LnBhdGg9Xy5ub2RlKCksdC5wYXRoTGVuZ3RoPXQucGF0aC5nZXRUb3RhbExlbmd0aCgpLyh5PzI6MSl9KSk7dmFyIHcsVCxrLEE9Yy5ib3gsTT1BLndpZHRoLFM9KEEubGluZXx8e30pLndpZHRoO3k/KHc9bSpNLFQ9MCk6eD8odz1bMCxtKk0vMl0sVD1TKnt4OjEseTotMX1bcy5wb3NMZXR0ZXJdKToodz1bbSpNLzIsMF0sVD1TKnt4Oi0xLHk6MX1bcy5wb3NMZXR0ZXJdKSxvLnBsb3RCb3hBbmRXaGlza2VycyhyLHtwb3M6dix2YWw6Z30sYyx7YlBvczpkLGJkUG9zOncsYlBvc1B4T2Zmc2V0OlR9KSxvLnBsb3RCb3hNZWFuKHIse3Bvczp2LHZhbDpnfSxjLHtiUG9zOmQsYmRQb3M6dyxiUG9zUHhPZmZzZXQ6VH0pLCFjLmJveC52aXNpYmxlJiZjLm1lYW5saW5lLnZpc2libGUmJihrPWkuaWRlbnRpdHkpO3ZhciBFPXIuc2VsZWN0QWxsKCJwYXRoLm1lYW5saW5lIikuZGF0YShrfHxbXSk7RS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibWVhbmxpbmUiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLEUuZXhpdCgpLnJlbW92ZSgpLEUuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9Zy5jMnAodC5tZWFuLCEwKSxyPWwuZ2V0UG9zaXRpb25PbktkZVBhdGgodCxjLGUpO24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJoIj09PWMub3JpZW50YXRpb24/Ik0iK2UrIiwiK3JbMF0rIlYiK3JbMV06Ik0iK3JbMF0rIiwiK2UrIkgiK3JbMV0pfSkpLG8ucGxvdFBvaW50cyhyLHt4OmYseTpofSxjLHMpfX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIi4uLy4uL2xpYiI6Nzc2LCIuLi9ib3gvcGxvdCI6OTQ4LCIuLi9zY2F0dGVyL2xpbmVfcG9pbnRzIjoxMjA1LCIuL2hlbHBlcnMiOjEzNDksIkBwbG90bHkvZDMiOjU4fV0sMTM1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVQb2ludHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiZy50cmFjZS52aW9saW5zIik7ZS5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSksZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1lWzBdLnRyYWNlLG89bi5zZWxlY3QodGhpcykscz1yLmJveHx8e30sbD1zLmxpbmV8fHt9LGM9ci5tZWFubGluZXx8e30sdT1jLndpZHRoO28uc2VsZWN0QWxsKCJwYXRoLnZpb2xpbiIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHIubGluZS53aWR0aCsicHgiKS5jYWxsKGkuc3Ryb2tlLHIubGluZS5jb2xvcikuY2FsbChpLmZpbGwsci5maWxsY29sb3IpLG8uc2VsZWN0QWxsKCJwYXRoLmJveCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGwud2lkdGgrInB4IikuY2FsbChpLnN0cm9rZSxsLmNvbG9yKS5jYWxsKGkuZmlsbCxzLmZpbGxjb2xvcik7dmFyIGY9eyJzdHJva2Utd2lkdGgiOnUrInB4Iiwic3Ryb2tlLWRhc2hhcnJheSI6Mip1KyJweCwiK3UrInB4In07by5zZWxlY3RBbGwoInBhdGgubWVhbiIpLnN0eWxlKGYpLmNhbGwoaS5zdHJva2UsYy5jb2xvciksby5zZWxlY3RBbGwoInBhdGgubWVhbmxpbmUiKS5zdHlsZShmKS5jYWxsKGkuc3Ryb2tlLGMuY29sb3IpLGEobyxyLHQpfSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uL3NjYXR0ZXIvc3R5bGUiOjEyMTUsIkBwbG90bHkvZDMiOjU4fV0sMTM1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vaXNvc3VyZmFjZS9hdHRyaWJ1dGVzIiksYT10KCIuLi9zdXJmYWNlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGM9ZS5leHBvcnRzPWwocyh7eDppLngseTppLnksejppLnosdmFsdWU6aS52YWx1ZSxpc29taW46aS5pc29taW4saXNvbWF4OmkuaXNvbWF4LHN1cmZhY2U6aS5zdXJmYWNlLHNwYWNlZnJhbWU6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX0sc2xpY2VzOmkuc2xpY2VzLGNhcHM6aS5jYXBzLHRleHQ6aS50ZXh0LGhvdmVydGV4dDppLmhvdmVydGV4dCx4aG92ZXJmb3JtYXQ6aS54aG92ZXJmb3JtYXQseWhvdmVyZm9ybWF0OmkueWhvdmVyZm9ybWF0LHpob3ZlcmZvcm1hdDppLnpob3ZlcmZvcm1hdCx2YWx1ZWhvdmVyZm9ybWF0OmkudmFsdWVob3ZlcmZvcm1hdCxob3ZlcnRlbXBsYXRlOmkuaG92ZXJ0ZW1wbGF0ZX0sbigiIix7Y29sb3JBdHRyOiJgdmFsdWVgIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkse2NvbG9yYmFyOmkuY29sb3JiYXIsb3BhY2l0eTppLm9wYWNpdHksb3BhY2l0eXNjYWxlOmEub3BhY2l0eXNjYWxlLGxpZ2h0cG9zaXRpb246aS5saWdodHBvc2l0aW9uLGxpZ2h0aW5nOmkubGlnaHRpbmcsZmxhdHNoYWRpbmc6aS5mbGF0c2hhZGluZyxjb250b3VyOmkuY29udG91cixob3ZlcmluZm86cyh7fSxvLmhvdmVyaW5mbyksc2hvd2xlZ2VuZDpzKHt9LG8uc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfSksImNhbGMiLCJuZXN0ZWQiKTtjLnguZWRpdFR5cGU9Yy55LmVkaXRUeXBlPWMuei5lZGl0VHlwZT1jLnZhbHVlLmVkaXRUeXBlPSJjYWxjK2NsZWFyQXhpc1R5cGVzIixjLnRyYW5zZm9ybXM9dm9pZCAwfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODA5LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4uL2lzb3N1cmZhY2UvYXR0cmlidXRlcyI6MTEyNywiLi4vc3VyZmFjZS9hdHRyaWJ1dGVzIjoxMzE1fV0sMTM1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1tZXNoM2QiKSxpPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUsYT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cyxzPXQoIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyIpLGw9dCgiLi4vaXNvc3VyZmFjZS9jb252ZXJ0IikuZmluZE5lYXJlc3RPbkF4aXMsYz10KCIuLi9pc29zdXJmYWNlL2NvbnZlcnQiKS5nZW5lcmF0ZUlzb01lc2hlcztmdW5jdGlvbiB1KHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj0hMX12YXIgZj11LnByb3RvdHlwZTtmLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuZGF0YS5pbmRleCxyPXRoaXMuZGF0YS5fbWVzaFhbZV0sbj10aGlzLmRhdGEuX21lc2hZW2VdLGk9dGhpcy5kYXRhLl9tZXNoWltlXSxhPXRoaXMuZGF0YS5fWXMubGVuZ3RoLG89dGhpcy5kYXRhLl9acy5sZW5ndGgscz1sKHIsdGhpcy5kYXRhLl9YcykuaWQsYz1sKG4sdGhpcy5kYXRhLl9ZcykuaWQsdT1sKGksdGhpcy5kYXRhLl9acykuaWQsZj10LmluZGV4PXUrbypjK28qYSpzO3QudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEuX21lc2hYW2ZdLHRoaXMuZGF0YS5fbWVzaFlbZl0sdGhpcy5kYXRhLl9tZXNoWltmXSx0aGlzLmRhdGEuX3ZhbHVlW2ZdXTt2YXIgaD10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShoKSYmdm9pZCAwIT09aFtmXT90LnRleHRMYWJlbD1oW2ZdOmgmJih0LnRleHRMYWJlbD1oKSwhMH19LGYudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUscj1lLmZ1bGxTY2VuZUxheW91dDtmdW5jdGlvbiBuKHQsZSxyLG4pe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZDJsKGUsMCxuKSpyfSkpfXRoaXMuZGF0YT1jKHQpO3ZhciBsPXtwb3NpdGlvbnM6cyhuKHIueGF4aXMsdC5fbWVzaFgsZS5kYXRhU2NhbGVbMF0sdC54Y2FsZW5kYXIpLG4oci55YXhpcyx0Ll9tZXNoWSxlLmRhdGFTY2FsZVsxXSx0LnljYWxlbmRhciksbihyLnpheGlzLHQuX21lc2haLGUuZGF0YVNjYWxlWzJdLHQuemNhbGVuZGFyKSksY2VsbHM6cyh0Ll9tZXNoSSx0Ll9tZXNoSix0Ll9tZXNoSyksbGlnaHRQb3NpdGlvbjpbdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdLGFtYmllbnQ6dC5saWdodGluZy5hbWJpZW50LGRpZmZ1c2U6dC5saWdodGluZy5kaWZmdXNlLHNwZWN1bGFyOnQubGlnaHRpbmcuc3BlY3VsYXIscm91Z2huZXNzOnQubGlnaHRpbmcucm91Z2huZXNzLGZyZXNuZWw6dC5saWdodGluZy5mcmVzbmVsLHZlcnRleE5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24sZmFjZU5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLG9wYWNpdHk6dC5vcGFjaXR5LG9wYWNpdHlzY2FsZTp0Lm9wYWNpdHlzY2FsZSxjb250b3VyRW5hYmxlOnQuY29udG91ci5zaG93LGNvbnRvdXJDb2xvcjphKHQuY29udG91ci5jb2xvcikuc2xpY2UoMCwzKSxjb250b3VyV2lkdGg6dC5jb250b3VyLndpZHRoLHVzZUZhY2V0Tm9ybWFsczp0LmZsYXRzaGFkaW5nfSx1PW8odCk7bC52ZXJ0ZXhJbnRlbnNpdHk9dC5fbWVzaEludGVuc2l0eSxsLnZlcnRleEludGVuc2l0eUJvdW5kcz1bdS5taW4sdS5tYXhdLGwuY29sb3JtYXA9aSh0KSx0aGlzLm1lc2gudXBkYXRlKGwpfSxmLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPW4oe2dsOnJ9KSxhPW5ldyB1KHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjUxLCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo3NzIsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjgwMSwiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIjo4ODAsIi4uL2lzb3N1cmZhY2UvY29udmVydCI6MTEyOSwiZ2wtbWVzaDNkIjozMDN9XSwxMzU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi9pc29zdXJmYWNlL2RlZmF1bHRzIikuc3VwcGx5SXNvRGVmYXVsdHMsbz10KCIuLi9zdXJmYWNlL2RlZmF1bHRzIikub3BhY2l0eXNjYWxlRGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKHQsZSxyLHMsbCksbyh0LGUscyxsKX19LHsiLi4vLi4vbGliIjo3NzYsIi4uL2lzb3N1cmZhY2UvZGVmYXVsdHMiOjExMzAsIi4uL3N1cmZhY2UvZGVmYXVsdHMiOjEzMTgsIi4vYXR0cmlidXRlcyI6MTM1Nn1dLDEzNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4uL2lzb3N1cmZhY2UvY2FsYyIpLGNvbG9yYmFyOnttaW46ImNtaW4iLG1heDoiY21heCJ9LHBsb3Q6dCgiLi9jb252ZXJ0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InZvbHVtZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjg2OSwiLi4vaXNvc3VyZmFjZS9jYWxjIjoxMTI4LCIuL2F0dHJpYnV0ZXMiOjEzNTYsIi4vY29udmVydCI6MTM1NywiLi9kZWZhdWx0cyI6MTM1OH1dLDEzNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYmFyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLmxpbmUsYT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmF4aXNIb3ZlckZvcm1hdCxzPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbD10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsYz10KCIuL2NvbnN0YW50cyIpLHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsZj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIik7ZnVuY3Rpb24gaCh0KXtyZXR1cm57bWFya2VyOntjb2xvcjp1KHt9LG4ubWFya2VyLmNvbG9yLHthcnJheU9rOiExLGVkaXRUeXBlOiJzdHlsZSJ9KSxsaW5lOntjb2xvcjp1KHt9LG4ubWFya2VyLmxpbmUuY29sb3Ise2FycmF5T2s6ITEsZWRpdFR5cGU6InN0eWxlIn0pLHdpZHRoOnUoe30sbi5tYXJrZXIubGluZS53aWR0aCx7YXJyYXlPazohMSxlZGl0VHlwZToic3R5bGUifSksZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn19ZS5leHBvcnRzPXttZWFzdXJlOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdLGVkaXRUeXBlOiJjYWxjIn0sYmFzZTp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsYXJyYXlPazohMSxlZGl0VHlwZToiY2FsYyJ9LHg6bi54LHgwOm4ueDAsZHg6bi5keCx5Om4ueSx5MDpuLnkwLGR5Om4uZHkseHBlcmlvZDpuLnhwZXJpb2QseXBlcmlvZDpuLnlwZXJpb2QseHBlcmlvZDA6bi54cGVyaW9kMCx5cGVyaW9kMDpuLnlwZXJpb2QwLHhwZXJpb2RhbGlnbm1lbnQ6bi54cGVyaW9kYWxpZ25tZW50LHlwZXJpb2RhbGlnbm1lbnQ6bi55cGVyaW9kYWxpZ25tZW50LHhob3ZlcmZvcm1hdDpvKCJ4IikseWhvdmVyZm9ybWF0Om8oInkiKSxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpzKHt9LHtrZXlzOmMuZXZlbnREYXRhS2V5c30pLGhvdmVyaW5mbzp1KHt9LGEuaG92ZXJpbmZvLHtmbGFnczpbIm5hbWUiLCJ4IiwieSIsInRleHQiLCJpbml0aWFsIiwiZGVsdGEiLCJmaW5hbCJdfSksdGV4dGluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxhYmVsIiwidGV4dCIsImluaXRpYWwiLCJkZWx0YSIsImZpbmFsIl0sZXh0cmFzOlsibm9uZSJdLGVkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSx0ZXh0dGVtcGxhdGU6bCh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpjLmV2ZW50RGF0YUtleXMuY29uY2F0KFsibGFiZWwiXSl9KSx0ZXh0Om4udGV4dCx0ZXh0cG9zaXRpb246bi50ZXh0cG9zaXRpb24saW5zaWRldGV4dGFuY2hvcjpuLmluc2lkZXRleHRhbmNob3IsdGV4dGFuZ2xlOm4udGV4dGFuZ2xlLHRleHRmb250Om4udGV4dGZvbnQsaW5zaWRldGV4dGZvbnQ6bi5pbnNpZGV0ZXh0Zm9udCxvdXRzaWRldGV4dGZvbnQ6bi5vdXRzaWRldGV4dGZvbnQsY29uc3RyYWludGV4dDpuLmNvbnN0cmFpbnRleHQsY2xpcG9uYXhpczpuLmNsaXBvbmF4aXMsb3JpZW50YXRpb246bi5vcmllbnRhdGlvbixvZmZzZXQ6bi5vZmZzZXQsd2lkdGg6bi53aWR0aCxpbmNyZWFzaW5nOmgoKSxkZWNyZWFzaW5nOmgoKSx0b3RhbHM6aCgpLGNvbm5lY3Rvcjp7bGluZTp7Y29sb3I6dSh7fSxpLmNvbG9yLHtkZmx0OmYuZGVmYXVsdExpbmV9KSx3aWR0aDp1KHt9LGkud2lkdGgse2VkaXRUeXBlOiJwbG90In0pLGRhc2g6aS5kYXNoLGVkaXRUeXBlOiJwbG90In0sbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3Bhbm5pbmciLCJiZXR3ZWVuIl0sZGZsdDoiYmV0d2VlbiIsZWRpdFR5cGU6InBsb3QifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxvZmZzZXRncm91cDpuLm9mZnNldGdyb3VwLGFsaWdubWVudGdyb3VwOm4uYWxpZ25tZW50Z3JvdXB9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo4MzAsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OSwiLi4vYmFyL2F0dHJpYnV0ZXMiOjkxNCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTkxLCIuL2NvbnN0YW50cyI6MTM2Mn1dLDEzNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxhPXQoIi4uLy4uL2xpYiIpLm1lcmdlQXJyYXksbz10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2Z1bmN0aW9uIGwodCl7cmV0dXJuImEiPT09dHx8ImFic29sdXRlIj09PXR9ZnVuY3Rpb24gYyh0KXtyZXR1cm4idCI9PT10fHwidG90YWwiPT09dH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1LGYsaCxwLGQsbT1uLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IiksZz1uLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5Iik7ImgiPT09ZS5vcmllbnRhdGlvbj8ocj1tLm1ha2VDYWxjZGF0YShlLCJ4IiksZj1nLm1ha2VDYWxjZGF0YShlLCJ5IiksaD1pKGUsZywieSIsZikscD0hIWUueXBlcmlvZGFsaWdubWVudCxkPSJ5Iik6KHI9Zy5tYWtlQ2FsY2RhdGEoZSwieSIpLGY9bS5tYWtlQ2FsY2RhdGEoZSwieCIpLGg9aShlLG0sIngiLGYpLHA9ISFlLnhwZXJpb2RhbGlnbm1lbnQsZD0ieCIpLHU9aC52YWxzO2Zvcih2YXIgdix5PU1hdGgubWluKHUubGVuZ3RoLHIubGVuZ3RoKSx4PW5ldyBBcnJheSh5KSxiPTAsXz0hMSx3PTA7dzx5O3crKyl7dmFyIFQ9clt3XXx8MCxrPSExOyhyW3ddIT09c3x8YyhlLm1lYXN1cmVbd10pfHxsKGUubWVhc3VyZVt3XSkpJiZ3KzE8eSYmKHJbdysxXSE9PXN8fGMoZS5tZWFzdXJlW3crMV0pfHxsKGUubWVhc3VyZVt3KzFdKSkmJihrPSEwKTt2YXIgQT14W3ddPXtpOncscDp1W3ddLHM6VCxyYXdTOlQsY05leHQ6a307bChlLm1lYXN1cmVbd10pPyhiPUEucyxBLmlzU3VtPSEwLEEuZGlyPSJ0b3RhbHMiLEEucz1iKTpjKGUubWVhc3VyZVt3XSk/KEEuaXNTdW09ITAsQS5kaXI9InRvdGFscyIsQS5zPWIpOihBLmlzU3VtPSExLEEuZGlyPUEucmF3UzwwPyJkZWNyZWFzaW5nIjoiaW5jcmVhc2luZyIsdj1BLnMsQS5zPWIrdixiKz12KSwidG90YWxzIj09PUEuZGlyJiYoXz0hMCkscCYmKHhbd10ub3JpZ19wPWZbd10seFt3XVtkKyJFbmQiXT1oLmVuZHNbd10seFt3XVtkKyJTdGFydCJdPWguc3RhcnRzW3ddKSxlLmlkcyYmKEEuaWQ9U3RyaW5nKGUuaWRzW3ddKSksQS52PShlLmJhc2V8fDApK2J9cmV0dXJuIHgubGVuZ3RoJiYoeFswXS5oYXNUb3RhbHM9XyksYShlLnRleHQseCwidHgiKSxhKGUuaG92ZXJ0ZXh0LHgsImh0eCIpLG8oeCxlKSx4fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIjo4MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjExOTN9XSwxMzYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZXZlbnREYXRhS2V5czpbImluaXRpYWwiLCJkZWx0YSIsImZpbmFsIl19fSx7fV0sMTM2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyIpLnNldEdyb3VwUG9zaXRpb25zO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYT10Ll9mdWxsTGF5b3V0LG89dC5fZnVsbERhdGEscz10LmNhbGNkYXRhLGw9ZS54YXhpcyxjPWUueWF4aXMsdT1bXSxmPVtdLGg9W107Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKyl7dmFyIHA9b1tpXTshMD09PXAudmlzaWJsZSYmcC54YXhpcz09PWwuX2lkJiZwLnlheGlzPT09Yy5faWQmJiJ3YXRlcmZhbGwiPT09cC50eXBlJiYocj1zW2ldLCJoIj09PXAub3JpZW50YXRpb24/aC5wdXNoKHIpOmYucHVzaChyKSx1LnB1c2gocikpfXZhciBkPXttb2RlOmEud2F0ZXJmYWxsbW9kZSxub3JtOmEud2F0ZXJmYWxsbm9ybSxnYXA6YS53YXRlcmZhbGxnYXAsZ3JvdXBnYXA6YS53YXRlcmZhbGxncm91cGdhcH07Zm9yKG4odCxsLGMsZixkKSxuKHQsYyxsLGgsZCksaT0wO2k8dS5sZW5ndGg7aSsrKXtyPXVbaV07Zm9yKHZhciBtPTA7bTxyLmxlbmd0aDttKyspe3ZhciBnPXJbbV07ITE9PT1nLmlzU3VtJiYoZy5zMCs9MD09PW0/MDpyW20tMV0ucyksbSsxPHIubGVuZ3RoJiYoclttXS5uZXh0UDA9clttKzFdLnAwLHJbbV0ubmV4dFMwPXJbbSsxXS5zMCl9fX19LHsiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiOjkxN31dLDEzNjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVHcm91cGluZ0RlZmF1bHRzLGE9dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlVGV4dCxvPXQoIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSx1PXQoIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyIpLGY9dS5JTkNSRUFTSU5HLkNPTE9SLGg9dS5ERUNSRUFTSU5HLkNPTE9SO2Z1bmN0aW9uIHAodCxlLHIpe3QoZSsiLm1hcmtlci5jb2xvciIsciksdChlKyIubWFya2VyLmxpbmUuY29sb3IiLGMuZGVmYXVsdExpbmUpLHQoZSsiLm1hcmtlci5saW5lLndpZHRoIil9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixpKXtmdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLHIsaSl9aWYobyh0LGUsaSxjKSl7cyh0LGUsaSxjKSxjKCJ4aG92ZXJmb3JtYXQiKSxjKCJ5aG92ZXJmb3JtYXQiKSxjKCJtZWFzdXJlIiksYygib3JpZW50YXRpb24iLGUueCYmIWUueT8iaCI6InYiKSxjKCJiYXNlIiksYygib2Zmc2V0IiksYygid2lkdGgiKSxjKCJ0ZXh0IiksYygiaG92ZXJ0ZXh0IiksYygiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciB1PWMoInRleHRwb3NpdGlvbiIpO2lmKGEodCxlLGksYyx1LHttb2R1bGVIYXNTZWxlY3RlZDohMSxtb2R1bGVIYXNVbnNlbGVjdGVkOiExLG1vZHVsZUhhc0NvbnN0cmFpbjohMCxtb2R1bGVIYXNDbGlwb25heGlzOiEwLG1vZHVsZUhhc1RleHRhbmdsZTohMCxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITB9KSwibm9uZSIhPT1lLnRleHRwb3NpdGlvbiYmKGMoInRleHR0ZW1wbGF0ZSIpLGUudGV4dHRlbXBsYXRlfHxjKCJ0ZXh0aW5mbyIpKSxwKGMsImluY3JlYXNpbmciLGYpLHAoYywiZGVjcmVhc2luZyIsaCkscChjLCJ0b3RhbHMiLCIjNDQ5OUZGIiksYygiY29ubmVjdG9yLnZpc2libGUiKSljKCJjb25uZWN0b3IubW9kZSIpLGMoImNvbm5lY3Rvci5saW5lLndpZHRoIikmJihjKCJjb25uZWN0b3IubGluZS5jb2xvciIpLGMoImNvbm5lY3Rvci5saW5lLmRhc2giKSl9ZWxzZSBlLnZpc2libGU9ITF9LGNyb3NzVHJhY2VEZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByLGE7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbi5jb2VyY2UoYS5faW5wdXQsYSxsLHQpfWlmKCJncm91cCI9PT1lLndhdGVyZmFsbG1vZGUpZm9yKHZhciBzPTA7czx0Lmxlbmd0aDtzKyspcj0oYT10W3NdKS5faW5wdXQsaShyLGEsZSxvKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29uc3RhbnRzL2RlbHRhLmpzIjo3NDYsIi4uLy4uL2xpYiI6Nzc2LCIuLi9iYXIvZGVmYXVsdHMiOjkxOCwiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiOjEyMTEsIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiOjEyMTgsIi4vYXR0cmlidXRlcyI6MTM2MH1dLDEzNjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueD0ieFZhbCJpbiBlP2UueFZhbDplLngsdC55PSJ5VmFsImluIGU/ZS55VmFsOmUueSwiaW5pdGlhbCJpbiBlJiYodC5pbml0aWFsPWUuaW5pdGlhbCksImRlbHRhImluIGUmJih0LmRlbHRhPWUuZGVsdGEpLCJmaW5hbCJpbiBlJiYodC5maW5hbD1lLmZpbmFsKSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSx0fX0se31dLDEzNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS5ob3ZlckxhYmVsVGV4dCxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5vcGFjaXR5LGE9dCgiLi4vYmFyL2hvdmVyIikuaG92ZXJPbkJhcnMsbz10KCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiKSxzPW8uSU5DUkVBU0lORy5TWU1CT0wsbD1vLkRFQ1JFQVNJTkcuU1lNQk9MO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLGMpe3ZhciB1PWEodCxlLHIsbyxjKTtpZih1KXt2YXIgZj11LmNkLGg9ZlswXS50cmFjZSxwPSJoIj09PWgub3JpZW50YXRpb24sZD1wPyJ4IjoieSIsbT1wP3QueGE6dC55YSxnPWZbdS5pbmRleF0sdj1nLmlzU3VtP2cuYitnLnM6Zy5yYXdTO2lmKCFnLmlzU3VtKXt1LmluaXRpYWw9Zy5iK2cucy12LHUuZGVsdGE9dix1LmZpbmFsPXUuaW5pdGlhbCt1LmRlbHRhO3ZhciB5PWsoTWF0aC5hYnModS5kZWx0YSkpO3UuZGVsdGFMYWJlbD12PDA/IigiK3krIikiOnksdS5maW5hbExhYmVsPWsodS5maW5hbCksdS5pbml0aWFsTGFiZWw9ayh1LmluaXRpYWwpfXZhciB4PWcuaGl8fGguaG92ZXJpbmZvLGI9W107aWYoeCYmIm5vbmUiIT09eCYmInNraXAiIT09eCl7dmFyIF89ImFsbCI9PT14LHc9eC5zcGxpdCgiKyIpLFQ9ZnVuY3Rpb24odCl7cmV0dXJuIF98fC0xIT09dy5pbmRleE9mKHQpfTtnLmlzU3VtfHwoIVQoImZpbmFsIil8fFQocD8ieCI6InkiKXx8Yi5wdXNoKHUuZmluYWxMYWJlbCksVCgiZGVsdGEiKSYmKHY8MD9iLnB1c2godS5kZWx0YUxhYmVsKyIgIitsKTpiLnB1c2godS5kZWx0YUxhYmVsKyIgIitzKSksVCgiaW5pdGlhbCIpJiZiLnB1c2goIkluaXRpYWw6ICIrdS5pbml0aWFsTGFiZWwpKX1yZXR1cm4gYi5sZW5ndGgmJih1LmV4dHJhVGV4dD1iLmpvaW4oIjxicj4iKSksdS5jb2xvcj1mdW5jdGlvbih0LGUpe3ZhciByPXRbZS5kaXJdLm1hcmtlcixuPXIuY29sb3IsYT1yLmxpbmUuY29sb3Isbz1yLmxpbmUud2lkdGg7aWYoaShuKSlyZXR1cm4gbjtpZihpKGEpJiZvKXJldHVybiBhfShoLGcpLFt1XX1mdW5jdGlvbiBrKHQpe3JldHVybiBuKG0sdCxoW2QrImhvdmVyZm9ybWF0Il0pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiOjc0NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vYmFyL2hvdmVyIjo5MjF9XSwxMzY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5jcm9zc1RyYWNlRGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLGNyb3NzVHJhY2VDYWxjOnQoIi4vY3Jvc3NfdHJhY2VfY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4uL2Jhci9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToid2F0ZXJmYWxsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiYmFyLWxpa2UiLCJjYXJ0ZXNpYW4iLCJzdmciLCJvcmllbnRlZCIsInNob3dMZWdlbmQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vYmFyL3NlbGVjdCI6OTI2LCIuL2F0dHJpYnV0ZXMiOjEzNjAsIi4vY2FsYyI6MTM2MSwiLi9jcm9zc190cmFjZV9jYWxjIjoxMzYzLCIuL2RlZmF1bHRzIjoxMzY0LCIuL2V2ZW50X2RhdGEiOjEzNjUsIi4vaG92ZXIiOjEzNjYsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEzNjgsIi4vbGF5b3V0X2RlZmF1bHRzIjoxMzY5LCIuL3Bsb3QiOjEzNzAsIi4vc3R5bGUiOjEzNzF9XSwxMzY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17d2F0ZXJmYWxsbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZ3JvdXAiLCJvdmVybGF5Il0sZGZsdDoiZ3JvdXAiLGVkaXRUeXBlOiJjYWxjIn0sd2F0ZXJmYWxsZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJjYWxjIn0sd2F0ZXJmYWxsZ3JvdXBnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sMTM2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPSExO2Z1bmN0aW9uIG8ocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1mb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGw9cltzXTtpZihsLnZpc2libGUmJiJ3YXRlcmZhbGwiPT09bC50eXBlKXthPSEwO2JyZWFrfX1hJiYobygid2F0ZXJmYWxsbW9kZSIpLG8oIndhdGVyZmFsbGdhcCIsLjIpLG8oIndhdGVyZmFsbGdyb3VwZ2FwIikpfX0seyIuLi8uLi9saWIiOjc3NiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTM2OH1dLDEzNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0scz10KCIuLi9iYXIvcGxvdCIpLGw9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLmNsZWFyTWluVGV4dFNpemU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1PXQuX2Z1bGxMYXlvdXQ7bCgid2F0ZXJmYWxsIix1KSxzLnBsb3QodCxlLHIsYyx7bW9kZTp1LndhdGVyZmFsbG1vZGUsbm9ybTp1LndhdGVyZmFsbG1vZGUsZ2FwOnUud2F0ZXJmYWxsZ2FwLGdyb3VwZ2FwOnUud2F0ZXJmYWxsZ3JvdXBnYXB9KSxmdW5jdGlvbih0LGUscixzKXt2YXIgbD1lLnhheGlzLGM9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhzLHIsInRyYWNlIGJhcnMiKS5lYWNoKChmdW5jdGlvbihyKXt2YXIgcz1uLnNlbGVjdCh0aGlzKSx1PXJbMF0udHJhY2UsZj1pLmVuc3VyZVNpbmdsZShzLCJnIiwibGluZXMiKTtpZih1LmNvbm5lY3RvciYmdS5jb25uZWN0b3IudmlzaWJsZSl7dmFyIGg9ImgiPT09dS5vcmllbnRhdGlvbixwPXUuY29ubmVjdG9yLm1vZGUsZD1mLnNlbGVjdEFsbCgiZy5saW5lIikuZGF0YShpLmlkZW50aXR5KTtkLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGluZSIsITApLGQuZXhpdCgpLnJlbW92ZSgpO3ZhciBtPWQuc2l6ZSgpO2QuZWFjaCgoZnVuY3Rpb24ocixzKXtpZihzPT09bS0xfHxyLmNOZXh0KXt2YXIgdT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1bXSxhPVtdLG89bj9lOnIscz1uP3I6ZTtyZXR1cm4gaVswXT1vLmMycCh0LnMwLCEwKSxhWzBdPXMuYzJwKHQucDAsITApLGlbMV09by5jMnAodC5zMSwhMCksYVsxXT1zLmMycCh0LnAxLCEwKSxpWzJdPW8uYzJwKHQubmV4dFMwLCEwKSxhWzJdPXMuYzJwKHQubmV4dFAwLCEwKSxuP1tpLGFdOlthLGldfShyLGwsYyxoKSxmPXVbMF0sZD11WzFdLGc9IiI7ZlswXSE9PW8mJmRbMF0hPT1vJiZmWzFdIT09byYmZFsxXSE9PW8mJigic3Bhbm5pbmciPT09cCYmIXIuaXNTdW0mJnM+MCYmKGcrPWg/Ik0iK2ZbMF0rIiwiK2RbMV0rIlYiK2RbMF06Ik0iK2ZbMV0rIiwiK2RbMF0rIkgiK2ZbMF0pLCJiZXR3ZWVuIiE9PXAmJihyLmlzU3VtfHxzPG0tMSkmJihnKz1oPyJNIitmWzFdKyIsIitkWzBdKyJWIitkWzFdOiJNIitmWzBdKyIsIitkWzFdKyJIIitmWzFdKSxmWzJdIT09byYmZFsyXSE9PW8mJihnKz1oPyJNIitmWzFdKyIsIitkWzFdKyJWIitkWzJdOiJNIitmWzFdKyIsIitkWzFdKyJIIitmWzJdKSksIiI9PT1nJiYoZz0iTTAsMFoiKSxpLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwicGF0aCIpLmF0dHIoImQiLGcpLmNhbGwoYS5zZXRDbGlwVXJsLGUubGF5ZXJDbGlwSWQsdCl9fSkpfWVsc2UgZi5yZW1vdmUoKX0pKX0odCxlLHIsYyl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuLi9iYXIvcGxvdCI6OTI1LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo5MzAsIkBwbG90bHkvZDMiOjU4fV0sMTM3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTSxzPXQoIi4uL2Jhci9zdHlsZSIpLGw9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQsYz1zLnN0eWxlVGV4dFBvaW50cztlLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgcz1yfHxuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcud2F0ZXJmYWxsbGF5ZXIiKS5zZWxlY3RBbGwoImcudHJhY2UiKTtsKHQscywid2F0ZXJmYWxsIikscy5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSkscy5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxzPWVbMF0udHJhY2U7ci5zZWxlY3RBbGwoIi5wb2ludCA+IHBhdGgiKS5lYWNoKChmdW5jdGlvbih0KXtpZighdC5pc0JsYW5rKXt2YXIgZT1zW3QuZGlyXS5tYXJrZXI7bi5zZWxlY3QodGhpcykuY2FsbChhLmZpbGwsZS5jb2xvcikuY2FsbChhLnN0cm9rZSxlLmxpbmUuY29sb3IpLmNhbGwoaS5kYXNoTGluZSxlLmxpbmUuZGFzaCxlLmxpbmUud2lkdGgpLnN0eWxlKCJvcGFjaXR5IixzLnNlbGVjdGVkcG9pbnRzJiYhdC5zZWxlY3RlZD9vOjEpfX0pKSxjKHIscyx0KSxyLnNlbGVjdEFsbCgiLmxpbmVzIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1zLmNvbm5lY3Rvci5saW5lO2kubGluZUdyb3VwU3R5bGUobi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIiksdC53aWR0aCx0LmNvbG9yLHQuZGFzaCl9KSl9KSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo3NTEsIi4uL2Jhci9zdHlsZSI6OTI4LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo5MzAsIkBwbG90bHkvZDMiOjU4fV0sMTM3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vbGliIiksYT10KCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLG89dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbixzPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0iYWdncmVnYXRlIjt2YXIgbD1yLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxncm91cHM6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4IixlZGl0VHlwZToiY2FsYyJ9LGFnZ3JlZ2F0aW9uczp7X2lzTGlua2VkVG9BcnJheToiYWdncmVnYXRpb24iLHRhcmdldDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LGZ1bmM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNvdW50Iiwic3VtIiwiYXZnIiwibWVkaWFuIiwibW9kZSIsInJtcyIsInN0ZGRldiIsIm1pbiIsIm1heCIsImZpcnN0IiwibGFzdCIsImNoYW5nZSIsInJhbmdlIl0sZGZsdDoiZmlyc3QiLGVkaXRUeXBlOiJjYWxjIn0sZnVuY21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNhbXBsZSIsInBvcHVsYXRpb24iXSxkZmx0OiJzYW1wbGUiLGVkaXRUeXBlOiJjYWxjIn0sZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxjPWwuYWdncmVnYXRpb25zO2Z1bmN0aW9uIHUodCxlLHIsYSl7aWYoYS5lbmFibGVkKXtmb3IodmFyIG89YS50YXJnZXQsbD1pLm5lc3RlZFByb3BlcnR5KGUsbyksYz1sLmdldCgpLHU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmZ1bmMsbj1lLmQyYyxhPWUuYzJkO3N3aXRjaChyKXtjYXNlImNvdW50IjpyZXR1cm4gZjtjYXNlImZpcnN0IjpyZXR1cm4gaDtjYXNlImxhc3QiOnJldHVybiBwO2Nhc2Uic3VtIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPW4odFtlW2ldXSk7byE9PXMmJihyKz1vKX1yZXR1cm4gYShyKX07Y2FzZSJhdmciOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLGk9MCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJihyKz1sLGkrKyl9cmV0dXJuIGk/YShyL2kpOnN9O2Nhc2UibWluIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MS8wLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89bih0W2VbaV1dKTtvIT09cyYmKHI9TWF0aC5taW4ocixvKSl9cmV0dXJuIHI9PT0xLzA/czphKHIpfTtjYXNlIm1heCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPS0xLzAsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1uKHRbZVtpXV0pO28hPT1zJiYocj1NYXRoLm1heChyLG8pKX1yZXR1cm4gcj09PS0xLzA/czphKHIpfTtjYXNlInJhbmdlIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MS8wLGk9LTEvMCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJihyPU1hdGgubWluKHIsbCksaT1NYXRoLm1heChpLGwpKX1yZXR1cm4gaT09PS0xLzB8fHI9PT0xLzA/czphKGktcil9O2Nhc2UiY2hhbmdlIjpyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1uKHRbZVswXV0pLGk9bih0W2VbZS5sZW5ndGgtMV1dKTtyZXR1cm4gcj09PXN8fGk9PT1zP3M6YShpLXIpfTtjYXNlIm1lZGlhbiI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIGw9bih0W2Vbb11dKTtsIT09cyYmci5wdXNoKGwpfWlmKCFyLmxlbmd0aClyZXR1cm4gcztyLnNvcnQoaS5zb3J0ZXJBc2MpO3ZhciBjPShyLmxlbmd0aC0xKS8yO3JldHVybiBhKChyW01hdGguZmxvb3IoYyldK3JbTWF0aC5jZWlsKGMpXSkvMil9O2Nhc2UibW9kZSI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LGk9MCxvPXMsbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgYz1uKHRbZVtsXV0pO2lmKGMhPT1zKXt2YXIgdT1yW2NdPShyW2NdfHwwKSsxO3U+aSYmKGk9dSxvPWMpfX1yZXR1cm4gaT9hKG8pOnN9O2Nhc2Uicm1zIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxpPTAsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgbD1uKHRbZVtvXV0pO2whPT1zJiYocis9bCpsLGkrKyl9cmV0dXJuIGk/YShNYXRoLnNxcnQoci9pKSk6c307Y2FzZSJzdGRkZXYiOnJldHVybiBmdW5jdGlvbihlLHIpe3ZhciBpLGE9MCxvPTAsbD0xLGM9cztmb3IoaT0wO2k8ci5sZW5ndGgmJmM9PT1zO2krKyljPW4oZVtyW2ldXSk7aWYoYz09PXMpcmV0dXJuIHM7Zm9yKDtpPHIubGVuZ3RoO2krKyl7dmFyIHU9bihlW3JbaV1dKTtpZih1IT09cyl7dmFyIGY9dS1jO2ErPWYsbys9ZipmLGwrK319dmFyIGg9InNhbXBsZSI9PT10LmZ1bmNtb2RlP2wtMTpsO3JldHVybiBoP01hdGguc3FydCgoby1hKmEvbCkvaCk6MH19fShhLG4uZ2V0RGF0YUNvbnZlcnNpb25zKHQsZSxvLGMpKSxkPW5ldyBBcnJheShyLmxlbmd0aCksbT0wO208ci5sZW5ndGg7bSsrKWRbbV09dShjLHJbbV0pO2wuc2V0KGQpLCJjb3VudCI9PT1hLmZ1bmMmJmkucHVzaFVuaXF1ZShlLl9hcnJheUF0dHJzLG8pfX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIGUubGVuZ3RofWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdFtlWzBdXX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHRbZVtlLmxlbmd0aC0xXV19ci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUpe3ZhciByLG49e307ZnVuY3Rpb24gbyhlLHIpe3JldHVybiBpLmNvZXJjZSh0LG4sbCxlLHIpfWlmKCFvKCJlbmFibGVkIikpcmV0dXJuIG47dmFyIHM9YS5maW5kQXJyYXlBdHRyaWJ1dGVzKGUpLHU9e307Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKyl1W3Nbcl1dPTE7dmFyIGY9bygiZ3JvdXBzIik7aWYoIUFycmF5LmlzQXJyYXkoZikpe2lmKCF1W2ZdKXJldHVybiBuLmVuYWJsZWQ9ITEsbjt1W2ZdPTB9dmFyIGgscD10LmFnZ3JlZ2F0aW9uc3x8W10sZD1uLmFnZ3JlZ2F0aW9ucz1uZXcgQXJyYXkocC5sZW5ndGgpO2Z1bmN0aW9uIG0odCxlKXtyZXR1cm4gaS5jb2VyY2UocFtyXSxoLGMsdCxlKX1mb3Iocj0wO3I8cC5sZW5ndGg7cisrKXtoPXtfaW5kZXg6cn07dmFyIGc9bSgidGFyZ2V0Iiksdj1tKCJmdW5jIik7bSgiZW5hYmxlZCIpJiZnJiYodVtnXXx8ImNvdW50Ij09PXYmJnZvaWQgMD09PXVbZ10pPygic3RkZGV2Ij09PXYmJm0oImZ1bmNtb2RlIiksdVtnXT0wLGRbcl09aCk6ZFtyXT17ZW5hYmxlZDohMSxfaW5kZXg6cn19Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKyl1W3Nbcl1dJiZkLnB1c2goe3RhcmdldDpzW3JdLGZ1bmM6Yy5mdW5jLmRmbHQsZW5hYmxlZDohMCxfaW5kZXg6LTF9KTtyZXR1cm4gbn0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmVuYWJsZWQpe3ZhciBuPXIuZ3JvdXBzLGE9aS5nZXRUYXJnZXRBcnJheShlLHt0YXJnZXQ6bn0pO2lmKGEpe3ZhciBzLGwsYyxmLGg9e30scD17fSxkPVtdLG09byhlLnRyYW5zZm9ybXMsciksZz1hLmxlbmd0aDtmb3IoZS5fbGVuZ3RoJiYoZz1NYXRoLm1pbihnLGUuX2xlbmd0aCkpLHM9MDtzPGc7cysrKXZvaWQgMD09PShjPWhbbD1hW3NdXSk/KGhbbF09ZC5sZW5ndGgsZj1bc10sZC5wdXNoKGYpLHBbaFtsXV09bShzKSk6KGRbY10ucHVzaChzKSxwW2hbbF1dPShwW2hbbF1dfHxbXSkuY29uY2F0KG0ocykpKTtyLl9pbmRleFRvUG9pbnRzPXA7dmFyIHY9ci5hZ2dyZWdhdGlvbnM7Zm9yKHM9MDtzPHYubGVuZ3RoO3MrKyl1KHQsZSxkLHZbc10pOyJzdHJpbmciPT10eXBlb2YgbiYmdSh0LGUsZCx7dGFyZ2V0Om4sZnVuYzoiZmlyc3QiLGVuYWJsZWQ6ITB9KSxlLl9sZW5ndGg9ZC5sZW5ndGh9fX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi9saWIiOjc3NiwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiOjgxNSwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi9oZWxwZXJzIjoxMzc1fV0sMTM3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3JlZ2lzdHJ5IiksYT10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbixzPXQoIi4uL2NvbnN0YW50cy9maWx0ZXJfb3BzIiksbD1zLkNPTVBBUklTT05fT1BTLGM9cy5JTlRFUlZBTF9PUFMsdT1zLlNFVF9PUFM7ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0iZmlsdGVyIixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSx0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4IixlZGl0VHlwZToiY2FsYyJ9LG9wZXJhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltdLmNvbmNhdChsKS5jb25jYXQoYykuY29uY2F0KHUpLGRmbHQ6Ij0iLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0scHJlc2VydmVnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxyLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIGEoaSxhKXtyZXR1cm4gbi5jb2VyY2UodCxlLHIuYXR0cmlidXRlcyxpLGEpfWlmKGEoImVuYWJsZWQiKSl7dmFyIG89YSgidGFyZ2V0Iik7aWYobi5pc0FycmF5T3JUeXBlZEFycmF5KG8pJiYwPT09by5sZW5ndGgpcmV0dXJuIGUuZW5hYmxlZD0hMSxlO2EoInByZXNlcnZlZ2FwcyIpLGEoIm9wZXJhdGlvbiIpLGEoInZhbHVlIik7dmFyIHM9aS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIik7cyh0LGUsInZhbHVlY2FsZW5kYXIiLG51bGwpLHModCxlLCJ0YXJnZXRjYWxlbmRhciIsbnVsbCl9cmV0dXJuIGV9LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7aWYoci5lbmFibGVkKXt2YXIgaT1uLmdldFRhcmdldEFycmF5KGUscik7aWYoaSl7dmFyIHM9ci50YXJnZXQsZj1pLmxlbmd0aDtlLl9sZW5ndGgmJihmPU1hdGgubWluKGYsZS5fbGVuZ3RoKSk7dmFyIGg9ci50YXJnZXRjYWxlbmRhcixwPWUuX2FycmF5QXR0cnMsZD1yLnByZXNlcnZlZ2FwcztpZigic3RyaW5nIj09dHlwZW9mIHMpe3ZhciBtPW4ubmVzdGVkUHJvcGVydHkoZSxzKyJjYWxlbmRhciIpLmdldCgpO20mJihoPW0pfXZhciBnLHYseT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5vcGVyYXRpb24saT10LnZhbHVlLGE9QXJyYXkuaXNBcnJheShpKTtmdW5jdGlvbiBvKHQpe3JldHVybi0xIT09dC5pbmRleE9mKG4pfXZhciBzLGY9ZnVuY3Rpb24ocil7cmV0dXJuIGUociwwLHQudmFsdWVjYWxlbmRhcil9LGg9ZnVuY3Rpb24odCl7cmV0dXJuIGUodCwwLHIpfTtvKGwpP3M9ZihhP2lbMF06aSk6byhjKT9zPWE/W2YoaVswXSksZihpWzFdKV06W2YoaSksZihpKV06byh1KSYmKHM9YT9pLm1hcChmKTpbZihpKV0pO3N3aXRjaChuKXtjYXNlIj0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KT09PXN9O2Nhc2UiIT0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KSE9PXN9O2Nhc2UiPCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpPHN9O2Nhc2UiPD0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KTw9c307Y2FzZSI+IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGgodCk+c307Y2FzZSI+PSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpPj1zfTtjYXNlIltdIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZT49c1swXSYmZTw9c1sxXX07Y2FzZSIoKSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWgodCk7cmV0dXJuIGU+c1swXSYmZTxzWzFdfTtjYXNlIlspIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZT49c1swXSYmZTxzWzFdfTtjYXNlIihdIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZT5zWzBdJiZlPD1zWzFdfTtjYXNlIl1bIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZTw9c1swXXx8ZT49c1sxXX07Y2FzZSIpKCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWgodCk7cmV0dXJuIGU8c1swXXx8ZT5zWzFdfTtjYXNlIl0oIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZTw9c1swXXx8ZT5zWzFdfTtjYXNlIilbIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZTxzWzBdfHxlPj1zWzFdfTtjYXNlInt9IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1zLmluZGV4T2YoaCh0KSl9O2Nhc2UifXsiOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tMT09PXMuaW5kZXhPZihoKHQpKX19fShyLGEuZ2V0RGF0YVRvQ29vcmRGdW5jKHQsZSxzLGkpLGgpLHg9e30sYj17fSxfPTA7ZD8oZz1mdW5jdGlvbih0KXt4W3QuYXN0cl09bi5leHRlbmREZWVwKFtdLHQuZ2V0KCkpLHQuc2V0KG5ldyBBcnJheShmKSl9LHY9ZnVuY3Rpb24odCxlKXt2YXIgcj14W3QuYXN0cl1bZV07dC5nZXQoKVtlXT1yfSk6KGc9ZnVuY3Rpb24odCl7eFt0LmFzdHJdPW4uZXh0ZW5kRGVlcChbXSx0LmdldCgpKSx0LnNldChbXSl9LHY9ZnVuY3Rpb24odCxlKXt2YXIgcj14W3QuYXN0cl1bZV07dC5nZXQoKS5wdXNoKHIpfSksayhnKTtmb3IodmFyIHc9byhlLnRyYW5zZm9ybXMsciksVD0wO1Q8ZjtUKyspe3koaVtUXSk/KGsodixUKSxiW18rK109dyhUKSk6ZCYmXysrfXIuX2luZGV4VG9Qb2ludHM9YixlLl9sZW5ndGg9X319ZnVuY3Rpb24gayh0LHIpe2Zvcih2YXIgaT0wO2k8cC5sZW5ndGg7aSsrKXt0KG4ubmVzdGVkUHJvcGVydHkoZSxwW2ldKSxyKX19fX0seyIuLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NzQ4LCIuLi9saWIiOjc3NiwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vcmVnaXN0cnkiOjkwNCwiLi9oZWxwZXJzIjoxMzc1fV0sMTM3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIiksYT10KCIuLi9wbG90cy9wbG90cyIpLG89dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbjtmdW5jdGlvbiBzKHQsZSl7dmFyIHIscyxsLGMsdSxmLGgscCxkLG0sZz1lLnRyYW5zZm9ybSx2PWUudHJhbnNmb3JtSW5kZXgseT10LnRyYW5zZm9ybXNbdl0uZ3JvdXBzLHg9byh0LnRyYW5zZm9ybXMsZyk7aWYoIW4uaXNBcnJheU9yVHlwZWRBcnJheSh5KXx8MD09PXkubGVuZ3RoKXJldHVyblt0XTt2YXIgYj1uLmZpbHRlclVuaXF1ZSh5KSxfPW5ldyBBcnJheShiLmxlbmd0aCksdz15Lmxlbmd0aCxUPWkuZmluZEFycmF5QXR0cmlidXRlcyh0KSxrPWcuc3R5bGVzfHxbXSxBPXt9O2ZvcihyPTA7cjxrLmxlbmd0aDtyKyspQVtrW3JdLnRhcmdldF09a1tyXS52YWx1ZTtnLnN0eWxlcyYmKG09bi5rZXllZENvbnRhaW5lcihnLCJzdHlsZXMiLCJ0YXJnZXQiLCJ2YWx1ZS5uYW1lIikpO3ZhciBNPXt9LFM9e307Zm9yKHI9MDtyPGIubGVuZ3RoO3IrKyl7TVtmPWJbcl1dPXIsU1tmXT0wLChoPV9bcl09bi5leHRlbmREZWVwTm9BcnJheXMoe30sdCkpLl9ncm91cD1mLGgudHJhbnNmb3Jtc1t2XS5faW5kZXhUb1BvaW50cz17fTt2YXIgRT1udWxsO2ZvcihtJiYoRT1tLmdldChmKSksaC5uYW1lPUV8fCIiPT09RT9FOm4udGVtcGxhdGVTdHJpbmcoZy5uYW1lZm9ybWF0LHt0cmFjZTp0Lm5hbWUsZ3JvdXA6Zn0pLHA9aC50cmFuc2Zvcm1zLGgudHJhbnNmb3Jtcz1bXSxzPTA7czxwLmxlbmd0aDtzKyspaC50cmFuc2Zvcm1zW3NdPW4uZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LHBbc10pO2ZvcihzPTA7czxULmxlbmd0aDtzKyspbi5uZXN0ZWRQcm9wZXJ0eShoLFRbc10pLnNldChbXSl9Zm9yKGw9MDtsPFQubGVuZ3RoO2wrKyl7Zm9yKGM9VFtsXSxzPTAsZD1bXTtzPGIubGVuZ3RoO3MrKylkW3NdPW4ubmVzdGVkUHJvcGVydHkoX1tzXSxjKS5nZXQoKTtmb3IodT1uLm5lc3RlZFByb3BlcnR5KHQsYykuZ2V0KCkscz0wO3M8dztzKyspZFtNW3lbc11dXS5wdXNoKHVbc10pfWZvcihzPTA7czx3O3MrKyl7KGg9X1tNW3lbc11dXSkudHJhbnNmb3Jtc1t2XS5faW5kZXhUb1BvaW50c1tTW3lbc11dXT14KHMpLFNbeVtzXV0rK31mb3Iocj0wO3I8Yi5sZW5ndGg7cisrKWY9YltyXSxoPV9bcl0sYS5jbGVhckV4cGFuZGVkVHJhY2VEZWZhdWx0Q29sb3JzKGgpLGg9bi5leHRlbmREZWVwTm9BcnJheXMoaCxBW2ZdfHx7fSk7cmV0dXJuIF99ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0iZ3JvdXBieSIsci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZ3JvdXBzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdLGVkaXRUeXBlOiJjYWxjIn0sbmFtZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHN0eWxlczp7X2lzTGlua2VkVG9BcnJheToic3R5bGUiLHRhcmdldDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6e30sZWRpdFR5cGU6ImNhbGMiLF9jb21wYXJlQXNKU09OOiEwfSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUsaSl7dmFyIGEsbz17fTtmdW5jdGlvbiBzKGUsaSl7cmV0dXJuIG4uY29lcmNlKHQsbyxyLmF0dHJpYnV0ZXMsZSxpKX1pZighcygiZW5hYmxlZCIpKXJldHVybiBvO3MoImdyb3VwcyIpLHMoIm5hbWVmb3JtYXQiLGkuX2RhdGFMZW5ndGg+MT8iJXtncm91cH0gKCV7dHJhY2V9KSI6IiV7Z3JvdXB9Iik7dmFyIGw9dC5zdHlsZXMsYz1vLnN0eWxlcz1bXTtpZihsKWZvcihhPTA7YTxsLmxlbmd0aDthKyspe3ZhciB1PWNbYV09e307bi5jb2VyY2UobFthXSxjW2FdLHIuYXR0cmlidXRlcy5zdHlsZXMsInRhcmdldCIpO3ZhciBmPW4uY29lcmNlKGxbYV0sY1thXSxyLmF0dHJpYnV0ZXMuc3R5bGVzLCJ2YWx1ZSIpO24uaXNQbGFpbk9iamVjdChmKT91LnZhbHVlPW4uZXh0ZW5kRGVlcCh7fSxmKTpmJiZkZWxldGUgdS52YWx1ZX1yZXR1cm4gb30sci50cmFuc2Zvcm09ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT1bXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKWZvcihyPXModFtuXSxlKSxpPTA7aTxyLmxlbmd0aDtpKyspYS5wdXNoKHJbaV0pO3JldHVybiBhfX0seyIuLi9saWIiOjc3NiwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiOjgxNSwiLi4vcGxvdHMvcGxvdHMiOjg5MCwiLi9oZWxwZXJzIjoxMzc1fV0sMTM3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnBvaW50c0FjY2Vzc29yRnVuY3Rpb249ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpPTA7aTx0Lmxlbmd0aCYmKHI9dFtpXSkhPT1lO2krKylyLl9pbmRleFRvUG9pbnRzJiYhMSE9PXIuZW5hYmxlZCYmKG49ci5faW5kZXhUb1BvaW50cyk7cmV0dXJuIG4/ZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19OmZ1bmN0aW9uKHQpe3JldHVyblt0XX19fSx7fV0sMTM3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuL2hlbHBlcnMiKS5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uLG89dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtyLm1vZHVsZVR5cGU9InRyYW5zZm9ybSIsci5uYW1lPSJzb3J0IixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSx0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4IixlZGl0VHlwZToiY2FsYyJ9LG9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhc2NlbmRpbmciLCJkZXNjZW5kaW5nIl0sZGZsdDoiYXNjZW5kaW5nIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiBpKGksYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxyLmF0dHJpYnV0ZXMsaSxhKX1yZXR1cm4gaSgiZW5hYmxlZCIpJiYoaSgidGFyZ2V0IiksaSgib3JkZXIiKSksZX0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmVuYWJsZWQpe3ZhciBzPW4uZ2V0VGFyZ2V0QXJyYXkoZSxyKTtpZihzKXt2YXIgbD1yLnRhcmdldCxjPXMubGVuZ3RoO2UuX2xlbmd0aCYmKGM9TWF0aC5taW4oYyxlLl9sZW5ndGgpKTt2YXIgdSxmLGg9ZS5fYXJyYXlBdHRycyxwPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pO2ZvcihpPTA7aTxuO2krKylhW2ldPXt2OmVbaV0saTppfTtmb3IoYS5zb3J0KGZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQub3JkZXIpe2Nhc2UiYXNjZW5kaW5nIjpyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKHQudiksaT1lKHIudik7cmV0dXJuIG49PT1vPzE6aT09PW8/LTE6bi1pfTtjYXNlImRlc2NlbmRpbmciOnJldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPWUodC52KSxpPWUoci52KTtyZXR1cm4gbj09PW8/MTppPT09bz8tMTppLW59fX0odCxyKSksaT0wO2k8bjtpKyspc1tpXT1hW2ldLmk7cmV0dXJuIHN9KHIscyxpLmdldERhdGFUb0Nvb3JkRnVuYyh0LGUsbCxzKSxjKSxkPWEoZS50cmFuc2Zvcm1zLHIpLG09e307Zm9yKHU9MDt1PGgubGVuZ3RoO3UrKyl7dmFyIGc9bi5uZXN0ZWRQcm9wZXJ0eShlLGhbdV0pLHY9Zy5nZXQoKSx5PW5ldyBBcnJheShjKTtmb3IoZj0wO2Y8YztmKyspeVtmXT12W3BbZl1dO2cuc2V0KHkpfWZvcihmPTA7ZjxjO2YrKyltW2ZdPWQocFtmXSk7ci5faW5kZXhUb1BvaW50cz1tLGUuX2xlbmd0aD1jfX19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vbGliIjo3NzYsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4vaGVscGVycyI6MTM3NX1dLDEzNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci52ZXJzaW9uPSIyLjUuMSJ9LHt9XX0se30sWzI3XSkoMjcpfSkpOw=="></script>
<div class="container-fluid d-none d-lg-block d-xl-block">
  <div class="d-flex row flex-row vh-100">
    <div class="d-flex flex-column col-5 align-items-center text-center align-self-center">
      <div class="mx-auto text-center">
        <div class="p-3">
          <img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4U2uRXhpZgAATU0AKgAAAAgABgALAAIAAAAmAAAIYgESAAMAAAABAAEAAAExAAIAAAAmAAAIiAEyAAIAAAAUAAAIrodpAAQAAAABAAAIwuocAAcAAAgMAAAAVgAAEUYc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFdpbmRvd3MgUGhvdG8gRWRpdG9yIDEwLjAuMTAwMTEuMTYzODQAV2luZG93cyBQaG90byBFZGl0b3IgMTAuMC4xMDAxMS4xNjM4NAAyMDIyOjAxOjE1IDEyOjMzOjA0AAAGkAMAAgAAABQAABEckAQAAgAAABQAABEwkpEAAgAAAAMyNAAAkpIAAgAAAAMyNAAAoAEAAwAAAAEAAQAA6hwABwAACAwAAAkQAAAAABzqAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAyMToxMTowMSAxMDoyNjowNAAyMDIxOjExOjAxIDEwOjI2OjA0AAAAAAYBAwADAAAAAQAGAAABGgAFAAAAAQAAEZQBGwAFAAAAAQAAEZwBKAADAAAAAQAC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8RTCM8+lWIZtpjL8pBGVNSxlMhraXevKmtBHWWMMp61MdNBskXpS1YgPBqrHwWA7E0mMep+U1bVVuI/LcZyOtZVFeImI4itngg88tFH1YjJU5yCBx0zWvHcmdMhkmVTgGRORXLJ6XHPyP//Z/+Ex6Gh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4NCjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iPjxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+PHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9InV1aWQ6ZmFmNWJkZDUtYmEzZC0xMWRhLWFkMzEtZDMzZDc1MTgyZjFiIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPjx4bXA6Q3JlYXRvclRvb2w+V2luZG93cyBQaG90byBFZGl0b3IgMTAuMC4xMDAxMS4xNjM4NDwveG1wOkNyZWF0b3JUb29sPjx4bXA6Q3JlYXRlRGF0ZT4yMDIxLTExLTAxVDEwOjI2OjA0LjIzODwveG1wOkNyZWF0ZURhdGU+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0ndyc/Pv/bAEMAAwICAwICAwMDAwQDAwQFCAUFBAQFCgcHBggMCgwMCwoLCw0OEhANDhEOCwsQFhARExQVFRUMDxcYFhQYEhQVFP/bAEMBAwQEBQQFCQUFCRQNCw0UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFP/AABEIBEkDbwMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APk7RbxIpGtw2Yj9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" style="height:15rem" class="rounded">
        </div>
        <div class="p-2">
          <h1>Claire Benard</h1>
        </div>
        <hr style="width:60%;" />
        <div class="p-2">
          <div id="icon-list">
            <ul class="list-inline">
                                <li class="list-inline-item">
                <a href="https://www.linkedin.com/in/claire-benard-data-scientist/">
                  <button type="button" class="btn btn-outline-dark mb-2">
                    LinkedIn
                  </button>
                </a>
              </li>
                                <li class="list-inline-item">
                <a href="https://github.com/ClaireBenard">
                  <button type="button" class="btn btn-outline-dark mb-2">
                    GitHub
                  </button>
                </a>
              </li>
                                <li class="list-inline-item">
                <a href="mailto:benardclaire@hotmail.fr">
                  <button type="button" class="btn btn-outline-dark mb-2">
                    Email
                  </button>
                </a>
              </li>
                              </ul>
          </div>
        </div>
      </div>
    </div>
    <div class="d-flex flex-column vh-100 border-left"></div>
    <div class="d-flex flex-column col px-5 align-items-center align-self-center mh-100" style="overflow-y: scroll;">
      <div class="my-5" id="content">
        <div id="bio" class="section level2">
        <h2>Bio</h2>
        <p>I’m a data scientist, keen to use data to solve problems that matter. My earlier work experience was in national and international charities and although I’m now a consultant, I still volunteer for <a href="https://datakind.org.uk/">DataKind UK</a>.</p>
        <div id="htmlwidget-1e7b4ffca35c8b3241e6" style="width:60%;height:25%;" class="plotly html-widget"></div>
        <script type="application/json" data-for="htmlwidget-1e7b4ffca35c8b3241e6">{"x":{"data":[{"x":[3,0,null,4,0,null,4,0,null,5,0],"y":[1,1,null,2,2,null,3,3,null,4,4],"text":["score: 3","score: 3",null,"score: 4","score: 4",null,"score: 4","score: 4",null,"score: 5","score: 5"],"type":"scatter","mode":"lines","line":{"width":7.55905511811024,"color":"rgba(255,165,0,1)","dash":"solid"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[3,4,4,5],"y":[1,2,3,4],"text":["score: 3","score: 4","score: 4","score: 5"],"type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(255,165,0,1)","opacity":1,"size":11.3385826771654,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(255,165,0,1)"}},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null}],"layout":{"margin":{"t":26.2283105022831,"r":7.30593607305936,"b":13.8812785388128,"l":133.698630136986},"paper_bgcolor":"rgba(255,255,255,1)","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"xaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-0.25,5.25],"tickmode":"array","ticktext":["0","1","2","3","4","5"],"tickvals":[0,1,2,3,4,5],"categoryorder":"array","categoryarray":["0","1","2","3","4","5"],"nticks":null,"ticks":"","tickcolor":null,"ticklen":3.65296803652968,"tickwidth":0,"showticklabels":false,"tickfont":{"color":null,"family":null,"size":0},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(255,255,255,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"y","title":{"text":"","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187}},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[0.4,4.6],"tickmode":"array","ticktext":["Business Intelligence","Machine Learning","Statistics","Data strategy"],"tickvals":[1,2,3,4],"categoryorder":"array","categoryarray":["Business Intelligence","Machine Learning","Statistics","Data strategy"],"nticks":null,"ticks":"","tickcolor":null,"ticklen":3.65296803652968,"tickwidth":0,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(255,255,255,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"x","title":{"text":"","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187}},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":null,"line":{"color":null,"width":0,"linetype":[]},"yref":"paper","xref":"paper","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":false,"legend":{"bgcolor":"rgba(255,255,255,1)","bordercolor":"transparent","borderwidth":1.88976377952756,"font":{"color":"rgba(0,0,0,1)","family":"","size":11.689497716895}},"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","modeBarButtonsToAdd":["hoverclosest","hovercompare"],"showSendToCloud":false},"source":"A","attrs":{"463459514c8":{"x":{},"y":{},"xend":{},"yend":{},"type":"scatter"},"46344f4f767d":{"x":{},"y":{}}},"cur_data":"463459514c8","visdat":{"463459514c8":["function (y) ","x"],"46344f4f767d":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1},"debounce":0},"shinyEvents":["plotly_hover","plotly_click","plotly_selected","plotly_relayout","plotly_brushed","plotly_brushing","plotly_clickannotation","plotly_doubleclick","plotly_deselect","plotly_afterplot","plotly_sunburstclick"],"base_url":"https://plot.ly"},"evals":[],"jsHooks":[]}</script>
        </div>
        <div id="blog" class="section level2">
        <h2>Blog</h2>
        <p><em>Most of my blogs talk about data in the charity sector, ethics and strategy.</em></p>
        <p><a href="https://urbanhealth.org.uk/insights/author/clairebenard"><strong>6 things funders can do to support the responsible use of data</strong></a> | Impact on Urban Health (October, 21)</p>
        <p><a href="https://data4goodfest.org.uk/beyond-mande/"><strong>Using Data Beyond Monitoring &amp; Evaluation</strong></a> | Data4good Fest (July, 21)</p>
        <p><a href="https://blogs.ncvo.org.uk/2018/03/12/three-lessons-i-learned-from-a-week-in-a-tech-start-up/"><strong>Three lessons I learned from a week in a tech start up</strong></a> | NCVO (March, 18)</p>
        <p><a href="https://vimeo.com/209798429"><strong>Using R to produce innovative, quick and reproducible evidence</strong></a> | MERL Tech (March, 17)</p>
        </div>
        <div id="projects" class="section level2">
        <h2>Projects</h2>
        <p><strong>Charity classifier</strong> | <a href="https://github.com/ClaireBenard/charity-classifier">Check out the code</a><br />
        <em>When registering with the Commission, charities must declare their sector of activity. This is a tick box with 16 options. Due to the nature of the sector, most organisations tick at least 2, and some as many as all 16 boxes.</em> <em>This work attempts to classify organisations based on the legal definition of their activity (their charitable object). Given the wording of their object, the model returns the most likely sector of activity.</em></p>
        </div>
      </div>
    </div>
  </div>
</div>

<div class="container-flex min-vh-100 d-block d-lg-none d-xl-none">
  <div class="d-flex flex-row justify-content-center">
    <div class="d-flex flex-col">
      <div class="mx-auto">
        <div class="p-3 mt-3 text-center">
          <img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4U2uRXhpZgAATU0AKgAAAAgABgALAAIAAAAmAAAIYgESAAMAAAABAAEAAAExAAIAAAAmAAAIiAEyAAIAAAAUAAAIrodpAAQAAAABAAAIwuocAAcAAAgMAAAAVgAAEUYc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFdpbmRvd3MgUGhvdG8gRWRpdG9yIDEwLjAuMTAwMTEuMTYzODQAV2luZG93cyBQaG90byBFZGl0b3IgMTAuMC4xMDAxMS4xNjM4NAAyMDIyOjAxOjE1IDEyOjMzOjA0AAAGkAMAAgAAABQAABEckAQAAgAAABQAABEwkpEAAgAAAAMyNAAAkpIAAgAAAAMyNAAAoAEAAwAAAAEAAQAA6hwABwAACAwAAAkQAAAAABzqAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAyMToxMTowMSAxMDoyNjowNAAyMDIxOjExOjAxIDEwOjI2OjA0AAAAAAYBAwADAAAAAQAGAAABGgAFAAAAAQAAEZQBGwAFAAAAAQAAEZwBKAADAAAAAQAC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8RTCM8+lWIZtpjL8pBGVNSxlMhraXevKmtBHWWMMp61MdNBskXpS1YgPBqrHwWA7E0mMep+U1bVVuI/LcZyOtZVFeImI4itngg88tFH1YjJU5yCBx0zWvHcmdMhkmVTgGRORXLJ6XHPyP//Z/+Ex6Gh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4NCjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iPjxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+PHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9InV1aWQ6ZmFmNWJkZDUtYmEzZC0xMWRhLWFkMzEtZDMzZDc1MTgyZjFiIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPjx4bXA6Q3JlYXRvclRvb2w+V2luZG93cyBQaG90byBFZGl0b3IgMTAuMC4xMDAxMS4xNjM4NDwveG1wOkNyZWF0b3JUb29sPjx4bXA6Q3JlYXRlRGF0ZT4yMDIxLTExLTAxVDEwOjI2OjA0LjIzODwveG1wOkNyZWF0ZURhdGU+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0ndyc/Pv/bAEMAAwICAwICAwMDAwQDAwQFCAUFBAQFCgcHBggMCgwMCwoLCw0OEhANDhEOCwsQFhARExQVFRUMDxcYFhQYEhQVFP/bAEMBAwQEBQQFCQUFCRQNCw0UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFP/AABEIBEkDbwMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APk7RbxIpGtw2Yj9wBQMDuf51plw25hjOPmPUD/61R6X/ZsBaJpo4GkV289mwEYKSuSccZAH419d/DP9lvwT8fvhZofijwxqs2lXskQj1GGZvOEVwvEmBnK854BAPVetfGVnZ6IxlQ5tUWP2G7aOz8K+Kbsx7p5J40kYj+FUGB+pr6M029WK8RJW2tL+7BzwOep9q85+CfwX1r4B6jq+n6rcw3mk35VYJogeXwckgjjjFdts+1XyIhUhjsDZ4IzXx2IbjJt73Brlkkek6RaR3F9aJId22FnA7OSeme9dfHGqgYAI+lchp142mXOkmaItBND5W4D7rBuD+Vdgv3RzX6Dk9KMad+p06HK/FHXj4Z+HviHVAwBtrKRwW6ZxgH9a/IvUrqyvLueW5KzSTSsdrHoxOfzr9Iv21PGS+F/gjqVru2TapILZPoAWb68Cvyn1a+k86QO2GDbgR+pqsUueuknsY215joJJNOuNwMEO5e+ACBXrn7LPxxh+GHjb+zdT1V4PCV+pSW3aQGAyYIXcp+6MDBPAxgV8yCSTeW3EjocnFQTW6SszYwdpy56r+PpjtWFSipBCpys9f+LHjuy8dePtc1eGyhgtp5ZFt4VQeW0KsQv1JAB7/WuITWLaRQsccIUncu0dRzwK0fh34VhvPiRoeheIzJYaTqUscbzzsSAj8I4Y+5HPYHn0rX+P/wAKrH4R/ECXStL1RdW0uZBPbzh1LBeFKMRxnIOBWEHGEvZ2O6VNyp+0uehfsr/tAQfAvx1f3d9btJpOqWwhnZUbK7NxQhf4jliMc/eJrpf2k/2kYPjRJpl5pEIsvsCyIXLkFicHb6k8dx0PrXzjqUlhp8lrNpl8JGUJNndyHDdCfWvdvB+veB/2gPHjaJdab/ZEt/pKhJI/lMd6hLSMFAAYYI5PXGDXPWpy2toVRqXWu549qGovqUcQu5pODx5jHGCMtxnH9cV7T+yv8fNG+DPiOystQSUaNq0v2bWZpnBhRSdsMwzkAIR82ccbj/DXjnirw+/hnXNe0O6u4/tGkz/ZxIAMSZ7gduCvHvXNXNn5itz87jDMuMEev4VrGmlFcqMKrk5e8fqh400mOx8WCWFY1tGiWaGSHBSaNs4IPf6/0rx5hdfB/wCIa+M9Lt2n0CdtmsWkKZCIxAaRQOwwDz/ECO5ql+yL8XpPip4HPgbV7qOTxR4ai32LSH99e2PQg5++0fAJHbZnGefSLyyNxJ9geNbmO5jMcsbDKkHg5H0/UCvl8ZTeHqt9DxaicJXRu6tdaXcLjS50vLeRhJBcW0geN0YZ2nGfmBrJ0jxFP4X1ae8iuWt0aF0lBGUIx3FeGXWq6n8EvE0tpAz3vhyRztjlOcjjjPYjnHrXqdtq2n+JLGG/0qQXFjdx7vlwWUH7ykdj7Vw2lTmqkNzP2jPmX9oj9oTUfi14r09UtRY6ZpYNtbwqx3tztaQn3wBjkfKK4W308yIqJK8bZyskZwVPqMVzfjLT38P+LNc0rBC2t1IEfdnK5+U5PsR+Irr/AAdcLr1javb7TNko65yRtHJP4V9XFSqRvN3uaW+0el+L/iZrvizQdJ0i9mWPT9Nj2xRRHAkb+J3PcmuU063lvomeTIXdgNnkj1rVsdHgvlvLe6uxbNAqsse3d5rkn5Afw/WrscWY0hCgEpkcYxTVNR0Qdbnrv7Hsxtfi1bqCw863mhI7dAR/I19n+J/C+leJFQ6jaxvJCd8NwR80bA5Bz/nOa+OP2SXj0v4sRs6eYskLwZyCUZsEH9CPxr7iuESaBomAIIwR6114ePtKNRNnrU5PlieYfEj4XWviT4e6tYRW8drcSAzKEA2lwOCMdM1+ds+qan8O/iBoniLT4pSbC4/0iNDweCrqwHqpOAe4FfplrF9eaXCsJYeUPlVum4ehry/4O+DbP/hKPG9nqFhDcI91HcKskYIAYcY/En8q+UlWhGuoUVYJxU5WZ4d4701tH8VR+INDhhma6eO7ms5D/o95/ErHtketdxqGueLfiD4N+1NBB4dtrs7I5ElLM+Dgjp9044P6V5z8dNcktPi1qHh7Q1WzTT9qJDDzsQqpbAHQBiSa9b8CabNN8IdMF9IXeGVirZzwMjBH1GOaFS59zh5ZxvG+h5BB4mufBcUxVJJ283yZZJcEAgnGT068VV8S6k2oy6frOjrHeEzFpbdj/qm+8CfbIP51t3Xg9/in8F5723j8vURLKCzEjzNkhK+2eBzXjvw314XWoSaReSGzaZzDI2cHchPB/AHmtPZLlutBypysrs9x0TXRrt4l5cKqNAmTbjK72A5A9u9dLL4rvtWja2uz5kC8LH1+gPtjtXj0mpWlhqS21ldfbLT7sewn93juWx+tbul6yxmgtfOkV1+6cgnPqa4KtN9Dms72uS/HzRYb/wAI2Gt23nSXljJ5VyzKMpE3C5xxwcDPpmuO8C/s1aj+0JCt497Do2g2Ef2eK9mQv50gySFGecZ5Ner6xDHq3hfWNBkm8x7q3eKN1Py7iuf59/Wui/ZburO+/Z70uxuD5DQ3VzFNtO1klEhIJx3GRVRqyhC66HdCShqeHSfsZ+Ivh1q0Gs+GfEVpNfWUm9GaMxnI9DyDxkfjXtPh/wDaP8W/Dm1gtfiZ4YmWIgBNV07EiMM4ywHArrZ/EGn6LeNYahqMSBwyrNIQA/HUcVjap400KGGe21DV7C4tSNscMjKx2dOh61zyxFWbvJEXcnzJnsngH4w+E/H1rFJpGsW87sCREx2Ov1U81Qs/Gk0PxE17w1dWyAyhbqzaT7k0ZXkZ9cgj/wDVXlvw70/wPooln0/TbNZ8BxcRsCMn+VdXdfEnwvNcRTy6ikF0gCxzyJkgDOMNjgc/rXpUcVJpd0XKo7WZ2UNxFpd+biAPYTDO5JBuQn0z712FnrdprWmyRKyxylCrp6Z6keorzbTvG1hqyobbU7bUQW5G4ZJHB47VsL9kWVJ0aSzn/vg9D6+nevZpYmUU7aozjNo6PwldW82nujBVdGaIgjkr1Ga/O34x+GLn4K/HK/Fqjx6Y98L6DaDjy2fece4Jb2xxX6MaHZ2lnK1xJIuWIK9l571yvxI+C/h74sXSQ6tGwuLcBkuU+9sORj9a6fZyqUopWubxXMT6TJBrXhvRtQtG/d3Vurl26c9M+9VLiGLT9S0yLyGSZrhcvgYYc9q6LwX4PtvA+jr4bt5ZJbW3QPC03zPszgj8DmqevaLLFqljdSTbz9tjWNSfu5z144zWWIpSUVdakuGpB4g0/wCyxXku5XUEybl/gYfwn6j+VcVoti+/U2SQSm12MAOnIJ6fT3rvfGUAWRo3LRfal2GQcAr3z7j/AAr5S8QfHO38D/FbX7J7rdos1kbSX5yNsijKsD77sfiK4XS/eu+xz1tDwr4i+LrrxZ8VvGmk6aGurS+aNDbiLczSRjkoMY78nqcAZwK9s/Yu1u90m41H4feIBLYSWztdWyXK7WCtyyD8ST+NfH/hvxZqfhnxtZeKLMRpqK3r3WydfMTcwb5SMjOA2PTIzXs3iTx/quk6xoWtZ8zW7fF0b7PzOhbJjbHYAlcHggVUlbVEU1c+7vFVhIojMkIjB+UFe6bev1rg/hP4vs9Y0e6ijlxeLcPFGpGSccAcevWvRfA/jXS/jJ8J7bXLAo0vk5kRWG6GRfvKfrjjqDXyD8R/EV3+zf8AtB3FxbSPLo8xh1JrfGB5bjnA7EMG/P2rWph3BqqlozVwSaaPuPRNHjt9P8qZN08w8tI8cgH+I/41h+A1nt9S1Cy3CKa1YqFP3WX/APWa2vhv8QNC+Julw61otytxDIgCrwCuecH8eM1W16ym0/xzY3cS/urzCHAwC6kdR9MV6EqS5I1IHVynnv7Q2m+EteuLXT/FT28dpcWrb/OfbhgeufUY7+lfmB4ms7TTfFWq2mkSzajYQ3LJbXBG7zY84Un8/wBM1+oPxy/Z9tPi/wCJBd32ptZpbwpHHCvIYnqT+HAx3FcjcfsSeHmtcWd/cLc8DdJGpXp0wOa8evjqlDEOEYc1jvjGM4Weh+bjQzQ/OYpTGB8zYIA+uar3CoxaNeQDgKcHGRz/ADx7V+jjfsM28kMgbW9pz+7VYfl/HJrzfxX+wNqcVqU0+4hupGDHcBtZOw9K3hmEpP8AeU2jCVHomcJ+xf8AH6Pwve/8K48VTNN4c1iX/QLqZ1xZ3DZ4yequ3r/F9Tj6c1axvfCusyQhjBc2c29JT9091PPVf/r18S/8Mz+O1+IC+DF0t5NV4eOWElUC4yHEgPyYx13Lg85yRX2X8JfGUfxLs7v4e+JrtYPiR4bjNo9w2D/aMaKPn4xkgnDYx0JAx0yxFKOKXNT+I5qtNrVHdeJpYPEejQ6zaouJVCXHTMEwwDnjjPrXP+F9YXRdQMrElHBVl7fjVzwbu0PVtV0nVY2jtJhsuY2yQjjo4/x+lZer6PPpd5PbzAfLz1zvQng8+oP6GvEq811V2ZyO9+Y9Sm12O30kalBPFctayKzLnPy5BIP4Vv65r1haWYvL52itY4luFaQ4B9vqc/8A66+PfCfw8+IOr+M9Xjsb1rfw1DMXa4mYiNYuH8sr1Y9QB6eleS/Hv9pbWfibdXWnaeTpmk24Nt5NvKXLAD7wPpnuO1e5g6j5Xoae0fJZnp3xz/aXuNakn0nw/MDaWrmNp1+7jJxgn+McYPQV89X0N015PJqsc32xnEkxuRtkZmHDEEDtyK0dPfSY/BvhZktiLdJv+JpeJyWO8b09cAbvpnA6V7B+2J4JtdH+IGlapYt5WmappsTxgYIJTj+RH5VS92XO0X7Fpc7PBbyG3LKI8+WR1Izg103gbxPrXwZ8aRappV9sAZVuoYs4mjwCV5HpV7wB8G9b+IeqLHYIfsinL3MifKDjoMd8V9K+Cf2ZfDekor38baxe4AY3EpVOmSNvelUmmuVFK57J4V17T/Hug2GqxQqsF5EyrCeWVSp4OO4PWuUu4LnTdH1nR4RFcW2oW/l/vG2iNs8N78d+egpLrw2+hrafYoobSyc4EVsdu1QOenTj0q1Y2wmulSUER45wcn2BPpmvNldvbU0jiHTg4NHiPg/4U+Lfh/qkr6TcQJo2oJ5tzpt4mUcjIHy8gdeo64AOcDDfHn7L+g+KtQm1DSCNDlnjBewRQYfN6sR6A9frz3Ne+Ok8ccMjvumjygy2eOopLpbZ9vlKwYjDA5I+taScrPUx+sy0KPwlfxN4L+HFzpWn2kWoTabGc3t5MUVmAyFC4546duxNfKkPxku/il8WNM0i7naWTVNTgt55M7EH7wK42g8jGMZ6E9ua+xtL12fQY5EcbrSQgzx7NxK/xY+or4t+NngSz+Efxy0bxlobLd+FZ9Uivo5oW8wWrBg0iMSTgD5iOmAcDpWzaqQhTnJ2XQ+iweJlaTpxSZ+itroVhoFtFBZW0dtHGMKqIAP8aht5ZrqQ7RlCc47D2q9FeQa7Z211p9zHPbSKsqzK2VZCMg/iKtPGlqsaRx4Gecf1qauBcm5Kyj5HA5tvXcobkt1ZRh3Qbz6/WuE8eW7XEtnc4+fyzG3GO+ea3/E2pW+kw3t7JPHAkKBndmxtxnJ+mK8P179qDwPa6pZeHTqsdxfXlwsZkL5VSTjn09K8ipCUp8kVoclaquVxZ0EkPmLuY8jn8auRQrPZqzt8+4tuY/e7c0ahbm3R24cdcr79CKsada/aFjTHyEDJ9M85rH2cr2Z5Niqmnuu47gcDIGOlW/hzp9l448SahbOWaGwiUkAYO9uAfoMVxHxg8ead8K/C+pXd9eqjbD5KMcPKw6Kvuawv2Kfivpdp8LPH3jPxVqUNko1XdM7v92MQRkIvPPOcY7n8a+jyfAqVdSnsgpu00+h9TfEzUbXTPh94iubqVIIRp9wNzkd42AHucmvjb9jm+ubyz8dwWiGYrZQ3EELE43lZFXAP+6K898dfGXx/+1B4yTRdFgnm0YTtLDpUBxG6qAd0mBkgcH2PQdM+zfsL2I0/w/4u1WeAq7XENrtOQSFXdgZ93P5V7maV1V5VDRHSl7SV2eo33gf+3vClnqzK0WrSW6yPbEbS3QEED+KvPdRsbrRZLaOb9xM/72GRWwyEEYYH0BI57GverrUJI4XvUh3SRgJDGDgFuTx+FeR33gjV9c+Idt4g1qM2mmyx+Rb2ELA4UHO0sPU5PrjHNfGTkoWnAudJS2Ox0H4ma7q1hLbTQpHdIgD3ScAgfxAepqlrVjb+LNI1HSNYHnWt/EyyyynleMbs9sVNb6DBpOrXJs1KW7LtWJjuKnqce2a8i/ai+JDeEfD8Xh7T5fL1XUI8zup+aCHPLZ7EkY/pWrxFbENOUtDmlJxdmfn94g0O6tvEd9Zq32xIbuS3jvB0dFYgSZ6cgZ/GtXxNcxeG9BXSraXN3cIN7L/rAvckjue3tXZ+IPFU2neGYYGt7Vkt5t6bo8maT+ANx0Gc9RXj+oXE93cS3Dq08s7BzIikhvQZ7YHT2r6yhJcq5uh6MZR5bopDO7A+QYwAv0qyr+YyKOAtb3h34Z+KvF8fnaXot1dQ52mRIzt3emenQ+teqaP+xz8Tb6ZYv7G8nKqTucHGe/Ga0qY+jT0bBJt3PF1SRULL8rZBDHIGOc1+gn7APh/xF4JN9NrGj3Gn6Zrtur2c02FBaMsSMdQCrA8jnBr5u0v9lPxdpfiixt9f0u7h0ozhLi6tY/M2pg5ZRjnHFfYvx++OU/wt8C6DpvhgnVPEVuIf9Ma0YwrEiYYsMD5mAxgHjOfavGrY6FSopKWx6NHljHlfUy/2qP2nrTwfeX3h/TZnF7AvzSxsAY5DgD3zg9BzXwjdeJLnxN4gvr/VLhri71Ji0k0uMlu3PrgCpPHHiLVfHPibUNb1k51C8mLssYKxqTwMDP6npXFGA+YFbcZOCoB/izwR+FdWFiqnvt3bFiakVaEOh7d+zHJb6X8edG+0TgRNFcAN/tbBhf5/lX6HCM6dossEDH7bdxku4JyqAdfqTX5Z+E9Wn0O6j1SOdI9QspA8TscE9c59scV9FXH7aHiDWFlOjafb287xLDI83z7ML1XpzzUVYvmbPEnzOeiPuvwfp8V3oK2mDsZ2ebb0J6hCfU9fpVD4sfG7w98GtM3alI1zfyIfs2m2wzJKMcZPRV/2iRWP+zZ8bND+LXgq3jsnWHWtPiRL2xBy4IGBIOOVYg4PY5B9KztY+DWk/Fb4qXvinWpFutJ0/bYW9mowJGQFnJYfw7mPA67Qeleu4OnRUqDvJndBaany9deFfHX7UHiTW/GB0kR2whQQwCXbFtXOyOMtwzYJP15rzbUPDsmi3BgvtOe3nRijCVcc+nNfpKNnkxaTodulpYqdpMICjaPTGPz71znxS8XeCvhr4ZNz4jjs3BTy4oWjUyzkL91RjrXzMpT53Z39f0CpCMo3Z+d62bSc2+ny3I6Bo48ke3H+cVu+E/Bev+KtQhsbTR7tmlz5bOu1RjGcn8aseMfj5JrPiZdS0TSYdC0+ONYktRghgCcyHHGTkfhWbJ+1F4k8OsGt1jijIKfaAuNwJydvp2/KrvWfTQ8Xlu/dRs+Kvgf4v0nVhH/YU8i+WrgwkcDpjk9c9q5e88O6pYSG3udMuoJF4ZTESQR2NfTfw3/ae8KfFSxt7S/uXs9WWNVFvglnkH3ipxya6bWNYsbOS/WBke4mYCR5F3MqgdelefVqVKb1Or2S5bnxTcwv5hHlSFe5CZ6cfzr2P4K+Apb/AEHW21OJoLDVlSKFZB852bv3mMcdeK9mtdE06300SmxtTNKQ4LRDoOBj3zXlXx2+L9n8P9LSx0+aN9Ze3aKOFDxFu6McelLmqVvdRSiqaPe/g3rB1PwBZ2wZJm0tm0yWRcYJjPyt+K4rvrXdJbyQvt8sHcFfqDnqK+N/2FfHk+i+Jrvwjq0rLaa8puLNpDuY3Cj5h+KDP4GvtLXrNt1uVT5gpUlev1rjxOGcVzoqG1z8YpkM0Lqqr5p6ArXsv7Inx8vvgD8Qoob66K+E9VljS+hblI2J2iUH+EjuemMZ9a8Xkui0m1v3Sn7rd60m0mS58NvrIcG3trtbOVT1DsAUYfUHGa/QakeZabkxquL1P2r8UKmteE5pbH/ShJGssLJyGGQQRj+leX6fC91zuKuz4x3BNeHfsC/tJHWbZPhtr1xvuLaMvpc8jZ3oCcxDP93qAfw4r6C8YRz6L4oljiYR292d8b9AvdgPTnn8a+ZzSKklW7bnRL3rSR1Osa42naNpeoFlL2swinU/3WBH9BXc2V0l9axTxnKyqHHPYjNeeJpL3ngHUoJcSzOvnBOpXHI/lWh4EvbXTvCL3qTt9jhRpGhfnyto5AJ6V7uX4pwkubZovpc+Tf8AgoF4un1TXNO8P2qmWHS4xc3Cxn5iznGD6YGTn3r4S1S0TUJnaBinykYcdOele0/Gb4nXXiz4leINUDHZLcvtiZT/AKsBQo9x2rw/WPE6yXTxyWqoG+cFCR8vbitqc/a1XPozJSuUJdOnt8Bl3Y5LU1hvk24O7B4/vcYwakTWBHIisSIzycdauWt4LjJjKnc2BIwAxXW9NSetxmoalearp1smpP8AaltYvIi8zB2rxx9OPxrOdpdoMjtIBwCTn+VbTQ/bI1QklZCf3mPTrj8aa2hiTKJcFGzw3c+xrK8fiNm5cpgyR4xuUKGbnA4OP61o6Nrl/wCGfEGn61pExtdQsX8yCZcZRyrLnkHs7D8cVo6X4P1DXL9LC1SO4vnyIoVYASN/cUnjd7H29aqah4c1PRbqW11PTryxuU+QwTwlGXnvkD8D0NL20E9WONKo/eiiq15Lqd1cXlxO8txcSNLLJIfmdicsx9ec+lWYdQEFuEcZjU5XHUeorOXEabt4bPYjaR7YPr/UVcEUaW5ZtwZhk/8A1q0WwpOSepo+H/GWqeBfFekeJNEm8nU9OuUuLdnYgFgeVbH8LKWU+zEHrX6TeDfiVpfxe8K2fjnQv9GkuV2ahYuMPZ3SgB0YHnBHIPcEEZzX5gwqWaQ7C23157c/nXpf7PPxcuvgr4zE9y0knhbUsR6na5OxVzjzhn+Nc5J6kE+gA87G0FWpu25zVo3jc+5dQ8O6V4uurPS9ZIfTbpiJ2Bw0ZOQGBHQ7iOlfNuuW/iD4BfEDVtKina5itZTGwY4S5jIDIxHQHBAz65FfT0+ixatbX13ZXST2axfaIps4EsZAIwR7YFc98b/h3P8AFDwzpXiKwCHWY7FhL5wGZDH95O/PUivlqUYxbjUWtzz0j4y+N1/Z+IfHB1XT0ZIdQsopGilHzpKuVcfT7pz3NY/w18QHwr4rshKyJa3EojZnXhC38ZPYAd6sfEe3uLf+yLsn5PLkADIc4BGc/rXFx3cckbxyYMijAZhww7g+tfU0oJwTR2Rh7qZ9RLpAhvLnjeS2c5z8p5H4VK0LLkgCST+6g5OOwrO+E+tReJNFsbqImVlQW88YOeR3Oa+j/gB8HZPEWtHxBfx+Vp9nMpihdeJSOQeR0yT/AJFctWpL4IrU7I0bm38FvhTc+BNCh1vUxt1S5ZZI1GPkTrn/AHucfSvpllE8CSIfvAMD+Fc1q7QfaHiu9sUPlkRKPYdRjpzXQ2MoTTbXcCAY1Az1HyjrU5ek3VhJmzjyrQ5vxSEurV42JMkYDlR1IHevJtN+Jml+A/ilDpus3a2Q1e1RkkYgIGQsMOT0+vvXqurQmH7TK6/MM7P9r2r4s/a0ihsfF0E9zMqj7MJVUHqu7of149q+WlzfXLrdClF3Ujov2svhnf6J4n0/4n+F7TzQZN98qHKkZADHH8LDIP1HcCrfiLxddzfs13uqWVtNaXd1cC0jtHyrQiQgMw+mSQRXGaD8aYNa8K6Tp/iDWZLqzjhEFvZIzDgnAaUk/Me3PTGe9e6x+JLH42abB4dL2kP2WdQ08bK0bbQCG/H+lejNTi307Ho040ais0ed/BXxDBoXwr0W2uI2eCRZo54wMbXMjcfXGOK8p8deC7aXx1Jf2hjsd8ob7PjAfIyGA9G7+9fTjWfgs+NLjwbHLEkkdrG0Etu+zEnzbxx/FxyPeul074M+GLa7hupLT7dIuCvnHcFxzge2e1c6nVSt1OGrCN7RPjmDWItHuri3t7MRJIxEkjLvLAjpnOMVqeHfLto7nUpC3kqNsKgZJxyentX25dfDPwr4o8yHUfDtlJuTbv8AKAOPqB1r5u/aM/Z21bwhpC6v4SkuLuwiUi4ted0YzncMdRimozlHna0OSWG5tUzi9E8QJqV4ptW2SA5MZIyoB6N6ZNcFb+LNR8LeOPGHhTT9Skt7T7R/akUacEM4Usc9uvA/Gt/wHZ3mm2p+3jdcXIDjcoDBcfL+B7V5xqckVn+03DcXal7K6mhsrgKcnbIgTOPUEr9BWlGnCalqZexkty/4ga91aJmury4uerIzyltj56jNcret5IEMuVnQEYbrj0r1H4keB7z4eeI5bG7bzbWTMttdYIVk9CegIzivMNaU3l4hI/eLyG6cGtaMYSVjCScYtDdL1a801ZHtbue2lYc+VIVzj6V1vw++P8/gTV7ey8SRrr3hdn23FvMgeW2QnLOh6kc5IJ/KvOjeBWKufLYdqoavcRahdSSxwtFG23chJwTjk16EcPTtsKM2rH2N4++Hegato7eLfhzrYvtECiQx28+5o2B+bBHPHp26VgfDn9pTUfCUkekeLmk1DSZfmgv/AL0sSkDG8D7w469a+U9B8Uax4dWSLTNTu7K3kJLQxSHYSV2klc45HtXWeB9WOqafNo11Kn2nToWubcycF4eCyZ7nOSPbjjFT7B62LcXN8x+lunXsdx4c066tbr7RaTr5kcsZyjA9D/n0rtvDeoAw288zj95HsOewDV8EfAv9oabwDcJ4c8Rf8ivLKJLeQ8vaSOeDkn7mScjHHWvuDRbaa50q1lhKSWtyg2Sg8Mrcg+1VRlKnO8Tane5salrC2PjnTonbC3VsY1J6MwYkCs7VJJ77xxYwGMpDbvwCeG4yW/I15/8AtBXuqeH/AARpfiKxdlutHvY2ZkB5USLkH2Krj8a7fw34x0jxZHpPiaxuVktLmzeZ8cmMgAMDjpjJyPavV9r9YbUu5vfl3MP4+eNI/BvhO6vLtYXWEb1XJ3NngDHb/wCtX5oeJL5tWu7qdijGSRpmOMg5OcYPbFe6/tN/HGPx94kuLW1lSLR7VR5twDwxXkA+2P1r5fj1YXCmVFZY5OCpGPpms5wi5OSPOqS5pXJVt2ldCAuVOVUjv2xXQw3pabfOu9XP3yAMnpnjt7+tYGnXD6hqlhZLJhrqdLeNschmYDJ+hIr9EPDvgHwb4R+F974bfTINSleB2lunQbml2YwD1HsAcZrzMVUjTaRtRgrczPkP4b/GjxP8H9QvLrw+Y5bW5H76wnf9zLx1x2rg/iB8VfEHxX8ZTa14jaNJZYEtUt1GUiRGJQDnk5J570233T2KpK3z42OTjO4df1rm/F0L2c1vLCSBICWccYxXdRkqiUZFqzPe/wBmvx54k8Hx+Jh4feSebR7Y6kdPALfaLfOJY146g8gDkknHpX3P8OfjV4b+OHhOC4066hi1iL941lvBkV1PbHUHPbNfHn7Dd9oniHxNbyLbtFrthFNaahnO26tpRhJDzjIxgg8jr0IrzfxJouofDf43axpHhy4awTSb3AurWXy/LhJUqhwRlVVgMc5AOe9XCrKi3G3yN1Fx1R+lXiH4geGNFvbWW+1OGCZnDFZCQVG3GMe2Qa6XwxfWuuabFqlm8k1vcjdHIygFlzhSPY9vbmvC9D+E/gj4j+JIWtvEDazNZwK2qQ28wI3uBsG5fuE9eCD0Pet74ofH3QP2f/Ctxpt5Itzrdpb7dO0xfla6THyMR2A79+OBTw1pVXXqxSj0Oj3rWvqbfxr/AGiPCXwYW2h1m6339wpdLWBS7bQOrYHAJ6DqefSvkfxn/wAFCNa1CdofD2kRxwKx2yzucv6ZUZxXzh488bal8QvEOoa1qt293dXLmWSQ45/DsAu0D2UVy0FnJJ5ahd08zBUXHJPQfrXNiYqtJ1W2kVUvTSR+oH7LfxBXx14Rh8Q6rEi67erJJc3Jj2qkYfEcak9BgbsHuT14r52+MvwF8baH8YLvXfDsz3V9NeHUbe7sh+8hdmJAPHbJHPUDk9q94/Z28Pv4R8C6bokYW5eSKNXlZdo3Ac898c13vjLxHD4U1CcWcbTalOQCzbnwoHC++Ov8q89VlKlvZJ7nNTcnG8jP8P6T4i8deDLK98QaaNG8XRw+VMjEbLnH8Q98c+2e9ZH2afXNNksZ0MWuaYcLHIMNJEP4T6kZ/wAg5r03wPpeptCdV1+6LXcwzFA52rCmPTpuz39Kk8V6fBDeQ6raGNNQhUqdw/1iH+E+pzwOc4rtq4FVKXtr6ve4Sjz62Plb45eMPEHhn4M63Z6RJ9lhvHVLmUEb442+V8fUYGe2a+IbzZY2/wC77jA5yc+56k/U1+knxo8Cp4k8H6pJp0f+i38LxNDt4glx16f3vzr5f8P/ALE/iPxBJE2uajb6LZLyxciaUjHBA6Dj16VxUajo+7PWwqOCqVpWjsfOOl63fabHcQWkjGG5UpLCzEqePlOM9cgDjtjrivtHS/hJ4j+LUPgaTU7y6TwxDplu225/10cgH7xA3fOByc5qxZ/B74S/B/QCuowx+ItSkB2STEFuByFA+UfXH6V5z8UP2wr3UsaRpLvpGmWvybrT5ZMAdMjp29a1nfEeh9SqFPDxSkz6QuLvw58MrU2MN5/Z9nZo4XY2W2jqevJ7Vwfjv9pzw54PsUGnIt7MSAJJ2woz0IGe3vivivX/AIreJNUe6lguWgFwjhmlbfIwPUZPrXFyxTTREzPJI+Okrs36E1vSwUtb7HDVr4eGsFdn6P8Awb+KUXxT0dtSn17S7q5CMDptm/723+bHzrnO09jivT7e5VkRYkG7rvyOR2r89/2JJobX48TJK+PO0u4VY8/ebdFxj6H+dfoHYx+bcFgRlPm247Dr+HvWNaj7GVj52vUcp3Zbuv3cbsy7DgNz7Gui0XR3vdKQTQRmJvmEq/f2/wD1qq32lyrpayxxiWIqr+d/sn/69T6HJfXWktJZzHMZAaE89u3pWPLrZigrPUl1DSn0nTrpF2zCaI+XJ3zjp9a+XbjwHq/g2S/uZNPTxJ4O1As1xDbgs0A/vFD3HODzxjvzX1TdagmpaHJGqFbu0HmNu44HUiuH8C6lHDcCGVtkc0mNh+7gnkflWcqXtJKKdrnoUa0qM047Hivh3x34y+DfhWSXwMbbxP4NjDSCxuAfPsskkjI52jPcHGMYrznxN/wUA+IV7A8dpaafp3l53NHGS+R/D8x/pX3pJ8H/AAtJPNcQaetpLPyzW7FQfw6H8RXg3xq/Yl07xNa3Gp+HZRb6wq7hGUG2Udx6A4GBXesDiqKvP3o+R60pYWunupHxJ8bviV4v8VNY3OteIpL231W1+0LFbvsjTACshC8HGen8q8eSOG3dXU+WdwJkVsNkHr+HHPrX058D/wBnWw8V/FrVvC3jjUJvDl6tsGs7dMA3E24gqpYY4UZwOTnjoat/tHfsa6x8JdOl1bT5v7Y0Ta0ZuhHgxFhgeYnJx7jj37VcHThG0I6HnywqV9dT7Z+Hvh3UNa+Efhe91ZPsepvp8M0xYHJ3KMbvfpx71V+IWtaZ8NtCfWdYvobOONSwWRgNyrweP615LN+3l4b8IeDfAttDp9xqq/YFTWEhHzWjJGqCPn+IkZyMjj14r42/aG+P2sfHPxRNf3aPZ6OHP2XTt5IVAcLuAODwASOmfWrng6UpL2buebOnpaxj/Fz4qX/xe8ZT6xOzpYiRjaW5yECgYzj1I71neC/Dt34o8Sad4e0hXlv9UulgiiWTarvyRk+3P41zcVyzS7FTZyNuAT14AA61u6XdXfhnxxo+oWU9xp09ldRuJ4W2uvqRjvjpXqU1CjH2ctiYwsrI/VT9nv4A3XwX8IxQJaaY2tS7jc3TF2dg2PlJAHAwPrjqetQfA/wfc+G/h3HHOE+039/c3jlemDIQv4YFezWOtW6+FbbVJpSbf7Ct080h52iMMWPc8c14v8CPihD428F+SkW2ayvZbd8jbtQMXXj02sPzrHNqUI04KOxtHljudzrHlrdW1oP9XCMuAeOev6VZvNPieAWkT7ZWzPC3QIwGB+fP4VnWKf2nqhmMgfc+8gD0HAP4Vet0N5qySZCBmGzPIGOBxXyN1LVrfQUXdnDeKPEEPhLw5qeu6myxpaRtLNHnHzDIC+2TxXwH408VXvjjxFqGs30zNcXj+YM/wKBhUGewFfT37b3iixj1C18PWMokuJozNfRoSArAgxhuxJGTj6V8n3G1Yg5PLHmu/C4f2c7PWx59eNpmn4HutCj1J4PE1oLvRDE4uV25KnAKkY5zn05rs9F8I+AviJr2naL4T8L3SSiZGnvZSxYRg5Ynr1AxuNeaxrvjfC4B+X68da+k/wBhzUNLm0rxPpLxx2+twzCQOT80kLAYHuAc5x6808bzQi5RKoXlpc+jtIh03Q7RbXSrGCxs16RxxhV44H41vWepm1hcwxMzyfxMePaqRgg8wbos+gJ5PFU/9LXdFCcEDAVz0JPHPpXy/PPmudT5ovc2E1CZ5Fd3JbGM8dearvNaalGUu7OK4GCCZIwcZ7D3plxfxWq2sAjKlMFpHGefQU6wmjaKZPvsrj5gP096jkcnuTzSvucX4y+BfgfxtZra3OhxWs4j2xS2oCMOfbrzXx38aP2SfEHgPXrZtFt5NV027dlhbHMZP8LentX6J+bHayW+2EyStHhcYGP0rQOmrrVo0F7AoCkHnk59RXpYaNam7wevY64q6Px58dfD/wAQ+A9SS08QaRJp9xu+RsZR+AThhwSF5ql4DQPq2pXboWtLKyf5RwBI52p+vOa+5/2jv2b/AB/8StYFxZS2dzZW42QRbirEAk7yOm7nH04r5h1T4JeKfh7HdRazpV0kk00eTjcmEO7GQOc5/DmvajmC9k41VZm9KFpXZ9Lfs4/CnWPCCWnj7TbqO+itVBu7WA4a4i8sl13cfNkg4xglRzX09pfibTfEljZDQflsrkmctEMBiTnGep5OTXLfAPTjJ8BtFtoUxJfwSFyvbcWGT74rVurrQ/gD8Onu711KWkXlwQgjzJm/hjXPUnjr0HpW1H2koqMH7r1ZVaV5XJPiV8TtB+C/hu4vNRuBJqEiF7ayX/XTtnaMD0BPJPFfnb8QPF2q/EjXJ9W1aZpLyXcUQsdiLnIUD0/Wt/4heONU+KXjC71vVpS7M+yGDBKQJ2VQf19efWsGy01Lq/hidlALEkE5LDHr1rsp0U3fojya1VzdkcReW8ix+Vt+cnDJxyO5/wDr1zmqST65AtiqqI1UogYccnk8V3/ja2hs2Z7RNpVAroOcLjn8c1xthHI17atFhdxPJ4B6c10R01OijC0RfAdxffDvXk1TTni/tOP7lxIhZYyRjgZ64qz4j+KPii68QSahFq80VxIQ83lkbQ305xUuoSSSt5dtsTD4k3dSc8fh/KuPusNfyRrg8/O2MAc9Kl0qc37yN6nw2OyuPjZ44uogja/KFXkbEUFSDwelcs013r2pT6lqM8l5cseZpD1x3J9v/rVHa2f2mYh2/dKu5weCeeBWzY2TXWpwRWibnndEjRQTlt2AMfU9K5nCFFOcVqjz1D2klDue+fsu/D3UfF+sWXie6aTTtA0AfaZ75/lG5Bnapz3HH4c8V+iEMlp4g0+0vrbbLFNGsoZW4IIBH+cV8t/tIXC/A39m3Q/CWmOYnufKtJpYx8zrt3SH/gTAA/UivIf2Yf2rtU+HesXNl4rurrUdCusuXkcym2kCkLs5J2nGNo6Hnp082P7yT5+p61SMKcEkfHrKpPIBPqK2NH1Swg0rWtO1FpDDdRI9vsGQs6Fipb8hWLuAbGMjHXNXdH0satqltZSTfZRKWQzf3OCQf0x+NfXniPsTaF4hvfCGuWOsaXL9mvbGQTxOpxtIIP5nnr61+pHw7+KFt+0D8JLfWdOw2qxOguo8gNDKv3h7EivyphtZG3Ru2xlcqzKQeh/rXpPwJ+PGofAPxgb6GNr3QLxRFf2MbnJABG9QTgsp49eMV5WNwqqJuKOmF+U/U/4X6o0yy6bcsIrhUKGGbG/vjHqMEn6Vwvxt8QD4ZfA/xNLby4adWtkJyGWU/Ln6YxXz943/AG7vDmkXHhTUPC8E2qXNuubvepjHlkEBGJ/iz1HbFee/tE/tL2nxsh05dEFxY6OT591Fc7l/0kADAGeVHU5715tOEqdKMGtipTSjY8We6a4uHllY/NkbnJLHj/GuJ8QWM0F+Wdc7huUj+73rrbnyfM+XlgBgVj+KLKW6tY7xJ1VIEMbqeuDXrYZRgkmc0Za2OVaNpF+QF2AzXTaCNIj05INSUJKoLOxODjoAD61h2V0ttKjEZUnPSrOoMbvLFQ27ncO/sa9Cadjqi/e1O4k0jVrHRXhg0i6msI0Nz9oMe7Yg6vkfw46n+VYkdzC8L3EA35+6or134F/F6DULqz8G+MVjn0CHR7uzSa3hfzHQqmxHCZLAKWGQO2TXh2r6Onh7VGso94Plq6xs27APQAjrgVyQvqmjsnGPKmj1D4JeH7fxZ8SNE0+91H+y7Wd2uIrhGCsJI13BOehJGfXjtX2DrH7SXwq8QR2sOq21neTnEFw80asFIbaDnuD1r83ZHcSOT8xXHEnPGenPv2pZLksMjJB6ckA+4Fc9bByqy5os6KeMUEonu/7Ulr4Aj8eQXngh7URzQEahDYHEaTAqQ4xwdytz9BXl+keH9Y8TXFxDo+j3msyWsfmypZxGQxp0DMAOmQefY+hre+DvhGb4nazH4bi3RyO7OJgAxUBM9D71e0vx14y/Zy8ba7FoNzDZai0P9l3xubbeWjBZlZVLLgjeSDyOTwc1dLT92nqjWpS5oKtJaM4OF9qzMsbW4Rh5iupDJjOc+nTHrVa4kE2VLM2B93HIPY88fj7V9MfsW+HdE8b/ABIg1DUb6C9uZ5LgXOnTKCXTYT5jE9QS3T1zUn7WX7Kv/CpdaufFujpGfCt1Nn7OrbPs7Mc7MYHGckc9wMVmsTJtqexrPBRsuV6tGl+yL8aIrzR5Ph7rUsks8Xz6a5biWEctCG9V6gH+H6Gvpy3Z20HUbWAFRbzpcwFeNqn5ZMd//r1+Vw1q/wBB1S01DTEa21CzmWa3bvuByAfUHnOfWv0z+CPjK3+IXhq31iJ1SK8sWjmhzzBKQCwI9A4PPuD3ryMdSjCaqJ6M+fqUJX0R8YftNaLF4f8AiFIlssf2e6VrgLFwATgEe3OfzrxqdZZ2GyMuzEkADp6nn6/5619H/tsaVIvjXStSgt3GnyWPkeYw2jzFJZhj1xgj1rw7w/4ih8P6VfKlssl9dqYTcNyY4hzwp4zknnvXr4OXNQ0ZoqcoJcx73+wKuj6l8VLzw3rTBodRtHNvGxxulTaSo/2iCTj0U1+o9vZwaTp8VtaRJFDCoWONRgADt+dfkx+xD4ZPij48aGgzst2a6m2EggKvBB/3gv5iv1kjvVvHmt4pA0kDqJApGR359yO1dFCUE6kba9Gdko6J33Mi80QX1xcXs6/u0GY0b1A5JHpmrnhuQX3h6AzcnaVYE84DH/61WtZUrpkyKoIKEbSeMdz+Fc/4Tu/svh0uuZo1lfLLzjpz9K41yYSu1bdO5F76D9auGVTb3LeUVTeJF/ix2r88v2nr6LX/AIqTq7NJDbwoNmeNxz2/KvvXWtTnkhguBIgRCCwIzgc5OD1r83viprUevfEjXL+BkMb3bKnPGAeOvbAzXzdJqtjLmFaTtoc7JCJF2bFx2XHHTFb1jNNpOitDDPLb+ZHszAcHcemfoKwbX95MOdoxxn0qzNcGNtrNlQQevfivquSMlZo44zlF7nR/DDVbtdDs7yCfOo2t1KkjlsvvDZBPfp+YFff3w58TDx14N0zWYgqu6eXPGpxtdTg8V+bHwmu47P4lanpErKE1KPzrZjxidRkr17r0/wB09a+9f2XbO6t/D+sxyDNuLlSmTxu2jOK+dxsI0aij3PSpxdRcx7dazeXx0JHfjr2q8rRXduwkwyHKsnbB4Ix6Gue1CUxyLhsMGyPyq1ptwl+7AN5cgA3c9ayoYjXkX3F35XY4nxd8BfD3iaVXtlbTLuP5Q8JwuPTb0xn8a8Iv/wBjvUtP+LWn+I5rqLUdLjuVuJWA2yIUGUyPTIB719dyxy27ZLk/7QFPWRm/2lJ4rP2Nm+W6Zu3zRsz48sdQtPi/c6/4S8RwfZNSguJpdMm6MoBIAHY7cDPYg18z+NNJufC+pXWj30P2e7tzgBu/OQR7Yr9E/ip8HbfxHGuu6FBFaeKbM+ZBMvyCUjjYxHYjvXjXjD4fWH7QHgyZ5bZdJ8WaUzRBZFwS2OUbPO0kda54SqYar7+x59XDK14nw7qFn5iPOCxPG4Nx9KXT9Ka8hMxbgZ3cdK3PEfhi40G+m07Ud1rdQsVeNupxwD9PfpWdpuRIIz8qYwcn36V9JSqqpFSicEI8rsznr3T3sLh/MBKZyGHcVnXTMs0U0LMssZyrKcFR9fr/ADNeg3VqlxGCV8wr61yusaas3JhJUggr04ruhJHal2NW18VN4ymtreSGNZ4h9jCK208kAdfU190/sz/FofDmxj8CeP8AUILW6s4vtWl3cs24PAcqY8nBypGK/MixSXT7hnt5NksbHGR05yP1Fe6/A7SdK+MOuTWXiLxNLp2owqqW73j+c0+e6u2SuD2z0/Os60HSftIIm3K7o+2f2nfjxoVr8MNc07w8n9vSGFZZ5rZS8EUZcK25umT7dO9fGOk/GrxB4X8IXmgWLmOw1EBmfeS0UYPzIuT/ABc5PPWvqbx14L034T/stePNHjSOWe6sTB9rXGZfNOxWGeMrkDr0AxXwz49s/wCxPELWNs4SKO3hyM5G5lLP1+tZ0ZurO8tGFZS9ndkPiDXRcZto2P7zhunTOSKxWkMaNtPGKgWQsd27IXvgcVYs4xdyOG5VRivQ5bHmtbGj4Rj/AOKs0KQHMy6hblMnA/1q4z9a/UCz0eyW5Dyn7W2VDRg/Lz95ffGa/LyOP7LeQ3MJ2vFKkkXX7ysCP1FfdNt4m1zwz9ktdXt7jTfNVZJLqTBDAjpvU456YzXy2Zx99M3SfKfKXxN0qTwx8RvEemRIDBFfy7FQcKpO5VH4Nj8K59UgvlMV6RJ22/3T7V94eHvhX4U8Zxa5qV3ZB4dUt1WRm5cgcblJ5HGDxjmvlT4h/AjXvB95fT6bbTarpQkYxzou59nYke3StMHi1ypSK15bD/2c/iPo3wJ1bxjqFwLi5vNS09bawYLnbKGY5YjoMEAHmvDtWs9d8Ra1cTxRXdzLeSMzCMb3kYgk57555HT6V0tqrSRlTh9rEbSDx049uR3q7BI0OJImdGzwVbBz6/WvZj1e5p7eUUos+jv2DfEFz8J/D+t3OrWksMN6xIgYFXZEXKsAcYGcjPv+NeH+OPF3iH9on4tG/mgeW/1OZYbO3UDbDDk7ExnqB+JJPbCjqvD/AI0u9H0D7XDdE+W32fyZMNl9p5HfGDz2r1j9n3XPBXi5rHw/No0lj4htFa5XU1fEjSDlmVhz0IyOnbpXHVqVbez6Hs4edK/NJmr4F/YbstJ8HX2reLriZr77M7La2x3MjYyPqfbuc9uK5z4Vfsl+I7HxFHr3iHTo7W2tSDb20hBDsRxxk8Dt9PrWD8Rvih8S/BnjS4sLzxHPbWnnGS388ZjkQNhMjp17Aiqvxp/aO8X+PLjRWj1JdL06GPDQWExw8i43M+DznggcDHFcsoqqrRbsjok4NatNH3/4Z0WDwtpVnBPcxSTxJiNWIABPXH8ia5vQY7G1urjxJ4i1G3Kee7QAspVSOCfwxwB0+vFfnB4u+KXi27iOqHXLqacAKGWdwFHQAHOfXjNev/B/4nfCjUvCum2firVdchvYP+PqOVpfKWQ/eKnoF+n8+a0UHFx5Yqy/Mxbw9NWcj668cftFeHPBOgPrN7G1zp7XAt7YQ4DTnGeA3UcH8K891T9q7wX470mHyLlbPbIGaC8YIwYZxnkZHUjGc18l/HzxhomrfEBtP8LX0134V0+2jW1kZ2KeY+5pSM9vujPXORXnUUiTA5Rl3Dv+P+Neg/bVIWkzzK2IhzWpn6RWPiqe80u6trry3hvICVuI+Rn+Fh+P8686fwoZNSuNW8XeINRvtPtQrCzs+TIp6oQByvrXhn7OvxiudB1WHwlrLtNpt5IFsrp2Ja3fBwn+63Qe+a+sZ9GltdSUechOwbuDgHHSvErxlF2fQWHxdSjK6Z8o/tXfF7wl4k0PT9D8Kad9hKSCSS7WLyXAU4Kk8dR65/GvJdJ+EMVx8N7jxdd6za2ECh/s9hMCZLzZ1wfU9sZ45PpX0F8d/gjBb37+K9N09AwU/bYwMqW67wBXzxq1utzd7UhMsf8ACF5JXGe1dVGpyw3sb1sROslqcDfW8Lo/2QYjbBV/7w6k1Ttra4vPk2lxtwz/AN0V6x4X+D+veOJRFpmkTOJTtEjAqvr1xivonw3+xhpX9g2JutRkk1GJQ14sf3TznZ9K1qZmqUbLVnJeVj5k+Cvwl8aat4xtNd8IW80txpreY85O1MHgpnuSD0/xFffvhnVLm4sovtUTWl3NiKeGUYIJ4x+OPxrrvBfg238H2Nva2kMVnZpCEjRFHQdz6moPGFnmOK+Vl8yHO8D+JOufwrx542VWalMVRXVzr7LT/tuhzNPcYTbtWOPkZx6Vk+GdbXR98Use6NjtZl65zwa6Twa0V1bvKpVljVEQdeSuSf6fhWZpulxx+Jr60PlgBtypIeqHHT3r35xvGE49TRRejRL4smtLDwndajb/ALsxw/e6Fgxxg/WvPPhPpcWraxGs2VEZbzACDk4yMfhXrOreDbLxBpcmk3QkFq7eaBGSpDZ4/UV5XqngfUvhoz6i940+nwldt8g2yR5bgyAfluHHritZYOpGUKzWi3NLa8zPe+FGSRn2rL13UpbWNYLVfNu5vuR4PQdT6fj61yPh34nGZoY9RSMQylQLu15Tp3HPU136+W21xtJIwG4OR6D2r6eNaGIp8sHYpWvdnz38cvA/hlPCL+IPFyvpslm8f2S/gfZcxylsJsYHg56Z71ofCrxLP8QPCV94R8WXMOtQ3ds8dtqqYK30JG07wOBIvBPrgHHXHIft6Wmo+IvBWj6Jp9lcSlrv7VJPGQFBRTtUDu2eeeOK8+/Y18D6zaeGb3VtYuJvsa3IWxt3Yja68My9xz2HpXxmMrRwFWXJquqPRVSHsve37nRw/sZ+DoPCv9l6w0z6o00kgvomw6pkqoUgcDHPTqc9a+fPjJ+w5rXhnT59Y8J3R1nT4/nktwp85FHUgdxX3rJIrwK8zM02fvsScr+Nc/rHjrTtDuptLm1K2tLlhuaOY9sdvfFfMUcdVjUcobHmVsRzvmZ8JfAL9lTXvEeuabrmtWbWWgw3kUsq3DENKiurNtA56ArX158aPgJ4I+Luq2F5HZNpE8MTQ+faRiMv6ZA44A44rsbGVFtYWtZk8sHagjIPTnPHFWrzWbmeNUkVdpYMVQYwf6V2Sx+Is7pGMailoS6DY32uR+HvCd5cyf2VpluDesrbft4T5YonGM7f4mC/3QDwSK8ZvPitF4L/AGstV8LtpkGkaXdJFZRNBwk0wRZFkORgMRIUIBI4X6D3Owugti10Sv2gFm3KCCqAdu4zXlvxZ+GemfFaFbqciy8Q27rJBqarghlOQG29a9CpmzqYdU6i94pxXVnr+gwiG1upSNnDKT2z2/mKpX+qQeHtOutRvG8u2s0NxI7cYCjOP0qj4ZlufD9npvhrWL2O71W4svPe4jOBIUID4BPb5e/evMf2uPGy+H/h3BpSf8fGrzLCc9PLHzHPscYrgppySsRO1M+TPHHjG48ceKtV1y9YrNqE7SFWJ+Veij8FwPwrn/LSSNiZsbVOTj2qC+uEmuCY23R9m9feq63B8lgW+UqQeK+kpxcYI4X7zuxwmEeDu56A9jXQeHb7X/hZrHh7xvbwS29peSSNA2cJcxxviVSBk45x9a5Rbc6hcQwQ/PNK/loo67m4A/Ovtn9ob4N/2l+zn4f03Rrffq3heGOVIVHMiFSswHr1LY9QK5cU1O8TahC1z2bwfr9j4w8O6dr2nOJLK/hWZO5UnqvsQfpV+bLSHA5PNfE37IHx0ufAGqW/hbxLKr6DqE2LedsH7M7euONpP5GvviSOJHGMeWx2q/UHPP8AnNfO1cO46x1OmMbrVnHL5ky3QHMSZChhgZPFSf2eBHizm2NMfLKk4U+o/OrM1u02oXIA3AyEBF6Vamt/s1xGIirFe+OhxUU6d9WiOUraRrp0ySSTUN7XOdiEDIwOCMniuivLj7LZ+ar/AOkXABCI33Qec89veqKaTHdboZ0O1F3Mx55PP8qy5NNK3X+izu6k+WInYnI7YPYV2RlOnHlfyN4vlidAmrSyQxN5bbeF3nrz3q+2gxapbGO/jjuI34McqgjkYP41yDaxJ5MqXO6CQfJEgXIOB1rrtPlEarHvaSR1B2E8D5c96dBxlK1X3jend6kvg/w3Z+DdFh06z+S0gJMak8KpJ4H0r4k/aU+JD/Efx5dW0TtJomkObeCNWBUuPvucd8jH0GK9k/aZ/aE1D4c+d4a02xS4uruzy90JShg3ttGB0PGSefT1r4ZuvEMt3JFbySeXApZpGX+LJ6e9fSwlBwVCnpFbnLXqPoX7q8aS4McS/ut3LjPJHUZrS0WGOG4luQMusZ2t6eprn7jWIrfCwxrtAwu7jFX9A1RrrTboyupYBgNv90DJJr0WklY85bpsoa7qiWPjC0luUSayadXlVj8p4wM1W8QQxXHjR3ghS0gkmd3hHChdoI/WsXxrqUDXTBTveSPzgpHABGPxql4Z0zWfEGn6he21jNNZ2LxRTX2TsjdjlVJ9e+PTFcMpKEWj0IzsrGj4msCtyDFwqsrHHcd/wNcpqc0FrJ5jHEjkAAcFgPWu88XalBb2+Y3SR5AsWFPUHkke1eaazeedeJJ/rEjAfbj72D0/KlTk2tSqlS6sahux9nUwhUAGc/zr1X9k/wAF3Pjz47eGbUKZLKwm/tW7/vBIug68Zk2/XFeP6hqkGrX1xfWSeTbSHCwldoUhQMY7ivuj/gnl4BGi6Jr/AIvvEeL+0FW2t3k6eVEx3MCfVmIz3xWFVpOxhSXLK5zP7cfjG21zxlYaHHO0xsneS5x/yzJACqPwJr5me1nYLtZRGvG3qufYYPYCvZP2uFDfHbV9uAkyQypg9QUx+eRn6VY/Zx+Ar/F3UL691LfF4ftG8oEdZZdudqntjgnHrXmyqKMHzalVJ80rNnyrBY7NzFl2tziiYR72DbmyMcVPKwXao449agZUKFmU7ux6CvryVTuVGZnzv49gOKqSSNkog285JGR/n/GnXU4JOM+g5qqtw3rx0PrVWuzbZCSZjRs/MRwDjp1611ugqsmkI33oixIAPA7EYrlCBn1GMV0vhqZpNOMAwAmc56HvXPWjHluYVF7poqu6NcZ3Duaj1Jof7MuYrmTyxIhXdkfezwAPX2q6sLtCQqbnUA4H0rtvhX4u8PeHNR1iPxboi6xo99p0ls6iINLC3VXXPI3dCw5+7ivO9ootIwjHqeE+WF2pv3N/nFSQ3BhfGcxN1U9TVbT3eKGMSAldgDeZy35+tSRsrZCnrya91JOx236M2fDE19/wkFpHpTmPUmcQwMuN25/k78YO7FXvEGj6n4b8SX+laraPY6jZymOS3l4aM4BA69CMEYJyCPfFDwTfDTfHnh25DeW0Wo28nA5G2VDxnjPFfT3/AAUQ8Lwad8XdH1uyjFumtaZDK7KOJHUsrNnoPlMak9vl9TXn1Hy1bI9GMFKjc+ZfE15Z6hqhurGE2qPGrPCx3bZAMEflWUpLYBIUAYGe1Ssc7C/Vx0A46e1QllVW42huNx5Nd20UcXXQ9U/Zv+MFj8GfHV3rt/bS30K2jJHbwkb2lbAXOSMLjOR3zkelYnxO8SX/AI21q/17V4vs+oX02+aBMkKScAAsASBgc1ifDMwt8QNEa8CvaJOJXWUjbxyM59x+XFfSPxO+AutfEn4dar8TvDxh+y2Ib7Tp3PmFYsh5EABzwB8nU9s15FSSpV9Fue1Hmq4TV6I+W/CviDUvCerRanot3NYXduwZZUcq655BXt1/z3r3f4mftgeI/ip8HofBur2ETXAvIJZNT8xgSkbBtpTGDkjB56V89WtznI2kKzZ6fqfQc1N5jxIEXjPVfrXW6MZy5luccMRUpR9m9j7I/Zo/Z88K/GP4J3GraoTZarZ3kqLfKwC+XwQGz2xxntX0NpvgzwT8PfB9lL4W1S2MQnQTXHnhowxwMPg8Kfy6V+dvhr4veIvC/wAN7/wjpV1JY2l7d/a5biNsO0e3BjGAOM8+9YWm+I9QsikKX8o89sOgc7XwckMM89K8evg5SvJo9L6xCqlFn1n+1Vr+n/Fa00bwl4XjfUta0q9kMxt03LKQhyFI4JGe3oc+tfIXiTw/qHh7UGtb+yltrleGikQh1bH3SPXHOK/RP9jT4S2Vj4Hs/GdxF5mpXYdYSwxsTOAfxA/Cof2u/hz4S1qwOp+IGTTDPaNHbXqD5obhMsh2j7wYfLz6Y9KwwtWdNLsa4rC0ZRaT2/qx8YfBH4lan8BPGNp4q0mNby6Ksk1u5wkkbKAUJxkdAfqK9m+B/wC1xrnhv4r3GseJbmV9L1mZmvIy3ywktwRknOAQPwr52m8qJmaBSexLLwf+A9qbtEq7X+cZ5yPbtXr1KPtFzrc+ZlVUXY/Z2bXYfFVjA1hKX024Te11CwKtGR/CR61n+GtSgs7O+hgiYwLcMiNjrwMivhT9jP8AaEfwfrzeD/EV6W0a+/49Jrh+IHAztz6GvsJviB4f8J+E9d1Se6jjsY5H2CWQZdgo6ZPOTXzdaVf2t5PU35otGF8UNeS0a6020vDHqNy6wWkUfLM7n+QzXzh+1n8NfD/w4uvCdppNsqak9rK9/dAYNw2VKlvcndUvwX+KzfFz9qDRpZWY2pkkaNXOA5WJyGxj16dOgrZ/bvVv+FlaYm0gtpyMvofnbp+IA/EVODoOnzVJb3LnD3Ldzxnwf8ObzxZ4T8S+IraYgaK6Zg2ljKpHzD6964u4by2dGQrxuA9q+v8A9jLS4bj4UeJTdw5tb2+Me4LyQI9rcV88fGjwDcfD3xTdacyl7R3MtpORgMh7Zr6GjPlevU8iceU8I8UXEtnrlrd2shhnhIkR0OHBB6g/54r9Tv2T7mHW/gvo2p2sy3BvIjJcANuZJckMp9+K/LLxQBJqMBABzGd2PavYv2Vf2pL/APZ/8Qy2OopJqXhO+kVrq2UfPA/A82If3guMr/EMY+brlicLGu4uXQ9jDS9xo/UGbTlmcmQYbPT0qnJoqxvHskZXweeoq54b8VaN488P2Ou6FfQ6jpt4gkiuIWzuHp9R3HUYq5fN5NoTGN0mMjj86+dngo027M13LNrm4gEUgBKgfMO9QSxvZvtX506fSsxdWmjuLedF2qwxJHn0P+BrUa+aWLKnAYcZGSPrXq06tOtSs/iXUh3iyCZriG1ldWYv95cDoOB/SuR1jwTpepa4uux+db3zReXL5HAmUdAR3IOetdQupTIUDjCkkU+3ugfL3JhJOAQelcFanTrLludMb2ufOXxI+Gng74zPNpw1C2tfENtnyriLBLY4IcHk89utfFfjTwFqnw98TT6Rq0ZguYH4U5KyJnIcH0/l3r0/9svwvq3wx+Mza1pF1NZw6oi3UMsMpUhwcMBz7dP6VmWHxkn+Mmg2/h7xVof2rXoW22uqWWN7kcY2evt0PBxWNCLw8bp6HJUw86krxR4/f659lYDdtUk4Tueact2bl94kITIB45HFev8AiX9lfxvpehyaumgytbx/vNqlXdV/3QM/pXhsn2i3uJUcMjkbTGy4YHOMEete5h60KystGTLDzpb6nOX0CWWr3hZciSTK+9Ylw5jmE0MzQtGciROCPf8AP8c1q+Ippf7SltwjNtUNIcdOK1fAPhu31u+Ml8VlWEgpbtwrOckE+3HPvXtacvvGe+h9x/sW+LdV/aE+E/iTwf4wSC/0+0gW1juukw3Z2gjpleCD2x+Xyl8bfB914R8ZazDqM0cl3DeG1KxNnlQACM9iuPzx71Npvxef4b619q8P308Fwr4eO0cqrY4OR0PGR3r3rxT428EeNfgDJ4n0XQLW68RatLLpVz58m+azuMEmRicn0YdPvD1rwXGpCrzJWR2ShCpDlbPk3T9DkmkJlVki4zkYz6VrNpZhjbyk8skZ245rlY9b1S01AIFbzEYrJC4wPl4wfQ5r1Xw3r2ha1cm1uGEN9kCNZDtPToK9JOT948f2WtmZngvwm3i3XbbSrUBrq5mSNF5A3FwOSOmeea/RaNrq6txpGoxhyoW2mhmUHnG05/Lt6ivk34c/2d4N+JHhTVL140ht9RjMjZGQrAjk+mWz7da+9PH3hM3WdY04K7sn74L1ZByHHr2zj2rycZhauIjKcN0dPs1ynM+A/DMS+DZGVBG6ytDGw6oitjH55rnvEVw9rJbotrxnyjMwODk8qR+Ndp4TvpdP8FXbSMAxlk2lh9w88n8f1rnfDOoXHi68EU1vHHHBLuWU8kuwI5+mTXiSpuPJyb2MpLZI+VPjv8AX8KX114l0WFrjRLh2a6iRSfs8p+9nHRSenv8Ar4ZAsBjmhK/NjMbdBX6Za9otnrHw71XR7i28yBty3BU8uOx+vSvzd+K3huf4c60+lTzRtPt3wtGc/IxwCfQ57V7WGlJNQbuc9RROet7xwg37i3b8sV3HwO1i7sfi94Ya1KxSSXYiLYwuxshh9DmvPVSXy42PG5N3PH869E/Z3sP7W+NHha2IMgjuluCuOqqOn0r0MRFOGhlC7dkfb/xK+GukeP8Aw/daPq8IJkj/AHF3Go82BuxU18BTfDHW7X4mN4S8tv7T+0i3jEa7kZTjD4H8ODk8dq/SvxNayabcyiMSShhuKbcsAT0HrXEQ+F9Ku/iJbeJmhVdRhsXhj/2myPm+oXIH1NeRiJujFuJ08zjKzPmT42fC+x+GepaZp1orXGn3loA80hziZDh/5jFeOeIdHtoGt5kXLOp3JjIGO/0Nfbf7SPh+LVPh9HqTQCSTTL1JycdIzlW/DnP4V8beIpk3R7OFywCnrjPArbB1Pa03z6nPO7Zzl5shvvJMquFRSGHXB5P5ZNSNGdwaM7V9u1fUXg34D6H8Xvg7od4IlsNZt1aEXajAdlJBLjPPT8K8X8ffCLxN8PdUns7vT5bmONTIlxboXV19cgHFd0cQoPlkJxOKa4ntZluIHZJ42V43ThkcEEMD6ggV+i3wP8dQfFT4daVrN3bp9tSL7NdAn/luvX8DjP0NfnhHbtNC528gZx3/ACr6y/YX1R5NH8U6Q7KTbzxXhjY55ZNmR6/dHTpU14xlZrqXC63PpLVtBRtPlE0MT20r7TEnKsuMFhXlHhP4G+CNN3PLYpfztO5UXCgrGpPyjAH616/cRz28KyWkc05+6wkG4c9x6VkyW8EVwlwYWjhmAjYZwVfsfxrysRRfK+U6eblYzS7Ox0nelsgSOOFwoQYCn0qOzs5bzYbWbyRgmU54J9PepJFEXnMg+Ux8eg5qG0aWGQ/ZNz88Z7Y6185Wk46Ck+ZmszPBGoy8pUduTkVlQ2C6pq0CFWEDyZ3HJyO/59KtalI9nbpI04ibptXknPf6UzwXeSTSXcjgmFSEViPunuBWCk5TSLja+pH9quPBvigJGxbSbh1+ZR/qec4+g/8ArV6SNPhfxEl7tV99v8r9shhzn6GuJvrqK4mlgnQMI23ncflZehFUJ/F13osb2um7p41JaKSQZ8sEcryRlc819VluN5ZShNXV9DVW5W2zmPFP7XHh/wCHPxY1vw/r1tdjTIxEov7eMybG2kEMo5IJ4BHQg14D+1R+2Nqvi3wncaL4Rs20/wAP34eGbUZgrzzQ4KsNh/1YJxjndxjjrXQeOvgZe3mn6xNoV/HqF7qiFLyDVBvMvzMylG7EMxPPHAxXyHeWOueEdQutF1GKZp1bZJbTLv6DkgYx93FfTwzCpL3XsYxtPS5J8OP2lvG/wx+SzuxqFgSf9DmGVHPOCen+fpX0t8Pf26NT8X6zY6VaaKIb25OwRm4OGf8AurjuSDge1fMUvw8XxBGbuysby0kYgKywuUPqMY/Wuj/Zs834c/HTwlq+qwGOKG7EUiyISIw6mIt0HI38fTPYY5a1WHK5Rdmaqj2PrzxV8cPFHhPXPI8VeGLltLLCPzCCWAIztBICk/U1maX+1x4c021MS6NdQ24JKLBt2/QYOK+hfjpqukt4OTTdRspL+01RxC5t13NHH94uMc9gBivifxx8JYoJRd+GdVh1LT5JCBC7eXLE2M7Sp659cV4daEObllK5z16cl7qZ12vftkanJcSJpegxpCeVFxN8w7cAd/avBvGnizUfGXiK+1jUpke6u5MkxtlEGMBRx2AxWj4I8B6r4u8eaZoC5tZpZSssjYPlIFJLED6Y/wD1jPYfF74P6r4RtYbmPTEktIG8ua/s1JDj+Esv8JrGnGhRmoM5fZt6tnnOg+MNa8PXEctjq9xZnPWM5wPp0r2/wn+1Vqej2bWOu2EerWcpA+2x/JMF7nGOce30r563FmwUwOnyjOfb86uossWntPjckZ24kOdueMj0/oa9WeHhUiTH3dT798C/ErR/G/hyC60y9jmllcoIv+WgjB6leoFXT8h8tRtKnB59a/PXTtTvNBvobuwu5tPvIjxNbsVI9iB29q978I/tTMuhva6/ZSSalCVVLi3A2zrnJJ9CK8HFYOcZaGntbq7NX9qLWtY8GXHhLxdo146S2btabd3yc/Ng9flIUj8a8u+K/wAVr/4yWekau1hPDbadaeTdbY2MaSuwCktjHbA/Kt3xJ+0ppmuWeq2XiDSI10hkcwSOA7CX/lmSB+tV7n9rbwzffCnUfB1joXkre2It3ukiUBZcgFm45BHTvniu7C0KihzPoenhqNPEK0t2eOSW7HTzMqnyAdhYDgN15x/n8eKrLMu4DopHUV9s+M/2WbTxJ4Htdb8GR29o9zZxyy6azgxOSuSUcn5eM5Gfyya+G7u+MDXAZMFCV5OeQSCfwI5r1KdWUtJqxniMKqesXoew/sv/AA+h8Y/FCOS7VWs9Lja7IfO1n5Cq3sck/wDAa+3768huJPseSbV1WNsfxqBz/OvI/wBmD4ev4f8AhHJd+QsWraqwupnOfMxwFjH4V7tYaaqwR2rQgSrFu3MMBF5zmvKqXqz9TKnHmaSPzg+JHgtfCvjzWdKuI3FrDM0lsGBAMLMWTb7f4V6h8Mf2uNX+GawaV4ghbXNGUAQTKf3sOD0x3H16VR/aQ1weMvHEupWWmzWel6farp6Sup/elCx3HHu5H/AfwHjuqafLbyRvdp5QeLzYOBwPX8DWlHlra3s0d08HKGrP0z8CfETwx8QtOt9V0LV7ec3GPMj3BWQ4+7tPOa66/tFUrKmN6sAiryOeeR6V+TmiaxqnhnUFuNG1GbTJhL5rSQNtJIGAD7V9OfBz9ta6025TSvHq/arIYWLUY1yy+7ZPNU4ckveRi0oaSPtZY1WY7jxgDp165z+FcfaSH7a6Idr4ZV/E4rQ8O+NNG8c6TFeaFqcF7G6hkaJgc9uR2qRNGMeoXMkm7y87lYDCnjnNYV1z2cRfEtC7dxC1tbEhFYRyfPuA545putXlva6Hfa35/wBnS1ieXzWG0bQvIOfpirmoWbXFnbQxr/GufYY5rzr9pHVE8L/BzUbWKf7PNeFLOPBwzb2G/B/3cnPpXdCn15dLHRG6Phv4h+KtQ+IGuXOr6tdzPNdNvbopRRwqgdMbcD8K8w1KA26lY/kZc/P6/wD1q7fxBEZI0jjYK6ggHHJFcdcTdYJFUN6kV3KnypOJ49WWrsY39qG8hFvIv7xT19R60+G/Nqu2MkKw2tz93nNU9WsWjmSWD5VHMh/D+tUrq7SG1iEZLz4O/jpiuxS5jBFXXJme+mcku6jAPbOOB9K+uf2a9Pnt/wBne3aWBVt9T168n3Sf8tI41WPkZ5G4Efh+FfHsl49xYMZVyQOT3r7Z/Z98QQzfA/wBCdsgs4tREykYAZ7p25/CuDFtQgzqgr7nzR8UvDLeGfF1/ZRoVtcF7fduOYzyMHHPp9RXnF/bvINpHkOpG1jwOe341+jvxB/Z+8OeNPCunzX6XEWsiASb1f54wzZC4z264rylv2L7dbxWvteZ49odBHF85GeeuMcV58cZ7JWkjWVPW580/CH4T6h8TPHOk+HLZHVbqTMp6mFSfnc89h2r9Y9F8B2HgHwvY6RpxFnpunQCJWbkvxyze5P61yHwV+Efhb4dyCbR7SOCO1hw9zJzJM7c7ifXANdX4+1U6kqRRlktlG8qwI3Htx6VpKalSdee/RGiSjE+Jv2uNNSbx9Yalswt5atEz8gko3HPrgj8K9G/Zy+LXgfw/wDDWx8P399/Z2oQySPdK42mSRnZt2ehGMdeeldJ8avhmvjTwKby3Qm90mRrqPOWLqFO8Y78Y/L1r4oFucoZBgjJAPqec4rghR+sRs9DhnGW6PMXlDr8q7m7ZrLuzOuFkbIz8vHI98Vbmvo4yT/Geg6YrU8B2/ha/wDFaweMNRm03RZIJCLqNmURzZXaGKg4U/N97vgY5r7k74pHKCU7lJIYNgdcnOOntSqV3EAZycY75xkg1syf2F/bQW6m8rTlkKyXagf6vfgSAdBhSCQB7V3XxP8A2bdU8FaOviPTrpdW8MzRLMJpG2TCNu5XHJ6Yx647UuZ31DldjysKJFbblj2xW94UjIF6pDCJYd5KqTsycbj6D3rDktJbV1JGCRzWt4Z1rUdDubm401lBuIGtbiNlyJI2+8vt+H61FZXjoZPVHUsp3MuGdWbEnp9DX1b+1v8ACWC0+F+g+NtFt0hNvYR2l4lvGFJRlAEnTgg8Z7AmvmrwTHDrWqaVbmHfHd3KQBemSWAI+oJ/Sv0E/achi0v9m/xJp8bAw29kkYZ/vEZAyPevlq8n7VEOC5bn5UfI9iWRQJQcHaajhwy5Bxz6Us8YhbMZwrgkDHcdaihZm3OflXHGe9fW037lxj5omZi0bsjcfOp+Yc9vQ8CvXfjp8dNV+N2m+D21XT7e0k0Gw+xxzQknzd2zexB6Z8scfrXknmdj8w46VcaQzaLHcsh8uOQxl/4fXBqZxXMpHXCo+XkRSVzJ8rOQ/U88D05pRhuJD/Fn3r03/hCYvDHwbl8S6hEE1G/lVLWJ/laNGPD4Pr1xXlMMyujkds/pU0qkaqbaNK1J0bLuXIWWKXch2En+Ie1fXH7K/wC1l4c+Hnw/8WeDvG9xMLW6DS2c2wyBi0e14sLnByNwz13fhXyDHtmk2hGlGCdygnbj6Vf/AOEc1u7Rp49C1Ka3WIu08Vu5UKDnk46YqakIVNeprRnOEbNaH0V8D/2a9F/aE8G6tPpOrvpXirSbl18iQKVmjf5oyRjII+7uyOQeteJ/ELwHrfw38UXOha/bpa6hb4yoIYOOzqe49eMis/wX488ReAdVGo+HdXn0u4ZPLcwNgMvpxineJvGGqeNtYlv9Zv5tTv2ULJc3Dbmb+6MdMAdsVzU6c6c9XoXUqQqRvbUh/wCEe1VtDOsQWkkukxzCGa6XBWFzgKpGc8k46Y966j4afDe78b6br1/Z3ECz6Ii3klu4IeWFgy5UnjOVPX9OKxNP8Xalo/h2/wBBgeOOw1AhbmDaGeZh0+bPB4GPYevNfVv7Hv7Leo+L5IfFGuxPZ6Hu3RwliDcIepx/d9R+fPNTi6klBwjuzOm4xkpH2F+zLZSab8E/DdtIgDR24GWH48+/Ned/t4+EFvvhBb6nbwv9o0y9idiTztc7TnnoN2f+Aivo2GXT9FMFtA0cNrFGq7EAwF6DgfSuV+LXh0fEfwTrmgxxmcX1k8QO3bsfqrAmsqVFKkovcK9dzba6n5E3xS3maFXSRwocqCM4PQ/jUafKhdfmJ6AV1+sXUf8Awj8fh+80sRavpepzPPeKq7nGGTyj/EAG5GeMciuS3NLIERRGx5C9O+K6oT5loePJa6nQTfD3W7n4a3XjLT9PmudGtZRBc3kYGbZsjnHXHuOnfFYWofEDxNruh2+j6lqsl1pluzSLEwwzv2Z26kgdBwPY11WlftCaj4c+Eviz4YQx2txoGto6SblIlRn++UYdeecHvn6V5pp8ywTN5y4+QgqTxmojRi9ZrU9BqFlY9K+BnxCPw9+KGg+Jdhji0+5Uz4HVG+R//HGb8q++f2n9B0j4y+A/7S8Py2+paroY+1DyCGea1ZcyKpHPAww/2l/GvzT8NETakyZJjdSuzH3mJwMfl/Ovp/8AZoj8RN4ytItLaQ20eAyS58tQesZ7FevHavPxl6UZcnU3pzTdmfVfwD8Dt4V+DejqkZiupQbu5jwRguSeh56VjfHT4c2XxA8Iz2lx5aXVuGaCfPMRPB5969X1rxFb+G7fT/l+xOy+U1vjhR6fTnivO/FiSajY3dqkrWTXCHaxGdp9RXFKvCnFJ7o469tUj8ttceRtWvLQIDLau1u2W/iDEdvpW/ZfBXxxrVmLm28PXjxNyN0YHb3PP4V9qeBf2V/CHhnXV1m9eXWJ/mkWOfBjDk5LAcZ+hzXvNnbW9xJ5aSiGNRldo6ccYxV/XZyXLHYmM1FWR+dnwx+IHxO/Zv1NT5F7aafLJvlsbxCYJv72D2bHcfjmv0K+Cnx20b4vaDHNAVtNVUbZ7Jjhg3fHqP8AJqK+8M/2vbXFtcW8eoR7eVkizx3zn1ryzUvgjD4f8VaZqmlrJpMSzp58duxQNHnDFcY24BPTvXj4qU3K8Ud9LEQ5eWSPpq+tftHzKo39j0qpFLLZ3iKVLRg4avJda+MerfDHXJbXVbJta0BGVRfQnE0KkZIcdGAGDnrj1r1rwj4t0Pxzp632iX0N/CwBOw/Mhx0YdQfY1z0XKUvddmbXjLqaTQfbJHkVh8p444FOjtnWZOAFX7tOfTnhZXhby8HJ3Z2nmryfNkbcMOD7GvUjRc1aWjC9lZHkXxw+Fvhn4qXWmQa7dLbf2aslw/lkb/LYBeSRwMisXwH8MfhF8ONUW80+W1OoQjcJribzCmBycnpj9OKzvGeh6poPxxtpryRrzR/E8Mtm1uSSFwmduPwJ49favjfx9o8/wb+Ol1o2r6hdReGJ51eaYuxMlkQzDnrw4AO3kgc1zYe86sk11OmNSSXLfQ/R7R/jN4R8Sa4NFsNUguLtlXaodSrAg9OvOBXzD+2l+zhpGm6Hd+PtEVbOaOVTeWq/JG+flDLjGD046c18QweLL7w74nl1rRb64iliu5Jra4DkFl3koSD7Y4rsfHH7U3xD+JXhfUfD2s6pHdWV/CsHCeWYsMCduOpIGMnpX0Ko1Kmk16NGPtYU/wCGzh5NJutXvGmXa73G056cYA6ntWkuh3vhzS74SSxn7Unlr5Zyc446981xg1jULOMW4lZFTg7sk/XkmpotQvFMcgu5CAOdzZzXpck2kmzhbQn9l3lusYNs7EcY4JH1r0j9nnR7CD4raBea3d2mlaLJI0moS3rKkPlqCNjE8FmJBHPB9DweGTX71GUiRWAP8Sjmrv8Ab15tLYiJI5BTj/P9eampGc48o4tRdzqfixJoLfErxPqehKsWjTXTfY9owsiBV+bB7Fs4rzS5jkuGlkySWcHIOD045q/eXU+pM0sz5ccYA4qtDF8xwSRj9a0pQ9nHUye7Z1/w5sNa8YeJLLRheSXhkRmWOT5mWNRzjHJPt6V+nen/ABm1n4efDnS77xP4duLu2jgjQ3lkyk8DhmB4HQcivzP+C3iX/hD/AIpaFrG1iltIVlCnqrKy4HvyOR6V+qsd1D468E29hqVo1lpd7boxkj4bYcHbwOCeleTWxHsa7UZWdtDuhy+zSZm+EfiD4a+LXhHV9V8MmTy4XxPBKNrJxncBz7/iGrq/A3hi2t9OFz5KosgJA9D3P5dK+atG8Dax8I/ihq0Pw9tLl9HurZRKl8xaB4z069WBzg9Tnniof2if2jvGvw98A6ZpcHhwaI95i3GozXAk+ZOSFC5xkDOWx0rmoVqNaXNNanJPlhLRG9+0L8dLD4bTX2j6LL/aurXGSIY2BMbdDuIzxxXwZ4us/EXjLVrjWdTdZbqcYVjkKgHQAegx7/hVPXfGeo29x/aMhFzc3DbmlnbLZJzwO1VY/iddrmOW3Roj/rOAPpjArsjh5fFFWOaMIt3nuei+PvhzqvgL+yJ3C3ulapZx3NlqFuCYpcryFJPUdfoa9C/ZO0aVfGl/q7wsJ7ARKkmOF3ud2T2OBXpn7Nes6T8cP2e7zRNatEu28N3rQNArZkW3kXchHfqxUY7Jiu88F+BdE+G/hLUYtPnL3N9MHYMcvJt4H0ArhxFSdN8hk4cstD3u+vFuI7eaGRZJYBl0YYbgdRXnPiO0msLywv7MeZBNcI7MBxGS20g+gOePeu603yJvDNjM0BUtAoW5/iJ9/wD69cD8UG/4Qfwtq1yH8y2kh8yBGfOyQHOajFLmhdmk+5u3mlWWs6DqOkahH9oS9haB+OACDk/r+lfm74q0640rUNQs5VZntLqSJ2xwSjFQT9cZ+hr9IPC8L+KNNstUd9tjcxq+1Tgt8ufwFfHX7WHhZ/DfxGu7uzhMWkawVmicjgyqoDqPcYz+OaywlVRsjOULw5ja/ZB+Jj2GsT+EtRdEtruf7VA+cKGIAZeTx68etfXqaPNqmsXcEkKm3EYjl8wDBBHT8a/LzSdVutD1S01G1lNvd2kokimyeCGz69OxFfpZ8Afi1B8V9DmvhGIL1Y1WeFWy25eOM9zz+dd7o+9yvqRSs9Geb+OP2VfDnjLxGx0tX0aR1zKsKDaXHQ4+nWl+DfwLv/gr4j1OW/mjnstQWOIzRdeDkDHGOvavobw3ayyPd3DxbTcMWVs4I7ACq2uWr65p+oN/rIovli+XnjBLZ/z0q/q75ebsdtkjfhs/stiotBk7BsSTof8A69YXiLT4dW0O9S3hNveKm/Yy7WBHIrY8JTNceH7Uu5aTaUbdzgg4P5VevrETL5qLmQKUX5se+M1688L7SjddUVZNHlXMmgvcyyZSQoM454ySMVi/8JMY41jto/NxyGyAGHcD1rgPHl34juviOnhjRdYSwgKPexpIg8vd/Erc5zjoPfPPSvlX4gah4x8N+Lryy1nWLy2voHBCwysqYbptAPftX5/Ww8qlRxR59RSWx9satcTXMiLPIwMo2hU52r6DHp79a9M0VLLw/p9jDeSwxR3Od5kYD5iMg1+ZOg/ELxhb6rAyeJL7CPvG99357s5qPxp8QvEGsQn+0fEGoXgt3KwK9wwEWcn5QCMc+ld2Ey9UXzSV2KnUcfiPqf8AaU/aGt/hj4ttdB063h1JwjTXLK+flPCxnHevF7v9rjVri8UyaZshU/NDatjIHTJr56vLiW71KS7llkkmYKS8jbjwMd6YmV6KQO/Ne/QwcKauupnJc7ufS0f7UWiXUW+/0nWLW6HQxyhlf9ePxzVqD4sfCLxtqhn8SaXdQahcHfLeXC5zgYU7gc9Pyr5fjkKt8rfPnPJwM1o6RHbXV9bPckra+cpkcDkRgjcR+Ga0q04wXMyoR5Xe9j7u8Oa34NuLPHh3xTb/AGWQ7ArsrMW7Dnn86yvHXwr1TxTN/byW1ru0DBaAJh7nDqzdCBkKARx3xXIah+xXq15pg1bwlf2+q6dMgntHDhHKkZGD3OehyK634AjxNo2ua3pvi576HULsq6TXCswk2LjGegIA6nBNfMYibk77I9/DSdNcz1Pp/wCH19F4o8K6Zf39kkN6IgzRun3Oo4B9qxdW+GvgfxDeNPd6ZDNczy8qgwck88+2a6CO6fR4bddu9Dbqo2HuBjJ9ayLfTPN1Lz0mClpM7UPKsfb0rqlO0IpxVznlPVnm0fwk0H4eeJ9R1jTIZInuQ1vGrNwikhmIPXqo/KrtveXOraTrGnvAs8Tx/wCrI4xn3+v4V0fj2TzbeygiBJDvz/e9TXJ3HjzRvhfpN7rWtPsTyCsMK/fnfuo/TrXiRp82JcU9Lnnzl71mfJ/xa+Ees/DnxZYTW9opstRnIs1zuCuf+WbY9un0rDvfhJ4g0+wu5dK0ia90dmDPc253Rg55Bz0weD71ofEL4u6t8QbyS6u8xoj7rSBXwlsN2QVI6t712P7Ov7SUnwzkl0LxHCNT0G6l8zccBomIwSAx5Gck/XivqIRnGC1FR5JS5ZHg1xG9pceVOkkcnOVcYJqe0ZnXYw65Gcc196/FL4LeEfjVodnqnh2W3t5njzHeWwG1hngOPY9e9fGPjTwLq3gXxBJpWqW5gZThZBkBx2K5qI4hzlyT3Lq0OR6bHnHxMZLXwfLkqsk0scabhjec5IGO4615/oN3cwzPGjHyJlIkXJyeMg59j6frW98TtXGq60ltAxNnYEwbkYbXkIyWH0Py57Vg+H97XanY2MHAUZGa+ho017LU2p3jsfTCftUeK7f4KQeBLE/Y5Zvl/tKJ/wB6sXAMYBH+c1y/wT+HsvxA8a2GlFWFpAyXF1MwP3QwwufVunuK81a6kh2r5fK5G1eT0649a+1/2P8AwRd/8IPe6ybTbNqEoeWduAsaH5AM8889K8TGyVONluE5yqux7/qFrP4b+x+RF5MEUkcXy5AxwR+GDivSfs23TzdYVp7pB5it3UjoPwP6Uq2TXfkrcRpNbTRhyCM4YYIAqSx09rjTispYSh2MZB5XB4rgo056re+x00oqm7mDrHg3SNQ8LrobaUl5ZeWwaPYGCg5yc9zk1+eXxe8E33g/xve6ZIkkyrhrd5RtbaRwuD1I6ccV+n1vHcWu1ZHSVcnLqMH2JFcj8Qvh/oXj5jp+p2SEzREfalXbIrAgrhsZzXbVwsow9pF+8j0qWIivcmtD8prgPG/+okjXIG4jgn61PBZi+gLpiQK2AMZr6C/aF/Z68ReCdNW8VVv9DimMaSwrh4wRxuHbJ6Hpnjg4z618Bfgv4Y1L4O+GDqGkQ3F9PG0ssrfeZixJJPcAVx1sVaFmvePPxFNSfurQ+RPAut+I/A+pG80DUJtNf7xTOVdumCp45r6S8FftzXGllNO8b6N5oUbPt9kcBunJU9uufSvdb79m/wACa1awRJpP2TylKrJbMVJycknsT7mvEfiB+xfCuvSJoupZSZV8qG6UDk5DDcP0+lc3tJxXPy2X4GHsuVaM+lPhv8avBnxIjEeh6zbT3KBVa2ZwsikgEDaeTXkP7aWrWrWujacLpVuoVe5FuWHOflB+vDcema+b/G37KHjrwjby6jHpUkyWx2rc2L7pOucjB3gV4T4p8QarD4mjuNUvb+9uLIJHJHdTMXVR0Xc/IHTv2r6DD4t1oeylCzDlnbU7rUb4ySB2Bd+mR9a5/UNPS7LHeyvksuOxrjL3xpr8N4kksPlW8w82KBV429Av8vzp0XxKebaz2TKC2D5ZABFdzjy6HnTotM6DczZhmwJGGF3dCR1rg72ZvtkyMxKh+B7V1GreMrG+s5IltJYWYhll4bb+VcnfXCzXLzIhKjADdM4HpSiuwRh3BcyQKgb5HPJr62/Yk1Sz8SWsPhO6O+SzvJp3LcBYSVfP0JBFfIsbsFZB97GOnArU8M+JtX8I6o+paLqM2n3bQGCYwsVEkeQdjAcEZGfXJ69RWeJpKpHUbdtj9aNcvrW/mS7ti26XouRkgfL8uO2AKi8eeK9G8K+G/wC0NUnigmiizuLY+VRk9f61+cml/tTeOdPsobNZLdhAPlaRCD1yeAf0rjfGnxR8YfE67QaxqMt1EjDbCp2xjH3cjuPrmvHVB3d1YHUn1P0z+DPjKDxx4L1LUYC8UWoTuYdw+8i8ZHtwc+xrqS8d5qAjvbndAi84P3h2H1rz79nGGOx+Cfg21kURXX9nRsNoHO7kdOvWvVfFLW4Wz0+3iV2VSz7eCOwyfrXm3sr9InRFcy1MvwzD9u1zyDHmCQ48ojjy+eD9e9fCnxa8EL4N+JniDSgojWC6cw5ACiNjuXGfrj8K+/fB9uY9fjdSZgEKOyjpkd/xFfOv7W3gWbUvFU+r2cLSS5WKVUXO4cYxx2/rXo4f3KUaj7lxp3ptH5w3js0uVbIHHSqt1/o5UODvxx3/AM//AFz60yWSRt20cg5zmnXTNMsUjHOB81fYK1geiI7iEXNrLMyFreMZdlUEIPfsBk55xz617F8PPH/iC+8NR+GtSsdR1/ToVVbSZ90n2ZR/D0+ZByQWJIyRnGAMb9mvxdZ+FfjZ4dkv4VuNKubpLK6jkG5SsuE5HIwMjg8V9c/Gj4WS/BvxVax6QsNv4Z1KUyacsQ/493wN0P07rzgg44xz5VfEOMuW2h7FHDwnTu3qfEHj22XT9Y8qE7huL5Xgc84rEtXeORnLnbj5cetdf8WIludeu5ppNt805+RRwccNk9ua4RZ3Xa4B+Q4x0Br0YxUo27nkSSTZ618C9csdO+KHhltVl8nSftcbyTMP9T8wwc9lBwSfTmvvD9r7xPpE3wB8QyQXsMi3EaCFkkBV23Dj3J7Y7+lfm98M/Hdv4B+Imh+IbqyW+t7KcPPa7QRJGRh1I6H5TuHqRX0T+2no+n6np+geL/DV603hTWlEotYmLQrLtGCFHAJ9u/vXg1sN+/T6G3sfaU7o+UdzrbxoT0GB34pFkG7Ln5V7HvUs6qUDtnYv8Q6ZqqzKrDccp9Oa9+m/dSOZxSdiUzryy8k84rU0rUGXQNc00DIuolI9EwRk498d6x1mT7QNnA/2uK09FYyXjQsVAmQoo6bmPPP4VctTWC5Xc7DWvFEnxSh0HRZbqLS4rGPYpmOEDYAJ/EZxz3rLs9N0Hwn4sFtrt0dQ0hNrSTaeudw9MZJPvjNcjNCgkdGbzArbWz0z6470rRxrGqquBjG3Ax+OBz+OawhTUdjapX9o7y3PafDvi7w7aX1/rPgvwdDcrpib5J74bdqt/Eo5PQdDz/Os7xp+0h408SW8ljFdWuk6dMu1obOIEuD1BZyevsAfc1xvgnXpfB15cXCBbm31K1fT5bcjCtnlWJ9VO4Djox781jvcWcdrcw3ishVMRTbiAjdcn2NHsknfc19tJw5UyvEvyDksSfvHv71JC3J2EE7sfma0PEXhXVfCF6lpq9hLYM8ImheQ5R4z0dWHUdvUHr1Bqpo9tLf3awWiZuZnVI1x94k4ApSnyq7ehybPU9i/Zt+Edx8XPGEVvLGW0yxaOa7n252ruJC5PQnGM+lfpTBfmz0ux0XTEFjp1qojihh+Vdo9fQV5h8Evhqnwd+G+m2MKb9UuIBJe3AXq7fN19ATXqHgPSzrOqmW4O2CBfMkJBAwOxr5zndSpZbswcm52R6BovhtFso5pZQ5I3HPTPpn6Vj61r0lxjS9LkLl/kef+9z0H4VoaheXniSZ7PT08mxhXMkvQPxwv+77Vc8G+F49PsbWeQFrgoxyRkgH+tet7OdRqFJerOo8O8afsv+F/Enxcj1Oe3CWrQRvc2acLNJ8+c56E5BOOuK+Zv24Php4V+GMeiano6pp99q1w0LafEQAbdEOZSOxDFACODuHXOa+6vin400P4U+GdZ8W+Irlbe3gB8qMnY8jAAKi+rMQPzr8m/i78QdX+O3jKfV9T3SX0qlYYGGI7eLB2qASQOOpzgmq9lGjK3W/3HPP3nZI80mhFjIoDLJnDqy+h5/WrDXX2naGBG0+mM1SebzI9rjDIcAgg/wAutSwgsMoSQvXNdurV2X2Rt+C5oLTxhopvbgwae15BFdPnG2BpU81vwTcR71+v3hT4c6P4JvNO07RbRLayjkWRGHJkIXIYnvX403FqlwMyt8n8WPQV9xfBX/goFpnhf4fWGleNLa8vNZ0a1+zWd3bgv9vGNqKx7OABnP1zXJVpqUrsp9z6x+MFmZtOgkiO9Ypd2P4lU8EfniuZ8NXkWtWw0hwDcqpa1lb7pA52E9/avmLwN+19qHxG+Mmm22uqNO8Pas8lqluePLdx+6ZvQlgQPqK+gpbWXR7pw7GO4hfhl7Y5DDH+cV8pjoqnWc4rRnBUfvXZfaO80O6eCcZTurHIz2INbVtdA28c0Tfw9e3WrVxN/wAJXocGowRhriJvKu1Xrnpux6dD+NcpHM+iXzQsWNrvHY9x1HuK4U/ZeaZL913R6PpGvNcfM5I28CPsw75pl1a32tebBglR+8XPGR6g+tYM4kt445EPA5DL0+orodG8Qy3KQ2ckixXIGFl6fQV6UbSXLNm0WnozkYLUeHdSSS8tmMM3yyxyoNvXpz/n3rN1z9n22vNS/t7wNqD+GdWJ3OsD/um6ngc8HOfSvSdS0mdbeY3I85HwZUYZ+XpwaZ4ZvhDDfafGx8y3bywxYklDyD/SlSopS5J7PbubxvHQp6f4217wLpFrJ4zSG/snbym1awQ5jJ4XzY+uCc/MvHsK7PSfFGjazbx3enaha3duxyzwyqwAx3weKgYRWbKt1Csun3oUOrrlVbGOR6GvBfj1+zyd51nwpdTaPJJxPDbsRGzf3iB7elddaVWjBTtzJHWpaHeeMtT0zxN8SrKCG586TQoxdSLCwIV3DKq/jk5+nvXy/wDt/aGL/S9A8UwxhJ4ZjaSEDkqwyv5Ff1qj8MdW1b4X/FWzh1ksIdQPkXTMS3mK3AYE9wxHPbpXd/t02v2f4Mwu2Aw1KHvySA3868anVcsV7S+5pSqKSdz8+LibeNv8K9zWe1yyyDY+Mc7l6jmtK+Um1IMYzgDA69OtJpvgm/8AEWm39xpzK9xZJ5ptSeZo+5Q5wSv93Oa++hJNJs5LK9kZySedOWJzu67qvRwmWMbcccH0rMh+WPLJvOATtPT6VoQNtPygpg+ua0kBZ8tI22dPSnzK6plW470zh1LsMtnANLLKW+TGMferOwyDcyoduSe+KktZW2FgjKAejDBP0p8KFnVQOGJr0X4LfDe7+JXjiz0K1jdoJ5Q8rKDhFHU5I4ArmxWJjhqbmzSmuZnov7LvwLuviNr0d3cx+VYwsJXfHyhfqe56YHpX6JTPHY2yRRDZBDGEAHG0AY496z/A3gKw+G/h+DTdOjXaiAPJtwXb+g9qtXFq97deTE2AAc5HBPWvzWvi5VptvdmlWNnZFLxHqw0rwfqOt3MO6Oxgaco3G/aM4+lfnL8WPHms/EbXJrvV55J7eKX/AEe1z+7hBHO0HgHHf6+tfpXrXhlvFHhzUNJunKR3lu0DbemGFfAfxm+Dd/8ADRJbnVIWgskk2x3m7cC3YYI5z69B7V6OErrnSaInRnJXT2PmbxVHIPssKOzjex2g8cjg1leS8bbWVfX2rS8T6hC2tRSwN5kcYG4DsfSs77V9ozvXaRyBmv0OlflRzWe7PfP2I/iTB8PfjRa6fdy+RpniKL+zrlpeEV9xMTD33Egf71fdGt6HHDr2qF4x5UD5MI43Y649sc1+UVuklrdRXUMphuVPmRuh2tE6/dkU9mBAOc9QK/Wv4U+J7X41eA/D/iqEH/TLMwX+4fNFcQkrIremSD9QM9K8XH0ubVdBNc+h33ga3S+8I2pO4ooMaqp7ZxzXin7XV4ml+A59OMmJS6i3xwdrE5Ga95+H1v8AZ9Hkj5wszhRjAxnjivkn9sLxf/bnjy08P27BpbSMu0ajJznA6e5zXJWSeGUmVUjZJHe/CnUL24+HvhQSXTpbCyh3J2wO31xisj9qfRU8WfBhtTgiH2jS9VeURr1AxtYD3xit3S7e58E+E/DdkflubezhDKwzgquDn8a7S30E3ng/UYdXg/dXMjTSRMpwA8e3j1zjP414dGThUa7EKDtY/NFIRJhuGycj/H6169+zt8UJ/hf45stQcu+lTt9nvY152oTw/wCHrXD+PvBN38PPFmp6LcAstrJmKRv+WkZGVYfh+oxWdZ4DHa2MjaRz696+qhJVopo47OnM/XnSZ7W80uC409kmt5o/MheM5DAjIx+dTwWqw2aQcOoXBz0P+c18ifsnftCQWK23gvxDc7POfGnXbkBFP/PMse5PTtyOmRn7Ez8vTH4cfpX1GG5KsEz0Yy5onNeH4To+sXunHKwyETw5OQF6H+n5V0EjMI2cDJ5+XHXH9axNcVtsepw/I9mx25GQ6k4bPqMf41uqysoKncpAIbrnrmrpLljKD6FHzF+0F8Kv+Ey8TSajpl7JY6vaotxbSRsUEhIPBI5HTgjn6jIr5y8S6lF48tW0HxlF/ZHi6zUJY6oy7FnH9yTP97249OeK+xPE9zFD4wv1kZfLtoBGGxnGTwP1/SuU1vwHoXxOaPTdWtIykYNw16ihXiQYBAbtu4GM/wBa/MMTUksVJLucr96R8R+IvAGu/D5Y/wC2bLyRcQeZDcRENGT/AHMjo3fGPzryrW9XLuDuyDyqj619OfGt9W+Fc2oaJcvN4h8C3r+TCLxvMeFCMqFY8oR25AIHY5z8y+NdDg0O/jS3vI7yzuY1ubZ0OdqE4Kt3zXu4So6ituYSjrYqQahF5CmU4NObUA5wOFIzuzwK5zULt4WEIA5AYH1HrU+lwjULcSuSh3bdq+g9a9uFPlRvCCvqdDpfh+/8RWd7dQMken2is891I21TjnYPVj2q4LgxzRkEFFHCkfmKpW929tYyQIWSAMpMYY4P4d6iW6a4jMmAjIeF71y1VzaMmrvZH21+wj+0B9nuF+HuryDypnefTZicbeBui/E5IHrmvp/46fELTfhP4D1DxDdW0dzKB5cULAfPIwIUZ7jjJ7gflX5J6N4gl8Oa1petwPJHNZTJcbojhxtOePp/WvrT9t/4iQeLv+EJsbW8Wazn006jJDG+R8+1VJHbILAZ/pXmST5HTaubU6zSsfbuhWq6p4c0O9YLIWs4nJPcNGCf8aybhfsVzII9okA+6pzj1rN/Zl8Tt4z+A3g7UJJhPdfYVt7hsceZH8jD8CMV2+k6THIZ7ma2RTM3TGQADjI+tdNTAucY8nU2fvI4HxhbrpujnWb8qba33TyNGc7Rjr+hr4L+L3xEf4jeITKA39m2zbLa3Y5UDqXP+109q++/2gbe3s/g74jhA2mS2KIvPJLDj+dfm9qVrHbxkKOF5I/GvMhg1RxGp5+IjaSZk3Cudp24BOKjVBMpU8d/m6Z+ner8tuJogFYkqN49vaq8cJCNkHHXcRxXqN9GcnM4u6PXP2b/AIqXnhLxtZaTdXpGkX7CERyOfLjk5Ktz06YrQ/aw8ZW2oKNBtJGlu5pXc368+WAeVTseuDXh9xLtD/Z/mcLu3L/CR3r1T4/WNgngfwBeacd1v5ZjEg+9IWQMWY9zuB/OvIqUuSspHRGvJtXPm268C3t4lrZwNELeEkCdwMBeM59M/wBKbqlnZ6I1olhM1yYTiWY4wzHpjFdvb2qmFo3ZvIkGGVT90c8jvmuq+OH7PVn4R1GztvDOtpq+lTWi3W4MGe3YgHLMOoPX1r3frKg9dj2qUY1VdDPgn+z34h+MGqQvHCLbSXjaZ7qViEdQ2CPrnPPtX6LeHbeyfwnYadpKx6bawx/ZJYolACBeD+ORx9a+Xfh5r2qfA34kDwno1hNq01xY28csUSFwrbdzFVz8vJ6njnk16ZqWraxaTX2qppt/p8ExFw9ukLY3jGB09s/jXymKqVJyc4q5m6covQ+jtHumkgigkUpLCMHj72OMitCOFLPdk4XcWyx6dzXgHw38eeO9etn1G6FrZaaH2IZ4mMkuegUZ6difWvStck1PVtLt3eQCRR5jQgbQwz3HrXTh8dyUr8r5kdEYSkdBqnjGxs4w0bi5dWxiPnaT71kzeLL28kAtrXywf45F3EGvMJr68+z3W2BoEZtpbGPmHT8a9T8Lrc3Hw/8AtNy+6Z42k+XjCqen5CnRq4nM5vldkkaujKilKaOe1dXvtOuLPUX+2WdwpSWGRAysp65q/wCF9Bm0uGAaWI47ONNkcO0AKvoPTmr/AIftLfxBDLPZviFDs2sM5yMnnirF9puo6DI01iontmJ3RnqoB7e1YvAzt7Som136m7qRceS2p0GkwmOFGfIkxhs+vesWWIaprl8N3MRUIwHIKjOPzzUtr4pWRcNA6z527OxOPX61J4fR/t1xM/yPIxZ4z1U9j7jtXp89KtClQh1epxyg07sm8WeKNP8AA/hfUNa1WRIbCxhMsjMew7DPevyQ+I6618VfHniXxlp2iOba5uTc/ZLRMlB0wo/iO0Ake+RX0b/wUA+O32zX0+H+m3bJY2AS41HyyMPN1RT/ALmAfQk5/h48bbxqvwl+Fttb6Zc+dr+vxfaoVVVK2oI/1hXHT5sAdyeh5x6daf7xKK0QUuV3czwxvEWpPNHmb5Y1kRBtyQrEbl57cVkiPbnCDYP4euKuOsjJtY7nVyd/TJPLH6E02OGRU+ZcAjpWnNzHl1JOTY9JFVRGDx7f4VX3H5l53bhx+NRLHI0hAGNoJLHp9KnS6CqrMu4n+L8K0jYy6EkZHzsp2t3PpTG4UAtlz1NCyIsbfxbuKhZsRv74Aaqk1claqxseH9B1Pxb4isNG0Syk1PUryTyooIRl2OcHA9sE/gewJrqJPCs/hpr6zuYzFfxs9vNuHKOjY28ehHavrf8A4JlfDvT10/xR42vkjk1HzEtLcuBm3jC5bBPQttySO2Px5D9ojwC0/wASvE+seH4HvfDn2+NHvIRujWcqpljVu/J4znnjPeuXERcaXtLnb7FONj6n+Fmhro/w+8PuQrm1tI4yvQLtXAArc1Ly5VP2aTzbhj5z47Y7fhmpYpZNJ8M2+ntFHGBFGcR89h82fqKw7Nv7Nv1nlDTx8nCf3u34c18jU3sRazSO1+G8MrtM6t5ceVLrjJY49fTFZOvXUCeINW0/VLL7bp80yyJgZ2HbkjjnrXX+AZEuNJeSJNqeYSsjcbuOfoK5v4kL/Z+uQywP5j3CbpLdlzwOMjPHXH5V9C6bo4CNRm3wrQ/FO8szDG8gVto6ioLRvMYxn0+bNaT/ALxiicMwwT61mSJ9lkIYmRl6+pH+NfSx3MvMikWWGRth2yI2EeNiNvH+ODX0j8T/ANrCb4mfDDw1o9y0tzqdrZrFfLJEYjHOuMSROo+Y99w6d8dK+dLmFVy6hip79Bmux+FWi+DdQ1ieTx1rJ0vTLdA5WNSWuOv7sNg4B46YPFc9elGWrOyhUaVrnI6pqM13Os9zK0suDvZiSTk9T3JqBMSKMHIIyD2r6Y8YfEj4K6Bo9sPB/hcaxOSFMl0C8h7HO/pjr/KvnDWr6C+1a6u7S1+wxTuzLCpyEyc4HHSnRm7e8jGvCMdYu5f8N2OiXV0Zde1BrO3CfdhPzt7Divp39nf4Y6b8cvAPjDwvpusXlpotvNHcwxugZhcBflfBztHA4XHfPPNfIjLnOQvXODzXpHwB+PmtfAHxkNTs0+3aPdOq39h/FMo4Gw9m5/TnjmlWg5ao1w9ZQ917HHa5o954b1y70u/wZ4JXt3hYEAMp6/iKz3hZxuX5Ezjrx9K6z4wePrX4ifE7X/Een2kllp1/deZDbzDbIq7EBDDnneHb6GuOkWWUqkZOQpPyjnIx+lbQTjG5zT96WnU7f4P/AAtn+KWuXVuJzZ2dtEXnuVALIp6Bc9CTXL+XDZ+JJI47gTxW1wUSb+8g43fjXoU/jw/D/wABHQ9ClUXGoMXuLtFwyKccBvbtXmVjpt3ql/DYWkL3V5dSbY4IVy0hxkKo/l61hT5+ZuWx21lThFRhuTalF9m1addpUb9w4655zVFbghpNuSPUj9K1fFlhf6brXk6tbSWl7hVkhlRkdOMAMCODWPteIsFO71A9a607rQ8+UbPUvW6STQn5iBjAXPA5z/Om3iPz5h3hufLP3e/+NFkDHCeu4+tEzBsozHcMHHfk0KRp0O7s/FVx478G2nhnWr1pjooaXTZnH74qVIZGb+JQMAD0AyTXYfsgeGNK174pJeeIL2Cy0/SbZrsvNIE3SkgIvJwR97j6V4erskyvHu8zqNh69u3avof9kPwPB4m8ZalY6nYLdiWwk2RTrn94hGCR9TxXl4txhBp9TGqpcraPov4iftkWem3U+maNp8WppbKYTNG37vAPXp17V03wr/a60DS9L+x+KNNn0iO4RpBNGTIJX4wDjoMV8Wt4eu9N1690m6g8q9tZnjmj6BcNz25/GrutzP8AbYEj+cbdpiJ+6cYxXJh6OqkmedCTi7s/X3wl4o0bxbosWp6JdwXtnMofdCQSBjgEDoR6e1Z/xC+I+ifC3wnPrOtXiW1vCvyqzYMjHoAOpr8svh78YfE3whujc+HdSktEYjzbNzlJwDnBH19MHHFc78bPjh4j+PettqOrzNHbRoBDYKSIY2xgkAkkZ4PXqO1e7HESUUoqzPTUnNXJ/wBoz9ovVvjr4obUL6SW30S3Y/YNORwVVBg7sDqxPrz3rmrP4kadpHw8GmR+EEk1pw0Y1wyBSqk53AD5i4HABGMVyFt4fuNTmS2SRIjMyokkjYwT0JP14qXUtFv9F0m4juSnlpN5LR5w4bsVB4x3zXNGN3eerHdLY55rkNyRjHVR/SrGlyF3kIBOB97HH0+tUxn5egJH4U+zujDLhWypbBA6H3rbpoSm73NlmCqXyAMZORyDXT+Cfhl4l+ICOPD+i3V+VO2Volyq9OCc8nBH4Vyk8m2FniG5h8wHXkH+XXNffHhP4s+Cvgj+zhpWu+DvEdrqtzvRJ7Jtu95n+8pHBBUHv0ArgxEqj92J6eHhT3mfH3jj4c698PZLO31jzLHWwxn+yMvzRqMGOTcO+Rkeh9K/Rbwh4ut/i58L9E8X2Ua/voFjvY+8UyjawOPoe+a+brXxlo37ZHxY8N6ZqFhJotz9kmS6YFWb5eV28c5J6Gun+B+qXv7LvxY1T4Z+KQw8K65N/o2oSL5calhtjlB7BjgHsDjoOnj1V7WPLI0xWEUo3gfQ/hDUm0C4S5mUnT7g+VcFeVGeFJ+h/Q1veMNDiXTym7fKr5iDdSD0I9aNe0NtH0O6hba4C7lk24UgYIYfh1q3osaeJNBitbkkahp6BsMfmeMjIz/L8K8z2TcXSlv0PF5fss5/wXqS3EUuk38bGCLpKDl0BP8AIH8q0tW8Pz2MkN1HJ9ot2ICzR84PbOKxtQtbzR7g6jbGNXhRgx6eZu6cevFfMvwf/ac8bt8VNQS6tUvNEmums5tJxwhVuCueAc5ya0w6U4ck+nUdKnz6I+z/AAxrz+JrOeylndLyL7hb7rj/AB61lalZtouv6fceU8IZhDMy5wQTz+lTaZ9i1cS3/hq6jS7JEr6fNgSxsOSuCfoe/FdjJfnXtBn8qJHuAhDwyD72AM/iD0+lexGj7SK53qjf2fK7M29QsUvNNlt2HyshHTv1BrFhjOs6Tc2c0jJd2x+936cH+laXh/U49Y0u1kRgzeWPMXuG6EVR1eN9J8RWuoAgW04W3lH+0ScHFe5UpQnBT6bFHy/8V/h9NrHiTTGnkRpWkV7WYfd+9yrd+uPxrL/b4XzPg7YlAyj7bCH7AkK1elfGz/Q/ED2lujDbieJewY4PB+ufyrw/9tjxkmpfBDwvA0ivPfXauB/ExSNix/MY/EV+fwo+zxbgujMYz5Xynw9LhoSisQ2PvZ9qt/8ACb248FWekNpaQ6vZygw6xbybWePqUfnrg4GMjgZx0rMkZdwAUnGOM1jysBJISxQ8he+OOn0+lffxirIpysy5C37ndIGGTwfxzWnabGt18pmy3HPPSqrQ+TY2rncY5Ccd8nvVzT5P3JC7Sc4GKC/MYqtISo5GatNb/KdxOe4Peogw8tmRdozyfT1JPpXafDP4d6v8UNe/szTYmXaD51wcFYV45PPXOeO9YVakaUeaQn3MHRtFutUuEjs4JLidUBYRLnYvTJFfol+xl8Ev+EA8IyeIL+326vqY/d+YvzRR5xgemTUXwd+C/h3wQlpotlbxy3M6qJ72QZaVv4uT29K+ptO0xLWGONUCxoAqqPQV8rP22aVvZx+E66U4xhcxdSRoI1bOB61DpcfmKznrnH4VuazafaJI0/h5JqOLSxZwMXYFV+YseAAOtebXympDEOEdUi003zM5Px745034f+HbrU7+dVaONmjhyA0rAE7VHc1+d/xq+Kvj/wCIcOoTanZST6BNuiSHyMwQdsqwAO7jPJ/Kvc/i1o+vfFz4hXk9kjDQ7Q+VDIzAIVBxvwfUk/l6cV9AaD8O9L8O+DbLSoLaG+0wxZYyYYSM3JJ/Ong6U5VedrY1q1oU4ckOp+P2pWp3ll2suQR/tVmKqkHK496+7f2i/wBjeO4hk8Q+CLZre4R/MuNPycMOc7R2r4ev4Jbe6kt54WguY8iRGGCrA8gjrX3OHxCqaPRnk3uJHc5427l9G5HbjHpX1X+xD+0la/DHxFdeDvEt+IPDGuHdDcORi1u9oXJP8IZQoORjKg8ZOfk2FsNj+KiZWkbjaWz0ZeCvfPrzXRUhGehV+Vn7Yap8QNF8E+C9b1druE6fp5+WRXBWQlVK8gnrnFfD3wn+IGmfFj9qO11HWII/IvvNjtY2BZTIozHnPI5U/mK+bNP8datq3hm00G+1u8uNLtWE0entJmMOOjEeq4+U9RV/SdeuvCev6brGlnfLYXMd1EIuN5Rg23ORgH7v0rwcVTckodjPmlzrmP1Q1zS11m2nTyVaZyDG3AwR2+laXhfX4PFy6l4a1GE2er2MUZYquRJGT+7mQ/UEEdjnsQag0PWLXxh4d0TxDpU6S6brFnHdxTL90q6hsj86dr3g19Wt4L3SrsWmsxR+UlxtxvwdwRu49j2IrjjTdKbnb5HdGz0Z4x+0b8DZ/Hnh+71GzgP9vaSpZI1X/j4hGeCO57getfFUmnzWMaSiRWUtjAJzn0Nfc118e7rwH4mTSPFOnT2+oSZLSS4MTJ0+XHXNfOfxc0fSrfx9qqaa8P2OQrcxRbxgBxlup9cn8azwtaMZNR0JxOGUVoeV+cZrUskmx4xuVlXlPcfielfcH7I37Sj+NrGPwf4ouSPENun+i3MjD/Sox91cjq49+o45618dTafb2EZYHezjnvVbw+slrLb3NvJLb3lvMGSSJ2V1YHggj0Fe9TxEqD5lscVKLS1P1smgjmheJv8AVsNpx6HqRWXYM8Gkz2uSJLXdCHBySAMqfrgivm/4c/tQahDpkWm+Iw13I64TVQQOTwN445x+fWvWfGnxBtvC+iyXtrJDPbS2y7pEYfL1w3v1PvXfVzClKm5Q0OnY8y8a61c/2vqU8cik3UKGYjBG4E9fQ8VU1S7l8I+EjppmLX92onvWOSUTqsYz04z1965/w/4qttXt5PEF3NA9tBOJ3diojlk52RAZxnpntjrXgHxw/aMht7fULDTbpdR1a6l3Suh3RxL9c846Yr4D2FSvVb6s4ZXeiNb4/fEizt/Dd3Yavtur3U0CxRtyVAHyMoHXBHXr2FfJviDS7zRtca0vFZZY1SQK4xhXGc8dO/5Z6VL4i1zVtf1b+29Rmkv78qrLMxAAKj5VUdgMdsV6T+0Zf6T4s13wnrOkPCy3WlGC7aEjJlR04IHRhlsj3r6jB4dYSN7nVRovRdWeS6sn2mK3lg+ckbM46Z969QX4Tz6docd1bXcN1csitcQg8k/7P0HbvX0R8O/2B7fxZ8DYNVvbqSLxPeqLq1j3AIiEDbG3v1Pr2rzXxd4DuPg7qlto2oWkmnStCGUO+9pd3AbOSM8HpnApzxUpPRWPQ+rJRvfU8k1fQbnRvKNxF5QuFWRVLA8HoayYYvMYn2P1NeteJtAhvrD7ch82MYimU8lD1Dg+n6CvMLvTrjSpHLvviZspMevPY041XLRnjVIkSoWdY1UumeD/AErUZmECnLO2wInmEnAA+7k9vbt6dazrGYxAqTl/9YuCK9Jj8G6dqXwHfxfbThdXstaNpdJ5gBeA9BjoMZyOmfpzRNpGMXyn2T/wTq8cjWvhvrXhiR83OkXn2lU4yIZ8uCfcyCT8q+tQAFAXGMYGPrX5Zfsc/ESX4c/GzSVubhk0nWcabcLwqZdv3THIx8rd/Rj34r9Ti21SSPX6V9HgpxqUl3R6Edjxj9qaZ4/h8gQ/eu4xMvPzLyOR6ZIr4U1zRQ900MSNuKln3DoOor9IPiJoEWufDrxNBONrXNjOxZhkrhCV/LAr8v7j4iPZtOI7Vrq7ICBm+VNw6/hXk4mi1X5u5y4lN6l2bSY9NhkuJnSCCMFnkLYXAGTk1y15rzeIJJLPR0Z7Z2G272HL8dB6Cucv7zVvHt4Rqd1tt4/3fkR/JGmOTx3+vfNeh+D9OtbK3EM1t5NxGAY2bIJUjtg9qcaKbOC1ip4a0rbZy29wm25RiJA3oehOP881uSQ33xC0vwj4Isl3ajHfyeT5nQJgjBI6YyarLL5OpGZR5fylN3UZruv2TL3T1+PkEV+RM8ljcRQN/cmYo2fbKh+e3PrXHjorRIunaW5y+sfA/wAY+Gb547jTHu1jJ/fWMbSIVGRnjt35xU+grNp7XNjplnDHdLC2VlXkcZIGOCxz3r741OxFvI0qLs4I+YAhv8K+VP2ydPTw5448O65p4WzF7bmOZoflMjIwwSB1PJr536xNOUJHuYeUYux6Z+xTp1x4n1jxX4y1qT7Rqy+Vpiu+DsUKC+PrhQf9wV9TXlxE7SQLskn2EmM5xj37Yz614/8AA3Q7zwj8PYbi3sGe81gi7ZIwo2ErjcxyBkivJPjN+0B4o+GfiTVLOCzjsbtgIA9wBIQMBg/Bwcg5zzivap4lUcMoOO501Ivnvc97sbrTrPUydTKpmUJCrHCqT04yO9dnGumXEzMtzA8pOVAlUnj2Br8rvEnjzxD4o1Ka91TVri6uZTuZlkKAH2A4AqvDqmox5kN/dh8ZI89uPp81efRagvejcylWinZM/TzWNDsrqRYoruHzQxdow4y3vjNa+jrDZ6T9hKMyBCnygng9QD+Nfk34i8ZavamI2usahDccK1wLlhgemc1o+C/2rviL8M7hhpmsDVbVmUy2+pg3H4Bt2Vz65rrw1qMnNRtc9CM/a0+WUj9VPCOgr4bs2txIzh23kk8Zzxj8KuxXx1C4v7ccfZ3UK+cgHaCP1JzXh3wC/ar0L41WCWl6g0PxJFjzLGdsJL/tIx4P07V7Ha2Emn3AulgC+ZuEqKeVycgj1NezTrRlD2a1RySi7tyZLobBd9rKgimiOdmSBgngj2JzzVHxBbzxXrnTZFt7u4t3CTMgZVcY2nHfnNV57fUNR8SSzQs9r5ZRQx7JyTke5q7HcLqWpR+YHS6syUljXoAR1H5CsOSDi4KNtdGKPuy94/ID4reCdd8N/EjVdM1lpLrVmunaa6brcOzcuSexz9BgcYqlfeEtRtbGHU7i1uRZTyG3gvCrGN2QHcqMf7o9Dxk+9foL+118A18fat4e1nT4P+JjNPHp8jYyCHJwzD27n0FZv7V3w30zw18IfBPhmwhK2en3TBG/jz5ThmJ9SWY/jXmynVpuSeyNK0ac1dLc/PKWxl844TtgHHGRQtmrMZGQtwTtXgHmvSb7wn9muysLZjzudgMqo9BWf/wj4k83CKwTqB149APWunni1dnhcr2RxMunBWCqqxjqw9qzbjRiJ41R/wB03V/4RX0H8Mf2cPF/xMmmXTLB47RXCtdTAJEvGfvHk8duT7V9MaL+yZ8N/g3os/iH4ja1byxxjdJLO4hg45A9WPt39KrnnL+GvmdMaKteR+c8nhm8+xC5jtp3g/icIdv59B071iXlyqr5UR8wt6dM5r6S/ao/an0n4nWtp4N8BaWmj+DLdlDz+QI3uWV8grgjagHXPLZ69q+ZGxISR82SOT6Cu2jCW8xOEU7o+1fAXwx1Twn+xXf+OrPxLdaVPq7NfNZ28vlxy26sY0Hy8lyFz16EDFbv7Of7Sng/w38BdQ8L32n3Graws8893bGEtGI3PEsjHgfdHqTivj+++IOta34R0nwtd+JNR1DStKgSC10+U4ggjAwEA4yO3PoKzYb+60+1vEtLiSFbiIpLDHIVSfGSFfHUHkYOf6Uqq5VeJtz+6frtaTi60/T4Yy00KWSk4XkAqOT+GKhhhZJfOJVkIAXGPlY8A1B8O1t4/Cuk3dvK2pWlxYwwvKrbSBtBzz+Xt71o6+1xHcTqkKx2qojSZwMEAben518VPT4u5NvtHoeh3FvYyDTIwMxxhpCepY9R9cc1yHxg027lmsLq2V5dqtG/lgu3Yjil8IyXNhqFukkTTzzSZV94OEI5P161pfEPXW8N6jpV3sMqOJY3RQTkcEcDtnnvya+lpv6xl7jLSzLbufi74a0f+2tct7BZUg87diaY4RAOpJ7cVZ+KXhfRvCOuWVloWvjxGksTSXU4KFYJQQAg29VwT1yRjknrWGw8mQlpPmIJB9O2MentVLUo0VEYsFVj91mwuD7dvwr6CLtqyL6WREx/0dVDbVX+EdMVVkCzMVjSMmNclmHP/wBepiRu2ggjt+WR0qMx5cgE9MHHetNzIgZ0V/NDeW7Day8EfTpUzMNqyRlmYD8KbcKhYMUAPQcU+JNimNwCCM59KLITkxilJACevekmmEextmU+709iP8/SgQ7JNpB3AZ44FNU7mJ3HH908fpRoS31JGkBdSQq87hgZOMdx9KerOjDZ8p6DnnryDXYfCX4b3fxP8U2um28TTW65lnMahmKIQzICe5HHBHU+lZ3xWsbHR/G2p2mlxtHYQyCCNWYlgAMNnPOQ2Qc88e9c/t058iO54eape1bOalaWZlaUlsZ2jsAfap9P1O50bUdP1DTrp7O+sblLm2uEGXSVHDK4yCDgjoQQe4qoshbAfI/z0qd1VoxtX5l6Hniug5ubW51/jrxZefETxPPr2ryI93ciNJXjXYpYJtyFycVyp/dM+3luT69OT+Q5pIGMtjKrMSUwenQ5qvb3U8c0U0Nw1vdxMrxzqMlHAyDj2PvUNW0HzczuzYs5rfUdNEo27lfa7Ic7x2x+P8jVjT49JhmL3qySRr8429Gx2Ndz8W/GHgn4gLouv+GNEm0DxJcWxj1+wxttmlCrtkQ9CTjBx2PzYKivN2bzOSN4zwzdTT0RTZ6P8MbzQIdQ1VfsdrlggtfMX7mByRnvX0n+x3qkcnxZ1wlhcXkenPNEuAVb51B69MYH5ivie3maORXiLCRTw/QivWPhb441jwNr1n4k0q5xdx7zcjbuEkRABUj0OB+IzXk4yjzR5kKdT3bWPbf2tPBM3gn4hf8ACTxIkNpr2WEaffWUAZB9yM/WvA5757XE8kheZnG3ODk4r6l/aR+KnhDx18G475NUtW1aQwXNnAjbnfBG9AvUcZ69DXxdHeXOqX9xJM+LZBsixxgdc/WssCmk7o4oQ5tS5ql08kLN5ud5znPAPtWPFqy2u2LBkCHJ496TUrwQ+Y7LnsIwOnvWOtzFDG5dsOxOOcmvbppXuzq2Vjo7PVVvZGAYLGo4Q9fpUs91LryxWJCyTK2ELN85JGRk965O3m27mR+f7o71bh1D5g0bMkyc4Qcj/JrWyFykVx/odw0TblZDggD86jjk/wBLUdULdWpbuSR23lcs3fvmqcm/grnOMAnoDWNrCOp02ETwvuUEL744zTfssduzPxIrDJGPvc9Ca0PC+kzX3h/VtXjkils9OMcc7M2GDNyMDv8A4VRSUybllXbKGyPT3qGrnVsj1P4F+MrDwT488La/PzDp98i3pQjcIW4JI9ADngdjjOa+yP23rD+0PCen63JpfnW0yi2guLhdj2ruNwde4PAG04BzX50wk2kkU8ZYSKc4B4656dAfwr61m+PGu/tH6D4D8DGyEEVq8aajdRkku4ATeQOiKjFsDknB4xXg4pezbuehCteKPqn9n261fxJ8DtIi8VXHmPNbgW1y2TIsWPkZyck5469utaN1LeeA/E1lc3PNuqiJivR4uc4P+envWF468faX8I/BYspbtLbTtLso1aR8bmUcdu59PevK/gl+2NoHxW1KTwV4vH9iyzygaRfSyZ+bPyoxHAJ7ducHtXL7L2ln9pdf0PKk+aTaPoXxdpo024F4p8+0k2vtGDuQ8cfTr9DXwfd6zY/Cv45eKUHlpZR3zXKs3JAkUOCPxavvcWF5J4Vu9JvUL3mltvjZQcSQnptPfv8AkBX5eftU3X/F9NfUS7kkhhcrnG4bF5+nFaUcOnU20YQqezqLlL+uftPeLJvGia7oc/8AZN/aOUikQ7vMjB+63GGz9BxwK+iPAf8AwUW+1TWtt4l8Piyv/MAa+tZCyZOMsVxwMfXHevjKfS4tJ0OwaUg3l6PtIiHG2Lop9s1jyTOygMSYmIVlx6j9K9h0eVe5ozWcnN3Z+6nhuK0j0u2uLF1mt7lVmWRCMOGGQwx2Oag8YWJ1LTkt4l3XLOFjJ7dSSfwzXxT+w/8AtWFfC0fgHX5GfU7BkFhMx4lhJHyk44I9uMDj0H2no+oPq2uXu8oYrYBYgp4+Ycknv0FdkakJUvYrdmfkec/GTR01LQYL10UXCR+Sz85V1JyB9efwr88v2p9S1CbVvDFpNIrabHbztbxqDlH3L5g/9B/Ov0f+I2qQWmn61aXMLXEDTxyArwU3YG78CB+dfn7+2Fof9nW/he8ZuBNKN3bay5IP0K18xyxWNucdRXqqx82n5ssThs/w1iyLjeXHHPXg9K3YU3SFQP4uB7+lZVzDvln3kbueK+mtdHTy6nRXsIh0fQlQglIXbB9TUVlAkMbNnZ8+BnNP1hoZLHSvJflYsEVWF2IY2D8qsZ2nPzZ7is5S5Y3NNDofDXhy+8T65aaVp1t591dNtRcEhc4BYj0x9ea+/wD4b/DfTvhP4Yi0+xJa6YBru7fl5Xz3PtnA+lcj+y98H4PAXhVPEOqRqb/VLWOUHBLRRjog/wBrJ6jk17Fo9oNav47PlYd2XLD5Qg5Yn6KO1fKYmtLEVORHPVnd2RwHxA+KkfgLxR4B0iJlTUtR1CG7umYn91bF/LVSfUsxI91NfZFvJ5qZH3cV+P3xp+JH/CcfGzX/ABBZt5WnQT/Z9PCnOIYTsU+hywLAjsQfr+qnwf8AGNv47+Guga3byq4urWMvjs4ADL+ea9TAU/q+Ks3ZNHVBfu7HSyxmS8K9CoxXhv7Ynxm/4VX8ORZWEvl69re+1tipwYowuZH9uMAH1b2Ir3SS6itYZ7q4cQwxgu8j8BVA5J9MCvyl/aY+L7/F74narq0DFdMjX7Hp6bTzCpID/wDAzz24I4HNd9S0VJx3kX0sfYvhnXoPFXgXQfEVgnkpqVkjGNQPlkQbZEPuCK9I8AamLG6GiagwmjkQSQMRwrZxtr5T/Yd8dSeJvD2s/De/ffcWJOraRNvJOC5MsZH1bI4wA2OMCvdZreaPUIBFI4dG37fumMjt/wDWr51xeFqKUdUcMr05HrGqaXbtdSRRPJanP3XHBB9K+Iv2xP2bv7Qz4u0GxX7fFGXvIrVeblBxux/fA/Svubw/4ih8ReHzOYRJPB8ksa9QR6e2P61ymu2kNy8sQhBjmJDW8oyCpHOK9OcdqlN6jqfzH41tAY4w7HCkn65HUVVm3LjPDHgfjXtf7Vnwwj+GfxKmOmxtHompfv7eMjiOUj94n17geleSXNmq2dncHDmTcB6cV7FKopQ0Ki1KzOj+FDW8Hji0lvoY2sYBJI6yfdb5TgH86nhvI9Qa4mii8q0aZnSEkkKpP3R6DjoKzvAdnPqniCDT7cebPdfuUVh1ZsAfzr7u8C/sE2lqlrNrWpLP8u6SOCPBJJzjPf3rwcwxioT5VG7PYpYXngqs5WRq/sF/FCPxR4B1bwLdTKb/AEOVrmzZid0ltIxbaM85RyRwMBSg9cfVnh23zFg8x9VX3Br4s+InhGT9mP4xaB408OWph8PykW19bRcLIp4kRvqpDAeq+9fZvhvVbTVILLUtMnW70vUIVmhmUghlYbgQR2waWCrRxMk30IrU+T0IvFXw/wBK8SfvrqxhubhcgGWMEkY+7z/9evhz9rLwDb6P4z0/UNOsFtLXULcxGOFCAZl4PTqcfyr9Ds+Yd2fl65FeO/tLeCovF3w6v4RAFu9O/wBPt5FHJKfeUY7kE16WMwNOk/bQORyclY/OWPT5bXh7iaOfbuaPtn6VY8P6jcLqJglWNWZtp5I3+3tWlqUURumnQsSf4SDkfWqbRGVQFRd6sDn1I5rlnytLzOaEnGWp3F/4qvodNWObSltniJAktQWBX0brgj1r6o0fWdB/aM/Z81ays0hi12GyMTwrGqyRXCLmMjP8LMBznHNfNGjalHrWmw3ZXBcbGUdUPQj6V1fwrj0zS/iNo8t40trYzSG3ma2maIkSDaFJUjK7j09ua5I2pu1r3O6U09GfI+t+INQvLCXTmvrh9OjkaaKxyVUFureueepPH51xtvZ7uI49/wC8AckDdnr39v1r7j+Kfwr+Gvwz+KWpeH/FOnzQaDqkCXmnXsO/MJZiHXK5JwRnPoRXoHwZ/Yl8ERX1r4lN+2v6PIBLZRFQgcE8FiOvP0989ynWmpexhH3kdcsNSjBVLny1D+zrq/xA8L+GD4Z0i6nuoo2S4k2cEEZGT04P5V2nhH9kTxx4O8QRanqOlW8qpGyxq0ocgsuNwI6N2+lfpNp+k2ekWaW1nbx21tHgLHGm0CsrUtSt5XaMSh1jb95GM5P0+lXjMNWo07zqas5nOL+FWZ8Sah8R/FXwh1AWmmyyWR+zqr2t05I3A9RkEf8A6+1edfHbxN/w0B/YdzqM81rfabbtbnanBLEMXHvkV6Z+3RKP+Es8OWduvkmO1dxJnBfcQME+2O/rXzDH4wvdFL+bEt3bEsPLHBB65BzXDhudwtfYiWKV+WSNnw1Yapoc0ljqDDULVocLcHo3P3G6Zx9KS88P2t1I6OodHy3l9OasaL4ts9eQqkuy7xzbycN04we/4VpXVmVUsRx/te/Su27UrswkozPKte8Mz6NM06oz2fVpCBiP1B+vb8q6/wCGGkjVLW7tUKQ3Kv5kTSJ/rUZRuBz9OBXQaXexH7XY3kST2l5G0EqsvY//AF64a91TUPCt9NpayGzniTyxNj53jzwQff8ASqcuf3epxzSg9C/q4tbGWB9NBt7m3fzImVejA9cfh+Nfqv8ABH4hQfFj4W6F4hjZZJLq22XAVshZk+Vxn2YGvx48R67IlirZ8yeVjGHPrjPHYfXrX1f/AME2PjbBpesax8P9VusJqUpvtOMjf8tsYeNc92A349ye9e3gb0p67M1pzbWp+guuwRXeiahDIC0UlvKpCjkqUII+vNflRqnhcx3EwtIQ7iQuS/QDngetfrL94hTxkivzq+JQttM8d67axj7NHHfzqI1XhV3k/wAjXdjbc0WOr8J4p4F0ETLe3jfvk3lWt35O3rkepz+ldpq1r5cEUwwJ1BIPt3FYnh+3fT1nnhBbY7CW3Q8hcn5hWhd6xFNCPLGUb1GOPQCsIa7HlVJWZla1KbWF5FYOqjzOeO2K3/2M9Hl1v9oLT3PzRwQXNzKM8BQgQ/8AowcVwfjbUIzp7WysRJMNmRxtHWu2/Yz1aTQvj/oSMdsd55lmxPHDJu/LMaivJx2skaUdT9BbqN41msplB8s5jY9Mdq+b/wBqPwrP4ktfDsFvDLd3kF3IYolUt1Tv7dMV9SeItKktVScPvO8AjGD06/nXlcslxefEyTC4tLTT23kgkeYzDac/QH6Zr5bFv2dTXc7rOM0zkPg/8QvGnwp1TTNP8VQT3vhi7SNftDJk6exAAJI/gGMHPQHPQGqf7ang9brXtG1y2hWaO6h8smMZ3MpyPqSGH1xjvXsttH9omWO4j82B87kccHipLKxs9PktUvUjnsrQFra1f5wM54XPpS/tCVSl7B/eej7WN+aR+dV/otzp82yazmiZk3ok0ZXK+oz1/CszU7xdJt2klOGB+QcHOR+dfbXxw8MzfFa+s7HTdPt4dRtxi2xhS2T90ntwM1594P8A2TpdO8WJqHjIxv8AY9rW+nRsHRs/xsR16V0wrN3vrYzlGMn7RHjfwz/Zi1r4kKmp69LJoelyAMoIImmHXKgjgY9a+kfBXwN8CeDfswtdDt551Kg3V4BITg9Tn+leqW/2aW82hjAmwpJnogxxt54rPm0mK/lUadKz246SSLUyqSvfoc06rvZC/wBl+G7eYfYtNtVkjcD7R5QH/AgQK14/iFqOn3CR27ieGNsfvuQ4+vXjpWElg8cjJFH522PJbsvvT5tPhjuHh3i42sELRngnrgU6dSpHWDsZ+0lezPUNB+IFlqMnlXBWynPCs7fI3/AvXnoa0LHT5I7jVZoyYZZZwVK4OQFG0V5OtnJdfuVtyzCTcckZOBj/ADmsD4gfEPxd8J9FbUtNQ6jpdqo82zlG50yeoPoK9qjjpRj+9WxvTqNnt2uSPcTWEjhEa3nR2XPBJ44B7c1zXx2+Gtz8SPCcVtZjN9aziWIE7cggq2SfY1l/BTxhdfGjwfp/im68u2ilnZjbRrllaM7cFvqK9gP3SDnGMc5Pr6134aEcXGftNE9jfmcXc+Hrf9lfxZq0YR7FbIRgx7pZQN2TnIGcn617f4D/AGZ/Bfw90xbvxAtrql2oHmXV+VWKNvVc4x6ZPNR/HT9rbwn8HYZrKKT+2/EAHy2FuwIQ/wDTQ5wOvTv+dfnx8WP2kvHXxg1xf7Z1J49EWQJFpdodsADMBlh/ER79QO1c0aVGk7xfNYL8z7H6Ga3+0Boul6ff6Z4CsbfWLjTY9uEPk2yNk/KuPvDIz8uB2Jr8vfjh8WvGHxY8WXU/irVri7ktZnjgtiQkVsc8hFXjHH3jkjOMmvon4f2skTWqabKIIp71YmugNqIqrnafXn8Oa+UviDI198QvEU/krDuvpk8tX3quGIOD3Bxn+prSlVnVqWei7HRWpwp013Od8ndCkojIJGeRgke/rx61JbwGWRieKsqhkj+Vvl5HI5pyosS5PBr0fI8x36ssWtmkMO5htXOT71DeMJExH8wyPu8fXpUU1wZYQu/vjFOhYBtxHC8jH06GsKiuh36H6s/s869Nr/wl8J3A8lYodOjDRsSPMIQDI+oGTXo/9l6fqGnnzrvNzINzBWxy3QHPUCvm/wDY/wBUi1D9n+xuJL2OG4sxJbRw9WIVzk+2c8V7ppeiuunW9xBI080iv+79AO9fDYhPncWjajK2jO38C6HDDZw3DMXnXdlWwQCP/rYpnxWm0jTdCj1LVy3kWzgLtHJLHbj9M/hVvw/fQ6bZWlvJnzpW+dumCR1Pp2ry39rrxQul+BdLtVjaVrq73jBwNqKc/qwr6rDypRwHs38zSW9z8gjGsmfnZh0r2L9nLwn4A8Tap4mtPiGwTS7PSmv4D5pSQyIx3IhBBLbSuB36V45DIFmjY/MM5KrTdQlV5oiUMm0h1IYjB69ua9mUHONkZxlyu9itcCOC8mFu0q2vzGNZPvBSxKhs85AwDTbgmFgemVzgU2SZpoyH5boW7miZVlhBZ8Oo21sk+WxjJ8zuQuxZipXK9T7VFlvlDHABz160u35T1Jzg4NJt+4MZ5wauz6kastXMcjwRXIViHBPynpUdnZzX2pW9rbRtPc3UoijRQNxJOOAT6+9dX4T8B6v4y8I+I9T0aD7Z/YaJPc26HLrE27LBRkn7rducH0rsfgv4as9NtdQ8XazPFZJaQyG1jmUMzMBkSKecFeRgeprlnU6I7aeGlJpvY6TwL4of9mHWL2JzaXery2il/Myyo/JVcgdCMjOMjqK8L8WeJpfGnijU9fuo1hn1GVp5IYiSiseuD6HH41B4k1G68Q69dXtxO11LIfmmlYksMn15HB4weKrWsP2mdI2OW6Z6n606NLkfMwxFdzfItkNVgJM7vwNON8Y2OemewqzqlgNNuhGJTKGGTuBAFUROYgzLFuzxium3c4bmtpv79Z02n5k3ZAznBPGBzms4MrKACsg/vehzgZrvPgBomj+LPjL4Y0DXdyaLqt0LSc79pUujhMEHKnzNo/H2qL46/DlfhP8AF/xR4Tjl+0waXemCFmPPlvEkyZ9fllB9sGsOZ83KdLpt0vaXOXsVVrctjcTx1OCM5qTy5GVlAAKn5SKZaWl3DYwXM0e21nyUbPUDvTZt8MilcsMdBV6bkq9kThTDCSqqsjDBbNa2la1dafoN7a25H+kKFeQn5o8d1/z3rn1keSRUOV/3uK0LJdySKTgEfN9MUNJoTs9DJsUl/tje8skh5PLHOc+xrsZtltZ7EXDyDhSen/16yNBtv9K88/u1U/N71Z1e4MKlyVLLwAx7VnyrZArbGJq13ukKeYVAbawXv9ayLhAJCcjcOOvH4VPcKqqLgAiOZiTnocdfyqtJIGyPTgcc11U7dBSHx7odhDc4JxV7StWWz1S3nkUOqOGIboTWZyrEEHGc07BDKNpPeqlYheZ1enaTeeJdSmttKhMsqnzQuONuPX61gzLJbzyQ3kclvdQsySROuCGXg5B9On1/Otvw78RNV8ImMWEcccqbiLhxnG7qMDr+NZviTxHdeLNYn1LUEiS6mAMjRKQHIGAT74AHHpWGppLltoamg6xdWek3VpFOUsL4p9ohQDbLt+6TkZ46VLLH505G5ihOd3c1g6TMRdLCNzLjdz24zXVWtxFFCJHTaOCR6c4rGVyr6F+GLdaNuUgngNjvivpj9hOSC+13XLO32DxAYmjs2uFxGI8AuMjnJOO3IA6kGvny11KPyo125Tdu59xX01+wpdaZpfxB1u41CEeX9m3Jc9oGBB+8OmQeM9MH1rysV7yUZHoYWnGV7nkn7V1x4zb4jzaV4qWS1Wy2+RbQHcjgk4fOMseD26civFbq1FxGNhYMP9W8bdD14xx27jtzX2hd+GZP2xvjtrCyulna6eDarNCCM26OwDYz1PTPTHavnz9oD4Rn4MfFDVPD0TySWMe2SGS4B8wqw+7x1HcHj3rLDVd4taFV8OqaTT1aPev2V/24n0W4sPCHxEmL2zgW1prUzfMqbT8kvYAADB9TXyz8YfEtn46+LfijVrDdNp093JBbyPxuiQhVYexIOD6Vy99AjSMkke4EYwwBHqalt4VgVdqggcY7dMV6kYcrPK9n73MW7i4mu/3sztM4VUG7qFAwB9KrEeYOuexpLmQQqwQMEx1HaqEFwyk8kg9/WtlqjROxq6XrV94b1a11XTJjFe2b7o2B5PI+U+xx+g781+pf7Nf7Q2j/ABH8H2l7BdKNQgjdLm0YhXJAzk578V+VkK+bGS4+XBxnknBzjH9a6X4JeNx4P8ZXMctytrp+oIIHuJW4gkByrYB6nPJ9ODXFiItrnpuzRjO+6P08+IXiy7vbCWVEjuI7m2Zlcc7JN3Cn1xXxh+1Vqxfw94ZtZZEkuZLuSaQM3zLhGGCM9CWHFe3a78UoLbSYrG2uIbm5srZrwy8GOVccHIOACe/rXxB8SfGl3448YXGp3JLSlyQkZyinIwFH0FeJhaU5VueRyRvKephxZjkjCHCq3NZ91Gbi8l3fNH/d+gq/gtsIBHc/lTIbXy2kZiCXbP6Yr6a/KdspcqFAZ40VssF6Y7CvWP2ZfhinxK+I0SXSldHsCtxdSsAVLA/KrZ9cfkK8udflADBS3HJx3r7j/ZR8Ew+FfhLa37RYvtaf7ZK7DnYOIx7fLg/ia8fG1eWLRyXdrnt2panEqta2xC2UIVYo04BA44riviJ4xm8C/Bbxp4rikEV0tsdNs2AB2zTyCJGwQc4Zu/vniumWIXuoQ2+0Iu7eW6dBkAV8+/tteIk0fwX4L8I2rMkl/dyardR5wAqDagbPbc+R7rXkYOPtK6fQiMHKSbPke3SKyt4rdBsjjQIi5JwoGB+OK+5/+Ce/x5sLXSLrwDrF7HbTxytPprTPtEqn76DnqDk49DXwq7JIxBBx0zTVYQzRyQO8U0Tb0kjbBRh3BHPNfR16LqJST1R6Sly6H6UftsfH6y8L+A7jwlpd8o1fVFMFwsTYeKEg5OT0zgDnt3FfngjPPIohbYgz+BxjI96pfbb3WL64v7+5udRv5fvXFw+9mxwMmtK0j8lFG3nOSc5Nc0KTpNubu2ROrZHoXwO/tTTfin4bu/DyiTWYLkNbo7YD8NvVvQFdwzg9vSv0W8XWw/ca3api1vkBlVf+WU2ACD9Rn8Qa/OH4Ma8fDvxc8KX+eEvkQ7umHBQ/+hfpX2r4R+NOmQ/G7xN8OfEEqpYapKg0+QnhZTGCy9flz26cj8a86rKU5unLqYuXtNGdh4A8ULoOvPLIxawmYQPn3+6cfWvTfGGmWwtVO1kc/clVRjPua8m1zR101dU0u5BS4ifdC6fxcDByfavTfh5q/wDwmHg9rG6bN/ZAQybhz0yrfUitsE+a9CW62Elpys+XP2uvhrH45+HF4/kebq+mr9rtHj6vt+8gPqy5Ar8/I2E1pHhvMGMjHIPuPav108UaS1nDNb3tv51vKCGVhkp1GQPxr8u/iZ4Sbwb8RPEmiPGYxa3jNGoxgRv84Ax7N+GMV1YWpyzcGhUk1LlOn/Zb8PSa18b9Aijj88xT+fhu+0E/lxX6z6fCtpZhHfCnnk4256ivzg/YAtY5vjl+8K+bHaXBXjjO3/Cv0g1DTJ7iJUjOxc5Ye1fOY11Z4iTirn0jqJ0oUuiOd+JXhvTfGHhW806+CSwXS+WOh2nqGHuD/KvLf2f/ABJqPw01ofDfxEGmspXZtEv2IMbDjMI4GB1Ye5YcDbn2LWtAsWSPeWBjyQqNg56A/nXO694Ht/EWjtGYxDqNiy3Nncd45Rkrg+mRg+ucYNcKnPDVVOOjJlZ07LU9Lt9ThhZ45XAwflyecntVyaOG6jeKTa6uCGGOoxivPPC/iC28caEuqorQzqxgu7aQfvIJ04dSB7g+xBHrXRw6kV8oMpTYNjc5/H8q+wo5leCUldHnSjZ2Pib9pr4YQ/D/AMfF7KGSHSNQTzIG2/KJM/OmfxrxN5o7O4Zm5VeoX1Ffon8XPh9a/FHwzdaY0m2cnzLZnOdsmOq+nSvz08ReH73QdSvdN1CFory3DiRHU5BX1wO4ri9rebRwVbx1Rc8M+KoLW8lySI7hRlSOjA4GPwrt1kiuE8y3kJVTnjO4ep9c14PDdbXKg5cnkjjb6V0GjeOLzQ54zKxubdTkq3Ue+fT2rWdPnXu7mca0pWTPo39pLXNP8XfBXwV4x1GPN3o969hcSLtMhJXAx2GWCt6n9K8k0/8Abg8deGfh/Z+F/Dum2OkNZn5NSkZppHXJO3yyAqAcc5bIOMLXX+GtPm+LHh3VfA9uyRjW44723EuNsU8Lbw2PUgYJFcH8TP2Q/G3w9tIbyaGO8tJn2O9s+7y2PQMvbgk8fpWVPERpzc5rXuetT5p2R9d/sc/HrxB8cPCuvp4lktXv9Mkjg3wx+W7KwPLDPqCAfY16/dW7LfZaM74l3Nj+Id6+Rf2I/hX4w+HPjq+1DU7F49B1S0e2eZJk2eYrB0kZM5yPmUdcFzX2p5PnSxytiZguVePgEen0zXJi74mmtXobVaPLLU+Yf2wfh0ni/wAPweI7NWkuNKXy51UZdomzz74PNfC2qabMlsEcmUK2d2M1+uuvWtjqGj3thPDHLBdRGGRAB/ECK/O74yfD+fwD4qvdKmhCxK2Y2xxJGejD2HTvzWGFqOjPkb3PNrw6o+dZo3juA6StDLAwYMvGz3xXS+HPifLptmLPXBJdLuwl5nLr3Ib1HfNWdS02N4VEcQ8w8P2yvauT1LT1WMgxZGclWGR/+vNe4vf3OSMmj1C72OY9Q0+dbq1k+bzIm3KWB6fX2rK+JOsadrEmjpFxqMKOJxjkoTxn3z615zoGpXOhmSO2vGjgk4e1kBaPJ6nb2+o/GvbPg78HfDPxC0C91/xD4vj0yCFRDPBt2y2krMBHvZuMEYPpz2rnnBU2qhrdVDwDWLyS6viv+rgjGwK3HPdhmn6Fr9/4O8QaZr+kzeTqOm3KXUAzgFlydpPYHkde9fUuqfsP6ZrEYm8MePbG7TByZVDFfU/Kwyfyr5quPBV5aSTwO6ukc0kPmx5ZW2uVPXryDzXrUcTCpDl2Y7KOx+xHwR+NFl8XvhbpviW2VTcTIqzW6MPllzjB9OSfwFfHvx6tV8P/ABY8RxTyxvNJOtwCDhfnUHAHtkj8K87/AGQ/ifN8LvEd14fupALLUPntGb+GUdVI9/vD3z2wK3v2ltUF18VheRzrdm4tkfzGU8Y44J69Otc9TFc81CfQwq1NOU4fRtWFnq12hLR75CFY8qRk5H9c1BfTJDNLghwW459BmsWG8E95dCPHmxybiq/dYYxUOpXZW3fIxK6FRt7Z710+0cdjitfUxtbvBqGpJIhJjVNoOeGOeuK9U/ZU0O41742eHI4uRFK0zMOqhUJ59s45968lnthDMkZBA25/LrX1t/wT78LLN451nWWDKlpZCJPlyS0jjIz7BB+dceIvUSXc6aMeaR9peINQjHhO4ubn7qR7pNvXg8/5968u+Hck8uk6ldX1r9n1DUbjzGZjyIOiAD0x/M113xGmL2cOkRuH86RpZcf88wen41nJbxf2lMiNgAKiIO/y5FfLZpW/etLoehezLsduxhBLsxHBH09KhurFGaJ/4s445BB4xW1p6qvyddxwfYVdv9LUR74o92OcHoMV5MYylHm7Fqm5I8W+KniKb4deGZfEls6RX9jMBGsoxvBOCMdSRkkVzPwZ8QeMPjHqWq65cagJ9Mg/0WO6IA86QHLKgA4UZIrj/i5ovib4/eMte0i2b+z7PRQLlLd8jzgPl3AY+Y5yR7Y9a+h/hP4K0T4SfC+ys7S62WfkmeWeZ8jzG5Y89BnP/wBavYwvJVfKnpuenRw8VStPdnH69qWn/aDa2t+xnUstxG5+YOpwVb3rd0dXhuLSGORZrO8jKMqkHDHo31Br5X8dXRuvG2r3thdvMJLlgrwudrtgcjt+P4dat6T8WfE3he+K20qSDYAFK/LnjoO2cVvGKbPIr0XTnofXmj2r6Xq0EE21ArkOeMY56n9ajstBN5DPLGsiyFiY+MAr3Y14R4Q/act4Z/seuWDRwsQFk+820+56nj/PWvcPCvxb8M61cW8EepLHFNHtBZ8Y56H3rtp4eMrWZhvubuh6wgmdZ4EiCR7YBywY+/Wui1fwlH4g0ma0vYYJ4JlZDGVwFBGPlqxb+G7K80+JCBICuUcHqD0I/Crml202lKYHk820Ujy34DJnnafUe9e5Rw3MuWa0OmPu6nyl8IPi/wCGf2dvEPjHwF4pvW0+2tb5rywlmQbDC4GVwOmCO/WvP/j1/wAFC59UtbrR/h1bmBJAYm1i5GJBnj92nbjoT27Vw/8AwUC+xS/HJkhRTKtjEJh2LZPJHpXy3cQxocRIFOME4rCjCXL7Pm91ClUa1Og8N+NotL1LXLvW7CTxC2qWTwb3kUvFIxJL/MenIyeq4wO9cjDqE9tDGpkMkixqm88EsB94Dsc1aXT5JWwi7+4Hb8c1G1s7biybQvLMccDOD3rq92GkTDmk3c6DX/i54h8QaPaaQJxYafbN5g+xgrI7bcEs2e+T0rkIwqKqouF6AE84q3a2gZm272GP7hx9OlK1ttc7E2sp5DcVVOcL2TRpKU5LUEj22sszn7ozxVT7QTGAxPzcitLy2axuAy4Yo2PTFZtiu6QAL5hA+VRySa2bUd9BbsaoLPjZnLY9/rWkY1t7VAFLvyMnrmoY4ZYf3rKVByAcHp/n3q5aWnnWsNzdJILaVsoWBG9eScdyPf0/DMqSl8LLsfUv7DviIS+Htd0grvkt7kXEb45IcDIPsMZ9s193eD7G4a8hVQYkh6so4C44HPrX5mfss+MBpfxkuLaG1MNvrFs1ukS/wkFSuPfJP51+i0GsahpukwR3EF1a3aKiyKy4zjOD/wDWr5HEctLE889jOnGSk2epXotreGSS4VREpG5ivfsawviB4J0Xxl4bS31BB5UbCSKbGTGSeSPr0/E1e0nXrTxNp4gORJsAkVhxnufzFbM1ml7avbso2HA2jpwc9q+hpwp1otU0mmd3M9z8GYybfHGHHA46etRX1j5e6dSoV22gE8k+1PSPY4Duc4/irf8ACd14dkvTZeLnkj0N4mJuoHdXt5BgqxK8leMdD16Yr1+YwONWMbXfDDdUcKhWw0mEfg5/Srk1vC10scTMkEku2NnIJALELuxxnGM44pNS0uXS9QubO5aMyQybDs5A4z/KtFLQXLcux+AdXn0f+07eS0aPa37sS/vCAfT1rnI281lZWwq43cY7V654X8eaL4V8Dxtf6G1/qLK7FpFLp1IXAPAHvjNeOQMZmeJjhmZiGxjknJxVRM2uV3Ppj9jnx5o/w00zxr4h19maxe0SyNuBuaXcTwFPUDcfb5j6143448bxa7LHp+mW4sNHtMiK2ByoxkAntnH4Vz0mpGKxgsl3eREc9eCc9aojG4jzOo9Ov5VzRw/vczZ2zxUvZKEQ27Y9qD5Dzinw3UlpIZohuk7jFRDG3liB9KXlv93GK7LWPPRLcXU09wWmYn0B6UzdmTlCwHY0MflyeuMikZjNzk8HGBQD1Dz5bWaCaCV7aeOZJY5YztZGUgqwI7gqCPpXReNdc1LxRr91q2t38mpalebXnupAA8qqgUbiB1wAM+1c3gbdp6+/NampKr2NjK2c+UIz7881lOOuhcZStyvYvvrAutF02xO4myWTLepJqJl/eDBJHXOeaoafKTIyk/Igz0q825sbeARUpWNNbFe8ys8chyVBB3VdtYpLo7I8F5DtGD9T/Kql0u5VQ5ODnA6GvQvgn8P734peLtO0axgJe4cK+0HKRt1Y1z16yowb6mtKn7SVihceF9T0vw3Z6xJp0o0aeZraO/UbkMoPzLx39jXKa15lwf3ab4dw3+q5HX6V+hP7avh3w/4B/Zmt/Dlq1vD/AGbLDKkeMu8oIHAHOSc/hX52aLrht7iZbuMzQXI2vG3RT2IqKE5SV2VXiqT5Ud98CoNF8UQ6/wCCNZKRvq0Jn0y8bG6K5jXO1SepwAwA9Hz2z5fqGlXmi6pcadeKlvc27iOVRyNw64P61evLK60trHWLVJBaeeGhul/hkRs7TjjPHAPJ6e1P8Uaxc+Jb6XUptpu5vml2LtViQATjt0rt+1dHNJamUdxzkfN70sOWkGWGO1FuCwPOcDnvinKFEgK53jp6VrcgkYHcw6f1p3ltJyxwOoFPmQNIRnHaoUBVQACT2BPWsXuUtSe1bbcbs4bG0f7Vdpawm40u4CjJkkWPbjJGV4rz/wCdrhCpBAI2r3HOM/nXc6fcedoNyUYrIrxybuhzn/CokzQjsFubJnjkLGbGCPX6V6B8GfjRrfwa8TX2p2FpbanDfWptLm0vnKRSD+E7lBKkEnnBzk5B4xy29pPD/wBpRd0kjESv1ZcdMelZCu6RsqvtDr1z+v1rmlFTWqN4TdN3R9a/sG+Mbfwj8btcs9Rm2rqNkzxtj5VwwZeB0GHA/wDrc1vf8FErizX4geHNQhhyLmxMDyAHLYcEE+4z+VfHnhvxZrPgzxJp+vaLefZtVtf9XI3zLgjBUg9QRxg/hg816H8Xf2gp/jV4e8O2up2gh1zTS4muVwiSAgjKqCTjpnOCCOM1x+ymvcW1zeVSM1fqcnovhGTxjqlpp9tKkdxdP5aM3C5255/AH/PNUvEXhe78Iapf6ZfLHFdWblGVWyrf7QOOhznHX9cV9P16Swure7hma3lt5BLG3Qhh24/z26Vs694wj8S6497IhlkuADJv6GQgbvr9f/r122cXY5LnD3UkjMPNAdvbtUO3byV9Pve9dJLbQyyOYkw3Vgx6V0Hwz8BxfEDx7ovhua+bTY9Sm8j7UqK7RkqzAqGBBOVxz2PrT5uVGdtSH4R+IPDXhHxGs/jbRBrej3S7JIVJDwfN99RwSfavspf2Q/hP8YvD8WueCL97ZJEJjkgkLrnurK3IOe3FfFPirw7J4V8Xa94euJFnl0m9ktJZYxhJNuACB2OCOO3vVrwP8QPEnw1uGl8Na1d6QHO5ooH/AHbHuSp4/SvOr03K8jzpzkmfSXjv9h3xf4b8DX83hrxCdTleJll07ZsFxF1ZAc5zntmvjv7LJZtLFcRSW93AzLLDOCHjYHGGHrX2h8H/ANvG8064s9P8fQLLZKyqdStVOY16bnXJyPcZx3xXzN8YtQtPG3xc8V6/pVzG+mX96ZYZI1+WZQAN6+3AHT3ow14vua0587OOhXzFVQDhemKnjhbzArEqD/FUs1q+neXBKGim2eY2R6/5zSW+ZE53MQeK7ZSuOUtbFyy0ibVNUtNMjQNNeyJBEeOCxClv1/Sv0n0aOOzsbWySPakEKRqiDAGABj9K+IP2Z9BTxJ8XrOacM8elwyXqqVGCwG0DHf72ce1fajSPHFuLESO4CnPWvl8dU9/lMZyaWhstJLb3Hlqg39Dxzjof5V8JftJeNH+IXxg1q9juBPp+mINPt+OpT7zYP+129q+wfiB4yj+HfhPVNfmkVZbPTpZI4n6yzYIUKO5z+uK/PaUuyvvO+4mZpmY9WkYli31JJNdeX0eX32VRvJ3KK43qVOV5BUfTrTOPs4ZgVbrxjOKkjWSeNol3FwMnI75Oea9o+HP7Pd14m+GfivxtfQym0sLORtPhUbfOlCklj6qCMV7NStGi7M7vhVzyuzzDBuYfeAwBVuE7pAAf3fGWqPzC2ACDuGVxU1layXTFI16g5x29/wBKwco8vMcV3Jmj4Zuo4/FmgFxlV1CDJx0HmLk/pXRfFjU/+Ei+LXie+gkIAvsQSI5BARVwQeoOf/rYrkGtZbW4VgGBUhlZef4jzT1Z2ZpGctLIcsT/AD/GsJQjL3i7OL1P0F+A3xXT45/Dm8s7sxy+MtGt1iuQy7WuYv8AlnLj146jjP1wO08A+IJNJ8VQ3k58uK+IhlUcDHRW/A/1r80vCvxa1L4O+NtH8SaNIBf2kxZ4mbCzRHiSKTHVGA/AqCQcCv0F0fx14f8Aix4FsvFfhrL2WoPunXzBvsZ/44XAJwwP5H6jONWnKm1XW6/IvazPaPGljIpJA83zQRvbgKvoDX5r/tjaEdN+LUOoeUsY1C1QAofvbGIY/XkV+lGm6g3i7wNaTgebcJ+6mUDBDj5c4/DP0INfBn7e+m22m+KvDT2iYZleGVc5y+AePbiuip/FhJbM1j8aZzn7C+oHT/2gdHAAP2lZrdhjsUOf5V+prWvmfe+7X5Gfsp62vhz4/eELh5FWBr4JL67GVwPx3Mtfrw2WA557mu/B0acpTUlfU76ysoszdS0O2uwxbKSEbQ4PT8K5XUtJubeztwr5Il3NKvBUAmu8ZAyvnkMCKyb5Vm+VMmMKUPp9K4c2wVNQcoqxVGpJSV9jxnW72D4TeNo/ELFl8Ma8622q84jt7jGEnPTCkcMRwOpr1O6nNqyXCsskSgHdjAZT0/SsC88Mw+JfD+q6LfIZbW4VkPOCvPVT2PQ14v8ACr4pRfD/AMWP8IPFl4iT5MWk3TMMFCMpF+Q4Htg4wK+Tw9SVP3LbnXVpc8HNPWJ7tM8ck0U0RZ4W+b5vrkj868Q/aD+DafEC1vNasFEWuQpl/KA/fqo4/wCBY4+le16TGZre7sG4kiO5GXoeucfp+dVbyNWs59x2TeQ7jHAK4JyTU1vaaSgzyJ6rU/LOw01ryOaRMI0chSQNxhhxtP40JC9rdQrcoxTzQsigfeGen1I7VjaXJqK+LLu902GW4gine5u44UZ8wbySxAB45HJ6V6VqGnWOs6k/lXKIfLVreU8B8jOGz0Pb1r6KOkVY55U1ozqdO16+8M61p/iXw9KCbZt9v5KnZwCpjI/E8V9r2usajqHh2yv9UiXUbO4t1m/cn5V3LggD06j1r84J/EGoaLp9zZW6GSa6UlIWYgxnPLjHf0969t+DX7adt4R8K2PhbxZoV7LPYgxQX9iwKumRtDKxyCAffIHvXNiKLkrp2OqTduZaHqOvaL4y8S+OItN8GNqWhaVdRsLtnYbFfHVc5yvT364r6J+F+h+IPC3gKC08UXkd9qcBfM8XI2bvkGcDJA9q8b8F/Ea/+ImoG90PQ9RsLARMy3kxCHceAB7dcjqK9g8J6hc6pZi2v9cg1C42uGjSMIwOMfN0ztya58BUpwlJTbcnt2OyVWrVpKMi5DqGlzz3U87qjWw81s8YXH6//XrxL9rrwfD4r8L2Gp2MbTahar5vC8m3YjcT7L1PYda7f4ra9p/wq8JDUL4C51SZykKqBl22/dxnpj1ryLwd+1V4IsfAutav4t1iH+0tQmayGir80kcQBCnHZCOc9M+9QoSlJUpKz7ilGLp3bPlTVLUpGgaDhT8m4c49K47XNP2xlh8qZJ5HFdT4j8W295qEs2nwslhPMZYVfhlTHAIPT6V0fwFt/B3xA8WHRvEe6G8Vme2YyYWc5yVYeo7CuvnlShz2PAkuWV+h5V4S+Geq+PtYWzsbGTy3cLLeMp8uIZAJY9Me3eu0+JHw1k+C1/BYf2xDe6fq8TKVg+XzFQglZYxhTycjA4z2Oc/akukafp9iND0fT4LW3B2/uUUKcHOcjvx1r5I/bT0+TTZvDr3cK+fcNKY5U6hUAyCMc9ua5cPiZ4msoPRHRTtJaHhkulS2redpt3PbSdcQzsB19QfbpU+n6k9lZN9uvPMKHiOQZcknn65NY+gm4uPtbxzA+VGHZScnHTp15Oa076+jjnPyJJEMAErnn619MqXK7GyRoWt9JdLFLAHtrmFwUwuDnjBB9a9L8efEG08YeGvCjzpIniKz8yC9g2FAFxkMAeoyBznivHrOa2u1eRVeJlb+E5xjvV+7uL68jgVrzz/JBCZABwcE9Otcs6UefmOScFJm/b6gsfmSStscv8o/ix2zSw+beXW4IXboT2ArmFadSpnR9o6Mev4mvR/BNvF4g0pb22OyNXMcjMMfMBkit4q7MJpxWhj6lY7tQWHO5vL2jPYnn+VfoV+yX4Wh+HfwCi1u+QRXOoB76Vuh25wg/ID8c18VeHvBEniX4hWOioxkluJYoTtyeCeT7ADJPsufXH6A/brDUrWPw1pDg6NoirFNKo+SSVBxHye3Uj14rhr1lT5pP5ep04dFfRZL3Xrk3FyPNurz7sYHESfwgfQc/nWxcW8VhrUE0TGW2AEDy9Ar+v8Agagsbt9CuFaVN093HthI6oCevt/9ar+nbJ47nT1QNFIh3kfwv/Cc18fK07pvV6npRtFWZuWPkSBym0kHAf1+lXoJ5G+aQ5DdhWLod48ipZmH/SYspO3QKBwD9TXU2IgEJkdlGCR8xGM5xXXgaE68lBOxtblR5XrPh+203xdp2rkNa3TXnlow48yNjtKEdwR+uPauQ8afs+eIvGnihrO98RyWfgSINKIEZfNKklmTGNvDcZbgLjvzUnxyi1PWfjb4E0GC9/s2xUSXYmPCs+GY55GSAhA7DfntXQeOvFht7XUX8a27WPg2Sz4eNxiTPXdg56YP0PtWkaMcPOUZJ6PodlOc4rRnkHirTfh9qV7H8PPhtbw6r4ltIZL+51CN2k3LEVDxeZk73YuOBwMHPOM+N3WjzRtJ5/yzZO5TwQQcYwcYx6f14r6J8CfCHwb4M8cad4o8NzPHIp82OMzlo7iNkZf5PkZ7gGtzx58JdO+IHiC51YiTTRMV3JEV5bbgt6c4H8+pzXZGV3zRVvI8ypUUrpu58lNZNfN5W3mNSY8LnEnQfhg1LpurRxWPl3FvI88PyyMoxtP4YweK9o1L9ne9jnkl0jUluJlbd5E6ge2A34V5L440q78G6rbC/sZbB2Ux3JYYDEkBXB6GuulUjJ2sefzNnb/D/wCMl/4T1uylh1q5udGAxcK027yl65APcZHHpX03r3iTxLqegzRaHqsX22SJmhmaNHSTIyOnHtxXwHdTRfbs2E/7pgQzgHBB5/p+tfTv7MvxATWrWTwlfSrHqViqzWDKQDLGW5HJOduR6dQKyxdSvTXuzdi4tt2Pif40Wviq48cXmseKbKeO9kna0MkiHYGjUnYvPI289/ciuDmiLbFxnuTn9c1+hv7YnwjHijwhpd9FcqkdrdGWe42E7Qw2lyo5OAT715/4J/4J/wBxqmljVNS8TxFZE81BbxAq64J5PcEDrx1rTC4z3LNe8jaVGW1z5Bs7FriSKGDczt8oUcs5zgBR3r3v4O/si+JviFcRT6taPoemeUZZJbhCXdOxVT9PcHORX1x8O/2YfD3wmgi1mztI9VmUrK/2ld0mNuMJnj8xXrWl+IZZmngWyDyAnK52gKeQD7CtXVc5fvNC/ZJHA+Bf2Y/h9pvg1dCm8L293AVCm7uowZpSed27qK8c+NX7AOn3FvLqPgp3EnJbT5doOPWNscnnvX2LZ3Fz5Sb7MQYGCgI4+laKuCm4DBJGQfzr2KODpTg1s+5pzSjp0PxdufhL4guPEUXh2HTLiLWJX+ziBuCHPUnvgeuPwr7Y/Zx/Ye8N+GII7/xVaLr2oKuWS5QeSrddoXuRnvX0Nreh6JqHiKXVo9NhOtQj7OlwUBcAN1Hvknnriuz0W3ittMXy38xeSZM53nua8yn7TE1XCpK8V+JHu83uo/Lf9tTwv4d8J/EyPTdJtLe2dbXbdrbqFUuzNzgfxBcV4bZwal8SvFmgaC95HBHNLBp6zzR5htomcAswGM4BJ7ZOASByO8+NDf2x8QvENzPK07y302ZJDuOA7AAn0AAr3r9jf4A3HizxLpPifUNEistC0c5VpQWN7NjGeew4PHGQBTw9ZUYKK1ZVvePCPEvg+7/Z9+KiT6fPcXC6PfrLYahNCoFyqYy2FAU5Yke4Ffox4K+J83jy20zUWtYLf7fBGySMxZEUDOAcc5Jz+leA/wDBRK6tLrV/Dtp+7EtrbM3Cjcu51GDxxwvT3Jryr4C/tRR/DjQ7Xw/rez7Jpc4MNw8RkZoi5YxhRkkjoOOlceJp1MRrF9QTSlY/RLTdTtNFmkhmhSKYthmjGABnGTXZ213HcRJJG4aI87lIOa+KPg/+2l4d+IvijXNN1ezk09L/AFBptMuZ9vyRFVSNXOevynj/AGhX0jYyT2NxbATOYl3FUVjtGR6A89a2w2JeDbp2LnJXsj8YLq1SSTPzZBOFplxGYrXcq7nUEFVPOOhzjt0/zxXe/FH4Xz/C7xXqOlXCMIEnLWsxbh4iSVxk84GAfeszwHZ6Pq3jrw9pviiSe18O3d15V9NbzGF4kKMFfePujftyRjjvX0sJqUboicHF2Zwmn20d0xWOQQzbwI4MZLnPAXHGe31rofip4Tm8L+MHsbqV5ppLG2u5Ay7GjMgZQp9xsxz1rU8X+BdE8K2F1qdn4jh1C2i1J4tMKKvnTokpWOQdjgBWJA2nBI4IFW/jl8T7H4uan4c1u1ga2vbfSvsepb4whMwK4IPAYAF+egzxRFtsdkkcpbalE/hK+0y9ikmgmKtFcRnmKQfdNc9a2YtAjyYkkByPbC1o2WsfYoLyCWMbJ1U7T2YcgiqkdjdX2kzahAqvDCxEv7wB199vXb710JGDsZzfKpDHPOKhzIz4QYPbHpUskiyJuHSoBJIBw/yjpgf1rWOhm9diVjIMAvx/eNCsG6HJqNW8xSwOB6Ck85Yslhz7VRC3sS8ryfTFKdzZ5yM59Khec7VI4BPpT+dpakVboJ0zg4P06VeS5efQ5A53eXNleP4cf41SWEgErgY65PWtXQ4xdfaouDtAY/7tSwS7FTS2LvL2AbBPrWkvzEHcMDrWfbsBJJt+VN33e9aEFq0nO7Ax1HIrJ3uaXGn97MsOGAYkKw96+pf2Nfit4V+B2oajPrp23V8Fgs2KFgF6tkjgDPr6V816PpwjujcSJ5oX7rZxj9as386mRNp2E9ck5z2PHFctaPtdDanNwloeo/tffGwfFjxvHbadL5uj6c+9Jk53zMMtx0wowB7nHavngTLtG35dzfd9OK6u9hjntPJACgEY9h6f5+tY97oE1rH55KMrHACdq2o2grMitLmndnZfBXWtLvb9/BniRli0PWpViaaQ8RSniN8n7vOBn1C9aq/EX4R698IfGU3hzWg0ok+ezu0ULHeRcfMuT1GQCDyD1wCCeCuLN432MBlf4j09ea+lfhv47h/aN8M2Xw08YXccPiSz+fQNel5beq4ETnI35GQc8sAw681FSTpvm6HZQhDEL2bep8431m1hM0ZLRMDtKAY49welR2rS+YD5mVXkj1GOldx8XPC+veEPF1zpXiTTG03UbePY/wAp2ToOBKjEAMpxwfXg4PFcSPmXKdj1HeuinNTRx1aUqMmpLY2tFsI9WuChkEZIyC3r6Vc0PwTL4g1p9Nt7qOK52sYVJ/1jD+Ee5ql4YsZdUvhZQjdPcSpGoXgglgo/U16P4l8I+Kv2WfG8B1SDT7u9u7V3sJ93mQsoIDsQcbWBYZGepGCecc9S7fLEiJU+LXwh034U+C/Dtxd6gz+KdSVpZrEfdWPGcnJyCpIHHUt6ZNcpaXjWujzQrh2uApypyBjtWnD4yv8AxV46sfEPib/ibW0Lt5kXlg+ZGVYKoB4OCwP4U3xJNHeajLPBpsWl2rHCWsahQAOM4HAJ9uKmN0rSZV9RPC+qJb3E8M+I4pcDzCc/PjC59sVHqEZ00vbOchR/Dzkeo9qwZImYlSGVTwSCMkVrz6wLqwsLSaP9/CCizKcl17A/hWlh2H/Z/Nw/CbuT3GfWmquCzbvvHPXin/N9xnxj+HsBSSnyU3MuBio1voIjlVdhZjhQejdD71XjuCedw2jhfWmXUqJtO7g9AKpzP0YfezwfatrX3GaVnq7CV2LHuCSRzWjYatNDPDdW0zwXVtIkkcsJw6MuCGB5wQRkVy7YXgk/kKfE7LyjFcjaTnFDpqwHZ3WrTa9q1/qd9KZtTvpmmuJmGN7nHJxx2FRSW8tuu5mDLnsaydNuFmhZeWYHBbNX/LcoELMA3PJrllDU8+d+YvWEgaSSQniJcnPTHQcVVKyWqpIEJeNhJ9SORj37fhTbiN4IwyNiIuqFvatS6jJVhu/iHQ9OOtcs2lsZq8Xc9dH7N/j/AOJkNr4y0fRo4bDVLaGe2jWUDcuwbXUHsR+dcF4g+D/jHw20yX+h39uIm8tz5DbVPbOOgxX1n+xr+0hpupeF9M+H2tXC6dq2lxiDTpWbCXEa/dUH+8BgY9B+FfXHijxt4V0Pw7LqGv3FnbWsn7ubztpJbHII6n8O1ccZT1fPZeZ0xcZLXc/O/wDZB8L3MOq+JdWuT5E8NqkUCyKQTliXC+/Ar6ja6s5NMks1Rhfptn3EfdKnkfj6fjWL4b8caP458TH+x9PisNJtT8k8Ue03L4PTHbpwaq+JvG2leHWvdW1D/RoYCm9B12bgrA+pIxj6ivBnJ1p2vrcwk0z58/a98T315q2j+HWimg05EF4GcY86TBXCnuBnP418/wAPnBXEoXcoJGDgdODn0r3X9sn4t6F8Tvi7aW3hx4p9I0TTltVuoSAksrsHZR/ugAVh/s9/CaX4peMo4riLdo9q6yXbdmGflQ9sH/Ir3vaRwdFt6nTSjyxL/wAB/wBmHXfizcR3zO+k6Hkl7q4jYM4x0A6Edhiv0C07wzpvhfwrp3haztB/ZMcHkKAMjpg59c5JpdNsItBt7fTrWIWdlFF5aQjAwAMDGOKg1bVhb7cynCvxk9CBXzUsXOrO7IqTbVkfmP420OHw14117SkBUWt/KsS46LuOB+Vdh+zrPp1h8bPCj6pH59hJqEavEybgxYFU+Xv85Wr37SGgTaV8XtRuZEATUgt5D6FTxn8x+RrgfD+pT6Hr2m6hanbdW08c0XzDh1IZfpyBXv0Zc1JXHh/daZ9hftlfs622izN4x8P2i29ncOFvraCEKkcpOPM4AwHOAe2cdzk/It1ZxYYt0VS27pX65aW2m/FL4b2ks8a3Wm61YI7IwBDLImT/AI/Wvzc+Nvwb1D4fp4oieRXGmShY9w2meOQgK47Y5GccZzXfXp+xlGS+GR6Xs/aR80fMWv3YvrzzOSqnAO7qP5en5CvT/wBlj44P8G/iIbHUpVfwd4gItdSjdiFgc/LHcHHGF+6c9vZa8n1FfJlKbSoVQSvU5ziqM9pvVyfu/wAXfdkAY969HkUkziktLH7UfCe4GlarfaI8gngmjWaKUnKufb6jn8K+LP2/18nXNCLElWvpiG+6ThRnP4/zp37Ff7SSTW1n4R8S3bDVtJVW0y6mbJuIF4MRPcoPxIx1xWF/wUS8RRX/AMWNN06CZJI0g+27Q2CGcAA49wpFeeqdlGD+ywW6PFvhRrEGl/FDw7eTMI4ob6B3kPAADg5PoMA/lX7WWtwlxaxyofkkUOD7HB/rX4MtcNb3EMikoQTkpww9ee38vrX61/sffHeD4x/C+zW5uBJr+mItteqVCl8D92+AMcrjOBgH0rroVFha7ctpHpyXtKKtuj3Z7wLeLBj70bO30BA/r+lRxxoPM4wCxz6Z9f1/SqVxK7QyXCkLNkmMt/dB5GffFfN37RH7YWn/AAxt5NJ8PSx6j4jY/wABDpbjP8fvXDi8cnNRkrocKMpK8Tr/AI1ftBaJ8GNF1B7l0n1tyfsunn/lp6Egc49+a/M3x1461Txh4ivNdvbh5NSuJDN5gOGiIOUAI6EdvTFWfHfjrV/iPrl5res3RvLu4OWVuAvsB2HtnFcoYixLA5JOTk9cfWuDD4RO86nyFiKyV4Qeh+hX7KH7TFv8UtGj0fWrhYvFunqEdWODdx54kHqcDkV3H7S3xW0v4Y+D9UuGuYzq01u0MFoW5lLjAwBzj3HSvzD0q+1DQNYstU0ieSx1K1lWSC4iPzKcdhnketdD4o8Va9481o6j4j1KbUtTlAQZchQCMYCg4A9eBzU1cNCGqPOgp1HyoTwR451H4e3lzqOmyILuW2e2fzOdqMVJYA8bgVBBI5x3r2P4c32mftBW82nCGDw38QLcb4o48i21JQASR/dkJyNo575IIJ9G+BP7BMmtQ6f4g8Zy/Z7GQeeumx8SSIV43OMbM56DkAde1e0RfsZ+B9J8TLq2m3sulPbgzQ21vIB5R2/K4YkkYPOenPvSk5+zvCJ6MaMEtZanzCf2aPGeoaXq3ime1EEWnqTKJ2KO+wYIUYwcdscfyrv/AIR/sv6dH9k1nxP5l5qExV4rIcLHzkKR69znua+kNU1aTxNo6aZKwghtyoljiY5nxggnB+6epU9zWXdaXdXGZku/KmjCiPsoweM49u9cD55aczaOKvWtokddH4c1G3tY4YClnCo2xpAcBQB0Fcu3wtNjrJ1KKe8kvXLF1RyAcjqQP6Vf0PxBOL1rfVi+/oJVOd30HY12CxxmRX0+8ZpXwCko+9z7ito4WlP347ozVSTWh458RvAcHxQa0fW7u6H2NDFBsO0IOCenU5A614H4k/YzmmupJfD+tRyGRWYLeAfe9N2M8+vv+NfXPiCzF3qAScNb3GdrMp+Qk9Diua1fTZ9HmaN5gu3gNyOD6f5/KueftIyvv5nNOpNdT86fGfhDxH4Avns9ZsJ7N/uFyh2EeoOOT3HtXJ2rXWk61b6nZNJ59tKJRg+hzjjn1Ffo14t0Ow8XaTJZapBDfwvwVm2llz3BPf3r5F+LXwPu/hrcNe6cZL7QXOcgZe3z/Cx9K6aeJUl7Oexh7RVN0fVHw/8AiVpniLw/pGtWKNIkvl7o1PKkHDjGexr5c/4KBeMF174uafolvHti0mzy4HRnlIJBH0UH8a574RfGbVvg14ihuYbcavorPuuNMLgZyD80ZJwDk9+Pxrzn4keINY+I3jTXPFupQSRJqN40isqHZGp4jjDdMqgQYzk9a6MFhY0anMzso3jGxyMUY86NyTuHIYMf84Na/iS6ivLHTPsMaWrwq6yrEuFJzw2Ky4c87RncMhTUn2hrfK4+X+IYr6dW3Ld7jdFuTaSSKXO1kI5PfNb4kcRkp1xgZrnRbhYg79WO4e46Vt+HrSe4sftLcxB9mf61y14xSuYyj1NJtQSOMSu+0quHVeck962/Bniv+xZiu7zLeZszW/b/AHq5W8t1B3Hnt/8Aros4RZTK7HcM8DtXNHo0zLpqeuaJ8YLfwbql7q2jWr3estA8FszPhYA3G8dyRgHn+VfQ/wCx98UbbxJ4Tm8Kahe+XrFpM0jPI37y6V2JB9zk4r4kdUs9QDqTk/M3Tv26Vv6Fql94Z1S21XTJ2t7+1YSRyqcZ9j6iuHGYZVoWLpq2p+oOpw3M2pRFjkxRqqsoxsUVv6ViW1Xeqwvu8vf3fPOT+VeEfA39oSx+KWli0vnSx8QWqqk8bkKJwTgMv1IPHWvarqSa60VcMqmOTeWH93FfJ+xlTm+Y7ou7udlcfZtG0ubVNjudiuxIJYgcc/hVfS9dstQiuZAS1uhDjevb1/E1FoviHzrd5LhMrgKY85wO/Fc5c6TDoN5HM979l06fJt1IPc/cPr6jivSnU5YxqUVp19e51RakrGN+0vptrc/D9fFPlB59IPmF8AkQsBvz+h/CviT4pfF6X4zea3ibxNeQadb7XttNsogsCMVI75ZiDjknv2r9Ate8Jy+LPCPiDw/MyXFhqlnJCjKwBywIBb2r8fvEGl3mj+ILzSLgSR3lpO1tImTtDhipOPrz+FehTSxNRSeje4nNwVj7k/Zb8XWniz4W2elqFFz4dk+xyL13xtlkkxgeuPQYr3ex1gRzRw3OZLMMA23qo6ZGK+N/gjfeD/gV8QLWxbxWuuXOtbbG98hVWGPjchGPRiRyT19q+vfsPlTPt/eBVzuUg5Hr+NZVaLpy5keTVg4zudLcaXD9nkaGVViYEozPnBHSud8WeDdB8dac+l6lE0lvInleYwztbHDg/Wr+jXhs2WOOJXRlOUYZ98itxdJF1arLanzY5GGWXjbk421Nvaax3HA+IfiB8LtQ+H2pQafeyLPamIi1vI84ePJ4P+17VV8JeKj4H8XaTrNpHuls5d5YAnK4wwYdxg/1r68+JXha28QeHrrTb21MkTcR3GOYWA6g18WeJvD194U1afTL+FoHRsx+YMK6kcMM9vU1fOppwkLWEro/QXVLew17wgsFyEuYLi23lIyWB3LkHPpz1rQ+F2mrpHg+x0u4Pm3FgnkMWALbATsz9Ux7V5X+y/4kuPEnwtghlijL6eTZHk7miAypJz1rofiBrGqeAov+Ewg3T2mnhUv7JR80kGeW9Ny5yK87D1vqtdSa0Z6vN7SNz0pYJvtEcZUmJJcls5+UfdqLUvDf27Vmnila2uFRWWRRxuyQT/IfjS+DfG2i+PNHi1XRL2K9tGO0spxtbHKsOxHcV0YUEhunGPfH+RX29HCwxEXd3Rhc5+21q5tbyKxvbfymYbVmUja5xWtcXkNpGrSOBv8AlXH8Rxnj8KXUdPj1C3dJEByMA91z3B9apa9GjWcS7TjzEUKvYE44/CuqVOWGhJt37BfocfqmoLpS6heEiI3Ep8g4w2CMsfyroIZLqHQtkaqifZflOfmLMvX25riNdc694g8qLDxxnyYwDngH5j9K9UitU8pI+GKgAjucD6da+XwkamIqVHB2FB63PkDwz+xBFL4ik1XxXex3cbOZmtbfIVmLE4JPavqnSdPh03ToLK0jhtLaBAiQxcKqgYAAqC8vJY9TlshFvVEVzvf7yk8Ec8c8c46fSqur+KrDTYn8pTPddBHtOc+prk5YYZtTexq3d8x8P/tk+GdV8UfHE2dhbXF7NJZweXDCpZuh+YegyMFj6Yrm/Bf7EOpeJFlvfFGsLpJkUMlpbANIQD1bOQOO1fXt1C2reJDcTPH9pmAEkygfu41J4/Afqc1bia3jlcwlpSCfn9f8ivI+uzXMobXOLmdzzn4e/sl+APBpt7g2LX17EVlW4uWLtuHII9O35V7jawzyTZjDMAOOO1U9I1SDT7EzyIbi4OQsX9wD19z1rp11Syt7NmklztIMmwdWPOB7CuqNP20eaU7M3iup+Zn7RM914vuLNdRR7bU7EulxAx5jcDDbsdifTrXzrf2ZkWeN3BP3huXIwO3P6/Wvsf8Ab28FT+DviZDr0a4s9aj3qyDpMuA6n3I2kevNfJtyYnQqSpeVSPbNfaYdcqcex24mzfMjzmS1i2llyMqQ4Y/1/L64FNhmNvu2thsHoMCn3Ea7nVCURcg55qCNtzljyu4KPyr1orQ813LbZlYYG4ngM3erGmTSW0rOHKLIhjkVDw6+h9qoW825lBbJU5C96mWTM2CpUfw7f607AJdQgruHSqjK0ijaDw3OPStZrf7bbt5bfMnRccn29qotNtTzM4cLgjHYcfnSE11GsU4CjAx2qu8asrHYCT0PrUjErnI5/wBnpS/e4BGOxqkK+pBtLSFQpUYxuzVjhIkQNuAXFJuVjkHIpcZIAH0oeowDcg9fbFbHhuMSXU6ZCEwEk9z8xrH8vo2cDsa3vA9o2ra9aacknkteyrB5zc+XuIUHHpk8+1YVJcibNIaspaPpMupasscCTTFnKutvG0jqoPLbVBJUDuBxXd3mgx6G2oaek0d9tdWjeBg2RgHGfXn86+6/2Tf2YJfhB/bN74os7S51S4KC3uIWEieXjkAkeufzrN/aU/ZUsdUs73xZ4RWOx1GFXkntxwk+OT9DwfxrxPrrlPRaClU5ND4OSWKO3dB7nfnj8z/+qtHw5/ZV7Y3/AJ10n25RmGIsOV/vY966n4ZeB7P4hfETRtCuZktIryQly6hSSqlto5AyTxj371r/ABY+Etp8P/E+raXDDICCZ7SYsQAmASCOhAI+8Rmu1VotpLqdVOClFTPIZhErP82yPJO4fp+FZUmpLIdvnKVY9jV+8vEhto2PBkyGx6dia5xowv8ADjvXeloclSOps262MiutwcEnBbPt1rNhvH0XU0ubC5MVxC+YZ4ycqR91vTj6d6rlSwDNk54DDr+dG0ySSIOVHXFW6fMiYSdGSmuh+hvhO88Oft3fAsaJqktrp/xN0OHNtcrjcWwQGA4JRhwwxgHOPWvgTXtDv/CviHUNH1O3ktdQsbhori3kwGjYcEEDueox1GKseBfGuufDPxVYa94euzaX9m3mRN1UgfeVhxkN0PPQ8Yr0/wDaE+JGj/G640fx1Y266X4hnj+x6zpy5H7xVLLKpH3lIBXI55HI2muKnSlSnvoexWrQxFLmb1PHbS+udMu4bq0na3uoXWSOaPB2spyD9a3dU8Ua38UPFFtdeJNTuNUuWZIvNl+6sa5woXsM56dzmudnjMLbWIx1DdjWl4X2N4gh3nO5WGB6D+tdc4Llcjxr6HoBsY7W7EKJ5dtGuUC46/gBVrxBaxX2kqgXbLBIrIxOAV/iB9aVbU3mm+cGk+1QyrEFZSVYEdR+FQafo9xplxd2900yyu3zWdzGY3RdvQq3Occ/SvKvaW5PLyu7ZxmU8zZJlTwBxgfr7VZgtRcSIY1LMB8qDqeM5rsfhH4W0/xx8ULHw7qsR+y3TPF+5bYQcZGDj25Nen+JPg/YfC74iXtpO3m2EkSy2rH73ln7wOe4xW3tuh6MaPND2lzwYsApOfnzhs9ao387M6gOVUDBzzW34yuY21m6khjVY2YMo6cCsH/XYXqT19K6I7XZz6jY41c7wv5802aNWXOOBVr5UDfwgjFQSn92WUbvatNQ6FLhunPpSrj5tvQ9M02NnbgL83pUvlna2RtI6CtPUleZa0e52SBSh7B1X36Cumgt3vFJWQCNVyp9RnqK5nR4oZNStFvXMdk9xClxIp5SEyqJG9sIXOfavpP9pHwDovw9+KUmn6JYvZaLNZ29zCu0hC5UiQoT2+5ntuPvXm4qo4SRyVo295HjEMKpFt27h0ZT2OetLMo3gyhtp/u961JreCNuCJC47cYxVRo5GZ9nMfArhscnMVFtf3yTwl454mDpJEdrIRyCCOhB6V638JvEuj6xeXNl4zl1PVdQlUSWDNMWjVx1DAcgkfxHjAHNeYW0e7cqkgqPmxV3Rcw+ItPlDMgSVVbjrz0+h6Vw4mPNFnRQV5o/T7xB4L0vTNF8IJp1rFarjZtQfwsm4g+2RXyd+1RqWl2/gG/tJLpotcm1KKO2sOhlQSDzWY9gqZPPfA7ivrq81VJPg74e8TThlFhbxSzE8nYPlb/PtX52ftP/ANp3HxOj1i/AGk6vCLjT3PzL5YbDbuwOeo9COlc2HgvaxulY750W5XSPM7S1j8pRHtbJ5X1J/wAiv0X/AGdfANl8JfhTpr3I8vU9RYXF2zKAcHJC9OTjHWvhf4N+DZfGXxJ0TTURprRZxNcH0jXk8/gB+NfpW2nvfyQ2BZZIkTzIlHBGBgZz2xUZhPmnyROatLl91D3unu1lmU7od+Mk84xkVz1nY3Wsatc2bnNrG4eRx6H0+tUri6mtfPtlLxXBYKo+nBFPbVrixsnt47aa5ZSAZFBOSeeSO1eDs0csFrdniX7bPgW0sZfDmtQySFv+PR/RQcnBNfLjRpFcRkSkoykAk8dK+5viZ4Z1b4ieA77T5rDbtjM0TznOCp3Agdc5A618P3mnNJptxNMWt5drbVPA3Z5GPWvpMDLmjym0U+bmR+iv7DPxIg8WfCj+w5J1OpaE5iMQYBxC3zI2D2yWX/gNZ/7dngP+2Ph2muxR7jalbe5VRyY2YY4/3sD8a+Jf2Y/ixP8ACD4waZq1xIy6VMDa3o5wYnIyfYrw2fTPU4x+qvjXw/ZfEHwHqmkuRLZ6lZsiyLz95flZcdxwePw9K+jVsRhnSe8dj107SUkfh94gt1hv5Qv3c5VieuR0zjmsXB4DD6A9q7v4haBe6R4kv9Pu42W4tZnjkVQMhlJBXPtg1w029dysjfKN3TrV4eopU02c9ZWkRq0sc0csMrQSowKSofmQj7pB7YNb+r+ItY8XawNY13UZNU1R4Y7cTygKTEm7apCgDjceevrWJ5ZYKQCoxycdzyKtpamNl85pYm7LJGR+VaNxT5WTGEn7yG3spkkyDwPlK5rd+H/xG8T/AA51Y3vhnVJNMu3jeGTbgq8bYyOc46DpiuakwJTxkn06Vd0XTpdR1ACFPlX77nhVz71M4xnG0kaRk4u6Pb9b/az+KfizS1sbzXEhSNdguLeMJIVxjAK4x+Oa8z85riczSs080h+d2JY5Pcnrn61Svri20uQQRzfayo+bb0B7iiy1yOO8t90IZNwyhOM4PSuNYWF+aKNZVqkly30LLhlZApY+jevsa+g/gr+x54m+MHhu314XNvpulXLERyzklmAYqxCgcjI7kdRXhPivWLfS2zBBthmGUC9Ez1Gf6+9db4d/bL+KOhQ6Rpmn3VlaaJauoXS7SIxJIB2JyTyeT7ipq4eVTrZCpSVN6pN+Z1vxL+BEnwW8WNpfiK/kFu0PnWktsPluBuxxkZBHcdsj1q38MPDKeNNaa28P2DSNFnzbuRSNgx0z2yD0HJ61l/E74teJv2kvGWiS3ttbwzxJ9h0+xtdzEFyNxZz97JXOcDpX2h8LPh/p/wAOPDel+H9Jtkkv5fmuZepeU8kk98V49b3f3fQqpXUXeOjPTJfG88egW1oIGgijgRJZs5LAKAcemfWvKvGGnapcaXrF7psxivniy0UZbbJGvO3GeSQB9a7Lx+s2krBbMwT5vndT9/AyBVnw3Yo8MMpJe3dh5j+i9CfyNcFadStJQb2PP+sT5rI+M7P9rSXwJ42hlvF/tbTp9i6i0K4C84ygwMsBjgccV9qeG9WsPFGg22q6TcR6jpd7GJoLiBt4ZT246H2r8y/2gPALfD34veKNAeForaG8aS3HQGGQCQYPoN2PqK6f9mv9qHWPgBq62N3u1DwjdSq1xasMtb5zl4x/e46dMc9a9mnh0qSSKlHm1Z+k3h7RrPWrW8hlfEhOEx95QP4h3zmptB1w2cjafeTeZCzMq/LjGOCM9jx3p+pWNlqXhW41rSJyYbtEureSI9Qyjgc/jXGW9zFBDbSXbboeA3TJJOK87mnhaii1r+YVZckTQ8RTbbphG29QOFzkov1FM0nxtp2s3h0TXUjVmXyoL5fuk/3SfX9PXmuN8YfZ9LvJILGR7eRfm2yS5GcZB6151pXiQeINVltZSGltygnVRjqw49P/ANVYyrToyb3R5HtmpHqPivwq3hy5ferFZH+R+qkf4+1cvqlul5ZyW08Ynt5EIkhYdR6fWuzsdYkkX/hHdXk+2BiGtbmUEmJucKxySF4x1rntR0mXT7t4rgCKaMgeWv09fSuSpGPNzQ2CpG75onxX48+EM3h/x3Do2nfNBqLr9iLdgzY2emV9D25r6r+GP7Pun6D8MdT8JeK4ILyO/lM7GPLBHwMEE9xgHPWrtnY6XqHjbQJdYHkRWVz5gl5BU4IXn69favZvGmjzXDO8aN9rjUB1QH97FnIZeeCDwc+lTOrUUedapHqYf4T8zvi/8DpvhF4oms5l3abMfMsbr+GQH+En19q8la3Mlw+AAqnA5z9a/UjxR4F0z4qeE7rSNYjjljkIKybTvgOMBlJ7ivzo+LHgG++F/irU/D8ys8kcm6KcjaJIcnD84/H0+nNe/luOVRclTc6ZU5ON0jh5IZdSkgsoF3NO620QXqWY4GPxr3/xl8J7z4T3VvompnzrExD7PdxxlUkyPmHfkHr7EHvXLfsr+CT4r+O3ha2uYhJDFK9xIjDK7Y43bn05A/Gv0Y8feB9N8aw3Wj6naC+t5BkMB80TY6gjp+Fc+aY90qkYROWzPzU1LR4I2mZSGAG71yO1ZEEarKCQrDofavRvG3g268E+MdQ0Ro3kWzkZVcg8x5ytZGteH1VhcRDa2BuTGN3HJH412Ua/PBSJscZeWkkeoxFsGNjkY/WtJYdo4b5cY5p80ySbSwCsue3Re/61aFqZE+U9ea6+a6uwt0CG3uY5oZ7WZrW5jfcs0RwyHsw9x29MmvqH4J/taPpEK6J43XMbAKuqRAs5O4Bdw59Tz0AHfrXzZZR4VR1IXFOvIVjt3ZjhF+b9K4qtGNXc3pyUHdn6baD4gsdWs5NR0i8g1DTColSaJg38q05xD4m0qSyu5JFsrk5VlA3huzfn/Kvy38D/ABY8V/DiaWbQ9SkFpKMS2MhJjcA9hnivqz4f/tfaXqmnx2niGFtHneNWSZMlGYfw7hnH4+lec8PKk7LYr2yk7o+hfDP9teDvFD6bfus9o0eIGHCtGOjD0xjkf/qr87f2rNMTS/j94laPEa3cv2obTjAYDJHvuDc9K+6/Dfxs8P8AxSWTRrW7kv8AUrcLJbXNnGXYE8BuB90kgE4xz1r58+MPwh0zxh+0J/Ynie/cXV9pkey6tPlWO4ZW2KQfvdCehH0rOhUVCotfdOnWpHQ+Q9H06KbWdOjEm1WuApfoe5Gf8a/ST9lfx9ZfEjwjH4auplTxHoaeSS7Bjc2pztkHc4+77Y968B8D/sn6v4H+P/hHTvEFquqaDNcSP9pjUmKQC3mPIJJDbivWuV/tHWPgf8XdQ1HRLlrS60u/mt2jGSlxF5hJRvVSMZA9ByK9OWIjUqLszrWFVSm7bo+8pNBns9ZighGZ42zhRkD3+mKoeF9Yl0vV547xhPa+YVbuEOeuK6b4V/EfQfi9oMPiHSZNt0UEV1bNw8T/AN1h1+h/rxUV54dt7i8upJle3tvPO7HOw44/OsatB05qpDW55MqfK7o19W0m31FY54TI1pIu9lQFgcHqQa8R+P3w7/4SbwrJexwrJf6eS0cijDMmclffPpXsngfW/stwdNm3FGcGJv7v1+tdRrek2l9YPDOgWI/xADg9BW0sIqtP28HqWoqaPk/9jvUHsfFWsaYJPMgurZZ/LJySyHBx79OK+l/GPhUa54b1Ww2I63kDxSIwyCCpHSvGfhD8Mrrwn8ZtX1FY9mlpE5V243FyuAAPQgivo8sGTj17VyYfDwxNGXO9Ten7uh+UWkfELxP8JPE15BpeozWjW1xJHJas52tsYr3+mfxr7U/Z7/a10nx9p6aXr/8AxKtYhAQOwPlSDH97HB+tfFP7Vmny+G/jp4otTtO6cT5xxh0U5A7cHH1r079gvx/c6p4n/wCEN1DS7e+tViluUuhb72XDZ2sxyD147Vvhq1XCwUqX4icFKV0fokl7DcLE0LrIkoJVk5GAM9qwPFWpDS9Mmc7WeRgse7j/ADir2jR6fLGJbKNFWN2QhV2gEH5uO1ed/FfxJaWbSXN3MItOsYmkck/fPcD1J6Ae9epj8U54fnejfYzneKsjOt9f0vwjqmipJItzqGqXa21nHIOXc8yPwOipmvQfFHjSDw34i8M6W6s8us3MlsgBweIyxP1AH618tfCbw/4x+MHxg0zx7c2Ulh4b024Jt4rhtqxxqpAVVPLMS2SenX6D1P4l+EPE+u/Grw7qkKtFYafxaSQMCemZCc9+cYPbsa8vCVJYajzxje7NadJrRs9Y8UaskN1aWcfyzT8tMAQqrznB9TivOmkN9dTG2VSF3MsjE7U5wCfU12eoWq28ct3rbKyx4ChiCyJnhiR3zmsrR9POrs+oWqx+RI+6S0ThlXGAOOMkc1x5lGeLqubW3QXL71rnJ2WmpHO8cxMzsclz+tPW+fT1EaRKcMT8/uMVteLLc6Hpd7qciKtrboZW2H7qgZP5VyGn+JvD3iq5thpuvWd80g+6JPnU+/p+NfPyozT5bHHV/dm5p900NxHdLyQdxTsSOBWxYtdXzThVaTc2WwOh61o6b4Pa7tbXzdsahjv2kfdxnr7mumsfDosWYBpPLxndn+I9fwr1MPluIqWdh003qfJ//BRLQNRl8HWepTRwy2Md0vlTKnzxEjGCDkYOevtX58TruvIgw/cI2Qx+lfcv7SH7W3h3xpoukeHptLdbS78z+0YbgjHlshC7CP4g2COlfC8a+TaiOU+aUXkhup6cV9pRknVm4XaZ61Zfu0pbo4W8kZZrhQAV3MQvrUO3dyRtUcAD1q5rCbNYnVVCRlgQPTI5qtH33cZHIr10eUyMfKx+Rd3rViEKrZ3NtI5z2qFlTahznnAFKrFffnmqEXbebyZAxJZiwOM9cdql16w+yLa3YQxQ3PRm+6WzyR7VnSMcZzhuoxXdeB5LfxVot34T1FkhluctZXEgDFJcZAAz0I7Z5NZbF6PQ4RmDKjDgkY200cKQVDbu56j6VJqFjdaTeTWN5F5NzbOUkjJ6EdeSBxjnp3FR8+nNaIlqw0AxrzySetO+ZRweO/rTfMLtyOlOBOGbpgdaGidyWyjjvLmKOZzFG74Y13+g28Njq9hdJGoWJ0YP0OQSc/kfx4rzZQY2Rix3L/Ev1r07TVSWGymgbzYsLkkdeP8AP0rgxl/Zuwr6n7CeDblb7w3pF9IF8iS1i86NuSRtADY9RV/4h6fEvgW8ECidTG+MYO4bT+dV/hha+d8O9AJiWVGs4iPf5eTnufetILa/LpV5u+yThxEJsg7j1XPfqa8ajFctmtxyXutM/H/WLGWG5kkhkkieO5YxzQth43U5Vh7giut+MXxBl+IfhfRPEskv9neJNOB0/UoAw2XQKgpMuOeq/QZbPG3FT4m2D6B8QPEmiZVo7HUJYy2eCOox7AH9K4q7sBNDcBSfNkBxnHI4P+fXivQoxXKmzKhWlBKJyfiOaJ/DumnaDMu9XYDk88ZrmVYu3TJP92t26UNp5G0hw33WrCKmPp09utetHY6Zu7EU5UhieP4elINqkA8MTjI6fjS/cPTAPr1pm4MCCeR07VZla4+Rg3zYwW565+lTW7/6PsJ4B+Xj0/zn61VkUYHPHtV+xt3kABjY5GVAGc1MrJXFqMaItIF2sHILYPJx2/Om6ezjUIniDbwSoZR1yM8e/b6V1vh+zmtbXUrK7skmW6YFZC2XhYY2EY7eor6b/Z1/Y3Tx5ZjxF4maW00uRSLWNVKtKc8P7AdMY615mIxkaWj1ZqrWuaHwR8AaL4svtK1COaO50+xMU115abg8iY+RMjnLdfam/tSeBZV1uXxZFH5RnIjuYQ21hGBgMQe/QflX1/8ACn4NeHPhnoEul6TamctL5huZl3NuPTP5VW8afCo+LUliM0N1u5limjyH56fT/wCtXy1SpV5vaIyr6vmR+YPhO7l8P/ELSNZgm+wfZZxKHbhVUdQ3pnPTuBXtX7UHj6y8XW+gzi8tr/WIYTL9u01wYym4ZjfBOGzytcH8avhZq/wt8cXNnqGmTQadcSs1ozKTGF9NxGDgfjgVw1ituvEcawKwwcKFx14PFe7SqxmlI2jiXyWOc1K8F5fOeV3ABeP1qzDCIVUkbj3Nddp2i211ciOW3Ekm07cY9M1nXvhySNXlgYOM7TGeOfr0rvVZPclVF1OduMNuGMAVX3fwk/TFWZo/MlkXlCuC2ecc+1VzlD93BzXTGSa0NSsuYrpieCGC4PcZq1fGOGZ0Tt1z9M1T1BQJmmV23dQv41PcI87Qbgd8ydVGcEkDH1rS+gFB182N4nGFdSvXHBHP+f8A9de4fEX9p6++MGg+EofE+mi21jQbZ7d760bct8hCAOVHzKw25x0G5sda8Vkj27xne2O3bmlKsOQPlGDyAeR9fyrOpCNRdzOUFJWPSdNVdTsUvERlifIB6DHrV6SNLS0UMVG4g5zxge/SvPNP8T6hZ2awQT5hjyF8xc7c9Rz1qC8u7u9cvNcO4I52thfyHH6VySw6bbRg8PfY9BW/sWjfyWEwXr5X3m96ydS16KFrW6hgG0SDmTGWPX0qh4JjcXhcQ5gdChfONvGfxq54kksLdI5J4SxhyUiX1OOTXJUpRs1udNKjytNn6zfs5XFn4/8AgHpsVxAj2l1DJBMjciQHg5/Aj8q8quPg78PPH9m/g/XGzrPhkSiQSuUdIjISCD/FldpPYYqT/gnL4xTXvhXqmkl8S6dd4WLOcRkZB/lXz/8AtyaS+k/H7VZbWaaE3trBM5jkZN25SCDg9Dt5HevNrU4KjCb6aHoSbvKMTu/2T/AmlaH4s8c6to07X2ibxY6bdyj55YgdxbOPcV9A+ZJZyRT/AOrVHAZm6Be/58VyPwV8ETeCfhnoNq0TwMtqJJwSCXdhlifck16TFGNYWJ7iMRQKoEhC/wCsIOfyFfMVakpzbueK4c0tTlre1SbWFubiXY7PuVW4yD/F7Gunj0m3uLebZNuO0jK4yp7fnW+senNebxFHkKASUyD6YqG61LS9Dk8sxp5uM4UZODzz/SudRnu2a8kYmNMp0PTrrWr2ZBZWcDS3LSDaFUA5H5fhX5X+KrrU9c1zVdWg068TSLq7muIhFGzxLG0jEcqDjAPt0r79+NWk+LvjBpL6Ba30Ph3QG5nUZeW5wTgNg8L3x3I5z0rK+EfwhuvhrpN1YXF9Dq1vKDsUxH5M9W79+le5ha0adjSk4X1Pz2XUdysFBglj4CtjI6549c5ODX6YfsLfGWbxt8NR4e1Vz9u0gCOCRussHJUZ7lOn0x9a8j8Yfs33WtSTsltZTrKmHZI9kgOcgggdenJr1f8AZ6t7L4X+C4vC3iOzGjmK5eeHUt2xXkYkjLDGCOnPYDpXa8xcailE9SEacoaHyj+2F4dt9F+PXiGJUwlzNHdqO2XUA9PpXhF5aweYMtv2ncwYjpX1z+1Z8MNW+IniQeK/DLLr1urfYJvsvzNlMlZML1HPJHHFcd4f/Z18Tabof9szeFrrUDjzCsqkKrAcADvxVYfHQhGzVy5YVtp3PnWxje41WxtbOLz53lXy4Y1DbmDAgAd//wBdfQn7SfxAuvF3hTwzoviDwMvhXWrSUXEl26hRJGAVxFwCFYkFh09MjmqOl61P8PPG2ha4dNt53sXMpt5I9oDFcENx27Gvrb4lfDXw3+174O0fULTVP7L1e3hl+zx71Y84DK4HIXI6jnmoeKdSonE2jT5YOL2PzRn0m1eTauAp5QL/AI1YZBpmn/Z7dBF57HzXQ4ZsdK2fHfg3Vfhv4q1LRNZs5ILzTpvLdivyleMMCODkEdK5+8uY7qF2Vwr9cEgYPevcjWjO1meVOLizLGkGNCFYr35PT60h08JgsPmU9cVKt0dvA5PU561WutVFrHLNLl4442dlHUgA/h27mu6K6IS7nRXuvRan4XtNHn0qH7Rav8mobsvjvxj+tVfD1mlr9pIhSUsQVYjlCB0Un8as/EDwTrXw41LTLLWI4Y21KxW/tZoWJR0Y8jkZ3LkAjH8Qq34H0mTWrrSrWVPKivLyK3kk3YGxpAGYfRc8+tYVqipwM6ivsex/sjaB/bnxVtrtkx9hgeeJzgje2VBHrwWr768H6YJPEDAS4MALSz56A/w59T/LmvFvhvp9rp3jXWn0rQ4tMt4o4rS1MMOz7RGOkvTnv0+ua+g9F09YY7bTIZN7XLeZc4+/sHJDH3NfO4e1efM1rc4Y+9LU5T4iWEM0kDtkW9xMxgLc5wMZPfHWpvDcd14fvrC0vwBaSS4+0E5R16hc9B+PpVv42acWs7a4wUtoJkVXUdOPboOgq74B1GHVPD8FpqKR3tqwZQzDcV5xhvT6itHTi8U76MpxXOfIv/BSjwxFaeLPC/iK3HGoWclpIwxt3IwaP9C+a+KtRQTWsgcHZIv1+lfo1+2x4QfVPhXc27FribR3F3aMwyfJH3s+pAzX5331rLFNJDKrCWNR8jDBOe5479q9ejUTnJWOhPmR95fsT/G3Vrjweun69NPqVrDmGK5kQKIZIhwhIGNpXHv7Ec1q/F7416Xca5p2nwXCWEFxN5snz42pECzD8SMV8XfC/wCPniH4S+FfE+haRYWN3Zaw3mrJeMyyWlwYxF5qEfeO1V+XjkdRk54i31q+luInuppLgk7WlkJZj7nJP44rirYKcpXvoYV4zqKyPqD4nftJG8k8vRbSC5SaEq9x5jB0I6Gqv7Pfja78ReLtViuma7vr5N6MuPk8s5xjvkHj6c14XGB5I4XbjoOhrR+FPju9+G3xC0rxLa2n2uCwd0uLUYDyQsNrqMkDOCSOmSDWUsKpRae5zQw8WvM/RHVLiDUdFwyob1LlMMhJyuAS3PbPBqa7ujrWlATEHUbRihc/flT198GuXfWLLXrHT9V8PXS3Vvdp5lvJCNwZT2PoR0xWzHcQrE2owur3UCSXDxqckoP4cHuR0rxpLkk4krsUvEt1pmsaDbRIjf2jCm12j5yg45r2r4easvjDwVp963/H9bgwuxX7zLwffDD+dfPvjDVdKhctbP8AZxKqyoVb+Fhk5/HivSf2cNSkeTWNP3q0K+XcKQcHJBQj2GFH408NK1XklqmdmHn73KdP44shp6Q3kafZb2E/umjXIYDnyz7gnPvXzD+2N4Jt/FHgNfGK20cOpWkiAzRr87qx28+wr7V1zS11uxmhYDP8PH8Q5z9D0ryL4ieBbbUfCOq+GdRYyW06ZLYxtUjqPoawxFF4OtzR+E9unVstUfFX7Dqxr8dopyPNaPSbqXLdv9UPx6/rX6Ji6S10yCeMIXYAGQ/e/wDr18AfATwdqnwv/ausNKnBlguEuLeCZB8s0DxsysB7mMfiCPTP3PJMs8D2gbylR+Nw5H4+lcWY1rTTju0YRpyu+VHgn7VPg2CTUNM8S2dl+9uG+zXBVMgkj5Sa+dU8PT3MMyOm3yx1UglDnp7V95/E3TD4y8AXukW6+RN5W6Nz/fUcfQV8XPo2rR31ncWFrcPdxyFJkWIkNyOD6j2/Wu3A4hKNpM5K0OV2Z5x4n8Hm5Rbq0ikds7X8tQS7AccZ+97Vnx6Lf6WsVtfWU0NxjK+YhXcD0Iz+Ffevwg+DOk2M1j4l13yWnk5jtJMbY3LfKT2PI+vr6VxH7bPhyB7rQtWsIctskjl8hcnHHYd69P2ztdvQpwja6Z8h/ZjA24jIPpUt5bLNpVxtj3OiF8pycDrmrJk83IKMo7KyEZOM8cVY02R7aaSQKuVjc7TyG4Ax712e0WkkYPRHmi/6v5H3R98c8dK2NOZZtJgEsausJMRGO2cg/WvVde+EMHj3Q9O1LwlCsGoybf8ARVcLHMhGGA7Bweh9PzrnvBfwl1jUfFF74b1EDRblDhmmG5C3YAjrn26cZxnFbfWISWqOSNRN2R6R+w/rq6L8bRCqAJqEEltjA+XI38f9++vvX2P8VPg/pvxC0u41rT7dIfEllMZobpchpSmMoTjkEAY4ODivgLwLpep/C34w2C3qtDNa3ccXmKdpdHJTI9PvHrX6U/CXWEv9H1K381pJ7W+dHzycFVIPqevassPRpYyq6M0elTqOxwfgPxZd6p4j0m3uLh5kZcBJlG5MIemO+RivlX4+eF1s/jF4lMrK6z3TzrgDAWQ9D9CDX05faOvhX9o3SYkdhaakxuYVz8ilkk3IO3UZ47MK+ev2oLh7H4sapvQFSXUEj2DD9Gry3h503y9nY9mjP2evkeSeHfilqXwP8TrrOi3rQNIwD2n8FwucMpFfod8Dfjp4V+Onhl9S0aQJecC90+X/AFkMgxng8kDjkDuK/JnXr99a1qe5c7lJxGOoVR3pPBHjzW/hf40s/E3hq7Nnf2331QlUmjyMxuBjIOPr098+/TXs48r2PHr1k6nMj9hD4ejXT9TmcFbhHYK6nG3GDx+B/St3w3qX9saOof55Ix5bn1I6H8a8w+Av7RvhT9oDwwPsdzHY675Y+3aTK4EsbdCwGTlTjjvjrXf6TZjSbi4uFZhbrP5ZXPyhBwT+dVRiqbUY7ME1LYg1C3GlXzOp3+YC2TxyP51g/EL41aF8K/B9/rGuXsNvJHEXgtd6iS4bHCKD3Jqn+0t4ouvBHw1uvEenOq31pJGEMn3SHYK2R9DnjvXxZpfhS+/aw8YarrGv30mnvp4t0gEUeYEj35aMZJIOBnr1OTmvErKODrylfQd7M4238L+I/wBrH4o6z4ie2Gmafdzh7i8IPl26qqqqKcZZuOBjvX2/8G/hT4c+CnhXUJPDmlNd6xJbFpbiYjzZiBkKeMAE88flWp4D+Hlj4b0G1stKsls9KssLHCv35MYyxPc+5rpbm8i0ucSI4SLG1lk6Z/wrwK2Onz3itC4rl99nlf7Jfj3XvFnhPx/qGvyOb+PUnm+cEBMxcqB2xjH0rwb9qDxpruoX2iX6zlvDIf5BGeGuF++smPYED2zX1PYjRPDOj+IrHR4hFNqokkd+QGmdSCfpg14zoPwL3eDb7w1ruprqFjNtliZFPmWs4GAysfXvXX9Y9pCCk9EW6kObnOl+D/7V1hq/gqCzeGO0v7OHyVtoCGfdgbeOPlz3qf4geOvix4Xs4dQ0J4dasJAryNFH5zQk9tpGSue4/Kvnm8/Y98V6TMbrRdUtpZQCVaPdG5I6YPPX8q6n4f8AjD4kfB7UBD4k0W8udPjGZZok85QMY3dwP0rpliJcsUpOyPSo1KFRWa1Z7XffDX4m/EbRLW+8U6zbWFtNGrz2dopMyRnkpuGBn19K9M0vT206xsrm0fyZYo/K34BHHAz/AI0nwg+Ilx8QtBk1FIztikKEMeGOOgB6H+dbDa7bXsV/9it5HSBhheFBYfeGD06fj2r0JRg4qrB3bOGpQlGTijRtbiy8S209nd20TO2UuLdxkH169RzX5g/tBfDOf4b/ABK1LTA11YLJK01pIkrJ+6ZiVAb24r9HoZmZp7kxyWV60qyxmVcEjGD+HFcp8cPgnp/x78P2zI8drrVmu1ZJF3LhuSjDPI49eKzm3KPtLe8jH2Sl7s9j8/8AwX+0x8T/AIZxpHZeIptR0+M4+zX37w49mOSM/jX0h8JP+ChDmNbXxno7R7VOLq1csSevOe31xXh/xY/Zr8S/C7wr/bWrGOeFr1bP7OjZcZBIcsOAOAMe9eJrvNwyhsBeFU4zjvwevPrXoYetK3uNo8+pTdCVkyr4vvLq5vLfUJXklNwjKJm+78pzgVlWEdxqk3l2kEl5OcsIoo2eRsZJ2qoJPAzwPzp2r+I5NcsbK0kiEKWhJVl6NkY5FSeCfFF74J8XaXr9gImvLGTeEl5jcFWUhh1wVY9PrXtqLprQ7k+d+8crqGk3mo6hMLK0uLr5QV8iMyk9ycLk4Htkemax5GmjkljmjaGaIkSRyAqykdQV6gj3HHfFfbem/tQaJ4M+Gduvgbw/DY+IL65nmvre8HnmxkdyzBWOCVcklc8AEAgdB4h8VPje3jfwpeW+qeFtLTxRcTqja7HbIsjQDqpB58zqA3K4HIB4pUq05S5WjarSpxjdM8XjXrtHLcDP8NKMRqQDSI3lyAAY9ulJIwdPTtXonm6dB+WjYfdcnpUsm9SpGUkU7gUO1geoOR6Hn61U6NwNxz3PSrUbF2HIJxUySLXmdf4nvovHnhm31Mlm8U6dH5d4OP8AT4FztlPq655PcZHvXANJvZWVvlPSt+zma3lyj4kX72P4h059eKyNQiCzllbbGTkcUovWwPa5XG5s56ZwDU0JEqbT2GOKgPzscE+v4U+2+WP5TgZ4J71pLQzTJZFy2FGe/wD9aur8G3lzYQvGxf7DGudx5CHJJ2n6HvXN2VpJe3SQ28bSyPIPYHjpXoyWI0zS0sgOY+XbsTjG0+1cNZqceU1ij9ZfBPjTRvAvwb0TUrvVo4bGGyjcMGDxsNueD349DXxP+0N+1hrfxOv44dDeTQ9Lt3xHLDKQ8hB+8McivmhPiJ4g/sOPwsdVuLnw9bzGWLTZG3LG2Dwh67SD93O32q7HG7Q9HZtuNj5JFeY4aezvocdSUnK0i7NqLtI1zf73eZt0svO+TJzuPc8+tTT+Vcwl4Sp7g+uPer/g7wnP448RaRoAmWze+uFgEzDITgt+Rxj8qteNPAGr/C/xhfaBqqAsjboLiNSEnUqDuGegyfzB+tXGpGPu9UQo21SOK8caGkNrFqMCkW1whD4H8S8Ej8a854mUbmyQK9z1rT5NQ8F21vGnmRQySStlsY4OBntXhUY2tLvG1txLcdMn0r06Uro7WnZMNrNk5yMcdqRQ80iRojNI3RVGSa2NI8N3GtXH7rCQj70vYY+tdvpuk2mj2mIFWWZzuadhk7sYBHtWjqJbEOairdTk9N8E3EjA3pFujDcqt978fSups7WKzg2xBYhjaeOfrViHzLqSQyZIAJ5PWkW286PzATsRwGJ/ka5JSvucznzaM7T4If8ACP3HxU0GHxbOq6FJN8zSH5GYKSob0Ge/0FfprpstjfaC15pQjk0xh5dmlv8AcPOARjtmvyY1C3F5GJ/JMVtN90xr8hIxnn65/SveP2f/ANoy++GUltp2t3Nxc+H4ztjtYwxkTPdc4z/P04rxMRH3uc2pwlL3UfoQz/2fppihIJKr5x3ZIbPaqMt5FDKGtgxgLElurYPUfnVD4R+JtI+JOjwa5p83m2UkzIUlIDow/hYev86u+N/FGjeFRdapM8a2sbIqxAgGST+6o9T/AErz5ybjz7I6KlB04+8ziv2jvC+k+Kfgf4iPiBFs1t4Gl0+7ZQZYZwvyFc9j6dwa/MLSbFtWhVTCrXWMeSgy+7sq+tfqPqGpxfFb4dpJqkP2VNQuZLZY3wVjjwQrEdASR1riv2ff2RdM8M3kuv6tbi5u4ZCLOOTlQAfvkevoauNfmmqdJXZlCKk7s+efhf8Ase+MNdjtL7VJ49Gs22yJ5iEz7SPTPHHrXq+qfsoeEtOsWEv2q8lY5LI+w+/Tj3r6h1xpbdAQoQpxtxj2HFcncLLdfaGjTcqD94zdAD35rlxLlFWbd/wMK0raI+GPiZ+ytt0e41HwpI01zbFjJYXIALJ/st/e+vBr5l1KzuNNvZLS7gktruFtktvMhjdG64IbGOMfhzX6r32lRTSXLvtAIwyDkkduR/n2rw34+fs9L8S9Iup9PES+IbVQbWcKAZlAz5THuCc49DzXTgcfOm1Co9DKlXcfdkfBtwyCJH43HOFPB9a07C4jkj0+RQMwyYkfv1zn69qg1jRrvS7640/U7Z7PUrN9ktvKhDKQfQ+vb1HNN0+TBnhVR9wsNxAzjr9SK+tlJOPNc9ikue1kWPEiwRalMLdhIm8Nu6Ag89qzIo2utojQu2cbE5J+g6mvdPg9+yL44+LU0Fytr/Z2js3N7dAqpB6lV6t+FfQ954d+Cn7Jujz2up3Vv4j8XNbOohZfNYsV6iM5VOg684HWvMqYxr+GrntQy5WvVlZ9j488N/B/WvEUP2hxFp9mO8nLt6nGeB7mmv4NgsLx7aSSaZ4jteGYDcD9B2r7I+IHhXSdG1vR5rMxeRrenw3tq8XCyZQbhgcY6Hp3rzTxt4FtLq3mvbeMrdMdzofmLnuR/hXk0szlOfLPQ8vE0VDSLPKNF8Mi4RIIM27f3Y1ya0PEXwD1KPT0aPVY57gtuZZFwduOQB3Oe1bXh9pdFvUZk3SAcLjGc8flmu6ttWt7i1tZr50SfOSzHCnHfr1rfEV5RjzRNsOoOSUz0T9iHwj4s+DvxAex13S57PTtdsQYbjYTE7qQUww4HBPXnpxzVj9oLwbdfFb9ra00izQNGtvbJI7ZwqruZs8enH4ivrPwB4o0XxB4F0W6tZYp1aBAm0AsrgYIx6g8f41AdB0fQ/EV/wCJbXTgdVvIxE9z3wOgHp+FeRWrfu1Dmunq/I6ZclSbtG3QS38Py6ZbeTMNse8bY1P8AGMH0qRryCx2PO0cSAbD05X0wK8y8eat8RpNesbSyhtrLS59zHUJD5jbQOR7GtjS9HeOzCGeSV0XdvuGyzknkA1xw5ZfBHQ8vExVF7m9rHiF7iELYN5Vq3yhwBvJ+nasJrSVpGYnzJCASzHr6VetdJDKztIqso3GHPUfnU3lfY4wrp5gbOChrT2Tl7zPNfvblY2Xl22+X5QBgKeeaf8AbI7e3kiQKruV3D1x/KkvjJEo3Hemcn/CqcxCx7R1zmm/d0FsQyNJNMS3UcD3rVsfh7D440e7hvGkht2O1ZkbGRjkfT39azFgmvL6K1tx++k6c9B1J+gr0G1keOwSxtUaC3iiyGzy+Dz+BNRywk/f2OnD+7qeRap8NJvhLpHiHxPpOuy7dPtGlMUyLtmVQWCsSOnXmuu+Ffx4X4w+Hb+90DRLu2trIJA9xdso/elQWVQCcgAjnPBPOK5H9r7Xv+Ee+AOtYm8mS8aK1UDgsGcbl+mM18aeFf2srv4e/s96z4M0ZJrTxPqt8zw6gFCLDCyrvkB7kBMDg9R6V6WApe81HZnbLEOWjPs1dN8IfFjfeR21jqD6fObeSa2QB45FOSDjng5/Osa4+D6+E9cGs+D7o6LrULGSMTlnhfI24YHPy449sVwH7G+jr4R+F9n4hTUlvF1iUT3NoSCIskqN38W7g5Oexr2f4ufESL4f6PYalc6dcal5snkBbcgDBGcselcc4KLaT1Rk6s3pFnhGgz+I/GPx8ttA+IFjayreRzWkzRqEW7iwWU7s5IBHbBr0Lxb+wb4F1uORdPkn02XoCrb1HHB5zW7pV1p3iPTfDnjL7BLBPFK8iQMwYxYypXI9Qc9a9c0+5jbyLuKbz7ebkNknr6++aKc/fae5lKUup+SPxc+EGq/C3xtr2h7vt8enyqnnpwSrAMDj6H8/SvM5Y5Jlw2/a+coQPTAyK+7v2xPCs+n/ABWfVBA4sdStEPm7eC44IB/vcCvm/UvBkNxcLcwIsF1n5w6EIRivosNi0otSexjCpLmszm7/AMbt4j+Hdl4d1BZtT1PT3/0TUbyUv9ljJGYl53EYGOeg6GvWv2S/CMPjjxj4dtLhZJkQTT+WOTlDwMfXk14lc6Dc2szxzReVL1DYzu9CM/8A6q+3P+Cffwpv9Os7TxtdSwpZN9osok/5aM5cKSce4x7/AK1GNqQqQUYPdnpUoKd5PofU/iDTIdO8TWdzEY4oobLMSxr905IOPaqB8U/2Hb3GryRM15NhIFxwe2cVJ8T5JLHUrNpJFaGZWhUKMFMNuOfbnrWDdy/2xrNtDH80VqAqK448z1x+VckaijNwp6HkVnabsdFfWd9rvgHWn1aTzJ2UT4U8IEO/A/AVgeEfCct1arqHhvU9u3h4Zs+mSM4x0r0rT2spdNNmflMkZSSJj1YjBXB655rxvwjo2pWklymnap5MluzLJbhiG4JGQT34A+laVopTi5ahKWzIPHevDW4biw1OBobxSYpIHGQY+h+ua+F/2oZrOf4tX7WcSwQNZ26Mq4AVlBBHHfpX214w1aTUbqNdRi8m9jG1ZCMHH4dTxXxj+1ZoDaT400rW4lH2bVLVkKgdJYj0x6kH/wAd96eGl++3M6Ne0+U8NmuFjmwyhuoz047U9dnVflOMCqyqk0krNwznIXPK+1RzQtFgjdycjaMmvo5NJXZ6J0+l6hH5Pk7/AJkG7HoKl1fUvJtjJuETltp+UMWBHQCs6HQNS0tYZr2zmtkmUBHniZPMB54yP1/rV6GFbiCSG4UE4z15Hv7GvOlOEneLOZx5ZXPY/wBl/wCK0/hfVk8LahMltZ6jM0lhcMxBiuNoymem1x0H971zx9PQ3FrbxK6SCK78xkkkdsblPVcdwScdO1fBkf2c6ZezvJ5N5ZqslssZx827Cke4619IfD/4nnxdoFjrMsUYuYN0dzaliCZVT727gkMPmA6ZNeLi6SvzGVWKk7xR6T488L3N3IsWnagkb6fCiNbMoJkc5OBx1HpXpf7Lun3WlLrct0m+4it1VI1JLYLscH8QMV45H4ol8MaLpl/fXEECMXkeW4JLSN1zz3xjFex/sy+JF8awa9eQSiNYmjt5nUfM5GWGPThhj2rio+7NNIrDqMp6HtGizzW1iGdpHMe7Kt15Ocfzrm/iQztfWU4bNndR+XnGRvByBweM5PX0ru2gjV2OSitjO0bTu55/GsTxF4eXUNMuYi2A3MTDqsg5U/riujEU51KMoPXqen8J4tD4Hsda8dabqjmSPVNPl321wpxjnDIfbbx+JrurqaSCOZxH5z728xh/CxJ4+lY/heO71O8RIilvdo2x5n4xt5rrb3wlJDHNc3FwoiclmcNgHPP5mvnaWElX996o63ieSHunK3GoXt9HtiRjHt2MTkqO+T/hUEPh24sY3JC+UNshaFRkZ7cD71dDC0Vi4SwaRzJgfNypPoajutRuLfWD9qRRbsAWWI4Xb0z9a7lh4w3PGnJzlzMwbXQReXUuJRBEvIZzjr2HtVWPS7Rbh471v9UF8iZRuQE8Yx6dq09e1PTWvIvsAYRRczS8n2xj0FUbzXF1aOC3+yKhhBzIgwTg8Aip5YmWiehxXiH4VeHtRe4hudKtZZpUJ+0QAK4B5yMd68x8Sfs9iOO5k0m7JMkLqI5Rxu6AKemPrX0VqmvR3DSraWCIssYt2Rsbgx5DcfzrJZo1t3tnRmmZl+YD7pz3+taKTT0Y76nyp8P7PXfh7cTaPd201hL5gmSQDAwOu0jg88jH416Xcaqb7SBeX6eb9luY5llkHzNg9c/UDjpivVtY8M22o6aY7yPBX5lyMkHPUenFcX4s8H3y6FrCW8atAbJ5Ito43Lzgj1x0rpjOTfvHJOn73NE8F+KmsS65rD3NxAsVyS2WB+/0A/Dgd6+sf2aviY/iDVNU/te9trFLeOGyito3ADSMc7mOeWYnAzx1FfCeqa1d6p4ghs0DSRldu3v3Pf6V7n+zB8P9P8QeGNT1fVdQk07/AImCLE8jHH7tg2CD1JP5dsV0wqfVpRqLc+gwWGnODclbQ+v/AIraCx+IHw/8RNtW1028liuJ2JwiSRsAT6AsF5Prjjmvgb9qbxvD4t+KXie50ybEVvdCKIq339oClgeRgkE197W+o6t448W3unG2I8LSWQhm+0xkGYNn5484HfH618K/tHfBWb4U+K57UM95YXA861upF2lkJ+ZSe7Dv36Yzmu+eJ9tP2iVot/iaTThT5fI+epNygg8Dnt3J61Q8v5iTkYbjFdJq1ojMvlkYx909ayWs2ckYDY4Ir0Y2a2PEk2aXh24v/C91/bWi3c2mapbfPbzW7lOeuD6jrX2r8Hf+Cgdimm2On/EC1ksJkTD6vCrSLOw4GUUHBPfGfSvimSbyrG3tFXCxjazZz15pl9mGyhWZNyyqdu4D5qjlcdY6Bzbcp9jftQ/HjTfito/h7wp4Rv11QapMZWSEZ6MPLRh2Oecd8V7f8N/hhZfDXwjpmiW+zzXTz7uTu8hGWLH+7zxXyB+w78PYdW8a6p4tuLVTZaPHshZht/0hhkHgckKePc5r69udQkvpn3yMElzwWJ+XHTmvjcym51OXc9KM4U6Wq1Oo/wCEgltW8ywcKhXgy8KVBwCB61l3GqxzIqZa8nwT+8XhcnnHvVTTNNm1OfyY0aSNOr8bUHv+PpW5NJbaOotpoA8gUhCvUN71y06L5dXocEqspLUzrbT3uFQSzCAnhMoR9c1HDeJZsyEb2+9tfjd6fpVGa4nvJA8p5xgelSNul+ZiN3sK1svso5+YuNqH2QB/KV42/gx07j6cVz/jT4weH/h3phv9bvWtUYsY49m8tgZIAHt7Uahr1nFqg0tZlN1HCJpoc/MsZbAJ9s8fhXzt+2d4Tvfsmn+JrRGeymT7Nd5G5ImGNjAHoGGR9QK1pP30mddH3nc91/Z//ar8HeNNb1HTLZU0wtJlY5V8tnP97bjOPXAzmvTfjH4B1bX9BOqeD71tP1iMiby921LlcdG9COSOmTX4/f6dYaglzZ3c1tcxEeXPAxVhznOc19Efs6/tbeNPCXjSG216W+8Vx3bLbqjyl5Y+ckqDwfyPToetfT+yjSpOMlddPI9KnW95STPQpP2qPix4NvrjS9WtkuZ4h5bJcweTMDjOGHQHn0/nXsfgb9szw1rmmxWHiKObwZre1dly8fnW5z0YtjgEY+8AMEYNe1Xl94J8QadDqeo2tk0kyqzCWIGbpypwM8d+1cR8TvhL8NvGGozarqUK3d9cxLuEMxxtUcEKOhwAK86XtKK51NM65YijUXvLU8Y8QftreEPE0c3hzxPoTX+kTu0d1e2qs6FgSvmKoGSOM8cjNfF3ij+z4vEGpNo8jS6V9odrSW4X94Yicjjt1xg88V9/S/s5fDPVpo4rfR7aWXKhlEh3v/tH6CsnW/2SPAV/iMWVxZANnMUhI47c8UqeJcWnY8SpOM29T84LRQ0aqybpMgKR9ccUyaB47rfMkij72XXGQDjr6j6+lXryF9N1qdFyxt7gHGcDKsCRk9MjvX0pr1t4Q+KHge1u4Y4/LwWNxH8rW8g4dWA5I46HjjvX1LrbM7VTWp4F4C1AWurS2UhG66/1ZY9x97HfdVz4seHmurOK9ik/0iNgBboSPMx1HGDnB49a43VFufD2oJNG4FxbTKYyuCcZ+8PfHpXrGq/vtHM0Y8xWiEiMRyc98nvQ3ytSRLXNofPRb5uB3xyP5VJbKskiJnLMdo4712fibwek/mahpoVASDPbpxgk9QK5C08yG7RpF2PD/wAs8c56ZrvjO6OWS5WXWhit1ZmAYYx0rNVpWc+SjOGO0ADk56VoPcLIrNJggnAFdf4B+KNr8PPDviC0j0iK+1m/Ux2t3OVCW6FcHjOc5y3y9cgHpmlck46GNoWYniRvlIP8PrUrWf2hSCAV7CqyXq3LO0vmGcksePvE9f1qzBcFQB/A3JHf8KNlcu19DJuFFqzA/KM7Rng/5/z602OH9yix8luQF5JPp9enTsa+ivhbqXwr8c33hHSPiDbW+kpbrNbXmqkiBJYypMIkYc5z3PTsQOKw/il8H/D/AIL+IUlp4X1qLXvB9xGt1ZXSSLI4BJDQuw6suBhjyQ3fGTj7ZvRmsqUbcyZzfgnRhYWP9oTuVnuAdm8bQiZ5+jZqPWNYMxki3bmLc+oNaOrXSWWmyRKdj4CxjHHHb8q5vR7d7maS5C+YiHaM/TrWPxXbMpS5I3Z7H4K8I+Grr4AeLdY1OJRrdtdAabdhgJhJhR5YH8Slicr07mub8P2YmlCOrCTO1I0+9I2OFHue1cwbm4s4USdnWzR/OMan5cjgnHr7/wA67hbdPKguQzBJV81dpwevb6cY+lczi0mkebzXd2ew+GP2dfGXhPxbpt9qGnr5AaG8E0cmQqBwSO3Q8kV9ZftLfs62Xxa8BrqNlH5Wv2Fv5ttJjlhtyVJ9CfT9OtfJUP7U3jOTTdI0fUJYLiOEpbm4CnzWjyDtLZ5JHHSv0n8M6guseF9PulCss9sjEA5HIFZYamqlWcZnpRtKndH5Lw28Fr4NkE6D7WtyTNDIcMF7jB7Zzz7V4P8A8IlJP4kvUhkYWMM5InZSMqeR1r2T44W19qHxs8VWWhwyTwy6hJCLeBThyCM9umcnGR1Ndr4K/ZH8a+JtNhlu/J0eGRl3fahvkJ6k4B5pLFRoJR6l1Ki9lY8XhgW3jEMClEH/AAEsat3WkXdpNBDc2dxaySLmNJkKMwJ4IBHNdl8VvhXofw1uU0628Wrr2p7h58UcQVI1PUsex7Yz25r6KuviT8Gvit8KdOs77UV0nxhawKUl1BWUidRggS9GBxng/hUVMTJu8EctCMKjvNngGofs9+O7fTbG7udINrb3bDyfNYb3yOuDkY9+PpWQvgE6XN9mu7ndcxuEuLWMfdY9DnuPpX1T4c+KC/Gj4O6/o2s3yWl9pOUi1CJOURchZODznGMj8q+PIfE2p6bdXTLdu9xu2yyMAS2Pr0/CqpSnPRnXN0acrWOnvtFa3tHsA0b2cZ8xY5P+WR9sVhXGsXD6hBqEsUCS2vLMOFbB43cCsfUfEl9eDfvUuS0hfpnPUE59K5a+1691W3CSOrJnLbR976nuK29n3I9tBO8Ue4eB/wBqK++HOqaraw2813o+oxkva2LgfvQMBtxxx6j/APVXGa18VvFfiq+TVNV1O4mmjIMUCybUC9cYHBPua85tI/LkBHIUYwScflV64umjkhXHzAhuP1H41zzwsJJuwqlaVZWkz9E/hL8ePC3xb0O30mzVdG1W2NuZrGVgASCFLJjqCO/X1r6+jxHbrbWaAFFCqzfdUevvivwz0/Wr3R9QhvbG7ltruFiVdWIKg44HscV9q/s4/tceLPFOnvomq3sKalYIrpuiB+0pnBJPqD1HvXNCMcv5qkloZwk0j7cvtFjt4/PunM86jJZsnpwAMVwviqzMOkXymYQzXibWGcbQBwOOlcl8V/iE2i+A57vVLnVP7TkgaW0XTEO8PjgdMAZx16/Wvz18YfEfxXrEso1vxJqcsmfLdJJmQKSehXjH4jiuSVWliv4cSa1GTWx7Nc/HHxD8F/H1x4e8USx6xonmiRpocF0hYfKysD26EGur1b9rPw/Je/YfDGmXGsXE6fuJ5I2SNiePlHVsH0r5FkEOS1xIZncDc0pLEjqCc8Y5r1n4K+IND0Px54N+22zTaZp94ElRFBbLZJIPXbuwfwqZUKcV5mFKhGLXMVvH3wb8afFjxJ4q8b36W+j2mnwRtfSXweBgqofuoRuJCgdSOvGa8p0O60rwprNjqEiHV760ljmNiy7UbawIjcjsQOe/Ptivt79tzWo9c/se40HU5o9L1W2a31CFCVim2EMiEdzgtkHsc9uPjv8AsO3jvGa4torqVSG4G0MPTg9MV6tLbkk72PoYVIUknFanoPxS/b68feONLGjaBp1r4MsTGYpDY3JmkYYxw7Im38B+NfM9xJLd3T3VzcTXd3IdztcSF2kOeMkknP5163N4O8Iapb7/ALBcRXDsSVhld2yOoA9aZax6f4WVltNIijbdlXvfmckf3s813w5Y9AqYiclZM9Jf4hJ4o/Zz8B3k0j2uu+DJxo08EkpMjW7DEUoDAHBwo/BhzinWHxh/tKzW2azS81EN8kkbgLt7ZAxzXJfC74kRaT4q1lvHFvDqHh7V7FrJ447bzWhIOUZAoJwS2CTzwMcCsHRbr+xtWN1EHZVDiJX5Yru4z74rzamEjObkkcztbc9EuJtR1zUpbtkSJwqqsIGAAD1A7msC7+0W91dG+jZl/gYkAdPyND/Ee3u9WtjPZ3CNGpU7cEZ65q1ceNrJpUU2yiM/MY5hk49aPY1YpxtciVRJprofdv7FepQXfw1uLKK1ZWtrpg8nALbgCOPQAV6t8QfFCeFdHlu5bVTHGud0kg2j2+vp9K/Pf4L/ALQHiXwPrM+l6Fcabp0eoEKjapE0sTuCTgEMMZ5GW6Y47Z0fit+1Fqvxc0O70DV4f7K1K1mEEkFqSba5Ab52LZOCo5Gfy7Dy44Sp7L2NtfQ7eePNz30PoS+/aE8NXXhlPE97qcNvbSu8cURf5iy8bQB9M/iK8R8Zftu3FnubStFjFt5oSN5H5PqwGPX1r5j8SalCbqKO3idFzh8tgg/xYxxg/wBKw9SVZvLjUEoIyo4716+Hy5U0kzyKv76Tkz6mP7b2tXDWM8mniC4gY+bFMAEuBgYC4PUV9GeG/jX4S8QeHrPXYtYjAZ1Way+9JG3UjYOc/wA6/M2ylea3UkyIyjYGBwcelaS+IL7w3d2eo6Y5gvbeVZlk34bg8jdzwRxitK2X6e6Zcmmh+pg8QWPiSA3+mN51lI+EZeqHvkdv/wBVM1a6gs2iC/O8nCRpyT7/AE96+HvAv7UOqr4gnvoLH+z0byvPs0ffCMA5bHGTxz+FfWfwi8baH8QNbW5udRhguVjjLWm/BjD9AM9QSO1eJWw8oR0WpCjK9mepeBfDJ1FV1C7iaJXBC/Ny30Hp3ruIrVVmuYyuF7N6cVb0trW6sVFs6tECVBjxhcHpxTp41jWR2ZVABzzgYArSOD9nBPdnpRUYxPhP/go140ijTwx4Yinzy99OqnlQvyr+pNfHngP4T+LfjAsqaBp/22LTVV7hpJAiqGJwCT0JIbjrxnpXqn7Q+szfF74+agbOZZbRXa0spFGRsizlh6gkH68V9k/B/wAGaR8N/hjolvoNoLZL+3W6uJs5lmkYZO9upweAO3bFXTq+xg1Hc4nUtdnIfCnwCPhl8L9B8OtHHHfwweZfyRHIluW+9IT6n24wAMV7b4Xkt9V8PxpcW8V79nBjaOQZzjofriuevrPKGYrkydFx0HrU/gi6ex177KXEcd0pT5hxkc/hXl6+15pdTGFRuRoatCjWcq29usNo7AtCU27SvfA71X8F6sNN1JtKb97DM/7vceN2On4/0rt9ft1axWSNo2MbfMO7HH8q8q1azaxkt5Flw5HmKw4wdxx+IrnrRlTqcxrKTT3PQfFHhfSfGVn/AGbrdol1aZ3hmXLIR/dPap9D+AfgCxtx5eg2dw3eSQFj/Or+l3zXui2WqRqrSXGEmiz/ABjggflzVvQ5p7e6dEnURZBHmDgj+hr0cPKnGa543udUfdscR8T/AID+DvE/h250t9Lt7GKbhZooQPLYdGB68cV43+z/APDvxP8AD++13QWuGms7ZzI0aOfLmjJBDoeu7gY/EV9itBFeW+JowynqP89q56HTbbQNQedFVlZdm4dQM9P0rTG4GdOSqQlaDZ1U6vLdHMfEqKDWdEsp4Ss9xaupfJC/Kwx0/wB7FcOtw2n6qYrqQeapDsyNnBPPp9K7jxloZhMrW2Da3iEHdysbEZB9q8c1DUvMuA0mUlUbGBHVhxzXLKtzVZd0ebjoKNpROgbWL7xH4gVDO0VpD8pYcE+mT61Fr1rbaf42uJ5dTOm/aolukbgKcAKw/lWbpWpR2MCzy4AJMh/vHtjFT+MPFlhJbWV/qcEF+9u4VrZQCfKYYJGcAnocZroT543b1PLVTTUra1Mt5IUlnS9XIVZhj8DxXhH7Wvhp9Y+FJ1CJEc6Rcpekn+GP7rEY+tew3lnpl9IJdJ8y1DDIhk+ZR/UfTNYfiHR5Na0LVdGv0E1tqFrJbfKcj5kIH68/Wqoy5KiZjGXvpn50tMIx5gbcoGQfUV3nwF1/wna/FDR7zxoxj8OWrNNKTGXR5QB5SuBztyST9K4Ca3a3t3gmBFwkjRuD/fVirfqDVrTbdYNPYqMvOTuJPb069K+pqWlCx7MpvlPrX9or9om++Jg1HQvBljY6r4Xijjuft1nC0s8Ee0hlKqPlPf1A9s185X2u/abC0RLdIZYSS00Q5kU/3h6Cqei+LtY8HvJNpF61mkibbhVVWEqDPBDZBPzE+o7Yr0rTP2cddB8HQW95p1xP4jiMltBayfMkIAclmJwRt9PTFeRaNKNzBSfU88sbqG3vLSW9RZLaORHnjcEhoxgsMdc45AB7196eJfg94Z0j4OzX3g6yiSSGJb/9ySxmjxucHPfbXy9+0F8AdQ+BWrWZa4bWdF1CPdHeMg+WYcujY44GCCeoyO1e7/sU/EqHxB4fufBWpyqJ7cN9nLn/AFkLHaw99pbH02nvWFa1RKSPVwvLJODPIPEnxAl8aNp+mFkuLby/JaRgPukd/QjHX3xXpv7G/j0+DfizHo6l49M1cLZyI/CiRQTGfrn/ANCNct8WvgDP8G9ZRbO8XUtMuDIbWdUIaI5H7tj3YL06dK898P3k2l+ItMvIPMEsFzFNujPKlXBz+lKEFCPMlqjlnT9hUsfrReSGG5UOv7lF3HuSc4GKq3mqQtqH2BgWDY3MT0Ocj/8AXTNQ1a2TSIbiW5QSiNZOvqAT9M1n6HIt9d3N66bUuArKWP3U6c+hzWdes4z9nHqda13KWg6HBpOv6l5kGZJXV4ImG4fNnPI7Z/IVq3Xhm81O+Ml3MjQBgFgzxjsRV7UNNjvtshLK0Z3K8Zw3K881xWra9dWcmP7QuQu08GQ9jjHuazlXo4ODjNaeQ/Z8xoyaEuiyG5doC6knY0gwuQecfjWQ9lHHYJFcSFTK29pDyDjgYPasq/tYpLWSW9uHSRwXQck8f3q2vEU0cOn2tox2eXar94cFvT65ryKuOhKMpwjaxh7JXsc7aahaaFZ3qxwec0ylCGyV54GK8yufj54K8LRXlp9vjuL+OTY0WNzKOjDjuD2NafxA8ajwn4B1nVIwPNtISYg38Tdh9Sa+T/DN18P9Y+Heoz6rbXlv48USP5kxYxXEjNlXXGVxzjkA5H41eDlLELmaMp0Una59AT/tN+DIUUWInuweZZDEwx6AVgXH7UFjbWtxfQ6JNdvEcnfgdTx1NfP32pIVVSwzjnufzpp1LzLd4lbMMhGR645r2lh12OR2jser63+1jruoR+XBo0dnKeGlchv0BrJtf2mPGEOqW0shtZreEEvCqAZXjP44754ribCSEtFm2SZmcfIFBPPQVpalMrmQSaXHYwQYeTcg3EnsAOo6USpJbLU1px95SsfU9p8BfBvxoOifECSZ9FiuoVW9s7dQoncHJHI6nOCRzxj3Ox8Z/hvo/hPwHpuieD9OXTJdQvre1FwHKnMjAAnJ/vHJOKxfhX8SvEvxQ0K01C9js9J0vRHCxfZY8JcSbMZ25PCg9u9ei+MdPl+LXhyxsIJ1sri1nWdbo7siSPBXvkZx+deJOSTlFLU+hhilG2p38Osf2Dp1lZwSNePaItu0rsFMpVcc4/n6184fH3xloHjy68VeDtddbHUdNjXVNGupuF3CMNJb7umW5xzzk4xtOPV1mk026ZLt23xgP8zbgSfvH3yOa8f8TfBN/iJ4X8bPfRCPVptT+1WN1IoYjYgKYPpgY4xipp4xykoz2POdS6bR8iaxpS3GoedDEIY5Qp2r0Jxz/n14rIvLGPT8bTulPG32rq9et7ix8yGZWhnQ7WjZcMpHGMf555rkGd5G+053ORzn+Qr7Gm1KKaPMnvdlQLllA5XOSDUXiUfaIbdFIJVSFXuGqdkxgBWZmOAB1rpIfB5s44Lm9ZGlZd4jAyV/2c+tRVqKG5pRipbn05+yT4h0uH4Zjw3aWlxaahblrjU7kr8kjtno2eTjAHoBXuXhnRDrF4tvueKJcMVQZO3HP0rx/wDZp8Kxf8IPDKJVgOo3LO8jDJZRwMevC8e+a+sfB+nWmi+HRdFfLARmkduGwCeM/hXzUMP9axDXQ0+J27HPPZL4djjt7DzhqN037uPH3V9SDxisGfw5eQMtxcuxLOEk3DpzjOMV1jWNxqVi/iCOQG8DmYR7RhUHGzH05966O+sR4i0BdmA0qq2VPGQc4r0lgXVjeOy2L9nFnKah4NFnbZ8wuh+Vdo/LmucvtPFqbG2SQfbZ3ykfXao6lvrV345fHLw/8EfDJubuY3WpRoVt7OMgszEAKWBIxz6+9Y/w81aP4gW+l+I7WRZZtQhhvA2flGcF1GeeMGubFUY0mlFalLDxlsfMmtTXvw9/azSDUJy1jrmLCaeZuFjlXCH22yKijjq/vmve9e8FL468J6v4fvCrpdQPbepDKeG9iCAa4P8Abn8A3F5pNv4stt8N3plwqF4RhgjD5WDeoYDGehryr4HftO33hXxJZf8ACVTNqOi3QDtcbTut5WOCT6gnrXE6cpKNl8JpOiqElJbM+X/FmnXnhPXNS0m+jaO9sJngmXr8wPX/AD619pfsp/AD/hCvDA8V6zB5viHUlE0cZQb7OEj5B6hmzk4J68VP4w/Z50n4o/tPaP4gsglx4YvraPWryXO5HKnaF/4FhOOARn6V9UNDZ2GDLdBc42QwY3AYxyfpXpTqyq0+RCrU4x2PMtYtx9mgHyjBcleoB46VxHxa0e5vPh7cX+jzyWGt6Xm7jlRsK4TkqexyK77xJGBdRCPiM7yoY8/e6Gs+4Al0i9s2AkMlvKu08hsqePrXhL41c8vaXKeO/Af9pGz+I8iaJqcSWPiIRjyZGfC3WP41J6NjqvrmvojRfFF7bw+TOi3kK8qjfKw9wa/LK306WymMsE8lte2smIZo2w8bqCNwPqDkV9s/s0/GeX4q6NLpl+NvifTV2zxKBm5izhZlBP4H3z2xXuzw8ladM5m5RkeCD9jP4i6lrE0i2ttbx3Dlt004288nPBro7P8AYX8aWNiWGu2duz/NJDHK64buSBxjFfbaXg+WOXKgHG9en41H9vidXUyfeVl+btnjNYSxM+kj0XipPVHwR4o/YW8b+S08F7Y3rYwUWQhh9MjA/Ol1j4M+NdD8LwQTaFJMtmqrvtiJM46jA5Nfe8lpcxWUb2eJmzglTnIH0qtb6cbpiXna2MnXcM7T64qPr1WOj6Ee2mfkfqGtXWhaxPZXwa1kVstGwMboD/eDY4qze3mma5JHDLCn2jGPOXhj7Zr9M/il8E/B3xU01tK8R6ZbTXkb7YNStVCyhiOgYcivgD49fsweI/gXqCzyltQ8OuSYNQhBYxD0lH8B9+h9R0r6HC4+nWST0Zard0eX6l4VMbq1rKXXnMcvUfSsZrO6t2IdJI15zkYH+c1o2eqzWzEGZpIj/eOSR/nt/Krn9uIVO+EscZ3bwR/jXtKfY0+I5yGRTdLsxjOMLW1Y2M11cLsiLRAcjvntW3DHpNzLDLNBsxglgpx7dq9Z/Z30nS/EXxo8O2rxQz2slwpaGRcq553Yz04x+NcuJxEqVPmjuduGo+0mk3oeeaf8IfE2s6VdanbaPdy6Rarvmuo4yyxKeTnHI4H61eMUWk6ekcUAELdOPbrnvX7B3mj6B4W8Nz6ZFYww211EVMaqAGyCOT1NflJ8cvDf/CK/EjXNO0pfPtGnyqWy5A3DJAxwSPSvNhXalaq7nTOj7S7pLQ4RYX1l1iYFwX2xgD7zHGAPzrd1b4f+IfB9sDf6RNZQYyWZCQM87iQOBg9TWj8LdP8Asfj7w7LrVvJpelW93HJc3EwwIwCGBI6gEqO3ftX098ZPjF4e8XeHtS8OaFF9sku4wr3ijy40yeRnqRgdqJYiSlpseXiaVWKSaPjuYJ5Mat8xI37SeB6Vr+HtYVY106R8FX/csxz17f8A1qu3nhqL7VgSYh4Xew556nAq7B8K5fEV1bW+kXxub24fy4Y1hKgt2+bsc962liIRXNI5fYnpPwf+EKfFae9jhuY7C409o5BJKf3Z3kgZx0ORjPav0a8N6e/w9+HNvaXFyJpLK2xuXON2OAv418+fBX9n+L4d2cF14mY3OtXCiRhA5WOPA+64zhufrzXoPjzxfrdq0+jaPpa6hdXFjLPEpkAjwu0ZGT2yOOtfOf2h7OrKdtdke1TgpwVOBw3g74e+HPBepXesTwLd63fzPcz3cijCEkkkewHGa8i/aE/apimt77wp4SDGVn8ubVoj8qKPvBfftmr3xI+MY1L4VXaWk623iNdsEkQ4bk4YqD1A7jrXzBpujfbFcyAxsoLFsck4zz+NaYWNST5pM+fxEZxk4tFCWyZofNPJkBZ3Jyc5/U/WoW0jzM5G44ySeprcj028mtXFsN8cbgGLjc2fT2qVrGOWYxy/ejH3VPJr6Gy6owScSnouo6jo8huLK6kspIxn92xCsPQgdawPGYm8P6hcxSIpnmxIvOVcOCdw759a6+3tUsWWRl8xl5VG6Ee9dJ8bPhdHdfAzwh8QLMlDb3Jsb1Rn7kr4Rj3JV9q+wY9aUWo1LG8Gup87yyS3LKHBbI5bNTW1u3nFCvGP4fT1HrV6SyMahD8pXjipoY44SGZ8MRyB6e1dGtrmr8jLvFGn+Y7kDAz1/wA8VBDdtNNxl2P5V6/8Ifh7b+OfiL4et5k+02VuDf3gbO3ahGxcZ5DMVyPQGuQ16wvfHHxj1l9LtNhvNTe2tbVUABKkIijGAMhR7ZzWTrR5W5dDvpUXK3dmEbc+ZtRSzBckKp98Zr6a/Yt+Beq+NPF8mrl5NOs7FGLXAUFX3YBT6nH6ehzX0T+zz+y74U+HuiRal4yS1vdcYktDMweKJTnHy8hj7kcdq9v1PxJ4M8D+HIng1bTdCsZIyYtsiozcY+UZGT0x35rwalf61Fq9o9j1oUYUvdWsu/Q47xjZ2vhvxLBol5qsen286i4tby8wAWCkMgJwNwxkdsH1r4l8caHH8Sfitqs/h3S3uoryVYfLQ/JJKuUMn+yrAA+/XvivoDxxpXif4zahGqIuoeHUG2zluD5YK8hnwP5HnjmvZfhXoeheDfBC2OlWkd5qqrgrgCQ54JGeRyPzryKcrVHGg7E1Ixg7PVnzv4R/YutdQt4n8U30cUzuMWtquVjGOQWPrWd8dP2a9F+GfhKy1Hw1BKkNvL/ps7Ettz91s/w4P5V6Z8YP2rtA+CfiCXRtQ0ufVtTZV861gIAjBHctjBHFcXa/ty2PibQ72y1nwaYdEuInik8ydDIykfdAz1x2/Wu+lSqvV6nFKHO7tnzpq3iHXPEJhg1S+edIiWjDKFwW6ngc5wOef1NcvqWrjSpNk6CQ/wDj341jeIfGEupSTR2cUkdrGzraeZIC4QnqQD1xjnJzWNbzyyK0t5L50x9jn86+pw+HbSbRzzSvubUXi7VIdQFzp5hsGiyQ3lCQkEYI546Vc0XVtIt8vq8E2tvcIWlnkx5it2CjgYzXITASSh/m+U87SQPyq0uPJO44B6rjivUWGizM6OPxBpMTfPp+xW+XzEySBntUtxqFjJPmzlleIplUmADA+2OorlWv43AUrtI5yeaktdRi37zIzoOMBea1VCKRMl2Oy0/xVbW11p0b6RbzNDKWluHfHnLjG1sDjFVPE2o211qzT2aKlvg7UU5ABHasi2ezhhGZQz9VbH3c0lxPa+Zt3Z4GGRcfnVxpRi7i9TRt722ux5ZfzSSDtcc8HrxjvUlxagxkKvlvndu/iPU9fqc1TsrGORkkhdXAGCe+PSrDXDx5QEFuhJHNWoq90Pm6Iz5LEsxYnPY7emagWyMLbi2f7oHQVPHdqtz5cy5B4DNkc1Z8sMvctnIXv+NVyq97B0KEqqFLEcN0XFTzaPFfwoZ5GVV5wvHFauxWVC8YxjHSp7q1EMBIGP3eelXyxfQxuznvs8mmb3s5cqVI3yY3YPBFRx6ldOykalNEE4j8o7SuM8Ajofer2mafPdIZLhAoV/m3HA6dKsrCsimSEAp1DKODXNUoxkrWNFLubPh/49ePfCdqsOleI9VtWjDAP5+8ZP8AvCvQ9T/bc+JLeEb7Ro9fstWivoPsxmntSl3bgjDMGBwTj1H0ryGbyvlZgocn5lIGDVGS2VTI6xARoMgtXC8FTvcpPudB8L/FlnpfjCyvdVbyNPtoGTzclipY8k9+5x35r768H/GH4eaz4T0qy0zxFbZtLhokhlfEvl4BBI9BX5lalfOzMyKu0DAVhVeCHYUuIG8iZcFHTIwPz5FcssAnLmQpXcbI/XeS+03UMTQ3UckbD5SjgjHpWBeXH2XUop1YqqSq4YDsMZ/SvzJh+KvjjRbi1hs/EkyQ2GUiEqKVI5OG9eTx34r27wH+2JPdLHb+I4vJfywJLm0QlVYHAcgkkKR2Gce9eTi8DNPmRzezle5+i0n2e8hjlQZZv3gYNwVPUY9c1yWuR21w4inAliUkDZwVGOSpql8H/iZpvj3wrCLMwXSxovlXNswYN6e4465rV1xPss/7iPzgdx2nrG2Oc57d683E05cql1NJGj8K9ai2z6VJz5UwmhYr94E4b8e/4122uaGm4zISPMOCB2b1rx7TtU/s3xNplzaL5XmNtlXH8WcYH1P8q96uGRoUYt8qlWJPQ+1dmXxp4mjKjPdHVTblEwtBu7+KQW1yokj6IzHB6cYreutPgvlG9dxxgN6VBd6Skjo+WRkORt7d+PrVWx1w/bpLS9AjZThWHANezh4ezX1fFK6fc080U9Q0gtm1uZc2siGNQONp9T+GK+efihpP9j39s/lLbCVTGyqxO9gfvc9Mjj619S3VnFfR7ZBvTHHpmvlf9tWRtD03QhYuYbvcZVfOeVNeRj8ulRftIfCOp++hy21OD1DxJOsyxAKFjwDkdSOmPeodNxqlpcNqLHy7hXg2AEARkckY75rmPB3iy3+IWlzTQrt1C0IjvoeBgk/K6+zYOB+Fbd3qyabaBv8Anmudo6Ej/wDX+leY426HzMk6bsVNGsddsVnWxtbfUUt5SjJHchZh6Ep6kc4+ta1j4vla6+yTQvBNJxJHP1Hrg/XvXGeMNYuPBMmm+JrdGe5kKwahGGZR5bcow47HjuMdq6PS/Hul+KYYCux5WG5iW+dW9P8APFXGOpPmj4y+MmnrpPxP8UWdsqpai/Z4sdAGCu2T9XasO1XEKLzjGF46V3vxtf7V8WvEoKqUzHEOONqoCCfUliefTHpXI7YrezGzcJG7N1r6JSckketzPkVxstvFHGFzukA46dau6WZrDyJYbi4iEfyhUmbMY/2Ofl/DA+p5qhBD53qp7N/WtTSIWmhIByCeH+nWlKKasyH5mzq/xA8TavoDeHb3WJtQ0ZpVljgusOYpFOQysQSPpnHJ4qx8L/HM3w/8faDrCvI8Ntcqlzt5/cP8kgyc445/wrldTRUWZRkFCD7tVG3ut0LBwfLYEN68cZ9jWKpxlG1jpoy9nJSP0K/aQY2fwdkv7KZCttfQXYmUA7lchc/T5uvtXzJ4Pt31DxZpVup80TXcCSRjuGkGR+Wa9F8O+J5fH37I+qNeXLSXNjaSWrmQgkSwOBvOD9whQfxrG/Yf0hfEHi+81m8Czp4fiWUK/JZ2yIzjvgKT+IrhrKVOEkzvxlqiVRH3rqmuNrOqLpFvZBEwImcnB2AA4/Cr8l1/Z22yyYUHJd+pz90CqHhG/TUptQubuIxFR5aedjeSR+lVdUma6eWdj9o8ocugzwOcfUV4VSq9ajerM4y0R3Wn6h5mmBnHOCgY9zj/AOtXn7XlrqV5HOQC0TFQW7Me1VNH8cR3Fy6QiQ20K7mLDIdhyAPf2rkdD1xr2/1m4GBH53mRw44Gc4GPWuPFYhTpq/Qt1eWOh07W9zqGp26sHFvNcpDv65+bn8hUPxG8VWel3l5c3VxHFaxEAsTzwOg9eas+DZrmH7bf3tyvl2sDzLbNwUZs4Pt0xXj/AMWNUt18OtqmqMgsbENLIzf7OePcngVw04qcVH+d3OeVT3bo8P8AiR8StR8cw/2Xbr9n0dZTOsf8cuPul/f27V5m25mCvwqjr+Y/E8fl6VxvjDx14i8U6hcXIkXTrEvvt7a3QKI17IcdT6+prpPg54njjg8XWOulbhn0WS40ya4ALR3KZBUE5IZg64/3TX32Hwap07R0MXCU5J3Nex046lfC2M8VsGXPmytkE+gI71p65p+meGbW3s4ZTfamTvlZedoP8IwcYz61yGg+INRt9MuBqrW8pLgxtwMLtGR16ZzXo/w4+Gut/Fa6hvdItGMUhy1464ji7An1PXgUVJKgryNFTaVw+GNrdaxqzafYWEtzrT5+yxRoDjIOWz0GMdTXSfHnwWPCXibR9MW9e6v76wEl5aoAfIlLKqAY4JOWHOfu19F+E/h3ov7NfhW78SBf7Q1faE+1SDmSTHyxKeMAn/8AXXzjoeoXPxE+N2jXmqS+fc6hqSSTJk7cCQNtGfYYFef7SVZ66HX7X93ytH094F8ML4X8F2GgBUMdjbB7lkP3nPLMO55/Oup8BXAt9Wmsgd8TgvG3O6TB6HPQ1BqFvDNfXPllon3YXdnCqODkfWlWdLfxVpht9vkW5EIYKQMkcnP9a8iSftbs85N825f8TefDezSzxM6xnCsFxhfy6VWtL6VYGtowvl3C+bCwb7rDHGfcV3utWo/s9mBaXdgOJFycHOQPevKYV+yxz2cD7pLGTYGPdSNwP0xx+Fc+Lp+yqXRulys8R/a2+FMOm6bpfjax3CO8kMF/F2EmCQ+OvI4+uK+Uft4s97eSrDdkd8V+lOuaPb/EHwBqnhnUOItUgYQuRkwT4yrDnj5ufbtivzW1y2h0fVL20mbbcQu8ZXsGVircfUGvocBiI8vKVXjzLmRt/DTSzrWtXN1cA4tYy0Yx1lYnH6dq7HU9IkdZJiyxpEOFU5/H06H8K9x/ZB+CPh/x18KZ9UvopotRlvpF+0Rvg7VUALj0rsrv9laK41qRLvU9+nZ5EKESMMdPQduRXm4jG8sm5LQcaMrXR0/wG0lrP4ceGrRYVMqhfIlVfu598cdSa9Z8dXUlrp9npNvhWuGCyYU8J/8Ar/lVP4R6XFo+n3VjDu8i1k8vYxycjv8AXFaEVvLrmuaz5uVt5IdkEmDtOOMg/Xr+Ne5hYKeHVSO8hxi0tTe0PR0sNHFm5V8qQz92GCM/lxXE/FL4mWPwV8BpNKyzagy+VaWxIw7k9T/sgn+QrO+MX7Qvh34M6OLeSddS1gRbYbCFwz8DAZ/QZ/H2r4W8afFDVfiZrkura1dGa5bKrEuRFCv91c9vzr2KmIjRgow32M5TUUYHx38VX3i7QdT1TUbh57xrmNnfOQCx2gYPXjAIr1f9lP8AaR8Ow+GfDfw/1rOgazYTy+Rqkrqbe5jZy3zMwBU/PgD2yDXzx8Trwf8ACP20AbHmXCuT6gAkfrivNWt1uW2yBSo67h6dP8muGOHVSGvU1o1HHU/X74tW9h4q+EvjGwtry21J7nTJJIzHIrjIBweD2PQ1+ZOhwxXlm1vJmX7PNh0UfMynrgHuPSrP7MvxWt/hz8ZtFOtX0kfhe5aS2uftE58mEFG2swJxtyoGOh3Z7cv0G1i1f9oW70nS5PtWnanqssMTKeGiZy4YEdguea5q1GUJXaO+vKP1fTdn3T+zjo8mjfDCEOJFtppWmRpWJYocBF9duBn8fTivZdMtoPsquY43kYEEyOAK5W1t5bfT7WwtNsdrAqpuAxjHT8qtLpqWlq0xvknkTpGcnPbA7ZzXHHljd2PG9o5M4bXIZDqLwjBEXy8HPc1VjmFlY6heysUFpA8h3d8Kcj8q1bi1a2kYyKzTcu4BGTXEfHI6t/wpnxPDoen3VxNcxC3drSJpGiRyAz/KCRxnkD9Oa8enH2lSyRlGHPPQ/P8ATM09xcRjbHLKXXccDaWJ/rU+neINb8F6pDrXhfVzouuLGyxXSor4RsBgykYIIGOec4r0T4JfAHxX8ZNcbTdOsZLLTomX7Vql1E0cUC/3VB5Z/RR+JHGdT45fs/Xfwb8TDSvMXVrfyhKk4GAckA5GeDkd+1fW+0VJK+x2/VZO9z6l+Hf7S3gn4jeXC8z6DeMMbL3ATcf9roR716pdeHWhhWYKbiB+VkjbcpHbp0r8mdO1qJYUhn3P82SN2Aw//XXtPw1/aS8X+AWgjsdWNzYgZa0vmMsfX35/IiuGplziu6OZ0bn3vpdjNH9oji3K7Lj5jtx6EUWV/cMXjmtxex8gtnaenY1w/wAJ/wBpLwj8WFh03UbiPwz4nGECvJ+5nY/3GPt2OD1xnGa9G1XR9S0uPYZkEMj5WUKNhBHHNePUw86SutUZuEoooahosdxb7LC4AlzxbyMA6Ed89yKbqGlreeGrq41SNXkUBJobhQUbPHOfrWbrfnRLGY/9dkocqfm9xjoe351Y0bxEk2m/Y9Xja5iVz868SIP6kfnXAppSutGZ31sz5N8ffsZeFfFmqXl74fu38M3EzM/kCJXt0Y9dq9QPYGvn/wAefsteNvh88lzc6c2raNHkm909fMRUAyXcYyoHqTjNfpHqXhc2SQ31g4vdOGFeSI4ZMnncvbtTU1n7Lff2WJEYTHy5IpFBV8jj8TXp0cxxFCyqO4RqOm9T8ztN8JpcWMbGZIlONrKcnB9ea1/CN4fAvinSdTthKJLWcEbMbpAOw9/T3r6K+O37Pf8Aot3rng21K3VqzveaUufmH9+NfbOSO+fXivLvgn8ItZ+MniKCC3j8qytQk1xMFI8scjHTrj/I616tXHxqUW5bnu4FutJNOx9w33iq7+LFpZ6Tpd0iamscf2m4iJKoGGSSw6Ec8ZroPC/wJ8IeDbxZ4dPW91NuZNQuVBkkPXjsPoK2vAHw90/wXoUVro0MaTAESvJktK3ufzqzeNdrq1v9oLxyYwc9M5614TrSa9pU1bPoHJc7jSfLFHyx+1F4H0rQPGUN3HaqLe/i+6FAXfgjgfTtXz9eLbaOs0UWS4O1TgHP19vpivt79o3TrLxV4KvZJo/MuNOKvDIn8ByAze/Havh++jtNLfyI5vtU2ACvLFT6Z+ld+Fq83Mm9EeJiq0upk/Y5pE8wEy55baOea+qP2Rvgrc3l4PFeoxC3sYF2W0cg+diec8/zrxf4SfDe/wDH3jiz0iNmjWR8yn0jGMmv008P+G7Pw34ftdLtYwLa3jCBWHXHc13QoyxVRx+yjiUdLs838SzSNfzSktsZljC4+6B6g+9ZfiTS7uPw3ez6TGG1/TraWa3ZvmEq7fmXnPUdvUA11WtwBtceKb7kkrMSOwAAWtjT4RprwiTGHOVZh1B4INeT9WvVd9iKUnTnznwZ4o+E82reA7LxY729qdHkDTxzArNdByNynGOcHp3NV/EnwWu7Own1nw6p1LShF9okjU/NCu3JPOMj6V6v+1B4JubfUdP0nQjLPPdajn+ywfl2shKuPXn5TnP4da7/AMN/DBPh34Lg0nXNVL2mwy380QK9QB5a9wp5/Ku+DnTbi+h9NLD0cRR5qj1ex8N2dmZJDLG3lnO4K/AzUsmjibTbmeMqk24vum64H8CkV69+0TDpFp400/SvBnhdoVt4QsywRndPvAZWABJOB3PJzXK6t8Pte0DR1uNd0W70+yuzlJZhxk8YJHTn1r0YYiEnyp6nyuJy+rR95LQ8zt7gSKkUqsZH6nB49q+k9L08eLP2LPGdnlHfT45LuLzOismHXPoMivCLzwxI0KXELjdFGWCEkZxX0J8JpLKL9nHxUt3OtpFfwzLIGBIX5Nqt+fFa1naSbPNj1TPg22c3UELiVR5gBXe2D+NX4NEuBKWl2lAvLbsiu/8Ah9ZaVavNp1zYRXVtHGACU3BvoeoP8qr+I/hvetc/Z9EkWa1k+ZoJ5NrxHHTNEcRC1rnqxoWij039muCLSdK8U6yZlEMEYhy3AQKrOWz6YK18/WXjy4t5kudOkaxuFcyJKAN4y27IP417P8LPB+r6z8JfHHgwOml6xe7nS4usmNYmTG4kc4OMetfMen6Lrs0higsbi4MbMrCEbgQpxnd0x+OT6VpSpwlFts2vKLVuh6pqXxo8ca5C8l74huZXj+RYw23IxnHHPbHfrX2XqngHwf4//wCES0uKCax1nQVhQ6jEAftJyrMsg5OC3JJGRzjgnPy1+z78ANc+MWrS2En/ABJ2tyHla8jOVTPX17Yr76s/Ddj4L0yee4aG71uEm3j2gkR8ADcO/rn3PSvAxHs1Nxgkjsl7aEOds0dbu7DRNNTTrC7htbawdpJixCgsw5X6AnP1NfG37QXxC1XwX48tdZ8N+KorTUguxltXD7eMg7SCCD7/AMuK9j+Pmhsfgtr01jLNc61Ii7180BpN5AYj1xyfwr5J8I+EdP8ACN8viLxjKt+gjMkenq5LyygjYpPG4Ej7vQj7xOMVGEwrnL2j+SPJfNUlzNkviDwJr+q6TZePvFGptdXuvz8JMwMxypKyccFSADgdMiuJ1i6ghWeADDD5GdicjnPHvmrvxE+J+r/ETVGeeRbSwj/497KM8QgHsR3PGccdulclH5skmFHmHP8AEc19jh8O46yNfUsx/NIqvjyzxz2/OmTN9mmbcWuO22IVYht4YZAbpZH7+WrYOfUmn+cudzRmBsZUg9favYjG2xF7lQTSZx/q0P8ACRyabLE7rnJznjPUVY8iVpggTBY9u9W7jS57G28+YqkR6bjzWiAzDu2oTzz6Vet2e6yqQqiDqy9T9artdQqyLGrytjlscCjzZF6Nh/7qdKklsufZYo8faHjjPULvwTTZprQSNtaZgBkMMce3WoFgMhT5MHryATnvTpI4rdypJYn+6P8A61MVrksOtWWnyEhLiR2/hxippPEqztxafKDkbhz/ADqCNZWBZII8YwBNgj6j3psdsIwwMieZ/fzj8KELQsRa4szgPZxSxjhlGd2Pb3z3q6upLMwkjtm84jDDpWdbw3LqXhdSI+ByB9ab5d7HkrIz56gkfpVgdIlyJYWkIYL6VoQ3UUkS7/mRiFOe4xzXHi9mteJY9p789au2OsW+1o5J8MGCDd0wfegn5F+zt7iaa4bUp/IseVhiUDMnuT2xVrjyQkfCEfLtqNUE1s4D5DDBXOT9atwRwxxeUq7UX7pqbk2bMmW3WQrv52DPvWdq90kFuiLlnlB9wAO9dPDYpIBGfldgZJWY/kBXJaxHc3eoEIqpCPlXjp65pmplxxNM2MMVXqSP0qx5IdGVEKnIAHoO9XP7PeK3EQeMhju3KepqddMMMcVz56tcEZKjkcnFTy3C9jNutP8AOuZWUgcg7D9OtZEmmSnhsEHOCpwfrnsa6W4tzbXEqLL5jN1OOeeagkQ+WW2ZyeQaylT5tA5iDwL488UfCPXo9V8MapcaXdM26SNjugm9mQ8YPtg+9faHw9/bi03xR4dnuNfgNjr9mYzdoc+VPESATEe556cEY6YwT8XyqZGG/afQelZ99oyXILRs0U/GNpILflXn18JGorM05YyR9+Wvxu+1eD5vEt3bt9j/ALXaztHC43RbA6s59umR6Yr658M67H4g8OieO4DNdWq7o1YHYxXHFfj/AOF/jTrWg+D4vA2vRJd6Csqvaz7f31owYnAYY479MjJ5xxX0R+zx+0CfhtdC2u3+36O/+qnikztU9Acn7vuOmK+JxWFq4Gp7WkODVPofoT4Z8TyS2JOolkZMgOwxuxxz71vXlnHeLujVGcfMh9+3PpXl+i69Z65Daz2c63dteASoyHKjPJrtfDt99isvLu5Od20HPQHoKvL859u1hcV950xjdXRY03xQklw1ndqYLxX2bcHDehr5p/bQvra41jQrSUlsWzyFRwwG8dP89q+n9Q0OLULqO5VmjlVcF1OCw7c18V/tqaDeaT4q0m9lvPNFxA6omTwFI4OeAME+nTvXr4udeKVOfw30fkXG0U5rc+LdR1TWfh/8Qp7rTLopc2M4bZ/yzmjIztcA8grnn15Fe3+D/H1v8TpFlt45LPULdBPc2rZaNdvVg3Qrkj3GRxXjXxLj8xYdXb920SiG629XT+E/XPFdt+yZ468P/D34lXWreJLmCx0k6RcQNJMc7yzxYAXvuIYdCDjFRWp80NDxK1L2i5zu9U1rXvEl3d2Vtpn2kSqY7e5KbI4mPSR/VVA6DmuGs/ideLePofiTSVGrxymFrm1QCRXDcfKOuR3756V6f48/aU8AqJI/CWlXjzMCw+0fuoBIT0AzngdcccisbUtL07wn4k+EXxL1oQXlnq7x3FxaxxghFUg7mY/eADbsnn5cD0riSaVmjClTV0an7S37KN94P0HTvG2nb7yO6tYRqsQyzRzlf9YOMgEED6jsK+Vbe0kkmlhddzxffyece3rX7QzeL/BfjbS57CTVLHUbGaAtL++Ups+ucA8/pX5vfta/Aez+F95F4p8IXUN/4YmmIaSJ97WjEfdJzghjxn6CvRSlSaSd4s7qnI1ozwCGOSGdPLHMnyj8f/rVqabALe8lhB/dkFkx+tZP9sJNJbvs8psZKngA47VpJJ5e10bcy9PcHtW0pdInHrHc2dH+Her/ABC1qPRvDllJqur3AZlgQhflUZY5JxxXDalY3eh309le281leW8hjkhnXDI4yCCPwPT39DXs3wA+JGsfDv4xeG9T0a2gu57yf+zZYJ1YoY5WUORt5BAG7PsfXNd3/wAFAPAaaL8bH1u102SDTdYtYpXuMHbJcDcJcHsduw47kk9SainNx3PQpUnUhojwzwP401vw34W8R6VYapBZ6Rer5txbyoGZ2cbCqemQOcd+e9dj+y/8SLf4d/GCwUSyRaXq6jTp885YkmJj7Bjjt94143Nuj8zeoKgn7uB/L/GkhtGv7q0htgyTyXUSWxU5eORmAUr75xXRWoqpF3e6Ks5LlP140TXZ49LvZJIxc3DTNgJ/CMAZHrWB4h1nWIbFdLgUIt2y8x53ZLfdz6HvXBfB/wCIc1x4NguNVZk12zlayvllOSZYiUbGDz8wNd5pMfnagurxtJdRWxyyyttUHHQe+DX53V5lPkYRjLqJeRv4asfIjdFniHnOSRubP3vx7VzHhq/TStX1R538sQhJEJ5BbkjI9Mkj8Kn8QXkerXzyxllVnLFmBwuf4eewryzxV4zk0DxJ5c8kUFhMYYpby5I8uOPdlmJz/dzjPesVTdT3YmdRy2ie333iZLfwjbzyQbH1abzC5bjylzjp0zycfWvi/wDaC+Kx16RfDOmXO6wt5C9zIG4kI/gH+73PrXXfE39rEeKLjUdG8LIJ7TyjbW14QUVE27dyL/eHIBNfMzQCOadRnKnlnO4vnk5Ne9gcBKM+ea22OTVyvJjXkn8nCAF+vPTPrijT9SQSeTfQ7Dx+8Uc5z/Prj60541VS6nIz83Oc0LLDL8xKhgQNvQd+T719jB3VjvjK+qN26+H+pa/b2WpaazXWk3lz9iG18/PzuJABwox17nIxX7D+E/Atho+gWFlbWsNpDDDGnl2qBQSFAOMduOtfmb8D/hfa+KvDvhq50Lxpb6ebW5V/EGjahKQLWbfkTIp/gK5PHXGQetfq5p8clvbqkjbgoCq3cjHU1zUsPHEV3Gaukd0naBzPxD8IWHirwfe6PcnyoZEyjLjKMOQRnv2r5I+HvwM1rRviRpWoyWSrYWV2GaUt8rcNyO56j8cV9bePJGSOFd5XjOM9elefeMfFkPh3SvC9rG/7zUrwwxKW9WAz7815GOko4lwgrJGX2dRNUtTNrk0eADJKfunGRnPP4VQvNQigW2igLJ+8VpY2HcMCOfTFaXiyMz6i0CIYTBIQ0i5BbIrnr5tscoGSwUg9z9a8irFxlc82W57JfEzafv4ffF+8cnbhcZ4x3z3rymbTTbeInuhtmtbq3aKfno6sGQ/Qgnn2r1TT5DdaFYyvbiaNoVV9p5AxzxXnHxDaPwzo7arbjzbGGeFpg33ol34JP+zgmrzCnzRUzraukyCxhmkt7gK2wQt5kYzgqCea+GP2qPBB8L/Eya+WLyrPVo2uE2njzAMOP1B/Gvum1eR9SZVx5crMNvtjI/CvIv2u/BaeIvhPNrEMG++0aUTMRjc0Z+VgfYA5/CvNwc3CaC11Y7P9hUi3+BNswHDXc3PuCK9o1mVYLaRzy7MMexNfO/7BfiSK7+Et5prSAy2t+wCd8MoP8819Aarai8uolGeeSc8YB5zXnZjUk58h20v4ZQ0jULrw3JeajKPPtLpg8g+64bopUdCMcV5f8cPjl4g+HOmWWi2cNpZ3V9bPMlyZd0ka567egJJ4+h9K9N8QQyNZpHEdyW8RLqOjfT3r4U/aJ8Qf258VtRaK7lc2iRwIysSowgLLz/tFj9Sa9nLMVUlH2V9EcFeTinY5u9uLzV5jeancyXN9IfMklc5JOf6dBWPfyCGRFCho+MYJ47VZt74TQ+UxxLjBVjzn/CpFs4mhAI3HqPzr6iKVvePNV2rs4P4rSLHpOmo+QpuSoPr8hNedyXvygA5zyDXoHxmmDWukR4CqszFfrsPOK80t4pb5wSFQH06AV6tG3JodtOTjE0dHctNJI5IYEKnYAkZz7V75+xrpcOrfGg37RZ/s7TpJY17FnKqT+Q/WvCYdNTbjeXXuBxmvoz9ii7Fl8TNWdlCyNpvlqp6nL9h3rnxjtEuo/d0PuOFZJplLsYYzyAp64q1f3kca21pH5hj375JFH905X9cViQbrGbzbhmd8fIqn5QD1qZpHvtat7ZJfIbywSR/Fk56d+1fL1JPl0OWm9S5cWZWdJll+0BlyWIzhc9Prmp1sfiNYrLZ+GtL0tLKZfNW51JjuLHgjaB0xj/JrnPH2ux/DHQdX16aQXNvYlXCSnasmWHH49Pxr0z4Y/HPwf8VtKhvdG1JVcpvktrghJIiPvKe2Qc9+1erlODhUblOVmddP3ZXPNdc+HPxUt1iuk1K1ussGlsbH9yG55yAADxxmqvw28E6P468eeJbPxjpO7VrNY/J029ZnAQg5dT/EDxz/ACr6OtdStb5Q0N1DMM/8s5AegyfevMvil8LdU1TxNaeLvCt//ZviG3iNtIOgmjOBjuOBzz12j0Fe3WwUKSVRPmj2PSjXcvd2PxtkUBsBlL+o5FJFcSQzblYlSNrDPQVqa94eOjtHLbMr2UnPPUt6Csm8kihjhl8sxsW2EZyOlbxfMro41qa0OqvwGeRGUkpJFwVyOv19/r619Nfs2/tWeLvBcq6Lq0r+KfDaxblhvPmliGedsh7ex7DtivlO3kG0SKAfqeRXcfCu8js/EzLLMoS4hIUtgAMOcD6/4VyVqakrxHGzdmfpp4P8eeD/AIrQsfC+qRw35IaXTLlgs0bdwATyPcZHoaqa1ot5b3UnmDym3E7XXDbcdevP51+fnjMfZbq11CzvDa3StkTWsvlyxsvIO5SCK+lfgv8AGz4n6n4O+0axov8AwnGgWasv9oLhbiMAA4ZhkP8Ajg+/Br5zFYOEldqzJq4Xmu0e5aRLFomboT+SMhJbbqsygchgaZ4j8PWurLPqWin97hZmtcfvEA/iT29q4PT/AI6fD/xpeJa2urro+oopD2OoDy2LZ52MeG/A11sz6hptxBc2MkavGcb0IIx2zzgivFqU5wXLNXR5jjyPlY83kmn65peozhhbXSj94f7xGGGOvHFafgfStK+H1xq5062S3h1K6a4do0GFkbkj6Zz+dLcIPHWnxiBWtNQtH3yWm35XBPLLnsQKhh8R6fNqkun3gMDSMUt9w2odo6E9jnP5Vy1YzUXZ6Ho4KXspa7M9Bi1iwFm0tvP+/H/LEk53fTrWjm41OxUzQx+Xt3bzwUP+fSud02yt5LeKWygjhkDYzncx/E/411kJfaI9xCDqwbJapw+Icnyt3R7c7WujnrvSNEmsru11AfaLKRT56yriN8eoFfn943TTvBfjDXLSytBHbxyulududy5yAT+NfoVc3llMs0cmwQH727vgfyr5c/ay0PR7ptGvtGSJpAHhk8vHOcHJ9/5V0Ua04O6WmxLw3tFqel/sXeAYNP8ACMviedFN3eO0cZA6ICcf4V9KtnoP1615j+zVZpY/Bzw/EMDMe5lz0JPIr1Ar8uBzjGRX6Xl1C2Ei11PMqaSt2OLSOS41me4CKzRlg0bjtkfqK3PsaX0O+QNtYY8tuqYrL0bzW1S7baolDMXjB4OT0/CulkjFxH+7JViOuOR9a4MNh+dykZ9DzvxtY2GjeNdJ8SajErxR2r2v2hhxE2chiewxn86+d/2grzxR423xWOt2ej6ZLhrLc/N4Qu4biB8uMH14xx2r6x8ZS7dL8jMOJkaNopFyZVIIIGO/NfmH+0XB4k8L3Vz4Wuri6RdLl87SvOAXdA5ycHGSQNy855z61x4qilW9j3/M9PD4yNHpsfWHwG+Pvwsn0XTdGs7pE8RzFYbk6hGYvMmH3j5jcEZzjBPGPrXmn7V37WV94W8RXngvT4dH1uzktUllaNjIo37lCnB4Pyn6ceoNfBmtWL3mnoV3SFpflVDtJyeo/Gu18LfCe+svh/qmveVFbW1u4LKI/vtjoP73Xk/Tnitnh4wspO3oKdVzTlYn8G+MNZ1XXLPSZtVW2t7hyqzynCICpOGJ/h4xXsH/AAnWm+Evh/qvhUsNcN7G5b7FJkRMeBuJP47R1rxfR/DqXCCaW3FwHUfu9m/PPPauo0bwhqniDVk07TbZmmkIWNI48jIxnqOD9ce1ZV5RS1eiPEVP2lTQ+v8A9jfwvp158LFmks7aS/8At0qNPcRgs69QDn0zXpvxJ/Z60n4j26KUS01SGJhFdW6gMp/ukkY5rX+BPw8Hw9+HdhotxBvulLXM7dAGc5PPtXpLXS2qpceT+7cYfHJ7YNfOx96V3oehGPLq+h+aPjjw/qvg261vRpbmS3u0ikspm5RiMBgQexwRyDnmvD7P4gXOmxx2cVpPDKcRsITlgfTHT6Yr9h7DwT4e1ebUZp9Ihu2vubhrpBJv7Y57exr5z0H9lnwr4Z+Mus6xDYiTT7SRTY2c3zrHIQCx56gHkZ9a9SlWqU6anPVPY1qSjvscr+yfovjTQ9Ul17WLOSC2uLcIi3RxIR6gAcV6J+0NpHibxJostzonlaY6xszNbkmSQAZZfXJ/p1rofiF8WPDfwp09H1W4V7kjEGnW/MrfQdcV8qfGb9qzxB4isIU0tU0CzLtA0ZO6aUOMf8BA9exqKWFnN6vfU8ypjp1PcR5VfeOtX09UkuNXupgP3ccUkpYf7Q56DqORXluu6xca9fveXUuQMIAnAC5z078+tO1C8lu7l3kfeWUZ7A/hT7HTftCiWdiIP4sjnHXmvr8PhlTjoXC6WpSt7U3UQZV2jOOtaTbLFc4wcZ3d6nmkSTmGLYi4C+/vSW2m3GoSrNOGESt8sX8TD0r04x01DcqeSb64Xjci9WPQ/wD16249BWa1yMKQdu5jjPc/SpJJLDSIJHuI98w5ESH5c9uO9YF7q93qkeyaTybVj/qk+VTnqPXNakal261y0s0eDS1e8vejSbflT8TWVHayX0wn1CdjL3jU5UH6Ukcqxb0jTyl6bO/FVrq/S2LF5Wec9I8d6Blsxsu4LtSP+L/69VxfQxzPHGrTY5LHoDWXcXyRrv1KVwQcCFO/HBxWYdWnulHl4toR2UYJoJOmm1p0bKywwntlsGs2TX9twzSXZm7HaKwpIvOm3yenGaRsR/3cE0tRG6urWE0ymVJJVx93JBzVuO601v8AlkoOPuOTnP51yrTJGpI2qc/w9DSSXyqxAx2xwaZR1sepQqpEsbQgn5fLJIq5a6xZtwxZNvHP3tvbiuKj1iSFNh+dSejqatpMspDbeR0Pejbce53ULpcMpSbzAo3LkA9ae2n211uLSNbyn/nmAc+mRXF29zNp+DCSuDnaeldJY69DqSESnZdY6KMdP6UwtYtx3Fzo037477Y8MoOQfTHpWjpuoWssd1PNeyWxEe6GJUz5j9gfT0qpZ61LZblmjiubNmw8bKMn3FMmsbfUXLaZ5ltI3H2WQ/ePUbT2piOq0++iySSCwXP1x6VzVvDMytDc7n3uWWY+h5xVK3nm0u6KNuhwdrxsuCD6EetdBazR6pZBAQpPDc9D6ilcCilnaquFMhlP3ULce9RyQ4cMytGcZA9s8CrTXElvMyxQF3U43cc+mOKma1ZgjX0y7s7iijn6E00LqZk0R8zKKzvxkevFO/s9trREOjD16VcvNRitWZrfywqjgtyefas+TUpvly28r0Ktjr2p2E0SLpsSSkM5ft6U97SOPcIx0ODz+tUvtrLGVcFDgtyc8A09bxZY9qMFcd2rGUXe5akTvCJIPKnjWSJh03HIJGMijQ92gyyLA7SWrj/USAEL9D6e1V2mB5R93tUkMz+YCFAx69646tJVItNGh7b8Ifjhrnw0v4ZLSUXmlsVM2n3DHaME8rnpjPavuT4T/G7w58VrK3gjuY11CeQxfYs4aMg9T3I9+lfl/Y6jJDMrblXngBRgn0re0Xxlq/gvxhaeLvDkkdrq9q6yhG5ikAPIYDBx6818dicpj7T2kTSMpR2P2Gm8QLpt+lnOhCmPcHHX0JI7CvD/ANsL4Y/8Jl8O7jXtNHnX+mlbhkGSHUdce4GPbHPNfNXg39vK8vPELP4tsI7Z55FD3FmW2Rx7QNuwknAPzZ96+yfh78QvDPxB0+S2sNTtdT026gZXCShlYMOQeeMr61H1yq5vD1o+6/hfYI1FKXmfl5eWH9s3MWny+XILyZIYxIxUBmICkk9ME89a9m/a6h8JfBf4W+E/hdoNtBe6vZzJqOpajsUOHKt1YcZYk8ZyB9a5j9of4ay/DP4ianYLayRaez+baSM3JjLHaQR154z1yO3GfD/HWu3WvyJYTzSTRqwuJJ53LyTMRtyxOc8fyFd2H/ePUa5Y3gVbaaC+tTNAPkxtKKoGB/n+dfYn7KeieEfiV8Ddas/FWmrqd34RMzQqzHK20iGQJgHoGBA442D0r4mtZ5LE7s/IwO5PXnFe/fsYeLG8OfGi20uSQNo/iBG0+8TPBVlJQn3DcZPZiK6cTT5IeRxSp8rvE8ke7u3aS1+2XK2uQVh847eRx354x+tV2+16bYXFrBqF5Fa3Q8ue3Mh8qQZyCV6Z98V2Hxg8B3Xw/wDiV4h0EIzRWd4RDJx88LYZMfQHH/ATxXIQXLXf+sw5B59KjDxUovujj2Zzl6rQkgDC/dDKOn0qez1uWxVY5f3sWcEHrVnUrHy0mcttBGQtc/g8Ejp69a7eW8bJam3xHeeAfilL8M/iBoniqwt4719LuxcC3nHyuMMpQ9cZBPY4Jziv0b/aN0ez/aT/AGYrTxP4VjS4c2qata54kRVGXQdMHGQQf0r8p5IWZcEgHOTXpXw7/aQ+Ivwt0CfQ/D+vlNImV4zY3cYljUPncyZ5B59ce2eaynTWqfU6o1pQVkcJeOjxSOo5A9e3rWp4d1D+xNU0TVMBnsryC7G/7p2ShsfjisoQm4tVj8wKVwNijsOlLrN0tvHBDvAk25weQT06Vsr8tmOMmnc+mPg38WW1b4sX+lyx2kdhq0s01tbyP+7juGBcsW4yCFbP4d+a+ydPkW30FbS6ljhBbzmYsPkz976/jX5T215ceH7+x1CzXdLZyJNFG/KsRzg+xxg+xr7R1v4iT/E3wXodxod2LaLUmWOTbwqtnDKe4CnOfWvlMxwL9oqkDp+sR5XFo6TxN8TtMhuJrPTnW4iTf50jNmO2j9Wb19vSvB/iZ8UNI1ufxFpsImnEtj9nikGGiViuQc56E4wcdc1S+LfijS/C+l3PhvT9Qgn1F5vKvvs8eQyEDcxb+E9OCa8Z1CRk1W4aKTCuVUbhwygAYI9ufxNb4TBcq52cnO+hY0WRLZBLjbtAG0cqSPrz+tO1K+hVoPKT5tzb2/3qgj/1KKuQ2/ex/veuKjvbctFvAPXn3r3VZI5rNvUf5p8z5TiL0qC6hUs0sfCKAWweaijkKx4BVhjrT4VzIUOemPat47GsfdL3hXUobXxfo11dAfur2HM7NgKBID19Pp0r917WWOWGN4sGNkBQ9MgjIP5V+AGqWqM8sTbvLyDt7Eeh/wA9q9B0f9oT4padoJ0K18f61HpRTyzaGfcAv90MfmA/4FXbRkqTlNdTt+JH6cftJ/tAeG/hqyRz3kU9/wDZ90UcbBhkk/eI+nT054r4vtf2obvxz8VfB8uqo62dvqUSxKicRhpVHyAfhnOPbNeX+HbWw8UWmlanrM0iomoLZ6jcXEgLyxuRmQHtjP44wa6z43fs66r8Edc0/UrOaW80eSSKe1vcDdG4IbafUjGQT6183WjF1XOa3Or2HNG8T9IvF2LbUN6Ar5iiQkdWBA61x0mmtJDNNI4ATMgj3dq6i4uBeaHoF+7CSN7GIrIBlWOP1GMVxmrBpJGHLup3BF5PTgVxYmMU7pHiVFaVj2LwdevN4S0sxSL5jR7Qj9GOa53xj5VxNf2Esata3SeXIrHgFuM47jnNavgtoo/BOmLcL8nK+YvVDnsayNVsZNU1e0jaRZpFlVvOA+V1DBmHv0rHGQ5qUbncpe6jjpJprTxMkFujSR29wIg3rgAH69/yq5q9vb6vp+o6ZLiaK6hkt2VgCG3KfzrNW4lbxJLNs3RedLcMy9UUhiD+o/OiLUFlvnmRSkbMu309Dg18zSVpqw9TwP8AYSuJdM8Z+L/DrvsuI1G1W/vxuyMR+lfZtuzW11cvIuFQKhPPzN6j86/Oz4O/EK20H9rS5vLZwLO/1e7tc9IyHlJH6qfzr9CZrp7ya9dGJTGYlPA4Aqs0pqnJT6s1ouyMy6ee71Y2kC+WrfOzScDaByx9q/PbxNMmr+MNedpNpS/lKMSPmUs3f6192eK9Yfw54L8Sa3Pcqh+yyrHu5CHB2hfqa/OO5hnMkzI5837xyPvHqc+9d2TpONznrNWszo30U3kIdI1gu4j+7J43L3BzUml6gZlMbjLRfeBHIPpXMWmtTXEyGRnUxuA0ZJG7B561tXEizTJd2oMOB5bx4wW9CfU19TbQ5OU87+NjvHeaJGeGXzJBnuD8v9K5axZI44yBlSvArX+Jkktx4ohimkLrHGpAHbJPX8RWTbjy2GAOOB6Yr16N+RGyTsW4ZN3y4IK89K9D+BPjaDwd8WdBvbzMNtcMbOVyeBvAA/Ufma88jYsrc89yKZ9hutXuLWCwjklvJ50htkjwGMzMFQDJ6lsY9zU1oKcWmJptWR+r+j2sMyrIreaHUNGzZ27T6e9Vr+2lm8WtEhPmqYwBnaPujPPauV+Cevar/ZemaLryNHrFrbIJI5gN0bDAIIz1BB74OODXrTaHbw6xfapdzxJbwxqu9jxnaDk/njmvnZ0lOHu9GZxjbc+X/wBuTXtQh0fw7okEZi0ictJNJHnEkiZ2oSPck4PpXgHwR+LEfwj8aRXmo241DwxfYj1az2bspwPNAVSxZBlgoznGME7a+7vjV4Fsfif8Ob3TgkX2mJTPbSRjlZAOOPfvX5t61o93peo32n6hCY7iA7JAy5B7Z5/P8Riqwla1RwKl7vvI/QzxH8BL3Q7SDxn8JNfuD5qi7t7ES74njIyCh/i69Gz1/Aen+C/2gPDeraTDD4hvYfDviCNAt3YahmEq44JXPDDjPGcZ7V8ofsL/ALS8mg6pb/DHxJO0lldMW0e8mblGI+a3yx5XglcDg5z1XP158UPgf4b+KkAOq6epu1IKXEYCyYyOM9+n619BKq6ac6C33T1PRoyjUS5tD8hLi5W8hMMqlx1DNwR9PU1pXXwpurjwudUs/wB7F5XnKqsCo56Y7HHrXXfHD4Ea58E9ditrh1vNIuC72WoRggSJ1IOckMM9PxrpP2dbfxFqmqP4ZsdNGr6ffEkwvgSQkjBbceMYHTke/r5f1tRV1v2OujgpKbhLY+cra1W1Z1dHaVWz07Y9en610FjpLWtmZbgBsNv3EnIx0z/Kv018Pfsc+EtG8L6m2pWUGo65cQMqXMifLA2048sfw9eTxmvze8S32y+l05WWNoC8L4OchWIz+neu+FSc/jViJ0oQd4O9i5p/hO71K4a0aKWeUI0xkUElwFzn6Yr7+/Yj1iw0r4MvDcSqUW6kEqkF2BwMhgPbn8a8i/YX8Hw+MLpL68VpBYxtHtKBlcnIwe2MevU1J+0FNovwI0XXtP8ADt/fab4uuNYW7tLe0Zvs5tzjcWGNqbckdjkYGRXnc06lRVF00Ouq6eHpcj1b1PE/2sNF8PaT8YNWt9DlhvbS4QXTrGAyxSMSCuRx74rifBfxr8YfD++jOn6tNfWMYCNY3JLxlAfujPI44rnbrfdM0048yaeZpZpW/jdmySeOuc8e/aqMNu010wjVmiHBZuBn2rodGDi1NbnzNWXtJNo+0PhJ+174d1y8gXWLe50TW1wqfNujm9FB/ocV79qej6T8UvDN1eWKtHeq3nsM7ZI3Xqy/h1Hv71+aHhW3S317T5Yh5hhmEjdP4Tu5OMdu/rX6ffCn/hGLe1s7rRdV/tVtQgVr5VcMqsRyf9nkkEZzXzmJhCFT2cdjuoUFKKlc6Pw/o6at4Pa402UxXkgKK8pOEdW2lsD1rU0nw/qjWZbUdZd9oIZ0j8sHpg81taJp8elWRtEiIjtxlNufnXkg+5rhPiR8ZdH+HN7FHqQa4uZk/d2UIyc55yCR271zPBUYctSoraHapSTsjtNP8KaXfWpBVrmJvlw7ce/T1r5T+KnjPSNFuPFvga9SG3k0B1vbC5uCPMuIyN/lDI5K5xn0Ar2DXv2uvAXhuwiFtJNqN9IgdbW2j4BPUFjgcHr3r4b/AGpPiNdfFLx8dZu9IfRZYLVbdLOTO5kBZg5zg5BY84x0616fs6MqcYwepqqlWPxH35+ybrw8Q/BvT5yfuTTLt9g5AGK9k6Aj8DXxv/wTl8cHUPCGueG5iRPY3Hnxqzc7G7fnmvskjv619nltT9xGHbQ4KnxXOX0beviDUOMqzsD7c9a6JgI5AwPyt1ArCtVaHxJd7H3buWjJ5bKjp9K3wN7DHGT6dKnD/aXmR0PI/wBoD4jRfDefwhqE0YmSTUxDKnQ+W6EFvwYj8BXz/wDtkeE0+IHhk+KbSSFNX0KP99HGwKyW7EFhn/Zzn86X/gor4gks5PC9n5+dxZwi9R13fiR0ryj4VftgDSdQFr448LJrWktbi28zT41LsuMZdXbax/LIJ49fIxkZyrNoiEXUlZvQ8l8G/D9JNOvteu4/J061lW3t2KkLNcOQMc9Quf1Ar611fw7oOj/D3w74Z1UpJZXCrBPGzld4IyRkepxXy78QviRpev61Bongy0mtPCllqLXtjBMjKzSScGMgnlQSwGR1xzXueoeHfGGoalos3ijTWs7e3AdWdlYt8ucYU5/HGR0478daTW57O1FxhsctD4LtdAsY3jUqkDs0eW+bBPAPqcda9v8A2VPh6tx4pu9elgD2yJsHyDAfrye/GK4fVNIWa4LltobB2tjaPT86+lP2dNKuLPwOZFTYtxIXO4dTjAx6VwO9WSha6PKpx5W2d9qsskl0likexGYZZT/D3+nNaflqqhCvAXG31qSCASSbtyswJzx69RUtxD8gI6jg1108JN89Vm7OM+IF7r+gaZB/wjVvakSzBJ5JzzApyN6joxyOh9c+1c5eR3a6fdyWzb7vBZpn5JbHJruPGTGWytoV4EsnzD2AziuQ1LWbLSNPurm5lW1sLZGknlfhdqjJOaxnTftuS+i+44MRK/un56/Fy61fTPEOra3r0U6Ca4aG1kuAQJMDgDPXHU8fSvEL68utWuheXYzMwKhVGAuRyAK9O/aB+OP/AAvPxkt3DH9m8MaYWTTbfoZ2yQZWHrjgexrzSG2uGbzGX94/OzP3eelfU4Khyxs0Y0aSpq7H6dYISXuMJkk7n6KMdfxPFSXWoG4VUt022sfIXHMz9mPsKh1G6Itfsy7cNzL3zg8DNT29m87eYCsUUYyzt/KvZjG25vzDbG2vLy4MgChPutkYUfT8K0b7VBZ27CAkgDYJj1HuPQ1R1DVPMVFidbe3jGFReC3ufWudn1Ka+mMTSs0QbGQMDd6VYlqya61CW+2+aQypyF7fWo0m8yVgRul29cYAFRrbu2ETBbOc/wCz7+lUZLx7pVigG3nEjjsKCiW51QFRDbKXZc+Y/XFZUd2VbK/vGYYeRuqn1FNurkKwt4H2RbsFyMF6gt47jUpPIgh3knAUDDE/ielMgRlKsxdjK7E81PDp9xdIViiZivXA4FaraRFoMiNqcgF3tz9kiIP4EjIzSTeKLlrcw2qJaRdhgbv0oENh8NuoVdQuo7JSQNwPIGM9DU9to+j254uZL6ToxZcr9O1YzSzygtKxmLHOW5qT7TIWCxoRJ0yRwD60DRvNPoVuHjXSxNtP31PFSrqmlxgLHZqrH/Y6CudVr8spOzgZyQP0qFdUuI2AlVXPTpigrlO9juLORl2mNj/ujFR3VjFN85tYXhwTuQc5zXBx6ou5xIrxbTjMR4FbEN9tAKXokGMcnBoJsbVxodjLH5QmlU/3l5VaxtQ8J6ppv71CtzEOBJCct7ZFPt/EBtZM3KMB/exwQe9b0F4F2PBJv3dcdaqwXZz8F1K6qsitFMB80bDHfrWtHc5kEkGYmH3Spx07/nU15DHqTBrxC7K3yyLw6/Ws2aB7ElWPmxswVHXrjuTQBszXI8RIUupRb6sp3LJ2uBj/ANCFZ9heT6XdCKUfMPkkjbg/hUbASpt3AOg4YHqB/WrF9nWLeKWNs3MeN2BjPYZ/CpKsbzXKyW6zRthNuQe+7uKyI7oaggZiFEnIZhz071T0e5DLcWcjlQ3IP91gTTorVlAdpvLjYclulWiXuSmOK3GEcjHRmHBqRIbS4C7p3x36cVBMsccfL+YOoOOP/wBdQ/KcsvyrjO3oaoRZn0xzIoEnyEEjPHHpzVJreeNiCQQPvetSTNLw4mIXpj71Na8ltyGliLhhnd6ioAhW4e34MbFc9RxV2G+t5yAkjq2MEMKa00FwvzHBxnbiqk1ofMcoMr/CenHrUOJaNMXDQ+5bp/jVrT7nyQcHD4Oc85/+tWBBdXFurKwRos5wR8wq7bXYvE3oNjf3Sea5Z00aXNqWFb61JAZXPUZzjvS+G/FGueB9Yi1HRdRuLC5jYMuw/KcHoQcgjgdRVeyumQlPuuRkc0y6hebA3Y9R0FeVUw8JX5kTyWfMj034iftJ+JPi5p9hZ+ItLspdTs5Sy6pEdsjRkEGMoBjHQ5B6jpXkeuXH+ns2cHaPm7ip1hkR8A9O4qprunvJJDMhyjKMqox04xyf85rCnTp0XdaIKcW5FOT94ybgzFjwPb/9dfdP7A/7Ndlrmmy+OPEULOrOU02DOCrq2DKfdWX5e3fHNebfsz/sV6h8Uo4PEOus9hoXmoIo9oDXOGy5XvjH65r7e8dSH4H+E7aHR41FvAmyGBCEVPc+tcler7V3t7iPZjRioct/eZ5B+278K9JvPD51+zaIa9pbo1yqsEe4gIwW56leG/DrXwLJC1rGsgGVc5LDocHFfTfxS+Kc/wASNLvruUxgwI5MLuDnA5XGefzr5Qj8YQwqbW8iYQBwovPvcehx2rfDR3cdEzyMXheV+6zT1BfPsGK/3DzmuN2hsMxzu5rrWuIJLZzBIrxMp2snTNcu0eJAGyQPQV23aZ58L7Mi5bHc0p+9heBTWkCyHjHpU6spVtw/edQauVpIsljZ/NGWyT2/pUV5DFf3KPydp4/wqa42w2MkiowfbvY9iazdLvDJdRIw27s4HpUKNkbR01NtcxgBstjq3oPSuz+GviuDS7+cX5nFrbxtJAYWbEUh7gZwMj0/WuJbcnybuf5063uDCztLyCNrYGOPaueUFPcl2Zd1Fob6+ubi2Zkt5XaSNX498N+ZqrGoY4PzY+7nipLdWvpNg+UdSx6fU026tzbzNGJA54LMOlWoKKsge1yRTsiZe3b2+lGnySyOTu+QLj5vemKhbBPIHPpmokj2NsjySfmHPXFQoktFWBdjNGpyMkJnvVjzAZFw2Dtx759ajkG2N9oy2fpTluN0ATC71745qtijTtfDMuveH/FOrROijw7ZR38yswy6O7Jge+VPWuXV2UYxyDg8dK+i/wBkLQZfFMvxVsli82O48IyrM3/PIq0mxv1bH+77V832qt5aBiOV5C8AV1RqJu0TpjH3Sdbi5dfssUjJFK2No6E9+PXof1r6psf2m9L8YfAmfwf4puribxNbW3lwySRblcr9x/NAxgDjJIP16180+ENT0bSPF2i3fiPT5NT0GKRnvLNUVzLHscAbWOGw5RiP7oxg52mlrU9vdahfXFlbyWtlJcyS28T4/dxGQlE9MhSBkZ6d6yrYeNSOptCrKmj9Z/gfrsXij9mXwhfGT7TcLCLeNhn/AFinawOfpjmtC4kj0tJDEolu8GNcjITI5b8B3rx3/gnd46tfEvwP1vwpKpkvdCuGuNq/885GZkYfkf1r03ULqSIyTZK20xI68sPT8a8HFQ9nZHn1d7nr3w/X7R4Etk83Yzbhzg5J7cisOyuYlmebDGTTkcyRpnLn+H+tavhe3huPhlamTKRmNnDKfmBycHPrXlnibxpB4Vt5rfUryPTYrxHV7mU+WpiU/OwbPXkAd8muXG39nBeRunaxFaai9vZXOqvEVN+TDFgncu05ye3/ANYV5H8cvjRH4M0mO1sNkWp3G5II2JGzKkmQ+3ccc1X+Jn7Q+g+HNGa20eRL67aIPHah+hIIAHPBHc/zrxPR/hPrP7Q3gO98XWGrlvEOm3UlrdWFwT5bLtDxhD1U7T09T2ry8NhLS56mw3UV7I8OS7vdP1K31KOV/tscv2gOT8wfJOeO+f5V+qXw58aHxp4Bstet5BPDqNrHJK4A/dttwy/mDX5czW8tl5sN1Cy3MJMcqHqjAkY+ua+z/wBhnxTd/wDCIa54SvT5cUQa6slkUgurE7wM++PzFdOcUYzoqa6HRh4uXwo9n+NsLaT8HtdbzXkt2th5e7A5YjC18D3jSW5ViRukywUH8q+6/wBoqQ/8KKvSWCRQPBuRs5JLqOvTBr4ZbzWkGoyQ74PM2xozDIHcGuXJ0uVmeLp8skQXG+8kjZ0Ecyr8sq/d/L1p1lq00kn2eWQyOnDNj171Z/tC2mkPkJ5W0EmGXqp+lQyapbCOSYJGpSJiBj7xxxX0kXZnHdI8w8aXQ1TxdqEpIVIyLdFBycKD1/Gs+1LZWI9c4/lRcEzSPdNjdIxLH3I5P4GtPwbbi88VaXFgOry8qe+FJxXs05LkNoy5hUXYu1vlA5561Y0bXI/DviPR9UnWU2tjqVndSlELMESeN3KgDrhcd+g+tdT8QtDjtZI5o4f3XG5+g3ZwBXETRomV/i9e/wCH8/rTi1JGj9x3R9c/F74wX1r8SNX1/wAB6xbzW9vYRa7cRyAKJInBHkqOx4LYGCNwJ4IzU+L37ZD+PvAugW2g2V3p2uR3KXOsQvEwjjMYwiq+Nrhzg9+Bg/NxXyfoni/UvB91etp8kIN5D5Uv2mMy/ICfu56Hn9Ppj0X9mhdP8ZeLNT8M+IZD9l1i3ZYznBWVOQB6cc4/2RXn4ihGlBswrzuuY/RL4O+L9G+LHgu11PRZxaXVxGn2u0YnCSD7y9PX9K8S/aH+BJ8STX93p6+Tr0C52A4WaPnAwP4h2PvXFfBvWL/9m/4oN4Z8RKp8O6vJvgvZeI9w+VZVOeAfukeoz0xX0/44QLd2t9AxDSDYcHIA/hORXyte1O1SnucqqaWZ+Z95DfaLqAKmW01K1fcrfckjkXnj0YHH4dciv1O/ZN+OS/G74XQ3V0yLr2mt9k1CBDyHUDa+P9pcH8cV8w/GP4Er8R7q+1zS1S21pIssq8LcY5+b3Ixz7Yr54+HfxC8UfBDxXdan4dvGsNQliNvc2cq7klwcAspOdy4OORwx6549vBY1S6nTSqdD61/Zx1i7+O3w/uvDPi7To9ft7HYbeaYZIwMA7j3HZuv1r6C+Fvw98J/A/wAKvNFElgXy89zOMPyemfTj+Wa5r4E+IvB/gv4A2msaUYUjtYP9NII3+cGG5Tn36Dj2ryDXP2wvAfjSDxP4X8RLezeHLqNjb3UKMHycFUBXkHOcMf7pGegqaUI0eWpf3vyPq6k5V04rSK/E6T4t/tR2ej+EfFOv2+qRrEga00u0hcNI0g/iOD0PXJ4A5r847rWBrmqXWozbmkuX80qwHJI6HHuePzqt4usDb6m0qq0dlMzeVM6Krfe+UcfdbH5EmqdjD9ouCquybjgtjBA/xzXsU4e45Te55taafux2PsT9hn4n33gi38YWVlplxrImtlnhjt1LuJVBHTuCGHbHy9sc+P8AxA1LW/EfivU7rxEsy6tJMfNjuAQ8RJ6bW5GOfQ59OlfaP7D3wfbwP4Zh8SXtu0WoatvYRntGDxgfTn8SfevYviL8C/BHjzxDJNr2kQSzX1t5YuIx5ciSKeGVh3x6+lcuHpzlH2ienY46/wC83PyUu9wUjuD93t05/wD1123wv+Cfib4kbXsrcwafvy13KCF2+qHHPFfRC/sTwf8ACw7iOPV3u/D8MpZPMGJWQDlTjjrx719F6X4bsvD+nQ2Gn2yWFtENojiAAPvXn4rEzk3GCseVy8jPE/Df7Ivg7Q44BPPfahcttVmdtvzHkjA/n6V7H4P8Oaf4Hxa6PG1pHFIWRvvYyOevTpWlYWatcQL85Ctnk89DW5ZvBZ4Z4g4OTg968SNN1JXkzenUktUcf8cPjvrfww8OWGo2Gim7ilcRyXW4bI2z3Hv/ADqD4Ya14e+N/hiDxv4v0yyiksy8KC4Xg4+83PXPQDn6V6HrvhzTvGnhe90+W0j1C2nUB4HIXPOcex96+HdWurLw/wCKNftLaObTvD1jcuYdNkfcI/u54JJJJ3Hgng46CvRnSlBqUvej+B6NOurcnU9K+NnxW8PeMpLb7NoFvbfZp9kFywBkkAJAOMDC4wQO5rV/bi0OPUPgD4U1JYo/OguYGaZIwXCvFsOD1x83PvXyvqGuXWrao+oTERxoTsVP4VB+X6+vFfQn7WnxMjh+G/w18J3E6JcapbLez8ceXGqBcntlnUfhSoxlCtPmXQ9CMfaRVmeJfsX/ABI/4Qf432sayE2eqIbOYHPXGVJ9x+lfq006xwrISWXHbk1+YPhrRdK0++m1q0sorXUliUF0bBJHTaO3J7V94/Cf4hDxh4HsrjKzTwARXAz8wZevHavbwmIdKTT2djHFUPZK50s0v2fxdE5PzzJnb0I4xj61vyXgWNJIx5kTfK2ByOf5iuN1a8/tHWLWeNhDP91FY5A54J+ppL3xEui6FqM1yxgmhyxDdAwHQfUV1RxXsnI8q58Bft2eNn8SfGb+z1YPHplrt+UfKGLZHPcgD/Pf5nTVLqyaSa0KiQoVXkeuRk9cf5+nqf7VGl3eg/GDUTd3KXb38EN8siAhTDJuwPwZSK8nVUkwzZYHHDHOeBxWlN88eaXUuEeRanu3hH4U+DPHXiK21HQvFl7ommW8FvM91ewFvs12SflJfHylwDzxnIBIwB7T4R0jxD/wkGuy+JPE7+KDFOllaXa7RG8QXduVRwDk7Tj06njHgfwv+MGjeCfhL4j8NXdjcT6lrUxiF0iqVgjbADN+pAAJ68V9B+F9Lh8N+HbHR7SZLiKCIAyxgqCzDJOPfP8AKvn6qlGbVTU9SpUSp8sFqzpND8Op4o8V2emWzFlkcBtowP8AaP5D9a+ubDT4PD+k29laxiOGJAiqvHFeVfAPwYkPn65LblGceVDu6jH3jivYLhhuAPWuvC0/3brbN7HHtZIZZ27LGzMclju/+tVpSGX9MU6MfuwM846VXmzBIGY7Vzg170IKhSjbXuQ3qcx48jcGywAFZmAx/e4/oK+Bv22/jUdU1CL4eaNcMttCfM1SSNsKzcFY2IPI5yR6V9i/tW/E6D4V/C2bV8g6h58cVnET/rJD1H0Aya/KHXNZn1zWb/WL/at9fSNM6pwo56L/AJ68/TllhY/WHJbM5XHmlczPIjhdQFXco6549qmjuBp0Jy26aUnv9wY702K3jXzZJm78DGKjGJrjzPlAxyPWvbpxUUVLTQksLOOZGmmYrGnLA9T/AI06+1AzKsMQX7OvPHG71zVSSFrrbEkhWLOQf51m6vefZ1W1g6Kcs4HccVvcgjvr77RILaNQsCkAseGbio7fKqgQABmztqOCJXZQ3zMOxp15KbTbHDtMzdOPur0J+tMtEd5MzK1pAxjjKkXBHUgnOKzbq88tXijwgddsmOO/FLeubGNrcP8AvH5llPOfamWNu0zh3BZB97PXHrQJjtN0mbVrgBT5cAOHuG+5GPr6+1aNxf2um28tvp4bLjBuZPvMKS81j7PZtaQsPs6nLbBzIf8A61VLaze4XzZI9q5+VT95hQQVI45bo7VBkMYwBu65rTt/Ds0rE3GyFccHOMH0q+Y4tHsjcyEB8fKqj72e2O9Zv2ifWLdFEPkxscsXP8qa1HYn/tDTdKQxqWuLgHC7RkGoEv7yZ2KW25GOT/CB+dWoY7SzUeTboJT0lbnH0rQt7E3jYYFd3zbyadgsYM0UrMN37tuwHNK1vBMQXBU9N3oa6Y6bp0Mau9wwcdVZSS30qpdWKbWFvCq7urE/zpWuFjnJtL8l3JKyjsw9Kh/s9GUCJg2DxnrW8unS+XhI/N54VFPXvVabw/fNcNttmROzcc/rRyjsVBaypn7Qolj28YOSKsQySLkrKxximR6XqtpIoMROWyO/A7E1fjjkklRZrdoCUP3kx1PWm32KsS2+tr9yYH0PfB9q0GiE0L8neg796yrzQZHuR1DoNwK9GqezujayKk/I4Vmx04ovcdizeN+8jaCMRRGNQfr3P5ipgXt5lmhfZHKM7PU4xk0y1ZF1CHcQ8LyjfnsKkvYgrSxSr3/d+ic5osT1M66hFlIt0H+/1UDj2rWaZbqxViirIQW29qyriMONgLMD8uD/ADpY7hliWMHIUHGe3NRezG1c1LFWxyysgP8AF/hSXEe6bPJONvA/WksZI1UtN8vy7hjuewq4106Ro1rbC4wCpJOMeh5rUzM25VISUVmDf3G6j3qKeJhgE7lxgVevZLu+AkeGGJh/Cw/wrOMjKR5vXOMUAQyRruLnhs9BSKzR4K5OcBue1TqE+8R35BNRyQmNtwcMnoPekUhf3cmM8E9famPa+Xhl+Zm/Shj8rLxio1uXjXBOAeprCWrKt1LNvdPv2P8AKF6NWnDcPM21sE1ittkj+Vsn1pBM9vgknb1+tctSJpF6HVwwJIyxuOWGUx/F616j+zf8LtP+J3xY0TRdWlZNNkkaV8fx+WMhB6ZwQfqcYPNeP6bqEFwvzMS6t/DyE6cj8+1fdHwj+Nvg74F+DNHsD4I1HXNZi3I2safBHI07OSRh2IbknaB7YFeDjI6pXsjsw8PtJan2ro+lWeiRR2llFHZ6fp0IiihQfIuBnt2Ax+Jr5/8Aj54vtZLiRrl1EER2bJJAqlV+Y8k4GevrzivDfHf7YvxN8Xy2/gzw34Tk0LXb0u5W93LPJkMcor7QFG08k4ODXyT8adL+Iuk6hDbeOtXvJJ7tDJHbSShlfnngYHAI65pylCslSg7JHZGnKjepPUq+OPG0cmratbaYqC0nkkaHr+7iJIUL6+nPNefSMWj2geoHpSzN5ZzksexJyeOlVrrLRkocADLD2r1qdNRjY8qc+dtsu6bqENrc+TIxMLnBGeU9DWtNCW3Mrf1rk2YbNz/KdvLAdfTmtfSdUFywt5SRxmOToPoTSqU+qOSVr6GhcIzKhBBKjBqEKy5JJzjO6rnkfxk4Xdt981H5bNNt+8PpXPfQlai6pn+x5ifuKMZ75J6fWsCxkb7dEQFIVtpPrnvXoun6bYaloHiCW8uRa/Y7UPD5mMM5Yjgd24/IivO4ZGdkUgRNkHJ4AG7FWk5GvLZHSTFQF4IZv0pq7WRVOT6Gr1zF+8w2CF6HHQUeWvmBdvK1zfC7GJHpcD/apFUFR5Rzg+9LJmJ3XHyk5Ynr9Km09dt1KzcfLz2ovAtxcMUz5YIAPpTHy+6Rt80Ddj0A96z5G+cLG2AE52nnrVy4R5I1WM8bxn8qisbWzadYryZoIsEs6g5BxkD8aSJ6FWRz5wbO4A9aJEMikr8vPWmsVJAPK+oGKeqqy5yeenNXZMR9Tf8ABO23+0/FTxFATi3l0eWORc8MxdQp98Yb8/y+X/FWitofiDUbfAVIZ5U+UcDbIUxj6ivrf/gnbo8ja5431ThYha21oJGGNsm+Ruo6cMD+P5eEfH7wvNofjrxF58U1lL/aM0yQyDBKOxdW+hyT/wDX4rhp1FHEcp10tUzzHR9PtL/V0F/cta2YQtNKpwdo7D1JP6Uuu6haTXQWxga2s48CPzHLl/U5PrWbcMvIjJwvIPcjtVcSs5Ck4GOOK9vlUkrCcrH1d/wTq8bL4d+OM+j3E3l2uuWTWYBbChxllPv1I57kV9r+PI/J114F2iK0Hl8DBZs8mvyk+HevXXhfx3oOo2EvlXFvdxsr7sA7Wzg/iOa/WHU5Lfxla2GrWZ82LU4vtLyI4IV8AEZ/zzXi46nfQUoqVj0Oxiey+Heji2Yx7o1V16hlOe1fN/7VXizSvCngOUtAkutXQayt1KA/K+QW59Bn86+mtckOh+FbXP8Ax5x20eQeNrADB+nFfn9+1J4x0T4g6FFq2n6nHLd2eqPZy6epy3llPlZFHow6n0I68VyVo3cYmdSVtD59ktYpY0jYDeMHeOp55Hv0717j+xr4uk0P4hap4ZmnMdrrkIMcbfd+0R5II9SV4PPRBXhty6SLhTtyNyv1FX/CPii58FeOvD/iOH530+7SZ1A+8nKvj3KM36VpVppwsjnvdnun7X3whWz1K58ZaWhWxk2w6hwABIwwHIHYnAJ47V6J4F+IOja98FbPxN4dtPsXiTwisX9oW2fnkQ7RMxx1Up8wOO3TivS/jtdaVqXwi18tDHsutLZw5+6crkc9znpX53+GfGmreCYNRm064KtqFobO5jz8kqMuMsO5Bzg9uexxXk4eH1mlKnN7Hu4Sp7L3V1PuT48eNB4q/Z9kvdLbzNOvLi2lEmeP9YPlPPr296+R72RbqMbWVUhXaEboT15/GvTvh74f8YeIvgDFp0ARdNtUN0YmP7y62Nu/d4HORjHrivIINT3xyNCFJmlxsxnAxjn8arB0Fh24pmGNpz5uaRc1CSPUo0u5dsN2kahinG/BrlNY1eW1hKIdsknX0I+la/nLb2cRuA0S/c8zGQe9czqkwvbhLiM4TmP5/WvWjC55beljHMaqio5C/LxzwM9z6D3rQ8PO2heMtON4Hga2uY2dWU7grDGcdeQePbmq10FljKsBtwQ3HYivZ/2hvBgbwX8MfGgDzf2hocdnevuzulRAyn8QZOvoAMYrWFZQaixRqOm7Mx/Hmsadc6bPHbzxuXcRqA43A9enpXmEkZwMVSljEKl1HOdq9BxU9vOZlPzjjlj0A/z/AJ9a76djqcubUg1GNMb2XJ+716CtL4f+I18M+MdL1WFHL2d1FPIF6tGG+f8A4Ftz+BqndxrdWMuDuKjdjHNZOizBNZtstwxKMc5Az/Xr+FOulODic9RXjY/Tbxl4N0n46eA/LsDCdQFut1p7PwyOf4Nx/hPQ1kfB/wAeQ+LdFvfC+p20mneJtKxBcKSW80RkgMPcY5HuCMisb9iz4waR4i8MHwX4mMa6jpKhLKdpNhkgzgAHOSV6H2Aqz+0D4T1L4a+LLf4leF51v7ENHb3oXG5skDkDqCPlz2wK+GrU+RuNzJQXJqegQ6gjR29jaxvM8hAY4OC2efxryH9oj4CxeIVi1jQLGS211SI54Qm1Z1zgtnpu/pXqGheI7XWtPtNW0yQPBcqJofLPIJ4P0wcj6jHvXQaPqV3cXk0lyXvEtwFKuTgbu4z361wU5ujLQxi+V7nw1ct45/Z78fWtj4pt28rat5LppuCbe7Q5GTtwMg9yDjA7Uzxl8Zn+Ido0K+FNH0O1iuBPG9mG80HGGBbC53Z5GOw61g/FD4l6t8ZPFt54i1obJmXCQA7liQHIHuM9v1NaXwj+E2rfEjUjBaRvb2CtunvZOUjPTGT1OOa+rlKFNc80ev8AWqtrN6HIXOtW00b295bh1YjcrcqOOBn1A/8Ar1t/DL4L6p4s8XaSkdjMNKuLhQbiSM7NuRxuI5PHvmvu3wt8IfDXgnwvHpkWlW96C25prlA7TP3YkjJwOnpXffDjRLa58SafClqkEFmzSrGq8KdpAOPyrlljpVLUo6XJhiLysz1O109PDvhvRUhXKWIjQnAG1SNrdP5VJ421CGw0F5XbEm4eTjuSP8DVtbeO9XUrGQFTngZ/hI+Uj8Qa8w8fa7JNfJaF/Pitfl+XkMeOT717eIrfV6GnoKpK3zNHwzAZraa4lkCqx28jv2pt4q+ZujG1e+OlWdBAvNAs1VfvZkbb056VJe26tmNR8v3S3vXixi5U02ckldGPaxhr+AryVzuHtg1s2F1Dbqq3UP7vGAxH+r+tY9uhh1ZAM8A/KT7V2Fnbw3U0cN9HmGVQySEYBboPxrChBufKty6avHQo31hLoezU7AlrbA8xVbgjPX9etfE/7S2mxWHxOuJIMpbX6CYsOpOACQa+39Wjl8Lz+WuZdJnBBiPzbPXFfGv7Wtuum+KNInkl/dCKTZ7Kcce+P8+lejWjypRt/XkS0/axUWeC6rFNLahIIySjrnYOcnoMDkZr0Hwt+zN4w+Md4fEXi/VrjRtNt7URWt3dYEmEX93tUgAJycnGeO/Wui0dvBXwr8A6f8R/EGp2OsnzlMGhRlGM4Y4OA/3pF+/jA+4BXz5+0F+1d4k+LmoXWm6Rql5pvhMn5LEhY5CM/dYqTnI6c8j0ow9CpWnd6I+vo1KWFpe9qz2j4lQaL4R0nSdL8MatHrWq2AJ1W/ASRVDAgIMDGQcnA7Vq/s+/Eh/hhrTw3N+99oWqOvmy5/1ch79eB618c/C3xUfCWsSW7A3WnXS7J7ZSASR91h06c9PWvdvhmqa9pP2ebe1nBM4CNgNGpOcZA5roxGHdFXMXUji/dP0guJodQsbe4s2VvlVmOR0z09q8Z/bY+JX/AAhHwk1TymEd/frHbQnP3gxAJJHORnrXivhn9pa++C8aadrEE17o8zsscuczRhR0APUH1NeDfGb4van8cvFiajeq9lodoc2Vkx+bGAC74JGe2M/41lRpyqO8jxKtJwfKg+JWpaT4ys/Cuqw69JqOpLpMdnf210oWeykhAIViByDubHXIw2SDkcbcNDJsSAZUHG7sDj1qhNIkzLgKY1PCYwBj0/H+Z9aFkOY0Azk7SoPGOOfrXtNckbroUo3Pbf2VfhHH8VviBFaXkTS6PYZuZlzhScfJ0/2ufXivuGz+A97ouqW8dqFlguDhn5IRc85/CuV/YV+H8fhX4Z22tXMX+marKzjK/MFUkL+HGfxr62RQE6ZzXg4bDPMqspSeiZvJ8pU0rTIdF0uK1t1CIiDp3OOTUWWmmznpWhPIVQ46k81SsSswkI5OcGvYxlJKcKMNkiYvqTQsWZSTgZxTdanS10u6nYqoiQltxwOn9eBUix74Gj6HGAfSvnb9r34/W3w1+G93plnJG3iPUG+x20DMu49A8gGckIDk49vWuqElCl7OXUynufGP7UnxkvfjB4+W0EhXRdEZo4owxKzS/wB7HsOK8XvGD3J3/MB04GKgSRo4irysz9XkY/MWJySfcmot4VctgDb1qqFNxtci/Kh17L5i44wi/KffPOaqMQ+1cbMd6jLPdP5aKSG5JXsOuaWHb9nkndWxglR3Y+1epHREMfq18dLtEEcYaV1YqTjIUelcwGM7mRnIRTlvf2qeSSbUrp9sgcZ+/jIAxjirtpax7N8i+XBGPkyetIEhqD+z9NE+0NcSErErcZrKV3jiFxM266bkEdKmvLj7dcGZyfKQbVHpWdcXRupNwGApwMdKYMaITeXeMb9x+Ye9al9JHp8LQId0rYzjnC9wfxp0cI0m1We5UxySAiJV5OR1J9qbo9nGcXt4p2spZBnJYg8E+1NIV+wabp/2cJd3MYEzKWSJugHc/Wrkl7b6cDPPhpXQrFD6nPDH2FJeXAWZbpgcMfkU85wMCs9k859xQSljuz1C+30q0rbgh8lzNfXAuZH8ydV+QbeF+g/rWrb6bPNCGlYRtnAX+I1LpNq0TJDCqtIw+aSQZwK2ppILGMM53Ss21vQUxNkMXhu1tQzzuIig3GWQZOfQVXfUvM+RAB2WVvvfgKq6hfMzM08my2QZCk/p9awbrXjNkW8TKmPvOfmP09KYXOgjt0WTzLidjzhdx9fWkGo29pLIodJNgxwc9q5CS8Mk29pZCWwQvPNXP7JluMtHG8kijORwevSgEb9x4qmsZI3gRJoj0XouKkHiiO6bZNCsWT8oU5NZ1tpN9JGi3Fsdh4BHb3IqR/B8zZaKUSoBxt5akh2NAeJLqAEQHfbj+6559zVpPFjXFuY5GWUsMFJByfp7Vz0fha8t8uhCKq889fw/rTraSWEKLi2DxqMBlwGP40x2OitdWtuFuY1hQYwyjlfcVYvrKDVo5lRvOZgMT45HuawoVhkhUFTE2SQGwT16ZFaENm9spkgbzD/sEnjuMUmNaD5NHeGzYTF2kU5LbcZWr+gwvqF4yysqKNuFZcl+MccVc0nVHhmgF3ALmz3ncZCS2CMYYema6O48OmK507WLGJTBOGwsb5UN0Ix2POa5+bU0ULnAyaBNDdSpHuli3vGknXOMkH9Kx7izbJZVOBxwetey6Pot1pd1BOxgXZIFVHbIcMCOPrn9K5vUvCL2DXUEsGZ8vslLfICTn+pH4Ur63LcEkeb2cjQzyRohYn5jzxWpDdSeSAMoS2Mf/WqLVLdtMmaLKscAFgMrn0FPgYx7XClmx/Wum6MHEeu7aSxw564NVprqFpfvHfjcFI/StidyyqwtkbdxufGagngDRp50KRPuzlep/EVRmZ8nlMpBOc+nWoBGVAVcHPTmtJtPhTLO2MDOecms+aQR/cXBPQ+lQ43ZSIOd2CpLZp7WjuvzAL6Emo5Ll+jdOgqu0jL0Le/NYtWZY54zbyn94MZ+6vOatNLbyH76rnqpNUpFOMde4J7VFKqsCwTafQcZqJWaBGkyKifuv3YPI9j7V7x8Ff2kLnwrpen6bqlvHd/2M32iyuC43/IcrG2evU5J5OPxr54iugqhW3bRwKtwuVkSSNsEHJU85HNcdajGotUdNKo4PQ/QrVvit4c+OllYa5etbaLrum3ULWNxbt+9iGQWLnsh+ZemK86/bgm8DeMLfSoNC1S3uPFNo6vcKrgh42XBXPTPQ4z2r5m8P+LrvSI5PsyLJaXCGO5tH+UTKf4Se2OCCOh+tcRIrWN9PdW0ZB3FgrEkqM8DP973PWvMhhXCbnc9CpiuanyooXoktZtk2F67W3D5vTHrTbbymgk53/KwbHXGe4r6L/Zj8B+CPjNquq6D4vkKaj5Sy2xt5DG+0feCtjBOexzxXF/tAfs86j8CvFO2Nm1Lw5cFTa6nswBuOPLkIG1T6dAe3pXdCtryWOOeH93nTPHY8xyJvBJHzYYcHHarEl07b41gWPgDjnPvihI47xZUdmkZSXVs45Bxiqs0fkSEOwDAYB712aWszzra2Og8O30l+32JopGulO5WA3F+2DjvWvHGsMylgyldyunTaQcYxTfAml3kWm6l4kltbldP091A1JBvhglXDIJAPXI7dxXMzeJ9QurqaeSTMk8rSt8q43M248fj2rlcU3oU466F/wAR3QTyzvZfLUuR0O7pnnqcdOtYszAqpQqvy/LtHGT2/CvoH4f+HfhlN8Frrxb4gs9S8QeLLa8eOfSrK42GKEyMIptmR8pXGeTk5AGeK8JuZba4uLm4tIxBBvZoYW7JnGPrRGW6KtodZHdw3FlZ+Y+d8WBu6sw649cYqZoA8h+8r9OPU17x+wv4D0b4iWnxB8H6s0clzfaVBJaTqSJI8PJvKntjMZ49eeteR6xotz4d1zUNMvo/IubS5eCUsMYKkg4A+leXKry1XTZhKLSuYFv+4uJSzNuxjgZzUk0nmbueMYLY5BJ/X/GpFRYfNVu2clSCDXovwN+A+r/GnxQtrHEbbQ7dlN9eMjbVjyCyL6sy5xg8E5PuTqxhG9yDzDz1W42xybwcjjk5+nUH61XlZSrcAkkEc9eea6v9onUtKh+MWtQeHY44NF0zytKs9vzgrCuGdjjrveRc55CiuSlQeWrphlYblKnrkV09FLuWxI1+0qQgyFXJzVdVRWI3fIoySB29fzq7bYWEgjy9xyT6+1Qq8McMkbxt3KsD39Khvl1JP0I/4J4eG1sPg34g1WWNf9P1JlDbuQEVVx7DKk/jXxb+0L40uvE3xI1qC4nkuTa3ssEbu2f3audq4x27D09+a/RT9le1g8G/ss6aJ4Fg8ywkvJGAO5iwJ3H9K/LLxRPJdeKNTupCXkuLuaXc3clyefwPWvOw1p12zrpqyujm7mZmdgnQ/wAVNWMrGjv06e9Txr8zAjPNNmUv2PrivottTPlHSmKQgljgnaQPQ8/zr7E/ZT+PT6K8PhXVrgJot5cRPZTPMWW2bAVoyWPA4JHvmvjKPK4+XLA7sV6n8IdLstYsmguDi4s5lkWI4O5GOckenBrmrQ5lzBo9Gfc/7R37QzeKHuPDvhCcGAN5b6nG2Y/ugHHr6DtXxbrGhw2izxLtaVRs8wNuJ9ct16iuz8QXf2i4ultphDbxcLHAMA+5/wAjj0rh9S802+xRskX5ueM+1efGPPLmkZVKkV7qK8cIusKX2jBO7Pf3NZ10Ha3CbiVyxAPGcY5/Sr1mqzwxq7BZO69Bj3qe8McccZCiRY2GR3Iq6kVZnMj7F1TXrbXP2Pn1MAsIdJjiDAYaOQAIx/T8q+HprdrpobW2TfLd3MdtAityWeRUVeT3Y4/Gvf7f4hmD9kHUNFV1WOfXFs3iyDI0RdWbHvjP4V4Bpc0dvrkeoyyyLFa3UdzHKjkBSjB1P/fQAH0z7Vx4PD6Svsz1MO1oz9FbrXtF8DaD4R0O4ltdMvF01YxbtIqY2KAW5IGATXw946tYPC/xB1q10m6hvLK3n8wPCwKkuA5GR2G78CMVc+LnxT0345aFcrqdlHa+IbaNUs2j+ZXVTnaF5zu5B46AV5r4e8L67o+k2+pXGnyWugzkiK5Yp5ZOSoUDOeoIPA5FdCwyScup6GNrKrC0Ua9xcPeblZ2CM+8RhsrmqUCCTzLdjuJyVUf3gOtTSqRhQ+MHG4+nrVNRJb3SSRkEg569eeazj5nze2hVdvMR3JxhSCD+VfUWsTQeJv2E7C4JElxpF9b26qf+WeLkIPzVsV8x6pHFHeTxE4IkBBHTBGcV7v8ADy8i1T9lbxxpsM3mXOm6gl69vz9zKMTj8Dz049RWNW0WmZ1d00fOl4+5HbPBbLV9F/sb/sv23x5XxBq2vxy2+iW1u1vbSK+wtdckP9E4znjrkcV8/wB7pv2iFvJPz85T+or6s+Bv7YHhv4d/s83/AIWeym0rxXp9nLHaqIy0d5MwbDlh0JPXdjr3rrTfJodMZ2sfNdzZLo2qXdpcESPZzSW8siD7+1ijY9ckZHtXKR6b9n1KFZSvlidWMeckoGBZQO+VBx61sTXst3IZJ2LzyN5khblmYnOfqc55qL7Kqsbpy3nbNgBOAPf1ziuvm5YLmOiVlqesR+IU+FPxM03VjZfb7JCJvIQ+WLq3ZTyrH0wD6fLzjrX2zY6/o/xH8ApLalr/AMMapCV2xqTLAxHO5eoIPqB0r4L025HjTwd4dsJZo4tS0qdNKEkjcfZ25ic554OFyPSvTfhzrXin9mrWLbULyBn8PapM8U8JVtjsjcunowXkdiPevmsZSjLRbnmVJO57N8IdJm8P6feaS0zBbe4eMPIMlo8DYyg9Bzg9K9QsrIabaqhldpmJd2z1ya5DwT8UfCnxJvLu50pvs14shWW2kADnIyrY79CB2rsFt/tckcMbt50vY5OABmvnasZReqIPz3+Hfgu98eeIrHSbNG3zyfO3YJnknHQY/M1+ifg/wLYeD9Bg0jToGhtoBtwFG4serE+vavHf2L7bRl8B6pexWKSaz9pKtdYGUUdFz1xz0r6d0TTHCxzyHy1ZtxXqXUdxXs1pSrVLPY9CUbtJGBqsLG4g28W0Me35TyxPWuk+FcWdXupmG11j2qpPXJ6fp+VSX3w91FoFmgnjuEZmfZGORu5yM1W+F+of2lrXi7TQAJNPnjhRsY6ICSf+BEjjPpV0KE4VoznGyKjStK52Hi7UJdLtpdQtpNvmJ5EjMOEIJwf1NeYeZY2sd1qGpTeXaQoZ5ZHP8I6g/UDH/wBeu18d3n2q3S3IEcdvh5mP3WyMHj04zXyb4+/aS8H654o1TwDMS2myR/ZW1JXEkbS4+7wenPX1H4jtxjlObtsiZe9OyPqjwFr1r4g8E2WqWKbbe/8A3luuOQjf/WxW7JbBoGjSNmlb5QM9O9cF+z7brZ/DXS4C5kitEMSE8fKGOD9cV3t1M9vmXeVdlzkDitaL5qSv2HJWZzK7/wC2EjkI80ZVj6HHSvSdN09WsUR28xGQfK3r1zXA2MIvNety4wjMV3Y+9616jDhV+VRjFdGWUFUqycuhpTjyrQxrizGrWlxp0/zTRY2s3O4fwt/Q1+aH/BQ3VLqz+IXh3Sy2GhtpmOCP7ygA+1fptdERazayKTmRWibHoMn88ivzA/4KML9q+O9nJGDtjs2RyOQpypH4V6tSnDmTlujKtbni0fIdxapHukO5i339x4POR/T8qrOd/wDCOn+f8mrV43mHAYFejc96qtCWjYLu3BcgAZziu+CjymvNJ7iNnoAxcdOM89c/hX0D+zb4lhnumg1C/WBI4stJOQq7hwQSe+MGuI+GvwbuPiF4y0bw/YzqNT1J1QGQ8J8pZhnI52gnHp619R/tQfsm+FvgH8KND1nSJ5n1Q3UVrfNJISJw+QSqk4XBxj2zXlYmuqjdNHp4W1Ne0b1PGfjV8RNN8V+JIo9MDSQ6crQ/aSuzzGHB9ivHBrzdrr7QqKoUZ5bnhv8AGq8gRbQTKN3mHbvXpx1/AVGnGD0rejBQikjOpN1JOTJ/kRSoHHGCal0uA32tWtogJeWRUAA7kgD86p7nZmAAC9q93+Bnwt8IyX+k634g8fada3blLuHSV2+bwflRiT1yMYrnxkuWlKwUo8z1P01+EvhOPw74H8PWYj8trWzRPqdoya7wd+Ko6RtXS7Qp93ykAH/ARV5emfWvQyujClSSXUxk73I5sCJqp6ZD5atHuDEMcsPerd022MhOXPCrUVimLTdjBwePfNOrBSxUVbYPsjNQ1S10WzuLq7lSCCFDK7SNgBVGc/SvyA+OXxKuPiX8TtX12RytuJ2gtYJGziNSQHJHr1x9K+z/APgoN8TDpPhKw8JafcPHd3zNNeeU2P8AR8fcJ/2jj8O9fnjGI5AMnjZ/Dx37e5qK1nU5eiJj3ZDuWSYRvuwTycd6zb24LEoWAXOcCtC/mj0+1WQtukfkLnp9awrVHkLXEg3EkjmuuBDNC3kbiJcp5gw7jsKq65eeWqW8e3Yvyk9+tWFu/sMUk7jO0ABfXNZcjfaJBJNwSSx9M1tfoIWxt/IhZRxJJy/fFVtWvHuIfssZx/CAOxzUl9cGGJyD8xHODVJQtnH9rdWlKggZOAW7VSGQajeDylgTkYAdgfbirHhWxGoXjTzDFrb/ADvngM2OF/rWPBDJeXQUjarvuyvSulv7gaTYwWVvtcv+9d16dMfnTewrFW6l/tvWDlm8pPvdgF9BV+1aOQl5GVLKAYY5xkDsPf2qjHGbXT/JGBKclieoBOc5qtNObgxQR5MKncg9SOMmmnYCe4vpL6ZX2gJ0RfQVbsYXkmRYE8xwhLNnoBUWmWIkk2F8y5C/SuksbeKxs3mMbR2oOTwAZSozgH07U3qxMaGGm27zl9skiEIc/M3P8qxtU12G3j2xHz5O5x8gPpzVTUNYk1W4diSMf3R0HoPSmx29jZ2qzXTfvy2Fj9/UjtVom3UpWkWo6vcwxorTJK21SRx06/nXS2nhOO1kWa6+cjB2k456Y47VW/tK7ljxb4hSMKA/QY9PrUqySbsqWZyPvMeKY7G3ZWltZ3AZ0igiUgHdgKR9T+dWG1DSo3L/AG37QueFixgY7ZzXJXljLdK++d7pWbcI5GyqZ9BT4bP7JbhCNyLklsDj9KAOhutWhm3C3VmTHyMTz+naqFwt+qq6SrAOq+WefxqnHhY2EeF28naOfYcVL9ovFc4jDlenGQaBjlv7h/3cqs56Aoeaa4aPllYEn7rDGKhnmnj2sI8E85TtUgnmkwWfLEgfMM0mxhGA0g+ua0dMuprSVNzsqq3VRnA7k+tQRRyMv+rX6r1rdtdJkkKSA4jyNykcH1GawnMuMepvQ6eus2Mk1qVjibiTafmz7jrzWv4LEum240q9VhbecCGQcpIe+ewOMe9U/DenS297FcwygRB8eUw5/CvVbHS1g1CLUbeMhbgGK4iKgrnsxHrjj/CubmTO6FNsisNFZZdIL2yTNZOY5iy8OoyVbHtkYrV1jwa0zaYzoRJHOZHaQcMxBIOB3Gf/AK1ddpaf2la2lrNE1vcWRbbOw4dTyoJ74rsdKt/7QtYYrpQslszSibIO+QggH3wDWvtFFWN3QtufJ3jvwiltdSRW9n5kqtvk2Lhs9w3Yfn+VedXNl5PykLC6Ha2Oa+uPHHg144EG1ZInJXcvOWJ5+v415d4g+GZZmlkCEnnr/hWftO4pYa+x4tMpm2b32Bf7ozmqc11FayFDDIysPvdq7/UvCP2Mxqq74Q3EoBC57jn0rKu/CckkhnVW2EYOVyoNXHEo5pYXU5Fr3dEU8rHHGc9vWqzSC4U4TIzxtOa2/wDhG3cFpNwiz/rIz/MVVufDl7CwawmWY53GNlA/Ctfa3Zk6LiY7GGRcIMN3DEZqnNH5TNtUke3at37C0kYF1Ebec5xEQA35+lZNxZvDvAdiP5U3rqY8ruUBK7LgHB96e0z7lyRvUccfnSs0bfu9pL1BNnZhTyPb+tYXENkbORgrjsaLe7EUnzLlR1PemRyL0PL9gTx+dN2nnqOeOOMdzS3GbMMySICv3GXB5wevSln/AHoyxK8du/v9axbO7ImGW24OSprYjlE0eVOR3rKSsVzaGHcXV3YaxHf6dcy6feRYKzW7tG2R7g/hivTdW/aO8X+OPBZ8Ja7cWs9tJGYrqZoAGuU/hDc4BHquK8+1DTZ5tzRqWGOF9ax1gm2oZYmhaMnB7kdyaLRlZ2GpzWhpzae9pIJIXMsJOMDBApbpd9tkqp5GBjmizvj5KoTvQcYFWPs26bdn9114FWZ8t2abeMNZ0HwHqfhm0uVXSNcdXvrYxqzOwCgFW6jhFBx2HrzXHKrNLAqnLu2GP/AuMfX2roNUkWa1aNkG4HcvbH0rGjKpIhYg7WEhB6ZB6f8A6qhbaje9j0dtUuPh7r1xp7BrW3kCPJaSnaASOD+Xr3rl/Elnp+qao13pp8nz33FMY5zzx0FR+JNcm8Ral9tv1ElwyBcZPKjoOetZcV0Z7g4wU2sG5xzjjFYRiottsOW70PTf2d/iJe/Bb4uaPq8BaSyWbyLqPvLA42uP13DHda+tf2wvggNQuv8AhYPhi2ElnPGHv47Yc+vm4HbsfevjT4B2drq3xs8GaTfyKLK71SCKQyH7wLgDqfb9K/Znx5pMMLxItt59ndo0c1si/KVA5O0Dpt614GZU6kX7an0OylTjUtGR+S3wz+GOr/E7x7p/h/TSIZbht0k7IWWBB95z7YwB6kjmvt3xnfaN+zF+z3rbWMItJbK2aKNkOWubp/lDdeSWOcfhXWeG/ht4X+H+vXOp+GIWs5L6IK1wX3IAGycZ5AJ7DjgV89/t8XGqeKNI8M6VZLi3kLXMUMQy15IuFZx6KgORnqTxzXj0q7xWIip7IzqYeLvGCPg/7VcXl1NLK5kaRmd3BHzE5yT6jJ9K3fDt1Gqvayt5j4zCOmCeoov7rSNN8NfZLdhLqxuN8rYHy4H3Qx4x6iuVS+uIWWUN8+cZI6e9fcqmpRskcTjy+6egOpbYn8I7+gPrVeHT5tQ1KGygG+eeRYYVHOXc4A985FM0+4/tDTLWVf8AWMuJQv8Aez0rtvgvoM/ib4ueGdOt5YrdpdQhcPIccJmVsH1whH6V51f92mjOyWrP0B+LWoS/Df4Cx6V/x7wxQ29ljJGSVC4X17mvhv4nfCC90G4WW3Q3unXUJnhkRCzJwN4JHQDr34r2X9vz4otfa94f8NWF0zrDbi8nVWIBfJCNj8D+WK6b4FfEzTfiloOiQtamLUNMK2N/HLjY8hUE7OeVK85IxzjOeK8ejCdNOqj1sJGE1ys+B9Rhn0642SRmME5DMOPxx0qHzAwTLAE+/Wv018ZfsbeHPEUs6QW0kImbeI4cAqG5+U/WvkH4zfso+I/hW13fLB/aWjKSwuEXaYQOfmB6/UcV6eHzBS92orPudNXAPeDueEJH++LEZx0FdD4B8SfZPFFvb+WQtyDDu+782Mqc/n+dY94z9BHsOcj1z6VTs7eWfUoDGQsqOpQn+Eghs/zr1WlUjdHjTpyV0z6GDLJuG1hNj5jj5faszUI2mfzCPNZlKlFHT36VreHb6PWtBS585Z5n+R2jGPnqWXTl01WQglyN27PtXlP3XocXJds5NdIkk0+W4AO1Tngc4qL7Ofsomcbow2K0NNunj00QlyzkFWXGep6+9VdRlW3t+hztzsH04qJyfUcY3Oe14agmnw2NuWGmTT+dtZcIXAxuye+OP07g1P4T8Iy+KPtVpDfRW8mFZo5CCpAOMtj39K+nPiF8H9Muv2WvCd/oypc3kECXjXMX/LRnUmQHHXrj8B6V88/CqbTbLx5YS6yjTvIybIG2iKRRnekhbodudp4G7OTTp1klZbn0EMLyqLtoch4w0G78Ca1YpP5MkqYkhkiO8Ag8EZ47ZJqnrnjnXfENvZ2FzeTTWVqWkitmVVjR2Jy3Azk5PX8q9P8A2mPE3g/xF4zgsvBpSXSbKAxlYoyiRyEgvEgIHA2g9wCSOvFeSm1McJMZxvbOc5zivQovmj76MqsVF2Rv2M5ubb97jz0ASTv9Kmu/Kj2bVwQvAHTOawdFvStxCrkESDa3+1kZ/OugWFpiEIMK43jdz2rhrQ5HoeROCuLrtrDLJa3VsmEntxIxHTIOCfrX0p+yH8Po/Eng3VtQ3LHcyzT6dMjAn7RE0eQMdMqxJHHc185G48zwsI/umGbYnHOTg9u1ejfBn9o7VfhP4WudC0/Roru5aeS4S8eYrgMAMYweRj1rirxlKNonJV6Hn2ueGb/wX4hu9H1OGS2u7NjGySDBKjoRnqCMHPfNY2sWMdxi5hVfPUbZP9pfX86634kfE7W/jB4hgv8AUdPhS7t4TGVsomYlc5G7GTgHnnABJ7EVy8MwkjdVBdiMc04ynBKTHfqj2PwX+zOni74eeB/FFvrplh1jUUttStnUKLRSGZgG6ltyheez57YPkWuaOtp4n1yzgiaKK2vJooozyQqkqv57Qa+pfhr8R/D+l/sa31tBLBHq2ma7axXNs8gDI0t3GRK2TkKQ3XgcHHFeA/Gy0udJ+JPiC6e2+yw3bpPD93EhaMbn9889D1zVwnNzalsdHtHJWZ53Dctbu0iMQsi7X2nCsPfFfoD/AGlZ/GX9mKO5uYo7if8As3erRjBiuIu6+hytfnxt2ggAE4PKnp7V9H/ss/FWPQ7K/wDAWvSqlnfpLNZXEpAWJmX54if9rO4D1zWeKpOUedPVGE0r8yPJPD+rah4Z1a11XTp/s1zC29ZIzkD1BHcY7e/417z4H/bM1HwxdSjVdDt73MeFe3JDAbuevv7/AIVxkP7L/wAQriCee106Oe1QM0eZQskozwAp6Ej1rzvV9Jl0e+NtdQSxXK5R0K8q68FenB9f51xr2dRqO5Dg5O6PoP8AYp8c2vhjxJr+i6rdx29hNCLlDLgKZF46nucjj2r7w066W38O3G/92zR+Yj9doIr8gNI8Rf2f4n06RmKw/bITJuPGFkBx/M1+t2lAat4YuprRjLbC34yc/wAIPFFanKnUv3PQUrrQNL+JE3hvzZb+3ku9GhTfcXUY3fZ1/vEHHy564ziui13Q7ZorzxLoIWS6vYF86S3IIuVxlXGOCwHcdVxXiP7QnjOP4e/s861fwsV1HXCmmWqoQrDccM4PfChmP0JpP2EfiofFHhG88MX0zPd6a3mwBjnEBbBA9MNn869PDVPdjh6+0tn2OqnS9pSc0ee/ta/Fy78G+EUsNPm/4nOqq0QlUkPDHj5m/LjmvgyzeWFkmhUrNGwkQ9SNrA9Pwzivor9rKa+1n4teIdifaIIbp4ITsYhVUfdHHTOa8TXwH4k3LMmhXzCaPfC6xMQ69ipx8wrlpSgrxk+5hKm4+8j9PP2WfiRD8XPh7JqjxxQz28yxTpCuwBlQYOPf2rv7yZry4mnmlxBGDs29Gx0FfKv7JXizTfhpr2keEb2ObT7jWLQR3y3JwPtQ5Qjnjdkjjjkc19W+NrZtOsrRIFy44VR3bpn3opW9i2uhnVkpLmRk6Dff2l4tsguMLnG3gHHOcfzr1SYmGNnTkjsf4vavI/C6Na+M7FJ9rT5IdUH3SVJwPavUb7UEiWRBhpEGXU9Svcj8a9TLZckJt73Kpv3LmH4h1LzNPW8tWJCOGHYo2e/65/OvzE/au8Vx+LPjjrNwFX7Mii3Rh0xgbh6ZyM19/wDjLxZYeGtL8TXt5NssLe2M5LNgcA/qa/IqTXtS8ZeKr27gZjcahePKkb8r8zHqOn3acm6kzGMvaVF5GvJoXhy18IXZewe51hVYmZpGVcZ+UrjjisDRfCsUNtBqU0kkrYDqP4R71pRtNaedazgfIxjdM5UEHGK2rHC6KqbR5ONgC9Bx6elbzk4qx11HZGfoOval4c8Radrelz/Zr6wnSeJwM4ZWD598kflxXR/Hf9pLX/jnfxtrO6wsYFUrZwufKEmOX5+nTnH8uY+zvCvmIN6ZyQBzXrH7Mf7P9t8YfiM+q6jHnw/pai5nQk4kkB4U4/h9R+GOtcUnT5+aSNMK5VNEeHfZJZLFII/3ckbZCv8AmQR+tUpI5tx3nBzius8YWdrca/4kvLRv9Ci1KUwdgsQkYKB7bcD8K5G+d1uCpJ/vcjmvUpS5o3HUsmSR3gTzVlDDcPlYdBV/wzZ+VrKXcUrIsP7wnP38ZIx2yDXP3YDW75J4Fa/haUQ6LIC+xml8xT19azxUb0mjKUnHVH7c/C3xB/b3gXQ7ssWaW1jOSMfwjmuuaYKFHUnjFfPn7G/jZPFXwV0BVYPJbxtbSFjkhk4/liverVSsrMeQejdq87L8TJRVOXoatX2LDqkIklc7QBlmY8AYqvPfQaTpb3VxII4YUMrsxxgDJOfpVXxPfJZ6W4K5aT5QPx5/SvA/2yPGTaL8Pksra6lttRuI3dmj6/Zwvzg56biAv8iOtezVxEKcmlvYz6WPiP8Aaz8fReOPiahgvTdP5AuWkTmOJWZhHECO4A3Nn++vTmvG/M8pQ3bdz7nHSoo3e6Z7h0Xzrh2eTaSBuPYc+nrmqerXvkw+UByX+9/Oqpq+rGlYz9Run1G4WPls8HAzgDp9Ks5JdULABeOPWqtghiZpc8sCQKdbyPcXDS8pGj7m/LpXUiRdWkElwlqG+WHBcgd27fgOaqqyRusRKlmGGdTxmnvuWSWQnc7O21j0z0NU5hHaQvkENMdij2PX8asRE0gv77yoX3QxnBYjjOMk+9VtUuDJ/o0QBjXD4zzkcYqyFGm6dIRw23J47kfzqvpNq1xcvOVB77X5yfSmgNTT7GHS7cyPJ80oA/3fSqsgf7fJPuUhOQOzduBVnVJJJIordSFEjYYY6D1rPuW8lVQLlVGd3cmmMja6kaNlZv8AWdT3A9KltRuwEPzD36CquzGWB3E8fStDTLV7pxHHy/U7RyfQfjSFc3/CuiyapdFI2WKCP5p53OAg9ffpVHxd4sbXJvsVlH9m0uDKiPHzNzzu9z19qv67qQ0XSzodlIp8wGS5lA+Y5/gJ9PauWXDSKcEjqeOvY1akTuK1wbVUhRGds87Rkk1pWek+ZJ9ovmYEciMdD7Gq9ssaeYzH58cu3Qf/AF6tW9xbs6B3ZwvcVou4/IuSPFBGABsiPPlryR6VOfs4VGMc/rnP6EVBDdW/O2IMcnr1zmrrX27Y3lLuwd2eh5piHpsY71gZExyvPHp2q3bqrL8lv5RbIO8H5qhXWDGria3WRe2xvvUf26ZIyIQUcgZWQZx9Kzcikiw32ld22yt2XOfm4J/KqkdvOu8yIsWWwPm4waT7ddSbd5aVc4LIMBaa11IG2ypuwONp59jS5i7Xegz7LOv3DuzwOciqsaTOWRxtboVx09617WzuLhA8UTEAc4Petqx0K5kUeZCQ5PGCM1DqJI1jSZQ0u1RsRGRTJwdqnkfWu/8AD9lmJC9t58DED2Gap6b4UsfMiZ43tp2PzMoyXr0Dw/4dtbeNzNNeOrMHQKmFwOMVyTqI7qdK+hb0nwJbXzxORNDbbtoaMKAP6mu00XwhcaM/F4t3ZyEEKx6Htx61HpNtHcIFhjktIlPy7SSM9yT612Gk6QjFgHeVR7Efzrj57anq06HKhun27LL5EjtblicsRkZ7Gujt7UxW7iOaNmxxkjqOOKbb2JYFAfLUkDaoBz9c1eg8KbWEuWZyuc7sY9qh1G9jsjRX2ijfabP9ikM8cc0ajeW7KemK42/0FNQy3ls0THKs3Aye+e9ento/mRBJmJiH8OfbpUs2nCSCNVVfLThVK9KzlOTRpGMV0PDD4WFxIYJoAsBO14+xPTOK5TU/CN3ou9vKe7smk2s0nUf3TgdsV77JobRzLn5/MVic9cjvmsfVNFDSeWq5R/vr7VjGbTNJUYyPC9R8DxXFs0kaR+WwwCueCT/KuL13wVPp0xubc/upfl8sg5+tfRUnheOyG+2+SF+WWTJwc+nYe1YOp+GkZDG6FHYkpG54OOuPeumNVo554aMo2sfNt1EbZJDdwkBerEZAz0IrGkhtpACAJQepFe2eJPCyxyFPI2ox2DPPOOh968q1rw7JZs6DKruwFArup1kzxK2EcdUjj7zQ4pZhtbymYZOeo9/pXPXlvLZyPE6ZYE5POP511d/GWCqfvx5Ge+PQ+tZE0QdtkrHb1J7g+ua0bPLnFow/NVlwp5zxT2+Zdu47VGBT7yAWsrhUxk/Lz196YrYXKg04mI2ReC2wBsZGeufSn21w8M25jgFeVqOXzJCJWBOH5x2HrTVQMvPDZyaAN+3m2oQuO2M06S3juOXGGXpg9vQ1gWdw9t9+XILYrZVvMCNnaM/hj1rNqxS1I5NJRvNaIqHYdBxTLOGW3U723K33QRjGPWte40yWO3Ryww/p6duaZEpXIkUEHvUcwPQ5XUo5LjLKRt5O3vnPSs0xvH97KnOea7O6sVm+cA5znKjisXUNIn2uQcBehC9a0Uid2SeEdPXxJ4k0rSTMsUl5Ilos0jbUVmfaGJOcD1r9GJ/+CafhO48EoLTxBcxeKY4cyzCVTCWPP3eqj6EfjX5ttpt5bm1eWBoEZd0MhYAMBznI5rbsPi54+0maQQeMNajnKeUzfb5Nzr/cJzyvHQ/TgcVx1qMqkuZM7adb2ceUreMtJvPBHiy/sYLzzL7S7xkW6hOf3iH5XU8HtmvuP4F/8FJNHh1zT9N8fwXNhpdtZSIl+ImnYysIz8wUZwQGxgE89zmvgi6S5djLOrmV2LbmYFmzyTnPJqrHHubJ4bH9f0/D/wCtW0KacVc551HrbRH1J8Yf20Ljxj8VLy/8KWU3/CHtIoj0+4JjW4wfmcgfMu4fwj8cHNcn8fv2qNQ+L3iaG/g03+wLW0tBaWcHmiR4kP32GAASSAPTCivC7e4Mc+5nYMVxuzjP+NVpJPtEjEttPbIGRisYYOipc0Y2CNecI8qEZ9zF2Xap/HJxjp0obccKcYIxTcBmCAbSO1WYYR0fK+mec16OiOdu+5veE2a1823mb/WMWVgeAxHSvaf2a9Igu/jpor3hxbWNvcX7huBtjQDnpxl1P/Aeff55eSWFkeN1Rs555IPrWkPE+qSQtCLuSFJF2SfZ2KNIpGCrEckEdR0PfNcFakp7kONzsfiv48i+JXxP8Q+JLYyLZ3d1m0844ZYEARTjsDtJx/tk8GsbSfEGpaBrEGpaXctY6lCynzI2K7iDkbh0K+3rk1z0LFWCAhQFwAo459PwrXdk1K1EYUJIilVXPXnk/WtPZxtyWOim3DY/RP8AZt/4KBeGvE2laZofj4NoXiFf3R1Apm0n7KwYD5SeOGwOeM8V9e6rp/h/xZ4f8i5W31DTr9RH8uHRsj2/yK/CaIRzW6wY2qCcbgDyfqK9b+CP7S3jH4DalZNZXc2paAkoM2kzvujCnG5osn5WC8Y4B9+tedVw0bNJHfCpzPR2PcP2pf2IdT8H3l1rvhC3kvNGb949pEuWh55AAHT6elfH8OnvpsNzczAq6MYgrcMq98jsfrX63SftlfDXUPhavixNWgkaaPYulsy/aTLj/V7Cc9e/THOa+WPil+xf4i8TfD+Lx3pRZNavZJdQvNGaPCIjtvTy+nKg8g5znoMVxUa8sPPle35HZOKxFPmkkn+Z81fBvxBFa3w0a6c7WlE0LD9RXoetSedPPPcStHGi7eeM8dh718+zLPoetRStGyT2sweRecoVOTx1zntivoXxJfw+KNEiv7ZQWniBOzoGOB831Nd1W3xLqfP1IunOSM/Q9JS/0+0LRgzRoXQ5PryfetW+8AXmseH9f1a1xFY6Zb+ZLPKDhn67FbpnHJ9M1HLeLo+kwSXkf2YW+2Pchx82ABz357da6VdP8U/G7wGfDvgzdpngTT/9IutRuQRLqkw3FkUKeUztwOOV5NcUnzPXY3wVHmldq57t+yf4JuPEX7OtqPGdzFp3hLzZJLOWSQbpISc7SCMKM5x3xXy9+1V8SfAWs39t4W+HOi2+n6NpUrPJqaRmN7tyrK2QwBI5z+A6cY4vw78ZPEXhHS7zQ7m7utT0+OwksbTT7uUmK1YnsnY9ea808stJ5pyWI5YcHmumjRi5cyR61XESUXAExHGuT8uQf0Hr15GPpWzEouI03PtjxgsOwx1/TFYNxJ5zJEoZNoIDMc++T3619P8A7RH7M9t8DvCfgm7trya7udTs3a8kb7hlVUICjsuC3HtXTXrRpu1jlo4eVVN3PmjSSTq1qEKhPP8AX5sdK9Us9H/taC4McqpKqsW3MBwOmfqK9F/Zh/ZZh+IGpTeNfFkUkHgvSR5+1/k+3yD5hkjH7sdTjrwpOAQfPdes7S61jVTpm1rJbuRoNo42BzgdfTFclSpGTVjnxFB0480ij4atVlfULaaTel1A23b90MO+fWq0NmYbrcmV42txwARz+NWbC5SCaMxx79zDO49BnmuilsY1hmiUl4/vsx6nuKxlrqeLJdTlNE1y/wDCOoXN7pzosl1bvaSNNEJAY2POM9D71lwL9nVIlx5a8Lzkj6nvWtry+TaxkqAN3I9iadoemHUUZ0VQgOw9+azltYSM64tI7q1mgyzRzAqyKSFbj+IZwT9eld58etSfWfDvwwvJpvMmudGmMjd/MBt8k4/2t2Pp9a5W40mWxkdiW2dMY6e9dp4W+F+sfHoi3srqG1s/D9uIIJJc7SZDuKcdxtz/AIUKooyvLZFcvVHj+i2Mmr6gtrDE1xNtZwkYJb5RuJ+g969g+CngO38S+PNKfVpFttKgk+1T3N0Qit5fzbVJHPOAa6bT9H8L/Au2v9L0+STxN411GM2t3qagLBZIRny489eOT1ycZIwAMLTbVryxFpNNL9ntxsihjOAgPJIzXPWqc69w0u7WP0D0OO18SaXFd6XdLc2bttEkYyv0Bryf9pz9n2Dxt4dk1bR7KNPElm6K2wAC6jLBSCfVev6V2v7IsIl+D62q8G3vpSOOxr2FLFWYowLxSffyvpyK+TdR06qlFbnRGPMj8oda/Zk+JFtPKT4ckkVW/wCXeRXHTqOa+o/2cv2lJfhf4XTwf8UY7zSZoYmSG4uIGw8eMZJAySOmQK+i30vTLGRpft4Rwx3wr/DnuK86/aM+E1j8WvhzN/Z1z5/iTSyZrGQfek7tER6MB+FfQwxMqkuWVtDj5prQ+W/it+1TrPjz4oaZcaXZRf2DpjfZLGwlB/f7mKs+3jDONuCRkenFfWnwR8C6Z8PprbW7HT4tN1C6twk1pCu2GINglQPrjFfHn7Pfgsah8X9Ni1fT2iay8yaSCaAqVdVwDgjqCc/rX3pZRumDLJtgyDyclsdqirNVJrQ644iVOPKjJ1O1sE1LVCmnwiSWZnldkDFiQCSSc4z6U1Vtta8OppM1pDG1qoNi8ahfK9Ezjoc1reINQlsNagu4oUl8yMFVk9Rwcj6YrLjkk1G6uJ2VIXJ8zy8HntgflnmueScZ2uc1SvO/LfQ+PvjX4rjWxmvtK1JFvNHvlKwsAs9tIGAII4JG4Z7ivuL4d/EiD4qfDHw54rZImkls/NmTslwuAy4/3s/rxXwn+2J4MtPDnj201FLYxvqqAxOudpkXiQcfxEEEfSun/Yh+KjeGtTu/BWsyqmjajJ9p09mb7tx0MYPbcBke4PrXr0o8kLLqXCK9ndH2R4evpdQ+IVlPLGI2b/nmcD7h5/Guy8ZXy27R3UbEXEI+VR/Gucn8O1cb4ZzcfEK2ZjllEjbcfcABwP1rgP2iPjFH8PdF1a6jYOxkzCNw3k5xgA9QfStsPUcKMm+rJqS5Icvc8B/bw+LDTWM/hHTjIkt8yyX2xeIoducHHqRgfjXiXwr0iw0nwfHdP813fHzDvQfIq8bVPoep9axrrxFc+M/EV9cavKZb7UJdr7myFUnAC+wGPzNfR8v7GPj7R/D9jNBdWF3bLEuEXgxqR7jmipiOSHvG9Ci1C/U+cfEn9nm982OFdy8yMBhmyeD/APrr2C3/AGWF1b9neX4i/wBoSW13FuuobeQr5b247DjOT2Oa29O/Yl8QXhvV1nVLewuEKPD5YaRJTnkNjHH8q3NGm8T6s2mfAOeNoRY3YjuZ45wUlgx5inGOFCsDjr0/DzqmMU9VfQFzSfKz5r1r4c+J9F0Gy1S40qRNKuk82G8X5oyPXI5H416f4J/aWs/hD8C9X0HSImvvGmozGFFmgbyFhfCmXeBgFRltpOSegr9C5PC9h4Z8O2mlmGO8gghWFY5EHyKFxnHQ1+bv7YnhnRPDfxUSHRLWOyElis1zDEfkDlmHTs2BnHoRW+FrSlVVKprb+rGtOfsXyo8cvNYhu/AOl6IIZvtdvftdXM7AYdCCAOOpBP4VzbWDx7cybXY8L2Iq22oQqzKM5Ax24z6VHNeRcZX5z9w5/Ovq4x5UrF6srvpu3G9gY/QcVfs7VIrPCnCKePYelULq4MkC+UwY1Lpt1K2+JxvGMnHFZ1HfQwkfbn/BOP4gDT9Y8ReFrphtdFu7aNvXJD/nxX31Y6gLiKNkON2Tjr0OK/HX4A/EKX4efGHw1qqs6WzXIt7kE4DRyEIST9SPyr9Y7K4awt1kjMhm5Jib7uPX6DNfJYic8LXSWzN4S0JvH3i630m1ED5KbszMegXqf/118GftvfEZta03TY7W6jSPVrsqYS+WNvEpIA/2C20H1yB0r6A+POrRzw2GhQ3ch1K9mEAMecRp1cj8M/lX5+/GTxBa+IPiPqb6ZcefpVo62lsSODsBDlfYsD9RXdhOevW55CjPWxyzXQgtw+GLHJ55OfU1zmqXD3V5HGp4ZSc9M5Nad3eLDbrhTg/KoFZTYe4DyIzMvP0FfVx2Ke5Yz5MIgJZzjrj+VWZECNHbcq4JklUf3tvFJp0Md1qEYmfy4OS7k4AABIOfqMVVOoG+W9vgCjSA7VIw2SBg1pcgi+0rd3SRSBjDnpj0HWoPMS6nNwUUqowgB985+tJPK0ML7OZm4H49ajXy7e2O4bV6e+atAV9TuG1CT7PEGVE/Msa07dUs7WOPlDyzc9T61l2C7mEjsVVcPnucnA/SpLq6zvjGSW4HPT2zVXAltpvOeWZ+AqkLVNrgysTzs3ZH+FSTSLa6fGq5YMcbqgjPlqMjIqkSL5bNIERWyeprpNJK6LZSXU/30GUUHlmHIFZFlbssZmeT5GPHtS3939qkVYwwCDA54Jz1qRlaa6lnmklcATyvudR0FPW7FurMMM5GArEcn1qFgsTbCcnGd1MiUsGcfMzdPlHy092MnKveKrT8ZPKKePxq7HBHtUKMqTkJ3zUFraPMo2ttXvnrWtDbwWccZ3fMozg8saqTsLluyzb288jA/ZUjjx1zU/2yK0x9otQxJABAO4cdqajXN1lYHaMMemP6VuWvh0wwq89w0o6lcc9az5kbKDbskYdtqCPIxjikU9QHUc+taDeQygSKrEe2Pwrol0tGIKwJHxgADn61fh0JZmBECgg5fcuawlUSOyNF2tY5KHT5Jo8wqpRupU9PwrVtdEDKGbeyjkyYHPtXY2HhuLc8iW5RccP2FaNposc6om19i9HCnYOe5xzWTrHZDC+Ry39nywqqwRM+9gAq87j9B0roPD/grVJrj7Tct9lRF+bcwJ56AAf5FdboOiRQjzUMsj9BhflH49a6W10eUx4CzBG5LqhPPpzXN7Q744WyuzF0XR44lwgUOh2s78sPXFdzoFqGCpLcC3tVGHDcu/fAqKy8P3iojR2yxKwwqEDzG9z6Cuu0fRVtcSTRpPN1UEcKawlI64UEh0KQSbYrddseMhQCeOnIPeujtdPkWFAZNh6KuOB9fWn6dYiKQTSKoc4JHYY4Aro7HT3mzujxz6Vi5aHSo8pT0/TfIUsrYJ7ba04o9yhV3MfWtm308AcncQcDipmsVHIHHXinG429Sjb2O6PkFm/lT2tWIPrnkYrRjVF+7xntTiAue9WZt6nMz2aZP+yTg1XfRVkVnMfzDgGt+S1WSZi2VBPH+NWY7UMM+1RYvmszg77w+VidgMEjBA7j3rDvNFiurd7eeIOAOHHVfQg16dc6YGcH5ge/oayZ9JT5m4z02461LRrGSZ4jr3hQSMYLofO33Zl4OPXPY15t4l8CTx7vPt1ndTlZVJBI78evtX05rOji4gDY3c/N7Aj0rkNQ0FvKkiaNgVbO4DtUqTiwcYyPjrxV4PeNvmikilz8wYHnI7etcLqWltBweXHPB4NfZOteC7a4jbzEKDBGVyT9cGvJfEnwtWFHnSMquwkFfmUv2J7gfSuuOI6M8bE4PrE+eprdJcRzL93kA8EVmzwtayD5Nyk9R2ruPFXhObTpJEkgkhaMbpGwWKqen4VxdwJoZHB3FF43dvpXbCakj52rSlB6jYpv3jYGSwwQOV4qDbtVvMwU9j1p8c0cnKIIX6/L0NOBVm+YYwprZHOV5Y2VvlOeKu6fcHywkj7gBjmqk2F+hpgjLKoDY70nsI0by+vdphinYRsQAvY1YuL19Ojtw74yuB6fnVWyAvIo49376Niw4/MUmvM0ywNtyy5yuO3rWXKimy/b6pKsavH+9y+Cp6Ek/wCRTjqT3hy8axdtq1p/BzwfafErxJL4Vk1FtK1jUIM6TcMCYWulLN5UgHPzIvHurHrgGf4ifDXxN8KdYFl4o0t7BpiRBdId1vcMBk7HH8iAevGATUv3XYrlurmFfK89rFubzTCDtVugB6iu7+B/7Mfiv46a15ejWZSy3HzL2dWEKsOSu/GM89M1xClJo3RT+9T+XrX39/wTl+O3h3TNDufh9qVzHp+rSXT3NlJMQouN+CUBP8QbJAPYjHGCcanM5qCdvM2p2iuZq5xHjf8A4Jvap4Z8GyagNdXUvs7briGGM4SLHMiDqxXuuRkd+1fFHjDwnceC/EWo6JeTW8t3p1x5Mj20gdHBRXVgR0yrDr0ORX6QftxftmX3w91C48FeDXge8MOy/uypYQllJ2jjkgfzH0r8xrxfLydrs3UyEDJbOScdP/r8nJ5q6FNU5tJ3Q61Rzj7y1IZ2aTDLjGOF6ke9Q+WdoA5bOd3rT44zJIGXJP8As9at+WF27mxg88V1N9EcJGsRjGcZJ79xR9/73zUskgVTg5PpVdlMwVgdu7kYpq/UCTc5kKDGPftWzoNimpXWzLKEOA+OPxrC/g27sEjliOa6PwiUt7dmkfCKGBPqe1ZyvbQ0hZsraxbrY3QiB5U4O2oLWcqwIyyn17e1GpTi7vDKAcb9v196pfMrAgkFT0FHqOT1NaaYW9v57RsRgsF7E+nHf8K90+MHwPs/hT4F8I63FqEF7b63bKZJlkXdLOwDbEHePbuPrkV8/LcOqspbOV2hs/l+I5r0z4W3eheNLy18M/ETxdqWkeGNLtGbSvKkjxbHcN8S7kYgPuXA5LEEDHBrnqU76o2pSWzOTuFjeMNEFtpP72Bj6/5/nX0roH/BSL4r+H9PjtdS0vQdbWNQgcQtAxUADLAEjtXgGpeDriLw/wD21YXSXtgwYmJ+JYk3Haz+vGM49emKx9F0y48QX0dlbKvmyAv+8IG1R1z754xWUYwlui5ScdDb+JXjw/Fzxne+KL3RbXR727AM9nZsWg4JO/JwcknJ+lanhjxt/Zvhu40qUIkSzxyQuf4VVgSo7nOP1rjpoZLaR4mXE0bNGfqO1dBofw18WeKPCup+KNM0Y32h6eWW5uEmQMu0ZbCk5OB6VTgpKzMpXl8Rd8RfESHXtWhjvIH/ALCt3DyW1uShuQO2eoPYemO9fW3g34+eCte8I2mn2OvWemX6xBI7K6It3DDgAL0I+mRxx618JyyosauBiMruUnpjGfr+dRSNBjySVKhcmMKOQenbvzWMqEJaG2HrOlpFHofxw0l9B8fXQaezuZbtFuGNlKG8tmJBH5AHPqe9ces0EkJXGJlOWZTVazWG2jUwJHAqtlRENoGepXHrUjQxyK20eV5nJ210RioaGbnztsSO3W6judxOZCVUjGfu4zX6B614d1D9oD9mr4SosjSajHeCwubh/m2KsciOzEjnG1T7kAZ718F+FtDvvEfiTS9M02187Vby5SC1jZwqs7ZAJPYepPTFfbGoeKNR/ZE+Cur+Er3WLPVNXKreaSkfyt5kj4lQhj/ATnr0P4V5WMjKbsj28BonLsV/jx8ftP8Ahl4FvvhXoRxd2KQafEIlLI9v5a75HcDaGy3K9Tjp3Hzh4P8ADszeHZr8TmZGO5I1XeQCcMTjPSvM7zWbnWL+e7u52ur66maaeaQElmJ+n/1q6/4a/FLUPhpNcj7Kmp2cykG0b5Sp9V9j3q4UFGHmcGLxEK03G2hsahbj7KjW1um7JB2mtazaOTw65kmjjurchSjHllJ4x9BxXIaT4sOoTSAbbeWV2k8tcbACSdq+wq9MQdxyGbqRjJ//AFVlKNj5uXuuxoLot74wtbnS9JtJL69dB5ccCGV+DzgLzxx9O+K9k+Dn7HPjTXo0l1qVtB0xhukkYB5yvYAHgfjXs37DuoeEbX4aieK2gj1tLpk1C4lA8yQ7vlAJ/hIwMdMj8a+ltQuPt0arZgxwsOYwR8xz1JHYV89isZUinFM6qNOFk2fMmm/sZaP4ZnvNd8V6u2o6Jph85YVT/Xqozl+oA7YHH9PAPHHie81TxHdN4azoemRkQQadp48hI41J+9txubByefbtX0J+1z8StV0+Oy8IafK8NtcReZdxq3zEZ+ROD3w3H8q+aLWOSKIRwK015Mcr9Ov51eF5qmrN606asorUzdU0e/SOOd8FACsrI3yhup49T39au+Hpvsu7zQJfMbCpg9h/k1ca9uNNs52vEWNEjZ5VlGMDgE7e5xjApnhGxsb74g6Rot1q1rFa3dwifbS5WLYeTknocDH1OPeu+s/cbOWUk2rH6BfAfwbL4d+FuhRh9klxEt3MsYwSXGa9J0+ExyMJJd7NyF7Cq+gyWOqaSo0i+t54IgI1a1YFVwOhwTWzbWheMGULuH8SjArw1hG5KS1PQhayPBfGfxC+HGi+HZtQuPENvYXkJBNu0wMj57hByeua+avFH7c+m+G3ubbwzpdxqkxB2XFz+7j3Z9PvH16V8n2rCxsYtQaXzppiQrSEkg9DgH2FU5MyTKscRaSQ7QiALyc8ce/9a+ljl8Ye/O2hz1qcZyuj6++Avx31v4zfF14NVt7KwVbRpEhtotrO4I+ZieSdvp2r6xi2S3SwyErBGAzN/Svmz9nH4AH4f6XaeJtURz4kuIg6Q7QBboe31IIzz2r6OjQNpq7HXzZyd6kdMduK8mUoSqPlOCas7Isaw0dzp4urdSPsrb1BH3k6Nn9az9L2XjSG4fy3UbolUd+mPcV09jZrBax2so3yMhDY7A8Zz+Ncjb2rw6gbWclTDJsKjr9fyp1INOMrbkSWqbPIf23PBcesfBoausYEmg3C3ayc58s/I/Q88HP1FfFmky3Njp9je211Ja3MTiaKQYVo2B+8M/z9q/UX4yeA5PEnwt1zSILfzhqlo1vDHjOGZcD86/Ov4neAfD3w80XT7S012+l8RwzeTqWk3NsUWIgZZlOOACV7ndnOe9e3bmj7No6IU5crsfSfwJ/bA0eS1STxbcx6bqOn2sm+Qg4ucAfd7k8cgZxnqK+dvir8StV+LXiCTUrxWg01ZP3FmGyFHqR79frXm+mELIWP8WQQe/ofw6dK7/4ceCtZ+ImoDTNG0+a8Z28s7Rt5POOg49c1z1I+zjq9CoUpVmjy9bmSPxRbS7RtiuEYnIyRkdRnpiv2WXUoj4Zs9rfu/JjJ81wNy7RkCvlHx/8Ast+Dvgx8F9T8SeIXkvPEiw/6MsJKxJMR8qhR94dj16V80+KvH3i3xVDb2t/rt81vFGI47eN9ioAMADAHT3rnr0ale2ljatV9l7id2foJ4k+OHg/Sxapq+oWcUckjRK0coZ4SufvEdORXlP7OniK3+J37RXi7xJNPCLhYXFrb5wZEUiNWUdfuqDn/AG/wHx/byWmYvN+UwqcZ7nuc9cmpfCfjjVvh/wCKrHxHor7NQs3LqgGBIndDj+Ejiso4GUI++72OSNe89T9Sr+zaV2nmdwF3YRz9455r8v8A9o7WrTxh8ZPFd5ayNND9oSGJug/dqFP65/IV+jerfFzRZPgXJ4/mnhuLJLDz2ijdQBLj5lzn72a/H+41uafUb28dmRbi6ludrHJAdyyjP4134TAqnV9pF7nTBc0jQh8NrqUkyJdraSgfJ5oAXPcZrnZtMkSYsXzxjDHn8K3otct7zzcnew+6WH3sdao3Uf7vMK8+lfRa7mpjxxyq5RkZexYVe05vKmRSTgnad3cnmo4tQw+x1ZPVSKfJPECrBhnG3+pNTy63IaNKZXiZJoH8t43EkTg5KuORxX6efs9fF6T4lfCGxvGvFF0kH2e8YEExtGMMp9CQARxyG71+XvmmSBJIRvjbkOOme9elfAX4s3vwj8R3LRyH+yNRTbcxE8Iwxsk/DkdCeRyAMV4uOw3t4q26M4yex9MfGbxlBbQ6jq0l6jtb2s0cTwNzG54DKM5yM18QJMyxjL7j94kd2z1r0r4meOjqlvf2SbX+1DbJIoAwGbc6jHbpXl8hWCN5n+Udcdea3y3DulD3jeMeVFS8naW+iiUYRCcqKFU7mX7x3YPYkelU7SV2k+0SL8y7j19qufJGpkHzbuhz7da96PYZNHMsNjcybVCn5EU9OvP4VVhnZsA8J5ikk8nAPSn3RMGmW6soDybsjPQk9f1qpMDFbp8uGkUgDP8AFnFWlckSSQ3M8jKuFXgVUuJjMUUcj7tSyMFVucDOM0zSbfzDLO3IU4Vex96qMbMZclhXT9NiIAYsCM+/Ws2Fvm5bJU8n196fe3Elwp5xGnCqPUihlFvGy8M3l449SaoQXrReZHgnbj7nbNECruG44HrioUVuVJGM5Jq3DhmAAyOvWgXoSecqwuofaVyeRVTe0bKzNlu4qaeaNpCGGF28nFU2kDzPJnI6AetWPUkVTIzknjPX1q5Gn3QDgjg4qitu8jYOVRT71diBkkxHzuOC3ovrUXDfY0rKGCNf3WWkz87HkCti1t41lOxTu2ZZl5HWs+1tUwGAIC966zQbHzkLCNiY/wCJhztrnlM7KdJyaQ/T9P3SDBCiPlm9a6a00W4m2ui7t4wATg49cVt+FfCMl1NC0sRw3zbm6D6V6HpXhOJsFIS+3o3U/jXFUrvofRUcFpdnFaf4YebZI/A6bsdTXU2fgsSSI7ZA6FW4JrurXwvDGFHl56KBnge4HeulsfCohQMXwx5wa4ZVGz1I0ILocTpfg+BlVp0AVeiDjP1rcs9Ct3jCJEiIpz7V2Vv4dR7f5ztOc8AVrWPhqCJUjKbwOWOMA1F3I25YrocnZ6XHGA3kifb0VEzWhHoslxICY2VMglFAzXdWugk7SyeTB0O04NaEOmxWrq0SnA9ufxq1czbRxlv4dGN+3Y2MFV6VoWOghG3EFW7g11Udl5hBI2c8jFXX0/aqgNuHfNVa5m5WMTT9I8u4BYf4Vv2cKwpgc56mnxW6rj1q1GNrYAGPaiyIc7hFHz92pvJxTkIY+9OY9c9a00IepF5a7c4GaTaPQUpOF5pqtubHTNC1JI2AaRiRk7cU/C+XyMH1AowBIcdMU+T5Y+lBfoQN8y4znHSqVxH5nGMEd6us3tVeb5uelZs1RiXVpn5R8vNY15a7owGOGHHrXRyN5mQeMg+9UpoVkUgisJas1Ryd9okVyrfKvIwfU+1Yt14btplOyFc+/wDL6V3TW4TgLzj1qhcWY8wMBgY6VGxErnjviDwDELdisAdD8vlquSo9/UV89/ET4XmG6kuLeRUjAO6NhghscAe1fal5aKu75ccYP1rzL4heG/tkE00SKtxtYmMrnd6H8K6aNRnl4mlzxufBWp6K+ns4IYPv25I4/H0rPW4kiaNXQDPPXtivYvFeiedJNEVVmYbPMIxkdePevLr7TmMjo4w4OBu4Ir14S5kfM1YODKrMrL8vINMddqttOTnIqKPMUhBUhB0qyuJMYO0dzV3MCOzuhDcROW24bBOOB9a6TVrG4uba3uLVN6uMfN0A7jOK5a6td0ciKduRhvrjj+VfVOnfB628bfs+aP4o8M28Y1Oz06K5v4Lf79wxPzk4/jXB5/CuHEVvYpPuJysfOdro0ljc295aXzWmp2rrLDNHwUIO5SD6g4r0Xx18X9c8UfDuK21vxTLrl1NMnm6fdWQUwnqXjkAA2jqR36Vxk2n3M0xi2MuckHucHnAPf2NaWlabNLcP/wASuTWWhyws1gaXcQCc4HGBXN9ZjKzkEaklochp+5lEiAiPZ0I49jWisAO2QSMrq4dGjJUhx0bIIOc85GCOxFbNwkeshZ41jti2NscQIXjqOlUre3k3MF3O4bbgA479PyPT+fFbOo3qEpPoDW8V+FF5LNJODzeTSGSXHPUtknOT155NZ3/CJW7yvajUX8vORIQAa0G+6Q4OM4JwTUy2Z+x/awyoh+XOCSD9MVPM469zP2kpLU5658NmzZhbyhtpxz3rKuIZIyGERYN129B9a7No0kjX59z5yxHf0pIbWEtIJ/nEZGFAwDk9/WtY1O4LscL5EzY3Rshxn5hjNE1rKvyqPu9MCu21HR4tUYrAvlSgHIDcGuX1DTr/AEWZY50xu5VgcjH4ZreNZNalcrexkxwy4AKHP+1xWlDKY7fy849UPrVa4umXG4d+uc5rsPC3hGfXtHmuVVo5DkxFujDvmrlJJXZcIu9jlJHZAQcMTxtPBFQ7WJK9CvXd6VaaJVZ1A4U4JPJzVaZfLXvhuT3/AM8UdLg0RXQdQitwM54NXYLgyYORtIwfQj3H+HJ7k80640C/aGznaLbbXPIkJ4HPTFW/7Lht1PlZLY9eKly6EX1On0Hx8LGxtNJ1ON7rSrZ8xtGVWby8HdEM4B3Ek5JHfpxW34s8KaD4a0+y17wzra3Fui7zLI213kzuAKnlSoBBBGfbrXnMVpJ5bHJjb+8DjHOcj36/nWjZ6fBcXSqYcW6MolcADIx046jP8h6CueUVudPPpqa/iTQNbtrqzvtYsf7PbVIDdxq3DMoKjJTqh+YHB55+uK9ndajpdnf2VrqF3a2V8oS6s4pSsU4GcB17j9eMZxxV/U9auNW1T7Rf3k14cCNXnbdhR0UZ7D8/UmqO7ylYdQDwajmsc8pXZRh0/wC1XSJczR2ySukCSyEhItzY3sT2XOSScACvvT40/BX4b+GPhfpiQaDYyWFnGkU1xCALgbsKZg68sS2M+ozXwlfBBHJkbi3TAxxjGeO2RjvzWz4d+LXiXw74Zk8NpqT3vh5hsFjOobyVzyIj/CD3Xp6Y6VhKnKotHY7cNWVNNSRzVxELSSRFbK5YAeo3EA/lUcMi8fNuOCcDt7Ut1umUSQ/Nbq/yrj5lBFXfAvhePxl4y0bQRqkOjR38vktfXPMcWQxGRxnO3A9yPw7Y3UbMyfvSNv4c+Opvh34+0LxJb2cWpzaTO0y2tw5SOTKOmCwBxjfkcHkdKm1rxRffEzxNfXvibV3tzdzTyxNgvFAztvEZP93oMnv1wSAYPH3gwfDvx1qfh0alDrBsyoF3brtV8qrEbcn5huGeT161zEzBcjPJ/unrWErbsJVJU42TIGCqzkjc2cHgVLDIWdUAB392PTFRjdjgZJPPNObaMnG5sc7ay5jhvzPQ2vDuhXOtaiIbaQRrHhpblhhYV67iffp9a9c+G/wp1r4s+JBpWlKfsduw+2ahKp8qEE9MZ+Ykfwj69K5H4Y+H9S8TTWeiaTGy6hqchZmCnCRLjMj+ijn/ADiv0M+F/hvTPhL4ZtrXTbcbFjJCucM7k8yMfc/pjHpXiY3E+ylYzVnPXY8r+OfwZT4ZfCXS4/BkMsMuk3n2q9mWQ/aJx5TDzTjGSCQeOgHAp37OP7XFvfTWuh+PNQjtJ8iOHV3KxwkEH/WdlOABnpXvVizXVvMupQbg5Jfziu3ae3Pbt3NfHv7S3w6+G/hNJr7Q9Tt7DXWcf8SNJA/mhmAJVc5QfpXmU4xxCtNEyqR5/dK/7RX7QHh3UPitq+paJZR+ItOSFbKKaaTyo5HGd7JxkgHjcODjgnNfOVp4m8VaxrEd4NauLJWl3h4VCquem0DqAPWo5tNe+vN8sZitzkiNeBj6en1rotHsn1C8trGJ47dZZBF50h+WNmOATjnGa9+lyUY3itQnK6NjT9Dgu0e91XUJNQkY7pbm4cZOOM47ce2K9b+COqfDTwV4gn1jxPrdiphh8m3s40Msm5urkLk4AAA7DJ9RWZD+zpq95YyQy3EbTFCJIopMhge474/GvJPiJ8D/ABV8M/D8Gr6tbs+m3ty1pHJC+Vd9pOPr8p/XB61y2p15Wk7XKp0udc1z7qh/aA+Emh6kkcPiK88LXTBZNzWsttEVPRiHXbjj2zg+hx9K+EfiNpGveE7G9stVh1ZCuHu1kUqx6E5HHXtX4n32p3fiPy7vVb+5vZYIBBC07jdGiklVHAxjOea+kP2bvhr8RtK+HUnjXwDq0d5HcXMkMnhqT7km1zHv+Ztu4HLY+XjGSTwbeGjhKb9nLVnoQnyJOR4B4mUNq91DHuMVjLNZRse4VirH/vpTXrf7IXw9Xxx8TIr25t2n07RU+1yK65UyAkRqfbq34CvPPH3gPUPhr4o1bw3qUDJdaXcyWz7kCeYoOUlAHAVlw3AwAe3QfX/7BugrB4D1G94jk1G/aLzFOMIqjIH5frXXjqjjS5UYylofUC6lKtq62sK+WVOZGXPFcg3izS9B8faXoOoSLA99D58XmHAeQcbVPrjt7V6Pqk0RtYLaCNY4UKleOW9/pXiH7XHw9uNc+FVv4nsI3/tnRZlnimtj8xgJ+cHHoOfqK8FQcbJHDKL+I9x02OZVAiBe8mckN1KKOmKyvF2ivYaza3ORIJcLKw7OPX8K8j/ZN/aUtPHsQ0XXp44PEMMIWF2+VbpccFff1r6YvvD8OpeHngB33E48xZM/x9RXs06ft6fmdEYcyuUNdt3X4f378hvsxkRcgbGHIIJ6dj65r83P2iruG8k8O+Mtc0xb869CUvcZjMlxG3liTIx85QY4xwvFfop461qLTvg3rF3dtsMFm6tng71GMfWvzz+F/wAaNH8VeHZ/h/47tPt2gam0ggvEU+bZys5KFcZOBxyMkNweM104hRpRpvyPRwcJVJ8qR5PpPgceNdU0iHwqtxdW+pSiJrO6jIkhYtj5iowyg9/cHmv1J+Cvwf8AD/wP8J29pBGsup+UEnumG4s2M/5xXz5+yX8DbP4ZX2peItSvrfUIYJTbabMFKeYW4LMuOG6D2OcV9cR3UOp6AcL5twhw2Tkq2evX0rkw81WqOo+mxtiI/Vr04/M+YP8AgoZrwXQ/CWlCbHn3jXDIfREPPTI6j/8AXXxZNqIWTMUeMfKM17n+2B4u/wCFhfGK4tbWaN7bSbaK2QEkjcSzOc+/HftXiCLPY+ar2w80ZO6TB4FdybqScj5ip8V0Ubq3jjUea5MjHK4qZLsqxLASwKNzBcfd6darXkzTXCh3UHkqv4ZrM1S4YWPlxFWMxI2Z+6uOuOtbJX3HCm5SRHqnxK1HUdEfwrHqd1/wjK3H2ldOzmLf3xnnHtnHoBXM6lp1reQ7rdtrr8xHp26VT1CHy5hB5ZB27lA61Dapc290pQ5ST+E5+ZeBWsVGj1PZpx5VylAW72UxVjjaTg+gxkjnFaOm3kkzYcFlY/LxzX1v+z/+w0/xk8E/8JFqur/2dFPuFqqQBixU4JbPavnDVfB914Y1vVdOnaOS5sLmW1d4vuuVYjevouB+tc8cZBq+yOmphnB2Tuc/qWmm6YkNhscNjHFc7eK1rLsl4c9K9G1HTbuOFReWM9lwMGSMgMMZOOM/5/GucvLWC7iw+COm7qR/n+XNdlHERqaIwlCUd0UfDl4yxyWanBUb0XqMHqfrXSRxo4XuwOfxFcO0Fxo+rW8g3KI2zuxxjvn8K7lbiKYebaurRSKCjAfh/OnNe9oZWXMUryaNX/dLsUnhe3p0rI1a4CxeUu4BuuRwa0rgjJ2kYHQkcg1z1y0kl5tJ+UPg5PFdMO5tLsS2MKx27GQ53EYHpjtQ8bTeXED1AQfj1p8MbMrZUpH13t0qKzV5py8ilYlOd2euK2T1M2tBL5ftF6kW/lcD6cj/AApb4iS/IJykWIxj06n9aSJgZJZG+ZpDw3TFV5Zm+cnGVHOPX61SEineXG1hHtLAkfnWr5gsbIIRgquAfX3qho7NLcPOy7xGd3P8qZd3TXEkasAhxk85xVdRkXnAOCgLHcT7c9aduDSbRx659u1MaPy4wQ5kB5pMsSAm0HOaESSA7VAK8E4z71bVvJjDYAPbHcetJEhkBUYLFhz/ADqC6kMkjRqQqRttX6d6YhJJAy4OSSMdKhjwrB9rFO3FI0hjbPUAcc1NBKRjGTngrSuUlcnX99OFxk/U1s6TppXJkOMyfd/2e9VbO1CxBxksPbn611eh6LNdNEVTzFdgCeufYVhKVtWdtGm5Oxd0ixNwqCO33Z4AUfM/PYV7R4J8EiFkMqk+X8+1hwze9VPAXg8SSrOS0YRgAcdeORXsWj6WtvCqqiog5A715VWq5aH1WGw3LaTK9hoaRsjRqN/YkZxXU2elrFGGIOSR/nipLHTxHsY4Y9NuK2LeBt43ptA965LnppPqLpul+WA+1Wc9A3OK3YNMjVlyPmxTbOPb82ea1LSI53uPpmmLlLVjp8ZjBCAvnj3rTMTRzbAqlsdMcGqluxhIIPfIFXVutyrkZdfTvQmYSvcmjj+T5gC1OjVlVs0zzGYZ6U5WZhyeaq5PKTqDuBzkU7Jb6e9QiQrkDin+chxls+tNSJcQbKnPAqaP1z27VTuJNwyvUCj7U6qVA5Ixx0qk0LkuaG8cZNKsgzy2KzrOSaTcJAME8EVPjaemadw5LFmT5+KrMzK3PGKUyepx9DUbZcEDn0o5rBykscucg88UrXO5cdPY1RWb986k8VKzDpUczL5ewokbJyefSmbiTk84pGwWyKbI42MBxUOTsNFKVt7nbVMsdxyeankwrHFVzGectk1lFmqGyN2zlvWqd0TgetWjHxtH3u9VJ4zE3XNKV7A43KUymYNz71zGvJ5sbfIGYcKQOfrXUNI2W4xmsXVbVmUsv4dqhStsc0o3Vj5m+KXhp7KS4ubZFcN/z0bLBj3GO3NfPuv2srXhLqUnU/MGr7V8XeG21jT7izURpckYV2Hyhuv5V8oeONL/ALMluMrm5zwDyOOMjPavWoVLqx89jaLWqPN5ofNwHXcvfHGDUEcbwTYxiNiSc1oTEjIbiT+Jl6UqxtIdqgPjrXceJK9yrOpkt5AvIx94d81+h/8AwT7tml+C9/PcRiW3bUWiMcn9zABX+v0NfnpJHJHxjAOAMfdPpX6O/sU6TqOl/B7QpYF3QXmLx42IKusjfI2B/EFA69O9eBm9Rxo3ROzRgfFf9ji+vviYp8J2iWui6qVdWZhsgJB3DjtxwPU19Q/BP9n3w78MfDcUEen28urqpS4vmUM75yTk46cmuyur6K3t7dURkCgNG2PTtVm48a2VvEGMUzO68gJ0+tfOUKlJSbqz26HXJW1aPyX+JHwY8S2eq+I7uz0W8Gjx3lwVuI7WTy1jLt824DAGCD6ZrvrX4YwfFf4Q23jLw7aIPFWixLY65pVufll2DidV7OVwevIPPQEfpHpOtadq1qdOa2XymjIMbAEN7FcYPFfJS/Bnxj+zD8S28Z6JbN4i8N3TtFfW1mu6QW7NkqyEjcRk7SPfpmuyGKtTTUuZfkX7GFRaaM+Lf7DuF3B7XfE0gEiyHDKxOMV7j8J/2SLz4rfDXXPFWn3q21xal0sdPmiysrKOQzdR6AivefiZ+yvY/FTy/FHgS7gWw1IiaS17IT1Ix0Iz07Yr6M+D/wAP2+FXgTT/AA/K63DRhmmlUfJvbr+JNdMalSt7tnbucvsuV6n5AXlg8e7zIVikjb94p+9kZG365GKp2dvHLcFJf3bYyFYYJ55NfYH7Uf7Nt/ofizU9d06wNz4fubnz28lADA7DBUkfwd/Y18yan4PaK4VLiSRYXVznyz5iqOnNbU8UuVxm7NEOi90cx9kTazhiI8ZCdCeMgH3r7D8P/Afw5ZfsYa9r2o6PG2uagjTrdPF+8QBwIwpIyBgdvWvM/wBnn9nt/iv8QLS3mQw6NZ7bi+lLAF0zgDjBBJ4596/RD4vaLav8F9f0mzt/3Cac0ccaLkKqKCOfoKxqVXWbqJ2SR2U/cjyn4ra94RTaRZlVlGRtZdozgc17DorWGieDIpLbbGwtszRg5bK9Rz61z+urBM9xCRsmLgjb1xjHX1rndYiuprCSyDkklWVGP38HIx/h6V6lKbrUoXY1L2bdjhZmJuJm2hRI5faOg56VHEVWeNWG5WOcDk9+3vip9g8tkDjeuVOcDaQeQeeMd/fil0+CKTVrCC4k/wBFkmVZmXK/IZFDfkCefY16XNyxONt3uzYt7gMcI+5M7Qwb5enr0A4+vbFRm3AyUztzjpivr/8AbS+HOj2aeFPEPh+0hg09rdbQwwR7RsUZR8enOMd8ivlafTZUkGxGMbqcMqkjPWvLpYmNXqZ/E9DDlhZ8DqmeeelWPMRQIU4Qjk1M1ukdq0r7g+OEZcVUhid8MuMgjp3rolJ9DOT1JLUfaI8nBVHwFNXZlCsy/wAOdtEkZdSkYLheSR2+tVov3m9c5CjlvSnG70GvM6/4c6h4Jtr7WLbx3pk89jeQxwW15AMyWLgOXlTHzZYFR8mTx0xWV44+HJ8Mi1vdK1KHXtIvFMkMkK/vVXPGUXPb0HODgVipJHIzxkDDfeC/1rqdN8YaT4d8HBv7Pmm8TrdFYb5nDQxwk8oFLZ3bfb05wMVpLmVtTsglY4vS2ha5Ebv9nDrhmYcqc10HxA+Fmr+EbWzuL60kuNJ1Bcx3sa7lH+yxAwM7geeDz1xXGXqm6mlJYiJudp4ODXrfgD40aU3gXXfCHjye61DSFtUOkxwwlnEysSqlwPlAYIVZjgdzwK1tNWaH7vU8v0/TZLMSDzAbfB+XGTuJz1788889eabK373gYPua2LaRv7DtpiQ000YYg9M1nSxjcMjDHvXLUcpS1OSpvZEFurEsOg9a9U+A37P/AIn+Ot5rsPhprMyaParczLcyFN+8sERODknY3pjj1rzWNSFZRlh6179+wl44uPAv7RGixrNsstcJ067UDqpVjGP++8dfU4564yTa8x0lrY9X/ZT+G8XgXS9e8Q+Jd1lcvL9iHmgo6xR8umDyMsTn/dx2rU+J37V3hDRbp7XQJJdWvsj58bIkZehHHOD6Zr0b9tSOTwj/AGZb6LCN2qSu0kW3O52PJA/z1r8//F0dla3UsSRtDeeaRIp6YJyeD7+vSvDp0XiKso1dWjathtprZnqXxQ+LnjXV/D3h++l8RRQaXrUbtHb6afL2MuAVds5JyTgZ7Edq8efy5rgsCXdl+eSaQsSc9SevXuenSsht0a7Y0LuxJ2ov3nwBnA4LYwM4J4A+v1J+z7+zq9nDbeJ/GdsDdPiSz0uVQfKUdHlB7+i9Pau+qqWDp3POcVSRw3gX9nnxp4/0OXUfJTSLKONmtftSsJLnjIAA6Kf7x/WufsvC82hXFxDMjJdwOUliZsMjdwf/AK3ev0A0+FZriOJFkYMQESMjJ9h2rlPiV8F/DvjSxN3ZXzW+vKD+6jVSXx13DrwO9eF9cnUd2tDncro+Wvh14Q8R+OvEsNtaX2rW9jAcXF0s0rCCP8/yBr7Am8D2114HXwrexf21oIIZra82vuYchicZzn5vrUPw/sYfh34bTSdMt4Yw65uJ8ZaZz1csefoPStNfMnkLh3Lt3z+n0rkqVZSd4slScdmfMPxO/ZAtr8/bPBkpgmbP/Euun+Uf7sjZIH1JH0rsf2NNfn8LeKfEXgfWYLjS5rhVu7ezkUhVdPlkHPqMEHOD1FeyahNY6RZzXmo3sOnW0SnfPK21QPT8/wDPWvNrr4s+Dda16G8awur6SzLpHfpGFbBGMo2clSDiuiOIqShyyVzojKUrI0f+Cinwtgkg0D4i6ZAZGLjTdTkjGVMbBvJkbAzkSfL0/i55Axd/Y40uG6+GFsIkzi8mLop+YAnPA9favWPi34m8JXng/wASfD/VL5tWi1SylSKS0TzpIpSMIG2nAYMARyOhyRmuR/ZL8E6/8N/CKWWr6fJbSXt2ZIZ5cYG5R8oHXGcnPqTXsYytCpKMEd1uZHsHiS3ez8tWYKRGfl7qO3PeptWnt7PwXdiW2EttcWUjSxOflb5cMB9e4rU8SabHq13b2hbe5CxFlHKkt169q8//AGkfESeC/Atjpq3G25uAUBPBYAdacaEo80uiRhJcsWz85vH0MPgfxFaafpN2yahE0k0V7akg7c8Lnr8pJHoce5r6C+Ev7f194a0220bxnaTahJHt8q8tTlpFBx8w6ivIvFVtDqFnel1RpeWVmXkbTnr1B9q8V1CP/Ssg4lzg46j8etd2Gp80U1ozBTcT67/aC/bU0zx94LfQ/CKzRz6hcA3sc0RVYcdSGbhs+gNeZ/Cv46akuqDRW0rRbdtpMM8sPEsgHyoT0yRXiDSGSxZoyBMWxgcfjW14XvIv9IE+2KWEArLnDMD/AAj6VtXw7qQ1Z6GDxU6Mrp7n6ieAvDfi/wAUW/hp/FemW2mwWrG8uY7ZwRMxz5fyjoBkE1wnxU8QeI/CnxB1C3h1SWBY5vOgZFG3Y44BGMcYIxjtXafsefFCX4n/AAnElzdmbWrBjbSO5y23H7tsdMYwM+xB6VmftXaEIbrRtcQAbla3kbPy5Ayo/nXnPDQpUFKLPYoy9rX/AHi3PkH4geF7r7dfax8mo3l5I08qsxTLHuox6V4PrXxOlUT2drZkT79paTcCg6EEE8V6n8TvGWpTXgsrctDCo+b5sEsDnH0/GuHHh5/EGoW09tpT317dNyUT/WEepPBNehTfJDU8bF06XtOWK2OTtNfnvLf7ZPEzz2/8Man/ADiub0nV5m1xrtEM8szYMXJJB7AevPavfta+GcHhzTbe71jUraYzyMrW9qw2pt5PmHPUdMVTuv8AhWtx4002xsIpLSAQFbrWELxxvOxGCuew5y2AOR1wSOiFS6vYyh7vQ5bT/Dy6hbxXF9HHBew8qDIAoB/2u/HNfY/7PPwN+G3jr4U2U83h+31TVSWjvJmBL+YCeQewxjGK+cLrwLo/2hftl1O1u77BcLICp5OGx3yMV9G/sVXzaLb+KtPtZ2eJijojNnHUHH1AFePjG3u9BSnLdH0p4Oa3+Gvg+08OafAGgt9yJlicKTnH4Vw158EvBd9eJfTeHrYXvm+f9p2gOzbtxLN3BNdorRiVnkVm44B6k1oQzC+kYSEABNsaqOnPSuD47RfTYl15ylzNl/WfDvg/4keHZND8QaTayW0qbDHKoBU44ZH6qQejdRX57/tQ/scap8Ib5tc8PmTWfCUzb3kVcTWpwcq+Oq46Nxg9eOB+gDWMSySKmSowAj8lvWvnr45fHPXv2cPEWl23iSyPiDwHrAYwOwzLb4wHhbdwxwWYA/eUNjoc+xGpKSUeXXuj0aFRTfLNn5wHNxM0J3N2Bx2rVtLX7Lp4jChUVdvXB9f516b8avEXgHxn8QLnV/A9s1lpVzBE20QtAPOBO/8AdsARxjtg5rz3WGAtQg+Uu2OBkj/61epTk5Jc245QSbscvqEyGAEthycY9aylbzNw5RgeC3IPvV2+QCURh/mT+dVrf97cK28Kq/eAGTXoJaGDJbnmzMa5GMNkUsI2xK3ABPA702ULuyrHDU/aI9shO4bePpVLQRBJhrgv6fwjpVGbcqFRgMzYKjn8KsXkg2wkc5J3YOOKisod0hlc715wGq92GxZmlW0sViVct6VmNiMsUXaegH/16luJftFx+6XJxg+nFQNIFWRgcBKpKwgYnhQ3HepIoWZfNXaBjHJ5qLaCwzwxHWpyo2jj5c81VhDjmKBtnEpGATxz3NQyboVdiM4Bz7nNPnYttGfl7eoqOb/Vr1POTzRYTIvllmVQDnr7Vs2Vm93Iq5JVRgt2FZdnDvbcCXJOOBXoPhnw+8kiszjygq7ti4HJx681nKXKdVGHMQ2NiitBbD5iW5wDkj0969h8E+DHtoILq4TbOQyxw/xRMeAfqazfBfgRta1kyNHG1pbthyVGGPoK9x8P+Hyl1GzJ5cNq21FIyWbGc++K8ivWbdkfS4XDaXL+g+H10+zWPO5kznnOSTz+tdVa2PlxqSM8VFawGEE7sMetaFsRJwT29a4Nz3oxsie3UPJtP1raghG4ZH41jwr8wIOK2LeQhlBIxWV7Mo1LfKLjGR6mtOMgKM8Z9axhNtzt607+0H4+XOKfPZC5bs2o7hTx3qYMpXOcVi2szTsSTtAq/HJtPPzcVmpMtwRpQ3G2MKBn3zViNn53fhWZ526PGCpqW3umVdpORWikZSjYvgESZJ49Kk+X6VR3sTuzUiyIy/OSTWqVjNomaRckABj6CkW4LOcLjnIqPau07Tz1qHzPLYdzVX7Eo0Y5CuM/pS+apGaoxzMeTzUrTADI/LFFwaJ2kFNE+1TjOcZqFSZDxUvkMMDPGc1ItCFfmlcj1xQzHcN4wKfDb7mkblju4okjfbjGKNRegzzD0HSqkzFcketXURk5OMVXuGUruI4NK1i1uVhlskjNIVI5xxVhVLLx0HWi4jyqlTwaiJV9Sr7nrVWfB/2qtyR5BU9KqNbbckE5FEgKVzGI35I56Csy8ba23GM1pTKeDnOfWqc0e4jIzio23Iscr4g0drtRtdlYHG8dhXhfxX8H2ut2+doj1OFP3JGAGAPOfUGvo+eAguCMqVPGa8/+Ivg2LXtLbYrCeMZRlByv1x29q3pzszgxFPmi0fCWsWM2m3k8dymydDh1I9eRgVRt13ZZXII6+hr0X4kaa63b+cqNMjDEw/jwMgf/AFq8+UrHsDDAx0XvXsxleNz5KrFKdi/b2631uIdpMsh2xe5NfqF+zf4NPgL4c6R9onec4+aNjgKCowgHYA/rX5oeE44ZNb0wjIKXEeQ3QDNfr98OdEWHTYY5Bu/cpsLHII2jknv9K+PzpzqVI0YuyOnC0017SXQ2JI/Ltjczs0cjfN82c9+BWE2+aWR5gUDnoc9DV7xReSXMxFqrGOMBXZT1Zfb6VjtqE8kDGVcLEuVYD0GTXxWJaU3GPQjGTvujB+I3je4+GPhi9120Ec11ZxPN5JPLbQSRj02jnHSvknwx/wAFEfFOh+MtQv8AUdOW98NXlw0g09n+aBDgbUbueMnt/Ovo74ialJqHw/8AF8kiedDc6RdtDIynJUxMvGa/MG32yeWwftnjgCvpsnoqdJqaOKNbltZH6+/Af43fDr4oNJfeFb5NPv7nElzps3yOW5ydmcE5zyOvvXuL4kjycAYr8HNJ1q/8P6hFfaXdyWN1C26OS3cqR6c19pfs5f8ABQa50lTpHxHkkuYtqpb6hEoJzkD5+/419LS5sLF02vdZ1JKtrHc/QiS2t7yFoZY1liYbWSRdwI9CK4HxL8APA/iZo5LnQrVWRw58pAhb6kc103hvxRpniTRrbV9Luo7nT7qMSRTKeCp6H6VqRXq5+fgdgeD+VczqYapZVUritJGfofgnQ/CelxWek6fBYW0X3REuD+J6n355rL8baPf3vhjULSK52wSW8m6ZVJcDaeMZ5rpTNztY7h3A+lQXV5ts7iDHmTCNmVem4Y4qq31erFpWVkSua+p+POteH7exkdJpXmujMxO0fMqgnOfQj6VT0fw6njDxVpmkW4NrdXMiwowydzswUD2OD+lek/Erw82j/EnxFA6os8VwzrJj5fm5xj8a3P2X/hXqPiL4sWWpmKa80rTW86ee1H7xHPKjnqfTHauanXtR93cjWLsyb9un9n2y8A6b4L8S6dp8dn5lsmkagY1UB5UXcjtxn+/k98gYJwR8cLbr50XqZAGD9f8AP9a/VL9tLxN4e1z4I6t4ZhnbVfEl5JF9hs3X9+sqsCCAQDgYz/WvzL0vwfqfiDUUtrGzmkmjfDxJCzSDnBG0DOR39K7qeIjyOLlojX2bqO0UfpT4e+HMXxm/Z78NxXs7XmoTWURj3bR+8HCsTjPHr6Zrxz9oj9lGP4S6JbX+kyTXdm0JE00igssuCTyAOD2r6D/YbsdVtfh3HaaxbSQNpcj20KzIVY5w3Q/UivdPiZo+n614K1q01NVe0a2k3g9iFyDz3B714VLCt0JYmMtmTy8r5GtT8UdcsbiNlVkCgqRt3AjIPTNV7TTXtI5XuQEDFTGVOeMc11HiDS4ptUliSUrEJsYcY4B7VzutXAnnKDIjiGBivew9T2lNNnDKLg7GZDbzRhpUnQOw5UnpVNi0MRM3CkEsV7mtNgPkYoEOMn39KyfEFwyxrAGGG4kXuPSu2nG7uEdWYsl9IlxuTg/3mqaG6nkba7swboehz+FVZk+ZsnO7oQOlT27C2mRnG5ccfWvQsdC0LN1p8jQnDgyAbsAenast43YozofvY9R6H9K2Vmc7gWDBjux7elQzRPIqqjKgHIzQrrcp66mnHeWr28KbwhUDqSSfXrTtsYYqrhmxwDWCsBRmYtyvfrUq5ZSTn196xnS5ndGEo8xrNGOrELx617H+zD8JdR+I3iSLWbPxHZeHm0m7QQNdfNJLKPm+UAg9wM9uw6GvAoZGcjczsQe4q9pWoXWh6il5Y3M1jdqwaOaJipYg5A4689u47da56lC8WjSjanNNn3j+018bz4k8WaX4Y1G2a313R5ds0kaMUmDKv7xGx078dM14h4Y/ZM+IPxY0a+8V+H3sDbzXEpjtrq4KTOquw/ukZOOOea6z4L/DHx38dPiRonxF8XwRWOlWqRlXkTYLyFQ21ETJO3cxyTjI9c8fXHiTww/g/wAOTSeEboeHo/KZfKVcL+8bLlQONxJOPSvmKlaOFn7ju+p6U8VTlpbRHyB+zJ8CJm1G58R+JIVeewuGt7SxkwFWaM/NIfXaeB759q+t9L0k3VsLi5LQQKfmn6Drj5fXJrM8F+EYpoB9olaHTrccsg+eaTrgH+8Tkk89a9j8K+HDrH2S9uIVW2EhjigA4iABxkVx8tXHVbvY+flD2s3I4WfR9QPlRQqYILgjYqk5T0JPUVTttInhtz+63vNIY2flmyO/5D9K9TuLO20ee+vbq5WCys0KF245I56+1fMPxQ/bY8H/AA5a5TR4f+Eg1YZSOC3PyLk8Fm6A9j3I6V1LLVezJdJbI9Vi0NLdmhncCFfmkmlGwKvqc9K8V+Jn7U3grwBPcadpsp1/WVbalvbn91u6DdJjaoz17gV8l/Ev9pzx/wDEySe21G9k0yxmfdJYwDywV9GYgMee3FcDptxE2owJtBbeAxYfMfX8O1d9PLYw1aEqGl5Hs3xF+IXiD4oahFPqjRxW0ICxWlrkRq2Sd/u2OM9scd6zdE1+78NuklvtlVQQYWHrjgH681lJP5MKww/KQc7q0bC02hHc/OxOSRV+whazWhcHyO6P1O8A/CTw/wCAkZbC1E10eHurgZJ/3R/D+AruLy1tbmGIzzIrRsro+R8rDkH/AD2ryTT28aaxJIurajHaFT5bGzjIXcB2J5q8/wAJYNcsMaxPf6gjA/L9raMEZ6FQQBXk4atzfBTv6nbz9EjsU1jTptaLJLG91axs0tvAwLF1yRz7g5/KviL4/fFa48XeMZWvRtgZHjtrUTAeSudp74JPrXufxa+D+n+AfAV3rnheO60i+gnh3ym7fJhMihlPzf7XT6V866p8dPA+j32peDvGvhCXWYBNuXU7UqJo9yg5BJDZGeqkdelenUqVuXlasOEI1HaR4tqet3NtI8i20QgIJHP3e2SPSuB1S1ka4e4/1olfcSvGcdvrX0fpXwx8K+IrV7q28bf2CJZHEGm+ILTyrgLj5VyxG7jnIyMH1r5g1bxUW1iWK0jBsRIcHqwAJG5fr29q7MLNy6HFOC5mkNSKRPli/eGQgcDk11GleHT52+4m+yGQbBJgHArCjmlsLiK5jO7YwYBsenIrptY1jSLjw7dSR3Ekd2y7kiI5Rz2969Co3a6OzDRgn7x9WfsV+JLX4d+NZNBa9xHqMYjO4gBmxuQrn05H496+mvjF4Lm+I/hPXbCGY+baE3FsVPzK6jcBj0PI/GvzV+HepWGgyeHLuDUbuTxImqIj2jAhFjDDDI+3kkYJG44z0HSv1HuJ5LHT4tclDWjSwfvLVjznHGcdea+ak3Tk6T23PoKk4KEa8dHax+VmvNJdapeO6BpBJsaJjghlJUqfpiuv8KeLbTw9pLhtSh0hLW1eTzrjDPLNjiJFJGWPGMelbH7QvgWTSPi1cSIjW9jrCm/hkVPkZ8sZF9jnB/4EK8LufP1xnlk2wjaViAOSq+lexRtVij5vmdabmR3njD+0tLng1PUJpNrPcW9p5e6MTsTknvyDznNczHrjzSxrJHGiscbd2R7Hn/PStO18F32uTKY5IbNgpVFfIJA5OPrV+28GLp8X7+1Zyr5OMEGu/wB2KsVKSjuR23jCeCOO2kuHeyVt3lu2dvupzx+Oa+y/2DtVs7zUPEV0XykNvGOeCSxbGPyr5Tt1smGxrSEbAMptB/GvrL9ifwTpeq2fii/uSYpFkjt0WJmXClQxIA9O1eTjtYpRMeZS2Pq2e2bzC3aQbx6+4oW1aNuGwRzx0+tc9rXhfxFpemu3hXxMk923z/ZtYiLocdAGGCM/iK8/+CHxf8aa98WLjwX8QdIt9BukgeWBolP71gRjaSMFSCTx6c46V5aik9VYmnRlUdke4abNc28xMUe+TGBkZ618rf8ABTHxPa2fwv8ADfh242/2tdaos6chjDGiksevAI+U+z49q9A/aN8cap8OfHeh6Rf+LJ/DvhPVUdv7QhhzLAUByu4Ag5BBHHY5rhX/AGb/AINfErxRp+s33xG1HxX9uVnVpLoSTttAGdwXco7dAOK9CjW9i7SR6CwbUVJuyPgTQrPZcIrFRI3zFVPPX0xxz69a29cjaMkt8mJNnzcYOM19b/Eb9m3wL8L11O+0E3F1NGqtZSXcofyixA6Y5Oc4JzxXzF8ep4V8fX0NvGtuI4oUkVOhYqSTj6EV34fEKtOyRh7aMpcseh5dqGV8yT7jt0qG1ULb+Z/eJ3HpmlvGaRljVQFB+XJp7lI0ijUHn8hXtrQsRj+6QgZ3HCf1qWVcRoo+8owR04pFVdqr1+namXNw6RswZQoX5iwoEUpFNxcFF+XHc9Ks/Ja27sx5A4NV7KcOyscHrn/9dM1C4MkixL/q0GePU9q0SbArsxjjzGdpY8f1qJc7Qo5VcjH9aVmLYK8hajbb5fVlYtz9K15SSZR78Ad6kjlDDByD2z3qBQrKBhsA5qeZ1LZUcpgAd8UtQGSv1IGS3QUySRm2t1A4okzJJ0woGKjjUSSKmcDbj8acthm9oVr5bI+P3jHO09DXtPhDSWu0traFQLydfkDdF5+99AK8t8NbY5EklTcEAJHfjgV9HeBdNj0uIXcwEupOFHsncBfr3rzcRI9rB09TuvDfhu18P2UdhbPJLIScyNydx5z9MV12n2f2ZSFZiiggc/jn86zdDifh5tzswxzwcd/xrpoIEjjyF2k5HtXkM+qppRVkSR7Y1AxyRzT1Xy+eKb5e/BFS7B26/SsXI7FEsW8gZfWrMFwI3AbnHTmqUXyj0p6tzmoK5TXiumPTnFTxuNoPesyNmjkHcYqR5mYAdMHrUvUdrGrHNt6cGrC3Z5Gay423d+Kf5hXgHGallJXNYX3y8mrFvcZHy9+awopvMTk1PHNJGUxRcTidCsxHG786d537wj5SM+tU7ZWn4yKnSBowS20c10RXU55K2hc8zPCnBpu0hsmnQx7l+tOAHersZD0jVcHJJP6U9fpTY1LNjtipVU7jyKpIhklv97J4A9qsSHI454zVWORdxBOCKnWQbQvU+1NEvckjjMca9s07ydw5zTlHQc1N0GOtMkozQqik81TW0kuN3QIDxWrIok4NQtHtbHTiixSZTa224A4OOajWEqpJ4+lX8Keg5qNvpUOOug+Yzni6nn61UmjPlnJ6VqSdMEjFVZolcHB60uVsXMYdxHuRmzyOtU2yy9M1rXUaoxG3kjHWqOwrnPIqJQdw5ihIi7sNwD3rJurM7iM7oz056Vr3mY8MRlRxVGbG0kHtg4p8lkZy1R81/HLwqi2c06JFGFUvtwMu2eTn1x3r5o1CyKzeXKPK6lWHoa+9fiH4Ztdd0mWNo2ZmXaVUduvP418V/ELQ20TWnid+NvmF8HaFz/8Arr0MPLTlPnsZQa95HP6Mr2OuWFwr4QSoHOeDg9a/XLwl46j+y2ixyPG7RRFGZcKUIA2n3Ffkz4Q8SWWj+JrC61GzGo2lvIJntWI/e7SCFPqBX6MaN4nTW7fTr6ztxGrxRzA7sBc8gcdeK8HOKcr8ydjjo15UYWtdHunlwaZJJJPKVilbKnafvHt9PeuY1bXVZt0Q5RmR1PfismHXL7xlpaadbW0k99EWLeXztXj8u3Jq3beEbmzs0luVczMDviHGwg8BhXxElyJtLQ5MZVc0nT2Ob+LWqW918D/GLtbNG0emS26MgP3SOx6d/wAK/L6O1kaM7SSwJBKjPfGRX6R/tR+O08KfCKTR9kYvtZiNlbQL1CN/rHx6Be/qRXz78F/2T5fiV4H1i81RpLGYIy6aWJUFwv8ArWxy2D07cV9RllVUoXkckYSkj5ZkULIfmIEZ2/WpFZ5AvO33/Ef4Ve1zSZ9B1S4067TbeWc7wTKR0ZThj9O/0rO8xlGGBUr0r6lONRbArwPp/wDYy/aZ1X4f+KrXwTqwa80HU51ig3scwOwPTOevAAzjvX2J8Sr3xl8P7y38ReF7iTW/DbEC60l/naJieCpxu25+uD1yOn5H3bSxX8FxDKbaeEpLFIv3kYHIbPqCOK+uv2Xf24dX0PxJa6H4/ulv9KuysJvpgAyMTtDt0GCeCQPTjvXh5hlqqR54I+iwuIjOzkk359T9CtK8US3mn2dy9o8LTIrvC/VCeoPvWrBrFosTXV2pt0jOFmmG0ZPYH3qO3stPuEt7uO5U2k214zkYcEZAB6dOa8h/aM+K0Nvpum+HvD2oWM9/qFx5It4XEk5wMkKn19fXiuClTeHpyqTltsu5EowrS5acbHy/8dM6t8S9clVleGW4MyzAYEijp056c4/Su6+G/wAdND+Bvg1rbS9JuNW1S6JmlRQEVWPYsew9RXvn/Cu9K1XwlYeH9Z0+FrmeyVp7hUCyxzkffDDkMCeCDXzfZ/s4+K9U8RXWnWsKrHDMY2uGGxAuThunQrjpXjQzBSfJ1R59SPO9Oh5x43+KXjD4u+OrbWBYxJqUGIrW3t487QSfv84bg9c+nWvqD4I/Cu38B6a3ijUI4zr102+5wnzYJyV6dc16N8MvgPp/gPQxbz2dpdXjqPNuIwck+vPTn+ldzHokMO4NEzbjuywzyKeI+tVFaUbI3pP2XUwY9Umuplm0WcQpMP3quuPm6ZA9cVpaoG8QaPdaXqUTSQTwtHKVbBYHrg1mX2mT2bTug2IzGRSh2kN296zLrXtTWLYHRiCFMhiIC9uTXkxxNWm3Bydn06Ho+zjO3Lb9Twvx1+xN4f1NZrjw9q76bfS/cguwrR9+MgZH618hfEH9m3xv8NzcT6jos1xYIxL3ttmZAM8HjkD6iv0g8OrGtzJPqd5vuPPEURB+U56dvXNc/wDEaN44dbSe9QWrwMpbJyg25A685r1cHj5waOieFp1LxlqflZeKlgJJZ3Y7OTHjnjsa5G4uBeSGf7jydV6gV6F4kjTUpLqBYmRVZgzrgZP864m60W4sVZ1j8yBDtZ41JwSPTrX6Rh5qcVI+XlBQbijP3GPOOc0KcoGPzHNNhC7W2uH3c5zxUnyR7WBwrHFd6JJLdvMmKkHB7jtUk6lGxuLDHWpEhNrKJMh9wwqrx1OOadHb3GoXXkWUE95PICVhtoHldsdcKgJwO/pUuSRpFdDORzICpPB5FWUx5ZBP19qsjQ73c6m0aJ42KurYBQjGQfSpzo7tCCBtbqDUqpHozNmb5ZUEgAEHuetev/ss/B1PjP8AFaC1vIRLoelhLzUeMq0Yb5YyO+8hhj+6D7V5EzCHG45+UnB4z+dfoT/wT/8Ah/8A2f8ACm814qqT63euQzHpFH8gKn3Kk/lXm46v7OhJrcyqNpWR9G3LKoAt41SFFxGqqMADgce1YPiaabXl07S422yPIZXw2PlA9e3rn0rrLrT5fLDo4VBj5m6/X6VyOrSnT9YuJVXyJXt1iR2HBGTuYe2OK/Olze0XN1OdRfU7jwH4bgvNQgYp9m03T1WS2jZcCU9GkP455qb4rfFCw+FfhW6uba1mvjbN50sVqMlATnt3P+cVUsNeuPEUMEEVrcaXp0cYjDDAkcjoCOcA/wBa6K68P2t1o0ljN5ZjljIaTZncMHduJ6nHrX0jxkaVPloL5nfTp3R+bXxn/af8XfFxnsty6HoAfEdnaud8gPQuw/Meh9a+ddXtRDdM8P7p94YEHn2z69K9N+L2iWfgjx9rmm6XML3TUuG+yyp/CmOV9DtPGfavMNauCvkT7Sqo3J78+te9hLVIqRz6xlYteINSfXdRfUNReN7p1QP5a4GFGAAKoabdwQXESxqoJOd7nnjsCazrq6FxcblYbR0Het74aah4cs/iN4fPi+G4m8MiZmvltQxfbsbZjaMkb8ZA59q7pRdmkVPbU6/T2ErKA6MSMjB68dvWt+2kVdxVwCp/z+NeweIPiV+z7ZrZW2h/Du61GNT+8mmAUPjsd7Et3x+lJod9+z14jvmjvdP1vwkcEpJC8rr0GVxGX59ODx6V4bqO9jhvfQ/RWO6t9PhhUOLh4QWcQgkjPfv39TVhrq6mV2ESWcK/Mdw3MRjJx+FRWNnDZwm1tx5nz7pZB0+hNee/Fz9pHwH8J9NuDq+rRXd9Cu9dNs2DTMR0BwflGcZz0zXVCPKuyO+9uoz43aXeax8MdZnZ7mRkKSJGGPKqwPQdTjmvnPS/DHgLwRBc+LfF9nBeXa3H2rfMnmOWxhERe+MD8TzgV6p8I/j7dftDQ3xXTZdLs4Th2b/Uqp+5g+pH4fpXkHhm1tPHXizXND1QLPBosztLbN2kEjICDj7pA/EYry8RWjfmRhOXK9T5++NXxR8SftCa0obRpDo9qzfZNPtrYsy9V3O4+9x1B4Feav8ACHxh5IlHhvUWTb5gc25UnHp9B26mv0x0PQ9IjthBY2NvaSIMeTGm1WHqP61o7Z4f3MkKlBw0UgG0/p/LpUwxc4/CjGFS3Q/M/wAG/DnVfEHiB9Ee3uNO1FELva6hEYnxtyCARnoM57is3xt4J1rwdqUltfWE4GSYpgh2yDgZU9/p1r9F/id8KdO+KF1aapYXjaF4nsANkhC79i85B/jXnO3+XIrxz4uaL460nRnh1jQ4fEdjBCwg1KygJ/enjzWHJVuemB711fX5c6vse3QpQr0XJbnjnwyg0rSdE0q8u5LW41G+1q3ZoJgPOs4onB3Z67GxnnA571+hPxE8Srqd9aaVZzBouJHcHILYG0Z+lfnt4S0G5khmDaLdT3XmLtYQHEQyNx6fyr6w1zxRp/gnT7nWtVuVsrKzVSzswyeBgL7npXHUXPO0Xe5yYmvZKCOB/bI8baLpul6J4ZNqZNfU+e0ynm2Qg8e+7p9K+PniaGFkR2yR8pJwTU3jPxxf+N/Hmq6/dM7G6lcWwk/ghz8i9cjjBI96zH1BzM4Zvmb5R619BQp8qsckJcsdCO+1pop45zHIGjITfGTkH1PtWzo/iBLpVCy7ty84rIk2tCJN28KNsiEdie9TWlxYR3EUohVNhLNs4Q46j+tdMthSmpLU6iZkkgaIxh9o+8AOe9fbX7Huj3Phb4c3WoT2+yLWLgSwBsk+WFC5B9OOK+N7LR7jxNJbw6VaNdXk7fubeH/lqRztz6kZr7d8G/tafCaPS4NG1I3PhW7sEFvLYXluUaBwASuPb9cgivJxCc5WXQpRcVc+gbLxlYedHaR262xHRpQSB3/zzVXxB4Pi8RzWmswR2lxrOls0lrMCVJJH3M+h449hXl837THwRjj3P4thYk8bQ24H06Vk337X3w10qQnw5capq9+y5SOCMiMtg43ZIHJAHoRj2zi7pfvbNG9OpKDTR3Hxw+E+m/tIfCP7Ljbq9qfOtpcYMc6cPGcdQSCCPfI5xjivBnwJ0/4H+BJdKidr3xBfqgublFJ25PKoPQe1dz8PbzWvBvjBm197dbPxR/psMcLHFtORloiD1J65HGQfbPRfETULXRIbyeO7WXVp02WsLN/q8jG73ArBuGJp8z3R3VedwcE9GfIvxq1JZ5LSBST/AKcqhs8bFjycfWvi34haomueJtQul3eXJK5AkXD7TwAffFfYPxc0mXTobS+muHnKwT3VyZBgHkDd045OMCvjXxpMt14w1ORLYWo3JmFW3Kh2jIz9Tn/Oa9PLafIjzqFFUlZHLX0Krdcc45BNJk/wjPpUjYa+Us3HIYelJD8rDuc4r6I6baktvH5ahmHBJyPSs25c3UX2eNWO8g7sZGKuyTNFCSBksearWq+UWYOdvCjH05NMLWC4jMcO1QPLjAOQPWswyF9zHhs9+easXsjBSiMSGwG/A1D/AMtAxH7sDH1atkZtisCiFxxt7euah3beSQxI546U28lKoDnhj0og2TnYZNp6+5q9xdSyrnG4j5GOFp82FHLd8fMO3qKQIGcBM4XgZNMuFVwBnp8ue9IehX3jaMH61f0u3MkisG2nIw2Kpxxq0m8LhTwBnNbGnjNxgJ935sDvUSdkXBXZ3Xhm0VWhnOSS+TjqcHv7Zr33wPCsjPLM2ZYvlQMcg55rxfwvavujWNdycNuxnmva/CIMcJjQ7Noxx3btXjV5H0+Dp2Vz03S5PkjBXnqefWt63mdl2v06VzemzFYwSv8AvVr2dxucFulcDR70e5o42gMDn0FSru4bgGo4ZNwYqOMip8FVx1Hdq57anatUO3DNJvTzPmPB4GKj6cjvSFe+CTmk+wWLsd0u3nk1YjmDKOKoQwtHgBSa044WbGVxQkNk8MRZsk8dqk8r0p8MbMDxgLViGAt97rnpTsNMhhhHGFq+luoYEVJDagkgjmrkdvk9OKOUTYlnhWwBzV3nkYpscewY4p+a3irI5pdxYz5fXmn+hHWotx7Dn3pykt14qjMtRsNvBye9SKu7OVxVa3ulG5W/hNTecnJzn2Bo2I8hwQKegqWLCZGOaz5LzbJh8gNwKm85QgYHBzjFJDcWaK3Hy4JoM25x83NUFmU/WoZJjuOOlVcnkNZpAOSefaoLibd0NZclyVX0P1qIXr7SGOPei5Xs+qNSG4DZyaJrlFUkHn0rBe+8sk5yvekXUFkyWIC9KqOu5LjY147mNm+b5c9PSoJZAuT0FY11f7cFHVgO1ZOoeIQqsBIMr1VuP1reMdDnk0bl9qES4Rm5P4VlXmsQWshR7gBfbmuO1LxQjKXLK7n7qq3OPXBrntV8WS2kKM5jlQnHlkd/Y1apqRzSqOJ6PdXaz25dSrKRnqMgisdr9Y3yXC5OPmOAfpmvNtR8bwXFrmDdGW6Fj8xP1rE1LXtVlmAhC3QwBsdScZ5zk0Soqw41We17BdK28fKw2sBnkY68V84ftOeAQujQapDzLbtgKOAVPUk+oHSvUPAviK+aTyr1RAsgAEJY8e/Wrnxk0Vde+Huqx8GRIGeNmGeRyBxXPG8GZ4hc9Nn5/ec0JM64LIdxQqMHHQGvuD9kWSbxL4Wisru6Z7aIsSy9UjB4TPv2+nFfDrK8NxJgBn3ZAYcrnqK99/ZZ+OUXwr8ZeVeJ5ug6yiWV5lcNDIT+6kU+gy2fYilmNJ1qNonzVOUU2pbH6MQ29r4SWObTmWzWYbUKDIx1xk9eeeaq+M/iFaeB/Dd7reu3UMcS/MWkwN3AAUDuTjAArz741fEjQvhZ4BtZr+8aa7u1MllbwtmWVu2Mfw56mvgzx/8AGjxJ8X9UhuNeutlpbDFvYwkqi8/ePXLEcbuvpjJz8bSy+dTRuyOes4qHunrnjj4iXPxL8TSeI9TRlh8vy9PiRsiFM55A4De1fb37MuvWni74GaMriJmjR7V44yNw2sQD7Ejn/Gvy68O61dQXEkDSrGs0WzYeFz649fevt79gvxNF/wAIH4o06PC3UF6sxfgoiMijnn1VuK66lF0NUY067WjMv9p/9j9fEV5qXibw1NCl+tu0s1vIgAuGRc44HBIH418AXURiUM6tEyEoyMMEMOox+Br9hvEHiZG09ykyyCLLyMhyxx/npX5h/HTwiPCvxG1aSOCaLStQla8tmk6Dd8zjPsxP5/jXRluId3Tk9CJVVKVkeS6xvjuVQxM+Yhyo6DNZWob124O09nBwQeB/IAV0V/qYjl8qVsZz8xHXt9QB9PaoHjs76PDOnXbuOV5Pbmvr4yVjph5H6KfsB/HyP4meBZPAev3Bk1jSF/0WSZtxlhyduCf4lx35x68187fGPTdW8H/tYbjbyWEv9qwzW6pkqV3jYyng4JBb2JI7V4X8OPF2r/Bfxzpni3SJXc2M3mSRRf8ALSMZ3Jjvnkdue47/AKafGLwHpvxo0n4c/EnRjHdJDc2skzR8FreR0J5/2Tn8zXzWNpKgpTirqzPbhVTg29L/AJnrOtTbfEG/zM/JtCd+Oa2k8a6PotzY29/cR2k17xEZMgORwRu9a4/Vm3eJRLkCFmKNjgBtv9a8W/bisRf/AAPtdQgkMc2n6jE0c0fHDAoeevftjoK/M8sqTWYaPc8GNV88kfZPmGSMOjBlI4YHP61iatrFxZ8xwbgertkAfnXxB+xF8VvHms6PrT614habwf4fty1zcXhRpIjsykanqSRzk57dyK77wP8AtweDvEmbLxFdPpEmSEuJMNE/oSRkg+tff4ytNrkgnf7z0qdK6u2fSUPiaO4BL2251HUDv/SnNqllcr5dxB+7cZPPHHrXG6L8V/BlzpcbWWvWN6Jn6QzozZPPzDORW3J4q0S9sUuIZreW25+ZXXC9j+Oa+W56qladn8jqjTV9mN1Tw74f1K3XmRYWYD93yMg559+agj8B2ttbH7NJatFKG8v7SpBBIxwf/wBVZjeJobID7NcW08X9wyDD+31qHVNUbVNJlFwFtiI2LOJB0x3/AM5rSioud3DU7FTqdJaH5nfEjwze+H/FOsW8iwNPDdyBzGwIPJ6eo9+1Uvh7cSWWuyQyQiS2njYyeYm7OP8AOMVR8dXE0PjXVopZZSVu5kYkkgEMeN3Tnk461J4ZvLey8RwSXmpCztVbdK+TzgZwfrX3dO/sND5yt7tRok+IHwmsblZr/Ro0sro8vbLxG/POP7v+eleZ+IPC+q+EbpbTVtMm06WaNZkV1BEkZJAZSCRxjn0/EZ+h7z4g+Dms5SbxZpwp2xoCAx/L0ryrxN4ik8YzWb3BZ7a1Vre0jB5SNiDtz35A7dh6VthsRUiuWZjzpGSnh63vrexijkkD+RuuJAOdxPQfSvs7/gnX4PsoZvFWoSWsLX8LLi4uEztj2lTjI9q+YvD+m7mhXaJRjD7jzivr39iGSSz8aa5pyRjyLu0MrIDkrg459uTWOLqPl0MqdSUpaHz1+1N4D/4Q/wCLWoeTblLLUCLhCFCrggBv15rx2SHy1DqMZb5vqDX6UftT/BMfErw+kli8banp7lom5wYgvKk1+d/iOxgsbwQtDJFIq5lWUFSjD09BXHgsTGzhPdFVE1uc3qukW+qWNzPKAk0cZKMo4k56V+k/7I+Lb9nzwXZRL800LyP0JA3t6fWvzp8QaZqc3hmW/sIXNkr+RLMCCYyRn8q+7v2E9fST4H2svmebcWbz2qj0IclQPwIruxkXOnvoYyvofRF4o3eUuVVT+8cdv/1Vm6pNBcX8TsEkS1IEchXr0zj61raXZrPFaiRiqy/M0jHr7flWb4uZ5lVLeHy7ZcgTDHzEevpXxOIptLmNUtDb0PVJ4oWmVLdpMc7+CMdPpXy/+0P+0Fd+JNYu/Dvh3V5LGGIFb6dGx5jYxsXHYYwSDXQfHj4hyeEfCS6XaSn+1NWGA8WQ0cIGHdTwQe31NfJWs2lpNZy3NpJHDIAoeP8AiJBxxz0r08JRlJLm2JniGlyo5nxbY3V1pQuG6xHClxxjk/z5NcBfQ/arcJg4ZM4r1G6VtQsJY2cyMiFjGepA6H615gHe3DowH3toLDPFfVYf3Ec0JO5x0cZjZg+Y5EOH3dvelYusYlIyUILH3GMD8s12M2gw+IrFHt9tvfx5DO33ZB7isjR/DN/rF81jBEBcCNpRGzBRheWOT14r03Ui43Z1Oaseh2ciXdsJ4duwqrrsA+YYHI70SRpNuc7jtGBjvz2+maoeHo5NP0mO3k+/CNuBzgE5A479BwDnNfYf7Jv7JcXjixm8V+NI2t9FYslpZkmNpzjBkbPQAnA9SK8ipFKXLFbnJTjzu5e8fL+0b8RNA823VdJ0uWISJa6TIIpGXHQsCfmx1wRmvJ/h5+zX8Q7rxdpOsS6YkUkdzHKbu8cSMNrclhzu79T+nFfob4Tums9JtbGVRFJDCokZh/qyBj/61Z2i6TczG6t0/eDzju+bGVPX6V4jqTnFO92zR/3Sj4bsND8B6C2nafpka25LNLHCn3i2SzevJJ69O1fMd5Yx/DP9o/TpnCx6X4uDbF3k7clVbcfUPjH1r7Mh0eVrNhGscEijCuFyG56H1r5g/ac8B6v4u0Gwl0GD+0dZ0Sc3iyxgZjVTll7dwCB7VdWDjFRkY1lKTTZ32pabc2rfutyPGdwZRyMGtvS7qLxJbysNsWoQ/wCsOfl9iB6evvWb4O8RR+PPAmm69bDMxiEd3H3WVeGBH1/TmoPscmhKt9DJ8ysCy44ZM8jiq5VB36MfLZ2J9a024mjaPzB5ynCNk4PfGR7dvzqHQdU0+4mmjvL+Sye9jVSy/LEj/dIdT0+o7e9dbfG31rSYL61haESDLNEN2CeSGHcfrXmmrWIvtUiUqqtNIEZhnlug+hOPyrGvTcWpw1NFVlR92+hu+JNPufDN4sM6xxAgGOaFMI65wdpx+lfIf7aFrq5/sK7FxJJ4ZLgS2pxsjuQTsJx1BGevAIr7F0nVIroSeGNckwXO/TbpgSY26bc+nt9Qe1fLX7ZUDWnw9u7GdfLurW+t/MhxwGzkD/vnn/Grw1P2daMo7M5KktVJHyLJD5e2Rc7iQeTzU8h2yDI54OW4NRI4ZiT1xxkjrUkV1HcXjW8mTcKuVH97t+ea+tjodm6H2/zSFcn5uD7ik2JCxiEZ8sknB69Og98Vqf2VtUDzULMQ2V6kCvQvg38J7z4oeOrSxCMmnq++9lVcbYv4gT2Pp+FZV6ipxbQqUeeSTPrH9iL9mttLtbHx7rG5klUy2drMobcCMb8djx+NeRft/fCy28M/Fi18T2MWLDxBGzTkfc+0IAPzKjn6Cv0f8H6LYeGfDmn6TpqhLO2hVIkDZIUDg9a+Z/24vhvqPxO8N6HF4e06a/1W3vdwtYwCwHIdsZAIxnoawlThDDqb3Z11I6WR+bFrpKRyBtw+U58w9/8AGug0a6n0yR5LZwhCkFu5B4IOOoP9B0xXqXwv/Z41v4jeOE8NXcLaTdjcJDcRHEQAySV75HT6ivcPF3/BPPWLPSi+k+ILW4kiG5YmtijE9sH/ABrxpSVSLai9OpmqLjqcRoP7Seo6n8HdT0rV9R8zxJo8lvLYz3CgPLbJIp2qcffXBHqQMnPWvo/wPrV1+0R4d0fxJZXFvam2i/eRgBsy4w4OOQeOK+Qrb9kf4l6jrUekR6VHDdfMUuJnxEijIyWGf0BPNe5fsX/2p8NdQ8VeE9TeMz2VyzSqrbg7KdjBO2MAH8ecVxe0hpJvc9fDS5YOm92Zv7TGna6tr/Z6aQ09tJBHaedGSxSQPuzt7k8cexzXwHrl9LdapfSTAi7MsgZTxjacc++Biv0b/aS8VPp+kDXbO4WCG41VmPUjbFEx2jHcsAfzr815mku43nlYtcXUr3DSHuWcsf519Ll2qaOadJ05akToUUsxGX7496Vid2W9RTJZGkGXHT+dJIS0JYfwjBr3XuZjfM2q/OSvUfXpUS5WHONygYbtz3NPtyBHcySA8qD+FV724/0YeWfvqVx3+taLUTKUkhmuD2FNlY/dLfKo4/3vWnqojjBIwe9VZrgsSq8LnliM1oiBmN33juqzaArGxA284qGGMy/cGfxq9HGy5BG0qMn3q+glqPkkSKMcdetZ8smZMrnAerF0w2rzwejetV3y2QBgDj9aSsgZJa/vJlA6k4rp9HhJmiOPl3An6A1gWduWl2oN0jAhcdj1rs9BsSZFRQQwXbK3ZVzkk1jUkdNCJ6Z4D0eZW+9+83cp2GRnNexeG7WLb5oX5NvHbivOfBsMl2ht4nXHV5DzhT90Z9+g969S0OHMKqFIjRdua8Ss7s+uwsfdR1FnuWRc9BzWjGSc7RxnmsyzjMmcPjmt+xXazBl6iuU9WPukke+JeRTrVXyzSEnd0q2uVUDHJ9aTyyG65FYz3OqMkKBuxinRqfMXIpoUnHarcceGU9T9M1iUWYbdmwa0obd+AeajtUduCP8ACr0MRjbOcnHSrMXJDobYbtrH/wCvVqG3AZT0wc1Cud2c09Jtp696tDL6ru5xU6+1UGuy4wrbT6YpVumjHLfnTFY0PemNISDtPFVP7QHTGT35qF7wdv0NWLluX1bcOetK0nX17VlnUAPlH/16fHe7UIz7/Meam6DlJJGeO4LcBTjHvU4vF24JwfaqElx5oXHHORSLNz0xRzFKNy/PKrJuJ+7ytOjuGeMuOVJqhPMGjKge+agjuCseEPsaV0HKabXTxnbndxSreHnd1rLW428setNa8DbwD3wKOYlpWL8t8rRnP3u1UZLzzPlI+bPDdKyrnWktc+YATz0Nc/q3jy10+EyFsfNtx1LHsAPWt4xcjmnNQR1dxd9VJwcZ61iXmsR6dGGZvvHhTz07/SvLvEXxogtYZQZElkTIYEcjFeY+IPi9e3rzwRMttvAIkjPTHYH0NdkKGup59TFJaHsnif4qWVu8e2R4AM7pGUqHOPuj/GuFk+JRibBvgTkDYvzjJ7V4tNqmra3cOqzTXXmHLrgtnnv2AxXpngHwx9kkSTVIUGY8KJMYzW0lGmc1Ocqj0N+PVbrWJWW3hyxBCnbwc9gatx+B/EPBWZFTGDG8jN/PvXYR6rZQRRRxwKqADIVOD6VebWPulmPPqDXFKq1selGjF7nLaX4AePaZixkzhlX7ors7PwbaQQgRkoT1BGc1VXWgWAVyOcYxx9a1odUPlqVXe/f5uBXM6kmbexitkR/8I/BHvQDBPBIArVmtBdaO9uqgBh5We4BBFV4ZjIC2cnPPNaFrH8o2nGTzVRl0OKpHl0Pzl8X6FP4d8Varps6rut7ho1lUggqDgcdiazo0ZtP8n7iAbkBAAHOe3PXrXsv7Ufh46X8RJL2NfLN1hzlRiT5QuV+mMH3ryHh7VtucgYBPQfSvVTUo2Z8jXjyzaOv8Ra5rPjGOx1bV7u41WWCJYUa4bcUQDgADjH0GfUk81iS2yKuFDKWOd3r+PrW94VV5NJgjBKIiZ5ySSe3v2/yKoSrL5jIy+WQxBVua8+UYweiPJqaOxXsb6KGQxXJ8lWxhu+ccV9MfsTa3NHrPivSo9zrc28MvlgZCkOwyfYDFfOcWiC6YIx+UHBfqR717R+y7cXGg/E97WFmdL+ymt2SLkysNrKBk9fvV5mLSlSaZnuj688TXrt4dlgtpIjcM+QfMwXPTbgf1rmvAfw5tfiboev8Ahfxhp6zvPcLc2Ukf34lAA3AjkMGBPvnnI4rQbSzp6zz3TCa47iPGIQex9T71q+CfEEvhfUhqkdq11sRyYVO0uuM4HfPHFeDQsqifQmGklc/Nb9oLwPb/AA1+L/iHwjBO13Fo9wttFdMoDSAwxyc47hpCv/AazPgrrGk+G/ipoN5r1nFqWiGZ7e8t5IxIGikjaMcEcne6H6KaT4wa/d/EH4geJvFU0UltcX97NO1vJ9+IFyFU+4XAPuK5HR9QuNE1DT9VtU/fWlxFdoSONySK46e69/WvvqdpUrRPVgfRPxz/AGaPEvw10/8A4Se3sFk8OXsxkEMJLS6esjEpG49FUqueRxzyc17j/wAE6/jzbwSXfwy16fbb3RM2lG45QtxvhGeAc8hfy6cTWP8AwUM+HHizwPGvjjQ7x9VWNln0e2tvMsy46KGbAYH/AGhjnpXw/r3jhZPFtzqXhqKXw9pKaib/AE+BGHmWnTABHHBBwOR9RXBKjKScZndKrHlP128S2hh8VlScRJLtKqSfl7H3OK83/bOuQn7OurBgIx9stUVfT94DU/wf+Kn/AAuz4c+HvFpbyNRQC21FVPHnxZDkfXGeeuRXHft0Xl3qHgDSNB0y2nuXab7ZO0MRcIijAzjocnP4V+U0MM6OaOL6M8iEb1XY8f8A2JZrXxfa/EL4e3EjINc0fzLeZWIMcqFgT/49GfXhu1eAXmnT6Lqd3ZX8Kpd2txLBIqMTtdWKHp2yp/DFet/sVK1l8etOeBiAbKclgeRgp9Oen/1ulfQPgX9l/RfFHxo8d+IfEcQuPB2nXjzKm4gXEsiiRlwOSqliD2PTmv0OpJQlornqOLlHV7HxFptm1xI7JK9q0Wf3ayFenUYz1/XpUlxrurW7AQajdRDHzItw4X09f0rpfjp4r0PxR8StXvfDWiW+gaDGVggtbZAihUG3cAvGWwOnBGK1/BPwOufFfwZ8VePLm9itm0/It4WDE4Xl2IHXIxjH69K1tTavJHP7Wa91SOCsr7V5I5pIdauI2QGT95MynaOMDB61Vm8aeIFQK2v6ptb5WT7ZIRj8/wD63tVAIzIjncAwyVzwccA1peFNCGu+NNC0wjct1eQxuo7guox9MGtXGnGDlYxeJqLS57r8UPhZa/D/APZJ8JaveqJNe1vWFnM6j7imJ32D/gCEE+vNfNG9rjJJJ3AnDdR6V9o/8FFvEA0fTfhz4Kstvl2UMmoSImAEbaIogR6MrTY/3TXx/oumeTEbiVt7k5/2VHpW1D3aaZDk7XY1YXjjVQw55OR1qxAwh2ELhUbJ9u3SmzTAFn6ZPC+lPsfLjxJKco5w23rSXvu5zanfaSg01IZHb7w8zDep6dOvFfXX7DPl3vj3XJVhZFSxRPvHGCxP9K+MdLkim1GJhM0qA5Ctzjjnj1r7l/YB00sfFGouNxYRwBs+meP1rGtuonRRVj6I8R32y+EBj8ghWUhRknIwPwr5/wD2ifh74IvPAWs61rFjBptxpkDTrJa4R5ZMcfN/Ec9vfpXv2rXT6hrzQLD5siS4T5fTjPH9a+Bv24vHmv3ni3/hEb61h03TbEiWGNMsbncRiVj6jGAB0yT34+VpU51MU2npc7XByT0Pm6fxhK3h2TSI12wSDDqeR/vcdT+Fe4/sRfEpPDfiDWfBd6R9lv8AF9ahmIO8ALIgGMc/KfUkmvmlMafdRSzp9oMcimWNW5kGcld3vW3feKrS38QWOseG9On8P3dniSNWnDEsDk855yMg+x/Gvt5UFKi4dznnFSjofsAt1baVbxLM7fvgsce3kYPJOfYdKs/2no+l6deXuq3C22kWqb3ZyR+GOvT0rwj4V/Ey1+IPg3w7q1vcrJHcqu/c3KOBtYe2Dmr37VPiKS1+HUel4+e/kRJWUkEKvzY/EgV8tKL5rSWxhCsktT5l+Ivi5PGnjrWtQtpneyEzfZkcn93COwB5Azzj1NcPNpYaR5kkGf7h6dOlWtHbydUnadBh05KjaCc+ldE3h3UNZmRtM02a8GwD9yNy46ZJHGfxr04uFKKscU7TfMULTwpHe+Hzf2dyEu4iWksWGSEUHLZB/SvAZGebMmR8xYquc55r6lm+HXi3wvoN34gFnHZRw2sjSCVlJKBTvGAe3ocV8vWlv5jRjG2JTuGOPwrqo1Y1HdGlPlsOXzLeESJkludvcdsV0/h/w3PawpqF0Cs7cqGP3YyPT1PpUnhPRkuLqS/uAot7c7Y0I+/J2P0Ax616j4H+GHi34rXl3FoGmbobbDyXNw4jjTrgE88n0/lWlSoqbvcTld2Mv9nnwDb+Ovj5ofhy9k8rT7+U3FzsIywjXcVwehbpnrjOCOK/VrVNPhsLGx02xt/I06GMKIbdMKEAwg47D0r40+GfwBPw0hGtzuuqeKYys0U0f3INpzsX1ycg+v5V9neEfFFp4r0WDULdsBlBPPQkdDmuKjioV4ypR37nTQ7M5fVNOn0u6maUq3mNvUK2SB6H15qHStSit5TLewlVYn95yAvFfPGj+NJ7P49eIzqnih9XsL+JXt2y235m+WMIfu7ADnHGCD1zXqeo67P4kMuk2BQ6dE4aW7U/eA5IXt3FeTOsoVXKPTYwqtQlobt14g1DxFcS2ekyMLQykvIF+6M9FPc966OPSU0+GFIMI4G2Rz1k+prG06ySyjhhsHa1KgYVRz05P1rYaYwMbq/uo4onAlKg84HHArqoJyfPN3Y4xlN2scxpHw40/wCGdvq+u6e8iWE6vdXdiw/d4GWLKPXB/SiBtP8AEOlwXuj3S3enXaEJIuCY8noR7ehrkfjL8eLmy8K6jp3huyF6zRmBpJjghG4JC9+CeteefBvTfEvg7XLSPSybnw9LCkl3DMdqEkdF/wBvI47YroqVqVP3I7Hd9XfLzS0PbPDd+3hvVXsZ5PLguG2t22sOhH1FYPxJ8PzI15Kj7mVDIGVdjHGSGPrjtXReMtKS40+K9Rik9uMorfeBPb8PWrV1qUPiD4fu1yil44WjmJGdrYODnr2ralBT91nn1I80Wj4J1b9s6f7X5Uvhc3Gp2LNC05n/AHIZW++oHJIIz2ryHx/498U/FTVzqXiPUjeyTkbY4RiNAM4G0e2Dkg4PoOKuXnw91TxN8TtZ0vQrCS/lkvpGjt7dCzD5VLYz05yTz3r6f/4YTkvPgDNrsBuYfG6K13HZSMQgiUcwMrZG7g/MMemTXXCMZStBEUaHNT5z4qhtZppCgXYQ2Nxx17dqxfEiXGm6lDKp23A2yrIpwyMOh/CvSLPSQ8Vx58TxOuUZD95Wz05xg5/lXnXjzK6pBHu8xlgDEg9csR/SvQoT5pWOuMUj1T4DaNN8cvGVtoSXVnpeslTM/wBqJCPGu0Oyg98MDt9+tffeieGdL+Ceq+EPBugwR3FrqsNx9u1BU3SSTIoKMWH3QOfboMHrX5IW801neQXltcSWl1C2+Oe3do5Eb1V1IZe/QjqfU5+rP2Tf2yh8NdTl0fx/dXN9oV0+6PUHBklt2J2k8ckHjOM45zSxWGvrE2VraH6feD9SaO3+wXcbC5jQNuC7iVPTI9uK88+N3xRi+GniTwvfSIHjmufJfbz5kZ4JA9QD+lbln8RPC/i6Oy8SeF9ds9QtY0VZfs8obMZ/2fYE5+lfC37Wn7RUHjT41LpGnzrd6BopEAntzuRpWALEHodvA475Fefief6u4R3X6E8yU1Fn6SadpenX2oQa9BAjXMluFWcDLMhwcZ71b1DUo4wYozumPAVQTk1w3wR8VJrXwn0HUSdym1UKV/ixwCMeuK6u6uktbOS9mwZGGFGcDnoornjjoLCcsWk3qzscXzDLhvsEUdxI3mScB2H9P8PbNfGfxa8J6n8E/iOPEmmP51tqc0t0v1JG6JsdQSc8+lfR3i/4qaDony6hdpHcqoBijO9ySf4FHOfw4r5u/aS8R+JvGjaPqyaFcad4ZxIYW35eQr1YqBwuOnrXy8ZwxFTljsafBJM4Xx34otfFfwy827VrddDiu7ye3kyyzlo3VR7/AHs+tfEkeRZ2nO4eUrEe/XrXu3irXLnStB1uJZH3TWrRtCG+Uq3Qdf1zx614k0KwlE3bkQKox6AYr77BRVOPKh1qntNShOrpKjHBjIyarSzB4QAD+8OKW8yG4JOBn61HlhlcKe2MV7DOXcuw/wDLGL5c/cbn8qybjcbgs5wVzwOlXI2+zSiQr8+fk59qzbj920ivkhW4z1A7VUdyJdiK4mbaducds96rbSehyTyaJJ2kIO7HYURK4mVQN+47R9a0RmW7NVOWAIxx9asyOqwldnPXcTTo7Vo4Ad3y5/I1SuGLK67uc/pTGiKSXzMEfUe1L95PU+vambVb7o4xiprZRtOeuOB+NHQZraeslvtZV3zYJUe54/lXeeDtN+2XiQsxkV1PnHpj5uhPauHs2Y3ERXJkJ529BxjNey/DTSzbXEbohkLIN3o/PWuKvLlTZ6mFp80keoeFNHEOmIEh8stuGV6sc8H6V6NouklY9pO9c5LHtWXoGnmEpu4C8s2OntXVWS7Vbb91ueteG3zO59jCHKkiWKFY8ALwO9XIZGZ0YnBHao1X+7xU8cR6AcGkdEY9Sz54bgjL9ee1Xba0ZvmbvUVtD+7+Zck4rWhQtjA461i9zS6S0Il09chxyOmMVo29kFHQcU5dqYj7MevSrLSxW2QXG7HatI0znnUYmDG3XGKa7Hg5xxzVb+1EZvmOOOeOlVLjUkkDqrcAZxVezTehlzGotwASQcduTVaa67jcfdelZDaqhDKWTaOrVU/tiDZndjjIGf6VXKbxqLqdDHfbRndz6mke+345JrnheJIQd/8A9ala/ReBKGYfwg1PKaKojfa+TactjjrVb7duXPI9MVkreRyNhTg56HH50l1egKAH79qnlNlNPc1V1L5iB1Hc1ZiuiTknOa5uO83MQeCRxk1YhvJIed27P6Vm4l7nS+YoXg896cLwH+LnrWV/aGY+nzGpkctFnGccAioC1jS+0qy4U596ozXnlMyDOfWmuxVSRxz2qo5LSHc2fQVVhPYvmYGMtmqU14V5QjGehqvcXQj4JOKw9Q1Dbu2PtOegNPlMHoUvFPiGLS45pZnVCq5VT3PpXzj4r8V3lxdXLC7dZWcFivVRjjB9q9A+I825FdWy5/d7c5AJGc15RcaZJeW8m/ckK/6yVjwo9SfSvVo2SPExTkzjrrUpbi4CqXlB+QDByQf5/nW7p/h02tml5q08VvaspZYS4y/P3segrJuNUtrCYLZJl1XaZ35xz2qGzsbvxLfbcefKRjc33VHp7CuxyfQ8mEFuzvrX4q6TplmYrRHZ1TG2KA4bHGOlSw/GBrj92LGbJIzsBJUY/SsfT9E0TR42g1O8jWdcFkjG5cH3q9F4q8G6HIiW+mvdttw8qgkbvasfZ8+p3xqRp6GpD8TroKu2ymDDpvySfwxVqz+KUsckn2yyu7di25GGWGMelY0fjjTbudPL02RIN2AS21iep/CtX/hJPC95Hn+0oY7hxjYy/d+prKVJdjphiX1Ok0j4gR6hu2XAHGAHGCfUgV1tnr7yOFEhGB2FeMXmn2E6/aNPuTK8YOSn3Dz0zXT+D9S+2L5e5lkTH3uPwriqQUTvpVlNHufh3UPMVstn2rrLN9ynHTGa8/8AC7Nu+Vc7hjOK7qxmWGAg8k8Vzc1mZVTxT9rDw2b7R9O1SMsHtt0ZVUyGzzk+w/wr5qs9Pe5gaONN0rHG3Gfw9jX3Z8QvD6+KfB97CUZsxMNy/wAKkYY/hXyp8L/h9f8AjTxVPoWnbluYUdppieFVM5J926D1rrjV5UfNYylyvnPW/g7+zoni74P37RwLH4paVrnTLhzt3IoGYh22tgnJyCTnPp4P4kt5LXVGknhFuCwDxkbWQj5SCPY8fWv0g8Cx3UOn+HrK8t47WC3gVLW9tyMH5fpgDAxyO9fIn7YHghfCfxME1vbiO31VHvo/dj8snX3IOPWsVO7uz5mt3PFVWKPIRy6kZEmeo9K91/ZBs5tS+KkjRqzi30+Y7x/CGKZP17fQ14N4flWPUUtGTdHLIAN3IVsV9HfsjLB4Z+L01rLJLGL6zeIOh6MNhH4YWuTHK1PQyiz6cuoINJlnm1UobOFdxVvmMzdQADXHeFb4XmtAThlsyrMsceTsJPynjsK9L8RabBqEMiXH721lyPMUdvU+hzivD/iN4gX4NWD3IR76a5fzIJ3QCPOTlD6ECvl6NRuootBJ6nxH8YNBi8O/F7xppXmLKIdSlYiNSB+9xMSP+/gx9K85XRpbdSpmZ1BLZ6Z445r07VtG8UfF/wAca9rmlaBdX82ozBmlQERxsFCglzgcBQeP0ro9F/Zl1e/jiGv+JNN0XcGY2VpH9okGOxbIA45zzX31KtGEVdnUqsYrU8I/sWN5vMO5tuGJK8Y//XU3kxRx8KMf19/brXv+ofAHwjYxJnXdWuHb5nJ8skjGDwF7/jXNax+zbfzKZ9G16CYMPkivlMb49GYcfpS+uU72uT9Zg3ueqf8ABOnVNU1D4q3fhOFvP0W8tHvbuFnx5XlMgEqj+9lwpHUhh/dNfoJ8XPiJpfwr8Ga1qlvplvq0mlWwmubbeoKx9BnOSTnsMnjpX5JfD/xt42/Zn8bPrtnatZakscli8U6ny7iMkEjd35UEFTnjmvo39nr43af8aLfXvB/jhdutaiZLiG6dzi6jbH7onsykjaBxx65rgrQhFyrU4Jt9T28FRhiJqNyL9kO0/wCE2+Pmu601rFbPNY3tytvBgpE0kqMFGOgAP44r7U+JuoWnwW+BPiC/SFWaK0kkaNxgzXEnr7knrnqO1cn+zGL7QbpvCk/hy3htdJgZIdaRNrXCbuMnHJPfvXn3/BRz4iPpPhPRvC9vJ5pvpjc3UK8jZGPlJ/4EQfSuTD8k6bq212NMZD2NT2fY+BNL0SbxX4ms9P8AN8kXUgMsrnITk5P6fka+r/iBY2vhH4B6xpNnb+TD5CqqrldrE9T/AD57mvnv4HfETRfAfioXHiCJlgZcwzCLzArjIbfgE7cEEYzz1xX0r448S6X4s+EPiPVLK7tb21ktGEfkHcBg9G5yCPfmuPEKqpw7I+XrTk6iaPi+402W30q2uZcxQ3BZI29SvXivX/2QPA7+MPjho8rhTZ6WDf3EhzhQn3ST6bv/AEE1yvxb0eXw58Mfh6s4Cyyma4dunLKxX6jaV6etfZH7PHwL0+3/AGTb7Vorx9J1TxLp8r3eoKDvEWGwikHK+nUck16k/wCGvM7qVPmjc+Wvjh4s/wCGhPjl4s1e03T6PocDIjryotoCQpGM53yF2XHXJx0ryR75pOEU+WR35H0z6CvaPCvw6h8H/sw+LPERRl1XW5Fsl6DbaowUBQOgLbznB64zivE0V2mby9wbp6DBranKEnaOqJkmnZkOMYBO4Mcip0j2kDkt6Cr09mPsCFRHiM4Ixg9KpW1wI3JPDjhT1+vH4iuhRUYtoXK3sT2Bkhv4plXDxvlCTz09K+7/ANjH4paJ4H+GE95rF5FY3OqautpD9oYAyOSqgKO+O/pg18Q+NvDOvfD9tNg1rT3sJNRs1vbffyHiJxx6leNwHTcPWuftr69uWiRriQC3BaP94wSLLKTgZwuSBn1wDzXNUp80FNM6KdOUZJSP3RtNPjhkN0EVpXyTNx8wOeQc8D6V+fX7d3h+O+mi1eSL/ia207LM6k8qw+UZ9vQV9Tfsl/FQ/Fr4Paf/AGlJjW9NH2O7j3nedgG1z65XH6/WvB/26po7bwhIjSJLeG5V22jO7dkAA9+K5qkFBQcO56+H+0mfn7PGYZCMH5stnGRnPTFVpEVt525UgAbTjvVyTfcRI7HBByV9OOagWL7pUgHHSvoE3yqx5crJs9l/ZL+KC+DvGC+FdRn8vSdRlNxAzLkLMBlkyegZQevAKn1r771jwPB8T/Bk0urlmtbhxNE8Z/eqU7A471+SM/n28rXUMhhuof3kLY+YOOhH44OOnrX6mfsk/FYfGD4S2V35sa3Vrm3uLVD/AKlkGDke/X6Yrx8dhlJqojlVNc9n1ON0f4C+FbHxZpUN1b3U0L3CgxSzttdTnG78SK9/u/C9p4d06+s7CG2tbHBJWBQuwlep4rjfHkn/ABNLXUbeINHa3SlyowXYEDcT/d4/Oup8XXBaSSVpSiNAT8ucNx0YevpXzkZXhK/QqUYxTSR84ftDeJv+Ef8AhXr6SSSLPdBbKPAGNznGD6j146V8UWdvNNJDaWsD3F3cOEijUZZ2J+VQMdTxX1H+1XeCXwdoMTs3mXWpENGSCMLFIxOO5yBXU/sJfBeOea58c6jp6zSDMem/aF3LGoJ3S98s2Bg+mOlenhH7OjddTnhHUj+E/wCyDq0mn2Vz4ulOmQNCJF0+3H75+eS393PPSvpiz0kaLCunaTZx2Fo8YRAgKD5RgBj/AFNelyzQW8l2jzIszWwxJnOT3IPbr09q47WdU0WGHa945ud3zYPC4HX6VzYuMusjodKMVc5aez1LTil1ceW8KybiqkcHuP51S+FvjCfQPE3iDQimbWci+skADKI2PzA/RiatxyX+tTTadbR+ck24+ew4ReNzE+tYfjvwnLoul2t7payS6vayFJMHLyowwQvsDg4rxo80Hzx6GCutTwT4PSzf8VD4112W10zQnl+y/aLpwr7VfB2njA+bHUbj7V6ZL+058L/BlrKn/CSQXgjORDaDzXkA67dv3vTjPp1FeDXX7PPjD43eA7KTQdc09NNsrueUaNch1Eczc79wGMkN3HGa8K8efAfx58OWkfV/DN0IFHy3NvH50WO5DLn9fwr36GFoVGpX1ZvWjTlI/Qvw3+1d4B13Vlis9XiithafaTcTER+uY8tgbvYV6B8PvjN4P+Mmk6rbaHLma1GyWMqd6Kf4tpGa/HCO6Nw3yTbSOcFehA64P1+lepfCH4ta/wCG/F2j2+nvs1kSpaWd1F8vnKzDEM4GN6k/07gGvRqYWVKLlF3R30J0oxs0feOkafpPiTV76ztnMvlyMr+ZhZVGcEY64J6exzmvXfCeg2uiwqPJ2wQqIoFY5yR0OO+K8R+LHhbUtBk0/wAaaZm21COJHvVg/wCWZ7uB7nhvYV6B8I/i1F8ToPs00aW+rWsYMsCuCJcnBkUemeCOufavBSUp6nLicQ8RK6eiNv49eIZvhn8P4fERgW9jjvI4ry1P3pUkbaAnbIJB9K4zw78cPCWs+GdcksdUjh3W8gms7ohJYnC8ZXt6Z9TWV+0x44GofE34b+BUjW8invY76+t2PHloQQWz6YZsYP3DXxD4uura2+K3i+OCRVt/7VvI4mh5Qr5hG38x2717NGT9orHnOfNeCPXP2U/iH/wjPxwtryVCkOryPE4fGQW5XrnB6/ia/T9ZIrqMrwyuBwQOVI54PbFfjtpNrdaTrWm3Me1WjmSRW6YwwIr9WPhP4og8V+EdLunbNz5O0luCcHrnp+HWvXw96FZ0+500ZqdNR7H5z/tFeCI/AHxg13SbeHbZ3Uv2qNAvHzkk/hkE/jXyV45uzqHiq/lR3MVu5gXcBngnP/jxNfoz/wAFBILPS/FGiay6mGZrd4ZZgMFgFJUH8a/NG+aQ3EzzkqXYuxbuScmumhTUKshxtYg569D700zkyHcAMd2HBqKORmyBz2OaYp3MTtO7HJr0NOpVzY0LWdU8P3cM+k6lc2E7H5JbSQox7HcR149c10gTyNpRzLIpLSM3JYk8n8cn+ua5LS1aXUrZR/f5x6AV1E92FXYCCc9O4rhrQRnUeqaPrv4Bfts6f8JvhZbeHtWsb2+1S1mkECRqPKWMsSrEk8nnkDnivrbwFrmm/HzwxDrOl+LHuImXc9pbqEkifGdrqeR+VfkaJEhiYM4YsMBlwCDWh4J+IHib4c65HqXhvVptKugNpNucCReCVYdCOPT6Yr5vEZPCt70fuOynVfU/ZbRPhVoWjaWAtgs945y81x8zE9Op6dqTxYpbUILfYjiO3EbK4ypznP8AKvjL4I/8FK5pGttL+IumhgMf8TixUknB53Jjr9M9O1fUtt8SvDHxCs31TR9Vtr+1uoWmt5YZBlgq/UHqcV41TCywfuqNi53krnwJ+0B4Ph8NprzxTjaLhSiKmFRWk5Uj15+nFfONzl7ljIduG529K+uf2nLVLf4Y6tqk8ge5uJrIKQ2S4eUAqPUgcZ9q+Qb9iLhuQFZ8YHf2r7DLXJ0k3sZx92NjMulL3h55B6Z4Ap6ljIAvBxg57+tJLIrn5eQeuBzSLcLHGwJDHGR7V7W7Iemoy6dWby0wW3DPNUdSkaZw7EfMfzA71Y2gZbAVi3BrOuo/ObIcYUFBzWiER7RkdM1c0+JGdnJ+ZOV+tUUUhSd2OeRWnaxGOEY25IzWiJJLrLKpDYBOMDoKzmb5VA7d89aluJmmYnoM9B0quGXbgjFJCFVj2456VahVmlHrjAFVo1G4HHStbTbeSS5j6Y65NKWiuXGLk7HSeEdBkvr6MMCgznoce+TX0Z4H0AWpi2fIAwaQ9enQD2rzr4c6LHfM0pibzFA2kkhT6/WvcfDdnGsaRrw/WTNeFiJ8zsfXYKh7qbOwsYd0YVvrWtbxIsYVeOODWXafKoweQefpWhGcKCOvpXDse+lYuFiwCjgdDWha26ou7dwP51lBtq5I+vNWo7qOO3Xedz5+4D+v+faqtzLQ0eiN21XDKSfl/nWrbmBI9zuqKTnLfSuKTxNAGeJpVGwcRqfT1NZV741luJ/sqOtrbNwqqMu/qT6CrhT11OCpU7HbT3wkl3oVKA43Z4x6/wCePeqVzqSeZtA+fPvgd+TXnOoa5Pdb7SG4W3tydrbe/wDn8qwtZ8Z2gt/sNndyfugVZQx8yb2PtmuzkRxubZ32reN4YoH8mZXBbaJE7n0rmNV8cYnjtreRZpCQ8sh6IBya8+vPEszJNGsXmz8BQi/JEPQVzV/ds0oUzNg43qnG72q4xizKVR20PRtQ+LVhZt5DXDXLA5bZxj0JrPs/ipbzXDtcXY06Etj7RKBwuM8+gzXlEljO3m+VAyAtuO8cD6VgXkE9wzo8TEqMKSvA9TXSqdM5HWqRPZJPjZbxIyRXzyv0BWMlWHqDUEnxou5Fi+ySKV2kt53DZB7AivBZvtFqqlIJCCcBo16Ufvo5AzsxZucjgj1GRVezgY/WqttD3hfjTeMhVtgABzgcZ9etaOifF6+1CJJSkLrg/I7EN17jsK8G0uSVpG3sWXpyDiul0+1WOZWB2MxzvX+76E96wqQjFHRSr1Zbs+nvD+vf2pGrybYMnJSNsgV1lndbYyG+vFeA+FdcezlRX+Z8blkPf2xXp2ma0ztw7Fccg15VSNmfQUarktTvob6JMguMEU+O+UdHJC+lclHe+ZtVFJ3Hls5rb02cKnzKvzdDWDO+5ux3j92yPpUc7FsnO0j+KmR/Pu4wKivt+3A5qrmcpGdfXzKoz06E1zWqXqiIhDywIBrY1BtrFWGB06dK5q+jZoSoAAHO7HT1q42ZizmNYW3umP2j5o1HJbgep5rxDx54qfXbyey0+QJpUTFV2/L52OpOOq5/OvTPiNrTpYSWtm5jDD95InLc8bRn9a8osfDm6UKAEjU8J3r0qcVFXPMrLmdkZ+n6apmR7pc2/UqpALVf1HxItvEiacjQz53FR0wOOfem6/Hd29uwgiAiSP8A1ka5xWha+D0uPDj3sUrS3Uq7wwGCG6bT7V081zxa1RQfIkW/Afw6v/iRZ6rc297nULN086HOFCMDgn8QR+BrZPgH/hD5o31a2URMxjkMbbmCjr7CuA+G2k+MPD/iCeay1K4020uNgujCFbzo1ZtuQQThSxIwR1Ne2X1nqN1p1yt7r0d3bxxFypQEMwGRn+X4V0xcFF3PKlUqe0Wpsah8D9H1u3tpLSSSGGUcFTnGRnANedeJPghe6WrNaMkxBwYQSGUdj719N/DnQ5Lf4f6OlwrpJ9nDbT6E55z1JHSsLxgyWshdAM5wAx9ua8mrUnGWh9dhYKsrSR8z6Cuq6KvlbN0SuAV27hnuD9Otej+E5LLWWWRz9lvmG3zgMDb6H0Oa0JLXbN5cW0PLJnCp8xJOK7Oz+E8aTNIkbQS/KxmHOfSsqlTmR0QoxpTsjd8P2MtqqFZI5RwCVOcfWuwt1i3MucnGAK5nSvCc9nIB552Z6dx7iuz07RYrZmfLHIwM9q8qe5vNIkhjV7WWE8o4K+3I614j8IbtfDv7REtsz+S2oWtxbDCgbpMqy/iVDc+9e8eSI5kUcI1fNnxgurjwP8atA1uykjhAmhk4GcfOEfIPGSr5H/1q1g7qzPEx8bwdj6q8E+KIbWT+xrt1nVJJIZLRiNygNgOpJ/HFeL/trWNtPpehaotw9xdWtwbdmKkgQv0Pp1AruL7ULD+3L+yuraNJmKzW93xuYtjjPf1z715x8fpDqXwt162d2Mtj5dyeTtXa2Tye5qY1Le6fC1D5WjxFeJNC+HDAqw5IOSQa92/ZEuLjXPjVosSOY7lTK7s3zbl8tsj68/qa8Gs7rzrqGQrsJwfLUYHTIyK9g/ZqutQ8J+ONT8V2PlqNNt2jIZS253AHCjrtUHP+8OvNdFZ3irmEZW1Purx94x0bwlb3YvkP2mBNws05Lt2HHavEda+KMusaTJDFplncW4YSbbgE9Dnpj8K4TxF4217xdeXErwSXMl18gFxhd3fJIPX09KoaY2prBcxLbLnbvKM/8Q4AFeX7GlzuVjGcpGje/Eq61S8+zXEQ06JBhYbf5I8d8Y9ayrrUIW3O2Wud6+U0f3SD179xUUfhfUbu3864u7NHZTwiklCR0IqzZ+AYltUW41WWZtmGWGMLg+2a0k/Iwd97mbFo9vZzpdGZZYpHyI+gXjNakmoaRcWdu+nzMl1u2TQu3LN/CQD0GK2rHwT4fEgE8c2o7V2/6VMcMe52jAzXR6fouj6fIJLPTrW3nzgSJGARXm1ZsS958pif8IVp3iTTfsV/aG/tGj3GF1DKB3wecc966r4OfBr4UfCfRZ/E+oac83iLSxNcJ9oLSd/kMSnIDAccfz5qRtfTR7S4lu7iFFA3F2+VFx3PT6n86+fvHH7VlpoOoFvD0X9r3EVyoMl0QsLx7fmOBz7A4x3Oaxw7r1pONK9j3MFOdGSjY+2P2XfG9x48trrUZWOBud024CSE4Iz9B+WK+G/2xPiRN8QPjtrK5EVnpZ/s+FcgE7eW/Un8q+rf2X/2gvC+sfD3UptPsv7OuB5t3cxAfLHKR8yDHXJ6e1fBHxYtb6y+IGuf2rGLbUprp7l4uBkSHcpB7jaw/KvXwqcVGlLfqe5j5+0lKaRwsipIzqqERqeN3TH0Of50ttf32nw3MNpd3Fqlwu2QRyELIOgDAHB4xwamvIyi4AI3DIz/ACqq0QHJYnnmvacW9GeByo6T4kfEfV/iVoHh2wv44Yf7EjZYvL/5bEgKGbPQgAjg9zX6RfBLxBonjb9kCx0nSdSnsYrXTfsNxe3UJQCQA+ZtzjIBJ5HH1r8vdL0LVPGfinS/DmgWj6hql64git0IDSNguMZIxhVPJ9K+99e8S237Iv7LWj+EL2GCfxjqkUzGzVw/kySEs7k9wuQPeuXFRaioI9nC0lypyOE+LnjLw3P8DdPl8N3aX+g6ZqVvpd3YyLslzkfOTjJ3NyT0OSR6V8heKtWlutau5bCy/s2zkbdFBu3lFx0J/WmaVq6aTBqcd1C1zcXlobdJYjjad+7J/wBkfpzQ2txuwSbG5TtDAdfrXRhcLGgtCcRKEpNxRkf2pdzRmMXBfaDjPGM96PDr3K65ZKW3h5l+XOctvAA+nStv7LZsTIu1PMU7vfmp9Hs4tB1qwvVK332WVJGt95jMqg/cBHt37Hmu+fwNJGFNLmVz9DvjF+z7efF74D2UKyfavEGiwi9tS4+ZgEw0DEdSVJAPcgeleF/8E/8A4f6L4l+OF3b67pdtqAsdOmliguo1dY5sqm7aehClh7bjXt/wj/b28DyW7Wmt6TqOgSSFSZGTzYwoUDJKknA+nfvWN+yzosV5+094h8V+GLOceDpGuUiuzGVT94wYgZGfvA/SvBU1TlFTenU9eUHKEnax9B654d8Jfs56/pXiHTLMaNpmozmy1FYy5jVSCyybRnGCMk4/irxf9uqxsW8FteCUn9/Gyf3SrHOc/wBc17R+1n4T1Xx14BtdN0aET3Md19odF6hQrDPPTlhx3r5cv/h38Ttc+GLeD9e8OTajslC2F/8AaV3RR5BMbAnGOwPbpWGMxVGlVdOPwovC03Knz312PjS6WPa3l4AKnO3oM81n/MjBNwJxkHNfQ+ofsRfEaGRPs1jDOjjJ2TqAD6HJqxpf7FPjNhc/2npjedJEVtGtrlFEc2flLgnleucc12RzSgorU5/qFSR82NbiRmIY7Rycjr616j+xv8am+D/xYTT7x2Hh7xFIllPuJAglZsRygn3IU+uR6V0njb9jn4jfDzTxdXFjDqNnnYWspPNKkjjIODjOB3615N8RfgH43+G97Hb+IdBeze6BeErtdHU9Vyp568r1/Mg9lPE0qycWzhqYWcVqfqd4xhgGh3VtbOVkZD5qsQF249T+H1qXxMJLrR7SUKctBGzLyCScY2+prwL4P/FTU/Hvwft49YhuIfEGmxrp1486uPtOxRsmPAyWUcjHXOOMGvc5JBqHg/Rbue7/AOJctsmFhOX87bwMj16fWvlqsFRc4vVAoqvaPU+I/wBoCS68dfG3SvCGmsWitpUsolU4/eSEPIfwAHP+yPbH6L/CbSbbwN4H0Tw9plmyyW0AWSLB+TAwMn1r4m+CvwL8Q+IP2kLi88Q2kumTQLJrCeY6s2GfahBUn3H4HOK++rFJPDOkpDJdwb5XaTz5Cdx7nt1rsoyT5VHZIU8NKl8TIPEEdjp9rcXN7HLcS7fv+WQqn0HTFecXV6mp6hHaadZq0vRi68Ip4Gfxqx4s8Zah4k1L7BYX0E6GTbIIVJWI9ASTweegzXc+EfA40M2yzszzTIzFiPmDD+L2IrCVP61NqC0Odxb3MbUbFtL0cW9ohtxGSkozglsdTU/iaxS40ewvFOJ1RVnC/L249Kd40kubrARgJMiKX3wan8UMbWzt7KbAuY41Cy44K9wQfcfrU1YRSnoS9FY8Ws7WL4R/E6W0khaz8KeJiADIcLbXW0nAPoen4ivVrfTRLby2dx5d1ZyP5Z3DcyD/AA+lch8WLSLXvC+rwX0FxeaeYN6yW0e+SBhyrp2BB6GuK+BfxFm8VaCul3bTWnijSxslikDRmZP4JcPz0wDx1H41yRvSk1ujj1kr2MX44fskeB/iBd3O2w/4R/Vwv7vULEKvz9RvTG1gT6jIzkYPNfIHhf4L+JPhj8cfC2neIrE7Y9RiaG8iTME6hshkP1xgEj0r9HtQt7/UDHLIoW4yFkfgHAPp9PxrnvFGhjUrSEXMKvcac32q0uHjBw6cj+Xeuj69VhFw+ycanKN2jutUhgWxeaWKO4gaA2/ltyHLcHI7+9fI9zqEvwi+J0kuml3TTZ1IgzjzUYZZDn2OPbAr6is9WfxFp+nny/IRR83pvPDEe1ed/Fj4Cx614f1/xnY6vGs1vFLK0bLlcouCoPrkYrOjU9rNJanTQi5Ny6HxV8RfiBqfxI+JGreKruWazmu5v3KwyFHghTIjUOuCGHcg9Se3Fcd5Jt7kTRIoVeSBj5eeR9O/1rqPH/g+88FaXo0zXtreR6tD9oja3blOjMrD2B6jgnjisB7VofszSTI3nLuaNCcj0B+vpX0tOKteJL0kztPDeoNrt9Y2wXfcOyouz+Ln/wCsea/Qf9m/WvsFrd6HdSoBIfOj3cdRjj618Efs26tpdn8UtPtdSjZxPHIlnJwUSYpwG68EbgPevtbwjJ/Y/jqwLqu2eMwGJRwM8rkY9aU5ylVjN9DWj7jOR/b+8M6r4v8AB/kaVYTahfadIly8MCgyNCvUgHqcZ4r819Qs7a8kDNGsi/xbWyM+xr9Rvjx8UNe0mO7svDmljV/FF5bPY2sAdQCwBYNz3Azxx0r8u1SRVMM0ctvNHIyyxzxGN1lH3gykAjr0wK9OM3KfMiG5XZhX2h7N80Lhoxz5bcEVlRzfdCja2OjDGa7CRApwWDHr1rN1i3+2QhQRuC7l47jqK7lIunNvczdDy1+h/wBlu/fGa1dS1iGyYlh5kmB+7zVDSbS4hvYZym6KNwsgHG1WIGfyNReKLeK18RX0USsIllAXccnGMihpSZ0cutyaTVra4uYZI9zlht2MPu8dantb/lhwxXpj9a59AF27eARyRV22jmaZriMYBVjt/nVPayLRZiz5Ug6Z+6e/4e1ej6TdTWXh/TY7O5uLWRlDM0M7J5mDk7sEEkjHGe1eawp5mwDKjIUccnJrvfMe1tGMXCi48uMdl+UZrnnTjL4kbRky34s1y/1qORbi/up4EkVkjuJ3kCkcDIYntiuJ1Bo1kGOCMsF9D0ro9ZkZpATyxOCOxHqa5K8LNM/Ksc5GfaqpwUVZCktblcSCLP8AdBqNkDbsnOemRTAx3McZapoGXzGaQ7ECk7m6HHYV1WM3uV7uYJHheOPp7YFZkMQjJUglc/eJ56VZnuPNlJ2/K3QHqKr26mONQx3nacn1rS3cQ6GETzKjZG1Tn354NXpZl+4nAbAJ/DrUNuRHHID99u+OlJMdxwnHy7f/AK9UBHIx3Fe3rUXypkE5yM0p+9yajIVmHftR1IZOpO0YIAzxmuo8O25a6hLnEQYDaec1zUa+Y2FXIHY11vhnet5HlQSoDeWeoOayq6Kx00FeSPoLwfbqsEaxDZAW447+1esabbxxqCi4Yj5ia8/8EWe6ARsuTgKoPTJ5zXodnG8SgAg44H0r56puff4VWprQ2reNQfl59anjfY7bwdu3jFVIdzMh6MOtWmBaUsoB5rO3c6rakcl8Vk2xqSzHChevTJzXGa14gn1C7uLGC68mAja0kJy8nGevbHT3wOldBdabPqEckIlaDzThpI+CBnoD2NXLHw5aWsW2OJIuCpkUfM31NaxkomUouWjOJ07TdRnjxFGbOM8NK/zMR+fFLqd5/ZbfZ4omnuNv+sbqxPpXcXFkywlOCD2XtWbJapbqpABZjyCBkfjTdTUx9iuhyS+G7/WLRfPuP7OXqfL/ANY/19BVv/hGdLs4VitoQFOMsx3FvxrcuLhclN2COCay7zVIbOR1G0Lt46Yo5pN2QezjFalG406CNliVflzzx8xPqfWqMjWtrLsSCMBeo2A4/GsjXfH2n6aFc3Mb7m6r94fh6V5lrHxWvL55o7GBVBBXzm69eCPaumNORxVKkKZ6fqN5DHauiBYA+Scrx9Se1cRqmuaOiyK9ygZFwrYyM+x9K437TrGuMZZ2vZiOHQcLj3ArTg0KBcrcW0ka7cZZeOtbqm0cjqKWw7/hJtE2tEs3L9dqE0tpHo90wCSKzHgKxwanbw1Z3CthUOR1Cgc1Qu/h/GFDxM+GBywPIP4dqHHXclq50Wk6JYruZlyf7v8AX3q0+mwqwA429AK4u11S/wDD7iK7Rp7dWKpIoxken19q6rT9YW4iYh8pjAA/rWEoyOqm422NuynMUit6H5B6Y7V12k6u1x86sVbHbpXnQveiJtO7oa3tMvCuD90fd68GuacOp3U5WPU9I1RlXbnHHHGea7rRXW5RARgkZK56V5Jo8z+YrdOfuivVPCduzKHx6ZH15rhqLlZ320udbawxsoGec+lTTWaBQQh6Vo2NmXcBVBYH8Ku3WnyeSSw6dMVJi3qee6pGvJZfauL8STvbxsYkwWfcnsehr0fxFCkJUd2auF1WD7RqEcP8Ktmumnuaprc8t8ReH3uFCkFxt3hSRkkHJri72TZqAtbRcykDccfc/H0r3XVfDrfaTDFCzzlfMD9RkDGPavMNS8K391fSG00mZQThWlJUe/Su7n01MvZ82xu6NoNhqWlyWskKET/u2bI3cdSDXHTaPe+Bbv7JIkt1ppLPFcKM8A9CM8EdPSu30HwzfWluoublS+PugdPpXX2Xh+3uYybvU1t1K4ZZF3Dk4xj9acKljgr5f7TXqeJ/21HDIXSU7O4XBx7HFdf4B8FyeLr5buYtZaVBIGO5ctMR/CAR09fr3r0SHwT4NsrqCVGi1Hdnf5cCgJ6ccZ/WuhbVdOjXy4oyVGB8q7cY6fhWkqulkcdLKeWV5M2tS8ULHBsjUo2zYD/9b/OK891hZbiRmuN8rMxKhh3rpVvJLif91BHHnhec/jU0Nn+8yU82Q9zz+Vck5c27Pdp0/ZxsjB8P+G4vNWWa32zFlO4k/KPavVLSNYLdVY/dPH0rL03T8fPKmB1CtwavSXEXmbZJQMYBFckpaEyi3ojStY4JkJLLmn3EP2dQ0fzj071UtrW3mbzI5dh7bTWj5LHo244xXDK7YcttyCRsIOPfntXgH7XGlr/wi+m6tHxcRSmLPc55X8Mgfyr6CkiMfLjg15P+0tZRXHwn1Cdl3G0mimHHbdyK1pX5jzMXG8WUbbxNL4l8O6Bq0VyvnXVpGpmuo9nmvjnHGAcg/WsTxJ4kl/sjWNPvIXEn2SUSRthjJ8h/Me9c78I9cHiL4c2FhHeNaz6TM0K3G3Plc5T6jDf/AKqz/EVxJo1prcF7IZ3S3mVrhX3ArtPIPvmm4/vLH5xiNJ2PHdDs5Nc1LTbWyQz3N9IiQRx9cscdOwHrjivv7wn8ONK8B+C7XQbaDbeQoz3d9EMNI5OWY+o+vpXyt+w54m8N2PjnUNJ8QW0cdzqlusGm6jMBstJwWOAx5UyZAz6pjjJJ+1dQju9Jup4bg4lCbGZRneCOcZ6jFcGYVJxemxDjbQ4HSvgZc61exy2c0VvLNM4jLnCkjqRjOPpVTxJ8F/EnhVpIxafaT/HJGwO7PQivavD9xF/wh8O0ZfzJNo44Oc7gfwrpbTxEvjDQ47hVU3ESMlwncYGQ4HpXPSlzRs3qbqMZQsz5dsfhfr6Wscr2cgimYiPbtJyOx54rY/4VT4mjmWKPSJHduiK6knr79K+iNG06SS18lZPMTO/yQecew9TXRWF2LXUrVJUXaAYFbHzDOMZNdEYSq7uxEcPHqfLFr8JvGSyM0Xhq7m2k9GQY/Nq67wj4b0/wndNc+NtMvYIo1BffH+4iz0LMP15wK+q1C+xHvWdrmiWuuafcWNzCsttcIY5UI+8rDHP6V3VMpnCnzwldnoUoUoPY8M+Knhv4SeM/Al211awzwCA+S1ikgcHsMpx19+1fmb4k+F8tm0kthcRzQgnbGeWxnOc56j8K/Vv4GWA8NW+veD7tWaXTblnQSrndE5yp561seJf2f/AfiqWSW68P20Ny5y09qvlOT65X+VXQo1qyVaikn1R1qcUuVo/KX4STa94ZTxHptgLhL2W3862t1B2TMmdwJH8XTHrmu81K+8O/Gb4P6xfa+Tp3xF8Op5iXBJT7VArcJwdrZ5UhvmVuQBkE/VXj79hvb5l94M8QTW16G8xYb/5k3dBhlx+vqa+ZfFv7MPj2TxC1vqeki3u2bO6OUeXPxjg9Me3H4VEqjo1LzjZ9xe9KNkz5vuiLqME5DhN3+GKoMrKSTnbjpXsHxP8Ag/q3w3ksF1fS7iyebgXBCmJhg8KR0PFeYTWQjcgkfKAWz056c9OT/OuynWjU2ZwVISi9T1L9kjXvB/hX4tQ+JPEkx0y40a0km08NkLdXTqyAZ9QjNx0/eZPIyPNPjP8AF7WfjF8SNQ8S6lL/AK1/KigX7scKk7UA6ZGcn3JNcrqj3V1IzC3f7OgyNoJBU8HPt/8AqrpPg38Kdb+NXjmx8M6FCBNKGeS6nGY4Y1xmRxxnGQMDqWA6c12OnGEvaSd7HWqsuTlOeF1FOQky/NyQCOn/ANb2Bqmmk3N1P5MEbSPnPQkAeuf881+lGnfsD+ANB+H2oQNYzeI9eERH9pXTkBJccGNAQEH6+pr5Lj0O20mx/s+2gMNzHK32iSTlyw42/Qfz5rNYuPNyI451OVHkNv4M1KUgzhIgw/ibJFdZ8P8AQ9L8K+ILTUdf06DxRpSKwuNJuRhJcj5SSeMg885rRuZmjuPLUDCnHzCkt/M1a+trC1t/MvbiVYool43kkKOnbP8AKqqVuWNzljWnfQ+hvhjb/C34o69BoVh8KV0u7ZNzXVpc+WUX+8dnp2/LpxX234PhsfCOl6bpFlbR2ek2cQiWOFNuRgDcenNeZ/s6/AGD4R+D1uL9Fl8QX3N3cL1XgYjXOcL3475r1zXrGO1+yIuF/d8r3HvXweOrVXJ1Vsj1o1qk0kcz42/aN8FeAfFFxpes3rWx+zmRriZCIyQMhA2OSe30r4d8b/8ABQTxJeaox0rSYIbMEqivkyFSTjOOPf8Axr6x/ai+HejeLPgvrTXgUalbwNcWUgAD+aoJCkjkqRwR/KvynvIf9IcoS204L554716OXQhjleutTtlUlRgpQW573L+3j4//AOWRjQgHloyRn6Zr279lf4ufE74/eLmuJbyGz8O6TLG2oXJjATnDeUD/AHyvOOwIJPIz8DXTCNCQhB9D2r9Wf2YfAFv8NfgT4b0hMx6tdRf2lqCHO5JJPmKk9crnHt09K7sXhsNQp8yiY/2jVj8R1H7T2n+MNK8IXniDwjqEMdvawGa7ilAJwgzuQ88gD86/NT4r/tQeNvifNpI1uWzEmkys1uYbfaQxGNzZJ5GOMYr7y/am+LkWifC1vC9tqSnUNSfyZGU/8sQCWUn36fjX5+eIvCqeJIXeFI7XUQrFWj+VJMdiKvBRp1JOSWhzPGyaUT074W/tLeIvGHiax0bxJLp0WnXMLKXjhMLLIAcMWycnjGPevVPjF8bpPhf4Z0Ky06USazdpG8MJYMqx7wGLenUYPrXwzayTWbROF8q5t3zzn5WU5rvvA+qan8QPida6lr9wb24t7csGKjYNoIVMdAuD+frXdVwkHLmexj7WUXz31Puj9lXWNa8YeMPEnijWL4tcQW6WziFe5+YBV5wox0HcnvzXt3jLXNPdEslt3v8AUG2q0zE4gy23GDjB9vavBv2X2WPwxqkGi3sw1q6uyx+UeQEUADkg9ea+g7/RbbSfDd3AJReX80kMrXcmCZG3Dv7HoK8NU94Q0Ov2lSpHmmy34V8Lw6H4UuC1uIrtrg+Y4YliRgrye1d3fa1DpJhkuHChLcybu7ZAGP0rIu9Rk1ADTmhKGZUaQkA4A6kY6civPvip8YvDvhJRda9fW1lYWx2gM4aSQgcAAc16sf3MbQ3MOax0uk3FzqMlzrsiD7DC5fYwx5kg9vTmuZ+IXxE0TRLEal4k1m10WwYoFMxyxJ6epNfIXxW/b81zXLe90rwbp8em6fJwLm4X5jjuF7V8seJPEWs+OtQW/wDEOq3Wr3QG1WnY4UdflAxgewpRouStfQ55TPsIXnxQ+CNjLr6+Mf7e0q2AM1lfAlGUEAAk5P5Y9815p8ev2kF+IvirwlrOhSXXh/VodMkhvYoCyNHIXX5FbA3qQDz+WDmu3/aWj8Z+KPCq+HdF8N3k2n3Uime4jh3eYFbcqr7FuuOtfNtz4L8YeGbdYdc8JasEzviLWsmVPQ4YD5eOh/lXPhIwnBSnqy8O26epoX3xQ8TLfvE3izWvtDLu+W4Yq/HOOcZFez/DC++P3ivwbHreiX76toUchjX7e8bMxBII+YBiM5Gc14JcX2nTqssL/aZYWCz2c0e24iyORgcHjn2HOK+mvhn+0rp3wz/Z3bRbO0kn1y3vJfsKPH+6cMS6tIwIHAOCO+OM9a0xEKcNLbieHhyuSPW/B2sePG0+8XxDoa+HZLeNRdX1rMsqIrfeO3PBx83BOO9aXxg8eeGfAn7M+vaDpuqxXNxeSPaRRiXfLLuYFn568dTXw7N8VvHmrWerQP4h1PUItQm+0XsduSyO2RgZUcYAAxwMAZzVW/1Q6lZ280l0bqULuO9s44OQBn/PWuOlg+WpeLM4SUabRl/aLG31BpZoS8X2coke4r+8xgMfYD0xz60wK15boMbIwcMO5xyD9axFmMzPKcr8207ueM9K6CKG71K3W00uymvb0RmRkt0y20H7x9s8dO9fRQh7OKRw+ZHBaiSZXMnlvEQyYYrtYYIYEcjBFfVHwZ/aIsvEyWmnapc29t4jtbqOMrLIEM0Y2/vFB/I46GvlHULfUNKuJLDURHbXIA3KWV/LzzyVJBHtVzXLf4f/APCLGz0611LUvEckiP8A2leNtjhAI3FQDjAxgd+5JNDgpvU1jPlPubxN4Nsfj94Y8Y3/AIL1m4g+JPhq7M9iIJAF3gZClTlW3AFc44YY9a/O/wAReJtQ8deINS13V5Fl1XUZFkuXERizIqrHyn8JwgBFdr8GfjB4h+Afi8694WMc0ksElvLaXTbYZ1Y5AfHoeQ2Mg5Hc1w2uRpqNrKY0MF3PcS3E8oODl3LsAOw3E1tSi4qzOupOEkrGNdzW9l/rJgc/3eSKzV8QJAztHEZpD1LdMU688K3P+thdJCedvIzWPeWNzalC8f3+FOOuO2K9KEY9TKPLbQ7Lw341tba8im1CJosqVaaP5lXOMcfhWz4m8Gx+MES90S6t7i6A+ePfgugzj8eRXm0ML+Xl1KH0cYq1b6tc6beb9PkNnOODLEdpNRKnZ3idUZaWC40+80vKXsbRMjbWDLwPxq5p7GaV/lwqqSNvPGMVo6b463Qrbaxbfblb/lpnJP1JrcsfD1nqE0lzoFzHMuz5rVjhwCOlXzOPxAlc5XSrNp7uGBWOdxbc3+zXWMTJAFJKrJcFz+AAzWBZWd3peuw29zG0b7HKMR1wOa3vtX+naVGAXiZi0jZAyufu/Xis27myRHqR4RQd23OfU5rlr6RVkdAOvzMffPSu98TXOm3Fin2S2e2dcly7Ag84w+P0rhL4qrYCEJvwSacSpblOX7zMTj5aS4/dQpG6BWccMT/DStGJ5lUHavbvmq2pTCWZnIJVRgA9K6UrmDKLErJgjpxUq7W6DHpUaldw/LnvTySW+UbPTaK0tYglwfLeXPA4qAt5agk4B7selObey7cnb3qN8rwH47giqGMZsDLH8aSMOy427WB55p0ylgpyATzQpb7zHn2p+ZJYt13M207fUt6+1dZ4OQzahEMMH+8XbqQDXJRKJEHP1rtPBLMLyMKudpClh/drnq7HZh17yPqPwTAZtPtGP3m5DDrjvXeWamNgrHJ/WuX8D2bJaW4ALM4wB6DFdn9lZghyQc8nvXz8ndn3+HXuIsRr+9YkfL604OI5MdjyKm08l878b+mKZqETR/MFwO/rWbNXIhM6nhuO4qwt6ghyTj61m3DpGrySZBUZrKu9W25CjcvfOKRPMbV5fLt4kXA9TXN3WrL83PHQn3qrcayPLYNtKgf571yOp64ApOAqA5Y9ulVGLbsKUlFXZtax4mhs7R3lPlFRne3Q+ozivI/G3xSaTfb6ZKs0oAj81VDKmf4h6mud8YeKrrxdM1hYMfsQOCxzmYH8fu4pNNtrLwzDEoj825dd5OAcYOOvrXowo8urPDr4qUnaOxb0PwLcavGmqazceVb3EeV3EiRifQcYGOaWbxNpemtJbaRYLLCuVju5GwzH+/j+QrK1fxFfXUgSSR8sfuAnG3PU+9Mjt7aHQ5rifebjzFZpmY4CDsK7VE8adS2htWPj6Kz014iZEkkLeZJsJB6Y7V0PhnUte8WfabjTLf8AtI2SYeLbkr9R3qT4S/Ejwn4o0bW9D8XajDYOkkS6U0lqPM8sghsNg/xeteg+GdO0LwLr1rqGja9DKHkRZ4owqCVSQANvsDXQqMXG7Zh9clGSSR5xe+KrrRwq6rpTJIx4aRNnTggEirukata6mN0Eggkzjy2br619k6v4T0vxBZH7fbW93+6KqHiDKFPUD2r5z8dfAKOG6kk8PSLp8kb+YFmOFA7r689q4ai5T2cPL2nQ428so7qFraQHa/A2gE57nP8AWubuvDk2lzN5IMceMqoPBq+yar4dVYbyEzRnlJl6HnGea6nSjDq7JbzqY8cfvBjbmuX2lz1fYHnsVw6uuI2Rh0yPzrqtFnS6jLnBYnAHbIrd1P4dO1qXRmKA5XdyMVl6fokumzF/LYBuqkd+1ZzmrWRcacludbodw0bxlVJXP4/lXtHg8lfL+uBz29a8n0eweOaGTBXGCMjrnqK9Z8I258uHqWGABj3rz6u56sY+7oer6Pb/ALlCo7c561rXNv8AJjbx0IxVXw6pJjUj7y85rekh+Uhhuz61cYXR50tJanmPibTTMFAVV5J964G6sBHqGCu0Kclu9e0a5pnmxCRVARevqDXAa7o44mRcNg7jQvdkddNpmLJeC2haXaskgA6jPfrWTfeKll/1aoSowqOvIrW8lf4dzcfNkVxesWhW4mDR7VzlGA4/CuqWptGEebUpX175k3zuo3HJA7f/AFqiNotxIP8ASk68bjmszzts+6Q+dz1Jxn2q9DJDMpKw+SCCMCo5dDpemxr6fokqkSedAuTja2efpW1BpLlgHnjXd95iCa5q2jhCgszoAOF3GrKzWu0RidgR/D5hzWLQI6iG2tbEh3uvMbPWMHFXhrlnaxHySqkd35NcVH9ouJPLto2Az9+RsKa1rPwzdagyoWXJXBx296zdzNxW7Ztr4leY/uiRuH3+pre0C3WbEk0Znf7xkYd/Sq2l+E4bJUYBmcfxdQa7PTLXy4lEY2kjrWTiYy2shIY9+3EQ2e4q5Ha/vM449MVZ+xls4GOOMVcgsyi8nB/Oo5TnbsijLbK6kle3Ary343WaXPwx8TQzIdv2NiQO3cYr2CZMfMPpXE/E7SU1DwjrNuArNNaSqB0ydpxn2yKuC95HDWd4s+L/AIA3Ut1PrukW6M3mJ9pVVbDDA2HH4j9RUnjrUhp/h3VjIcNHA6BTx1GAM965P4S+JovDfjeO5uWMFtcAxSseCCGGOnbOQfw9Kt/tCa7AuuSaPayRSwbllYwOCqggsAT0z7c8V2yp+/c+BxVNSnoYPh+awn8MlIw3moAXZVIKsp3ZBHPvnPFfW/7Mv7Sy+OIYfBXi++iXWxF9n0zWLog/a16CKbPWXrhuM/z+O/D6vY+ErpmQGS7n8pABztC8kemaS+uILDSmd2C3cx2RrkggY+8MdCPUYIx681yVKPtXynLu3Y/TpbjUtM0+TSniZBCWDq2PkzzkHrg+v4da1fDuqR6Jp1rfQtm5jZ43g/hkVmGc/hXxR8F/23ToKnw98Rry4vbdVCWuvLH5skajGEnVR8yrn73X1/vH6wtdcgm0NJdOeHULW5QtHeRuJI5EYfeUivBxWDrYV8/QyjzQd7nsrS29/Fp89mCbRyHjkThlJGSCfUGr0d9HNIlteOHilT93K2Mo3bkVwvhHxTHpMcFq2YoJ1UbG6oxX74967K4srezTZMm3cnEkfKMOua6aFTnjzRfqjtUuezO3tFLWsJik+QgAZGfbg0/+0DA2J08o4wCTkfmK5bwPrskmpXGlMPkjiE0T98E9Oe1doygqQPumvtMKvb0FUpOxpc8o+IWpHwd478P+Jo0H2S7/AOJdeNvABDcxlj04Pc/SvUo2ZlLBgU7ED8q5f4ieA4vGvhW90kSfZ/NUGNmGVRxyD/8AW6c1znwd8RXsmhyaJqyMup6STayZyAQvTn3AryoupgsTKNRaS1L+JHpa56bs5Pf0xVe6sLfUojDdRLOvow6fT0NOjmecKVThuQ2cU9dytjPNdzlGVtLoWqWh5h8UvhXD4h0MW8tquq6fE3nC1nAZsjPOepAr4O/a2+HnhfwX4Qs20jRIbPXNWvFbzFYl4oY/mkKrnIDYCHGPvCv1G+ZlwTuBrxP4zfs2eEvit4l0fUtTka3ls5N1xbxuNlxDkkgg9DnuMGvMxGDVCoq9D7mD97c/NHQP2YfinL4u07TrTTRcTzQQ3S3tq/m2wimBxvcqFJXBLKMkZB5BBP6O/Bf9njR/gH4bEVnGbzWr5FXUdScAu7AfdX+6vJ4AHr1Jz6xptxpejWcFjpNnHb20QEaR26BFAAwMCs+8e8vH+VpYUZvmBQ4B9u9YYifNu/u2E9jLuLe+MbQwo5jfhlxg896/N743eDtR8C/ELW7W4ja1ErtdQ7zgsp6+1foxf6lBpjSIsjXlwD1DEKD059+9fOf7V3wn1Xxh4fh8Uq8l1fWK7THtBzHnLEAdSOwrzFU5Zp9jjqRPiW6upbjYMbtoyW9favpP9in4Ox614ifxjrdt5tlZMU0+NuRLNx8+P9kYA9814jo/gnUfFurWul6bbvNPcOE+RchQcZZiOgHNfoZ4N0SHwT4V0nRrKNVNpbLEfL7N3b8Tn86MbirJKJzRXKzutUvFtAodzvJyIiflUY6j8ah1LUzfa8sbr8yxIHb8Cf61z0khml8tDuPQyE5HJrIbUJv7auGVvmVtpP0GP6V8ziqsp032Z306tpIyPitqyvfol2wls4/kaLBAIbgj9etfKng7/gnt488Z3gvbm40/R9GuJGlhklm82QxFiUO1fbHU8V9q3GgWvjO1eC4jKTsMrMowfwrwv4rfHL4lfs13FpBttdX8Pj5IVlT7i9FUkHjPbrzx7135XiVGPs4rVn0VaqsTQjyrY82uP2Ebnwt8YPBejT6lHq9heXAnun8nbtjiw7xkc/fA257Z45wa+1P7HluNSurSEFIVbdI68cDgKPY+lcB+zP8AtI/8NIX+s6sNAj0aPw/AtudsokZ5pOTg4GBt24Ge/SvY9Z1KHS7f7Lax/wCmTRtI/l8tnBPU/wCcV7WJoylH949EfPyinqfm18d9Yt9e+Ofii3iuM2cKi3gwflUqq8fmTXk82oPpzEBgVxkZHf2q3qmqPP8AEG/mnkEhuLybzg/R2LMefy4rntT32s0gaTzsHdyOeT0r0cHFU4RaR5zjZmD4ms3a+TUAo2TDEgB6t/jirvgXURpt5dIJVje42rluAEHLVYv9Ma40yXzeRHmYMvqO1cd5bsoKFkc8dfUV6ck6keU6Yrmifpz8Edc8P+CfAPhJ7dNlxdacs90ysDulfB3k56nn8KteJf2lPA3hFZze6rHJFNIzmwgHmSgqMqNo6Gvzcj1DUo7WKGXUb3bEoj2mdgPTaBnp7dBUViqSXWCEJB+YMcuBj26H/PNeX9Sm5XudLrNR5UfWfxI/bq1rVbCa18I2J0mFgFW6uZPMkbHfAOBx2z+FfNWpa9qPia6n1XV72bU7x2+9dsX7/wAIP3fwxTGge1k/1nmBuhU9R9KS4WRpEVY1jGegx1rtjQUdZHI5tlIx7mZiME8kYwak8hmYNGMg+/NaKW4vLjyFTEjgkn364pJLeTT3URQPKW6KoycfQc5+nbJpylyKzFuro/a7T4Zo7MRC1it/LwqA4xxT7g6Zab7i/FtD/eknK4wB79K+OPFn7e3hixhS0snuda1BV2utru8p5MAYRuhGTwRn8a+ffjr4h+LnjS7tkvdMvk0a6t1uUjtEfBUn7shOCHHGVIHWuCEkrWj943XXQ+sP2g/DP7PXjK7m1HxLrGl2+rQweTFJpdyI5t2dwz5Z+cjsGyK4/wDZy+APg7XPh/catf6YutibUH+x3F4Nz+QDgAjAA6c4HWvgnVLi50WVrdrFo5YwVeOZfmXjJ4zgjFfafwg/aW0v4b/sf29wt1b3HiiK5ltbbT3cGYyl2CsycEryCSBgdautRlUknLY25l7Js9f+J3j7wF+zf4ZOqDTrNNSZvJj0y2iTzrgjPHTjjnntmvzu8ZfEI+PfF2teIJNNt9JGpOHSzssbIRtC+2ScZJx3qn4l8T6z8QtbvNZ1y9kvL+5JMrORtUDkAAcf/qFYtwpjZZA7ZXgFia6KFJKN0cMbvViwy+XNHG4U5bJ9eT2p+sahqGnTn+z5L7S7iXaGKl7eQqeckjB5H4dPpXU/C640CfxRolj4mSODTLrUbczak/3bdFbcVY9cORj8ecV+hnjz4W/BbxzN/a/iz+y7i4mt0WGSWdUaOAfdAwQOuTk9M1U6rhPlZpyq3Mz8yrWzaC1Ds7Ss3JYtuYE88nuT+NMmtxNuXZlsnGOma0fHC6bonjrxHZeHbp59Dtr6SOxmZzI7wgjB3k/Nznk84FYsdxM0zlX+f+FQM4Nd8NTKL0JkhmkBEZ2kdmA5FQsvzGRiSx5Jzyfyp0lw8MmJl6jnnFRNIWYsylUPTFdBXKmSLI0edhwB3NVIo3SYuRlmHX0qZnXaCD1OQDSK/wC8DOd2f4VoWpPwmXqmmm5VnYDP1x9KxxocixjfJ5RJ6r0PtXVyr9qcxpEUJP6etVpIlj3K4LupxV81jphN2Mq08IG7ZCbxYFV1Te2D87EBAAfc/T1xXuevfsvj4VeF7TxF4n+JGi6N4klYeT4etYmnuJGbgJvEqjPcny9q9zXil/fC1ty0PyzADYxPKnOQVxzWbbsLq8NxKWkuJZRvlkG93Y9SzHlj7k5Pc1L5nqmd9Oa5dUd4+qW9xI1vcS/abiJSxlx6noD61XvBAs1oitiRSxBIAwPSsOBW/taeMEKygYLnPHpnvVuVUnjjO8b1BXb3Bos0i7mjrFmY4w3mhxt3qFUAr9a5HUMuqqWyd3X1962VaVLVFkkfftYtjnjOKx9WVRMyg/OqnIXp1q4g9SvaYjt7iZyN0eAMn1rFXc0Mm45Yru59c1p3in+ynj6ZBJBHPtWUT1HU+9dcUYsDnyx6+tSDO0HqT71DuO0Z5NWIlDLjuOQfSrsSNb0Odp70xmPAGc9OtPZvmwCMYph5Oc5FHKIaxHy72Oc4NLJgfL90UpbPIxnPcVIsbSHa5XI/ipfDuUOtlXaPU12nw/2trCAZCxkKR2OTkH3rkIVXjHzdq7nwDIYbrBhViXyDjnArCt8LO3D/ABI+vvAmV0+IYAkwG9etd1HbiOEDrxgk9681+H98fs0Ksf4Pkr0K0uiq4zuXp81fNzdmfd0fhRLJGUw6j8elJ54lVywzxzT2IZeMEelUJnMTNg7RjGKhSuayRi68d2QM7Ac/WuI1DUZUkZFJwo4GOv0r0LUbKa+hIiwQOR6muQ1LRLyHBktnyeSwH3RVJkO5yV1qE8gIYgfh1rh/G+pSm1aGLO6T93uX+EHqa7fV2it43aXcCM5CjHSuFutNvPEFxmK3kMaDA459jXbSstTz63M9DlrNI7VWATDKMiQfyrS8H+FNQ8dau0NqViijOZrqQALCvfHqT2Hf2rQbwLfyXa27QPulUsFB/PNdT4H0k+F52WIyFJMCdM8ZB4IHqPWux1FbQ836rOTIviB4J0nwP/Z95DYy31sv+jyyM+V5OQx9yenoPyrNlt4/EG62MKQW8g42Afdx0r2u3tYNc0qe2u0ElpLH5Tx7jggnPH6Vwl18G9etJy2mS/brZnykeMSKPUnPNaRqxtqcFbA1VK6OI8M/CDTPD+tx3kjvcOGzEsjbVXnI+o+teueGf7G17xhYaNFoytN56s8ijKhVwT09sVSs/hb441Z40l0yK0iCFRJI4w3/ANc16h4D8G2vw4tZryV47nWpRtlm7KD/AAKOw9ahzVtx0sJOUrtHuT2VukKqQoXbt+XgcCvKvH00VvIWR1Y5ONpBJ47mrN3r0upW4xO4Lemfl9qx5ILeUoLhNy9Nx6/U1yVJc2x9DhsI6erPHLeyne+RxFHKwckRgZ5J6Z9Ca1LTwFqvirWn1SRPsxEPlEN8rOM8c+tepQ29msmYraKOPoJAvUUt3rwsVCoqSNjO4dBisNj1umiOYXT30+xS1nYTYUIXb2Ofz7VhXWno6hlGHA7/AF4rsFZLhGcrv5zub1rJvNLaSYbCTn5qhrS4kr6Eunaeyxqpw2OfpmvQ/CFqVnBA4XFcvpdr5Makjkda7vwiEWYhRwTge9cdR3lodSjywPQ9Hh8uaJw3G0qf510LL5q9Md6xtHj8yNQD0atdvkXk5NelSVkeTU+IivLcNEV+8COQa4PWtM8qYjqGOa9E+WVct1xXLa9b7p8BfkUcGirDqXSetjz+bSV848MM8HHSqGo+EV1BlHk7lHIJPQ11txZ4G4N82elWbeN2jxgFj+Vc0Wzvu9zx7UPhndSXRdFjCg7iqtwPr71nf8ILfx5QHIzjgDFe8rEq/eiTd9KiuNPjmjchFDEcnFa2HzSbPC5vBs9uyrJ5kUh54O7NXrPwxKsYH2bc2777jBr1eTSjGn8IB9RzVVtNdRgL+VJ+Y7s5G08NtDNveUZHGEFdLpukRIoc7gw6A8A/hV6308f8tTz2FW1th5ij5ueKm1wJobTYoyQDWpZxBVCfjUKWvf5s5q4kRXk1LgQy1GoxnjINSocfSqIzuyKmiyVJzis5aHNKJLMqcDrxmsLWI/Mt5E2ghkZdrDIOQa12+Zi3U+lZmpBWUBSQfWslucVWOjPzP1PT/wCw/HV/ZNHlrbUH2o2AQFJ2/p61w/i6NW12V9KaS5t5R5hWRfLCSHO9cDgjocnPWvUPjdYnTfjV4mjjZkxeh1x/EHVGOfzNedaxvm1wCGECC7cGIbjtzj5q9uHw3Pj60bSZ0TH+z9B09JjmOEb3CnALY9fSuJ1zW5byUzjAbpFGcD5eeF9e3FdrrmoaRZ6xpEGuzM+iW8Sm4SE8yMOq8Dp0r6x/Zu8XfAjxl4R1bT9f0/RV12681ntb6FFUxBTtWMv1AUA8dwTXNG9OXNYxo4ZSu2z8+Y8zl943k8l27Hsc16X8H/i54w+FVw6aFcrNo8h33Wn3il7eQAgngn5WIyNw655zgYzNU0fQ49Y1MWC+fafaZDbPE3yGPcdg57YxUkO9l2BQEAxjtXXOcasbNaHFUUYtxPv74U/tDeFfi9FDbPNH4f8AEKnb/ZtzKOQBjKMPvD6c+uK+k/CusSro6aLeIWn+7C74C7TzjPbPavx7g0Ha6ZLLzksD0OeCP519GfDn9qDxf4K0+10y4lj8R6ZERtjuj/pCAdFV8c+vNfKVsI6UvaU+u5z05cjP0u8MwWlvqc4A2XTRJkN1C5PA9s1032lDJ5e9d+M7c8n8OtfOHwv+Ni/ELRYPE9sgi+QwSQSclHUkMDz1rW1jWLxb6PW3uD58mdkcbEAKB0rWjnsMDH2fLsdvNGS3PfMEZ56DGenGeR+dfOfxs8Zaz8FfFWoa7a6dHeaRrMaq/GAkgGCRj+LHPJ5/OvTPhd8TLfxrBNayuBqFv95SOZEBxuA9j1ri/wBsLVIdP+FflShd09yu04ztYfNke4r6HEVqeMwftoMa2ND4F/ElviXoTXUczRX9ttEllIcqVIG1h3xnI+orutS1S8EkaPA1tKDkSbgUJB55H8q+Cf2cfGd7pPxE0dLK5aMeb9klU9CjjoR3Gcda/RaE/aoAs6qG/iXgj36159CHtqfsVKzK82Ycfi2K3hma6ZIvIQueeoAyTXCTeLLbVbie8mYOWPEQOB6AZHXGK0fito9tpOitPas0DzOI2hU5Dc5z3xiuD8O2B1TEcKeZghOPUnoPevn8bXxNKr9XqPQwqS95KJ6b4fmu9UuElRBawBckKBgDsc+9PvtTvNWlex0tmkjI2PcsDwT1x3rU0+xa5hNpA3lWgws0kfHmNjBVeOnHJp/hmxitbP7Qi7QzMNo9A2PrnivVjQm4JX9TWK7nJ3Xhb+yda0uGN1l3MS5kOckf3vbFWPFEBkjuLN0xAUYFO3I5NdDJarqHiGCV1GYUbfnucgAn8DVfVI4726IcLbeXzI0pwCvPX+ntUfV4wUuUlxPNLjwvoXhO1SLStOt7SacLuaOMKxA5JJ6/rVKa4EbMivvII3yd+lWPEmtR6nrDC2lWaJB5ccyjh+5PvWJkXE3lRSYKnB3dPf8AACvlq7U6jSONrUvWupbmVIhhFwf941jx3Et001ykg82QlmX8e1WbKZJLzyg64BIQr91u/FUdEFj9nZJpZIbgkklh8mM8DjvXNUhpYpb3Z3Ph3xBBstoVVjdABBxwx9B71xH7SXwtk+JHgm5hWRXnWJiG6BCBkDPpkfhXRaPpu6XaoWSfqvZQMf412+is+p2b6fdRRtIyMCzc7l7jH0qsPR5GpJ2PTwuJcHax8R/8E6/FieD7z4h6JfDEzvbag8agbSoBiOMcZBjz+PWvrvVrp7XRNT1t0cteW8v2ct2j2knb6Zr5V03wenw3/a61vTbciG21HSLmaOMYAZmKFRjuOGOB6mvfn8U3WrTWeiWqObaSMR4n+6y7cZx6DNe9iK7rSjOXVfiZVOWNRp7H5xSWS3mrPfTSFX3MwUDALc5Jz/nmsfxPJ5n2faoySc9q2/HEh0/xdc6PDKrW1hfzRDyuUyGOSD6cfrWJqVwtwMPwyglCB0r6Gh70Y3OOdr6FTTpYWt7q3muCrEbSM8Yxx9a5rTYnk1S3gRTI5LBV9cVqTW37lpByFHDHrVLw6kja9pykfenC89Rn0/OvRvYIPRmleq7MzyISVOWVRktt7D35r0L4nHwxDp/wy0XQlt5tQ0/QmbW7m2H7ua6m8pgC/BZhskPqoZeBnAw7zTRHGYbhNrpIfmU4xz1/OsL7G2m6tG0JaSRBuG7jk9eaUZamHMaGm25l1iJLoFYiSnzcYyM4q3JGlvJKVHmJGxT5QCR75qC4lW/jVm+XaNvy/rT9Bjn8Qwm00+J7y5aTyUVEJdnyMcDt3z0wCTisqy5VzMG+ho+EdHvvEWrR2Om2ZudRm+WNF5wO5YgfKOeSen419i/Dn9nrRvhrb6Xqd3cf2zrxEizTNzHGzAfLGvTpxu6471m/CH4X2vw28MtKFE2sagge9ugclvRFGeAPT1ye5r2S2uRB4Z0eVECXUdxIjKO/ytyfyzXy2KxPtm4wOmnSXLqfl5aLLDf2s1tK1vd28qTQyADMbqwZW5GDggHBBH612vjT4veNPGlyRrPiu9vI42UCO0xbxDjnATnnnqTyTz2rH8SeBvFfhmFpdV8K6tp8UZ2meS1fZx1O4DGPfNcpa6vazExxSKW2lvLU/Nx619JTcKiujgirsuTAysJWd3AI+aVyxOD1JPWvob9lT9nfw38eNF8RvqOrXumalplwvkvYlcGMopy4IIPzbh7AZr5iv7prnfCr7FPUj+Ee9fUX/BOnxvBoXxM1fwxcSbYtXsz9nkbo08ZyEznqVY/980sQny3R304dGO8X/sY/EXw7pl5LYLbeILWJy0fkyCOV48nHHc4rwi98N6xpayi70S+tSpMcjSQOVDd+cYz6etfrZq3iZrJYvMiVo4oW+Zc5JHtWNY2ttfRmwktreJNRjMyIyggSDnafqP5V5f1qVOXKnoc3L72h+WXh7wTrXiSZbfT9GvrqSUbVWGFnBycZJAwDzjtwK9D+MX7NHjz4a/DnR/F2t2kMdg0kdpcwLJlrYMSIzIMbeu3JySeMjiv1F8I6PHptmvmabFCw6SpGCCfy6U3x14RsPGmm3+h6jH5+lX1s1vcQMM7N3G5fcV3RbqPnkdLhaJ+LCzW6sIZgEcAn2U9Ac1ahtwq7N2BnhhwfpWt8SPAc/wAOfHGt+E7tC0+i3MkKybSGnh6xyY75UqfQHIzwa5ZoHS2w02x1y24nP5HkGvRjtYy5VPVGznycwyoGJ/Ws2SzeB8YDKx4AOarXHiKaK1t7fyI5DG2fOP3n9mHtUCeJJZGf92zRoM+YBwCe9bbE8jJpITHJuUeYvTaePX8vocVK1m8KnjDYzhq9K+FPwzi+IsE0+paz/wAIxbXjra6bfT2vm29zchmV4sgjG3C5AZSS3B4Irnfij4J1P4TeNrzw/rFxFcTKqyRXUK7YZ4iThgpJKn5TkE5GO4wSo1E3yGOt7M5CNpRiTY0Z24x3z60rSmMFnIJY53VtaJJba9qUFnZqWmchRk7VYke9aWvfD/xPpMdyZPDd7LBbgvJJaQmcIoGSTsycAc/SqlOMXysvlscJrEZezB2AnduVsY9iKz7VCqokC+Y+Rkgj5ee+a6iHTbXVtPG66ZOCy7eAc81oWenaZpcKj5mlxg+axDZo50tEdtLYoWPhO+XVJp5vIWOYb13SAkVbXRQqruKkFidw4J/Gr8N5Fd6kkETOzSg4LMewP+FVLvVFWB/LbO2TarE8e9PVmyepVmjUw+aigHd83ofSuX1CzdrogDaGxt9fxrfmuz9nKAfLjJrEmRW1B92SvUGtIrU0Rl6rOPMaOIAktnn0rLZdvDdemau6ixE78qF7VQkdpWBbG3+EjvXZFGUtyFmCEjPSpYZBt4+VvbvTG+Y5IyOnSiDa2R0atEQSOpVclf1pqsC47Ck4VjlsinbeM02HUt/Zy8YI6Z5pFxGwyAB6VJa5ZWKHORz7U5kUqp3cD9a55N3OhRuW0KbcBQB22iuy8DrtuoTyA4Iz356/41xUDgFcY9uetdf4YmMNxboG5dgq+u4msamx10UoyTPqPwSVjs4TE3mKu2Pf0J4613yxnfzkCvMfhzdkQRxhdij5SG5yfUV6nb4kUY645r5+roz7Sg/dQ7zGVggckehFMki8xvv7fqaR+GwfWrMdukgzyPXBrlu0dRXTTrmRT9nuY4z6k8VX1DRpFUNdatDMzceXGmT9K27XR4ZOVVgAf4Scn3rUtdLghfKwgsvO8gk0c/Ylq547rfgW21S4MkqXVyeoAO1Rj1FXND0IxqI5oljK87QME817BNCZ4m8uDdIRjJHWuYuND1eHdItooUnPzMP1zWqqvYFBbmJqnhEXFqkqREOh4bb2/wAKoSeHbeaTAgVW7MBhh/8AWrrIfEFxar5U9soVcKWjcNU0mqabequ4eTN/tcYo5pFaLdHKw6D9jUeXINnU7uprQtpLqPP+l7UUY2EYz9KvzLbn/VzIQf8AaqoyszsqyxlRyQa053YbjHoWP7UvvMDNfSDbjC//AKqgb7Os/mOclgeWOQB1J/OoylsQBJchTjPloSCajmmso4mCMDIDyH+99BWkZeZcYxibVm13fWuIF3QL1kIwBUVz5cCYlYTy4wFXhVPqazV8TXGwKy7U3ZYg4HHsKy73XEU71YN3Lep9q2HY17q6KQgvJ8vZV6VizXhkYgoWOclU69KyLrxAbpyIm/eYJ2kenf8AOug8L+GZ7yZXupJFLMT8o55/pWbBI09Fsd1uVdCQxyG7GtH7AI2yo7YNdNaaV5FuFI27faqE1piTKqT64rnnJmkEjPVHG1EUn2xzXRaPE9ugdzt4qCxtwvzkZb0NasajaCB3wVJ4rn3NXLoegeG7jzY1OMbkBHfHNdGVyCCc1xHhqZ4sCNgdo4FdxbuJlyB2zXrUdjyKytLQjjUMoAODWNq1oUwc7smt9YwuOMGql1GW3fpW07NGMJanHS2ucEjI+lRhRHwOK1riHYxHcVQkjIlJ4xXA9GehGVxEVcA981YXpytM27k4yOe1W7VQylvXjk1SLlsQNZxt8zHA/u1BJapIMJj5eoBq5IPlyDkntUaW4jYuBhm4NMUe5RNoF5Ix9amjTJBx0q35JY4wPxpCNvFIq4zcAM5p6qWXI60ink5GaViSDzg0rk3HxberHH0qdQuTgHFV4kDYz17VJcSsCqqeepxWM2ZSHFSuSvWsvVseUmBj5gDWn5yMd3cDGKytWlG1gTgdv8axT1OOpqj8/wD9qOJYfjRq+xdknkQynn1yo+vSvNILeC71SPeuGiYeSc9CRzXon7TF2lx8ctV2tnNtCCG/4Fx+deU3t0+m3MVwhweOvGfevapr3EfI4jSTKmteIE0vUriyuLYXRjOCzEfNmk8Q/EJdbWKK18P2elQKAGWBsNKeOWwOvHrjgVF42gSbUElAdp5VEgbP3lx0AHX/AArlxhtobAI9+R7V1xjGS1R5zkzpLHxEgVo5rYRqP+WiHOPw/M/QV3Vv4ba18N2OuTzQx2V0u9HL84JwMjHXPrWP8CvhzZ/EPx79k1R3i0DTbSfU9TlQkeVbxoeSRyCXZOe4VuuKxfNR2kgtp5pdMjkJgSQkAJuO0bexxj8aynGMdEL2MeTmkd3EY7qPzI7hJFPPXqOmcfl+dN88QqsiEGQHdtz07ev+cj616D8DP2bT8Wvhb448Si4lhvrBTFo9tGzYe4jQs5dVI3KchAP7wJ54rH8PfAnxR4g+GJ8Q6XbXV9d+eEt9PgjG4R7jvkkOeFx0C8+vt5lSpC7jc4/Zc2qZ9CfsX+LY7zRfEHhqVmM0FwL2LcCBsZAG9MkMpP0I+le569cXEfnPDuuQcDrnH0+tfAVre/FD9mnXLDVbrSI9LutRtpEjFyEkWaMEEq3ltgEcEAkHkkcAkdhL+3l4r8sM3hDSvO2ALItzIFz67duc98H86+fxGVTxE/aU9Uc8qUujPa2/aS034M+PNO1O4ilniLGKa2j++0RABcD2x+Rrd/aX/ab8F/F/wroVj4Y1qK68wtPPFICjwnGPmDdDzxnrXwL4y8ear488RXOr6m4S7mA/dxAKiqucDHfqTk96xG1JISVEC5HAZOCPcele5hcBKlR9k5HfTjywsfYH7Pv7v42eF42ZS896gbkYYYz/AOymv0suI3tr4SoWZHfkpyQe6n2/lX4W+HfFGp+F9fstY0fUptM1KzkWWC4XBCkdtvTHPOa+kvCv/BRT4l6DMiata6frsOfmkQtA7ds4GQK0nSnSTcdS4+6tT7S+PHxCGjzGG6ZXttPjMjov/LSRuAv5Yqx8JYb19Jtrq8KxahqCtIkA4EUZHQ+/vXgnjPxdN8RvFfg5JIfsdxqbrqF6jtuESom8KQOxAxz617ho/iRZfFVk6ElZYl8tFHQ8gLivkuZyrudTXXQ5faLmue0aFfrb6CWLALDGSc9AeTj+VUvDl4LjSiVdvk52ryc564rz3xh48sPDOn6gbq9t9O06JN13e3MgWOCPAJyTxn9a+bvih/wUI8M+GdHuNJ+HVudZ1hSU/tW6XbAhAzvXoWHp2PrX0lOc5/Dsjp9pd2Pr/W/EVn4bhN5fXXlXf/LO2jOXk9sDqc9a+Pfjx8dvF3jf4reH/AdnMNH0rUpEaRbdh5jx4ZirEHgFUbp3Ncp8B/iTf+O9Y8Z+MPGOrNe6VpumtcSXkj7I/NI3bRnABUDHTABHPevOPhr8Rpfip+0tpWuXkAtY44JEghXKlFVCFz75dsn3rzpSrSlO69xI6KtNRp83U+0LK5is7eK3SMjy4whZei479OKkv7/yVEUisN45CL2zzjv0rPhvoo7GS5eI7mKqqbsF89Pw96gj82+dLr7QA0fGzPIB4Ir5pxd7Hl3Ol0drZtfuJJP3CRI6xKBgOduOlcvp8KwwiQyFGBwUPp61f06+udTvPtKIII7c+UMYwv09zWOdRN9eQqVCsRhmJx0NVKOyB2aO/wDCMzTQiNyyzMMKF/jGece1dXeQ3GlpDcsnl7GGVHDFTwa4y0hkt3V1c/aV+aNs4XOP8iu80rUxqGjtuVSyqY5C5Jxjn8q7FTXLa51Udj5A+PI1HQf2o/BPiS5gkk0i/mhso5MfeLB4igPYhpUbryAfw+gdM0e50uK4k1KJftCziOKbuy4JO2uQ/af0H/hIvglfzWhzq2hzf2vYeWQWLR5DgDPXYzfnV7QfiVd+Pvh74O1O3XytW1QIMqMoOqse/f8Axrfl5qMZdjSrFTkfC/xu006V8Z/EsckYXzb1pIgo4+cg8fgefeuC1RlaWTb0zsDetfTH7bHgX/hGPEnhfUo0V5LiB7e6mUEAyqdwz6Z5x7Cvma5kW73AHdgkKexPWvosG37NX3OOUeVmexRrOQ8gAY/GsiHUF0vU7G4C/vIZVkJY8bQ2Tj8K27zy4YzbuWjm2b1HH5Y+lYd5aowfKkkjH0Fe0lpqXCLseuapapeXSzPFIYZE+Xb3B5z9OawtUtYbHWEhebzfk3/KMBSe2R1rV8H+KTrHg+CyZgupWKiEs3JeEH5SD3PY0/R9Hhl1lxcDeNmVY9M+/vXPblkcjVm0yhrFvDDp7SsgDRwkKV65xWH8K/iM/wAKfGkGsm2+12pV4LqEt82x8bivoQMHjr09MbXxG8jSdLi0pW33znzZCrZKjoFP1ry7Ubjy4zCM72yNvfpzx3Fa8ntY8stmddJc0dT9CvCfi648ZaDpl94dkXULa8iaSPapGGHZhjKEdCD0Nbtr4w1C10UaV4mtPscqzDyrqONkSXCklSx4LDPUV8C/Cnxp4l+HvimyufDerTWJlnVWiyWhkZiBhkYEEHjLfe44Ir9epvgnZa9Y27azqFzqbtGpkjwEBJAOQQMgAivksZhlhanus2jB7I0LFoNX0meU+VPbN8ob5WTHv7Gvgr9tLx54S1bUIvBnhXTdMWa2lW5v9VtIFVo5UwViBA5BByfXFfOPh/4meN/BdnLaaB4u1bTbKYFHt4bgmMrnsrZC59Vwa52G+uLeLazmdj85kYksx9yeeDz1r3KOFlSW5wQXval640+CSErgiVmwWJySOxNP8J65f+APFWkeJLIkXWl3aXCqp5KqfmU+gK5H41Br15a3ENn9iZgPJBk/v7wec1Xh1QW9rvk/fPEMuB/F2rvlTbjqz0I23P1g8SeLoNa8I6XqmnqJ7TWII54rheihgCefWotJ1iWYiZRieHaYz3wuK+Xf2PvjMPF3hm6+HWqzwpf2ub7RTJJtef5maWBQeMoACB6Mf7pr6J0u8++wDLIABgdeOvFfJ4qEqVTU86suSrpsfQOh6lFcNayCYxiWPe0Wfkz3HtUWvavDbzMhTGcbsnkE9h+FcBouoGS3MAk9WibJHPdTWhNLIzGSYecpGd27r/8AXrvjiOWB0+0urHyf/wAFDfCNodW8KeMYrYvJdQtp11Mi5bCBnjyT6fP1yPmr4v1KFJo1kimWeNn2EBuUJ55GeO3X1r9jNG0XR/E19Faaxp8d/BktClzGHVWwecHoeDzXxB+338OdN8J+P9J1bSrSK0t9TtninhjTC+ZERggDjO0n8hXTRxD3Zi7wakj4/wBTt303aZlVSRkc5rJlutm5QgdG+8OhC10skImaZJc5x2qnJ4ZE20qmP+BYJ/8ArV7W69SlN9T3bT/i3Z6f+xa2ivaWLXdrqrRW0jTr5+55y28R9dwDE+hHPQ184a54m1LxNfSXeo3c95OAEEk8jO+0dtzEk/U5JAHNN1DR7jT77bcq0Yk+VA3EbAHPGOue4qn5KxqccEDinGjE0ile5pxXTLADFM6yHjevr2APY165+zr8adS8EeOLTT9Q1W5k0C6Yx3KuvnEsUPltjkjBGPl9eQa8IgmZ/k3sNpzsHTJ6Gr1rcPa3kM0U8lrPG+6OaNsMjf3gRyDilUoqSsjTkud14uvrK0+IHiRbSXfbm/nmgSNNqqrOXxjscNjHtWVL4mtr63+S2/e9V5B2mudnme4mnvJZ/PuHYs0jHkk4yTjvS6bbBrgO7qqLzlvvGnGHKki4prRnTaTaxDUbW4jn8osxGM9eCDj8TS3W2K2michtgJHHf1qHR7PzFglWXKxylQAeG3HNTXEsf9o3KgEeY5CBe/Y1qkaozlmLDCneCQc1X1DCQ5I2u2AvGO/NEd0rX32VQ31z3qLUJHwoc52/dLdOtNFmJdrGZmXAII6VSwqoFUfd6D0rR1ExpJtC4fGS3pVCZV28rz1611x2MZR1IWZmU44XvRGnyk45p3lsy4GB60sHJIzkDvWhNrELSBGwQW9ABVqNG2nO1vQHtUErIG3MDjOBirVsqbsM/UUS2KsPsVbzDggH26Gp2lTfj7x6YC8VWbfGzDgc4GKkc9cVgdMdieGMs654IIIx711mmoLfUI2VSzoMr25ByK5TTXLXCp12kD65rspopbfUI2Awh5P1zjFYVHodNPXU+ifAkwVYnjGR5YbNeq2DnKZP3q8c+GVw32eCBhsO3bhj2HSvW7WbcoPTafpXg1lqfX4f4UatxGGXjO/qKmt8cEcEjketZrzM0QVW6HrU9tdbG55965Hseib1jIUlG84H5ZrbtpgzBVbjOT9K5iEBznLMeoOa1NOhkZj/AHQP61nYfKmdMpVcMpz+FQpYi8Em5mKv028UW7KmMjA/OtG38vaGTvxRYVmcZ4i8JRJCZYkxcE52qM7q4a+m1zS2KnS5JU7MUBwK96SKJh86bjjNJNYQu+AgcGtopoqMls0fNM/iyPd+/tJYXHU7CAP0qrN4khuMqm9T3LZ5/Kvou+8H2V0GaW2jdP7rDNc9ffDnTGZnjtVi3dwMVpE05odjwuXXIl4UNnOTgk1XfXplDGFiuDxlTXuH/CBpHGsaBGRe7IM/yqOHwHBwU3KfRFGPxyK20C66Hh9vfXt/MSZW28KVIKge5PpW5Z+GLy+ZB5scRJO5Wbpg9B7mvYrbwRHDcK8hWVR1jZBg+x9q2bPw7Y2QaQ28ZO7OMdT6/WnzWFe5534d+HtmJIppVMm1snjj8frXomnaVBpsapFGFU8sFHX2+laMcKycBFwO2Kl8pgpIXj0PWsW2yrFC4QOmOff3rNmjAxt4Petp4/MBA4qnPEF4b6VLQLQylV2mAHbk1r2oEjgdqrRxqu5sYY1btvlbJPXpU7A9TptJhMLDA75H+FdxpjKMf7uDXB6bdERqSc9cCuv0u4BVW7nk16FJnn11obLRjBNUrjDZqysm6Mr0qv5fUe1dUlc4Yqxk3lsGYkDBrMuIeuR0roJgG4xWLffLK4xXLKPU6oy1MuSZIeSdvXHpTYb9PuuwJ7YpuoQGS3yB8wNc9HeBWKudpBxXPJ2PQh7yOo+1A52dqFuAoyxZvfFYC3QMed+c8cmpFudq5aQBfrWPP3L5ToPO8xRtOBS9WBJxXPLfBdpWXcc1orqCyNgtxVqRMomgRRj0qo90OzVEL9j7805SSM7MvmbywVXqartcNGx7DtVSa8YMpXgtUUt45U5bp+lc8pXKUe5pLdDbu6j1rC8SXjTW/wC54ckAH8eaRrgBshiR+lZmpXnzlGHTkY6VMdWjhrLlufA37QF4b746+JSp4jeOANjj5UU8fQsR9RVXwqbK40u4t7u1W6AcY4wVyCTg1F8Yp3uvix4pnYbXa7YYU9Cu0YH1xn6mn/D+a2Z7q3uZfLZgCrMfvHJGB9BivoeX93ofC4u+tjN8VeBX1M6YLDLRwuIC0zA7EZhyckbsHn8MV9URfsI/DyKzgt5bvWLq5wC2oxz7Q+QDkR42AewFeEX+li9juo45MKCYyzMCQcc544/+tX2n8J/GD+JPAfhy5ni8xvsqwzMBhd6fKT69q+ezDF18OkoOx89OpPueDa1+y/4v+F/hfxRY/D2/Gt2XiS1js7rzwsN0sSF22q24KWIkYE8cH1r5Mk0240yaezu4HtbiNtr28yGNgQcY2kDGPyxX6zRzZ+RG83r+7XHfvXm3xz+B+jfFrT/PaJLDXrZGEF/Go+bjgSd2X1rz8Nm0pe7W1v1NqdeVkpbHwr8NfHXirwL4hsYPC2rXllcX9wkRjjJ8mZmITLKeDjpk8gDj2+3G8dW3gHxv4M8JzMtqmpQOj3MnASQEYJHuxI/Ec15j+xz8E01b4+Gx8U6NGBodvJM0DgFC4wqN6kfNkdMjnrxWR+2vYnS/jYbeF2VNLtohAMkbQXLgZ9PlA49BXVW5MR5dD01C1Ns9e/ap8H2Pjj4XX0VuDeazpr/brcwjdJ5iclFHXDLkY7jPNfnsjmRdo5cArhifw+tfrV8L/FOj+Pfh3p2t6DpkFmJIvLngChpI5BwyE8k4NfAP7V3wdX4U+M1u7SBo/D+ru89pIf8AllJgl4R9D8wHp9KWXV5Rf1d6nBf3rHhbyAJteRS+SBtqG9mRUR2J+7nse+P896ik4ckq0jSMFCgFmJOMYAB7kD3yMV9YfA79nZfCsNvr/iq2Y65NGGh09trpaA4wGyDlyB2OBX0VbEww9PnZtUnGCPmjTfCfirVMPp/h7VryPbv3R2jn5enYfzqrfzXVis8E1rPBNHlXjkQgr0xn059cCv0n0O5ufDOnfZLPy4hM7SyyBcu7HGWOO+OPT2rwjx94H07UPj1o0OpQNPp2uRL5ojbYGkCsrHI5wBs6eteTTzNVnrE5I4lNWaOi+DPii1+Ieu3GuLFLBDa6LBYReYNoE3O/r3OOncCuu8WfHzw18MpLZLq8+136R7Y7WxO5++NzDhMdecV57+0l9h8A+ENCsPD0UekvLe+S62g2ExJGzBmI684BPqa+ZLTSY/EHiKxS51tNISZiJ9Svg8qJweoBBPTaORyevFcccJGvJylomOnGM5Jo6r46fEfxV8ULyO6u71oNO3/ubGJyEVgchj6tkk7j07etePC2e3YKMqR/c7jtzX1hr/7MMCfAKX4gL470q5tI2LQ2SxsWlUNtVY33ZDsBnGD6H1r5qm1K1C+Sh3zZIO/g/j+Pp+Fe9hZRjHkitEei6ajselWXxqhs/wBnCP4aWOlTQajLqBu73VDKoWaLzN+xV6gH5U2kBccitP8AZvtls/ixoc81wIEnjmtwkgK7iVBC885O39K8gt7uOPyw0eGLBue2PatbS9XvtN1rStVSQmPTbqK4UJwW2OrbT7HaQfZqVenzQl0TJrSvE/R+e4mvZvLiXYmcjC/LnpgelMvNRe1uUskGJMgsuRy2OB+XNQ6TrVtJ4cXUIrzfbXCrPDJGuVfcoOBjODz09qPAejx3Woy6heTCKxtQXkkk5yR1GfUevuOK+GVB83IzzN2db4f0maGzXUJv9HtPM8tQfvSOPbvXL+H4xqGoy2jlncSMqsvHIOfwrci15NY1RLl2eLTbI/6Ja4xuJ7nHf/P1463vvs/ii9kfzHHnN8gPzjdzu475PWuh0FokaOSSPWtFmW4Y293umunbdCy/d2gY/PNWrS//ALJv2jmYhZlClf8Ab7fXg1gNJdTWUb2m15ogJUdF5BHY1Y1bxNaajpKajMzWggQyTeYuApA5IPpnvVzp2iorc1jtc8l8A+OYdZ8YeNtB1icyz2uoy+XDIOGhbKsvp2HHvXlfwP8AjJp/7PvxR1vwD4xNzJo9vcN/Yd0nK2xlbcMZ7OHXnoCG6Vz/AMH/ABdaeLviL42nurcx3d6/2i2uFxiLMrYGPUjv6Gua/au8JveW2l+K1hdwmNLvpOATlswvxj1ZOnO4Z4FejhKaVT2U+v5lQq2nZn0t8djp3x00HxIun6jCtzodmb20jlZcPKFOdzYJAYZB218O3d5AdPjmO7dIoIIwGHfBx9R+f0rkLGbVIbYpa3t5bwlSjR+e8aEEcA4I6n654r0T4ieJfCeo6T4O0bwrp0kf9kWEsV/qV0qrLdzSNGSxxwQMPg/whwF6EV7lHDqnu7nTyp6s8+n8+6826Qs8sYL464A6VatbgTQpvO1+6k9aiW4ewaSVcsGQphvfqKjhYTFfLAyOntXobbEb7Git7daXMkltMYyoKhVGAc9a3rL4i6nao0yQxQ3q4CvjcAR0JBrnW+ZcPSRglnb+HtQ4qSE4KTJL27udV1B7y8ke5uJWzJIx5Off0HQelYGtXxn1Z38sRqgCBByMjqfatzcY9zFNxHIrmrmNvtTNIMZOSKIRSZSSjsbeiX8em3UNxMDstj5xk5yFUFvxxjP/AOvNft54g+Jek+D9F057nzJ725hjaKxt1LTOCoJO0dMc/lX4dCMzW4jclon424/PPt/PNfrV+yP4MWP4S+FvGOoz3XiXxBqumQyTXWoS+ZJFkZ8mMkcKmSvrxzXzGdRtT5o73NafxH5SRzfe3r77c5oaVJIz8uFPA5z+lPWSDyI3jIckYbBpvk+ZKXiGFX+Fq+jhtqeSkZ8i/vpOMHvjj61Db291eXH2eygM80hVEjUnJZjwPx6D3OKtTvukJK7AOD61UEkkMglt3Mb4yrqxDKcYBBzwe+RzTempvGfLudJ4s8K+K/hD4k006jomo+F/ENsEv7RzKr5w2RIjxsykA/KQD/EAcZFfcHwK+PK/G7SfIvY4tO8V2UIluY04ivkBx5sYPIOeCvYkc8ivj3VPjraa38Oda0XxZZXHiXxNNGi6Vrl5Opl05VAyMkhtowT8o5yd3GDWt4g/ai8QeOPAvh7wpBpOmaCumwpb/wBoaejx3EjKuFYSDb5IA5whbJI57HlxVB4iCbR1yjCpo0fohaag0SgI3AbqQQVP9D/Suwh1aO802OWMhG/i2twSK+CPhD+2ddWd9aaP8RII5dP4gTxFArLLCQBt86MZ39yXGD/s4BI+zPBt9pmvWa3WkaraahZXMaPFLBIGjZWHysCOx9a8CphKtBrqjj9m4uxd8beIrvTfCep3FltW8tLZ7qGXPQoN2MZ9q4T9pJ9O+PP7Nln4vsl8y6t40u4zEdxjkxh0bHTnIPpTvjleyeE/h/r0l3cJFcTWrW1synG+SQFVVffnOK479ii7F7Y+KPh1qErfZLuEXkaM26NUddkigEdc/N+NaUab5rszs5JwZ8V6pYrb3WVcGSRQQOx9s1XWRGYPIpABwW7V3/xw8L/8IB4t1DS7/cqafctBDLEoAkjZvkbHr0rh7e60xsIl0sknVo05b6mvpqdnFEJuSuR39xBNp8kZO+IEbdwzjI6iuKazEe9MgqDjNd7eRW1qsfkuoZic5+6PrXn3iXURZt5Nqoa4c/eYY2j6/nXVA1gc/dStDfuyEkoeNvtxVxJo5496biwbJDdqyo5DO252LkrnjnPvxVi1maGZkGGGcc1pKJ1x00ZpwqXV0X5Xbkc1PuZYSwcHLbDuHtVVV+XlsA8mpt4mkReMgcDp9DWVtDb0N/wmzLZy5OHWZGXnvk5/SrF07NqtvKArcnAPuOTVbw1DJ9ut0cAxuTwp7gVLLn7VEcfI7bA1SWjIsZGbUkmjThCxk9ueKm1qRpIYVCZUnAz0+tTabzf3cZXavmAPj0qPWozDM0b5Pl/dweM4pDMjUm8zL7QSQATmqjZlZlYYI96u3SDapQ5H93FVLkbdjE4dua6UYvcp7m3D+VQJIGmI27cd6tqqtMnO0sSv4ioWHQ+2a36CFmdF56qQOfelk+SNAPm5xQp+XoWApzZ25HQnIo6FXLCvujVgeO+etTmAumRyNuciqlowaFwAC2e/WtPSZEjLK5+VuFWud7M2gJp1u9vNHPjckbBmbsOf1rvdehW402C5iG0s4kH1AxWXNpm2Jd20xtyM9Bx0rQ0G4a70RoGk3zRBlCnnI9a55anoU49D0v4W68sjRCQZyhUtnkMOmK90025jaPd5hbjo3XNfNHgu4XTb1Q/GTkex6V7PpOtOIVGVJJxnFeVWhrdH0GGlpY7k3DKQ20ov1qcXHzYByK5+O/EgVeSTVyK4yd3TPauGS0PUjKx0drdSRqAoBGea6KwmaRVwcAda5KxfpuYfN19hXS6ahihBJwnJxWUl2OpSVjoI5C0daVnnyxj3NYNtcfwghj3rWsb7y8q3TPpU2sDNq3UKq4bBzz71rwxoqIV6n+KsGO4wu4YANW7XUDGoXIyPU8VpFoVjQmkRlZQdxUfMvcVUkjRlwBimo6tcM2cM/Ug8mnyM/mAKnHXPatY2Hy2K6xFSCx+6c1KnluNzIrenFJhsPuHOecU7ywvRMCrHYc8aOpK89yCKpzKjqAFIPpVtWKg4OM0qw/MWXA4yKW4/hKPl+WVAO/8ApT5CV6gge1SXB8uPeDhhVNp5JMFj+VDLSEZl/hJ/GqlzsZvvZOeala4KZyOG4rNm/wBZy2V9qz3G4knzKWyQV7GpbO4AfDHIAzUBDeUwC5GOKitXDAhhyODii1yelzpbO4WFg2ecYrpdDvsybc5DcA55+leaf2q0TFT0FdJ4f1hWkVt+4D5iPSt4y5Wc8o8yPU7f94pwPTFJ5b8kqaj0q58y3iCjGRj3rQbKYz3Ga9OOqueRJ8srGLdsYcsOprDmmLvuPOea6i/tfOjOBxXMSW5TcrrtPY1jNWZ0Qs0QXUPlYOMqRg1ga1YrGrThdkYGWPXFdc0YliwR0rK1CFGt5InGVYYauWUTqi+U4OaPfGFXJVvQ1kyXT22QHJcHnmuim2Q4xgKowBWPfLFcMTjDHuK5JJHdGVtyvZ6wfO5O1e+a3IdUSRgVYf4VwmpNJbrxtZQfxqva+IGjYqwJUfxE8ZrPXoW7S1PUI9SDfKHDe4p0moNGvUY/WvPY/EjF1AeOM91PFXv+Eh8shjtz7VOrI5Ts5b7EYIYN+HNVpLrKsC3Nc5HrH2hs5Kt654qc6hkgs25qLGc7RRotdMsOPQ96z/PF1ec9QVP5GoJrh5FG1uD70tqvv3H86cfiPOq+8mfA/wASrozfE3xS5XYDqNwnP8O2QqCPrismDa0Z2DLDG3b+WBWn8VmEPxQ8Qxr0a/kYe53kn+dUNFmMN9FPgFFOQD+v419PFWgj4it8bIvBfiDVvDes3/nRfaLSRt0cV1naGBxux1PHavp/4d/tKeEPA3hWz0fxIuoaVc+bJIsggLRlGO4bTjJXnGcV823u6SZy+4ruPBGSAeetZl99p1oW6TTmdbZGji8znap5I9cfjXnV8PDE6VEeTUpxqM/QTwv8evAuoQpdaT4v0yPIGPOkVXAPXKtg13i+MND1Zc22s2t1PIuVSJwS/wBB6V+Wv/CM+Y0jpBtXHLKvJGe3tRc6ffaXcboZZrZ1GF8uQq3UcZHTrXiVMmpX92TMo4RdGfrt8E7OzuPiVdanG6yXi6e0DsH5K71IDe4OTzzg18E/tJeNk8ZfG/xbcvcKQt60EYzniMbePw9P61ufsO/F648J/GCDTL66mez1a3a3YSMW2yYBUnOcfdIz7iu91L9mXwB4m1zxRcNrerNqf26Tz/s+0raO7F1TYFJZiCGAOeCDxmsqNNYdKE9Ue9SoOdO1zxX4T/tTav8AAOPV7bS9Ot9XtL7ayQXEzRxxSDI3cA4yMAgAZxXBfFn4+eLvjlNpi+I57drTTnkntraCAIocjBLckkjJ64GD+IwPG3h+Tw34k1HTJTM5tZGijkuE8uVlznJGBjgjr616j+yT8HvD/wAXviLfWniFlubOxsC6WbSFHuZnYBWU7sjywu76yKe2a9qMaNKDrLoefWpKl8RL+xv8L7zxx4/vdd/sz7ZY6DAJYlIJDXDkhD3yFCs2D3ZT1Ga+yNN8FeINbuvntooncMyLJJzgHPOOOc9jWZ4B8P2Pw0iuvB/hNpNNsZLmbzJpDvuJpQPmLseTgcAHoABXRab4ovrezuZjI0M9kCHRW+dsZD9epHNfIZhjfrFRSSdkeY6kaktTXvPhJqa2MSoITeAlpnVj8qYwFUfWvA/2jPBeuaLb+FdffTmUaTeYe537QFZ1YAkdASoGfQ/WvYtY+OOoabpcN7plwjNEPLupAQzSHsQOwA61xHxg+IWr+NPhLrlpBNGdkf2to2iCqyIQxVefoeazw9WPMuW5c5Ul0Pn39qm7m1DUvCwcOts1m1wrONobzGHA9cY7eorw3y90cilSRjHzAgfl3H8jXsPx28Z3XjPSfAWp3QgQDS3tQ0PTIKFifT7nbpXM+B/Afifx8Wj0+0eDTISvnajMoWKMM2Dj++cZOBnGMnqM/VUpxp005MiLS2ON8KaPfeIdYg0bTZmjM8hLwyMVhhUnl2UdB7j2xmvoXXP2X/A+uaDb2un3TaLrccYU6qpLR3Mn8RliyOvT5cEDoRXq3gvwhp/wntbiwsbKO9jfEl1d3KIZpfUF8ABQegHAqxpv7Svg+HV7bR9O0q21PXJJ0slaFEMIdnChmf0BYZx+tcMsZVlPmpaGilOpJKJ8EeOvA+tfDjxJcaJrdksU8PKSRtlJo84EkZ/iU88+xzjFL4Z0vUb/AELWL2K2nfRbSSKKe52ExxyOAFXdjAJznGec19e/t3fBuSPVhqUutDUPEFtp63kNlCgSKOBG+aNU9SeQe+3k4GB2f7M/wr8PTfsrDw3dGK51rxRL9svYhgNBICNnJ7hVHP8AKvVnjVGhzS3PYjh+ePNPY8s/Zh8fLrHhKTwtqUqeZpOGthtxm3ZjhT7oQRnr0z619B6y08draabCmxZRveFPlDKp4U+nrXjHx00a3/Z3tvCzaNo1vY3L3TST+WVka7hRCGV25JySuScdq9d8G+LLH4jafp+t6ZdCSG5j80q4BaIg4KH3B4xXju9Z+1S3PG5bSaO88H6IulwSXt40ccCpgqy/MMCvO9Vm/sXxjeSwwiRWUSCLr94Dke+Sa76SRb5vspDCONlZgCfmbOQD61w/jLGlfEC1eFsu1v8Ac7Arzz69a0lFJKw3HQ73w/qEUltBPZNiRyPmbn6hh6jvXnH7TniK48F/CnW9SjlU6hdMtmqFDtV5WChgvoA2ce1dvpE63sUN+gEVzI2+VF5Vx0DAdsdB614r+0t8XPAFv49tfBfj2xvZ9ESwF601gH821nfKowCnP3Q3I6bvetadJzktLlK9j5J8A/2rZ6uzaRM8Mq2xEiowDSR55UZ6n/ORXp9r46HiLw3q/h65nkvLe9i8reybWiY9QQfftXA3U3hXwj8Q7uLw54k/tvw8Ig1pqkhVHO5RuV8KuCpGDgcgqTnNa2snTdcaO50y/t7e8ZPmkjkULLwMZA71vVpP2iaRO8kzgrof2ZcTafJEwkhJjB27eODnHvgEVzxkeG4LYAJ6/gen4nn6/jnotauJNY1GOWNHlkSMpNLnPfrnuQOKzpLNo23yKrYPQYr2acklqd3NdamXebpY0KvtyMAZ/WrekhhcFMDbjjPc96ja3ClpEHHWrUbptQ/xkDkda6eZWJuT3WSyuFA7nmkjmLE7U4NJMXmXdn5TxUcbKqhGQ7c9j6VOoFlZM7s8EDkelYGrxlNQLb87gO3Sti2Vmup5WO4sRx6gCsvVv+PjaQSWG8Mv8qcQ3GWlwZmw/bhQo5PrX6s/sB/Eyw1T4CWemTvNJd6PczWsqLCzqqlyy8464bpX5PW7DzFdmKYPHrX3/wD8Ev8A4kW2n6j4x8GTsq3V8Y9Yt3fALAARyAcdsL6/eFePmFH2kG30KjLlaZ8K2bbLWNFOSE5VgP5VJJ8/lgSFFY/MmcE0tjb+VawhwPNC9epPtSX1j9rUscowGQw6j2r0o7HnX0QXCgtISdx7DGKypH8twJAVUtkfyxxSs1zDhGO4J94N1q0trJMwOzEY/iI9a0uUo3PqX9jv4a+GvjJ8J/iZ4T1bTrefUFjE9tePCHlgVotqMhwTkSIzAe496+RdKUx2sYuEJ6JIM7sEntnPPHWvon9kn4ueHvgz4y1u78Q6hcWNjqVitsl5aoXAYOcltoPA3HntzWfdfs26n4o8TX5+Gt3D450OWTMF1bOiyxhuQroSMNnOCBg4PTpXJ7ZUrqWzPRo0JyehyeheE9H174O6zq1xIV1qwceSd53PGzrztJ5x7elcVYXl/wCErrz9F1O80uffvDWVw8eWz947SNx+ufpXoviX4eeJPhRrE+geKtOm0u/eH7QltIyONhBAYFWYYyD34x0rz/7A63sL7sRx5yx/i9O9aUqnOvI2qU7aHU638cfGXjCz0ew8U63Nqun6XcNcQi6VQ6sykZJVRu+UkDI4ya9k/Z3+LlvY/ErQdRt5f3j3K20sbcl43+Urjr1IP4V8/wBxYre3G/Gx26t6gdBRp2i31jMt5aXRtZ7dhJHLEdkkbg/Kyt2IPQ89BWdSmpJxOL2XU+vP+CmXh2wtY/C3im1liSbUJDZSwogUkqhkEjEDkgrtB7bj1r4ds/3ZMkZKs3BHevWvjp8S/FHxasfCMniWa2RbSGRRaW4KMZMgGVxk4LA8emT1zx5tbWrLNsaPZzyW6/UV2UVaCMI2i7GVdaletI6yTuR02n+L60zw7eaRa+KNKl8R2cuqaIJwt7BHKVdoTkEgj5sqSGwuM7cd66XUNGW/sQwXy3/hYD5vx9q4iaGS18xJBnb37Zzx1rsiapq5qa1BpR1/VZNE8+TRlumNp9sBWVoicgMCckjp2PGSawWy1wzoSM85NObPlYU4Hbnp24/CpLOxuNT1C3s7UBrm5mSGOJeCWZtqjPQZYgAnAye3JrW9y/U0bWcvDFG4JPc9B1xV9oUZyy52rwoz3+teja/+z744+FOnrceM/C9zpVlqEght73z4JQkgUttby5HxnBxkAZwM54rzWOYLIIydrbuenB7GuR2kbQaaNrRpGa/iYJtZckc9eDzSapFJa/Y0Ztiq25BycAknJNO8N2P9paskYIQqjuN3GcITVS+aS8lSXe5VYlUrn7pyeanyLLNvIzXktwOGZgWYdM8f0zWp8TNJ/sHxVf6ZGvFu8aAMcfK0av1Pu1YiTSNInlo22QrkjjIBzitPxdrd34t1m91rUZI5by8KGdol2oSiKgCrk4GEXPrSS1LRzjRbRx6Z3f8A16oXDFmdyPl6Y9K0mdlikz8429G6VnKXWJg3zZ4B9BXSjKWjKyH94pb7uelVvm3NI/Cg4FWvLZmTCnb1ORVWSRt2AwfsR0rdMyJ0l/eBRwuOWpVXCMBlj1GRUEcZG1ScgHPFWo93mKR/Acn3FBSC3wpfHBPXip7WZrW6SaN9pjbzORnkf/WqvENt62MMj1ZuLfa0hUgBX29exFYS1NI6M9ZWzg1uxjuIJlmDKGY474/SseztJdLvXmYkox25HpmuV8F69Np95NbJvVQNxweB/jXdtdLdQLJncG53dsVySXK7Hr05xlE09Hk3XUh45X5M9zXouhzFbWLc252647GvJ4bh7GaOYY+U/dJPevT/AA/MLyOJ4/lBUMQOorkqI9OjI6i1v3WZd54zxg11GkzCZjxuX37VxzxMzZjUsAeo/nWlpF863Xl8qGOMH1rjlHQ9WnU6He2aks8eeSuK6G2kfaELYC8GudsfmCvnJAwfatqM7VVmbHtXJJWOuL5jctY9pL9d3cVpW7bkB79ayLe+Ro1UcEe1aEcg2DDc4qDdGvHMVVUxnPv0q4q4wTjNZEdxt2nt3q4Jdy8nPfOaRaNW3l6gEA+tPlu2j43HHfvWVHMJIxn1qZZFVjz29aNzTRlxJvtDHaM5Hrip4/tG3aWOKyxcNEyMhzz2qx/bEy8bcDNaxlbcrkb2Loj243nPtSyN8vDbPrVGa6aTDM3HbFQTGRsBW49T1NXzE8ncubvMR496v689KpswiBVjgepNUruZbZNxBLt6dawrq+dsjBBx60rlqJavtS3ycsoC9qdZzC5by1PUgVgXV00wcbeqk/MP0qDwvf8A+nPBuZGxuG31qo2CyPR4YFkhKjnAxVC20t7dnBU4Y1oafeIy54H0PFaJuI5io3LnOOK00Mm7I5PVNFmjUyxfMuMt60/w/lZGB+hrsD5LQOmd2QK52Rls7jKqOv070Sit0YRqX0aO90fWBbxqgbJzkZPQY6Vux6n9owS204yOe1eXxarHJIq7uVOeMVrJrSxxE5JJGcZ5pwrNaGE6Klqd8uqxsrKJMkcfWqF9NHMucr/hXFx+II4fvHPvmqmp+L0gtZBHIHfbnaa0lVuSsNrodet8Isgt+Zrm9c1obpgD0U1wd342njbavzOTgD0qpHdXWoTEzyE9/lNc7kzpVNR1Zfur5bntt5z1zUBDTN8vC1oafYl8ZAwKkuLco3QAe1Zaic1sYeoW6yRsrHAI4xXGahp8lu3yMxUdjXe3UI+Y9/esC+jbcuQCM0uUOZo4VtaeNh5oKkHHI/WtO31yJwNu5ugz2qxeWsFwhWRACfUVz+oaHsYvby4yMlSfu+1TZIvmO1s9UKYD8fQc1uWv7wFj34Feb6JqUqt5ZO8qARkdK9E0ibzoxlMd+an0JqPQRYzkbckk9K1YU8qNSwwcY/WgW43DGKsMTGFGV6Fuehx2ohrI86q/dZ+evxP/AH3xA15pGG/7fO3HfDkD9BWZpIZZIUJyPMAxn861/GrC+8Sarcu4DHUZ9+3p99h/OsjR4i10qKjM+4Z29vU/hX1H2EfFT+JnS3dvcSXTDym2MhI+U8tnp06VveC/h1rfxJ1KHTNIsFN1Gm6QyEIAN2MknovPXn6VuW9yqpD5UWSiLtP97j9Oa+i/2W/CrXGn69rxlV7u5ZLaKGM/dVclmJHY5x+FefWbjHQ8t/Gcz4f/AGDdb1C3jfUvF2maTF1eH7MZZEA9ywUn25z1rrtP/Yb8JaJDE+q6vqXiAuQQiOIgRxydgBI+te13VpfRYWO58ydgD5XX2yc9vetPR/E8i6P9gvtLbfbAqL2AbSPY45OfrXiTrTta50J9D49+Of7NNt4T03+3/h+ZtOu9LJuJbXzmBkjUbsxgfxggNjoQPYV4p8M/2kPEvw98cRa3JqD6lE16t9fLKqD7UWRY3ZuAN2wbRjjgYAr7k8ceNNJ0q1vNQvpUgWzyJbiZt0IXGcNj34x+FfmTbB9U1kpZW0jS3FxmG2jTeWJb5VwvU9sDritMM5VabUy4VpU3oz9Fv2sP2e7X4+aLo/jHwuI7DxJNapI8MmBHdpgMAzYOHXoD7nORXx18LfEniP8AZy8V+IXu9Gey8WNZGxtZLokCz3NveQjP7wNtTHOPl4OM1+lnge4m8RfCzQ7meB7DUbO2jE1nMpEiHA3ZHUev0rjfi98F/DXxWigXXN8EyIVhvrVtkse7s3Zh04PFc6xUqV6cloZ1antPiPhXw78VfGljqzRi/k1W71a6En77LytOxxlcYAJJ5A4PoK+1bX4H+NZjZXU11Cbu4gJuLNPlKvgbgxPU578eleE+Bf2cbv4R+Lta8d+JLtLrw34KH9pQyWrbjfMuWjCgnC4O0nPXI54573wZ+1F4j+OniS3gtfFOi+Ap4rtEhs5Iy8txuHQFiAw/hxjOQa5cRRp1Fzpfccns4djkfiEL/wCFOuG21iJNNuCd7Qy4KFSCRg9+/r9a4G7+J2j3Gm39tHrsKWs0UifZm5yCD8v519deNv2YW+Nka/8ACVeL72W881YY5YIoo12DJDKmOuTnnPXvXxd8ef2RfFHwg8QXQhSbXtESRRDf28Q34bACOB39MDH0qsNSp2556D+rRkrnn3hrxVYWl9okWtlRpunPLJIrEsHyOQRn9BivXfDv7VWnaK01qPD82qWucxW6OsWz3zx1Az/+qvnO70ia28yFoiZlzvjkHKHP8Q9f55Fa3g7wrfeLvEWnaBo1t52qag4t7ZBkjLHDdf1J/wDrV7U8PSmlJ7EqkuY6j4nfFjxZ8Rri41K0vW0WFcL/AGfZy7QV9Cernkk5455p/wAA/D3gmzluNR8deLbvRJ9NuYZbDT9PjDNejIdgWClhhsjClTwTnFfa9x/wTy8IaT4Y06xOo6hN4gkRWvLxXyjt/EAp+UAc4456nJ5ri9B/YZ8Hw6tdJfa1ql9ZxNlY0kEIJGc5KAHj19vTisXiadCLpOO50Jezd0cZqv7T3hPxH8TLm+8Y2sup21pvh028XG2WBS3lrJH0YtuJ3YwO/QU34wfH6z8CfD/wFD8PriGLLS3stzFtZl4JMUicEEM4OT2Uj3qT9pX4T/CvwT/YyA3GjRx6ZcrCtj88tzcho9glJ+9wMDPYtyDXq/w4+APw3+Mn7OulaVp1tp8XiGGzWUanbJl3mC9X6FhnIKmuLlpR5WlddT3aFZ1abj0Pkn4lfG4/Hi40SZ4ZLO5sbby3t53LgyE5dlJ/gOAcE5yMcVvfA/4r/wDCptajiut02hX8gS7UjcYcjHnL6EZ59VHTvXjvjLwTq3w58YX+jatbm3vrWcx8j8crkfdIII/E0n/CVma3MdzATNyBKnr6+x9D2r2IUqTjenseJWpOEmfpvplxBcbbiCdblJgsscqnKupHBz3ri/iu0NrqPh68hHmODJBJ3OHGc8d+OK+f/wBl3403Oi+V4Q8Q3EMOlqWFjfT5AjY8+Ux6Af3enp6Z99+Jqy/8I615bL5jW0yShlwc4PzE49vTrmsJUny6nO7tHQ+D7e40+RCZPNt7qJSpI5QZBA+vX296/PD47a2PHfxq8ZarFIktv9uaC2kQ7lKRARjHryjfmfWvqj4qfF25+H/wxvZU2weItQIhtlVv9XnrIuOflU5HbP1r42/sw3Wnz6hEvkxrKqztv/jfI3DPXJzk++a2oe6jOLdibwt4RvvFWoxaTpNlNqWoSozrbxcsQCMv16DIzz39wK9E0n9krx9f6hGLrwze2lopV5oxdRQs6HI+XLjkcH6cdaP2cfDviCb4raQdGMT3z204i3T+WrKQMjP5cHrj2zX1FqEXjPSriMeJ31C1t1wrMBu68D50JX9c1zYrGSoStHUn2j6I+QfiB8OvEfwm1hNI13TfsMjxCW1milEkVxGSRlH7kYwyn5h1IwQTzsafaJNzOFbBbGOv04r7xuvDOifFjwreeG9b1kpEcPY+c+JY5AMq6MeQB/F6g4r4Ta1k066uLKckzW8kkbsMANtYqT+Y6VthsV7dHRFtxuyiuHUgquOnSqV//o+ZP73C56Ve2mFiQBtpk1tFdxurDO4V6Udw5jNtdRXhM/J1FaB+VdxGVHI96yxZMnyhicDaOMVHIbmPG92KE447V0bm720LKyT+c7QymJX55GfwqK60mX7Oro4kbvRHfN9lUGMnA5/OtKzxLbSS/lRexKOb+yXisfNt2KdRgZrsvAPihPh/4ksfEUrPDFa70l+eRNyujKASnzbdzKcAdVXtzWb/AGssWFG5j1PPFSQXUV2hErMEYnChtp9eCOlZyXNGzGSQxt5KoD0HFSrIVTMigIRnp1+lPjtws21sZwSck967v4Q/BnXfi54kTRtKtyYYlWe8mDACGLdjdn3wQB6g+lctSqqcbnnL3noV/APwT8S/F5tRTwtpaXNzZRedcyzSbEHXagODljg44x64rjbTWrbRLq1mvLeSeKOdDcWrrtcxhsOhU/xHlcHoRzX6v+A/hn4d+FfhCS28HWn2KW3T/SElGZLhgOsv949efyr4P+P/AMDE8YfHBx4YEsF9rDfa5rZ8BFY4DOPQcZP4dzXnU8XGTcKh1UVzVlBh8RPgV4d8aePNFPwYl/tfRtatVll0+MkjT51OH3Mc7UIbkfwlDgc8fXPwe+Hvhv8AY8+HdzrXifUbeTWJF33MiHIj4zsQd8Hvjk8AVo/s16L4I+H1j/wg/hu/0+78Q2sAudVmgkV5ZWJwdzDJG08YJ4xivh/9pX4neIvFnxY8S6D4st3t7XT7hkt7FjjyFHKuCOGDAhu+M9jxXM3PFVLdEfXy9nh4W/pnTfHL4nS/tDeJ08aNZjTdCtUfS7JpCN0uG3MzDnj5RjkHr6188XlxH9uCrF+63beD1weDVy+WQW8KxXjTWa/KkW8Ns5yRt6A59KyWkVrhWG6QRqWdYxkkDv8A5/xr26SVNctzxKnvyukXbpTHzkgD5uuaiXWLm4doRtaNhlcj0/pTbiRJrPzVfdCRncrZ4qvDCEIIOBjaM9RXbH3lc4K0pR0RtTK1yq78SMxX75zkjv8AlVDULMrO8sJKsOMdic/zqOGZ7G8wQ2zgMO3PStqSHJcMA+R26ZrVLocl3uyxpDLeQs7DYpHIBwQRXF+NtNMcHnx/ORICxAxlcc5FdABJp88QVf3EvBU9RTPEFkJNLkiRlBk+Qlm7etXHRkqTueXcuARjbjNQS+aykJw+cjHTPqD2IqwYf3YbdjB7e1SxqeBj5ycA9q3Vkdiaaueu+Jv2hPGfxNuLhta1eW3tJ7S3gnsIJS1tMYs4k2PnY2Tn5cZI5zXnj+W185LbxnzCyn3/AMmqFmqveIg5iQH5u/0rXs7aOTBdDLEhAbHBPFYSsnojopqyN/QVa31KREG6Vom+q8H+eay7FJb67ujE4T5SfLbucVN4Xjkv7yafI3bstIxwQAeP0ptldR/2tPFBuEkkx34PB4xms7mpYeQLHGuSgUHGBVOaSJINgyPanapOI4oFD+Wqs25QevPHFVY5FuCcNgngrjvQF9SN1D25OGUHjOfeqEjBVbHUnI9hWhcbEsUEbZyx3A1Qfy1UdxWqJe5VVS0m3H3jjIFR3EaxTOgXAUkZqxyGA71BeOy3DBvu5xWu5nIhVduDnn2qwrbo9g5yeeKqz5WMuvpmpbcAYBO4n3707EonhYR3aEjhW55FXL1cXEybcH7317/yqnJtUso6+uKu6pN5epQTdBG8e73BHNJllK6mezvYLvA7KQK7LTtWbULVWUDO4KwHYeuK5DVYWeGRU+ZcjaWqjp+pTadMHjYxKfvrnrSlHmVy4VHB2PUY1Zmw+Svrnmu38C6pLHdG1aQhcfK3crXnuj65balEjl/KbADLnjPtXU20z2rRXESkunzjnjH/AOqvPqRdj18PU1uez2L7shXHTBx2q79jZTGynlTu3CsDwnqUV9DHcx8rIvzL6H0rsYU86IHHJXPy15sux9DRalqb3h+6eS3w3G07c+vvXS27DylZuW9TXEabJJZ3IBI2ng/411cMxT5f4cVzSWp2wdzZhbLDgDn0rRhLKzbsEA8c9q5+G7WNzkknHSrsM+9hufGeetYNWOmLN/zP3YGamjkOCN3BrLjugrBR8w9c1ZW8RmATBPepNUai7WHyk5A5FR+YVYHPeqkkhXlWwe9M+0nbgnpQaxNQXQLFQak81QwJ5B4HPWsiO+TcMZLH2pftY3EZwR0pGljfkuEjjOcYFQf2grL8oUjuWOKxpLsfxNwRgVQkuCseOp9zxWl3YOU1L6+idiGHIPY81mvIJ5GIHHaqDXW5Sx456U37d5fK9/emr9SJStsWrq3DEhjhTz71xt5cT6Bqgu1Y+Uhy3sveulm1naCCu/tn2rntYvEljZWAYkdD3FbxZiptHQaf4vja3/dyABjkKDzitiHxhG2SspIB5WvCrue4sbstEcr0VQeKyr/xXqMKkRxwrIOmN2MU+V30NHUhb3j6KXx7bQMFd8EHHU8965rW/iKt0v7s4J6Bu1eAza1qci8XZjOeRGeKct5dSABrp2/Gq5WlqzmdanfRHqy/EDUIWGB5qA5wDyPauk0v4kT3iqpDA+4x+FeIx72X/Wtkc/erpNHmaNQXkyAM7j1B9KhRD2i7HpN54ol3Lkbixz16Un9vTXGVVQxIxyeTXN2cj3ZB+/tGd3t0rq9F0Z4yskkbe+OmTSD2jsPsdPeUB5QwJxXV6fY+WQoXLdTUdnbp8uQVAPA61qw/u045zxg0GLk5Fm2jEfQUXKdWC5I7U5WEf1xyPSoZpFzy5yOuKCLFC5G+RgQOOKwLtQ0p4wM/0rfvJDCzuemB82OPSuVvNQVXLSfLwfYUhqWtjIurUiYr94FQQaqzae0q88MpzWrC327c0fOSVH41dXTd9uze3NYyl0NLa2OC0vT2TUmjJIyTlhyOa9M0e1aGE7+hIx9KxdK0UTXW/bjB4Lda7JY1jUE8CsS62iSG+XjaSMD1qLUJPJtruYDKxwswHr8ualJDHbnFcf8AFrXm8P8Aw28S30XMsNnJtwcE5UjH15rooq81Y8qu7U2z4ZvWN0bkvuHmSvL1zncxapfDCNNPqUaHEjw7yw6jBGcGq8bOtrHg5Ux4LDrmrOlBVa5IZgXUrx3yMYr6SXwWPjZbn1N4b+CN340sdOnWW20k3NnHLKysZFBYY6jjnHY4r3TwH4O8QeGdNfRtJ1PTdMmVfmlEBPn9hg5wMD8Sea+W/gh481DQbG3t7Wb5Le3UNbsABgE7sHp06c8Gvrz4Y6snjuxSe1VkuWT9/AzHKMD0HrnFfPVpS5rNnG48z2NK00XxL4etZQ9xbzy5y9wQWZxgbVX29arQa1rOm3F3b3CQPcsyynzPuHIxnjtgfnWvq3i7/hH71LS8eJlVODI+G46/riuSuL37befaVuYrgOuTJGflHOMfh6V5/Nd2iaRjbRHL+NvDOh+MvD2uw6/Ascd/Cx80ceQwGVZAc4IOT3wa+d9O0/wH8OdcstT8J6TJqeq2MqywalfSFoxIo+8i5x+HrzXbfHj4pWttqkvhyysrqW8iYJfzhgFYEBgoB6jkV47DrFwsYWKKNF7mReQc9K7sPSk47nlVJSUmmevz/tLfEdmubmPUrWNLkBH/ANGUKV54/U89c/lVCP8AaN+Ic2+N7+CaKOPZ5csalSOmBgZ/GvNo5NSulKyRsydP3eAvNaNro8ssWUufLnYf6mQYz+VbSwcJL3jNVGzp/EHxy8X69pVxpV7JbxaZfQPb3VnFGMSq3BH+ea8F17QTpFyNkzPbf8spwmCmDnB9CODjPuAK9otPh7qupW4uZofsttHhjdTuFjAPcA5JHuB+NXjZeAtBtJbbWLs+JZZBuFnbgeSQeM8HGRjqxyO1QqcKKtEuNRpnc/sU/HTxP4n8WWXgnV757yCzhlvIrqaQyu6LtAQsckgFs5zX3Bo+mnWPEDXV0yyR28hkYHbgMBgcev8AKvy6+GPhrV/DfjaPVrFrm10u5E0UGoW4KpJjBMW/GCQo5A5JFfVvwB0LW/HHim5tr3Xr9dHVNk4W4IaXjOAwOe/61x8kfaKSR6EanMrI4P4zfAfTfjl+05f6dod5HpMV7jzLuGEMgdE+Ztp6noK779kH9k5/hL8VPEOreIJI7y80wm101wmIySMmUDsdpA9uQOtXL74f638FPiNP4ttrFzoOnTGRC0m7MTZUgj7xIJJ/CvcPBviJtes2vF2l55GaQZOV56c81XtHF8jLR2HiC9Cyz+W+9oo98jDP4KPrXikt8bOe7WRud23rgDPX617Deaaq6PeXLSLEThRk/dHqfevBvE0xmtbj95vJkJ35znmvJx15SUmY1npc8G/ar+H914o+G974qsp/NbwypmuLUEEvC5AkfP8AsDJxXzn+z/8AHzWPgr4wUqs91pN0rI1nDIQ3mHiN1GcE5zxyTn1r7iGgxy+KbTQdeZofDXiHw9dreNJjyywZNobPAIDMRn0xXzh4X+DPh/4b3NzqdhfPrTedJbw3VwoDIq/xLgDlh1Pv9SfRw9alDDclRXbN41Pq9PmTG/tMfFDS/idceHJbrTpLLVbWxk+1xyxBJNzshUA9yNrcnoOK8IfwtC0KyCUsT+8Kr045Ar1L41aFJD4m0+5/1lteaejI4HHys25frkr+dcIQYGSMnG4hNz+/GPr0x616WC0p+6zllipVndljw7os+seFbacx7oDJ5Uzr2k6jj1+v+Fd5a/tJarofgFfBt/YQPbyK8DX6Ss0xTdlflIxx0Bz09K5zwdo+q+Hby70rUIbnT7iaPf8AYrhCoYEny5AO4JBAYcHGBXluuzT3F7KxTKxuyOUGec85H1ruVNTuy4pyR0Xj/wAaav4+1KO5v3mntbWMR2sUuH8nOC31BI5J596raekGqsrNH9mTaoK5yCwGN2DWVpeu2lkp+1mRJ1OOOmOgyOw/Cui0q0u7qB54LOWRZMgNgAL359KfKorQnkbdj6E/Yt0G11j43COdw8cOmTj5SAytujCkY6Yy3PqeOK+5pPC9/ChjkuhK395hvDDPOQf6V8df8E4/Cr2vxK8Ratrkc3ltYKlusiEruJ+YkdeFC4PTk19lfGbxvpPhfwLrT6Ush1loGFqkUblw5GAR9K8PEuFm5M6adDVXPK/jWngv4Y6fd6xrFtaNNt320MB8uaSYDgAA8jPPP8q/N/UZP7QvbrUCuJLmR7h4xztyxYD9a7zxrceJfFF/53iBNXvn3blkkgkYZH1GAf8APpjhV8y2vJEZNpXruG0EY6AGtMGoQXPcdWN9kYpk/dggZPpinRRnkkZYDOKtp5LSOcqdxwOQDz7U2SIQ8A45zk9/avZ51LY5OXlM9rfLyYP3uTUUmmvqG5N/lFQArDnBJ61buJJI22Z+8e1LCsksh8s8Yw34dK3po0ic28Umk30sQxIy/I248EnpUsWqPHazrtRc8Ko5xWxquijUI0cMBKsZTk8k54rnkxbXASUbHzjbIMGtnZmhWWeNZSAfmyflrW0mDzrhy3RBke2apajYxvmYDYQQHVTgH3q7oOPs0zB8tgAKAc/eola1mK1zqvJPJZvvHkKcg19U/sR/G7Q/A+q3/hPW9PZf7Uulls9QgyXEpQL5bAcgfICMdcnIzjPy7cR7bogfdHAzVrRdTk0fVbTUIS0d1ayLLDIhxtdW3Kc+tePiI81O55dKdnZn6z65ELyx+12E7TpF8xK8SrnqCvf8a+Ef21JNU8NNouq6RezabOzSWk0tpK0UhVxkDKkHHy84OR7V9g/D7xvZ/GD4e2evadcrY+IrVAl9bbgsm9eCGHcMMEdeor5y/bCsofEnww1GW5kEWoafcwzrGq/fw+G+nBzXgx93FQnIVWThVVjhf2IfCM9np2s+LpZHimuGOn6eqtynlljNKMHjLEJjgZjJGQePe/i58JfCnxkt9Ku9aslt9V8pVj1WFtsmFODG57r3wenXFeW/swxy2fwS0UI4UNLc3G5DtcCSViefXmvbNFjXVtHvNKkkaOeBTd2rcYyMBge+ORx71ljK0lipSpl1cVUlU32OO8L/ALOPw2a8msrzw9G01unmNNKT50q92znn6jpXtXwp+DHw28M+fPomi2sVyeHEqAsRnod3Uc15lerc6hZQo1zm8hO6CcZXJ9GxglfpiqHwv+KWseMPE+uaH4hsP7D8Q6LCZ5GtEK2Zt8nbMrnnB6jOM4I4KsBdOrVnrvY+owOKp4inyrRny/8Ato/DnRPhn+0DqGk+Hrf7Hp19p8OqS2qnMaSyyTBtvoCY8kdAc/SvFpLYriQodmC+cehxXpfxIutc1TxFruvfEfTNQl1nXbdR4ev5goSOOKSQ4XBwVKSLhTyeSfWuGtbGaWAzMNqhN+SeT2/KvtKWyPHxfuzsitJZ+ZDHL2PfqDTVuXTnZ+7HUA81LpsgNuYmIKocBc/rTzam3BuW+WE/Lub7vpjPQV0banDrewhWK5iDxSBSem4fNUGoTAaLMZX2tCMuzDAA7Vzn21bS6uFtbhJ8vtzu6d898fzpF0rxR46kls9D0jUdXaBA9xFp9q9w4QnG5kQMeueRxwfSqjI19izkmk3kGPknORjHerKxtaqSwzPINoXPAU9fxqMx/Y557e6SW1u7ZvLktrhSk27ONu087vUVatnN1J80ZAA+bcOR3/lWsm0bwjoSaKpkvRztBBzkdPc+lbcc0axtH1ix2HU+tUbe7jJhtoFUhmw7gfe/+tUtwjvaysCwG0qpzxuAHArA6o6F/wAO28tvp926r5MkinC98Buv61HlreaZ05kJJ6ZwCa1YWP8AZ11IBtjtbVDuPVixAAH5VjLGRcNnKqzAnJ9ulTzXNLFfU/Ke3Vh0Gfm/+t2osflR5cZKnP41NJpr3NnZhFyXkkDHttzV26sobKOPaeH+9z29aq+gtTHuAi24OeWJxzVYqZI1AIK/xVfkMccZwm7sD6VR3qpddvPbmrXmJogZvLkI7ZxmopnElwWzkYFOlU+mPWmsFTHdT3rWLM2V2Gcg52Yx05psIWNlfkHfnb+FTx4WY7cyDvVcyNG0x2nGflyOlW2Z9S+vTCjd3J/EVoeKtj3V+EwigFox1IworNsJt20kbPm3f/WrYuGWTUJ2wGSV9uOzAjmpuaWKfy3WjlouTs2lTyRj0rIuoljaOTG8Odp45HvW1of7lpYUClWztT6Hp+NUbiHy1lgkQhhkbf4s54pKWoMyvngxIJGRgckK3U1fTxRqixlEupEUj7rNmqDKH/dkZxzuqLy03fJu59RWnKnuZ87Wx9C/BXxtJqVitrLKpvYU3KG4+Xvj1r3DSr7zNu3cRjn0Oe9fFPgfXH8Ma1bXcT7iGwytyFU/e6d6+tfC+tJfW8VxFJ5kUv3ex/KvGxNNRldH1OX1+aKTPQHXfGHUbgPatSzuxJCNxOetZum3AurfcvRBz71aWPbyOO2K8yW59FG1i7LcrE2/dwe/pTodQDf6tt4Xq1ZspYK424xzwetUIrgwzAg8twATWdrmidjurW8DRBg/H0NW47yFQWLYOMcVxlvq5jLBgc/U1fTUk2bsnb/dBrFxN4yTOnt7zdna5Yd81O0yhiVJPrXJ22qeZIMFiM/hWguoBQSPvexqeWxumbTXCxspxgUk12mBnhuw9axW1I4DMM1Sm1QvMSTgn7oFWoo1Ul1Oha8DME3Zb6jiopZjtx2rnWuzu278+1SwyPI2BIcH9KdrEzkuhpZ3AAn7xq1bWIKln556dKrW6hY1cn5s9Kvw3TZAIyKd7HJOXYR9Oi8t8DBbjb6Vj6howfGBubpXUxqs2CRnFK0JyCy8HgYHNNbmKqNHlGr6C9uzsY2JXpx1rm7rSWYN8qhTwRzkV7fqWmpNCQyE7T+NcpqmirJIGWJUJOSVrVMXMpHjQ0cLMxyV29V9av2+j+dtYcLjPSu0l0FRKcqOepI5q1baLCsgIG0AYGKUpSexSpq5zVj4eyN7njoM8ZrdsNBM+FPyoCMg963bXTVVgWAPpjrV+KxMbBgvIPYUk3bU6YxS3E0nSo7D5Cu446+prr7VRHCoBOFGcex7VlW9qFwz89/pVuOZYVZWbBxVpdypR5tjWjxGwYHJz6Vo2sioxLdcda5x9etrf7zdBxj9Kh/tK91Bi1rEGiVclj0H1pNxRg4pK7OrbDNnqOrEGuf8T+NtG8JW4uNW1G2sk2M6rI2CyjrgdTivI/2gviFrvw9+H9xqttfLa3Uki26EJ0LHqPfnr7GvkfwXpOsfEPWJtV1a7uNQRnBee4bzFkbspBzz6dAK6adHmjzM8+VeMp+zjqfTniv9qnT766NroGm3V233VupSEVSD0wTyPQ4rpvCNr4g8VQW1/q8Ysbeb5/IPJ2jvj1rjvhb8HLfUdTgXmURIJZQwJU84wAeK+nbPR1s4UjTBVcL0zwB0HtWcoxR1pcmjMy18OwQWaosnKjAYjGf/AK9F5ajyWRRtbt710kUKLHtVcL0ArEupPMuCAPl6D1rz6mjCN27mfZ2whkyRtbsDV+TDKF7U6a3WNd/THrVVpD8xBAB6Vklcqcrjt67uB7Zrxz9qDXBYfDeayVd0uoXEcAZD0wcnP4DFet+ZiMg/eAOcV8nftYeIm1LW9LsIZSsNsGcr93kkDJPfHP0r08HT5qiPDx1TlptHkmk7Fj+zM2WVt2MZAXFS2c6Q3bKfuEZrOtJC9zCyDCyt5e4fmc1d8pvtTEY6gj8uRX0E1pY+VT1OnsfGN34f0PdaBFmcMrsxHCA9Meuc175+z18RvFF1/Y+laXe21okV4i/aplIyWIL7m9ByB+VfOkPhH+37FAbrytzZ5XI3A/yru/AFnqvgm1awFyrWoYSCaFNrq3c+h7V8/jqSqRfLua0Jx5+Vn39rMPhLxd451Twnr7xpqtrpf9qy3Jm8v5Wyq7RnhQVOc+o614T8BfG1p450O7toR5d1ZXJQNI37qYMAwwfXn8ua+cfjBouueN5pPFUN9PfXESJbzBhztXO0LgdBvPHTk16N+x7oWr6Loeq6nq0I03w9qt3HBZiQ/PLcrkM6j+5gBc99p6DBPFSw6jC9y6kbOyGftUahaeGfG+m3MltlrqzLyH7rZViAP1xXmFn49sZtIjnS0ia5V2WSKYEhE/hII9a9C/biRf7a8MOzLj7JcbnHO7DIQRn0wfzryTxb8Kbr4b6d4XF/qNvcP4gsX1GK2gUjyI12cO275yd4IwB0PpXpUIvl0PHrRV7ssSfFCS3V1jtYY/m6ckDiqOpePNW1CATJP9leI5V4OPzHSuVWMyTFBGQN/J6/Q1fh/ct5eA6sMEjp9a6n70bs5eVLQlk8Vavqxia+1q+umRflWWYmIc9An3QPYAVY/tTbDudgrdSwUdugHvWHcYsGkV18rYNxfGBj1/z617h+z58Bl8aa5Hf+LUms9Kt3Drp8yNFJc5UENk9Ez+ZrzcQ4xi+YfLc+nPhjp+k33wj0rwzqDeTbX1ikyzyR7Skx+YMD1J3Hr+tet/BHwTJ4M8I3rXk8bX8krkNCeAAc8epPUVDDZW0OlLbRWkYso9vloFyqADAwO2Kgk1G9t7R1UFlgwzTLjIXP8XH614ntZQlds3guUueM9dm8bTHw9IzS2LRg3qgkDBPK56/r1rU8N2K+H7i/+wMXS4IdYsDbFhQvAFebReKJ7fXZL5SG065Hkpt64TnP4tk+4r1XwxHlIL2c4aTBijUfe+vtWNOcq09NzoUky78RBc6f4ZsYfM2mRjI2GzuxyfqK4e38Mpql9aXseJLKZd10gOFRsf1/Guj8cM+vaymlSOqRxw7ogT94nt+VRana/wBj+HGs7UlHRd8snfPcCuipT55t9ETKPMzwz4xPe+ItSWOa7Kaci+XbwxDG1QTkEjqc/wCe9eatZ22lXSxxI32dDuZckgt6nqPWvQPFUkenTXUkkTXMZ/fMc8ockHGOPeuF0NV8Va9HZPKYrCNfOudnaMHhQR/E/QfQ1wcrb1PLleUr3Oc+MfhW9n8E6N4xciGyin+yQxcbtjE4lyDgcgAe2a+etWlWaMqQyD5gzgDK+/sf5V9q/FuzbxD8HfFNnHEvl2cMd5bWsSj5REQwCgf7tfEuqXUcazGQsse75lxzivpsCoqNi47po9E1T4i618eL651q406102PS9Ljsd9nIedu/BLEDklvugEL2JzXiXkz6bMotmV4osAktwuTyDXu/w90OPQ/BflSJ5X9on7RJGyAlcjCg/hXkPxE0UeG9Smnt98MV0xaSJV+WM44yMd+tepBrm0O+nK6Ob16QXEryS5Qum3oAwGCB+PPSvrD4K/EDw14/8O6bp948Nl4qt7RYrmCRfLE+0Y8xTjaw9uor5r8O28a7Zr2wiv8AIKeTP0VTzke9Qa1ptrdzmfTY2tGLACJW5jbjBXHbgH1zVVVzrlLP1i/Z58Gr4T0+612WNYDeqBFG/H7vGQSf/r16400OofPcJFLu+bkZ/Kvyn8I/tSfGGa70qNFbxRY+H7cSXNjHZMfMhAKhrgxgnPGAQoxg/K1epa3/AMFFrq4j0iTQPCS6Ptj3X8ElyJYp2OMLC6ZIHDcuoJyOOuPCrYKdrpXR1Rm9LH3/APZbfG5beKRM/wAajco9R71m6l4R8MeI4Wj1DQtPuVY4Ikt1Lc9etfP/AMN/2yvCvjSxgbVpf+EXvXwohvGG1zn+FhwRXb6l+0Z8PtIR5dT8VadBgEp5cwdiPopNcbptOyRopKW5zXjv9hv4ceKFnuNKS48Oag3zLJavuiJ9TGcr1r5X+Jn7GPj3wQ7SWwh1qybJSS2BBAz6YwD+le+fEH/goF4M8MxiLw1G3iWZkOZt3kxQt2DbuT+ANeD3/wC3l8QtYuLpfO02z0m4ba222837OpU8Btw5+oPNdcIVE1ZGE3DqeFeIvCWt+GNUGn6zp0+lXewSGO5A4Uk4OVJGDg9D9cVW0qzmmlkABjReSzU/WPHV3rMyzalqdzqLoBtkvJnkY9SMknI6npjqawJPF1zbhlhCoj4X5Bw2P/rV7UZS5djk5oxOxutKVNPkuJJ/3qMAUHQKRx+Zrir+1W6mabzIy+MEAjJ5xXSeHVv9Qmjm1RdtnnIj6Hjv/u5r2rwH8MdN16FpLnwvp6220xB7qMmRT13YPAGPetY8y3I9tE+aoY1QKHO9W4ZR644HPQ/WrNhp6IxixIsb9ZBke4HWvoPXvAvwvtgtqdHEJYE/aNObY/HG0EHJ+nSuc/4UfZXlusvh7W9QiG/GzV4FAxjOB5ePzPpWrktR+2VtDCsvJ1Im6tAJUnTeGHI/Cs29szaTJlgDyQx+nT61WtbqXwXcT30UTto7SYnVeVgzxx+PNdff6ONW02HUoCJbN03RyIcr155rnlHlPJkrao93/Y512O88TXuiPMEN/ZCWMSAgs0R52kd8N0PXHtW/+1Vdr/wrnWbW5iX7SrKouG+V2G4ZDdN2K8N+AerJoXxA0SS7DNaw3WNxyCoZdp5PHUg474969X/a91OGy8DTrvMsVzMqwyKuVEu4fKSegIB49q8GtQ5asbdxS5nOKJ/gwv2X4P8AgacADzrDPToMkEY4ye9ek6ffHR7211XG6GKQFwD95O4P1BNcD8CZJ/EH7Mfh57aKJm0+8urEBQTIESZ1XGf4sAEj3zx0rupI4IbUwXfmLbY8tQOpbHQ/yzXl4yDp12TW9ypdmr4stk0vVpGtZvOhuFE0cbcja3QjHpXnXxkm8Rap8JfE9r4TlW01WaEfam3FZp7dCS0McgG4E/Ngcck8jOa76G6TXvh7HMLnfdaXK9pK2Aflz8gPpwR+faudtx9nkj+bJVQS0f3WHdf8+lFGp7GcZ9BU5ulVU4nxQ/xc1v4ieGbTSfEtzc60ljtbTHkSNWtjt27VCKNw28fNk+9R3FjeWP2m11CzvLG4gRXaC8UpLtY8HBHQnP5V95/ssfst6A3xH1Xxnd2dvdab5hl0+1kQERyEhmJ9MPkrjGAB6V1H7f3wSm+I+g6frXhqzF74s04NC9nCvz3do3LIBkAupGV3Zx8wGNxNfT4fFKrepF2R9PUo80Y21lufmZbzBmY+XsJB5/Gur+HrWd9428M2OrR+fplxqttDcwsxw0RlXeOOxXIrkyssTMk8bxXEbEPHN8rKVJUqwPRsg5+hzgjFXrZpbG4sr6LIkikSVQPlO5WyPTnIruqT5oNo8yPxan0T/wAFEvhdofw71/wLe+HtKs9L0ua1msTBZwiPDLskjOAOeFcZ6jPvXy54W8U+JPAfiCz1vwtrN1ouow/L9otJAPk7qykFWH+yQRkDjgV9t/8ABQiFte+GHgW/w6TR6mgO3nIkgZTj3yRivg+5VreRoRGVIOCzd+M/L2rSjNSppo64NNOx+hvwH8eab+2Bo9xpfjbw1os06N9nuLyCyH71dgJk3NkxNngAMSAAc84Fb9rn9hHwV4T+Cd14k+H2iPbazpLrcXXks7vdW3IkGDnBUfMMd1HavMv+Cb/jrTdG8Y+IvD+rammnW+qWkc0XnkKjvGzZ5P8AFhl+oHtX2N8RP2lfBPhtbnwxNrUGqXl9G1stnp/+kN84IAOM4H1r5qVerhsVJvWLOqVO6SifjdoaCe+iZVURJ87YPAGOOvJ7VqNZuskKn+M+YFJyAMdx2NfeXwV/4JorqDSX/iq9WGwmbMFpa5WUR7iV3t06YGBjpX1Bpn7CPwk0+zhgPh2OZo12mSRyWPJ68+9ez9blV1pxuvM6fYxpq1SWp+SGm2putMv7WPci3KpHx8zjYQenYZNVbnTfsrRIV3bSD0PTofpX6qePf2E/hxJaquk29xpMzkAPBMcfeBGQc8A9a+ZfGP7D0/8AwtTVtL0LWoY9Ps7UOv2uMNK0zDIAC4yo7knjPephiHFtTVhxoqesGfKRiEccaFdhxyueMH6VT1aRPs21VUsvOMjO0cEV2fi7wbe+D/EV3o+oqiXVqcHyTlGU9x79j75FZeuaHp0PhuO8sroz3nls80JwfKYHAXI613xkpWaMnFo4Zom2tuGwjnGO9Y8isCWPUt0raMbbZeSSvJrJbLFsjr0zXUZMjvGLbdo6r81Q7R0B+X0qeZiFwvrnd/SoI/mbGAe3/wBeqirmdyNs7sEZP1xUarmRlztx2z2p5/1gBIz2z3pLhSZI8cKUOfY5rW/Qza6lvR0V9RjUL8rN834cirKyPLIrbctvzx9arWbmGaR+Bhc7sdDVyMmNgwTORkCoehpHYbc7LG4hlTKuCx/rT/EEO66aVS2JAsgc9T7/AEqe6hFxDbzKMryD7VLd7bnRIj9ySJlQsRzjGfyqo6kuPU5AqJpOWKlepHQ5qFsKIxs4HfNWbxm3YYc7s/L6VWc5XBBHPpWhAkjFI2ZmKrkAd8c88H2r3v4J+LDdWZ00uPNQ5h3cbvXmvBFHzYc5HXFbfg/WH0jXIJPOkGTgbeACTnd9MVhWp88TrwtV0Z3PuDw/fbpNhO18/IuMfXNdN/EPpmvMfCfiCPU7O1vUbcJFVi2fXvXfQ3mxhht4YV89OHKz7mjLmimaJh3x9az7i02yqQOp6kVr27eZEMcGjh1O4DOMCuVnTuYAmMbbWOSDzUhuArYyVTvgU++tVW6kOOCM1DIqsqdgKAsWorgblAOMehqwl4qyEbwDisRoyrcHI9qa0iqpyefWjl6m0ZG3Jq0eNu75vpVeS/DKCn3qwmuAjnHzM3SrFqz5K4wMZ+Wm/IvmNiOdV+bG3PHzHmtO1nCxjGD3rn4boJuG0DsG64qzHfIsioufvfnUq/UhyOojz1HOetalixblxt44H9awLa9EK/ezitS1vTKVcDgnAyOtFrmDdzoLFDGwYtnd0rX3bl4H4VgRagCoZXUY9+lWf7Ztx8xmXOPXjNGxNi7dRjafl61j6hYB0LAcewqpqXiaG3tw32uNRu+8D2rCm+IFuuY1kE5YEELyR71Vy1F7jr61HUjBH4cVDFGqu2DlKyNT8ZShRIYMR52gEEn6/SoNP1i/1UqbS2Z2Zsfdxn6VdjpjZatnTQzCFwV/HNaNvqUC5wefpWFa6HrmprtS0aJxyd5xg1LZ+FdXk1pbGciJ+pweCMZyPaktCvbU+5sT695eTHhs8bccn2qf+zdUvEjd7V44pGG124698V3Xg/wLYWMyXDjzpx92SQZx+FdXr9tEunylQEVFyD6Y561ryvlujy6mZQU+WKOb0LwLYw6eBLCs8pGWlbnk+npiq1vpcejrJEFCIrFtzDrjufWu4spo/wCzVwQOAB715L4s8YXK+LrvS7O2861ihG+5DcK55K+/4VEaaerOKk62JqOK2Pln4kNqvx21210owy6fo2n3MkkzPksxyV3jA+9jovQAkmvXPCfw7ttD0mK3sII7dduxIggJPbtXX6F4Ngs0yMB/4uOTmvQND0BFkSYQ8rj5cdPwrtd7W6Htwowwyu9yv4L8IpoWmFfLxO5yz4OWI7H2Fb8NtJBNub16VsOo3DA2AL0FVLhR97P3QeK4ZybMHPmdzNvmSElx8ueBXN8tdNj6VuXxDYyc1meT5LMwHHcmuKpqaxIbrakY3c8dKy/OHmAcYUH5as3kjNMFJ+X0qmzKqnHL5BPriqgnoZzdinrWpRaZY3V3cSCK3giaSTJwDheK+DvF2vT+KNb1HU3HySzeZGvZQBgKPyyfWvob9pP4gDR/DP8AYNvIXvNQVzJs52oCAc+9fNFqClrIpHCxkhGPQ+lfRYOlyxufIZhV558qK9jOkbZydoIOSa3rgL9sfCbVwuMD2rmrVXWNV+VsjpiuphYtHHI7APs59q65Hlrc6DwrdC3hm3KT/dqfXfiPcaTr1rYRadHdQuiqZGkIO5jz2Paq3h0srOp+ZWUtt9Oa1msYkuo5riJC3TkZzzkV5s7cxwVZctQufDf4uXk3imPRbvTo10i5d4/KIIKyE4yWP4gjFfTcms6e19baPut7X+zFWW1tw4VDjgge/PUdMCvlS7mis7pLyeMLBb3C3EhjiG4+4ODyRn612HxC+NXw78SaLBbeHNHfRnspo3tLvYYpDkfvN/fnpzn1rza1GTacD0cPXVuWRm/tfXcviTx5p0dlE88Om2Xkgqc/NIwYqcZ7KK858G21xrGjvBczTzTwuIYo7mViY1PRBu6L6DHFddqWsWmu30V0uoRl3IT7PbnDcDgj1JqfT7O1t5ZpYk2ySEMz5yTXZT5ow5bnHiZQvoZEngvUPD9rLfXUEa7QQp3h2PHQVneDPh34k8ZXEkllol5NZxqQ823bHvPA+c8N17fpXoela7Bp90rajpkOs2q8C3umIUHswx3Feu+FP2mtHtV0/T9X0pdP03zcSrbj92ARxwMfj0rOcqiWhzJxbMvw7+zRF4H8RWt94kms9Subq0DQRxRFYraZeuc/6xgMAdu+BXvL6xpmpwwWt1D9qnVAc7TngAZyPb8KrXnjDRfiF4K1S70G7g1Eaa4niZGG/K4Y8cEcduKwfD93qWsaeuqwwCSG4Qkvb4cHA9jn9K+fxXPze8bx5Ud0uk3MlrDc6Jd/arW3bb9lmGGXPYHofxrP1TWhp9rP9skFv8rK0DHBfI+7juPpmqHhfXporn7FNGGluT8iRrhkbHfqP6/WvA/if8Uv7U+MzeDJ50htrH/RWmT5WaZ0R+G9cMq8HjB9ax9nKom0jTkUtT2HwcsGpaKLu6DJbD/VFW4KgjP4mvZ/D+sG4jgeKNk3ABYWz8q5wCPSvI9ISPT/AAzp+mRL8kQ/1hxliO7epzzXV2fiibT5oLW2CkqoXcc7sY9cetRR/dy5kc8VytnZxta/8JVqGq3biNbUhAc5G4Lz9cDP4muK8dfEO3LtFbX8JlKALGT8ofOQSfpXnPiT4kxXkZsxMG8uaQSs0mGY55xjjk9z2xXluuaxbx3Eq2yGUZyJJm/8dx0/rXX7Ry0RlVraaFn4i+Jb2+1z+zYInvLueRVWGI8zOeBjoMf4H0rp9DsE0HT49OiAW5OJLmVerS9x+HT/AAqv8PdLkvjN4mvYV3yQeRY719+Zfb0B+vrSm+U62CSY1yzNuPc8UKGl2cmqtc73wTKJJpbK4h82OWAxOuMgq3Bz7YNfn58S400Txve6Mv7y1068NvI3qqvwMdfu4r7F8WfFg/C3R5dRt0SW+khMVtCyk75D0LeijOf5V8Qa7bavNrt9c6ys0uoajI108l2MO7Mcng9ueOOlenl6WrbO6lGLhc+nNahXcscS5hCL5TYypXaNvT8hXmPxKa3vLExTqJpDgA/xDkCpPhf8XRoNjB4e8RB9StreI+Rdw482BB0QjA3KOMd/Y0uo6KdSvp71Qdkj7oxjGFOMV6PK4yJ5nA4e7C74/KjMMW3Y23vjvzUNxbwtvEcjFDyD/Tmt7WtPNrzli/Qgj9an8I2MsmuWmIkkghPmvu+YOBz05rSVRRV2CqvcufsyzXHiL46eHtBHiS68KxapK9pJf2AQtu2s8YIdWQglSOQSC3GM16Z+1P8Asc6z8EJ11eHUBrmjahK5a7MYikjlJLYYAbR06qAPbrXkvxU0Ofwr4nsPGOhReSPtMd4ywoFit7lHDxFcdMsN2PX61+hXxz+IunfGj9jWw8YWoDxXCQTv1zFJuCuvsQSRg1x4ipanGpE76c1Jcx+Z9vq1/pds9qU82EDKwyAHZ/uk1HPa2+sRSXX3SowIyeFNdDq1mkzfMFTJD7uOFPv3rFtPDes6lpuq32l6beahp+mgPeT2yBhbqejOM5xjnIBAHJwK7IKMo8xnzcysclNp/wBlkbgqyjhsn+YxVqC6g/4RmS0x/pElx83HUdR0q0qm8lRJnDBhj5QT2yPwx3H8ua1NP8PJsxs3Z5Udzit42ZzTly6M5qy0W9vmQCJ1Xv8A7VeieCfANpFG8+oxLPebtttaqw4PcnnGfatbR9JjElvDLvAf7y9D9K6/TfDmgx6vNp2pNOi4BtGjkKh2PUEj+IVr6HG6reg7S/DOn6DCl3eXMc9yUO+3j+ZY+c4HPNdhaa3c6rZyNa5i0ZF8szSkq3oa5c+DfC0mnyzm+1DNsxS5jWbcIwDywz1qS6+G1nfKW0jxnK8UkfyLKqlc9SFC4yfrU2beplrublrrugeFoXt9MsLa9Z+DPMBJMxHq3QD6VUufHF2EMizNJJux5UQC7RjPpXM2fw41K3tH/szXrS5lwdvnKQ30IrN1vwt4u8Jac11EtnOzHP2pZAVGWA2kHpT5AuzmtOupG0+SN/mEm4FSuVYngDHtWToviK5+Et5b+f5mq+F7xxvjQ5aH1IyMBvQcBvfrXr3xJ+C9x8OdSurnSp5r7QFZRlyWltjjG1yT8wLdG7dD1BPCr4itfC9o+oT28V4bdsCGdcht3fB7Yq1KEo8xpSipyUWb+h+ItEn1rRtY0TXbOW3S7jeVJMIyLuGdyn29apftNfHCHx1rkXhzShbS6dY3ZuJrhMt5rhBtUHOCoBz6k8cda83+MOtHxF4uMr+H4fDb2kKQPbRxiOVty790gAGDyMAgEA985HDRxi3ZWjG2ZMFeOM9f51HsYSlzncsOoz5ux92fsJ+JnvPB/jPw9FLvudPu4dShhY8LHLHtbk998bsf94HvXsz31hq0mxfMkXJR2kXarPyTgmvhz9k34gL4a+PXhZpJDa2mrtJpN4gyUcSo3l7h/wBdVj+gJr7fuNNk0bTZ4pnykN1L8zddu75SemCRXz+YYd+0511OXFxbfMVfC9jZXF94j0ERzLZ6tY+bCOS3mofmPpkArjrnFcZLeT6Kx0yWaGQSIJY5oxyVyQCOeDkc10mk67dJ458PX8g8iGMvDF2LbwVJP0yKreJPBFrq1/JI10NMu4S4aWQZikQMec9uDXhSi7WSOTlbs0er/sz+OrfT9E12G6uFRrMic5bsynn3HFd18JPiFZfErxLe6nazpcW8LtErggg4zk/55r508LW+geFdQuHvpR4k0vUIBDNHbYySCcDG7k8kge9eUbfGnwuvPEFn8OdVQabNOZ4LO4fdNHHgAR7m43AjuBn9auhCUXHXZn2lDFUvY2n8TVrnoH7aHwP8J+J/i7DL4d8QaVoHivWI9/8AZ9x8kF9MvUu6/wCrdhhd3OdoGCa+c/B/wB8Z6x8SNM8F6tpdzot1Pd7Zp50JjEaqCzxyY2yAjHKn+LBAIIHl/jTWNW13xJfSeJTcS6tI+y5W8XJ3A5A59Oox9RkHNfV/7CvxG8R634t1HRNa1y91zRtMtfPht75vOaJnbauJGBk/hbClyBnpwK+nk37J+Z50oxk00e0/tEfCXWfif8JzpthdQxLpVwhkBh3P+66Yx0B4r8/PGXhHUPD+pTaVr1hPp+qxQLJJbshAkjYkK8ZwAwODhhwcEcEYr9Rb/wARP4a+IC29zKBpetQurZGF81EJGewJAwfUAV5r+0l8G4vit4F0W5tfITXLO0kltLr+IAAEgkclSAOM8+1TRqcnuo4ubl2Pzpi02KQRtGyoyHIaNQMdvr/+utCx/wCJLcQXNvsR4W85CE5DDODx3709rUyXj25ga0u4zskgZSpQ7QRwfUEEeoI610PhPwL4o8T2Oo6hpGg3uqWemSAXslqFYRjGeQTk4ByQAT7VvWUHG7W562GvKSlHofqn+zv8YrTxx8PNOu5mX7Z5KRypnLZ6V63qmoS2kHmqgZBn7vGMCvzw/Yj8bNcfEDULOaGS0i+Ro7eTjawGACO1foR4itJLnT5mTb9z5FJwAMZPPSvGwsqnJOn/ACs9PGUoRqQml8Wp5D8ZvjhoXgGyj1C81WKBrcq7RsfmYZGMCviTxn+2Bq0mt+KNd0GKK3N06i2uLtPM2RBQpK4IyxOe/p6VwPx88T6p4k1TxbfX2Q1vrX9nhX5IUcgqD3wAc9MV45sN9JLaM8kcTJvMSgYGOM47V20MPzvnmRUqRpe7BGn468eaj441dr26lmd3gSF5n2hpiCSXbGOTnnjgD1Oawnv1tbWfTzcqWYY5G0H35A4r1D9nb4e6V8TPiVJY60N2nW8cU00a/K0qhsCP2BCn3IIr3T9orwj4L8I/BvxlD4Z8PadZKpRY7iKEM6btoLI5579c11e3jTqqkeVUqWfqfETXCpuVSwfBBB78Z/QVRVWVT/EW5z/drufCsMV5oPiWB7OOWdGt3idlyyBmKnHt8uT+dcPdW/2aaSIEuu75W9QD1r1oyuxPUibEiFBxVePdCMEYbGQcVbuIA+CuAT0bGOfSqZfzV5OOMfStjO2o2T5vldcSKQF/LNO+WXDbSMAEA+lRzD7mHLkKQWPvzUvlnaCzYBjwSR0561SVyeo5t8duV4dm61pWMnmwZLcg7QPaqNwzNJ5SKMKgYBevPeizmNu5Qgkk0SjoUuxuRy7tPmgRBiP5h71LYRi6s549mGxj61V02MqxBfAZcGtHSZD9raJV6Kdue5JqYtlNM43VrZre8lUcKp65/WqDF2UEnIxn6itfxLZi21NQAxBjO7PrWP8AeyP4RwK6Ohg9xZF2qWUbVbu1QRsFcncUIXapz6mprlvMhUklip/CqyqszKHl+6emKN0B738GPF26xTTZJYxOoxEOx9q9+0i9Wa3Ucscbge+31r4g8L6xJoWqrLG+WPp2xgj/APXX1p4Y1pbryp4nVsD5pkPytxzj+vvXi4qjy6n1WX4naLPTbW9ljQRll3dj1q/bsWhzIMNnmuVhvmk2suCDyT/WuitNQiZBGWyxrx5RPootFh7QTlhjLY4rKltWQseoXtWxBIqKwBIIPFVb9WOJRzngip2KZjSRvJ8qkAgZJ9agmsZpo3ZU4A/OtDyQikKMc5yavaerMquSCQMbau+gzmtNs3uJwoXnOOe1b8mnTQW5CjO3P3QM1Pb2L2upH5sAjAwPeuus9NW7hJxhsYHvx1rDmdyuh501vKsO7YScdMYFZsbyQybmX5+9eipY/fjYDg4rOvfC/wBqUjGwt6VcXchnGNr32dXy4XgFmY8CuH1r4/aH4d1Ca3a/muZogQ624JAbrgHofzr2C38A225fPZpPSNgCCOmDXkXxA/ZNjubo3GgR+QrBmaJyT8xOcJ7Z6j+Vd9GMG/eOat7SK9wxrf8Aagn1m+EFjZC3OP8Al4YAk+4FX9I+Iup63q2LycRRv82ITtHWvLtY+B/iHS74CNmjeMZAkJLfrVSWHxRot9D/AMSq4TyZVbzNmV6dDXTKjTkvdOBVMRH4kfTbaOjxlixO7B5Ynt/Oux+HPhqFtJZ9iyTvK4LlRwowAB615ToPxGt7rQY5LuGa1bYcqd2/jgnHr6e1dx8Efida64l3aTxzWM1vOREsgx5sZGQQT33Zz6CvOlTtsdzc7aHrEnhSDUNNnt/IUlk2h/XvWf4R0+KGz8nytkivtP8AvEn/AArqNP1OFuh2JnhiRj6/ka8u8HeOXn1rV7VoJGt1u3a1kZcFkJx+WR19KtU/dMYU6tRNHstpbxRqdvy8c/8A66paw0cWqWU8m3cvy7/9n+6PWuZ/4Sy4lUCOGRhnjCECs3Wb3V9Te18qJYzG4cb+oPtWq2tYdPA1XI9ftb6O3A55IyeaxfHnij7L4bvI7ZfPvLhCkcan7pP8R9K5NZtSuNrzSMjnqqjmtLTdHN0uZAX9d3B9atJnXDLY05c9RrQo+FPFHiFNBjsr5ElfbhLhUwypjqR65q5Z+GzIzyzFi7tvYnGcn0robfTxwoG1h1rQiijWQYPTpXRaMFqztvTp601Yo6f4fSXYxBUKecD0rqLZfKix1NV4AFHXC1bjPygg81xVKt9jgqTdR6sjmGI2YcEDNZjTM65IGOtaUzheGOTVG6QBQy964txQ0MS6i/fZxkHpVO7YxxsuN3HNaU/7xtoGSOlZ2ofKhB+U9M1g0a8xzzSBpGYg5FYWua0mk21zdPjyoF81s9cAEmt2UFeMcEZCjrXzB+0x8UGW8PhLTLtVkYrJqDR/xKc7YSR2/iI4OMV3Yak6kkjz8XX9lFs8n8WeLLjx1rl/qlzKzglxF8oXZHn5Qo9wBmsu1BkteI8t0x7VWjV9pZRjAzg81bsMmKZ1f7o2rX0yioqyPjZN1HzMzLYfKrqwPOMY5rrtHtjqNjbgr87K3XjpXK6TGY1Y7vQ89a6zR3ZdMeTOHClN3oxPH6VnPYNjY0IxQkyhN7OpX1HWrqySy3eSN3IKr7Y5p/hHSZrvTw67imCzMvReehro7jTbOxsJdSvj5FjbxmWSR+MKoyfx6fnXCo8zueXXV5nmXxB1lYobSwCeYzMZbjPG0KOPqfauUdlmVjEysp54H+Nb/iLZrtuL+6xCXkYLFjAjjx8u4j+LpzWBayRRwyec6gnpuGKpRT2CK5UU7XV00eaElsEMNsgHKY7165C0twq3Fq4eORVZWU/Kc9MH0NePeJtOjWziuIyyqPl4HHPH5f413Xw3udV03w/p/wDa9m6aNqtwbTSb+RlOHXO6LGd23I44A96JQ0JqK6udta6tFNuWeIsuNobPQ561dOlyTQyTQQLIqD52XaQPQ89qpSWT2okSSJiV645JP17062vJ4JBLC/KsMqOhA7EdxWTijg5ujHWOpX+gagt5YvNZyBsGW3cqGyMFW7MCM8HI9q7f4ZfEi38P3M76tr93olpDAxjNspLSOTnaAB6fj0rnf7Q/tu0kiSRbWaVuInHys+PbvWHqHh+80ceZeW7W53bTG5xz646j/wCtXJOjGpuUptMTx1+1lrviaaSykRtEs2G17i1TN1IoPJMin5M4AOwDoTk5ry3xN470y+ZZ4JriS5jAMczffZgRkk+w79au+OvCuEGpxBjDj55c/KD0A4AwD+Qrza6tzA7IDu4Oc+9dVHD07WsejGbkro/R34TeKvtPw60R2tTO01lHK5djlTjoD1/GjxB4km8P6Nc3tvNNc6kyfZ7eU8nc5wSc/dx+leY/Bvxc9r8LfDkcd0Hk+xqkrLhmQg4x68Vr6h4uge8mXVLkMImBVQAAQQP8O9fK1KajVkulzm5mZem+H9SuphLlIELjh2DNI3fr1HuaXT/CK6zrSW7Xcr2iHzbuVfugDny89ie3sDWLd+J7jXZBY6fFIs8rlEVTghepYn2rotH8VQWNta6To0UlxeO581VOfOc8ZPXvnHYY9q6lFW0REHfRnXax43stMhjtYLjy/IjMSQx8BVxwMdOO1cFH44SS9jNucrn5WcYGD1BrL8ZW7+F9fazmKXD+WhmRT8oZhnZn2GCfY/hXNzXkckiMinBKkrjp7ClKNwl7z1Oo86TWNSUNcJdsW2IZgCUGO2ffn61Y+JXg2x1L4V3N7e3Dtr9vIGsY4l/gBAdHAHzgjI/2e3PXV8LjwxZrFLcwSRXSsd810pkxxk47AfyrMtfHEvinW47loFt9MsXKWEUabSyEgljzySB17Z6euVHmjNNFU1bY8a+Ffgq98R+LLe2hUB47d72SWTBGEIAQj3J/MHpiu/8AEl8bOJkdNlwQY0j/ALpzzmvTPC/hHTvC+q+KtX09vJF4iyLDIAPLJYtgegyTge9eea9Y/wBuanJM+5W3k5U4xxg17ynzK7CTOC1JJbq3LqFaPG4tu5xmtbR7P+ybfMEhWSVOeOnfArS1OGDiERhLWNSA2OWHvVux0O81iOC3tGjedc7ImbDY68e1Zz95WJL0c8eoaP8AYrqPzUmj8qfPRl/Hvn8fetX4S/FjRfh74R174PeLrmeHwvqMr3sOoO5DWrYDhVBHIZuQQT82fUVjW1u1nMIbzcUjOHB5/EVzvxo8Ow6j4Vh1iziP2rTx++myd3lM33m56KefYZ7dVCk5LklsbUZ8rszy/UL69lkuFjieSBmdY3f5QV3EKce4wfxrrfg/8TPEPwb8SPq+nhLyxuFEd9pshHl3EaknHI+VhnIPvzwcrw9rqTqBGzcBc7DjA4wBxxVy3vC8jDbx0PoRnOK7+S0bI65x0PbPG/w/sdbjvvHXgWxXUfA0sX2q7hikHmabdFiZImj+8q/NuwM4y+cKBXnE9v8AZbFTZENfN80UKchsdevPNO8F+NNY8AXry6PqUtlBN/x8WvL284xgrLGThgRx644BqnLqiQ6rHqEO1V37zGg2qvso7CuaKnGVkYO7jZnWeH/Fmj6xmG8ul0PUVZQqXfyrNx/C3rngjsa6NZ9P1i3awmuTHdoPMjkQg7iehyOn9K8Z8bRwazdG6gaQ3BjJO7jkHhR7HriuUstWudK/dwyvBuOdytgsT2H5V6cLyRl7FS2PdLy2ms7xIQTG7IVLRn5Wz2PXih9Yk0i8gllh37DlPLG1TjjFeSx+M9WeNU877SSDy/DL7Ci5+JV+1uLWePzSDltzjjA6Cm43ZH1eZ6rceKJftkt3Zv5J5Z41Y85HOKoX3jieTSpbVfMWGdw27LOA4ILY6+gyB6151YeILq7wkEHlmQkbYcHcccjGa918M/BHRL/S7HVvE2stqbTIT/Y1jlFQdg8g+bIPzcEA8ZHHOVSUYI3p4OU3qe7eLNaW4uElMnnDcIpE8zKspzycHnjj0rD+Afw38O6h+0LojXdpDe6bG811HZTKCkcioWVh/eIIyM9/fBrhbzVomttkZ92T3HYVjf8AC69Q+CfiLTNf0i1tdSvSksBtrwsi7XTAcMvRh9CMEjA6jzowk7RiYUJKM7tHivxq1WTXvit43vnlaeO512+ClmzlFuXRMbuuERB3wAO3FcZDCZGClAUU7g3pV3UJptW1C4vJmCzXDySyL0UszljgemT06emKhhU2dwcqSmMnblsce2efavYi9LHqXTehoaPNJpGpR3tgUhv4ZI57eR84SRGDL9PmA/D61+lFr45tvjD8K/CvieyMcM2oRCK9jXnybkDDocdGDAjBr4U1r4H69oPgx/Fd3qPh660qFY3lh07VRLdRq5wMxFBz0yM5xnGa9N/ZJ+Klvouqav4H1K6hNnrx+2aY4ODHfqFUKp/2wBjGeVbPJrhxVPng+5z4hKUGe6/EHU20eOx0/T4N32GeGae5JBxgjAX0OetaHjjxFHoOsXoKmWK6Zo1nb5kIKAk8cZrmfiRrRt7eW22sHfEc6tlQzZBViT178g8U7x9qVvcaNZIEmk+3RJKgQDZE23hm/HsOtfO8iuzyFJnPXUltbxh7BkM5cyCOPgY/2R2rFbWHmWYtOFcSMXTI3l+n4n0zXMt4guYrrNnqFvbwxnAjmT592cdfT2rnvFE0n2yO8TUo5bhsTSW8B+8qkcE44PHpSjDqbRm72Z73deD/AAz48t9Mh1vTre8t3iO3ccOpYYYh8g9fToazv2bfAun/AAa+NHiC3uL1pfD2r232G1vJHHmFwdwQ8DBAZgCOSAOpryDwz8RLvSbmBLgma3QMVtJWKqjdQQAfWn+MNcvPEV9C80rLbRRl1SOTGxzgE8c5x36jtXXGUoxsmelTqpI+wfjZDeS6VBZ3U4PkSiSxvFO0SjBBXIwA2P8AJrd+GfiqbxvpZe7jW3j021+xxKDgknAc/wDjo6+teGfB/wCN83jDRZvA3ia7a5uYsPYXnlqzXKIMlCP764znjK/jW54V8YSeE31bSriLzbe4iYWg2bWaRiVLEnnGMfSs22pKSOZvVp7M8V/aC8Bx6TDZeMrFHTzpGtb1ySUOT+6cZ/IkdsZ6V73/AME6vGGgQaf4j0K9uI01KW4Wcxu4zIpUKO/tg+nQ4qX4teGLPxXoUHhq4ZnsfsoSeVXH3mHJB9Qce/NfAGq2+sfCnxdfabBeyWutaTc+UtxaNtDYwyN16MCGxz1+bODXoKnLEw0ex3ZfX9neEz9hPjZ4i8DfCzSW8R3ljaxXsRxDPBGokLE/w45z6/nXzd4h/wCCmV5IY/7H8FCdFXn7Zc7A/wBMKSDXyD40+NHijxlp9jFr+uy6tPBEwQbRujLYBb0yVyM+hP1rirvVY1tfLHPGNuc5xVQwri3J6eh686ylaO9u56l468QXnxYm8VeIrrT7fSn1fUxqclnavuSKUIqBQcDcWC7vmAyWY8dK6jUv2QPH3g3UtJOo6VBd2d0qh7jS592zIGEcsoAPPGOD7V5j4ct/Ov8ASrB75IbbUb22tppy2EAeVU3NjsobJ9l7Dmv0g8W/F7RPhZ4dfSptRfXta8+CFI5HUyuuwZkwOiAc56Z4HPFYYidSErR2N6cYTV2YfwA/ZD8P/CGzk1fxPqpudavoWjl+YJFChOVUdyQOrc9K8f8A2pk0tfhN4jh069S7m+2CNpoWz5pEgxtHrj8O1c+37V3id/GV1d37adrljFG8UdnExVIlwdrK2OuBzkdD7c/POseLpNW0W9t7ksbWZi8BJ+YZOST6kH/GsqNCU5xmzHEU4s5jSdUfQbnW7fzRGl1FFEzBSTjJYgfXOK5/WIo47hZY2LFyUZMcD0qzeXZkvGuGTa7FRtPbA64qlJN8x77jgZ5/GvpIqxwlaTfG8e7DdWxVJfvNjkbSTV+Zke5354VMZFUThd4QHeIyCPc1uQxhRWwc5FW5tiqf7gHJ/wA/SqlrCfLz935sc9qsT5mmaMkYxzj8RitEQ4k7SKt9A+7EUsOOeuQelVwxGoqSP3ajqBwK0Ps6PNb5AY27SRn6HGD+n61FqEKxzRsDwV3FR688VT2Bbl23TzPu/d9qtwullfpI5+VfTsSeKr2MJ+0Kik4+nepNUVYmjcH94RuwPrWBuL44twLhicK0e1j7gjj9a4fbIoKcZHQeor0DxVAt9ZQyEMWaBVcjnkdK4F1ZZHIba2cbe1bw2MZrqDW5kt5Fbgg5Hamxb1PyhQM5ZsVZtdrNhhtx1xT2tG8454DED2ApmJU+ynzhIPXJKnqa9R+FPjJ49SW0mk2QzLt69COh+teeeWISw++p4IPamJLNY3Ec8UnkOh3AqPes6lNTR0UZunJSR9m6NqEO1hvO0915rZtbrzMbXye3rXjHwx8ZpqlikTyLJPtJkYe3TivR7S+MUgcsPqOlfPVaTjJo+yoYj2kUzvbW4kMYLHdnj8a0tnmQ4c5B6Vx1tq42nPAPT6+tbUF7mNcvjuK4+U9JaklxCFkaPBOOlWrX5Vwg5xzUEkwl/eKPmHUnvT7eRmLbTjuamRcdTQaFm2OoPFdP4fuPMXyycMF4zXOW79SW49Kv6XeC1uM5zznHtWMlpdGvKdNdaeFbzIgrE8EY/Wq7W7tyygFa2bHF7aksAvG38+c1TuImhcjBI9u1ZKTElrZmdHB5jbSQrduK1I4WQDL5P6U1I1ZQ4IJ9KnVdw4B/GteZrqacgTabZ30ZE9ukjPwWZQSfeqN18P8ATLjy9qLM+MYlHAHp/npWjGu0jBIxVpbkKy7Sc10xrNITTRzn/Cr7K3PmJY25/wBwdf0qaH4f2sdwkq2UCMAQrbRkA9a6xL4thQuT35pTcP2HsK3jVVgUnszGj8M2rMItu0AYLE847Yqf/hD7CHlFVOMD5RVia4ccY+p71WOoTAk5z9ar2sUdEG+jJv8AhH4R8qFSrHPzAUNotvCg+ZQBzWc99cy7vmYf3do4qncSXbDDkrHn0NS8Qo7I21f2joIZ7K2bLNl8fxDpT11yEyMI+fZe9ckyyySBVcu1bmk6SyYeTr/drN4hvYiUYLVs2rW9muZPlTA6VqW8X94ZxVS2VYwMDGOtXlPQr37VKk5bs82cuZ6Isi4CEA8D0q1G25cg1WjtQzBm+bParkMaquMYpPU52uxHNH5mD6VVltflYk/StHy6q3aqvydzWLWuo0ZH2dRKxAGax9RXcue+c4rZmPzEg/drn9Qm2sWbIXH1zQoNuw5SUVc82+Mnjy3+Hfg+51aQbpI12RRZx5kjcIme2TzmvgOPUrzVp7vULyRprq7lM08jHlnY4J/L8uBXrP7TvxETxx4wn0ezeOXStKOwTIxYTzEDLDnBUAkfUV5DaofLURgks+fbpX0+FoqnC58fjK7qTt0Ojs8bSo5XrS6aBsm3ZC7uP8aWzYYn45RMqR3pdJwIySCCQenfnrXQcEdCvZskZmEilV5VW/4FXS2ylNIuGTkMyt+Vc4qia5uODlXOdx4HFdBpnzxGFWypZMdcDHWplsN7HqvhGNodCtkKENJAmVPQE+tcB8RvEX/CVeMLDwTZTn+zlUT3piPLyAFthI7DGcep9sVqeOviDP4T01ILDbFqE4VAzjPlrtxuI9fSvH/DertoPiaHVYzumjV0PmnIZmQg59uc/UVl0sc0Kf7zmkd/qXinw/qGtJpi2jRQbVi82PkB84OQf51zfiPRbZSGRd8C8CQHK/nXO6DIZLzV9TuH837NbOwZM7mcnt7D1qz4J8WW2g6xYDWbeTUtAWX/AEiz4JMZHOPfPqa43RlFcyCtZu6O9+E/gVfi54msfD6+ZDpK4l1O+jwPsdsMlnLH7pONq98knBAJr0j4nfFjwFqGmSeBfD2hNP4bsnhSzvYDhgIz95B1IYjhh94HPQ5rkPEHxwtLGOaz+HWlr4T0yRNsswjXzrqMjBDqVOBycc55PSvOLea3s9NmRFG5AWLMSSuBxnPcHv8A04rJxlU30sc256Do/wAWtMl8WSadqyNZ6VI6pDdSHcYOOQ59M9+1ejaf4fk0jUHQlJPPG6NuCsiYzwcdK+STHPqkxgCbpCS3rgZ5J/l9K+gvh14wXwbpOn6frbSX2kRrtS4YkvbZ64B5Kk9v/wBVdOkUkY1qSex6f4P8LaV4wtfEWneSEuolXyZVxvjYEkqoPXsfoa5vUtNuI410XxDG2/bm2uFbkr6bvTt7dK6vSkgsNVh1LSrqOa0upNwuLY5y/Ugk8g//AKq0vFNkt7rGnNdI0kE1nJGu7+D5s5Hp1/TrUNK90cFtNTxTXrMaet3ayIXgmHlvEeflPr/jXjl94Zksrzm3m+zykm3Y8hgpxjPYj3r6Hm08arby2h/18busLMeJMHA3HrwBXDeLNNn0O5hsgEnlnlWOKNcDliMcE+vHNTP93sdNCTi7M0PhjfTw+GCryKzWrkFGGAq9f50moeLArJOkv2h2fCIRwT649q2NQ+DWv+Bfhjd+Mb++t1tDqEVkbOIl2/eMEDBjjgMw4IrymTVEt7ia2IZpkP3z90Z5A+teP7D2kuZbHVKmm7o7vVfGUuiaJcH7QsVzdDy3ZUwFXrsU9QCep61638JPCt14Z0L/AISfVF+z6pqEBW2jYZMMJyQSB/E+AeMHp0NfOfgPSD4y8eWGm3V0tjpJZp7q4lfaqRoMkEtwMnAx33E+1eySftYXGn+INV0w+GI/EVjcZtLLfKY3OBhWAUHrkEAc42966nhrLQSoKSt1KfiASahfFzI0oeT55n5JYnIPPt3/AApNHt4dN1m3a7G+1U5lAXnbjsKhuNa8U3kJmuvDckqIwMiKVEnUAjkjp06dqmkjPiieeea6WwtY49zGQ4ZCB9zA75rlVNyVrmv1CpFczRd1HxBapY30Om3U0yTnF0ChG2JegX/az1x1FKuqPp8AvdKkjMEICTCRARzjbnjtiuYvtLSTQ7aeNjHcrOVmbOQwA61BokslvY3UTykgspVM8HHXI9quNBIh05U1Zo9c8OzXHiDw7DNdSNLczuzuvY4bANYnjRbXQr5LNAHuAokuGzkj0Ue/eun0118M+FLe/EeZBaKYYmPLOR8v65rz0WbXFxLLIzyPI3mSseR7/j2rra0scbdxAVmsbgvtiLJsYsMnn0rQ+wXUmg2txbuqTWpI3IMScdWz/SqNvDHJcsrqY4kw21uMjt/jXVWdvdadotldSRE6fcZXegyVb1PtSihLYyLPUodYkS3v1FvdbcLOTiOTPYnsa1Y/BivC9iUlazvEMUjIQQVY9RnuDj8qiuvDaeQ0zlbiNhmNwDt/PvW34Xmnt7Oa3nkfbEQ0Jk5KtXQr7MlPW58jeIPDcngrxZqWh3oZJbOcx/N1ZMZQ/iMH8afpsjKsrLZyy2yttluQhKRnsCcda9S/ag0GKHXvD2seSQ2pWrwTTLnDNE2RuP8AeIYj6J6A43f2bf2jNJ8C/D3xL8OPE2kC+0PUluJob62hMssUrqcxyp3Qnow+6evHNdDb5Lo9WL92548p/eFslkAyOh4ont3mEsjsqoFGAOmfrXLz6ndXa26BmR1Rd4Y4LuBjLHvnrWitw6xqGOzHBjU8D3pSjZc1zKbvojv/AIJ6Ode+IVmr24urS3R5Ly3b5swgYJH+1nbj6YrE+MHw7j8L+LL9baF7bSJLhns/NBUBGGdu48cHP512/wCzDqMVn8RrqBmVLqa1aW2ZjxuBww9+OcfWvW/ir/Yni7Rr57uMeasTIjxphoZYzu5z2Pt1FePUxNSjiFF7GaTTufF7xtC+FXcWOAysMiuy+H3jtfDPmWl9ZQX+nyHdLmMGQZHUZGeB2FdZqHgvTtX8E6Z4l0po7ie5j3XFqGDGJs8g45DL3zz6ZrlZtCli27LYRluSB/M4r31LmWpaqOMtDvbf4W6P8RrWfUfAevWkVypEjaTqLmEkHoQcEqfwI7Ed6yLPVvFXgxksmjk0ecuUUCJds2ByQwyGI46E1z2m6dJY3C3ETeRcx/LDLGfmTuCuehr0eDx1O1oDr0Uet2S4X7LdYALY4Ix0NZzi2jqjiHfcu6sps9ReSOQRzAgrx0OeQR7149401afUNekgm+fYQT6A55+g+ld1r3jazurxLu9ha1jYZfHPzgcGvI4VluJ5Z2UkEl85+bbnoadOmou7PIhBmhDp63S4V1IHBkbk/XH1qQ2vyyBS8pVdwCHBPXHXpk9CeOnvXo3wZ8A6X488Rz/2pEbvRbO3P2i2t5CsrswIUo2eCpzke4r0CP8AZh0lfEbOmrzTaCF3xWsvFyTk/u3Zuq89fvcDnrmpVYpNHaoyjqeNfEb4F3PgjR7HXbXF5bvGst0kcZWS3LDIfj+EHjPUc9jXnvn/ANmtHcW07Wtwm2aGaNjuVwQyEc9jz7V9r654itdKha21a+097JMJLHMVC4AwAfbFfHPxKk0VvHmst4dWOLQ94+yxQnKIuxchfbdu/A1NOXPoVF8zsz6jbx9L8RPANl4kkKSalJbfZZ4UbLmZflYkADrgnPGevSu0uroTfCzQtR1GRY7abT0dgzDe0YyDx2P05/lXyZ8F9Uuzq1xp9i0c2oTRloLaaUp5u0ZZUPQMBzz1HHSr/jr4i678Rm0/QLK0uYprWNo57UjapkDHIAz8qDnIPf0ryqmEbqNbI5pYXmlZbF9tYh1wNqWnIERrh9iyAH5eg69fWqkl9e/aMEiPcPugDk1oa58MNf8AhzoOmarNpd9/YF7tEGpXKxBWlZdxHynKr1wWwT2z1rEuLhrVUcsCcZUjn8K56lPklaOwOi6bsLdGS1YzKzNxhlY5PU5P606G4O35Z5NrDJBOKp/2iPOkZth42vu/pVWN2abaWaNSfkJ6VVl2Dc39Lv7mzuobixuWgvbd1lSUE5Rl+vXjHXtkdK+i9H8aN4w0qy8SXVrFDdWuPPt42+UuuD36bhz+NfL9urzSBieFznnuetek/CnVItPW5tbq8KR3B8sQE/J/vH3yK5ZJGdRXV0fT1vqNrqI0FXuPJ1G7mae6t1U4hjwSDjvx/Ovkv9qDRw3xKs9ZiUhNTV7cgqQuU53Zx1Oee+B0IzX0N4FuobFtX1y/nB+wwEW8RcCS5kIwMZPPGBxXE/F3S7if4a2888CpelvtunqxB/fEFFGDzyGP4Yr0MLU5ZcoUW+ZNHy5qG5boo6kGP/WHsx7Vr2tha6laRxR7XmIIVh7jkn2q38L/AIOeJPi946svC2mRtBrkzSyXS3gCxwLGV3uTg8DcvAyeR25r1342fs8zfBXX9N8LveWmtajeWxnEtnamHaFYFkbJOevByOld1StGLsfQezajzs820/w7BFeaLo7yNPbyuol45OX6fTkcV6j4w+HHirW/EF0miWDRxKVt1vL65AEmE6Mxy2AMDuPbIrG+GmimH4hWBnKBtNKzSeb0XKknH4EZ969iXx210t8TE1za2YLRD7qsC2Mnvzk/zrza1RyloiZVpRSjETxh8PdL0P4P2enaDbWrXlo8Z1m6YFmkLIclXI+b94QeCOAOK+XfEVgNHils2/5Ygbt+Dtb0HrX0T4l1C7uryO31G+8+Hzi/2OxY+Ui43LgHhmxnr39OleG/Eq+stWk1BrK3mt4XmIVJ23uOOWJ5wc+ldmGvsy5ScrM851CdfJKEqo3Ak4yfwPpVKbAIwN3pirEMBuJY4IguTkru74GcfpUdwecrFs4555FeqQUm/cuePfFRTELdxyo5bfD8/wAvAOcVKqhWBbJBqIybWdAMNnqfcVoZtajo5E8vYoOccn3qSOMyYfJDseffjmobVvO4HJB5xVm3Xy5t5JwEZgvXBIx/9eiw9izpMvmeapJZvMLNj9BU9xEt1qgCIQGKjDe+ckfjUXhexe/lYiRY1AzgZy5HpW/qyrHrNu0alY1i8shehZW3Z+pH8qtaInqRRxNHIFxhkYZqLVgbe6A2/KoB6djn/CtZjGmqzqyruZAVHTnGcVNr0LXFj56Iu5rNkY/3SCcA/UGs+psVFjhuPC9rcuhDBmibBznB4rzq+tPsOqS25bzDkngY288A13uiSGbw+YVydrmTa3BPHQVzfjrSW0y+tLllOL2IycnG4ggAfXmtYmU9jDjdVb5gR68flWhD/pkbgt91eOKoohWTjqw7D9KlhkNvLGhO1m6+9aGWlhdyLJtbhSwXn3pLiMiFypBbIIBPGPrU06/ckZQWUnj60zbwUI47K1IVyx4e1qfQ7+NrZjGc5IHCkelfQPhXxVba9pcYaXy5o8Bg39K+bZI/LU5BUfyrtfhxrBjufIEjb1OQD91vf61yV6Smrno4XEOnLXY+jIZniUYbco67uta1vqRBUP07GuB0LXhdL5VzujuCOrHg1tQ3RiIVzkg5HvXiyp8q1PqaVa+p3FvqY3cZXHBbtWhb3XkyEnOTw351xlvqCNkP8hPTPStC0vXVipOVxwTzXK0d0Z3O8juEEgUnG734pXuF89SjEsCCGHtXLwagJmU7/u9BW7Z30e05AHHSsraG8Xqd7ourB1xv2/LgLWtNceem+M89+K4CyvVUoytj1BrqbHU9yMVHPcGuZo2spaluORosbsEjnirMN55rBQOWPFUHYN16Z7VNbw/MCnPOaRvE0HUr9fWlhbbxuFMbPlkY5qqYpllJxx9au5aimjWF0FU7eDVqzuEkX525rFhY8jOP61ZVxtIxuPaq5jCVNo1fNRiVNUr6LepKjAHpSQyqD06jBqzHjkVpzGSi46lS2hxg9aty26yKBtHzcHOaWMbWGetXBDuUDOc0XWwn3MuHTYreUlFwfrmtW3jDKez+tNazK9AQR61Lbws8g2qXPtScddBO7RZSAdScv3HrVyFd2BtPpUltalvm6ZrQgscHJBH0NbxiYsZDEFxnmpBjoKtx24BGBz70rQBThjk1fKZXKyLuaq2pIIwGPBxV/wCWNz2A9ay9Zug3yjp296wcQ6mH5mc7uh9K8I/am+Kh+Gvw3u2srkxavqe+0sPLXcwbHzv7ALk7vUYr2q+uRb28rvIIo1BZ5GOAoHUk9h71+bf7QXxKPxR+JF9dpvj0zT/9Btod+QGUsHYDoNxwePQc16OFpc0rvoeZjq3s4abs4HT2ZbNd0nzMOT1yTz/OtCzPlLAiL+83fdHQVRjgP2Uv90lwBjsK0dP5uoSflGQDX0OiPkruWrOji8uOxlJ/1mw/hUWmzRQabKT80m4YHQgUgYTSOB90kgehGO9Os4Y100DGWL8t64rE0GW+37Lzz5jnc394/Wtdb5NLuFcqGC4G05x0rNkh+W0iBCBptzgDtjin6pMFwrYLkE/lSlsK9jI1iZtSke5kdi+7JBO4hewrmbmRmYqFZ2Tj5F5PXiugiuB9jn3ECYDCrjqfSqui6rcaPqkF5aqGmhJO4jr25H0rHoI2vGGj2ng+x03SbOMzXuo2i3N5PJn53PGzHYACuIaP93lwGG7Bwc/j9a9EszaeMPHcFhd2l9qM2oRLFBFZ/wCthlJLZUHHACk8duelcz4+0y30HXlsbNDiFmilVzl43B6OB0NTCTvysTp6cxlQ6hJC0cihSYuAv8/r+NbE0kOqafcS24KKqAupOMjqeuM/WsGPaZAxGFBxXS+F9Pi1TX9P0uBmiXUp4rSQgcYkkCkHHPQmnUVtTB2epseA/DMS6bdX10kouJo820bjaGj/AL4zyec+xxwTW7pu63Ym6ZPIV8bSACWI7dDivoD44eE7i6vrdtI0+L+yra3S0jhjwpTy8qqnuRg96830f4O3niLUvN1WVrTT4RummjwFVF659TxjivIqV4nFKWtmS+A9O8a6xcG98JabNc2EDbHEgXypC3ICgn5j7jgdzXeahqHiqwtSfE2hX1itucpdLFuj56jK5x9K9M+Ht2RcxadoURtre1tkKxMmAYwf0BxXq2h+JNO1pjEsiyqVB2MoBHOMHjjp+Nec8VKLujaMITjZnx5qmsaWrxTxzoN3QAgDceCf5V1PhbwCmh+Ko9T8RTw3N0sbwx+XkrCrL1Gf4j6+5r6Q1LwT4Zk8QW+rvoFg+qQjCz/Z03cHIbp1U5weozXA+LfD8NjeT6paQ/bbGVDJMgy0kHPOQeqj26Csq+LlWVkhPDqOzOD/AGgbm3h/Zft7KFlE9zr8Aht2bDfJIHYcn5iFUt9BmvjubY108jnG4bmXpyOK9p+PWqW+sR6ethPLOLNDKw525OcfKfQdx1BrxWeEvGHxu3DO4/XmvYwcf3SQdLEW07JiGJ+UfKvU/X1HAr6R+Dfwx03wbrmg+IddumBELXIVYMgsVOxC3XAznOPvBcV4b8LNCk8RfEaxsI1/0ZQZ7hn+4qKCc/8AAjhfr9Dj6p1/X3+wnbGPkj2qSSQABgfyB+tLEzcHym0K8KK11Zga7q11d2c86MkNwzucY7E5GfofSvKbuO4swbhpGl81jg9gfU13t3eC10e6uJLbz4lUrEy8lJD93Pqtef6teCLS47BXYSN+8c+nPH4E159FtM1lmc6qUXsdV4D0yXxFol2JVBjd2RR0GQAAAax9U0ifQ7kREfMx2jjruI4/Kt/4W30kmhzKQMxzbQo6cgGuvm0NtahuJZgSbfH7xlPyqemTjvjA9Tx1Fd3Mlqayrxq0HTtqWPFGfsWm6YH81Iot5PRhxgD8jmuX8Qxx6HY28buBcXS+b5addgOOR25rpriTyboTsoMSj7z/AHflHr/npXmfiLU5NW8QXV7ISI2IWFW4UIBwR+NbPY+ftq/I6LQtWt7m6mlu7cTRLCIUcEDZJnOSO+RxXp1vpUF94ds9OeJkgaLzQ6ScgkZGfb2rxbw+qzala3Uu77PBdLuMYGWYchcfjn8a9zhtbj/hH7N7ZcM4bEa/wKCev4GpitClscNpuoPot41lcPvtHlUA4ysTdMqPQ9xXWSaC0fIHmKAWyv6Vi6lo7yX0jtsB3ZKmtHwxq93pd9Fp7y/6NI4I87pH64PvWjMk7HHftFaOmqfCO1uCn77TtUt2jJBzmRvKIx34cnHevBLWwXRrdhIiysx+csM5456+9faHxW06O8+HWuh7cN5Vn9o+5n5kOVI/2genoeea+OdWkl1PEuQEXACdD144rSPvaM6lJ7I56300ateAvHmVc5OOvoai1mGbT4E3W37tzjzB1OK6RrgzXHmJEIGgXmNRyR/WrHxKt7ZlgW3RhA1onBHDODk1ry6WZonrqcPZ6lcabqVtfWEhjvLdxJGQf4h/Svoi48daf4m8P+dGjD7UrLPLg4Rwp39q+aY5hK4bO0HGO2RnkVoWPii8s7DULIXJ23KERkHAiJPJA965KmGVVpvdGyv0Mzwf46vfBmrSXMA+02M25bqzc4WZcjkHswHQnp+lfQUem2OveH01LSHW6s7iMSRTkYKdip7jB4IPNfNltopWQ+Y67QnGeQW7Z/D8Paur8F+L7n4d6j50d4z2ExzcWW75W9WGeh9+nrXpyStZE1I31PRbXT5YlnSdQWEuFbvjGc0y4thNHGJJdh3fxZBJx/L8K3lksdRmW406cz2tyglRickEjnP071SvoY7g7cMCrFTt+99PpmsFU6M5LO55D4m1G41K6ktbRfPQ8AN1Iz0HvXT/AAobSdC8WQ3XjPwiPGHh/wAqRZNNhuPKdZTgpICSFJG1hhmAIcnkqAeJjaRNsiyFCDjeAN35+vvXQ6XNGxjeSUAl93z9Onb+o/l1rSUuVXNovldz2P4geKLLxTpYtvg78MNT8IQ2i+drUliySyyxgMI1Hlu/AO48HdxjGCc+DTeP9Zu5GW51fUpHV/LdGnYFSOgbv9Qenp2r7l+AOpeGrXw/BZ+HdJ1W4vZ1WW7vZIyse9eMb8bTjqFHbmpv2hPCPwv8aNbT+JtOutA8VNF5UOr2u2NsnlRIoOJACB1BxzzXnxxVOTamjp9qpPU/P/VJbuMeZG88iN8zCVmG4ngZz71jbhHtB5eQ5Pueg617BN8K1g8URad4p8T6b4asBJtlvCrSSNCTxJGi/eB6cnA9698vv+CbN9qnhGTxV8OPG+m+NdPZfPtrUW4jlmAXOFlVwhJ7AqM+td8KsLbnXGk5LnWx8e2vh++tGsb7ebQP++heOQhwA3qOVJOa6a+1V729ubsSNDdXBAmlj+RmyBnOPUj+tTaxpmoeE9YudH1nTrnSdQtW8uayu49jqwzx7jPQg4PYnmtzwv4Fs72UXPiBNQg0hlyx0+PzJ8HnAGDtz6jkUpVItXZE703qdH4D8WeO/GHgjVfBkV8954QWLE8l8BIttuYMoR+GA3c7ckDP8I4ri/sn9nTNYXgzPbSbX+bPKj72cdMc/jXv1rpvh3R9Hz4OuXhtlZZbjT7gMJZGI25O7kt6jv39K4r4veCrgafaeLtOjW8gkt1N/BaxndDk/LIfXPRj+eBzXmTbm7HDOq5nnFxcW8PmRpCoiVgPm/irOu5TcRlxiIAYRVGB65xVzT44by6Rd6wouMu4+UDvn3Ipdc1bRWvJ49KtpnjkJWJmBznualQ6XM0r6FOzR7yE+WwAQ/Mc4BOeBXU6Xa3Wi+TJKqpKfu4+b6Ejv61hWeniCfeQHhOAv+916VqR3FxrF6jR+YqqdpY9V5wuT6VhUgrWaCWmh9EeHNNl+IE2l2lrcJaR3yqryGIOFAHzNjqCdo544rc8deBtV+J1rqfhnw/dpqOtCVLaxnmY28SlTlhkA4ICnnBxj3rzbwve/wBkf6FKu58DcWOVOOhH59q9ih8aaf8AB/T9I1M3kN5dRyi+mhiO9lYqyszHPyqAQOeppJOFnYugkpI9G+BUd74H0GbVPGvh6y0zxrZA6Xe39uqgvHG2InZgAPmGGLADPfHQfPfxc8R6lr3xE1nxLcnd9ni+xQ+awIjwScjHUMCDnnNP+MX7YUGpeIrSx0RfP0y/jAuVhAaaRjlWTJ+UAHA65xnkYxXA61rQtfD8h2/O5AReoQ9vwH/1qhRlzc0la57+IrQlFRRR0e7ubfTZryX95cz3JIKjllHGPocdK6Bftlxosi2RkjiulHmCNS8hxztAHOf51iX8yweBdPeFs3e1txP95jkV1Vj4+tPBnhm1Ni8kmsPavEsyKp8tnABb6jHHat1eT0POclsjQsfD8/gmX+1pLuO2mhtcfaLkbnTjO1d3Rj6+leGeN75rpFVY0hyrTCNejuzEk+p/E1p3GralPp5guL+e8i80zN9pkLszH7xJPUe35Y6Vzt9IJlUjgKflyck9f8a9WlBx3N4anLzKum6hBKAwRNx9wxGP60zWIWjugApCseM85HrS390t5ebFT58FSOvQUmqzyXLAl+Ejwv07V221uWzMmkOwqBtIqByXDAgEfeJqzJGFiyCdwHIPvVfymC5YcDg+hq0SyTT42dRsAXcNuO+etJdXKRw3OM/LIqBl7j0q1pEZsoJ7tsSLbqXHqeMVnsVtrSKErvTcJC3uaCWjsPhzYwyTSmVdyuhZE5wDnFXNYjjt9evbQpiOCYSIFyedoGP1q54B097HQ3upWK/OFXb/ABHqPwrLsL57/wAYanJOyzOGaUsB8o4HGPrT3BKxs+KR/wATzw/eHaSo8l1AwMggAn8O9WLqMSSXtuoDKzkYByDj+gqPxmh+x6QRGDNIuxAnXnGc1ueINLWz1Rp4fLSJ1AUDpwOfzNI0Rw3hmM2t1qluc5U7VXqBzk/pTvGMP2zwhdRSQmSW1lW6jKt9xBxJ/wCO/wA6uSQPb+KJzGNu9FLAcDpz+Yqe+WW4trpYx/rYWQLjIJxwKqNmxSV0eXr90EEBO1FxjZExXLI/U+lWFiDQoDHt2/Lj6VBNgiSM/hzW/ocrHrN+7RSCVH3cnkU1nDE9SOxNLtJj3g5C9RikO9FHTrz70tOpIyX95BycnuPWrvh/UGg1CHZgSH5ArHrmqWOdw6GjyxG/mIu0HrjuKidmrFx0Z7NDeGOFSq5bGQO5NbOm640kQWRjledrHkfjXF+FdSj1DSopXO6QNsLYwBxwPyrdjjUxrLG6sRyVHX6VwzgrWPcpVGldHawXjtGxLiTnjmrtrqrbgpbdjjcDwK4G3vntZiqsxT2PP41sW90dwCjEe3k+lefKlY9OFds9Cs75R86sBt61pxak0mCQVIPr1rzqz1QKgw/yqeM10drqomUFwApPWueVM9CFa+h3trqA24bOB/F3rrNL1INGgDAMOmefzrzHT76RVVcDgELk10+l6ltlBbC/QVySgjthUPSrOZTH82CetW4bhUk+UZwK5/TLzztoPynuD6Vq/KvzRnNc7i0dKfU6G23XCxlgAakkhUe571lafqiJKqtgH61rrciRDnH3e3rQkVZ3uiq1jnB5qFoZIMhc+1aVnHKud3Kn17Vet7YNzJgjtSv0NuZdTER26AHJ9q1I4y2FJ6+lXW0+IjCDBqSK0K9Rxn0qrXM5FZYdmMKSAe1XrexmnUSRx4APBY4zWjaQqMrtG1qtLKIwVUfKo61uqZzu9xkdhHIq+cx3+i1at7SG3JcLuOOAecVVjnVpQQcsODVwZbPpXQkiHF9SfdGxxt2/hT1J28VXHHfip42O3OMitTNxFXKtk02aQ8laimmKsRnNU5bhlztO6ok0NQW7Hz3H7zBPTrWTrdwkduD/ABdRU85ZcHPfLVynirWI7H7RdOcwxKWdtwGEUEtn0AArJR5tDOrywjzHhv7XPxQTwl8P59It5X/tLVN1uoifaUUjnPqCP5dq+DYMw2rD7wbH8P5j6V1fxb+IkvxO+Ieo6sTILUt5dtDKT8kanjaCMDJ59ecVygGTtViCzADNfR4el7KNj4nF1vazbNCGXruJK4yK07RhJfDbny89B24rJ2+W2OgxgCtHQG/065csxXYTj04rsOKLNz5IoJsAjC8k9/Sp7UgWKJjBBqhJIiwyZQycAbfU1o2MZuBFGAFLkfhxUy2LI5ZA1xHvGNqYPb6VS164K3EG0ceWx69cVfkVTeSKSCeBjPf0/rWF4gBVkJQhd2wp038dPxrGVrCILW6xHL+7BJbAc/w8VShLfaVH3gAQ205xW5pPgvU2jW6uTHb2Mi/KFJLEnnpWg3h200uPzSPnbkMx5x68dvwrknUUUYymjd+Cuqf8I74vi1tlRbq33Jblged6lSVPrgkZ9OOnFVPil4LmtNHn8QSQcyXO9pA6/vDK5O7juSe547cc1kfbL4RuYYJJLRXCyzqBtiOMnvweR1rbtLS68WaDaeGJNShsbH7QrfaJh8qDOWdhkZPI6YzjiuZS99SO+FvZtNHlsZbcsYBLtgKoRiSTjHABJH0ya9r+BHgm60n42eEjrkEmmi2dr145QBJgRNsZgOh3suAfSrWqa34C+CMqWfhEQeJ/FsRBfWbrbIkLMMMqgEBSBngYxnryc5vwc8cX+s/Fa41DV7mXULq6spkfzpNxAyhGOOMEcY7Gtak5yT5dDinywg7n2fd+FrTVrxpJLhhYgGWR14I5689vevMfE2rJNq8lnpTsdLs3G0kg/aCpBLfnx71l674+1I2MWnh2FnGRlVJViB0BYckexrmJvFzRwvD9mkNzIeZMDHPoPb+dePKi2ePOcZbI9ysdQaK41q8Zhb3P2WFA6H5VRgSV+nHWsXQdbm0HxTZXlxMzbjmSQDIKYweOh4A/pWf4L1i11DQPEFpKxLtZwqshO7IyRjPqMZ+lYv8AaUk072kqNKoKpbTZz5RJHA9c479K56lHS6KjPlPquz8XeGfEmiyS6dcefcjarq/EiN2XB5BrgtR8SJp3iy70ydYYQn72QKw4jIwGwe3r64rmPAug3Ona/Ldu4twYvL2RjO/nPJ78968x+P8Aq1z4f+Lmp3kciq720LHcN3BjI4Hc5HQ+prl5HJ6I7lO8bnmvxL1KPWtb1W6gRVtZLqVIQveFSQhGOgIA/OvKpmaKGR5Qwh28YXpk/wBTXY3Nwbry9oKKo2iJcY9c/lVXULQTw2drFxeXcohX0BZ1VMj1y3avoaf7uKSMObqeg/s++F003wxfeInQpe3rtAiy5DJApxkeu5snI7AdMV6jNYT6pYLdRp+7BIde5pLuxj8NabYaNGuy3sbdLdWOcsQOWPuT1rk5tZ1G4kltrKSWKBdzSBDwF6En2rgrfvJXPOk7u5Dqiv8AbPs05WS2jJzGpwM+/vXnWpTC5vg4TBYbeueh/pXVeJJli09UDZkZjukz1yO9Zvgzwdq3xA8VxaN4d09tRvHjYME+7ChK5Zj2APWuVyVN3Z14ek6zUYnefBvQbTWvDbR2t1GNdn1AQLbTMBGwK5UHHI45z6V3viT4h2/wft9S+G3j0x20F1bPead4hsYZFS53HIjZTnBVvlPzEAEE7cjPp1r+z54b8D+AJNDZY/8AhKpEW5k1gLtnE235VhbqBkYC5xjrmvhX4+fFDVvGFrpujarD5+q6FNKovmBDiNgMj16hc57qM9KrD1Fiqjgz69YVYOh7S12z1nxVNqDeDreeS5XZeOsTIq8HK8gH1PrXH30jnTRuKlVAXAHJHXitG51htY8K6HEybBFbrIPm+X7uOAPWuW1rUpEjCqcCP7uO2a9Hlt7p8ZU0k0OufElr4V+xXGpTPDp0s6ytHGMs2DjePQAfmBxk8V9HaTql3p8LxXCtdKMmNNuAQRwfxFfNmkX1qbuzvLuwtNQmtiFQ3UQkGBnAwewzn6gGvfvBesT64r3KMSbeRd8RHGSOMe1aaIeiiXle21Zv9Hcs68FW6j/6/tSahpBvJliCoxUcsp4B7H6VmeKNPMsr3ViHhumXDtGcbjno3p7EVNoOuFZPLcFZVGCp7n0/rin0uY/EdlcwzX/h+9sizSyy2jo0e/I8zb9elfF1wl1bzIl3bvBNDlXgk++rDqCK+x7K0Z7iO5V9hU/OM9Rnv7mvk7X3udV8T6pLKzTSi5k3zYxlQSAT79qKb1NIaMseB9H/ALavr+T7yxAOY+jvH3K56gHrinahAmr6fPp08XkXltJtCk8BG6HPpjmtHwdI+hQ2uq7Q728uyU/wtGf4T7H/ADmm+PL+Kw12S9EIWzuIsJJGMeYMfxfSupvoVFu54jd+Va+cu0kRuVVvoTWda2xuC8r/ACxqOvqfSpdQnM+8hs4kZmVenJpouw9qkO3aqZfp1JrWCuegiG8uGaTbGxWP+7/n3rPuN1wweTJYAAH/AD/n1zU8asQ7qpdychPQURxs7BmhYn0x0rpVky+p1Xw18X3Hhy4a1kcm3nIxnP7s+2e3qK9bg3zTPIkqzIx3Ar39ea8FjkHHy5YjG1RXW6H4q1DSbGGykkLIpLL2OOmPzrlqQUpaGE6SlqjMk027swqzjZGzfKCp6etdD4PtrY6tayagifZ0Y79wDLjqMg9eR0IpLDxK8lusd2sd5AwMbRyru2e49K6rw/4V0TxExNvcyafrCDiO6Ie2ds/KccHjtz3qalpKxyvTc7DWPjxewQLHp0nlTAgmSxzEvAx26EjivPv+EpTWtVW61tprls5YzSNJkZPHPXrj2xW7a+CP7NnebXoHkut3ywwtug2g4B3Drx61oTP4NsbJILAG81ZkIuAyFYrd+w3HtivJlRtsZ8yMvXGj8ZabLarbbbi2UC3uJJTiPuF56+2c4r1r9kD9rTUvgRrT+G9etbi78LytulihXMlg5I3OB94qQR8vPqM5wPKtNvLNZ3jllEFvnJkVc7eeo696n8VC30e8i+zzG6n1FBcSXPADAYVenSs480NDto4uVNcr2PQf2kvjdY/Gz4oReIYtBt7CLTk+y28twg86dd25Xk57clQfu7j0JNZ3h280q/iiuo9YnsYxx5yweYvHXIHQZ6V5HfXrNFhtqjvg9B7D0/zmrfh3WbnQ2aS2k8lm58txuSTjPzAmuinzdSJ1HUd2dzeWtnrV/PFJ4hMMwcNDdRjYDjsR2yKp/b9X8Joxj1WO6tQGVwWUiWM/eRlPr3A9K5u/+KelXU32fxHoIXOGivdL2gFfdGPb2qpNrnhe7CzWGpRoF48y7QpuPbOR6dq71TXUjl6JFDXv7Khug9vJtgY8pGOBxk/rXO28c1/IZrUJHAhEu3cN5Udf/wBVXdQjhlk/0W6s50bn9y+QD+NVW863kV4jG/lndsD+2eRkdvw70pUUvhLjdHTeG9Ee6WSadnO4+UIc58zPJwPXNemeAPD9pZeMobXUoPJithLLJbsw27woAVueQOSR2rhtF+KltpcJEuky/bMAJdREPhevQ9MZOK29W8ZeEbKOOSxm1HzZpcFZoDk55xn69/XNcXJK+xXI29jqfFzaPpfiddFtXWGdbOO5Xc/ylHZgAO+flI49MmuH+IHiSW38H/2LCUNve3UMrN5eTtU56+nsa5n4weNbnXfEZt9St4xBDbra28ceMQDhiVbBJBITOf7uOmK6KztZPEvwnSa3Vbu5066aK6mAx8pUFCemMgjp+QrrcbNNmqpvdGN4QNvcKltJBk2Um9Zu53Z6+uPy9q63xDrlpYeF4LcBZpZm2s7DlXJ6Af3cd65a00+70q1Uzw+VJJyWThSD0zT9RVJFjWQHht6rnnaQP61hKnzSuyEk5XN64v47iG3trNGYbAPn7Z60wW0FqzteO21I+FQZO89APaorxpLGG1kWPaX2jPfB9anvZDG0kbYKhskr6j3renTjHWx0RsZ8zrBE7FQWYYAbtXI30jWcL552sBtrotQkLW7yN/q1YE7ewJrkdRlluJJWQLtblcGuuK6nTDYp2Vqhlurk/Kyr+7yfvHoTUF4xkOwD5VhIJx78VfaEW9nJGxzMEwp/2iapSRq0zAHOWx9a2RZRuCWAyPl6dfvU1FaPAcF492Tg5q48UZsZ0KfOzpsb+7zk4qvn91EuMfNyVHP/AOqqRLLF9DFBoogWVv8ASHUlgMEL3rJ4kwGIA6Y7Y6CtXU7Vp5Y9hU/KqhVPQ9TWdYxpdX0cYTPmOI1wepJwKL2JPVtC8u38NW+9sIu5hgdxwK8+8K3LDX5LlxkXTlGA6EEk13mtRnSdNFjnbIiKqkdDxzmuE0lZEvYocAMitJhe3PFBZ1niaaVbKKRRtlhG5TnnJIArf0+cXvgW3vZ/muI5wpOc7RnJrltSu/t2koY1Z3XeCx/iPBUD6Vd8L3C3mgazZuzNPCvnqG5Axxn+lLsUhviBnj1q0lVgfOhJLLwvHT9KuxwvJpxeLgyAhGxVjXrGG40XRnGVkjdoRzwCw4NVLM3C6akACukJMeGOCG6j9Ke2qA88ubJrO5aCfKkNwm3nmqd1biGeYqu0HoD2rqfFUYk19fLIWLykZvTcM5rndRjaK9CNjYyjnOea2TdjmdjJh3Wt0fvYHTvV7y9ysAMoentVO5QI6ybiMHD89jTYNvlbUYsucYpi0Hqrx7t+MD+Kl3ZGRRGp2OCcA42gCkbmRcZwT1zTJN/wbqyadfPBOGaGQfJ32EmvTo1QyAiNijHJBOK8X3NG2Q21h0PevWPBOsnWtMBaaM3EQ8t1Y/Nz0OK5akep6OHnzWia9xaqqp5K4GDk96q+dJHG46ZPA9a17df3gik43fpSTWIy4QDB9RkiuFvuerFaaFG1uBH8xHy1qWesOpWLaWjGQPzrKuNOdVZeQucgjrVRZngkwVJAqJJM0jJwZ6VZ64xUv13HB9q6C31WT92dylSQCD16V5GNWk+TazBFPIPSul0fxBvjw+GbGFB4/EVzSp9Tvp4i257H4f1jzGwZMjphuorsrG7CqSzDafQ14fZ6w0Kq5kByeSOw+lddoviZPlRWLswzs5/SuKUNT0qdTmR6TNIFy0b7j9BWhp1/t2g9S3O41yVve7sSCTIx2rStrkkDLYPUMKyaOyMtD0axm8yFw5yPWtC1wZMZABGcGuG0vXTZkxTPvQ8Z71v22uxOyqhGSMLuPzH/AArFbh1OoMI2gKctTljbYF3VVs74TqGBwO3PWpXuI2wDkNnAxTTaAJLiW2UbT04qFbyVm3HJ9QDVxolkiGTxVKaLyiDWqbNoyTLtvLuIfGCa2Ldv3Yyck+tYMMwVQVYcjgGpZtQEbDZnd/KtIyJnHm2Nz7x4PFPWQLkbufSsL+0Ds/1vHtRDeK3V8tWntEYOnY1pGEmcnAqsyhct/KoZp/3YweKz5tQEe4Z7c7ulZSmiCxf3PlsV5VtvpXxj+2x8YDa+G7bwbp84a71Y773aclIVOVUEHjceuRgrmvevix8SrTwb4X1PVLqRWht4iwjkY7ZW6BB9T/KvzS8YeJLjxf4ju9Vu5Gae+kLsX4wOwGOwHA5r08FSu+Znz2Z4hRjyJ6szYIhDEiIcgehzn3qza/LMrg5PUZ7VFBlraZgMEEKGNWLNSVYqMkda+hvofJXJWl3Nuzz6Vq6OzeXPsPzMAAOh61kzYjUN29RW74cCrb+YXVSXHOeRxSuCZaWUqhiVlLq2QxrURwu0IcBRjOaxWcLqBHGGz8x71Y+1fZ4mY8n0/rUy1RV9T0H4L+GbHxr8VtA0a8bbYTTMLjnGVWN3OSeg+UDNW/FXhfQ9G8aeIG0+ZtUtobt4bO4kXb8gY8dAG2tkBu4A9axfhuDHcXl8QwMdscnOMHPH+fen3V0nmE/KnfaB/F/e/lXjVpSU9DCpWWwxpJ5y32jcmw85Y4/CqtxbvIjOGjVgDiST7oyT19ucn86nkQXDKu4+pwetXJtLXUvC98gV/MS4jjYquSoYcMT26nntmuWU11MKUeeokfcH7PN94S8deA5Ph94F8KLPpbWzRX+qXif6OJiMSsWI3SsTlhjg57V8uftm/BvXvg/4qsrWeaNtEmtdlldWyCJdwySrAd8d+ScHpX1d+xz8XNA1bwtD4SWG28M67pIEf2K3G2OZQOZlPUknOev5V6V8fPhfpf7RXw61HQbhl/t6yBaxn6FJh93nHfv9a5Kc/fu9z6ipSaVktD8Xvs/2dgpGwcggjj06dMY7V2Hwhu0T4oaRGitmYSxdePu5/pWX4m8P32lXV1p93bG1v7GV4LmJc43oxVv1HfFR/CO+8n4p+HZXIjUzsu+TjaTGy/hyRX0S/eQPn68Wk4n0VqurMDLF5gPPI7k1zF5rBhzI58vnAYVPrl39j1CcH5m3MN2OvPWuZuJmmyWQ8HjFefFcuh5Cjqep+BfE0FjFO9wnmZg/esvGxckbv89qvSXk00yT2kiqn3gyng4Nef8Ahe8nkW4NwuEI8vI4Iptzqd7pP2mG1eMRSDYschztz1IqZQTL5T6X+HvjZNWs/LRWW6tTtaOV1zJ/tKAeleL/ALSXiJNZ+J+qQ27+bJDBbQSMBwG27uPU/MOR9Km+GfiS38PfZ8/uJW+R7yQ/KoJycmvOdc1i51zx1capNOrG4vmIZhhQuNqk+i4Cke9c3s1zaHRD4SJdUMdvbW8UeyF0yyOo3M2eWz9K3fg3o48R/Ei1v2Hm22jE37ZIPKjagOf9on8U9q5LU2lM1wUn3R7tqN0JHrXb/BfXLXQYdeg3RW97qHlRxPOQMIvXr6HJH1NdLTSIknys9H8VXV9qmslbcgSTuwKk5WNc/ez7U61sf7N0RzbjfLIGEsxHDn+En+VS6drWgaHZyz3Oq2byzKTLJcTDJOePqPauM8eftAeEtGtVtdAjk1mRkYSyNlY0IPAGcc5/OuJU3LRHKqbk7IqeIJLXS9Ojlv1PzLujQcFnzwBX0H+wf468HL4cvYDOlt4ukvGS5j+9JKhbEW0dSuMDjoc18D6p401Lxxqr3mqS7J1+WK2jGyOMeirnpn3rtvhDrVz4R8XHVNOvVsdZtUaezM3zCSRR8yYPUsvAH+FFbB2g+59NlsY0Z+8fqZ8bnkuPBs8dlZTyXckJLSBMMoHXnsfpX5H+MpL3SfHep3UNyZZ0m80tkPlSenOc8cV9geIP2vNO8deA2TVNft9N11rZmaxtyyiKRfl2Pz94+nbNfDutaxLrV8lyY1jiYkImMA/lWOAw86c5Skj3MdUh7CMIu7Pa/CGrWniTQ4prSKGzjLmMQp0Q45XHYA1lXcK/aplDZTp7Vk/CmZYYZrUMqQK3nlj1z0ro2tUv7y9khPlRbvMVemFr0J+7Jnw1WNpsrQw/Z7fKruPUe/NeseFdcOlwbI5MCdEyVHAbHQ45/GvNZtNm0/S1uZW2RlgqhzhicZqz4LvC3nlnAiZ1ByOpPQ571N7q5grnvenrJJbhrlt0jtkjHWqGoaSJXS4tmEU9uQ25/uOoPzKfrVUXdxYafEzB5oSQBMp6ex/CrejapDdkLMwAlPJJwV9q53N3sRI2rHWpNXuLZpZYoFhOAq8E/wC96kV8wxyM99r9w8mTPcmLavGSZW6V9D3Wmrpd1NJMy29s4IiY8ndjpXzxplrJcQqoiMkklxJKR6bXPOe1dlGzHE62xWO58Omygj8u54hu4x90gnIPfBrhPE+oeXolzDOSYFVlR8j5Gz0/E11F5qUelEBJ2kt5hiZgMHPcf59K8o+IGqRzTC3iy4kk3MPRf4f1reLvI2grtHJhw0KI3y/7WO/eo5YQrfJ8xPTvU1vGJ22ueDyOa010SWXMiFfLH8Hf611bOx0yl2Kem7luFwqhpG2j2rYm0v5U804lUnIHes+HT5o2UsMOG3j8K22+X940n3hnNEmOMinDYgXCmWNY426cVNf6VLDGlwgV7aRziRTkqQMYI7VKkkt00eMICcZbkj3p0yyWccgjnMbM3zFej1nKWlzRM5rSZreO7V7lpFhc4Yr29z+NdRFvWTzoZGYoOdp6ZrhrKOaxuvJ1GFwdvzb+CueQa0rfV5VnW3SXaZGC7uhaqqU77GfsuY9Y0bXmjYbLx5kkQtLFLnCMOmM9TSa946hvppI7rS4p3VyhuISscnuQBwT9awPDvhrUJLf7VeS+Rb7g4dvvYHBwPp+FaXiRtDuLmFdDsrqPhvOkuJAzykjGQo6H09q89pxdjnlBRZSk1trmzSWORdoBZkwMrg4APrxV/XtLk0ltM8ziO5t1mgcOTuHTr24I9R/KsybwXetaxzuI4FkDMDM+zp3Y9hioF8cDw7HbWUu3W1tsxwP5mUt0/uKSemefrR7Ny2Hy3SsW2sSsZuHYSH/nky4b6Vg+JtKuLxmubeRg8SYdAcDGetWJvHUN1cSMti0Clt5Tfkt61mzeLrmbi3SGKJmKZdPmANbRhJMpRkjAbPyq65YdAWOP549/YdanuJEGlllkQ+Y3VRljjvz2r6g/Y7+APw/+K2geLvEfjq4+1Gyc2Fvp/wBpaEqzRJJ56lCCXBcqo9QeCTXyrZ2l1B5kE8ciTwsYJYyMEMOGBz7g12Ky33N0+UbDDujcRhfMRNwHT8q9OT4KC6+ENj4ked7bWr2dGsUL/ubm3fGcjqjqc4I64564HmLWzKDIi+XjkL/ICuwuviVqFvoOhaeJZlh0jANrMx8raBjKgc8DH0pyb+ydVOUZLUyNP8PX9nIVaFiS3BLjBwehB9fWvX/A+n+GvEHgvUtA8QiWPxBLep/ZMqoT5S+WuWZ/ught/wArHDeh61n3kMOn+GbvxBq9hJp8Ugja0WEgtPv9CTyOfwrJ0HVNJ1ZWlsXuBNbtnZOApBxxgZ4+vWuaXNKLJ9o4vVaGl8YvhHd6Ppul6lePbz3SD7PcSRTgyMi/6t2B4BP0798Cuc8AyzaPb3FtbXe6GUb5LdgQOowQM4J461oahpup67LLDY2onlx5jCdyFc4+TmuSh8YXekWlw8SfZdQtrnyp1UDpnnp1+tVTTlGz1KlKM1oeoStcsql1CI/Ko/LH3xWdrFlD/a9nGs7SNJDiUEfdw1UrPXrnXreK4jlkL7cMjZ3K3cHiluPmug0xbzNhAz9elPlMaatubUFpJqVvcs7uUs4dxiUcyNu/ljmo9aU2czvLhS5yUQ5Az0FX9KvrvTdCEUMqLDdozSPjLbTxgelUw9nYr++BZschj1PY0zqXdGRrUfk6dG4OE3fMAOORxXJagw8mFVHytJ+FdLqd09wlzO5CxAZ29j2xXNSbJriMMGIBAXaPlz71vFmo3aYZS2MlD07E1VuImzGSdrMCRge/pVxWWS4jjLqQzY47mopoy1wdvLDKhT1znpVoERxWLXKsCdrDjFLJaxm48tThI2HzDvxWzb25htWkYbS/C5/U1k3VqLdIndtjylsjr71aB7FLcZLp51UITkpjoOMVL4R01brxBbgjfDbZnc+m3p+tSWOksttbvIdouJiI1z820dePStrwrpv9mi4y26a4yBjsg4ING5mjV8XzRzWf2klhsZVA9SABXE6Xe+TNdXr/ACmGPlivfsPzrovGV0v2e0t1YnJyVXryf/rVzOpXDSW8OnwkI2/zpcj+LoB78VRd31NLS7l2hujIfmb51x0z7DtW38OZN2oXG8BjcWEkW3sxB/nXNw3nlIQNpZVwPftWx4TuTp+qHLbflyoY9BSluNHS62stx4Xt9gKOsqbiR2z1qdLdALvBDR/a1Le6Fef1rQvp1utAkt1j/wBZKpXnPO7p/SsuyDTvdQpjKopY9uvIqb6FHOeLbFLeS2l37vMMgOPQYxXFak0a6x5Yy8WDznoa7/xjaq1vK5k+a3KFQe24gNXm+rhf7QhZFCqWDHnrjtWsVoc89GNvsrDMiqMqNw3fWqsbbRuACqTurUuoV+1MFZWSRFYH6jpWVDtaPBO4Dg1Zj1LO0BPMU5GMGq67opFZuU6YqYbFR1AyrYzz6Uir5jMjfxdKewxyg7lJ9O9bng/WjoOswyFR5E2YpCeeDznisNF8tQjfJInP1qVZAxGTt7ZHXNZTTextTlyu6PfrRI7qMXEbrIp+6VPFWobeSRdyqWX1rg/hjqzSXJs5GUSLyEJ4I9a9SS1EL/KScHrXj1LqVmfQ0Xzq6MeS185QrdQTjtWZcWDqgdV6nacmuluLVpCX3E471SkhaTJGevSseY6ZU7nL3Fq6grtxxuNQW9xNbhdrZ54OOlbl1prhmbfuXGOKy5F8vBA2sDyK1jLTUz5bF/T/ABGYrgRyOIs8FWGd1dDBrnlbdrBznI5Py/SuInjH3sA546UkJmtwDE2zacketS4plxqSjsev6T4tks4wodmyMhs5BrpbXxk8MKys+4beBjpzXhFjqtwsLiRun3WHvWta6sxTcJsDPODWMqSZ2U8S9mfRMWpQTQxTJIQrDcp6k/hV631Ty7hSXXcBndnnNfP2n69LZ3CSoSWHO4uf5eldlY+O45pkBUQnIBCemK5nR7HoQxC3PeLDxI24KSAOo5xmtaDWFYgvJhgcBa8Kt/EjZby7jy1Y4GDkH862LPxUyooE+3aPkz/EfU1z+zaO2M4yZ7QniJlXax6Gn/235mS4JY9APSvLovGsZiXzpI4nBOQD7cGtH/hJUdEKHcx7q2anlZ16dDvxrDAgKVz2HXFNm1ZFYl+W9c9K4OTxMka5DbWzzg1H/wAJbF1LBvUnmklqPRHYTapNI42FlVefrVyy1bbt8xuf5Vwx8RLMvyPgdflOAfwqOHVdvJl469avlaM5zjax3t34ncyBUyyAVzviTxgun2ZkMh39NvfNYNxr09xmCNBtIz5neuc8Ttt0/Mjs5Minn0HNXCHMzzK1WMYux4R+1T4hn1TQbQSSyBzcA4/h4ycenAPSvm1mb5GbjHHFe4/H68N1osQkABW42xcccj0FeF+V5qKrNggH7pyBzxX1WHiowR8FjJOVW7LscZW1iBY5ZtxXHSrdvmAOVOQxB/DFQOWXZk4C8Gnx4LA52465rpfkcTEmkKqE/hzmtyz2rZlAoLsmAvvXPzKfPjViQNwx/jWqbhVj4d92dvyj9aNA0J1faA/THTNFvJJfXCwk54znpjHaqmWaHczYUHAXv9a0NHs2mu0bPDEZbPBHpWc58qFvqz0XR4X03wqGDlHnYh+OcdhVeKyWTzpG+UKm5j39utTanrH2bw5HYJGI7hpP+PjnO3tj0NZVvNI/+vkaVrgZIPsMV8/NuU2zz5q8rm3HYGFVdwwBU/ORiur8CR2z3N9a3Fm19BMq+ZCodhwRhyq/MQMjPbmuWl1Sa6tFg3KY1X5QRzxXdfs++IbSx8dXE2oXn2AJptw0DtjaZlaIhPm45G4H1xXNUbtodeD0rIxLXW9Z8O/FS6vfDCW2lv4dimvFkmB27YgMqw+8xbdjb35B6YP0Z4A/aYh8e+H7HWNOu7eLxI0atqWnwynfFMThvlJzj5SQ3Q881weqWPhnxlZ3mp2VtBqMV2h1HU53PkC2t2jxJFLIpB3EjoDn3HWvj34YfEa7+G/jLR9fto2nEEgjmt+80TY3ovoSBwRxuXtxW9LDxrU7xWp9JUxDpzs9Ue7/ALRfgPxD4g17V/HJtkaxkkV5JIzkklVXOznaDtBJ9cnvXz60K6Tren6zbH/UzRSyLgnJDjLAd+B+tfaHxo+IXh3VPhPd6x4fvY9U0zVLcMnlsAY9xAKuOqurdjznOBXybbafLr15bWVij3N1duIooRguWPYCuzDylCNpdDzMRGMpXXU9N8T3MF0fOjkG5wJAw54PNcrPeS71CMCOu38eK1tS8M6v4VtY7HWrcW155RKxbgSyg4yMZ46CuXl3yZw/yn+71rPmUjxHT9m3FnQDUJIbnyFkUO+A23setW7q6jDmVuucMM1zdu32eS3YN+8I2nud3rVxp0ulAjbJX74Pc+lCiRY07jVpLeyadZljij+aTcOAMenpXP288t7oou4tyM3zq2eQN3OaoeMLz7DpUVru3PdNhk9iCcn27Vp+A4X1PwpqNp5u2a3kUqxIOE6nv9a05eWPMbxhaNwN01xbg8BtuT7n2rl/EAaa4WeXzAxG0MDjHpiur+wxwthW3sHxg8YFEnhae8OVKKP7zGjmuhLc5HTrGW6dWlZnjXrliQfTr0OaTVFWKArImUBx/nNdNDY/Y3bzWYOnymPqp9xWbfWaSphx8rNnb3zinFq5pTtzWOXsf3MwCgAj3rduLxptNMsZ2TRfMjKcEd+D6ZrBjsLq3ljleJlQNj5uM1sRhfsoXeN+Dwv8811NJnUnZ3JbzT7rxNNBqVvbtPc3C7rmOFCFMgGD09eDjrmsZpJlBhddrKefavcP2T7myvNa1bw7rF69lbSIb622YBmlChDHk9MjaQOpw2Olc9+0P4D/AOEL8VLdBIbeG6i8zyrY8Rt3JzwGJ61ze0tU5GjtdPmpe0TMD4W6xPD4htLZVE/nyiAxtj5gc/yNejQ2st1dT4GBGzlsdMAng+uDXg2m3kmn3tve2soWa3YSLLE3IPbBr12HULi7tftsUzpNcjeSv3jn+ntWGJjZ3PEr7psuw2t54m1F+PNs7Zg0zb+OPT/gOKt6PqyaR4iRbYL5KggCZcgrjnI9c96k0++g0HQZI7KFp7yTcbhzyACMDmubab+zZrK/uk81DMGeEnOVXGQa4km1Y52+h9O+HdattU0W2jjtVeVkAngBHzycjrWTqSReHtTiiurWSNfLLH5hhSemP8a4vw5qj20a6ppEyrBHLzak52DHA5610tu0WsRyfbLgfvh5uzOfm64+ma5WnG7ZnKakbsl9Bqei3FqyPHJbhrqNnYbeEIwef0rwqznk0zQzJB8k0BBIf7zbz8wNej+INUubHw3fvJtt2jgPllm+8xGF+teKalrNxcWskkk5clcy5GOg4r0sH7w4x6F/x1r0dva6bC4RJ1QzmXP94Y2kfrXkGoXb3V5LI7HJI+bt7Va1zUptYuvMcEJj6n2rMZdyEMOO4616UILc3UbI04bIsy7hs56r6V1WlMv2KOT5hEoxI+CdvoSQOlc/pNxHdW6REbZlXGK6TS5JdNjWW3x86lXhc/K6nqCOhFKUrMw1ubP9mM0IdFSQkcNxgc9OtJcaKPkVgCWGdgbpVDzobEqphO2QFlZR93H8NWNJui2oC33BXkXapJ53DtXPUvy3D4dSld2TWk0irH93ldo64qlJD9qQ7xgcEdq7G7lnvpFW62uy/KCFwFH4VnXFnFI+wKcZI/r1rmjiE9JGsaqOB8RWrpcC4WU3EMnPmeh/uk96zbWG2aQvNJsUcKc4+b61tXMi3ULW+/8AdZ3nPQY7CuOmDXEshlU4VuF7H3r27G8Kvu6nS/bNU0aTbb3jNbSYJUgZUdx0q2NevBHmOfbJ03hRn6+xrE0vUtjeRcOTBwBuB4/GtS8sGtVWZMPC3Vl6CsZRVzZcsuhVuLy6uFYT3c8oYklDIdn5VErGRSWJ6euacsa3DFUYszHAUDrXQeHvh3rmuNdvbadP9ltYjLPdDGxAO3XJPsBRdJ6GmiObkZIVUp1qfT7GbVryC0sIWnvZpFiht1I3PI33VGe5Pr7c1nfaDN80ZyuOvWnWtzeWN9b3ljNJa30EiyQzxNtaOQHKuD2IPIIqnG+nUTXM7H2zp/7NXxE+C2k6ZJ4V8XwQX+oPHJqtnewILWOdVJTaxUtx90twfpgCvmH4reF/F3gf4iapY+KLVLbXLyR9QkWD5o5/OdmLxHHKlt2OARgj0z9TfAv40fE/x54DuLvxDHpfi3QbXdHK0UbRam2M/MdvylRjrtBOScmvNvjp8QtF+M2ueDbnRXurmXS4JobuK7iPmqjPGykyD5XClRjaTgMM4rz6VRqrKM9fMzlh5x96x5H4R8N3l95N5qVoYrBSWR5cKX7YxnIOfWti80e0vEe3iCh5CEAkAx0559MV6QvhWxv9PjvdUubyyhA3QR2ABZwTyoB7mub1PT3n1AJa2C2xaQGKKT5SU7A5zjNb8zZ5cqkkzmvi9NqPj6+0eK28o2FhBHZ29mvyLGAMPKe3PA9tvHU5WPQofDcFtaod94qbnulHMjnmu0j0bTNV0a/iuYJtJ1+BfNtWIBhvexTHYgdfqKoaitvH4ZnkuSDeW0irGmfnZW6/XnvRKWmpXtJTsip4SuJtPm/tG5VbyLhfJkYJvwcgZHSpviB4Ht/FUb634ftobW6kcPcae53BjwuUbp0HI70eH9HkuNJWaWJ5E6xhVyrsx5/AVveHZvskMdu22Hc21c/dHYH/AOvXne2tLmiaKXI9Dwa11i70e8nht5PstzHmORBkoSO2PX0rotJvrm8uUE5zuX5Rg53H15r2fxp4L0pbVr+/mtGugrI3l7epHyscAZNeSanZN4ddZ5x5TyDES98+pXsOtelTqqorno05KokzrbjVY7HTo4Y0yIlHzdfmrnLi/M0e4N5jtyQSMjBqPQ7NvEEzRRSszZLnacKqjGWPtzW3qehQaba3MMG67uCgLSOoykg6Ae2K00NpS5TndTXzNPmknmPmKyCOJRgN83OT2rOuNsTRKiZlRQHbH8RNaOqR/ZVt7cjNwql26nk9v61mrCPORipYqMj3PqapGy1Ra0O1iMN7Oxw8QCInYu3f8qh0G3W5t7iYlsPcrHkDr0x+PNTHbb2ExK/IylmAP3f/AK+a6Hw5pBt/B1hcSEybXaV2bsSflH1A/lWoxNY082NmiyMpEKEALyDzya47VvmYNuyuw/Ke3Tniu11+1Nvp0MDSebPcrmRecoowf1zXK3FuslysTDKtKqZxzg9qadgZPcWotLmBkPyRxjgnnJ64rSEa23myKRuLbOmDjrkVDBZwNqk08pMy8KoHbtTZpz5jx7sLGCCeuGNWtSTN1xmOoPOzCQwIdoJ654rnoSJGJcje/JJ7EVpa3eW0lyghZsRptLep75rIE0cjYIwpOCaN2IZeSKqxIh2u7YDDoAOtdJplxGNQkkcbVWIoMdCc9a42+mDPJJjasanZj8Oa6JZnhkAcCMGIblP0702M9K0plk0S8kLMj2syylApIAzwAaq6HmHxNqFvg4kEgHpng/1qHR71R4duVZdqTOuWwMOO4P41Ho84k8WREsfJZ1L7Rg88DH5UrFFXxVturXVBHJgpatL8wzuCEcV5dqUwMkYzwoyufzr1jxqiWN9PDAGw9vIACOTzgfhXlFwySSrhQVjRst6960i2jKp7zsStOXVHBwCv5HrVJVZr6RCwxtBA6CnWswliBI2qGwKZNcIlyG2cA457571bRkkTqpbNOYFdpHLZ/h7VGrFny2QWxgL0Aq7LCPKCqdvzc+uKQ3ETeLiMswAlBoaNWi3qfY47Go4wFG7GF6VJ+7g65Ebc7j3NFxJdS1o2rTafdQ3CSA3EJ+XI6gV9E+FdYTxBo9tPCVafysSR55WvmefbbusqkFQOua774d+Jl0m6kHmFUmI3ofu49frXn4ijzao9TB1nF2Z7fGqMrKfXG3HeoGgXoRjHtVmzmiuo/NiIKHnIORVnyfMXPFeO3yn01jn763LKy5yvGMVl3mkxq+9RuGOfrXYS2cckfzDHoFqpJapu24wPcUKbK5E9zirq14xsO0D0qqsPmL1wR8vSuuurX946lcKOnHWseXT2aTEQB55UVqpnLKk1qjNt7UNGeCPX0NEdmFkIBAB5AqxtaOYxc7l6irUcIVC23aafMZ8rI496RqCOQcda0IY8ruK4I6n29KqRvucqVOa0YI2UbCc57VEpW2Noplm1aWNThuP7vYVbea6hTe27a3VuuKSzt2YrvXaO59a2bHGSHQY/hyOtYuR1RkzHXXpcFXHmuPuttPr3qzb6/PGu4Tk4H3NxGP0rofLglZy0SyE/xAYqe3sYGZf9HQjOTuWp5kdcZyfUzLXXGkUq5wwXP36tprUoOwEHjJ+U81vx6LasoIiR2PbZW/p9hDDllhjQnHGBjFToXzyOXs7m7mjKW8TSAHJOMEf/AFq3dP0e5lYNdng8ttOdtb9raIFbKhVByBirIijUHA4Pv1qZSM5Sb3KPlpbw7VwFzgetcP4y1QJayxq2TkZ9h3NdlqkywqSpyc4P0xXlPiS6+2NIuMA5V+e3auijq7nn15WTPFfjhIZbO0UEFFYMuBg7j714zCobVAFOED5PuK9V+MLSNpBYksEkCjd615layJHG2D0GBx0r6Gj8J8jiHedyeSQPdBWBUM3H880xpc/7Xb0qNpCzeYuC+MLnmmtJuUbf/wBVbnITq5aZd3IxjNXGkPkgLlcr1qjG0bYUPhqvXDH7OoAyBxUNj3J4YHeNWeT5fauq0FYrcLJJypGOnA9653SYU2ksdqdfm6VvWtxloth/dqOqjg/Wuaq3Z3CT0N66CzKoUNIrDBJ7+hFQKzrdBeAkYIHHQ9+fWqd1rX2dSWUyHbwBzjnFSzyyxvNBPIvnIqnEJyOf615Uos45LqPjaaS8kjVzEnXb2qnrt07Wk6xSeTHHjCgc+4zT7N4/tS/v/mx1bua1/CnhV/iP440rw61wlg+pzLbC4AyqMehYZ55x+dc8ZKMryKpRcppROCg8QahZ2l3aRahPbaddHbcWqPhZcYxuXvg9Pfp61Qk02zulBRflYbQAxOfbP17Zr6J8T/s/6J8OdT03w94u8N662sR3bvdaxpsw8i6tR0aCMkkgZTJ25zkZJrw34peH4/AfjzWtFtEuUtLeRTbfbD+9MTxqwB7EgkgHrwfevWoVIVHamepWoVKavINPvpNHsri1iuZGtbhgxhWQ4dsYJOOp9CeR9K1PC2qN4XubPUrOESalZTpcxO0hVd6sCBj0IHauES6eQhiuO9S2upEyFUOwE9M5zgfpW7gc6nsfVvxa/aJ8LfFXwlY2Nt4QuND8SQzRy/bt8LwZAxIgKtvIYE7dyg5wSB0rxe8X7GWBw+5iAy9M9aSy+G3iuDQdC8QaZbNqdrqciRxx2pzKrFsIrKTkEnAHPftXqfxy+C/iTwBJZanqen21tZ6goxHZy744ZQgzFnHXjqeDyMg4z5tRRi1YdalKa5kjx+VTGsbKxMxz+8HSrxvIvswZVWCRdokKg9ScA9KjXG1hN+6jjHzEdF9ucV9I/sV/syn42+LJtX1u2ZvBtgymWRwALyTp5K+o/vHpjgZPSZz0SRyU6Tlq+gnwh/YXtPjv8N4/GN748awm+yyPBp9tbozQEZIEpYnknJ4xwa8j/ZR+B9x8aviJe+Gf7Ym0i4TSL27jeE5R5oXiRVbdn5CZSSRyNoIPUV+kX7Q/wh0L4b/CzXdS8DRP4RuktX3f2RhFkG04DL93n1PavzU/Za+JH/Ct/jlomp/25beHrFhNa3t9dbRHDCybiSTwMvHGo925p06lRuVN62PbVKHJGS6mTqmj33h/xJfabqMXkX+nyPbzRMMYdTggj2I/EEH2G7p9xBNaxCQiOV9x6Yrt/wBoWTwp448TXXjDwVr0WuyT7pdYiXIdJeAkpUgbUYDA9SFx3NeP299LJCZI41CMMhM+gwetRFS5dTy68fZzsaGq3EM6TTAYEbA/LycGufh8Utod1LNZzqspXZl4w5A9BnpSx6g+n28zK6CUKWUE8fT3riroyOzSdd7biehrppU76szgtbmpc6095dNNK+Sx3EYABNRJcRyZ34jPYjvWOJAsmM4/Cpo5AzEOc47+tdZojTS8SBkkjkZCh3K0bFSrcc5B68D6Y4xVibVbi4jBnupLkbtwaZixPrkk1mXluIbdZI+hPJqC3ma5Uo3AX7h7e9Ty3NOZ7Gq8NtdKcRLCxH8PAPvXfeCtYkk06305AkkkLMIg65YAnPJ9K8qMrKGw5bb6Vt+Ftf8A7K1iCRsiHcI5nychT/8AXrOrTconPUjzRseuQyRX2reVArRwMMPGv/LT1o8d2VnZ6bbJaoUzl23csD0/KrGkW9xa215qlgVVbZMMf4ued2PpWP4i1K91hxHKN8jKr9MttxkmvLjpNJnCt9SHQvE1zoZ8lY8xMPvMfl69R7813nh3Vkv5lngl81WI/eY2g8/pXGeA9L07Wr57PUJWjVhlNmMOw/h+vHHrXSNoup+C9QjjjTzLGdmWGaYfI2cnB/2l64rKvKOyIcVJifFnU7m30WziZ/NS6uPvMu3hQTx+OB+NeH6hqXnSG2SRyrElznkgdK9J+KesX+oXsMM8iGCwiKRCM/KS2CfxrzG301f7QWZrlBnO4Px19K9LCx5adjqpxsrspMBLwOCTyT3qk2QpA61pX03JjULjP0NZ3l+WvqP1rqhoWyxHI8CrOrhZYz8vGeO9dbp93HqFkHhblVxJGOv1rjli3x4AO7GcGnaHDqF5rFnZ6Wkkt9dSiGKNB94k4wfb8OmTRKPMzKasrnfQXCeXJbTFSkpBDZGVcD655HasNbi6+1IbaOaW4VhtCIWyR9O2K+iNA/Zts9Pihm8Q3TajrCkObG2wYE4z5ecZOT/F/KmX8NtFMIxaQ2vO12iXa0fPU9OK45T6HnOr0OOt8yaDDftEY3lixtkXByTgkjtVdtMClJI8P22/hWnY210b/WLaeb9yZBJHIDlOmM59MfrSJbv8yO4XH8QFefJcsrjjJdTxFrdpFLD5AeqsPvVRmk0yOfbJp7TTZPzedtyPpipvtMrlYFcYU/KcVS1HdJIhbGQSOQM5719O9jqp+67MtD+wnRQLKe2dmw2J9wx9CKfb6qkKvbpIfszt/EMkVkcyYAAPy8H0oadOkZUuF6is7X1O+Js6Tia+Dom4R8j05r1XwFqt5omoJcWk7JEHCSxnlJF54Ye2e1ebeDbd7y8MPyli6sPXGDkD1xXXabIou5oGZw4mIH5f4V5taT5lYynfm0PPNY02XTde1G3kiWLy53LKOwJyNvtg1Lp9uUYTKyhkIJBGSKdrerSazr15cO+GdyCMjnHGT68CjSlkW88lMiNjhyOhHaux7anXFNWZ9bfsQfGBPBXia/8AC15sh0rxA6kSsP8AUXIQIpP+ywCjA6EA98179qn7J1n8N/D+v6pY2n9ualdabcWkKthVWOT5jjA67gD3I59Tn5a/Zg+F9zrnijSvFN7pU2ueG7aeWG5Ni6h7OZceS0g3bsdCNoPB56V+n+k+NLPxF4fuoZrX7Bqekgb7WRgSFx8rgd1POPpXzNduOIa5j6SPN7BaaM/N3T40DJqF2XeCGIQw4U7gwOCOnByOp6Vi+Irq3uvGujTrbtJatJG04iG5zFnLYHrgE+1e/fFnSNA+FfxY0h7x1bQ/EX2m9gtpI8hLjI3x+4ZpCwGODuz2FcTdaX4d8NePk1G51RIzLZSP5C7QsO9h8uOwwP07V7NFupT5mfC4ujKnUaaOL+JfhmPw/qkOnxXJuLK4/wBLsLraQ+3I3Rk9yemB2OeO3hPirxZDqfiK4063fzLWAgeehGGbvtx1wK7H4peKtW8cXFnoPhe1vbx7GW4eO+3DIjYlQuSRt9cHB46da4/R/gP4h+z2lxczx2E6/cgMZUsOCSM9eeM11Kn7jV9SaKjHWR778P8AR0t9LjFyJEmt4dkfyn+MAgnI5HOOKyfFnhu70/VplihEdtCVXzG4wSM9K1vDvi668LtZPq2ltJe24BaKQFYnUcAscZ5/nWuvxS8O6v4gv4fEel3ljDeOuFh/fCMEdcgZx3BA6dcV4ccLUUm2Q+Vu6IPD/hO28W+H7a4/dSXzMSFf7kQBxyD1OP1NeffHzwzPZQ2Nz+78iGZ1iTH7wx4/iOAeuD6V6BqF1oGhahOvh/WLbUdCmZQ1wk2WgZjtwR1ODzxWT8YtBfSNJlsrjV3vnltGUTEZXzRzlM85xwecZ6V2U7w0O2m3oeCaHqcWk6pbyu37mOQO6qeCNwyD7Y7V6D481/TI7yOXSVeSzZkJlk/5a4GTx2615MscSqkO8eYoAAyCVbB4Hr0qcXZUl2LA/dbdn06V6R3Ncxom4a+vZZX5kkfPHYEcAD2q4bNlUux2Io5GPpzS6HZrcRTSyw70+6obnnPXHqK1dfuh/Y5tEByuQ0pHzfX9elWkdVrHM6l9oaxgdI/3V1IY0C8lwvLHA7V6do9h9k8JztK6yoZ0W3jdSCxA5wPTrzXKXWnzW+oWsikC1sbWNYgBwZJBlyPU4xmuqnvjFpmj27LvjwVZc/MSxzk/yrQdih4gs0a6Ny8mJXiWJvyyP8+1cV9n23252+4hkUD+Ijoc112rP9ovEhLDzd2S3Uhf8abfWltashkO071Hz8sR1qrha5mR2cdp4d/tJ5NlxLN9niiPc9SfyrkrvUPJVogzAZJYqckntV3xHqkryeX5ji3XJVO3PGfriuUlkwUZ24IzkcA0yXoLcPJ/EF2seW9T1qk7EI391hhRTp7h55GUj5VOfTFUlk82QkblXOAD2q4xILEUIn2AjcGIGPUZ5q7r16WjvJVXcQhUZ9MAZqXTYYhp8k0iDzsgIDwV56e/FZmrXiRpKBkrIpU8dM8YFWr3EzvPD06x6eIHzvlhTYnJGfWtzw7amPxVbXBHmIrKoGep56/Q1yvha485r63z81vFA4YHsBg5/EV0NhNs1CF1Q5aVBtHTrzgd6JRZcddUXviRCW1qIIVVnspAHQ5O8NnmvGiytHM45BGAe2cV6n46lNhrknBiVIFTcOg75PpmvJru6j2lUO8CTcGHHAprYzqdxbN90MkZxhHDDHfNP+VpPmTcdhI9jmoLdTl8vl2XqPXqM1Kkh8tJM85z9aNzK7L0X7xixXC4qVVMilVODjjJqO1beo3ZBIyeOlXYrU7WAOc9x1osF2VBzJt+9xyKX5vLYYyhX5R3FIyjzCxPPPJqUQhYztJIAyNo7Z5NNbgnfQgt41uGlibHI+Xd1q1p+9LpkRtj9V9/rVWSRLeZXH8I3E56c1dnie2nMucNIMg+9KfvaFp8rTPZvh/4hRre0hkJk2j5D3PtXptuwuVVx0b1FfOnhPU/7P1KJnl2q5WT5eMMBjivftDuE1DT0lt32Nwdvp9a+fxNLlkfV4OqpRNOONZ2ZSu3A4wOtVZo9qkEc+9TxytIxBXaw61MY14OMHPOK4z1VqjKkjMnlrtAU9eKpPo+2ZpEGMjpXTTae0ih4xhicgGkW3lCtuTJY4OBxSuKxxNxZh2LheM4zjmopbF9wY/d711t1pxmcbUBIzlVqoumsMhcsO6nqK05jNw1MCK3STIRGJPoKuw2f3XPykcYPWtVNP2qFCkrnOcVOtmrHhT+X8qOYnlsMtLVZV5HOa1LfT92AwwAePWls7DZErLxz0I5rWt7d9wI281i2zaMe4630392uBsXpzWhY2ixbkYBh645pY4biED5VOTj6Vd2ui4VOvXioNk0NtYyj9Poa0oQuAT1rNkWRVG0EE9KQPPtJjJzjoakbNxbgplcA59qfNMNhOcMRgAVlrNIsalhlu4pWmdg275e4p7GcloZWuSCKGRWJViPlXPeuA1e3aNfmAfzDng1397CLg/vPm2jO6uA1S8Md5JEwACgsnHT0FdMZW2PPqR0uzw343KYLOJYz96T5gfXtXlWP3cYBGxevvXp/wAar6Ke5t1R8yLKGdce1eX7WO1eFXOMH0r3sPflR8riLc7DlWwF4xxTUb94UC8YqyZFxhRyKgZWbp8zfyrsOUIdschZVyBxWnG3nN8uSO4qhD1VFUJg8qR/WtmxjFupJxk9KXK5NDVki1ZSHy2AG1QPWrdlOLOTO75W6Z5GagZlaPO3Dn0qOS4McaggMPp0rs9gmtTBvmepstdZmDmNS2c8dKnaOMKZN5DHn0/KucS6fczI2BgcNWktyLjau4k/xHGQKiWFhIylEvfdi+RVOFyOOa9J/ZktY9R+P3g61lZiounlbb947Inc4GO+0A+oJrytpGtpkwdwz+ldH8OfF0fg3x5pWsSzT2qWrMGubQAyruUg7cnsCf5YryMVlz5G6audWFtCqmz9OviVHov9j2Ou6rbw6rcWTn7HcTruS3ViAcj1Hf6V+fH7a2g3Oi+J9BklSzu7eS2m26tZci6BYMFY46oAQAxOASQAAa/Q34S+P/h38QdMsotD1Ma9a3kX2eaJ1/eK+PmaSMjch4xyOv0r5U/4KM+ALT4eaXpdtp9/t0nVJmmg07jfDJGu5nyedvTp/E1fN4D2lKsuZH1WKlGpScT4O8zaAMEOPyqpNuuJFyCf3ozznipUtrhsJHE1w5CqPKXIyTgA49e3qeK0Nf8ADut+DbtbbWdJuNKmZNyrdR7Cw4ORk4PXsSa+uVlsfK8krXPT/hD8TNW0rxN4J0uTUZYrCw1aObAOMxbhlMdCMHAHHtX6Gftga1pN1oPgOW/gMmiXWoKtxH91jmNsHA5OOuB6fn+UUNy8N5bXUEypPFIskTqecqwYED2I96+g/HP7VWt/FT4VaN4c8QwSTeINMvY7mDU7QqBcBeCZEwCHAPy7QQSOdvSvIxNBzlzRPToVY8nJIz/Ba+E7Xx7dzeM47y98NWNzP5VjZybJ58SbY1LZHyhc5yc5wAR0r9JPgb+1R8M9W0+x8LeGoU8PyRII7TS5FCFgOoXBO4jgnk9e1eIfsV+Bfh18WvgHrWgalpdrd+I5rmY6hLJGPODN9x0bqAF249we/NfGXxP8Mav8H/irqmj/AGyS3vdJul8i6hkZZEH34nBz1wy8+oI9q86VOVWXuux0xjShH3kfpn+2F8ZdI8NfBvXrK9vYf7T1mwltrOwY585iO4HQc/e6Zr4v/Yv/AGNdN/aOj8U654guL620WxT7HZzWspRmumUszDHUIpQehLMCOK+c/EPiDUNYuLm81PVr3Ur27BNxNdy+Yzk8nGeMZycDgdgK+z/2S/2rfDXwR/ZjutMKyS+KXv7mdLXaQrq8jFGDE46YHJHI645PVGH1ZSnJkOqp2hBHz18QPhmvwV+Fupadcz79f1nXpLWOSNWQ/ZLXJD8k5WQjPHQy45ryCC4uGk2mRjGVO5uQc11fxe+MmvfGTxKl/qZRY7VDFb20I+SMbicH1JycmuRWUKhRVwfrmu6nzSgnU3OCuouXubGffNO8zF2GNwAHtj0qCFXaMr1JJ69auybWuGlIySO9VWuEZCoCsGP5e+a6Voc/QpSOzSEAHj2qzbqFxuOSeopjsPlLxgn+8KVcKx5+Y9AetVcztqaMGJIXjb5Vx8oPIzTbezMUZD4DMvbofaktmbo2CcY61I0crYCHkZA7jFSWUN21QOQCccfzpJGeIblXcHHar0VksisoYNxjGefrUc1h5chVJd6Y4z2qiTu/h/qD63p9/btcvDcxjYqbuJYz97juR0r0KFhY6fHKYB9qujtkZD0CjCgfhXg9pdnTLuCeBdrxMCCpx0r1PSfEVzrVrJdxzCO3j2s6DGA54xXlYik786OGpCSdyla2fnapcQxs1tPPIyxrH24zjjoeM16Xrfia41fwvp1vdhSLHaQYwQxx8p3d8+nH515t5dxb6wNRgHmyRDzPlBHyjrj1bnt0ruLTQfEf7RHiaLTfC+mYlkEcV3NGCLa0hyRvmYnr1OB8zADbgZI4pQUpIqnB1GkjxfxF4ofW/EF5PG+6DfmKLHy7F4z+Jql9rEsLkhQqknAHBNe9ftbeCfC3wP0vwt4C0FYLzV1iOqa1rki4uLmZsxoCQfljGZHCdFwmO+fm61by8K2djsCQa9iCTiuTY7Jw9noTzZhYjfuz3qsdxHXP86JixkZB0GcfSmQ7fMUkjOOMnFaR9059ydmNugCsclc89a1fBOsy+F/EdlrCqXML7WUEK2GGCQccHHepNP8ACt9rEW9UEMTYcTSDII749veu18B+DUs/NmlaK6uo8MsTrlGHPXP8qUqiRMkmrM9h8L6p4f8AEHhu8uxe3l3qMiERWfnsPIYdmOc5PfPYDFZOoadEzyqtxM07Y3ySEtuYZOQPTFd1+yX4B8ELpOtDxw+nx6pNcMzLcybEEKqCGR+CGyT0PQYrwzX/AItWVr4u1eBLSSDSPtsyWXBDpAHKqT3OQN3Toa4NZt2OWrhHFKUJHaXFnF4f0ODWBI7xpdhHgAz5ijqD2y3QDjmr+seHRHZWuo6cPP064QSpMsoZdrfd965jxNcHxp4H0y10eeF4oz9pNusn7y5PIwyccjOcE1mfCr4uHwHBcaHriGXSfMZ4ZsDdaNk7gQOCjEcDseapx5jL2fNC7Wp4vzGYwW2EsG3Gnas6XHzLgs3Uirmn2Z1u6MduAY03M2eML61W1ayTTtSlgikMsaqDu2ngkE/Tt616ibOjl6kOkxJcTPFnY7Rsy7hnoMk1lQ2kyTs2FBbg46da3tGuxZ6xA0hVYcmJ3HJ2twSPWquoNBDqF1Hbvuh8wrGwOcjsavY7YaxNXwyzx3kD4KtHKG3KcDjt+Irq768kGsXivxOz+ahVfvZ9Px4rkPDOoJb34aaPz124IB/Diu01Py9NuLO+kT7WDtLQ7uXUchT785FeZUjqHJeSubf/AApGbxH8PpvEGkyifVoyZobKPaPNQHDhix5PevLbG6MMbbeWXllxkr9fT/PSvcfCF9Fp9rBqNveP5StlbSNjlVI5XPfp+VQfET4HS6xZ6h4s8ItAYYoftV5ogUoQcc+UEHcc7Rglj1zxRSn9iR60qN4qUCv+zV8RNa8G/ESzl8O34t7mRZFurW5lxBPGACykZ29jtOCQeeckH9Nvg/8AGbwZ8aNJW502aKDWLFPIuLWUYnVD1UqeoOB19OK/HHVvEsGpXtjqtnCtlPGqo62+AowvJwO5B/PvX158L/ibofhX4MaH47ksLPU/FiWr6WbViI2ubpXGGkIGQTtB3DquMVyYrCyU1Nam1LFQjDlndPueL/tjfFDWPE3xkv7C51CJ4PC13NZ2bW0m5EO9Sx69flVW6YKMPetD4fWGoePIZte8Xaq2nxtEnkXEaI0l0mcIAPQ84IwfpXj/AI60W9028uX1K0m06+vpjdrBMSQ4dyTtYn5iN3OTnB+bB6+oeA/irrPgHQI7W502x1OHyiiw5y4BH3iwPBxjHBHt3r1IwUYKJ4WKl7VuW52tv4n8NaOtxaWOk3GozTbfmjYoqkDhs9+xweBT7j4l6pqWki1n0eDU3i4jaXAC4HIJHqPTHSsO++POhX1tFbSeFbiGzhQhVhZQCTy27Hqent6dKyV+OHhKNlZ7DULK4j4NtAEcD/aDenOMkiriux4/sJvWx0cfjXxEuntbN5L2753JcIJGB6Y9f1rBuPE19aaDNpcyxzxTyLIZptxdNowoX0GeffPaqlx8ZvD+rNbafp+nXUr3UnzTS7QVwOACDnmsjxJ4xFmzhbJJ0jODwTgDsTTs7nRCm+qLE0gv/Lk2LkD5nU4Zh6Z9a6nwv4gXxJbnTboDFiuUnnfORtOAB0xz09q8Mn16+1qeKKGXysN8sMP3sk/z+vavQtG1ab7HHpl1BbRyRxYeaJeZHJ69eeM96560Ha6O6FJsf8Lfg1qHjLR9c1+e9i0Pw7pUjQ3Gp3RG6VznEUQJwXI6sRgZAGTnFXU9G0a41KAaI91DYKFaVrzG6RicHAAwBjt2r07x54z0LxV4T0fwfoWljTNG0qUTCTzA8UpCE/Pjhm3ndnnn3wa4Gz8grueJhCg+ZgD17Aeppwl7RXaO2MX1L1usbaW8zxCJ9+xQvA47mqP2GW5vIrZE3vzLsX+6B8xPtW1G1hBpZidyZnk6f7IrPbUrWG4u2VwiyDy1kHTZ1yPxreJuaM1unli2MqzCEiNW3cMxALEf41mX98Z3X94AkabCy/XNZ7atbbfKR8RLna2evrWNeeIIo1wh8wd1XjH1rRIqWxvrr5s7l57eJH3cMJBkY9a5jxDr099fb45F+Y5MijgH0FZOra1c3DHafKU8fLWVJck7mY7QvG0dAadjJsmvLlyxyXyByWPJrPZpLjYn3sfKM/zoB3N83VujZqOa58ttkWGYfebPINUkQ2RXDDf5aOTtOX45+lLHCyqV37Gb5UZlzgnnJ9aLXfFDsLZK85xzzVy1XyWaeQNuUZ29RntV3toJPQm2pYfZIpX3eTl375Yrjr9eaxJGPmzOzeaFIKIOxz0q5cXDyN85ByCzn+VUbN9yTMSSS4O3H6Va7merOu8HyMsfillY+d9miUcdPnOf0rr/AAzM0mqwbyEGSQ3fgdq4LwnMVbW3V9vmhELY4PJzxXb+EpFXWPNY+ZFFaPMFxnBJwP1pyN4aKxV+JF6Y9YmuJhvDKAfTAXjNeUAMY1ZwSNxVv6/rXa+NruXUNSvbibADxplf4fwHbiuPjhZUjSRss3QA9KVtDKproTQtt/ebdoYYx70qvs2LtwOw96SRsqqjJ2/Mc8Ulu/nSByPlB6A1SWhnZ9DTt1eR0zwzHkfhWo0j29rGAo3b9vHU1m2Kk3CuzYC5P6YFacpJQAjJUhhjr/8AqqS7MgkhRiVkUFSRk+vFIFKwRRxcBMqP92n3K/vDGy4bOeORQsACqhbAzxg9KB2M+aDkPj5t+3Ht6Vo6fcfaH+zSIXkCEoxGQGFQy27rvJOcGqNxNLamKSNtrI4YHv7j6UxNXOk08B7pUypQ9/fsRXsPgXWnjkXzAGAI384yuMg144snnCK5jxsOGJ6HPfivQvC+rRJBbRqc3QXe57Fc8jNcWJp8yuenhKjgz3W0jS+hV1THHFRtZyJKMj5ar+G7xZIkiEmTIgdPp3FdQlmJIzvGA3dTXzr0Prab54pmVGu10bqBVxf3nylcA+1MWxlhZgSNueMnmrsdq0gXkqT0qLmsUU5LERtu2knHpWZLbbZtwU8nHHWuiazl6Fsr65pp0ss2S23HSqGc99ndG2qoKk81YW3WPOF59K3YNJIfIANSGyRcnaCelK6IsZFvHxlea0rKPOWxlj7dKi+yyKwVI269cVqrGI49rcfLj8aUmWPtmC8McY96tOybgf5GqaqjZIyfrVmGEdj36Gs7hykdxceXwAcE88VWW6kMpdFyuRnPFW7hSMHHPtVZbgNMAy7sDHtS5rBykqtJIzgMAMU+GORFKyHcBUsGNnyqDnipzCVpcwON1YxdcbEOyNccccda831mC4ZSUTFzngt0x3r1PUIQlvIznJUZUfzryfxRrPk/aZQ21Vwq/lW1G8mcVZKMT58+KUSw30MLnfKpZ5GHUknr9K4CV1juin3ht4Oc1v8Ajq8W+8UtJvbZnkg/ex2rn5mW4kXA47YHNfUUvdSPjq0k5Mk3FRuXpjNT29zG0gU/LxzVVgQMEHIGMfjTLjMU7KPlIXgY9a6Iq7OW+huBU3HHK9RUilpCp2jpnrWVZaom1UkVywODtGa1FRWwUbdx616MUkjF7lqE4yWX2pLqN/LA6ZANJHGduWYqWGAKlZXZsJyMd/8APpW62J1uZ+7yXJIOegzU9veurLk5TPzAccdqiuUaRs7sDtz0qs22EH/a6DPpU7CctdTpXPnbXUfLjBXPSmMIzIY2XzAR3A7j9fxqhY3B+UoxP1q9ueCTJwSwyfaiw/Q1PDevaz4L1ZdU0HVbjSdQ4BntnKttAIxn0749a0vFXizW/iBeR3XibV7rW7mOMwxzXbliiEglRk4AJAPTPFct5zff9T6VKkzNuCON38Nc8sJTk+ZrU6frFS3LfQ774NahY+CPGVrqa2drewR/LJaTMAs5zkJznngEHtj3zX0T8Sf2mpNbjNrp/wAObO7muk8pb7UZVljtmOAGC7ecA+q/jXx2k8iqjB2T5tpA5z7e1dDp/ja/0fLxTNLkBWSRiA2BivNxGXuT5ojp4iVNWPd/+GY/APjixmvtY8arp+tuil0sIIYLSBj0RUI+cHrz+nSvPviT+y8nw18Han4j03xvY61b2QDfZWtv3sitwMYbk/hjiuC1nXG11oZ7eSawuFYh0jclOvUA9D70zUPHGs3Glz6TeRQyWToFaaJDuLDoTkn8q872OIptcz0Oz21GUbpWZp/A349+IPgN41TxBpUa3qSKYbuzuGKpcIeQCQDgg4wQD39axfi38Sp/ix8Q9c8VvaLpcmqSLJ9jSYzLCBGikBioyCULdB94iuPW1IjADHcV+mKPsMuGaN+QMnJ61tGnFPmS1M3UlblexJDa3VxHIwzNtGXZj0FdRoesQSaPFbEYKIygDkHPqO/9K5BNQvrVXSO4aNHO19oHP50un6gYsLgjbyW71bgpbo51KzuWbezmtzL5kflkPu4Iwc0lwHSNiq5O35fqT/hVgalLdThEDqDj5ckdBVjUmDWKmQ+XMqEdOhpKNlYrS9yjqBjZAAOScDAPJ/Kvrf4e/sR6jrPw9eXU7N9P8QXC/u7OVkmTeo3AsQTtBXH3CR718kaJ4gttD17TdUa3hvBY3Edyba4X91MY3Vyj/wCy2Np+tff3gf8A4KT+EdJtdt/4CvtOeNNkMdhPHJEvfAyUIH0WvPxntbL2eh6WDVLVz1Z8DePPCereBfE15oOtWzW+p2jASRlhxkA5yPY1mW+mzuzvJHiBQCX75P8ASvU/jd41tPjB8QNV8XR2bWCX0u7ymOXQAAAE/QV55dXjx24CupLLtC5/Wu2jKUoJyWpxV4xjUag9CCONInGCOnSo3YjeSxUqcYHaoWRlbcx256U6RS2CDk962uzlt1GyYViY9wbsw606ASRx5HzHvmlDBcg8e/rSLIV6HApWYhUkZ87iAfTFafhzxBP4d1KG7hVZ0jcM1vKf3bYPQjucd+1ZPBwc8ntTgEXl+F6UpR5lYNHueu658SNIvbqHUrVPsyFNpg24AboQPQV754D/AGhNK+B37Lul/wDCOvbvr1/qE0j29wuZCGkJaUjIJUDao7ZIHSviSOQRTb2JZOh45I9K7PwT5firSb7w55jGZInuLEsTtj6F1A9T/n1rhrYVSVuhpSkqWqH+OPFup/E/xdNrPiC4kvZXISHLEBVyTgEHoMn1685rjNSC2l7NEgwisABjpWh5zNZJCylVjTf1+bcDjk1VFuNSv2kc8sdzKvQ47e1dMIqEUo7IicnL3mRw6ReXrRbY9qyH5XYYFdr4f0BvD7eal1avJJglZYRIFPpzWb/ajrChMbeWvOOwA7V0Ump6Zd6LG1tFIt5I+52P3QoGAPrXNOtLZHMpMs3mvXl1qEMl0E3IuwG3jCKq56YHapNNkK37ykvvVcq0f3Qc/rVWBVlYCeTbs6se/pWhZ3SQTRq5VvmAJXvnnNc6vu2Yy3ub9v4in0Xz5hbKA42hZ1DhyP4gCDj/AArB8UeJIfFEKtf21q8arsRRFkoB1wccGs7xN44h8m7kvA010P3drZ5429C7544PQVwug+L7/SdQjuoWjLopTa4yrKfvKfY11U4PcuEW9zc0XVvDXh27F3Y+c5xteLJG09B1H8q09b8KX9rqTvJZtLZzYlRlTdH8wyOcdear/wDCH6V8QpLeXwylvoesNDtm0iZyIbiRTx5L9jjseKzt/iyyhk07UYb+CzssRvBMdqx84GMEZ5GOM1rOF3e522WyF0uzbTdHkmUKnlx5lI6n/Jr0Hwb4R0XQfGWg694h0u38U6e1gC+mTLhZXZT85zwQuRwR156gEc1qUATQLopiTaRGyD7wyeAPr2rqfD+rWraDobys815aRLZOhG1GRMlWJ4+9mitN01dM8dS3KU3wD0DWdVZNP1m4s4GDyxxlQQoySkYzncRkDJ5OMk15X4g8A6v4Z1b7JKn2qDOzzIF+6w4Kn0P86+jb7XJNeuPLjhhsJI1y1zDwu0Dgj3FcXMHEjBWa4+YlWGSCfU/40U6kmveBVpRdjzLTfCt1bwmaTEIcYRCcOB3PtXRf2cW0+GNnLiPpuJJxjoK7iw8CX+uQ3N7GMLGqllcjLZOMAfXvWtJ4Nis2SCFEy6ASiQ/x98VTipalSxD6nE+AdUl8N6o7X2mzXmmXGPMZASUYDI2+3PNfSHwt8T+HrrVjZ6zHJa2k0bOlymXXeCCqNgHauCc5wMj3rgW0+20llhE0enMw3Jh90b+v0/GqDazpMczx/wBrwQyRjDSWwLAeoOPX2rJ0L6o9Chmbpx5Gix8cvgz4R8beNZ/+EIunOtsQ+obI9tnck7Szxn7quAc/LwTknnLVwmi+A5dP0nxBbWeyR7Iqku6VfM3RksGTruPJH6Vv3njyK3tNlrc3CX0bCSKZBs2nPO4nkcc/z71z2iXEnirWpp5dQht7mSUzFrr/AFbcnILcHNWufaQq1WNRXQXMcHxK8D3GlajOI73S3F3aT55YHhk56DA965+40GS3WOWGZZ0dA3KkEnoFJPU1Jb6i/hvxJOGjhu1hlaMlstGyEH5gevQ5ya9Wvvhx41Tw7a61J4Vlfw7IolW7S4jZ1jxkSbcj5cY6ZPtWkm2c8b20OM8I+GbK9jN/eBJoEZUkSM/NE2eGxnuK4343eCLXw14otL3TcnTtUQuNpyqzL94A+hBBx7Zr0bT7qHSNQW6jjgmifat1BuAdl7AL+vtXPfFrVNGmeKxeX7Rb29wZ4o7dssfk2gc9sHnFTCTTNqUW2cn8KdPuNP1abWDHGPscbCPzsMu5lx3OMg1lC4S1a4fVLv7ZczuzGOJjnnnBPQURzar42j/s3RLaU2MY3PDHhYkC87nboByDyfpmvdfhb+w3calDHqnjjV1sdP2LItlZyAb1LZAeUgbdx7Dketa6Rd2z0HC60PCtJ1KGC3zbWKQx5ZlljXLvnuTnJx09q0oLNvNDJKR33dcDOe3HWvb/AImfD34TR+G9ZPhjWWtfEuj2+be3sX8yK+kJ+WOUsDlgc5cEEDGTzXlek6TJDHDPdyQeXGmyO353HnO/A49uaHJNGfI0zX0+H7RdW9ou2NZGDuygLwBuJ4H+c1r3FjDJqdtYWAll8vF1OmcmMjgD8jmqGiiJZZ765cAQqwIY8ktkDpV/R7+fTdPmvJEUX18GUOw+byTjgegY/jis4rsbpFTxLdLeIjBlhdTwrDG4EVyN1IrKixMsaE88dB16Vo+K78yCW3kh2OnLup7nkfhXHXV8WXPB5ySDW6RTlboWbyaOZJBDnK4DHsf8KzjMsfykKV7nPWqd1eFMANhehANU5JirqoGc81okZuRauJtzk5GMkADtVeRQvyu3ysM465/wqNUZmLSdey56VG3nOoRjkevTb/jVWuQ2ye3XznJB2xRjL9+3GKqiGQzbQpbefnfFL53lxeUvbqfX0ohlMaKTw5PPPFVYi5ZhhG5FXkrwB/Oo9Uk8mNoo3ZpJFO4L/Cc8fpRNdLZ7do/0mTOxV5I96yo/MVC8zEHOSe5P+FNRvuF0XLnZFaxQq2eg8w9xTI5Gh8xgBuLr27YqLUJAy22FAX7PuPHAJOMU2CSS4hkTy8lj5YC9ie9W9EHob/huQrY6g8qbFkZFPPXnqK7nw7dRWC6lcJjDRrBH3IGMnj61xemwJZaXFCRvXdvd++QeldLIqafoyLIjCa4bnHDZPTj0xUvVmyOP8UTfa7xgj7lkm2/8BArNWFNrSOCRjHHbHSr2pzfar6V7aPAUbQx6ehqncTYOIsCMcPmqMZLUqzsViaRdzMxHGegqwrGSSIR459B0qBmVoXVc7885q3a2ogiyTubrlaDPVM0o/wB0rAkOcfNt+taEnzZZW2lUznHfPSqFun7t2+V9wwV71fjl823UHau0ccfzqTWw2bczK7jacAAjp061HM2GjAYMSM4FP2lSoLgsEx8vQc1DcyIutz9PLUDIHY4oHsSrGVaQF/lY4II5P0rMvIf3jRtwdpz7j1rYkUJLA3Tzfk3Z/Ws/Uo2a6x9yPp8v8YI/SqW43sX/AA6wksVhl+V3YgE9FYDP8q1tPZka409ZCk9oRJA/98HkisLSkZoZ138R4kH1zj+Vb0c0t9bQ30cf+kQna6DocD+tTJXZEW07o9P+GvxKt76G3srj/RNQj4VpejsOD9K92sZg8RJPXADdq+NNV2XUjX9pC1uCFZlTs3c16f8ACf43fYZodO1//VAbI70OdvJ4DD0968bE4O/7yJ9Hgcdy+5M+kl03EW6QgMe1RwxiP+LvxU1veidV25ddgI75989xUrWcnoCa8f1PoVrsRwRBpD6DtU7WysxPT2ohgaM9iPXvUyj5iSaEVYoyWcyglT1psNu+QrCtUzeXEXXkDtjNKmy6t/OUY5+73pWHZleOPa3UemPSpRbMzYIGMVIlms2ctj6VPHYy442+3NSyeUqSWoYcDn2pI7dPO/ejZjnHrV6GxkkkwTtIqdNLbcfMw3GQTWT3LRlXEatgpwAOlU/Jk+YBQ3PRa6CSxTdz9CBVeOx2swJynWoL5blGys/3h8xWUD9K0vsJdTtbKgZzRCw3MBhakkufJVlQbc9WoFaxga8BDZkh8sVNeE+LtklvcqAcNn73r617j4hJkhZFbhl5NeW+IdCHkuZBvVl2sTx34NdVB2Z5+Ii5RsfJXiyNodaYldo27lHY1lQTBnfdkp0U10/xIkU+KLiJSoji2qq9xx3rl7WEKzMQCSK+sp/Cj4mqrSZFcT+XcFVc52fgKjmlDHcXJf8Avdqg1ENHcMw4wMHHemSTh1UEY9SO1dcUcpJC7SSN87L7g4rZsbpj8u9Qe4xWRHEWWMsMDFSxuFZMnBHRsVumKx0X25rdlDFW5wBjpW1pepNarL5SRuZYnibeucBvT0IrkI78yuGddjY4PY1et7pLVhl2ZXHHpW8ZEs1J1VcK33QMdKozKEnIH3MjH5VoRxCRcnlQOD2PtVS8jDRlWOGK1b7ktdWRWc4hnweQvGM4rZDedEXPUnHXNc4v+uQdOK3dLuAyqoJ3DpREhNk4VQzKfn9sYpI0X5tpwRyKlnkZlY/eI+9x2qvHIFYHaMd60Gywq+cfvbVBztzzUahuBgt3+amOzsmIwPUsfSrEUu9FUsFIOMe1AW6k8DK0e1m+YUsWNjKTlc5PPBqK4xbsVTYu4Ak4pPMRk67lHVh1/Ks5RUtyl3K91p5KyTRHMi/M0f8As4rAW+MUbeZldpyVyM9On5c89BXVKu1kZRznlSeK1bGHTppI7y7sY5r2FwyiRAUkwQcFfTj+vXmvPrYfkXNE3jK+hh614D8R+HfD+n6zqmkSWFjqPy2skzDc/BIOz7wBA4yAeDkDjPPzMM/KuCeCcda9n+LV5a/Ga/0G9h1c6fqFtCLS6sbxyYYyuSssfud3PrhR0HPmknh2OxvWt4W85UfarH+L1NebzIU2oash0maFgyXMwiQKcBe5zV7Uvs0thGig4Zs5bqwqOPw3b3DEGRoSrY2jpmoLrwzqsbMY7czwgbg6dAO9PRijWhsZsNjEr/Ki5+8c8g+30q1dERoNq7iDwznJ6fWtDw5Zi/uXimhZXj+bEg29PrVXxVZiSOSa1dm8jbkIMgZOME0m1c2vZaGUdSzH5Y3KOu72otbGS6ICptdehb0p1rHbKY9/72TIyDxit5Xt03neE24xmtFaxzTqW0Rkpp+Muzg9sKOlL9gRplQPjJxuP8602aDLMsglyOPb6VGt/Z7AN377BBLDFGxmpMzJtNlhOeHj9RVOSNlYY5Hf2PpW1/aETZODgHqBxUd1bpfxlox5Mg5PGAT2/Sl5mkZdGZOz5Gy4UjnHtSRK91JtX5gORUdwxXKZGRwcGrVuqwx5BAcj1pGhUuGMchXdjacGrXhPWpNF8TadfxMVMMu59pxxgqQfbGOPas4yb7rL5C78Hj8qZKjJqgj4fBBw3GBV8ugHWeJpoL7WLp7ZfLWRtxUDAz7e1UNNXypZBu+U4BrOvtQa4naTqykYwcCr+nzfaldxgMijPvzXNKNloKT0sb+ns9woWP8AeMSAyt0xjtW3p8K21uyEJ52cmToSc9PpWVakQMkgARjywXtV4SjyumX7881wyjc5iT7QPOCMMHt/Wqura5DZqYLYCe7fHy54XHfPrWXrmqizVjv2vjk8/KO/T2x+dZlnYzSTxTPHNGksfmRho23SckZUkYIyCMg4yD6GtKdG2ppGFzJ1BpmvJHuCS7c/Ocg1HDY3Mi+ZEoKquSK2PEEkUkNu42jamwt/D9c/T+dVLC5KLgDy1wT7kdzXfHyN3HlK9vqNxazJIkjRyLyoyRjHGOP511F74lk1qKEmaQJGNpRnLDj3Nc5IY5rguThn65PTHaoJJ47NRMrcZw3p3oaGkfQ3hH4S6x8TPFz+F/DcHmNqG2dppVPk20QIDO57Bck46scAdyPQ/jF8E/AnwlvNF8D6Pd32r+KoUF3r+uTzMUVWB2wpCG2oXPIwMhV5Yk8/TnwT0TSvgb8HLrxNNp7Wup6hbf2hds5JZFCkxRf7IAIJHAySTya+P9Y8ZR6tqGoaxehtR1fU5mublwvybzjCZ9gABj0H1rgjL2m55U4+yjY5+TT7u8st9tETHgqp6AqPQ9M/zrpR4Hs/DtjBcave+TNMgJVT91T/AA7RyTWFqni7VtYhistOs49P0+JhIkZILsQep989qwp9D8RX14888l5qMqgO0hYMQnfnjH0FbN20OOMurPQ7fxY0bg6Vp8slshCNcghAqnjcQf6VSukl1KBri9ud2+TZElqvlDHYn19K5XRV1HTZFaSC4e1UYkRkJUnPVsA1Hca1fuswkJWRuLdiDtXnOAD1NNNlb7GzH4Ps5lgDia4m8weZvkzujBB2juKNR8N2Gm+bcrFBpFgvzobl8KifQnNZreK9Wmt9huzEmMM0MQDYxzz/AIV574nvreJ3MhuJty5Vbh2fcQeQPb2FbRd9zanS53qzsvGNja2/wrXxdoN5BdrNftpz29yAGUbym5Vzk5I79ua4zwtqLXtuwv5Y7OQS7fNVcAjAK8VzvhibQodcRvEC3jaa2VY2agy8AkKMjrk/gCa7Gyv9K1DT5YbF/wBxITIkiKNxwcAnn06jtTlK3Q9F0ly6C+LNJuLe6SW5EWy6QIrQsCr4A9OhxXpOlWfxD+N2n6ZZ/wButZ+FtK09LS3SFjFCVP8AA4VgXk4HzHgAYA5OfL4dDutWs5rSESK8LY2HlN2eCSenFdLo3jXxB8K9NvPDt5pk0iXTG7ji+1GMMAAOMcFc+nfrjNYTUre6TRlFOzOj1H4I6vZXtpp/hqI6tqlw+z7ddSCOCPkA8HnjPUZ4HStqx/Zw0DwDdajd+OPGFnd3qoymzt4infJJ3HgYwOP1rzG3/aS8X6fp9/pcFvahLiQSR310Hea3xjITJAHT06kn0A5KPxt4jbxNBrWpzJrTiXzGjvYg6Mv90kdR0/KpjTqW1Z6sKlKK0PYvH3xoXwbCukaP4XMEc8Ie286MRRypng8ABh9Pxx0rxzUtS8S+LIy3iPXLmy0Z5d39miZyh9lUkg47ZzivZbH4s+CPijawaf8AEXTjpl/ao32fUrdwkcKll/dgk7hzg9NuAM1wvxK+B/iDwvpEGu6Zf2vjLQZEM76jpPzi0XgjKhuQVOdwGODnFdFNcqstxTkmro5601LTtMaIWW2COP5Yt/Ug+3PBP9O9al3qep6fqkllq9hNa3cYUmKZNp2N0YdMg9iM5xXnVrarexeaXMyMBjaQC3OMex4r374zXC6tJ4X8Yt5/2jVNIUO8qBUEiNgIp4DD5mPU8jORUO17MUdrs5hY5Li4VFK7puXLdOnIq5qGoXZ0/wCzYWWOPAjZRhhjtn2rmrPUjEvmeYWaTG30FN1bWGWMw+aW8sbSxOdvpVpO9ikzJ1C5lmUZZlIYhstk4z3PeqNxaopVpGyMZOOM1ZjuoYf3s+dmee5OemBVK4vPtUbqSVDcKvcYrdIUmUmtQo3nlj05qMYVSCPm9aZNdxwAgsS46DIqq146qxZMnG4c9aDO5YmmC4zuLZwOKhaR2ZiSQF4xUbSO8gJJ246USZjUMSNh9T/nmrUSZMlHlQgb+B03E9c9aiaQRgAAKijCAnk4FUri4jZVwSoUnPqeetVpp/Om83nBbA9hitFEzZa3IxaUsTJnPofpUU121xICx27up7Coo8McKDjv7U+1tWuVJUbEU8vjjP1p2IJ75jM1okILx+WuR6kHNamm250+w3OR5srbjz0qJbOTyR2xuz69avWNmbqYW0bFtoy8nYUpbG8UbmkWYk8neUWCP5yZPvPx0FN1jVGuJFlldlZfmXceaSa4RGY5+WMbQB04rE1a6Fw3loR5eQ5yOenSkjRlGS6WRmWHBBOWHrVeTOwoUyuNzHoc56U51VVChSw2560pYKyZ7kZHpxTsZXRAse1wCTIm4DcB2rUt2RbgLg7WUgen41T8oMAiZweCw7VeijRcH070Cs73LVizNJhlEaHr3/Wp55kiY+WflYbcEZqvDIyvHGRld3NWZtu9uMKwDDj9aC7Esf7yTGAEWLcQfXsKoybvtEzNt8yTqFHoOK0P+Wfyrlm6+mBVWyUXGpHcMozY3dgMVL2BEknySRxMM7UBBz696g1eRY4i75GHA3VakZbm/kI5QAIvuBVXVNk1iyxgs+8MfcAVS3G9SDRpzHcTLnKOBx+PWtNtY/sOaC4P/HvIdsyjsv8Ae+vasDS7ombAXLMAuP8Aaz0q9q0Ikto4yTkMNw+hq+W7MonStanTrhZIHaaxuGO0g5C5HIb8ayGjaNihxjkYX6/ypNA1w2kj21wfNtZBtYE8/UfStu60xZlZrY7T1B/hdf8AGna2jKu1sdj8NfjdqHg+aHT9QVr7RjMHOW/ewfwkp6rjt+PtX1VpviK01PT476xuUvrWRh88bA445z9K+CriEwyGN02hh93HTnp9K6r4e/EzXPh7dCazlM9g0gkls52OxyOM4A+9ivOxOBjUXPA9rB490/cnqj7mhijmAKnAIzyaYyqjMpAI9a5jwH480n4gaabvTJgXU/vbVm/eREdiP85rpmXqQCVx6V83KDg+Vn1VOcai5ole4tZNrGCTbnqT2H0qCNWVOXI+h71ewY2DDIPt6U1WQZ3jJpXNyBbmWLbhgV6GtOK6EbAscE+hrNurVW2SLkYPrTo8EYJzUBZG2txI3Q5/CrK3G+P6DHNYUSvtdg+CO2a0I5gU+Y+1Y9QsiWS7G44xmqvntuPQmnSMr9D2qnvxkg5HepNSVW+cswzSSSGTOFOKba/MPmqwzNt2qMA0GbMTULVmyxGVxivP/iBePpWizyxNiRRlMjcN3OMj0r1OdAYwAMnvXHeN/Do1KxSJiCrEMq++cc49K2pfEjir35XY+DNXDyarePI3mO8x3knnJOSf1qnbzb5pQV3L2x2qz4mkNv4v1cFv3aXcsWUGFBDYz+lVLU75mkx2znqRX2MFyxR8HUd5O5RulDTNzk981RXOSCavXT7rhick56nvVNwWkPHArqgcxZSRtvJ5x1pxTco7nt9KrxY8xQ33atEho2C5woyKsENVsR4I4U8bu1WoWOIwz4PYdjVaIKzf3WYhW74460+BmYgSEgdOn3fSrRLOt0u8D7wRmTHCnpS3luY/m6qwyAe341gaZcSW8nlh9zocbsdu1dNbxyXYKNJvkCghQ3X6etdMNUQ+xisu0g7s4qzp9xsuQIvvtx7VBeKY7ry9u0HnNMt3MUynoPUdjTW4vhOmuFeFOm3cMPVMNuJA6ZxViGYTQCSQl36H3FVJlZZgynamc4rWwEylT8uflA55p5C+WCnPrUfmZXn5e/FPGyS3BZ33A8x4+Ue9AE06iRchs4A49KrwzCGQtncGHKnoaeGHIYlT3wKqSY8zYnCZzz1pMZpwOGRiTgg5Aqysxdg4OD3Ve9ULOQsqpuIJqxGjRABMs5yTxTspLUWu466muDG01uVMq5+8M9+as2EbXM6SFWMjjBLDvVSRml8v5SGByR/MVu6DdRzIYZGCSD7pA/X868rFYVNc0TOq+aJeGmiSUH5VkA+bb/OrtjshuVcO4TBGDzVhdIkhhhVmJuHGTu6fSr6QrCoTywpYgs2ePpgV40ezPPlK7sijqXh+21i32q7W1xkBbhQSw9jiuC8X6PqPg+3uYJb1bjTr113hUwW28r+tenb40OAuD6hcAVX1PS4dQtpEVRKGGWEnP5ela3VzWnWlDQ8Mt2E/+qG4scBhxit7TbGB0zKfM5wxbpVTxBpX/CL3uxkf7OfuuV+77H3qSw1CyGA8wC9wOa6I2Z035tUbaafa7mjEO1VGeO1OmWO1iyLbzvVeAaSPXtOhtXLTOWI5YgDp2/zx64ra03wx4w8W3em6bo3hPVry51OJpbNhaMonjC7t6O4VGXHO4NjBHPIzE3Y2pUpVJWSMi7uoo2DyRpbscbkyCvTj8aw9Z1RbiPyERQnUt3Y9qo6k15p17Pp9/BLa3cMjRTQXSsjxsvBDKwBBBwOR3qqxTZgk8dO9Edjo9nyvUqbZJJmLEK3sM/SkvZmWNWL42nt3qYbvLLhT9MVX1D5bcHONxACjmr5UIr3FwZmBBxuGSPei1kMkrs/+twPm9qqNcJI208HGdxqRn+z7Z0Yt2KVtboS9TR+yifaByG4BrT8NzRQXzxzMAkgx04yDWKl6mwNGAJCNvynoav6VpsutzFIlmO0r9xc4BPXA9qxkly6idranXm6ghMrmRdgHJz178Vm3GrNeOzW7FAE5B61Fe+H7jT9NaZP9JtkcwSTRncm/rx+HFR+HLGO4klEl1DbhY8+bM36D1NcfKjKKW6IV0m71N4YotxlnkEcO48+YxKrn2yf/ANdfYn7dHwt03wz4g+ENnpK2+nyy6A+lCJWwsccUkCwhm54Bnbk9Bz1zXyJY+JrrQ9YstTsWjF3Y3MdzbyTKDGJEcMpI7gMAee4FP8ceP/E/xT1ibXfE+r3mr6pcER/aJydkYAGY0C/IgAwdox1yeeRpySa3PRpuKVmj74+G/wCxj8PvAPhObxT48uIfE141vu+y3JCWds2M4Vf4z/tPn2r8+vFGrRar4ivbq1t47SCWZvJhRcLGmTtAHYYxkV1fjXx9448QaTpkuu6reSac8Zhit1dkhZVwNuwHaR1656VwE37ssYxncQRnt0rLD05J3mzevUhy8sUWpdPLbd79/mx3rpfDeg6ZJq2nyX1oLyBd/nQbseaNrbQAe4Yg59BXP2l19qYg8455FasMjSSAOzKqjoDj8M1tNvZHLBdWfob+3x48fwr8OtG8MWsv2T+27wRXDQkqVt4VLleOzMqqR718Y6deLerGjXIQ4wxdtoPpjt+Ve3/toa3beLJPD2rM/lK8EcyQyScrn723t3GfpXzZqlp9qtmEcW2BQAxBO0ccVyUlzpHnV480rHoP9l3kMKzcOudryRsGAzypwPatD+xHmhTyHnR25/dyMEbseK8g0LUdU0WZJ7DUbi3RSCoRht4GMc546/nXb6P8ar3S7gLe6bbyxKmD5bESE54PT0rqdJnBKhY6qG6v9JgfyruSEZ2tGrFi/s1Qzapc/Z/JvLKO7ti+7zNhjdD6hh/M1nx/GDwvJDJK+lX9iWB3lCskec/7R6/hVi38UeDtS0u6vo9ZvkW22ifz7cAAHoSAPmWlyWepChK+xeaHQLzDWqTaPeK+0W9xIZFlXvlucGsfWtCFis3morx7/Ot51w2xwP4W9McVUuL7w9rCq9vq1u42Ex+blGzVrTb59Fjd4mtdXsM7nst4ePcD971zV2sJKUTzrxJcu15HA8EV0YnBPmgbHwQQCvdeBnPHau8W10/XPBllr82oQt4n1jUTFJHakDygqACHys4B2AEnHGeDWB410jTtZ0O5vNJUxTWhDzWpyCqty2O5FcF4ZlFn4s0q6jIDW5E6OAC3BJH6mqkro9Oi7w1PpjSri88JeFzby+EZ7+yVmklvunmZOMFuox046YqfTf7D+Inh290mfUhbWaSb9ONy6mSwkAx5YbkyK3PUsefwHOaL8ePGvhuT7FDoLa1YMzSI32aRigbltu0YPfFaWua1ZfETXJdRtPDV/Z3UcX76S7jW2G8/KPLI55wcjHv3rNNWszzJxakzy2+0F9JumsNQtmWJZOTMPnBX/a+naqSwDR9UhSWLz7G4+7IvR07keh9q7bVUjspUW41KHWZ4xte3Egd09h6jHH4Vy76paX2k3tg7MJI38+2EgwyEcFR6A1ojSEpJHO+MfAsUkhudOZplwGRSc5B649azPC/ijW/h7dGXR7+SyduZbdjmCXt86Hg8fj79q7LR7iSS3uLMs3mxjKlvQ+npWXeWNjqMLx3MO9mO0bR90+op8x6NKo9mYFxrIuryW7WCON3cNshAVEPqB755zXu+qeLNM8SfshaB4euGi/4SLw9raw2oYjc8LsRkDuBE7A5yP0I8VuvCMum+VJvfDHgyryPT6/Wun8J+DV8Saf4jvEvfs/8AYdklyEfnzslhyMZAwMZHfjtUOSvqelGOhzdzqAhkkjIbcvRz+tZE90Gk5fO0fd9frSXFw86yySKIhnDKeowcAnrVO7MzxZUq031GPpW0UmJy6E1xqjlViLBo1521lNcMNzl8MwyozwKrTSSGRyV2t3xUMzBsZ2jjAyK2SM+Ytx4bez9f4Twc1I12AjZXJAxk8VlFvLk3AEMp420+S4Zl65+tXZEXZbW6B8zLBixA47UjBrgHJICjcPSqxhkuVMjrz03elSMwSDzEPy5K7W6miwDZY225VG455HUetP8Asc0iqpj2/Lz+dXbe8Vo/mkRHHzFGOB/nFWzbxzJiOUA44aM8GkLqUbexW3klD/NuHHp9KsJPkeSrKqDlYgMf/rqRrcsOH49xmkjUIzKY/wB4MYbufpRctWLNjaz3QcAeUFOQZD045+ta1hE1nbvFGxKBfmLd+1VolcLicHGBx6VM9yqweQCRIWyc+mOlQ2za5HeSJGpU4Lk9qxJsNMdvHNTtJtkLO25vSqssgj4kGATyD1pq9yLjGYRyDOc5yeeMVCZMSM4bcufxpjbJrgopkMa9AakjjVWHB68cc1sZ9S7YkLDuZck5KsO9TwuWXJXqucVB9oJAQrgL0C9qerbcsPlBGB61Bqizaq1yImUkKSR5nYmtKZourD5EIx6nHGPpVHTGeG1Gf9WvKofU1N802ASM43Yqb6iJJGlbco+VWwOPpSKPstkz55lIyelLDBNJIVUjaONx7d8/T3qteTC5IaMlYoxlc9PrTY+otor/AHgMlTnrxTrjMUZAGEb9Vxz+tLp65tpCdpRsEEH9ah1Fi0gydoEZG30yaIh0KGlwtHcQHA/dy7vc1qakz7st0zxxVK2/d3UTDr1qzdOZF+dyMdd1adTK9in5ZOWX7zHnI611Gj60sKwW1y+I8EGQ9Rn39K59cL1YMPakuOUBQ5YGrlG4cx12tWit5cg+U9SQMggjt61iGY5O0hsZ2svQZ4qfQde/cm0uI8pgmNs/cJNO1jTJLVkliTCEbiEORVQ03KuTeHPEGp+E9Wi1LSblrO5jIYbPunHQMv8AEPY19YfCv496V4+iWy1EJpmr7NrK0i7J2HUpznHseR7jmvj+3m+0koEIPYjpTCu2ZZI9ySqRtkjchgQcg59vaubEYOFdX2O7DYypQduh+h6zRM2Gfnt6Gl8xGYcc56dK+Yfhh+0lc6IRpvi3dd2Spsjvo4syhicDdjgr+HHvX0LYatZ61BDc2dyl1aSqGjkhbcDnnH1r5Sthp0HaWx9nh8RCtG6Zr3ELLg9iOi0z/VxglRnrUsE3lqYw2Rj5d3eoJC7AjGR/9euRnZbqWVZOCRnj+GnMybfvbT/dql5jQNtGGUjPNWI2+XDfKe/pWVhsR5tinZyKZGSI8OMg9qdJjdxxUsMLZBPJ9Kk06D7eMtgAcZrQEa8nHtTLbGCemKnYjjHpikYyWpUMfy4BAPvWXrci21nLMUDeTG8h2jngZrakXd0rz/4veIk0HwnqRDeXDJbvCzqcMjPwv61vRi5SRy15csHc/PnxJdDUNZvLjODcXMsxVTxlmLf1q1pME19cfZbaMPdOPkT+8BVC6j8yRt21QrH/AHjn2ruPhJocuteLPLRJJEghaWVuixnHykke9fYqXLFHwfLzTZ5/NExuJFlUxSxsQUbjHtVSSRt2Ogr0H4taDNo+trcNAoRkKeZCvyNg9c+vP41wk1vE0e+N1HAOM9K6oS5o3OacXB2ZAww2egqwZhsLjIbGMVWjy3y4yc1IufmGOgyRVEkiksoIG0nmp4V3LyWy3JBFQ+YrbAQcVa3iOR3DfLtAFWhF61jSZZLYs3muu5WHoDjFZ8d5daTqQjeUh4WwCD+g+tbfh+1NzePcnjbtVGf+8SentiuY1Sc3Go3MuOrkc+3ArVuyFa7O6vmi1WxjvIeH2FSfTnofesiP5psnJj744FZGia3PpU5kH723/jiPQjp+dbU6FrqQKmyM7doI68ZzWkZXItqbmnTL5bhsEN029qWa3VZMM2R1FZ2msrMsZbavXito26NEecsx+UsO1dPQCh5fzDPI+tOUvu2joetS3UexsqMhfvEdqjb5Ruzx9KTI6kuweXnflh1zVS4VSpY9an8xZFBB5+lQz5DMMg7eTSsO423mIfKnaR61orcSeWGzkDjcPWsdndSAVASr+nXQVWjVAUPJzUp62LvdGvuMq7iMGqsEjWt0rgMccA9R1p0h2qNucE9PQVBKfl+Rio6n3NOXvaErY9R0jW49fheafaJIkGdpGM4xV2HTWjs0vFl8wMxEqN064BFeUadqUlnlkbY3cY689PevTdJ1a11axtkgcs7Hy2iXr7nFeDicM4tyicFWnyu6NhIFjjJaQN2wBUcUMc25IsOAc7gcU77OLe+aMDbAzbQcnp/jW1F4StbmMzW0TKF/iD8k158Xpqcj7o898T6fJNZXKS2y3UTAjfwSgxw2fbpXil5p8mk6pLbOhUKNyt2P419RTWNxGvl/ZW1OLblrck7sA9sd/wCleUfErw2LjTJNRscYhbd5WT8qjgqc85rpjI68PUfNys4bw3rVtouvWGo39nFqdvaXcE8llccR3MaOrNExwQFdVKEkEYZuD0r9HbH9u628U+PPh1M3h8+H7TU0JaS5midFt3JTPyksoBTuBxxX5weD/Dtz4y8R6XolsWafULuO3Xy+HG5huI9wN34jFfev7SGl/C/4Fat8FbHUfDS3baWkn2kRKMPaqqoQ4/iIkdZQOv7tgOuDx4qKnaC3PssC1BOTWhQ/4KEL4ckuvD6aZpunw6rqcsupXt3a26+dOAgRSz4z8wfK567D+PwdcTBpGWPGztj+le9/tAftCSfErxtrt7b6dDLoxj+waS0qsjxQgHEuCAQ7MScEfKMDtmvALezRmEoZmOc5PvVYRSpwakcmMlGU1yl9I1WGIsCpYbiD396zWminy5xFycZ56cVpXmEjCr34HqOazpI1hVWHzNnJyMnNehHY88z5rd4nVzECmPrUVxI2xgq7Y1OGUDJH4/TtTmvmsrlsfPF3jY/KRXVS6L4f1rwn/adhfSWetxOqPpl0MxyKTgvEcHdjgsvOADx0rRaasSRzenxKsJZxt3AFdw4x03e3Q/lXofw51az8H6Vfaq92Ibu4kFvFABlmVfm3gemflz+Fep/tNWPwxt/APww1HwXoC6JqV7pIF1DGqjciBeZmB+eYs33mzuG7JyFB+f7LS59Yk8vT4lmk253ZwCufX0H8+a5ZvnTXQVSmre8dV4k+Kuoa9p76fFb29taSACSNI1+cg5ByMYA7nr9a5K3uisbMIvMGOW2cenX61v6N4PtJY5/trtNeRSb3htyAgXHXPXOf0pPFGpWT6ZHBYHbn5ZY1TaoVcFdvvk80uVRtFEQUfhiY/h/QL/xPeTR2dvJdmKMtIkPKheBkntz68969x+I3irT7L4F+DPCmkW6xaVa6jJcPcTNuuFmVJGlGeoG+QnK9QNucHFfTP7AU3w08Lfs76l/bN7YS+I/Estx9st54l8/y1YxxopOd6YAYY4DOw68D4T8XR2412/t4Q6QWd1Kqq56pvIxz34weR+NcntnKs6ceh6rounS52jZ8QeJrfWfhjo+iyyhrzTtReWIMp3eS8b5BP++1ee3DsysGHLH+EYrX1K+gubdUtxtTbuP+90rJumAHHQdMV1qLW7OOUrj7H5ZN2fl/vVf8x5txeNQSfk57VmWKMDuXlW5Oa1PJk2sTgg9Oasz2PS9Wvp9e8F6N4WmmW9vLEtDa3zPtKRs3EZB7Dpnk8VoeLY9N8Fw2enS3dvf3kEA86GAhQWP8bEdvTnP61yt5amaxuFj3Kyxk5YHj3z6ZrmLfwXb31ubq3vZkvnfDR7QFBHJyeo/Hk1jGKTOanL2iuOtb2NJ5lk+WNslW525PbmrTaxDb2LW0sHL4LSBh/SsibR73S5EXVIJYhMCY5skox9OejevpVexkeR5VcedEi9mI/PFdN9CvZt63JL66spsmGVmkPVf4WA/wrM85p2URNiJzgtyB9cev1r0v9n3T/DGufEm3j8TCzj0SG0up5VvMNBIyqAitnjALZHfIrygySTWoaUhgyl2YHHPWn8SKjT5Wd9p9qJNFiyEUKCBtAyRnmsyG3a3u96l4HLZREbAI9eK6Dwbo76h4fvriFxIlsyGbd1UMOGH+FR6xosr6dJNb7pXjw6Kpxu9s+hxinGUWjCpFxnqdf8B9B8UfED4iQaDo+jQeI3ntJ3uIbq4NtEIQFV2aQAkKN6ZwCSWHfJGx48/ZxtfCXiSXQvDfieDxVrslxIlv5JSO1tUTPmeZIcnfGQFJ5HIyM5x9cfso6L4W+G3w9t/7Dgj1XXtdt1udRu7rKquBlbcHHCJk/L15JPJNfF/iGx1T4m/EDxS+mpHp1lZLdrbWun5hjWONyPKjCEdR0XrgYPFefGr7SryrY7fdpw1Rztnr3jLwe99b6frcrw5ME0du6sco2MozfdO7OCOCuO3NUZte8d6wvmGHW7m2lXasiW0xwM9mC4zkdev0rX+FHg2fx34f1Uabepb6nYmF44HX928bcEn0PBxjA459K6yXxd4x8Exa1ZS6lfTT6aywxSadb7tPUFQ2ZGI+TqepUcV2pJ9Dy5OKe2p5wvhnxBarDLc28mmeY5bF0djn3IFPvI4I7dvNvBcXGAFSJSCPq3cVsTWmteMNQUya1b3l9Id/liXJXnnI6is+48D63DI0khtwm/Zujck8+3pUN6md+5nWepXNrdxSkiXnAZR19c1cWZpHnlVdwMbMFU9DmnWOlLayTCWTzZV+6oGFFVZ7efTYWIXb5qhXC5ztJ5HPfv8ASixSny7Gv4X8dWOk+IrI+KrR9U0iQeSfLbEkQYAZweOBj+lfQ/j7Q9O+Gvw58QXem20ca6parBbysoEjozbl3Kfm4LdCMc/l8l6qq6tYCMoGdHD9CDwe3oSM8+9epeKPFV98QLW81m+f7Pvmj8qzV90dvAihdq5HsT9WJ9q461Pmasz2qNa8LMwbXzJvMvZdKN3BpsCveG3g/dwxsSA0noMgjJ4461Q1zwfY6xG2oaVqCRljva2lTbxjt+NfTn7Evir4ZeGdA+IT+OPEun6fcamsGnJp966jz7URlyyoeW+eWUEjjC89K+W/if4W8N+E/HWt6T4c1w+JNAtbpVstSWVZUljKK3DrwwVmKcd0Na0nK9jWUEopnE3vh25hVma4jmRuA0fXPeshtLuW5EfnKD14H9a21kMLYCOCvGW7VBcSyShwx3EjGM8V6aZydTKbzIZGVoznujnP60xZeM+WoU/mDV1sHYkS7Q5weD+dJNpxs43lmwM9EHX8qpNiuUdzjHzcdMHv61C0hkk/2fcVdttPuNSkTyVxGG+83bjmtqz0uNWZEXy2B+eRuSR7VvCm5akylY51LF2mG+KQAnuM9Ku2Wn3CzZVSoxkLngCuiXTYeZBKxY/wkHIqb7NHJuVdylQBzW/sRKTMyKE28hi3M/G6rtriGRmZFVh/F3FSfYT837k7+u7OaWWPc7LIhzjArP6uPmsRXV8vQMx7lqyry5mZcltoY5DY5q0+nzNIqHlP72eKiktWVtrOp3cbl7VLoNF+0M9ZG3IcZB6tUTMZJPOkG7PHPWra2Rhj2Mxc/lSeX8+3b/u89az5bDvcW3hcgkIpVRw3fFOMZYK45HQfhT932fAzjNQu+ZOnG7CYNIRLG3IPB3DHNI0jxMvy7ucD/GkVcqGHr0qWyj/fBzwFFQarRGlFC6xh3O4eg7U8b5HTYrOzHO1ew6VDDKZZuASoPzHt9Kty38umqzwNtmY+YOc8DiotcN2Q6kUs7V9PEjG4c7p2U8KvZM/zrPadljSJiFJ4cioY93zvK3mO/LM3JJ9aljVJpjLMD5ajIz1PpSG9TTtV8uxAK9WY/h6VmFmkLzPgoz4C+mO1XZZNsKkHr056CqFw3+ibQPkMgY4HP0qo6keRNZtuuHZRuCqD9M96S6laSN8Fc55b29aSLdaR4A+dzluOcDt9Kh5KwxgrkK3455rpUdTOxJBHN+6DsuMZIHFT7gMnDHnpioLdtq72+UscAEVY4cfK1bE2KzRHa2zILenGK6HStakt4kil2yw/xbuv0rH53cikb5YyQSfm+6aUolXsb02mq0pmtW2beSgb1qnMpj3PjD9CKq2t0I5QAc5GGFXY7hQCZAGB4681OsSrpopLdMQFORg5HtXf/Db4sav8PSyWqx3entJlrWY/IW9j/AT1zg/SuGvF8ptyICG6CoreEmN2Jzu5xn0olSjVjaSNKdedJ3iz7G+Hv7QHhrxxdJps+7S9Uc4jt5G3oT6Bxx09cH2r0mTB2JE24sQQR0x9elfnn5KsRuGWAHzdT+NeqfDf9oDXvBskWl327UtIZwAzZMtuOAdpP3h3IPXPBFfP4rLOW8qbPpsLm3NaNQ+smy3Dj6GrEcpzyMBhjNQRwtcW8NzHIJoZF3xtEdwIPPakMrbtvTB/KvnJRcdGfRxmnqiwVeOTJG/+tSWrlpSQWOBis5p5t6spVw38LHFaVvHsIJODjPBrE3Xc0rP7+3+8P4qmZSOoqK2LcEenWnyMVhZjzz60ES3KtySB8pzx92vDfj+ss3hO8USs1uqM8o7EgcZ+le4zYKkn5SRxXkPx601U+Gut3o5dIiijPdiBwO55rrw3xo48Uv3TPii1tze3xVABu+XABO7pjjqetfTvwX+Ftz4Ls9UuLlxLdXSxL8gIVFGW6Hnq36V5t8C/h699r2l65fI7WUN55G1xhd+Pvc9cdOK+tP7P27mjLbz97nIP55r3q1TlVkfN4XDr4pHjXj7wD/bWg6pbSIN0yFom252yjkYr5LvtOuNHuWtrmLyplJWSMgAg9cdPTmv0JvNNmlVgF2856dPwr50+P3wvkuIp/EFtsiW0G24VvvzKeCw9SK1w1ZrRmeNw6ceZHzrcQbYjIvY8tn1qLexAz1xir3lIVKN0X7wz976fjWe33mwOM16uj1PA8iZZN3uo61YhtWuGQLyhIz7DNQWqleg3Bh3rd0u1CqZG4yF2g+xq4K7Bm9DavdWgsLf5N6Hbt45/xrgLq1ltbmaCUgvG2HKnIzXqnhfWLHS4b/Up5I2uooGWC3P3mcjAI/CvKFyzMrE55JbuT15q5iQI21huzt7iutjkNxY208jZZl2nHtwK5IrukQep/rXRaWw/swJvy4kJ2+1FPcHsX7ZvLn3DpjjHat63kEkYdnzjgAjpXP2zMsvqMZrUtpt0n3fvDmuyO5juWJ38yQqvCHg++KhVip29RjJzU7KIYwQP3nXPtTOME5J461YdRmzqT+lNkHTC7iO9PHzdOO5pkjY4XuPWlcNCizHe2fu54FTWtxskIUYHrSXEe3Cg5/nUar5fBB646Vn1uBuQTF4gD24qK4Vo0x0T1FLY3CsFgZflxwc9/SnXCFt5GRtxkZ4NUBTjZmkVDjg7tx/lWpoOvSeH9QjuoyH2HJUd/as2S334ycLnqOKckYmjaEDlhgGlKKkrSE1zKzPdbDUrXWLO1vLRmkkm/wBZFjhG9PrXQeGX3NNZyzm3uc5iyflf1zXhXw38Xf8ACMa9Et+7C0j3JIfvBRjt79MGvc9W0OXyxcwuqSsBIgHXJ+YE/UV89iMPySvE82dPkZoLa6rZyeYkcVyEOT5ACyfh+FcXqGgedDPPaSRyJyGtnGGbP3uK7nQPEQ1PT7a4ZP8ASCWDLGQdrDj8KztbsTcXrTwN++Vchsd+tcykYXV7HiXwtmtPAHx28M3WoXUVjp1verM91cttSOMBiST26fntr6u8d/BXxJ+278Zz4ms7htO+Fun20drZa0q4NwqjfJ5KtnczSsVL4K7UXGeg+RvjBpc+63uBCyiMMr7cg7uSG4+g5J9BX6EeKv2xPhj8E/gNoekeBdUs9Z1CTT4UtdKsZRILH5V3CUrwjAn7rcsQ3oxrCteNp01qfY4GsqlGzPz7+LPgG5+F/jrWfC13I1wthcNHBO6gGSIgFWx34OD05Brz4rt3jG0DtXTeNPHetfEbxVea7rM7XmoXDFmdxyvYAD0A6VzE0x3FUHHNdNJS5feMaji5PlFkwr4DEgjrnpUTRhs/P146UxZpNwBXNSPI2Qo5J446CujZGBXjsoV3PLjKnADd/ep2vhtZFODgAsvBx/j701kaNSZSAPrzj/P4VYs9Eu7qxvNRttPvriztSq3N1Hbu8URP3QzgYUntuxn6c1WorEG5ryORLgkBhsAHZe2B7dvTJrtLbVfEXijxTNqGn2kdy8cRcrHtQJGq7T9R655J71ykdmYny7At3weBW5ZwiJZJILgpvGH8sldw9DjtUNq1kD13Njwt4+i0uQZ02TzZSskFwzYSM44BB7fXua574iagdU165nis47AYGYbflS33mI6jJ9Ae/OMVuW93YR6eIjpdrK6tvackiVuOhI5I9qo/DPwtdfEL4neHNDsollm1DUooxG+NpUOHYHPYIjH6CpcramlKEefQ/RTwnrPgzwD+yl4WtLPVNBvfEFvpcSW5YrIFu2X5mAHYMzZPTvXw38ePAPhfwnqdnP4a8XW/ieTUA73axvGwtpcqQMp/eLMeRxj3r9ZU8DaDda1p2m/2LYqumj7bJtt0G6XaUAOB7k49hXx//wAFJPEehaXpekeFrPTLNNVupftctwkQEsESjGMjpvbg56jfXy+FrS+st9z6WvCEqPK+h8Fx20Sxb5p9pxkKVIB/HpUCx7WGcYHWtzw9ol94m/dafZSTuGIM7BhCg6nLDj+tbVt8NtVurrM0a3cyYYxwncNp7n2/Ovp+ZHzPLbQ5SHZ5JA6g81JHbNOweKQBRngtVvxFjTZvs/lKj7/Lwo6msy1ja6iQCQiTJyvcU1sTI+gPEGnrd3kj/YhZXhiVPKT7kg7NjPII61a0b4Q6RqvhiVkuG0rUozmKVnLl+5+Ukjn7vTiu30nw/Ya3b3Vzf4WS1xsLZVR1JH0Y15J4F8VXbeI9T+0+Y2izXEiI20+Uq7iUOe20Hb1571zV4uMOaJ5NC97Jm54D0S1vdWl0vXDBJpjfLPBKciTI4A9Dn/6+a4f41fAXUfAd1NrelkTeGZmVU3Sky27PnCNkksM5w5J64Pqdu31DzPEXnoP9HYsSU5DDpketekab4qstX0qbw/rltFeafdRG1kUOVa4UjhevysMcEdDnHNcUcRKNTmezPYhCHL5nx2rSw3yxodu1WzjpjkEYHY1E2xo2iETDbyV6V7X8WP2aLv4Y3nh7UtL1RNY8N69DJJZX0o2yROiM728hX5S21cg8A4PA4z43hGUPnKsPl9xXtqSkk4vQmUZLc7XwT4xn8K6ddbYVuLe8j2vC33cDIH4gmu6+APhDUfiD4mnW6kaLw9YJ59zIBks5YeXbj3bk9DhQem4GvHrS6h+yLGWAEZKkMeBk96+xvhTo0XgX4ExFl8m/uYWv5zjEkkkgwqn6ABfpioirM58VPlhfqYnxI8bXUd8NK0BjZWbFopBBJ8srjkMoB6j7o5HTBzWH8J4YrHxZH9qlZTM7b3kJy7tnPvzn+lZGrabbaXpaL57G+jmEswcfKATnORznNdnGhuktpydqyFJIbggbkORtz7Z96x5eWXMkeV9Yco7nk/wj8XWvw1+J2rafqDsujTXEumXc6xnMYikby5FVRwd3BHQBvavffBvig+F7f4gXem2D+I4dakhsrKCMdZApPnDAJwC6gntsHIr5N8W2k2m+NNbhu0G97pnkkjB2sW53A9cHPrXv37C/xH0D4c/GqO78X3S2nhy4065077Vcti1tpJHheMuThVBKOuf9odjVVKkoaxPYoUIYhpspTfBD4u6d8PkOrzaZoXhaGebWLmSMLLfWhGWfeEGQD6AkDPJxXAaD48uLrSPIjFxqkku7yIVtmluGTP8Asgk/zFfV3/BQD4pLp/h2Tw14ajjttL8QBUbUIWHl3Nuu1iF9BkqCehH5V87fCXVG+H2i6nrGj+PvCdnqkto9u0Gpxl5woG7y4lJy4ZgBkd1HpiuenUlWjdrqelPD0Y+6loc9okc3ibXrmym0L+z1tojLOJLpYysYOSQr/wAQCngZqT4wxeDfBy+H7rwl4lu/E8OqWb3d3b3kQiezy6CNMBQeQXPzAk7AQa8u8X3WhahqFvNpH9oSRNaR/aZNWkR5JLjLeYyFSRt6YJOc7s5q/wCG9Fv/ABXcW2mWUDXV1NJ9ngiaUglyCcjP3QMEnsAM44NdfLy6s4HRhfYu6Iz6neNMLbYgwSu7I6dOK6xYRLGLfIEat93H3v8APpWV4T0250+G6jmEQlS4aJ/KfcBtO089xxwa6q1tdswlXnYc5PI4rB25jkqVPZqyMa40WNbeUwOtqWXO09CR3P8AnsPSsa68Plgd17GSeQ2C2eMc9ugruWVZrwyvCjqTl17GtawtJJZBJBCjq3HlKgI9BkVrH3TF4qS3PDNWtfssZZZsxAne20gHHp61lKUvIm8rOFGd3tX0zqElroulySavZ2thFINslwsOJGXH3Ez6+1fO9xbWovrltPi8i0aQmNG+8qn1rvpwc9Tpp1eeN2QNdW9jbokUYRkU75GbOT2xUUehm9mFxevJtc8Lnke59q07LQCixz3Uke91LJGxGEAPBb61cuJfLy8Q85y21Qeh+tehTopO7Hz6FdbUcQxjy4MAFlGc1dKxxx/u12qwIXHf3pySNaqU2qrM3PPGR1pFYszMckkccV2pW0RHqRfZwrblAIHfJ4qTy9qEyj+Lg5+9UadAnTnnJqV4WaIAtyqkgH61aAYsgwuTypyKeku5ZGYhj2X1o+zvHtkcAKeMHvSWtqZmYyERxAfKfekIrTRrI5Zdyt6KcD8ahuIQ0RwpyCDwOa01tY2By2N3BI9qgVLiGbhQUZeW6j8aNGMyLq12W4ds7Q2Ae5z/AErP8xo2JPLKM9OldGIdx2OAV6gis+axdW+UBmY559BXJOlfY1jIy5PXgnvntTTGVYOOqnNNnimknZWQuoH1GQKkTc0eNymT0BrilGS0NlZki/vV3rgDHIoaYNkEhcDIXuacsR2lhKo7kZqDzYo3VGlfO7PCjBrJlXsaFvdJakSMGMo6DI2/iM1XbN1MztKQCMEDpj0qEsvlgsMBj8vfNDNJMyRptEYOCw71BaZLcSLbsUQq8rLwewFLbb1ji8xgzKMCnx2tuMTFP3ijaWPUVFNOGk+U856+9KwEkjCVyQcqB60LC21CXzt6D0qNSF4C4x94VOJlWNQoy5OGBPStIrsZyI5P3kyjcTk4yKjkhCyYGVVT+BqVcxyO5HGcgZpIJFZAxy249M9K64oybE4kkQcgDkYHSpVChixBqIs/H8O7pU0fYk/MRz6VQR2HqRzjkU6JVb+ECmLngIOc8GplUbQc8nvVA2RSRCMhgOR6U9ZPkGQfwp5UHvS+W27IUYyB+lG5NyNGLL1LHPy5p+3fIByQBgYqIkrnPJbp7U6FjGuANzdaDQtNuj2jO31U9TUeqTNDbSSqCrNhVY9D7fWnrMjKzPlW6bawtc1DyLxYUAZFXdtzxn/Gqla1xLc6Lw/8QfGHhSOI6Vrt9CigERrNlR7BWyAPYV6/4E/a21aO+S28V2AvbPy+bi3RUmXnHTIDfofrXz/HqMLY/ehgR90kZpfOjlfYAQO/PP4+1eZUwtKr8UTvp4ytS0Uj9A/A/i7w/wDECEXWh6lHdqozJCQVkh9dytgr+PqK7GOzctgqQR1B61+b/hvxJq3gPVE1PRrtraVQQWQ5O3PT3Gf4elfePwN+KSfGTweb6RY7bWbLEN/bQnIz/BIo9GAz9cjnBr5XG4F0XeOx9dgMdGuuWW53sMfkqCSB60kknmKVUA56fSrUkO7gqAB1PrVdodzcfhivHR7Nk2QmA3C4AwBXC/GDRJLrwbJaRKG82aIfMM/Nu649gBXpEMO3G3nuQO9U/Gmls+mpI52YQMrEDGc9PrXVSfK7mFWzXKeM+H/Bo8OeDLCzRWX7O/nzYOSJHfc7An1zXb2eofvnAT5N3y7hjjHTNWNUjb/hHZ0A2lYmBz/EBgnn1qnIg1OGO7t+IpY1ZSDxwoBx716alzbnmKKi7IszRthwnAIzjHIrm9T05biApcRiaKRcFZBn271tW908m4uTleMmm3CJI4LfxEEHsOKuMnHYUoqSsz4g+MngGXwP4qufLi3WN04kjaMYTJByg9xjJ+teczRqsjbflHseDX2J8YPB8fizw5dwSzKkls2+PIzuI/hJ6gEHqK+PLq3NuzxuwaRThsHoc4xXu4epzxsfJ4ql7OehNpitNIMct0A9PeumhjVmbPttHYd6ytBh8m3dz99m+UH09as30zx2reUcFR2/I16MdEee0Zd5qWI3CpskfoynovTrWXt/Op5YyzKhG3GB+B5p13a7IY5Ojng46Vk7saH26/KW28gZAz6GtbTY9unjK/OxLZrDt3Ecg5xg9RXR2aKtlCRlmZSRnvz1rWnuTLRElu5SQMw5PGK0rWbyXYHIz0bFZ52M3IJA5zVq3xI2clRXTHcyizXjQtGGZwPr3pjIyoMD5TUdt2VpCTuzz6Vbvh5gRkG1xx7VoLrYryMiryQnOOlRSuFVSo5zgCpmIZgHPAGDx0/xqGTa2FI4HTmpLdkVXRpfbb3zTGYqpy2e1BYK7KM9KYV3su3ONuCKlit1Lluwh2NncF+Yn1rTY+ZMxyTE4yF9Kw44WUqvmYAGSc1rLcGaEOij5QFbmqiBDMWYYHA6U1C0UyOD8q87fWnMv8Ibbzg7qj+ZZDtIbFEirkd0jW8wuoxu87JCt0U98CvaPgf4m/4SSOTSr28H2qCI/Z7did7LnOATwT7en0ryCfFzaopOHByFz09aPDviK58K+ILW/s3USQXCyIJBuxjuB69fzrnqwUkY1I8yPeta01/h7rBuU3w2dwS6KMuQy/ePHY9gea6eDVLbXrVLppoopXHC7tvI9av2klh8X/CGrfu0txcBWs/OyAky8qx57Nn8MV5t4e8T6HHeSab4qs4ormJmLSEKrQ/KAFJPcnpjj6V8xVTgzy3C5qfFjwrLeeDb+4R1Q2se+TYoLMM5+92/Cvn9rWaS0iYgrx8iq2fl9V+tfVGkSWk1o6aVfRa5pc5MMtjM4keJmHBIHUgdq+f7jSY9J1zUdPIdhZzvHGyKcc8jOevp9RRB8yOujOUFy3OZmtGjVDsEQUHLN0J9B71c+Hfw11b4maleWmkrsaBN7yyqSoGcYJHfHIHerGoL5drJvIC43DPY9q0vD/jLXNB8E6hoWk20ljaX8hlu9WhLLLKnaMkfw9sjnHcda6G3HY9Gh7y1PO9Stjpt9c2aTx3JhleMXER+STb1K1TkVpGAz8rYzWnc6YluGD8TMuQcHDc96p/2eI5FdZMgAnB71vF33NmtTtfgP8F9U+PnxGsPC2ls1pbs2++vWXctrbgHc+PrgAdy3cA4+7P2rrXwF+z7+zmfh54a8iw1HUoltIrOP55JId4+0XEh/vBSSHb+IgDqBVH/AIJ7+HdJ+Gv7Puv/ABG1E+XLqE08k1xIoBFrb5VVX2Lbj9TXyJ8bPi9ffGr4pa14nuITb287iGztjj9zDHkICR1bkn0yx+tck6rlU5VsjRRtG7PP2t/PuUSSTyo96q7HPc8/5NXryz0xY3fTrtiyHjg4P61mTsIY94YK6jJZu3/167c/D+2WNJY5pjbsqskcjDeM9fqPTpXQjJyOOe6aePZL8oUYDdm969J/ZPCW/wC0n4ClHzJJqP3UPIPky5HPrx+FcL4w0m1sZo7HTi9xdFC0saN5jJ3wQO9bXgvw5Fo80WoSXDR3WBs8pipT/aBBznryCOtZVLcrVxqqqVpSP1W1H46eF/AfizxOt/qMKXEMSCGNn3STSBciNV6k55x71+fPi+a6+JPj3UfFPinOpXNzKdsEhysSZO1Bj0H6802x1G0LBbqa4nldt8sjEu7Hjkknk8d61rXWtNtZi7RSNtYFfl5U9M+9eHh8L7OTkxYrN3UXLTVjL1Zbu10lIdKgjiit49gtI/lz6Y9683k1TxDpOqWupzQXFrvkK+WMnYue49D717hFcaJfzN/p6W7qQRuXa7H37VX1LQV1iUtZTwuR99Q4Ycfdzz/n1r0VoedHGT0ueR+LvBtl40i/tKxRo9UjwJoC52zY9ieCB6da4KSwGj3ckNxBJBMDtfzPlPTI7Y/KvbrvR7vSL0TFceQ2WeMfKR0x0qp4z1Dwhqfw01C0v/DcreJ1lSSLxBaxqWCeaPkdc5ZdmVwVYZweCAa6Iy6M7Y14VPJnsfxCb+x/AutanbuM29pI8iOuVlG3gA+wxzXzV4UguLzR7V5riRLR4hIIYiTuPHGO/wCVe1/tK67/AMIz8Jm0S3kVftd6LMo7fvfKU7mwO4wBk+9eUeCbo6T4bsLuKRftajZHuHCADk1VZe5Y83Dq0eY17eOW68lVi/doPlPC5+nTrWlZJp2l391qOpSKwmjMKWskZYAHHzAA/eyMAZ/LrXPRS3cmoX8l5O7zeQWhdQMBieoHtmq66rA12kGoxHUbRJNx81R8x9BwO3XmvIlFt2PWpVOW2h9F/tIfEn4Z+A/hrofhjwtet4kt76CRp5ppvMaxlkQhiGI+SRtxyo+6p6AHn4OAUPkjAjOAtep/GrxNaa5pNlaWYb7HZzD7P5gAl2sPmUkdQP8APavK02zbsHOfbFenhaSjDXc6a9XmZd0O2ttW1q3sJ3WKK5mWN325O0sA3+fevtfWLz7do4jlugY/KVIYx22jHTtwBXxf4GiDeONHQr+6adevQkHJ/lX01HfyJYz3r/vNwYsnrg9cV1S92Vjx8V72hraxp1tZ6e0txaLPBIhDxyrywxwQfY1B4TMGoeDLSOdcrEnkFlOcMp4P5GtmxjtvEGm2upNItzD9nZQpOYvM6H8qx/h7a29np+o2V0csLkyIFOWGQM5HpVabnlcvQ8V+LmnzWviTz5Tujni3qyjI4wPzGK9+/ZT+DNj4k+CvjLxNa6rJqPiZXmOn+GrUxg+dEny+Zv53PlSBlRt2nPJz418ZbeSK30aLCAtNK6MrZIXGDkVX+Dvxk8UfBXUtXn8L3VvZTajbLCbi6QOIWViQ6juSDjn29KwxEbq6Po8vqctPXcxviL8YPGPxEnsv+E0xJcWrSRQRfZPsxiKEJIgHHII+ZfUcgYOOy8Pap8KtF+EcmotfXL+N2iZhompaY1zYPNyBlxHgIQBwWyOCfWuQ8X+KLPxl4WvjrV1dP4jh1OW9s/ICpDKbl99y0pAzuLlmVRgYIFcHo+hPrmqWthaxRfaJZY4hJdSGOKPc2AznOAnrjnA6d6pRj0Otyd3fU9r/AGiPG3wp8Z+GfCt14S0a8tvGMkaza5fhJLe1bEGxo0jZghYPg71UAquNx6Hzn4a+IF0G313aWe5vIfs0PlSGMxFusm5SCCFAGAeRSeJvh/ZaT4lutO0nVZNT0q22odTZAouJMHzPKA/gB4Hfv3BpzeHbeKBbeIF1B3GZ/vE/1onK0bI4JVlGVzptFRoTIhyxI3FSBk59a7XwroH9s3cVp9qhsdw8wSTfd3g4C/WvK5Pt1nPHcoxVBweck+gNeh/CXVpNUtPE/wBpmLXqPGEwMbIz6EjswPPpXOo31OSt70XNFq4sU80w2p8wKWJdR8pwccf4U3/hLV8ExO3nCK+27ovlycg1f1q6i8EqGuP3t1NHvWBcYXjjPPH4147qGqS6pO1xOrO54I7Yr16GH57NnNTp83vMm8WeJdY8a6kb7VbxbiRQwRQmFUE9QM8Gsq3t1jjCKoIxjp0qaFAylgQvp70rSRqy5O5enTpXtRioqyO7TZBNbq67pFYpu45/OooYRIpnD7E/gUjr70+4/eSJbqCHlHyt0PHU1JcMFbap3qq7QxH86vcQfIdwAPmnqTyuBTG5jDK/J7ZoEjZAYbTjqv8AWlXa2eMOBxj1qgHQqp3Z5bqM1btZwVkZlVkwPr06VThY9G3bQOPY0LcGNjjGPpVIC1t2xqCfMX0Y/wAjU0XlmMDYcH1qnbu7biFLHOQD0Gal8zYyqz7TnP8A9akAXNsw2lRnnH4VVaRo3dBnAbAJPStZ8KSevGfaqEknnSBSvyb8bqBFSacr/wDFYJoF3E2Q4GT3qS4sivRsLnjnrVC4QwsWC8/Ss3c0uWoZLdflRAJAfmPY81TuNEVpFkhkXLAE44K5PIxUDMVbJ43HIqY3QGGMnzdQOMVi2nui0ZN9p867Cy5Qk7mXv6VWH+jt8xyuefUcV0A1ATnK4Geq4/WnSWNpeIW2CP5cF15Jb/CsJU1LYexzETNtO1t/PGM4FWsBYxGeEAwu3qfetCfSZhCXQEqvtgGsO4vpIWaEp5b/AMOR74rmlTcS4yNOOT5GXd8vfPeq+NzMccdiKzo5nbggt+NaUAC52jaAelRGLsNsmeWO1t08xgGYdScZqFV3SbSOCdx57U2axk1aTe/yHBChulUbd3trj7PcK4AbGfaumMbE3uaqx/MI0PQnnr1qzHb+TtAbsQOKWFo4xuVck/yqdmA5ySACRgela7CexXkfcxVh0xjFPVcswAytKqL5zFjzjn2pVTbxkjvnFMm/QIQVmyOVHOM9KWFgu3sv+1UezbJtAwXOS1SFQjFSNv0qrE7MkDBiTU0caOjFmZSBx2quoA57/WrEEn7zDkYxmixRA0e1uRmkePaRyVNX2KtGSPWopE8zd0ZuuR/L60W1KTKk0ipbszPhtnGR71QWx0/ULgmecpvPzyLzjjjgc1PdTRLJhuU6VVjQPlQxHOduKmWugLciuNDtw22K5DKpwHZOWHriqbRvayISGCZ4YD8s+lbsMQK7M4b1NSpLLb21zaAL5NwVMnGT8pyOfrWfKh31KNvm4USIAGHbtXsv7HniJfDfxwttM+1NHZ6xayW8kZ+6zBd6ZP1DD8a8hj0uFW3oXjOOxrf+H98vhrxx4a1WNlR7XUreQmQ8YMgVs/gxP41y4qHPSaZ24Ofs6sWj9NGsRtZuAnUKc81TksvMjZlBDcEYrq57dBJ5i/OpwRnnrVa6jHlqVTBz0xX55Je8z9FjLRFDS7EW+15fnbHC0eKITdaexCgADG3+lTiR93AI/CrNxaltPlZhlmX5PrWkHYiS1uedrp4u9LlUqShHl7fcisHwra/Y/Ddvb58xrRmgYfQ5/X+ddvYwqsZibPl5IJ6VzaWotNe1+ALiJ5EuIlP90qAfwyp/E16VN3RwVFZ3Kd6oWTCrtTA7VnXJWPMr7gqjHHSrrM0VqzMMiPjFZdzqEb53/Ko9O/1qlqyTifHGp2dvaT3ss32WyVfmcjO3Jz+vSvkPxFcWNzq13dRwLskmZhuXoM8V9D/HC8lbwlfpErBYzGsmP4lLcfhXzVesDfEbThhuGOcivoMDD3bnzWY1OZ8qQKPOkRicEH5QvGB0pY1Vd24HYRtNFptWORHUgdQwo8xd20E88GvXUTw9tCpcW6DeCPmI2j69qbNbyT6e75x5eMqO/vWlcR/u1ITnuff1ptmwVjCY9sZ71MoagpGEluJIfMUY4Jwfbiuit4mWwt42XBRdo9qy/sn2W+a3IbyOqjH3hW7HEfICplnHUYp042CTuQqQflwMZz0qZZflH8JzwKgxhsldpzUqlVG5ufatjP0L0bD5TnLZ5AraXDRZZcgjFYNtIJFLtnjoMVo28hyPnwqj7vY1aK31FlUxMF7g/I3tVS4G2RcfeHar04LW44yx9O1U5l2qBjc3rS5bA9ilIPLwTyxodgV4P5CpywZgGHIHWq0jBm2Y57EUmG6BAPm4x2OfStG02BXAbCsPSssR7WDZzj171ftct1xjGQKaYvIsK3Ayec8mq9yfLk4O/ODU8nyuUxjHU1GY1Zg2OaoofbJDtkV1OZOM+lUryMW9ztVgzDleMgVdhxHJvJ3CoNVXftnRcEr2HHFSwPb/ANmvxskdprGhX7Zk/wCPm1P8KjaAy+vJ5/GmfFKLT7fWbK7SBDK8bm82nDFsgg57E4//AF1454L8QS6Dr1le27lHVwN39Pocmvem06x8VQ308pKl4lMGwYRjjJPuK8XFUep59bSXMZGm+GPDWuWu6xvdQ0jWTERHcJJlI2P3VOcnae9ZniPS9Qgkt0ktj9s2mOeSTOSSOGPPcd6zPDPh7V4prq1W9uYoIYtrTqBjnpgkdMdq764WKOGKO6uzPcKgDTnliR1ryLcjsYSmo7Hn154JvbtVE7rbIG3FnUlm9h6VG3hWG1tmjub28uYHHKBtq/TArrpLq0kZI2mlh3NxujyDR9iSSOVldTGgz85GW/DNVzPqP6zUj1POpvBml30yMPPjl6J85IHboazL/wCFut2u82zR3LFlVIVb52B449+n1r1CRbWPTWuIlVbiOcI5/wBjH+NVLzxJL4d08awrLLJaukkaPgguGBBA781Ptp81kdFOtUckr7n0x+zT42s/CP7KPg/S9UuV0t49WuoLxblCpjVHklYOrdBgc545r4B1rVluNY1aSE/uZryeaNjwQrSMwyO3y4OPQ19QeA/j/wCG9Y8TXN1rHk6bpmqQRz3Ni9uZSl4OGaPg7gfoexIBzTPFnwT+G11qF9etYzaXFcDzrdI5cxxMxyw25OAeu0dM8DtWcKvs5ylUW59OqPtYKzPmGxtLvWGljtrWS78sYk8uNmC/Xjvn8K9T8K/D/WltLS81DU90Cr5jWLqQycYXcx9ufb3ravPHvhP4bxJZ6ZZLMqLsf7PtL7c9/Xt3rNXxTqnjCNrq726dppbdawRnmQ+p9v61Uqs5L3VZGNT2WHj77uz0nxpceHdU+Gfwyu9HjieXTdMv9Pv4VwZTMWiYlzjO47GbPGQxx1rxrT77+2NYstN0qwvdTvLybyoLW3AdpH54A9gMkngAE5wK6y18C+L9W8DXeq6NafaNISVrXMOPNSXbuOVxyDkAEnAJ6Y5r6z/Zt/YM0HwC1n4q8VeMG1PxIAZLN9EnMUFqWQr8rfedsM3J4+YgDueeM4wjepLYzVNYpaI+T2t49M1C707UsadrNlKbe4sZ3UPFIMZRsEgnBHQkH1roR4bkWNDuByu5lVgcfXB4rh/2u/hgvwf+Luq6Zb6xJqtrqEY1KGaaTfLmR3DLIeu7cpOT2IIz0rw+DULzT5CLW+uLdgRlo5Cpz2PBGfxruhT9olJM8zEYNU5cqZ9ZwaHH9nKOmxjlVc9AT+BzUdv4Qt45AGkkjLcxyxcd+M4r550r45eONNkKDWDdJkArdRqw6fQV0tr+01rduka3GiWNwkYAXaWTOO9bewkjkeHmloz1qT+04JXsnAdE6iQHB/XrWVrMUL2iRx2r2uCTKqg7XJxjp0559TXHWf7QS6wcyaGiuvJVJSTnsckVck+L0t9cRw2fh9pL5vlUNL0wNxz68fzrKUGgjRqLVFHxxeXnxM1Vr2YyW0ERK21ufnMalRyTjqcHOPpW34S0nTv7Fa0smllv4SDL9oPy7to4U9k+tJ4fTyWuL1UC+Q4RHySWZl6H2Fben2serxxWk+rro2lwqZL7UNm5wrNyFAHzH88GuaVRzZ3wpqMbGdqGnbb6QpJCEW3EgCSbiexAA6c1kXtxNFayWjGMLcLvEWzJB9j29K0dUt/C9jc60dAkmlt5Z4xZz3smZcDhmPTAJzwRWPb293c65C8hiazWXG2RyC6dTUPTUqPu6nFfEDS5NP0i3ghXMqfvHZexPb/PrXEW0hkjzt2npzXsfxiurfSZ9H0RLZYHt0lnYqOWDkbQSeuBn8q8gmhexkaFwQwyV3cnHbHrXpUXeBV3JXNXwbbr/wAJVYGPcJfOxkngHGeK9c1bWIYI2DyyLaklhGrEb3I4JH868W0u4ks7+G6V9uDjI6dcE1391M000fny8gKqMByeactXc5a0byR678JfEDWt2vha/ZEiui9xZDH/AC0O53j+hUEj6Vs6HJLpHi5XaIA6gkv7s+2Tj8hxXzxq2t3ui+ILS4tJmS6tHDREHG3scE/z9MV7VJ4nt/Fceja1bziySDbBKDy5fkOMDsfx9apSV7SOSdN7o4z4uWt432dVtWeK1naV5lyQFI4zxwPrivMZr6OOQqdzFQAy4+ccdx1x6ccjpX3t8APhfbeOYfG91qMa6jBOYbOPfkxSKi+YSMdeX7EjjFefftWeH9F8F618M7TUdCuNO8K/6Vd3TW9uFdpDtCqr5BON7MVBzgZHQ1xxxEalZwPbo4d06SkfJ19p5is4JWkV1uIzIvltnaR2/Wqvh/QbrxFrKxqWTTov3l0wyVVM/dPqWPG0VJrUllb6lqRsppG08TOYGk+8YySRn/axjPvXv/gnwPF4b+Genm4sjFrWpL9uujJlWaF8lFHphcYYYNdkZaHPiKvs4nEx2cKxgKPlQfLk9unfrxx9PwxnvbiVndeg6KPb0rp9U02S+1qCwsYQZt37zy8EqvXkdqo+IbOHQbwCaSO18oMZGlYBB0A+bp1IH4ispR1PEi3OV+px+rXDrG8qIVSVCp5wd3/6h1r0LQfG3hXw34VkvdA0q6svEN+qJNFcSGWObH8Q56ZySOK4a3urK/jNxI6vbq5UY5D89vx71nSTPLceYCQn8KphRx9K78LhXN87PTgtPeH6lcX+oahdTzytdNMQWJb7wzkDnsKa1wfNkmOIzkDAHDUrXTNgbfm9WGP0qJl8z+DaQcIM9+9e+kloFl0JWWOPzHkDNn7m04AqNVQwt34ypHNDY+5uYBR0IwGqFW2L5UXBfkMf5UwFjYzKs7jEhGE56D1pdoV8MCrdxnimMzbQMZQ8D+tBbqTk54+bvTQloO/iKgjgZ46ChVUgn7xpTuZSI+B1PGM0siZZSBjd6UyrjFAkIUKc56etPWHzpMRD5euGp8Ia3ZXxtOeD3IqWEpHM0mSUPAXPJqhjVhkXO/Ecp6qvX60phEirG42sCDzz3pu51uPNUEE8FfbtTmysg8wnjnHTHenYBfMd1bA4B6dKkjZU5Ycs3I7CopGJjXac5xUrTBMqUJx3pCG3UfmbTGN4OQFHXIHSoNsjMgeNSFGAMjIJ7VaZf3XyEg+o65zn86ua9qt7rmoR3t/bWtrLNHhPsqbFkC8ZI6bvpSH6HPS23kyMu3cnOAeq1nz6WX3FT8oHHHNdBcL5aMGGPpVZXXycHq3TAqLXBM5mSOW3nBI42g5H1xg1NFqQRiwGV7L2NbU1qZPMAHzuuNpHXBz+FYcunSqoK4COCV9RxWEo2Kvc0YtWd02hRGrj/PNVr21jvWiikUuhYFiOD+faqUOYowNwHO3nr+VWre7aDaM7j2JrO99x7OxH/wAIysczPFJutycCMcsPrTv7OMcyhtyEr36Vow3AZst8pbgmr0xS8Rd6BFH3WSnGKG2zHWOQMpC4Uc5FF7p/9rRyBgVYDKyZ71pJbeQGJcMmeD3NNWPDM3TPT1FVa2glc5mxuJbe4Ntdlcxj5d38Y7YresWNhcRXMaL8rB9p5Bp95p8erW7QzRgSdUmPBUY61jWl3PZzC0uvkcHajE8NWdmh3NZ5PtFw8rAbpGLEAYHrUUmdu3cwGetWPlkKgnnrSH7gTgjdgH2q0Ir7T94856ewp3lmQf7JPWpFh35YdKTyfLkA2kjtVjAW4yQvO3nNIvy4JHAPWp2YK3B+buvWjB5/dkDqaQmLBdRyNjgY56cCoNWuEsYDN993bcEzwRUiIu3aSEXJO5+MCucuLtr24kfeWjH3M9frUNjjcWNg6klAw+9jvnNXYzvXIGDmqVvC20grsbdk7eSPar6xSeSEBKsDyT1qSh8jI64IOBznpQt4j4BJDDpgdaikWSLGE3LTNrtJ89uuAMjk0rGave7LP2olm/kKiupFmtpfm+6CxXBz909f++f0pIoWk3GOHn0ZiBU2nymG+tHuraOW3jnWWeDLFXRWGUJH94Ar9DWVS7i1Y6qb95H636CqzeH9Mlbq1rCxx0+4KsSW/wA3Ckiue+EfxI0H4s+EYNS8Pq0CwqsVxYzYElq4wNhHcY6EcGu2+z/KQ3GelfntSm4zlc/Rac04J3OfZUMuf4hWkkKNZumCS3PuPp6Uy4tzHcFQOmPmA4q9Zruwdue1ZJamjehyj6aWneEJnn7ori/EWmvZ+LtwyVuLPYB/uuCP5mvXRaCG6kkJGWbcfbjpXJeJdFW7160kzuEMLFl9mb/GvQo7nPUeh5drEcySAK37kxksuOfauF1i+ENjL8w3FsZzXrnijTVt98m3apTnH5YrwfxzvtrMrGfljJztPXNawfvGE9I3PI/iN4lN/pd7bCUxxzI0Q55Y/wB36+leZQq1xZrvXackhsDPPbNaPjbVJWvJo1QrG0hYKT146/WqFqw+zxlvkH91elfUYLSNj5DGSbaKgtTbt+9+cEZ44FK0KlgwTGa1W2yR7MZbrnrx+NMeNQoAwwP4V622x5Ti3uypGgdSrEEetVltdrbhng+taOwL91QT0oZBuMjRge3pS3DlKwHmMSPm92HIqZcqjDOT796VYzuDInB/Cnzxn90TwB+tA7FJm3ZG3p0poBTJbrmrEkKrGxb68HpUAJb7x69PapZNiWGdgu4rg9MVpW5REUks8meB2rMt5D5j7vw+tW47iSMBdwAJz06U4gakk6MvyHDerVSkX95nOfertu7rGeVZfpVSfO4EkEZOR6VqGpUYOJORzSSOOoUbh0NLNIqy79pYkY/CoVb5hgYx0BrJj2Glt2Tt9M1YVycYGDVfcfLYN/ezToXIY88NSSGzQmkNxIhxjA2Hnr6GmMSzfrxTlZfssqYO9fnDeozjFNEgXC7QG7ZrS6DUarBmAwRViSYNbsq7lfI4I6DFQttf72QByCKsw3CtuGMs3HNInWxzrQ+VctETkE4wOpHWvafA3jS/1j+ztEjsfM2xFY3j/wCWUeOS59M4GfUjivIdUtTa3asCC/BzjoPrXp3wD125sfEktjbFXlv4fLXzMkHByce/tXFiIuUWZ1YpwbPW30W5uLGKFI/s8OSRM2MtxjBxWUfDLqhkkubfOfvl8k+tb15oF3NGRPdByMnY0uVH51mX2n2umWcZmMf2h+FWI/K3OOK8OSPEszK/49ZlXEdzHnHTK/8A66r29lFd+bayRmHKl1l9OcflWna2ZlsZrhfnS3I3x49e457VWs9P8zUZojISkcDEY/iJHABrN7XHp1MNoZI5Z4GRXK/JJt6HuDXFePLe61DT00ywAmYOstzGFGQg+YEH6816LrVza+HfDN7qN6y+Z92IE4aSQjgD+f0rx6PxuiW90E0yFZ7gfNdbmyOf4fY1MI63R6mDpc3vSPW/2fPh1pXiSfwzrLHT4ptJtGk1GPUEDecRIxDKTwCAfvdvesL9ob482nxE1SKx8JaYNG0DSwyqispku5twBmJBPGBtUE5IbnOQB5YPEVzf7BFIIvsILpGowDnrkdDXon7PnxG8H/CPxPe+KvEXhy68SanCB/ZlmpRIInYNvkkLd85AIDEAnA5rRxvK8j3oy05Ueb/DDw4fF/jSC0YtJZ26m6uTGQfkU8nOOmSOP68V9Ba5p8KoGtIo43YYkY42gegHQZ9utHwv8TXPxG1nx94slsbawTWdRTzIbFNsduwXIRScH5VA5I5JJxzXV6tpRtNJnvBaCSLYypcOnyZHUAH0qquuyPncZJuocN4TudcstOvPsN5NFpd8fIuLONjsl9zzw3uOo61n+OvG3iX4U2emXeg6nqFvBcPKjM0hMTNgEDb03AAn/HOK7H4f6fc/2TLfwKs8MM7LcWzNlguAQwUdeDkjFJ8bNHttb+GGtm1VZVtfL1BHx8yIhBdcduMj8/pXGqNOclzI0wuLq0qnuvQ+U/EniLUPFWrXOqapdyX95OwZ5pWLMePc/p0HYCsxwoZXKtkNz78UhSZ42zw2eWPGangjkVVLcZPHPTivUiuVJHqSlKbbZVOXySxVm/kabIxQkAjA4HWpmj+0MCfkJ7Gq7Rv94rgDpu71rfUgWzaVLyLyDmTdhVHJrvbHVDokBv3Yw3ONgbg8kjP6Vi6Bo72ti2pTAR+ahSJB1ZTyWro/A/gnU/iZ4us9A02BnnmSSY8cBFUndjPqVH41jUaehlKVkd3aNNAG8vkyENtPTGf8Ks6zq9vNB5CJ5Lx5Mkm3Py/3gO3+frVW11BZI0mYyylYlxhQSpIGcj2qDXtesr5hZ6Zp/wDZ8stv5D3DE/vZOMv9cCvH2djVbGZq2k2VtcWOoRzMbwbknt3X5BlTsIA68frW9pNlLfXFtbLiYSoHzGdxCknkn+ntWL4hkj1BbeeY+TcpGsW1Qw3BeQc+vNaVnqg0/TLew0N45Nb1WVbZIckGENn94f7vTg8+9XZy0Fpa7POfiT4wPir4gX16SpiQLaw8cMsYP/s2eaj06xk8QW62cEUk8+0JmNd0kfbPHOM47V0uufCu30Wyaa4mWN4n8p4YjluuCfzz+dW/Clnqnw38Qvqemzkv5RTynAbzI/vBRnuTjntivRlJRh7q2HSqRlNQb0PPvEvhPXPBupfYtbsp7F5EDx+dGVDoedwPQjnnHTpW1pOoRXkNqGJM0O0OuewPBr9JNJ/Ys0P9pPwfZa7qHxI1LUTPGHjTTktxDCSoO0gxscj0yPcZrxX4pf8ABKzxj4LtbzUfBfiCPxHBAnmDT7lPJuJufuqQdpOOm4DJ9BzXNTxEakOZ6HdUwy5uWLPmf4W6edc+KmlRKsQfzJmAmUFWfY+0E+gPzfUV7HeeCdL0j4F6VrEEENvq+nahNHPdGPabyNZCG34HJ4BDHpgV5n8MvDup+Gfi5o+napp15Z3trPK1xYzxGOVNscmcL+B56HacZwcS+PvjVq2u2eo6Ja3WNHnuHmAcD50PRMjsR2HfvXJUlOVRKL0OmOHhTpWmtT6d/Zl+OGm6OPDvg7TbaS5jlmury+1BTt2sxLkgHqoJAHcAYFfRX7RV74Nm+AXifV/GWm22saNa2jXCWs58t3nwRF5bZBRyxADAgjPFfn/8I9QvvDEdhrGjQR3t1GDLFHIpZeBtO/jPHp7VJ+1L8fta+IWk+HPB7B7KDTI/P1SKGQhbi7IG1jkZAQZwvT5geqiuajQksTzN6DnWiqNmj5v8nytPtImctLOwVi44HzAY5+o/Kvun4zRy+E9H06y+zi8vrxEtrKGIg42xj58dQnbnqSK+JLhYvsdspiEbx/MSufmORg47dBXozfHDUbm8XULmKTV9ZaJIHkvMAIi5xt2jPU5r6Bs+drR9svdPVrW3tfBWhyHUmQ3cwIaUYV3J7Ek84+tc78J/jJY+A/idZeL73wzF4t0q1SWKOxuHCukj7QJlDKV3qocAHAPmvyBjPjOueIL3xpeSNreozmVTviY5ManHQDHarmk6fNZ2wheRw8nz4UDDL2/StaVF1GRTpuGrL3iTUl1nxBq2qQW6adb6hqNzfpa2/wDqoEllaQRjjoobaOnSqirGrfxKrdM+3SpZLQTSfvZvJI6IDwaSGMyTbXIbB2g9OcV9FGPKrGknqJJG23DAEE53d+TUFy2FQRqwbG4Hqc0/nyzJv+623afY01W/eZULuY5B7YHWtLXESK1nDaTNM779v7s87d3ofrVZU8uM+aMSOQ5CjoMdPaiz2y3RKKDHG4C5ztPHJNWljDK/Usf73XFHKBBbrtUhwSjLnNI2VKu33sdGHFSIhhUck9Rt7j3+lNXPJEg+XuBVKIWuOQllzIR9V701flcBhkduaEYvnoRnqacq+cpXJLKeCBgU7EWdxwDK8ZHzbeFUn86f5aNIWJ2N2PamqrbNzfe7AGkXEighWbb1yaksX59oHVieo705YJZirKN/94mlhXAZScFvuinxjCYjLfN6VT0KAQFZG2x5GOOagZnVjvU/N+VTeW4XG4gg8U8ymPK43Hdjp29aV7kkdvLtc53bW6ZFOWdHYB9zbOmSSAfYVG1uAM5ZsnII6fnTZfkDEZC9T/jSKJWnWFSA4ct2bmoZIw/+sXPYYHT3qvC7K5yOat20geYtnaQRxn2pAVMke/PDe1JLCs0e6ROP9k4q/cKqxmUgHcMbenNVNpTacNsbkDHSk0IwLqx4yV4Jz75qj9llhjclWKxjduzx7D611tzbm6j5TrwpX6Vj3Vq0Z2ScgMOOxGO9YyiuhTZmpdNGwMuef4fStOG8YkbRtXb0BrKmti4YrwBjqaX7RLGo2/KN3IPUis9h7o6JZi2Axyo5DVaxE0ed2WziudiuAmAG2571ft7xFk+Yse4OapS1C5osvyfIcluOPSm6hpMOo24hdMMzhhIvHOPWo7W6X5mzn2q3Jco8a53fLwMdCa00C5yvnS2tx9mulMcuflk6K6+1alurshPQ/eHvVy801dbg8t1ztH7tieU9fpWAs0+j3Rs7484/dTA/K6+1Z7Mpamz5ZwADtHc05ZCWADAgD0qCSZ5DGMYyOMdDU0eI4wpwefvVQbCrlZd/4VKVdgSOSRk81DMC8e4HaR2qlcatHp8ZeVyD2UDO446e1JuyFcZqlwjKLZVUhsq5Y/kRWJND9hZHU5hJ2ndzgelR2tx9oZ2c53NuBPb2rWhUSEAp8v8AEGrL49QbaK9lI0hLA7h0K54rSVjwSPrWRNYyaXunjBe3Jw3+z7+9WoLjzxv38Drjn+VTqtCjS3D5vlwCABVhYx5YHUd6rQ/MyBUXy+m5jg/lVuK3VJN2SQOoz1rQQ6Ta3OMegHpUy2ixRK2PMWTlWHUEep7Y/KoOpX24qfJ2qQMnGPTFWM7n4I/FjUvgh40i16zWS40+X9zqFhHx9pgyemcfMC2VOe5BwDx+nmg65pnjTQdP1vR7pb7TLyITQXEZO1wfr3zn8q/IuRCeScN1yO1fRP7H37Q8nw58RweDvEDSyeHtWnCW8zNn7HcNwCMnhHOAcdGOeh4+ezDBqfvxPosvxjj7kj7hvN6ttHpyPXmr1rEw6Dj0qa9gRSo65IO7Ht2psUZVFxknNfI8vLLU+p5k4pjmtTtZm555rCt1N5qGooqhnZduW/ujp+tdNLHtgIJ56nP0rO0O1T7LdysxxPcN83cLgcfnXXTlymM9YnB+JtNf946DjB2huhr51+I+mOsE8QHmtyx2jHbOfpX1j4jhEcchjG5VycnvkV83fE21SK3aYdZG2k+h9KjmtMc480D4o8YR/wCnKyoCC2SR6d6qwxkxqp5GOK6Xx7Cv9r3QjAKByS3+0P6Vy0LbVGRkjjrX1+B+Fs+JxitOyLUMpVirHDdRUjRs3oe9Rxu23I4XHbvS/cjXoOc9a9c8+1hwydueKcVEhwSeBmnJ+/YFcZHUUR4kyjDC5zkU+otx0L+Xgjn2NPmjDKNq7i3P0qPaWbg8CnxsVYnGABzVWuJlOTiT5hnPB5qtNE33eBz1rRe3IjLYHXrVKcM05x+vAqWAyJgzlTwFHLVNDKnByGqsFwzRscbualhUx8Z3Z7Gp2Dc2LW42qWVCyg8npipLrZgsQAcccVRt0LJt3YUnkVekt/NtwquCR2Na7oXUz5V3KGBx3JAqpPIVYHqO1XtpQuvWqt0oDggdRkZ9anyG1bUiVScluf8AZpV8pTyGwelM3ZjDk4OM4xmhpN3zI3Oe4xUi2NLT0SRSSzKOBn1GKTcdx7sP4jUdixWMqW+b7pzUs0ZhcjGG607FDZNq5CksR7U6NXYq/ACnmgZUsDgA9fanBgPmU5Rj+dGhFrkOqxyXDHJJ2joKj8O31xpd1DcwM0ckBDKyHa3XoCO+OKsXmZIwQcPt5561Rs5ltpicZXtnsc1lLcvpZn19ba14Xfwpb6rDMrXNxGrG1aZmcOeDwenP5VHo+n3M2pNcyQjzYFFwqzrkMoJGQDXmnwBvrO41x9Mv0hcWm7ULeO5XKyYwrg+43Agdya941LWF1LxBHPGMRCBYi7Y6AEnp+VeJVpuM7M8erDlbKFvoaNqGux2gjjM1qJAMDGSeg98VzVroEVja3WqXk6xW0UYaU5CFY15Y88bsV12pa1ovgmxuNU1i/SyQxcRsf3koH3VUdya+dPiV4s1D4hsot4v7M0G3+aGyWQNkHoWfnc3b0HbNYytsh0cO6mr2OP8AiJ44PjzWt0e2LSrVmSyijXaCM/6xvViP54rjp18+MIhwgqxeSCPKA4LN8yjtVLzG8sc81cFyo9yMFFWRLIY7OELDjzJOWb2/u1BJM7JgtxnHegfM25h7imhfMXd6KcVbfkO59Lfsz20118MbhII2YS38pkWMDBIABz74/wAivYPEEySeGk025JE0KEoo4A+XIz9TXjH7LniX+z/APiiCzm8grfxkDP8ACyDkehznJr1Ca+T+yZ5Lq586Zl6kEkntXPVi3seNWV5tnF/DOxvbm2muoW8mS3bdJg4Zo+QQB6jrgj35rudU0K31TSdQt3dv7PvbWZJATkp8pPGex9CK4HwP4X1fV4bzVdCujFqumyl3tw23z4wcnGep6j6V3Daw50u+u7hEVHgkMwVsgMVJyK53eOpFKHNUSPkX4d/A/wCIPxStopvC3hHVdctVXHn2tqfJJBwR5jFVJB7AkjHOK9Im/Yj+Oun6ZJd3nw11T7PGhd3imt3ZVHJ+QSZJx2GSa/UT/gn7b29r+y/4RW1VY08tt5QYDNuO4/ia+jdoKkHPoexrspyddXWh9FKPs3y9j+dPV/Dt1pt81vdWclvKp/1N1E0MoY5wCjAMCcHGQMhTjNZVnokur6zFYQ4V5MBuDx3JPpX7z/HD9nnwD8aNHmtPEelwpfGMiO/tQIrqNfUMOwPIz0PNflj8ZfgbpPwF+Il7pWka/PrsctqsjSSoiNHksDGQoC5+UHgdGFc08TGlP2cnqOcL0nOKPMV8MvqHk2iRkpHiGP8ATivTPgDH/wAI34n8T6sSp1SCOOys4xjCgnMg+uB2rlPD9z9lvIjMjSKGVkUn+IHPJq14VjlPiDUZ7jzLe2kZ5UliBygYjjPvxXNKs7NHj1IuSscJp90be2jX7UVBX5tp5bn1q6urQteXzn54eFhj4HuSK56bUrW3kMDiUA8BlGRg9SfetHRYU8QanYWMUiqjA24Yj7q9dx+tOpFxk2ztp800kjaubsMqXlw6LbxFSGPAGffOD+vvXU2fw3tLqYa35kkF/Od4meUAQjAPyBTzxnBrH/aC+Hlt8O/Dvg20jvXvb++juJLq4P7uNsAbVRR90DPOeTVb4P8Axcg0v7Nonie8S1trdCLa+MW8qMgCNwOccn5scY59a2o09OZCr05xVup1NzcDQbL7Pr9nJfaRMmReLGQ/Xg/Q8ZzXQax4dXXvCuoXdsYGdbVZ7faRhdpBZGIPQgjNd5aW0epXf2P7Y3lzKdzKqlXGOxIxyOB/WuA8U/D+9+GudR8PSPd6RH8txZSN1Q8EYAHHPuc12pcy2PJ96Mlc9G+EnxU8U/BbWdF1LRJWk0e8aOK5sJW/cuXIB4zgHkkEEYPqOK/Rz4Y/FrRfitpTXFlm3uoSEurGXHmW8mOVbt07jj61+SUnjCx17wa+nRiSy1SDDG3m+Q7lYMqg9/516j4Q+LutfCf4i6Pqelu08eo2yzSwzPxP1DL3O7PPtivFxFGdH95Q2e6PocLiKdf93V0l0f8AmfeXxk+B3gn4nXVnHqGNM8SRRyNYalbHy50JBXI7OBk/KQR14Nfkp8cP2Y/FXwN1i40rxDb+ZGQ5sNRtUY212ikEMG5CNg4KE7hg9RzX6W/FHx/pvxU+GGneMfDF8DNpVwDcbSFkiB+Vw3UqQcH16EZ7/Lv7W3xG+KHxk8C6d4U0jw//AGnpGnxf2nqd9p6LJcEwkMpwx+QdyFDFsDt15sLUlKs49GepUvGkuZ3fY+MfD/iDVhPaWtncsqMwb5HKMuOpGCP1qp4nvjqN9dagZnnnmkJknf7z4AHP5Vu+GfC62ekprrOH85GFsMEKc9W+o965zVJop45lVc/PtJ6cV7SUYvRHztWo5vQI7JWjDMcLgYH15pY40kkGB5TKOMU+OPzIRuYooXbz3pVxEAYV+djgt6CtfiYU5JOwtlZma8CIA0edxDE44HIz6mtS4uHZrdjKV8seWvHPB/WmJp62MAczmeWZ9xTsFo+Xy84wRx619BhqfJBXHUld2GSKrTF3BxjA3dqYqH5zzym0fTNPUSMuwfMO+e1Pb5VjPTjBzXazMRowGUEeYRwfQVWvYRJJ5ELYLEeY6nhRV2RvJQzE8Do2OhJqnbqsedzYywPTrn1oWoWLO1GjSFGVQTtbA9O9TR2bOpaMLMAfvk4qo2GVWAx83PHakk/0dcISARng8H8KvYRZufLjiAOC442g9Kg2lcAjJXqcVHGkZ2O+VOcLjtU7Qr82H3D1ByaObsBHJIHkJB2ge3U095Wwiq2VPB2jFJ5bMqqQpHbHP50xt0Z2AhirdV559KXMxgrYkKjPtTo2ZZgGLbT6VC0ri6Xeny98VNI3nTfJnbnhs07gWVQCQJjjkjnkVG8rFo8Hy+1MhWRWJ3AnOCc0q4WY+YR06UrgPWRlYquZ9vJbpih5GaQMMgAEenemRO8it8pdP7vTH0NIbjc+FGB/tU7giWS4MgBHCqeVXpT/AC/MDGU/IDgfT0qvHcBSy7Ms3Pt1q1tXhWbljj/Gk2O5QuYdo3hwR2GOtRRiSL5lZQWGDntV3y49wALbe1E0cc0bKxKSHoTxmpauBX+2iQeVIuEHK/3hnmr8LLJGPm8xelc7eWciyZSQsq9Dzz7U7TdRe1kVZsjByY2pXsFjZWNrdmb5jhumeMYqsbMz25JZRgHJPPXpVtZotRhJUqCDk4NQtGvzCNt0R+8AOlO6aA56a0ZJnAGBnkntUElq7YO5RzyD1roZreJwJSigdCN3JIHWs24tRtG4DLDA55+tZSiUZZzHgEZqaOZFQAkg064iKmNeD1BqnIxjG1ULdqx6gatrMVVtuCD3qzDNLI3CBhnkZrIhlMcQGPlAA696nScKcZPTvVXHY2lmC5CttK8bk/kaW/tLXWLYW0pUx/wMnWM/X3NZccw2BUUHPLEnpVyNhwAfmHXJqr3DYxmurvQbk2V8d6gfupAPvA9xW1amGZSVk3ooydvJqw0dtrEL294B8o4mUfMv0rEutPbQHVmm86z42TD7wPpRsPc0bq4jhjdcnf1Fc3exjUFc8xsOVU/xGr89w92ylSpRuQc81CsO/c/LZ5+v0qZaqxOphRyNZzLmMhSfumuj0+VJ40Knep6j39DTLyxW+t923YV/j61jKsmn3CsD5qk4HOMVz2cS73R2aqrRFeHRhyK5/UtNm0GeSSM7rVmyVHJX3+laVrcRyMrLwUHAPJ571bkaFYWVkZ0k4654rW3MiEZlrqSSbSDg8YrThZpNoU7j1Oa5m+sZNJm+0QRZt24BbnbWlY34c5WThhxSTtoxo2tgUk5qeNNwJJ4Ws2G4E0i8YUcYJq2jEcK31rRIZe+zb2BB4brzVS4AZc5LMpIABx7ZB6g8djViCQRwsHbLnoaI1jWMknjuO9OUeZNFxfK00fff7JP7Rln8TvDtt4R8QXJg8XaZCqRyScfb4VX76npvGDkf419E+X5cwUcNnlTX5D6LrV14c1K31XRrhrTV7VxNBPH95SBgH3+nvzmv1A+A3xesfjR4Fs9XhMcWrQqI9Qs1PzRyg8tt6gHBI/TNfH5hhPZS5kfYYLEqrTs3qdxqLGO0Y4BJqvpUOdLXI2/M3ynvzV7UoxIvHCgc1YgtGt7ZVkHIXp6Z7V5UdUelKVlY5PU4X8mXcOOuTXgnxM0xG0y9EqHdGd529CQDivpXUF8sltgO7pxnnFeM/EDR/MtbjCEuyZKk45J4H41k9JXNk7qx+fvxEtxFfTkny2LDPHU45FcjFHuwcfLXqHxqsfsV15uQHfCGPGQpJ6/WvMLaQR55yPrX2mX607nxeYJRqEoAxx8oHrTJJgy/KcsKSQpH8w75/nUYJkJKjAHHSvVR5LTvYlW6ZdpYA7ht+XtU8a7p1y2FPQVEyqsgyQePwFPhZWkUHhf881aCxZaNidpOCP1p6wlmUnlT1xSRxxysUBLDsTUmHhXIOB0pk3uMZV3Y3YU96r3Matx/DjIqwqocg9zjPpTJYQqB0+cHK7TQBluu7AznvU0UzqwBAZV4p0sAVsgZ9KikWQdDtHf3rPqOyLsMgaQkcLitCzkjksHIGHDHJPasyFkAHZgelaen3AsbhmkQPHLGykY6E9DWsewFaSLzI2JVsk4OOtV5duFU5KrwueoqxIirvPzFenXn61X2jb8v1yaJRJ1K4KLIVB4GOP6UyTbGu0vufPHy1Y8kBiw71FJIV4Hyg9cdDUbA90NhJaQZPGcmrlwwGDu388GqkQ+9sH49qu+ShtQwzu25C5plXGZ3hgelP5ZcEjYgyMVCv3euQetWRFH5Mm1t+B27VKJuRxKzRhz90nPI56VQt4w1woZsE9S1X7N1a3AJJVsEDuO1U5ETaCuSPek1cDoND1a50HW7XUIHPmRkbtvAdehBr3BviAkzWVvpKyKgG5muuck8gqOhAHY96+drblQWGRkcE12vg+SS5vJLcyiKDyNyyZ5MmeB9MV5mOh7vMjGpTW5B8QNH1q6kN1qF/PrayTbY785BiB6K6rwufYYrk7fW7yFbixEmUO0OD904OQete5SWZWyeG5eR7C5Tb9ojxv6cMPof0rxfxN4am8M388M0i3LH5o506OpPX2xXj0pc2ktzSjU5vdMKS3ky0lww5fPH8Q9R9KzZJgjKA33jUl1dTSTJvdgEG0L+tZ7FGVk2Aysdzc447fSu7lOovGXdJhW3ndjA7VLNMqIAoKNnk+gqjDMVGFP8P8X1605+XbcAx6Mc1LiK56T8AtctdL8Rahpk8hjh1KEfvM52sp4AA6sT+lfRGkTfbWwquZVyvlydfu9a+MtL1mfQdQtr+DEckEm+NscjA7fnX1b4f1ka3a2Go2zeTBJEruUPY9QazqJ3PNxCalco+CtV1Pw9/aGp2MQvra2leK7SPIeLJ5DHup/Sun+JGqQaP8Kde1G1ElvFe2flw+djIeb5VGfUE1gaRcalofjLVxYwxjS7q4VrmJj1jYAFwvt7cfzrmP2kNUSHT9O0TS7xZLW4l+0NaqCWRUHHHYbsY+h9K4kv3mpFKPNNI94/YR/bk0j4R+F4vAPjGJ4dIgnZ7HU4yCIw7bijjOfvEkHpj0r9CPD37QXw98T6b9t07xVp88GAdzTBe2e9fhv8OdP0XUofFV3q+oC2/szS3uLK3OA1xcE4VBnryPu55JrOg8SahbwlYbxhlfl8lyGb171clWhL93Y+mi6NVfvE7+R+mH7RH7d2h6F4mgsfC7Q66u0xvPBIMZJxtU9z1NfGfxA8RT+JteudRvQXu5JjJJMzdiOnoccD8K8Ytb+71DU7KO2QTXkkyhI5GOx2JHB/EfWvVtetJFmnt3TBzubcMZBHb8a8z6t7N+0nrIWKxClD2cFZEXhe1QXh899rDJUt05GMUyw1J/CN5NlmvYLmIMYyx+Q7s9+Kg8N282qXjwx/vX8tn2/Re3vULq5tLeZxg7QgDcnA6ZB9vaq+Jbng20scF4n8OX7aXea/BAP7GgmSCSbdkq7YwuOvOag8B+IU0nxBaG4jUpHMkm7oAo9T/npWv4kvJb7w3Fo1oSiDUPtMzHA3DbhcjvtHNT+Gfg3JrmsRaZHFcPq7RmZLWX91vjxlSpHJOMkZ64PTrXtzjGpGzN6Vb2dmdt+1Nr2jazd+CG03VhqDjT5nkwwIQs6bR+IB/KuU+DvwXu/ippXje9s42Z9Es45YlTp5rlwBg8niM8D8egFd74d+A8WtTOmsXSR29oGieSOdZGt2B4WReeNxIyO4r1r4X/D/AMT/AAn07VZ/Duqx3XhzUJY5JrbSCrXBxhQ2G4yoGCAemDjOTWT/AHUOWJr9bpyleVz5++GPxkufAmoLo/i+wuryxhlV1m5S6gYHGG3/AHkC84OMe/Fe8+IdY03xLp9vdaPfyDSrhPNgkVTtYEDhsjgr78/jXN+P/wBnzRPigq65pni6c67I5jmttUWPdsUkDKoAeD9QR2B6eIxw/Eb4J386wIslilw2+2KiWCYkY8zZ15AGD16d810R1SaOOfs6rtF6nbaz4fhvrgTQXX2adW/etJ046EY6fWqieJri41zTE1acE290iQXaDYqx5GT1755IPNXtH+NWiavZ203iDTFtLpiwmjtIN0akHjOTuBwckVleML7RbpZGhv7OdY5ObqCUFFVj8uSeAc9jjOKG76HOoTi+56z+z/8AF7Qfh38YNVtfFOtXFp4M1C2ltbr7PE08cj5QwkqoJCDfLll5Bxn5QTXs+rWL6x4P1uPwn4hZrDUrWa3ttU02QM1xBnG1W55bleOQCcEHmvgWaETbwz+Y+xirEYJJ4Hbjv6ZGK+t/2WRceHfA+jW2oags0HiCU3traghhaq2ACcc5faWIHQnv1ry8RRjTfOtGexTqyqU+V9D5v8WavZjwfpNnbQvasrzLPb91YHgdBj6V57qDCS9PzAIzbtx74rsPHFm154q1uK0bdFDqF0pMnA4mbj6Vl2fg2/v5wZLhFySAOv1ropvljqcRjm6e4lUBcRrx8xqyP+Qhawr0fBbH61vzeAfs0fmR3xkIPzbkqu+mixk+0yEMVTy0Hcn1rsoJTlYjW4+QI26KMb+MLVWRBBGASN45OKnOdpbgNgEKO1R3HkyXGGYqSuDnkD3r6dK1jQkWSMfKnBY8g9c96iullkfG3cMYCgc1l32vxWLPFAftTqcFYFyM9smsxtX8TX0aHY0aseH24HsBSclfQfKdNJGGswjq4UkHaQckDvVXKswTB24I3enNZkNr4gmVGfUxbvgsUI/CrUjXlnIHYRzqG2e/TrzTi7jZMVGSEc7PfvTs+YpPTA6Gqg1byyDc2zovTKgGn/b7c/Ll1GM4ZcGrIsTs6s3AxjoKbtdSQcEnnK023kSZd6nkc7SKlZdvlsSV3Hk4oCwsMnlowDYBODT0C7hGwICvnH+etNkWMqcHPvnrSMu5WdiwOMBvekA9pmYmRRgHimtDIEDq/HKnFIG29RyB07U1ZTsKde596ZdhwUxyFS2GHXml8sSKzHLMT94UiKZW+bGT1akU8rt+UHj0pCY6NgqmLBGORJnj6VGzbiD3zzUkZHyOQM8jYRx9aj527sYOM4phsSSKVYEt9QO3FLD8wXeTwMEk9aZw2cKM9896G27uDhmOeKAJ5riR59wUCPjaB3xTZAzMWyynfuX39RUe5oZPmGdvSmt+8YnHPamIuRhZPlG0fKN24nn6e9ZOq6Gv/HxE7GTO1Q3OARzmrkU4hVwFwOOO1PkyzFt3BrPcaObttRSFgobYw4OfyrpNPvINyo52Owwzdj+FY2vaYnEscYB28rnnOao2tw0M48wM23Gdwxn3rP4R2Os8sLJhmHA6YplxDFIm5G5HtSW+oR3CKyr8/RgeKe0aeYRyMnAAH61p8SDZmVMm/knaR0JHWs+8tUkkJUsGA7dK3rm3IXleMVmzWruSVyVPtxWbiOxllRtIO1n9RTg2wZPA+lWZLU7+MKmP1qJsdxtHpWWzAbFIEJYt16jFWVmEirj5TnrWdNz09ami+VeeSBgU0I0opxuVVO0/pWlHcIIzFLGk8bKQY2HH4VgeYeCSF3Hp3FXoZPLUFnA55FO5Y+60AFWazcPtGTGAelUE3ogaRypU4246Vu295tj2pjn8DThbQ3nyyBQPyquVMRjRgq2QwZe65qPULFLq33jaD2jGf8Ktz2LWMzK68n7jDoRQs7MjD7m09B0oa6ArmDayGwmAdgoPJYcfhW0khIIUq4PPHbmquoWKvGSoGH4XnNVbeT7PNle4APPTnOays4lbmy225heJ14Zfm3VzV1bNo1wN4xFLzn0xXSLJ5gJzkH+LFRXMa3SSQyD5H+RpCPu8dRQ1fUNtCrDLHNG0iSbmA5C1cimXZtJBPXrXLrJJpN4SfnVe7cBq0NPvBIzCMenfPWojLuB0NvcLJOoxnJxx0FXlRZ3I+6QOR15rHguM/wAOCF24q5bzFSZFbj+76VtGVwLKgRsFD/P0G0c16V8Cvi9f/Bn4iWmvW436XMfI1KzHBkiOM88fMvDAnPGQK82jXz3BY8r7U9ZNxCZ5GRt5x1yef/r1jWpqtFpm+HrfV58yP2F03WtO8T6JZavpt0l5pt/GksE8R3K6tgjBH1roJ/nkY+pzXwT+xH8br628R23w21SZX064lkutPuJpMtE4XLQj1DHJHUhtw4AxX3vt/eHJ5zg18TXoyw8nF7H2VKrGtHmRk3kaDOBu5wD6VwHjrSEms/LOSzDqDjjrivTriENnHODnpXL+JNNa4tXBH7s/MC3TIHSuOR1RlY/Nj9pq2TTNatokcMZ5W2tjG7AznFeMSKsca7uD1x6V7V+1datL8QobdcLBbxLj6knOPTgV4e1i0cRd5GZj97d24r7LAK1FM+RzB3rs0fDukXHiOaQGRYLOI7ZbphkHPRVHUn19K6pPhittA2zW1Dd2mtXC5xnk54+tdj8MfDa/8K78O38KwmeaK4aOSQHaZvNIwx9m4PtiuXuPiRqE8LS6rfWomsLoxXNvbqAsjBsEHuVIzjPcZr6KMIqKk+p885ybfkchqWm3Wi372OpQ/Z7kfOqr8yyKTwykcEEe9Qbv+mec9x29q9c+ImjadqHw7uZrdAr2LR39pNIihkjfAeIkeoOcc89+1eQLNk7o1BHH1xWVSPLKxtTlzLUtrmP5E+8DwasQlcsCBvxzu5qLyVjhUvuWalXLHg8/WixoSNzH0AUjAxTNy7TH07jnvT+Io3JPtt9aZIiGMBWCg8g9TSaFYqtjdxnjrTNyZDPnrxxxUkpMIxsGD/FTSm+MKQMZzxWdgDDLIGbG2riyK0i7ySlV2U7RkVMgQY5pxRRoeXF5WSN4I4NZ/koytlsDtV6GT92Aq4H51SkKiTAXA+lUxK5A0YdV9qgkjXPcN6VYZgzOyg4HGKgb5ZE3Hk5/Cs7DGRqV+UkjPWr9mAqYcAq3AbniqnkbuS3uani/1iqB8inpmqER7Ej82MvjD7V+nY1Jat5aOvTcuC34VHdKFu2DD3B9u1Ojx5jFeFP+FIdiPS5AmIxyQ2Nx9OuaGwjMAQT/ACpunEv5hA3KflU/1qSSFWkLKBz1qRLYXrCfmG4cYAq/pF1JFkNnaB29M1QRm+cEDb7Va02QRyfN9wdVPcVlVXNBpilG6PTvDl3c2tn5dvffaLNgWEEw3EHuQT0+lZHxO0yTUPC9zc29uZZrQF9yfeRM/MffFZc2zTwlxbzSG2kHzInZvpXZ2K6d4q0WOGe5msQ8bxgg7cnaFO72r5d+7NM5IxcZo+aTLICHLF2Pzbqay7pM9W7mrGpWbaTeXNjKwaSGVoiV6ED+Id8U1EKqG2kc5x7V6S2PRvoKsYVSSDUoZSFIGGPXFNXazDaGwepJpQwjYY55xzQNdxws0kkUYYxg55OcetekfCzxBdWOqQaTcXW23bcI+cBhjgGvPozJG7MGGO461qaNEZrY3LZTBK47jtnrWNS5lVSlDU+i9QtLnT9Yhu8vFc+RvjlJyMjJKn2IPavH/GGsf2trdzdBFjSNQi9cEk5Jx1AB7VYk8ca3JpFtpX2rfb2+5UkZfnCsORu6kVhfZsI0WDI55O30PYmuPVnHD3HzI+hf2JfhT4L+Inx2t7PxXpVnrukvp1wBazrmMzfu9rYxztG7qOpJ5r3T9oz/AIJ1/DjQdNuvEPhTxVL4PhijytpqNy1zbF+QMu7F+cYxuP0r48+DvxEn+EPi6z1u1YCeDJkU4AMZ4b6txxzXcftIftbXnx00iw8NWmlpbadbXC3T3DSHzXcIwxs+6B82fqB0rl5qzlyLY+kpezcOds8e8F6etl4ydGljl+zxTBZI+meF3A+vH616Jq3iC61S0SOZleVMfvCuGIA6fn3ry3wSwtfF0BuGK2zxvG4QdAQCOPwr0C9MEd08drJ5kPG1pPvFj14p4i90jx60nzWjsP8ADMwF1fuSIFWymKuQQA2ByMd6fcWdw1nFcpxAx4kf7vTGM+tFpIkFvegsFeSNoyuRuPFXLG8n1zwnJpeoSbLaymXyrgKBjOfl965/hRzHkqx3lqWKbHznEpGSw9u3tXoNnrHjjUZdG1q3eH+0tJVYLS5iYLKwP3A4/j547cVwen3kk2mxG4j88MjMzOSCG967fwb4ii0e8ivNMEQmhUrslIfduHJwa9p8oOLReOn/ABa8N+IrzX5PDeoJdXBK3rME8iZSOVK7sHA6ehJ9TnmY/GnirRWV7S31rTYhOLoqIZVV5FUAM+37w4GOowBX0n4X+JkHjHTLJPEesNqF0ivt0eB2j2qOAWx147ZwQOlehy6Lc+JNLkjk0qLS7VR/rLg7SBj5do69P5VcXCWjM3p0PjXWvjJqPiq1hstct47OUDcdQt4TBJK/ZmxjB+hGetWNL+KlxcLFaa5djUYUJVZJnDSBOxJ/iHpX0be+E/DwxGLKHWLyJiXubqLKyDtxjGAfSsS6+DOjXtsXvfDNjBbxNukljZl4PHQcYz7GtXCKOe/kfPXiDTbO5uhc2GwEqoWVflV2Oevoa9n+BH7XU3wJ+Hmo+FJfAOn+Ihc3cs0c1yyoh3AErMdrFgOVGOi4HauL8RfC7wzouoMkuoT6bE/7tFklGC3JJAJJ6ntgCuSl03TkstsurxzKkgEUfymSTtknORisKkIyVzsoVpQ0WxR1S+fWtSvNRa1t7N7q6muTa2eRHbiSRpNiey7tq5/hUDFfQvw38Oyx+CLi+bU103T9FtoprS6Y5ZoypLRsByMdNwxgmvELzwtcLeWFro08N+16QiMrcIx/vHHpz7CvcpPC+qaz8LtTh0yey0/T9LgFnNfTMRJdypyYVUH5sng5PG7PY15eIfM0kepTTScmjwPTY/7WvbqeI5Sa4eR8nJILEnmumtdJM06ra7lBGSzcjI7+2azPDuiyxTXUcNzBGLddxDZ+bHBAPf8ArV5NP1O/DfZ72KBF+bLNggg9MDnNdai7JI86TVzqrTwvK6pdXCLHaA4MkjBQRjrivPfGlxHeatLskia0jUBSvTPTPFTars1C6WLUrm81AxkhVMjupJ7hSdo+uK5a9l8uWS2iGI4zjnnjNetgaLT5mRF32LKRxqj4ZmP3VwMZ/SuY1jWjfXQsdOQh+jyMMlfXpmrfibXja6fFFCpF1INgGCR9R74qLTtPXR7fyl4nYZeQjn3Ga9mUuZ8ptsrsfZ6bDpMCiJgzMQXkzklvrVlbx96EFvMUkZ3daiGdx4G0dMiklUybGPCj0/xpxsloLctx3DmQnbl8cg+npTDiXcXySR0601GdV2feH97NSq0flnI3+1WMjX5gFkwsQ9gfpTdu7azKrDH8Q5zQxAUBUPXp2pZOxPTuaEIj8sOG42MeDtNPVJ4ZEw4aFR/H/KhAVlPZcZpdofJL7j3GOKYWHvdm2QRyW2z+LzDyKGlWRXMZ3Z560nWPDckdvaopbO3nl3OhhUAkOvWmFidsBir59QBzn/61I3l+aXU7gBwB3NVjNdxLvVWuYWBC4Hzf/qqwrJIiKvyO3DK5AxjsKLh1EjYSKvOCDkVF5zpOA543cccVYaMxHd8vpjPSo9wZQGw3sR0pLcCRWBaNgPm757UkiNG2xwDzuOKqxrJaqAWzzzk1LHI8jHkM/wDFnuKGPck+ZMHgZFPWMsofA68imMRJGwx8wOfwpI7rYzKDge/alcLE9wjFl/LGOagZTuxyDjoeKtRtuTLOW29x1qdrX9ysg+fLgg98elUSUUwFbqdoyc9qGB84ANlcZOKdIvlyMNpAz8zE8MvpTcjB/hx1qRk00YukwcHjOenbpXMXlnMsbuDuKrsGT79a6LjK88DrikurMTxlo2KoDg59PWlJcyHszmrHUCrFHBYg4JrqbOQPFl9v3OGP8643UIVtbuRoi5UjK1c0q/2ttckHOOPTNYqXKyjsHJh+ULv4ywPQVWnj2Q7u5GQo/lU1hetfSGJ12nGdx7jtRPiJwpU7gc8+ldCfMK9tzJuLg3G1GRQVGAFHpVaS2LZBHNawUiNlcZYHP0FQ3SjaqxKW3ruB/nms3EdzEaMbcOuDTTt3DqB3qzcWhk5TJNQbTFlNvJHWocSRNw3M6KG4wM0+ObJ4JP15NCxhVdyPyqH7zZ5CVIGhCyMOfv8A61Osphwc7sn17VmwtmQFDgdKtSSeX0wT2p9SkbMd0jAQSqroOmRzVe808czwuwToUHNZscxaTLg47EetaNreMpPIGOrf/Wq07g/IqfLhsoRlQOR3rNuLcoS23AYZz/SunuLVLvy280K54JxWRfW8sZOMD+EbuR+VKSFG9ypDMyoEx8uOKsspKRseR3NU9zeWp2457c1I0hEeMnHWoG3qN1S1TUFAcDdnG49RXP7TYzMCGC5yD0zXS7kmRQVY4OflrP1e1M0alQcM2B7Vk4lXIrXUhkjnf25rUhmLRhicc81ysscllcEEEEd/Wr8OrIYViIKknnmlGVtGM6iO+Ma53B8VKNSMiglfL77V/rWNAq4+Rht/vZyCa0YIyxwRnA5rdMjZ3NDT9Zu9E17T9a06Y2mo2c6z28m7GHU8D2U8g+xr9gPhb48svif8O9D8Taed0d9bK7p/EjgYZT6EHNfjn8kioNp5Jyp6E/T8K+tf2DPjknhPxRJ8O9WmMdhq8rTWM0jcQzgDdHnoA4yfrk98V4WZ0eaCkuh9Bl1bl/dn6AJGV5GefXmoL6zW8gdG3AAfw8dqvsremTzUTn7wIx2r5XyPoW76I/Mf9svS5dP+KECkEQyxghl6Dr1/OvBLiF2t5AUzxnr15r6q/wCCgdo1j428OY3/ALyKV1YDpggf1r5bZkjXft2mPK8dgf519nl2tGx8lmEbVbmz8LPip/wgt22ga07v4ell8+GYZka1c8FlA5Kk9VHOckc5r0mz8C/DvXoZNQS3hvo7qVpmkS+LBmzlhjPyZJPA9cV4bcWq30ZV1VgvQyAED0rN/wCEatt+SCvfaDx9Oa9mE5QVrXR5EoKeux6p8UvHVrJbPoelrBDHNGltLb2oykVuhLBMjje2RkD7oHauJt7cKi8Ki7fugdPYVVht47fYsSbQp6LxjnJx/j1q1G/JXpk56UOXM7sIx5dEDb42cCQtuOeRU8cu5hkKDUTKeo5NOhQsxfbj1qjSxbkXcUCBW3dO31qJlMcrKIs8ZVutFvxIzn2XGakYvHIwZiOflpCZFO4Nr5mMtnBAqkqiJRuzycCr+5f3w4+YADiqzx7W8s+nBqbagRox3Zw2MYqdccZziouQ2Y+c9c09ZAWBIHvTVhmhFlgg2mMr15ptyqzZYH6e9JGBNsdZN7A8kdMelExaGZlxtHVM0+UVypMSsIVBhqqttZyTkyCrcjEtuPII4OMVXZj5iDHSk7DFWRFZfpzzTxlskfnVYIufunOeasecqrjPyZqbBsPnBZQejrxuIqC1JyN3TnP5VNJukt2VTn58/hUcNv8ANtXkY4/Kk9AM7S52ZgikoFZv51tXDpJlVTYCO1c7psxW4aPPzLKVPHauhkI2dOaSArxqsaldxI+tNVvLkG08sMHNSRoCzbgMAZqOQD5WGCpPFIm5q290GgxhjHtwfTPrU9vrws7XySGXnC4PJGR/hWejGS3kHAQAfd9aw7+ae3uHiZMKBlDuwD/9evHxdFv3kZ21ueha7qsHiDwi+kpb26kE3MWFHm+d03E9eleQwHzFLbuenXNa1tqEsDLIjsqhh061nzWwt7jIZQHBfaR69q56UHGNmbU/Mg3SKRtAIIBHNWUUXbfu8E4yWNRtHIFzHjIGQMVKZFg4QYOOeOtaX1OiyKrfu2cCTOGAG3vmus0O3uPsUSFfLJ3OR3PPTmuauJ4UtQrJnC5C+uDXc6DH9p0m2uFGQwIX6DjH51Mve0MKklGJo+QPsbySKruEKhlHU59Kglt02IFZg7ct9K05oBFpsMiHky+Xj8KzWkMbBmI3luntXM/d2OHqJDpYvrxiyCSKJAwiPqD71dt47PzGMsKCPHAjUDn64pL5oo50UsViIDjnAOaz2uWmgmjUFxkY7H64rlcm3c253YrzWY0vXrKSIZSZ1Xc/IUkkYP1rsmjEci7EbcDnH90CuWjDbNyY4O855G4HIP4V12r31vdJF5O7DNvkkYeo7fjUSlc1hJvchuoIRdXKLMJyVYrMg4Py5zn9MVPoeqGPw7dWkrKHUrJFHtJ8wkjcCfYc0yEAWZkIVWCE7V6H1/GsvUI2FsptnVgR8wbIPXoRnqMVzyjzE8q57nMabeRrGbaRgsvKhmXjp0IrPm0W5hUSjMTxkr5iH7zfWqv255381hvkmbKgHIA6DtyfpW7JrV9pcP2JZh5c748koCS2M9+RXqOL3GnokUrPxhq2iv51nMilj3U7gemR74rtNA/aD8U2utWlzqdwmpwIDGqapvlghztBl8sHkIDn6Z+tcZNpoaMPJF04OTzWPcaWbXOHcYO8M2eD/nPvya0VnoaRir6n6feP/wBnH40W/h6w1f4eeKfCvi61miW4aG80z7K2NucxvvcMCeMHb9a+EtY+LnxL8Ralcx63rV1pb2krQvY20CQmKSNmUrggkFWBGM8V2/wR/bS+Kfwv8G3HhDRJrS80xUY2s19G0j2JOciLBGV5+4cBe3HFebX1/wCXNPeaveqb65lkuZ5JWBmnkdi7uAAOWZieBjmojKcVys2nCm3eKM67tZrxmluJ7i6lzjdNM0nXk43Z7+lZFzYi3YN9nRGb5gpA/wDrd6vX3iuO4jaKwgaNcczTDDD6Cs1tVjlVJmQtciXe8sp4IxwAKOYy9nFO7O/s/E0PgHwzYtDaGTWmLebNIQ4G7oiY77SQTiub1TxBqPii4jN086QxsfJt4pHWOIkckLnAJ6FsbiOCccVmXWoLqUUIu7lZEQBtrN046dKF8Q2MbIC0jMOSFT5ahQSd1uXKpJq19DsvD0xvo47NFVLhSAevzD1Ga6qPwzdbxt8xL2PBjHT8M+9eOyeOpIl8u3tY48/cmcHcPSvYfhT8UrTX4k0nXrxbPVl5t7u5ZUS5UkApk4/eZPA7iumC/mPPqLW6L0njLVtE0S/0+ayt5n2NFPJLGvmR7h1J+vTFeQyRyyHcSDK42Fe/Jr3P49ab/YHhmK+tk2yXk4tJMAcHbkN6jPvXhV1eLpyvNKHkVU8w8c8dvavcw8VGF0OjZo5qSR9Q8RE7CkdkQqo3J3dvzNayu2Dv+csKy/D8c0emmdnz9qZnbPX5Tgc1ox8ZAztHTito7XOhpDwrB1RwVUjjPWnct0HzH5dueKj5Ujj95j755oztZWBw2asQ6JtqgAjHT6U+NNi8HcM9agVGOAMbR1qZeMgHAFO4W1HtlzwcYqDftjYHLHdU3KkDdtOMk1FIHkUMDxn1ouDViQN5W7LZ4702KQSDp0pDuCgMMn1pFYsTHhhkZ6VSAkIKliCAenNKrlgAeM1EVK8PyQcipYd0zbh99jwvf3p3FsTqzPhQSP4aqXNrHOzKy5Geo4P4VOZB8zbsN1AApZJ441hCjaxHzMfWmIqTQy2ASKI+fDyw8z73uKdCyXUbmMhTnO1+CaljZ5OCSD6mlurSO8PmSfJKBlWQ96BojwWUhxz24qIfu9pU/PnB4p1xM1ltSRWmXbkyqOF7YNEy7VDKwcMcgrz+FSx3F+2Mo3FNwx1qLzA7FjgMxyaZuEhwu5T/AHTwKVjt5dsnHQUguSMzruAOO/FWrO+bjdIMdgxqmz7IwT8wqDcY/nAGD/eBqb2Dpc6W3WFo5GaPfx90nBHpWfyjZcglTtfHQ1Vs9RaM7lfaw/izzV/YlzbhhyWbJ96u9wRCG6ED5elT28m2MocbirDn68VXGIcKD8oPNK6lxvAypb1xQNmPqmmOk0zruYDp6H1NYpmWFyVPzHocV1t1btNCI0baVPJU8EVzd9p/lxjAOfMDfhispR7AaOm6l5iq5bY4ONwHp3rpra6E3zTS7vlyxxz9K88t7h4lPzlM4Hr+FdJY3gkUZJbtUxlYdjamTYzHawVuOeahaORU+UgE8cVPHMJIySzE9DntSrBvGD8uDkmurR6onYx5JHCnK4PtUJtWl2tzV1YQN27cRkjNGDH1OBiokuwGdJA6vszhTzmmSJtjfjcc8AVbJZ845XPpUDKJF5O3ngVz8tgsVY2LD5FI9qm2jap3buaYVWOXCowC9M9KlhZY+cZcjp6UxjJFZe5BU81Zt5tpx0HcetM3bkTJyTwfeq5+VjtO4Zpi1NaOVm2gcuKt74rpTHcgBicq2e4rJtZWX13Y+9Vgt5jKxADL6n+lFx+hFe2P2VkkTds/u1UGG6glvatqGTzFVWGYj1year3mis8a3Nu4LKCvlk9Rnk/hVWQrFBPmG4hgxPaiR1ZtrAyqDn5etJ90shbY3UjHTPpTSrJs2nI71DGZ+oaeLgM+dqBSRkcgjtWJE2xiGB3dDxXWOyCRlc8delYt5YmUOwwhQZLetc811RaempHY3HlsEDsEHODW5a34eNsPwrYz3NctEzybY1IB7E8VehnFsxXIyxHuKmMg5TrI5V4JODjOfWp1vH0+4iu4J5IbmGRZI5YT8yMpDK31BAI+nIPSsH7cJFRS20AY4Bq3DdMVJZcj0b1rWSU48sjSMnTd4n6z/ssfH6z+O3w9gmlkWPxJpqLBqUA43OOkijk7W6/j6givXpY2ZtvHTr/hX5I/swfGQfBH4v6brFw7jRbofY9T25x5LHl2HfYwB9huI6nP64xXEWoQxXMEgeCVQ6OpyCpGQa+KxuH9hOx9dha3tYcx8N/8FF/D3kw+FNc2sxiuXtN+eEDLuy3sSgH418YSRr5akYY9h6iv0f8A29vDP9s/BW8uVTfLZOlyox1CkFvr8ueO9fm6ufLDg5U9M9RX0WWyvBo8bMY8slLuMeEKzNGpXd27VEd7DGD0xk1LkyoMOSPypq7o2wBnP9417nQ8WwiMxYjGcCnR5DFl/EUsaNNIVXhjxipLeMDOSx6Uo7k3HsNqsw5AGTUKyOyoMkL3qa4ysc8ZOQ6bfpznNQQxqFPz9+melaPcovKoKblOQvVelOK5XcO5xye9Vk6cH73WrIZGO0rnC9c4pXExs2bdtoK4AG6oGgkkUswwOo6VKbcvGSq5XGTu6k05tzWwbzN7Z+6yjijclFRSyxjj2p6ruYIThQcmmMA753Yx1wDxSEDHzEgd+OtRYo1oZER/mABB2BR0+tWZV3RrvUBv4TWfCiSKhcEbhw3pV1vm2ENu4wBWgmUbiNpGwq5I7gcYqrNG+04GPQ1pSMw5wdwGMDjNUppCrFMcdaWhRTkWRRuJ5zyoqQMdvH3OtNdjGrfKxfbkDB656U4KVYDPKjIOKloCddm4gttLCq7ydDES8g+6p7cc1ahh3KJGOwBgPX3qkrnzmZeF5AIFIXUxLFiLiRpDtZmKnH1610iSGVF7qRXKWkyfanGcgsQSfXNdTF/q9sZ+me9ZoOoqxiTIJwMVVVNseFbAXpVjcNxHQGq0rEs4CgK3SmLRMs6ezoT/AHT1BPWoNcga800zqQLiMZA7Fc4P41Jb53rg5GNo9atbjHIuRnaTuU9OmKGlJWY7I5zTrE3cZLTCM5yBiqU9wfnicCTYCFkA+9j+VbNgg07VJ7Nx+4lcsjdwcdPxrTuvhqdLtxdXF0ZTw3krztDevHpXlVGoysxtpI5K0XzJHcuN2NwXOeOlPvphBHtIG/GdtbE1jawqJFixgYZehxmma/4fuTGt7afvo9qs0KAlowFPX8q5Oa8ilNNHIsWkAJbJx8oz+lel/CyZL7S7mylc/wCjuGjHcg8kD6GsiXwfp7aWs3mGW5ZMlo2/iPfbUvgS4Xw34mtrec7oZpBFIW+UAkcEH09TW0pJqxMlzxsdzrcX2dIQcrEcuvuRWBqU4twYkAMi8luvXtXUeLf9EvLPzGGcGYrjhcdPzrzk3c07FpT8zMWAJ6Z5rjm0lY5YR6s01uftSQwSNhs9W9jT5nmtSY0VW45ZT2qjDltrkYXONy9qvzQyxF5XB8oKMMD1+ormVuiNOXQiMjbVBOFPJ2nHtXVxoken2pEikSKQAOT9DXJ5SaIEHAYdjnjNamnLttwVIbyTz6VlJFwjZnR2cDTXEiIu9UUjk85x0H1pLKO4vLcW4gLXCHaUK5bjrn8av+DWnbUYZIlVpwxO1lGOASfxxyPetfwrrn2prktLH5t0DmR8Lkq2OfTjj3rmk7FRS5rHztdX4tTHHDz5eCWPUfTFR6LcyDXbOR3MrvIpbzG3EHJyc1kZLc7ifXNTWEhgvoZgcFHBr6Vr3RWse06bo6XUrJsyh5Kt169afq3h/wCx3DafexboyPkdMcr65q9o199osLS6QfejGW+vUfStLUr1b6GO4EKebav5kcjn7uRjk9x7GvNu4saPPvEl1J4TkWx0iPyrJgHkmcEl2I7+w9Kj8OeB7TWfCOteJb29lS4t5BbWdsGX97LtD/MCMlMHHBHPerPiLUYmbyomWRjncxGR15IrmtSuLuC3VRP5MEhwCBxu4/XitoyNbcquZ9u010qKxGeynsfSuit/Amp6lHBGgNtPKuVZx970zzx+tUPC9rDeNDZ3Trb3DNi3a4YJEzHk7m/QV6Xof9s+HLpJbeXybm3cZhmXeq89OQfyz7itVa+xxym2cNefCfxTpt88T29vdMigssMynaO3B7+1c7LZ3EN21tJE9rKD8wmBTb7nPb3r6As9btrzUEi8XWItr1wBBeRsDAyDJw/91gRgcHtWF8QLG116GMRwxiSDEkE8I3bQB8yk9wfT8qbiZ8zeh5F/Zs0cmxwpYDIxzn8a1rHRRdIjTzC1QDdnO1z3GDRJGLWZ2WQO4HCtwMn69TWey3OoShc5i7uOn0qLjWx2+reLNW1jR7LSb2/lvrGzcvbrLgshx1LdT175xiuQ8TXP2fRXAlJklURhTz1PI+uOa04ojb2NupztKN/6Fxn8KwPFA3ahb2r7WQsrr6FcnI/Svep6UzWGg6zjFtZwR7twCKCPfqcVYiSWNid+d3ZqRoypLAg/3fU0J0BycnpntWxbHNJsxk7hmnTOmzGcn6UzcCueh57e9K4WNVH3x03UxXHrlYyQRikSZQNo/i+8aGZSTx8vemGRWUhVx2oHzD5JCVIYYcd6X7oBY4HtTDjzAOv973oWRgzAnIUdccUg1ZLu3qGU5HvSNJKrb26ZwOe1R+YitnPX06UoYDO1vmPJIqhIGBdshwD7063uGjkK98ct3qIMNsnuOM8moGk24IbHNPYbXU2bdvMxvKnHHAxTHXKDbjr948iqEN0WVsHkEfe4zU636Qwsinc2eUP+NNSJLXlt5e7gtnGV4zTNvlqV6/NnrRHcowDbSox0zVyzjimVskYboSKsCpHulXy8bt+Afpiqk2n3FjuubV/MVxkxv0HritI2XJwcbRjcDUTq0akBW6bVGc1LGZkFwl1kKhUqcuG7H2pWcMHyAS3A9hVmYJzwqyEj5gMHgYxVNZhuEU5CuB8rdj9fepEScfOM546dqqybpIyFUkjnGT0q2n+rKEcf3ulLyFKKQGGOQOtQPVOxlpJgZYYHt1rSsdQSPKbuMZHtVK4iaQF+MgcgVQ83yWHyndtJxnHQ9Km9mV6HZbIp4TKCFAGOe5qlucsFPCVFpusM0eVXYp4IfkD/AOvVxsR5k5Jfg5561rzcwrhDIIQ4Dbt3GO1Y+pW4jbOWPHGe/NaXK7cYC9/U07U4FvLWJkGCi4T1980PsFzj7yILcltvybsj8O1T2N+IlUMSoxkVauIFZXRhww4rIkTG3B4xzxjNcrTQ0dha6gzbV67gMN1BArWwbqHzYwX3fwjjpXH6bfK2EIGf4v8ACuk066WPnftXB+U+9b059BskePJ4+VupBP6VXki83OR+taMkWEBwNmNy+pBqEIJJOF2/410+ZJTij8tVBGaqXEIW5JAwMcc1q3ULw8qu5m6gHpVORA21S2MHnIrFxvqMzZEfDgPu5546UkGV3YHzHuat3VsMbR9T3qrJH9mwBlif4ccCs2PqO2+ZzjocAjoKZJbvAwDHg9GHcetWIGVWG8gcfdHenNieFhIMFfunPGPSkBAHl/1a4XHJY9Km3nySGjy2cgmqq/Njbhj1I3cVNGPMGGO4A1N7D2JlZgFBztBzVmO4MbZzx0P0qo0ZZS2RuHG2mQsyfeOTV9AuaU1pFqEbMpEdxnhgKzbi3e2Yq4xjv61ajkjVg+41d2RX21bklUxgNQg5uhgmM7dxHP8ASqc2NxI5Xp35rZvtPNtIEjbzI9uc1lgpsKsvAPNJoRi3tkVBkQYHdf8ACqcO52x1YV0MyhmcYyOhX0rDvIzDMzIMLkj9a5JK2pqmWoGYrhl+TuSTWlaXHnOU+YR4wCaw4rlo/lLcGtOznZolC4jYdxTi+gM1fJJVmWViQBx24zX6Of8ABPv46L4y8Gt4A1OUtrGixGWzkZtxntdwAAPcxkhT9V9a/Nu3aWScE5VmwGHY+9dl8MviFrPwi+IGj+KdCdRc2Mm2SFjgTRNw8ZPYMARk8AgZPrxYygq0NNzvwdf2MrS2Z+sXx98OHxX8LfEGmqwSaa0cIzDIRsdcGvyOt9+4KyAPvPyntk9/pX7H6P4i0T4ufDq017SrhbvTdWthJGY8gruHKkHkEHqDX5E/EDQLjwv4/wDE2lzhY/Jv5x8vAC+YSuPwIH4VxZa5Rm4s7sdFOmjDdlzxxk88VBM+xweSB04p0uY2IxzioPPLKY92G+nSvpT5692yVN0E28Nsbrgg1Natu3AHOe4qrgyD5hk9CxJ/KrliBGmzGXPrVxJciS4RY48rye+arRqcHAXPvU8kYZQpXD9etQqCuQevcdeKGCHbRu3d/Y8VatNkm7qcdW9KptyMJ0PTNTWaf6QEJKq3XB4oQmXgUWLG8DHYCq8jfKWX7nQ1LuXblQD746mkdCoZiBlutUOLKbKI2xjO7nIzUW4sy5HGauSf6sDADHoc9qreU3JY5H9aTKJpGKsATyOAR2q7auyxgFt7DuRzVAMW7Y4x1q1ZFxtC8jvmq6ASzncy/eBzhqgkhEeR1arshkiYBgpUnJ5qvdAyQh16Z+lJIVzOKsshBHueaY+GXcnPPNWJmXBBqsVYRnYQORUvewkWrJ+MHOcc7exz3qLUP3N0/O3Ck8dOlWPNMaiJlBXdu46n2z6VFqjKqCVyACuGGOPu9aT2Dqcbpjr5m0MTIxPDCum0/dHbCTdv7DPUVzdgUyF24Zej+/et7TQI4yC3fGO1YxG97mht6nt2qq3yscHtirEKlp/LzgY4zUEu5WkTgNmqTF5joMeYgDYJbaSO3vWhcQhdrIS64+ZqzoZzb7jhRxtzjNX45laNwc+W/bOBRsC8yxpmkx6/cJblhHKc7GU4y2eBn1NdTbyzWbTWmuWcjIitGLoHcYWA+XeAef1rhTJ5eWUkFfulWxgjpXf+H7DUdStGWK4jkwMlWByRjpnHP515uMpc3vlxhTa95mb4p0mxuLa0mjkjaRoASEGDkHHP86i8N2EtyCts8YuNjNtlJw2Ooz2z7/lVibw/PG0jSRtZsoyZGBKkjpz2qxN4dtorDz2ufLRx/rCPkHOecV5XmHsZRd+hw2raVqWm3V1FJas5twSPLIBIz1NZOoW7QwRzMfLuGKlIZOudwx+H+NddeTXPh28gu7S5hvFm43Ic/L0KmrV9HY+ItJW6ubMCR/n3E4BIPTPX8PWrTOr2atcz9bvdQvFLalbz2t8ifZzbzIVct6+hHuOOfpVTTvDd1qzA+bHDEwO15OBkdj6V6LrGrW3jb4RtaaxJEmuaXqAltdQmwHmtsAMmcckKxAHcgelcDNdXV1Z5lZTDGM7YeQxHQ4FZyepzunyjY9FvdPulim2lvNHyqeD2qLWFljuBFIyu2fvDoPbFdRoeoadrE9ot1IxmjdSdwOMZJ5NZPiq2it9Rmkimjn5LKq8bMnhfyqXboZPezKenPNZzRzLEjqhDLkZGcd6sae0s14sIZd0r/wCrUY3E9BWP9olGD5hwT2PBp0mpSWUsVxbbo7iI7kOM5YEHAz7ZrCUb7Eq6Z6h4Vt9QXVLJljZSk6ecy9VXJ4b2qLUdFbRb6W5iizaTTyIUI4jIJOMZ79RXcx61DeRwahYrst7pBKyhfmLHswqKRvL1Rhcx+ZbyASyhV3DJHA6etcFS66EXlKVz5YutIDBp+VDNjjpUcelvHJHtGY2OGJHSulvYpIYv36Eowyi7cYxx+dZ8luVjzlozjAGep9a+nlLQE2d38OdQS40iTTnkWNbFmcSN/wA82JJz685ApniDxZDNAkNvLiPO3bt+8ff1rlrdodAt/tk5KzyrgoO3YE+uK1NL0aS8ubcvC0sEhUiXqBk8En0z+VcMl1OuKSVyxofhee8bzZgNi/Pntj0rc1fw4LjQ7yRrbcVX915fUyYJ6dwBXd2XhVoUhgKAO5AxG3X6iu203wnFJqFlFPh0XKmJBzkjkE1gqlpWMZS1PjJb9rxVhWHOOAysQBznI9K9C8H/ABXfR1+w65ZSa7aIjbZUk2XMXp85J3gdMNyBWNo/hnzbi9eODy1+0yRqD0ADEfpTbvwzNHqToD5seAzMq4TnjAPTHv2r0OZXOeVSMdD0TXPiF4RvNLAsbySSRhvMdxDsKED7q8c//WFeft48mYM+mRLAjAhhOSR+A7Vm3mhzyM8Cw7yh+baCeozwT3pIPBGrzafqepW0Hl6Zp8W+4nnYIAeMIMn5nOeAKdk9gjaWh0ej6bF4ujkmutX0/TShJkW6kCmTHaMHv2q7cXmmrGun2UccsKtgSDOd3161wdmqzKSz8Ack5GSD0PT+Vbun6S8dj9vd1EZk8tVUgHd649KiK95INmapYTY3OBn+FTz/AJNcvfY1DxVIJG2C3j27c/MeOg/OuikkiMyyKMIGHA6HiuW0tpJrrUrn+N5tquOgOT/SvfWiSN47XL4O6MbBjbwKm8tEXG4lx92q8X3twI7ZA7VMGYyOrDJBOGq7jewqElsn6nj2oXY+U4B6gCljYcqwz9KRWCnjaP50CWwiKV+U/wDAqcuxo8DOVYg8dKSSTgKFySeWz2prHy5GAPBPPHWmO1hY2COQ3WkCsfp2HrTNzMg43Hd16UpYK5IJ9qYX0JBiSTOPlA9KRvlJ+Xbuo8z5uPlWlZY3ySzZoJ3GtGVwcHGcZNOEAjkVyMrtKkkcZ3E5qKSHCg7mYddtXFmcWaqm11zyrUw1ZQADN9e4qPafvEYbpjHNXWiXdkkRjOQccfTNK0YaQsmOep60CtYpx3TRbD/rNvHPWpjfvbtuUscnnPpSNGoyc7+2MYqKSCQ5O36UMC5b6mWLLjeuM7jwPpWjHqSBSXQfIOp71grC6MNx2nH3ccfWnqxVdpPOOd3elqCN64EUyhkO44zxVaTSorqNgQCNuWDevtVCO6kXoNo9qt28zLC2XyWGOe1XGQyjLZ3OlzNHL/pFsQG3DlloExaMtG3mKTu3DPStb+EhtxJTlup61RvrVGuDLHEfLOCYQcD3oYitNGfl4x1/H1qhfWbSRfMdvOeRzWlC0eVlAUgNkR5yVHoarttkYbwZG2knkjpUS2KXc5+OSbT7g/KzjPIY8H3rsNL1QzW/BWSMkZHQjtXO6tCWjYqqnB4bPNVdLvBY3TrJuXcSCB/DxxxXOnyM0tfU7KS2EMwyDhhkc54p0RVi2WKjoO9JG8c0ZIHzqACTzUbA7guQpzyM9K6U76kMzb61KSPwQM/Kfasm8tgilmGFx2rsbuNTavk/PGmT3zXN6oglheTHlluoYioqJtgtDEjuDGBhu+cV0NndLNGmQNxBbj19K5+VY4pOzA9Mc4qzpcrMypjbufr+Fc63sVfqjtrO7DRosgJ+UKDnpircipJEoQM/y7htPP41zVtcsi8Hdu4xW5Y3K7RGz7WY5XHBPqK7YPoyWPWSMcgZfp6j61F5JeYKc/McZq15flyB2ACHIPt70x9vAz5bK2QcZwK0sxXKEnDevqarTbvvZGDweK0ptrttRcnqT61SS3Jj+YDbnPWsnELlJV+U7QPl9RVneskYQDOeoxT5IDtIUAGoWXawPII+9ipsK7IpYUCcrhh020oVl28YB6US9iDyOoNBcmFRnLZ7DpS5SufoJj5icE+tN3AdjtJxTwWU8cZ9aGUndk+3SmDVgjx90euKt27iMlS2B71V2FVKgjjkGlaRmJLEN6nFIDSjulDMzLuB45qG/wBNimUNAm0EZK+pqvDIMMrZHpVu3umRk2ckDuKC7aGFIoBCjKOfvZHWsy+tiynJBbqR0zXXz2qapGdoWO4GTljisO+t3hVRKqqG/iJFZyjcjVHKyKY+o/OpY7h41IB4zVy+s5Gw7YIz0FZ+0Kx965JLlZsnc2be7ZlV3fG0jvV9ptyEZLFs4IHbGD/k1zcbhW2huvXNa9le7lyTgr2xVKVwemp9sf8ABPf9oA6Tr178OdZuQNN1R/N0uSZ2+S5CjdCCx6OPmAH8QY/xAV5v+2B4fHh/4+asF3GO7SK4JYfxEFSP93CLx6ljXgFlqElndxXNlM9tdJIkkUi4+VkYMrY68EA46V7t8ePiXH8a/CnhPxWzKuu2sRs9UgjBCiQkbXGeSDtPX+8a4lR5K6nE9KNb2lBxkeQb0Yg4IOM/NUczKcERrlj+dMmZ9oCgED09KI8swz8oxx7V7PmeNzC/KMg9RyPSp7dhuLkdeM5psaRqGeQZB4FTRxKqjC/KeetXEYTZZSQGz61Eu5VGwcnqT3qWdmjiOD8vU/4VDbt0GT04GafUd2K8nlsu3lV6/jTm/wBhTkCkOA2AMgnnilWQG427sMOuD2oJZpxyRNZp/Dz09KqzDdnLkhfTvTY9sLMG5Rj3NW22yKFRsItUtBIppl9wI4x8p9KjTgHJ461cePClFOWHP4VSZSWxg8GlcsfGczH096sq+1MZxz2FUyu7hhgZyKljbyyD1GeaALWd8YG4sQc471KqnADdCM4/pQI1I3MNjYyCKSJmkXnPJzzVEEF5asCG+Xb61RYquMH2Nak0jNaheAQ2azhuVnyBycdKmxVxRycKc9gaTVhG2hTvvxJGMDIPfikkB3Db2544pdUiFxod2EAEu1T8xOMZqZLQDkLaMRyQunJxwCeCK6Fcq2Su0suCB29656xk3Msci7lHEZ+7W/ZsZGJZT05Nc8TST6F7cWCE4yOM4qKZVXJH3s8mnwMdxy3twKSZNqtj5vwq0QVlQurNngD+uKu2/wBwAj5ey1S3AMpIP3gDx6VZtmVmPy9OBzR1HfoOkHl5GOrZP0rb0nxRqOhWMgsrlolfkhWz+lZUwKqRkfKM/jUdvudtisNzAgnFFSKqRsLfQ3F8XX2rRp9suRJDuzycKAOuQOtOm1SGSxkiWYygj7pB289wK89urbEhVUZiDhtpIP6Vm3zPAwYSyZyc/Oa8SVFJ2NNb3TO3njhEMkn2gRvGvAB5PHSs+HUJwIlMhZE+7Hn5fyrkY72aLaVkIbtnmu18P2EN5pq6lqRYLkqnl8qCP7x7E9h3qHT5TeNR9SzqWuCbS1t9nlSEZLEdMen41jQzPHCu2Ztit823j8Ki1K4/tS4fy49kIGFYDrz1oWE28eA2EHXdUWRE7smW8MD+ZDMyKxwwUkHJFMurjzJt8hLscH5jzVcxIwbDDOMcetDR/MOc5qeRHNJu+pet7gsig87T1qVri1iciSSWTjGF/WqcbCNTlMZ5qaJobiUBFL5G7HeiMVcrpc9B+Hvjy20uUafchreBnDxS5/1Z9Pxr1fUdak0GG012G1E8Vx+4MLHAKhQQ3PvXza9v5mqKIiIVXnzFGSv0969f8N+NNOvtDbSPEFxNB5aItveLznaR68BsZ7dK5K9HqiI6atHgt54lvprrEjbUzgKOeO4roNN09bfT/wC0NSYoQh8mMn5v94+lavh3QdL1D4ewat9m8u7sLuVriRiP9JiwCB+Gf0rkta1xtY1FzhRGzAjbyPb8B6V3y952RvZIg1RptXvTIwYRbtsYY/w9811Pw78ZDwzeQwXmZ7aBy6s5wvH8A9OevWuSumZcbAQ23ox9+oqS3Y3DFgoQqedwyCKpx5o2ZHNY+1NKvrK80O1v7CBLm625C9QjMe/rge+K6e0sTpBhnuCq3TRtJLM5+VMAknPYfWvmn9nf4kS6LrSeFrxftFhfs32Rj96CYZOf9w4wR2PTjp7J8bBc6b4asNOa7kkm1ht1xLvCsIwMhdvZcDHPB968apH2UrMiaurnimiWJm0qCd3VpbmaW4kjbqpLk4/Wui8SSRahZWduIYd0eWLwjaiggArjvgfXmmRolrpcUYg8ssciRVJUkcAZxxx2rT0LSRrl4tqIdxkRgRvIxgZJ568dq6oyVrnk1HqYV14eVbqebTHuNT0i12GS6aAphjyQcjt0+vauc8cTSP8AD3VI4Mx2Uc8UjKPutlwADjgnNenx6UrafBZWGrfaIHRhc20cePKA+8OOG74PasDx9pmix+APEyWKTPbLbpLC92Np3q452jgegFa03eRNOT9okfPNhvhkVyf4hnnORjpW9pUst/qib5CltCvm+WuMAjgVgw7PJUISx5G6tnw6o/0vOTsi3OQK9KkuaaPS2ZrSSrtkbb8gV3x07cVgaLH5enR9VLkuB+JwfyFaXiKdE0efau1pNq7l+tUdPga2tYY25dV/x/xr1HubR2LCsY3IAGTwakXLZBJGRTHLbFbAz0preYzBAcqerYpkomhCKpHJ47dadHGh53FcdjTdxt2woyfWnOWVtw+bPJoGKpTcSV57+9RDrSq37wn24GKCS3BGKssaFAyc/QUKw2jPWl29fzpCMY4JzTIl2HNhVHynmn7do3YwO3NN8rbyRnjvxUcyq+07c/jQJaEzYZQV3A96RWHmZQ4GOhFRRsPunr/e/pUjEMpB4IXAx65phfUlcMq7mUMN2055AHrilyY12gKMHOc9RRy8YVeUUY61HuT5lWL5c9SeaAZLEqfaWPRMfkaSWOTdhlwvtSNnkBcnaWOD70jM/O9cjGelADSnyqQpO04X+tJcxrIihi28HtTtzJECPXipN3UdfQUCIPL4BjLMRwcmpIpFjfLHKH+dRTKzDaFxJ3qHmEAtx25oGzU+0AfKGxkYp6s3kqUALMcZPYe9ZHnFVJPJGT+tSwTNGspY4x1XNO4dC7cWIkUNAqxzKNw7Bx6VS+0IWkLREPwDH3q5b6gJFKPgFh1x0pbu0hvlM2cS5ysg6n2NPlQjHeJZOYl256o3WsfU7RvODgqGkGSc9OK3W3LgOFEo4qtc2QmLg/KWGOnJPrWU46FpjNB1L98qs+7pnntjrXRttmKy7cbskg9etefQv9kulMgIGck45xXZaPeGa0QYyGbgseeO1RSl0Y2rF+ORZFYsh9Kz9ThiKyNGhSNuOgOKt/MgIzxnpmpGtkezmGTGwTOBySfXHeujrYT2OMuo/M2HACjK56HrUTTGGbap2qo4+vrWnqEZVsGPzD3KcismWNtpYK3HY1zVI2d0OJt2l0ZIFkzHjgYBwfetaOSFY4mBDnP4rXH23yswZW3PjAA44ret7oNbqUAPGTjtRCQS8jqbJzcKy/fQjuelJdKsW0AHLffyc1m2M7LCCj8E9q3I3W+VcAIuPmDdfwrti7kFIFbfPl5DEjNQSRNGRlsKT+VWJQfMyHBWnlix3DgH72Oapq4FKRdnUioZU8xQE/vYLVpywrNGpUc46kdaqsjxx7vLGDkVnJCKyxEZ3hTg4Hv71WuVMMoIXKmryr0OOnam3CZUKysDjIbsamw9yltYRsw25znaT70bvmKY4POae33wAo2Kctnmms21OFz6mpsWNkyvTG3FImfLbAyrdKltyskaBV+XJByKap8nPG0AZA9KQnuPjVd0Yyc9OKmt4wg3ZO70qusgZsqcrnPNSFm27l4Gamxa2JtuIySctnINPjMN1G0dwgPoSOn0qurMxIH3utQ+a2S2ee3HSmS9inqmlvAWYRP5LD5TjisC6tTC5wNyf3hXeR6vK1vFHKVZI+FUjrWXqmjx3AVrNgN2WdCOx9KicFIEzimDelOWYrkKcHofWp7i1MczBEZQpwNwwc1WZfmz3rhceVmxdhuSYgittbOQe54wea6PQ7qVYZoPMY274PynqRnHX0zXHq+1hmrtvcLhfvLgc7WxzWkZdxa9DsGkELfP97HQCm+Ys0eF5bOciobHUotStBGTiVGCjjkjHXNWFPcDae/YV2L3lcy2JlYcDG4elWYFLsoPANVYmZWXHJJxu7CrS4jbYSOBnd1q4qwiG/3CEhCQX+U8cVUgl8qHnllO2ptQnb5FT7ueVpm0cHdhcDjFNk6k5YtyOOelPm2yfKVw2OWHFRLISx+XjtSgswGeVBpDsPtcJDudi2fXmrsbCTB4Ct2+lVVA8wBRuyPwq99+EKFChVxkiqC1iKQjzymD7Gq8q7WB3feGeD0q0weZVUEMVGCxPFQ3CorEr1z0phcj+ZhnqF4p23ymbPJ7gUfdb13dQKcdz8A7T23c0DLELNJG3mSbj0CmhozHK5CjCjNRwxqu9lYAYpz55UMFyN24dTT6gPjZFQttOcdxxWfyzdevNXjIPJK5Jb1aqsjA7cLtPemFhiyFOcVYXbNb3CbePKkHPrtyKgI+U4OT34q1ZNHNOgb5AxwR/wAB/wAamWqDqefWriOJN65YcA+nvXQWzfKXQkrjO2shYZYbmeB1CGEujL15zxWpbsWXIOFbj3rkjsW9zUt+FOCC2cU6TLR/L8rKfmqK3VoiWyu1lx9DU1wxbqv4LWgiiW5xnjOanglUYXOSRUEmQu4gAn05p8bGP3OKXUXS5pXQRdh/j4Yt7Y6VUSRTMgU55zlfT0qRszIC386iVArbu2cVQrWItSt/st4uxiEki81TnBznBFcpq+3zCqHOz1612l1p41aOBWkx5cmV29dvUj865TWvDd9YXO9oJGjc8Mo3fQV5tVcsi01sYi/M2OcVdhumjhe3SWVIJSDIgbg47/Wq7Oy5UgKw424oRiobPPesjQ29Kmme4O1tyYLHd0zmui021k1SZEtY1kuVJZYmAKvjrxXDfaWjzszGGYZZa0dD8QXWj6pbXLSs6hg7p6gVDiO7Oq1i+t7yxt5BYrp88fyOI49is+48/l1rNkhS4t0ZG8sg/fxxivSNc1SykW7vYrNEtJ03t5ZJQA/y55J9a5iOx0/VojJbPG/mfdTzMZPfiue4ON2cZeTTWcrrI2Bj5DjqPWtLw+0cVvLdzbkhgj5PQMfTNa1wum6dqUFpqEMiyMwT96uFC+ufSr3iPwKdYXydB1G1uLeMbjAZAhXJ5YjnNXF3K5Th49Xuvt0MybYwflEZ6bT1rqNPR7qxeZ3ZQrgL+IqjD4V1SCELNpsxABBbZnp/KoLzU73T/JxAwA3YQg8+9N6sFFW1PTZpPD2oeAfEsujQyaNZ2umxxiG+IZrmd2K/JjoTg+/HSvDYYnMyRqAOdu5SOffPet7xfCIdcuLYTebFEyoQpwoIXJx7gd/w6VkrI0T+ds3bTxtB/GiCstSLXRauJMs26LzP4V9frTYbd0lUkbR6qf51BZXyreebO21OR0/KtfRbiW81uOKwRZrpBui3gEFgO+Rz6UO6QuS+x0vwm1O00T4kaFqOpKxs7eRjI0fJXMZUMPoTn8B716t488RT+INXN47rK4i+ypK+GLxgkqR6DJOPavEvDusRrqU1tf2v79slWPVW68Ae3avbvD2jQ6pa2s0ztLHHIi/Z403GYAcICBknPtzXmYpX3MKylGJJ4BvJpNO1G1uDG8EjrKGlTfvYdvoOK1PDsM1rrc3myJAxHmv9nAURqePwGOK7HUPhHqfhnSre7ktrfSQ43i2klzKFIBxxkZI96wbuwkWN7y3B3yDZtC9FPUY6kVVNJxR49SWozw3Hp19Hr8F0jWYScLbXduNs0RfJb5v7uRyOnauY+MWkjw78HdTt3YXNwL6KJbqL5VKE5yRnpxgAZ5rb0fwxc6x4ig0qJnja8RlcgklQFz93uec49Mmuf/awtp/D2g+H/Dk15Fc3PGoP5XyjbsKISp5znOD04Poa1pxSnuXR96aPnqCye1c7D5h2jtxXRaeq2ulsgJImmyCB7dfpWLp99Ho7sbyOVzGAUhTnbkdDmtqy1CLVYS0UP2eNFCJg559/evWo35j0rGV4mm8u1SMbv3rDk+gNS/db5PTHPam6sTPfWFuOXV2c56cdKlVVk3MCN2c7c16PUroIAcdC306Cms5zjd8vVfUmkkO5gpcqo/u9KeAq8nHsaYWHLmSMsxO3NHnFT168VEsjRoVU/KT1b0p74ZQ5G0GgCTc3fAx0pG3MwA600q0m4jgE9KkVgqgc5FVctvQSNiRh+G6D3pcEqTv28cYqOGQgmTqMHtTYwZQMcHHFOxnd2JE3uqktnaCD707lSMECq8S4l+cH8KlJ6ZXPP6UdRCqvUbsDPXsaUFfP3Z4C4+retNbGSUGF9OtO3FF+9gdhjJqxipIysflA3U8zAqwPB6ZApiNuLk46U3qmB1zSGTqoCF0dRJx8rdcU5g23cpy5bJPbHpUG0hQeQP4sGnxyIoZc4+XgEYFMRIqyEjAwo/WpXVm6L071BDIVUKXBI9f8aetwVCr8pHfnkj1o0Ac8Z34dsHGCfSoGhDMUxkkcFh3qwvzbiQG2/e+nagO3ztj5exXrQXfQz2s3Ebb9rN021G1rKd7PhApwpz1rVjkVnG8FlI7dQaaGO75V2jg5PNFiFoY8fmR5LK2z+I1cs7razKoxu55HSrxIVWMmdvcY/KoFs8suG+Zhn2pLQauKqx38BVsBuobHQ1myGaGby5wRLwVZfulcck1pQq24Krgr6UXkP2pdrvtCjCnuM0wZyGpQMZSVXCjsOmKu6BdNIBDltyHcrdhVq8Xy38phubBAboG9qwo2NjdhwzImefp9K5pLklcuPvKzO8mbdGjhc/KA2PXFR/ajGDGBxnO49QPTNVdJuBNlWXKyLuUVPNbonBO055VTyK6FrqS9Bl/DCsIaHjAGWHArDulM25QcHqTXQTMJIzCBnd2PFY90oGVGFcdW9aU1dCXkY8waMKyu3Ugc9qt2MsdupkRiAVO9cdKp3S7pGbOVHQZ6Ulu22YZGVb5cetcq0NFsdPbujIgBJLYIU1pRzSKdi/LHnoDxXPR3BQ5B2v0HHpWjBcCYgsWznk10QkxWubO4MFJUDjgDpTlbY2QefcVDbTssbRo2U6Lxk1cWEtJwv7s/xHqK7IyujO1hJJhJCoIIZeeB+lVHBZSxOF9O+aszJ5fChuDye1QyMd2Oi53ZxzUMZFjco7cVH+8OByq4zu/pViR1kYlOAfbpSbuAvQAdfrSsIqSOXfaQBn9arsWWU5+Xpg44PvWr5azABWOPUiq9wGTYJGyF4UDp71LKuVpYTbxgM4Ylsny+aljWOddm5ULDaGamy7njwFxgc4pY4udmPlzkt9KgZWXCrtwCRxkUqP0DDgdqlkiZZA4BIU8hu9Hlh2wNu4846YqSxVwBuHSo2YNwFFP2lfkpvl5IUffzz9KBepXkfDgZ+YdBVqO++zkFe444qKRtzDHAUcDAzTRu3EHlRzxQL0LF9GuoWqoY42lySWUc1ympaS1oxwNyDqe6/UV00DtDIcMW43BTVm4tItTjcvGRJjO71+lZyipDTPPD6BhTkkK5q/qGlyWk0nmZC4yGxwT6VnbcKPX0rjcWjRF+yvTazpIPlz1rrY5E1C0M8DDnhl6lWHr9a4NWPTqK2dG1QWcyo6/u2IJI7n3rSnO2gpK51FvE3yndxzmrGSPlJ5HNN2FcyR/NGw4Pb86CwGRyT613x11MdmJNCs2GPBJzkVFsXcGCngd6tJ8u1sHaRVfb+9IAbd156U2h69BMmQ53cfyqSNdreifXNJs+UDIBJpy4Cj1qQV+pIpVRtBOMdas2kg8sqXyG9qq7lEQY9c1Ygwp3NwvbjrVdCtCRYdrMmxgjL8vPU1Vbd5aqV+71NWNxZxlm4bA56etMbO7b1X6/rRYnYagMmGBAI6ClMYB54cnmkVFZsgnOOOO9OAZow7H5gccCmCYpjb6ljjNPPCIPLJIBG761GssmMKOckmpFSSRNynPqu7BqgYyYNGy/LuBGcjoPrUc5KA4O5T0PXNTMsckhyWUbed3rTGx8scfzbTw/86BEaErwBu3dOKfBsklAZTkcelOhXcynJZd2fpxSIrrLjK71PA9qnqUcpqAZdW1HBz+95yOelWbELHGT1JpNfYRa1cFsI0mHI+opLOV1VixwvoB1rl2bGtTShdVQlhletSHdMOPlYj8KjtyrYO5QOhXrn3qyzFTnjZ61aKtoVHULn5gHXqMdabEysrFTz0570twvzLIrEbevvUfyyEHPy+3HNT1uRuXo1kbcCnyjqaj2fMDkrk9GqzbKs0HOQxGQM9aryMFb8M/N2qmO5Z0lv9IEXfGBn881vpCZ1U+Zghs8etczYttJkYgjdkGtixuHbKg4cjiuXEU+ZXRhUi3qjF8QeBY7wzTWsnlz4LCM/wAdcXDpV6bpbNbWSS5ZuIgPbj9a9ZYSrEySIyHOGDDH4+p/Co5LN7dZ0hk8iSZNouoV+Yd+/TmvKhVa3FSqtPlkeZXWlvo8jxXm37UPvQnqD6VQk3XCxjG5s7VwQM54ArR1jSrvSbySC+LtKRvDZyrehzWeyjkIxZj0x9c5+ldCdzuunsfSegfD+2s/g5bz6xM2n3E2ImzEHYbjhV+n+c14n4v8Mjwf4gEEE5uLZoxNBOgKqc9SOlem3/i9dY+F8Vl5cqi4hVHkJ+6V5+X0GR1x+NYWl2tr438F/YmcS6vYAvDNklW56H0BHy8dxkYNcsd3c35dEVvBOpaf4+uLPQfE0Ekhiz9lurfiYIBkqzHPH8q9V/4Z98J3N+k2k67qFo2VZf3oeTIxyMg5614t4X0i90tl1qR47a2PnWpj34njbAOSuOlemWd8ulaHomu2EskOpbpoJ9rHcY+CeDxkgCs6snH4TjqScHoW/Fnwk+Jnh+ZzpV7Bq9kchFwEfAGen6deT2rzKXxRq+gy7dU0iNSoKksVbnPI6+vH1r33wr8Zl/s+yiuwGQOEVZCWbczHbk+xz7/hWz4k0nwb49tDJeWSpcK7Ku1/IkQhvmIdOcH8M981MK2lpIyjiGnaR8Tuz3W6RmZ5mbLZ5yTyT9c05mZUUbiBs3nk9fSmJhIUJG08rnrTxnyx90nrj2r0GdRG+D3De9dL4F1i1s9esYNVuJLHTmkCT3tqv72JSOxweOmfauamxtLDCkLjA9c1o6fZnxBJ5MBjS9xuRD8vmEdgfUDn61MlzKxUNJXPpn4lfAjSdZ+DGkeK/AceqX/iHSxLJrzXE4InjC7jNEDkccMAmPlPI3KK5f8AZ11dPGCjw9eXptbxLkXVrIJdsjxqBvRD97I2g8HPPHQmvHI/G2uWFmljb313phiDRyeVdSR7lP8ACy7sHGT1HT9crR9QudB1BL60ma3u7UebDKh2sjhgQR78Vzexc6fLLcvEKNTbQ/QHxpNPeXl693OREtqsUEDE4XYc/ic8k+vrXkWn/EW+8H6nPdNH9tsJm2zooG+NcfejLfd9xVHwP+0hH4+t7fSvFey21tRiPUDiNLrIAHmcYV/fhSTxjIFR+Ov9Igls4YY1KkNJI2MO3pnsAPauCNOVF8rPClRtLU9Rj+OHw/8ACfiPQfFtvdC+NnBMkunWwAuHkddobBPJJyufQnoOa+XPH3xSm+JXiXVNa1KN4tQknLx2w+aOCEE+XAp67VB9snJwCxqjrUItbVtu7G8AnOD04z6/5Fczb6VcX81zchljjALbSecdsV2UqfVnVHlpxGsp1O9lkk3t5hJZTW9pyLBbFIkVEznC9c0ul6erR5+VWHVs81LHD9kklEqgqQSozXp0F7yMoVOZ2MfUZPJ1a2eQ9mGfqOtWkaPA2ndkfeArPus/28ABwIzj0+tXVbzcglR3wK9HqzrGhSzMAMKp5Jpg3Bjk5XsKkGZA46Bep9aYB3xkfWmCHKxUqcKwA4Eg4qZQ+0FlUH/Z6VWCFt6nheoNP8w7RjtSJdibcN2ck1LG2GOwAN13VCpPlq2AOcEdxTlAU4yc9Sf6UbjSHxl2YhVyQc4oZRyD8retQxsdzYLDvmpZI2BDggg9cmmkVZCBecjp/eoQttz+YPelZx8yEYwM8GmRuC2OvfmrJ5STYNxIbCtyAaQkdMZIpMZPzHnNOQAnPy/QmqDlGySJvIxg98dqauFwwNO2ouSR83f3pXK7ht5wOfrUkDWctxnJNBX92FZWBz36U5VOwAjPrtpY4t5I3YAHFUh6iLFuLA9CMip41xncME/dH8xTI5PkYFuV4zT4f3m4bsMp9KRVhNpjk8xGy2MFf5mlRdjL8+V7YPWmtheecPxnuKckY8oAdeoOafQXWw5lVSzB8MetEfKhB1AySOabtG1wxPFIFKqCrdTyD6UDtYfCytKxYFWHUZ60STmeZySw2HCqtCuI5HUkEYzkcnpSSRouHDE5PQmgQkgERLLtXPVW6/hUqvmFmKj2z1qKRQwORgmmNIzfwZUHAApCGS2w1Bowx2FWDB16jjpXM6pbeSpVkZZFJXnpjOeK6pVO0naTgEvt6DnrVbVrP+2LUojbZo/nTj7w9KmceZFR3M7SdRaaGLnDxggY9K3owLobzuMhXoa4vTWeC4KBDuPy4PHNdjo1xujEbP8AMqklsYJHYVFN6WY5bkSyNA2MBmGQSelR6hte3X5VL99vpUs0ZVtzLjJ42nFMZQckc8cVtJCjuYk0abSGG1ScDiszcxOVONvzD25rXnX9/uyAF/hNZ00ZlZjt6dccVyyiXcsW8xEmWO4ocH61rW0/Rcjd06Vz0bqrfPznqBWrZTB49wHOM5qosR0FpcAEYclsce1X9Nu9jYLA8gBTWBasoYMG+Ycla0oZY5HQ8rJuyBmumLBo6H5JlI8xSvUCqdwr4IVM+rYot5fLiDHkE4FW5VW4h3I2EzgmtiDLBxxxn6UjZ27cA96dLGY8HIwT1P8AOmbDuxnA60AC3DxyZ2hlPG3HSpZo/Mw7YUYyBjrUPkneWL5FSQzjHly/wnK9/wAKgRXZH3SFhty3DDpj0pV3LkA4A9atNbmZRjd93dn+EnP86pq3VTnevGGGKQ0EjFsr970xULRN5jZ2qwqUkqyEtn5sZpxIZWkIG4tUco+ZldI965zjnrQyssiA/Md3OB7U7y/OBYfdCEAfjU2GTODyecmiyDUqSRvEEBXcp798VXnJMZZcq3b3FXm3sm04Db8fhSSW4kyV4x+VFhXKUchPluRtYHLf4VajuPMyuWJLY4PQUyTdJncmOKgVmWbaMjK8mosWizNCl1C8L/Onp1C1zWoaXsnKxr8mPlb1rdj+eTg4YcjnmpJE+2Qrk7n7cYCn096zaUilocO0ZUkHjFCsUU9Qa09Rsdqs4U5B+YHtWay/MABzjpXHKNmWdL4c10oxtXb93MdoB5A966KTftyV59fWvN4mMTbkOCOhz3rtPDupDULZYZHY3AB2c+nWuqlU6MiSNfyy8asX2tnG2iZUZQpfYR69aWMBYFcEkDgL0/OlCh8k89wfSurqQituXvksDRGoaZcsQuCcmnybTMHAIG4E/lineXkbR3HGTR1ESRw+ZkEgLjIFJgmP52wAelLHGPJDDlmPr0pzKBwxyPWi1wsWHaPyJW28Mnr3qFWDQjJ+csMn8Ka0e1dobCt2p00KptI6sOKaGIq+VsZfv7SR789KU7OjOxB9elEzfu0wMkd/SmqQuQRvGORRuLqORfldUbJz19qlZlXhPmPfmqwKI3yggenpUrN5ink0D6js7g21fru5pj5jbcoyeCQO3qKUKrRg+ZgpjgU66ikVTIgCr0JBphYhiwu8r8qFcDPY5p6ovzSMcu3pTdobbzkAZx707d5ROVyxGAuaLahYxfEli8d7bXW7Pmw7Sv0OQap2zMki7RkJ+XPWrPipgz2ZZyT5ZA57fSqdrIVjJAY542965WrNiNCNkh4ByucAVcyJI+h4HSq1uo5yo3Y9alPy4wAexpmi2InkDKVIyKgkO1gVHynFWJI1h5yQPzqB2DHgYLdKCNbl+3ctzuGF4ptxAd3B3LnHPpRbqCqgDHp70+4zuAOMcEgH1FBTEt/LZkTG1T37CrsbeXMpTlgdx/D0rLtSAyAnD/3PStOGFpipYAKOCRxiqtdWEdD/AGs2vuiyAKUj2iTvn3+lV1uJ1lC3C5cDBKjhuwaslJBbvxkgHO4HnkVu28i6grMiNuC5y3f2HvXhYqj7N8y2OOpFJ3IdT8Px+KLGSBSI9ikrLjOznnPPNclq3wZ8YaK0ajTGvIZV3RXNowdGGO5z8vHY11qwzWsqSxMd3eNjgHnODXpGi6TdeIPKuNO8bR6XA8LPPpEwAcSIM7UBxkHnntjvXHGvy6M7sJFT0bONvPh7Novwv0qVriQ3jjyngRQEwSxBOed4P4Edq8k0C+1jw7qH9o2VtJ5Ub7JFXlDt6qfbOa9T1bXNU0+8NtfXAu0jcSN5bF417KVPt/WuE1qO102ZraO/Z2lLyPExxtY88YrWm3rc9GtHl0R0XihrD7LaavZzZS9B3RMflZiPf+LjGOtWvC+oQrr1iF2yRsrEqcbXYgAE9PXr60vwh8TQeF/EEWqaz4ds/FXhaxSRbjS7kgh1dRnYpHL8fKDwQSK7/Xvid8L/ABDNK3hr4br4cvgNwadU2HnO0eWTtGcH8KJx0OCpTctUzhPFGg2mg+Jrh9OeSLTFkDbXYnbIAMhj+OR3roNF8QQCC9tk3tJcBWMignYVb1PqPSpb7xxZeLLhrO40tUsprlUvY0kx5smBh93TgDGAetP8eeH9F8BroEulSTJDqtq13DcXRMmVzhk5yVYE8iuSVkjllTsj5xjQeWVZsnJOPSgNtbIIyRimfwN9D/Oj+7/u17G52E8wG07gDk9BV7wzpOoeIdc07SdJtJLzUrq4WK2jt1zK8jHCgc9efX68c1nN3r1n9lP/AJL98OP+w/a/+hPUSdo3KitUen/tCfsx+HPhb8MtO1G8+Iem6j8UluIo9b8LW9xCzwmQArsUfvMxqU3M4IO7KhQRXzzpfhhbhSW/fRsP3hwQFUH35r0H4yf8lI8a/wDYf1P/ANLp6z9P/wCPN/qf51jGTMMRNrYyL7wtHZ6VNeOTFbQ4VXcAFmJ7eoqnpms6pJctYwztuxvQuxKhcfdwe3eur+If/JOY/wDr5WuT07/kctK/69v6NTaTVzGOsLsu32nTXUOy4uGmYjGFGDzyc1dsdBjW2G5yQgxhu31q9N1WrcH/AB6zf7lNHE9R39h6dGTvmkVOGLRgY5/pWF4khiiubdIXa4Xy+WIHBzyK3rL/AFb/AO4Kxtd/1z/8Crsw61FSVpnG2n7zUpWZskRlc+mTxVzyVDZbHPT1rMsf+Py4/wCA1fP3q7o9T0mK0PzMhbCMAcD+LFMaUjJwPpUkn3l/Glj/ANW3+7/WrsHYY3y4P50u1lx0HtQ33vwpf4Yv92kK2ou7dGSOHzyfbtTmc/d/i3c0xvuP+FSJ/rE+tNBccsxbK4AXGKXd5kZXqB0U0xfun60qfeFV0E2OdQvT73t3+lIwBkJQfrTpfuRfU1GP9SKcSWx64kLfNhgOlNAHOetMj/134Usn3lqwQ9evXI9Ke4ULk8fSmRd6kl+4KXUYxJBHkDPP+eakXLRfITn73AqrJ0k+gq3Zd/8ArnS6gg+V84Yg4y2aWGZNzbeW6k9KZ/yxb60Wf+rk/wB3+tMZM0bMpIHyKxX/AOvSRqAoJPBAyaZL/wAf0H4fyp8n3T/vUhLe4DbGTu5U9GxUikHqMqTtP0NLL/qI/wAKaesv+4KC5DY1aCNtqjaW69zzQytuLfKVPTnpR3j+n9KjP+rH1oIJDu4J546U6LneWBUMOBR/dpk/3o/oKEBNFGY4pkRtqygK4JzxVd4pI5WXHzdRircX8X4Urf8AHwadxSWhx+uQ+TeCdWYSMd0gxwprS0u68xIn6DovNL4i/wCPS4/Cs/S/+PWP6msNpFrWNzqrrbJb70OR0H1zg1nd8Jz6nPFaVr/yCR9TWcv+rk+lbLUI7lGTEkuW24PHSqV3afvCVJAx2qab/ln9aS4++fpWUgMtVKYJWr0LMYU8sjA+Uiqsv8FSWX3j/vGskUa8NwkcgLfxdT6VfX7wdDn0rJT+P61ow/dT6mt4sTNS1uVeMIQXOc8dq0La7X5Y4omTcQh5469aydL/ANa/0q9H/wAfUP8AntW0dCGX7uCLy3CgScEA8+vWsz5o9ufmOa0Lf7rVTuP4f99v51t0BbkZYblIONxpcBWJHH1pD/rI/rT2/wCPiT/dFStXqU9ySCZ1DMSWiA6ds5zTbmGRo2k28fxEVEvRfpWnbf8AHrN/uD+VTJK4jHa33RsR06inx7ZGJ6rnIPTNKPuN+NJD/wAe8f0qbDuNwFY7X4bge9ReYrSHadyFflob/j6t/wAf5VDb/dT/AHjSegEpBZd59eKkjJCqOdv9KVvupUq9PwqeoitMiMxQMdinioL1dsfA3fMAQo59zU03f61Yt/8AXyf9c6Q1sZUhU7dg+YHH4U6KPDEsxJHIXPGc9hT4/wDWP9aif/WL/vVlsyr6EdxbpMTgEnGSjVzt5b7N5bCsOmPSuqb/AFr/AErA1btUySsNPUx2AUYA96ktrqaykE0L7H6ZpG/9lFRj7tcz0LPQNL1FdQsU2/6xB8+TjJ71YWU7doYj2rmvDP3W+tdAvWu2m7q5h1J8ZXmk3bQMNkE4BxyKf/An1NMH3h9K28x2J441WM4BUY45zmmtt2iMnIByGHelt/8AVx/Q/wA6af8AW/iaaBDpW84rgBeOuaTczMBnhBxSN/Spbb+L6UD6iKxZR/SkUlSxyFLDNOj+7L9agm++PpVAODbm56McZPH40+H/AFgCsAGGBupkn+qH+6P5VNb/AOsFAmOwf+eYLJ/EvQihh5qAKxEa+vepf+Wcv403/l1X6CoEQEhVJPBZcbl6fT601Rlg2SvPfrU7f8e0f+/RJ/x9j/eH8qcRpmD4qt0YWzgZQoceowelUbNRJJksVGPx/Gr3if8A1Nt9W/8AQqz/APl6eueW5TNW3RPkxz61Mm0k4X6+1VLHvVqL70v0FIuOxFMu7GTlfoagbAYFT0q2/wDqzVd/uChmdrskgl+cAHawOVqzdAsTMUUbjz+AqhY/8fRrV1b/AI84v89hTjsMzY2CyiQ+v5VqLC0jfeAG3gZ61kRdJfoK1bH71t9Kpbky2JUh8yNn5Ujr/hWppEyXBC5KSLz14FVu8n0NM03/AF4+lRWgp02mZzjc6QR+fp8ckckkkyHZPEo456EVFayS6ZdR3EK7dpKMsg6gjofwrU8OfduP+uFZ+q/6xv8Arqv8q+TlGxx05yhLRnEalqLw68vnny4VcLHbrwCuAOnT9OMVDfXEOj61L5WnQ3Vw+H+1zZYJkY4GMfhml8X/APId076f1NPuv+Pi7/H+ddsHoj3YydSF2ZF5ruqXCsjXhttqHctqvl5Oe+PTr+NdBYahDNpdkNrCeEusszHJfP3c+1cvqH+uf6n/ANBrf8M/8e11/wAB/nWstjKXYs6b9omZo9jPbqXPT+IAY5/WvUtajuPiF4f8P6MlmhOj+YYbh5OXikALRsPUMAwrjvDf/Lf6N/6DXonw9/5GCP8A65f+y15VSRy35dD/2Q==" style="height:15rem" class="rounded">
        </div>
        <div class="p-2 text-center">
          <h1>Claire Benard</h1>
        </div>
        <hr style="width:60%;" />

        <div class="row justify-content-center align-items-center">
          <div class="col-8 p-1 text-center">
            <div class="list-group">
                                <a href="https://www.linkedin.com/in/claire-benard-data-scientist/">
                <button type="button" class="list-group-item list-group-item-action my-1 rounded">
                  LinkedIn
                </button>
              </a>
                                <a href="https://github.com/ClaireBenard">
                <button type="button" class="list-group-item list-group-item-action my-1 rounded">
                  GitHub
                </button>
              </a>
                                <a href="mailto:benardclaire@hotmail.fr">
                <button type="button" class="list-group-item list-group-item-action my-1 rounded">
                  Email
                </button>
              </a>
                              </div>
          </div>
        </div>
        <div class="p pt-4 px-5">
          <div id="bio" class="section level2">
          <h2>Bio</h2>
          <p>I’m a data scientist, keen to use data to solve problems that matter. My earlier work experience was in national and international charities and although I’m now a consultant, I still volunteer for <a href="https://datakind.org.uk/">DataKind UK</a>.</p>
          <div id="htmlwidget-1e7b4ffca35c8b3241e6" style="width:60%;height:25%;" class="plotly html-widget"></div>
          <script type="application/json" data-for="htmlwidget-1e7b4ffca35c8b3241e6">{"x":{"data":[{"x":[3,0,null,4,0,null,4,0,null,5,0],"y":[1,1,null,2,2,null,3,3,null,4,4],"text":["score: 3","score: 3",null,"score: 4","score: 4",null,"score: 4","score: 4",null,"score: 5","score: 5"],"type":"scatter","mode":"lines","line":{"width":7.55905511811024,"color":"rgba(255,165,0,1)","dash":"solid"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[3,4,4,5],"y":[1,2,3,4],"text":["score: 3","score: 4","score: 4","score: 5"],"type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(255,165,0,1)","opacity":1,"size":11.3385826771654,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(255,165,0,1)"}},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null}],"layout":{"margin":{"t":26.2283105022831,"r":7.30593607305936,"b":13.8812785388128,"l":133.698630136986},"paper_bgcolor":"rgba(255,255,255,1)","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"xaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-0.25,5.25],"tickmode":"array","ticktext":["0","1","2","3","4","5"],"tickvals":[0,1,2,3,4,5],"categoryorder":"array","categoryarray":["0","1","2","3","4","5"],"nticks":null,"ticks":"","tickcolor":null,"ticklen":3.65296803652968,"tickwidth":0,"showticklabels":false,"tickfont":{"color":null,"family":null,"size":0},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(255,255,255,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"y","title":{"text":"","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187}},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[0.4,4.6],"tickmode":"array","ticktext":["Business Intelligence","Machine Learning","Statistics","Data strategy"],"tickvals":[1,2,3,4],"categoryorder":"array","categoryarray":["Business Intelligence","Machine Learning","Statistics","Data strategy"],"nticks":null,"ticks":"","tickcolor":null,"ticklen":3.65296803652968,"tickwidth":0,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(255,255,255,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"x","title":{"text":"","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187}},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":null,"line":{"color":null,"width":0,"linetype":[]},"yref":"paper","xref":"paper","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":false,"legend":{"bgcolor":"rgba(255,255,255,1)","bordercolor":"transparent","borderwidth":1.88976377952756,"font":{"color":"rgba(0,0,0,1)","family":"","size":11.689497716895}},"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","modeBarButtonsToAdd":["hoverclosest","hovercompare"],"showSendToCloud":false},"source":"A","attrs":{"463459514c8":{"x":{},"y":{},"xend":{},"yend":{},"type":"scatter"},"46344f4f767d":{"x":{},"y":{}}},"cur_data":"463459514c8","visdat":{"463459514c8":["function (y) ","x"],"46344f4f767d":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1},"debounce":0},"shinyEvents":["plotly_hover","plotly_click","plotly_selected","plotly_relayout","plotly_brushed","plotly_brushing","plotly_clickannotation","plotly_doubleclick","plotly_deselect","plotly_afterplot","plotly_sunburstclick"],"base_url":"https://plot.ly"},"evals":[],"jsHooks":[]}</script>
          </div>
          <div id="blog" class="section level2">
          <h2>Blog</h2>
          <p><em>Most of my blogs talk about data in the charity sector, ethics and strategy.</em></p>
          <p><a href="https://urbanhealth.org.uk/insights/author/clairebenard"><strong>6 things funders can do to support the responsible use of data</strong></a> | Impact on Urban Health (October, 21)</p>
          <p><a href="https://data4goodfest.org.uk/beyond-mande/"><strong>Using Data Beyond Monitoring &amp; Evaluation</strong></a> | Data4good Fest (July, 21)</p>
          <p><a href="https://blogs.ncvo.org.uk/2018/03/12/three-lessons-i-learned-from-a-week-in-a-tech-start-up/"><strong>Three lessons I learned from a week in a tech start up</strong></a> | NCVO (March, 18)</p>
          <p><a href="https://vimeo.com/209798429"><strong>Using R to produce innovative, quick and reproducible evidence</strong></a> | MERL Tech (March, 17)</p>
          </div>
          <div id="projects" class="section level2">
          <h2>Projects</h2>
          <p><strong>Charity classifier</strong> | <a href="https://github.com/ClaireBenard/charity-classifier">Check out the code</a><br />
          <em>When registering with the Commission, charities must declare their sector of activity. This is a tick box with 16 options. Due to the nature of the sector, most organisations tick at least 2, and some as many as all 16 boxes.</em> <em>This work attempts to classify organisations based on the legal definition of their activity (their charitable object). Given the wording of their object, the model returns the most likely sector of activity.</em></p>
          </div>
        </div>
    </div>
  </div>
</div>

<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="data:application/javascript; charset=utf-8;base64,LyohIGpRdWVyeSB2My41LjEgLWFqYXgsLWFqYXgvanNvbnAsLWFqYXgvbG9hZCwtYWpheC9zY3JpcHQsLWFqYXgvdmFyL2xvY2F0aW9uLC1hamF4L3Zhci9ub25jZSwtYWpheC92YXIvcnF1ZXJ5LC1hamF4L3hociwtbWFuaXB1bGF0aW9uL19ldmFsVXJsLC1kZXByZWNhdGVkL2FqYXgtZXZlbnQtYWxpYXMsLWVmZmVjdHMsLWVmZmVjdHMvVHdlZW4sLWVmZmVjdHMvYW5pbWF0ZWRTZWxlY3RvciB8IChjKSBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8KIWZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiOyJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWUuZG9jdW1lbnQ/dChlLCEwKTpmdW5jdGlvbihlKXtpZighZS5kb2N1bWVudCl0aHJvdyBuZXcgRXJyb3IoImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQiKTtyZXR1cm4gdChlKX06dChlKX0oInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsZnVuY3Rpb24oZyxlKXsidXNlIHN0cmljdCI7dmFyIHQ9W10scj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yscz10LnNsaWNlLHY9dC5mbGF0P2Z1bmN0aW9uKGUpe3JldHVybiB0LmZsYXQuY2FsbChlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIHQuY29uY2F0LmFwcGx5KFtdLGUpfSx1PXQucHVzaCxpPXQuaW5kZXhPZixuPXt9LG89bi50b1N0cmluZyx5PW4uaGFzT3duUHJvcGVydHksYT15LnRvU3RyaW5nLGw9YS5jYWxsKE9iamVjdCksbT17fSxiPWZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYibnVtYmVyIiE9dHlwZW9mIGUubm9kZVR5cGV9LHg9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJmU9PT1lLndpbmRvd30sdz1nLmRvY3VtZW50LGM9e3R5cGU6ITAsc3JjOiEwLG5vbmNlOiEwLG5vTW9kdWxlOiEwfTtmdW5jdGlvbiBDKGUsdCxuKXt2YXIgcixpLG89KG49bnx8dykuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7aWYoby50ZXh0PWUsdClmb3IociBpbiBjKShpPXRbcl18fHQuZ2V0QXR0cmlidXRlJiZ0LmdldEF0dHJpYnV0ZShyKSkmJm8uc2V0QXR0cmlidXRlKHIsaSk7bi5oZWFkLmFwcGVuZENoaWxkKG8pLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobyl9ZnVuY3Rpb24gVChlKXtyZXR1cm4gbnVsbD09ZT9lKyIiOiJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGU/bltvLmNhbGwoZSldfHwib2JqZWN0Ijp0eXBlb2YgZX12YXIgZj0iMy41LjEgLWFqYXgsLWFqYXgvanNvbnAsLWFqYXgvbG9hZCwtYWpheC9zY3JpcHQsLWFqYXgvdmFyL2xvY2F0aW9uLC1hamF4L3Zhci9ub25jZSwtYWpheC92YXIvcnF1ZXJ5LC1hamF4L3hociwtbWFuaXB1bGF0aW9uL19ldmFsVXJsLC1kZXByZWNhdGVkL2FqYXgtZXZlbnQtYWxpYXMsLWVmZmVjdHMsLWVmZmVjdHMvVHdlZW4sLWVmZmVjdHMvYW5pbWF0ZWRTZWxlY3RvciIsRT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgRS5mbi5pbml0KGUsdCl9O2Z1bmN0aW9uIGQoZSl7dmFyIHQ9ISFlJiYibGVuZ3RoImluIGUmJmUubGVuZ3RoLG49VChlKTtyZXR1cm4hYihlKSYmIXgoZSkmJigiYXJyYXkiPT09bnx8MD09PXR8fCJudW1iZXIiPT10eXBlb2YgdCYmMDx0JiZ0LTEgaW4gZSl9RS5mbj1FLnByb3RvdHlwZT17anF1ZXJ5OmYsY29uc3RydWN0b3I6RSxsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHMuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3MuY2FsbCh0aGlzKTplPDA/dGhpc1tlK3RoaXMubGVuZ3RoXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9RS5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHR9LGVhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIEUuZWFjaCh0aGlzLGUpfSxtYXA6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKEUubWFwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCxlKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2socy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxldmVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKEUuZ3JlcCh0aGlzLGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQrMSklMn0pKX0sb2RkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKEUuZ3JlcCh0aGlzLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQlMn0pKX0sZXE6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sZW5ndGgsbj0rZSsoZTwwP3Q6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKDA8PW4mJm48dD9bdGhpc1tuXV06W10pfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKCl9LHB1c2g6dSxzb3J0OnQuc29ydCxzcGxpY2U6dC5zcGxpY2V9LEUuZXh0ZW5kPUUuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHIsaSxvLGE9YXJndW1lbnRzWzBdfHx7fSxzPTEsdT1hcmd1bWVudHMubGVuZ3RoLGw9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIGEmJihsPWEsYT1hcmd1bWVudHNbc118fHt9LHMrKyksIm9iamVjdCI9PXR5cGVvZiBhfHxiKGEpfHwoYT17fSkscz09PXUmJihhPXRoaXMscy0tKTtzPHU7cysrKWlmKG51bGwhPShlPWFyZ3VtZW50c1tzXSkpZm9yKHQgaW4gZSlyPWVbdF0sIl9fcHJvdG9fXyIhPT10JiZhIT09ciYmKGwmJnImJihFLmlzUGxhaW5PYmplY3Qocil8fChpPUFycmF5LmlzQXJyYXkocikpKT8obj1hW3RdLG89aSYmIUFycmF5LmlzQXJyYXkobik/W106aXx8RS5pc1BsYWluT2JqZWN0KG4pP246e30saT0hMSxhW3RdPUUuZXh0ZW5kKGwsbyxyKSk6dm9pZCAwIT09ciYmKGFbdF09cikpO3JldHVybiBhfSxFLmV4dGVuZCh7ZXhwYW5kbzoialF1ZXJ5IisoZitNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxpc1JlYWR5OiEwLGVycm9yOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihlKX0sbm9vcDpmdW5jdGlvbigpe30saXNQbGFpbk9iamVjdDpmdW5jdGlvbihlKXt2YXIgdCxuO3JldHVybiEoIWV8fCJbb2JqZWN0IE9iamVjdF0iIT09by5jYWxsKGUpKSYmKCEodD1yKGUpKXx8ImZ1bmN0aW9uIj09dHlwZW9mKG49eS5jYWxsKHQsImNvbnN0cnVjdG9yIikmJnQuY29uc3RydWN0b3IpJiZhLmNhbGwobik9PT1sKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXJldHVybiExO3JldHVybiEwfSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGUsdCxuKXtDKGUse25vbmNlOnQmJnQubm9uY2V9LG4pfSxlYWNoOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wO2lmKGQoZSkpe2ZvcihuPWUubGVuZ3RoO3I8bjtyKyspaWYoITE9PT10LmNhbGwoZVtyXSxyLGVbcl0pKWJyZWFrfWVsc2UgZm9yKHIgaW4gZSlpZighMT09PXQuY2FsbChlW3JdLHIsZVtyXSkpYnJlYWs7cmV0dXJuIGV9LG1ha2VBcnJheTpmdW5jdGlvbihlLHQpe3ZhciBuPXR8fFtdO3JldHVybiBudWxsIT1lJiYoZChPYmplY3QoZSkpP0UubWVyZ2Uobiwic3RyaW5nIj09dHlwZW9mIGU/W2VdOmUpOnUuY2FsbChuLGUpKSxufSxpbkFycmF5OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09dD8tMTppLmNhbGwodCxlLG4pfSxtZXJnZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0rdC5sZW5ndGgscj0wLGk9ZS5sZW5ndGg7cjxuO3IrKyllW2krK109dFtyXTtyZXR1cm4gZS5sZW5ndGg9aSxlfSxncmVwOmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9W10saT0wLG89ZS5sZW5ndGgsYT0hbjtpPG87aSsrKSF0KGVbaV0saSkhPT1hJiZyLnB1c2goZVtpXSk7cmV0dXJuIHJ9LG1hcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPTAsYT1bXTtpZihkKGUpKWZvcihyPWUubGVuZ3RoO288cjtvKyspbnVsbCE9KGk9dChlW29dLG8sbikpJiZhLnB1c2goaSk7ZWxzZSBmb3IobyBpbiBlKW51bGwhPShpPXQoZVtvXSxvLG4pKSYmYS5wdXNoKGkpO3JldHVybiB2KGEpfSxndWlkOjEsc3VwcG9ydDptfSksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKEUuZm5bU3ltYm9sLml0ZXJhdG9yXT10W1N5bWJvbC5pdGVyYXRvcl0pLEUuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2wiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXtuWyJbb2JqZWN0ICIrdCsiXSJdPXQudG9Mb3dlckNhc2UoKX0pO3ZhciBwPWZ1bmN0aW9uKG4pe3ZhciBlLHAseCxvLGksaCxmLGcsdyx1LGwsQyxULGEsRSx2LHMsYyx5LEE9InNpenpsZSIrMSpuZXcgRGF0ZSxkPW4uZG9jdW1lbnQsTj0wLHI9MCxtPXVlKCksYj11ZSgpLFM9dWUoKSxrPXVlKCksRD1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dCYmKGw9ITApLDB9LEw9e30uaGFzT3duUHJvcGVydHksdD1bXSxqPXQucG9wLHE9dC5wdXNoLE89dC5wdXNoLFA9dC5zbGljZSxIPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKWlmKGVbbl09PT10KXJldHVybiBuO3JldHVybi0xfSxJPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsUj0iW1xceDIwXFx0XFxyXFxuXFxmXSIsQj0iKD86XFxcXFtcXGRhLWZBLUZdezEsNn0iK1IrIj98XFxcXFteXFxyXFxuXFxmXXxbXFx3LV18W15cMC1cXHg3Zl0pKyIsTT0iXFxbIitSKyIqKCIrQisiKSg/OiIrUisiKihbKl4kfCF+XT89KSIrUisiKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgiK0IrIikpfCkiK1IrIipcXF0iLFc9IjooIitCKyIpKD86XFwoKCgnKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcIil8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IitNKyIpKil8LiopXFwpfCkiLEY9bmV3IFJlZ0V4cChSKyIrIiwiZyIpLCQ9bmV3IFJlZ0V4cCgiXiIrUisiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitSKyIrJCIsImciKSx6PW5ldyBSZWdFeHAoIl4iK1IrIiosIitSKyIqIiksXz1uZXcgUmVnRXhwKCJeIitSKyIqKFs+K35dfCIrUisiKSIrUisiKiIpLFU9bmV3IFJlZ0V4cChSKyJ8PiIpLFY9bmV3IFJlZ0V4cChXKSxYPW5ldyBSZWdFeHAoIl4iK0IrIiQiKSxRPXtJRDpuZXcgUmVnRXhwKCJeIygiK0IrIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrQisiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrQisifFsqXSkiKSxBVFRSOm5ldyBSZWdFeHAoIl4iK00pLFBTRVVETzpuZXcgUmVnRXhwKCJeIitXKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK1IrIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK1IrIiooPzooWystXXwpIitSKyIqKFxcZCspfCkpIitSKyIqXFwpfCkiLCJpIiksYm9vbDpuZXcgUmVnRXhwKCJeKD86IitJKyIpJCIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrUisiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitSKyIqKCg/Oi1cXGQpP1xcZCopIitSKyIqXFwpfCkoPz1bXi1dfCQpIiwiaSIpfSxZPS9IVE1MJC9pLEc9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxLPS9eaFxkJC9pLEo9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLFo9L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxlZT0vWyt+XS8sdGU9bmV3IFJlZ0V4cCgiXFxcXFtcXGRhLWZBLUZdezEsNn0iK1IrIj98XFxcXChbXlxcclxcblxcZl0pIiwiZyIpLG5lPWZ1bmN0aW9uKGUsdCl7dmFyIG49IjB4IitlLnNsaWNlKDEpLTY1NTM2O3JldHVybiB0fHwobjwwP1N0cmluZy5mcm9tQ2hhckNvZGUobis2NTUzNik6U3RyaW5nLmZyb21DaGFyQ29kZShuPj4xMHw1NTI5NiwxMDIzJm58NTYzMjApKX0scmU9LyhbXDAtXHgxZlx4N2ZdfF4tP1xkKXxeLSR8W15cMC1ceDFmXHg3Zi1cdUZGRkZcdy1dL2csaWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8iXDAiPT09ZT8iXHVmZmZkIjplLnNsaWNlKDAsLTEpKyJcXCIrZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpLnRvU3RyaW5nKDE2KSsiICI6IlxcIitlfSxvZT1mdW5jdGlvbigpe0MoKX0sYWU9eGUoZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lLmRpc2FibGVkJiYiZmllbGRzZXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSx7ZGlyOiJwYXJlbnROb2RlIixuZXh0OiJsZWdlbmQifSk7dHJ5e08uYXBwbHkodD1QLmNhbGwoZC5jaGlsZE5vZGVzKSxkLmNoaWxkTm9kZXMpLHRbZC5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2goZSl7Tz17YXBwbHk6dC5sZW5ndGg/ZnVuY3Rpb24oZSx0KXtxLmFwcGx5KGUsUC5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7d2hpbGUoZVtuKytdPXRbcisrXSk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gc2UodCxlLG4scil7dmFyIGksbyxhLHMsdSxsLGMsZj1lJiZlLm93bmVyRG9jdW1lbnQsZD1lP2Uubm9kZVR5cGU6OTtpZihuPW58fFtdLCJzdHJpbmciIT10eXBlb2YgdHx8IXR8fDEhPT1kJiY5IT09ZCYmMTEhPT1kKXJldHVybiBuO2lmKCFyJiYoQyhlKSxlPWV8fFQsRSkpe2lmKDExIT09ZCYmKHU9Wi5leGVjKHQpKSlpZihpPXVbMV0pe2lmKDk9PT1kKXtpZighKGE9ZS5nZXRFbGVtZW50QnlJZChpKSkpcmV0dXJuIG47aWYoYS5pZD09PWkpcmV0dXJuIG4ucHVzaChhKSxufWVsc2UgaWYoZiYmKGE9Zi5nZXRFbGVtZW50QnlJZChpKSkmJnkoZSxhKSYmYS5pZD09PWkpcmV0dXJuIG4ucHVzaChhKSxufWVsc2V7aWYodVsyXSlyZXR1cm4gTy5hcHBseShuLGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodCkpLG47aWYoKGk9dVszXSkmJnAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBPLmFwcGx5KG4sZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGkpKSxufWlmKHAucXNhJiYha1t0KyIgIl0mJighdnx8IXYudGVzdCh0KSkmJigxIT09ZHx8Im9iamVjdCIhPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpKXtpZihjPXQsZj1lLDE9PT1kJiYoVS50ZXN0KHQpfHxfLnRlc3QodCkpKXsoZj1lZS50ZXN0KHQpJiZ5ZShlLnBhcmVudE5vZGUpfHxlKT09PWUmJnAuc2NvcGV8fCgocz1lLmdldEF0dHJpYnV0ZSgiaWQiKSk/cz1zLnJlcGxhY2UocmUsaWUpOmUuc2V0QXR0cmlidXRlKCJpZCIscz1BKSksbz0obD1oKHQpKS5sZW5ndGg7d2hpbGUoby0tKWxbb109KHM/IiMiK3M6IjpzY29wZSIpKyIgIitiZShsW29dKTtjPWwuam9pbigiLCIpfXRyeXtyZXR1cm4gTy5hcHBseShuLGYucXVlcnlTZWxlY3RvckFsbChjKSksbn1jYXRjaChlKXtrKHQsITApfWZpbmFsbHl7cz09PUEmJmUucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGcodC5yZXBsYWNlKCQsIiQxIiksZSxuLHIpfWZ1bmN0aW9uIHVlKCl7dmFyIHI9W107cmV0dXJuIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gci5wdXNoKHQrIiAiKT54LmNhY2hlTGVuZ3RoJiZkZWxldGUgZVtyLnNoaWZ0KCldLGVbdCsiICJdPW59fWZ1bmN0aW9uIGxlKGUpe3JldHVybiBlW0FdPSEwLGV9ZnVuY3Rpb24gY2UoZSl7dmFyIHQ9VC5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpO3RyeXtyZXR1cm4hIWUodCl9Y2F0Y2goZSl7cmV0dXJuITF9ZmluYWxseXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0PW51bGx9fWZ1bmN0aW9uIGZlKGUsdCl7dmFyIG49ZS5zcGxpdCgifCIpLHI9bi5sZW5ndGg7d2hpbGUoci0tKXguYXR0ckhhbmRsZVtuW3JdXT10fWZ1bmN0aW9uIGRlKGUsdCl7dmFyIG49dCYmZSxyPW4mJjE9PT1lLm5vZGVUeXBlJiYxPT09dC5ub2RlVHlwZSYmZS5zb3VyY2VJbmRleC10LnNvdXJjZUluZGV4O2lmKHIpcmV0dXJuIHI7aWYobil3aGlsZShuPW4ubmV4dFNpYmxpbmcpaWYobj09PXQpcmV0dXJuLTE7cmV0dXJuIGU/MTotMX1mdW5jdGlvbiBwZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmZS50eXBlPT09dH19ZnVuY3Rpb24gaGUobil7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oImlucHV0Ij09PXR8fCJidXR0b24iPT09dCkmJmUudHlwZT09PW59fWZ1bmN0aW9uIGdlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4iZm9ybSJpbiBlP2UucGFyZW50Tm9kZSYmITE9PT1lLmRpc2FibGVkPyJsYWJlbCJpbiBlPyJsYWJlbCJpbiBlLnBhcmVudE5vZGU/ZS5wYXJlbnROb2RlLmRpc2FibGVkPT09dDplLmRpc2FibGVkPT09dDplLmlzRGlzYWJsZWQ9PT10fHxlLmlzRGlzYWJsZWQhPT0hdCYmYWUoZSk9PT10OmUuZGlzYWJsZWQ9PT10OiJsYWJlbCJpbiBlJiZlLmRpc2FibGVkPT09dH19ZnVuY3Rpb24gdmUoYSl7cmV0dXJuIGxlKGZ1bmN0aW9uKG8pe3JldHVybiBvPStvLGxlKGZ1bmN0aW9uKGUsdCl7dmFyIG4scj1hKFtdLGUubGVuZ3RoLG8pLGk9ci5sZW5ndGg7d2hpbGUoaS0tKWVbbj1yW2ldXSYmKGVbbl09ISh0W25dPWVbbl0pKX0pfSl9ZnVuY3Rpb24geWUoZSl7cmV0dXJuIGUmJiJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZSYmZX1mb3IoZSBpbiBwPXNlLnN1cHBvcnQ9e30saT1zZS5pc1hNTD1mdW5jdGlvbihlKXt2YXIgdD1lLm5hbWVzcGFjZVVSSSxuPShlLm93bmVyRG9jdW1lbnR8fGUpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4hWS50ZXN0KHR8fG4mJm4ubm9kZU5hbWV8fCJIVE1MIil9LEM9c2Uuc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWU/ZS5vd25lckRvY3VtZW50fHxlOmQ7cmV0dXJuIHIhPVQmJjk9PT1yLm5vZGVUeXBlJiZyLmRvY3VtZW50RWxlbWVudCYmKGE9KFQ9cikuZG9jdW1lbnRFbGVtZW50LEU9IWkoVCksZCE9VCYmKG49VC5kZWZhdWx0VmlldykmJm4udG9wIT09biYmKG4uYWRkRXZlbnRMaXN0ZW5lcj9uLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsb2UsITEpOm4uYXR0YWNoRXZlbnQmJm4uYXR0YWNoRXZlbnQoIm9udW5sb2FkIixvZSkpLHAuc2NvcGU9Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIGEuYXBwZW5kQ2hpbGQoZSkuYXBwZW5kQ2hpbGQoVC5jcmVhdGVFbGVtZW50KCJkaXYiKSksInVuZGVmaW5lZCIhPXR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGwmJiFlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpzY29wZSBmaWVsZHNldCBkaXYiKS5sZW5ndGh9KSxwLmF0dHJpYnV0ZXM9Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NOYW1lPSJpIiwhZS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSkscC5nZXRFbGVtZW50c0J5VGFnTmFtZT1jZShmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBlbmRDaGlsZChULmNyZWF0ZUNvbW1lbnQoIiIpKSwhZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLHAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT1KLnRlc3QoVC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSxwLmdldEJ5SWQ9Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIGEuYXBwZW5kQ2hpbGQoZSkuaWQ9QSwhVC5nZXRFbGVtZW50c0J5TmFtZXx8IVQuZ2V0RWxlbWVudHNCeU5hbWUoQSkubGVuZ3RofSkscC5nZXRCeUlkPyh4LmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UodGUsbmUpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoImlkIik9PT10fX0seC5maW5kLklEPWZ1bmN0aW9uKGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRCeUlkJiZFKXt2YXIgbj10LmdldEVsZW1lbnRCeUlkKGUpO3JldHVybiBuP1tuXTpbXX19KTooeC5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIG49ZS5yZXBsYWNlKHRlLG5lKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUmJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gdCYmdC52YWx1ZT09PW59fSx4LmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQmJkUpe3ZhciBuLHIsaSxvPXQuZ2V0RWxlbWVudEJ5SWQoZSk7aWYobyl7aWYoKG49by5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dO2k9dC5nZXRFbGVtZW50c0J5TmFtZShlKSxyPTA7d2hpbGUobz1pW3IrK10paWYoKG49by5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dfXJldHVybltdfX0pLHguZmluZC5UQUc9cC5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihlLHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50c0J5VGFnTmFtZT90LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpOnAucXNhP3QucXVlcnlTZWxlY3RvckFsbChlKTp2b2lkIDB9OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKCIqIj09PWUpe3doaWxlKG49b1tpKytdKTE9PT1uLm5vZGVUeXBlJiZyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIG99LHguZmluZC5DTEFTUz1wLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJkUpcmV0dXJuIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKX0scz1bXSx2PVtdLChwLnFzYT1KLnRlc3QoVC5xdWVyeVNlbGVjdG9yQWxsKSkmJihjZShmdW5jdGlvbihlKXt2YXIgdDthLmFwcGVuZENoaWxkKGUpLmlubmVySFRNTD0iPGEgaWQ9JyIrQSsiJz48L2E+PHNlbGVjdCBpZD0nIitBKyItXHJcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGUucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJnYucHVzaCgiWypeJF09IitSKyIqKD86Jyd8XCJcIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fHYucHVzaCgiXFxbIitSKyIqKD86dmFsdWV8IitJKyIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIrQSsiLV0iKS5sZW5ndGh8fHYucHVzaCgifj0iKSwodD1ULmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnNldEF0dHJpYnV0ZSgibmFtZSIsIiIpLGUuYXBwZW5kQ2hpbGQodCksZS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT0nJ10iKS5sZW5ndGh8fHYucHVzaCgiXFxbIitSKyIqbmFtZSIrUisiKj0iK1IrIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fHYucHVzaCgiOmNoZWNrZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoImEjIitBKyIrKiIpLmxlbmd0aHx8di5wdXNoKCIuIy4rWyt+XSIpLGUucXVlcnlTZWxlY3RvckFsbCgiXFxcZiIpLHYucHVzaCgiW1xcclxcblxcZl0iKX0pLGNlKGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD4iO3ZhciB0PVQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTt0LnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGUuYXBwZW5kQ2hpbGQodCkuc2V0QXR0cmlidXRlKCJuYW1lIiwiRCIpLGUucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGgmJnYucHVzaCgibmFtZSIrUisiKlsqXiR8IX5dPz0iKSwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCYmdi5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpLGEuYXBwZW5kQ2hpbGQoZSkuZGlzYWJsZWQ9ITAsMiE9PWUucXVlcnlTZWxlY3RvckFsbCgiOmRpc2FibGVkIikubGVuZ3RoJiZ2LnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4Iiksdi5wdXNoKCIsLio6Iil9KSksKHAubWF0Y2hlc1NlbGVjdG9yPUoudGVzdChjPWEubWF0Y2hlc3x8YS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLm9NYXRjaGVzU2VsZWN0b3J8fGEubXNNYXRjaGVzU2VsZWN0b3IpKSYmY2UoZnVuY3Rpb24oZSl7cC5kaXNjb25uZWN0ZWRNYXRjaD1jLmNhbGwoZSwiKiIpLGMuY2FsbChlLCJbcyE9JyddOngiKSxzLnB1c2goIiE9IixXKX0pLHY9di5sZW5ndGgmJm5ldyBSZWdFeHAodi5qb2luKCJ8IikpLHM9cy5sZW5ndGgmJm5ldyBSZWdFeHAocy5qb2luKCJ8IikpLHQ9Si50ZXN0KGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24pLHk9dHx8Si50ZXN0KGEuY29udGFpbnMpP2Z1bmN0aW9uKGUsdCl7dmFyIG49OT09PWUubm9kZVR5cGU/ZS5kb2N1bWVudEVsZW1lbnQ6ZSxyPXQmJnQucGFyZW50Tm9kZTtyZXR1cm4gZT09PXJ8fCEoIXJ8fDEhPT1yLm5vZGVUeXBlfHwhKG4uY29udGFpbnM/bi5jb250YWlucyhyKTplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpKSl9OmZ1bmN0aW9uKGUsdCl7aWYodCl3aGlsZSh0PXQucGFyZW50Tm9kZSlpZih0PT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sRD10P2Z1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIGw9ITAsMDt2YXIgbj0hZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtyZXR1cm4gbnx8KDEmKG49KGUub3duZXJEb2N1bWVudHx8ZSk9PSh0Lm93bmVyRG9jdW1lbnR8fHQpP2UuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk6MSl8fCFwLnNvcnREZXRhY2hlZCYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PW4/ZT09VHx8ZS5vd25lckRvY3VtZW50PT1kJiZ5KGQsZSk/LTE6dD09VHx8dC5vd25lckRvY3VtZW50PT1kJiZ5KGQsdCk/MTp1P0godSxlKS1IKHUsdCk6MDo0Jm4/LTE6MSl9OmZ1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIGw9ITAsMDt2YXIgbixyPTAsaT1lLnBhcmVudE5vZGUsbz10LnBhcmVudE5vZGUsYT1bZV0scz1bdF07aWYoIWl8fCFvKXJldHVybiBlPT1UPy0xOnQ9PVQ/MTppPy0xOm8/MTp1P0godSxlKS1IKHUsdCk6MDtpZihpPT09bylyZXR1cm4gZGUoZSx0KTtuPWU7d2hpbGUobj1uLnBhcmVudE5vZGUpYS51bnNoaWZ0KG4pO249dDt3aGlsZShuPW4ucGFyZW50Tm9kZSlzLnVuc2hpZnQobik7d2hpbGUoYVtyXT09PXNbcl0pcisrO3JldHVybiByP2RlKGFbcl0sc1tyXSk6YVtyXT09ZD8tMTpzW3JdPT1kPzE6MH0pLFR9LHNlLm1hdGNoZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc2UoZSxudWxsLG51bGwsdCl9LHNlLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihlLHQpe2lmKEMoZSkscC5tYXRjaGVzU2VsZWN0b3ImJkUmJiFrW3QrIiAiXSYmKCFzfHwhcy50ZXN0KHQpKSYmKCF2fHwhdi50ZXN0KHQpKSl0cnl7dmFyIG49Yy5jYWxsKGUsdCk7aWYobnx8cC5kaXNjb25uZWN0ZWRNYXRjaHx8ZS5kb2N1bWVudCYmMTEhPT1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiBufWNhdGNoKGUpe2sodCwhMCl9cmV0dXJuIDA8c2UodCxULG51bGwsW2VdKS5sZW5ndGh9LHNlLmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUub3duZXJEb2N1bWVudHx8ZSkhPVQmJkMoZSkseShlLHQpfSxzZS5hdHRyPWZ1bmN0aW9uKGUsdCl7KGUub3duZXJEb2N1bWVudHx8ZSkhPVQmJkMoZSk7dmFyIG49eC5hdHRySGFuZGxlW3QudG9Mb3dlckNhc2UoKV0scj1uJiZMLmNhbGwoeC5hdHRySGFuZGxlLHQudG9Mb3dlckNhc2UoKSk/bihlLHQsIUUpOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09cj9yOnAuYXR0cmlidXRlc3x8IUU/ZS5nZXRBdHRyaWJ1dGUodCk6KHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpKSYmci5zcGVjaWZpZWQ/ci52YWx1ZTpudWxsfSxzZS5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGUrIiIpLnJlcGxhY2UocmUsaWUpfSxzZS5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZSl9LHNlLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPTAsaT0wO2lmKGw9IXAuZGV0ZWN0RHVwbGljYXRlcyx1PSFwLnNvcnRTdGFibGUmJmUuc2xpY2UoMCksZS5zb3J0KEQpLGwpe3doaWxlKHQ9ZVtpKytdKXQ9PT1lW2ldJiYocj1uLnB1c2goaSkpO3doaWxlKHItLSllLnNwbGljZShuW3JdLDEpfXJldHVybiB1PW51bGwsZX0sbz1zZS5nZXRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0LG49IiIscj0wLGk9ZS5ub2RlVHlwZTtpZihpKXtpZigxPT09aXx8OT09PWl8fDExPT09aSl7aWYoInN0cmluZyI9PXR5cGVvZiBlLnRleHRDb250ZW50KXJldHVybiBlLnRleHRDb250ZW50O2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZyluKz1vKGUpfWVsc2UgaWYoMz09PWl8fDQ9PT1pKXJldHVybiBlLm5vZGVWYWx1ZX1lbHNlIHdoaWxlKHQ9ZVtyKytdKW4rPW8odCk7cmV0dXJuIG59LCh4PXNlLnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOmxlLG1hdGNoOlEsYXR0ckhhbmRsZTp7fSxmaW5kOnt9LHJlbGF0aXZlOnsiPiI6e2RpcjoicGFyZW50Tm9kZSIsZmlyc3Q6ITB9LCIgIjp7ZGlyOiJwYXJlbnROb2RlIn0sIisiOntkaXI6InByZXZpb3VzU2libGluZyIsZmlyc3Q6ITB9LCJ+Ijp7ZGlyOiJwcmV2aW91c1NpYmxpbmcifX0scHJlRmlsdGVyOntBVFRSOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0ucmVwbGFjZSh0ZSxuZSksZVszXT0oZVszXXx8ZVs0XXx8ZVs1XXx8IiIpLnJlcGxhY2UodGUsbmUpLCJ+PSI9PT1lWzJdJiYoZVszXT0iICIrZVszXSsiICIpLGUuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS50b0xvd2VyQ2FzZSgpLCJudGgiPT09ZVsxXS5zbGljZSgwLDMpPyhlWzNdfHxzZS5lcnJvcihlWzBdKSxlWzRdPSsoZVs0XT9lWzVdKyhlWzZdfHwxKToyKigiZXZlbiI9PT1lWzNdfHwib2RkIj09PWVbM10pKSxlWzVdPSsoZVs3XStlWzhdfHwib2RkIj09PWVbM10pKTplWzNdJiZzZS5lcnJvcihlWzBdKSxlfSxQU0VVRE86ZnVuY3Rpb24oZSl7dmFyIHQsbj0hZVs2XSYmZVsyXTtyZXR1cm4gUS5DSElMRC50ZXN0KGVbMF0pP251bGw6KGVbM10/ZVsyXT1lWzRdfHxlWzVdfHwiIjpuJiZWLnRlc3QobikmJih0PWgobiwhMCkpJiYodD1uLmluZGV4T2YoIikiLG4ubGVuZ3RoLXQpLW4ubGVuZ3RoKSYmKGVbMF09ZVswXS5zbGljZSgwLHQpLGVbMl09bi5zbGljZSgwLHQpKSxlLnNsaWNlKDAsMykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHRlLG5lKS50b0xvd2VyQ2FzZSgpO3JldHVybiIqIj09PWU/ZnVuY3Rpb24oKXtyZXR1cm4hMH06ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXR9fSxDTEFTUzpmdW5jdGlvbihlKXt2YXIgdD1tW2UrIiAiXTtyZXR1cm4gdHx8KHQ9bmV3IFJlZ0V4cCgiKF58IitSKyIpIitlKyIoIitSKyJ8JCkiKSkmJm0oZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KCJzdHJpbmciPT10eXBlb2YgZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1lfHwidW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24obixyLGkpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1zZS5hdHRyKGUsbik7cmV0dXJuIG51bGw9PXQ/IiE9Ij09PXI6IXJ8fCh0Kz0iIiwiPSI9PT1yP3Q9PT1pOiIhPSI9PT1yP3QhPT1pOiJePSI9PT1yP2kmJjA9PT10LmluZGV4T2YoaSk6Iio9Ij09PXI/aSYmLTE8dC5pbmRleE9mKGkpOiIkPSI9PT1yP2kmJnQuc2xpY2UoLWkubGVuZ3RoKT09PWk6In49Ij09PXI/LTE8KCIgIit0LnJlcGxhY2UoRiwiICIpKyIgIikuaW5kZXhPZihpKToifD0iPT09ciYmKHQ9PT1pfHx0LnNsaWNlKDAsaS5sZW5ndGgrMSk9PT1pKyItIikpfX0sQ0hJTEQ6ZnVuY3Rpb24oaCxlLHQsZyx2KXt2YXIgeT0ibnRoIiE9PWguc2xpY2UoMCwzKSxtPSJsYXN0IiE9PWguc2xpY2UoLTQpLGI9Im9mLXR5cGUiPT09ZTtyZXR1cm4gMT09PWcmJjA9PT12P2Z1bmN0aW9uKGUpe3JldHVybiEhZS5wYXJlbnROb2RlfTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGw9eSE9PW0/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixjPWUucGFyZW50Tm9kZSxmPWImJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxkPSFuJiYhYixwPSExO2lmKGMpe2lmKHkpe3doaWxlKGwpe2E9ZTt3aGlsZShhPWFbbF0paWYoYj9hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1mOjE9PT1hLm5vZGVUeXBlKXJldHVybiExO3U9bD0ib25seSI9PT1oJiYhdSYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZih1PVttP2MuZmlyc3RDaGlsZDpjLmxhc3RDaGlsZF0sbSYmZCl7cD0ocz0ocj0oaT0obz0oYT1jKVtBXXx8KGFbQV09e30pKVthLnVuaXF1ZUlEXXx8KG9bYS51bmlxdWVJRF09e30pKVtoXXx8W10pWzBdPT09TiYmclsxXSkmJnJbMl0sYT1zJiZjLmNoaWxkTm9kZXNbc107d2hpbGUoYT0rK3MmJmEmJmFbbF18fChwPXM9MCl8fHUucG9wKCkpaWYoMT09PWEubm9kZVR5cGUmJisrcCYmYT09PWUpe2lbaF09W04scyxwXTticmVha319ZWxzZSBpZihkJiYocD1zPShyPShpPShvPShhPWUpW0FdfHwoYVtBXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdfHxbXSlbMF09PT1OJiZyWzFdKSwhMT09PXApd2hpbGUoYT0rK3MmJmEmJmFbbF18fChwPXM9MCl8fHUucG9wKCkpaWYoKGI/YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ZjoxPT09YS5ub2RlVHlwZSkmJisrcCYmKGQmJigoaT0obz1hW0FdfHwoYVtBXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdPVtOLHBdKSxhPT09ZSkpYnJlYWs7cmV0dXJuKHAtPXYpPT09Z3x8cCVnPT0wJiYwPD1wL2d9fX0sUFNFVURPOmZ1bmN0aW9uKGUsbyl7dmFyIHQsYT14LnBzZXVkb3NbZV18fHguc2V0RmlsdGVyc1tlLnRvTG93ZXJDYXNlKCldfHxzZS5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2UpO3JldHVybiBhW0FdP2Eobyk6MTxhLmxlbmd0aD8odD1bZSxlLCIiLG9dLHguc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpP2xlKGZ1bmN0aW9uKGUsdCl7dmFyIG4scj1hKGUsbyksaT1yLmxlbmd0aDt3aGlsZShpLS0pZVtuPUgoZSxyW2ldKV09ISh0W25dPXJbaV0pfSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSwwLHQpfSk6YX19LHBzZXVkb3M6e25vdDpsZShmdW5jdGlvbihlKXt2YXIgcj1bXSxpPVtdLHM9ZihlLnJlcGxhY2UoJCwiJDEiKSk7cmV0dXJuIHNbQV0/bGUoZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1zKGUsbnVsbCxyLFtdKSxhPWUubGVuZ3RoO3doaWxlKGEtLSkoaT1vW2FdKSYmKGVbYV09ISh0W2FdPWkpKX0pOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gclswXT1lLHMocixudWxsLG4saSksclswXT1udWxsLCFpLnBvcCgpfX0pLGhhczpsZShmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDA8c2UodCxlKS5sZW5ndGh9fSksY29udGFpbnM6bGUoZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC5yZXBsYWNlKHRlLG5lKSxmdW5jdGlvbihlKXtyZXR1cm4tMTwoZS50ZXh0Q29udGVudHx8byhlKSkuaW5kZXhPZih0KX19KSxsYW5nOmxlKGZ1bmN0aW9uKG4pe3JldHVybiBYLnRlc3Qobnx8IiIpfHxzZS5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIituKSxuPW4ucmVwbGFjZSh0ZSxuZSkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihlKXt2YXIgdDtkb3tpZih0PUU/ZS5sYW5nOmUuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHxlLmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybih0PXQudG9Mb3dlckNhc2UoKSk9PT1ufHwwPT09dC5pbmRleE9mKG4rIi0iKX13aGlsZSgoZT1lLnBhcmVudE5vZGUpJiYxPT09ZS5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGUpe3ZhciB0PW4ubG9jYXRpb24mJm4ubG9jYXRpb24uaGFzaDtyZXR1cm4gdCYmdC5zbGljZSgxKT09PWUuaWR9LHJvb3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1hfSxmb2N1czpmdW5jdGlvbihlKXtyZXR1cm4gZT09PVQuYWN0aXZlRWxlbWVudCYmKCFULmhhc0ZvY3VzfHxULmhhc0ZvY3VzKCkpJiYhIShlLnR5cGV8fGUuaHJlZnx8fmUudGFiSW5kZXgpfSxlbmFibGVkOmdlKCExKSxkaXNhYmxlZDpnZSghMCksY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiEhZS5jaGVja2VkfHwib3B0aW9uIj09PXQmJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsITA9PT1lLnNlbGVjdGVkfSxlbXB0eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaWYoZS5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIXgucHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBLLnRlc3QoZS5ub2RlTmFtZSl9LGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBHLnRlc3QoZS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiJidXR0b24iPT09ZS50eXBlfHwiYnV0dG9uIj09PXR9LHRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fCJ0ZXh0Ij09PXQudG9Mb3dlckNhc2UoKSl9LGZpcnN0OnZlKGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDp2ZShmdW5jdGlvbihlLHQpe3JldHVyblt0LTFdfSksZXE6dmUoZnVuY3Rpb24oZSx0LG4pe3JldHVybltuPDA/bit0Om5dfSksZXZlbjp2ZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLG9kZDp2ZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0xO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0OnZlKGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDp0PG4/dDpuOzA8PS0tcjspZS5wdXNoKHIpO3JldHVybiBlfSksZ3Q6dmUoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0Om47KytyPHQ7KWUucHVzaChyKTtyZXR1cm4gZX0pfX0pLnBzZXVkb3MubnRoPXgucHNldWRvcy5lcSx7cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0peC5wc2V1ZG9zW2VdPXBlKGUpO2ZvcihlIGlue3N1Ym1pdDohMCxyZXNldDohMH0peC5wc2V1ZG9zW2VdPWhlKGUpO2Z1bmN0aW9uIG1lKCl7fWZ1bmN0aW9uIGJlKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGgscj0iIjt0PG47dCsrKXIrPWVbdF0udmFsdWU7cmV0dXJuIHJ9ZnVuY3Rpb24geGUocyxlLHQpe3ZhciB1PWUuZGlyLGw9ZS5uZXh0LGM9bHx8dSxmPXQmJiJwYXJlbnROb2RlIj09PWMsZD1yKys7cmV0dXJuIGUuZmlyc3Q/ZnVuY3Rpb24oZSx0LG4pe3doaWxlKGU9ZVt1XSlpZigxPT09ZS5ub2RlVHlwZXx8ZilyZXR1cm4gcyhlLHQsbik7cmV0dXJuITF9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYT1bTixkXTtpZihuKXt3aGlsZShlPWVbdV0paWYoKDE9PT1lLm5vZGVUeXBlfHxmKSYmcyhlLHQsbikpcmV0dXJuITB9ZWxzZSB3aGlsZShlPWVbdV0paWYoMT09PWUubm9kZVR5cGV8fGYpaWYoaT0obz1lW0FdfHwoZVtBXT17fSkpW2UudW5pcXVlSURdfHwob1tlLnVuaXF1ZUlEXT17fSksbCYmbD09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSllPWVbdV18fGU7ZWxzZXtpZigocj1pW2NdKSYmclswXT09PU4mJnJbMV09PT1kKXJldHVybiBhWzJdPXJbMl07aWYoKGlbY109YSlbMl09cyhlLHQsbikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHdlKGkpe3JldHVybiAxPGkubGVuZ3RoP2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1pLmxlbmd0aDt3aGlsZShyLS0paWYoIWlbcl0oZSx0LG4pKXJldHVybiExO3JldHVybiEwfTppWzBdfWZ1bmN0aW9uIENlKGUsdCxuLHIsaSl7Zm9yKHZhciBvLGE9W10scz0wLHU9ZS5sZW5ndGgsbD1udWxsIT10O3M8dTtzKyspKG89ZVtzXSkmJihuJiYhbihvLHIsaSl8fChhLnB1c2gobyksbCYmdC5wdXNoKHMpKSk7cmV0dXJuIGF9ZnVuY3Rpb24gVGUocCxoLGcsdix5LGUpe3JldHVybiB2JiYhdltBXSYmKHY9VGUodikpLHkmJiF5W0FdJiYoeT1UZSh5LGUpKSxsZShmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscz1bXSx1PVtdLGw9dC5sZW5ndGgsYz1lfHxmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7cisrKXNlKGUsdFtyXSxuKTtyZXR1cm4gbn0oaHx8IioiLG4ubm9kZVR5cGU/W25dOm4sW10pLGY9IXB8fCFlJiZoP2M6Q2UoYyxzLHAsbixyKSxkPWc/eXx8KGU/cDpsfHx2KT9bXTp0OmY7aWYoZyYmZyhmLGQsbixyKSx2KXtpPUNlKGQsdSksdihpLFtdLG4sciksbz1pLmxlbmd0aDt3aGlsZShvLS0pKGE9aVtvXSkmJihkW3Vbb11dPSEoZlt1W29dXT1hKSl9aWYoZSl7aWYoeXx8cCl7aWYoeSl7aT1bXSxvPWQubGVuZ3RoO3doaWxlKG8tLSkoYT1kW29dKSYmaS5wdXNoKGZbb109YSk7eShudWxsLGQ9W10saSxyKX1vPWQubGVuZ3RoO3doaWxlKG8tLSkoYT1kW29dKSYmLTE8KGk9eT9IKGUsYSk6c1tvXSkmJihlW2ldPSEodFtpXT1hKSl9fWVsc2UgZD1DZShkPT09dD9kLnNwbGljZShsLGQubGVuZ3RoKTpkKSx5P3kobnVsbCx0LGQscik6Ty5hcHBseSh0LGQpfSl9ZnVuY3Rpb24gRWUoZSl7Zm9yKHZhciBpLHQsbixyPWUubGVuZ3RoLG89eC5yZWxhdGl2ZVtlWzBdLnR5cGVdLGE9b3x8eC5yZWxhdGl2ZVsiICJdLHM9bz8xOjAsdT14ZShmdW5jdGlvbihlKXtyZXR1cm4gZT09PWl9LGEsITApLGw9eGUoZnVuY3Rpb24oZSl7cmV0dXJuLTE8SChpLGUpfSxhLCEwKSxjPVtmdW5jdGlvbihlLHQsbil7dmFyIHI9IW8mJihufHx0IT09dyl8fCgoaT10KS5ub2RlVHlwZT91KGUsdCxuKTpsKGUsdCxuKSk7cmV0dXJuIGk9bnVsbCxyfV07czxyO3MrKylpZih0PXgucmVsYXRpdmVbZVtzXS50eXBlXSljPVt4ZSh3ZShjKSx0KV07ZWxzZXtpZigodD14LmZpbHRlcltlW3NdLnR5cGVdLmFwcGx5KG51bGwsZVtzXS5tYXRjaGVzKSlbQV0pe2ZvcihuPSsrcztuPHI7bisrKWlmKHgucmVsYXRpdmVbZVtuXS50eXBlXSlicmVhaztyZXR1cm4gVGUoMTxzJiZ3ZShjKSwxPHMmJmJlKGUuc2xpY2UoMCxzLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09ZVtzLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoJCwiJDEiKSx0LHM8biYmRWUoZS5zbGljZShzLG4pKSxuPHImJkVlKGU9ZS5zbGljZShuKSksbjxyJiZiZShlKSl9Yy5wdXNoKHQpfXJldHVybiB3ZShjKX1yZXR1cm4gbWUucHJvdG90eXBlPXguZmlsdGVycz14LnBzZXVkb3MseC5zZXRGaWx0ZXJzPW5ldyBtZSxoPXNlLnRva2VuaXplPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzLHUsbD1iW2UrIiAiXTtpZihsKXJldHVybiB0PzA6bC5zbGljZSgwKTthPWUscz1bXSx1PXgucHJlRmlsdGVyO3doaWxlKGEpe2ZvcihvIGluIG4mJiEocj16LmV4ZWMoYSkpfHwociYmKGE9YS5zbGljZShyWzBdLmxlbmd0aCl8fGEpLHMucHVzaChpPVtdKSksbj0hMSwocj1fLmV4ZWMoYSkpJiYobj1yLnNoaWZ0KCksaS5wdXNoKHt2YWx1ZTpuLHR5cGU6clswXS5yZXBsYWNlKCQsIiAiKX0pLGE9YS5zbGljZShuLmxlbmd0aCkpLHguZmlsdGVyKSEocj1RW29dLmV4ZWMoYSkpfHx1W29dJiYhKHI9dVtvXShyKSl8fChuPXIuc2hpZnQoKSxpLnB1c2goe3ZhbHVlOm4sdHlwZTpvLG1hdGNoZXM6cn0pLGE9YS5zbGljZShuLmxlbmd0aCkpO2lmKCFuKWJyZWFrfXJldHVybiB0P2EubGVuZ3RoOmE/c2UuZXJyb3IoZSk6YihlLHMpLnNsaWNlKDApfSxmPXNlLmNvbXBpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbix2LHksbSxiLHIsaT1bXSxvPVtdLGE9U1tlKyIgIl07aWYoIWEpe3R8fCh0PWgoZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKShhPUVlKHRbbl0pKVtBXT9pLnB1c2goYSk6by5wdXNoKGEpOyhhPVMoZSwodj1vLG09MDwoeT1pKS5sZW5ndGgsYj0wPHYubGVuZ3RoLHI9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdT0wLGw9IjAiLGM9ZSYmW10sZj1bXSxkPXcscD1lfHxiJiZ4LmZpbmQuVEFHKCIqIixpKSxoPU4rPW51bGw9PWQ/MTpNYXRoLnJhbmRvbSgpfHwuMSxnPXAubGVuZ3RoO2ZvcihpJiYodz10PT1UfHx0fHxpKTtsIT09ZyYmbnVsbCE9KG89cFtsXSk7bCsrKXtpZihiJiZvKXthPTAsdHx8by5vd25lckRvY3VtZW50PT1UfHwoQyhvKSxuPSFFKTt3aGlsZShzPXZbYSsrXSlpZihzKG8sdHx8VCxuKSl7ci5wdXNoKG8pO2JyZWFrfWkmJihOPWgpfW0mJigobz0hcyYmbykmJnUtLSxlJiZjLnB1c2gobykpfWlmKHUrPWwsbSYmbCE9PXUpe2E9MDt3aGlsZShzPXlbYSsrXSlzKGMsZix0LG4pO2lmKGUpe2lmKDA8dSl3aGlsZShsLS0pY1tsXXx8ZltsXXx8KGZbbF09ai5jYWxsKHIpKTtmPUNlKGYpfU8uYXBwbHkocixmKSxpJiYhZSYmMDxmLmxlbmd0aCYmMTx1K3kubGVuZ3RoJiZzZS51bmlxdWVTb3J0KHIpfXJldHVybiBpJiYoTj1oLHc9ZCksY30sbT9sZShyKTpyKSkpLnNlbGVjdG9yPWV9cmV0dXJuIGF9LGc9c2Uuc2VsZWN0PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZSxjPSFyJiZoKGU9bC5zZWxlY3Rvcnx8ZSk7aWYobj1ufHxbXSwxPT09Yy5sZW5ndGgpe2lmKDI8KG89Y1swXT1jWzBdLnNsaWNlKDApKS5sZW5ndGgmJiJJRCI9PT0oYT1vWzBdKS50eXBlJiY5PT09dC5ub2RlVHlwZSYmRSYmeC5yZWxhdGl2ZVtvWzFdLnR5cGVdKXtpZighKHQ9KHguZmluZC5JRChhLm1hdGNoZXNbMF0ucmVwbGFjZSh0ZSxuZSksdCl8fFtdKVswXSkpcmV0dXJuIG47bCYmKHQ9dC5wYXJlbnROb2RlKSxlPWUuc2xpY2Uoby5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9aT1RLm5lZWRzQ29udGV4dC50ZXN0KGUpPzA6by5sZW5ndGg7d2hpbGUoaS0tKXtpZihhPW9baV0seC5yZWxhdGl2ZVtzPWEudHlwZV0pYnJlYWs7aWYoKHU9eC5maW5kW3NdKSYmKHI9dShhLm1hdGNoZXNbMF0ucmVwbGFjZSh0ZSxuZSksZWUudGVzdChvWzBdLnR5cGUpJiZ5ZSh0LnBhcmVudE5vZGUpfHx0KSkpe2lmKG8uc3BsaWNlKGksMSksIShlPXIubGVuZ3RoJiZiZShvKSkpcmV0dXJuIE8uYXBwbHkobixyKSxuO2JyZWFrfX19cmV0dXJuKGx8fGYoZSxjKSkocix0LCFFLG4sIXR8fGVlLnRlc3QoZSkmJnllKHQucGFyZW50Tm9kZSl8fHQpLG59LHAuc29ydFN0YWJsZT1BLnNwbGl0KCIiKS5zb3J0KEQpLmpvaW4oIiIpPT09QSxwLmRldGVjdER1cGxpY2F0ZXM9ISFsLEMoKSxwLnNvcnREZXRhY2hlZD1jZShmdW5jdGlvbihlKXtyZXR1cm4gMSZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKFQuY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKSl9KSxjZShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLCIjIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0pfHxmZSgidHlwZXxocmVmfGhlaWdodHx3aWR0aCIsZnVuY3Rpb24oZSx0LG4pe2lmKCFuKXJldHVybiBlLmdldEF0dHJpYnV0ZSh0LCJ0eXBlIj09PXQudG9Mb3dlckNhc2UoKT8xOjIpfSkscC5hdHRyaWJ1dGVzJiZjZShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxpbnB1dC8+IixlLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLCIiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgidmFsdWUiKX0pfHxmZSgidmFsdWUiLGZ1bmN0aW9uKGUsdCxuKXtpZighbiYmImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gZS5kZWZhdWx0VmFsdWV9KSxjZShmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIil9KXx8ZmUoSSxmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoIW4pcmV0dXJuITA9PT1lW3RdP3QudG9Mb3dlckNhc2UoKToocj1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZyLnNwZWNpZmllZD9yLnZhbHVlOm51bGx9KSxzZX0oZyk7RS5maW5kPXAsRS5leHByPXAuc2VsZWN0b3JzLEUuZXhwclsiOiJdPUUuZXhwci5wc2V1ZG9zLEUudW5pcXVlU29ydD1FLnVuaXF1ZT1wLnVuaXF1ZVNvcnQsRS50ZXh0PXAuZ2V0VGV4dCxFLmlzWE1MRG9jPXAuaXNYTUwsRS5jb250YWlucz1wLmNvbnRhaW5zLEUuZXNjYXBlU2VsZWN0b3I9cC5lc2NhcGU7dmFyIGg9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtdLGk9dm9pZCAwIT09bjt3aGlsZSgoZT1lW3RdKSYmOSE9PWUubm9kZVR5cGUpaWYoMT09PWUubm9kZVR5cGUpe2lmKGkmJkUoZSkuaXMobikpYnJlYWs7ci5wdXNoKGUpfXJldHVybiByfSxBPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUpO3JldHVybiBufSxOPUUuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7ZnVuY3Rpb24gUyhlLHQpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9dmFyIGs9L148KFthLXpdW15cL1wwPjpceDIwXHRcclxuXGZdKilbXHgyMFx0XHJcblxmXSpcLz8+KD86PFwvXDE+fCkkL2k7ZnVuY3Rpb24gRChlLG4scil7cmV0dXJuIGIobik/RS5ncmVwKGUsZnVuY3Rpb24oZSx0KXtyZXR1cm4hIW4uY2FsbChlLHQsZSkhPT1yfSk6bi5ub2RlVHlwZT9FLmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT09PW4hPT1yfSk6InN0cmluZyIhPXR5cGVvZiBuP0UuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybi0xPGkuY2FsbChuLGUpIT09cn0pOkUuZmlsdGVyKG4sZSxyKX1FLmZpbHRlcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dFswXTtyZXR1cm4gbiYmKGU9Ijpub3QoIitlKyIpIiksMT09PXQubGVuZ3RoJiYxPT09ci5ub2RlVHlwZT9FLmZpbmQubWF0Y2hlc1NlbGVjdG9yKHIsZSk/W3JdOltdOkUuZmluZC5tYXRjaGVzKGUsRS5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfSkpfSxFLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcy5sZW5ndGgsaT10aGlzO2lmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gdGhpcy5wdXNoU3RhY2soRShlKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodD0wO3Q8cjt0KyspaWYoRS5jb250YWlucyhpW3RdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihuPXRoaXMucHVzaFN0YWNrKFtdKSx0PTA7dDxyO3QrKylFLmZpbmQoZSxpW3RdLG4pO3JldHVybiAxPHI/RS51bmlxdWVTb3J0KG4pOm59LGZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soRCh0aGlzLGV8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soRCh0aGlzLGV8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGUpe3JldHVybiEhRCh0aGlzLCJzdHJpbmciPT10eXBlb2YgZSYmTi50ZXN0KGUpP0UoZSk6ZXx8W10sITEpLmxlbmd0aH19KTt2YXIgTCxqPS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKykpJC87KEUuZm4uaW5pdD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZighZSlyZXR1cm4gdGhpcztpZihuPW58fEwsInN0cmluZyI9PXR5cGVvZiBlKXtpZighKHI9IjwiPT09ZVswXSYmIj4iPT09ZVtlLmxlbmd0aC0xXSYmMzw9ZS5sZW5ndGg/W251bGwsZSxudWxsXTpqLmV4ZWMoZSkpfHwhclsxXSYmdClyZXR1cm4hdHx8dC5qcXVlcnk/KHR8fG4pLmZpbmQoZSk6dGhpcy5jb25zdHJ1Y3Rvcih0KS5maW5kKGUpO2lmKHJbMV0pe2lmKHQ9dCBpbnN0YW5jZW9mIEU/dFswXTp0LEUubWVyZ2UodGhpcyxFLnBhcnNlSFRNTChyWzFdLHQmJnQubm9kZVR5cGU/dC5vd25lckRvY3VtZW50fHx0OncsITApKSxrLnRlc3QoclsxXSkmJkUuaXNQbGFpbk9iamVjdCh0KSlmb3IociBpbiB0KWIodGhpc1tyXSk/dGhpc1tyXSh0W3JdKTp0aGlzLmF0dHIocix0W3JdKTtyZXR1cm4gdGhpc31yZXR1cm4oaT13LmdldEVsZW1lbnRCeUlkKHJbMl0pKSYmKHRoaXNbMF09aSx0aGlzLmxlbmd0aD0xKSx0aGlzfXJldHVybiBlLm5vZGVUeXBlPyh0aGlzWzBdPWUsdGhpcy5sZW5ndGg9MSx0aGlzKTpiKGUpP3ZvaWQgMCE9PW4ucmVhZHk/bi5yZWFkeShlKTplKEUpOkUubWFrZUFycmF5KGUsdGhpcyl9KS5wcm90b3R5cGU9RS5mbixMPUUodyk7dmFyIHE9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sTz17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtmdW5jdGlvbiBQKGUsdCl7d2hpbGUoKGU9ZVt0XSkmJjEhPT1lLm5vZGVUeXBlKTtyZXR1cm4gZX1FLmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGUpe3ZhciB0PUUoZSx0aGlzKSxuPXQubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8bjtlKyspaWYoRS5jb250YWlucyh0aGlzLHRbZV0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtdLGE9InN0cmluZyIhPXR5cGVvZiBlJiZFKGUpO2lmKCFOLnRlc3QoZSkpZm9yKDtyPGk7cisrKWZvcihuPXRoaXNbcl07biYmbiE9PXQ7bj1uLnBhcmVudE5vZGUpaWYobi5ub2RlVHlwZTwxMSYmKGE/LTE8YS5pbmRleChuKToxPT09bi5ub2RlVHlwZSYmRS5maW5kLm1hdGNoZXNTZWxlY3RvcihuLGUpKSl7by5wdXNoKG4pO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjaygxPG8ubGVuZ3RoP0UudW5pcXVlU29ydChvKTpvKX0saW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/InN0cmluZyI9PXR5cGVvZiBlP2kuY2FsbChFKGUpLHRoaXNbMF0pOmkuY2FsbCh0aGlzLGUuanF1ZXJ5P2VbMF06ZSk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soRS51bmlxdWVTb3J0KEUubWVyZ2UodGhpcy5nZXQoKSxFKGUsdCkpKSl9LGFkZEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWU/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpfX0pLEUuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmMTEhPT10Lm5vZGVUeXBlP3Q6bnVsbH0scGFyZW50czpmdW5jdGlvbihlKXtyZXR1cm4gaChlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGgoZSwicGFyZW50Tm9kZSIsbil9LG5leHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFAoZSwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihlKXtyZXR1cm4gUChlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihlKXtyZXR1cm4gaChlLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBoKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBoKGUsIm5leHRTaWJsaW5nIixuKX0scHJldlVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaChlLCJwcmV2aW91c1NpYmxpbmciLG4pfSxzaWJsaW5nczpmdW5jdGlvbihlKXtyZXR1cm4gQSgoZS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxlKX0sY2hpbGRyZW46ZnVuY3Rpb24oZSl7cmV0dXJuIEEoZS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUuY29udGVudERvY3VtZW50JiZyKGUuY29udGVudERvY3VtZW50KT9lLmNvbnRlbnREb2N1bWVudDooUyhlLCJ0ZW1wbGF0ZSIpJiYoZT1lLmNvbnRlbnR8fGUpLEUubWVyZ2UoW10sZS5jaGlsZE5vZGVzKSl9fSxmdW5jdGlvbihyLGkpe0UuZm5bcl09ZnVuY3Rpb24oZSx0KXt2YXIgbj1FLm1hcCh0aGlzLGksZSk7cmV0dXJuIlVudGlsIiE9PXIuc2xpY2UoLTUpJiYodD1lKSx0JiYic3RyaW5nIj09dHlwZW9mIHQmJihuPUUuZmlsdGVyKHQsbikpLDE8dGhpcy5sZW5ndGgmJihPW3JdfHxFLnVuaXF1ZVNvcnQobikscS50ZXN0KHIpJiZuLnJldmVyc2UoKSksdGhpcy5wdXNoU3RhY2sobil9fSk7dmFyIEg9L1teXHgyMFx0XHJcblxmXSsvZztmdW5jdGlvbiBJKGUpe3JldHVybiBlfWZ1bmN0aW9uIFIoZSl7dGhyb3cgZX1mdW5jdGlvbiBCKGUsdCxuLHIpe3ZhciBpO3RyeXtlJiZiKGk9ZS5wcm9taXNlKT9pLmNhbGwoZSkuZG9uZSh0KS5mYWlsKG4pOmUmJmIoaT1lLnRoZW4pP2kuY2FsbChlLHQsbik6dC5hcHBseSh2b2lkIDAsW2VdLnNsaWNlKHIpKX1jYXRjaChlKXtuLmFwcGx5KHZvaWQgMCxbZV0pfX1FLkNhbGxiYWNrcz1mdW5jdGlvbihyKXt2YXIgZSxuO3I9InN0cmluZyI9PXR5cGVvZiByPyhlPXIsbj17fSxFLmVhY2goZS5tYXRjaChIKXx8W10sZnVuY3Rpb24oZSx0KXtuW3RdPSEwfSksbik6RS5leHRlbmQoe30scik7dmFyIGksdCxvLGEscz1bXSx1PVtdLGw9LTEsYz1mdW5jdGlvbigpe2ZvcihhPWF8fHIub25jZSxvPWk9ITA7dS5sZW5ndGg7bD0tMSl7dD11LnNoaWZ0KCk7d2hpbGUoKytsPHMubGVuZ3RoKSExPT09c1tsXS5hcHBseSh0WzBdLHRbMV0pJiZyLnN0b3BPbkZhbHNlJiYobD1zLmxlbmd0aCx0PSExKX1yLm1lbW9yeXx8KHQ9ITEpLGk9ITEsYSYmKHM9dD9bXToiIil9LGY9e2FkZDpmdW5jdGlvbigpe3JldHVybiBzJiYodCYmIWkmJihsPXMubGVuZ3RoLTEsdS5wdXNoKHQpKSxmdW5jdGlvbiBuKGUpe0UuZWFjaChlLGZ1bmN0aW9uKGUsdCl7Yih0KT9yLnVuaXF1ZSYmZi5oYXModCl8fHMucHVzaCh0KTp0JiZ0Lmxlbmd0aCYmInN0cmluZyIhPT1UKHQpJiZuKHQpfSl9KGFyZ3VtZW50cyksdCYmIWkmJmMoKSksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIEUuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oZSx0KXt2YXIgbjt3aGlsZSgtMTwobj1FLmluQXJyYXkodCxzLG4pKSlzLnNwbGljZShuLDEpLG48PWwmJmwtLX0pLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZT8tMTxFLmluQXJyYXkoZSxzKTowPHMubGVuZ3RofSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBzJiYocz1bXSksdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBhPXU9W10scz10PSIiLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIXN9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gYT11PVtdLHR8fGl8fChzPXQ9IiIpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiEhYX0sZmlyZVdpdGg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXx8KHQ9W2UsKHQ9dHx8W10pLnNsaWNlP3Quc2xpY2UoKTp0XSx1LnB1c2godCksaXx8YygpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGYuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFvfX07cmV0dXJuIGZ9LEUuZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihlKXt2YXIgbz1bWyJub3RpZnkiLCJwcm9ncmVzcyIsRS5DYWxsYmFja3MoIm1lbW9yeSIpLEUuQ2FsbGJhY2tzKCJtZW1vcnkiKSwyXSxbInJlc29sdmUiLCJkb25lIixFLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxFLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwwLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsRS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksRS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksMSwicmVqZWN0ZWQiXV0saT0icGVuZGluZyIsYT17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIHMuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSwiY2F0Y2giOmZ1bmN0aW9uKGUpe3JldHVybiBhLnRoZW4obnVsbCxlKX0scGlwZTpmdW5jdGlvbigpe3ZhciBpPWFyZ3VtZW50cztyZXR1cm4gRS5EZWZlcnJlZChmdW5jdGlvbihyKXtFLmVhY2gobyxmdW5jdGlvbihlLHQpe3ZhciBuPWIoaVt0WzRdXSkmJmlbdFs0XV07c1t0WzFdXShmdW5jdGlvbigpe3ZhciBlPW4mJm4uYXBwbHkodGhpcyxhcmd1bWVudHMpO2UmJmIoZS5wcm9taXNlKT9lLnByb21pc2UoKS5wcm9ncmVzcyhyLm5vdGlmeSkuZG9uZShyLnJlc29sdmUpLmZhaWwoci5yZWplY3QpOnJbdFswXSsiV2l0aCJdKHRoaXMsbj9bZV06YXJndW1lbnRzKX0pfSksaT1udWxsfSkucHJvbWlzZSgpfSx0aGVuOmZ1bmN0aW9uKHQsbixyKXt2YXIgdT0wO2Z1bmN0aW9uIGwoaSxvLGEscyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcyxyPWFyZ3VtZW50cyxlPWZ1bmN0aW9uKCl7dmFyIGUsdDtpZighKGk8dSkpe2lmKChlPWEuYXBwbHkobixyKSk9PT1vLnByb21pc2UoKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb24iKTt0PWUmJigib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSYmZS50aGVuLGIodCk/cz90LmNhbGwoZSxsKHUsbyxJLHMpLGwodSxvLFIscykpOih1KyssdC5jYWxsKGUsbCh1LG8sSSxzKSxsKHUsbyxSLHMpLGwodSxvLEksby5ub3RpZnlXaXRoKSkpOihhIT09SSYmKG49dm9pZCAwLHI9W2VdKSwoc3x8by5yZXNvbHZlV2l0aCkobixyKSl9fSx0PXM/ZTpmdW5jdGlvbigpe3RyeXtlKCl9Y2F0Y2goZSl7RS5EZWZlcnJlZC5leGNlcHRpb25Ib29rJiZFLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2soZSx0LnN0YWNrVHJhY2UpLHU8PWkrMSYmKGEhPT1SJiYobj12b2lkIDAscj1bZV0pLG8ucmVqZWN0V2l0aChuLHIpKX19O2k/dCgpOihFLkRlZmVycmVkLmdldFN0YWNrSG9vayYmKHQuc3RhY2tUcmFjZT1FLkRlZmVycmVkLmdldFN0YWNrSG9vaygpKSxnLnNldFRpbWVvdXQodCkpfX1yZXR1cm4gRS5EZWZlcnJlZChmdW5jdGlvbihlKXtvWzBdWzNdLmFkZChsKDAsZSxiKHIpP3I6SSxlLm5vdGlmeVdpdGgpKSxvWzFdWzNdLmFkZChsKDAsZSxiKHQpP3Q6SSkpLG9bMl1bM10uYWRkKGwoMCxlLGIobik/bjpSKSl9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWU/RS5leHRlbmQoZSxhKTphfX0scz17fTtyZXR1cm4gRS5lYWNoKG8sZnVuY3Rpb24oZSx0KXt2YXIgbj10WzJdLHI9dFs1XTthW3RbMV1dPW4uYWRkLHImJm4uYWRkKGZ1bmN0aW9uKCl7aT1yfSxvWzMtZV1bMl0uZGlzYWJsZSxvWzMtZV1bM10uZGlzYWJsZSxvWzBdWzJdLmxvY2ssb1swXVszXS5sb2NrKSxuLmFkZCh0WzNdLmZpcmUpLHNbdFswXV09ZnVuY3Rpb24oKXtyZXR1cm4gc1t0WzBdKyJXaXRoIl0odGhpcz09PXM/dm9pZCAwOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxzW3RbMF0rIldpdGgiXT1uLmZpcmVXaXRofSksYS5wcm9taXNlKHMpLGUmJmUuY2FsbChzLHMpLHN9LHdoZW46ZnVuY3Rpb24oZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aCx0PW4scj1BcnJheSh0KSxpPXMuY2FsbChhcmd1bWVudHMpLG89RS5EZWZlcnJlZCgpLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JbdF09dGhpcyxpW3RdPTE8YXJndW1lbnRzLmxlbmd0aD9zLmNhbGwoYXJndW1lbnRzKTplLC0tbnx8by5yZXNvbHZlV2l0aChyLGkpfX07aWYobjw9MSYmKEIoZSxvLmRvbmUoYSh0KSkucmVzb2x2ZSxvLnJlamVjdCwhbiksInBlbmRpbmciPT09by5zdGF0ZSgpfHxiKGlbdF0mJmlbdF0udGhlbikpKXJldHVybiBvLnRoZW4oKTt3aGlsZSh0LS0pQihpW3RdLGEodCksby5yZWplY3QpO3JldHVybiBvLnByb21pc2UoKX19KTt2YXIgTT0vXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztFLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2s9ZnVuY3Rpb24oZSx0KXtnLmNvbnNvbGUmJmcuY29uc29sZS53YXJuJiZlJiZNLnRlc3QoZS5uYW1lKSYmZy5jb25zb2xlLndhcm4oImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246ICIrZS5tZXNzYWdlLGUuc3RhY2ssdCl9LEUucmVhZHlFeGNlcHRpb249ZnVuY3Rpb24oZSl7Zy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgZX0pfTt2YXIgVz1FLkRlZmVycmVkKCk7ZnVuY3Rpb24gRigpe3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsRiksZy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixGKSxFLnJlYWR5KCl9RS5mbi5yZWFkeT1mdW5jdGlvbihlKXtyZXR1cm4gVy50aGVuKGUpWyJjYXRjaCJdKGZ1bmN0aW9uKGUpe0UucmVhZHlFeGNlcHRpb24oZSl9KSx0aGlzfSxFLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxyZWFkeTpmdW5jdGlvbihlKXsoITA9PT1lPy0tRS5yZWFkeVdhaXQ6RS5pc1JlYWR5KXx8KEUuaXNSZWFkeT0hMCkhPT1lJiYwPC0tRS5yZWFkeVdhaXR8fFcucmVzb2x2ZVdpdGgodyxbRV0pfX0pLEUucmVhZHkudGhlbj1XLnRoZW4sImNvbXBsZXRlIj09PXcucmVhZHlTdGF0ZXx8ImxvYWRpbmciIT09dy5yZWFkeVN0YXRlJiYhdy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGw/Zy5zZXRUaW1lb3V0KEUucmVhZHkpOih3LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEYpLGcuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsRikpO3ZhciAkPWZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZhciBzPTAsdT1lLmxlbmd0aCxsPW51bGw9PW47aWYoIm9iamVjdCI9PT1UKG4pKWZvcihzIGluIGk9ITAsbikkKGUsdCxzLG5bc10sITAsbyxhKTtlbHNlIGlmKHZvaWQgMCE9PXImJihpPSEwLGIocil8fChhPSEwKSxsJiYoYT8odC5jYWxsKGUsciksdD1udWxsKToobD10LHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBsLmNhbGwoRShlKSxuKX0pKSx0KSlmb3IoO3M8dTtzKyspdChlW3NdLG4sYT9yOnIuY2FsbChlW3NdLHMsdChlW3NdLG4pKSk7cmV0dXJuIGk/ZTpsP3QuY2FsbChlKTp1P3QoZVswXSxuKTpvfSx6PS9eLW1zLS8sXz0vLShbYS16XSkvZztmdW5jdGlvbiBVKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBWKGUpe3JldHVybiBlLnJlcGxhY2UoeiwibXMtIikucmVwbGFjZShfLFUpfXZhciBYPWZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZS5ub2RlVHlwZXx8OT09PWUubm9kZVR5cGV8fCErZS5ub2RlVHlwZX07ZnVuY3Rpb24gUSgpe3RoaXMuZXhwYW5kbz1FLmV4cGFuZG8rUS51aWQrK31RLnVpZD0xLFEucHJvdG90eXBlPXtjYWNoZTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHR8fCh0PXt9LFgoZSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT10Ok9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHRoaXMuZXhwYW5kbyx7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KSkpLHR9LHNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT10aGlzLmNhY2hlKGUpO2lmKCJzdHJpbmciPT10eXBlb2YgdClpW1YodCldPW47ZWxzZSBmb3IociBpbiB0KWlbVihyKV09dFtyXTtyZXR1cm4gaX0sZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5jYWNoZShlKTplW3RoaXMuZXhwYW5kb10mJmVbdGhpcy5leHBhbmRvXVtWKHQpXX0sYWNjZXNzOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dHx8dCYmInN0cmluZyI9PXR5cGVvZiB0JiZ2b2lkIDA9PT1uP3RoaXMuZ2V0KGUsdCk6KHRoaXMuc2V0KGUsdCxuKSx2b2lkIDAhPT1uP246dCl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9ZVt0aGlzLmV4cGFuZG9dO2lmKHZvaWQgMCE9PXIpe2lmKHZvaWQgMCE9PXQpe249KHQ9QXJyYXkuaXNBcnJheSh0KT90Lm1hcChWKToodD1WKHQpKWluIHI/W3RdOnQubWF0Y2goSCl8fFtdKS5sZW5ndGg7d2hpbGUobi0tKWRlbGV0ZSByW3Rbbl1dfSh2b2lkIDA9PT10fHxFLmlzRW1wdHlPYmplY3QocikpJiYoZS5ub2RlVHlwZT9lW3RoaXMuZXhwYW5kb109dm9pZCAwOmRlbGV0ZSBlW3RoaXMuZXhwYW5kb10pfX0saGFzRGF0YTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHZvaWQgMCE9PXQmJiFFLmlzRW1wdHlPYmplY3QodCl9fTt2YXIgWT1uZXcgUSxHPW5ldyBRLEs9L14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLyxKPS9bQS1aXS9nO2Z1bmN0aW9uIFooZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09biYmMT09PWUubm9kZVR5cGUpaWYocj0iZGF0YS0iK3QucmVwbGFjZShKLCItJCYiKS50b0xvd2VyQ2FzZSgpLCJzdHJpbmciPT10eXBlb2Yobj1lLmdldEF0dHJpYnV0ZShyKSkpe3RyeXtuPSJ0cnVlIj09PShpPW4pfHwiZmFsc2UiIT09aSYmKCJudWxsIj09PWk/bnVsbDppPT09K2krIiI/K2k6Sy50ZXN0KGkpP0pTT04ucGFyc2UoaSk6aSl9Y2F0Y2goZSl7fUcuc2V0KGUsdCxuKX1lbHNlIG49dm9pZCAwO3JldHVybiBufUUuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBHLmhhc0RhdGEoZSl8fFkuaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEcuYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0cucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gWS5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe1kucmVtb3ZlKGUsdCl9fSksRS5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24obixlKXt2YXIgdCxyLGksbz10aGlzWzBdLGE9byYmby5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PW4pe2lmKHRoaXMubGVuZ3RoJiYoaT1HLmdldChvKSwxPT09by5ub2RlVHlwZSYmIVkuZ2V0KG8sImhhc0RhdGFBdHRycyIpKSl7dD1hLmxlbmd0aDt3aGlsZSh0LS0pYVt0XSYmMD09PShyPWFbdF0ubmFtZSkuaW5kZXhPZigiZGF0YS0iKSYmKHI9VihyLnNsaWNlKDUpKSxaKG8scixpW3JdKSk7WS5zZXQobywiaGFzRGF0YUF0dHJzIiwhMCl9cmV0dXJuIGl9cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBuP3RoaXMuZWFjaChmdW5jdGlvbigpe0cuc2V0KHRoaXMsbil9KTokKHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ7aWYobyYmdm9pZCAwPT09ZSlyZXR1cm4gdm9pZCAwIT09KHQ9Ry5nZXQobyxuKSk/dDp2b2lkIDAhPT0odD1aKG8sbikpP3Q6dm9pZCAwO3RoaXMuZWFjaChmdW5jdGlvbigpe0cuc2V0KHRoaXMsbixlKX0pfSxudWxsLGUsMTxhcmd1bWVudHMubGVuZ3RoLG51bGwsITApfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtHLnJlbW92ZSh0aGlzLGUpfSl9fSksRS5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZihlKXJldHVybiB0PSh0fHwiZngiKSsicXVldWUiLHI9WS5nZXQoZSx0KSxuJiYoIXJ8fEFycmF5LmlzQXJyYXkobik/cj1ZLmFjY2VzcyhlLHQsRS5tYWtlQXJyYXkobikpOnIucHVzaChuKSkscnx8W119LGRlcXVldWU6ZnVuY3Rpb24oZSx0KXt0PXR8fCJmeCI7dmFyIG49RS5xdWV1ZShlLHQpLHI9bi5sZW5ndGgsaT1uLnNoaWZ0KCksbz1FLl9xdWV1ZUhvb2tzKGUsdCk7ImlucHJvZ3Jlc3MiPT09aSYmKGk9bi5zaGlmdCgpLHItLSksaSYmKCJmeCI9PT10JiZuLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgby5zdG9wLGkuY2FsbChlLGZ1bmN0aW9uKCl7RS5kZXF1ZXVlKGUsdCl9LG8pKSwhciYmbyYmby5lbXB0eS5maXJlKCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dCsicXVldWVIb29rcyI7cmV0dXJuIFkuZ2V0KGUsbil8fFkuYWNjZXNzKGUsbix7ZW1wdHk6RS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7WS5yZW1vdmUoZSxbdCsicXVldWUiLG5dKX0pfSl9fSksRS5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKHQsbil7dmFyIGU9MjtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJihuPXQsdD0iZngiLGUtLSksYXJndW1lbnRzLmxlbmd0aDxlP0UucXVldWUodGhpc1swXSx0KTp2b2lkIDA9PT1uP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9RS5xdWV1ZSh0aGlzLHQsbik7RS5fcXVldWVIb29rcyh0aGlzLHQpLCJmeCI9PT10JiYiaW5wcm9ncmVzcyIhPT1lWzBdJiZFLmRlcXVldWUodGhpcyx0KX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtFLmRlcXVldWUodGhpcyxlKX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0xLGk9RS5EZWZlcnJlZCgpLG89dGhpcyxhPXRoaXMubGVuZ3RoLHM9ZnVuY3Rpb24oKXstLXJ8fGkucmVzb2x2ZVdpdGgobyxbb10pfTsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT12b2lkIDApLGU9ZXx8ImZ4Ijt3aGlsZShhLS0pKG49WS5nZXQob1thXSxlKyJxdWV1ZUhvb2tzIikpJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKHMpKTtyZXR1cm4gcygpLGkucHJvbWlzZSh0KX19KTt2YXIgZWU9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsdGU9bmV3IFJlZ0V4cCgiXig/OihbKy1dKT18KSgiK2VlKyIpKFthLXolXSopJCIsImkiKSxuZT1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLHJlPXcuZG9jdW1lbnRFbGVtZW50LGllPWZ1bmN0aW9uKGUpe3JldHVybiBFLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKX0sb2U9e2NvbXBvc2VkOiEwfTtyZS5nZXRSb290Tm9kZSYmKGllPWZ1bmN0aW9uKGUpe3JldHVybiBFLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKXx8ZS5nZXRSb290Tm9kZShvZSk9PT1lLm93bmVyRG9jdW1lbnR9KTt2YXIgYWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ibm9uZSI9PT0oZT10fHxlKS5zdHlsZS5kaXNwbGF5fHwiIj09PWUuc3R5bGUuZGlzcGxheSYmaWUoZSkmJiJub25lIj09PUUuY3NzKGUsImRpc3BsYXkiKX07dmFyIHNlPXt9O2Z1bmN0aW9uIHVlKGUsdCl7Zm9yKHZhciBuLHIsaSxvLGEscyx1LGw9W10sYz0wLGY9ZS5sZW5ndGg7YzxmO2MrKykocj1lW2NdKS5zdHlsZSYmKG49ci5zdHlsZS5kaXNwbGF5LHQ/KCJub25lIj09PW4mJihsW2NdPVkuZ2V0KHIsImRpc3BsYXkiKXx8bnVsbCxsW2NdfHwoci5zdHlsZS5kaXNwbGF5PSIiKSksIiI9PT1yLnN0eWxlLmRpc3BsYXkmJmFlKHIpJiYobFtjXT0odT1hPW89dm9pZCAwLGE9KGk9cikub3duZXJEb2N1bWVudCxzPWkubm9kZU5hbWUsKHU9c2Vbc10pfHwobz1hLmJvZHkuYXBwZW5kQ2hpbGQoYS5jcmVhdGVFbGVtZW50KHMpKSx1PUUuY3NzKG8sImRpc3BsYXkiKSxvLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobyksIm5vbmUiPT09dSYmKHU9ImJsb2NrIiksc2Vbc109dSkpKSk6Im5vbmUiIT09biYmKGxbY109Im5vbmUiLFkuc2V0KHIsImRpc3BsYXkiLG4pKSk7Zm9yKGM9MDtjPGY7YysrKW51bGwhPWxbY10mJihlW2NdLnN0eWxlLmRpc3BsYXk9bFtjXSk7cmV0dXJuIGV9RS5mbi5leHRlbmQoe3Nob3c6ZnVuY3Rpb24oKXtyZXR1cm4gdWUodGhpcywhMCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdWUodGhpcyl9LHRvZ2dsZTpmdW5jdGlvbihlKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlP2U/dGhpcy5zaG93KCk6dGhpcy5oaWRlKCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7YWUodGhpcyk/RSh0aGlzKS5zaG93KCk6RSh0aGlzKS5oaWRlKCl9KX19KTt2YXIgbGUsY2UsZmU9L14oPzpjaGVja2JveHxyYWRpbykkL2ksZGU9LzwoW2Etel1bXlwvXDA+XHgyMFx0XHJcblxmXSopL2kscGU9L14kfF5tb2R1bGUkfFwvKD86amF2YXxlY21hKXNjcmlwdC9pO2xlPXcuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLmFwcGVuZENoaWxkKHcuY3JlYXRlRWxlbWVudCgiZGl2IikpLChjZT13LmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnNldEF0dHJpYnV0ZSgidHlwZSIsInJhZGlvIiksY2Uuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLGNlLnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKSxsZS5hcHBlbmRDaGlsZChjZSksbS5jaGVja0Nsb25lPWxlLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCxsZS5pbm5lckhUTUw9Ijx0ZXh0YXJlYT54PC90ZXh0YXJlYT4iLG0ubm9DbG9uZUNoZWNrZWQ9ISFsZS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWUsbGUuaW5uZXJIVE1MPSI8b3B0aW9uPjwvb3B0aW9uPiIsbS5vcHRpb249ISFsZS5sYXN0Q2hpbGQ7dmFyIGhlPXt0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0sdGQ6WzMsIjx0YWJsZT48dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9keT48L3RhYmxlPiJdLF9kZWZhdWx0OlswLCIiLCIiXX07ZnVuY3Rpb24gZ2UoZSx0KXt2YXIgbjtyZXR1cm4gbj0idW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWU/ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0fHwiKiIpOiJ1bmRlZmluZWQiIT10eXBlb2YgZS5xdWVyeVNlbGVjdG9yQWxsP2UucXVlcnlTZWxlY3RvckFsbCh0fHwiKiIpOltdLHZvaWQgMD09PXR8fHQmJlMoZSx0KT9FLm1lcmdlKFtlXSxuKTpufWZ1bmN0aW9uIHZlKGUsdCl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKVkuc2V0KGVbbl0sImdsb2JhbEV2YWwiLCF0fHxZLmdldCh0W25dLCJnbG9iYWxFdmFsIikpfWhlLnRib2R5PWhlLnRmb290PWhlLmNvbGdyb3VwPWhlLmNhcHRpb249aGUudGhlYWQsaGUudGg9aGUudGQsbS5vcHRpb258fChoZS5vcHRncm91cD1oZS5vcHRpb249WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSk7dmFyIHllPS88fCYjP1x3KzsvO2Z1bmN0aW9uIG1lKGUsdCxuLHIsaSl7Zm9yKHZhciBvLGEscyx1LGwsYyxmPXQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGQ9W10scD0wLGg9ZS5sZW5ndGg7cDxoO3ArKylpZigobz1lW3BdKXx8MD09PW8paWYoIm9iamVjdCI9PT1UKG8pKUUubWVyZ2UoZCxvLm5vZGVUeXBlP1tvXTpvKTtlbHNlIGlmKHllLnRlc3Qobykpe2E9YXx8Zi5hcHBlbmRDaGlsZCh0LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxzPShkZS5leGVjKG8pfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLHU9aGVbc118fGhlLl9kZWZhdWx0LGEuaW5uZXJIVE1MPXVbMV0rRS5odG1sUHJlZmlsdGVyKG8pK3VbMl0sYz11WzBdO3doaWxlKGMtLSlhPWEubGFzdENoaWxkO0UubWVyZ2UoZCxhLmNoaWxkTm9kZXMpLChhPWYuZmlyc3RDaGlsZCkudGV4dENvbnRlbnQ9IiJ9ZWxzZSBkLnB1c2godC5jcmVhdGVUZXh0Tm9kZShvKSk7Zi50ZXh0Q29udGVudD0iIixwPTA7d2hpbGUobz1kW3ArK10paWYociYmLTE8RS5pbkFycmF5KG8scikpaSYmaS5wdXNoKG8pO2Vsc2UgaWYobD1pZShvKSxhPWdlKGYuYXBwZW5kQ2hpbGQobyksInNjcmlwdCIpLGwmJnZlKGEpLG4pe2M9MDt3aGlsZShvPWFbYysrXSlwZS50ZXN0KG8udHlwZXx8IiIpJiZuLnB1c2gobyl9cmV0dXJuIGZ9dmFyIGJlPS9ea2V5Lyx4ZT0vXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sd2U9L14oW14uXSopKD86XC4oLispfCkvO2Z1bmN0aW9uIENlKCl7cmV0dXJuITB9ZnVuY3Rpb24gVGUoKXtyZXR1cm4hMX1mdW5jdGlvbiBFZShlLHQpe3JldHVybiBlPT09ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHcuYWN0aXZlRWxlbWVudH1jYXRjaChlKXt9fSgpPT0oImZvY3VzIj09PXQpfWZ1bmN0aW9uIEFlKGUsdCxuLHIsaSxvKXt2YXIgYSxzO2lmKCJvYmplY3QiPT10eXBlb2YgdCl7Zm9yKHMgaW4ic3RyaW5nIiE9dHlwZW9mIG4mJihyPXJ8fG4sbj12b2lkIDApLHQpQWUoZSxzLG4scix0W3NdLG8pO3JldHVybiBlfWlmKG51bGw9PXImJm51bGw9PWk/KGk9bixyPW49dm9pZCAwKTpudWxsPT1pJiYoInN0cmluZyI9PXR5cGVvZiBuPyhpPXIscj12b2lkIDApOihpPXIscj1uLG49dm9pZCAwKSksITE9PT1pKWk9VGU7ZWxzZSBpZighaSlyZXR1cm4gZTtyZXR1cm4gMT09PW8mJihhPWksKGk9ZnVuY3Rpb24oZSl7cmV0dXJuIEUoKS5vZmYoZSksYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KS5ndWlkPWEuZ3VpZHx8KGEuZ3VpZD1FLmd1aWQrKykpLGUuZWFjaChmdW5jdGlvbigpe0UuZXZlbnQuYWRkKHRoaXMsdCxpLHIsbil9KX1mdW5jdGlvbiBOZShlLGksbyl7bz8oWS5zZXQoZSxpLCExKSxFLmV2ZW50LmFkZChlLGkse25hbWVzcGFjZTohMSxoYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1ZLmdldCh0aGlzLGkpO2lmKDEmZS5pc1RyaWdnZXImJnRoaXNbaV0pe2lmKHIubGVuZ3RoKShFLmV2ZW50LnNwZWNpYWxbaV18fHt9KS5kZWxlZ2F0ZVR5cGUmJmUuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZihyPXMuY2FsbChhcmd1bWVudHMpLFkuc2V0KHRoaXMsaSxyKSx0PW8odGhpcyxpKSx0aGlzW2ldKCksciE9PShuPVkuZ2V0KHRoaXMsaSkpfHx0P1kuc2V0KHRoaXMsaSwhMSk6bj17fSxyIT09bilyZXR1cm4gZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCksbi52YWx1ZX1lbHNlIHIubGVuZ3RoJiYoWS5zZXQodGhpcyxpLHt2YWx1ZTpFLmV2ZW50LnRyaWdnZXIoRS5leHRlbmQoclswXSxFLkV2ZW50LnByb3RvdHlwZSksci5zbGljZSgxKSx0aGlzKX0pLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfX0pKTp2b2lkIDA9PT1ZLmdldChlLGkpJiZFLmV2ZW50LmFkZChlLGksQ2UpfUUuZXZlbnQ9e2dsb2JhbDp7fSxhZGQ6ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixkLHAsaCxnLHY9WS5nZXQodCk7aWYoWCh0KSl7bi5oYW5kbGVyJiYobj0obz1uKS5oYW5kbGVyLGk9by5zZWxlY3RvciksaSYmRS5maW5kLm1hdGNoZXNTZWxlY3RvcihyZSxpKSxuLmd1aWR8fChuLmd1aWQ9RS5ndWlkKyspLCh1PXYuZXZlbnRzKXx8KHU9di5ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSksKGE9di5oYW5kbGUpfHwoYT12LmhhbmRsZT1mdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEUmJkUuZXZlbnQudHJpZ2dlcmVkIT09ZS50eXBlP0UuZXZlbnQuZGlzcGF0Y2guYXBwbHkodCxhcmd1bWVudHMpOnZvaWQgMH0pLGw9KGU9KGV8fCIiKS5tYXRjaChIKXx8WyIiXSkubGVuZ3RoO3doaWxlKGwtLSlwPWc9KHM9d2UuZXhlYyhlW2xdKXx8W10pWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxwJiYoZj1FLmV2ZW50LnNwZWNpYWxbcF18fHt9LHA9KGk/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fHAsZj1FLmV2ZW50LnNwZWNpYWxbcF18fHt9LGM9RS5leHRlbmQoe3R5cGU6cCxvcmlnVHlwZTpnLGRhdGE6cixoYW5kbGVyOm4sZ3VpZDpuLmd1aWQsc2VsZWN0b3I6aSxuZWVkc0NvbnRleHQ6aSYmRS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KGkpLG5hbWVzcGFjZTpoLmpvaW4oIi4iKX0sbyksKGQ9dVtwXSl8fCgoZD11W3BdPVtdKS5kZWxlZ2F0ZUNvdW50PTAsZi5zZXR1cCYmITEhPT1mLnNldHVwLmNhbGwodCxyLGgsYSl8fHQuYWRkRXZlbnRMaXN0ZW5lciYmdC5hZGRFdmVudExpc3RlbmVyKHAsYSkpLGYuYWRkJiYoZi5hZGQuY2FsbCh0LGMpLGMuaGFuZGxlci5ndWlkfHwoYy5oYW5kbGVyLmd1aWQ9bi5ndWlkKSksaT9kLnNwbGljZShkLmRlbGVnYXRlQ291bnQrKywwLGMpOmQucHVzaChjKSxFLmV2ZW50Lmdsb2JhbFtwXT0hMCl9fSxyZW1vdmU6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixkLHAsaCxnLHY9WS5oYXNEYXRhKGUpJiZZLmdldChlKTtpZih2JiYodT12LmV2ZW50cykpe2w9KHQ9KHR8fCIiKS5tYXRjaChIKXx8WyIiXSkubGVuZ3RoO3doaWxlKGwtLSlpZihwPWc9KHM9d2UuZXhlYyh0W2xdKXx8W10pWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxwKXtmPUUuZXZlbnQuc3BlY2lhbFtwXXx8e30sZD11W3A9KHI/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fHBdfHxbXSxzPXNbMl0mJm5ldyBSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiksYT1vPWQubGVuZ3RoO3doaWxlKG8tLSljPWRbb10sIWkmJmchPT1jLm9yaWdUeXBlfHxuJiZuLmd1aWQhPT1jLmd1aWR8fHMmJiFzLnRlc3QoYy5uYW1lc3BhY2UpfHxyJiZyIT09Yy5zZWxlY3RvciYmKCIqKiIhPT1yfHwhYy5zZWxlY3Rvcil8fChkLnNwbGljZShvLDEpLGMuc2VsZWN0b3ImJmQuZGVsZWdhdGVDb3VudC0tLGYucmVtb3ZlJiZmLnJlbW92ZS5jYWxsKGUsYykpO2EmJiFkLmxlbmd0aCYmKGYudGVhcmRvd24mJiExIT09Zi50ZWFyZG93bi5jYWxsKGUsaCx2LmhhbmRsZSl8fEUucmVtb3ZlRXZlbnQoZSxwLHYuaGFuZGxlKSxkZWxldGUgdVtwXSl9ZWxzZSBmb3IocCBpbiB1KUUuZXZlbnQucmVtb3ZlKGUscCt0W2xdLG4sciwhMCk7RS5pc0VtcHR5T2JqZWN0KHUpJiZZLnJlbW92ZShlLCJoYW5kbGUgZXZlbnRzIil9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksdT1FLmV2ZW50LmZpeChlKSxsPShZLmdldCh0aGlzLCJldmVudHMiKXx8T2JqZWN0LmNyZWF0ZShudWxsKSlbdS50eXBlXXx8W10sYz1FLmV2ZW50LnNwZWNpYWxbdS50eXBlXXx8e307Zm9yKHNbMF09dSx0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKylzW3RdPWFyZ3VtZW50c1t0XTtpZih1LmRlbGVnYXRlVGFyZ2V0PXRoaXMsIWMucHJlRGlzcGF0Y2h8fCExIT09Yy5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsdSkpe2E9RS5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsdSxsKSx0PTA7d2hpbGUoKGk9YVt0KytdKSYmIXUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7dS5jdXJyZW50VGFyZ2V0PWkuZWxlbSxuPTA7d2hpbGUoKG89aS5oYW5kbGVyc1tuKytdKSYmIXUuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSl1LnJuYW1lc3BhY2UmJiExIT09by5uYW1lc3BhY2UmJiF1LnJuYW1lc3BhY2UudGVzdChvLm5hbWVzcGFjZSl8fCh1LmhhbmRsZU9iaj1vLHUuZGF0YT1vLmRhdGEsdm9pZCAwIT09KHI9KChFLmV2ZW50LnNwZWNpYWxbby5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fG8uaGFuZGxlcikuYXBwbHkoaS5lbGVtLHMpKSYmITE9PT0odS5yZXN1bHQ9cikmJih1LnByZXZlbnREZWZhdWx0KCksdS5zdG9wUHJvcGFnYXRpb24oKSkpfXJldHVybiBjLnBvc3REaXNwYXRjaCYmYy5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLHUpLHUucmVzdWx0fX0saGFuZGxlcnM6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhLHM9W10sdT10LmRlbGVnYXRlQ291bnQsbD1lLnRhcmdldDtpZih1JiZsLm5vZGVUeXBlJiYhKCJjbGljayI9PT1lLnR5cGUmJjE8PWUuYnV0dG9uKSlmb3IoO2whPT10aGlzO2w9bC5wYXJlbnROb2RlfHx0aGlzKWlmKDE9PT1sLm5vZGVUeXBlJiYoImNsaWNrIiE9PWUudHlwZXx8ITAhPT1sLmRpc2FibGVkKSl7Zm9yKG89W10sYT17fSxuPTA7bjx1O24rKyl2b2lkIDA9PT1hW2k9KHI9dFtuXSkuc2VsZWN0b3IrIiAiXSYmKGFbaV09ci5uZWVkc0NvbnRleHQ/LTE8RShpLHRoaXMpLmluZGV4KGwpOkUuZmluZChpLHRoaXMsbnVsbCxbbF0pLmxlbmd0aCksYVtpXSYmby5wdXNoKHIpO28ubGVuZ3RoJiZzLnB1c2goe2VsZW06bCxoYW5kbGVyczpvfSl9cmV0dXJuIGw9dGhpcyx1PHQubGVuZ3RoJiZzLnB1c2goe2VsZW06bCxoYW5kbGVyczp0LnNsaWNlKHUpfSksc30sYWRkUHJvcDpmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShFLkV2ZW50LnByb3RvdHlwZSx0LHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6YihlKT9mdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gZSh0aGlzLm9yaWdpbmFsRXZlbnQpfTpmdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50W3RdfSxzZXQ6ZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZX0pfX0pfSxmaXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbRS5leHBhbmRvXT9lOm5ldyBFLkV2ZW50KGUpfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sY2xpY2s6e3NldHVwOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXN8fGU7cmV0dXJuIGZlLnRlc3QodC50eXBlKSYmdC5jbGljayYmUyh0LCJpbnB1dCIpJiZOZSh0LCJjbGljayIsQ2UpLCExfSx0cmlnZ2VyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXN8fGU7cmV0dXJuIGZlLnRlc3QodC50eXBlKSYmdC5jbGljayYmUyh0LCJpbnB1dCIpJiZOZSh0LCJjbGljayIpLCEwfSxfZGVmYXVsdDpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDtyZXR1cm4gZmUudGVzdCh0LnR5cGUpJiZ0LmNsaWNrJiZTKHQsImlucHV0IikmJlkuZ2V0KHQsImNsaWNrIil8fFModCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7dm9pZCAwIT09ZS5yZXN1bHQmJmUub3JpZ2luYWxFdmVudCYmKGUub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1lLnJlc3VsdCl9fX19LEUucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbil9LEUuRXZlbnQ9ZnVuY3Rpb24oZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBFLkV2ZW50KSlyZXR1cm4gbmV3IEUuRXZlbnQoZSx0KTtlJiZlLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkfHx2b2lkIDA9PT1lLmRlZmF1bHRQcmV2ZW50ZWQmJiExPT09ZS5yZXR1cm5WYWx1ZT9DZTpUZSx0aGlzLnRhcmdldD1lLnRhcmdldCYmMz09PWUudGFyZ2V0Lm5vZGVUeXBlP2UudGFyZ2V0LnBhcmVudE5vZGU6ZS50YXJnZXQsdGhpcy5jdXJyZW50VGFyZ2V0PWUuY3VycmVudFRhcmdldCx0aGlzLnJlbGF0ZWRUYXJnZXQ9ZS5yZWxhdGVkVGFyZ2V0KTp0aGlzLnR5cGU9ZSx0JiZFLmV4dGVuZCh0aGlzLHQpLHRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHxEYXRlLm5vdygpLHRoaXNbRS5leHBhbmRvXT0hMH0sRS5FdmVudC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkUuRXZlbnQsaXNEZWZhdWx0UHJldmVudGVkOlRlLGlzUHJvcGFnYXRpb25TdG9wcGVkOlRlLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOlRlLGlzU2ltdWxhdGVkOiExLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPUNlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPUNlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnN0b3BQcm9wYWdhdGlvbigpfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1DZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0sRS5lYWNoKHthbHRLZXk6ITAsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNoYW5nZWRUb3VjaGVzOiEwLGN0cmxLZXk6ITAsZGV0YWlsOiEwLGV2ZW50UGhhc2U6ITAsbWV0YUtleTohMCxwYWdlWDohMCxwYWdlWTohMCxzaGlmdEtleTohMCx2aWV3OiEwLCJjaGFyIjohMCxjb2RlOiEwLGNoYXJDb2RlOiEwLGtleTohMCxrZXlDb2RlOiEwLGJ1dHRvbjohMCxidXR0b25zOiEwLGNsaWVudFg6ITAsY2xpZW50WTohMCxvZmZzZXRYOiEwLG9mZnNldFk6ITAscG9pbnRlcklkOiEwLHBvaW50ZXJUeXBlOiEwLHNjcmVlblg6ITAsc2NyZWVuWTohMCx0YXJnZXRUb3VjaGVzOiEwLHRvRWxlbWVudDohMCx0b3VjaGVzOiEwLHdoaWNoOmZ1bmN0aW9uKGUpe3ZhciB0PWUuYnV0dG9uO3JldHVybiBudWxsPT1lLndoaWNoJiZiZS50ZXN0KGUudHlwZSk/bnVsbCE9ZS5jaGFyQ29kZT9lLmNoYXJDb2RlOmUua2V5Q29kZTohZS53aGljaCYmdm9pZCAwIT09dCYmeGUudGVzdChlLnR5cGUpPzEmdD8xOjImdD8zOjQmdD8yOjA6ZS53aGljaH19LEUuZXZlbnQuYWRkUHJvcCksRS5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihlLHQpe0UuZXZlbnQuc3BlY2lhbFtlXT17c2V0dXA6ZnVuY3Rpb24oKXtyZXR1cm4gTmUodGhpcyxlLEVlKSwhMX0sdHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiBOZSh0aGlzLGUpLCEwfSxkZWxlZ2F0ZVR5cGU6dH19KSxFLmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQiLHBvaW50ZXJlbnRlcjoicG9pbnRlcm92ZXIiLHBvaW50ZXJsZWF2ZToicG9pbnRlcm91dCJ9LGZ1bmN0aW9uKGUsaSl7RS5ldmVudC5zcGVjaWFsW2VdPXtkZWxlZ2F0ZVR5cGU6aSxiaW5kVHlwZTppLGhhbmRsZTpmdW5jdGlvbihlKXt2YXIgdCxuPWUucmVsYXRlZFRhcmdldCxyPWUuaGFuZGxlT2JqO3JldHVybiBuJiYobj09PXRoaXN8fEUuY29udGFpbnModGhpcyxuKSl8fChlLnR5cGU9ci5vcmlnVHlwZSx0PXIuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS50eXBlPWkpLHR9fX0pLEUuZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gQWUodGhpcyxlLHQsbixyKX0sb25lOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBBZSh0aGlzLGUsdCxuLHIsMSl9LG9mZjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZihlJiZlLnByZXZlbnREZWZhdWx0JiZlLmhhbmRsZU9iailyZXR1cm4gcj1lLmhhbmRsZU9iaixFKGUuZGVsZWdhdGVUYXJnZXQpLm9mZihyLm5hbWVzcGFjZT9yLm9yaWdUeXBlKyIuIityLm5hbWVzcGFjZTpyLm9yaWdUeXBlLHIuc2VsZWN0b3Isci5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgZSl7Zm9yKGkgaW4gZSl0aGlzLm9mZihpLHQsZVtpXSk7cmV0dXJuIHRoaXN9cmV0dXJuITEhPT10JiYiZnVuY3Rpb24iIT10eXBlb2YgdHx8KG49dCx0PXZvaWQgMCksITE9PT1uJiYobj1UZSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7RS5ldmVudC5yZW1vdmUodGhpcyxlLG4sdCl9KX19KTt2YXIgU2U9LzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksa2U9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksRGU9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nO2Z1bmN0aW9uIExlKGUsdCl7cmV0dXJuIFMoZSwidGFibGUiKSYmUygxMSE9PXQubm9kZVR5cGU/dDp0LmZpcnN0Q2hpbGQsInRyIikmJkUoZSkuY2hpbGRyZW4oInRib2R5IilbMF18fGV9ZnVuY3Rpb24gamUoZSl7cmV0dXJuIGUudHlwZT0obnVsbCE9PWUuZ2V0QXR0cmlidXRlKCJ0eXBlIikpKyIvIitlLnR5cGUsZX1mdW5jdGlvbiBxZShlKXtyZXR1cm4idHJ1ZS8iPT09KGUudHlwZXx8IiIpLnNsaWNlKDAsNSk/ZS50eXBlPWUudHlwZS5zbGljZSg1KTplLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpLGV9ZnVuY3Rpb24gT2UoZSx0KXt2YXIgbixyLGksbyxhLHM7aWYoMT09PXQubm9kZVR5cGUpe2lmKFkuaGFzRGF0YShlKSYmKHM9WS5nZXQoZSkuZXZlbnRzKSlmb3IoaSBpbiBZLnJlbW92ZSh0LCJoYW5kbGUgZXZlbnRzIikscylmb3Iobj0wLHI9c1tpXS5sZW5ndGg7bjxyO24rKylFLmV2ZW50LmFkZCh0LGksc1tpXVtuXSk7Ry5oYXNEYXRhKGUpJiYobz1HLmFjY2VzcyhlKSxhPUUuZXh0ZW5kKHt9LG8pLEcuc2V0KHQsYSkpfX1mdW5jdGlvbiBQZShuLHIsaSxvKXtyPXYocik7dmFyIGUsdCxhLHMsdSxsLGM9MCxmPW4ubGVuZ3RoLGQ9Zi0xLHA9clswXSxoPWIocCk7aWYoaHx8MTxmJiYic3RyaW5nIj09dHlwZW9mIHAmJiFtLmNoZWNrQ2xvbmUmJmtlLnRlc3QocCkpcmV0dXJuIG4uZWFjaChmdW5jdGlvbihlKXt2YXIgdD1uLmVxKGUpO2gmJihyWzBdPXAuY2FsbCh0aGlzLGUsdC5odG1sKCkpKSxQZSh0LHIsaSxvKX0pO2lmKGYmJih0PShlPW1lKHIsblswXS5vd25lckRvY3VtZW50LCExLG4sbykpLmZpcnN0Q2hpbGQsMT09PWUuY2hpbGROb2Rlcy5sZW5ndGgmJihlPXQpLHR8fG8pKXtmb3Iocz0oYT1FLm1hcChnZShlLCJzY3JpcHQiKSxqZSkpLmxlbmd0aDtjPGY7YysrKXU9ZSxjIT09ZCYmKHU9RS5jbG9uZSh1LCEwLCEwKSxzJiZFLm1lcmdlKGEsZ2UodSwic2NyaXB0IikpKSxpLmNhbGwobltjXSx1LGMpO2lmKHMpZm9yKGw9YVthLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LEUubWFwKGEscWUpLGM9MDtjPHM7YysrKXU9YVtjXSxwZS50ZXN0KHUudHlwZXx8IiIpJiYhWS5hY2Nlc3ModSwiZ2xvYmFsRXZhbCIpJiZFLmNvbnRhaW5zKGwsdSkmJih1LnNyYyYmIm1vZHVsZSIhPT0odS50eXBlfHwiIikudG9Mb3dlckNhc2UoKT9FLl9ldmFsVXJsJiYhdS5ub01vZHVsZSYmRS5fZXZhbFVybCh1LnNyYyx7bm9uY2U6dS5ub25jZXx8dS5nZXRBdHRyaWJ1dGUoIm5vbmNlIil9LGwpOkModS50ZXh0Q29udGVudC5yZXBsYWNlKERlLCIiKSx1LGwpKX1yZXR1cm4gbn1mdW5jdGlvbiBIZShlLHQsbil7Zm9yKHZhciByLGk9dD9FLmZpbHRlcih0LGUpOmUsbz0wO251bGwhPShyPWlbb10pO28rKylufHwxIT09ci5ub2RlVHlwZXx8RS5jbGVhbkRhdGEoZ2UocikpLHIucGFyZW50Tm9kZSYmKG4mJmllKHIpJiZ2ZShnZShyLCJzY3JpcHQiKSksci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIpKTtyZXR1cm4gZX1FLmV4dGVuZCh7aHRtbFByZWZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sY2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHMsdSxsLGM9ZS5jbG9uZU5vZGUoITApLGY9aWUoZSk7aWYoIShtLm5vQ2xvbmVDaGVja2VkfHwxIT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlfHxFLmlzWE1MRG9jKGUpKSlmb3IoYT1nZShjKSxyPTAsaT0obz1nZShlKSkubGVuZ3RoO3I8aTtyKyspcz1vW3JdLHU9YVtyXSx2b2lkIDAsImlucHV0Ij09PShsPXUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkmJmZlLnRlc3Qocy50eXBlKT91LmNoZWNrZWQ9cy5jaGVja2VkOiJpbnB1dCIhPT1sJiYidGV4dGFyZWEiIT09bHx8KHUuZGVmYXVsdFZhbHVlPXMuZGVmYXVsdFZhbHVlKTtpZih0KWlmKG4pZm9yKG89b3x8Z2UoZSksYT1hfHxnZShjKSxyPTAsaT1vLmxlbmd0aDtyPGk7cisrKU9lKG9bcl0sYVtyXSk7ZWxzZSBPZShlLGMpO3JldHVybiAwPChhPWdlKGMsInNjcmlwdCIpKS5sZW5ndGgmJnZlKGEsIWYmJmdlKGUsInNjcmlwdCIpKSxjfSxjbGVhbkRhdGE6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scixpPUUuZXZlbnQuc3BlY2lhbCxvPTA7dm9pZCAwIT09KG49ZVtvXSk7bysrKWlmKFgobikpe2lmKHQ9bltZLmV4cGFuZG9dKXtpZih0LmV2ZW50cylmb3IociBpbiB0LmV2ZW50cylpW3JdP0UuZXZlbnQucmVtb3ZlKG4scik6RS5yZW1vdmVFdmVudChuLHIsdC5oYW5kbGUpO25bWS5leHBhbmRvXT12b2lkIDB9bltHLmV4cGFuZG9dJiYobltHLmV4cGFuZG9dPXZvaWQgMCl9fX0pLEUuZm4uZXh0ZW5kKHtkZXRhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIEhlKHRoaXMsZSwhMCl9LHJlbW92ZTpmdW5jdGlvbihlKXtyZXR1cm4gSGUodGhpcyxlKX0sdGV4dDpmdW5jdGlvbihlKXtyZXR1cm4gJCh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lP0UudGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuZWFjaChmdW5jdGlvbigpezEhPT10aGlzLm5vZGVUeXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5vZGVUeXBlfHwodGhpcy50ZXh0Q29udGVudD1lKX0pfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiBQZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXsxIT09dGhpcy5ub2RlVHlwZSYmMTEhPT10aGlzLm5vZGVUeXBlJiY5IT09dGhpcy5ub2RlVHlwZXx8TGUodGhpcyxlKS5hcHBlbmRDaGlsZChlKX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIFBlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgdD1MZSh0aGlzLGUpO3QuaW5zZXJ0QmVmb3JlKGUsdC5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIFBlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIFBlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpfSl9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9MDtudWxsIT0oZT10aGlzW3RdKTt0KyspMT09PWUubm9kZVR5cGUmJihFLmNsZWFuRGF0YShnZShlLCExKSksZS50ZXh0Q29udGVudD0iIik7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9bnVsbCE9ZSYmZSx0PW51bGw9PXQ/ZTp0LHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIEUuY2xvbmUodGhpcyxlLHQpfSl9LGh0bWw6ZnVuY3Rpb24oZSl7cmV0dXJuICQodGhpcyxmdW5jdGlvbihlKXt2YXIgdD10aGlzWzBdfHx7fSxuPTAscj10aGlzLmxlbmd0aDtpZih2b2lkIDA9PT1lJiYxPT09dC5ub2RlVHlwZSlyZXR1cm4gdC5pbm5lckhUTUw7aWYoInN0cmluZyI9PXR5cGVvZiBlJiYhU2UudGVzdChlKSYmIWhlWyhkZS5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7ZT1FLmh0bWxQcmVmaWx0ZXIoZSk7dHJ5e2Zvcig7bjxyO24rKykxPT09KHQ9dGhpc1tuXXx8e30pLm5vZGVUeXBlJiYoRS5jbGVhbkRhdGEoZ2UodCwhMSkpLHQuaW5uZXJIVE1MPWUpO3Q9MH1jYXRjaChlKXt9fXQmJnRoaXMuZW1wdHkoKS5hcHBlbmQoZSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgbj1bXTtyZXR1cm4gUGUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO0UuaW5BcnJheSh0aGlzLG4pPDAmJihFLmNsZWFuRGF0YShnZSh0aGlzKSksdCYmdC5yZXBsYWNlQ2hpbGQoZSx0aGlzKSl9LG4pfX0pLEUuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGUsYSl7RS5mbltlXT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj1bXSxyPUUoZSksaT1yLmxlbmd0aC0xLG89MDtvPD1pO28rKyl0PW89PT1pP3RoaXM6dGhpcy5jbG9uZSghMCksRShyW29dKVthXSh0KSx1LmFwcGx5KG4sdC5nZXQoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4pfX0pO3ZhciBJZT1uZXcgUmVnRXhwKCJeKCIrZWUrIikoPyFweClbYS16JV0rJCIsImkiKSxSZT1mdW5jdGlvbihlKXt2YXIgdD1lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7cmV0dXJuIHQmJnQub3BlbmVyfHwodD1nKSx0LmdldENvbXB1dGVkU3R5bGUoZSl9LEJlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e307Zm9yKGkgaW4gdClvW2ldPWUuc3R5bGVbaV0sZS5zdHlsZVtpXT10W2ldO2ZvcihpIGluIHI9bi5jYWxsKGUpLHQpZS5zdHlsZVtpXT1vW2ldO3JldHVybiByfSxNZT1uZXcgUmVnRXhwKG5lLmpvaW4oInwiKSwiaSIpO2Z1bmN0aW9uIFdlKGUsdCxuKXt2YXIgcixpLG8sYSxzPWUuc3R5bGU7cmV0dXJuKG49bnx8UmUoZSkpJiYoIiIhPT0oYT1uLmdldFByb3BlcnR5VmFsdWUodCl8fG5bdF0pfHxpZShlKXx8KGE9RS5zdHlsZShlLHQpKSwhbS5waXhlbEJveFN0eWxlcygpJiZJZS50ZXN0KGEpJiZNZS50ZXN0KHQpJiYocj1zLndpZHRoLGk9cy5taW5XaWR0aCxvPXMubWF4V2lkdGgscy5taW5XaWR0aD1zLm1heFdpZHRoPXMud2lkdGg9YSxhPW4ud2lkdGgscy53aWR0aD1yLHMubWluV2lkdGg9aSxzLm1heFdpZHRoPW8pKSx2b2lkIDAhPT1hP2ErIiI6YX1mdW5jdGlvbiBGZShlLHQpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXtpZighZSgpKXJldHVybih0aGlzLmdldD10KS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIHRoaXMuZ2V0fX19IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2lmKGwpe3Uuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O21hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MCIsbC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7bWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo2MCU7dG9wOjElIixyZS5hcHBlbmRDaGlsZCh1KS5hcHBlbmRDaGlsZChsKTt2YXIgZT1nLmdldENvbXB1dGVkU3R5bGUobCk7bj0iMSUiIT09ZS50b3Ascz0xMj09PXQoZS5tYXJnaW5MZWZ0KSxsLnN0eWxlLnJpZ2h0PSI2MCUiLG89MzY9PT10KGUucmlnaHQpLHI9MzY9PT10KGUud2lkdGgpLGwuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixpPTEyPT09dChsLm9mZnNldFdpZHRoLzMpLHJlLnJlbW92ZUNoaWxkKHUpLGw9bnVsbH19ZnVuY3Rpb24gdChlKXtyZXR1cm4gTWF0aC5yb3VuZChwYXJzZUZsb2F0KGUpKX12YXIgbixyLGksbyxhLHMsdT13LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGw9dy5jcmVhdGVFbGVtZW50KCJkaXYiKTtsLnN0eWxlJiYobC5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iY29udGVudC1ib3giLGwuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iIixtLmNsZWFyQ2xvbmVTdHlsZT0iY29udGVudC1ib3giPT09bC5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCxFLmV4dGVuZChtLHtib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiBlKCkscn0scGl4ZWxCb3hTdHlsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLG99LHBpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLG59LHJlbGlhYmxlTWFyZ2luTGVmdDpmdW5jdGlvbigpe3JldHVybiBlKCksc30sc2Nyb2xsYm94U2l6ZTpmdW5jdGlvbigpe3JldHVybiBlKCksaX0scmVsaWFibGVUckRpbWVuc2lvbnM6ZnVuY3Rpb24oKXt2YXIgZSx0LG4scjtyZXR1cm4gbnVsbD09YSYmKGU9dy5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLHQ9dy5jcmVhdGVFbGVtZW50KCJ0ciIpLG49dy5jcmVhdGVFbGVtZW50KCJkaXYiKSxlLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHgiLHQuc3R5bGUuaGVpZ2h0PSIxcHgiLG4uc3R5bGUuaGVpZ2h0PSI5cHgiLHJlLmFwcGVuZENoaWxkKGUpLmFwcGVuZENoaWxkKHQpLmFwcGVuZENoaWxkKG4pLHI9Zy5nZXRDb21wdXRlZFN0eWxlKHQpLGE9MzxwYXJzZUludChyLmhlaWdodCkscmUucmVtb3ZlQ2hpbGQoZSkpLGF9fSkpfSgpO3ZhciAkZT1bIldlYmtpdCIsIk1veiIsIm1zIl0semU9dy5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZSxfZT17fTtmdW5jdGlvbiBVZShlKXt2YXIgdD1FLmNzc1Byb3BzW2VdfHxfZVtlXTtyZXR1cm4gdHx8KGUgaW4gemU/ZTpfZVtlXT1mdW5jdGlvbihlKXt2YXIgdD1lWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSxuPSRlLmxlbmd0aDt3aGlsZShuLS0paWYoKGU9JGVbbl0rdClpbiB6ZSlyZXR1cm4gZX0oZSl8fGUpfXZhciBWZSxYZSxRZT0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sWWU9L14tLS8sR2U9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LEtlPXtsZXR0ZXJTcGFjaW5nOiIwIixmb250V2VpZ2h0OiI0MDAifTtmdW5jdGlvbiBKZShlLHQsbil7dmFyIHI9dGUuZXhlYyh0KTtyZXR1cm4gcj9NYXRoLm1heCgwLHJbMl0tKG58fDApKSsoclszXXx8InB4Iik6dH1mdW5jdGlvbiBaZShlLHQsbixyLGksbyl7dmFyIGE9IndpZHRoIj09PXQ/MTowLHM9MCx1PTA7aWYobj09PShyPyJib3JkZXIiOiJjb250ZW50IikpcmV0dXJuIDA7Zm9yKDthPDQ7YSs9MikibWFyZ2luIj09PW4mJih1Kz1FLmNzcyhlLG4rbmVbYV0sITAsaSkpLHI/KCJjb250ZW50Ij09PW4mJih1LT1FLmNzcyhlLCJwYWRkaW5nIituZVthXSwhMCxpKSksIm1hcmdpbiIhPT1uJiYodS09RS5jc3MoZSwiYm9yZGVyIituZVthXSsiV2lkdGgiLCEwLGkpKSk6KHUrPUUuY3NzKGUsInBhZGRpbmciK25lW2FdLCEwLGkpLCJwYWRkaW5nIiE9PW4/dSs9RS5jc3MoZSwiYm9yZGVyIituZVthXSsiV2lkdGgiLCEwLGkpOnMrPUUuY3NzKGUsImJvcmRlciIrbmVbYV0rIldpZHRoIiwhMCxpKSk7cmV0dXJuIXImJjA8PW8mJih1Kz1NYXRoLm1heCgwLE1hdGguY2VpbChlWyJvZmZzZXQiK3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpXS1vLXUtcy0uNSkpfHwwKSx1fWZ1bmN0aW9uIGV0KGUsdCxuKXt2YXIgcj1SZShlKSxpPSghbS5ib3hTaXppbmdSZWxpYWJsZSgpfHxuKSYmImJvcmRlci1ib3giPT09RS5jc3MoZSwiYm94U2l6aW5nIiwhMSxyKSxvPWksYT1XZShlLHQscikscz0ib2Zmc2V0Iit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtpZihJZS50ZXN0KGEpKXtpZighbilyZXR1cm4gYTthPSJhdXRvIn1yZXR1cm4oIW0uYm94U2l6aW5nUmVsaWFibGUoKSYmaXx8IW0ucmVsaWFibGVUckRpbWVuc2lvbnMoKSYmUyhlLCJ0ciIpfHwiYXV0byI9PT1hfHwhcGFyc2VGbG9hdChhKSYmImlubGluZSI9PT1FLmNzcyhlLCJkaXNwbGF5IiwhMSxyKSkmJmUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgmJihpPSJib3JkZXItYm94Ij09PUUuY3NzKGUsImJveFNpemluZyIsITEsciksKG89cyBpbiBlKSYmKGE9ZVtzXSkpLChhPXBhcnNlRmxvYXQoYSl8fDApK1plKGUsdCxufHwoaT8iYm9yZGVyIjoiY29udGVudCIpLG8scixhKSsicHgifUUuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIG49V2UoZSwib3BhY2l0eSIpO3JldHVybiIiPT09bj8iMSI6bn19fX0sY3NzTnVtYmVyOnthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsZ3JpZEFyZWE6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TdGFydDohMCxncmlkUm93OiEwLGdyaWRSb3dFbmQ6ITAsZ3JpZFJvd1N0YXJ0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6e30sc3R5bGU6ZnVuY3Rpb24oZSx0LG4scil7aWYoZSYmMyE9PWUubm9kZVR5cGUmJjghPT1lLm5vZGVUeXBlJiZlLnN0eWxlKXt2YXIgaSxvLGEscz1WKHQpLHU9WWUudGVzdCh0KSxsPWUuc3R5bGU7aWYodXx8KHQ9VWUocykpLGE9RS5jc3NIb29rc1t0XXx8RS5jc3NIb29rc1tzXSx2b2lkIDA9PT1uKXJldHVybiBhJiYiZ2V0ImluIGEmJnZvaWQgMCE9PShpPWEuZ2V0KGUsITEscikpP2k6bFt0XTsic3RyaW5nIj09PShvPXR5cGVvZiBuKSYmKGk9dGUuZXhlYyhuKSkmJmlbMV0mJihuPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYT0yMCxzPXI/ZnVuY3Rpb24oKXtyZXR1cm4gci5jdXIoKX06ZnVuY3Rpb24oKXtyZXR1cm4gRS5jc3MoZSx0LCIiKX0sdT1zKCksbD1uJiZuWzNdfHwoRS5jc3NOdW1iZXJbdF0/IiI6InB4IiksYz1lLm5vZGVUeXBlJiYoRS5jc3NOdW1iZXJbdF18fCJweCIhPT1sJiYrdSkmJnRlLmV4ZWMoRS5jc3MoZSx0KSk7aWYoYyYmY1szXSE9PWwpe3UvPTIsbD1sfHxjWzNdLGM9K3V8fDE7d2hpbGUoYS0tKUUuc3R5bGUoZSx0LGMrbCksKDEtbykqKDEtKG89cygpL3V8fC41KSk8PTAmJihhPTApLGMvPW87Yyo9MixFLnN0eWxlKGUsdCxjK2wpLG49bnx8W119cmV0dXJuIG4mJihjPStjfHwrdXx8MCxpPW5bMV0/YysoblsxXSsxKSpuWzJdOituWzJdLHImJihyLnVuaXQ9bCxyLnN0YXJ0PWMsci5lbmQ9aSkpLGl9KGUsdCxpKSxvPSJudW1iZXIiKSxudWxsIT1uJiZuPT1uJiYoIm51bWJlciIhPT1vfHx1fHwobis9aSYmaVszXXx8KEUuY3NzTnVtYmVyW3NdPyIiOiJweCIpKSxtLmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1ufHwwIT09dC5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fChsW3RdPSJpbmhlcml0IiksYSYmInNldCJpbiBhJiZ2b2lkIDA9PT0obj1hLnNldChlLG4scikpfHwodT9sLnNldFByb3BlcnR5KHQsbik6bFt0XT1uKSl9fSxjc3M6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHM9Vih0KTtyZXR1cm4gWWUudGVzdCh0KXx8KHQ9VWUocykpLChhPUUuY3NzSG9va3NbdF18fEUuY3NzSG9va3Nbc10pJiYiZ2V0ImluIGEmJihpPWEuZ2V0KGUsITAsbikpLHZvaWQgMD09PWkmJihpPVdlKGUsdCxyKSksIm5vcm1hbCI9PT1pJiZ0IGluIEtlJiYoaT1LZVt0XSksIiI9PT1ufHxuPyhvPXBhcnNlRmxvYXQoaSksITA9PT1ufHxpc0Zpbml0ZShvKT9vfHwwOmkpOml9fSksRS5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihlLHUpe0UuY3NzSG9va3NbdV09e2dldDpmdW5jdGlvbihlLHQsbil7aWYodClyZXR1cm4hUWUudGVzdChFLmNzcyhlLCJkaXNwbGF5IikpfHxlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiZlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoP2V0KGUsdSxuKTpCZShlLEdlLGZ1bmN0aW9uKCl7cmV0dXJuIGV0KGUsdSxuKX0pfSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9UmUoZSksbz0hbS5zY3JvbGxib3hTaXplKCkmJiJhYnNvbHV0ZSI9PT1pLnBvc2l0aW9uLGE9KG98fG4pJiYiYm9yZGVyLWJveCI9PT1FLmNzcyhlLCJib3hTaXppbmciLCExLGkpLHM9bj9aZShlLHUsbixhLGkpOjA7cmV0dXJuIGEmJm8mJihzLT1NYXRoLmNlaWwoZVsib2Zmc2V0Iit1WzBdLnRvVXBwZXJDYXNlKCkrdS5zbGljZSgxKV0tcGFyc2VGbG9hdChpW3VdKS1aZShlLHUsImJvcmRlciIsITEsaSktLjUpKSxzJiYocj10ZS5leGVjKHQpKSYmInB4IiE9PShyWzNdfHwicHgiKSYmKGUuc3R5bGVbdV09dCx0PUUuY3NzKGUsdSkpLEplKDAsdCxzKX19fSksRS5jc3NIb29rcy5tYXJnaW5MZWZ0PUZlKG0ucmVsaWFibGVNYXJnaW5MZWZ0LGZ1bmN0aW9uKGUsdCl7aWYodClyZXR1cm4ocGFyc2VGbG9hdChXZShlLCJtYXJnaW5MZWZ0IikpfHxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtQmUoZSx7bWFyZ2luTGVmdDowfSxmdW5jdGlvbigpe3JldHVybiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9KSkrInB4In0pLEUuZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGksbyl7RS5jc3NIb29rc1tpK29dPXtleHBhbmQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj17fSxyPSJzdHJpbmciPT10eXBlb2YgZT9lLnNwbGl0KCIgIik6W2VdO3Q8NDt0KyspbltpK25lW3RdK29dPXJbdF18fHJbdC0yXXx8clswXTtyZXR1cm4gbn19LCJtYXJnaW4iIT09aSYmKEUuY3NzSG9va3NbaStvXS5zZXQ9SmUpfSksRS5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihlLHQpe3JldHVybiAkKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz17fSxhPTA7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHI9UmUoZSksaT10Lmxlbmd0aDthPGk7YSsrKW9bdFthXV09RS5jc3MoZSx0W2FdLCExLHIpO3JldHVybiBvfXJldHVybiB2b2lkIDAhPT1uP0Uuc3R5bGUoZSx0LG4pOkUuY3NzKGUsdCl9LGUsdCwxPGFyZ3VtZW50cy5sZW5ndGgpfX0pLEUuZm4uZGVsYXk9ZnVuY3Rpb24ocixlKXtyZXR1cm4gcj1FLmZ4JiZFLmZ4LnNwZWVkc1tyXXx8cixlPWV8fCJmeCIsdGhpcy5xdWV1ZShlLGZ1bmN0aW9uKGUsdCl7dmFyIG49Zy5zZXRUaW1lb3V0KGUscik7dC5zdG9wPWZ1bmN0aW9uKCl7Zy5jbGVhclRpbWVvdXQobil9fSl9LFZlPXcuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxYZT13LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLmFwcGVuZENoaWxkKHcuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLFZlLnR5cGU9ImNoZWNrYm94IixtLmNoZWNrT249IiIhPT1WZS52YWx1ZSxtLm9wdFNlbGVjdGVkPVhlLnNlbGVjdGVkLChWZT13LmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnZhbHVlPSJ0IixWZS50eXBlPSJyYWRpbyIsbS5yYWRpb1ZhbHVlPSJ0Ij09PVZlLnZhbHVlO3ZhciB0dCxudD1FLmV4cHIuYXR0ckhhbmRsZTtFLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiAkKHRoaXMsRS5hdHRyLGUsdCwxPGFyZ3VtZW50cy5sZW5ndGgpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtFLnJlbW92ZUF0dHIodGhpcyxlKX0pfX0pLEUuZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgZS5nZXRBdHRyaWJ1dGU/RS5wcm9wKGUsdCxuKTooMT09PW8mJkUuaXNYTUxEb2MoZSl8fChpPUUuYXR0ckhvb2tzW3QudG9Mb3dlckNhc2UoKV18fChFLmV4cHIubWF0Y2guYm9vbC50ZXN0KHQpP3R0OnZvaWQgMCkpLHZvaWQgMCE9PW4/bnVsbD09PW4/dm9pZCBFLnJlbW92ZUF0dHIoZSx0KTppJiYic2V0ImluIGkmJnZvaWQgMCE9PShyPWkuc2V0KGUsbix0KSk/cjooZS5zZXRBdHRyaWJ1dGUodCxuKyIiKSxuKTppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOm51bGw9PShyPUUuZmluZC5hdHRyKGUsdCkpP3ZvaWQgMDpyKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oZSx0KXtpZighbS5yYWRpb1ZhbHVlJiYicmFkaW8iPT09dCYmUyhlLCJpbnB1dCIpKXt2YXIgbj1lLnZhbHVlO3JldHVybiBlLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbiYmKGUudmFsdWU9biksdH19fX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXQmJnQubWF0Y2goSCk7aWYoaSYmMT09PWUubm9kZVR5cGUpd2hpbGUobj1pW3IrK10pZS5yZW1vdmVBdHRyaWJ1dGUobil9fSksdHQ9e3NldDpmdW5jdGlvbihlLHQsbil7cmV0dXJuITE9PT10P0UucmVtb3ZlQXR0cihlLG4pOmUuc2V0QXR0cmlidXRlKG4sbiksbn19LEUuZWFjaChFLmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1x3Ky9nKSxmdW5jdGlvbihlLHQpe3ZhciBhPW50W3RdfHxFLmZpbmQuYXR0cjtudFt0XT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXQudG9Mb3dlckNhc2UoKTtyZXR1cm4gbnx8KGk9bnRbb10sbnRbb109cixyPW51bGwhPWEoZSx0LG4pP286bnVsbCxudFtvXT1pKSxyfX0pO3ZhciBydD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLGl0PS9eKD86YXxhcmVhKSQvaTtmdW5jdGlvbiBvdChlKXtyZXR1cm4oZS5tYXRjaChIKXx8W10pLmpvaW4oIiAiKX1mdW5jdGlvbiBhdChlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIn1mdW5jdGlvbiBzdChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOiJzdHJpbmciPT10eXBlb2YgZSYmZS5tYXRjaChIKXx8W119RS5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJCh0aGlzLEUucHJvcCxlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbRS5wcm9wRml4W2VdfHxlXX0pfX0pLEUuZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiAxPT09byYmRS5pc1hNTERvYyhlKXx8KHQ9RS5wcm9wRml4W3RdfHx0LGk9RS5wcm9wSG9va3NbdF0pLHZvaWQgMCE9PW4/aSYmInNldCJpbiBpJiZ2b2lkIDAhPT0ocj1pLnNldChlLG4sdCkpP3I6ZVt0XT1uOmkmJiJnZXQiaW4gaSYmbnVsbCE9PShyPWkuZ2V0KGUsdCkpP3I6ZVt0XX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PUUuZmluZC5hdHRyKGUsInRhYmluZGV4Iik7cmV0dXJuIHQ/cGFyc2VJbnQodCwxMCk6cnQudGVzdChlLm5vZGVOYW1lKXx8aXQudGVzdChlLm5vZGVOYW1lKSYmZS5ocmVmPzA6LTF9fX0scHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9fSksbS5vcHRTZWxlY3RlZHx8KEUucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiZ0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LG51bGx9LHNldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7dCYmKHQuc2VsZWN0ZWRJbmRleCx0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KX19KSxFLmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe0UucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSxFLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhLHMsdT0wO2lmKGIodCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtFKHRoaXMpLmFkZENsYXNzKHQuY2FsbCh0aGlzLGUsYXQodGhpcykpKX0pO2lmKChlPXN0KHQpKS5sZW5ndGgpd2hpbGUobj10aGlzW3UrK10paWYoaT1hdChuKSxyPTE9PT1uLm5vZGVUeXBlJiYiICIrb3QoaSkrIiAiKXthPTA7d2hpbGUobz1lW2ErK10pci5pbmRleE9mKCIgIitvKyIgIik8MCYmKHIrPW8rIiAiKTtpIT09KHM9b3QocikpJiZuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHMpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxvLGEscyx1PTA7aWYoYih0KSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe0UodGhpcykucmVtb3ZlQ2xhc3ModC5jYWxsKHRoaXMsZSxhdCh0aGlzKSkpfSk7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuYXR0cigiY2xhc3MiLCIiKTtpZigoZT1zdCh0KSkubGVuZ3RoKXdoaWxlKG49dGhpc1t1KytdKWlmKGk9YXQobikscj0xPT09bi5ub2RlVHlwZSYmIiAiK290KGkpKyIgIil7YT0wO3doaWxlKG89ZVthKytdKXdoaWxlKC0xPHIuaW5kZXhPZigiICIrbysiICIpKXI9ci5yZXBsYWNlKCIgIitvKyIgIiwiICIpO2khPT0ocz1vdChyKSkmJm4uc2V0QXR0cmlidXRlKCJjbGFzcyIscyl9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGksdCl7dmFyIG89dHlwZW9mIGksYT0ic3RyaW5nIj09PW98fEFycmF5LmlzQXJyYXkoaSk7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdCYmYT90P3RoaXMuYWRkQ2xhc3MoaSk6dGhpcy5yZW1vdmVDbGFzcyhpKTpiKGkpP3RoaXMuZWFjaChmdW5jdGlvbihlKXtFKHRoaXMpLnRvZ2dsZUNsYXNzKGkuY2FsbCh0aGlzLGUsYXQodGhpcyksdCksdCl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZSx0LG4scjtpZihhKXt0PTAsbj1FKHRoaXMpLHI9c3QoaSk7d2hpbGUoZT1yW3QrK10pbi5oYXNDbGFzcyhlKT9uLnJlbW92ZUNsYXNzKGUpOm4uYWRkQ2xhc3MoZSl9ZWxzZSB2b2lkIDAhPT1pJiYiYm9vbGVhbiIhPT1vfHwoKGU9YXQodGhpcykpJiZZLnNldCh0aGlzLCJfX2NsYXNzTmFtZV9fIixlKSx0aGlzLnNldEF0dHJpYnV0ZSYmdGhpcy5zZXRBdHRyaWJ1dGUoImNsYXNzIixlfHwhMT09PWk/IiI6WS5nZXQodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIikpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj0wO3Q9IiAiK2UrIiAiO3doaWxlKG49dGhpc1tyKytdKWlmKDE9PT1uLm5vZGVUeXBlJiYtMTwoIiAiK290KGF0KG4pKSsiICIpLmluZGV4T2YodCkpcmV0dXJuITA7cmV0dXJuITF9fSk7dmFyIHV0PS9cci9nO0UuZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24obil7dmFyIHIsZSxpLHQ9dGhpc1swXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1iKG4pLHRoaXMuZWFjaChmdW5jdGlvbihlKXt2YXIgdDsxPT09dGhpcy5ub2RlVHlwZSYmKG51bGw9PSh0PWk/bi5jYWxsKHRoaXMsZSxFKHRoaXMpLnZhbCgpKTpuKT90PSIiOiJudW1iZXIiPT10eXBlb2YgdD90Kz0iIjpBcnJheS5pc0FycmF5KHQpJiYodD1FLm1hcCh0LGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSksKHI9RS52YWxIb29rc1t0aGlzLnR5cGVdfHxFLnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYic2V0ImluIHImJnZvaWQgMCE9PXIuc2V0KHRoaXMsdCwidmFsdWUiKXx8KHRoaXMudmFsdWU9dCkpfSkpOnQ/KHI9RS52YWxIb29rc1t0LnR5cGVdfHxFLnZhbEhvb2tzW3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYiZ2V0ImluIHImJnZvaWQgMCE9PShlPXIuZ2V0KHQsInZhbHVlIikpP2U6InN0cmluZyI9PXR5cGVvZihlPXQudmFsdWUpP2UucmVwbGFjZSh1dCwiIik6bnVsbD09ZT8iIjplOnZvaWQgMH19KSxFLmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PUUuZmluZC5hdHRyKGUsInZhbHVlIik7cmV0dXJuIG51bGwhPXQ/dDpvdChFLnRleHQoZSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9ZS5vcHRpb25zLG89ZS5zZWxlY3RlZEluZGV4LGE9InNlbGVjdC1vbmUiPT09ZS50eXBlLHM9YT9udWxsOltdLHU9YT9vKzE6aS5sZW5ndGg7Zm9yKHI9bzwwP3U6YT9vOjA7cjx1O3IrKylpZigoKG49aVtyXSkuc2VsZWN0ZWR8fHI9PT1vKSYmIW4uZGlzYWJsZWQmJighbi5wYXJlbnROb2RlLmRpc2FibGVkfHwhUyhuLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtpZih0PUUobikudmFsKCksYSlyZXR1cm4gdDtzLnB1c2godCl9cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT1lLm9wdGlvbnMsbz1FLm1ha2VBcnJheSh0KSxhPWkubGVuZ3RoO3doaWxlKGEtLSkoKHI9aVthXSkuc2VsZWN0ZWQ9LTE8RS5pbkFycmF5KEUudmFsSG9va3Mub3B0aW9uLmdldChyKSxvKSkmJihuPSEwKTtyZXR1cm4gbnx8KGUuc2VsZWN0ZWRJbmRleD0tMSksb319fX0pLEUuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe0UudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGUuY2hlY2tlZD0tMTxFLmluQXJyYXkoRShlKS52YWwoKSx0KX19LG0uY2hlY2tPbnx8KEUudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjplLnZhbHVlfSl9KSxtLmZvY3VzaW49Im9uZm9jdXNpbiJpbiBnO3ZhciBsdD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sY3Q9ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX07RS5leHRlbmQoRS5ldmVudCx7dHJpZ2dlcjpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGwsYyxmLGQ9W258fHddLHA9eS5jYWxsKGUsInR5cGUiKT9lLnR5cGU6ZSxoPXkuY2FsbChlLCJuYW1lc3BhY2UiKT9lLm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKG89Zj1hPW49bnx8dywzIT09bi5ub2RlVHlwZSYmOCE9PW4ubm9kZVR5cGUmJiFsdC50ZXN0KHArRS5ldmVudC50cmlnZ2VyZWQpJiYoLTE8cC5pbmRleE9mKCIuIikmJihwPShoPXAuc3BsaXQoIi4iKSkuc2hpZnQoKSxoLnNvcnQoKSksdT1wLmluZGV4T2YoIjoiKTwwJiYib24iK3AsKGU9ZVtFLmV4cGFuZG9dP2U6bmV3IEUuRXZlbnQocCwib2JqZWN0Ij09dHlwZW9mIGUmJmUpKS5pc1RyaWdnZXI9cj8yOjMsZS5uYW1lc3BhY2U9aC5qb2luKCIuIiksZS5ybmFtZXNwYWNlPWUubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxlLnJlc3VsdD12b2lkIDAsZS50YXJnZXR8fChlLnRhcmdldD1uKSx0PW51bGw9PXQ/W2VdOkUubWFrZUFycmF5KHQsW2VdKSxjPUUuZXZlbnQuc3BlY2lhbFtwXXx8e30scnx8IWMudHJpZ2dlcnx8ITEhPT1jLnRyaWdnZXIuYXBwbHkobix0KSkpe2lmKCFyJiYhYy5ub0J1YmJsZSYmIXgobikpe2ZvcihzPWMuZGVsZWdhdGVUeXBlfHxwLGx0LnRlc3QocytwKXx8KG89by5wYXJlbnROb2RlKTtvO289by5wYXJlbnROb2RlKWQucHVzaChvKSxhPW87YT09PShuLm93bmVyRG9jdW1lbnR8fHcpJiZkLnB1c2goYS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3d8fGcpfWk9MDt3aGlsZSgobz1kW2krK10pJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWY9byxlLnR5cGU9MTxpP3M6Yy5iaW5kVHlwZXx8cCwobD0oWS5nZXQobywiZXZlbnRzIil8fE9iamVjdC5jcmVhdGUobnVsbCkpW2UudHlwZV0mJlkuZ2V0KG8sImhhbmRsZSIpKSYmbC5hcHBseShvLHQpLChsPXUmJm9bdV0pJiZsLmFwcGx5JiZYKG8pJiYoZS5yZXN1bHQ9bC5hcHBseShvLHQpLCExPT09ZS5yZXN1bHQmJmUucHJldmVudERlZmF1bHQoKSk7cmV0dXJuIGUudHlwZT1wLHJ8fGUuaXNEZWZhdWx0UHJldmVudGVkKCl8fGMuX2RlZmF1bHQmJiExIT09Yy5fZGVmYXVsdC5hcHBseShkLnBvcCgpLHQpfHwhWChuKXx8dSYmYihuW3BdKSYmIXgobikmJigoYT1uW3VdKSYmKG5bdV09bnVsbCksRS5ldmVudC50cmlnZ2VyZWQ9cCxlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmYuYWRkRXZlbnRMaXN0ZW5lcihwLGN0KSxuW3BdKCksZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZmLnJlbW92ZUV2ZW50TGlzdGVuZXIocCxjdCksRS5ldmVudC50cmlnZ2VyZWQ9dm9pZCAwLGEmJihuW3VdPWEpKSxlLnJlc3VsdH19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1FLmV4dGVuZChuZXcgRS5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITB9KTtFLmV2ZW50LnRyaWdnZXIocixudWxsLHQpfX0pLEUuZm4uZXh0ZW5kKHt0cmlnZ2VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe0UuZXZlbnQudHJpZ2dlcihlLHQsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzWzBdO2lmKG4pcmV0dXJuIEUuZXZlbnQudHJpZ2dlcihlLHQsbiwhMCl9fSksbS5mb2N1c2lufHxFLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKG4scil7dmFyIGk9ZnVuY3Rpb24oZSl7RS5ldmVudC5zaW11bGF0ZShyLGUudGFyZ2V0LEUuZXZlbnQuZml4KGUpKX07RS5ldmVudC5zcGVjaWFsW3JdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcy5kb2N1bWVudHx8dGhpcyx0PVkuYWNjZXNzKGUscik7dHx8ZS5hZGRFdmVudExpc3RlbmVyKG4saSwhMCksWS5hY2Nlc3MoZSxyLCh0fHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMuZG9jdW1lbnR8fHRoaXMsdD1ZLmFjY2VzcyhlLHIpLTE7dD9ZLmFjY2VzcyhlLHIsdCk6KGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLGksITApLFkucmVtb3ZlKGUscikpfX19KSxFLnBhcnNlWE1MPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7dHJ5e3Q9KG5ldyBnLkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGUsInRleHQveG1sIil9Y2F0Y2goZSl7dD12b2lkIDB9cmV0dXJuIHQmJiF0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8RS5lcnJvcigiSW52YWxpZCBYTUw6ICIrZSksdH07dmFyIGZ0LGR0PS9cW1xdJC8scHQ9L1xyP1xuL2csaHQ9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLGd0PS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtmdW5jdGlvbiB2dChuLGUscixpKXt2YXIgdDtpZihBcnJheS5pc0FycmF5KGUpKUUuZWFjaChlLGZ1bmN0aW9uKGUsdCl7cnx8ZHQudGVzdChuKT9pKG4sdCk6dnQobisiWyIrKCJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9dD9lOiIiKSsiXSIsdCxyLGkpfSk7ZWxzZSBpZihyfHwib2JqZWN0IiE9PVQoZSkpaShuLGUpO2Vsc2UgZm9yKHQgaW4gZSl2dChuKyJbIit0KyJdIixlW3RdLHIsaSl9RS5wYXJhbT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1mdW5jdGlvbihlLHQpe3ZhciBuPWIodCk/dCgpOnQ7cltyLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGUpKyI9IitlbmNvZGVVUklDb21wb25lbnQobnVsbD09bj8iIjpuKX07aWYobnVsbD09ZSlyZXR1cm4iIjtpZihBcnJheS5pc0FycmF5KGUpfHxlLmpxdWVyeSYmIUUuaXNQbGFpbk9iamVjdChlKSlFLmVhY2goZSxmdW5jdGlvbigpe2kodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IobiBpbiBlKXZ0KG4sZVtuXSx0LGkpO3JldHVybiByLmpvaW4oIiYiKX0sRS5mbi5leHRlbmQoe3NlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiBFLnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9RS5wcm9wKHRoaXMsImVsZW1lbnRzIik7cmV0dXJuIGU/RS5tYWtlQXJyYXkoZSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYhRSh0aGlzKS5pcygiOmRpc2FibGVkIikmJmd0LnRlc3QodGhpcy5ub2RlTmFtZSkmJiFodC50ZXN0KGUpJiYodGhpcy5jaGVja2VkfHwhZmUudGVzdChlKSl9KS5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgbj1FKHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1uP251bGw6QXJyYXkuaXNBcnJheShuKT9FLm1hcChuLGZ1bmN0aW9uKGUpe3JldHVybntuYW1lOnQubmFtZSx2YWx1ZTplLnJlcGxhY2UocHQsIlxyXG4iKX19KTp7bmFtZTp0Lm5hbWUsdmFsdWU6bi5yZXBsYWNlKHB0LCJcclxuIil9fSkuZ2V0KCl9fSksRS5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHRoaXNbMF0mJihiKGUpJiYoZT1lLmNhbGwodGhpc1swXSkpLHQ9RShlLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApLHRoaXNbMF0ucGFyZW50Tm9kZSYmdC5pbnNlcnRCZWZvcmUodGhpc1swXSksdC5tYXAoZnVuY3Rpb24oKXt2YXIgZT10aGlzO3doaWxlKGUuZmlyc3RFbGVtZW50Q2hpbGQpZT1lLmZpcnN0RWxlbWVudENoaWxkO3JldHVybiBlfSkuYXBwZW5kKHRoaXMpKSx0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24obil7cmV0dXJuIGIobik/dGhpcy5lYWNoKGZ1bmN0aW9uKGUpe0UodGhpcykud3JhcElubmVyKG4uY2FsbCh0aGlzLGUpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPUUodGhpcyksdD1lLmNvbnRlbnRzKCk7dC5sZW5ndGg/dC53cmFwQWxsKG4pOmUuYXBwZW5kKG4pfSl9LHdyYXA6ZnVuY3Rpb24odCl7dmFyIG49Yih0KTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe0UodGhpcykud3JhcEFsbChuP3QuY2FsbCh0aGlzLGUpOnQpfSl9LHVud3JhcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wYXJlbnQoZSkubm90KCJib2R5IikuZWFjaChmdW5jdGlvbigpe0UodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLHRoaXN9fSksRS5leHByLnBzZXVkb3MuaGlkZGVuPWZ1bmN0aW9uKGUpe3JldHVybiFFLmV4cHIucHNldWRvcy52aXNpYmxlKGUpfSxFLmV4cHIucHNldWRvcy52aXNpYmxlPWZ1bmN0aW9uKGUpe3JldHVybiEhKGUub2Zmc2V0V2lkdGh8fGUub2Zmc2V0SGVpZ2h0fHxlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX0sbS5jcmVhdGVIVE1MRG9jdW1lbnQ9KChmdD13LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikuYm9keSkuaW5uZXJIVE1MPSI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPiIsMj09PWZ0LmNoaWxkTm9kZXMubGVuZ3RoKSxFLnBhcnNlSFRNTD1mdW5jdGlvbihlLHQsbil7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlP1tdOigiYm9vbGVhbiI9PXR5cGVvZiB0JiYobj10LHQ9ITEpLHR8fChtLmNyZWF0ZUhUTUxEb2N1bWVudD8oKHI9KHQ9dy5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpKS5jcmVhdGVFbGVtZW50KCJiYXNlIikpLmhyZWY9dy5sb2NhdGlvbi5ocmVmLHQuaGVhZC5hcHBlbmRDaGlsZChyKSk6dD13KSxvPSFuJiZbXSwoaT1rLmV4ZWMoZSkpP1t0LmNyZWF0ZUVsZW1lbnQoaVsxXSldOihpPW1lKFtlXSx0LG8pLG8mJm8ubGVuZ3RoJiZFKG8pLnJlbW92ZSgpLEUubWVyZ2UoW10saS5jaGlsZE5vZGVzKSkpO3ZhciByLGksb30sRS5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGw9RS5jc3MoZSwicG9zaXRpb24iKSxjPUUoZSksZj17fTsic3RhdGljIj09PWwmJihlLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLHM9Yy5vZmZzZXQoKSxvPUUuY3NzKGUsInRvcCIpLHU9RS5jc3MoZSwibGVmdCIpLCgiYWJzb2x1dGUiPT09bHx8ImZpeGVkIj09PWwpJiYtMTwobyt1KS5pbmRleE9mKCJhdXRvIik/KGE9KHI9Yy5wb3NpdGlvbigpKS50b3AsaT1yLmxlZnQpOihhPXBhcnNlRmxvYXQobyl8fDAsaT1wYXJzZUZsb2F0KHUpfHwwKSxiKHQpJiYodD10LmNhbGwoZSxuLEUuZXh0ZW5kKHt9LHMpKSksbnVsbCE9dC50b3AmJihmLnRvcD10LnRvcC1zLnRvcCthKSxudWxsIT10LmxlZnQmJihmLmxlZnQ9dC5sZWZ0LXMubGVmdCtpKSwidXNpbmciaW4gdD90LnVzaW5nLmNhbGwoZSxmKTooIm51bWJlciI9PXR5cGVvZiBmLnRvcCYmKGYudG9wKz0icHgiKSwibnVtYmVyIj09dHlwZW9mIGYubGVmdCYmKGYubGVmdCs9InB4IiksYy5jc3MoZikpfX0sRS5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbih0KXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGUpe0Uub2Zmc2V0LnNldE9mZnNldCh0aGlzLHQsZSl9KTt2YXIgZSxuLHI9dGhpc1swXTtyZXR1cm4gcj9yLmdldENsaWVudFJlY3RzKCkubGVuZ3RoPyhlPXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcse3RvcDplLnRvcCtuLnBhZ2VZT2Zmc2V0LGxlZnQ6ZS5sZWZ0K24ucGFnZVhPZmZzZXR9KTp7dG9wOjAsbGVmdDowfTp2b2lkIDB9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGUsdCxuLHI9dGhpc1swXSxpPXt0b3A6MCxsZWZ0OjB9O2lmKCJmaXhlZCI9PT1FLmNzcyhyLCJwb3NpdGlvbiIpKXQ9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlbHNle3Q9dGhpcy5vZmZzZXQoKSxuPXIub3duZXJEb2N1bWVudCxlPXIub2Zmc2V0UGFyZW50fHxuLmRvY3VtZW50RWxlbWVudDt3aGlsZShlJiYoZT09PW4uYm9keXx8ZT09PW4uZG9jdW1lbnRFbGVtZW50KSYmInN0YXRpYyI9PT1FLmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5wYXJlbnROb2RlO2UmJmUhPT1yJiYxPT09ZS5ub2RlVHlwZSYmKChpPUUoZSkub2Zmc2V0KCkpLnRvcCs9RS5jc3MoZSwiYm9yZGVyVG9wV2lkdGgiLCEwKSxpLmxlZnQrPUUuY3NzKGUsImJvcmRlckxlZnRXaWR0aCIsITApKX1yZXR1cm57dG9wOnQudG9wLWkudG9wLUUuY3NzKHIsIm1hcmdpblRvcCIsITApLGxlZnQ6dC5sZWZ0LWkubGVmdC1FLmNzcyhyLCJtYXJnaW5MZWZ0IiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnQ7d2hpbGUoZSYmInN0YXRpYyI9PT1FLmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV8fHJlfSl9fSksRS5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKHQsaSl7dmFyIG89InBhZ2VZT2Zmc2V0Ij09PWk7RS5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gJCh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZih4KGUpP3I9ZTo5PT09ZS5ub2RlVHlwZSYmKHI9ZS5kZWZhdWx0Vmlldyksdm9pZCAwPT09bilyZXR1cm4gcj9yW2ldOmVbdF07cj9yLnNjcm9sbFRvKG8/ci5wYWdlWE9mZnNldDpuLG8/bjpyLnBhZ2VZT2Zmc2V0KTplW3RdPW59LHQsZSxhcmd1bWVudHMubGVuZ3RoKX19KSxFLmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oZSxuKXtFLmNzc0hvb2tzW25dPUZlKG0ucGl4ZWxQb3NpdGlvbixmdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuIHQ9V2UoZSxuKSxJZS50ZXN0KHQpP0UoZSkucG9zaXRpb24oKVtuXSsicHgiOnR9KX0pLEUuZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGEscyl7RS5lYWNoKHtwYWRkaW5nOiJpbm5lciIrYSxjb250ZW50OnMsIiI6Im91dGVyIithfSxmdW5jdGlvbihyLG8pe0UuZm5bb109ZnVuY3Rpb24oZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoJiYocnx8ImJvb2xlYW4iIT10eXBlb2YgZSksaT1yfHwoITA9PT1lfHwhMD09PXQ/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiAkKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiB4KGUpPzA9PT1vLmluZGV4T2YoIm91dGVyIik/ZVsiaW5uZXIiK2FdOmUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2FdOjk9PT1lLm5vZGVUeXBlPyhyPWUuZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KGUuYm9keVsic2Nyb2xsIithXSxyWyJzY3JvbGwiK2FdLGUuYm9keVsib2Zmc2V0IithXSxyWyJvZmZzZXQiK2FdLHJbImNsaWVudCIrYV0pKTp2b2lkIDA9PT1uP0UuY3NzKGUsdCxpKTpFLnN0eWxlKGUsdCxuLGkpfSxzLG4/ZTp2b2lkIDAsbil9fSl9KSxFLmZuLmV4dGVuZCh7YmluZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub24oZSxudWxsLHQsbil9LHVuYmluZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9mZihlLG51bGwsdCl9LGRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKHQsZSxuLHIpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vZmYoZSwiKioiKTp0aGlzLm9mZih0LGV8fCIqKiIsbil9LGhvdmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfX0pLEUuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLG4pe0UuZm5bbl09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMDxhcmd1bWVudHMubGVuZ3RoP3RoaXMub24obixudWxsLGUsdCk6dGhpcy50cmlnZ2VyKG4pfX0pO3ZhciB5dD0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2c7RS5wcm94eT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaTtpZigic3RyaW5nIj09dHlwZW9mIHQmJihuPWVbdF0sdD1lLGU9biksYihlKSlyZXR1cm4gcj1zLmNhbGwoYXJndW1lbnRzLDIpLChpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodHx8dGhpcyxyLmNvbmNhdChzLmNhbGwoYXJndW1lbnRzKSkpfSkuZ3VpZD1lLmd1aWQ9ZS5ndWlkfHxFLmd1aWQrKyxpfSxFLmhvbGRSZWFkeT1mdW5jdGlvbihlKXtlP0UucmVhZHlXYWl0Kys6RS5yZWFkeSghMCl9LEUuaXNBcnJheT1BcnJheS5pc0FycmF5LEUucGFyc2VKU09OPUpTT04ucGFyc2UsRS5ub2RlTmFtZT1TLEUuaXNGdW5jdGlvbj1iLEUuaXNXaW5kb3c9eCxFLmNhbWVsQ2FzZT1WLEUudHlwZT1ULEUubm93PURhdGUubm93LEUuaXNOdW1lcmljPWZ1bmN0aW9uKGUpe3ZhciB0PUUudHlwZShlKTtyZXR1cm4oIm51bWJlciI9PT10fHwic3RyaW5nIj09PXQpJiYhaXNOYU4oZS1wYXJzZUZsb2F0KGUpKX0sRS50cmltPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOihlKyIiKS5yZXBsYWNlKHl0LCIiKX0sImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIEV9KTt2YXIgbXQ9Zy5qUXVlcnksYnQ9Zy4kO3JldHVybiBFLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGcuJD09PUUmJihnLiQ9YnQpLGUmJmcualF1ZXJ5PT09RSYmKGcualF1ZXJ5PW10KSxFfSwidW5kZWZpbmVkIj09dHlwZW9mIGUmJihnLmpRdWVyeT1nLiQ9RSksRX0pOwo=" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="data:application/javascript; charset=utf-8;base64,LyoKIENvcHlyaWdodCAoQykgRmVkZXJpY28gWml2b2xvIDIwMTkKIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAobGljZW5zZSB0ZXJtcyBhcmUgYXQgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVCkuCiAqLyhmdW5jdGlvbihlLHQpeydvYmplY3QnPT10eXBlb2YgZXhwb3J0cyYmJ3VuZGVmaW5lZCchPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgpOidmdW5jdGlvbic9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKHQpOmUuUG9wcGVyPXQoKX0pKHRoaXMsZnVuY3Rpb24oKXsndXNlIHN0cmljdCc7ZnVuY3Rpb24gZShlKXtyZXR1cm4gZSYmJ1tvYmplY3QgRnVuY3Rpb25dJz09PXt9LnRvU3RyaW5nLmNhbGwoZSl9ZnVuY3Rpb24gdChlLHQpe2lmKDEhPT1lLm5vZGVUeXBlKXJldHVybltdO3ZhciBvPWUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyxuPW8uZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpO3JldHVybiB0P25bdF06bn1mdW5jdGlvbiBvKGUpe3JldHVybidIVE1MJz09PWUubm9kZU5hbWU/ZTplLnBhcmVudE5vZGV8fGUuaG9zdH1mdW5jdGlvbiBuKGUpe2lmKCFlKXJldHVybiBkb2N1bWVudC5ib2R5O3N3aXRjaChlLm5vZGVOYW1lKXtjYXNlJ0hUTUwnOmNhc2UnQk9EWSc6cmV0dXJuIGUub3duZXJEb2N1bWVudC5ib2R5O2Nhc2UnI2RvY3VtZW50JzpyZXR1cm4gZS5ib2R5O312YXIgaT10KGUpLHI9aS5vdmVyZmxvdyxwPWkub3ZlcmZsb3dYLHM9aS5vdmVyZmxvd1k7cmV0dXJuIC8oYXV0b3xzY3JvbGx8b3ZlcmxheSkvLnRlc3QocitzK3ApP2U6bihvKGUpKX1mdW5jdGlvbiBpKGUpe3JldHVybiBlJiZlLnJlZmVyZW5jZU5vZGU/ZS5yZWZlcmVuY2VOb2RlOmV9ZnVuY3Rpb24gcihlKXtyZXR1cm4gMTE9PT1lP3JlOjEwPT09ZT9wZTpyZXx8cGV9ZnVuY3Rpb24gcChlKXtpZighZSlyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2Zvcih2YXIgbz1yKDEwKT9kb2N1bWVudC5ib2R5Om51bGwsbj1lLm9mZnNldFBhcmVudHx8bnVsbDtuPT09byYmZS5uZXh0RWxlbWVudFNpYmxpbmc7KW49KGU9ZS5uZXh0RWxlbWVudFNpYmxpbmcpLm9mZnNldFBhcmVudDt2YXIgaT1uJiZuLm5vZGVOYW1lO3JldHVybiBpJiYnQk9EWSchPT1pJiYnSFRNTCchPT1pPy0xIT09WydUSCcsJ1REJywnVEFCTEUnXS5pbmRleE9mKG4ubm9kZU5hbWUpJiYnc3RhdGljJz09PXQobiwncG9zaXRpb24nKT9wKG4pOm46ZT9lLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OmRvY3VtZW50LmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBzKGUpe3ZhciB0PWUubm9kZU5hbWU7cmV0dXJuJ0JPRFknIT09dCYmKCdIVE1MJz09PXR8fHAoZS5maXJzdEVsZW1lbnRDaGlsZCk9PT1lKX1mdW5jdGlvbiBkKGUpe3JldHVybiBudWxsPT09ZS5wYXJlbnROb2RlP2U6ZChlLnBhcmVudE5vZGUpfWZ1bmN0aW9uIGEoZSx0KXtpZighZXx8IWUubm9kZVR5cGV8fCF0fHwhdC5ub2RlVHlwZSlyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3ZhciBvPWUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkcsbj1vP2U6dCxpPW8/dDplLHI9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtyLnNldFN0YXJ0KG4sMCksci5zZXRFbmQoaSwwKTt2YXIgbD1yLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO2lmKGUhPT1sJiZ0IT09bHx8bi5jb250YWlucyhpKSlyZXR1cm4gcyhsKT9sOnAobCk7dmFyIGY9ZChlKTtyZXR1cm4gZi5ob3N0P2EoZi5ob3N0LHQpOmEoZSxkKHQpLmhvc3QpfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOid0b3AnLG89J3RvcCc9PT10PydzY3JvbGxUb3AnOidzY3JvbGxMZWZ0JyxuPWUubm9kZU5hbWU7aWYoJ0JPRFknPT09bnx8J0hUTUwnPT09bil7dmFyIGk9ZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPWUub3duZXJEb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50fHxpO3JldHVybiByW29dfXJldHVybiBlW29dfWZ1bmN0aW9uIGYoZSx0KXt2YXIgbz0yPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLG49bCh0LCd0b3AnKSxpPWwodCwnbGVmdCcpLHI9bz8tMToxO3JldHVybiBlLnRvcCs9bipyLGUuYm90dG9tKz1uKnIsZS5sZWZ0Kz1pKnIsZS5yaWdodCs9aSpyLGV9ZnVuY3Rpb24gbShlLHQpe3ZhciBvPSd4Jz09PXQ/J0xlZnQnOidUb3AnLG49J0xlZnQnPT1vPydSaWdodCc6J0JvdHRvbSc7cmV0dXJuIHBhcnNlRmxvYXQoZVsnYm9yZGVyJytvKydXaWR0aCddLDEwKStwYXJzZUZsb2F0KGVbJ2JvcmRlcicrbisnV2lkdGgnXSwxMCl9ZnVuY3Rpb24gaChlLHQsbyxuKXtyZXR1cm4gZWUodFsnb2Zmc2V0JytlXSx0WydzY3JvbGwnK2VdLG9bJ2NsaWVudCcrZV0sb1snb2Zmc2V0JytlXSxvWydzY3JvbGwnK2VdLHIoMTApP3BhcnNlSW50KG9bJ29mZnNldCcrZV0pK3BhcnNlSW50KG5bJ21hcmdpbicrKCdIZWlnaHQnPT09ZT8nVG9wJzonTGVmdCcpXSkrcGFyc2VJbnQoblsnbWFyZ2luJysoJ0hlaWdodCc9PT1lPydCb3R0b20nOidSaWdodCcpXSk6MCl9ZnVuY3Rpb24gYyhlKXt2YXIgdD1lLmJvZHksbz1lLmRvY3VtZW50RWxlbWVudCxuPXIoMTApJiZnZXRDb21wdXRlZFN0eWxlKG8pO3JldHVybntoZWlnaHQ6aCgnSGVpZ2h0Jyx0LG8sbiksd2lkdGg6aCgnV2lkdGgnLHQsbyxuKX19ZnVuY3Rpb24gZyhlKXtyZXR1cm4gbGUoe30sZSx7cmlnaHQ6ZS5sZWZ0K2Uud2lkdGgsYm90dG9tOmUudG9wK2UuaGVpZ2h0fSl9ZnVuY3Rpb24gdShlKXt2YXIgbz17fTt0cnl7aWYocigxMCkpe289ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt2YXIgbj1sKGUsJ3RvcCcpLGk9bChlLCdsZWZ0Jyk7by50b3ArPW4sby5sZWZ0Kz1pLG8uYm90dG9tKz1uLG8ucmlnaHQrPWl9ZWxzZSBvPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9Y2F0Y2godCl7fXZhciBwPXtsZWZ0Om8ubGVmdCx0b3A6by50b3Asd2lkdGg6by5yaWdodC1vLmxlZnQsaGVpZ2h0Om8uYm90dG9tLW8udG9wfSxzPSdIVE1MJz09PWUubm9kZU5hbWU/YyhlLm93bmVyRG9jdW1lbnQpOnt9LGQ9cy53aWR0aHx8ZS5jbGllbnRXaWR0aHx8cC53aWR0aCxhPXMuaGVpZ2h0fHxlLmNsaWVudEhlaWdodHx8cC5oZWlnaHQsZj1lLm9mZnNldFdpZHRoLWQsaD1lLm9mZnNldEhlaWdodC1hO2lmKGZ8fGgpe3ZhciB1PXQoZSk7Zi09bSh1LCd4JyksaC09bSh1LCd5JykscC53aWR0aC09ZixwLmhlaWdodC09aH1yZXR1cm4gZyhwKX1mdW5jdGlvbiBiKGUsbyl7dmFyIGk9Mjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxwPXIoMTApLHM9J0hUTUwnPT09by5ub2RlTmFtZSxkPXUoZSksYT11KG8pLGw9bihlKSxtPXQobyksaD1wYXJzZUZsb2F0KG0uYm9yZGVyVG9wV2lkdGgsMTApLGM9cGFyc2VGbG9hdChtLmJvcmRlckxlZnRXaWR0aCwxMCk7aSYmcyYmKGEudG9wPWVlKGEudG9wLDApLGEubGVmdD1lZShhLmxlZnQsMCkpO3ZhciBiPWcoe3RvcDpkLnRvcC1hLnRvcC1oLGxlZnQ6ZC5sZWZ0LWEubGVmdC1jLHdpZHRoOmQud2lkdGgsaGVpZ2h0OmQuaGVpZ2h0fSk7aWYoYi5tYXJnaW5Ub3A9MCxiLm1hcmdpbkxlZnQ9MCwhcCYmcyl7dmFyIHc9cGFyc2VGbG9hdChtLm1hcmdpblRvcCwxMCkseT1wYXJzZUZsb2F0KG0ubWFyZ2luTGVmdCwxMCk7Yi50b3AtPWgtdyxiLmJvdHRvbS09aC13LGIubGVmdC09Yy15LGIucmlnaHQtPWMteSxiLm1hcmdpblRvcD13LGIubWFyZ2luTGVmdD15fXJldHVybihwJiYhaT9vLmNvbnRhaW5zKGwpOm89PT1sJiYnQk9EWSchPT1sLm5vZGVOYW1lKSYmKGI9ZihiLG8pKSxifWZ1bmN0aW9uIHcoZSl7dmFyIHQ9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxvPWUub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1iKGUsbyksaT1lZShvLmNsaWVudFdpZHRoLHdpbmRvdy5pbm5lcldpZHRofHwwKSxyPWVlKG8uY2xpZW50SGVpZ2h0LHdpbmRvdy5pbm5lckhlaWdodHx8MCkscD10PzA6bChvKSxzPXQ/MDpsKG8sJ2xlZnQnKSxkPXt0b3A6cC1uLnRvcCtuLm1hcmdpblRvcCxsZWZ0OnMtbi5sZWZ0K24ubWFyZ2luTGVmdCx3aWR0aDppLGhlaWdodDpyfTtyZXR1cm4gZyhkKX1mdW5jdGlvbiB5KGUpe3ZhciBuPWUubm9kZU5hbWU7aWYoJ0JPRFknPT09bnx8J0hUTUwnPT09bilyZXR1cm4hMTtpZignZml4ZWQnPT09dChlLCdwb3NpdGlvbicpKXJldHVybiEwO3ZhciBpPW8oZSk7cmV0dXJuISFpJiZ5KGkpfWZ1bmN0aW9uIEUoZSl7aWYoIWV8fCFlLnBhcmVudEVsZW1lbnR8fHIoKSlyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2Zvcih2YXIgbz1lLnBhcmVudEVsZW1lbnQ7byYmJ25vbmUnPT09dChvLCd0cmFuc2Zvcm0nKTspbz1vLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG98fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiB2KGUsdCxyLHApe3ZhciBzPTQ8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzRdJiZhcmd1bWVudHNbNF0sZD17dG9wOjAsbGVmdDowfSxsPXM/RShlKTphKGUsaSh0KSk7aWYoJ3ZpZXdwb3J0Jz09PXApZD13KGwscyk7ZWxzZXt2YXIgZjsnc2Nyb2xsUGFyZW50Jz09PXA/KGY9bihvKHQpKSwnQk9EWSc9PT1mLm5vZGVOYW1lJiYoZj1lLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSk6J3dpbmRvdyc9PT1wP2Y9ZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDpmPXA7dmFyIG09YihmLGwscyk7aWYoJ0hUTUwnPT09Zi5ub2RlTmFtZSYmIXkobCkpe3ZhciBoPWMoZS5vd25lckRvY3VtZW50KSxnPWguaGVpZ2h0LHU9aC53aWR0aDtkLnRvcCs9bS50b3AtbS5tYXJnaW5Ub3AsZC5ib3R0b209ZyttLnRvcCxkLmxlZnQrPW0ubGVmdC1tLm1hcmdpbkxlZnQsZC5yaWdodD11K20ubGVmdH1lbHNlIGQ9bX1yPXJ8fDA7dmFyIHY9J251bWJlcic9PXR5cGVvZiByO3JldHVybiBkLmxlZnQrPXY/cjpyLmxlZnR8fDAsZC50b3ArPXY/cjpyLnRvcHx8MCxkLnJpZ2h0LT12P3I6ci5yaWdodHx8MCxkLmJvdHRvbS09dj9yOnIuYm90dG9tfHwwLGR9ZnVuY3Rpb24geChlKXt2YXIgdD1lLndpZHRoLG89ZS5oZWlnaHQ7cmV0dXJuIHQqb31mdW5jdGlvbiBPKGUsdCxvLG4saSl7dmFyIHI9NTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0/YXJndW1lbnRzWzVdOjA7aWYoLTE9PT1lLmluZGV4T2YoJ2F1dG8nKSlyZXR1cm4gZTt2YXIgcD12KG8sbixyLGkpLHM9e3RvcDp7d2lkdGg6cC53aWR0aCxoZWlnaHQ6dC50b3AtcC50b3B9LHJpZ2h0Ont3aWR0aDpwLnJpZ2h0LXQucmlnaHQsaGVpZ2h0OnAuaGVpZ2h0fSxib3R0b206e3dpZHRoOnAud2lkdGgsaGVpZ2h0OnAuYm90dG9tLXQuYm90dG9tfSxsZWZ0Ont3aWR0aDp0LmxlZnQtcC5sZWZ0LGhlaWdodDpwLmhlaWdodH19LGQ9T2JqZWN0LmtleXMocykubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBsZSh7a2V5OmV9LHNbZV0se2FyZWE6eChzW2VdKX0pfSkuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiB0LmFyZWEtZS5hcmVhfSksYT1kLmZpbHRlcihmdW5jdGlvbihlKXt2YXIgdD1lLndpZHRoLG49ZS5oZWlnaHQ7cmV0dXJuIHQ+PW8uY2xpZW50V2lkdGgmJm4+PW8uY2xpZW50SGVpZ2h0fSksbD0wPGEubGVuZ3RoP2FbMF0ua2V5OmRbMF0ua2V5LGY9ZS5zcGxpdCgnLScpWzFdO3JldHVybiBsKyhmPyctJytmOicnKX1mdW5jdGlvbiBMKGUsdCxvKXt2YXIgbj0zPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbCxyPW4/RSh0KTphKHQsaShvKSk7cmV0dXJuIGIobyxyLG4pfWZ1bmN0aW9uIFMoZSl7dmFyIHQ9ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LG89dC5nZXRDb21wdXRlZFN0eWxlKGUpLG49cGFyc2VGbG9hdChvLm1hcmdpblRvcHx8MCkrcGFyc2VGbG9hdChvLm1hcmdpbkJvdHRvbXx8MCksaT1wYXJzZUZsb2F0KG8ubWFyZ2luTGVmdHx8MCkrcGFyc2VGbG9hdChvLm1hcmdpblJpZ2h0fHwwKSxyPXt3aWR0aDplLm9mZnNldFdpZHRoK2ksaGVpZ2h0OmUub2Zmc2V0SGVpZ2h0K259O3JldHVybiByfWZ1bmN0aW9uIFQoZSl7dmFyIHQ9e2xlZnQ6J3JpZ2h0JyxyaWdodDonbGVmdCcsYm90dG9tOid0b3AnLHRvcDonYm90dG9tJ307cmV0dXJuIGUucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX1mdW5jdGlvbiBDKGUsdCxvKXtvPW8uc3BsaXQoJy0nKVswXTt2YXIgbj1TKGUpLGk9e3dpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0fSxyPS0xIT09WydyaWdodCcsJ2xlZnQnXS5pbmRleE9mKG8pLHA9cj8ndG9wJzonbGVmdCcscz1yPydsZWZ0JzondG9wJyxkPXI/J2hlaWdodCc6J3dpZHRoJyxhPXI/J3dpZHRoJzonaGVpZ2h0JztyZXR1cm4gaVtwXT10W3BdK3RbZF0vMi1uW2RdLzIsaVtzXT1vPT09cz90W3NdLW5bYV06dFtUKHMpXSxpfWZ1bmN0aW9uIEQoZSx0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbmQ/ZS5maW5kKHQpOmUuZmlsdGVyKHQpWzBdfWZ1bmN0aW9uIE4oZSx0LG8pe2lmKEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgpcmV0dXJuIGUuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiBlW3RdPT09b30pO3ZhciBuPUQoZSxmdW5jdGlvbihlKXtyZXR1cm4gZVt0XT09PW99KTtyZXR1cm4gZS5pbmRleE9mKG4pfWZ1bmN0aW9uIFAodCxvLG4pe3ZhciBpPXZvaWQgMD09PW4/dDp0LnNsaWNlKDAsTih0LCduYW1lJyxuKSk7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbih0KXt0WydmdW5jdGlvbiddJiZjb25zb2xlLndhcm4oJ2Btb2RpZmllci5mdW5jdGlvbmAgaXMgZGVwcmVjYXRlZCwgdXNlIGBtb2RpZmllci5mbmAhJyk7dmFyIG49dFsnZnVuY3Rpb24nXXx8dC5mbjt0LmVuYWJsZWQmJmUobikmJihvLm9mZnNldHMucG9wcGVyPWcoby5vZmZzZXRzLnBvcHBlciksby5vZmZzZXRzLnJlZmVyZW5jZT1nKG8ub2Zmc2V0cy5yZWZlcmVuY2UpLG89bihvLHQpKX0pLG99ZnVuY3Rpb24gaygpe2lmKCF0aGlzLnN0YXRlLmlzRGVzdHJveWVkKXt2YXIgZT17aW5zdGFuY2U6dGhpcyxzdHlsZXM6e30sYXJyb3dTdHlsZXM6e30sYXR0cmlidXRlczp7fSxmbGlwcGVkOiExLG9mZnNldHM6e319O2Uub2Zmc2V0cy5yZWZlcmVuY2U9TCh0aGlzLnN0YXRlLHRoaXMucG9wcGVyLHRoaXMucmVmZXJlbmNlLHRoaXMub3B0aW9ucy5wb3NpdGlvbkZpeGVkKSxlLnBsYWNlbWVudD1PKHRoaXMub3B0aW9ucy5wbGFjZW1lbnQsZS5vZmZzZXRzLnJlZmVyZW5jZSx0aGlzLnBvcHBlcix0aGlzLnJlZmVyZW5jZSx0aGlzLm9wdGlvbnMubW9kaWZpZXJzLmZsaXAuYm91bmRhcmllc0VsZW1lbnQsdGhpcy5vcHRpb25zLm1vZGlmaWVycy5mbGlwLnBhZGRpbmcpLGUub3JpZ2luYWxQbGFjZW1lbnQ9ZS5wbGFjZW1lbnQsZS5wb3NpdGlvbkZpeGVkPXRoaXMub3B0aW9ucy5wb3NpdGlvbkZpeGVkLGUub2Zmc2V0cy5wb3BwZXI9Qyh0aGlzLnBvcHBlcixlLm9mZnNldHMucmVmZXJlbmNlLGUucGxhY2VtZW50KSxlLm9mZnNldHMucG9wcGVyLnBvc2l0aW9uPXRoaXMub3B0aW9ucy5wb3NpdGlvbkZpeGVkPydmaXhlZCc6J2Fic29sdXRlJyxlPVAodGhpcy5tb2RpZmllcnMsZSksdGhpcy5zdGF0ZS5pc0NyZWF0ZWQ/dGhpcy5vcHRpb25zLm9uVXBkYXRlKGUpOih0aGlzLnN0YXRlLmlzQ3JlYXRlZD0hMCx0aGlzLm9wdGlvbnMub25DcmVhdGUoZSkpfX1mdW5jdGlvbiBXKGUsdCl7cmV0dXJuIGUuc29tZShmdW5jdGlvbihlKXt2YXIgbz1lLm5hbWUsbj1lLmVuYWJsZWQ7cmV0dXJuIG4mJm89PT10fSl9ZnVuY3Rpb24gQihlKXtmb3IodmFyIHQ9WyExLCdtcycsJ1dlYmtpdCcsJ01veicsJ08nXSxvPWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0scj1pPycnK2krbzplO2lmKCd1bmRlZmluZWQnIT10eXBlb2YgZG9jdW1lbnQuYm9keS5zdHlsZVtyXSlyZXR1cm4gcn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBIKCl7cmV0dXJuIHRoaXMuc3RhdGUuaXNEZXN0cm95ZWQ9ITAsVyh0aGlzLm1vZGlmaWVycywnYXBwbHlTdHlsZScpJiYodGhpcy5wb3BwZXIucmVtb3ZlQXR0cmlidXRlKCd4LXBsYWNlbWVudCcpLHRoaXMucG9wcGVyLnN0eWxlLnBvc2l0aW9uPScnLHRoaXMucG9wcGVyLnN0eWxlLnRvcD0nJyx0aGlzLnBvcHBlci5zdHlsZS5sZWZ0PScnLHRoaXMucG9wcGVyLnN0eWxlLnJpZ2h0PScnLHRoaXMucG9wcGVyLnN0eWxlLmJvdHRvbT0nJyx0aGlzLnBvcHBlci5zdHlsZS53aWxsQ2hhbmdlPScnLHRoaXMucG9wcGVyLnN0eWxlW0IoJ3RyYW5zZm9ybScpXT0nJyksdGhpcy5kaXNhYmxlRXZlbnRMaXN0ZW5lcnMoKSx0aGlzLm9wdGlvbnMucmVtb3ZlT25EZXN0cm95JiZ0aGlzLnBvcHBlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucG9wcGVyKSx0aGlzfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9ZS5vd25lckRvY3VtZW50O3JldHVybiB0P3QuZGVmYXVsdFZpZXc6d2luZG93fWZ1bmN0aW9uIE0oZSx0LG8saSl7dmFyIHI9J0JPRFknPT09ZS5ub2RlTmFtZSxwPXI/ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3OmU7cC5hZGRFdmVudExpc3RlbmVyKHQsbyx7cGFzc2l2ZTohMH0pLHJ8fE0obihwLnBhcmVudE5vZGUpLHQsbyxpKSxpLnB1c2gocCl9ZnVuY3Rpb24gRihlLHQsbyxpKXtvLnVwZGF0ZUJvdW5kPWksQShlKS5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLG8udXBkYXRlQm91bmQse3Bhc3NpdmU6ITB9KTt2YXIgcj1uKGUpO3JldHVybiBNKHIsJ3Njcm9sbCcsby51cGRhdGVCb3VuZCxvLnNjcm9sbFBhcmVudHMpLG8uc2Nyb2xsRWxlbWVudD1yLG8uZXZlbnRzRW5hYmxlZD0hMCxvfWZ1bmN0aW9uIEkoKXt0aGlzLnN0YXRlLmV2ZW50c0VuYWJsZWR8fCh0aGlzLnN0YXRlPUYodGhpcy5yZWZlcmVuY2UsdGhpcy5vcHRpb25zLHRoaXMuc3RhdGUsdGhpcy5zY2hlZHVsZVVwZGF0ZSkpfWZ1bmN0aW9uIFIoZSx0KXtyZXR1cm4gQShlKS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLHQudXBkYXRlQm91bmQpLHQuc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJyx0LnVwZGF0ZUJvdW5kKX0pLHQudXBkYXRlQm91bmQ9bnVsbCx0LnNjcm9sbFBhcmVudHM9W10sdC5zY3JvbGxFbGVtZW50PW51bGwsdC5ldmVudHNFbmFibGVkPSExLHR9ZnVuY3Rpb24gVSgpe3RoaXMuc3RhdGUuZXZlbnRzRW5hYmxlZCYmKGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuc2NoZWR1bGVVcGRhdGUpLHRoaXMuc3RhdGU9Uih0aGlzLnJlZmVyZW5jZSx0aGlzLnN0YXRlKSl9ZnVuY3Rpb24gWShlKXtyZXR1cm4nJyE9PWUmJiFpc05hTihwYXJzZUZsb2F0KGUpKSYmaXNGaW5pdGUoZSl9ZnVuY3Rpb24gVihlLHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIG49Jyc7LTEhPT1bJ3dpZHRoJywnaGVpZ2h0JywndG9wJywncmlnaHQnLCdib3R0b20nLCdsZWZ0J10uaW5kZXhPZihvKSYmWSh0W29dKSYmKG49J3B4JyksZS5zdHlsZVtvXT10W29dK259KX1mdW5jdGlvbiBqKGUsdCl7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihvKXt2YXIgbj10W29dOyExPT09bj9lLnJlbW92ZUF0dHJpYnV0ZShvKTplLnNldEF0dHJpYnV0ZShvLHRbb10pfSl9ZnVuY3Rpb24gcShlLHQpe3ZhciBvPWUub2Zmc2V0cyxuPW8ucG9wcGVyLGk9by5yZWZlcmVuY2Uscj0kLHA9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHM9cihpLndpZHRoKSxkPXIobi53aWR0aCksYT0tMSE9PVsnbGVmdCcsJ3JpZ2h0J10uaW5kZXhPZihlLnBsYWNlbWVudCksbD0tMSE9PWUucGxhY2VtZW50LmluZGV4T2YoJy0nKSxmPXQ/YXx8bHx8cyUyPT1kJTI/cjpaOnAsbT10P3I6cDtyZXR1cm57bGVmdDpmKDE9PXMlMiYmMT09ZCUyJiYhbCYmdD9uLmxlZnQtMTpuLmxlZnQpLHRvcDptKG4udG9wKSxib3R0b206bShuLmJvdHRvbSkscmlnaHQ6ZihuLnJpZ2h0KX19ZnVuY3Rpb24gSyhlLHQsbyl7dmFyIG49RChlLGZ1bmN0aW9uKGUpe3ZhciBvPWUubmFtZTtyZXR1cm4gbz09PXR9KSxpPSEhbiYmZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWU9PT1vJiZlLmVuYWJsZWQmJmUub3JkZXI8bi5vcmRlcn0pO2lmKCFpKXt2YXIgcj0nYCcrdCsnYCc7Y29uc29sZS53YXJuKCdgJytvKydgJysnIG1vZGlmaWVyIGlzIHJlcXVpcmVkIGJ5ICcrcisnIG1vZGlmaWVyIGluIG9yZGVyIHRvIHdvcmssIGJlIHN1cmUgdG8gaW5jbHVkZSBpdCBiZWZvcmUgJytyKychJyl9cmV0dXJuIGl9ZnVuY3Rpb24geihlKXtyZXR1cm4nZW5kJz09PWU/J3N0YXJ0Jzonc3RhcnQnPT09ZT8nZW5kJzplfWZ1bmN0aW9uIEcoZSl7dmFyIHQ9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxvPWhlLmluZGV4T2YoZSksbj1oZS5zbGljZShvKzEpLmNvbmNhdChoZS5zbGljZSgwLG8pKTtyZXR1cm4gdD9uLnJldmVyc2UoKTpufWZ1bmN0aW9uIF8oZSx0LG8sbil7dmFyIGk9ZS5tYXRjaCgvKCg/OlwtfFwrKT9cZCpcLj9cZCopKC4qKS8pLHI9K2lbMV0scD1pWzJdO2lmKCFyKXJldHVybiBlO2lmKDA9PT1wLmluZGV4T2YoJyUnKSl7dmFyIHM7c3dpdGNoKHApe2Nhc2UnJXAnOnM9bzticmVhaztjYXNlJyUnOmNhc2UnJXInOmRlZmF1bHQ6cz1uO312YXIgZD1nKHMpO3JldHVybiBkW3RdLzEwMCpyfWlmKCd2aCc9PT1wfHwndncnPT09cCl7dmFyIGE7cmV0dXJuIGE9J3ZoJz09PXA/ZWUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCx3aW5kb3cuaW5uZXJIZWlnaHR8fDApOmVlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCx3aW5kb3cuaW5uZXJXaWR0aHx8MCksYS8xMDAqcn1yZXR1cm4gcn1mdW5jdGlvbiBYKGUsdCxvLG4pe3ZhciBpPVswLDBdLHI9LTEhPT1bJ3JpZ2h0JywnbGVmdCddLmluZGV4T2YobikscD1lLnNwbGl0KC8oXCt8XC0pLykubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0oKX0pLHM9cC5pbmRleE9mKEQocCxmdW5jdGlvbihlKXtyZXR1cm4tMSE9PWUuc2VhcmNoKC8sfFxzLyl9KSk7cFtzXSYmLTE9PT1wW3NdLmluZGV4T2YoJywnKSYmY29uc29sZS53YXJuKCdPZmZzZXRzIHNlcGFyYXRlZCBieSB3aGl0ZSBzcGFjZShzKSBhcmUgZGVwcmVjYXRlZCwgdXNlIGEgY29tbWEgKCwpIGluc3RlYWQuJyk7dmFyIGQ9L1xzKixccyp8XHMrLyxhPS0xPT09cz9bcF06W3Auc2xpY2UoMCxzKS5jb25jYXQoW3Bbc10uc3BsaXQoZClbMF1dKSxbcFtzXS5zcGxpdChkKVsxXV0uY29uY2F0KHAuc2xpY2UocysxKSldO3JldHVybiBhPWEubWFwKGZ1bmN0aW9uKGUsbil7dmFyIGk9KDE9PT1uPyFyOnIpPydoZWlnaHQnOid3aWR0aCcscD0hMTtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4nJz09PWVbZS5sZW5ndGgtMV0mJi0xIT09WycrJywnLSddLmluZGV4T2YodCk/KGVbZS5sZW5ndGgtMV09dCxwPSEwLGUpOnA/KGVbZS5sZW5ndGgtMV0rPXQscD0hMSxlKTplLmNvbmNhdCh0KX0sW10pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gXyhlLGksdCxvKX0pfSksYS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS5mb3JFYWNoKGZ1bmN0aW9uKG8sbil7WShvKSYmKGlbdF0rPW8qKCctJz09PWVbbi0xXT8tMToxKSl9KX0pLGl9ZnVuY3Rpb24gSihlLHQpe3ZhciBvLG49dC5vZmZzZXQsaT1lLnBsYWNlbWVudCxyPWUub2Zmc2V0cyxwPXIucG9wcGVyLHM9ci5yZWZlcmVuY2UsZD1pLnNwbGl0KCctJylbMF07cmV0dXJuIG89WSgrbik/WytuLDBdOlgobixwLHMsZCksJ2xlZnQnPT09ZD8ocC50b3ArPW9bMF0scC5sZWZ0LT1vWzFdKToncmlnaHQnPT09ZD8ocC50b3ArPW9bMF0scC5sZWZ0Kz1vWzFdKTondG9wJz09PWQ/KHAubGVmdCs9b1swXSxwLnRvcC09b1sxXSk6J2JvdHRvbSc9PT1kJiYocC5sZWZ0Kz1vWzBdLHAudG9wKz1vWzFdKSxlLnBvcHBlcj1wLGV9dmFyIFE9TWF0aC5taW4sWj1NYXRoLmZsb29yLCQ9TWF0aC5yb3VuZCxlZT1NYXRoLm1heCx0ZT0ndW5kZWZpbmVkJyE9dHlwZW9mIHdpbmRvdyYmJ3VuZGVmaW5lZCchPXR5cGVvZiBkb2N1bWVudCYmJ3VuZGVmaW5lZCchPXR5cGVvZiBuYXZpZ2F0b3Isb2U9ZnVuY3Rpb24oKXtmb3IodmFyIGU9WydFZGdlJywnVHJpZGVudCcsJ0ZpcmVmb3gnXSx0PTA7dDxlLmxlbmd0aDt0Kz0xKWlmKHRlJiYwPD1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoZVt0XSkpcmV0dXJuIDE7cmV0dXJuIDB9KCksbmU9dGUmJndpbmRvdy5Qcm9taXNlLGllPW5lP2Z1bmN0aW9uKGUpe3ZhciB0PSExO3JldHVybiBmdW5jdGlvbigpe3R8fCh0PSEwLHdpbmRvdy5Qcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7dD0hMSxlKCl9KSl9fTpmdW5jdGlvbihlKXt2YXIgdD0hMTtyZXR1cm4gZnVuY3Rpb24oKXt0fHwodD0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dD0hMSxlKCl9LG9lKSl9fSxyZT10ZSYmISEod2luZG93Lk1TSW5wdXRNZXRob2RDb250ZXh0JiZkb2N1bWVudC5kb2N1bWVudE1vZGUpLHBlPXRlJiYvTVNJRSAxMC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxzZT1mdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbicpfSxkZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG8sbj0wO248dC5sZW5ndGg7bisrKW89dFtuXSxvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwndmFsdWUnaW4gbyYmKG8ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG8ua2V5LG8pfXJldHVybiBmdW5jdGlvbih0LG8sbil7cmV0dXJuIG8mJmUodC5wcm90b3R5cGUsbyksbiYmZSh0LG4pLHR9fSgpLGFlPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm8sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW8sZX0sbGU9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG89MTtvPGFyZ3VtZW50cy5sZW5ndGg7bysrKWZvcih2YXIgbiBpbiB0PWFyZ3VtZW50c1tvXSx0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKTtyZXR1cm4gZX0sZmU9dGUmJi9GaXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxtZT1bJ2F1dG8tc3RhcnQnLCdhdXRvJywnYXV0by1lbmQnLCd0b3Atc3RhcnQnLCd0b3AnLCd0b3AtZW5kJywncmlnaHQtc3RhcnQnLCdyaWdodCcsJ3JpZ2h0LWVuZCcsJ2JvdHRvbS1lbmQnLCdib3R0b20nLCdib3R0b20tc3RhcnQnLCdsZWZ0LWVuZCcsJ2xlZnQnLCdsZWZ0LXN0YXJ0J10saGU9bWUuc2xpY2UoMyksY2U9e0ZMSVA6J2ZsaXAnLENMT0NLV0lTRTonY2xvY2t3aXNlJyxDT1VOVEVSQ0xPQ0tXSVNFOidjb3VudGVyY2xvY2t3aXNlJ30sZ2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KG8sbil7dmFyIGk9dGhpcyxyPTI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtzZSh0aGlzLHQpLHRoaXMuc2NoZWR1bGVVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGkudXBkYXRlKX0sdGhpcy51cGRhdGU9aWUodGhpcy51cGRhdGUuYmluZCh0aGlzKSksdGhpcy5vcHRpb25zPWxlKHt9LHQuRGVmYXVsdHMsciksdGhpcy5zdGF0ZT17aXNEZXN0cm95ZWQ6ITEsaXNDcmVhdGVkOiExLHNjcm9sbFBhcmVudHM6W119LHRoaXMucmVmZXJlbmNlPW8mJm8uanF1ZXJ5P29bMF06byx0aGlzLnBvcHBlcj1uJiZuLmpxdWVyeT9uWzBdOm4sdGhpcy5vcHRpb25zLm1vZGlmaWVycz17fSxPYmplY3Qua2V5cyhsZSh7fSx0LkRlZmF1bHRzLm1vZGlmaWVycyxyLm1vZGlmaWVycykpLmZvckVhY2goZnVuY3Rpb24oZSl7aS5vcHRpb25zLm1vZGlmaWVyc1tlXT1sZSh7fSx0LkRlZmF1bHRzLm1vZGlmaWVyc1tlXXx8e30sci5tb2RpZmllcnM/ci5tb2RpZmllcnNbZV06e30pfSksdGhpcy5tb2RpZmllcnM9T2JqZWN0LmtleXModGhpcy5vcHRpb25zLm1vZGlmaWVycykubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBsZSh7bmFtZTplfSxpLm9wdGlvbnMubW9kaWZpZXJzW2VdKX0pLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5vcmRlci10Lm9yZGVyfSksdGhpcy5tb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmVuYWJsZWQmJmUodC5vbkxvYWQpJiZ0Lm9uTG9hZChpLnJlZmVyZW5jZSxpLnBvcHBlcixpLm9wdGlvbnMsdCxpLnN0YXRlKX0pLHRoaXMudXBkYXRlKCk7dmFyIHA9dGhpcy5vcHRpb25zLmV2ZW50c0VuYWJsZWQ7cCYmdGhpcy5lbmFibGVFdmVudExpc3RlbmVycygpLHRoaXMuc3RhdGUuZXZlbnRzRW5hYmxlZD1wfXJldHVybiBkZSh0LFt7a2V5Oid1cGRhdGUnLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGsuY2FsbCh0aGlzKX19LHtrZXk6J2Rlc3Ryb3knLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEguY2FsbCh0aGlzKX19LHtrZXk6J2VuYWJsZUV2ZW50TGlzdGVuZXJzJyx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBJLmNhbGwodGhpcyl9fSx7a2V5OidkaXNhYmxlRXZlbnRMaXN0ZW5lcnMnLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIFUuY2FsbCh0aGlzKX19XSksdH0oKTtyZXR1cm4gZ2UuVXRpbHM9KCd1bmRlZmluZWQnPT10eXBlb2Ygd2luZG93P2dsb2JhbDp3aW5kb3cpLlBvcHBlclV0aWxzLGdlLnBsYWNlbWVudHM9bWUsZ2UuRGVmYXVsdHM9e3BsYWNlbWVudDonYm90dG9tJyxwb3NpdGlvbkZpeGVkOiExLGV2ZW50c0VuYWJsZWQ6ITAscmVtb3ZlT25EZXN0cm95OiExLG9uQ3JlYXRlOmZ1bmN0aW9uKCl7fSxvblVwZGF0ZTpmdW5jdGlvbigpe30sbW9kaWZpZXJzOntzaGlmdDp7b3JkZXI6MTAwLGVuYWJsZWQ6ITAsZm46ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wbGFjZW1lbnQsbz10LnNwbGl0KCctJylbMF0sbj10LnNwbGl0KCctJylbMV07aWYobil7dmFyIGk9ZS5vZmZzZXRzLHI9aS5yZWZlcmVuY2UscD1pLnBvcHBlcixzPS0xIT09Wydib3R0b20nLCd0b3AnXS5pbmRleE9mKG8pLGQ9cz8nbGVmdCc6J3RvcCcsYT1zPyd3aWR0aCc6J2hlaWdodCcsbD17c3RhcnQ6YWUoe30sZCxyW2RdKSxlbmQ6YWUoe30sZCxyW2RdK3JbYV0tcFthXSl9O2Uub2Zmc2V0cy5wb3BwZXI9bGUoe30scCxsW25dKX1yZXR1cm4gZX19LG9mZnNldDp7b3JkZXI6MjAwLGVuYWJsZWQ6ITAsZm46SixvZmZzZXQ6MH0scHJldmVudE92ZXJmbG93OntvcmRlcjozMDAsZW5hYmxlZDohMCxmbjpmdW5jdGlvbihlLHQpe3ZhciBvPXQuYm91bmRhcmllc0VsZW1lbnR8fHAoZS5pbnN0YW5jZS5wb3BwZXIpO2UuaW5zdGFuY2UucmVmZXJlbmNlPT09byYmKG89cChvKSk7dmFyIG49QigndHJhbnNmb3JtJyksaT1lLmluc3RhbmNlLnBvcHBlci5zdHlsZSxyPWkudG9wLHM9aS5sZWZ0LGQ9aVtuXTtpLnRvcD0nJyxpLmxlZnQ9JycsaVtuXT0nJzt2YXIgYT12KGUuaW5zdGFuY2UucG9wcGVyLGUuaW5zdGFuY2UucmVmZXJlbmNlLHQucGFkZGluZyxvLGUucG9zaXRpb25GaXhlZCk7aS50b3A9cixpLmxlZnQ9cyxpW25dPWQsdC5ib3VuZGFyaWVzPWE7dmFyIGw9dC5wcmlvcml0eSxmPWUub2Zmc2V0cy5wb3BwZXIsbT17cHJpbWFyeTpmdW5jdGlvbihlKXt2YXIgbz1mW2VdO3JldHVybiBmW2VdPGFbZV0mJiF0LmVzY2FwZVdpdGhSZWZlcmVuY2UmJihvPWVlKGZbZV0sYVtlXSkpLGFlKHt9LGUsbyl9LHNlY29uZGFyeTpmdW5jdGlvbihlKXt2YXIgbz0ncmlnaHQnPT09ZT8nbGVmdCc6J3RvcCcsbj1mW29dO3JldHVybiBmW2VdPmFbZV0mJiF0LmVzY2FwZVdpdGhSZWZlcmVuY2UmJihuPVEoZltvXSxhW2VdLSgncmlnaHQnPT09ZT9mLndpZHRoOmYuaGVpZ2h0KSkpLGFlKHt9LG8sbil9fTtyZXR1cm4gbC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PS0xPT09WydsZWZ0JywndG9wJ10uaW5kZXhPZihlKT8nc2Vjb25kYXJ5JzoncHJpbWFyeSc7Zj1sZSh7fSxmLG1bdF0oZSkpfSksZS5vZmZzZXRzLnBvcHBlcj1mLGV9LHByaW9yaXR5OlsnbGVmdCcsJ3JpZ2h0JywndG9wJywnYm90dG9tJ10scGFkZGluZzo1LGJvdW5kYXJpZXNFbGVtZW50OidzY3JvbGxQYXJlbnQnfSxrZWVwVG9nZXRoZXI6e29yZGVyOjQwMCxlbmFibGVkOiEwLGZuOmZ1bmN0aW9uKGUpe3ZhciB0PWUub2Zmc2V0cyxvPXQucG9wcGVyLG49dC5yZWZlcmVuY2UsaT1lLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdLHI9WixwPS0xIT09Wyd0b3AnLCdib3R0b20nXS5pbmRleE9mKGkpLHM9cD8ncmlnaHQnOidib3R0b20nLGQ9cD8nbGVmdCc6J3RvcCcsYT1wPyd3aWR0aCc6J2hlaWdodCc7cmV0dXJuIG9bc108cihuW2RdKSYmKGUub2Zmc2V0cy5wb3BwZXJbZF09cihuW2RdKS1vW2FdKSxvW2RdPnIobltzXSkmJihlLm9mZnNldHMucG9wcGVyW2RdPXIobltzXSkpLGV9fSxhcnJvdzp7b3JkZXI6NTAwLGVuYWJsZWQ6ITAsZm46ZnVuY3Rpb24oZSxvKXt2YXIgbjtpZighSyhlLmluc3RhbmNlLm1vZGlmaWVycywnYXJyb3cnLCdrZWVwVG9nZXRoZXInKSlyZXR1cm4gZTt2YXIgaT1vLmVsZW1lbnQ7aWYoJ3N0cmluZyc9PXR5cGVvZiBpKXtpZihpPWUuaW5zdGFuY2UucG9wcGVyLnF1ZXJ5U2VsZWN0b3IoaSksIWkpcmV0dXJuIGU7fWVsc2UgaWYoIWUuaW5zdGFuY2UucG9wcGVyLmNvbnRhaW5zKGkpKXJldHVybiBjb25zb2xlLndhcm4oJ1dBUk5JTkc6IGBhcnJvdy5lbGVtZW50YCBtdXN0IGJlIGNoaWxkIG9mIGl0cyBwb3BwZXIgZWxlbWVudCEnKSxlO3ZhciByPWUucGxhY2VtZW50LnNwbGl0KCctJylbMF0scD1lLm9mZnNldHMscz1wLnBvcHBlcixkPXAucmVmZXJlbmNlLGE9LTEhPT1bJ2xlZnQnLCdyaWdodCddLmluZGV4T2YociksbD1hPydoZWlnaHQnOid3aWR0aCcsZj1hPydUb3AnOidMZWZ0JyxtPWYudG9Mb3dlckNhc2UoKSxoPWE/J2xlZnQnOid0b3AnLGM9YT8nYm90dG9tJzoncmlnaHQnLHU9UyhpKVtsXTtkW2NdLXU8c1ttXSYmKGUub2Zmc2V0cy5wb3BwZXJbbV0tPXNbbV0tKGRbY10tdSkpLGRbbV0rdT5zW2NdJiYoZS5vZmZzZXRzLnBvcHBlclttXSs9ZFttXSt1LXNbY10pLGUub2Zmc2V0cy5wb3BwZXI9ZyhlLm9mZnNldHMucG9wcGVyKTt2YXIgYj1kW21dK2RbbF0vMi11LzIsdz10KGUuaW5zdGFuY2UucG9wcGVyKSx5PXBhcnNlRmxvYXQod1snbWFyZ2luJytmXSwxMCksRT1wYXJzZUZsb2F0KHdbJ2JvcmRlcicrZisnV2lkdGgnXSwxMCksdj1iLWUub2Zmc2V0cy5wb3BwZXJbbV0teS1FO3JldHVybiB2PWVlKFEoc1tsXS11LHYpLDApLGUuYXJyb3dFbGVtZW50PWksZS5vZmZzZXRzLmFycm93PShuPXt9LGFlKG4sbSwkKHYpKSxhZShuLGgsJycpLG4pLGV9LGVsZW1lbnQ6J1t4LWFycm93XSd9LGZsaXA6e29yZGVyOjYwMCxlbmFibGVkOiEwLGZuOmZ1bmN0aW9uKGUsdCl7aWYoVyhlLmluc3RhbmNlLm1vZGlmaWVycywnaW5uZXInKSlyZXR1cm4gZTtpZihlLmZsaXBwZWQmJmUucGxhY2VtZW50PT09ZS5vcmlnaW5hbFBsYWNlbWVudClyZXR1cm4gZTt2YXIgbz12KGUuaW5zdGFuY2UucG9wcGVyLGUuaW5zdGFuY2UucmVmZXJlbmNlLHQucGFkZGluZyx0LmJvdW5kYXJpZXNFbGVtZW50LGUucG9zaXRpb25GaXhlZCksbj1lLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdLGk9VChuKSxyPWUucGxhY2VtZW50LnNwbGl0KCctJylbMV18fCcnLHA9W107c3dpdGNoKHQuYmVoYXZpb3Ipe2Nhc2UgY2UuRkxJUDpwPVtuLGldO2JyZWFrO2Nhc2UgY2UuQ0xPQ0tXSVNFOnA9RyhuKTticmVhaztjYXNlIGNlLkNPVU5URVJDTE9DS1dJU0U6cD1HKG4sITApO2JyZWFrO2RlZmF1bHQ6cD10LmJlaGF2aW9yO31yZXR1cm4gcC5mb3JFYWNoKGZ1bmN0aW9uKHMsZCl7aWYobiE9PXN8fHAubGVuZ3RoPT09ZCsxKXJldHVybiBlO249ZS5wbGFjZW1lbnQuc3BsaXQoJy0nKVswXSxpPVQobik7dmFyIGE9ZS5vZmZzZXRzLnBvcHBlcixsPWUub2Zmc2V0cy5yZWZlcmVuY2UsZj1aLG09J2xlZnQnPT09biYmZihhLnJpZ2h0KT5mKGwubGVmdCl8fCdyaWdodCc9PT1uJiZmKGEubGVmdCk8ZihsLnJpZ2h0KXx8J3RvcCc9PT1uJiZmKGEuYm90dG9tKT5mKGwudG9wKXx8J2JvdHRvbSc9PT1uJiZmKGEudG9wKTxmKGwuYm90dG9tKSxoPWYoYS5sZWZ0KTxmKG8ubGVmdCksYz1mKGEucmlnaHQpPmYoby5yaWdodCksZz1mKGEudG9wKTxmKG8udG9wKSx1PWYoYS5ib3R0b20pPmYoby5ib3R0b20pLGI9J2xlZnQnPT09biYmaHx8J3JpZ2h0Jz09PW4mJmN8fCd0b3AnPT09biYmZ3x8J2JvdHRvbSc9PT1uJiZ1LHc9LTEhPT1bJ3RvcCcsJ2JvdHRvbSddLmluZGV4T2YobikseT0hIXQuZmxpcFZhcmlhdGlvbnMmJih3JiYnc3RhcnQnPT09ciYmaHx8dyYmJ2VuZCc9PT1yJiZjfHwhdyYmJ3N0YXJ0Jz09PXImJmd8fCF3JiYnZW5kJz09PXImJnUpLEU9ISF0LmZsaXBWYXJpYXRpb25zQnlDb250ZW50JiYodyYmJ3N0YXJ0Jz09PXImJmN8fHcmJidlbmQnPT09ciYmaHx8IXcmJidzdGFydCc9PT1yJiZ1fHwhdyYmJ2VuZCc9PT1yJiZnKSx2PXl8fEU7KG18fGJ8fHYpJiYoZS5mbGlwcGVkPSEwLChtfHxiKSYmKG49cFtkKzFdKSx2JiYocj16KHIpKSxlLnBsYWNlbWVudD1uKyhyPyctJytyOicnKSxlLm9mZnNldHMucG9wcGVyPWxlKHt9LGUub2Zmc2V0cy5wb3BwZXIsQyhlLmluc3RhbmNlLnBvcHBlcixlLm9mZnNldHMucmVmZXJlbmNlLGUucGxhY2VtZW50KSksZT1QKGUuaW5zdGFuY2UubW9kaWZpZXJzLGUsJ2ZsaXAnKSl9KSxlfSxiZWhhdmlvcjonZmxpcCcscGFkZGluZzo1LGJvdW5kYXJpZXNFbGVtZW50Oid2aWV3cG9ydCcsZmxpcFZhcmlhdGlvbnM6ITEsZmxpcFZhcmlhdGlvbnNCeUNvbnRlbnQ6ITF9LGlubmVyOntvcmRlcjo3MDAsZW5hYmxlZDohMSxmbjpmdW5jdGlvbihlKXt2YXIgdD1lLnBsYWNlbWVudCxvPXQuc3BsaXQoJy0nKVswXSxuPWUub2Zmc2V0cyxpPW4ucG9wcGVyLHI9bi5yZWZlcmVuY2UscD0tMSE9PVsnbGVmdCcsJ3JpZ2h0J10uaW5kZXhPZihvKSxzPS0xPT09Wyd0b3AnLCdsZWZ0J10uaW5kZXhPZihvKTtyZXR1cm4gaVtwPydsZWZ0JzondG9wJ109cltvXS0ocz9pW3A/J3dpZHRoJzonaGVpZ2h0J106MCksZS5wbGFjZW1lbnQ9VCh0KSxlLm9mZnNldHMucG9wcGVyPWcoaSksZX19LGhpZGU6e29yZGVyOjgwMCxlbmFibGVkOiEwLGZuOmZ1bmN0aW9uKGUpe2lmKCFLKGUuaW5zdGFuY2UubW9kaWZpZXJzLCdoaWRlJywncHJldmVudE92ZXJmbG93JykpcmV0dXJuIGU7dmFyIHQ9ZS5vZmZzZXRzLnJlZmVyZW5jZSxvPUQoZS5pbnN0YW5jZS5tb2RpZmllcnMsZnVuY3Rpb24oZSl7cmV0dXJuJ3ByZXZlbnRPdmVyZmxvdyc9PT1lLm5hbWV9KS5ib3VuZGFyaWVzO2lmKHQuYm90dG9tPG8udG9wfHx0LmxlZnQ+by5yaWdodHx8dC50b3A+by5ib3R0b218fHQucmlnaHQ8by5sZWZ0KXtpZighMD09PWUuaGlkZSlyZXR1cm4gZTtlLmhpZGU9ITAsZS5hdHRyaWJ1dGVzWyd4LW91dC1vZi1ib3VuZGFyaWVzJ109Jyd9ZWxzZXtpZighMT09PWUuaGlkZSlyZXR1cm4gZTtlLmhpZGU9ITEsZS5hdHRyaWJ1dGVzWyd4LW91dC1vZi1ib3VuZGFyaWVzJ109ITF9cmV0dXJuIGV9fSxjb21wdXRlU3R5bGU6e29yZGVyOjg1MCxlbmFibGVkOiEwLGZuOmZ1bmN0aW9uKGUsdCl7dmFyIG89dC54LG49dC55LGk9ZS5vZmZzZXRzLnBvcHBlcixyPUQoZS5pbnN0YW5jZS5tb2RpZmllcnMsZnVuY3Rpb24oZSl7cmV0dXJuJ2FwcGx5U3R5bGUnPT09ZS5uYW1lfSkuZ3B1QWNjZWxlcmF0aW9uO3ZvaWQgMCE9PXImJmNvbnNvbGUud2FybignV0FSTklORzogYGdwdUFjY2VsZXJhdGlvbmAgb3B0aW9uIG1vdmVkIHRvIGBjb21wdXRlU3R5bGVgIG1vZGlmaWVyIGFuZCB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIFBvcHBlci5qcyEnKTt2YXIgcyxkLGE9dm9pZCAwPT09cj90LmdwdUFjY2VsZXJhdGlvbjpyLGw9cChlLmluc3RhbmNlLnBvcHBlciksZj11KGwpLG09e3Bvc2l0aW9uOmkucG9zaXRpb259LGg9cShlLDI+d2luZG93LmRldmljZVBpeGVsUmF0aW98fCFmZSksYz0nYm90dG9tJz09PW8/J3RvcCc6J2JvdHRvbScsZz0ncmlnaHQnPT09bj8nbGVmdCc6J3JpZ2h0JyxiPUIoJ3RyYW5zZm9ybScpO2lmKGQ9J2JvdHRvbSc9PWM/J0hUTUwnPT09bC5ub2RlTmFtZT8tbC5jbGllbnRIZWlnaHQraC5ib3R0b206LWYuaGVpZ2h0K2guYm90dG9tOmgudG9wLHM9J3JpZ2h0Jz09Zz8nSFRNTCc9PT1sLm5vZGVOYW1lPy1sLmNsaWVudFdpZHRoK2gucmlnaHQ6LWYud2lkdGgraC5yaWdodDpoLmxlZnQsYSYmYiltW2JdPSd0cmFuc2xhdGUzZCgnK3MrJ3B4LCAnK2QrJ3B4LCAwKScsbVtjXT0wLG1bZ109MCxtLndpbGxDaGFuZ2U9J3RyYW5zZm9ybSc7ZWxzZXt2YXIgdz0nYm90dG9tJz09Yz8tMToxLHk9J3JpZ2h0Jz09Zz8tMToxO21bY109ZCp3LG1bZ109cyp5LG0ud2lsbENoYW5nZT1jKycsICcrZ312YXIgRT17IngtcGxhY2VtZW50IjplLnBsYWNlbWVudH07cmV0dXJuIGUuYXR0cmlidXRlcz1sZSh7fSxFLGUuYXR0cmlidXRlcyksZS5zdHlsZXM9bGUoe30sbSxlLnN0eWxlcyksZS5hcnJvd1N0eWxlcz1sZSh7fSxlLm9mZnNldHMuYXJyb3csZS5hcnJvd1N0eWxlcyksZX0sZ3B1QWNjZWxlcmF0aW9uOiEwLHg6J2JvdHRvbScseToncmlnaHQnfSxhcHBseVN0eWxlOntvcmRlcjo5MDAsZW5hYmxlZDohMCxmbjpmdW5jdGlvbihlKXtyZXR1cm4gVihlLmluc3RhbmNlLnBvcHBlcixlLnN0eWxlcyksaihlLmluc3RhbmNlLnBvcHBlcixlLmF0dHJpYnV0ZXMpLGUuYXJyb3dFbGVtZW50JiZPYmplY3Qua2V5cyhlLmFycm93U3R5bGVzKS5sZW5ndGgmJlYoZS5hcnJvd0VsZW1lbnQsZS5hcnJvd1N0eWxlcyksZX0sb25Mb2FkOmZ1bmN0aW9uKGUsdCxvLG4saSl7dmFyIHI9TChpLHQsZSxvLnBvc2l0aW9uRml4ZWQpLHA9TyhvLnBsYWNlbWVudCxyLHQsZSxvLm1vZGlmaWVycy5mbGlwLmJvdW5kYXJpZXNFbGVtZW50LG8ubW9kaWZpZXJzLmZsaXAucGFkZGluZyk7cmV0dXJuIHQuc2V0QXR0cmlidXRlKCd4LXBsYWNlbWVudCcscCksVih0LHtwb3NpdGlvbjpvLnBvc2l0aW9uRml4ZWQ/J2ZpeGVkJzonYWJzb2x1dGUnfSksb30sZ3B1QWNjZWxlcmF0aW9uOnZvaWQgMH19fSxnZX0pOwovLyMgc291cmNlTWFwcGluZ1VSTD1wb3BwZXIubWluLmpzLm1hcAo=" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="data:application/javascript; charset=utf-8;base64,LyohCiAgKiBCb290c3RyYXAgdjQuNS4wIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKQogICogQ29weXJpZ2h0IDIwMTEtMjAyMCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKQogICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSkKICAqLwohZnVuY3Rpb24odCxlKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP2UoZXhwb3J0cyxyZXF1aXJlKCJqcXVlcnkiKSxyZXF1aXJlKCJwb3BwZXIuanMiKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJleHBvcnRzIiwianF1ZXJ5IiwicG9wcGVyLmpzIl0sZSk6ZSgodD10fHxzZWxmKS5ib290c3RyYXA9e30sdC5qUXVlcnksdC5Qb3BwZXIpfSh0aGlzLChmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGkua2V5LGkpfX1mdW5jdGlvbiBvKHQsZSxuKXtyZXR1cm4gZSYmaSh0LnByb3RvdHlwZSxlKSxuJiZpKHQsbiksdH1mdW5jdGlvbiBzKHQsZSxuKXtyZXR1cm4gZSBpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPW4sdH1mdW5jdGlvbiByKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYoaT1pLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixpKX1yZXR1cm4gbn1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP3IoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtzKHQsZSxuW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpyKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSkpfXJldHVybiB0fWU9ZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImRlZmF1bHQiKT9lLmRlZmF1bHQ6ZSxuPW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCJkZWZhdWx0Iik/bi5kZWZhdWx0Om47ZnVuY3Rpb24gbCh0KXt2YXIgbj10aGlzLGk9ITE7cmV0dXJuIGUodGhpcykub25lKGMuVFJBTlNJVElPTl9FTkQsKGZ1bmN0aW9uKCl7aT0hMH0pKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe2l8fGMudHJpZ2dlclRyYW5zaXRpb25FbmQobil9KSx0KSx0aGlzfXZhciBjPXtUUkFOU0lUSU9OX0VORDoiYnNUcmFuc2l0aW9uRW5kIixnZXRVSUQ6ZnVuY3Rpb24odCl7ZG97dCs9fn4oMWU2Kk1hdGgucmFuZG9tKCkpfXdoaWxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpKTtyZXR1cm4gdH0sZ2V0U2VsZWN0b3JGcm9tRWxlbWVudDpmdW5jdGlvbih0KXt2YXIgZT10LmdldEF0dHJpYnV0ZSgiZGF0YS10YXJnZXQiKTtpZighZXx8IiMiPT09ZSl7dmFyIG49dC5nZXRBdHRyaWJ1dGUoImhyZWYiKTtlPW4mJiIjIiE9PW4/bi50cmltKCk6IiJ9dHJ5e3JldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpP2U6bnVsbH1jYXRjaCh0KXtyZXR1cm4gbnVsbH19LGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50OmZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiAwO3ZhciBuPWUodCkuY3NzKCJ0cmFuc2l0aW9uLWR1cmF0aW9uIiksaT1lKHQpLmNzcygidHJhbnNpdGlvbi1kZWxheSIpLG89cGFyc2VGbG9hdChuKSxzPXBhcnNlRmxvYXQoaSk7cmV0dXJuIG98fHM/KG49bi5zcGxpdCgiLCIpWzBdLGk9aS5zcGxpdCgiLCIpWzBdLDFlMyoocGFyc2VGbG9hdChuKStwYXJzZUZsb2F0KGkpKSk6MH0scmVmbG93OmZ1bmN0aW9uKHQpe3JldHVybiB0Lm9mZnNldEhlaWdodH0sdHJpZ2dlclRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24odCl7ZSh0KS50cmlnZ2VyKCJ0cmFuc2l0aW9uZW5kIil9LHN1cHBvcnRzVHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKCJ0cmFuc2l0aW9uZW5kIil9LGlzRWxlbWVudDpmdW5jdGlvbih0KXtyZXR1cm4odFswXXx8dCkubm9kZVR5cGV9LHR5cGVDaGVja0NvbmZpZzpmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpIGluIG4paWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4saSkpe3ZhciBvPW5baV0scz1lW2ldLHI9cyYmYy5pc0VsZW1lbnQocyk/ImVsZW1lbnQiOm51bGw9PT0oYT1zKXx8InVuZGVmaW5lZCI9PXR5cGVvZiBhPyIiK2E6e30udG9TdHJpbmcuY2FsbChhKS5tYXRjaCgvXHMoW2Etel0rKS9pKVsxXS50b0xvd2VyQ2FzZSgpO2lmKCFuZXcgUmVnRXhwKG8pLnRlc3QocikpdGhyb3cgbmV3IEVycm9yKHQudG9VcHBlckNhc2UoKSsnOiBPcHRpb24gIicraSsnIiBwcm92aWRlZCB0eXBlICInK3IrJyIgYnV0IGV4cGVjdGVkIHR5cGUgIicrbysnIi4nKX12YXIgYX0sZmluZFNoYWRvd1Jvb3Q6ZnVuY3Rpb24odCl7aWYoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRhY2hTaGFkb3cpcmV0dXJuIG51bGw7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQuZ2V0Um9vdE5vZGUpe3ZhciBlPXQuZ2V0Um9vdE5vZGUoKTtyZXR1cm4gZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q/ZTpudWxsfXJldHVybiB0IGluc3RhbmNlb2YgU2hhZG93Um9vdD90OnQucGFyZW50Tm9kZT9jLmZpbmRTaGFkb3dSb290KHQucGFyZW50Tm9kZSk6bnVsbH0salF1ZXJ5RGV0ZWN0aW9uOmZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5LiBqUXVlcnkgbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgQm9vdHN0cmFwJ3MgSmF2YVNjcmlwdC4iKTt2YXIgdD1lLmZuLmpxdWVyeS5zcGxpdCgiICIpWzBdLnNwbGl0KCIuIik7aWYodFswXTwyJiZ0WzFdPDl8fDE9PT10WzBdJiY5PT09dFsxXSYmdFsyXTwxfHx0WzBdPj00KXRocm93IG5ldyBFcnJvcigiQm9vdHN0cmFwJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBhdCBsZWFzdCBqUXVlcnkgdjEuOS4xIGJ1dCBsZXNzIHRoYW4gdjQuMC4wIil9fTtjLmpRdWVyeURldGVjdGlvbigpLGUuZm4uZW11bGF0ZVRyYW5zaXRpb25FbmQ9bCxlLmV2ZW50LnNwZWNpYWxbYy5UUkFOU0lUSU9OX0VORF09e2JpbmRUeXBlOiJ0cmFuc2l0aW9uZW5kIixkZWxlZ2F0ZVR5cGU6InRyYW5zaXRpb25lbmQiLGhhbmRsZTpmdW5jdGlvbih0KXtpZihlKHQudGFyZ2V0KS5pcyh0aGlzKSlyZXR1cm4gdC5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIgaD0iYWxlcnQiLHU9ZS5mbltoXSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9lbGVtZW50PXR9dmFyIG49dC5wcm90b3R5cGU7cmV0dXJuIG4uY2xvc2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZWxlbWVudDt0JiYoZT10aGlzLl9nZXRSb290RWxlbWVudCh0KSksdGhpcy5fdHJpZ2dlckNsb3NlRXZlbnQoZSkuaXNEZWZhdWx0UHJldmVudGVkKCl8fHRoaXMuX3JlbW92ZUVsZW1lbnQoZSl9LG4uZGlzcG9zZT1mdW5jdGlvbigpe2UucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LCJicy5hbGVydCIpLHRoaXMuX2VsZW1lbnQ9bnVsbH0sbi5fZ2V0Um9vdEVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIG49Yy5nZXRTZWxlY3RvckZyb21FbGVtZW50KHQpLGk9ITE7cmV0dXJuIG4mJihpPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobikpLGl8fChpPWUodCkuY2xvc2VzdCgiLmFsZXJ0IilbMF0pLGl9LG4uX3RyaWdnZXJDbG9zZUV2ZW50PWZ1bmN0aW9uKHQpe3ZhciBuPWUuRXZlbnQoImNsb3NlLmJzLmFsZXJ0Iik7cmV0dXJuIGUodCkudHJpZ2dlcihuKSxufSxuLl9yZW1vdmVFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7aWYoZSh0KS5yZW1vdmVDbGFzcygic2hvdyIpLGUodCkuaGFzQ2xhc3MoImZhZGUiKSl7dmFyIGk9Yy5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0KTtlKHQpLm9uZShjLlRSQU5TSVRJT05fRU5ELChmdW5jdGlvbihlKXtyZXR1cm4gbi5fZGVzdHJveUVsZW1lbnQodCxlKX0pKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChpKX1lbHNlIHRoaXMuX2Rlc3Ryb3lFbGVtZW50KHQpfSxuLl9kZXN0cm95RWxlbWVudD1mdW5jdGlvbih0KXtlKHQpLmRldGFjaCgpLnRyaWdnZXIoImNsb3NlZC5icy5hbGVydCIpLnJlbW92ZSgpfSx0Ll9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt2YXIgaT1lKHRoaXMpLG89aS5kYXRhKCJicy5hbGVydCIpO298fChvPW5ldyB0KHRoaXMpLGkuZGF0YSgiYnMuYWxlcnQiLG8pKSwiY2xvc2UiPT09biYmb1tuXSh0aGlzKX0pKX0sdC5faGFuZGxlRGlzbWlzcz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZSYmZS5wcmV2ZW50RGVmYXVsdCgpLHQuY2xvc2UodGhpcyl9fSxvKHQsbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIjQuNS4wIn19XSksdH0oKTtlKGRvY3VtZW50KS5vbigiY2xpY2suYnMuYWxlcnQuZGF0YS1hcGkiLCdbZGF0YS1kaXNtaXNzPSJhbGVydCJdJyxkLl9oYW5kbGVEaXNtaXNzKG5ldyBkKSksZS5mbltoXT1kLl9qUXVlcnlJbnRlcmZhY2UsZS5mbltoXS5Db25zdHJ1Y3Rvcj1kLGUuZm5baF0ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuW2hdPXUsZC5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgZj1lLmZuLmJ1dHRvbixnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9lbGVtZW50PXR9dmFyIG49dC5wcm90b3R5cGU7cmV0dXJuIG4udG9nZ2xlPWZ1bmN0aW9uKCl7dmFyIHQ9ITAsbj0hMCxpPWUodGhpcy5fZWxlbWVudCkuY2xvc2VzdCgnW2RhdGEtdG9nZ2xlPSJidXR0b25zIl0nKVswXTtpZihpKXt2YXIgbz10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Om5vdChbdHlwZT0iaGlkZGVuIl0pJyk7aWYobyl7aWYoInJhZGlvIj09PW8udHlwZSlpZihvLmNoZWNrZWQmJnRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJhY3RpdmUiKSl0PSExO2Vsc2V7dmFyIHM9aS5xdWVyeVNlbGVjdG9yKCIuYWN0aXZlIik7cyYmZShzKS5yZW1vdmVDbGFzcygiYWN0aXZlIil9dCYmKCJjaGVja2JveCIhPT1vLnR5cGUmJiJyYWRpbyIhPT1vLnR5cGV8fChvLmNoZWNrZWQ9IXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJhY3RpdmUiKSksZShvKS50cmlnZ2VyKCJjaGFuZ2UiKSksby5mb2N1cygpLG49ITF9fXRoaXMuX2VsZW1lbnQuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfHx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygiZGlzYWJsZWQiKXx8KG4mJnRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLCF0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygiYWN0aXZlIikpLHQmJmUodGhpcy5fZWxlbWVudCkudG9nZ2xlQ2xhc3MoImFjdGl2ZSIpKX0sbi5kaXNwb3NlPWZ1bmN0aW9uKCl7ZS5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsImJzLmJ1dHRvbiIpLHRoaXMuX2VsZW1lbnQ9bnVsbH0sdC5falF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGk9ZSh0aGlzKS5kYXRhKCJicy5idXR0b24iKTtpfHwoaT1uZXcgdCh0aGlzKSxlKHRoaXMpLmRhdGEoImJzLmJ1dHRvbiIsaSkpLCJ0b2dnbGUiPT09biYmaVtuXSgpfSkpfSxvKHQsbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIjQuNS4wIn19XSksdH0oKTtlKGRvY3VtZW50KS5vbigiY2xpY2suYnMuYnV0dG9uLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlXj0iYnV0dG9uIl0nLChmdW5jdGlvbih0KXt2YXIgbj10LnRhcmdldCxpPW47aWYoZShuKS5oYXNDbGFzcygiYnRuIil8fChuPWUobikuY2xvc2VzdCgiLmJ0biIpWzBdKSwhbnx8bi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fG4uY2xhc3NMaXN0LmNvbnRhaW5zKCJkaXNhYmxlZCIpKXQucHJldmVudERlZmF1bHQoKTtlbHNle3ZhciBvPW4ucXVlcnlTZWxlY3RvcignaW5wdXQ6bm90KFt0eXBlPSJoaWRkZW4iXSknKTtpZihvJiYoby5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fG8uY2xhc3NMaXN0LmNvbnRhaW5zKCJkaXNhYmxlZCIpKSlyZXR1cm4gdm9pZCB0LnByZXZlbnREZWZhdWx0KCk7IkxBQkVMIj09PWkudGFnTmFtZSYmbyYmImNoZWNrYm94Ij09PW8udHlwZSYmdC5wcmV2ZW50RGVmYXVsdCgpLGcuX2pRdWVyeUludGVyZmFjZS5jYWxsKGUobiksInRvZ2dsZSIpfX0pKS5vbigiZm9jdXMuYnMuYnV0dG9uLmRhdGEtYXBpIGJsdXIuYnMuYnV0dG9uLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlXj0iYnV0dG9uIl0nLChmdW5jdGlvbih0KXt2YXIgbj1lKHQudGFyZ2V0KS5jbG9zZXN0KCIuYnRuIilbMF07ZShuKS50b2dnbGVDbGFzcygiZm9jdXMiLC9eZm9jdXMoaW4pPyQvLnRlc3QodC50eXBlKSl9KSksZSh3aW5kb3cpLm9uKCJsb2FkLmJzLmJ1dHRvbi5kYXRhLWFwaSIsKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtdG9nZ2xlPSJidXR0b25zIl0gLmJ0bicpKSxlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXt2YXIgaT10W2VdLG89aS5xdWVyeVNlbGVjdG9yKCdpbnB1dDpub3QoW3R5cGU9ImhpZGRlbiJdKScpO28uY2hlY2tlZHx8by5oYXNBdHRyaWJ1dGUoImNoZWNrZWQiKT9pLmNsYXNzTGlzdC5hZGQoImFjdGl2ZSIpOmkuY2xhc3NMaXN0LnJlbW92ZSgiYWN0aXZlIil9Zm9yKHZhciBzPTAscj0odD1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXRvZ2dsZT0iYnV0dG9uIl0nKSkpLmxlbmd0aDtzPHI7cysrKXt2YXIgYT10W3NdOyJ0cnVlIj09PWEuZ2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiKT9hLmNsYXNzTGlzdC5hZGQoImFjdGl2ZSIpOmEuY2xhc3NMaXN0LnJlbW92ZSgiYWN0aXZlIil9fSkpLGUuZm4uYnV0dG9uPWcuX2pRdWVyeUludGVyZmFjZSxlLmZuLmJ1dHRvbi5Db25zdHJ1Y3Rvcj1nLGUuZm4uYnV0dG9uLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mbi5idXR0b249ZixnLl9qUXVlcnlJbnRlcmZhY2V9O3ZhciBtPSJjYXJvdXNlbCIscD0iLmJzLmNhcm91c2VsIixfPWUuZm5bbV0sdj17aW50ZXJ2YWw6NWUzLGtleWJvYXJkOiEwLHNsaWRlOiExLHBhdXNlOiJob3ZlciIsd3JhcDohMCx0b3VjaDohMH0sYj17aW50ZXJ2YWw6IihudW1iZXJ8Ym9vbGVhbikiLGtleWJvYXJkOiJib29sZWFuIixzbGlkZToiKGJvb2xlYW58c3RyaW5nKSIscGF1c2U6IihzdHJpbmd8Ym9vbGVhbikiLHdyYXA6ImJvb2xlYW4iLHRvdWNoOiJib29sZWFuIn0seT17VE9VQ0g6InRvdWNoIixQRU46InBlbiJ9LEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5faXRlbXM9bnVsbCx0aGlzLl9pbnRlcnZhbD1udWxsLHRoaXMuX2FjdGl2ZUVsZW1lbnQ9bnVsbCx0aGlzLl9pc1BhdXNlZD0hMSx0aGlzLl9pc1NsaWRpbmc9ITEsdGhpcy50b3VjaFRpbWVvdXQ9bnVsbCx0aGlzLnRvdWNoU3RhcnRYPTAsdGhpcy50b3VjaERlbHRhWD0wLHRoaXMuX2NvbmZpZz10aGlzLl9nZXRDb25maWcoZSksdGhpcy5fZWxlbWVudD10LHRoaXMuX2luZGljYXRvcnNFbGVtZW50PXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcigiLmNhcm91c2VsLWluZGljYXRvcnMiKSx0aGlzLl90b3VjaFN1cHBvcnRlZD0ib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8bmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjAsdGhpcy5fcG9pbnRlckV2ZW50PUJvb2xlYW4od2luZG93LlBvaW50ZXJFdmVudHx8d2luZG93Lk1TUG9pbnRlckV2ZW50KSx0aGlzLl9hZGRFdmVudExpc3RlbmVycygpfXZhciBuPXQucHJvdG90eXBlO3JldHVybiBuLm5leHQ9ZnVuY3Rpb24oKXt0aGlzLl9pc1NsaWRpbmd8fHRoaXMuX3NsaWRlKCJuZXh0Iil9LG4ubmV4dFdoZW5WaXNpYmxlPWZ1bmN0aW9uKCl7IWRvY3VtZW50LmhpZGRlbiYmZSh0aGlzLl9lbGVtZW50KS5pcygiOnZpc2libGUiKSYmImhpZGRlbiIhPT1lKHRoaXMuX2VsZW1lbnQpLmNzcygidmlzaWJpbGl0eSIpJiZ0aGlzLm5leHQoKX0sbi5wcmV2PWZ1bmN0aW9uKCl7dGhpcy5faXNTbGlkaW5nfHx0aGlzLl9zbGlkZSgicHJldiIpfSxuLnBhdXNlPWZ1bmN0aW9uKHQpe3R8fCh0aGlzLl9pc1BhdXNlZD0hMCksdGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuY2Fyb3VzZWwtaXRlbS1uZXh0LCAuY2Fyb3VzZWwtaXRlbS1wcmV2IikmJihjLnRyaWdnZXJUcmFuc2l0aW9uRW5kKHRoaXMuX2VsZW1lbnQpLHRoaXMuY3ljbGUoITApKSxjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKSx0aGlzLl9pbnRlcnZhbD1udWxsfSxuLmN5Y2xlPWZ1bmN0aW9uKHQpe3R8fCh0aGlzLl9pc1BhdXNlZD0hMSksdGhpcy5faW50ZXJ2YWwmJihjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKSx0aGlzLl9pbnRlcnZhbD1udWxsKSx0aGlzLl9jb25maWcuaW50ZXJ2YWwmJiF0aGlzLl9pc1BhdXNlZCYmKHRoaXMuX2ludGVydmFsPXNldEludGVydmFsKChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU/dGhpcy5uZXh0V2hlblZpc2libGU6dGhpcy5uZXh0KS5iaW5kKHRoaXMpLHRoaXMuX2NvbmZpZy5pbnRlcnZhbCkpfSxuLnRvPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7dGhpcy5fYWN0aXZlRWxlbWVudD10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5hY3RpdmUuY2Fyb3VzZWwtaXRlbSIpO3ZhciBpPXRoaXMuX2dldEl0ZW1JbmRleCh0aGlzLl9hY3RpdmVFbGVtZW50KTtpZighKHQ+dGhpcy5faXRlbXMubGVuZ3RoLTF8fHQ8MCkpaWYodGhpcy5faXNTbGlkaW5nKWUodGhpcy5fZWxlbWVudCkub25lKCJzbGlkLmJzLmNhcm91c2VsIiwoZnVuY3Rpb24oKXtyZXR1cm4gbi50byh0KX0pKTtlbHNle2lmKGk9PT10KXJldHVybiB0aGlzLnBhdXNlKCksdm9pZCB0aGlzLmN5Y2xlKCk7dmFyIG89dD5pPyJuZXh0IjoicHJldiI7dGhpcy5fc2xpZGUobyx0aGlzLl9pdGVtc1t0XSl9fSxuLmRpc3Bvc2U9ZnVuY3Rpb24oKXtlKHRoaXMuX2VsZW1lbnQpLm9mZihwKSxlLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwiYnMuY2Fyb3VzZWwiKSx0aGlzLl9pdGVtcz1udWxsLHRoaXMuX2NvbmZpZz1udWxsLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLl9pbnRlcnZhbD1udWxsLHRoaXMuX2lzUGF1c2VkPW51bGwsdGhpcy5faXNTbGlkaW5nPW51bGwsdGhpcy5fYWN0aXZlRWxlbWVudD1udWxsLHRoaXMuX2luZGljYXRvcnNFbGVtZW50PW51bGx9LG4uX2dldENvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gdD1hKGEoe30sdiksdCksYy50eXBlQ2hlY2tDb25maWcobSx0LGIpLHR9LG4uX2hhbmRsZVN3aXBlPWZ1bmN0aW9uKCl7dmFyIHQ9TWF0aC5hYnModGhpcy50b3VjaERlbHRhWCk7aWYoISh0PD00MCkpe3ZhciBlPXQvdGhpcy50b3VjaERlbHRhWDt0aGlzLnRvdWNoRGVsdGFYPTAsZT4wJiZ0aGlzLnByZXYoKSxlPDAmJnRoaXMubmV4dCgpfX0sbi5fYWRkRXZlbnRMaXN0ZW5lcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2NvbmZpZy5rZXlib2FyZCYmZSh0aGlzLl9lbGVtZW50KS5vbigia2V5ZG93bi5icy5jYXJvdXNlbCIsKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9rZXlkb3duKGUpfSkpLCJob3ZlciI9PT10aGlzLl9jb25maWcucGF1c2UmJmUodGhpcy5fZWxlbWVudCkub24oIm1vdXNlZW50ZXIuYnMuY2Fyb3VzZWwiLChmdW5jdGlvbihlKXtyZXR1cm4gdC5wYXVzZShlKX0pKS5vbigibW91c2VsZWF2ZS5icy5jYXJvdXNlbCIsKGZ1bmN0aW9uKGUpe3JldHVybiB0LmN5Y2xlKGUpfSkpLHRoaXMuX2NvbmZpZy50b3VjaCYmdGhpcy5fYWRkVG91Y2hFdmVudExpc3RlbmVycygpfSxuLl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLl90b3VjaFN1cHBvcnRlZCl7dmFyIG49ZnVuY3Rpb24oZSl7dC5fcG9pbnRlckV2ZW50JiZ5W2Uub3JpZ2luYWxFdmVudC5wb2ludGVyVHlwZS50b1VwcGVyQ2FzZSgpXT90LnRvdWNoU3RhcnRYPWUub3JpZ2luYWxFdmVudC5jbGllbnRYOnQuX3BvaW50ZXJFdmVudHx8KHQudG91Y2hTdGFydFg9ZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCl9LGk9ZnVuY3Rpb24oZSl7dC5fcG9pbnRlckV2ZW50JiZ5W2Uub3JpZ2luYWxFdmVudC5wb2ludGVyVHlwZS50b1VwcGVyQ2FzZSgpXSYmKHQudG91Y2hEZWx0YVg9ZS5vcmlnaW5hbEV2ZW50LmNsaWVudFgtdC50b3VjaFN0YXJ0WCksdC5faGFuZGxlU3dpcGUoKSwiaG92ZXIiPT09dC5fY29uZmlnLnBhdXNlJiYodC5wYXVzZSgpLHQudG91Y2hUaW1lb3V0JiZjbGVhclRpbWVvdXQodC50b3VjaFRpbWVvdXQpLHQudG91Y2hUaW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmN5Y2xlKGUpfSksNTAwK3QuX2NvbmZpZy5pbnRlcnZhbCkpfTtlKHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmNhcm91c2VsLWl0ZW0gaW1nIikpLm9uKCJkcmFnc3RhcnQuYnMuY2Fyb3VzZWwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpfSkpLHRoaXMuX3BvaW50ZXJFdmVudD8oZSh0aGlzLl9lbGVtZW50KS5vbigicG9pbnRlcmRvd24uYnMuY2Fyb3VzZWwiLChmdW5jdGlvbih0KXtyZXR1cm4gbih0KX0pKSxlKHRoaXMuX2VsZW1lbnQpLm9uKCJwb2ludGVydXAuYnMuY2Fyb3VzZWwiLChmdW5jdGlvbih0KXtyZXR1cm4gaSh0KX0pKSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoInBvaW50ZXItZXZlbnQiKSk6KGUodGhpcy5fZWxlbWVudCkub24oInRvdWNoc3RhcnQuYnMuY2Fyb3VzZWwiLChmdW5jdGlvbih0KXtyZXR1cm4gbih0KX0pKSxlKHRoaXMuX2VsZW1lbnQpLm9uKCJ0b3VjaG1vdmUuYnMuY2Fyb3VzZWwiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMmJmUub3JpZ2luYWxFdmVudC50b3VjaGVzLmxlbmd0aD4xP3QudG91Y2hEZWx0YVg9MDp0LnRvdWNoRGVsdGFYPWUub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLmNsaWVudFgtdC50b3VjaFN0YXJ0WH0oZSl9KSksZSh0aGlzLl9lbGVtZW50KS5vbigidG91Y2hlbmQuYnMuY2Fyb3VzZWwiLChmdW5jdGlvbih0KXtyZXR1cm4gaSh0KX0pKSl9fSxuLl9rZXlkb3duPWZ1bmN0aW9uKHQpe2lmKCEvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KHQudGFyZ2V0LnRhZ05hbWUpKXN3aXRjaCh0LndoaWNoKXtjYXNlIDM3OnQucHJldmVudERlZmF1bHQoKSx0aGlzLnByZXYoKTticmVhaztjYXNlIDM5OnQucHJldmVudERlZmF1bHQoKSx0aGlzLm5leHQoKX19LG4uX2dldEl0ZW1JbmRleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faXRlbXM9dCYmdC5wYXJlbnROb2RlP1tdLnNsaWNlLmNhbGwodC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoIi5jYXJvdXNlbC1pdGVtIikpOltdLHRoaXMuX2l0ZW1zLmluZGV4T2YodCl9LG4uX2dldEl0ZW1CeURpcmVjdGlvbj1mdW5jdGlvbih0LGUpe3ZhciBuPSJuZXh0Ij09PXQsaT0icHJldiI9PT10LG89dGhpcy5fZ2V0SXRlbUluZGV4KGUpLHM9dGhpcy5faXRlbXMubGVuZ3RoLTE7aWYoKGkmJjA9PT1vfHxuJiZvPT09cykmJiF0aGlzLl9jb25maWcud3JhcClyZXR1cm4gZTt2YXIgcj0obysoInByZXYiPT09dD8tMToxKSkldGhpcy5faXRlbXMubGVuZ3RoO3JldHVybi0xPT09cj90aGlzLl9pdGVtc1t0aGlzLl9pdGVtcy5sZW5ndGgtMV06dGhpcy5faXRlbXNbcl19LG4uX3RyaWdnZXJTbGlkZUV2ZW50PWZ1bmN0aW9uKHQsbil7dmFyIGk9dGhpcy5fZ2V0SXRlbUluZGV4KHQpLG89dGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcigiLmFjdGl2ZS5jYXJvdXNlbC1pdGVtIikpLHM9ZS5FdmVudCgic2xpZGUuYnMuY2Fyb3VzZWwiLHtyZWxhdGVkVGFyZ2V0OnQsZGlyZWN0aW9uOm4sZnJvbTpvLHRvOml9KTtyZXR1cm4gZSh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHMpLHN9LG4uX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQ9ZnVuY3Rpb24odCl7aWYodGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpe3ZhciBuPVtdLnNsaWNlLmNhbGwodGhpcy5faW5kaWNhdG9yc0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmFjdGl2ZSIpKTtlKG4pLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTt2YXIgaT10aGlzLl9pbmRpY2F0b3JzRWxlbWVudC5jaGlsZHJlblt0aGlzLl9nZXRJdGVtSW5kZXgodCldO2kmJmUoaSkuYWRkQ2xhc3MoImFjdGl2ZSIpfX0sbi5fc2xpZGU9ZnVuY3Rpb24odCxuKXt2YXIgaSxvLHMscj10aGlzLGE9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuYWN0aXZlLmNhcm91c2VsLWl0ZW0iKSxsPXRoaXMuX2dldEl0ZW1JbmRleChhKSxoPW58fGEmJnRoaXMuX2dldEl0ZW1CeURpcmVjdGlvbih0LGEpLHU9dGhpcy5fZ2V0SXRlbUluZGV4KGgpLGQ9Qm9vbGVhbih0aGlzLl9pbnRlcnZhbCk7aWYoIm5leHQiPT09dD8oaT0iY2Fyb3VzZWwtaXRlbS1sZWZ0IixvPSJjYXJvdXNlbC1pdGVtLW5leHQiLHM9ImxlZnQiKTooaT0iY2Fyb3VzZWwtaXRlbS1yaWdodCIsbz0iY2Fyb3VzZWwtaXRlbS1wcmV2IixzPSJyaWdodCIpLGgmJmUoaCkuaGFzQ2xhc3MoImFjdGl2ZSIpKXRoaXMuX2lzU2xpZGluZz0hMTtlbHNlIGlmKCF0aGlzLl90cmlnZ2VyU2xpZGVFdmVudChoLHMpLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZhJiZoKXt0aGlzLl9pc1NsaWRpbmc9ITAsZCYmdGhpcy5wYXVzZSgpLHRoaXMuX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQoaCk7dmFyIGY9ZS5FdmVudCgic2xpZC5icy5jYXJvdXNlbCIse3JlbGF0ZWRUYXJnZXQ6aCxkaXJlY3Rpb246cyxmcm9tOmwsdG86dX0pO2lmKGUodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoInNsaWRlIikpe2UoaCkuYWRkQ2xhc3MobyksYy5yZWZsb3coaCksZShhKS5hZGRDbGFzcyhpKSxlKGgpLmFkZENsYXNzKGkpO3ZhciBnPXBhcnNlSW50KGguZ2V0QXR0cmlidXRlKCJkYXRhLWludGVydmFsIiksMTApO2c/KHRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWw9dGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbHx8dGhpcy5fY29uZmlnLmludGVydmFsLHRoaXMuX2NvbmZpZy5pbnRlcnZhbD1nKTp0aGlzLl9jb25maWcuaW50ZXJ2YWw9dGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbHx8dGhpcy5fY29uZmlnLmludGVydmFsO3ZhciBtPWMuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQoYSk7ZShhKS5vbmUoYy5UUkFOU0lUSU9OX0VORCwoZnVuY3Rpb24oKXtlKGgpLnJlbW92ZUNsYXNzKGkrIiAiK28pLmFkZENsYXNzKCJhY3RpdmUiKSxlKGEpLnJlbW92ZUNsYXNzKCJhY3RpdmUgIitvKyIgIitpKSxyLl9pc1NsaWRpbmc9ITEsc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gZShyLl9lbGVtZW50KS50cmlnZ2VyKGYpfSksMCl9KSkuZW11bGF0ZVRyYW5zaXRpb25FbmQobSl9ZWxzZSBlKGEpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxlKGgpLmFkZENsYXNzKCJhY3RpdmUiKSx0aGlzLl9pc1NsaWRpbmc9ITEsZSh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKGYpO2QmJnRoaXMuY3ljbGUoKX19LHQuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3ZhciBpPWUodGhpcykuZGF0YSgiYnMuY2Fyb3VzZWwiKSxvPWEoYSh7fSx2KSxlKHRoaXMpLmRhdGEoKSk7Im9iamVjdCI9PXR5cGVvZiBuJiYobz1hKGEoe30sbyksbikpO3ZhciBzPSJzdHJpbmciPT10eXBlb2Ygbj9uOm8uc2xpZGU7aWYoaXx8KGk9bmV3IHQodGhpcyxvKSxlKHRoaXMpLmRhdGEoImJzLmNhcm91c2VsIixpKSksIm51bWJlciI9PXR5cGVvZiBuKWkudG8obik7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHMpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgaVtzXSl0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBtZXRob2QgbmFtZWQgIicrcysnIicpO2lbc10oKX1lbHNlIG8uaW50ZXJ2YWwmJm8ucmlkZSYmKGkucGF1c2UoKSxpLmN5Y2xlKCkpfSkpfSx0Ll9kYXRhQXBpQ2xpY2tIYW5kbGVyPWZ1bmN0aW9uKG4pe3ZhciBpPWMuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0aGlzKTtpZihpKXt2YXIgbz1lKGkpWzBdO2lmKG8mJmUobykuaGFzQ2xhc3MoImNhcm91c2VsIikpe3ZhciBzPWEoYSh7fSxlKG8pLmRhdGEoKSksZSh0aGlzKS5kYXRhKCkpLHI9dGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtc2xpZGUtdG8iKTtyJiYocy5pbnRlcnZhbD0hMSksdC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoZShvKSxzKSxyJiZlKG8pLmRhdGEoImJzLmNhcm91c2VsIikudG8ociksbi5wcmV2ZW50RGVmYXVsdCgpfX19LG8odCxudWxsLFt7a2V5OiJWRVJTSU9OIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iNC41LjAifX0se2tleToiRGVmYXVsdCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZ9fV0pLHR9KCk7ZShkb2N1bWVudCkub24oImNsaWNrLmJzLmNhcm91c2VsLmRhdGEtYXBpIiwiW2RhdGEtc2xpZGVdLCBbZGF0YS1zbGlkZS10b10iLEUuX2RhdGFBcGlDbGlja0hhbmRsZXIpLGUod2luZG93KS5vbigibG9hZC5icy5jYXJvdXNlbC5kYXRhLWFwaSIsKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtcmlkZT0iY2Fyb3VzZWwiXScpKSxuPTAsaT10Lmxlbmd0aDtuPGk7bisrKXt2YXIgbz1lKHRbbl0pO0UuX2pRdWVyeUludGVyZmFjZS5jYWxsKG8sby5kYXRhKCkpfX0pKSxlLmZuW21dPUUuX2pRdWVyeUludGVyZmFjZSxlLmZuW21dLkNvbnN0cnVjdG9yPUUsZS5mblttXS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm5bbV09XyxFLl9qUXVlcnlJbnRlcmZhY2V9O3ZhciB3PSJjb2xsYXBzZSIsVD1lLmZuW3ddLEM9e3RvZ2dsZTohMCxwYXJlbnQ6IiJ9LFM9e3RvZ2dsZToiYm9vbGVhbiIscGFyZW50OiIoc3RyaW5nfGVsZW1lbnQpIn0sRD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9pc1RyYW5zaXRpb25pbmc9ITEsdGhpcy5fZWxlbWVudD10LHRoaXMuX2NvbmZpZz10aGlzLl9nZXRDb25maWcoZSksdGhpcy5fdHJpZ2dlckFycmF5PVtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdW2hyZWY9IiMnK3QuaWQrJyJdLFtkYXRhLXRvZ2dsZT0iY29sbGFwc2UiXVtkYXRhLXRhcmdldD0iIycrdC5pZCsnIl0nKSk7Zm9yKHZhciBuPVtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdJykpLGk9MCxvPW4ubGVuZ3RoO2k8bztpKyspe3ZhciBzPW5baV0scj1jLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQocyksYT1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocikpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10fSkpO251bGwhPT1yJiZhLmxlbmd0aD4wJiYodGhpcy5fc2VsZWN0b3I9cix0aGlzLl90cmlnZ2VyQXJyYXkucHVzaChzKSl9dGhpcy5fcGFyZW50PXRoaXMuX2NvbmZpZy5wYXJlbnQ/dGhpcy5fZ2V0UGFyZW50KCk6bnVsbCx0aGlzLl9jb25maWcucGFyZW50fHx0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fZWxlbWVudCx0aGlzLl90cmlnZ2VyQXJyYXkpLHRoaXMuX2NvbmZpZy50b2dnbGUmJnRoaXMudG9nZ2xlKCl9dmFyIG49dC5wcm90b3R5cGU7cmV0dXJuIG4udG9nZ2xlPWZ1bmN0aW9uKCl7ZSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcygic2hvdyIpP3RoaXMuaGlkZSgpOnRoaXMuc2hvdygpfSxuLnNob3c9ZnVuY3Rpb24oKXt2YXIgbixpLG89dGhpcztpZighdGhpcy5faXNUcmFuc2l0aW9uaW5nJiYhZSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcygic2hvdyIpJiYodGhpcy5fcGFyZW50JiYwPT09KG49W10uc2xpY2UuY2FsbCh0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCgiLnNob3csIC5jb2xsYXBzaW5nIikpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBvLl9jb25maWcucGFyZW50P3QuZ2V0QXR0cmlidXRlKCJkYXRhLXBhcmVudCIpPT09by5fY29uZmlnLnBhcmVudDp0LmNsYXNzTGlzdC5jb250YWlucygiY29sbGFwc2UiKX0pKSkubGVuZ3RoJiYobj1udWxsKSwhKG4mJihpPWUobikubm90KHRoaXMuX3NlbGVjdG9yKS5kYXRhKCJicy5jb2xsYXBzZSIpKSYmaS5faXNUcmFuc2l0aW9uaW5nKSkpe3ZhciBzPWUuRXZlbnQoInNob3cuYnMuY29sbGFwc2UiKTtpZihlKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIocyksIXMuaXNEZWZhdWx0UHJldmVudGVkKCkpe24mJih0Ll9qUXVlcnlJbnRlcmZhY2UuY2FsbChlKG4pLm5vdCh0aGlzLl9zZWxlY3RvciksImhpZGUiKSxpfHxlKG4pLmRhdGEoImJzLmNvbGxhcHNlIixudWxsKSk7dmFyIHI9dGhpcy5fZ2V0RGltZW5zaW9uKCk7ZSh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcygiY29sbGFwc2UiKS5hZGRDbGFzcygiY29sbGFwc2luZyIpLHRoaXMuX2VsZW1lbnQuc3R5bGVbcl09MCx0aGlzLl90cmlnZ2VyQXJyYXkubGVuZ3RoJiZlKHRoaXMuX3RyaWdnZXJBcnJheSkucmVtb3ZlQ2xhc3MoImNvbGxhcHNlZCIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCEwKSx0aGlzLnNldFRyYW5zaXRpb25pbmcoITApO3ZhciBhPSJzY3JvbGwiKyhyWzBdLnRvVXBwZXJDYXNlKCkrci5zbGljZSgxKSksbD1jLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO2UodGhpcy5fZWxlbWVudCkub25lKGMuVFJBTlNJVElPTl9FTkQsKGZ1bmN0aW9uKCl7ZShvLl9lbGVtZW50KS5yZW1vdmVDbGFzcygiY29sbGFwc2luZyIpLmFkZENsYXNzKCJjb2xsYXBzZSBzaG93Iiksby5fZWxlbWVudC5zdHlsZVtyXT0iIixvLnNldFRyYW5zaXRpb25pbmcoITEpLGUoby5fZWxlbWVudCkudHJpZ2dlcigic2hvd24uYnMuY29sbGFwc2UiKX0pKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChsKSx0aGlzLl9lbGVtZW50LnN0eWxlW3JdPXRoaXMuX2VsZW1lbnRbYV0rInB4In19fSxuLmhpZGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLl9pc1RyYW5zaXRpb25pbmcmJmUodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoInNob3ciKSl7dmFyIG49ZS5FdmVudCgiaGlkZS5icy5jb2xsYXBzZSIpO2lmKGUodGhpcy5fZWxlbWVudCkudHJpZ2dlcihuKSwhbi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIGk9dGhpcy5fZ2V0RGltZW5zaW9uKCk7dGhpcy5fZWxlbWVudC5zdHlsZVtpXT10aGlzLl9lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2ldKyJweCIsYy5yZWZsb3codGhpcy5fZWxlbWVudCksZSh0aGlzLl9lbGVtZW50KS5hZGRDbGFzcygiY29sbGFwc2luZyIpLnJlbW92ZUNsYXNzKCJjb2xsYXBzZSBzaG93Iik7dmFyIG89dGhpcy5fdHJpZ2dlckFycmF5Lmxlbmd0aDtpZihvPjApZm9yKHZhciBzPTA7czxvO3MrKyl7dmFyIHI9dGhpcy5fdHJpZ2dlckFycmF5W3NdLGE9Yy5nZXRTZWxlY3RvckZyb21FbGVtZW50KHIpO2lmKG51bGwhPT1hKWUoW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGEpKSkuaGFzQ2xhc3MoInNob3ciKXx8ZShyKS5hZGRDbGFzcygiY29sbGFwc2VkIikuYXR0cigiYXJpYS1leHBhbmRlZCIsITEpfXRoaXMuc2V0VHJhbnNpdGlvbmluZyghMCk7dGhpcy5fZWxlbWVudC5zdHlsZVtpXT0iIjt2YXIgbD1jLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO2UodGhpcy5fZWxlbWVudCkub25lKGMuVFJBTlNJVElPTl9FTkQsKGZ1bmN0aW9uKCl7dC5zZXRUcmFuc2l0aW9uaW5nKCExKSxlKHQuX2VsZW1lbnQpLnJlbW92ZUNsYXNzKCJjb2xsYXBzaW5nIikuYWRkQ2xhc3MoImNvbGxhcHNlIikudHJpZ2dlcigiaGlkZGVuLmJzLmNvbGxhcHNlIil9KSkuZW11bGF0ZVRyYW5zaXRpb25FbmQobCl9fX0sbi5zZXRUcmFuc2l0aW9uaW5nPWZ1bmN0aW9uKHQpe3RoaXMuX2lzVHJhbnNpdGlvbmluZz10fSxuLmRpc3Bvc2U9ZnVuY3Rpb24oKXtlLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwiYnMuY29sbGFwc2UiKSx0aGlzLl9jb25maWc9bnVsbCx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5fdHJpZ2dlckFycmF5PW51bGwsdGhpcy5faXNUcmFuc2l0aW9uaW5nPW51bGx9LG4uX2dldENvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4odD1hKGEoe30sQyksdCkpLnRvZ2dsZT1Cb29sZWFuKHQudG9nZ2xlKSxjLnR5cGVDaGVja0NvbmZpZyh3LHQsUyksdH0sbi5fZ2V0RGltZW5zaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoIndpZHRoIik/IndpZHRoIjoiaGVpZ2h0In0sbi5fZ2V0UGFyZW50PWZ1bmN0aW9uKCl7dmFyIG4saT10aGlzO2MuaXNFbGVtZW50KHRoaXMuX2NvbmZpZy5wYXJlbnQpPyhuPXRoaXMuX2NvbmZpZy5wYXJlbnQsInVuZGVmaW5lZCIhPXR5cGVvZiB0aGlzLl9jb25maWcucGFyZW50LmpxdWVyeSYmKG49dGhpcy5fY29uZmlnLnBhcmVudFswXSkpOm49ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLl9jb25maWcucGFyZW50KTt2YXIgbz0nW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdW2RhdGEtcGFyZW50PSInK3RoaXMuX2NvbmZpZy5wYXJlbnQrJyJdJyxzPVtdLnNsaWNlLmNhbGwobi5xdWVyeVNlbGVjdG9yQWxsKG8pKTtyZXR1cm4gZShzKS5lYWNoKChmdW5jdGlvbihlLG4pe2kuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0Ll9nZXRUYXJnZXRGcm9tRWxlbWVudChuKSxbbl0pfSkpLG59LG4uX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcz1mdW5jdGlvbih0LG4pe3ZhciBpPWUodCkuaGFzQ2xhc3MoInNob3ciKTtuLmxlbmd0aCYmZShuKS50b2dnbGVDbGFzcygiY29sbGFwc2VkIiwhaSkuYXR0cigiYXJpYS1leHBhbmRlZCIsaSl9LHQuX2dldFRhcmdldEZyb21FbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPWMuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0KTtyZXR1cm4gZT9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpOm51bGx9LHQuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3ZhciBpPWUodGhpcyksbz1pLmRhdGEoImJzLmNvbGxhcHNlIikscz1hKGEoYSh7fSxDKSxpLmRhdGEoKSksIm9iamVjdCI9PXR5cGVvZiBuJiZuP246e30pO2lmKCFvJiZzLnRvZ2dsZSYmInN0cmluZyI9PXR5cGVvZiBuJiYvc2hvd3xoaWRlLy50ZXN0KG4pJiYocy50b2dnbGU9ITEpLG98fChvPW5ldyB0KHRoaXMscyksaS5kYXRhKCJicy5jb2xsYXBzZSIsbykpLCJzdHJpbmciPT10eXBlb2Ygbil7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBvW25dKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCAiJytuKyciJyk7b1tuXSgpfX0pKX0sbyh0LG51bGwsW3trZXk6IlZFUlNJT04iLGdldDpmdW5jdGlvbigpe3JldHVybiI0LjUuMCJ9fSx7a2V5OiJEZWZhdWx0IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQ319XSksdH0oKTtlKGRvY3VtZW50KS5vbigiY2xpY2suYnMuY29sbGFwc2UuZGF0YS1hcGkiLCdbZGF0YS10b2dnbGU9ImNvbGxhcHNlIl0nLChmdW5jdGlvbih0KXsiQSI9PT10LmN1cnJlbnRUYXJnZXQudGFnTmFtZSYmdC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBuPWUodGhpcyksaT1jLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcyksbz1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoaSkpO2UobykuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9dC5kYXRhKCJicy5jb2xsYXBzZSIpPyJ0b2dnbGUiOm4uZGF0YSgpO0QuX2pRdWVyeUludGVyZmFjZS5jYWxsKHQsaSl9KSl9KSksZS5mblt3XT1ELl9qUXVlcnlJbnRlcmZhY2UsZS5mblt3XS5Db25zdHJ1Y3Rvcj1ELGUuZm5bd10ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuW3ddPVQsRC5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgaz0iZHJvcGRvd24iLE49ZS5mbltrXSxBPW5ldyBSZWdFeHAoIjM4fDQwfDI3IiksST17b2Zmc2V0OjAsZmxpcDohMCxib3VuZGFyeToic2Nyb2xsUGFyZW50IixyZWZlcmVuY2U6InRvZ2dsZSIsZGlzcGxheToiZHluYW1pYyIscG9wcGVyQ29uZmlnOm51bGx9LE89e29mZnNldDoiKG51bWJlcnxzdHJpbmd8ZnVuY3Rpb24pIixmbGlwOiJib29sZWFuIixib3VuZGFyeToiKHN0cmluZ3xlbGVtZW50KSIscmVmZXJlbmNlOiIoc3RyaW5nfGVsZW1lbnQpIixkaXNwbGF5OiJzdHJpbmciLHBvcHBlckNvbmZpZzoiKG51bGx8b2JqZWN0KSJ9LGo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fZWxlbWVudD10LHRoaXMuX3BvcHBlcj1udWxsLHRoaXMuX2NvbmZpZz10aGlzLl9nZXRDb25maWcoZSksdGhpcy5fbWVudT10aGlzLl9nZXRNZW51RWxlbWVudCgpLHRoaXMuX2luTmF2YmFyPXRoaXMuX2RldGVjdE5hdmJhcigpLHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKCl9dmFyIGk9dC5wcm90b3R5cGU7cmV0dXJuIGkudG9nZ2xlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2VsZW1lbnQuZGlzYWJsZWQmJiFlKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKCJkaXNhYmxlZCIpKXt2YXIgbj1lKHRoaXMuX21lbnUpLmhhc0NsYXNzKCJzaG93Iik7dC5fY2xlYXJNZW51cygpLG58fHRoaXMuc2hvdyghMCl9fSxpLnNob3c9ZnVuY3Rpb24oaSl7aWYodm9pZCAwPT09aSYmKGk9ITEpLCEodGhpcy5fZWxlbWVudC5kaXNhYmxlZHx8ZSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcygiZGlzYWJsZWQiKXx8ZSh0aGlzLl9tZW51KS5oYXNDbGFzcygic2hvdyIpKSl7dmFyIG89e3JlbGF0ZWRUYXJnZXQ6dGhpcy5fZWxlbWVudH0scz1lLkV2ZW50KCJzaG93LmJzLmRyb3Bkb3duIixvKSxyPXQuX2dldFBhcmVudEZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO2lmKGUocikudHJpZ2dlcihzKSwhcy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7aWYoIXRoaXMuX2luTmF2YmFyJiZpKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiQm9vdHN0cmFwJ3MgZHJvcGRvd25zIHJlcXVpcmUgUG9wcGVyLmpzIChodHRwczovL3BvcHBlci5qcy5vcmcvKSIpO3ZhciBhPXRoaXMuX2VsZW1lbnQ7InBhcmVudCI9PT10aGlzLl9jb25maWcucmVmZXJlbmNlP2E9cjpjLmlzRWxlbWVudCh0aGlzLl9jb25maWcucmVmZXJlbmNlKSYmKGE9dGhpcy5fY29uZmlnLnJlZmVyZW5jZSwidW5kZWZpbmVkIiE9dHlwZW9mIHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UuanF1ZXJ5JiYoYT10aGlzLl9jb25maWcucmVmZXJlbmNlWzBdKSksInNjcm9sbFBhcmVudCIhPT10aGlzLl9jb25maWcuYm91bmRhcnkmJmUocikuYWRkQ2xhc3MoInBvc2l0aW9uLXN0YXRpYyIpLHRoaXMuX3BvcHBlcj1uZXcgbihhLHRoaXMuX21lbnUsdGhpcy5fZ2V0UG9wcGVyQ29uZmlnKCkpfSJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiYwPT09ZShyKS5jbG9zZXN0KCIubmF2YmFyLW5hdiIpLmxlbmd0aCYmZShkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9uKCJtb3VzZW92ZXIiLG51bGwsZS5ub29wKSx0aGlzLl9lbGVtZW50LmZvY3VzKCksdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLCEwKSxlKHRoaXMuX21lbnUpLnRvZ2dsZUNsYXNzKCJzaG93IiksZShyKS50b2dnbGVDbGFzcygic2hvdyIpLnRyaWdnZXIoZS5FdmVudCgic2hvd24uYnMuZHJvcGRvd24iLG8pKX19fSxpLmhpZGU9ZnVuY3Rpb24oKXtpZighdGhpcy5fZWxlbWVudC5kaXNhYmxlZCYmIWUodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoImRpc2FibGVkIikmJmUodGhpcy5fbWVudSkuaGFzQ2xhc3MoInNob3ciKSl7dmFyIG49e3JlbGF0ZWRUYXJnZXQ6dGhpcy5fZWxlbWVudH0saT1lLkV2ZW50KCJoaWRlLmJzLmRyb3Bkb3duIixuKSxvPXQuX2dldFBhcmVudEZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO2UobykudHJpZ2dlcihpKSxpLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwodGhpcy5fcG9wcGVyJiZ0aGlzLl9wb3BwZXIuZGVzdHJveSgpLGUodGhpcy5fbWVudSkudG9nZ2xlQ2xhc3MoInNob3ciKSxlKG8pLnRvZ2dsZUNsYXNzKCJzaG93IikudHJpZ2dlcihlLkV2ZW50KCJoaWRkZW4uYnMuZHJvcGRvd24iLG4pKSl9fSxpLmRpc3Bvc2U9ZnVuY3Rpb24oKXtlLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwiYnMuZHJvcGRvd24iKSxlKHRoaXMuX2VsZW1lbnQpLm9mZigiLmJzLmRyb3Bkb3duIiksdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuX21lbnU9bnVsbCxudWxsIT09dGhpcy5fcG9wcGVyJiYodGhpcy5fcG9wcGVyLmRlc3Ryb3koKSx0aGlzLl9wb3BwZXI9bnVsbCl9LGkudXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5faW5OYXZiYXI9dGhpcy5fZGV0ZWN0TmF2YmFyKCksbnVsbCE9PXRoaXMuX3BvcHBlciYmdGhpcy5fcG9wcGVyLnNjaGVkdWxlVXBkYXRlKCl9LGkuX2FkZEV2ZW50TGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztlKHRoaXMuX2VsZW1lbnQpLm9uKCJjbGljay5icy5kcm9wZG93biIsKGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLHQudG9nZ2xlKCl9KSl9LGkuX2dldENvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gdD1hKGEoYSh7fSx0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHQpLGUodGhpcy5fZWxlbWVudCkuZGF0YSgpKSx0KSxjLnR5cGVDaGVja0NvbmZpZyhrLHQsdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSksdH0saS5fZ2V0TWVudUVsZW1lbnQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fbWVudSl7dmFyIGU9dC5fZ2V0UGFyZW50RnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7ZSYmKHRoaXMuX21lbnU9ZS5xdWVyeVNlbGVjdG9yKCIuZHJvcGRvd24tbWVudSIpKX1yZXR1cm4gdGhpcy5fbWVudX0saS5fZ2V0UGxhY2VtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUpLG49ImJvdHRvbS1zdGFydCI7cmV0dXJuIHQuaGFzQ2xhc3MoImRyb3B1cCIpP249ZSh0aGlzLl9tZW51KS5oYXNDbGFzcygiZHJvcGRvd24tbWVudS1yaWdodCIpPyJ0b3AtZW5kIjoidG9wLXN0YXJ0Ijp0Lmhhc0NsYXNzKCJkcm9wcmlnaHQiKT9uPSJyaWdodC1zdGFydCI6dC5oYXNDbGFzcygiZHJvcGxlZnQiKT9uPSJsZWZ0LXN0YXJ0IjplKHRoaXMuX21lbnUpLmhhc0NsYXNzKCJkcm9wZG93bi1tZW51LXJpZ2h0IikmJihuPSJib3R0b20tZW5kIiksbn0saS5fZGV0ZWN0TmF2YmFyPWZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcy5fZWxlbWVudCkuY2xvc2VzdCgiLm5hdmJhciIpLmxlbmd0aD4wfSxpLl9nZXRPZmZzZXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9e307cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX2NvbmZpZy5vZmZzZXQ/ZS5mbj1mdW5jdGlvbihlKXtyZXR1cm4gZS5vZmZzZXRzPWEoYSh7fSxlLm9mZnNldHMpLHQuX2NvbmZpZy5vZmZzZXQoZS5vZmZzZXRzLHQuX2VsZW1lbnQpfHx7fSksZX06ZS5vZmZzZXQ9dGhpcy5fY29uZmlnLm9mZnNldCxlfSxpLl9nZXRQb3BwZXJDb25maWc9ZnVuY3Rpb24oKXt2YXIgdD17cGxhY2VtZW50OnRoaXMuX2dldFBsYWNlbWVudCgpLG1vZGlmaWVyczp7b2Zmc2V0OnRoaXMuX2dldE9mZnNldCgpLGZsaXA6e2VuYWJsZWQ6dGhpcy5fY29uZmlnLmZsaXB9LHByZXZlbnRPdmVyZmxvdzp7Ym91bmRhcmllc0VsZW1lbnQ6dGhpcy5fY29uZmlnLmJvdW5kYXJ5fX19O3JldHVybiJzdGF0aWMiPT09dGhpcy5fY29uZmlnLmRpc3BsYXkmJih0Lm1vZGlmaWVycy5hcHBseVN0eWxlPXtlbmFibGVkOiExfSksYShhKHt9LHQpLHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcpfSx0Ll9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt2YXIgaT1lKHRoaXMpLmRhdGEoImJzLmRyb3Bkb3duIik7aWYoaXx8KGk9bmV3IHQodGhpcywib2JqZWN0Ij09dHlwZW9mIG4/bjpudWxsKSxlKHRoaXMpLmRhdGEoImJzLmRyb3Bkb3duIixpKSksInN0cmluZyI9PXR5cGVvZiBuKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIGlbbl0pdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gbWV0aG9kIG5hbWVkICInK24rJyInKTtpW25dKCl9fSkpfSx0Ll9jbGVhck1lbnVzPWZ1bmN0aW9uKG4pe2lmKCFufHwzIT09bi53aGljaCYmKCJrZXl1cCIhPT1uLnR5cGV8fDk9PT1uLndoaWNoKSlmb3IodmFyIGk9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS10b2dnbGU9ImRyb3Bkb3duIl0nKSksbz0wLHM9aS5sZW5ndGg7bzxzO28rKyl7dmFyIHI9dC5fZ2V0UGFyZW50RnJvbUVsZW1lbnQoaVtvXSksYT1lKGlbb10pLmRhdGEoImJzLmRyb3Bkb3duIiksbD17cmVsYXRlZFRhcmdldDppW29dfTtpZihuJiYiY2xpY2siPT09bi50eXBlJiYobC5jbGlja0V2ZW50PW4pLGEpe3ZhciBjPWEuX21lbnU7aWYoZShyKS5oYXNDbGFzcygic2hvdyIpJiYhKG4mJigiY2xpY2siPT09bi50eXBlJiYvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KG4udGFyZ2V0LnRhZ05hbWUpfHwia2V5dXAiPT09bi50eXBlJiY5PT09bi53aGljaCkmJmUuY29udGFpbnMocixuLnRhcmdldCkpKXt2YXIgaD1lLkV2ZW50KCJoaWRlLmJzLmRyb3Bkb3duIixsKTtlKHIpLnRyaWdnZXIoaCksaC5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KCJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZlKGRvY3VtZW50LmJvZHkpLmNoaWxkcmVuKCkub2ZmKCJtb3VzZW92ZXIiLG51bGwsZS5ub29wKSxpW29dLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsImZhbHNlIiksYS5fcG9wcGVyJiZhLl9wb3BwZXIuZGVzdHJveSgpLGUoYykucmVtb3ZlQ2xhc3MoInNob3ciKSxlKHIpLnJlbW92ZUNsYXNzKCJzaG93IikudHJpZ2dlcihlLkV2ZW50KCJoaWRkZW4uYnMuZHJvcGRvd24iLGwpKSl9fX19LHQuX2dldFBhcmVudEZyb21FbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlLG49Yy5nZXRTZWxlY3RvckZyb21FbGVtZW50KHQpO3JldHVybiBuJiYoZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKG4pKSxlfHx0LnBhcmVudE5vZGV9LHQuX2RhdGFBcGlLZXlkb3duSGFuZGxlcj1mdW5jdGlvbihuKXtpZighKC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3Qobi50YXJnZXQudGFnTmFtZSk/MzI9PT1uLndoaWNofHwyNyE9PW4ud2hpY2gmJig0MCE9PW4ud2hpY2gmJjM4IT09bi53aGljaHx8ZShuLnRhcmdldCkuY2xvc2VzdCgiLmRyb3Bkb3duLW1lbnUiKS5sZW5ndGgpOiFBLnRlc3Qobi53aGljaCkpJiYhdGhpcy5kaXNhYmxlZCYmIWUodGhpcykuaGFzQ2xhc3MoImRpc2FibGVkIikpe3ZhciBpPXQuX2dldFBhcmVudEZyb21FbGVtZW50KHRoaXMpLG89ZShpKS5oYXNDbGFzcygic2hvdyIpO2lmKG98fDI3IT09bi53aGljaCl7aWYobi5wcmV2ZW50RGVmYXVsdCgpLG4uc3RvcFByb3BhZ2F0aW9uKCksIW98fG8mJigyNz09PW4ud2hpY2h8fDMyPT09bi53aGljaCkpcmV0dXJuIDI3PT09bi53aGljaCYmZShpLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXRvZ2dsZT0iZHJvcGRvd24iXScpKS50cmlnZ2VyKCJmb2N1cyIpLHZvaWQgZSh0aGlzKS50cmlnZ2VyKCJjbGljayIpO3ZhciBzPVtdLnNsaWNlLmNhbGwoaS5xdWVyeVNlbGVjdG9yQWxsKCIuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTpub3QoLmRpc2FibGVkKTpub3QoOmRpc2FibGVkKSIpKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpLmlzKCI6dmlzaWJsZSIpfSkpO2lmKDAhPT1zLmxlbmd0aCl7dmFyIHI9cy5pbmRleE9mKG4udGFyZ2V0KTszOD09PW4ud2hpY2gmJnI+MCYmci0tLDQwPT09bi53aGljaCYmcjxzLmxlbmd0aC0xJiZyKysscjwwJiYocj0wKSxzW3JdLmZvY3VzKCl9fX19LG8odCxudWxsLFt7a2V5OiJWRVJTSU9OIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iNC41LjAifX0se2tleToiRGVmYXVsdCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEl9fSx7a2V5OiJEZWZhdWx0VHlwZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE99fV0pLHR9KCk7ZShkb2N1bWVudCkub24oImtleWRvd24uYnMuZHJvcGRvd24uZGF0YS1hcGkiLCdbZGF0YS10b2dnbGU9ImRyb3Bkb3duIl0nLGouX2RhdGFBcGlLZXlkb3duSGFuZGxlcikub24oImtleWRvd24uYnMuZHJvcGRvd24uZGF0YS1hcGkiLCIuZHJvcGRvd24tbWVudSIsai5fZGF0YUFwaUtleWRvd25IYW5kbGVyKS5vbigiY2xpY2suYnMuZHJvcGRvd24uZGF0YS1hcGkga2V5dXAuYnMuZHJvcGRvd24uZGF0YS1hcGkiLGouX2NsZWFyTWVudXMpLm9uKCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0iZHJvcGRvd24iXScsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLGouX2pRdWVyeUludGVyZmFjZS5jYWxsKGUodGhpcyksInRvZ2dsZSIpfSkpLm9uKCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaSIsIi5kcm9wZG93biBmb3JtIiwoZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKX0pKSxlLmZuW2tdPWouX2pRdWVyeUludGVyZmFjZSxlLmZuW2tdLkNvbnN0cnVjdG9yPWosZS5mbltrXS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm5ba109TixqLl9qUXVlcnlJbnRlcmZhY2V9O3ZhciBQPWUuZm4ubW9kYWwseD17YmFja2Ryb3A6ITAsa2V5Ym9hcmQ6ITAsZm9jdXM6ITAsc2hvdzohMH0sTD17YmFja2Ryb3A6Iihib29sZWFufHN0cmluZykiLGtleWJvYXJkOiJib29sZWFuIixmb2N1czoiYm9vbGVhbiIsc2hvdzoiYm9vbGVhbiJ9LFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyhlKSx0aGlzLl9lbGVtZW50PXQsdGhpcy5fZGlhbG9nPXQucXVlcnlTZWxlY3RvcigiLm1vZGFsLWRpYWxvZyIpLHRoaXMuX2JhY2tkcm9wPW51bGwsdGhpcy5faXNTaG93bj0hMSx0aGlzLl9pc0JvZHlPdmVyZmxvd2luZz0hMSx0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrPSExLHRoaXMuX2lzVHJhbnNpdGlvbmluZz0hMSx0aGlzLl9zY3JvbGxiYXJXaWR0aD0wfXZhciBuPXQucHJvdG90eXBlO3JldHVybiBuLnRvZ2dsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faXNTaG93bj90aGlzLmhpZGUoKTp0aGlzLnNob3codCl9LG4uc2hvdz1mdW5jdGlvbih0KXt2YXIgbj10aGlzO2lmKCF0aGlzLl9pc1Nob3duJiYhdGhpcy5faXNUcmFuc2l0aW9uaW5nKXtlKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKCJmYWRlIikmJih0aGlzLl9pc1RyYW5zaXRpb25pbmc9ITApO3ZhciBpPWUuRXZlbnQoInNob3cuYnMubW9kYWwiLHtyZWxhdGVkVGFyZ2V0OnR9KTtlKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoaSksdGhpcy5faXNTaG93bnx8aS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KHRoaXMuX2lzU2hvd249ITAsdGhpcy5fY2hlY2tTY3JvbGxiYXIoKSx0aGlzLl9zZXRTY3JvbGxiYXIoKSx0aGlzLl9hZGp1c3REaWFsb2coKSx0aGlzLl9zZXRFc2NhcGVFdmVudCgpLHRoaXMuX3NldFJlc2l6ZUV2ZW50KCksZSh0aGlzLl9lbGVtZW50KS5vbigiY2xpY2suZGlzbWlzcy5icy5tb2RhbCIsJ1tkYXRhLWRpc21pc3M9Im1vZGFsIl0nLChmdW5jdGlvbih0KXtyZXR1cm4gbi5oaWRlKHQpfSkpLGUodGhpcy5fZGlhbG9nKS5vbigibW91c2Vkb3duLmRpc21pc3MuYnMubW9kYWwiLChmdW5jdGlvbigpe2Uobi5fZWxlbWVudCkub25lKCJtb3VzZXVwLmRpc21pc3MuYnMubW9kYWwiLChmdW5jdGlvbih0KXtlKHQudGFyZ2V0KS5pcyhuLl9lbGVtZW50KSYmKG4uX2lnbm9yZUJhY2tkcm9wQ2xpY2s9ITApfSkpfSkpLHRoaXMuX3Nob3dCYWNrZHJvcCgoZnVuY3Rpb24oKXtyZXR1cm4gbi5fc2hvd0VsZW1lbnQodCl9KSkpfX0sbi5oaWRlPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7aWYodCYmdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2lzU2hvd24mJiF0aGlzLl9pc1RyYW5zaXRpb25pbmcpe3ZhciBpPWUuRXZlbnQoImhpZGUuYnMubW9kYWwiKTtpZihlKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoaSksdGhpcy5faXNTaG93biYmIWkuaXNEZWZhdWx0UHJldmVudGVkKCkpe3RoaXMuX2lzU2hvd249ITE7dmFyIG89ZSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcygiZmFkZSIpO2lmKG8mJih0aGlzLl9pc1RyYW5zaXRpb25pbmc9ITApLHRoaXMuX3NldEVzY2FwZUV2ZW50KCksdGhpcy5fc2V0UmVzaXplRXZlbnQoKSxlKGRvY3VtZW50KS5vZmYoImZvY3VzaW4uYnMubW9kYWwiKSxlKHRoaXMuX2VsZW1lbnQpLnJlbW92ZUNsYXNzKCJzaG93IiksZSh0aGlzLl9lbGVtZW50KS5vZmYoImNsaWNrLmRpc21pc3MuYnMubW9kYWwiKSxlKHRoaXMuX2RpYWxvZykub2ZmKCJtb3VzZWRvd24uZGlzbWlzcy5icy5tb2RhbCIpLG8pe3ZhciBzPWMuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7ZSh0aGlzLl9lbGVtZW50KS5vbmUoYy5UUkFOU0lUSU9OX0VORCwoZnVuY3Rpb24odCl7cmV0dXJuIG4uX2hpZGVNb2RhbCh0KX0pKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChzKX1lbHNlIHRoaXMuX2hpZGVNb2RhbCgpfX19LG4uZGlzcG9zZT1mdW5jdGlvbigpe1t3aW5kb3csdGhpcy5fZWxlbWVudCx0aGlzLl9kaWFsb2ddLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpLm9mZigiLmJzLm1vZGFsIil9KSksZShkb2N1bWVudCkub2ZmKCJmb2N1c2luLmJzLm1vZGFsIiksZS5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsImJzLm1vZGFsIiksdGhpcy5fY29uZmlnPW51bGwsdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuX2RpYWxvZz1udWxsLHRoaXMuX2JhY2tkcm9wPW51bGwsdGhpcy5faXNTaG93bj1udWxsLHRoaXMuX2lzQm9keU92ZXJmbG93aW5nPW51bGwsdGhpcy5faWdub3JlQmFja2Ryb3BDbGljaz1udWxsLHRoaXMuX2lzVHJhbnNpdGlvbmluZz1udWxsLHRoaXMuX3Njcm9sbGJhcldpZHRoPW51bGx9LG4uaGFuZGxlVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fYWRqdXN0RGlhbG9nKCl9LG4uX2dldENvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gdD1hKGEoe30seCksdCksYy50eXBlQ2hlY2tDb25maWcoIm1vZGFsIix0LEwpLHR9LG4uX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb249ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCJzdGF0aWMiPT09dGhpcy5fY29uZmlnLmJhY2tkcm9wKXt2YXIgbj1lLkV2ZW50KCJoaWRlUHJldmVudGVkLmJzLm1vZGFsIik7aWYoZSh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKG4pLG4uZGVmYXVsdFByZXZlbnRlZClyZXR1cm47dGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtb2RhbC1zdGF0aWMiKTt2YXIgaT1jLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO2UodGhpcy5fZWxlbWVudCkub25lKGMuVFJBTlNJVElPTl9FTkQsKGZ1bmN0aW9uKCl7dC5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtb2RhbC1zdGF0aWMiKX0pKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChpKSx0aGlzLl9lbGVtZW50LmZvY3VzKCl9ZWxzZSB0aGlzLmhpZGUoKX0sbi5fc2hvd0VsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIG49dGhpcyxpPWUodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoImZhZGUiKSxvPXRoaXMuX2RpYWxvZz90aGlzLl9kaWFsb2cucXVlcnlTZWxlY3RvcigiLm1vZGFsLWJvZHkiKTpudWxsO3RoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV8fGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiksdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtbW9kYWwiLCEwKSxlKHRoaXMuX2RpYWxvZykuaGFzQ2xhc3MoIm1vZGFsLWRpYWxvZy1zY3JvbGxhYmxlIikmJm8/by5zY3JvbGxUb3A9MDp0aGlzLl9lbGVtZW50LnNjcm9sbFRvcD0wLGkmJmMucmVmbG93KHRoaXMuX2VsZW1lbnQpLGUodGhpcy5fZWxlbWVudCkuYWRkQ2xhc3MoInNob3ciKSx0aGlzLl9jb25maWcuZm9jdXMmJnRoaXMuX2VuZm9yY2VGb2N1cygpO3ZhciBzPWUuRXZlbnQoInNob3duLmJzLm1vZGFsIix7cmVsYXRlZFRhcmdldDp0fSkscj1mdW5jdGlvbigpe24uX2NvbmZpZy5mb2N1cyYmbi5fZWxlbWVudC5mb2N1cygpLG4uX2lzVHJhbnNpdGlvbmluZz0hMSxlKG4uX2VsZW1lbnQpLnRyaWdnZXIocyl9O2lmKGkpe3ZhciBhPWMuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZGlhbG9nKTtlKHRoaXMuX2RpYWxvZykub25lKGMuVFJBTlNJVElPTl9FTkQscikuZW11bGF0ZVRyYW5zaXRpb25FbmQoYSl9ZWxzZSByKCl9LG4uX2VuZm9yY2VGb2N1cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7ZShkb2N1bWVudCkub2ZmKCJmb2N1c2luLmJzLm1vZGFsIikub24oImZvY3VzaW4uYnMubW9kYWwiLChmdW5jdGlvbihuKXtkb2N1bWVudCE9PW4udGFyZ2V0JiZ0Ll9lbGVtZW50IT09bi50YXJnZXQmJjA9PT1lKHQuX2VsZW1lbnQpLmhhcyhuLnRhcmdldCkubGVuZ3RoJiZ0Ll9lbGVtZW50LmZvY3VzKCl9KSl9LG4uX3NldEVzY2FwZUV2ZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9pc1Nob3duP2UodGhpcy5fZWxlbWVudCkub24oImtleWRvd24uZGlzbWlzcy5icy5tb2RhbCIsKGZ1bmN0aW9uKGUpe3QuX2NvbmZpZy5rZXlib2FyZCYmMjc9PT1lLndoaWNoPyhlLnByZXZlbnREZWZhdWx0KCksdC5oaWRlKCkpOnQuX2NvbmZpZy5rZXlib2FyZHx8MjchPT1lLndoaWNofHx0Ll90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCl9KSk6dGhpcy5faXNTaG93bnx8ZSh0aGlzLl9lbGVtZW50KS5vZmYoImtleWRvd24uZGlzbWlzcy5icy5tb2RhbCIpfSxuLl9zZXRSZXNpemVFdmVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5faXNTaG93bj9lKHdpbmRvdykub24oInJlc2l6ZS5icy5tb2RhbCIsKGZ1bmN0aW9uKGUpe3JldHVybiB0LmhhbmRsZVVwZGF0ZShlKX0pKTplKHdpbmRvdykub2ZmKCJyZXNpemUuYnMubW9kYWwiKX0sbi5faGlkZU1vZGFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsITApLHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW1vZGFsIiksdGhpcy5faXNUcmFuc2l0aW9uaW5nPSExLHRoaXMuX3Nob3dCYWNrZHJvcCgoZnVuY3Rpb24oKXtlKGRvY3VtZW50LmJvZHkpLnJlbW92ZUNsYXNzKCJtb2RhbC1vcGVuIiksdC5fcmVzZXRBZGp1c3RtZW50cygpLHQuX3Jlc2V0U2Nyb2xsYmFyKCksZSh0Ll9lbGVtZW50KS50cmlnZ2VyKCJoaWRkZW4uYnMubW9kYWwiKX0pKX0sbi5fcmVtb3ZlQmFja2Ryb3A9ZnVuY3Rpb24oKXt0aGlzLl9iYWNrZHJvcCYmKGUodGhpcy5fYmFja2Ryb3ApLnJlbW92ZSgpLHRoaXMuX2JhY2tkcm9wPW51bGwpfSxuLl9zaG93QmFja2Ryb3A9ZnVuY3Rpb24odCl7dmFyIG49dGhpcyxpPWUodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoImZhZGUiKT8iZmFkZSI6IiI7aWYodGhpcy5faXNTaG93biYmdGhpcy5fY29uZmlnLmJhY2tkcm9wKXtpZih0aGlzLl9iYWNrZHJvcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLl9iYWNrZHJvcC5jbGFzc05hbWU9Im1vZGFsLWJhY2tkcm9wIixpJiZ0aGlzLl9iYWNrZHJvcC5jbGFzc0xpc3QuYWRkKGkpLGUodGhpcy5fYmFja2Ryb3ApLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpLGUodGhpcy5fZWxlbWVudCkub24oImNsaWNrLmRpc21pc3MuYnMubW9kYWwiLChmdW5jdGlvbih0KXtuLl9pZ25vcmVCYWNrZHJvcENsaWNrP24uX2lnbm9yZUJhY2tkcm9wQ2xpY2s9ITE6dC50YXJnZXQ9PT10LmN1cnJlbnRUYXJnZXQmJm4uX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKX0pKSxpJiZjLnJlZmxvdyh0aGlzLl9iYWNrZHJvcCksZSh0aGlzLl9iYWNrZHJvcCkuYWRkQ2xhc3MoInNob3ciKSwhdClyZXR1cm47aWYoIWkpcmV0dXJuIHZvaWQgdCgpO3ZhciBvPWMuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fYmFja2Ryb3ApO2UodGhpcy5fYmFja2Ryb3ApLm9uZShjLlRSQU5TSVRJT05fRU5ELHQpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKG8pfWVsc2UgaWYoIXRoaXMuX2lzU2hvd24mJnRoaXMuX2JhY2tkcm9wKXtlKHRoaXMuX2JhY2tkcm9wKS5yZW1vdmVDbGFzcygic2hvdyIpO3ZhciBzPWZ1bmN0aW9uKCl7bi5fcmVtb3ZlQmFja2Ryb3AoKSx0JiZ0KCl9O2lmKGUodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoImZhZGUiKSl7dmFyIHI9Yy5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9iYWNrZHJvcCk7ZSh0aGlzLl9iYWNrZHJvcCkub25lKGMuVFJBTlNJVElPTl9FTkQscykuZW11bGF0ZVRyYW5zaXRpb25FbmQocil9ZWxzZSBzKCl9ZWxzZSB0JiZ0KCl9LG4uX2FkanVzdERpYWxvZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0PmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7IXRoaXMuX2lzQm9keU92ZXJmbG93aW5nJiZ0JiYodGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nTGVmdD10aGlzLl9zY3JvbGxiYXJXaWR0aCsicHgiKSx0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyYmIXQmJih0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodD10aGlzLl9zY3JvbGxiYXJXaWR0aCsicHgiKX0sbi5fcmVzZXRBZGp1c3RtZW50cz1mdW5jdGlvbigpe3RoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQ9IiIsdGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQ9IiJ9LG4uX2NoZWNrU2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLl9pc0JvZHlPdmVyZmxvd2luZz1NYXRoLnJvdW5kKHQubGVmdCt0LnJpZ2h0KTx3aW5kb3cuaW5uZXJXaWR0aCx0aGlzLl9zY3JvbGxiYXJXaWR0aD10aGlzLl9nZXRTY3JvbGxiYXJXaWR0aCgpfSxuLl9zZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuX2lzQm9keU92ZXJmbG93aW5nKXt2YXIgbj1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5maXhlZC10b3AsIC5maXhlZC1ib3R0b20sIC5pcy1maXhlZCwgLnN0aWNreS10b3AiKSksaT1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5zdGlja3ktdG9wIikpO2UobikuZWFjaCgoZnVuY3Rpb24obixpKXt2YXIgbz1pLnN0eWxlLnBhZGRpbmdSaWdodCxzPWUoaSkuY3NzKCJwYWRkaW5nLXJpZ2h0Iik7ZShpKS5kYXRhKCJwYWRkaW5nLXJpZ2h0IixvKS5jc3MoInBhZGRpbmctcmlnaHQiLHBhcnNlRmxvYXQocykrdC5fc2Nyb2xsYmFyV2lkdGgrInB4Iil9KSksZShpKS5lYWNoKChmdW5jdGlvbihuLGkpe3ZhciBvPWkuc3R5bGUubWFyZ2luUmlnaHQscz1lKGkpLmNzcygibWFyZ2luLXJpZ2h0Iik7ZShpKS5kYXRhKCJtYXJnaW4tcmlnaHQiLG8pLmNzcygibWFyZ2luLXJpZ2h0IixwYXJzZUZsb2F0KHMpLXQuX3Njcm9sbGJhcldpZHRoKyJweCIpfSkpO3ZhciBvPWRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0LHM9ZShkb2N1bWVudC5ib2R5KS5jc3MoInBhZGRpbmctcmlnaHQiKTtlKGRvY3VtZW50LmJvZHkpLmRhdGEoInBhZGRpbmctcmlnaHQiLG8pLmNzcygicGFkZGluZy1yaWdodCIscGFyc2VGbG9hdChzKSt0aGlzLl9zY3JvbGxiYXJXaWR0aCsicHgiKX1lKGRvY3VtZW50LmJvZHkpLmFkZENsYXNzKCJtb2RhbC1vcGVuIil9LG4uX3Jlc2V0U2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIHQ9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuZml4ZWQtdG9wLCAuZml4ZWQtYm90dG9tLCAuaXMtZml4ZWQsIC5zdGlja3ktdG9wIikpO2UodCkuZWFjaCgoZnVuY3Rpb24odCxuKXt2YXIgaT1lKG4pLmRhdGEoInBhZGRpbmctcmlnaHQiKTtlKG4pLnJlbW92ZURhdGEoInBhZGRpbmctcmlnaHQiKSxuLnN0eWxlLnBhZGRpbmdSaWdodD1pfHwiIn0pKTt2YXIgbj1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5zdGlja3ktdG9wIikpO2UobikuZWFjaCgoZnVuY3Rpb24odCxuKXt2YXIgaT1lKG4pLmRhdGEoIm1hcmdpbi1yaWdodCIpOyJ1bmRlZmluZWQiIT10eXBlb2YgaSYmZShuKS5jc3MoIm1hcmdpbi1yaWdodCIsaSkucmVtb3ZlRGF0YSgibWFyZ2luLXJpZ2h0Iil9KSk7dmFyIGk9ZShkb2N1bWVudC5ib2R5KS5kYXRhKCJwYWRkaW5nLXJpZ2h0Iik7ZShkb2N1bWVudC5ib2R5KS5yZW1vdmVEYXRhKCJwYWRkaW5nLXJpZ2h0IiksZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQ9aXx8IiJ9LG4uX2dldFNjcm9sbGJhcldpZHRoPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9Im1vZGFsLXNjcm9sbGJhci1tZWFzdXJlIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpO3ZhciBlPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgtdC5jbGllbnRXaWR0aDtyZXR1cm4gZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KSxlfSx0Ll9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24obixpKXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3ZhciBvPWUodGhpcykuZGF0YSgiYnMubW9kYWwiKSxzPWEoYShhKHt9LHgpLGUodGhpcykuZGF0YSgpKSwib2JqZWN0Ij09dHlwZW9mIG4mJm4/bjp7fSk7aWYob3x8KG89bmV3IHQodGhpcyxzKSxlKHRoaXMpLmRhdGEoImJzLm1vZGFsIixvKSksInN0cmluZyI9PXR5cGVvZiBuKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIG9bbl0pdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gbWV0aG9kIG5hbWVkICInK24rJyInKTtvW25dKGkpfWVsc2Ugcy5zaG93JiZvLnNob3coaSl9KSl9LG8odCxudWxsLFt7a2V5OiJWRVJTSU9OIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iNC41LjAifX0se2tleToiRGVmYXVsdCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHh9fV0pLHR9KCk7ZShkb2N1bWVudCkub24oImNsaWNrLmJzLm1vZGFsLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJtb2RhbCJdJywoZnVuY3Rpb24odCl7dmFyIG4saT10aGlzLG89Yy5nZXRTZWxlY3RvckZyb21FbGVtZW50KHRoaXMpO28mJihuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobykpO3ZhciBzPWUobikuZGF0YSgiYnMubW9kYWwiKT8idG9nZ2xlIjphKGEoe30sZShuKS5kYXRhKCkpLGUodGhpcykuZGF0YSgpKTsiQSIhPT10aGlzLnRhZ05hbWUmJiJBUkVBIiE9PXRoaXMudGFnTmFtZXx8dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciByPWUobikub25lKCJzaG93LmJzLm1vZGFsIiwoZnVuY3Rpb24odCl7dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8ci5vbmUoImhpZGRlbi5icy5tb2RhbCIsKGZ1bmN0aW9uKCl7ZShpKS5pcygiOnZpc2libGUiKSYmaS5mb2N1cygpfSkpfSkpO1IuX2pRdWVyeUludGVyZmFjZS5jYWxsKGUobikscyx0aGlzKX0pKSxlLmZuLm1vZGFsPVIuX2pRdWVyeUludGVyZmFjZSxlLmZuLm1vZGFsLkNvbnN0cnVjdG9yPVIsZS5mbi5tb2RhbC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4ubW9kYWw9UCxSLl9qUXVlcnlJbnRlcmZhY2V9O3ZhciBxPVsiYmFja2dyb3VuZCIsImNpdGUiLCJocmVmIiwiaXRlbXR5cGUiLCJsb25nZGVzYyIsInBvc3RlciIsInNyYyIsInhsaW5rOmhyZWYiXSxGPXsiKiI6WyJjbGFzcyIsImRpciIsImlkIiwibGFuZyIsInJvbGUiLC9eYXJpYS1bXHctXSokL2ldLGE6WyJ0YXJnZXQiLCJocmVmIiwidGl0bGUiLCJyZWwiXSxhcmVhOltdLGI6W10sYnI6W10sY29sOltdLGNvZGU6W10sZGl2OltdLGVtOltdLGhyOltdLGgxOltdLGgyOltdLGgzOltdLGg0OltdLGg1OltdLGg2OltdLGk6W10saW1nOlsic3JjIiwic3Jjc2V0IiwiYWx0IiwidGl0bGUiLCJ3aWR0aCIsImhlaWdodCJdLGxpOltdLG9sOltdLHA6W10scHJlOltdLHM6W10sc21hbGw6W10sc3BhbjpbXSxzdWI6W10sc3VwOltdLHN0cm9uZzpbXSx1OltdLHVsOltdfSxRPS9eKD86KD86aHR0cHM/fG1haWx0b3xmdHB8dGVsfGZpbGUpOnxbXiMmLzo/XSooPzpbIy8/XXwkKSkvZ2ksQj0vXmRhdGE6KD86aW1hZ2VcLyg/OmJtcHxnaWZ8anBlZ3xqcGd8cG5nfHRpZmZ8d2VicCl8dmlkZW9cLyg/Om1wZWd8bXA0fG9nZ3x3ZWJtKXxhdWRpb1wvKD86bXAzfG9nYXxvZ2d8b3B1cykpO2Jhc2U2NCxbXGQrL2Etel0rPSokL2k7ZnVuY3Rpb24gSCh0LGUsbil7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0O2lmKG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuKXJldHVybiBuKHQpO2Zvcih2YXIgaT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyh0LCJ0ZXh0L2h0bWwiKSxvPU9iamVjdC5rZXlzKGUpLHM9W10uc2xpY2UuY2FsbChpLmJvZHkucXVlcnlTZWxlY3RvckFsbCgiKiIpKSxyPWZ1bmN0aW9uKHQsbil7dmFyIGk9c1t0XSxyPWkubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZigtMT09PW8uaW5kZXhPZihpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpKXJldHVybiBpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSksImNvbnRpbnVlIjt2YXIgYT1bXS5zbGljZS5jYWxsKGkuYXR0cmlidXRlcyksbD1bXS5jb25jYXQoZVsiKiJdfHxbXSxlW3JdfHxbXSk7YS5mb3JFYWNoKChmdW5jdGlvbih0KXsoZnVuY3Rpb24odCxlKXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoLTEhPT1lLmluZGV4T2YobikpcmV0dXJuLTE9PT1xLmluZGV4T2Yobil8fEJvb2xlYW4odC5ub2RlVmFsdWUubWF0Y2goUSl8fHQubm9kZVZhbHVlLm1hdGNoKEIpKTtmb3IodmFyIGk9ZS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfSkpLG89MCxzPWkubGVuZ3RoO288cztvKyspaWYobi5tYXRjaChpW29dKSlyZXR1cm4hMDtyZXR1cm4hMX0pKHQsbCl8fGkucmVtb3ZlQXR0cmlidXRlKHQubm9kZU5hbWUpfSkpfSxhPTAsbD1zLmxlbmd0aDthPGw7YSsrKXIoYSk7cmV0dXJuIGkuYm9keS5pbm5lckhUTUx9dmFyIFU9InRvb2x0aXAiLE09ZS5mbltVXSxXPW5ldyBSZWdFeHAoIihefFxccylicy10b29sdGlwXFxTKyIsImciKSxWPVsic2FuaXRpemUiLCJ3aGl0ZUxpc3QiLCJzYW5pdGl6ZUZuIl0sej17YW5pbWF0aW9uOiJib29sZWFuIix0ZW1wbGF0ZToic3RyaW5nIix0aXRsZToiKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKSIsdHJpZ2dlcjoic3RyaW5nIixkZWxheToiKG51bWJlcnxvYmplY3QpIixodG1sOiJib29sZWFuIixzZWxlY3RvcjoiKHN0cmluZ3xib29sZWFuKSIscGxhY2VtZW50OiIoc3RyaW5nfGZ1bmN0aW9uKSIsb2Zmc2V0OiIobnVtYmVyfHN0cmluZ3xmdW5jdGlvbikiLGNvbnRhaW5lcjoiKHN0cmluZ3xlbGVtZW50fGJvb2xlYW4pIixmYWxsYmFja1BsYWNlbWVudDoiKHN0cmluZ3xhcnJheSkiLGJvdW5kYXJ5OiIoc3RyaW5nfGVsZW1lbnQpIixzYW5pdGl6ZToiYm9vbGVhbiIsc2FuaXRpemVGbjoiKG51bGx8ZnVuY3Rpb24pIix3aGl0ZUxpc3Q6Im9iamVjdCIscG9wcGVyQ29uZmlnOiIobnVsbHxvYmplY3QpIn0sSz17QVVUTzoiYXV0byIsVE9QOiJ0b3AiLFJJR0hUOiJyaWdodCIsQk9UVE9NOiJib3R0b20iLExFRlQ6ImxlZnQifSxYPXthbmltYXRpb246ITAsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InRvb2x0aXAiIHJvbGU9InRvb2x0aXAiPjxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj48ZGl2IGNsYXNzPSJ0b29sdGlwLWlubmVyIj48L2Rpdj48L2Rpdj4nLHRyaWdnZXI6ImhvdmVyIGZvY3VzIix0aXRsZToiIixkZWxheTowLGh0bWw6ITEsc2VsZWN0b3I6ITEscGxhY2VtZW50OiJ0b3AiLG9mZnNldDowLGNvbnRhaW5lcjohMSxmYWxsYmFja1BsYWNlbWVudDoiZmxpcCIsYm91bmRhcnk6InNjcm9sbFBhcmVudCIsc2FuaXRpemU6ITAsc2FuaXRpemVGbjpudWxsLHdoaXRlTGlzdDpGLHBvcHBlckNvbmZpZzpudWxsfSxZPXtISURFOiJoaWRlLmJzLnRvb2x0aXAiLEhJRERFTjoiaGlkZGVuLmJzLnRvb2x0aXAiLFNIT1c6InNob3cuYnMudG9vbHRpcCIsU0hPV046InNob3duLmJzLnRvb2x0aXAiLElOU0VSVEVEOiJpbnNlcnRlZC5icy50b29sdGlwIixDTElDSzoiY2xpY2suYnMudG9vbHRpcCIsRk9DVVNJTjoiZm9jdXNpbi5icy50b29sdGlwIixGT0NVU09VVDoiZm9jdXNvdXQuYnMudG9vbHRpcCIsTU9VU0VFTlRFUjoibW91c2VlbnRlci5icy50b29sdGlwIixNT1VTRUxFQVZFOiJtb3VzZWxlYXZlLmJzLnRvb2x0aXAifSwkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJCb290c3RyYXAncyB0b29sdGlwcyByZXF1aXJlIFBvcHBlci5qcyAoaHR0cHM6Ly9wb3BwZXIuanMub3JnLykiKTt0aGlzLl9pc0VuYWJsZWQ9ITAsdGhpcy5fdGltZW91dD0wLHRoaXMuX2hvdmVyU3RhdGU9IiIsdGhpcy5fYWN0aXZlVHJpZ2dlcj17fSx0aGlzLl9wb3BwZXI9bnVsbCx0aGlzLmVsZW1lbnQ9dCx0aGlzLmNvbmZpZz10aGlzLl9nZXRDb25maWcoZSksdGhpcy50aXA9bnVsbCx0aGlzLl9zZXRMaXN0ZW5lcnMoKX12YXIgaT10LnByb3RvdHlwZTtyZXR1cm4gaS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLl9pc0VuYWJsZWQ9ITB9LGkuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX2lzRW5hYmxlZD0hMX0saS50b2dnbGVFbmFibGVkPWZ1bmN0aW9uKCl7dGhpcy5faXNFbmFibGVkPSF0aGlzLl9pc0VuYWJsZWR9LGkudG9nZ2xlPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2lzRW5hYmxlZClpZih0KXt2YXIgbj10aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLGk9ZSh0LmN1cnJlbnRUYXJnZXQpLmRhdGEobik7aXx8KGk9bmV3IHRoaXMuY29uc3RydWN0b3IodC5jdXJyZW50VGFyZ2V0LHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpLGUodC5jdXJyZW50VGFyZ2V0KS5kYXRhKG4saSkpLGkuX2FjdGl2ZVRyaWdnZXIuY2xpY2s9IWkuX2FjdGl2ZVRyaWdnZXIuY2xpY2ssaS5faXNXaXRoQWN0aXZlVHJpZ2dlcigpP2kuX2VudGVyKG51bGwsaSk6aS5fbGVhdmUobnVsbCxpKX1lbHNle2lmKGUodGhpcy5nZXRUaXBFbGVtZW50KCkpLmhhc0NsYXNzKCJzaG93IikpcmV0dXJuIHZvaWQgdGhpcy5fbGVhdmUobnVsbCx0aGlzKTt0aGlzLl9lbnRlcihudWxsLHRoaXMpfX0saS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpLGUucmVtb3ZlRGF0YSh0aGlzLmVsZW1lbnQsdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSksZSh0aGlzLmVsZW1lbnQpLm9mZih0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0tFWSksZSh0aGlzLmVsZW1lbnQpLmNsb3Nlc3QoIi5tb2RhbCIpLm9mZigiaGlkZS5icy5tb2RhbCIsdGhpcy5faGlkZU1vZGFsSGFuZGxlciksdGhpcy50aXAmJmUodGhpcy50aXApLnJlbW92ZSgpLHRoaXMuX2lzRW5hYmxlZD1udWxsLHRoaXMuX3RpbWVvdXQ9bnVsbCx0aGlzLl9ob3ZlclN0YXRlPW51bGwsdGhpcy5fYWN0aXZlVHJpZ2dlcj1udWxsLHRoaXMuX3BvcHBlciYmdGhpcy5fcG9wcGVyLmRlc3Ryb3koKSx0aGlzLl9wb3BwZXI9bnVsbCx0aGlzLmVsZW1lbnQ9bnVsbCx0aGlzLmNvbmZpZz1udWxsLHRoaXMudGlwPW51bGx9LGkuc2hvdz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoIm5vbmUiPT09ZSh0aGlzLmVsZW1lbnQpLmNzcygiZGlzcGxheSIpKXRocm93IG5ldyBFcnJvcigiUGxlYXNlIHVzZSBzaG93IG9uIHZpc2libGUgZWxlbWVudHMiKTt2YXIgaT1lLkV2ZW50KHRoaXMuY29uc3RydWN0b3IuRXZlbnQuU0hPVyk7aWYodGhpcy5pc1dpdGhDb250ZW50KCkmJnRoaXMuX2lzRW5hYmxlZCl7ZSh0aGlzLmVsZW1lbnQpLnRyaWdnZXIoaSk7dmFyIG89Yy5maW5kU2hhZG93Um9vdCh0aGlzLmVsZW1lbnQpLHM9ZS5jb250YWlucyhudWxsIT09bz9vOnRoaXMuZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0aGlzLmVsZW1lbnQpO2lmKGkuaXNEZWZhdWx0UHJldmVudGVkKCl8fCFzKXJldHVybjt2YXIgcj10aGlzLmdldFRpcEVsZW1lbnQoKSxhPWMuZ2V0VUlEKHRoaXMuY29uc3RydWN0b3IuTkFNRSk7ci5zZXRBdHRyaWJ1dGUoImlkIixhKSx0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixhKSx0aGlzLnNldENvbnRlbnQoKSx0aGlzLmNvbmZpZy5hbmltYXRpb24mJmUocikuYWRkQ2xhc3MoImZhZGUiKTt2YXIgbD0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5jb25maWcucGxhY2VtZW50P3RoaXMuY29uZmlnLnBsYWNlbWVudC5jYWxsKHRoaXMscix0aGlzLmVsZW1lbnQpOnRoaXMuY29uZmlnLnBsYWNlbWVudCxoPXRoaXMuX2dldEF0dGFjaG1lbnQobCk7dGhpcy5hZGRBdHRhY2htZW50Q2xhc3MoaCk7dmFyIHU9dGhpcy5fZ2V0Q29udGFpbmVyKCk7ZShyKS5kYXRhKHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVksdGhpcyksZS5jb250YWlucyh0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdGhpcy50aXApfHxlKHIpLmFwcGVuZFRvKHUpLGUodGhpcy5lbGVtZW50KS50cmlnZ2VyKHRoaXMuY29uc3RydWN0b3IuRXZlbnQuSU5TRVJURUQpLHRoaXMuX3BvcHBlcj1uZXcgbih0aGlzLmVsZW1lbnQscix0aGlzLl9nZXRQb3BwZXJDb25maWcoaCkpLGUocikuYWRkQ2xhc3MoInNob3ciKSwib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmZShkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9uKCJtb3VzZW92ZXIiLG51bGwsZS5ub29wKTt2YXIgZD1mdW5jdGlvbigpe3QuY29uZmlnLmFuaW1hdGlvbiYmdC5fZml4VHJhbnNpdGlvbigpO3ZhciBuPXQuX2hvdmVyU3RhdGU7dC5faG92ZXJTdGF0ZT1udWxsLGUodC5lbGVtZW50KS50cmlnZ2VyKHQuY29uc3RydWN0b3IuRXZlbnQuU0hPV04pLCJvdXQiPT09biYmdC5fbGVhdmUobnVsbCx0KX07aWYoZSh0aGlzLnRpcCkuaGFzQ2xhc3MoImZhZGUiKSl7dmFyIGY9Yy5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLnRpcCk7ZSh0aGlzLnRpcCkub25lKGMuVFJBTlNJVElPTl9FTkQsZCkuZW11bGF0ZVRyYW5zaXRpb25FbmQoZil9ZWxzZSBkKCl9fSxpLmhpZGU9ZnVuY3Rpb24odCl7dmFyIG49dGhpcyxpPXRoaXMuZ2V0VGlwRWxlbWVudCgpLG89ZS5FdmVudCh0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LkhJREUpLHM9ZnVuY3Rpb24oKXsic2hvdyIhPT1uLl9ob3ZlclN0YXRlJiZpLnBhcmVudE5vZGUmJmkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpKSxuLl9jbGVhblRpcENsYXNzKCksbi5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIpLGUobi5lbGVtZW50KS50cmlnZ2VyKG4uY29uc3RydWN0b3IuRXZlbnQuSElEREVOKSxudWxsIT09bi5fcG9wcGVyJiZuLl9wb3BwZXIuZGVzdHJveSgpLHQmJnQoKX07aWYoZSh0aGlzLmVsZW1lbnQpLnRyaWdnZXIobyksIW8uaXNEZWZhdWx0UHJldmVudGVkKCkpe2lmKGUoaSkucmVtb3ZlQ2xhc3MoInNob3ciKSwib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmZShkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9mZigibW91c2VvdmVyIixudWxsLGUubm9vcCksdGhpcy5fYWN0aXZlVHJpZ2dlci5jbGljaz0hMSx0aGlzLl9hY3RpdmVUcmlnZ2VyLmZvY3VzPSExLHRoaXMuX2FjdGl2ZVRyaWdnZXIuaG92ZXI9ITEsZSh0aGlzLnRpcCkuaGFzQ2xhc3MoImZhZGUiKSl7dmFyIHI9Yy5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudChpKTtlKGkpLm9uZShjLlRSQU5TSVRJT05fRU5ELHMpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHIpfWVsc2UgcygpO3RoaXMuX2hvdmVyU3RhdGU9IiJ9fSxpLnVwZGF0ZT1mdW5jdGlvbigpe251bGwhPT10aGlzLl9wb3BwZXImJnRoaXMuX3BvcHBlci5zY2hlZHVsZVVwZGF0ZSgpfSxpLmlzV2l0aENvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbih0aGlzLmdldFRpdGxlKCkpfSxpLmFkZEF0dGFjaG1lbnRDbGFzcz1mdW5jdGlvbih0KXtlKHRoaXMuZ2V0VGlwRWxlbWVudCgpKS5hZGRDbGFzcygiYnMtdG9vbHRpcC0iK3QpfSxpLmdldFRpcEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aXA9dGhpcy50aXB8fGUodGhpcy5jb25maWcudGVtcGxhdGUpWzBdLHRoaXMudGlwfSxpLnNldENvbnRlbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldFRpcEVsZW1lbnQoKTt0aGlzLnNldEVsZW1lbnRDb250ZW50KGUodC5xdWVyeVNlbGVjdG9yQWxsKCIudG9vbHRpcC1pbm5lciIpKSx0aGlzLmdldFRpdGxlKCkpLGUodCkucmVtb3ZlQ2xhc3MoImZhZGUgc2hvdyIpfSxpLnNldEVsZW1lbnRDb250ZW50PWZ1bmN0aW9uKHQsbil7Im9iamVjdCIhPXR5cGVvZiBufHwhbi5ub2RlVHlwZSYmIW4uanF1ZXJ5P3RoaXMuY29uZmlnLmh0bWw/KHRoaXMuY29uZmlnLnNhbml0aXplJiYobj1IKG4sdGhpcy5jb25maWcud2hpdGVMaXN0LHRoaXMuY29uZmlnLnNhbml0aXplRm4pKSx0Lmh0bWwobikpOnQudGV4dChuKTp0aGlzLmNvbmZpZy5odG1sP2UobikucGFyZW50KCkuaXModCl8fHQuZW1wdHkoKS5hcHBlbmQobik6dC50ZXh0KGUobikudGV4dCgpKX0saS5nZXRUaXRsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtb3JpZ2luYWwtdGl0bGUiKTtyZXR1cm4gdHx8KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuY29uZmlnLnRpdGxlP3RoaXMuY29uZmlnLnRpdGxlLmNhbGwodGhpcy5lbGVtZW50KTp0aGlzLmNvbmZpZy50aXRsZSksdH0saS5fZ2V0UG9wcGVyQ29uZmlnPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIGEoYSh7fSx7cGxhY2VtZW50OnQsbW9kaWZpZXJzOntvZmZzZXQ6dGhpcy5fZ2V0T2Zmc2V0KCksZmxpcDp7YmVoYXZpb3I6dGhpcy5jb25maWcuZmFsbGJhY2tQbGFjZW1lbnR9LGFycm93OntlbGVtZW50OiIuYXJyb3cifSxwcmV2ZW50T3ZlcmZsb3c6e2JvdW5kYXJpZXNFbGVtZW50OnRoaXMuY29uZmlnLmJvdW5kYXJ5fX0sb25DcmVhdGU6ZnVuY3Rpb24odCl7dC5vcmlnaW5hbFBsYWNlbWVudCE9PXQucGxhY2VtZW50JiZlLl9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2UodCl9LG9uVXBkYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBlLl9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2UodCl9fSksdGhpcy5jb25maWcucG9wcGVyQ29uZmlnKX0saS5fZ2V0T2Zmc2V0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXt9O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmNvbmZpZy5vZmZzZXQ/ZS5mbj1mdW5jdGlvbihlKXtyZXR1cm4gZS5vZmZzZXRzPWEoYSh7fSxlLm9mZnNldHMpLHQuY29uZmlnLm9mZnNldChlLm9mZnNldHMsdC5lbGVtZW50KXx8e30pLGV9OmUub2Zmc2V0PXRoaXMuY29uZmlnLm9mZnNldCxlfSxpLl9nZXRDb250YWluZXI9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuY29uZmlnLmNvbnRhaW5lcj9kb2N1bWVudC5ib2R5OmMuaXNFbGVtZW50KHRoaXMuY29uZmlnLmNvbnRhaW5lcik/ZSh0aGlzLmNvbmZpZy5jb250YWluZXIpOmUoZG9jdW1lbnQpLmZpbmQodGhpcy5jb25maWcuY29udGFpbmVyKX0saS5fZ2V0QXR0YWNobWVudD1mdW5jdGlvbih0KXtyZXR1cm4gS1t0LnRvVXBwZXJDYXNlKCldfSxpLl9zZXRMaXN0ZW5lcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuY29uZmlnLnRyaWdnZXIuc3BsaXQoIiAiKS5mb3JFYWNoKChmdW5jdGlvbihuKXtpZigiY2xpY2siPT09billKHQuZWxlbWVudCkub24odC5jb25zdHJ1Y3Rvci5FdmVudC5DTElDSyx0LmNvbmZpZy5zZWxlY3RvciwoZnVuY3Rpb24oZSl7cmV0dXJuIHQudG9nZ2xlKGUpfSkpO2Vsc2UgaWYoIm1hbnVhbCIhPT1uKXt2YXIgaT0iaG92ZXIiPT09bj90LmNvbnN0cnVjdG9yLkV2ZW50Lk1PVVNFRU5URVI6dC5jb25zdHJ1Y3Rvci5FdmVudC5GT0NVU0lOLG89ImhvdmVyIj09PW4/dC5jb25zdHJ1Y3Rvci5FdmVudC5NT1VTRUxFQVZFOnQuY29uc3RydWN0b3IuRXZlbnQuRk9DVVNPVVQ7ZSh0LmVsZW1lbnQpLm9uKGksdC5jb25maWcuc2VsZWN0b3IsKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9lbnRlcihlKX0pKS5vbihvLHQuY29uZmlnLnNlbGVjdG9yLChmdW5jdGlvbihlKXtyZXR1cm4gdC5fbGVhdmUoZSl9KSl9fSkpLHRoaXMuX2hpZGVNb2RhbEhhbmRsZXI9ZnVuY3Rpb24oKXt0LmVsZW1lbnQmJnQuaGlkZSgpfSxlKHRoaXMuZWxlbWVudCkuY2xvc2VzdCgiLm1vZGFsIikub24oImhpZGUuYnMubW9kYWwiLHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIpLHRoaXMuY29uZmlnLnNlbGVjdG9yP3RoaXMuY29uZmlnPWEoYSh7fSx0aGlzLmNvbmZpZykse30se3RyaWdnZXI6Im1hbnVhbCIsc2VsZWN0b3I6IiJ9KTp0aGlzLl9maXhUaXRsZSgpfSxpLl9maXhUaXRsZT1mdW5jdGlvbigpe3ZhciB0PXR5cGVvZiB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLW9yaWdpbmFsLXRpdGxlIik7KHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoInRpdGxlIil8fCJzdHJpbmciIT09dCkmJih0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLW9yaWdpbmFsLXRpdGxlIix0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpfHwiIiksdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgidGl0bGUiLCIiKSl9LGkuX2VudGVyPWZ1bmN0aW9uKHQsbil7dmFyIGk9dGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWTsobj1ufHxlKHQuY3VycmVudFRhcmdldCkuZGF0YShpKSl8fChuPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHQuY3VycmVudFRhcmdldCx0aGlzLl9nZXREZWxlZ2F0ZUNvbmZpZygpKSxlKHQuY3VycmVudFRhcmdldCkuZGF0YShpLG4pKSx0JiYobi5fYWN0aXZlVHJpZ2dlclsiZm9jdXNpbiI9PT10LnR5cGU/ImZvY3VzIjoiaG92ZXIiXT0hMCksZShuLmdldFRpcEVsZW1lbnQoKSkuaGFzQ2xhc3MoInNob3ciKXx8InNob3ciPT09bi5faG92ZXJTdGF0ZT9uLl9ob3ZlclN0YXRlPSJzaG93IjooY2xlYXJUaW1lb3V0KG4uX3RpbWVvdXQpLG4uX2hvdmVyU3RhdGU9InNob3ciLG4uY29uZmlnLmRlbGF5JiZuLmNvbmZpZy5kZWxheS5zaG93P24uX3RpbWVvdXQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXsic2hvdyI9PT1uLl9ob3ZlclN0YXRlJiZuLnNob3coKX0pLG4uY29uZmlnLmRlbGF5LnNob3cpOm4uc2hvdygpKX0saS5fbGVhdmU9ZnVuY3Rpb24odCxuKXt2YXIgaT10aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZOyhuPW58fGUodC5jdXJyZW50VGFyZ2V0KS5kYXRhKGkpKXx8KG49bmV3IHRoaXMuY29uc3RydWN0b3IodC5jdXJyZW50VGFyZ2V0LHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpLGUodC5jdXJyZW50VGFyZ2V0KS5kYXRhKGksbikpLHQmJihuLl9hY3RpdmVUcmlnZ2VyWyJmb2N1c291dCI9PT10LnR5cGU/ImZvY3VzIjoiaG92ZXIiXT0hMSksbi5faXNXaXRoQWN0aXZlVHJpZ2dlcigpfHwoY2xlYXJUaW1lb3V0KG4uX3RpbWVvdXQpLG4uX2hvdmVyU3RhdGU9Im91dCIsbi5jb25maWcuZGVsYXkmJm4uY29uZmlnLmRlbGF5LmhpZGU/bi5fdGltZW91dD1zZXRUaW1lb3V0KChmdW5jdGlvbigpeyJvdXQiPT09bi5faG92ZXJTdGF0ZSYmbi5oaWRlKCl9KSxuLmNvbmZpZy5kZWxheS5oaWRlKTpuLmhpZGUoKSl9LGkuX2lzV2l0aEFjdGl2ZVRyaWdnZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fYWN0aXZlVHJpZ2dlcilpZih0aGlzLl9hY3RpdmVUcmlnZ2VyW3RdKXJldHVybiEwO3JldHVybiExfSxpLl9nZXRDb25maWc9ZnVuY3Rpb24odCl7dmFyIG49ZSh0aGlzLmVsZW1lbnQpLmRhdGEoKTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaCgoZnVuY3Rpb24odCl7LTEhPT1WLmluZGV4T2YodCkmJmRlbGV0ZSBuW3RdfSkpLCJudW1iZXIiPT10eXBlb2YodD1hKGEoYSh7fSx0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHQpLG4pLCJvYmplY3QiPT10eXBlb2YgdCYmdD90Ont9KSkuZGVsYXkmJih0LmRlbGF5PXtzaG93OnQuZGVsYXksaGlkZTp0LmRlbGF5fSksIm51bWJlciI9PXR5cGVvZiB0LnRpdGxlJiYodC50aXRsZT10LnRpdGxlLnRvU3RyaW5nKCkpLCJudW1iZXIiPT10eXBlb2YgdC5jb250ZW50JiYodC5jb250ZW50PXQuY29udGVudC50b1N0cmluZygpKSxjLnR5cGVDaGVja0NvbmZpZyhVLHQsdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSksdC5zYW5pdGl6ZSYmKHQudGVtcGxhdGU9SCh0LnRlbXBsYXRlLHQud2hpdGVMaXN0LHQuc2FuaXRpemVGbikpLHR9LGkuX2dldERlbGVnYXRlQ29uZmlnPWZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5jb25maWcpZm9yKHZhciBlIGluIHRoaXMuY29uZmlnKXRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFtlXSE9PXRoaXMuY29uZmlnW2VdJiYodFtlXT10aGlzLmNvbmZpZ1tlXSk7cmV0dXJuIHR9LGkuX2NsZWFuVGlwQ2xhc3M9ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMuZ2V0VGlwRWxlbWVudCgpKSxuPXQuYXR0cigiY2xhc3MiKS5tYXRjaChXKTtudWxsIT09biYmbi5sZW5ndGgmJnQucmVtb3ZlQ2xhc3Mobi5qb2luKCIiKSl9LGkuX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZT1mdW5jdGlvbih0KXt0aGlzLnRpcD10Lmluc3RhbmNlLnBvcHBlcix0aGlzLl9jbGVhblRpcENsYXNzKCksdGhpcy5hZGRBdHRhY2htZW50Q2xhc3ModGhpcy5fZ2V0QXR0YWNobWVudCh0LnBsYWNlbWVudCkpfSxpLl9maXhUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRUaXBFbGVtZW50KCksbj10aGlzLmNvbmZpZy5hbmltYXRpb247bnVsbD09PXQuZ2V0QXR0cmlidXRlKCJ4LXBsYWNlbWVudCIpJiYoZSh0KS5yZW1vdmVDbGFzcygiZmFkZSIpLHRoaXMuY29uZmlnLmFuaW1hdGlvbj0hMSx0aGlzLmhpZGUoKSx0aGlzLnNob3coKSx0aGlzLmNvbmZpZy5hbmltYXRpb249bil9LHQuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3ZhciBpPWUodGhpcykuZGF0YSgiYnMudG9vbHRpcCIpLG89Im9iamVjdCI9PXR5cGVvZiBuJiZuO2lmKChpfHwhL2Rpc3Bvc2V8aGlkZS8udGVzdChuKSkmJihpfHwoaT1uZXcgdCh0aGlzLG8pLGUodGhpcykuZGF0YSgiYnMudG9vbHRpcCIsaSkpLCJzdHJpbmciPT10eXBlb2Ygbikpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgaVtuXSl0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBtZXRob2QgbmFtZWQgIicrbisnIicpO2lbbl0oKX19KSl9LG8odCxudWxsLFt7a2V5OiJWRVJTSU9OIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iNC41LjAifX0se2tleToiRGVmYXVsdCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFh9fSx7a2V5OiJOQU1FIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVX19LHtrZXk6IkRBVEFfS0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iYnMudG9vbHRpcCJ9fSx7a2V5OiJFdmVudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFl9fSx7a2V5OiJFVkVOVF9LRVkiLGdldDpmdW5jdGlvbigpe3JldHVybiIuYnMudG9vbHRpcCJ9fSx7a2V5OiJEZWZhdWx0VHlwZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHp9fV0pLHR9KCk7ZS5mbltVXT0kLl9qUXVlcnlJbnRlcmZhY2UsZS5mbltVXS5Db25zdHJ1Y3Rvcj0kLGUuZm5bVV0ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuW1VdPU0sJC5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgSj0icG9wb3ZlciIsRz1lLmZuW0pdLFo9bmV3IFJlZ0V4cCgiKF58XFxzKWJzLXBvcG92ZXJcXFMrIiwiZyIpLHR0PWEoYSh7fSwkLkRlZmF1bHQpLHt9LHtwbGFjZW1lbnQ6InJpZ2h0Iix0cmlnZ2VyOiJjbGljayIsY29udGVudDoiIix0ZW1wbGF0ZTonPGRpdiBjbGFzcz0icG9wb3ZlciIgcm9sZT0idG9vbHRpcCI+PGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2PjxoMyBjbGFzcz0icG9wb3Zlci1oZWFkZXIiPjwvaDM+PGRpdiBjbGFzcz0icG9wb3Zlci1ib2R5Ij48L2Rpdj48L2Rpdj4nfSksZXQ9YShhKHt9LCQuRGVmYXVsdFR5cGUpLHt9LHtjb250ZW50OiIoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pIn0pLG50PXtISURFOiJoaWRlLmJzLnBvcG92ZXIiLEhJRERFTjoiaGlkZGVuLmJzLnBvcG92ZXIiLFNIT1c6InNob3cuYnMucG9wb3ZlciIsU0hPV046InNob3duLmJzLnBvcG92ZXIiLElOU0VSVEVEOiJpbnNlcnRlZC5icy5wb3BvdmVyIixDTElDSzoiY2xpY2suYnMucG9wb3ZlciIsRk9DVVNJTjoiZm9jdXNpbi5icy5wb3BvdmVyIixGT0NVU09VVDoiZm9jdXNvdXQuYnMucG9wb3ZlciIsTU9VU0VFTlRFUjoibW91c2VlbnRlci5icy5wb3BvdmVyIixNT1VTRUxFQVZFOiJtb3VzZWxlYXZlLmJzLnBvcG92ZXIifSxpdD1mdW5jdGlvbih0KXt2YXIgbixpO2Z1bmN0aW9uIHMoKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9aT10LChuPXMpLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLG4uX19wcm90b19fPWk7dmFyIHI9cy5wcm90b3R5cGU7cmV0dXJuIHIuaXNXaXRoQ29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl8fHRoaXMuX2dldENvbnRlbnQoKX0sci5hZGRBdHRhY2htZW50Q2xhc3M9ZnVuY3Rpb24odCl7ZSh0aGlzLmdldFRpcEVsZW1lbnQoKSkuYWRkQ2xhc3MoImJzLXBvcG92ZXItIit0KX0sci5nZXRUaXBFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGlwPXRoaXMudGlwfHxlKHRoaXMuY29uZmlnLnRlbXBsYXRlKVswXSx0aGlzLnRpcH0sci5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzLmdldFRpcEVsZW1lbnQoKSk7dGhpcy5zZXRFbGVtZW50Q29udGVudCh0LmZpbmQoIi5wb3BvdmVyLWhlYWRlciIpLHRoaXMuZ2V0VGl0bGUoKSk7dmFyIG49dGhpcy5fZ2V0Q29udGVudCgpOyJmdW5jdGlvbiI9PXR5cGVvZiBuJiYobj1uLmNhbGwodGhpcy5lbGVtZW50KSksdGhpcy5zZXRFbGVtZW50Q29udGVudCh0LmZpbmQoIi5wb3BvdmVyLWJvZHkiKSxuKSx0LnJlbW92ZUNsYXNzKCJmYWRlIHNob3ciKX0sci5fZ2V0Q29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvbnRlbnQiKXx8dGhpcy5jb25maWcuY29udGVudH0sci5fY2xlYW5UaXBDbGFzcz1mdW5jdGlvbigpe3ZhciB0PWUodGhpcy5nZXRUaXBFbGVtZW50KCkpLG49dC5hdHRyKCJjbGFzcyIpLm1hdGNoKFopO251bGwhPT1uJiZuLmxlbmd0aD4wJiZ0LnJlbW92ZUNsYXNzKG4uam9pbigiIikpfSxzLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt2YXIgbj1lKHRoaXMpLmRhdGEoImJzLnBvcG92ZXIiKSxpPSJvYmplY3QiPT10eXBlb2YgdD90Om51bGw7aWYoKG58fCEvZGlzcG9zZXxoaWRlLy50ZXN0KHQpKSYmKG58fChuPW5ldyBzKHRoaXMsaSksZSh0aGlzKS5kYXRhKCJicy5wb3BvdmVyIixuKSksInN0cmluZyI9PXR5cGVvZiB0KSl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBuW3RdKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCAiJyt0KyciJyk7blt0XSgpfX0pKX0sbyhzLG51bGwsW3trZXk6IlZFUlNJT04iLGdldDpmdW5jdGlvbigpe3JldHVybiI0LjUuMCJ9fSx7a2V5OiJEZWZhdWx0IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdHR9fSx7a2V5OiJOQU1FIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSn19LHtrZXk6IkRBVEFfS0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iYnMucG9wb3ZlciJ9fSx7a2V5OiJFdmVudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG50fX0se2tleToiRVZFTlRfS0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iLmJzLnBvcG92ZXIifX0se2tleToiRGVmYXVsdFR5cGUiLGdldDpmdW5jdGlvbigpe3JldHVybiBldH19XSksc30oJCk7ZS5mbltKXT1pdC5falF1ZXJ5SW50ZXJmYWNlLGUuZm5bSl0uQ29uc3RydWN0b3I9aXQsZS5mbltKXS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm5bSl09RyxpdC5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgb3Q9InNjcm9sbHNweSIsc3Q9ZS5mbltvdF0scnQ9e29mZnNldDoxMCxtZXRob2Q6ImF1dG8iLHRhcmdldDoiIn0sYXQ9e29mZnNldDoibnVtYmVyIixtZXRob2Q6InN0cmluZyIsdGFyZ2V0OiIoc3RyaW5nfGVsZW1lbnQpIn0sbHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsbil7dmFyIGk9dGhpczt0aGlzLl9lbGVtZW50PXQsdGhpcy5fc2Nyb2xsRWxlbWVudD0iQk9EWSI9PT10LnRhZ05hbWU/d2luZG93OnQsdGhpcy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyhuKSx0aGlzLl9zZWxlY3Rvcj10aGlzLl9jb25maWcudGFyZ2V0KyIgLm5hdi1saW5rLCIrdGhpcy5fY29uZmlnLnRhcmdldCsiIC5saXN0LWdyb3VwLWl0ZW0sIit0aGlzLl9jb25maWcudGFyZ2V0KyIgLmRyb3Bkb3duLWl0ZW0iLHRoaXMuX29mZnNldHM9W10sdGhpcy5fdGFyZ2V0cz1bXSx0aGlzLl9hY3RpdmVUYXJnZXQ9bnVsbCx0aGlzLl9zY3JvbGxIZWlnaHQ9MCxlKHRoaXMuX3Njcm9sbEVsZW1lbnQpLm9uKCJzY3JvbGwuYnMuc2Nyb2xsc3B5IiwoZnVuY3Rpb24odCl7cmV0dXJuIGkuX3Byb2Nlc3ModCl9KSksdGhpcy5yZWZyZXNoKCksdGhpcy5fcHJvY2VzcygpfXZhciBuPXQucHJvdG90eXBlO3JldHVybiBuLnJlZnJlc2g9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49dGhpcy5fc2Nyb2xsRWxlbWVudD09PXRoaXMuX3Njcm9sbEVsZW1lbnQud2luZG93PyJvZmZzZXQiOiJwb3NpdGlvbiIsaT0iYXV0byI9PT10aGlzLl9jb25maWcubWV0aG9kP246dGhpcy5fY29uZmlnLm1ldGhvZCxvPSJwb3NpdGlvbiI9PT1pP3RoaXMuX2dldFNjcm9sbFRvcCgpOjA7dGhpcy5fb2Zmc2V0cz1bXSx0aGlzLl90YXJnZXRzPVtdLHRoaXMuX3Njcm9sbEhlaWdodD10aGlzLl9nZXRTY3JvbGxIZWlnaHQoKSxbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fc2VsZWN0b3IpKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBuLHM9Yy5nZXRTZWxlY3RvckZyb21FbGVtZW50KHQpO2lmKHMmJihuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocykpLG4pe3ZhciByPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoci53aWR0aHx8ci5oZWlnaHQpcmV0dXJuW2UobilbaV0oKS50b3ArbyxzXX1yZXR1cm4gbnVsbH0pKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0tZVswXX0pKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0Ll9vZmZzZXRzLnB1c2goZVswXSksdC5fdGFyZ2V0cy5wdXNoKGVbMV0pfSkpfSxuLmRpc3Bvc2U9ZnVuY3Rpb24oKXtlLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwiYnMuc2Nyb2xsc3B5IiksZSh0aGlzLl9zY3JvbGxFbGVtZW50KS5vZmYoIi5icy5zY3JvbGxzcHkiKSx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5fc2Nyb2xsRWxlbWVudD1udWxsLHRoaXMuX2NvbmZpZz1udWxsLHRoaXMuX3NlbGVjdG9yPW51bGwsdGhpcy5fb2Zmc2V0cz1udWxsLHRoaXMuX3RhcmdldHM9bnVsbCx0aGlzLl9hY3RpdmVUYXJnZXQ9bnVsbCx0aGlzLl9zY3JvbGxIZWlnaHQ9bnVsbH0sbi5fZ2V0Q29uZmlnPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciIT10eXBlb2YodD1hKGEoe30scnQpLCJvYmplY3QiPT10eXBlb2YgdCYmdD90Ont9KSkudGFyZ2V0JiZjLmlzRWxlbWVudCh0LnRhcmdldCkpe3ZhciBuPWUodC50YXJnZXQpLmF0dHIoImlkIik7bnx8KG49Yy5nZXRVSUQob3QpLGUodC50YXJnZXQpLmF0dHIoImlkIixuKSksdC50YXJnZXQ9IiMiK259cmV0dXJuIGMudHlwZUNoZWNrQ29uZmlnKG90LHQsYXQpLHR9LG4uX2dldFNjcm9sbFRvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zY3JvbGxFbGVtZW50PT09d2luZG93P3RoaXMuX3Njcm9sbEVsZW1lbnQucGFnZVlPZmZzZXQ6dGhpcy5fc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3B9LG4uX2dldFNjcm9sbEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zY3JvbGxFbGVtZW50LnNjcm9sbEhlaWdodHx8TWF0aC5tYXgoZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCl9LG4uX2dldE9mZnNldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zY3JvbGxFbGVtZW50PT09d2luZG93P3dpbmRvdy5pbm5lckhlaWdodDp0aGlzLl9zY3JvbGxFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodH0sbi5fcHJvY2Vzcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFNjcm9sbFRvcCgpK3RoaXMuX2NvbmZpZy5vZmZzZXQsZT10aGlzLl9nZXRTY3JvbGxIZWlnaHQoKSxuPXRoaXMuX2NvbmZpZy5vZmZzZXQrZS10aGlzLl9nZXRPZmZzZXRIZWlnaHQoKTtpZih0aGlzLl9zY3JvbGxIZWlnaHQhPT1lJiZ0aGlzLnJlZnJlc2goKSx0Pj1uKXt2YXIgaT10aGlzLl90YXJnZXRzW3RoaXMuX3RhcmdldHMubGVuZ3RoLTFdO3RoaXMuX2FjdGl2ZVRhcmdldCE9PWkmJnRoaXMuX2FjdGl2YXRlKGkpfWVsc2V7aWYodGhpcy5fYWN0aXZlVGFyZ2V0JiZ0PHRoaXMuX29mZnNldHNbMF0mJnRoaXMuX29mZnNldHNbMF0+MClyZXR1cm4gdGhpcy5fYWN0aXZlVGFyZ2V0PW51bGwsdm9pZCB0aGlzLl9jbGVhcigpO2Zvcih2YXIgbz10aGlzLl9vZmZzZXRzLmxlbmd0aDtvLS07KXt0aGlzLl9hY3RpdmVUYXJnZXQhPT10aGlzLl90YXJnZXRzW29dJiZ0Pj10aGlzLl9vZmZzZXRzW29dJiYoInVuZGVmaW5lZCI9PXR5cGVvZiB0aGlzLl9vZmZzZXRzW28rMV18fHQ8dGhpcy5fb2Zmc2V0c1tvKzFdKSYmdGhpcy5fYWN0aXZhdGUodGhpcy5fdGFyZ2V0c1tvXSl9fX0sbi5fYWN0aXZhdGU9ZnVuY3Rpb24odCl7dGhpcy5fYWN0aXZlVGFyZ2V0PXQsdGhpcy5fY2xlYXIoKTt2YXIgbj10aGlzLl9zZWxlY3Rvci5zcGxpdCgiLCIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUrJ1tkYXRhLXRhcmdldD0iJyt0KyciXSwnK2UrJ1tocmVmPSInK3QrJyJdJ30pKSxpPWUoW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKG4uam9pbigiLCIpKSkpO2kuaGFzQ2xhc3MoImRyb3Bkb3duLWl0ZW0iKT8oaS5jbG9zZXN0KCIuZHJvcGRvd24iKS5maW5kKCIuZHJvcGRvd24tdG9nZ2xlIikuYWRkQ2xhc3MoImFjdGl2ZSIpLGkuYWRkQ2xhc3MoImFjdGl2ZSIpKTooaS5hZGRDbGFzcygiYWN0aXZlIiksaS5wYXJlbnRzKCIubmF2LCAubGlzdC1ncm91cCIpLnByZXYoIi5uYXYtbGluaywgLmxpc3QtZ3JvdXAtaXRlbSIpLmFkZENsYXNzKCJhY3RpdmUiKSxpLnBhcmVudHMoIi5uYXYsIC5saXN0LWdyb3VwIikucHJldigiLm5hdi1pdGVtIikuY2hpbGRyZW4oIi5uYXYtbGluayIpLmFkZENsYXNzKCJhY3RpdmUiKSksZSh0aGlzLl9zY3JvbGxFbGVtZW50KS50cmlnZ2VyKCJhY3RpdmF0ZS5icy5zY3JvbGxzcHkiLHtyZWxhdGVkVGFyZ2V0OnR9KX0sbi5fY2xlYXI9ZnVuY3Rpb24oKXtbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fc2VsZWN0b3IpKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsYXNzTGlzdC5jb250YWlucygiYWN0aXZlIil9KSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xhc3NMaXN0LnJlbW92ZSgiYWN0aXZlIil9KSl9LHQuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3ZhciBpPWUodGhpcykuZGF0YSgiYnMuc2Nyb2xsc3B5Iik7aWYoaXx8KGk9bmV3IHQodGhpcywib2JqZWN0Ij09dHlwZW9mIG4mJm4pLGUodGhpcykuZGF0YSgiYnMuc2Nyb2xsc3B5IixpKSksInN0cmluZyI9PXR5cGVvZiBuKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIGlbbl0pdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gbWV0aG9kIG5hbWVkICInK24rJyInKTtpW25dKCl9fSkpfSxvKHQsbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIjQuNS4wIn19LHtrZXk6IkRlZmF1bHQiLGdldDpmdW5jdGlvbigpe3JldHVybiBydH19XSksdH0oKTtlKHdpbmRvdykub24oImxvYWQuYnMuc2Nyb2xsc3B5LmRhdGEtYXBpIiwoZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1zcHk9InNjcm9sbCJdJykpLG49dC5sZW5ndGg7bi0tOyl7dmFyIGk9ZSh0W25dKTtsdC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoaSxpLmRhdGEoKSl9fSkpLGUuZm5bb3RdPWx0Ll9qUXVlcnlJbnRlcmZhY2UsZS5mbltvdF0uQ29uc3RydWN0b3I9bHQsZS5mbltvdF0ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuW290XT1zdCxsdC5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgY3Q9ZS5mbi50YWIsaHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2VsZW1lbnQ9dH12YXIgbj10LnByb3RvdHlwZTtyZXR1cm4gbi5zaG93PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJmUodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoImFjdGl2ZSIpfHxlKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKCJkaXNhYmxlZCIpKSl7dmFyIG4saSxvPWUodGhpcy5fZWxlbWVudCkuY2xvc2VzdCgiLm5hdiwgLmxpc3QtZ3JvdXAiKVswXSxzPWMuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtpZihvKXt2YXIgcj0iVUwiPT09by5ub2RlTmFtZXx8Ik9MIj09PW8ubm9kZU5hbWU/Ij4gbGkgPiAuYWN0aXZlIjoiLmFjdGl2ZSI7aT0oaT1lLm1ha2VBcnJheShlKG8pLmZpbmQocikpKVtpLmxlbmd0aC0xXX12YXIgYT1lLkV2ZW50KCJoaWRlLmJzLnRhYiIse3JlbGF0ZWRUYXJnZXQ6dGhpcy5fZWxlbWVudH0pLGw9ZS5FdmVudCgic2hvdy5icy50YWIiLHtyZWxhdGVkVGFyZ2V0Oml9KTtpZihpJiZlKGkpLnRyaWdnZXIoYSksZSh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKGwpLCFsLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYhYS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7cyYmKG49ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzKSksdGhpcy5fYWN0aXZhdGUodGhpcy5fZWxlbWVudCxvKTt2YXIgaD1mdW5jdGlvbigpe3ZhciBuPWUuRXZlbnQoImhpZGRlbi5icy50YWIiLHtyZWxhdGVkVGFyZ2V0OnQuX2VsZW1lbnR9KSxvPWUuRXZlbnQoInNob3duLmJzLnRhYiIse3JlbGF0ZWRUYXJnZXQ6aX0pO2UoaSkudHJpZ2dlcihuKSxlKHQuX2VsZW1lbnQpLnRyaWdnZXIobyl9O24/dGhpcy5fYWN0aXZhdGUobixuLnBhcmVudE5vZGUsaCk6aCgpfX19LG4uZGlzcG9zZT1mdW5jdGlvbigpe2UucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LCJicy50YWIiKSx0aGlzLl9lbGVtZW50PW51bGx9LG4uX2FjdGl2YXRlPWZ1bmN0aW9uKHQsbixpKXt2YXIgbz10aGlzLHM9KCFufHwiVUwiIT09bi5ub2RlTmFtZSYmIk9MIiE9PW4ubm9kZU5hbWU/ZShuKS5jaGlsZHJlbigiLmFjdGl2ZSIpOmUobikuZmluZCgiPiBsaSA+IC5hY3RpdmUiKSlbMF0scj1pJiZzJiZlKHMpLmhhc0NsYXNzKCJmYWRlIiksYT1mdW5jdGlvbigpe3JldHVybiBvLl90cmFuc2l0aW9uQ29tcGxldGUodCxzLGkpfTtpZihzJiZyKXt2YXIgbD1jLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHMpO2UocykucmVtb3ZlQ2xhc3MoInNob3ciKS5vbmUoYy5UUkFOU0lUSU9OX0VORCxhKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChsKX1lbHNlIGEoKX0sbi5fdHJhbnNpdGlvbkNvbXBsZXRlPWZ1bmN0aW9uKHQsbixpKXtpZihuKXtlKG4pLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTt2YXIgbz1lKG4ucGFyZW50Tm9kZSkuZmluZCgiPiAuZHJvcGRvd24tbWVudSAuYWN0aXZlIilbMF07byYmZShvKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksInRhYiI9PT1uLmdldEF0dHJpYnV0ZSgicm9sZSIpJiZuLnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsITEpfWlmKGUodCkuYWRkQ2xhc3MoImFjdGl2ZSIpLCJ0YWIiPT09dC5nZXRBdHRyaWJ1dGUoInJvbGUiKSYmdC5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLCEwKSxjLnJlZmxvdyh0KSx0LmNsYXNzTGlzdC5jb250YWlucygiZmFkZSIpJiZ0LmNsYXNzTGlzdC5hZGQoInNob3ciKSx0LnBhcmVudE5vZGUmJmUodC5wYXJlbnROb2RlKS5oYXNDbGFzcygiZHJvcGRvd24tbWVudSIpKXt2YXIgcz1lKHQpLmNsb3Nlc3QoIi5kcm9wZG93biIpWzBdO2lmKHMpe3ZhciByPVtdLnNsaWNlLmNhbGwocy5xdWVyeVNlbGVjdG9yQWxsKCIuZHJvcGRvd24tdG9nZ2xlIikpO2UocikuYWRkQ2xhc3MoImFjdGl2ZSIpfXQuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIiwhMCl9aSYmaSgpfSx0Ll9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt2YXIgaT1lKHRoaXMpLG89aS5kYXRhKCJicy50YWIiKTtpZihvfHwobz1uZXcgdCh0aGlzKSxpLmRhdGEoImJzLnRhYiIsbykpLCJzdHJpbmciPT10eXBlb2Ygbil7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBvW25dKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCAiJytuKyciJyk7b1tuXSgpfX0pKX0sbyh0LG51bGwsW3trZXk6IlZFUlNJT04iLGdldDpmdW5jdGlvbigpe3JldHVybiI0LjUuMCJ9fV0pLHR9KCk7ZShkb2N1bWVudCkub24oImNsaWNrLmJzLnRhYi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0idGFiIl0sIFtkYXRhLXRvZ2dsZT0icGlsbCJdLCBbZGF0YS10b2dnbGU9Imxpc3QiXScsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSxodC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoZSh0aGlzKSwic2hvdyIpfSkpLGUuZm4udGFiPWh0Ll9qUXVlcnlJbnRlcmZhY2UsZS5mbi50YWIuQ29uc3RydWN0b3I9aHQsZS5mbi50YWIubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuLnRhYj1jdCxodC5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgdXQ9ZS5mbi50b2FzdCxkdD17YW5pbWF0aW9uOiJib29sZWFuIixhdXRvaGlkZToiYm9vbGVhbiIsZGVsYXk6Im51bWJlciJ9LGZ0PXthbmltYXRpb246ITAsYXV0b2hpZGU6ITAsZGVsYXk6NTAwfSxndD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyhlKSx0aGlzLl90aW1lb3V0PW51bGwsdGhpcy5fc2V0TGlzdGVuZXJzKCl9dmFyIG49dC5wcm90b3R5cGU7cmV0dXJuIG4uc2hvdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1lLkV2ZW50KCJzaG93LmJzLnRvYXN0Iik7aWYoZSh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKG4pLCFuLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt0aGlzLl9jb25maWcuYW5pbWF0aW9uJiZ0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoImZhZGUiKTt2YXIgaT1mdW5jdGlvbigpe3QuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgic2hvd2luZyIpLHQuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZCgic2hvdyIpLGUodC5fZWxlbWVudCkudHJpZ2dlcigic2hvd24uYnMudG9hc3QiKSx0Ll9jb25maWcuYXV0b2hpZGUmJih0Ll90aW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dC5oaWRlKCl9KSx0Ll9jb25maWcuZGVsYXkpKX07aWYodGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJoaWRlIiksYy5yZWZsb3codGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJzaG93aW5nIiksdGhpcy5fY29uZmlnLmFuaW1hdGlvbil7dmFyIG89Yy5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtlKHRoaXMuX2VsZW1lbnQpLm9uZShjLlRSQU5TSVRJT05fRU5ELGkpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKG8pfWVsc2UgaSgpfX0sbi5oaWRlPWZ1bmN0aW9uKCl7aWYodGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoInNob3ciKSl7dmFyIHQ9ZS5FdmVudCgiaGlkZS5icy50b2FzdCIpO2UodGhpcy5fZWxlbWVudCkudHJpZ2dlcih0KSx0LmlzRGVmYXVsdFByZXZlbnRlZCgpfHx0aGlzLl9jbG9zZSgpfX0sbi5kaXNwb3NlPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpLHRoaXMuX3RpbWVvdXQ9bnVsbCx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygic2hvdyIpJiZ0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoInNob3ciKSxlKHRoaXMuX2VsZW1lbnQpLm9mZigiY2xpY2suZGlzbWlzcy5icy50b2FzdCIpLGUucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LCJicy50b2FzdCIpLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLl9jb25maWc9bnVsbH0sbi5fZ2V0Q29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiB0PWEoYShhKHt9LGZ0KSxlKHRoaXMuX2VsZW1lbnQpLmRhdGEoKSksIm9iamVjdCI9PXR5cGVvZiB0JiZ0P3Q6e30pLGMudHlwZUNoZWNrQ29uZmlnKCJ0b2FzdCIsdCx0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKSx0fSxuLl9zZXRMaXN0ZW5lcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2UodGhpcy5fZWxlbWVudCkub24oImNsaWNrLmRpc21pc3MuYnMudG9hc3QiLCdbZGF0YS1kaXNtaXNzPSJ0b2FzdCJdJywoZnVuY3Rpb24oKXtyZXR1cm4gdC5oaWRlKCl9KSl9LG4uX2Nsb3NlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWZ1bmN0aW9uKCl7dC5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJoaWRlIiksZSh0Ll9lbGVtZW50KS50cmlnZ2VyKCJoaWRkZW4uYnMudG9hc3QiKX07aWYodGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJzaG93IiksdGhpcy5fY29uZmlnLmFuaW1hdGlvbil7dmFyIGk9Yy5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtlKHRoaXMuX2VsZW1lbnQpLm9uZShjLlRSQU5TSVRJT05fRU5ELG4pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGkpfWVsc2UgbigpfSx0Ll9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt2YXIgaT1lKHRoaXMpLG89aS5kYXRhKCJicy50b2FzdCIpO2lmKG98fChvPW5ldyB0KHRoaXMsIm9iamVjdCI9PXR5cGVvZiBuJiZuKSxpLmRhdGEoImJzLnRvYXN0IixvKSksInN0cmluZyI9PXR5cGVvZiBuKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIG9bbl0pdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gbWV0aG9kIG5hbWVkICInK24rJyInKTtvW25dKHRoaXMpfX0pKX0sbyh0LG51bGwsW3trZXk6IlZFUlNJT04iLGdldDpmdW5jdGlvbigpe3JldHVybiI0LjUuMCJ9fSx7a2V5OiJEZWZhdWx0VHlwZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGR0fX0se2tleToiRGVmYXVsdCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ0fX1dKSx0fSgpO2UuZm4udG9hc3Q9Z3QuX2pRdWVyeUludGVyZmFjZSxlLmZuLnRvYXN0LkNvbnN0cnVjdG9yPWd0LGUuZm4udG9hc3Qubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuLnRvYXN0PXV0LGd0Ll9qUXVlcnlJbnRlcmZhY2V9LHQuQWxlcnQ9ZCx0LkJ1dHRvbj1nLHQuQ2Fyb3VzZWw9RSx0LkNvbGxhcHNlPUQsdC5Ecm9wZG93bj1qLHQuTW9kYWw9Uix0LlBvcG92ZXI9aXQsdC5TY3JvbGxzcHk9bHQsdC5UYWI9aHQsdC5Ub2FzdD1ndCx0LlRvb2x0aXA9JCx0LlV0aWw9YyxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPWJvb3RzdHJhcC5taW4uanMubWFw" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>